From 1d05caf866253d135f5298e9cd939366d343e2cf Mon Sep 17 00:00:00 2001 From: g_brzhezinskiy Date: Sat, 2 Jan 2021 12:51:45 +0300 Subject: [PATCH] init --- lua/autorun/client/addons_checker.lua | 452 + lua/autorun/gm_metrostroi_content.lua | 22 + lua/autorun/metrostroi.lua | 998 + lua/autorun/prop_button.lua | 54 + lua/autorun/prop_float_ex.lua | 59 + lua/autorun/your_skin.txt | 21 + .../_obsolete/gmod_subway_ai/cl_init.lua | 131 + .../_obsolete/gmod_subway_ai/init.lua | 538 + .../_obsolete/gmod_subway_ai/shared.lua | 24 + .../_obsolete/gmod_subway_e/cl_init.lua | 1881 ++ lua/entities/_obsolete/gmod_subway_e/init.lua | 1007 + .../_obsolete/gmod_subway_e/shared.lua | 86 + .../_obsolete/gmod_subway_em/cl_init.lua | 995 + .../_obsolete/gmod_subway_em/init.lua | 896 + .../_obsolete/gmod_subway_em/shared.lua | 91 + .../_obsolete/gmod_subway_em508/cl_init.lua | 1593 ++ .../_obsolete/gmod_subway_em508/init.lua | 857 + .../_obsolete/gmod_subway_em508/shared.lua | 604 + .../gmod_subway_em508_int/cl_init.lua | 1301 + .../_obsolete/gmod_subway_em508_int/init.lua | 861 + .../gmod_subway_em508_int/shared.lua | 538 + .../_obsolete/gmod_subway_ema/cl_init.lua | 1640 ++ .../_obsolete/gmod_subway_ema/init.lua | 958 + .../_obsolete/gmod_subway_ema/shared.lua | 106 + .../_obsolete/gmod_subway_ema508t/cl_init.lua | 353 + .../_obsolete/gmod_subway_ema508t/init.lua | 347 + .../_obsolete/gmod_subway_ema508t/shared.lua | 82 + .../_obsolete/gmod_subway_ezh3ru1/cl_init.lua | 1610 ++ .../_obsolete/gmod_subway_ezh3ru1/init.lua | 979 + .../_obsolete/gmod_subway_ezh3ru1/shared.lua | 116 + .../_obsolete/gmod_track_arm_/cl_init.lua | 700 + .../_obsolete/gmod_track_arm_/init.lua | 169 + .../_obsolete/gmod_track_arm_/shared.lua | 656 + .../_obsolete/gmod_track_arm__/cl_init.lua | 700 + .../_obsolete/gmod_track_arm__/init.lua | 189 + .../_obsolete/gmod_track_arm__/shared.lua | 753 + .../gmod_mus_clock_analog/cl_init.lua | 46 + lua/entities/gmod_mus_clock_analog/init.lua | 12 + lua/entities/gmod_mus_clock_analog/shared.lua | 8 + lua/entities/gmod_subway_81-501/cl_init.lua | 1387 ++ lua/entities/gmod_subway_81-501/init.lua | 515 + lua/entities/gmod_subway_81-501/shared.lua | 456 + lua/entities/gmod_subway_81-502/cl_init.lua | 2602 ++ lua/entities/gmod_subway_81-502/init.lua | 634 + lua/entities/gmod_subway_81-502/shared.lua | 577 + lua/entities/gmod_subway_81-702/cl_init.lua | 1669 ++ lua/entities/gmod_subway_81-702/init.lua | 477 + lua/entities/gmod_subway_81-702/shared.lua | 697 + .../gmod_subway_81-702_int/cl_init.lua | 1383 + lua/entities/gmod_subway_81-702_int/init.lua | 455 + .../gmod_subway_81-702_int/shared.lua | 633 + lua/entities/gmod_subway_81-703/cl_init.lua | 1613 ++ lua/entities/gmod_subway_81-703/init.lua | 498 + lua/entities/gmod_subway_81-703/shared.lua | 637 + lua/entities/gmod_subway_81-7036/cl_init.lua | 181 + lua/entities/gmod_subway_81-7036/init.lua | 46 + lua/entities/gmod_subway_81-7036/shared.lua | 24 + lua/entities/gmod_subway_81-7037/cl_init.lua | 53 + lua/entities/gmod_subway_81-7037/init.lua | 38 + lua/entities/gmod_subway_81-7037/shared.lua | 24 + .../gmod_subway_81-703_int/cl_init.lua | 1511 ++ lua/entities/gmod_subway_81-703_int/init.lua | 480 + .../gmod_subway_81-703_int/shared.lua | 607 + .../gmod_subway_81-714_lvz/cl_init.lua | 1278 + lua/entities/gmod_subway_81-714_lvz/init.lua | 483 + .../gmod_subway_81-714_lvz/shared.lua | 405 + .../gmod_subway_81-714_mvm/cl_init.lua | 1332 + lua/entities/gmod_subway_81-714_mvm/init.lua | 465 + .../gmod_subway_81-714_mvm/shared.lua | 435 + .../gmod_subway_81-717_lvz/cl_init.lua | 3794 +++ lua/entities/gmod_subway_81-717_lvz/init.lua | 914 + .../gmod_subway_81-717_lvz/shared.lua | 1041 + .../gmod_subway_81-717_lvz_custom.lua | 114 + .../gmod_subway_81-717_mvm/cl_init.lua | 3505 +++ lua/entities/gmod_subway_81-717_mvm/init.lua | 923 + .../gmod_subway_81-717_mvm/shared.lua | 1055 + .../gmod_subway_81-717_mvm_custom.lua | 111 + lua/entities/gmod_subway_81-718/cl_init.lua | 2601 ++ lua/entities/gmod_subway_81-718/init.lua | 732 + lua/entities/gmod_subway_81-718/shared.lua | 559 + lua/entities/gmod_subway_81-719/cl_init.lua | 1225 + lua/entities/gmod_subway_81-719/init.lua | 409 + lua/entities/gmod_subway_81-719/shared.lua | 257 + lua/entities/gmod_subway_81-720/cl_init.lua | 2076 ++ lua/entities/gmod_subway_81-720/init.lua | 512 + lua/entities/gmod_subway_81-720/shared.lua | 500 + lua/entities/gmod_subway_81-721/cl_init.lua | 774 + lua/entities/gmod_subway_81-721/init.lua | 200 + lua/entities/gmod_subway_81-721/shared.lua | 166 + lua/entities/gmod_subway_81-722/cl_init.lua | 1752 ++ lua/entities/gmod_subway_81-722/init.lua | 489 + lua/entities/gmod_subway_81-722/shared.lua | 390 + lua/entities/gmod_subway_81-723/cl_init.lua | 790 + lua/entities/gmod_subway_81-723/init.lua | 227 + lua/entities/gmod_subway_81-723/shared.lua | 190 + lua/entities/gmod_subway_81-724/cl_init.lua | 753 + lua/entities/gmod_subway_81-724/init.lua | 201 + lua/entities/gmod_subway_81-724/shared.lua | 164 + lua/entities/gmod_subway_base/cl_init.lua | 2721 ++ lua/entities/gmod_subway_base/init.lua | 2583 ++ lua/entities/gmod_subway_base/shared.lua | 624 + lua/entities/gmod_subway_em508/cl_init.lua | 1978 ++ lua/entities/gmod_subway_em508/init.lua | 559 + lua/entities/gmod_subway_em508/shared.lua | 681 + lua/entities/gmod_subway_em508t/cl_init.lua | 1321 + lua/entities/gmod_subway_em508t/init.lua | 463 + lua/entities/gmod_subway_em508t/shared.lua | 617 + lua/entities/gmod_subway_ezh/cl_init.lua | 2380 ++ lua/entities/gmod_subway_ezh/init.lua | 603 + lua/entities/gmod_subway_ezh/shared.lua | 688 + lua/entities/gmod_subway_ezh1/cl_init.lua | 1258 + lua/entities/gmod_subway_ezh1/init.lua | 471 + lua/entities/gmod_subway_ezh1/shared.lua | 589 + lua/entities/gmod_subway_ezh3/cl_init.lua | 2041 ++ lua/entities/gmod_subway_ezh3/init.lua | 577 + lua/entities/gmod_subway_ezh3/shared.lua | 714 + lua/entities/gmod_subway_tatra_t3/cl_init.lua | 17 + lua/entities/gmod_subway_tatra_t3/init.lua | 94 + lua/entities/gmod_subway_tatra_t3/shared.lua | 16 + lua/entities/gmod_track_arm/cl_init.lua | 458 + lua/entities/gmod_track_arm/init.lua | 207 + lua/entities/gmod_track_arm/shared.lua | 836 + .../gmod_track_autodrive_plate/cl_init.lua | 56 + .../gmod_track_autodrive_plate/init.lua | 197 + .../gmod_track_autodrive_plate/shared.lua | 19 + .../gmod_track_clock_interval/cl_init.lua | 66 + .../gmod_track_clock_interval/init.lua | 103 + .../gmod_track_clock_interval/shared.lua | 11 + .../gmod_track_clock_small/cl_init.lua | 98 + lua/entities/gmod_track_clock_small/init.lua | 102 + .../gmod_track_clock_small/shared.lua | 10 + .../gmod_track_clock_time/cl_init.lua | 56 + lua/entities/gmod_track_clock_time/init.lua | 20 + lua/entities/gmod_track_clock_time/shared.lua | 6 + .../gmod_track_controller/cl_init.lua | 53 + lua/entities/gmod_track_controller/init.lua | 29 + lua/entities/gmod_track_controller/shared.lua | 6 + .../gmod_track_horlift_signal/cl_init.lua | 157 + .../gmod_track_horlift_signal/init.lua | 33 + .../gmod_track_horlift_signal/shared.lua | 37 + .../gmod_track_mus_elektronika7/cl_init.lua | 47 + .../gmod_track_mus_elektronika7/init.lua | 13 + .../gmod_track_mus_elektronika7/shared.lua | 6 + lua/entities/gmod_track_pa_marker/cl_init.lua | 49 + lua/entities/gmod_track_pa_marker/init.lua | 50 + lua/entities/gmod_track_pa_marker/shared.lua | 10 + lua/entities/gmod_track_platform/cl_init.lua | 409 + lua/entities/gmod_track_platform/init.lua | 617 + lua/entities/gmod_track_platform/shared.lua | 14 + .../gmod_track_pneumatic_snake/cl_init.lua | 7 + .../gmod_track_pneumatic_snake/init.lua | 78 + .../gmod_track_pneumatic_snake/shared.lua | 6 + .../gmod_track_powermeter/cl_init.lua | 62 + lua/entities/gmod_track_powermeter/init.lua | 60 + lua/entities/gmod_track_powermeter/shared.lua | 13 + lua/entities/gmod_track_pui/cl_init.lua | 113 + lua/entities/gmod_track_pui/init.lua | 33 + lua/entities/gmod_track_pui/shared.lua | 19 + lua/entities/gmod_track_sign/cl_init.lua | 217 + lua/entities/gmod_track_sign/init.lua | 13 + lua/entities/gmod_track_sign/shared.lua | 7 + lua/entities/gmod_track_signal/cl_init.lua | 677 + lua/entities/gmod_track_signal/init.lua | 724 + lua/entities/gmod_track_signal/shared.lua | 296 + .../gmod_track_signal_controller/cl_init.lua | 6 + .../gmod_track_signal_controller/init.lua | 145 + .../gmod_track_signal_controller/shared.lua | 10 + lua/entities/gmod_track_signs/cl_init.lua | 111 + lua/entities/gmod_track_signs/init.lua | 22 + lua/entities/gmod_track_signs/shared.lua | 511 + lua/entities/gmod_track_switch/cl_init.lua | 26 + lua/entities/gmod_track_switch/init.lua | 130 + lua/entities/gmod_track_switch/shared.lua | 10 + lua/entities/gmod_track_udochka/cl_init.lua | 7 + lua/entities/gmod_track_udochka/init.lua | 61 + lua/entities/gmod_track_udochka/shared.lua | 6 + .../gmod_train_autodrive_coil/cl_init.lua | 21 + .../gmod_train_autodrive_coil/init.lua | 58 + .../gmod_train_autodrive_coil/shared.lua | 13 + lua/entities/gmod_train_bogey/cl_init.lua | 440 + lua/entities/gmod_train_bogey/init.lua | 719 + lua/entities/gmod_train_bogey/shared.lua | 62 + lua/entities/gmod_train_couple/cl_init.lua | 177 + lua/entities/gmod_train_couple/init.lua | 323 + lua/entities/gmod_train_couple/shared.lua | 10 + lua/entities/gmod_train_dlight.lua | 110 + lua/entities/gmod_train_door/cl_init.lua | 53 + lua/entities/gmod_train_door/init.lua | 29 + lua/entities/gmod_train_door/shared.lua | 7 + .../gmod_train_sound_provider/cl_init.lua | 53 + .../gmod_train_sound_provider/init.lua | 29 + .../gmod_train_sound_provider/shared.lua | 7 + lua/entities/gmod_train_spawner/cl_init.lua | 642 + lua/entities/gmod_train_spawner/init.lua | 39 + lua/entities/gmod_train_spawner/shared.lua | 8 + .../gmod_train_special_box/cl_init.lua | 39 + lua/entities/gmod_train_special_box/init.lua | 94 + .../gmod_train_special_box/shared.lua | 11 + lua/entities/gmod_train_sprite.lua | 136 + lua/entities/gmod_train_wheels/cl_init.lua | 19 + lua/entities/gmod_train_wheels/init.lua | 49 + lua/entities/gmod_train_wheels/shared.lua | 10 + lua/metrostroi/_obsolete/_turbostroi_v2_old | 489 + lua/metrostroi/cl_cpanel.lua | 89 + lua/metrostroi/cl_debugger.lua | 677 + lua/metrostroi/cl_language.lua | 459 + lua/metrostroi/cl_trackeditor.lua | 188 + lua/metrostroi/cl_trainedit.lua | 603 + lua/metrostroi/cl_util.lua | 1010 + lua/metrostroi/convars.lua | 116 + lua/metrostroi/maps/b46_lite.lua | 45 + lua/metrostroi/maps/b50.lua | 1857 ++ lua/metrostroi/maps/crimson.lua | 41 + lua/metrostroi/maps/crossline.lua | 854 + lua/metrostroi/maps/crossline_m12.lua | 817 + lua/metrostroi/maps/crossline_r.lua | 964 + lua/metrostroi/maps/loopline.lua | 579 + lua/metrostroi/maps/orange.lua | 879 + lua/metrostroi/sh_arm.lua | 125 + lua/metrostroi/sh_failsim.lua | 389 + lua/metrostroi/sh_rerail.lua | 313 + lua/metrostroi/sh_time.lua | 433 + lua/metrostroi/sh_util.lua | 145 + lua/metrostroi/skins/default.lua | 1054 + lua/metrostroi/sv_centralisation.lua | 315 + lua/metrostroi/sv_debug.lua | 126 + lua/metrostroi/sv_debugger.lua | 118 + lua/metrostroi/sv_hs_layout.lua | 959 + lua/metrostroi/sv_language.lua | 60 + lua/metrostroi/sv_railnetwork.lua | 1702 ++ lua/metrostroi/sv_schedule.lua | 257 + lua/metrostroi/sv_signs.lua | 306 + lua/metrostroi/sv_socket.lua | 77 + lua/metrostroi/sv_telemetry.lua | 304 + lua/metrostroi/sv_trackeditor.lua | 359 + lua/metrostroi/sv_turbostroi.lua | 452 + lua/metrostroi/sv_turbostroi_railnetwork.lua | 1299 + lua/metrostroi/sv_turbostroi_v2.lua | 506 + lua/metrostroi/sv_util.lua | 1029 + .../systems/_obsolete/_ys_electric_ | 616 + .../systems/_obsolete/sys_81_502_upo.lua | 144 + .../systems/_obsolete/sys_81_508_electric.lua | 30 + .../systems/_obsolete/sys_81_508_panel.lua | 111 + .../systems/_obsolete/sys_81_701_electric.lua | 30 + .../systems/_obsolete/sys_81_704_electric.lua | 30 + .../systems/_obsolete/sys_81_704_panel.lua | 111 + .../systems/_obsolete/sys_81_705_electric.lua | 30 + .../systems/_obsolete/sys_81_705_panel.lua | 113 + .../systems/_obsolete/sys_81_707_electric.lua | 30 + .../systems/_obsolete/sys_81_708_panel.lua | 92 + .../_obsolete/sys_81_710ru1_electric.lua | 30 + .../systems/_obsolete/sys_81_710ru1_panel.lua | 146 + .../systems/_obsolete/sys_81_717_kv_70AV.lua | 232 + .../systems/_obsolete/sys_81_717_pam.lua | 3046 +++ .../_obsolete/sys_81_717_puav_normal.lua | 736 + .../systems/_obsolete/sys_81_718_bkbd.lua | 270 + .../systems/_obsolete/sys_81_718_electric.lu | 784 + .../systems/_obsolete/sys_81_720_asnp.lua | 737 + .../systems/_obsolete/sys_81_720_tr_7b.lua | 35 + .../systems/_obsolete/sys_81_722_bars.lua | 250 + .../systems/_obsolete/sys_alstest.lua | 106 + .../systems/_obsolete/sys_announcer.lua | 249 + .../systems/_obsolete/sys_ars_dnepr_spb.lua | 333 + .../systems/_obsolete/sys_ars_ezh3.lua | 366 + lua/metrostroi/systems/_obsolete/sys_asnp.lua | 945 + .../systems/_obsolete/sys_autodrive.lua | 723 + lua/metrostroi/systems/_obsolete/sys_bars.lua | 568 + .../systems/_obsolete/sys_bars_717.lua | 324 + .../systems/_obsolete/sys_bars_em.lua | 575 + .../systems/_obsolete/sys_dip_01k.lua | 78 + lua/metrostroi/systems/_obsolete/sys_dura.lua | 96 + .../systems/_obsolete/sys_gen_int_710.lua | 757 + .../systems/_obsolete/sys_gen_res_717_5m.lua | 202 + .../systems/_obsolete/sys_kf_47a6.lua | 96 + .../systems/_obsolete/sys_kf_47a7.lua | 96 + .../systems/_obsolete/sys_kv_70_lite.lua | 196 + .../systems/_obsolete/sys_motorola.lua | 516 + .../systems/_obsolete/sys_noars.lua | 108 + .../systems/_obsolete/sys_pa-ksd-m.lua | 2282 ++ .../systems/_obsolete/sys_pa-ksd.lua | 1214 + lua/metrostroi/systems/_obsolete/sys_pa-m.lua | 1550 ++ lua/metrostroi/systems/_obsolete/sys_pmp.lua | 92 + lua/metrostroi/systems/_obsolete/sys_puav.lu | 490 + lua/metrostroi/systems/_obsolete/sys_rri.lua | 215 + .../systems/_obsolete/sys_tr_7b.lua | 50 + lua/metrostroi/systems/_obsolete/sys_upo.lua | 256 + .../systems/sys_81_501_electric.lua | 436 + lua/metrostroi/systems/sys_81_501_panel.lua | 68 + lua/metrostroi/systems/sys_81_502_ars.lua | 189 + lua/metrostroi/systems/sys_81_502_bps.lua | 73 + .../systems/sys_81_502_electric.lua | 807 + lua/metrostroi/systems/sys_81_502_ksaup.lua | 212 + lua/metrostroi/systems/sys_81_502_panel.lua | 121 + lua/metrostroi/systems/sys_81_508_panel.lua | 87 + lua/metrostroi/systems/sys_81_508_uks.lua | 41 + .../systems/sys_81_508t_electric.lua | 298 + lua/metrostroi/systems/sys_81_508t_panel.lua | 61 + .../systems/sys_81_702_electric.lua | 515 + lua/metrostroi/systems/sys_81_702_panel.lua | 72 + .../systems/sys_81_702_pneumatic.lua | 605 + .../systems/sys_81_703_electric.lua | 842 + lua/metrostroi/systems/sys_81_703_kf_47a.lua | 91 + lua/metrostroi/systems/sys_81_703_panel.lua | 85 + .../systems/sys_81_703_pneumatic.lua | 649 + .../systems/sys_81_703i_electric.lua | 474 + lua/metrostroi/systems/sys_81_707_panel.lua | 104 + .../systems/sys_81_710_electric.lua | 584 + lua/metrostroi/systems/sys_81_710_panel.lua | 114 + .../systems/sys_81_714_electric.lua | 403 + lua/metrostroi/systems/sys_81_714_panel.lua | 115 + lua/metrostroi/systems/sys_81_717_bars.lua | 256 + .../systems/sys_81_717_electric.lua | 1175 + lua/metrostroi/systems/sys_81_717_pam.lua | 3415 +++ lua/metrostroi/systems/sys_81_717_pam_vv.lua | 59 + lua/metrostroi/systems/sys_81_717_panel.lua | 259 + .../systems/sys_81_717_pneumatic.lua | 728 + lua/metrostroi/systems/sys_81_717_puav.lua | 765 + .../systems/sys_81_717lvz_panel.lua | 232 + lua/metrostroi/systems/sys_81_718_battery.lua | 35 + lua/metrostroi/systems/sys_81_718_bbe.lua | 62 + lua/metrostroi/systems/sys_81_718_bkbd.lua | 313 + lua/metrostroi/systems/sys_81_718_bkcu.lua | 64 + lua/metrostroi/systems/sys_81_718_bkva.lua | 29 + lua/metrostroi/systems/sys_81_718_bska.lua | 35 + lua/metrostroi/systems/sys_81_718_bup.lua | 236 + lua/metrostroi/systems/sys_81_718_buv.lua | 289 + lua/metrostroi/systems/sys_81_718_buvs.lua | 40 + lua/metrostroi/systems/sys_81_718_bva.lua | 47 + lua/metrostroi/systems/sys_81_718_bzos.lua | 33 + .../systems/sys_81_718_electric.lua | 882 + lua/metrostroi/systems/sys_81_718_kr.lua | 67 + lua/metrostroi/systems/sys_81_718_kru.lua | 67 + lua/metrostroi/systems/sys_81_718_panel.lua | 240 + .../systems/sys_81_718_pneumatic.lua | 675 + lua/metrostroi/systems/sys_81_718_ptti.lua | 251 + .../systems/sys_81_718_route_number.lua | 75 + .../systems/sys_81_719_electric.lua | 452 + lua/metrostroi/systems/sys_81_719_panel.lua | 80 + .../systems/sys_81_71_announcer.lua | 163 + lua/metrostroi/systems/sys_81_71_asnp.lua | 844 + lua/metrostroi/systems/sys_81_71_asnp_vv.lua | 22 + .../systems/sys_81_71_last_station.lua | 69 + .../systems/sys_81_71_route_number.lua | 70 + lua/metrostroi/systems/sys_81_71_rri.lua | 535 + lua/metrostroi/systems/sys_81_71_rri_vv.lua | 22 + lua/metrostroi/systems/sys_81_71_upo.lua | 152 + lua/metrostroi/systems/sys_81_720_bars.lua | 313 + lua/metrostroi/systems/sys_81_720_bpti.lua | 223 + lua/metrostroi/systems/sys_81_720_bukp.lua | 1168 + lua/metrostroi/systems/sys_81_720_buv.lua | 282 + .../systems/sys_81_720_electric.lua | 526 + lua/metrostroi/systems/sys_81_720_horn.lua | 53 + .../systems/sys_81_720_igla_cbki2.lua | 426 + .../systems/sys_81_720_igla_pcbk.lua | 101 + lua/metrostroi/systems/sys_81_720_panel.lua | 218 + .../systems/sys_81_720_passscheme.lua | 41 + .../systems/sys_81_720_pneumatic.lua | 562 + lua/metrostroi/systems/sys_81_720_rv.lua | 120 + lua/metrostroi/systems/sys_81_720_ticker.lua | 172 + lua/metrostroi/systems/sys_81_721_panel.lua | 68 + .../systems/sys_81_722_asyncinverter.lua | 305 + lua/metrostroi/systems/sys_81_722_bars.lua | 209 + lua/metrostroi/systems/sys_81_722_bukp.lua | 449 + lua/metrostroi/systems/sys_81_722_bukv.lua | 317 + .../systems/sys_81_722_electric.lua | 328 + lua/metrostroi/systems/sys_81_722_horn.lua | 53 + lua/metrostroi/systems/sys_81_722_mfdu.lua | 1662 ++ lua/metrostroi/systems/sys_81_722_panel.lua | 265 + .../systems/sys_81_722_passscheme.lua | 37 + .../systems/sys_81_722_pneumatic.lua | 581 + .../systems/sys_81_722_routenumber.lua | 231 + .../systems/sys_81_722_sarmat_upo.lua | 1092 + lua/metrostroi/systems/sys_81_722_tickers.lua | 176 + lua/metrostroi/systems/sys_81_722_upi.lua | 46 + lua/metrostroi/systems/sys_81_723_panel.lua | 61 + lua/metrostroi/systems/sys_81_724_panel.lua | 60 + .../systems/sys_81_740_electric.lua | 60 + lua/metrostroi/systems/sys_81_740_panel.lua | 60 + .../systems/sys_als_ars_bis200a.lua | 106 + lua/metrostroi/systems/sys_als_ars_blpm.lua | 132 + lua/metrostroi/systems/sys_als_ars_bsm.lua | 63 + lua/metrostroi/systems/sys_als_ars_bum.lua | 60 + lua/metrostroi/systems/sys_als_ars_dnepr.lua | 325 + lua/metrostroi/systems/sys_als_ars_ezh3.lua | 285 + lua/metrostroi/systems/sys_alscoil.lua | 171 + lua/metrostroi/systems/sys_ars_mp.lua | 300 + lua/metrostroi/systems/sys_battery.lua | 46 + lua/metrostroi/systems/sys_bpsn.lua | 58 + lua/metrostroi/systems/sys_bv_630.lua | 36 + lua/metrostroi/systems/sys_dk_104g.lua | 118 + lua/metrostroi/systems/sys_dk_108d.lua | 119 + lua/metrostroi/systems/sys_dk_116a.lua | 105 + lua/metrostroi/systems/sys_dk_117dm.lua | 107 + lua/metrostroi/systems/sys_dk_120am.lua | 111 + lua/metrostroi/systems/sys_ekg.lua | 136 + lua/metrostroi/systems/sys_ekg_17a.lua | 47 + lua/metrostroi/systems/sys_ekg_17b.lua | 48 + lua/metrostroi/systems/sys_ekg_18a.lua | 46 + lua/metrostroi/systems/sys_ekg_18b.lua | 46 + lua/metrostroi/systems/sys_electric.lua | 510 + lua/metrostroi/systems/sys_failsim.lua | 41 + lua/metrostroi/systems/sys_gen_res_702c.lua | 206 + lua/metrostroi/systems/sys_gen_res_702o.lua | 203 + lua/metrostroi/systems/sys_gen_res_703.lua | 390 + lua/metrostroi/systems/sys_gen_res_710.lua | 325 + lua/metrostroi/systems/sys_gen_res_717.lua | 217 + lua/metrostroi/systems/sys_gen_res_717_s.lua | 213 + lua/metrostroi/systems/sys_horn.lua | 51 + lua/metrostroi/systems/sys_igla_cbki1.lua | 562 + lua/metrostroi/systems/sys_igla_cbki2.lua | 491 + lua/metrostroi/systems/sys_igla_pcbk.lua | 108 + lua/metrostroi/systems/sys_ipav.lua | 111 + lua/metrostroi/systems/sys_kf_47a.lua | 95 + lua/metrostroi/systems/sys_kf_47a1.lua | 103 + lua/metrostroi/systems/sys_kf_50a.lua | 28 + lua/metrostroi/systems/sys_kf_6a.lua | 58 + lua/metrostroi/systems/sys_kf_6b.lua | 59 + lua/metrostroi/systems/sys_kf_7a.lua | 20 + lua/metrostroi/systems/sys_kru.lua | 133 + lua/metrostroi/systems/sys_kv_20.lua | 207 + lua/metrostroi/systems/sys_kv_35.lua | 210 + lua/metrostroi/systems/sys_kv_40.lua | 216 + lua/metrostroi/systems/sys_kv_55.lua | 229 + lua/metrostroi/systems/sys_kv_66.lua | 214 + lua/metrostroi/systems/sys_kv_70.lua | 237 + lua/metrostroi/systems/sys_lk_753b.lua | 16 + lua/metrostroi/systems/sys_lk_753v.lua | 16 + lua/metrostroi/systems/sys_lk_755a.lua | 20 + lua/metrostroi/systems/sys_pkg_17b.lua | 52 + lua/metrostroi/systems/sys_pkg_758b.lua | 133 + lua/metrostroi/systems/sys_pkg_758v.lua | 50 + lua/metrostroi/systems/sys_pkg_759b.lua | 106 + lua/metrostroi/systems/sys_pkg_759v.lua | 30 + lua/metrostroi/systems/sys_pkg_761.lua | 83 + lua/metrostroi/systems/sys_pr_109a.lua | 42 + lua/metrostroi/systems/sys_pr_124b.lua | 45 + lua/metrostroi/systems/sys_pr_14x_panels.lua | 40 + lua/metrostroi/systems/sys_pr_722d.lua | 50 + lua/metrostroi/systems/sys_pru_502.lua | 24 + lua/metrostroi/systems/sys_relay.lua | 348 + lua/metrostroi/systems/sys_sbpp.lua | 361 + lua/metrostroi/systems/sys_tatra_systems.lua | 33 + lua/metrostroi/systems/sys_telemetry.lua | 86 + lua/metrostroi/systems/sys_tr_3b.lua | 49 + lua/metrostroi/systems/sys_upps.lua | 96 + lua/metrostroi/systems/sys_upps_vv.lua | 21 + lua/metrostroi/systems/sys_yak_31a.lua | 30 + lua/metrostroi/systems/sys_yak_36.lua | 18 + lua/metrostroi/systems/sys_yak_37a.lua | 31 + lua/metrostroi/systems/sys_yak_37e.lua | 32 + lua/metrostroi/systems/sys_yak_4k.lua | 20 + lua/metrostroi/systems/sys_yap_57.lua | 16 + lua/metrostroi/systems/sys_yar_10a.lua | 71 + lua/metrostroi/systems/sys_yar_13a.lua | 107 + lua/metrostroi/systems/sys_yar_13b.lua | 105 + lua/metrostroi/systems/sys_yar_13b_spb.lua | 105 + lua/metrostroi/systems/sys_yar_15a.lua | 110 + lua/metrostroi/systems/sys_yar_27.lua | 59 + lua/metrostroi/systems/sys_yard_2.lua | 25 + lua/metrostroi/systems/sys_yas_44v.lua | 19 + .../auto_gm_metro_crossline_c4.lua | 479 + lua/metrostroi_data/languages/cz_502.lua | 274 + lua/metrostroi_data/languages/cz_702.lua | 760 + lua/metrostroi_data/languages/cz_717.lua | 1218 + lua/metrostroi_data/languages/cz_718.lua | 708 + lua/metrostroi_data/languages/cz_720.lua | 428 + lua/metrostroi_data/languages/cz_722.lua | 374 + lua/metrostroi_data/languages/cz_base.lua | 446 + lua/metrostroi_data/languages/de_502.lua | 244 + lua/metrostroi_data/languages/de_702.lua | 671 + lua/metrostroi_data/languages/de_717.lua | 1137 + lua/metrostroi_data/languages/de_718.lua | Bin 0 -> 100184 bytes lua/metrostroi_data/languages/de_720.lua | 388 + lua/metrostroi_data/languages/de_722.lua | 330 + lua/metrostroi_data/languages/de_base.lua | 446 + lua/metrostroi_data/languages/en_502.lua | 274 + lua/metrostroi_data/languages/en_508.lua | 132 + lua/metrostroi_data/languages/en_702.lua | 761 + lua/metrostroi_data/languages/en_717.lua | 1221 + lua/metrostroi_data/languages/en_718.lua | 708 + lua/metrostroi_data/languages/en_720.lua | 428 + lua/metrostroi_data/languages/en_722.lua | 374 + lua/metrostroi_data/languages/en_base.lua | 453 + lua/metrostroi_data/languages/fr_502.lua | 274 + lua/metrostroi_data/languages/fr_702.lua | 760 + lua/metrostroi_data/languages/fr_717.lua | 1218 + lua/metrostroi_data/languages/fr_718.lua | 708 + lua/metrostroi_data/languages/fr_720.lua | 428 + lua/metrostroi_data/languages/fr_722.lua | 374 + lua/metrostroi_data/languages/fr_base.lua | 446 + lua/metrostroi_data/languages/hu_502.lua | 274 + lua/metrostroi_data/languages/hu_702.lua | 760 + lua/metrostroi_data/languages/hu_717.lua | 1218 + lua/metrostroi_data/languages/hu_718.lua | 708 + lua/metrostroi_data/languages/hu_720.lua | 421 + lua/metrostroi_data/languages/hu_722.lua | 360 + lua/metrostroi_data/languages/hu_base.lua | 396 + lua/metrostroi_data/languages/it_502.lua | 274 + lua/metrostroi_data/languages/it_702.lua | 742 + lua/metrostroi_data/languages/it_717.lua | 1206 + lua/metrostroi_data/languages/it_718.lua | 699 + lua/metrostroi_data/languages/it_720.lua | 421 + lua/metrostroi_data/languages/it_722.lua | 360 + lua/metrostroi_data/languages/it_base.lua | 395 + lua/metrostroi_data/languages/kr_502.lua | 274 + lua/metrostroi_data/languages/kr_702.lua | 752 + lua/metrostroi_data/languages/kr_717.lua | 1206 + lua/metrostroi_data/languages/kr_718.lua | 699 + lua/metrostroi_data/languages/kr_720.lua | 421 + lua/metrostroi_data/languages/kr_722.lua | 360 + lua/metrostroi_data/languages/kr_base.lua | 396 + lua/metrostroi_data/languages/pl_502.lua | 274 + lua/metrostroi_data/languages/pl_702.lua | 761 + lua/metrostroi_data/languages/pl_base.lua | 450 + lua/metrostroi_data/languages/ru_502.lua | 272 + lua/metrostroi_data/languages/ru_508.lua | 132 + lua/metrostroi_data/languages/ru_702.lua | 762 + lua/metrostroi_data/languages/ru_717.lua | 1221 + lua/metrostroi_data/languages/ru_718.lua | 709 + lua/metrostroi_data/languages/ru_720.lua | 428 + lua/metrostroi_data/languages/ru_722.lua | 374 + lua/metrostroi_data/languages/ru_base.lua | 453 + .../languages_/_unfinished/cz_base.lua | 53 + .../languages_/_unfinished/cz_buttons_717.lua | 297 + .../languages_/_unfinished/cz_buttons_720.lua | 220 + .../_unfinished/cz_buttons_ezh3.lua | 140 + .../languages_/_unfinished/cz_spawner.lua | 117 + .../languages_/_unfinished/de_base.lua | 53 + .../languages_/_unfinished/de_buttons_717.lua | 288 + .../languages_/_unfinished/de_buttons_720.lua | 220 + .../_unfinished/de_buttons_ezh3.lua | 140 + .../languages_/_unfinished/de_spawner.lua | 117 + .../_unfinished/fin_buttons_717.lua | 297 + .../_unfinished/fin_buttons_ezh3.lua | 140 + .../languages_/_unfinished/fr_base.lua | 53 + .../languages_/_unfinished/fr_buttons_717.lua | 297 + .../languages_/_unfinished/fr_spawner.lua | 117 + .../languages_/_unfinished/kr_base.lua | 52 + .../languages_/_unfinished/kr_buttons_717.lua | 297 + .../languages_/_unfinished/kr_buttons_720.lua | 220 + .../_unfinished/kr_buttons_ezh3.lua | 140 + .../languages_/_unfinished/kr_spawner.lua | 117 + .../languages_/_unfinished/mypatch.patch | 527 + .../languages_/_unfinished/nl_base.lua | 52 + .../languages_/_unfinished/nl_buttons_717.lua | 297 + .../_unfinished/nl_buttons_ezh3.lua | 140 + .../languages_/_unfinished/nl_spawner.lua | 117 + .../languages_/_unfinished/pl_base.lua | 52 + .../languages_/_unfinished/pl_buttons_717.lua | 297 + .../languages_/_unfinished/pl_buttons_720.lua | 220 + .../_unfinished/pl_buttons_ezh3.lua | 140 + .../languages_/_unfinished/pl_spawner.lua | 117 + lua/metrostroi_data/languages_/en_base.lua | 94 + .../languages_/en_buttons_703.lua | 142 + .../languages_/en_buttons_717.lua | 318 + .../languages_/en_buttons_717_lvz.lua | 293 + .../languages_/en_buttons_720.lua | 237 + .../languages_/en_buttons_722.lua | 219 + .../languages_/en_buttons_em508.lua | 157 + .../languages_/en_buttons_ezh.lua | 148 + .../languages_/en_buttons_ezh3.lua | 158 + lua/metrostroi_data/languages_/en_spawner.lua | 223 + lua/metrostroi_data/languages_/ru_717.lua | 8 + lua/metrostroi_data/languages_/ru_base.lua | 94 + .../languages_/ru_buttons_703.lua | 142 + .../languages_/ru_buttons_717.lua | 318 + .../languages_/ru_buttons_717_lvz.lua | 293 + .../languages_/ru_buttons_720.lua | 237 + .../languages_/ru_buttons_722.lua | 219 + .../languages_/ru_buttons_em508.lua | 157 + .../languages_/ru_buttons_ezh.lua | 148 + .../languages_/ru_buttons_ezh3.lua | 158 + lua/metrostroi_data/languages_/ru_spawner.lua | 226 + .../pa_gm_metro_crossline_c4.lua | 2481 ++ .../sched_gm_metrostroi_b46_lite.lua | 116 + .../sched_gm_metrostroi_b50.lua | 154 + .../signs_gm_metro_crossline_c4.lua | 14123 +++++++++++ .../signs_gm_metro_crossline_m12.lua | 8172 ++++++ .../signs_gm_metrostroi_b46_lite.lua | 1 + .../signs_gm_metrostroi_b46_lite.txt | 1 + .../signs_gm_metrostroi_b50.lua | 20782 ++++++++++++++++ .../signs_gm_mus_loopline_e.lua | 9619 +++++++ .../signs_gm_mus_neoorange_d.lua | 7887 ++++++ .../signs_gm_mus_orange_line_c..lua | 1 + .../signs_gm_mus_orange_line_c.lua | 1 + .../signs_gm_mus_orange_line_long_f.lua | 6040 +++++ .../signs_gm_mus_orange_metro_h.lua | 12507 ++++++++++ .../track_gm_metro_crossline_c4.lua | 2679 ++ .../track_gm_metro_crossline_m12.lua | 2303 ++ .../track_gm_metrostroi_b46_lite.lua | 1 + .../track_gm_metrostroi_b46_lite.txt | 1 + .../track_gm_metrostroi_b50.lua | 7678 ++++++ .../track_gm_mus_loopline_e.lua | 4069 +++ .../track_gm_mus_neoorange_d.lua | 3828 +++ .../track_gm_mus_orange_line_c.lua | 976 + .../track_gm_mus_orange_line_long_f.lua | 2 + .../track_gm_mus_orange_metro_h.lua | 3061 +++ lua/ulx/modules/sh/metrostroi.lua | 547 + lua/weapons/button_presser/cl_init.lua | 46 + lua/weapons/button_presser/init.lua | 50 + lua/weapons/button_presser/shared.lua | 23 + lua/weapons/gmod_tool/stools/signalling.lua | 1513 ++ lua/weapons/gmod_tool/stools/switch.lua | 107 + .../gmod_tool/stools/train_spawner.lua | 518 + lua/weapons/train_key/cl_init.lua | 472 + lua/weapons/train_key/init.lua | 31 + lua/weapons/train_key/shared.lua | 23 + lua/weapons/train_kv_wrench/cl_init.lua | 524 + lua/weapons/train_kv_wrench/init.lua | 69 + lua/weapons/train_kv_wrench/shared.lua | 23 + lua/weapons/train_kv_wrench_gold/cl_init.lua | 509 + lua/weapons/train_kv_wrench_gold/init.lua | 65 + lua/weapons/train_kv_wrench_gold/shared.lua | 23 + 613 files changed, 337020 insertions(+) create mode 100644 lua/autorun/client/addons_checker.lua create mode 100644 lua/autorun/gm_metrostroi_content.lua create mode 100644 lua/autorun/metrostroi.lua create mode 100644 lua/autorun/prop_button.lua create mode 100644 lua/autorun/prop_float_ex.lua create mode 100644 lua/autorun/your_skin.txt create mode 100644 lua/entities/_obsolete/gmod_subway_ai/cl_init.lua create mode 100644 lua/entities/_obsolete/gmod_subway_ai/init.lua create mode 100644 lua/entities/_obsolete/gmod_subway_ai/shared.lua create mode 100644 lua/entities/_obsolete/gmod_subway_e/cl_init.lua create mode 100644 lua/entities/_obsolete/gmod_subway_e/init.lua create mode 100644 lua/entities/_obsolete/gmod_subway_e/shared.lua create mode 100644 lua/entities/_obsolete/gmod_subway_em/cl_init.lua create mode 100644 lua/entities/_obsolete/gmod_subway_em/init.lua create mode 100644 lua/entities/_obsolete/gmod_subway_em/shared.lua create mode 100644 lua/entities/_obsolete/gmod_subway_em508/cl_init.lua create mode 100644 lua/entities/_obsolete/gmod_subway_em508/init.lua create mode 100644 lua/entities/_obsolete/gmod_subway_em508/shared.lua create mode 100644 lua/entities/_obsolete/gmod_subway_em508_int/cl_init.lua create mode 100644 lua/entities/_obsolete/gmod_subway_em508_int/init.lua create mode 100644 lua/entities/_obsolete/gmod_subway_em508_int/shared.lua create mode 100644 lua/entities/_obsolete/gmod_subway_ema/cl_init.lua create mode 100644 lua/entities/_obsolete/gmod_subway_ema/init.lua create mode 100644 lua/entities/_obsolete/gmod_subway_ema/shared.lua create mode 100644 lua/entities/_obsolete/gmod_subway_ema508t/cl_init.lua create mode 100644 lua/entities/_obsolete/gmod_subway_ema508t/init.lua create mode 100644 lua/entities/_obsolete/gmod_subway_ema508t/shared.lua create mode 100644 lua/entities/_obsolete/gmod_subway_ezh3ru1/cl_init.lua create mode 100644 lua/entities/_obsolete/gmod_subway_ezh3ru1/init.lua create mode 100644 lua/entities/_obsolete/gmod_subway_ezh3ru1/shared.lua create mode 100644 lua/entities/_obsolete/gmod_track_arm_/cl_init.lua create mode 100644 lua/entities/_obsolete/gmod_track_arm_/init.lua create mode 100644 lua/entities/_obsolete/gmod_track_arm_/shared.lua create mode 100644 lua/entities/_obsolete/gmod_track_arm__/cl_init.lua create mode 100644 lua/entities/_obsolete/gmod_track_arm__/init.lua create mode 100644 lua/entities/_obsolete/gmod_track_arm__/shared.lua create mode 100644 lua/entities/gmod_mus_clock_analog/cl_init.lua create mode 100644 lua/entities/gmod_mus_clock_analog/init.lua create mode 100644 lua/entities/gmod_mus_clock_analog/shared.lua create mode 100644 lua/entities/gmod_subway_81-501/cl_init.lua create mode 100644 lua/entities/gmod_subway_81-501/init.lua create mode 100644 lua/entities/gmod_subway_81-501/shared.lua create mode 100644 lua/entities/gmod_subway_81-502/cl_init.lua create mode 100644 lua/entities/gmod_subway_81-502/init.lua create mode 100644 lua/entities/gmod_subway_81-502/shared.lua create mode 100644 lua/entities/gmod_subway_81-702/cl_init.lua create mode 100644 lua/entities/gmod_subway_81-702/init.lua create mode 100644 lua/entities/gmod_subway_81-702/shared.lua create mode 100644 lua/entities/gmod_subway_81-702_int/cl_init.lua create mode 100644 lua/entities/gmod_subway_81-702_int/init.lua create mode 100644 lua/entities/gmod_subway_81-702_int/shared.lua create mode 100644 lua/entities/gmod_subway_81-703/cl_init.lua create mode 100644 lua/entities/gmod_subway_81-703/init.lua create mode 100644 lua/entities/gmod_subway_81-703/shared.lua create mode 100644 lua/entities/gmod_subway_81-7036/cl_init.lua create mode 100644 lua/entities/gmod_subway_81-7036/init.lua create mode 100644 lua/entities/gmod_subway_81-7036/shared.lua create mode 100644 lua/entities/gmod_subway_81-7037/cl_init.lua create mode 100644 lua/entities/gmod_subway_81-7037/init.lua create mode 100644 lua/entities/gmod_subway_81-7037/shared.lua create mode 100644 lua/entities/gmod_subway_81-703_int/cl_init.lua create mode 100644 lua/entities/gmod_subway_81-703_int/init.lua create mode 100644 lua/entities/gmod_subway_81-703_int/shared.lua create mode 100644 lua/entities/gmod_subway_81-714_lvz/cl_init.lua create mode 100644 lua/entities/gmod_subway_81-714_lvz/init.lua create mode 100644 lua/entities/gmod_subway_81-714_lvz/shared.lua create mode 100644 lua/entities/gmod_subway_81-714_mvm/cl_init.lua create mode 100644 lua/entities/gmod_subway_81-714_mvm/init.lua create mode 100644 lua/entities/gmod_subway_81-714_mvm/shared.lua create mode 100644 lua/entities/gmod_subway_81-717_lvz/cl_init.lua create mode 100644 lua/entities/gmod_subway_81-717_lvz/init.lua create mode 100644 lua/entities/gmod_subway_81-717_lvz/shared.lua create mode 100644 lua/entities/gmod_subway_81-717_lvz_custom.lua create mode 100644 lua/entities/gmod_subway_81-717_mvm/cl_init.lua create mode 100644 lua/entities/gmod_subway_81-717_mvm/init.lua create mode 100644 lua/entities/gmod_subway_81-717_mvm/shared.lua create mode 100644 lua/entities/gmod_subway_81-717_mvm_custom.lua create mode 100644 lua/entities/gmod_subway_81-718/cl_init.lua create mode 100644 lua/entities/gmod_subway_81-718/init.lua create mode 100644 lua/entities/gmod_subway_81-718/shared.lua create mode 100644 lua/entities/gmod_subway_81-719/cl_init.lua create mode 100644 lua/entities/gmod_subway_81-719/init.lua create mode 100644 lua/entities/gmod_subway_81-719/shared.lua create mode 100644 lua/entities/gmod_subway_81-720/cl_init.lua create mode 100644 lua/entities/gmod_subway_81-720/init.lua create mode 100644 lua/entities/gmod_subway_81-720/shared.lua create mode 100644 lua/entities/gmod_subway_81-721/cl_init.lua create mode 100644 lua/entities/gmod_subway_81-721/init.lua create mode 100644 lua/entities/gmod_subway_81-721/shared.lua create mode 100644 lua/entities/gmod_subway_81-722/cl_init.lua create mode 100644 lua/entities/gmod_subway_81-722/init.lua create mode 100644 lua/entities/gmod_subway_81-722/shared.lua create mode 100644 lua/entities/gmod_subway_81-723/cl_init.lua create mode 100644 lua/entities/gmod_subway_81-723/init.lua create mode 100644 lua/entities/gmod_subway_81-723/shared.lua create mode 100644 lua/entities/gmod_subway_81-724/cl_init.lua create mode 100644 lua/entities/gmod_subway_81-724/init.lua create mode 100644 lua/entities/gmod_subway_81-724/shared.lua create mode 100644 lua/entities/gmod_subway_base/cl_init.lua create mode 100644 lua/entities/gmod_subway_base/init.lua create mode 100644 lua/entities/gmod_subway_base/shared.lua 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 create mode 100644 lua/entities/gmod_subway_em508t/cl_init.lua create mode 100644 lua/entities/gmod_subway_em508t/init.lua create mode 100644 lua/entities/gmod_subway_em508t/shared.lua create mode 100644 lua/entities/gmod_subway_ezh/cl_init.lua create mode 100644 lua/entities/gmod_subway_ezh/init.lua create mode 100644 lua/entities/gmod_subway_ezh/shared.lua create mode 100644 lua/entities/gmod_subway_ezh1/cl_init.lua create mode 100644 lua/entities/gmod_subway_ezh1/init.lua create mode 100644 lua/entities/gmod_subway_ezh1/shared.lua create mode 100644 lua/entities/gmod_subway_ezh3/cl_init.lua create mode 100644 lua/entities/gmod_subway_ezh3/init.lua create mode 100644 lua/entities/gmod_subway_ezh3/shared.lua create mode 100644 lua/entities/gmod_subway_tatra_t3/cl_init.lua create mode 100644 lua/entities/gmod_subway_tatra_t3/init.lua create mode 100644 lua/entities/gmod_subway_tatra_t3/shared.lua create mode 100644 lua/entities/gmod_track_arm/cl_init.lua create mode 100644 lua/entities/gmod_track_arm/init.lua create mode 100644 lua/entities/gmod_track_arm/shared.lua create mode 100644 lua/entities/gmod_track_autodrive_plate/cl_init.lua create mode 100644 lua/entities/gmod_track_autodrive_plate/init.lua create mode 100644 lua/entities/gmod_track_autodrive_plate/shared.lua create mode 100644 lua/entities/gmod_track_clock_interval/cl_init.lua create mode 100644 lua/entities/gmod_track_clock_interval/init.lua create mode 100644 lua/entities/gmod_track_clock_interval/shared.lua create mode 100644 lua/entities/gmod_track_clock_small/cl_init.lua create mode 100644 lua/entities/gmod_track_clock_small/init.lua create mode 100644 lua/entities/gmod_track_clock_small/shared.lua create mode 100644 lua/entities/gmod_track_clock_time/cl_init.lua create mode 100644 lua/entities/gmod_track_clock_time/init.lua create mode 100644 lua/entities/gmod_track_clock_time/shared.lua create mode 100644 lua/entities/gmod_track_controller/cl_init.lua create mode 100644 lua/entities/gmod_track_controller/init.lua create mode 100644 lua/entities/gmod_track_controller/shared.lua create mode 100644 lua/entities/gmod_track_horlift_signal/cl_init.lua create mode 100644 lua/entities/gmod_track_horlift_signal/init.lua create mode 100644 lua/entities/gmod_track_horlift_signal/shared.lua create mode 100644 lua/entities/gmod_track_mus_elektronika7/cl_init.lua create mode 100644 lua/entities/gmod_track_mus_elektronika7/init.lua create mode 100644 lua/entities/gmod_track_mus_elektronika7/shared.lua create mode 100644 lua/entities/gmod_track_pa_marker/cl_init.lua create mode 100644 lua/entities/gmod_track_pa_marker/init.lua create mode 100644 lua/entities/gmod_track_pa_marker/shared.lua create mode 100644 lua/entities/gmod_track_platform/cl_init.lua create mode 100644 lua/entities/gmod_track_platform/init.lua create mode 100644 lua/entities/gmod_track_platform/shared.lua create mode 100644 lua/entities/gmod_track_pneumatic_snake/cl_init.lua create mode 100644 lua/entities/gmod_track_pneumatic_snake/init.lua create mode 100644 lua/entities/gmod_track_pneumatic_snake/shared.lua create mode 100644 lua/entities/gmod_track_powermeter/cl_init.lua create mode 100644 lua/entities/gmod_track_powermeter/init.lua create mode 100644 lua/entities/gmod_track_powermeter/shared.lua create mode 100644 lua/entities/gmod_track_pui/cl_init.lua create mode 100644 lua/entities/gmod_track_pui/init.lua create mode 100644 lua/entities/gmod_track_pui/shared.lua create mode 100644 lua/entities/gmod_track_sign/cl_init.lua create mode 100644 lua/entities/gmod_track_sign/init.lua create mode 100644 lua/entities/gmod_track_sign/shared.lua create mode 100644 lua/entities/gmod_track_signal/cl_init.lua create mode 100644 lua/entities/gmod_track_signal/init.lua create mode 100644 lua/entities/gmod_track_signal/shared.lua create mode 100644 lua/entities/gmod_track_signal_controller/cl_init.lua create mode 100644 lua/entities/gmod_track_signal_controller/init.lua create mode 100644 lua/entities/gmod_track_signal_controller/shared.lua create mode 100644 lua/entities/gmod_track_signs/cl_init.lua create mode 100644 lua/entities/gmod_track_signs/init.lua create mode 100644 lua/entities/gmod_track_signs/shared.lua create mode 100644 lua/entities/gmod_track_switch/cl_init.lua create mode 100644 lua/entities/gmod_track_switch/init.lua create mode 100644 lua/entities/gmod_track_switch/shared.lua create mode 100644 lua/entities/gmod_track_udochka/cl_init.lua create mode 100644 lua/entities/gmod_track_udochka/init.lua create mode 100644 lua/entities/gmod_track_udochka/shared.lua create mode 100644 lua/entities/gmod_train_autodrive_coil/cl_init.lua create mode 100644 lua/entities/gmod_train_autodrive_coil/init.lua create mode 100644 lua/entities/gmod_train_autodrive_coil/shared.lua create mode 100644 lua/entities/gmod_train_bogey/cl_init.lua create mode 100644 lua/entities/gmod_train_bogey/init.lua create mode 100644 lua/entities/gmod_train_bogey/shared.lua create mode 100644 lua/entities/gmod_train_couple/cl_init.lua create mode 100644 lua/entities/gmod_train_couple/init.lua create mode 100644 lua/entities/gmod_train_couple/shared.lua create mode 100644 lua/entities/gmod_train_dlight.lua create mode 100644 lua/entities/gmod_train_door/cl_init.lua create mode 100644 lua/entities/gmod_train_door/init.lua create mode 100644 lua/entities/gmod_train_door/shared.lua create mode 100644 lua/entities/gmod_train_sound_provider/cl_init.lua create mode 100644 lua/entities/gmod_train_sound_provider/init.lua create mode 100644 lua/entities/gmod_train_sound_provider/shared.lua create mode 100644 lua/entities/gmod_train_spawner/cl_init.lua create mode 100644 lua/entities/gmod_train_spawner/init.lua create mode 100644 lua/entities/gmod_train_spawner/shared.lua create mode 100644 lua/entities/gmod_train_special_box/cl_init.lua create mode 100644 lua/entities/gmod_train_special_box/init.lua create mode 100644 lua/entities/gmod_train_special_box/shared.lua create mode 100644 lua/entities/gmod_train_sprite.lua create mode 100644 lua/entities/gmod_train_wheels/cl_init.lua create mode 100644 lua/entities/gmod_train_wheels/init.lua create mode 100644 lua/entities/gmod_train_wheels/shared.lua create mode 100644 lua/metrostroi/_obsolete/_turbostroi_v2_old create mode 100644 lua/metrostroi/cl_cpanel.lua create mode 100644 lua/metrostroi/cl_debugger.lua create mode 100644 lua/metrostroi/cl_language.lua create mode 100644 lua/metrostroi/cl_trackeditor.lua create mode 100644 lua/metrostroi/cl_trainedit.lua create mode 100644 lua/metrostroi/cl_util.lua create mode 100644 lua/metrostroi/convars.lua create mode 100644 lua/metrostroi/maps/b46_lite.lua create mode 100644 lua/metrostroi/maps/b50.lua create mode 100644 lua/metrostroi/maps/crimson.lua create mode 100644 lua/metrostroi/maps/crossline.lua create mode 100644 lua/metrostroi/maps/crossline_m12.lua create mode 100644 lua/metrostroi/maps/crossline_r.lua create mode 100644 lua/metrostroi/maps/loopline.lua create mode 100644 lua/metrostroi/maps/orange.lua create mode 100644 lua/metrostroi/sh_arm.lua create mode 100644 lua/metrostroi/sh_failsim.lua create mode 100644 lua/metrostroi/sh_rerail.lua create mode 100644 lua/metrostroi/sh_time.lua create mode 100644 lua/metrostroi/sh_util.lua create mode 100644 lua/metrostroi/skins/default.lua create mode 100644 lua/metrostroi/sv_centralisation.lua create mode 100644 lua/metrostroi/sv_debug.lua create mode 100644 lua/metrostroi/sv_debugger.lua create mode 100644 lua/metrostroi/sv_hs_layout.lua create mode 100644 lua/metrostroi/sv_language.lua create mode 100644 lua/metrostroi/sv_railnetwork.lua create mode 100644 lua/metrostroi/sv_schedule.lua create mode 100644 lua/metrostroi/sv_signs.lua create mode 100644 lua/metrostroi/sv_socket.lua create mode 100644 lua/metrostroi/sv_telemetry.lua create mode 100644 lua/metrostroi/sv_trackeditor.lua create mode 100644 lua/metrostroi/sv_turbostroi.lua create mode 100644 lua/metrostroi/sv_turbostroi_railnetwork.lua create mode 100644 lua/metrostroi/sv_turbostroi_v2.lua create mode 100644 lua/metrostroi/sv_util.lua create mode 100644 lua/metrostroi/systems/_obsolete/_ys_electric_ create mode 100644 lua/metrostroi/systems/_obsolete/sys_81_502_upo.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_81_508_electric.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_81_508_panel.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_81_701_electric.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_81_704_electric.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_81_704_panel.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_81_705_electric.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_81_705_panel.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_81_707_electric.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_81_708_panel.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_81_710ru1_electric.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_81_710ru1_panel.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_81_717_kv_70AV.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_81_717_pam.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_81_717_puav_normal.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_81_718_bkbd.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_81_718_electric.lu create mode 100644 lua/metrostroi/systems/_obsolete/sys_81_720_asnp.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_81_720_tr_7b.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_81_722_bars.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_alstest.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_announcer.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_ars_dnepr_spb.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_ars_ezh3.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_asnp.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_autodrive.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_bars.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_bars_717.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_bars_em.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_dip_01k.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_dura.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_gen_int_710.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_gen_res_717_5m.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_kf_47a6.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_kf_47a7.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_kv_70_lite.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_motorola.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_noars.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_pa-ksd-m.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_pa-ksd.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_pa-m.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_pmp.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_puav.lu create mode 100644 lua/metrostroi/systems/_obsolete/sys_rri.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_tr_7b.lua create mode 100644 lua/metrostroi/systems/_obsolete/sys_upo.lua create mode 100644 lua/metrostroi/systems/sys_81_501_electric.lua create mode 100644 lua/metrostroi/systems/sys_81_501_panel.lua create mode 100644 lua/metrostroi/systems/sys_81_502_ars.lua create mode 100644 lua/metrostroi/systems/sys_81_502_bps.lua create mode 100644 lua/metrostroi/systems/sys_81_502_electric.lua create mode 100644 lua/metrostroi/systems/sys_81_502_ksaup.lua create mode 100644 lua/metrostroi/systems/sys_81_502_panel.lua create mode 100644 lua/metrostroi/systems/sys_81_508_panel.lua create mode 100644 lua/metrostroi/systems/sys_81_508_uks.lua create mode 100644 lua/metrostroi/systems/sys_81_508t_electric.lua create mode 100644 lua/metrostroi/systems/sys_81_508t_panel.lua create mode 100644 lua/metrostroi/systems/sys_81_702_electric.lua create mode 100644 lua/metrostroi/systems/sys_81_702_panel.lua create mode 100644 lua/metrostroi/systems/sys_81_702_pneumatic.lua create mode 100644 lua/metrostroi/systems/sys_81_703_electric.lua create mode 100644 lua/metrostroi/systems/sys_81_703_kf_47a.lua create mode 100644 lua/metrostroi/systems/sys_81_703_panel.lua create mode 100644 lua/metrostroi/systems/sys_81_703_pneumatic.lua create mode 100644 lua/metrostroi/systems/sys_81_703i_electric.lua create mode 100644 lua/metrostroi/systems/sys_81_707_panel.lua create mode 100644 lua/metrostroi/systems/sys_81_710_electric.lua create mode 100644 lua/metrostroi/systems/sys_81_710_panel.lua create mode 100644 lua/metrostroi/systems/sys_81_714_electric.lua create mode 100644 lua/metrostroi/systems/sys_81_714_panel.lua create mode 100644 lua/metrostroi/systems/sys_81_717_bars.lua create mode 100644 lua/metrostroi/systems/sys_81_717_electric.lua create mode 100644 lua/metrostroi/systems/sys_81_717_pam.lua create mode 100644 lua/metrostroi/systems/sys_81_717_pam_vv.lua create mode 100644 lua/metrostroi/systems/sys_81_717_panel.lua create mode 100644 lua/metrostroi/systems/sys_81_717_pneumatic.lua create mode 100644 lua/metrostroi/systems/sys_81_717_puav.lua create mode 100644 lua/metrostroi/systems/sys_81_717lvz_panel.lua create mode 100644 lua/metrostroi/systems/sys_81_718_battery.lua create mode 100644 lua/metrostroi/systems/sys_81_718_bbe.lua create mode 100644 lua/metrostroi/systems/sys_81_718_bkbd.lua create mode 100644 lua/metrostroi/systems/sys_81_718_bkcu.lua create mode 100644 lua/metrostroi/systems/sys_81_718_bkva.lua create mode 100644 lua/metrostroi/systems/sys_81_718_bska.lua create mode 100644 lua/metrostroi/systems/sys_81_718_bup.lua create mode 100644 lua/metrostroi/systems/sys_81_718_buv.lua create mode 100644 lua/metrostroi/systems/sys_81_718_buvs.lua create mode 100644 lua/metrostroi/systems/sys_81_718_bva.lua create mode 100644 lua/metrostroi/systems/sys_81_718_bzos.lua create mode 100644 lua/metrostroi/systems/sys_81_718_electric.lua create mode 100644 lua/metrostroi/systems/sys_81_718_kr.lua create mode 100644 lua/metrostroi/systems/sys_81_718_kru.lua create mode 100644 lua/metrostroi/systems/sys_81_718_panel.lua create mode 100644 lua/metrostroi/systems/sys_81_718_pneumatic.lua create mode 100644 lua/metrostroi/systems/sys_81_718_ptti.lua create mode 100644 lua/metrostroi/systems/sys_81_718_route_number.lua create mode 100644 lua/metrostroi/systems/sys_81_719_electric.lua create mode 100644 lua/metrostroi/systems/sys_81_719_panel.lua create mode 100644 lua/metrostroi/systems/sys_81_71_announcer.lua create mode 100644 lua/metrostroi/systems/sys_81_71_asnp.lua create mode 100644 lua/metrostroi/systems/sys_81_71_asnp_vv.lua create mode 100644 lua/metrostroi/systems/sys_81_71_last_station.lua create mode 100644 lua/metrostroi/systems/sys_81_71_route_number.lua create mode 100644 lua/metrostroi/systems/sys_81_71_rri.lua create mode 100644 lua/metrostroi/systems/sys_81_71_rri_vv.lua create mode 100644 lua/metrostroi/systems/sys_81_71_upo.lua create mode 100644 lua/metrostroi/systems/sys_81_720_bars.lua create mode 100644 lua/metrostroi/systems/sys_81_720_bpti.lua create mode 100644 lua/metrostroi/systems/sys_81_720_bukp.lua create mode 100644 lua/metrostroi/systems/sys_81_720_buv.lua create mode 100644 lua/metrostroi/systems/sys_81_720_electric.lua create mode 100644 lua/metrostroi/systems/sys_81_720_horn.lua create mode 100644 lua/metrostroi/systems/sys_81_720_igla_cbki2.lua create mode 100644 lua/metrostroi/systems/sys_81_720_igla_pcbk.lua create mode 100644 lua/metrostroi/systems/sys_81_720_panel.lua create mode 100644 lua/metrostroi/systems/sys_81_720_passscheme.lua create mode 100644 lua/metrostroi/systems/sys_81_720_pneumatic.lua create mode 100644 lua/metrostroi/systems/sys_81_720_rv.lua create mode 100644 lua/metrostroi/systems/sys_81_720_ticker.lua create mode 100644 lua/metrostroi/systems/sys_81_721_panel.lua create mode 100644 lua/metrostroi/systems/sys_81_722_asyncinverter.lua create mode 100644 lua/metrostroi/systems/sys_81_722_bars.lua create mode 100644 lua/metrostroi/systems/sys_81_722_bukp.lua create mode 100644 lua/metrostroi/systems/sys_81_722_bukv.lua create mode 100644 lua/metrostroi/systems/sys_81_722_electric.lua create mode 100644 lua/metrostroi/systems/sys_81_722_horn.lua create mode 100644 lua/metrostroi/systems/sys_81_722_mfdu.lua create mode 100644 lua/metrostroi/systems/sys_81_722_panel.lua create mode 100644 lua/metrostroi/systems/sys_81_722_passscheme.lua create mode 100644 lua/metrostroi/systems/sys_81_722_pneumatic.lua create mode 100644 lua/metrostroi/systems/sys_81_722_routenumber.lua create mode 100644 lua/metrostroi/systems/sys_81_722_sarmat_upo.lua create mode 100644 lua/metrostroi/systems/sys_81_722_tickers.lua create mode 100644 lua/metrostroi/systems/sys_81_722_upi.lua create mode 100644 lua/metrostroi/systems/sys_81_723_panel.lua create mode 100644 lua/metrostroi/systems/sys_81_724_panel.lua create mode 100644 lua/metrostroi/systems/sys_81_740_electric.lua create mode 100644 lua/metrostroi/systems/sys_81_740_panel.lua create mode 100644 lua/metrostroi/systems/sys_als_ars_bis200a.lua create mode 100644 lua/metrostroi/systems/sys_als_ars_blpm.lua create mode 100644 lua/metrostroi/systems/sys_als_ars_bsm.lua create mode 100644 lua/metrostroi/systems/sys_als_ars_bum.lua create mode 100644 lua/metrostroi/systems/sys_als_ars_dnepr.lua create mode 100644 lua/metrostroi/systems/sys_als_ars_ezh3.lua create mode 100644 lua/metrostroi/systems/sys_alscoil.lua create mode 100644 lua/metrostroi/systems/sys_ars_mp.lua create mode 100644 lua/metrostroi/systems/sys_battery.lua create mode 100644 lua/metrostroi/systems/sys_bpsn.lua create mode 100644 lua/metrostroi/systems/sys_bv_630.lua create mode 100644 lua/metrostroi/systems/sys_dk_104g.lua create mode 100644 lua/metrostroi/systems/sys_dk_108d.lua create mode 100644 lua/metrostroi/systems/sys_dk_116a.lua create mode 100644 lua/metrostroi/systems/sys_dk_117dm.lua create mode 100644 lua/metrostroi/systems/sys_dk_120am.lua create mode 100644 lua/metrostroi/systems/sys_ekg.lua create mode 100644 lua/metrostroi/systems/sys_ekg_17a.lua create mode 100644 lua/metrostroi/systems/sys_ekg_17b.lua create mode 100644 lua/metrostroi/systems/sys_ekg_18a.lua create mode 100644 lua/metrostroi/systems/sys_ekg_18b.lua create mode 100644 lua/metrostroi/systems/sys_electric.lua create mode 100644 lua/metrostroi/systems/sys_failsim.lua create mode 100644 lua/metrostroi/systems/sys_gen_res_702c.lua create mode 100644 lua/metrostroi/systems/sys_gen_res_702o.lua create mode 100644 lua/metrostroi/systems/sys_gen_res_703.lua create mode 100644 lua/metrostroi/systems/sys_gen_res_710.lua create mode 100644 lua/metrostroi/systems/sys_gen_res_717.lua create mode 100644 lua/metrostroi/systems/sys_gen_res_717_s.lua create mode 100644 lua/metrostroi/systems/sys_horn.lua create mode 100644 lua/metrostroi/systems/sys_igla_cbki1.lua create mode 100644 lua/metrostroi/systems/sys_igla_cbki2.lua create mode 100644 lua/metrostroi/systems/sys_igla_pcbk.lua create mode 100644 lua/metrostroi/systems/sys_ipav.lua create mode 100644 lua/metrostroi/systems/sys_kf_47a.lua create mode 100644 lua/metrostroi/systems/sys_kf_47a1.lua create mode 100644 lua/metrostroi/systems/sys_kf_50a.lua create mode 100644 lua/metrostroi/systems/sys_kf_6a.lua create mode 100644 lua/metrostroi/systems/sys_kf_6b.lua create mode 100644 lua/metrostroi/systems/sys_kf_7a.lua create mode 100644 lua/metrostroi/systems/sys_kru.lua create mode 100644 lua/metrostroi/systems/sys_kv_20.lua create mode 100644 lua/metrostroi/systems/sys_kv_35.lua create mode 100644 lua/metrostroi/systems/sys_kv_40.lua create mode 100644 lua/metrostroi/systems/sys_kv_55.lua create mode 100644 lua/metrostroi/systems/sys_kv_66.lua create mode 100644 lua/metrostroi/systems/sys_kv_70.lua create mode 100644 lua/metrostroi/systems/sys_lk_753b.lua create mode 100644 lua/metrostroi/systems/sys_lk_753v.lua create mode 100644 lua/metrostroi/systems/sys_lk_755a.lua create mode 100644 lua/metrostroi/systems/sys_pkg_17b.lua create mode 100644 lua/metrostroi/systems/sys_pkg_758b.lua create mode 100644 lua/metrostroi/systems/sys_pkg_758v.lua create mode 100644 lua/metrostroi/systems/sys_pkg_759b.lua create mode 100644 lua/metrostroi/systems/sys_pkg_759v.lua create mode 100644 lua/metrostroi/systems/sys_pkg_761.lua create mode 100644 lua/metrostroi/systems/sys_pr_109a.lua create mode 100644 lua/metrostroi/systems/sys_pr_124b.lua create mode 100644 lua/metrostroi/systems/sys_pr_14x_panels.lua create mode 100644 lua/metrostroi/systems/sys_pr_722d.lua create mode 100644 lua/metrostroi/systems/sys_pru_502.lua create mode 100644 lua/metrostroi/systems/sys_relay.lua create mode 100644 lua/metrostroi/systems/sys_sbpp.lua create mode 100644 lua/metrostroi/systems/sys_tatra_systems.lua create mode 100644 lua/metrostroi/systems/sys_telemetry.lua create mode 100644 lua/metrostroi/systems/sys_tr_3b.lua create mode 100644 lua/metrostroi/systems/sys_upps.lua create mode 100644 lua/metrostroi/systems/sys_upps_vv.lua create mode 100644 lua/metrostroi/systems/sys_yak_31a.lua create mode 100644 lua/metrostroi/systems/sys_yak_36.lua create mode 100644 lua/metrostroi/systems/sys_yak_37a.lua create mode 100644 lua/metrostroi/systems/sys_yak_37e.lua create mode 100644 lua/metrostroi/systems/sys_yak_4k.lua create mode 100644 lua/metrostroi/systems/sys_yap_57.lua create mode 100644 lua/metrostroi/systems/sys_yar_10a.lua create mode 100644 lua/metrostroi/systems/sys_yar_13a.lua create mode 100644 lua/metrostroi/systems/sys_yar_13b.lua create mode 100644 lua/metrostroi/systems/sys_yar_13b_spb.lua create mode 100644 lua/metrostroi/systems/sys_yar_15a.lua create mode 100644 lua/metrostroi/systems/sys_yar_27.lua create mode 100644 lua/metrostroi/systems/sys_yard_2.lua create mode 100644 lua/metrostroi/systems/sys_yas_44v.lua create mode 100644 lua/metrostroi_data/auto_gm_metro_crossline_c4.lua create mode 100644 lua/metrostroi_data/languages/cz_502.lua create mode 100644 lua/metrostroi_data/languages/cz_702.lua create mode 100644 lua/metrostroi_data/languages/cz_717.lua create mode 100644 lua/metrostroi_data/languages/cz_718.lua create mode 100644 lua/metrostroi_data/languages/cz_720.lua create mode 100644 lua/metrostroi_data/languages/cz_722.lua create mode 100644 lua/metrostroi_data/languages/cz_base.lua create mode 100644 lua/metrostroi_data/languages/de_502.lua create mode 100644 lua/metrostroi_data/languages/de_702.lua create mode 100644 lua/metrostroi_data/languages/de_717.lua create mode 100644 lua/metrostroi_data/languages/de_718.lua create mode 100644 lua/metrostroi_data/languages/de_720.lua create mode 100644 lua/metrostroi_data/languages/de_722.lua create mode 100644 lua/metrostroi_data/languages/de_base.lua create mode 100644 lua/metrostroi_data/languages/en_502.lua create mode 100644 lua/metrostroi_data/languages/en_508.lua create mode 100644 lua/metrostroi_data/languages/en_702.lua create mode 100644 lua/metrostroi_data/languages/en_717.lua create mode 100644 lua/metrostroi_data/languages/en_718.lua create mode 100644 lua/metrostroi_data/languages/en_720.lua create mode 100644 lua/metrostroi_data/languages/en_722.lua create mode 100644 lua/metrostroi_data/languages/en_base.lua create mode 100644 lua/metrostroi_data/languages/fr_502.lua create mode 100644 lua/metrostroi_data/languages/fr_702.lua create mode 100644 lua/metrostroi_data/languages/fr_717.lua create mode 100644 lua/metrostroi_data/languages/fr_718.lua create mode 100644 lua/metrostroi_data/languages/fr_720.lua create mode 100644 lua/metrostroi_data/languages/fr_722.lua create mode 100644 lua/metrostroi_data/languages/fr_base.lua create mode 100644 lua/metrostroi_data/languages/hu_502.lua create mode 100644 lua/metrostroi_data/languages/hu_702.lua create mode 100644 lua/metrostroi_data/languages/hu_717.lua create mode 100644 lua/metrostroi_data/languages/hu_718.lua create mode 100644 lua/metrostroi_data/languages/hu_720.lua create mode 100644 lua/metrostroi_data/languages/hu_722.lua create mode 100644 lua/metrostroi_data/languages/hu_base.lua create mode 100644 lua/metrostroi_data/languages/it_502.lua create mode 100644 lua/metrostroi_data/languages/it_702.lua create mode 100644 lua/metrostroi_data/languages/it_717.lua create mode 100644 lua/metrostroi_data/languages/it_718.lua create mode 100644 lua/metrostroi_data/languages/it_720.lua create mode 100644 lua/metrostroi_data/languages/it_722.lua create mode 100644 lua/metrostroi_data/languages/it_base.lua create mode 100644 lua/metrostroi_data/languages/kr_502.lua create mode 100644 lua/metrostroi_data/languages/kr_702.lua create mode 100644 lua/metrostroi_data/languages/kr_717.lua create mode 100644 lua/metrostroi_data/languages/kr_718.lua create mode 100644 lua/metrostroi_data/languages/kr_720.lua create mode 100644 lua/metrostroi_data/languages/kr_722.lua create mode 100644 lua/metrostroi_data/languages/kr_base.lua create mode 100644 lua/metrostroi_data/languages/pl_502.lua create mode 100644 lua/metrostroi_data/languages/pl_702.lua create mode 100644 lua/metrostroi_data/languages/pl_base.lua create mode 100644 lua/metrostroi_data/languages/ru_502.lua create mode 100644 lua/metrostroi_data/languages/ru_508.lua create mode 100644 lua/metrostroi_data/languages/ru_702.lua create mode 100644 lua/metrostroi_data/languages/ru_717.lua create mode 100644 lua/metrostroi_data/languages/ru_718.lua create mode 100644 lua/metrostroi_data/languages/ru_720.lua create mode 100644 lua/metrostroi_data/languages/ru_722.lua create mode 100644 lua/metrostroi_data/languages/ru_base.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/cz_base.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/cz_buttons_717.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/cz_buttons_720.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/cz_buttons_ezh3.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/cz_spawner.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/de_base.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/de_buttons_717.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/de_buttons_720.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/de_buttons_ezh3.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/de_spawner.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/fin_buttons_717.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/fin_buttons_ezh3.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/fr_base.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/fr_buttons_717.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/fr_spawner.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/kr_base.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/kr_buttons_717.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/kr_buttons_720.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/kr_buttons_ezh3.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/kr_spawner.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/mypatch.patch create mode 100644 lua/metrostroi_data/languages_/_unfinished/nl_base.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/nl_buttons_717.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/nl_buttons_ezh3.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/nl_spawner.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/pl_base.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/pl_buttons_717.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/pl_buttons_720.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/pl_buttons_ezh3.lua create mode 100644 lua/metrostroi_data/languages_/_unfinished/pl_spawner.lua create mode 100644 lua/metrostroi_data/languages_/en_base.lua create mode 100644 lua/metrostroi_data/languages_/en_buttons_703.lua create mode 100644 lua/metrostroi_data/languages_/en_buttons_717.lua create mode 100644 lua/metrostroi_data/languages_/en_buttons_717_lvz.lua create mode 100644 lua/metrostroi_data/languages_/en_buttons_720.lua create mode 100644 lua/metrostroi_data/languages_/en_buttons_722.lua create mode 100644 lua/metrostroi_data/languages_/en_buttons_em508.lua create mode 100644 lua/metrostroi_data/languages_/en_buttons_ezh.lua create mode 100644 lua/metrostroi_data/languages_/en_buttons_ezh3.lua create mode 100644 lua/metrostroi_data/languages_/en_spawner.lua create mode 100644 lua/metrostroi_data/languages_/ru_717.lua create mode 100644 lua/metrostroi_data/languages_/ru_base.lua create mode 100644 lua/metrostroi_data/languages_/ru_buttons_703.lua create mode 100644 lua/metrostroi_data/languages_/ru_buttons_717.lua create mode 100644 lua/metrostroi_data/languages_/ru_buttons_717_lvz.lua create mode 100644 lua/metrostroi_data/languages_/ru_buttons_720.lua create mode 100644 lua/metrostroi_data/languages_/ru_buttons_722.lua create mode 100644 lua/metrostroi_data/languages_/ru_buttons_em508.lua create mode 100644 lua/metrostroi_data/languages_/ru_buttons_ezh.lua create mode 100644 lua/metrostroi_data/languages_/ru_buttons_ezh3.lua create mode 100644 lua/metrostroi_data/languages_/ru_spawner.lua create mode 100644 lua/metrostroi_data/pa_gm_metro_crossline_c4.lua create mode 100644 lua/metrostroi_data/sched_gm_metrostroi_b46_lite.lua create mode 100644 lua/metrostroi_data/sched_gm_metrostroi_b50.lua create mode 100644 lua/metrostroi_data/signs_gm_metro_crossline_c4.lua create mode 100644 lua/metrostroi_data/signs_gm_metro_crossline_m12.lua create mode 100644 lua/metrostroi_data/signs_gm_metrostroi_b46_lite.lua create mode 100644 lua/metrostroi_data/signs_gm_metrostroi_b46_lite.txt create mode 100644 lua/metrostroi_data/signs_gm_metrostroi_b50.lua create mode 100644 lua/metrostroi_data/signs_gm_mus_loopline_e.lua create mode 100644 lua/metrostroi_data/signs_gm_mus_neoorange_d.lua create mode 100644 lua/metrostroi_data/signs_gm_mus_orange_line_c..lua create mode 100644 lua/metrostroi_data/signs_gm_mus_orange_line_c.lua create mode 100644 lua/metrostroi_data/signs_gm_mus_orange_line_long_f.lua create mode 100644 lua/metrostroi_data/signs_gm_mus_orange_metro_h.lua create mode 100644 lua/metrostroi_data/track_gm_metro_crossline_c4.lua create mode 100644 lua/metrostroi_data/track_gm_metro_crossline_m12.lua create mode 100644 lua/metrostroi_data/track_gm_metrostroi_b46_lite.lua create mode 100644 lua/metrostroi_data/track_gm_metrostroi_b46_lite.txt create mode 100644 lua/metrostroi_data/track_gm_metrostroi_b50.lua create mode 100644 lua/metrostroi_data/track_gm_mus_loopline_e.lua create mode 100644 lua/metrostroi_data/track_gm_mus_neoorange_d.lua create mode 100644 lua/metrostroi_data/track_gm_mus_orange_line_c.lua create mode 100644 lua/metrostroi_data/track_gm_mus_orange_line_long_f.lua create mode 100644 lua/metrostroi_data/track_gm_mus_orange_metro_h.lua create mode 100644 lua/ulx/modules/sh/metrostroi.lua create mode 100644 lua/weapons/button_presser/cl_init.lua create mode 100644 lua/weapons/button_presser/init.lua create mode 100644 lua/weapons/button_presser/shared.lua create mode 100644 lua/weapons/gmod_tool/stools/signalling.lua create mode 100644 lua/weapons/gmod_tool/stools/switch.lua create mode 100644 lua/weapons/gmod_tool/stools/train_spawner.lua create mode 100644 lua/weapons/train_key/cl_init.lua create mode 100644 lua/weapons/train_key/init.lua create mode 100644 lua/weapons/train_key/shared.lua create mode 100644 lua/weapons/train_kv_wrench/cl_init.lua create mode 100644 lua/weapons/train_kv_wrench/init.lua create mode 100644 lua/weapons/train_kv_wrench/shared.lua create mode 100644 lua/weapons/train_kv_wrench_gold/cl_init.lua create mode 100644 lua/weapons/train_kv_wrench_gold/init.lua create mode 100644 lua/weapons/train_kv_wrench_gold/shared.lua diff --git a/lua/autorun/client/addons_checker.lua b/lua/autorun/client/addons_checker.lua new file mode 100644 index 0000000..48beb55 --- /dev/null +++ b/lua/autorun/client/addons_checker.lua @@ -0,0 +1,452 @@ +--[[------------------------------------------------------------------------- +Addons checker for metrostroi addon +---------------------------------------------------------------------------]] +CreateClientConVar("metrostroi_addons_check_skip_error",0,true) +CreateClientConVar("metrostroi_addons_check_ignore",0,true) + +if SERVER then return end +local RequiredAddons = { + { + --main + wsid = 261801217, + additional = { + "models/metrostroi/passengers/f1.mdl", + "models/metrostroi/passengers/f4.mdl", + "models/metrostroi/passengers/m3.mdl", + "models/metrostroi/signals/light_path.mdl", + "models/metrostroi/tracks/dead_end.mdl", + "models/metrostroi/tatra_t3/tatra_t3.mdl", + "models/metrostroi/tracks/u002.mdl", + "models/metrostroi/tracks/tunnel512_double_end.mdl", + "models/z-o-m-b-i-e/metro_2033/electro/m33_transformator_01_1.mdl", + "materials/metrostroi/metro_contactrail_001.vmt", + "maps/gm_metrostroi_b46_lite.bsp", + "resource/fonts/iee1.ttf" + } + }, + { + --part1 + wsid = 1095094174, + additional = { + "materials/models/metrostroi_train/81-717/703windows.vmt", + "materials/models/metrostroi_train/81-717/717_breakers_s.vtf", + "materials/models/metrostroi_train/81-717/717_classic2_n.vtf", + "materials/models/metrostroi_train/81-717/cabine_1006.vtf", + "materials/models/metrostroi_train/81-717/pa_markers.vmt", + "materials/models/metrostroi_train/81-717/buttons/lamps_spb_panel.vmt", + "materials/models/metrostroi_train/81-717/pult/pult_panel_spb_blue_n.vtf", + "materials/models/metrostroi_train/81-717/screens/pa/question.vtf", + "materials/models/metrostroi_train/81-717/segments_spb/m2.vtf", + } + }, + { + --part2 + wsid = 1095098251, + additional = { + "materials/metrostroi_skins/81-720_schemes/b50_1.vtf", + "materials/models/metrostroi_train/81-722/apparats2.vtf", + "materials/models/metrostroi_train/81-722/cabin_n.vmt", + "materials/models/metrostroi_train/81-722/scepka.vtf", + "materials/models/metrostroi_train/81-722/screens/failures.vtf", + "models/metrostroi_train/81-717/pult/ars_mvm_old.mdl", + "models/metrostroi_train/81-720/81-720.phy", + "models/metrostroi_train/81-720/route/route1.dx90.vtx", + "models/metrostroi_train/81-722/81-722_kran.mdl", + "models/metrostroi_train/81-722/digits/digit.mdl", + + } + }, + { + --part3 + wsid = 1095100683, + additional = { + "materials/models/metrostroi_train/81_718/1002.vmt", + "materials/models/metrostroi_train/81_718/marshrut_body_n.vtf", + "materials/models/metrostroi_train/81-710/508t_blue.vmt", + "materials/models/metrostroi_train/81-710/710_echs.vtf", + "materials/models/metrostroi_train/equipment/rri_n.vtf", + "materials/models/metrostroi_train/equipment/tab_e0.vtf", + "materials/models/metrostroi_train/reversor/revers_gold.vmt", + "models/metrostroi_train/81-710/81-508t.phy", + "models/metrostroi_train/81-718/81-718_int.mdl", + "models/metrostroi_train/81-718/labels/destination.dx80.vtx", + "models/metrostroi_train/equipment/arrow_bc_old.dx90.vtx", + "models/metrostroi_train/equipment/button_ezh_6.vvd", + "models/metrostroi_train/reversor/reversor_collection_box2_cover.mdl" + } + }, + { + --part4 + wsid = 1095105863, + additional = { + "materials/models/metrostroi_train/cabin717_030.vtf", + "materials/models/metrostroi_train/switches/vud.vtf", + "materials/models/metrostroi_train/common/lamps/svetodiod.vmt", + "materials/models/metrostroi_train/bogey/couple_s.vtf", + "materials/models/metrostroi_train/81-707/pipes_n.vtf", + "materials/models/metrostroi_train/81-703/int1.vmt", + "models/metrostroi_train/81-703/81-703.phy", + "models/metrostroi_train/81-707/ezh_lamp_0.mdl", + "models/metrostroi_train/bogey/disconnect_valve_blue.dx90.vtx", + "models/metrostroi_train/common/routes/ezh/route_holder.dx80.vtx", + } + }, + { + --part5 + wsid = 1095109617, + additional = { + "materials/models/metrostroi/re_sign/re_sign_light_off.vmt", + "materials/models/metrostroi_schemes/map_2.vtf", + "materials/models/metrostroi_train/81/18_det.vmt", + "materials/models/metrostroi_train/81-502/labels/label_1.vtf", + "materials/models/metrostroi_train/81-508/81-509_line4.vmt", + "materials/models/metrostroi_train/81-702/body_n.vtf", + "materials/models/metrostroi_train/81-720/labels/label_empty.vmt", + "models/metrostroi_train/81/button_light.mdl", + "models/metrostroi_train/81-502/81-502.phy", + "models/metrostroi_train/81-502/indicators/ars_0.dx80.vtx", + "models/metrostroi_train/81-508/81-508_underwagon.dx90.vtx", + "models/metrostroi_train/81-702/81-702_red_light.vvd", + } + }, + { + --part 6 + wsid = 1095111608, + additional = { + "materials/metrostroi_arm/2-switch_half.vtf", + "materials/cyber_metrostroi/pc_arm/screen_arm.vmt", + "models/cyber_metrostroi/pc_arm/pc_body.mdl", + "models/metrostroi/re_sign/signal_outdoor_35.sw.vtx", + "sound/udochka_connect.wav", + "sound/subway_trains/718/tisu.wav", + "sound/subway_trains/722/kuau/x_xp2.mp3", + "sound/subway_trains/bogey/brake_squeal2.mp3", + "sound/subway_trains/common/junk/junk_enginestart_speed3.mp3", + "sound/subway_trains/717/bpsn/bpsn_old.wav", + "sound/subway_trains/502/ring_ksaup.wav", + + } + }, + --[[ { + --Scripts + wsid = 1095130789, + additional = { + "lua/autorun/metrostroi.lua", + "lua/entities/gmod_mus_clock_analog/init.lua", + "lua/entities/gmod_subway_81-717_mvm/init.lua", + "lua/entities/gmod_track_signal/shared.lua", + "lua/metrostroi/skins/default.lua", + "lua/metrostroi/systems/sys_81_720_electric.lua", + "lua/metrostroi/systems/sys_als_ars.lua", + "lua/metrostroi/sv_railnetwork.lua", + "lua/metrostroi/sv_turbostroi.lua", + "lua/metrostroi_data/languages/en_base.lua", + "lua/ulx/modules/sh/metrostroi.lua", + "lua/weapons/gmod_tool/stools/switch.lua" + + } + },--]] + { + --Github check + name = "Metrostroi Github", + additional = { + "lua/entities/gmod_subway_rusich/cl_init.lua", + "lua/entities/gmod_subway_ema/init.lua", + "lua/entities/gmod_subway_ema508t/shared.lua", + "lua/entities/gmod_subway_em508/cl_init.lua", + "lua/entities/gmod_subway_em508_int/init.lua", + "lua/metrostroi/systems/sys_81_704_panel.lua", + "lua/metrostroi/systems/sys_81_717lvz_panel.lua", + "lua/metrostroi/systems/sys_noars.lua", + "sound/subway_announcer_riu/arr_108.mp3", + "sound/subway_announcer_pnm/00_06.mp3", + }, + reason="Workshop.ErrorGithub", + single = true, + }, + { + --Legacy version + wsid = 1098448386, + additional = { + "lua/entities/gmod_subway_81-717/cl_init.lua", + "lua/entities/gmod_subway_81-717/init.lua", + "lua/entities/gmod_subway_81-714/shared.lua", + "lua/entities/gmod_subway_81-714/cl_init.lua", + "sound/subway_announcer/02_02.mp3", + }, + reason="Workshop.ErrorLegacy", + single = true, + }, + { + --Old content + additional = { + "materials/models/metrostroi_train/81-702/apparats.vmt", + "materials/models/metrostroi_train/81-702/apparats_n.vtf", + "materials/models/metrostroi_train/81-702/body.vtf", + "models/metrostroi_train/81-717/81-717.mdl", + }, + reason="Workshop.ErrorOld", + }, + { + --Some effects enhancers + wsid = 259517980, + reason="Workshop.ErrorEnhancers", + }, + { + --Some effects enhancers + wsid = 111396485, + reason="Workshop.ErrorEnhancers", + }, + { + --Driveable trams + wsid = 707998439, + reason="Workshop.Error1", + single = true, + }, + { + --Train bogey entity + wsid = 1434772621, + reason="Workshop.Error1", + single = true, + }, + { + --Gm_mus_orange_c_long + wsid = 793374567, + reason="Workshop.Error1", + single = true, + }, +} + + +local function drawText(panel,text,color,font) + local addonWarn = vgui.Create("DLabel",panel) + addonWarn:Dock( TOP ) + addonWarn:SetFont(font or "DermaDefault") + addonWarn:SetTextColor(color or Color(0,0,0)) + addonWarn:SetText(text or "N\\A") + addonWarn:DockMargin( 0, -4, 0, -4) + addonWarn:DockPadding( 0, -4, 0, -4) +end +function vgui.MetrostroiDrawCutText(panel,text,color,font) + if text:find("\n") then + for k,v in pairs(string.Explode("\n",text)) do + vgui.MetrostroiDrawCutText(panel,v,color,font) + end + return + end + + surface.SetFont(font or "DermaDefault") + local doneText,width = "",0 + for i,v in pairs(string.Explode(" ",text)) do + local phraseWidth = surface.GetTextSize(v) + if width + phraseWidth < 390 then + doneText = doneText.." "..v + width=width+phraseWidth + elseif width ~= 0 then + drawText(panel,doneText,color,font) + doneText = v + width=phraseWidth + else + doneText = v + width = phraseWidth + break + end + end + if #doneText > 0 and width > 390 then + local fr = 1 + for ls=1,#doneText do + local phraseWidth = surface.GetTextSize(doneText:sub(fr,ls)) + if phraseWidth > 390 then + drawText(panel,doneText:sub(fr,ls-1),color,font) + doneText = doneText:sub(ls,-1) + end + end + end + if #doneText > 0 then + drawText(panel,doneText,color,font) + end +end +local WaitAddons = 0 +local function showAddons(ply) + for _,v in ipairs(RequiredAddons) do + v.error = nil; v.message = nil + --Check some files in addon, if we install to addons folder + local installed = -1 + if v.additional and #v.additional > 0 then + installed=0 + for _,path in ipairs(v.additional) do + if not file.Exists( path, "GAME") then --[[ print(v.name,path)--]] break end + installed = installed+1 + end + end + + if installed~=-1 then + if installed<#v.additional and not v.reason and (v.downloaded and v.mounted or not v.filename) then + v.error = true + if v.filename then + v.message = "Workshop.FilesMissing" + else + v.message = "Workshop.FilesMissingLocaly" + end + elseif installed>=#v.additional and not v.mounted then + v.error = v.reason~=nil + v.message = v.reason or "Workshop.InstalledLocaly" + end + end + if not v.message and v.wsid then + if v.reason then + v.error = v.downloaded and v.mounted + v.message = v.error and v.reason or "Workshop.NotInstalled" + else + v.error = not v.downloaded or not v.mounted + v.message = not v.downloaded and "Workshop.NotInstalledE" or not v.mounted and "Workshop.Disabled" or "Workshop.Installed" + end + elseif v.reason and not v.message then + v.error = false + v.message = "Workshop.NotInstalled" + end + if v.message then + v.message = Metrostroi.GetPhrase(v.message) + else + v.message = Metrostroi.GetPhrase("N\\A") + end + if GetConVarNumber("metrostroi_addons_check_ignore") > 0 and (v.error or not v.message) then + RunConsoleCommand("metrostroi_addons_check_ignore",0) + end + end + if GetConVarNumber("metrostroi_addons_check_ignore") > 0 and not ply or WaitAddons > 0 then return end + + if IsValid(MetrostroiWorkshopVGUI) then MetrostroiWorkshopVGUI:Close() end + local badCount = 0 + for i,a in ipairs(RequiredAddons) do if a.error or a.message == "N\\A" then badCount = badCount + 1 end end + local frame = vgui.Create("DFrame") + MetrostroiWorkshopVGUI = frame + frame:SetDeleteOnClose(true) + frame:SetTitle(Metrostroi.GetPhrase("Workshop.Title")) + frame:SetSize(0, 0) + frame:SetDraggable(true) + frame:SetSizable(false) + frame:MakePopup() + --text:SetText(Metrostroi.GetPhrase("Workshop.Warn")) + + local scrollPanel = vgui.Create( "DScrollPanel", frame ) + --scrollPanel:SetMinimumSize(nil,450) + for i,a in ipairs(RequiredAddons) do + if badCount ~= 0 and not showall and GetConVarNumber("metrostroi_addons_check_skip_error") > 0 and not a.error and a.message ~= "N\\A" or not a.error and a.reason then continue end + + --local a = v[1] + local addon = vgui.Create("DPanel") + addon:Dock( TOP ) + addon:DockMargin( 5, 0, 5, 5 ) + addon:DockPadding( 5, 5, 5, 5 ) + + if a.notlocaly and a.message ~= "N\\A" then + local openLink = vgui.Create("DButton",addon) + openLink:Dock(RIGHT) + openLink:SetText(Metrostroi.GetPhrase("Workshop.Open")) + openLink:DockPadding( 5, 5, 5, 5 ) + openLink:SizeToContents() + openLink:SetContentAlignment(5) + openLink.id = a.wsid + function openLink:DoClick() + steamworks.ViewFile(self.id) + end + end + + + --vgui.MetrostroiDrawCutText(addon,Metrostroi.GetPhrase("Workshop.Warning"),false,"DermaDefaultBold") + vgui.MetrostroiDrawCutText(addon,a.name or "N\\A",false,"DermaDefaultBold") + vgui.MetrostroiDrawCutText(addon,Format(a.message,a.filename),a.message == "N\\A" and Color(175,150,0) or a.error and Color(150,0,0) or Color(0,150,0),"DermaDefaultBold") + if a.error and not scrollPanel.ScrollTo then scrollPanel.ScrollTo = addon end + + --[[ Metrostroi.GetPhrase("Workshop.Warning").."\n" + ..a.name.."\n" + ..a.badreason.."\n"--]] + --addonWarn:SetFont("DermaDefaultBold") + --addonWarn:SetAutoStretchVertical(true) + --[[ local addonName = vgui.Create("DLabel",addon) + addonName:SetWrap(true) + addonName:SetTextColor(Color(0,0,0)) + addonName:SetTextInset( 0, 0 ) + addonName:SetText(a.name) + addonName:SetFont("DermaDefaultBold") + addonName:SetContentAlignment(5) + addonName:SetAutoStretchVertical(true) + addonName:Dock( TOP ) + addonName:StretchToParent() + --addonName:SizeToChildren(true,true) + local addonErr = vgui.Create("DLabel",addon) + addonErr:SetWrap(true) + addonErr:SetTextColor(Color(255,0,0)) + addonErr:SetTextInset( 0, 0 ) + addonErr:SetText(a.badreason) + addonErr:SetFont("DermaDefaultBold") + addonErr:SetContentAlignment(5) + addonErr:SetAutoStretchVertical(true) + addonErr:Dock( TOP ) + addonErr:StretchToParent()--]] + --addonErr:SizeToChildren(true,true) + + addon:InvalidateLayout( true ) + addon:SizeToChildren(true,true ) + scrollPanel:AddItem(addon) + end + scrollPanel:Dock( FILL ) + scrollPanel:InvalidateLayout( true ) + scrollPanel:SizeToChildren(false,true) + local spPefromLayout = scrollPanel.PerformLayout + function scrollPanel:PerformLayout() + spPefromLayout(self) + if not self.First then self.First = true return end + local x,y = scrollPanel:ChildrenSize() + if self.Centered then return end + self.Centered = true + frame:SetSize(512,math.min(350,y)+35) + frame:Center() + if self.ScrollTo then self:ScrollToChild(self.ScrollTo) end + end + --frame:InvalidateLayout( true ) + --frame:SizeToChildren(false,true ) + if badCount == 0 then + RunConsoleCommand("metrostroi_addons_check_ignore",1) + end +end + +local function checkAddons(ply) + if not Metrostroi then return end + for kr,v in ipairs(RequiredAddons) do + if v.single and not game.SinglePlayer() then continue end + v.filename = nil; v.downloaded = nil; v.downloaded = nil; v.mounted = nil; v.error = nil; v.message = nil + --find our addon installed from workshop + local founded = false + for ka,a in pairs(engine.GetAddons()) do + if v.wsid and tonumber(a.wsid) == v.wsid then + v.name = a.title + v.filename = a.file + v.downloaded = a.downloaded + v.mounted = a.mounted + founded = true + v.notlocaly = true + end + end + if not founded and v.wsid then + WaitAddons = WaitAddons+1 + steamworks.FileInfo(v.wsid, function(a) + v.name = a.title + v.downloaded = a.installed + v.mounted = a.disabled + v.notlocaly = true + WaitAddons = WaitAddons-1 + if WaitAddons<=0 then + showAddons(ply) + return + end + end) + end + end + showAddons(ply) +end +checkAddons() +hook.Add("MetrostroiLoaded","AddonsChecked",checkAddons) +concommand.Add("metrostroi_addons_check",checkAddons,nil,"Run addons check") + diff --git a/lua/autorun/gm_metrostroi_content.lua b/lua/autorun/gm_metrostroi_content.lua new file mode 100644 index 0000000..aa0adb6 --- /dev/null +++ b/lua/autorun/gm_metrostroi_content.lua @@ -0,0 +1,22 @@ +if CLIENT then + return +end +local workshopid = { + 261801217, -- Original addon + --1095088360, + 1095094174, -- Pack 1 + 1095098251, -- Pack 2 + 1095100683, -- Pack 3 + 1095105863, -- Pack 4 + 1095109617, -- Pack 5 + 1095111608, -- Pack 6 + 674649096, + 348429431, +} +print("-Starting adding metrostroi workshop addons...") +print("-Workshop addons in base:"..#workshopid) +for k,v in pairs(workshopid) do + resource.AddWorkshop(tostring(v)) + print("--Added a "..v.." workshop addon.") +end +print("-End of adding workshop addons...") \ No newline at end of file diff --git a/lua/autorun/metrostroi.lua b/lua/autorun/metrostroi.lua new file mode 100644 index 0000000..6429a54 --- /dev/null +++ b/lua/autorun/metrostroi.lua @@ -0,0 +1,998 @@ +-------------------------------------------------------------------------------- +-- Add all required clientside files +-------------------------------------------------------------------------------- +local function resource_AddDir(dir) + local files,dirs = file.Find(dir.."/*","GAME") + for _, fdir in pairs(dirs) do + resource_AddDir(dir.."/"..fdir) + end + + for _,v in pairs(files) do + resource.AddFile(dir.."/"..v) + end +end +if SERVER then + util.AddNetworkString("metrostroi-mouse-move") + util.AddNetworkString("metrostroi-cabin-button") + util.AddNetworkString("metrostroi-cabin-reset") + util.AddNetworkString("metrostroi-panel-touch") + + --[[resource_AddDir("materials/metrostroi/props") + resource_AddDir("materials/models/metrostroi_signs") + resource_AddDir("materials/models/metrostroi_train") + resource_AddDir("materials/models/metrostroi_passengers") + resource_AddDir("materials/models/metrostroi_signals") + + resource_AddDir("models/metrostroi/signs") + resource_AddDir("models/metrostroi/81-717") + resource_AddDir("models/metrostroi/e") + resource_AddDir("models/metrostroi/81") + resource_AddDir("models/metrostroi/81-703") + resource_AddDir("models/metrostroi/81-508") + resource_AddDir("models/metrostroi/metro") + resource_AddDir("models/metrostroi/passengers") + resource_AddDir("models/metrostroi/signals") + resource_AddDir("models/metrostroi/tatra_t3") + + resource_AddDir("sound/subway_trains") + resource_AddDir("sound/subway_announcer") + resource_AddDir("sound/subway_stations_test1") + resource_AddDir("sound/subway_trains/new")]] +end + + +------ -------------------------------------------------------------------------- +-- Create metrostroi global library +-------------------------------------------------------------------------------- +if not Metrostroi then + -- Global library + Metrostroi = {} + + -- Supported train classes + Metrostroi.TrainClasses = {} + Metrostroi.IsTrainClass = {} + -- Supported train classes + Metrostroi.TrainSpawnerClasses = {} + timer.Simple(0.05, function() + for name in pairs(scripted_ents.GetList()) do + local prefix = "gmod_subway_" + if string.sub(name,1,#prefix) == prefix and scripted_ents.Get(name).Base == "gmod_subway_base" then + table.insert(Metrostroi.TrainClasses,name) + Metrostroi.IsTrainClass[name] = true + end + end + end) + + -- List of all systems + Metrostroi.Systems = {} + Metrostroi.BaseSystems = {} +end + +--List of spawned trains +Metrostroi.SpawnedTrains = {} +for k,ent in pairs(ents.GetAll()) do + if ent.Base == "gmod_subway_base" or ent:GetClass() == "gmod_subway_base" then + Metrostroi.SpawnedTrains[ent] = true + end +end + +hook.Add("EntityRemoved","MetrostroiTrains",function(ent) + if Metrostroi.SpawnedTrains[ent] then + Metrostroi.SpawnedTrains[ent] = nil + end +end) +if SERVER then + hook.Add("OnEntityCreated","MetrostroiTrains",function(ent) + if ent.Base == "gmod_subway_base" or ent:GetClass() == "gmod_subway_base" then + Metrostroi.SpawnedTrains[ent] = true + end + end) +else + hook.Add("OnEntityCreated","MetrostroiTrains",function(ent) + if ent:GetClass() == "gmod_subway_base" or scripted_ents.IsBasedOn(ent:GetClass(), "gmod_subway_base") then + Metrostroi.SpawnedTrains[ent] = true + end + end) +end + +------------------------ +-- Metrostroi version -- +------------------------ +Metrostroi.Version = 1537278077 +Metrostroi.Loaded = false + +-------------------------------------------------------------------------------- +-- Add skins function +-- category - a skin category(pass, cab, train) +-- name - name of skin(must be unique) or skin table(table must have a name) +-- tbl - skin table +-- Skin table: +-- { +-- typ = "81-717_lvz", (it's a gmod_subway_*(gmod_subway_81-717_lvz)) +-- name = "NAME",(or you can send name to function) +-- textures = { +-- texture_name = "path_to_texture", +-- b01a = "myskin/mycoolskin", +-- } +-- } +-- List of trains and manufacturers: +-- 81-717_mvm +-- 81-717_lvz +-- Ezh3 +-- Em +-- E +-------------------------------------------------------------------------------- +function Metrostroi.AddSkin(category,name,tbl) + if type(name) == "table" then + local Table = name + name = Table.name + Table.name = nil + tbl = Table + end + if not Metrostroi.Skins[category] then + print(Format("Metrostroi: Added a %s skin category",category)) + Metrostroi.Skins[category] = {} + end + if not tbl.typ then ErrorNoHalt(Format("Metrostroi:Skin error: %s wont have a typ direvtive!\n",tbl.name or name)) return end + Metrostroi.Skins[category][name] = tbl + Metrostroi.Skins.GetTable = function(id,name,tbl,typ) + local SkinsType = ENT and ENT.SkinsType + return {id,name,"List",function() + if SkinsType then + tbl = {} + for k,v in pairs(Metrostroi.Skins[typ]) do + if v.typ == SkinsType and not hook.Run("MetrostroiSkinsCheck",SkinsType,typ,v.name or k,k) then tbl[k] = v.name or k end + end + return tbl + end + end,nil,function(ent,val) + if not Metrostroi.Skins or not Metrostroi.Skins[typ] then return end + local texture = Metrostroi.Skins[typ][val] + if not texture or hook.Run("MetrostroiSkinsCheck",texture.typ,typ,texture.name or val,val) then return end + ent:SetNW2String(id,val) + --[[ if texture.textures then + ent:SetNW2String(id,texture.func and texture.func(ent) or val) + elseif texture.func then + ent:SetNW2String(id,texture.func(ent)) + end--]] + end,function(List,VGUI) + if not Metrostroi.Skins or not Metrostroi.Skins[typ] then return end + local texture = Metrostroi.Skins[typ][List:GetOptionData(List:GetSelectedID())] + if not texture or not texture.defaults then return end + for k,v in pairs(texture.defaults) do + local id = VGUI[k].ID + print(List:GetOptionData(List:GetSelectedID()),id,VGUI[id],v) + if id and VGUI[id] then + VGUI[id](v,true) + end + end + end} + end +end + +-------------------------------------------------------------------------------- +-- Function for announcer adding +-------------------------------------------------------------------------------- +Metrostroi.AnnouncementsASNP = {} +Metrostroi.ASNPSetup = {} +function Metrostroi.AddANSPAnnouncer(name,soundtable,datatable) + if not soundtable or not datatable then return end + for k,v in pairs(Metrostroi.AnnouncementsASNP) do + if v.name == name then + Metrostroi.AnnouncementsASNP[k] = soundtable + Metrostroi.AnnouncementsASNP[k].name = name + Metrostroi.ASNPSetup[k] = datatable + Metrostroi.ASNPSetup[k].name = name + print("Metrostroi: Changed \""..name.."\" ASNP announcer.") + return + end + end + local id = table.insert(Metrostroi.AnnouncementsASNP,soundtable) + Metrostroi.AnnouncementsASNP[id].name = name + + local id = table.insert(Metrostroi.ASNPSetup,datatable) + Metrostroi.ASNPSetup[id].name = name + print("Metrostroi: Added \""..name.."\" ASNP announcer.") +end + +Metrostroi.AnnouncementsSarmatUPO = {} +Metrostroi.SarmatUPOSetup = {} +function Metrostroi.AddSarmatUPOAnnouncer(name,soundtable,datatable) + if not soundtable or not datatable then return end + for k,v in pairs(Metrostroi.AnnouncementsSarmatUPO) do + if v.name == name then + Metrostroi.AnnouncementsSarmatUPO[k] = soundtable + Metrostroi.AnnouncementsSarmatUPO[k].name = name + Metrostroi.SarmatUPOSetup[k] = datatable + Metrostroi.SarmatUPOSetup[k].name = name + print("Metrostroi: Changed \""..name.."\" Sarmat UPO(UPO2) announcer.") + return + end + end + local id = table.insert(Metrostroi.AnnouncementsSarmatUPO,soundtable) + Metrostroi.AnnouncementsSarmatUPO[id].name = name + + local id = table.insert(Metrostroi.SarmatUPOSetup,datatable) + Metrostroi.SarmatUPOSetup[id].name = name + + print("Metrostroi: Added \""..name.."\" Sarmat UPO(UPO2) announcer.") +end + +Metrostroi.AnnouncementsUPO = {} +Metrostroi.UPOSetup = {} +function Metrostroi.SetUPOAnnouncer(soundtable,datatable) + if not soundtable or not datatable then return end + Metrostroi.AnnouncementsUPO = {soundtable} + Metrostroi.UPOSetup = datatable + --Generating noise + for k,v in pairs(Metrostroi.UPOSetup or {}) do + if v.noises and v.noiserandom < math.random() then + v.noise = table.Random(v.noises) + end + end + + print("Metrostroi: Set UPO announcer and generated nosies.") +end +Metrostroi.AnnouncementsRRI = {} +Metrostroi.RRISetup = {} +function Metrostroi.SetRRIAnnouncer(soundtable,datatable) + if not soundtable or not datatable then return end + Metrostroi.AnnouncementsRRI = {soundtable} + Metrostroi.RRISetup = datatable + + print("Metrostroi: Set RRI announcer.") +end + +function Metrostroi.AddPassSchemeTex(id,name,schTbl) + id = id.."_schemes" + if not Metrostroi.Skins[id] then + Metrostroi.Skins[id] = {} + end + local tbl = Metrostroi.Skins[id] + for k,v in ipairs(tbl) do + if name == v.name then + tbl[k] = schTbl + tbl[k].name = name + return + end + end + tbl[table.insert(tbl,schTbl)].name = name +end + +local defaults = { + ["702_routes"] = { + "models/metrostroi_schemes/destination_table_black/label_cross", + "models/metrostroi_schemes/destination_table_black/label_dev", + "models/metrostroi_schemes/destination_table_black/label_freight", + }, + ["710_routes"] = { + "models/metrostroi_train/81-710/route_empty", + "models/metrostroi_schemes/destination_table_white/label_cross", + "models/metrostroi_schemes/destination_table_white/label_dev", + "models/metrostroi_schemes/destination_table_white/label_freight", + }, + ["717_routes"] = { + "models/metrostroi_schemes/destination_table_white/label_cross", + "models/metrostroi_schemes/destination_table_white/label_dev", + "models/metrostroi_schemes/destination_table_white/label_freight", + }, + ["720_routes"] = { + "models/metrostroi_train/81-720/labels/label_empty", + "models/metrostroi_schemes/destination_table_white/label_cross", + "models/metrostroi_schemes/destination_table_white/label_freight", + } +} +function Metrostroi.AddLastStationTex(id,stIndex,texture) + id = id.."_routes" + if not Metrostroi.Skins[id] then + Metrostroi.Skins[id] = {} + if defaults[id] then + if type(defaults[id]) == "table" then + Metrostroi.Skins[id].default = defaults[id][1] + for i=2,#defaults[id] do + Metrostroi.AddLastStationTex(id:sub(1,-8),1000+(i-1),defaults[id][i]) + end + else + Metrostroi.Skins[id].default = defaults[id] + end + end + end + local tbl = Metrostroi.Skins[id] + for k,v in pairs(tbl) do + if k == index then + tbl[v] = texture + return + end + end + tbl[stIndex] = table.insert(tbl,texture) +end +-------------------------------------------------------------------------------- +-- Load core files and skins +-------------------------------------------------------------------------------- +if SERVER then + local OSes = { + Windows = "win32", + Linux = "linux", + BSD = "linux", + POSIX = "linux", + OSX = "osx", + } + DISABLE_TURBOSTROI = false + if not DISABLE_TURBOSTROI then + print(Format("Metrostroi: Trying to load simulation acceleration DLL for %s %s...",jit.os,jit.arch)) + --TODO: OS specific check + if jit.arch == "x86" and OSes[jit.os] and file.Exists(Format("lua/bin/gmsv_turbostroi_%s.dll",OSes[jit.os]), "GAME") then + if not pcall(require,"turbostroi") then + if system.IsWindows() then + ErrorNoHalt("======================================================\nMetrostroi: Turbostroi library can't be loaded because of missing libraries!\nCheck, that you have Microsoft visual c++ 2010 and 2017 redistributable(x86) installed\nYou can download it from:\n") + MsgC(Color(255,0,0),"https://www.microsoft.com/en-us/download/details.aspx?id=5555\nhttps://aka.ms/vs/15/release/vc_redist.x86.exe\n") + ErrorNoHalt("======================================================\n") + else + ErrorNoHalt("Metrostroi: Turbostroi library can't be loaded!\n") + end + else + print("Metrostroi: Turbostroi library loaded successfuly.") + end + elseif jit.arch ~= "x86" then + ErrorNoHalt("Metrostroi: Unsupported architecture "..jit.arch..".\nTurbostroi works only on x86(32 bit) version of server\n") + elseif system.IsWindows() then + ErrorNoHalt("======================================================\nMetrostroi: Turbostroi DLL not found.\nYou can found turbostroi for Windows at \n") + MsgC(Color(255,0,0),"https://metrostroi.net/turbostroi\n") + ErrorNoHalt("Just place this .dll to garrysmod/lua/bin folder.\nIf bin folder doesn't exists - create it.\nDon't forget to install Microsoft visual c++ 2010 and 2017 redistributable(x86)\nYou can download it from:\n") + MsgC(Color(255,0,0),"https://www.microsoft.com/en-us/download/details.aspx?id=5555\nhttps://aka.ms/vs/15/release/vc_redist.x86.exe\n") + ErrorNoHalt("======================================================\n") + else + ErrorNoHalt("Metrostroi: Turbostroi DLL not found.\n") + end + else + Turbostroi = nil + end + + if Turbostroi + then print("Metrostroi: Simulation acceleration ENABLED!") + else print("Metrostroi: Simulation acceleration DISABLED") + end + + -- Load all lua translations + local files = file.Find("metrostroi_data/languages/*.lua","LUA") + for _,filename in pairs(files) do + AddCSLuaFile("metrostroi_data/languages/"..filename) + end + -- Loadall serverside lua files + files = file.Find("metrostroi/sv_*.lua","LUA") + for _,filename in pairs(files) do include("metrostroi/"..filename) end + -- Load all shared files serverside + + include("metrostroi/convars.lua") + files = file.Find("metrostroi/sh_*.lua","LUA") + for _,filename in pairs(files) do include("metrostroi/"..filename) end + + files = file.Find("metrostroi/cl_*.lua","LUA") + for _,filename in pairs(files) do AddCSLuaFile("metrostroi/"..filename) end + -- Add all shared files + AddCSLuaFile("metrostroi/convars.lua") + files = file.Find("metrostroi/sh_*.lua","LUA") + for _,filename in pairs(files) do AddCSLuaFile("metrostroi/"..filename) end + -- Add all system files + files = file.Find("metrostroi/systems/sys_*.lua","LUA") + for _,filename in pairs(files) do AddCSLuaFile("metrostroi/systems/"..filename) end + -- Add skin + Metrostroi.Skins = {["717_schemes"]={p={},m={}}} + files = file.Find("metrostroi/skins/*.lua","LUA") + for _,filename in pairs(files) do + AddCSLuaFile("metrostroi/skins/"..filename) + include("metrostroi/skins/"..filename) + end + + files = file.Find("metrostroi/maps/*.lua","LUA") + for _,filename in pairs(files) do + AddCSLuaFile("metrostroi/maps/"..filename) + include("metrostroi/maps/"..filename) + end +else + --[[ + concommand.Add( "metrostroi_reload_spawnmenu", function() + if IsValid( g_SpawnMenu ) then + g_SpawnMenu:Remove() + g_SpawnMenu = nil + end + hook.Call("OnGamemodeLoaded") + end)]] + include("metrostroi/convars.lua") + -- Load all clientside files + local files = file.Find("metrostroi/cl_*.lua","LUA") + for _,filename in pairs(files) do include("metrostroi/"..filename) end + -- Load all shared files + files = file.Find("metrostroi/sh_*.lua","LUA") + for _,filename in pairs(files) do include("metrostroi/"..filename) end + + -- Add skins + Metrostroi.Skins = {["717_schemes"]={p={},m={}}} + files = file.Find("metrostroi/skins/*.lua","LUA") + for _,filename in pairs(files) do include("metrostroi/skins/"..filename) end + --Include map scripts + files = file.Find("metrostroi/maps/*.lua","LUA") + for _,filename in pairs(files) do include("metrostroi/maps/"..filename) end +end +Metrostroi.AddLastStationTex("710","obkatka","metrostroi_skins/81-710_names/route_obkatka") +Metrostroi.AddLastStationTex("720","obkatka","metrostroi_skins/81-720_names/label_obkatka") +-------------------------------------------------------------------------------- +-- Load systems +-------------------------------------------------------------------------------- +if not Metrostroi.TurbostroiRegistered then + Metrostroi.TurbostroiRegistered = {} +end + +function Metrostroi.DefineSystem(name) + if not Metrostroi.BaseSystems[name] then + Metrostroi.BaseSystems[name] = {} + end + TRAIN_SYSTEM = Metrostroi.BaseSystems[name] + TRAIN_SYSTEM_NAME = name +end + +local function loadSystem(filename) + -- Get the Lua code + include(filename) + + -- Load train systems + if TRAIN_SYSTEM then TRAIN_SYSTEM.FileName = filename end + local name = TRAIN_SYSTEM_NAME or "UndefinedSystem" + TRAIN_SYSTEM_NAME = nil + + -- Register system with turbostroi + if Turbostroi and (not Metrostroi.TurbostroiRegistered[name]) then + Turbostroi.RegisterSystem(name,filename) + Metrostroi.TurbostroiRegistered[name] = true + end + + -- Load up the system + Metrostroi.Systems["_"..name] = TRAIN_SYSTEM + Metrostroi.BaseSystems[name] = TRAIN_SYSTEM + Metrostroi.Systems[name] = function(train,...) + local tbl = { _base = name } + local TRAIN_SYSTEM = Metrostroi.BaseSystems[tbl._base] + if not TRAIN_SYSTEM then print("No system: "..tbl._base) return end + for k,v in pairs(TRAIN_SYSTEM) do + if type(v) == "function" then + tbl[k] = function(...) + if not Metrostroi.BaseSystems[tbl._base][k] then + print("ERROR",k,tbl._base) + end + return Metrostroi.BaseSystems[tbl._base][k](...) + end + else + tbl[k] = v + end + end + + tbl.Initialize = tbl.Initialize or function() end + tbl.ClientInitialize = tbl.ClientInitialize or function() end + tbl.Think = tbl.Think or function() end + tbl.ClientThink = tbl.ClientThink or function() end + tbl.ClientDraw = tbl.ClientDraw or function() end + tbl.Inputs = tbl.Inputs or function() return {} end + tbl.Outputs = tbl.Outputs or function() return {} end + tbl.TriggerOutput = tbl.TriggerOutput or function() end + tbl.TriggerInput = tbl.TriggerInput or function() end + + tbl.Train = train + if SERVER then + tbl:Initialize(...) + else + tbl:ClientInitialize(...) + end + tbl.OutputsList = tbl:Outputs() + tbl.InputsList = tbl:Inputs() + tbl.IsInput = {} + for _,v in pairs(tbl.InputsList) do tbl.IsInput[v] = true end + return tbl + end +end + +-- Load all systems +local files = file.Find("metrostroi/systems/sys_*.lua","LUA") +for _,short_filename in pairs(files) do + local filename = "metrostroi/systems/"..short_filename + + -- Load the file + if SERVER + then loadSystem(filename) + else timer.Simple(0.05, function() loadSystem(filename) end) + end +end +local function loadAnn () + if Metrostroi.WorkingStations then + for k, v in pairs(Metrostroi.WorkingStations) do + for k1, v1 in pairs(v) do + Metrostroi.WorkingStations[k][v1] = k1 + end + end + end + + if Metrostroi.EndStations then + for k, v in pairs(Metrostroi.EndStations) do + for k1, v1 in pairs(v) do + Metrostroi.EndStations[k][v1] = k1 + end + end + end +end +if SERVER +then loadAnn() +else timer.Simple(0.1, loadAnn) +end +if SERVER then + util.AddNetworkString "MetrostroiMessages" + local function CheckErr(ply) + if not Turbostroi and IsValid(ply) and (ply:IsSuperAdmin() or not game.IsDedicated()) then + net.Start "MetrostroiMessages" + net.WriteString("Turbostroi is not installed!\nTurbostroi is accelerating train calculations by using multiple\ncores. Check "..(game.IsDedicated() and "server" or "game").." logs for more information.\nYou can download it at:\nhttps://metrostroi.net/turbostroi") + net.WriteString("https://metrostroi.net/turbostroi") + net.Send(ply) + end + if not game.IsDedicated() then + net.Start "MetrostroiMessages" + net.WriteString("For comfort and smooth experience, you need to\njoin to server or host a dedicated server.\nIt's required because Garry's mod using only\n1 core, and now it using it for client and server code.\nWhen you join or host server you can separate server\nand client processes to different cores.\nInformation about how to host server:\nhttp://wiki.garrysmod.com/page/Hosting_A_Dedicated_Server") + net.WriteString("http://wiki.garrysmod.com/page/Hosting_A_Dedicated_Server") + net.Send(ply) + end + end + local m_adm = {} + for _,v in pairs(player.GetHumans()) do + if IsValid(v) and v:IsAdmin() then + table.insert(m_adm,v) + end + end + CheckErr(m_adm) + hook.Add("PlayerInitialSpawn","MetrostroiWarnMessage",CheckErr) +else + local function err(msg, url) + local count = #msg:gsub("[^\n]+","") + local size = 83+count*18 + local warn = vgui.Create("DFrame") + warn:SetDeleteOnClose(true) + warn:SetTitle("Warning") + warn:SetSize(380, size) + warn:SetDraggable(false) + warn:SetSizable(false) + warn:Center() + warn:MakePopup() + local wrn = warn.Paint + warn.Paint = function(self, w, h) + wrn(self, w, h) + draw.DrawText(msg, "Trebuchet18", w/2, 30, color_white, 1) + end + + local Close = vgui.Create("DButton", warn) + Close:SetText("I understand") + Close:SetPos(290, size-30) + Close:SetSize(80, 25) + Close.DoClick = function() + warn:Close() + end + + local Open = vgui.Create("DButton", warn) + Open:SetText("Open link") + Open:SetPos(15, size-30) + Open:SetSize(80, 25) + Open.DoClick = function() + Close:SetText("Close window") + gui.OpenURL(url) + end + + local Copy = vgui.Create("DButton", warn) + Copy:SetText("Copy link") + Copy:SetPos(100, size-30) + Copy:SetSize(80, 25) + Copy.DoClick = function() + Close:SetText("Close window") + SetClipboardText(url) + end + end + net.Receive("MetrostroiMessages", function() + err(net.ReadString(),net.ReadString()) + end) +end +hook.Run("MetrostroiLoaded") +Metrostroi.Loaded = true + +if SERVER then + --------------------------------------------------- + -- Metrostroi reverser ID get -- + --===============================================-- + -- If you read this, please, don't try to spam -- + -- metrostroi.net site with requests -- + -- Thanks for understanding -- + --===============================================-- + -- ЕÑли ты читаешь Ñто, пожалуйта, не пытайÑÑ -- + -- Ñпамить запроÑами на Ñайт metrostroi.net -- + -- СпаÑибо за понимание -- + --------------------------------------------------- + --Cvars + local R_Disabled = CreateConVar("metrostroi_reverser_local",0, FCVAR_ARCHIVE,"Switch reverser IDs to local mode") + + Metrostroi.ReverserIDs = Metrostroi.ReverserIDs or {SS = {},SG = {}} + Metrostroi.ReverserID = Metrostroi.ReverserID or 0 + local function claimID(ply,id,typ,isLocal) + if not id then return end + if typ then + Metrostroi.ReverserIDs.SG[ply] = id + else + Metrostroi.ReverserIDs.SS[id] = not isLocal + Metrostroi.ReverserIDs.SS[ply] = id + end + end + + local function isNotLocal(id) + if not id then return end + return Metrostroi.ReverserIDs.SS[id] + end + + local function getLocalID(ply) + if Metrostroi.ReverserIDs.SS[ply] then return Metrostroi.ReverserIDs.SS[ply] end + + repeat + Metrostroi.ReverserID = Metrostroi.ReverserID + 1 + until Metrostroi.ReverserIDs.SS[Metrostroi.ReverserID]==nil + + claimID(ply,Metrostroi.ReverserID,false,true) + return Metrostroi.ReverserID + end + + local function removeGolden(ply) + if Metrostroi.ReverserIDs.SG[ply] then Metrostroi.ReverserIDs.SG[ply] = nil end + end + + function Metrostroi.GetReverserID(ply,callback,typ) + + if not IsValid(ply) or ply:IsBot() then return end + if callback == true then return Metrostroi.ReverserIDs.SG[ply] end + if game.SinglePlayer() then callback(1) return end + if not typ then + local ID = hook.Run("MetrostroiGetReverserID",ply) + if ID and type(ID)=="number" then callback(ID) return end + if R_Disabled:GetBool() then callback(getLocalID(ply)) return end + if isNotLocal(Metrostroi.ReverserIDs.SS[ply]) then callback(Metrostroi.ReverserIDs.SS[ply]) return end + end + + http.Post("https://api.metrostroi.net/get_info",{[typ and "SG" or "SS"]=ply:SteamID()},function(result,_,_,statusCode) + if not IsValid(ply) then return end + local ID = statusCode == 200 and tonumber(result) + + claimID(ply,ID,typ) + callback(ID or not typ and getLocalID(ply)) + + if typ and not ID then removeGolden(ply) end + end,function() + if not IsValid(ply) then return end + + callback(not typ and getLocalID(ply)) + + if typ then removeGolden(ply) end + end) + end + + --------------------------------------------------- + -- Metrostroi servers monitoring -- + --===============================================-- + -- If you read this, please, don't try to break -- + -- monitoring by sending wrong data to -- + -- metrostroi.net. Monitoring not created for -- + -- break it. Thanks for understanding -- + --===============================================-- + -- ЕÑли ты читаешь Ñто, пожалуйта, не пытайÑÑ -- + -- Ñломать мониторинг отправкой не доÑтоверных -- + -- данных на Ñайт metrostroi.net. Мониторинг -- + -- Ñоздан не Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы его пыталиÑÑŒ -- + -- Ñломать. СпаÑибо за понимание -- + --------------------------------------------------- + --Cvars + local CV_Enabled = CreateConVar("metrostroi_monitoring_allow",1, FCVAR_ARCHIVE,"Enables metrostroi servers monitoring for this server. Send only basic info(map,ip,port,hostname) for metrostroi servers list") + local CV_Key = CreateConVar("metrostroi_monitoring_key","", FCVAR_ARCHIVE,"Unique key for metrostroi servers monitoring. Used for server identification for servers with dynamic IP") + local CV_Pass = GetConVar("sv_password") + local State,LastSend,LastRec,LastSucc = 0 + local LastErr + + local metrostroiMonitoring + local function monitoringStarted() return timer.Exists("MetrostroiMonitoring") or timer.Exists("MetrostroiMonitoringPass") end + + local function adjustTimer(time,force) + if not force and not timer.Exists("MetrostroiMonitoring") then return end + timer.Create("MetrostroiMonitoring",time,0,metrostroiMonitoring) + --MsgC(Color(255,0,255),"MetrostroiMon: ",Color(255,255,255),"Timer ",time,"\n") + end + local function destroy() + hook.Remove("PlayerInitialSpawn","MetrostroiMonitoring") + hook.Remove("PlayerDisconnected","MetrostroiMonitoring") + timer.Remove("MetrostroiMonitoring") + timer.Remove("MetrostroiMonitoringPass") + --cvars.RemoveChangeCallback("metrostroi_monitoring_allow", "metrostroiMonitoring") + + --MsgC(Color(255,0,255),"MetrostroiMon: ",Color(255,255,255),"Destroy\n") + + State = 0 + end + local oldPass = CV_Pass:GetString() + local function init() + if monitoringStarted() then destroy() end + if not CV_Enabled:GetBool() then return end + adjustTimer(10,true) + --Post, if new player joined + hook.Add("PlayerInitialSpawn","MetrostroiMonitoring",function(ply) if not ply:IsBot() then metrostroiMonitoring(1,ply) end end) + hook.Add("PlayerDisconnected","MetrostroiMonitoring",function(ply) if not ply:IsBot() then metrostroiMonitoring(0,ply) end end) + --MsgC(Color(255,0,255),"MetrostroiMon: ",Color(255,255,255),"Init\n") + + State = 1 + LastErr = false + end + + local codes = { + [402] = "No SourceQuery answer", + [403] = "IP rejected", + [404] = "Wrong parameters", + } + + local function metrostroiMonitoringSucc(responseText, _, _, statusCode) + --if not monitoringStarted() then return end + if statusCode == 401 then return end + LastRec = CurTime() + if monitoringStarted() and State==1 then State=2 end + if codes[statusCode] then + RunConsoleCommand("metrostroi_monitoring_stop") + LastErr = codes[statusCode] + elseif statusCode == 500 then --Error in site + adjustTimer(30) + LastErr = "Internal server error (500). "..responseText + elseif statusCode==200 then + if #responseText==0 then + adjustTimer(60) + LastErr = false + LastSucc = CurTime() + else + local code = responseText:sub(1,2) + local response = responseText:sub(3,-1) + if code == "01" then + CV_Key:SetString(response) + adjustTimer(30) + elseif code=="02" then + if LastErr ~= "Server requested update (203)" then + LastErr = "Server requested update (203)" + metrostroiMonitoring() + end + adjustTimer(30) + elseif code == "03" then + MsgC(Color(255,255,255),"Your code: ",Color(255,0,255),response:sub(1,6),"\n") + MsgC(Color(255,255,255),"Your ServerID: ",Color(255,0,255),response:sub(7,-1),"\n") + MsgC(Color(255,255,255),"Do not show this code and ServerID to third parties!\n") + elseif code == "04"then + MsgC(Color(255,0,0),"This server is already confirmed\n") + MsgC(Color(255,0,0),"If you didn't do it, write to\n") + MsgC(Color(255,0,255),"https://metrostroi.net/tickets",Color(255,0,0)," about it.\n") + end + LastErr = code=="02" and LastErr or false + LastSucc = CurTime() + end + --[[ elseif 200 <= statusCode and statusCode <= 202 then + if statusCode == 201 and not responseText:find("SourceQuery") then + CV_Key:SetString(responseText) + adjustTimer(30) + elseif statusCode == 200 then + adjustTimer(60) + end + LastSucc = CurTime() + LastErr = false + elseif statusCode == 203 then + if LastErr ~= "Server requested update (203)" then + LastErr = "Server requested update (203)" + metrostroiMonitoring() + end + adjustTimer(30) + elseif statusCode == 204 then + MsgC(Color(255,255,255),"Your code: ",Color(255,0,255),responseText,"\n") + MsgC(Color(255,255,255),"Do not show this code to third parties!\n") + elseif statusCode == 205 then + MsgC(Color(255,0,0),"This server is already confirmed\n") + MsgC(Color(255,0,0),"If you didn't do it, write to\n") + MsgC(Color(255,0,255),"https://metrostroi.net/tickets",Color(255,0,0)," about it.\n")]] + else --Unhandled error in site + adjustTimer(30) + LastErr = Format("Unhandled status code (%d)!\n%s",statusCode,responseText) + RunConsoleCommand("metrostroi_monitoring_status") + end + --[[ + MsgC(Color(255,0,255),"MetrostroiMon:") + MsgC(Color(255,255,255),"\n\tResponse : ",Color(255,255,0),responseText) + MsgC(Color(255,255,255),"\n\tStatusCode: ",Color(255,255,0),statusCode) + Msg("\n")--]] + end + + local function metrostroiMonitoringFail(errorMessage) + --MsgC(Color(255,0,255),"MetrostroiMon: ",Color(255,0,0),"Failed\n") + adjustTimer(20) + LastErr = "Data send error! "..errorMessage + end + + local function post(params) + --PrintTable(params) + --MsgC(Color(255,0,255),"MetrostroiMon: ",Color(255,255,255),"Post\n") + http.Post("https://api.metrostroi.net/server_info",params,metrostroiMonitoringSucc,metrostroiMonitoringFail) + LastSend = CurTime() + end + local function shutdown() + if not monitoringStarted() then return end + local key = CV_Key:GetString("metrostroi_monitoring_key") + if #key ~= 128 then key = "" end + post{ + status = "2", + uid = key, + } + destroy() + end + + metrostroiMonitoring = function(typ,ply) + if not monitoringStarted() then return end + if game.SinglePlayer() or not CV_Enabled:GetBool() or not Metrostroi.CurrentMap then + destroy() + return + end + local ip,port = string.match(game.GetIPAddress(),"([%d.]+):([%d]+)") + local key = CV_Key:GetString("metrostroi_monitoring_key") + if #key ~= 128 then key = "" end + if CV_Pass:GetString("sv_password") ~= "" then + --if key ~= "" then + post{ + --[[ ip = ip, + port = port, + hostname = "", + map = "", + maxplayers = "0", + players = "0", + version = "0",--]] + + status = "1", + uid = key, + } + --end + destroy() + --Detect sv_password changes for monitoring status change + timer.Create("MetrostroiMonitoringPass",1,0,function() + local value = CV_Pass:GetString() + if oldPass ~= value and value == "" then + init() + timer.Remove("MetrostroiMonitoringPass") + end + oldPass = value + end) + State = -1 + elseif typ==2 then + post{ + uid = key, + owner = ply, + status = "0", + } + else + local players + if LastErr == "Server requested update (203)" then + players = {} + for _,v in pairs(player.GetHumans()) do + if v:IsBot() then continue end + table.insert(players,v:SteamID()) + end + end + post{ + ip = ip, + port = port, + hostname = GetHostName(), + map = game.GetMap(), + maxplayers = tostring(game.MaxPlayers()), + players = tostring(typ==0 and player.GetCount()-1 or player.GetCount()), + version = tostring(Metrostroi.Version), + status = "0", + uid = key, + connect = ply and tostring(typ), + SID = ply and ply:SteamID(), + players_list = players and util.TableToJSON(players), + } + end + end + + init() + concommand.Add("metrostroi_monitoring_start",function(ply) + if IsValid(ply) then return end + + if not monitoringStarted() and CV_Enabled:GetBool() then + init() + MsgC(Color(255,0,255),"MetrostroiMon: ",Color(0,255,0),"Started.\n") + elseif CV_Enabled:GetBool() then + MsgC(Color(255,0,255),"MetrostroiMon: ",Color(255,255,0),"Already started.\n") + else + MsgC(Color(255,0,255),"MetrostroiMon: ",Color(255,0,0),"Start blocked.", + Color(255,255,0),"\n\tIf you want send monitoring data, type\n\t",Color(255,0,255),"metrostroi_monitoring_allow 1",Color(255,255,0)," to console\n") + end + end,nil,"Try to start monitoring") + concommand.Add("metrostroi_monitoring_stop",function(ply) + if IsValid(ply) then return end + + if monitoringStarted() then + shutdown() + MsgC(Color(255,0,255),"MetrostroiMon: ",Color(0,255,0),"Stopped.\n") + else + MsgC(Color(255,0,255),"MetrostroiMon: ",Color(255,255,0),"Already stopped.\n") + end + end,nil,"Try to stop monitoring") + + local function printTime(time) + if not time then MsgC(Color(255,255,0),"N/A\n") return end + local elapsed = CurTime()-time + MsgC( + Color(elapsed > 120 and 255 or 0,elapsed < 180 and 255 or 0,0), + string.NiceTime(elapsed),"\n" + ) + end + concommand.Add("metrostroi_monitoring_status",function(ply) + if IsValid(ply) then return end + + if State>0 then + MsgC(Color(255,0,255),"MetrostroiMon:\t\t",Color(0,255,0),"Watchdog working\n") + MsgC(Color(255,255,255),"\tStatus:\t\t") + if State == 1 then + MsgC(Color(255,255,0),"Initialization...\n") + elseif State == 2 then + MsgC(Color(0,255,0),"Working") + if LastErr then MsgC(Color(255,0,0)," Errored") end + MsgC("\n") + end + MsgC(Color(255,255,255),"\tNext send:\t",string.NiceTime(timer.TimeLeft("MetrostroiMonitoring")),"\n") + MsgC(Color(255,255,255),"\tLast send:\t") + printTime(LastSend) + MsgC(Color(255,255,255),"\tLast receive:\t") + printTime(LastRec) + MsgC(Color(255,255,255),"\tLast success:\t") + printTime(LastSucc) + if LastErr then MsgC(Color(255,0,0),"\tLast error:\t",LastErr,"\n") end + elseif State == -1 then + MsgC(Color(255,0,255),"MetrostroiMon:\t\t",Color(255,255,0),"Suspended by sv_password\n") + if LastErr then MsgC(Color(255,0,0),"\tLast error:\t",LastErr,"\n") end + elseif CV_Enabled:GetBool() then + MsgC(Color(255,0,255),"MetrostroiMon:\t\t",Color(0,255,0),"Watchdog stopped\n") + if LastErr then MsgC(Color(255,0,0),"\tCaused by:\t",LastErr,"\n") end + else + MsgC(Color(255,0,255),"MetrostroiMon: ",Color(255,0,0),"Watchdog blocked.", + Color(255,255,0),"\n\tIf you want send monitoring data,enter\n\t",Color(255,0,255),"metrostroi_monitoring_allow 1",Color(255,255,0)," to console\n") + if LastErr then MsgC(Color(255,0,0),"\tLast error:\t",LastErr,"\n") end + end + end,nil,"Monitoring status") + --Restart monitoring, if we want to start it + concommand.Add("metrostroi_monitoring_restart",function(ply) + if IsValid(ply) then return end + + RunConsoleCommand("metrostroi_monitoring_stop") + RunConsoleCommand("metrostroi_monitoring_start") + end,nil,"Restart monitoring") + + concommand.Add("metrostroi_monitoring_confirm",function(ply,_,_,str) + if IsValid(ply) then return end + + if not monitoringStarted() or State<=1 then + print("Monitoring is not started. It can be disabled or have a error.") + print("You can check monitoring status by metrostroi_monitoring_status console command.") + elseif #str==0 then + print("Usage of the command:metrostroi_monitoring_confirm SteamID") + elseif not str:match("^STEAM_[0-5]:[0-2]:[%d]+$") then + print("Invalid argument. First argument must be valid SteamID.") + else + metrostroiMonitoring(2,str) + end + end,nil,"Confirm validity of server and set the owner of the server.") + + + cvars.AddChangeCallback("metrostroi_monitoring_allow", function(cvar, old, value) + if not monitoringStarted() and CV_Enabled:GetBool() then + RunConsoleCommand("metrostroi_monitoring_start") + elseif monitoringStarted() and not CV_Enabled:GetBool() then + RunConsoleCommand("metrostroi_monitoring_stop") + end + end, "metrostroiMonitoring") + hook.Add("ShutDown","MetrostroiMonitoring",shutdown) +end \ No newline at end of file diff --git a/lua/autorun/prop_button.lua b/lua/autorun/prop_button.lua new file mode 100644 index 0000000..20ef401 --- /dev/null +++ b/lua/autorun/prop_button.lua @@ -0,0 +1,54 @@ +if SERVER then return end + +local PANEL = {} + +AccessorFunc( PANEL, "m_pRow", "Row" ) + +function PANEL:Init() +end + +function PANEL:Think() + + -- + -- Periodically update the value + -- + if ( isfunction( self.m_pRow.DataUpdate ) ) then + + self.m_pRow:DataUpdate() + + end + +end + +-- +-- Called by this control, or a derived control, to alert the row of the change +-- +function PANEL:DoClick(self1) + if ( isfunction( self.m_pRow.OnPress ) ) then + + self.m_pRow:OnPress(self1) + + end + +end + +function PANEL:Setup( ) + local name = self:GetRow().Label:GetText() + self:Clear() + self:GetRow().Label:Remove() + local butt = self:Add( "DButton",self:GetRow()) + self:GetRow().Button = butt + self:GetRow().Label = butt + butt:SetPaintBackground( true ) + butt:Dock( FILL ) + butt:SetText(name) + butt.DoClick = function(self1) + self:DoClick(self1) + end + -- Return true if we're editing + self.IsEditing = function( ) + return false + end +end + +derma.DefineControl( "DProperty_Button", "", PANEL, "Panel" ) diff --git a/lua/autorun/prop_float_ex.lua b/lua/autorun/prop_float_ex.lua new file mode 100644 index 0000000..c61d183 --- /dev/null +++ b/lua/autorun/prop_float_ex.lua @@ -0,0 +1,59 @@ +if SERVER then return end +local PANEL = {} + +function PANEL:Init() +end + +function PANEL:GetDecimals() + return 2 +end + +function PANEL:Setup(vars) + self:Clear() + local ctrl = self:Add("DNumSlider") + ctrl:Dock(FILL) + -- Apply vars + ctrl:SetMin(vars.min or 0) + ctrl:SetMax(vars.max or 1) + ctrl:SetDecimals(vars.dec or 2) + -- The label needs mouse input so we can scratch + self:GetRow().Label:SetMouseInputEnabled(true) + -- Take the scratch and place it on the Row's label + ctrl.Slider:SetLockY(1) --( self:GetRow().Label ) + ctrl.Scratch:SetParent(self:GetRow().Label) + ctrl.Scratch:SetZoom(vars.zoom or 0) + ctrl.Scratch:SetFloatValue(vars.fv or 1.5) + ctrl.Scratch:SetDecimals(vars.dec or 2) + + if vars.nodraw then + ctrl.Scratch.GetShouldDrawScreen = function() return false end + end + + -- Hide the numslider's label + ctrl.Label:SetVisible(false) + -- Move the text area to the left + ctrl.TextArea:Dock(LEFT) + -- Add a margin onto the slider - so it's not right up the side + ctrl.Slider:DockMargin(0, 3, 8, 3) + -- Return true if we're editing + self.IsEditing = function() return ctrl:IsEditing() end + + -- Set the value + self.SetValue = function(_, val) + ctrl:SetValue(val) + end + + self:GetRow().SetValue = self.SetValue + + -- Alert row that value changed + ctrl.OnValueChanged = function(_, newval) + self:ValueChanged(newval) + end + + self.Paint = function() + -- PERFORMANCE !!! + ctrl.Slider:SetVisible(self:IsEditing() or self:GetRow():IsChildHovered()) + end +end + +derma.DefineControl("DProperty_FloatEx", "", PANEL, "DProperty_Generic") diff --git a/lua/autorun/your_skin.txt b/lua/autorun/your_skin.txt new file mode 100644 index 0000000..4a36553 --- /dev/null +++ b/lua/autorun/your_skin.txt @@ -0,0 +1,21 @@ + +THIS FILE MUST HAVE THAT SYNTAXIS: + +if not Metrostroi.Skins then Metrostroi.Skins = {} end +if not Metrostroi.Skins["ezh3"] then Metrostroi.Skins["ezh3"] = {} end +table.insert(Metrostroi.Skins["ezh3"],{ + name = "Green-Blue", + path = "metrostroi_skins/ezh3/1", +}) + +WHERE: +table.insert(Metrostroi.Skins["ezh3"],{ + name = "Green-Blue", + path = "metrostroi_skins/ezh3/1", +}) + +YOUR SKIN +table.insert(Metrostroi.Skins["type of train(ezh3 or 717)"],{ +name = "YOUR NAME" +path = "PATH_TO_VMT_AND_VTF", +}) \ No newline at end of file diff --git a/lua/entities/_obsolete/gmod_subway_ai/cl_init.lua b/lua/entities/_obsolete/gmod_subway_ai/cl_init.lua new file mode 100644 index 0000000..8aa1831 --- /dev/null +++ b/lua/entities/_obsolete/gmod_subway_ai/cl_init.lua @@ -0,0 +1,131 @@ +include("shared.lua") + +-------------------------------------------------------------------------------- +ENT.ClientPropsInitialized = false + +-------------------------------------------------------------------------------- +function ENT:Props81717() + --if self.PropsInit then return end + --self.PropsInit = true + + local function GetDoorPosition(i,k,j) + if j == 0 + then return Vector(349.0 - 32*k - 230*i,-65*(1-2*k),-2.8) + else return Vector(349.0 - 32*(1-k) - 230*i,-65*(1-2*k),-2.8) + end + end + for i=0,3 do + for k=0,1 do + self.ClientProps["door"..i.."x"..k.."a"] = { + model = "models/metrostroi/81/81-7036_door1.mdl", + pos = GetDoorPosition(i,k,0), + ang = Angle(0,180*(1-k),0) + } + self.ClientProps["door"..i.."x"..k.."b"] = { + model = "models/metrostroi/81/81-7036_door2.mdl", + pos = GetDoorPosition(i,k,1), + ang = Angle(0,180*(1-k),0) + } + end + end + self.ClientProps["d1"] = { + model = "models/metrostroi/81/81-7036_door4.mdl", + pos = Vector(-487.0,-2.2,-4.5), + ang = Angle(0,0,0) + } + self.ClientProps["d2"] = { + model = "models/metrostroi/81/81-7036_door3.mdl", + pos = Vector(414.0,65.0,-1.8), + ang = Angle(0,0,0) + } + self.ClientProps["d3"] = { + model = "models/metrostroi/81/81-7036_door5.mdl", + pos = Vector(414.3,-65.0,-1.8), + ang = Angle(0,0,0) + } +end + +function ENT:Think() + self.BaseClass.Think(self) + + local trainType = self:GetNW2String("TrainType") + if trainType == "81-717" and not self.ClientProps["d1"] then + --self:Props81717() + end + + -- Animate doors + for i=0,3 do + for k=0,1 do + local n_l = "door"..i.."x"..k.."a" + local n_r = "door"..i.."x"..k.."b" + local animation = self:Animate(n_l,self:GetPackedBool(21+i+4-k*4) and 1 or 0,0,1, 0.8 + (-0.2+0.4*math.random()),0) + local offset_l = Vector(math.abs(31*animation),0,0) + local offset_r = Vector(math.abs(32*animation),0,0) + if self.ClientEnts[n_l] and IsValid(self.ClientEnts[n_l]) then + self.ClientEnts[n_l]:SetPos(self:LocalToWorld(self.ClientProps[n_l].pos + (1.0 - 2.0*k)*offset_l)) + end + if self.ClientEnts[n_r] and IsValid(self.ClientEnts[n_r]) then + self.ClientEnts[n_r]:SetPos(self:LocalToWorld(self.ClientProps[n_r].pos - (1.0 - 2.0*k)*offset_r)) + end + end + end + + -- Brake-related sounds + local brakeLinedPdT = self:GetPackedRatio(9) + local dT = self.DeltaTime + self.BrakeLineRamp1 = self.BrakeLineRamp1 or 0 + + if (brakeLinedPdT > -0.001) + then self.BrakeLineRamp1 = self.BrakeLineRamp1 + 2.0*(0-self.BrakeLineRamp1)*dT + else self.BrakeLineRamp1 = self.BrakeLineRamp1 + 2.0*((-0.4*brakeLinedPdT)-self.BrakeLineRamp1)*dT + end + self:SetSoundState("release2",self.BrakeLineRamp1,1.0) + + self.BrakeLineRamp2 = self.BrakeLineRamp2 or 0 + if (brakeLinedPdT < 0.001) + then self.BrakeLineRamp2 = self.BrakeLineRamp2 + 2.0*(0-self.BrakeLineRamp2)*dT + else self.BrakeLineRamp2 = self.BrakeLineRamp2 + 2.0*(0.02*brakeLinedPdT-self.BrakeLineRamp2)*dT + end + self:SetSoundState("release3",self.BrakeLineRamp2,1.0) + + -- Compressor + local state = self:GetPackedBool(20) + self.PreviousCompressorState = self.PreviousCompressorState or false + if self.PreviousCompressorState ~= state then + self.PreviousCompressorState = state + if state then + self:SetSoundState("compressor",1,1) + else + self:SetSoundState("compressor",0,0) + self:PlayOnce("compressor_end",nil,0.75) + end + end + + -- ARS/ringer alert + local state = self:GetPackedBool(39) + self.PreviousAlertState = self.PreviousAlertState or false + if self.PreviousAlertState ~= state then + self.PreviousAlertState = state + if state then + self:SetSoundState("ring",0.20,1) + else + self:SetSoundState("ring",0,0) + self:PlayOnce("ring_end","cabin",0.45) + end + end + + -- DIP sound + self:SetSoundState("bpsn1",self:GetPackedBool(52) and 1 or 0,1.0) +end + +function ENT:OnRemove() + self.BaseClass.OnRemove(self) + for k,v in pairs(self.ClientProps) do + self.ClientProps[k] = nil + end + for k,v in pairs(self.ClientEnts) do + v:Remove() + end + self.ClientEnts = nil + self.ClientProps = {} +end \ No newline at end of file diff --git a/lua/entities/_obsolete/gmod_subway_ai/init.lua b/lua/entities/_obsolete/gmod_subway_ai/init.lua new file mode 100644 index 0000000..a9b340e --- /dev/null +++ b/lua/entities/_obsolete/gmod_subway_ai/init.lua @@ -0,0 +1,538 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +-------------------------------------------------------------------------------- +function ENT:Initialize() + -- Defined train information + self.SubwayTrain = { + Type = "AI", + Name = "", + } + if not self.TrainType then self.TrainType = "81-717" end + -- Set model and initialize + self.NoPhysics = true + if self.TrainType == "81-717" then self:SetModel("models/metrostroi/81/81-7036.mdl") end + if self.TrainType == "81-714" then self:SetModel("models/metrostroi/81/81-7037.mdl") end + self.BaseClass.Initialize(self) + + -- Create bogeys + self.FrontBogey = self:CreateBogey(Vector( 325-20,0,-75),Angle(0,180,0),true) + self.RearBogey = self:CreateBogey(Vector(-325-10,0,-75),Angle(0,0,0),false) + + -- Seats + if self.TrainType == "81-717" then + self.DriverSeat = self:CreateSeat("driver",Vector(410,-2,-23)) + --self.InstructorsSeat = self:CreateSeat("instructor",Vector(410,35,-28)) + --self.ExtraSeat = self:CreateSeat("instructor",Vector(410,-35,-28)) + end + --[[ + for i=1,1 do --17 + local pos = Vector(280-(i-1)*30-math.floor((i-1)/5)*80,-47,-32) + local p1 = self:CreateSeat("passenger",pos,Angle(0,90,0)) + pos.y = -pos.y + local p2 = self:CreateSeat("passenger",pos,Angle(0,270,0)) + end]] + + -- Setup door positions + self.LeftDoorPositions = {} + self.RightDoorPositions = {} + for i=0,3 do + table.insert(self.LeftDoorPositions,Vector(353.0 - 35*0.5 - 231*i,65,-1.8)) + table.insert(self.RightDoorPositions,Vector(353.0 - 35*0.5 - 231*i,-65,-1.8)) + end + + -- Find SOME sort of route + local route + for k,v in pairs(Metrostroi.AIConfiguration) do + if not route then route = k end + end + + -- Initial setup + if not self.Route then self.Route = route end + if (not self.PathID) and (route) and Metrostroi.AIConfiguration[route] then + self.PathID = Metrostroi.AIConfiguration[route].Path + end + self.Position = self.Position or 100 + self.Velocity = 0 + self.RheostatPosition = 0 + + -- Lights + if self.TrainType == "81-717" then + self.Lights = { + -- Head + [1] = { "headlight", Vector(465,0,-20), Angle(0,0,0), Color(176,161,132), fov = 100 }, + [2] = { "glow", Vector(460, 51,-23), Angle(0,0,0), Color(255,255,255), brightness = 2 }, + [3] = { "glow", Vector(460,-51,-23), Angle(0,0,0), Color(255,255,255), brightness = 2 }, + [4] = { "glow", Vector(460,-8, 55), Angle(0,0,0), Color(255,255,255), brightness = 0.3 }, + [5] = { "glow", Vector(460,-8, 55), Angle(0,0,0), Color(255,255,255), brightness = 0.3 }, + [6] = { "glow", Vector(460, 2, 55), Angle(0,0,0), Color(255,255,255), brightness = 0.3 }, + [7] = { "glow", Vector(460, 2, 55), Angle(0,0,0), Color(255,255,255), brightness = 0.3 }, + + -- Reverse + [8] = { "light", Vector(458,-45, 55), Angle(0,0,0), Color(255,0,0), brightness = 10, scale = 1.0 }, + [9] = { "light", Vector(458, 45, 55), Angle(0,0,0), Color(255,0,0), brightness = 10, scale = 1.0 }, + + -- Cabin + [10] = { "dynamiclight", Vector( 420, 0, 35), Angle(0,0,0), Color(255,255,255), brightness = 0.1, distance = 550 }, + + -- Interior + [12] = { "dynamiclight", Vector( 0, 0, 5), Angle(0,0,0), Color(255,255,255), brightness = 3, distance = 400 }, + + -- Side lights + [14] = { "light", Vector(-50, 68, 54), Angle(0,0,0), Color(255,0,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + [15] = { "light", Vector(4, 68, 54), Angle(0,0,0), Color(150,255,255), brightness = 0.6, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + [16] = { "light", Vector(1, 68, 54), Angle(0,0,0), Color(0,255,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + [17] = { "light", Vector(-2, 68, 54), Angle(0,0,0), Color(255,255,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + + [18] = { "light", Vector(-50, -69, 54), Angle(0,0,0), Color(255,0,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + [19] = { "light", Vector(5, -69, 54), Angle(0,0,0), Color(150,255,255), brightness = 0.6, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + [20] = { "light", Vector(2, -69, 54), Angle(0,0,0), Color(0,255,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + [21] = { "light", Vector(-1, -69, 54), Angle(0,0,0), Color(255,255,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + } + end + if self.TrainType == "81-714" then + self.Lights = { + -- Interior + [12] = { "dynamiclight", Vector( 0, 0, 5), Angle(0,0,0), Color(255,255,255), brightness = 3, distance = 400 }, + + -- Side lights + [14] = { "light", Vector(-50, 68, 54), Angle(0,0,0), Color(255,0,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + [15] = { "light", Vector(4, 68, 54), Angle(0,0,0), Color(150,255,255), brightness = 0.6, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + [16] = { "light", Vector(1, 68, 54), Angle(0,0,0), Color(0,255,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + [17] = { "light", Vector(-2, 68, 54), Angle(0,0,0), Color(255,255,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + + [18] = { "light", Vector(-50, -69, 54), Angle(0,0,0), Color(255,0,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + [19] = { "light", Vector(5, -69, 54), Angle(0,0,0), Color(150,255,255), brightness = 0.6, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + [20] = { "light", Vector(2, -69, 54), Angle(0,0,0), Color(0,255,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + [21] = { "light", Vector(-1, -69, 54), Angle(0,0,0), Color(255,255,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + } + end + + -- Prop-protection related + if CPPI and IsValid(self.Owner) then + self:CPPISetOwner(self.Owner) + end + -- Spawn a dummy consist + if (self.TrainType == "81-717") and (not self.TrainHead) then + for i=2,5 do + local ent = ents.Create("gmod_subway_ai") + if i == 5 + then ent.TrainType = "81-717" + else ent.TrainType = "81-714" + end + ent.TrainIndex = i + ent.TrainHead = self + ent.Owner = self.Owner + ent:Spawn() + table.insert(self.TrainEntities,ent) + end + end + --self:Remove() + -- Type + self:SetNW2String("TrainType",self.TrainType) +end + +--[[concommand.Add("metrostroi_ai_spawn", function(ply, _, args) + if (ply:IsValid()) and (not ply:IsAdmin()) then return end + + local pathid = tonumber(args[2]) or 1 + local trainCounter = tonumber(args[1]) or 1 + local prevEnt + timer.Create("metrostroi-ai-spawntimer-"..pathid,1.0,0,function() + if prevEnt then + if (pathid == 1) and (prevEnt.Position < 260) then + return + end + if (pathid == 2) and (prevEnt.Position < 960) then + return + end + end + if trainCounter < 1 then return end + + local ent = ents.Create("gmod_subway_ai") + ent.Position = 150 + ent.PathID = pathid + ent:Spawn() + prevEnt = ent + trainCounter = trainCounter - 1 + print("Spawning AI trains (path "..pathid.."), left: "..trainCounter) + end) +end) + +concommand.Add("metrostroi_ai_clear", function(ply, _, args) + if (ply:IsValid()) and (not ply:IsAdmin()) then return end + for k,v in pairs(ents.FindByClass("gmod_subway_ai")) do + SafeRemoveEntity(v) + if args[1] then print("Removed one") return end + end + --timer.Create("metrostroi-ai-spawntimer",1.0,0,function()end) +end)]]-- + +concommand.Add("metrostroi_ai_info", function(ply, _, args) + if (ply:IsValid()) and (not ply:IsAdmin()) then return end + for k,v in pairs(ents.FindByClass("gmod_subway_ai")) do + if not v.TrainHead then + print(Format("Train to [%03d][%02d] (%.0f m %.02f km/h, left %0.3f m)", + v.TargetStation or 0,v.TargetPlatform or 0,v.Position,v.Speed, + (v.PlatformEdgeX or 0) - v.Position)) + end + end +end) + + + + +-------------------------------------------------------------------------------- +-- Train driving AI +-------------------------------------------------------------------------------- +function ENT:DoAI(dT) + -- Get a schedule + if self.Schedule and (#self.Schedule == 0) then + self.Schedule = nil + end + if (not self.Schedule) and (not self.NoStation) then + self.Schedule = Metrostroi.GenerateSchedule(self.Route) + self.StopTimer = 10 + end + + -- See if must move to next station + if self.Schedule then + if ((Metrostroi.ServerTime()+10000 > (self.Schedule[1][3]*60)) and (self.StopTimer < 0)) or + (self.StopTimer < -200) then + table.remove(self.Schedule,1) + self.StopTimer = 10 + end + end + + -- Get current target station info + local platformEdgeX + if self.Schedule and self.Schedule[1] then + local targetStation = self.Schedule[1][1] + local targetPlatform = self.Schedule[1][2] + local stationData = Metrostroi.Stations[targetStation] + local platformData + if stationData then platformData = stationData[targetPlatform] end + if platformData then + platformEdgeX = math.max(platformData.x_end,platformData.x_start) + end + if platformData and platformData.node_end then + if platformData.node_end.path.id ~= self.PathID then + --print("WRONG PATH") + platformEdgeX = nil + end + end + self.TargetStation = targetStation + self.TargetPlatform = targetPlatform + else + self.NoStation = true + end + self.PlatformEdgeX = platformEdgeX + + if platformEdgeX then + if self.Position > platformEdgeX then + --print("Overrun!",self.Position,platformEdgeX) + table.remove(self.Schedule,1) + self.StopTimer = 10 + end + end + + -- Get current information on driving + local speedLimit = self.ALS_ARS.SpeedLimit + local nextLimit = self.ALS_ARS.NextLimit + local targetSpeed = nextLimit + --print() + if nextLimit == 0 then targetSpeed = speedLimit end + + -- Move at slow speed to next red light or blocked section + if targetSpeed == 0 then targetSpeed = 20 end + -- If there is a red light ahead, stop once in its range + if self.RedLightDistance and (self.RedLightDistance < 20) then + targetSpeed = 0 + end + + -- Stop at station gradually + if platformEdgeX and (platformEdgeX > self.Position) then + local dX = platformEdgeX - self.Position + if dX < 100 then + targetSpeed = math.min(targetSpeed,55) * (math.max(0.0,math.min(1.0,(dX-12)/90))^0.5) + if dX > 18 then targetSpeed = math.max(targetSpeed,20) end + if self.Speed < 1 then + self.StopTimer = self.StopTimer - dT + end + end + end + + -- Wait for schedule start + if (self.PathID == 1) and (self.Position < 250) and + (self.Schedule) and (self.Schedule[1]) then + local dT = self.Schedule[1][3]*60 - Metrostroi.ServerTime() + --if dT > 90 then targetSpeed = 0 end + end + --targetSpeed = 0 + -- Reached target speed, stop accelerating + if self.Speed > (targetSpeed-2) then + self.Accelerating = false + end + -- Speed is below required, try to accelerate + if self.Speed < (targetSpeed-10) then + self.Accelerating = true + end + -- Exceeding speed limit, apply brakes + if self.Speed > targetSpeed then + self.Braking = true + end + -- Braked enough, stop braking + if (self.Speed < (targetSpeed-5)) and (self.Braking) then + self.Braking = false + end + + -- ARS system logic + if false and self.ALS_ARS.LVD then + self.Braking = true + self.Accelerating = false + end + --print(self.ALS_ARS.LVD) + if self.ALS_ARS.LVD + then self.ALS_ARS.AttentionPedal = true + else self.ALS_ARS.AttentionPedal = false + end + if speedLimit == 0 then self.ALS_ARS.AttentionPedal = true end + + -- Apply pneumatic brakes if overspeeding much or stopped + self.Pneumo = false + if (self.Speed < 7) and (not self.Accelerating) then + self.Pneumo = true + end + if (self.Speed > (targetSpeed+5)) then + --self.Pneumo = true + end + + -- Save for statistics + self.TargetSpeed = targetSpeed + --if self.RedLightDistance and (self.RedLightDistance < 30) then self.Pneumo = true end +end + + + +-------------------------------------------------------------------------------- +-- Train physics +-------------------------------------------------------------------------------- +function ENT:DoPhysics(dT) + -- Slopes code + local slopeAngle = self:GetAngles().p + if slopeAngle > 180 then slopeAngle = slopeAngle-360 end + local slopeFactor = math.min(8.0,math.max(-8.0,slopeAngle))/8.0 + + -- Motor code + local motorPower = 0 + if self.Accelerating then motorPower = 1.0 end + if self.Braking then motorPower = -1.0 end + + local motorForce = 0 + if motorPower > 0 then motorForce = 1.25*motorPower end + if motorPower < 0 then motorForce = -1.3*math.abs(motorPower) * math.max(-1.0,math.min(1.0,0.25*self.Velocity)) end + + -- Brake code + local brakeForce = 0 + if self.Pneumo then + brakeForce = -1.4*math.max(-1.0,math.min(1.0,3.0*self.Velocity)) + slopeFactor = slopeFactor*math.max(-1.0,math.min(1.0,3.0*self.Velocity)) + end + self.PneumoForce = brakeForce + + -- Integrate position and velocity + self.Acceleration = 0 + +motorForce + +brakeForce + -self.Velocity*0.0045 + +slopeFactor*1.52 + self.Velocity = self.Velocity + dT*self.Acceleration + self.Position = self.Position + dT*self.Velocity + --print(Format("%.2f/%.2f km/h %.0f m A-%s B-%s P-%s", + --self.Speed,self.TargetSpeed,self.Position, + --tostring(self.Accelerating),tostring(self.Braking),tostring(self.Pneumo))) + + -- Info + self.MotorPower = motorPower +end + +function ENT:Think() + -- Basic think loop + self.PrevTime = self.PrevTime or CurTime() + self.DeltaTime = (CurTime() - self.PrevTime) + self.PrevTime = CurTime() + + --self:RecvPackedData() + self:NextThink(CurTime()+0.10) + + -- Simulate equipment specific to trains + local dT = self.DeltaTime + if (self.TrainType == "81-717") and (not self.TrainHead) then + self.ALS_ARS:Think(dT,1) + end + + -- Select path + if (not self.PathID) or (not self.Route) then return true end + local path = Metrostroi.Paths[self.PathID] + local config = Metrostroi.AIConfiguration[self.Route] + if self.Position > config.EndPosition then + self.Route = config.NextRoute + config = Metrostroi.AIConfiguration[self.Route] + self.PathID = config.Path + self.Position = config.SpawnPosition + self.Velocity = 0 + + self.Schedule = nil + self.NoStation = false + end + --self.Velocity = 0 + + ---------------------------------------------------------------------------- + -- If needed, update train physics and AI + if not self.TrainHead then + self:DoAI(dT) + self:DoPhysics(dT) + else + if not IsValid(self.TrainHead) then + SafeRemoveEntity(self) + return + end + + self.Route = self.TrainHead.Route + self.PathID = self.TrainHead.PathID + self.Position = self.TrainHead.Position - 18.6*(self.TrainIndex-1) + self.Velocity = self.TrainHead.Velocity + self.MotorPower = self.TrainHead.MotorPower + self.PneumoForce = self.TrainHead.PneumoForce + end + + + ---------------------------------------------------------------------------- + -- Lighting + if self.TrainType == "81-717" then + self:SetLightPower(1, self.TrainHead == nil) + self:SetLightPower(2, self.TrainHead == nil) + self:SetLightPower(3, self.TrainHead == nil) + self:SetLightPower(4, self.TrainHead == nil) + self:SetLightPower(5, self.TrainHead == nil) + self:SetLightPower(6, self.TrainHead == nil) + self:SetLightPower(7, self.TrainHead == nil) + self:SetLightPower(8, self.TrainHead ~= nil) + self:SetLightPower(9, self.TrainHead ~= nil) + self:SetLightPower(10, (CurTime() % 60) > 0.1) + self:SetLightPower(12, (CurTime() % 60) > 0.1) + end + if self.TrainType == "81-714" then + self:SetLightPower(12, (CurTime() % 60) > 0.1) + end + -- Pneumatic brakes + self.PneumaticPressure = self.PneumaticPressure or 0 + self.PneumaticPressure_dPdT = self.PneumaticPressure_dPdT or 0 + if self.Pneumo + then self.PneumaticPressure_dPdT = 0.65*(1.5 - self.PneumaticPressure) + else self.PneumaticPressure_dPdT = 0.65*(0.0 - self.PneumaticPressure) + end + self.PneumaticPressure = self.PneumaticPressure + self.PneumaticPressure_dPdT*dT + + -- Minor state + if self.TrainHead then + self.LeftDoorsOpen = self.TrainHead.LeftDoorsOpen + self.RightDoorsOpen = self.TrainHead.RightDoorsOpen + else + self.LeftDoorsOpen = self.StopTimer and (self.StopTimer < 9) + self.RightDoorsOpen = self.StopTimer and (self.StopTimer < 9) + end + if self.LeftDoorsOpen ~= self.PrevLeftDoorsOpen then + self.PrevLeftDoorsOpen = self.LeftDoorsOpen + if self.LeftDoorsOpen then + self:PlayOnce("door_open1") + else + self:PlayOnce("door_close1") + end + end + if self.RightDoorsOpen ~= self.PrevRightDoorsOpen then + self.PrevRightDoorsOpen = self.RightDoorsOpen + if self.RightDoorsOpen then + self:PlayOnce("door_open1") + else + self:PlayOnce("door_close1") + end + end + self:SetPackedBool(21,self.LeftDoorsOpen) + self:SetPackedBool(22,self.LeftDoorsOpen) + self:SetPackedBool(23,self.LeftDoorsOpen) + self:SetPackedBool(24,self.LeftDoorsOpen) + self:SetPackedBool(25,self.RightDoorsOpen) + self:SetPackedBool(26,self.RightDoorsOpen) + self:SetPackedBool(27,self.RightDoorsOpen) + self:SetPackedBool(28,self.RightDoorsOpen) + self:SetPackedBool(52,1) + self:SetPackedBool(39,self.ALS_ARS.LVD and (not self.TrainHead)) + + -- Update state of all objects and sounds + self.Speed = math.abs(self.Velocity/0.277778) + self.FrontBogey.Speed = self.Speed + self.RearBogey.Speed = self.Speed + self.FrontBogey.MotorPower = self.MotorPower + self.RearBogey.MotorPower = self.MotorPower + self.FrontBogey.BrakeCylinderPressure_dPdT = -self.PneumaticPressure_dPdT + self.RearBogey.BrakeCylinderPressure_dPdT = -self.PneumaticPressure_dPdT + self.FrontBogey.BrakeSqueal = math.min(1,(3*math.abs(self.PneumoForce or 0))^1) + self.RearBogey.BrakeSqueal = math.min(1,(3*math.abs(self.PneumoForce or 0))^1) + + + ---------------------------------------------------------------------------- + -- Update train position + local vec,dir,node = Metrostroi.GetTrackPosition(path,self.Position) + if vec then + --local vec1,dir1 = Metrostroi.GetTrackPosition(path,self.Position+0) + local vec2,dir2 = Metrostroi.GetTrackPosition(path,self.Position-5) + if dir2 then + dir = dir2 + end + + if self.TrainHead then dir = -dir end + --[[local trace = { + start = vec, + endpos = vec + Vector(0,0,-384), + mask = MASK_NPCWORLDSTATIC + } + local result = util.TraceLine(trace)]]-- + local rollAngle = Angle(0,0,0)--Angle(0,0,(180.0/math.pi)*math.acos(result.HitNormal.z)) + + self:SetPos(vec) + self:SetAngles(dir:Angle() + rollAngle) + end + + -- Update information about restrictions in driving + self.RestrictionTimeout = self.RestrictionTimeout or 0 + if (CurTime() - self.RestrictionTimeout) > 0.50 then + self.RestrictionTimeout = CurTime() + if node and (not self.TrainHead) then + self.RedLightDistance = nil + + -- Check ARS signal/traffic light being red + local nextARS = Metrostroi.GetARSJoint(node,self.Position,true) + if nextARS and nextARS.AutoEnabled then + local arsOffset = (nextARS.ARSOffset or self.Position) + local dX = math.abs(arsOffset - self.Position) + if (not self.PlatformEdgeX) or (arsOffset < self.PlatformEdgeX) then + self.RedLightDistance = dX + end + end + + -- Find other trains on the same line + if not self.RedLightDistance then + for k,v in pairs(ents.FindByClass("gmod_subway_ai")) do + if (v.PathID == self.PathID) and (v ~= self) and (v.Position > self.Position) then + self.RedLightDistance = math.abs(v.Position - self.Position) + end + end + end + end + end + +-- self:SendPackedData() + return true +end \ No newline at end of file diff --git a/lua/entities/_obsolete/gmod_subway_ai/shared.lua b/lua/entities/_obsolete/gmod_subway_ai/shared.lua new file mode 100644 index 0000000..f2773c2 --- /dev/null +++ b/lua/entities/_obsolete/gmod_subway_ai/shared.lua @@ -0,0 +1,24 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.PrintNameT = "AI Train" +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" + +ENT.Spawnable = false --NOT FINISHED +ENT.AdminSpawnable = false --NOT FINISHED + +function ENT:PassengerCapacity() + return 300 +end + +function ENT:GetStandingArea() + return Vector(-450,-30,-45),Vector(380,30,-45) +end + +function ENT:InitializeSystems() + self:LoadSystem("ALS_ARS") +end diff --git a/lua/entities/_obsolete/gmod_subway_e/cl_init.lua b/lua/entities/_obsolete/gmod_subway_e/cl_init.lua new file mode 100644 index 0000000..8ddee8d --- /dev/null +++ b/lua/entities/_obsolete/gmod_subway_e/cl_init.lua @@ -0,0 +1,1881 @@ +include("shared.lua") + + +-------------------------------------------------------------------------------- +ENT.ClientProps = {} +ENT.ButtonMap = {} + +----- +-- ALS Panel +----- +ENT.ButtonMap["OldARS"] = { + pos = Vector(445.38,-57.98,18.49), + ang = Angle(0,-90-37.9,90), + width = 60, + height = 140, + scale = 0.0625, + + buttons = { + {ID = "L80", x=10,75, y=13,57, w=25,h=12, tooltip="ALS80"}, + {ID = "L70", x=10,75, y=30,57, w=25,h=12, tooltip="ALS70"}, + {ID = "L60", x=10,75, y=46,57, w=25,h=12, tooltip="ALS60"}, + {ID = "L40", x=10,75, y=61,57, w=25,h=12, tooltip="ALS40"}, + {ID = "L0", x=10,75, y=76,7, w=25,h=12, tooltip="ALS0"}, + {ID = "LOCh", x=10,75, y=91,57, w=25,h=12, tooltip="OCH"}, + } +} + +-- Main panel +ENT.ButtonMap["Main"] = { + pos = Vector(439.7+12.15,-31.99,0.05), + ang = Angle(0,-90,90-27), + width = 315, + height = 240, + scale = 0.0588, + + buttons = { + {ID = "DIPonSet", x=39 + 51*0-1, y=94, radius=20, tooltip="КУ4:Включение ДИП и оÑвещениÑ\nTurn DIP and interior lights on"}, + {ID = "DIPoffSet", x=35 + 51*1.03-1, y=94, radius=20, tooltip="КУ5:Отключение ДИП и оÑвещениÑ\nTurn DIP and interior lights off"}, + {ID = "VozvratRPSet", x=35 + 51*2-1, y=94, radius=20, tooltip="КУ9:Возврат РП\nReset overload relay"}, + {ID = "KSNSet", x=35 + 51*2.98-1, y=94, radius=20, tooltip="КУ8:Принудительное Ñрабатывание РП на неиÑправном вагоне (ÑÐ¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½ÐµÐ¸ÑправноÑти)\nKSN: Failure indication button"}, + {ID = "KVTSet", x=35 + 51*3.92-1, y=94, radius=20, tooltip="КБ: Кнопка БдительноÑти\nKB: Attention button"}, + {ID = "KDPSet", x=35 + 51*4.85-1, y=94, radius=20, tooltip="КДП:Правые двери\nKDP: Right doors open"}, + ----Down Panel + {ID = "KU1Toggle", x=17,y=128,w=45,h=90, tooltip="КУ1:Включение мотор-компреÑÑора\nTurn motor-compressor on"}, + {ID = "KRPSet", x=135,y=128,w=45,h=90, tooltip="КРР: Резервное реверÑирование"}, + {ID = "VUD1Toggle", x=253,y=128,w=45,h=90, tooltip="КУ2: Закрытие дверей\nVUD: Door control toggle (close doors)"}, + {ID = "ALSToggle", x=217,y=220,radius=20, tooltip="ÐЛС: ÐвтоматичеÑÐºÐ°Ñ Ð»Ð¾ÐºÐ¾Ð¼Ð¾Ñ‚Ð¸Ð²Ð½Ð°Ñ ÑигнализациÑ\nAdditional lighning"}, + {ID = "L_3Toggle", x=94, y=220, radius=20, tooltip="ОÑвещение приборов\nPanel lighting"}, + ----Lamps + {ID = "GreenRPLight", x=181, y=29.07, radius=20, tooltip="Ð—ÐµÐ»ÐµÐ½Ð°Ñ Ð ÐŸ: Ð—ÐµÐ»Ñ‘Ð½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки (Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿ÐµÑ€ÐµÐ³Ñ€ÑƒÐ·ÐºÐ¸)\nRP: Green overload relay light (overload relay open on current train)"}, + {ID = "RedRPLight", x=226.8, y=29.07, radius=20, tooltip="КраÑÐ½Ð°Ñ Ð ÐŸ: КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки\nRP: Red overload relay light (power circuits failed to assemble)"}, + {ID = "RedRP2Light", x=138, y=29.07, radius=20, tooltip="КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° РК (Вращение РеоÑтатного контроллера)\nRK: Rheostat controller motion light"}, + {ID = "LVD", x=47, y=29.07, radius=20, tooltip="ЛВД: Лампа Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹\nLVD: Engines engaged"}, + {ID = "LST", x=90, y=29.07, radius=20, tooltip="ЛСТ: Лампа Ñигнализации торможениÑ\nLST: Brakes engaged"}, + {ID = "BlueLight", x=270.6, y=29.1, radius=20, tooltip="СинÑÑ Ð»Ð°Ð¼Ð¿Ð° СД: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ поезда\nBlue door state light (doors are closed)"}, + + + --{ID = "RezMKSet", x=66, y=80, radius=20, tooltip="Резервное включение мотор-компреÑÑора\nEmergency motor-compressor startup"}, + --{ID = "VAHToggle", x=187, y=19, radius=20, tooltip="Ð’ÐÐ¥: Включение аварийного хода (неиÑправноÑть реле педали безопаÑноÑти)\nVAH: Emergency driving mode (failure of RPB relay)"}, + --{ID = "VADToggle", x=226, y=19, radius=20, tooltip="Ð’ÐД: Включение аварийного Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ (неиÑправноÑть реле ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð²ÐµÑ€ÐµÐ¹)\nVAD: Emergency door close override (failure of KD relay)"}, + + --{ID = "ARSToggle", x=187+77, y=19, radius=20, tooltip="ÐРС: Включение ÑиÑтемы автоматичеÑкого Ñ€ÐµÐ³ÑƒÐ»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑкороÑти\nARS: Automatic speed regulation"}, + --{ID = "ALSToggle", x=226+77, y=19, radius=20, tooltip="ÐЛС: Включение ÑиÑтемы автоматичеÑкой локомотивной Ñигнализации\nALS: Automatic locomotive signalling"}, + + --{ID = "OtklAVUToggle", x=349, y=19, radius=20, tooltip="Отключение автоматичеÑкого Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (неиÑправноÑть реле ÐВУ)\nTurn off automatic control disable relay (failure of AVU relay)"}, + --{ID = "VUD1Toggle", x=393, y=80, radius=20, tooltip="ВУД1: Выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÑŒÐ¼Ð¸\nVUD1: Door control toggle (close doors)"}, + + --{ID = "DoorSelectToggle",x=321, y=75, radius=20, tooltip="Выбор Ñтороны Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹\nSelect side on which doors will open"}, + {ID = "KDLSet", x=97, y=168, radius=20, tooltip="КУ12: Кнопка левых дверей\nKDL: Left doors open"}, + {ID = "KRZDSet", x=217, y=168, radius=20, tooltip="КУ10: Кнопка резервного Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹\nKRZD: Emergency door closing"}, + --{ID = "KDPSet", x=349, y=122, radius=20, tooltip="КДП: Кнопка правых дверей\nKDP: Right doors open"}, + + --{ID = "KVTSet", x=240, y=122, radius=20, tooltip=""}, + --{ID = "KSNSet", x=240, y=78, radius=20, tooltip="КСÐ: Кнопка Ñигнализации неиÑправноÑти\nKSN: Failure indication button"}, + --{ID = "KRPSet", x=192, y=122, radius=20, tooltip="КРП: Кнопка резервного пуÑка"}, + + --{ID = "R_Program1Set", x=112, y=127, radius=20, tooltip="Программа 1\nProgram 1"}, + --{ID = "R_Program2Set", x=149, y=127, radius=20, tooltip="Программа 2\nProgram 2"}, + + --{ID = "R_UNchToggle", x=112, y=30, radius=20, tooltip="УÐЧ: УÑилитель низких чаÑтот\nUNCh: Low frequency amplifier"}, + --{ID = "R_ZSToggle", x=149, y=30, radius=20, tooltip="ЭС: Контроль ÑкÑтренной ÑвÑзи\nES: Emergency communication control"}, + --{ID = "R_RadioToggle", x=112, y=80, radius=20, tooltip="Радиоинформатор (вÑтроеный)\nRadioinformator: Announcer (built-in)"}, + --{ID = "R_GToggle", x=149, y=80, radius=20, tooltip="Громкоговоритель\nLoudspeaker: Sound in cabin enable"}, + + } +} + +--VU1 Panel +ENT.ButtonMap["VU1"] = { + pos = Vector(451.0+9,-17.15,32), + ang = Angle(0,270,90), + width = 100, + height = 240, + scale = 0.0625, + + buttons = { + {ID = "VUSToggle", x=0, y=0, w=100, h=110, tooltip="Прожектор\nVUSoggle"}, + {x=50,y=170,radius=50,tooltip="ÐапрÑжение цепей управлениÑ"}, + } +} +--VUSToggle +Metrostroi.ClientPropForButton("VUS",{ + panel = "VU1", + button = "VUSToggle", + model = "models/metrostroi_train/switches/autobr.mdl", + ang = 270, + z=20, +}) + +--VU Panel +ENT.ButtonMap["VU"] = { + pos = Vector(451.0+8.6,-17.15,17.5), + ang = Angle(0,270,90), + width = 100, + height = 240, + scale = 0.0625, + + buttons = { + {ID = "VUToggle", x=0, y=100, w=100, h=140, tooltip="ВУ: Выключатель УправлениÑ\nVUToggle"}, + {ID = "RezMKToggle", x=30, y=20, w=50, h=100, tooltip="КУ15:Резервное включение мотор-компреÑÑора\nRezMKSet"}, + } +} + +ENT.ButtonMap["AVMain"] = { + pos = Vector(387.4+14.15,38.8,56), + ang = Angle(0,90,90), + width = 335, + height = 500, + scale = 0.0625, + + buttons = { + {ID = "AV8BToggle", x=0, y=0, w=300, h=600, tooltip="ÐÐ’-8Б: ÐвтоматичеÑкй выключатель (Ð’Ñпомогательные цепи выÑокого напрÑжениÑ)\n"}, + } +} +---AV1 Panel +ENT.ButtonMap["AV1"] = { + pos = Vector(387.414+14.15,39,23), + ang = Angle(0,90,90), + width = 290+0, + height = 155, + scale = 0.0625, + + buttons = { + {ID = "VU1Toggle", x=0, y=0, w=100, h=140, tooltip="ВУ1: Печь Ð¾Ñ‚Ð¾Ð¿Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹ ПТ-6\n"}, + {ID = "VU2Toggle", x=100, y=0, w=100, h=140, tooltip="ВУ2: Ðварийное оÑвещение 25Ð’\n"}, + {ID = "VU3Toggle", x=200, y=0, w=100, h=140, tooltip="ВУ3: ОÑвещение кабины\n"}, + } +} + +ENT.ButtonMap["AV2"] = { + pos = Vector(401.4,19.15,45.3), + ang = Angle(0,90,90), + width = 295, + height = 155, + scale = 0.0625, + + buttons = { + {ID = "RSTToggle", x=0, y=0, w=295, h=155, tooltip="РСТ: Радиооповещение и Ð¿Ð¾ÐµÐ·Ð´Ð½Ð°Ñ Ñ€Ð°Ð´Ð¸Ð¾ ÑвÑзь\nVB: Ð62"}, + } +} + +--[ARS/Speedometer panel +ENT.ButtonMap["ARS"] = { + pos = Vector(449.1+12.15,-37.3,4.9), + ang = Angle(0,-97.9,69), + width = 410*10, + height = 95*10, + scale = 0.0625/10, + + buttons = { + --{x=2045,y=406,tooltip="Индикатор ÑкороÑти\nSpeed indicator",radius=130}, + --{x=2610,y=363,tooltip="РП: КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки\nRP: Red overload relay light (power circuits failed to assemble)",radius=120}, + --{x=2982,y=363,tooltip="РП: КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки\nRP: Red overload relay light (power circuits failed to assemble)",radius=120}, + --{x=1070+320*0,y=780,tooltip="ЛхРК: Лампа хода реоÑтатного контроллера\nLhRK: Rheostat controller motion light",radius=120}, + --{x=1070+320*1,y=780,tooltip="КТ: Контроль тормоза\nKT: ARS braking indicator",radius=120}, + --{x=1070+320*2,y=780,tooltip="КВД: Контроль Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹\nKVD: ARS engine shutdown indicator",radius=120}, + --{x=1070+320*3,y=780,tooltip="ÐР1: Ðулевое реле\nNR1: Zero relay state (high voltage enabled)",radius=120}, + --{x=1070+320*4,y=780,tooltip="ВПР: Контроль Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ÐµÐ·Ð´Ð½Ð¾Ð¹ радиоÑвÑзи\nVPR: Train radio equipment enabled",radius=120}, + --{x=1070+320*5,y=780,tooltip="ПЕЧЬ: Индикатор работы печи\nPECH: Cabin heating indicator",radius=120}, + --{x=1070+320*6,y=780,tooltip="ÐВУ: ÐвтоматичеÑкий выключатель управлениÑ\nAVU: Automatic control disabler active",radius=120}, + + --{x=1070+380*0,y=570,tooltip="ОЧ: ОтÑутÑтвие чаÑтоты ÐРС\nOCh: No ARS frequency",radius=120}, + --{x=1070+380*1,y=570,tooltip="0: Сигнал ÐРС оÑтановки\n0: ARS stop signal",radius=120}, + --{x=1070+380*2,y=570,tooltip="40: Ограничение ÑкороÑти 40 км/ч\nSpeed limit 40 kph",radius=120}, + --{x=1070+380*3,y=570,tooltip="60: Ограничение ÑкороÑти 60 км/ч\nSpeed limit 60 kph",radius=120}, + --{x=1070+380*4,y=570,tooltip="70: Ограничение ÑкороÑти 70 км/ч\nSpeed limit 70 kph",radius=120}, + --{x=1070+380*5,y=570,tooltip="80: Ограничение ÑкороÑти 80 км/ч\nSpeed limit 80 kph",radius=120}, + + --{x=1080+380*0,y=363,tooltip="СД: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹\nSD: Door state light (doors are closed/door circuits are OK)",radius=120}, + --{x=1080+380*1,y=363,tooltip="РП: Ð—ÐµÐ»Ñ‘Ð½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки\nRP: Green overload relay light (overload relay open on current train)",radius=120}, + } +} + + +ENT.ButtonMap["VAH"] = { + pos = Vector(400.9,-26.24,38), + ang = Angle(0,90,90), + width = 150, + height = 260, + scale = 0.0625, + + buttons = { + {ID = "VAHToggle", x=30,y=0,w=90,h=130 , tooltip="Ð’ÐÐ¥: Включение аварийного хода (неиÑправноÑть реле педали безопаÑноÑти)\nVAH: Emergency driving mode (failure of RPB relay)"}, + {ID = "VADToggle", x=30,y=130,w=90,h=130 , tooltip="Ð’ÐД: Включение аварийного Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ (неиÑправноÑть реле ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð²ÐµÑ€ÐµÐ¹)\nVAD: Emergency door close override (failure of KD relay)"}, + } +} +-- AV panel +ENT.ButtonMap["AV"] = { + pos = Vector(394.0+14,-53.5,44.5), + ang = Angle(0,90,90), + width = 520, + height = 550, + scale = 0.0625, + + buttons = { + {ID = "ARSToggle", x=152,y=212,w=230,h=140 , tooltip="ARS"}, + ---------- + {x=33,y=411,tooltip="РегулÑтор Ð´Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÐК",radius=70}, + {x=90,y=379,tooltip="Соединительные зажимы",w=375,h=230}, + {x=390,y=377,tooltip="Кнопка РРП",w=100,h=100}, + } +} +-- Battery panel +ENT.ButtonMap["Battery"] = { + pos = Vector(387.414+12.15,19.2,28.8), + ang = Angle(0,90,90), + width = 290+0, + height = 155, + scale = 0.0625, + + buttons = { + {ID = "VBToggle", x=0, y=0, w=290, h=155, tooltip="ÐБ: Выключатель аккумулÑторной батареи (Ð’Ñпомогательные цепи низкого напрÑжениÑ)(\nVB: Battery on/off"}, + } +} + +-- Parking brake panel +ENT.ButtonMap["ParkingBrake"] = { + pos = Vector(454,43.0,2.0), + ang = Angle(0,-84,90), + width = 400, + height = 400, + scale = 0.0625, + + buttons = { + {ID = "ParkingBrakeLeft",x=0, y=0, w=200, h=400, tooltip="Поворот колеÑа ручного тормоза"}, + {ID = "ParkingBrakeRight",x=200, y=0, w=200, h=400, tooltip="Поворот колеÑа ручного тормоза"}, + } +} + +-- Train driver helpers panel +ENT.ButtonMap["HelperPanel"] = { + pos = Vector(446.83,58,25), + ang = Angle(0,-25,90), + width = 64, + height = 144, + scale = 0.0625, + + buttons = { + {ID = "VUD2Toggle", x=32, y=42, radius=32, tooltip="ВУД2: Выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÑŒÐ¼Ð¸\nVUD2: Door control toggle (close doors)"}, + {ID = "VDLSet", x=32, y=138, radius=32, tooltip="ВДЛ: Выключатель левых дверей\nVDL: Left doors open"}, + } +} + +-- Help panel +ENT.ButtonMap["Help"] = { + pos = Vector(410,-45,62), + ang = Angle(0,90,90), + width = 28, + height = 20, + scale = 0.5, + + buttons = { + {ID = "ShowHelp", x=0, y=0, w=28,h=20, tooltip="Помощь в вождении поезда\nShow help on driving the train"}, + } +} +-- Pneumatic instrument panel 2 +ENT.ButtonMap["PneumaticManometer"] = { + pos = Vector(453.915771,-53.891716,19.525063), + ang = Angle(0,-145,90), + width = 110, + height = 110, + scale = 0.0625, + + buttons = { + {x=55,y=55,radius=55,tooltip="Давление в магиÑтралÑÑ… (краÑнаÑ: тормозной, чёрнаÑ: напорной)\nPressure in pneumatic lines (red: brake line, black: train line)"}, + } +} +-- Pneumatic instrument panel +ENT.ButtonMap["PneumaticPanels"] = { + pos = Vector(455.838104,-51.486084,9.136534), + ang = Angle(0,-115,90), + width = 60, + height = 60, + scale = 0.0625, + + buttons = { + {x=30,y=30,radius=30,tooltip="Тормозной манометр: Давление в тормозных цилиндрах (ТЦ)\nBrake cylinder pressure"}, + } +} +ENT.ButtonMap["BLDisconnect"] = { + pos = Vector(420+25.15,-56.0-6,-25), + ang = Angle(90,180,0), + width = 200, + height = 90, + scale = 0.0625, + + buttons = { + {ID = "DriverValveBLDisconnectToggle", x=0, y=0, w=200, h=90, tooltip="Кран двойной Ñ‚Ñги тормозной магиÑтрали\nTrain line disconnect valve"}, + } +} +ENT.ButtonMap["TLDisconnect"] = { + pos = Vector(420+25.15*1.1,-56.0+6-6,-25), + ang = Angle(90,180,0), + width = 200, + height = 90, + scale = 0.0625, + + buttons = { + --{ID = "EPKToggle", x=0, y=0, w=200, h=90, tooltip="Кран ЭПК\nEPK disconnect valve"} + {ID = "DriverValveTLDisconnectToggle", x=0, y=0, w=200, h=90, tooltip="Кран двойной Ñ‚Ñги напорной магиÑтрали\nBrake line disconnect valve"}, + } +} +ENT.ButtonMap["EPKDiscoonect"] = { + pos = Vector(430.476318,-56.581806,-39.564163), + ang = Angle(0,0,0), + width = 200, + height = 90, + scale = 0.0625, + + buttons = { + {ID = "EPKToggle", x=0, y=0, w=200, h=90, tooltip="Кран ЭПК\nEPK disconnect valve"} + --{ID = "DriverValveTLDisconnectToggle", x=0, y=0, w=200, h=90, tooltip="Клапан разобщениÑ\nDriver valve disconnect valve"}, + } +} +ENT.ButtonMap["DURA"] = { + pos = Vector(408+15+12.15,-58.0-5.3,-6.65), + ang = Angle(0,180,0), + width = 240, + height = 80, + scale = 0.0625, + + buttons = { + {ID = "DURASelectMain", x=145, y=43, radius=20, tooltip="DURA ОÑновной путь\nDURA Select Main"}, -- NEEDS TRANSLATING + {ID = "DURASelectAlternate", x=180, y=43, radius=20, tooltip="DURA Ðльтернативный путь\nDURA Select Alternate"}, -- NEEDS TRANSLATING + {ID = "DURAToggleChannel", x=100, y=60, radius=20, tooltip="DURA Выбор канала\nDURA Toggle Channel"}, -- NEEDS TRANSLATING + {ID = "DURAPowerToggle", x=100, y=30, radius=20, tooltip="DURA Питание\nDURA Power"}, -- NEEDS TRANSLATING + + } +} +ENT.ButtonMap["AVU"] = { + pos = Vector(453.71597,-19.63482,39.93294), + ang = Angle(-8,-90+21.5,90+15), + width = 105, + height = 85, + scale = 0.0625, + + buttons = { + {ID = "AVULight", x=30, y=20, radius=20, tooltip="ÐВУ: ÐвтоматичеÑкий выключатель управлениÑ\nAVU: Automatic control disabler active"}, + {ID = "OtklAVUToggle", x=30, y=60, radius=20, tooltip="Отключение автоматичеÑкого Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (неиÑправноÑть ÐВУ)\nTurn off automatic control disable relay (failure of AVU)"}, + + } +} + +ENT.ButtonMap["DURADisplay"] = { + pos = Vector(408+15-0.75+12.15,-58.0-5.3+1.5625,-6.65), + ang = Angle(0,180,0), + width = 240, + height = 80, + scale = 0.0625/3.2, +} + +ENT.ButtonMap["Announcer"] = { + pos = Vector(434.3+12.15,-50,40.4), + ang = Angle(0,-130,90+50), + width = 170, + height = 100, + scale = 0.0625, + + buttons = { + + {ID = "Custom2Set", x=155, y=15, radius=15, tooltip="+"}, + {ID = "Custom1Set", x=155, y=42, radius=15, tooltip="-"}, + {ID = "Custom3Set", x=85, y=72, radius=20, tooltip="Меню\nMenu"}, + {ID = "CustomCToggle", x=20, y=28, radius=20, tooltip="Ðвтоинформатор\nAutoannouncer"}, + + {ID = "CustomD", x=95+20*-3, y=72, radius=10, tooltip="Информатор: КонечнаÑ\nAnnouncer: Last statuon"}, + {ID = "CustomE", x=95+20*-2, y=72, radius=10, tooltip="Информатор: Платформа Ñправа\nAnnouncer: Right side"}, + {ID = "CustomF", x=95+20*1, y=72, radius=10, tooltip="Информатор: Ðеобходима наÑтройка\nAnnouncer: Need setup"}, + {ID = "CustomG", x=95+20*2, y=72, radius=10, tooltip="Информатор: Проигрывание объÑвлениÑ\nAnnouncer: Playing announce"}, + } +} +-- Announcer panel +ENT.ButtonMap["AnnouncerDisplay"] = { + pos = Vector(434.3+12.15,-50,40.4), + ang = Angle(0,-130,90+50), + width = 10, + height = 10, + scale = 0.012, +} + +ENT.ButtonMap["Meters"] = { + pos = Vector(453.844452,-56.7,38.7), + ang = Angle(0,-148,90), + width = 73, + height = 140, + scale = 0.0625, + + buttons = { + {x=13, y=22, w=60, h=50, tooltip="Вольтметр выÑокого напрÑÐ¶ÐµÐ½Ð¸Ñ (кВ)\nHV voltmeter (kV)"}, + {x=13, y=81, w=60, h=50, tooltip="Ðмперметр (Ð)\nTotal ampermeter (A)"}, + } +} +ENT.ButtonMap["Speedometer"] = { + pos = Vector(453.22702,-53.241482,28), + ang = Angle(0,-145,90), + width = 110, + height = 110, + scale = 0.0625, + + buttons = { + {x=0, y=0, w=110, h=110, tooltip="СкороÑтемер"}, + } +} + + +--These values should be identical to those drawing the schedule +local col1w = 80 -- 1st Column width +local col2w = 32 -- The other column widths +local rowtall = 30 -- Row height, includes -only- the usable space and not any lines + +local rowamount = 16 -- How many rows to show (total) +--[[ENT.ButtonMap["Schedule"] = { + pos = Vector(442.1,-60.7,26), + ang = Angle(0,-110,90), + width = (col1w + 2 + (1 + col2w) * 3), + height = (rowtall+1)*rowamount+1, + scale = 0.0625/2, + + buttons = { + {x=1, y=1, w=col1w, h=rowtall, tooltip="М â„–\nRoute number"}, + {x=1, y=rowtall*2+3, w=col1w, h=rowtall, tooltip="П â„–\nPath number"}, + + {x=col1w+2, y=1, w=col2w*3+2, h=rowtall, tooltip="ВРЕМЯ ХОДÐ\nTotal schedule time"}, + {x=col1w+2, y=rowtall+2, w=col2w*3+2, h=rowtall, tooltip="ИÐТ\nTrain interval"}, + + {x=col1w+2, y=rowtall*2+3, w=col2w, h=rowtall, tooltip="ЧÐС\nHour"}, + {x=col1w+col2w+3, y=rowtall*2+3, w=col2w, h=rowtall, tooltip="МИÐ\nMinute"}, + {x=col1w+col2w*2+4, y=rowtall*2+3, w=col2w, h=rowtall, tooltip="СЕК\nSecond"}, + {x=col1w+2, y=rowtall*3+4, w=col2w*3+2, h=(rowtall+1)*(rowamount-3)-1, tooltip="Arrival times"}, -- NEEDS TRANSLATING + + {x=1, y=rowtall*3+4, w=col1w, h=(rowtall+1)*(rowamount-3)-1, tooltip="Station name"}, -- NEEDS TRANSLATING + } +}]] + +-- Temporary panels (possibly temporary) +ENT.ButtonMap["FrontPneumatic"] = { + pos = Vector(466,-45.0,-50.0), + ang = Angle(0,90,90), + width = 900, + height = 100, + scale = 0.1, + buttons = { + {ID = "FrontBrakeLineIsolationToggle",x=189, y=50, radius=32, tooltip="Концевой кран тормозной магиÑтрали"}, + {ID = "FrontTrainLineIsolationToggle",x=710, y=50, radius=32, tooltip="Концевой кран напорной магиÑтрали"}, + } +} +ENT.ButtonMap["RearPneumatic"] = { + pos = Vector(-466,45.0,-50.0), + ang = Angle(0,270,90), + width = 900, + height = 100, + scale = 0.1, + buttons = { + {ID = "RearTrainLineIsolationToggle",x=189, y=50, radius=32, tooltip="Концевой кран напорной магиÑтрали"}, + {ID = "RearBrakeLineIsolationToggle",x=710, y=50, radius=32, tooltip="Концевой кран тормозной магиÑтрали"}, + } +} +ENT.ButtonMap["GV"] = { + pos = Vector(160,66,-52), + ang = Angle(0,180,90), + width = 170, + height = 170, + scale = 0.1, + buttons = { + {ID = "GVToggle",x=0, y=0, w= 170,h = 150, 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, + }}, + } +} +ENT.ButtonMap["AirDistributor"] = { + pos = Vector(-168,68.6,-50), + ang = Angle(0,180,90), + width = 170, + height = 80, + scale = 0.1, + buttons = { + {ID = "AirDistributorDisconnectToggle",x=0, y=0, w= 170,h = 80, tooltip="Выключение воздухораÑпределителÑ"}, + } +} + + +-- UAVA +ENT.ButtonMap["UAVAPanel"] = { + pos = Vector(450,52,-20), + ang = Angle(0,-70,90), + width = 230, + height = 170, + scale = 0.0625, + + buttons = { + {ID = "UAVAToggle",x=230/2, y=0, w=230/2, h=170, tooltip="УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа\nUAVA: Universal Automatic Autostop Disabler"}, + {ID = "UAVAContactSet",x=0, y=0, w=230/2, h=170, tooltip="УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа (воÑÑтановление контактов)\nUAVA: Universal Automatic Autostop Disabler(contacts reset)"}, + } +} + + + +-- Wagon numbers +ENT.ButtonMap["TrainNumber1"] = { + pos = Vector(-445,-68,-12.5), + ang = Angle(0,0,90), + width = 130, + height = 55, + scale = 0.20, +} +ENT.ButtonMap["TrainNumber2"] = { + pos = Vector(396,68,-12.5), + ang = Angle(0,180,90), + width = 130, + height = 55, + scale = 0.20, +} + +-- Front info table +ENT.ButtonMap["InfoTable"] = { + pos = Vector(458.0+12.15,-16.0,12.0), + ang = Angle(0,90,90), + width = 646, + height = 100, + scale = 0.1/2, +} +ENT.ButtonMap["InfoTableSelect"] = { + pos = Vector(454.0+12.15,-27.0,27.0), + ang = Angle(0,-90,90), + width = 250, + height = 100, + scale = 0.1, + + + buttons = { + {ID = "PrevSign",x=0,y=0,w=50,h=100, tooltip="ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð½Ð°Ð´Ð¿Ð¸ÑÑŒ\nPrevious sign"}, + {ID = "NextSign",x=50,y=0,w=50,h=100, tooltip="Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð½Ð°Ð´Ð¿Ð¸ÑÑŒ\nNext sign"}, + + {ID = "Num2P",x=150,y=0,w=50,h=50, tooltip="Маршрут: Увеличить чиÑло 2\nRoute: Increase 2nd number"}, + {ID = "Num2M",x=150,y=50,w=50,h=50, tooltip="Маршрут: Уменьшить чиÑло 2\nRoute: Decrease 2nd number"}, + {ID = "Num1P",x=200,y=0,w=50,h=50, tooltip="Маршрут: Увеличить чиÑло 1\nRoute: Increase 1st number"}, + {ID = "Num1M",x=200,y=50,w=50,h=50, tooltip="Маршрут: Уменьшить чиÑло 1\nRoute: Decrease 1st number"}, + } +} + +ENT.ButtonMap["InfoRoute"] = { + pos = Vector(451.29+12.15,39.9,24.2), + ang = Angle(0,97.3,84), + width = 100, + height = 100, + scale = 0.115, +} + +ENT.ButtonMap["FrontDoor"] = { + pos = Vector(455+12.15,16,48.4), + ang = Angle(0,-90,90), + width = 550, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "FrontDoor",x=0,y=0,w=550,h=1900, tooltip="ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ\nFront door"}, + } +} + +ENT.ButtonMap["CabinDoor"] = { + pos = Vector(408.9,64,50.8), + ang = Angle(0,0,90), + width = 642, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "CabinDoor1",x=0,y=0,w=642,h=1900, tooltip="Дверь в кабину машиниÑта\nCabin door"}, + } +} + +ENT.ButtonMap["PassengerDoor"] = { + pos = Vector(390+8,-16,48.4), + ang = Angle(0,90,90), + width = 642, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=642,h=1900, tooltip="Дверь из Ñалона\nPassenger door"}, + } +} + +-------------------------------------------------------------------------------- +ENT.ClientPropsInitialized = false +ENT.ClientProps["brake334"] = { + model = "models/metrostroi_train/81/334cran.mdl", + pos = Vector(449.2,-54.2,3.7), + ang = Angle(0,47,0) +} +--[[ENT.ClientProps["brake334_body"] = { + model = "models/metrostroi/81-717/brake334_body.mdl", + pos = Vector(442+12.15,-56.85,1.0), + ang = Angle(0,0,0) +}]] +ENT.ClientProps["controller"] = { + model = "models/metrostroi_train/e/kv.mdl", + pos = Vector(452.36,-25.6,2), + ang = Angle(0,90+23,0) +} +ENT.ClientProps["reverser"] = { + model = "models/metrostroi/81-717/reverser.mdl", + pos = Vector(452.36,-25.6,2), + ang = Angle(0,45,90) +} +ENT.ClientProps["brake_disconnect"] = { + model = "models/metrostroi/81-717/uava.mdl", + pos = Vector(442.73816,-58.73211,-32.45488), + ang = Angle(0,-90,0), +} +ENT.ClientProps["train_disconnect"] = { + model = "models/metrostroi/81-717/uava.mdl", + pos = Vector(445.34006,-54.19079,-32.45488), + ang = Angle(0,-90,0), + color = Color(0,212,255), +} +ENT.ClientProps["EPK_disconnect"] = { + model = "models/metrostroi/81-717/uava.mdl", + pos = Vector(434.476318,-58.581806,-39.564163), + ang = Angle(0.000000,-90.000000,-90.000000), +} +ENT.ClientProps["parking_brake"] = { + model = "models/metrostroi/81-717/ezh_koleso.mdl", + pos = Vector(450.58,31.19,-10.0), + ang = Angle(-90,0,0), +} +-------------------------------------------------------------------------------- +ENT.ClientProps["train_line"] = { + model = "models/metrostroi_train/e/black_pneumo_needle.mdl", + pos = Vector(451.33,-56.03,13.2), + ang = Angle(87,-90-54,90) +} +ENT.ClientProps["brake_line"] = { + model = "models/metrostroi_train/e/red_pneumo_needle.mdl", + pos = Vector(451.3,-56.00,13.2), + ang = Angle(87,-90-54,90) +} +ENT.ClientProps["brake_cylinder"] = { + model = "models/metrostroi_train/e/small_pneumo_needle.mdl", + pos = Vector(455.4155,-53.31028,7.21621),--pos = Vector(450.5,-32.9,10.4), + ang = Angle(180,-90-24.96,90), + scale = 1.5, +} +-------------------------------------------------------------------------------- +ENT.ClientProps["voltmeter"] = { + model = "models/metrostroi_train/e/volt_needle.mdl", + pos = Vector(451.284607,-57.260746,35.1), + ang = Angle(92,33.3,-90) +} +ENT.ClientProps["ampermeter"] = { + model = "models/metrostroi_train/e/volt_needle.mdl", + pos = Vector(451.302399,-57.287834,31.31461), + ang = Angle(92,33.3,-90) +} +ENT.ClientProps["volt1"] = { + model = "models/metrostroi_train/e/volt_bat_needle.mdl", + pos = Vector(458.41455,-20.33349,19.95662), + ang = Angle(1,90+2.299,-90) +} +ENT.ClientProps["speed1"] = {-- + --model = "models/metrostroi_train/e/speed_needle.mdl", + model = "models/metrostroi_train/e/black_pneumo_needle.mdl", + pos = Vector(448.42697,-56.81982,21.85731), + ang = Angle(90,-145,90) +} +--[[ENT.ClientProps["volt2"] = { + model = "models/metrostroi/81-717/black_arrow.mdl", + pos = Vector(447.6,-35.3,5.0), + ang = Angle(90,0,180) +}]] + + + + +-------------------------------------------------------------------------------- +--[[ENT.ClientProps["headlights"] = { + model = "models/metrostroi/81-717/switch04.mdl", + pos = Vector(443.1,-60.0,0.5), + ang = Angle(-74,0,0) +} +ENT.ClientProps["panellights"] = { + model = "models/metrostroi/81-717/switch04.mdl", + pos = Vector(444.1,-59.3,3.3), + ang = Angle(-74,0,0) +}]] +-------------------------------------------------------------------------------- +--[[ + {ID = "DIPonSet", x=35 + 50*0, y=95, radius=20, tooltip="Включение ДИП и оÑвещениÑ\nTurn DIP and interior lights on"}, + {ID = "DIPoffSet", x=35 + 50*1, y=95, radius=20, tooltip="Выключение ДИП и оÑвещениÑ\nTurn DIP and interior lights off"}, + {ID = "VozvratRPSet", x=35 + 50*2, y=95, radius=20, tooltip="Возврат реле перегрузки\nReset overload relay"}, + {ID = "KSNSet", x=35 + 50*3, y=95, radius=20, tooltip="КСÐ: Кнопка Ñигнализации неиÑправноÑти\nKSN: Failure indication button"}, + {ID = "KDPSet", x=35 + 50*4.95, y=95, radius=20, tooltip="КДП: Кнопка правых дверей\nKDP: Right doors open"}, + + {ID = "KDLSet", x=95, y=170, radius=20, tooltip="КДЛ: Кнопка левых дверей\nKDL: Left doors open"}, + {ID = "KRZDSet", x=217, y=170, radius=20, tooltip="КРЗД: Кнопка резервного Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹\nKRZD: Emergency door closing"}, + + {ID = "KU1Toggle", x=17,y=130,w=45,h=90, tooltip="Включение мотор-компреÑÑора\nTurn motor-compressor on"}, + {ID = "VUD1Toggle", x=253,y=130,w=45,h=90, radius=20, tooltip="ВУД: Выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÑŒÐ¼Ð¸\nVUD: Door control toggle (close doors)"}, +]] +Metrostroi.ClientPropForButton("DIPon",{ + panel = "Main", + button = "DIPonSet", + model = "models/metrostroi_train/e/buttonwhite.mdl", + ang = 0, + z = -6, +}) +Metrostroi.ClientPropForButton("VozvratRP",{ + panel = "Main", + button = "VozvratRPSet", + model = "models/metrostroi_train/e/buttonwhite.mdl", + ang = 0, + z = -6, +}) +Metrostroi.ClientPropForButton("KVT",{ + panel = "Main", + button = "KVTSet", + model = "models/metrostroi_train/e/buttonwhite.mdl", + ang = 0, + z = -6, +}) +Metrostroi.ClientPropForButton("DIPoff",{ + panel = "Main", + button = "DIPoffSet", + model = "models/metrostroi_train/e/buttonred1.mdl", + ang = 0, + z = 0, +}) +Metrostroi.ClientPropForButton("KSN",{ + panel = "Main", + button = "KSNSet", + model = "models/metrostroi_train/e/buttonred1.mdl", + ang = 0, + z = 0, +}) +Metrostroi.ClientPropForButton("KDP",{ + panel = "Main", + button = "KDPSet", + model = "models/metrostroi_train/e/buttonred1.mdl", + ang = 0, + z = -0, +}) + +Metrostroi.ClientPropForButton("KDL",{ + panel = "Main", + button = "KDLSet", + model = "models/metrostroi_train/e/buttonred1.mdl", + ang = 0, + z = 0, +}) +Metrostroi.ClientPropForButton("KRZD",{ + panel = "Main", + button = "KRZDSet", + model = "models/metrostroi_train/e/buttonwhite.mdl", + ang = 0, + z = -6, +}) + +Metrostroi.ClientPropForButton("VUD",{ + panel = "Main", + button = "VUD1Toggle", + model = "models/metrostroi_train/switches/vudblack.mdl", + z = -20, +}) +Metrostroi.ClientPropForButton("KU1",{ + panel = "Main", + button = "KU1Toggle", + model = "models/metrostroi_train/switches/vudblack.mdl", + z = -20, +}) + +Metrostroi.ClientPropForButton("VAH",{ + panel = "VAH", + button = "VAHToggle", + model = "models/metrostroi_train/switches/autobr.mdl", +}) +Metrostroi.ClientPropForButton("VAD",{ + panel = "VAH", + button = "VADToggle", + model = "models/metrostroi_train/switches/autobr.mdl", +}) +--------------------------------------------------------------------------------- +Metrostroi.ClientPropForButton("VU1",{ + panel = "AV1", + button = "VU1Toggle", + model = "models/metrostroi_train/switches/autobr.mdl", + z=10, +}) +Metrostroi.ClientPropForButton("VU2",{ + panel = "AV1", + button = "VU2Toggle", + model = "models/metrostroi_train/switches/autobr.mdl", + z=10, +}) +Metrostroi.ClientPropForButton("VU3",{ + panel = "AV1", + button = "VU3Toggle", + model = "models/metrostroi_train/switches/autobr.mdl", + z=10, +}) + +Metrostroi.ClientPropForButton("RST",{ + panel = "AV2", + button = "RSTToggle", + model = "models/metrostroi_train/switches/autobr2.mdl", + z=20, +}) + +Metrostroi.ClientPropForButton("AV8B",{ + panel = "AVMain", + button = "AV8BToggle", + model = "models/metrostroi_train/switches/automain.mdl", + z=31, + skin=1, +}) + +Metrostroi.ClientPropForButton("VU",{ + panel = "VU", + button = "VUToggle", + model = "models/metrostroi_train/switches/autobr.mdl", + z=0, +}) +--------------------------------------------------- +--RezMKSet +Metrostroi.ClientPropForButton("RezMK",{ + panel = "VU", + button = "RezMKToggle", + model = "models/metrostroi_train/switches/vudbrown.mdl", + z=15, +}) + +--ALS +Metrostroi.ClientPropForButton("ALS",{ + panel = "Main", + button = "ALSToggle", + model = "models/metrostroi_train/81/tumbler1.mdl", + ang = 0, +}) +Metrostroi.ClientPropForButton("LOCh",{ + panel = "OldARS", + button = "LOCh", + model = "models/metrostroi_train/e/ars_04.mdl", + z = 0, + ang = 0, +}) +Metrostroi.ClientPropForButton("L0",{ + panel = "OldARS", + button = "L0", + model = "models/metrostroi_train/e/ars_0.mdl", + z = 0, + ang = 0, +}) +Metrostroi.ClientPropForButton("L40",{ + panel = "OldARS", + button = "L40", + model = "models/metrostroi_train/e/ars_40.mdl", + z = 0, + ang = 0, +}) +Metrostroi.ClientPropForButton("L60",{ + panel = "OldARS", + button = "L60", + model = "models/metrostroi_train/e/ars_60.mdl", + z = 0, + ang = 0, +}) +Metrostroi.ClientPropForButton("L80",{ + panel = "OldARS", + button = "L80", + model = "models/metrostroi_train/e/ars_80.mdl", + z = 0, + ang = 0, +}) +Metrostroi.ClientPropForButton("L70",{ + panel = "OldARS", + button = "L70", + model = "models/metrostroi_train/e/ars_70.mdl", + z = 0, + ang = 0, +}) +--RRP +Metrostroi.ClientPropForButton("KRP",{ + panel = "Main", + button = "KRPSet", + model = "models/metrostroi_train/switches/vudblack.mdl", + z = -20, +}) +--ARS +Metrostroi.ClientPropForButton("ARS",{ + panel = "AV", + button = "ARSToggle", + model = "models/metrostroi_train/switches/autobr2.mdl", + ang = 270, + z=-65 +}) +-- Panel lighning +Metrostroi.ClientPropForButton("L_3",{ + panel = "Main", + button = "L_3Toggle", + model = "models/metrostroi_train/81/tumbler1.mdl", + ang = 90 +}) +-- MainPanel Lamps +Metrostroi.ClientPropForButton("SD",{ + panel = "Main", + button = "BlueLight", + model = "models/metrostroi_train/e/lampblue.mdl", + z = 5.73, + ang = 90, +}) +Metrostroi.ClientPropForButton("gRP",{ + panel = "Main", + button = "GreenRPLight", + model = "models/metrostroi_train/e/lampgreen.mdl", + z = 5.73, + ang = 90, +}) +Metrostroi.ClientPropForButton("rRP",{ + panel = "Main", + button = "RedRPLight", + model = "models/metrostroi_train/e/lampred1.mdl", + z = 5.73, + ang = 90, +}) +Metrostroi.ClientPropForButton("r2RP",{ + panel = "Main", + button = "RedRP2Light", + model = "models/metrostroi_train/e/lampred1.mdl", + z = 5.73, + ang = 90, +}) +Metrostroi.ClientPropForButton("LST",{ + panel = "Main", + button = "LST", + model = "models/metrostroi_train/e/lampwhite1.mdl", + z = 5.73, + ang = 90, +}) +Metrostroi.ClientPropForButton("LVD",{ + panel = "Main", + button = "LVD", + model = "models/metrostroi_train/e/lampwhite1.mdl", + z = 5.73, + ang = 90, +}) + +Metrostroi.ClientPropForButton("AVULight",{ + panel = "AVU", + button = "AVULight", + model = "models/metrostroi_train/81/lamp.mdl", + skin = 1, + z = -10, +}) +Metrostroi.ClientPropForButton("AVULight_light",{ + panel = "AVU", + button = "AVULight", + model = "models/metrostroi_train/81/lamp_on.mdl", + ignorepanel = true, + skin = 1, + z = -10, +}) +Metrostroi.ClientPropForButton("OtklAVU",{ + panel = "AVU", + button = "OtklAVUToggle", + model = "models/metrostroi_train/81/tumbler1.mdl", + ang = 90 +}) +----------------------------------------------- +Metrostroi.ClientPropForButton("SelectMain",{ + panel = "DURA", + button = "DURASelectMain", + model = "models/metrostroi_train/81/button.mdl", + skin = 4, + z = -1, +}) +Metrostroi.ClientPropForButton("SelectAlternate",{ + panel = "DURA", + button = "DURASelectAlternate", + model = "models/metrostroi_train/81/button.mdl", + skin = 4, + z = -1, +}) +Metrostroi.ClientPropForButton("SelectChannel",{ + panel = "DURA", + button = "DURAToggleChannel", + model = "models/metrostroi_train/81/tumbler2.mdl", +}) +Metrostroi.ClientPropForButton("DURAPower",{ + panel = "DURA", + button = "DURAPowerToggle", + model = "models/metrostroi_train/81/tumbler2.mdl", +}) +Metrostroi.ClientPropForButton("VUD2",{ + panel = "HelperPanel", + button = "VUD2Toggle", + model = "models/metrostroi_train/switches/vudwhite.mdl", + z = 0, +}) +Metrostroi.ClientPropForButton("VDL",{ + panel = "HelperPanel", + button = "VDLSet", + model = "models/metrostroi_train/switches/vudwhite.mdl", + z = 0, +}) +Metrostroi.ClientPropForButton("Custom1",{ + panel = "Announcer", + button = "Custom1Set", + model = "models/metrostroi_train/81/button.mdl", + skin = 5, + z = -1, +}) +Metrostroi.ClientPropForButton("Custom2",{ + panel = "Announcer", + button = "Custom2Set", + model = "models/metrostroi_train/81/button.mdl", + skin = 5, + z = -1, +}) +Metrostroi.ClientPropForButton("Custom3",{ + panel = "Announcer", + button = "Custom3Set", + model = "models/metrostroi/81-717/button07.mdl" +}) +Metrostroi.ClientPropForButton("CustomC",{ + panel = "Announcer", + button = "CustomCToggle", + model = "models/metrostroi/81-717/switch04.mdl", +}) + +Metrostroi.ClientPropForButton("CustomD",{ + panel = "Announcer", + button = "CustomD", + model = "models/metrostroi/81-717/light01.mdl", +}) +Metrostroi.ClientPropForButton("CustomE",{ + panel = "Announcer", + button = "CustomE", + model = "models/metrostroi/81-717/light03.mdl", +}) +Metrostroi.ClientPropForButton("CustomF",{ + panel = "Announcer", + button = "CustomF", + model = "models/metrostroi/81-717/light04.mdl", +}) +Metrostroi.ClientPropForButton("CustomG",{ + panel = "Announcer", + button = "CustomG", + model = "models/metrostroi/81-717/light02.mdl", +}) + +Metrostroi.ClientPropForButton("Battery",{ + panel = "Battery", + button = "VBToggle", + model = "models/metrostroi_train/switches/autobr3.mdl", + z=40, +}) + +-------------------------------------------------------------------------------- +ENT.ClientProps["gv"] = { + model = "models/metrostroi/81-717/gv.mdl", + pos = Vector(154,62.5,-65), + ang = Angle(-90,0,-90) +} +ENT.ClientProps["gv_wrench"] = { + model = "models/metrostroi/81-717/reverser.mdl", + pos = Vector(154,62.5,-65), + ang = Angle(0,0,0) +} +-------------------------------------------------------------------------------- +ENT.ClientProps["book"] = { + model = "models/props_lab/binderredlabel.mdl", + pos = Vector(404,-32,58.7), + ang = Angle(0,0,90) +} + +ENT.ClientProps["E_salon"] = { + model = "models/metrostroi_train/e/e_salon.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0) +} +ENT.ClientProps["Lamps"] = { + model = "models/metrostroi_train/e/lamps_on.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0) +} +ENT.ClientProps["PB"] = {-- + model = "models/metrostroi_train/81/pb.mdl", + pos = Vector(456.08691, -34.98815, -37.62471), + ang = Angle(0,-90,40) +} + +ENT.ClientProps["FrontBrake"] = {-- + model = "models/metrostroi_train/81/tmiso.mdl", + pos = Vector(455, -26.0, -55), + ang = Angle(0,-90,0) +} +ENT.ClientProps["FrontTrain"] = {-- + model = "models/metrostroi_train/81/nmsio.mdl", + pos = Vector(455, 26, -55), + ang = Angle(0,-90,0) +} +ENT.ClientProps["RearBrake"] = {-- + model = "models/metrostroi_train/81/tmiso.mdl", + pos = Vector(-455, -26, -55), + ang = Angle(0,90,0) +} +ENT.ClientProps["RearTrain"] = {-- + model = "models/metrostroi_train/81/nmsio.mdl", + pos = Vector(-455, 26, -55), + ang = Angle(0,90,0) +} + + +-------------------------------------------------------------------------------- +-- Add doors +local function GetDoorPosition(i,k,j) + if j == 0 + then return Vector(358.27 - 67.49*k - 233.4*i,-64.56*(1-2*k),-1.55) + else return Vector(358.27 - 67.49*(1-k) - 233.4*i,-64.56*(1-2*k),-1.55) + end +end +for i=0,3 do + for k=0,1 do + ENT.ClientProps["door"..i.."x"..k.."a"] = { + model = "models/metrostroi_train/e/doorright.mdl", + pos = GetDoorPosition(i,k,0), + ang = Angle(0,90 + 180*k,0) + } + ENT.ClientProps["door"..i.."x"..k.."b"] = { + model = "models/metrostroi_train/e/doorleft.mdl", + pos = GetDoorPosition(i,k,1), + ang = Angle(0,90 + 180*k,0) + } + end +end +ENT.ClientProps["door1"] = { + model = "models/metrostroi_train/e/doorfront.mdl", + pos = Vector(464,-17.11,-3.98), + ang = Angle(0,-90,0) +} +ENT.ClientProps["door2"] = { + model = "models/metrostroi_train/e/doorback.mdl", + pos = Vector(-464,17.11,-3.98), + ang = Angle(0,-90,0) +} +ENT.ClientProps["door3"] = { + model = "models/metrostroi_train/e/doorpass.mdl", + pos = Vector(396.8,17.11,-6.1), + ang = Angle(0,-90,0) +} +ENT.ClientProps["door4"] = { + model = "models/metrostroi_train/e/doorcab.mdl", + pos = Vector(442.24,64.56,-2.51), + ang = Angle(0,-90,0) +} +--[[ENT.ClientProps["UAVA"] = { + model = "models/metrostroi/81-717/uava_body.mdl", + pos = Vector(400,61,-8),--Vector(415.0,-58.5,-18.2), + ang = Angle(0,0,0) +}]] +ENT.ClientProps["UAVALever"] = { + model = "models/metrostroi_train/81/uavalever.mdl", + pos = Vector(452.84598,51,-21.813349), + ang = Angle(0,90,90) +} + + +ENT.Texture = "7" +ENT.OldTexture = nil +--local X = Material( "metrostroi_skins/81-717/6.png") + +function ENT:UpdateTextures() + local texture = Metrostroi.Skins["train"][self:GetNW2String("texture")] + local passtexture = Metrostroi.Skins["pass"][self:GetNW2String("passtexture")] + local cabintexture = Metrostroi.Skins["cab"][self:GetNW2String("cabtexture")] + for _,self in pairs(self.ClientEnts) do + if not IsValid(self) then continue end + for k,v in pairs(self:GetMaterials()) do + local tex = string.Explode("/",v) + tex = tex[#tex] + if cabintexture and cabintexture.textures[tex] then + self:SetSubMaterial(k-1,cabintexture.textures[tex]) + end + if passtexture and passtexture.textures[tex] then + self:SetSubMaterial(k-1,passtexture.textures[tex]) + end + if texture and texture.textures[tex] then + self:SetSubMaterial(k-1,texture.textures[tex]) + end + end + end +end +-------------------------------------------------------------------------------- +function ENT:Think() + self.BaseClass.Think(self) + if self.Texture ~= self:GetNW2String("texture") then + self.Texture = self:GetNW2String("texture") + self:UpdateTextures() + end + if self.PassTexture ~= self:GetNW2String("passtexture") then + self.PassTexture = self:GetNW2String("passtexture") + self:UpdateTextures() + end + if self.CabinTexture ~= self:GetNW2String("cabtexture") then + self.CabinTexture = self:GetNW2String("cabtexture") + self:UpdateTextures() + end + --print(self.FrontDoor,self:GetPackedBool(114)) + --print(self.RearDoor,self:GetPackedBool(156)) + --[[ + if self.FrontDoor < 90 and self:GetPackedBool(157) or self.FrontDoor > 0 and not self:GetPackedBool(157) then + --local FrontDoorData = self.ClientProps["door1"] + --FrontDoor:SetLocalPos(FrontDoorData.pos + Vector(-2,-0,0)) + self.FrontDoor = math.max(0,math.min(90,self.FrontDoor + (self:GetPackedBool(157) and 1 or -1)*self.DeltaTime*180)) + self:ApplyMatrix("door1",Vector(0,-16,0),Angle(0,self.FrontDoor,0)) + if not self.ButtonMapMatrix["InfoTable"] then + self.ButtonMapMatrix["InfoTable"] = {} + self.ButtonMapMatrix["InfoTable"].scale = 0.1/2 + end + self.ButtonMapMatrix["InfoTable"].ang = Angle(0,90+self.FrontDoor,90) + self.ButtonMapMatrix["InfoTable"].pos = Vector(458.0,-16.0,12.0) + Vector(0,1.5,0)*self.FrontDoor/90 + + end + ]] + local transient = (self.Transient or 0)*0.05 + if (self.Transient or 0) ~= 0.0 then self.Transient = 0.0 end + + -- Parking brake animation + self.ParkingBrakeAngle = self.ParkingBrakeAngle or 0 + self.TrueBrakeAngle = self.TrueBrakeAngle or 0 + self.TrueBrakeAngle = self.TrueBrakeAngle + (self.ParkingBrakeAngle - 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 Lamps = self:GetPackedBool(20) and 0.4 or 1 + self:ShowHideSmooth("Lamps",self:Animate("lamps",self:GetPackedBool("Lamps") and Lamps or 0,0,1,6,false)) + + --ALS Lamps + self:ShowHideSmooth("LOCh",self:Animate("light_OCh",self:GetPackedBool(41) and 1 or 0,0,1,10,false)) + self:ShowHideSmooth("L0",self:Animate("light_0",self:GetPackedBool(42) and 1 or 0,0,1,10,false)) + self:ShowHideSmooth("L40",self:Animate("light_40",self:GetPackedBool(43) and 1 or 0,0,1,10,false)) + self:ShowHideSmooth("L60",self:Animate("light_60",self:GetPackedBool(44) and 1 or 0,0,1,10,false)) + self:ShowHideSmooth("L70",self:Animate("light_70",self:GetPackedBool(45) and 1 or 0,0,1,10,false)) + self:ShowHideSmooth("L80",self:Animate("light_80",self:GetPackedBool(46) and 1 or 0,0,1,10,false)) + + --MainPanel Lamps + self:ShowHideSmooth("SD",self:Animate("light_SD",self:GetPackedBool(40) and 1 or 0,0,1,10,false)) + self:ShowHideSmooth("gRP",self:Animate("light_gRP",self:GetPackedBool(36) and 1 or 0,0,1,10,false)) + self:ShowHideSmooth("rRP",self:Animate("light_rRP",self:GetPackedBool(35) and 1 or 0,0,1,12,false) + self:Animate("light_rLSN",self:GetPackedBool(131) and 1 or 0,0,0.2,12,false)) + self:ShowHideSmooth("r2RP",self:Animate("light_LhRK",self:GetPackedBool(112) and 1 or 0,0,1,10,false)) + self:ShowHideSmooth("LST",self:Animate("light_LST",self:GetPackedBool(49) and 1 or 0,0,1,10,false)) + self:ShowHideSmooth("LVD",self:Animate("light_LVD",self:GetPackedBool(50) and 1 or 0,0,1,5,false)) + + -- DIP sound + --self:SetSoundState("bpsn2",self:GetPackedBool(52) and 1 or 0,1.0) + + -- Simulate pressure gauges getting stuck a little + self:Animate("brake334", 1-self:GetPackedRatio(0), 0.00, 0.65, 256,24) + self:Animate("brake013", self:GetPackedRatio(0)^0.5, 0.00, 0.65, 256,24) + self:Animate("controller", self:GetPackedRatio(1), 0, 0.31, 2,false) + self:Animate("reverser", self:GetPackedRatio(2), 0.26, 0.35, 4,false) + self:Animate("volt1", self:GetPackedRatio(10), 0.347,0.524) + self:ShowHide("reverser", self:GetPackedBool(0)) + + self:ShowHide("brake013", self:GetPackedBool(22)) + self:ShowHide("brake334", not self:GetPackedBool(22)) + self:ShowHide("brake334_body", not self:GetPackedBool(22)) + + self:Animate("brake_line", self:GetPackedRatio(4), 0.626, 0.88, 256,2)--,,0.01) + self:Animate("train_line", self:GetPackedRatio(5)-transient, 0.626, 0.88, 256,2)--,,0.01) + self:Animate("brake_cylinder", self:GetPackedRatio(6), 0.121, 0.865, 256,2)--,,0.03) + self:Animate("voltmeter", self:GetPackedRatio(7), 0.587, 0.874) + self:Animate("ampermeter", self:GetPackedRatio(8), 0.628, 0.875) + --self:Animate("volt2", 0, 0.38, 0.63) + + local wheel_radius = 0.5*44.1 -- units + local speed = self:GetPackedRatio(3)*100 + local ang_vel = speed/(2*math.pi*wheel_radius) + + -- Rotate wheel + self.Angle = ((self.Angle or math.random()) + ang_vel*self.DeltaTime) % 1.0 + + self:Animate("speed1", self:GetPackedRatio("Speed") + math.sin(math.pi*8*self.Angle)*2/120, 0.525, 0.695, nil, nil, 256,2,0.01) + + self:Animate("headlights", self:GetPackedBool(1) and 1 or 0, 0,1, 8, false) + self:Animate("VozvratRP", self:GetPackedBool(2) and 1 or 0, 0,1, 16, false) + self:Animate("DIPon", self:GetPackedBool(3) and 1 or 0, 0,1, 16, false) + self:Animate("DIPoff", self:GetPackedBool(4) and 1 or 0, 0,1, 16, false) + self:Animate("Battery", self:GetPackedBool(7) and 1 or 0, 1,0, 4, false) + --self:Animate("bat2", self:GetPackedBool(7) and 1 or 0, 0,1, 16, false) + --self:Animate("bat3", self:GetPackedBool(7) and 1 or 0, 0,1, 16, false) + self:Animate("RezMK", self:GetPackedBool(8) and 1 or 0, 0,1.1, 16, false) + self:Animate("VUS", self:GetPackedBool(1) and 1 or 0, 1,0.1, 16, false) + self:Animate("KU1", self:GetPackedBool(9) and 1 or 0, 0,1, 16, false) + self:Animate("VAH", self:GetPackedBool(10) and 1 or 0, 1,0, 4, false) + self:Animate("VAD", self:GetPackedBool(11) and 1 or 0, 1,0, 4, false) + self:Animate("VUD", self:GetPackedBool(12) and 1 or 0, 0,1, 16, false) + self:Animate("VUD2", self:GetPackedBool(13) and 1 or 0, 0,1, 16, false) + self:Animate("VDL", self:GetPackedBool(14) and 1 or 0, 0,1, 16, false) + self:Animate("KDL", self:GetPackedBool(15) and 1 or 0, 0,1, 16, false) + self:Animate("KDP", self:GetPackedBool(16) and 1 or 0, 0,1, 16, false) + self:Animate("KRZD", self:GetPackedBool(17) and 1 or 0, 0,1, 16, false) + self:Animate("KSN", self:GetPackedBool(18) and 1 or 0, 0,1, 16, false) + self:Animate("OtklAVU", self:GetPackedBool(19) and 0 or 1, 0,1, 16, false) + self:Animate("DURAPower", self:GetPackedBool(24) and 1 or 0, 0,1, 16, false) + self:Animate("SelectMain", self:GetPackedBool(29) and 1 or 0, 0,1, 16, false) + self:Animate("SelectAlternate", self:GetPackedBool(30) and 1 or 0, 0,1, 16, false) + self:Animate("SelectChannel", self:GetPackedBool(31) and 1 or 0, 0,1, 16, false) + self:Animate("ARS", self:GetPackedBool(56) and 1 or 0, 1,0, 4, false) + self:Animate("ALS", self:GetPackedBool(57) and 1 or 0, 0,1, 16, false) + self:Animate("KVT", self:GetPackedBool(28) and 1 or 0, 0,1, 16, false) + ---- + self:Animate("door1", self:GetPackedBool(157) and (self.Door1 or 0.99) or 0,0,0.54/2, 1024, 1) + self:Animate("door3", self:GetPackedBool(158) and (self.Door2 or 0.99) or 0,0,0.51/2, 1024, 1) + self:Animate("door2", self:GetPackedBool(156) and (self.Door3 or 0.99) or 0,0,0.54/2, 1024, 1) + self:Animate("door4", self:GetPackedBool(159) and (self.Door2 or 0.99) or 0,0,0.51/2, 1024, 1) + + self:Animate("FrontBrake", self:GetNW2Bool("FbI") and 0 or 1,0,0.35, 3, false) + self:Animate("FrontTrain", self:GetNW2Bool("FtI") and 0 or 1,0,0.35, 3, false) + self:Animate("RearBrake", self:GetNW2Bool("RbI") and 1 or 0,0,0.35, 3, false) + self:Animate("RearTrain", self:GetNW2Bool("RtI") and 1 or 0,0,0.35, 3, false) + + self:Animate("VUD2", self:GetPackedBool(13) and 1 or 0, 0,1, 16, false) + self:Animate("L_3", self:GetPackedBool(62) and 1 or 0, 0,1, 16, false) + + self:Animate("Custom1", self:GetPackedBool(114) and 1 or 0, 0,1, 16, false) + self:Animate("Custom2", self:GetPackedBool(115) and 1 or 0, 0,1, 16, false) + self:Animate("Custom3", self:GetPackedBool(116) and 1 or 0, 0,1, 16, false) + --[[self:Animate("Custom4", self:GetPackedBool(117) and 1 or 0, 0,1, 16, false) + self:Animate("Custom5", self:GetPackedBool(118) and 1 or 0, 0,1, 16, false) + self:Animate("Custom6", self:GetPackedBool(119) and 1 or 0, 0,1, 16, false) + self:Animate("Custom7", self:GetPackedBool(120) and 1 or 0, 0,1, 16, false) + self:Animate("Custom8", self:GetPackedBool(121) and 1 or 0, 0,1, 16, false) + self:Animate("CustomA", self:GetPackedBool(122) and 1 or 0, 0,1, 16, false) + self:Animate("CustomB", self:GetPackedBool(123) and 1 or 0, 0,1, 16, false)]]-- + self:Animate("CustomC", self:GetPackedBool(124) and 1 or 0, 0,1, 16, false) + self:Animate("R_G", self:GetPackedBool(125) and 1 or 0, 0,1, 16, false) + self:Animate("R_Radio", self:GetPackedBool(126) and 1 or 0, 0,1, 16, false) + self:Animate("R_UNch", self:GetPackedBool(127) and 1 or 0, 0,1, 16, false) + self:Animate("Program1", self:GetPackedBool(128) and 1 or 0, 0,1, 16, false) + self:Animate("Program2", self:GetPackedBool(129) and 1 or 0, 0,1, 16, false) + self:Animate("rc1", self:GetPackedBool(130) and 0.87 or 1, 0,1, 1, false) + self:Animate("UOS", self:GetPackedBool(134) and 0.87 or 1, 0,1, 1, false) + self:Animate("BPS", self:GetPackedBool(135) and 0.87 or 1, 0,1, 1, false) + self:Animate("UAVALever", self:GetPackedBool(152) and 1 or 0, 0,0.25, 128, 3,false) + self:Animate("brake_disconnect",self:GetPackedBool("DriverValveBLDisconnect") and 1 or 0,0,0.5, 3,false) + self:Animate("train_disconnect",self:GetPackedBool("DriverValveTLDisconnect") and 1 or 0,0,0.5, 3,false) + self:Animate("EPK_disconnect",self:GetPackedBool("EPK") and 1 or 0,0,0.5, 3,false) + + self:Animate("PB", self:GetPackedBool(165) and 1 or 0,0,0.2, 8,false) + + self:ShowHideSmooth("AVULight_light",self:Animate("AVUl",self:GetPackedBool(38) and 1 or 0,0,1,10,false)) + -- Animate AV switches + for i,v in ipairs(self.Panel.AVMap) do + local value = self:GetPackedBool(64+(i-1)) and 1 or 0 + --self:Animate("a"..(i-1),value,0,1,8,false) + end + self:Animate("VU1",self:GetPackedBool(64+19) and 1 or 0, 1,0, 4, false) + self:Animate("VU",self:GetPackedBool(64+12) and 1 or 0, 1,0, 4, false) + self:Animate("RST",self:GetPackedBool(64+24) and 1 or 0, 1,0, 4, false) + self:Animate("AV8B",self:GetPackedBool(64+7) and 1 or 0, 0,1, 8, false) + self:Animate("VU2",self:GetPackedBool(64+36) and 1 or 0, 1,0, 4, false) + self:Animate("VU3",self:GetPackedBool(64+13) and 1 or 0, 1,0, 4, false) + + -- Main switch + if self.LastValue ~= self:GetPackedBool(5) then + self.ResetTime = CurTime()+1.5 + self.LastValue = self:GetPackedBool(5) + end + self:Animate("gv_wrench", (self:GetPackedBool(5) and 1 or 0), 0,0.51, 128, 1,false) + self:ShowHide("gv_wrench", CurTime() < self.ResetTime) + + -- Animate doors + for i=0,4 do + for k=0,1 do + local n_l = "door"..i.."x"..k.."a" + local n_r = "door"..i.."x"..k.."b" + self:Animate(n_l,self:GetPackedBool(21+(1-k)*4) and 1 or 0,0.11,0.93, 0.8 + (-0.2+0.4*math.random()),0) + self:Animate(n_r,self:GetPackedBool(21+(1-k)*4) and 1 or 0,0.11,0.93, 0.8 + (-0.2+0.4*math.random()),0) + --[[ + local animation = self:Animate(n_l,self:GetPackedBool(21+(1-k)*4) and 1 or 0,0,1, 0.8 + (-0.2+0.4*math.random()),0) + local offset_l = Vector(math.abs(31*animation),0,0) + local offset_r = Vector(math.abs(32*animation),0,0) + if self.ClientEnts[n_l] then + --self.ClientEnts[n_l]:SetPos(self:LocalToWorld(self.ClientProps[n_l].pos + (1.0 - 2.0*k)*offset_l)) + --self.ClientEnts[n_l]:SetSkin(self:GetSkin()) + end + if self.ClientEnts[n_r] then + --self.ClientEnts[n_r]:SetPos(self:LocalToWorld(self.ClientProps[n_r].pos - (1.0 - 2.0*k)*offset_r)) + --self.ClientEnts[n_r]:SetSkin(self:GetSkin()) + end]] + end + end + --if self.ClientEnts["door1"] then self.ClientEnts["door1"]:SetSkin(self:GetSkin()) end + --if self.ClientEnts["door2"] then self.ClientEnts["door2"]:SetSkin(self:GetSkin()) end + --if self.ClientEnts["door3"] then self.ClientEnts["door3"]:SetSkin(self:GetSkin()) end + --if self.ClientEnts["door4"] then self.ClientEnts["door4"]:SetSkin(self:GetSkin()) end + + + -- Brake-related sounds + local brakeLinedPdT = self:GetPackedRatio(9) + local dT = self.DeltaTime + self.BrakeLineRamp1 = self.BrakeLineRamp1 or 0 + + if (brakeLinedPdT > -0.001) + then self.BrakeLineRamp1 = self.BrakeLineRamp1 + 4.0*(0-self.BrakeLineRamp1)*dT + else self.BrakeLineRamp1 = self.BrakeLineRamp1 + 4.0*((-0.6*brakeLinedPdT)-self.BrakeLineRamp1)*dT + end + self.BrakeLineRamp1 = math.Clamp(self.BrakeLineRamp1,0,1) + self:SetSoundState("release2",self.BrakeLineRamp1^1.65,1.0) + + self.BrakeLineRamp2 = self.BrakeLineRamp2 or 0 + if (brakeLinedPdT < 0.001) + then self.BrakeLineRamp2 = self.BrakeLineRamp2 + 4.0*(0-self.BrakeLineRamp2)*dT + else self.BrakeLineRamp2 = self.BrakeLineRamp2 + 8.0*(0.1*brakeLinedPdT-self.BrakeLineRamp2)*dT + end + self.BrakeLineRamp2 = math.Clamp(self.BrakeLineRamp2,0,1) + self:SetSoundState("release3",self.BrakeLineRamp2 + math.max(0,self.BrakeLineRamp1/2-0.15),1.0) + + self:SetSoundState("cran1",math.min(1,self:GetPackedRatio(4)/50*(self:GetPackedBool(6) and 1 or 0)),1.0) + + -- Compressor + local state = self:GetPackedBool(20) + self.PreviousCompressorState = self.PreviousCompressorState or false + if self.PreviousCompressorState ~= state then + self.PreviousCompressorState = state + if state then + self:SetSoundState("compressor_e",1,1) + else + self:SetSoundState("compressor_e",0,1) + self:SetSoundState("compressor_e_end",0,1) + self:SetSoundState("compressor_e_end",1,1) + --self:PlayOnce("compressor_e_end",nil,1,nil,true) + end + end + + -- ARS/ringer alert + local state = self:GetPackedBool(39) + self.PreviousAlertState = self.PreviousAlertState or false + if self.PreviousAlertState ~= state then + self.PreviousAlertState = state + if state then + self:SetSoundState("ring4",1,1) + else + self:SetSoundState("ring4",0,0) + self:SetSoundState("ring4_end",0,1) + self:SetSoundState("ring4_end",1,1) + end + end + + local state = self:GetPackedBool("VPR") + self.PreviousVPRState = self.PreviousVPRState or false + if self.PreviousVPRState ~= state then + self.PreviousVPRState = state + if state then + self:SetSoundState("vpr",1,1) + else + self:SetSoundState("vpr",0,0) + self:PlayOnce("vpr_end","cabin",1) + end + end + + -- RK rotation + if self:GetPackedBool(112) then self.RKTimer = CurTime() end + local 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_spin",0.7,1,nil,0.75) + else + self:SetSoundState("rk_spin",0,0,nil,0.75) + self:SetSoundState("rk_stop",0,1,nil,0.75) + self:SetSoundState("rk_stop",0.7,1,nil,0.75) + end + end + + --DIP sound + --self:SetSoundState("bpsn2",self:GetPackedBool(32) and 1 or 0,1.0) +end + +function ENT:Draw() + self.BaseClass.Draw(self) +end + +function ENT:DrawPost() + local dc = render.GetLightColor(self:LocalToWorld(Vector(460.0,0.0,5.0))) + self:DrawOnPanel("InfoTable",function() + surface.SetDrawColor(0,0,0) --255*dc.x,250*dc.y,220*dc.z) + surface.DrawRect(50,0,540,100) + draw.Text({ + text = self:GetNW2String("FrontText",""), + font = "MetrostroiSubway_InfoPanel",--..self:GetNW2Int("Style",1), + pos = { 320, 50 }, + xalign = TEXT_ALIGN_CENTER, + yalign = TEXT_ALIGN_CENTER, + color = Color(250,200,20,255)}) + end) + + if self.InfoTableTimeout and (CurTime() < self.InfoTableTimeout) then + self:DrawOnPanel("InfoTableSelect",function() + draw.Text({ + text = self:GetNW2String("RouteNumber",""), + font = "MetrostroiSubway_InfoPanel",--..self:GetNW2Int("Style",1), + pos = { 140, -50 }, + xalign = TEXT_ALIGN_CENTER, + yalign = TEXT_ALIGN_CENTER, + color = Color(255,0,0,255)}) + draw.Text({ + text = self:GetNW2String("FrontText",""), + font = "MetrostroiSubway_InfoPanel",--..self:GetNW2Int("Style",1), + pos = { 140, -100 }, + xalign = TEXT_ALIGN_CENTER, + yalign = TEXT_ALIGN_CENTER, + color = Color(255,0,0,255)}) + end) + end + + self:DrawOnPanel("InfoRoute",function() + surface.SetDrawColor(142,132,101) --255*dc.x,250*dc.y,220*dc.z) + --surface.DrawRect(0,100,88,70) + draw.Text({ + text = self:GetNW2String("RouteNumber"," ")[1], + font = "MetrostroiSubway_InfoRoute",--..self:GetNW2Int("Style",1), + pos = { 20, 135 }, + xalign = TEXT_ALIGN_CENTER, + yalign = TEXT_ALIGN_CENTER, + color = Color(0,0,0,255)}) + draw.Text({ + text = self:GetNW2String("RouteNumber"," ")[2], + font = "MetrostroiSubway_InfoRoute",--..self:GetNW2Int("Style",1), + pos = { 68, 135 }, + xalign = TEXT_ALIGN_CENTER, + yalign = TEXT_ALIGN_CENTER, + color = Color(0,0,0,255)}) + end) + self:DrawOnPanel("ARS",function() + if not self:GetPackedBool(32) then return end + + local speed = self:GetPackedRatio(3)*100.0 + local d1 = math.floor(speed) % 10 + local d2 = math.floor(speed / 10) % 10 + self:DrawDigit((196+0) *10, 35*10, d2, 0.75, 0.55) + self:DrawDigit((196+10)*10, 35*10, d1, 0.75, 0.55) + + --[[local b = self:Animate("light_rRP",self:GetPackedBool(35) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(255,50,0) + surface.DrawRect(253*10,33*10,16*10,8*10) + surface.SetAlphaMultiplier(1) + draw.DrawText("РП","MetrostroiSubway_LargeText",253*10+30,33*10-19,Color(0,0,0,255)) + end + + local b = self:Animate("light_rLSN",self:GetPackedBool(131) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(255,50,0) + surface.DrawRect(290*10,33*10,16*10,8*10) + draw.DrawText("РП","MetrostroiSubway_LargeText",290*10+30,33*10-19,Color(0,0,0,255)) + end]] + + --[[b = self:Animate("light_gRP",self:GetPackedBool(36) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(50,255,50) + surface.DrawRect(140*10,33*10,16*10,8*10) + draw.DrawText("РП","MetrostroiSubway_LargeText",140*10+30,33*10-19,Color(0,0,0,255)) + end]] + + --[[b = self:Animate("light_gKT",self:GetPackedBool(47) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(50,255,50) + surface.DrawRect(133*10,73*10,16*10,8*10) + draw.DrawText("КТ","MetrostroiSubway_LargeText",133*10+30,73*10-20,Color(0,0,0,255)) + end ]] + + --[[b = self:Animate("light_gKVD",self:GetPackedBool(48) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(50,255,50) + surface.DrawRect(165*10,73*10,16*10,8*10) + draw.DrawText("КВД","MetrostroiSubway_LargeText",165*10,73*10-20,Color(0,0,0,255)) + end]] + + --[[b = self:Animate("light_LhRK",self:GetPackedBool(33) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(255,50,0) + surface.DrawRect(101*10,73*10,16*10,8*10) + end]] + + --[[b = self:Animate("light_NR1",self:GetPackedBool(34) and 0 or 1,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(50,255,50) + surface.DrawRect(196*10,73*10,16*10,8*10) + draw.DrawText("ÐР1","MetrostroiSubway_LargeText",196*10,73*10-20,Color(0,0,0,255)) + end]] + + --[[b = self:Animate("light_PECH",self:GetPackedBool(37) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(255,50,0) + surface.DrawRect(260*10,73*10,16*10,8*10) + draw.DrawText("ПЕЧЬ","MetrostroiSubway_SmallText",260*10,73*10-5,Color(0,0,0,255)) + end]] + --[[ + b = self:Animate("light_AVU",self:GetPackedBool(38) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(50,255,50) + surface.DrawRect(295*10,73*10,16*10,8*10) + draw.DrawText("ÐВУ","MetrostroiSubway_LargeText",295*10,73*10-20,Color(0,0,0,255)) + end + ]] + --[[b = self:Animate("light_SD",self:GetPackedBool(40) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(50,255,50) + surface.DrawRect(102*10,33*10,16*10,8*10) + draw.DrawText("СД","MetrostroiSubway_LargeText",102*10+30,33*10-20,Color(0,0,0,255)) + end]] + + ------------------------------------------------------------------------ + --[[b = self:Animate("light_OCh",self:GetPackedBool(41) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(255,50,0) + surface.DrawRect(102*10,53*10,16*10,8*10) + draw.DrawText("ОЧ","MetrostroiSubway_LargeText",102*10+30,53*10-15,Color(0,0,0,255)) + end]] + + --[[b = self:Animate("light_0",self:GetPackedBool(42) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(255,50,0) + surface.DrawRect(140*10,53*10,16*10,8*10) + draw.DrawText("0","MetrostroiSubway_LargeText",140*10+55,53*10-10,Color(0,0,0,255)) + end]] + + --[[b = self:Animate("light_40",self:GetPackedBool(43) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(255,50,0) + surface.DrawRect(176*10,53*10,16*10,8*10) + draw.DrawText("40","MetrostroiSubway_LargeText",176*10+30,53*10-10,Color(0,0,0,255)) + end]] + + --[[b = self:Animate("light_60",self:GetPackedBool(44) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(50,255,50) + surface.DrawRect(217*10,53*10,16*10,8*10) + draw.DrawText("60","MetrostroiSubway_LargeText",217*10+30,53*10-10,Color(0,0,0,255)) + end]] + + --[[b = self:Animate("light_75",self:GetPackedBool(45) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(50,255,50) + surface.DrawRect(255*10,53*10,16*10,8*10) + draw.DrawText("70","MetrostroiSubway_LargeText",255*10+30,53*10-10,Color(0,0,0,255)) + end]] + + --[[b = self:Animate("light_80",self:GetPackedBool(46) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(50,255,50) + surface.DrawRect(294*10,53*10,16*10,8*10) + draw.DrawText("80","MetrostroiSubway_LargeText",294*10+30,53*10-10,Color(0,0,0,255)) + end]] + + surface.SetAlphaMultiplier(1.0) + end) +--[[ + self:DrawOnPanel("IGLA",function() + local plus = ((not self:GetPackedBool(32) or not self:GetPackedBool(78)) and 1 or 0) + surface.SetDrawColor(50 - plus*40,255 - plus*220,40 - plus*40) + surface.DrawRect(0,-4,360,60) + if not self:GetPackedBool(32) or not self:GetPackedBool(78) then return end + local text1 = "" + local text2 = "" + local C1 = Color(0,0,0,255) + local C2 = Color(50,200,50,255) + local flash = false + local T = self:GetPackedRatio(11) + local Ptrain = self:GetPackedRatio(5)*16.0 + local Pcyl = self:GetPackedRatio(6)*6.0 + local date = os.date("!*t",os_time) + -- Default IGLA text + text1 = "IGLA-01K RK TEMP" + text2 = Format("%02d:%02d:%02d %3d C",date.hour,date.min,date.sec,T) + + -- Modifiers and conditions + if self:GetPackedBool(25) then text1 = " !! Right Doors !!" end + if self:GetPackedBool(21) then text1 = " !! Left Doors !!" end + + if T > 300 then text1 = "Temperature warning!" end + + if self:GetPackedBool(50) and (Pcyl > 1.1) then + text1 = "FAIL PNEUMATIC BRAKE" + flash = true + end + if self:GetPackedBool(35) and + self:GetPackedBool(28) then + text1 = "FAIL AVU/BRAKE PRESS" + flash = true + end + if self:GetPackedBool(35) and + (not self:GetPackedBool(40)) then + text1 = "FAIL SD/DOORS OPEN " + flash = true + end + if self:GetPackedBool(36) then + text1 = "FAIL OVERLOAD RELAY " + flash = true + end + if Ptrain < 5.5 then + text1 = "FAIL TRAIN LINE LEAK" + flash = true + end + + if T > 400 then flash = true end + if T > 500 then text1 = "!Disengage circuits!" end + if T > 750 then text1 = " !! PIZDA POEZDU !! " end + + -- Draw text + if flash and ((RealTime() % 1.0) > 0.5) then + C2,C1 = C1,C2 + end + for i=1,20 do + surface.SetDrawColor(C2) + surface.DrawRect(3+(i-1)*17.7+1,0+4,16,22) + draw.DrawText(string.upper(text1[i] or ""),"MetrostroiSubway_IGLA",3+(i-1)*17.7,0+0,C1) + end + for i=1,20 do + surface.SetDrawColor(C2) + surface.DrawRect(3+(i-1)*17.7+1,0+24+4,16,22) + draw.DrawText(string.upper(text2[i] or ""),"MetrostroiSubway_IGLA",3+(i-1)*17.7,0+24,C1) + end + end) + ]] + self:DrawOnPanel("AnnouncerDisplay",function() + local plus = (not self:GetPackedBool(32) and 1 or 0) + surface.SetDrawColor(50 - plus*40,255 - plus*220,40 - plus*40) + surface.DrawRect(260,80,390,150) + if not self:GetPackedBool(32) then return end + + -- Custom announcer display + local C1 = Color(0,0,0,210) + local C2 = Color(50,200,50,255) + local flash = false + text1 = self:GetNW2String("CustomStr0") + text2 = self:GetNW2String("CustomStr1") + + -- Draw text + if flash and ((RealTime() % 1.0) > 0.5) then + C2,C1 = C1,C2 + end + for i=1,20 do + surface.SetDrawColor(C2) + surface.DrawRect(280+(i-1)*17.7+1,124+4,16,20) + draw.DrawText(string.upper(text1[i] or ""),"MetrostroiSubway_IGLA",280+(i-1)*17.7,124+0,C1) + end + for i=1,20 do + surface.SetDrawColor(C2) + surface.DrawRect(280+(i-1)*17.7+1,124+31+4,16,20) + draw.DrawText(string.upper(text2[i] or ""),"MetrostroiSubway_IGLA",280+(i-1)*17.7,124+31,C1) + end + end) + --[[ + self:DrawOnPanel("DURADisplay",function() + if not self:GetPackedBool(32) or not self:GetPackedBool(24) then return end + local function GetColor(id, text) + if text then + return self:GetPackedBool(id) and Color(255,0,0) or Color(0,0,0) + else + return not self:GetPackedBool(id) and Color(255,255,255) or Color(0,0,0) + end + end + surface.SetAlphaMultiplier(0.4) + surface.SetDrawColor(255,255,255) + surface.DrawRect(0,3+22.8*0,211,22.8) -- 120 + surface.SetAlphaMultiplier(1.0) + draw.DrawText("DURA V 1.0","MetrostroiSubway_IGLA",0,0+22.8*0, Color(0,0,0,255)) + + surface.SetAlphaMultiplier(0.4) + surface.SetDrawColor(GetColor(31)) surface.SetAlphaMultiplier(0.4) + surface.DrawRect(0,3+22.8*1,211,23) -- 120 + surface.SetAlphaMultiplier(1.0) + draw.DrawText("Channel:" .. (self:GetPackedBool(31) and "2" or "1"),"MetrostroiSubway_IGLA",0,0+22.8*1,GetColor(31, true)) + + surface.SetAlphaMultiplier(0.4) + surface.SetDrawColor(GetColor(153)) surface.SetAlphaMultiplier(0.4) + surface.DrawRect(0,3+22.8*2,211,23) -- 120 + surface.SetAlphaMultiplier(1.0) + draw.DrawText("Channel1:" .. (self:GetPackedBool(153) and "Alt" or "Main"),"MetrostroiSubway_IGLA",0,0+22.8*2,GetColor(153, true)) + + surface.SetAlphaMultiplier(0.4) + surface.SetDrawColor(GetColor(154)) + surface.DrawRect(0,3+22.8*3,211,23) -- 120 + surface.SetAlphaMultiplier(1.0) + draw.DrawText("Channel2:" .. (self:GetPackedBool(154) and "Alt" or "Main"),"MetrostroiSubway_IGLA",0,0+22.8*3,GetColor(154, true)) + surface.SetAlphaMultiplier(0.4) + surface.SetDrawColor(255,255,255) + surface.DrawRect(0,3+22.8*4,211,23) -- 120 + surface.SetAlphaMultiplier(1) + end)]] + + self:DrawOnPanel("FrontPneumatic",function() + draw.DrawText(self:GetNW2Bool("FbI") and "Isolated" or "Open","Trebuchet24",150,0,Color(0,0,0,255)) + draw.DrawText(self:GetNW2Bool("FtI") and "Isolated" or "Open","Trebuchet24",670,0,Color(0,0,0,255)) + end) + self:DrawOnPanel("RearPneumatic",function() + draw.DrawText(self:GetNW2Bool("RbI") and "Isolated" or "Open","Trebuchet24",150,0,Color(0,0,0,255)) + draw.DrawText(self:GetNW2Bool("RtI") and "Isolated" or "Open","Trebuchet24",670,0,Color(0,0,0,255)) + end) + 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) + + -- Draw train numbers + local dc = render.GetLightColor(self:GetPos()) + self:DrawOnPanel("TrainNumber1",function() + draw.DrawText(Format("%04d",self:EntIndex()),"MetrostroiSubway_LargeText3",0,0,Color(255*dc.x,255*dc.y,255*dc.z,255)) + end) + self:DrawOnPanel("TrainNumber2",function() + draw.DrawText(Format("%04d",self:EntIndex()),"MetrostroiSubway_LargeText3",0,0,Color(255*dc.x,255*dc.y,255*dc.z,255)) + end) +end + +function ENT:OnButtonPressed(button) + if button == "ShowHelp" then + RunConsoleCommand("metrostroi_train_manual") + end + local bp_press = self:GetPackedRatio(6) + local blocked_l = self:GetPackedBool(132) and 0 or 1 + local blocked_r = self:GetPackedBool(133) and 0 or 1 + if button == "ParkingBrakeLeft" then + self.ParkingBrakeAngle = (self.ParkingBrakeAngle or 0) - blocked_l*45 + end + if button == "ParkingBrakeRight" then + self.ParkingBrakeAngle = (self.ParkingBrakeAngle or 0) + blocked_r*45 + end + if button == "ShowHelp" then + RunConsoleCommand("metrostroi_train_manual") + end + + if button == "PrevSign" then + self.InfoTableTimeout = CurTime() + 2.0 + end + if button == "NextSign" then + self.InfoTableTimeout = CurTime() + 2.0 + end + + if button and button:sub(1,3) == "Num" then + self.InfoTableTimeout = CurTime() + 2.0 + end +end diff --git a/lua/entities/_obsolete/gmod_subway_e/init.lua b/lua/entities/_obsolete/gmod_subway_e/init.lua new file mode 100644 index 0000000..bd80fac --- /dev/null +++ b/lua/entities/_obsolete/gmod_subway_e/init.lua @@ -0,0 +1,1007 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +ENT.BogeyDistance = 650 -- Needed for gm trainspawner + +--------------------------------------------------- +-- Defined train information +-- Types of wagon(for wagon limit system): +-- 0 = Head or intherim +-- 1 = Only head +-- 2 = Only intherim +--------------------------------------------------- +ENT.SubwayTrain = { + Type = "E", + Name = "E", + WagType = 1, + ARS = { + HaveASNP = false, + } +} +function ENT:Initialize() + -- Set model and initialize + self:SetModel("models/metrostroi_train/e/e.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create seat entities + self.DriverSeat = self:CreateSeat("driver",Vector(418+9.15,-41,-48+6+2.5),Angle(0,90,0),"models/vehicles/prisoner_pod_inner.mdl") + self.InstructorsSeat = self:CreateSeat("instructor",Vector(430,40,-48+6+2.5),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 + self.FrontBogey = self:CreateBogey(Vector( 313,0,-80),Angle(0,180,0),true) + self.RearBogey = self:CreateBogey(Vector(-313,0,-80),Angle(0,0,0),false) + local pneumoPow = 0.8+(math.random()^0.4)*0.3 + self.FrontBogey.PneumaticPow = pneumoPow + self.RearBogey.PneumaticPow = pneumoPow + + -- Initialize key mapping + self.KeyMap = { + [KEY_1] = "KVSetX1", + [KEY_2] = "KVSetX2", + [KEY_3] = "KVSetX3", + [KEY_4] = "KVSet0", + [KEY_5] = "KVSetT1", + [KEY_6] = "KVSetT1AB", + [KEY_7] = "KVSetT2", + [KEY_8] = "KRP", + + [KEY_EQUAL] = "R_Program1Set", + [KEY_MINUS] = "R_Program2Set", + + [KEY_G] = "VozvratRPSet", + + [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] = "KDL", + [KEY_D] = "KDP", + [KEY_V] = "VUD1Toggle", + [KEY_L] = "HornEngage", + [KEY_N] = "VZ1Set", + [KEY_PAD_1] = "PneumaticBrakeSet1", + [KEY_PAD_2] = "PneumaticBrakeSet2", + [KEY_PAD_3] = "PneumaticBrakeSet3", + [KEY_PAD_4] = "PneumaticBrakeSet4", + [KEY_PAD_5] = "PneumaticBrakeSet5", + [KEY_PAD_6] = "PneumaticBrakeSet6", + [KEY_PAD_7] = "PneumaticBrakeSet7", + [KEY_PAD_DIVIDE] = "KRPSet", + [KEY_PAD_MULTIPLY] = "KAHSet", + + [KEY_SPACE] = "PBSet", + [KEY_BACKSPACE] = "EmergencyBrake", + + [KEY_PAD_0] = "DriverValveDisconnect", + [KEY_PAD_DECIMAL] = "EPKToggle", + [KEY_LSHIFT] = { + [KEY_W] = "KVUp_Unlocked", + [KEY_SPACE] = "KVTSet", + + [KEY_A] = "DURASelectAlternate", + [KEY_D] = "DURASelectMain", + [KEY_V] = "DURAToggleChannel", + [KEY_1] = "DIPonSet", + [KEY_2] = "DIPoffSet", + [KEY_4] = "KVSet0Fast", + [KEY_L] = "DriverValveDisconnect", + + [KEY_7] = "KVWrenchNone", + [KEY_8] = "KVWrenchKRU", + [KEY_9] = "KVWrenchKV", + [KEY_0] = "KVWrench0", + [KEY_6] = "KVSetT1A", + }, + + [KEY_RSHIFT] = { + [KEY_7] = "KVWrenchNone", + [KEY_8] = "KVWrenchKRU", + [KEY_9] = "KVWrenchKV", + [KEY_0] = "KVWrench0", + [KEY_L] = "DriverValveDisconnect", + [KEY_F] = "BCCDSet", + [KEY_R] = "VZPSet", + }, + [KEY_LALT] = { + [KEY_V] = "VUD1Toggle", + [KEY_L] = "EPKToggle", + }, + [KEY_RALT] = { + [KEY_L] = "EPKToggle", + }, + } + + self.InteractionZones = { + { Pos = Vector(-470,-38,9), + Radius = 28, + ID = "RearDoor" }, + { Pos = Vector(450,38,9), + Radius = 28, + ID = "FrontDoor1" }, + { Pos = Vector(450,38,-16), + Radius = 28, + ID = "FrontDoor2" }, + { Pos = Vector(382,-38,9), + Radius = 28, + ID = "PassengerDoor" }, + { Pos = Vector(445,61,25), + Radius = 16, + ID = "CabinDoor1" }, + { Pos = Vector(445,61,-25), + Radius = 16, + ID = "CabinDoor2" }, + { Pos = Vector(380,67,25), + Radius = 28, + ID = "CabinDoor3" }, + { Pos = Vector(380,67,-25), + Radius = 28, + ID = "CabinDoor4" }, + } + + self.Lights = { + -- Head + [1] = { "headlight", Vector(465+11,0,-20), Angle(0,0,0), Color(216,161,92), fov = 100 }, + [2] = { "glow", Vector(469.4, 45.43,-30.7), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 1.0 }, + [3] = { "glow", Vector(469.4,-45.43,-30.7), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 1.0 }, + [4] = { "glow", Vector(458+9,-14.86, 58), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 0.5 }, + [5] = { "glow", Vector(458+9,0, 58), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 0.5 }, + [6] = { "glow", Vector(458+9, 14.86, 58), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 0.5 }, + + -- Reverse + [8] = { "light", Vector(458+11,-30.7, 54.2), Angle(0,0,0), Color(255,0,0), brightness = 10, scale = 1.0 }, + [9] = { "light", Vector(458+11, 30.7, 54.2), Angle(0,0,0), Color(255,0,0), brightness = 10, scale = 1.0 }, + + -- Cabin + [10] = { "dynamiclight", Vector(435,0,20), Angle(0,-0,0), Color(255,107,50), brightness = 0.004, distance = 600, shadows = 1}, + + -- Interior + [11] = { "dynamiclight", Vector( 250, 0, 0), Angle(0,0,0), Color(255,95,10), brightness = 5, distance = 300 , fov=180,farz = 128 }, + [12] = { "dynamiclight", Vector( 0, 0, 0), Angle(0,0,0), Color(255,95,10), brightness = 5, distance = 400, fov=180,farz = 128 }, + [13] = { "dynamiclight", Vector(-300, 0, 0), Angle(0,0,0), Color(255,95,10), brightness = 5, distance = 400 , fov=180,farz = 128 }, + + -- Side lights + --//[14] = { "light", Vector(390+12.15, 69, 54), Angle(0,0,0), Color(255,0,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + --[15] = { "light", Vector(390+12.15, 69, 51), Angle(0,0,0), Color(150,255,255), brightness = 0.6, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + --[16] = { "light", Vector(390+12.15, 69, 48), Angle(0,0,0), Color(50,255,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + --[17] = { "light", Vector(390+12.15, 69, 45), Angle(0,0,0), Color(255,255,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + + --[18] = { "light", Vector(390+12.15, -69, 54), Angle(0,0,0), Color(255,0,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + --[19] = { "light", Vector(390+12.15, -69, 51), Angle(0,0,0), Color(150,255,255), brightness = 0.6, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + --[20] = { "light", Vector(390+12.15, -69, 48), Angle(0,0,0), Color(50,255,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + --[21] = { "light", Vector(390+12.15, -69, 45), Angle(0,0,0), Color(255,255,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + + [15] = { "light", Vector(402.202942,69.270073,44.79285), Angle(0,0,0), Color(150,255,255), brightness = 0.9, scale = 0.10, texture = "sprites/light_glow02.vmt" }, + [16] = { "light", Vector(402.202942,69.270073,41.509621), Angle(0,0,0), Color(50,255,0), brightness = 0.9, scale = 0.10, texture = "sprites/light_glow02.vmt" }, + [17] = { "light", Vector(402.202942,69.270073,37.3862), Angle(0,0,0), Color(255,255,0), brightness = 0.9, scale = 0.10, texture = "sprites/light_glow02.vmt" }, + + --[19] = { "light", Vector(15, -69, 58.3), Angle(0,0,0), Color(150,255,255), brightness = 0.9, scale = 0.10, texture = "sprites/light_glow02.vmt" }, + --[20] = { "light", Vector(12, -69, 58.3), Angle(0,0,0), Color(50,255,0), brightness = 0.9, scale = 0.10, texture = "sprites/light_glow02.vmt" }, + --[21] = { "light", Vector(9, -69, 58.3), Angle(0,0,0), Color(255,255,0), brightness = 0.9, scale = 0.10, texture = "sprites/light_glow02.vmt" }, + [32] = { "headlight", Vector(450.70,-56.3,28), Angle(-90,0,-45), Color(216,161,92), farz = 6, nearz = 4, shadows = 0, brightness = 2, fov = 77 }, + [33] = { "headlight", Vector(450.70,-56.3,32), Angle(-90,0,-45), Color(216,161,92), farz = 6, nearz = 4, shadows = 0, brightness = 2, fov = 77 }, + + [34] = { "headlight", Vector(448.65,-56.40,22.60), Angle(-30,0,-45), Color(216,161,92), farz = 6, nearz = 4, shadows = 0, brightness = 2, fov = 140 }, + + [35] = { "headlight", Vector(450.6,-55.84,12.73), Angle(-90,-90,-180), Color(216,161,92), farz = 7, nearz = 4, shadows = 0, brightness = 2, fov = 130 }, + + [36] = { "headlight", Vector(455.2,-53.2,5.35), Angle(-90,-90,-180), Color(216,161,92), farz = 4, nearz = 4, shadows = 0, brightness = 2, fov = 130 }, + + [37] = { "headlight", Vector(458.3,-20.32,19.6), Angle(-90,-120,-180), Color(216,161,92), farz = 4, nearz = 4, shadows = 0, brightness = 3, fov = 160 }, + + [38] = { "headlight", Vector( -20, 0, 30), Angle(90,0,90), Color(255,95,10), brightness = 1, distance = 999,fov=179, shadows = 0, farz = 500}, + [39] = { "headlight", Vector( -20, 0, 10), Angle(-90,0,90), Color(255,95,10), brightness = 1, distance = 999,fov=179, shadows = 0, farz = 500}, + + } + -- Lights + --[[ + for i = 1,23 do + self.Lights[69+i] = { "light", Vector(-470 + 35*i, 0, 65), Angle(180,0,0), Color(255,220,180), brightness = 0.25, scale = 0.75} + --self:SetLightPower(69+i,RealTime()%1*2>1) + end]] + + -- Cross connections in train wires + self.TrainWireInverts = { + [18] = true, + [34] = true, + } + self.TrainWireCrossConnections = { + [5] = 4, -- Reverser F<->B + [31] = 32, -- Doors L<->R + } + + -- Setup door positions + self.LeftDoorPositions = {} + self.RightDoorPositions = {} + for i=0,3 do + table.insert(self.LeftDoorPositions,Vector(353.0 - 35*0.5 - 231*i,65,-1.8)) + table.insert(self.RightDoorPositions,Vector(353.0 - 35*0.5 - 231*i,-65,-1.8)) + end + + -- KV wrench mode + self.KVWrenchMode = 0 + + -- Parking brake ratio + self.ManualBrake = 0.0 + self.RearDoor = false + self.FrontDoor = false + self.CabinDoor = false + self.PassengerDoor = false + +-- self.A5:TriggerInput("Set",0) + self:UpdateTextures() +end +function ENT:UpdateTextures() + local texture = Metrostroi.Skins["train"][self.Texture] + local passtexture = Metrostroi.Skins["pass"][self.PassTexture] + local cabintexture = Metrostroi.Skins["cab"][self.CabTexture] + + for k,v in pairs(self:GetMaterials()) do + self:SetSubMaterial(k-1,"") + end + for k,v in pairs(self:GetMaterials()) do + if v == "models/metrostroi_train/81/int02" then + if not Metrostroi.Skins["717_schemes"] or not Metrostroi.Skins["717_schemes"]["m"] then + --self:SetSubMaterial(k-1,Metrostroi.Skins["717_schemes"][""]) + else + if not self.Adverts or self.Adverts ~= 4 then + --self:SetSubMaterial(k-1,Metrostroi.Skins["717_schemes"]["m"].adv) + else + --self:SetSubMaterial(k-1,Metrostroi.Skins["717_schemes"]["m"].clean) + end + end + end + local tex = string.Explode("/",v) + tex = tex[#tex] + if cabintexture and cabintexture.textures[tex] then + self:SetSubMaterial(k-1,cabintexture.textures[tex]) + end + if passtexture and passtexture.textures[tex] then + self:SetSubMaterial(k-1,passtexture.textures[tex]) + end + if texture and texture.textures[tex] then + self:SetSubMaterial(k-1,texture.textures[tex]) + end + end + self:SetNW2String("texture",self.Texture) + self:SetNW2String("passtexture",self.PassTexture) + self:SetNW2String("cabtexture",self.CabTexture) +end + +-------------------------------------------------------------------------------- +function ENT:Think() + if self.ARSType then self.ARSType = nil end + self.TextureTime = self.TextureTime or CurTime() + if (CurTime() - self.TextureTime) > 1.0 then + --print(1) + self.TextureTime = CurTime() + if self.Texture then + for k,v in pairs(self:GetMaterials()) do + if v:find("ewagon") then + self:SetSubMaterial(k-1,self.Texture) + else + self:SetSubMaterial(k-1,"") + end + end + self:SetNW2String("texture",self.Texture) + end + end + self.RetVal = self.BaseClass.Think(self) + + -- Check if wrench was pulled out + if self.DriversWrenchPresent then + self.KV:TriggerInput("Enabled",self:IsWrenchPresent() and 1 or 0) + end + self:SetLightPower(1, self.Panel["HeadLights3"] > 0.5,(math.min(1,self.Panel["HeadLights1"])*0.50 + + math.min(1,self.Panel["HeadLights2"])*0.25 + + math.min(1,self.Panel["HeadLights3"])*0.25) + ) + self:SetLightPower(2, self.Panel["HeadLights2"] > 0.5) + self:SetLightPower(3, self.Panel["HeadLights2"] > 0.5) + self:SetLightPower(4, self.Panel["HeadLights1"] > 0.5) + self:SetLightPower(5, self.Panel["HeadLights1"] > 0.5) + self:SetLightPower(6, self.Panel["HeadLights1"] > 0.5) + --self:SetLightPower(7, self.Panel["HeadLights2"] > 0.5) + -- Reverser lights + self:SetLightPower(8, self.Panel["RedLightRight"] > 0.5) + self:SetLightPower(9, self.Panel["RedLightLeft"] > 0.5) + + -- Interior/cabin lights + self:SetLightPower(10, self.Panel["CabinLight"] > 0.5) + + local lightsActive2 = self.PowerSupply.XT3_4 > 65.0 + local lightsActive1 = self.Panel["EmergencyLight"] > 0.5 or lightsActive2 + self:SetPackedBool("Lamps_emer",lightsActive1) + self:SetPackedBool("Lamps_full",lightsActive2) + --local I = math.Round((self.Electric.I24-150)/1000.0,1.5) + local Light + if self.Pneumatic.Compressor == 1 then + Light = (lightsActive2 and 0.6 or 0.3) + --[[ + if I > 0 then + Light = Light*(1-math.abs(I*0.1)) + end + ]] + self:SetLightPower(11, lightsActive1, Light) + self:SetLightPower(12, lightsActive1, Light) + self:SetLightPower(13, lightsActive1, Light) + else + Light = (lightsActive2 and 0.8 or 0.4) + --[[ + if I > 0 then + Light = Light*(1-math.abs(I*0.1)) + end + ]] + self:SetLightPower(11, lightsActive1, Light) + self:SetLightPower(12, lightsActive1, Light) + self:SetLightPower(13, lightsActive1, Light) + end + self:SetPackedRatio("LampsI",math.Round((self.Electric.I24-150)/1000.0,1.5)) + + --[[local lightsActive2 = self.PowerSupply.XT3_4 > 65.0 + local lightsActive1 = self.Panel["EmergencyLight"] > 0.5 + self:SetPackedBool("Lamps",lightsActive2) + local I = math.Round((self.Electric.I24-150)/1000.0,1.5) + if self.Pneumatic.Compressor == 1 then + local Light = 0.6 + if I > 0 then + Light = Light*(1-math.abs(I*0.1)) + end + self:SetLightPower(11, lightsActive2, Light) + self:SetLightPower(12, lightsActive2, Light) + self:SetLightPower(13, lightsActive2, Light) + else + local Light = 0.8 + if I > 0 then + Light = Light*(1-math.abs(I*0.1)) + end + self:SetLightPower(11, lightsActive2, Light) + self:SetLightPower(12, lightsActive2, Light) + self:SetLightPower(13, lightsActive2, Light) + end]] + --self:SetLightPower(12, lightsActive1,0.1 + ((self.PowerSupply.XT3_4 > 65.0) and 0.7 or 0)) + --self:SetLightPower(13, lightsActive2, 0.8) + --for i = 1,23 do + --self:SetLightPower(69+i,lightsActive2 and true or lightsActive1 and i%5==1 or false) + --end + --self:SetLightPower(12, self.Panel["EmergencyLight"] > 0.5) + --self:SetLightPower(13, self.PowerSupply.XT3_4 > 65.0) + + -- Side lights + self:SetLightPower(15, self.Panel["TrainDoors"] > 0.5) + --self:SetLightPower(19, self.Panel["TrainDoors"] > 0.5) + + self:SetLightPower(16, self.Panel["GreenRP"] > 0.5) + --self:SetLightPower(20, self.Panel["GreenRP"] > 0.5) + + self:SetLightPower(17, self.Panel["TrainBrakes"] > 0.5) + --self:SetLightPower(21, self.Panel["TrainBrakes"] > 0.5) + + self:SetLightPower(32,self.L_3.Value > 0.5) + self:SetLightPower(33,self.L_3.Value > 0.5) + self:SetLightPower(34,self.L_3.Value > 0.5) + self:SetLightPower(35,self.L_3.Value > 0.5) + self:SetLightPower(36,self.L_3.Value > 0.5) + self:SetLightPower(37,self.L_3.Value > 0.5) + -- Total temperature + local IGLA_Temperature = math.max(self.Electric.T1,self.Electric.T2) + + -- Switch and button states + self:SetPackedBool(0,self:IsWrenchPresent()) + self:SetPackedBool(1,self.VUS.Value == 1.0) + self:SetPackedBool(2,self.VozvratRP.Value == 1.0) + self:SetPackedBool(3,self.DIPon.Value == 1.0) + self:SetPackedBool(4,self.DIPoff.Value == 1.0) + self:SetPackedBool(5,self.GV.Value == 1.0) + self:SetPackedBool(7,self.VB.Value == 1.0) + self:SetPackedBool(8,self.RezMK.Value == 1.0) + self:SetPackedBool(9,self.KU1.Value == 1.0) + self:SetPackedBool(10,self.VAH.Value == 1.0) + self:SetPackedBool(11,self.VAD.Value == 1.0) + self:SetPackedBool(12,self.VUD1.Value == 0.0) + self:SetPackedBool(13,self.VUD2.Value == 1.0) + self:SetPackedBool(14,self.VDL.Value == 1.0) + self:SetPackedBool(15,self.KDL.Value == 1.0) + self:SetPackedBool(16,self.KDP.Value == 1.0) + self:SetPackedBool(17,self.KRZD.Value == 1.0) + self:SetPackedBool(18,self.KSN.Value == 1.0) + self:SetPackedBool(19,self.OtklAVU.Value == 1.0) + self:SetPackedBool(20,self.Pneumatic.Compressor == 1.0) + self:SetPackedBool(21,self.Pneumatic.LeftDoorState[1] > 0.5) + self:SetPackedBool(22,self.Pneumatic.ValveType == 2) + --self:SetPackedBool(22,self.Pneumatic.LeftDoorState[2] > 0.5) + --self:SetPackedBool(23,self.Pneumatic.LeftDoorState[3] > 0.5) + --self:SetPackedBool(24,self.Pneumatic.LeftDoorState[4] > 0.5) + self:SetPackedBool(24,self.DURA.Power) + self:SetPackedBool(25,self.Pneumatic.RightDoorState[1] > 0.5) + --self:SetPackedBool(26,self.Pneumatic.RightDoorState[2] > 0.5) + --self:SetPackedBool(27,self.Pneumatic.RightDoorState[3] > 0.5) + self:SetPackedBool(27,self.KVWrenchMode == 2) + --self:SetPackedBool(28,self.Pneumatic.RightDoorState[4] > 0.5) + self:SetPackedBool(28,self.KVT.Value == 1.0) + --self:SetPackedBool(156,self.KB.Value == 1.0) + self:SetPackedBool(29,self.DURA.SelectAlternate == false) + self:SetPackedBool(30,self.DURA.SelectAlternate == true) + self:SetPackedBool(31,self.DURA.Channel == 2) + self:SetPackedBool(56,self.ARS.Value == 1.0) + self:SetPackedBool(57,self.ALS.Value == 1.0) + self:SetPackedBool(58,self.Panel["CabinLight"] > 0.5) + self:SetPackedBool(112,(self.RheostatController.Velocity ~= 0.0)) + self:SetPackedBool(114,self.Custom1.Value == 1.0) + self:SetPackedBool(115,self.Custom2.Value == 1.0) + self:SetPackedBool(116,self.Custom3.Value == 1.0) + self:SetPackedBool(124,self.CustomC.Value == 1.0) + --[[self:SetPackedBool(117,self.Custom4.Value == 1.0) + self:SetPackedBool(118,self.Custom5.Value == 1.0) + self:SetPackedBool(119,self.Custom6.Value == 1.0) + self:SetPackedBool(120,self.Custom7.Value == 1.0) + self:SetPackedBool(121,self.Custom8.Value == 1.0) + self:SetPackedBool(122,self.CustomA.Value == 1.0) + self:SetPackedBool(124,self.CustomC.Value == 1.0)]]-- +-- self:SetLightPower(35,self.CustomD.Value == 1.0) +-- self:SetLightPower(36,self.CustomE.Value == 1.0) +-- self:SetLightPower(37,self.CustomF.Value == 1.0) +-- self:SetLightPower(38,self.CustomG.Value == 1.0) + self:SetPackedBool(125,self.R_G.Value == 1.0) + self:SetPackedBool(126,self.R_Radio.Value == 1.0) + self:SetPackedBool(127,self.R_UNch.Value == 1.0) + self:SetPackedBool(128,self.R_Program1.Value == 1.0) + self:SetPackedBool(129,self.R_Program2.Value == 1.0) + self:SetPackedBool(130,self.RC1.Value == 1.0) + self:SetPackedBool(132,self.ManualBrake <= 0.001) + self:SetPackedBool(133,self.ManualBrake >= 0.999) + self:SetPackedBool(134,self.UOS.Value == 1.0) + self:SetPackedBool(135,self.BPS.Value == 1.0) + self:SetPackedBool(152,self.UAVA.Value == 1.0) + self:SetPackedBool(153,self.DURA.Channel1Alternate) + self:SetPackedBool(154,self.DURA.Channel2Alternate) + self:SetPackedBool(156,self.RearDoor) + self:SetPackedBool(157,self.FrontDoor) + self:SetPackedBool(158,self.PassengerDoor) + self:SetPackedBool(159,self.CabinDoor) + self:SetPackedBool("DriverValveBLDisconnect",self.DriverValveBLDisconnect.Value == 1.0) + self:SetPackedBool("DriverValveTLDisconnect",self.DriverValveTLDisconnect.Value == 1.0) + self:SetPackedBool("EPK",self.EPK.Value == 1.0) + + -- Signal if doors are open or no to platform simulation + self.LeftDoorsOpen = + (self.Pneumatic.LeftDoorState[1] > 0.5) or + (self.Pneumatic.LeftDoorState[2] > 0.5) or + (self.Pneumatic.LeftDoorState[3] > 0.5) or + (self.Pneumatic.LeftDoorState[4] > 0.5) + self.RightDoorsOpen = + (self.Pneumatic.RightDoorState[1] > 0.5) or + (self.Pneumatic.RightDoorState[2] > 0.5) or + (self.Pneumatic.RightDoorState[3] > 0.5) or + (self.Pneumatic.RightDoorState[4] > 0.5) + self:WriteTrainWire(35,(self.Pneumatic.BrakeCylinderPressure > 0.1) and 1 or 0) + + -- DIP/power + self:SetPackedBool(32,self.Panel["V1"] > 0.5) + -- LxRK + self:SetPackedBool(33,false)--self.RheostatController.MotorCoilState ~= 0.0) + -- NR1 + self:SetPackedBool(34,(self.NR.Value == 1.0) or (self.RPU.Value == 1.0)) + -- Red RP + local TW18 = self:GetTrainWire18() + if self:ReadTrainWire(20) == 0 or (self.Panel["V1"] < 0.5) then TW18 = 0 end--(self.KV.ControllerPositionAutodrive == 0 and self.KV.ControllerPosition == 0) + self:SetPackedBool(35,TW18 > 0.5) + self:SetPackedBool(131,TW18 > 0) + -- Green RP + self:SetPackedBool(36,self.Panel["GreenRP"] > 0.5) + -- Cabin heating + self:SetPackedBool(37,self.Panel["KUP"] > 0.5) + -- AVU + self:SetPackedBool(38,self.Panel["AVU"] > 0.5) + -- Ring + self:SetPackedBool(39,self.Panel["Ring"] > 0.5) + -- SD + self:SetPackedBool(40,self.Panel["SD"] > 0.5) + -- OCh + self:SetPackedBool(41,self.ALS_ARS.NoFreq) + -- 0 + self:SetPackedBool(42,self.ALS_ARS.Signal0) + -- 40 + self:SetPackedBool(43,self.ALS_ARS.Signal40) + -- 60 + self:SetPackedBool(44,self.ALS_ARS.Signal60) + -- 75 + self:SetPackedBool(45,self.ALS_ARS.Signal70) + -- 80 + self:SetPackedBool(46,self.ALS_ARS.Signal80) + -- KT + self:SetPackedBool(47,self.ALS_ARS.LKT) + -- KVD + self:SetPackedBool(48,self.ALS_ARS.LVD) + -- LST + self:SetPackedBool(49,self:ReadTrainWire(6) > 0.5) + -- LVD + self:SetPackedBool(50,self:ReadTrainWire(1) > 0.5) + + self:SetPackedBool(165,self.PB.Value > 0) + + -- AV states + -- for i,v in ipairs(self.Panel.AVMap) do + -- if tonumber(v) + -- then self:SetPackedBool(64+(i-1),self["A"..v].Value == 1.0) + -- elseif self[v] then self:SetPackedBool(64+(i-1),self[v].Value == 1.0) + -- end + -- end + + self:SetPackedBool(62,self.L_3.Value > 0.5) + self:SetPackedBool(64+19,self.VU1.Value > 0.5) + self:SetPackedBool(64+12,self.VU.Value > 0.5) + self:SetPackedBool(64+24,self.RST.Value > 0.5) + self:SetPackedBool(64+7 ,self.AV8B.Value > 0.5) + self:SetPackedBool(64+36,self.VU2.Value > 0.5) + self:SetPackedBool(64+13,self.VU3.Value > 0.5) + self:SetPackedBool("VPR",self.RST.Value == 1.0 and self.Panel["V1"]) + -- Feed packed floats + self:SetPackedRatio(0, 1-self.Pneumatic.DriverValvePosition/7) + self:SetPackedRatio(1, (self.KV.ControllerPosition+3)/7) + self:SetPackedRatio(2, 1-(self.KV.ReverserPosition+1)/2) + if self.Pneumatic.ValveType == 1 then + self:SetPackedRatio(4, self.Pneumatic.ReservoirPressure/12.0) + else + self:SetPackedRatio(4, self.Pneumatic.BrakeLinePressure/12.0) + end + self:SetPackedRatio(5, self.Pneumatic.TrainLinePressure/12.0) + self:SetPackedRatio(6, math.min(2.7,self.Pneumatic.BrakeCylinderPressure + 4.0*self.ManualBrake)/6.0) + self:SetPackedRatio(7, self.Electric.Power750V/1000.0) + self:SetPackedRatio(8, math.abs(self.Electric.I24)/1000.0) + --self:SetPackedRatio(9, self.Pneumatic.BrakeLinePressure_dPdT or 0) + if self.Pneumatic.TrainLineOpen then + self:SetPackedRatio(9, (-self.Pneumatic.TrainLinePressure_dPdT or 0)*6) + else + self:SetPackedRatio(9, self.Pneumatic.BrakeLinePressure_dPdT or 0) + end + self:SetPackedRatio(10,(self.Panel["V1"] * self.Battery.Voltage) / 100.0) + self:SetPackedRatio(11,IGLA_Temperature) + + -- Update ARS system + self:SetPackedRatio(3, self.ALS_ARS.Speed/100.0) + self:SetPackedRatio("Speed", self.Speed/120) + if (self.ALS_ARS.Ring == true) then + self:SetPackedBool(39,true) + end + + -- RUT test + local weightRatio = math.max(0,math.min(1,(self:GetNW2Float("PassengerCount")/300))) + if math.abs(self:GetAngles().pitch) > 2.5 then weightRatio = weightRatio + 1.00 end + self.YAR_13A:TriggerInput("WeightLoadRatio",math.max(0,math.min(1.00,weightRatio))) + + -- 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 = 30300+25000*(A < 0 and 1 or 0) + self.FrontBogey.Reversed = (self.RKR.Value > 0.5) + self.RearBogey.MotorForce = 30300+25000*(A < 0 and 1 or 0) + self.RearBogey.Reversed = (self.RKR.Value < 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 + self.FrontBogey.PneumaticBrakeForce = 50000.0 + self.FrontBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + 7.0*self.ManualBrake + self.FrontBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + self.FrontBogey.ParkingBrake = false + self.RearBogey.PneumaticBrakeForce = 50000.0 + self.RearBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + 7.0*self.ManualBrake + self.RearBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + --self.RearBogey.ParkingBrake = self.ManualBrake.Value > 0.5 + end + + -- Generate bogey sounds + local jerk = math.abs((self.Acceleration - (self.PrevAcceleration or 0)) / self.DeltaTime) + self.PrevAcceleration = self.Acceleration + + if jerk > (2.0 + self.Speed/15.0) then + self.PrevTriggerTime1 = self.PrevTriggerTime1 or CurTime() + self.PrevTriggerTime2 = self.PrevTriggerTime2 or CurTime() + + if ((math.random() > 0.00) or (jerk > 10)) and (CurTime() - self.PrevTriggerTime1 > 1.5) then + self.PrevTriggerTime1 = CurTime() + self.FrontBogey:EmitSound("subway_trains/chassis_"..math.random(1,3)..".wav", 70, math.random(90,110)) + end + if ((math.random() > 0.00) or (jerk > 10)) and (CurTime() - self.PrevTriggerTime2 > 1.5) then + self.PrevTriggerTime2 = CurTime() + self.RearBogey:EmitSound("subway_trains/chassis_"..math.random(1,3)..".wav", 70, math.random(90,110)) + end + end + + -- Temporary hacks + --self:SetNW2Float("V",self.Speed) + --self:SetNW2Float("A",self.Acceleration) + + return self.RetVal +end + +-------------------------------------------------------------------------------- +function ENT:OnButtonPress(button,ply) + -- Parking brake + if button == "ParkingBrakeLeft" then + self.ManualBrake = math.max(0.0,(self.ManualBrake or 0) - 0.008) + if self.ManualBrake == 0.0 then return end + --print(self.ManualBrake) + end + if button == "ParkingBrakeRight" then + self.ManualBrake = math.min(1.0,(self.ManualBrake or 0) + 0.008) + if self.ManualBrake == 1.0 then return end + --print(self.ManualBrake) + end + if string.find(button,"PneumaticBrakeSet") then + self.Pneumatic:TriggerInput("BrakeSet",tonumber(button:sub(-1,-1))) + return + end + if button:find("FrontDoor") then + self.FrontDoor = not self.FrontDoor + if self.FrontDoor then self:PlayOnce("door_open_tor","cabin") else self:PlayOnce("door_close_tor","cabin") end + end + if button:find("RearDoor") then + self.RearDoor = not self.RearDoor + if self.RearDoor then self:PlayOnce("door_open_tor") else self:PlayOnce("door_close_tor") end + end + if button:find("PassengerDoor") then + self.PassengerDoor = not self.PassengerDoor + if self.PassengerDoor then self:PlayOnce("door_open_tor","cabin") else self:PlayOnce("door_close_tor","cabin") end + end + if button:find("CabinDoor") then + self.CabinDoor = not self.CabinDoor + if self.CabinDoor then self:PlayOnce("door_open_tor","cabin") else self:PlayOnce("door_close_tor","cabin") end + end + if button == "VAHToggle" then + local state = self.VAH.TargetValue < 0.5 and "enabled" or "disabled" + RunConsoleCommand("say",ply:GetName().." "..state.." VAH!") + end + if button == "OtklAVUToggle" then + local state = self.OtklAVU.TargetValue < 0.5 and "enabled" or "disabled" + RunConsoleCommand("say",ply:GetName().." "..state.." OtklAVU!") + end + if button == "VADToggle" then + local state = self.VAD.TargetValue < 0.5 and "enabled" or "disabled" + RunConsoleCommand("say",ply:GetName().." "..state.." VAD!") + end + if button == "RC1Toggle" then + local state = self.RC1.TargetValue < 0.5 and "enabled" or "disabled" + RunConsoleCommand("say",ply:GetName().." "..state.." RC1!") + end + if button == "UOSToggle" then + local state = self.UOS.TargetValue < 0.5 and "enabled" or "disabled" + RunConsoleCommand("say",ply:GetName().." "..state.." UOS!") + end + if button == "UAVAToggle" then + local state = self.UAVA.TargetValue < 0.5 and "enabled" or "disabled" + RunConsoleCommand("say",ply:GetName().." "..state.." UAVA!") + end + if button == "BPSToggle" then + local state = self.BPS.TargetValue < 0.5 and "enabled" or "disabled" + RunConsoleCommand("say",ply:GetName().." "..state.." BPS!") + end + if button == "NextSign" then + self:PrepareSigns() + self.SignsIndex = self.SignsIndex + 1 + if self.SignsIndex > #self.SignsList then self.SignsIndex = 1 end + + self:SetNW2String("FrontText",self.SignsList[self.SignsIndex][2]) + end + if button == "PrevSign" then + self:PrepareSigns() + self.SignsIndex = self.SignsIndex - 1 + if self.SignsIndex < 1 then self.SignsIndex = #self.SignsList end + + self:SetNW2String("FrontText",self.SignsList[self.SignsIndex][2]) + end + + if button == "Num1P" then + if not self.RouteNumber then self.RouteNumber = "00" end + local num = tonumber(self.RouteNumber[2]) + num = num + 1 + if num > 9 then num = 0 end + self.RouteNumber = string.SetChar(self.RouteNumber,2, num) + self:SetNW2String("RouteNumber",self.RouteNumber) + local trn = self.WagonList[#self.WagonList] + if IsValid(trn) and trn ~= self then + trn.RouteNumber = self.RouteNumber + trn:SetNW2String("RouteNumber",self.RouteNumber) + end + end + if button == "Num1M" then + if not self.RouteNumber then self.RouteNumber = "00" end + local num = tonumber(self.RouteNumber[2]) + num = num - 1 + if num < 0 then num = 9 end + self.RouteNumber = string.SetChar(self.RouteNumber,2, num) + self:SetNW2String("RouteNumber",self.RouteNumber) + local trn = self.WagonList[#self.WagonList] + if IsValid(trn) and trn ~= self then + trn.RouteNumber = self.RouteNumber + trn:SetNW2String("RouteNumber",self.RouteNumber) + end + end + if button == "Num2P" then + if not self.RouteNumber then self.RouteNumber = "00" end + local num = tonumber(self.RouteNumber[1]) + num = num + 1 + if num > 9 then num = 0 end + self.RouteNumber = string.SetChar(self.RouteNumber,1, num) + self:SetNW2String("RouteNumber",self.RouteNumber) + local trn = self.WagonList[#self.WagonList] + if IsValid(trn) and trn ~= self then + trn.RouteNumber = self.RouteNumber + trn:SetNW2String("RouteNumber",self.RouteNumber) + end + end + if button == "Num2M" then + if not self.RouteNumber then self.RouteNumber = "00" end + local num = tonumber(self.RouteNumber[1]) + num = num - 1 + if num < 0 then num = 9 end + self.RouteNumber = string.SetChar(self.RouteNumber,1, num) + self:SetNW2String("RouteNumber",self.RouteNumber) + local trn = self.WagonList[#self.WagonList] + if IsValid(trn) and trn ~= self then + trn.RouteNumber = self.RouteNumber + trn:SetNW2String("RouteNumber",self.RouteNumber) + end + 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 + --print(self.ManualBrake) + end + if button == "ManualBrakeRight" then + self.ManualBrake = math.min(1.0,self.ManualBrake + 0.008) + if self.ManualBrake == 1.0 then return end + --print(self.ManualBrake) + 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 == 2) and (button == "KVReverserUp") then + self.KRU:TriggerInput("Up",1) + self:OnButtonPress("KRUUp") + end + if (self.KVWrenchMode == 2) and (button == "KVReverserDown") then + self.KRU:TriggerInput("Down",1) + self:OnButtonPress("KRUDown") + end + if (self.KVWrenchMode == 2) and (button == "KVSetX1") then + self.KRU:TriggerInput("SetX1",1) + self:OnButtonPress("KRUSetX1") + end + if (self.KVWrenchMode == 2) and (button == "KVSetX2") then + self.KRU:TriggerInput("SetX2",1) + self:OnButtonPress("KRUSetX2") + end + if (self.KVWrenchMode == 2) and (button == "KVSetX3") then + self.KRU:TriggerInput("SetX3",1) + self:OnButtonPress("KRUSetX3") + end + if (self.KVWrenchMode == 2) and (button == "KVSet0") then + self.KRU:TriggerInput("Set0",1) + self:OnButtonPress("KRUSet0") + end + + if button == "KVSetT1AB" then + if self.KV.ControllerPosition == -2 then + self.KV:TriggerInput("ControllerSet",-1) + timer.Simple(0.20,function() + self.KV:TriggerInput("ControllerSet",-2) + end) + else + self.KV:TriggerInput("ControllerSet",-2) + end + end + if button == "KVWrench0" then + if self.KVWrenchMode == 3 or self.KVWrenchMode == 1 then + if self.KVWrenchMode ~= 1 then + self:PlayOnce("revers_in","cabin",0.7) + end + self.KVWrenchMode = 0 + self.DriversWrenchPresent = false + self.DriversWrenchMissing = false + self.KV:TriggerInput("Enabled",1) + self.KRU:TriggerInput("Enabled",0) + end + end + if button == "KVWrenchKV" then + if self.KVWrenchMode == 3 or self.KVWrenchMode == 0 then + if self.KVWrenchMode ~= 0 then + self:PlayOnce("revers_in","cabin",0.7) + end + self.KVWrenchMode = 1 + self.DriversWrenchPresent = true + self.DriversWrenchMissing = false + self.KV:TriggerInput("Enabled",1) + self.KRU:TriggerInput("Enabled",0) + end + end + --THERE IS NO KRU IN THIS EZH MODEL + --[[ + if button == "KVWrenchKRU" then + if self.KVWrenchMode == 3 then + self:PlayOnce("kru_in","cabin",0.7) + self.KVWrenchMode = 2 + self.DriversWrenchPresent = false + self.DriversWrenchMissing = true + self.KV:TriggerInput("Enabled",0) + self.KRU:TriggerInput("Enabled",1) + self.KRU:TriggerInput("LockX3",1) + end + end]] + if button == "KVWrenchNone" then + if self.KVWrenchMode ~= 3 and self.KV.ReverserPosition == 0 then + if self.KVWrenchMode == 2 then + self:PlayOnce("kru_out","cabin",0.7) + else + self:PlayOnce("revers_out","cabin",0.7) + end + self.KVWrenchMode = 3 + self.DriversWrenchPresent = false + self.DriversWrenchMissing = true + self.KV:TriggerInput("Enabled",0) + self.KRU:TriggerInput("Enabled",0) + end + end + --if button == "KVT2Set" then self.KVT:TriggerInput("Close",1) end + if button == "KDL" and self.VUD1.Value < 1 then self.KDL:TriggerInput("Close",1) self:OnButtonPress("KDLSet") end + if button == "KDP" and self.VUD1.Value < 1 then self.KDP:TriggerInput("Close",1) self:OnButtonPress("KDPSet") end + if button == "VDL" and self.VUD1.Value < 1 then self.VDL:TriggerInput("Close",1) self:OnButtonPress("VDLSet") end + if button == "KRP" then + self.KRP:TriggerInput("Set",1) + self:OnButtonPress("KRPSet") + end + if button == "EmergencyBrake" then + self.KV:TriggerInput("ControllerSet",-3) + self.Pneumatic:TriggerInput("BrakeSet",7) + self.DriverValveDisconnect:TriggerInput("Set",1) + return + end + -- Special logic + if (button == "VDL") or (button == "KDL") or (button == "KDP") then + --self.VUD1:TriggerInput("Open",1) + end + if (button == "KDP") then + --self.DoorSelect:TriggerInput("Close",1) + end + if (button == "VUD1Set") or (button == "VUD1Toggle") or + (button == "VUD2Set") or (button == "VUD2Toggle") then + self.VDL:TriggerInput("Open",1) + self.KDL:TriggerInput("Open",1) + self.KDP:TriggerInput("Open",1) + end + + if button == "GVToggle" then + if self.GV.Value > 0.5 then + self:PlayOnce("revers_f",nil,0.7) + else + self:PlayOnce("revers_b",nil,0.7) + end + return + end + + + if (button == "UAVAToggle") then + if self.UAVA then + if self.UAVA.Value > 0.5 then + self:PlayOnce("uava_off","cabin") + else + self:PlayOnce("uava_off","cabin") + end + end + 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.DriverValveBLDisconnect:TriggerInput("Set",0) + self.DriverValveTLDisconnect:TriggerInput("Set",0) + end + if self.DriverValveBLDisconnect.Value == 1.0 then + if self.EPK.Value == 1 then self:PlayOnce("epv_off","cabin",0.9) end + else + if self.EPK.Value == 1 then self:PlayOnce("epv_on","cabin",0.9) end + end + return + end + + if button == "DriverValveBLDisconnectToggle" then + if self.DriverValveBLDisconnect.Value == 1.0 then + if self.EPK.Value == 1 then self:PlayOnce("epv_off","cabin",0.9) end + else + if self.EPK.Value == 1 then self:PlayOnce("epv_on","cabin",0.9) end + end + return + end + if button == "EPKToggle" and self.DriverValveBLDisconnect.Value == 1.0 then + if self.EPK.Value == 0.0 then + self:PlayOnce("epv_off","cabin",0.9) + else + self:PlayOnce("epv_on","cabin",0.9) + end + return + end +end + +function ENT:OnButtonRelease(button) + if string.find(button,"PneumaticBrakeSet") then + return + end + --if button == "KVT2Set" then self.KVT:TriggerInput("Open",1) end + if button == "KDL" and self.VUD1.Value < 1 then self.KDL:TriggerInput("Open",1) self:OnButtonRelease("KDLSet") end + if button == "KDP" and self.VUD1.Value < 1 then self.KDP:TriggerInput("Open",1) self:OnButtonRelease("KDPSet") end + if button == "VDL" and self.VUD1.Value < 1 then self.VDL:TriggerInput("Open",1) self:OnButtonRelease("VDLSet") end + if button == "KRP" then + self.KRP:TriggerInput("Set",0) + self:OnButtonRelease("KRPSet") + end + + --[[ + if (button == "PneumaticBrakeDown") and (self.Pneumatic.DriverValvePosition == 1) then + self.Pneumatic:TriggerInput("BrakeSet",2) + end + if self.Pneumatic.ValveType == 1 then + if (button == "PneumaticBrakeUp") and (self.Pneumatic.DriverValvePosition == 5) then + self.Pneumatic:TriggerInput("BrakeSet",4) + end + end + ]] + + if (not string.find(button,"KVT")) and string.find(button,"KV") then return end + if string.find(button,"KRU") then return 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 diff --git a/lua/entities/_obsolete/gmod_subway_e/shared.lua b/lua/entities/_obsolete/gmod_subway_e/shared.lua new file mode 100644 index 0000000..8aa1065 --- /dev/null +++ b/lua/entities/_obsolete/gmod_subway_e/shared.lua @@ -0,0 +1,86 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.PrintNameTranslated = "81-703" +ENT.Author = "Oldy" +ENT.Contact = "oldy702@gmail.com" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" + +ENT.Spawnable = false --NOT FINISHED +ENT.AdminSpawnable = false --NOT FINISHED + +function ENT:PassengerCapacity() + return 300 +end + +function ENT:GetStandingArea() + return Vector(-450,-30,-45),Vector(380,30,-45) +end + +function ENT:InitializeSounds() + self.BaseClass.InitializeSounds(self) + self.SoundNames["relay_close2"] = nil + self.SoundNames["rvt_close"] = nil + self.SoundNames["r1_5_close"] = nil + self.SoundNames["rvt_open"] = nil + self.SoundNames["r1_5_open"] = nil + --[[self.SoundNames["relay_close4"] = {"subway_trains/new/relay_7.wav","subway_trains/new/lsd_4.wav"} + self.SoundNames["pneumo_switch"] = { + "subway_trains/pneumo_8.wav", + "subway_trains/pneumo_9.wav", + }]] +end + +function ENT:InitializeSystems() + -- ЭлектроÑиÑтема 81-710 + self:LoadSystem("Electric","81_701_Electric") + + -- Токоприёмник + self:LoadSystem("TR","TR_3B") + -- ЭлектротÑговые двигатели + self:LoadSystem("Engines","DK_117DM") + + -- РезиÑторы Ð´Ð»Ñ Ñ€ÐµÐ¾Ñтата/пуÑковых Ñопротивлений + self:LoadSystem("KF_47A","KF_47A") + -- РезиÑторы Ð´Ð»Ñ Ð¾ÑÐ»Ð°Ð±Ð»ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð±ÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ + self:LoadSystem("KF_50A") + -- Ящик Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñ…Ñ€Ð°Ð½Ð¸Ñ‚ÐµÐ»Ñми + self:LoadSystem("YAP_57") + + -- РезиÑторы Ð´Ð»Ñ Ñ†ÐµÐ¿ÐµÐ¹ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + --self:LoadSystem("YAS_44V") + -- РеоÑтатный контроллер Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑƒÑковыми ÑÐ¾Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð»ÐµÐ½Ð¸Ñ + self:LoadSystem("RheostatController","EKG_17B") + -- Групповой переключатель положений + self:LoadSystem("PositionSwitch","EKG_18B") + -- Кулачковый контроллер + self:LoadSystem("KV","KV_70") + -- Контроллер резервного ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + self:LoadSystem("KRU") + + + -- Ящики Ñ Ñ€ÐµÐ»Ðµ и контакторами + self:LoadSystem("LK_755A") + self:LoadSystem("YAR_13A") + --self:LoadSystem("YAR_27") + self:LoadSystem("YAK_36") + self:LoadSystem("YAK_37E") + self:LoadSystem("YAS_44V") + self:LoadSystem("YARD_2") + self:LoadSystem("PR_14X_Panels") + + -- ПневмоÑиÑтема 81-710 + self:LoadSystem("Pneumatic","81_717_Pneumatic") + -- Панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð• + self:LoadSystem("Panel","81_701_Panel") + -- Everything else + self:LoadSystem("Battery") + self:LoadSystem("PowerSupply","DIP_01K") + self:LoadSystem("DURA") + self:LoadSystem("ALS_ARS") + self:LoadSystem("Horn") + self:LoadSystem("Announcer") + --self:LoadSystem("RRI") +end diff --git a/lua/entities/_obsolete/gmod_subway_em/cl_init.lua b/lua/entities/_obsolete/gmod_subway_em/cl_init.lua new file mode 100644 index 0000000..ab4b2a9 --- /dev/null +++ b/lua/entities/_obsolete/gmod_subway_em/cl_init.lua @@ -0,0 +1,995 @@ +include("shared.lua") + + +-------------------------------------------------------------------------------- +ENT.ClientProps = {} +ENT.ButtonMap = {} + +-- Main panel +ENT.ButtonMap["Main"] = { + pos = Vector(460.968903,-32.25375,0.064331), + ang = Angle(0,-90,90-27), + width = 315, + height = 240, + scale = 0.0588, + + buttons = { + {ID = "DIPonSet", x=35 + 48.3*0, y=96, radius=20, tooltip="КУ4:Включение ДИП и оÑвещениÑ\nTurn DIP and interior lights on"}, + {ID = "DIPoffSet", x=35 + 48.3*1, y=96, radius=20, tooltip="КУ5:Отключение ДИП и оÑвещениÑ\nTurn DIP and interior lights off"}, + {ID = "VozvratRPSet", x=35 + 48.3*2, y=96, radius=20, tooltip="КУ9:Возврат РП\nReset overload relay"}, + {ID = "KSNSet", x=35 + 48.3*3, y=96, radius=20, tooltip="КУ8:Принудительное Ñрабатывание РП на неиÑправном вагоне (ÑÐ¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½ÐµÐ¸ÑправноÑти)\nKSN: Failure indication button"}, + {ID = "KDPSet", x=35 + 48.3*5, y=96, radius=20, tooltip="КДП:Правые двери\nKDP: Right doors open"}, + ----Down Panel + {ID = "KU1Toggle", x=16,y=129,w=45,h=90, tooltip="КУ1:Включение мотор-компреÑÑора\nTurn motor-compressor on"}, + {ID = "VUD1Toggle", x=248,y=129,w=45,h=90, tooltip="КУ2: Закрытие дверей\nVUD: Door control toggle (close doors)"}, + ----Lamps + --{ID = "Lamp1", x=42, y=30, radius=20, tooltip="ЛВД: Лампа Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹\nLVD: Engines engaged"}, + --{ID = "Lamp6", x=86, y=30, radius=20, tooltip="ЛСТ: Лампа Ñигнализации торможениÑ\nLST: Brakes engaged"}, + --{ID = "Lamp2", x=134, y=30, radius=20, tooltip="КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° РК (Вращение РеоÑтатного контроллера)\nRK: Rheostat controller motion "}, + --{ID = "DoorsWag", x=134, y=30, radius=20, tooltip="СинÑÑ Ð»Ð°Ð¼Ð¿Ð° СД: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ вагона\nBlue door state light (doors on wagon are closed)"}, + {ID = "RedRP", x=177, y=30, radius=20, tooltip="КраÑÐ½Ð°Ñ Ð ÐŸ: КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки\nRP: Red overload relay (power circuits failed to assemble)"}, + {ID = "GreenRP", x=223, y=30, radius=20, tooltip="Ð—ÐµÐ»ÐµÐ½Ð°Ñ Ð ÐŸ: Ð—ÐµÐ»Ñ‘Ð½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки (Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿ÐµÑ€ÐµÐ³Ñ€ÑƒÐ·ÐºÐ¸)\nRP: Green overload relay (overload relay open on current train)"}, + {ID = "DoorsWag", x=265, y=30, radius=20, tooltip="Ð‘ÐµÐ»Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° СД: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ поезда\nWhite door state light (doors on train are closed)"}, + + {ID = "KDLSet", x=92, y=169, radius=20, tooltip="КУ12: Кнопка левых дверей\nKDL: Left doors open"}, + {ID = "KRZDSet", x=212, y=169, radius=20, tooltip="КУ10: Кнопка резервного Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹\nKRZD: Emergency door closing"}, + + } +} + +Metrostroi.ClientPropForButton("GreenRP",{ + panel = "Main", + button = "GreenRP", + model = "models/metrostroi_train/e/lampgreen.mdl", + z = 6, + ang = 90, + staylabel = true, +}) +Metrostroi.ClientPropForButton("RedRP",{ + panel = "Main", + button = "RedRP", + model = "models/metrostroi_train/e/lampred1.mdl", + z = 6, + ang = 90, + staylabel = true, +}) +Metrostroi.ClientPropForButton("DoorsWag",{ + panel = "Main", + button = "DoorsWag", + model = "models/metrostroi_train/e/lampblue.mdl", + z = 6, + ang = 90, + staylabel = true, +}) + + +Metrostroi.ClientPropForButton("DIPon",{ + panel = "Main", + button = "DIPonSet", + model = "models/metrostroi_train/em/buttonred.mdl", + ang = 90, + z = 0, +}) +Metrostroi.ClientPropForButton("DIPoff",{ + panel = "Main", + button = "DIPoffSet", + model = "models/metrostroi_train/em/buttonblack.mdl", + ang = 90, + z = 0, +}) +Metrostroi.ClientPropForButton("VozvratRP",{ + panel = "Main", + button = "VozvratRPSet", + model = "models/metrostroi_train/em/buttonblack.mdl", + ang = 90, + z = 0, +}) + +Metrostroi.ClientPropForButton("KSN",{ + panel = "Main", + button = "KSNSet", + model = "models/metrostroi_train/em/buttonred.mdl", + ang = 90, + z = 0, +}) +Metrostroi.ClientPropForButton("KDP",{ + panel = "Main", + button = "KDPSet", + model = "models/metrostroi_train/em/buttonred.mdl", + ang = 90, + z = 0, +}) + +Metrostroi.ClientPropForButton("KDL",{ + panel = "Main", + button = "KDLSet", + model = "models/metrostroi_train/em/buttonred.mdl", + ang = 90, + z = 0, +}) +Metrostroi.ClientPropForButton("KRZD",{ + panel = "Main", + button = "KRZDSet", + model = "models/metrostroi_train/em/buttonblack.mdl", + ang = 90, + z = 0, +}) + +Metrostroi.ClientPropForButton("VUD",{ + panel = "Main", + button = "VUD1Toggle", + model = "models/metrostroi_train/switches/vudwhite.mdl", + z=-20, +}) +Metrostroi.ClientPropForButton("KU1",{ + panel = "Main", + button = "KU1Toggle", + model = "models/metrostroi_train/switches/vudbrown.mdl", + z=-20, +}) + +ENT.ButtonMap["RezMK"] = { + pos = Vector(469.0,-19.75,37), + ang = Angle(0,270,90), + width = 50, + height = 80, + scale = 0.0625, + + buttons = { + {ID = "RezMKSet", x=0, y=0, w=50, h=80, tooltip="КУ15:Резервное включение мотор-компреÑÑора\nRezMKSet"}, + } +} +Metrostroi.ClientPropForButton("RezMK",{ + panel = "RezMK", + button = "RezMKSet", + model = "models/metrostroi_train/switches/vudblack.mdl", +}) + +ENT.ButtonMap["AVMain"] = { + pos = Vector(408.06,40.8,56), + ang = Angle(0,90,90), + width = 335, + height = 380, + scale = 0.0625, + + buttons = { + {ID = "AV8BToggle", x=0, y=0, w=300, h=380, tooltip="ÐÐ’-8Б: ÐвтоматичеÑкй выключатель (Ð’Ñпомогательные цепи выÑокого напрÑжениÑ)\n"}, + } +} +Metrostroi.ClientPropForButton("AV8B",{ + panel = "AVMain", + button = "AV8BToggle", + model = "models/metrostroi_train/switches/automain.mdl", + z=43, +}) + +---AV1 Panel +ENT.ButtonMap["AV1"] = { + pos = Vector(408.06,41,30), + ang = Angle(0,90,90), + width = 290+0, + height = 155, + scale = 0.0625, + + buttons = { + {ID = "VU3Toggle", x=0, y=0, w=100, h=140, tooltip="ВУ3: ОÑвещение кабины\n"}, + {ID = "VU2Toggle", x=100, y=0, w=100, h=140, tooltip="ВУ2: Ðварийное оÑвещение 25Ð’\n"}, + {ID = "VU1Toggle", x=200, y=0, w=100, h=140, tooltip="ВУ1: Печь Ð¾Ñ‚Ð¾Ð¿Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹ ПТ-6\n"}, + } +} +for k,v in pairs(ENT.ButtonMap["AV1"].buttons) do + if not v.ID then continue end + Metrostroi.ClientPropForButton(v.ID:sub(0,-7),{ + panel = "AV1", + button = v.ID, + model = "models/metrostroi_train/switches/autobl.mdl", + z=10, + }) +end +-- Battery panel +ENT.ButtonMap["Battery"] = { + pos = Vector(408.98,20.24,30.5), + ang = Angle(0,90,90), + width = 250, + height = 136, + scale = 0.0625, + + buttons = { + {ID = "VBToggle", x=0, y=0, w=250, h=136, tooltip="ÐБ: Выключатель аккумулÑторной батареи (Ð’Ñпомогательные цепи низкого напрÑжениÑ)\nVB: Battery on/off"}, + } +} +Metrostroi.ClientPropForButton("VB",{ + panel = "Battery", + button = "VBToggle", + model = "models/metrostroi_train/switches/autobl2.mdl", + z=15, +}) + +--VU Panel +ENT.ButtonMap["VU"] = { + pos = Vector(469.5,-18.5,20), + ang = Angle(0,270,90), + width = 90, + height = 120, + scale = 0.0625, + + buttons = { + {ID = "VUToggle", x=0, y=0, w=90, h=120, tooltip="ВУ: Выключатель УправлениÑ\nVUToggle"}, + {ID = "VUPl", x=0, y=70, w=90, h=50, tooltip="Пломба ВУ\nVU plomb"}, + } +} +Metrostroi.ClientPropForButton("VU",{ + panel = "VU", + button = "VUToggle", + model = "models/metrostroi_train/switches/autobl.mdl", + z=20, +}) + +Metrostroi.ClientPropForButton("VUPl",{ + panel = "VU", + button = "VUToggle", + model = "models/metrostroi_train/switches/autoplombr.mdl", + z=19, + propname = false, + ang=0, +}) +--[[ +Metrostroi.ClientPropForButton("AVVB",{ + panel = "BatteryAV", + button = "AVVBToggle", + model = "models/metrostroi_train/switches/autobl2.mdl", + z=15, +}) +]] + +-- Parking brake panel +ENT.ButtonMap["ParkingBrake"] = { + pos = Vector(460,49.0,6.0), + ang = Angle(0,-82,90), + width = 400, + height = 400, + scale = 0.0625, + + buttons = { + {ID = "ParkingBrakeLeft",x=0, y=0, w=200, h=400, tooltip="Поворот колеÑа ручного тормоза"}, + {ID = "ParkingBrakeRight",x=200, y=0, w=200, h=400, tooltip="Поворот колеÑа ручного тормоза"}, + } +} + +-- Train driver helpers panel +ENT.ButtonMap["HelperPanel"] = { + pos = Vector(455.13,58.99,24.44), + ang = Angle(0,-17.5,90), + width = 60, + height = 188, + scale = 0.0625, + + buttons = { + {ID = "VDLSet", x=30, y=42, radius=30, tooltip="ВДЛ: Выключатель левых дверей\nVDL: Left doors open"}, + {ID = "VUD2LToggle", x=0, y=110, w=60,h=20, tooltip="Блокировка ВУД2\nVUD2 lock"}, + {ID = "VUD2Toggle", x=30, y=138, radius=30, tooltip="ВУД2: Выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÑŒÐ¼Ð¸\nVUD2: Door control toggle (close doors)"}, + } +} +Metrostroi.ClientPropForButton("VUD2",{ + panel = "HelperPanel", + button = "VUD2Toggle", + model = "models/metrostroi_train/switches/vudwhite.mdl", + z = 0, +}) +Metrostroi.ClientPropForButton("VUD2l",{ + panel = "HelperPanel", + button = "VUD2Toggle", + model = "models/metrostroi_train/switches/vudlock.mdl", + z = 0, +}) +Metrostroi.ClientPropForButton("VDL",{ + panel = "HelperPanel", + button = "VDLSet", + model = "models/metrostroi_train/switches/vudblack.mdl", + z = 0, +}) + +-- Pneumatic instrument panel 2 +ENT.ButtonMap["PneumaticManometer"] = { + pos = Vector(459.247131,-54.307846,16.197767), + ang = Angle(0,-90-51,90), + + width = 70, + height = 70, + scale = 0.0625, + + buttons = { + {x=35,y=35,radius=35,tooltip="Давление в магиÑтралÑÑ… (краÑнаÑ: тормозной, чёрнаÑ: напорной)\nPressure in pneumatic lines (red: brake line, black: train line)"}, + } +} +-- Pneumatic instrument panel +ENT.ButtonMap["PneumaticPanels"] = { + pos = Vector(463.281189,-53.228256,11.310288), + ang = Angle(0,-90-44,90), + + width = 70, + height = 70, + scale = 0.0625, + + buttons = { + {x=35,y=35,radius=35,tooltip="Тормозной манометр: Давление в тормозных цилиндрах (ТЦ)\nBrake cylinder pressure"}, + } +} +ENT.ButtonMap["DriverValveBLDisconnect"] = { + pos = Vector(453.57,-54.37,-27.61), + ang = Angle(-90,0,0), + width = 200, + height = 90, + scale = 0.0625, + + buttons = { + {ID = "DriverValveBLDisconnectToggle", x=0, y=0, w=200, h=90, tooltip="Кран двойной Ñ‚Ñги тормозной магиÑтрали\nTrain line disconnect valve"}, + } +} +ENT.ButtonMap["DriverValveTLDisconnect"] = { + pos = Vector(455.482483,-54,-15), + ang = Angle(90,180-11.79,0), + width = 200, + height = 90, + scale = 0.0625, + + buttons = { + {ID = "DriverValveTLDisconnectToggle", x=0, y=0, w=200, h=90, tooltip="Кран двойной Ñ‚Ñги напорной магиÑтрали\nBrake line disconnect valve"}, + } +} + + +ENT.ButtonMap["Meters"] = { + pos = Vector(461.65213,-56.696617,37.528275), + ang = Angle(0,-148,90), + width = 73, + height = 140, + scale = 0.0625, + + buttons = { + {x=13, y=22, w=60, h=50, tooltip="Вольтметр выÑокого напрÑÐ¶ÐµÐ½Ð¸Ñ (кВ)\nHV voltmeter (kV)"}, + {x=13, y=81, w=60, h=50, tooltip="Ðмперметр (Ð)\nTotal ampermeter (A)"}, + } +} +ENT.ButtonMap["Speedometer"] = { + pos = Vector(459.649109,-53.19582,26.624441), + ang = Angle(0,-149,97), + width = 110, + height = 110, + scale = 0.0625, + + buttons = { + {x=0, y=0, w=110, h=110, tooltip="СкороÑтемер"}, + } +} + + +--These values should be identical to those drawing the schedule +local col1w = 80 -- 1st Column width +local col2w = 32 -- The other column widths +local rowtall = 30 -- Row height, includes -only- the usable space and not any lines + +local rowamount = 16 -- How many rows to show (total) +--[[ENT.ButtonMap["Schedule"] = { + pos = Vector(442.1,-60.7,26), + ang = Angle(0,-110,90), + width = (col1w + 2 + (1 + col2w) * 3), + height = (rowtall+1)*rowamount+1, + scale = 0.0625/2, + + buttons = { + {x=1, y=1, w=col1w, h=rowtall, tooltip="М â„–\nRoute number"}, + {x=1, y=rowtall*2+3, w=col1w, h=rowtall, tooltip="П â„–\nPath number"}, + + {x=col1w+2, y=1, w=col2w*3+2, h=rowtall, tooltip="ВРЕМЯ ХОДÐ\nTotal schedule time"}, + {x=col1w+2, y=rowtall+2, w=col2w*3+2, h=rowtall, tooltip="ИÐТ\nTrain interval"}, + + {x=col1w+2, y=rowtall*2+3, w=col2w, h=rowtall, tooltip="ЧÐС\nHour"}, + {x=col1w+col2w+3, y=rowtall*2+3, w=col2w, h=rowtall, tooltip="МИÐ\nMinute"}, + {x=col1w+col2w*2+4, y=rowtall*2+3, w=col2w, h=rowtall, tooltip="СЕК\nSecond"}, + {x=col1w+2, y=rowtall*3+4, w=col2w*3+2, h=(rowtall+1)*(rowamount-3)-1, tooltip="Arrival times"}, -- NEEDS TRANSLATING + + {x=1, y=rowtall*3+4, w=col1w, h=(rowtall+1)*(rowamount-3)-1, tooltip="Station name"}, -- NEEDS TRANSLATING + } +}]] + +-- Temporary panels (possibly temporary) +ENT.ButtonMap["FrontPneumatic"] = { + pos = Vector(475,-45.0,-50.0), + ang = Angle(0,90,90), + width = 900, + height = 100, + scale = 0.1, + buttons = { + {ID = "FrontBrakeLineIsolationToggle",x=150, y=50, radius=32, tooltip="Концевой кран тормозной магиÑтрали"}, + {ID = "FrontTrainLineIsolationToggle",x=750, y=50, radius=32, tooltip="Концевой кран напорной магиÑтрали"}, + } +} +ENT.ButtonMap["RearPneumatic"] = { + pos = Vector(-475,45.0,-50.0), + ang = Angle(0,270,90), + width = 900, + height = 100, + scale = 0.1, + buttons = { + {ID = "RearTrainLineIsolationToggle",x=150, y=50, radius=32, tooltip="Концевой кран напорной магиÑтрали"}, + {ID = "RearBrakeLineIsolationToggle",x=750, y=50, radius=32, tooltip="Концевой кран тормозной магиÑтрали"}, + } +} +ENT.ButtonMap["GV"] = { + pos = Vector(139,66,-54), + ang = Angle(0,180,90), + width = 170, + height = 170, + scale = 0.1, + buttons = { + {ID = "GVToggle",x=0, y=0, w= 170,h = 150, 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, + }}, + } +} +ENT.ButtonMap["AirDistributor"] = { + pos = Vector(-168,68.6,-50), + ang = Angle(0,180,90), + width = 170, + height = 80, + scale = 0.1, + buttons = { + {ID = "AirDistributorDisconnectToggle",x=0, y=0, w= 170,h = 80, tooltip="Выключение воздухораÑпределителÑ"}, + } +} + + +-- UAVA +ENT.ButtonMap["UAVAPanel"] = { + pos = Vector(450,52,-20), + ang = Angle(0,-70,90), + width = 230, + height = 170, + scale = 0.0625, + + buttons = { + {ID = "UAVAToggle",x=230/2, y=0, w=230/2, h=170, tooltip="УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа\nUAVA: Universal Automatic Autostop Disabler"}, + {ID = "UAVAContactSet",x=0, y=0, w=230/2, h=170, tooltip="УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа (воÑÑтановление контактов)\nUAVA: Universal Automatic Autostop Disabler(contacts reset)"}, + } +} + + + +-- Wagon numbers +ENT.ButtonMap["TrainNumber1"] = { + pos = Vector(-440,-68,-11), + ang = Angle(0,0,90), + width = 130, + height = 55, + scale = 0.20, +} +ENT.ButtonMap["TrainNumber2"] = { + pos = Vector(416,68,-11), + ang = Angle(0,180,90), + width = 130, + height = 55, + scale = 0.20, +} + + +ENT.ButtonMap["FrontDoor"] = { + pos = Vector(472,16,43.4), + ang = Angle(0,-90,90), + width = 650, + height = 1780, + scale = 0.1/2, + buttons = { + {ID = "FrontDoor",x=0,y=0,w=650,h=1780, tooltip="ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ\nFront door"}, + } +} + +ENT.ButtonMap["CabinDoor"] = { + pos = Vector(420,64,43.4), + ang = Angle(0,0,90), + width = 642, + height = 1780, + scale = 0.1/2, + buttons = { + {ID = "CabinDoor1",x=0,y=0,w=642,h=1780, tooltip="Дверь в кабину машиниÑта\nCabin door"}, + } +} + +ENT.ButtonMap["PassengerDoor"] = { + pos = Vector(384,-16,43.4), + ang = Angle(0,90,90), + width = 642, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=642,h=1900, tooltip="Дверь из Ñалона\nPassenger door"}, + } +} + +-------------------------------------------------------------------------------- +ENT.ClientPropsInitialized = false +ENT.ClientProps["brake"] = { + model = "models/metrostroi_train/81/334cran.mdl", + pos = Vector(460.11,-53.7,3.7), + ang = Angle(0,34,0) +} +ENT.ClientProps["controller"] = { + model = "models/metrostroi_train/em/kv.mdl", + pos = Vector(461.65,-24.63,3.9), + ang = Angle(0,-32,0) +} +ENT.ClientProps["reverser"] = { + model = "models/metrostroi/81-717/reverser.mdl", + pos = Vector(461.65,-24.63,3.2), + ang = Angle(0,45,90) +} +ENT.ClientProps["brake_disconnect"] = { + model = "models/metrostroi/81-717/uava.mdl", + pos = Vector(452.9,-57.33,-25.61), + ang = Angle(0,-90,0), + color = Color(144,74,0), +} +ENT.ClientProps["train_disconnect"] = { + model = "models/metrostroi/81-717/uava.mdl", + pos = Vector(455.482483,-52.546734,-19.333017), + ang = Angle(0.000000,-101.794258,0.000000), + color = Color(0,212,255), +} + +ENT.ClientProps["parking_brake"] = { + model = "models/metrostroi/81-717/ezh_koleso.mdl", + pos = Vector(460.316742,37.144958,-6.000000), + ang = Angle(-90.000000,8.000000,0.000000), +} + +-------------------------------------------------------------------------------- +ENT.ClientProps["train_line"] = { + model = "models/metrostroi_train/e/small_pneumo_needle.mdl", + pos = Vector(457.722778,-56.060150,13.877457), + ang = Angle(314.669312,40.953403,-90.000000), +} +ENT.ClientProps["brake_line"] = { + model = "models/metrostroi_train/e/small_pneumo_needle.mdl", + pos = Vector(457.688568,-56.020660,13.877457), + ang = Angle(314.669312,40.953403,-90.000000), + color = Color(255,120,120), +} + +ENT.ClientProps["brake_cylinder"] = { + model = "models/metrostroi_train/e/small_pneumo_needle.mdl", + pos = Vector(462.104797,-55.268986,9.050000), + ang = Angle(313.335266,48.532555,-90.000000), +} +---------------------------------------------------------------- +ENT.ClientProps["voltmeter"] = { + model = "models/metrostroi_train/e/volt_needle.mdl", + pos = Vector(460.647858,-58.177208,35.553993), + ang = Angle(237.732468,23.827326,270.135559), +} + +ENT.ClientProps["ampermeter"] = { + model = "models/metrostroi_train/e/volt_needle.mdl", + pos = Vector(460.647858,-58.177208,32.055382), + ang = Angle(222.645691,23.000584,270.135559), +} + +-------------------------------------------------------------------------------- +ENT.ClientProps["gv"] = { + model = "models/metrostroi/81-717/gv.mdl", + pos = Vector(130,62.5,-65), + ang = Angle(-90,0,-90) +} +ENT.ClientProps["gv_wrench"] = { + model = "models/metrostroi/81-717/reverser.mdl", + pos = Vector(130,62.5,-65), + ang = Angle(0,0,0) +} + +ENT.ClientProps["Em_salon"] = { + model = "models/metrostroi_train/em/em_salon.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0) +} +ENT.ClientProps["Em_salon2"] = { + model = "models/metrostroi_train/em/em_salon2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0) +} +ENT.ClientProps["Lamps_emer"] = { + model = "models/metrostroi_train/em/lamps_emer.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0) +} +ENT.ClientProps["Lamps_full"] = { + model = "models/metrostroi_train/em/lamps_full.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0) +} + +ENT.ClientProps["Lamps_full2"] = { + model = "models/metrostroi_train/em/lamps_full_em.mdl", + pos = Vector(0.007439,0,0), + ang = Angle(0,0,0) +} + +ENT.ClientProps["Lamps_cab_em"] = { + model = "models/metrostroi_train/em/lamps_cab_em.mdl", + pos = Vector(0.007439,0,0), + ang = Angle(0,0,0) +} + +ENT.ClientProps["FrontBrake"] = {-- + model = "models/metrostroi_train/81/tmiso.mdl", + pos = Vector(460, -30, -55), + ang = Angle(0,-90,0) +} +ENT.ClientProps["FrontTrain"] = {-- + model = "models/metrostroi_train/81/nmsio.mdl", + pos = Vector(460, 30, -55), + ang = Angle(0,-90,0) +} +ENT.ClientProps["RearBrake"] = {-- + model = "models/metrostroi_train/81/tmiso.mdl", + pos = Vector(-460, -30, -55), + ang = Angle(0,90,0) +} +ENT.ClientProps["RearTrain"] = {-- + model = "models/metrostroi_train/81/nmsio.mdl", + pos = Vector(-460, 30, -55), + ang = Angle(0,90,0) +} + + +-------------------------------------------------------------------------------- +-- Add doors +local function GetDoorPosition(i,k,j) + if j == 0 + then return Vector(383.0 - 67.49*k - 233.4*i,-64.56*(1-2*k),1) + else return Vector(383.0 - 67.49*(1-k) - 233.4*i,-64.56*(1-2*k),1) + end +end +for i=0,3 do + for k=0,1 do + ENT.ClientProps["door"..i.."x"..k.."a"] = { + model = "models/metrostroi_train/em/doorright.mdl", + pos = GetDoorPosition(i,k,0), + ang = Angle(0,90 + 180*k,0) + } + ENT.ClientProps["door"..i.."x"..k.."b"] = { + model = "models/metrostroi_train/em/doorleft.mdl", + pos = GetDoorPosition(i,k,1), + ang = Angle(0,90 + 180*k,0) + } + end +end +ENT.ClientProps["door1"] = { + model = "models/metrostroi_train/em/doorfront.mdl", + pos = Vector(471.71,-17.1,-1), + ang = Angle(0,-90,0) +} +ENT.ClientProps["door2"] = { + model = "models/metrostroi_train/em/doorback.mdl", + pos = Vector(-471.24,17.19,-1), + ang = Angle(0,-90,0) +} +ENT.ClientProps["door3"] = { + model = "models/metrostroi_train/em/doorpass.mdl", + pos = Vector(403.69,16.95,-2.2), + ang = Angle(0,-90,0) +} +ENT.ClientProps["door4"] = { + model = "models/metrostroi_train/em/doorcab.mdl", + pos = Vector(420.75,64.26,1.5), + ang = Angle(0,-90,0) +} +--[[ENT.ClientProps["UAVA"] = { + model = "models/metrostroi/81-717/uava_body.mdl", + pos = Vector(400,61,-8),--Vector(415.0,-58.5,-18.2), + ang = Angle(0,0,0) +} +ENT.ClientProps["UAVALever"] = { + model = "models/metrostroi_train/81/uavalever.mdl", + pos = Vector(452.84598,51,-21.813349), + ang = Angle(0,90,90) +} +]] +ENT.ClientProps["RedLights"] = { + model = "models/metrostroi_train/Em/redlights.mdl", + pos = Vector(474.674042,-0.885458,55.695278), + ang = Angle(90.000000,-0.212120,0.000000), +} +ENT.ClientProps["DistantLights"] = { + model = "models/metrostroi_train/Em/distantlights.mdl", + pos = Vector(471.731842,-0.651488,54.413082), + ang = Angle(90.000000,0.000000,0.000000), +} +ENT.ClientProps["WhiteLights"] = { + model = "models/metrostroi_train/Em/whitelights.mdl", + pos = Vector(475.597565,-0.525079,-29.160791), + ang = Angle(90.267662,0.000000,0.000000), +} + +ENT.Texture = "7" +ENT.OldTexture = nil +--local X = Material( "metrostroi_skins/81-717/6.png") + +function ENT:UpdateTextures() + local texture = Metrostroi.Skins["train"][self:GetNW2String("texture")] + local passtexture = Metrostroi.Skins["pass"][self:GetNW2String("passtexture")] + local cabintexture = Metrostroi.Skins["cab"][self:GetNW2String("cabtexture")] + for _,self in pairs(self.ClientEnts) do + if not IsValid(self) then continue end + for k,v in pairs(self:GetMaterials()) do + local tex = string.Explode("/",v) + tex = tex[#tex] + if cabintexture and cabintexture.textures[tex] then + self:SetSubMaterial(k-1,cabintexture.textures[tex]) + end + if passtexture and passtexture.textures[tex] then + self:SetSubMaterial(k-1,passtexture.textures[tex]) + end + if texture and texture.textures[tex] then + self:SetSubMaterial(k-1,texture.textures[tex]) + end + end + end +end +-------------------------------------------------------------------------------- +function ENT:Think() + self.BaseClass.Think(self) + if self.Texture ~= self:GetNW2String("texture") then + self.Texture = self:GetNW2String("texture") + self:UpdateTextures() + end + if self.PassTexture ~= self:GetNW2String("passtexture") then + self.PassTexture = self:GetNW2String("passtexture") + self:UpdateTextures() + end + if self.CabinTexture ~= self:GetNW2String("cabtexture") then + self.CabinTexture = self:GetNW2String("cabtexture") + self:UpdateTextures() + end + --print(self.FrontDoor,self:GetPackedBool(114)) + --print(self.RearDoor,self:GetPackedBool(156)) + local transient = (self.Transient or 0)*0.05 + if (self.Transient or 0) ~= 0.0 then self.Transient = 0.0 end + + -- Parking brake animation + self.ParkingBrakeAngle = self.ParkingBrakeAngle or 0 + self.TrueBrakeAngle = self.TrueBrakeAngle or 0 + self.TrueBrakeAngle = self.TrueBrakeAngle + (self.ParkingBrakeAngle - 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 Lamps = self:GetPackedBool(20) and 0.6 or 1 + self:ShowHideSmooth("Lamps_emer",self:Animate("lamps_emer",self:GetPackedBool("Lamps_emer") and Lamps or 0,0,1,6,false)) + self:ShowHideSmooth("Lamps_full",self:Animate("lamps_full",self:GetPackedBool("Lamps_full") and Lamps or 0,0,1,6,false)) + self:ShowHideSmooth("Lamps_cab_em",self.Anims["lamps_full"].val) + self:ShowHideSmooth("Lamps_full2",self.Anims["lamps_full"].val) + + --self:ShowHideSmooth("Lamp2",self:Animate("Lamp2_hs",self:GetPackedBool("Lamp2") and 1 or 0,0,1,5,false)) + --self:ShowHideSmooth("Lamp1",self:Animate("Lamp1_hs",self:GetPackedBool("Lamp1") and 1 or 0,0,1,5,false)) + --self:ShowHideSmooth("Lamp6",self:Animate("Lamp6_hs",self:GetPackedBool("Lamp6") and 1 or 0,0,1,5,false)) + --self:ShowHideSmooth("Doors",self:Animate("Doors_hs",self:GetPackedBool(40) and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("DoorsWag",self:Animate("DoorsWag_hs",self:GetPackedBool("DoorsWag") and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("GreenRP",self:Animate("GreenRP_hs",self:GetPackedBool(36) and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("RedRP",self:Animate("RedRP_hs",self:GetPackedBool(35) and 1 or 0,0,1,5,false) + self:Animate("RedLSN_hs",self:GetPackedBool(131) and 1 or 0,0,0.4,5,false)) + + + self:Animate("AV8B",self:GetPackedBool("AV8B") and 1 or 0, 0,1, 8, false) + + self:Animate("VU1",self:GetPackedBool("VU1") and 0 or 1, 0,1, 12, false) + self:Animate("VU3",self:GetPackedBool("VU3") and 0 or 1, 0,1, 12, false) + self:Animate("VU2",self:GetPackedBool("VU2") and 0 or 1, 0,1, 12, false) + + self:Animate("VU",self:GetPackedBool("VU") and 0 or 1, 0,1, 12, false) + self:Animate("RezMK",self:GetPackedBool("RezMK") and 1 or 0, 0,1, 7, false) + + self:HideButton("VUToggle",self:GetPackedBool("VUPl")) + self:HideButton("VUPl",not self:GetPackedBool("VUPl")) + + self:SetCSBodygroup("VUPl",1,self:GetPackedBool("VUPl") and 0 or 1) + + + self:Animate("VB",self:GetPackedBool("VB") and 0 or 1, 0,1, 8, false) + + + self:Animate("KRZD",self:GetPackedBool("KRZD") and 1 or 0, 0,1, 12, false) + + self:ShowHideSmooth("RedLights",self:Animate("redlights",self:GetPackedBool("RedLight") and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("WhiteLights",self:Animate("whitelights",self:GetPackedBool("HeadLights2") and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("DistantLights",self:Animate("distantlights",self:GetPackedBool("HeadLights1") and 1 or 0,0,1,5,false)) + + self:Animate("KDL",self:GetPackedBool("KDL") and 1 or 0, 0,1, 12, false) + self:Animate("DIPon",self:GetPackedBool("DIPon") and 1 or 0, 0,1, 12, false) + self:Animate("DIPoff",self:GetPackedBool("DIPoff") and 1 or 0, 0,1, 12, false) + self:Animate("VozvratRP",self:GetPackedBool("VozvratRP") and 1 or 0, 0,1, 12, false) + self:Animate("KSN",self:GetPackedBool("KSN") and 1 or 0, 0,1, 12, false) + self:Animate("KDP",self:GetPackedBool("KDP") and 1 or 0, 0,1, 12, false) + + self:Animate("KU1",self:GetPackedBool("KU1") and 1 or 0, 0,1, 7, false) + self:Animate("VUD",self:GetPackedBool("VUD1") and 1 or 0, 0,1, 7, false) + + +-- self:Animate("VDL",self:GetPackedBool("VDL") and 1 or 0, 0,1, 7, false) + + self:Animate("VUD2",self:GetPackedBool("VUD2") and 0 or 1, 0,1, 7, false) + self:Animate("VUD2l",self:GetPackedBool("VUD2L") and 1 or 0, 0,1, 7, false) + + self:Animate("brake_disconnect",self:GetPackedBool("DriverValveBLDisconnect") and 1 or 0,0,0.5, 3,false) + self:Animate("train_disconnect",self:GetPackedBool("DriverValveTLDisconnect") and 1 or 0,0,0.5, 3,false) + + -- DIP sound + --self:SetSoundState("bpsn2",self:GetPackedBool(52) and 1 or 0,1.0) + + -- Simulate pressure gauges getting stuck a little + self:Animate("brake", 1-self:GetPackedRatio(0), 0.00, 0.65, 256,24) + self:Animate("controller", self:GetPackedRatio(1), 0, 0.31, 2,false) + self:Animate("reverser", self:GetPackedRatio(2), 0.26, 0.35, 4,false) + self:ShowHide("reverser", self:GetPackedBool(0)) + + self:Animate("brake_line", self:GetPackedRatio(4), 0, 0.725, 256,2)--,,0.01) + self:Animate("train_line", self:GetPackedRatio(5)-transient, 0, 0.725, 256,2)--,,0.01) + self:Animate("brake_cylinder", self:GetPackedRatio(6), 0, 0.721, 256,2)--,,0.03) + self:Animate("voltmeter", self:GetPackedRatio(7), 0.014, 0.298,256,2) + self:Animate("ampermeter", self:GetPackedRatio(8), 0, 0.248,256,2) + --self:Animate("volt2", 0, 0.38, 0.63) + ---- + self:Animate("door1", self:GetPackedBool(157) and (self.Door1 or 0.99) or 0,0,0.22, 1024, 1) + self:Animate("door3", self:GetPackedBool(158) and (self.Door2 or 0.99) or 0,0,0.25, 1024, 1) + self:Animate("door2", self:GetPackedBool(156) and (self.Door3 or 0.99) or 0,0,0.25, 1024, 1) + self:Animate("door4", self:GetPackedBool(159) and (self.Door2 or 0.99) or 0,1,0.77, 1024, 1) + + self:Animate("FrontBrake", self:GetNW2Bool("FbI") and 0 or 1,0,0.35, 3, false) + self:Animate("FrontTrain", self:GetNW2Bool("FtI") and 0 or 1,0,0.35, 3, false) + self:Animate("RearBrake", self:GetNW2Bool("RbI") and 1 or 0,0,0.35, 3, false) + self:Animate("RearTrain", self:GetNW2Bool("RtI") and 1 or 0,0,0.35, 3, false) + + -- Main switch + if self.LastValue ~= self:GetPackedBool(5) then + self.ResetTime = CurTime()+1.5 + self.LastValue = self:GetPackedBool(5) + end + self:Animate("gv_wrench", (self:GetPackedBool(5) and 1 or 0), 0,0.51, 128, 1,false) + self:ShowHide("gv_wrench", CurTime() < self.ResetTime) + + -- Animate doors + for i=0,4 do + for k=0,1 do + local n_l = "door"..i.."x"..k.."a" + local n_r = "door"..i.."x"..k.."b" + self:Animate(n_l,self:GetPackedBool(21+(1-k)*4) and 1 or 0,0.11,0.93, 0.8 + (-0.2+0.4*math.random()),0) + self:Animate(n_r,self:GetPackedBool(21+(1-k)*4) and 1 or 0,0.11,0.93, 0.8 + (-0.2+0.4*math.random()),0) + end + end + + -- Brake-related sounds + local brakeLinedPdT = self:GetPackedRatio(9) + local dT = self.DeltaTime + self.BrakeLineRamp1 = self.BrakeLineRamp1 or 0 + + if (brakeLinedPdT > -0.001) + then self.BrakeLineRamp1 = self.BrakeLineRamp1 + 4.0*(0-self.BrakeLineRamp1)*dT + else self.BrakeLineRamp1 = self.BrakeLineRamp1 + 4.0*((-0.6*brakeLinedPdT)-self.BrakeLineRamp1)*dT + end + self.BrakeLineRamp1 = math.Clamp(self.BrakeLineRamp1,0,1) + self:SetSoundState("release2",self.BrakeLineRamp1^1.65,1.0) + + self.BrakeLineRamp2 = self.BrakeLineRamp2 or 0 + if (brakeLinedPdT < 0.001) + then self.BrakeLineRamp2 = self.BrakeLineRamp2 + 4.0*(0-self.BrakeLineRamp2)*dT + else self.BrakeLineRamp2 = self.BrakeLineRamp2 + 8.0*(0.1*brakeLinedPdT-self.BrakeLineRamp2)*dT + end + self.BrakeLineRamp2 = math.Clamp(self.BrakeLineRamp2,0,1) + self:SetSoundState("release3",self.BrakeLineRamp2 + math.max(0,self.BrakeLineRamp1/2-0.15),1.0) + + self:SetSoundState("cran1",math.min(1,self:GetPackedRatio(4)/50*(self:GetPackedBool(6) and 1 or 0)),1.0) + + -- Compressor + local state = self:GetPackedBool(20) + self.PreviousCompressorState = self.PreviousCompressorState or false + if self.PreviousCompressorState ~= state then + self.PreviousCompressorState = state + if state then + self:SetSoundState("compressor_ezh",1,1) + else + self:SetSoundState("compressor_ezh",0,1) + self:SetSoundState("compressor_ezh_end",0,1) + self:SetSoundState("compressor_ezh_end",1,1) + --self:PlayOnce("compressor_e_end",nil,1,nil,true) + end + end + + -- ARS/ringer alert + local state = self:GetPackedBool(39) + self.PreviousAlertState = self.PreviousAlertState or false + if self.PreviousAlertState ~= state then + self.PreviousAlertState = state + if state then + self:SetSoundState("ring4",1,1) + else + self:SetSoundState("ring4",0,0) + self:SetSoundState("ring4_end",0,1) + self:SetSoundState("ring4_end",1,1) + --self:PlayOnce("ring4_end","cabin",0,101) + end + end + + -- RK rotation + if self:GetPackedBool(112) then self.RKTimer = CurTime() end + local 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_spin",0.7,1,nil,0.75) + else + self:SetSoundState("rk_spin",0,0,nil,0.75) + self:SetSoundState("rk_stop",0,1,nil,0.75) + self:SetSoundState("rk_stop",0.7,1,nil,0.75) + end + end + + --DIP sound + --self:SetSoundState("bpsn2",self:GetPackedBool(32) and 1 or 0,1.0) +end + +function ENT:Draw() + self.BaseClass.Draw(self) +end + +function ENT:DrawPost() + + self:DrawOnPanel("FrontPneumatic",function() + draw.DrawText(self:GetNW2Bool("FbI") and "Isolated" or "Open","Trebuchet24",150,0,Color(0,0,0,255)) + draw.DrawText(self:GetNW2Bool("FtI") and "Isolated" or "Open","Trebuchet24",670,0,Color(0,0,0,255)) + end) + self:DrawOnPanel("RearPneumatic",function() + draw.DrawText(self:GetNW2Bool("RbI") and "Isolated" or "Open","Trebuchet24",150,0,Color(0,0,0,255)) + draw.DrawText(self:GetNW2Bool("RtI") and "Isolated" or "Open","Trebuchet24",670,0,Color(0,0,0,255)) + end) + 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) + + -- Draw train numbers + local dc = render.GetLightColor(self:GetPos()) + self:DrawOnPanel("TrainNumber1",function() + draw.DrawText(Format("%04d",self:EntIndex()),"MetrostroiSubway_LargeText3",0,0,Color(255*dc.x,255*dc.y,255*dc.z,255)) + end) + self:DrawOnPanel("TrainNumber2",function() + draw.DrawText(Format("%04d",self:EntIndex()),"MetrostroiSubway_LargeText3",0,0,Color(255*dc.x,255*dc.y,255*dc.z,255)) + end) +end + +function ENT:OnButtonPressed(button) + if button == "ShowHelp" then + RunConsoleCommand("metrostroi_train_manual") + end + local bp_press = self:GetPackedRatio(6) + local blocked_l = self:GetPackedBool(132) and 0 or 1 + local blocked_r = self:GetPackedBool(133) and 0 or 1 + if button == "ParkingBrakeLeft" then + self.ParkingBrakeAngle = (self.ParkingBrakeAngle or 0) - blocked_l*45 + end + if button == "ParkingBrakeRight" then + self.ParkingBrakeAngle = (self.ParkingBrakeAngle or 0) + blocked_r*45 + end + if button == "ShowHelp" then + RunConsoleCommand("metrostroi_train_manual") + end + + if button == "PrevSign" then + self.InfoTableTimeout = CurTime() + 2.0 + end + if button == "NextSign" then + self.InfoTableTimeout = CurTime() + 2.0 + end + + if button and button:sub(1,3) == "Num" then + self.InfoTableTimeout = CurTime() + 2.0 + end +end diff --git a/lua/entities/_obsolete/gmod_subway_em/init.lua b/lua/entities/_obsolete/gmod_subway_em/init.lua new file mode 100644 index 0000000..b6c26bd --- /dev/null +++ b/lua/entities/_obsolete/gmod_subway_em/init.lua @@ -0,0 +1,896 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +ENT.BogeyDistance = 650 -- Needed for gm trainspawner + +--------------------------------------------------- +-- Defined train information +-- Types of wagon(for wagon limit system): +-- 0 = Head or intherim +-- 1 = Only head +-- 2 = Only intherim +--------------------------------------------------- +ENT.SubwayTrain = { + Type = "E", + Name = "Em", + WagType = 0, + ARS = { + HaveASNP = false, + } +} +function ENT:Initialize() + -- Set model and initialize + self:SetModel("models/metrostroi_train/em/em.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create seat entities + self.DriverSeat = self:CreateSeat("driver",Vector(430,-39,-21.5),Angle(0,0,0)) + self.InstructorsSeat = self:CreateSeat("instructor",Vector(430,40,-48+6+2.5),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 + self.FrontBogey = self:CreateBogey(Vector( 320,0,-80),Angle(0,180,0),true) + self.RearBogey = self:CreateBogey(Vector(-320,0,-80),Angle(0,0,0),false) + local pneumoPow = 0.8+(math.random()^0.4)*0.3 + self.FrontBogey.PneumaticPow = pneumoPow + self.RearBogey.PneumaticPow = pneumoPow + + -- Initialize key mapping + self.KeyMap = { + [KEY_1] = "KVSetX1", + --[KEY_2] = "KVSetX2", + --[KEY_3] = "KVSetX3", + [KEY_4] = "KVSet0", + [KEY_5] = "KVSetT1", + [KEY_6] = "KVSetT1AB", + [KEY_7] = "KVSetT2", + [KEY_8] = "KRP", + + [KEY_G] = "VozvratRPSet", + + [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] = "KDL", + [KEY_D] = "KDP", + [KEY_V] = "VUD1Toggle", + [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_0] = "DriverValveDisconnect", + [KEY_LSHIFT] = { + [KEY_W] = "KVUp_Unlocked", + [KEY_SPACE] = "KVTSet", + + [KEY_1] = "DIPonSet", + [KEY_2] = "DIPoffSet", + [KEY_4] = "KVSet0Fast", + [KEY_L] = "DriverValveDisconnect", + + [KEY_7] = "KVWrenchNone", + [KEY_8] = "KVWrenchKRU", + [KEY_9] = "KVWrenchKV", + [KEY_0] = "KVWrench0", + [KEY_6] = "KVSetT1A", + }, + + [KEY_RSHIFT] = { + [KEY_7] = "KVWrenchNone", + [KEY_8] = "KVWrenchKRU", + [KEY_9] = "KVWrenchKV", + [KEY_0] = "KVWrench0", + [KEY_L] = "DriverValveDisconnect", + }, + [KEY_LALT] = { + [KEY_V] = "VUD1Toggle", + }, + [KEY_RALT] = { + }, + } + + self.InteractionZones = { + { Pos = Vector(-471,-30,0), + Radius = 28, + ID = "RearDoor" + }, + { Pos = Vector(473,32,28), + Radius = 28, + ID = "FrontDoor1" + }, + { Pos = Vector(473,32,-28), + Radius = 28, + ID = "FrontDoor2" + }, + { Pos = Vector(383.02,31.85,2), + Radius = 28, + ID = "PassengerDoor1" + }, + { Pos = Vector(383.02,-31.85,2), + Radius = 28, + ID = "PassengerDoor2" + }, + { Pos = Vector(408.18,63.59,-26), + Radius = 16, + ID = "CabinDoor1" + }, + { Pos = Vector(408.18,63.59,6), + Radius = 16, + ID = "CabinDoor2" + }, + { Pos = Vector(408.18,63.59,38), + Radius = 16, + ID = "CabinDoor3" + }, + { Pos = Vector(458.18,63.59,-26), + Radius = 16, + ID = "CabinDoor4" + }, + { Pos = Vector(458.18,63.59,6), + Radius = 16, + ID = "CabinDoor5" + }, + { Pos = Vector(458.18,63.59,38), + Radius = 16, + ID = "CabinDoor6" + }, + } + + self.Lights = { + -- Head + [1] = { "headlight", Vector(475,0,-20), Angle(0,0,0), Color(216,161,92), fov = 100 }, + [2] = { "glow", Vector(469.4, 45.43,-30.7), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 1.0 }, + [3] = { "glow", Vector(469.4,-45.43,-30.7), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 1.0 }, + [4] = { "glow", Vector(458+9,-14.86, 58), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 0.5 }, + [5] = { "glow", Vector(458+9,0, 58), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 0.5 }, + [6] = { "glow", Vector(458+9, 14.86, 58), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 0.5 }, + + -- Reverse + --[8] = { "light", Vector(458+11,-30.7, 54.2), Angle(0,0,0), Color(255,0,0), brightness = 10, scale = 1.0 }, + --[9] = { "light", Vector(458+11, 30.7, 54.2), Angle(0,0,0), Color(255,0,0), brightness = 10, scale = 1.0 }, + + -- Cabin + [10] = { "dynamiclight", Vector(434,-32,18), Angle(0,-0,0), Color(255,107,50), brightness = 0.4, distance = 600, shadows = 1}, + + -- Interior + [11] = { "dynamiclight", Vector( 250, 0, 0), Angle(0,0,0), Color(255,95,10), brightness = 5, distance = 300 , fov=180,farz = 128 }, + [12] = { "dynamiclight", Vector( 0, 0, 0), Angle(0,0,0), Color(255,95,10), brightness = 5, distance = 400, fov=180,farz = 128 }, + [13] = { "dynamiclight", Vector(-300, 0, 0), Angle(0,0,0), Color(255,95,10), brightness = 5, distance = 400 , fov=180,farz = 128 }, + + -- Side lights + --//[14] = { "light", Vector(390+12.15, 69, 54), Angle(0,0,0), Color(255,0,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + --[15] = { "light", Vector(390+12.15, 69, 51), Angle(0,0,0), Color(150,255,255), brightness = 0.6, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + --[16] = { "light", Vector(390+12.15, 69, 48), Angle(0,0,0), Color(50,255,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + --[17] = { "light", Vector(390+12.15, 69, 45), Angle(0,0,0), Color(255,255,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + + --[18] = { "light", Vector(390+12.15, -69, 54), Angle(0,0,0), Color(255,0,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + --[19] = { "light", Vector(390+12.15, -69, 51), Angle(0,0,0), Color(150,255,255), brightness = 0.6, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + --[20] = { "light", Vector(390+12.15, -69, 48), Angle(0,0,0), Color(50,255,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + --[21] = { "light", Vector(390+12.15, -69, 45), Angle(0,0,0), Color(255,255,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + + [15] = { "light", Vector(402.202942,69.270073,44.79285), Angle(0,0,0), Color(150,255,255), brightness = 0.9, scale = 0.10, texture = "sprites/light_glow02.vmt" }, + [16] = { "light", Vector(402.202942,69.270073,41.509621), Angle(0,0,0), Color(50,255,0), brightness = 0.9, scale = 0.10, texture = "sprites/light_glow02.vmt" }, + [17] = { "light", Vector(402.202942,69.270073,37.3862), Angle(0,0,0), Color(255,255,0), brightness = 0.9, scale = 0.10, texture = "sprites/light_glow02.vmt" }, + + --[19] = { "light", Vector(15, -69, 58.3), Angle(0,0,0), Color(150,255,255), brightness = 0.9, scale = 0.10, texture = "sprites/light_glow02.vmt" }, + --[20] = { "light", Vector(12, -69, 58.3), Angle(0,0,0), Color(50,255,0), brightness = 0.9, scale = 0.10, texture = "sprites/light_glow02.vmt" }, + --[21] = { "light", Vector(9, -69, 58.3), Angle(0,0,0), Color(255,255,0), brightness = 0.9, scale = 0.10, texture = "sprites/light_glow02.vmt" }, + [32] = { "headlight", Vector(450.70,-56.3,28), Angle(-90,0,-45), Color(216,161,92), farz = 6, nearz = 4, shadows = 0, brightness = 2, fov = 77 }, + [33] = { "headlight", Vector(450.70,-56.3,32), Angle(-90,0,-45), Color(216,161,92), farz = 6, nearz = 4, shadows = 0, brightness = 2, fov = 77 }, + + [34] = { "headlight", Vector(448.65,-56.40,22.60), Angle(-30,0,-45), Color(216,161,92), farz = 6, nearz = 4, shadows = 0, brightness = 2, fov = 140 }, + + [35] = { "headlight", Vector(450.6,-55.84,12.73), Angle(-90,-90,-180), Color(216,161,92), farz = 7, nearz = 4, shadows = 0, brightness = 2, fov = 130 }, + + [36] = { "headlight", Vector(455.2,-53.2,5.35), Angle(-90,-90,-180), Color(216,161,92), farz = 4, nearz = 4, shadows = 0, brightness = 2, fov = 130 }, + + [37] = { "headlight", Vector(458.3,-20.32,19.6), Angle(-90,-120,-180), Color(216,161,92), farz = 4, nearz = 4, shadows = 0, brightness = 3, fov = 160 }, + + [38] = { "headlight", Vector( -20, 0, 30), Angle(90,0,90), Color(255,95,10), brightness = 1, distance = 999,fov=179, shadows = 0, farz = 500}, + [39] = { "headlight", Vector( -20, 0, 10), Angle(-90,0,90), Color(255,95,10), brightness = 1, distance = 999,fov=179, shadows = 0, farz = 500}, + [70 ] = { "headlight", Vector( 450, -60, -47), Angle(45,-90,0), Color(255,255,255), brightness = 0.5, distance = 400 , fov=120, shadows = 1 }, + + } + self.NetworkSwitches = { + "VB", + "RezMK", + "VU3","VU1","VU2","AV8B","VU", + "VUD2","VUD2L","VDL", + "KDL","DIPon","DIPoff","VozvratRP","KSN","KDP", + "KU1","KRZD","VUD1", + --[["VB","VBA", + + "KVT","VZP","VZD","KRZD", + + "KDL","DIPon","DIPoff","VozvratRP","KSN","KDP", + + "KU1","Ring","VUS","KAK","VAutodrive","VUD1", + + "RezMK", + + "VUD2","VUD2L","VDL", + + "VRU","VAH","VAD","OVT","KSD","DP","VKF", + + "OtklAVU","KRP", + + "RC1","RC2","VRD", + + "PB","VU3","VU1","VU2","AV8B","VU","KDLK","VDLK","KDPK","KAHK","L_3","RST","VSOSD",]] + } + self.Plombs = { + VU = true, + --[[RST = true, + VAH = true, + VAD = true, + OVT = true, + RC1 = true, + RC2 = true,]] + Init = true, + } + -- Lights + --[[ + for i = 1,23 do + self.Lights[69+i] = { "light", Vector(-470 + 35*i, 0, 65), Angle(180,0,0), Color(255,220,180), brightness = 0.25, scale = 0.75} + --self:SetLightPower(69+i,RealTime()%1*2>1) + end]] + + -- Cross connections in train wires + self.TrainWireInverts = { + [18] = true, + [34] = true, + } + self.TrainWireCrossConnections = { + [5] = 4, -- Reverser F<->B + [31] = 32, -- Doors L<->R + } + + -- Setup door positions + self.LeftDoorPositions = {} + self.RightDoorPositions = {} + for i=0,3 do + table.insert(self.LeftDoorPositions,Vector(353.0 - 35*0.5 - 231*i,65,-1.8)) + table.insert(self.RightDoorPositions,Vector(353.0 - 35*0.5 - 231*i,-65,-1.8)) + end + + -- KV wrench mode + self.KVWrenchMode = 0 + + -- Parking brake ratio + self.ManualBrake = 0.0 + self.RearDoor = false + self.FrontDoor = false + self.CabinDoor = false + self.PassengerDoor = false +-- self.A5:TriggerInput("Set",0) + self:UpdateTextures() +end + +function ENT:UpdateTextures() + local texture = Metrostroi.Skins["train"][self.Texture] + local passtexture = Metrostroi.Skins["pass"][self.PassTexture] + local cabintexture = Metrostroi.Skins["cab"][self.CabTexture] + + for k,v in pairs(self:GetMaterials()) do + self:SetSubMaterial(k-1,"") + end + for k,v in pairs(self:GetMaterials()) do + if v == "models/metrostroi_train/81/int02" then + if not Metrostroi.Skins["717_schemes"] or not Metrostroi.Skins["717_schemes"]["m"] then + --self:SetSubMaterial(k-1,Metrostroi.Skins["717_schemes"][""]) + else + if not self.Adverts or self.Adverts ~= 4 then + --self:SetSubMaterial(k-1,Metrostroi.Skins["717_schemes"]["m"].adv) + else + --self:SetSubMaterial(k-1,Metrostroi.Skins["717_schemes"]["m"].clean) + end + end + end + local tex = string.Explode("/",v) + tex = tex[#tex] + if cabintexture and cabintexture.textures[tex] then + self:SetSubMaterial(k-1,cabintexture.textures[tex]) + end + if passtexture and passtexture.textures[tex] then + self:SetSubMaterial(k-1,passtexture.textures[tex]) + end + if texture and texture.textures[tex] then + self:SetSubMaterial(k-1,texture.textures[tex]) + end + end + self:SetNW2String("texture",self.Texture) + self:SetNW2String("passtexture",self.PassTexture) + self:SetNW2String("cabtexture",self.CabTexture) +end + +-------------------------------------------------------------------------------- +function ENT:Think() + self.RetVal = self.BaseClass.Think(self) + + -- Check if wrench was pulled out + if self.DriversWrenchPresent then + self.KV:TriggerInput("Enabled",self:IsWrenchPresent() and 1 or 0) + end + self:SetLightPower(1, self.Panel["HeadLights3"] > 0.5,(math.min(1,self.Panel["HeadLights1"])*0.50 + + math.min(1,self.Panel["HeadLights2"])*0.25 + + math.min(1,self.Panel["HeadLights3"])*0.25) + ) + --self:SetLightPower(2, self.Panel["HeadLights2"] > 0.5) + --self:SetLightPower(3, self.Panel["HeadLights2"] > 0.5) + --self:SetLightPower(4, self.Panel["HeadLights1"] > 0.5) + --self:SetLightPower(5, self.Panel["HeadLights1"] > 0.5) + --self:SetLightPower(6, self.Panel["HeadLights1"] > 0.5) + --self:SetLightPower(7, self.Panel["HeadLights2"] > 0.5) + -- Reverser lights + --self:SetLightPower(8, self.Panel["RedLightRight"] > 0.5) + --self:SetLightPower(9, self.Panel["RedLightLeft"] > 0.5) + self:SetPackedBool("HeadLights1",self.Panel["HeadLights1"] > 0.5) + self:SetPackedBool("HeadLights2",self.Panel["HeadLights2"] > 0.5) + self:SetPackedBool("RedLight",((self.Panel["RedLightLeft"] > 0.5 or self.Panel["RedLightRight"] > 0.5 ) and IsValid(self.FrontTrain))) + + local lightsActive2 = self.PowerSupply.XT3_4 > 65.0 + local lightsActive1 = self.Panel["EmergencyLight"] > 0.5 or lightsActive2 + self:SetPackedBool("Lamps_emer",lightsActive1) + self:SetPackedBool("Lamps_full",lightsActive2) + + -- Interior/cabin lights + self:SetLightPower(10, lightsActive2, 0.8)--self.Panel["CabinLight"] > 0.5) + --local I = math.Round((self.Electric.I24-150)/1000.0,1.5) + if self.Pneumatic.Compressor == 1 then + local Light = (lightsActive2 and 0.6 or 0.3) + --[[ + if I > 0 then + Light = Light*(1-math.abs(I*0.1)) + end + ]] + self:SetLightPower(11, lightsActive1, Light) + self:SetLightPower(12, lightsActive1, Light) + self:SetLightPower(13, lightsActive1, Light) + else + local Light = (lightsActive2 and 0.8 or 0.4) + --[[ + if I > 0 then + Light = Light*(1-math.abs(I*0.1)) + end + ]] + self:SetLightPower(11, lightsActive1, Light) + self:SetLightPower(12, lightsActive1, Light) + self:SetLightPower(13, lightsActive1, Light) + end + + --self:SetLightPower(12, lightsActive1,0.1 + ((self.PowerSupply.XT3_4 > 65.0) and 0.7 or 0)) + --self:SetLightPower(13, lightsActive2, 0.8) + --for i = 1,23 do + --self:SetLightPower(69+i,lightsActive2 and true or lightsActive1 and i%5==1 or false) + --end + --self:SetLightPower(12, self.Panel["EmergencyLight"] > 0.5) + --self:SetLightPower(13, self.PowerSupply.XT3_4 > 65.0) + + -- Side lights + --self:SetLightPower(15, self.Panel["TrainDoors"] > 0.5) + --self:SetLightPower(19, self.Panel["TrainDoors"] > 0.5) + + --self:SetLightPower(16, self.Panel["GreenRP"] > 0.5) + --self:SetLightPower(20, self.Panel["GreenRP"] > 0.5) + + --self:SetLightPower(17, self.Panel["TrainBrakes"] > 0.5) + --self:SetLightPower(21, self.Panel["TrainBrakes"] > 0.5) + + -- Total temperature + local IGLA_Temperature = math.max(self.Electric.T1,self.Electric.T2) + + -- Switch and button states + self:SetPackedBool(0,self:IsWrenchPresent()) + + -- Signal if doors are open or no to platform simulation + self.LeftDoorsOpen = + (self.Pneumatic.LeftDoorState[1] > 0.5) or + (self.Pneumatic.LeftDoorState[2] > 0.5) or + (self.Pneumatic.LeftDoorState[3] > 0.5) or + (self.Pneumatic.LeftDoorState[4] > 0.5) + self.RightDoorsOpen = + (self.Pneumatic.RightDoorState[1] > 0.5) or + (self.Pneumatic.RightDoorState[2] > 0.5) or + (self.Pneumatic.RightDoorState[3] > 0.5) or + (self.Pneumatic.RightDoorState[4] > 0.5) + self:WriteTrainWire(35,(self.Pneumatic.BrakeCylinderPressure > 0.1) and 1 or 0) + + -- DIP/power + self:SetPackedBool(32,self.Panel["V1"] > 0.5) + -- Red RP + local TW18 = self:GetTrainWire18() + if self:ReadTrainWire(20) == 0 or (self.Panel["V1"] < 0.5) then TW18 = 0 end--(self.KV.ControllerPositionAutodrive == 0 and self.KV.ControllerPosition == 0) + self:SetPackedBool(35,TW18 > 0.5) + self:SetPackedBool(131,TW18 > 0) + -- Green RP + self:SetPackedBool(36,self.Panel["GreenRP"] > 0.5) + -- Cabin heating + --self:SetPackedBool(37,self.Panel["KUP"] > 0.5) + -- AVU + --self:SetPackedBool(38,self.Panel["AVU"] > 0.5) + -- Ring + self:SetPackedBool(39,self.Panel["Ring"] > 0.5) + -- SD + --self:SetPackedBool(40,self.Panel["SD"] > 0.5) + self:SetPackedBool("DriverValveBLDisconnect",self.DriverValveBLDisconnect.Value == 1.0) + self:SetPackedBool("DriverValveTLDisconnect",self.DriverValveTLDisconnect.Value == 1.0) + for i=1,#self.NetworkSwitches do + local switch = self.NetworkSwitches[i] + self:SetPackedBool(switch,self[switch].Value == 1.0) + end + --self:SetPackedBool("Lamp6",self:ReadTrainWire(6) > 0.5) + --self:SetPackedBool("Lamp1",self:ReadTrainWire(1) > 0.5) + --self:SetPackedBool("Lamp2",self:ReadTrainWire(2) > 0.5) + self:SetPackedBool("DoorsWag",self.BD.Value == 0.0 and self.Panel["V1"] > 0.5) + self:SetPackedBool(20,self.Pneumatic.Compressor == 1.0) + self:SetPackedBool(21,self.Pneumatic.LeftDoorState[1] > 0.5) + self:SetPackedBool(25,self.Pneumatic.RightDoorState[1] > 0.5) + self:SetPackedBool(112,(self.RheostatController.Velocity ~= 0.0)) + self:SetPackedBool(156,self.RearDoor) + self:SetPackedBool(157,self.FrontDoor) + self:SetPackedBool(158,self.PassengerDoor) + self:SetPackedBool(159,self.CabinDoor) + if self.VUD2.Blocked > 0 and self.VUD2L.Value > 0.5 then + self.VUD2:TriggerInput("Block",0) + end + if self.VUD2.Blocked == 0 and self.VUD2L.Value == 0 then + self.VUD2:TriggerInput("Block",1) + end + if self.VUD2L.Blocked > 0 and self.VUD2.Value > 0 then + self.VUD2L:TriggerInput("Block",0) + end + if self.VUD2L.Blocked == 0 and self.VUD2.Value == 0 then + self.VUD2L:TriggerInput("Block",1) + end + self:SetPackedBool("VUD2Bl",self.VUD2.Blocked > 0) + self:SetPackedBool("VUD2LBl",self.VUD2L.Blocked > 0) + --[[ + -- LST + self:SetPackedBool(49,self:ReadTrainWire(6) > 0.5) + -- LVD + self:SetPackedBool(50,self:ReadTrainWire(1) > 0.5) + + self:SetPackedBool(165,self.PB.Value > 0) + + -- AV states + -- for i,v in ipairs(self.Panel.AVMap) do + -- if tonumber(v) + -- then self:SetPackedBool(64+(i-1),self["A"..v].Value == 1.0) + -- elseif self[v] then self:SetPackedBool(64+(i-1),self[v].Value == 1.0) + -- end + -- end + + self:SetPackedBool(62,self.L_3.Value > 0.5) + self:SetPackedBool(64+19,self.VU1.Value > 0.5) + self:SetPackedBool(64+12,self.VU.Value > 0.5) + self:SetPackedBool(64+24,self.RST.Value > 0.5) + self:SetPackedBool(64+7 ,self.AV8B.Value > 0.5) + self:SetPackedBool(64+36,self.VU2.Value > 0.5) + self:SetPackedBool(64+13,self.VU3.Value > 0.5) + self:SetPackedBool("VPR",self.RST.Value == 1.0 and self.Panel["V1"]) + ]] + -- Feed packed floats + self:SetPackedRatio(0, 1-self.Pneumatic.DriverValvePosition/7) + self:SetPackedRatio(1, (self.KV.ControllerPosition+3)/7) + self:SetPackedRatio(2, 1-(self.KV.ReverserPosition+1)/2) + self:SetPackedRatio(4, self.Pneumatic.ReservoirPressure/16.0) + self:SetPackedRatio(5, self.Pneumatic.TrainLinePressure/16.0) + self:SetPackedRatio(6, math.min(2.7,self.Pneumatic.BrakeCylinderPressure + 4.0*self.ManualBrake)/6.0) + self:SetPackedRatio(7, self.Electric.Power750V/1000.0) + self:SetPackedRatio(8, math.abs(self.Electric.I24)/1000.0) + --self:SetPackedRatio(9, self.Pneumatic.BrakeLinePressure_dPdT or 0) + if self.Pneumatic.TrainLineOpen then + self:SetPackedRatio(9, (-self.Pneumatic.TrainLinePressure_dPdT or 0)*6) + else + self:SetPackedRatio(9, self.Pneumatic.BrakeLinePressure_dPdT or 0) + end + self:SetPackedRatio(10,(self.Panel["V1"] * self.Battery.Voltage) / 82.0) + self:SetPackedRatio(11,IGLA_Temperature) + + -- Update ARS system + self:SetPackedRatio(3, self.ALS_ARS.Speed/100.0) + self:SetPackedRatio("Speed", self.Speed/120) + if (self.ALS_ARS.Ring == true) then + self:SetPackedBool(39,true) + end + + -- 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 = 30300+25000*(A < 0 and 1 or 0) + self.FrontBogey.Reversed = (self.RKR.Value > 0.5) + self.RearBogey.MotorForce = 30300+25000*(A < 0 and 1 or 0) + self.RearBogey.Reversed = (self.RKR.Value < 0.5) + + -- These corrections are required to beat source engine friction at very low values of motor power + local A = 2*self.Engines.BogeyMoment + 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 + self.FrontBogey.PneumaticBrakeForce = 50000.0 + self.FrontBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + 7.0*self.ManualBrake + self.FrontBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + self.FrontBogey.ParkingBrake = false + self.RearBogey.PneumaticBrakeForce = 50000.0 + self.RearBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + 7.0*self.ManualBrake + self.RearBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + --self.RearBogey.ParkingBrake = self.ManualBrake.Value > 0.5 + end + + -- Generate bogey sounds + local jerk = math.abs((self.Acceleration - (self.PrevAcceleration or 0)) / self.DeltaTime) + self.PrevAcceleration = self.Acceleration + + if jerk > (2.0 + self.Speed/15.0) then + self.PrevTriggerTime1 = self.PrevTriggerTime1 or CurTime() + self.PrevTriggerTime2 = self.PrevTriggerTime2 or CurTime() + + if ((math.random() > 0.00) or (jerk > 10)) and (CurTime() - self.PrevTriggerTime1 > 1.5) then + self.PrevTriggerTime1 = CurTime() + self.FrontBogey:EmitSound("subway_trains/chassis_"..math.random(1,3)..".wav", 70, math.random(90,110)) + end + if ((math.random() > 0.00) or (jerk > 10)) and (CurTime() - self.PrevTriggerTime2 > 1.5) then + self.PrevTriggerTime2 = CurTime() + self.RearBogey:EmitSound("subway_trains/chassis_"..math.random(1,3)..".wav", 70, math.random(90,110)) + end + end + + -- Temporary hacks + --self:SetNW2Float("V",self.Speed) + --self:SetNW2Float("A",self.Acceleration) + + return self.RetVal +end + +-------------------------------------------------------------------------------- +function ENT:OnButtonPress(button,ply) + -- Parking brake + if button == "ParkingBrakeLeft" then + self.ManualBrake = math.max(0.0,(self.ManualBrake or 0) - 0.008) + if self.ManualBrake == 0.0 then return end + --print(self.ManualBrake) + end + if button == "ParkingBrakeRight" then + self.ManualBrake = math.min(1.0,(self.ManualBrake or 0) + 0.008) + if self.ManualBrake == 1.0 then return end + --print(self.ManualBrake) + end + if string.find(button,"PneumaticBrakeSet") then + self.Pneumatic:TriggerInput("BrakeSet",tonumber(button:sub(-1,-1))) + return + end + if button:find("FrontDoor") then + self.FrontDoor = not self.FrontDoor + if self.FrontDoor then self:PlayOnce("door_open_tor","cabin") else self:PlayOnce("door_close_tor","cabin") end + end + if button:find("RearDoor") then + self.RearDoor = not self.RearDoor + if self.RearDoor then self:PlayOnce("door_open_tor") else self:PlayOnce("door_close_tor") end + end + if button:find("PassengerDoor") then + self.PassengerDoor = not self.PassengerDoor + if self.PassengerDoor then self:PlayOnce("door_open_tor","cabin") else self:PlayOnce("door_close_tor","cabin") end + end + if button:find("CabinDoor") then + self.CabinDoor = not self.CabinDoor + if self.CabinDoor then self:PlayOnce("door_open_tor","cabin") else self:PlayOnce("door_close_tor","cabin") end + end + if button == "UAVAToggle" then + local state = self.UAVA.TargetValue < 0.5 and "enabled" or "disabled" + RunConsoleCommand("say",ply:GetName().." "..state.." UAVA!") + end + if button == "VRDToggle" then + local state = self.VRD.TargetValue < 0.5 and "enabled" or "disabled" + RunConsoleCommand("say",ply:GetName().." "..state.." VRD!") + end + if button == "NextSign" then + self:PrepareSigns() + self.SignsIndex = self.SignsIndex + 1 + if self.SignsIndex > #self.SignsList then self.SignsIndex = 1 end + + self:SetNW2String("FrontText",self.SignsList[self.SignsIndex][2]) + end + if button == "PrevSign" then + self:PrepareSigns() + self.SignsIndex = self.SignsIndex - 1 + if self.SignsIndex < 1 then self.SignsIndex = #self.SignsList end + + self:SetNW2String("FrontText",self.SignsList[self.SignsIndex][2]) + end + + if button == "Num1P" then + if not self.RouteNumber then self.RouteNumber = "00" end + local num = tonumber(self.RouteNumber[2]) + num = num + 1 + if num > 9 then num = 0 end + self.RouteNumber = string.SetChar(self.RouteNumber,2, num) + self:SetNW2String("RouteNumber",self.RouteNumber) + local trn = self.WagonList[#self.WagonList] + if IsValid(trn) and trn ~= self then + trn.RouteNumber = self.RouteNumber + trn:SetNW2String("RouteNumber",self.RouteNumber) + end + end + if button == "Num1M" then + if not self.RouteNumber then self.RouteNumber = "00" end + local num = tonumber(self.RouteNumber[2]) + num = num - 1 + if num < 0 then num = 9 end + self.RouteNumber = string.SetChar(self.RouteNumber,2, num) + self:SetNW2String("RouteNumber",self.RouteNumber) + local trn = self.WagonList[#self.WagonList] + if IsValid(trn) and trn ~= self then + trn.RouteNumber = self.RouteNumber + trn:SetNW2String("RouteNumber",self.RouteNumber) + end + end + if button == "Num2P" then + if not self.RouteNumber then self.RouteNumber = "00" end + local num = tonumber(self.RouteNumber[1]) + num = num + 1 + if num > 9 then num = 0 end + self.RouteNumber = string.SetChar(self.RouteNumber,1, num) + self:SetNW2String("RouteNumber",self.RouteNumber) + local trn = self.WagonList[#self.WagonList] + if IsValid(trn) and trn ~= self then + trn.RouteNumber = self.RouteNumber + trn:SetNW2String("RouteNumber",self.RouteNumber) + end + end + if button == "Num2M" then + if not self.RouteNumber then self.RouteNumber = "00" end + local num = tonumber(self.RouteNumber[1]) + num = num - 1 + if num < 0 then num = 9 end + self.RouteNumber = string.SetChar(self.RouteNumber,1, num) + self:SetNW2String("RouteNumber",self.RouteNumber) + local trn = self.WagonList[#self.WagonList] + if IsValid(trn) and trn ~= self then + trn.RouteNumber = self.RouteNumber + trn:SetNW2String("RouteNumber",self.RouteNumber) + end + 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 + --print(self.ManualBrake) + end + if button == "ManualBrakeRight" then + self.ManualBrake = math.min(1.0,self.ManualBrake + 0.008) + if self.ManualBrake == 1.0 then return end + --print(self.ManualBrake) + 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 == 2) and (button == "KVReverserUp") then + self.KRU:TriggerInput("Up",1) + self:OnButtonPress("KRUUp") + end + if (self.KVWrenchMode == 2) and (button == "KVReverserDown") then + self.KRU:TriggerInput("Down",1) + self:OnButtonPress("KRUDown") + end + if (self.KVWrenchMode == 2) and (button == "KVSetX1") then + self.KRU:TriggerInput("SetX1",1) + self:OnButtonPress("KRUSetX1") + end + if (self.KVWrenchMode == 2) and (button == "KVSetX2") then + self.KRU:TriggerInput("SetX2",1) + self:OnButtonPress("KRUSetX2") + end + if (self.KVWrenchMode == 2) and (button == "KVSetX3") then + self.KRU:TriggerInput("SetX3",1) + self:OnButtonPress("KRUSetX3") + end + if (self.KVWrenchMode == 2) and (button == "KVSet0") then + self.KRU:TriggerInput("Set0",1) + self:OnButtonPress("KRUSet0") + end + + if button == "KVSetT1AB" then + if self.KV.ControllerPosition == -2 then + self.KV:TriggerInput("ControllerSet",-1) + timer.Simple(0.20,function() + self.KV:TriggerInput("ControllerSet",-2) + end) + else + self.KV:TriggerInput("ControllerSet",-2) + end + end + if button == "KVWrench0" then + if self.KVWrenchMode == 3 or self.KVWrenchMode == 1 then + if self.KVWrenchMode ~= 1 then + self:PlayOnce("revers_in","cabin",0.7) + end + self.KVWrenchMode = 0 + self.DriversWrenchPresent = false + self.DriversWrenchMissing = false + self.KV:TriggerInput("Enabled",1) + self.KRU:TriggerInput("Enabled",0) + end + end + if button == "KVWrenchKV" then + if self.KVWrenchMode == 3 or self.KVWrenchMode == 0 then + if self.KVWrenchMode ~= 0 then + self:PlayOnce("revers_in","cabin",0.7) + end + self.KVWrenchMode = 1 + self.DriversWrenchPresent = true + self.DriversWrenchMissing = false + self.KV:TriggerInput("Enabled",1) + self.KRU:TriggerInput("Enabled",0) + end + end + --THERE IS NO KRU IN THIS EZH MODEL + --[[ + if button == "KVWrenchKRU" then + if self.KVWrenchMode == 3 then + self:PlayOnce("kru_in","cabin",0.7) + self.KVWrenchMode = 2 + self.DriversWrenchPresent = false + self.DriversWrenchMissing = true + self.KV:TriggerInput("Enabled",0) + self.KRU:TriggerInput("Enabled",1) + self.KRU:TriggerInput("LockX3",1) + end + end]] + if button == "KVWrenchNone" then + if self.KVWrenchMode ~= 3 and self.KV.ReverserPosition == 0 then + if self.KVWrenchMode == 2 then + self:PlayOnce("kru_out","cabin",0.7) + else + self:PlayOnce("revers_out","cabin",0.7) + end + self.KVWrenchMode = 3 + self.DriversWrenchPresent = false + self.DriversWrenchMissing = true + self.KV:TriggerInput("Enabled",0) + self.KRU:TriggerInput("Enabled",0) + end + end + --if button == "KVT2Set" then self.KVT:TriggerInput("Close",1) end + if button == "KDL" and self.VUD1.Value < 1 then self.KDL:TriggerInput("Close",1) self:OnButtonPress("KDLSet") end + if button == "KDP" and self.VUD1.Value < 1 then self.KDP:TriggerInput("Close",1) self:OnButtonPress("KDPSet") end + if button == "VDL" and self.VUD1.Value < 1 then self.VDL:TriggerInput("Close",1) self:OnButtonPress("VDLSet") end + if button == "KRP" then + self.KRP:TriggerInput("Set",1) + self:OnButtonPress("KRPSet") + 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.DriverValveBLDisconnect:TriggerInput("Set",0) + self.DriverValveTLDisconnect:TriggerInput("Set",0) + end + return + end + + -- Special logic + if (button == "VDL") or (button == "KDL") or (button == "KDP") then + --self.VUD1:TriggerInput("Open",1) + end + if (button == "KDP") then + --self.DoorSelect:TriggerInput("Close",1) + end + if (button == "VUD1Set") or (button == "VUD1Toggle") or + (button == "VUD2Set") or (button == "VUD2Toggle") then + self.VDL:TriggerInput("Open",1) + self.KDL:TriggerInput("Open",1) + self.KDP:TriggerInput("Open",1) + end + + if button == "GVToggle" then + if self.GV.Value > 0.5 then + self:PlayOnce("revers_f",nil,0.7) + else + self:PlayOnce("revers_b",nil,0.7) + end + return + end + + + if (button == "UAVAToggle") then + if self.UAVA then + if self.UAVA.Value > 0.5 then + self:PlayOnce("uava_off","cabin") + else + self:PlayOnce("uava_off","cabin") + end + end + return + end +end + +function ENT:OnButtonRelease(button) + if string.find(button,"PneumaticBrakeSet") then + return + end + --if button == "KVT2Set" then self.KVT:TriggerInput("Open",1) end + if button == "KDL" and self.VUD1.Value < 1 then self.KDL:TriggerInput("Open",1) self:OnButtonRelease("KDLSet") end + if button == "KDP" and self.VUD1.Value < 1 then self.KDP:TriggerInput("Open",1) self:OnButtonRelease("KDPSet") end + if button == "VDL" and self.VUD1.Value < 1 then self.VDL:TriggerInput("Open",1) self:OnButtonRelease("VDLSet") end + if button == "KRP" then + self.KRP:TriggerInput("Set",0) + self:OnButtonRelease("KRPSet") + end + + --[[ + if (button == "PneumaticBrakeDown") and (self.Pneumatic.DriverValvePosition == 1) then + self.Pneumatic:TriggerInput("BrakeSet",2) + end + if self.Pneumatic.ValveType == 1 then + if (button == "PneumaticBrakeUp") and (self.Pneumatic.DriverValvePosition == 5) then + self.Pneumatic:TriggerInput("BrakeSet",4) + end + end + ]] + + if (not string.find(button,"KVT")) and string.find(button,"KV") then return end + if string.find(button,"KRU") then return 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 diff --git a/lua/entities/_obsolete/gmod_subway_em/shared.lua b/lua/entities/_obsolete/gmod_subway_em/shared.lua new file mode 100644 index 0000000..62c11c8 --- /dev/null +++ b/lua/entities/_obsolete/gmod_subway_em/shared.lua @@ -0,0 +1,91 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.PrintNameTranslated = "Entities.Em" +ENT.Author = "Oldy" +ENT.Contact = "oldy702@gmail.com" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" + +ENT.Spawnable = false --NOT FINISHED +ENT.AdminSpawnable = false --NOT FINISHED + +function ENT:PassengerCapacity() + return 300 +end + +function ENT:GetStandingArea() + return Vector(-450,-30,-45),Vector(380,30,-45) +end + +function ENT:InitializeSounds() + self.BaseClass.InitializeSounds(self) + self.SoundNames["relay_close2"] = nil + self.SoundNames["rvt_close"] = nil + self.SoundNames["r1_5_close"] = nil + self.SoundNames["rvt_open"] = nil + self.SoundNames["r1_5_open"] = nil + --[[self.SoundNames["relay_close4"] = {"subway_trains/new/relay_7.wav","subway_trains/new/lsd_4.wav"} + self.SoundNames["pneumo_switch"] = { + "subway_trains/pneumo_8.wav", + "subway_trains/pneumo_9.wav", + } + self.SoundNames["rk_spin"] = "subway_trains/rk_3.wav" + self.SoundNames["rk_stop"] = "subway_trains/rk_4.wav" + ]] +end + +function ENT:InitializeSystems() + -- ЭлектроÑиÑтема 81-710 + self:LoadSystem("Electric","81_704_Electric") + + -- Токоприёмник + self:LoadSystem("TR","TR_3B") + -- ЭлектротÑговые двигатели + self:LoadSystem("Engines","DK_117DM") + + -- РезиÑторы Ð´Ð»Ñ Ñ€ÐµÐ¾Ñтата/пуÑковых Ñопротивлений + self:LoadSystem("KF_47A","KF_47A") + -- РезиÑторы Ð´Ð»Ñ Ð¾ÑÐ»Ð°Ð±Ð»ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð±ÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ + self:LoadSystem("KF_50A") + -- Ящик Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñ…Ñ€Ð°Ð½Ð¸Ñ‚ÐµÐ»Ñми + self:LoadSystem("YAP_57") + + -- РезиÑторы Ð´Ð»Ñ Ñ†ÐµÐ¿ÐµÐ¹ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + --self:LoadSystem("YAS_44V") + -- РеоÑтатный контроллер Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑƒÑковыми ÑÐ¾Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð»ÐµÐ½Ð¸Ñ + self:LoadSystem("RheostatController","EKG_17B") + -- Групповой переключатель положений + self:LoadSystem("PositionSwitch","EKG_18B") + -- Кулачковый контроллер + self:LoadSystem("KV","KV_70")--_lite") + -- Контроллер резервного ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + self:LoadSystem("KRU") + + + -- Ящики Ñ Ñ€ÐµÐ»Ðµ и контакторами + self:LoadSystem("LK_755A") + self:LoadSystem("YAR_13A") + self:LoadSystem("YAR_27") + self:LoadSystem("YAK_36") + self:LoadSystem("YAK_37E") + self:LoadSystem("YAS_44V") + self:LoadSystem("YARD_2") + self:LoadSystem("PR_14X_Panels") + + -- ПневмоÑиÑтема 81-710 + self:LoadSystem("Pneumatic","81_717_Pneumatic") + self.Pneumatic.ValveType = 1 + -- Панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð• + self:LoadSystem("Panel","81_704_Panel") + -- Everything else + self:LoadSystem("Battery") + self:LoadSystem("PowerSupply","DIP_01K") + self:LoadSystem("Horn") + self:LoadSystem("Announcer") + + self:LoadSystem("ADoorDisable","Relay") + + self:LoadSystem("ALS_ARS","NoARS") +end diff --git a/lua/entities/_obsolete/gmod_subway_em508/cl_init.lua b/lua/entities/_obsolete/gmod_subway_em508/cl_init.lua new file mode 100644 index 0000000..484d955 --- /dev/null +++ b/lua/entities/_obsolete/gmod_subway_em508/cl_init.lua @@ -0,0 +1,1593 @@ +-------------------------------------------------------------------------------- +-- 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-2017 oldy (Aleksandr Kravchenko). All rights reserved. +-- - 81-703 Е (models\metrostroi_train\81-703) +-- - 81-508 Еm508 (models\metrostroi_train\81-508) +-- - 81-707 Ezh (models\metrostroi_train\81-707) +-- - 81-708 Еzh1 +-- - 81-710 Еzh3 (models\metrostroi_train\81-710) +-- - 81-508T Еm508T +-- - 81-720 Yauza (models\metrostroi_train\81-720) +-- - 81-721 Yauza (intermediate) +-- - 81-722 Yubileinyi (models\metrostroi_train\81-722) +-- - 81-723 Yubileinyi +-- - 81-724 Yubileinyi +-------------------------------------------------------------------------------- +include("shared.lua") + +-------------------------------------------------------------------------------- +ENT.ClientProps = {} +ENT.ButtonMap = {} +ENT.AutoAnims = {} +ENT.AutoAnimNames = {} +ENT.ClientSounds = {} + +ENT.ButtonMap["Lamp"] = { + pos = Vector(444.31597,-52.43482,37.93294), + ang = Angle(-8,-90+21.5,180), + width = 105, + height = 85, + scale = 0.0625, + + buttons = { + { ID = "L_3Toggle", x=15, y=15, radius=100, tooltip="Лампа: ПодÑветка приборов\nLamp: Gauges lighting", model = { + var="L_3",speed=16, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} +ENT.ButtonMap["AVU"] = { + pos = Vector(458.31597,-22.43482,32.93294), + ang = Angle(-8,-90+21.5,90+15), + width = 105, + height = 85, + scale = 0.0625, + + buttons = { + {ID = "AVULight", x=30, y=32, radius=20, tooltip="Лампа:Включен ÐВУ (ÐвтоматичеÑкий выключатель управлениÑ)\nLamp: Automatic control disabler is active", model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl", skin = 3, z = -0, + lamp = {model = "models/metrostroi_train/81/lamp_on.mdl",z = -1.6, var="AVU"} + }}, + { ID = "OtklAVUToggle", x=30, y=60, radius=20, tooltip="Отключение автоматичеÑкого Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (неиÑправноÑть ÐВУ)\nTurn off automatic control disable relay (failure of AVU)", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-2, + var="OtklAVU",speed=16, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270,x=-1,y=24,z=-2,var="OtklAVUPl", ID="OtklAVUPl",}, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} +ENT.ButtonMap["LAMPS"] = { + pos = Vector(455.349,-50.3,-12.12), + ang = Angle(0,90,-65.5), + width = 315, + height = 100, + scale = 0.0600, + + buttons = { + {ID = "SN", x=233,y=60, radius=10, tooltip="Индикатор: CÐ¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½ÐµÐ¸ÑправноÑти\nLamp: Overload relay light (overload relay open on current train)", model = {lamp = { + model = "models/metrostroi_train/81-508/508_sn_lamp.mdl", z = 0, + var=131,speed=16, color = Color(190,70,255), + }}}, + {ID = "RedRP", x=255,y=58.8, radius=10, tooltip="Индикатор: КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки\nLamp: Red overload relay light (power circuits failed to assemble)", model = {lamp = { + model = "models/metrostroi_train/81-508/508_rp1_lamp.mdl", z = 0, + var="RedRP",speed=5, color = Color(190,70,255), + getfunc = function(ent) return ent:GetPackedRatio("LRP") end, + }}}, + {ID = "SD", x=170,y=58.8, radius=20, tooltip="Индикатор: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹\nLamp: SD door state light (doors are open)", model = {lamp = { + model = "models/metrostroi_train/81-508/508_sd_lamp.mdl", z = 0, + var=40,speed=8, color = Color(180,180,50), + }}}, + {ID = "GreenRP", x=213.5, y=58.75, radius=10, tooltip="Индикатор: Ð—ÐµÐ»ÐµÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки\nLamp: Green overload relay light", model = {lamp = { + model = "models/metrostroi_train/81-508/508_rp2_lamp.mdl", z = 0, + var=36,speed=16, color = Color(50,180,180), + }}}, + {ID = "UKS", x=150, y=58.75, radius=10, tooltip="Индикатор: УÑтройÑтво ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ ÑкороÑти УКС-20М\nSpeed control device UKS-20M", model = {lamp = { + model = "models/metrostroi_train/81-508/508_uks_lamp.mdl", z = 0, + var="UKS",speed=16, + }}}, + {ID = "Red", x=130, y=58.75, radius=10, tooltip="Индикатор: Обогрев кабины\nLamp: The heater is on", model = {lamp = { + model = "models/metrostroi_train/81-508/508_red_lamp.mdl", z = 0, + var="Red",speed=16, + }}}, + {ID = "AGS", x=84, y=72, radius=10, tooltip="Лампа: Работа ÐГС (ÐвтоматичеÑкий гребне Ñмазыватель)\nLamp: AGS (Automatic Creast Greaser", model = {lamp = { + model = "models/metrostroi_train/common/lamps/svetodiod1.mdl", z = 20, color = Color(255,100,80), + var="Red",speed=16, + }}}, + } +} + +-- Main panel + +ENT.ButtonMap["AGS"] = { + pos = Vector(455.65,-44.6,-8.62), + ang = Angle(0,-90,60.44), + width = 50, + height = 50, + scale = 0.0588, + + buttons = { + { ID = "VUSToggle", x=0, y=0, w=22, h=20, tooltip="Переключатель: Ближний Ñвет/Дальний Ñвет\nSwitcher: Near Headlights(down)/Far Headlights (up)", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=2, + var="VUS",speed=16, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} + +ENT.ButtonMap["Main"] = { + pos = Vector(460.5,-30.9,-9.3), + ang = Angle(0,-90,9.44), + width = 315, + height = 240, + scale = 0.0588, + + buttons = { + ----Кнопки + { ID = "DoorSelectToggle", x=165, y=180, radius=20, tooltip="Переключатель: Выбор Ñтороны Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹\nSwitcher:Select side on which doors will open", model = { + model = "models/metrostroi_train/81-508/em508_switcher.mdl",ang = 180,z=2, + var="DoorSelect",speed=16, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + { ID = "DIPonSet", x=50.88, y=137.3, radius=20, tooltip="Вкл. ОÑв.: Включение оÑвещениÑ\nSwithcer:Turn interior lights on", model = { + model = "models/metrostroi_train/81-508/em508_button_black.mdl",ang = 180,z=0, + var="DIPon",speed=16, + sndvol = 0.10, snd = function(val) return val and "button2_on" or "button1_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + { ID = "DIPoffSet", x=50.88+38.1*1, y=137.3, radius=20, tooltip="Выкл. ОÑв.: Отключение оÑвещениÑ\nSwithcer:Turn interior lights off", model = { + model = "models/metrostroi_train/81-508/em508_button_black.mdl",ang = 180,z=0, + var="DIPoff",speed=16, + sndvol = 0.10, snd = function(val) return val and "button3_on" or "button4_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + { ID = "VozvratRPSet", x=50.88+1.4+38.1*2, y=137.3, radius=20, tooltip="ВРП: Возврат РП\nKU:Reset overload relay", model = { + model = "models/metrostroi_train/81-508/em508_button_red.mdl",ang = 180,z=0, + var="VozvratRP",speed=16, + sndvol = 0.10, snd = function(val) return val and "button4_on" or "button4_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + { ID = "KSNSet", x=50.88+1.4+38.1*3, y=137.3, radius=20, tooltip="КСÐ:Принудительное Ñрабатывание РП на неиÑправном вагоне (Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½ÐµÐ¸ÑправноÑти)\nKSN: Forced activation of the RP on the faulty wagon (Malfunction signaling)", model = { + model = "models/metrostroi_train/81-508/em508_button_red.mdl",ang = 180,z=0, + var="KSN",speed=16, + sndvol = 0.10, snd = function(val) return val and "button4_on" or "button4_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + { ID = "KRZDSet", x=50.88+2+38.1*5, y=137.3, radius=20, tooltip="КРЗД: Кнопка резервного Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹\nKRZD: Emergency door closing", model = { + model = "models/metrostroi_train/81-508/em508_button_black.mdl",ang = 180,z=-0, + var="KRZD",speed=16, + sndvol = 0.10, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + { ID = "KSDSet", x=50.88+2+38.1*4+2.2, y=137.3, radius=20, tooltip="КСД: Контроль Ñигнализации дверей(проверка СД)\nKSD: Door state controle(Door check)", model = { + model = "models/metrostroi_train/81-508/em508_button_red.mdl",ang = 180,z=0, + var="KSD",speed=16,vmin=1,vmax=0, + sndvol = 0.10, snd = function(val) return val and "button1_on" or "button1_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + { ID = "KDPSet", x=142+46, y=216, radius=20, radius=20, tooltip="КДП:Правые двери\nKDP: Right doors open", model = { + model = "models/metrostroi_train/81-508/em508_button_red.mdl",ang = 180,z=-0, + var="KDP",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 = "KDLSet", x=142, y=216, radius=20, tooltip="КДЛ: Кнопка левых дверей\nKDL: Left doors open", model = { + model = "models/metrostroi_train/81-508/em508_button_red.mdl",ang = 180,z=0, + var="KDL",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 = "RezMKSet", x=51.5, y=198, radius=20, tooltip="РМК: Резервное включение мотор-компреÑÑора\nEMC: Emergency motor-compressor enabling", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=-19, + var="RezMK",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),color = Color(78,65,38), + }}, + { ID = "KU1Toggle", x=111,y=199,radius=20, tooltip="МК: Включение мотор-компреÑÑора\nMK: Turn on motor-compressor", model = { + model = "models/metrostroi_train/81-508/em508_switcher.mdl", z=-2, + var="KU1",speed=6, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + { ID = "VUD1Toggle", x=238.6,y=198,radius=20, tooltip="ВУД: Закрытие дверей\nVUD: Door control toggle (close doors)", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=-19, + var="VUD1",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),color = Color(120,120,120), + }}, + } +} + +ENT.ButtonMap["IGLAButtons"] = { + pos = Vector(420.4,-56.1,9.87), + ang = Angle(-0,180-0.5,90), + width = 87, + height = 70, + scale = 0.0625, + buttons = { + {ID = "IGLA1USet",x=11, y=39-6, w=12, h=7, tooltip="ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вверх"}, + {ID = "IGLA1Set",x=11, y=46-6, w=12, h=7, tooltip="ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°"}, + {ID = "IGLA1DSet",x=11, y=53-6, w=12, h=7, tooltip="ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вниз"}, + {ID = "IGLA2USet",x=65, y=39-6, w=12, h=7, tooltip="ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вверх"}, + {ID = "IGLA2Set",x=65, y=46-6, w=12, h=7, tooltip="ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°"}, + {ID = "IGLA2DSet",x=65, y=53-6, w=12, h=7, tooltip="ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вниз"}, + {ID = "!IGLASR",x=17.9, y=10.5, radius=3, tooltip="ИГЛÐ: SR", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl", var="IGLASR",color=Color(175,250,20),z=-2.5}, + }}, + {ID = "!IGLARX",x=27.5, y=10.5, radius=3, tooltip="ИГЛÐ: RX", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl", var="IGLARX",color=Color(255,56,30),z=-2.5}, + }}, + {ID = "!IGLAErr",x=40.5, y=10.5, radius=3, tooltip="ИГЛÐ: Отказ", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl", var="IGLAErr",color=Color(255,168,000),z=-2.5}, + }}, + {ID = "!IGLAOSP",x=50, y=10.5, radius=3, tooltip="ИГЛÐ: ОСП", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl", var="IGLAOSP",color=Color(175,250,20),z=-2.5}, + }}, + {ID = "!IGLAPI",x=59.3, y=10.5, radius=3, tooltip="ИГЛÐ: ПИ", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl", var="IGLAPI",color=Color(255,56,30),z=-2.5}, + }}, + {ID = "!IGLAOff",x=68.3, y=10.5, radius=3, tooltip="ИГЛÐ: Откл", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl", var="IGLAOff",color=Color(255,56,30),z=-2.5}, + }}, + } +} +ENT.ButtonMap["IGLA"] = { + pos = Vector(420.4-0.65,-56.1-0.15,9.87-1.15), + ang = Angle(-0,180-0.5,90), + width = 512, + height = 128, + scale = 0.025/2.96, +} + +ENT.ButtonMap["Back1"] = { + pos = Vector(405.5,-50.9,34.0), + ang = Angle(0,90,90), + width = 280, + height = 250, + scale = 0.1088, + + buttons = { + {ID = "!ULSPM", x=121, y=71, radius=30, tooltip="УЛСПМ (УÑтвойÑтво ÑвÑзи паÑÑажир-машиниÑÑ‚)\nULSPM"}, + {ID = "!TonalARS", x=191, y=71, radius=30, tooltip="Тональное уÑтройÑтво - Звонок\nRing"}, + {ID = "!PressureRelay", x=-9, y=236, radius=50, tooltip="РегулÑтор давлениÑ\nPressure controller"}, + {ID = "!Reproductor", x=90, y=9, radius=30, tooltip="Громкоговоритель\nSpeaker"}, + {ID = "!LVFuses", x=70, y=145, w=180, h=50, tooltip="Щиток Ñ Ð½Ð¸Ð·ÐºÐ¾Ð²Ð¾Ð»ÑŒÑ‚Ð½Ñ‹Ð¼Ð¸ предохранителÑми\nShield with low-voltage fuses"}, + {ID = "R_UNchToggle", x=-30, y=20, w=100, h=140, tooltip="Питание Ñтатива РРИ\nRadioinformator control", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.mdl", z=15, ang = 180, + var="R_UNch",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,90), + }}, + } +} + +ENT.ButtonMap["Back2"] = { + pos = Vector(405.5,25.9,4.0), + ang = Angle(0,90,90), + width = 280, + height = 340, + scale = 0.1088, + + buttons = { + {ID = "!HVFuses", x=0, y=12, w=280, h=130, tooltip="Блок предохранителей\nBlock Fuse HV fuses"}, + {ID = "!Relays", x=0, y=170, w=300, h=270, tooltip="Ящик Ñ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð°Ð¼Ð¸ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð·Ð°Ñ€Ñда аккумулÑторной батареи и дверной воздухораÑпределитель\nThe box with the devices for battery recharging and door pressure diffuser"}, + {ID = "!Heater", x=280, y=170, w=80, h=300, tooltip="Печка\nThe heater"}, + } +} + +ENT.ButtonMap["Back3"] = { + pos = Vector(405.5,-20,52.0), + ang = Angle(0,90,90), + width = 500, + height = 200, + scale = 0.1088, + + buttons = { + {ID = "!RTM", x=394, y=191, radius=30, tooltip="Пульт диÑпетчерÑкой радиоÑвÑзи\nRemote radio with dispatcher"}, + {ID = "!ULSPMSpeaker", x=289, y=66, radius=40, tooltip="Блок Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ð³Ð¾Ð²Ð¾Ñ€Ð¸Ñ‚ÐµÐ»Ñ ÑвÑзи паÑÑажир-машиниÑÑ‚\nRemote radio with dispatcher"}, + {ID = "!Amplifier", x=50, y=77, radius=40, tooltip="Блок уÑÐ¸Ð»Ð¸Ñ‚ÐµÐ»Ñ Ð¿Ð¾ÐµÐ·Ð´Ð½Ð¾Ð¹ радиоÑтанции\namplifier unit of train station"}, + } +} + +--VU1 Panel +ENT.ButtonMap["VU1"] = { + pos = Vector(456+7.6,-16.7,31.2), + ang = Angle(0,270,90), + width = 120, + height = 300, + scale = 0.0625, + + buttons = { + {ID = "KRPSet", x=43, y=210, w=50, h=110, tooltip="РРП: Резервный пуÑк \nRRP: Motor emergency toggle", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=20, + var="KRP",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), color = Color(80,80,80), + }}, + } +} + + +ENT.ButtonMap["KRR"] = { + pos = Vector(402.5,-36.8,10), + ang = Angle(0,90,90), + width = 335, + height = 380, + scale = 0.0625, + + buttons = { + {ID = "KRRSet", x=170, y=120, radius=20, tooltip="KРР: Кнопка разворота реверÑоров\nKRR: Button of enabling reversors", model = { + model = "models/metrostroi_train/Equipment/button_ezh_6.mdl",z=15, + var="KRR", speed=16, min=1,max=0, + sndvol = 0.10, snd = function(val) return val and "button2_on" or "button1_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + } +} + +--VU Panel +ENT.ButtonMap["VU"] = { + pos = Vector(456+7.6,-16.15,12.0), + ang = Angle(0,270,90), + width = 100, + height = 220, + scale = 0.0625, + + buttons = { + {ID = "VUToggle", x=0, y=110, w=100, h=110, tooltip="ВУ: Выключатель УправлениÑ\nVU: Train control", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.mdl", z=20, ang = 180, + 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), color = Color(200,200,250), + }}, + + } +} + + +ENT.ButtonMap["Stopkran"] = { + pos = Vector(459+7,27,20.7), + ang = Angle(0,-90,90), + width = 200, + height = 1300, + scale = 0.1/2, + buttons = { + {ID = "EmergencyBrakeValveToggle",x=0, y=0, w=200, h=1300, tooltip="Стопкран\nEmergency brake"}, + } +} + +ENT.ButtonMap["Tsepi"] = { + pos = Vector(456+7.6,-16.15,10.5), + ang = Angle(0,273,90), + width = 85, + height = 50, + scale = 0.0625, + + buttons = { + {x=0,y=0,w=85,h=50,tooltip="ÐапрÑжение цепей управлениÑ"}, + } +} + +ENT.ButtonMap["AVMain"] = { + pos = Vector(403.5,40.8,42), + ang = Angle(0,90,90), + width = 335, + height = 380, + scale = 0.0625, + + buttons = { + {ID = "AV8BToggle", x=0, y=0, w=300, h=380, tooltip="ÐÐ’-8Б: ÐвтоматичеÑкй выключатель (Ð’Ñпомогательные цепи выÑокого напрÑжениÑ)\n", model = { + model = "models/metrostroi_train/switches/automain.mdl", z=43, ang = -90, + var="AV8B",speed=6, vmin=0.0,vmax=1, skin=2, + sndvol = 3, snd = function(val) return val and "av8_on" or "av8_off" end, + }}, + } +} +---AV1 Panel +ENT.ButtonMap["AV1"] = { + pos = Vector(403.5,41,16), + ang = Angle(0,90,90), + width = 290+0, + height = 155, + scale = 0.0625, + + buttons = { + {ID = "VU3Toggle", x=0, y=0, w=100, h=140, tooltip="ВУ3: ОÑвещение кабины\n", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.mdl", z=20, ang = 180, + var="VU3",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + {ID = "VU2Toggle", x=110, y=0, w=100, h=140, tooltip="ВУ2: Ðварийное оÑвещение\n", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.mdl", z=20, ang = 180, + var="VU2",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + {ID = "VU1Toggle", x=220, y=0, w=100, h=140, tooltip="ВУ1: Печь Ð¾Ñ‚Ð¾Ð¿Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹\n", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.mdl", z=20, ang = 180, + var="VU1",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), color = Color(150,150,150), + }}, + } +} + +ENT.ButtonMap["AV2"] = { + pos = Vector(403.5,30.40,31.1), + ang = Angle(0,90,90), + width = 180, + height = 136, + scale = 0.0625, + + buttons = { + {ID = "RSTToggle", x=0, y=0, w=100, h=136, tooltip="РСТ: РадиоÑтанциÑ\nRST: Radiostation", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.mdl", z=20, ang = 180, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270,x=-1,y=24,z=0,var="RSTPl", ID="RSTPl",}, + var="RST",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} + + +-- Battery panel +ENT.ButtonMap["Battery"] = { + pos = Vector(403.5,16,20.5), + ang = Angle(0,90,90), + width = 250, + height = 300, + scale = 0.0625, + + buttons = { + {ID = "VBToggle", x=100, y=0, w=250, h=140, tooltip="ÐБ: Выключатель аккумулÑторной батареи (Ð’Ñпомогательные цепи низкого напрÑжениÑ)\nVB: Battery on/off", model = { + model = "models/metrostroi_train/Equipment/vu22_brown_3.mdl", z=15, ang = 180, + var="VB",speed=6, + sndvol = 1, snd = function(val) return val and "vu223_on" or "vu223_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + {ID = "R_RadioToggle", x=30, y=180, w=250, h=140, tooltip="Питание радиоинформатора +50Ð’\nRadioinformator", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.mdl", z=15, ang = 180, + var="R_Radio",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} + +ENT.ButtonMap["ASNP"] = { + pos = Vector(438.59+4,-55.33-1.78,43.99), + ang = Angle(-.4,180,90), + --pos = Vector(462.77,-51.43-1.3,5.85), + --ang = Angle(-.4,230,90), + width = 220, + height = 100, + scale = 0.0625, + + buttons = { + {ID = "R_ASNPMenuSet",x=100, y=40, radius=8, tooltip = "Информатор: Меню",model = { + model = "models/metrostroi_train/81-720/button_round.mdl", + var="R_ASNPMenu",speed=12, vmin=0, vmax=0.9, + sndvol = 0.8, snd = function(val) return val and "pnm_button1_on" or "pnm_button1_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "R_ASNPUpSet",x=140, y=8, radius=8, tooltip = "Информатор: Вверх",model = { + model = "models/metrostroi_train/81-720/button_round.mdl", + var="R_ASNPUp",speed=12, vmin=0, vmax=0.9, + sndvol = 0.8, snd = function(val) return val and "pnm_button1_on" or "pnm_button1_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "R_ASNPDownSet",x=140, y=8+15, radius=8, tooltip = "Информатор: Вниз",model = { + model = "models/metrostroi_train/81-720/button_round.mdl", + var="R_ASNPDown",speed=12, vmin=0, vmax=0.9, + sndvol = 0.8, snd = function(val) return val and "pnm_button1_on" or "pnm_button1_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "R_ASNPOnToggle",x=52, y=8, radius=8, tooltip = "Информатор: Включение",model = { + model = "models/metrostroi_train/81-720/tumbler2.mdl", ang=0, z = 7, + var="R_ASNPOn",speed=12, vmin=1, vmax=0, + sndvol = 0.8, snd = function(val) return val and "pnm_on" or "pnm_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} + +ENT.ButtonMap["ASNPScreen"] = { + pos = Vector(438.59,-55.33-1.3,43.99), + ang = Angle(-.4,180,90), + width = 512, + height = 128, + scale = 0.025/3, +} + + +-- Parking brake panel +ENT.ButtonMap["ParkingBrake"] = { + pos = Vector(460,46.0,-2.0), + ang = Angle(0,-70,90), + width = 400, + height = 400, + scale = 0.0625, + + buttons = { + {ID = "ParkingBrakeLeft",x=0, y=0, w=200, h=400, tooltip="Поворот колеÑа ручного тормоза"}, + {ID = "ParkingBrakeRight",x=200, y=0, w=200, h=400, tooltip="Поворот колеÑа ручного тормоза"}, + } +} + +-- Train driver helpers panel +ENT.ButtonMap["HelperPanel"] = { + pos = Vector(452.5,61.5,18.44), + ang = Angle(0,-17.5,90), + width = 60, + height = 200, + scale = 0.0625, + + buttons = { + {ID = "R_Program1Set", x=12, y=200, radius=30, tooltip="Программа 1\nProgram 1", model = { + model = "models/metrostroi_train/81-703/cabin_button_black.mdl", z=-26, color = Color(255,255,255), + var="R_Program1",speed=6, + sndvol = 1, snd = function(val) return val and "pnm_button1_on" or "pnm_button1_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "R_Program2Set", x=47, y=200, radius=30, tooltip="Программа 2\nProgram 2", model = { + model = "models/metrostroi_train/81-703/cabin_button_black.mdl", z=-26, color = Color(255,255,255), + var="R_Program2",speed=6, + sndvol = 1, snd = function(val) return val and "pnm_button1_on" or "pnm_button1_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "VDLSet", x=30, y=42, radius=30, tooltip="ВДЛ: Выключатель левых дверей\nVDL: Left doors open", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=-3, color = Color(255,255,255), + var="VDL",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 = "VUD2Toggle", x=30, y=138, radius=30, tooltip="ВУД2: Выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÑŒÐ¼Ð¸\nVUD2: Door control toggle (close doors)", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=-3, color = Color(255,255,255), + var="VUD2",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), + }}, + } +} + + +-- Pneumatic instrument panel 2 +ENT.ButtonMap["PneumaticManometer"] = { + pos = Vector(451.73+7.6,-54,14.04), + ang = Angle(0,-144,90), + width = 76, + height = 70, + scale = 0.0625, + + buttons = { + {ID = "!LinesPressure", x=68,y=65,radius=68,tooltip="Давление в магиÑтралÑÑ… (краÑнаÑ: тормозной, чёрнаÑ: напорной)\nPressure in pneumatic lines (red: brake line, black: train line)"}, + } +} +-- Pneumatic instrument panel +ENT.ButtonMap["PneumaticPanels"] = { + pos = Vector(454.07+7.6,-50.11,5.9), + ang = Angle(0,-90-27,90), + + width = 76, + height = 70, + scale = 0.0625, + + buttons = { + {ID = "!CylinderPressure", x=38,y=35,radius=35,tooltip="Тормозной манометр: Давление в тормозных цилиндрах (ТЦ)\nBrake cylinder pressure"}, + } +} +ENT.ButtonMap["DriverValveBLDisconnect"] = { + pos = Vector(443.5+7,-53,-37.61), + ang = Angle(-90,0,0), + width = 200, + height = 90, + scale = 0.0625, + + buttons = { + {ID = "DriverValveBLDisconnectToggle", x=0, y=0, w=95, h=100, tooltip="Кран двойной Ñ‚Ñги тормозной магиÑтрали\nTrain line disconnect valve", model = { + var="DriverValveBLDisconnect",sndid="brake_disconnect", + sndvol = 1, snd = function(val) return "disconnect_valve" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} +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=75, h=100, tooltip="Кран двойной Ñ‚Ñги напорной магиÑтрали\nBrake line disconnect valve", model = { + var="DriverValveTLDisconnect",sndid="train_disconnect", + sndvol = 1, snd = function(val) return val and "pneumo_TL_open" or "pneumo_TL_disconnect" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} +ENT.ButtonMap["Meters"] = { + pos = Vector(461.65213,-56.696617,37.528275), + ang = Angle(0,-148,90), + width = 73, + height = 140, + scale = 0.0625, + + buttons = { + {x=13, y=22, w=60, h=50, tooltip="Вольтметр выÑокого напрÑÐ¶ÐµÐ½Ð¸Ñ (кВ)\nHV voltmeter (kV)"}, + {x=13, y=81, w=60, h=50, tooltip="Ðмперметр (Ð)\nTotal ampermeter (A)"}, + } +} + + +-- Temporary panels (possibly temporary) +ENT.ButtonMap["FrontPneumatic"] = { + pos = Vector(468+7,-45.0,-59.9), + ang = Angle(0,90,90), + width = 900, + height = 100, + scale = 0.1, + buttons = { + {ID = "FrontBrakeLineIsolationToggle",x=150, y=50, radius=32, tooltip="Концевой кран тормозной магиÑтрали"}, + {ID = "FrontTrainLineIsolationToggle",x=750, y=50, radius=32, tooltip="Концевой кран напорной магиÑтрали"}, + } +} +ENT.ButtonMap["RearPneumatic"] = { + pos = Vector(-468-7,45.0,-59.9), + ang = Angle(0,270,90), + width = 900, + height = 100, + scale = 0.1, + buttons = { + {ID = "RearTrainLineIsolationToggle",x=150, y=50, radius=32, tooltip="Концевой кран напорной магиÑтрали"}, + {ID = "RearBrakeLineIsolationToggle",x=750, y=50, radius=32, tooltip="Концевой кран тормозной магиÑтрали"}, + } +} +ENT.ButtonMap["GV"] = { + pos = Vector(139,66,-54), + ang = Angle(0,180,90), + width = 170, + height = 170, + scale = 0.1, + buttons = { + {ID = "GVToggle",x=0, y=0, w= 170,h = 150, 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, + }}, + } +} +ENT.ButtonMap["AirDistributor"] = { + pos = Vector(-168,68.6,-50), + ang = Angle(0,180,90), + width = 170, + height = 80, + scale = 0.1, + buttons = { + {ID = "AirDistributorDisconnectToggle",x=0, y=0, w= 170,h = 80, tooltip="Выключение воздухораÑпределителÑ"}, + } +} + + +-- UAVA +ENT.ButtonMap["UAVAPanel"] = { + pos = Vector(444+5,56,-5), + ang = Angle(0,-70,90), + width = 230, + height = 170, + scale = 0.0625, + + buttons = { + {ID = "UAVAToggle",x=0, y=0, w=230/2, h=170, tooltip="УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа (отключение автоÑтопа)\nUAVA: Universal Automatic Autostop Disabler (autostop disable)", model = { + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=-20,x=6,y=65,z=-122,var="UAVAPl", ID="UAVAPl",}, + var="UAVA", + sndid="UAVALever",sndvol = 1, snd = function(val) return val and "uava_on" or "uava_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "UAVAContactSet",x=230/2, y=0, w=230/2, h=170, tooltip="УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа (воÑÑтановление контактов)\nUAVA: Universal Automatic Autostop Disabler(contacts reset)"}, + } +} + + + +for i=0,4 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, + } +end +for i=0,4 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, + } +end + +ENT.ButtonMap["InfoTableSelect"] = { + pos = Vector(455+7.0,35,14.0), + ang = Angle(0,-90,90), + width = 400, + height = 100, + scale = 0.1, + + + buttons = { + {ID = "PrevSign",x=300,y=0,w=50,h=100, tooltip="ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð½Ð°Ð´Ð¿Ð¸ÑÑŒ\nPrevious sign"}, + {ID = "NextSign",x=350,y=0,w=50,h=100, tooltip="Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð½Ð°Ð´Ð¿Ð¸ÑÑŒ\nNext sign"}, + + {ID = "Num2P",x=0,y=0,w=50,h=50, tooltip="Маршрут: Увеличить чиÑло 2\nRoute: Increase 2nd number"}, + {ID = "Num2M",x=0,y=50,w=50,h=50, tooltip="Маршрут: Уменьшить чиÑло 2\nRoute: Decrease 2nd number"}, + {ID = "Num1P",x=50,y=0,w=50,h=50, tooltip="Маршрут: Увеличить чиÑло 1\nRoute: Increase 1st number"}, + {ID = "Num1M",x=50,y=50,w=50,h=50, tooltip="Маршрут: Уменьшить чиÑло 1\nRoute: Decrease 1st number"}, + } +} + + +ENT.ButtonMap["Front"] = { + pos = Vector(468,16,43.4), + ang = Angle(0,-90,90), + width = 642, + height = 1780, + scale = 0.1/2, + buttons = { + {ID = "FrontDoor",x=0,y=0,w=642,h=1900, tooltip="ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ\nFront door", 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), + }}, + } +} + +ENT.ButtonMap["CabinDoor"] = { + pos = Vector(416,64,43.4), + ang = Angle(0,0,90), + width = 642, + height = 1780, + scale = 0.1/2, + buttons = { + {ID = "CabinDoor",x=0,y=0,w=642,h=2000, tooltip="Дверь в кабину машиниÑта\nCabin door", 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), + }}, + } +} + +ENT.ButtonMap["PassengerDoor"] = { + pos = Vector(384,-16,43.4), + ang = Angle(0,90,90), + width = 642, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=642,h=2000, tooltip="Дверь в кабину машиниÑта из Ñалона\nPass door", 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), + }}, + } +} +ENT.ButtonMap["PassengerDoor1"] = { + pos = Vector(384,16,43.4), + ang = Angle(0,-90,90), + width = 642, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=642,h=2000, tooltip="Дверь в кабину машиниÑта из Ñалона\nPass door", 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), + }}, + } +} + +ENT.ButtonMap["Back"] = { + pos = Vector(-470,-15,43.4), + ang = Angle(0,90,90), + width = 642, + height = 1780, + scale = 0.1/2, + buttons = { + {ID = "BackDoor",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), + }}, + } +} + +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(448.62+7.6,-51.69,-3.0), + ang = Angle(0,-133,0), +} +ENT.ClientProps["controller"] = { + model = "models/metrostroi_train/81-707/kv_ezh.mdl", + pos = Vector(451.36+6.4,-24.73,-3.5), + ang = Angle(0,180+15,0) +} + +ENT.ClientProps["reverser"] = { + model = "models/metrostroi/81-717/reverser.mdl", + pos = Vector(451.36+7.6,-23.43,-4.7), + ang = Angle(0,45,90) +} +ENT.ClientProps["brake_disconnect"] = { + model = "models/metrostroi_train/81-707/cran1.mdl", + pos = Vector(441.0+8.2,-55.30,-33.91), + ang = Angle(0,92,-90), +} + +ENT.ClientProps["train_disconnect"] = { + model = "models/metrostroi_train/81-707/cran3.mdl", + pos = Vector(444.482483+8.4,-50.746734,-27.333017), + ang = Angle(90,-100,90), +} +ENT.ClientProps["parking_brake"] = { + model = "models/metrostroi_train/81-703/cabin_parking.mdl", + pos = Vector(449.118378+7.6,33.493385,-14.713276), + ang = Angle(-90.000000,8.000000,0.000000), +} + +-------------------------------------------------------------------------------- +ENT.ClientProps["train_line"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(448.20+7.87,-50.91-4,12.1), + ang = Angle(-90,-90-48,90) +} +ENT.ClientProps["brake_line"] = { + model = "models/metrostroi_train/Equipment/arrow_tm.mdl", + pos = Vector(448.20+7.89,-50.94-4,12.1), + ang = Angle(-90,-90-48,90) +} + +ENT.ClientProps["brake_cylinder"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(453.199+7.4,-52.52,2.73000), + ang = Angle(222,80,-90.000000), +} +---------------------------------------------------------------- +ENT.ClientProps["voltmeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(450.284607+6.0,-56.887834,26.5+0), + ang = Angle(-90,0,-60) +} + +ENT.ClientProps["ampermeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(450.284607+5.9,-56.987834,30.5+0.4), + ang = Angle(-90,0,-60) +} + +ENT.ClientProps["volt1"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(458.81455+4.2,-19.63349,7.95662-1+0.4), + ang = Angle(-90,0,0), +} + +-------------------------------------------------------------------------------- +ENT.ClientProps["gv"] = { + model = "models/metrostroi/81-717/gv.mdl", + pos = Vector(130,62.5,-65), + ang = Angle(-90,0,-90) +} +ENT.ClientProps["gv_wrench"] = { + model = "models/metrostroi/81-717/reverser.mdl", + pos = Vector(130,62.5,-65), + ang = Angle(0,0,0) +} + + ENT.ButtonMap["InfoTableSelect"] = { + pos = Vector(464.0,15,22.0), + ang = Angle(0,-90,90), + width = 550, + height = 100, + scale = 0.1, + + + buttons = { + {ID = "PrevSign",x=0,y=0,w=50,h=100, tooltip="ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð½Ð°Ð´Ð¿Ð¸ÑÑŒ\nPrevious sign"}, + {ID = "NextSign",x=50,y=0,w=50,h=100, tooltip="Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð½Ð°Ð´Ð¿Ð¸ÑÑŒ\nNext sign"}, + + {ID = "Num2P",x=450,y=0,w=50,h=50, tooltip="Маршрут: Увеличить чиÑло 2\nRoute: Increase 2nd number"}, + {ID = "Num2M",x=450,y=50,w=50,h=50, tooltip="Маршрут: Уменьшить чиÑло 2\nRoute: Decrease 2nd number"}, + {ID = "Num1P",x=500,y=0,w=50,h=50, tooltip="Маршрут: Увеличить чиÑло 1\nRoute: Increase 1st number"}, + {ID = "Num1M",x=500,y=50,w=50,h=50, tooltip="Маршрут: Уменьшить чиÑло 1\nRoute: Decrease 1st number"}, + } +} + +ENT.ClientProps["Ema_salon"] = { + model = "models/metrostroi_train/81-508/81-508_salon.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0) +} +ENT.ClientProps["E_informator"] = { + model = "models/metrostroi_train/81-703/703_asotp.mdl", + pos = Vector(7,1.5,2), + ang = Angle(0,0,0) + } +ENT.ClientProps["tab"] = { + model = "models/metrostroi_train/Equipment/tab.mdl", + pos = Vector(-0.0,0,-0), + ang = Angle(0,0,0), + skin = 2, + } +ENT.ClientProps["route"] = { + model = "models/metrostroi_train/common/routes/ezh/route_holder.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0) +} + ENT.ClientProps["route1"] = { + model = "models/metrostroi_train/common/routes/ezh/route_number1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0) +} + ENT.ClientProps["route2"] = { + model = "models/metrostroi_train/common/routes/ezh/route_number2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0) + } +ENT.ClientProps["Ema_salon2"] = { + model = "models/metrostroi_train/81-508/81-508_underwagon.mdl", + pos = Vector(0,1,-18), + ang = Angle(0,0,0) +} +ENT.ClientProps["Lamps_emer"] = { + model = "models/metrostroi_train/81-508/81-508_lamps_emer.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), +} +ENT.ClientProps["Lamps_full"] = { + model = "models/metrostroi_train/81-508/81-508_lamps.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), +} + +ENT.ClientProps["FrontBrake"] = {-- + model = "models/metrostroi_train/81/tmiso.mdl", + pos = Vector(445+7, -30, -68), + ang = Angle(0,-90,0) +} +ENT.ClientProps["FrontTrain"] = {-- + model = "models/metrostroi_train/81/nmsio.mdl", + pos = Vector(445+7, 30, -68), + ang = Angle(0,-90,0) +} +ENT.ClientProps["RearBrake"] = {-- + model = "models/metrostroi_train/81/tmiso.mdl", + pos = Vector(-450-6, -30, -68), + ang = Angle(0,90,0) +} +ENT.ClientProps["RearTrain"] = {-- + model = "models/metrostroi_train/81/nmsio.mdl", + pos = Vector(-450-6, 30, -68), + ang = Angle(0,90,0) +} +----Циферблат +ENT.ClientProps["speedo1"] = { + model = "models/metrostroi_train/81-508/digit.mdl", + pos = Vector(456.79,-39.0,-8.93), + ang = Angle(113,0,0), + color = Color(255,170,60), +} +ENT.ClientProps["speedo2"] = { + model = "models/metrostroi_train/81-508/digit.mdl", + pos = Vector(456.79,-39.0+0.44,-8.93), + ang = Angle(113,0,0), + color = Color(255,170,60), +} + + +-------------------------------------------------------------------------------- +-- 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-508/81-508_door_right.mdl", + pos = GetDoorPosition(i,k,0), + ang = Angle(0,90 + 180*k,0) + } + ENT.ClientProps["door"..i.."x"..k.."b"] = { + model = "models/metrostroi_train/81-508/81-508_door_left.mdl", + pos = GetDoorPosition(i,k,1), + ang = Angle(0,90 + 180*k,0) + } + end +end +ENT.ClientProps["door1"] = { + model = "models/metrostroi_train/81-508/81-508_door_front.mdl", + pos = Vector(460.62+7.4,-14.53,-7.23), + ang = Angle(0,-90,0), +} +ENT.ClientProps["door2"] = { + model = "models/metrostroi_train/81-508/81-508_door_front.mdl", + pos = Vector(-462.6-8,16.53,-7.24), + ang = Angle(0,90,0), +} +ENT.ClientProps["door3"] = { + model = "models/metrostroi_train/81-508/81-508_door_pass.mdl", + pos = Vector(396.7-13.2,-15.0,-13), + ang = Angle(0,90,0), +} +ENT.ClientProps["door4"] = { + model = "models/metrostroi_train/81-508/81-508_door_cab.mdl", + pos = Vector(411.17+7.6,66.05,-6.38), + ang = Angle(0,-90,0), +} +ENT.ClientProps["UAVALever"] = { + model = "models/metrostroi_train/81-703/cabin_uava.mdl", + pos = Vector(449+7.7,56.0,-10.24349), + ang = Angle(0,-90,90) +} + +ENT.ClientProps["RedLights"] = { + model = "models/metrostroi_train/81-703/81-703_red_light.mdl", + pos = Vector(-23+7.2,1,-191), + ang = Angle(0,0,0.000000), +} +ENT.ClientProps["DistantLights"] = { + model = "models/metrostroi_train/81-703/81-703_projcetor_light.mdl", + pos = Vector(-23+8.2,1,-191), + ang = Angle(00.000000,0.000000,0.000000), +} +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), +} + +ENT.Lights = { + [1] = { "headlight", Vector(475,0,-20), Angle(0,0,0), Color(169,130,88), brightness = 2 ,fov = 90 }, + [22] = { "headlight", Vector(432,-45,45.2), Angle(90,0,0), Color(255,125,25), hfov=90, vfov=90,farz=66,brightness = 9,shadows = 1, texture = "effects/flashlight/soft"}, +} +function ENT:Initialize() + self.BaseClass.Initialize(self) + --self.Train:SetPackedRatio("EmergencyValve_dPdT", leak) + --self.Train:SetPackedRatio("EmergencyValveEPK_dPdT", leak) + --self.Train:SetPackedRatio("EmergencyBrakeValve_dPdT", leak) + self.ASNP = self:CreateRT("717ASNP",512,128) + self.IGLA = self:CreateRT("717IGLA",512,128) + self.CraneRamp = 0 + self.ReleasedPdT = 0 + self.EmergencyValveRamp = 0 + self.EmergencyValveEPKRamp = 0 + self.EmergencyBrakeValveRamp = 0 +end + +function ENT:UpdateTextures() + self.Texture = self:GetNW2String("texture") + self.PassTexture = self:GetNW2String("passtexture") + self.CabinTexture = self:GetNW2String("cabtexture") + + self.Number = self:GetWagonNumber() + self.LastStation = self:GetNW2Int("LastStation") + + self.RouteNumber = self:GetNW2String("RouteNumber","00") + + local texture = Metrostroi.Skins["train"][self.Texture] + local passtexture = Metrostroi.Skins["pass"][self.PassTexture] + local cabintexture = Metrostroi.Skins["cab"][self.CabinTexture] + for _,ent in pairs(self.ClientEnts) do + if not IsValid(ent) then continue end + for k,v in pairs(ent:GetMaterials()) do + local tex = string.Explode("/",v) + tex = tex[#tex] + if cabintexture and cabintexture.textures[tex] then + ent:SetSubMaterial(k-1,cabintexture.textures[tex]) + end + if passtexture and passtexture.textures[tex] then + ent:SetSubMaterial(k-1,passtexture.textures[tex]) + end + if texture and texture.textures[tex] then + ent:SetSubMaterial(k-1,texture.textures[tex]) + end + end + end + + local count = math.max(4,math.ceil(math.log10(self.Number))) + for i=0,4 do + self:ShowHide("TrainNumberL"..i,i 0,self:GetPackedRatio("Headlight")) + if IsValid(self.GlowingLights[1]) then + self.GlowingLights[1]:SetEnableShadows(true) + 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 val = self.Anims["gauges_lit"] and self.Anims["gauges_lit"].value^3 or 0 + self:SetLightPower(22,val>0,val)--self:GetPackedBool("PanelLights")) + + --print(self.FrontDoor,self:GetPackedBool(114)) + --print(self.RearDoor,self:GetPackedBool(156)) + --[[ + if self.FrontDoor < 90 and self:GetPackedBool(157) or self.FrontDoor > 0 and not self:GetPackedBool(157) then + --local FrontDoorData = self.ClientProps["door1"] + --FrontDoor:SetLocalPos(FrontDoorData.pos + Vector(-2,-0,0)) + self.FrontDoor = math.max(0,math.min(90,self.FrontDoor + (self:GetPackedBool(157) and 1 or -1)*self.DeltaTime*180)) + self:ApplyMatrix("door1",Vector(0,-16,0),Angle(0,self.FrontDoor,0)) + if not self.ButtonMapMatrix["InfoTable"] then + self.ButtonMapMatrix["InfoTable"] = {} + self.ButtonMapMatrix["InfoTable"].scale = 0.1/2 + end + self.ButtonMapMatrix["InfoTable"].ang = Angle(0,90+self.FrontDoor,90) + self.ButtonMapMatrix["InfoTable"].pos = Vector(458.0,-16.0,12.0) + Vector(0,1.5,0)*self.FrontDoor/90 + + end + ]] + local transient = (self.Transient or 0)*0.05 + if (self.Transient or 0) ~= 0.0 then self.Transient = 0.0 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 Lamps = self:GetPackedBool(20) and 0.6 or 1 + self:ShowHideSmooth("Lamps_emer",self:Animate("lamps_emer",self:GetPackedBool("Lamps_emer") and Lamps or 0,0,1,6,false)) + self:ShowHideSmooth("Lamps_full",self:Animate("lamps_full",self:GetPackedBool("Lamps_full") and Lamps or 0,0,1,6,false)) + self:ShowHideSmooth("Gauges_lit",self:Animate("gauges_lit",(self:GetPackedBool("L_3") and self:GetPackedBool("VB")) and 1 or 0,0,1,12,false)) + + self:Animate("KRR", self:GetPackedBool("KRR") and 0 or 1,0,1, 16, false) + self:Animate("KRP", self:GetPackedBool(113) and 1 or 0,0,1, 16, false) + + + self:ShowHideSmooth("RedLights",self:Animate("redlights",self:GetPackedBool("RedLight") and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("WhiteLights",self:Animate("whitelights",self:GetPackedBool("HeadLights2") and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("DistantLights",self:Animate("distantlights",self:GetPackedBool("HeadLights1") and 1 or 0,0,1,5,false)) + + self:Animate("brake_disconnect",self:GetPackedBool("DriverValveBLDisconnect") and 0 or 1,0.25,0.5, 4,false) + self:Animate("train_disconnect",self:GetPackedBool("DriverValveTLDisconnect") and 1 or 0,0.25,0, 4,false) + + self:Animate("UAVALever", self:GetPackedBool(152) and 0 or 1, 0,0.25, 128, 3,false) + + + + -- Simulate pressure gauges getting stuck a little + self:Animate("brake", 1-self:GetPackedRatio(0), 0.00, 0.48, 256,24) + self:Animate("controller", self:GetPackedRatio(1), 0, 0.31, 2,false) + self:Animate("reverser", self:GetPackedRatio(2), 0.26, 0.35, 4,false) + self:Animate("volt1", self:GetPackedRatio(10), 0.6,0.5,45,3) + self:ShowHide("reverser", self:GetPackedBool(0)) + + self:Animate("brake_line", self:GetPackedRatio(4), 0.133, 0.907, 359,3)--,,0.01) + self:Animate("train_line", self:GetPackedRatio(5)-transient, 0.133, 0.907, 359,3)--,,0.01) + self:Animate("brake_cylinder", self:GetPackedRatio(6), 0, 0.95, 359,3)--,,0.03) + self:Animate("voltmeter", self:GetPackedRatio(7), 0.632,0.36,92,2) + self:Animate("ampermeter", self:GetPackedRatio(8), 0.632,0.36, nil, nil, 92,20,3) + + + local door1 = self:Animate("door1", self:GetPackedBool(157) and 0.99 or 0,0,0.22, 1024, 1) + local door2 = self:Animate("door2", self:GetPackedBool(156) and 0.99 or 0,0,0.25, 1024, 1) + local door3 = self:Animate("door3", self:GetPackedBool(158) and 0.99 or 0,1,0.79, 1024, 1) + local door4 = self:Animate("door4", self:GetPackedBool(159) and 0.99 or 0,1,0.77, 1024, 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 > 0) then + self.Door3 = door3 > 0 + self:PlayOnce("door3","bass",self.Door3 and 1 or 0) + end + if self.Door4 ~= (door4 > 0) then + self.Door4 = door4 > 0 + self:PlayOnce("door4","bass",self.Door4 and 1 or 0) + end + + self:Animate("FrontBrake", self:GetNW2Bool("FbI") and 0 or 1,0,0.35, 3, false) + self:Animate("FrontTrain", self:GetNW2Bool("FtI") and 0 or 1,0,0.35, 3, false) + self:Animate("RearBrake", self:GetNW2Bool("RbI") and 1 or 0,0,0.35, 3, false) + self:Animate("RearTrain", self:GetNW2Bool("RtI") and 1 or 0,0,0.35, 3, false) + + self:ShowHideSmooth("AVULight_light",self:Animate("AVUl",self:GetPackedBool(38) and 1 or 0,0,1,10,false)) + + -- Main switch + if self.LastValue ~= self:GetPackedBool(5) then + self.ResetTime = CurTime()+1.5 + self.LastValue = self:GetPackedBool(5) + end + self:Animate("gv_wrench", (self:GetPackedBool(5) and 1 or 0), 0,0.51, 128, 1,false) + self:ShowHide("gv_wrench", CurTime() < self.ResetTime) + + ---BIG Digits + if self:GetPackedBool(32) then + local speed = self:GetPackedRatio("Speed")*100.0 + if IsValid(self.ClientEnts["speedo1"])then + self.ClientEnts["speedo1"]:SetSkin(math.floor(speed)%10) + end + if IsValid(self.ClientEnts["speedo2"])then + self.ClientEnts["speedo2"]:SetSkin(math.floor(speed/10)) + end + end + + self:ShowHide("speedo1",self:GetPackedBool(32)) + self:ShowHide("speedo2",self:GetPackedBool(32)) + + -- Animate doors +--self:InitializeSounds() + 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.8+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 + + -- Door transient + if (self.Transient or 0) ~= 0.0 then self.Transient = 0.0 end + local door_state1 = self:GetPackedBool(21) + local door_state2 = self:GetPackedBool(25) + if door_state1 ~= self.PrevDoorState1 then + self.PrevDoorState1 = door_state1 + self.Transient = 1.00 + end + if door_state2 ~= self.PrevDoorState2 then + self.PrevDoorState2 = door_state2 + self.Transient = 1.00 + end + + local dT = self.DeltaTime + local speed = self:GetPackedRatio("Speed")*100.0 + local rol10 = math.Clamp(speed/12,0,1)*(1-math.Clamp((speed-25)/8,0,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_10",rol10,0.6) + self:SetSoundState("rolling_40",rol40,rol40p) + self:SetSoundState("rolling_70",rol70,rol70p) + self:SetSoundState("rolling_80",rol80,rol80p) + --[[ + local sign = 1 + if dPdT < 0 then sign = -1 end + if self.PrevDpSign ~= sign then + self.PrevDpSign = sign + self:SetSoundState("release",0.0,0.0) + end]] + + + local dT = self.DeltaTime + local threshold = 0.01 + local dPdT = self:GetPackedRatio("BrakeCylinderPressure_dPdT") + self.ReleasedPdT = math.Clamp(self.ReleasedPdT + 4*(-self:GetPackedRatio("BrakeCylinderPressure_dPdT",0)-self.ReleasedPdT)*dT,0,1) + --print(dPdT) + self:SetSoundState("release1",math.Clamp(self.ReleasedPdT,0,1)^1.65,1.0) + + if self:GetPackedBool(22) then + self.CraneRamp = self.CraneRamp + 1.0*((0.9*self:GetPackedRatio("Crane_dPdT",0))-self.CraneRamp)*dT + self:SetSoundState("crane334_brake",0,1.0) + self:SetSoundState("crane334_brake_slow",0,1.0) + self:SetSoundState("crane334_release",0,1.0) + else + self.CraneRamp = math.Clamp(self.CraneRamp + 8.0*((1*self:GetPackedRatio("Crane_dPdT",0))-self.CraneRamp)*dT,-1,1) + self:SetSoundState("crane334_brake",math.Clamp(((-self.CraneRamp)-0.5)/0.5,0,1),1.0) + self:SetSoundState("crane334_brake_slow",math.Clamp((-self.CraneRamp)*2,0,1),1.0) + self:SetSoundState("crane334_release",math.Clamp(self.CraneRamp,0,1),1.0) + end + local emergencyValveEPK = self:GetPackedRatio("EmergencyValveEPK_dPdT", 0) + self.EmergencyValveEPKRamp = math.Clamp(self.EmergencyValveEPKRamp + 1.0*((0.5*emergencyValveEPK)-self.EmergencyValveEPKRamp)*dT,0,1) + self:SetSoundState("epk_brake",self.EmergencyValveEPKRamp,1.0) + if emergencyValveEPK > 0 and not self.EmergencyValveEPKStart then + self:PlayOnce("epk_brake_start","bass",1,1) + self.EmergencyValveEPKStart = true + end + if emergencyValveEPK <= 0 and self.EmergencyValveEPKStart then + self.EmergencyValveEPKStart = false + end + + local emergencyBrakeValve = self:GetPackedRatio("EmergencyBrakeValve_dPdT", 0) + self.EmergencyBrakeValveRamp = math.Clamp(self.EmergencyBrakeValveRamp + 1.0*((0.5*emergencyBrakeValve)-self.EmergencyBrakeValveRamp)*dT,0,1) + self:SetSoundState("valve_brake",self.EmergencyBrakeValveRamp,1.0) + if emergencyBrakeValve > 0 and not self.EmergencyBrakeValveStart then + self:PlayOnce("valve_brake_start","bass",1,1) + self.EmergencyBrakeValveStart = true + end + if emergencyBrakeValve <= 0 and self.EmergencyBrakeValveStart then + self.EmergencyBrakeValveStart = false + end + self:SetSoundState("pneumo_idle",math.min(1,self:GetPackedRatio(4)/50*(self:GetPackedBool(6) and 1 or 0)),1.0) + + local emergencyValve = self:GetPackedRatio("EmergencyValve_dPdT", 0) + self.EmergencyValveRamp = math.Clamp(self.EmergencyValveRamp + 1.0*((0.5*emergencyValve)-self.EmergencyValveRamp)*dT,0,1) + self:SetSoundState("emer_brake",self.EmergencyValveRamp,1.0) + if emergencyValve > 0 and not self.EmergencyValveStart then + self:PlayOnce("emer_brake_start","bass",1,1) + self.EmergencyValveStart = true + end + if emergencyValve <= 0 and self.EmergencyValveStart then + self.EmergencyValveStart = false + end + + + -- Compressor + local state = self:GetPackedBool(20) + self:SetSoundState("compressor",state and 0.6 or 0,1) + -- ARS/ringer alert + state = self:GetPackedBool(39) + if state then + self:SetSoundState("ring_old",0.05,0.75) + else + self:SetSoundState("ring_old",0,0) + end + + state = self:GetPackedBool("VPR") + if state then + self:SetSoundState("vpr",1,1) + else + self:SetSoundState("vpr",0,0) + end + + -- RK rotation + if self:GetPackedBool(112) then self.RKTimer = CurTime() end + state = (CurTime() - (self.RKTimer or 0)) < 0.2 + self:SetSoundState("rk",state and 0.7 or 0,1) + + local work = self:GetNW2Bool("ASNPPlay") + local playing = self:GetNW2Bool("AnnouncerPlaying", false) + self.NoiseVolume = self.NoiseVolume or 0 + local buzzvolume = 0 + if self.Sounds["announcer1"] and IsValid(self.Sounds["announcer1"]) then buzzvolume = (1-(self.Sounds["announcer1"]:GetLevel())*math.Rand(0.9,3))*1 end + if self.NoiseVolume > buzzvolume then + self.NoiseVolume = math.Clamp(self.NoiseVolume + 8*(buzzvolume-self.NoiseVolume)*dT,0.1,1) + else + self.NoiseVolume = math.Clamp(self.NoiseVolume + 0.5*(buzzvolume-self.NoiseVolume)*dT,0.1,1) + end + for k,v in ipairs(self.AnnouncerPositions) do + local play = playing and work + for i=1,2 do + self:SetSoundState(Format("announcer_noise%d_%d",i,k),play and self.NoiseVolume or 0,1) + end + if self.Sounds["announcer"..k] and IsValid(self.Sounds["announcer"..k]) then self.Sounds["announcer"..k]:SetVolume(play and 1 or 0) end + end +end + +function ENT:Draw() + self.BaseClass.Draw(self) +end +function ENT:DrawPost(special) + --local dc = render.GetLightColor(self:LocalToWorld(Vector(460.0,0.0,5.0))) + +if self.InfoTableTimeout and (CurTime() < self.InfoTableTimeout) then + self:DrawOnPanel("InfoTableSelect",function() + local text = self:GetNW2String("FrontText","") + local col = text:find("ЗЕЛ") and Color(100,200,0) or text:find("СИÐ") and Color(0,100,200) or text:find("МÐЛ") and Color(200,100,200) or text:find("ОРÐ") and Color(200,200,0) or text:find("БИР") and Color(48,213,200) or Color(255,0,0) + draw.DrawText(self:GetNW2String("RouteNumber","") .. " " .. text,"MetrostroiSubway_InfoPanel",260, -100,col,TEXT_ALIGN_CENTER) + end) + end + + + self.RTMaterial:SetTexture("$basetexture", self.ASNP) + self:DrawOnPanel("ASNPScreen",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(256,64,512,128,0) + end) + + self.RTMaterial:SetTexture("$basetexture", self.IGLA) + self:DrawOnPanel("IGLA",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(256,64+22,512,128+22,0) + end) + self:DrawOnPanel("FrontPneumatic",function() + draw.DrawText(self:GetNW2Bool("FbI") and "Isolated" or "Open","Trebuchet24",150,30,Color(0,0,0,255)) + draw.DrawText(self:GetNW2Bool("FtI") and "Isolated" or "Open","Trebuchet24",650,30,Color(0,0,0,255)) + end) + self:DrawOnPanel("RearPneumatic",function() + draw.DrawText(self:GetNW2Bool("RtI") and "Isolated" or "Open","Trebuchet24",150,30,Color(0,0,0,255)) + draw.DrawText(self:GetNW2Bool("RbI") and "Isolated" or "Open","Trebuchet24",650,30,Color(0,0,0,255)) + end) + 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) + if button == "ShowHelp" then + RunConsoleCommand("metrostroi_train_manual") + end + if button == "PrevSign" then + self.InfoTableTimeout = CurTime() + 2.0 + end + if button == "NextSign" then + self.InfoTableTimeout = CurTime() + 2.0 + end + + if button and button:sub(1,3) == "Num" then + self.InfoTableTimeout = CurTime() + 2.0 + end +end + +function ENT:OnButtonPressed(button) + if button == "ShowHelp" then + RunConsoleCommand("metrostroi_train_manual") + end + + if button == "PrevSign" then + self.InfoTableTimeout = CurTime() + 2.0 + end + if button == "NextSign" then + self.InfoTableTimeout = CurTime() + 2.0 + end + + if button and button:sub(1,3) == "Num" then + self.InfoTableTimeout = CurTime() + 2.0 + end +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 == "RVT" then + return range > 0 and "rvt_on" or "rvt_off",location,1,pitch + end + if soundid == "R1_5" then + return range > 0 and "r1_5_on" or "r1_5_off",location,1,pitch + end + if soundid == "RPB" then + return range > 0 and "rpb_on" or "rpb_off",location,1,pitch + end + if soundid == "KD" then + return range > 0 and "kd_on" or "kd_off",location,1,pitch + end + if soundid == "K25" then + return range > 0 and "k25_on" or "k25_off",location,1,pitch + end + if soundid == "RO" then + return range > 0 and "ro_on" or nil,location,1,pitch + end + if soundid == "AVU" then + return range > 0 and "avu_on" or "avu_off",location,1,0.6 + end + end + return soundid,location,range,pitch +end + +local dist = { + Back1 = 550, + AVMain = 550, + AV1 = 550, + AV2 = 550, + Battery = 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() diff --git a/lua/entities/_obsolete/gmod_subway_em508/init.lua b/lua/entities/_obsolete/gmod_subway_em508/init.lua new file mode 100644 index 0000000..8fa5bf0 --- /dev/null +++ b/lua/entities/_obsolete/gmod_subway_em508/init.lua @@ -0,0 +1,857 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +ENT.BogeyDistance = 650 -- Needed for gm trainspawner + +--"DURASelectMain","DURASelectAlternate","DURAToggleChannel","DURAPowerToggle", +ENT.SyncTable = { + "CustomC","Custom1","Custom2","Custom3","CustomD", + "CustomE","CustomF","CustomG","R_UNch","R_ZS","R_G","R_Radio","R_Program1","R_Program2","KVT","KB","KSD", + "VZ1","VUD1","KDL","KDLR","KDLK","KDP","KDLRK","DoorSelect","Ring","UKS","AGS", + "KRZD","R_VPR","VozvratRP","AVU","KVP","ConverterProtection","RZP", + "KSN","ARS","ALS","OtklAVU","TormAT","L_1","L_3","DIPoff", + "VMK","BPSNon","RezMK","ARS13","L_4","VUS","VAH","VAD","EmergencyBrakeValve", + "KAH","KAHK","KDPK","CabinHeat","KRR","KRP", + "RC1","VB","BPS","UOS", "PB", "UAVA","AVULight_light","PD","AVU", + "DriverValveBLDisconnect","DriverValveTLDisconnect","DriverValveTLDisconnect","ParkingBrake","EPK", + "VUD2","VDL", "GV","DIPon","DIPoff","VozvratRP","KU1","RezMK", + "VU3","VU1","VU2","AV8B","VU","KDLK","VDLK","KDPK","RST", "DoorSelect","LPU","R_ASNPMenu","R_ASNPUp","R_ASNPDown","R_ASNPOn", +} +ENT.SyncFunctions = { + "" +} + +function ENT:Initialize() + + self.Plombs = { + RST = true, + Init = true, + OtklAVU = true, + UAVA = true, + } + -- Set model and initialize + self:SetModel("models/metrostroi_train/81-508/81-508.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create seat entities + self.DriverSeat = self:CreateSeat("driver",Vector(425,-39,-27.5),Angle(0,0,0)) + self.InstructorsSeat = self:CreateSeat("instructor",Vector(430,40,-48+6+2.5),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 + 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+3.5,0,-75),Angle(0,0,0),true,"717") + self.RearCouple = self:CreateCouple(Vector(-421.5-3.5,0,-75),Angle(0,180,0),false,"717") + local pneumoPow = 0.8+(math.random()^0.4)*0.3 + self.FrontBogey.PneumaticPow = pneumoPow + self.RearBogey.PneumaticPow = pneumoPow + + -- Initialize key mapping + self.KeyMap = { + [KEY_1] = "KVSetX1", + [KEY_2] = "KVSetX2", + [KEY_3] = "KVSetX3", + [KEY_4] = "KVSet0", + [KEY_5] = "KVSetT1", + [KEY_6] = "KVSetT1AB", + [KEY_7] = "KVSetT2", + [KEY_8] = "KRP", + + [KEY_EQUAL] = "R_Program1Set", + [KEY_MINUS] = "R_Program2Set", + + [KEY_G] = "VozvratRPSet", + + [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] = "KDL", + [KEY_D] = "KDP", + [KEY_V] = "VUD1Toggle", + [KEY_L] = "HornEngage", + [KEY_N] = "VZ1Set", + [KEY_PAD_1] = "PneumaticBrakeSet1", + [KEY_PAD_2] = "PneumaticBrakeSet2", + [KEY_PAD_3] = "PneumaticBrakeSet3", + [KEY_PAD_4] = "PneumaticBrakeSet4", + [KEY_PAD_5] = "PneumaticBrakeSet5", + [KEY_PAD_6] = "PneumaticBrakeSet6", + [KEY_PAD_7] = "PneumaticBrakeSet7", + [KEY_PAD_DIVIDE] = "KRPSet", + [KEY_PAD_MULTIPLY] = "KAHSet", + --[KEY_J] = "KVWrenchKRU", + + --[KEY_SPACE] = "PBSet", + [KEY_BACKSPACE] = "EmergencyBrake", + + [KEY_PAD_0] = "DriverValveDisconnect", + [KEY_LSHIFT] = { + [KEY_W] = "KVUp_Unlocked", + [KEY_SPACE] = "KVTSet", + + [KEY_A] = "DURASelectAlternate", + [KEY_D] = "DURASelectMain", + [KEY_V] = "DURAToggleChannel", + [KEY_1] = "DIPonSet", + [KEY_2] = "DIPoffSet", + [KEY_4] = "KVSet0Fast", + --[KEY_L] = "DriverValveDisconnect", + + [KEY_7] = "KVWrenchNone", + [KEY_8] = "KVWrenchKRU", + [KEY_9] = "KVWrenchKV", + [KEY_0] = "KVWrench0", + [KEY_6] = "KVSetT1A", + }, + + [KEY_RSHIFT] = { + [KEY_7] = "KVWrenchNone", + [KEY_9] = "KVWrenchKV", + [KEY_0] = "KVWrench0", + --[KEY_L] = "DriverValveDisconnect", + [KEY_F] = "BCCDSet", + [KEY_R] = "VZPSet", + }, + [KEY_LALT] = { + [KEY_V] = "VUD1Toggle", + }, + } + + self.InteractionZones = { + { Pos = Vector(-471,-30,0), + Radius = 28, + ID = "RearDoor" + }, + { Pos = Vector(473,32,28), + Radius = 28, + ID = "FrontDoor1" + }, + { Pos = Vector(473,32,-28), + Radius = 28, + ID = "FrontDoor2" + }, + { Pos = Vector(383.02,31.85,2), + Radius = 28, + ID = "PassengerDoor1" + }, + { Pos = Vector(383.02,-31.85,2), + Radius = 28, + ID = "PassengerDoor2" + }, + { Pos = Vector(408.18,63.59,-26), + Radius = 16, + ID = "CabinDoor1" + }, + { Pos = Vector(408.18,63.59,6), + Radius = 16, + ID = "CabinDoor2" + }, + { Pos = Vector(408.18,63.59,38), + Radius = 16, + ID = "CabinDoor3" + }, + { Pos = Vector(458.18,63.59,-26), + Radius = 16, + ID = "CabinDoor4" + }, + { Pos = Vector(458.18,63.59,6), + Radius = 16, + ID = "CabinDoor5" + }, + { Pos = Vector(458.18,63.59,38), + Radius = 16, + ID = "CabinDoor6" + }, + } + + self.Lights = { + -- Head + [2] = { "glow", Vector(469.4, 45.43,-30.7), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 1.0 }, + [4] = { "glow", Vector(458+9,-14.86, 58), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 0.5 }, + [5] = { "glow", Vector(458+9,0, 58), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 0.5 }, + [6] = { "glow", Vector(458+9, 14.86, 58), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 0.5 }, + + -- Emergency lit + [9] = { "headlight", Vector(412,0,51), Angle(80,0,0), Color(255,255,255), brightness = 1, farz = 117, nearz = 0.01, shadows = 0, fov = 120 }, + -- Cabin + [22] = { "light", Vector(432+5.9,-54.5,42.2), Angle(90,0,0), Color(255,180,128), brightness = 0.75, scale = 0.4, texture = "sprites/light_glow03.vmt" }, + [23] = { "dynamiclight", Vector(432,-10.0,20), Angle(0,0,0), Color(255,255,255), brightness = 0.0005, distance = 600}, + -- Interior + [11] = { "dynamiclight", Vector( 250, 0, -5), Angle(0,0,0), Color(255,125,25), brightness = 6, distance = 250}, + [12] = { "dynamiclight", Vector( 0, 0, -5), Angle(0,0,0), Color(255,125,25), brightness = 6, distance = 300}, + [13] = { "dynamiclight", Vector(-250, 0, -5), Angle(0,0,0), Color(255,125,25), brightness = 6, distance = 250}, + + [15] = { "light", Vector(402.202942,69.270073,44.79285), Angle(0,0,0), Color(150,255,255), brightness = 0.9, scale = 0.10, texture = "sprites/light_glow02.vmt" }, + [16] = { "light", Vector(402.202942,69.270073,41.509621), Angle(0,0,0), Color(50,255,0), brightness = 0.9, scale = 0.10, texture = "sprites/light_glow02.vmt" }, + [17] = { "light", Vector(402.202942,69.270073,37.3862), Angle(0,0,0), Color(255,255,0), brightness = 0.9, scale = 0.10, texture = "sprites/light_glow02.vmt" }, + + [70 ] = { "headlight", Vector( 450, -60, -47), Angle(45,-90,0), Color(255,255,255), brightness = 0.5, distance = 400 , fov=120, shadows = 1 }, + + } + + -- Cross connections in train wires + self.TrainWireInverts = { + [18] = true, + [34] = true, + } + self.TrainWireCrossConnections = { + [5] = 4, -- Reverser F<->B + [31] = 32, -- Doors L<->R + } + + -- Setup door positions + self.LeftDoorPositions = {} + self.RightDoorPositions = {} + for i=0,3 do + table.insert(self.LeftDoorPositions,Vector(353.0 - 35*0.5 - 231*i,65,-1.8)) + table.insert(self.RightDoorPositions,Vector(353.0 - 35*0.5 - 231*i,-65,-1.8)) + end + + -- KV wrench mode + self.KVWrenchMode = 0 + + -- Parking brake ratio + self.ManualBrake = 0.0 + self.RearDoor = false + self.FrontDoor = false + self.CabinDoor = false + self.PassengerDoor = false + +-- self.A5:TriggerInput("Set",0) + self:TrainSpawnerUpdate() +end + +function ENT:TrainSpawnerUpdate() + self.Texture = self:GetNW2String("Texture") + self.PassTexture = self:GetNW2String("PassTexture") + self.CabTexture = self:GetNW2String("CabTexture") + local texture = Metrostroi.Skins["train"][self.Texture] + local passtexture = Metrostroi.Skins["pass"][self.PassTexture] + local cabintexture = Metrostroi.Skins["cab"][self.CabTexture] + + for k in pairs(self:GetMaterials()) do + self:SetSubMaterial(k-1,"") + end + for k,v in pairs(self:GetMaterials()) do + if v == "models/metrostroi_train/81/int02" then + if not Metrostroi.Skins["717_schemes"] or not Metrostroi.Skins["717_schemes"]["m"] then + self:SetSubMaterial(k-1,Metrostroi.Skins["717_schemes"][""]) + else + if not self.Adverts or self.Adverts ~= 4 then + self:SetSubMaterial(k-1,Metrostroi.Skins["717_schemes"]["m"].adv) + else + self:SetSubMaterial(k-1,Metrostroi.Skins["717_schemes"]["m"].clean) + end + end + elseif v == "models/metrostroi_train/81/tabl" then + if not self.SignsList then + self:PrepareSigns() + end + if self.SignsList[self.SignsIndex] then self:SetSubMaterial(k-1,self.SignsList[self.SignsIndex][1]) end + end + local tex = string.Explode("/",v) + tex = tex[#tex] + if cabintexture and cabintexture.textures[tex] then + self:SetSubMaterial(k-1,cabintexture.textures[tex]) + end + if passtexture and passtexture.textures[tex] then + self:SetSubMaterial(k-1,passtexture.textures[tex]) + end + if texture and texture.textures[tex] then + self:SetSubMaterial(k-1,texture.textures[tex]) + end + end +end + +-------------------------------------------------------------------------------- +function ENT:Think() + local RetVal = self.BaseClass.Think(self) + + -- Check if wrench was pulled out + if self.DriversWrenchPresent then + self.KV:TriggerInput("Enabled",self:IsWrenchPresent() and 1 or 0) + end + self:SetPackedBool("RedLight",(self.Panel["RedLightLeft"] > 0.5 or self.Panel["RedLightRight"] > 0.5 ) and not IsValid(self.FrontTrain)) + + -- Emergency Ezh cabin lights + self:SetLightPower(9, self.AV8B.Value < 0.5 and self.VU2.Value > 0.5 and self.Panel["V1"] > 0.5) + + -- Cabin lights + --self:SetLightPower(22, self.L_2.Value > 0.5 and self.Panel["V1"] > 0.5) + self:SetLightPower(23, self.VU3.Value > 0.5) + + --Gauges lights + self:SetPackedBool("PanelLights",self.L_3.Value > 0.5 and self.Panel["V1"] > 0.5) + + local lightsActive2 = self.PowerSupply.XT3_4 > 65.0 + local lightsActive1 = (self.VU2.Value > 0.5 and self.Panel["V1"] > 0.5) or lightsActive2 + self:SetPackedBool("Lamps_emer",lightsActive1) + self:SetPackedBool("Lamps_full",lightsActive2) + local Light + if self.Pneumatic.Compressor == 1 then + Light = (lightsActive2 and 0.6 or 0.3) + else + Light = (lightsActive2 and 0.8 or 0.4) + end + self:SetLightPower(11, lightsActive1, Light) + self:SetLightPower(12, lightsActive1, Light) + self:SetLightPower(13, lightsActive1, Light) + self:SetPackedRatio("LampsI",math.Round((self.Electric.I24-150)/1000.0,1.5)) + + -- Total temperature + local IGLA_Temperature = math.max(self.Electric.T1,self.Electric.T2) + + -- Switch and button states + self:SetPackedBool(0,self:IsWrenchPresent()) + + -- Signal if doors are open or no to platform simulation + self.LeftDoorsOpen = + (self.Pneumatic.LeftDoorState[1] > 0.5) or + (self.Pneumatic.LeftDoorState[2] > 0.5) or + (self.Pneumatic.LeftDoorState[3] > 0.5) or + (self.Pneumatic.LeftDoorState[4] > 0.5) + self.RightDoorsOpen = + (self.Pneumatic.RightDoorState[1] > 0.5) or + (self.Pneumatic.RightDoorState[2] > 0.5) or + (self.Pneumatic.RightDoorState[3] > 0.5) or + (self.Pneumatic.RightDoorState[4] > 0.5) + self:WriteTrainWire(35,(self.Pneumatic.BrakeCylinderPressure > 0.1) and 1 or 0) + + -- DIP/power + self:SetPackedBool(32,self.Panel["V1"] > 0.5) + -- Red RP + local TW18 = self:GetTrainWire18() + if self:ReadTrainWire(20) == 0 or (self.Panel["V1"] < 0.5) then TW18 = 0 end + self:SetPackedBool(131,TW18 > 0) + self:SetPackedRatio("LRP",TW18) + self.TrueBrakeAngle = self.TrueBrakeAngle or 0 + if self.ManualBrake < 0.001 and self.ManualBrake > self.TrueBrakeAngle then self.TrueBrakeAngle = self.ManualBrake end + if self.ManualBrake > 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) + -- Green RP + self:SetPackedBool(36,self.Panel["GreenRP"] > 0.5) + -- Cabin heating + self:SetPackedBool(37,self.Panel["KUP"] > 0.5) + -- AVU + self:SetPackedBool(38,self.Panel["AVU"] > 0.5) + -- Ring + self:SetPackedBool(39,self.Panel["Ring"] > 0.5) + -- SD + self:SetPackedBool(40,self.Panel["V1"] > 0.5 and self.Panel["SD"] < 0.5) + -- KSD + self:SetPackedBool("KSD",self.KSD.Value == 0.00) + -- KRP + self:SetPackedBool(113,self.KRP.Value == 1.0) + + + self:SetPackedBool("DriverValveBLDisconnect",self.DriverValveBLDisconnect.Value == 1.0) + self:SetPackedBool("DriverValveTLDisconnect",self.DriverValveTLDisconnect.Value == 1.0) + if self.DriverValveDisconnect.Blocked > 0 and self.Pneumatic.ValveType == 2 then + self.DriverValveDisconnect:TriggerInput("Block",0) + self.DriverValveBLDisconnect:TriggerInput("Block",1) + self.DriverValveTLDisconnect:TriggerInput("Block",1) + end + if self.DriverValveDisconnect.Blocked == 0 and self.Pneumatic.ValveType == 1 then + self.DriverValveDisconnect:TriggerInput("Block",1) + self.DriverValveBLDisconnect:TriggerInput("Block",0) + self.DriverValveTLDisconnect:TriggerInput("Block",0) + end + self:SetPackedBool("EPK",self.EPK.Value == 1.0) + self:SetPackedBool("VPR",self.RST.Value > 0 and self.Panel["V1"] > 0) + self:SetPackedBool("LST",self:ReadTrainWire(6) > 0.5) + self:SetPackedBool("LVD",self:ReadTrainWire(1) > 0.5) + self:SetPackedBool("RK",self:ReadTrainWire(2) > 0.5) + self:SetPackedBool(19,self.OtklAVU.Value == 1.0) + self:SetPackedBool(20,self.Pneumatic.Compressor == 1.0) + self:SetPackedBool(21,self.Pneumatic.LeftDoorState[1] > 0.5) + self:SetPackedBool(25,self.Pneumatic.RightDoorState[1] > 0.5) + self:SetPackedBool(112,(self.RheostatController.Velocity ~= 0.0)) + self:SetPackedBool(55,(self.DoorSelect.Value == 1.0)) + self:SetPackedBool("VZ1",(self.VZ1.Value == 1)) + + self:SetPackedBool(17,self.KRZD.Value == 1.0) + self:SetPackedBool(156,self.RearDoor) + self:SetPackedBool(157,self.FrontDoor) + self:SetPackedBool(158,self.PassengerDoor) + self:SetPackedBool(159,self.CabinDoor) + + self:SetNW2Bool("ASNPPlay",self.VB.Value > 0 and self:ReadTrainWire(47) > 0) + --KRR + self:SetPackedBool("KRR",self.KRR.Value > 0.5) + + --Radiostation + self:SetPackedBool(125,self.R_G.Value == 1.0) + self:SetPackedBool(127,self.R_ZS.Value == 1.0) + self:SetPackedBool(126,self.R_Radio.Value == 1.0) + self:SetPackedBool(128,self.R_Program1.Value == 1.0) + self:SetPackedBool(129,self.R_Program2.Value == 1.0) + + --[[ + -- LST + self:SetPackedBool(49,self:ReadTrainWire(6) > 0.5) + -- LVD + self:SetPackedBool(50,self:ReadTrainWire(1) > 0.5) + + self:SetPackedBool(165,self.PB.Value > 0) + + -- AV states + -- for i,v in ipairs(self.Panel.AVMap) do + -- if tonumber(v) + -- then self:SetPackedBool(64+(i-1),self["A"..v].Value == 1.0) + -- elseif self[v] then self:SetPackedBool(64+(i-1),self[v].Value == 1.0) + -- end + -- end + + self:SetPackedBool(62,self.L_3.Value > 0.5) + self:SetPackedBool(64+19,self.VU1.Value > 0.5) + self:SetPackedBool(64+12,self.VU.Value > 0.5) + self:SetPackedBool(64+24,self.RST.Value > 0.5) + self:SetPackedBool(64+7 ,self.AV8B.Value > 0.5) + self:SetPackedBool(64+36,self.VU2.Value > 0.5) + self:SetPackedBool(64+13,self.VU3.Value > 0.5) + self:SetPackedBool("VPR",self.RST.Value == 1.0 and self.Panel["V1"]) + ]] + -- Feed packed floats + self:SetPackedRatio(0, 1-self.Pneumatic.DriverValvePosition/7) + self:SetPackedRatio(1, (self.KV.ControllerPosition+3)/7) + self:SetPackedRatio(2, 1-(self.KV.ReverserPosition+1)/2) + self:SetPackedRatio(4, self.Pneumatic.ReservoirPressure/16.0) + self:SetPackedRatio(5, self.Pneumatic.TrainLinePressure/16.0) + self:SetPackedRatio(6, math.min(2.7,self.Pneumatic.BrakeCylinderPressure)/6.0) + self:SetPackedRatio(7, self.Electric.Power750V/1000.0) + self:SetPackedRatio(8, 0.5 + 0.5*(self.Electric.I24/500.0)) + self:SetPackedRatio(9, self.Pneumatic.BrakeLinePressure_dPdT or 0) + if self.Pneumatic.TrainLineOpen then + self:SetPackedRatio(9, (-self.Pneumatic.TrainLinePressure_dPdT or 0)*6) + else + self:SetPackedRatio(9, self.Pneumatic.BrakeLinePressure_dPdT or 0) + end + self:SetPackedRatio(10,(self.Panel["V1"] * self.Battery.Voltage) / 82.0) + self:SetPackedRatio(11,IGLA_Temperature) + self:SetPackedBool("EmergencyBrakeValve",self.EmergencyBrakeValve.Value > 0) + self:SetPackedBool(152,self.UAVA.Value == 1.0) + + self:SetPackedBool(128,self.R_Program1.Value == 1.0) + self:SetPackedBool(129,self.R_Program2.Value == 1.0) + self:SetPackedBool(22,self.Pneumatic.ValveType == 2) + + -- Update ARS system (no ars on E) + self:SetPackedRatio(3, self.ALS_ARS.Speed/100.0) + self:SetPackedRatio("Speed", self.Speed/100) + ---print (self.Speed) + if (self.ALS_ARS.Ring == true) then + self:SetPackedBool(39,true) + end + + -- 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 = 27000+13000*(A < 0 and 1 or 0) + self.FrontBogey.Reversed = (self.RKR.Value > 0.5) + self.RearBogey.MotorForce = 27000+13000*(A < 0 and 1 or 0) + self.RearBogey.Reversed = (self.RKR.Value < 0.5) + + -- These corrections are required to beat source engine friction at very low values of motor power + local A = 2*self.Engines.BogeyMoment + 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 + self.FrontBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure*add + self.FrontBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + self.FrontBogey.ParkingBrake = self.ParkingBrake.Value > 0.5 + self.RearBogey.PneumaticBrakeForce = 50000.0 + self.RearBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure*add + self.RearBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + end + + -- Generate bogey sounds + local jerk = math.abs((self.Acceleration - (self.PrevAcceleration or 0)) / self.DeltaTime) + self.PrevAcceleration = self.Acceleration + + if jerk > (2.0 + self.Speed/15.0) then + self.PrevTriggerTime1 = self.PrevTriggerTime1 or CurTime() + self.PrevTriggerTime2 = self.PrevTriggerTime2 or CurTime() + + if ((math.random() > 0.00) or (jerk > 10)) and (CurTime() - self.PrevTriggerTime1 > 1.5) then + self.PrevTriggerTime1 = CurTime() + self.FrontBogey:EmitSound("subway_trains/bogey/chassis_"..math.random(1,5)..".wav", 85, math.random(96,110)) + end + if ((math.random() > 0.00) or (jerk > 10)) and (CurTime() - self.PrevTriggerTime2 > 1.5) then + self.PrevTriggerTime2 = CurTime() + self.RearBogey:EmitSound("subway_trains/bogey/chassis_"..math.random(1,5)..".wav", 85, math.random(96,110)) + end + end + + -- Temporary hacks + --self:SetNW2Float("V",self.Speed) + --self:SetNW2Float("A",self.Acceleration) + + return RetVal +end + +-------------------------------------------------------------------------------- +function ENT:OnButtonPress(button,ply) + -- Parking brake + if button == "ParkingBrakeLeft" then + self.ManualBrake = math.max(0.0,(self.ManualBrake or 0) - 0.05) + if self.ManualBrake == 0.0 then return end + end + if button == "ParkingBrakeRight" then + self.ManualBrake = math.min(1.0,(self.ManualBrake or 0) + 0.05) + if self.ManualBrake == 1.0 then return end + end + if string.find(button,"PneumaticBrakeSet") then + self.Pneumatic:TriggerInput("BrakeSet",tonumber(button:sub(-1,-1))) + return + end + if button:find("FrontDoor") then + self.FrontDoor = not self.FrontDoor + if self.FrontDoor then self:PlayOnce("door_open_tor","cabin") else self:PlayOnce("door_close_tor","cabin") end + end + if button:find("RearDoor") then + self.RearDoor = not self.RearDoor + if self.RearDoor then self:PlayOnce("door_open_tor") else self:PlayOnce("door_close_tor") end + end + if button:find("PassengerDoor") then + self.PassengerDoor = not self.PassengerDoor + if self.PassengerDoor then self:PlayOnce("door_open_tor","cabin") else self:PlayOnce("door_close_tor","cabin") end + end + if button:find("CabinDoor") then + self.CabinDoor = not self.CabinDoor + if self.CabinDoor then self:PlayOnce("door_open_tor","cabin") else self:PlayOnce("door_close_tor","cabin") end + end + if button == "NextSign" then + self:PrepareSigns() + self.SignsIndex = self.SignsIndex + 1 + if self.SignsIndex > #self.SignsList then self.SignsIndex = 1 end + + self:SetNW2String("FrontText",self.SignsList[self.SignsIndex][2]) + end + if button == "PrevSign" then + self:PrepareSigns() + self.SignsIndex = self.SignsIndex - 1 + if self.SignsIndex < 1 then self.SignsIndex = #self.SignsList end + + self:SetNW2String("FrontText",self.SignsList[self.SignsIndex][2]) + end + + if button == "Num1P" then + if not self.RouteNumber then self.RouteNumber = "00" end + local num = tonumber(self.RouteNumber[2]) + num = num + 1 + if num > 9 then num = 0 end + self.RouteNumber = string.SetChar(self.RouteNumber,2, num) + self:SetNW2String("RouteNumber",self.RouteNumber) + local trn = self.WagonList[#self.WagonList] + if IsValid(trn) and trn ~= self then + trn.RouteNumber = self.RouteNumber + trn:SetNW2String("RouteNumber",self.RouteNumber) + end + end + if button == "Num1M" then + if not self.RouteNumber then self.RouteNumber = "00" end + local num = tonumber(self.RouteNumber[2]) + num = num - 1 + if num < 0 then num = 9 end + self.RouteNumber = string.SetChar(self.RouteNumber,2, num) + self:SetNW2String("RouteNumber",self.RouteNumber) + local trn = self.WagonList[#self.WagonList] + if IsValid(trn) and trn ~= self then + trn.RouteNumber = self.RouteNumber + trn:SetNW2String("RouteNumber",self.RouteNumber) + end + end + if button == "Num2P" then + if not self.RouteNumber then self.RouteNumber = "00" end + local num = tonumber(self.RouteNumber[1]) + num = num + 1 + if num > 9 then num = 0 end + self.RouteNumber = string.SetChar(self.RouteNumber,1, num) + self:SetNW2String("RouteNumber",self.RouteNumber) + local trn = self.WagonList[#self.WagonList] + if IsValid(trn) and trn ~= self then + trn.RouteNumber = self.RouteNumber + trn:SetNW2String("RouteNumber",self.RouteNumber) + end + end + if button == "Num2M" then + if not self.RouteNumber then self.RouteNumber = "00" end + local num = tonumber(self.RouteNumber[1]) + num = num - 1 + if num < 0 then num = 9 end + self.RouteNumber = string.SetChar(self.RouteNumber,1, num) + self:SetNW2String("RouteNumber",self.RouteNumber) + local trn = self.WagonList[#self.WagonList] + if IsValid(trn) and trn ~= self then + trn.RouteNumber = self.RouteNumber + trn:SetNW2String("RouteNumber",self.RouteNumber) + end + 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 + --print(self.ManualBrake) + end + if button == "ManualBrakeRight" then + self.ManualBrake = math.min(1.0,self.ManualBrake + 0.008) + if self.ManualBrake == 1.0 then return end + --print(self.ManualBrake) + 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 == 2) and (button == "KVReverserUp") then + self.KRU:TriggerInput("Up",1) + self:OnButtonPress("KRUUp") + end + if (self.KVWrenchMode == 2) and (button == "KVReverserDown") then + self.KRU:TriggerInput("Down",1) + self:OnButtonPress("KRUDown") + end + if (self.KVWrenchMode == 2) and (button == "KVSetX1") then + self.KRU:TriggerInput("SetX1",1) + self:OnButtonPress("KRUSetX1") + end + if (self.KVWrenchMode == 2) and (button == "KVSetX2") then + self.KRU:TriggerInput("SetX2",1) + self:OnButtonPress("KRUSetX2") + end + if (self.KVWrenchMode == 2) and (button == "KVSetX3") then + self.KRU:TriggerInput("SetX3",1) + self:OnButtonPress("KRUSetX3") + end + if (self.KVWrenchMode == 2) and (button == "KVSet0") then + self.KRU:TriggerInput("Set0",1) + self:OnButtonPress("KRUSet0") + end + + if button == "KVSetT1AB" then + if self.KV.ControllerPosition == -2 then + self.KV:TriggerInput("ControllerSet",-1) + timer.Simple(0.20,function() + self.KV:TriggerInput("ControllerSet",-2) + end) + else + self.KV:TriggerInput("ControllerSet",-2) + end + end + if button == "KVWrench0" then + if self.KVWrenchMode == 3 or self.KVWrenchMode == 1 then + if self.KVWrenchMode ~= 1 then + self:PlayOnce("revers_in","cabin",0.7) + end + self.KVWrenchMode = 0 + self.DriversWrenchPresent = false + self.DriversWrenchMissing = false + self.KV:TriggerInput("Enabled",1) + self.KRU:TriggerInput("Enabled",0) + end + end + if button == "KVWrenchKV" then + if self.KVWrenchMode == 3 or self.KVWrenchMode == 0 then + if self.KVWrenchMode ~= 0 then + self:PlayOnce("revers_in","cabin",0.7) + end + self.KVWrenchMode = 1 + self.DriversWrenchPresent = true + self.DriversWrenchMissing = false + self.KV:TriggerInput("Enabled",1) + self.KRU:TriggerInput("Enabled",0) + end + end + --THERE IS NO KRU IN THIS EZH MODEL + --[[ + if button == "KVWrenchKRU" then + if self.KVWrenchMode == 3 then + self:PlayOnce("kru_in","cabin",0.7) + self.KVWrenchMode = 2 + self.DriversWrenchPresent = false + self.DriversWrenchMissing = true + self.KV:TriggerInput("Enabled",0) + self.KRU:TriggerInput("Enabled",1) + self.KRU:TriggerInput("LockX3",1) + end + end]] + if button == "KVWrenchNone" then + if self.KVWrenchMode ~= 3 and self.KV.ReverserPosition == 0 then + if self.KVWrenchMode == 2 then + self:PlayOnce("kru_out","cabin",0.7) + else + self:PlayOnce("revers_out","cabin",0.7) + end + self.KVWrenchMode = 3 + self.DriversWrenchPresent = false + self.DriversWrenchMissing = true + self.KV:TriggerInput("Enabled",0) + self.KRU:TriggerInput("Enabled",0) + end + end + --if button == "KVT2Set" then self.KVT:TriggerInput("Close",1) end + if button == "KDL" and self.VUD1.Value < 1 then self.KDL:TriggerInput("Close",1) self:OnButtonPress("KDLSet") end + if button == "KDP" and self.VUD1.Value < 1 then self.KDP:TriggerInput("Close",1) self:OnButtonPress("KDPSet") end + if button == "VDL" and self.VUD1.Value < 1 then self.VDL:TriggerInput("Close",1) self:OnButtonPress("VDLSet") end + if button == "KRP" then + self.KRP:TriggerInput("Set",1) + self:OnButtonPress("KRPSet") + 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 + if self.DriverValveBLDisconnect.Value == 1.0 then + if self.EPK.Value == 1 then self:PlayOnce("epv_on","cabin",0.9) end + else + --self:PlayOnce("pneumo_disconnect2","cabin",0.9) + if self.EPK.Value == 1 then self:PlayOnce("epv_off","cabin",0.9) end + end + return + end + -- Special logic + if (button == "VDL") or (button == "KDL") or (button == "KDP") then + --self.VUD1:TriggerInput("Open",1) + end + if (button == "KDP") then + --self.DoorSelect:TriggerInput("Close",1) + end + if (button == "VUD1Set") or (button == "VUD1Toggle") or + (button == "VUD2Set") or (button == "VUD2Toggle") then + self.VDL:TriggerInput("Open",1) + self.KDL:TriggerInput("Open",1) + self.KDP:TriggerInput("Open",1) + end + + if button == "GVToggle" then + if self.GV.Value > 0.5 then + self:PlayOnce("revers_f",nil,0.7) + else + self:PlayOnce("revers_b",nil,0.7) + end + return + end + + + --[[if (button == "UAVAToggle") then + if self.UAVA then + if self.UAVA.Value > 0.5 then + self:PlayOnce("uava_off","cabin") + else + self:PlayOnce("uava_off","cabin") + end + end + return + end]] +end + +function ENT:OnButtonRelease(button) + if string.find(button,"PneumaticBrakeSet") then + return + end + --if button == "KVT2Set" then self.KVT:TriggerInput("Open",1) end + if button == "KDL" and self.VUD1.Value < 1 then self.KDL:TriggerInput("Open",1) self:OnButtonRelease("KDLSet") end + if button == "KDP" and self.VUD1.Value < 1 then self.KDP:TriggerInput("Open",1) self:OnButtonRelease("KDPSet") end + if button == "VDL" and self.VUD1.Value < 1 then self.VDL:TriggerInput("Open",1) self:OnButtonRelease("VDLSet") end + if button == "KRP" then + self.KRP:TriggerInput("Set",0) + self:OnButtonRelease("KRPSet") + end + + --[[ + if (button == "PneumaticBrakeDown") and (self.Pneumatic.DriverValvePosition == 1) then + self.Pneumatic:TriggerInput("BrakeSet",2) + end + if self.Pneumatic.ValveType == 1 then + if (button == "PneumaticBrakeUp") and (self.Pneumatic.DriverValvePosition == 5) then + self.Pneumatic:TriggerInput("BrakeSet",4) + end + end + ]] + + if (not string.find(button,"KVT")) and string.find(button,"KV") then return end + if string.find(button,"KRU") then return 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 + +function ENT:TriggerTurbostroiInput(sys,name,val) + self.BaseClass.TriggerTurbostroiInput(self,sys,name,val) + if sys == "Panel" and name:find("HeadLights") or sys == "L_4" then + local brightness = math.min(1,self.Panel["HeadLights1"])*0.50 + + math.min(1,self.Panel["HeadLights2"])*0.25 + + math.min(1,self.Panel["HeadLights3"])*0.25 + if (self.Panel["HeadLights3"] > 0.5 or self.Panel["HeadLights1"] > 0.5) then-- and (self.L_4.Value > 0.5) then + self:SetPackedRatio("Headlight",brightness) + else + self:SetPackedRatio("Headlight",0) + end + self:SetPackedBool("HeadLights1",self.Panel["HeadLights1"] > 0) + self:SetPackedBool("HeadLights2",self.Panel["HeadLights2"] > 0) + end +end diff --git a/lua/entities/_obsolete/gmod_subway_em508/shared.lua b/lua/entities/_obsolete/gmod_subway_em508/shared.lua new file mode 100644 index 0000000..709867c --- /dev/null +++ b/lua/entities/_obsolete/gmod_subway_em508/shared.lua @@ -0,0 +1,604 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.PrintName = "Entities.Em508" +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" + +ENT.Spawnable = true +ENT.AdminSpawnable = false + +function ENT:PassengerCapacity() + return 300 +end + +function ENT:GetStandingArea() + return Vector(-450,-30,-45),Vector(380,30,-45) +end + +local function GetDoorPosition(i,k) + return Vector(359.0 - 35/2 - 229.5*i,-65*(1-2*k),7.5) +end +ENT.AnnouncerPositions = { + {Vector(412,-49 ,61),80,1}, + {Vector(-3,-60, 62),300,1}, + {Vector(-3,60 ,62),300,1}, +} +ENT.Cameras = { + {Vector(407.5+15,32,16),Angle(0,180,0),"Train.703.Breakers1"}, + {Vector(407.5+11,46,20),Angle(0,180,0),"Train.703.Breakers2"}, + {Vector(407.5+28,48,16),Angle(0,40,0),"Train.703.Left"}, + {Vector(407.5+11,37,-5),Angle(0,0,0),"Train.703.Parking"}, + {Vector(407.5+29,-45,43),Angle(0,-90,0),"Train.703.ASNP"}, + {Vector(407.5+10,-45,7),Angle(0,-90,0),"Train.703.IGLA"}, +} + + +function ENT:InitializeSounds() + self.BaseClass.InitializeSounds(self) + 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_10"] = {1200,1e9,Vector(0,0,0),1} + self.SoundPositions["rolling_40"] = self.SoundPositions["rolling_10"] + self.SoundPositions["rolling_70"] = self.SoundPositions["rolling_10"] + self.SoundPositions["rolling_80"] = self.SoundPositions["rolling_10"] + 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["epv_on"] = "subway_trains/common/pneumatic/epv_on.mp3" + self.SoundNames["epv_off"] = "subway_trains/common/pneumatic/epv_off.mp3" + self.SoundPositions["epv_on"] = {100,1e9,Vector(437.2,-53.1,-32.0),1} + self.SoundPositions["epv_off"] = {100,1e9,Vector(437.2,-53.1,-32.0),1} + self.SoundPositions["epv_off"] = {60,1e9,Vector(437.2,-53.1,-32.0),1} + -- Релюшки + self.SoundNames["rpb_off"] = "subway_trains/717/relays/lsd_2.mp3" + self.SoundNames["rpb_on"] = "subway_trains/717/relays/relay_on.mp3" + self.SoundPositions["rpb_on"] = {100,1e9,Vector(400,25,-35),1} + self.SoundPositions["rpb_off"] = {100,1e9,Vector(400,25,-35),1} + self.SoundNames["rvt_on"] = { + "subway_trains/717/relays/brake_on1.mp3", + } + self.SoundNames["rvt_off"] = { + "subway_trains/717/relays/brake_off1.mp3", + "subway_trains/717/relays/brake_off2.mp3", + "subway_trains/717/relays/brake_off3.mp3", + } + self.SoundPositions["rvt_on"] = {100,1e9,Vector(400,25,-35),1} + self.SoundPositions["rvt_off"] = {100,1e9,Vector(400,25,-35),1} + if self.Breakers then + self.SoundNames["r1_5_on"] = "subway_trains/717/relays/drive_on1.mp3" + else + self.SoundNames["r1_5_on"] = "subway_trains/717/relays/drive2_on.mp3" + end + self.SoundNames["r1_5_off"] = "subway_trains/717/relays/drive_off.mp3" + self.SoundPositions["r1_5_on"] = {100,1e9,Vector(400,25,-35),1} + self.SoundPositions["r1_5_off"] = {100,1e9,Vector(400,25,-35),1} + + self.SoundNames["kd_off"] = "subway_trains/717/relays/lsd_2.mp3" + self.SoundNames["kd_on"] = "subway_trains/717/relays/lsd_1.mp3" + self.SoundPositions["kd_on"] = {100,1e9,Vector(400,25,-35),1} + self.SoundPositions["kd_off"] = {100,1e9,Vector(400,25,-35),1} + self.SoundNames["k25_off"] = "subway_trains/717/relays/lsd_2.mp3" + self.SoundNames["k25_on"] = "subway_trains/717/relays/relay_on.mp3" + self.SoundPositions["k25_on"] = {120,1e9,Vector(400,25,-35),1} + self.SoundPositions["k25_off"] = {120,1e9,Vector(400,25,-35),1} + self.SoundNames["ro_off"] = "subway_trains/717/relays/lsd_2.mp3" + self.SoundNames["ro_on"] = "subway_trains/717/relays/RO_on.mp3" + self.SoundPositions["ro_on"] = {140,1e9,Vector(400,25,-35),1} + self.SoundPositions["ro_off"] = {140,1e9,Vector(400,25,-35),1} + + + self.SoundNames["avu_off"] = "subway_trains/717/relays/lsd_2.mp3" + self.SoundNames["avu_on"] = "subway_trains/717/relays/relay_on.mp3" + self.SoundPositions["avu_on"] = {60,1e9, Vector(400,-40,-45),1} + self.SoundPositions["avu_off"] = {60,1e9, Vector(400,-40,-45),1} + --Подвагонка + self.SoundNames["lk2_on"] = "subway_trains/717/pneumatic/lk/lk2_on.mp3" + self.SoundNames["lk2_off"] = "subway_trains/717/pneumatic/lk/lk2_off.mp3" + self.SoundNames["lk3_on"] = "subway_trains/717/pneumatic/lk/lk3_on.mp3" + self.SoundNames["lk3_off"] = "subway_trains/717/pneumatic/lk/lk3_off.mp3" + self.SoundPositions["lk2_on"] = {440,1e9,Vector(-60,-40,-66),0.2} + self.SoundPositions["lk2_off"] = {400,1e9,Vector(-60,-40,-66),0.6} + self.SoundPositions["lk3_on"] = {440,1e9,Vector(-60,-40,-66),0.2} + self.SoundPositions["lk3_off"] = {400,1e9,Vector(-60,-40,-66),0.6} + + self.SoundNames["compressor"] = {loop=2.0,"subway_trains/ezh/compressor/ezh_compressor_start.mp3","subway_trains/ezh/compressor/ezh_compressor_loop.mp3", "subway_trains/ezh/compressor/ezh_compressor_end.mp3"} + self.SoundPositions["compressor"] = {700,1e9,Vector(-118,-40,-66)} + self.SoundNames["rk"] = {"subway_trains/717/rk/rk_start.wav","subway_trains/717/rk/rk_spin.wav","subway_trains/717/rk/rk_stop.mp3"} + self.SoundPositions["rk"] = {70,1e3,Vector(110,-40,-75)} + + 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.wav"} + self.SoundNames["revers_out"] = {"subway_trains/ezh3/kv66/revers_out.wav"} + self.SoundPositions["ezh3_revers_0-f"] = {80,1e9,Vector(445.5,-32+1.7,-7.5)} + self.SoundPositions["ezh3_revers_f-0"] = {80,1e9,Vector(445.5,-32+1.7,-7.5)} + self.SoundPositions["ezh3_revers_0-b"] = {80,1e9,Vector(445.5,-32+1.7,-7.5)} + self.SoundPositions["ezh3_revers_b-0"] = {80,1e9,Vector(445.5,-32+1.7,-7.5)} + self.SoundPositions["ezh3_revers_in"] = {80,1e9,Vector(445.5,-32+1.7,-7.5)} + self.SoundPositions["ezh3_revers_out"] = {80,1e9,Vector(445.5,-32+1.7,-7.5)} + + 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"] = {80,1e9,Vector(452.3,-24.0,4.0)} + + 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/kru2-3_1.mp3", + "subway_trains/717/kru/kru2-3_2.mp3", + "subway_trains/717/kru/kru2-3_3.mp3", + "subway_trains/717/kru/kru2-3_4.mp3", + } + self.SoundNames["kru_3_2"] = { + "subway_trains/717/kru/kru3-2_1.mp3", + "subway_trains/717/kru/kru3-2_2.mp3", + "subway_trains/717/kru/kru3-2_3.mp3", + "subway_trains/717/kru/kru3-2_4.mp3", + } + self.SoundPositions["kru_0_1"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_1_2"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_2_1"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_1_0"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_2_3"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_3_2"] = {80,1e9,Vector(452.3,-24.0,4.0)} + + self.SoundNames["kr_open"] = { + "subway_trains/717/cover/cover_open1.mp3", + "subway_trains/717/cover/cover_open2.mp3", + "subway_trains/717/cover/cover_open3.mp3", + } + self.SoundNames["kr_close"] = { + "subway_trains/717/cover/cover_close1.mp3", + "subway_trains/717/cover/cover_close2.mp3", + "subway_trains/717/cover/cover_close3.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["button4_off"] = { + "subway_trains/ezh3/switches/button_on1.mp3", + "subway_trains/ezh3/switches/button_on2.mp3", + } + self.SoundNames["button4_on"] = { + "subway_trains/717/switches/button4_on1.mp3", + "subway_trains/717/switches/button4_on2.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(449+7.7,56.0,-10.24349),0.6} + self.SoundNames["gv_f"] = self.SoundNames["revers_0-b"] + self.SoundNames["gv_b"] = self.SoundNames["revers_b-0"] + self.SoundPositions["gv_f"] = {80,1e2,Vector(120,62.0+0.0,-60),0.5} + self.SoundPositions["gv_b"] = {80,1e2,Vector(120,62.0+0.0,-60),0.5} + + --Краны + self.SoundNames["brake"] = {"subway_trains/common/pneumatic/vz_brake_on1.mp3","subway_trains/common/pneumatic/vz_brake_on2.mp3"} + self.SoundPositions["brake"] = {600,1e9,Vector(0,0,0),0.5} + self.SoundNames["release1"] = {loop=true,"subway_trains/common/pneumatic/release.wav"} --TODO разделение отпуÑка и Ñрыва по позициÑм в кабине\вне + self.SoundPositions["release1"] = {1200,1e9,Vector(-183,0,-70)} + self.SoundNames["crane334_brake"] = {loop=true,"subway_trains/common/pneumatic/334_brake.wav"} --TODO добавить жужжащий звук + self.SoundPositions["crane334_brake"] = {180,1e9,Vector(440,-55.75,-10)} + self.SoundNames["crane334_brake_slow"] = {loop=true,"subway_trains/common/pneumatic/334_brake_slow.wav"} --TODO добавить жужжащий звук + self.SoundPositions["crane334_brake_slow"] = {180,1e9,Vector(440,-55.75,-10)} + self.SoundNames["crane334_release"] = {loop=true,"subway_trains/common/pneumatic/334_release.wav"} + self.SoundPositions["crane334_release"] = {180,1e9,Vector(440,-55.75,-10)} + + self.SoundNames["epk_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["epk_brake"] = {200,1e9,Vector(437.2,-53.1,-50.0)} + self.SoundNames["epk_brake_start"] = "subway_trains/common/pneumatic/epv_start.mp3" + self.SoundPositions["epk_brake_start"] = self.SoundPositions["epk_brake"] + + self.SoundNames["valve_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["valve_brake"] = {200,1e9,Vector(402,-63,-50)} + self.SoundNames["valve_brake_start"] = "subway_trains/common/pneumatic/epv_start.mp3" + self.SoundPositions["valve_brake_start"] = self.SoundPositions["valve_brake"] + + self.SoundNames["emer_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["emer_brake"] = {200,1e9,Vector(380,-45,-75)} + self.SoundNames["emer_brake_start"] = "subway_trains/common/pneumatic/epv_start.mp3" + self.SoundPositions["emer_brake_start"] = self.SoundPositions["emer_brake"] + + self.SoundNames["pneumo_TL_open"] = { + "subway_trains/common/334/334_open.mp3", + } + 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["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/kv40_0_T1.mp3"} + self.SoundNames["kv40_t1_0"] = {"subway_trains/ezh/kv40/kv40_T1_0.mp3"} + self.SoundNames["kv40_t1_t1a"] = {"subway_trains/ezh/kv40/kv40_T1_T1A.mp3"} + self.SoundNames["kv40_t1a_t1"] = {"subway_trains/ezh/kv40/kv40_T1A_T1.mp3"} + self.SoundNames["kv40_t1a_t2"] = {"subway_trains/ezh/kv40/kv40_T1A_T2.mp3"} + self.SoundNames["kv40_t2_t1a"] = {"subway_trains/ezh/kv40/kv40_T2_T1A.mp3"} + self.SoundNames["kv40_0_x1"] = {"subway_trains/ezh/kv40/kv40_0_X1.mp3"} + self.SoundNames["kv40_x1_0"] = {"subway_trains/ezh/kv40/kv40_X1_0.mp3"} + self.SoundNames["kv40_x1_x2"] = {"subway_trains/ezh/kv40/kv40_X1_X2.mp3"} + self.SoundNames["kv40_x2_x1"] = {"subway_trains/ezh/kv40/kv40_X2_X1.mp3"} + self.SoundNames["kv40_x2_x3"] = {"subway_trains/ezh/kv40/kv40_X2_X3.mp3"} + self.SoundNames["kv40_x3_x2"] = {"subway_trains/ezh/kv40/kv40_X3_X2.mp3"} + --self.SoundPositions["kv70_fix_on"] = {100,1e9,Vector(442.2,-40,-16.2),2} + --self.SoundPositions["kv70_fix_off"] = {100,1e9,Vector(442.2,-40,-16.2),2} + self.SoundPositions["kv40_0_t1"] = {100,1e9,Vector(442.2,-40,-16.2),2} + self.SoundPositions["kv40_t1_0"] = self.SoundPositions["kv40_0_t1"] + self.SoundPositions["kv40_t1_t1a"] = self.SoundPositions["kv40_0_t1"] + self.SoundPositions["kv40_t1a_t1"] = self.SoundPositions["kv40_0_t1"] + self.SoundPositions["kv40_t1a_t2"] = self.SoundPositions["kv40_0_t1"] + self.SoundPositions["kv40_t2_t1a"] = self.SoundPositions["kv40_0_t1"] + self.SoundPositions["kv40_0_x1"] = self.SoundPositions["kv40_0_t1"] + self.SoundPositions["kv40_x1_0"] = self.SoundPositions["kv40_0_t1"] + self.SoundPositions["kv40_x1_x2"] = self.SoundPositions["kv40_0_t1"] + self.SoundPositions["kv40_x2_x1"] = self.SoundPositions["kv40_0_t1"] + self.SoundPositions["kv40_x2_x3"] = self.SoundPositions["kv40_0_t1"] + self.SoundPositions["kv40_x3_x2"] = self.SoundPositions["kv40_0_t1"] + + self.SoundNames["ring"] = {"subway_trains/717/ring/ring_start.wav","subway_trains/717/ring/ring_loop.wav","subway_trains/717/ring/ring_end.wav"} + self.SoundPositions["ring"] = {100,1e9,Vector(400,-40,50)} + + self.SoundNames["ring2"] = {loop=0.1,"subway_trains/717/ring/ringc_start.wav","subway_trains/717/ring/ringc_loop.wav","subway_trains/717/ring/ringc_end.mp3"} + self.SoundPositions["ring2"] = {100,1e9,Vector(400,-40,50)} + + 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"] = {100,1e9,Vector(400,-40,50)} + + self.SoundNames["cab_door_open"] = { + "subway_trains/common/door/cab/cab_door_open2.mp3", + "subway_trains/common/door/cab/cab_door_open.mp3", + } + self.SoundPositions["cab_door_open"] = {100,1e9,Vector(400,-40,50)} + + self.SoundNames["cab_door_close"] = { + "subway_trains/common/door/cab/cab_door_close2.mp3", + "subway_trains/common/door/cab/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"] = {120,1e9,Vector(449.118378+7.6,33.493385,-14.713276)} + 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"} + + 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(420.4-0.6,-56.1-0.15,9.87-1.15),0.3} + self.SoundPositions["igla_off"] = {50,1e9,Vector(420.4-0.6,-56.1-0.15,9.87-1.15),0.3} + self.SoundPositions["igla_start1"] = {50,1e9,Vector(420.4-0.6,-56.1-0.15,9.87-1.15),0.3} + self.SoundPositions["igla_start2"] = {50,1e9,Vector(420.4-0.6,-56.1-0.15,9.87-1.15),0.2} + + self.SoundNames["upps"] = {"subway_trains/common/other/upps/upps1.mp3","subway_trains/common/other/upps/upps2.mp3"} + self.SoundPositions["upps"] = {60,1e9,Vector(443,-64,4),0.5} + + 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","subway_trains/common/pnm/pnm_switch_off2.mp3"} + self.SoundNames["pnm_button1_on"] = { + "subway_trains/common/pnm/pnm_button_push.mp3", + "subway_trains/common/pnm/pnm_button_push2.mp3", + "subway_trains/common/pnm/pnm_button_push3.mp3", + } + + self.SoundNames["pnm_button2_on"] = { + "subway_trains/common/pnm/pnm_button_push4.mp3", + "subway_trains/common/pnm/pnm_button_push5.mp3", + "subway_trains/common/pnm/pnm_button_push6.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", + "subway_trains/common/pnm/pnm_button_release6.mp3", + } + + self.SoundNames["horn1"] = {loop=0.6,"subway_trains/common/pneumatic/horn/horn1_start.wav","subway_trains/common/pneumatic/horn/horn1_loop.wav", "subway_trains/common/pneumatic/horn/horn1_end.mp3"} + self.SoundNames["horn2"] = {loop=0.8,"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["horn1"] = {1100,1e9,Vector(450,0,-55)} + self.SoundPositions["horn2"] = self.SoundPositions["horn1"] + + --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"] = self.SoundPositions["vdol_on"] + 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"] + 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)} + + 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.2} + self.SoundNames["door"..i.."x"..k.."o"] = {"subway_trains/common/door/door_open_end1.mp3","subway_trains/common/door/door_open_end2.mp3","subway_trains/common/door/door_open_end3.mp3","subway_trains/common/door/door_open_end4.mp3"} + self.SoundPositions["door"..i.."x"..k.."o"] = {300,1e9,GetDoorPosition(i,k),1} + 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"} + self.SoundPositions["door"..i.."x"..k.."c"] = self.SoundPositions["door"..i.."x"..k.."o"] + end + end + self.SoundNames["PN2end"] = "subway_trains/common/pneumatic/vz2_end.mp3" + self.SoundPositions["PN2end"] = {600,1e9,Vector(-183,0,-70),0.5} + + + 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 +end + +function ENT:InitializeSystems() + -- ЭлектроÑиÑтема Е (ÐРС) + self:LoadSystem("Electric","81_701_Electric") + + -- Токоприёмник + self:LoadSystem("TR","TR_3B") + -- ЭлектротÑговые двигатели + self:LoadSystem("Engines","DK_108D") + + -- РезиÑторы Ð´Ð»Ñ Ñ€ÐµÐ¾Ñтата/пуÑковых Ñопротивлений + self:LoadSystem("KF_47A","KF_47A6") + -- РезиÑторы Ð´Ð»Ñ Ð¾ÑÐ»Ð°Ð±Ð»ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð±ÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ + self:LoadSystem("KF_50A") + -- Ящик Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñ…Ñ€Ð°Ð½Ð¸Ñ‚ÐµÐ»Ñми + self:LoadSystem("YAP_57") + + -- РезиÑторы Ð´Ð»Ñ Ñ†ÐµÐ¿ÐµÐ¹ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + --self:LoadSystem("YAS_44V") + -- РеоÑтатный контроллер Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑƒÑковыми ÑÐ¾Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð»ÐµÐ½Ð¸Ñ + self:LoadSystem("RheostatController","EKG_17B") + -- Групповой переключатель положений + self:LoadSystem("PositionSwitch","EKG_18B") + -- Кулачковый контроллер + self:LoadSystem("KV","KV_40") + -- Контроллер резервного ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (KRP) + self:LoadSystem("KRU") + + + -- Ящики Ñ Ñ€ÐµÐ»Ðµ и контакторами + self:LoadSystem("LK_755A") + self:LoadSystem("YAR_13A","YAR_15A") + self:LoadSystem("YAR_27") + self:LoadSystem("YAK_36") + self:LoadSystem("YAK_37E") + self:LoadSystem("YAS_44V") + self:LoadSystem("YARD_2") + self:LoadSystem("PR_14X_Panels") + + -- ПневмоÑиÑтема 81-710 + self:LoadSystem("Pneumatic","81_717_Pneumatic") + self.Pneumatic.ValveType = 1 + -- Панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð•Ð¶ ÐРС МП + self:LoadSystem("Panel","81_508_Panel") + -- Everything else + self:LoadSystem("Battery") + self:LoadSystem("PowerSupply","DIP_01K") + --self:LoadSystem("DURA") + self:LoadSystem("ALS_ARS","NoARS") + + self:LoadSystem("ASNP31","Relay","Switch") + self:LoadSystem("ASNP32","Relay","Switch") + self:LoadSystem("Horn") + + self:LoadSystem("Announcer","81_722_Announcer", "AnnouncementsASNP") + self:LoadSystem("ASNP","81_71_ASNP") + self:LoadSystem("IGLA_CBKI","IGLA_CBKI2") + self:LoadSystem("IGLA_PCBK") +end + +ENT.SubwayTrain = { + Type = "E", + Name = "Em508", + WagType = 0, + ARS = { + HaveASNP = true, + NoEPK = true, + }, + ALS = { + HaveAutostop = true, + }, + EKKType = 703, + NoFrontEKK=true, +} +ENT.NumberRanges = {{3905,3954},{6001,6100},{6201,6251}} + +local Texture = {} +for k,v in pairs(Metrostroi.Skins["train"]) do + if v.typ == "em508" then Texture[k] = v.name or k end +end +local PassTexture = {} +for k,v in pairs(Metrostroi.Skins["pass"] or {}) do + if v.typ == "em508" then PassTexture[k] = v.name or k end +end +local CabTexture = {} +for k,v in pairs(Metrostroi.Skins["cab"] or {}) do + if v.typ == "em508" then CabTexture[k] = v.name or k end +end +local Announcer = {} +for k,v in pairs(Metrostroi.AnnouncementsASNP or {}) do Announcer[k] = v.name or k end +ENT.Spawner = { + model = "models/metrostroi_train/81-508/81-508.mdl", + interim = "gmod_subway_em508_int", + func = function(ent,i,maxi) + if i > 1 and i < maxi then + ent.VU:TriggerInput("Set",0) + ent.UAVA:TriggerInput("Set",1) + ent.Plombs.VU = false + ent.Plombs.UAVA = nil + else + ent.VU:TriggerInput("Set",1) + ent.UAVA:TriggerInput("Set",0) + ent.Plombs.VU = nil + ent.Plombs.UAVA = true + end + end, + Metrostroi.Skins.GetTable("Texture","Texture",Texture,"train"), + Metrostroi.Skins.GetTable("PassTexture","PassTexture",PassTexture,"pass"), + Metrostroi.Skins.GetTable("CabTexture","CabTexture",CabTexture,"cab"), + {"Announcer","Announcer","List",Announcer}, + {"HornType","Piter horn","Boolean"}, + {"NM","NM","Slider",1,0,9.0,8.2,function(ent,val) ent.Pneumatic.TrainLinePressure = val end}, + {"Battery","Battery","Boolean",true,function(ent,val) ent.VB:TriggerInput("Set",val) end}, + {"AV8B","AV8B","Boolean",true,function(ent,val) ent.AV8B:TriggerInput("Set",val) end}, + {"DoorsL","DoorsL","Boolean",false, function(ent,val,rot) + if rot then + ent.Pneumatic.RightDoorState = val and {1,1,1,1} or {0,0,0,0} + else + ent.Pneumatic.LeftDoorState = val and {1,1,1,1} or {0,0,0,0} + end + end}, + {"DoorsR","DoorsR","Boolean",false, function(ent,val,rot) + if rot then + ent.Pneumatic.LeftDoorState = val and {1,1,1,1} or {0,0,0,0} + else + ent.Pneumatic.RightDoorState = val and {1,1,1,1} or {0,0,0,0} + end + end}, + {"GV","GV","Boolean",true,function(ent,val) ent.GV:TriggerInput("Set",val) end}, +} diff --git a/lua/entities/_obsolete/gmod_subway_em508_int/cl_init.lua b/lua/entities/_obsolete/gmod_subway_em508_int/cl_init.lua new file mode 100644 index 0000000..cb8a418 --- /dev/null +++ b/lua/entities/_obsolete/gmod_subway_em508_int/cl_init.lua @@ -0,0 +1,1301 @@ +-------------------------------------------------------------------------------- +-- 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-2017 oldy (Aleksandr Kravchenko). All rights reserved. +-- - 81-703 Е (models\metrostroi_train\81-703) +-- - 81-508 Еm508 (models\metrostroi_train\81-508) +-- - 81-707 Ezh (models\metrostroi_train\81-707) +-- - 81-708 Еzh1 +-- - 81-710 Еzh3 (models\metrostroi_train\81-710) +-- - 81-508T Еm508T +-- - 81-720 Yauza (models\metrostroi_train\81-720) +-- - 81-721 Yauza (intermediate) +-- - 81-722 Yubileinyi (models\metrostroi_train\81-722) +-- - 81-723 Yubileinyi +-- - 81-724 Yubileinyi +-------------------------------------------------------------------------------- +include("shared.lua") + +-------------------------------------------------------------------------------- +ENT.ClientProps = {} +ENT.ButtonMap = {} +ENT.AutoAnims = {} +ENT.AutoAnimNames = {} +ENT.ClientSounds = {} + +ENT.ButtonMap["Lamp"] = { + pos = Vector(444.31597,-52.43482,37.93294), + ang = Angle(-8,-90+21.5,180), + width = 105, + height = 85, + scale = 0.0625, + + buttons = { + { ID = "L_3Toggle", x=15, y=15, radius=100, tooltip="Лампа: ПодÑветка приборов\nLamp: Gauges lighting", model = { + var="L_3",speed=16, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} + +ENT.ButtonMap["Main"] = { + pos = Vector(451.5+6.99,-31.78,-4.01), + ang = Angle(0,-93,90-20), + width = 315, + height = 240, + scale = 0.0588, + + buttons = { + ----Лампы + {ID = "GreenRP",x=42.2+41.3*3,y=58.4, radius=20, tooltip="Лампа: Ð—ÐµÐ»ÐµÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки\nLamp: Green overload relay light", model = {lamp = { + model = "models/metrostroi_train/81-703/cabin_lamp_white.mdl", z = 9, + var=36,speed=16, color = Color(50,180,180), + }}}, + {ID = "RedRP", x=42.2+41.2*4,y=58.4, radius=20, tooltip="Лампа: КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки\nLamp: Red overload relay light (power circuits failed to assemble)", model = {lamp = { + model = "models/metrostroi_train/81-703/cabin_lamp_white.mdl", z = 9, + var="RedRP",speed=5, color = Color(255,110,80), + getfunc = function(ent) return ent:GetPackedRatio("LRP") end, + }}}, + {ID = "SD", x=42.2+41.3*5,y=58.4, radius=20, tooltip="Лампа: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹\nLamp: SD door state light (doors are open)", model = {lamp = { + model = "models/metrostroi_train/81-703/cabin_lamp_white.mdl", z = 9, + var=40,speed=8, + }}}, + ----Кнопки + { ID = "DIPonSet", x=35.8+44*0, y=127.3, radius=20, tooltip="Вкл. ОÑв.: Включение оÑвещениÑ\nSwithcer:Turn interior lights on", model = { + model = "models/metrostroi_train/81-703/cabin_button_black.mdl",ang = 180,z=0, + var="DIPon",speed=16, + sndvol = 0.10, snd = function(val) return val and "button2_on" or "button1_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + { ID = "DIPoffSet", x=35.8+44*1, y=127.3, radius=20, tooltip="Выкл. ОÑв.: Отключение оÑвещениÑ\nSwithcer:Turn interior lights off", model = { + model = "models/metrostroi_train/81-703/cabin_button_black.mdl",ang = 180,z=0, + var="DIPoff",speed=16, + sndvol = 0.10, snd = function(val) return val and "button3_on" or "button4_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + { ID = "VozvratRPSet", x=35.8+44*2, y=127.3, radius=20, radius=20, tooltip="ВРП: Возврат РП\nKU:Reset overload relay", model = { + model = "models/metrostroi_train/81-703/cabin_button_black.mdl",ang = 180,z=0, + var="VozvratRP",speed=16, + sndvol = 0.10, snd = function(val) return val and "button4_on" or "button4_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + { ID = "KSNSet", x=35.8+44*3, y=127.3, radius=20, tooltip="КСÐ:Принудительное Ñрабатывание РП на неиÑправном вагоне (Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½ÐµÐ¸ÑправноÑти)\nKSN: Forced activation of the RP on the faulty wagon (Malfunction signaling)", model = { + model = "models/metrostroi_train/81-703/cabin_button_black.mdl",ang = 180,z=0, + var="KSN",speed=16, + sndvol = 0.10, snd = function(val) return val and "button4_on" or "button4_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + { ID = "KRZDSet", x=195.5, y=171.8, radius=20, tooltip="КРЗД: Кнопка резервного Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹\nKRZD: Emergency door closing", model = { + model = "models/metrostroi_train/81-703/cabin_button_black.mdl",ang = 180,z=-0, + var="KRZD",speed=16, + sndvol = 0.10, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + { ID = "KDPSet", x=35.8+44*5, y=127.3, radius=20, radius=20, tooltip="КДП:Правые двери\nKDP: Right doors open", model = { + model = "models/metrostroi_train/81-703/cabin_button_black.mdl",ang = 180,z=-0, + var="KDP",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 = "KDLSet", x=96.8, y=171.8, radius=20, tooltip="КДЛ: Кнопка левых дверей\nKDL: Left doors open", model = { + model = "models/metrostroi_train/81-703/cabin_button_black.mdl",ang = 180,z=0, + var="KDL",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=49,y=190,radius=20, tooltip="МК: Включение мотор-компреÑÑора\nMK: Turn on motor-compressor", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=-25, + var="KU1",speed=6, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + { ID = "VUD1Toggle",x=245,y=190,radius=20, tooltip="ВУД: Закрытие дверей\nVUD: Door control toggle (close doors)", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=-25, + var="VUD1",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),color = Color(120,120,120), + }}, + } +} + +ENT.ButtonMap["Back2"] = { + pos = Vector(405.5,25.9,4.0), + ang = Angle(0,90,90), + width = 280, + height = 340, + scale = 0.1088, + + buttons = { + {ID = "!HVFuses", x=0, y=12, w=280, h=130, tooltip="Блок предохранителей\nBlock Fuse HV fuses"}, + {ID = "!Relays", x=0, y=170, w=300, h=270, tooltip="Ящик Ñ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð°Ð¼Ð¸ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð·Ð°Ñ€Ñда аккумулÑторной батареи и дверной воздухораÑпределитель\nThe box with the devices for battery recharging and door pressure diffuser"}, + {ID = "!Heater", x=280, y=170, w=80, h=300, tooltip="Печка\nThe heater"}, + } +} + +--VU1 Panel +ENT.ButtonMap["VU1"] = { + pos = Vector(456+7.6,-16.7,31.2), + ang = Angle(0,270,90), + width = 120, + height = 300, + scale = 0.0625, + + buttons = { + {ID = "KRPSet", x=43, y=210, w=50, h=110, tooltip="РРП: Резервный пуÑк \nRRP: Motor emergency toggle", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=20, + var="KRP",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), color = Color(80,80,80), + }}, + } +} + +--VU Panel +ENT.ButtonMap["VU"] = { + pos = Vector(456+7.6,-16.15,12.0), + ang = Angle(0,270,90), + width = 100, + height = 220, + scale = 0.0625, + + buttons = { + {ID = "VUToggle", x=0, y=110, w=100, h=110, tooltip="ВУ: Выключатель УправлениÑ\nVU: Train control", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.mdl", z=20, ang = 180, + plomb = {model = "models/metrostroi_train/switches/autoplombr.mdl",x=4,z=0,ang=0,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), color = Color(200,200,250), + }}, + } +} + +ENT.ButtonMap["Stopkran"] = { + pos = Vector(459+7,27,20.7), + ang = Angle(0,-90,90), + width = 200, + height = 1300, + scale = 0.1/2, + buttons = { + {ID = "EmergencyBrakeValveToggle",x=0, y=0, w=200, h=1300, tooltip="Стопкран\nEmergency brake"}, + } +} + +ENT.ButtonMap["Tsepi"] = { + pos = Vector(456+7.6,-16.15,10.5), + ang = Angle(0,273,90), + width = 85, + height = 50, + scale = 0.0625, + + buttons = { + {ID = "!BatteryVoltage", x=0,y=0,w=85,h=50,tooltip="ÐапрÑжение цепей управлениÑ"}, + } +} + +ENT.ButtonMap["AVMain"] = { + pos = Vector(403.5,40.8,42), + ang = Angle(0,90,90), + width = 335, + height = 380, + scale = 0.0625, + + buttons = { + {ID = "AV8BToggle", x=0, y=0, w=300, h=380, tooltip="ÐÐ’-8Б: ÐвтоматичеÑкй выключатель (Ð’Ñпомогательные цепи выÑокого напрÑжениÑ)\n", model = { + model = "models/metrostroi_train/switches/automain.mdl", z=43, ang = -90, + var="AV8B",speed=6, vmin=0.0,vmax=1, skin=2, + sndvol = 3, snd = function(val) return val and "av8_on" or "av8_off" end, + }}, + } +} + +---AV1 Panel +ENT.ButtonMap["AV1"] = { + pos = Vector(403.5,41,16), + ang = Angle(0,90,90), + width = 290+0, + height = 155, + scale = 0.0625, + + buttons = { + {ID = "VU3Toggle", x=0, y=0, w=100, h=140, tooltip="ВУ3: ОÑвещение кабины\n", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.mdl", z=20, ang = 180, + var="VU3",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + {ID = "VU2Toggle", x=110, y=0, w=100, h=140, tooltip="ВУ2: Ðварийное оÑвещение\n", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.mdl", z=20, ang = 180, + var="VU2",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + {ID = "VU1Toggle", x=220, y=0, w=100, h=140, tooltip="ВУ1: Печь Ð¾Ñ‚Ð¾Ð¿Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹\n", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.mdl", z=20, ang = 180, + var="VU1",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), color = Color(150,150,150), + }}, + } +} + +-- Battery panel +ENT.ButtonMap["Battery"] = { + pos = Vector(403.5,16,20.5), + ang = Angle(0,90,90), + width = 250, + height = 300, + scale = 0.0625, + + buttons = { + {ID = "VBToggle", x=100, y=0, w=250, h=140, tooltip="ÐБ: Выключатель аккумулÑторной батареи (Ð’Ñпомогательные цепи низкого напрÑжениÑ)\nVB: Battery on/off", model = { + model = "models/metrostroi_train/Equipment/vu22_brown_3.mdl", z=15, ang = 180, + var="VB",speed=6, + sndvol = 1, snd = function(val) return val and "vu223_on" or "vu223_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + {ID = "R_RadioToggle", x=30, y=180, w=250, h=140, tooltip="Питание радиоинформатора +50Ð’\nRadioinformator", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.mdl", z=15, ang = 180, + var="R_Radio",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} + + +-- Parking brake panel +ENT.ButtonMap["ParkingBrake"] = { + pos = Vector(460,46.0,-2.0), + ang = Angle(0,-70,90), + width = 400, + height = 400, + scale = 0.0625, + + buttons = { + {ID = "ParkingBrakeLeft",x=0, y=0, w=200, h=400, tooltip="Поворот колеÑа ручного тормоза"}, + {ID = "ParkingBrakeRight",x=200, y=0, w=200, h=400, tooltip="Поворот колеÑа ручного тормоза"}, + } +} + +-- Train driver helpers panel +ENT.ButtonMap["HelperPanel"] = { + pos = Vector(452.5,61.5,18.44), + ang = Angle(0,-17.5,90), + width = 60, + height = 200, + scale = 0.0625, + + buttons = { + {ID = "R_Program1Set", x=12, y=200, radius=30, tooltip="Программа 1\nProgram 1", model = { + model = "models/metrostroi_train/81-703/cabin_button_black.mdl", z=-26, color = Color(255,255,255), + var="R_Program1",speed=6, + sndvol = 1, snd = function(val) return val and "pnm_button1_on" or "pnm_button1_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "R_Program2Set", x=47, y=200, radius=30, tooltip="Программа 2\nProgram 2", model = { + model = "models/metrostroi_train/81-703/cabin_button_black.mdl", z=-26, color = Color(255,255,255), + var="R_Program2",speed=6, + sndvol = 1, snd = function(val) return val and "pnm_button1_on" or "pnm_button1_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "VDLSet", x=30, y=42, radius=30, tooltip="ВДЛ: Выключатель левых дверей\nVDL: Left doors open", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=-3, color = Color(255,255,255), + var="VDL",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 = "VUD2Toggle", x=30, y=138, radius=30, tooltip="ВУД2: Выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÑŒÐ¼Ð¸\nVUD2: Door control toggle (close doors)", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=-3, color = Color(255,255,255), + var="VUD2",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), + }}, + } +} + + +-- Pneumatic instrument panel 2 +ENT.ButtonMap["PneumaticManometer"] = { + pos = Vector(451.73+7.6,-54,14.04), + ang = Angle(0,-144,90), + width = 76, + height = 70, + scale = 0.0625, + + buttons = { + {ID = "!LinesPressure", x=68,y=65,radius=68,tooltip="Давление в магиÑтралÑÑ… (краÑнаÑ: тормозной, чёрнаÑ: напорной)\nPressure in pneumatic lines (red: brake line, black: train line)"}, + } +} +-- Pneumatic instrument panel +ENT.ButtonMap["PneumaticPanels"] = { + pos = Vector(454.07+7.6,-50.11,5.9), + ang = Angle(0,-90-27,90), + width = 76, + height = 70, + scale = 0.0625, + + buttons = { + {ID = "!CylinderPressure", x=38,y=35,radius=35,tooltip="Тормозной манометр: Давление в тормозных цилиндрах (ТЦ)\nBrake cylinder pressure"}, + } +} +ENT.ButtonMap["DriverValveBLDisconnect"] = { + pos = Vector(443.5+7,-53,-37.61), + ang = Angle(-90,0,0), + width = 200, + height = 90, + scale = 0.0625, + + buttons = { + {ID = "DriverValveBLDisconnectToggle", x=0, y=0, w=95, h=100, tooltip="Кран двойной Ñ‚Ñги тормозной магиÑтрали\nTrain line disconnect valve", model = { + var="DriverValveBLDisconnect",sndid="brake_disconnect", + sndvol = 1, snd = function(val) return "disconnect_valve" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} +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=75, h=100, tooltip="Кран двойной Ñ‚Ñги напорной магиÑтрали\nBrake line disconnect valve", model = { + var="DriverValveTLDisconnect",sndid="train_disconnect", + sndvol = 1, snd = function(val) return val and "pneumo_TL_open" or "pneumo_TL_disconnect" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} +ENT.ButtonMap["Meters"] = { + pos = Vector(461.65213,-56.696617,37.528275), + ang = Angle(0,-148,90), + width = 73, + height = 140, + scale = 0.0625, + + buttons = { + {x=13, y=22, w=60, h=50, tooltip="Вольтметр выÑокого напрÑÐ¶ÐµÐ½Ð¸Ñ (кВ)\nHV voltmeter (kV)"}, + {x=13, y=81, w=60, h=50, tooltip="Ðмперметр (Ð)\nTotal ampermeter (A)"}, + } +} + + +-- Temporary panels (possibly temporary) +ENT.ButtonMap["FrontPneumatic"] = { + pos = Vector(468+7,-45.0,-59.9), + ang = Angle(0,90,90), + width = 900, + height = 100, + scale = 0.1, + buttons = { + {ID = "FrontBrakeLineIsolationToggle",x=150, y=50, radius=32, tooltip="Концевой кран тормозной магиÑтрали"}, + {ID = "FrontTrainLineIsolationToggle",x=750, y=50, radius=32, tooltip="Концевой кран напорной магиÑтрали"}, + } +} +ENT.ButtonMap["RearPneumatic"] = { + pos = Vector(-468-7,45.0,-59.9), + ang = Angle(0,270,90), + width = 900, + height = 100, + scale = 0.1, + buttons = { + {ID = "RearTrainLineIsolationToggle",x=150, y=50, radius=32, tooltip="Концевой кран напорной магиÑтрали"}, + {ID = "RearBrakeLineIsolationToggle",x=750, y=50, radius=32, tooltip="Концевой кран тормозной магиÑтрали"}, + } +} +ENT.ButtonMap["GV"] = { + pos = Vector(139,66,-54), + ang = Angle(0,180,90), + width = 170, + height = 170, + scale = 0.1, + buttons = { + {ID = "GVToggle",x=0, y=0, w= 170,h = 150, 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, + }}, + } +} +ENT.ButtonMap["AirDistributor"] = { + pos = Vector(-168,68.6,-50), + ang = Angle(0,180,90), + width = 170, + height = 80, + scale = 0.1, + buttons = { + {ID = "AirDistributorDisconnectToggle",x=0, y=0, w= 170,h = 80, tooltip="Выключение воздухораÑпределителÑ"}, + } +} + + +-- UAVA +ENT.ButtonMap["UAVAPanel"] = { + pos = Vector(444+5,56,-5), + ang = Angle(0,-70,90), + width = 230, + height = 170, + scale = 0.0625, + + buttons = { + {ID = "UAVAToggle",x=0, y=0, w=230/2, h=170, tooltip="УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа (отключение автоÑтопа)\nUAVA: Universal Automatic Autostop Disabler (autostop disable)", model = { + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=-20,x=6,y=65,z=-122,var="UAVAPl", ID="UAVAPl",}, + var="UAVA", + sndid="UAVALever",sndvol = 1, snd = function(val) return val and "uava_on" or "uava_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "UAVAContactSet",x=230/2, y=0, w=230/2, h=170, tooltip="УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа (воÑÑтановление контактов)\nUAVA: Universal Automatic Autostop Disabler(contacts reset)"}, + } +} + + + +for i=0,4 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, + } +end +for i=0,4 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, + } +end + +ENT.ButtonMap["InfoTableSelect"] = { + pos = Vector(455+7.0,35,14.0), + ang = Angle(0,-90,90), + width = 400, + height = 100, + scale = 0.1, + + + buttons = { + {ID = "PrevSign",x=300,y=0,w=50,h=100, tooltip="ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð½Ð°Ð´Ð¿Ð¸ÑÑŒ\nPrevious sign"}, + {ID = "NextSign",x=350,y=0,w=50,h=100, tooltip="Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð½Ð°Ð´Ð¿Ð¸ÑÑŒ\nNext sign"}, + + {ID = "Num2P",x=0,y=0,w=50,h=50, tooltip="Маршрут: Увеличить чиÑло 2\nRoute: Increase 2nd number"}, + {ID = "Num2M",x=0,y=50,w=50,h=50, tooltip="Маршрут: Уменьшить чиÑло 2\nRoute: Decrease 2nd number"}, + {ID = "Num1P",x=50,y=0,w=50,h=50, tooltip="Маршрут: Увеличить чиÑло 1\nRoute: Increase 1st number"}, + {ID = "Num1M",x=50,y=50,w=50,h=50, tooltip="Маршрут: Уменьшить чиÑло 1\nRoute: Decrease 1st number"}, + } +} + + +ENT.ButtonMap["Front"] = { + pos = Vector(468,16,43.4), + ang = Angle(0,-90,90), + width = 642, + height = 1780, + scale = 0.1/2, + buttons = { + {ID = "FrontDoor",x=0,y=0,w=642,h=1900, tooltip="ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ\nFront door", 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), + }}, + } +} + +ENT.ButtonMap["CabinDoor"] = { + pos = Vector(416,64,43.4), + ang = Angle(0,0,90), + width = 642, + height = 1780, + scale = 0.1/2, + buttons = { + {ID = "CabinDoor",x=0,y=0,w=642,h=2000, tooltip="Дверь в кабину машиниÑта\nCabin door", 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), + }}, + } +} + +ENT.ButtonMap["PassengerDoor"] = { + pos = Vector(384,-16,43.4), + ang = Angle(0,90,90), + width = 642, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=642,h=2000, tooltip="Дверь в кабину машиниÑта из Ñалона\nPass door", 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), + }}, + } +} +ENT.ButtonMap["PassengerDoor1"] = { + pos = Vector(384,16,43.4), + ang = Angle(0,-90,90), + width = 642, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=642,h=2000, tooltip="Дверь в кабину машиниÑта из Ñалона\nPass door", 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), + }}, + } +} + +ENT.ButtonMap["Back"] = { + pos = Vector(-470,-15,43.4), + ang = Angle(0,90,90), + width = 642, + height = 1780, + scale = 0.1/2, + buttons = { + {ID = "BackDoor",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), + }}, + } +} + +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(448.62+7.6,-51.69,-3.0), + ang = Angle(0,-133,0), +} +ENT.ClientProps["controller"] = { + model = "models/metrostroi_train/81-707/kv_ezh.mdl", + pos = Vector(451.36+6.4,-24.73,-3.5), + ang = Angle(0,180+15,0) +} + +ENT.ClientProps["reverser"] = { + model = "models/metrostroi/81-717/reverser.mdl", + pos = Vector(451.36+7.6,-23.43,-4.7), + ang = Angle(0,45,90) +} +ENT.ClientProps["brake_disconnect"] = { + model = "models/metrostroi_train/81-707/cran1.mdl", + pos = Vector(441.0+8.2,-55.30,-33.91), + ang = Angle(0,92,-90), +} + +ENT.ClientProps["train_disconnect"] = { + model = "models/metrostroi_train/81-707/cran3.mdl", + pos = Vector(444.482483+8.4,-50.746734,-27.333017), + ang = Angle(90,-100,90), +} +ENT.ClientProps["parking_brake"] = { + model = "models/metrostroi_train/81-703/cabin_parking.mdl", + pos = Vector(449.118378+7.6,33.493385,-14.713276), + ang = Angle(-90.000000,8.000000,0.000000), +} + +-------------------------------------------------------------------------------- +ENT.ClientProps["train_line"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(448.20+7.87,-50.91-4,12.1), + ang = Angle(-90,-90-48,90) +} +ENT.ClientProps["brake_line"] = { + model = "models/metrostroi_train/Equipment/arrow_tm.mdl", + pos = Vector(448.20+7.89,-50.94-4,12.1), + ang = Angle(-90,-90-48,90) +} + +ENT.ClientProps["brake_cylinder"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(453.199+7.4,-52.52,2.73000), + ang = Angle(222,80,-90.000000), +} +---------------------------------------------------------------- +ENT.ClientProps["voltmeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(450.284607+6.0,-56.887834,26.5+0), + ang = Angle(-90,0,-60) +} + +ENT.ClientProps["ampermeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(450.284607+5.9,-56.987834,30.5+0.4), + ang = Angle(-90,0,-60) +} + +ENT.ClientProps["volt1"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(458.81455+4.2,-19.63349,7.95662-1+0.4), + ang = Angle(-90,0,0), +} + +-------------------------------------------------------------------------------- +ENT.ClientProps["gv"] = { + model = "models/metrostroi/81-717/gv.mdl", + pos = Vector(130,62.5,-65), + ang = Angle(-90,0,-90) +} +ENT.ClientProps["gv_wrench"] = { + model = "models/metrostroi/81-717/reverser.mdl", + pos = Vector(130,62.5,-65), + ang = Angle(0,0,0) +} + + ENT.ButtonMap["InfoTableSelect"] = { + pos = Vector(464.0,15,22.0), + ang = Angle(0,-90,90), + width = 550, + height = 100, + scale = 0.1, + + + buttons = { + {ID = "PrevSign",x=0,y=0,w=50,h=100, tooltip="ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð½Ð°Ð´Ð¿Ð¸ÑÑŒ\nPrevious sign"}, + {ID = "NextSign",x=50,y=0,w=50,h=100, tooltip="Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð½Ð°Ð´Ð¿Ð¸ÑÑŒ\nNext sign"}, + + {ID = "Num2P",x=450,y=0,w=50,h=50, tooltip="Маршрут: Увеличить чиÑло 2\nRoute: Increase 2nd number"}, + {ID = "Num2M",x=450,y=50,w=50,h=50, tooltip="Маршрут: Уменьшить чиÑло 2\nRoute: Decrease 2nd number"}, + {ID = "Num1P",x=500,y=0,w=50,h=50, tooltip="Маршрут: Увеличить чиÑло 1\nRoute: Increase 1st number"}, + {ID = "Num1M",x=500,y=50,w=50,h=50, tooltip="Маршрут: Уменьшить чиÑло 1\nRoute: Decrease 1st number"}, + } +} + +ENT.ClientProps["Ema_salon"] = { + model = "models/metrostroi_train/81-508/81-508_salon.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0) +} +ENT.ClientProps["tab"] = { + model = "models/metrostroi_train/Equipment/tab.mdl", + pos = Vector(-0.0,0,-0), + ang = Angle(0,0,0), + skin = 2, + } +ENT.ClientProps["Ema_salon"] = { + model = "models/metrostroi_train/81-508/81-508_salon_interim.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0) +} +ENT.ClientProps["tab"] = { + model = "models/metrostroi_train/Equipment/tab.mdl", + pos = Vector(18.0,0,-0), + ang = Angle(0,0,0), + skin = 2, + } + +ENT.ClientProps["Ema_salon2"] = { + model = "models/metrostroi_train/81-508/81-508_underwagon.mdl", + pos = Vector(0,1,-18), + ang = Angle(0,0,0) +} +ENT.ClientProps["Lamps_emer"] = { + model = "models/metrostroi_train/81-508/81-508_lamps_emer.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0) +} +ENT.ClientProps["Lamps_full"] = { + model = "models/metrostroi_train/81-508/81-508_lamps.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0) +} + +ENT.ClientProps["FrontBrake"] = {-- + model = "models/metrostroi_train/81/tmiso.mdl", + pos = Vector(445+7, -30, -68), + ang = Angle(0,-90,0) +} +ENT.ClientProps["FrontTrain"] = {-- + model = "models/metrostroi_train/81/nmsio.mdl", + pos = Vector(445+7, 30, -68), + ang = Angle(0,-90,0) +} +ENT.ClientProps["RearBrake"] = {-- + model = "models/metrostroi_train/81/tmiso.mdl", + pos = Vector(-450-6, -30, -68), + ang = Angle(0,90,0) +} +ENT.ClientProps["RearTrain"] = {-- + model = "models/metrostroi_train/81/nmsio.mdl", + pos = Vector(-450-6, 30, -68), + ang = Angle(0,90,0) +} + + +-------------------------------------------------------------------------------- +-- 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-508/81-508_door_right.mdl", + pos = GetDoorPosition(i,k,0), + ang = Angle(0,90 + 180*k,0) + } + ENT.ClientProps["door"..i.."x"..k.."b"] = { + model = "models/metrostroi_train/81-508/81-508_door_left.mdl", + pos = GetDoorPosition(i,k,1), + ang = Angle(0,90 + 180*k,0) + } + end +end +ENT.ClientProps["door1"] = { + model = "models/metrostroi_train/81-508/81-508_door_front.mdl", + pos = Vector(460.62+7.4,-14.53,-7.23), + ang = Angle(0,-90,0), +} +ENT.ClientProps["door2"] = { + model = "models/metrostroi_train/81-508/81-508_door_front.mdl", + pos = Vector(-462.6-8,16.53,-7.24), + ang = Angle(0,90,0), +} +ENT.ClientProps["door3"] = { + model = "models/metrostroi_train/81-508/81-508_door_pass.mdl", + pos = Vector(396.7+6,-14.84,-10), + ang = Angle(0,90,0), +} +ENT.ClientProps["door4"] = { + model = "models/metrostroi_train/81-508/81-508_door_cab.mdl", + pos = Vector(411.17+7.6,66.05,-6.38), + ang = Angle(0,-90,0), +} +ENT.ClientProps["UAVALever"] = { + model = "models/metrostroi_train/81-703/cabin_uava.mdl", + pos = Vector(449+7.7,56.0,-10.24349), + ang = Angle(0,-90,90) +} + +ENT.ClientProps["RedLights"] = { + model = "models/metrostroi_train/81-703/81-703_red_light.mdl", + pos = Vector(-23+7.2,1,-191), + ang = Angle(0,0,0.000000), +} +ENT.ClientProps["DistantLights"] = { + model = "models/metrostroi_train/81-703/81-703_projcetor_light.mdl", + pos = Vector(-23+8.2,1,-191), + ang = Angle(00.000000,0.000000,0.000000), +} +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), +} + +ENT.Lights = { + [1] = { "headlight", Vector(475,0,-20), Angle(0,0,0), Color(169,130,88), brightness = 2 ,fov = 90 }, + [22] = { "headlight", Vector(432+4.5,-30.5,40.2), Angle(100,20,0), Color(255,130,88), hfov=160, vfov=90,farz=66,brightness = 5,shadows = 0, texture = "effects/flashlight/soft"}, +} +function ENT:Initialize() + self.BaseClass.Initialize(self) + --self.Train:SetPackedRatio("EmergencyValve_dPdT", leak) + --self.Train:SetPackedRatio("EmergencyValveEPK_dPdT", leak) + --self.Train:SetPackedRatio("EmergencyBrakeValve_dPdT", leak) + self.ASNP = self:CreateRT("717ASNP",512,128) + self.IGLA = self:CreateRT("717IGLA",512,128) + self.CraneRamp = 0 + self.ReleasedPdT = 0 + self.EmergencyValveRamp = 0 + self.EmergencyValveEPKRamp = 0 + self.EmergencyBrakeValveRamp = 0 +end + +function ENT:UpdateTextures() + self.Texture = self:GetNW2String("texture") + self.PassTexture = self:GetNW2String("passtexture") + self.CabinTexture = self:GetNW2String("cabtexture") + + self.Number = self:GetWagonNumber() + + self.RouteNumber = self:GetNW2String("RouteNumber","00") + + local texture = Metrostroi.Skins["train"][self.Texture] + local passtexture = Metrostroi.Skins["pass"][self.PassTexture] + local cabintexture = Metrostroi.Skins["cab"][self.CabinTexture] + for _,ent in pairs(self.ClientEnts) do + if not IsValid(ent) then continue end + for k,v in pairs(ent:GetMaterials()) do + local tex = string.Explode("/",v) + tex = tex[#tex] + if cabintexture and cabintexture.textures[tex] then + ent:SetSubMaterial(k-1,cabintexture.textures[tex]) + end + if passtexture and passtexture.textures[tex] then + ent:SetSubMaterial(k-1,passtexture.textures[tex]) + end + if texture and texture.textures[tex] then + ent:SetSubMaterial(k-1,texture.textures[tex]) + end + end + end + + local count = math.max(4,math.ceil(math.log10(self.Number))) + for i=0,4 do + self:ShowHide("TrainNumberL"..i,i 0,self:GetPackedRatio("Headlight")) + if IsValid(self.GlowingLights[1]) then + self.GlowingLights[1]:SetEnableShadows(true) + 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 val = self.Anims["gauges_lit"] and self.Anims["gauges_lit"].value^3 or 0 + self:SetLightPower(22,val>0,val)--self:GetPackedBool("PanelLights")) + + --print(self.FrontDoor,self:GetPackedBool(114)) + --print(self.RearDoor,self:GetPackedBool(156)) + --[[ + if self.FrontDoor < 90 and self:GetPackedBool(157) or self.FrontDoor > 0 and not self:GetPackedBool(157) then + --local FrontDoorData = self.ClientProps["door1"] + --FrontDoor:SetLocalPos(FrontDoorData.pos + Vector(-2,-0,0)) + self.FrontDoor = math.max(0,math.min(90,self.FrontDoor + (self:GetPackedBool(157) and 1 or -1)*self.DeltaTime*180)) + self:ApplyMatrix("door1",Vector(0,-16,0),Angle(0,self.FrontDoor,0)) + if not self.ButtonMapMatrix["InfoTable"] then + self.ButtonMapMatrix["InfoTable"] = {} + self.ButtonMapMatrix["InfoTable"].scale = 0.1/2 + end + self.ButtonMapMatrix["InfoTable"].ang = Angle(0,90+self.FrontDoor,90) + self.ButtonMapMatrix["InfoTable"].pos = Vector(458.0,-16.0,12.0) + Vector(0,1.5,0)*self.FrontDoor/90 + + end + ]] + local transient = (self.Transient or 0)*0.05 + if (self.Transient or 0) ~= 0.0 then self.Transient = 0.0 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 Lamps = self:GetPackedBool(20) and 0.6 or 1 + self:ShowHideSmooth("Lamps_emer",self:Animate("lamps_emer",self:GetPackedBool("Lamps_emer") and Lamps or 0,0,1,6,false)) + self:ShowHideSmooth("Lamps_full",self:Animate("lamps_full",self:GetPackedBool("Lamps_full") and Lamps or 0,0,1,6,false)) + self:ShowHideSmooth("Gauges_lit",self:Animate("gauges_lit",(self:GetPackedBool("L_3") and self:GetPackedBool("VB")) and 1 or 0,0,1,12,false)) + + self:Animate("KRR", self:GetPackedBool("KRR") and 0 or 1,0,1, 16, false) + self:Animate("KRP", self:GetPackedBool(113) and 1 or 0,0,1, 16, false) + + + self:ShowHideSmooth("RedLights",self:Animate("redlights",self:GetPackedBool("RedLight") and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("WhiteLights",self:Animate("whitelights",self:GetPackedBool("HeadLights2") and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("DistantLights",self:Animate("distantlights",self:GetPackedBool("HeadLights1") and 1 or 0,0,1,5,false)) + + self:Animate("brake_disconnect",self:GetPackedBool("DriverValveBLDisconnect") and 0 or 1,0.25,0.5, 4,false) + self:Animate("train_disconnect",self:GetPackedBool("DriverValveTLDisconnect") and 1 or 0,0.25,0, 4,false) + + self:Animate("UAVALever", self:GetPackedBool(152) and 0 or 1, 0,0.25, 128, 3,false) + + + + -- Simulate pressure gauges getting stuck a little + self:Animate("brake", 1-self:GetPackedRatio(0), 0.00, 0.48, 256,24) + self:Animate("controller", self:GetPackedRatio(1), 0, 0.31, 25*1000,1) + self:Animate("reverser", self:GetPackedRatio(2), 0.26, 0.35, 4,false) + self:Animate("volt1", self:GetPackedRatio(10), 0.6,0.5,45,3) + self:ShowHide("reverser", self:GetPackedBool(0)) + + self:Animate("brake_line", self:GetPackedRatio(4), 0.2, 0.85, 359,3)--,,0.01) + self:Animate("train_line", self:GetPackedRatio(5)-transient, 0.2, 0.85, 359,3)--,,0.01) + self:Animate("brake_cylinder", self:GetPackedRatio(6), 0, 0.95, 359,3)--,,0.03) + self:Animate("voltmeter", self:GetPackedRatio(7), 0.632,0.36,92,2) + self:Animate("ampermeter", self:GetPackedRatio(8), 0.632,0.36, nil, nil, 92,20,3) + + + local door1 = self:Animate("door1", self:GetPackedBool(157) and 0.99 or 0,0,0.22, 1024, 1) + local door2 = self:Animate("door2", self:GetPackedBool(156) and 0.99 or 0,0,0.25, 1024, 1) + local door3 = self:Animate("door3", self:GetPackedBool(158) and 0.99 or 0,1,0.79, 1024, 1) + local door4 = self:Animate("door4", self:GetPackedBool(159) and 0.99 or 0,1,0.77, 1024, 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 > 0) then + self.Door3 = door3 > 0 + self:PlayOnce("door3","bass",self.Door3 and 1 or 0) + end + if self.Door4 ~= (door4 > 0) then + self.Door4 = door4 > 0 + self:PlayOnce("door4","bass",self.Door4 and 1 or 0) + end + + self:Animate("FrontBrake", self:GetNW2Bool("FbI") and 0 or 1,0,0.35, 3, false) + self:Animate("FrontTrain", self:GetNW2Bool("FtI") and 0 or 1,0,0.35, 3, false) + self:Animate("RearBrake", self:GetNW2Bool("RbI") and 1 or 0,0,0.35, 3, false) + self:Animate("RearTrain", self:GetNW2Bool("RtI") and 1 or 0,0,0.35, 3, false) + + self:ShowHideSmooth("AVULight_light",self:Animate("AVUl",self:GetPackedBool(38) and 1 or 0,0,1,10,false)) + + -- Main switch + if self.LastValue ~= self:GetPackedBool(5) then + self.ResetTime = CurTime()+1.5 + self.LastValue = self:GetPackedBool(5) + end + self:Animate("gv_wrench", (self:GetPackedBool(5) and 1 or 0), 0,0.51, 128, 1,false) + self:ShowHide("gv_wrench", CurTime() < self.ResetTime) + + ---BIG Digits + if self:GetPackedBool(32) then + local speed = self:GetPackedRatio("Speed")*100.0 + if IsValid(self.ClientEnts["speedo1"])then + self.ClientEnts["speedo1"]:SetSkin(math.floor(speed)%10) + end + if IsValid(self.ClientEnts["speedo2"])then + self.ClientEnts["speedo2"]:SetSkin(math.floor(speed/10)) + end + end + + self:ShowHide("speedo1",self:GetPackedBool(32)) + self:ShowHide("speedo2",self:GetPackedBool(32)) + + -- Animate doors +--self:InitializeSounds() + 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.8+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 + + -- Door transient + if (self.Transient or 0) ~= 0.0 then self.Transient = 0.0 end + local door_state1 = self:GetPackedBool(21) + local door_state2 = self:GetPackedBool(25) + if door_state1 ~= self.PrevDoorState1 then + self.PrevDoorState1 = door_state1 + self.Transient = 1.00 + end + if door_state2 ~= self.PrevDoorState2 then + self.PrevDoorState2 = door_state2 + self.Transient = 1.00 + end + + local dT = self.DeltaTime + local speed = self:GetPackedRatio("Speed")*100.0 + local rol10 = math.Clamp(speed/12,0,1)*(1-math.Clamp((speed-25)/8,0,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_10",rol10,0.6) + self:SetSoundState("rolling_40",rol40,rol40p) + self:SetSoundState("rolling_70",rol70,rol70p) + self:SetSoundState("rolling_80",rol80,rol80p) + --[[ + local sign = 1 + if dPdT < 0 then sign = -1 end + if self.PrevDpSign ~= sign then + self.PrevDpSign = sign + self:SetSoundState("release",0.0,0.0) + end]] + + + local dT = self.DeltaTime + local threshold = 0.01 + local dPdT = self:GetPackedRatio("BrakeCylinderPressure_dPdT") + self.ReleasedPdT = math.Clamp(self.ReleasedPdT + 4*(-self:GetPackedRatio("BrakeCylinderPressure_dPdT",0)-self.ReleasedPdT)*dT,0,1) + --print(dPdT) + self:SetSoundState("release1",math.Clamp(self.ReleasedPdT,0,1)^1.65,1.0) + + if self:GetPackedBool(22) then + self.CraneRamp = self.CraneRamp + 1.0*((0.9*self:GetPackedRatio("Crane_dPdT",0))-self.CraneRamp)*dT + self:SetSoundState("crane334_brake",0,1.0) + self:SetSoundState("crane334_brake_slow",0,1.0) + self:SetSoundState("crane334_release",0,1.0) + else + self.CraneRamp = math.Clamp(self.CraneRamp + 8.0*((1*self:GetPackedRatio("Crane_dPdT",0))-self.CraneRamp)*dT,-1,1) + self:SetSoundState("crane334_brake",math.Clamp(((-self.CraneRamp)-0.5)/0.5,0,1),1.0) + self:SetSoundState("crane334_brake_slow",math.Clamp((-self.CraneRamp)*2,0,1),1.0) + self:SetSoundState("crane334_release",math.Clamp(self.CraneRamp,0,1),1.0) + end + local emergencyValveEPK = self:GetPackedRatio("EmergencyValveEPK_dPdT", 0) + self.EmergencyValveEPKRamp = math.Clamp(self.EmergencyValveEPKRamp + 1.0*((0.5*emergencyValveEPK)-self.EmergencyValveEPKRamp)*dT,0,1) + self:SetSoundState("epk_brake",self.EmergencyValveEPKRamp,1.0) + if emergencyValveEPK > 0 and not self.EmergencyValveEPKStart then + self:PlayOnce("epk_brake_start","bass",1,1) + self.EmergencyValveEPKStart = true + end + if emergencyValveEPK <= 0 and self.EmergencyValveEPKStart then + self.EmergencyValveEPKStart = false + end + + local emergencyBrakeValve = self:GetPackedRatio("EmergencyBrakeValve_dPdT", 0) + self.EmergencyBrakeValveRamp = math.Clamp(self.EmergencyBrakeValveRamp + 1.0*((0.5*emergencyBrakeValve)-self.EmergencyBrakeValveRamp)*dT,0,1) + self:SetSoundState("valve_brake",self.EmergencyBrakeValveRamp,1.0) + if emergencyBrakeValve > 0 and not self.EmergencyBrakeValveStart then + self:PlayOnce("valve_brake_start","bass",1,1) + self.EmergencyBrakeValveStart = true + end + if emergencyBrakeValve <= 0 and self.EmergencyBrakeValveStart then + self.EmergencyBrakeValveStart = false + end + self:SetSoundState("pneumo_idle",math.min(1,self:GetPackedRatio(4)/50*(self:GetPackedBool(6) and 1 or 0)),1.0) + + local emergencyValve = self:GetPackedRatio("EmergencyValve_dPdT", 0) + self.EmergencyValveRamp = math.Clamp(self.EmergencyValveRamp + 1.0*((0.5*emergencyValve)-self.EmergencyValveRamp)*dT,0,1) + self:SetSoundState("emer_brake",self.EmergencyValveRamp,1.0) + if emergencyValve > 0 and not self.EmergencyValveStart then + self:PlayOnce("emer_brake_start","bass",1,1) + self.EmergencyValveStart = true + end + if emergencyValve <= 0 and self.EmergencyValveStart then + self.EmergencyValveStart = false + end + + + -- Compressor + local state = self:GetPackedBool(20) + self:SetSoundState("compressor",state and 0.6 or 0,1) + -- ARS/ringer alert + state = self:GetPackedBool(39) + if state then + self:SetSoundState("ring_old",0.20,1) + else + self:SetSoundState("ring_old",0,0) + end + + state = self:GetPackedBool("VPR") + if state then + self:SetSoundState("vpr",1,1) + else + self:SetSoundState("vpr",0,0) + end + + -- RK rotation + if self:GetPackedBool(112) then self.RKTimer = CurTime() end + state = (CurTime() - (self.RKTimer or 0)) < 0.2 + self:SetSoundState("rk",state and 0.7 or 0,1) + + local work = self:GetNW2Bool("ASNPPlay") + local playing = self:GetNW2Bool("AnnouncerPlaying", false) + self.NoiseVolume = self.NoiseVolume or 0 + local buzzvolume = 0 + if self.Sounds["announcer1"] and IsValid(self.Sounds["announcer1"]) then buzzvolume = (1-(self.Sounds["announcer1"]:GetLevel())*math.Rand(0.9,3))*1 end + if self.NoiseVolume > buzzvolume then + self.NoiseVolume = math.Clamp(self.NoiseVolume + 8*(buzzvolume-self.NoiseVolume)*dT,0.1,1) + else + self.NoiseVolume = math.Clamp(self.NoiseVolume + 0.5*(buzzvolume-self.NoiseVolume)*dT,0.1,1) + end + for k,v in ipairs(self.AnnouncerPositions) do + local play = playing and work + for i=1,2 do + self:SetSoundState(Format("announcer_noise%d_%d",i,k),play and self.NoiseVolume or 0,1) + end + if self.Sounds["announcer"..k] and IsValid(self.Sounds["announcer"..k]) then self.Sounds["announcer"..k]:SetVolume(play and 1 or 0) end + end +end + +function ENT:Draw() + self.BaseClass.Draw(self) +end +function ENT:DrawPost(special) + --local dc = render.GetLightColor(self:LocalToWorld(Vector(460.0,0.0,5.0))) + +if self.InfoTableTimeout and (CurTime() < self.InfoTableTimeout) then + self:DrawOnPanel("InfoTableSelect",function() + local text = self:GetNW2String("FrontText","") + local col = text:find("ЗЕЛ") and Color(100,200,0) or text:find("СИÐ") and Color(0,100,200) or text:find("МÐЛ") and Color(200,100,200) or text:find("ОРÐ") and Color(200,200,0) or text:find("БИР") and Color(48,213,200) or Color(255,0,0) + draw.DrawText(self:GetNW2String("RouteNumber","") .. " " .. text,"MetrostroiSubway_InfoPanel",260, -100,col,TEXT_ALIGN_CENTER) + end) + end + + self:DrawOnPanel("FrontPneumatic",function() + draw.DrawText(self:GetNW2Bool("FbI") and "Isolated" or "Open","Trebuchet24",150,30,Color(0,0,0,255)) + draw.DrawText(self:GetNW2Bool("FtI") and "Isolated" or "Open","Trebuchet24",650,30,Color(0,0,0,255)) + end) + self:DrawOnPanel("RearPneumatic",function() + draw.DrawText(self:GetNW2Bool("RtI") and "Isolated" or "Open","Trebuchet24",150,30,Color(0,0,0,255)) + draw.DrawText(self:GetNW2Bool("RbI") and "Isolated" or "Open","Trebuchet24",650,30,Color(0,0,0,255)) + end) + 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) + if button == "ShowHelp" then + RunConsoleCommand("metrostroi_train_manual") + end + if button == "PrevSign" then + self.InfoTableTimeout = CurTime() + 2.0 + end + if button == "NextSign" then + self.InfoTableTimeout = CurTime() + 2.0 + end + + if button and button:sub(1,3) == "Num" then + self.InfoTableTimeout = CurTime() + 2.0 + end +end + +function ENT:OnButtonPressed(button) + if button == "ShowHelp" then + RunConsoleCommand("metrostroi_train_manual") + end + + if button == "PrevSign" then + self.InfoTableTimeout = CurTime() + 2.0 + end + if button == "NextSign" then + self.InfoTableTimeout = CurTime() + 2.0 + end + + if button and button:sub(1,3) == "Num" then + self.InfoTableTimeout = CurTime() + 2.0 + end +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 == "RVT" then + return range > 0 and "rvt_on" or "rvt_off",location,1,pitch + end + if soundid == "R1_5" then + return range > 0 and "r1_5_on" or "r1_5_off",location,1,pitch + end + if soundid == "RPB" then + return range > 0 and "rpb_on" or "rpb_off",location,1,pitch + end + if soundid == "KD" then + return range > 0 and "kd_on" or "kd_off",location,1,pitch + end + if soundid == "K25" then + return range > 0 and "k25_on" or "k25_off",location,1,pitch + end + if soundid == "RO" then + return range > 0 and "ro_on" or nil,location,1,pitch + end + if soundid == "AVU" then + return range > 0 and "avu_on" or "avu_off",location,1,0.6 + 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/_obsolete/gmod_subway_em508_int/init.lua b/lua/entities/_obsolete/gmod_subway_em508_int/init.lua new file mode 100644 index 0000000..f9a9c4b --- /dev/null +++ b/lua/entities/_obsolete/gmod_subway_em508_int/init.lua @@ -0,0 +1,861 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +ENT.BogeyDistance = 650 -- Needed for gm trainspawner + +--"DURASelectMain","DURASelectAlternate","DURAToggleChannel","DURAPowerToggle", +ENT.SyncTable = { + "CustomC","Custom1","Custom2","Custom3","CustomD", + "CustomE","CustomF","CustomG","R_UNch","R_ZS","R_G","R_Radio","R_Program1","R_Program2","KVT","KB","KSD", + "VZ1","VUD1","KDL","KDLR","KDLK","KDP","KDLRK","DoorSelect","Ring","UKS","AGS", + "KRZD","R_VPR","VozvratRP","AVU","KVP","ConverterProtection","RZP", + "KSN","ARS","ALS","OtklAVU","TormAT","L_1","L_3","DIPoff", + "VMK","BPSNon","RezMK","ARS13","L_4","VUS","VAH","VAD","EmergencyBrakeValve", + "KAH","KAHK","KDPK","CabinHeat","KRR","KRP", + "RC1","VB","BPS","UOS", "PB", "UAVA","AVULight_light","PD","AVU", + "DriverValveBLDisconnect","DriverValveTLDisconnect","DriverValveTLDisconnect","ParkingBrake","EPK", + "VUD2","VDL", "GV","DIPon","DIPoff","VozvratRP","KU1","RezMK", + "VU3","VU1","VU2","AV8B","VU","KDLK","VDLK","KDPK","RST", "DoorSelect","LPU","R_ASNPMenu","R_ASNPUp","R_ASNPDown","R_ASNPOn", +} +ENT.SyncFunctions = { + "" +} + +function ENT:Initialize() + + self.Plombs = { + RST = true, + Init = true, + OtklAVU = true, + UAVA = true, + VU=true, + } + -- Set model and initialize + self:SetModel("models/metrostroi_train/81-508/81-508.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create seat entities + self.DriverSeat = self:CreateSeat("driver",Vector(425,-39,-27.5),Angle(0,0,0)) + self.InstructorsSeat = self:CreateSeat("instructor",Vector(430,40,-48+6+2.5),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 + 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+3.5,0,-75),Angle(0,0,0),true,"717") + self.RearCouple = self:CreateCouple(Vector(-421.5-3.5,0,-75),Angle(0,180,0),false,"717") + local pneumoPow = 0.8+(math.random()^0.4)*0.3 + self.FrontBogey.PneumaticPow = pneumoPow + self.RearBogey.PneumaticPow = pneumoPow + + -- Initialize key mapping + self.KeyMap = { + [KEY_1] = "KVSetX1", + [KEY_2] = "KVSetX2", + [KEY_3] = "KVSetX3", + [KEY_4] = "KVSet0", + [KEY_5] = "KVSetT1", + [KEY_6] = "KVSetT1AB", + [KEY_7] = "KVSetT2", + [KEY_8] = "KRP", + + [KEY_EQUAL] = "R_Program1Set", + [KEY_MINUS] = "R_Program2Set", + + [KEY_G] = "VozvratRPSet", + + [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] = "KDL", + [KEY_D] = "KDP", + [KEY_V] = "VUD1Toggle", + [KEY_L] = "HornEngage", + [KEY_N] = "VZ1Set", + [KEY_PAD_1] = "PneumaticBrakeSet1", + [KEY_PAD_2] = "PneumaticBrakeSet2", + [KEY_PAD_3] = "PneumaticBrakeSet3", + [KEY_PAD_4] = "PneumaticBrakeSet4", + [KEY_PAD_5] = "PneumaticBrakeSet5", + [KEY_PAD_6] = "PneumaticBrakeSet6", + [KEY_PAD_7] = "PneumaticBrakeSet7", + [KEY_PAD_DIVIDE] = "KRPSet", + [KEY_PAD_MULTIPLY] = "KAHSet", + --[KEY_J] = "KVWrenchKRU", + + --[KEY_SPACE] = "PBSet", + [KEY_BACKSPACE] = "EmergencyBrake", + + [KEY_PAD_0] = "DriverValveDisconnect", + [KEY_LSHIFT] = { + [KEY_W] = "KVUp_Unlocked", + [KEY_SPACE] = "KVTSet", + + [KEY_A] = "DURASelectAlternate", + [KEY_D] = "DURASelectMain", + [KEY_V] = "DURAToggleChannel", + [KEY_1] = "DIPonSet", + [KEY_2] = "DIPoffSet", + [KEY_4] = "KVSet0Fast", + --[KEY_L] = "DriverValveDisconnect", + + [KEY_7] = "KVWrenchNone", + [KEY_8] = "KVWrenchKRU", + [KEY_9] = "KVWrenchKV", + [KEY_0] = "KVWrench0", + [KEY_6] = "KVSetT1A", + }, + + [KEY_RSHIFT] = { + [KEY_7] = "KVWrenchNone", + [KEY_9] = "KVWrenchKV", + [KEY_0] = "KVWrench0", + --[KEY_L] = "DriverValveDisconnect", + [KEY_F] = "BCCDSet", + [KEY_R] = "VZPSet", + }, + [KEY_LALT] = { + [KEY_V] = "VUD1Toggle", + }, + --[KEY_RALT] = { + --[KEY_L] = "EPKToggle", + --}, + } + + self.InteractionZones = { + { Pos = Vector(-471,-30,0), + Radius = 28, + ID = "RearDoor" + }, + { Pos = Vector(473,32,28), + Radius = 28, + ID = "FrontDoor1" + }, + { Pos = Vector(473,32,-28), + Radius = 28, + ID = "FrontDoor2" + }, + { Pos = Vector(383.02,31.85,2), + Radius = 28, + ID = "PassengerDoor1" + }, + { Pos = Vector(383.02,-31.85,2), + Radius = 28, + ID = "PassengerDoor2" + }, + { Pos = Vector(408.18,63.59,-26), + Radius = 16, + ID = "CabinDoor1" + }, + { Pos = Vector(408.18,63.59,6), + Radius = 16, + ID = "CabinDoor2" + }, + { Pos = Vector(408.18,63.59,38), + Radius = 16, + ID = "CabinDoor3" + }, + { Pos = Vector(458.18,63.59,-26), + Radius = 16, + ID = "CabinDoor4" + }, + { Pos = Vector(458.18,63.59,6), + Radius = 16, + ID = "CabinDoor5" + }, + { Pos = Vector(458.18,63.59,38), + Radius = 16, + ID = "CabinDoor6" + }, + } + + self.Lights = { + -- Head + [2] = { "glow", Vector(469.4, 45.43,-30.7), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 1.0 }, + [4] = { "glow", Vector(458+9,-14.86, 58), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 0.5 }, + [5] = { "glow", Vector(458+9,0, 58), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 0.5 }, + [6] = { "glow", Vector(458+9, 14.86, 58), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 0.5 }, + + -- Emergency lit + [9] = { "headlight", Vector(412,0,51), Angle(80,0,0), Color(255,255,255), brightness = 1, farz = 117, nearz = 0.01, shadows = 0, fov = 120 }, + -- Cabin + [22] = { "light", Vector(432+5.9,-54.5,42.2), Angle(90,0,0), Color(255,180,128), brightness = 0.75, scale = 0.4, texture = "sprites/light_glow03.vmt" }, + [23] = { "dynamiclight", Vector(432,-10.0,20), Angle(0,0,0), Color(255,130,88), brightness = 0.001, distance = 500}, + -- Interior + [11] = { "dynamiclight", Vector( 250, 0, -5), Angle(180,0,0), Color(255, 176, 59), brightness = 2, distance = 400 , fov=180 }, + [12] = { "dynamiclight", Vector( 0, 0, -5), Angle(180,0,0), Color(255, 176, 59), brightness = 2, distance = 400, fov=180 }, + [13] = { "dynamiclight", Vector(-300, 0, -5), Angle(180,0,0), Color(255, 176, 59), brightness = 2, distance = 400 , fov=180 }, + + [15] = { "light", Vector(402.202942,69.270073,44.79285), Angle(0,0,0), Color(150,255,255), brightness = 0.9, scale = 0.10, texture = "sprites/light_glow02.vmt" }, + [16] = { "light", Vector(402.202942,69.270073,41.509621), Angle(0,0,0), Color(50,255,0), brightness = 0.9, scale = 0.10, texture = "sprites/light_glow02.vmt" }, + [17] = { "light", Vector(402.202942,69.270073,37.3862), Angle(0,0,0), Color(255,255,0), brightness = 0.9, scale = 0.10, texture = "sprites/light_glow02.vmt" }, + + [70 ] = { "headlight", Vector( 450, -60, -47), Angle(45,-90,0), Color(255,255,255), brightness = 0.5, distance = 400 , fov=120, shadows = 1 }, + + } + + -- Cross connections in train wires + self.TrainWireInverts = { + [18] = true, + [34] = true, + } + self.TrainWireCrossConnections = { + [5] = 4, -- Reverser F<->B + [31] = 32, -- Doors L<->R + } + + -- Setup door positions + self.LeftDoorPositions = {} + self.RightDoorPositions = {} + for i=0,3 do + table.insert(self.LeftDoorPositions,Vector(353.0 - 35*0.5 - 231*i,65,-1.8)) + table.insert(self.RightDoorPositions,Vector(353.0 - 35*0.5 - 231*i,-65,-1.8)) + end + + -- KV wrench mode + self.KVWrenchMode = 0 + + -- Parking brake ratio + self.ManualBrake = 0.0 + self.RearDoor = false + self.FrontDoor = false + self.CabinDoor = false + self.PassengerDoor = false + +-- self.A5:TriggerInput("Set",0) + self:TrainSpawnerUpdate() +end + +function ENT:TrainSpawnerUpdate() + self.Texture = self:GetNW2String("Texture") + self.PassTexture = self:GetNW2String("PassTexture") + self.CabTexture = self:GetNW2String("CabTexture") + local texture = Metrostroi.Skins["train"][self.Texture] + local passtexture = Metrostroi.Skins["pass"][self.PassTexture] + local cabintexture = Metrostroi.Skins["cab"][self.CabTexture] + + for k in pairs(self:GetMaterials()) do + self:SetSubMaterial(k-1,"") + end + for k,v in pairs(self:GetMaterials()) do + if v == "models/metrostroi_train/81/int02" then + if not Metrostroi.Skins["717_schemes"] or not Metrostroi.Skins["717_schemes"]["m"] then + self:SetSubMaterial(k-1,Metrostroi.Skins["717_schemes"][""]) + else + if not self.Adverts or self.Adverts ~= 4 then + self:SetSubMaterial(k-1,Metrostroi.Skins["717_schemes"]["m"].adv) + else + self:SetSubMaterial(k-1,Metrostroi.Skins["717_schemes"]["m"].clean) + end + end + elseif v == "models/metrostroi_train/81/tabl" then + if not self.SignsList then + self:PrepareSigns() + end + if self.SignsList[self.SignsIndex] then self:SetSubMaterial(k-1,self.SignsList[self.SignsIndex][1]) end + end + local tex = string.Explode("/",v) + tex = tex[#tex] + if cabintexture and cabintexture.textures[tex] then + self:SetSubMaterial(k-1,cabintexture.textures[tex]) + end + if passtexture and passtexture.textures[tex] then + self:SetSubMaterial(k-1,passtexture.textures[tex]) + end + if texture and texture.textures[tex] then + self:SetSubMaterial(k-1,texture.textures[tex]) + end + end +end + +-------------------------------------------------------------------------------- +function ENT:Think() + local RetVal = self.BaseClass.Think(self) + + -- Check if wrench was pulled out + if self.DriversWrenchPresent then + self.KV:TriggerInput("Enabled",self:IsWrenchPresent() and 1 or 0) + end + self:SetPackedBool("RedLight",(self.Panel["RedLightLeft"] > 0.5 or self.Panel["RedLightRight"] > 0.5 ) and not IsValid(self.FrontTrain)) + + -- Emergency Ezh cabin lights + self:SetLightPower(9, self.AV8B.Value < 0.5 and self.VU2.Value > 0.5 and self.Panel["V1"] > 0.5) + + -- Cabin lights + --self:SetLightPower(22, self.L_2.Value > 0.5 and self.Panel["V1"] > 0.5) + self:SetLightPower(23, self.VU3.Value > 0.5) + + --Gauges lights + self:SetPackedBool("PanelLights",self.L_3.Value > 0.5 and self.Panel["V1"] > 0.5) + + local lightsActive2 = self.PowerSupply.XT3_4 > 65.0 + local lightsActive1 = (self.VU2.Value > 0.5 and self.Panel["V1"] > 0.5) or lightsActive2 + self:SetPackedBool("Lamps_emer",lightsActive1) + self:SetPackedBool("Lamps_full",lightsActive2) + local Light + if self.Pneumatic.Compressor == 1 then + Light = (lightsActive2 and 0.6 or 0.3) + else + Light = (lightsActive2 and 0.8 or 0.4) + end + self:SetLightPower(11, lightsActive1, Light) + self:SetLightPower(12, lightsActive1, Light) + self:SetLightPower(13, lightsActive1, Light) + self:SetPackedRatio("LampsI",math.Round((self.Electric.I24-150)/1000.0,1.5)) + + -- Total temperature + local IGLA_Temperature = math.max(self.Electric.T1,self.Electric.T2) + + -- Switch and button states + self:SetPackedBool(0,self:IsWrenchPresent()) + + -- Signal if doors are open or no to platform simulation + self.LeftDoorsOpen = + (self.Pneumatic.LeftDoorState[1] > 0.5) or + (self.Pneumatic.LeftDoorState[2] > 0.5) or + (self.Pneumatic.LeftDoorState[3] > 0.5) or + (self.Pneumatic.LeftDoorState[4] > 0.5) + self.RightDoorsOpen = + (self.Pneumatic.RightDoorState[1] > 0.5) or + (self.Pneumatic.RightDoorState[2] > 0.5) or + (self.Pneumatic.RightDoorState[3] > 0.5) or + (self.Pneumatic.RightDoorState[4] > 0.5) + self:WriteTrainWire(35,(self.Pneumatic.BrakeCylinderPressure > 0.1) and 1 or 0) + + -- DIP/power + self:SetPackedBool(32,self.Panel["V1"] > 0.5) + -- Red RP + local TW18 = self:GetTrainWire18() + if self:ReadTrainWire(20) == 0 or (self.Panel["V1"] < 0.5) then TW18 = 0 end + self:SetPackedBool(131,TW18 > 0) + self:SetPackedRatio("LRP",TW18) + self.TrueBrakeAngle = self.TrueBrakeAngle or 0 + if self.ManualBrake < 0.001 and self.ManualBrake > self.TrueBrakeAngle then self.TrueBrakeAngle = self.ManualBrake end + if self.ManualBrake > 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) + -- Green RP + self:SetPackedBool(36,self.Panel["GreenRP"] > 0.5) + -- Cabin heating + self:SetPackedBool(37,self.Panel["KUP"] > 0.5) + -- AVU + self:SetPackedBool(38,self.Panel["AVU"] > 0.5) + -- Ring + self:SetPackedBool(39,self.Panel["Ring"] > 0.5) + -- SD + self:SetPackedBool(40,self.Panel["V1"] > 0.5 and self.Panel["SD"] < 0.5) + -- KSD + self:SetPackedBool("KSD",self.KSD.Value == 0.00) + -- KRP + self:SetPackedBool(113,self.KRP.Value == 1.0) + + + self:SetPackedBool("DriverValveBLDisconnect",self.DriverValveBLDisconnect.Value == 1.0) + self:SetPackedBool("DriverValveTLDisconnect",self.DriverValveTLDisconnect.Value == 1.0) + if self.DriverValveDisconnect.Blocked > 0 and self.Pneumatic.ValveType == 2 then + self.DriverValveDisconnect:TriggerInput("Block",0) + self.DriverValveBLDisconnect:TriggerInput("Block",1) + self.DriverValveTLDisconnect:TriggerInput("Block",1) + end + if self.DriverValveDisconnect.Blocked == 0 and self.Pneumatic.ValveType == 1 then + self.DriverValveDisconnect:TriggerInput("Block",1) + self.DriverValveBLDisconnect:TriggerInput("Block",0) + self.DriverValveTLDisconnect:TriggerInput("Block",0) + end + self:SetPackedBool("EPK",self.EPK.Value == 1.0) + self:SetPackedBool("VPR",self.RST.Value > 0 and self.Panel["V1"] > 0) + self:SetPackedBool("LST",self:ReadTrainWire(6) > 0.5) + self:SetPackedBool("LVD",self:ReadTrainWire(1) > 0.5) + self:SetPackedBool("RK",self:ReadTrainWire(2) > 0.5) + self:SetPackedBool(19,self.OtklAVU.Value == 1.0) + self:SetPackedBool(20,self.Pneumatic.Compressor == 1.0) + self:SetPackedBool(21,self.Pneumatic.LeftDoorState[1] > 0.5) + self:SetPackedBool(25,self.Pneumatic.RightDoorState[1] > 0.5) + self:SetPackedBool(112,(self.RheostatController.Velocity ~= 0.0)) + self:SetPackedBool(55,(self.DoorSelect.Value == 1.0)) + self:SetPackedBool("VZ1",(self.VZ1.Value == 1)) + + self:SetPackedBool(17,self.KRZD.Value == 1.0) + self:SetPackedBool(156,self.RearDoor) + self:SetPackedBool(157,self.FrontDoor) + self:SetPackedBool(158,self.PassengerDoor) + self:SetPackedBool(159,self.CabinDoor) + + self:SetNW2Bool("ASNPPlay",self.VB.Value > 0 and self:ReadTrainWire(47) > 0) + --KRR + self:SetPackedBool("KRR",self.KRR.Value > 0.5) + + --Radiostation + self:SetPackedBool(125,self.R_G.Value == 1.0) + self:SetPackedBool(127,self.R_ZS.Value == 1.0) + self:SetPackedBool(126,self.R_Radio.Value == 1.0) + self:SetPackedBool(128,self.R_Program1.Value == 1.0) + self:SetPackedBool(129,self.R_Program2.Value == 1.0) + + --[[ + -- LST + self:SetPackedBool(49,self:ReadTrainWire(6) > 0.5) + -- LVD + self:SetPackedBool(50,self:ReadTrainWire(1) > 0.5) + + self:SetPackedBool(165,self.PB.Value > 0) + + -- AV states + -- for i,v in ipairs(self.Panel.AVMap) do + -- if tonumber(v) + -- then self:SetPackedBool(64+(i-1),self["A"..v].Value == 1.0) + -- elseif self[v] then self:SetPackedBool(64+(i-1),self[v].Value == 1.0) + -- end + -- end + + self:SetPackedBool(62,self.L_3.Value > 0.5) + self:SetPackedBool(64+19,self.VU1.Value > 0.5) + self:SetPackedBool(64+12,self.VU.Value > 0.5) + self:SetPackedBool(64+24,self.RST.Value > 0.5) + self:SetPackedBool(64+7 ,self.AV8B.Value > 0.5) + self:SetPackedBool(64+36,self.VU2.Value > 0.5) + self:SetPackedBool(64+13,self.VU3.Value > 0.5) + self:SetPackedBool("VPR",self.RST.Value == 1.0 and self.Panel["V1"]) + ]] + -- Feed packed floats + self:SetPackedRatio(0, 1-self.Pneumatic.DriverValvePosition/7) + self:SetPackedRatio(1, (self.KV.ControllerPosition+3)/7) + self:SetPackedRatio(2, 1-(self.KV.ReverserPosition+1)/2) + self:SetPackedRatio(4, self.Pneumatic.ReservoirPressure/16.0) + self:SetPackedRatio(5, self.Pneumatic.TrainLinePressure/16.0) + self:SetPackedRatio(6, math.min(2.7,self.Pneumatic.BrakeCylinderPressure)/6.0) + self:SetPackedRatio(7, self.Electric.Power750V/1000.0) + self:SetPackedRatio(8, 0.5 + 0.5*(self.Electric.I24/500.0)) + self:SetPackedRatio(9, self.Pneumatic.BrakeLinePressure_dPdT or 0) + if self.Pneumatic.TrainLineOpen then + self:SetPackedRatio(9, (-self.Pneumatic.TrainLinePressure_dPdT or 0)*6) + else + self:SetPackedRatio(9, self.Pneumatic.BrakeLinePressure_dPdT or 0) + end + self:SetPackedRatio(10,(self.Panel["V1"] * self.Battery.Voltage) / 82.0) + self:SetPackedRatio(11,IGLA_Temperature) + self:SetPackedBool("EmergencyBrakeValve",self.EmergencyBrakeValve.Value > 0) + self:SetPackedBool(152,self.UAVA.Value == 1.0) + + self:SetPackedBool(128,self.R_Program1.Value == 1.0) + self:SetPackedBool(129,self.R_Program2.Value == 1.0) + self:SetPackedBool(22,self.Pneumatic.ValveType == 2) + + -- Update ARS system (no ars on E) + self:SetPackedRatio(3, self.ALS_ARS.Speed/100.0) + self:SetPackedRatio("Speed", self.Speed/100) + ---print (self.Speed) + if (self.ALS_ARS.Ring == true) then + self:SetPackedBool(39,true) + end + + -- 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 = 27000+13000*(A < 0 and 1 or 0) + self.FrontBogey.Reversed = (self.RKR.Value > 0.5) + self.RearBogey.MotorForce = 27000+13000*(A < 0 and 1 or 0) + self.RearBogey.Reversed = (self.RKR.Value < 0.5) + + -- These corrections are required to beat source engine friction at very low values of motor power + local A = 2*self.Engines.BogeyMoment + 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 + self.FrontBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure*add + self.FrontBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + self.FrontBogey.ParkingBrake = self.ParkingBrake.Value > 0.5 + self.RearBogey.PneumaticBrakeForce = 50000.0 + self.RearBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure*add + self.RearBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + end + + -- Generate bogey sounds + local jerk = math.abs((self.Acceleration - (self.PrevAcceleration or 0)) / self.DeltaTime) + self.PrevAcceleration = self.Acceleration + + if jerk > (2.0 + self.Speed/15.0) then + self.PrevTriggerTime1 = self.PrevTriggerTime1 or CurTime() + self.PrevTriggerTime2 = self.PrevTriggerTime2 or CurTime() + + if ((math.random() > 0.00) or (jerk > 10)) and (CurTime() - self.PrevTriggerTime1 > 1.5) then + self.PrevTriggerTime1 = CurTime() + self.FrontBogey:EmitSound("subway_trains/bogey/chassis_"..math.random(1,5)..".wav", 85, math.random(96,110)) + end + if ((math.random() > 0.00) or (jerk > 10)) and (CurTime() - self.PrevTriggerTime2 > 1.5) then + self.PrevTriggerTime2 = CurTime() + self.RearBogey:EmitSound("subway_trains/bogey/chassis_"..math.random(1,5)..".wav", 85, math.random(96,110)) + end + end + + -- Temporary hacks + --self:SetNW2Float("V",self.Speed) + --self:SetNW2Float("A",self.Acceleration) + + return RetVal +end + +-------------------------------------------------------------------------------- +function ENT:OnButtonPress(button,ply) + -- Parking brake + if button == "ParkingBrakeLeft" then + self.ManualBrake = math.max(0.0,(self.ManualBrake or 0) - 0.05) + if self.ManualBrake == 0.0 then return end + end + if button == "ParkingBrakeRight" then + self.ManualBrake = math.min(1.0,(self.ManualBrake or 0) + 0.05) + if self.ManualBrake == 1.0 then return end + end + if string.find(button,"PneumaticBrakeSet") then + self.Pneumatic:TriggerInput("BrakeSet",tonumber(button:sub(-1,-1))) + return + end + if button:find("FrontDoor") then + self.FrontDoor = not self.FrontDoor + if self.FrontDoor then self:PlayOnce("door_open_tor","cabin") else self:PlayOnce("door_close_tor","cabin") end + end + if button:find("RearDoor") then + self.RearDoor = not self.RearDoor + if self.RearDoor then self:PlayOnce("door_open_tor") else self:PlayOnce("door_close_tor") end + end + if button:find("PassengerDoor") then + self.PassengerDoor = not self.PassengerDoor + if self.PassengerDoor then self:PlayOnce("door_open_tor","cabin") else self:PlayOnce("door_close_tor","cabin") end + end + if button:find("CabinDoor") then + self.CabinDoor = not self.CabinDoor + if self.CabinDoor then self:PlayOnce("door_open_tor","cabin") else self:PlayOnce("door_close_tor","cabin") end + end + if button == "NextSign" then + self:PrepareSigns() + self.SignsIndex = self.SignsIndex + 1 + if self.SignsIndex > #self.SignsList then self.SignsIndex = 1 end + + self:SetNW2String("FrontText",self.SignsList[self.SignsIndex][2]) + end + if button == "PrevSign" then + self:PrepareSigns() + self.SignsIndex = self.SignsIndex - 1 + if self.SignsIndex < 1 then self.SignsIndex = #self.SignsList end + + self:SetNW2String("FrontText",self.SignsList[self.SignsIndex][2]) + end + + if button == "Num1P" then + if not self.RouteNumber then self.RouteNumber = "00" end + local num = tonumber(self.RouteNumber[2]) + num = num + 1 + if num > 9 then num = 0 end + self.RouteNumber = string.SetChar(self.RouteNumber,2, num) + self:SetNW2String("RouteNumber",self.RouteNumber) + local trn = self.WagonList[#self.WagonList] + if IsValid(trn) and trn ~= self then + trn.RouteNumber = self.RouteNumber + trn:SetNW2String("RouteNumber",self.RouteNumber) + end + end + if button == "Num1M" then + if not self.RouteNumber then self.RouteNumber = "00" end + local num = tonumber(self.RouteNumber[2]) + num = num - 1 + if num < 0 then num = 9 end + self.RouteNumber = string.SetChar(self.RouteNumber,2, num) + self:SetNW2String("RouteNumber",self.RouteNumber) + local trn = self.WagonList[#self.WagonList] + if IsValid(trn) and trn ~= self then + trn.RouteNumber = self.RouteNumber + trn:SetNW2String("RouteNumber",self.RouteNumber) + end + end + if button == "Num2P" then + if not self.RouteNumber then self.RouteNumber = "00" end + local num = tonumber(self.RouteNumber[1]) + num = num + 1 + if num > 9 then num = 0 end + self.RouteNumber = string.SetChar(self.RouteNumber,1, num) + self:SetNW2String("RouteNumber",self.RouteNumber) + local trn = self.WagonList[#self.WagonList] + if IsValid(trn) and trn ~= self then + trn.RouteNumber = self.RouteNumber + trn:SetNW2String("RouteNumber",self.RouteNumber) + end + end + if button == "Num2M" then + if not self.RouteNumber then self.RouteNumber = "00" end + local num = tonumber(self.RouteNumber[1]) + num = num - 1 + if num < 0 then num = 9 end + self.RouteNumber = string.SetChar(self.RouteNumber,1, num) + self:SetNW2String("RouteNumber",self.RouteNumber) + local trn = self.WagonList[#self.WagonList] + if IsValid(trn) and trn ~= self then + trn.RouteNumber = self.RouteNumber + trn:SetNW2String("RouteNumber",self.RouteNumber) + end + 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 + --print(self.ManualBrake) + end + if button == "ManualBrakeRight" then + self.ManualBrake = math.min(1.0,self.ManualBrake + 0.008) + if self.ManualBrake == 1.0 then return end + --print(self.ManualBrake) + 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 == 2) and (button == "KVReverserUp") then + self.KRU:TriggerInput("Up",1) + self:OnButtonPress("KRUUp") + end + if (self.KVWrenchMode == 2) and (button == "KVReverserDown") then + self.KRU:TriggerInput("Down",1) + self:OnButtonPress("KRUDown") + end + if (self.KVWrenchMode == 2) and (button == "KVSetX1") then + self.KRU:TriggerInput("SetX1",1) + self:OnButtonPress("KRUSetX1") + end + if (self.KVWrenchMode == 2) and (button == "KVSetX2") then + self.KRU:TriggerInput("SetX2",1) + self:OnButtonPress("KRUSetX2") + end + if (self.KVWrenchMode == 2) and (button == "KVSetX3") then + self.KRU:TriggerInput("SetX3",1) + self:OnButtonPress("KRUSetX3") + end + if (self.KVWrenchMode == 2) and (button == "KVSet0") then + self.KRU:TriggerInput("Set0",1) + self:OnButtonPress("KRUSet0") + end + + if button == "KVSetT1AB" then + if self.KV.ControllerPosition == -2 then + self.KV:TriggerInput("ControllerSet",-1) + timer.Simple(0.20,function() + self.KV:TriggerInput("ControllerSet",-2) + end) + else + self.KV:TriggerInput("ControllerSet",-2) + end + end + if button == "KVWrench0" then + if self.KVWrenchMode == 3 or self.KVWrenchMode == 1 then + if self.KVWrenchMode ~= 1 then + self:PlayOnce("revers_in","cabin",0.7) + end + self.KVWrenchMode = 0 + self.DriversWrenchPresent = false + self.DriversWrenchMissing = false + self.KV:TriggerInput("Enabled",1) + self.KRU:TriggerInput("Enabled",0) + end + end + if button == "KVWrenchKV" then + if self.KVWrenchMode == 3 or self.KVWrenchMode == 0 then + if self.KVWrenchMode ~= 0 then + self:PlayOnce("revers_in","cabin",0.7) + end + self.KVWrenchMode = 1 + self.DriversWrenchPresent = true + self.DriversWrenchMissing = false + self.KV:TriggerInput("Enabled",1) + self.KRU:TriggerInput("Enabled",0) + end + end + --THERE IS NO KRU IN THIS EZH MODEL + --[[ + if button == "KVWrenchKRU" then + if self.KVWrenchMode == 3 then + self:PlayOnce("kru_in","cabin",0.7) + self.KVWrenchMode = 2 + self.DriversWrenchPresent = false + self.DriversWrenchMissing = true + self.KV:TriggerInput("Enabled",0) + self.KRU:TriggerInput("Enabled",1) + self.KRU:TriggerInput("LockX3",1) + end + end]] + if button == "KVWrenchNone" then + if self.KVWrenchMode ~= 3 and self.KV.ReverserPosition == 0 then + if self.KVWrenchMode == 2 then + self:PlayOnce("kru_out","cabin",0.7) + else + self:PlayOnce("revers_out","cabin",0.7) + end + self.KVWrenchMode = 3 + self.DriversWrenchPresent = false + self.DriversWrenchMissing = true + self.KV:TriggerInput("Enabled",0) + self.KRU:TriggerInput("Enabled",0) + end + end + --if button == "KVT2Set" then self.KVT:TriggerInput("Close",1) end + if button == "KDL" and self.VUD1.Value < 1 then self.KDL:TriggerInput("Close",1) self:OnButtonPress("KDLSet") end + if button == "KDP" and self.VUD1.Value < 1 then self.KDP:TriggerInput("Close",1) self:OnButtonPress("KDPSet") end + if button == "VDL" and self.VUD1.Value < 1 then self.VDL:TriggerInput("Close",1) self:OnButtonPress("VDLSet") end + if button == "KRP" then + self.KRP:TriggerInput("Set",1) + self:OnButtonPress("KRPSet") + 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 + if self.DriverValveBLDisconnect.Value == 1.0 then + if self.EPK.Value == 1 then self:PlayOnce("epv_on","cabin",0.9) end + else + --self:PlayOnce("pneumo_disconnect2","cabin",0.9) + if self.EPK.Value == 1 then self:PlayOnce("epv_off","cabin",0.9) end + end + return + end + -- Special logic + if (button == "VDL") or (button == "KDL") or (button == "KDP") then + --self.VUD1:TriggerInput("Open",1) + end + if (button == "KDP") then + --self.DoorSelect:TriggerInput("Close",1) + end + if (button == "VUD1Set") or (button == "VUD1Toggle") or + (button == "VUD2Set") or (button == "VUD2Toggle") then + self.VDL:TriggerInput("Open",1) + self.KDL:TriggerInput("Open",1) + self.KDP:TriggerInput("Open",1) + end + + if button == "GVToggle" then + if self.GV.Value > 0.5 then + self:PlayOnce("revers_f",nil,0.7) + else + self:PlayOnce("revers_b",nil,0.7) + end + return + end + + + --[[if (button == "UAVAToggle") then + if self.UAVA then + if self.UAVA.Value > 0.5 then + self:PlayOnce("uava_off","cabin") + else + self:PlayOnce("uava_off","cabin") + end + end + return + end]] +end + +function ENT:OnButtonRelease(button) + if string.find(button,"PneumaticBrakeSet") then + return + end + --if button == "KVT2Set" then self.KVT:TriggerInput("Open",1) end + if button == "KDL" and self.VUD1.Value < 1 then self.KDL:TriggerInput("Open",1) self:OnButtonRelease("KDLSet") end + if button == "KDP" and self.VUD1.Value < 1 then self.KDP:TriggerInput("Open",1) self:OnButtonRelease("KDPSet") end + if button == "VDL" and self.VUD1.Value < 1 then self.VDL:TriggerInput("Open",1) self:OnButtonRelease("VDLSet") end + if button == "KRP" then + self.KRP:TriggerInput("Set",0) + self:OnButtonRelease("KRPSet") + end + + --[[ + if (button == "PneumaticBrakeDown") and (self.Pneumatic.DriverValvePosition == 1) then + self.Pneumatic:TriggerInput("BrakeSet",2) + end + if self.Pneumatic.ValveType == 1 then + if (button == "PneumaticBrakeUp") and (self.Pneumatic.DriverValvePosition == 5) then + self.Pneumatic:TriggerInput("BrakeSet",4) + end + end + ]] + + if (not string.find(button,"KVT")) and string.find(button,"KV") then return end + if string.find(button,"KRU") then return 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 + +function ENT:TriggerTurbostroiInput(sys,name,val) + self.BaseClass.TriggerTurbostroiInput(self,sys,name,val) + if sys == "Panel" and name:find("HeadLights") or sys == "L_4" then + local brightness = math.min(1,self.Panel["HeadLights1"])*0.50 + + math.min(1,self.Panel["HeadLights2"])*0.25 + + math.min(1,self.Panel["HeadLights3"])*0.25 + if (self.Panel["HeadLights3"] > 0.5 or self.Panel["HeadLights1"] > 0.5) then-- and (self.L_4.Value > 0.5) then + self:SetPackedRatio("Headlight",brightness) + else + self:SetPackedRatio("Headlight",0) + end + self:SetPackedBool("HeadLights1",self.Panel["HeadLights1"] > 0) + self:SetPackedBool("HeadLights2",self.Panel["HeadLights2"] > 0) + end +end diff --git a/lua/entities/_obsolete/gmod_subway_em508_int/shared.lua b/lua/entities/_obsolete/gmod_subway_em508_int/shared.lua new file mode 100644 index 0000000..df7a969 --- /dev/null +++ b/lua/entities/_obsolete/gmod_subway_em508_int/shared.lua @@ -0,0 +1,538 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.PrintName = "Entities.Em508_int" +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" + +ENT.Spawnable = true +ENT.AdminSpawnable = false + +function ENT:PassengerCapacity() + return 300 +end + +function ENT:GetStandingArea() + return Vector(-450,-30,-45),Vector(380,30,-45) +end + +local function GetDoorPosition(i,k) + return Vector(359.0 - 35/2 - 229.5*i,-65*(1-2*k),7.5) +end +ENT.AnnouncerPositions = { + {Vector(412,-49 ,61),80,1}, + {Vector(-3,-60, 62),300,1}, + {Vector(-3,60 ,62),300,1}, +} + + +function ENT:InitializeSounds() + self.BaseClass.InitializeSounds(self) + 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_10"] = {1200,1e9,Vector(0,0,0),1} + self.SoundPositions["rolling_40"] = self.SoundPositions["rolling_10"] + self.SoundPositions["rolling_70"] = self.SoundPositions["rolling_10"] + self.SoundPositions["rolling_80"] = self.SoundPositions["rolling_10"] + 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["epv_on"] = "subway_trains/common/pneumatic/epv_on.mp3" + self.SoundNames["epv_off"] = "subway_trains/common/pneumatic/epv_off.mp3" + self.SoundPositions["epv_on"] = {100,1e9,Vector(437.2,-53.1,-32.0),1} + self.SoundPositions["epv_off"] = {100,1e9,Vector(437.2,-53.1,-32.0),1} + self.SoundPositions["epv_off"] = {60,1e9,Vector(437.2,-53.1,-32.0),1} + -- Релюшки + self.SoundNames["rpb_off"] = "subway_trains/717/relays/lsd_2.mp3" + self.SoundNames["rpb_on"] = "subway_trains/717/relays/relay_on.mp3" + self.SoundPositions["rpb_on"] = {100,1e9,Vector(400,25,-35),1} + self.SoundPositions["rpb_off"] = {100,1e9,Vector(400,25,-35),1} + self.SoundNames["rvt_on"] = { + "subway_trains/717/relays/brake_on1.mp3", + } + self.SoundNames["rvt_off"] = { + "subway_trains/717/relays/brake_off1.mp3", + "subway_trains/717/relays/brake_off2.mp3", + "subway_trains/717/relays/brake_off3.mp3", + } + self.SoundPositions["rvt_on"] = {100,1e9,Vector(400,25,-35),1} + self.SoundPositions["rvt_off"] = {100,1e9,Vector(400,25,-35),1} + if self.Breakers then + self.SoundNames["r1_5_on"] = "subway_trains/717/relays/drive_on1.mp3" + else + self.SoundNames["r1_5_on"] = "subway_trains/717/relays/drive2_on.mp3" + end + self.SoundNames["r1_5_off"] = "subway_trains/717/relays/drive_off.mp3" + self.SoundPositions["r1_5_on"] = {100,1e9,Vector(400,25,-35),1} + self.SoundPositions["r1_5_off"] = {100,1e9,Vector(400,25,-35),1} + + self.SoundNames["kd_off"] = "subway_trains/717/relays/lsd_2.mp3" + self.SoundNames["kd_on"] = "subway_trains/717/relays/lsd_1.mp3" + self.SoundPositions["kd_on"] = {100,1e9,Vector(400,25,-35),1} + self.SoundPositions["kd_off"] = {100,1e9,Vector(400,25,-35),1} + self.SoundNames["k25_off"] = "subway_trains/717/relays/lsd_2.mp3" + self.SoundNames["k25_on"] = "subway_trains/717/relays/relay_on.mp3" + self.SoundPositions["k25_on"] = {120,1e9,Vector(400,25,-35),1} + self.SoundPositions["k25_off"] = {120,1e9,Vector(400,25,-35),1} + self.SoundNames["ro_off"] = "subway_trains/717/relays/lsd_2.mp3" + self.SoundNames["ro_on"] = "subway_trains/717/relays/RO_on.mp3" + self.SoundPositions["ro_on"] = {140,1e9,Vector(400,25,-35),1} + self.SoundPositions["ro_off"] = {140,1e9,Vector(400,25,-35),1} + + + self.SoundNames["avu_off"] = "subway_trains/717/relays/lsd_2.mp3" + self.SoundNames["avu_on"] = "subway_trains/717/relays/relay_on.mp3" + self.SoundPositions["avu_on"] = {60,1e9, Vector(400,-40,-45),1} + self.SoundPositions["avu_off"] = {60,1e9, Vector(400,-40,-45),1} + --Подвагонка + self.SoundNames["lk2_on"] = "subway_trains/717/pneumatic/lk/lk2_on.mp3" + self.SoundNames["lk2_off"] = "subway_trains/717/pneumatic/lk/lk2_off.mp3" + self.SoundNames["lk3_on"] = "subway_trains/717/pneumatic/lk/lk3_on.mp3" + self.SoundNames["lk3_off"] = "subway_trains/717/pneumatic/lk/lk3_off.mp3" + self.SoundPositions["lk2_on"] = {440,1e9,Vector(-60,-40,-66),0.2} + self.SoundPositions["lk2_off"] = {400,1e9,Vector(-60,-40,-66),0.6} + self.SoundPositions["lk3_on"] = {440,1e9,Vector(-60,-40,-66),0.2} + self.SoundPositions["lk3_off"] = {400,1e9,Vector(-60,-40,-66),0.6} + + self.SoundNames["compressor"] = {loop=2.0,"subway_trains/ezh/compressor/ezh_compressor_start.mp3","subway_trains/ezh/compressor/ezh_compressor_loop.mp3", "subway_trains/ezh/compressor/ezh_compressor_end.mp3"} + self.SoundPositions["compressor"] = {700,1e9,Vector(-118,-40,-66)} + self.SoundNames["rk"] = {"subway_trains/717/rk/rk_start.wav","subway_trains/717/rk/rk_spin.wav","subway_trains/717/rk/rk_stop.mp3"} + self.SoundPositions["rk"] = {70,1e3,Vector(110,-40,-75)} + + 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.wav"} + self.SoundNames["revers_out"] = {"subway_trains/ezh3/kv66/revers_out.wav"} + self.SoundPositions["ezh3_revers_0-f"] = {80,1e9,Vector(445.5,-32+1.7,-7.5)} + self.SoundPositions["ezh3_revers_f-0"] = {80,1e9,Vector(445.5,-32+1.7,-7.5)} + self.SoundPositions["ezh3_revers_0-b"] = {80,1e9,Vector(445.5,-32+1.7,-7.5)} + self.SoundPositions["ezh3_revers_b-0"] = {80,1e9,Vector(445.5,-32+1.7,-7.5)} + self.SoundPositions["ezh3_revers_in"] = {80,1e9,Vector(445.5,-32+1.7,-7.5)} + self.SoundPositions["ezh3_revers_out"] = {80,1e9,Vector(445.5,-32+1.7,-7.5)} + + 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"] = {80,1e9,Vector(452.3,-24.0,4.0)} + + 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/kru2-3_1.mp3", + "subway_trains/717/kru/kru2-3_2.mp3", + "subway_trains/717/kru/kru2-3_3.mp3", + "subway_trains/717/kru/kru2-3_4.mp3", + } + self.SoundNames["kru_3_2"] = { + "subway_trains/717/kru/kru3-2_1.mp3", + "subway_trains/717/kru/kru3-2_2.mp3", + "subway_trains/717/kru/kru3-2_3.mp3", + "subway_trains/717/kru/kru3-2_4.mp3", + } + self.SoundPositions["kru_0_1"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_1_2"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_2_1"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_1_0"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_2_3"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_3_2"] = {80,1e9,Vector(452.3,-24.0,4.0)} + + self.SoundNames["kr_open"] = { + "subway_trains/717/cover/cover_open1.mp3", + "subway_trains/717/cover/cover_open2.mp3", + "subway_trains/717/cover/cover_open3.mp3", + } + self.SoundNames["kr_close"] = { + "subway_trains/717/cover/cover_close1.mp3", + "subway_trains/717/cover/cover_close2.mp3", + "subway_trains/717/cover/cover_close3.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["button4_off"] = { + "subway_trains/ezh3/switches/button_on1.mp3", + "subway_trains/ezh3/switches/button_on2.mp3", + } + self.SoundNames["button4_on"] = { + "subway_trains/717/switches/button4_on1.mp3", + "subway_trains/717/switches/button4_on2.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(449+7.7,56.0,-10.24349),0.6} + self.SoundNames["gv_f"] = self.SoundNames["revers_0-b"] + self.SoundNames["gv_b"] = self.SoundNames["revers_b-0"] + self.SoundPositions["gv_f"] = {80,1e2,Vector(120,62.0+0.0,-60),0.5} + self.SoundPositions["gv_b"] = {80,1e2,Vector(120,62.0+0.0,-60),0.5} + + --Краны + self.SoundNames["brake"] = {"subway_trains/common/pneumatic/vz_brake_on1.mp3","subway_trains/common/pneumatic/vz_brake_on2.mp3"} + self.SoundPositions["brake"] = {600,1e9,Vector(0,0,0),0.5} + self.SoundNames["release1"] = {loop=true,"subway_trains/common/pneumatic/release.wav"} --TODO разделение отпуÑка и Ñрыва по позициÑм в кабине\вне + self.SoundPositions["release1"] = {1200,1e9,Vector(-183,0,-70)} + self.SoundNames["crane334_brake"] = {loop=true,"subway_trains/common/pneumatic/334_brake.wav"} --TODO добавить жужжащий звук + self.SoundPositions["crane334_brake"] = {180,1e9,Vector(440,-55.75,-10)} + self.SoundNames["crane334_brake_slow"] = {loop=true,"subway_trains/common/pneumatic/334_brake_slow.wav"} --TODO добавить жужжащий звук + self.SoundPositions["crane334_brake_slow"] = {180,1e9,Vector(440,-55.75,-10)} + self.SoundNames["crane334_release"] = {loop=true,"subway_trains/common/pneumatic/334_release.wav"} + self.SoundPositions["crane334_release"] = {180,1e9,Vector(440,-55.75,-10)} + + self.SoundNames["epk_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["epk_brake"] = {200,1e9,Vector(437.2,-53.1,-50.0)} + self.SoundNames["epk_brake_start"] = "subway_trains/common/pneumatic/epv_start.mp3" + self.SoundPositions["epk_brake_start"] = self.SoundPositions["epk_brake"] + + self.SoundNames["valve_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["valve_brake"] = {200,1e9,Vector(402,-63,-50)} + self.SoundNames["valve_brake_start"] = "subway_trains/common/pneumatic/epv_start.mp3" + self.SoundPositions["valve_brake_start"] = self.SoundPositions["valve_brake"] + + self.SoundNames["emer_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["emer_brake"] = {200,1e9,Vector(380,-45,-75)} + self.SoundNames["emer_brake_start"] = "subway_trains/common/pneumatic/epv_start.mp3" + self.SoundPositions["emer_brake_start"] = self.SoundPositions["emer_brake"] + + self.SoundNames["pneumo_TL_open"] = { + "subway_trains/common/334/334_open.mp3", + } + 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["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/kv40_0_T1.mp3"} + self.SoundNames["kv40_t1_0"] = {"subway_trains/ezh/kv40/kv40_T1_0.mp3"} + self.SoundNames["kv40_t1_t1a"] = {"subway_trains/ezh/kv40/kv40_T1_T1A.mp3"} + self.SoundNames["kv40_t1a_t1"] = {"subway_trains/ezh/kv40/kv40_T1A_T1.mp3"} + self.SoundNames["kv40_t1a_t2"] = {"subway_trains/ezh/kv40/kv40_T1A_T2.mp3"} + self.SoundNames["kv40_t2_t1a"] = {"subway_trains/ezh/kv40/kv40_T2_T1A.mp3"} + self.SoundNames["kv40_0_x1"] = {"subway_trains/ezh/kv40/kv40_0_X1.mp3"} + self.SoundNames["kv40_x1_0"] = {"subway_trains/ezh/kv40/kv40_X1_0.mp3"} + self.SoundNames["kv40_x1_x2"] = {"subway_trains/ezh/kv40/kv40_X1_X2.mp3"} + self.SoundNames["kv40_x2_x1"] = {"subway_trains/ezh/kv40/kv40_X2_X1.mp3"} + self.SoundNames["kv40_x2_x3"] = {"subway_trains/ezh/kv40/kv40_X2_X3.mp3"} + self.SoundNames["kv40_x3_x2"] = {"subway_trains/ezh/kv40/kv40_X3_X2.mp3"} + --self.SoundPositions["kv70_fix_on"] = {100,1e9,Vector(442.2,-40,-16.2),2} + --self.SoundPositions["kv70_fix_off"] = {100,1e9,Vector(442.2,-40,-16.2),2} + self.SoundPositions["kv40_0_t1"] = {100,1e9,Vector(442.2,-40,-16.2),2} + self.SoundPositions["kv40_t1_0"] = self.SoundPositions["kv40_0_t1"] + self.SoundPositions["kv40_t1_t1a"] = self.SoundPositions["kv40_0_t1"] + self.SoundPositions["kv40_t1a_t1"] = self.SoundPositions["kv40_0_t1"] + self.SoundPositions["kv40_t1a_t2"] = self.SoundPositions["kv40_0_t1"] + self.SoundPositions["kv40_t2_t1a"] = self.SoundPositions["kv40_0_t1"] + self.SoundPositions["kv40_0_x1"] = self.SoundPositions["kv40_0_t1"] + self.SoundPositions["kv40_x1_0"] = self.SoundPositions["kv40_0_t1"] + self.SoundPositions["kv40_x1_x2"] = self.SoundPositions["kv40_0_t1"] + self.SoundPositions["kv40_x2_x1"] = self.SoundPositions["kv40_0_t1"] + self.SoundPositions["kv40_x2_x3"] = self.SoundPositions["kv40_0_t1"] + self.SoundPositions["kv40_x3_x2"] = self.SoundPositions["kv40_0_t1"] + + self.SoundNames["ring"] = {"subway_trains/717/ring/ring_start.wav","subway_trains/717/ring/ring_loop.wav","subway_trains/717/ring/ring_end.wav"} + self.SoundPositions["ring"] = {100,1e9,Vector(400,-40,50)} + + self.SoundNames["ring2"] = {loop=0.1,"subway_trains/717/ring/ringc_start.wav","subway_trains/717/ring/ringc_loop.wav","subway_trains/717/ring/ringc_end.mp3"} + self.SoundPositions["ring2"] = {100,1e9,Vector(400,-40,50)} + + 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"] = {100,1e9,Vector(400,-40,50)} + + self.SoundNames["cab_door_open"] = { + "subway_trains/common/door/cab/cab_door_open2.mp3", + "subway_trains/common/door/cab/cab_door_open.mp3", + } + self.SoundPositions["cab_door_open"] = {100,1e9,Vector(400,-40,50)} + + self.SoundNames["cab_door_close"] = { + "subway_trains/common/door/cab/cab_door_close2.mp3", + "subway_trains/common/door/cab/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"] = {120,1e9,Vector(449.118378+7.6,33.493385,-14.713276)} + 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"} + + 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(420.4-0.6,-56.1-0.15,9.87-1.15),0.3} + self.SoundPositions["igla_off"] = {50,1e9,Vector(420.4-0.6,-56.1-0.15,9.87-1.15),0.3} + self.SoundPositions["igla_start1"] = {50,1e9,Vector(420.4-0.6,-56.1-0.15,9.87-1.15),0.3} + self.SoundPositions["igla_start2"] = {50,1e9,Vector(420.4-0.6,-56.1-0.15,9.87-1.15),0.2} + + self.SoundNames["upps"] = {"subway_trains/common/other/upps/upps1.mp3","subway_trains/common/other/upps/upps2.mp3"} + self.SoundPositions["upps"] = {60,1e9,Vector(443,-64,4),0.5} + + 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","subway_trains/common/pnm/pnm_switch_off2.mp3"} + self.SoundNames["pnm_button1_on"] = { + "subway_trains/common/pnm/pnm_button_push.mp3", + "subway_trains/common/pnm/pnm_button_push2.mp3", + "subway_trains/common/pnm/pnm_button_push3.mp3", + } + + self.SoundNames["pnm_button2_on"] = { + "subway_trains/common/pnm/pnm_button_push4.mp3", + "subway_trains/common/pnm/pnm_button_push5.mp3", + "subway_trains/common/pnm/pnm_button_push6.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", + "subway_trains/common/pnm/pnm_button_release6.mp3", + } + + self.SoundNames["horn1"] = {loop=0.6,"subway_trains/common/pneumatic/horn/horn1_start.wav","subway_trains/common/pneumatic/horn/horn1_loop.wav", "subway_trains/common/pneumatic/horn/horn1_end.mp3"} + self.SoundNames["horn2"] = {loop=0.8,"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["horn1"] = {1100,1e9,Vector(450,0,-55)} + self.SoundPositions["horn2"] = self.SoundPositions["horn1"] + + --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"] = self.SoundPositions["vdol_on"] + 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"] + 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)} + + 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.2} + self.SoundNames["door"..i.."x"..k.."o"] = {"subway_trains/common/door/door_open_end1.mp3","subway_trains/common/door/door_open_end2.mp3","subway_trains/common/door/door_open_end3.mp3","subway_trains/common/door/door_open_end4.mp3"} + self.SoundPositions["door"..i.."x"..k.."o"] = {300,1e9,GetDoorPosition(i,k),1} + 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"} + self.SoundPositions["door"..i.."x"..k.."c"] = self.SoundPositions["door"..i.."x"..k.."o"] + end + end + self.SoundNames["PN2end"] = "subway_trains/common/pneumatic/vz2_end.mp3" + self.SoundPositions["PN2end"] = {600,1e9,Vector(-183,0,-70),0.5} + + 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 +end + +function ENT:InitializeSystems() + -- ЭлектроÑиÑтема Е (ÐРС) + self:LoadSystem("Electric","81_701_Electric") + + -- Токоприёмник + self:LoadSystem("TR","TR_3B") + -- ЭлектротÑговые двигатели + self:LoadSystem("Engines","DK_108D") + + -- РезиÑторы Ð´Ð»Ñ Ñ€ÐµÐ¾Ñтата/пуÑковых Ñопротивлений + self:LoadSystem("KF_47A","KF_47A6") + -- РезиÑторы Ð´Ð»Ñ Ð¾ÑÐ»Ð°Ð±Ð»ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð±ÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ + self:LoadSystem("KF_50A") + -- Ящик Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñ…Ñ€Ð°Ð½Ð¸Ñ‚ÐµÐ»Ñми + self:LoadSystem("YAP_57") + + -- РезиÑторы Ð´Ð»Ñ Ñ†ÐµÐ¿ÐµÐ¹ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + --self:LoadSystem("YAS_44V") + -- РеоÑтатный контроллер Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑƒÑковыми ÑÐ¾Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð»ÐµÐ½Ð¸Ñ + self:LoadSystem("RheostatController","EKG_17B") + -- Групповой переключатель положений + self:LoadSystem("PositionSwitch","EKG_18B") + -- Кулачковый контроллер + self:LoadSystem("KV","KV_40") + -- Контроллер резервного ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (KRP) + self:LoadSystem("KRU") + + + -- Ящики Ñ Ñ€ÐµÐ»Ðµ и контакторами + self:LoadSystem("LK_755A") + self:LoadSystem("YAR_13A","YAR_15A") + self:LoadSystem("YAR_27") + self:LoadSystem("YAK_36") + self:LoadSystem("YAK_37E") + self:LoadSystem("YAS_44V") + self:LoadSystem("YARD_2") + self:LoadSystem("PR_14X_Panels") + + -- ПневмоÑиÑтема 81-710 + self:LoadSystem("Pneumatic","81_717_Pneumatic") + self.Pneumatic.ValveType = 1 + -- Панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð•Ð¶ ÐРС МП + self:LoadSystem("Panel","81_508_Panel") + -- Everything else + self:LoadSystem("Battery") + self:LoadSystem("PowerSupply","DIP_01K") + --self:LoadSystem("DURA") + self:LoadSystem("ALS_ARS","NoARS") + + self:LoadSystem("ASNP31","Relay","Switch") + self:LoadSystem("ASNP32","Relay","Switch") + self:LoadSystem("Horn") + + self:LoadSystem("Announcer","81_722_Announcer", "AnnouncementsASNP") + self:LoadSystem("ASNP","81_71_ASNP") + self:LoadSystem("IGLA_CBKI","IGLA_CBKI2") + self:LoadSystem("IGLA_PCBK") +end + +ENT.SubwayTrain = { + Type = "E", + Name = "Em508", + WagType = 1, + ARS = { + NoEPK = true, + NoUAVA = true, + }, + EKKType = 703, + NoFrontEKK=true, +} + +ENT.NumberRanges = {{3955,3999},{6101,6200}} \ No newline at end of file diff --git a/lua/entities/_obsolete/gmod_subway_ema/cl_init.lua b/lua/entities/_obsolete/gmod_subway_ema/cl_init.lua new file mode 100644 index 0000000..e8e6854 --- /dev/null +++ b/lua/entities/_obsolete/gmod_subway_ema/cl_init.lua @@ -0,0 +1,1640 @@ +include("shared.lua") + + +-------------------------------------------------------------------------------- +ENT.ClientProps = {} +ENT.ButtonMap = {} + +----- +-- ALS Panel +----- +ENT.ButtonMap["ARSPanel"] = { + pos = Vector(463.08,-52.68,28.05), + ang = Angle(0,-90-29,90), + width = 38, + height = 240, + scale = 0.0625, + + buttons = { + {ID = "L80", x=20, y=24+39.5*0, radius = 15, tooltip="80: Ограничение ÑкороÑти 80 км/ч\nSpeed limit 80 kph"}, + {ID = "L70", x=19, y=24+39.5*1, radius = 15, tooltip="70: Ограничение ÑкороÑти 70 км/ч\nSpeed limit 70 kph"}, + {ID = "L60", x=18, y=24+39.5*2, radius = 15, tooltip="60: Ограничение ÑкороÑти 60 км/ч\nSpeed limit 60 kph"}, + {ID = "L40", x=18, y=24+39.5*3, radius = 15, tooltip="40: Ограничение ÑкороÑти 40 км/ч\nSpeed limit 40 kph"}, + {ID = "L0", x=18, y=24+39.5*4, radius = 15,tooltip="0: Ограничение ÑкороÑти 0 км/ч\nSpeed limit 0 kph"}, + {ID = "LNF", x=18, y=24+39.5*5, radius = 15, tooltip="ÐЧ: ОтÑутÑтвие чаÑтоты ÐРС\nNCh: No ARS frequency"}, + } +} +for k,v in pairs(ENT.ButtonMap["ARSPanel"].buttons) do + Metrostroi.ClientPropForButton(v.ID,{ + panel = "ARSPanel", + button = v.ID, + model = "models/metrostroi_train/em/ars_"..v.ID:sub(2,-1)..".mdl", + z = -4, + ang = 90, + staylabel = true, + }) +end +-- Main panel +ENT.ButtonMap["Main"] = { + pos = Vector(459.7,-31.9,-0.69), + ang = Angle(0,-90,90-26), + width = 315, + height = 240, + scale = 0.0588, + + buttons = { + {ID = "KVTSet", x=44, y=52, radius=27, tooltip="КБ: Кнопка БдительноÑти\nKB: Attention button"}, + {ID = "ARSLamp", x=88.9, y=54.6, radius=15, tooltip="ÐРС: Лампа Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ ÐРС\nARS: ARS brake lamp"}, + {ID = "VZPToggle", x=36+47*2, y=56+58*0, radius=20, tooltip="Выключатель задержки поезда"}, + {ID = "VZDSet", x=35+47*3, y=55+58*0, radius=20, tooltip="Выключатель задержки дверей"}, + {ID = "AutodriveLamp", x=220.7, y=54.5, radius=15, tooltip="Ðвтоведение: Лампа хода от автоведениÑ\nAutodrive: Autodrive drive lamp"}, + {ID = "KRZDSet", x=269, y=56, radius=20, tooltip="КУ10: Кнопка резервного Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹\nKRZD: Emergency door closing"}, + + {ID = "KDLSet", x=33, y=56+58*1, radius=20, tooltip="КУ12: Кнопка левых дверей\nKDL: Left doors open"}, + {ID = "DIPonSet", x=33+47*1, y=56+58*1, radius=20, tooltip="КУ4:Включение оÑвещениÑ\nTurn interior lights on"}, + {ID = "DIPoffSet", x=33+47*2, y=56+58*1, radius=20, tooltip="КУ5:Отключение оÑвещениÑ\nTurn interior lights off"}, + {ID = "VozvratRPSet", x=33+47*3, y=56+58*1, radius=20, tooltip="КУ9:Возврат РП\nReset overload relay"}, + {ID = "KSNSet", x=33+47*4, y=56+58*1, radius=20, tooltip="КУ8:Принудительное Ñрабатывание РП на неиÑправном вагоне (ÑÐ¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½ÐµÐ¸ÑправноÑти)\nKSN: Failure indication button"}, + {ID = "KDPSet", x=33+47*5, y=56+58*1, radius=20, tooltip="КДП:Правые двери\nKDP: Right doors open"}, + ----Down Panel + {ID = "KU1Toggle", x=21,y=138,w=45,h=71, tooltip="КУ1:Включение мотор-компреÑÑора\nTurn motor-compressor on"}, + {ID = "KTLamp", x=79.8, y=178.5, radius=15, tooltip="КТ: Контроль тормоза(торможение Ñффективно)\nKT: Brake control(efficient brakes)"}, + {ID = "RingSet", x=116.9, y=176, radius=20, tooltip="Звонок передачи управлениÑ\nControl transfer ring"}, + {ID = "VUSToggle", x=153,y=180,radius=10, tooltip="Дальний Ñвет\nDistant light"}, + {ID = "KAKSet", x=189.2,y=176.8,radius=20, tooltip="ÐК: ÐÐ²Ð°Ñ€Ð¸Ð¹Ð½Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°(Ð¥3 при резервном управлении)\nAK: Emergency button(X3 with emergency control)"}, + {ID = "VAutodriveToggle", x=226,y=180,radius=10, tooltip="Включение автоведениÑ\nAutodrive enable"}, + {ID = "VUD1Toggle", x=237.7,y=138,w=45,h=70, tooltip="КУ2: Закрытие дверей\nKU2: Door control toggle (close doors)"}, + } +} + + + +Metrostroi.ClientPropForButton("DIPon",{ + panel = "Main", + button = "DIPonSet", + model = "models/metrostroi_train/em/buttonblack.mdl", + ang = 90, + z = 0, +}) +Metrostroi.ClientPropForButton("VozvratRP",{ + panel = "Main", + button = "VozvratRPSet", + model = "models/metrostroi_train/em/buttonblack.mdl", + ang = 90, + z = 0, +}) + +Metrostroi.ClientPropForButton("ARSLamp",{ + panel = "Main", + button = "ARSLamp", + model = "models/metrostroi_train/Em/LampPult.mdl", + z=3, + staylabel = true, +}) + +Metrostroi.ClientPropForButton("VZP",{ + panel = "Main", + button = "VZPToggle", + model = "models/metrostroi_train/81/tumbler4.mdl", + ang = 90, +}) +Metrostroi.ClientPropForButton("VZD",{ + panel = "Main", + button = "VZDSet", + model = "models/metrostroi_train/em/buttonblack.mdl", + ang = 90, + z = 0, +}) + +Metrostroi.ClientPropForButton("AutodriveLamp",{ + panel = "Main", + button = "AutodriveLamp", + model = "models/metrostroi_train/Em/LampPult.mdl", + z=3, + staylabel = true, +}) + +Metrostroi.ClientPropForButton("KVT",{ + panel = "Main", + button = "KVTSet", + model = "models/metrostroi_train/em/buttonbig.mdl", + ang = 90, + z = 0, +}) +Metrostroi.ClientPropForButton("DIPoff",{ + panel = "Main", + button = "DIPoffSet", + model = "models/metrostroi_train/em/buttonred.mdl", + ang = 90, + z = 0, +}) +Metrostroi.ClientPropForButton("KSN",{ + panel = "Main", + button = "KSNSet", + model = "models/metrostroi_train/em/buttonred.mdl", + ang = 90, + z = 0, +}) +Metrostroi.ClientPropForButton("KDP",{ + panel = "Main", + button = "KDPSet", + model = "models/metrostroi_train/em/buttonred.mdl", + ang = 90, + z = 0, +}) + +Metrostroi.ClientPropForButton("KDL",{ + panel = "Main", + button = "KDLSet", + model = "models/metrostroi_train/em/buttonred.mdl", + ang = 90, + z = 0, +}) +Metrostroi.ClientPropForButton("KRZD",{ + panel = "Main", + button = "KRZDSet", + model = "models/metrostroi_train/em/buttonblack.mdl", + ang = 90, + z = 0, +}) + +Metrostroi.ClientPropForButton("VUD",{ + panel = "Main", + button = "VUD1Toggle", + model = "models/metrostroi_train/switches/vudwhite.mdl", + z=-23, +}) +Metrostroi.ClientPropForButton("KU1",{ + panel = "Main", + button = "KU1Toggle", + model = "models/metrostroi_train/switches/vudbrown.mdl", + z=-23, +}) + +Metrostroi.ClientPropForButton("KTLamp",{ + panel = "Main", + button = "KTLamp", + model = "models/metrostroi_train/Em/LampPult.mdl", + z=3, + staylabel = true, +}) + +Metrostroi.ClientPropForButton("VAutodrive",{ + panel = "Main", + button = "VAutodriveToggle", + model = "models/metrostroi_train/81/tumbler4.mdl", + ang = 90, +}) +--RRP +Metrostroi.ClientPropForButton("KAK",{ + panel = "Main", + button = "KAKSet", + model = "models/metrostroi_train/em/buttonred.mdl", + ang = 0, + z = 0, +}) +Metrostroi.ClientPropForButton("Ring",{ + panel = "Main", + button = "RingSet", + model = "models/metrostroi_train/em/buttonred.mdl", + ang = 0, + z = 0, +}) +--VUSToggle +Metrostroi.ClientPropForButton("VUS",{ + panel = "Main", + button = "VUSToggle", + model = "models/metrostroi_train/81/tumbler4.mdl", + ang = 90, +}) + +--Lamps +ENT.ButtonMap["Lamps"] = { + pos = Vector(464.42,-21.07,28.65), + ang = Angle(0,-13.5,90), + width = 24, + height = 310, + scale = 0.0625, + + buttons = { + {ID = "LampAutodrive", x=12.6, y=16, radius=10, tooltip="Включение автоведениÑ\nAutodrive enabled q"}, + {ID = "Lamp2", x=12.6, y=15.8 + 38*1, radius=10, tooltip="2: Лампа второго провода (ход реоÑтатного контроллера)\n2: 2nd train wire lamp(rheostat controller motion)"}, + {ID = "Lamp1", x=12.6, y=18.2 + 38*2, radius=10, tooltip="1: Лампа первого провода (включение двигателей)\n1: 1st train wire lamp(engines engaged)"}, + {ID = "Lamp6", x=12.6, y=19 + 38*3, radius=10, tooltip="6: Лампа шеÑтого провода (ÑÐ¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ)\n6: 6th train wire lamp(brakes engaged)"}, + {ID = "DoorsWag", x=12.6, y=22 + 38*4, radius=10, tooltip="Двери вагона: Лампа проверки РД при вклюёчнном КСД\nWagon doors: RD check lamp with enabled KSD"}, + {ID = "Doors", x=12.6, y=24.7 + 38*5, radius=10, tooltip="Двери: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹\nDoors: Door state light (doors are closed)"}, + {ID = "GreenRP", x=12.6, y=25.4 + 38*6, radius=10, tooltip="РП вагона: Лампа реле перегрузки вагона (Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿ÐµÑ€ÐµÐ³Ñ€ÑƒÐ·ÐºÐ¸)\nWagon RP: Wagon overload relay light (overload relay open on current train)"}, + {ID = "RedRP", x=12.6, y=27.8 + 38*7, radius=10, tooltip="РП поезда: Лампа реле перегрузки\nTrain RP: Overload relay light (power circuits failed to assemble)"}, + } +} +local i=1 +for k,v in pairs(ENT.ButtonMap["Lamps"].buttons) do + Metrostroi.ClientPropForButton(v.ID,{ + panel = "Lamps", + button = v.ID, + model = "models/metrostroi_train/em/lamp"..i..".mdl", + staylabel = true, + }) + i = i + 1 +end + +--Lamps +ENT.ButtonMap["Lamps2"] = { + pos = Vector(466.38,-19.33,28.65), + ang = Angle(0,180-13.5,90), + width = 24, + height = 310, + scale = 0.0625, + + buttons = { + {ID = "LampAutodrive", x=12, y=16, radius=10, tooltip="Включение автоведениÑ\nAutodrive enabled q"}, + {ID = "Lamp2", x=12, y=15.8 + 38*1, radius=10, tooltip="2: Лампа второго провода (ход реоÑтатного контроллера)\n2: 2nd train wire lamp(rheostat controller motion)"}, + {ID = "Lamp1", x=12, y=18.2 + 38*2, radius=10, tooltip="1: Лампа первого провода (включение двигателей)\n1: 1st train wire lamp(engines engaged)"}, + {ID = "Lamp6", x=12, y=19 + 38*3, radius=10, tooltip="6: Лампа шеÑтого провода (ÑÐ¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ)\n6: 6th train wire lamp(brakes engaged)"}, + {ID = "DoorsWag", x=12, y=22 + 38*4, radius=10, tooltip="Двери вагона: Лампа проверки РД при вклюёчнном КСД\nWagon doors: RD check lamp with enabled KSD"}, + {ID = "Doors", x=12, y=24.7 + 38*5, radius=10, tooltip="Двери: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹\nDoors: Door state light (doors are closed)"}, + {ID = "GreenRP", x=12, y=25.4 + 38*6, radius=10, tooltip="РП вагона: Лампа реле перегрузки вагона (Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿ÐµÑ€ÐµÐ³Ñ€ÑƒÐ·ÐºÐ¸)\nWagon RP: Wagon overload relay light (overload relay open on current train)"}, + {ID = "RedRP", x=12, y=27.8 + 38*7, radius=10, tooltip="РП поезда: Лампа реле перегрузки\nTrain RP: Overload relay light (power circuits failed to assemble)"}, + } +} +local i=1 +for k,v in pairs(ENT.ButtonMap["Lamps2"].buttons) do + Metrostroi.ClientPropForButton(v.ID.."_p",{ + panel = "Lamps2", + button = v.ID, + model = "models/metrostroi_train/em/lamp"..i..".mdl", + z=-2.5, + staylabel = true, + }) + i = i + 1 +end + +ENT.ButtonMap["RezMK"] = { + pos = Vector(469.0,-20.75,37), + ang = Angle(0,270,90), + width = 50, + height = 80, + scale = 0.0625, + + buttons = { + {ID = "RezMKSet", x=0, y=0, w=50, h=80, tooltip="КУ15:Резервное включение мотор-компреÑÑора\nRezMKSet"}, + } +} +Metrostroi.ClientPropForButton("RezMK",{ + panel = "RezMK", + button = "RezMKSet", + model = "models/metrostroi_train/switches/vudblack.mdl", +}) + +ENT.ButtonMap["AVMain"] = { + pos = Vector(408.06,40.8,56), + ang = Angle(0,90,90), + width = 335, + height = 380, + scale = 0.0625, + + buttons = { + {ID = "AV8BToggle", x=0, y=0, w=300, h=380, tooltip="ÐÐ’-8Б: ÐвтоматичеÑкй выключатель (Ð’Ñпомогательные цепи выÑокого напрÑжениÑ)\n"}, + } +} +Metrostroi.ClientPropForButton("AV8B",{ + panel = "AVMain", + button = "AV8BToggle", + model = "models/metrostroi_train/switches/automain.mdl", + z=43, +}) + +ENT.ButtonMap["Tsepi"] = { + pos = Vector(408.89,36.38,30.3), + ang = Angle(0,90,90), + width = 67, + height = 50, + scale = 0.0625, + + buttons = { + --{ID = "VUSToggle", x=0, y=0, w=100, h=110, tooltip="Прожектор\nVUSoggle"}, + {x=0,y=0,w=67,h=50,tooltip="ÐапрÑжение цепей управлениÑ"}, + } +} + +---AV1 Panel +ENT.ButtonMap["AV1"] = { + pos = Vector(408.06,41,30), + ang = Angle(0,90,90), + width = 290+0, + height = 155, + scale = 0.0625, + + buttons = { + {ID = "VU3Toggle", x=0, y=0, w=100, h=140, tooltip="ВУ3: ОÑвещение кабины\n"}, + {ID = "VU2Toggle", x=100, y=0, w=100, h=140, tooltip="ВУ2: Ðварийное оÑвещение 25Ð’\n"}, + {ID = "VU1Toggle", x=200, y=0, w=100, h=140, tooltip="ВУ1: Печь Ð¾Ñ‚Ð¾Ð¿Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹ ПТ-6\n"}, + } +} +for k,v in pairs(ENT.ButtonMap["AV1"].buttons) do + if not v.ID then continue end + Metrostroi.ClientPropForButton(v.ID:sub(0,-7),{ + panel = "AV1", + button = v.ID, + model = "models/metrostroi_train/switches/autobl.mdl", + z=10, + }) +end + +ENT.ButtonMap["AV2"] = { + pos = Vector(408.06,22.40,44.1), + ang = Angle(0,90,90), + width = 180, + height = 136, + scale = 0.0625, + + buttons = { + {ID = "RSTToggle", x=0, y=0, w=90, h=136, tooltip="РСТ: Радиооповещение и Ð¿Ð¾ÐµÐ·Ð´Ð½Ð°Ñ Ñ€Ð°Ð´Ð¸Ð¾ ÑвÑзь\nRST: Radio"}, + {ID = "RSTPl", x=0, y=80, w=90, h=56, tooltip="Пломба РСТ\nRST plomb"}, + {ID = "VSOSDToggle", x=90, y=0, w=90, h=136, tooltip="СОСД: Включение СОСД(Ñветильник Ð´Ð»Ñ Ð³Ð¾Ñ€Ð»Ð¸Ñ„Ñ‚Ð°)\nSOSD: SOSD enabler(horligt light)"}, + } +} +for k,v in pairs(ENT.ButtonMap["AV2"].buttons) do + if not v.ID then continue end + if v.ID:find("Pl") then + Metrostroi.ClientPropForButton(v.ID,{ + panel = "AV2", + button = v.ID:Replace("Pl","Toggle"), + model = "models/metrostroi_train/switches/autoplombl.mdl", + z=19, + propname = false, + ang=0, + }) + continue + end + Metrostroi.ClientPropForButton(v.ID:sub(0,-7),{ + panel = "AV2", + button = v.ID, + model = "models/metrostroi_train/switches/autobl.mdl", + z=20, + }) +end + +-- AV panel +ENT.ButtonMap["AV"] = { + pos = Vector(408.16,-58.2,35.5), + ang = Angle(0,90,90), + width = 85*7, + height = 130, + scale = 0.0625, + + buttons = { + {ID = "VRUToggle",x=85*0,y=0,w=85,h=130 , tooltip="ВРУ: Выключатель резервного управлениÑ\nVRU: Emergency control enable"}, + {ID = "VAHToggle",x=85*1,y=0,w=85,h=130 , tooltip="КÐÐ¥: Включение аварийного хода (неиÑправноÑть реле педали безопаÑноÑти)\nКAH: Emergency driving mode (failure of RPB relay)"}, + {ID = "VAHPl",x=85*1,y=80,w=85,h=50 , tooltip="Пломба КÐÐ¥\nKAH plomb"}, + {ID = "VADToggle",x=85*2,y=0,w=85,h=130 , tooltip="КÐД: Включение аварийного Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ (неиÑправноÑть реле ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð²ÐµÑ€ÐµÐ¹)\nKAD: Emergency door close override (failure of KD relay)"}, + {ID = "VADPl",x=85*2,y=80,w=85,h=50 , tooltip="Пломба КÐД\nKAD plomb"}, + {ID = "OVTToggle",x=85*3,y=0,w=85,h=130 , tooltip="ОВТ: Отключение вентильных тормозов\nOVT: Pneumatic valves disabler"}, + {ID = "OVTPl",x=85*3,y=80,w=85,h=50 , tooltip="Пломба ОВТ\nOVT plomb"}, + {ID = "KSDToggle",x=85*4,y=0,w=85,h=130 , tooltip="КСД: Контроль Ñигнализации дверей(проверка СД)\nKSD: Door state controle(SD check)"}, + {ID = "DPToggle",x=85*5,y=0,w=85,h=130 , tooltip="ДП: Двери поезда\nDP: Train doors"}, + {ID = "VKFToggle",x=85*6,y=0,w=85,h=130 , tooltip="ВКФ: Выключатель краÑных фар(подключает КФ к батарее напрÑмую)\nVKF: Red lights enable(connect a red lights to battery)"}, + } +} +for k,v in pairs(ENT.ButtonMap["AV"].buttons) do + if not v.ID then continue end + if v.ID:find("Pl") then + Metrostroi.ClientPropForButton(v.ID,{ + panel = "AV", + button = v.ID:Replace("Pl","Toggle"), + model = "models/metrostroi_train/switches/autoplomb"..(v.ID:find("OVT") and "l" or "r")..".mdl", + z=14, + propname = false, + ang=0, + }) + continue + end + + Metrostroi.ClientPropForButton(v.ID:sub(0,-7),{ + panel = "AV", + button = v.ID, + model = "models/metrostroi_train/switches/autobl.mdl", + z=15, + }) +end +-- Battery panel +ENT.ButtonMap["Battery"] = { + pos = Vector(408.98,20.24,30.5), + ang = Angle(0,90,90), + width = 250, + height = 136, + scale = 0.0625, + + buttons = { + {ID = "VBToggle", x=0, y=0, w=250, h=136, tooltip="ÐБ: Выключатель аккумулÑторной батареи (Ð’Ñпомогательные цепи низкого напрÑжениÑ)\nVB: Battery on/off"}, + } +} +Metrostroi.ClientPropForButton("VB",{ + panel = "Battery", + button = "VBToggle", + model = "models/metrostroi_train/switches/autobl2.mdl", + z=15, +}) + +--VU Panel +ENT.ButtonMap["VU"] = { + pos = Vector(469.5,-17.5,45), + ang = Angle(0,270,90), + width = 100, + height = 140, + scale = 0.0625, + + buttons = { + {ID = "VUToggle", x=0, y=0, w=100, h=140, tooltip="ВУ: Выключатель УправлениÑ\nVUToggle"}, + } +} +Metrostroi.ClientPropForButton("VU",{ + panel = "VU", + button = "VUToggle", + model = "models/metrostroi_train/switches/autobl.mdl", + z=20, +}) + +ENT.ButtonMap["VRD"] = { + pos = Vector(408.06,35.24,22), + ang = Angle(0,90,90), + width = 100, + height = 140, + scale = 0.0625, + + buttons = { + {ID = "VRDToggle", x=0, y=0, w=100, h=140, tooltip="ВРД: Выключатель разрешающий движение(под 0)\nVRD: Accept moving(when 0 on ALS)"}, + } +} +Metrostroi.ClientPropForButton("VRD",{ + panel = "VRD", + button = "VRDToggle", + model = "models/metrostroi_train/switches/autobl.mdl", + z=20, +}) + + +ENT.ButtonMap["BatteryAV"] = { + pos = Vector(409.55,-50.1,12.25), + ang = Angle(0,90,90), + width = 250, + height = 136, + scale = 0.0625, + + buttons = { + {ID = "VBAToggle", x=0, y=0, w=250, h=136, tooltip="ÐБ: Выключатель аккумулÑторной батареи автоведениÑ(Включение ÐРС)(\nVBA: Autodrive battery on/off(ARS Enable)"}, + } +} +Metrostroi.ClientPropForButton("VBA",{ + panel = "BatteryAV", + button = "VBAToggle", + model = "models/metrostroi_train/switches/autobl2.mdl", + z=15, +}) + + +ENT.ButtonMap["RC"] = { + pos = Vector(412.07,-28.72,22.80), + ang = Angle(0,90,90), + width = 127, + height = 473, + scale = 0.0625, + + buttons = { + {ID = "RC2Toggle", x=0, y=0, w=127, h=213, tooltip="RC2"}, + {ID = "RC2Pl", x=0, y=213-213/4, w=127, h=213/4, tooltip="Пломба РЦ-2\nRC-2 plomb"}, + {ID = "RC1Toggle", x=0, y=473-213, w=127, h=213, tooltip="RC1"}, + {ID = "RC1Pl", x=0, y=473-213/4, w=127, h=213/4, tooltip="Пломба РЦ-1\nRC-1 plomb"}, + } +} +ENT.ClientProps["RC2"] = { + model = "models/metrostroi_train/em/rc.mdl", + pos = Vector(409.77,-24.81,9.73+2), + ang = Angle(0,-90-55,0) +} +ENT.ClientProps["RC2Pl"] = { + model = "models/metrostroi_train/switches/autoplombr.mdl", + pos = Vector(411.143951,-22.746609,11.376095), + ang = Angle(0.000000,90.000000,90.000000), +} + +ENT.ClientProps["RC1"] = { + model = "models/metrostroi_train/em/rc.mdl", + pos = Vector(409.77,-24.81,-6.72+2), + ang = Angle(0,-90-55,0) +} +ENT.ClientProps["RC1Pl"] = { + model = "models/metrostroi_train/switches/autoplombr.mdl", + pos = Vector(411.143951,-22.746609,-5.308110), + ang = Angle(0.000000,90.000000,90.000000), +} + + +--[[ +Metrostroi.ClientPropForButton("AVVB",{ + panel = "BatteryAV", + button = "AVVBToggle", + model = "models/metrostroi_train/switches/autobl2.mdl", + z=15, +}) +]] + +-- Parking brake panel +ENT.ButtonMap["ParkingBrake"] = { + pos = Vector(460,49.0,6.0), + ang = Angle(0,-82,90), + width = 400, + height = 400, + scale = 0.0625, + + buttons = { + {ID = "ParkingBrakeLeft",x=0, y=0, w=200, h=400, tooltip="Поворот колеÑа ручного тормоза"}, + {ID = "ParkingBrakeRight",x=200, y=0, w=200, h=400, tooltip="Поворот колеÑа ручного тормоза"}, + } +} + +-- Train driver helpers panel +ENT.ButtonMap["HelperPanel"] = { + pos = Vector(455.13,58.99,24.44), + ang = Angle(0,-17.5,90), + width = 60, + height = 188, + scale = 0.0625, + + buttons = { + {ID = "VDLSet", x=30, y=42, radius=30, tooltip="ВДЛ: Выключатель левых дверей\nVDL: Left doors open"}, + {ID = "VUD2LToggle", x=0, y=110, w=60,h=20, tooltip="Блокировка ВУД2\nVUD2 lock"}, + {ID = "VUD2Toggle", x=30, y=138, radius=30, tooltip="ВУД2: Выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÑŒÐ¼Ð¸\nVUD2: Door control toggle (close doors)"}, + } +} +Metrostroi.ClientPropForButton("VUD2",{ + panel = "HelperPanel", + button = "VUD2Toggle", + model = "models/metrostroi_train/switches/vudwhite.mdl", + z = 0, +}) +Metrostroi.ClientPropForButton("VUD2l",{ + panel = "HelperPanel", + button = "VUD2Toggle", + model = "models/metrostroi_train/switches/vudlock.mdl", + z = 0, +}) +Metrostroi.ClientPropForButton("VDL",{ + panel = "HelperPanel", + button = "VDLSet", + model = "models/metrostroi_train/switches/vudblack.mdl", + z = 0, +}) + +-- Help panel +ENT.ButtonMap["Help"] = { + pos = Vector(422,-41,66), + ang = Angle(0,90,90), + width = 28, + height = 20, + scale = 0.5, + + buttons = { + {ID = "ShowHelp", x=0, y=0, w=28,h=20, tooltip="Помощь в вождении поезда\nShow help on driving the train"}, + } +} +-- Pneumatic instrument panel 2 +ENT.ButtonMap["PneumaticManometer"] = { + pos = Vector(459.247131,-54.307846,16.197767), + ang = Angle(0,-90-51,90), + + width = 70, + height = 70, + scale = 0.0625, + + buttons = { + {x=35,y=35,radius=35,tooltip="Давление в магиÑтралÑÑ… (краÑнаÑ: тормозной, чёрнаÑ: напорной)\nPressure in pneumatic lines (red: brake line, black: train line)"}, + } +} +-- Pneumatic instrument panel +ENT.ButtonMap["PneumaticPanels"] = { + pos = Vector(463.281189,-53.228256,11.310288), + ang = Angle(0,-90-44,90), + + width = 70, + height = 70, + scale = 0.0625, + + buttons = { + {x=35,y=35,radius=35,tooltip="Тормозной манометр: Давление в тормозных цилиндрах (ТЦ)\nBrake cylinder pressure"}, + } +} +ENT.ButtonMap["DriverValveBLDisconnect"] = { + pos = Vector(453.57,-54.37,-27.61), + ang = Angle(-90,0,0), + width = 200, + height = 90, + scale = 0.0625, + + buttons = { + {ID = "DriverValveBLDisconnectToggle", x=0, y=0, w=200, h=90, tooltip="Кран двойной Ñ‚Ñги тормозной магиÑтрали\nTrain line disconnect valve"}, + } +} +ENT.ButtonMap["DriverValveTLDisconnect"] = { + pos = Vector(455.482483,-54,-15), + ang = Angle(90,180-11.79,0), + width = 200, + height = 90, + scale = 0.0625, + + buttons = { + {ID = "DriverValveTLDisconnectToggle", x=0, y=0, w=200, h=90, tooltip="Кран двойной Ñ‚Ñги напорной магиÑтрали\nBrake line disconnect valve"}, + } +} +ENT.ButtonMap["EPKDisconnect"] = { + pos = Vector(449.35,-57.78,-25.65), + ang = Angle(0,90+56.59,0), + width = 200, + height = 90, + scale = 0.0625, + + buttons = { + {ID = "EPKToggle", x=0, y=0, w=200, h=90, tooltip="Кран ЭПК\nEPK disconnect valve"}, + } +} +ENT.ButtonMap["DURA"] = { + pos = Vector(408+15+12.15,-58.0-5.3,-6.65), + ang = Angle(0,180,0), + width = 240, + height = 80, + scale = 0.0625, + + buttons = { + {ID = "DURASelectMain", x=145, y=43, radius=20, tooltip="DURA ОÑновной путь\nDURA Select Main"}, -- NEEDS TRANSLATING + {ID = "DURASelectAlternate", x=180, y=43, radius=20, tooltip="DURA Ðльтернативный путь\nDURA Select Alternate"}, -- NEEDS TRANSLATING + {ID = "DURAToggleChannel", x=100, y=60, radius=20, tooltip="DURA Выбор канала\nDURA Toggle Channel"}, -- NEEDS TRANSLATING + {ID = "DURAPowerToggle", x=100, y=30, radius=20, tooltip="DURA Питание\nDURA Power"}, -- NEEDS TRANSLATING + + } +} + +ENT.ButtonMap["DURADisplay"] = { + pos = Vector(408+15-0.75+12.15,-58.0-5.3+1.5625,-6.65), + ang = Angle(0,180,0), + width = 240, + height = 80, + scale = 0.0625/3.2, +} + + +ENT.ButtonMap["Meters"] = { + pos = Vector(461.65213,-56.696617,37.528275), + ang = Angle(0,-148,90), + width = 73, + height = 140, + scale = 0.0625, + + buttons = { + {x=13, y=22, w=60, h=50, tooltip="Вольтметр выÑокого напрÑÐ¶ÐµÐ½Ð¸Ñ (кВ)\nHV voltmeter (kV)"}, + {x=13, y=81, w=60, h=50, tooltip="Ðмперметр (Ð)\nTotal ampermeter (A)"}, + } +} +ENT.ButtonMap["Speedometer"] = { + pos = Vector(459.649109,-53.19582,26.624441), + ang = Angle(0,-149,97), + width = 110, + height = 110, + scale = 0.0625, + + buttons = { + {x=0, y=0, w=110, h=110, tooltip="СкороÑтемер"}, + } +} + + +--These values should be identical to those drawing the schedule +local col1w = 80 -- 1st Column width +local col2w = 32 -- The other column widths +local rowtall = 30 -- Row height, includes -only- the usable space and not any lines + +local rowamount = 16 -- How many rows to show (total) +--[[ENT.ButtonMap["Schedule"] = { + pos = Vector(442.1,-60.7,26), + ang = Angle(0,-110,90), + width = (col1w + 2 + (1 + col2w) * 3), + height = (rowtall+1)*rowamount+1, + scale = 0.0625/2, + + buttons = { + {x=1, y=1, w=col1w, h=rowtall, tooltip="М â„–\nRoute number"}, + {x=1, y=rowtall*2+3, w=col1w, h=rowtall, tooltip="П â„–\nPath number"}, + + {x=col1w+2, y=1, w=col2w*3+2, h=rowtall, tooltip="ВРЕМЯ ХОДÐ\nTotal schedule time"}, + {x=col1w+2, y=rowtall+2, w=col2w*3+2, h=rowtall, tooltip="ИÐТ\nTrain interval"}, + + {x=col1w+2, y=rowtall*2+3, w=col2w, h=rowtall, tooltip="ЧÐС\nHour"}, + {x=col1w+col2w+3, y=rowtall*2+3, w=col2w, h=rowtall, tooltip="МИÐ\nMinute"}, + {x=col1w+col2w*2+4, y=rowtall*2+3, w=col2w, h=rowtall, tooltip="СЕК\nSecond"}, + {x=col1w+2, y=rowtall*3+4, w=col2w*3+2, h=(rowtall+1)*(rowamount-3)-1, tooltip="Arrival times"}, -- NEEDS TRANSLATING + + {x=1, y=rowtall*3+4, w=col1w, h=(rowtall+1)*(rowamount-3)-1, tooltip="Station name"}, -- NEEDS TRANSLATING + } +}]] + +-- Temporary panels (possibly temporary) +ENT.ButtonMap["FrontPneumatic"] = { + pos = Vector(475,-45.0,-50.0), + ang = Angle(0,90,90), + width = 900, + height = 100, + scale = 0.1, + buttons = { + {ID = "FrontBrakeLineIsolationToggle",x=150, y=50, radius=32, tooltip="Концевой кран тормозной магиÑтрали"}, + {ID = "FrontTrainLineIsolationToggle",x=750, y=50, radius=32, tooltip="Концевой кран напорной магиÑтрали"}, + } +} +ENT.ButtonMap["RearPneumatic"] = { + pos = Vector(-475,45.0,-50.0), + ang = Angle(0,270,90), + width = 900, + height = 100, + scale = 0.1, + buttons = { + {ID = "RearTrainLineIsolationToggle",x=150, y=50, radius=32, tooltip="Концевой кран напорной магиÑтрали"}, + {ID = "RearBrakeLineIsolationToggle",x=750, y=50, radius=32, tooltip="Концевой кран тормозной магиÑтрали"}, + } +} +ENT.ButtonMap["GV"] = { + pos = Vector(139,66,-54), + ang = Angle(0,180,90), + width = 170, + height = 170, + scale = 0.1, + buttons = { + {ID = "GVToggle",x=0, y=0, w= 170,h = 150, 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, + }}, + } +} +ENT.ButtonMap["AirDistributor"] = { + pos = Vector(-168,68.6,-50), + ang = Angle(0,180,90), + width = 170, + height = 80, + scale = 0.1, + buttons = { + {ID = "AirDistributorDisconnectToggle",x=0, y=0, w= 170,h = 80, tooltip="Выключение воздухораÑпределителÑ"}, + } +} + + +-- UAVA +ENT.ButtonMap["UAVAPanel"] = { + pos = Vector(450,52,-20), + ang = Angle(0,-70,90), + width = 230, + height = 170, + scale = 0.0625, + + buttons = { + {ID = "UAVAToggle",x=230/2, y=0, w=230/2, h=170, tooltip="УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа\nUAVA: Universal Automatic Autostop Disabler"}, + {ID = "UAVAContactSet",x=0, y=0, w=230/2, h=170, tooltip="УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа (воÑÑтановление контактов)\nUAVA: Universal Automatic Autostop Disabler(contacts reset)"}, + } +} + + + +-- Wagon numbers +ENT.ButtonMap["TrainNumber1"] = { + pos = Vector(-440,-68,-11), + ang = Angle(0,0,90), + width = 130, + height = 55, + scale = 0.20, +} +ENT.ButtonMap["TrainNumber2"] = { + pos = Vector(416,68,-11), + ang = Angle(0,180,90), + width = 130, + height = 55, + scale = 0.20, +} + +ENT.ButtonMap["InfoTableSelect"] = { + pos = Vector(454.0+12.15,-27.0,50.0), + ang = Angle(0,-90,90), + width = 250, + height = 100, + scale = 0.1, + + + buttons = { + {ID = "PrevSign",x=0,y=0,w=50,h=100, tooltip="ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð½Ð°Ð´Ð¿Ð¸ÑÑŒ\nPrevious sign"}, + {ID = "NextSign",x=50,y=0,w=50,h=100, tooltip="Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð½Ð°Ð´Ð¿Ð¸ÑÑŒ\nNext sign"}, + + {ID = "Num2P",x=150,y=0,w=50,h=50, tooltip="Маршрут: Увеличить чиÑло 2\nRoute: Increase 2nd number"}, + {ID = "Num2M",x=150,y=50,w=50,h=50, tooltip="Маршрут: Уменьшить чиÑло 2\nRoute: Decrease 2nd number"}, + {ID = "Num1P",x=200,y=0,w=50,h=50, tooltip="Маршрут: Увеличить чиÑло 1\nRoute: Increase 1st number"}, + {ID = "Num1M",x=200,y=50,w=50,h=50, tooltip="Маршрут: Уменьшить чиÑло 1\nRoute: Decrease 1st number"}, + } +} + +ENT.ButtonMap["FrontDoor"] = { + pos = Vector(472,16,43.4), + ang = Angle(0,-90,90), + width = 650, + height = 1780, + scale = 0.1/2, + buttons = { + {ID = "FrontDoor",x=0,y=0,w=650,h=1780, tooltip="ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ\nFront door"}, + } +} + +ENT.ButtonMap["CabinDoor"] = { + pos = Vector(420,64,43.4), + ang = Angle(0,0,90), + width = 642, + height = 1780, + scale = 0.1/2, + buttons = { + {ID = "CabinDoor1",x=0,y=0,w=642,h=1780, tooltip="Дверь в кабину машиниÑта\nCabin door"}, + } +} + +ENT.ButtonMap["PassengerDoor"] = { + pos = Vector(384,-16,43.4), + ang = Angle(0,90,90), + width = 642, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=642,h=1900, tooltip="Дверь из Ñалона\nPassenger door"}, + } +} + +-------------------------------------------------------------------------------- +ENT.ClientPropsInitialized = false +ENT.ClientProps["brake"] = { + model = "models/metrostroi_train/81/334cran.mdl", + pos = Vector(460.11,-53.7,3.7), + ang = Angle(0,34,0) +} +ENT.ClientProps["controller"] = { + model = "models/metrostroi_train/em/kv.mdl", + pos = Vector(461.65,-24.63,3.9), + ang = Angle(0,-32,0) +} +ENT.ClientProps["reverser"] = { + model = "models/metrostroi/81-717/reverser.mdl", + pos = Vector(461.65,-24.63,3.2), + ang = Angle(0,45,90) +} +ENT.ClientProps["brake_disconnect"] = { + model = "models/metrostroi/81-717/uava.mdl", + pos = Vector(452.9,-57.33,-25.61), + ang = Angle(0,-90,0), + color = Color(144,74,0), +} +ENT.ClientProps["train_disconnect"] = { + model = "models/metrostroi/81-717/uava.mdl", + pos = Vector(455.482483,-52.546734,-19.333017), + ang = Angle(0.000000,-101.794258,0.000000), + color = Color(0,212,255), +} + +ENT.ClientProps["EPK_disconnect"] = { + model = "models/metrostroi/81-717/uava.mdl", + pos = Vector(449.35,-52.78,-25.65), + ang = Angle(90,90+56.59,0), +} +ENT.ClientProps["parking_brake"] = { + model = "models/metrostroi/81-717/ezh_koleso.mdl", + pos = Vector(460.316742,37.144958,-6.000000), + ang = Angle(-90.000000,8.000000,0.000000), +} + +-------------------------------------------------------------------------------- +ENT.ClientProps["train_line"] = { + model = "models/metrostroi_train/e/small_pneumo_needle.mdl", + pos = Vector(457.722778,-56.060150,13.877457), + ang = Angle(314.669312,40.953403,-90.000000), +} +ENT.ClientProps["brake_line"] = { + model = "models/metrostroi_train/e/small_pneumo_needle.mdl", + pos = Vector(457.688568,-56.020660,13.877457), + ang = Angle(314.669312,40.953403,-90.000000), + color = Color(255,120,120), +} + +ENT.ClientProps["brake_cylinder"] = { + model = "models/metrostroi_train/e/small_pneumo_needle.mdl", + pos = Vector(462.104797,-55.268986,9.050000), + ang = Angle(313.335266,48.532555,-90.000000), +} +---------------------------------------------------------------- +ENT.ClientProps["voltmeter"] = { + model = "models/metrostroi_train/e/volt_needle.mdl", + pos = Vector(458.990723,-57.425472,33.847416), + ang = Angle(240.237274,33.392635,270.135559), +} + +ENT.ClientProps["ampermeter"] = { + model = "models/metrostroi_train/e/volt_needle.mdl", + pos = Vector(459.078979,-57.376965,30.437996), + ang = Angle(222.645691,33.392635,270.135559), +} + +ENT.ClientProps["volt1"] = { + model = "models/metrostroi_train/e/volt_bat_needle.mdl", + pos = Vector(408.890015,38.459042,27.399431), + ang = Angle(-46.365803,90.000000,90.000000), +} + +ENT.ClientProps["speed1"] = { + model = "models/metrostroi_train/e/black_pneumo_needle.mdl", + pos = Vector(455.287048,-56.941986,21.128723), + ang = Angle(96.164711,120.947121,0.000000), +} + +----------------------------------------------- +Metrostroi.ClientPropForButton("SelectMain",{ + panel = "DURA", + button = "DURASelectMain", + model = "models/metrostroi_train/81/button.mdl", + skin = 4, + z = 0, +}) +Metrostroi.ClientPropForButton("SelectAlternate",{ + panel = "DURA", + button = "DURASelectAlternate", + model = "models/metrostroi_train/81/button.mdl", + skin = 4, + z = 0, +}) +Metrostroi.ClientPropForButton("SelectChannel",{ + panel = "DURA", + button = "DURAToggleChannel", + model = "models/metrostroi_train/81/tumbler2.mdl", +}) +Metrostroi.ClientPropForButton("DURAPower",{ + panel = "DURA", + button = "DURAPowerToggle", + model = "models/metrostroi_train/81/tumbler2.mdl", +}) +-------------------------------------------------------------------------------- +ENT.ClientProps["gv"] = { + model = "models/metrostroi/81-717/gv.mdl", + pos = Vector(130,62.5,-65), + ang = Angle(-90,0,-90) +} +ENT.ClientProps["gv_wrench"] = { + model = "models/metrostroi/81-717/reverser.mdl", + pos = Vector(130,62.5,-65), + ang = Angle(0,0,0) +} +-------------------------------------------------------------------------------- +ENT.ClientProps["book"] = { + model = "models/props_lab/binderredlabel.mdl", + pos = Vector(418,-28,61), + ang = Angle(0,0,90) +} + +ENT.ClientProps["Ema_salon"] = { + model = "models/metrostroi_train/em/ema_salon.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0) +} +ENT.ClientProps["Ema_salon2"] = { + model = "models/metrostroi_train/em/ema_salon2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0) +} +ENT.ClientProps["Lamps_emer"] = { + model = "models/metrostroi_train/em/lamps_emer.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0) +} +ENT.ClientProps["Lamps_full"] = { + model = "models/metrostroi_train/em/lamps_full.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0) +} + +ENT.ClientProps["PB"] = {-- + model = "models/metrostroi_train/81/pb.mdl", + pos = Vector(461, -35.05, -35.31), + ang = Angle(0,-90,18) +} + +ENT.ClientProps["FrontBrake"] = {-- + model = "models/metrostroi_train/81/tmiso.mdl", + pos = Vector(460, -30, -55), + ang = Angle(0,-90,0) +} +ENT.ClientProps["FrontTrain"] = {-- + model = "models/metrostroi_train/81/nmsio.mdl", + pos = Vector(460, 30, -55), + ang = Angle(0,-90,0) +} +ENT.ClientProps["RearBrake"] = {-- + model = "models/metrostroi_train/81/tmiso.mdl", + pos = Vector(-460, -30, -55), + ang = Angle(0,90,0) +} +ENT.ClientProps["RearTrain"] = {-- + model = "models/metrostroi_train/81/nmsio.mdl", + pos = Vector(-460, 30, -55), + ang = Angle(0,90,0) +} + + +-------------------------------------------------------------------------------- +-- Add doors +local function GetDoorPosition(i,k,j) + if j == 0 + then return Vector(383.0 - 67.49*k - 233.4*i,-64.56*(1-2*k),1) + else return Vector(383.0 - 67.49*(1-k) - 233.4*i,-64.56*(1-2*k),1) + end +end +for i=0,3 do + for k=0,1 do + ENT.ClientProps["door"..i.."x"..k.."a"] = { + model = "models/metrostroi_train/em/doorright.mdl", + pos = GetDoorPosition(i,k,0), + ang = Angle(0,90 + 180*k,0) + } + ENT.ClientProps["door"..i.."x"..k.."b"] = { + model = "models/metrostroi_train/em/doorleft.mdl", + pos = GetDoorPosition(i,k,1), + ang = Angle(0,90 + 180*k,0) + } + end +end +ENT.ClientProps["door1"] = { + model = "models/metrostroi_train/em/doorfront.mdl", + pos = Vector(471.71,-17.1,-1), + ang = Angle(0,-90,0) +} +ENT.ClientProps["door2"] = { + model = "models/metrostroi_train/em/doorback.mdl", + pos = Vector(-471.24,17.19,-1), + ang = Angle(0,-90,0) +} +ENT.ClientProps["door3"] = { + model = "models/metrostroi_train/em/doorpass.mdl", + pos = Vector(384.14,16.95,-2.2), + ang = Angle(0,-90,0) +} +ENT.ClientProps["door4"] = { + model = "models/metrostroi_train/em/doorcab.mdl", + pos = Vector(420.75,64.26,1.5), + ang = Angle(0,-90,0) +} +--[[ENT.ClientProps["UAVA"] = { + model = "models/metrostroi/81-717/uava_body.mdl", + pos = Vector(400,61,-8),--Vector(415.0,-58.5,-18.2), + ang = Angle(0,0,0) +}]] +ENT.ClientProps["UAVALever"] = { + model = "models/metrostroi_train/81/uavalever.mdl", + pos = Vector(452.84598,51,-21.813349), + ang = Angle(0,90,90) +} + +ENT.ClientProps["RedLights"] = { + model = "models/metrostroi_train/Em/redlights.mdl", + pos = Vector(474.674042,-0.885458,55.695278), + ang = Angle(90.000000,-0.212120,0.000000), +} +ENT.ClientProps["DistantLights"] = { + model = "models/metrostroi_train/Em/distantlights.mdl", + pos = Vector(471.731842,-0.651488,54.413082), + ang = Angle(90.000000,0.000000,0.000000), +} +ENT.ClientProps["WhiteLights"] = { + model = "models/metrostroi_train/Em/whitelights.mdl", + pos = Vector(475.597565,-0.525079,-29.160791), + ang = Angle(90.267662,0.000000,0.000000), +} +ENT.ClientProps["RadioLamp"] = { + model = "models/metrostroi_train/Em/radiolight.mdl", + pos = Vector(465.569244,29.134933,-5.466231), + ang = Angle(90.000000,0.000000,0.000000), +} +ENT.ClientProps["RadioLamp1"] = { + model = "models/metrostroi_train/Em/radiolight.mdl", + pos = Vector(465.451752,31.03,-5.436231), + ang = Angle(90.000000,0.000000,0.000000), +} + + +ENT.Texture = "7" +ENT.OldTexture = nil +--local X = Material( "metrostroi_skins/81-717/6.png") + +function ENT:UpdateTextures() + local texture = Metrostroi.Skins["train"][self:GetNW2String("texture")] + local passtexture = Metrostroi.Skins["pass"][self:GetNW2String("passtexture")] + local cabintexture = Metrostroi.Skins["cab"][self:GetNW2String("cabtexture")] + for _,self in pairs(self.ClientEnts) do + if not IsValid(self) then continue end + for k,v in pairs(self:GetMaterials()) do + local tex = string.Explode("/",v) + tex = tex[#tex] + if cabintexture and cabintexture.textures[tex] then + self:SetSubMaterial(k-1,cabintexture.textures[tex]) + end + if passtexture and passtexture.textures[tex] then + self:SetSubMaterial(k-1,passtexture.textures[tex]) + end + if texture and texture.textures[tex] then + self:SetSubMaterial(k-1,texture.textures[tex]) + end + end + end +end +-------------------------------------------------------------------------------- +function ENT:Think() + self.BaseClass.Think(self) + if self.Texture ~= self:GetNW2String("texture") then + self.Texture = self:GetNW2String("texture") + self:UpdateTextures() + end + if self.PassTexture ~= self:GetNW2String("passtexture") then + self.PassTexture = self:GetNW2String("passtexture") + self:UpdateTextures() + end + if self.CabinTexture ~= self:GetNW2String("cabtexture") then + self.CabinTexture = self:GetNW2String("cabtexture") + self:UpdateTextures() + end + --print(self.FrontDoor,self:GetPackedBool(114)) + --print(self.RearDoor,self:GetPackedBool(156)) + --[[ + if self.FrontDoor < 90 and self:GetPackedBool(157) or self.FrontDoor > 0 and not self:GetPackedBool(157) then + --local FrontDoorData = self.ClientProps["door1"] + --FrontDoor:SetLocalPos(FrontDoorData.pos + Vector(-2,-0,0)) + self.FrontDoor = math.max(0,math.min(90,self.FrontDoor + (self:GetPackedBool(157) and 1 or -1)*self.DeltaTime*180)) + self:ApplyMatrix("door1",Vector(0,-16,0),Angle(0,self.FrontDoor,0)) + if not self.ButtonMapMatrix["InfoTable"] then + self.ButtonMapMatrix["InfoTable"] = {} + self.ButtonMapMatrix["InfoTable"].scale = 0.1/2 + end + self.ButtonMapMatrix["InfoTable"].ang = Angle(0,90+self.FrontDoor,90) + self.ButtonMapMatrix["InfoTable"].pos = Vector(458.0,-16.0,12.0) + Vector(0,1.5,0)*self.FrontDoor/90 + + end + ]] + local transient = (self.Transient or 0)*0.05 + if (self.Transient or 0) ~= 0.0 then self.Transient = 0.0 end + + -- Parking brake animation + self.ParkingBrakeAngle = self.ParkingBrakeAngle or 0 + self.TrueBrakeAngle = self.TrueBrakeAngle or 0 + self.TrueBrakeAngle = self.TrueBrakeAngle + (self.ParkingBrakeAngle - 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 Lamps = self:GetPackedBool(20) and 0.6 or 1 + self:ShowHideSmooth("Lamps_emer",self:Animate("lamps_emer",self:GetPackedBool("Lamps_emer") and Lamps or 0,0,1,6,false)) + self:ShowHideSmooth("Lamps_full",self:Animate("lamps_full",self:GetPackedBool("Lamps_full") and Lamps or 0,0,1,6,false)) + --ALS Lamps + self:ShowHideSmooth("LNF",self:Animate("LNF_hs",self:GetPackedBool(41) and 1 or 0,0,1,7,false)) + self:ShowHideSmooth("L0",self:Animate("L0_hs",self:GetPackedBool(42) and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("L40",self:Animate("L40_hs",self:GetPackedBool(43) and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("L60",self:Animate("L60_hs",self:GetPackedBool(44) and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("L70",self:Animate("L70_hs",self:GetPackedBool(45) and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("L80",self:Animate("L80_hs",self:GetPackedBool(46) and 1 or 0,0,1,5,false)) + + + self:ShowHideSmooth("LampAutodrive",self:Animate("LampAutodrive_hs",self:GetPackedBool("KSAUP:Work") and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("Lamp2",self:Animate("Lamp2_hs",self:GetPackedBool("Lamp2") and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("Lamp1",self:Animate("Lamp1_hs",self:GetPackedBool("Lamp1") and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("Lamp6",self:Animate("Lamp6_hs",self:GetPackedBool("Lamp6") and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("Doors",self:Animate("Doors_hs",self:GetPackedBool(40) and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("DoorsWag",self:Animate("DoorsWag_hs",self:GetPackedBool("DoorsWag") and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("GreenRP",self:Animate("GreenRP_hs",self:GetPackedBool(36) and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("RedRP",self:Animate("RedRP_hs",self:GetPackedBool(35) and 1 or 0,0,1,5,false) + self:Animate("RedLSN_hs",self:GetPackedBool(131) and 1 or 0,0,0.4,5,false)) + self:ShowHideSmoothFrom("LampAutodrive_p","LampAutodrive") + self:ShowHideSmoothFrom("Lamp2_p","Lamp2") + self:ShowHideSmoothFrom("Lamp1_p","Lamp1") + self:ShowHideSmoothFrom("Lamp6_p","Lamp6") + self:ShowHideSmoothFrom("Doors_p","Doors") + self:ShowHideSmoothFrom("DoorsWag_p","DoorsWag") + self:ShowHideSmoothFrom("GreenRP_p","GreenRP") + self:ShowHideSmoothFrom("RedRP_p","RedRP") + + + self:Animate("AV8B",self:GetPackedBool("AV8B") and 1 or 0, 0,1, 8, false) + + self:Animate("RST",self:GetPackedBool("RST") and 0 or 1, 0,1, 12, false) + self:Animate("VSOSD",self:GetPackedBool("VSOSD") and 0 or 1, 0,1, 12, false) + self:HideButton("RSTToggle",self:GetPackedBool("RSTPl")) + self:HideButton("RSTPl",not self:GetPackedBool("RSTPl")) + + self:SetCSBodygroup("RSTPl",1,self:GetPackedBool("RSTPl") and 0 or 1) + + self:Animate("VU1",self:GetPackedBool("VU1") and 0 or 1, 0,1, 12, false) + self:Animate("VU3",self:GetPackedBool("VU3") and 0 or 1, 0,1, 12, false) + self:Animate("VU2",self:GetPackedBool("VU2") and 0 or 1, 0,1, 12, false) + + self:Animate("VU",self:GetPackedBool("VU") and 0 or 1, 0,1, 12, false) + self:Animate("RezMK",self:GetPackedBool("RezMK") and 1 or 0, 0,1, 7, false) + + self:Animate("VRD",self:GetPackedBool("VRD") and 0 or 1, 0,1, 12, false) + + self:Animate("VB",self:GetPackedBool("VB") and 0 or 1, 0,1, 8, false) + + self:Animate("VBA",self:GetPackedBool("VBA") and 0 or 1, 0,1, 8, false) + + + self:Animate("RC1",self:GetPackedBool("RC1") and 1 or 0, 1,0.694, 6, false) + self:Animate("RC2",self:GetPackedBool("RC2") and 1 or 0, 1,0.694, 6, false) + self:HideButton("RC1Toggle",self:GetPackedBool("RC1Pl")) + self:HideButton("RC1Pl",not self:GetPackedBool("RC1Pl")) + self:HideButton("RC2Toggle",self:GetPackedBool("RC2Pl")) + self:HideButton("RC2Pl",not self:GetPackedBool("RC2Pl")) + self:SetCSBodygroup("RC1Pl",1,self:GetPackedBool("RC1Pl") and 0 or 1) + self:SetCSBodygroup("RC2Pl",1,self:GetPackedBool("RC2Pl") and 0 or 1) + + self:Animate("VRU",self:GetPackedBool("VRU") and 0 or 1, 0,1, 12, false) + self:Animate("VAH",self:GetPackedBool("VAH") and 0 or 1, 0,1, 12, false) + self:Animate("VAD",self:GetPackedBool("VAD") and 0 or 1, 0,1, 12, false) + self:Animate("OVT",self:GetPackedBool("OVT") and 0 or 1, 0,1, 12, false) + self:Animate("KSD",self:GetPackedBool("KSD") and 0 or 1, 0,1, 12, false) + self:Animate("DP",self:GetPackedBool("DP") and 0 or 1, 0,1, 12, false) + self:Animate("VKF",self:GetPackedBool("VKF") and 0 or 1, 0,1, 12, false) + + self:HideButton("VAHToggle",self:GetPackedBool("VAHPl")) + self:HideButton("VAHPl",not self:GetPackedBool("VAHPl")) + self:HideButton("VADToggle",self:GetPackedBool("VADPl")) + self:HideButton("VADPl",not self:GetPackedBool("VADPl")) + self:HideButton("OVTToggle",self:GetPackedBool("OVTPl")) + self:HideButton("OVTPl",not self:GetPackedBool("OVTPl")) + + self:SetCSBodygroup("VAHPl",1,self:GetPackedBool("VAHPl") and 0 or 1) + self:SetCSBodygroup("VADPl",1,self:GetPackedBool("VADPl") and 0 or 1) + self:SetCSBodygroup("OVTPl",1,self:GetPackedBool("OVTPl") and 0 or 1) + + self:Animate("KVT",self:GetPackedBool("KVT") and 1 or 0, 0,1, 8, false) + self:ShowHideSmooth("ARSLamp",self:Animate("ARSLamp_hs",self:GetPackedBool(48) and 1 or 0,0,1,5,false)) + self:Animate("VZP",self:GetPackedBool("VZP") and 1 or 0, 0,1, 12, false) + self:Animate("VZD",self:GetPackedBool("VZD") and 1 or 0, 0,1, 12, false) + self:Animate("KRZD",self:GetPackedBool("KRZD") and 1 or 0, 0,1, 12, false) + self:ShowHideSmooth("AutodriveLamp",self:Animate("AutodriveLamp_hs",self:GetPackedBool("KSAUP:AutodriveEngage") and 1 or 0,0,1,5,false)) + + self:ShowHideSmooth("RadioLamp",self:Animate("radiolamp",self:GetPackedBool("VPR") and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("RadioLamp1",self.Anims["radiolamp"].val) + + self:ShowHideSmooth("RedLights",self:Animate("redlights",self:GetPackedBool("RedLight") and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("WhiteLights",self:Animate("whitelights",self:GetPackedBool("HeadLights2") and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("DistantLights",self:Animate("distantlights",self:GetPackedBool("HeadLights1") and 1 or 0,0,1,5,false)) + + self:Animate("KDL",self:GetPackedBool("KDL") and 1 or 0, 0,1, 12, false) + self:Animate("DIPon",self:GetPackedBool("DIPon") and 1 or 0, 0,1, 12, false) + self:Animate("DIPoff",self:GetPackedBool("DIPoff") and 1 or 0, 0,1, 12, false) + self:Animate("VozvratRP",self:GetPackedBool("VozvratRP") and 1 or 0, 0,1, 12, false) + self:Animate("KSN",self:GetPackedBool("KSN") and 1 or 0, 0,1, 12, false) + self:Animate("KDP",self:GetPackedBool("KDP") and 1 or 0, 0,1, 12, false) + + self:Animate("KU1",self:GetPackedBool("KU1") and 1 or 0, 0,1, 7, false) + self:Animate("VUD",self:GetPackedBool("VUD1") and 1 or 0, 0,1, 7, false) + + + self:Animate("VDL",self:GetPackedBool("VDL") and 1 or 0, 0,1, 7, false) + self:ShowHideSmooth("KTLamp",self:Animate("KT_hs",self:GetPackedBool(47) and 1 or 0,0,1,5,false)) + self:Animate("Ring",self:GetPackedBool("Ring") and 1 or 0, 0,1, 12, false) + self:Animate("VUS",self:GetPackedBool("VUS") and 1 or 0, 0,1, 12, false) + self:Animate("KAK",self:GetPackedBool("KAK") and 1 or 0, 0,1, 12, false) + self:Animate("VAutodrive",self:GetPackedBool("VAutodrive") and 1 or 0, 0,1, 12, false) + + self:HideButton("VUD2Toggle",self:GetPackedBool("VUD2Bl")) + self:HideButton("VUD2LToggle",self:GetPackedBool("VUD2LBl")) + self:Animate("VUD2",self:GetPackedBool("VUD2") and 0 or 1, 0,1, 7, false) + self:Animate("VUD2l",self:GetPackedBool("VUD2L") and 1 or 0, 0,1, 7, false) + + self:Animate("PB",self:GetPackedBool("PB") and 1 or 0,0,0.2, 12,false) + + self:Animate("brake_disconnect",self:GetPackedBool("DriverValveBLDisconnect") and 1 or 0,0,0.5, 3,false) + self:Animate("train_disconnect",self:GetPackedBool("DriverValveTLDisconnect") and 1 or 0,0,0.5, 3,false) + self:Animate("EPK_disconnect",self:GetPackedBool("EPK") and 1 or 0,0.5,0, 3,false) + + -- DIP sound + --self:SetSoundState("bpsn2",self:GetPackedBool(52) and 1 or 0,1.0) + + -- Simulate pressure gauges getting stuck a little + self:Animate("brake", 1-self:GetPackedRatio(0), 0.00, 0.65, 256,24) + self:Animate("controller", self:GetPackedRatio(1), 0, 0.31, 2,false) + self:Animate("reverser", self:GetPackedRatio(2), 0.26, 0.35, 4,false) + self:Animate("volt1", self:GetPackedRatio(10), 0,0.244,256,2) + self:ShowHide("reverser", self:GetPackedBool(0)) + + self:Animate("brake_line", self:GetPackedRatio(4), 0, 0.725, 256,2)--,,0.01) + self:Animate("train_line", self:GetPackedRatio(5)-transient, 0, 0.725, 256,2)--,,0.01) + self:Animate("brake_cylinder", self:GetPackedRatio(6), 0, 0.721, 256,2)--,,0.03) + self:Animate("voltmeter", self:GetPackedRatio(7), 0.014, 0.298,256,2) + self:Animate("ampermeter", self:GetPackedRatio(8), 0, 0.248,256,2) + --self:Animate("volt2", 0, 0.38, 0.63) + + local wheel_radius = 0.5*44.1 -- units + local speed = self:GetPackedRatio(3)*100 + local ang_vel = speed/(2*math.pi*wheel_radius) + + -- Rotate wheel + self.Angle = ((self.Angle or math.random()) + ang_vel*self.DeltaTime) % 1.0 + + self:Animate("speed1", self:GetPackedRatio("Speed") + math.sin(math.pi*8*self.Angle)*1/120, 0.495, 0.716, nil, nil, 256,2,0.01) + --self:Animate("speed1", /120, 0.495, 0.716, nil, nil, 256,2,0.01) + + ---- + self:Animate("door1", self:GetPackedBool(157) and (self.Door1 or 0.99) or 0,0,0.22, 1024, 1) + self:Animate("door3", self:GetPackedBool(158) and (self.Door2 or 0.99) or 0,0,0.25, 1024, 1) + self:Animate("door2", self:GetPackedBool(156) and (self.Door3 or 0.99) or 0,0,0.25, 1024, 1) + self:Animate("door4", self:GetPackedBool(159) and (self.Door2 or 0.99) or 0,1,0.77, 1024, 1) + + self:Animate("FrontBrake", self:GetNW2Bool("FbI") and 0 or 1,0,0.35, 3, false) + self:Animate("FrontTrain", self:GetNW2Bool("FtI") and 0 or 1,0,0.35, 3, false) + self:Animate("RearBrake", self:GetNW2Bool("RbI") and 1 or 0,0,0.35, 3, false) + self:Animate("RearTrain", self:GetNW2Bool("RtI") and 1 or 0,0,0.35, 3, false) + + self:ShowHideSmooth("AVULight_light",self:Animate("AVUl",self:GetPackedBool(38) and 1 or 0,0,1,10,false)) + + -- Main switch + if self.LastValue ~= self:GetPackedBool(5) then + self.ResetTime = CurTime()+1.5 + self.LastValue = self:GetPackedBool(5) + end + self:Animate("gv_wrench", (self:GetPackedBool(5) and 1 or 0), 0,0.51, 128, 1,false) + self:ShowHide("gv_wrench", CurTime() < self.ResetTime) + + -- Animate doors + for i=0,4 do + for k=0,1 do + local n_l = "door"..i.."x"..k.."a" + local n_r = "door"..i.."x"..k.."b" + self:Animate(n_l,self:GetPackedBool(21+(1-k)*4) and 1 or 0,0.11,0.93, 0.8 + (-0.2+0.4*math.random()),0) + self:Animate(n_r,self:GetPackedBool(21+(1-k)*4) and 1 or 0,0.11,0.93, 0.8 + (-0.2+0.4*math.random()),0) + end + end + + -- Brake-related sounds + local brakeLinedPdT = self:GetPackedRatio(9) + local dT = self.DeltaTime + self.BrakeLineRamp1 = self.BrakeLineRamp1 or 0 + + if (brakeLinedPdT > -0.001) + then self.BrakeLineRamp1 = self.BrakeLineRamp1 + 4.0*(0-self.BrakeLineRamp1)*dT + else self.BrakeLineRamp1 = self.BrakeLineRamp1 + 4.0*((-0.6*brakeLinedPdT)-self.BrakeLineRamp1)*dT + end + self.BrakeLineRamp1 = math.Clamp(self.BrakeLineRamp1,0,1) + self:SetSoundState("release2",self.BrakeLineRamp1^1.65,1.0) + + self.BrakeLineRamp2 = self.BrakeLineRamp2 or 0 + if (brakeLinedPdT < 0.001) + then self.BrakeLineRamp2 = self.BrakeLineRamp2 + 4.0*(0-self.BrakeLineRamp2)*dT + else self.BrakeLineRamp2 = self.BrakeLineRamp2 + 8.0*(0.1*brakeLinedPdT-self.BrakeLineRamp2)*dT + end + self.BrakeLineRamp2 = math.Clamp(self.BrakeLineRamp2,0,1) + self:SetSoundState("release3",self.BrakeLineRamp2 + math.max(0,self.BrakeLineRamp1/2-0.15),1.0) + + self:SetSoundState("cran1",math.min(1,self:GetPackedRatio(4)/50*(self:GetPackedBool(6) and 1 or 0)),1.0) + + -- Compressor + local state = self:GetPackedBool(20) + self.PreviousCompressorState = self.PreviousCompressorState or false + if self.PreviousCompressorState ~= state then + self.PreviousCompressorState = state + if state then + self:SetSoundState("compressor_ezh",1,1) + else + self:SetSoundState("compressor_ezh",0,1) + self:SetSoundState("compressor_ezh_end",0,1) + self:SetSoundState("compressor_ezh_end",1,1) + --self:PlayOnce("compressor_e_end",nil,1,nil,true) + end + end + -- ARS/ringer alert + state = self:GetPackedBool(39) + self.PreviousAlertState = self.PreviousAlertState or false + if self.PreviousAlertState ~= state then + self.PreviousAlertState = state + if state then + self:SetSoundState("ring4",1,1) + else + self:SetSoundState("ring4",0,0) + self:SetSoundState("ring4_end",0,1) + self:SetSoundState("ring4_end",1,1) + --self:PlayOnce("ring4_end","cabin",0,101) + end + end + + state = self:GetPackedBool("VPR") + self.PreviousVPRState = self.PreviousVPRState or false + if self.PreviousVPRState ~= state then + self.PreviousVPRState = state + if state then + self:SetSoundState("vpr",1,1) + else + self:SetSoundState("vpr",0,0) + self:PlayOnce("vpr_end","cabin",1) + end + end + + -- RK rotation + if self:GetPackedBool(112) 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_spin",0.7,1,nil,0.75) + else + self:SetSoundState("rk_spin",0,0,nil,0.75) + self:SetSoundState("rk_stop",0,1,nil,0.75) + self:SetSoundState("rk_stop",0.7,1,nil,0.75) + end + end + + --DIP sound + --self:SetSoundState("bpsn2",self:GetPackedBool(32) and 1 or 0,1.0) +end + +function ENT:Draw() + self.BaseClass.Draw(self) +end + +function ENT:DrawPost() + --local dc = render.GetLightColor(self:LocalToWorld(Vector(460.0,0.0,5.0))) + if self.InfoTableTimeout and (CurTime() < self.InfoTableTimeout) then + self:DrawOnPanel("InfoTableSelect",function() + draw.Text({ + text = self:GetNW2String("RouteNumber",""), + font = "MetrostroiSubway_InfoPanel",--..self:GetNW2Int("Style",1), + pos = { 140, -50 }, + xalign = TEXT_ALIGN_CENTER, + yalign = TEXT_ALIGN_CENTER, + color = Color(255,0,0,255)}) + draw.Text({ + text = self:GetNW2String("FrontText",""), + font = "MetrostroiSubway_InfoPanel",--..self:GetNW2Int("Style",1), + pos = { 140, -100 }, + xalign = TEXT_ALIGN_CENTER, + yalign = TEXT_ALIGN_CENTER, + color = Color(255,0,0,255)}) + end) + end + +--[[ + self:DrawOnPanel("IGLA",function() + local plus = ((not self:GetPackedBool(32) or not self:GetPackedBool(78)) and 1 or 0) + surface.SetDrawColor(50 - plus*40,255 - plus*220,40 - plus*40) + surface.DrawRect(0,-4,360,60) + if not self:GetPackedBool(32) or not self:GetPackedBool(78) then return end + local text1 = "" + local text2 = "" + local C1 = Color(0,0,0,255) + local C2 = Color(50,200,50,255) + local flash = false + local T = self:GetPackedRatio(11) + local Ptrain = self:GetPackedRatio(5)*16.0 + local Pcyl = self:GetPackedRatio(6)*6.0 + local date = os.date("!*t",os_time) + -- Default IGLA text + text1 = "IGLA-01K RK TEMP" + text2 = Format("%02d:%02d:%02d %3d C",date.hour,date.min,date.sec,T) + + -- Modifiers and conditions + if self:GetPackedBool(25) then text1 = " !! Right Doors !!" end + if self:GetPackedBool(21) then text1 = " !! Left Doors !!" end + + if T > 300 then text1 = "Temperature warning!" end + + if self:GetPackedBool(50) and (Pcyl > 1.1) then + text1 = "FAIL PNEUMATIC BRAKE" + flash = true + end + if self:GetPackedBool(35) and + self:GetPackedBool(28) then + text1 = "FAIL AVU/BRAKE PRESS" + flash = true + end + if self:GetPackedBool(35) and + (not self:GetPackedBool(40)) then + text1 = "FAIL SD/DOORS OPEN " + flash = true + end + if self:GetPackedBool(36) then + text1 = "FAIL OVERLOAD RELAY " + flash = true + end + if Ptrain < 5.5 then + text1 = "FAIL TRAIN LINE LEAK" + flash = true + end + + if T > 400 then flash = true end + if T > 500 then text1 = "!Disengage circuits!" end + if T > 750 then text1 = " !! PIZDA POEZDU !! " end + + -- Draw text + if flash and ((RealTime() % 1.0) > 0.5) then + C2,C1 = C1,C2 + end + for i=1,20 do + surface.SetDrawColor(C2) + surface.DrawRect(3+(i-1)*17.7+1,0+4,16,22) + draw.DrawText(string.upper(text1[i] or ""),"MetrostroiSubway_IGLA",3+(i-1)*17.7,0+0,C1) + end + for i=1,20 do + surface.SetDrawColor(C2) + surface.DrawRect(3+(i-1)*17.7+1,0+24+4,16,22) + draw.DrawText(string.upper(text2[i] or ""),"MetrostroiSubway_IGLA",3+(i-1)*17.7,0+24,C1) + end + end) + ]] + --[[ + self:DrawOnPanel("DURADisplay",function() + if not self:GetPackedBool(32) or not self:GetPackedBool(24) then return end + local function GetColor(id, text) + if text then + return self:GetPackedBool(id) and Color(255,0,0) or Color(0,0,0) + else + return not self:GetPackedBool(id) and Color(255,255,255) or Color(0,0,0) + end + end + surface.SetAlphaMultiplier(0.4) + surface.SetDrawColor(255,255,255) + surface.DrawRect(0,3+22.8*0,211,22.8) -- 120 + surface.SetAlphaMultiplier(1.0) + draw.DrawText("DURA V 1.0","MetrostroiSubway_IGLA",0,0+22.8*0, Color(0,0,0,255)) + + surface.SetAlphaMultiplier(0.4) + surface.SetDrawColor(GetColor(31)) surface.SetAlphaMultiplier(0.4) + surface.DrawRect(0,3+22.8*1,211,23) -- 120 + surface.SetAlphaMultiplier(1.0) + draw.DrawText("Channel:" .. (self:GetPackedBool(31) and "2" or "1"),"MetrostroiSubway_IGLA",0,0+22.8*1,GetColor(31, true)) + + surface.SetAlphaMultiplier(0.4) + surface.SetDrawColor(GetColor(153)) surface.SetAlphaMultiplier(0.4) + surface.DrawRect(0,3+22.8*2,211,23) -- 120 + surface.SetAlphaMultiplier(1.0) + draw.DrawText("Channel1:" .. (self:GetPackedBool(153) and "Alt" or "Main"),"MetrostroiSubway_IGLA",0,0+22.8*2,GetColor(153, true)) + + surface.SetAlphaMultiplier(0.4) + surface.SetDrawColor(GetColor(154)) + surface.DrawRect(0,3+22.8*3,211,23) -- 120 + surface.SetAlphaMultiplier(1.0) + draw.DrawText("Channel2:" .. (self:GetPackedBool(154) and "Alt" or "Main"),"MetrostroiSubway_IGLA",0,0+22.8*3,GetColor(154, true)) + surface.SetAlphaMultiplier(0.4) + surface.SetDrawColor(255,255,255) + surface.DrawRect(0,3+22.8*4,211,23) -- 120 + surface.SetAlphaMultiplier(1) + end)]] + + self:DrawOnPanel("FrontPneumatic",function() + draw.DrawText(self:GetNW2Bool("FbI") and "Isolated" or "Open","Trebuchet24",150,0,Color(0,0,0,255)) + draw.DrawText(self:GetNW2Bool("FtI") and "Isolated" or "Open","Trebuchet24",670,0,Color(0,0,0,255)) + end) + self:DrawOnPanel("RearPneumatic",function() + draw.DrawText(self:GetNW2Bool("RbI") and "Isolated" or "Open","Trebuchet24",150,0,Color(0,0,0,255)) + draw.DrawText(self:GetNW2Bool("RtI") and "Isolated" or "Open","Trebuchet24",670,0,Color(0,0,0,255)) + end) + 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) + + -- Draw train numbers + local dc = render.GetLightColor(self:GetPos()) + self:DrawOnPanel("TrainNumber1",function() + draw.DrawText(Format("%04d",self:EntIndex()),"MetrostroiSubway_LargeText3",0,0,Color(255*dc.x,255*dc.y,255*dc.z,255)) + end) + self:DrawOnPanel("TrainNumber2",function() + draw.DrawText(Format("%04d",self:EntIndex()),"MetrostroiSubway_LargeText3",0,0,Color(255*dc.x,255*dc.y,255*dc.z,255)) + end) +end + +function ENT:OnButtonPressed(button) + if button == "ShowHelp" then + RunConsoleCommand("metrostroi_train_manual") + end + local bp_press = self:GetPackedRatio(6) + local blocked_l = self:GetPackedBool(132) and 0 or 1 + local blocked_r = self:GetPackedBool(133) and 0 or 1 + if button == "ParkingBrakeLeft" then + self.ParkingBrakeAngle = (self.ParkingBrakeAngle or 0) - blocked_l*45 + end + if button == "ParkingBrakeRight" then + self.ParkingBrakeAngle = (self.ParkingBrakeAngle or 0) + blocked_r*45 + end + if button == "ShowHelp" then + RunConsoleCommand("metrostroi_train_manual") + end + + if button == "PrevSign" then + self.InfoTableTimeout = CurTime() + 2.0 + end + if button == "NextSign" then + self.InfoTableTimeout = CurTime() + 2.0 + end + + if button and button:sub(1,3) == "Num" then + self.InfoTableTimeout = CurTime() + 2.0 + end +end diff --git a/lua/entities/_obsolete/gmod_subway_ema/init.lua b/lua/entities/_obsolete/gmod_subway_ema/init.lua new file mode 100644 index 0000000..f207b99 --- /dev/null +++ b/lua/entities/_obsolete/gmod_subway_ema/init.lua @@ -0,0 +1,958 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +ENT.BogeyDistance = 650 -- Needed for gm trainspawner + +--------------------------------------------------- +-- Defined train information +-- Types of wagon(for wagon limit system): +-- 0 = Head or intherim +-- 1 = Only head +-- 2 = Only intherim +--------------------------------------------------- +ENT.SubwayTrain = { + Type = "E", + Name = "Ema", + WagType = 0, + ARS = { + HaveASNP = false, + } +} +function ENT:Initialize() + -- Set model and initialize + self:SetModel("models/metrostroi_train/em/ema.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create seat entities + self.DriverSeat = self:CreateSeat("driver",Vector(430,-39,-21.5),Angle(0,0,0)) + self.InstructorsSeat = self:CreateSeat("instructor",Vector(430,40,-48+6+2.5),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 + self.FrontBogey = self:CreateBogey(Vector( 320,0,-80),Angle(0,180,0),true) + self.RearBogey = self:CreateBogey(Vector(-320,0,-80),Angle(0,0,0),false) + local pneumoPow = 0.8+(math.random()^0.4)*0.3 + self.FrontBogey.PneumaticPow = pneumoPow + self.RearBogey.PneumaticPow = pneumoPow + + -- Initialize key mapping + self.KeyMap = { + [KEY_1] = "KVSetX1", + [KEY_2] = "KVSetX2", + [KEY_3] = "KVSetX3", + [KEY_4] = "KVSet0", + [KEY_5] = "KVSetT1", + [KEY_6] = "KVSetT1AB", + [KEY_7] = "KVSetT2", + [KEY_8] = "KRP", + + [KEY_EQUAL] = "R_Program1Set", + [KEY_MINUS] = "R_Program2Set", + + [KEY_G] = "VozvratRPSet", + + [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] = "KDL", + [KEY_D] = "KDP", + [KEY_V] = "VUD1Toggle", + [KEY_L] = "HornEngage", + [KEY_N] = "VZ1Set", + [KEY_PAD_1] = "PneumaticBrakeSet1", + [KEY_PAD_2] = "PneumaticBrakeSet2", + [KEY_PAD_3] = "PneumaticBrakeSet3", + [KEY_PAD_4] = "PneumaticBrakeSet4", + [KEY_PAD_5] = "PneumaticBrakeSet5", + [KEY_PAD_6] = "PneumaticBrakeSet6", + [KEY_PAD_7] = "PneumaticBrakeSet7", + [KEY_PAD_DIVIDE] = "KRPSet", + [KEY_PAD_MULTIPLY] = "KAHSet", + + [KEY_SPACE] = "PBSet", + [KEY_BACKSPACE] = "EmergencyBrake", + + [KEY_PAD_0] = "DriverValveDisconnect", + [KEY_PAD_DECIMAL] = "EPKToggle", + [KEY_LSHIFT] = { + [KEY_W] = "KVUp_Unlocked", + [KEY_SPACE] = "KVTSet", + + [KEY_A] = "DURASelectAlternate", + [KEY_D] = "DURASelectMain", + [KEY_V] = "DURAToggleChannel", + [KEY_1] = "DIPonSet", + [KEY_2] = "DIPoffSet", + [KEY_4] = "KVSet0Fast", + [KEY_L] = "DriverValveDisconnect", + + [KEY_7] = "KVWrenchNone", + [KEY_8] = "KVWrenchKRU", + [KEY_9] = "KVWrenchKV", + [KEY_0] = "KVWrench0", + [KEY_6] = "KVSetT1A", + }, + + [KEY_RSHIFT] = { + [KEY_7] = "KVWrenchNone", + [KEY_8] = "KVWrenchKRU", + [KEY_9] = "KVWrenchKV", + [KEY_0] = "KVWrench0", + [KEY_L] = "DriverValveDisconnect", + [KEY_F] = "BCCDSet", + [KEY_R] = "VZPSet", + }, + [KEY_LALT] = { + [KEY_V] = "VUD1Toggle", + [KEY_L] = "EPKToggle", + }, + [KEY_RALT] = { + [KEY_L] = "EPKToggle", + }, + } + + self.InteractionZones = { + { Pos = Vector(-471,-30,0), + Radius = 28, + ID = "RearDoor" + }, + { Pos = Vector(473,32,28), + Radius = 28, + ID = "FrontDoor1" + }, + { Pos = Vector(473,32,-28), + Radius = 28, + ID = "FrontDoor2" + }, + { Pos = Vector(383.02,31.85,2), + Radius = 28, + ID = "PassengerDoor1" + }, + { Pos = Vector(383.02,-31.85,2), + Radius = 28, + ID = "PassengerDoor2" + }, + { Pos = Vector(408.18,63.59,-26), + Radius = 16, + ID = "CabinDoor1" + }, + { Pos = Vector(408.18,63.59,6), + Radius = 16, + ID = "CabinDoor2" + }, + { Pos = Vector(408.18,63.59,38), + Radius = 16, + ID = "CabinDoor3" + }, + { Pos = Vector(458.18,63.59,-26), + Radius = 16, + ID = "CabinDoor4" + }, + { Pos = Vector(458.18,63.59,6), + Radius = 16, + ID = "CabinDoor5" + }, + { Pos = Vector(458.18,63.59,38), + Radius = 16, + ID = "CabinDoor6" + }, + } + + self.Lights = { + -- Head + [1] = { "headlight", Vector(475,0,-20), Angle(0,0,0), Color(216,161,92), fov = 100 }, + [2] = { "glow", Vector(469.4, 45.43,-30.7), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 1.0 }, + [3] = { "glow", Vector(469.4,-45.43,-30.7), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 1.0 }, + [4] = { "glow", Vector(458+9,-14.86, 58), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 0.5 }, + [5] = { "glow", Vector(458+9,0, 58), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 0.5 }, + [6] = { "glow", Vector(458+9, 14.86, 58), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 0.5 }, + + -- Reverse + --[8] = { "light", Vector(458+11,-30.7, 54.2), Angle(0,0,0), Color(255,0,0), brightness = 10, scale = 1.0 }, + --[9] = { "light", Vector(458+11, 30.7, 54.2), Angle(0,0,0), Color(255,0,0), brightness = 10, scale = 1.0 }, + + -- Cabin + [10] = { "dynamiclight", Vector(435,0,20), Angle(0,-0,0), Color(255,107,50), brightness = 0.004, distance = 600, shadows = 1}, + + -- Interior + [11] = { "dynamiclight", Vector( 250, 0, 0), Angle(0,0,0), Color(255,95,10), brightness = 5, distance = 300 , fov=180,farz = 128 }, + [12] = { "dynamiclight", Vector( 0, 0, 0), Angle(0,0,0), Color(255,95,10), brightness = 5, distance = 400, fov=180,farz = 128 }, + [13] = { "dynamiclight", Vector(-300, 0, 0), Angle(0,0,0), Color(255,95,10), brightness = 5, distance = 400 , fov=180,farz = 128 }, + + -- Side lights + --//[14] = { "light", Vector(390+12.15, 69, 54), Angle(0,0,0), Color(255,0,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + --[15] = { "light", Vector(390+12.15, 69, 51), Angle(0,0,0), Color(150,255,255), brightness = 0.6, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + --[16] = { "light", Vector(390+12.15, 69, 48), Angle(0,0,0), Color(50,255,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + --[17] = { "light", Vector(390+12.15, 69, 45), Angle(0,0,0), Color(255,255,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + + --[18] = { "light", Vector(390+12.15, -69, 54), Angle(0,0,0), Color(255,0,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + --[19] = { "light", Vector(390+12.15, -69, 51), Angle(0,0,0), Color(150,255,255), brightness = 0.6, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + --[20] = { "light", Vector(390+12.15, -69, 48), Angle(0,0,0), Color(50,255,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + --[21] = { "light", Vector(390+12.15, -69, 45), Angle(0,0,0), Color(255,255,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + + [15] = { "light", Vector(402.202942,69.270073,44.79285), Angle(0,0,0), Color(150,255,255), brightness = 0.9, scale = 0.10, texture = "sprites/light_glow02.vmt" }, + [16] = { "light", Vector(402.202942,69.270073,41.509621), Angle(0,0,0), Color(50,255,0), brightness = 0.9, scale = 0.10, texture = "sprites/light_glow02.vmt" }, + [17] = { "light", Vector(402.202942,69.270073,37.3862), Angle(0,0,0), Color(255,255,0), brightness = 0.9, scale = 0.10, texture = "sprites/light_glow02.vmt" }, + + --[19] = { "light", Vector(15, -69, 58.3), Angle(0,0,0), Color(150,255,255), brightness = 0.9, scale = 0.10, texture = "sprites/light_glow02.vmt" }, + --[20] = { "light", Vector(12, -69, 58.3), Angle(0,0,0), Color(50,255,0), brightness = 0.9, scale = 0.10, texture = "sprites/light_glow02.vmt" }, + --[21] = { "light", Vector(9, -69, 58.3), Angle(0,0,0), Color(255,255,0), brightness = 0.9, scale = 0.10, texture = "sprites/light_glow02.vmt" }, + [32] = { "headlight", Vector(450.70,-56.3,28), Angle(-90,0,-45), Color(216,161,92), farz = 6, nearz = 4, shadows = 0, brightness = 2, fov = 77 }, + [33] = { "headlight", Vector(450.70,-56.3,32), Angle(-90,0,-45), Color(216,161,92), farz = 6, nearz = 4, shadows = 0, brightness = 2, fov = 77 }, + + [34] = { "headlight", Vector(448.65,-56.40,22.60), Angle(-30,0,-45), Color(216,161,92), farz = 6, nearz = 4, shadows = 0, brightness = 2, fov = 140 }, + + [35] = { "headlight", Vector(450.6,-55.84,12.73), Angle(-90,-90,-180), Color(216,161,92), farz = 7, nearz = 4, shadows = 0, brightness = 2, fov = 130 }, + + [36] = { "headlight", Vector(455.2,-53.2,5.35), Angle(-90,-90,-180), Color(216,161,92), farz = 4, nearz = 4, shadows = 0, brightness = 2, fov = 130 }, + + [37] = { "headlight", Vector(458.3,-20.32,19.6), Angle(-90,-120,-180), Color(216,161,92), farz = 4, nearz = 4, shadows = 0, brightness = 3, fov = 160 }, + + [38] = { "headlight", Vector( -20, 0, 30), Angle(90,0,90), Color(255,95,10), brightness = 1, distance = 999,fov=179, shadows = 0, farz = 500}, + [39] = { "headlight", Vector( -20, 0, 10), Angle(-90,0,90), Color(255,95,10), brightness = 1, distance = 999,fov=179, shadows = 0, farz = 500}, + [70 ] = { "headlight", Vector( 450, -60, -47), Angle(45,-90,0), Color(255,255,255), brightness = 0.5, distance = 400 , fov=120, shadows = 1 }, + + } + self.NetworkSwitches = { + "VB","VBA", + + "KVT","VZP","VZD","KRZD", + + "KDL","DIPon","DIPoff","VozvratRP","KSN","KDP", + + "KU1","Ring","VUS","KAK","VAutodrive","VUD1", + + "RezMK", + + "VUD2","VUD2L","VDL", + + "VRU","VAH","VAD","OVT","KSD","DP","VKF", + + "OtklAVU","KRP", + + "RC1","RC2","VRD", + + "PB","VU3","VU1","VU2","AV8B","VU","KDLK","VDLK","KDPK","KAHK","L_3","RST","VSOSD", + } + self.Plombs = { + RST = true, + VAH = true, + VAD = true, + OVT = true, + RC1 = true, + RC2 = true, + Init = true, + } + -- Lights + --[[ + for i = 1,23 do + self.Lights[69+i] = { "light", Vector(-470 + 35*i, 0, 65), Angle(180,0,0), Color(255,220,180), brightness = 0.25, scale = 0.75} + --self:SetLightPower(69+i,RealTime()%1*2>1) + end]] + + -- Cross connections in train wires + self.TrainWireInverts = { + [18] = true, + [34] = true, + } + self.TrainWireCrossConnections = { + [5] = 4, -- Reverser F<->B + [31] = 32, -- Doors L<->R + } + + -- Setup door positions + self.LeftDoorPositions = {} + self.RightDoorPositions = {} + for i=0,3 do + table.insert(self.LeftDoorPositions,Vector(353.0 - 35*0.5 - 231*i,65,-1.8)) + table.insert(self.RightDoorPositions,Vector(353.0 - 35*0.5 - 231*i,-65,-1.8)) + end + + -- KV wrench mode + self.KVWrenchMode = 0 + + -- Parking brake ratio + self.ManualBrake = 0.0 + self.RearDoor = false + self.FrontDoor = false + self.CabinDoor = false + self.PassengerDoor = false + +-- self.A5:TriggerInput("Set",0) + self:UpdateTextures() +end + +function ENT:UpdateTextures() + local texture = Metrostroi.Skins["train"][self.Texture] + local passtexture = Metrostroi.Skins["pass"][self.PassTexture] + local cabintexture = Metrostroi.Skins["cab"][self.CabTexture] + + for k,v in pairs(self:GetMaterials()) do + self:SetSubMaterial(k-1,"") + end + for k,v in pairs(self:GetMaterials()) do + if v == "models/metrostroi_train/81/int02" then + if not Metrostroi.Skins["717_schemes"] or not Metrostroi.Skins["717_schemes"]["m"] then + --self:SetSubMaterial(k-1,Metrostroi.Skins["717_schemes"][""]) + else + if not self.Adverts or self.Adverts ~= 4 then + --self:SetSubMaterial(k-1,Metrostroi.Skins["717_schemes"]["m"].adv) + else + --self:SetSubMaterial(k-1,Metrostroi.Skins["717_schemes"]["m"].clean) + end + end + end + local tex = string.Explode("/",v) + tex = tex[#tex] + if cabintexture and cabintexture.textures[tex] then + self:SetSubMaterial(k-1,cabintexture.textures[tex]) + end + if passtexture and passtexture.textures[tex] then + self:SetSubMaterial(k-1,passtexture.textures[tex]) + end + if texture and texture.textures[tex] then + self:SetSubMaterial(k-1,texture.textures[tex]) + end + end + self:SetNW2String("texture",self.Texture) + self:SetNW2String("passtexture",self.PassTexture) + self:SetNW2String("cabtexture",self.CabTexture) +end + +-------------------------------------------------------------------------------- +function ENT:Think() + self.RetVal = self.BaseClass.Think(self) + + -- Check if wrench was pulled out + if self.DriversWrenchPresent then + self.KV:TriggerInput("Enabled",self:IsWrenchPresent() and 1 or 0) + end + self:SetLightPower(1, self.Panel["HeadLights3"] > 0.5,(math.min(1,self.Panel["HeadLights1"])*0.50 + + math.min(1,self.Panel["HeadLights2"])*0.25 + + math.min(1,self.Panel["HeadLights3"])*0.25) + ) + --self:SetLightPower(2, self.Panel["HeadLights2"] > 0.5) + --self:SetLightPower(3, self.Panel["HeadLights2"] > 0.5) + --self:SetLightPower(4, self.Panel["HeadLights1"] > 0.5) + --self:SetLightPower(5, self.Panel["HeadLights1"] > 0.5) + --self:SetLightPower(6, self.Panel["HeadLights1"] > 0.5) + --self:SetLightPower(7, self.Panel["HeadLights2"] > 0.5) + -- Reverser lights + --self:SetLightPower(8, self.Panel["RedLightRight"] > 0.5) + --self:SetLightPower(9, self.Panel["RedLightLeft"] > 0.5) + self:SetPackedBool("HeadLights1",self.Panel["HeadLights1"] > 0.5) + self:SetPackedBool("HeadLights2",self.Panel["HeadLights2"] > 0.5) + self:SetPackedBool("RedLight",self.Panel["RedLightLeft"] > 0.5 or self.Panel["RedLightRight"] > 0.5) + -- Interior/cabin lights + self:SetLightPower(10, self.Panel["CabinLight"] > 0.5) + + local lightsActive2 = self.PowerSupply.XT3_4 > 65.0 + local lightsActive1 = self.Panel["EmergencyLight"] > 0.5 or lightsActive2 + self:SetPackedBool("Lamps_emer",lightsActive1) + self:SetPackedBool("Lamps_full",lightsActive2) + --local I = math.Round((self.Electric.I24-150)/1000.0,1.5) + local Light + if self.Pneumatic.Compressor == 1 then + Light = (lightsActive2 and 0.6 or 0.3) + --[[ + if I > 0 then + Light = Light*(1-math.abs(I*0.1)) + end + ]] + self:SetLightPower(11, lightsActive1, Light) + self:SetLightPower(12, lightsActive1, Light) + self:SetLightPower(13, lightsActive1, Light) + else + Light = (lightsActive2 and 0.8 or 0.4) + --[[ + if I > 0 then + Light = Light*(1-math.abs(I*0.1)) + end + ]] + self:SetLightPower(11, lightsActive1, Light) + self:SetLightPower(12, lightsActive1, Light) + self:SetLightPower(13, lightsActive1, Light) + end + self:SetPackedRatio("LampsI",math.Round((self.Electric.I24-150)/1000.0,1.5)) + self.SOSD = self.Panel["SD"] <= 0 and self.Panel["V1"] > 0 and self.KV.ReverserPosition ~= 0 and self.VSOSD.Value > 0.5 + self:SetLightPower(70,self.SOSD) + --self:SetLightPower(12, lightsActive1,0.1 + ((self.PowerSupply.XT3_4 > 65.0) and 0.7 or 0)) + --self:SetLightPower(13, lightsActive2, 0.8) + --for i = 1,23 do + --self:SetLightPower(69+i,lightsActive2 and true or lightsActive1 and i%5==1 or false) + --end + --self:SetLightPower(12, self.Panel["EmergencyLight"] > 0.5) + --self:SetLightPower(13, self.PowerSupply.XT3_4 > 65.0) + + -- Side lights + --self:SetLightPower(15, self.Panel["TrainDoors"] > 0.5) + --self:SetLightPower(19, self.Panel["TrainDoors"] > 0.5) + + --self:SetLightPower(16, self.Panel["GreenRP"] > 0.5) + --self:SetLightPower(20, self.Panel["GreenRP"] > 0.5) + + --self:SetLightPower(17, self.Panel["TrainBrakes"] > 0.5) + --self:SetLightPower(21, self.Panel["TrainBrakes"] > 0.5) + + self:SetLightPower(32,self.L_3.Value > 0.5) + self:SetLightPower(33,self.L_3.Value > 0.5) + self:SetLightPower(34,self.L_3.Value > 0.5) + self:SetLightPower(35,self.L_3.Value > 0.5) + self:SetLightPower(36,self.L_3.Value > 0.5) + self:SetLightPower(37,self.L_3.Value > 0.5) + -- Total temperature + local IGLA_Temperature = math.max(self.Electric.T1,self.Electric.T2) + + -- Switch and button states + self:SetPackedBool(0,self:IsWrenchPresent()) + + -- Signal if doors are open or no to platform simulation + self.LeftDoorsOpen = + (self.Pneumatic.LeftDoorState[1] > 0.5) or + (self.Pneumatic.LeftDoorState[2] > 0.5) or + (self.Pneumatic.LeftDoorState[3] > 0.5) or + (self.Pneumatic.LeftDoorState[4] > 0.5) + self.RightDoorsOpen = + (self.Pneumatic.RightDoorState[1] > 0.5) or + (self.Pneumatic.RightDoorState[2] > 0.5) or + (self.Pneumatic.RightDoorState[3] > 0.5) or + (self.Pneumatic.RightDoorState[4] > 0.5) + self:WriteTrainWire(35,(self.Pneumatic.BrakeCylinderPressure > 0.1) and 1 or 0) + + -- DIP/power + self:SetPackedBool(32,self.Panel["V1"] > 0.5) + -- Red RP + local TW18 = self:GetTrainWire18() + if self:ReadTrainWire(20) == 0 or (self.Panel["V1"] < 0.5) then TW18 = 0 end--(self.KV.ControllerPositionAutodrive == 0 and self.KV.ControllerPosition == 0) + self:SetPackedBool(35,TW18 > 0.5) + self:SetPackedBool(131,TW18 > 0) + -- Green RP + self:SetPackedBool(36,self.Panel["GreenRP"] > 0.5) + -- Cabin heating + --self:SetPackedBool(37,self.Panel["KUP"] > 0.5) + -- AVU + --self:SetPackedBool(38,self.Panel["AVU"] > 0.5) + -- Ring + self:SetPackedBool(39,self.Panel["Ring"] > 0.5) + -- SD + self:SetPackedBool(40,self.Panel["SD"] > 0.5) + -- OCh + self:SetPackedBool(41,self.ALS_ARS.NoFreq) + -- 0 + self:SetPackedBool(42,self.ALS_ARS.Signal0) + -- 40 + self:SetPackedBool(43,self.ALS_ARS.Signal40) + -- 60 + self:SetPackedBool(44,self.ALS_ARS.Signal60) + -- 75 + self:SetPackedBool(45,self.ALS_ARS.Signal70) + -- 80 + self:SetPackedBool(46,self.ALS_ARS.Signal80) + -- KT + self:SetPackedBool(47,self.ALS_ARS.LKT and self.Panel["V1"] > 0.5) + -- KVD + self:SetPackedBool(48,self.ALS_ARS.LVD) + self:SetPackedBool("DriverValveBLDisconnect",self.DriverValveBLDisconnect.Value == 1.0) + self:SetPackedBool("DriverValveTLDisconnect",self.DriverValveTLDisconnect.Value == 1.0) + self:SetPackedBool("EPK",self.EPK.Value == 1.0) + for i=1,#self.NetworkSwitches do + local switch = self.NetworkSwitches[i] + self:SetPackedBool(switch,self[switch].Value == 1.0) + end + self:SetPackedBool("VPR",self.RST.Value > 0 and self.Panel["V1"] > 0) + self:SetPackedBool("Lamp6",self:ReadTrainWire(6) > 0.5) + self:SetPackedBool("Lamp1",self:ReadTrainWire(1) > 0.5) + self:SetPackedBool("Lamp2",self:ReadTrainWire(2) > 0.5) + self:SetPackedBool("DoorsWag",self.BD.Value == 0.0 and self.Panel["V1"] > 0.5 and self.KSD.Value > 0.5) + self:SetPackedBool(20,self.Pneumatic.Compressor == 1.0) + self:SetPackedBool(21,self.Pneumatic.LeftDoorState[1] > 0.5) + self:SetPackedBool(25,self.Pneumatic.RightDoorState[1] > 0.5) + self:SetPackedBool(112,(self.RheostatController.Velocity ~= 0.0)) + self:SetPackedBool(156,self.RearDoor) + self:SetPackedBool(157,self.FrontDoor) + self:SetPackedBool(158,self.PassengerDoor) + self:SetPackedBool(159,self.CabinDoor) + + if self.VUD2.Blocked > 0 and self.VUD2L.Value > 0.5 then + self.VUD2:TriggerInput("Block",0) + end + if self.VUD2.Blocked == 0 and self.VUD2L.Value == 0 then + self.VUD2:TriggerInput("Block",1) + end + if self.VUD2L.Blocked > 0 and self.VUD2.Value > 0 then + self.VUD2L:TriggerInput("Block",0) + end + if self.VUD2L.Blocked == 0 and self.VUD2.Value == 0 then + self.VUD2L:TriggerInput("Block",1) + end + self:SetPackedBool("VUD2Bl",self.VUD2.Blocked > 0) + self:SetPackedBool("VUD2LBl",self.VUD2L.Blocked > 0) + --[[ + -- LST + self:SetPackedBool(49,self:ReadTrainWire(6) > 0.5) + -- LVD + self:SetPackedBool(50,self:ReadTrainWire(1) > 0.5) + + self:SetPackedBool(165,self.PB.Value > 0) + + -- AV states + -- for i,v in ipairs(self.Panel.AVMap) do + -- if tonumber(v) + -- then self:SetPackedBool(64+(i-1),self["A"..v].Value == 1.0) + -- elseif self[v] then self:SetPackedBool(64+(i-1),self[v].Value == 1.0) + -- end + -- end + + self:SetPackedBool(62,self.L_3.Value > 0.5) + self:SetPackedBool(64+19,self.VU1.Value > 0.5) + self:SetPackedBool(64+12,self.VU.Value > 0.5) + self:SetPackedBool(64+24,self.RST.Value > 0.5) + self:SetPackedBool(64+7 ,self.AV8B.Value > 0.5) + self:SetPackedBool(64+36,self.VU2.Value > 0.5) + self:SetPackedBool(64+13,self.VU3.Value > 0.5) + self:SetPackedBool("VPR",self.RST.Value == 1.0 and self.Panel["V1"]) + ]] + -- Feed packed floats + self:SetPackedRatio(0, 1-self.Pneumatic.DriverValvePosition/7) + self:SetPackedRatio(1, (self.KV.ControllerPosition+3)/7) + self:SetPackedRatio(2, 1-(self.KV.ReverserPosition+1)/2) + self:SetPackedRatio(4, self.Pneumatic.ReservoirPressure/16.0) + self:SetPackedRatio(5, self.Pneumatic.TrainLinePressure/16.0) + self:SetPackedRatio(6, math.min(2.7,self.Pneumatic.BrakeCylinderPressure + 4.0*self.ManualBrake)/6.0) + self:SetPackedRatio(7, self.Electric.Power750V/1000.0) + self:SetPackedRatio(8, math.abs(self.Electric.I24)/1000.0) + --self:SetPackedRatio(9, self.Pneumatic.BrakeLinePressure_dPdT or 0) + if self.Pneumatic.TrainLineOpen then + self:SetPackedRatio(9, (-self.Pneumatic.TrainLinePressure_dPdT or 0)*6) + else + self:SetPackedRatio(9, self.Pneumatic.BrakeLinePressure_dPdT or 0) + end + self:SetPackedRatio(10,(self.Panel["V1"] * self.Battery.Voltage) / 82.0) + self:SetPackedRatio(11,IGLA_Temperature) + + -- Update ARS system + self:SetPackedRatio(3, self.ALS_ARS.Speed/100.0) + self:SetPackedRatio("Speed", self.Speed/120) + if (self.ALS_ARS.Ring == true) then + self:SetPackedBool(39,true) + end + + -- 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 = 30300+25000*(A < 0 and 1 or 0) + self.FrontBogey.Reversed = (self.RKR.Value > 0.5) + self.RearBogey.MotorForce = 30300+25000*(A < 0 and 1 or 0) + self.RearBogey.Reversed = (self.RKR.Value < 0.5) + + -- These corrections are required to beat source engine friction at very low values of motor power + local A = 2*self.Engines.BogeyMoment + 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 + self.FrontBogey.PneumaticBrakeForce = 50000.0 + self.FrontBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + 7.0*self.ManualBrake + self.FrontBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + self.FrontBogey.ParkingBrake = false + self.RearBogey.PneumaticBrakeForce = 50000.0 + self.RearBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + 7.0*self.ManualBrake + self.RearBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + --self.RearBogey.ParkingBrake = self.ManualBrake.Value > 0.5 + end + + -- Generate bogey sounds + local jerk = math.abs((self.Acceleration - (self.PrevAcceleration or 0)) / self.DeltaTime) + self.PrevAcceleration = self.Acceleration + + if jerk > (2.0 + self.Speed/15.0) then + self.PrevTriggerTime1 = self.PrevTriggerTime1 or CurTime() + self.PrevTriggerTime2 = self.PrevTriggerTime2 or CurTime() + + if ((math.random() > 0.00) or (jerk > 10)) and (CurTime() - self.PrevTriggerTime1 > 1.5) then + self.PrevTriggerTime1 = CurTime() + self.FrontBogey:EmitSound("subway_trains/bogey/chassis_"..math.random(1,5)..".wav", 70, math.random(96,110)) + end + if ((math.random() > 0.00) or (jerk > 10)) and (CurTime() - self.PrevTriggerTime2 > 1.5) then + self.PrevTriggerTime2 = CurTime() + self.RearBogey:EmitSound("subway_trains/bogey/chassis_"..math.random(1,5)..".wav", 70, math.random(96,110)) + end + end + + -- Temporary hacks + --self:SetNW2Float("V",self.Speed) + --self:SetNW2Float("A",self.Acceleration) + + return self.RetVal +end + +-------------------------------------------------------------------------------- +function ENT:OnButtonPress(button,ply) + -- Parking brake + if button == "ParkingBrakeLeft" then + self.ManualBrake = math.max(0.0,(self.ManualBrake or 0) - 0.008) + if self.ManualBrake == 0.0 then return end + --print(self.ManualBrake) + end + if button == "ParkingBrakeRight" then + self.ManualBrake = math.min(1.0,(self.ManualBrake or 0) + 0.008) + if self.ManualBrake == 1.0 then return end + --print(self.ManualBrake) + end + if string.find(button,"PneumaticBrakeSet") then + self.Pneumatic:TriggerInput("BrakeSet",tonumber(button:sub(-1,-1))) + return + end + if button:find("FrontDoor") then + self.FrontDoor = not self.FrontDoor + if self.FrontDoor then self:PlayOnce("door_open_tor","cabin") else self:PlayOnce("door_close_tor","cabin") end + end + if button:find("RearDoor") then + self.RearDoor = not self.RearDoor + if self.RearDoor then self:PlayOnce("door_open_tor") else self:PlayOnce("door_close_tor") end + end + if button:find("PassengerDoor") then + self.PassengerDoor = not self.PassengerDoor + if self.PassengerDoor then self:PlayOnce("door_open_tor","cabin") else self:PlayOnce("door_close_tor","cabin") end + end + if button:find("CabinDoor") then + self.CabinDoor = not self.CabinDoor + if self.CabinDoor then self:PlayOnce("door_open_tor","cabin") else self:PlayOnce("door_close_tor","cabin") end + end + if button == "UAVAToggle" then + local state = self.UAVA.TargetValue < 0.5 and "enabled" or "disabled" + RunConsoleCommand("say",ply:GetName().." "..state.." UAVA!") + end + if button == "VRDToggle" then + local state = self.VRD.TargetValue < 0.5 and "enabled" or "disabled" + RunConsoleCommand("say",ply:GetName().." "..state.." VRD!") + end + if button == "NextSign" then + self:PrepareSigns() + self.SignsIndex = self.SignsIndex + 1 + if self.SignsIndex > #self.SignsList then self.SignsIndex = 1 end + + self:SetNW2String("FrontText",self.SignsList[self.SignsIndex][2]) + end + if button == "PrevSign" then + self:PrepareSigns() + self.SignsIndex = self.SignsIndex - 1 + if self.SignsIndex < 1 then self.SignsIndex = #self.SignsList end + + self:SetNW2String("FrontText",self.SignsList[self.SignsIndex][2]) + end + + if button == "Num1P" then + if not self.RouteNumber then self.RouteNumber = "00" end + local num = tonumber(self.RouteNumber[2]) + num = num + 1 + if num > 9 then num = 0 end + self.RouteNumber = string.SetChar(self.RouteNumber,2, num) + self:SetNW2String("RouteNumber",self.RouteNumber) + local trn = self.WagonList[#self.WagonList] + if IsValid(trn) and trn ~= self then + trn.RouteNumber = self.RouteNumber + trn:SetNW2String("RouteNumber",self.RouteNumber) + end + end + if button == "Num1M" then + if not self.RouteNumber then self.RouteNumber = "00" end + local num = tonumber(self.RouteNumber[2]) + num = num - 1 + if num < 0 then num = 9 end + self.RouteNumber = string.SetChar(self.RouteNumber,2, num) + self:SetNW2String("RouteNumber",self.RouteNumber) + local trn = self.WagonList[#self.WagonList] + if IsValid(trn) and trn ~= self then + trn.RouteNumber = self.RouteNumber + trn:SetNW2String("RouteNumber",self.RouteNumber) + end + end + if button == "Num2P" then + if not self.RouteNumber then self.RouteNumber = "00" end + local num = tonumber(self.RouteNumber[1]) + num = num + 1 + if num > 9 then num = 0 end + self.RouteNumber = string.SetChar(self.RouteNumber,1, num) + self:SetNW2String("RouteNumber",self.RouteNumber) + local trn = self.WagonList[#self.WagonList] + if IsValid(trn) and trn ~= self then + trn.RouteNumber = self.RouteNumber + trn:SetNW2String("RouteNumber",self.RouteNumber) + end + end + if button == "Num2M" then + if not self.RouteNumber then self.RouteNumber = "00" end + local num = tonumber(self.RouteNumber[1]) + num = num - 1 + if num < 0 then num = 9 end + self.RouteNumber = string.SetChar(self.RouteNumber,1, num) + self:SetNW2String("RouteNumber",self.RouteNumber) + local trn = self.WagonList[#self.WagonList] + if IsValid(trn) and trn ~= self then + trn.RouteNumber = self.RouteNumber + trn:SetNW2String("RouteNumber",self.RouteNumber) + end + 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 + --print(self.ManualBrake) + end + if button == "ManualBrakeRight" then + self.ManualBrake = math.min(1.0,self.ManualBrake + 0.008) + if self.ManualBrake == 1.0 then return end + --print(self.ManualBrake) + 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 == 2) and (button == "KVReverserUp") then + self.KRU:TriggerInput("Up",1) + self:OnButtonPress("KRUUp") + end + if (self.KVWrenchMode == 2) and (button == "KVReverserDown") then + self.KRU:TriggerInput("Down",1) + self:OnButtonPress("KRUDown") + end + if (self.KVWrenchMode == 2) and (button == "KVSetX1") then + self.KRU:TriggerInput("SetX1",1) + self:OnButtonPress("KRUSetX1") + end + if (self.KVWrenchMode == 2) and (button == "KVSetX2") then + self.KRU:TriggerInput("SetX2",1) + self:OnButtonPress("KRUSetX2") + end + if (self.KVWrenchMode == 2) and (button == "KVSetX3") then + self.KRU:TriggerInput("SetX3",1) + self:OnButtonPress("KRUSetX3") + end + if (self.KVWrenchMode == 2) and (button == "KVSet0") then + self.KRU:TriggerInput("Set0",1) + self:OnButtonPress("KRUSet0") + end + + if button == "KVSetT1AB" then + if self.KV.ControllerPosition == -2 then + self.KV:TriggerInput("ControllerSet",-1) + timer.Simple(0.20,function() + self.KV:TriggerInput("ControllerSet",-2) + end) + else + self.KV:TriggerInput("ControllerSet",-2) + end + end + if button == "KVWrench0" then + if self.KVWrenchMode == 3 or self.KVWrenchMode == 1 then + if self.KVWrenchMode ~= 1 then + self:PlayOnce("revers_in","cabin",0.7) + end + self.KVWrenchMode = 0 + self.DriversWrenchPresent = false + self.DriversWrenchMissing = false + self.KV:TriggerInput("Enabled",1) + self.KRU:TriggerInput("Enabled",0) + end + end + if button == "KVWrenchKV" then + if self.KVWrenchMode == 3 or self.KVWrenchMode == 0 then + if self.KVWrenchMode ~= 0 then + self:PlayOnce("revers_in","cabin",0.7) + end + self.KVWrenchMode = 1 + self.DriversWrenchPresent = true + self.DriversWrenchMissing = false + self.KV:TriggerInput("Enabled",1) + self.KRU:TriggerInput("Enabled",0) + end + end + --THERE IS NO KRU IN THIS EZH MODEL + --[[ + if button == "KVWrenchKRU" then + if self.KVWrenchMode == 3 then + self:PlayOnce("kru_in","cabin",0.7) + self.KVWrenchMode = 2 + self.DriversWrenchPresent = false + self.DriversWrenchMissing = true + self.KV:TriggerInput("Enabled",0) + self.KRU:TriggerInput("Enabled",1) + self.KRU:TriggerInput("LockX3",1) + end + end]] + if button == "KVWrenchNone" then + if self.KVWrenchMode ~= 3 and self.KV.ReverserPosition == 0 then + if self.KVWrenchMode == 2 then + self:PlayOnce("kru_out","cabin",0.7) + else + self:PlayOnce("revers_out","cabin",0.7) + end + self.KVWrenchMode = 3 + self.DriversWrenchPresent = false + self.DriversWrenchMissing = true + self.KV:TriggerInput("Enabled",0) + self.KRU:TriggerInput("Enabled",0) + end + end + --if button == "KVT2Set" then self.KVT:TriggerInput("Close",1) end + if button == "KDL" and self.VUD1.Value < 1 then self.KDL:TriggerInput("Close",1) self:OnButtonPress("KDLSet") end + if button == "KDP" and self.VUD1.Value < 1 then self.KDP:TriggerInput("Close",1) self:OnButtonPress("KDPSet") end + if button == "VDL" and self.VUD1.Value < 1 then self.VDL:TriggerInput("Close",1) self:OnButtonPress("VDLSet") end + if button == "KRP" then + self.KRP:TriggerInput("Set",1) + self:OnButtonPress("KRPSet") + 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.DriverValveBLDisconnect:TriggerInput("Set",0) + self.DriverValveTLDisconnect:TriggerInput("Set",0) + end + if self.DriverValveBLDisconnect.Value == 1.0 then + if self.EPK.Value == 1 then self:PlayOnce("epv_off","cabin",0.9) end + else + if self.EPK.Value == 1 then self:PlayOnce("epv_on","cabin",0.9) end + end + return + end + + if button == "DriverValveBLDisconnectToggle" then + if self.DriverValveBLDisconnect.Value == 1.0 then + if self.EPK.Value == 1 then self:PlayOnce("epv_off","cabin",0.9) end + else + if self.EPK.Value == 1 then self:PlayOnce("epv_on","cabin",0.9) end + end + return + end + + -- Special logic + if (button == "VDL") or (button == "KDL") or (button == "KDP") then + --self.VUD1:TriggerInput("Open",1) + end + if (button == "KDP") then + --self.DoorSelect:TriggerInput("Close",1) + end + if (button == "VUD1Set") or (button == "VUD1Toggle") or + (button == "VUD2Set") or (button == "VUD2Toggle") then + self.VDL:TriggerInput("Open",1) + self.KDL:TriggerInput("Open",1) + self.KDP:TriggerInput("Open",1) + end + + if button == "GVToggle" then + if self.GV.Value > 0.5 then + self:PlayOnce("revers_f",nil,0.7) + else + self:PlayOnce("revers_b",nil,0.7) + end + return + end + + + if (button == "UAVAToggle") then + if self.UAVA then + if self.UAVA.Value > 0.5 then + self:PlayOnce("uava_off","cabin") + else + self:PlayOnce("uava_off","cabin") + end + end + return + end + + + if button == "EPKToggle" and self.DriverValveBLDisconnect.Value == 1.0 then + if self.EPK.Value == 0.0 then + self:PlayOnce("epv_off","cabin",0.9) + else + self:PlayOnce("epv_on","cabin",0.9) + end + return + end +end + +function ENT:OnButtonRelease(button) + if string.find(button,"PneumaticBrakeSet") then + return + end + --if button == "KVT2Set" then self.KVT:TriggerInput("Open",1) end + if button == "KDL" and self.VUD1.Value < 1 then self.KDL:TriggerInput("Open",1) self:OnButtonRelease("KDLSet") end + if button == "KDP" and self.VUD1.Value < 1 then self.KDP:TriggerInput("Open",1) self:OnButtonRelease("KDPSet") end + if button == "VDL" and self.VUD1.Value < 1 then self.VDL:TriggerInput("Open",1) self:OnButtonRelease("VDLSet") end + if button == "KRP" then + self.KRP:TriggerInput("Set",0) + self:OnButtonRelease("KRPSet") + end + + --[[ + if (button == "PneumaticBrakeDown") and (self.Pneumatic.DriverValvePosition == 1) then + self.Pneumatic:TriggerInput("BrakeSet",2) + end + if self.Pneumatic.ValveType == 1 then + if (button == "PneumaticBrakeUp") and (self.Pneumatic.DriverValvePosition == 5) then + self.Pneumatic:TriggerInput("BrakeSet",4) + end + end + ]] + + if (not string.find(button,"KVT")) and string.find(button,"KV") then return end + if string.find(button,"KRU") then return 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 diff --git a/lua/entities/_obsolete/gmod_subway_ema/shared.lua b/lua/entities/_obsolete/gmod_subway_ema/shared.lua new file mode 100644 index 0000000..d5faa34 --- /dev/null +++ b/lua/entities/_obsolete/gmod_subway_ema/shared.lua @@ -0,0 +1,106 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.PrintNameTranslated = "Entities.Ema" +ENT.Author = "Oldy" +ENT.Contact = "oldy702@gmail.com" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" + +ENT.Spawnable = false --NOT FINISHED +ENT.AdminSpawnable = false --NOT FINISHED + +function ENT:PassengerCapacity() + return 300 +end + +function ENT:GetStandingArea() + return Vector(-450,-30,-45),Vector(380,30,-45) +end + +function ENT:InitializeSounds() + self.BaseClass.InitializeSounds(self) + self.SoundNames["relay_close2"] = nil + self.SoundNames["rvt_close"] = nil + self.SoundNames["r1_5_close"] = nil + self.SoundNames["rvt_open"] = nil + self.SoundNames["r1_5_open"] = nil + --[[self.SoundNames["relay_close4"] = {"subway_trains/new/relay_7.wav","subway_trains/new/lsd_4.wav"} + self.SoundNames["pneumo_switch"] = { + "subway_trains/pneumo_8.wav", + "subway_trains/pneumo_9.wav", + } + self.SoundNames["rk_spin"] = "subway_trains/rk_3.wav" + self.SoundNames["rk_stop"] = "subway_trains/rk_4.wav" + ]] +end + +function ENT:InitializeSystems() + -- ЭлектроÑиÑтема 81-710 + self:LoadSystem("Electric","81_704_Electric") + + -- Токоприёмник + self:LoadSystem("TR","TR_3B") + -- ЭлектротÑговые двигатели + self:LoadSystem("Engines","DK_117DM") + + -- РезиÑторы Ð´Ð»Ñ Ñ€ÐµÐ¾Ñтата/пуÑковых Ñопротивлений + self:LoadSystem("KF_47A","KF_47A") + -- РезиÑторы Ð´Ð»Ñ Ð¾ÑÐ»Ð°Ð±Ð»ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð±ÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ + self:LoadSystem("KF_50A") + -- Ящик Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñ…Ñ€Ð°Ð½Ð¸Ñ‚ÐµÐ»Ñми + self:LoadSystem("YAP_57") + + -- РезиÑторы Ð´Ð»Ñ Ñ†ÐµÐ¿ÐµÐ¹ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + --self:LoadSystem("YAS_44V") + -- РеоÑтатный контроллер Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑƒÑковыми ÑÐ¾Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð»ÐµÐ½Ð¸Ñ + self:LoadSystem("RheostatController","EKG_17B") + -- Групповой переключатель положений + self:LoadSystem("PositionSwitch","EKG_18B") + -- Кулачковый контроллер + self:LoadSystem("KV","KV_70") + -- Контроллер резервного ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + self:LoadSystem("KRU") + + + -- Ящики Ñ Ñ€ÐµÐ»Ðµ и контакторами + self:LoadSystem("LK_755A") + self:LoadSystem("YAR_13A") + self:LoadSystem("YAR_27") + self:LoadSystem("YAK_36") + self:LoadSystem("YAK_37E") + self:LoadSystem("YAS_44V") + self:LoadSystem("YARD_2") + self:LoadSystem("PR_14X_Panels") + + -- ПневмоÑиÑтема 81-710 + self:LoadSystem("Pneumatic","81_717_Pneumatic") + self.Pneumatic.ValveType = 1 + -- Панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð• + self:LoadSystem("Panel","81_705_Panel") + -- Everything else + self:LoadSystem("Battery") + self:LoadSystem("PowerSupply","DIP_01K") + self:LoadSystem("DURA") + self:LoadSystem("ALS_ARS","BARS_Em") + self:LoadSystem("Horn") + self:LoadSystem("Announcer") + + + self:LoadSystem("UPO") + self:LoadSystem("Autodrive") + self:LoadSystem("KSAUP") + self:LoadSystem("ADoorDisable","Relay") + + --self:LoadSystem("Custom1","Relay","Switch") + --self:LoadSystem("Custom2","Relay","Switch") + --self:LoadSystem("Custom3","Relay","Switch") + --self:LoadSystem("CustomC","Relay","Switch") + --self:LoadSystem("CustomD","Relay","Switch") + --self:LoadSystem("CustomE","Relay","Switch") + --self:LoadSystem("CustomF","Relay","Switch") + --self:LoadSystem("CustomG","Relay","Switch") + + +end diff --git a/lua/entities/_obsolete/gmod_subway_ema508t/cl_init.lua b/lua/entities/_obsolete/gmod_subway_ema508t/cl_init.lua new file mode 100644 index 0000000..7958ec0 --- /dev/null +++ b/lua/entities/_obsolete/gmod_subway_ema508t/cl_init.lua @@ -0,0 +1,353 @@ +include("shared.lua") + + +-------------------------------------------------------------------------------- +ENT.ClientProps = {} +ENT.ButtonMap = {} +ENT.ButtonMap["FrontPneumatic"] = { + pos = Vector(460.0,-45.0,-50.0), + ang = Angle(0,90,90), + width = 900, + height = 100, + scale = 0.1, +} +ENT.ButtonMap["RearPneumatic"] = { + pos = Vector(-483.0,45.0,-50.0), + ang = Angle(0,270,90), + width = 900, + height = 100, + scale = 0.1, +} +ENT.ButtonMap["Test1"] = { + pos = Vector(460.0,-15,46.5), + ang = Angle(0,90,90), + width = 32, + height = 96, + scale = 1, +} +ENT.ButtonMap["AirDistributor"] = { + pos = Vector(-180,70,-50), + ang = Angle(0,180,90), + width = 80, + height = 40, + scale = 0.1, +} + +-- Wagon numbers +ENT.ButtonMap["TrainNumber1"] = { + pos = Vector(30,-67.6,-12), + ang = Angle(0,0,90), + width = 130, + height = 55, + scale = 0.20, +} +ENT.ButtonMap["TrainNumber2"] = { + pos = Vector(30+28,67.7,-12), + ang = Angle(0,180,90), + width = 130, + height = 55, + scale = 0.20, +} + +-------------------------------------------------------------------------------- +ENT.ClientPropsInitialized = false +ENT.ClientProps["train_line"] = { + model = "models/metrostroi/81-717/black_arrow.mdl", + pos = Vector(447.10,-14.4,58), + ang = Angle(90,0,180) +} +ENT.ClientProps["brake_line"] = { + model = "models/metrostroi/81-717/red_arrow.mdl", + pos = Vector(447.00,-14.4,58), + ang = Angle(90,0,180) +} +ENT.ClientProps["brake_cylinder"] = { + model = "models/metrostroi/81-717/black_arrow.mdl", + pos =Vector(447.10,-18.8,57.9), + ang = Angle(90,0,180) +} +-------------------------------------------------------------------------------- +ENT.ClientProps["ampermeter"] = { + model = "models/metrostroi/81-717/black_arrow.mdl", + pos = Vector(447.00,11.0,57.3), + ang = Angle(90,0,180) +} +ENT.ClientProps["voltmeter"] = { + model = "models/metrostroi/81-717/black_arrow.mdl", + pos = Vector(447.00,15.5,57.3), + ang = Angle(90,0,180) +} +ENT.ClientProps["volt1"] = { + model = "models/metrostroi/81-717/black_arrow.mdl", + pos = Vector(447.00,-9.7,58), + ang = Angle(90,0,180) +} +-------------------------------------------------------------------------------- +ENT.ClientProps["battery"] = { + model = "models/metrostroi/81-717/switch01.mdl", + pos = Vector(446.0,0.0,55), + ang = Angle(90,0,180) +} +ENT.ClientProps["gv"] = { + model = "models/metrostroi/81-717/gv.mdl", + pos = Vector(154,62.5+1.5,-65), + ang = Angle(-90,0,-90) +} +ENT.ClientProps["gv_wrench"] = { + model = "models/metrostroi/81-717/reverser.mdl", + pos = Vector(154,62.5+1.5,-65), + ang = Angle(0,0,0) +} +-------------------------------------------------------------------------------- +--[[for x=0,11 do + for y=0,3 do + ENT.ClientProps["a"..(x+12*y)] = { + model = "models/metrostroi/81-717/circuit_breaker.mdl", + pos = Vector(393.8,-52.5+x*2.75,37.5-y*8), + ang = Angle(90,0,0) + } + end +end]]-- +--[[Metrostroi.ClientPropForButton("battery",{ + panel = "Battery", + button = "VBToggle", + model = "models/metrostroi/81-717/switch01.mdl", + z = -10.7, +})]]-- + +-------------------------------------------------------------------------------- +-- Add doors +local function GetDoorPosition(i,k,j) + if j == 0 + then return Vector(351.0 - 34*k - 231*i,-65*(1-2*k),-2.8) + else return Vector(351.0 - 34*(1-k) - 231*i,-65*(1-2*k),-2.8) + end +end +for i=0,3 do + for k=0,1 do + ENT.ClientProps["door"..i.."x"..k.."a"] = { + model = "models/metrostroi/e/em508_door1.mdl", + pos = GetDoorPosition(i,k,0), + ang = Angle(0,180*k,0) + } + ENT.ClientProps["door"..i.."x"..k.."b"] = { + model = "models/metrostroi/e/em508_door2.mdl", + pos = GetDoorPosition(i,k,1), + ang = Angle(0,180*k,0) + } + end +end +ENT.ClientProps["door1"] = { + model = "models/metrostroi/e/em508_door5.mdl", + pos = Vector(455.5,0.5,-5), + ang = Angle(0,0,0) +} +ENT.ClientProps["door2"] = { + model = "models/metrostroi/e/em508_door5.mdl", + pos = Vector(-479.5,.0,-5), + ang = Angle(0,180,0) +} + + +ENT.FrontDoor = 0 +ENT.RearDoor = 0 +ENT.PassengerDoor = 0 +ENT.CabinDoor = 0 +-------------------------------------------------------------------------------- + +function ENT:UpdateTextures() + local texture = Metrostroi.Skins["train"][self:GetNW2String("texture")] + local passtexture = Metrostroi.Skins["pass"][self:GetNW2String("passtexture")] + local cabintexture = Metrostroi.Skins["cab"][self:GetNW2String("cabtexture")] + for _,ent in pairs(self.ClientEnts) do + if not IsValid(ent) then continue end + for k,v in pairs(ent:GetMaterials()) do + local tex = string.Explode("/",v) + tex = tex[#tex] + if cabintexture and cabintexture.textures[tex] then + ent:SetSubMaterial(k-1,cabintexture.textures[tex]) + end + if passtexture and passtexture.textures[tex] then + ent:SetSubMaterial(k-1,passtexture.textures[tex]) + end + if texture and texture.textures[tex] then + ent:SetSubMaterial(k-1,texture.textures[tex]) + end + end + end +end +-------------------------------------------------------------------------------- +function ENT:Think() + self.BaseClass.Think(self) + if self.Texture ~= self:GetNW2String("texture") then + self.Texture = self:GetNW2String("texture") + self:UpdateTextures() + end + if self.PassTexture ~= self:GetNW2String("passtexture") then + self.PassTexture = self:GetNW2String("passtexture") + self:UpdateTextures() + end + if self.CabinTexture ~= self:GetNW2String("cabtexture") then + self.CabinTexture = self:GetNW2String("cabtexture") + self:UpdateTextures() + end + + if self.RearDoor < 90 and self:GetPackedBool(156) or self.RearDoor > 0 and not self:GetPackedBool(156) then + local RearDoorData = self.ClientProps["door2"] + --RearDoor:SetLocalPos(RearDoorData.pos + Vector(-2,-0,0)) + self.RearDoor = math.max(0,math.min(90,self.RearDoor + (self:GetPackedBool(156) and 1 or -1)*self.DeltaTime*180)) + end + if not self.ClientPropsMatrix["door2"] or self.ClientPropsMatrix["door2"]:GetAngles().yaw ~= self.RearDoor then + self:ApplyMatrix("door2",Vector(0,-16,0),Angle(0,self.RearDoor,0)) + end + if self.FrontDoor < 90 and self:GetPackedBool(157) or self.FrontDoor > 0 and not self:GetPackedBool(157) then + local FrontDoorData = self.ClientProps["door1"] + --FrontDoor:SetLocalPos(FrontDoorData.pos + Vector(-2,-0,0)) + self.FrontDoor = math.max(0,math.min(90,self.FrontDoor + (self:GetPackedBool(157) and 1 or -1)*self.DeltaTime*180)) + self:ApplyMatrix("door1",Vector(0,-16,0),Angle(0,self.FrontDoor,0)) + end + if not self.ClientPropsMatrix["door1"] or self.ClientPropsMatrix["door1"]:GetAngles().yaw ~= self.FrontDoor then + self:ApplyMatrix("door1",Vector(0,-16,0),Angle(0,self.FrontDoor,0)) + end + local transient = (self.Transient or 0)*0.05 + if (self.Transient or 0) ~= 0.0 then self.Transient = 0.0 end + + -- Simulate pressure gauges getting stuck a little + --self:Animate("brake", self:GetPackedRatio(0)^0.5, 0.00, 0.65, 256,24) + --self:Animate("controller", self:GetPackedRatio(1), 0.30, 0.70, 384,24) + --self:Animate("reverser", 1-self:GetPackedRatio(2), 0.25, 0.75, 4,false) + self:Animate("volt1", self:GetPackedRatio(10), 0.38,0.64) + --self:ShowHide("reverser", self:GetPackedBool(0)) + + self:Animate("brake_line", self:GetPackedRatio(4), 0.16, 0.84, 256)--,,2,0.01) + self:Animate("train_line", self:GetPackedRatio(5)-transient, 0.16, 0.84, 256)--,,2,0.01) + self:Animate("brake_cylinder", self:GetPackedRatio(6), 0.17, 0.86, 256)--,,2,0.03) + self:Animate("voltmeter", self:GetPackedRatio(7), 0.38, 0.63) + self:Animate("ampermeter", self:GetPackedRatio(8), 0.38, 0.63) + --self:Animate("volt2", 0, 0.38, 0.63) + + self:Animate("battery", self:GetPackedBool(7) and 1 or 0, 0,1, 16, false) + + -- Animate AV switches + for i,v in ipairs(self.Panel.AVMap) do + local value = self:GetPackedBool(64+(i-1)) and 1 or 0 + self:Animate("a"..(i-1),value,0,1,8,false) + end + + -- Main switch + if self.LastValue ~= self:GetPackedBool(5) then + self.ResetTime = CurTime()+2.0 + self.LastValue = self:GetPackedBool(5) + end + self:Animate("gv_wrench", (self:GetPackedBool(5) and 1 or 0), 0,0.51, 128, 1,false) + self:ShowHide("gv_wrench", CurTime() < self.ResetTime) + + -- Animate doors + for i=0,3 do + for k=0,1 do + local n_l = "door"..i.."x"..k.."a" + local n_r = "door"..i.."x"..k.."b" + local animation = self:Animate(n_l,self:GetPackedBool(21+i+4-k*4) and 1 or 0,0,1, 0.8 + (-0.2+0.4*math.random()),0) + local offset_l = Vector(math.abs(31*animation),0,0) + local offset_r = Vector(math.abs(32*animation),0,0) + if self.ClientEnts[n_l] then + self.ClientEnts[n_l]:SetPos(self:LocalToWorld(self.ClientProps[n_l].pos + (1.0 - 2.0*k)*offset_l)) + self.ClientEnts[n_l]:SetSkin(self:GetSkin()) + end + if self.ClientEnts[n_r] then + self.ClientEnts[n_r]:SetPos(self:LocalToWorld(self.ClientProps[n_r].pos - (1.0 - 2.0*k)*offset_r)) + self.ClientEnts[n_r]:SetSkin(self:GetSkin()) + end + end + end + if self.ClientEnts["door1"] then self.ClientEnts["door1"]:SetSkin(self:GetSkin()) end + if self.ClientEnts["door2"] then self.ClientEnts["door2"]:SetSkin(self:GetSkin()) end + + + -- Brake-related sounds + local brakeLinedPdT = self:GetPackedRatio(9) + local dT = self.DeltaTime + self.BrakeLineRamp1 = self.BrakeLineRamp1 or 0 + + if (brakeLinedPdT > -0.001) + then self.BrakeLineRamp1 = self.BrakeLineRamp1 + 4.0*(0-self.BrakeLineRamp1)*dT + else self.BrakeLineRamp1 = self.BrakeLineRamp1 + 4.0*((-0.6*brakeLinedPdT)-self.BrakeLineRamp1)*dT + end + self.BrakeLineRamp1 = math.Clamp(self.BrakeLineRamp1,0,1) + self:SetSoundState("release2_w",self.BrakeLineRamp1^1.65,1.0) + + self.BrakeLineRamp2 = self.BrakeLineRamp2 or 0 + if (brakeLinedPdT < 0.001) + then self.BrakeLineRamp2 = self.BrakeLineRamp2 + 4.0*(0-self.BrakeLineRamp2)*dT + else self.BrakeLineRamp2 = self.BrakeLineRamp2 + 8.0*(0.1*brakeLinedPdT-self.BrakeLineRamp2)*dT + end + self.BrakeLineRamp2 = math.Clamp(self.BrakeLineRamp2,0,1) + self:SetSoundState("release3_w",self.BrakeLineRamp2 + math.max(0,self.BrakeLineRamp1/2-0.15),1.0) + + self:SetSoundState("cran1_w",math.min(1,self:GetPackedRatio(4)/50*(self:GetPackedBool(6) and 1 or 0)),1.0) + + -- Compressor + local state = self:GetPackedBool(20) + self.PreviousCompressorState = self.PreviousCompressorState or false + if self.PreviousCompressorState ~= state then + self.PreviousCompressorState = state + if state then + self:SetSoundState("compressor_ezh",1,1) + else + self:SetSoundState("compressor_ezh",0,1) + self:SetSoundState("compressor_ezh_end",0,1) + self:SetSoundState("compressor_ezh_end",1,1) + --self:PlayOnce("compressor_e_end",nil,1,nil,true) + end + end + + -- RK rotation + if self:GetPackedBool(112) then self.RKTimer = CurTime() end + local 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_spin",0.7,1,nil,0.75) + else + self:SetSoundState("rk_spin",0,0,nil,0.75) + self:SetSoundState("rk_stop",0,1,nil,0.75) + self:SetSoundState("rk_stop",0.7,1,nil,0.75) + end + end + + -- DIP sound + --self:SetSoundState("bpsn1",self:GetPackedBool(52) and 1 or 0,1.0) +end + +function ENT:Draw() + self.BaseClass.Draw(self) +end + +function ENT:DrawPost() + self:DrawOnPanel("FrontPneumatic",function() + draw.DrawText(self:GetNW2Bool("FbI") and "Isolated" or "Open","Trebuchet24",150,30,Color(0,0,0,255)) + draw.DrawText(self:GetNW2Bool("FtI") and "Isolated" or "Open","Trebuchet24",650,30,Color(0,0,0,255)) + draw.DrawText(self:GetPackedBool(160) and "Brake" or "Released","Trebuchet24",950,30,Color(0,0,0,255)) + end) + self:DrawOnPanel("RearPneumatic",function() + draw.DrawText(self:GetNW2Bool("RbI") and "Isolated" or "Open","Trebuchet24",150,30,Color(0,0,0,255)) + draw.DrawText(self:GetNW2Bool("RtI") and "Isolated" or "Open","Trebuchet24",650,30,Color(0,0,0,255)) + end) + 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) + + 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) + -- Draw train numbers + local dc = render.GetLightColor(self:GetPos()) + self:DrawOnPanel("TrainNumber1",function() + draw.DrawText(Format("%04d",self:EntIndex()),"MetrostroiSubway_LargeText3",0,0,Color(255*dc.x,255*dc.y,255*dc.z,255)) + end) + self:DrawOnPanel("TrainNumber2",function() + draw.DrawText(Format("%04d",self:EntIndex()),"MetrostroiSubway_LargeText3",0,0,Color(255*dc.x,255*dc.y,255*dc.z,255)) + end) + --render.DrawLine( self:LocalToWorld(self.ClientProps["door1"].pos - Vector(0,16,0)), self:LocalToWorld(self.ClientProps["door1"].pos + Vector(0,16,0)), Color(0,0,255), false) +end diff --git a/lua/entities/_obsolete/gmod_subway_ema508t/init.lua b/lua/entities/_obsolete/gmod_subway_ema508t/init.lua new file mode 100644 index 0000000..fbb1eb9 --- /dev/null +++ b/lua/entities/_obsolete/gmod_subway_ema508t/init.lua @@ -0,0 +1,347 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +ENT.BogeyDistance = 650 -- Needed for gm trainspawner + +--------------------------------------------------- +-- Defined train information +-- Types of wagon(for wagon limit system): +-- 0 = Head or intherim +-- 1 = Only head +-- 2 = Only intherim +--------------------------------------------------- +ENT.SubwayTrain = { + Type = "E", + Name = "Em508T", + Manufacturer = "MVM", + WagType = 2, +} + +function ENT:Initialize() + + -- Set model and initialize + self:SetModel("models/metrostroi/81/ema508t.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create bogeys + self.FrontBogey = self:CreateBogey(Vector( 325-20,0,-80),Angle(0,180,0),true) + self.RearBogey = self:CreateBogey(Vector(-325-10,0,-80),Angle(0,0,0),false) + local pneumoPow = 0.8+(math.random()^0.4)*0.3 + self.FrontBogey.PneumaticPow = pneumoPow + self.RearBogey.PneumaticPow = pneumoPow + + self.InteractionZones = { + { Pos = Vector(458,-30,-55), + Radius = 16, + ID = "FrontBrakeLineIsolationToggle" }, + { Pos = Vector(458, 30,-55), + Radius = 16, + ID = "FrontTrainLineIsolationToggle" }, + { Pos = Vector(458, 60,-55), + Radius = 16, + ID = "ParkingBrakeToggle" }, + { Pos = Vector(-482,30,-55), + Radius = 16, + ID = "RearBrakeLineIsolationToggle" }, + { Pos = Vector(-482, -30,-55), + Radius = 16, + ID = "RearTrainLineIsolationToggle" }, + { Pos = Vector(154,62.5,-65), + Radius = 16, + ID = "GVToggle" }, + { Pos = Vector(446.0,0.0,50), + Radius = 16, + ID = "VBToggle" }, + { Pos = Vector(-180,68.5,-50), + Radius = 20, + ID = "AirDistributorDisconnectToggle" }, + { Pos = Vector(-482,-38,-1), + Radius = 24, + ID = "RearDoor" }, + { Pos = Vector(458,38,-1), + Radius = 24, + ID = "FrontDoor" }, + } + + -- Lights + self.Lights = { + -- Head + [1] = { "headlight", Vector(465,0,-20), Angle(0,0,0), Color(176,161,132), fov = 100 }, + [2] = { "glow", Vector(460, 51,-23), Angle(0,0,0), Color(255,255,255), brightness = 2 }, + [3] = { "glow", Vector(460,-51,-23), Angle(0,0,0), Color(255,255,255), brightness = 2 }, + [4] = { "glow", Vector(460,-8, 55), Angle(0,0,0), Color(255,255,255), brightness = 0.3 }, + [5] = { "glow", Vector(460,-8, 55), Angle(0,0,0), Color(255,255,255), brightness = 0.3 }, + [6] = { "glow", Vector(460, 2, 55), Angle(0,0,0), Color(255,255,255), brightness = 0.3 }, + [7] = { "glow", Vector(460, 2, 55), Angle(0,0,0), Color(255,255,255), brightness = 0.3 }, + + -- Reverse + [8] = { "light", Vector(458,-45, 55), Angle(0,0,0), Color(255,0,0), brightness = 10, scale = 1.0 }, + [9] = { "light", Vector(458, 45, 55), Angle(0,0,0), Color(255,0,0), brightness = 10, scale = 1.0 }, + + -- Cabin + [10] = { "dynamiclight", Vector( 420, 0, 35), Angle(0,0,0), Color(255,255,255), brightness = 0.1, distance = 550 }, + + -- Interior + [11] = { "dynamiclight", Vector( 250, 0, 5), Angle(0,0,0), Color(255,255,255), brightness = 3, distance = 400 }, + [12] = { "dynamiclight", Vector( 0, 0, 5), Angle(0,0,0), Color(255,255,255), brightness = 3, distance = 400 }, + [13] = { "dynamiclight", Vector(-250, 0, 5), Angle(0,0,0), Color(255,255,255), brightness = 3, distance = 400 }, + + -- Side lights + [14] = { "light", Vector(-50, 68, 51.9), Angle(0,0,0), Color(255,0,0), brightness = 0.9, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + [15] = { "light", Vector(6, 68, 51.9), Angle(0,0,0), Color(150,255,255), brightness = 0.9, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + [16] = { "light", Vector(3, 68, 51.9), Angle(0,0,0), Color(50,255,0), brightness = 0.9, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + [17] = { "light", Vector(-0, 68, 51.9), Angle(0,0,0), Color(255,255,0), brightness = 0.9, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + + [18] = { "light", Vector(-50, -69, 51.9), Angle(0,0,0), Color(255,0,0), brightness = 0.9, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + [19] = { "light", Vector(6, -69, 51.9), Angle(0,0,0), Color(150,255,255), brightness = 0.9, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + [20] = { "light", Vector(3, -69, 51.9), Angle(0,0,0), Color(50,255,0), brightness = 0.9, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + [21] = { "light", Vector(-0, -69, 51.9), Angle(0,0,0), Color(255,255,0), brightness = 0.9, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + + -- Green RP + [22] = { "light", Vector(439.4,12.5-9.6,-5.7), Angle(0,0,0), Color(100,255,0), brightness = 1.0, scale = 0.020 }, + -- AVU + [23] = { "light", Vector(441.2,12.5-20.3,-3.7), Angle(0,0,0), Color(255,40,0), brightness = 1.0, scale = 0.020 }, + -- LKTP + [24] = { "light", Vector(441.2,12.5-23.0,-3.7), Angle(0,0,0), Color(255,40,0), brightness = 1.0, scale = 0.020 }, + } + + for i = 1,23 do + self.Lights[69+i] = { "light", Vector(-470 + 35*i, 0, 65), Angle(180,0,0), Color(255,220,180), brightness = 0.25, scale = 0.75} + --self:SetLightPower(69+i,RealTime()%1*2>1) + end + + -- Cross connections in train wires + self.TrainWireInverts = { + [18] = true, + [34] = true, + } + self.TrainWireCrossConnections = { + [5] = 4, -- Reverser F<->B + [31] = 32, -- Doors L<->R + } + + -- Setup door positions + self.LeftDoorPositions = {} + self.RightDoorPositions = {} + for i=0,3 do + table.insert(self.LeftDoorPositions,Vector(353.0 - 35*0.5 - 231*i,65,-1.8)) + table.insert(self.RightDoorPositions,Vector(353.0 - 35*0.5 - 231*i,-65,-1.8)) + end + self.RearDoor = false + self.FrontDoor = false + self:UpdateTextures() +end + +function ENT:UpdateTextures() + local texture = Metrostroi.Skins["train"][self.Texture] + local passtexture = Metrostroi.Skins["pass"][self.PassTexture] + + for k,v in pairs(self:GetMaterials()) do + self:SetSubMaterial(k-1,"") + end + for k,v in pairs(self:GetMaterials()) do + if v == "models/metrostroi_train/81/int02" then + if not Metrostroi.Skins["717_schemes"] or not Metrostroi.Skins["717_schemes"]["m"] then + self:SetSubMaterial(k-1,Metrostroi.Skins["717_schemes"][""]) + else + if not self.Adverts or self.Adverts ~= 4 then + self:SetSubMaterial(k-1,Metrostroi.Skins["717_schemes"]["m"].adv) + else + self:SetSubMaterial(k-1,Metrostroi.Skins["717_schemes"]["m"].clean) + end + end + end + local tex = string.Explode("/",v) + tex = tex[#tex] + if passtexture and passtexture.textures[tex] then + self:SetSubMaterial(k-1,passtexture.textures[tex]) + end + if texture and texture.textures[tex] then + self:SetSubMaterial(k-1,texture.textures[tex]) + end + + end + self:SetNW2String("texture",self.Texture) + self:SetNW2String("passtexture",self.PassTexture) +end + +-------------------------------------------------------------------------------- +function ENT:Think() + local retVal = self.BaseClass.Think(self) + + self.Electric:TriggerInput("TrainMode",1) + + -- Interior/cabin lights +-- self:SetLightPower(10, (self.Panel["CabinLight"] > 0.5)) + --self:SetLightPower(12, self.PowerSupply.XT3_4 > 65.0) +-- self:SetLightPower(13, self.PowerSupply.XT3_4 > 65.0) + self:SetLightPower(11, self.PowerSupply.XT3_4 > 65.0, 0.8) + self:SetLightPower(12, self.Panel["EmergencyLight"] > 0.5,0.1 + ((self.PowerSupply.XT3_4 > 65.0) and 0.7 or 0)) + self:SetLightPower(13, self.PowerSupply.XT3_4 > 65.0, 0.8) + + local lightsActive2 = self.PowerSupply.XT3_4 > 65.0 + local lightsActive1 = self.Panel["EmergencyLight"] > 0.5 + self:SetLightPower(11, lightsActive2, 0.8) + self:SetLightPower(12, lightsActive1,0.1 + ((self.PowerSupply.XT3_4 > 65.0) and 0.7 or 0)) + self:SetLightPower(13, lightsActive2, 0.8) + for i = 1,23 do + self:SetLightPower(69+i,lightsActive2 and true or lightsActive1 and i%5==1 or false) + end + + -- Side lights + self:SetLightPower(15, self.Panel["TrainDoors"] > 0.5) + self:SetLightPower(19, self.Panel["TrainDoors"] > 0.5) + self:SetLightPower(16, (self.Panel["GreenRP"] or 0) > 0.5) + self:SetLightPower(20, (self.Panel["GreenRP"] or 0) > 0.5) + self:SetLightPower(17, self.Panel["TrainBrakes"] > 0.5) + self:SetLightPower(21, self.Panel["TrainBrakes"] > 0.5) + + -- Switch and button states + self:SetPackedBool(0,self:IsWrenchPresent()) + self:SetPackedBool(5,self.GV.Value == 1.0) + self:SetPackedBool(7,self.VB.Value == 1.0) + self:SetPackedBool(20,self.Pneumatic.Compressor == 1.0) + self:SetPackedBool(21,self.Pneumatic.LeftDoorState[1] > 0.5) + self:SetPackedBool(22,self.Pneumatic.LeftDoorState[2] > 0.5) + self:SetPackedBool(23,self.Pneumatic.LeftDoorState[3] > 0.5) + self:SetPackedBool(24,self.Pneumatic.LeftDoorState[4] > 0.5) + self:SetPackedBool(25,self.Pneumatic.RightDoorState[1] > 0.5) + self:SetPackedBool(26,self.Pneumatic.RightDoorState[2] > 0.5) + self:SetPackedBool(27,self.Pneumatic.RightDoorState[3] > 0.5) + self:SetPackedBool(28,self.Pneumatic.RightDoorState[4] > 0.5) + self:SetPackedBool(112,(self.RheostatController.Velocity ~= 0.0)) + self:SetPackedBool(156,self.RearDoor) + self:SetPackedBool(157,self.FrontDoor) + + self:SetPackedBool(160,self.ParkingBrake) + + -- Signal if doors are open or no to platform simulation + self.LeftDoorsOpen = + (self.Pneumatic.LeftDoorState[1] > 0.5) or + (self.Pneumatic.LeftDoorState[2] > 0.5) or + (self.Pneumatic.LeftDoorState[3] > 0.5) or + (self.Pneumatic.LeftDoorState[4] > 0.5) + self.RightDoorsOpen = + (self.Pneumatic.RightDoorState[1] > 0.5) or + (self.Pneumatic.RightDoorState[2] > 0.5) or + (self.Pneumatic.RightDoorState[3] > 0.5) or + (self.Pneumatic.RightDoorState[4] > 0.5) + + -- BPSN + self:SetPackedBool(52,self.PowerSupply.XT3_1 > 0) + + -- AV states + for i,v in ipairs(self.Panel.AVMap) do + if tonumber(v) then + if self["A"..v].Value < 1 then + self["A"..v]:TriggerInput("Set",1) + end + self:SetPackedBool(64+(i-1),self["A"..v].Value == 1.0) + elseif self[v] then + if self[v].Value < 1 then + self[v]:TriggerInput("Set",1) + end + self:SetPackedBool(64+(i-1),self[v].Value == 1.0) + end + end + + -- Feed packed floats + self:SetPackedRatio(0, 1-self.Pneumatic.DriverValvePosition/5) + --self:SetPackedRatio(1, (self.KV.ControllerPosition+3)/7) + --self:SetPackedRatio(2, 1-(self.KV.ReverserPosition+1)/2) + self:SetPackedRatio(4, self.Pneumatic.ReservoirPressure/16.0) + self:SetPackedRatio(5, self.Pneumatic.TrainLinePressure/16.0) + self:SetPackedRatio(6, self.Pneumatic.BrakeCylinderPressure/6.0) + self:SetPackedRatio(7, self.Electric.Power750V/1000.0) + self:SetPackedRatio(8, math.abs(self.Electric.I24)/1000.0) + --self:SetPackedRatio(9, self.Pneumatic.BrakeLinePressure_dPdT or 0) + if self.Pneumatic.TrainLineOpen then + self:SetPackedRatio(9, (-self.Pneumatic.TrainLinePressure_dPdT or 0)*6) + else + self:SetPackedRatio(9, self.Pneumatic.BrakeLinePressure_dPdT or 0) + end + --self:SetPackedRatio(10,(self.Panel["V1"] * self.Battery.Voltage) / 100.0) + + -- 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 = 30300+25000*(A < 0 and 1 or 0) + self.FrontBogey.Reversed = (self.RKR.Value > 0.5) + self.RearBogey.MotorForce = 30300+25000*(A < 0 and 1 or 0) + self.RearBogey.Reversed = (self.RKR.Value < 0.5) + + -- These corrections are required to beat source engine friction at very low values of motor power + local A = 2*self.Engines.BogeyMoment + 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 + self.FrontBogey.PneumaticBrakeForce = 50000.0 + self.FrontBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + self.FrontBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + self.FrontBogey.ParkingBrake = self.ParkingBrake.Value > 0.5 + self.RearBogey.PneumaticBrakeForce = 50000.0 + self.RearBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + self.RearBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + --self.RearBogey.ParkingBrake = self.ParkingBrake.Value > 0.5 + end + + return retVal +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 +function ENT:OnButtonPress(button,ply) + if button == "AirDistributorDisconnectToggle" then return end + if button == "VBToggle" then + if self.VB.Value == 1 then + self:PlayOnce("vu22_on",nil) + else + self:PlayOnce("vu22_off",nil) + end + return + end + if button == "GVToggle" then + if self.GV.Value > 0.5 then + self:PlayOnce("revers_f",nil,0.7) + else + self:PlayOnce("revers_b",nil,0.7) + end + return + end + + -- Generic button or switch sound + if string.find(button,"Set") then + self:PlayOnce("switch") + end + if string.find(button,"Toggle") then + self:PlayOnce("switch2") + end + if button == "FrontDoor" then + self.FrontDoor = not self.FrontDoor + if self.FrontDoor then self:PlayOnce("door_open_tor") else self:PlayOnce("door_close_tor") end + end + if button == "RearDoor" then + self.RearDoor = not self.RearDoor + if self.RearDoor then self:PlayOnce("door_open_tor") else self:PlayOnce("door_close_tor") end + end +end diff --git a/lua/entities/_obsolete/gmod_subway_ema508t/shared.lua b/lua/entities/_obsolete/gmod_subway_ema508t/shared.lua new file mode 100644 index 0000000..60a547e --- /dev/null +++ b/lua/entities/_obsolete/gmod_subway_ema508t/shared.lua @@ -0,0 +1,82 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.PrintNameTranslated = "Entities.Em508T" +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" + +ENT.Spawnable = false --NOT FINISHED +ENT.AdminSpawnable = false --NOT FINISHED + +function ENT:PassengerCapacity() + return 300 +end + +function ENT:GetStandingArea() + return Vector(-450,-30,-45),Vector(380,30,-45) +end + +function ENT:InitializeSounds() + self.BaseClass.InitializeSounds(self) + self.SoundNames["rvt_close"] = "subway_trains/sbor.wav" + self.SoundNames["r1_5_close"] = "subway_trains/sbor_hod.wav" + self.SoundNames["rvt_open"] = "subway_trains/rasbor_t.wav" + self.SoundNames["r1_5_open"] = "subway_trains/razbor_hod.wav" + self.SoundNames["rk_spin"] = "subway_trains/rk_3.wav" + self.SoundNames["rk_stop"] = "subway_trains/rk_4.wav" + self.SoundNames["switch_off"] = {"subway_trains/tumbler_1_off.wav","subway_trains/tumbler_2_off.wav","subway_trains/tumbler_3_off.wav"} + self.SoundNames["switch_on"] = {"subway_trains/tumbler_1_on.wav","subway_trains/tumbler_2_on.wav","subway_trains/tumbler_3_on.wav"} + self.SoundNames["av_on"] = { + "subway_trains/va21_2_1_on.wav", + "subway_trains/va21_2_2_on.wav", + } + self.SoundNames["av_off"] = { + "subway_trains/va21_2_1_off.wav", + "subway_trains/va21_2_2_off.wav", + } +end + +function ENT:InitializeSystems() + -- ЭлектроÑиÑтема 81-710 + self:LoadSystem("Electric","81_705_Electric") + + -- Токоприёмник + self:LoadSystem("TR","TR_3B") + -- ЭлектротÑговые двигатели + self:LoadSystem("Engines","DK_117DM") + + -- РезиÑторы Ð´Ð»Ñ Ñ€ÐµÐ¾Ñтата/пуÑковых Ñопротивлений + self:LoadSystem("KF_47A") + -- РезиÑторы Ð´Ð»Ñ Ð¾ÑÐ»Ð°Ð±Ð»ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð±ÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ + self:LoadSystem("KF_50A") + -- Ящик Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñ…Ñ€Ð°Ð½Ð¸Ñ‚ÐµÐ»Ñми + self:LoadSystem("YAP_57") + -- Пульт маневрнового Ð¿ÐµÑ€ÐµÐ´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ + self:LoadSystem("PMP","PMP") + + -- РеоÑтатный контроллер Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑƒÑковыми ÑÐ¾Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð»ÐµÐ½Ð¸Ñ + self:LoadSystem("RheostatController","EKG_17B") + -- Групповой переключатель положений + self:LoadSystem("PositionSwitch","EKG_18B") + + -- Ящики Ñ Ñ€ÐµÐ»Ðµ и контакторами + self:LoadSystem("LK_755A") + self:LoadSystem("YAR_13A") + self:LoadSystem("YAR_27") + self:LoadSystem("YAK_36") + self:LoadSystem("YAK_37E") + self:LoadSystem("YAS_44V") + self:LoadSystem("YARD_2") + + -- Панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ 81-710 + self:LoadSystem("Panel","81_710_Panel") + -- ПневмоÑиÑтема 81-710 + self:LoadSystem("Pneumatic","81_717_Pneumatic") + -- Everything else + self:LoadSystem("Battery") + self:LoadSystem("PowerSupply","DIP_01K") + self:LoadSystem("Announcer") +end diff --git a/lua/entities/_obsolete/gmod_subway_ezh3ru1/cl_init.lua b/lua/entities/_obsolete/gmod_subway_ezh3ru1/cl_init.lua new file mode 100644 index 0000000..e74acfe --- /dev/null +++ b/lua/entities/_obsolete/gmod_subway_ezh3ru1/cl_init.lua @@ -0,0 +1,1610 @@ +include("shared.lua") + + +-------------------------------------------------------------------------------- +ENT.ClientProps = {} +ENT.ButtonMap = {} + + +-- Main panel +ENT.ButtonMap["Main"] = { + pos = Vector(445.5,-35.3,-1.0), + ang = Angle(0,-97.5,20), + width = 410, + height = 145, + scale = 0.0625, + + buttons = { + {ID = "DIPonSet", x=22, y=19, radius=20, tooltip="Включение ДИП и оÑвещениÑ\nTurn DIP and interior lights on"}, + {ID = "DIPoffSet", x=66, y=19, radius=20, tooltip="Выключение ДИП и оÑвещениÑ\nTurn DIP and interior lights off"}, + {ID = "VozvratRPSet", x=192, y=78, radius=20, tooltip="Возврат реле перегрузки\nReset overload relay"}, + {ID = "VMKToggle", x=22, y=73, radius=20, tooltip="Включение мотор-компреÑÑора\nTurn motor-compressor on"}, + + {ID = "RezMKSet", x=66, y=80, radius=20, tooltip="Резервное включение мотор-компреÑÑора\nEmergency motor-compressor startup"}, + {ID = "VAHToggle", x=187, y=19, radius=20, tooltip="Ð’ÐÐ¥: Включение аварийного хода (неиÑправноÑть реле педали безопаÑноÑти)\nVAH: Emergency driving mode (failure of RPB relay)"}, + {ID = "VADToggle", x=226, y=19, radius=20, tooltip="Ð’ÐД: Включение аварийного Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ (неиÑправноÑть реле ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð²ÐµÑ€ÐµÐ¹)\nVAD: Emergency door close override (failure of KD relay)"}, + + {ID = "ARSToggle", x=187+77, y=19, radius=20, tooltip="ÐРС: Включение ÑиÑтемы автоматичеÑкого Ñ€ÐµÐ³ÑƒÐ»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑкороÑти\nARS: Automatic speed regulation"}, + {ID = "ALSToggle", x=226+77, y=19, radius=20, tooltip="ÐЛС: Включение ÑиÑтемы автоматичеÑкой локомотивной Ñигнализации\nALS: Automatic locomotive signalling"}, + + {ID = "OtklAVUToggle", x=349, y=19, radius=20, tooltip="Отключение автоматичеÑкого Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (неиÑправноÑть реле ÐВУ)\nTurn off automatic control disable relay (failure of AVU relay)"}, + {ID = "KRZDSet", x=393, y=19, radius=20, tooltip="КРЗД: Кнопка резервного Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹\nKRZD: Emergency door closing"}, + {ID = "VUD1Toggle", x=393, y=73, radius=20, tooltip="ВУД1: Выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÑŒÐ¼Ð¸\nVUD1: Door control toggle (close doors)"}, + + {ID = "DoorSelectToggle",x=321, y=75, radius=20, tooltip="Выбор Ñтороны Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹\nSelect side on which doors will open"}, + {ID = "KDLSet", x=291, y=122, radius=20, tooltip="КДЛ: Кнопка левых дверей\nKDL: Left doors open"}, + {ID = "KDPSet", x=349, y=122, radius=20, tooltip="КДП: Кнопка правых дверей\nKDP: Right doors open"}, + + {ID = "KVTSet", x=240, y=122, radius=20, tooltip=""}, + {ID = "KSNSet", x=240, y=78, radius=20, tooltip="КСÐ: Кнопка Ñигнализации неиÑправноÑти\nKSN: Failure indication button"}, + {ID = "KRPSet", x=192, y=122, radius=20, tooltip="КРП: Кнопка резервного пуÑка"}, + + {ID = "R_Program1Set", x=112, y=127, radius=20, tooltip="Программа 1\nProgram 1"}, + {ID = "R_Program2Set", x=149, y=127, radius=20, tooltip="Программа 2\nProgram 2"}, + + {ID = "R_GToggle", x=112, y=30, radius=20, tooltip="УÐЧ: УÑилитель низких чаÑтот\nUNCh: Low frequency amplifier (Sound in cabin enable)"}, + {ID = "R_ZSToggle", x=149, y=30, radius=20, tooltip="ЭС: Контроль ÑкÑтренной ÑвÑзи\nES: Emergency communication control"}, + {ID = "R_RadioToggle", x=112, y=80, radius=20, tooltip="Радиоинформатор (вÑтроеный)\nRadioinformator: Announcer (built-in)"}, + {ID = "R_VPRToggle", x=149, y=80, radius=20, tooltip="ВПР: Включение поездной радиоÑвÑзи\nVPR: Radiostation enable "}, + + } +} + +-- Front panel +ENT.ButtonMap["Front"] = { + pos = Vector(447.6,-35.3,5.0), + ang = Angle(0,-97.4,74), + width = 410, + height = 95, + scale = 0.0625, + + buttons = { + {ID = "VUSToggle",x=400, y=75, radius=15, tooltip="ВУС: Выключатель уÑиленого Ñвета ходовых фар\nVUS: Head lights bright/dim"}, + {ID = "L_3Toggle",x=388, y=28, radius=15, tooltip="ОÑвещение пульта\nPanel lighting"}, + {x=25, y=30, w=57, h=40, tooltip="ÐапрÑжение цепей управлениÑ\nControl circuits voltage"}, + } +} + +-- ARS/Speedometer panel +ENT.ButtonMap["ARS"] = { + pos = Vector(449.1,-37.3,4.9), + ang = Angle(0,-97.9,69), + width = 410*10, + height = 95*10, + scale = 0.0625/10, + + buttons = { + {x=2045,y=406,tooltip="Индикатор ÑкороÑти\nSpeed indicator",radius=130}, + {x=2610,y=363,tooltip="РП: КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки\nRP: Red overload relay light (power circuits failed to assemble)",radius=120}, + {x=2982,y=363,tooltip="РП: КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки\nRP: Red overload relay light (power circuits failed to assemble)",radius=120}, + {x=1070+320*0,y=780,tooltip="ЛхРК: Лампа хода реоÑтатного контроллера\nLhRK: Rheostat controller motion light",radius=120}, + {x=1070+320*1,y=780,tooltip="КТ: Контроль тормоза\nKT: ARS braking indicator",radius=120}, + {x=1070+320*2,y=780,tooltip="КВД: Контроль Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹\nKVD: ARS engine shutdown indicator",radius=120}, + {x=1070+320*3,y=780,tooltip="ÐР1: Ðулевое реле\nNR1: Zero relay state (high voltage enabled)",radius=120}, + {x=1070+320*4,y=780,tooltip="ВПР: Контроль Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ÐµÐ·Ð´Ð½Ð¾Ð¹ радиоÑвÑзи\nVPR: Train radio equipment enabled",radius=120}, + {x=1070+320*5,y=780,tooltip="ПЕЧЬ: Индикатор работы печи\nPECH: Cabin heating indicator",radius=120}, + {x=1070+320*6,y=780,tooltip="ÐВУ: ÐвтоматичеÑкий выключатель управлениÑ\nAVU: Automatic control disabler active",radius=120}, + + {x=1070+380*0,y=570,tooltip="ОЧ: ОтÑутÑтвие чаÑтоты ÐРС\nOCh: No ARS frequency",radius=120}, + {x=1070+380*1,y=570,tooltip="0: Сигнал ÐРС оÑтановки\n0: ARS stop signal",radius=120}, + {x=1070+380*2,y=570,tooltip="40: Ограничение ÑкороÑти 40 км/ч\nSpeed limit 40 kph",radius=120}, + {x=1070+380*3,y=570,tooltip="60: Ограничение ÑкороÑти 60 км/ч\nSpeed limit 60 kph",radius=120}, + {x=1070+380*4,y=570,tooltip="70: Ограничение ÑкороÑти 70 км/ч\nSpeed limit 70 kph",radius=120}, + {x=1070+380*5,y=570,tooltip="80: Ограничение ÑкороÑти 80 км/ч\nSpeed limit 80 kph",radius=120}, + + {x=1080+380*0,y=363,tooltip="СД: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹\nSD: Door state light (doors are closed/door circuits are OK)",radius=120}, + {x=1080+380*1,y=363,tooltip="РП: Ð—ÐµÐ»Ñ‘Ð½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки\nRP: Green overload relay light (overload relay open on current train)",radius=120}, + } +} + +-- ARS/Speedometer panel +ENT.ButtonMap["Autodrive"] = { + pos = Vector(440.1,-37.3,4.9), + ang = Angle(0,-97.9,69), + width = 410*10, + height = 95*10, + scale = 0.0625/10, + + buttons = { + {x=1080+380*1,y=363,tooltip="РП: Ð—ÐµÐ»Ñ‘Ð½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки\nRP: Green overload relay light (overload relay open on current train)",radius=120}, + } +} + +-- AV panel +ENT.ButtonMap["AV"] = { + pos = Vector(394.0,-53.5,44.5), + ang = Angle(0,90,90), + width = 520, + height = 550, + scale = 0.0625, + + buttons = { + {ID = "A61Toggle", x=16+44*0, y=110+129*0, radius=30, tooltip="A61 Управление 6ым поездным проводом\nTrain wire 6 control"}, + {ID = "A55Toggle", x=16+44*1, y=110+129*0, radius=30, tooltip="A55 Управление проводом 10ÐС\nTrain wire 10AS control"}, + {ID = "A54Toggle", x=16+44*2, y=110+129*0, radius=30, tooltip="A54 Управление проводом 10ÐК\nTrain wire 10AK control"}, + {ID = "A56Toggle", x=16+44*3, y=110+129*0, radius=30, tooltip="A56 Включение аккумулÑторной батареи\nTurn on battery power to control circuits"}, + {ID = "A27Toggle", x=16+44*4, y=110+129*0, radius=30, tooltip="A27 Turn on DIP and lighting"}, + {ID = "A21Toggle", x=16+44*5, y=110+129*0, radius=30, tooltip="A21 Door control"}, + {ID = "A10Toggle", x=16+44*6, y=110+129*0, radius=30, tooltip="A10 Motor-compressor control"}, + {ID = "A53Toggle", x=16+44*7, y=110+129*0, radius=30, tooltip="A53 KVC power supply"}, + {ID = "A43Toggle", x=16+44*8, y=110+129*0, radius=30, tooltip="A43 ARS 12V power supply"}, + {ID = "A45Toggle", x=16+44*9, y=110+129*0, radius=30, tooltip="A45 ARS train wire 10AU"}, + {ID = "A42Toggle", x=16+44*10, y=110+129*0, radius=30, tooltip="A42 ARS 75V power supply"}, + {ID = "A41Toggle", x=16+44*11, y=110+129*0, radius=30, tooltip="A41 ARS braking"}, + ------------------------------------------------------------------------ + {ID = "VUToggle", x=16+44*0, y=110+129*1, radius=30, tooltip="VU Train control"}, + {ID = "A64Toggle", x=16+44*1, y=110+129*1, radius=30, tooltip="A64 Cabin lighting"}, + {ID = "A63Toggle", x=16+44*2, y=110+129*1, radius=30, tooltip="A63 IGLA/BIS"}, + {ID = "A50Toggle", x=16+44*3, y=110+129*1, radius=30, tooltip="A50 Turn on DIP and lighting"}, + {ID = "A51Toggle", x=16+44*4, y=110+129*1, radius=30, tooltip="A51 Turn off DIP and lighting"}, + {ID = "A23Toggle", x=16+44*5, y=110+129*1, radius=30, tooltip="A23 Emergency motor-compressor turn on"}, + {ID = "A14Toggle", x=16+44*6, y=110+129*1, radius=30, tooltip="A14 Train wire 18"}, + {ID = "A75Toggle", x=16+44*7, y=110+129*1, radius=30, tooltip="A75 Cabin heating"}, + {ID = "A1Toggle", x=16+44*8, y=110+129*1, radius=30, tooltip="A1 XOD-1"}, + {ID = "A2Toggle", x=16+44*9, y=110+129*1, radius=30, tooltip="A2 XOD-2"}, + {ID = "A3Toggle", x=16+44*10, y=110+129*1, radius=30, tooltip="A3 XOD-3"}, + {ID = "A17Toggle", x=16+44*11, y=110+129*1, radius=30, tooltip="A17 Reset overload relay"}, + ------------------------------------------------------------------------ + {ID = "A62Toggle", x=16+44*0, y=110+129*2, radius=30, tooltip="A62 Radio communications"}, + {ID = "A29Toggle", x=16+44*1, y=110+129*2, radius=30, tooltip="A29 Radio broadcasting"}, + {ID = "A5Toggle", x=16+44*2, y=110+129*2, radius=30, tooltip="A5 "}, + {ID = "A6Toggle", x=16+44*3, y=110+129*2, radius=30, tooltip="A6 T-1"}, + {ID = "A8Toggle", x=16+44*4, y=110+129*2, radius=30, tooltip="A8 Pneumatic valves #1, #2"}, + {ID = "A20Toggle", x=16+44*5, y=110+129*2, radius=30, tooltip="A20 Drive/brake circuit control, train wire 20"}, + {ID = "A25Toggle", x=16+44*6, y=110+129*2, radius=30, tooltip="A25 Manual electric braking"}, + {ID = "A22Toggle", x=16+44*7, y=110+129*2, radius=30, tooltip="A22 Turn on KK"}, + {ID = "A30Toggle", x=16+44*8, y=110+129*2, radius=30, tooltip="A30 Rheostat controller motor power"}, + {ID = "A39Toggle", x=16+44*9, y=110+129*2, radius=30, tooltip="A39 Emergency control"}, + {ID = "A44Toggle", x=16+44*10, y=110+129*2, radius=30, tooltip="A44 Emergency train control"}, + {ID = "A80Toggle", x=16+44*11, y=110+129*2, radius=30, tooltip="A80 Power circuit mode switch motor power"}, + ------------------------------------------------------------------------ + {ID = "A65Toggle", x=16+44*0, y=110+129*3, radius=30, tooltip="A65 Interior lighting"}, + --{ID = "A00Toggle", x=16+44*1, y=110+129*3, radius=30, tooltip="A00"}, + {ID = "A24Toggle", x=16+44*2, y=110+129*3, radius=30, tooltip="A24 Battery charging"}, + {ID = "A32Toggle", x=16+44*3, y=110+129*3, radius=30, tooltip="A32 Open right doors"}, + {ID = "A31Toggle", x=16+44*4, y=110+129*3, radius=30, tooltip="A31 Open left doors"}, + {ID = "A16Toggle", x=16+44*5, y=110+129*3, radius=30, tooltip="A16 Close doors"}, + {ID = "A13Toggle", x=16+44*6, y=110+129*3, radius=30, tooltip="A13 Door alarm"}, + {ID = "A12Toggle", x=16+44*7, y=110+129*3, radius=30, tooltip="A12 Emergency door close"}, + {ID = "A7Toggle", x=16+44*8, y=110+129*3, radius=30, tooltip="A7 Red lamp"}, + {ID = "A9Toggle", x=16+44*9, y=110+129*3, radius=30, tooltip="A9 Red lamp"}, + {ID = "A46Toggle", x=16+44*10, y=110+129*3, radius=30, tooltip="A46 White lamp"}, + {ID = "A47Toggle", x=16+44*11, y=110+129*3, radius=30, tooltip="A47 White lamp"}, + } +} +-- AV panel +ENT.ButtonMap["BPS"] = { + pos = Vector(392.0,-53.5,44.5), + ang = Angle(0,90,90), + width = 520, + height = 630, + scale = 0.0625, + + buttons = { + {ID = "BPSToggle", x=16+51*9, y=110+129*3+100, radius=30, tooltip="РЦ-БПС: Блок ПротивоСкатываниÑ\nRC-BPS: Against Rolling System"}, + } +} +-- Battery panel +ENT.ButtonMap["Battery"] = { + pos = Vector(394.5,29.5-5,28.0+5-5), + ang = Angle(0,90,90), + width = 200+0, + height = 90+0/0.0625, + scale = 0.0625, + + buttons = { + {ID = "VBToggle", x=0, y=0, w=200+0/0.0625, h=90+0/0.0625, tooltip="ВБ: Выключатель батареи\nVB: Battery on/off"}, + } +} +-- Battery panel +ENT.ButtonMap["RC1"] = { + pos = Vector(392.5,19.0,29), + ang = Angle(0,90,90), + width = 80, + height = 130, + scale = 0.0625, + + buttons = { + {ID = "RC1Toggle", x=40, y=30, radius=35, tooltip="РЦ-1: Разъединитель цепей ÐРС\nRC-1: ARS circuits disconnect"}, + {ID = "UOSToggle", x=40, y=100, radius=35, tooltip="РЦ-УОС: УÑтройÑтво Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ ÑкороÑти\nRC-UOS: Speed Limitation Device"}, + } +} + +-- Parking brake panel +ENT.ButtonMap["ParkingBrake"] = { + pos = Vector(447,41.0+12.5,2.0), + ang = Angle(0,-84,90), + width = 400, + height = 400, + scale = 0.0625, + + buttons = { + {ID = "ParkingBrakeLeft",x=0, y=0, w=200, h=400, tooltip=""}, + {ID = "ParkingBrakeRight",x=200, y=0, w=200, h=400, tooltip=""}, + } +} + +-- Train driver helpers panel +ENT.ButtonMap["HelperPanel"] = { + pos = Vector(444.7,62,30.4), + ang = Angle(0,-50,90), + width = 64, + height = 144, + scale = 0.0625, + + buttons = { + {ID = "VUD2Toggle", x=32, y=42, radius=32, tooltip="ВУД2: Выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÑŒÐ¼Ð¸\nVUD2: Door control toggle (close doors)"}, + {ID = "VDLSet", x=32, y=108, radius=32, tooltip="ВДЛ: Выключатель левых дверей\nVDL: Left doors open"}, + } +} + +-- Help panel +ENT.ButtonMap["Help"] = { + pos = Vector(445.0,-36.0,30.0), + ang = Angle(40+180,0,0), + width = 20, + height = 20, + scale = 1, + + buttons = { + {ID = "ShowHelp", x=10, y=10, radius=15, tooltip="Помощь в вождении поезда\nShow help on driving the train"}, + } +} + +-- Pneumatic instrument panel +ENT.ButtonMap["PneumaticPanels"] = { + pos = Vector(448,-30,16.0), + ang = Angle(0,-77,90), + width = 140, + height = 160, + scale = 0.0625, + + buttons = { + {x=60,y=45,radius=30,tooltip="Давление в тормозных цилиндрах (ТЦ)\nBrake cylinder pressure"}, + {x=80,y=105,radius=30,tooltip="Давление в магиÑтралÑÑ… (краÑнаÑ: тормозной, чёрнаÑ: напорной)\nPressure in pneumatic lines (red: brake line, black: train line)"}, + } +} +ENT.ButtonMap["DriverValveDisconnect"] = { + pos = Vector(420,-57.0,-25), + ang = Angle(0,0,0), + width = 200, + height = 90, + scale = 0.0625, + + buttons = { + {ID = "DriverValveDisconnectToggle", x=0, y=0, w=200, h=90, tooltip="Клапан разобщениÑ\nDriver valve disconnect valve"}, + } +} +ENT.ButtonMap["EPKDisconnect"] = { + pos = Vector(420.0+10.5,-58.5,-25), + ang = Angle(0,0,-90), + width = 200, + height = 120, + scale = 0.0625, + + buttons = { + {ID = "EPKToggle", x=0, y=0, w=200, h=120, tooltip="Кран ЭПВ\nEPK disconnect valve"}, + } +} +ENT.ButtonMap["DURA"] = { + pos = Vector(408+15,-58.0-5.3,-6.65), + ang = Angle(0,180,0), + width = 240, + height = 80, + scale = 0.0625, + + buttons = { + {ID = "DURASelectMain", x=145, y=43, radius=20, tooltip="DURA ОÑновной путь\nDURA Select Main"}, -- NEEDS TRANSLATING + {ID = "DURASelectAlternate", x=180, y=43, radius=20, tooltip="DURA Ðльтернативный путь\nDURA Select Alternate"}, -- NEEDS TRANSLATING + {ID = "DURAToggleChannel", x=100, y=60, radius=20, tooltip="DURA Выбор канала\nDURA Toggle Channel"}, -- NEEDS TRANSLATING + {ID = "DURAPowerToggle", x=100, y=30, radius=20, tooltip="DURA Питание\nDURA Power"}, -- NEEDS TRANSLATING + + } +} +ENT.ButtonMap["DURADisplay"] = { + pos = Vector(408+15-0.75,-58.0-5.3+1.5625,-6.65), + ang = Angle(0,180,0), + width = 240, + height = 80, + scale = 0.0625/3.2, +} + +ENT.ButtonMap["Announcer"] = { + pos = Vector(449.3,-53,17.4), + ang = Angle(0,-127,90), + width = 170, + height = 100, + scale = 0.0625, + + buttons = { + + {ID = "Custom2Set", x=155, y=15, radius=15, tooltip="+"}, + {ID = "Custom1Set", x=155, y=42, radius=15, tooltip="-"}, + {ID = "Custom3Set", x=85, y=72, radius=20, tooltip="Меню\nMenu"}, + {ID = "CustomCToggle", x=20, y=28, radius=20, tooltip="Ðвтоинформатор\nAutoannouncer"}, + + {ID = "CustomD", x=95+20*-3, y=72, radius=10, tooltip="Информатор: КонечнаÑ\nAnnouncer: Last statuon"}, + {ID = "CustomE", x=95+20*-2, y=72, radius=10, tooltip="Информатор: Платформа Ñправа\nAnnouncer: Right side"}, + {ID = "CustomF", x=95+20*1, y=72, radius=10, tooltip="Информатор: Ðеобходима наÑтройка\nAnnouncer: Need setup"}, + {ID = "CustomG", x=95+20*2, y=72, radius=10, tooltip="Информатор: Проигрывание объÑвлениÑ\nAnnouncer: Playing announce"}, + } +} +-- Announcer panel +ENT.ButtonMap["AnnouncerDisplay"] = { + pos = Vector(449.3,-53,17.4), + ang = Angle(0,-127,90), + width = 10, + height = 10, + scale = 0.012, +} +ENT.ButtonMap["IGLA"] = { + pos = Vector(404.6,-59.985,27.9), + ang = Angle(-0.5,180,90), + width = 440, + height = 100, + scale = 0.014, +} +ENT.ButtonMap["Meters"] = { + pos = Vector(449.3,-53,27.5), + ang = Angle(0,-125,90), + width = 170, + height = 110, + scale = 0.0625, + + buttons = { + {x=22, y=24, w=55, h=45, tooltip="Вольтметр выÑокого напрÑÐ¶ÐµÐ½Ð¸Ñ (кВ)\nHV voltmeter (kV)"}, + {x=90, y=24, w=58, h=45, tooltip="Ðмперметр (Ð)\nTotal ampermeter (A)"}, + } +} + + +--These values should be identical to those drawing the schedule +local col1w = 80 -- 1st Column width +local col2w = 32 -- The other column widths +local rowtall = 30 -- Row height, includes -only- the usable space and not any lines + +local rowamount = 20 -- How many rows to show (total) +ENT.ButtonMap["Schedule"] = { + pos = Vector(452.9,-19.7,41), + ang = Angle(0,-70,90), + width = (col1w + 2 + (1 + col2w) * 3), + height = (rowtall+1)*rowamount+1, + scale = 0.0625/2, + + buttons = { + {x=1, y=1, w=col1w, h=rowtall, tooltip="М â„–\nRoute number"}, + {x=1, y=rowtall*2+3, w=col1w, h=rowtall, tooltip="П â„–\nPath number"}, + + {x=col1w+2, y=1, w=col2w*3+2, h=rowtall, tooltip="ВРЕМЯ ХОДÐ\nTotal schedule time"}, + {x=col1w+2, y=rowtall+2, w=col2w*3+2, h=rowtall, tooltip="ИÐТ\nTrain interval"}, + + {x=col1w+2, y=rowtall*2+3, w=col2w, h=rowtall, tooltip="ЧÐС\nHour"}, + {x=col1w+col2w+3, y=rowtall*2+3, w=col2w, h=rowtall, tooltip="МИÐ\nMinute"}, + {x=col1w+col2w*2+4, y=rowtall*2+3, w=col2w, h=rowtall, tooltip="СЕК\nSecond"}, + {x=col1w+2, y=rowtall*3+4, w=col2w*3+2, h=(rowtall+1)*(rowamount-3)-1, tooltip="Arrival times"}, -- NEEDS TRANSLATING + + {x=1, y=rowtall*3+4, w=col1w, h=(rowtall+1)*(rowamount-3)-1, tooltip="Station name"}, -- NEEDS TRANSLATING + } +} + +-- Temporary panels (possibly temporary) +ENT.ButtonMap["FrontPneumatic"] = { + pos = Vector(459.0,-45.0,-50.0), + ang = Angle(0,90,90), + width = 900, + height = 100, + scale = 0.1, +} +ENT.ButtonMap["RearPneumatic"] = { + pos = Vector(-481.0,45.0,-50.0), + ang = Angle(0,270,90), + width = 900, + height = 100, + scale = 0.1, +} +ENT.ButtonMap["AirDistributor"] = { + pos = Vector(-180,70,-50), + ang = Angle(0,180,90), + width = 80, + height = 40, + scale = 0.1, +} + +-- Wagon numbers +ENT.ButtonMap["TrainNumber1"] = { + pos = Vector(30,-67.7,-9.5), + ang = Angle(0,0,90), + width = 130, + height = 55, + scale = 0.20, +} +ENT.ButtonMap["TrainNumber2"] = { + pos = Vector(30+28,67.7,-9.5), + ang = Angle(0,180,90), + width = 130, + height = 55, + scale = 0.20, +} + +-- UAVA +ENT.ButtonMap["UAVAPanel"] = { + pos = Vector(393,54,-2), + ang = Angle(0,0,90), + width = 230, + height = 170, + scale = 0.0625, + + buttons = { + {ID = "UAVAToggle",x=230/2, y=0, w=230/2, h=170, tooltip="УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа\nUAVA: Universal Automatic Autostop Disabler"}, + {ID = "UAVAContactSet",x=0, y=0, w=230/2, h=170, tooltip="УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа (воÑÑтановление контактов)\nUAVA: Universal Automatic Autostop Disabler(contacts reset)"}, + } +} + + + +-- Wagon numbers +ENT.ButtonMap["TrainNumber1"] = { + pos = Vector(30,-67.6,-10), + ang = Angle(0,0,90), + width = 130, + height = 55, + scale = 0.20, +} +ENT.ButtonMap["TrainNumber2"] = { + pos = Vector(30+28,67.7,-10), + ang = Angle(0,180,90), + width = 130, + height = 55, + scale = 0.20, +} + +-- Front info table +ENT.ButtonMap["InfoTable"] = { + pos = Vector(458.0,-16.0,12.0), + ang = Angle(0,90,90), + width = 646, + height = 100, + scale = 0.1/2, +} +ENT.ButtonMap["InfoTableSelect"] = { + pos = Vector(454.0,-27.0,27.0), + ang = Angle(0,-90,90), + width = 250, + height = 100, + scale = 0.1, + + + buttons = { + {ID = "PrevSign",x=0,y=0,w=50,h=100, tooltip="ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð½Ð°Ð´Ð¿Ð¸ÑÑŒ\nPrevious sign"}, + {ID = "NextSign",x=50,y=0,w=50,h=100, tooltip="Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð½Ð°Ð´Ð¿Ð¸ÑÑŒ\nNext sign"}, + + {ID = "Num2P",x=150,y=0,w=50,h=50, tooltip="Маршрут: Увеличить чиÑло 2\nRoute: Increase 2nd number"}, + {ID = "Num2M",x=150,y=50,w=50,h=50, tooltip="Маршрут: Уменьшить чиÑло 2\nRoute: Decrease 2nd number"}, + {ID = "Num1P",x=200,y=0,w=50,h=50, tooltip="Маршрут: Увеличить чиÑло 1\nRoute: Increase 1st number"}, + {ID = "Num1M",x=200,y=50,w=50,h=50, tooltip="Маршрут: Уменьшить чиÑло 1\nRoute: Decrease 1st number"}, + } +} + +ENT.ButtonMap["InfoRoute"] = { + pos = Vector(451.29,39.9,24.2), + ang = Angle(0,97.3,84), + width = 100, + height = 100, + scale = 0.115, +} + +ENT.ButtonMap["FrontDoor"] = { + pos = Vector(455,16,48.4), + 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="ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ\nFront door"}, + } +} + +ENT.ButtonMap["CabinDoor"] = { + pos = Vector(408.9,64,50.8), + ang = Angle(0,0,90), + width = 642, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "CabinDoor1",x=0,y=0,w=642,h=1900, tooltip="Дверь в кабину машиниÑта\nCabin door"}, + } +} + +ENT.ButtonMap["PassengerDoor"] = { + pos = Vector(390,-16,48.4), + ang = Angle(0,90,90), + width = 642, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=642,h=1900, tooltip="Дверь из Ñалона\nPassenger door"}, + } +} + +-------------------------------------------------------------------------------- +ENT.ClientPropsInitialized = false +ENT.ClientProps["brake013"] = { + model = "models/metrostroi/81-717/brake.mdl", + pos = Vector(431,-59.5,2.7), + ang = Angle(0,180,0) +} +ENT.ClientProps["controller"] = { + model = "models/metrostroi/81-717/ezh_controller.mdl", + pos = Vector(447,-26,1.8), + ang = Angle(0,90+45,0) +} +ENT.ClientProps["reverser"] = { + model = "models/metrostroi/81-717/reverser.mdl", + pos = Vector(447,-26,2.5), + ang = Angle(0,45,90) +} +ENT.ClientProps["brake_disconnect"] = { + model = "models/metrostroi/81-717/uava.mdl", + pos = Vector(429.5,-61.0,-25), + ang = Angle(-30,0,0) +} +ENT.ClientProps["EPK_disconnect"] = { + model = "models/metrostroi/81-717/uava.mdl", + pos = Vector(420.0+12.5,-57.5,-21.5), + ang = Angle(0,180,0) +} +ENT.ClientProps["parking_brake"] = { + model = "models/metrostroi/81-717/ezh_koleso.mdl", + pos = Vector(446,41.0,-10.0), + ang = Angle(-90,6,0) +} +-------------------------------------------------------------------------------- +ENT.ClientProps["train_line"] = { + model = "models/metrostroi/81-717/black_arrow.mdl", + pos = Vector(449.20,-35.00,9.45), + ang = Angle(90,0,180-14) +} +ENT.ClientProps["brake_line"] = { + model = "models/metrostroi/81-717/red_arrow.mdl", + pos = Vector(449.15,-35.05,9.45), + ang = Angle(90,0,180-14) +} +ENT.ClientProps["brake_cylinder"] = { + model = "models/metrostroi/81-717/black_arrow.mdl", + pos = Vector(450.5,-32.9,13.4), + ang = Angle(90,0,180-18) +} +-------------------------------------------------------------------------------- +ENT.ClientProps["ampermeter"] = { + model = "models/metrostroi/81-717/black_arrow.mdl", + pos = Vector(445.5,-59.5,23.3), + ang = Angle(90,0,-45+180+80) +} +ENT.ClientProps["voltmeter"] = { + model = "models/metrostroi/81-717/black_arrow.mdl", + pos = Vector(448.1,-55.7,23.3), + ang = Angle(90,0,-45+180+80) +} +ENT.ClientProps["volt1"] = { + model = "models/metrostroi/81-717/black_arrow.mdl", + pos = Vector(447.10,-38.15,0.4), + ang = Angle(90-18,180,7) +} +ENT.ClientProps["volt2"] = { + model = "models/metrostroi/81-717/black_arrow.mdl", + pos = Vector(452.3,-19.4,18.2), + ang = Angle(90,0,180) +} + + + + +-------------------------------------------------------------------------------- +ENT.ClientProps["headlights"] = { + model = "models/metrostroi_train/81/tumbler4.mdl", + ang = 90, + pos = Vector(443.1,-60.0,0.5), + ang = Angle(-74,0,0) +} +Metrostroi.ClientPropForButton("L_3",{ + panel = "Front", + button = "L_3Toggle", + model = "models/metrostroi_train/81/tumbler4.mdl", + ang = 90, +}) +-------------------------------------------------------------------------------- +Metrostroi.ClientPropForButton("R_VPR",{ + panel = "Main", + button = "R_VPRToggle", + model = "models/metrostroi_train/81/tumbler4.mdl", + ang = 90, +}) +Metrostroi.ClientPropForButton("R_ZS",{ + panel = "Main", + button = "R_ZSToggle", + model = "models/metrostroi_train/81/tumbler4.mdl", + ang = 90, +}) +Metrostroi.ClientPropForButton("R_G",{ + panel = "Main", + button = "R_GToggle", + model = "models/metrostroi_train/81/tumbler4.mdl", + ang = 90, +}) +Metrostroi.ClientPropForButton("R_Radio",{ + panel = "Main", + button = "R_RadioToggle", + model = "models/metrostroi_train/81/tumbler4.mdl", + ang = 90, +}) +Metrostroi.ClientPropForButton("DIPon",{ + panel = "Main", + button = "DIPonSet", + model = "models/metrostroi_train/81/button.mdl", + skin = 0, + z = -4.5, +}) +Metrostroi.ClientPropForButton("DIPoff",{ + panel = "Main", + button = "DIPoffSet", + model = "models/metrostroi_train/81/button.mdl", + skin = 1, + z = -4.5, +}) +Metrostroi.ClientPropForButton("VozvratRP",{ + panel = "Main", + button = "VozvratRPSet", + model = "models/metrostroi_train/81/button.mdl", + skin = 0, + z = -4.5, +}) +Metrostroi.ClientPropForButton("VMK",{ + panel = "Main", + button = "VMKToggle", + model = "models/metrostroi_train/81/vud.mdl", + ang = 0, + z = -15, +}) +Metrostroi.ClientPropForButton("RezMK",{ + panel = "Main", + button = "RezMKSet", + model = "models/metrostroi_train/81/button.mdl", + skin = 0, + z = -4.5, +}) +Metrostroi.ClientPropForButton("VAH",{ + panel = "Main", + button = "VAHToggle", + model = "models/metrostroi_train/81/tumbler4.mdl", + ang = 90, +}) +Metrostroi.ClientPropForButton("VAD",{ + panel = "Main", + button = "VADToggle", + model = "models/metrostroi_train/81/tumbler4.mdl", + ang = 90, +}) +Metrostroi.ClientPropForButton("ALS",{ + panel = "Main", + button = "ALSToggle", + model = "models/metrostroi_train/81/tumbler4.mdl", + ang = 90, +}) +Metrostroi.ClientPropForButton("ARS",{ + panel = "Main", + button = "ARSToggle", + model = "models/metrostroi_train/81/tumbler4.mdl", + ang = 90, +}) +Metrostroi.ClientPropForButton("OtklAVU",{ + panel = "Main", + button = "OtklAVUToggle", + model = "models/metrostroi_train/81/tumbler4.mdl", + ang = 90, +}) +Metrostroi.ClientPropForButton("KRZD",{ + panel = "Main", + button = "KRZDSet", + model = "models/metrostroi_train/81/button.mdl", + skin = 0, + z = -4.5, +}) +Metrostroi.ClientPropForButton("VUD1",{ + panel = "Main", + button = "VUD1Toggle", + model = "models/metrostroi_train/81/vud.mdl", + ang = 0, + z = -3, + z = -15, +}) +Metrostroi.ClientPropForButton("DoorSelect",{ + panel = "Main", + button = "DoorSelectToggle", + model = "models/metrostroi_train/81/tumbler4.mdl", + ang = 0 +}) +Metrostroi.ClientPropForButton("KDL",{ + panel = "Main", + button = "KDLSet", + model = "models/metrostroi_train/81/button.mdl", + skin = 3, + z = -4.5, +}) +Metrostroi.ClientPropForButton("KDP",{ + panel = "Main", + button = "KDPSet", + model = "models/metrostroi_train/81/button.mdl", + skin = 3, + z = -4.5, +}) +Metrostroi.ClientPropForButton("KVT",{ + panel = "Main", + button = "KVTSet", + model = "models/metrostroi_train/81/button.mdl", + skin = 0, + z=-4.5, +}) +Metrostroi.ClientPropForButton("KSN",{ + panel = "Main", + button = "KSNSet", + model = "models/metrostroi_train/81/button.mdl", + skin = 1, + z = -4.5, +}) +Metrostroi.ClientPropForButton("KRP",{ + panel = "Main", + button = "KRPSet", + model = "models/metrostroi_train/81/button.mdl", + skin = 0, + z = -4.5, +}) +Metrostroi.ClientPropForButton("Program1",{ + panel = "Main", + button = "R_Program1Set", + model = "models/metrostroi_train/81/button.mdl", + skin = 0, + z = -4.5, +}) +Metrostroi.ClientPropForButton("Program2",{ + panel = "Main", + button = "R_Program2Set", + model = "models/metrostroi_train/81/button.mdl", + skin = 0, + z = -4.5, +}) + +Metrostroi.ClientPropForButton("SelectMain",{ + panel = "DURA", + button = "DURASelectMain", + model = "models/metrostroi_train/81/button.mdl", + skin = 0, + z = -4.5, +}) +Metrostroi.ClientPropForButton("SelectAlternate",{ + panel = "DURA", + button = "DURASelectAlternate", + model = "models/metrostroi_train/81/button.mdl", + skin = 0, + z = -4.5, +}) +Metrostroi.ClientPropForButton("SelectChannel",{ + panel = "DURA", + button = "DURAToggleChannel", + model = "models/metrostroi_train/81/tumbler4.mdl", + ang = 90, +}) +Metrostroi.ClientPropForButton("DURAPower",{ + panel = "DURA", + button = "DURAPowerToggle", + model = "models/metrostroi_train/81/tumbler4.mdl", + ang = 90, +}) +Metrostroi.ClientPropForButton("VUD2",{ + panel = "HelperPanel", + button = "VUD2Toggle", + model = "models/metrostroi_train/81/vud.mdl", + ang = 0, + z = -3, +}) +Metrostroi.ClientPropForButton("VDL",{ + panel = "HelperPanel", + button = "VDLSet", + model = "models/metrostroi_train/81/vud.mdl", + ang = 0, + z = -3, +}) +Metrostroi.ClientPropForButton("Custom1",{ + panel = "Announcer", + button = "Custom1Set", + model = "models/metrostroi/81-717/button10.mdl" +}) +Metrostroi.ClientPropForButton("Custom2",{ + panel = "Announcer", + button = "Custom2Set", + model = "models/metrostroi/81-717/button10.mdl" +}) +Metrostroi.ClientPropForButton("Custom3",{ + panel = "Announcer", + button = "Custom3Set", + model = "models/metrostroi/81-717/button07.mdl" +}) +Metrostroi.ClientPropForButton("CustomC",{ + panel = "Announcer", + button = "CustomCToggle", + model = "models/metrostroi_train/81/tumbler4.mdl", + ang = 90, +}) + +Metrostroi.ClientPropForButton("CustomD",{ + panel = "Announcer", + button = "CustomD", + model = "models/metrostroi/81-717/light01.mdl", +}) +Metrostroi.ClientPropForButton("CustomE",{ + panel = "Announcer", + button = "CustomE", + model = "models/metrostroi/81-717/light03.mdl", +}) +Metrostroi.ClientPropForButton("CustomF",{ + panel = "Announcer", + button = "CustomF", + model = "models/metrostroi/81-717/light04.mdl", +}) +Metrostroi.ClientPropForButton("CustomG",{ + panel = "Announcer", + button = "CustomG", + model = "models/metrostroi/81-717/light02.mdl", +}) + +Metrostroi.ClientPropForButton("rc1",{ + panel = "RC1", + button = "RC1Toggle", + model = "models/metrostroi/81-717/rc.mdl", +}) + +Metrostroi.ClientPropForButton("UOS",{ + panel = "RC1", + button = "UOSToggle", + model = "models/metrostroi/81-717/rc.mdl", +}) + +Metrostroi.ClientPropForButton("BPS",{ + panel = "BPS", + button = "BPSToggle", + model = "models/metrostroi/81-717/rc.mdl", +}) + +-------------------------------------------------------------------------------- +ENT.ClientProps["gv"] = { + model = "models/metrostroi/81-717/gv.mdl", + pos = Vector(154,62.5,-65), + ang = Angle(-90,0,-90) +} +ENT.ClientProps["gv_wrench"] = { + model = "models/metrostroi/81-717/reverser.mdl", + pos = Vector(154,62.5,-65), + ang = Angle(0,0,0) +} +-------------------------------------------------------------------------------- +for x=0,11 do + for y=0,3 do + ENT.ClientProps["a"..(x+12*y)] = { + model = "models/metrostroi/81-717/circuit_breaker.mdl", + pos = Vector(393.8,-52.5+x*2.75,37.5-y*8), + ang = Angle(90,0,0) + } + end +end +ENT.ClientProps["bat1"] = { + model = "models/metrostroi_train/81/vud.mdl", + pos = Vector(393.6,26.0+4.6*0,24.9), + ang = Angle(0,90,90) +} +ENT.ClientProps["bat2"] = { + model = "models/metrostroi_train/81/vud.mdl", + pos = Vector(393.6,26.0+4.6*1,24.9), + ang = Angle(0,90,90) +} +ENT.ClientProps["bat3"] = { + model = "models/metrostroi_train/81/vud.mdl", + pos = Vector(393.6,26.0+4.6*2,24.9), + ang = Angle(0,90,90) +} +-------------------------------------------------------------------------------- +ENT.ClientProps["book"] = { + model = "models/props_lab/binderredlabel.mdl", + pos = Vector(449.0,-40.0,45.0), + ang = Angle(-135,0,85) +} + + + + +-------------------------------------------------------------------------------- +-- Add doors +local function GetDoorPosition(i,k,j) + if j == 0 + then return Vector(353.0 - 35*k - 231*i,-65*(1-2*k),-1.8) + else return Vector(353.0 - 35*(1-k) - 231*i,-65*(1-2*k),-1.8) + end +end +for i=0,3 do + for k=0,1 do + ENT.ClientProps["door"..i.."x"..k.."a"] = { + model = "models/metrostroi/e/em508_door1.mdl", + pos = GetDoorPosition(i,k,0), + ang = Angle(0,180*k,0) + } + ENT.ClientProps["door"..i.."x"..k.."b"] = { + model = "models/metrostroi/e/em508_door2.mdl", + pos = GetDoorPosition(i,k,1), + ang = Angle(0,180*k,0) + } + end +end +ENT.ClientProps["door1"] = { + model = "models/metrostroi/e/em508_door5.mdl", + pos = Vector(456.5,0.4,-3.8), + ang = Angle(0,0,0) +} +ENT.ClientProps["door2"] = { + model = "models/metrostroi/e/em508_door5.mdl", + pos = Vector(-479.5,-0.5,-3.8), + ang = Angle(0,180,0) +} +ENT.ClientProps["door3"] = { + model = "models/metrostroi/e/em508_door4.mdl", + pos = Vector(386.5,0.4,5.2), + ang = Angle(0,0,0) +} +ENT.ClientProps["door4"] = { + model = "models/metrostroi/e/em508_door3.mdl", + pos = Vector(425.6,65.2,-2.2), + ang = Angle(0,0,0) +} +ENT.ClientProps["UAVA"] = { + model = "models/metrostroi/81-717/uava_body.mdl", + pos = Vector(400,61,-8),--Vector(415.0,-58.5,-18.2), + ang = Angle(0,0,0) +} +ENT.ClientProps["UAVALever"] = { + model = "models/metrostroi/81-717/real_uava.mdl", + pos = Vector(404,60.7,-10.4), + ang = Angle(-30,90,90) +} + +ENT.FrontDoor = 0 +ENT.RearDoor = 0 +ENT.PassengerDoor = 0 +ENT.CabinDoor = 0 + +ENT.Texture = "7" +ENT.OldTexture = nil +--local X = Material( "metrostroi_skins/81-717/6.png") +-------------------------------------------------------------------------------- + +function ENT:UpdateTextures() + local texture = Metrostroi.Skins["train"][self:GetNW2String("texture")] + local passtexture = Metrostroi.Skins["pass"][self:GetNW2String("passtexture")] + local cabintexture = Metrostroi.Skins["cab"][self:GetNW2String("cabtexture")] + for _,ent in pairs(self.ClientEnts) do + if not IsValid(ent) then continue end + for k,v in pairs(ent:GetMaterials()) do + local tex = string.Explode("/",v) + tex = tex[#tex] + if cabintexture and cabintexture.textures[tex] then + ent:SetSubMaterial(k-1,cabintexture.textures[tex]) + end + if passtexture and passtexture.textures[tex] then + ent:SetSubMaterial(k-1,passtexture.textures[tex]) + end + if texture and texture.textures[tex] then + ent:SetSubMaterial(k-1,texture.textures[tex]) + end + end + end +end +-------------------------------------------------------------------------------- +function ENT:Think() + self.BaseClass.Think(self) + if self.Texture ~= self:GetNW2String("texture") then + self.Texture = self:GetNW2String("texture") + self:UpdateTextures() + end + if self.PassTexture ~= self:GetNW2String("passtexture") then + self.PassTexture = self:GetNW2String("passtexture") + self:UpdateTextures() + end + if self.CabinTexture ~= self:GetNW2String("cabtexture") then + self.CabinTexture = self:GetNW2String("cabtexture") + self:UpdateTextures() + end + if not self.Animate then self.BaseClass = baseclass.Get("gmod_subway_base") end + --print(self.FrontDoor,self:GetPackedBool(114)) + --print(self.RearDoor,self:GetPackedBool(156)) + + local transient = (self.Transient or 0)*0.05 + if (self.Transient or 0) ~= 0.0 then self.Transient = 0.0 end + + -- Parking brake animation + self.ParkingBrakeAngle = self.ParkingBrakeAngle or 0 + self.TrueBrakeAngle = self.TrueBrakeAngle or 0 + self.TrueBrakeAngle = self.TrueBrakeAngle + (self.ParkingBrakeAngle - 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 + + -- Simulate pressure gauges getting stuck a little + self:Animate("brake013", self:GetPackedRatio(0)^0.5, 0.00, 0.65, 256,24) + self:Animate("controller", self:GetPackedRatio(1), 0.53, 0.80, 2,false) + self:Animate("reverser", self:GetPackedRatio(2), 0.20, 0.55, 4,false) + self:Animate("volt1", self:GetPackedRatio(10), 0.38,0.64) + self:ShowHide("reverser", self:GetPackedBool(0)) + + self:Animate("brake_line", self:GetPackedRatio(4), 0.16, 0.84, 256,2)--,,0.01) + self:Animate("train_line", self:GetPackedRatio(5)-transient, 0.16, 0.84, 256,2)--,,0.01) + self:Animate("brake_cylinder", self:GetPackedRatio(6), 0.17, 0.86, 256,2)--,,0.03) + self:Animate("voltmeter", self:GetPackedRatio(7), 0.38, 0.63) + self:Animate("ampermeter", self:GetPackedRatio(8), 0.38, 0.63) + self:Animate("volt2", 0, 0.38, 0.63) + + self:Animate("headlights", self:GetPackedBool(1) and 1 or 0, 0,1, 8, false) + self:Animate("L_3", self:GetPackedBool("L_3") and 1 or 0, 0,1, 8, false) + self:Animate("VozvratRP", self:GetPackedBool(2) and 1 or 0, 0,1, 16, false) + self:Animate("DIPon", self:GetPackedBool(3) and 1 or 0, 0,1, 16, false) + self:Animate("DIPoff", self:GetPackedBool(4) and 1 or 0, 0,1, 16, false) + self:Animate("brake_disconnect",self:GetPackedBool(6) and 1 or 0, 0,0.7, 3, false) + self:Animate("bat1", self:GetPackedBool(7) and 1 or 0, 0,1, 16, false) + self:Animate("bat2", self:GetPackedBool(7) and 1 or 0, 0,1, 16, false) + self:Animate("bat3", self:GetPackedBool(7) and 1 or 0, 0,1, 16, false) + self:Animate("RezMK", self:GetPackedBool(8) and 1 or 0, 0,1, 16, false) + self:Animate("VMK", self:GetPackedBool(9) and 0 or 1, 0,1, 16, false) + self:Animate("VAH", self:GetPackedBool(10) and 1 or 0, 0,1, 16, false) + self:Animate("VAD", self:GetPackedBool(11) and 1 or 0, 0,1, 16, false) + self:Animate("VUD1", self:GetPackedBool(12) and 1 or 0, 0,1, 16, false) + self:Animate("VUD2", self:GetPackedBool(13) and 1 or 0, 0,1, 16, false) + self:Animate("VDL", self:GetPackedBool(14) and 1 or 0, 0,1, 16, false) + self:Animate("KDL", self:GetPackedBool(15) and 1 or 0, 0,1, 16, false) + self:Animate("KDP", self:GetPackedBool(16) and 1 or 0, 0,1, 16, false) + self:Animate("KRZD", self:GetPackedBool(17) and 1 or 0, 0,1, 16, false) + self:Animate("KSN", self:GetPackedBool(18) and 1 or 0, 0,1, 16, false) + self:Animate("OtklAVU", self:GetPackedBool(19) and 1 or 0, 0,1, 16, false) + self:Animate("DURAPower", self:GetPackedBool(24) and 1 or 0, 0,1, 16, false) + self:Animate("SelectMain", self:GetPackedBool(29) and 1 or 0, 0,1, 16, false) + self:Animate("SelectAlternate", self:GetPackedBool(30) and 1 or 0, 0,1, 16, false) + self:Animate("SelectChannel", self:GetPackedBool(31) and 1 or 0, 0,1, 16, false) + self:Animate("ARS", self:GetPackedBool(56) and 1 or 0, 0,1, 16, false) + self:Animate("ALS", self:GetPackedBool(57) and 1 or 0, 0,1, 16, false) + self:Animate("KVT", self:GetPackedBool(28) and 1 or 0, 0,1, 16, false) + + self:Animate("Custom1", self:GetPackedBool(114) and 1 or 0, 0,1, 16, false) + self:Animate("Custom2", self:GetPackedBool(115) and 1 or 0, 0,1, 16, false) + self:Animate("Custom3", self:GetPackedBool(116) and 1 or 0, 0,1, 16, false) + --[[self:Animate("Custom4", self:GetPackedBool(117) and 1 or 0, 0,1, 16, false) + self:Animate("Custom5", self:GetPackedBool(118) and 1 or 0, 0,1, 16, false) + self:Animate("Custom6", self:GetPackedBool(119) and 1 or 0, 0,1, 16, false) + self:Animate("Custom7", self:GetPackedBool(120) and 1 or 0, 0,1, 16, false) + self:Animate("Custom8", self:GetPackedBool(121) and 1 or 0, 0,1, 16, false) + self:Animate("CustomA", self:GetPackedBool(122) and 1 or 0, 0,1, 16, false) + self:Animate("CustomB", self:GetPackedBool(123) and 1 or 0, 0,1, 16, false)]]-- + self:Animate("CustomC", self:GetPackedBool(124) and 1 or 0, 0,1, 16, false) + self:Animate("R_G", self:GetPackedBool(125) and 1 or 0, 0,1, 16, false) + self:Animate("R_Radio", self:GetPackedBool(126) and 1 or 0, 0,1, 16, false) + self:Animate("R_ZS", self:GetPackedBool(127) and 1 or 0, 0,1, 16, false) + self:Animate("R_VPR", self:GetPackedBool("R_VPR") and 1 or 0, 0,1, 16, false) + self:Animate("Program1", self:GetPackedBool(128) and 1 or 0, 0,1, 16, false) + self:Animate("Program2", self:GetPackedBool(129) and 1 or 0, 0,1, 16, false) + self:Animate("rc1", self:GetPackedBool(130) and 0.87 or 1, 0,1, 1, false) + self:Animate("UOS", self:GetPackedBool(134) and 0.87 or 1, 0,1, 1, false) + self:Animate("BPS", self:GetPackedBool(135) and 0.87 or 1, 0,1, 1, false) + self:Animate("UAVALever", self:GetPackedBool(152) and 1 or 0, 0,0.25, 128, 3,false) + self:Animate("EPK_disconnect", self:GetPackedBool(155) and 1 or 0,0,0.5, 3, false) + + -- Animate AV switches + for i,v in ipairs(self.Panel.AVMap) do + local value = self:GetPackedBool(64+(i-1)) and 1 or 0 + self:Animate("a"..(i-1),value,0,1,8,false) + end + + -- Main switch + if self.LastValue ~= self:GetPackedBool(5) then + self.ResetTime = CurTime()+1.5 + self.LastValue = self:GetPackedBool(5) + end + self:Animate("gv_wrench", (self:GetPackedBool(5) and 1 or 0), 0,0.51, 128, 1,false) + self:ShowHide("gv_wrench", CurTime() < self.ResetTime) + + -- Animate doors + for i=0,4 do + for k=0,1 do + local n_l = "door"..i.."x"..k.."a" + local n_r = "door"..i.."x"..k.."b" + local animation = self:Animate(n_l,self:GetPackedBool(21+(1-k)*4) and 1 or 0,0,1, 0.8 + (-0.2+0.4*math.random()),0) + local offset_l = Vector(math.abs(31*animation),0,0) + local offset_r = Vector(math.abs(32*animation),0,0) + if self.ClientEnts[n_l] then + self.ClientEnts[n_l]:SetPos(self:LocalToWorld(self.ClientProps[n_l].pos + (1.0 - 2.0*k)*offset_l)) + --self.ClientEnts[n_l]:SetSkin(self:GetSkin()) + end + if self.ClientEnts[n_r] then + self.ClientEnts[n_r]:SetPos(self:LocalToWorld(self.ClientProps[n_r].pos - (1.0 - 2.0*k)*offset_r)) + --self.ClientEnts[n_r]:SetSkin(self:GetSkin()) + end + end + end + --if self.ClientEnts["door1"] then self.ClientEnts["door1"]:SetSkin(self:GetSkin()) end + --if self.ClientEnts["door2"] then self.ClientEnts["door2"]:SetSkin(self:GetSkin()) end + --if self.ClientEnts["door3"] then self.ClientEnts["door3"]:SetSkin(self:GetSkin()) end + --if self.ClientEnts["door4"] then self.ClientEnts["door4"]:SetSkin(self:GetSkin()) end + + + -- Brake-related sounds + local brakeLinedPdT = self:GetPackedRatio(9) + local dT = self.DeltaTime + self.BrakeLineRamp1 = self.BrakeLineRamp1 or 0 + + if (brakeLinedPdT > -0.001) + then self.BrakeLineRamp1 = self.BrakeLineRamp1 + 4.0*(0-self.BrakeLineRamp1)*dT + else self.BrakeLineRamp1 = self.BrakeLineRamp1 + 4.0*((-0.6*brakeLinedPdT)-self.BrakeLineRamp1)*dT + end + self.BrakeLineRamp1 = math.Clamp(self.BrakeLineRamp1,0,1) + self:SetSoundState("release2",self.BrakeLineRamp1^1.65,1.0) + + self.BrakeLineRamp2 = self.BrakeLineRamp2 or 0 + if (brakeLinedPdT < 0.001) + then self.BrakeLineRamp2 = self.BrakeLineRamp2 + 4.0*(0-self.BrakeLineRamp2)*dT + else self.BrakeLineRamp2 = self.BrakeLineRamp2 + 8.0*(0.1*brakeLinedPdT-self.BrakeLineRamp2)*dT + end + self.BrakeLineRamp2 = math.Clamp(self.BrakeLineRamp2,0,1) + self:SetSoundState("release3",self.BrakeLineRamp2 + math.max(0,self.BrakeLineRamp1/2-0.15),1.0) + + self:SetSoundState("cran1",math.min(1,self:GetPackedRatio(4)/50*(self:GetPackedBool(6) and 1 or 0)),1.0) + + -- Compressor + local state = self:GetPackedBool(20) + self.PreviousCompressorState = self.PreviousCompressorState or false + if self.PreviousCompressorState ~= state then + self.PreviousCompressorState = state + if state then + self:SetSoundState("compressor_ezh",1,1) + else + self:SetSoundState("compressor_ezh",0,1) + self:SetSoundState("compressor_ezh_end",0,1) + self:SetSoundState("compressor_ezh_end",1,1) + --self:PlayOnce("compressor_e_end",nil,1,nil,true) + end + end + + -- ARS/ringer alert + local state = self:GetPackedBool(39) + self.PreviousAlertState = self.PreviousAlertState or false + if self.PreviousAlertState ~= state then + self.PreviousAlertState = state + if state then + self:SetSoundState("ring",0.95,1) + else + self:SetSoundState("ring",0,0) + self:SetSoundState("ring_end",0.95,1) + --self:PlayOnce("ring_end","cabin",0.45,101) + end + end + + local state = self:GetPackedBool("VPR") + self.PreviousVPRState = self.PreviousVPRState or false + if self.PreviousVPRState ~= state then + self.PreviousVPRState = state + if state then + self:SetSoundState("vpr",1,1) + else + self:SetSoundState("vpr",0,0) + self:PlayOnce("vpr_end","cabin",1) + end + end + + -- RK rotation + if self:GetPackedBool(112) then self.RKTimer = CurTime() end + local 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_spin",0.7,1,nil,0.75) + else + self:SetSoundState("rk_spin",0,0,nil,0.75) + self:SetSoundState("rk_stop",0,1,nil,0.75) + self:SetSoundState("rk_stop",0.7,1,nil,0.75) + end + end + + -- DIP sound + --self:SetSoundState("bpsn2",self:GetPackedBool(32) and 1 or 0,1.0) +end + +function ENT:Draw() + self.BaseClass.Draw(self) +end + +function ENT:DrawPost() + --local dc = render.GetLightColor(self:LocalToWorld(Vector(460.0,0.0,5.0))) + self:DrawOnPanel("InfoTable",function() + surface.SetDrawColor(0,0,0) --255*dc.x,250*dc.y,220*dc.z) + surface.DrawRect(50,0,540,100) + draw.Text({ + text = self:GetNW2String("FrontText",""), + font = "MetrostroiSubway_InfoPanel",--..self:GetNW2Int("Style",1), + pos = { 320, 50 }, + xalign = TEXT_ALIGN_CENTER, + yalign = TEXT_ALIGN_CENTER, + color = Color(250,200,20,255)}) + end) + + if self.InfoTableTimeout and (CurTime() < self.InfoTableTimeout) then + self:DrawOnPanel("InfoTableSelect",function() + draw.Text({ + text = self:GetNW2String("RouteNumber",""), + font = "MetrostroiSubway_InfoPanel",--..self:GetNW2Int("Style",1), + pos = { 140, -50 }, + xalign = TEXT_ALIGN_CENTER, + yalign = TEXT_ALIGN_CENTER, + color = Color(255,0,0,255)}) + draw.Text({ + text = self:GetNW2String("FrontText",""), + font = "MetrostroiSubway_InfoPanel",--..self:GetNW2Int("Style",1), + pos = { 140, -100 }, + xalign = TEXT_ALIGN_CENTER, + yalign = TEXT_ALIGN_CENTER, + color = Color(255,0,0,255)}) + end) + end + + + self:DrawOnPanel("InfoRoute",function() + surface.SetAlphaMultiplier(1) + surface.SetDrawColor(255,255,255) --255*dc.x,250*dc.y,220*dc.z) + --surface.DrawRect(0,100,88,70) + local rn = self:GetNW2String("RouteNumber","00") + surface.SetMaterial(Metrostroi.RouteTextures.m[rn[1]]) + surface.DrawTexturedRect(-2,100,44,70) + surface.SetMaterial(Metrostroi.RouteTextures.m[rn[2]]) + surface.DrawTexturedRect(46,100,44,70) + --[[ + draw.Text({ + text = self:GetNW2String("RouteNumber","00"), + font = "MetrostroiSubway_InfoRoute",--..self:GetNW2Int("Style",1), + pos = { 44, 135 }, + xalign = TEXT_ALIGN_CENTER, + yalign = TEXT_ALIGN_CENTER, + color = Color(0,0,0,255)}) + ]] + end)// + --[[ + self:DrawOnPanel("InfoRoute",function() + surface.SetDrawColor(142,132,101) --255*dc.x,250*dc.y,220*dc.z) + --surface.DrawRect(0,100,88,70) + draw.Text({ + text = self:GetNW2String("RouteNumber"," ")[1], + font = "MetrostroiSubway_InfoRoute",--..self:GetNW2Int("Style",1), + pos = { 20, 135 }, + xalign = TEXT_ALIGN_CENTER, + yalign = TEXT_ALIGN_CENTER, + color = Color(0,0,0,255)}) + draw.Text({ + text = self:GetNW2String("RouteNumber"," ")[2], + font = "MetrostroiSubway_InfoRoute",--..self:GetNW2Int("Style",1), + pos = { 68, 135 }, + xalign = TEXT_ALIGN_CENTER, + yalign = TEXT_ALIGN_CENTER, + color = Color(0,0,0,255)}) + end)]] + self:DrawOnPanel("ARS",function() + if not self:GetPackedBool(32) then return end + + local speed = self:GetPackedRatio(3)*100.0 + local d1 = math.floor(speed) % 10 + local d2 = math.floor(speed / 10) % 10 + self:DrawDigit((196+0) *10, 35*10, d2, 0.75, 0.55) + self:DrawDigit((196+10)*10, 35*10, d1, 0.75, 0.55) + + local b = self:Animate("light_rRP",self:GetPackedBool(35) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(255,50,0) + surface.DrawRect(253*10,33*10,16*10,8*10) + surface.SetAlphaMultiplier(1) + draw.DrawText("РП","MetrostroiSubway_LargeText",253*10+30,33*10-19,Color(0,0,0,255)) + end + + local b = self:Animate("light_rLSN",self:GetPackedBool(131) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(255,50,0) + surface.DrawRect(290*10,33*10,16*10,8*10) + draw.DrawText("РП","MetrostroiSubway_LargeText",290*10+30,33*10-19,Color(0,0,0,255)) + end + + b = self:Animate("light_gRP",self:GetPackedBool(36) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(50,255,50) + surface.DrawRect(140*10,33*10,16*10,8*10) + draw.DrawText("РП","MetrostroiSubway_LargeText",140*10+30,33*10-19,Color(0,0,0,255)) + end + + b = self:Animate("light_gKT",self:GetPackedBool(47) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(50,255,50) + surface.DrawRect(133*10,73*10,16*10,8*10) + draw.DrawText("КТ","MetrostroiSubway_LargeText",133*10+30,73*10-20,Color(0,0,0,255)) + end + + b = self:Animate("light_gKVD",self:GetPackedBool(48) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(50,255,50) + surface.DrawRect(165*10,73*10,16*10,8*10) + draw.DrawText("КВД","MetrostroiSubway_LargeText",165*10,73*10-20,Color(0,0,0,255)) + end + + b = self:Animate("light_LhRK",self:GetPackedBool(33) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(255,50,0) + surface.DrawRect(101*10,73*10,16*10,8*10) + end + + b = self:Animate("light_NR1",self:GetPackedBool(34) and 0 or 1,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(50,255,50) + surface.DrawRect(196*10,73*10,16*10,8*10) + draw.DrawText("ÐР1","MetrostroiSubway_LargeText",196*10,73*10-20,Color(0,0,0,255)) + end + + b = self:Animate("light_VPR",self:GetPackedBool("VPR") and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(0,255,50) + surface.DrawRect(228*10,73*10,16*10,8*10) + draw.DrawText("ВПР","MetrostroiSubway_LargeText",228*10,73*10-20,Color(0,0,0,255)) + end + + b = self:Animate("light_PECH",self:GetPackedBool(37) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(255,127,0) + surface.DrawRect(260*10,73*10,16*10,8*10) + draw.DrawText("ПЕЧЬ","MetrostroiSubway_SmallText",260*10,73*10-5,Color(0,0,0,255)) + end + + b = self:Animate("light_AVU",self:GetPackedBool(38) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(50,255,50) + surface.DrawRect(295*10,73*10,16*10,8*10) + draw.DrawText("ÐВУ","MetrostroiSubway_LargeText",295*10,73*10-20,Color(0,0,0,255)) + end + + b = self:Animate("light_SD",self:GetPackedBool(40) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(50,255,50) + surface.DrawRect(102*10,33*10,16*10,8*10) + draw.DrawText("СД","MetrostroiSubway_LargeText",102*10+30,33*10-20,Color(0,0,0,255)) + end + + ------------------------------------------------------------------------ + b = self:Animate("light_OCh",self:GetPackedBool(41) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(255,50,0) + surface.DrawRect(102*10,53*10,16*10,8*10) + draw.DrawText("ОЧ","MetrostroiSubway_LargeText",102*10+30,53*10-15,Color(0,0,0,255)) + end + + b = self:Animate("light_0",self:GetPackedBool(42) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(255,50,0) + surface.DrawRect(140*10,53*10,16*10,8*10) + draw.DrawText("0","MetrostroiSubway_LargeText",140*10+55,53*10-10,Color(0,0,0,255)) + end + + b = self:Animate("light_40",self:GetPackedBool(43) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(255,127,0) + surface.DrawRect(176*10,53*10,16*10,8*10) + draw.DrawText("40","MetrostroiSubway_LargeText",176*10+30,53*10-10,Color(0,0,0,255)) + end + + b = self:Animate("light_60",self:GetPackedBool(44) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(50,255,50) + surface.DrawRect(217*10,53*10,16*10,8*10) + draw.DrawText("60","MetrostroiSubway_LargeText",217*10+30,53*10-10,Color(0,0,0,255)) + end + + b = self:Animate("light_75",self:GetPackedBool(45) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(50,255,50) + surface.DrawRect(255*10,53*10,16*10,8*10) + draw.DrawText("70","MetrostroiSubway_LargeText",255*10+30,53*10-10,Color(0,0,0,255)) + end + + b = self:Animate("light_80",self:GetPackedBool(46) and 1 or 0,0,1,5,false) + if b > 0.0 then + surface.SetAlphaMultiplier(b) + surface.SetDrawColor(50,255,50) + surface.DrawRect(294*10,53*10,16*10,8*10) + draw.DrawText("80","MetrostroiSubway_LargeText",294*10+30,53*10-10,Color(0,0,0,255)) + end + + surface.SetAlphaMultiplier(1.0) + end) + + self:DrawOnPanel("IGLA",function() + local plus = ((not self:GetPackedBool(32) or not self:GetPackedBool(78)) and 1 or 0) + surface.SetDrawColor(50 - plus*40,255 - plus*220,40 - plus*40) + surface.DrawRect(0,-4,360,60) + if not self:GetPackedBool(32) or not self:GetPackedBool(78) then return end + local text1 = "" + local text2 = "" + local C1 = Color(0,0,0,255) + local C2 = Color(50,200,50,255) + local flash = false + local T = self:GetPackedRatio(11) + local Ptrain = self:GetPackedRatio(5)*16.0 + local Pcyl = self:GetPackedRatio(6)*6.0 + local date = os.date("!*t",os_time) + -- Default IGLA text + text1 = "IGLA-01K RK TEMP" + text2 = Format("%02d:%02d:%02d %3d C",date.hour,date.min,date.sec,T) + + -- Modifiers and conditions + if self:GetPackedBool(25) then text1 = " !! Right Doors !!" end + if self:GetPackedBool(21) then text1 = " !! Left Doors !!" end + + if T > 300 then text1 = "Temperature warning!" end + + if self:GetPackedBool(50) and (Pcyl > 1.1) then + text1 = "FAIL PNEUMATIC BRAKE" + flash = true + end + if self:GetPackedBool(35) and + self:GetPackedBool(28) then + text1 = "FAIL AVU/BRAKE PRESS" + flash = true + end + if self:GetPackedBool(35) and + (not self:GetPackedBool(40)) then + text1 = "FAIL SD/DOORS OPEN " + flash = true + end + if self:GetPackedBool(36) then + text1 = "FAIL OVERLOAD RELAY " + flash = true + end + if Ptrain < 5.5 then + text1 = "FAIL TRAIN LINE LEAK" + flash = true + end + + if T > 400 then flash = true end + if T > 500 then text1 = "!Disengage circuits!" end + if T > 750 then text1 = " !! PIZDA POEZDU !! " end + + -- Draw text + if flash and ((RealTime() % 1.0) > 0.5) then + C2,C1 = C1,C2 + end + for i=1,20 do + surface.SetDrawColor(C2) + surface.DrawRect(3+(i-1)*17.7+1,0+4,16,22) + draw.DrawText(string.upper(text1[i] or ""),"MetrostroiSubway_IGLA",3+(i-1)*17.7,0+0,C1) + end + for i=1,20 do + surface.SetDrawColor(C2) + surface.DrawRect(3+(i-1)*17.7+1,0+24+4,16,22) + draw.DrawText(string.upper(text2[i] or ""),"MetrostroiSubway_IGLA",3+(i-1)*17.7,0+24,C1) + end + end) + + self:DrawOnPanel("AnnouncerDisplay",function(...) + local plus = (not self:GetPackedBool(32) and 1 or 0) + surface.SetDrawColor(83,140,82) + surface.DrawRect(230,80,450,150) + if not self:GetPackedBool(32) then return end + self.ASNP:AnnDisplay(self,true) + end) + + self:DrawOnPanel("DURADisplay",function() + if not self:GetPackedBool(32) or not self:GetPackedBool(24) then return end + local function GetColor(id, text) + if text then + return self:GetPackedBool(id) and Color(255,0,0) or Color(0,0,0) + else + return not self:GetPackedBool(id) and Color(255,255,255) or Color(0,0,0) + end + end + surface.SetAlphaMultiplier(0.4) + surface.SetDrawColor(255,255,255) + surface.DrawRect(0,3+22.8*0,211,22.8) -- 120 + surface.SetAlphaMultiplier(1.0) + draw.DrawText("DURA V 1.0","MetrostroiSubway_IGLA",0,0+22.8*0, Color(0,0,0,255)) + + surface.SetAlphaMultiplier(0.4) + surface.SetDrawColor(GetColor(31)) surface.SetAlphaMultiplier(0.4) + surface.DrawRect(0,3+22.8*1,211,23) -- 120 + surface.SetAlphaMultiplier(1.0) + draw.DrawText("Channel:" .. (self:GetPackedBool(31) and "2" or "1"),"MetrostroiSubway_IGLA",0,0+22.8*1,GetColor(31, true)) + + surface.SetAlphaMultiplier(0.4) + surface.SetDrawColor(GetColor(153)) surface.SetAlphaMultiplier(0.4) + surface.DrawRect(0,3+22.8*2,211,23) -- 120 + surface.SetAlphaMultiplier(1.0) + draw.DrawText("Channel1:" .. (self:GetPackedBool(153) and "Alt" or "Main"),"MetrostroiSubway_IGLA",0,0+22.8*2,GetColor(153, true)) + + surface.SetAlphaMultiplier(0.4) + surface.SetDrawColor(GetColor(154)) + surface.DrawRect(0,3+22.8*3,211,23) -- 120 + surface.SetAlphaMultiplier(1.0) + draw.DrawText("Channel2:" .. (self:GetPackedBool(154) and "Alt" or "Main"),"MetrostroiSubway_IGLA",0,0+22.8*3,GetColor(154, true)) + surface.SetAlphaMultiplier(0.4) + surface.SetDrawColor(255,255,255) + surface.DrawRect(0,3+22.8*4,211,23) -- 120 + surface.SetAlphaMultiplier(1) + end) + + self:DrawOnPanel("FrontPneumatic",function() + draw.DrawText(self:GetNW2Bool("FbI") and "Isolated" or "Open","Trebuchet24",150,30,Color(0,0,0,255)) + draw.DrawText(self:GetNW2Bool("FtI") and "Isolated" or "Open","Trebuchet24",650,30,Color(0,0,0,255)) + end) + self:DrawOnPanel("RearPneumatic",function() + draw.DrawText(self:GetNW2Bool("RbI") and "Isolated" or "Open","Trebuchet24",150,30,Color(0,0,0,255)) + draw.DrawText(self:GetNW2Bool("RtI") and "Isolated" or "Open","Trebuchet24",650,30,Color(0,0,0,255)) + end) + 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) + + -- Draw train numbers + local dc = render.GetLightColor(self:GetPos()) + self:DrawOnPanel("TrainNumber1",function() + draw.DrawText(Format("%04d",self:EntIndex()),"MetrostroiSubway_LargeText3",0,0,Color(255*dc.x,255*dc.y,255*dc.z,255)) + end) + self:DrawOnPanel("TrainNumber2",function() + draw.DrawText(Format("%04d",self:EntIndex()),"MetrostroiSubway_LargeText3",0,0,Color(255*dc.x,255*dc.y,255*dc.z,255)) + end) +end + +function ENT:OnButtonPressed(button) + if button == "ShowHelp" then + RunConsoleCommand("metrostroi_train_manual") + end + local bp_press = self:GetPackedRatio(6) + local blocked_l = self:GetPackedBool(132) and 0 or 1 + local blocked_r = self:GetPackedBool(133) and 0 or 1 + if button == "ParkingBrakeLeft" then + self.ParkingBrakeAngle = (self.ParkingBrakeAngle or 0) - blocked_l*45 + end + if button == "ParkingBrakeRight" then + self.ParkingBrakeAngle = (self.ParkingBrakeAngle or 0) + blocked_r*45 + end + if button == "ShowHelp" then + RunConsoleCommand("metrostroi_train_manual") + end + + if button == "PrevSign" then + self.InfoTableTimeout = CurTime() + 2.0 + end + if button == "NextSign" then + self.InfoTableTimeout = CurTime() + 2.0 + end + + if button and button:sub(1,3) == "Num" then + self.InfoTableTimeout = CurTime() + 2.0 + end +end diff --git a/lua/entities/_obsolete/gmod_subway_ezh3ru1/init.lua b/lua/entities/_obsolete/gmod_subway_ezh3ru1/init.lua new file mode 100644 index 0000000..1dc19dd --- /dev/null +++ b/lua/entities/_obsolete/gmod_subway_ezh3ru1/init.lua @@ -0,0 +1,979 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +ENT.BogeyDistance = 650 -- Needed for gm trainspawner +--------------------------------------------------- +-- Defined train information +-- Types of wagon(for wagon limit system): +-- 0 = Head or intherim +-- 1 = Only head +-- 2 = Only intherim +--------------------------------------------------- +ENT.SubwayTrain = { + Type = "E", + Name = "Ezh3", + Manufacturer = "MVM", + WagType = 0, + ARS = { + HaveASNP = true, + } +} + +function ENT:Initialize() + + -- Set model and initialize + self:SetModel("models/metrostroi/e/em508.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create seat entities + self.DriverSeat = self:CreateSeat("driver",Vector(418,-45,-28+4)) + self.InstructorsSeat = self:CreateSeat("instructor",Vector(430,40,-48+6+2.5),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 + self.FrontBogey = self:CreateBogey(Vector( 325-10,0,-80),Angle(0,180,0),true) + self.RearBogey = self:CreateBogey(Vector(-325-10,0,-80),Angle(0,0,0),false) + local pneumoPow = 0.8+(math.random()^0.4)*0.3 + self.FrontBogey.PneumaticPow = pneumoPow + self.RearBogey.PneumaticPow = pneumoPow + + -- Initialize key mapping + self.KeyMap = { + [KEY_1] = "KVSetX1", + [KEY_2] = "KVSetX2", + [KEY_3] = "KVSetX3", + [KEY_4] = "KVSet0", + [KEY_5] = "KVSetT1", + [KEY_6] = "KVSetT1AB", + [KEY_7] = "KVSetT2", + [KEY_8] = "KRP", + + [KEY_EQUAL] = "R_Program1Set", + [KEY_MINUS] = "R_Program2Set", + + [KEY_G] = "VozvratRPSet", + + [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] = "KDL", + [KEY_D] = "KDP", + [KEY_V] = "VUD1Toggle", + [KEY_L] = "HornEngage", + [KEY_N] = "VZ1Set", + [KEY_PAD_1] = "PneumaticBrakeSet1", + [KEY_PAD_2] = "PneumaticBrakeSet2", + [KEY_PAD_3] = "PneumaticBrakeSet3", + [KEY_PAD_4] = "PneumaticBrakeSet4", + [KEY_PAD_5] = "PneumaticBrakeSet5", + [KEY_PAD_6] = "PneumaticBrakeSet6", + [KEY_PAD_7] = "PneumaticBrakeSet7", + [KEY_PAD_DIVIDE] = "KRPSet", + [KEY_PAD_MULTIPLY] = "KAHSet", + + [KEY_SPACE] = "PBSet", + [KEY_BACKSPACE] = "EmergencyBrake", + + [KEY_PAD_0] = "DriverValveDisconnectToggle", + [KEY_PAD_DECIMAL] = "EPKToggle", + [KEY_LSHIFT] = { + [KEY_W] = "KVUp_Unlocked", + [KEY_SPACE] = "KVTSet", + [KEY_F] = "BCCDSet", + [KEY_R] = "VZPSet", + + [KEY_A] = "DURASelectAlternate", + [KEY_D] = "DURASelectMain", + [KEY_V] = "DURAToggleChannel", + [KEY_1] = "DIPonSet", + [KEY_2] = "DIPoffSet", + [KEY_4] = "KVSet0Fast", + [KEY_L] = "DriverValveDisconnectToggle", + + [KEY_7] = "KVWrenchNone", + [KEY_8] = "KVWrenchKRU", + [KEY_9] = "KVWrenchKV", + [KEY_0] = "KVWrench0", + [KEY_6] = "KVSetT1A", + + [KEY_PAD_7] = "BFSet", + [KEY_PAD_8] = "BUpSet", + [KEY_PAD_9] = "BMSet", + [KEY_PAD_4] = "BLeftSet", + [KEY_PAD_5] = "BDownSet", + [KEY_PAD_6] = "BRightSet", + [KEY_PAD_ENTER] = "BPSet", + }, + + [KEY_RSHIFT] = { + [KEY_7] = "KVWrenchNone", + [KEY_8] = "KVWrenchKRU", + [KEY_9] = "KVWrenchKV", + [KEY_0] = "KVWrench0", + [KEY_L] = "DriverValveDisconnectToggle", + + }, + [KEY_LALT] = { + [KEY_V] = "VUD1Toggle", + [KEY_L] = "EPKToggle", + [KEY_PAD_PLUS] = "Custom2Set", + [KEY_PAD_MINUS] = "Custom1Set", + [KEY_PAD_ENTER] = "Custom3Set", + [KEY_PAD_ENTER] = "Custom3Set", + [KEY_PAD_MULTIPLY] = "CustomCToggle", + }, + [KEY_RALT] = { + [KEY_L] = "EPKToggle", + }, + } + + self.InteractionZones = { + { Pos = Vector(458,-30,-55), + Radius = 32, + ID = "FrontBrakeLineIsolationToggle" }, + { Pos = Vector(458, 30,-55), + Radius = 32, + ID = "FrontTrainLineIsolationToggle" }, + { Pos = Vector(-482,30,-55), + Radius = 32, + ID = "RearBrakeLineIsolationToggle" }, + { Pos = Vector(-482, -30,-55), + Radius = 32, + ID = "RearTrainLineIsolationToggle" }, + { Pos = Vector(154,62.5,-65), + Radius = 32, + ID = "GVToggle" }, + { Pos = Vector(393.6,26.0+4.6*1,24.9), + Radius = 8, + ID = "VBToggle" }, + { Pos = Vector(-180,68.5,-50), + Radius = 20, + ID = "AirDistributorDisconnectToggle" }, + { Pos = Vector(-470,-38,9), + Radius = 28, + ID = "RearDoor" }, + { Pos = Vector(450,38,9), + Radius = 28, + ID = "FrontDoor1" }, + { Pos = Vector(450,38,-16), + Radius = 28, + ID = "FrontDoor2" }, + { Pos = Vector(382,38,9), + Radius = 28, + ID = "PassengerDoor" }, + { Pos = Vector(445,61,25), + Radius = 16, + ID = "CabinDoor1" }, + { Pos = Vector(445,61,-25), + Radius = 16, + ID = "CabinDoor2" }, + { Pos = Vector(380,67,25), + Radius = 28, + ID = "CabinDoor3" }, + { Pos = Vector(380,67,-25), + Radius = 28, + ID = "CabinDoor4" }, + } + + -- Lights + self.Lights = { + -- Head + [1] = { "headlight", Vector(465,0,-20), Angle(0,0,0), Color(216,161,92), fov = 100 }, + [2] = { "glow", Vector(460, 49,-28), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 1.0 }, + [3] = { "glow", Vector(460,-49,-28), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 1.0 }, + [4] = { "glow", Vector(458,-15, 57), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 0.5 }, + [5] = { "glow", Vector(458,-5, 57), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 0.5 }, + [6] = { "glow", Vector(458, 5, 57), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 0.5 }, + [7] = { "glow", Vector(458, 15, 57), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 0.5 }, + + -- Reverse + [8] = { "light", Vector(458,-31, 58), Angle(0,0,0), Color(255,0,0), brightness = 10, scale = 1.0 }, + [9] = { "light", Vector(458, 31, 58), Angle(0,0,0), Color(255,0,0), brightness = 10, scale = 1.0 }, + + -- Cabin + [10] = { "dynamiclight", Vector( 420, -40, 35), Angle(0,0,0), Color(255,255,255), brightness = 0.1, distance = 550 }, + + -- Interior + [11] = { "dynamiclight", Vector( 250, 0, 5), Angle(0,0,0), Color(255,255,255), brightness = 3, distance = 400 }, + [12] = { "dynamiclight", Vector( 0, 0, 5), Angle(0,0,0), Color(255,255,255), brightness = 3, distance = 400 }, + [13] = { "dynamiclight", Vector(-250, 0, 5), Angle(0,0,0), Color(255,255,255), brightness = 3, distance = 400 }, + + -- Side lights + [14] = { "light", Vector(390, 69, 54), Angle(0,0,0), Color(255,0,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + [15] = { "light", Vector(390, 69, 51), Angle(0,0,0), Color(150,255,255), brightness = 0.6, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + [16] = { "light", Vector(390, 69, 48), Angle(0,0,0), Color(50,255,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + [17] = { "light", Vector(390, 69, 45), Angle(0,0,0), Color(255,255,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + + [18] = { "light", Vector(390, -69, 54), Angle(0,0,0), Color(255,0,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + [19] = { "light", Vector(390, -69, 51), Angle(0,0,0), Color(150,255,255), brightness = 0.6, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + [20] = { "light", Vector(390, -69, 48), Angle(0,0,0), Color(50,255,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + [21] = { "light", Vector(390, -69, 45), Angle(0,0,0), Color(255,255,0), brightness = 0.5, scale = 0.10, texture = "models/metrostroi_signals/signal_sprite_002.vmt" }, + + [30] = { "headlight", Vector(447.8,-34.6,9.6), Angle(0,0,0), Color(255,161,40), farz = 3, nearz = 1, shadows = 0, brightness = 2, fov = 124 }, + [31] = { "headlight", Vector(449,-32.9,13.5), Angle(0,4,0), Color(237,161,73), farz = 3, nearz = 1, shadows = 0, brightness = 2, fov = 120 }, + [32] = { "headlight", Vector(445.6,-38.4,0.1), Angle(-65,-5,0), Color(20,161,20), farz = 5, nearz = 1, shadows = 0, brightness = 2, fov = 140 }, + [33] = { "headlight", Vector(446.5,-57.2,20.4), Angle(-90,0,0), Color(216,161,92), farz = 7.2, nearz = 1, shadows = 0, brightness = 2, fov = 120 }, + + -- Custom D + [35] = { "light", Vector(447.7,-54.5,17.4-4.4), Angle(0,-0,0), Color(255,0,0), brightness = 1.0, scale = 0.020 }, + -- Custom E + [36] = { "light", Vector(447,-55.5,17.4-4.4), Angle(0,0,0), Color(255,255,255), brightness = 1.0, scale = 0.020 }, + -- Custom F + [37] = { "light", Vector(444.7,-58.5,17.4-4.4), Angle(0,0,0), Color(255,160,0), brightness = 1.0, scale = 0.020 }, + -- Custom G + [38] = { "light", Vector(444,-59.5,17.4-4.4), Angle(0,0,0), Color(100,255,0), brightness = 1.0, scale = 0.020 }, + [70 ] = { "headlight", Vector( 430, -60, -47), Angle(45,-90,0), Color(255,255,255), brightness = 0.5, distance = 400 , fov=120, shadows = 1 }, + } + + for i = 1,23 do + self.Lights[69+i] = { "light", Vector(-470 + 35*i, 0, 65), Angle(180,0,0), Color(255,220,180), brightness = 0.25, scale = 0.75} + --self:SetLightPower(69+i,RealTime()%1*2>1) + end + + -- Cross connections in train wires + self.TrainWireInverts = { + [18] = true, + [34] = true, + } + self.TrainWireCrossConnections = { + [5] = 4, -- Reverser F<->B + [31] = 32, -- Doors L<->R + } + + -- Setup door positions + self.LeftDoorPositions = {} + self.RightDoorPositions = {} + for i=0,3 do + table.insert(self.LeftDoorPositions,Vector(353.0 - 35*0.5 - 231*i,65,-1.8)) + table.insert(self.RightDoorPositions,Vector(353.0 - 35*0.5 - 231*i,-65,-1.8)) + end + + -- KV wrench mode + self.KVWrenchMode = 0 + + -- Parking brake ratio + self.ManualBrake = 0.0 + self.RearDoor = false + self.FrontDoor = false + self.CabinDoor = false + self.PassengerDoor = false + + self.A5:TriggerInput("Set",0) + self:UpdateTextures() +end +function ENT:UpdateTextures() + local texture = Metrostroi.Skins["train"][self.Texture] + local passtexture = Metrostroi.Skins["pass"][self.PassTexture] + local cabintexture = Metrostroi.Skins["cab"][self.CabTexture] + + for k,v in pairs(self:GetMaterials()) do + self:SetSubMaterial(k-1,"") + end + for k,v in pairs(self:GetMaterials()) do + if v == "models/metrostroi_train/81/int02" then + if not Metrostroi.Skins["717_schemes"] or not Metrostroi.Skins["717_schemes"]["m"] then + self:SetSubMaterial(k-1,Metrostroi.Skins["717_schemes"][""]) + else + if not self.Adverts or self.Adverts ~= 4 then + self:SetSubMaterial(k-1,Metrostroi.Skins["717_schemes"]["m"].adv) + else + self:SetSubMaterial(k-1,Metrostroi.Skins["717_schemes"]["m"].clean) + end + end + end + local tex = string.Explode("/",v) + tex = tex[#tex] + if cabintexture and cabintexture.textures[tex] then + self:SetSubMaterial(k-1,cabintexture.textures[tex]) + end + if passtexture and passtexture.textures[tex] then + self:SetSubMaterial(k-1,passtexture.textures[tex]) + end + if texture and texture.textures[tex] then + self:SetSubMaterial(k-1,texture.textures[tex]) + end + end + self:SetNW2String("texture",self.Texture) + self:SetNW2String("passtexture",self.PassTexture) + self:SetNW2String("cabtexture",self.CabTexture) +end + +local LK = {} +local PKG = 0 +local RK = 0 +local KV = 0 +local OldTime +-------------------------------------------------------------------------------- +function ENT:Think() + --[[ + if self.KV.ControllerPosition ~= KV then + if KV == 0 then OldTime = nil end + if self.KV.ControllerPosition == 0 then OldTime = nil end + if not OldTime then print("") end + KV = self.KV.ControllerPosition + print(Format("Controller moved:%d",KV)) + end + for i=1,5 do + if LK[i] ~= self["LK"..i].Value then + if not OldTime then OldTime = CurTime() end + print(Format("%.2f:LK%d = %d",CurTime()-OldTime,i,self["LK"..i].Value)) + LK[i] = self["LK"..i].Value + end + end + if RK ~= math.floor(self.RheostatController.Position+0.5) then + if not OldTime then OldTime = CurTime() end + RK = math.floor(self.RheostatController.Position+0.5) + print(Format("%.2f:RK = %d",CurTime()-OldTime,RK)) + end + if PKG ~= math.floor(self.PositionSwitch.Position+0.5) then + if not OldTime then OldTime = CurTime() end + local nPKG = math.floor(self.PositionSwitch.Position+0.5) + print(Format("%.2f:PK = %d->%d",CurTime()-OldTime,PKG,nPKG)) + PKG = nPKG + end + ]] + self.RetVal = self.BaseClass.Think(self) + -- Check if wrench was pulled out + if self.DriversWrenchPresent then + self.KV:TriggerInput("Enabled",self:IsWrenchPresent() and 1 or 0) + end + self:SetLightPower(1, self.Panel["HeadLights3"] > 0.5,(math.min(1,self.Panel["HeadLights1"])*0.50 + + math.min(1,self.Panel["HeadLights2"])*0.25 + + math.min(1,self.Panel["HeadLights3"])*0.25) + ) + self:SetLightPower(2, self.Panel["HeadLights3"] > 0.5) + self:SetLightPower(3, self.Panel["HeadLights3"] > 0.5) + self:SetLightPower(4, self.Panel["HeadLights2"] > 0.5) + self:SetLightPower(5, self.Panel["HeadLights1"] > 0.5) + self:SetLightPower(6, self.Panel["HeadLights1"] > 0.5) + self:SetLightPower(7, self.Panel["HeadLights2"] > 0.5) + -- Reverser lights + self:SetLightPower(8, self.Panel["RedLightRight"] > 0.5) + self:SetLightPower(9, self.Panel["RedLightLeft"] > 0.5) + + -- Interior/cabin lights + self:SetLightPower(10, self.Panel["CabinLight"] > 0.5) + + local lightsActive2 = self.PowerSupply.XT3_4 > 65.0 + local lightsActive1 = self.Panel["EmergencyLight"] > 0.5 + self:SetLightPower(11, lightsActive2, 0.8) + self:SetLightPower(12, lightsActive1,0.1 + ((self.PowerSupply.XT3_4 > 65.0) and 0.7 or 0)) + self:SetLightPower(13, lightsActive2, 0.8) + for i = 1,23 do + self:SetLightPower(69+i,lightsActive2 and true or lightsActive1 and i%5==1 or false) + end + self:SetLightPower(30, (self.L_3.Value > 0.5)) + self:SetLightPower(31, (self.L_3.Value > 0.5)) + self:SetLightPower(32, (self.L_3.Value > 0.5)) + self:SetLightPower(33, (self.L_3.Value > 0.5)) + --self:SetLightPower(12, self.Panel["EmergencyLight"] > 0.5) + --self:SetLightPower(13, self.PowerSupply.XT3_4 > 65.0) + + -- Side lights + self:SetLightPower(14, false) + self:SetLightPower(18, false) + + self:SetLightPower(15, self.Panel["TrainDoors"] > 0.5) + self:SetLightPower(19, self.Panel["TrainDoors"] > 0.5) + + self:SetLightPower(16, self.Panel["GreenRP"] > 0.5) + self:SetLightPower(20, self.Panel["GreenRP"] > 0.5) + + self:SetLightPower(17, self.Panel["TrainBrakes"] > 0.5) + self:SetLightPower(21, self.Panel["TrainBrakes"] > 0.5) + + -- Total temperature + local IGLA_Temperature = math.max(self.Electric.T1,self.Electric.T2) + + -- Switch and button states + self:SetPackedBool(0,self:IsWrenchPresent()) + self:SetPackedBool(1,self.VUS.Value == 1.0) + self:SetPackedBool("L_3",self.L_3.Value == 1.0) + self:SetPackedBool(2,self.VozvratRP.Value == 1.0) + self:SetPackedBool(3,self.DIPon.Value == 1.0) + self:SetPackedBool(4,self.DIPoff.Value == 1.0) + self:SetPackedBool(5,self.GV.Value == 1.0) + self:SetPackedBool(6,self.DriverValveDisconnect.Value == 1.0) + self:SetPackedBool(7,self.VB.Value == 1.0) + self:SetPackedBool(8,self.RezMK.Value == 1.0) + self:SetPackedBool(9,self.VMK.Value == 1.0) + self:SetPackedBool(10,self.VAH.Value == 1.0) + self:SetPackedBool(11,self.VAD.Value == 1.0) + self:SetPackedBool(12,self.VUD1.Value == 0.0) + self:SetPackedBool(13,self.VUD2.Value == 1.0) + self:SetPackedBool(14,self.VDL.Value == 1.0) + self:SetPackedBool(15,self.KDL.Value == 1.0) + self:SetPackedBool(16,self.KDP.Value == 1.0) + self:SetPackedBool(17,self.KRZD.Value == 1.0) + self:SetPackedBool(18,self.KSN.Value == 1.0) + self:SetPackedBool(19,self.OtklAVU.Value == 1.0) + self:SetPackedBool(20,self.Pneumatic.Compressor == 1.0) + self:SetPackedBool(21,self.Pneumatic.LeftDoorState[1] > 0.5) + --self:SetPackedBool(22,self.Pneumatic.LeftDoorState[2] > 0.5) + --self:SetPackedBool(23,self.Pneumatic.LeftDoorState[3] > 0.5) + --self:SetPackedBool(24,self.Pneumatic.LeftDoorState[4] > 0.5) + self:SetPackedBool(24,self.DURA.Power) + self:SetPackedBool(25,self.Pneumatic.RightDoorState[1] > 0.5) + --self:SetPackedBool(26,self.Pneumatic.RightDoorState[2] > 0.5) + --self:SetPackedBool(27,self.Pneumatic.RightDoorState[3] > 0.5) + self:SetPackedBool(27,self.KVWrenchMode == 2) + --self:SetPackedBool(28,self.Pneumatic.RightDoorState[4] > 0.5) + self:SetPackedBool(28,self.KVT.Value == 1.0) + --self:SetPackedBool(156,self.KB.Value == 1.0) + self:SetPackedBool(29,self.DURA.SelectAlternate == false) + self:SetPackedBool(30,self.DURA.SelectAlternate == true) + self:SetPackedBool(31,self.DURA.Channel == 2) + self:SetPackedBool(56,self.ARS.Value == 1.0) + self:SetPackedBool(57,self.ALS.Value == 1.0) + self:SetPackedBool(58,self.Panel["CabinLight"] > 0.5) + self:SetPackedBool(112,(self.RheostatController.Velocity ~= 0.0)) + self:SetPackedBool(114,self.Custom1.Value == 1.0) + self:SetPackedBool(115,self.Custom2.Value == 1.0) + self:SetPackedBool(116,self.Custom3.Value == 1.0) + self:SetPackedBool(124,self.CustomC.Value == 1.0) + --[[self:SetPackedBool(117,self.Custom4.Value == 1.0) + self:SetPackedBool(118,self.Custom5.Value == 1.0) + self:SetPackedBool(119,self.Custom6.Value == 1.0) + self:SetPackedBool(120,self.Custom7.Value == 1.0) + self:SetPackedBool(121,self.Custom8.Value == 1.0) + self:SetPackedBool(122,self.CustomA.Value == 1.0) + self:SetPackedBool(124,self.CustomC.Value == 1.0)]]-- + self:SetLightPower(35,self.CustomD.Value == 1.0) + self:SetLightPower(36,self.CustomE.Value == 1.0) + self:SetLightPower(37,self.CustomF.Value == 1.0) + self:SetLightPower(38,self.CustomG.Value == 1.0) + self:SetPackedBool(125,self.R_G.Value == 1.0) + self:SetPackedBool(126,self.R_Radio.Value == 1.0) + self:SetPackedBool(127,self.R_ZS.Value == 1.0) + self:SetPackedBool("R_VPR",self.R_VPR.Value == 1.0) + self:SetPackedBool("VPR",self.R_VPR.Value == 1.0 and self.A29.Value == 1.0 and self.Panel["V1"]) + self:SetPackedBool(128,self.R_Program1.Value == 1.0) + self:SetPackedBool(129,self.R_Program2.Value == 1.0) + self:SetPackedBool(130,self.RC1.Value == 1.0) + self:SetPackedBool(132,self.ManualBrake <= 0.001) + self:SetPackedBool(133,self.ManualBrake >= 0.999) + self:SetPackedBool(134,self.UOS.Value == 1.0) + self:SetPackedBool(135,self.BPS.Value == 1.0) + self:SetPackedBool(152,self.UAVA.Value == 1.0) + self:SetPackedBool(153,self.DURA.Channel1Alternate) + self:SetPackedBool(154,self.DURA.Channel2Alternate) + self:SetPackedBool(155,self.EPK.Value == 1.0) + self:SetPackedBool(156,self.RearDoor) + self:SetPackedBool(157,self.FrontDoor) + self:SetPackedBool(158,self.PassengerDoor) + self:SetPackedBool(159,self.CabinDoor) + + -- Signal if doors are open or no to platform simulation + self.LeftDoorsOpen = + (self.Pneumatic.LeftDoorState[1] > 0.5) or + (self.Pneumatic.LeftDoorState[2] > 0.5) or + (self.Pneumatic.LeftDoorState[3] > 0.5) or + (self.Pneumatic.LeftDoorState[4] > 0.5) + self.RightDoorsOpen = + (self.Pneumatic.RightDoorState[1] > 0.5) or + (self.Pneumatic.RightDoorState[2] > 0.5) or + (self.Pneumatic.RightDoorState[3] > 0.5) or + (self.Pneumatic.RightDoorState[4] > 0.5) + self:WriteTrainWire(35,(self.Pneumatic.BrakeCylinderPressure > 0.1) and 1 or 0) + + -- DIP/power + self:SetPackedBool(32,self.Panel["V1"] > 0.5) + -- LxRK + self:SetPackedBool(33,false)--self.RheostatController.MotorCoilState ~= 0.0) + -- NR1 + self:SetPackedBool(34,(self.NR.Value == 1.0) or (self.RPU.Value == 1.0)) + -- Red RP + local TW18 = self:GetTrainWire18() + if self:ReadTrainWire(20) == 0 or (self.Panel["V1"] < 0.5) then TW18 = 0 end--(self.KV.ControllerPositionAutodrive == 0 and self.KV.ControllerPosition == 0) + self:SetPackedBool(35,TW18 > 0.5) + self:SetPackedBool(131,TW18 > 0) + -- Green RP + self:SetPackedBool(36,self.Panel["GreenRP"] > 0.5) + -- Cabin heating + self:SetPackedBool(37,self.Panel["KUP"] > 0.5) + -- AVU + self:SetPackedBool(38,self.Panel["AVU"] > 0.5) + -- Ring + self:SetPackedBool(39,self.Panel["Ring"] > 0.5) + -- SD + self:SetPackedBool(40,self.Panel["SD"] > 0.5) + -- OCh + self:SetPackedBool(41,self.ALS_ARS.NoFreq) + -- 0 + self:SetPackedBool(42,self.ALS_ARS.Signal0) + -- 40 + self:SetPackedBool(43,self.ALS_ARS.Signal40) + -- 60 + self:SetPackedBool(44,self.ALS_ARS.Signal60) + -- 75 + self:SetPackedBool(45,self.ALS_ARS.Signal70) + -- 80 + self:SetPackedBool(46,self.ALS_ARS.Signal80) + -- KT + self:SetPackedBool(47,self.ALS_ARS.LKT) + -- KVD + self:SetPackedBool(48,self.ALS_ARS.LVD) + -- LVD + self:SetPackedBool(50,self:ReadTrainWire(1) > 0.5) + + -- AV states + for i,v in ipairs(self.Panel.AVMap) do + if tonumber(v) + then self:SetPackedBool(64+(i-1),self["A"..v].Value == 1.0) + elseif self[v] then self:SetPackedBool(64+(i-1),self[v].Value == 1.0) + end + end + self.SOSD = self.Panel["SD"] <= 0 and self.Panel["V1"] > 0 and self.KV.ReverserPosition ~= 0 + self:SetLightPower(70,self.SOSD) + + -- Feed packed floats + self:SetPackedRatio(0, 1-self.Pneumatic.DriverValvePosition/7) + self:SetPackedRatio(1, (self.KV.ControllerPosition+3)/7) + self:SetPackedRatio(2, 1-(self.KV.ReverserPosition+1)/2) + self:SetPackedRatio(4, self.Pneumatic.BrakeLinePressure/16.0) + self:SetPackedRatio(5, self.Pneumatic.TrainLinePressure/16.0) + self:SetPackedRatio(6, (self.Pneumatic.BrakeCylinderPressure + 4.0*self.ManualBrake)/6.0) + self:SetPackedRatio(7, self.Electric.Power750V/1000.0) + self:SetPackedRatio(8, math.abs(self.Electric.I24)/1000.0) + --self:SetPackedRatio(9, self.Pneumatic.BrakeLinePressure_dPdT or 0) + if self.Pneumatic.TrainLineOpen then + self:SetPackedRatio(9, (-self.Pneumatic.TrainLinePressure_dPdT or 0)*6) + else + self:SetPackedRatio(9, self.Pneumatic.BrakeLinePressure_dPdT or 0) + end + self:SetPackedRatio(10,(self.Panel["V1"] * self.Battery.Voltage) / 100.0) + self:SetPackedRatio(11,IGLA_Temperature) + + -- Update ARS system + self:SetPackedRatio(3, self.ALS_ARS.Speed/100.0) + if (self.ALS_ARS.Ring == true) then + self:SetPackedBool(39,true) + end + + -- RUT test + local weightRatio = math.max(0,math.min(1,(self:GetNW2Float("PassengerCount")/300))) + if math.abs(self:GetAngles().pitch) > 2.5 then weightRatio = weightRatio + 1.00 end + self.YAR_13A:TriggerInput("WeightLoadRatio",math.max(0,math.min(1.00,weightRatio))) + + -- 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 = 30300+25000*(A < 0 and 1 or 0) + self.FrontBogey.Reversed = (self.RKR.Value > 0.5) + self.RearBogey.MotorForce = 30300+25000*(A < 0 and 1 or 0) + self.RearBogey.Reversed = (self.RKR.Value < 0.5) + + -- These corrections are required to beat source engine friction at very low values of motor power + local A = 2*self.Engines.BogeyMoment + 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 + self.FrontBogey.PneumaticBrakeForce = 50000.0 + self.FrontBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + 7.0*self.ManualBrake + self.FrontBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + self.FrontBogey.ParkingBrake = false + self.RearBogey.PneumaticBrakeForce = 50000.0 + self.RearBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + 7.0*self.ManualBrake + self.RearBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + --self.RearBogey.ParkingBrake = self.ManualBrake.Value > 0.5 + end + + -- Generate bogey sounds + local jerk = math.abs((self.Acceleration - (self.PrevAcceleration or 0)) / self.DeltaTime) + self.PrevAcceleration = self.Acceleration + + if jerk > (2.0 + self.Speed/15.0) then + self.PrevTriggerTime1 = self.PrevTriggerTime1 or CurTime() + self.PrevTriggerTime2 = self.PrevTriggerTime2 or CurTime() + + if ((math.random() > 0.00) or (jerk > 10)) and (CurTime() - self.PrevTriggerTime1 > 1.5) then + self.PrevTriggerTime1 = CurTime() + self.FrontBogey:EmitSound("subway_trains/chassis_"..math.random(1,3)..".wav", 70, math.random(90,110)) + end + if ((math.random() > 0.00) or (jerk > 10)) and (CurTime() - self.PrevTriggerTime2 > 1.5) then + self.PrevTriggerTime2 = CurTime() + self.RearBogey:EmitSound("subway_trains/chassis_"..math.random(1,3)..".wav", 70, math.random(90,110)) + end + end + + -- Temporary hacks + --self:SetNW2Float("V",self.Speed) + --self:SetNW2Float("A",self.Acceleration) + + if self:ReadTrainWire(5)*self:ReadTrainWire(4) > 0 and not self.RevCheck then + self.RevCheck = CurTime()+0.25 + end + if self.RevCheck and CurTime() - self.RevCheck > 0 then + if self:ReadTrainWire(5)*self:ReadTrainWire(4) > 0 then + self:TriggerInput("VUOpenBypass") + if self.VU.TargetValue == 0 then + --self:PlayOnce("av_off","cabin") + end + end + self.RevCheck = nil + end + return self.RetVal +end + +-------------------------------------------------------------------------------- +function ENT:OnButtonPress(button,ply) + -- Parking brake + if button == "ParkingBrakeLeft" then + self.ManualBrake = math.max(0.0,(self.ManualBrake or 0) - 0.008) + if self.ManualBrake == 0.0 then return end + --print(self.ManualBrake) + end + if button == "ParkingBrakeRight" then + self.ManualBrake = math.min(1.0,(self.ManualBrake or 0) + 0.008) + if self.ManualBrake == 1.0 then return end + --print(self.ManualBrake) + end + if string.find(button,"PneumaticBrakeSet") then + self.Pneumatic:TriggerInput("BrakeSet",tonumber(button:sub(-1,-1))) + return + end + if button:find("FrontDoor") then + self.FrontDoor = not self.FrontDoor + if self.FrontDoor then self:PlayOnce("door_open_tor","cabin") else self:PlayOnce("door_close_tor","cabin") end + end + if button:find("RearDoor") then + self.RearDoor = not self.RearDoor + if self.RearDoor then self:PlayOnce("door_open_tor") else self:PlayOnce("door_close_tor") end + end + if button:find("PassengerDoor") then + self.PassengerDoor = not self.PassengerDoor + if self.PassengerDoor then self:PlayOnce("door_open_tor","cabin") else self:PlayOnce("door_close_tor","cabin") end + end + if button:find("CabinDoor") then + self.CabinDoor = not self.CabinDoor + if self.CabinDoor then self:PlayOnce("door_open_tor","cabin") else self:PlayOnce("door_close_tor","cabin") end + end + if button == "VAHToggle" then + local state = self.VAH.TargetValue < 0.5 and "enabled" or "disabled" + RunConsoleCommand("say",ply:GetName().." "..state.." VAH!") + end + if button == "OtklAVUToggle" then + local state = self.OtklAVU.TargetValue < 0.5 and "enabled" or "disabled" + RunConsoleCommand("say",ply:GetName().." "..state.." OtklAVU!") + end + if button == "VADToggle" then + local state = self.VAD.TargetValue < 0.5 and "enabled" or "disabled" + RunConsoleCommand("say",ply:GetName().." "..state.." VAD!") + end + if button == "RC1Toggle" then + local state = self.RC1.TargetValue < 0.5 and "enabled" or "disabled" + RunConsoleCommand("say",ply:GetName().." "..state.." RC1!") + end + if button == "UOSToggle" then + local state = self.UOS.TargetValue < 0.5 and "enabled" or "disabled" + RunConsoleCommand("say",ply:GetName().." "..state.." UOS!") + end + if button == "UAVAToggle" then + local state = self.UAVA.TargetValue < 0.5 and "enabled" or "disabled" + RunConsoleCommand("say",ply:GetName().." "..state.." UAVA!") + end + if button == "BPSToggle" then + local state = self.BPS.TargetValue < 0.5 and "enabled" or "disabled" + RunConsoleCommand("say",ply:GetName().." "..state.." BPS!") + end + if button == "AirDistributorDisconnectToggle" then return end + if button == "NextSign" then + self:PrepareSigns() + self.SignsIndex = self.SignsIndex + 1 + if self.SignsIndex > #self.SignsList then self.SignsIndex = 1 end + + self:SetNW2String("FrontText",self.SignsList[self.SignsIndex][2]) + end + if button == "PrevSign" then + self:PrepareSigns() + self.SignsIndex = self.SignsIndex - 1 + if self.SignsIndex < 1 then self.SignsIndex = #self.SignsList end + + self:SetNW2String("FrontText",self.SignsList[self.SignsIndex][2]) + end + + if button == "Num1P" then + if not self.RouteNumber then self.RouteNumber = "00" end + local num = tonumber(self.RouteNumber[2]) + num = num + 1 + if num > 9 then num = 0 end + self.RouteNumber = string.SetChar(self.RouteNumber,2, num) + self:SetNW2String("RouteNumber",self.RouteNumber) + local trn = self.WagonList[#self.WagonList] + if IsValid(trn) and trn ~= self then + trn.RouteNumber = self.RouteNumber + trn:SetNW2String("RouteNumber",self.RouteNumber) + end + end + if button == "Num1M" then + if not self.RouteNumber then self.RouteNumber = "00" end + local num = tonumber(self.RouteNumber[2]) + num = num - 1 + if num < 0 then num = 9 end + self.RouteNumber = string.SetChar(self.RouteNumber,2, num) + self:SetNW2String("RouteNumber",self.RouteNumber) + local trn = self.WagonList[#self.WagonList] + if IsValid(trn) and trn ~= self then + trn.RouteNumber = self.RouteNumber + trn:SetNW2String("RouteNumber",self.RouteNumber) + end + end + if button == "Num2P" then + if not self.RouteNumber then self.RouteNumber = "00" end + local num = tonumber(self.RouteNumber[1]) + num = num + 1 + if num > 9 then num = 0 end + self.RouteNumber = string.SetChar(self.RouteNumber,1, num) + self:SetNW2String("RouteNumber",self.RouteNumber) + local trn = self.WagonList[#self.WagonList] + if IsValid(trn) and trn ~= self then + trn.RouteNumber = self.RouteNumber + trn:SetNW2String("RouteNumber",self.RouteNumber) + end + end + if button == "Num2M" then + if not self.RouteNumber then self.RouteNumber = "00" end + local num = tonumber(self.RouteNumber[1]) + num = num - 1 + if num < 0 then num = 9 end + self.RouteNumber = string.SetChar(self.RouteNumber,1, num) + self:SetNW2String("RouteNumber",self.RouteNumber) + local trn = self.WagonList[#self.WagonList] + if IsValid(trn) and trn ~= self then + trn.RouteNumber = self.RouteNumber + trn:SetNW2String("RouteNumber",self.RouteNumber) + end + 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 + --print(self.ManualBrake) + end + if button == "ManualBrakeRight" then + self.ManualBrake = math.min(1.0,self.ManualBrake + 0.008) + if self.ManualBrake == 1.0 then return end + --print(self.ManualBrake) + 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 == 2) and (button == "KVReverserUp") then + self.KRU:TriggerInput("Up",1) + self:OnButtonPress("KRUUp") + end + if (self.KVWrenchMode == 2) and (button == "KVReverserDown") then + self.KRU:TriggerInput("Down",1) + self:OnButtonPress("KRUDown") + end + if (self.KVWrenchMode == 2) and (button == "KVSetX1") then + self.KRU:TriggerInput("SetX1",1) + self:OnButtonPress("KRUSetX1") + end + if (self.KVWrenchMode == 2) and (button == "KVSetX2") then + self.KRU:TriggerInput("SetX2",1) + self:OnButtonPress("KRUSetX2") + end + if (self.KVWrenchMode == 2) and (button == "KVSetX3") then + self.KRU:TriggerInput("SetX3",1) + self:OnButtonPress("KRUSetX3") + end + if (self.KVWrenchMode == 2) and (button == "KVSet0") then + self.KRU:TriggerInput("Set0",1) + self:OnButtonPress("KRUSet0") + end + + if button == "KVSetT1AB" then + if self.KV.ControllerPosition == -2 then + self.KV:TriggerInput("ControllerSet",-1) + timer.Simple(0.20,function() + self.KV:TriggerInput("ControllerSet",-2) + end) + else + self.KV:TriggerInput("ControllerSet",-2) + end + end + if button == "KVWrench0" then + if self.KVWrenchMode == 3 or self.KVWrenchMode == 1 then + if self.KVWrenchMode ~= 1 then + self:PlayOnce("revers_in","cabin",0.7) + end + self.KVWrenchMode = 0 + self.DriversWrenchPresent = false + self.DriversWrenchMissing = false + self.KV:TriggerInput("Enabled",1) + self.KRU:TriggerInput("Enabled",0) + end + end + if button == "KVWrenchKV" then + if self.KVWrenchMode == 3 or self.KVWrenchMode == 0 then + if self.KVWrenchMode ~= 0 then + self:PlayOnce("revers_in","cabin",0.7) + end + self.KVWrenchMode = 1 + self.DriversWrenchPresent = true + self.DriversWrenchMissing = false + self.KV:TriggerInput("Enabled",1) + self.KRU:TriggerInput("Enabled",0) + end + end + --THERE IS NO KRU IN THIS EZH MODEL + --[[ + if button == "KVWrenchKRU" then + if self.KVWrenchMode == 3 then + self:PlayOnce("kru_in","cabin",0.7) + self.KVWrenchMode = 2 + self.DriversWrenchPresent = false + self.DriversWrenchMissing = true + self.KV:TriggerInput("Enabled",0) + self.KRU:TriggerInput("Enabled",1) + self.KRU:TriggerInput("LockX3",1) + end + end]] + if button == "KVWrenchNone" then + if self.KVWrenchMode ~= 3 and self.KV.ReverserPosition == 0 then + if self.KVWrenchMode == 2 then + self:PlayOnce("kru_out","cabin",0.7,120.0) + else + self:PlayOnce("revers_out","cabin",0.7,120.0) + end + self.KVWrenchMode = 3 + self.DriversWrenchPresent = false + self.DriversWrenchMissing = true + self.KV:TriggerInput("Enabled",0) + self.KRU:TriggerInput("Enabled",0) + end + end + --if button == "KVT2Set" then self.KVT:TriggerInput("Close",1) end + if button == "KDL" then self.KDL:TriggerInput("Close",1) self:OnButtonPress("KDLSet") end + if button == "KDP" then self.KDP:TriggerInput("Close",1) self:OnButtonPress("KDPSet") end + if button == "VDL" then self.VDL:TriggerInput("Close",1) self:OnButtonPress("VDLSet") end + if button == "KRP" then + self.KRP:TriggerInput("Set",1) + self:OnButtonPress("KRPSet") + end + if button == "EmergencyBrake" then + self.KV:TriggerInput("ControllerSet",-3) + self.Pneumatic:TriggerInput("BrakeSet",7) + self.DriverValveDisconnect:TriggerInput("Set",1) + return + end + -- Special logic + if (button == "VDL") or (button == "KDL") or (button == "KDP") then + --self.VUD1:TriggerInput("Open",1) + end + if (button == "KDP") then + --self.DoorSelect:TriggerInput("Close",1) + end + if (button == "VUD1Set") or (button == "VUD1Toggle") or + (button == "VUD2Set") or (button == "VUD2Toggle") then + self.VDL:TriggerInput("Open",1) + self.KDL:TriggerInput("Open",1) + self.KDP:TriggerInput("Open",1) + end + + if button == "GVToggle" then + if self.GV.Value > 0.5 then + self:PlayOnce("revers_f",nil,0.7) + else + self:PlayOnce("revers_b",nil,0.7) + end + return + end + + if button == "DriverValveDisconnectToggle" then + if self.DriverValveDisconnect.Value == 1.0 then + self:PlayOnce("pneumo_disconnect2","cabin",0.9) + if self.EPK.Value == 1 then self:PlayOnce("epv_on","cabin",0.9) end + else + self:PlayOnce("pneumo_disconnect1","cabin",0.9) + if self.EPK.Value == 1 then self:PlayOnce("epv_off","cabin",0.9) end + end + return + end + + if button == "EPKToggle" and self.DriverValveDisconnect.Value == 1.0 then + if self.EPK.Value == 1.0 then + self:PlayOnce("epv_off","cabin",0.9) + else + self:PlayOnce("epv_on","cabin",0.9) + end + return + end +end + +function ENT:OnButtonRelease(button) + if string.find(button,"PneumaticBrakeSet") then + return + end + --if button == "KVT2Set" then self.KVT:TriggerInput("Open",1) end + if button == "KDL" then self.KDL:TriggerInput("Open",1) self:OnButtonRelease("KDLSet") end + if button == "KDP" then self.KDP:TriggerInput("Open",1) self:OnButtonRelease("KDPSet") end + if button == "VDL" then self.VDL:TriggerInput("Open",1) self:OnButtonRelease("VDLSet") end + + if button == "KRP" then + self.KRP:TriggerInput("Set",0) + self:OnButtonRelease("KRPSet") + end + --[[ + if (button == "PneumaticBrakeDown") and (self.Pneumatic.DriverValvePosition == 1) then + self.Pneumatic:TriggerInput("BrakeSet",2) + end + if self.Pneumatic.ValveType == 1 then + if (button == "PneumaticBrakeUp") and (self.Pneumatic.DriverValvePosition == 5) then + self.Pneumatic:TriggerInput("BrakeSet",4) + 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 diff --git a/lua/entities/_obsolete/gmod_subway_ezh3ru1/shared.lua b/lua/entities/_obsolete/gmod_subway_ezh3ru1/shared.lua new file mode 100644 index 0000000..ca1b975 --- /dev/null +++ b/lua/entities/_obsolete/gmod_subway_ezh3ru1/shared.lua @@ -0,0 +1,116 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.PrintNameTranslated = "Entities.Ezh3" +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" + +ENT.Spawnable = false --NOT FINISHED +ENT.AdminSpawnable = false --NOT FINISHED + +function ENT:PassengerCapacity() + return 300 +end + +function ENT:GetStandingArea() + return Vector(-450,-30,-45),Vector(380,30,-45) +end + +function ENT:InitializeSounds() + self.BaseClass.InitializeSounds(self) + self.SoundNames["relay_close2"] = nil + self.SoundNames["relay_close3"] = nil + --[[self.SoundNames["relay_close4"] = {"subway_trains/new/relay_7.wav","subway_trains/new/lsd_4.wav"} + self.SoundNames["pneumo_switch"] = { + "subway_trains/pneumo_8.wav", + "subway_trains/pneumo_9.wav", + }]] + self.SoundNames["rvt_close"] = "subway_trains/sbor.wav" + self.SoundNames["r1_5_close"] = "subway_trains/sbor_hod.wav" + self.SoundNames["rvt_open"] = "subway_trains/rasbor_t.wav" + self.SoundNames["r1_5_open"] = "subway_trains/razbor_hod.wav" + self.SoundNames["rk_spin"] = "subway_trains/rk_3.wav" + self.SoundNames["rk_stop"] = "subway_trains/rk_4.wav" + self.SoundNames["switch_off"] = {"subway_trains/tumbler_1_off.wav","subway_trains/tumbler_2_off.wav","subway_trains/tumbler_3_off.wav"} + self.SoundNames["switch_on"] = {"subway_trains/tumbler_1_on.wav","subway_trains/tumbler_2_on.wav","subway_trains/tumbler_3_on.wav"} + self.SoundNames["av_on"] = { + "subway_trains/va21_2_1_on.wav", + "subway_trains/va21_2_2_on.wav", + } + self.SoundNames["av_off"] = { + "subway_trains/va21_2_1_off.wav", + "subway_trains/va21_2_2_off.wav", + } +end + +function ENT:InitializeSystems() + -- ЭлектроÑиÑтема 81-710 + self:LoadSystem("Electric","81_710RU1_Electric") + + -- Токоприёмник + self:LoadSystem("TR","TR_3B") + -- ЭлектротÑговые двигатели + self:LoadSystem("Engines","DK_117DM") + + -- РезиÑторы Ð´Ð»Ñ Ñ€ÐµÐ¾Ñтата/пуÑковых Ñопротивлений + self:LoadSystem("KF_47A") + -- РезиÑторы Ð´Ð»Ñ Ð¾ÑÐ»Ð°Ð±Ð»ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð±ÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ + self:LoadSystem("KF_50A") + -- Ящик Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñ…Ñ€Ð°Ð½Ð¸Ñ‚ÐµÐ»Ñми + self:LoadSystem("YAP_57") + + -- РезиÑторы Ð´Ð»Ñ Ñ†ÐµÐ¿ÐµÐ¹ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + --self:LoadSystem("YAS_44V") + -- РеоÑтатный контроллер Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑƒÑковыми ÑÐ¾Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð»ÐµÐ½Ð¸Ñ + self:LoadSystem("RheostatController","EKG_17B") + -- Групповой переключатель положений + self:LoadSystem("PositionSwitch","EKG_18B") + -- Кулачковый контроллер + self:LoadSystem("KV","KV_70") + -- Контроллер резервного ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + self:LoadSystem("KRU") + + + -- Ящики Ñ Ñ€ÐµÐ»Ðµ и контакторами + self:LoadSystem("LK_755A") + self:LoadSystem("YAR_13A") + self:LoadSystem("YAR_27") + self:LoadSystem("YAK_36") + self:LoadSystem("YAK_37E") + self:LoadSystem("YAS_44V") + self:LoadSystem("YARD_2") + self:LoadSystem("PR_14X_Panels") + + -- ПневмоÑиÑтема 81-710 + self:LoadSystem("Pneumatic","81_717_Pneumatic") + self.Pneumatic.ValveType = 2 + -- Панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ 81-710 + self:LoadSystem("Panel","81_710RU1_Panel") + -- Everything else + self:LoadSystem("Battery") + self:LoadSystem("PowerSupply","DIP_01K") + self:LoadSystem("DURA") + self:LoadSystem("ALS_ARS") + self:LoadSystem("Horn") + self:LoadSystem("Announcer") + self:LoadSystem("ASNP") + + self:LoadSystem("IGLA") + + self:LoadSystem("ASNP31","Relay","Switch") + self:LoadSystem("ASNP32","Relay","Switch") + + self:LoadSystem("Custom1","Relay","Switch") + self:LoadSystem("Custom2","Relay","Switch") + self:LoadSystem("Custom3","Relay","Switch") + self:LoadSystem("CustomC","Relay","Switch") + self:LoadSystem("CustomD","Relay","Switch") + self:LoadSystem("CustomE","Relay","Switch") + self:LoadSystem("CustomF","Relay","Switch") + self:LoadSystem("CustomG","Relay","Switch") + + +end diff --git a/lua/entities/_obsolete/gmod_track_arm_/cl_init.lua b/lua/entities/_obsolete/gmod_track_arm_/cl_init.lua new file mode 100644 index 0000000..b682610 --- /dev/null +++ b/lua/entities/_obsolete/gmod_track_arm_/cl_init.lua @@ -0,0 +1,700 @@ +include("shared.lua") + +-------------------------------------------------------------------------------- +ENT.ClientProps = {} +ENT.ButtonMap = {} +ENT.AutoAnims = {} +ENT.AutoAnimNames = {} +ENT.ClientSounds = {} +ENT.ClientPropsInitialized = false + + +ENT.ButtonMap["ARM"] = { + pos = Vector(-4.9,9.1,50.3), + ang = Angle(0,-90-1,90), + width = 800, + height = 600, + scale = 0.02*1.2, + mouse = true +} +ENT.ClientProps["ARMPK"] = { + model = "models/cyber_metrostroi/pc_arm/pc_screen.mdl", + pos = Vector(-5,0,31.2), + ang = Angle(0,180,0), + bscale = Vector(4/3,1,1), +} +ENT.ClientProps["ARMMonitor"] = { + model = "models/cyber_metrostroi/pc_arm/pc_body.mdl", + pos = Vector(-5,15,0), + ang = Angle(0,180,0), + bscale = Vector(4/3,1,1), +} +ENT.ClientProps["ARMKeyboard"] = { + model = "models/cyber_metrostroi/pc_arm/pc_keyboard.mdl", + pos = Vector(-15,-2,31), + ang = Angle(0,180,0), +} +ENT.ClientProps["ARMMouse"] = { + model = "models/cyber_metrostroi/pc_arm/pc_mouse.mdl", + pos = Vector(-18,-20,32), + ang = Angle(0,180,0), +} +ENT.ClientProps["ARMBreen"] = { + model = "models/props_combine/breenglobe.mdl", + pos = Vector(-11,30,39.5), + ang = Angle(0,-180+45,0), +} + +function ENT:Initialize() + self.BaseClass.Initialize(self) + self.ARM = self:CreateRT("ARM",1024,1024) + for k,v in pairs(self.Types) do + for i,tex in pairs(v) do + if type(tex) == "table" and type(tex[1]) == "string" then + tex.mat = surface.GetTextureID(tex[1]) + end + end + end +end + +function ENT:CamMoved() + self:HandleMouse(false) + gui.EnableScreenClicker(self.CurrentCamera ~= 0) +end + +function ENT:Think() + self.BaseClass.Think(self) + if not self.RenderClientEnts or self.CreatingCSEnts then + return + end + + if not self.ARM then return end + --self.MouseX = 0 + --self.MouseY = 0 + self.MouseX = self:GetNW2Int("CursorX",0) + self.MouseY = self:GetNW2Int("CursorY",0) + render.PushRenderTarget(self.ARM,0,0,1024, 1024) + render.Clear(0, 0, 0, 0) + cam.Start2D() + render.OverrideAlphaWriteEnable(true, true) + surface.SetDrawColor(0,0,0) + surface.DrawRect(0,0,800,600) + self:ARMMonitor() + cam.End2D() + render.PopRenderTarget() +end + +function ENT:Draw() + self.BaseClass.Draw(self) +end + + +function ENT:DrawPost() + self.RTMaterial:SetTexture("$basetexture", self.ARM) + self:DrawOnPanel("ARM",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(512,512,1024,1024,0) + end) +end + + +local gray = Color(100,100,100) +local black = Color(0,0,0) +local white = Color(150,150,150) +local green = Color(0,50,0) + +local function GetTextures(segm,typ) + return segm[typ],segm.maintex or segm[typ] +end +--Get texture Width and Height +local function GetWH(segm,typ) + local tex,dtex = GetTextures(segm,typ) + return tex.w or dtex.w,tex.h or dtex.h +end +--Get real(original) texture Width and Height +local function GetRWH(segm,typ) + local tex,dtex = GetTextures(segm,typ) + return tex.rw or dtex.rw,tex.rh or dtex.rh +end +--Get X and Y adds +local function GetXYA(segm,typ) + local tex,dtex = GetTextures(segm,typ) + return tex.xa or dtex.xa or 0,tex.ya or dtex.ya or 0 +end + +local function GetXY(x,y) + return 100+x*36,100+y*70 +end +local function drawSegment(w,h,u0,v0,u1,v1,segm,typ,align) + --local segm = self.Types[typ] + if not segm or not segm[typ] then return end + local tex,dtex = GetTextures(segm,typ) + if dtex.mat then + local sx,sy = GetXY(w,h) + local sw,sh = GetWH(segm,typ) + local sxa = tex.x or dtex.x or 0 + local xa,ya = GetXYA(segm,typ) + local rw,rh = GetRWH(segm,typ) + surface.SetDrawColor(tex.col or dtex.col or white) + surface.SetTexture(tex.mat or dtex.mat) + surface.DrawTexturedRectUV(sx+xa+sxa*u0,sy+ya-(rh-8)*v0,rw,rh,(rw/sw)*u0,(rh/sh)*v0,(rw/sw)*u1,(rh/sh)*v1) + end +end +local function drawElement(sx,sy,u0,v0,u1,v1,segm,typ,col) + --local segm = self.Types[typ] + if not segm or not segm[typ] then return end + local tex = segm[typ] + local dtex = segm.maintex or tex + --local sx,sy = 100+w*36,100+h*70 + local sw,sh = tex.w or dtex.w,tex.h or dtex.h + local sxa = tex.x or dtex.x or 0 + local xa,ya = tex.xa or dtex.xa or 0,tex.ya or dtex.ya or 0 + local rw,rh = tex.rw or dtex.rw,tex.rh or dtex.rh + surface.SetDrawColor(col or tex.col or dtex.col or white) + surface.SetTexture(tex.mat or dtex.mat) + surface.DrawTexturedRectUV(sx+xa+sxa*u0,sy+ya-(rh-8)*v0 ,rw,rh,(rw/sw)*u0,(rh/sh)*v0,(rw/sw)*u1,(rh/sh)*v1) +end + +local mouse = surface.GetTextureID("gui/info") + +local function createFont(name,font,size,weight) + surface.CreateFont("Metrostroi_"..name, { + font = font, + size = size, + weight = weight or 400, + blursize = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + }) +end +createFont("Arial10","Arial",10,400) +createFont("Arial20","Arial",20,800) + +local colorConverter = { + r = Color(0,0,0), + y = Color(240,240,71), + g = Color(41,202,26), + b = Color(26,84,202), + w = Color(255,255,255), +} +local function GetSegmPos(segm,alt) + local x,y = segm.x,segm.y + local segmt = segm.segm + local u0,v0,u1,v1 = 0,0,1,1 + if segm.invertX then u0,u1 = 1,0 end + if segm.invertY then v0,v1 = 1,0 end + if alt == nil then + return GetXY(x+segm.width*u0,y) + elseif alt == false and segmt.next_m then + return GetXY(x+segmt.next_m.x-segm.width*u0,y+segmt.next_m.y) + --print(123,x,y) + elseif alt and segmt.next_a then + return GetXY(x+segmt.next_a.x*u1-segmt.next_a.x*u0+segmt.width*u0,y+segmt.next_a.y*v1-segmt.next_a.y*v0) + end +end + +local function ARMFindNextSegm(station,csegm,alt,dir,deb) + if dir then + if alt and not csegm.segm.next_a then return end + if not alt and not csegm.segm.next_m then return end + for segmid,segm in ipairs(station) do + if segm == csegm then continue end + if segm.x <= csegm.x then continue end + local txa,tya = GetSegmPos(csegm,alt) + local tx,ty = GetXY(csegm.x+csegm.width*(csegm.invertX or 0),csegm.y) + + if not txa then continue end + --if tx then print(1,segm.x,segm.y,GetSegmPos2(csegm,alt),csegm.invertX,csegm.invertY) end + local sx,sy = GetXY(segm.x+segm.width*(segm.invertX or 0),segm.y) + --if not alt then print(2,x,y,sx,sy,tx,ty,txa,tya) end + if sx == tx and sy == ty then return segm,sx,sy end + if sx == txa and sy == tya then return segm,sx,sy end + sx,sy = GetSegmPos(segm,false) + --if sx and sx == tx and sy == ty then return segm,false end + --if deb then print(sx,x) end + if sx and sx == txa and sy == tya then return segm,sx,sy end + sx,sy = GetSegmPos(segm,true) + --if sx and sx == tx and sy == ty then return segm,false end + if sx and sx == txa and sy == tya and (not alt or segm.y ~= csegm.y) then return segm,sx,sy end + end + else + for segmid,segm in ipairs(station) do + if segm == csegm then continue end + if segm.x >= csegm.x then continue end + local txa,tya = GetSegmPos(segm,alt) + local tx,ty = GetXY(segm.x+segm.width*(segm.invertX or 0),segm.y) + + if not txa then continue end + + local sx,sy = GetXY(csegm.x+csegm.width*(csegm.invertX or 0),csegm.y) + if sx == tx and sy == ty then return segm,sx,sy end + if sx == txa and sy == tya then return segm,sx,sy end + sx,sy = GetSegmPos(csegm,false) + + if sx and sx == txa and sy == tya then return segm,sx,sy end + sx,sy = GetSegmPos(csegm,true) + + if sx and sx == txa and sy == tya and (not alt or segm.y ~= csegm.y) then return segm,sx,sy end + end + --[[ for segmid,segm in ipairs(station) do + if segm == csegm then continue end + if segm.x >= csegm.x then continue end + local txa,tya = GetSegmPos(segm,alt) + local tx,ty = GetXY(segm.x+segm.width*(segm.invertX or 0),segm.y) + if not txa then continue end + --if tx then print(1,segm.x,segm.y,GetSegmPos2(csegm,alt),csegm.invertX,csegm.invertY) end + local sx,sy = GetXY(csegm.x+csegm.width*(csegm.invertX or 0),csegm.y) + --if not alt then print(2,x,y,sx,sy,tx,ty,txa,tya) end + if sx == tx and sy == ty then return segm end + if sx == txa and sy == tya then return segm end + sx,sy = GetSegmPos(csegm,false) + --if sx and sx == tx and sy == ty then return segm,false end + --if deb then print(sx,x) end + if sx and sx == txa and sy == tya then return segm end + sx,sy = GetSegmPos(csegm,true) + --if alt then print(3,x,y,sx,sy,tx,ty) end + --if sx and sx == tx and sy == ty then return segm,false end + if sx and sx == txa and sy == tya and (not alt or segm.y ~= csegm.y) then return segm end + end--]] + end +end + +local function ARMSetNextCompare(posX,posY,segm,nsegm) + local xp,yp = GetSegmPos(segm) + local x,y = GetSegmPos(nsegm) + if sx and posX == x and posY == y then + nsegm.prev = segm + return true + end + + sx,sy = GetSegmPos(nsegm,false) + if sx and posX == sx and posY == sy then + nsegm.next_m = segm + return true + end + if not nsegm.segm.next_a then return end + sx,sy = GetSegmPos(nsegm,true) + if x ~= xp and y ~= yp and sx and posX == sx and posY == sy then + nsegm.next_a = segm + if segm.id == 29 then + local x1,y1 = GetSegmPos(nsegm) + local x2,y2 = GetSegmPos(segm) + print(-2,x1,y1,x2,y2) + end + return true + end +end + +local function ARMSetNext(station) + for csegmid,csegm in ipairs(station) do + for segmid,segm in ipairs(station) do + if segm == csegm then continue end + + local posX,posY = GetSegmPos(csegm) + if ARMSetNextCompare(posX,posY,csegm,segm) then + csegm.prev = segm + --break + end + local posOX,posOY = GetSegmPos(csegm,false) + if ARMSetNextCompare(posOX,posOY,csegm,segm) then + csegm.next_m = segm + --break + end + local posAЧ,posAY = GetSegmPos(segm) + if not csegm.segm.next_a or posX == posAX or posY == posAY then continue end + posOX,posOY = GetSegmPos(csegm,true) + if ARMSetNextCompare(posOX,posOY,csegm,segm) then + csegm.next_a = segm + --break + end + end + end +end +function ENT:ARMMonitor() + if self.FilterMag then + render.PopFilterMag() + render.PopFilterMin() + end + + render.PushFilterMag( TEXFILTER.POINT ) + render.PushFilterMin( TEXFILTER.POINT ) + self.FilterMag = true + surface.SetDrawColor(gray) + surface.DrawRect(0,0,800,600) + local station = self:GetNW2Int("ARM:Station",0) + --draw.SimpleText("ÐРМ ДЫЫСЦЫПЫ","Metrostroi_BUKPSpeed",400, 300,Color(220,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + if station > 0 and Metrostroi.ARMConfigGenerated and Metrostroi.ARMConfigGenerated[station] then + local armTable = Metrostroi.ARMConfigGenerated[station] + for id,segm in ipairs(armTable) do + local u0,v0,u1,v1 = 0,0,1,1 + if segm.invertX then u0,u1 = 1,0 end + if segm.invertY then v0,v1 = 1,0 end + drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"maintex") + +--[[ + local w,h = GetXY(segm.x+segm.width*u0,segm.y) + surface.SetDrawColor(Color(255,0,0)) + surface.DrawLine(w+5*u1-5*u0,h,w,h) + surface.DrawLine(w,h+5,w,h) + local w,h = GetSegmPos(segm,false) + surface.SetDrawColor(Color(255,255,0)) + surface.DrawLine(w-6*u1+6*u0,h,w,h) + surface.DrawLine(w,h-6,w,h) + local w,h = GetSegmPos(segm,true) + if w then + surface.SetDrawColor(Color(0,255,0)) + surface.DrawLine(w-6*u1+6*u0,h,w,h) + surface.DrawLine(w,h-6*v1+6*v0,w,h) + end--]] + end + local w,h = 0,0 + for id,segm in ipairs(armTable) do + local u0,v0,u1,v1 = 0,0,1,1 + if segm.invertX then u0,u1 = 1,0 end + if segm.invertY then v0,v1 = 1,0 end + if Metrostroi.GetARMInfo(station,id,"occup2") then + drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"occup_x") + end + if Metrostroi.GetARMInfo(station,id,"switch_m") then + if Metrostroi.GetARMInfo(station,id,"occup") then drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"occup_m") + elseif Metrostroi.GetARMInfo(station,id,"route") then drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"route_m") end + drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"switch_m") + elseif Metrostroi.GetARMInfo(station,id,"switch_a") then + if Metrostroi.GetARMInfo(station,id,"occup") then drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"occup_a") + elseif Metrostroi.GetARMInfo(station,id,"route") then drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"route_a") end + drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"switch_a") + elseif Metrostroi.GetARMInfo(station,id,"switch_na") then + if Metrostroi.GetARMInfo(station,id,"occup") then + drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"occup_m") + drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"occup_a") + end + drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"switch_an") + drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"switch_mn") + else + if Metrostroi.GetARMInfo(station,id,"occup") then drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"occup_m") + elseif Metrostroi.GetARMInfo(station,id,"route") then drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"route_m") end + end + if segm.signal1 then + local sig = segm.signal1 + local typ = self.Types["tl_"..sig.type] + + local x,y = 100+(segm.x+segm.width)*36,100+segm.y*70-(sig.top and -26 or 15) + local rw,rh = GetRWH(typ,"maintex") + local sx,sy = x-rw-2,y-rh-2 + + draw.SimpleText(sig.name,"Metrostroi_Arial10",x, y-(sig.top and -7 or 15),Color(0,0,0),TEXT_ALIGN_RIGHT,TEXT_ALIGN_BOTTOM) + drawElement(sx,sy,0,0,1,1,typ,"maintex") + local colors = Metrostroi.GetARMInfo(station,id,"signal1") or "" + if sig.type > 1 and Metrostroi.GetARMInfo(station,id,"signal1I") then + drawElement(sx+13*(sig.type-1),sy,0,0,1,1,typ,"full",colorConverter.w) + end + if sig.type > 2 and Metrostroi.GetARMInfo(station,id,"signal1Y") then + drawElement(sx+13*(sig.type-2),sy,0,0,1,1,typ,"full",colorConverter.y) + end + if colors ~= "" and #colors == 1 then + local color = colors:lower() + drawElement(sx,sy,0,0,1,1,typ,"full",colorConverter[color] or Color(0,0,0)) + elseif colors ~= "" and #colors == 2 then + local color = colors:lower() + drawElement(sx,sy,0,0,1,1,typ,"h1",colorConverter[color[1]] or Color(0,0,0)) + drawElement(sx,sy,0,0,1,1,typ,"h2",colorConverter[color[2]] or Color(0,0,0)) + end + end + if segm.signal2 then + local sig = segm.signal2 + local typ = self.Types["tl_"..sig.type] + + local rw,rh = GetRWH(typ,"maintex") + local x,y = 100+(segm.x)*36+2,100+segm.y*70+(sig.top and -38 or 3) + local sx,sy = x-1,y+rh + + draw.SimpleText(sig.name,"Metrostroi_Arial10",x, y+(sig.top and -2 or 20),Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_TOP) + drawElement(sx,sy,1,1,0,0,typ,"maintex") + local colors = Metrostroi.GetARMInfo(station,id,"signal2") or "" + if sig.type > 1 and Metrostroi.GetARMInfo(station,id,"signal2I") then + drawElement(sx+rw-12-13*(sig.type-1),sy,1,1,0,0,typ,"full",colorConverter.w) + end + if sig.type > 2 and Metrostroi.GetARMInfo(station,id,"signal2Y") then + drawElement(sx+rw-12-13*(sig.type-2),sy,1,1,0,0,typ,"full",colorConverter.y) + end + if colors ~= "" and #colors == 1 then + local color = colors:lower() + drawElement(sx+rw-12,sy,1,1,0,0,typ,"full",colorConverter[color] or Color(0,0,0)) + elseif colors ~= "" and #colors == 2 then + local color = colors:lower() + drawElement(sx+rw-12,sy,1,1,0,0,typ,"h1",colorConverter[color[1]] or Color(0,0,0)) + drawElement(sx+rw-12,sy,1,1,0,0,typ,"h2",colorConverter[color[2]] or Color(0,0,0)) + end + end + end + for id,button in ipairs(armTable.buttons) do + local sx,sy = 100+button.x*36,100+button.y*70 + local sw,sh = 15,25 + local xa,ya = 3,12 + if button.type=="r" then + sw,sh = 15,25 + xa,ya = 3,12 + end + local x,y = sx+xa,sy+ya + if Metrostroi.GetARMInfo(station,1000+id,"buttonSelected") then + surface.SetDrawColor(Color(80,80,180)) + elseif Metrostroi.GetARMInfo(station,1000+id,"buttonPressable") then + surface.SetDrawColor(Color(220,220,220)) + else + surface.SetDrawColor(Color(120,120,120)) + end + surface.DrawRect(x,y,sw,sh) + Metrostroi.DrawLine(x,y,x,y+sh,Color(240,240,240),2) + Metrostroi.DrawLine(x-1,y,x+sw,y,Color(240,240,240),2) + Metrostroi.DrawLine(x+sw,y,x+sw,y+sh,Color(60,60,60),2) + Metrostroi.DrawLine(x,y+sh,x+sw+1,y+sh,Color(60,60,60),2) + end + end + for i,v in ipairs(Metrostroi.ARMConfigGenerated) do + if i == station then + surface.SetDrawColor(Color(110,140,170)) + elseif math.InRangeXYR(self.MouseX,self.MouseY,20+(i-1)*30,20,30,20) then + surface.SetDrawColor(Color(80,110,140)) + else + surface.SetDrawColor(Color(100,130,160)) + end + + surface.DrawRect(20+(i-1)*31,20,30,20) + draw.SimpleText(v.shortname or v.id,"Metrostroi_Arial20",35+(i-1)*31, 30,Color(40,60,170),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + --if self.CurrentCamera == 0 then + surface.SetDrawColor(255,255,255) + surface.SetTexture(mouse) + surface.DrawTexturedRectRotated(self.MouseX,self.MouseY,8,8,0) + --end + surface.SetDrawColor(0,0,0,200) + surface.DrawRect(0,0,800,600) + render.PopFilterMag() + render.PopFilterMin() + self.FilterMag = false +--[=[ + local iter = 0 + local function ARMFindSegmSignals(station,segm,dir,signals,checked,restbl,trace,NextAlt) + if not restbl then restbl = {} end + if not checked then checked = {} end + if not trace then trace = {} end + if checked[segm] then return end + checked[segm] = true + local segmIndex = table.insert(trace,{segm.id}) + --trace[segm] = true + + iter = iter + 1 + if iter > 10000 then ARMGenError(Format("Routes generation error. Max iter reached!"),true) return false end + local segmt = segm.segm + local segmM,segmA = segmt.next_m,segmt.next_a + if not segmM then return end + + local NextM = ARMFindNextSegm(station,segm,not NextAlt,dir) + local NextA = ARMFindNextSegm(station,segm,NextAlt,dir) + + + local xp,yp = GetXY(segm.x,segm.y) + if NextA then + local trace= table.Copy(trace) + trace[segmIndex][2] = true + local xn,yn = GetXY(NextA.x,NextA.y) + local xa1,ya1 = GetSegmPos(segm,true) + local xa2,ya2 = GetSegmPos(NextA,true) + --trace[segmIndex][2] = true + local nxt = xa1==xn and ya1==yn or + xa2==xn and ya2==yn or + xa1==xp and ya1==yp or + xa2==xp and ya2==yp or + xa1 and xa2 and xa1==xa2 and ya1==ya2 + --MsgN(Format("->A\n",segm.x,segm.y)) + local signal = dir and NextA.signal2 or NextA.signal1 + --print("A",segm.x,segm.y,NextA.x,NextA.y,signal and signal.name,dir) + if signal and table.HasValue(signals,signal.name) then--and not segmOnA.invertX then + table.insert(restbl,{signal,table.Copy(trace)}) + end + ARMFindSegmSignals(station,NextA,dir,signals,checked,restbl,trace,true) + end + if NextM then + local xn,yn = GetXY(NextM.x,NextM.y) + local xa1,ya1 = GetSegmPos(segm,true) + local xa2,ya2 = GetSegmPos(NextM,true) + local nxt = xa1==xn and ya1==yn or + xa2==xn and ya2==yn or + xa1==xp and ya1==yp or + xa2==xp and ya2==yp or + xa1 and xa2 and xa1==xa2 and ya1==ya2 + local signal = dir and NextM.signal2 or NextM.signal1 + --print("M",segm.x,segm.y,NextM.x,NextM.y,signal and signal.name,dir) + if signal and table.HasValue(signals,signal.name) then--and not segmOnA.invertX then + table.insert(restbl,{signal,table.Copy(trace)}) + end + ARMFindSegmSignals(station,NextM,dir,signals,checked,restbl,table.Copy(trace)) + end + return restbl + end + local station = Metrostroi.ARMConfigGenerated[station] + for _,button in pairs(station.buttons,station.routes["PT64"]) do + if button.type == "r" and station.routes[button.signal] then + --button.pressable = true + local results = ARMFindSegmSignals(station,button.segm,false,station.routes[button.signal]) + if #results == 0 then + results = ARMFindSegmSignals(station,button.segm,true,station.routes[button.signal]) + end + for k,v in pairs(results) do + local i = 0 + for k,v in pairs(v[2]) do + print(v[2]) + end + end + --print(results[1][1].name,results[1][1].segm)--]] + --button.routes = results + end + end--]=] +--[=[ + local x = 0 + local founded = true + local stat = Metrostroi.ARMConfigGenerated[station] + local maxd = 3 + local x = 26-- or math.ceil((CurTime()%10)/10*#stat) + local dir = true-- or CurTime()%20 > 10 + local function findt(station,segm,dir,i,depth,px,py ) + depth = depth or 0 + i = i or 0 + local segmt = segm.segm + local segmM,segmA = segmt.next_m,segmt.next_a + local NextM,NextMX,NextMY = ARMFindNextSegm(station,segm,false,dir) + local NextA,NextAX,NextAY = ARMFindNextSegm(station,segm,true,dir) + local xp,yp = GetXY(segm.x,segm.y) + draw.SimpleText(i,"Metrostroi_Arial20",xp,yp,Color(255,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("%.1f:%.1f",segm.x,segm.y),"Metrostroi_Arial10",xp,yp-20,Color(255,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + local xa1,ya1 = GetSegmPos(segm,true) + if i==4 then print(xa1,ya1,px,py,xa1 == px and ya1 == py) end + local alt = px and py ~= yp and xa1 == px and ya1 == py + if NextA and depth+1 < maxd then + --if i==3 then print(1) end + local xn,yn = GetXY(NextA.x,NextA.y) + local xa2,ya2 = GetSegmPos(NextA,true) + local nalt = xa1==xn and ya1==yn or + xa2==xn and ya2==yn or + xa1==xp and ya1==yp or + xa2==xp and ya2==yp or + xa1 and xa2 and xa1==xa2 and ya1==ya2 + if nalt or alt then surface.SetDrawColor(Color(255,0,0)) + else surface.SetDrawColor(Color(0,255,0)) end + surface.DrawLine(px or xp,py or yp,NextAX or xn,NextAY or yn) + if findt(station,NextA,dir,i+1,depth+1,NextAX,NextAY) then return end + --return true + --if i==5 then print("RES",segm.x,segm.y,NextA.x,NextA.y) end + end + if NextM and depth < maxd then + local xn,yn = GetXY(NextM.x,NextM.y) + local xa2,ya2 = GetSegmPos(NextM,true) + local nalt = xa1==xn and ya1==yn or + xa2==xn and ya2==yn or + xa1==xp and ya1==yp or + xa2==xp and ya2==yp or + xa1 and xa2 and xa1==xa2 and ya1==ya2 + if alt then surface.SetDrawColor(Color(255,255,0)) + else surface.SetDrawColor(Color(0,255,0)) end + surface.DrawLine(px or xp,py or yp,NextMX or xn,NextMY or yn) + if findt(station,NextM,dir,i+1,depth,NextMX,NextMY) then return end + end + end + --findt(stat,stat[x],dir)--]=] + ---[==[ + if Metrostroi.ARMConfigGenerated[station] then + ARMSetNext(Metrostroi.ARMConfigGenerated[station]) + --[=[ for id,segm in ipairs(Metrostroi.ARMConfigGenerated[station]) do + local ws,hs = GetSegmPos(segm) + draw.SimpleText(segm.id,"Metrostroi_Arial20",ws,hs-15--[[ *(math.random()*5)--]] ,Color(0,255,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + if segm.next_m then + local w,h = GetSegmPos(segm.next_m) + surface.SetDrawColor(Color(0,255,0)) + surface.DrawLine(ws,hs,w,h) + surface.DrawLine(ws-6,hs-6,ws+6,hs+6) + surface.DrawLine(ws-6,hs+6,ws+6,hs-6) + surface.DrawLine(w-6,h-2,w+6,h+2) + surface.DrawLine(w-6,h+2,w+6,h-2) + else + local w,h = GetSegmPos(segm) + w = w+segm.width*36/2 + surface.SetDrawColor(Color(255,0,255)) + surface.DrawLine(w-4,h-4,w+4,h+4) + surface.DrawLine(w-4,h+4,w+4,h-4) + continue + end + if segm.next_a then + local w,h = GetSegmPos(segm.next_a) + draw.SimpleText(segm.id,"Metrostroi_Arial20",w,h+15,Color(255,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + surface.SetDrawColor(Color(255,0,0)) + surface.DrawLine(ws,hs,w,h) + surface.DrawLine(ws-7,hs-4,ws+7,hs+4) + surface.DrawLine(ws-7,hs+4,ws+7,hs-4) + surface.DrawLine(w-7,h-2,w+7,h+2) + surface.DrawLine(w-7,h+2,w+7,h-2) + end + end--]=] + local x = 0 + local founded = true + local stat = Metrostroi.ARMConfigGenerated[station] + local maxd = 2 + local x = 21-- or math.ceil((CurTime()%10)/10*#stat) + local dir = true-- or CurTime()%20 > 10 + local function findt(station,segm,dir,i,depth,last ) + depth = depth or 0 + i = i or 0 + local segmP = segm.prev + local segmM,segmA = segm.next_m,segm.next_a + local x,y = GetXY(segm.x,segm.y) + draw.SimpleText(i,"Metrostroi_Arial20",x,y,Color(255,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("%.1f:%.1f",segm.x,segm.y),"Metrostroi_Arial10",x,y-20,Color(255,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + + local mainM = segmM and (dir and segmM.x > segm.x or not dir and segmM.x < segm.x) + local mainP = segmP and (dir and segmP.x > segm.x or not dir and segmP.x < segm.x) + if i==7 and last.next_a then + draw.SimpleText(i,"Metrostroi_Arial20",x,y,Color(0,255,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + local x,y = GetXY(last.x,last.y) + draw.SimpleText(i-1,"Metrostroi_Arial20",x,y,Color(255,255,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --print(last.next_a,segm) + end + + if segmA and mainM and depth+1 < maxd then + --if i==3 then print(1) end + local xn,yn = GetXY(segmA.x,segmA.y) + surface.SetDrawColor(Color(255,0,0)) + surface.DrawLine(x,y,xn,yn) + if findt(station,segmA,dir,i+1,depth+1,segm) then return end + return true + --if i==5 then print("RES",segm.x,segm.y,NextA.x,NextA.y) end + end + if segmM and mainM and depth < maxd then + local xn,yn = GetXY(segmM.x,segmM.y) + surface.SetDrawColor(Color(0,255,0)) + surface.DrawLine(x,y,xn,yn) + if findt(station,segmM,dir,i+1,depth,segm) then return end + end + if segmP and mainP and depth < maxd then + local xn,yn = GetXY(segmP.x,segmP.y) + local alt = last and segm.next_a == last or segmP.next_a == segm + if alt then surface.SetDrawColor(Color(255,255,0)) + else surface.SetDrawColor(Color(0,255,255)) end + surface.DrawLine(x,y,xn,yn) + if findt(station,segmP,dir,i+1,depth,segm) then return end + end + end + findt(stat,stat[x],dir) + end--]==] + --findt(stat,stat[6],false) +end +Metrostroi.GenerateClientProps() \ No newline at end of file diff --git a/lua/entities/_obsolete/gmod_track_arm_/init.lua b/lua/entities/_obsolete/gmod_track_arm_/init.lua new file mode 100644 index 0000000..70a0066 --- /dev/null +++ b/lua/entities/_obsolete/gmod_track_arm_/init.lua @@ -0,0 +1,169 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +function ENT:Initialize() + self:SetModel("models/props_combine/breendesk.mdl") + self.BaseClass.Initialize(self) + self.DriverSeat = self:CreateSeat("driver", Vector(-40, 0, 0), Angle(0, 0, 0), "models//nova/chair_office02.mdl") + self.CursorX = 0 + self.CursorY = 0 + self:CursorMove(0, 0) + self.Station = 0 +end + +hook.Add("AcceptInput", "metrostroi_arm_trigger_check", function(ent, inputName, activator, called, data) + if inputName == "ARMStartTouch" then + called.ARMTriggered = true + print(called, called:GetName(), activator, "Enable") + end + + if inputName == "ARMEndTouch" then + called.ARMTriggered = false + print(called, called:GetName(), activator, "Disable") + end +end) + + +local function GetOccupation(tbl) + for sID,signame in ipairs(tbl) do + if signame[1] == "@" then + local trigger = Metrostroi.ARMGet(signame:sub(2,-1), "trigger") + if not trigger or trigger.ARMTriggered then + return true + end + elseif signame ~= "" then + local signal = Metrostroi.ARMGet(signame, "signal") + if not signal or signal.OccupiedBy and signal.OccupiedBy ~= signal then + return true + end + end + end + return false +end + +function ENT:Think() + local armTbl = Metrostroi.ARMTable + local armConf = Metrostroi.ARMConfigGenerated + local station = armConf[self.Station] + local armTblStation = armTbl[self.Station] + if not station then return end + if not armTblStation or (IsValid(armTblStation.Controller) and armTblStation.Controller ~= self) then return end + armTblStation.Controller = self + for buttonID,button in ipairs(station.buttons) do + --print(button,button.selected) + Metrostroi.ARMSync(self.Station, 1000+buttonID, "buttonPressable",button.pressable) + Metrostroi.ARMSync(self.Station, 1000+buttonID, "buttonSelected",button.selected) + end + for segmID, segm in ipairs(station) do + if type(segm) == "table" then + if segm.occup then + Metrostroi.ARMSync(self.Station, segmID, "occup", GetOccupation(segm.occup) or segm.occupAlt and GetOccupation(segm.occupAlt)) + end + + if segm.occup2 then + Metrostroi.ARMSync(self.Station, segmID, "occup2", GetOccupation(segm.occup2)) + end + Metrostroi.ARMSync(self.Station, segmID, "route", segm.route and true) + + + if segm.switch then + local switch = Metrostroi.ARMGet(segm.switch, "switch") + local main = switch and switch.MainTrack and not switch.AlternateTrack + local alt = switch and not switch.MainTrack and switch.AlternateTrack + Metrostroi.ARMSync(self.Station, segmID, "switch_m", main) + Metrostroi.ARMSync(self.Station, segmID, "switch_a", alt) + Metrostroi.ARMSync(self.Station, segmID, "switch_na", not main and not alt) + end + if segm.signal1 then + local signal = Metrostroi.ARMGet(segm.signal1.name, "signal") + local colors = signal and signal.Colors + if segm.signal1.type > 1 then Metrostroi.ARMSync(self.Station, segmID, "signal1I", signal and signal.InvationSignal) end + if segm.signal1.type > 2 then + local Y = #colors:gsub("[^yY]","") > 1 + if Y then colors = colors:SetChar(colors:find("[yY]"),"") end + Metrostroi.ARMSync(self.Station, segmID, "signal1Y", Y) + end + Metrostroi.ARMSync(self.Station, segmID, "signal1", colors) + end + if segm.signal2 then + local signal = Metrostroi.ARMGet(segm.signal2.name, "signal") + local colors = signal and signal.Colors + if segm.signal2.type > 1 then Metrostroi.ARMSync(self.Station, segmID, "signal2I", signal and signal.InvationSignal) end + if segm.signal2.type > 2 then + local Y = #colors:gsub("[^yY]","") > 1 + if Y then colors = colors:SetChar(colors:find("[yY]"),"") end + Metrostroi.ARMSync(self.Station, segmID, "signal2Y", Y) + end + Metrostroi.ARMSync(self.Station, segmID, "signal2", colors) + end + end + end + + self:NextThink(CurTime() + 0.5) + + return true +end + +function ENT:OnRemove() +end + +function ENT:CursorMove(sys, dX, dY) + self.CursorX = sys == "" and math.Clamp(self.CursorX + dX * 200, 0, 800) or dX + self.CursorY = sys == "" and math.Clamp(self.CursorY + dY * 200, 0, 600) or dY + self:SetNW2Int("CursorX", math.floor(self.CursorX)) + self:SetNW2Int("CursorY", math.floor(self.CursorY)) +end + +function ENT:PanelTouch(state, x, y) + for i, v in ipairs(Metrostroi.ARMConfig) do + if math.InRangeXYR(self.CursorX, self.CursorY, 20 + (i - 1) * 30, 20, 30, 20) then + self.Station = i + self:SetNW2Int("ARM:Station", i) + end + end + if not state then return end + local RouteChoosing = self.RouteChoosing + self.RouteChoosing = nil + if RouteChoosing then + print("DISABLE") + for k,v in pairs(RouteChoosing.routes) do + if v[1].button then + v[1].button.selected = false + elseif v[1].isbutton then + v[1].selected = false + end + end + end + local confGenStation = Metrostroi.ARMConfigGenerated[self.Station] + for k,button in pairs(confGenStation.buttons) do + local sx,sy = 100+button.x*36,100+button.y*70 + if button.type == "r" then + local sw,sh = 15,25 + local xa,ya = 3,12 + local x,y = sx+xa,sy+ya + if RouteChoosing then + if math.InRangeXYR(self.CursorX, self.CursorY, x,y,sw,sh) then + for k,v in ipairs(RouteChoosing.routes) do + if v[1].button and button == v[1].button or v[1].isbutton and button==v[1] then + Metrostroi.CentralisationPrepareRoute(self.Station,v) + end + end + end + elseif not self.RouteChoosing and button.pressable then + if math.InRangeXYR(self.CursorX, self.CursorY, x,y,sw,sh) then + self.RouteChoosing = button + for k,v in ipairs(button.routes) do + print(v[1],v[1].name,v[1].button) + if v[1].button then + v[1].button.selected = true + elseif v[1].isbutton then + v[1].selected = true + print(2) + end + end + end + end + end + end +end \ No newline at end of file diff --git a/lua/entities/_obsolete/gmod_track_arm_/shared.lua b/lua/entities/_obsolete/gmod_track_arm_/shared.lua new file mode 100644 index 0000000..604429a --- /dev/null +++ b/lua/entities/_obsolete/gmod_track_arm_/shared.lua @@ -0,0 +1,656 @@ +ENT.Type = "anim" + +--Inherit subway base for some need functions +ENT.Base = "gmod_subway_base" +ENT.NoTrain = true + +ENT.PrintNameTranslated = "Entities.ARM" +ENT.Category = "Metrostroi" + +ENT.Spawnable = false +ENT.AdminSpawnable = true + +ENT.Cameras = { + {Vector(-18+3,0,43+2),Angle(0,0,0),"ARM.Monitor1",true}, +} +ENT.Types = { + --Main segments + [0.25]={ + maintex = {"metrostroi_arm/sec025",w=8,h=8,rw=7,rh=8,}, + occup_m = {"metrostroi_arm/sec025_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/sec025_m",col=Color(39,103,63)}, + width = 0.25, + next_m = {x=0.25,y=0} + }, + [0.5]={ + maintex = {"metrostroi_arm/sec05",w=16,h=8,rw=16,rh=8,}, + occup_m = {"metrostroi_arm/sec05_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/sec05_m",col=Color(39,103,63)}, + width = 0.5, + next_m = {x=0.5,y=0} + }, + [1]={ + maintex = {"metrostroi_arm/sec1",w=64,h=8,rw=34,rh=8,}, + occup_m = {"metrostroi_arm/sec1_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/sec1_m",col=Color(39,103,63)}, + width = 1, + next_m = {x=1,y=0} + }, + [2]={ + maintex = {"metrostroi_arm/sec2",w=128,h=8,rw=70,rh=8,}, + occup_m = {"metrostroi_arm/sec2_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/sec2_m",col=Color(39,103,63)}, + width = 2, + next_m = {x=2,y=0} + }, + [3]={ + maintex = {"metrostroi_arm/sec3",w=128,h=8,rw=106,rh=8,}, + occup_m = {"metrostroi_arm/sec3_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/sec3_m",col=Color(39,103,63)}, + width = 3, + next_m = {x=3,y=0} + }, + [4]={ + maintex = {"metrostroi_arm/sec4",w=256,h=8,rw=142,rh=8,}, + occup_m = {"metrostroi_arm/sec4_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/sec4_m",col=Color(39,103,63)}, + width = 4, + next_m = {x=4,y=0} + }, + [5]={ + maintex = {"metrostroi_arm/sec5",w=256,h=8,rw=178,rh=8,}, + occup_m = {"metrostroi_arm/sec5_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/sec5_m",col=Color(39,103,63)}, + width = 5, + next_m = {x=5,y=0} + }, + --Switches and helpers + sw = { + maintex = {"metrostroi_arm/switch",w=128,h=128,rw=70,rh=78,}, + occup_m = {"metrostroi_arm/switch_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/switch_m",col=Color(39,103,63)}, + occup_a = {"metrostroi_arm/switch_a",col=Color(255,255,255)}, + route_a = {"metrostroi_arm/switch_a",col=Color(39,103,63)}, + switch_m = {"metrostroi_arm/switch_ms",col=Color(41,202,26)}, + switch_a = {"metrostroi_arm/switch_as",col=Color(240,240,71)}, + switch_mn = {"metrostroi_arm/switch_ms",col=Color(200,50,50)}, + switch_an = {"metrostroi_arm/switch_as",col=Color(200,50,50)}, + width = 2, + next_m = {x=2,y=0}, + next_a = {x=2,y=1}, + }, + ["2sw"] = { + maintex = {"metrostroi_arm/2-switch_half",w=128,h=256,rw=70,rh=143,}, + occup_m = {"metrostroi_arm/2-switch_half_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/2-switch_half_m",col=Color(39,103,63)}, + occup_a = {"metrostroi_arm/2-switch_half_a",col=Color(255,255,255)}, + route_a = {"metrostroi_arm/2-switch_half_a",col=Color(39,103,63)}, + switch_m = {"metrostroi_arm/2-switch_half_ms",col=Color(41,202,26)}, + switch_a = {"metrostroi_arm/2-switch_half_as",col=Color(240,240,71)}, + switch_mn = {"metrostroi_arm/2-switch_half_as",col=Color(200,50,50)}, + switch_an = {"metrostroi_arm/2-switch_half_ms",col=Color(200,50,50)}, + width = 2, + next_m = {x=2,y=0}, + next_a = {x=2,y=2}, + }, + ["2swm"] = { + maintex = {"metrostroi_arm/2-switch-middle_half",w=128,h=128,rw=70,rh=73,}, + occup_m = {"metrostroi_arm/2-switch-middle_half_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/2-switch-middle_half_m",col=Color(39,103,63)}, + occup_a = {"metrostroi_arm/2-switch-middle_half_a",col=Color(255,255,255)}, + route_a = {"metrostroi_arm/2-switch-middle_half_a",col=Color(39,103,63)}, + switch_m = {"metrostroi_arm/2-switch-middle_half_ms",col=Color(41,202,26)}, + switch_a = {"metrostroi_arm/2-switch-middle_half_as",col=Color(240,240,71)}, + switch_mn = {"metrostroi_arm/2-switch-middle_half_ms",col=Color(200,50,50)}, + switch_an = {"metrostroi_arm/2-switch-middle_half_as",col=Color(200,50,50)}, + width = 2, + next_m = {x=2,y=0}, + next_a = {x=1.5,y=1}, + }, + ["4sw"] = { + maintex = {"metrostroi_arm/4-switch_quarter",w=128,h=256,rw=73,rh=143,x=-3,}, + occup_m = {"metrostroi_arm/4-switch_quarter_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/4-switch_quarter_m",col=Color(39,103,63)}, + occup_a = {"metrostroi_arm/4-switch_quarter_a1",col=Color(255,255,255)}, + route_a = {"metrostroi_arm/4-switch_quarter_a1",col=Color(39,103,63)}, + occup_x = {"metrostroi_arm/4-switch_quarter_a2",col=Color(255,255,255)}, + route_x = {"metrostroi_arm/4-switch_quarter_a2",col=Color(39,103,63)}, + switch_m = {"metrostroi_arm/4-switch_quarter_ms",col=Color(41,202,26)}, + switch_a = {"metrostroi_arm/4-switch_quarter_as",col=Color(240,240,71)}, + switch_mn = {"metrostroi_arm/4-switch_quarter_ms",col=Color(200,50,50)}, + switch_an = {"metrostroi_arm/4-switch_quarter_as",col=Color(200,50,50)}, + width = 2, + next_m = {x=2,y=0}, + next_a = {x=2,y=2}, + acc_x = ">", + acc_y = "!", + }, + ["4sws"] = { + maintex = {"metrostroi_arm/4-switch_quarter_small",w=64,h=128,rw=53,rh=78,x=-1,}, + occup_m = {"metrostroi_arm/4-switch_quarter_small_m",col=Color(255,255,255),x=-1,}, + route_m = {"metrostroi_arm/4-switch_quarter_small_m",col=Color(39,103,63),x=-1,}, + occup_a = {"metrostroi_arm/4-switch_quarter_small_a",col=Color(255,255,255),x=-1,}, + route_a = {"metrostroi_arm/4-switch_quarter_small_a",col=Color(39,103,63),x=-1,}, + switch_m = {"metrostroi_arm/4-switch_quarter_small_ms",col=Color(41,202,26)}, + switch_a = {"metrostroi_arm/4-switch_quarter_small_as",col=Color(240,240,71)}, + switch_mn = {"metrostroi_arm/4-switch_quarter_small_ms",col=Color(200,50,50)}, + switch_an = {"metrostroi_arm/4-switch_quarter_small_as",col=Color(200,50,50)}, + width = 1.5, + next_m = {x=1.5,y=0}, + next_a = {x=1.5,y=1}, + acc_x = ">", + acc_y = "!", + }, + ofd = { + maintex = {"metrostroi_arm/offset_down",w=64,h=256,rw=57,rh=143,}, + occup_m = {"metrostroi_arm/offset_down_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/offset_down_m",col=Color(39,103,63)}, + width = 2, + next_m = {x=2,y=2}, + }, + ofds = { + maintex = {"metrostroi_arm/offsed_down_small",w=128,h=128,rw=70,rh=78,}, + occup_m = {"metrostroi_arm/offsed_down_small_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/offsed_down_small_m",col=Color(39,103,63)}, + width = 2, + next_m = {x=2,y=1}, + }, + ysw = { + maintex = {"metrostroi_arm/Y-switch_half",w=128,h=128,rw=70,rh=108,}, + occup_m = {"metrostroi_arm/Y-switch_half_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/Y-switch_half_m",col=Color(39,103,63)}, + occup_a = {"metrostroi_arm/Y-switch_half_a",col=Color(255,255,255)}, + route_a = {"metrostroi_arm/Y-switch_half_a",col=Color(39,103,63)}, + switch_m = {"metrostroi_arm/Y-switch_half_ms",col=Color(41,202,26)}, + switch_a = {"metrostroi_arm/Y-switch_half_as",col=Color(240,240,71)}, + switch_mn = {"metrostroi_arm/Y-switch_half_ms",col=Color(200,50,50)}, + switch_an = {"metrostroi_arm/Y-switch_half_as",col=Color(200,50,50)}, + width = 2, + next_m = {x=2,y=0}, + next_a = {x=2,y=1}, + }, + --Signals + tl_1 = { + maintex = {"metrostroi_arm/tl_1",w=32,h=16,rw=21,rh=13}, + full = {"metrostroi_arm/tl_f",w=16,h=16,rw=12,rh=12}, + h1 = {"metrostroi_arm/tl_h1",w=16,h=16,rw=12,rh=12}, + h2 = {"metrostroi_arm/tl_h2",w=16,h=16,rw=12,rh=12}, + }, + tl_2 = { + maintex = {"metrostroi_arm/tl_2",w=64,h=16,rw=34,rh=13}, + full = {"metrostroi_arm/tl_f",w=16,h=16,rw=12,rh=12}, + h1 = {"metrostroi_arm/tl_h1",w=16,h=16,rw=12,rh=12}, + h2 = {"metrostroi_arm/tl_h2",w=16,h=16,rw=12,rh=12}, + }, + tl_3 = { + maintex = {"metrostroi_arm/tl_3",w=64,h=16,rw=47,rh=13}, + full = {"metrostroi_arm/tl_f",w=16,h=16,rw=12,rh=12}, + h1 = {"metrostroi_arm/tl_h1",w=16,h=16,rw=12,rh=12}, + h2 = {"metrostroi_arm/tl_h2",w=16,h=16,rw=12,rh=12}, + }, +} +if CLIENT then + for i,segm in pairs(ENT.Types) do + for k,tex in pairs(segm) do + if type(tex) ~= "table" or type(tex[1]) ~= "string" then continue end + tex.mat = surface.GetTextureID(tex[1]) + end + segm.id = i + end +end + +-------------- +-- Syntax of table +-- { +-- station = "ID,abbreviation,full name" +-- First line of segments +-- {"segment type:occupation checkers,...,occupation checkers:lights:...:lights"}, +-- Second line of segments +-- {x=x indent,skip=y indent(skips y segments vertically),"segment type:occupation checkers main,...,occupation checkers main:occupation checkers alt,...,occupation checkers alt:lights:...:lights"}, +-- } +-- segment type can have > or ! on start, when we want mirror it vertically or horisontally +-- Occupation checkers can be triggers(have @ in start of trigger name) or signals +-- Lights can be empty, if we want take light name from occupation checkers +-- Lights can have ! when stay in right direction or !! when stay in opposite direction +-- Lights can have > when we want switch light location from bottom to top +-- Examples +--{ +-- station = "001,ST,Station name", +-- { +-- {"1:L1:!","1:L3:!","sw:@sw1trigger:@sw3trigger"} +-- {x=1,"1:L2",">sw:@sw2trigger:@sw3rigger"}, +-- } +--} +-------------- +Metrostroi.ARMConfig = { + { + station = "451,ВБ,УоллеÑа брина", + {"0.5:1","0.5:1","0.5:1","0.5:1","1:1","1:1","1:1","sw:1","3:1","3:1"}, + {x=7,"0.5:1","4sws:1",">4sws:1","1:1","1:1"},{skip=1}, + {x=7,"0.5:1","!4sws:1",">!4sws:1","1:1","1:1"}, + {"0.5:1","0.5:1","0.5:1","0.5:1","1:1","1:1","1:1","!sw:1","3:1","3:1"}, + },{ + station="915,РЧ,РечнаÑ", + {x=3.5,"0.5:RX22","1:RX22","1:RX20","0.5:RX98","4sw:::RX1:0",">4sw:::RX3:","1","2","2","1","1"},{skip=3}, + {"1:201","0.5:203","0.5:205","0.5:207","0.5:209","0.5:211","0.5:213","1:215","1:217","0.5:219","!4sw:::RX2::!!2RX95",">!4sw:::RX4:","1","2","2","1","1"}, + },{ + station="110,МД,МеждународнаÑ", + {"1:19:!1","1:17:!1","1:15:!1","1:13:!1","3:11:!>1","sw:@wt_md_s1_1,@wt_md_s1_2:@wt_md_s1_3:MD1:!!>2D:!>2G","5:@wt_md_t1"}, + {x=9,"4sws:@wt_md_s3::MD3",">4sws:@wt_md_s5::MD5:!2MD1","2:@wt_md_t3"},{skip=1}, + {x=9,"!4sws:@wt_md_s4::MD4",">!4sws:@wt_md_s6::MD6:!>2MD2","2:@wt_md_t4"}, + {"1:MD16:!!2","1:MD14:!!2","1:MD12:!!2","1:MD10:!!2:!1 OP","1:MD8:!!2","1:MD8A","1:MD8B","!sw:@wt_md_s2_1,@wt_md_s2_2:@wt_md_s2_3:MD2:!!2MD6:!2E","5:@wt_md_t2"}, + buttons = { + {type="r",y=4-0.6 ,x=4, signal=" OP"}, + {type="r",y=4 ,x=6+0.4, signal="MD6"}, + {type="r",y=4-0.6 ,x=9, signal="E"}, + {type="r",y=3 ,x=14, signal="4I",target={12,3}}, + {type="r",y=1-0.6 ,x=14, signal="3I",target={12,1}}, + {type="r",y=3 ,x=12, signal="MD2"}, + {type="r",y=1-0.6 ,x=12, signal="MD1"}, + --{type="r",y=0-0.6 ,x=4, signal="13"}, + {type="r",y=0-0.6 ,x=6+0.4, signal="D",target={4,0}}, + {type="r",y=0 ,x=9, signal="G"}, + }, + routes = { + MD6={"4I","3I"}, + E={" OP"}, + MD2={" OP","D"}, + MD1={" OP","13"}, + D={"4I","3I"}, + G={"13"}, + } + },{ + station="112,ПТ,ПолитехничеÑкаÑ", + {x=1,"1:PT2TB","2:PT2TA","2:PT2T:!!2PT2","2:PT4SA:!!2PT4",">2swm:@wt_pt_s4_1,@wt_pt_s4_2,@wt_pt_s4_3::PT4:!3PT968M:!!2G ","1:PT966A","2:PT966:!>2","sw:@wt_pt_s6_2,@wt_pt_s6_3::PT6:!>2PT964:!!>3A","1:962"}, + {x=15,"1:PT6SS","1:963"}, + {x=1,"1:77:!1","1:75:!1","1:73:!1","1:71:!>1",">2swm:@wt_pt_s1_1::PT1:!!>2B","!2swm:@wt_pt_s3_1:@wt_pt_s3_2:PT3:!>2PT69","1:PT67M:!2","1:PT65B","1:PT65A","1:PT65:!2","1:PT63:!2:!!1 OP ","1:PT61:!2","1:PT59:!2","1:PT57:!2"},{skip=1}, + {"1:PT70:!!2:!1 OP2 ","1:PT68:!!2","2:@wt_pt_s2_3:!!2PT66","!2swm:@wt_pt_s2_1:@wt_pt_s2_2:PT2:!!3PT64","2","2:62:!!1","1:60:!!1","2:60A","1:58M:!!1","1:56:!!1","1:54:!!1","1: 52:!!1"}, + {}, + labels = { + + }, + buttons = { + {type="r",y=0-0.6 ,x=1, signal="3T",target={1,0},flip=true}, + {type="r",y=0 ,x=3+0.4,signal="PT2",target={1,0},flip=true}, + + {type="r",y=4-0.6 ,x=1, signal=" OP2 "}, + {type="r",y=4 ,x=-1+0.4, signal="PT70"}, + {type="r",y=4 ,x=3+0.4, signal="2P",target={6,4}}, + --{type="r",y=4 ,x=7+0.4, signal="62"}, + {type="r",y=2 ,x=5, signal="71"}, + {type="r",y=2-0.6 ,x=4+0.4, signal="B",target={5,2}}, + {type="r",y=2-0.6 ,x=17, signal="PT57"}, + {type="r",y=2-0.6 ,x=10, signal="PT67M"}, + {type="r",y=2 ,x=12+0.4,signal=" OP "}, + {type="r",y=0-0.6 ,x=10, signal="PT968M",flip=true}, + {type="r",y=0 ,x=15, signal="PT964",flip=true}, + {type="r",y=1-0.6 ,x=15, signal="4O",target={15,1},flip=true}, + {type="r",y=0-0.6 ,x=12+0.4,signal="A",flip=true}, + }, + routes = { + PT2 = {"A"}, + PT70 = {" OP ","A","2P"}, + --PT64 = {" OP ","A","PT64"}, + B = {" OP ","A"}, + PT57 = {"PT67M"}, + PT964 = {"PT968M"}, + PT67M = {"71"," OP2 "}, + PT968M = {"3T","71"," OP2 "}, + A={"4O"} + } + },{ + station="115,ОК,ОктÑбрьÑкаÑ", + {"1","1","1","1","3","sw:::OK1","1"}, + {x=9,"4sws:::OK3",">4sws:::OK5","1"},{skip=1}, + {x=9,"!4sws:::OK4",">!4sws:::OK6","1"}, + {"1","1","1","1","3","!sw:::OK2","5"}, + } +} + +print("MetrostroiARM:Generating ARM table...") +local errors,warnings = 0,0 +local function ARMGenError(text,err) + MsgC(Color(255,err and 0 or 255,0),"MetrostroiARM:"..text.."\n") + ErrorNoHalt() + if err then errors = errors + 1 else warnings = warnings + 1 end +end + +local function ParseARMTable(text,station,line,segm) + local resultTbl = {} + + local tbl = string.Explode(":",text) + + local typ = tbl[1] + if typ:find("^[>!]") then + resultTbl.invertX = typ:find(">") + resultTbl.invertY = typ:find("!") + typ = typ:gsub("^[>!]+","") + end + local segmTyp = ENT.Types[tonumber(typ) or typ] + if not segmTyp then return {error = 1,type = tbl[1]} end + table.remove(tbl,1) + + for i,str in ipairs(tbl) do + if str:find(",") then + tbl[i] = string.Explode(",",str) + end + if str:sub(1,2) == "!!" then + resultTbl.signal2 = str:sub(3,-1) + elseif str[1] == "!" then + resultTbl.signal1 = str:sub(2,-1) + end + end + resultTbl.occup = type(tbl[1]) == "table" and tbl[1] or {tbl[1]} + if segmTyp.occup_a then + resultTbl.occupAlt = type(tbl[2]) == "table" and tbl[2] or {tbl[2]} + resultTbl.switch = tbl[3] + if segmTyp.occup_x then + resultTbl.occup2 = type(tbl[4]) == "table" and tbl[4] or {tbl[4]} + end + end + + if resultTbl.signal1 then + local signal = resultTbl.signal1:gsub("^[>]+","") + local top = resultTbl.signal1:find("^>") + + local typ = tonumber(signal[1]) + local name = signal:sub(2,-1) + if not typ then + ARMGenError(Format("Parser warning. Signal type in id station %d line %d segm %d segment not found. Using default 1",station,line,segm),false) + name = signal[1]..name + elseif typ < 1 or typ > 3 then + ARMGenError(Format("Parser warning. Signal type in id station %d line %d segm %d segment have wrong ID, must be in range 1..3. Using default 1",station,line,segm),false) + typ = 1 + end + if name == "" then name = resultTbl.occup[1] end + resultTbl.signal1 = {name=name,type=typ or 1,top = top,segm=resultTbl} + end + if resultTbl.signal2 then + local signal = resultTbl.signal2:gsub("^[>]+","") + local top = resultTbl.signal2:find("^>") + local typ = tonumber(signal[1]) + local name = signal:sub(2,-1) + if not typ then + ARMGenError(Format("Parser warning. Signal type in id station %d line %d segm %d segment not found. Using default 1",station,line,segm),false) + name = signal[1]..name + elseif typ < 1 or typ > 3 then + ARMGenError(Format("Parser warning. Signal type in id station %d line %d segm %d segment have wrong ID, must be in range 1..3. Using default 1",station,line,segm),false) + typ = 1 + end + if name == "" then name = resultTbl.occup[1] end + resultTbl.signal2 = {name=name,type=typ or 1,top = top,segm=resultTbl} + end + resultTbl.type = typ + resultTbl.width = segmTyp.width or 1 + resultTbl.segm = segmTyp + return resultTbl +end + + +Metrostroi.ARMConfigGenerated = {} +local id = 0 +for i,station in ipairs(Metrostroi.ARMConfig) do + if not Metrostroi.ARMConfigGenerated[i] then Metrostroi.ARMConfigGenerated[i] = {} end + local genStation = Metrostroi.ARMConfigGenerated[i] + local y = 0 + + MsgC(Color(0, 222, 255),"MetrostroiARM:Solving station ",i,"\n") + if #station == 0 then ARMGenError(Format("Parser warning. Empty station %d! Skipping...",i),false) continue end + if not station.station then ARMGenError(Format("Parser error. Can't find station name in station %d! Skipping...",i),true) continue end + + local stationTbl = string.Explode(",",station.station) + if not stationTbl or #stationTbl < 3 or not tonumber(stationTbl[1]) then ARMGenError(Format("Parser error. Malformed station data in station %d! Skipping...",i),true) continue end + + genStation.id = stationTbl[1] + genStation.shortname = stationTbl[2] + genStation.name = stationTbl[3] + genStation.buttons = {} + genStation.routes = station.routes or {} + for lineID,line in ipairs(station) do + local x = line.x or 0 + for segmID,segm in ipairs(line) do + if type(segm) ~= "string" then + ARMGenError(Format("Parser error on station %d line %d segm %d, excepted string,got %s. Skipping segment...",i,lineID,segmID,type(segm)),true) + continue + end + local segmTbl= ParseARMTable(segm,i,lineID,segmID) + if segmTbl.error then + ARMGenError(Format("Parser warning. Skipping station %d line %d segm %d segment, type error(type '%s' not found)",i,lineID,segmID,segmTbl.type),false) + continue + end + segmTbl.x = x + segmTbl.y = y + segmTbl.id = table.insert(genStation,segmTbl) + x = x + (segmTbl.width or 1) + end + y = y + (line.skip or 1) + end + if station.buttons then + for _,button in pairs(station.buttons) do + button.pressable = false + button.selected = false + button.isbutton = true + if button.type == "r" then + button.segm = ENT.Types.button_normal + for k,v in ipairs(genStation) do + if v.signal1 and v.signal1.name == button.signal then + button.segm = v + v.signal1.button = button + break + end + if v.signal2 and v.signal2.name == button.signal then + button.segm = v + v.signal2.button = button + break + end + if button.target and button.target[1] == v.x and button.target[2] == v.y then + button.segm = v + v.button = button + if v.button then + v.button = nil + v.buttons = {v.button,button} + end + break + end + end + end + table.insert(genStation.buttons,button) + end + end +end + +local function GetXY(x,y) + return 100+x*36,100+y*70 +end + +local function GetSegmPos(segm,alt) + local x,y = segm.x,segm.y + local segmt = segm.segm + local u0,v0,u1,v1 = 0,0,1,1 + if segm.invertX then u0,u1 = 1,0 end + if segm.invertY then v0,v1 = 1,0 end + if alt == nil then + return GetXY(x+segm.width*u0,y) + elseif alt == false and segmt.next_m then + return GetXY(x+segmt.next_m.x-segm.width*u0,y+segmt.next_m.y) + --print(123,x,y) + elseif alt and segmt.next_a then + return GetXY(x+segmt.next_a.x*u1-segmt.next_a.x*u0+segmt.width*u0,y+segmt.next_a.y*v1-segmt.next_a.y*v0) + end +end + + + +local function ARMSetNextCompare(posX,posY,segm,nsegm) + local xp,yp = GetSegmPos(segm) + local x,y = GetSegmPos(nsegm) + if sx and posX == x and posY == y then + nsegm.prev = segm + return true + end + + sx,sy = GetSegmPos(nsegm,false) + if sx and posX == sx and posY == sy then + nsegm.next_m = segm + return true + end + if not nsegm.segm.next_a then return end + sx,sy = GetSegmPos(nsegm,true) + if x ~= xp and y ~= yp and sx and posX == sx and posY == sy then + nsegm.next_a = segm + if segm.id == 29 then + local x1,y1 = GetSegmPos(nsegm) + local x2,y2 = GetSegmPos(segm) + print(-2,x1,y1,x2,y2) + end + return true + end +end + +local function ARMSetNext(station) + for csegmid,csegm in ipairs(station) do + for segmid,segm in ipairs(station) do + if segm == csegm then continue end + + local posX,posY = GetSegmPos(csegm) + if ARMSetNextCompare(posX,posY,csegm,segm) then + csegm.prev = segm + --break + end + local posOX,posOY = GetSegmPos(csegm,false) + if ARMSetNextCompare(posOX,posOY,csegm,segm) then + csegm.next_m = segm + --break + end + local posAX,posAY = GetSegmPos(segm) + if not csegm.segm.next_a or posX == posAX or posY == posAY then continue end + posOX,posOY = GetSegmPos(csegm,true) + if ARMSetNextCompare(posOX,posOY,csegm,segm) then + csegm.next_a = segm + --break + end + end + end +end +for i,st in ipairs(Metrostroi.ARMConfigGenerated) do ARMSetNext(st) end + + +local function tcopy(from) + local t = {} + for k,v in pairs(from) do + t[k] = v + end + return t +end +local iter = 1 +local function ARMFindSegmSignals(station,segm,dir,signals,last,checked,restbl,trace) + if not restbl then restbl = {} end + if not checked then checked = {} end + if not trace then trace = {} end + if checked[segm] then return end + checked[segm] = true + local segmIndex = table.insert(trace,{segm.id}) + --trace[segm] = true + + iter = iter + 1 + if iter > 10000 then ARMGenError(Format("Routes generation error. Max iter reached!"),true) return false end + local segmM,segmA = segm.next_m,segm.next_a + local segmP = segm.prev + + + local mainM = segmM and (dir and segmM.x > segm.x or not dir and segmM.x < segm.x) + local mainP = segmP and (dir and segmP.x > segm.x or not dir and segmP.x < segm.x) + if segmA and mainM then + local trace= table.Copy(trace) + + trace[segmIndex][2] = true + local signal = dir and segmA.signal2 or segmA.signal1 + local button = segmA.button + + if signal and table.HasValue(signals,signal.name) then + table.insert(restbl,{signal,table.Copy(trace)}) + elseif button and table.HasValue(signals,button.signal) then + table.insert(trace,{segmA.id}) + table.insert(restbl,{button,table.Copy(trace)}) + end + ARMFindSegmSignals(station,segmA,dir,signals,segm,checked,restbl,trace) + end + if segmM and mainM then + local signal = dir and segmM.signal2 or segmM.signal1 + local button = segmM.button + if signal and table.HasValue(signals,signal.name) then + table.insert(restbl,{signal,table.Copy(trace)}) + elseif button and table.HasValue(signals,button.signal) then + table.insert(trace,{segmM.id}) + table.insert(restbl,{button,table.Copy(trace)}) + end + ARMFindSegmSignals(station,segmM,dir,signals,segm,checked,restbl,trace) + end + if segmP and mainP then + trace[segmIndex][2] = last and segm.next_a == last or nil-- or segmP.next_a == segm or nil + local signal = dir and segmP.signal2 or segmP.signal1 + local button = segmP.button + if signal and table.HasValue(signals,signal.name) then + table.insert(restbl,{signal,table.Copy(trace)}) + elseif button and table.HasValue(signals,button.signal) then + table.insert(trace,{segmP.id}) + table.insert(restbl,{button,table.Copy(trace)}) + end + ARMFindSegmSignals(station,segmP,dir,signals,segm,checked,restbl,trace) + end + return restbl +end + +for i,station in ipairs(Metrostroi.ARMConfigGenerated) do + print("STATION",i) + for _,button in pairs(station.buttons) do + if button.type == "r" and station.routes[button.signal] then + print(button.signal,button.segm) + button.pressable = true + local results = ARMFindSegmSignals(station,button.segm,false,station.routes[button.signal]) + if #results == 0 then + results = ARMFindSegmSignals(station,button.segm,true,station.routes[button.signal]) + end + for k,v in pairs(results) do + local i = 0 + for k,v in pairs(v[2]) do i = i + 1 end + print("--",k,v,v[1],v[2],i) + end + --print(results[1][1].name,results[1][1].segm)--]] + button.routes = results + end + --[[ if segm.signal2 then + local result = ARMFindNextSegm(station,segm,true,nil,nil,segm.signal2.name=="PT640") + if result and #result > 0 then + print(segm.signal2.name.."->") + for k,v in ipairs(result) do print(" "..v.name) end + end + end + if segm.signal1 then + local result = ARMFindNextSegm(station,segm,false,nil,nil,segm.signal1.name=="MD01") + if result and #result > 0 then + print(segm.signal1.name.."->") + for k,v in ipairs(result) do print(" "..v.name) end + end + end--]] + end + +end +if errors == 0 and warnings == 0 then + MsgC(Color(0,255,0),"MetrostroiARM:Generate finished without errors and warnings.\n") +elseif errors == 0 then + MsgC(Color(255,255,0),"MetrostroiARM:Generate finished with "..warnings.." warnings.\n") +else + MsgC(Color(255,0,0),"MetrostroiARM:Generate finished with "..errors.." errors and "..warnings.." warnings!\n") +end +--PrintTable(Metrostroi.ARMConfigGenerated) + +for k,v in ipairs(Metrostroi.ARMConfigGenerated) do + Metrostroi.ARMTable[k] = { + occChecks = {}, + net = {}, + signal = {}, + switch = {}, + routes = {}, + } +end \ No newline at end of file diff --git a/lua/entities/_obsolete/gmod_track_arm__/cl_init.lua b/lua/entities/_obsolete/gmod_track_arm__/cl_init.lua new file mode 100644 index 0000000..7b9ac56 --- /dev/null +++ b/lua/entities/_obsolete/gmod_track_arm__/cl_init.lua @@ -0,0 +1,700 @@ +include("shared.lua") + +-------------------------------------------------------------------------------- +ENT.ClientProps = {} +ENT.ButtonMap = {} +ENT.AutoAnims = {} +ENT.AutoAnimNames = {} +ENT.ClientSounds = {} +ENT.ClientPropsInitialized = false + + +ENT.ButtonMap["ARM"] = { + pos = Vector(-4.9,9.1,50.3), + ang = Angle(0,-90-1,90), + width = 800, + height = 600, + scale = 0.02*1.2, + mouse = true +} +ENT.ClientProps["ARMPK"] = { + model = "models/cyber_metrostroi/pc_arm/pc_screen.mdl", + pos = Vector(-5,0,31.2), + ang = Angle(0,180,0), + bscale = Vector(4/3,1,1), +} +ENT.ClientProps["ARMMonitor"] = { + model = "models/cyber_metrostroi/pc_arm/pc_body.mdl", + pos = Vector(-5,15,0), + ang = Angle(0,180,0), + bscale = Vector(4/3,1,1), +} +ENT.ClientProps["ARMKeyboard"] = { + model = "models/cyber_metrostroi/pc_arm/pc_keyboard.mdl", + pos = Vector(-15,-2,31), + ang = Angle(0,180,0), +} +ENT.ClientProps["ARMMouse"] = { + model = "models/cyber_metrostroi/pc_arm/pc_mouse.mdl", + pos = Vector(-18,-20,32), + ang = Angle(0,180,0), +} +ENT.ClientProps["ARMBreen"] = { + model = "models/props_combine/breenglobe.mdl", + pos = Vector(-11,30,39.5), + ang = Angle(0,-180+45,0), +} + +function ENT:Initialize() + self.BaseClass.Initialize(self) + self.ARM = self:CreateRT("ARM",1024,1024) + for k,v in pairs(self.Types) do + for i,tex in pairs(v) do + if type(tex) == "table" and type(tex[1]) == "string" then + tex.mat = surface.GetTextureID(tex[1]) + end + end + end +end + +function ENT:CamMoved() + self:HandleMouse(false) + gui.EnableScreenClicker(self.CurrentCamera ~= 0) +end + +function ENT:Think() + self.BaseClass.Think(self) + if not self.RenderClientEnts or self.CreatingCSEnts then + return + end + + if not self.ARM then return end + --self.MouseX = 0 + --self.MouseY = 0 + self.MouseX = self:GetNW2Int("CursorX",0) + self.MouseY = self:GetNW2Int("CursorY",0) + render.PushRenderTarget(self.ARM,0,0,1024, 1024) + render.Clear(0, 0, 0, 0) + cam.Start2D() + render.OverrideAlphaWriteEnable(true, true) + surface.SetDrawColor(0,0,0) + surface.DrawRect(0,0,800,600) + self:ARMMonitor() + cam.End2D() + render.PopRenderTarget() +end + +function ENT:Draw() + self.BaseClass.Draw(self) +end + + +function ENT:DrawPost() + self.RTMaterial:SetTexture("$basetexture", self.ARM) + self:DrawOnPanel("ARM",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(512,512,1024,1024,0) + end) +end + + +local gray = Color(100,100,100) +local black = Color(0,0,0) +local white = Color(150,150,150) +local green = Color(0,50,0) + +local function GetTextures(segm,typ) + return segm[typ],segm.maintex or segm[typ] +end +--Get texture Width and Height +local function GetWH(segm,typ) + local tex,dtex = GetTextures(segm,typ) + return tex.w or dtex.w,tex.h or dtex.h +end +--Get real(original) texture Width and Height +local function GetRWH(segm,typ) + local tex,dtex = GetTextures(segm,typ) + return tex.rw or dtex.rw,tex.rh or dtex.rh +end +--Get X and Y adds +local function GetXYA(segm,typ) + local tex,dtex = GetTextures(segm,typ) + return tex.xa or dtex.xa or 0,tex.ya or dtex.ya or 0 +end + +local function GetXY(x,y) + return 100+x*36,100+y*70 +end +local function drawSegment(w,h,u0,v0,u1,v1,segm,typ,align) + --local segm = self.Types[typ] + if not segm or not segm[typ] then return end + local tex,dtex = GetTextures(segm,typ) + if dtex.mat then + local sx,sy = GetXY(w,h) + local sw,sh = GetWH(segm,typ) + local sxa = tex.x or dtex.x or 0 + local xa,ya = GetXYA(segm,typ) + local rw,rh = GetRWH(segm,typ) + surface.SetDrawColor(tex.col or dtex.col or white) + surface.SetTexture(tex.mat or dtex.mat) + surface.DrawTexturedRectUV(sx+xa+sxa*u0,sy+ya-(rh-8)*v0,rw,rh,(rw/sw)*u0,(rh/sh)*v0,(rw/sw)*u1,(rh/sh)*v1) + end +end +local function drawElement(sx,sy,u0,v0,u1,v1,segm,typ,col) + --local segm = self.Types[typ] + if not segm or not segm[typ] then return end + local tex = segm[typ] + local dtex = segm.maintex or tex + --local sx,sy = 100+w*36,100+h*70 + local sw,sh = tex.w or dtex.w,tex.h or dtex.h + local sxa = tex.x or dtex.x or 0 + local xa,ya = tex.xa or dtex.xa or 0,tex.ya or dtex.ya or 0 + local rw,rh = tex.rw or dtex.rw,tex.rh or dtex.rh + surface.SetDrawColor(col or tex.col or dtex.col or white) + surface.SetTexture(tex.mat or dtex.mat) + surface.DrawTexturedRectUV(sx+xa+sxa*u0,sy+ya-(rh-8)*v0 ,rw,rh,(rw/sw)*u0,(rh/sh)*v0,(rw/sw)*u1,(rh/sh)*v1) +end + +local mouse = surface.GetTextureID("gui/info") + +local function createFont(name,font,size,weight) + surface.CreateFont("Metrostroi_"..name, { + font = font, + size = size, + weight = weight or 400, + blursize = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + }) +end +createFont("Arial10","Arial",10,400) +createFont("Arial20","Arial",20,800) + +local colorConverter = { + r = Color(0,0,0), + y = Color(240,240,71), + g = Color(41,202,26), + b = Color(26,84,202), + w = Color(255,255,255), +} +local function GetSegmPos(segm,alt) + local x,y = segm.x,segm.y + local segmt = segm.segm + local u0,v0,u1,v1 = 0,0,1,1 + if segm.invertX then u0,u1 = 1,0 end + if segm.invertY then v0,v1 = 1,0 end + if alt == nil then + return GetXY(x+segm.width*u0,y) + elseif alt == false and segmt.next_m then + return GetXY(x+segmt.next_m.x-segm.width*u0,y+segmt.next_m.y) + --print(123,x,y) + elseif alt and segmt.next_a then + return GetXY(x+segmt.next_a.x*u1-segmt.next_a.x*u0+segmt.width*u0,y+segmt.next_a.y*v1-segmt.next_a.y*v0) + end +end + +local function ARMFindNextSegm(station,csegm,alt,dir,deb) + if dir then + if alt and not csegm.segm.next_a then return end + if not alt and not csegm.segm.next_m then return end + for segmid,segm in ipairs(station) do + if segm == csegm then continue end + if segm.x <= csegm.x then continue end + local txa,tya = GetSegmPos(csegm,alt) + local tx,ty = GetXY(csegm.x+csegm.width*(csegm.invertX or 0),csegm.y) + + if not txa then continue end + --if tx then print(1,segm.x,segm.y,GetSegmPos2(csegm,alt),csegm.invertX,csegm.invertY) end + local sx,sy = GetXY(segm.x+segm.width*(segm.invertX or 0),segm.y) + --if not alt then print(2,x,y,sx,sy,tx,ty,txa,tya) end + if sx == tx and sy == ty then return segm,sx,sy end + if sx == txa and sy == tya then return segm,sx,sy end + sx,sy = GetSegmPos(segm,false) + --if sx and sx == tx and sy == ty then return segm,false end + --if deb then print(sx,x) end + if sx and sx == txa and sy == tya then return segm,sx,sy end + sx,sy = GetSegmPos(segm,true) + --if sx and sx == tx and sy == ty then return segm,false end + if sx and sx == txa and sy == tya and (not alt or segm.y ~= csegm.y) then return segm,sx,sy end + end + else + for segmid,segm in ipairs(station) do + if segm == csegm then continue end + if segm.x >= csegm.x then continue end + local txa,tya = GetSegmPos(segm,alt) + local tx,ty = GetXY(segm.x+segm.width*(segm.invertX or 0),segm.y) + + if not txa then continue end + + local sx,sy = GetXY(csegm.x+csegm.width*(csegm.invertX or 0),csegm.y) + if sx == tx and sy == ty then return segm,sx,sy end + if sx == txa and sy == tya then return segm,sx,sy end + sx,sy = GetSegmPos(csegm,false) + + if sx and sx == txa and sy == tya then return segm,sx,sy end + sx,sy = GetSegmPos(csegm,true) + + if sx and sx == txa and sy == tya and (not alt or segm.y ~= csegm.y) then return segm,sx,sy end + end + --[[ for segmid,segm in ipairs(station) do + if segm == csegm then continue end + if segm.x >= csegm.x then continue end + local txa,tya = GetSegmPos(segm,alt) + local tx,ty = GetXY(segm.x+segm.width*(segm.invertX or 0),segm.y) + if not txa then continue end + --if tx then print(1,segm.x,segm.y,GetSegmPos2(csegm,alt),csegm.invertX,csegm.invertY) end + local sx,sy = GetXY(csegm.x+csegm.width*(csegm.invertX or 0),csegm.y) + --if not alt then print(2,x,y,sx,sy,tx,ty,txa,tya) end + if sx == tx and sy == ty then return segm end + if sx == txa and sy == tya then return segm end + sx,sy = GetSegmPos(csegm,false) + --if sx and sx == tx and sy == ty then return segm,false end + --if deb then print(sx,x) end + if sx and sx == txa and sy == tya then return segm end + sx,sy = GetSegmPos(csegm,true) + --if alt then print(3,x,y,sx,sy,tx,ty) end + --if sx and sx == tx and sy == ty then return segm,false end + if sx and sx == txa and sy == tya and (not alt or segm.y ~= csegm.y) then return segm end + end--]] + end +end + +local function ARMSetNextCompare(posX,posY,segm,nsegm) + local xp,yp = GetSegmPos(segm) + local x,y = GetSegmPos(nsegm) + if sx and posX == x and posY == y then + nsegm.prev = segm + return true + end + + sx,sy = GetSegmPos(nsegm,false) + if sx and posX == sx and posY == sy then + nsegm.next_m = segm + return true + end + if not nsegm.segm.next_a then return end + sx,sy = GetSegmPos(nsegm,true) + if x ~= xp and y ~= yp and sx and posX == sx and posY == sy then + nsegm.next_a = segm + if segm.id == 29 then + local x1,y1 = GetSegmPos(nsegm) + local x2,y2 = GetSegmPos(segm) + print(-2,x1,y1,x2,y2) + end + return true + end +end + +local function ARMSetNext(station) + for csegmid,csegm in ipairs(station) do + for segmid,segm in ipairs(station) do + if segm == csegm then continue end + + local posX,posY = GetSegmPos(csegm) + if ARMSetNextCompare(posX,posY,csegm,segm) then + csegm.prev = segm + --break + end + local posOX,posOY = GetSegmPos(csegm,false) + if ARMSetNextCompare(posOX,posOY,csegm,segm) then + csegm.next_m = segm + --break + end + local _,posAY = GetSegmPos(segm) + if not csegm.segm.next_a or posX == posAX or posY == posAY then continue end + posOX,posOY = GetSegmPos(csegm,true) + if ARMSetNextCompare(posOX,posOY,csegm,segm) then + csegm.next_a = segm + --break + end + end + end +end +function ENT:ARMMonitor() + if self.FilterMag then + render.PopFilterMag() + render.PopFilterMin() + end + + render.PushFilterMag( TEXFILTER.POINT ) + render.PushFilterMin( TEXFILTER.POINT ) + self.FilterMag = true + surface.SetDrawColor(gray) + surface.DrawRect(0,0,800,600) + local station = self:GetNW2Int("ARM:Station",0) + --draw.SimpleText("ÐРМ ДЫЫСЦЫПЫ","Metrostroi_BUKPSpeed",400, 300,Color(220,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + if station > 0 and Metrostroi.ARMConfigGenerated and Metrostroi.ARMConfigGenerated[station] then + local armTable = Metrostroi.ARMConfigGenerated[station] + for id,segm in ipairs(armTable) do + local u0,v0,u1,v1 = 0,0,1,1 + if segm.invertX then u0,u1 = 1,0 end + if segm.invertY then v0,v1 = 1,0 end + drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"maintex") + +--[[ + local w,h = GetXY(segm.x+segm.width*u0,segm.y) + surface.SetDrawColor(Color(255,0,0)) + surface.DrawLine(w+5*u1-5*u0,h,w,h) + surface.DrawLine(w,h+5,w,h) + local w,h = GetSegmPos(segm,false) + surface.SetDrawColor(Color(255,255,0)) + surface.DrawLine(w-6*u1+6*u0,h,w,h) + surface.DrawLine(w,h-6,w,h) + local w,h = GetSegmPos(segm,true) + if w then + surface.SetDrawColor(Color(0,255,0)) + surface.DrawLine(w-6*u1+6*u0,h,w,h) + surface.DrawLine(w,h-6*v1+6*v0,w,h) + end--]] + end + local w,h = 0,0 + for id,segm in ipairs(armTable) do + local u0,v0,u1,v1 = 0,0,1,1 + if segm.invertX then u0,u1 = 1,0 end + if segm.invertY then v0,v1 = 1,0 end + if Metrostroi.GetARMInfo(station,id,"occup2") then + drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"occup_x") + end + if Metrostroi.GetARMInfo(station,id,"switch_m") then + if Metrostroi.GetARMInfo(station,id,"occup") then drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"occup_m") + elseif Metrostroi.GetARMInfo(station,id,"route") then drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"route_m") end + drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"switch_m") + elseif Metrostroi.GetARMInfo(station,id,"switch_a") then + if Metrostroi.GetARMInfo(station,id,"occup") then drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"occup_a") + elseif Metrostroi.GetARMInfo(station,id,"route") then drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"route_a") end + drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"switch_a") + elseif Metrostroi.GetARMInfo(station,id,"switch_na") then + if Metrostroi.GetARMInfo(station,id,"occup") then + drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"occup_m") + drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"occup_a") + end + drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"switch_an") + drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"switch_mn") + else + if Metrostroi.GetARMInfo(station,id,"occup") then drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"occup_m") + elseif Metrostroi.GetARMInfo(station,id,"route") then drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"route_m") end + end + if segm.signal1 then + local sig = segm.signal1 + local typ = self.Types["tl_"..sig.type] + + local x,y = 100+(segm.x+segm.width)*36,100+segm.y*70-(sig.top and -26 or 15) + local rw,rh = GetRWH(typ,"maintex") + local sx,sy = x-rw-2,y-rh-2 + + draw.SimpleText(sig.name,"Metrostroi_Arial10",x, y-(sig.top and -7 or 15),Color(0,0,0),TEXT_ALIGN_RIGHT,TEXT_ALIGN_BOTTOM) + drawElement(sx,sy,0,0,1,1,typ,"maintex") + local colors = Metrostroi.GetARMInfo(station,id,"signal1") or "" + if sig.type > 1 and Metrostroi.GetARMInfo(station,id,"signal1I") then + drawElement(sx+13*(sig.type-1),sy,0,0,1,1,typ,"full",colorConverter.w) + end + if sig.type > 2 and Metrostroi.GetARMInfo(station,id,"signal1Y") then + drawElement(sx+13*(sig.type-2),sy,0,0,1,1,typ,"full",colorConverter.y) + end + if colors ~= "" and #colors == 1 then + local color = colors:lower() + drawElement(sx,sy,0,0,1,1,typ,"full",colorConverter[color] or Color(0,0,0)) + elseif colors ~= "" and #colors == 2 then + local color = colors:lower() + drawElement(sx,sy,0,0,1,1,typ,"h1",colorConverter[color[1]] or Color(0,0,0)) + drawElement(sx,sy,0,0,1,1,typ,"h2",colorConverter[color[2]] or Color(0,0,0)) + end + end + if segm.signal2 then + local sig = segm.signal2 + local typ = self.Types["tl_"..sig.type] + + local rw,rh = GetRWH(typ,"maintex") + local x,y = 100+(segm.x)*36+2,100+segm.y*70+(sig.top and -38 or 3) + local sx,sy = x-1,y+rh + + draw.SimpleText(sig.name,"Metrostroi_Arial10",x, y+(sig.top and -2 or 20),Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_TOP) + drawElement(sx,sy,1,1,0,0,typ,"maintex") + local colors = Metrostroi.GetARMInfo(station,id,"signal2") or "" + if sig.type > 1 and Metrostroi.GetARMInfo(station,id,"signal2I") then + drawElement(sx+rw-12-13*(sig.type-1),sy,1,1,0,0,typ,"full",colorConverter.w) + end + if sig.type > 2 and Metrostroi.GetARMInfo(station,id,"signal2Y") then + drawElement(sx+rw-12-13*(sig.type-2),sy,1,1,0,0,typ,"full",colorConverter.y) + end + if colors ~= "" and #colors == 1 then + local color = colors:lower() + drawElement(sx+rw-12,sy,1,1,0,0,typ,"full",colorConverter[color] or Color(0,0,0)) + elseif colors ~= "" and #colors == 2 then + local color = colors:lower() + drawElement(sx+rw-12,sy,1,1,0,0,typ,"h1",colorConverter[color[1]] or Color(0,0,0)) + drawElement(sx+rw-12,sy,1,1,0,0,typ,"h2",colorConverter[color[2]] or Color(0,0,0)) + end + end + end + for id,button in ipairs(armTable.buttons) do + local sx,sy = 100+button.x*36,100+button.y*70 + local sw,sh = 15,25 + local xa,ya = 3,12 + if button.type=="r" then + sw,sh = 15,25 + xa,ya = 3,12 + end + local x,y = sx+xa,sy+ya + if Metrostroi.GetARMInfo(station,1000+id,"buttonSelected") then + surface.SetDrawColor(Color(80,80,180)) + elseif Metrostroi.GetARMInfo(station,1000+id,"buttonPressable") then + surface.SetDrawColor(Color(220,220,220)) + else + surface.SetDrawColor(Color(120,120,120)) + end + surface.DrawRect(x,y,sw,sh) + Metrostroi.DrawLine(x,y,x,y+sh,Color(240,240,240),2) + Metrostroi.DrawLine(x-1,y,x+sw,y,Color(240,240,240),2) + Metrostroi.DrawLine(x+sw,y,x+sw,y+sh,Color(60,60,60),2) + Metrostroi.DrawLine(x,y+sh,x+sw+1,y+sh,Color(60,60,60),2) + end + end + for i,v in ipairs(Metrostroi.ARMConfigGenerated) do + if i == station then + surface.SetDrawColor(Color(110,140,170)) + elseif math.InRangeXYR(self.MouseX,self.MouseY,20+(i-1)*30,20,30,20) then + surface.SetDrawColor(Color(80,110,140)) + else + surface.SetDrawColor(Color(100,130,160)) + end + + surface.DrawRect(20+(i-1)*31,20,30,20) + draw.SimpleText(v.shortname or v.id,"Metrostroi_Arial20",35+(i-1)*31, 30,Color(40,60,170),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + --if self.CurrentCamera == 0 then + surface.SetDrawColor(255,255,255) + surface.SetTexture(mouse) + surface.DrawTexturedRectRotated(self.MouseX,self.MouseY,8,8,0) + --end + surface.SetDrawColor(0,0,0,200) + surface.DrawRect(0,0,800,600) + render.PopFilterMag() + render.PopFilterMin() + self.FilterMag = false +--[=[ + local iter = 0 + local function ARMFindSegmSignals(station,segm,dir,signals,checked,restbl,trace,NextAlt) + if not restbl then restbl = {} end + if not checked then checked = {} end + if not trace then trace = {} end + if checked[segm] then return end + checked[segm] = true + local segmIndex = table.insert(trace,{segm.id}) + --trace[segm] = true + + iter = iter + 1 + if iter > 10000 then ARMGenError(Format("Routes generation error. Max iter reached!"),true) return false end + local segmt = segm.segm + local segmM,segmA = segmt.next_m,segmt.next_a + if not segmM then return end + + local NextM = ARMFindNextSegm(station,segm,not NextAlt,dir) + local NextA = ARMFindNextSegm(station,segm,NextAlt,dir) + + + local xp,yp = GetXY(segm.x,segm.y) + if NextA then + local trace= table.Copy(trace) + trace[segmIndex][2] = true + local xn,yn = GetXY(NextA.x,NextA.y) + local xa1,ya1 = GetSegmPos(segm,true) + local xa2,ya2 = GetSegmPos(NextA,true) + --trace[segmIndex][2] = true + local nxt = xa1==xn and ya1==yn or + xa2==xn and ya2==yn or + xa1==xp and ya1==yp or + xa2==xp and ya2==yp or + xa1 and xa2 and xa1==xa2 and ya1==ya2 + --MsgN(Format("->A\n",segm.x,segm.y)) + local signal = dir and NextA.signal2 or NextA.signal1 + --print("A",segm.x,segm.y,NextA.x,NextA.y,signal and signal.name,dir) + if signal and table.HasValue(signals,signal.name) then--and not segmOnA.invertX then + table.insert(restbl,{signal,table.Copy(trace)}) + end + ARMFindSegmSignals(station,NextA,dir,signals,checked,restbl,trace,true) + end + if NextM then + local xn,yn = GetXY(NextM.x,NextM.y) + local xa1,ya1 = GetSegmPos(segm,true) + local xa2,ya2 = GetSegmPos(NextM,true) + local nxt = xa1==xn and ya1==yn or + xa2==xn and ya2==yn or + xa1==xp and ya1==yp or + xa2==xp and ya2==yp or + xa1 and xa2 and xa1==xa2 and ya1==ya2 + local signal = dir and NextM.signal2 or NextM.signal1 + --print("M",segm.x,segm.y,NextM.x,NextM.y,signal and signal.name,dir) + if signal and table.HasValue(signals,signal.name) then--and not segmOnA.invertX then + table.insert(restbl,{signal,table.Copy(trace)}) + end + ARMFindSegmSignals(station,NextM,dir,signals,checked,restbl,table.Copy(trace)) + end + return restbl + end + local station = Metrostroi.ARMConfigGenerated[station] + for _,button in pairs(station.buttons,station.routes["PT64"]) do + if button.type == "r" and station.routes[button.signal] then + --button.pressable = true + local results = ARMFindSegmSignals(station,button.segm,false,station.routes[button.signal]) + if #results == 0 then + results = ARMFindSegmSignals(station,button.segm,true,station.routes[button.signal]) + end + for k,v in pairs(results) do + local i = 0 + for k,v in pairs(v[2]) do + print(v[2]) + end + end + --print(results[1][1].name,results[1][1].segm)--]] + --button.routes = results + end + end--]=] +--[=[ + local x = 0 + local founded = true + local stat = Metrostroi.ARMConfigGenerated[station] + local maxd = 3 + local x = 26-- or math.ceil((CurTime()%10)/10*#stat) + local dir = true-- or CurTime()%20 > 10 + local function findt(station,segm,dir,i,depth,px,py ) + depth = depth or 0 + i = i or 0 + local segmt = segm.segm + local segmM,segmA = segmt.next_m,segmt.next_a + local NextM,NextMX,NextMY = ARMFindNextSegm(station,segm,false,dir) + local NextA,NextAX,NextAY = ARMFindNextSegm(station,segm,true,dir) + local xp,yp = GetXY(segm.x,segm.y) + draw.SimpleText(i,"Metrostroi_Arial20",xp,yp,Color(255,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("%.1f:%.1f",segm.x,segm.y),"Metrostroi_Arial10",xp,yp-20,Color(255,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + local xa1,ya1 = GetSegmPos(segm,true) + if i==4 then print(xa1,ya1,px,py,xa1 == px and ya1 == py) end + local alt = px and py ~= yp and xa1 == px and ya1 == py + if NextA and depth+1 < maxd then + --if i==3 then print(1) end + local xn,yn = GetXY(NextA.x,NextA.y) + local xa2,ya2 = GetSegmPos(NextA,true) + local nalt = xa1==xn and ya1==yn or + xa2==xn and ya2==yn or + xa1==xp and ya1==yp or + xa2==xp and ya2==yp or + xa1 and xa2 and xa1==xa2 and ya1==ya2 + if nalt or alt then surface.SetDrawColor(Color(255,0,0)) + else surface.SetDrawColor(Color(0,255,0)) end + surface.DrawLine(px or xp,py or yp,NextAX or xn,NextAY or yn) + if findt(station,NextA,dir,i+1,depth+1,NextAX,NextAY) then return end + --return true + --if i==5 then print("RES",segm.x,segm.y,NextA.x,NextA.y) end + end + if NextM and depth < maxd then + local xn,yn = GetXY(NextM.x,NextM.y) + local xa2,ya2 = GetSegmPos(NextM,true) + local nalt = xa1==xn and ya1==yn or + xa2==xn and ya2==yn or + xa1==xp and ya1==yp or + xa2==xp and ya2==yp or + xa1 and xa2 and xa1==xa2 and ya1==ya2 + if alt then surface.SetDrawColor(Color(255,255,0)) + else surface.SetDrawColor(Color(0,255,0)) end + surface.DrawLine(px or xp,py or yp,NextMX or xn,NextMY or yn) + if findt(station,NextM,dir,i+1,depth,NextMX,NextMY) then return end + end + end + --findt(stat,stat[x],dir)--]=] + --[==[ + if Metrostroi.ARMConfigGenerated[station] then + ARMSetNext(Metrostroi.ARMConfigGenerated[station]) + --[=[ for id,segm in ipairs(Metrostroi.ARMConfigGenerated[station]) do + local ws,hs = GetSegmPos(segm) + draw.SimpleText(segm.id,"Metrostroi_Arial20",ws,hs-15--[[ *(math.random()*5)--]] ,Color(0,255,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + if segm.next_m then + local w,h = GetSegmPos(segm.next_m) + surface.SetDrawColor(Color(0,255,0)) + surface.DrawLine(ws,hs,w,h) + surface.DrawLine(ws-6,hs-6,ws+6,hs+6) + surface.DrawLine(ws-6,hs+6,ws+6,hs-6) + surface.DrawLine(w-6,h-2,w+6,h+2) + surface.DrawLine(w-6,h+2,w+6,h-2) + else + local w,h = GetSegmPos(segm) + w = w+segm.width*36/2 + surface.SetDrawColor(Color(255,0,255)) + surface.DrawLine(w-4,h-4,w+4,h+4) + surface.DrawLine(w-4,h+4,w+4,h-4) + continue + end + if segm.next_a then + local w,h = GetSegmPos(segm.next_a) + draw.SimpleText(segm.id,"Metrostroi_Arial20",w,h+15,Color(255,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + surface.SetDrawColor(Color(255,0,0)) + surface.DrawLine(ws,hs,w,h) + surface.DrawLine(ws-7,hs-4,ws+7,hs+4) + surface.DrawLine(ws-7,hs+4,ws+7,hs-4) + surface.DrawLine(w-7,h-2,w+7,h+2) + surface.DrawLine(w-7,h+2,w+7,h-2) + end + end--]=] + local x = 0 + local founded = true + local stat = Metrostroi.ARMConfigGenerated[station] + local maxd = 2 + local x = 21-- or math.ceil((CurTime()%10)/10*#stat) + local dir = true-- or CurTime()%20 > 10 + local function findt(station,segm,dir,i,depth,last ) + depth = depth or 0 + i = i or 0 + local segmP = segm.prev + local segmM,segmA = segm.next_m,segm.next_a + local x,y = GetXY(segm.x,segm.y) + draw.SimpleText(i,"Metrostroi_Arial20",x,y,Color(255,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("%.1f:%.1f",segm.x,segm.y),"Metrostroi_Arial10",x,y-20,Color(255,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + + local mainM = segmM and (dir and segmM.x > segm.x or not dir and segmM.x < segm.x) + local mainP = segmP and (dir and segmP.x > segm.x or not dir and segmP.x < segm.x) + if i==7 and last.next_a then + draw.SimpleText(i,"Metrostroi_Arial20",x,y,Color(0,255,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + local x,y = GetXY(last.x,last.y) + draw.SimpleText(i-1,"Metrostroi_Arial20",x,y,Color(255,255,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --print(last.next_a,segm) + end + + if segmA and mainM and depth+1 < maxd then + --if i==3 then print(1) end + local xn,yn = GetXY(segmA.x,segmA.y) + surface.SetDrawColor(Color(255,0,0)) + surface.DrawLine(x,y,xn,yn) + if findt(station,segmA,dir,i+1,depth+1,segm) then return end + return true + --if i==5 then print("RES",segm.x,segm.y,NextA.x,NextA.y) end + end + if segmM and mainM and depth < maxd then + local xn,yn = GetXY(segmM.x,segmM.y) + surface.SetDrawColor(Color(0,255,0)) + surface.DrawLine(x,y,xn,yn) + if findt(station,segmM,dir,i+1,depth,segm) then return end + end + if segmP and mainP and depth < maxd then + local xn,yn = GetXY(segmP.x,segmP.y) + local alt = last and segm.next_a == last or segmP.next_a == segm + if alt then surface.SetDrawColor(Color(255,255,0)) + else surface.SetDrawColor(Color(0,255,255)) end + surface.DrawLine(x,y,xn,yn) + if findt(station,segmP,dir,i+1,depth,segm) then return end + end + end + findt(stat,stat[x],dir) + end--]==] + --findt(stat,stat[6],false) +end +Metrostroi.GenerateClientProps() \ No newline at end of file diff --git a/lua/entities/_obsolete/gmod_track_arm__/init.lua b/lua/entities/_obsolete/gmod_track_arm__/init.lua new file mode 100644 index 0000000..55498ac --- /dev/null +++ b/lua/entities/_obsolete/gmod_track_arm__/init.lua @@ -0,0 +1,189 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +function ENT:Initialize() + self:SetModel("models/props_combine/breendesk.mdl") + self.BaseClass.Initialize(self) + self.DriverSeat = self:CreateSeat("driver", Vector(-40, 0, 0), Angle(0, 0, 0), "models//nova/chair_office02.mdl") + self.CursorX = 0 + self.CursorY = 0 + self:CursorMove(0, 0) + self.Station = 0 +end + +hook.Add("AcceptInput", "metrostroi_arm_trigger_check", function(ent, inputName, activator, called, data) + if inputName == "ARMStartTouch" then + called.ARMTriggered = true + print(called, called:GetName(), activator, "Enable") + end + + if inputName == "ARMEndTouch" then + called.ARMTriggered = false + print(called, called:GetName(), activator, "Disable") + end +end) + + +local function GetOccupation(tbl) + for sID,signame in ipairs(tbl) do + if signame[1] == "@" then + local trigger = Metrostroi.ARMGet(signame:sub(2,-1), "trigger") + if not trigger or trigger.ARMTriggered then + return true + end + elseif signame ~= "" then + local signal = Metrostroi.ARMGet(signame, "signal") + if not signal or signal.OccupiedBy and signal.OccupiedBy ~= signal then + return true + end + end + end + return false +end + +function ENT:Think() + local armTbl = Metrostroi.ARMTable + local armConf = Metrostroi.ARMConfigGenerated + local station = armConf[self.Station] + local armTblStation = armTbl[self.Station] + if not station then return end + if not armTblStation or (IsValid(armTblStation.Controller) and armTblStation.Controller ~= self) then return end + armTblStation.Controller = self + for buttonID,button in ipairs(station.buttons) do + --print(button,button.selected) + Metrostroi.ARMSync(self.Station, 1000+buttonID, "buttonPressable",button.pressable) + Metrostroi.ARMSync(self.Station, 1000+buttonID, "buttonSelected",button.selected) + end + for segmID, segm in ipairs(station) do + if type(segm) == "table" then + if segm.occup then + Metrostroi.ARMSync(self.Station, segmID, "occup", segm.occupied) + end + + if segm.occup2 then + Metrostroi.ARMSync(self.Station, segmID, "occup2", segm._occup or GetOccupation(segm.occup2)) + end + Metrostroi.ARMSync(self.Station, segmID, "route", segm.route and true) + + + if segm.switch then + local switch = Metrostroi.ARMGet(segm.switch, "switch") + local main = switch and switch.MainTrack and not switch.AlternateTrack + local alt = switch and not switch.MainTrack and switch.AlternateTrack + Metrostroi.ARMSync(self.Station, segmID, "switch_m", main) + Metrostroi.ARMSync(self.Station, segmID, "switch_a", alt) + Metrostroi.ARMSync(self.Station, segmID, "switch_na", not main and not alt) + end + if segm.signal1 then + local signal = Metrostroi.ARMGet(segm.signal1.name, "signal") + local colors = signal and signal.Colors + if segm.signal1.type > 1 then Metrostroi.ARMSync(self.Station, segmID, "signal1I", signal and signal.InvationSignal) end + if segm.signal1.type > 2 and colors then + local Y = #colors:gsub("[^yY]","") > 1 + if Y then colors = colors:SetChar(colors:find("[yY]"),"") end + Metrostroi.ARMSync(self.Station, segmID, "signal1Y", Y) + end + Metrostroi.ARMSync(self.Station, segmID, "signal1", colors) + end + if segm.signal2 then + local signal = Metrostroi.ARMGet(segm.signal2.name, "signal") + local colors = signal and signal.Colors + if segm.signal2.type > 1 then Metrostroi.ARMSync(self.Station, segmID, "signal2I", signal and signal.InvationSignal) end + if segm.signal2.type > 2 and colors then + local Y = #colors:gsub("[^yY]","") > 1 + if Y then colors = colors:SetChar(colors:find("[yY]"),"") end + Metrostroi.ARMSync(self.Station, segmID, "signal2Y", Y) + end + Metrostroi.ARMSync(self.Station, segmID, "signal2", colors) + end + end + end + + self:NextThink(CurTime() + 0.5) + + return true +end + +function ENT:OnRemove() +end + +function ENT:CursorMove(sys, dX, dY) + self.CursorX = sys == "" and math.Clamp(self.CursorX + dX * 200, 0, 800) or dX + self.CursorY = sys == "" and math.Clamp(self.CursorY + dY * 200, 0, 600) or dY + self:SetNW2Int("CursorX", math.floor(self.CursorX)) + self:SetNW2Int("CursorY", math.floor(self.CursorY)) +end + +local function GetTextures(segm,typ) + return segm[typ],segm.maintex or segm[typ] +end +--Get real(original) texture Width and Height +local function GetRWH(segm,typ) + local tex,dtex = GetTextures(segm,typ) + return tex.rw or dtex.rw,tex.rh or dtex.rh +end +local function GetXY(x,y) + return 100+x*36,100+y*70 +end +function ENT:PanelTouch(state, x, y) + for i, v in ipairs(Metrostroi.ARMConfig) do + if math.InRangeXYR(self.CursorX, self.CursorY, 20 + (i - 1) * 30, 20, 30, 20) then + self.Station = i + self:SetNW2Int("ARM:Station", i) + end + end + if not state then return end + local RouteChoosing = self.RouteChoosing + self.RouteChoosing = nil + if RouteChoosing then + print("DISABLE") + for k,v in pairs(RouteChoosing.routes) do + if v[1].button then + v[1].button.selected = false + elseif v[1].isbutton then + v[1].selected = false + end + end + end + local confGenStation = Metrostroi.ARMConfigGenerated[self.Station] + for k,button in pairs(confGenStation.buttons) do + local sx,sy = 100+button.x*36,100+button.y*70 + if button.type == "r" then + local sw,sh = 15,25 + local xa,ya = 3,12 + local x,y = sx+xa,sy+ya + if RouteChoosing then + if math.InRangeXYR(self.CursorX, self.CursorY, x,y,sw,sh) then + for k,v in ipairs(RouteChoosing.routes) do + if v[1].button and button == v[1].button or v[1].isbutton and button==v[1] then + Metrostroi.CentralisationPrepareRoute(self.Station,v) + end + end + end + elseif not self.RouteChoosing and button.pressable then + if math.InRangeXYR(self.CursorX, self.CursorY, x,y,sw,sh) then + self.RouteChoosing = button + for k,v in ipairs(button.routes) do + if v[1].button then + v[1].button.selected = true + elseif v[1].isbutton then + v[1].selected = true + print(2) + end + end + end + end + end + end + if not self.RouteChoosing and not RouteChoosing then + for k,segm in ipairs(confGenStation) do + local x,y = GetXY(segm.x,segm.y) + local w,h = GetRWH(segm.segm,"maintex") + if math.InRangeXYR(self.CursorX, self.CursorY, x,y,w,h) then + segm._occup = not segm._occup + print(segm) + end + end + end +end \ No newline at end of file diff --git a/lua/entities/_obsolete/gmod_track_arm__/shared.lua b/lua/entities/_obsolete/gmod_track_arm__/shared.lua new file mode 100644 index 0000000..1d918f4 --- /dev/null +++ b/lua/entities/_obsolete/gmod_track_arm__/shared.lua @@ -0,0 +1,753 @@ +ENT.Type = "anim" + +--Inherit subway base for some need functions +ENT.Base = "gmod_subway_base" +ENT.NoTrain = true + +ENT.PrintNameTranslated = "Entities.ARM" +ENT.Category = "Metrostroi" + +ENT.Spawnable = false +ENT.AdminSpawnable = true + +ENT.Cameras = { + {Vector(-18+3,0,43+2),Angle(0,0,0),"ARM.Monitor1",true}, +} +ENT.Types = { + --Main segments + [0.25]={ + maintex = {"metrostroi_arm/sec025",w=8,h=8,rw=7,rh=8,}, + occup_m = {"metrostroi_arm/sec025_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/sec025_m",col=Color(39,103,63)}, + width = 0.25, + next_m = {x=0.25,y=0} + }, + [0.5]={ + maintex = {"metrostroi_arm/sec05",w=16,h=8,rw=16,rh=8,}, + occup_m = {"metrostroi_arm/sec05_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/sec05_m",col=Color(39,103,63)}, + width = 0.5, + next_m = {x=0.5,y=0} + }, + [1]={ + maintex = {"metrostroi_arm/sec1",w=64,h=8,rw=34,rh=8,}, + occup_m = {"metrostroi_arm/sec1_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/sec1_m",col=Color(39,103,63)}, + width = 1, + next_m = {x=1,y=0} + }, + [2]={ + maintex = {"metrostroi_arm/sec2",w=128,h=8,rw=70,rh=8,}, + occup_m = {"metrostroi_arm/sec2_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/sec2_m",col=Color(39,103,63)}, + width = 2, + next_m = {x=2,y=0} + }, + [3]={ + maintex = {"metrostroi_arm/sec3",w=128,h=8,rw=106,rh=8,}, + occup_m = {"metrostroi_arm/sec3_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/sec3_m",col=Color(39,103,63)}, + width = 3, + next_m = {x=3,y=0} + }, + [4]={ + maintex = {"metrostroi_arm/sec4",w=256,h=8,rw=142,rh=8,}, + occup_m = {"metrostroi_arm/sec4_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/sec4_m",col=Color(39,103,63)}, + width = 4, + next_m = {x=4,y=0} + }, + [5]={ + maintex = {"metrostroi_arm/sec5",w=256,h=8,rw=178,rh=8,}, + occup_m = {"metrostroi_arm/sec5_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/sec5_m",col=Color(39,103,63)}, + width = 5, + next_m = {x=5,y=0} + }, + --Switches and helpers + sw = { + maintex = {"metrostroi_arm/switch",w=128,h=128,rw=70,rh=78,}, + occup_m = {"metrostroi_arm/switch_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/switch_m",col=Color(39,103,63)}, + occup_a = {"metrostroi_arm/switch_a",col=Color(255,255,255)}, + route_a = {"metrostroi_arm/switch_a",col=Color(39,103,63)}, + switch_m = {"metrostroi_arm/switch_ms",col=Color(41,202,26)}, + switch_a = {"metrostroi_arm/switch_as",col=Color(240,240,71)}, + switch_mn = {"metrostroi_arm/switch_ms",col=Color(200,50,50)}, + switch_an = {"metrostroi_arm/switch_as",col=Color(200,50,50)}, + width = 2, + next_m = {x=2,y=0}, + next_a = {x=2,y=1}, + }, + ["2sw"] = { + maintex = {"metrostroi_arm/2-switch_half",w=128,h=256,rw=70,rh=143,}, + occup_m = {"metrostroi_arm/2-switch_half_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/2-switch_half_m",col=Color(39,103,63)}, + occup_a = {"metrostroi_arm/2-switch_half_a",col=Color(255,255,255)}, + route_a = {"metrostroi_arm/2-switch_half_a",col=Color(39,103,63)}, + switch_m = {"metrostroi_arm/2-switch_half_ms",col=Color(41,202,26)}, + switch_a = {"metrostroi_arm/2-switch_half_as",col=Color(240,240,71)}, + switch_mn = {"metrostroi_arm/2-switch_half_as",col=Color(200,50,50)}, + switch_an = {"metrostroi_arm/2-switch_half_ms",col=Color(200,50,50)}, + width = 2, + next_m = {x=2,y=0}, + next_a = {x=2,y=2}, + }, + ["2swm"] = { + maintex = {"metrostroi_arm/2-switch-middle_half",w=128,h=128,rw=70,rh=73,}, + occup_m = {"metrostroi_arm/2-switch-middle_half_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/2-switch-middle_half_m",col=Color(39,103,63)}, + occup_a = {"metrostroi_arm/2-switch-middle_half_a",col=Color(255,255,255)}, + route_a = {"metrostroi_arm/2-switch-middle_half_a",col=Color(39,103,63)}, + switch_m = {"metrostroi_arm/2-switch-middle_half_ms",col=Color(41,202,26)}, + switch_a = {"metrostroi_arm/2-switch-middle_half_as",col=Color(240,240,71)}, + switch_mn = {"metrostroi_arm/2-switch-middle_half_ms",col=Color(200,50,50)}, + switch_an = {"metrostroi_arm/2-switch-middle_half_as",col=Color(200,50,50)}, + width = 2, + next_m = {x=2,y=0}, + next_a = {x=1.5,y=1}, + }, + ["4sw"] = { + maintex = {"metrostroi_arm/4-switch_quarter",w=128,h=256,rw=73,rh=143,x=-3,}, + occup_m = {"metrostroi_arm/4-switch_quarter_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/4-switch_quarter_m",col=Color(39,103,63)}, + occup_a = {"metrostroi_arm/4-switch_quarter_a1",col=Color(255,255,255)}, + route_a = {"metrostroi_arm/4-switch_quarter_a1",col=Color(39,103,63)}, + occup_x = {"metrostroi_arm/4-switch_quarter_a2",col=Color(255,255,255)}, + route_x = {"metrostroi_arm/4-switch_quarter_a2",col=Color(39,103,63)}, + switch_m = {"metrostroi_arm/4-switch_quarter_ms",col=Color(41,202,26)}, + switch_a = {"metrostroi_arm/4-switch_quarter_as",col=Color(240,240,71)}, + switch_mn = {"metrostroi_arm/4-switch_quarter_ms",col=Color(200,50,50)}, + switch_an = {"metrostroi_arm/4-switch_quarter_as",col=Color(200,50,50)}, + width = 2, + next_m = {x=2,y=0}, + next_a = {x=2,y=2}, + acc_x = ">", + acc_y = "!", + }, + ["4sws"] = { + maintex = {"metrostroi_arm/4-switch_quarter_small",w=64,h=128,rw=53,rh=78,x=-1,}, + occup_m = {"metrostroi_arm/4-switch_quarter_small_m",col=Color(255,255,255),x=-1,}, + route_m = {"metrostroi_arm/4-switch_quarter_small_m",col=Color(39,103,63),x=-1,}, + occup_a = {"metrostroi_arm/4-switch_quarter_small_a",col=Color(255,255,255),x=-1,}, + route_a = {"metrostroi_arm/4-switch_quarter_small_a",col=Color(39,103,63),x=-1,}, + switch_m = {"metrostroi_arm/4-switch_quarter_small_ms",col=Color(41,202,26)}, + switch_a = {"metrostroi_arm/4-switch_quarter_small_as",col=Color(240,240,71)}, + switch_mn = {"metrostroi_arm/4-switch_quarter_small_ms",col=Color(200,50,50)}, + switch_an = {"metrostroi_arm/4-switch_quarter_small_as",col=Color(200,50,50)}, + width = 1.5, + next_m = {x=1.5,y=0}, + next_a = {x=1.5,y=1}, + acc_x = ">", + acc_y = "!", + }, + ofd = { + maintex = {"metrostroi_arm/offset_down",w=64,h=256,rw=57,rh=143,}, + occup_m = {"metrostroi_arm/offset_down_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/offset_down_m",col=Color(39,103,63)}, + width = 2, + next_m = {x=2,y=2}, + }, + ofds = { + maintex = {"metrostroi_arm/offsed_down_small",w=128,h=128,rw=70,rh=78,}, + occup_m = {"metrostroi_arm/offsed_down_small_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/offsed_down_small_m",col=Color(39,103,63)}, + width = 2, + next_m = {x=2,y=1}, + }, + ysw = { + maintex = {"metrostroi_arm/Y-switch_half",w=128,h=128,rw=70,rh=108,}, + occup_m = {"metrostroi_arm/Y-switch_half_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/Y-switch_half_m",col=Color(39,103,63)}, + occup_a = {"metrostroi_arm/Y-switch_half_a",col=Color(255,255,255)}, + route_a = {"metrostroi_arm/Y-switch_half_a",col=Color(39,103,63)}, + switch_m = {"metrostroi_arm/Y-switch_half_ms",col=Color(41,202,26)}, + switch_a = {"metrostroi_arm/Y-switch_half_as",col=Color(240,240,71)}, + switch_mn = {"metrostroi_arm/Y-switch_half_ms",col=Color(200,50,50)}, + switch_an = {"metrostroi_arm/Y-switch_half_as",col=Color(200,50,50)}, + width = 2, + next_m = {x=2,y=0}, + next_a = {x=2,y=1}, + }, + --Signals + tl_1 = { + maintex = {"metrostroi_arm/tl_1",w=32,h=16,rw=21,rh=13}, + full = {"metrostroi_arm/tl_f",w=16,h=16,rw=12,rh=12}, + h1 = {"metrostroi_arm/tl_h1",w=16,h=16,rw=12,rh=12}, + h2 = {"metrostroi_arm/tl_h2",w=16,h=16,rw=12,rh=12}, + }, + tl_2 = { + maintex = {"metrostroi_arm/tl_2",w=64,h=16,rw=34,rh=13}, + full = {"metrostroi_arm/tl_f",w=16,h=16,rw=12,rh=12}, + h1 = {"metrostroi_arm/tl_h1",w=16,h=16,rw=12,rh=12}, + h2 = {"metrostroi_arm/tl_h2",w=16,h=16,rw=12,rh=12}, + }, + tl_3 = { + maintex = {"metrostroi_arm/tl_3",w=64,h=16,rw=47,rh=13}, + full = {"metrostroi_arm/tl_f",w=16,h=16,rw=12,rh=12}, + h1 = {"metrostroi_arm/tl_h1",w=16,h=16,rw=12,rh=12}, + h2 = {"metrostroi_arm/tl_h2",w=16,h=16,rw=12,rh=12}, + }, +} +if CLIENT then + for i,segm in pairs(ENT.Types) do + for k,tex in pairs(segm) do + if type(tex) ~= "table" or type(tex[1]) ~= "string" then continue end + tex.mat = surface.GetTextureID(tex[1]) + end + segm.id = i + end +end + +-------------- +-- Syntax of table +-- { +-- station = "ID,abbreviation,full name" +-- First line of segments +-- {"segment type:occupation checkers,...,occupation checkers:lights:...:lights"}, +-- Second line of segments +-- {x=x indent,skip=y indent(skips y segments vertically),"segment type:occupation checkers main,...,occupation checkers main:occupation checkers alt,...,occupation checkers alt:lights:...:lights"}, +-- } +-- segment type can have > or ! on start, when we want mirror it vertically or horisontally +-- Occupation checkers can be triggers(have @ in start of trigger name) or signals +-- Lights can be empty, if we want take light name from occupation checkers +-- Lights can have ! when stay in right direction or !! when stay in opposite direction +-- Lights can have > when we want switch light location from bottom to top +-- Examples +--{ +-- station = "001,ST,Station name", +-- { +-- {"1:L1:!","1:L3:!","sw:@sw1trigger:@sw3trigger"} +-- {x=1,"1:L2",">sw:@sw2trigger:@sw3rigger"}, +-- } +--} +-------------- +Metrostroi.ARMConfig = { + ---[=[ + { + station = "451,ВБ,УоллеÑа брина", + {"0.5:1","0.5:1","0.5:1","0.5:1","1:1","1:1","1:1","sw:1","3:1","3:1"}, + {x=7,"0.5:1","4sws:1",">4sws:1","1:1","1:1"},{skip=1}, + {x=7,"0.5:1","!4sws:1",">!4sws:1","1:1","1:1"}, + {"0.5:1","0.5:1","0.5:1","0.5:1","1:1","1:1","1:1","!sw:1","3:1","3:1"}, + },{ + station="915,РЧ,РечнаÑ", + {x=3.5,"0.5:RX22","1:RX22","1:RX20","0.5:RX98","4sw:::RX1:0",">4sw:::RX3:","1","2","2","1","1"},{skip=3}, + {"1:201","0.5:203","0.5:205","0.5:207","0.5:209","0.5:211","0.5:213","1:215","1:217","0.5:219","!4sw:::RX2::!!2RX95",">!4sw:::RX4:","1","2","2","1","1"}, + },{ + station="110,МД,МеждународнаÑ", + {"1:145//:!1","1:143:!1","1:141//:!1","0.5:RC137","0.5:139M:!1","3:137:!>1","sw:@wt_md_s1:@wt_md_s1:MD1:!!>2D:!>2G","3:@wt_md_t1_1::!2MD3","2:@wt_md_t1_2"}, + {x=9,"4sws:@wt_md_s3::MD3",">4sws:@wt_md_s5::MD5:!2MD1","2:@wt_md_t3"},{skip=1}, + {x=9,"!4sws:@wt_md_s4::MD4",">!4sws:@wt_md_s6::MD6:!>2MD2","2:@wt_md_t4"}, + {"1:MD148:!!2","1:MD146:!!2","1:MD144:!!2","1:MD142:!!2:!1 OP","1:MD140:!!2","1:RC144A","1:RC142","!sw:@wt_md_s2:@wt_md_s2:MD2:!!2MD138G:!1E","3:@wt_md_t2_1::!>2MD4","2:@wt_md_t2_2"}, + buttons = { + {type="r",y=4-0.6 ,x=4, signal=" OP",target={3,4}}, + {type="r",y=4 ,x=-1+0.4, signal="MD148"}, + {type="r",y=4 ,x=6+0.4, signal="MD138G"}, + {type="r",y=4-0.6 ,x=9, signal="E"}, + {type="r",y=3 ,x=14, signal="4I",target={12,3}}, + {type="r",y=1-0.6 ,x=14, signal="3I",target={12,1}}, + {type="r",y=3 ,x=12, signal="MD2"}, + {type="r",y=1-0.6 ,x=12, signal="MD1"}, + --{type="r",y=0-0.6 ,x=4, signal="13"}, + {type="r",y=0-0.6 ,x=6+0.4, signal="D",target={4,0}}, + {type="r",y=0 ,x=9, signal="G"}, + }, + routes = { + MD148={" OP"}, + [" OP"]={"MD138G"}, + MD138G={"4I","3I"}, + E={" OP"}, + MD2={" OP","D"}, + MD1={" OP","D"}, + D={"4I","3I"}, + G={"D"}, + }, + signals = { + --"LensesStr": "YYG-RW", + MD148={ + Mode=1, --AB 1/5 + R="4",RY="42",Y="1",YG="13",G="3",IS="5", --Lenses ID + Autostop = true,AO = false,bs=3, + }, + MD146={ + Mode=1, --AB 1/5 + R="4",RY="42",Y="1",YG="13",G="3",IS="5", --Lenses ID + Autostop = true,AO = false,bs=3, + }, + MD144={ + Mode=1, --AB 1/5 + R="4",RY="42",Y="1",YG="13",G="3",IS="5", --Lenses ID + Autostop = true,AO = false,bs=3, + }, + MD142={ + Mode=1, --AB 1/5 + R="3",RY="31",Y="1",G="2",IS="4", --Lenses ID + Autostop = true,AO = false,bs=4, + }, + MD140={ + Mode=1, --AB 1/5 + R="4",RY="42",--[[ Y="1",--]] YG="13",IS="5", --Lenses ID + Autostop = true,AO = false,bs=3, + }, + MD138G={ + Mode=1, --AB 1/5 + R="3",RY="32",W="1",IS="4", --Lenses ID + Autostop = true,AO = false,bs=1, + }, + MD3={ + Mode=1, --AB 1/5 + R="1",IS="2", + Autostop = true,AO = false, + }, + MD4={ + Mode=1, --AB 1/5 + R="1",IS="2", + Autostop = true,AO = false, + }, + MD1={ + Mode=1, --AB 1/5 + R="2",W="1",IS="3", + Autostop = true,AO = false, + }, + MD2={ + Mode=1, --AB 1/5 + R="2",W="1",IS="3", + Autostop = true,AO = false, + }, + E={ + Mode=1, --AB 1/5 + R="2",W="1", + Autostop = true,AO = false, + }, + G={ + Mode=1, --AB 1/5 + R="2",W="1",IS="3", + Autostop = true,AO = false, + }, + D={ + Mode=1, --AB 1/5 + R="2",W="1",IS="3", + Autostop = true,AO = false, + }, + } + },{ + station="112,ПТ,ПолитехничеÑкаÑ", + {x=1,"1:PT2TB","2:PT2TA","2:PT2T:!!2PT2","2:PT4SA:!!2PT4",">2swm:@wt_pt_t4::PT4:!3PT968M:!!2G ","1:PT966A","2:PT966:!>2","sw:@wt_pt_t6::PT6:!>2PT964:!!>3A","1:962"}, + {x=15,"1:PT6SS","1:963"}, + {x=1,"1:77:!1","1:75:!1","1:73:!1","1:71:!>1",">2swm:@wt_pt_t1::PT1:!!>2B","!2swm:@wt_pt_t3::PT3:!>2PT69","1:PT67M:!2","1:PT65B","1:PT65A","1:PT65:!2","1:PT63:!2:!!1 OP ","1:PT61:!2","1:PT59:!2","1:PT57:!2"},{skip=1}, + {"1:PT70:!!2:!1 OP2 ","1:PT68:!!2","2:@wt_pt_t2:!!2PT66","!2swm:@wt_pt_t4::PT2:!!3PT64","2","2:62:!!1","1:60:!!1","2:60A","1:58M:!!1","1:56:!!1","1:54:!!1","1: 52:!!1"}, + {}, + labels = { + + }, + buttons = { + {type="r",y=0-0.6 ,x=1, signal="3T",target={1,0},flip=true}, + {type="r",y=0 ,x=3+0.4,signal="PT2",target={1,0},flip=true}, + + {type="r",y=4-0.6 ,x=1, signal=" OP2 "}, + {type="r",y=4 ,x=-1+0.4, signal="PT70"}, + {type="r",y=4 ,x=3+0.4, signal="2P",target={8,4}}, + --{type="r",y=4 ,x=7+0.4, signal="62"}, + {type="r",y=2 ,x=5, signal="71"}, + {type="r",y=2-0.6 ,x=4+0.4, signal="B",target={5,2}}, + {type="r",y=2-0.6 ,x=17, signal="PT57"}, + {type="r",y=2-0.6 ,x=10, signal="PT67M"}, + {type="r",y=2 ,x=12+0.4,signal=" OP "}, + {type="r",y=0-0.6 ,x=10, signal="PT968M",flip=true}, + {type="r",y=0 ,x=15, signal="PT964",flip=true}, + {type="r",y=1-0.6 ,x=15, signal="4O",target={15,1},flip=true}, + {type="r",y=0-0.6 ,x=12+0.4,signal="A",flip=true}, + }, + routes = { + PT2 = {"A"}, + PT70 = {" OP ","A","2P"}, + --PT64 = {" OP ","A","PT64"}, + B = {" OP ","A"}, + PT57 = {"PT67M"}, + PT964 = {"PT968M"}, + PT67M = {"71"," OP2 "}, + PT968M = {"3T","71"," OP2 "}, + A={"4O"} + }, + signals = { + --"LensesStr": "YYG-RW", + PT70={ + Mode=1, --AB 1/5 + R="4",RY="41",Y="2",YG="23",G="3",IS="5", --Lenses ID + Autostop = true,AO = false, + }, + PT68={ + Mode=1, --AB 1/5 + R="4",RY="41",Y="2",YG="23",G="3",IS="5", --Lenses ID + Autostop = true,AO = false, + }, + PT66={ + Mode=1, --AB 1/5 + R="4",RY="41",Y="2",YG="23",G="3",IS="5", --Lenses ID + Autostop = true,AO = false, + }, + PT64={ --"YWY-GRW + Mode=1, --AB 1/5 + R="5",RY="51",Y="3",YG="34",G="4",IS="6",W="2",YY="13",YbY="1b3", --Lenses ID + Autostop = true,AO = false, + routes = { + [" OP "]={path=2,mode=3},--Path-2, Mode: W + A={path=3,mode=2},--Path-2, Mode: YY + } + } + } + },{ + station="115,ОК,ОктÑбрьÑкаÑ", + {"1","1","1","1","3","sw:::OK1","1"}, + {x=9,"4sws:::OK3",">4sws:::OK5","1"},{skip=1}, + {x=9,"!4sws:::OK4",">!4sws:::OK6","1"}, + {"1","1","1","1","3","!sw:::OK2","5"}, + }--]=] +} + +print("MetrostroiARM:Generating ARM table...") +local errors,warnings = 0,0 +local function ARMGenError(text,err) + MsgC(Color(255,err and 0 or 255,0),"MetrostroiARM:"..text.."\n") + ErrorNoHalt() + if err then errors = errors + 1 else warnings = warnings + 1 end +end + +local function ParseARMTable(text,station,line,segm) + local resultTbl = {} + + local tbl = string.Explode(":",text) + + local typ = tbl[1] + if typ:find("^[>!]") then + resultTbl.invertX = typ:find(">") + resultTbl.invertY = typ:find("!") + typ = typ:gsub("^[>!]+","") + end + local segmTyp = ENT.Types[tonumber(typ) or typ] + if not segmTyp then return {error = 1,type = tbl[1]} end + table.remove(tbl,1) + + for i,str in ipairs(tbl) do + if str:find(",") then + tbl[i] = string.Explode(",",str) + end + if str:sub(1,2) == "!!" then + resultTbl.signal2 = str:sub(3,-1) + elseif str[1] == "!" then + resultTbl.signal1 = str:sub(2,-1) + end + end + resultTbl.occup = type(tbl[1]) == "table" and tbl[1] or {tbl[1]} + if segmTyp.occup_a then + resultTbl.occupAlt = type(tbl[2]) == "table" and tbl[2] or {tbl[2]} + resultTbl.switch = tbl[3] + if segmTyp.occup_x then + resultTbl.occup2 = type(tbl[4]) == "table" and tbl[4] or {tbl[4]} + end + end + + if resultTbl.signal1 then + local signal = resultTbl.signal1:gsub("^[>]+","") + local top = resultTbl.signal1:find("^>") + + local typ = tonumber(signal[1]) + local name = signal:sub(2,-1) + if not typ then + ARMGenError(Format("Parser warning. Signal type in id station %d line %d segm %d segment not found. Using default 1",station,line,segm),false) + name = signal[1]..name + elseif typ < 1 or typ > 3 then + ARMGenError(Format("Parser warning. Signal type in id station %d line %d segm %d segment have wrong ID, must be in range 1..3. Using default 1",station,line,segm),false) + typ = 1 + end + if name == "" then name = resultTbl.occup[1] end + resultTbl.signal1 = {name=name,type=typ or 1,top = top,segm=resultTbl} + end + if resultTbl.signal2 then + local signal = resultTbl.signal2:gsub("^[>]+","") + local top = resultTbl.signal2:find("^>") + local typ = tonumber(signal[1]) + local name = signal:sub(2,-1) + if not typ then + ARMGenError(Format("Parser warning. Signal type in id station %d line %d segm %d segment not found. Using default 1",station,line,segm),false) + name = signal[1]..name + elseif typ < 1 or typ > 3 then + ARMGenError(Format("Parser warning. Signal type in id station %d line %d segm %d segment have wrong ID, must be in range 1..3. Using default 1",station,line,segm),false) + typ = 1 + end + if name == "" then name = resultTbl.occup[1] end + resultTbl.signal2 = {name=name,type=typ or 1,top = top,segm=resultTbl} + end + resultTbl.type = typ + resultTbl.width = segmTyp.width or 1 + resultTbl.segm = segmTyp + return resultTbl +end + + +Metrostroi.ARMConfigGenerated = {} +local id = 0 +for i,station in ipairs(Metrostroi.ARMConfig) do + if not Metrostroi.ARMConfigGenerated[i] then Metrostroi.ARMConfigGenerated[i] = {} end + local genStation = Metrostroi.ARMConfigGenerated[i] + local y = 0 + + MsgC(Color(0, 222, 255),"MetrostroiARM:Solving station ",i,"\n") + if #station == 0 then ARMGenError(Format("Parser warning. Empty station %d! Skipping...",i),false) continue end + if not station.station then ARMGenError(Format("Parser error. Can't find station name in station %d! Skipping...",i),true) continue end + + local stationTbl = string.Explode(",",station.station) + if not stationTbl or #stationTbl < 3 or not tonumber(stationTbl[1]) then ARMGenError(Format("Parser error. Malformed station data in station %d! Skipping...",i),true) continue end + + genStation.id = stationTbl[1] + genStation.shortname = stationTbl[2] + genStation.name = stationTbl[3] + genStation.buttons = {} + genStation.routes = station.routes or {} + genStation.signals = station.signals or {} + for lineID,line in ipairs(station) do + local x = line.x or 0 + for segmID,segm in ipairs(line) do + if type(segm) ~= "string" then + ARMGenError(Format("Parser error on station %d line %d segm %d, excepted string,got %s. Skipping segment...",i,lineID,segmID,type(segm)),true) + continue + end + local segmTbl= ParseARMTable(segm,i,lineID,segmID) + if segmTbl.error then + ARMGenError(Format("Parser warning. Skipping station %d line %d segm %d segment, type error(type '%s' not found)",i,lineID,segmID,segmTbl.type),false) + continue + end + segmTbl.x = x + segmTbl.y = y + segmTbl.id = table.insert(genStation,segmTbl) + x = x + (segmTbl.width or 1) + end + y = y + (line.skip or 1) + end + if station.buttons then + for _,button in pairs(station.buttons) do + button.pressable = false + button.selected = false + button.isbutton = true + if button.type == "r" then + button.segm = ENT.Types.button_normal + for k,v in ipairs(genStation) do + if button.target and button.target[1] == v.x and button.target[2] == v.y then + button.segm = v + if v.button and not v.buttons then + v.buttons = {v.button,button} + v.button = nil + elseif v.buttons then + table.insert(v.buttons,button) + else + v.button = button + end + break + end + if not button.segm and v.signal1 and v.signal1.name == button.signal then + button.segm = v + v.signal1.button = button + end + if not button.segm and v.signal2 and v.signal2.name == button.signal then + button.segm = v + v.signal2.button = button + end + end + end + table.insert(genStation.buttons,button) + end + end +end + +local function GetXY(x,y) + return 100+x*36,100+y*70 +end + +local function GetSegmPos(segm,alt) + local x,y = segm.x,segm.y + local segmt = segm.segm + local u0,v0,u1,v1 = 0,0,1,1 + if segm.invertX then u0,u1 = 1,0 end + if segm.invertY then v0,v1 = 1,0 end + if alt == nil then + return GetXY(x+segm.width*u0,y) + elseif alt == false and segmt.next_m then + return GetXY(x+segmt.next_m.x-segm.width*u0,y+segmt.next_m.y) + --print(123,x,y) + elseif alt and segmt.next_a then + return GetXY(x+segmt.next_a.x*u1-segmt.next_a.x*u0+segmt.width*u0,y+segmt.next_a.y*v1-segmt.next_a.y*v0) + end +end + + + +local function ARMSetNextCompare(posX,posY,segm,nsegm) + local xp,yp = GetSegmPos(segm) + local x,y = GetSegmPos(nsegm) + if sx and posX == x and posY == y then + nsegm.prev = segm + return true + end + + sx,sy = GetSegmPos(nsegm,false) + if sx and posX == sx and posY == sy then + nsegm.next_m = segm + return true + end + if not nsegm.segm.next_a then return end + sx,sy = GetSegmPos(nsegm,true) + if x ~= xp and y ~= yp and sx and posX == sx and posY == sy then + nsegm.next_a = segm + if segm.id == 29 then + local x1,y1 = GetSegmPos(nsegm) + local x2,y2 = GetSegmPos(segm) + print(-2,x1,y1,x2,y2) + end + return true + end +end + +local function ARMSetNext(station) + for csegmid,csegm in ipairs(station) do + for segmid,segm in ipairs(station) do + if segm == csegm then continue end + + local posX,posY = GetSegmPos(csegm) + if ARMSetNextCompare(posX,posY,csegm,segm) then + csegm.prev = segm + --break + end + local posOX,posOY = GetSegmPos(csegm,false) + if ARMSetNextCompare(posOX,posOY,csegm,segm) then + csegm.next_m = segm + --break + end + local posAX,posAY = GetSegmPos(segm) + if not csegm.segm.next_a or posX == posAX or posY == posAY then continue end + posOX,posOY = GetSegmPos(csegm,true) + if ARMSetNextCompare(posOX,posOY,csegm,segm) then + csegm.next_a = segm + --break + end + end + end +end +for i,st in ipairs(Metrostroi.ARMConfigGenerated) do ARMSetNext(st) end + + +local function tcopy(from) + local t = {} + for k,v in pairs(from) do + t[k] = v + end + return t +end +local iter = 1 +local function ARMAddSignal(segm,dir,signals,trace,restbl) + local signal = dir and segm.signal2 or not dir and segm.signal1 + local button,buttons = segm.button,segm.buttons + if button then print(bitton,button.signal) end + if signal and table.HasValue(signals,signal.name) then + table.insert(restbl,{signal,table.Copy(trace),dir}) + elseif button and table.HasValue(signals,button.signal) then + table.insert(trace,{segm.id}) + table.insert(restbl,{button,table.Copy(trace),dir}) + elseif buttons then + for k,button in pairs(buttons) do + if table.HasValue(signals,button.signal) then + table.insert(trace,{segm.id}) + table.insert(restbl,{button,table.Copy(trace),dir}) + end + end + end +end +local function ARMFindSegmSignals(station,segm,dir,signals,last,checked,restbl,trace) + if not restbl then restbl = {} end + if not checked then checked = {} end + if not trace then trace = {} end + if not segm or checked[segm] then return restbl end + checked[segm] = true + local segmIndex = table.insert(trace,{segm.id}) + --trace[segm] = true + + iter = iter + 1 + if iter > 10000 then ARMGenError(Format("Routes generation error. Max iter reached!"),true) return false end + local segmM,segmA = segm.next_m,segm.next_a + local segmP = segm.prev + + + local mainM = segmM and (dir and segmM.x > segm.x or not dir and segmM.x < segm.x) + local mainP = segmP and (dir and segmP.x > segm.x or not dir and segmP.x < segm.x) + if segmA and mainM then + local trace= table.Copy(trace) + + trace[segmIndex][2] = true + ARMAddSignal(segmA,dir,signals,trace,restbl) + ARMFindSegmSignals(station,segmA,dir,signals,segm,checked,restbl,trace) + end + if segmM and mainM then + ARMAddSignal(segmM,dir,signals,trace,restbl) + ARMFindSegmSignals(station,segmM,dir,signals,segm,checked,restbl,trace) + end + if segmP and mainP then + trace[segmIndex][2] = last and segm.next_a == last or nil-- or segmP.next_a == segm or nil + ARMAddSignal(segmP,dir,signals,trace,restbl) + ARMFindSegmSignals(station,segmP,dir,signals,segm,checked,restbl,trace) + end + return restbl +end + +for i,station in ipairs(Metrostroi.ARMConfigGenerated) do + print("STATION",i) + for _,button in pairs(station.buttons) do + if button.type == "r" and station.routes[button.signal] then + print(button.signal,button.segm) + button.pressable = true + local results1 = ARMFindSegmSignals(station,button.segm,false,station.routes[button.signal]) + local results2 = ARMFindSegmSignals(station,button.segm,true,station.routes[button.signal]) + + table.Add( results2, results1 ) + --print(results[1][1].name,results[1][1].segm)--]] + for k,v in pairs(results1) do + local i = 0 + for k,v in pairs(v[2]) do i = i + 1 end + print("--",k,v,v[1],v[2],i) + end + button.routes = results2 + end + --[[ if segm.signal2 then + local result = ARMFindNextSegm(station,segm,true,nil,nil,segm.signal2.name=="PT640") + if result and #result > 0 then + print(segm.signal2.name.."->") + for k,v in ipairs(result) do print(" "..v.name) end + end + end + if segm.signal1 then + local result = ARMFindNextSegm(station,segm,false,nil,nil,segm.signal1.name=="MD01") + if result and #result > 0 then + print(segm.signal1.name.."->") + for k,v in ipairs(result) do print(" "..v.name) end + end + end--]] + end + +end +if errors == 0 and warnings == 0 then + MsgC(Color(0,255,0),"MetrostroiARM:Generate finished without errors and warnings.\n") +elseif errors == 0 then + MsgC(Color(255,255,0),"MetrostroiARM:Generate finished with "..warnings.." warnings.\n") +else + MsgC(Color(255,0,0),"MetrostroiARM:Generate finished with "..errors.." errors and "..warnings.." warnings!\n") +end +--PrintTable(Metrostroi.ARMConfigGenerated) + +for k,v in ipairs(Metrostroi.ARMConfigGenerated) do + Metrostroi.ARMTable[k] = { + occChecks = {}, + net = {}, + signal = {}, + switch = {}, + routes = {}, + } +end \ No newline at end of file diff --git a/lua/entities/gmod_mus_clock_analog/cl_init.lua b/lua/entities/gmod_mus_clock_analog/cl_init.lua new file mode 100644 index 0000000..d8ab24f --- /dev/null +++ b/lua/entities/gmod_mus_clock_analog/cl_init.lua @@ -0,0 +1,46 @@ +include("shared.lua") + +function ENT:Initialize() + self.Arrows = {} + self.OldSec = 0 + self.SecPull = CurTime() +end + +function ENT:Think() + for i=1,3 do + if not IsValid(self.Arrows[i]) then + local model = "models/metrostroi/signals/clock_analog_arrow_"..(i==1 and "h" or i==2 and "m" or "s")..".mdl" + --self.Arrows[i] = ents.CreateClientProp("models/metrostroi/81-717/reverser.mdl") + --self.Arrows[i]:SetModel( model ) + self.Arrows[i] = ClientsideModel(model,RENDERGROUP_OPAQUE) + self.Arrows[i]:SetPos(self:GetPos()) + self.Arrows[i]:SetAngles(self:GetAngles()) + self.Arrows[i]:SetParent(self) + end + end + local d = os.date("!*t",Metrostroi.GetSyncTime()) + if self.OldSec ~= d.sec then + self:EmitSound("mus/clock_click"..math.random(1,8)..".wav",65,math.random(95,105),0.5) + self.OldSec = d.sec + self.SecPull = RealTime()+0.05 + self.Arrows[1]:SetPoseParameter("position",(0.5+d.hour/24+d.min/1440)%1) + self.Arrows[2]:SetPoseParameter("position",d.min/60+d.sec/3600) + end + if RealTime()-self.SecPull > 0 or d.sec < 30 then + self.Arrows[3]:SetPoseParameter("position",d.sec/60) + else + self.Arrows[3]:SetPoseParameter("position",d.sec/60 +(d.sec-15)/60*0.002) + end + + --[[ + ]] +end + +function ENT:OnRemove() + for _,v in pairs(self.Arrows) do + SafeRemoveEntity(v) + end +end +function ENT:Draw() + self:DrawModel() +end diff --git a/lua/entities/gmod_mus_clock_analog/init.lua b/lua/entities/gmod_mus_clock_analog/init.lua new file mode 100644 index 0000000..9151fe7 --- /dev/null +++ b/lua/entities/gmod_mus_clock_analog/init.lua @@ -0,0 +1,12 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +function ENT:Initialize() + self:SetModel("models/metrostroi/signals/clock_analog_arrow_base.mdl") +end + +function ENT:Think() + self:NextThink(0.1) + return true +end diff --git a/lua/entities/gmod_mus_clock_analog/shared.lua b/lua/entities/gmod_mus_clock_analog/shared.lua new file mode 100644 index 0000000..0aab199 --- /dev/null +++ b/lua/entities/gmod_mus_clock_analog/shared.lua @@ -0,0 +1,8 @@ +ENT.Type = "anim" + +ENT.Category = "Metrostroi (utility)" +ENT.Author = "MyCbEH" +ENT.Instructions = "Tick Tock!" + +ENT.Spawnable = true +ENT.AdminSpawnable = false diff --git a/lua/entities/gmod_subway_81-501/cl_init.lua b/lua/entities/gmod_subway_81-501/cl_init.lua new file mode 100644 index 0000000..d3ac393 --- /dev/null +++ b/lua/entities/gmod_subway_81-501/cl_init.lua @@ -0,0 +1,1387 @@ +-------------------------------------------------------------------------------- +-- 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 = {} + +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.5,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.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"}, + } +} + +ENT.ButtonMap["Main"] = { + pos = Vector(457.6,-32,-8.0), + ang = Angle(0,-90,70), + width = 260, + height = 240, + 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(91,91,178),z = 10, var="DoorsWC",}, + sprite = {bright=0.25,size=0.25,scale=0.07,color=Color(100,120,255),z=12,} + }}, + {ID = "LOnSet", 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="LOn",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 = "LOffSet", 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="LOff",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 = "VozvratRPSet", 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="VozvratRP",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 = "KSNSet", 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="KSN",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 = "KRZDSet", 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="KRZD",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 = "KDLSet", 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="KDL",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 = "KDPSet", 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="KDP",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 = "VMKToggle",x=28,y=155-5,radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=-23, + var="VMK",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 = "VUDToggle",x=232,y=155-5,radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=-23, + var="VUD",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") +--addTW10Cosume("Lamps1_2") +--addTW10Cosume("Lamps1_2") + +--VU Panel +ENT.ButtonMap["VU"] = { + pos = Vector(466.2,-16,14), + ang = Angle(0,270-7,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["Stopkran"] = { + pos = Vector(463,28.5,5), + ang = Angle(0,-90,90), + width = 200, + height = 1300, + scale = 0.1/2, + buttons = { + {ID = "EmergencyBrakeValveToggle",x=0, y=0, w=200, h=1300, tooltip="",tooltip="",states={"Train.Buttons.Closed","Train.Buttons.Opened"},var="EmergencyBrakeValve"}, + } +} +ENT.ClientProps["stopkran"] = { + model = "models/metrostroi_train/81-717/stop_spb.mdl", + pos = Vector(464.5-0.1,24.4,-3), + ang = Angle(0,270,0), + hide = 0.8, +} +ENT.ClientSounds["EmergencyBrakeValve"] = {{"stopkran",function() return "disconnect_valve" end,1,1,50,1e3,Angle(-90,0,0)}} + +ENT.ButtonMap["AVMain"] = { + pos = Vector(403.5,40.3,42), + ang = Angle(0,90,90), + width = 290, + height = 300, + scale = 0.0625, + hide = 0.8, + + buttons = { + {ID = "AVToggle", x=0, y=0, w=290, h=300, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_av8r.mdl",x=-35, y=140, z=55, 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, + }}, + } +} + + +ENT.ButtonMap["AV1"] = { + pos = Vector(403.5,39.2,18), + ang = Angle(0,90,90), + width = 320, + 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, + var="VU3",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + {ID = "VU2Toggle", x=110, y=0, w=100, h=140, tooltip="", model = { + model = "models/metrostroi_train/equipment/vu22_black.mdl", z=20, ang = 180, + var="VU2",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + {ID = "VU1Toggle", x=220, y=0, w=100, h=140, tooltip="", model = { + model = "models/metrostroi_train/equipment/vu22_black.mdl", z=20, ang = 180, + var="VU1",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} + +-- Battery panel +ENT.ButtonMap["Battery"] = { + pos = Vector(403.5,22,20.3), + 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_2.mdl", z=15, ang=Angle(90,0,180), + labels={ + {model="models/metrostroi_train/81-502/labels/vu_labels.mdl",skin=3,ang=90,z=20.9,x=-50,y=-12.5}, + {model="models/metrostroi_train/81-502/labels/vu_labels.mdl",skin=3,ang=90,z=20.9,x=50,y=-12.5}, + }, + 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,46,-2.0), + ang = Angle(0,-83,90), + width = 340, + height = 400, + scale = 0.0625, + + buttons = { + {ID = "ParkingBrakeLeft",x=0, y=0, w=170, h=400, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.ParkingBrake"),ent:GetPackedRatio("ManualBrake")*100) end}, + {ID = "ParkingBrakeRight",x=170, y=0, w=170, 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.6,59.15,24.5), + ang = Angle(0,-53,90), + width = 60, + height = 280, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "VDLSet", x=10, y=32, w=40,h=80, tooltip="", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=-19, color = Color(255,255,255), + var="VDL",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), + }}, + } +} + +ENT.ButtonMap["BCPressure"] = { + pos = Vector(461,-50.5,7.6), + ang = Angle(0,-90-30,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["BLTLPressure"] = { + pos = Vector(458,-54.5,7.6), + ang = Angle(0,-90-30,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["HVMeters"] = { + pos = Vector(458.3,-55.4,36), + ang = Angle(0,-115.3,90), + + width = 66, + height = 152, + scale = 0.0625, + + buttons = { + {ID = "!EnginesVoltage", x=0,y=0,w=66,h=72,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesVoltage"),ent:GetPackedRatio("EnginesVoltage")*1000) end}, + {ID = "!EnginesCurrent", x=0,y=79,w=66,h=72,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesCurrent"),ent:GetPackedRatio("EnginesCurrent")*1000-500) end}, + } +} +ENT.ButtonMap["DriverValveBLDisconnect"] = { + pos = Vector(450.5,-53,-37.61), + ang = Angle(-90,0,0), + width = 200, + height = 90, + 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 = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} +ENT.ButtonMap["DriverValveTLDisconnect"] = { + pos = Vector(447+5,-47,-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 = 90, 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,16,43.4), + ang = Angle(0,-90,90), + width = 650, + height = 1780, + 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(416,64,43.4), + ang = Angle(0,0,90), + width = 642, + height = 1780, + scale = 0.1/2, + buttons = { + {ID = "CabinDoor",x=0,y=0,w=642,h=2000, 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, + }}, + } +} + +-- AV panel +ENT.ButtonMap["AV"] = { + pos = Vector(403.5,-58.2,27.5), + ang = Angle(0,90,90), + width = 85*7, + height = 120, + scale = 0.0625, + hide = 0.8, + + buttons = { + {ID = "KSDToggle",x=85*4,y=0,w=85,h=120 , 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=9,ang=90,z=20.9,x=0,y=-12.5}}, + var="KSD",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} + +ENT.ButtonMap["FrontDoor"] = { + pos = Vector(468,16,43.4), + ang = Angle(0,-90,90), + width = 650, + height = 1780, + 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,64,43.4), + ang = Angle(0,0,90), + width = 680, + height = 2000, + scale = 0.1/2, + buttons = { + {ID = "CabinDoor",x=0,y=0,w=680,h=2000, 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+18,-16,38), + 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+18,19,38), + 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,38), + 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.55,-4.5), + ang = Angle(0,-133,0), + hideseat = 0.2, +} +ENT.ClientProps["controller"] = { + model = "models/metrostroi_train/81-502/kv_white.mdl", + pos = Vector(458.00,-23,-6), + ang = Angle(0,180+5,0), + hideseat = 0.2, +} + +ENT.ClientProps["reverser"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = ENT.ClientProps["controller"].pos+Vector(0,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.5,0.2,-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(450,-56.5,-34), + ang = Angle(0,88,-90), + hideseat = 0.2, +} +ENT.ClientProps["train_disconnect"] = { + model = "models/metrostroi_train/81-707/cran3.mdl", + pos = Vector(453.5,-51.8,-27.33), + ang = Angle(90,-100,90), + hideseat = 0.2, +} + +ENT.ClientProps["parking_brake"] = { + model = "models/metrostroi_train/81-703/cabin_parking.mdl", + pos = Vector(456.8,35,-14.71), + ang = Angle(-90.00,7,0.00), + hideseat = 0.2, +} + +-------------------------------------------------------------------------------- +ENT.ClientProps["train_line"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(457.085846,-56.869980,5.294523), + ang = Angle(222.000000,58.730000,-91.599998), + hideseat = 0.2, +} + +ENT.ClientProps["brake_line"] = { + model = "models/metrostroi_train/Equipment/arrow_tm.mdl", + pos = Vector(457.045593,-56.880123,5.298195), + ang = Angle(223.123093,58.730000,-91.599998), + hideseat = 0.2, +} + + +ENT.ClientProps["brake_cylinder"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(460.125610,-52.790321,5.260011), + ang = Angle(222,59.75,-89.15), + hideseat = 0.2, +} + +---------------------------------------------------------------- +ENT.ClientProps["voltmeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(457.766754,-57.440155,33.01), + ang = Angle(-90.000000,0.000000,-25.100000), + hideseat = 0.2, +} +ENT.ClientProps["ampermeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(457.750427,-57.475105,28.29), + ang = Angle(-90.000000,0.000000,-25.100000), + hideseat = 0.2, +} + + + +ENT.ClientProps["Ema_salon"] = { + model = "models/metrostroi_train/81-502/ema_salon_501.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2.0, +} +ENT.ClientProps["Ema_salon2"] = { + model = "models/metrostroi_train/81-508/81-508_underwagon.mdl", + pos = Vector(0,1,-18), + ang = Angle(0,0,0), + hide = 2.0, +} + +ENT.ClientProps["bortlamps1"] = { + model = "models/metrostroi_train/81-502/bort_lamps_body.mdl", + pos = Vector(414.5,68.5,37), + ang = Angle(0,0,0), + hide = 2, +} +ENT.ClientProps["bortlamp1_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = Vector(414.5,69.4,37+3.25), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp1_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = Vector(414.5,69.4,37-0.02), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp1_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = Vector(414.5,69.4,37-3.3), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamps2"] = { + model = "models/metrostroi_train/81-502/bort_lamps_body.mdl", + pos = Vector(414.5,-65.5,37), + ang = Angle(0,180,0), + hide = 2, +} +ENT.ClientProps["bortlamp2_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = Vector(414.5,-66.4,37+3.25), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp2_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = Vector(414.5,-66.4,37-0.02), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp2_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = Vector(414.5,-66.4,37-3.3), + ang = Angle(0,180,0), + nohide = true, +} + +ENT.ClientProps["Ema_cabine"] = { + model = "models/metrostroi_train/81-502/ema501_cabine.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2.0, +} + + +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, +} +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, +} + + + +-------------------------------------------------------------------------------- +-- 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-502/81-502_door_right.mdl", + pos = GetDoorPosition(i,k,0), + ang = Angle(0,90 + 180*k,0), + hide = 2.0, + } + --[[ ENT.ClientProps["door"..i.."x"..k.."b"] = { + model = "models/metrostroi_train/81-502/81-502_door_left.mdl", + pos = GetDoorPosition(i,k,1), + ang = Angle(0,90 + 180*k,0), + hide = 2.0, + }--]] + end +end--]=] +ENT.ClientProps["door0x1"] = { + model = "models/metrostroi_train/81-502/81-502_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-502/81-502_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-502/81-502_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-502/81-502_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-502/81-502_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-502/81-502_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-502/81-502_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-502/81-502_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-502/81-502_door_tor.mdl", + pos = Vector(460.62+7.4,-14.53,-7.23), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door2"] = { + model = "models/metrostroi_train/81-502/81-502_door_tor.mdl", + pos = Vector(-462.6-8,16.53,-7.24), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door3"] = { + model = "models/metrostroi_train/81-502/81-502_door_interior.mdl", + pos = Vector(401.50,-15,-7), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door4"] = { + model = "models/metrostroi_train/81-502/81-502_door_cab.mdl", + pos = Vector(411.17+7.6,66.05,-6.38), + ang = Angle(0,-90,0), + hide = 2.0, +} +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.ClientProps["tab"] = { + model = "models/metrostroi_train/Equipment/tab.mdl", + pos = Vector(16,0,-0), + ang = Angle(0,0,0), + skin = 6, + hide = 2.0, +} + + + +ENT.Lights = { + [1] = { "headlight", Vector(475,0,-20), Angle(0,0,0), Color(169,130,88), brightness = 3 ,fov = 90, texture = "models/metrostroi_train/equipment/headlight",shadows = 1,headlight=true}, + [22] = { "headlight", Vector(445,-55,40), Angle(75, 70,45), Color(190, 130, 88), hfov=110, vfov=110,farz=65,brightness = 2,shadows = 1, texture = "effects/flashlight/soft", hidden="Lamps_pult"}, + + -- Head + [2] = { "glow", Vector(469.4, 45.43,-30.7), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 1.0 }, + [4] = { "glow", Vector(458+9,-14.86, 58), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 0.5 }, + [5] = { "glow", Vector(458+9,0, 58), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 0.5 }, + [6] = { "glow", Vector(458+9, 14.86, 58), Angle(0,0,0), Color(255,220,180), brightness = 1, scale = 0.5 }, + + -- Cabin + [23] = { "dynamiclight", Vector(425,-10.0,30), Angle(0,0,0), Color(255,255,255), brightness = 0.0003, distance = 600, hidden="Ema_salon"}, + -- Interior + [9] = { "dynamiclight", Vector(200, 0, -5), Angle(0,0,0), Color(255,220,180), brightness = 3, distance = 200}, + [10] = { "dynamiclight", Vector(-150, 0, -5), Angle(0,0,0), Color(255,220,180), brightness = 3, distance = 200}, + [11] = { "dynamiclight", Vector( 200, 0, -5), Angle(0,0,0), Color(255,220,180), brightness = 4, distance = 260}, + [12] = { "dynamiclight", Vector( 0, 0, -5), Angle(0,0,0), Color(255,220,180), brightness = 4, distance = 260}, + [13] = { "dynamiclight", Vector(-260, 0, -5), Angle(0,0,0), Color(255,220,180), brightness = 4, distance = 260}, + + [15] = { "light",Vector(414.5,69.4,37+3.25), Angle(0,0,0), Color(254,254,254), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [16] = { "light",Vector(414.5,69.4,37-0.02), Angle(0,0,0), Color(40,240,122), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [17] = { "light",Vector(414.5,69.4,37-3.3), Angle(0,0,0), Color(254,210,18), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [18] = { "light",Vector(414.5,-66.4,37+3.25), Angle(0,0,0), Color(254,254,254), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [19] = { "light",Vector(414.5,-66.4,37-0.02), Angle(0,0,0), Color(40,240,122), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [20] = { "light",Vector(414.5,-66.4,37-3.3), Angle(0,0,0), Color(254,210,18), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + + [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(446.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-3*6.6/2,69,-26))) + leftNum:SetSkin(num) + end + if IsValid(rightNum) then + rightNum:SetPos(self:LocalToWorld(Vector(-280-i*6.6-3*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 + + local Lamps = self:GetPackedRatio("LampsStrength") + + local emer1 = self:Animate("lamps_emer1",self:GetPackedBool("Lamps_emer1") 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",emer1) + 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, emer1 > 0,emer1) + self:SetLightPower("Lamps_cab", emer1 > 0,emer1) + 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 + + -- 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:ShowHideSmooth("Lamps_pult",PL) + self:SetLightPower("Lamps_pult",PL>0,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 Bortlamp_w = self:Animate("Bortlamp_w",self:GetPackedBool("DoorsW") and 1 or 0,0,1,16,false) + local Bortlamp_g = self:Animate("Bortlamp_g",self:GetPackedBool("GRP") and 1 or 0,0,1,16,false) + local Bortlamp_y = self:Animate("Bortlamp_y",self:GetPackedBool("BrY") and 1 or 0,0,1,16,false) + self:ShowHideSmooth("bortlamp1_w",Bortlamp_w) + self:ShowHideSmooth("bortlamp1_g",Bortlamp_g) + self:ShowHideSmooth("bortlamp1_y",Bortlamp_y) + self:ShowHideSmooth("bortlamp2_w",Bortlamp_w) + self:ShowHideSmooth("bortlamp2_g",Bortlamp_g) + self:ShowHideSmooth("bortlamp2_y",Bortlamp_y) + self:SetLightPower(15,Bortlamp_w > 0, Bortlamp_w) + self:SetLightPower(18,Bortlamp_w > 0, Bortlamp_w) + self:SetLightPower(16,Bortlamp_g > 0, Bortlamp_g) + self:SetLightPower(19,Bortlamp_g > 0, Bortlamp_g) + self:SetLightPower(17,Bortlamp_y > 0, Bortlamp_y) + self:SetLightPower(20,Bortlamp_y > 0, Bortlamp_y) + + self:Animate("brake_disconnect",self:GetPackedBool("DriverValveBLDisconnect") and 0 or 1,0.25,0.5, 4,false) + self:Animate("train_disconnect",self:GetPackedBool("DriverValveTLDisconnect") and 1 or 0,0.25,0, 4,false) + self:Animate("stopkran", self:GetPackedBool("EmergencyBrakeValve") and 1 or 0, 0,0.23, 256, 3,false) + + -- Simulate pressure gauges getting stuck a little + self:Animate("brake",self:GetPackedRatio("CranePosition"), 0.00, 0.48, 256, 24) + 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: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.96,0, 0.745, 359,3)--,,0.01) + self:Animate("train_line", self:GetPackedRatio("TLPressure")^0.96,0, 0.745, 359,3)--,,0.01) + self:Animate("brake_cylinder", self:GetPackedRatio("BCPressure"), 0.0, 0.75, 359,3)--,,0.03) + self:Animate("voltmeter", self:GetPackedRatio("EnginesVoltage"), 0.631,0.376-0.01,60,3) + self:Animate("ampermeter", self:GetPackedRatio("EnginesCurrent"), 0.655,0.35,60,3) + + local door2 = self:Animate("door2", self:GetPackedBool("RearDoor") and 1 or 0,0,0.25, 8, 1) + local door1 = self:Animate("door1", self:GetPackedBool("FrontDoor") and 1 or 0,0,0.22, 8, 1) + local door3 = self:Animate("door3", self:GetPackedBool("PassengerDoor") and 1 or 0,1,0.79, 8, 1) + local door4 = self:Animate("door4", self:GetPackedBool("CabinDoor") and 1 or 0,1,0.77, 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) + if (state ~= 1 and state ~= 0) ~= self.DoorStates[id] then + --if doorstate and state < 1 or not doorstate and state > 0 then + --else + if doorstate and state == 1 or not doorstate and state == 0 then + 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.8+self.DoorLoopStates[id]*0.2) + local n_l = "door"..i.."x"..k--.."a" + --local n_r = "door"..i.."x"..k.."b" + local dlo = 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.01,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)) + --self:SetSoundState("emer_brake",self.EmergencyValveRamp*0.8,1) + --self:SetSoundState("emer_brake",self.EmergencyValveRamp*0.8,1) + + -- 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.25,1) + else + self:SetSoundState("rk",0,0) + end + end + + local work = self:GetPackedBool("AnnPlay") + local noise = self:GetNW2Int("AnnouncerNoise", -1) + + local volume = self:GetNW2Float("UPOVolume",0.6) + local noisevolume = self:GetNW2Float("UPONoiseVolume",0.6) + + self.BPSNBuzzVolume = self.BPSNBuzzVolume or 0 + local buzzvolume = volume + if self.Sounds["announcer1"] and IsValid(self.Sounds["announcer1"]) then buzzvolume = (1-(self.Sounds["announcer1"]:GetLevel())*math.Rand(0.9,3))*buzzvolume*2 end + if self.BPSNBuzzVolume > buzzvolume then + self.BPSNBuzzVolume = math.Clamp(self.BPSNBuzzVolume + 8*(buzzvolume-self.BPSNBuzzVolume)*dT,0.1,1) + else + self.BPSNBuzzVolume = math.Clamp(self.BPSNBuzzVolume + 0.4*(buzzvolume-self.BPSNBuzzVolume)*dT,0.1,1) + end + + for k,v in ipairs(self.AnnouncerPositions) do + volume = volume*(v[3] or 1) + self:SetSoundState("announcer_noiseW"..k,noise>-1 and noisevolume*volume or 0,1) + for i=1,3 do + self:SetSoundState(Format("announcer_noise%d_%d",i,k),(work and i==noise) and volume*self.BPSNBuzzVolume*self:GetNW2Float("UPOBuzzVolume",1) or 0,1) + end + end + for k,v in ipairs(self.AnnouncerPositions) do + if IsValid(self.Sounds["announcer"..k]) then self.Sounds["announcer"..k]:SetVolume(work and v[3]*volume or 0) end + end +end + +function ENT:OnAnnouncer(volume) + return self:GetPackedBool("AnnPlay") and self:GetNW2Float("UPOVolume",0.6)*volume or 0 +end + +function ENT:Draw() + self.BaseClass.Draw(self) +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: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 == "LK5" then + local speed = self:GetPackedRatio("Speed") + local id = range > 0 and "lk5_on" or "lk5_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 == "LK4" then + local speed = self:GetPackedRatio("Speed") + local id = range > 0 and "lk4_on" or "lk4_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 == "KK" then + return range > 0 and "kk_on" or "kk_off",location,1,pitch--0.8 + end + if soundid == "RPB" then + return range > 0 and "rpb_on" or "rpb_off",location,1,pitch + end + if soundid == "KD" then + return range > 0 and "kd_on" or "kd_off",location,1,pitch + end + if soundid == "AVU" then + return range > 0 and "avu_on" or "avu_off",location,1,1 + 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 + +Metrostroi.GenerateClientProps() diff --git a/lua/entities/gmod_subway_81-501/init.lua b/lua/entities/gmod_subway_81-501/init.lua new file mode 100644 index 0000000..707b74c --- /dev/null +++ b/lua/entities/gmod_subway_81-501/init.lua @@ -0,0 +1,515 @@ +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", + "KSD","KPVU", + "KRZD","KDL","LOn","LOff","VozvratRP","KSN","KDP","VMK","Ring","VUS","VUD", + "VDL","GV", + "Headlights","DriverValveBLDisconnect","DriverValveTLDisconnect", + "EmergencyBrakeValve" +} +ENT.SyncFunctions = { + "" +} + +function ENT:Initialize() + self.Plombs = { + --KAH = true, + --OtklAVU = true, + --RC1 = true, + --ALS = true, + --UOS = true, + VU = true, + Init = true, + UAVA = true, + } + -- Set model and initialize + self:SetModel("models/metrostroi_train/81-502/81-502.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+6+2.5),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+3.5,0,-75),Angle(0,0,0),true,"722") + self.RearCouple = self:CreateCouple(Vector(-421.5-3.5,0,-75),Angle(0,180,0),false,"717") + 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+4.5,1.0,-72),Angle(0,0,0),true,"702") + self.RearCouple = self:CreateCouple(Vector(-421+2+3.6-4.5,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] = "VozvratRPSet", + + [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] = {"KDL",helper="VDLSet"}, + [KEY_D] = "KDP", + [KEY_V] = "VUDToggle", + [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",helper="EmergencyBrakeValveToggle"}, + + [KEY_PAD_ENTER] = "KVWrenchKV", + [KEY_PAD_0] = "DriverValveDisconnect", + [KEY_LSHIFT] = { + [KEY_W] = "KVUp_Unlocked", + + [KEY_1] = "LOnSet", + [KEY_2] = "LOffSet", + [KEY_4] = "KVSet0Fast", + [KEY_L] = "DriverValveDisconnect", + + [KEY_7] = "KVWrenchNone", + [KEY_9] = "KVWrenchKV9", + [KEY_0] = "KVWrenchKV", + [KEY_6] = "KVSetT1A", + + [KEY_PAD_ENTER] = "KVWrenchNone", + }, + } + 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 = "RearTrainLineIsolationToggle", + Pos = Vector(-474, -30, -62), Radius = 8, + }, + { + ID = "RearBrakeLineIsolationToggle", + 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 = { + [15]=true, + } + self.TrainWireCrossConnections = { + [5] = 4, -- Reverser F<->B + [30] = 29, -- 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.A5:TriggerInput("Set",0) + self:SetNW2Float("UPONoiseVolume",math.Rand(0,0.3)) + self:SetNW2Float("UPOVolume",math.Rand(0.8,1)) + self.EMAType = self.EMAType or 1 + + self:TrainSpawnerUpdate() +end + +function ENT:TrainSpawnerUpdate() + if IsValid(self.FrontBogey) then + self.FrontBogey:SetNW2Int("SquealType",math.floor(math.random()*7)+1) + end + if IsValid(self.RearBogey) then + self.RearBogey:SetNW2Int("SquealType",math.floor(math.random()*7)+1) + 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 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) + self:SetPackedBool("Lamps_emer2",emerActive2 > 0) + self:SetPackedBool("Lamps_half1",lightsActive1 > 0) + self:SetPackedBool("Lamps_half2",lightsActive2 > 0) + + self:SetPackedRatio("LampsStrength",lightsActive1) + + -- 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.SSN > 0 then + local wags = #self.WagonList + for _,v in ipairs(self.WagonList) do + TW18 = TW18+(v.Panel.TW18 or 0)/wags + end + end + self:SetPackedBool("CPS_AV",Panel.SSD > 0) + self:SetPackedRatio("CPS_SN1",math.Clamp(TW18^0.7,0,1)) + self:SetPackedBool("CPS_6",Panel.S6 > 0) + self:SetPackedBool("CPS_1",Panel.S1 > 0) + self:SetPackedBool("CPS_2",Panel.S2 > 0) + self:SetPackedBool("CPS_RP",Panel.GreenRP > 0) + self:SetPackedBool("CPS_SD",Panel.SSD > 0) + self:SetPackedRatio("LampsCount",math.Clamp(1-self.Electric.Cosume,0.3,1)) + + self:SetPackedBool("DoorsW",Panel.DoorsW > 0) + self:SetPackedBool("GRP",Panel.GreenRP > 0) + self:SetPackedBool("BrY",Panel.BrY > 0) + self:SetPackedBool("DoorsWC",Panel.DoorsWC > 0) + local TW18 = 0 + if Panel.SSN > 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^1.2,0,1)) + + self.TrueBrakeAngle = self.TrueBrakeAngle or 0 + if self.ManualBrake < 0.001 and self.ManualBrake > self.TrueBrakeAngle then self.TrueBrakeAngle = self.ManualBrake end + if self.ManualBrake > 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.BD2:TriggerInput("Set",self.PassengerDoor and 1 or 0) + + 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:SetPackedBool("VPR",self.RST.Value > 0 and self.Panel["V1"] > 0) + + self:SetNW2Int("WrenchMode",self.KVWrenchMode) + 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", Pneumatic.BrakeCylinderPressure/6.0) + self:SetPackedRatio("EnginesVoltage", self.Engines.E24/2000.0) + self:SetPackedRatio("EnginesCurrent", 0.5 + 0.5*(self.Electric.I24/500.0)) + + + -- Update ARS system (no ars on E) + self:SetPackedRatio("Speed", self.Speed/100) + + self:SetNW2Bool("UPOPlaying",self:ReadTrainWire(47) > 0) + -- 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 + self.FrontBogey.PneumaticBrakeForce = 50000.0-2000 + self.FrontBogey.BrakeCylinderPressure = Pneumatic.BrakeCylinderPressure + self.FrontBogey.BrakeCylinderPressure_dPdT = -Pneumatic.BrakeCylinderPressure_dPdT + self.FrontBogey.ParkingBrakePressure = self.ManualBrake + self.RearBogey.PneumaticBrakeForce = 50000.0-2000 + self.RearBogey.BrakeCylinderPressure = Pneumatic.BrakeCylinderPressure + self.RearBogey.BrakeCylinderPressure_dPdT = -Pneumatic.BrakeCylinderPressure_dPdT + end + + + self:GenerateJerks() + -- Temporary hacks + --self:SetNW2Float("V",self.Speed) + --self:SetNW2Float("A",self.Acceleration) + + 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) + if self.ManualBrake == 0.0 then return end + end + if button == "ParkingBrakeRight" then + self.ManualBrake = math.min(1.0,(self.ManualBrake or 0) + 0.05) + if self.ManualBrake == 1.0 then return end + 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 + --print(self.ManualBrake) + end + if button == "ManualBrakeRight" then + self.ManualBrake = math.min(1.0,self.ManualBrake + 0.008) + if self.ManualBrake == 1.0 then return end + --print(self.ManualBrake) + 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 + + 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 (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 == "KVT2Set" then self.KVT:TriggerInput("Close",1) end + if button == "KDL" and self.VUD.Value < 1 then self.KDL:TriggerInput("Close",1) self:OnButtonPress("KDLSet") end + if button == "KDP" and self.VUD.Value < 1 then self.KDP:TriggerInput("Close",1) self:OnButtonPress("KDPSet") 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 + end + + if button == "VUDToggle" then + self.VDL:TriggerInput("Open",1) + self.KDL:TriggerInput("Open",1) + self.KDP:TriggerInput("Open",1) + end + + if button == "GVToggle" then + if self.GV.Value > 0.5 then + self:PlayOnce("revers_f",nil,0.7) + else + self:PlayOnce("revers_b",nil,0.7) + 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 == "KVT2Set" then self.KVT:TriggerInput("Open",1) end + if button == "KDL" and self.VUD.Value < 1 then self.KDL:TriggerInput("Open",1) self:OnButtonRelease("KDLSet") end + if button == "KDP" and self.VUD.Value < 1 then self.KDP:TriggerInput("Open",1) self:OnButtonRelease("KDPSet") 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_81-501/shared.lua b/lua/entities/gmod_subway_81-501/shared.lua new file mode 100644 index 0000000..e9d40df --- /dev/null +++ b/lua/entities/gmod_subway_81-501/shared.lua @@ -0,0 +1,456 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.PrintName = "Ema (81-502)" +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" +ENT.SkinsType = "81-502" +ENT.Model = "models/metrostroi_train/81-502/81-502.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 + +-- 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 + +ENT.AnnouncerPositions = { + {Vector(412,-49 ,61),80,0.6}, + {Vector(-3,-60, 62),300,0.6}, + {Vector(-3,60 ,62),300,0.6}, +} + +ENT.Cameras = { + {Vector(407.5+18,32,19),Angle(0,180,0),"Train.703.Breakers1"}, + {Vector(407.5+18,50,24),Angle(5,180,0),"Train.703.Breakers2"}, + {Vector(407.5+20,-40,25),Angle(0,180,0),"Train.502.AV"}, + {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"}, +} + +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.15} + self.SoundPositions["rolling_10"] = {480,1e12,Vector(0,0,0),0.20} + self.SoundPositions["rolling_40"] = {480,1e12,Vector(0,0,0),0.55} + self.SoundPositions["rolling_70"] = {480,1e12,Vector(0,0,0),0.60} + self.SoundPositions["rolling_80"] = {480,1e12,Vector(0,0,0),0.75} + + 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"] = {480,1e12,Vector(0,0,0),0.90} + self.SoundPositions["rolling_medium2"] = {480,1e12,Vector(0,0,0),0.90} + self.SoundPositions["rolling_high2"] = {480,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["epv_on"] = "subway_trains/common/pneumatic/epv_on.mp3" + self.SoundNames["epv_off"] = "subway_trains/common/pneumatic/epv_off.mp3" + self.SoundPositions["epv_on"] = {100,1e9,Vector(437.2,-53.1,-32.0),1} + self.SoundPositions["epv_off"] = {100,1e9,Vector(437.2,-53.1,-32.0),1} + self.SoundPositions["epv_off"] = {60,1e9,Vector(437.2,-53.1,-32.0),1} + -- Релюшки + self.SoundNames["avu_off"] = "subway_trains/common/pneumatic/ak11b_off.mp3" + self.SoundNames["avu_on"] = "subway_trains/common/pneumatic/ak11b_on.mp3" + self.SoundPositions["avu_on"] = {60,1e9, Vector(400,-40,-45),0.5} + self.SoundPositions["avu_off"] = {60,1e9, Vector(400,-40,-45),0.5} + --Подвагонка + self.SoundNames["lk2_on"] = "subway_trains/717/pneumo/lk1_on.mp3" + self.SoundNames["lk2_off"] = "subway_trains/717/pneumo/lk2_off.mp3" + self.SoundNames["lk5_on"] = "subway_trains/717/pneumo/lk2_on.mp3" + self.SoundNames["lk5_off"] = "subway_trains/717/pneumo/lk2_off.mp3" + self.SoundNames["lk4_on"] = "subway_trains/717/pneumo/lk3_on.mp3" + self.SoundNames["lk4_off"] = "subway_trains/717/pneumo/lk3_off.mp3" + self.SoundPositions["lk2_on"] = {440,1e9,Vector(-60,-40,-66),0.22} + self.SoundPositions["lk2_off"] = {440,1e9,Vector(-60,-40,-66),0.3} + self.SoundPositions["lk5_on"] = self.SoundPositions["lk2_on"] + self.SoundPositions["lk5_off"] = self.SoundPositions["lk2_off"] + self.SoundPositions["lk4_on"] = self.SoundPositions["lk2_on"] + self.SoundPositions["lk4_off"] = self.SoundPositions["lk2_off"] + + self.SoundNames["compressor"] = {loop=1.79,"subway_trains/717/compressor/compressor_717_start2.wav","subway_trains/717/compressor/compressor_717_loop2.wav", "subway_trains/717/compressor/compressor_717_stop2.wav"} + self.SoundPositions["compressor"] = {485,1e9,Vector(-118,-40,-66),0.80} + 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(458.00,-23,-6.40)} + 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["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["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(449+7.7,56.0,-10.24349),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(120,62.0+0.0,-60),0.5} + self.SoundPositions["gv_b"] = {80,1e2,Vector(120,62.0+0.0,-60),0.5} + + self.SoundNames["disconnect_valve"] = "subway_trains/common/switches/pneumo_disconnect_switch.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/kv40_0_T1.mp3","subway_trains/ezh/kv40/kv40_0_T1_2.mp3"} + self.SoundNames["kv40_t1_0"] = {"subway_trains/ezh/kv40/kv40_T1_0.mp3","subway_trains/ezh/kv40/kv40_T1_0_2.mp3"} + self.SoundNames["kv40_t1_t1a"] = {"subway_trains/ezh/kv40/kv40_T1_T1A.mp3"} + self.SoundNames["kv40_t1a_t1"] = {"subway_trains/ezh/kv40/kv40_T1A_T1.mp3","subway_trains/ezh/kv40/kv40_T1A_T1_2.mp3"} + self.SoundNames["kv40_t1a_t2"] = {"subway_trains/ezh/kv40/kv40_T1A_T2.mp3","subway_trains/ezh/kv40/kv40_T1A_T2_2.mp3"} + self.SoundNames["kv40_t2_t1a"] = {"subway_trains/ezh/kv40/kv40_T2_T1A.mp3","subway_trains/ezh/kv40/kv40_T2_T1A_2.mp3"} + self.SoundNames["kv40_0_x1"] = {"subway_trains/ezh/kv40/kv40_0_X1.mp3"} + self.SoundNames["kv40_x1_0"] = {"subway_trains/ezh/kv40/kv40_X1_0.mp3"} + self.SoundNames["kv40_x1_x2"] = {"subway_trains/ezh/kv40/kv40_X1_X2.mp3"} + self.SoundNames["kv40_x2_x1"] = {"subway_trains/ezh/kv40/kv40_X2_X1.mp3"} + self.SoundNames["kv40_x2_x3"] = {"subway_trains/ezh/kv40/kv40_X2_X3.mp3"} + self.SoundNames["kv40_x3_x2"] = {"subway_trains/ezh/kv40/kv40_X3_X2.mp3"} + self.SoundPositions["kv70_fix_on"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv70_fix_off"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv40_0_t1"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv70_t1_0_fix"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv40_t1_0"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv40_t1_t1a"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv40_t1a_t1"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv40_t1a_t2"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv40_t2_t1a"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv40_0_x1"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv40_x1_0"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv40_x1_x2"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv40_x2_x1"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv40_x2_x3"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv40_x3_x2"] = {100,1e9,Vector(458.00,-23,-6),1} + + self.SoundNames["rcav_0-2"] = {"subway_trains/ezh3/rc_ars/0-2.mp3"} + self.SoundNames["rcav_2-0"] = {"subway_trains/ezh3/rc_ars/2-0.mp3"} + + self.SoundNames["ring"] = {loop=0.05,"subway_trains/502/ring_ksaup.wav"} + self.SoundPositions["ring"] = {120,1e9,Vector(410,-40,35),0.35} + + self.SoundNames["ring2"] = {"subway_trains/717/ring/ring_start.wav","subway_trains/717/ring/ring_loop.wav","subway_trains/717/ring/ring_end.wav"} + self.SoundPositions["ring2"] = self.SoundPositions["ring"] + + 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(449.118378+7.6,33.493385,-14.713276),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"} + + --Краны + --Краны + 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(452, 0,-63),1} + self.SoundNames["rear_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["rear_isolation"] = {300,1e9,Vector(-456, 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.55,-4.5),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.55,-4.5),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.55,-4.5),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.55,-4.5),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.55,-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.55,-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.55,-4.5),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.55,-4.5),0.2} + + self.SoundNames["valve_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["valve_brake"] = {400,1e9,Vector(464.40,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(456.55,-52.57,-55),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["horn"] = {loop=0.8,"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(450,-20,-55)} + + --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"] + 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.2} + 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.2} + self.SoundNames["announcer_noise3_"..k] = {loop=true,"subway_announcers/upo/noiseS3.wav"} + self.SoundPositions["announcer_noise3_"..k] = {v[2] or 300,1e9,v[1],v[3]*0.2} + self.SoundNames["announcer_noiseW"..k] = {loop=true,"subway_announcers/upo/noiseW.wav"} + self.SoundPositions["announcer_noiseW"..k] = {v[2] or 300,1e9,v[1],v[3]*0.2} + 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_501_Electric") + self.Electric:TriggerInput("Type",self.Electric.NVL) + + -- Токоприёмник + 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_55") + -- Панель резервного ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + self:LoadSystem("PRU_502") + + + -- Ящики Ñ Ñ€ÐµÐ»Ðµ и контакторами + 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("BD2","Relay","") + -- Панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð• + self:LoadSystem("Panel","81_501_Panel") + -- Everything else + self:LoadSystem("Battery") + self:LoadSystem("Horn") + + self:LoadSystem("Announcer","81_71_Announcer", "AnnouncementsUPO") + self:LoadSystem("UPO","81_71_UPO") + + self:LoadSystem("ALSCoil") + + --self:LoadSystem("ALS_ARS","ARS_MP") + + --self:LoadSystem("IGLA_CBKI","IGLA_CBKI2") + --self:LoadSystem("IGLA_PCBK") +end + +function ENT:PostInitializeSystems() + self.Electric:TriggerInput("Type",self.Electric.NVL) +end + +ENT.NumberRanges = {{6027,6128}} + +ENT.SubwayTrain = { + Type = "E", + Name = "Ema", + Manufacturer = "LVZ", + WagType = 0, + ALS = { + NoEPK = true, + NoUAVA = true, + TwoToSix = false, + RSAs325Hz = false, + Aproove0As325Hz = true, + }, + EKKType = 703, + NoFrontEKK=false, +} \ No newline at end of file diff --git a/lua/entities/gmod_subway_81-502/cl_init.lua b/lua/entities/gmod_subway_81-502/cl_init.lua new file mode 100644 index 0000000..19551a7 --- /dev/null +++ b/lua/entities/gmod_subway_81-502/cl_init.lua @@ -0,0 +1,2602 @@ +-------------------------------------------------------------------------------- +-- 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") + +-- hide = 2 - главные Ñлементы +-- hide = 0.5 - мелкие кузовные Ñлементы +-- hide = 0.8 - кабинные\Ñалонные Ñлемнеты, которые видны из кабины другого поезда +-- hide = 1.5 - кабинные\Ñалонные Ñлемнеты, которые видны вдали из кабины другого поезда +-- hideseat = 0.2 - мелкие кабинные Ñлементы(кнопки, тумблера, лампы) + +ENT.ClientProps = {} +ENT.ButtonMap = {} +ENT.AutoAnims = {} +ENT.AutoAnimNames = {} +ENT.ClientSounds = {} +ENT.ClientProps["pult1"] = { + model = "models/metrostroi_train/81-502/controller_b.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), +} +ENT.ClientProps["pult2"] = { + model = "models/metrostroi_train/81-502/controller_a.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), +} +ENT.ClientProps["panel1"] = { + model = "models/metrostroi_train/81-502/panel_a.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0) +} +ENT.ClientProps["panel2"] = { + model = "models/metrostroi_train/81-502/panel_b.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0) +} +ENT.ClientProps["panel1_04"] = { + model = "models/metrostroi_train/81-502/indicators/ars_nch.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(200,200,200), +} +ENT.ClientProps["panel1_0"] = { + model = "models/metrostroi_train/81-502/indicators/ars_0.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(200,200,200), +} +ENT.ClientProps["panel1_40"] = { + model = "models/metrostroi_train/81-502/indicators/ars_40.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(200,200,200), +} +ENT.ClientProps["panel1_60"] = { + model = "models/metrostroi_train/81-502/indicators/ars_60.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(200,200,200), +} +ENT.ClientProps["panel1_70"] = { + model = "models/metrostroi_train/81-502/indicators/ars_70.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(200,200,200), +} +ENT.ClientProps["panel1_80"] = { + model = "models/metrostroi_train/81-502/indicators/ars_80.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(200,200,200), +} + +ENT.ClientProps["panel2_04"] = { + model = "models/metrostroi_train/81-502/indicators/indicator_nch.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(200,200,200), +} +ENT.ClientProps["panel2_0"] = { + model = "models/metrostroi_train/81-502/indicators/indicator_0.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(200,200,200), +} +ENT.ClientProps["panel2_40"] = { + model = "models/metrostroi_train/81-502/indicators/indicator_40.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(200,200,200), +} +ENT.ClientProps["panel2_60"] = { + model = "models/metrostroi_train/81-502/indicators/indicator_60.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(200,200,200), +} +ENT.ClientProps["panel2_70"] = { + model = "models/metrostroi_train/81-502/indicators/indicator_70.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(200,200,200), +} +ENT.ClientProps["panel2_80"] = { + model = "models/metrostroi_train/81-502/indicators/indicator_80.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(200,200,200), +} +ENT.ClientProps["Ema_salon2"] = { + model = "models/metrostroi_train/81-508/81-508_underwagon.mdl", + pos = Vector(0,1,-18), + ang = Angle(0,0,0), + hide = 2.0 +} +ENT.ClientProps["osp_label"] = { + model = "models/metrostroi_train/81-717/labels/label_spb1.mdl", + pos = Vector(381.722321,-42.139999,36.999210), + ang = Angle(0.000000,0.000000,0.000000), + hide = 1.0 +} + + + +--Lamps +ENT.ButtonMap["Lamps1_1"] = { + pos = Vector(462.08+1.35,-21+2.9,21.5), + ang = Angle(0,180,90), + width = 24, + height = 310, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "!LLampAutodrive", x=12, y=16, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/lamp_w_502.mdl",z = 0,color = Color(255,180,160) ,var="CPS_AV", + lcolor = Color(255,180,160),lz = 20,lbright=1.5,lfov=100,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.1,size=0.25,scale=0.09,color=Color(255,180,160),z=3,} + }}, + {ID = "!LLamp2", x=12, y=16 + 38.9*1, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/lamp_w_502.mdl",z = 0,color = Color(255,150,110),var="CPS_2", + lcolor = Color(255,150,110),lz = 20,lbright=1.5,lfov=100,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.1,size=0.25,scale=0.09,color=Color(255,150,110),z=3,} + }}, + {ID = "!LLamp1", x=12, y=16 + 38.9*2, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/lamp_w_502.mdl",z = 0,color = Color(105,217,115),var="CPS_1", + lcolor = Color(105,217,115),lz = 20,lbright=1.5,lfov=100,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.1,size=0.25,scale=0.09,color=Color(105,217,115),z=3,} + }}, + {ID = "!LLamp6", x=12, y=16 + 38.9*3, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/lamp_w_502.mdl",z = 0,color = Color(255,150,110),var="CPS_6", + lcolor = Color(255,150,110),lz = 20,lbright=1.5,lfov=100,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.1,size=0.25,scale=0.09,color=Color(255,150,110),z=3,} + }}, + {ID = "!LDoorsWag", x=12, y=16 + 38.9*4, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/lamp_w_502.mdl",z = 0,color = Color(80,150,255) ,var="DoorsWC", + lcolor = Color(80,150,255),lz = 20,lbright=1.5,lfov=100,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.1,size=0.25,scale=0.09,color=Color(80,150,255),z=3,} + }}, + {ID = "!LDoors", x=12, y=16 + 38.9*5, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/lamp_w_502.mdl",z = 0,color = Color(255,180,160),var="CPS_SD", + lcolor = Color(255,180,160),lz = 20,lbright=1.5,lfov=100,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.1,size=0.25,scale=0.09,color=Color(255,180,160),z=3,} + }}, + {ID = "!LGreenRP", x=12, y=16 + 38.9*6, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/lamp_w_502.mdl",color = Color(105,217,115),z = 0,var="CPS_RP", + lcolor = Color(105,217,115),lz = 20,lbright=1.5,lfov=100,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.1,size=0.25,scale=0.09,color=Color(105,217,115),z=3,} + }}, + {ID = "!LRedRP", x=12, y=16 + 38.9*7, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/lamp_w_502.mdl",color = Color(255,100,60) ,z = 0,var="CPS_SN1",getfunc = function(ent,_,_,var) return ent:GetPackedRatio(var) end, + lcolor = Color(255,100,60) ,lz = 20,lbright=1.5,lfov=100,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.1,size=0.25,scale=0.09,color=Color(255,100,60),z=3, } + }}, + } +} +ENT.ButtonMap["Lamps1_2"] = { + pos = Vector(462.08,-21,21.5), + ang = Angle(0,0,90), + width = 24, + height = 310, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "!RLampAutodrive", x=12, y=16, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/lamp_w_502.mdl",z = 0,color = Color(255,180,160) ,var="CPS_AV", + lcolor = Color(255,180,160),lz = 20,lbright=1.5,lfov=100,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.1,size=0.25,scale=0.09,color=Color(255,180,160),z=3,} + }}, + {ID = "!RLamp2", x=12, y=16 + 38.9*1, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/lamp_w_502.mdl",z = 0,color = Color(255,150,110),var="CPS_2", + lcolor = Color(255,150,110),lz = 20,lbright=1.5,lfov=100,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.1,size=0.25,scale=0.09,color=Color(255,150,110),z=3,} + }}, + {ID = "!RLamp1", x=12, y=16 + 38.9*2, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/lamp_w_502.mdl",z = 0,color = Color(105,217,115),var="CPS_1", + lcolor = Color(105,217,115),lz = 20,lbright=1.5,lfov=100,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.1,size=0.25,scale=0.09,color=Color(105,217,115),z=3,} + }}, + {ID = "!RLamp6", x=12, y=16 + 38.9*3, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/lamp_w_502.mdl",z = 0,color = Color(255,150,110) ,var="CPS_6", + lcolor = Color(255,150,110),lz = 20,lbright=1.5,lfov=100,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.1,size=0.25,scale=0.09,color=Color(255,150,110),z=3,} + }}, + {ID = "!RDoorsWag", x=12, y=16 + 38.9*4, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/lamp_w_502.mdl",z = 0,color = Color(80,150,255) ,var="DoorsWC", + lcolor = Color(80,150,255),lz = 20,lbright=1.5,lfov=100,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.1,size=0.25,scale=0.09,color=Color(80,150,255),z=3,} + }}, + {ID = "!RDoors", x=12, y=16 + 38.9*5, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/lamp_w_502.mdl",z = 0,color = Color(255,180,160),var="CPS_SD", + lcolor = Color(255,180,160),lz = 20,lbright=1.5,lfov=100,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.1,size=0.25,scale=0.09,color=Color(255,180,160),z=3,} + }}, + {ID = "!RGreenRP", x=12, y=16 + 38.9*6, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/lamp_w_502.mdl",z = 0,color = Color(105,217,115),var="CPS_RP", + lcolor = Color(105,217,115),lz = 20,lbright=1.5,lfov=100,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.1,size=0.25,scale=0.09,color=Color(105,217,115),z=3,} + }}, + {ID = "!RRedRP", x=12, y=16 + 38.9*7, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/lamp_w_502.mdl",z = 0,color = Color(255,100,60) ,var="CPS_SN1",getfunc = function(ent,_,_,var) return ent:GetPackedRatio(var) end, + lcolor = Color(255,100,60),lz = 20,lbright=1.5,lfov=100,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.1,size=0.25,scale=0.09,color=Color(255,100,60),z=3, } + }}, + } +} +ENT.ButtonMap["Lamps2_1"] = { + pos = Vector(461.5,-20,10.5), + ang = Angle(0,-90+14.315,90), + width = 80, + height = 150, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + + {ID = "!CPS_KS",x=19.2+5.9, y=36.8+24.75*-1+2.2, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",z = -3,color = Color(105,217,115), var="CPS_KS"}, + sprite = {bright=0.2,size=0.25,scale=0.015,color=Color(105,217,115),z=0,} + }}, + {ID = "!CPS_AV",x=19.2+23.8*2-6.2, y=36.8+24.75*-1+2.2, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",z = -3,color = Color(105,217,115), var="CPS_AV"}, + sprite = {bright=0.2,size=0.25,scale=0.015,color=Color(105,217,115),z=0,} + }}, + {ID = "!CPS_4", x=19.2+23.8*0, y=36.8+24.75*0, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_big_502.mdl",z = -4,color = Color(255,50,45), var="CPS_4",}, + sprite = {bright=0.2,size=0.25,scale=0.03,color=Color(255,50,45),z=3,} + }}, + {ID = "!CPS_5", x=19.2+23.8*1, y=36.8+24.75*0, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_big_502.mdl",z = -4,color = Color(105,217,115), var="CPS_5",}, + sprite = {bright=0.2,size=0.25,scale=0.03,color=Color(105,217,115),z=3,} + }}, + {ID = "!CPS_DT",x=19.2+23.8*2, y=36.8+24.75*0, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_big_502.mdl",z = -4,color = Color(255,180,100), var="CPS_DT",}, + sprite = {bright=0.2,size=0.25,scale=0.03,color=Color(255,180,100),z=3,} + }}, + + {ID = "!CPS_1", x=19.2+23.8*0, y=36.8+24.75*1, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_big_502.mdl",z = -4,color = Color(105,217,115), var="CPS_1",}, + sprite = {bright=0.2,size=0.25,scale=0.03,color=Color(105,217,115),z=3,} + }}, + {ID = "!CPS_20",x=19.2+23.8*1, y=36.8+24.75*1, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_big_502.mdl",z = -4,color = Color(105,217,115), var="CPS_20",}, + sprite = {bright=0.2,size=0.25,scale=0.03,color=Color(105,217,115),z=3,} + }}, + {ID = "!CPS_6", x=19.2+23.8*2, y=36.8+24.75*1, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_big_502.mdl",z = -4,color = Color(255,180,100), var="CPS_6",}, + sprite = {bright=0.2,size=0.25,scale=0.03,color=Color(255,180,100),z=3,} + }}, + + {ID = "!CPS_2", x=19.2+23.8*1, y=36.8+24.75*2, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_big_502.mdl",z = -4,color = Color(255,180,100), var="CPS_2",}, + sprite = {bright=0.2,size=0.25,scale=0.03,color=Color(255,180,100),z=3,} + }}, + {ID = "!CPS_1P",x=19.2+23.8*2, y=36.8+24.75*2, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_big_502.mdl",z = -4,color = Color(255,180,100), var="CPS_1P",}, + sprite = {bright=0.2,size=0.25,scale=0.03,color=Color(255,180,100),z=3,} + }}, + + + {ID = "!CPS_SN1",x=19.2+23.8*0-4.1, y=36.8+24.75*3, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",z = -3,color = Color(255,50,45), var="CPS_SN1",getfunc = function(ent,_,_,var) return ent:GetPackedRatio(var) end}, + sprite = {bright=0.2,size=0.25,scale=0.015,color=Color(255,50,45),z=0,} + }}, + {ID = "!CPS_SN2",x=19.2+23.8*0+3.7, y=36.8+24.75*3, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",z = -3,color = Color(255,50,45), var="CPS_SN2"}, + sprite = {bright=0.2,size=0.25,scale=0.015,color=Color(255,50,45),z=0,} + }}, + {ID = "!CPS_3", x=19.2+23.8*1, y=36.8+24.75*3, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_big_502.mdl",z = -4,color = Color(255,180,100), var="CPS_3",}, + sprite = {bright=0.2,size=0.25,scale=0.03,color=Color(255,180,100),z=3,} + }}, + {ID = "!CPS_SD1",x=19.2+23.8*2-4.1, y=36.8+24.75*3, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",z = -3,color = Color(80,140,255), var="CPS_SD"}, + sprite = {bright=0.2,size=0.25,scale=0.015,color=Color(80,140,255),z=0,} + }}, + {ID = "!CPS_SD2",x=19.2+23.8*2+3.7, y=36.8+24.75*3, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",z = -3,color = Color(80,140,255), var="CPS_SD"}, + sprite = {bright=0.2,size=0.25,scale=0.015,color=Color(80,140,255),z=0,} + }}, + + + {ID = "!CPS_RP", x=19.2+23.8*0, y=36.8+24.75*4, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_big_502.mdl",z = -4,color = Color(105,217,115), var="CPS_RP",}, + sprite = {bright=0.2,size=0.25,scale=0.015,color=Color(105,217,115),z=3,} + }}, + {ID = "!CPS_DV", x=19.2+23.8*2, y=36.8+24.75*4, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_big_502.mdl",z = -4,color = Color(255,50,45), var="CPS_DV",}, + sprite = {bright=0.2,size=0.25,scale=0.015,color=Color(255,50,45),z=3,} + }}, + } +} + +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.5,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 + +local strength = { + [0] = 0.86, + [1] = 0.29, + [2] = 0.71, + [3] = 0.71, + [4] = 0.57, + [5] = 0.71, + [6] = 0.86, + [7] = 0.43, + [8] = 1.00, + [9] = 0.86, +} +ENT.ButtonMap["Lamps2_2"] = { + pos = Vector(461.5-0.9,-15,10.5+8), + ang = Angle(0,-90+14.315,90), + width = 160, + height = 120, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "!Speedometer1", x=90,y=18,w=19,h=29,tooltip="", model = { + name="SSpeed2",model = "models/metrostroi_train/81-502/indicators/indicators.mdl", color=Color(175,250,20),skin=0,z=-1,ang=Angle(0,0,90), + tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.Speed"),ent:GetPackedRatio("CPS_Speed")*100) end, + sprite = {bright=0.1,size=.5,scale=0.055,vscale=0.065,z=1,color=Color(225,250,20),getfunc= function(ent) + if not ent:GetPackedBool("LUDS") then return 0 end + return strength[math.floor(ent:GetNW2Int("ALSSpeed")*0.1)%10] + end} + }}, + {ID = "!Speedometer2", x=113,y=18,w=19,h=29,tooltip="", model = { + name="SSpeed1",model = "models/metrostroi_train/81-502/indicators/indicators.mdl", color=Color(175,250,20),skin=0,z=-1,ang=Angle(0,0,90), + tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.Speed"),ent:GetPackedRatio("CPS_Speed")*100) end, + sprite = {bright=0.1,size=.5,scale=0.055,vscale=0.065,z=1,color=Color(225,250,20),getfunc= function(ent) + if not ent:GetPackedBool("LUDS") then return 0 end + return strength[math.floor(ent:GetNW2Int("ALSSpeed"))%10] + end} + }}, + {ID = "!CPS_Pd",x=64, y=85, radius=5, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",z = -2,color = Color(255,50,45), var="CPS_Pd"}, + sprite = {bright=0.4,size=0.25,scale=0.015,color=Color(255,50,45),z=0,} + }}, + + {ID = "!ALS_04",x=29, y=91, w=13,h=13, tooltip="", model = { + sprite = {bright=0.1,size=0.25,scale=0.04,color=Color(255, 77, 97),z=0,lamp = "light_04", hidden = "panel2_04"}, + }}, + {ID = "!ALS_00",x=60+18.5*0, y=91, w=13,h=13, tooltip="", model = { + sprite = {bright=0.1,size=0.25,scale=0.04,color=Color(255, 77, 97),z=0,lamp = "light_0", hidden = "panel2_0"}, + }}, + {ID = "!ALS_40",x=60+18.5*1, y=91, w=13,h=13, tooltip="", model = { + sprite = {bright=0.1,size=0.25,scale=0.04,color=Color(255, 255, 134),z=0,lamp = "light_40", hidden = "panel2_40"}, + }}, + {ID = "!ALS_60",x=60+18.5*2, y=91, w=13,h=13, tooltip="", model = { + sprite = {bright=0.1,size=0.25,scale=0.04,color=Color(94, 255, 213),z=0,lamp = "light_60", hidden = "panel2_60"}, + }}, + {ID = "!ALS_70",x=60+18.5*3, y=91, w=13,h=13, tooltip="", model = { + sprite = {bright=0.1,size=0.25,scale=0.04,color=Color(94, 255, 213),z=0,lamp = "light_70", hidden = "panel2_70"}, + }}, + {ID = "!ALS_80",x=60+18.5*4, y=91, w=13,h=13, tooltip="", model = { + sprite = {bright=0.1,size=0.25,scale=0.04,color=Color(94, 255, 213),z=0,lamp = "light_80", hidden = "panel2_80"}, + }}, + } +} + +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["Main1_2"] = { + pos = Vector(464.1,-36.3,-3.5), + ang = Angle(0,-97,90), + width = 110, + height = 30, + scale = 0.0588, + hideseat = 0.2, + + buttons = { + {ID = "!LMK2", x=56, y=14, radius=15, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_big_502.mdl",z = -7,color = Color(255,180,100), var="LMK" }, + sprite = {bright=0.2,size=0.25,scale=0.04,color=Color(255,180,100),z=2,} + }}, + {ID = "!LVRD2", x=93, y=14, radius=15, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_big_502.mdl",z = -7,color = Color(105,217,115), var="CPS_Pd"}, + sprite = {bright=0.2,size=0.25,scale=0.04,color=Color(105,217,115),z=2,} + }}, + } +} +ENT.ButtonMap["BPS"] = { + pos = Vector(451.5,-58.08,31.39), + ang = Angle(0,-130,90), + width = 30, + height = 110, + scale = 0.0588, + hideseat = 0.2, + + buttons = { + {ID = "!BPSon", x=14, y=19, radius=15, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_big_502.mdl",z = -7,color = Color(105,217,115), var="BPSon"}, + sprite = {bright=0.2,size=0.25,scale=0.04,color=Color(105,217,115),z=2,} + }}, + {ID = "!BPSErr", x=14, y=57, radius=15, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_big_502.mdl",z = -7,color = Color(255,180,100), var="BPSErr"}, + sprite = {bright=0.2,size=0.25,scale=0.04,color=Color(255,180,100),z=2,} + }}, + {ID = "!BPSFail", x=14, y=95, radius=15, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_big_502.mdl",z = -7,color = Color(255,50,45), var="BPSFail"}, + sprite = {bright=0.2,size=0.25,scale=0.04,color=Color(255,50,45),z=2,} + }}, + } +} +ENT.ButtonMap["NMnUAVA"] = { + pos = Vector(453.7,-57.31,10.5), + ang = Angle(0,-126,90), + width = 40, + height = 70, + scale = 0.0588, + hideseat = 0.2, + + buttons = { + {ID = "!NMPressureLow", x=20, y=7, radius=8, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",z = -3.8,color = Color(255,50,45), var="NMLow"}, + sprite = {bright=0.5,size=0.25,scale=0.015,color=Color(255,50,45),z=0,} + }}, + {ID = "!UAVATriggered", x=20, y=34, radius=8, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",z = -3.8,color = Color(255,50,45), var="UAVATriggered"}, + sprite = {bright=0.5,size=0.25,scale=0.015,color=Color(255,50,45),z=0,} + }}, + } +} +ENT.ButtonMap["Main1"] = { + pos = Vector(457.6,-32,-8.0), + ang = Angle(0,-90,70), + width = 260, + height = 200, + scale = 0.0588, + hideseat = 0.2, + + buttons = { + {ID = "2:VUSToggle", x=28.5, y=31.5, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-1.5, + var="VUS",speed=16, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "2:HeadlightsToggle", x=62.5, y=31.5, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-1.5, + var="Headlights",speed=16, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + + {ID = "!LKTLight", x=128.3, y=19.3, radius=20, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/lamp_w_502.mdl",z = 5,color = Color(240,200,160), var="CPS_DT" , + lcolor=Color(255,170,140),lz = 20,lbright=1.5,lfov=110,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=0.25,scale=0.06,color=Color(255,170,140),z=6,} + }}, + {ID = "!LKVDLight", x=128.3, y=45, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl", ignorepanel = true, skin = 2, z = -10, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=63,x=-0.3,y=-0.3,z=22.0,var="LKVD",color=Color(255,1,50)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(255,1,50)}, + }}, + + + {ID = "2:ARSToggle", x=161.4, y=31.5, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-1.5, + var="ARS",speed=16, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "2:ALSToggle", x=197.3, y=31.5, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-1.5, + var="ALS",speed=16, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "2:KBSet", x=234, y=31.5, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl",ang = 180-30,z=0,vmin=1,vmax=0, + var="KB",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 = "2:KDLSet", x=30+40*0, y=94, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_metal.mdl",ang = 180-30,z=0,vmin=1,vmax=0, + var="KDL",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 = "2:LOnSet", x=30+40*1, y=94, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",ang = 180-30,z=0,vmin=1,vmax=0, + var="LOn",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 = "2:LOffSet", x=30+40*2, y=94, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",ang = 180-30,z=0,vmin=1,vmax=0, + var="LOff",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 = "2:VozvratRPSet", x=30+40*3, y=94, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",ang = 180-30,z=0,vmin=1,vmax=0, + var="VozvratRP",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 = "2:KSNSet", x=30+40*4, y=94, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",ang = 180-30,z=0,vmin=1,vmax=0, + var="KSN",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 = "2:KDPSet", x=30+40*5, y=94, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_metal.mdl",ang = 180-30,z=0,vmin=1,vmax=0, + var="KDP",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 = "2:VMKToggle",x=40,y=155-5,radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=-30, + var="VMK",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 = "2:KRZDSet", 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="KRZD",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 = "2:RingSet", x=40+44.75*2, 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="Ring",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 = "2:VAKSet", x=40+44.75*3, y=155, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl",ang = 180-30,z=0,vmin=1,vmax=0, + var="VAK",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 = "2:VUDToggle",x=219,y=155-5,radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=-30, + var="VUD",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"}, + }}, + } +} + +-- Main panel +ENT.ButtonMap["Main2"] = { + pos = Vector(457.6,-32,-8.0), + ang = Angle(0,-90,70), + width = 260, + height = 200, + scale = 0.0588, + hideseat = 0.2, + + buttons = { + {ID = "KOSSet", x=30, y=40, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-502/buttons/button_big_1.mdl",ang = 180,z=14, + var="KOS",speed=16,vmin=1,vmax=0, + 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 = "!LMK", x=30+37, y=40-3.3, radius=20, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/lamp_g_502.mdl",z = 3.8,color = Color(255,255,255), var="LMK", + lcolor=Color(20,255,50),lz = 20,lbright=0.5,lfov=110,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=0.25,scale=0.06,color=Color(20,255,50),z=6,} + }}, + {ID = "VZPToggle", x=30+40*2, y=40-3.3, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_w_a.mdl",ang = 180,z=1, + var="VZP",speed=16, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "VZDSet", x=30+40*3, y=40-3.3, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_metal.mdl",ang = 180-30,z=0,vmin=1,vmax=0, + var="VZD",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 = "!L16", x=30+40*4+6.3, y=40-3.3, radius=20, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/lamp_g_502.mdl",z = 3.8,color = Color(255,255,255), var="L16", + lcolor=Color(20,255,50),lz = 20,lbright=0.5,lfov=110,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=0.25,scale=0.06,color=Color(20,255,50),z=6,} + }}, + {ID = "KRZDSet", x=30+40*5, y=40-3.3, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_metal.mdl",ang = 180-30,z=0,vmin=1,vmax=0, + var="KRZD",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 = "KDLSet", x=30+40*0, y=98, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_metal.mdl",ang = 180-30,z=0,vmin=1,vmax=0, + var="KDL",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 = "LOnSet", x=30+40*1, y=98, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_metal.mdl",ang = 180-30,z=0,vmin=1,vmax=0, + var="LOn",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 = "LOffSet", x=30+40*2, y=98, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_metal.mdl",ang = 180-30,z=0,vmin=1,vmax=0, + var="LOff",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 = "VozvratRPSet", x=30+40*3, y=98, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_metal.mdl",ang = 180-30,z=0,vmin=1,vmax=0, + var="VozvratRP",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 = "KSNSet", x=30+40*4, y=98, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_metal.mdl",ang = 180-30,z=0,vmin=1,vmax=0, + var="KSN",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 = "KDPSet", x=30+40*5, y=98, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_metal.mdl",ang = 180-30,z=0,vmin=1,vmax=0, + var="KDP",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 = "KDPKToggle", x=30+40*5+12, y=98-33-2, radius=15, tooltip="", model = { + model = "models/metrostroi_train/81-703/cabin_doors_cover.mdl",ang = 180-20,z=11,vmin=0,vmax=0.25, + var="KDPK",speed=2,disableinv="KDPSet", + sndvol = 0.10, snd = function(val) return val and "kr_left" or "kr_right" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + noTooltip = true, + }}, + + + {ID = "VMKToggle",x=30-1.5,y=155-5,radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=-30, + var="VMK",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 = "!RU", x=30+40*1-3, y=155.5, radius=20, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/lamp_w_502.mdl",z = 4.6,color = Color(240,200,160), var="LRU" }, + sprite = {bright=0.2,size=0.25,scale=0.06,color=Color(240,200,160),z=6,} + }}, + {ID = "RingSet", x=30+40*2-7, y=155, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_metal.mdl",ang = 180-30,z=0,vmin=1,vmax=0, + var="Ring",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 = "VUSToggle", x=30+40*3-16, y=155, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_b_a.mdl",ang = 180,z=1, + var="VUS",speed=16, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "VAKSet", x=30+40*3+15, y=155, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_metal.mdl",ang = 180-30,z=0,vmin=1,vmax=0, + var="VAK",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 = "AutodriveToggle", x=30+40*4+9, y=155, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_b_a.mdl",ang = 180,z=1, + var="Autodrive",speed=16, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "VUDToggle",x=30+40*5+2,y=155-5,radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=-30, + var="VUD",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("Lamps1_1") +addTW10Cosume("Lamps1_2") +addTW10Cosume("Lamps2_1") +addTW10Cosume("Main1") +addTW10Cosume("Main2") + +-- AV panel +ENT.ButtonMap["AV"] = { + pos = Vector(403.5,-58.2,27.5), + ang = Angle(0,90,90), + width = 85*7, + height = 120, + scale = 0.0625, + hide = 0.8, + + buttons = { + {ID = "VRUToggle",x=85*0,y=0,w=85,h=120 , 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=12,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,z=7,var="VRUPl", ID="VRUPl",}, + var="VRU",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + {ID = "KAHToggle",x=85*1,y=0,w=85,h=120 , 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=7,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,z=7,var="KAHPl", ID="KAHPl",}, + var="KAH",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + {ID = "KADToggle",x=85*2,y=0,w=85,h=120 , 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=8,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="KADPl", ID="KADPl",}, + var="KAD",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + {ID = "OVTToggle",x=85*3,y=0,w=85,h=120 , 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=6,ang=90,z=20.9,x=0,y=-12.5}}, + plomb = {model = "models/metrostroi_train/equipment/vu_plomb_left.mdl",ang=Angle(-90,90,0),x=-8,y=33.7,z=9.3,var="OVTPl", ID="OVTPl",}, + var="OVT",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + {ID = "KSDToggle",x=85*4,y=0,w=85,h=120 , 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=9,ang=90,z=20.9,x=0,y=-12.5}}, + var="KSD",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + {ID = "KPVUToggle",x=85*5,y=0,w=85,h=120 , 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=10,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="KPVUPl", ID="KPVUPl",}, + var="KPVU",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + {ID = "VKFToggle",x=85*6,y=0,w=85,h=120 , 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=5,ang=90,z=20.9,x=0,y=-12.5}}, + var="VKF",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} +--VU Panel +ENT.ButtonMap["VU"] = { + pos = Vector(466,-16,32), + 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}}, + 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["Stopkran"] = { + pos = Vector(463,28.5,5), + ang = Angle(0,-90,90), + width = 200, + height = 1300, + scale = 0.1/2, + buttons = { + {ID = "EmergencyBrakeValveToggle",x=0, y=0, w=200, h=1300, tooltip="", tooltip="",tooltip="",states={"Train.Buttons.Closed","Train.Buttons.Opened"},var="EmergencyBrakeValve"}, + } +} +ENT.ClientProps["stopkran"] = { + model = "models/metrostroi_train/81-717/stop_spb.mdl", + pos = Vector(464.5-0.1,24.4,-3), + ang = Angle(0,270,0), + hide = 0.8, +} +ENT.ClientSounds["EmergencyBrakeValve"] = {{"stopkran",function() return "disconnect_valve" end,1,1,50,1e3,Angle(-90,0,0)}} + + +ENT.ButtonMap["AVMain"] = { + pos = Vector(402.3,38.8-1,36.3), + ang = Angle(0,90,90), + width = 335, + height = 380, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "AVToggle", x=0, y=0, w=300, h=380, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_av8r.mdl", z=80, 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, + }}, + } +} + + +ENT.ButtonMap["VRD"] = { + pos = Vector(403.1,-30.7,3), + ang = Angle(0,90,90), + width = 80, + height = 105, + scale = 0.0625, + hide = 0.8, + + buttons = { + {ID = "VRDToggle", x=0, y=0, w=80,h=105, 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=2,ang=90,z=20.9,x=0,y=-12.5},}, + var="VRD",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} +ENT.ButtonMap["VRD2"] = { + pos = Vector(403.1,-29.58,3.635), + ang = Angle(0,90,90), + width = 40, + height = 80, + scale = 0.0625, + hide = 0.8, + + buttons = { + {ID = "2:VRDSet", x=20, y=20, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl", z = 0, + var="VRD",speed=16,vmin=1,vmax=0, + sndvol = 0.10, snd = function(val) return val and "button1_on" or "button2_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "!LVRD", x=20, y=60, radius=20, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/lamp_g_502.mdl",z = 3.5,color = Color(255,255,255),var="LVRD", + lcolor=Color(20,255,50),lz = 20,lbright=1.5,lfov=110,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=0.25,scale=0.06,color=Color(20,255,50),z=6,} + }}, + } +} + +ENT.ButtonMap["VBA"] = { + pos = Vector(403.5,-45.7,6), + ang = Angle(0,90,90), + width = 250, + height = 140, + scale = 0.0625, + hide = 0.8, + + buttons = { + {ID = "VBAToggle", x=0, y=0, w=250, h=140, tooltip="", model = { + model = "models/metrostroi_train/equipment/vu22_black_2.mdl", z=15, ang=Angle(90,0,180), + labels={ + {model="models/metrostroi_train/81-502/labels/vu_labels.mdl",skin=1,ang=90,z=20.9,x=-50,y=-12.5}, + {model="models/metrostroi_train/81-502/labels/vu_labels.mdl",skin=1,ang=90,z=20.9,x=50,y=-12.5}, + }, + var="VBA",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), + }}, + } +} +---AV1 Panel +ENT.ButtonMap["AV1"] = { + pos = Vector(403.5,39.2,18), + ang = Angle(0,90,90), + width = 320, + 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, + var="VU3",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + {ID = "VU2Toggle", x=110, y=0, w=100, h=140, tooltip="", model = { + model = "models/metrostroi_train/equipment/vu22_black.mdl", z=20, ang = 180, + var="VU2",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + {ID = "VU1Toggle", x=220, y=0, w=100, h=140, tooltip="", model = { + model = "models/metrostroi_train/equipment/vu22_black.mdl", z=20, ang = 180, + var="VU1",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} + +ENT.ButtonMap["AV2"] = { + pos = Vector(403.5,23.2,32.4), + ang = Angle(0,90,90), + width = 210, + height = 136, + scale = 0.0625, + hide = 0.8, + + buttons = { + {ID = "VSOSDToggle", x=0, y=0, w=100, h=136, 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=14,ang=90,z=20.9,x=0,y=-12.5}}, + var="VSOSD",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + {ID = "VRToggle", x=110, y=0, w=100, h=136, 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=4,ang=90,z=20.9,x=0,y=-12.5}}, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270,x=-1,y=24,z=0,var="VRPl", ID="VRPl",}, + var="VR",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} + +ENT.ButtonMap["UPO"] = { + pos = Vector(403.5,30,23), + ang = Angle(0,90,90), + width = 20, + height = 20, + scale = 0.0625, + hide = 0.8, + + buttons = { + {ID = "R_UPOToggle", x=10, y=10, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t2.mdl",ang = 180,z=-2, + labels={{model="models/metrostroi_train/81-502/labels/vu_labels.mdl",skin=17,ang=90,z=2.5,x=0,y=-17}}, + var="R_UPO",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} + + +-- Battery panel +ENT.ButtonMap["Battery"] = { + pos = Vector(403.5,22,17), + 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_2.mdl", z=15, ang=Angle(90,0,180), + labels={ + {model="models/metrostroi_train/81-502/labels/vu_labels.mdl",skin=3,ang=90,z=20.9,x=-50,y=-12.5}, + {model="models/metrostroi_train/81-502/labels/vu_labels.mdl",skin=3,ang=90,z=20.9,x=50,y=-12.5}, + }, + 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,46,-2.0), + ang = Angle(0,-83,90), + width = 340, + height = 400, + scale = 0.0625, + + buttons = { + {ID = "ParkingBrakeLeft",x=0, y=0, w=170, h=400, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.ParkingBrake"),ent:GetPackedRatio("ManualBrake")*100) end}, + {ID = "ParkingBrakeRight",x=170, y=0, w=170, 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.6,59.15,24.5), + ang = Angle(0,-52,90), + width = 60, + height = 280, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "VDLSet", x=10, y=32, w=40,h=80, tooltip="", model = { + model = "models/metrostroi_train/switches/vudwhite.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="VDL",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 = "KDPHSet", x=10, y=142, w=40,h=80, tooltip="", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=-19, color = Color(255,255,255), + labels={{model="models/metrostroi_train/81-707/labels/vu_labels.mdl",skin=11,ang=90,z=18.9,x=0,y=-25.5}}, + var="KDPH",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), + }}, + } +} + +ENT.ButtonMap["BCPressure"] = { + pos = Vector(461,-50.5,7.6), + ang = Angle(0,-90-30,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["BLTLPressure"] = { + pos = Vector(458,-54.5,7.6), + ang = Angle(0,-90-30,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["HVMeters"] = { + pos = Vector(458.3,-55.4,28.2), + ang = Angle(0,-115.3,90), + + width = 66, + height = 152, + scale = 0.0625, + + buttons = { + {ID = "!EnginesVoltage", x=0,y=0,w=66,h=72,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesVoltage"),ent:GetPackedRatio("EnginesVoltage")*1000) end}, + {ID = "!EnginesCurrent", x=0,y=79,w=66,h=72,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesCurrent"),ent:GetPackedRatio("EnginesCurrent")*1000-500) end}, + } +} +ENT.ButtonMap["Speedometer"] = { + pos = Vector(459.1,-53.4,17), + ang = Angle(0,-115.3,90), + + width = 100, + height = 85, + scale = 0.0625, + + buttons = { + {ID = "!Speedometer", x=0,y=0,w=100,h=85,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.Speed"),ent:GetPackedRatio("Speed")*100) end}, + } +} +ENT.ButtonMap["BatteryVoltage"] = { + pos = Vector(404,32.6,23.2), + ang = Angle(0,89,90), + width = 68, + height = 74, + scale = 0.0625, + + buttons = { + {ID = "!BatteryVoltage", x=0,y=0,w=68,h=74,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BatteryVoltage"),ent:GetPackedRatio("BatteryVoltage")*150) end}, + } +} +ENT.ButtonMap["ALSPanel"] = { + pos = Vector(449,-57.1,23.3), + ang = Angle(0,-126,90), + + width = 50, + height = 250, + scale = 0.0625, + + buttons = { + {ID = "!ALS_80", x=25,y=28+39.5*0,radius=25,tooltip="", model = { + sprite = {bright=0.1,size=0.25,scale=0.07,color=Color(94, 255, 213),z=5,lamp = "light_80", hidden = "panel1_80"}, + }}, + {ID = "!ALS_70", x=25,y=28+39.5*1,radius=25,tooltip="", model = { + sprite = {bright=0.1,size=0.25,scale=0.07,color=Color(94, 255, 213),z=5,lamp = "light_70", hidden = "panel1_70"}, + }}, + {ID = "!ALS_60", x=25,y=28+39.5*2,radius=25,tooltip="", model = { + sprite = {bright=0.1,size=0.25,scale=0.07,color=Color(94, 255, 213),z=5,lamp = "light_60", hidden = "panel1_60"}, + }}, + {ID = "!ALS_40", x=25,y=28+39.5*3,radius=25,tooltip="", model = { + sprite = {bright=0.1,size=0.25,scale=0.07,color=Color(255, 255, 134),z=5,lamp = "light_40", hidden = "panel1_40"}, + }}, + {ID = "!ALS_00", x=25,y=28+39.5*4,radius=25,tooltip="", model = { + sprite = {bright=0.1,size=0.25,scale=0.07,color=Color(255, 77, 97),z=5,lamp = "light_0", hidden = "panel1_0"}, + }}, + {ID = "!ALS_04", x=25,y=28+39.5*5,radius=25,tooltip="", model = { + sprite = {bright=0.1,size=0.25,scale=0.07,color=Color(255, 77, 97),z=5,lamp = "light_04", hidden = "panel1_04"}, + }}, + } +} + +ENT.ButtonMap["RCAV5"] = { + pos = Vector(406.45,-56.75,19.7), + ang = Angle(0,90,90), + width = 140, + height = 250, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "RCAV5Toggle", x=0, y=0, w=140, h=250, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_sammrc.mdl", ang = Angle(90,180+45,0), z=-20,y=117, + var="RCAV5",speed=2, vmax=0.3, vmin=0.7, + plomb = {var="RCAV5Pl", ID="RCAV5Pl",}, + sndvol = 0.5, snd = function(val) return val and "rcav_0-2" or "rcav_2-0" end, + sndmin = 60, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} +ENT.ClientProps["rcav5_wrench"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = ENT.ButtonMap["RCAV5"].pos+Vector(-1.1,4.35,-15.15), + ang = Angle(0,270-93,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.ButtonMap["RCAV3"] = { + pos = Vector(406.2,-48.7,-4.7), + ang = Angle(0,90,90), + width = 140, + height = 250, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "RCAV3Toggle", x=0, y=0, w=140, h=250, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_sammrc.mdl", ang = Angle(90,180+45,0), z=-20,y=117, + var="RCAV3",speed=2, vmax=0.3, vmin=0.7, + plomb = {var="RCAV3Pl", ID="RCAV3Pl",}, + sndvol = 0.5, snd = function(val) return val and "rcav_0-2" or "rcav_2-0" end, + sndmin = 60, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} +ENT.ClientProps["rcav3_wrench"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = ENT.ButtonMap["RCAV3"].pos+Vector(-1.1,4.35,-15.15), + ang = Angle(0,270-93,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.ButtonMap["RCAV4"] = { + pos = Vector(406.2,-29.72,-4.7), + ang = Angle(0,90,90), + width = 140, + height = 250, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "RCAV4Toggle", x=0, y=0, w=140, h=250, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_sammrc.mdl", ang = Angle(90,180+45,0), z=-20,y=117, + var="RCAV4",speed=2, vmax=0.3, vmin=0.7, + plomb = {var="RCAV4Pl", ID="RCAV4Pl",}, + sndvol = 0.5, snd = function(val) return val and "rcav_0-2" or "rcav_2-0" end, + sndmin = 60, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} +ENT.ClientProps["rcav4_wrench"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = ENT.ButtonMap["RCAV4"].pos+Vector(-1.1,4.35,-15.15), + ang = Angle(0,270-93,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.ButtonMap["RCARS"] = { + pos = Vector(406.45,-56.75,19.7), + ang = Angle(0,90,90), + width = 140, + height = 250, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "RCARSToggle", x=0, y=0, w=140, h=250, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_sammrc.mdl", ang = Angle(90,180+45,0), z=-20,y=117, + var="RCARS",speed=2, vmax=0.3, vmin=0.7, + plomb = {var="RCARSPl", ID="RCARSPl",}, + sndvol = 0.5, snd = function(val) return val and "rcav_0-2" or "rcav_2-0" end, + sndmin = 60, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} +ENT.ClientProps["rcars_wrench"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = ENT.ButtonMap["RCARS"].pos+Vector(-1.1,4.35,-15.15), + ang = Angle(0,270-93,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.ButtonMap["RCBPS"] = { + pos = Vector(406.2,-48.7,-4.7), + ang = Angle(0,90,90), + width = 140, + height = 250, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "RCBPSToggle", x=0, y=0, w=140, h=250, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_sammrc.mdl", ang = Angle(90,180+45,0), z=-20,y=117, + var="RCBPS",speed=2, vmax=0.3, vmin=0.7, + plomb = {var="RCBPSPl", ID="RCBPSPl",}, + sndvol = 0.5, snd = function(val) return val and "rcav_0-2" or "rcav_2-0" end, + sndmin = 60, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} +ENT.ClientProps["rcbps_wrench"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = ENT.ButtonMap["RCBPS"].pos+Vector(-1.1,4.35,-15.15), + ang = Angle(0,270-93,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.ButtonMap["DriverValveBLDisconnect"] = { + pos = Vector(450.5,-53,-37.61), + ang = Angle(-90,0,0), + width = 200, + height = 90, + 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 = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} +ENT.ButtonMap["DriverValveTLDisconnect"] = { + pos = Vector(447+5,-47,-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 = 0.2, snd = function(val) return val and "pneumo_TL_open_background" or "pneumo_TL_disconnect" end, + sndmin = 90, 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"}}, + } +} + +-- UAVA +ENT.ButtonMap["UAVAPanel"] = { + pos = Vector(453,56,-3), + ang = Angle(0,-70,90), + width = 180, + height = 200, + scale = 0.0625, + + buttons = { + {ID = "UAVAToggle",x=0, y=0, w=60, h=200, tooltip="", model = { + plomb = {var="UAVAPl", ID="UAVAPl",}, + var="UAVA", + sndid="UAVALever",sndvol = 1, snd = function(val) return val and "uava_on" or "uava_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "UAVACToggle",x=60, y=0, w=120, h=200, tooltip="",var="UAVAC",states={"Train.Buttons.UAVAOff","Train.Buttons.UAVAOn"}}, + } +} + + +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,16,43.4), + ang = Angle(0,-90,90), + width = 650, + height = 1780, + 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,64,43.4), + ang = Angle(0,0,90), + width = 680, + height = 2000, + scale = 0.1/2, + buttons = { + {ID = "CabinDoor",x=0,y=0,w=680,h=2000, 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,38), + 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,38), + 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,38), + 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.55,-4.5), + ang = Angle(0,-133,0), + hideseat = 0.2, +} +ENT.ClientProps["controller"] = { + model = "models/metrostroi_train/81-502/kv_white.mdl", + pos = Vector(458.00,-23,-6), + ang = Angle(0,180+5,0), + hideseat = 0.2, +} + +ENT.ClientProps["reverser"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = ENT.ClientProps["controller"].pos+Vector(0,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.5,0.2,-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(450,-56.5,-34), + ang = Angle(0,88,-90), + hideseat = 0.2, +} +ENT.ClientProps["train_disconnect"] = { + model = "models/metrostroi_train/81-707/cran3.mdl", + pos = Vector(453.5,-51.8,-27.33), + ang = Angle(90,-100,90), + hideseat = 0.2, +} + +ENT.ClientProps["parking_brake"] = { + model = "models/metrostroi_train/81-703/cabin_parking.mdl", + pos = Vector(456.8,35,-14.71), + ang = Angle(-90.00,7,0.00), + hideseat = 0.2, +} + +-------------------------------------------------------------------------------- +ENT.ClientProps["train_line"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(457.091278,-56.829021,5.283177), + ang = Angle(-88.920425,-32.279652,0.000000), + hideseat = 0.2, +} + +ENT.ClientProps["brake_line"] = { + model = "models/metrostroi_train/Equipment/arrow_tm.mdl", + pos = Vector(457.091278,-56.829021,5.283177), + ang = Angle(-88.920425,-32.279652,0.000000), + hideseat = 0.2, +} +ENT.ClientProps["brake_cylinder"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(460.119690,-52.755959,5.250632), + ang = Angle(-90.650009,-29.439659,0.000000), + hideseat = 0.2, +} + +---------------------------------------------------------------- +ENT.ClientProps["voltmeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(457.766754,-57.440155,25.109106), + ang = Angle(-90.000000,0.000000,-25.100000), + hideseat = 0.2, +} +ENT.ClientProps["ampermeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(457.750427,-57.475105,20.387020), + ang = Angle(-90.000000,0.000000,-25.100000), + hideseat = 0.2, +} + +ENT.ClientProps["volt1"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(403.582947,34.760574,20.441202), + ang = Angle(0.000000,89.500000,90.000000), + hideseat = 0.2, +} +ENT.ClientProps["speed_o"] = { + model = "models/metrostroi_train/equipment/arrow_volt2.mdl", + pos = Vector(458.156189,-56.589546,12.819487), + ang = Angle(-90.000000,0.000000,-25.100000), + hideseat = 0.2, +} + + +ENT.ClientProps["Ema_salon"] = { + model = "models/metrostroi_train/81-502/ema_salon.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2.0, +} + +ENT.ClientProps["bortlamps1"] = { + model = "models/metrostroi_train/81-502/bort_lamps_body.mdl", + pos = Vector(414.5,68.5,37), + ang = Angle(0,0,0), + hide = 2, +} +ENT.ClientProps["bortlamp1_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = Vector(414.5,69.4,37+3.25), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp1_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = Vector(414.5,69.4,37-0.02), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp1_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = Vector(414.5,69.4,37-3.3), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamps2"] = { + model = "models/metrostroi_train/81-502/bort_lamps_body.mdl", + pos = Vector(414.5,-65.5,37), + ang = Angle(0,180,0), + hide = 2, +} +ENT.ClientProps["bortlamp2_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = Vector(414.5,-66.4,37+3.25), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp2_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = Vector(414.5,-66.4,37-0.02), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp2_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = Vector(414.5,-66.4,37-3.3), + ang = Angle(0,180,0), + nohide = true, +} + +ENT.ClientProps["Ema_mirrors"] = { + model = "models/metrostroi_train/81-502/mirrors_ema.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2.0, +} +ENT.ClientProps["Ema_cabine"] = { + model = "models/metrostroi_train/81-502/ema502_cabine.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2.0, +} +ENT.ClientProps["rvs"] = { + model = "models/metrostroi_train/81-502/rvc_lamps.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat = 2 +} +ENT.ClientProps["sunprotectors"] = { + model = "models/metrostroi_train/81-502/sun_protectors.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2, +} + +ENT.ButtonMap["Route"] = { + pos = Vector(465.7,37.9,3.5), + ang = Angle(0,99,90), + width = 230, + height = 130, + scale = 0.0625, + buttons = { + {ID = "RouteNumber1+",x=76.5*0,y=0, w=76.5,h=65, tooltip=""}, + {ID = "RouteNumber2+",x=76.5*1,y=0, w=76.5,h=65, tooltip=""}, + {ID = "RouteNumber3+",x=76.5*2,y=0, w=76.5,h=65, tooltip=""}, + {ID = "RouteNumber1-",x=76.5*0,y=65,w=76.5,h=65, tooltip=""}, + {ID = "RouteNumber2-",x=76.5*1,y=65,w=76.5,h=65, tooltip=""}, + {ID = "RouteNumber3-",x=76.5*2,y=65,w=76.5,h=65, tooltip=""}, + } +} +ENT.ClientProps["route"] = { + model = "models/metrostroi_train/81-502/route/route_holder.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2, +} +ENT.ClientProps["route1"] = { + model = "models/metrostroi_train/81-502/route/route_number.mdl", + pos = Vector(465.3,40.16,-0.5), + ang = Angle(90,189,180), + skin=2, + hide = 2, + callback = function(ent) + ent.RouteNumber.Reloaded = false + end, +} +ENT.ClientProps["route2"] = { + model = "models/metrostroi_train/81-502/route/route_number.mdl", + pos = Vector(464.53,45.03,-0.5), + ang = Angle(90,189,180), + skin=2, + hide = 2, + callback = function(ent) + ent.RouteNumber.Reloaded = false + end, +} +ENT.ClientProps["route3"] = { + model = "models/metrostroi_train/81-502/route/route_number.mdl", + pos = Vector(463.8,49.72,-0.5), + ang = Angle(90,189,180), + skin=8, + hide = 2, + callback = function(ent) + ent.RouteNumber.Reloaded = false + end, +} + + +ENT.ClientProps["fireextinguisher"] = { + model = "models/metrostroi_train/81-502/fireextinguisher.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat = 2, +} + +ENT.ClientProps["PB"] = { + model = "models/metrostroi_train/81-720/720_pb.mdl", + pos = Vector(452, -33, -50.5), + ang = Angle(0,-90,-45), + hideseat = 0.2, +} +ENT.ClientSounds["PB"] = {{"PB",function(ent,var) return var > 0 and "pb_on" or "pb_off" end,1,1,50,1e3,Angle(-90,0,0)}} +--[[ +ENT.ClientProps["PBPresser1"] = { + model = "models/props_c17/BriefCase001a.mdl", + pos = Vector(446.5, -38, -46.5), + ang = Angle(0,-90,-25), + scale=0.7, +} +ENT.ClientProps["PBPresser2"] = { + model = "models/props_c17/BriefCase001a.mdl", + pos = Vector(408.5, -32, -46.5), + ang = Angle(0,-90,35), + scale=0.7, +}--]] + +ENT.ClientProps["Lamps_cab1"] = { + model = "models/metrostroi_train/81-502/cabin_lamp_light.mdl", + pos = Vector(0,-0.08,-0.2), + ang = Angle(0,0,0), + hide = 0.8, +} +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), + nohide = true, +} +ENT.ClientProps["Lamps_half2"] = { + model = "models/metrostroi_train/81-502/lights_group2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide = true, +} + +ENT.ClientProps["tab"] = { + model = "models/metrostroi_train/Equipment/tab.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + skin = 7, + hide = 2, +} + + +-------------------------------------------------------------------------------- +-- 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-502/81-502_door_right.mdl", + pos = GetDoorPosition(i,k,0), + ang = Angle(0,90 + 180*k,0), + hide = 2.0, + } + --[[ ENT.ClientProps["door"..i.."x"..k.."b"] = { + model = "models/metrostroi_train/81-502/81-502_door_left.mdl", + pos = GetDoorPosition(i,k,1), + ang = Angle(0,90 + 180*k,0), + hide = 2.0, + }--]] + end +end--]=] +ENT.ClientProps["door0x1"] = { + model = "models/metrostroi_train/81-502/81-502_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-502/81-502_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-502/81-502_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-502/81-502_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-502/81-502_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-502/81-502_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-502/81-502_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-502/81-502_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-502/81-502_door_tor.mdl", + pos = Vector(460.62+7.4,-14.53,-7.23), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door2"] = { + model = "models/metrostroi_train/81-502/81-502_door_tor.mdl", + pos = Vector(-462.6-8,16.53,-7.24), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door3"] = { + model = "models/metrostroi_train/81-502/81-502_door_interior_b.mdl", + pos = Vector(382.3,-15,-9.6), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door4"] = { + model = "models/metrostroi_train/81-502/81-502_door_cab.mdl", + pos = Vector(411.17+7.6,66.05,-6.38), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["UAVALever"] = { + model = "models/metrostroi_train/81-703/cabin_uava.mdl", + pos = Vector(449+8.1,56.0,-9.8), + ang = Angle(0,-90+10,0), + hideseat = 0.8, +} + +ENT.ClientProps["RedLights"] = { + model = "models/metrostroi_train/81-703/81-703_red_light.mdl", + pos = Vector(-23+7.2,1,-191), + ang = Angle(0,0,0.000000), + nohide = true +} +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(475,0,-20), Angle(0,0,0), Color(169,130,88), brightness = 3 ,fov = 90, texture = "models/metrostroi_train/equipment/headlight",shadows = 1,headlight=true}, + [2] = { "headlight", Vector(465,0,45), Angle(-20,0,0), Color(255,0,0), fov=164 ,brightness = 0.3, farz=250,texture = "models/metrostroi_train/equipment/headlight2",shadows = 0,backlight=true}, + [20] = { "headlight", Vector( 425,-56,-70),Angle(0,-90,0),Color(255,220,180),brightness = 0.3,distance = 300 ,fov=120,shadows = 1, texture="effects/flashlight/soft", hidden="Ema_salon2" }, + [21] = { "headlight", Vector(445,-55,40), Angle(75, 70,45), Color(190, 130, 88), fov=125,farz=80,brightness = 1.5,shadows = 1, texture = "models/metrostroi_train/equipment/headlight", hidden="Lamps_pult"}, + [22] = { "headlight", Vector(440,-60,31), Angle(20, 25,0), Color(200, 140, 98), fov=120,farz=100,brightness = 1,shadows = 1, texture = "models/metrostroi_train/equipment/headlight2", hidden="Lamps_pult"}, + -- Interior + [9] = { "dynamiclight", Vector(200, 0, -5), Angle(0,0,0), Color(255,220,180), brightness = 3, distance = 200}, + [10] = { "dynamiclight", Vector(-150, 0, -5), Angle(0,0,0), Color(255,220,180), brightness = 3, distance = 200}, + [11] = { "dynamiclight", Vector( 200, 0, -5), Angle(0,0,0), Color(255,220,180), brightness = 4, distance = 260}, + [12] = { "dynamiclight", Vector( 0, 0, -5), Angle(0,0,0), Color(255,220,180), brightness = 4, distance = 260}, + [13] = { "dynamiclight", Vector(-260, 0, -5), Angle(0,0,0), Color(255,220,180), brightness = 4, distance = 260}, + -- Cabin + [23] = { "dynamiclight", Vector(425,-10.0,40), Angle(0,0,0), Color(255,255,255), brightness = 0.0003, distance = 300, hidden="Ema_salon2"}, + + + [15] = { "light",Vector(414.5,69.4,37+3.25), Angle(0,0,0), Color(254,254,254), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [16] = { "light",Vector(414.5,69.4,37-0.02), Angle(0,0,0), Color(40,240,122), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [17] = { "light",Vector(414.5,69.4,37-3.3), Angle(0,0,0), Color(254,210,18), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [18] = { "light",Vector(414.5,-66.4,37+3.25), Angle(0,0,0), Color(254,254,254), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [19] = { "light",Vector(414.5,-66.4,37-0.02), Angle(0,0,0), Color(40,240,122), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [20] = { "light",Vector(414.5,-66.4,37-3.3), Angle(0,0,0), Color(254,210,18), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + + [5] = { "light",Vector(465+5,-32, 48), Angle(0,0,0), Color(255,50,50), brightness = 0.2, scale = 1.5, texture = "sprites/light_glow02", size = 2}, + [6] = { "light",Vector(465+5, 32, 48), Angle(0,0,0), Color(255,50,50), brightness = 0.2, scale = 1.5, texture = "sprites/light_glow02", size = 2}, + [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(446.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-3*6.6/2,69,-26))) + leftNum:SetSkin(num) + end + if IsValid(rightNum) then + rightNum:SetPos(self:LocalToWorld(Vector(-280-i*6.6-3*6.6/2,-66.6,-26))) + rightNum:SetSkin(num) + end + end +end + +-------------------------------------------------------------------------------- +function ENT:Think() + self.BaseClass.Think(self) + --self:SetSoundState("horn1",1,1) + if not self.RenderClientEnts then + return + 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_emer1") 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:SetLightPower(20,self:GetPackedBool("SOSD")) + + -- 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 typ = self:GetNW2Int("EMAType",1) + if self.Type ~= typ then + self:ShowHide("pult1",typ == 1) + self:ShowHide("pult2",typ >= 2) + self:HidePanel("Main1",typ ~= 1) + self:HidePanel("Main1_2",typ ~= 1) + self:HidePanel("BPS",typ ~= 1) + self:HidePanel("NMnUAVA",typ ~= 1) + self:HidePanel("Speedometer",typ == 3) + self:HidePanel("ALSPanel",typ == 3) + self:HidePanel("VRD",typ ~= 1) + self:HidePanel("VRD2",typ == 1) + self:HidePanel("VBA",typ == 1) + self:HidePanel("Main2",typ < 2) + self:ShowHide("panel1",typ < 3) + self:ShowHide("panel2",typ == 3) + self:ShowHide("panel1_04",typ < 3) + self:ShowHide("panel1_0",typ < 3) + self:ShowHide("panel1_40",typ < 3) + self:ShowHide("panel1_60",typ < 3) + self:ShowHide("panel1_70",typ < 3) + self:ShowHide("panel1_80",typ < 3) + self:ShowHide("panel2_04",typ == 3) + self:ShowHide("panel2_0",typ == 3) + self:ShowHide("panel2_40",typ == 3) + self:ShowHide("panel2_60",typ == 3) + self:ShowHide("panel2_70",typ == 3) + self:ShowHide("panel2_80",typ == 3) + self:HidePanel("Lamps1_1",typ == 3) + self:HidePanel("Lamps1_2",typ == 3) + self:HidePanel("Lamps2_1",typ ~= 3) + self:HidePanel("Lamps2_2",typ ~= 3) + self:ShowHide("speed_o",typ ~= 3) + self:HidePanel("RCAV3",typ==1) + self:HidePanel("RCAV4",typ==1) + self:HidePanel("RCAV5",typ==1) + self:HidePanel("RCARS",typ~=1) + self:HidePanel("RCBPS",typ~=1) + self:ShowHide("rcars_wrench",typ == 1) + self:ShowHide("rcbps_wrench",typ == 1) + self:ShowHide("rcav3_wrench",typ == 1) + self:ShowHide("rcav4_wrench",typ ~= 1) + self:ShowHide("rcav5_wrench",typ ~= 1) + end + local light_04 = self:Animate("light_04",self:GetPackedBool("ARS_04") and 1 or 0,0,1,5,false) + local light_0 = self:Animate("light_0" ,self:GetPackedBool("ARS_00") and 1 or 0,0,1,5,false) + local light_40 = self:Animate("light_40",self:GetPackedBool("ARS_40") and 1 or 0,0,1,5,false) + local light_60 = self:Animate("light_60",self:GetPackedBool("ARS_60") and 1 or 0,0,1,5,false) + local light_80 = self:Animate("light_80",self:GetPackedBool("ARS_70") and 1 or 0,0,1,8,false) + local light_70 = self:Animate("light_70",self:GetPackedBool("ARS_80") and 1 or 0,0,1,6,false) + if typ < 3 then + self:Animate("speed_o",self:GetPackedRatio("Speed"),0.337,0.663,60,3) + self:ShowHideSmooth("panel1_04", light_04) + self:ShowHideSmooth("panel1_0", light_0) + self:ShowHideSmooth("panel1_40", light_40) + self:ShowHideSmooth("panel1_60", light_60) + self:ShowHideSmooth("panel1_70", light_80) + self:ShowHideSmooth("panel1_80", light_70) + else + self:ShowHideSmooth("panel2_04", light_04) + self:ShowHideSmooth("panel2_0", light_0) + self:ShowHideSmooth("panel2_40", light_40) + self:ShowHideSmooth("panel2_60", light_60) + self:ShowHideSmooth("panel2_70", light_80) + self:ShowHideSmooth("panel2_80", light_70) + end + if typ == 1 then + self:ShowHide("rcars_wrench",self.RCARSResetTime and CurTime()-self.RCARSResetTime<1.5) + self:ShowHide("rcbps_wrench",self.RCBPSResetTime and CurTime()-self.RCBPSResetTime<1.5) + if IsValid(self.ClientEnts.rcars_wrench) and self.Anims.RCARSToggle then + self.ClientEnts.rcars_wrench:SetPoseParameter("position",1-self.Anims.RCARSToggle.value) + end + + if IsValid(self.ClientEnts.rcbps_wrench) and self.Anims.RCBPSToggle then + self.ClientEnts.rcbps_wrench:SetPoseParameter("position",1-self.Anims.RCBPSToggle.value) + end + if self.LastRCARSValue ~= self:GetPackedBool("RCARS") then + self.RCARSResetTime = CurTime()+1.5 + self.LastRCARSValue = self:GetPackedBool("RCARS") + end + if self.LastRCBPSValue ~= self:GetPackedBool("RCBPS") then + self.RCBPSResetTime = CurTime()+1.5 + self.LastRCBPSValue = self:GetPackedBool("RCBPS") + end + else + self:ShowHide("rcav3_wrench",self.RCAV3ResetTime and CurTime()-self.RCAV3ResetTime<1.5) + self:ShowHide("rcav4_wrench",self.RCAV4ResetTime and CurTime()-self.RCAV4ResetTime<1.5) + self:ShowHide("rcav5_wrench",self.RCAV5ResetTime and CurTime()-self.RCAV5ResetTime<1.5) + if IsValid(self.ClientEnts.rcav3_wrench) and self.Anims.RCAV3Toggle then + self.ClientEnts.rcav3_wrench:SetPoseParameter("position",1-self.Anims.RCAV3Toggle.value) + end + if IsValid(self.ClientEnts.rcav4_wrench) and self.Anims.RCAV4Toggle then + self.ClientEnts.rcav4_wrench:SetPoseParameter("position",1-self.Anims.RCAV4Toggle.value) + end + if IsValid(self.ClientEnts.rcav5_wrench) and self.Anims.RCAV5Toggle then + self.ClientEnts.rcav5_wrench:SetPoseParameter("position",1-self.Anims.RCAV5Toggle.value) + end + if self.LastRCAV3Value ~= self:GetPackedBool("RCAV3") then + self.RCAV3ResetTime = CurTime()+1.5 + self.LastRCAV3Value = self:GetPackedBool("RCAV3") + end + if self.LastRCAV4Value ~= self:GetPackedBool("RCAV4") then + self.RCAV4ResetTime = CurTime()+1.5 + self.LastRCAV4Value = self:GetPackedBool("RCAV4") + end + if self.LastRCAV5Value ~= self:GetPackedBool("RCAV5") then + self.RCAV5ResetTime = CurTime()+1.5 + self.LastRCAV5Value = self:GetPackedBool("RCAV5") + end + --print(self.Anims.rcav5_wrench.val,self.Anims.RCAV5Toggle.value) + --self.Anims["rcav5_wrench"]=nil + --self:Animate("rcav5_wrench",0,0,0.5,60,3) + + end + + local vpr = self:Animate("radiolamp",self:GetPackedBool("VPR") and 1 or 0,0,1,8,false) + self:ShowHideSmooth("rvs",vpr) + self:SetSoundState("vpr",vpr>0 and 1 or 0,1) + + 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) + local RL = self:Animate("redlights",self:GetPackedBool("RedLight") and 1 or 0,0,1,5,false) + + self:ShowHideSmooth("WhiteLights",HL1) + self:ShowHideSmooth("DistantLights",HL2) + self:ShowHideSmooth("RedLights",RL) + self:SetLightPower(5,RL > 0,RL) + self:SetLightPower(6,RL > 0,RL) + 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(21,PL>0,PL) + self:SetLightPower(22,PL>0,PL) + + local bright = HL1*0.3+HL2*0.7 + self:SetLightPower(1,bright>0,bright) + self:SetLightPower(2,RL>0,RL) + + 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 Bortlamp_w = self:Animate("Bortlamp_w",self:GetPackedBool("DoorsW") and 1 or 0,0,1,16,false) + local Bortlamp_g = self:Animate("Bortlamp_g",self:GetPackedBool("GRP") and 1 or 0,0,1,16,false) + local Bortlamp_y = self:Animate("Bortlamp_y",self:GetPackedBool("BrY") and 1 or 0,0,1,16,false) + self:ShowHideSmooth("bortlamp1_w",Bortlamp_w) + self:ShowHideSmooth("bortlamp1_g",Bortlamp_g) + self:ShowHideSmooth("bortlamp1_y",Bortlamp_y) + self:ShowHideSmooth("bortlamp2_w",Bortlamp_w) + self:ShowHideSmooth("bortlamp2_g",Bortlamp_g) + self:ShowHideSmooth("bortlamp2_y",Bortlamp_y) + self:SetLightPower(15, Bortlamp_w > 0, Bortlamp_w) + self:SetLightPower(18, Bortlamp_w > 0, Bortlamp_w) + self:SetLightPower(16, Bortlamp_g > 0, Bortlamp_g) + self:SetLightPower(19, Bortlamp_g > 0, Bortlamp_g) + self:SetLightPower(17, Bortlamp_y > 0, Bortlamp_y) + self:SetLightPower(20, Bortlamp_y > 0, Bortlamp_y) + + ---PB + self:Animate("PB",self:GetPackedBool("PB") and 1 or 0,0,0.2, 12,false) + + self:Animate("UAVALever", self:GetPackedBool("UAVA") and 1 or 0, 0,0.6, 128, 3,false) + self:Animate("stopkran", self:GetPackedBool("EmergencyBrakeValve") and 1 or 0, 0,0.23, 256, 3,false) + + self:Animate("brake_disconnect",self:GetPackedBool("DriverValveBLDisconnect") and 0 or 1,0.25,0.5, 4,false) + self:Animate("train_disconnect",self:GetPackedBool("DriverValveTLDisconnect") and 1 or 0,0.25,0, 4,false) + + -- Simulate pressure gauges getting stuck a little + self:Animate("brake",self:GetPackedRatio("CranePosition"), 0.00, 0.48, 256, 24) + 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.881,0.610,60,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.142, 0.877+0.01, 256,2)--,,0.01) + self:Animate("train_line", self:GetPackedRatio("TLPressure"), 0.142, 0.877+0.01, 256,2)--,,0.01) + self:Animate("brake_cylinder", self:GetPackedRatio("BCPressure"), 0.141, 0.880-0.01, nil,2)--,,0.03) + self:Animate("voltmeter", self:GetPackedRatio("EnginesVoltage"), 0.631,0.376-0.01,92,2) + self:Animate("ampermeter", self:GetPackedRatio("EnginesCurrent"), 0.655,0.35,92,2) + + local door2 = self:Animate("door2", self:GetPackedBool("RearDoor") and 1 or 0,0,0.25, 8, 1) + local door1 = self:Animate("door1", self:GetPackedBool("FrontDoor") and 1 or 0,0,0.22, 8, 1) + local door3 = self:Animate("door3", self:GetPackedBool("PassengerDoor") and 1 or 0,1,0.79, 8, 1) + local door4 = self:Animate("door4", self:GetPackedBool("CabinDoor") and 1 or 0,1,0.77, 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) + if (state ~= 1 and state ~= 0) ~= self.DoorStates[id] then + --if doorstate and state < 1 or not doorstate and state > 0 then + --else + if doorstate and state == 1 or not doorstate and state == 0 then + 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.8+self.DoorLoopStates[id]*0.2) + local n_l = "door"..i.."x"..k--.."a" + --local n_r = "door"..i.."x"..k.."b" + local dlo = 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.01,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 + + self:ShowHide("SSpeed1",self:GetPackedBool("LUDS")) + self:ShowHide("SSpeed2",self:GetPackedBool("LUDS")) + local speed = self:GetPackedRatio("CPS_Speed")*100.0 + if IsValid(self.ClientEnts["SSpeed1"])then self.ClientEnts["SSpeed1"]:SetSkin(math.floor(speed)%10) end + if IsValid(self.ClientEnts["SSpeed2"])then self.ClientEnts["SSpeed2"]:SetSkin(math.floor(speed/10)%10) 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)) + --self:SetSoundState("emer_brake",self.EmergencyValveRamp*0.8,1) + --self:SetSoundState("emer_brake",self.EmergencyValveRamp*0.8,1) + + -- 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) + -- ARS/ringer alert + self:SetSoundState("ring",self:GetPackedBool("KSRing") and 1 or 0,1) + self:SetSoundState("ring2",self:GetPackedBool("MRing") and 1 or 0,0.92) + + -- 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.25,1) + else + self:SetSoundState("rk",0,0) + end + end + + local work = self:GetPackedBool("AnnPlay") + local noise = self:GetNW2Int("AnnouncerNoise", -1) + + local volume = self:GetNW2Float("UPOVolume",0.6) + local noisevolume = self:GetNW2Float("UPONoiseVolume",0.6) + + self.BPSNBuzzVolume = self.BPSNBuzzVolume or 0 + local buzzvolume = volume + if self.Sounds["announcer1"] and IsValid(self.Sounds["announcer1"]) then buzzvolume = (1-(self.Sounds["announcer1"]:GetLevel())*math.Rand(0.9,3))*buzzvolume*2 end + if self.BPSNBuzzVolume > buzzvolume then + self.BPSNBuzzVolume = math.Clamp(self.BPSNBuzzVolume + 8*(buzzvolume-self.BPSNBuzzVolume)*dT,0.1,1) + else + self.BPSNBuzzVolume = math.Clamp(self.BPSNBuzzVolume + 0.4*(buzzvolume-self.BPSNBuzzVolume)*dT,0.1,1) + end + + for k,v in ipairs(self.AnnouncerPositions) do + volume = volume*(v[3] or 1) + self:SetSoundState("announcer_noiseW"..k,noise>-1 and noisevolume*volume or 0,1) + for i=1,3 do + self:SetSoundState(Format("announcer_noise%d_%d",i,k),(work and i==noise) and volume*self.BPSNBuzzVolume*self:GetNW2Float("UPOBuzzVolume",1) or 0,1) + end + end + for k,v in ipairs(self.AnnouncerPositions) do + if IsValid(self.Sounds["announcer"..k]) then self.Sounds["announcer"..k]:SetVolume(work and v[3]*volume or 0) end + end +end + +function ENT:OnAnnouncer(volume) + return self:GetPackedBool("AnnPlay") and self:GetNW2Float("UPOVolume",0.6)*volume or 0 +end + +function ENT:Draw() + self.BaseClass.Draw(self) +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: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 == "LK5" then + local speed = self:GetPackedRatio("Speed") + local id = range > 0 and "lk5_on" or "lk5_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 == "LK4" then + local speed = self:GetPackedRatio("Speed") + local id = range > 0 and "lk4_on" or "lk4_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 == "KK" then + return range > 0 and "kk_on" or "kk_off",location,1,pitch--0.8 + end + if soundid == "RPB" then + return range > 0 and "rpb_on" or "rpb_off",location,1,pitch + end + if soundid == "KD" then + return range > 0 and "kd_on" or "kd_off",location,1,pitch + end + if soundid == "AVU" then + return range > 0 and "avu_on" or "avu_off",location,1,0.9 + end + if soundid == "brake" then + self:PlayOnce("brake_f",location,range,pitch) + self:PlayOnce("brake_b",location,range,pitch) + return + end + if soundid == "UAVAC" then + return "uava_reset",location,range,pitch + end + end + return soundid,location,range,pitch +end +--[[ +local dist = { + Back1 = 550, + AVMain = 550, + AV1 = 550, + AV2 = 550, + Battery = 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() \ No newline at end of file diff --git a/lua/entities/gmod_subway_81-502/init.lua b/lua/entities/gmod_subway_81-502/init.lua new file mode 100644 index 0000000..88b32ac --- /dev/null +++ b/lua/entities/gmod_subway_81-502/init.lua @@ -0,0 +1,634 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +ENT.BogeyDistance = 650 -- Needed for gm trainspawner + +--"DURASelectMain","DURASelectAlternate","DURAToggleChannel","DURAPowerToggle", +ENT.SyncTable = { + "VB","VBA","AV","VU","VU1","VU2","VU3", + "VRD","VR", + "VRU","KAD","KAH","OVT","KSD","KPVU","VKF", + "KOS","VZP","KRZD","KDL","KDLK","KDPK","LOn","LOff","VozvratRP","KSN","KDP","VMK","Ring","VUS","VAK","Autodrive","VZD","PB","VUD","VAKK", + "RCAV3","RCAV4","RCAV5","RCARS","RCBPS", + "VDL","KDPH", + "ALS","ARS","Headlights","VSOSD","KB","DriverValveBLDisconnect","DriverValveTLDisconnect", + "GV", + "R_UPO", + "UAVA","UAVAC","EmergencyBrakeValve" +} +ENT.SyncFunctions = { + "" +} + +function ENT:Initialize() + self.Plombs = { + VRU=true, + KAH=true, + KAD=true, + OVT=true, + KPVU=true, + UAVA=true, + RCAV3=true, + RCAV4=true, + RCAV5=true, + RCARS=true, + RCBPS=true, + Init=true, + } + -- Set model and initialize + self:SetModel("models/metrostroi_train/81-502/81-502.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+6+2.5),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+3.5,0,-75),Angle(0,0,0),true,"722") + self.RearCouple = self:CreateCouple(Vector(-421.5-3.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+4.5,1.0,-72),Angle(0,0,0),true,"722") + self.RearCouple = self:CreateCouple(Vector(-421+2+3.6-4.5,1.3,-72),Angle(0,180,0),false,"702") + end + self.FrontBogey:SetNWInt("MotorSoundType",0) + self.RearBogey:SetNWInt("MotorSoundType",0) + self.FrontCouple.EKKDisconnected = true + + self.LeftAutoCoil = self:AddAutodriveCoil(self.FrontBogey,false) + self.RightAutoCoil = self:AddAutodriveCoil(self.FrontBogey,true) + -- 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] = "VozvratRPSet", + + [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] = {"KDL",helper="VDLSet"}, + [KEY_D] = "KDP", + [KEY_V] = "VUDToggle", + [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",helper="EmergencyBrakeValveToggle"}, + [KEY_SPACE] = "KB", + [KEY_PAD_DIVIDE] = "VAKSet", + + [KEY_PAD_ENTER] = "KVWrenchKV", + [KEY_PAD_0] = "DriverValveDisconnect", + [KEY_LSHIFT] = { + [KEY_W] = "KVUp_Unlocked", + + [KEY_1] = "LOnSet", + [KEY_2] = "LOffSet", + [KEY_4] = "KVSet0Fast", + [KEY_L] = "DriverValveDisconnect", + + [KEY_7] = "KVWrenchNone", + [KEY_9] = "KVWrenchKV9", + [KEY_0] = "KVWrenchKV", + [KEY_6] = "KVSetT1A", + [KEY_SPACE] = "PB", + + [KEY_PAD_ENTER] = "KVWrenchNone", + }, + } + 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 = "RearTrainLineIsolationToggle", + Pos = Vector(-474, -30, -62), Radius = 8, + }, + { + ID = "RearBrakeLineIsolationToggle", + 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 = { + [15] = true, + } + self.TrainWireCrossConnections = { + [5] = 4, -- Reverser F<->B + [30] = 29, -- 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.A5:TriggerInput("Set",0) + self:SetNW2Float("UPONoiseVolume",math.Rand(0,0.3)) + self:SetNW2Float("UPOVolume",math.Rand(0.8,1)) + self.EMAType = self.EMAType or 1 + + self:TrainSpawnerUpdate() +end + +function ENT:TrainSpawnerUpdate() + if IsValid(self.FrontBogey) then + self.FrontBogey:SetNW2Int("SquealType",math.floor(math.random()*7)+1) + end + if IsValid(self.RearBogey) then + self.RearBogey:SetNW2Int("SquealType",math.floor(math.random()*7)+1) + end +end + +function ENT:NonSupportTrigger() + self.RCAV3:TriggerInput("Set",0) + self.RCAV4:TriggerInput("Set",0) + self.RCAV5:TriggerInput("Set",0) + self.RCARS:TriggerInput("Set",0) + self.OVT:TriggerInput("Set",0) + self.KAH:TriggerInput("Set",1) + self.VBA:TriggerInput("Set",0) + self.ARS:TriggerInput("Set",0) + self.Plombs.RCAV3 = nil + self.Plombs.RCAV4 = nil + self.Plombs.RCAV5 = nil + self.Plombs.RCARS = nil + self.Plombs.OVT = nil + self.Plombs.KAH = nil +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("RedLight",Panel.RedLights>0) + self:SetPackedBool("Headlights1",Panel.Headlights1 > 0) + self:SetPackedBool("Headlights2",Panel.Headlights2 > 0) + + 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) + self:SetPackedBool("Lamps_emer2",emerActive2 > 0) + self:SetPackedBool("Lamps_half1",lightsActive1 > 0) + self:SetPackedBool("Lamps_half2",lightsActive2 > 0) + self:SetPackedRatio("LampsStrength",lightsActive1) + + -- 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.SSN > 0 then + local wags = #self.WagonList + for _,v in ipairs(self.WagonList) do + TW18 = TW18+(v.Panel.TW18 or 0)/wags + end + end + if self.EMAType == 1 then + self:SetPackedBool("CPS_AV",Panel.SSD > 0) + self:SetPackedBool("BPSon",self.BPS.PowerLamp > 0) + self:SetPackedBool("BPSErr",self.BPS.ErrorLamp > 0) + self:SetPackedBool("BPSFail",self.BPS.FailLamp > 0) + self:SetPackedBool("ARS_04",self.MARS.NoFreq > 0) + self:SetPackedBool("ARS_00",self.MARS.F5 > 0) + self:SetPackedBool("CPS_Pd",self.MARS.F6 > 0) + self:SetPackedBool("ARS_40",self.MARS.F4 > 0) + self:SetPackedBool("ARS_60",self.MARS.F3 > 0) + self:SetPackedBool("ARS_70",self.MARS.F2 > 0) + self:SetPackedBool("ARS_80",self.MARS.F1 > 0) + self:SetPackedBool("KSRing",false) + self:SetPackedBool("MRing",Panel.Ring > 0) + self:SetPackedBool("LKVD",self.MARS.KVD > 0) + self:SetPackedBool("NMLow",Panel.NMLow > 0) + self:SetPackedBool("UAVATriggered",Panel.UAVATriggered > 0 and CurTime()%0.4>0.2) + + else + self:SetPackedBool("CPS_AV",false) + self:SetPackedBool("ARS_04",self.ALSCoil.NoFreq) + self:SetPackedBool("ARS_00",self.ALSCoil.F5) + self:SetPackedBool("CPS_Pd",self.ALSCoil.F6) + self:SetPackedBool("ARS_40",self.ALSCoil.F4) + self:SetPackedBool("ARS_60",self.ALSCoil.F3) + self:SetPackedBool("ARS_70",self.ALSCoil.F2) + self:SetPackedBool("ARS_80",self.ALSCoil.F1) + self:SetPackedBool("KSRing",Panel.Ring > 0) + self:SetPackedBool("MRing",false) + if self.PB.Value > 0 and not self:GetDriver() then self.PB:TriggerInput("Set",0) end + end + --print(self.Electric.Itotal,self.LK1.Value,self.LK5.Value,self.TSH.Value,self.PR.Value) + self:SetPackedBool("CPS_SN2",TW18 > 0.5) + --print(self.RRT.Value,self.RUT.Value)--self.Scheme["25A"],self["RRTpod"]) + self:SetPackedRatio("CPS_SN1",math.Clamp(TW18^0.7,0,1)) + self:SetPackedBool("CPS_KS",self.KSAUP.Power > 0) + self:SetPackedBool("CPS_4",Panel.S4 > 0) + self:SetPackedBool("CPS_5",Panel.S5 > 0) + self:SetPackedBool("CPS_20",Panel.S20 > 0) + self:SetPackedBool("CPS_6",Panel.S6 > 0) + self:SetPackedBool("CPS_1",Panel.S1 > 0) + self:SetPackedBool("CPS_1P",Panel.S1P > 0) + self:SetPackedBool("CPS_3",Panel.S3 > 0) + self:SetPackedBool("CPS_2",Panel.S2 > 0) + self:SetPackedBool("CPS_RP",Panel.GreenRP > 0) + self:SetPackedBool("CPS_SD",Panel.SSD > 0) + self:SetPackedBool("CPS_DT",Panel.SDT > 0) + --print(self.Electric.Cosume) + self:SetPackedRatio("LampsCount",math.Clamp(1-self.Electric.Cosume,0.3,1)) + self:SetPackedBool("LMK",Panel.LMK > 0) + self:SetPackedBool("L16",Panel.L16 > 0) + self:SetPackedBool("LRU",Panel.LRU > 0) + self:SetPackedBool("LVRD",Panel.RD > 0) + self.SOSD = Panel.SOSD > 0 + self:SetPackedBool("SOSD",self.SOSD) + + + self:SetPackedBool("DoorsW",Panel.DoorsW > 0) + self:SetPackedBool("GRP",Panel.GreenRP > 0) + self:SetPackedBool("BrY",Panel.BrY > 0) + self:SetPackedBool("DoorsWC",Panel.DoorsWC > 0) + self:SetPackedBool("CPS_4",Panel.S4 > 0) + self:SetPackedBool("CPS_4",Panel.S4 > 0) + + self.TrueBrakeAngle = self.TrueBrakeAngle or 0 + if self.ManualBrake < 0.001 and self.ManualBrake > self.TrueBrakeAngle then self.TrueBrakeAngle = self.ManualBrake end + if self.ManualBrake > 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.BD2:TriggerInput("Set",self.PassengerDoor and 1 or 0) + + 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:SetPackedBool("VPR",Panel.VPR > 0) + self:SetPackedBool("LUDS",Panel.V1 > 0) + + + self:SetNW2Int("WrenchMode",self.KVWrenchMode) + 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", Pneumatic.BrakeCylinderPressure/6.0) + self:SetPackedRatio("BatteryVoltage",self.Panel["V1"]*self.Battery.Voltage/150.0) + self:SetPackedRatio("EnginesVoltage", self.Engines.E24/2000.0) + self:SetPackedRatio("EnginesCurrent", 0.5 + 0.5*(self.Electric.I24/500.0)) + + self:SetPackedRatio("Speed", self.ALSCoil.Speed/100) + self:SetPackedRatio("CPS_Speed", self.KSAUP.Speed/100) + + self:SetNW2Bool("UPOPlaying",self:ReadTrainWire(47) > 0) + -- 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) + if self.ManualBrake == 0.0 then return end + end + if button == "ParkingBrakeRight" then + self.ManualBrake = math.min(1.0,(self.ManualBrake or 0) + 0.05) + if self.ManualBrake == 1.0 then return end + 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 + --print(self.ManualBrake) + end + if button == "ManualBrakeRight" then + self.ManualBrake = math.min(1.0,self.ManualBrake + 0.008) + if self.ManualBrake == 1.0 then return end + --print(self.ManualBrake) + 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 + + 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 (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 == "KDL" then self.KDPK:TriggerInput("Open",1) end + if button == "KDP" then self.KDPK:TriggerInput("Close",1) end + if button == "KDL" and self.VUD.Value < 1 then self.KDL:TriggerInput("Close",1) end + if button == "KDP" and self.VUD.Value < 1 then self.KDP:TriggerInput("Close",1) 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 + end + + if button == "VUDToggle" then + self.VDL:TriggerInput("Open",1) + self.KDL:TriggerInput("Open",1) + self.KDP:TriggerInput("Open",1) + end + + if button == "GVToggle" then + if self.GV.Value > 0.5 then + self:PlayOnce("revers_f",nil,0.7) + else + self:PlayOnce("revers_b",nil,0.7) + end + return + end + + if button == "KB" then + if self.EMAType == 1 then + self.PB:TriggerInput("Set",1) + else + self.KOS:TriggerInput("Set",1) + end + end + if button == "PB" then + if self.EMAType == 1 then + self.KB:TriggerInput("Set",1) + else + self.PB:TriggerInput("Set",1-self.PB.Value) + end + end + --[[if (button == "UAVAToggle") then + if self.UAVA then + if self.UAVA.Value > 0.5 then + self:PlayOnce("uava_off","cabin") + else + self:PlayOnce("uava_off","cabin") + end + end + return + end]] + + + if button == "EPKToggle" and self.DriverValveBLDisconnect.Value == 1.0 then + if self.EPK.Value == 0.0 then + self:PlayOnce("epv_off","cabin",0.9) + else + self:PlayOnce("epv_on","cabin",0.9) + 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 == "KB" then + if self.EMAType == 1 then + self.PB:TriggerInput("Set",0) + else + self.KOS:TriggerInput("Set",0) + end + end + if button == "PB" then + self.KB:TriggerInput("Set",0) + end + --if button == "KVT2Set" then self.KVT:TriggerInput("Open",1) end + if button == "KDL" and self.VUD.Value < 1 then self.KDL:TriggerInput("Open",1) self:OnButtonRelease("KDLSet") end + if button == "KDP" and self.VUD.Value < 1 then self.KDP:TriggerInput("Open",1) self:OnButtonRelease("KDPSet") 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 diff --git a/lua/entities/gmod_subway_81-502/shared.lua b/lua/entities/gmod_subway_81-502/shared.lua new file mode 100644 index 0000000..eda8d53 --- /dev/null +++ b/lua/entities/gmod_subway_81-502/shared.lua @@ -0,0 +1,577 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.PrintName = "Ema (81-502)" +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" +ENT.SkinsType = "81-502" +ENT.Model = "models/metrostroi_train/81-502/81-502.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 + +-- 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 + +ENT.AnnouncerPositions = { + {Vector(412,-49 ,61),80,0.6}, + {Vector(-3,-60, 62),300,0.6}, + {Vector(-3,60 ,62),300,0.6}, +} + +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+20,-40,25),Angle(0,180,0),"Train.502.AV"}, + {Vector(407.5+10,-35,9),Angle(20,180,0),"Train.502.VBA","VBA"}, + {Vector(407.5+10,-28,5),Angle(20,180,0),"Train.502.VRD","VRD"}, + {Vector(407.5+13,-46,10),Angle(10,200,0),"Train.502.RCARS","RCARS"}, + {Vector(407.5+13,-46,10),Angle(10,200,0),"Train.502.RCAV5","RCAV5"}, + {Vector(407.5+3,-37,-20),Angle(-20,180+40,0),"Train.502.RCBPS","RCBPS"}, + {Vector(407.5+3,-37,-20),Angle(-20,180+40,0),"Train.502.RCAV3","RCAV3"}, + {Vector(407.5+3,-33,-20),Angle(-20,180-40,0),"Train.502.RCAV4","RCAV4"}, + {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(407.5+75,48,1),Angle(0,190,0),"Train.Common.RouteNumber"}, + {Vector(450+13,0,26),Angle(60,0,0),"Train.Common.CouplerCamera"}, +} + +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.15} + self.SoundPositions["rolling_10"] = {480,1e12,Vector(0,0,0),0.20} + self.SoundPositions["rolling_40"] = {480,1e12,Vector(0,0,0),0.55} + self.SoundPositions["rolling_70"] = {480,1e12,Vector(0,0,0),0.60} + self.SoundPositions["rolling_80"] = {480,1e12,Vector(0,0,0),0.75} + + 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"] = {480,1e12,Vector(0,0,0),0.90} + self.SoundPositions["rolling_medium2"] = {480,1e12,Vector(0,0,0),0.90} + self.SoundPositions["rolling_high2"] = {480,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["rpb_off"] = "subway_trains/717/relays/lsd_2.mp3" + self.SoundNames["rpb_on"] = "subway_trains/717/relays/relay_on.mp3" + self.SoundPositions["rpb_on"] = {100,1e9,Vector(400,25,-35),1} + self.SoundPositions["rpb_off"] = {100,1e9,Vector(400,25,-35),1} + + self.SoundNames["kd_off"] = "subway_trains/717/relays/lsd_2.mp3" + self.SoundNames["kd_on"] = "subway_trains/717/relays/new/kd_on.mp3" + self.SoundPositions["kd_on"] = {100,1e9,Vector(400,25,-35),1} + self.SoundPositions["kd_off"] = {100,1e9,Vector(400,25,-35),1} + + self.SoundNames["avu_off"] = "subway_trains/common/pneumatic/ak11b_off.mp3" + self.SoundNames["avu_on"] = "subway_trains/common/pneumatic/ak11b_on.mp3" + self.SoundPositions["avu_on"] = {60,1e9, Vector(400,-40,-45),0.5} + self.SoundPositions["avu_off"] = {60,1e9, Vector(400,-40,-45),0.5} + --Подвагонка + self.SoundNames["lk2_on"] = "subway_trains/717/pneumo/lk1_on.mp3" + self.SoundNames["lk2_off"] = "subway_trains/717/pneumo/lk2_off.mp3" + self.SoundNames["lk5_on"] = "subway_trains/717/pneumo/lk2_on.mp3" + self.SoundNames["lk5_off"] = "subway_trains/717/pneumo/lk2_off.mp3" + self.SoundNames["lk4_on"] = "subway_trains/717/pneumo/lk3_on.mp3" + self.SoundNames["lk4_off"] = "subway_trains/717/pneumo/lk3_off.mp3" + self.SoundPositions["lk2_on"] = {440,1e9,Vector(-60,-40,-66),0.22} + self.SoundPositions["lk2_off"] = {440,1e9,Vector(-60,-40,-66),0.3} + self.SoundPositions["lk5_on"] = self.SoundPositions["lk2_on"] + self.SoundPositions["lk5_off"] = self.SoundPositions["lk2_off"] + self.SoundPositions["lk4_on"] = self.SoundPositions["lk2_on"] + self.SoundPositions["lk4_off"] = self.SoundPositions["lk2_off"] + + self.SoundNames["compressor"] = {loop=1.79,"subway_trains/717/compressor/compressor_717_start2.wav","subway_trains/717/compressor/compressor_717_loop2.wav", "subway_trains/717/compressor/compressor_717_stop2.wav"} + self.SoundPositions["compressor"] = {485,1e9,Vector(-118,-40,-66),0.80} + 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(458.00,-23,-6.40)} + 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["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["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(449+7.7,56.0,-10.24349),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(120,62.0+0.0,-60),0.5} + self.SoundPositions["gv_b"] = {80,1e2,Vector(120,62.0+0.0,-60),0.5} + + self.SoundNames["disconnect_valve"] = "subway_trains/common/switches/pneumo_disconnect_switch.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(458.00,-23,-6),1} + self.SoundPositions["kv70_fix_off"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv40_0_t1"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv70_t1_0_fix"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv40_t1_0"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv40_t1_t1a"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv40_t1a_t1"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv40_t1a_t2"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv40_t2_t1a"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv40_0_x1"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv40_x1_0"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv40_x1_x2"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv40_x2_x1"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv40_x2_x3"] = {100,1e9,Vector(458.00,-23,-6),1} + self.SoundPositions["kv40_x3_x2"] = {100,1e9,Vector(458.00,-23,-6),1} + + self.SoundNames["rcav_0-2"] = {"subway_trains/ezh3/rc_ars/0-2.mp3"} + self.SoundNames["rcav_2-0"] = {"subway_trains/ezh3/rc_ars/2-0.mp3"} + + self.SoundNames["ring"] = {loop=0.05,"subway_trains/502/ring_ksaup.wav"} + self.SoundPositions["ring"] = {120,1e9,Vector(410,-40,35),0.35} + + self.SoundNames["ring2"] = {"subway_trains/717/ring/ring_start.wav","subway_trains/717/ring/ring_loop.wav","subway_trains/717/ring/ring_end.wav"} + self.SoundPositions["ring2"] = self.SoundPositions["ring"] + + 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"] = {60,1e9,Vector(412,-49 ,61),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(449.118378+7.6,33.493385,-14.713276),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"} + + --Краны + --Краны + 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(452, 0,-63),1} + self.SoundNames["rear_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["rear_isolation"] = {300,1e9,Vector(-456, 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.55,-4.5),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.55,-4.5),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.55,-4.5),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.55,-4.5),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.55,-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.55,-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.55,-4.5),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.55,-4.5),0.2} + + self.SoundNames["valve_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["valve_brake"] = {400,1e9,Vector(464.40,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(456.55,-52.57,-55),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["horn"] = {loop=0.8,"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(450,-20,-55)} + + --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"] + 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.2} + 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.2} + self.SoundNames["announcer_noise3_"..k] = {loop=true,"subway_announcers/upo/noiseS3.wav"} + self.SoundPositions["announcer_noise3_"..k] = {v[2] or 300,1e9,v[1],v[3]*0.2} + self.SoundNames["announcer_noiseW"..k] = {loop=true,"subway_announcers/upo/noiseW.wav"} + self.SoundPositions["announcer_noiseW"..k] = {v[2] or 300,1e9,v[1],v[3]*0.2} + 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_502_Electric") + self.Electric:TriggerInput("Type",self.Electric.NVL) + + -- Токоприёмник + 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_55") + -- Панель резервного ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + self:LoadSystem("PRU_502") + + + -- Ящики Ñ Ñ€ÐµÐ»Ðµ и контакторами + 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("BD2","Relay","") + -- Панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð• + self:LoadSystem("Panel","81_502_Panel") + -- Everything else + self:LoadSystem("Battery") + self:LoadSystem("Horn") + + self:LoadSystem("Announcer","81_71_Announcer", "AnnouncementsUPO") + self:LoadSystem("UPO","81_71_UPO") + + self:LoadSystem("ALSCoil") + self:LoadSystem("KSAUP","81_502_KSAUP") + self:LoadSystem("IPAV") + self:LoadSystem("MARS","81_502_ARS") + self:LoadSystem("BPS","81_502_BPS") + + self:LoadSystem("RouteNumber","81_71_RouteNumber",3) + + --self:LoadSystem("ALS_ARS","ARS_MP") + + --self:LoadSystem("IGLA_CBKI","IGLA_CBKI2") + --self:LoadSystem("IGLA_PCBK") +end + +function ENT:PostInitializeSystems() + self.Electric:TriggerInput("Type",self.Electric.NVL) + if SERVER and (not Metrostroi.MapHasFullSupport or not Metrostroi.MapHasFullSupport("auto")) then + self.KSAUP:TriggerInput("CommandDoorsLeft",1) + self.KSAUP:TriggerInput("CommandDoorsRight",1) + end +end + +ENT.SubwayTrain = { + Type = "E", + Name = "Ema", + Manufacturer = "LVZ", + WagType = 0, + ALS = { + NoEPK = true, + HaveAutostop = true, + TwoToSix = false, + RSAs325Hz = false, + Aproove0As325Hz = true, + }, + IPAV = { + Systems = {"KSAUP"} + }, + EKKType = 703, + NoFrontEKK=true, +} +ENT.NumberRanges = {{6047,6353}} +---[[ +ENT.Spawner = { + model = { + "models/metrostroi_train/81-502/81-502.mdl", + "models/metrostroi_train/81-502/ema_salon.mdl", + "models/metrostroi_train/81-502/mirrors_ema.mdl", + "models/metrostroi_train/81-502/ema502_cabine.mdl", + "models/metrostroi_train/81-502/sun_protectors.mdl", + "models/metrostroi_train/81-502/controller_a.mdl", + "models/metrostroi_train/81-502/panel_b.mdl", + {"models/metrostroi_train/81-508/81-508_underwagon.mdl",pos=Vector(0,1,-18)} + }, + spawnfunc = function(i,tbls,tblt) + local WagNum = tbls.WagNum + if tbls.EWagons and i==1 then + tbls.EID = 2+math.floor(math.random()*(WagNum-2)) + end + if 11 and (tbls.EID==i or math.random()>0.9)) and "gmod_subway_81-703_int" or "gmod_subway_81-501" + else + return "gmod_subway_81-502" + end + end, + interim = "gmod_subway_81-501", + func = function(ent,i,maxi) + if ent:GetClass() == "gmod_subway_81-502" then + ent.VU:TriggerInput("Set",1) + ent.UAVA:TriggerInput("Set",0) + ent.Plombs.VU = nil + ent.Plombs.UAVA = true + else + ent.VU:TriggerInput("Set",0) + ent.UAVA:TriggerInput("Set",1) + ent.Plombs.VU = true + ent.Plombs.UAVA = nil + end + end, + Metrostroi.Skins.GetTable("Texture","Texture",Texture,"train"), + Metrostroi.Skins.GetTable("PassTexture","PassTexture",PassTexture,"pass"), + Metrostroi.Skins.GetTable("CabTexture","CabTexture",CabTexture,"cab"), + {"EMAType","Spawner.502.EMAType","List",{"Spawner.502.EMAType.NVL","Spawner.502.EMAType.KVLOld","Spawner.502.EMAType.KVLNew"},nil,function(ent,val,rot) + if ent:GetClass():find("703") then + -- Cross connections in train wires + ent.TrainWireInverts = { + [15] = true, + } + ent:SetNW2String("Texture","Def_703SPB") + end + if val == 1 then ent.Electric:TriggerInput("Type",ent.Electric.NVL) end + if val > 1 then ent.Electric:TriggerInput("Type",ent.Electric.KVL) end + ent.EMAType = val + ent:SetNW2Int("EMAType",ent.EMAType) + end}, + {"SpawnMode","Spawner.Common.SpawnMode","List",{"Spawner.Common.SpawnMode.Full","Spawner.Common.SpawnMode.Deadlock","Spawner.Common.SpawnMode.NightDeadlock","Spawner.Common.SpawnMode.Depot"}, nil,function(ent,val,rot,i,wagnum,rclk) + if rclk then return end + if ent._SpawnerStarted~=val then + ent.VB:TriggerInput("Set",val<=2 and 1 or 0) + ent.AV:TriggerInput("Set",val<=2 and 1 or 0) + if ent.KSAUP then + local first = i==1 or _LastSpawner~=CurTime() + + ent.VU2:TriggerInput("Set",(val<=2 and first) and 1 or 0) + --ent.VR:TriggerInput("Set",val<=2 and 1 or 0) + ent.R_UPO:TriggerInput("Set",val<=2 and 1 or 0) + ent.VMK:TriggerInput("Set",(val==1 and first) and 1 or 0) + ent.ARS:TriggerInput("Set",(val==1 and ent.Plombs.RCARS) and 1 or 0) + ent.VBA:TriggerInput("Set",(val==1 and ent.Plombs.RCAV3) and 1 or 0) + ent.ALS:TriggerInput("Set",val==1 and 1 or 0) + ent.VKF:TriggerInput("Set",val==3 and 1 or 0) + ent.VSOSD:TriggerInput("Set",(val==1 and first) and 1 or 0) + ent.Headlights:TriggerInput("Set",val==1 and 1 or 0) + _LastSpawner=CurTime() + ent.CabinDoor = val==4 and first + ent.PassengerDoor = val==4 + ent.RearDoor = val==4 + else + ent.VU2:TriggerInput("Set",0) + ent.FrontDoor = val==4 + ent.RearDoor = val==4 + end + ent.GV:TriggerInput("Set",val<4 and 1 or 0) + ent._SpawnerStarted = val + end + if val==1 then ent.KO:TriggerInput("Close",1) else ent.KO:TriggerInput("Open",1) end + ent.Pneumatic.TrainLinePressure = val==3 and math.random()*4 or val==2 and 4.5+math.random()*3 or 7.6+math.random()*0.6 + if val==4 then ent.Pneumatic.BrakeLinePressure = 5.2 end + end}, + {"EWagons","Spawner.502.EWagons","Boolean"}, +} +--]] \ No newline at end of file diff --git a/lua/entities/gmod_subway_81-702/cl_init.lua b/lua/entities/gmod_subway_81-702/cl_init.lua new file mode 100644 index 0000000..00430b4 --- /dev/null +++ b/lua/entities/gmod_subway_81-702/cl_init.lua @@ -0,0 +1,1669 @@ +-------------------------------------------------------------------------------- +-- 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.ButtonMap["PanelLamp"] = { + pos = Vector(456,-53,30), + ang = Angle(186,-37,6), + 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["MainL"] = { + pos = Vector(460.4,-37.98,-11.15), + ang = Angle(0.5,-98,70), + width = 83.5, + height = 20, + scale = 0.0588, + hideseat=0.2, + + buttons = { + ----Лампы + {ID = "!RedRP", x=10,y=10, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-703/cabin_lamp_red3.mdl",z=1,color = Color(178,112,112), var="RRP", getfunc = function(ent,min,max) return ent:GetPackedRatio("RRP") end}, + sprite = {bright=0.1,size=0.25,scale=0.07,color=Color(255,60,60),z=3,} + }}, + {ID = "!GreenRP", x=40.71,y=10, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-703/cabin_lamp_green.mdl",z=1,color = Color(98,178,178), var="GRP"}, + sprite = {bright=0.1,size=0.25,scale=0.07,color=Color(40,255,100),z=3,} + }}, + {ID = "!Blue", x=73.50,y=10, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-703/cabin_lamp_white.mdl",z=1,color = Color(112,140,178), var="SD",}, + sprite = {bright=0.1,size=0.25,scale=0.07,color=Color(60,200,255),z=3,} + }}, + } +} +ENT.ButtonMap["MainB"] = { + pos = Vector(460.8,-34.9,-15.3), + ang = Angle(0,-96,65), + width = 218, + height = 90, + scale = 0.0588, + hideseat=0.2, + + buttons = { + ----Кнопки + { ID = "KU7Toggle", x=0+56*0,y=0,w=50,h=90, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/vu_13b.mdl", ang=Angle(-90,0,0), + labels={{model="models/metrostroi_train/81-702/labels/vu_labels.mdl",skin=3,ang=90,z=10,x=0,y=-13.5}}, + var="KU7",speed=6, + sndvol = 1, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Unlocked","Train.Buttons.Locked"}, + }}, + + { ID = "KU6Set", x=0+56*1, y=0, w=50,h=90, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/vu_13b.mdl", ang=Angle(-90,0,0), + labels={{model="models/metrostroi_train/81-702/labels/vu_labels.mdl",skin=4,ang=90,z=10,x=0,y=-13.5}}, + var="KU6",speed=6, + sndvol = 1, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + { ID = "VRPSet", x=0+56*2, y=0, w=50,h=90, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/vu_13b.mdl", ang=Angle(-90,0,0), + labels={{model="models/metrostroi_train/81-702/labels/vu_labels.mdl",skin=5,ang=90,z=10,x=0,y=-13.5}}, + var="VRP",speed=6, + sndvol = 1, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + { ID = "KU3Toggle", x=0+56*3,y=0,w=50,h=90, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/vu_13b.mdl", ang=Angle(-90,0,0), + labels={{model="models/metrostroi_train/81-702/labels/vu_labels.mdl",skin=6,ang=90,z=10,x=0,y=-13.5}}, + var="KU3",speed=6, + sndvol = 1, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} +ENT.ButtonMap["MainP"] = { + pos = Vector(459.4,-43,-22.4), + ang = Angle(0,-96,65), + width = 50, + height = 90, + scale = 0.0588, + hideseat=0.2, + + buttons = { + ----Кнопки + { ID = "VZSet", x=0+56*0,y=0,w=50,h=90, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/vu_13b.mdl", ang=Angle(-90,0,0), + var="VZ",speed=6, + sndvol = 1, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} + +--VU Panel +ENT.ButtonMap["VU"] = { + pos = Vector(462,-17.1,22.5), + ang = Angle(0,270,90), + width = 103, + height = 390, + scale = 0.0625, + hideseat=0.2, + + buttons = { + { ID = "VUToggle", x=0, y=0, w=88, h=80, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.mdl", z=0, 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="VU",speed=6, + sndvol = 0.5, snd = function(val) return val and "vu220b1_on" or "vu220b1_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + { ID = "KU1Set", x=33, y=120+90*0,w=70,h=90, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/vu_13b.mdl", z=8, ang=Angle(-90,0,0), + labels={{model="models/metrostroi_train/81-702/labels/vu_labels.mdl",skin=0,ang=90,z=10,x=0,y=-13.5}}, + var="KU1",speed=6, + sndvol = 1, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + { ID = "KU2Set", x=33, y=120+90*1,w=70,h=90, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/vu_13b.mdl", z=8, ang=Angle(-90,0,0), + labels={{model="models/metrostroi_train/81-702/labels/vu_labels.mdl",skin=1,ang=90,z=10,x=0,y=-13.5}}, + var="KU2",speed=6, + sndvol = 1, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + { ID = "SNSet", x=33, y=120+90*2,w=70,h=90, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/vu_13b.mdl", z=8, ang=Angle(-90,0,0), + labels={{model="models/metrostroi_train/81-702/labels/vu_labels.mdl",skin=2,ang=90,z=10,x=0,y=-13.5}}, + var="SN",speed=6, + sndvol = 1, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} +--VU Panel +ENT.ButtonMap["KU5"] = { + pos = Vector(461.2,-17.8,-2), + ang = Angle(0,270,90), + width = 140, + height = 80, + scale = 0.0625, + hideseat=0.2, + + buttons = { + { ID = "KU5Set", x=0, y=0, w=140,h=80, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/emer_doors.mdl", z=0, ang=Angle(-90,0,0), + var="KU5",speed=12, + sndvol = 0.1, snd = function(val) return val and "vu220b1_on" or "vu220b1_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} + +ENT.ButtonMap["Stopkran"] = { + pos = Vector(464,27,10), + ang = Angle(0,-90,90), + width = 200, + height = 1300, + scale = 0.1/2, + buttons = { + {ID = "EmergencyBrakeValveToggle",x=0, y=0, w=200, h=1300, tooltip="", tooltip="",tooltip="",states={"Train.Buttons.Closed","Train.Buttons.Opened"},var="EmergencyBrakeValve"}, + } +} + +ENT.ButtonMap["AVMain"] = { + pos = Vector(409,-38.5,31.5), + ang = Angle(0,90,90), + width = 335, + height = 380, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "AVToggle", x=0, y=0, w=300, h=380, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_av8r.mdl", z=80, ang = Angle(90,0,0), + var="AV",speed=0.85, vmin=0.73,vmax=0.80, + sndvol = 1, snd = function(val) return val and "av1a_on" or "av1a_off" end, + }}, + } +} + +---AV1 Panel +ENT.ButtonMap["AV1"] = { + pos = Vector(409.63,41,34.3), + ang = Angle(0,90,90), + width = 320, + height = 500, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "VU3Toggle", x=220, y=294, w=100, h=140, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.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 "vu220b1_on" or "vu220b1_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + {ID = "VU2Toggle", x=20, y=0, w=100, h=140, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.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 "vu220b1_on" or "vu220b1_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + {ID = "VU1Toggle", x=120, y=110, w=100, h=140, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.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 "vu220b1_on" or "vu220b1_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} + +ENT.ClientProps["tab"] = { + model = "models/metrostroi_train/Equipment/tab.mdl", + pos = Vector(23.8,0,-3), + ang = Angle(0,0,0), + skin = 5, + hide = 2, +} +-- Battery panel +ENT.ButtonMap["Battery"] = { + pos = Vector(410.1,16.5,34.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/81-702/buttons/vb_1.mdl", color=Color(255,255,255), z=18, ang = Angle(-90,180,0), + var="VB",speed=6,vmin=1,vmax=0, + sndvol = 0.8, snd = function(val) return val and "vb1a_on" or "vb1a_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + --[[ {ID = "R_RadioToggle", x=130, y=314, w=100, h=140, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_black.mdl", color=Color(150,150,150), z=15, ang = 180, + var="R_Radio",speed=6, + sndvol = 0.8, snd = function(val) return val and "vu220b1_on" or "vu220b1_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(0,0,0), + }},--]] + } +} + + + + +ENT.ButtonMap["KU9"] = { + pos = Vector(410.1,33.9,23.5), + ang = Angle(0,90,90), + width = 50, + height = 70, + scale = 0.0625, + hide = 0.8, + + buttons = { + {ID = "KU9Set", x=0, y=0, w=50, h=70, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/ku122.mdl", z=5, ang = Angle(-90,180,0), + var="KU9",speed=12,vmin=0,vmax=1, + sndvol = 0.1, snd = function(val) return val and "prk1" or "button1_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} +-- Parking brake panel +ENT.ButtonMap["ParkingBrake"] = { + pos = Vector(455,47.8,-2.0), + ang = Angle(0,-83,90), + width = 340, + height = 400, + scale = 0.0625, + + buttons = { + {ID = "ParkingBrakeLeft",x=0, y=0, w=170, h=400, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.ParkingBrake"),ent:GetPackedRatio("ManualBrake")*100) end}, + {ID = "ParkingBrakeRight",x=170, y=0, w=170, 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(449.45,59.99,24.64), + ang = Angle(0,0,90), + width = 60, + height = 400, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "KU10Set",x=0, y=0, w=60,h=100, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/vu_13b.mdl", z=-3, ang=Angle(-90,0,0), + labels={{model="models/metrostroi_train/81-707/labels/vu_labels.mdl",skin=9,ang=90,z=10,x=0,y=-13.5}}, + var="KU10",speed=6, + sndvol = 1, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "KU8Toggle",x=0, y=100, w=60,h=100, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/vu_13b.mdl", z=-3, ang=Angle(-90,0,0), + labels={{model="models/metrostroi_train/81-707/labels/vu_labels.mdl",skin=10,ang=90,z=10,x=0,y=-13.5}}, + var="KU8",speed=6, + sndvol = 1, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Unlocked","Train.Buttons.Locked"}, + }}, + {ID = "R_Program1Set",x=0, y=200,w=60,h=100, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/vu_13b.mdl", z=-3, ang=Angle(-90,0,0), + labels={{model="models/metrostroi_train/81-702/labels/vu_labels.mdl",skin=7,ang=90,z=10,x=0,y=-13.5}}, + var="R_Program1",speed=6, + sndvol = 1, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "R_Program2Set",x=0, y=300,w=60,h=100, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/vu_13b.mdl", z=-3, ang=Angle(-90,0,0), + labels={{model="models/metrostroi_train/81-702/labels/vu_labels.mdl",skin=8,ang=90,z=10,x=0,y=-13.5}}, + var="R_Program2",speed=6, + sndvol = 1, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} + + +ENT.ButtonMap["HVMeters"] = { + pos = Vector(454.1,-55.7,23.4), + ang = Angle(0,-145,90), + width = 55, + height = 55, + scale = 0.0625, + + buttons = { + {ID = "!EnginesVoltage", x=0, y=0, w=55, h=55, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesVoltage"),ent:GetPackedRatio("EnginesVoltage")*1000) end}, + } +} +ENT.ButtonMap["Speedometer"] = { + pos = Vector(456.2,-53.6,18.5), + ang = Angle(0,-148,89), + width = 135, + height = 135, + scale = 0.0625, + + buttons = { + {ID = "!Speedometer", x=0, y=0, w=135, h=135, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.Speed"),ent:GetPackedRatio("Speed")*100) end}, + } +} +ENT.ButtonMap["BLTLPressure"] = { + pos = Vector(456.5,-55,8.8), + ang = Angle(0,-138,90), + width = 120, + height = 120, + scale = 0.0625, + + buttons = { + {ID = "!BLTLPressure", x=60,y=60,radius=60,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(454.3,-55.5,0.7), + ang = Angle(0,-143,90), + + width = 68, + height = 68, + scale = 0.0625, + + buttons = { + {ID = "!BCPressure", x=34,y=34,radius=34,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BCPressure"),ent:GetPackedRatio("BCPressure")*6) end}, + } +} +ENT.ButtonMap["BatteryVoltage"] = { + pos = Vector(410.1,22.5,15.5), + ang = Angle(0,90,90), + width = 60, + height = 60, + scale = 0.0625, + + buttons = { + {ID = "!BatteryVoltage", x=0,y=0,w=60,h=60,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BatteryVoltage"),ent:GetPackedRatio("BatteryVoltage")*100) end}, + } +} + +ENT.ButtonMap["DriverValveBLDisconnect"] = { + pos = Vector(449,-54,-37.61), + ang = Angle(-90,-10,0), + width = 200, + height = 90, + scale = 0.0625, + + buttons = { + {ID = "DriverValveBLDisconnectToggle", x=0, y=0, w=200, h=90, tooltip="", model = { + var="DriverValveBLDisconnect",sndid="brake_disconnect", + sndvol = 1, snd = function(val) return "disconnect_valve" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} +ENT.ButtonMap["DriverValveTLDisconnect"] = { + pos = Vector(452,-50,-30), + 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 = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} +--[[ +ENT.ButtonMap["Meters"] = { + pos = Vector(454.95213,-55.696617,27.528275), + ang = Angle(0,-180+38,90), + width = 73, + height = 73, + scale = 0.0625, + + buttons = { + {ID = "!TotalVoltmeter", x=13, y=22, w=60, h=50, tooltip=""}, + --{ID = "!TotalAmpermeter", x=13, y=81, w=60, h=50, tooltip=""}, + } +} +ENT.ButtonMap["Speedometer"] = { + pos = Vector(455,-55.25582,17.324441), + ang = Angle(0,-149,90), + width = 110, + height = 110, + scale = 0.0625, + + buttons = { + {ID = "!Speedometer", x=0, y=0, w=110, h=110, tooltip=""}, + } +}--]] + +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, -29, -68), + ang = Angle(0,-90,0), + hide = 0.5, +} +ENT.ClientProps["FrontTrain"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_blue.mdl", + pos = Vector(450+19, 30, -68), + ang = Angle(0,-90,0), + hide = 0.5, +} +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-1,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-22, -30, -68), + ang = Angle(0,90,0), + hide = 0.5, +} +ENT.ClientProps["RearBrake"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_red.mdl", + pos = Vector(-450-22, 29, -68), + ang = Angle(0,90,0), + hide = 0.5, +} +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,50,-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,36,-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"}}, + } +} + +-- UAVA +ENT.ButtonMap["UAVAPanel"] = { + pos = Vector(453,60,-7), + ang = Angle(0,-70,90), + width = 180, + height = 170, + scale = 0.0625, + + buttons = { + {ID = "UAVAToggle",x=0, y=0, w=60, h=170, tooltip="", model = { + plomb = {var="UAVAPl", ID="UAVAPl"}, + var="UAVA", + sndid="UAVALever",sndvol = 1, snd = function(val) return val and "uava_on" or "uava_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "UAVACToggle",x=60, y=0, w=120, h=170, tooltip="",var="UAVAC",states={"Train.Buttons.UAVAOff","Train.Buttons.UAVAOn"}}, + } +} + +for i=0,3 do + ENT.ClientProps["TrainNumberL"..i] = { + model = "models/metrostroi_train/common/bort_numbers.mdl", + pos = Vector(400+i*6.6-4*6.6/2,67.5,-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(-405-i*6.6-4*6.6/2,-67.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,16,37), + ang = Angle(0,-90,90), + width = 650, + height = 1780, + scale = 0.1/2, + buttons = { + {ID = "FrontDoor",x=0,y=0,w=650,h=1780, 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(415,64,37), + ang = Angle(0,0,90), + width = 642, + height = 1780, + scale = 0.1/2, + buttons = { + {ID = "CabinDoor",x=0,y=0,w=642,h=1780, 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(400+7.6,-16,37), + ang = Angle(0,90,90), + width = 642, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=642,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(400+7,16,37), + ang = Angle(0,-90,90), + width = 642, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=642,h=1900, tooltip=""}, + } +} + +ENT.ButtonMap["RearDoor"] = { + pos = Vector(-472,-16,37), + ang = Angle(0,90,90), + width = 650, + height = 1780, + scale = 0.1/2, + buttons = { + {ID = "RearDoor",x=0,y=0,w=650,h=1780, 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(453.21,-54.92,-8.50), + ang = Angle(0.000000,-133.000000,0.000000), + hideseat = 0.2, +} +ENT.ClientProps["controller"] = { + model = "models/metrostroi_train/81-702/kv_d.mdl", + pos = Vector(453.81,-20.61,-9.47), + ang = Angle(0,195.000000,0), + hideseat = 0.2, +} + +ENT.ClientProps["reverser"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = Vector(453.8,-21,-15), + 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 = Vector(411.9+0.3,-26.15,-11.3), + ang = Angle(90+45,0,-90), + 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(447.2,-58.5,-32.05), + ang = Angle(0,88,-90), + hideseat = 0.2, +} +ENT.ClientProps["train_disconnect"] = { + model = "models/metrostroi_train/81-707/cran3.mdl", + pos = Vector(450.4,-54.35,-26.25), + ang = Angle(90,-100,90), + hideseat = 0.2, +} + +ENT.ClientProps["parking_brake"] = { + model = "models/metrostroi_train/81-703/cabin_parking.mdl", + pos = Vector(456.591827,37.367580,-16.614565), + ang = Angle(-90.000000,8.000000,0.000000), + hideseat = 0.2, +} + + +-------------------------------------------------------------------------------- +ENT.ClientProps["train_line"] = { + model = "models/metrostroi_train/Equipment/arrow_e_nm.mdl", + pos = Vector(453.808746,-57.777153,3.555025), + ang = Angle(170.000000,-143.000000,90.000000), + hideseat = 0.2, +} + +ENT.ClientProps["brake_line"] = { + model = "models/metrostroi_train/Equipment/arrow_e_tm.mdl", + pos = Vector(453.851135,-57.825100,3.558732), + ang = Angle(170.000000,-143.000000,90.000000), + hideseat = 0.2, +} + +ENT.ClientProps["brake_cylinder"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(452.788696,-57.193684,-1.326352), + ang = Angle(-124.500000,37.000000,-90.000000), + hideseat = 0.2, +} +---------------------------------------------------------------- +ENT.ClientProps["voltmeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(452.729889,-56.791126,21.017803), + ang = Angle(-90.000000,0.000000,-55.130001), + hideseat = 0.2, +} + +--[[ +ENT.ClientProps["ampermeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(450.284607-1.0,-56.987834,30.5+1.0), + ang = Angle(-90,0,-60) +} +]] +ENT.ClientProps["volt1"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(410.788452,24.423306,12.815310), + ang = Angle(-90.000000,89.500000,90.000000), + hideseat = 0.2, +} + +ENT.ClientProps["speed1"] = { + model = "models/metrostroi_train/Equipment/arrow_voltmeter_old.mdl", + pos = Vector(450.787781,-57.760075,11.812588), + ang = Angle(-90,-16.708426,-39.648327), + hideseat = 0.2, +} +-------------------------------------------------------------------------------- + +ENT.ClientProps["salon"] = { + model = "models/metrostroi_train/81-702/81-702_salon.mdl", + pos = Vector(0.0,0,0), + ang = Angle(0,0,0), + hide = 2.0, +} + +ENT.ClientProps["trafaret"] = { + model = "models/metrostroi_train/81-702/marshrut/trafaret.mdl", + pos = Vector(0.0,0,0), + ang = Angle(0,0,0), + nohide=true, + callback = function(ent) + ent.LastStation.Reloaded = false + end, +} +ENT.ButtonMap["LastStation"] = { + pos = Vector(459.9+8,-20,51), + ang = Angle(0,90,90), + width = 644, + height = 150, + scale = 0.0625, + buttons = { + {ID = "LastStation-",x=000,y=0,w=322,h=150, tooltip=""}, + {ID = "LastStation+",x=322,y=0,w=322,h=150, tooltip=""}, + } +} + +ENT.ClientProps["trafaret_l"] = { + model = "models/metrostroi_train/81-702/marshrut/trafaret_lights.mdl", + pos = Vector(0.0,0,0), + ang = Angle(0,0,0), + nohide=true, +} + +ENT.ClientProps["trafaret_2"] = { + model = "models/metrostroi_train/81-702/marshrut/farlight.mdl", + pos = Vector(0.0,0,0), + ang = Angle(0,0,0), + hide=2, +} + +ENT.ClientProps["E_informator"] = { + model = "models/metrostroi_train/equipment/rri_informator_portable.mdl", + pos = Vector(404.7+6.6,-25.5,2), + ang = Angle(0,0,0), + hideseat=0.2, +} +ENT.ButtonMap["RRI"] = { + pos = ENT.ClientProps["E_informator"].pos+Vector(-0.65,-0.5,5), + ang = Angle(0,90,0), + width = 60, + height = 25, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "RRIEnableToggle",x=10,y=12.5,radius=10,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=-4, + var="RRIEnable",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "!RRIRewind",x=30,y=12.5,radius=0,model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_b_a.mdl",ang = 180,z=-3, + getfunc = function(ent) return ent:GetPackedRatio("RRIRewind") end, + var="RRIRewind",speed=8, + sndvol = 0.5,snd = function(_,val) return val==2 and "triple_0-up" or val==0 and "triple_0-down" or "triple_up-0" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "RRIRewindSet2",x=30-5,y=12.5-10,w=10,h=10,tooltip=""}, + {ID = "RRIRewindSet0",x=30-5,y=12.5,w=10,h=10,tooltip=""}, + + {ID = "RRIAmplifierToggle",x=50,y=12.5,radius=10,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=-4, + var="RRIAmplifier",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "!RRIOn",x=70,y=12.5,radius=10,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",z = -13, + lamp = { model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=62,x=-0.3,y=-0.3,z=20.6, var="RRIOn", color=Color(210,170,255), getfunc=function(ent,min,max,var) return ent:GetPackedBool(var) and (1-(ent.AnnLamp or 0)^1.5*0.6) or 0 end, }, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(210,170,255)}, + }}, + } +} +ENT.ButtonMap["RRIScreen"] = { + pos = ENT.ClientProps["E_informator"].pos+Vector(2,-2.9,5), + ang = Angle(0,90,90), + width = 121, + height = 103, + scale = 0.07, + hideseat=0.2, + hide=true, + + buttons = { + {ID = "RRIUp",x=30,y=60,radius=10,tooltip=""}, + {ID = "RRIDown",x=30,y=80,radius=10,tooltip=""}, + {ID = "RRILeft",x=20,y=70,radius=10,tooltip=""}, + {ID = "RRIRight",x=40,y=70,radius=10,tooltip=""}, + } +} + + + +ENT.ClientProps["sunprotectors"] = { + model = "models/metrostroi_train/81-502/sun_protectors.mdl", + pos = Vector(-2.5,-2,0), + ang = Angle(0,0,0), + hide = 2, +} + +---G Type only preview +---Delete later +ENT.ClientProps["Gglass"] = { + model = "models/metrostroi_train/81-701/glass.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2, +} + +ENT.ClientProps["GBluelamp"] = { + model = "models/metrostroi_train/81-701/blue_lamp.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2, +} + +ENT.ClientProps["GBluelamp2"] = { + model = "models/metrostroi_train/81-701/green_lamp.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2, +} + +ENT.ClientProps["GBluelamp3"] = { + model = "models/metrostroi_train/81-701/red_lamp.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2, +} +---Delete here + +ENT.ClientProps["mirrors"] = { + model = "models/metrostroi_train/81-702/mirrors_d.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2, +} + +--[[ENT.ClientProps["salon2"] = { + model = "models/metrostroi_train/81-702/81-702_cabine.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2, +}]] + +ENT.ClientProps["salon2"] = { + model = "models/metrostroi_train/81-701/81-701_salon.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2, +} + +ENT.ClientProps["Lamps_pult"] = { + model = "models/metrostroi_train/equipment/lamp_gauges_d.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=2, +} +ENT.ClientProps["Lamps_emer1"] = { + model = "models/metrostroi_train/81-702/light_emer2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + --color=Color(255,150,150), + hide = 1.5, +} + +ENT.ClientProps["Lamps_emer2"] = { + model = "models/metrostroi_train/81-702/light_emer.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + --color=Color(255,150,150), + hide = 1.5, +} +ENT.ClientProps["Lamps_cab1"] = { + model = "models/metrostroi_train/81-702/light_cabine.mdl", + pos = Vector(411.975,0,42.535), + ang = Angle(0,0,0), + hide = 0.8, +} + +ENT.ClientProps["Lamps_half1"] = { + model = "models/metrostroi_train/81-702/light_group1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 1.5, +} +ENT.ClientProps["Lamps_half2"] = { + model = "models/metrostroi_train/81-702/light_group2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 1.5, +} + +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 + +addTW10Cosume("MainL") + +-------------------------------------------------------------------------------- +-- Add doors +--[[ local function GetDoorPosition(i,k,j) + if j == 0 + then return Vector(349.45 - 1*k - 232.202*i,-64.6*(1-2*k),-8.728) + else return Vector(349.45 - 1*(1-k) - 232.202*i,-64.6*(1-2*k),-8.728) + end +end +for i=0,3 do + for k=0,1 do + ENT.ClientProps["door"..i.."x"..k.."a"] = { + model = "models/metrostroi_train/81-702/81-702_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-702/81-702_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-702/81-702_doors_pos1.mdl", + pos = Vector(349.5,64.8,-8.85), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door1x1"] = { + model = "models/metrostroi_train/81-702/81-702_doors_pos2.mdl", + pos = Vector(117.12,64.8,-8.85), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door2x1"] = { + model = "models/metrostroi_train/81-702/81-702_doors_pos3.mdl", + pos = Vector(-115.12,64.8,-8.85), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door3x1"] = { + model = "models/metrostroi_train/81-702/81-702_doors_pos4.mdl", + pos = Vector(-347.698,64.8,-8.85), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door0x0"] = { + model = "models/metrostroi_train/81-702/81-702_doors_pos4.mdl", + pos = Vector(349.5,-64.8,-8.85), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door1x0"] = { + model = "models/metrostroi_train/81-702/81-702_doors_pos3.mdl", + pos = Vector(117.12,-64.8,-8.85), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door2x0"] = { + model = "models/metrostroi_train/81-702/81-702_doors_pos2.mdl", + pos = Vector(-115.12,-64.8,-8.85), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door3x0"] = { + model = "models/metrostroi_train/81-702/81-702_doors_pos1.mdl", + pos = Vector(-347.698,-64.8,-8.85), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door1"] = { + model = "models/metrostroi_train/81-702/81-702_door_torec.mdl", + pos = Vector(466.422,-16.306,-9.987), + ang = Angle(0,-90,0), + hide = 2, +} +ENT.ClientProps["door2"] = { + model = "models/metrostroi_train/81-702/81-702_door_torec.mdl", + pos = Vector(-471.062,16.047,-9.987), + ang = Angle(0,90,0), + hide = 2, +} +ENT.ClientProps["door3"] = { + model = "models/metrostroi_train/81-702/81-702_door_salon.mdl", + pos = Vector(409.613,-15.765,-10.239), + ang = Angle(0,-90,0), + hide = 2, +} +ENT.ClientProps["door4"] = { + model = "models/metrostroi_train/81-702/81-702_door_cab.mdl", + pos = Vector(416.706,63.461,-8.38), + ang = Angle(0,-90,0), + hide = 2, +} + +ENT.ClientProps["UAVALever"] = { + model = "models/metrostroi_train/81-703/cabin_uava.mdl", + pos = Vector(456.04598,60.4,-13), + ang = Angle(0,-90+10,0), + hideseat = 0.8, +} + +ENT.ClientProps["EmergencyBrakeValve"] = { + model = "models/metrostroi_train/81-710/ezh3_stopkran.mdl", + pos = Vector(463.8,20.7,3.6), + ang = Angle(0,180,0), + hide = 0.8, +} + + +ENT.ClientProps["RedLights"] = { + model = "models/metrostroi_train/81-702/81-702_red_light.mdl", + pos = Vector(470.484039,0.115477,46.430264), + ang = Angle(0,0,0), + nohide=true +} + +ENT.ClientProps["WhiteLights"] = { + model = "models/metrostroi_train/81-702/81-702_front_light.mdl", + pos = Vector(470,0.5,-42), + ang = Angle(0,0,0), + nohide=true +} + +ENT.ButtonMap["Route"] = { + pos = Vector(465.7,35.3,0), + ang = Angle(0,98,90), + width = 153, + height = 130, + scale = 0.0625, + buttons = { + {ID = "RouteNumber1+",x=76.5*0,y=0, w=76.5,h=65, tooltip=""}, + {ID = "RouteNumber2+",x=76.5*1,y=0, w=76.5,h=65, tooltip=""}, + {ID = "RouteNumber1-",x=76.5*0,y=65,w=76.5,h=65, tooltip=""}, + {ID = "RouteNumber2-",x=76.5*1,y=65,w=76.5,h=65, tooltip=""}, + } +} +ENT.ClientProps["route"] = { + model = "models/metrostroi_train/common/routes/ezh/route_holder.mdl", + pos = Vector(0,0,-2), + ang = Angle(0,0,0), + hide = 2, +} +ENT.ClientProps["route1"] = { + model = "models/metrostroi_train/common/routes/ezh/route_number1.mdl", + pos = Vector(0,0,-2), + ang = Angle(0,0,0), + hide = 2, + callback = function(ent) + ent.RouteNumber.Reloaded = false + end, +} +ENT.ClientProps["route2"] = { + model = "models/metrostroi_train/common/routes/ezh/route_number2.mdl", + pos = Vector(0,0,-2), + ang = Angle(0,0,0), + hide = 2, + callback = function(ent) + ent.RouteNumber.Reloaded = false + end, +} +ENT.Lights = { + [1] = { "headlight", Vector(475,0,-20), Angle(0,0,0), Color(188,130,88), brightness = 5 ,fov = 90, texture = "models/metrostroi_train/equipment/headlight",shadows = 1,headlight=true}, + [2] = { "headlight", Vector(465,0,45), Angle(-20,0,0), Color(255,0,0), fov=164 ,brightness = 0.3, farz=250,texture = "models/metrostroi_train/equipment/headlight2",shadows = 0,backlight=true}, + [21] = { "headlight", Vector(450,-55.0,32.2), Angle(45,0,0), Color(255,130,88), fov=125, farz=65,brightness = 1,shadows = 1, texture = "models/metrostroi_train/equipment/headlight", hidden = "Lamps_pult"}, + [22] = { "headlight", Vector(450,-40.5,40.2), Angle(90,0,0), Color(255,130,88), fov=125,farz=80,brightness = 2,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 = 2, distance = 200}, + [10] = { "dynamiclight", Vector(-150, 0, -5), Angle(0,0,0), Color(255, 176, 59), brightness = 2, 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}, + + [23] = { "dynamiclight", Vector(425,0,35), Angle(0,0,0), Color(252, 157, 77), brightness = 0.0005, distance = 600, hidden = "salon2"}, + -- Interior + [5] = { "light",Vector(465+5,-32, 46), Angle(0,0,0), Color(255,50,50), brightness = 0.2, scale = 1.5, texture = "sprites/light_glow02", size = 2 }, + [6] = { "light",Vector(465+5, 32, 46), Angle(0,0,0), Color(255,50,50), brightness = 0.2, scale = 1.5, texture = "sprites/light_glow02", size = 2 }, + [30] = { "light", Vector(465+5 , -47, -41), 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 , 47, -41), 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, 46), Angle(0,0,0), Color(255,220,180), brightness = 0.2, scale = 2, texture = "sprites/light_glow02", size = 2 }, + + Lamps_pult = {"light", Vector(450,-55,31), 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(412,0,42.5), 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.RRIScreen = self:CreateRT("717RRI",128,128) + --self.Train:SetPackedRatio("EmergencyValve_dPdT", leak) + --self.Train:SetPackedRatio("EmergencyValveEPK_dPdT", leak) + --self.Train:SetPackedRatio("EmergencyBrakeValve_dPdT", leak) + + self.FrontLeak = 0 + self.RearLeak = 0 + + self.CraneRamp = 0 + self.ReleasedPdT = 0 + self.EmergencyValveRamp = 0 + self.EmergencyValveEPKRamp = 0 + self.EmergencyBrakeValveRamp = 0 +end +function ENT:UpdateWagonNumber() + local count = math.max(3,math.ceil(math.log10(self.WagonNumber+1))) + for i=0,3 do + self:ShowHide("TrainNumberL"..i,i 0,cab1S) + self:SetLightPower("Lamps_cab", cab1S > 0,cab1S) + if not half1 then + self:SetLightPower(9,emer1S > 0,emer1S*0.2+emer2S*0.8) + self:SetLightPower(10,emer2S > 0,emer2S) + self:SetLightPower(11, false) + self:SetLightPower(12, false) + self:SetLightPower(13, false) + else + self:SetLightPower(9,false) + self:SetLightPower(10,false) + self:SetLightPower(11, half1S > 0, half1S*0.3+half2S*0.7) + self:SetLightPower(12, half1S > 0, half1S*0.3+half2S*0.7) + self:SetLightPower(13, half1S > 0, half1S*0.3+half2S*0.7) + end + + self:Animate("UAVALever", self:GetPackedBool("UAVA") and 1 or 0, 0,0.6, 128, 3,false) + self:Animate("EmergencyBrakeValve", self:GetPackedBool("EmergencyBrakeValve") and 1 or 0, 0.5,0, 64, 3,false) + + self:Animate("brake_disconnect",self:GetPackedBool("DriverValveBLDisconnect") and 0 or 1,0.25,0.5, 4,false) + self:Animate("train_disconnect",self:GetPackedBool("DriverValveTLDisconnect") and 1 or 0,0.25,0, 4,false) + + 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) + local RL = self:Animate("redlights",self:GetPackedBool("RedLight") and 1 or 0,0,1,5,false) + + self:ShowHideSmooth("WhiteLights",HL1) + self:ShowHideSmooth("DistantLights",HL2) + self:ShowHideSmooth("trafaret_l",HL2) + self:SetLightPower(30,HL1 > 0,HL1) + self:SetLightPower(31,HL1 > 0,HL1) + self:SetLightPower(32,HL2 > 0,HL2) + self:ShowHideSmooth("RedLights",RL) + self:SetLightPower(5,RL > 0, RL) + self:SetLightPower(6,RL > 0, RL) + + local PL = HL1*self:Animate("lamps_pult",self:GetPackedBool("PanelLights") and 1 or 0,0,1,12,false) + self:ShowHideSmooth("Lamps_pult",PL) + self:SetLightPower("Lamps_pult",PL>0,PL) + self:SetLightPower(21,PL>0,PL) + self:SetLightPower(22,PL>0,PL) + + local bright = HL1*0.3+HL2*0.7 + self:SetLightPower(1,bright>0,bright) + self:SetLightPower(2,RL>0,RL) + + 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 + + + self:HidePanel("RRIScreen",self.CurrentCamera~=6) + + -- Simulate pressure gauges getting stuck a little + self:Animate("brake",1-self:GetPackedRatio("CranePosition"),0.00, 0.48, 256,24) + self:Animate("controller",controller[self:GetNW2Int("ControllerPosition",0)+1],0.148, 0.333, 2,false) + self:Animate("reverser",self:GetPackedRatio("ReverserPosition"),0.6, 0.4, 4,false) + self:Animate("volt1",self:GetPackedRatio("BatteryVoltage"),0.62,0.495,45,3) + self:Animate("rcureverser",self:GetPackedBool("RCUPosition") and 1 or 0,0,0.5,3,false) + self:ShowHide("reverser",self:GetNW2Int("WrenchMode",0)==1) + self:ShowHide("rcureverser",self:GetNW2Int("WrenchMode",0)==3) + + self:Animate("brake_line",self:GetPackedRatio("BLPressure"),0.625, 0.839, 256,2)--,,0.01) + self:Animate("train_line",self:GetPackedRatio("TLPressure"),0.625, 0.839, 256,2)--,,0.01) + self:Animate("brake_cylinder",self:GetPackedRatio("BCPressure"),0.04, 0.808, 256,2)--,,0.03) + self:Animate("voltmeter",self:GetPackedRatio("EnginesVoltage"),0.64,0.355,92,2) + self:Animate("ampermeter",self:GetPackedRatio("EnginesCurrent"),0.617,0.383, nil, nil, 92,20,3) + + local wheel_radius = 0.5*44.1 -- units + local speed = self:GetPackedRatio("Speed")*100 + local ang_vel = speed/(2*math.pi*wheel_radius+math.random(0,40)) + + --self:Animate("speed1", self:GetPackedRatio("Speed") > 0.5 and self:GetPackedRatio("Speed")-(self:GetPackedRatio("Speed")/10*(self:GetPackedRatio("Speed")-0.4)) or self:GetPackedRatio("Speed"), 0.76, 0.9725, nil, nil, 256,2,0.01) + + local speed1 = math.min(1,self:GetPackedRatio("Speed")) + -- Rotate wheel + self:Animate("speed1", speed1 > 0.41 and speed1-(speed1/12*(speed1-(speed1 > 0.95 and 0.634 or 0.3))) or speed1, 0.269, 0.55, nil, nil, 256,2,0.01) + + ---- + 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.2, 8, 1) + local door3 = self:Animate("door3", self:GetPackedBool("PassengerDoor") and 0.99 or 0,1,0.79, 8, 1) + local door4 = self:Animate("door4", self:GetPackedBool("CabinDoor") and 0.99 or 0,1,0.77, 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) + if (state ~= 1 and state ~= 0) ~= self.DoorStates[id] then + if doorstate and state < 1 or not doorstate and state > 0 then + if doorstate then + self:PlayOnce(sid.."so","",1,math.Rand(0.8,1.2)) + else + self:PlayOnce(sid.."sc","",1,math.Rand(0.8,1.2)) + end + 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.8+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) + -- 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-15)/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_medium1",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+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) + 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) + + --end + self:SetSoundState("vpr",self:GetPackedBool("VPR") and 1 or 0,1) +--[[ state = self:GetPackedBool("VPR") + self.PreviousVPRState = self.PreviousVPRState or false + if self.PreviousVPRState ~= state then + self.PreviousVPRState = state + if state then + else + self:SetSoundState("vpr",0,0) + self:PlayOnce("vpr_end","cabin",1) + end + end--]] + + -- RK rotation + if self:GetPackedBool("RK") then self.RKTimer = CurTime() end + self:SetSoundState("rk",(CurTime() - (self.RKTimer or 0)) < 0.2 and 0.7 or 0,1) + + self:SetSoundState("ring_old",self:GetPackedBool("Ring") and 0.4 or 0,0.76) + + local work = self:GetPackedBool("AnnPlay") + local noise = self:GetNW2Int("AnnouncerBuzz",-1) > 0 + self.NoiseVolume = self.NoiseVolume or 0 + self.AnnLamp = self.AnnLamp 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 + local annvolume = self.Sounds.announcer1 and IsValid(self.Sounds.announcer1) and self.Sounds.announcer1:GetLevel()*math.Rand(0.9,3) or 0 + + local lamp = math.max(annvolume,noise and self.NoiseVolume or 0) + + self.AnnLamp = math.Clamp(self.AnnLamp + 8*(lamp-self.AnnLamp)*dT,0,1) + if self.AnnLamp < 0.01 then self.AnnLamp=0 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:Draw() + self.BaseClass.Draw(self) +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) + if self.CurrentCamera == 5 then + self.RTMaterial:SetTexture("$basetexture", self.RRIScreen) + self:DrawOnPanel("RRIScreen",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(64,64,128,128,0) + end) + self.RRI.CanDraw = true + end +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 == "LK1" then + local speed = self:GetPackedRatio("Speed") + local id = range > 0 and "lk4_on" or "lk4_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 == "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 == "M" then + local speed = self:GetPackedRatio("Speed") + local id = range > 0 and "lk4_on" or "lk4_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 == "RKR" then + local speed = self:GetPackedRatio("Speed") + self.SoundPositions[soundid][1] = 440-Lerp(speed/0.1,0,330) + return soundid,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "brake" then + self:PlayOnce("brake_f",location,range,pitch) + self:PlayOnce("brake_b",location,range,pitch) + return + end + if soundid == "UAVAC" then + return "uava_reset",location,range,pitch + end + end + return soundid,location,range,pitch +end + +Metrostroi.GenerateClientProps() diff --git a/lua/entities/gmod_subway_81-702/init.lua b/lua/entities/gmod_subway_81-702/init.lua new file mode 100644 index 0000000..aa358ad --- /dev/null +++ b/lua/entities/gmod_subway_81-702/init.lua @@ -0,0 +1,477 @@ +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","KU1","KU2","KU3","KU5","KU6","KU7","KU8","KU9","KU10","SN","VRP","UAVA","EmergencyBrakeValve","GV","VZ","UAVAC", + "RRIEnable","RRIAmplifier", + "R_Program1","R_Program2", + "DriverValveBLDisconnect","DriverValveTLDisconnect", +} + +function ENT:Initialize() + self.Plombs = { + --RST = true, + Init = true, + UAVA = true, + } + -- Set model and initialize + self:SetModel("models/metrostroi_train/81-702/81-702.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create seat entities + self.DriverSeat = self:CreateSeat("driver",Vector(425,-38.2,-31.5),Angle(0,0,0)) + self.InstructorsSeat = self:CreateSeat("instructor",Vector(430,40,-53),Angle(0,90,0),"models/vehicles/prisoner_pod_inner.mdl") + self.ExtraSeat1 = self:CreateSeat("instructor",Vector(443,0,-53),Angle(0,90,0),"models/vehicles/prisoner_pod_inner.mdl") + self.ExtraSeat2 = self:CreateSeat("instructor",Vector(420,-20,-53),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-1.8,0,-97+4),Angle(0,180,0),true,"702") + self.RearBogey = self:CreateBogey(Vector(-317-2.7,0,-97+4),Angle(0,0,0),false,"702") + self.FrontCouple = self:CreateCouple(Vector( 419.5+3.5,0,-75),Angle(0,0,0),true,"702") + self.RearCouple = self:CreateCouple(Vector(-421.5-3.5,0,-75),Angle(0,180,0),false,"702") + else + self.FrontBogey = self:CreateBogey(Vector( 317-1.8,0,-97+5.6),Angle(0,180,0),true,"702") + self.RearBogey = self:CreateBogey(Vector(-317-2.7,0,-97+5.6),Angle(0,0,0),false,"702") + self.FrontCouple = self:CreateCouple(Vector( 419.5+3.5-3-2.5,0,-75),Angle(0,0,0),true,"702") + self.RearCouple = self:CreateCouple(Vector(-421.5-3.5+3, 0,-75),Angle(0,180,0),false,"702") + end + --self.FrontBogey = self:CreateBogey(Vector( 317-5,0,-97+8),Angle(0,180,0),true,"717" or "702") + --self.RearBogey = self:CreateBogey(Vector(-317+0,0,-97+8),Angle(0,0,0),false,"717" or "702") + self.FrontBogey:SetNWInt("MotorSoundType",0) + self.RearBogey:SetNWInt("MotorSoundType",0) + self.FrontBogey.PneumaticPow = 1.5 + self.RearBogey.PneumaticPow = 1.5 + self.FrontCouple.EKKDisconnected = true + + -- 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_EQUAL] = {"R_Program1Set",helper="R_Program1Set"}, + [KEY_MINUS] = {"R_Program2Set",helper="R_Program2Set"}, + + [KEY_G] = "VRPSet", + [KEY_N] = "VZSet", + + [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] = {"KU10",helper="KU10Set"}, + [KEY_D] = "KU6", + [KEY_V] = {"KU7Toggle",helper="KU8Toggle"}, + [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",helper="EmergencyBrakeValveToggle"}, + + [KEY_PAD_ENTER] = "KVWrenchKV", + [KEY_PAD_0] = "DriverValveDisconnect", + [KEY_LSHIFT] = { + [KEY_W] = "KVUp_Unlocked", + + [KEY_1] = "KU1Set", + [KEY_2] = "KU2Set", + [KEY_L] = "DriverValveDisconnect", + + [KEY_7] = "KVWrenchNone", + [KEY_9] = "KVWrenchKV9", + [KEY_0] = "KVWrenchKV", + [KEY_6] = "KVSetT1A", + + [KEY_PAD_ENTER] = "KVWrenchNone", + }, + [KEY_LALT] = { + [KEY_UP] = "RRIUp", + [KEY_DOWN] = "RRIDown", + [KEY_LEFT] = "RRILeft", + [KEY_RIGHT] = "RRIRight", + } + } + 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 = "RearTrainLineIsolationToggle", + Pos = Vector(-474.6, -27, -62), Radius = 8, + }, + { + ID = "RearBrakeLineIsolationToggle", + Pos = Vector(-474.6, 27, -62), Radius = 8, + }, + { + ID = "FrontDoor", + Pos = Vector(460,34,-10), Radius = 12, + }, + { + ID = "CabinDoor", + Pos = Vector(453,54,-10), Radius = 8, + }, + { + ID = "CabinDoor", + Pos = Vector(453,54,-26), Radius = 8, + }, + { + ID = "CabinDoor", + Pos = Vector(395,60,-10), Radius = 16, + }, + { + ID = "PassengerDoor", + Pos = Vector(381,30,8), Radius = 16, + }, + { + ID = "RearDoor", + Pos = Vector(-457,-35,-10), Radius = 20, + }, + { + ID = "GVToggle", + Pos = Vector(156.50,58.49,-71.08), Radius = 10, + }, + { + ID = "AirDistributorDisconnectToggle", + Pos = Vector(-224.5, 50, -66), Radius = 20, + }, + } + -- Cross connections in train wires + self.TrainWireInverts = {} + self.TrainWireCrossConnections = { + [5] = 4, -- Reverser F<->B + [31] = 32, -- Doors L<->R + } + + -- Parking brake ratio + self.ManualBrake = 0.0 + self.RearDoor = false + self.FrontDoor = false + self.CabinDoor = false + self.PassengerDoor = false + + self:OnButtonPress("KVWrenchNone") + 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() + --self.InstructorsSeat:SetPos(Vector(430,40,-53)) + --self.ExtraSeat1:SetPos(Vector(443,0,-53)) + --self.ExtraSeat2:SetPos(Vector(420,-20,-53)) + local RetVal = self.BaseClass.Think(self) + local Panel = self.Panel + local Pneumatic = self.Pneumatic + self:SetPackedBool("PanelLights",self.PanelLamp.Value > 0.5) + + self:SetPackedBool("RedLight",Panel.RedLights>0) + self:SetPackedBool("Headlights1",Panel.Headlights1 > 0) + self:SetPackedBool("Headlights2",Panel.Headlights2 > 0) + + local lightsActive2 = math.min(1,Panel.MainLights2)^2 + local lightsActive1 = math.min(1,Panel.MainLights1)^2 + local emerActive1 = Panel.EmergencyLights1 + local emerActive2 = Panel.EmergencyLights2 + self:SetPackedBool("Lamps_emer1",emerActive1 > 0) + self:SetPackedBool("Lamps_emer2",emerActive2 > 0) + self:SetPackedBool("Lamps_half1",lightsActive1 > 0) + self:SetPackedBool("Lamps_half2",lightsActive2 > 0) + self:SetPackedRatio("LampsStrength",lightsActive1)--math.Round((self.Electric.I24-150)/1000.0,1.5)) + + -- 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) + + self:SetPackedBool("RRIOn",self.RRI_VV.Power>0) + self:SetPackedRatio("RRIRewind",self.RRIRewind.Value/2) + self:SetPackedBool("AnnPlay",Panel.AnnouncerPlaying > 0) + + -- Red RP + 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.ManualBrake < 0.001 and self.ManualBrake > self.TrueBrakeAngle then self.TrueBrakeAngle = self.ManualBrake end + if self.ManualBrake > 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:SetPackedBool("VPR",Panel.VPR > 0) + self:SetPackedBool("Compressor",Pneumatic.Compressor == 1.0) + self:SetPackedBool("Ring",Panel.Ring > 0.5) + + + self:SetPackedBool("RearDoor",self.RearDoor) + self:SetPackedBool("FrontDoor",self.FrontDoor) + self:SetPackedBool("PassengerDoor",self.PassengerDoor) + self:SetPackedBool("CabinDoor",self.CabinDoor) + + -- Feed packed floats + self:SetNW2Int("WrenchMode",self.KVWrenchMode) + self:SetPackedRatio("CranePosition", 1-Pneumatic.DriverValvePosition/7) + self:SetNW2Int("ControllerPosition", self.KV.ControllerPosition+3) + 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",Panel["V1"]*self.Battery.Voltage/82.0) + --print(self.LK1.Value,self.LK2.Value,self.LK3.Value,self.LK4.Value,self.LK5.Value,self.TSH.Value) + --print(self.LK1.Value,self.LK2.Value,self.LK3.Value,self.LK4.Value,self.LK5.Value,self.TSH.Value) + -- Update ARS system (no ars on E) +-- self:SetPackedRatio(3, self.ALS_ARS.Speed/100.0) + 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+0*(A < 0 and 1 or 0) + self.FrontBogey.Reversed = (self.PositionSwitch.NZ > 0.5) + self.RearBogey.MotorForce = 22050+0*(A < 0 and 1 or 0) + self.RearBogey.Reversed = (self.PositionSwitch.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() + -- Temporary hacks + --self:SetNW2Float("V",self.Speed) + --self:SetNW2Float("A",self.Acceleration) + + 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 + 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 + + if button == "ParkingBrakeLeft" then + self.ManualBrake = math.max(0.0,(self.ManualBrake or 0) - 0.05) + if self.ManualBrake == 0.0 then return end + end + if button == "ParkingBrakeRight" then + self.ManualBrake = math.min(1.0,(self.ManualBrake or 0) + 0.05) + 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 + + 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("rcu_in","cabin",0.7) + self.KVWrenchMode = 3 + elseif self.KVWrenchMode ~= 0 and self.KV.ReverserPosition == 0 then + if self.KVWrenchMode == 3 then + self:PlayOnce("rcu_out","cabin",0.7) + else + self:PlayOnce("revers_out","cabin",0.7) + end + self.KVWrenchMode = 0 + self.KV:TriggerInput("Enabled",0) + end + end + 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 == "KVT2Set" then self.KVT:TriggerInput("Close",1) end + if button == "KU10" and self.KU7.Value < 1 then self.KU10:TriggerInput("Close",1) end + if button == "KU6" and self.KU7.Value < 1 then self.KU6:TriggerInput("Close",1) 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.DriverValveBLDisconnect:TriggerInput("Set",0) + self.DriverValveTLDisconnect:TriggerInput("Set",0) + end + return + end + if button == "RRIRewindSet0" then + self.RRIRewind:TriggerInput("Set",0) + end + if button == "RRIRewindSet2" then + self.RRIRewind:TriggerInput("Set",2) + 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 == "KU10" and self.KU7.Value < 1 then self.KU10:TriggerInput("Open",1) end + if button == "KU6" and self.KU7.Value < 1 then self.KU6:TriggerInput("Open",1) 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 + if button == "RRIRewindSet2" or button == "RRIRewindSet0" then + self.RRIRewind:TriggerInput("Set",1) + 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_81-702/shared.lua b/lua/entities/gmod_subway_81-702/shared.lua new file mode 100644 index 0000000..ce2ad8e --- /dev/null +++ b/lua/entities/gmod_subway_81-702/shared.lua @@ -0,0 +1,697 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.PrintName = "D (81-702)" +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" +ENT.SkinsType = "81-702" +ENT.Model = "models/metrostroi_train/81-702/81-702.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 + +-- 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 + +ENT.MirrorCams = { + Vector(441,75,9),Angle(1,180,0),15, + Vector(441,-75,9),Angle(1,180,0),15, +} + +ENT.AnnouncerPositions = { + {Vector(431,-38.2 ,45),80,0.2}, + {Vector(-3,-60, 62),300,0.3}, + {Vector(-3,60 ,62),300,0.3}, +} + +ENT.Cameras = { + {Vector(407.5+25,32,25),Angle(0,180,0),"Train.702.Breakers1"}, + {Vector(407.5+27,46,21),Angle(0,180,0),"Train.702.Breakers2"}, + {Vector(407.5+35,-25,23),Angle(0,180,0),"Train.702.Breakers3"}, + {Vector(407.5+40,40,12),Angle(0,80,0),"Train.Common.HelpersPanel"}, + {Vector(407.5+20,40,5),Angle(30,10,0),"Train.703.Parking"}, + {Vector(407.5+15,-24,13),Angle(35,180,0),"Train.Common.RRI"}, + {Vector(407.5+65,40,0) ,Angle(20,180,0),"Train.Common.RouteNumber"}, + {Vector(407.5+90,0,55) ,Angle(15,180,0),"Train.Common.LastStation"}, + {Vector(450+13,0,26),Angle(60,0,0),"Train.Common.CouplerCamera"}, +} +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.52} + self.SoundPositions["rolling_80"] = {480,1e12,Vector(0,0,0),0.75} + + 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["epv_on"] = "subway_trains/common/pneumatic/epv_on.mp3" + self.SoundNames["epv_off"] = "subway_trains/common/pneumatic/epv_off.mp3" + self.SoundPositions["epv_on"] = {100,1e9,Vector(437.2,-53.1,-32.0),1} + self.SoundPositions["epv_off"] = {100,1e9,Vector(437.2,-53.1,-32.0),1} + self.SoundPositions["epv_off"] = {60,1e9,Vector(437.2,-53.1,-32.0),1} + -- Релюшки + --Подвагонка + self.SoundNames["lk2_on"] = "subway_trains/717/pneumo/lk1_on.mp3" + self.SoundNames["lk2_off"] = "subway_trains/717/pneumo/lk2_off.mp3" + self.SoundNames["lk3_on"] = "subway_trains/717/pneumo/lk2_on.mp3" + self.SoundNames["lk3_off"] = "subway_trains/717/pneumo/lk2_off.mp3" + self.SoundNames["lk4_on"] = "subway_trains/717/pneumo/lk3_on.mp3" + self.SoundNames["lk4_off"] = "subway_trains/717/pneumo/lk3_off.mp3" + self.SoundPositions["lk2_on"] = {150,1e9,Vector(-60,-40,-66),0.33} + self.SoundPositions["lk2_off"] = {150,1e9,Vector(-60,-40,-66),0.3} + self.SoundPositions["lk3_on"] = self.SoundPositions["lk2_on"] + self.SoundPositions["lk3_off"] = self.SoundPositions["lk2_off"] + self.SoundPositions["lk4_on"] = self.SoundPositions["lk2_on"] + self.SoundPositions["lk4_off"] = self.SoundPositions["lk2_off"] + self.SoundNames["RKR"] = "subway_trains/d/pneumatic/rvr.mp3" + self.SoundPositions["RKR"] = {330,1e9,Vector(-27,-40,-66),0.22} + self.SoundNames["T"] = "subway_trains/d/pneumatic/rvr.mp3" + self.SoundPositions["T"] = {330,1e9,Vector(-27,-40,-66),0.22} + + self.SoundNames["compressor"] = {loop=2.0,"subway_trains/d/pneumatic/compressor/compessor_d_start.wav","subway_trains/d/pneumatic/compressor/compessor_d_loop.wav", "subway_trains/d/pneumatic/compressor/compessor_d_end.wav"} + self.SoundPositions["compressor"] = {450,1e9,Vector(-118,-40,-66),0.75} + self.SoundNames["prk1"] = {} + for i=1,14 do self.SoundNames["prk1"][i] = "subway_trains/d/pneumatic/rk/spin1_"..i..".wav" end + self.SoundPositions["prk1"] = {100,1e9,Vector(110,-40,-75),0.33} + self.SoundNames["prk2"] = {} + for i=1,12 do self.SoundNames["prk2"][i] = "subway_trains/d/pneumatic/rk/spin2_"..i..".wav" end + self.SoundPositions["prk2"] = self.SoundPositions["prk1"] + self.SoundNames["PN1end"] = "subway_trains/d/pneumatic/vz1_end.mp3" + self.SoundPositions["PN1end"] = {300,1e9,Vector(-183,0,-70),0.85} + 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} + + 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(453.66,-21,-15)} + 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"] = {80,1e9,Vector(411.9,-26.4,-11.2)} + 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"] = {80,1e9,Vector(452.3,-24.0,4.0)} + + 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/kru2-3_1.mp3", + "subway_trains/717/kru/kru2-3_2.mp3", + "subway_trains/717/kru/kru2-3_3.mp3", + "subway_trains/717/kru/kru2-3_4.mp3", + } + self.SoundNames["kru_3_2"] = { + "subway_trains/717/kru/kru3-2_1.mp3", + "subway_trains/717/kru/kru3-2_2.mp3", + "subway_trains/717/kru/kru3-2_3.mp3", + "subway_trains/717/kru/kru3-2_4.mp3", + } + self.SoundPositions["kru_0_1"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_1_2"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_2_1"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_1_0"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_2_3"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_3_2"] = {80,1e9,Vector(452.3,-24.0,4.0)} + + self.SoundNames["kr_open"] = { + "subway_trains/717/cover/cover_open1.mp3", + "subway_trains/717/cover/cover_open2.mp3", + "subway_trains/717/cover/cover_open3.mp3", + } + self.SoundNames["kr_close"] = { + "subway_trains/717/cover/cover_close1.mp3", + "subway_trains/717/cover/cover_close2.mp3", + "subway_trains/717/cover/cover_close3.mp3", + } + + 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["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(449.14598,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,36,-78),0.5} + self.SoundPositions["gv_b"] = self.SoundPositions["gv_f"] + + 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(452, 0,-63),1} + self.SoundNames["rear_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["rear_isolation"] = {300,1e9,Vector(-474, 0,-63),1} + + self.SoundNames["crane013_brake2"] = {loop=true,"subway_trains/common/pneumatic/013_brake2.wav"} + self.SoundPositions["crane013_brake2"] = {80,1e9,Vector(453.21,-54.92,-8.50),0.86} + self.SoundNames["crane334_brake_high"] = {loop=true,"subway_trains/common/pneumatic/334_brake.wav"} + self.SoundPositions["crane334_brake_high"] = {80,1e9,Vector(453.21,-54.92,-8.50),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(453.21,-54.92,-8.50),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(453.21,-54.92,-8.50),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(453.21,-54.92,-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(453.21,-54.92,-70),0.45} + self.SoundNames["crane334_release"] = {loop=true,"subway_trains/common/pneumatic/334_release3.wav"} + self.SoundPositions["crane334_release"] = {80,1e9,Vector(453.21,-54.92,-8.50),0.2} + self.SoundNames["crane334_release_2"] = {loop=true,"subway_trains/common/pneumatic/334_release2.wav"} + self.SoundPositions["crane334_release_2"] = {80,1e9,Vector(453.21,-54.92,-8.50),0.2} + + + self.SoundNames["valve_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["valve_brake"] = {400,1e9,Vector(464.40,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["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/d/kv20/kv20_0_T1.wav"} + self.SoundNames["kv40_t1_0"] = {"subway_trains/d/kv20/kv20_T1_0.wav"} + self.SoundNames["kv40_t1_t1a"] = {"subway_trains/d/kv20/kv20_T1_T1A.wav"} + self.SoundNames["kv40_t1a_t1"] = {"subway_trains/d/kv20/kv20_T1A_T1.wav"} + self.SoundNames["kv40_t1a_t2"] = {"subway_trains/d/kv20/kv20_T1A_T2.wav"} + self.SoundNames["kv40_t2_t1a"] = {"subway_trains/d/kv20/kv20_T2_T1A.wav"} + self.SoundNames["kv40_0_x1"] = {"subway_trains/d/kv20/kv20_0_X1.wav"} + self.SoundNames["kv40_x1_0"] = {"subway_trains/d/kv20/kv20_X1_0.wav"} + self.SoundNames["kv40_x1_x2"] = {"subway_trains/d/kv20/kv20_X1_X2.wav"} + self.SoundNames["kv40_x2_x1"] = {"subway_trains/d/kv20/kv20_X2_X1.wav"} + self.SoundNames["kv40_x2_x3"] = {"subway_trains/d/kv20/kv20_X2_X3.wav"} + self.SoundNames["kv40_x3_x2"] = {"subway_trains/d/kv20/kv20_X3_X2.wav"} + self.SoundPositions["kv70_fix_on"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv70_fix_off"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv40_0_t1"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv70_t1_0_fix"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv40_t1_0"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv40_t1_t1a"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv40_t1a_t1"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv40_t1a_t2"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv40_t2_t1a"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv40_0_x1"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv40_x1_0"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv40_x1_x2"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv40_x2_x1"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv40_x2_x3"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv40_x3_x2"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + + self.SoundNames["samm_revers_in"] = {"subway_trains/ezh3/rc_ars/reversor_rc_in.mp3"} + self.SoundNames["samm_revers_out"] = {"subway_trains/ezh3/rc_ars/reversor_rc_in.mp3"} + self.SoundNames["samm_0-1"] = {"subway_trains/ezh3/rc_ars/0-1.mp3"} + self.SoundNames["samm_0-2"] = {"subway_trains/ezh3/rc_ars/0-2.mp3"} + self.SoundNames["samm_2-0"] = {"subway_trains/ezh3/rc_ars/2-0.mp3"} + self.SoundPositions["samm_0-2"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_2-0"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_0-1"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_revers_out"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_revers_in"] = {60,1e9,Vector(442.2-6,-50,-10)} + + 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,-40,50),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"] = {60,1e9,Vector(431,-38.2 ,45),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(449.118378+7.6,33.493385,-14.713276),0.1} + self.SoundNames["av1a_on"] = {"subway_trains/d/av1a/av1a_on1.wav","subway_trains/d/av1a/av1a_on2.wav","subway_trains/d/av1a/av1a_on3.wav","subway_trains/d/av1a/av1a_on4.wav"} + self.SoundNames["av1a_off"] = {"subway_trains/d/av1a/av1a_off1.wav","subway_trains/d/av1a/av1a_off2.wav","subway_trains/d/av1a/av1a_off3.wav","subway_trains/d/av1a/av1a_off4.wav","subway_trains/d/av1a/av1a_off5.wav","subway_trains/d/av1a/av1a_off6.wav"} + self.SoundPositions["av1a_on"] = {100,1e9,Vector(405,40,30)} + self.SoundPositions["av1a_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"} + + self.SoundNames["pneumo_TL_open"] = "subway_trains/common/334/334_open.mp3" + 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["pneumo_idle"] = { + "subway_trains/ezh3/pneumatic/idle.wav", + } + self.SoundPositions["pneumo_idle"] = {300,1e9,Vector(438.50,-50,-40),1} + + 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(413.4-0.7,-56.7-0.05,6.9-1.15),0.3} + self.SoundPositions["igla_off"] = {50,1e9,Vector(413.4-0.7,-56.7-0.05,6.9-1.15),0.3} + self.SoundPositions["igla_start1"] = {50,1e9,Vector(413.4-0.7,-56.7-0.05,6.9-1.15),0.3} + self.SoundPositions["igla_start2"] = {50,1e9,Vector(413.4-0.7,-56.7-0.05,6.9-1.15),0.2} + + self.SoundNames["upps"] = {"subway_trains/common/other/upps/upps1.mp3","subway_trains/common/other/upps/upps2.mp3"} + self.SoundPositions["upps"] = {60,1e9,Vector(443,-64,4),0.5} + + 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","subway_trains/common/pnm/pnm_switch_off2.mp3"} + self.SoundNames["pnm_button1_on"] = { + "subway_trains/common/pnm/pnm_button_push.mp3", + "subway_trains/common/pnm/pnm_button_push2.mp3", + "subway_trains/common/pnm/pnm_button_push3.mp3", + } + + self.SoundNames["pnm_button2_on"] = { + "subway_trains/common/pnm/pnm_button_push4.mp3", + "subway_trains/common/pnm/pnm_button_push5.mp3", + "subway_trains/common/pnm/pnm_button_push6.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", + "subway_trains/common/pnm/pnm_button_release6.mp3", + } + + self.SoundNames["horn"] = {loop=0.5,"subway_trains/d/pneumatic/horn/horn_start.wav","subway_trains/d/pneumatic/horn/horn_loop.wav", "subway_trains/d/pneumatic/horn/horn_end.wav"} + self.SoundPositions["horn"] = {1100,1e9,Vector(480,-30,30)} + + --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)} + + for i=0,3 do + for k=0,1 do + self.SoundNames["door"..i.."x"..k.."r"] = {"subway_trains/d/door_roll.wav",loop=true} + self.SoundPositions["door"..i.."x"..k.."r"] = {150,1e9,GetDoorPosition(i,k),0.55} + self.SoundNames["door"..i.."x"..k.."o"] = {"subway_trains/d/door_open_end.wav","subway_trains/d/door_open_end2.wav"} + self.SoundPositions["door"..i.."x"..k.."o"] = {150,1e9,GetDoorPosition(i,k),0.60} + self.SoundNames["door"..i.."x"..k.."c"] = {"subway_trains/d/door_close_end3.wav","subway_trains/d/door_close_end.wav","subway_trains/d/door_close_end2.wav",} + self.SoundPositions["door"..i.."x"..k.."c"] = {150,1e9,GetDoorPosition(i,k),0.90} + self.SoundNames["door"..i.."x"..k.."so"] = {"subway_trains/d/door_open_start2.wav","subway_trains/d/door_start_open.wav"} + self.SoundPositions["door"..i.."x"..k.."so"] = {150,1e9,GetDoorPosition(i,k),0.20} + self.SoundNames["door"..i.."x"..k.."sc"] = {"subway_trains/d/door_close_start3.wav","subway_trains/d/door_close_start4.wav",} + self.SoundPositions["door"..i.."x"..k.."sc"] = {150,1e9,GetDoorPosition(i,k),1} + 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["junk_small"] = { + "subway_trains/common/junk/junk_small1.mp3", + "subway_trains/common/junk/junk_small2.mp3", + "subway_trains/common/junk/junk_small3.mp3", + "subway_trains/common/junk/junk_small4.mp3", + "subway_trains/common/junk/junk_small5.mp3", + "subway_trains/common/junk/junk_small6.mp3", + } + self.SoundNames["junk_medium"] = { + "subway_trains/common/junk/junk_medium1.mp3", + "subway_trains/common/junk/junk_medium2.mp3", + "subway_trains/common/junk/junk_medium3.mp3", + "subway_trains/common/junk/junk_medium4.mp3", + "subway_trains/common/junk/junk_medium5.mp3", + "subway_trains/common/junk/junk_medium6.mp3", + } + self.SoundNames["junk_enginestart_speed"] = { + "subway_trains/common/junk/junk_enginestart_speed1.mp3", + "subway_trains/common/junk/junk_enginestart_speed2.mp3", + "subway_trains/common/junk/junk_enginestart_speed3.mp3", + "subway_trains/common/junk/junk_enginestart_speed4.mp3", + "subway_trains/common/junk/junk_enginestart_speed5.mp3", + "subway_trains/common/junk/junk_enginestart_speed6.mp3", + } +end + +function ENT:InitializeSystems() + self:LoadSystem("Electric","81_702_Electric") + + -- Токоприёмник + self:LoadSystem("TR","TR_3B") + -- ЭлектротÑговые двигатели + self:LoadSystem("Engines","DK_104G") + + -- РезиÑторы Ð´Ð»Ñ Ñ€ÐµÐ¾Ñтата/пуÑковых Ñопротивлений + self:LoadSystem("KF_6A") + -- РезиÑторы Ð´Ð»Ñ Ð¾ÑÐ»Ð°Ð±Ð»ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð±ÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ + self:LoadSystem("KF_7A") + + -- РеоÑтатный контроллер Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑƒÑковыми ÑÐ¾Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð»ÐµÐ½Ð¸Ñ + self:LoadSystem("RheostatController","PKG_758B") + -- Групповой переключатель положений + self:LoadSystem("PositionSwitch","PKG_759B") + -- Кулачковый контроллер + self:LoadSystem("KV","KV_20") + --Разоеденитель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼ мотовор + + + -- Ящики Ñ Ñ€ÐµÐ»Ðµ и контакторами + self:LoadSystem("LK_753B") + self:LoadSystem("LK_753V") + self:LoadSystem("YAR_10A") + self:LoadSystem("YAK_4K") + + -- ПневмоÑиÑтема 81-703 + self:LoadSystem("Pneumatic","81_702_Pneumatic") + -- Панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð” + self:LoadSystem("Panel","81_702_Panel") + -- Everything else + self:LoadSystem("Battery") + self:LoadSystem("Horn") + + self:LoadSystem("ALSCoil") + + self:LoadSystem("Announcer","81_71_Announcer", "AnnouncementsRRI") + + self:LoadSystem("RRI","81_71_RRI") + self:LoadSystem("RRI_VV","81_71_RRI_VV") + self:LoadSystem("RouteNumber","81_71_RouteNumber",2) + self:LoadSystem("LastStation","81_71_LastStation","702","trafaret") +end +function ENT:PostInitializeSystems() + --self.Electric:TriggerInput("Type",self.Electric.NVL) + self.RouteNumber.Max = 2 +end + +ENT.SubwayTrain = { + Type = "D", + Name = "81-702", + Manufacturer = "MVM", + WagType = 0, + ARS = { + HaveASNP = false, + NoEPK = true, + }, + ALS = { + HaveAutostop = true, + }, + EKKType = 702, +} + +ENT.NumberRanges = {{807,1000},{2001,2468}} +ENT.Spawner = { + model = { + "models/metrostroi_train/81-702/81-702.mdl", + "models/metrostroi_train/81-702/81-702_salon.mdl", + "models/metrostroi_train/81-702/mirrors_d.mdl", + "models/metrostroi_train/81-702/81-702_cabine.mdl", + {"models/metrostroi_train/81-502/sun_protectors.mdl",pos = Vector(-2.5,-2,0)} + }, + interim = "gmod_subway_81-702_int", + func = function(ent,i,maxi) + if ent:GetClass() == "gmod_subway_81-702" then + ent.VU:TriggerInput("Set",1) + ent.UAVA:TriggerInput("Set",0) + ent.Plombs.VU = nil + ent.Plombs.UAVA = true + else + ent.VU:TriggerInput("Set",0) + ent.UAVA:TriggerInput("Set",1) + ent.Plombs.VU = true + ent.Plombs.UAVA = nil + end + end, + Metrostroi.Skins.GetTable("Texture","Texture",false,"train"), + Metrostroi.Skins.GetTable("PassTexture","PassTexture",false,"pass"), + Metrostroi.Skins.GetTable("CabTexture","CabTexture",false,"cab"), + {"SpawnMode","Spawner.Common.SpawnMode","List",{"Spawner.Common.SpawnMode.Full","Spawner.Common.SpawnMode.Deadlock","Spawner.Common.SpawnMode.NightDeadlock","Spawner.Common.SpawnMode.Depot"}, nil,function(ent,val,rot,i,wagnum,rclk) + if rclk then return end + if ent._SpawnerStarted~=val then + ent.VB:TriggerInput("Set",val<=2 and 1 or 0) + ent.AV:TriggerInput("Set",val<=2 and 1 or 0) + if ent.RRI then + local first = i==1 or _LastSpawner~=CurTime() + + ent.VU2:TriggerInput("Set",(val<=2 and first) and 1 or 0) + --ent.VR:TriggerInput("Set",val<=2 and 1 or 0) + ent.RRIEnable:TriggerInput("Set",val<=2 and 1 or 0) + ent.RRIAmplifier:TriggerInput("Set",val<=2 and 1 or 0) + ent.KU3:TriggerInput("Set",(val==1 and first) and 1 or 0) + _LastSpawner=CurTime() + ent.CabinDoor = val==4 and first + ent.PassengerDoor = val==4 + ent.RearDoor = val==4 + else + ent.VU2:TriggerInput("Set",0) + ent.FrontDoor = val==4 + ent.RearDoor = val==4 + end + ent.GV:TriggerInput("Set",val<4 and 1 or 0) + ent._SpawnerStarted = val + end + if val==1 then ent.KO:TriggerInput("Close",1) else ent.KO:TriggerInput("Open",1) end + ent.Pneumatic.TrainLinePressure = val==3 and math.random()*4 or val==2 and 4.5+math.random()*3 or 7.6+math.random()*0.6 + if val==4 then ent.Pneumatic.BrakeLinePressure = 5.2 end + end}, +} diff --git a/lua/entities/gmod_subway_81-702_int/cl_init.lua b/lua/entities/gmod_subway_81-702_int/cl_init.lua new file mode 100644 index 0000000..041d9fd --- /dev/null +++ b/lua/entities/gmod_subway_81-702_int/cl_init.lua @@ -0,0 +1,1383 @@ +-------------------------------------------------------------------------------- +-- 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.ButtonMap["PanelLamp"] = { + pos = Vector(456,-53,30), + ang = Angle(186,-37,6), + 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["MainL"] = { + pos = Vector(460.4,-37.98,-11.15), + ang = Angle(0.5,-98,70), + width = 83.5, + height = 20, + scale = 0.0588, + hideseat=0.2, + + buttons = { + ----Лампы + {ID = "!RedRP", x=10,y=10, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-703/cabin_lamp_red3.mdl",z=1,color = Color(178,112,112), var="RRP", getfunc = function(ent,min,max) return ent:GetPackedRatio("RRP") end}, + sprite = {bright=0.1,size=0.25,scale=0.07,color=Color(255,60,60),z=3,} + }}, + {ID = "!GreenRP", x=40.71,y=10, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-703/cabin_lamp_green.mdl",z=1,color = Color(98,178,178), var="GRP"}, + sprite = {bright=0.1,size=0.25,scale=0.07,color=Color(40,255,100),z=3,} + }}, + {ID = "!Blue", x=73.50,y=10, radius=10, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-703/cabin_lamp_white.mdl",z=1,color = Color(112,140,178), var="SD",}, + sprite = {bright=0.1,size=0.25,scale=0.07,color=Color(60,200,255),z=3,} + }}, + } +} +ENT.ButtonMap["MainB"] = { + pos = Vector(460.8,-34.9,-15.3), + ang = Angle(0,-96,65), + width = 218, + height = 90, + scale = 0.0588, + hideseat=0.2, + + buttons = { + ----Кнопки + { ID = "KU7Toggle", x=0+56*0,y=0,w=50,h=90, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/vu_13b.mdl", ang=Angle(-90,0,0), + labels={{model="models/metrostroi_train/81-702/labels/vu_labels.mdl",skin=3,ang=90,z=10,x=0,y=-13.5}}, + var="KU7",speed=6, + sndvol = 1, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Unlocked","Train.Buttons.Locked"}, + }}, + + { ID = "KU6Set", x=0+56*1, y=0, w=50,h=90, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/vu_13b.mdl", ang=Angle(-90,0,0), + labels={{model="models/metrostroi_train/81-702/labels/vu_labels.mdl",skin=4,ang=90,z=10,x=0,y=-13.5}}, + var="KU6",speed=6, + sndvol = 1, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + { ID = "VRPSet", x=0+56*2, y=0, w=50,h=90, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/vu_13b.mdl", ang=Angle(-90,0,0), + labels={{model="models/metrostroi_train/81-702/labels/vu_labels.mdl",skin=5,ang=90,z=10,x=0,y=-13.5}}, + var="VRP",speed=6, + sndvol = 1, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + { ID = "KU3Toggle", x=0+56*3,y=0,w=50,h=90, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/vu_13b.mdl", ang=Angle(-90,0,0), + labels={{model="models/metrostroi_train/81-702/labels/vu_labels.mdl",skin=6,ang=90,z=10,x=0,y=-13.5}}, + var="KU3",speed=6, + sndvol = 1, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} + +--VU Panel +ENT.ButtonMap["VU"] = { + pos = Vector(462,-17.1,22.5), + ang = Angle(0,270,90), + width = 103, + height = 390, + scale = 0.0625, + hideseat=0.2, + + buttons = { + { ID = "VUToggle", x=0, y=0, w=88, h=80, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.mdl", z=0, 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}}, + 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 "vu220b1_on" or "vu220b1_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + { ID = "KU1Set", x=33, y=120+90*0,w=70,h=90, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/vu_13b.mdl", z=8, ang=Angle(-90,0,0), + labels={{model="models/metrostroi_train/81-702/labels/vu_labels.mdl",skin=0,ang=90,z=10,x=0,y=-13.5}}, + var="KU1",speed=6, + sndvol = 1, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + { ID = "KU2Set", x=33, y=120+90*1,w=70,h=90, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/vu_13b.mdl", z=8, ang=Angle(-90,0,0), + labels={{model="models/metrostroi_train/81-702/labels/vu_labels.mdl",skin=1,ang=90,z=10,x=0,y=-13.5}}, + var="KU2",speed=6, + sndvol = 1, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + { ID = "SNSet", x=33, y=120+90*2,w=70,h=90, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/vu_13b.mdl", z=8, ang=Angle(-90,0,0), + labels={{model="models/metrostroi_train/81-702/labels/vu_labels.mdl",skin=2,ang=90,z=10,x=0,y=-13.5}}, + var="SN",speed=6, + sndvol = 1, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} +--VU Panel +ENT.ButtonMap["KU5"] = { + pos = Vector(461.2,-17.8,-2), + ang = Angle(0,270,90), + width = 140, + height = 80, + scale = 0.0625, + hideseat=0.2, + + buttons = { + { ID = "KU5Set", x=0, y=0, w=140,h=80, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/emer_doors.mdl", z=0, ang=Angle(-90,0,0), + var="KU5",speed=12, + sndvol = 0.1, snd = function(val) return val and "vu220b1_on" or "vu220b1_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} + +ENT.ButtonMap["Stopkran"] = { + pos = Vector(464,27,10), + ang = Angle(0,-90,90), + width = 200, + height = 1300, + scale = 0.1/2, + buttons = { + {ID = "EmergencyBrakeValveToggle",x=0, y=0, w=200, h=1300, tooltip="", tooltip="",tooltip="",states={"Train.Buttons.Closed","Train.Buttons.Opened"},var="EmergencyBrakeValve"}, + } +} + +ENT.ButtonMap["AVMain"] = { + pos = Vector(409,-38.5,31.5), + ang = Angle(0,90,90), + width = 335, + height = 380, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "AVToggle", x=0, y=0, w=300, h=380, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_av8r.mdl", z=80, ang = Angle(90,0,0), + var="AV",speed=0.85, vmin=0.73,vmax=0.80, + sndvol = 1, snd = function(val) return val and "av1a_on" or "av1a_off" end, + }}, + } +} + +---AV1 Panel +ENT.ButtonMap["AV1"] = { + pos = Vector(409.63,41,34.3), + ang = Angle(0,90,90), + width = 320, + height = 500, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "VU3Toggle", x=220, y=294, w=100, h=140, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.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 "vu220b1_on" or "vu220b1_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + {ID = "VU2Toggle", x=20, y=0, w=100, h=140, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.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 "vu220b1_on" or "vu220b1_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + {ID = "VU1Toggle", x=120, y=110, w=100, h=140, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.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 "vu220b1_on" or "vu220b1_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} + +ENT.ClientProps["tab"] = { + model = "models/metrostroi_train/Equipment/tab.mdl", + pos = Vector(23.8,0,-3), + ang = Angle(0,0,0), + skin = 5, + hide = 2, +} +-- Battery panel +ENT.ButtonMap["Battery"] = { + pos = Vector(410.1,16.5,34.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/81-702/buttons/vb_1.mdl", color=Color(255,255,255), z=18, ang = Angle(-90,180,0), + var="VB",speed=6,vmin=1,vmax=0, + sndvol = 0.8, snd = function(val) return val and "vb1a_on" or "vb1a_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} + + + + +ENT.ButtonMap["KU9"] = { + pos = Vector(410.1,33.9,23.5), + ang = Angle(0,90,90), + width = 50, + height = 70, + scale = 0.0625, + hide = 0.8, + + buttons = { + {ID = "KU9Set", x=0, y=0, w=50, h=70, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/ku122.mdl", z=5, ang = Angle(-90,180,0), + var="KU9",speed=12,vmin=0,vmax=1, + sndvol = 0.1, snd = function(val) return val and "prk1" or "button1_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} +-- Parking brake panel +ENT.ButtonMap["ParkingBrake"] = { + pos = Vector(455,47.8,-2.0), + ang = Angle(0,-83,90), + width = 340, + height = 400, + scale = 0.0625, + + buttons = { + {ID = "ParkingBrakeLeft",x=0, y=0, w=170, h=400, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.ParkingBrake"),ent:GetPackedRatio("ManualBrake")*100) end}, + {ID = "ParkingBrakeRight",x=170, y=0, w=170, 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(449.45,59.99,24.64), + ang = Angle(0,0,90), + width = 60, + height = 200, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "KU10Set",x=0, y=0, w=60,h=100, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/vu_13b.mdl", z=-3, ang=Angle(-90,0,0), + labels={{model="models/metrostroi_train/81-707/labels/vu_labels.mdl",skin=9,ang=90,z=10,x=0,y=-13.5}}, + var="KU10",speed=6, + sndvol = 1, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "KU8Toggle",x=0, y=100, w=60,h=100, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/vu_13b.mdl", z=-3, ang=Angle(-90,0,0), + labels={{model="models/metrostroi_train/81-707/labels/vu_labels.mdl",skin=10,ang=90,z=10,x=0,y=-13.5}}, + var="KU8",speed=6, + sndvol = 1, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Unlocked","Train.Buttons.Locked"}, + }}, + } +} + + +ENT.ButtonMap["HVMeters"] = { + pos = Vector(454.1,-55.7,23.4), + ang = Angle(0,-145,90), + width = 55, + height = 55, + scale = 0.0625, + + buttons = { + {ID = "!EnginesVoltage", x=0, y=0, w=55, h=55, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesVoltage"),ent:GetPackedRatio("EnginesVoltage")*1000) end}, + } +} +ENT.ButtonMap["Speedometer"] = { + pos = Vector(456.2,-53.6,18.5), + ang = Angle(0,-148,89), + width = 135, + height = 135, + scale = 0.0625, + + buttons = { + {ID = "!Speedometer", x=0, y=0, w=135, h=135, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.Speed"),ent:GetPackedRatio("Speed")*100) end}, + } +} +ENT.ButtonMap["BLTLPressure"] = { + pos = Vector(456.5,-55,8.8), + ang = Angle(0,-138,90), + width = 120, + height = 120, + scale = 0.0625, + + buttons = { + {ID = "!BLTLPressure", x=60,y=60,radius=60,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(454.3,-55.5,0.7), + ang = Angle(0,-143,90), + + width = 68, + height = 68, + scale = 0.0625, + + buttons = { + {ID = "!BCPressure", x=34,y=34,radius=34,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BCPressure"),ent:GetPackedRatio("BCPressure")*6) end}, + } +} +ENT.ButtonMap["BatteryVoltage"] = { + pos = Vector(410.1,22.5,15.5), + ang = Angle(0,90,90), + width = 60, + height = 60, + scale = 0.0625, + + buttons = { + {ID = "!BatteryVoltage", x=0,y=0,w=60,h=60,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BatteryVoltage"),ent:GetPackedRatio("BatteryVoltage")*100) end}, + } +} + +ENT.ButtonMap["DriverValveBLDisconnect"] = { + pos = Vector(449,-54,-37.61), + ang = Angle(-90,-10,0), + width = 200, + height = 90, + scale = 0.0625, + + buttons = { + {ID = "DriverValveBLDisconnectToggle", x=0, y=0, w=200, h=90, tooltip="", model = { + var="DriverValveBLDisconnect",sndid="brake_disconnect", + sndvol = 1, snd = function(val) return "disconnect_valve" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} +ENT.ButtonMap["DriverValveTLDisconnect"] = { + pos = Vector(452,-50,-30), + 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 = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} +--[[ +ENT.ButtonMap["Meters"] = { + pos = Vector(454.95213,-55.696617,27.528275), + ang = Angle(0,-180+38,90), + width = 73, + height = 73, + scale = 0.0625, + + buttons = { + {ID = "!TotalVoltmeter", x=13, y=22, w=60, h=50, tooltip=""}, + --{ID = "!TotalAmpermeter", x=13, y=81, w=60, h=50, tooltip=""}, + } +} +ENT.ButtonMap["Speedometer"] = { + pos = Vector(455,-55.25582,17.324441), + ang = Angle(0,-149,90), + width = 110, + height = 110, + scale = 0.0625, + + buttons = { + {ID = "!Speedometer", x=0, y=0, w=110, h=110, tooltip=""}, + } +}--]] + +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, -29, -68), + ang = Angle(0,-90,0), + hide = 0.5, +} +ENT.ClientProps["FrontTrain"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_blue.mdl", + pos = Vector(450+19, 30, -68), + ang = Angle(0,-90,0), + hide = 0.5, +} +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-1,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-22, -30, -68), + ang = Angle(0,90,0), + hide = 0.5, +} +ENT.ClientProps["RearBrake"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_red.mdl", + pos = Vector(-450-22, 29, -68), + ang = Angle(0,90,0), + hide = 0.5, +} +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,50,-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,36,-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"}}, + } +} + +-- UAVA +ENT.ButtonMap["UAVAPanel"] = { + pos = Vector(453,60,-7), + ang = Angle(0,-70,90), + width = 180, + height = 170, + scale = 0.0625, + + buttons = { + {ID = "UAVAToggle",x=0, y=0, w=60, h=170, tooltip="", model = { + plomb = {var="UAVAPl", ID="UAVAPl"}, + var="UAVA", + sndid="UAVALever",sndvol = 1, snd = function(val) return val and "uava_on" or "uava_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "UAVACToggle",x=60, y=0, w=120, h=170, tooltip="",var="UAVAC",states={"Train.Buttons.UAVAOff","Train.Buttons.UAVAOn"}}, + } +} + +for i=0,3 do + ENT.ClientProps["TrainNumberL"..i] = { + model = "models/metrostroi_train/common/bort_numbers.mdl", + pos = Vector(400+i*6.6-4*6.6/2,67.5,-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(-405-i*6.6-4*6.6/2,-67.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,16,37), + ang = Angle(0,-90,90), + width = 650, + height = 1780, + scale = 0.1/2, + buttons = { + {ID = "FrontDoor",x=0,y=0,w=650,h=1780, 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(415,64,37), + ang = Angle(0,0,90), + width = 642, + height = 1780, + scale = 0.1/2, + buttons = { + {ID = "CabinDoor",x=0,y=0,w=642,h=1780, 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(400+7.6,-16,37), + ang = Angle(0,90,90), + width = 642, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=642,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(400+7,16,37), + ang = Angle(0,-90,90), + width = 642, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=642,h=1900, tooltip=""}, + } +} + +ENT.ButtonMap["RearDoor"] = { + pos = Vector(-472,-16,37), + ang = Angle(0,90,90), + width = 650, + height = 1780, + scale = 0.1/2, + buttons = { + {ID = "RearDoor",x=0,y=0,w=650,h=1780, 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(453.213806,-54.919998,-8.500000), + ang = Angle(0.000000,-133.000000,0.000000), + hideseat = 0.2, +} +ENT.ClientProps["controller"] = { + model = "models/metrostroi_train/81-702/kv_d.mdl", + pos = Vector(453.813934,-20.614157,-9.466090), + ang = Angle(0,195.000000,0), + hideseat = 0.2, +} + +ENT.ClientProps["reverser"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = Vector(453.8,-21,-15), + 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 = Vector(411.9+0.3,-26.15,-11.3), + ang = Angle(90+45,0,-90), + 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(447.2,-58.5,-32.05), + ang = Angle(0,88,-90), + hideseat = 0.2, +} +ENT.ClientProps["train_disconnect"] = { + model = "models/metrostroi_train/81-707/cran3.mdl", + pos = Vector(450.4,-54.35,-26.25), + ang = Angle(90,-100,90), + hideseat = 0.2, +} + +ENT.ClientProps["parking_brake"] = { + model = "models/metrostroi_train/81-703/cabin_parking.mdl", + pos = Vector(456.591827,37.367580,-16.614565), + ang = Angle(-90.000000,8.000000,0.000000), + hideseat = 0.2, +} + + +-------------------------------------------------------------------------------- +ENT.ClientProps["train_line"] = { + model = "models/metrostroi_train/Equipment/arrow_e_nm.mdl", + pos = Vector(453.808746,-57.777153,3.555025), + ang = Angle(170.000000,-143.000000,90.000000), + hideseat = 0.2, +} + +ENT.ClientProps["brake_line"] = { + model = "models/metrostroi_train/Equipment/arrow_e_tm.mdl", + pos = Vector(453.851135,-57.825100,3.558732), + ang = Angle(170.000000,-143.000000,90.000000), + hideseat = 0.2, +} + +ENT.ClientProps["brake_cylinder"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(452.788696,-57.193684,-1.326352), + ang = Angle(-124.500000,37.000000,-90.000000), + hideseat = 0.2, +} +---------------------------------------------------------------- +ENT.ClientProps["voltmeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(452.729889,-56.791126,21.017803), + ang = Angle(-90.000000,0.000000,-55.130001), + hideseat = 0.2, +} + +--[[ +ENT.ClientProps["ampermeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(450.284607-1.0,-56.987834,30.5+1.0), + ang = Angle(-90,0,-60) +} +]] +ENT.ClientProps["volt1"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(410.788452,24.423306,12.815310), + ang = Angle(-90.000000,89.500000,90.000000), + hideseat = 0.2, +} + +ENT.ClientProps["speed1"] = { + model = "models/metrostroi_train/Equipment/arrow_voltmeter_old.mdl", + pos = Vector(450.787781,-57.760075,11.812588), + ang = Angle(-90,-16.708426,-39.648327), + hideseat = 0.2, +} +-------------------------------------------------------------------------------- + +ENT.ClientProps["salon"] = { + model = "models/metrostroi_train/81-702/81-702_salon.mdl", + pos = Vector(0.0,0,0), + ang = Angle(0,0,0), + hide = 2.0, +} + +ENT.ClientProps["salon2"] = { + model = "models/metrostroi_train/81-702/81-702_cabine.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2, +} +ENT.ClientProps["Lamps_pult"] = { + model = "models/metrostroi_train/equipment/lamp_gauges_d.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=2, +} +ENT.ClientProps["Lamps_emer1"] = { + model = "models/metrostroi_train/81-702/light_emer2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + --color=Color(255,150,150), + hide = 1.5, +} + +ENT.ClientProps["Lamps_emer2"] = { + model = "models/metrostroi_train/81-702/light_emer.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + --color=Color(255,150,150), + hide = 1.5, +} +ENT.ClientProps["Lamps_cab1"] = { + model = "models/metrostroi_train/81-702/light_cabine.mdl", + pos = Vector(411.975,0,42.535), + ang = Angle(0,0,0), + hide = 0.8, +} + +ENT.ClientProps["Lamps_half1"] = { + model = "models/metrostroi_train/81-702/light_group1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 1.5, +} +ENT.ClientProps["Lamps_half2"] = { + model = "models/metrostroi_train/81-702/light_group2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 1.5, +} + +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 + +addTW10Cosume("MainL") + +-------------------------------------------------------------------------------- +-- Add doors +--[[ local function GetDoorPosition(i,k,j) + if j == 0 + then return Vector(349.45 - 1*k - 232.202*i,-64.6*(1-2*k),-8.728) + else return Vector(349.45 - 1*(1-k) - 232.202*i,-64.6*(1-2*k),-8.728) + end +end +for i=0,3 do + for k=0,1 do + ENT.ClientProps["door"..i.."x"..k.."a"] = { + model = "models/metrostroi_train/81-702/81-702_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-702/81-702_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-702/81-702_doors_pos1.mdl", + pos = Vector(349.5,64.8,-8.85), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door1x1"] = { + model = "models/metrostroi_train/81-702/81-702_doors_pos2.mdl", + pos = Vector(117.12,64.8,-8.85), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door2x1"] = { + model = "models/metrostroi_train/81-702/81-702_doors_pos3.mdl", + pos = Vector(-115.12,64.8,-8.85), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door3x1"] = { + model = "models/metrostroi_train/81-702/81-702_doors_pos4.mdl", + pos = Vector(-347.698,64.8,-8.85), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door0x0"] = { + model = "models/metrostroi_train/81-702/81-702_doors_pos4.mdl", + pos = Vector(349.5,-64.8,-8.85), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door1x0"] = { + model = "models/metrostroi_train/81-702/81-702_doors_pos3.mdl", + pos = Vector(117.12,-64.8,-8.85), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door2x0"] = { + model = "models/metrostroi_train/81-702/81-702_doors_pos2.mdl", + pos = Vector(-115.12,-64.8,-8.85), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door3x0"] = { + model = "models/metrostroi_train/81-702/81-702_doors_pos1.mdl", + pos = Vector(-347.698,-64.8,-8.85), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door1"] = { + model = "models/metrostroi_train/81-702/81-702_door_torec.mdl", + pos = Vector(466.422,-16.306,-9.987), + ang = Angle(0,-90,0), + hide = 2, +} +ENT.ClientProps["door2"] = { + model = "models/metrostroi_train/81-702/81-702_door_torec.mdl", + pos = Vector(-471.062,16.047,-9.987), + ang = Angle(0,90,0), + hide = 2, +} +ENT.ClientProps["door3"] = { + model = "models/metrostroi_train/81-702/81-702_door_salon.mdl", + pos = Vector(409.613,-15.765,-10.239), + ang = Angle(0,-90,0), + hide = 2, +} +ENT.ClientProps["door4"] = { + model = "models/metrostroi_train/81-702/81-702_door_cab.mdl", + pos = Vector(416.706,63.461,-8.38), + ang = Angle(0,-90,0), + hide = 2, +} + +ENT.ClientProps["UAVALever"] = { + model = "models/metrostroi_train/81-703/cabin_uava.mdl", + pos = Vector(456.04598,60.4,-13), + ang = Angle(0,-90+10,0), + hideseat = 0.8, +} + +ENT.ClientProps["EmergencyBrakeValve"] = { + model = "models/metrostroi_train/81-710/ezh3_stopkran.mdl", + pos = Vector(463.8,20.7,3.6), + ang = Angle(0,180,0), + hide = 0.8, +} + + +ENT.ClientProps["WhiteLights"] = { + model = "models/metrostroi_train/81-702/81-702_front_light.mdl", + pos = Vector(470,0.5,-42), + ang = Angle(0,0,0), + nohide=true +} + +ENT.Lights = { + [1] = { "headlight", Vector(475,0,-20), Angle(0,0,0), Color(188,130,88), brightness = 5 ,fov = 90, texture = "models/metrostroi_train/equipment/headlight",shadows = 1,headlight=true}, + [22] = { "headlight", Vector(450,-40.5,40.2), Angle(90,0,0), Color(255,130,88), fov=125,farz=80,brightness = 2,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 = 2, distance = 200}, + [10] = { "dynamiclight", Vector(-150, 0, -5), Angle(0,0,0), Color(255, 176, 59), brightness = 2, 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}, + + [23] = { "dynamiclight", Vector(425,0,35), Angle(0,0,0), Color(252, 157, 77), brightness = 0.0005, distance = 600, hidden = "salon2"}, + -- Interior + [30] = { "light", Vector(465+5 , -47, -41), 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 , 47, -41), 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, 46), Angle(0,0,0), Color(255,220,180), brightness = 0.2, scale = 2, texture = "sprites/light_glow02", size = 2 }, + + Lamps_pult = {"light", Vector(450,-55,31), 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(412,0,42.5), 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.EmergencyValveEPKRamp = 0 + self.EmergencyBrakeValveRamp = 0 +end +function ENT:UpdateWagonNumber() + local count = math.max(3,math.ceil(math.log10(self.WagonNumber+1))) + for i=0,3 do + self:ShowHide("TrainNumberL"..i,i 0,cab1S) + self:SetLightPower("Lamps_cab", cab1S > 0,cab1S) + if not half1 then + self:SetLightPower(9,emer1S > 0,emer1S*0.2+emer2S*0.8) + self:SetLightPower(10,emer2S > 0,emer2S) + self:SetLightPower(11, false) + self:SetLightPower(12, false) + self:SetLightPower(13, false) + else + self:SetLightPower(9,false) + self:SetLightPower(10,false) + self:SetLightPower(11, half1S > 0, half1S*0.3+half2S*0.7) + self:SetLightPower(12, half1S > 0, half1S*0.3+half2S*0.7) + self:SetLightPower(13, half1S > 0, half1S*0.3+half2S*0.7) + end + + self:Animate("UAVALever", self:GetPackedBool("UAVA") and 1 or 0, 0,0.6, 128, 3,false) + self:Animate("EmergencyBrakeValve", self:GetPackedBool("EmergencyBrakeValve") and 1 or 0, 0.5,0, 64, 3,false) + + self:Animate("brake_disconnect",self:GetPackedBool("DriverValveBLDisconnect") and 0 or 1,0.25,0.5, 4,false) + self:Animate("train_disconnect",self:GetPackedBool("DriverValveTLDisconnect") and 1 or 0,0.25,0, 4,false) + + 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:ShowHideSmooth("Lamps_pult",PL) + self:SetLightPower(22,PL>0,PL) + self:SetLightPower("Lamps_pult",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 + + -- Simulate pressure gauges getting stuck a little + self:Animate("brake",1-self:GetPackedRatio("CranePosition"),0.00, 0.48, 256,24) + self:Animate("controller",self:GetPackedRatio("ControllerPosition"),0.148, 0.333, 2,false) + self:Animate("reverser",self:GetPackedRatio("ReverserPosition"),0.6, 0.4, 4,false) + self:Animate("volt1",self:GetPackedRatio("BatteryVoltage"),0.62,0.495,45,3) + self:Animate("rcureverser",self:GetPackedBool("RCUPosition") and 1 or 0,0,0.5,3,false) + self:ShowHide("reverser",self:GetNW2Int("WrenchMode",0)==1) + self:ShowHide("rcureverser",self:GetNW2Int("WrenchMode",0)==3) + + self:Animate("brake_line",self:GetPackedRatio("BLPressure"),0.625, 0.839, 256,2)--,,0.01) + self:Animate("train_line",self:GetPackedRatio("TLPressure"),0.625, 0.839, 256,2)--,,0.01) + self:Animate("brake_cylinder",self:GetPackedRatio("BCPressure"),0.04, 0.808, 256,2)--,,0.03) + self:Animate("voltmeter",self:GetPackedRatio("EnginesVoltage"),0.64,0.355,92,2) + self:Animate("ampermeter",self:GetPackedRatio("EnginesCurrent"),0.617,0.383, nil, nil, 92,20,3) + + local wheel_radius = 0.5*44.1 -- units + local speed = self:GetPackedRatio("Speed")*100 + local ang_vel = speed/(2*math.pi*wheel_radius+math.random(0,40)) + + --self:Animate("speed1", self:GetPackedRatio("Speed") > 0.5 and self:GetPackedRatio("Speed")-(self:GetPackedRatio("Speed")/10*(self:GetPackedRatio("Speed")-0.4)) or self:GetPackedRatio("Speed"), 0.76, 0.9725, nil, nil, 256,2,0.01) + + local speed1 = math.min(1,self:GetPackedRatio("Speed")) + -- Rotate wheel + self:Animate("speed1", speed1 > 0.41 and speed1-(speed1/12*(speed1-(speed1 > 0.95 and 0.634 or 0.3))) or speed1, 0.269, 0.55, nil, nil, 256,2,0.01) + + ---- + 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.79, 8, 1) + local door4 = self:Animate("door4", self:GetPackedBool("CabinDoor") and 0.99 or 0,1,0.77, 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) + if (state ~= 1 and state ~= 0) ~= self.DoorStates[id] then + if doorstate and state < 1 or not doorstate and state > 0 then + if doorstate then + self:PlayOnce(sid.."so","",1,math.Rand(0.8,1.2)) + else + self:PlayOnce(sid.."sc","",1,math.Rand(0.8,1.2)) + end + 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.8+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) + -- 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-15)/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_medium1",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+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) + 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 + self:SetSoundState("rk",(CurTime() - (self.RKTimer or 0)) < 0.2 and 0.7 or 0,1) + + 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:Draw() + self.BaseClass.Draw(self) +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: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 == "LK1" then + local speed = self:GetPackedRatio("Speed") + local id = range > 0 and "lk4_on" or "lk4_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 == "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 == "M" then + local speed = self:GetPackedRatio("Speed") + local id = range > 0 and "lk4_on" or "lk4_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 == "RKR" then + local speed = self:GetPackedRatio("Speed") + self.SoundPositions[soundid][1] = 440-Lerp(speed/0.1,0,330) + return soundid,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "brake" then + self:PlayOnce("brake_f",location,range,pitch) + self:PlayOnce("brake_b",location,range,pitch) + return + end + if soundid == "UAVAC" then + return "uava_reset",location,range,pitch + end + end + return soundid,location,range,pitch +end + +Metrostroi.GenerateClientProps() diff --git a/lua/entities/gmod_subway_81-702_int/init.lua b/lua/entities/gmod_subway_81-702_int/init.lua new file mode 100644 index 0000000..492544a --- /dev/null +++ b/lua/entities/gmod_subway_81-702_int/init.lua @@ -0,0 +1,455 @@ +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","KU1","KU2","KU3","KU4","KU5","KU6","KU7","KU8","KU9","KU10","SN","VRP","UAVA","EmergencyBrakeValve","GV","UAVAC", + "R_Program1","R_Program2", + "DriverValveBLDisconnect","DriverValveTLDisconnect", +} + +function ENT:Initialize() + self.Plombs = { + --RST = true, + Init = true, + UAVA = true, + } + -- Set model and initialize + self:SetModel("models/metrostroi_train/81-702/81-702.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create seat entities + self.DriverSeat = self:CreateSeat("driver",Vector(425,-38.2,-31.5),Angle(0,0,0)) + self.InstructorsSeat = self:CreateSeat("instructor",Vector(430,40,-48+6+2.5),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-1.8,0,-97+4),Angle(0,180,0),true,"702") + self.RearBogey = self:CreateBogey(Vector(-317-2.7,0,-97+4),Angle(0,0,0),false,"702") + self.FrontCouple = self:CreateCouple(Vector( 419.5+3.5,0,-75),Angle(0,0,0),true,"702") + self.RearCouple = self:CreateCouple(Vector(-421.5-3.5,0,-75),Angle(0,180,0),false,"702") + else + self.FrontBogey = self:CreateBogey(Vector( 317-1.8,0,-97+5.6),Angle(0,180,0),true,"702") + self.RearBogey = self:CreateBogey(Vector(-317-2.7,0,-97+5.6),Angle(0,0,0),false,"702") + self.FrontCouple = self:CreateCouple(Vector( 419.5+3.5-3-2.5,0,-75),Angle(0,0,0),true,"702") + self.RearCouple = self:CreateCouple(Vector(-421.5-3.5+3, 0,-75),Angle(0,180,0),false,"702") + end + --self.FrontBogey = self:CreateBogey(Vector( 317-5,0,-97+8),Angle(0,180,0),true,"717" or "702") + --self.RearBogey = self:CreateBogey(Vector(-317+0,0,-97+8),Angle(0,0,0),false,"717" or "702") + 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_EQUAL] = {"R_Program1Set",helper="R_Program1Set"}, + [KEY_MINUS] = {"R_Program2Set",helper="R_Program2Set"}, + + [KEY_G] = "VRPSet", + [KEY_N] = "VZSet", + + [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] = {"KU4",helper="KU10Set"}, + [KEY_D] = "KU6", + [KEY_V] = {"KU7Toggle",helper="KU8Toggle"}, + [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",helper="EmergencyBrakeValveToggle"}, + + [KEY_PAD_ENTER] = "KVWrenchKV", + [KEY_PAD_0] = "DriverValveDisconnect", + [KEY_LSHIFT] = { + [KEY_W] = "KVUp_Unlocked", + + [KEY_1] = "KU1Set", + [KEY_2] = "KU2Set", + [KEY_L] = "DriverValveDisconnect", + + [KEY_7] = "KVWrenchNone", + [KEY_9] = "KVWrenchKV9", + [KEY_0] = "KVWrenchKV", + [KEY_6] = "KVSetT1A", + + [KEY_PAD_ENTER] = "KVWrenchNone", + }, + } + 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 = "RearTrainLineIsolationToggle", + Pos = Vector(-474.6, -27, -62), Radius = 8, + }, + { + ID = "RearBrakeLineIsolationToggle", + Pos = Vector(-474.6, 27, -62), Radius = 8, + }, + { + ID = "FrontDoor", + Pos = Vector(460,34,-10), Radius = 12, + }, + { + ID = "CabinDoor", + Pos = Vector(453,54,-10), Radius = 8, + }, + { + ID = "CabinDoor", + Pos = Vector(453,54,-26), Radius = 8, + }, + { + ID = "CabinDoor", + Pos = Vector(395,60,-10), Radius = 16, + }, + { + ID = "PassengerDoor", + Pos = Vector(381,30,8), Radius = 16, + }, + { + ID = "RearDoor", + Pos = Vector(-457,-35,-10), Radius = 20, + }, + { + ID = "GVToggle", + Pos = Vector(156.50,58.49,-71.08), Radius = 10, + }, + { + ID = "AirDistributorDisconnectToggle", + Pos = Vector(-224.5, 50, -66), Radius = 20, + }, + } + + -- Cross connections in train wires + self.TrainWireInverts = {} + self.TrainWireCrossConnections = { + [5] = 4, -- Reverser F<->B + [31] = 32, -- Doors L<->R + } + + -- Parking brake ratio + self.ManualBrake = 0.0 + self.RearDoor = false + self.FrontDoor = false + self.CabinDoor = false + self.PassengerDoor = false + + self:OnButtonPress("KVWrenchNone") + 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("Headlights1",Panel.Headlights1 > 0) + self:SetPackedBool("Headlights2",Panel.Headlights2 > 0) + self:SetPackedBool("PanelLights",self.PanelLamp.Value > 0.5) + + local lightsActive2 = math.min(1,self.Panel.MainLights2)^2 + local lightsActive1 = math.min(1,self.Panel.MainLights1)^2 + local emerActive1 = self.Panel.EmergencyLights1 + local emerActive2 = self.Panel.EmergencyLights2 + self:SetPackedBool("Lamps_emer1",emerActive1 > 0) + self:SetPackedBool("Lamps_emer2",emerActive2 > 0) + self:SetPackedBool("Lamps_half1",lightsActive1 > 0) + self:SetPackedBool("Lamps_half2",lightsActive2 > 0) + self:SetPackedRatio("LampsStrength",lightsActive1) + + -- 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) + + self:SetPackedBool("AnnPlay",self.Panel.AnnouncerPlaying > 0) + + -- Red RP + local TW18 = 0 + if self.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 + --print(self.RV1.Value,self.SR1.Value,self.KSB1.Value,self.Electric.ThyristorState) + self:SetPackedRatio("RRP",math.Clamp(TW18^0.7,0,1)) + self:SetPackedBool("GRP",self.Panel.GRP > 0) + self:SetPackedBool("SD",self.Panel.SD > 0) + self.TrueBrakeAngle = self.TrueBrakeAngle or 0 + if self.ManualBrake < 0.001 and self.ManualBrake > self.TrueBrakeAngle then self.TrueBrakeAngle = self.ManualBrake end + if self.ManualBrake > 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:SetPackedBool("VPR",self.Panel.VPR > 0) + self:SetPackedBool("Compressor",Pneumatic.Compressor == 1.0) + + self:SetPackedBool("RearDoor",self.RearDoor) + self:SetPackedBool("FrontDoor",self.FrontDoor) + self:SetPackedBool("PassengerDoor",self.PassengerDoor) + self:SetPackedBool("CabinDoor",self.CabinDoor) + + + -- Feed packed floats + self:SetNW2Int("WrenchMode",self.KVWrenchMode) + self:SetPackedRatio("CranePosition", 1-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/82.0) + --print(self.LK1.Value,self.LK2.Value,self.LK3.Value,self.LK4.Value,self.LK5.Value,self.TSH.Value) + --print(self.LK1.Value,self.LK2.Value,self.LK3.Value,self.LK4.Value,self.LK5.Value,self.TSH.Value) + -- Update ARS system (no ars on E) +-- self:SetPackedRatio(3, self.ALS_ARS.Speed/100.0) + 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+0*(A < 0 and 1 or 0) + self.FrontBogey.Reversed = (self.PositionSwitch.NZ > 0.5) + self.RearBogey.MotorForce = 22050+0*(A < 0 and 1 or 0) + self.RearBogey.Reversed = (self.PositionSwitch.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() + -- Temporary hacks + --self:SetNW2Float("V",self.Speed) + --self:SetNW2Float("A",self.Acceleration) + + 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 + 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 + + if button == "ParkingBrakeLeft" then + self.ManualBrake = math.max(0.0,(self.ManualBrake or 0) - 0.05) + if self.ManualBrake == 0.0 then return end + end + if button == "ParkingBrakeRight" then + self.ManualBrake = math.min(1.0,(self.ManualBrake or 0) + 0.05) + 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 + + 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("rcu_in","cabin",0.7) + self.KVWrenchMode = 3 + elseif self.KVWrenchMode ~= 0 and self.KV.ReverserPosition == 0 then + if self.KVWrenchMode == 3 then + self:PlayOnce("rcu_out","cabin",0.7) + else + self:PlayOnce("revers_out","cabin",0.7) + end + self.KVWrenchMode = 0 + self.KV:TriggerInput("Enabled",0) + end + end + 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 == "KVT2Set" then self.KVT:TriggerInput("Close",1) end + if button == "KU4" and self.KU7.Value < 1 then self.KU4:TriggerInput("Close",1) end + if button == "KU6" and self.KU7.Value < 1 then self.KU6:TriggerInput("Close",1) 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.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 == "KU4" and self.KU7.Value < 1 then self.KU4:TriggerInput("Open",1) end + if button == "KU6" and self.KU7.Value < 1 then self.KU6:TriggerInput("Open",1) 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_81-702_int/shared.lua b/lua/entities/gmod_subway_81-702_int/shared.lua new file mode 100644 index 0000000..4ded6cf --- /dev/null +++ b/lua/entities/gmod_subway_81-702_int/shared.lua @@ -0,0 +1,633 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.PrintName = "D (81-702) int" +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" +ENT.SkinsType = "81-702" +ENT.Model = "models/metrostroi_train/81-702/81-702.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 + +-- 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 + +ENT.AnnouncerPositions = { + {Vector(412,-49 ,61),80,0.2}, + {Vector(-3,-60, 62),300,0.3}, + {Vector(-3,60 ,62),300,0.3}, +} + +ENT.MirrorCams = { + Vector(441,75,9),Angle(1,180,0),15, + Vector(441,-75,9),Angle(1,180,0),15, +} + +ENT.Cameras = { + {Vector(407.5+25,32,25),Angle(0,180,0),"Train.702.Breakers1"}, + {Vector(407.5+27,46,21),Angle(0,180,0),"Train.702.Breakers2"}, + {Vector(407.5+35,-25,23),Angle(0,180,0),"Train.702.Breakers3"}, + {Vector(407.5+40,40,12),Angle(0,80,0),"Train.Common.HelpersPanel"}, + {Vector(407.5+20,40,5),Angle(30,10,0),"Train.703.Parking"}, + {Vector(450+13,0,26),Angle(60,0,0),"Train.Common.CouplerCamera"}, +} +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.52} + self.SoundPositions["rolling_80"] = {480,1e12,Vector(0,0,0),0.75} + + 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["epv_on"] = "subway_trains/common/pneumatic/epv_on.mp3" + self.SoundNames["epv_off"] = "subway_trains/common/pneumatic/epv_off.mp3" + self.SoundPositions["epv_on"] = {100,1e9,Vector(437.2,-53.1,-32.0),1} + self.SoundPositions["epv_off"] = {100,1e9,Vector(437.2,-53.1,-32.0),1} + self.SoundPositions["epv_off"] = {60,1e9,Vector(437.2,-53.1,-32.0),1} + -- Релюшки + --Подвагонка + self.SoundNames["lk2_on"] = "subway_trains/717/pneumo/lk1_on.mp3" + self.SoundNames["lk2_off"] = "subway_trains/717/pneumo/lk2_off.mp3" + self.SoundNames["lk3_on"] = "subway_trains/717/pneumo/lk2_on.mp3" + self.SoundNames["lk3_off"] = "subway_trains/717/pneumo/lk2_off.mp3" + self.SoundNames["lk4_on"] = "subway_trains/717/pneumo/lk3_on.mp3" + self.SoundNames["lk4_off"] = "subway_trains/717/pneumo/lk3_off.mp3" + self.SoundPositions["lk2_on"] = {440,1e9,Vector(-60,-40,-66),0.33} + self.SoundPositions["lk2_off"] = {440,1e9,Vector(-60,-40,-66),0.3} + self.SoundPositions["lk3_on"] = self.SoundPositions["lk2_on"] + self.SoundPositions["lk3_off"] = self.SoundPositions["lk2_off"] + self.SoundPositions["lk4_on"] = self.SoundPositions["lk2_on"] + self.SoundPositions["lk4_off"] = self.SoundPositions["lk2_off"] + self.SoundNames["RKR"] = "subway_trains/d/pneumatic/rvr.mp3" + self.SoundPositions["RKR"] = {200,1e9,Vector(-27,-40,-66),0.25} + self.SoundNames["T"] = "subway_trains/d/pneumatic/rvr.mp3" + self.SoundPositions["T"] = {200,1e9,Vector(-27,-40,-66),0.25} + + self.SoundNames["compressor"] = {loop=2.0,"subway_trains/d/pneumatic/compressor/compessor_d_start.wav","subway_trains/d/pneumatic/compressor/compessor_d_loop.wav", "subway_trains/d/pneumatic/compressor/compessor_d_end.wav"} + self.SoundPositions["compressor"] = {450,1e9,Vector(-118,-40,-66),0.75} + self.SoundNames["prk1"] = {} + for i=1,14 do self.SoundNames["prk1"][i] = "subway_trains/d/pneumatic/rk/spin1_"..i..".wav" end + self.SoundPositions["prk1"] = {100,1e3,Vector(110,-40,-75),0.33} + self.SoundNames["prk2"] = {} + for i=1,12 do self.SoundNames["prk2"][i] = "subway_trains/d/pneumatic/rk/spin2_"..i..".wav" end + self.SoundPositions["prk2"] = self.SoundPositions["prk1"] + self.SoundNames["PN1end"] = "subway_trains/d/pneumatic/vz1_end.mp3" + self.SoundPositions["PN1end"] = {300,1e9,Vector(-183,0,-70),0.65} + 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} + + 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(453.66,-21,-15)} + 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"] = {80,1e9,Vector(411.9,-26.4,-11.2)} + 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"] = {80,1e9,Vector(452.3,-24.0,4.0)} + + 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/kru2-3_1.mp3", + "subway_trains/717/kru/kru2-3_2.mp3", + "subway_trains/717/kru/kru2-3_3.mp3", + "subway_trains/717/kru/kru2-3_4.mp3", + } + self.SoundNames["kru_3_2"] = { + "subway_trains/717/kru/kru3-2_1.mp3", + "subway_trains/717/kru/kru3-2_2.mp3", + "subway_trains/717/kru/kru3-2_3.mp3", + "subway_trains/717/kru/kru3-2_4.mp3", + } + self.SoundPositions["kru_0_1"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_1_2"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_2_1"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_1_0"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_2_3"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_3_2"] = {80,1e9,Vector(452.3,-24.0,4.0)} + + self.SoundNames["kr_open"] = { + "subway_trains/717/cover/cover_open1.mp3", + "subway_trains/717/cover/cover_open2.mp3", + "subway_trains/717/cover/cover_open3.mp3", + } + self.SoundNames["kr_close"] = { + "subway_trains/717/cover/cover_close1.mp3", + "subway_trains/717/cover/cover_close2.mp3", + "subway_trains/717/cover/cover_close3.mp3", + } + + 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["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(449.14598,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,36,-78),0.5} + self.SoundPositions["gv_b"] = self.SoundPositions["gv_f"] + + 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(452, 0,-63),1} + self.SoundNames["rear_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["rear_isolation"] = {300,1e9,Vector(-474, 0,-63),1} + + self.SoundNames["crane013_brake2"] = {loop=true,"subway_trains/common/pneumatic/013_brake2.wav"} + self.SoundPositions["crane013_brake2"] = {80,1e9,Vector(453.21,-54.92,-8.50),0.86} + self.SoundNames["crane334_brake_high"] = {loop=true,"subway_trains/common/pneumatic/334_brake.wav"} + self.SoundPositions["crane334_brake_high"] = {80,1e9,Vector(453.21,-54.92,-8.50),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(453.21,-54.92,-8.50),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(453.21,-54.92,-8.50),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(453.21,-54.92,-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(453.21,-54.92,-70),0.45} + self.SoundNames["crane334_release"] = {loop=true,"subway_trains/common/pneumatic/334_release3.wav"} + self.SoundPositions["crane334_release"] = {80,1e9,Vector(453.21,-54.92,-8.50),0.2} + self.SoundNames["crane334_release_2"] = {loop=true,"subway_trains/common/pneumatic/334_release2.wav"} + self.SoundPositions["crane334_release_2"] = {80,1e9,Vector(453.21,-54.92,-8.50),0.2} + + self.SoundNames["valve_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["valve_brake"] = {400,1e9,Vector(464.40,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["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/d/kv20/kv20_0_T1.wav"} + self.SoundNames["kv40_t1_0"] = {"subway_trains/d/kv20/kv20_T1_0.wav"} + self.SoundNames["kv40_t1_t1a"] = {"subway_trains/d/kv20/kv20_T1_T1A.wav"} + self.SoundNames["kv40_t1a_t1"] = {"subway_trains/d/kv20/kv20_T1A_T1.wav"} + self.SoundNames["kv40_t1a_t2"] = {"subway_trains/d/kv20/kv20_T1A_T2.wav"} + self.SoundNames["kv40_t2_t1a"] = {"subway_trains/d/kv20/kv20_T2_T1A.wav"} + self.SoundNames["kv40_0_x1"] = {"subway_trains/d/kv20/kv20_0_X1.wav"} + self.SoundNames["kv40_x1_0"] = {"subway_trains/d/kv20/kv20_X1_0.wav"} + self.SoundNames["kv40_x1_x2"] = {"subway_trains/d/kv20/kv20_X1_X2.wav"} + self.SoundNames["kv40_x2_x1"] = {"subway_trains/d/kv20/kv20_X2_X1.wav"} + self.SoundNames["kv40_x2_x3"] = {"subway_trains/d/kv20/kv20_X2_X3.wav"} + self.SoundNames["kv40_x3_x2"] = {"subway_trains/d/kv20/kv20_X3_X2.wav"} + self.SoundPositions["kv70_fix_on"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv70_fix_off"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv40_0_t1"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv70_t1_0_fix"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv40_t1_0"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv40_t1_t1a"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv40_t1a_t1"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv40_t1a_t2"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv40_t2_t1a"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv40_0_x1"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv40_x1_0"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv40_x1_x2"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv40_x2_x1"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv40_x2_x3"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + self.SoundPositions["kv40_x3_x2"] = {100,1e9,Vector(453.81,-20.61,-9.47),0.55} + + self.SoundNames["samm_revers_in"] = {"subway_trains/ezh3/rc_ars/reversor_rc_in.mp3"} + self.SoundNames["samm_revers_out"] = {"subway_trains/ezh3/rc_ars/reversor_rc_in.mp3"} + self.SoundNames["samm_0-1"] = {"subway_trains/ezh3/rc_ars/0-1.mp3"} + self.SoundNames["samm_0-2"] = {"subway_trains/ezh3/rc_ars/0-2.mp3"} + self.SoundNames["samm_2-0"] = {"subway_trains/ezh3/rc_ars/2-0.mp3"} + self.SoundPositions["samm_0-2"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_2-0"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_0-1"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_revers_out"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_revers_in"] = {60,1e9,Vector(442.2-6,-50,-10)} + + 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"] = {100,1e9,Vector(400,-40,50),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"] = {100,1e9,Vector(412,-49 ,61),0.2} + + 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(449.118378+7.6,33.493385,-14.713276),0.1} + self.SoundNames["av1a_on"] = {"subway_trains/d/av1a/av1a_on1.wav","subway_trains/d/av1a/av1a_on2.wav","subway_trains/d/av1a/av1a_on3.wav","subway_trains/d/av1a/av1a_on4.wav"} + self.SoundNames["av1a_off"] = {"subway_trains/d/av1a/av1a_off1.wav","subway_trains/d/av1a/av1a_off2.wav","subway_trains/d/av1a/av1a_off3.wav","subway_trains/d/av1a/av1a_off4.wav","subway_trains/d/av1a/av1a_off5.wav","subway_trains/d/av1a/av1a_off6.wav"} + self.SoundPositions["av1a_on"] = {100,1e9,Vector(405,40,30)} + self.SoundPositions["av1a_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"} + + self.SoundNames["pneumo_TL_open"] = "subway_trains/common/334/334_open.mp3" + 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["pneumo_idle"] = { + "subway_trains/ezh3/pneumatic/idle.wav", + } + self.SoundPositions["pneumo_idle"] = {300,1e9,Vector(438.50,-50,-40),1} + + 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(413.4-0.7,-56.7-0.05,6.9-1.15),0.3} + self.SoundPositions["igla_off"] = {50,1e9,Vector(413.4-0.7,-56.7-0.05,6.9-1.15),0.3} + self.SoundPositions["igla_start1"] = {50,1e9,Vector(413.4-0.7,-56.7-0.05,6.9-1.15),0.3} + self.SoundPositions["igla_start2"] = {50,1e9,Vector(413.4-0.7,-56.7-0.05,6.9-1.15),0.2} + + self.SoundNames["upps"] = {"subway_trains/common/other/upps/upps1.mp3","subway_trains/common/other/upps/upps2.mp3"} + self.SoundPositions["upps"] = {60,1e9,Vector(443,-64,4),0.5} + + 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","subway_trains/common/pnm/pnm_switch_off2.mp3"} + self.SoundNames["pnm_button1_on"] = { + "subway_trains/common/pnm/pnm_button_push.mp3", + "subway_trains/common/pnm/pnm_button_push2.mp3", + "subway_trains/common/pnm/pnm_button_push3.mp3", + } + + self.SoundNames["pnm_button2_on"] = { + "subway_trains/common/pnm/pnm_button_push4.mp3", + "subway_trains/common/pnm/pnm_button_push5.mp3", + "subway_trains/common/pnm/pnm_button_push6.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", + "subway_trains/common/pnm/pnm_button_release6.mp3", + } + + self.SoundNames["horn"] = {loop=0.5,"subway_trains/d/pneumatic/horn/horn_start.wav","subway_trains/d/pneumatic/horn/horn_loop.wav", "subway_trains/d/pneumatic/horn/horn_end.wav"} + self.SoundPositions["horn"] = {1100,1e9,Vector(480,-30,30)} + + --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)} + + for i=0,3 do + for k=0,1 do + self.SoundNames["door"..i.."x"..k.."r"] = {"subway_trains/d/door_roll.wav",loop=true} + self.SoundPositions["door"..i.."x"..k.."r"] = {150,1e9,GetDoorPosition(i,k),0.7} + self.SoundNames["door"..i.."x"..k.."o"] = {"subway_trains/d/door_open_end.wav","subway_trains/d/door_open_end2.wav"} + self.SoundPositions["door"..i.."x"..k.."o"] = {150,1e9,GetDoorPosition(i,k),0.7} + self.SoundNames["door"..i.."x"..k.."c"] = {"subway_trains/d/door_close_end.wav","subway_trains/d/door_close_end2.wav",} + self.SoundPositions["door"..i.."x"..k.."c"] = self.SoundPositions["door"..i.."x"..k.."o"] + self.SoundNames["door"..i.."x"..k.."so"] = {"subway_trains/d/door_open_start2.wav","subway_trains/d/door_start_open.wav"} + self.SoundPositions["door"..i.."x"..k.."so"] = self.SoundPositions["door"..i.."x"..k.."o"] + self.SoundNames["door"..i.."x"..k.."sc"] = {"subway_trains/d/door_close_start.wav","subway_trains/d/door_close_start2.wav",} + self.SoundPositions["door"..i.."x"..k.."sc"] = self.SoundPositions["door"..i.."x"..k.."o"] + 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["junk_small"] = { + "subway_trains/common/junk/junk_small1.mp3", + "subway_trains/common/junk/junk_small2.mp3", + "subway_trains/common/junk/junk_small3.mp3", + "subway_trains/common/junk/junk_small4.mp3", + "subway_trains/common/junk/junk_small5.mp3", + "subway_trains/common/junk/junk_small6.mp3", + } + self.SoundNames["junk_medium"] = { + "subway_trains/common/junk/junk_medium1.mp3", + "subway_trains/common/junk/junk_medium2.mp3", + "subway_trains/common/junk/junk_medium3.mp3", + "subway_trains/common/junk/junk_medium4.mp3", + "subway_trains/common/junk/junk_medium5.mp3", + "subway_trains/common/junk/junk_medium6.mp3", + } + self.SoundNames["junk_enginestart_speed"] = { + "subway_trains/common/junk/junk_enginestart_speed1.mp3", + "subway_trains/common/junk/junk_enginestart_speed2.mp3", + "subway_trains/common/junk/junk_enginestart_speed3.mp3", + "subway_trains/common/junk/junk_enginestart_speed4.mp3", + "subway_trains/common/junk/junk_enginestart_speed5.mp3", + "subway_trains/common/junk/junk_enginestart_speed6.mp3", + } +end + +function ENT:InitializeSystems() + self:LoadSystem("Electric","81_702_Electric") + + -- Токоприёмник + self:LoadSystem("TR","TR_3B") + -- ЭлектротÑговые двигатели + self:LoadSystem("Engines","DK_104G") + + -- РезиÑторы Ð´Ð»Ñ Ñ€ÐµÐ¾Ñтата/пуÑковых Ñопротивлений + self:LoadSystem("KF_6A") + -- РезиÑторы Ð´Ð»Ñ Ð¾ÑÐ»Ð°Ð±Ð»ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð±ÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ + self:LoadSystem("KF_7A") + + -- РеоÑтатный контроллер Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑƒÑковыми ÑÐ¾Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð»ÐµÐ½Ð¸Ñ + self:LoadSystem("RheostatController","PKG_758B") + -- Групповой переключатель положений + self:LoadSystem("PositionSwitch","PKG_759B") + -- Кулачковый контроллер + self:LoadSystem("KV","KV_20") + --Разоеденитель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼ мотовор + + + -- Ящики Ñ Ñ€ÐµÐ»Ðµ и контакторами + self:LoadSystem("LK_753B") + self:LoadSystem("LK_753V") + self:LoadSystem("YAR_10A") + self:LoadSystem("YAK_4K") + + -- ПневмоÑиÑтема 81-703 + self:LoadSystem("Pneumatic","81_702_Pneumatic") + -- Панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð” + self:LoadSystem("Panel","81_702_Panel") + -- Everything else + self:LoadSystem("Battery") + self:LoadSystem("Horn") + + self:LoadSystem("ALSCoil") + + self:LoadSystem("Announcer","81_71_Announcer", "AnnouncementsRRI") +end +function ENT:PostInitializeSystems() + self.Electric:TriggerInput("Type",self.Electric.DcI) + if self.VU then self.VU:TriggerInput("Set",0) end +end + +ENT.SubwayTrain = { + Type = "D", + Name = "81-702", + Manufacturer = "MVM", + WagType = 2, + ARS = { + HaveASNP = false, + NoEPK = true, + NoUAVA = true, + }, + ALS = { + HaveAutostop = true, + }, + EKKType = 702, +} + +ENT.NumberRanges = {{807,1000},{2001,2468}} \ No newline at end of file diff --git a/lua/entities/gmod_subway_81-703/cl_init.lua b/lua/entities/gmod_subway_81-703/cl_init.lua new file mode 100644 index 0000000..ff17bea --- /dev/null +++ b/lua/entities/gmod_subway_81-703/cl_init.lua @@ -0,0 +1,1613 @@ +-------------------------------------------------------------------------------- +-- 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.ButtonMap["PanelLamp"] = { + pos = Vector(443.5,-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(452.4-0.3,-30.1-1,-7.29+0.15), + ang = Angle(0,-90,90-20), + width = 315, + height = 240, + scale = 0.0588, + hideseat=0.2, + + buttons = { + ----Лампы + --{ID = "RK", x=41.0+41.7*2,y=58.4, radius=20, tooltip="", model = { + -- lamp = {model = "models/metrostroi_train/81-703/cabin_lamp_red2.mdl",color = Color(255,160,160),z = 10, var="RK"} + --}}, + {ID = "PP1", x=42.0+41.7*0,y=58.3, radius=20, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-703/cabin_lamp_green.mdl",color = Color(98,178,178),z = 10, var="PP1"}, + sprite = {bright=0.25,size=0.25,scale=0.07,color=Color(40,255,100),z=12,} + }}, + {ID = "PP6", x=42.5+41.7*1,y=58.3, radius=20, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-703/cabin_lamp_white.mdl",color = Color(178,126,84),z = 10, var="PP6"}, + sprite = {bright=0.25,size=0.25,scale=0.07,color=Color(255,180,160),z=12,} + }}, + {ID = "RRP", x=42.0+41.7*2,y=58.3, 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 = "GRP", x=41.0+41.7*3,y=58.3, 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 = "SD", x=41.3+41.7*4,y=58.3, radius=20, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-703/cabin_lamp_white.mdl",color = Color(91,91,178),z = 10, var="SD",}, + sprite = {bright=0.25,size=0.25,scale=0.07,color=Color(100,120,255),z=12,} + }}, + {ID = "SDW", x=40.9+41.7*5,y=58.3, radius=20, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-703/cabin_lamp_white.mdl",color = Color(178,126,112),z = 10, var="SDW",}, + sprite = {bright=0.25,size=0.25,scale=0.07,color=Color(255,180,160),z=12,} + }}, + ----Кнопки + { ID = "KU4Set", x=35.8+44*0, y=127.3, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-703/cabin_button_black.mdl",ang = 180,z=2, + var="KU4",speed=16, + sndvol = 0.10, snd = function(val) return val and "button2_on" or "button1_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + { ID = "KU5Set", x=35.8+44*1, y=127.3, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-703/cabin_button_black.mdl",ang = 180,z=2, + var="KU5",speed=16, + sndvol = 0.10, snd = function(val) return val and "button3_on" or "button1_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + { ID = "KU9Set", x=35.8+44*2, y=127.3, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-703/cabin_button_black.mdl",ang = 180,z=2, + var="KU9",speed=16, + sndvol = 0.10, snd = function(val) return val and "button2_on" or "button1_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + { ID = "KU8Set", x=35.8+44*3, y=127.3, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-703/cabin_button_red.mdl",ang = 180,z=2, + var="KU8",speed=16, + sndvol = 0.10, snd = function(val) return val and "button2_on" or "button1_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + { ID = "KU10Set", x=195.5, y=171.8, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-703/cabin_button_red.mdl",ang = 180,z=2, + var="KU10",speed=16, + sndvol = 0.10, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + { ID = "KU11Set", x=35.8+44*4, y=127.3, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-703/cabin_button_black.mdl",ang = 180,z=2, + var="KU11",speed=16,vmin=0,vmax=1, + sndvol = 0.10, snd = function(val) return val and "button1_on" or "button1_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + { ID = "KU7Set", x=35.8+44*5, y=127.3, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-703/cabin_button_red.mdl",ang = 180,z=2, + 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 = "KU7KToggle", x=35.8+44*5, y=127.3-34, radius=15, tooltip="", model = { + model = "models/metrostroi_train/81-703/cabin_doors_cover.mdl",ang = 110,z=11,vmin=0.21,vmax=0.0, + var="KU7K",speed=1.5,disableinv="KU7Set", + sndvol = 0.10, snd = function(val) return val and "kr_left" or "kr_right" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + varTooltip = true, + }}, + { ID = "KU6Set", x=96.8, y=171.8, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-703/cabin_button_black.mdl",ang = 180,z=2, + 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 = "KU6KToggle", x=96.8+5, y=171.8-34, radius=15, tooltip="", model = { + model = "models/metrostroi_train/81-703/cabin_doors_cover.mdl",ang = 180-10,z=11,vmin=0,vmax=0.21, + var="KU6K",speed=1.5,disableinv="KU6Set", + sndvol = 0.10, snd = function(val) return val and "kr_left" or "kr_right" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + varTooltip = true, + }}, + { ID = "KU1Toggle", x=49,y=190,radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, + var="KU1",speed=6, vmin=1,vmax=0, + 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=245,y=190,radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, + var="KU2",speed=6, vmin=1,vmax=0, + 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"}, + }}, + { ID = "KU12Toggle", x=145,y=190,radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, + var="KU12",speed=6, vmin=1,vmax=0, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} + +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 + +addTW10Cosume("Main") + +--VU Panel +ENT.ButtonMap["VU"] = { + pos = Vector(456,-17.80,20), + ang = Angle(0,270,90), + width = 70, + height = 100, + scale = 0.0625, + hideseat=0.2, + + buttons = { + { ID = "VUToggle", x=0, y=0, w=70, h=100, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.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}}, + 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(459,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/81-702/buttons/vu_13b.mdl", z=20, ang=Angle(-90,0,0), + var="KU16",speed=6, + sndvol = 0.5, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} + + +ENT.ButtonMap["Stopkran"] = { + pos = Vector(459,27,20.7), + ang = Angle(0,-90,90), + width = 200, + height = 1300, + scale = 0.1/2, + buttons = { + {ID = "EmergencyBrakeValveToggle",x=0, y=0, w=200, h=1300, tooltip="", tooltip="",tooltip="",states={"Train.Buttons.Closed","Train.Buttons.Opened"},var="EmergencyBrakeValve"}, + } +} +ENT.ClientProps["stopkran"] = { + model = "models/metrostroi_train/81-717/stop_mvm.mdl", + pos = Vector(456,21.2,13), + ang = Angle(0,270,0), + hide = 0.8, +} + +ENT.ButtonMap["AVMain"] = { + pos = Vector(397.5-0.4,38.8-1,36), + ang = Angle(0,90,90), + width = 335, + height = 380, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "AVToggle", x=0, y=0, w=300, h=380, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_av8r.mdl", z=80, 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(397.5,41,18), + ang = Angle(0,90,90), + width = 290+0, + height = 155, + 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_brown.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=110, y=0, w=100, h=140, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.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=220, y=0, w=100, h=140, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.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), + }}, + } +} + +ENT.ClientProps["tab"] = { + model = "models/metrostroi_train/Equipment/tab.mdl", + pos = Vector(12.0-0.4,-1,-2), + ang = Angle(0,0,0), + skin = 0, + hide = 2, +} + +ENT.ButtonMap["AV2"] = { + pos = Vector(397.5-0.4,25.40-1,31.1), + ang = Angle(0,90,90), + width = 180, + height = 136, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "RSTToggle", x=0, y=0, w=100, h=136, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.mdl", z=20, ang = 180, + labels={{model="models/metrostroi_train/81-707/labels/vu_labels.mdl",skin=3,ang=90,z=20.9,x=0,y=-12.5}}, + var="RST",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, +} +} + +-- Battery panel +ENT.ButtonMap["Battery"] = { + pos = Vector(398.98-0.4,23.24-1,22.5), + ang = Angle(0,90,90), + width = 250, + height = 160, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "VBToggle", x=0, y=0, w=250, h=160, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_brown_3.mdl", z=15, ang = 180, + var="VB",speed=6, + sndvol = 0.8, snd = function(val) return val and "vu223_on" or "vu223_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} + + + +-- Parking brake panel +ENT.ButtonMap["ParkingBrake"] = { + pos = Vector(448,45.5,-2.0), + ang = Angle(0,-83,90), + width = 340, + height = 400, + scale = 0.0625, + + buttons = { + {ID = "ParkingBrakeLeft",x=0, y=0, w=170, h=400, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.ParkingBrake"),ent:GetPackedRatio("ManualBrake")*100) end}, + {ID = "ParkingBrakeRight",x=170, y=0, w=170, 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(446.8,59.2,23), + ang = Angle(0,-53,90), + width = 60, + height = 250, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "KU13Set", x=0, y=0, w=60,h=100, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/vu_13b.mdl", z=17, ang=Angle(-90,0,0), + labels={{model="models/metrostroi_train/81-707/labels/vu_labels.mdl",skin=9,ang=90,z=10,x=0,y=-13.5}}, + var="KU13",speed=6, + sndvol = 1, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "KU3Toggle", x=0, y=110, w=60,h=100, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/vu_13b.mdl", z=17, ang=Angle(-90,0,0), + labels={{model="models/metrostroi_train/81-707/labels/vu_labels.mdl",skin=10,ang=90,z=10,x=0,y=-13.5}}, + var="KU3",speed=6, + sndvol = 1, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Unlocked","Train.Buttons.Locked"}, + }}, + {ID = "R_Program1Set", x=14, y=235, radius=15, tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = 0, + labels={{model="models/metrostroi_train/81-702/labels/vu_labels.mdl",skin=7,ang=90,z=2,x=0,y=-24}}, + var="R_Program1",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button1_on" or "button3_off" end, + sndmin = 60,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "R_Program2Set", x=46, y=235, radius=15, tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = 0, + labels={{model="models/metrostroi_train/81-702/labels/vu_labels.mdl",skin=8,ang=90,z=2,x=0,y=-24}}, + var="R_Program2",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button1_on" or "button3_off" end, sndmin = 60,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + } +} + + +ENT.ButtonMap["HVMeters"] = { + pos = Vector(450.5,-56.7,34.5), + ang = Angle(0,-150,90), + width = 64, + height = 128, + scale = 0.0625, + + buttons = { + {ID = "!EnginesCurrent", x=0, y=0, w=64, h=60, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesCurrent"),ent:GetPackedRatio("EnginesCurrent")*1000-500) end}, + {ID = "!EnginesVoltage", x=0, y=68, w=64, h=60, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesVoltage"),ent:GetPackedRatio("EnginesVoltage")*1000) end}, + } +} +ENT.ButtonMap["Speedometer"] = { + pos = Vector(451.2,-51.7,22.5), + ang = Angle(0,-148,89), + width = 150, + height = 150, + scale = 0.0625, + + buttons = { + {ID = "!Speedometer", x=0, y=0, w=150, h=150, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.Speed"),ent:GetPackedRatio("Speed")*100) end}, + } +} +ENT.ButtonMap["BLTLPressure"] = { + pos = Vector(452.4,-53.4,10.5), + ang = Angle(0,-138,90), + width = 114, + height = 114, + 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}, + } +} +ENT.ButtonMap["BCPressure"] = { + pos = Vector(453,-50.2,4.2), + ang = Angle(0,-100,90), + + width = 78, + height = 78, + scale = 0.0625, + + buttons = { + {ID = "!BCPressure", x=39,y=39,radius=39,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BCPressure"),ent:GetPackedRatio("BCPressure")*6) end}, + } +} +ENT.ButtonMap["BatteryVoltage"] = { + pos = Vector(455.6,-18,10.8), + ang = Angle(0,270,90), + width = 60, + height = 60, + scale = 0.0625, + + buttons = { + {ID = "!BatteryVoltage", x=0,y=0,w=60,h=60,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BatteryVoltage"),ent:GetPackedRatio("BatteryVoltage")*100) end}, + } +} + + +ENT.ButtonMap["DriverValveBLDisconnect"] = { + pos = Vector(443.5,-53,-37.61), + ang = Angle(-90,0,0), + width = 200, + height = 90, + scale = 0.0625, + + buttons = { + {ID = "DriverValveBLDisconnectToggle", x=0, y=0, w=200, h=90, tooltip="", model = { + var="DriverValveBLDisconnect",sndid="brake_disconnect", + sndvol = 1, snd = function(val) return "disconnect_valve" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} +ENT.ButtonMap["DriverValveTLDisconnect"] = { + pos = Vector(447,-48,-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 = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} + +ENT.ButtonMap["FrontPneumatic"] = { + pos = Vector(463,-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+10, -30, -69), + ang = Angle(0,-90,0), + hide = 0.5, +} +ENT.ClientProps["FrontTrain"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_blue.mdl", + pos = Vector(450+10, 31, -69), + ang = Angle(0,-90,0), + hide = 0.5, +} +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+6,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-14, -30, -69), + ang = Angle(0,90,0), + hide = 0.5, +} +ENT.ClientProps["RearBrake"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_red.mdl", + pos = Vector(-450-14, 31, -69), + ang = Angle(0,90,0), + hide = 0.5, +} +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"}}, + } +} + + +-- UAVA +ENT.ButtonMap["UAVAPanel"] = { + pos = Vector(453-5,56,-3), + ang = Angle(0,-70,90), + width = 180, + height = 200, + scale = 0.0625, + + buttons = { + {ID = "UAVAToggle",x=0, y=0, w=60, h=200, tooltip="", model = { + plomb = {var="UAVAPl", ID="UAVAPl",}, + var="UAVA", + sndid="UAVALever",sndvol = 1, snd = function(val) return val and "uava_on" or "uava_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "UAVACToggle",x=60, y=0, w=120, h=200, tooltip="",var="UAVAC",states={"Train.Buttons.UAVAOff","Train.Buttons.UAVAOn"}}, + } +} + +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(460.7,16-1,40), + ang = Angle(0,-90,90), + width = 650, + height = 1850, + scale = 0.1/2, + buttons = { + {ID = "FrontDoor",x=0,y=0,w=650,h=1850, 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(411,66,40), + ang = Angle(0,0,90), + width = 642, + height = 1850, + scale = 0.1/2, + buttons = { + {ID = "CabinDoor",x=0,y=0,w=642,h=1850, 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(395.2,-16,37), + ang = Angle(0,90,90), + width = 642, + height = 1850, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=642,h=1850, 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["PassengerDoor2"] = { + pos = Vector(395.2,16,37), + ang = Angle(0,-90,90), + width = 642, + height = 1850, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=642,h=1850, tooltip=""}, + } +} + +ENT.ButtonMap["RearDoor"] = { + pos = Vector(-464,-16,37), + ang = Angle(0,90,90), + width = 650, + height = 1850, + scale = 0.1/2, + buttons = { + {ID = "RearDoor",x=0,y=0,w=650,h=1850, 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(448.91,-52.62,-4.37), + ang = Angle(0.000000,-133.000000,0.000000), + hideseat = 0.2, +} + + + +ENT.ClientProps["controller"] = { + model = "models/metrostroi_train/81-707/kv_ezh.mdl", + pos = Vector(450.6,-22.73,-5.90), + ang = Angle(0,180+15,0), + hideseat = 0.2, +} + +ENT.ClientProps["reverser"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = ENT.ClientProps["controller"].pos+Vector(0,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.6,-0.1,-1.5), + ang = Angle(180,180-20,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(447.2-4.7,-58.5+2.0,-34), + ang = Angle(7,88,-90), + hideseat = 0.2, +} +ENT.ClientProps["train_disconnect"] = { + model = "models/metrostroi_train/81-707/cran3.mdl", + pos = Vector(450.4-4.5,-54.35+2.55,-27.45), + ang = Angle(92,-100,90), + hideseat = 0.2, +} +ENT.ClientProps["parking_brake"] = { + model = "models/metrostroi_train/81-703/cabin_parking.mdl", + pos = Vector(449.735626,35.158592,-14.843545), + ang = Angle(-90.000000,8.000000,0.000000), + hideseat = 0.2, +} + + +-------------------------------------------------------------------------------- +ENT.ClientProps["train_line"] = { + model = "models/metrostroi_train/Equipment/arrow_e_nm.mdl", + pos = Vector(450.183258,-56.169998,5.598449), + ang = Angle(170.000000,-138.000000,90.000000), + hideseat = 0.2, +} + +ENT.ClientProps["brake_line"] = { + model = "models/metrostroi_train/Equipment/arrow_e_tm.mdl", + pos = Vector(450.149994,-56.150002,5.526259), + ang = Angle(170.000000,-138.000000,90.000000), + hideseat = 0.2, +} + +ENT.ClientProps["brake_cylinder"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(453.210052,-52.644321,1.665846), + ang = Angle(-124.500000,78.000000,-90.000000), + hideseat = 0.2, +} + +---------------------------------------------------------------- +ENT.ClientProps["voltmeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(448.880005,-57.949409,27.453575), + ang = Angle(-90.000000,0.000000,-59.500000), + hideseat = 0.2, +} + +ENT.ClientProps["ampermeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(448.904572,-57.946339,31.797873), + ang = Angle(-90.000000,0.000000,-59.500000), + hideseat = 0.2, +} + + +ENT.ClientProps["volt1"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(455.646423,-19.933491,7.878962), + ang = Angle(-90.000000,0.000000,0.000000), + hideseat = 0.2, +} + + +ENT.ClientProps["speed1"] = { + model = "models/metrostroi_train/Equipment/arrow_voltmeter_old.mdl", + pos = Vector(445.700012,-56.200001,15.704302), + ang = Angle(90.000000,125.038704,2.903226), + hideseat = 0.2, +} +ENT.ClientProps["salon"] = { + model = "models/metrostroi_train/81-703/703_salon.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2.0, +} +ENT.ClientProps["E_informator"] = { + model = "models/metrostroi_train/equipment/rri_informator_portable.mdl", + pos = Vector(404.7-5.1,-51,1), + ang = Angle(0,0,0), + hideseat=0.2, +} +ENT.ClientProps["fireextinguisher"] = { + model = "models/metrostroi_train/81-502/fireextinguisher.mdl", + pos = Vector(-10,107,0), + ang = Angle(0,0,0), + hideseat = 2, +} +ENT.ClientProps["sunprotectors"] = { + model = "models/metrostroi_train/81-502/sun_protectors.mdl", + pos = Vector(-8,0,0), + ang = Angle(0,0,0), + hide = 2, +} +ENT.ButtonMap["RRI"] = { + pos = ENT.ClientProps["E_informator"].pos+Vector(-0.6,-0.5,5), + ang = Angle(0,90,0), + width = 60, + height = 25, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "RRIEnableToggle",x=10,y=12.5,radius=10,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=-4, + var="RRIEnable",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "!RRIRewind",x=30,y=12.5,radius=0,model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_b_a.mdl",ang = 180,z=-3, + getfunc = function(ent) return ent:GetPackedRatio("RRIRewind") end, + var="RRIRewind",speed=8, + sndvol = 0.5,snd = function(_,val) return val==2 and "triple_0-up" or val==0 and "triple_0-down" or "triple_up-0" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "RRIRewindSet2",x=30-5,y=12.5-10,w=10,h=10,tooltip=""}, + {ID = "RRIRewindSet0",x=30-5,y=12.5,w=10,h=10,tooltip=""}, + + {ID = "RRIAmplifierToggle",x=50,y=12.5,radius=10,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=-4, + var="RRIAmplifier",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "!RRIOn",x=70,y=12.5,radius=10,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",z = -13, + lamp = { model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=62,x=-0.3,y=-0.3,z=20.6, var="RRIOn", color=Color(210,170,255), getfunc=function(ent,min,max,var) return ent:GetPackedBool(var) and (1-(ent.AnnLamp or 0)^1.5*0.6) or 0 end, }, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(210,170,255)}, + }}, + } +} +ENT.ButtonMap["RRIScreen"] = { + pos = ENT.ClientProps["E_informator"].pos+Vector(1.95,-2.9,5), + ang = Angle(0,90,90), + width = 121, + height = 103, + scale = 0.07, + hide=true, + hideseat=0.2, + + buttons = { + {ID = "RRIUp",x=30,y=60,radius=10,tooltip=""}, + {ID = "RRIDown",x=30,y=80,radius=10,tooltip=""}, + {ID = "RRILeft",x=20,y=70,radius=10,tooltip=""}, + {ID = "RRIRight",x=40,y=70,radius=10,tooltip=""}, + } +} + + +ENT.ClientProps["mirrors"] = { + model = "models/metrostroi_train/81-502/mirrors_ema.mdl", + pos = Vector(-7.7,0,0), + ang = Angle(0,0,0), + hide = 2.0, +} +ENT.ClientProps["salon3"] = { + model = "models/metrostroi_train/81-703/703_cabine.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["salon2"] = { + model = "models/metrostroi_train/81-703/81-703_Underwagon.mdl", + pos = Vector(-23.5,0,-191), + ang = Angle(0,0,0), + hide=2, +} + +ENT.ClientProps["Lamps_cab1"] = { + model = "models/metrostroi_train/81-502/cabin_lamp_light.mdl", + pos = Vector(-5.556452,-0.075187,0.965615), + ang = Angle(0,0,0), + hide = 0.8, +} +ENT.ClientProps["Lamps_pult"] = { + model = "models/metrostroi_train/equipment/lamp_gauges.mdl", + pos = Vector(446.027-9.5,-55.398,42.27), + ang = Angle(-4.305,6.175,8), + hideseat = 0.2, +} +ENT.ClientProps["Lamps_emer1"] = { + model = "models/metrostroi_train/81-703/lights_emer2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 1.5, +} +ENT.ClientProps["Lamps_emer2"] = { + model = "models/metrostroi_train/81-703/lights_emer.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 1.5, +} +ENT.ClientProps["Lamps_half1"] = { + model = "models/metrostroi_train/81-703/lights_group1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["Lamps_half2"] = { + model = "models/metrostroi_train/81-703/lights_group2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["Lamp_RTM"] = { + model = "models/metrostroi_train/81-717/rtmlamp.mdl", + pos = Vector(407.801178,-58.29,19.73), + ang = Angle(0.000000,-90.000000,0.000000), + hideseat = 1, + scale=0.82, +} + +-------------------------------------------------------------------------------- +-- Add doors +--[[ local function GetDoorPosition(i,k,j) + if j == 0 + then return Vector(323.0 - 0.5*k - 0.8*(1-k) - 233.5*i,-62.8*(1-2.045*k),-5.3) + else return Vector(323.0 - 0.5*(1-k) - 0.8*(1-k) - 233.5*i,-62.8*(1-2.045*k),-5.3) + end +end +for i=0,3 do + for k=0,1 do + ENT.ClientProps["door"..i.."x"..k.."a"] = { + model = "models/metrostroi_train/81-703/81-703_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-703/81-703_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-22,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-22,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-22,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-22,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-22.5,-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-22.5,-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-22.5,-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-22.5,-65.305+2.5,-6.7), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door1"] = { + model = "models/metrostroi_train/81-710/ezh3_door_noars_with_marshrut.mdl", + pos = Vector(460.349304,-14.530000,-6.986293), + ang = Angle(0.000000,-90.000000,0.000000), + hide = 2, + callback = function(ent) + ent.LastStation.Reloaded = false + end, +} +ENT.ButtonMap["LastStation"] = { + pos = Vector(459.9,-14.53,3), + ang = Angle(0,90,90), + width = 500, + height = 150, + scale = 0.0625, + buttons = { + {ID = "LastStation-",x=000,y=0,w=250,h=150, tooltip=""}, + {ID = "LastStation+",x=250,y=0,w=250,h=150, tooltip=""}, + } +} + + +ENT.ClientProps["door2"] = { + model = "models/metrostroi_train/81-703/81-703_door_tor.mdl", + pos = Vector(-463.935913,16.530001,-7.556937), + ang = Angle(0.000000,-270.000000,0.000000), + hide = 2, +} + + +ENT.ClientProps["door3"] = { + model = "models/metrostroi_train/81-703/81-703_door_interior_a.mdl", + pos = Vector(395.6,-16,-8,5), + ang = Angle(0.000000,90.000000,0.000000), + hide = 2, +} + + +ENT.ClientProps["door4"] = { + model = "models/metrostroi_train/81-710/81-710_door_cab.mdl", + pos = Vector(410.954041,66.258118,-5.998950), + ang = Angle(0.000000,-90.000000,0.000000), + hide = 2, +} + + + +ENT.ClientProps["UAVALever"] = { + model = "models/metrostroi_train/81-703/cabin_uava.mdl", + pos = Vector(450.264801,56.001812,-9.879532), + ang = Angle(0,-90+10,0), + hideseat = 0.8, +} + + + + +ENT.ClientProps["RedLights"] = { + model = "models/metrostroi_train/81-703/81-703_red_light.mdl", + pos = Vector(-23,1,-191), + ang = Angle(0,0,0.000000), + nohide = true +} +ENT.ClientProps["DistantLights"] = { + model = "models/metrostroi_train/81-703/81-703_projcetor_light.mdl", + pos = Vector(-23,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,1,-191), + ang = Angle(0,0,0), + nohide = true +} + +ENT.ButtonMap["Route"] = { + pos = Vector(465.7-7,35.3,2), + ang = Angle(0,98,90), + width = 153, + height = 130, + scale = 0.0625, + buttons = { + {ID = "RouteNumber1+",x=76.5*0,y=0, w=76.5,h=65, tooltip=""}, + {ID = "RouteNumber2+",x=76.5*1,y=0, w=76.5,h=65, tooltip=""}, + {ID = "RouteNumber1-",x=76.5*0,y=65,w=76.5,h=65, tooltip=""}, + {ID = "RouteNumber2-",x=76.5*1,y=65,w=76.5,h=65, tooltip=""}, + } +} +ENT.ClientProps["route"] = { + model = "models/metrostroi_train/common/routes/ezh/route_holder.mdl", + pos = Vector(-7,0,0), + ang = Angle(0,0,0), + hide = 2, +} +ENT.ClientProps["route1"] = { + model = "models/metrostroi_train/common/routes/ezh/route_number1.mdl", + pos = Vector(-7,0,0), + ang = Angle(0,0,0), + hide = 2, + callback = function(ent) + ent.RouteNumber.Reloaded = false + end, +} +ENT.ClientProps["route2"] = { + model = "models/metrostroi_train/common/routes/ezh/route_number2.mdl", + pos = Vector(-7,0,0), + ang = Angle(0,0,0), + hide = 2, +} + +ENT.Lights = { + [1] = { "headlight", Vector(475,0,-20), Angle(0,0,0), Color(188,130,88), brightness = 5 ,fov = 90, texture = "models/metrostroi_train/equipment/headlight",shadows = 1,headlight=true}, + [2] = { "headlight", Vector(465,0,45), Angle(-20,0,0), Color(255,0,0), fov=164 ,brightness = 0.3, farz=250,texture = "models/metrostroi_train/equipment/headlight2",shadows = 0,backlight=true}, + [21] = { "headlight", Vector(441,-40.0,40.2), Angle(75,-25,0), Color(255,130,88), fov=125, farz=80,brightness = 4,shadows = 1, texture = "models/metrostroi_train/equipment/headlight", hidden = "Lamps_pult"}, + [22] = { "headlight", Vector(441,-55.0,35.2), Angle(0,0,0), Color(255,130,88), fov=125, farz=65,brightness = 6,shadows = 0, texture = "models/metrostroi_train/equipment/headlight", hidden = "Lamps_pult"}, + + -- Emergency lit + [9] = { "dynamiclight", Vector(200, 0, -5), Angle(0,0,0), Color(255, 176, 59), brightness = 2, distance = 200}, + [10] = { "dynamiclight", Vector(-150, 0, -5), Angle(0,0,0), Color(255, 176, 59), brightness = 2, distance = 200}, + [11] = { "dynamiclight", Vector( 200, 0, -5), Angle(0,0,0), Color(255, 176, 59), brightness = 3, distance = 260}, + [12] = { "dynamiclight", Vector( 0, 0, -5), Angle(0,0,0), Color(255, 176, 59), brightness = 3, distance = 260}, + [13] = { "dynamiclight", Vector(-260, 0, -5), Angle(0,0,0), Color(255, 176, 59), brightness = 3, distance = 260}, + -- Cabin + [23] = { "dynamiclight", Vector(425,0,40), Angle(0,0,0), Color(252, 157, 77), brightness = 0.0007, distance = 600, hidden = "salon3"}, + + [5] = { "light", Vector(465+5,-32, 48), Angle(0,0,0), Color(255,50,50), brightness = 0.2, scale = 1.5, texture = "sprites/light_glow02", size = 2 }, + [6] = { "light", Vector(465+5, 32, 48), Angle(0,0,0), Color(255,50,50), brightness = 0.2, scale = 1.5, texture = "sprites/light_glow02", size = 2 }, + [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(436.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(399,1.2,57.5), Angle(0,0,0),Color(255,220,180),brightness = 0.25,scale = 0.3, texture = "sprites/light_glow02", hidden = "Lamps_cab1"}, + Lamp_RTM = {"light", Vector(407.801178,-58.29,19.73), Angle(0,0,0),Color(255,180,60),brightness = 0.4,scale = 0.03, texture = "sprites/light_glow02", hidden = "Lamp_RTM"}, +} +function ENT:Initialize() + self.BaseClass.Initialize(self) + self.RRIScreen = self:CreateRT("717RRI",128,128) + + self.FrontLeak = 0 + self.RearLeak = 0 + + self.CraneRamp = 0 + self.ReleasedPdT = 0 + self.EmergencyValveRamp = 0 + self.EmergencyValveEPKRamp = 0 + self.EmergencyBrakeValveRamp = 0 + + self.OldZPos = 0 + self.OldSpeedoDelta = 0 + self.SpeedoDelta = 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(410-15+i*6.6-3*6.6/2,69,-26))) + leftNum:SetSkin(num) + end + if IsValid(rightNum) then + rightNum:SetPos(self:LocalToWorld(Vector(-392-15-i*6.6-3*6.6/2,-66.6,-26))) + rightNum:SetSkin(num) + end + end +end +-------------------------------------------------------------------------------- +function ENT:Think() + self.BaseClass.Think(self) + if not self.RenderClientEnts 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 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("UAVALever", self:GetPackedBool("UAVA") and 1 or 0, 0,0.6, 128, 3,false) + self:Animate("stopkran", self:GetPackedBool("EmergencyBrakeValve") and 1 or 0, 0,0.25, 256, 3,false) + + self:Animate("brake_disconnect",self:GetPackedBool("DriverValveBLDisconnect") and 0 or 1,0.25,0.5, 4,false) + self:Animate("train_disconnect",self:GetPackedBool("DriverValveTLDisconnect") and 1 or 0,0.25,0, 4,false) + + 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) + local RL = self:Animate("redlights",self:GetPackedBool("RedLight") and 1 or 0,0,1,5,false) + + self:ShowHideSmooth("WhiteLights",HL1) + self:ShowHideSmooth("DistantLights",HL2) + self:ShowHideSmooth("RedLights",RL) + self:SetLightPower(5,RL > 0,RL) + self:SetLightPower(6,RL > 0,RL) + self:SetLightPower(30,HL1 > 0, HL1) + self:SetLightPower(31,HL1 > 0, HL1) + self:SetLightPower(32,HL2 > 0, HL2) + + local bright = HL1*0.3+HL2*0.7 + self:SetLightPower(1,bright>0,bright) + self:SetLightPower(2,RL>0,RL) + + local PL = HL1*self:Animate("lamps_pult",self:GetPackedBool("PanelLights") and 1 or 0,0,1,12,false) + self:ShowHideSmooth("Lamps_pult",PL) + self:SetLightPower("Lamps_pult",PL>0,PL) + self:SetLightPower(21,PL>0,PL) + self:SetLightPower(22,PL>0,PL) + + 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 + + self:HidePanel("RRIScreen",self.CurrentCamera~=5) + + -- Simulate pressure gauges getting stuck a little + self:Animate("brake",1-self:GetPackedRatio("CranePosition"), 0.00, 0.48, 256,24) + 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:ShowHide("reverser",self:GetNW2Int("WrenchMode",0)==1) + self:ShowHide("rcureverser",self:GetNW2Int("WrenchMode",0)==3) + self:Animate("volt1",self:GetPackedRatio("BatteryVoltage"), 0.637,0.4885,45,3) + + self:Animate("brake_line",self:GetPackedRatio("BLPressure"),0.6285, 0.84, 256,2)--,,0.01) + self:Animate("train_line",self:GetPackedRatio("TLPressure"),0.6285, 0.843, 256,2)--,,0.01) + self:Animate("brake_cylinder",self:GetPackedRatio("BCPressure"),0.04, 0.83, 256,2)--,,0.03) + local voltage = math.min(1,self:GetPackedRatio("EnginesVoltage")) + local current = self:GetPackedRatio("EnginesCurrent") + self:Animate("voltmeter", voltage >= 0.7 and voltage-(voltage/12*(voltage-(voltage >= 0.85 and 0.3 or 0.5))) or voltage, 0.62875,0.367,92,2) + self:Animate("ampermeter", current<0.49 and current-current/((1-current)*10+current*10) or current, 0.617,0.383, nil, nil, 92,20,3) + + local speed = self:GetPackedRatio("Speed")*100 + --Speedo swing + local vec = -(self:LocalToWorld(Vector(445.7,-56.2,15.7))*self:GetUp()).z + local posdelta = math.Clamp((vec-self.OldZPos)*(2+speed/90),-0.4,0.4) + local delta = (self.OldSpeedoDelta-posdelta) + + self.SpeedoDelta = self.SpeedoDelta+(delta-self.SpeedoDelta)*2*0.02--*self.DeltaTime + local speed1 = math.Clamp(self:GetPackedRatio("Speed")+self.SpeedoDelta,0,1) + self.OldZPos = vec + self.OldSpeedoDelta = posdelta + + -- Rotate wheel + self:Animate("speed1", speed1 > 0.41 and speed1-(speed1/12*(speed1-(speed1 > 0.95 and 0.634 or 0.3))) or speed1, 0.76, 0.97895, nil, nil, 256,2,0.01) + + ---- + 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.48, 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) + 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.8+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) + -- 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+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) + 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.25,1) + else + self:SetSoundState("rk",0,0) + end + end + -- ARS/ringer alert + self:SetSoundState("ring_old",self:GetPackedBool("Ring") and 0.4 or 0,0.98) + + local lamps_rtm = self:Animate("lamps_rtm",self:GetPackedBool("VPR") and 1 or 0,0,1,8,false) + self:SetLightPower("Lamp_RTM",lamps_rtm > 0,lamps_rtm) + self:ShowHideSmooth("Lamp_RTM",lamps_rtm) + self:SetSoundState("vpr",self:GetPackedBool("VPR") and 1 or 0,1) + + local work = self:GetPackedBool("AnnPlay") + local noise = self:GetNW2Int("AnnouncerBuzz",-1) > 0 + self.NoiseVolume = self.NoiseVolume or 0 + self.AnnLamp = self.AnnLamp 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 + local annvolume = self.Sounds.announcer1 and IsValid(self.Sounds.announcer1) and self.Sounds.announcer1:GetLevel()*math.Rand(0.9,3) or 0 + + local lamp = math.max(annvolume,noise and self.NoiseVolume or 0) + + self.AnnLamp = math.Clamp(self.AnnLamp + 8*(lamp-self.AnnLamp)*dT,0,1) + if self.AnnLamp < 0.01 then self.AnnLamp=0 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:Draw() + self.BaseClass.Draw(self) +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) + self.RTMaterial:SetTexture("$basetexture", self.RRIScreen) + self:DrawOnPanel("RRIScreen",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(64,64,128,128,0) + end) +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 == "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 "lk4_on" or "lk4_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 == "KK" then + return range > 0 and "kk_on" or "kk_off",location,1,pitch--0.8 + 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 + if soundid == "UAVAC" then + return "uava_reset",location,range,pitch + end + end + return soundid,location,range,pitch +end + +local dist = { + Back1 = 550, + AVMain = 550, + AV1 = 550, + AV2 = 550, + Battery = 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() diff --git a/lua/entities/gmod_subway_81-703/init.lua b/lua/entities/gmod_subway_81-703/init.lua new file mode 100644 index 0000000..e599913 --- /dev/null +++ b/lua/entities/gmod_subway_81-703/init.lua @@ -0,0 +1,498 @@ +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","RST","KU1","KU2","KU3","KU4","KU5","KU6","KU7","KU8","KU9","KU10","KU11","KU12","KU13","KU16", + "KU6K","KU7K", + "RRIEnable","RRIAmplifier", + "DriverValveBLDisconnect","DriverValveTLDisconnect","EmergencyBrakeValve", + "GV", + "R_Program1","R_Program2","UAVA","UAVAC", +} +ENT.SyncFunctions = { + "" +} + +function ENT:Initialize() + + self.Plombs = { + --RST = true, + Init = true, + --OtklAVU = true, + UAVA = true, + } + -- Set model and initialize + self:SetModel("models/metrostroi_train/81-703/81-703.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create seat entities + self.DriverSeat = self:CreateSeat("driver",Vector(425,-38.2,-31.5),Angle(0,0,0)) + self.InstructorsSeat = self:CreateSeat("instructor",Vector(430,40,-48+6+2.5),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 + self.FrontCouple.EKKDisconnected = true + + -- 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_EQUAL] = {"R_Program1Set",helper="R_Program1Set"}, + [KEY_MINUS] = {"R_Program2Set",helper="R_Program2Set"}, + + [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",helper="EmergencyBrakeValveToggle"}, + + [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", + [KEY_UP] = "RRIUp", + [KEY_DOWN] = "RRIDown", + [KEY_LEFT] = "RRILeft", + [KEY_RIGHT] = "RRIRight", + }, + } + 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(462, -30, -62), Radius = 8, + }, + { + ID = "FrontTrainLineIsolationToggle", + Pos = Vector(462, 30, -62), Radius = 8, + }, + { + ID = "RearBrakeLineIsolationToggle", + Pos = Vector(-468, 30, -62), Radius = 8, + }, + { + ID = "RearTrainLineIsolationToggle", + Pos = Vector(-468, -30, -62), Radius = 8, + }, + { + ID = "FrontDoor", + Pos = Vector(462,32,-10), Radius = 12, + }, + { + ID = "CabinDoor", + Pos = Vector(462,58,-10), Radius = 10, + }, + { + ID = "CabinDoor", + Pos = Vector(462,58,-30), Radius = 10, + }, + { + ID = "CabinDoor", + Pos = Vector(395,65,-10), Radius = 16, + }, + { + ID = "PassengerDoor", + Pos = Vector(397,35,8), Radius = 16, + }, + { + ID = "RearDoor", + Pos = Vector(-457,-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("RedLight",Panel.RedLights>0) + self:SetPackedBool("Headlights1",Panel.Headlights1 > 0) + self:SetPackedBool("Headlights2",Panel.Headlights2 > 0) + + local lightsActive2 = math.min(1,Panel.MainLights2) + local lightsActive1 = math.min(1,Panel.MainLights1)^2 + self:SetPackedBool("Lamps_emer1",Panel.EmergencyLights1 > 0 and lightsActive1 == 0) + self:SetPackedBool("Lamps_cab",Panel.EmergencyLights1 > 0) + self:SetPackedBool("Lamps_emer2",Panel.EmergencyLights2 > 0) + self:SetPackedBool("Lamps_half1",lightsActive1 > 0) + self:SetPackedBool("Lamps_half2",lightsActive2 > 0) + self:SetPackedRatio("LampsStrength",lightsActive1)--math.Round((self.Electric.I24-150)/1000.0,1.5)) + + -- 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) + + -- Red RP + 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:SetPackedBool("PP1",Panel.PP1 > 0) + self:SetPackedBool("PP6",Panel.PP6 > 0) + self:SetPackedBool("SDW",Panel.SDW > 0) + + + + self.TrueBrakeAngle = self.TrueBrakeAngle or 0 + if self.ManualBrake < 0.001 and self.ManualBrake > self.TrueBrakeAngle then self.TrueBrakeAngle = self.ManualBrake end + if self.ManualBrake > 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:SetPackedBool("VPR",Panel.VPR > 0) + self:SetPackedBool("Compressor",Pneumatic.Compressor == 1.0) + self:SetPackedBool("RK",(self.RheostatController.Velocity ~= 0.0)) + self:SetPackedBool("Ring",Panel.Ring > 0.5) + + self:SetPackedBool("RearDoor",self.RearDoor) + self:SetPackedBool("FrontDoor",self.FrontDoor) + self:SetPackedBool("PassengerDoor",self.PassengerDoor) + self:SetPackedBool("CabinDoor",self.CabinDoor) + + self:SetPackedBool("RRIOn",self.RRI_VV.Power>0) + self:SetPackedRatio("RRIRewind",self.RRIRewind.Value/2) + self:SetPackedBool("AnnPlay",Panel.AnnouncerPlaying > 0) + --KRR + --self:SetPackedBool("KRR",self.KRR.Value > 0.5) + --print(self.LK1.Value,self.LK2.Value,self.LK3.Value,self.LK4.Value,self.RheostatController.Position,self.PositionSwitch.Position,self.KSH1.Value,self.KSH2.Value) + --print(self.PositionSwitch.SelectedPosition,self.RheostatController.SelectedPosition)--self.Engines.E13/2,self.Engines.RotationRate) + -- Feed packed floats + self:SetNW2Int("WrenchMode",self.KVWrenchMode) + self:SetPackedRatio("CranePosition", 1-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/82.0) + self:SetPackedBool("EmergencyBrakeValve",self.EmergencyBrakeValve.Value > 0) + --print(self.LK1.Value,self.LK2.Value,self.LK3.Value,self.LK4.Value,self.LK5.Value,self.TSH.Value) + --print(self.LK1.Value,self.LK2.Value,self.LK3.Value,self.LK4.Value,self.LK5.Value,self.TSH.Value) + -- Update ARS system (no ars on E) +-- self:SetPackedRatio(3, self.ALS_ARS.Speed/100.0) + 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() + + -- Temporary hacks + --self:SetNW2Float("V",self.Speed) + --self:SetNW2Float("A",self.Acceleration) + + 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 + 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 == "ParkingBrakeLeft" then + self.ManualBrake = math.max(0.0,self.ManualBrake - 0.05) + if self.ManualBrake == 0.0 then return end + --print(self.ManualBrake) + end + if button == "ParkingBrakeRight" then + self.ManualBrake = math.min(1.0,self.ManualBrake + 0.05) + if self.ManualBrake == 1.0 then return end + --print(self.ManualBrake) + 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 + + + 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("rcu_in","cabin",0.7) + self.KVWrenchMode = 3 + elseif self.KVWrenchMode ~= 0 and self.KV.ReverserPosition == 0 then + if self.KVWrenchMode == 3 then + self:PlayOnce("rcu_out","cabin",0.7) + else + self:PlayOnce("revers_out","cabin",0.7) + end + self.KVWrenchMode = 0 + self.KV:TriggerInput("Enabled",0) + end + end + 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 == "KVT2Set" then self.KVT:TriggerInput("Close",1) end + if button == "KU6" and not self.KU7Pressed and self.KU7.Value == 0 then self.KU7K:TriggerInput("Open",1) self.KU6K:TriggerInput("Close",1) end + if button == "KU7" and not self.KU6Pressed and self.KU6.Value == 0 then self.KU7K:TriggerInput("Close",1) self.KU6K:TriggerInput("Open",1) 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) + 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 + 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 > -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 diff --git a/lua/entities/gmod_subway_81-703/shared.lua b/lua/entities/gmod_subway_81-703/shared.lua new file mode 100644 index 0000000..5eebc47 --- /dev/null +++ b/lua/entities/gmod_subway_81-703/shared.lua @@ -0,0 +1,637 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.PrintName = "E (81-703)" +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" +ENT.SkinsType = "81-703" +ENT.Model = "models/metrostroi_train/81-703/81-703.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 + +-- 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 + +ENT.AnnouncerPositions = { + {Vector(420,-38.2 ,35),80,0.4}, + {Vector(-3,-60, 62),300,0.3}, + {Vector(-3,60 ,62),300,0.3}, +} + +ENT.MirrorCams = { + Vector(441,72,15),Angle(1,180,0),15, + Vector(441,-72,15),Angle(1,180,0),15, +} + +ENT.Cameras = { + {Vector(407.5+15,32,16) ,Angle(0,180,0),"Train.703.Breakers1"}, + {Vector(407.5+13,48,21) ,Angle(0,180,0),"Train.703.Breakers2"}, + {Vector(407.5+28,48,16) ,Angle(0,40,0),"Train.Common.HelpersPanel"}, + {Vector(407.5+11,37,5) ,Angle(30,0,0),"Train.703.Parking"}, + {Vector(407.5+08,-50,15),Angle(35,180,0),"Train.Common.RRI","RRI"}, + {Vector(407.5+62,40,2) ,Angle(20,180,0),"Train.Common.RouteNumber"}, + {Vector(407.5+70,2,6) ,Angle(20,180,0),"Train.Common.LastStation"}, + {Vector(450+6,0,26),Angle(60,0,0),"Train.Common.CouplerCamera"}, +} +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(400,-40,-45),0.5} + self.SoundPositions["avu_off"] = {60,1e9, Vector(400,-40,-45),0.5} + --Подвагонка + self.SoundNames["lk2_on"] = "subway_trains/717/pneumo/lk1_on.mp3" + self.SoundNames["lk2_off"] = "subway_trains/717/pneumo/lk2_off.mp3" + self.SoundNames["lk5_on"] = "subway_trains/717/pneumo/lk2_on.mp3" + self.SoundNames["lk5_off"] = "subway_trains/717/pneumo/lk2_off.mp3" + self.SoundNames["lk4_on"] = "subway_trains/717/pneumo/lk3_on.mp3" + self.SoundNames["lk4_off"] = "subway_trains/717/pneumo/lk3_off.mp3" + self.SoundPositions["lk2_on"] = {440,1e9,Vector(-60,-40,-66),0.22} + self.SoundPositions["lk2_off"] = {440,1e9,Vector(-60,-40,-66),0.30} + self.SoundPositions["lk5_on"] = self.SoundPositions["lk2_on"] + self.SoundPositions["lk5_off"] = self.SoundPositions["lk2_off"] + self.SoundPositions["lk4_on"] = self.SoundPositions["lk2_on"] + self.SoundPositions["lk4_off"] = self.SoundPositions["lk2_off"] + + self.SoundNames["compressor"] = {loop=1.79,"subway_trains/717/compressor/compressor_717_start2.wav","subway_trains/717/compressor/compressor_717_loop2.wav", "subway_trains/717/compressor/compressor_717_stop2.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(449.96,-22.73,-6.49)} + 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"] = {80,1e9,Vector(452.3,-24.0,4.0)} + + 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/kru2-3_1.mp3", + "subway_trains/717/kru/kru2-3_2.mp3", + "subway_trains/717/kru/kru2-3_3.mp3", + "subway_trains/717/kru/kru2-3_4.mp3", + } + self.SoundNames["kru_3_2"] = { + "subway_trains/717/kru/kru3-2_1.mp3", + "subway_trains/717/kru/kru3-2_2.mp3", + "subway_trains/717/kru/kru3-2_3.mp3", + "subway_trains/717/kru/kru3-2_4.mp3", + } + self.SoundPositions["kru_0_1"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_1_2"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_2_1"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_1_0"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_2_3"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_3_2"] = {80,1e9,Vector(452.3,-24.0,4.0)} + + 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(449.14598,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(445, 0,-63),1} + self.SoundNames["rear_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["rear_isolation"] = {300,1e9,Vector(-450, 0,-63),1} + + self.SoundNames["crane013_brake2"] = {loop=true,"subway_trains/common/pneumatic/013_brake2.wav"} + self.SoundPositions["crane013_brake2"] = {80,1e9,Vector(448.91,-52.62,-4.37),0.86} + self.SoundNames["crane334_brake_high"] = {loop=true,"subway_trains/common/pneumatic/334_brake.wav"} + self.SoundPositions["crane334_brake_high"] = {80,1e9,Vector(448.91,-52.62,-4.37),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(448.91,-52.62,-4.37),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(448.91,-52.62,-4.37),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(448.91,-52.62,-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(448.91,-52.62,-70),0.45} + self.SoundNames["crane334_release"] = {loop=true,"subway_trains/common/pneumatic/334_release3.wav"} + self.SoundPositions["crane334_release"] = {80,1e9,Vector(448.91,-52.62,-4.37),0.2} + self.SoundNames["crane334_release_2"] = {loop=true,"subway_trains/common/pneumatic/334_release2.wav"} + self.SoundPositions["crane334_release_2"] = {80,1e9,Vector(448.91,-52.62,-4.37),0.2} + + self.SoundNames["valve_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["valve_brake"] = {400,1e9,Vector(464.40,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(456.55,-52.57,-55),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["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(450,-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(450.6,-22.73,-5.90),1} + self.SoundPositions["kv70_fix_off"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv40_0_t1"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv70_t1_0_fix"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv40_t1_0"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv40_t1_t1a"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv40_t1a_t1"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv40_t1a_t2"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv40_t2_t1a"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv40_0_x1"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv40_x1_0"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv40_x1_x2"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv40_x2_x1"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv40_x2_x3"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv40_x3_x2"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + + self.SoundNames["samm_revers_in"] = {"subway_trains/ezh3/rc_ars/reversor_rc_in.mp3"} + self.SoundNames["samm_revers_out"] = {"subway_trains/ezh3/rc_ars/reversor_rc_in.mp3"} + self.SoundNames["samm_0-1"] = {"subway_trains/ezh3/rc_ars/0-1.mp3"} + self.SoundNames["samm_0-2"] = {"subway_trains/ezh3/rc_ars/0-2.mp3"} + self.SoundNames["samm_2-0"] = {"subway_trains/ezh3/rc_ars/2-0.mp3"} + self.SoundPositions["samm_0-2"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_2-0"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_0-1"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_revers_out"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_revers_in"] = {60,1e9,Vector(442.2-6,-50,-10)} + + 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(405,-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(449.118378+7.6,33.493385,-14.713276),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_703_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", "AnnouncementsRRI") + + self:LoadSystem("RRI","81_71_RRI") + self:LoadSystem("RRI_VV","81_71_RRI_VV") + + self:LoadSystem("RouteNumber","81_71_RouteNumber",2) + self:LoadSystem("LastStation","81_71_LastStation","710","door1") + + self:LoadSystem("ALSCoil") +end +function ENT:PostInitializeSystems() + self.Electric:TriggerInput("Type",self.Electric.E) +end + +ENT.SubwayTrain = { + Type = "E", + Name = "81-703", + WagType = 0, + ARS = { + NoEPK = true, + }, + ALS = { + HaveAutostop = true, + }, + EKKType = 703, +} +ENT.NumberRanges = {{3001,3100},{3301,3400},{3501,3699},{4701,4750},{4851,4900}} + +ENT.Spawner = { + model = { + "models/metrostroi_train/81-703/81-703.mdl", + "models/metrostroi_train/81-703/703_cabine.mdl", + "models/metrostroi_train/81-703/703_salon.mdl", + {"models/metrostroi_train/81-703/81-703_Underwagon.mdl",pos=Vector(-23.5,0,-191)}, + {"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_81-703_int", + func = function(ent,i,maxi) + if ent:GetClass() == "gmod_subway_81-703" then + ent.VU:TriggerInput("Set",1) + ent.UAVA:TriggerInput("Set",0) + ent.Plombs.VU = nil + ent.Plombs.UAVA = true + else + ent.VU:TriggerInput("Set",0) + ent.UAVA:TriggerInput("Set",1) + ent.Plombs.VU = true + ent.Plombs.UAVA = nil + end + end, + Metrostroi.Skins.GetTable("Texture","Texture",false,"train"), + Metrostroi.Skins.GetTable("PassTexture","PassTexture",false,"pass"), + Metrostroi.Skins.GetTable("CabTexture","CabTexture",false,"cab"), + {"SpawnMode","Spawner.Common.SpawnMode","List",{"Spawner.Common.SpawnMode.Full","Spawner.Common.SpawnMode.Deadlock","Spawner.Common.SpawnMode.NightDeadlock","Spawner.Common.SpawnMode.Depot"}, nil,function(ent,val,rot,i,wagnum,rclk) + if rclk then return end + if ent._SpawnerStarted~=val then + ent.VB:TriggerInput("Set",val<=2 and 1 or 0) + ent.AV:TriggerInput("Set",val<=2 and 1 or 0) + if ent.RRI then + local first = i==1 or _LastSpawner~=CurTime() + + ent.VU2:TriggerInput("Set",(val<=2 and first) and 1 or 0) + --ent.VR:TriggerInput("Set",val<=2 and 1 or 0) + ent.RRIEnable:TriggerInput("Set",val<=2 and 1 or 0) + ent.RRIAmplifier:TriggerInput("Set",val<=2 and 1 or 0) + ent.KU1:TriggerInput("Set",(val==1 and first) and 1 or 0) + _LastSpawner=CurTime() + ent.CabinDoor = val==4 and first + ent.PassengerDoor = val==4 + ent.RearDoor = val==4 + else + ent.VU2:TriggerInput("Set",0) + ent.FrontDoor = val==4 + ent.RearDoor = val==4 + end + ent.GV:TriggerInput("Set",val<4 and 1 or 0) + ent._SpawnerStarted = val + end + if val==1 then ent.KO:TriggerInput("Close",1) else ent.KO:TriggerInput("Open",1) end + ent.Pneumatic.TrainLinePressure = val==3 and math.random()*4 or val==2 and 4.5+math.random()*3 or 7.6+math.random()*0.6 + if val==4 then ent.Pneumatic.BrakeLinePressure = 5.2 end + end}, +} diff --git a/lua/entities/gmod_subway_81-7036/cl_init.lua b/lua/entities/gmod_subway_81-7036/cl_init.lua new file mode 100644 index 0000000..a474c63 --- /dev/null +++ b/lua/entities/gmod_subway_81-7036/cl_init.lua @@ -0,0 +1,181 @@ +include("shared.lua") + + +-------------------------------------------------------------------------------- +ENT.ClientProps = {} +ENT.ButtonMap = {} +--[[ +ENT.ButtonMap["TestDraw"] = { + pos = Vector(455,5,7), + ang = Angle(0,-90,80), + width = 512, + height = 512, + scale = 0.024, +}]] + +-------------------------------------------------------------------------------- +ENT.ClientPropsInitialized = false + +ENT.ClientProps["door1"] = { + model = "models/props_junk/PopCan01a.mdl", + pos = Vector(410,71.1,55.2), + ang = Angle(90,-0,0) +} +-------------------------------------------------------------------------------- +-- Add doors +local function GetDoorPosition(i,k,j) + if j == 0 + then return Vector(349.0 - 32*k - 230*i,-65*(1-2*k),-2.8) + else return Vector(349.0 - 32*(1-k) - 230*i,-65*(1-2*k),-2.8) + end +end +for i=0,3 do + for k=0,1 do + ENT.ClientProps["door"..i.."x"..k.."a"] = { + model = "models/metrostroi/81/81-7036_door1.mdl", + pos = GetDoorPosition(i,k,0), + ang = Angle(0,180*(1-k),0) + } + ENT.ClientProps["door"..i.."x"..k.."b"] = { + model = "models/metrostroi/81/81-7036_door2.mdl", + pos = GetDoorPosition(i,k,1), + ang = Angle(0,180*(1-k),0) + } + end +end +table.insert(ENT.ClientProps,{ + model = "models/metrostroi/81/81-7036_door4.mdl", + pos = Vector(-487.0,-2.2,-4.5), + ang = Angle(0,0,0) +}) +table.insert(ENT.ClientProps,{ + model = "models/metrostroi/81/81-7036_door3.mdl", + pos = Vector(414.0,65.0,-1.8), + ang = Angle(0,0,0) +}) +table.insert(ENT.ClientProps,{ + model = "models/metrostroi/81/81-7036_door5.mdl", + pos = Vector(414.3,-65.0,-1.8), + ang = Angle(0,0,0) +}) + + +Metrostroi.RTQuele = { + entries = {} +} +Metrostroi.RTQueleFrame = 0 +Metrostroi.PixVisHandle = util.GetPixelVisibleHandle() +local drawn = true +hook.Add("RenderScene","MetrostroiParallelView",function() + Metrostroi.RTQueleFrame = Metrostroi.RTQueleFrame + 1 + if #Metrostroi.RTQuele > 0 and Metrostroi.RTQueleFrame > 1/FrameTime()/20*#Metrostroi.RTQuele then + local id = table.remove(Metrostroi.RTQuele,1) + Metrostroi.RTQuele.entries[id]() + Metrostroi.RTQuele.entries[id] = nil + Metrostroi.RTQueleFrame = 0 + --print("draw",1/FrameTime()) + drawn = false + else + --print("nodraw",1/FrameTime()) + end +end) +function Metrostroi.CanRenderCam(RT,func,draw) + if not Metrostroi.RTQuele.entries[RT] and draw then + table.insert(Metrostroi.RTQuele,RT) + Metrostroi.RTQuele.entries[RT] = func + return true + end + return false +end +-------------------------------------------------------------------------------- +function ENT:Initialize() + self.BaseClass.Initialize(self) + --[[ + self.Cams = {} + for i=1,3 do + self.Cams[i] = self:CreateRT("cam"..i,false,128,128) + end + self.Test = self:CreateRT("cam",true)]] +end +function ENT:Think() + self.BaseClass.Think(self) + --[[ + Metrostroi.CanRenderCam("7036cam1", function() + if not IsValid(self) then return end + render.PushRenderTarget(self.Cams[1].rt,0,0,128, 128) + render.Clear(0, 0, 0, 0) + cam.Start2D() + surface.SetDrawColor(200,0,0) + surface.DrawRect(0,0,64,64) + render.RenderView({ + origin = self:LocalToWorld(Vector(410,73.1,55.2)), -- change to your liking + angles = self:LocalToWorldAngles(Angle( 0, 180+10, 0 )), -- change to your liking + x = 0, + y = 0, + w = 128, + h = 128, + fov = 70, + } ) + surface.SetDrawColor(255,0,0) + surface.DrawRect(0,0,64,64) + cam.End2D() + render.PopRenderTarget() + end,self) + Metrostroi.CanRenderCam("7036cam2", function() + if not IsValid(self) then return end + render.PushRenderTarget(self.Cams[2].rt,0,0,128, 128) + render.Clear(0, 0, 0, 0) + cam.Start2D() + render.RenderView({ + origin = self:LocalToWorld(Vector(410,-73.1,55.2)), -- change to your liking + angles = self:LocalToWorldAngles(Angle( 0, 180-10, 0 )), -- change to your liking + x = 0, + y = 0, + w = 128, + h = 128, + fov = 70, + } ) + cam.End2D() + render.PopRenderTarget() + end,self) + Metrostroi.CanRenderCam("7036cam3", function() + if not IsValid(self) then return end + render.PushRenderTarget(self.Cams[3].rt,0,0,128, 128) + render.Clear(0, 0, 0, 0) + cam.Start2D() + render.RenderView( { + origin = self:LocalToWorld(Vector(410,0,55.2)), -- change to your liking + angles = self:LocalToWorldAngles(Angle( 0, 180-10, 0 )), -- change to your liking + x = 0, + y = 0, + w = 128, + h = 128, + fov = 70, + } ) + cam.End2D() + render.PopRenderTarget() + end)]] +end + +function ENT:Draw() + self.BaseClass.Draw(self) +end +function ENT:DrawPost(special) + --[[self:DrawOnPanel("TestDraw",function(...) + surface.SetMaterial(self.Cams[1].mat) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRect(0,0,256,256,0) + surface.SetMaterial(self.Cams[2].mat) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRect(256,0,256,256,0) + surface.SetMaterial(self.Cams[3].mat) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRect(0,256,256,256,0) + end)]] +end + +function ENT:OnButtonPressed(button) + if button == "ShowHelp" then + RunConsoleCommand("metrostroi_train_manual") + end +end diff --git a/lua/entities/gmod_subway_81-7036/init.lua b/lua/entities/gmod_subway_81-7036/init.lua new file mode 100644 index 0000000..6182674 --- /dev/null +++ b/lua/entities/gmod_subway_81-7036/init.lua @@ -0,0 +1,46 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +ENT.BogeyDistance = 650 -- Needed for gm trainspawner + +--------------------------------------------------- +-- Defined train information +-- Types of wagon(for wagon limit system): +-- 0 = Head or intherim +-- 1 = Only head +-- 2 = Only intherim +--------------------------------------------------- +ENT.SubwayTrain = { + Type = "81", + Name = "81-7036", + WagType = 1, + Manufacturer = "KVZ", +} + +function ENT:Initialize() + + -- Set model and initialize + self:SetModel("models/metrostroi/81/81-7036.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create seat entities + self.DriverSeat = self:CreateSeat("driver",Vector(420,-2,-22)) + self.InstructorsSeat = self:CreateSeat("instructor",Vector(410,35,-20)) + + -- Hide seats + self.DriverSeat:SetColor(Color(0,0,0,0)) + self.DriverSeat:SetRenderMode(RENDERMODE_TRANSALPHA) + + -- Create bogeys + self.FrontBogey = self:CreateBogey(Vector( 325-20,0,-80),Angle(0,180,0),true) + self.RearBogey = self:CreateBogey(Vector(-325-10,0,-80),Angle(0,0,0),false) +end + + +-------------------------------------------------------------------------------- +function ENT:Think() + local retVal = self.BaseClass.Think(self) + return retVal +end \ No newline at end of file diff --git a/lua/entities/gmod_subway_81-7036/shared.lua b/lua/entities/gmod_subway_81-7036/shared.lua new file mode 100644 index 0000000..c8d245f --- /dev/null +++ b/lua/entities/gmod_subway_81-7036/shared.lua @@ -0,0 +1,24 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" + +ENT.Spawnable = false --NOT FINISHED +ENT.AdminSpawnable = false --NOT FINISHED + +function ENT:PassengerCapacity() + return 300 +end + +function ENT:GetStandingArea() + return Vector(-450,-30,-45),Vector(380,30,-45) +end + +function ENT:InitializeSystems() + self:LoadSystem("KK","Relay","Switch") + self:LoadSystem("Pneumatic","81_717_Pneumatic") +end diff --git a/lua/entities/gmod_subway_81-7037/cl_init.lua b/lua/entities/gmod_subway_81-7037/cl_init.lua new file mode 100644 index 0000000..e2ae52b --- /dev/null +++ b/lua/entities/gmod_subway_81-7037/cl_init.lua @@ -0,0 +1,53 @@ +include("shared.lua") + + +-------------------------------------------------------------------------------- +ENT.ClientProps = {} +ENT.ButtonMap = {} + +-------------------------------------------------------------------------------- +ENT.ClientPropsInitialized = false + +-------------------------------------------------------------------------------- +-- Add doors +local function GetDoorPosition(i,k,j) + if j == 0 + then return Vector(347.5 - 32*k - 230*i,-65*(1-2*k),-2.8) + else return Vector(347.5 - 32*(1-k) - 230*i,-65*(1-2*k),-2.8) + end +end +for i=0,3 do + for k=0,1 do + ENT.ClientProps["door"..i.."x"..k.."a"] = { + model = "models/metrostroi/81/81-7036_door1.mdl", + pos = GetDoorPosition(i,k,0), + ang = Angle(0,180*(1-k),0) + } + ENT.ClientProps["door"..i.."x"..k.."b"] = { + model = "models/metrostroi/81/81-7036_door2.mdl", + pos = GetDoorPosition(i,k,1), + ang = Angle(0,180*(1-k),0) + } + end +end +table.insert(ENT.ClientProps,{ + model = "models/metrostroi/81/81-7036_door4.mdl", + pos = Vector(-487.0,-2.2,-4.5), + ang = Angle(0,0,0) +}) +table.insert(ENT.ClientProps,{ + model = "models/metrostroi/81/81-7036_door4.mdl", + pos = Vector(461.0,1.2,-4.5), + ang = Angle(0,180,0) +}) + + + +-------------------------------------------------------------------------------- +function ENT:Think() + self.BaseClass.Think(self) +end + +function ENT:Draw() + self.BaseClass.Draw(self) +end \ No newline at end of file diff --git a/lua/entities/gmod_subway_81-7037/init.lua b/lua/entities/gmod_subway_81-7037/init.lua new file mode 100644 index 0000000..be3968e --- /dev/null +++ b/lua/entities/gmod_subway_81-7037/init.lua @@ -0,0 +1,38 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +ENT.BogeyDistance = 650 -- Needed for gm trainspawner + +--------------------------------------------------- +-- Defined train information +-- Types of wagon(for wagon limit system): +-- 0 = Head or intherim +-- 1 = Only head +-- 2 = Only intherim +--------------------------------------------------- +ENT.SubwayTrain = { + Type = "81", + Name = "81-7037", + WagType = 2, + Manufacturer = "KVZ", +} + +function ENT:Initialize() + + -- Set model and initialize + self:SetModel("models/metrostroi/81/81-7037.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create bogeys + self.FrontBogey = self:CreateBogey(Vector( 325-20,0,-80),Angle(0,180,0),true) + self.RearBogey = self:CreateBogey(Vector(-325-10,0,-80),Angle(0,0,0),false) +end + + +-------------------------------------------------------------------------------- +function ENT:Think() + local retVal = self.BaseClass.Think(self) + return retVal +end \ No newline at end of file diff --git a/lua/entities/gmod_subway_81-7037/shared.lua b/lua/entities/gmod_subway_81-7037/shared.lua new file mode 100644 index 0000000..c8d245f --- /dev/null +++ b/lua/entities/gmod_subway_81-7037/shared.lua @@ -0,0 +1,24 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" + +ENT.Spawnable = false --NOT FINISHED +ENT.AdminSpawnable = false --NOT FINISHED + +function ENT:PassengerCapacity() + return 300 +end + +function ENT:GetStandingArea() + return Vector(-450,-30,-45),Vector(380,30,-45) +end + +function ENT:InitializeSystems() + self:LoadSystem("KK","Relay","Switch") + self:LoadSystem("Pneumatic","81_717_Pneumatic") +end diff --git a/lua/entities/gmod_subway_81-703_int/cl_init.lua b/lua/entities/gmod_subway_81-703_int/cl_init.lua new file mode 100644 index 0000000..51c5143 --- /dev/null +++ b/lua/entities/gmod_subway_81-703_int/cl_init.lua @@ -0,0 +1,1511 @@ +-------------------------------------------------------------------------------- +-- 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.ButtonMap["PanelLamp"] = { + pos = Vector(443.5,-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(452.4-0.3,-30.1-1,-7.29+0.15), + ang = Angle(0,-90,90-20), + width = 315, + height = 240, + scale = 0.0588, + hideseat=0.2, + + buttons = { + {ID = "GRP", x=41.0+41.7*3,y=58.4, 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=41.0+41.7*4,y=58.4, 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=41.0+41.7*5,y=58.4, radius=20, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-703/cabin_lamp_white.mdl",color = Color(91,91,178),z = 10, var="SD",}, + sprite = {bright=0.25,size=0.25,scale=0.07,color=Color(100,120,255),z=12,} + }}, + ----Кнопки + { ID = "KU4Set", x=35.8+44*0, y=127.3, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-703/cabin_button_black.mdl",ang = 180,z=2, + var="KU4",speed=16, + sndvol = 0.10, snd = function(val) return val and "button2_on" or "button1_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + { ID = "KU5Set", x=35.8+44*1, y=127.3, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-703/cabin_button_black.mdl",ang = 180,z=2, + var="KU5",speed=16, + sndvol = 0.10, snd = function(val) return val and "button3_on" or "button1_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + { ID = "KU9Set", x=35.8+44*2, y=127.3, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-703/cabin_button_black.mdl",ang = 180,z=2, + var="KU9",speed=16, + sndvol = 0.10, snd = function(val) return val and "button2_on" or "button1_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + { ID = "KU8Set", x=35.8+44*3, y=127.3, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-703/cabin_button_red.mdl",ang = 180,z=2, + var="KU8",speed=16, + sndvol = 0.10, snd = function(val) return val and "button2_on" or "button1_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + { ID = "KU10Set", x=195.5, y=171.8, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-703/cabin_button_red.mdl",ang = 180,z=2, + var="KU10",speed=16, + sndvol = 0.10, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + { ID = "KU11Set", x=35.8+44*4, y=127.3, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-703/cabin_button_black.mdl",ang = 180,z=2, + var="KU11",speed=16,vmin=0,vmax=1, + sndvol = 0.10, snd = function(val) return val and "button1_on" or "button1_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + { ID = "KU7Set", x=35.8+44*5, y=127.3, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-703/cabin_button_red.mdl",ang = 180,z=2, + 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 = "KU7KToggle", x=35.8+44*5, y=127.3-34, radius=15, tooltip="", model = { + model = "models/metrostroi_train/81-703/cabin_doors_cover.mdl",ang = 110,z=11,vmin=0.21,vmax=0.0, + var="KU7K",speed=1.5,disableinv="KU7Set", + sndvol = 0.10, snd = function(val) return val and "kr_left" or "kr_right" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + varTooltip = true, + }}, + { ID = "KU6Set", x=96.8, y=171.8, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-703/cabin_button_black.mdl",ang = 180,z=2, + 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 = "KU6KToggle", x=96.8+5, y=171.8-34, radius=15, tooltip="", model = { + model = "models/metrostroi_train/81-703/cabin_doors_cover.mdl",ang = 180-10,z=11,vmin=0,vmax=0.21, + var="KU6K",speed=1.5,disableinv="KU6Set", + sndvol = 0.10, snd = function(val) return val and "kr_left" or "kr_right" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + varTooltip = true, + }}, + { ID = "KU1Toggle", x=49,y=190,radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, + var="KU1",speed=6, vmin=1,vmax=0, + 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=245,y=190,radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, + var="KU2",speed=6, vmin=1,vmax=0, + 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"}, + }}, + { ID = "KU12Toggle", x=145,y=190,radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, + var="KU12",speed=6, vmin=1,vmax=0, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} + +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 + +addTW10Cosume("Main") + +--VU Panel +ENT.ButtonMap["VU"] = { + pos = Vector(456,-17.80,20), + ang = Angle(0,270,90), + width = 70, + height = 100, + scale = 0.0625, + hideseat=0.2, + + buttons = { + { ID = "VUToggle", x=0, y=0, w=70, h=100, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.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(459,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/81-702/buttons/vu_13b.mdl", z=20, ang=Angle(-90,0,0), + var="KU16",speed=6, + sndvol = 0.5, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} + + +ENT.ButtonMap["Stopkran"] = { + pos = Vector(459,27,20.7), + ang = Angle(0,-90,90), + width = 200, + height = 1300, + scale = 0.1/2, + buttons = { + {ID = "EmergencyBrakeValveToggle",x=0, y=0, w=200, h=1300, tooltip="", tooltip="",tooltip="",states={"Train.Buttons.Closed","Train.Buttons.Opened"},var="EmergencyBrakeValve"}, + } +} +ENT.ClientProps["stopkran"] = { + model = "models/metrostroi_train/81-717/stop_mvm.mdl", + pos = Vector(456,21.2,13), + ang = Angle(0,270,0), + hide = 0.8, +} + +ENT.ButtonMap["AVMain"] = { + pos = Vector(397.5-0.4,38.8-1,36), + ang = Angle(0,90,90), + width = 335, + height = 380, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "AVToggle", x=0, y=0, w=300, h=380, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_av8r.mdl", z=80, 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(397.5,41,18), + ang = Angle(0,90,90), + width = 290+0, + height = 155, + 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_brown.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=110, y=0, w=100, h=140, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.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=220, y=0, w=100, h=140, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.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), + }}, + } +} + +ENT.ClientProps["tab"] = { + model = "models/metrostroi_train/Equipment/tab.mdl", + pos = Vector(12.0-0.4,-1,-2), + ang = Angle(0,0,0), + skin = 0, + hide = 2, +} + +-- Battery panel +ENT.ButtonMap["Battery"] = { + pos = Vector(398.98-0.4,23.24-1,22.5), + ang = Angle(0,90,90), + width = 250, + height = 160, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "VBToggle", x=0, y=0, w=250, h=160, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_brown_3.mdl", z=15, ang = 180, + var="VB",speed=6, + sndvol = 0.8, snd = function(val) return val and "vu223_on" or "vu223_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} + + + +-- Parking brake panel +ENT.ButtonMap["ParkingBrake"] = { + pos = Vector(448,45.5,-2.0), + ang = Angle(0,-83,90), + width = 340, + height = 400, + scale = 0.0625, + + buttons = { + {ID = "ParkingBrakeLeft",x=0, y=0, w=170, h=400, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.ParkingBrake"),ent:GetPackedRatio("ManualBrake")*100) end}, + {ID = "ParkingBrakeRight",x=170, y=0, w=170, 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(446.8,59.2,23), + ang = Angle(0,-53,90), + width = 60, + height = 250, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "KU13Set", x=0, y=0, w=60,h=100, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/vu_13b.mdl", z=17, ang=Angle(-90,0,0), + labels={{model="models/metrostroi_train/81-707/labels/vu_labels.mdl",skin=9,ang=90,z=10,x=0,y=-13.5}}, + var="KU13",speed=6, + sndvol = 1, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "KU3Toggle", x=0, y=110, w=60,h=100, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/vu_13b.mdl", z=17, ang=Angle(-90,0,0), + labels={{model="models/metrostroi_train/81-707/labels/vu_labels.mdl",skin=10,ang=90,z=10,x=0,y=-13.5}}, + var="KU3",speed=6, + sndvol = 1, snd = function(val) return val and "vu13a_on" or "vu13a_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Unlocked","Train.Buttons.Locked"}, + }}, + } +} + + +ENT.ButtonMap["HVMeters"] = { + pos = Vector(450.5,-56.7,34.5), + ang = Angle(0,-150,90), + width = 64, + height = 128, + scale = 0.0625, + + buttons = { + {ID = "!EnginesCurrent", x=0, y=0, w=64, h=60, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesCurrent"),ent:GetPackedRatio("EnginesCurrent")*1000-500) end}, + {ID = "!EnginesVoltage", x=0, y=68, w=64, h=60, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesVoltage"),ent:GetPackedRatio("EnginesVoltage")*1000) end}, + } +} +ENT.ButtonMap["Speedometer"] = { + pos = Vector(451.2,-51.7,22.5), + ang = Angle(0,-148,89), + width = 150, + height = 150, + scale = 0.0625, + + buttons = { + {ID = "!Speedometer", x=0, y=0, w=150, h=150, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.Speed"),ent:GetPackedRatio("Speed")*100) end}, + } +} +ENT.ButtonMap["BLTLPressure"] = { + pos = Vector(452.4,-53.4,10.5), + ang = Angle(0,-138,90), + width = 114, + height = 114, + 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}, + } +} +ENT.ButtonMap["BCPressure"] = { + pos = Vector(453,-50.2,4.2), + ang = Angle(0,-100,90), + + width = 78, + height = 78, + scale = 0.0625, + + buttons = { + {ID = "!BCPressure", x=39,y=39,radius=39,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BCPressure"),ent:GetPackedRatio("BCPressure")*6) end}, + } +} +ENT.ButtonMap["BatteryVoltage"] = { + pos = Vector(455.6,-18,10.8), + ang = Angle(0,270,90), + width = 60, + height = 60, + scale = 0.0625, + + buttons = { + {ID = "!BatteryVoltage", x=0,y=0,w=60,h=60,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BatteryVoltage"),ent:GetPackedRatio("BatteryVoltage")*100) end}, + } +} + + +ENT.ButtonMap["DriverValveBLDisconnect"] = { + pos = Vector(443.5,-53,-37.61), + ang = Angle(-90,0,0), + width = 200, + height = 90, + scale = 0.0625, + + buttons = { + {ID = "DriverValveBLDisconnectToggle", x=0, y=0, w=200, h=90, tooltip="", model = { + var="DriverValveBLDisconnect",sndid="brake_disconnect", + sndvol = 1, snd = function(val) return "disconnect_valve" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} +ENT.ButtonMap["DriverValveTLDisconnect"] = { + pos = Vector(447,-48,-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 = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} + +ENT.ButtonMap["FrontPneumatic"] = { + pos = Vector(463,-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+10, -30, -69), + ang = Angle(0,-90,0), + hide = 0.5, +} +ENT.ClientProps["FrontTrain"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_blue.mdl", + pos = Vector(450+10, 31, -69), + ang = Angle(0,-90,0), + hide = 0.5, +} +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+6,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-14, -30, -69), + ang = Angle(0,90,0), + hide = 0.5, +} +ENT.ClientProps["RearBrake"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_red.mdl", + pos = Vector(-450-14, 31, -69), + ang = Angle(0,90,0), + hide = 0.5, +} +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"}}, + } +} + + +-- UAVA +ENT.ButtonMap["UAVAPanel"] = { + pos = Vector(453-5,56,-3), + ang = Angle(0,-70,90), + width = 180, + height = 200, + scale = 0.0625, + + buttons = { + {ID = "UAVAToggle",x=0, y=0, w=60, h=200, tooltip="", model = { + plomb = {var="UAVAPl", ID="UAVAPl",}, + var="UAVA", + sndid="UAVALever",sndvol = 1, snd = function(val) return val and "uava_on" or "uava_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "UAVACToggle",x=60, y=0, w=120, h=200, tooltip="",var="UAVAC",states={"Train.Buttons.UAVAOff","Train.Buttons.UAVAOn"}}, + } +} + +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(460.7,16-1,40), + ang = Angle(0,-90,90), + width = 650, + height = 1850, + scale = 0.1/2, + buttons = { + {ID = "FrontDoor",x=0,y=0,w=650,h=1850, 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(411,66,40), + ang = Angle(0,0,90), + width = 642, + height = 1850, + scale = 0.1/2, + buttons = { + {ID = "CabinDoor",x=0,y=0,w=642,h=1850, 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(395.2,-16,37), + ang = Angle(0,90,90), + width = 642, + height = 1850, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=642,h=1850, 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["PassengerDoor2"] = { + pos = Vector(395.2,16,37), + ang = Angle(0,-90,90), + width = 642, + height = 1850, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=642,h=1850, tooltip=""}, + } +} + +ENT.ButtonMap["RearDoor"] = { + pos = Vector(-464,-16,37), + ang = Angle(0,90,90), + width = 650, + height = 1850, + scale = 0.1/2, + buttons = { + {ID = "RearDoor",x=0,y=0,w=650,h=1850, 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(448.91,-52.62,-4.37), + ang = Angle(0.000000,-133.000000,0.000000), + hideseat = 0.2, +} + + + +ENT.ClientProps["controller"] = { + model = "models/metrostroi_train/81-707/kv_ezh.mdl", + pos = Vector(450.6,-21.73-1,-6.0+0.1), + ang = Angle(0,180+15,0), + hideseat = 0.2, +} + +ENT.ClientProps["reverser"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = ENT.ClientProps["controller"].pos+Vector(0,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.6,-0.1,-1.5), + ang = Angle(180,180-20,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(447.2-4.7,-58.5+2.0,-34), + ang = Angle(7,88,-90), + hideseat = 0.2, +} +ENT.ClientProps["train_disconnect"] = { + model = "models/metrostroi_train/81-707/cran3.mdl", + pos = Vector(450.4-4.5,-54.35+2.55,-27.45), + ang = Angle(92,-100,90), + hideseat = 0.2, +} +ENT.ClientProps["parking_brake"] = { + model = "models/metrostroi_train/81-703/cabin_parking.mdl", + pos = Vector(449.735626,35.158592,-14.843545), + ang = Angle(-90.000000,8.000000,0.000000), + hideseat = 0.2, +} + + +-------------------------------------------------------------------------------- +ENT.ClientProps["train_line"] = { + model = "models/metrostroi_train/Equipment/arrow_e_nm.mdl", + pos = Vector(450.183258,-56.169998,5.598449), + ang = Angle(170.000000,-138.000000,90.000000), + hideseat = 0.2, +} + +ENT.ClientProps["brake_line"] = { + model = "models/metrostroi_train/Equipment/arrow_e_tm.mdl", + pos = Vector(450.149994,-56.150002,5.526259), + ang = Angle(170.000000,-138.000000,90.000000), + hideseat = 0.2, +} + +ENT.ClientProps["brake_cylinder"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(453.210052,-52.644321,1.665846), + ang = Angle(-124.500000,78.000000,-90.000000), + hideseat = 0.2, +} + +---------------------------------------------------------------- +ENT.ClientProps["voltmeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(448.880005,-57.949409,27.453575), + ang = Angle(-90.000000,0.000000,-59.500000), + hideseat = 0.2, +} + +ENT.ClientProps["ampermeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(448.904572,-57.946339,31.797873), + ang = Angle(-90.000000,0.000000,-59.500000), + hideseat = 0.2, +} + + +ENT.ClientProps["volt1"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(455.646423,-19.933491,7.878962), + ang = Angle(-90.000000,0.000000,0.000000), + hideseat = 0.2, +} + + +ENT.ClientProps["speed1"] = { + model = "models/metrostroi_train/Equipment/arrow_voltmeter_old.mdl", + pos = Vector(445.700012,-56.200001,15.704302), + ang = Angle(90.000000,125.038704,2.903226), + hideseat = 0.2, +} +ENT.ClientProps["salon"] = { + model = "models/metrostroi_train/81-703/703_salon_int.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2.0, +} +ENT.ClientProps["salon3"] = { + model = "models/metrostroi_train/81-703/703_cabine.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["salon2"] = { + model = "models/metrostroi_train/81-703/81-703_Underwagon.mdl", + pos = Vector(-23.5,0,-191), + ang = Angle(0,0,0), + hide=2, +} + +ENT.ClientProps["Lamps_cab1"] = { + model = "models/metrostroi_train/81-502/cabin_lamp_light.mdl", + pos = Vector(-5.556452,-0.075187,0.965615), + ang = Angle(0,0,0), + hide = 0.8, +} +ENT.ClientProps["Lamps_pult"] = { + model = "models/metrostroi_train/equipment/lamp_gauges.mdl", + pos = Vector(446.027-9.5,-55.398,42.27), + ang = Angle(-4.305,6.175,8), + hideseat = 0.2, +} +ENT.ClientProps["Lamps_emer1"] = { + model = "models/metrostroi_train/81-703/lights_emer2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 1.5, +} +ENT.ClientProps["Lamps_emer2"] = { + model = "models/metrostroi_train/81-703/lights_emer.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 1.5, +} +ENT.ClientProps["Lamps_half1"] = { + model = "models/metrostroi_train/81-703/lights_group1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["Lamps_half2"] = { + model = "models/metrostroi_train/81-703/lights_group2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide = true, +} + +ENT.ClientProps["bortlamps1"] = { + model = "models/metrostroi_train/81-502/bort_lamps_body.mdl", + pos = Vector(408,68.5,34), + ang = Angle(0,0,0), + hide = 2, +} +ENT.ClientProps["bortlamp1_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = Vector(408,69.4,34+3.25), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp1_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = Vector(408,69.4,34-0.02), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp1_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = Vector(408,69.4,34-3.3), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamps2"] = { + model = "models/metrostroi_train/81-502/bort_lamps_body.mdl", + pos = Vector(408,-65.5,34), + ang = Angle(0,180,0), + hide = 2, +} +ENT.ClientProps["bortlamp2_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = Vector(408,-66.4,34+3.25), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp2_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = Vector(408,-66.4,34-0.02), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp2_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = Vector(408,-66.4,34-3.3), + ang = Angle(0,180,0), + nohide = true, +} + +-------------------------------------------------------------------------------- +-- Add doors +--[[ local function GetDoorPosition(i,k,j) + if j == 0 + then return Vector(323.0 - 0.5*k - 0.8*(1-k) - 233.5*i,-62.8*(1-2.045*k),-5.3) + else return Vector(323.0 - 0.5*(1-k) - 0.8*(1-k) - 233.5*i,-62.8*(1-2.045*k),-5.3) + end +end +for i=0,3 do + for k=0,1 do + ENT.ClientProps["door"..i.."x"..k.."a"] = { + model = "models/metrostroi_train/81-703/81-703_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-703/81-703_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-22,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-22,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-22,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-22,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-22.5,-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-22.5,-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-22.5,-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-22.5,-65.305+2.5,-6.7), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door1"] = { + model = "models/metrostroi_train/81-703/81-703_door_tor.mdl", + pos = Vector(460.349304,-14.530000,-6.986293), + ang = Angle(0.000000,-90.000000,0.000000), + hide = 2, +} + + +ENT.ClientProps["door2"] = { + model = "models/metrostroi_train/81-703/81-703_door_tor.mdl", + pos = Vector(-463.935913,16.530001,-7.556937), + ang = Angle(0.000000,-270.000000,0.000000), + hide = 2, +} + + +ENT.ClientProps["door3"] = { + model = "models/metrostroi_train/81-703/81-703_door_interior_a.mdl", + pos = Vector(395.6,-16,-8,5), + ang = Angle(0.000000,90.000000,0.000000), + hide = 2, +} + + +ENT.ClientProps["door4"] = { + model = "models/metrostroi_train/81-710/81-710_door_cab.mdl", + pos = Vector(410.954041,66.258118,-5.998950), + ang = Angle(0.000000,-90.000000,0.000000), + hide = 2, +} + + + +ENT.ClientProps["UAVALever"] = { + model = "models/metrostroi_train/81-703/cabin_uava.mdl", + pos = Vector(450.264801,56.001812,-9.879532), + ang = Angle(0,-90+10,0), + hideseat = 0.8, +} + + + +ENT.ClientProps["DistantLights"] = { + model = "models/metrostroi_train/81-703/81-703_projcetor_light.mdl", + pos = Vector(-23,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,1,-191), + ang = Angle(0,0,0), + nohide = true +} + +ENT.Lights = { + [1] = { "headlight", Vector(475,0,-20), Angle(0,0,0), Color(188,130,88), brightness = 5 ,fov = 90, texture = "models/metrostroi_train/equipment/headlight",shadows = 1,headlight=true}, + [21] = { "headlight", Vector(441,-40.0,40.2), Angle(75,-25,0), Color(255,130,88), fov=125, farz=80,brightness = 4,shadows = 1, texture = "models/metrostroi_train/equipment/headlight", hidden = "Lamps_pult"}, + [22] = { "headlight", Vector(441,-55.0,35.2), Angle(0,0,0), Color(255,130,88), fov=125, farz=65,brightness = 6,shadows = 0, texture = "models/metrostroi_train/equipment/headlight", hidden = "Lamps_pult"}, + + -- Emergency lit + [9] = { "dynamiclight", Vector(200, 0, -5), Angle(0,0,0), Color(255, 176, 59), brightness = 2, distance = 200}, + [10] = { "dynamiclight", Vector(-150, 0, -5), Angle(0,0,0), Color(255, 176, 59), brightness = 2, distance = 200}, + [11] = { "dynamiclight", Vector( 200, 0, -5), Angle(0,0,0), Color(255, 176, 59), brightness = 3, distance = 260}, + [12] = { "dynamiclight", Vector( 0, 0, -5), Angle(0,0,0), Color(255, 176, 59), brightness = 3, distance = 260}, + [13] = { "dynamiclight", Vector(-260, 0, -5), Angle(0,0,0), Color(255, 176, 59), brightness = 3, distance = 260}, + -- Cabin + [23] = { "dynamiclight", Vector(425,0,40), Angle(0,0,0), Color(252, 157, 77), brightness = 0.0007, distance = 600, hidden = "salon3"}, + + [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 }, + + [15] = { "light",Vector(408,69.4,34+3.25), Angle(0,0,0), Color(254,254,254), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [16] = { "light",Vector(408,69.4,34-0.02), Angle(0,0,0), Color(40,240,122), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [17] = { "light",Vector(408,69.4,34-3.3), Angle(0,0,0), Color(254,210,18), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [18] = { "light",Vector(408,-66.4,34+3.25), Angle(0,0,0), Color(254,254,254), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [19] = { "light",Vector(408,-66.4,34-0.02), Angle(0,0,0), Color(40,240,122), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [20] = { "light",Vector(408,-66.4,34-3.3), Angle(0,0,0), Color(254,210,18), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + + Lamps_pult = {"light", Vector(436.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(399,1.2,57.5), 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.EmergencyValveEPKRamp = 0 + self.EmergencyBrakeValveRamp = 0 + + self.OldZPos = 0 + self.OldSpeedoDelta = 0 + self.SpeedoDelta = 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(410-15+i*6.6-3*6.6/2,69,-26))) + leftNum:SetSkin(num) + end + if IsValid(rightNum) then + rightNum:SetPos(self:LocalToWorld(Vector(-392-15-i*6.6-3*6.6/2,-66.6,-26))) + rightNum:SetSkin(num) + end + end +end +-------------------------------------------------------------------------------- +function ENT:Think() + self.BaseClass.Think(self) + if not self.RenderClientEnts 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 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("UAVALever", self:GetPackedBool("UAVA") and 1 or 0, 0,0.6, 128, 3,false) + self:Animate("stopkran", self:GetPackedBool("EmergencyBrakeValve") and 1 or 0, 0,0.25, 256, 3,false) + + self:Animate("brake_disconnect",self:GetPackedBool("DriverValveBLDisconnect") and 0 or 1,0.25,0.5, 4,false) + self:Animate("train_disconnect",self:GetPackedBool("DriverValveTLDisconnect") and 1 or 0,0.25,0, 4,false) + + 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:ShowHideSmooth("Lamps_pult",PL) + self:SetLightPower("Lamps_pult",PL>0,PL) + self:SetLightPower(22,PL>0,PL) + self:SetLightPower(23,PL>0,PL) + + local bright = HL1*0.3+HL2*0.7 + self:SetLightPower(1,bright>0,bright) + + local em = self:GetNW2Int("EMAType",-1) ~= -1 + if self.Em ~= em then + self.Em = em + self:ShowHide("bortlamps1",em) + self:ShowHide("bortlamps2",em) + self:ShowHideSmooth("bortlamp1_w",em and 1 or 0) + self:ShowHideSmooth("bortlamp1_g",em and 1 or 0) + self:ShowHideSmooth("bortlamp1_y",em and 1 or 0) + self:ShowHideSmooth("bortlamp2_w",em and 1 or 0) + self:ShowHideSmooth("bortlamp2_g",em and 1 or 0) + self:ShowHideSmooth("bortlamp2_y",em and 1 or 0) + end + if em then + local Bortlamp_w = em and self:Animate("Bortlamp_w",self:GetPackedBool("SD") and 1 or 0,0,1,16,false) or 0 + local Bortlamp_g = em and self:Animate("Bortlamp_g",self:GetPackedBool("GRP") and 1 or 0,0,1,16,false) or 0 + local Bortlamp_y = em and self:Animate("Bortlamp_y",self:GetPackedBool("BrY") and 1 or 0,0,1,16,false) or 0 + self:ShowHide("bortlamps1",em) + self:ShowHide("bortlamps2",em) + self:ShowHideSmooth("bortlamp1_w",Bortlamp_w) + self:ShowHideSmooth("bortlamp1_g",Bortlamp_g) + self:ShowHideSmooth("bortlamp1_y",Bortlamp_y) + self:ShowHideSmooth("bortlamp2_w",Bortlamp_w) + self:ShowHideSmooth("bortlamp2_g",Bortlamp_g) + self:ShowHideSmooth("bortlamp2_y",Bortlamp_y) + self:SetLightPower(15,Bortlamp_w > 0, Bortlamp_w) + self:SetLightPower(18,Bortlamp_w > 0, Bortlamp_w) + self:SetLightPower(16,Bortlamp_g > 0, Bortlamp_g) + self:SetLightPower(19,Bortlamp_g > 0, Bortlamp_g) + self:SetLightPower(17,Bortlamp_y > 0, Bortlamp_y) + self:SetLightPower(20,Bortlamp_y > 0, Bortlamp_y) + end + + 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 + + -- Simulate pressure gauges getting stuck a little + self:Animate("brake",1-self:GetPackedRatio("CranePosition"), 0.00, 0.48, 256,24) + 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:ShowHide("reverser",self:GetNW2Int("WrenchMode",0)==1) + self:ShowHide("rcureverser",self:GetNW2Int("WrenchMode",0)==3) + self:Animate("volt1",self:GetPackedRatio("BatteryVoltage"), 0.637,0.4885,45,3) + + self:Animate("brake_line",self:GetPackedRatio("BLPressure"),0.6285, 0.84, 256,2)--,,0.01) + self:Animate("train_line",self:GetPackedRatio("TLPressure"),0.6285, 0.843, 256,2)--,,0.01) + self:Animate("brake_cylinder",self:GetPackedRatio("BCPressure"),0.04, 0.83, 256,2)--,,0.03) + local voltage = math.min(1,self:GetPackedRatio("EnginesVoltage")) + local current = self:GetPackedRatio("EnginesCurrent") + self:Animate("voltmeter", voltage >= 0.7 and voltage-(voltage/12*(voltage-(voltage >= 0.85 and 0.3 or 0.5))) or voltage, 0.62875,0.367,92,2) + self:Animate("ampermeter", current<0.49 and current-current/((1-current)*10+current*10) or current, 0.617,0.383, nil, nil, 92,20,3) + + local speed = self:GetPackedRatio("Speed")*100 + --Speedo swing + local vec = -(self:LocalToWorld(Vector(445.7,-56.2,15.7))*self:GetUp()).z + local posdelta = math.Clamp((vec-self.OldZPos)*(2+speed/90),-0.4,0.4) + local delta = (self.OldSpeedoDelta-posdelta) + + self.SpeedoDelta = self.SpeedoDelta+(delta-self.SpeedoDelta)*2*0.02--*self.DeltaTime + local speed1 = math.Clamp(self:GetPackedRatio("Speed")+self.SpeedoDelta,0,1) + self.OldZPos = vec + self.OldSpeedoDelta = posdelta + + -- Rotate wheel + self:Animate("speed1", speed1 > 0.41 and speed1-(speed1/12*(speed1-(speed1 > 0.95 and 0.634 or 0.3))) or speed1, 0.76, 0.97895, nil, nil, 256,2,0.01) + + ---- + 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.48, 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) + 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.8+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) + -- 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+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) + 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.25,1) + else + self:SetSoundState("rk",0,0) + end + end + self:SetSoundState("ring_old",self:GetPackedBool("Ring") and 0.4 or 0,0.76) + + + local work = self:GetPackedBool("AnnPlay") + local noise = self:GetNW2Int("AnnouncerNoise",false) or self:GetNW2Int("AnnouncerBuzz",-1) + local volume = self:GetNW2Float("UPOVolume",1) + local noisevolume = self:GetNW2Float("UPONoiseVolume",1) + self.BPSNBuzzVolume = self.BPSNBuzzVolume or 0 + local buzzvolume = volume + if not self:GetNW2Int("AnnouncerNoise",false) then + 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.BPSNBuzzVolume > noisevolume then + self.BPSNBuzzVolume = math.Clamp(self.BPSNBuzzVolume + 8*(noisevolume-self.BPSNBuzzVolume)*dT,0.1,1) + else + self.BPSNBuzzVolume = math.Clamp(self.BPSNBuzzVolume + 0.5*(noisevolume-self.BPSNBuzzVolume)*dT,0.1,1) + end + for k,v in ipairs(self.AnnouncerPositions) do + self:SetSoundState("announcer_noiseW"..k,0,1) + for i=1,3 do + self:SetSoundState(Format("announcer_noise%d_%d",i,k),(work and i<=2) and self.BPSNBuzzVolume*(v[3] or 1) or 0,1) + end + end + for k,v in ipairs(self.AnnouncerPositions) do + if self.Sounds["announcer"..k] and IsValid(self.Sounds["announcer"..k]) then self.Sounds["announcer"..k]:SetVolume(work and (v[3] or 1) or 0) end + end + else + if self.Sounds["announcer1"] and IsValid(self.Sounds["announcer1"]) then buzzvolume = (1-(self.Sounds["announcer1"]:GetLevel())*math.Rand(0.9,3))*buzzvolume*2 end + if self.BPSNBuzzVolume > buzzvolume then + self.BPSNBuzzVolume = math.Clamp(self.BPSNBuzzVolume + 8*(buzzvolume-self.BPSNBuzzVolume)*dT,0.1,1) + else + self.BPSNBuzzVolume = math.Clamp(self.BPSNBuzzVolume + 0.4*(buzzvolume-self.BPSNBuzzVolume)*dT,0.1,1) + end + for k,v in ipairs(self.AnnouncerPositions) do + volume = volume*(v[3] or 1) + self:SetSoundState("announcer_noiseW"..k,(noise~=true and noise>-1) and noisevolume*volume or 0,1) + for i=1,3 do + self:SetSoundState(Format("announcer_noise%d_%d",i,k),(work and i==noise or (noise==true and i<2)) and volume*self.BPSNBuzzVolume*self:GetNW2Float("UPOBuzzVolume",1) or 0,1) + end + end + for k,v in ipairs(self.AnnouncerPositions) do + if IsValid(self.Sounds["announcer"..k]) then self.Sounds["announcer"..k]:SetVolume(work and v[3] or 0) end + end + end +end + +function ENT:OnAnnouncer(volume,id) + return self:GetPackedBool("AnnPlay") and volume or 0 +end + +function ENT:Draw() + self.BaseClass.Draw(self) +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: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 == "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 "lk4_on" or "lk4_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 == "KK" then + return range > 0 and "kk_on" or "kk_off",location,1,pitch--0.8 + end + if soundid == "RPB" then + return range > 0 and "rpb_on" or "rpb_off",location,1,pitch + end + if soundid == "KD" then + return range > 0 and "kd_on" or "kd_off",location,1,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 + if soundid == "UAVAC" then + return "uava_reset",location,range,pitch + end + end + return soundid,location,range,pitch +end + +local dist = { + Back1 = 550, + AVMain = 550, + AV1 = 550, + AV2 = 550, + Battery = 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() diff --git a/lua/entities/gmod_subway_81-703_int/init.lua b/lua/entities/gmod_subway_81-703_int/init.lua new file mode 100644 index 0000000..9cacdc2 --- /dev/null +++ b/lua/entities/gmod_subway_81-703_int/init.lua @@ -0,0 +1,480 @@ +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","KU1","KU2","KU3","KU4","KU5","KU6","KU7","KU8","KU9","KU10","KU11","KU12","KU13","KU16", + "KU6K","KU7K", + "RRIEnable","RRIAmplifier", + "DriverValveBLDisconnect","DriverValveTLDisconnect","EmergencyBrakeValve", + "GV", + "R_Program1","R_Program2","UAVA","UAVAC", +} +ENT.SyncFunctions = { + "" +} + +function ENT:Initialize() + + self.Plombs = { + --RST = true, + Init = true, + --OtklAVU = true, + UAVA = true, + VU=true, + } + -- Set model and initialize + self:SetModel("models/metrostroi_train/81-703/81-703.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create seat entities + self.DriverSeat = self:CreateSeat("driver",Vector(425,-38.2,-31.5),Angle(0,0,0)) + self.InstructorsSeat = self:CreateSeat("instructor",Vector(430,40,-48+6+2.5),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",helper="EmergencyBrakeValveToggle"}, + + [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(462, -30, -62), Radius = 8, + }, + { + ID = "FrontTrainLineIsolationToggle", + Pos = Vector(462, 30, -62), Radius = 8, + }, + { + ID = "RearBrakeLineIsolationToggle", + Pos = Vector(-468, 30, -62), Radius = 8, + }, + { + ID = "RearTrainLineIsolationToggle", + Pos = Vector(-468, -30, -62), Radius = 8, + }, + { + ID = "FrontDoor", + Pos = Vector(462,32,-10), Radius = 12, + }, + { + ID = "CabinDoor", + Pos = Vector(462,58,-10), Radius = 10, + }, + { + ID = "CabinDoor", + Pos = Vector(462,58,-30), Radius = 10, + }, + { + ID = "CabinDoor", + Pos = Vector(395,65,-10), Radius = 16, + }, + { + ID = "PassengerDoor", + Pos = Vector(397,35,8), Radius = 16, + }, + { + ID = "RearDoor", + Pos = Vector(-457,-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 + [30] = 29, -- 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 lightsActive1 = math.min(1,Panel.MainLights1)^2 + local lightsActive2 = math.min(1,Panel.MainLights2) + 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)--math.Round((self.Electric.I24-150)/1000.0,1.5)) + + -- 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) + + -- Red RP + 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:SetPackedBool("BrY",Panel.BrY > 0) + self.TrueBrakeAngle = self.TrueBrakeAngle or 0 + if self.ManualBrake < 0.001 and self.ManualBrake > self.TrueBrakeAngle then self.TrueBrakeAngle = self.ManualBrake end + if self.ManualBrake > 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.BD2:TriggerInput("Set",self.PassengerDoor and 1 or 0) + + self:SetPackedRatio("LampsCount",math.Clamp(1-self.Electric.Cosume,0.3,1)) + self:SetPackedBool("VPR",Panel.VPR > 0) + 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) + --KRR + --self:SetPackedBool("KRR",self.KRR.Value > 0.5) + --print(self.LK1.Value,self.LK2.Value,self.LK3.Value,self.LK4.Value,self.RheostatController.Position,self.PositionSwitch.Position,self.KSH1.Value,self.KSH2.Value) + --print(self.PositionSwitch.SelectedPosition,self.RheostatController.SelectedPosition)--self.Engines.E13/2,self.Engines.RotationRate) + -- Feed packed floats + self:SetNW2Int("WrenchMode",self.KVWrenchMode) + self:SetPackedRatio("CranePosition", 1-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/82.0) + self:SetPackedBool("EmergencyBrakeValve",self.EmergencyBrakeValve.Value > 0) + --print(self.LK1.Value,self.LK2.Value,self.LK3.Value,self.LK4.Value,self.LK5.Value,self.TSH.Value) + --print(self.LK1.Value,self.LK2.Value,self.LK3.Value,self.LK4.Value,self.LK5.Value,self.TSH.Value) + -- Update ARS system (no ars on E) +-- self:SetPackedRatio(3, self.ALS_ARS.Speed/100.0) + 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 + 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 == "ParkingBrakeLeft" then + self.ManualBrake = math.max(0.0,self.ManualBrake - 0.05) + if self.ManualBrake == 0.0 then return end + --print(self.ManualBrake) + end + if button == "ParkingBrakeRight" then + self.ManualBrake = math.min(1.0,self.ManualBrake + 0.05) + if self.ManualBrake == 1.0 then return end + --print(self.ManualBrake) + 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 + + + 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("rcu_in","cabin",0.7) + self.KVWrenchMode = 3 + elseif self.KVWrenchMode ~= 0 and self.KV.ReverserPosition == 0 then + if self.KVWrenchMode == 3 then + self:PlayOnce("rcu_out","cabin",0.7) + else + self:PlayOnce("revers_out","cabin",0.7) + end + self.KVWrenchMode = 0 + self.KV:TriggerInput("Enabled",0) + end + end + 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 == "KVT2Set" then self.KVT:TriggerInput("Close",1) end + if button == "KU6" and not self.KU7Pressed and self.KU7.Value == 0 then self.KU7K:TriggerInput("Open",1) self.KU6K:TriggerInput("Close",1) end + if button == "KU7" and not self.KU6Pressed and self.KU6.Value == 0 then self.KU7K:TriggerInput("Close",1) self.KU6K:TriggerInput("Open",1) 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) + 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 + 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 > -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 diff --git a/lua/entities/gmod_subway_81-703_int/shared.lua b/lua/entities/gmod_subway_81-703_int/shared.lua new file mode 100644 index 0000000..5cfe91d --- /dev/null +++ b/lua/entities/gmod_subway_81-703_int/shared.lua @@ -0,0 +1,607 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.PrintName = "E (81-703) int" +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" +ENT.SkinsType = "81-703" +ENT.Model = "models/metrostroi_train/81-703/81-703.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 + +-- 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 + +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+15,32,16) ,Angle(0,180,0),"Train.703.Breakers1"}, + {Vector(407.5+13,48,21) ,Angle(0,180,0),"Train.703.Breakers2"}, + {Vector(407.5+28,48,16) ,Angle(0,40,0),"Train.Common.HelpersPanel"}, + {Vector(407.5+11,37,5) ,Angle(30,0,0),"Train.703.Parking"}, + {Vector(450+6,0,26),Angle(60,0,0),"Train.Common.CouplerCamera"}, +} +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["epv_on"] = "subway_trains/common/pneumatic/epv_on.mp3" + self.SoundNames["epv_off"] = "subway_trains/common/pneumatic/epv_off.mp3" + self.SoundPositions["epv_on"] = {100,1e9,Vector(437.2,-53.1,-32.0),1} + self.SoundPositions["epv_off"] = {100,1e9,Vector(437.2,-53.1,-32.0),1} + self.SoundPositions["epv_off"] = {60,1e9,Vector(437.2,-53.1,-32.0),1} + self.SoundNames["rpb_off"] = "subway_trains/717/relays/lsd_2.mp3" + self.SoundNames["rpb_on"] = "subway_trains/717/relays/relay_on.mp3" + self.SoundPositions["rpb_on"] = {100,1e9,Vector(400,25,-35),1} + self.SoundPositions["rpb_off"] = {100,1e9,Vector(400,25,-35),1} + self.SoundNames["rvt_on"] = "subway_trains/717/relays/new/rvt_on1.mp3" + self.SoundNames["rvt_off"] = "subway_trains/717/relays/new/rvt_off.mp3" + self.SoundPositions["rvt_on"] = {100,1e9,Vector(400,25,-35),1} + self.SoundPositions["rvt_off"] = {100,1e9,Vector(400,25,-35),1} + self.SoundNames["r1_5_on"] = "subway_trains/717/relays/new/r1_5_on.mp3" + self.SoundNames["r1_5_off"] = "subway_trains/717/relays/new/r1_5_off.mp3" + self.SoundPositions["r1_5_on"] = {100,1e9,Vector(400,25,-35),1} + self.SoundPositions["r1_5_off"] = {100,1e9,Vector(400,25,-35),1} + + self.SoundNames["kd_off"] = "subway_trains/717/relays/lsd_2.mp3" + self.SoundNames["kd_on"] = "subway_trains/717/relays/new/kd_on.mp3" + self.SoundPositions["kd_on"] = {100,1e9,Vector(400,-25,55),1} + self.SoundPositions["kd_off"] = {100,1e9,Vector(400,-25,55),1} + + self.SoundNames["k25_on"] = "subway_trains/717/relays/new/k25_on1.mp3" + self.SoundNames["k25_off"] = "subway_trains/717/relays/new/k25_off.mp3" + self.SoundPositions["k25_on"] = {120,1e9,Vector(400,25,-35),1} + self.SoundPositions["k25_off"] = {120,1e9,Vector(400,25,-35),1} + self.SoundNames["ro_on"] = "subway_trains/717/relays/ro_on.mp3" + self.SoundNames["ro_off"] = "subway_trains/717/relays/new/ro_off.mp3" + self.SoundPositions["ro_on"] = {140,1e9,Vector(400,25,-35),1} + self.SoundPositions["ro_off"] = {140,1e9,Vector(400,25,-35),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(400,-40,-45),0.5} + self.SoundPositions["avu_off"] = {60,1e9, Vector(400,-40,-45),0.5} + --Подвагонка + self.SoundNames["lk2_on"] = "subway_trains/717/pneumo/lk1_on.mp3" + self.SoundNames["lk2_off"] = "subway_trains/717/pneumo/lk2_off.mp3" + self.SoundNames["lk5_on"] = "subway_trains/717/pneumo/lk2_on.mp3" + self.SoundNames["lk5_off"] = "subway_trains/717/pneumo/lk2_off.mp3" + self.SoundNames["lk4_on"] = "subway_trains/717/pneumo/lk3_on.mp3" + self.SoundNames["lk4_off"] = "subway_trains/717/pneumo/lk3_off.mp3" + self.SoundPositions["lk2_on"] = {440,1e9,Vector(-60,-40,-66),0.22} + self.SoundPositions["lk2_off"] = {440,1e9,Vector(-60,-40,-66),0.3} + self.SoundPositions["lk5_on"] = self.SoundPositions["lk2_on"] + self.SoundPositions["lk5_off"] = self.SoundPositions["lk2_off"] + self.SoundPositions["lk4_on"] = self.SoundPositions["lk2_on"] + self.SoundPositions["lk4_off"] = self.SoundPositions["lk2_off"] + + self.SoundNames["compressor"] = {loop=1.79,"subway_trains/717/compressor/compressor_717_start2.wav","subway_trains/717/compressor/compressor_717_loop2.wav", "subway_trains/717/compressor/compressor_717_stop2.wav"} + self.SoundPositions["compressor"] = {485,1e9,Vector(-118,-40,-66),0.85} + 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(449.96,-22.73,-6.49)} + 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"] = {80,1e9,Vector(452.3,-24.0,4.0)} + + 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/kru2-3_1.mp3", + "subway_trains/717/kru/kru2-3_2.mp3", + "subway_trains/717/kru/kru2-3_3.mp3", + "subway_trains/717/kru/kru2-3_4.mp3", + } + self.SoundNames["kru_3_2"] = { + "subway_trains/717/kru/kru3-2_1.mp3", + "subway_trains/717/kru/kru3-2_2.mp3", + "subway_trains/717/kru/kru3-2_3.mp3", + "subway_trains/717/kru/kru3-2_4.mp3", + } + self.SoundPositions["kru_0_1"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_1_2"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_2_1"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_1_0"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_2_3"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_3_2"] = {80,1e9,Vector(452.3,-24.0,4.0)} + + 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(449.14598,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(445, 0,-63),1} + self.SoundNames["rear_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["rear_isolation"] = {300,1e9,Vector(-450, 0,-63),1} + + self.SoundNames["crane013_brake2"] = {loop=true,"subway_trains/common/pneumatic/013_brake2.wav"} + self.SoundPositions["crane013_brake2"] = {80,1e9,Vector(448.91,-52.62,-4.37),0.86} + self.SoundNames["crane334_brake_high"] = {loop=true,"subway_trains/common/pneumatic/334_brake.wav"} + self.SoundPositions["crane334_brake_high"] = {80,1e9,Vector(448.91,-52.62,-4.37),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(448.91,-52.62,-4.37),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(448.91,-52.62,-4.37),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(448.91,-52.62,-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(448.91,-52.62,-70),0.45} + self.SoundNames["crane334_release"] = {loop=true,"subway_trains/common/pneumatic/334_release3.wav"} + self.SoundPositions["crane334_release"] = {80,1e9,Vector(448.91,-52.62,-4.37),0.2} + self.SoundNames["crane334_release_2"] = {loop=true,"subway_trains/common/pneumatic/334_release2.wav"} + self.SoundPositions["crane334_release_2"] = {80,1e9,Vector(448.91,-52.62,-4.37),0.2} + + self.SoundNames["valve_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["valve_brake"] = {400,1e9,Vector(464.40,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(456.55,-52.57,-55),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["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(450,-20,-55)} + + 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/kv40_0_T1.mp3"} + self.SoundNames["kv40_t1_0"] = {"subway_trains/ezh/kv40/kv40_T1_0.mp3"} + self.SoundNames["kv40_t1_t1a"] = {"subway_trains/ezh/kv40/kv40_T1_T1A.mp3"} + self.SoundNames["kv40_t1a_t1"] = {"subway_trains/ezh/kv40/kv40_T1A_T1.mp3"} + self.SoundNames["kv40_t1a_t2"] = {"subway_trains/ezh/kv40/kv40_T1A_T2.mp3"} + self.SoundNames["kv40_t2_t1a"] = {"subway_trains/ezh/kv40/kv40_T2_T1A.mp3"} + self.SoundNames["kv40_0_x1"] = {"subway_trains/ezh/kv40/kv40_0_X1.mp3"} + self.SoundNames["kv40_x1_0"] = {"subway_trains/ezh/kv40/kv40_X1_0.mp3"} + self.SoundNames["kv40_x1_x2"] = {"subway_trains/ezh/kv40/kv40_X1_X2.mp3"} + self.SoundNames["kv40_x2_x1"] = {"subway_trains/ezh/kv40/kv40_X2_X1.mp3"} + self.SoundNames["kv40_x2_x3"] = {"subway_trains/ezh/kv40/kv40_X2_X3.mp3"} + self.SoundNames["kv40_x3_x2"] = {"subway_trains/ezh/kv40/kv40_X3_X2.mp3"} + self.SoundPositions["kv70_fix_on"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv70_fix_off"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv40_0_t1"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv70_t1_0_fix"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv40_t1_0"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv40_t1_t1a"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv40_t1a_t1"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv40_t1a_t2"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv40_t2_t1a"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv40_0_x1"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv40_x1_0"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv40_x1_x2"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv40_x2_x1"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv40_x2_x3"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + self.SoundPositions["kv40_x3_x2"] = {100,1e9,Vector(450.6,-22.73,-5.90),1} + + self.SoundNames["samm_revers_in"] = {"subway_trains/ezh3/rc_ars/reversor_rc_in.mp3"} + self.SoundNames["samm_revers_out"] = {"subway_trains/ezh3/rc_ars/reversor_rc_in.mp3"} + self.SoundNames["samm_0-1"] = {"subway_trains/ezh3/rc_ars/0-1.mp3"} + self.SoundNames["samm_0-2"] = {"subway_trains/ezh3/rc_ars/0-2.mp3"} + self.SoundNames["samm_2-0"] = {"subway_trains/ezh3/rc_ars/2-0.mp3"} + self.SoundPositions["samm_0-2"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_2-0"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_0-1"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_revers_out"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_revers_in"] = {60,1e9,Vector(442.2-6,-50,-10)} + + 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"] = {100,1e9,Vector(400,-40,50)} + + 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(449.118378+7.6,33.493385,-14.713276),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.2} + 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.2} + self.SoundNames["announcer_noise3_"..k] = {loop=true,"subway_announcers/upo/noiseS3.wav"} + self.SoundPositions["announcer_noise3_"..k] = {v[2] or 300,1e9,v[1],v[3]*0.2} + self.SoundNames["announcer_noiseW"..k] = {loop=true,"subway_announcers/upo/noiseW.wav"} + self.SoundPositions["announcer_noiseW"..k] = {v[2] or 300,1e9,v[1],v[3]*0.2} + 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", "AnnouncementsRRI") + + self:LoadSystem("ALSCoil") + + self:LoadSystem("PRU_502") + self:LoadSystem("BD2","Relay","") +end +function ENT:PostInitializeSystems() + self.Electric:TriggerInput("Type",self.Electric.E) + if self.VU then self.VU:TriggerInput("Set",0) end +end + +ENT.SubwayTrain = { + Type = "E", + Name = "81-703", + WagType = 2, + ARS = { + NoEPK = true, + NoUAVA = true, + }, + ALS = { + HaveAutostop = true, + }, + EKKType = 703, +} +ENT.NumberRanges = {{3001,3100},{3301,3400},{3501,3699},{4701,4750},{4851,4900}} diff --git a/lua/entities/gmod_subway_81-714_lvz/cl_init.lua b/lua/entities/gmod_subway_81-714_lvz/cl_init.lua new file mode 100644 index 0000000..cfbc70d --- /dev/null +++ b/lua/entities/gmod_subway_81-714_lvz/cl_init.lua @@ -0,0 +1,1278 @@ +-------------------------------------------------------------------------------- +-- 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.ClientSounds = {} +ENT.AutoAnims = {} +ENT.AutoAnimNames = {} + +ENT.ClientProps["salon"] = { + model = "models/metrostroi_train/81-717/interior_mvm_int.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["schemes"] = { + model = "models/metrostroi_train/81-717/labels/schemes.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, + callback = function(ent) + ent.PassSchemesDone = false + end, +} +ENT.ClientProps["lamps"] = { + model = "models/metrostroi_train/81-717/lamps_type1_int.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["body_additional"] = { + model = "models/metrostroi_train/81-717/714_body_additional.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["seats_old"] = { + model = "models/metrostroi_train/81-717/couch_old_int.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=1.5, +} +ENT.ClientProps["handrails_old"] = { + model = "models/metrostroi_train/81-717/handlers_old_int.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["seats_new"] = { + model = "models/metrostroi_train/81-717/couch_new_int.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=1.5, + callback = function(ent) + ent.NewBlueSeats = false + end, +} +ENT.ClientProps["handrails_new"] = { + model = "models/metrostroi_train/81-717/handlers_new_int.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["seats_old_cap"] = { + model = "models/metrostroi_train/81-717/couch_cap_l.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, +} +ENT.ClientProps["seats_old_cap_o"] = { + model = "models/metrostroi_train/81-717/couch_cap_l.mdl", + pos = Vector(-285,410,13), + ang = Angle(0,70,-70), + hideseat=0.8, +} +ENT.ClientProps["seats_new_cap"] = { + model = "models/metrostroi_train/81-717/couch_new_cap.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, + callback = function(ent) + ent.NewBlueSeats = false + end, +} +ENT.ClientProps["seats_new_cap_o"] = { + model = "models/metrostroi_train/81-717/couch_new_cap.mdl", + pos = Vector(-285,410,13), + ang = Angle(0,70,-70), + hideseat=0.8, + callback = function(ent) + ent.NewBlueSeats = false + end, +} +ENT.ClientProps["otsek_cap_l"] = { + model = "models/metrostroi_train/81-717/otsek_cap_l.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, +} +ENT.ClientProps["otsek_cap_r"] = { + model = "models/metrostroi_train/81-717/otsek_cap_r.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, +} + +ENT.ButtonMap["FrontPneumatic"] = { + pos = Vector(470-9,-45.0,-58.0+5), + 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(449+11, -34, -62), + ang = Angle( 15,-90,0), + hide = 2, +} +ENT.ClientProps["FrontTrain"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_blue.mdl", + pos = Vector(449+11, 34, -62), + 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-0.5,45.0,-58.0+5), + ang = Angle(0,270,90), + width = 1050, + height = 100, + scale = 0.1, + + buttons = { + {ID = "RearTrainLineIsolationToggle",x=500, y=0, w=400, h=100, tooltip="",var="RtI",states={"Train.Buttons.Opened","Train.Buttons.Closed"}}, + {ID = "RearBrakeLineIsolationToggle",x=000, y=0, w=400, h=100, tooltip="",var="RbI",states={"Train.Buttons.Opened","Train.Buttons.Closed"}}, + {ID = "ParkingBrakeToggle",x=900, y=0, w=150, h=100, tooltip="",var="ParkingBrake"}, + } +} +ENT.ClientProps["RearTrain"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_blue.mdl", + pos = Vector(-450-22, -34, -62), + ang = Angle(-15,90,0), + hide = 2, +} +ENT.ClientProps["RearBrake"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_red.mdl", + pos = Vector(-450-22, 34, -62), + ang = Angle( 15,90,0), +} +ENT.ClientProps["ParkingBrake"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_white.mdl", + pos = Vector(-450-22, -55, -62), + ang = Angle(-15,90,0), + hide = 0.5, +} +ENT.ClientSounds["ParkingBrake"] = {{"ParkingBrake",function() return "disconnect_valve" end,1,1,50,1e3,Angle(-90,0,0)}} +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-9.5,50+20,-60+2), + 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-9.5,36+20,-78+2), + 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(-185,-68,-50), + ang = Angle(0,0,90), + width = 170, + height = 80, + scale = 0.1, + hideseat=0.1, + hide=true, + screenHide = true, + + buttons = { + {ID = "AirDistributorDisconnectToggle",x=0,y=0,w= 170,h = 80,tooltip="",var="AD",states={"Train.Buttons.On","Train.Buttons.Off"}}, + } +} + +-- Battery panel +ENT.ButtonMap["Battery"] = { + pos = Vector(-470.0,-10,50.6), + ang = Angle(0,-90,180), + width = 100, + height = 100, + scale = 0.08, + hide=0.8, + + buttons = { + {ID = "VBToggle", x=0, y=0, w=100, h=100, tooltip="ВБ: Выключатель батареи", model = { + model = "models/metrostroi_train/81-717/battery_enabler.mdl", + var="VB",speed=0.5,vmin=1,vmax=0.8, + sndvol = 0.8, snd = function(val) return val and "pak_on" or "pak_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + } +} +ENT.ButtonMap["Voltages"] = { + pos = Vector(-464.3,-15.2,60.7), + ang = Angle(0,90,90), + width = 145, + height = 75, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "!BatteryVoltage", x=0, y=0, w=72.5,h=75, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BatteryVoltage"),ent:GetPackedRatio("BatteryVoltage")*150) end}, + {ID = "!BatteryCurrent", x=72.5, y=0, w=72.5,h=75, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BatteryCurrent"),ent:GetPackedRatio("BatteryCurrent")*500) end}, + } +} +ENT.ButtonMap["Pressures"] = { + pos = Vector(-464.3,6.3,61), + ang = Angle(0,90,90), + width = 160, + height = 80, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "!BCPressure", x=0, y=0, w=80,h=80, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BCPressure"),ent:GetPackedRatio("BCPressure")*6) end}, + {ID = "!BLTLPressure", x=80, y=0, w=80,h=80, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BLTLPressure"),ent:GetPackedRatio("TLPressure")*16,ent:GetPackedRatio("BLPressure")*16) end}, + } +} +ENT.ButtonMap["couch_cap"] = { + pos = Vector(-460,60,0), + ang = Angle(0,0,70), + width = 1000, + height = 600, + scale = 0.0625, + hide=0.8, + buttons = { + {ID = "CouchCap",x=0,y=0,w=1000,h=600, tooltip=""} + } +} +ENT.ButtonMap["couch_cap_o"] = { + pos = Vector(-464,-21,-45), + ang = Angle(0,70,5), + width = 1100, + height = 380, + scale = 0.0625, + hide=0.8, + buttons = { + {ID = "CouchCap",x=0,y=0,w=1100,h=380, tooltip=""} + } +} +ENT.ButtonMap["Stopkran"] = { + pos = Vector(-397,-60,0), + ang = Angle(0,180,70), + width = 1000, + height = 600, + scale = 0.0625, + hide=0.8, + buttons = { + {ID = "EmergencyBrakeValveToggle",x=0,y=0,w=1000,h=600,tooltip="", tooltip="",tooltip="",states={"Train.Buttons.Closed","Train.Buttons.Opened"},var="EmergencyBrakeValve"}, + } +} +ENT.ButtonMap["AV_S"] = { + pos = Vector(-456,60,-15), + ang = Angle(0,0,90), + width = 325, + height = 205, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "A53Toggle",x=25*0,y=80*0,w=25,h=45,tooltip=""}, + {ID = "A56Toggle",x=25*1,y=80*0,w=25,h=45,tooltip=""}, + {ID = "A54Toggle",x=25*2,y=80*0,w=25,h=45,tooltip=""}, + {ID = "A24Toggle",x=25*3,y=80*0,w=25,h=45,tooltip=""}, + {ID = "A39Toggle",x=25*4,y=80*0,w=25,h=45,tooltip=""}, + {ID = "A23Toggle",x=25*5,y=80*0,w=25,h=45,tooltip=""}, + {ID = "A14Toggle",x=25*6,y=80*0,w=25,h=45,tooltip=""}, + {ID = "A13Toggle",x=25*7,y=80*0,w=25,h=45,tooltip=""}, + {ID = "A31Toggle",x=25*8,y=80*0,w=25,h=45,tooltip=""}, + {ID = "A32Toggle",x=25*9,y=80*0,w=25,h=45,tooltip=""}, + {ID = "A16Toggle",x=25*10,y=80*0,w=25,h=45,tooltip=""}, + {ID = "A12Toggle",x=25*11,y=80*0,w=25,h=45,tooltip=""}, + {ID = "A49Toggle",x=25*12,y=80*0,w=25,h=45,tooltip=""}, + ------------------------------------------------------------------------ + {ID = "A15Toggle",x=25*0,y=80*1,w=25,h=45,tooltip=""}, + {ID = "A27Toggle",x=25*1,y=80*1,w=25,h=45,tooltip=""}, + {ID = "A50Toggle",x=25*2,y=80*1,w=25,h=45,tooltip=""}, + {ID = "A8Toggle",x=25*3,y=80*1,w=25,h=45,tooltip=""}, + {ID = "A52Toggle",x=25*4,y=80*1,w=25,h=45,tooltip=""}, + {ID = "A19Toggle",x=25*5,y=80*1,w=25,h=45,tooltip=""}, + {ID = "A10Toggle",x=25*6,y=80*1,w=25,h=45,tooltip=""}, + {ID = "A22Toggle",x=25*7,y=80*1,w=25,h=45,tooltip=""}, + {ID = "A30Toggle",x=25*8,y=80*1,w=25,h=45,tooltip=""}, + {ID = "A1Toggle",x=25*9,y=80*1,w=25,h=45,tooltip=""}, + {ID = "A2Toggle",x=25*10,y=80*1,w=25,h=45,tooltip=""}, + {ID = "A3Toggle",x=25*11,y=80*1,w=25,h=45,tooltip=""}, + {ID = "A4Toggle",x=25*12,y=80*1,w=25,h=45,tooltip=""}, + ------------------------------------------------------------------------ + {ID = "A5Toggle",x=25*0,y=80*2,w=25,h=45,tooltip=""}, + {ID = "A6Toggle",x=25*1,y=80*2,w=25,h=45,tooltip=""}, + {ID = "A72Toggle",x=25*2,y=80*2,w=25,h=45,tooltip=""}, + {ID = "A38Toggle",x=25*3,y=80*2,w=25,h=45,tooltip=""}, + {ID = "A20Toggle",x=25*4,y=80*2,w=25,h=45,tooltip=""}, + {ID = "A25Toggle",x=25*5,y=80*2,w=25,h=45,tooltip=""}, + {ID = "A37Toggle",x=25*6,y=80*2,w=25,h=45,tooltip=""}, + {ID = "A55Toggle",x=25*7,y=80*2,w=25,h=45,tooltip=""}, + {ID = "A45Toggle",x=25*8,y=80*2,w=25,h=45,tooltip=""}, + {ID = "A66Toggle",x=25*9,y=80*2,w=25,h=45,tooltip=""}, + {ID = "A51Toggle",x=25*10,y=80*2,w=25,h=45,tooltip=""}, + {ID = "A65Toggle",x=25*11,y=80*2,w=25,h=45,tooltip=""}, + {ID = "A28Toggle",x=25*12,y=80*2,w=25,h=45,tooltip=""}, + } +} +for i,button in pairs(ENT.ButtonMap.AV_S.buttons) do + button.model = { + model = "models/metrostroi_train/81-720/button_av1.mdl", + var=button.ID:Replace("Toggle",""),speed=8, + sndvol = 0.8,snd = function(val) return val and "av_on" or "av_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + } + button.ID = "1:"..button.ID +end +ENT.ButtonMap["AV_T"] = { + pos = Vector(-470,30,-18), + ang = Angle(0,80,90), + width = 200, + height = 45, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "A70Toggle",x=25*0,y=0,w=25,h=45,tooltip=""}, + {ID = "A81Toggle",x=25*4,y=0,w=25,h=45,tooltip=""}, + {ID = "A80Toggle",x=25*5,y=0,w=25,h=45,tooltip=""}, + {ID = "A18Toggle",x=25*6,y=0,w=25,h=45,tooltip=""}, + } +} +for i,button in pairs(ENT.ButtonMap.AV_T.buttons) do + button.model = { + model = "models/metrostroi_train/81-720/button_av1.mdl", + var=button.ID:Replace("Toggle",""),speed=8, + sndvol = 0.8,snd = function(val) return val and "av_on" or "av_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + } + button.ID = "1:"..button.ID +end + +ENT.ButtonMap["DriverValveBLTLDisconnect"] = { + pos = Vector(-466,44,-18), + ang = Angle(0,80,90), + width = 160, + height = 140, + scale = 0.0625, + + buttons = { + {ID = "DriverValveBLDisconnectToggle", x=0, y=0, w=80, h=140, tooltip="", model = { + var="DriverValveBLDisconnect",sndid="brake_disconnect", + sndvol = 1, snd = function(val) return "disconnect_valve" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + {ID = "DriverValveTLDisconnectToggle", x=80, y=0, w=80, h=140, tooltip="", model = { + var="DriverValveTLDisconnect",sndid="train_disconnect", + sndvol = 1, snd = function(val) return val and "pneumo_TL_open" or "pneumo_TL_disconnect" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} + +ENT.ClientProps["brake_disconnect"] = { + model = "models/metrostroi_train/81-707/cran1.mdl", + pos = Vector(-466,47,-24), + ang = Angle(90,80,90), + hideseat=0.2, +} +ENT.ClientProps["train_disconnect"] = { + model = "models/metrostroi_train/81-707/cran3.mdl", + pos = Vector(-465,51,-24), + ang = Angle(90,80,90), + hideseat=0.2, +} +ENT.ClientProps["brake013"] = { + model = "models/metrostroi_train/81-717/cran13.mdl", + pos = Vector(-466,49,-10), + ang = Angle(0,58,0), + hideseat = 0.2, +} +ENT.ClientProps["brake334"] = { + model = "models/metrostroi_train/81-703/cabin_cran_334.mdl", + pos = Vector(-466,49,-10), + ang = Angle(0,-50,0), + hideseat = 0.2, +} +if not ENT.ClientSounds["br_013"] then ENT.ClientSounds["br_013"] = {} end +table.insert(ENT.ClientSounds["br_013"],{"brake013",function(ent,_,var) return "br_013" end,0.7,1,50,1e3,Angle(-90,0,0)}) +if not ENT.ClientSounds["br_334"] then ENT.ClientSounds["br_334"] = {} end +table.insert(ENT.ClientSounds["br_334"],{"brake334",function(ent,_,var) return "br_334_"..var end,1,1,50,1e3,Angle(-90,0,0)}) + +ENT.ButtonMap["Shunt"] = { + pos = Vector(-468,28,-5), + ang = Angle(0,80,90), + width = 206, + height = 200, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "BPSNonToggle",x=39,y=30,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-5, + var="BPSNon",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end,sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "!RZPLight",x=39,y=130,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",z = -3, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=2,x=-0.3,y=-0.3,z=20.6,var="RZP",color=Color(255,60,40)} + }}, + {ID = "ConverterProtectionSet",x=39,y=180,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -4, + var="ConverterProtection",speed=16,min=1,max=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "L_1Toggle",x=80,y=30,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-5, + var="L_1",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "StartSet",x=80,y=180,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + var="Start",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button2_off" end, sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "VozvratRPSet",x=121,y=180,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + var="VozvratRP",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button2_on" or "button1_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + + {ID = "RV", x=176, y=140, radius=0, model = { + model = "models/metrostroi_train/81-717/buttons/breaker_common001.mdl",ang=270,z=12, + var="RV",speed=2,min=1,max=0.5,getfunc = function(ent) return ent:GetPackedRatio("RV") end, + sndvol = 0.8, snd = function(_,val) return val%2>0 and "pak_on" or "pak_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID="RV-",x=176-30, y=140-30, w=30,h=60, tooltip="ВТПР(влево)",states={"Train.Buttons.Back","Train.Buttons.0","Train.Buttons.Forward"},varTooltip = function(ent) return ent:GetPackedRatio("RV") end,}, + {ID="RV+",x=176 , y=140-30, w=30,h=60, tooltip="ВТПР(вправо)",states={"Train.Buttons.Back","Train.Buttons.0","Train.Buttons.Forward"},varTooltip = function(ent) return ent:GetPackedRatio("RV") end,}, + } +} + +ENT.ButtonMap["VU"] = { + pos = Vector(-468.7,24,-5), + ang = Angle(0,80,90), + width = 60, + height = 120, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "A84Toggle", x=0, y=0, w=60,h=120, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.mdl", z=-20, ang = Angle(180,-90,0), + plomb = {model = "models/metrostroi_train/equipment/vu_plomb_right.mdl",ang=Angle(-90,90,0),x=25,y=33.2,z=9.3,var="A84Pl", ID="A84Pl",}, + var="A84",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} + +ENT.ButtonMap["FrontDoor"] = { + pos = Vector(470-11,16,48.4-2), + 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.ClientProps["door1"] = { + model = "models/metrostroi_train/81-717/door_torec_spb.mdl", + pos = Vector(459.2,-15.9,-2.7), + ang = Angle(0,89.5,0), + hide=2, +} + +ENT.ButtonMap["RearDoor"] = { + pos = Vector(-470-3,-16,48.4-2), + ang = Angle(0,90,90), + width = 642, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "RearDoor",x=0,y=0,w=642,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.ClientProps["door2"] = { + model = "models/metrostroi_train/81-717/door_torec_spb.mdl", + pos = Vector(-472.5,15.75,-2.7), + ang = Angle(0,-90,0), + hide=2, +} + +-------------------------------------------------------------------------------- +ENT.ClientPropsInitialized = false +ENT.ClientProps["train_line"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(-465.05,14.2,58.55), + ang = Angle(-90,0,180), + hideseat=0.8, +} +ENT.ClientProps["brake_line"] = { + model = "models/metrostroi_train/Equipment/arrow_tm.mdl", + pos = Vector(-465.01,14.2,58.55), + ang = Angle(-90,0,180), + hideseat=0.8, +} +ENT.ClientProps["brake_cylinder"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(-464.94,9.0,58.45), + ang = Angle(-90,0,180), + hideseat=0.8, +} +-------------------------------------------------------------------------------- +ENT.ClientProps["voltmeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(-464.80,-13.07,56.81), + ang = Angle(-90,0,180), + hideseat=0.8, + bscale = Vector(1.2,1.2,1.65) +} +ENT.ClientProps["ampermeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(-464.80,-8.04,56.81), + ang = Angle(-90,0,180), + hideseat=0.8, + bscale = Vector(1.2,1.2,1.65) +} + + +ENT.ClientProps["bortlamps1"] = { + model = "models/metrostroi_train/81-502/bort_lamps_body.mdl", + pos = Vector(-52,67,45.5), + ang = Angle(0,0,0), + hide = 2, +} +ENT.ClientProps["bortlamp1_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = ENT.ClientProps.bortlamps1.pos+Vector(0,0.9,3.25), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp1_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = ENT.ClientProps.bortlamps1.pos+Vector(0,0.9,-0.1), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp1_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = ENT.ClientProps.bortlamps1.pos+Vector(0,0.9,-3.3), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamps2"] = { + model = "models/metrostroi_train/81-717/bort_lamps_body.mdl", + pos = Vector(39,-67,45.5), + ang = Angle(0,180,0), + hide = 2, +} +ENT.ClientProps["bortlamp2_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = ENT.ClientProps.bortlamps2.pos+Vector(0,-0.9,3.25), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp2_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = ENT.ClientProps.bortlamps2.pos+Vector(0,-0.9,-0.1), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp2_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = ENT.ClientProps.bortlamps2.pos+Vector(0,-0.9,-3.3), + ang = Angle(0,180,0), + nohide = true, +} +--[[ +ENT.ClientProps["bortlamps3"] = { + model = "models/metrostroi_train/81-502/bort_lamps_body.mdl", + pos = Vector(-6.5,67,51.2), + ang = Angle(90,0,0), + hide = 2, +} +ENT.ClientProps["bortlamp3_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = ENT.ClientProps.bortlamps3.pos+Vector(3.28,0.9,-0.02), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp3_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = ENT.ClientProps.bortlamps3.pos+Vector(-0.06,0.9,-0.02), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp3_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = ENT.ClientProps.bortlamps3.pos+Vector(-3.33,0.9,-0.02), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamps4"] = { + model = "models/metrostroi_train/81-502/bort_lamps_body.mdl", + pos = Vector(-6.5,-67,51.2), + ang = Angle(90,180,0), + hide = 2, +} +ENT.ClientProps["bortlamp4_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = ENT.ClientProps.bortlamps4.pos+Vector(-3.28,-0.9,-0.02), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp4_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = ENT.ClientProps.bortlamps4.pos+Vector(0.06,-0.9,-0.02), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp4_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = ENT.ClientProps.bortlamps4.pos+Vector(3.33,-0.9,-0.02), + ang = Angle(0,180,0), + nohide = true, +}--]] +-------------------------------------------------------------------------------- +-- Add doors +--[[ local function GetDoorPosition(i,k,j) + if j == 0 + then return Vector(338.0-230.1*i+(1-k)*0.8,-65*(1-2*k),0.761) + else return Vector(338.2-230.1*i+(1-k)*0.8,-65*(1-2*k),0.761) + end +end +for i=0,3 do + for k=0,1 do + ENT.ClientProps["door"..i.."x"..k.."a"] = { + model = "models/metrostroi_train/81-717/door_right_spb.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-717/door_left_spb.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-717/81-717_doors_spb_pos1.mdl", + pos = Vector(338.445+1.2-2.2,65.164,0.807), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door1x1"] = { + model = "models/metrostroi_train/81-717/81-717_doors_spb_pos2.mdl", + pos = Vector(108.324+1.2-2.2,65.164,0.807), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door2x1"] = { + model = "models/metrostroi_train/81-717/81-717_doors_spb_pos3.mdl", + pos = Vector(-122.182+1.6-2.2,65.164,0.807), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door3x1"] = { + model = "models/metrostroi_train/81-717/81-717_doors_spb_pos4.mdl", + pos = Vector(-351.531+0.8-2.2,65.164,0.807), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door0x0"] = { + model = "models/metrostroi_train/81-717/81-717_doors_spb_pos4.mdl", + pos = Vector(338.445+1.2,-65.164,0.807), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door1x0"] = { + model = "models/metrostroi_train/81-717/81-717_doors_spb_pos3.mdl", + pos = Vector(108.324+1.2,-65.164,0.807), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door2x0"] = { + model = "models/metrostroi_train/81-717/81-717_doors_spb_pos2.mdl", + pos = Vector(-122.182+1.6,-65.164,0.807), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door3x0"] = { + model = "models/metrostroi_train/81-717/81-717_doors_spb_pos1.mdl", + pos = Vector(-351.531+0.8,-65.164,0.807), + ang = Angle(0,90,0), + hide = 2.0, +} +for i = 0,12 do + local b = 15--math.random()*15 + local g = 15--b+math.random()*(15-b) + if math.random() > 0.4 then + g = math.random()*15 + b = g + else + g = 15 + b = -10+math.random()*25 + end + ENT.ClientProps["lamp1_"..i+1] = { + model = "models/metrostroi_train/81-717/lamps/lamp_typ1.mdl", + pos = Vector(394.5- 66.65*i, 0, 67.608), + ang = Angle(0,0,0), + color = Color(255,235+g,235+b), + hideseat = 1.1, + } +end +for i=0,4 do + ENT.ClientProps["TrainNumberL"..i] = { + model = "models/metrostroi_train/common/bort_numbers.mdl", + pos = Vector(41+16+i*6.6-5*6.6/2,67.4,-17.8), + ang = Angle(0,180,0), + skin=i, + hide = 1.5, + callback = function(ent) + ent.WagonNumber = false + end, + } + ENT.ClientProps["TrainNumberR"..i] = { + model = "models/metrostroi_train/common/bort_numbers.mdl", + pos = Vector(64+16-i*6.6-5*6.6/2,-67.4,-17.8), + ang = Angle(0,0,0), + skin=i, + hide = 1.5, + callback = function(ent) + ent.WagonNumber = false + end, + } +end + +-- Lights +ENT.Lights = { + -- Interior + [11] = { "dynamiclight", Vector( 200, 0, 0), Angle(0,0,0), Color(255,245,245), brightness = 3, distance = 400 , fov=180,farz = 128, changable = true }, + [12] = { "dynamiclight", Vector( 0, 0, 0), Angle(0,0,0), Color(255,245,245), brightness = 3, distance = 400, fov=180,farz = 128, changable = true }, + [13] = { "dynamiclight", Vector(-200, 0, 0), Angle(0,0,0), Color(255,245,245), brightness = 3, distance = 400 , fov=180,farz = 128, changable = true }, + + -- Side lights + [15] = { "light",Vector(-52,67,45.5)+Vector(0,0.9,3.25), Angle(0,0,0), Color(254,254,254), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [16] = { "light",Vector(-52,67,45.5)+Vector(0,0.9,-0.02), Angle(0,0,0), Color(40,240,122), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [17] = { "light",Vector(-52,67,45.5)+Vector(0,0.9,-3.3), Angle(0,0,0), Color(254,210,18), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [18] = { "light",Vector(39,-67,45.5)+Vector(0,-0.9,3.25), Angle(0,0,0), Color(254,254,254), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [19] = { "light",Vector(39,-67,45.5)+Vector(0,-0.9,-0.02), Angle(0,0,0), Color(40,240,122), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [20] = { "light",Vector(39,-67,45.5)+Vector(0,-0.9,-3.3), Angle(0,0,0), Color(254,210,18), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + + [21] = { "light",Vector(-6.5,67,51.2)+Vector(3.25,0.9,-0.02), Angle(0,0,0), Color(254,254,254), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [22] = { "light",Vector(-6.5,67,51.2)+Vector(-0.06,0.9,-0.02), Angle(0,0,0), Color(40,240,122), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [23] = { "light",Vector(-6.5,67,51.2)+Vector(-3.33,0.9,-0.02), Angle(0,0,0), Color(254,210,18), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [24] = { "light",Vector(-6.5,-67,51.2)+Vector(3.33,-0.9,-0.02), Angle(0,0,0), Color(254,254,254), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [25] = { "light",Vector(-6.5,-67,51.2)+Vector(0.06,-0.9,-0.02), Angle(0,0,0), Color(40,240,122), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [26] = { "light",Vector(-6.5,-67,51.2)+Vector(-3.28,-0.9,-0.02), Angle(0,0,0), Color(254,210,18), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, +} +-------------------------------------------------------------------------------- +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 0, Bortlamp_w) + self:SetLightPower(18, Bortlamp_w > 0, Bortlamp_w) + self:SetLightPower(16, Bortlamp_g > 0, Bortlamp_g) + self:SetLightPower(19, Bortlamp_g > 0, Bortlamp_g) + self:SetLightPower(17, Bortlamp_y > 0, Bortlamp_y) + self:SetLightPower(20, Bortlamp_y > 0, Bortlamp_y) + + local kvr = self:GetNW2Bool("KVR") + local newSeats = self:GetNW2Bool("NewSeats") + self:ShowHide("handrails_old",not kvr) + self:ShowHide("handrails_new",kvr) + self:ShowHide("seats_old",not newSeats) + self:ShowHide("seats_new",newSeats) + + local capOpened = self:GetPackedBool("CouchCap") + local c013 = self:GetPackedBool("Crane013") + self:ShowHide("seats_old_cap_o",capOpened and not newSeats) + self:ShowHide("seats_old_cap",not capOpened and not newSeats) + self:ShowHide("seats_new_cap_o",capOpened and newSeats) + self:ShowHide("seats_new_cap",not capOpened and newSeats) + self:HidePanel("couch_cap",capOpened) + self:HidePanel("couch_cap_o",not capOpened) + self:HidePanel("AV_S",not capOpened) + self:HidePanel("AV_T",not capOpened) + self:HidePanel("Stopkran",not capOpened) + self:ShowHide("otsek_cap_r",not capOpened) + self:ShowHide("brake334",capOpened and not c013) + self:ShowHide("brake013",capOpened and c013) + self:ShowHide("brake_disconnect",capOpened) + self:ShowHide("train_disconnect",capOpened) + self:HidePanel("DriverValveBLTLDisconnect",not capOpened) + self:HidePanel("Shunt",not capOpened) + self:HidePanel("VU",not capOpened) + + self:Animate("brake_disconnect",self:GetPackedBool("DriverValveBLDisconnect") and 1 or 0,0.25,0, 4,false) + self:Animate("train_disconnect",self:GetPackedBool("DriverValveTLDisconnect") and 1 or 0,0.25,0, 4,false) + self:Animate("brake334",self:GetPackedRatio("CranePosition")/5,0.35,0.65,256,24) + self:Animate("brake013",Cpos[self:GetPackedRatio("CranePosition")] or 0, 0.03, 0.458, 256,24) + + self:Animate("brake_line", self:GetPackedRatio("BLPressure"),0.14, 0.875, 256,2)--,,0.01) + self:Animate("train_line", self:GetPackedRatio("TLPressure"),0.14, 0.875, 256,2)--,,0.01) + self:Animate("brake_cylinder", self:GetPackedRatio("BCPressure"),0.14, 0.875, 256,2)--,,0.03) + self:Animate("voltmeter", self:GetPackedRatio("BatteryVoltage"),0.601, 0.400) + self:Animate("ampermeter", 0.5+self:GetPackedRatio("BatteryCurrent"),0.604, 0.398) + + if self.LampType ~= self:GetNW2Int("LampType",1) then + self.LampType = self:GetNW2Int("LampType",1) + end + local activeLights = 0 + for i = 1,13 do + local colV = self:GetNW2Vector("lamp"..i) + local col = Color(colV.x,colV.y,colV.z) + local state = self:Animate("Lamp1_"..i,(self:GetPackedBool("lightsActive"..i)) and 1 or 0,0,1,6,false) + self:ShowHideSmooth("lamp1_"..i,state,col) + activeLights = activeLights + state + end + for i=11,13 do + local col = self:GetNW2Vector("lampD"..i) + if self.LightsOverride[i].vec ~= col then + self.LightsOverride[i].vec = col + self.LightsOverride[i][4] = Color(col.x,col.y,col.z) + self:SetLightPower(i, false) + else + self:SetLightPower(i, activeLights > 0,activeLights/13) + end + end + + local door1 = self:Animate("door1", self:GetPackedBool("FrontDoor") and 0.99 or 0,0,0.25, 4, 0.5) + local door2 = self:Animate("door2", self:GetPackedBool("RearDoor") and (self:GetPackedBool("CouchCap") and 0.25 or 0.99) or 0,0,0.25, 4, 0.5) + + 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 + + + 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) + self:Animate("ParkingBrake", self:GetPackedBool("ParkingBrake") and 1 or 0,1,0, 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) + + 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.8+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,0.95, 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 + + 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*0.6,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 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) + local parking_brake = self:GetPackedRatio("ParkingBrakePressure_dPdT",0) + local parking_brake_abs = math.Clamp(math.abs(parking_brake)-0.3,0,1) + if self.ParkingBrake1 ~= (parking_brake<1) then + self.ParkingBrake1 = (parking_brake<1) + if self.ParkingBrake1 then self:PlayOnce("parking_brake_en","bass",1,1) end + end + if self.ParkingBrake2 ~= (parking_brake>-0.8) then + self.ParkingBrake2 = (parking_brake>-0.8) + if self.ParkingBrake2 then self:PlayOnce("parking_brake_rel","bass",0.6,1) end + end + self:SetSoundState("parking_brake",parking_brake_abs,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 c013 then + 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("crane334_brake",0,1.0) + self:SetSoundState("crane334_brake_reflection",0,1.0) + self:SetSoundState("crane334_brake_slow",0,1.0) + self:SetSoundState("crane334_release",0,1.0) + self:SetSoundState("crane013_release",self.CraneRRamp^1.5,1.0) + self:SetSoundState("crane013_brake",math.Clamp(-self.CraneRamp*1.5-0.1,0,1)^1.3,1.0) + local loudV = self:GetNW2Float("Crane013Loud",0) + if loudV>0 then + if ramp>0 then + self.CraneLRamp = self.CraneLRamp + (math.min(ramp,0)-self.CraneLRamp)*dT*0.5 + else + self.CraneLRamp = self.CraneLRamp + (math.min(ramp,0)-self.CraneLRamp)*dT*1 + end + self:SetSoundState("crane013_brake_l",(math.Clamp(-self.CraneRamp*2.5-0.1,0,1)^1.3)*(1-math.Clamp((-self.CraneLRamp-loudV)*3,0,1)),1.12-math.Clamp((-self.CraneLRamp-0.15)*2,0,1)*0.12) + else + self:SetSoundState("crane013_brake_l",0,1) + end + self:SetSoundState("crane013_brake2",math.Clamp(-self.CraneRamp*1.5-0.95,0,1.5)^2,1.0) + else + self:SetSoundState("crane013_brake",0,1.0) + self:SetSoundState("crane013_release",0,1.0) + --self:SetSoundState("crane013_brake2",0,1.0) + + 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) + end + 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)) + + -- Compressor + self:SetSoundState("compressor",self:GetPackedBool("Compressor") and 0.6 or 0,1) + self:SetSoundState("compressor2",self:GetPackedBool("Compressor") and 0.8 or 0,1) + + -- RK rotation + if self:GetPackedBool("RK") then self.RKTimer = CurTime() end + self:SetSoundState("rk",(self.RKTimer and (CurTime() - self.RKTimer) < 0.2) and 0.7 or 0,1) + + -- BPSN sound + self.BPSNType = self:GetNW2Int("BPSNType",5) + if not self.OldBPSNType then self.OldBPSNType = self.BPSNType end + if self.BPSNType ~= self.OldBPSNType then + for i=1,4 do + self:SetSoundState("bpsn"..i,0,1.0) + end + end + self.OldBPSNType = self.BPSNType + if self.BPSNType<5 then + self:SetSoundState("bpsn"..self.BPSNType,self:GetPackedBool("BPSN") and 1 or 0,1) --FIXME громкоÑть по другому + end + + local work = self:GetPackedBool("AnnPlay") + local buzz = self:GetPackedBool("AnnBuzz") and self:GetNW2Int("AnnouncerBuzz") + local noise = self:GetNW2Int("AnnouncerNoise", -1) + local volume = self:GetNW2Float("UPOVolume",1) + local noisevolume = self:GetNW2Float("UPONoiseVolume",1) + local buzzvolume = volume + if self.Sounds["announcer1"] and IsValid(self.Sounds["announcer1"]) then buzzvolume = (1-(self.Sounds["announcer1"]:GetLevel())*math.Rand(0.9,3))*buzzvolume*2 end + if self.BPSNBuzzVolume > buzzvolume then + self.BPSNBuzzVolume = math.Clamp(self.BPSNBuzzVolume + 8*(buzzvolume-self.BPSNBuzzVolume)*dT,0.1,1) + else + self.BPSNBuzzVolume = math.Clamp(self.BPSNBuzzVolume + 0.4*(buzzvolume-self.BPSNBuzzVolume)*dT,0.1,1) + end + + for k,v in ipairs(self.AnnouncerPositions) do + self:SetSoundState("announcer_noiseW"..k,work and v[3]*noisevolume*volume or 0,1) + for i=1,3 do + self:SetSoundState(Format("announcer_noise%d_%d",i,k),(work and i==noise) and v[3]*volume*self.BPSNBuzzVolume*self:GetNW2Float("UPOBuzzVolume",1) or 0,1) + end + for i=1,2 do + self:SetSoundState(Format("announcer_buzz%d_%d",i,k),(work and i==buzz) and v[3]*volume*self.BPSNBuzzVolume*self:GetNW2Float("UPOBuzzVolume",1) or 0,1) + end + if IsValid(self.Sounds["announcer"..k]) then self.Sounds["announcer"..k]:SetVolume(work and v[3]*volume or 0) end + end +end + +function ENT:OnAnnouncer(volume) + return self:GetPackedBool("AnnPlay") and self:GetNW2Float("UPOVolume",1)*volume or 0 +end + +function ENT:Draw() + self.BaseClass.Draw(self) +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: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 == "pkg" then 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 == "lk2c" then + local speed = self:GetPackedRatio("Speed") + self.SoundPositions[soundid][1] = 350-Lerp(speed/0.1,0,250) + return soundid,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "LK2" then + local speed = self:GetPackedRatio("Speed") + if range == 0 and speed < 20 and self:GetPackedRatio("EnginesCurrent") > 0.55 then + self:PlayOnce("lk2c","bass",1,pitch) + end + 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 == "LK5" and range > 0 then + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["lk5_on"][1] = 440-Lerp(speed/0.1,0,330) + return "lk5_on",location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "brake" then + self:PlayOnce("brake_f",location,range,pitch) + self:PlayOnce("brake_b",location,range,pitch) + return + end + if soundid == "KK" then + return range > 0 and "kk_on" or "kk_off",location,1,0.8 + end + end + return soundid,location,range,pitch +end +Metrostroi.GenerateClientProps() diff --git a/lua/entities/gmod_subway_81-714_lvz/init.lua b/lua/entities/gmod_subway_81-714_lvz/init.lua new file mode 100644 index 0000000..fa41cd6 --- /dev/null +++ b/lua/entities/gmod_subway_81-714_lvz/init.lua @@ -0,0 +1,483 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +ENT.BogeyDistance = 650 -- Needed for gm trainspawner +ENT.SyncTable = { + "A53","A56","A54","A24","A39","A23","A14","A13","A31","A32","A16","A12","A49","A15","A27","A50","A8","A52","A19","A10","A22","A30","A1","A2","A3","A4","A5","A6","A72","A38","A20","A25","A37","A55","A45","A66","A51","A65","A28", + "A70","A81","A80","A18", + "VB","GV", + "DriverValveBLDisconnect","DriverValveTLDisconnect","ParkingBrake", + "A84","BPSNon","ConverterProtection","L_1","Start","VozvratRP" +} + +function ENT:Initialize() + self.Plombs = { + A84 = true, + Init = true, + } + self.LampType = 1 + + -- Set model and initialize + self:SetModel("models/metrostroi_train/81-717/81-717_spb_int.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create seat entities + self.DriverSeat = self:CreateSeat("driver",Vector(-415-16,0,-48+2.5+6),Angle(0,-90,0),"models/vehicles/prisoner_pod_inner.mdl") + --self.InstructorsSeat = self:CreateSeat("instructor",Vector(430,47,-27+2.5),Angle(0,-90,0)) + + -- 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) + + -- Create bogeys + if Metrostroi.BogeyOldMap then + self.FrontBogey = self:CreateBogey(Vector( 317-5,0,-84),Angle(0,180,0),true,"717") + self.RearBogey = self:CreateBogey(Vector(-317+0,0,-84),Angle(0,0,0),false,"717") + self.FrontCouple = self:CreateCouple(Vector( 414+6.545,0,-62),Angle(0,0,0),true,"717") + self.RearCouple = self:CreateCouple(Vector(-419.5-6.545,0,-62),Angle(0,180,0),false,"717") + else + self.FrontBogey = self:CreateBogey(Vector( 317-11,0,-80),Angle(0,180,0),true,"717") + self.RearBogey = self:CreateBogey(Vector(-317+0,0,-80),Angle(0,0,0),false,"717") + self.FrontCouple = self:CreateCouple(Vector( 410-2,0,-66),Angle(0,0,0),true,"717") + self.RearCouple = self:CreateCouple(Vector(-423+2,0,-66),Angle(0,180,0),false,"717") + end + + local pneumoPow = 1.1+(math.random()^0.4)*0.3 + self.FrontBogey.PneumaticPow = pneumoPow + self.RearBogey.PneumaticPow = pneumoPow + + -- Initialize key mapping + self.KeyMap = { + [KEY_1] = "StartSet", + [KEY_8] = "StartSet", + [KEY_W] = "StartSet", + [KEY_PAD_DIVIDE] = "StartSet", + [KEY_0] = "RV+", + [KEY_9] = "RV-", + [KEY_PAD_PLUS] = "RV+", + [KEY_PAD_MINUS] = "RV-", + [KEY_G] = "VozvratRPSet", + [KEY_L] = "HornEngage", + + [KEY_F] = "PneumaticBrakeUp", + [KEY_R] = "PneumaticBrakeDown", + [KEY_PAD_1] = "PneumaticBrakeSet1", + [KEY_PAD_2] = "PneumaticBrakeSet2", + [KEY_PAD_3] = "PneumaticBrakeSet3", + [KEY_PAD_4] = "PneumaticBrakeSet4", + [KEY_PAD_5] = "PneumaticBrakeSet5", + [KEY_PAD_6] = "PneumaticBrakeSet6", + [KEY_PAD_7] = "PneumaticBrakeSet7", + [KEY_PAD_0] = "DriverValveDisconnect", + + [KEY_BACKSPACE] = "EmergencyBrakeValveToggle", + + [KEY_LSHIFT] = { + [KEY_L] = "DriverValveDisconnect", + }, + + [KEY_RSHIFT] = { + [KEY_L] = "DriverValveDisconnect", + }, + } + + + self.InteractionZones = { + { + ID = "FrontBrakeLineIsolationToggle", + Pos = Vector(461.5, -34, -53), Radius = 8, + }, + { + ID = "FrontTrainLineIsolationToggle", + Pos = Vector(461.5, 33, -53), Radius = 8, + }, + { + ID = "RearBrakeLineIsolationToggle", + Pos = Vector(-474.5, 33, -53), Radius = 8, + }, + { + ID = "RearTrainLineIsolationToggle", + Pos = Vector(-474.5, -34, -53), Radius = 8, + }, + { + ID = "ParkingBrakeToggle", + Pos = Vector(-469, -54.5, -53), Radius = 8, + }, + { + ID = "FrontDoor", + Pos = Vector(451.5,35,4), Radius = 20, + }, + { + ID = "RearDoor", + Pos = Vector(-464.8,-35,4), Radius = 20, + }, + { + ID = "GVToggle", + Pos = Vector(140.50,62,-64), Radius = 10, + }, + { + ID = "VBToggle", + Pos = Vector(-470 -15, 53), Radius = 20, + }, + { + ID = "AirDistributorDisconnectToggle", + Pos = Vector(-177, -66, -50), Radius = 20, + }, + } + + + -- Cross connections in train wires + self.TrainWireInverts = { + [28] = true, + [34] = true, + } + self.TrainWireCrossConnections = { + [5] = 4, -- Reverser F<->B + [31] = 32, -- Doors L<->R + } + + -- BPSN type + self.BPSNType = self.BPSNType or 2+math.floor(Metrostroi.PeriodRandomNumber()*7+0.5) + self:SetNW2Int("BPSNType",self.BPSNType) + self.OldTexture = 0 + + self.Lamps = { + broken = {}, + } + local rand = math.random() > 0.8 and 1 or math.random(0.95,0.99) + for i = 1,23 do + if math.random() > rand then self.Lamps.broken[i] = math.random() > 0.5 end + end + + self:TrainSpawnerUpdate() +end +function ENT:UpdateLampsColors() + local lCol,lCount = Vector(),0 + if self.LampType == 1 then + local r,g,col = 15,15 + local typ = math.Round(math.random()) + local rnd = 0.5+math.random()*0.5 + for i = 1,13 do + local chtp = math.random() > rnd + + if typ == 0 and not chtp or typ == 1 and chtp then + g = math.random()*15 + col=Vector(240+g,240+g,255) + else + b = -5+math.random()*20 + col = Vector(255,255,235+b) + end + lCol = lCol + col + lCount = lCount + 1 + if i%4==0 then + local id = 10+math.ceil(i/4) + + local tcol = (lCol/lCount)/255 + self:SetNW2Vector("lampD"..id,Vector(tcol.r,tcol.g^3,tcol.b^3)*255) + lCol = Vector() + lCount = 0 + end + self:SetNW2Vector("lamp"..i,col) + end + else + local rnd1,rnd2,col = 0.7+math.random()*0.3,math.random() + local typ = math.Round(math.random()) + local r,g = 15,15 + for i = 1,25 do + local chtp = math.random() > rnd1 + if typ == 0 and not chtp or typ == 1 and chtp then + if math.random() > rnd2 then + r = -20+math.random()*25 + g = 0 + else + g = -5+math.random()*15 + r = g + end + col = Vector(245+r,228+g,189) + else + if math.random() > rnd2 then + g = math.random()*15 + b = g + else + g = 15 + b = -10+math.random()*25 + end + col = Vector(255,235+g,235+b) + end + lCol = lCol + col + lCount = lCount + 1 + if i%8.3<1 then + local id = 9+math.ceil(i/8.3) + + local tcol = (lCol/lCount)/255 + self.Lights[id][4] = Vector(tcol.r,tcol.g^3,tcol.b^3)*255 + self:SetNW2Vector("lampD"..id,Vector(tcol.r,tcol.g^3,tcol.b^3)*255) + lCol = Vector() lCount = 0 + end + self:SetNW2Vector("lamp"..i,col) + end + end +end + +function ENT:TrainSpawnerUpdate() + local typ = self:GetNW2Int("Type") + local num = self.WagonNumber + math.randomseed(num+817171) + local kvr=false + local passtex = "Def_717SPBWhite" + local cabtex = "Def_PUAV" + if typ == 1 then --PAKSDM + self.Electric:TriggerInput("X2PS",0) + self.Electric:TriggerInput("Type",self.Electric.LVZ_4) + seats = math.random()>0.2 or (9000<=num and num<=9999) + kvr = num>=8194 --or math.random()>0.5 + passtex = (9000<=num and num<=9999) and "Def_717SPBBlue" or kvr and (math.random()>0.5 and "Def_717SPBCyan") or "Def_717SPBWhite" + + elseif typ == 2 then --PUAV + self.Electric:TriggerInput("X2PS",1) + self.Electric:TriggerInput("Type",self.Electric.LVZ_2) + seats = math.random()>0.2 + local pass = math.ceil(math.random()*3) + kvr = num>=8189 + passtex = kvr and (pass==1 and "Def_717SPBWood3" or pass==2 and "Def_717SPBCyan") or "Def_717SPBWhite" + + elseif typ == 3 then --PAM + self.Electric:TriggerInput("X2PS",1) + self.Electric:TriggerInput("Type",self.Electric.LVZ_3) + seats = math.random()>0.2 + kvr = num>=11060 --or math.random()>0.5 + passtex = kvr and (math.random()>0.5 and "Def_717SPBCyan") or "Def_717SPBWhite" + + end + + local bpsn = math.ceil(math.random()*4) + self:SetNW2Int("BPSNType",math.random()>0.2 and 5 or bpsn) + self:SetNW2Int("Crane",kvr and 1 or 0) + self:SetNW2Bool("KVR",kvr) + if not self.CustomSettings then + self:SetNW2String("Texture","Def_717SPBDef") + self:SetNW2String("PassTexture",passtex) + self:SetNW2String("CabTexture",cabtex) + self:SetNW2Bool("NewSeats",seats) + else + self:SetNW2Bool("NewSeats",self:GetNW2Int("SeatType") == 4 or self:GetNW2Int("SeatType") == 3 or self:GetNW2Int("SeatType") == 1 and math.random()>0.5)--(kvr or seats)) + self:SetNW2Bool("NewSeatsBlue",self:GetNW2Int("SeatType") == 4 or self:GetNW2Bool("NewSeats") and self:GetNW2Int("SeatType") == 1 and math.random()>0.5) + local typ = self:GetNW2Int("BodyType") + if typ==3 or typ==1 and math.random() > 0.5 then + self:SetModel("models/metrostroi_train/81-717/81-717_spb_int_m.mdl") + else + self:SetModel("models/metrostroi_train/81-717/81-717_spb_int.mdl") + end + end + self.Pneumatic.ValveType = self:GetNW2Int("Crane",1)+1 + self.Announcer.AnnouncerType = self:GetNW2Int("Announcer",1) + self:UpdateTextures() + self:UpdateLampsColors() + + self:SetNW2Float("UPONoiseVolume",math.Rand(0,0.4)) + self:SetNW2Float("UPOVolume",math.Rand(0.9,1)) + self:SetNW2Float("UPOBuzzVolume",math.Rand(0.6,0.9)) + + local pneumoPow = 1.3+(math.random()^1.2)*0.3 + if IsValid(self.FrontBogey) then + self.FrontBogey:SetNW2Int("SquealType",math.floor(math.random()*7)+1) + self.FrontBogey.PneumaticPow = pneumoPow + end + if IsValid(self.RearBogey) then + self.RearBogey:SetNW2Int("SquealType",math.floor(math.random()*7)+1) + self.RearBogey.PneumaticPow = pneumoPow + end + math.randomseed(os.time()) +end + +-------------------------------------------------------------------------------- +function ENT:Think() + local retVal = self.BaseClass.Think(self) + local Panel = self.Panel + local Pneumatic = self.Pneumatic + + local lightsActive1 = Panel.EmergencyLights > 0 + local lightsActive2 = Panel.MainLights > 0.0 + local LampCount = self.LampType==2 and 27 or 13 + local Ip = self.LampType==2 and 7 or 3.6 + local Im = self.LampType==2 and 2 or 1 + for i = 1,LampCount do + if (lightsActive2 or (lightsActive1 and math.ceil((i+Ip-Im)%Ip)==1)) then + if not self.Lamps[i] and not self.Lamps.broken[i] then self.Lamps[i] = CurTime() + math.Rand(0.1,math.Rand(0.5,2)) end + else + self.Lamps[i] = nil + end + if (self.Lamps[i] and CurTime() - self.Lamps[i] > 0) then + self:SetPackedBool("lightsActive"..i,true) + else + self:SetPackedBool("lightsActive"..i,false) + end + end + + self:SetPackedBool("DoorsW",Panel.DoorsW > 0) + self:SetPackedBool("GRP",Panel.GreenRP > 0) + self:SetPackedBool("BrW",Panel.BrW > 0) + --[[if not self.KEKTimer or CurTime()-self.KEKTimer > 3 then + self.KEKTimer = CurTime() + local text = "" + if Panel.DoorsW > 0 then text = text .." Ð±ÐµÐ»Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° дверей" end + if Panel.BrW > 0 then text = text .." Ð¶ÐµÐ»Ñ‚Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° пневмотормоза" end + if Panel.GreenRP > 0 then text = text .." Ð·ÐµÐ»Ñ‘Ð½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° РП" end + if text ~= "" then text = " горит"..text end + if self.Speed <= 0.5 then text = text .." он Ñтоит" + elseif self.Electric.I13 > 10 then text = text.." он разгонÑетÑÑ" + elseif self.Electric.I13 < -10 then text = text.." он тормозит ЭДТ" + elseif self.Pneumatic.BrakeCylinderPressure > 0.2 then + if self.Electric.I13 < -10 then + text = text.." и пневматикой" + else + text = text.." он тормозит пневматикой" + end + else text = text .." он едет" end + if self.Speed > 0.5 then text = text..Format(" Ñо ÑкороÑтью %02d км/ч и уÑкорением %.1f м/c",self.Speed, self.Acceleration) end + + if text ~= "" then RunConsoleCommand("say","Ð’ÐИМÐÐИЕ ВСЕМ!!! У "..self:CPPIGetOwner():GetName().." вагон "..self:GetWagonNumber()..text.."!!!") end + end + if Panel.GreenRP > 0 and (not self.KEKTimer or CurTime()-self.KEKTimer > 3) then + self.KEKTimer = CurTime() + RunConsoleCommand("say","Ð’ÐИМÐÐИЕ ВСЕМ!!! У "..self:CPPIGetOwner():GetName().." Ð’ÐГОÐ"..self:GetWagonNumber().." СЛУЧИЛОСЬ ЗÐÐМЕÐÐТЕЛЬÐОЕ СОБЫТИЕ!!! У ÐЕГО ЗÐГОРЕЛÐСЬ ЗЕЛÐÐÐЯЛ ЛÐМПРРП!!!") + end]] + self:SetPackedBool("M1_3",Panel.M1_3 > 0) + self:SetPackedBool("M4_7",Panel.M4_7 > 0) + + -- 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) + + --self:SetPackedRatio("Crane", Pneumatic.RealDriverValvePosition) + --self:SetPackedRatio("Controller", (self.KV.ControllerPosition+3)/7) + if Pneumatic.ValveType == 1 then + self:SetPackedRatio("BLPressure", Pneumatic.ReservoirPressure/16.0) + else + self:SetPackedRatio("BLPressure", Pneumatic.BrakeLinePressure/16.0) + end + self:SetPackedRatio("TLPressure", Pneumatic.TrainLinePressure/16.0) + self:SetPackedRatio("BCPressure", Pneumatic.BrakeCylinderPressure/6.0) + + self:SetPackedRatio("BatteryVoltage",Panel["V1"]*self.Battery.Voltage/150.0) + self:SetPackedRatio("BatteryCurrent",Panel["V1"]*math.Clamp((self.Battery.Voltage-75)*0.01,-0.01,1)) + self:SetPackedRatio("EnginesCurrent", 0.5 + 0.5*(self.Electric.I24/500.0)) + + self:SetPackedBool("Compressor",Pneumatic.Compressor > 0) + self:SetPackedBool("RK",self.RheostatController.Velocity ~= 0.0) + self:SetPackedBool("BPSN",self.PowerSupply.X2_2 > 0) + self:SetPackedRatio("RV",self.RV.Value/2) + self:SetPackedRatio("CranePosition", Pneumatic.RealDriverValvePosition) + self:SetPackedBool("RZP",Panel.RZP > 0) + + + self:SetPackedBool("FrontDoor",self.FrontDoor) + self:SetPackedBool("RearDoor",self.RearDoor) + self:SetPackedBool("CouchCap",self.CouchCap) + + self:SetPackedBool("AnnouncerBuzz",Panel.AnnouncerBuzz > 0) + self:SetPackedBool("AnnPlay",Panel.AnnouncerPlaying > 0) + + self:SetPackedRatio("Speed", self.Speed/100) + 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 = 27000+1000*(A < 0 and 1 or 0) + --self.RearBogey.MotorForce = 27000+1000*(A < 0 and 1 or 0) + self.FrontBogey.MotorForce = 22500+5500*(A < 0 and 1 or 0) + self.RearBogey.MotorForce = 22500+5500*(A < 0 and 1 or 0) + self.FrontBogey.Reversed = (self.Reverser.NZ > 0.5) + 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 A = 2*self.Engines.BogeyMoment + --[[ if self.Speed < 15 then + local pow = 1-0.7*(15.0-self.Speed)/15.0 + A = A < 0 and -math.abs(A)^pow or A^pow + end--]] + 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 + self.FrontBogey.PneumaticBrakeForce = 50000.0-2000 + self.FrontBogey.BrakeCylinderPressure = Pneumatic.BrakeCylinderPressure + self.FrontBogey.ParkingBrakePressure = math.max(0,(2.6-Pneumatic.ParkingBrakePressure)/2.6)/2 + self.FrontBogey.BrakeCylinderPressure_dPdT = -Pneumatic.BrakeCylinderPressure_dPdT + self.RearBogey.PneumaticBrakeForce = 50000.0-2000 + self.RearBogey.BrakeCylinderPressure = Pneumatic.BrakeCylinderPressure + self.RearBogey.BrakeCylinderPressure_dPdT = -Pneumatic.BrakeCylinderPressure_dPdT + self.RearBogey.ParkingBrakePressure = math.max(0,(2.6-Pneumatic.ParkingBrakePressure)/2.6)/2 + --self.RearBogey.ParkingBrake = self.ParkingBrake.Value > 0.5 + end + + self:GenerateJerks() + + -- Send networked variables + --self:SendPackedData() + return retVal +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 +function ENT:OnButtonPress(button,ply) + if button == "FrontDoor" then self.FrontDoor = not self.FrontDoor end + if button == "RearDoor" then self.RearDoor = not self.RearDoor end + if button == "CouchCap" then + if self.CouchCap and self.Pneumatic.DriverValvePosition>2 then return end + self.CouchCap = not self.CouchCap + end + if not self.CouchCap and (not button:find("VB") and not button:find("GV") and not button:find("Isolation") and not button:find("Parking") and not button:find("Air")) then return true 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.DriverValveBLDisconnect:TriggerInput("Set",0) + self.DriverValveTLDisconnect:TriggerInput("Set",0) + end + return + end + if string.find(button,"PneumaticBrakeSet") then + self.Pneumatic:TriggerInput("BrakeSet",tonumber(button:sub(-1,-1))) + return + end +end + +function ENT:OnButtonRelease(button) + if string.find(button,"PneumaticBrakeSet") then + local pos = tonumber(button:sub(-1,-1)) + if button == "PneumaticBrakeSet1" then + self.Pneumatic:TriggerInput("BrakeSet",2) + end + return + end +end \ No newline at end of file diff --git a/lua/entities/gmod_subway_81-714_lvz/shared.lua b/lua/entities/gmod_subway_81-714_lvz/shared.lua new file mode 100644 index 0000000..fdd6eec --- /dev/null +++ b/lua/entities/gmod_subway_81-714_lvz/shared.lua @@ -0,0 +1,405 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" +ENT.SkinsType = "81-714_mvm" +ENT.Model = "models/metrostroi_train/81-717/81-717_spb_int.mdl" + +ENT.Spawnable = true +ENT.AdminSpawnable = false +ENT.DontAccelerateSimulation = false + +function ENT:PassengerCapacity() + return 300 +end + +function ENT:GetStandingArea() + return Vector(-450,-30,-48),Vector(380,30,-48) +end + +local function GetDoorPosition(i,k) + return Vector(359.0 - 35/2 - 229.5*i,-65*(1-2*k),7.5) +end + +-- 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 + +ENT.MirrorCams = { + Vector(-441,75,15),Angle(1,0,0),75, + Vector(-441,-75,15),Angle(1,0,0),75, +} + +ENT.AnnouncerPositions = { + {Vector(-3,-60, 62),300,0.2}, + {Vector(-3,60 ,62),300,0.2}, +} +ENT.Cameras = { + {Vector(-434,20,-13),Angle(0,135,0),"Train.714.Shunt","Shunt"}, + {Vector(450+7,0,30),Angle(60,0,0),"Train.Common.CouplerCamera"}, + {Vector(-471,0,30),Angle(60,180,0),"Train.Common.CouplerCamera"}, +} +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.15} + self.SoundPositions["rolling_10"] = {480,1e12,Vector(0,0,0),0.20} + self.SoundPositions["rolling_40"] = {480,1e12,Vector(0,0,0),0.55} + self.SoundPositions["rolling_70"] = {480,1e12,Vector(0,0,0),0.60} + self.SoundPositions["rolling_80"] = {480,1e12,Vector(0,0,0),0.75} + self.SoundNames["rolling_motors"] = {loop=true,"subway_trains/common/junk/wind_background1.wav"} + self.SoundNames["rolling_motors2"] = {loop=true,"subway_trains/common/junk/wind_background1.wav"} + self.SoundPositions["rolling_motors"] = {250,1e12,Vector(200,0,0),0.33} + self.SoundPositions["rolling_motors2"] = {250,1e12,Vector(-250,0,0),0.33} + 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"] = {480,1e12,Vector(0,0,0),0.90} + self.SoundPositions["rolling_medium2"] = {480,1e12,Vector(0,0,0),0.90} + self.SoundPositions["rolling_high2"] = {480,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,-24.1+1.5,-33.7),1} + self.SoundPositions["pneumo_disconnect1"] = {60,1e9,Vector(431.8,-24.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/relay_on.mp3" + --self.SoundPositions["avu_off"] = {60,1e9, Vector(436.0,-63,-25),1} + --self.SoundNames["r1_5_close"] = {"subway_trains/drive_on3.wav","subway_trains/drive_on4.wav"} + self.SoundNames["bpsn1"] = {"subway_trains/717/bpsn/bpsn_piter.wav", loop=true} + self.SoundNames["bpsn2"] = {"subway_trains/717/bpsn/bpsn_spb.wav", loop=true} + self.SoundNames["bpsn3"] = {"subway_trains/717/bpsn/bpsn_nnov.wav", loop=true} + self.SoundNames["bpsn4"] = {"subway_trains/717/bpsn/bpsn_1.wav", loop=true} + self.SoundPositions["bpsn1"] = {600,1e9,Vector(0,45,-448),0.04} + self.SoundPositions["bpsn2"] = {600,1e9,Vector(0,45,-448),0.025} + self.SoundPositions["bpsn3"] = {600,1e9,Vector(0,45,-448),0.03} + self.SoundPositions["bpsn4"] = {600,1e9,Vector(0,45,-448),0.02} + + --Подвагонка + self.SoundNames["lk2_on"] = "subway_trains/717/pneumo/lk2_on.mp3" + self.SoundNames["lk5_on"] = "subway_trains/717/pneumo/lk1_on.mp3" + self.SoundNames["lk2_off"] = "subway_trains/717/pneumo/lk2_off.mp3" + self.SoundNames["lk2c"] = "subway_trains/717/pneumo/ksh1.mp3" + self.SoundNames["lk3_on"] = "subway_trains/717/pneumo/lk3_on.mp3" + self.SoundNames["lk3_off"] = "subway_trains/717/pneumo/lk3_off.mp3" + --self.SoundNames["ksh1_off"] = "subway_trains/717/pneumo/ksh1.mp3" + self.SoundPositions["lk2_on"] = {440,1e9,Vector(-60,-40,-66),0.22} + self.SoundPositions["lk5_on"] = {440,1e9,Vector(-60,-40,-66),0.30} + self.SoundPositions["lk2_off"] = self.SoundPositions["lk2_on"] + self.SoundPositions["lk2c"] = {440,1e9,Vector(-60,-40,-66),0.6} + self.SoundPositions["lk3_on"] = self.SoundPositions["lk2_on"] + self.SoundPositions["lk3_off"] = self.SoundPositions["lk2_on"] + --self.SoundPositions["ksh1_off"] = self.SoundPositions["lk1_on"] + + self.SoundNames["compressor"] = {loop=2.0,"subway_trains/d/pneumatic/compressor/compessor_d_start.wav","subway_trains/d/pneumatic/compressor/compessor_d_loop.wav", "subway_trains/d/pneumatic/compressor/compessor_d_end.wav"} + self.SoundNames["compressor2"] = {loop=1.79,"subway_trains/717/compressor/compressor_717_start2.wav","subway_trains/717/compressor/compressor_717_loop2.wav", "subway_trains/717/compressor/compressor_717_stop2.wav"} + self.SoundPositions["compressor"] = {600,1e9,Vector(-118,-40,-66),0.15} + self.SoundPositions["compressor2"] = {480,1e9,Vector(-118,-40,-66),0.55} + self.SoundNames["rk"] = {loop=0.8,"subway_trains/717/rk/rk_start.wav","subway_trains/717/rk/rk_spin.wav","subway_trains/717/rk/rk_stop.mp3"} + self.SoundPositions["rk"] = {70,1e3,Vector(110,-40,-75),0.5} + + for i=1,8 do + self.SoundNames["vent"..i] = {loop=true,"subway_trains/717/vent/vent_cab_"..(i>=7 and "low" or "high")..".wav"} + end + self.SoundPositions["vent1"] = {160,1e9,Vector(225, -50, -37.5)} + self.SoundPositions["vent2"] = {160,1e9,Vector(-5, 50, -37.5)} + self.SoundPositions["vent3"] = {160,1e9,Vector(-230, -50, -37.5)} + self.SoundPositions["vent8"] = {120,1e9,Vector(416, 50, -37.5)} + self.SoundPositions["vent4"] = {160,1e9,Vector(225, 50, -37.5)} + self.SoundPositions["vent5"] = {160,1e9,Vector(-5, -50, -37.5)} + self.SoundPositions["vent6"] = {160,1e9,Vector(-230, 50, -37.5)} + self.SoundPositions["vent7"] = {120,1e9,Vector(-432, -50, -37.5)} + + 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["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["button1_off"] = { + "subway_trains/717/switches/button1_off1.mp3", + "subway_trains/717/switches/button1_off2.mp3", + "subway_trains/717/switches/button1_off3.mp3", + } + self.SoundNames["button1_on"] = { + "subway_trains/717/switches/button1_on1.mp3", + "subway_trains/717/switches/button1_on2.mp3", + "subway_trains/717/switches/button1_on3.mp3", + } + self.SoundNames["button2_off"] = { + "subway_trains/717/switches/button2_off1.mp3", + "subway_trains/717/switches/button2_off2.mp3", + } + self.SoundNames["button2_on"] = { + "subway_trains/717/switches/button2_on1.mp3", + "subway_trains/717/switches/button2_on2.mp3", + } + self.SoundNames["button3_off"] = { + "subway_trains/717/switches/button3_off1.mp3", + "subway_trains/717/switches/button3_off2.mp3", + } + self.SoundNames["button3_on"] = { + "subway_trains/717/switches/button3_on1.mp3", + "subway_trains/717/switches/button3_on2.mp3", + } + + self.SoundPositions["uava_reset"] = {80,1e9,Vector(429.6,-60.8,-15.9),0.95} + self.SoundNames["gv_f"] = {"subway_trains/717/kv70/reverser_0-b_1.mp3","subway_trains/717/kv70/reverser_0-b_2.mp3"} + self.SoundNames["gv_b"] = {"subway_trains/717/kv70/reverser_b-0_1.mp3","subway_trains/717/kv70/reverser_b-0_2.mp3"} + + self.SoundNames["pneumo_TL_open"] = { + "subway_trains/ezh3/pneumatic/brake_line_on.mp3", + "subway_trains/ezh3/pneumatic/brake_line_on2.mp3", + } + self.SoundNames["pneumo_TL_disconnect"] = { + "subway_trains/common/334/334_close.mp3", + } + self.SoundPositions["pneumo_TL_open"] = {60,1e9,Vector(431.8,-24.1+1.5,-33.7),0.7} + self.SoundPositions["pneumo_TL_disconnect"] = {60,1e9,Vector(431.8,-24.1+1.5,-33.7),0.7} + self.SoundNames["pneumo_BL_disconnect"] = { + "subway_trains/common/334/334_close.mp3", + } + 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["parking_brake"] = {loop=true,"subway_trains/common/pneumatic/parking_brake.wav"} + self.SoundNames["parking_brake_en"] = "subway_trains/common/pneumatic/parking_brake_stop.mp3" + self.SoundNames["parking_brake_rel"] = "subway_trains/common/pneumatic/parking_brake_stop2.mp3" + self.SoundPositions["parking_brake"] = {80,1e9,Vector(-454, -55,-63),0.6} + self.SoundPositions["parking_brake_en"] = self.SoundPositions["parking_brake"] + self.SoundPositions["parking_brake_rel"] = self.SoundPositions["parking_brake"] + self.SoundNames["front_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["front_isolation"] = {300,1e9,Vector(443, 0,-63),1} + self.SoundNames["rear_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["rear_isolation"] = {300,1e9,Vector(-456, 0,-63),1} + + self.SoundNames["crane013_brake"] = {loop=true,"subway_trains/common/pneumatic/release_2.wav"} + self.SoundPositions["crane013_brake"] = {80,1e9,Vector(-466,51,-12),0.86} + self.SoundNames["crane013_brake2"] = {loop=true,"subway_trains/common/pneumatic/013_brake2.wav"} + self.SoundPositions["crane013_brake2"] = {80,1e9,Vector(-466,51,-12),0.86} + self.SoundNames["crane013_brake_l"] = {loop=true,"subway_trains/common/pneumatic/013_brake_loud2.wav"} + self.SoundPositions["crane013_brake_l"] = {80,1e9,Vector(-466,51,-12),0.7} + self.SoundNames["crane013_release"] = {loop=true,"subway_trains/common/pneumatic/013_release.wav"} + self.SoundPositions["crane013_release"] = {80,1e9,Vector(-466,51,-12),0.4} + self.SoundNames["crane334_brake_high"] = {loop=true,"subway_trains/common/pneumatic/334_brake.wav"} + self.SoundPositions["crane334_brake_high"] = {80,1e9,Vector(-466,51,-12),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(-466,51,-12),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(-466,51,-12),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(-466,51,-70),0.2} + 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(-466,51,-70),0.2} + self.SoundNames["crane334_release"] = {loop=true,"subway_trains/common/pneumatic/334_release3.wav"} + self.SoundPositions["crane334_release"] = {80,1e9,Vector(-466,51,-12),0.2} + self.SoundNames["crane334_release_2"] = {loop=true,"subway_trains/common/pneumatic/334_release2.wav"} + self.SoundPositions["crane334_release_2"] = {80,1e9,Vector(-466,51,-12),0.2} + + self.SoundNames["valve_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["valve_brake"] = {80,1e9,Vector(-430,-662,-22),1} + + self.SoundNames["pak_on"] = "subway_trains/717/switches/rc_on.mp3" + self.SoundNames["pak_off"] = "subway_trains/717/switches/rc_off.mp3" + + 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["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(-470,0,-55),1} + + --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"] = {300,1e9,Vector(-420,45,-30),1} + self.SoundPositions["vdol_off"] = {300,1e9,Vector(-420,45,-30),0.4} + 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"] + 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"] = {60,1e9,Vector(-420,45,-30),1} + self.SoundPositions["vdz_off"] = {60,1e9,Vector(-420,45,-30),0.4} + + 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} + 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_end1.mp3","subway_trains/common/door/door_open_end2.mp3","subway_trains/common/door/door_open_end3.mp3","subway_trains/common/door/door_open_end4.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_end3.mp3","subway_trains/common/door/door_close_end4.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_buzz1_"..k] = {loop=true,"subway_announcers/upo/noiseT.wav"} + self.SoundPositions["announcer_buzz1_"..k] = {v[2] or 300,1e9,v[1],v[3]*0.6} + self.SoundNames["announcer_buzz2_"..k] = {loop=true,"subway_announcers/upo/noiseT2.wav"} + self.SoundPositions["announcer_buzz2_"..k] = {v[2] or 300,1e9,v[1],v[3]*0.4 } + 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.2} + 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.2} + self.SoundNames["announcer_noise3_"..k] = {loop=true,"subway_announcers/upo/noiseS3.wav"} + self.SoundPositions["announcer_noise3_"..k] = {v[2] or 300,1e9,v[1],v[3]*0.2} + self.SoundNames["announcer_noiseW"..k] = {loop=true,"subway_announcers/upo/noiseW.wav"} + self.SoundPositions["announcer_noiseW"..k] = {v[2] or 300,1e9,v[1],v[3]*0.2} + end +end +function ENT:PostInitializeSystems() + self.Electric:TriggerInput("NoRT2",1) + self.Electric:TriggerInput("HaveRO",1) + self.Electric:TriggerInput("GreenRPRKR",0) + self.Electric:TriggerInput("Type",self.Electric.LVZ_2) + self.Electric:TriggerInput("X2PS",1) +end +function ENT:InitializeSystems() + -- ЭлектроÑиÑтема 81-710 + self:LoadSystem("Electric","81_714_Electric") + + -- Токоприёмник + self:LoadSystem("TR","TR_3B") + -- ЭлектротÑговые двигатели + self:LoadSystem("Engines","DK_117DM") + + -- РезиÑторы Ð´Ð»Ñ Ñ€ÐµÐ¾Ñтата/пуÑковых Ñопротивлений + self:LoadSystem("KF_47A","KF_47A1") + -- РезиÑторы Ð´Ð»Ñ Ð¾ÑÐ»Ð°Ð±Ð»ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð±ÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ + self:LoadSystem("KF_50A") + -- Ящик Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñ…Ñ€Ð°Ð½Ð¸Ñ‚ÐµÐ»Ñми + self:LoadSystem("YAP_57") + + -- РеоÑтатный контроллер Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑƒÑковыми ÑÐ¾Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð»ÐµÐ½Ð¸Ñ + self:LoadSystem("RheostatController","EKG_17B") + -- Групповой переключатель положений + self:LoadSystem("PositionSwitch","PKG_761") + self:LoadSystem("Reverser","PR_722D") + + -- Ящики Ñ Ñ€ÐµÐ»Ðµ и контакторами + self:LoadSystem("BV","BV_630") + self:LoadSystem("LK_755A") + self:LoadSystem("YAR_13B","YAR_13B_SPB") + self:LoadSystem("YAR_27") + self:LoadSystem("YAK_36") + self:LoadSystem("YAK_37E") + self:LoadSystem("YAS_44V") + self:LoadSystem("YARD_2") + + -- Панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ 81-710 + self:LoadSystem("Panel","81_714_Panel") + -- ПневмоÑиÑтема 81-710 + self:LoadSystem("Pneumatic","81_717_Pneumatic",{br013_1 = true}) + -- Everything else + self:LoadSystem("Battery") + self:LoadSystem("PowerSupply","BPSN") + self:LoadSystem("Announcer","81_71_Announcer") + + self:LoadSystem("Horn") + + self:LoadSystem("IGLA_PCBK") +end + +ENT.SubwayTrain = { + Type = "81", + Name = "81-714.5m", + Manufacturer = "LVZ", + WagType = 2, + EKKType = 717, +} + +--[[ +7874-8189 (белый плаÑтик Ñ Ñиними\зелеными вÑтавками, преимущеÑтвенно Ñтарые Ñидухи, либо Ñиние) +8190-8202 (плаÑтик под дерево, преимущеÑтвенно Ñтарые Ñидухи, либо коричневые) +8308-8319 (зеленый плаÑтик, Ñтарые Ñидухи) +8320-8399 (плаÑтик под дерево, преимущеÑтвенно Ñтраые Ñидухи, либо Ñиние) +8868-8964 (.5 - Ñветлый плаÑтик под дерево, преимущеÑтвенно Ñтарые Ñидухи, либо коричневые) +11000-11306 (белый плаÑтик Ñ Ð·ÐµÐ»ÐµÐ½Ñ‹Ð¼Ð¸ вÑтавками, преимущеÑтвенно Ñтарые Ñидухи, либо Ñиние) +11322-11378 (плаÑтик под дерево Ñ Ð±ÐµÐ»Ñ‹Ð¼Ð¸ вÑтавками, коричневые Ñидухи) +]] +ENT.NumberRanges = { + { + true, + { + --717 + 7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7399,7400,7401,7402,7403,7404,7405,7406,7407,7408,7409,7410,7411,7412,7413,7427,7428,7429,7431,7432,7433,7434,7435,7436,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455,7456,7457,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7597,7598,7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7616,7617,7618,7619,7676,7677,7678,7679,7680,7681,7682,7683,7684,7685,7686,7687,7691,7692,7699,7700,7701,7707,7708,7709,7710,7711,7712,7713,7720,7722,7723,7731,7733,7765,7773,7774,7775,7776,7777,7778,7780,7781,7782,7785,7794,7797,7803,7804,7805,7808,7809,7810,7813,7814,7815,7816,7849,7850,7851,7852,7853,7854,7855,7856,7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871,7872,7873,7874,7875,7938,7943,7944,7945,7946,7947,7948,7949,8011,8013,8014,8015,8016,8022,8028,8030,8033,8034,8035,8037,8041,8057,8058,8059,8060,8061,8066,8067,8068,8069,8070,8077,8082,8085,8147,8150,8151,8152,8154,8178,8179,8180,8181, + -- голубой Ñ Ð±ÐµÐ»Ñ‹Ð¼ плаÑтик и квр Ñидухи + 9350,9352,9353,9354,9355, + --717.5 + 8194,8195,8196,8197,11056,11057,11058,11059,11100,11101,11102,11103,11108,11297,11298,11300,11301, + + }, + }, + { + true, + { + --714 - ПУÐÐ’ + 7392,7393,7396,7398,8143,8144,8145,8146,8161,8162,8170,8171,8172,8173,8182,8183,8184,8186,8187,8188,8189, + --714.5 - ПУÐÐ’ + 8190,8191,8192,8193,8198,8199,8200,8201,8202,8308,8310,8311,8313,8314,8315,8316,8317,8318,8319,8320,8321,8330,8331,8332,8333,8334,8336,8337,8338,8339,8340,8341,8342,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398,8399,11000,11001,11002,11003,11004,11005,11006,11007,11008,11009,11010,11011,11012,11013,11014,11055,11064,11065,11066,11067,11068,11080,11081,11082,11083,11085,11086,11087,11088,11104,11105,11106,11107,11167,11168,11173,11174,11181,11182,11187,11189,11190,11191,11192,11196,11249,11306, + } + }, + { + true, + { + --714 + 7392,7398,8174,8175,8176,8177, + --714.5 + 11060,11061,11062,11063,11073,11074,11077,11078,11084,11109,11188,11209,11210,11215,11220,11246,11247,11258,11259,11260,11261,11262,11263,11271,11273,11284,11285,11292,11293,11294,11296,11322,11323,11377,11378, + } + }, +} diff --git a/lua/entities/gmod_subway_81-714_mvm/cl_init.lua b/lua/entities/gmod_subway_81-714_mvm/cl_init.lua new file mode 100644 index 0000000..6aee5a0 --- /dev/null +++ b/lua/entities/gmod_subway_81-714_mvm/cl_init.lua @@ -0,0 +1,1332 @@ +-------------------------------------------------------------------------------- +-- 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.ClientSounds = {} +ENT.AutoAnims = {} +ENT.AutoAnimNames = {} + +ENT.ClientProps["salon"] = { + model = "models/metrostroi_train/81-717/interior_mvm_int.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["schemes"] = { + model = "models/metrostroi_train/81-717/labels/schemes.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, + callback = function(ent) + ent.PassSchemesDone = false + end, +} +ENT.ClientProps["lamps1"] = { + model = "models/metrostroi_train/81-717/lamps_type1_int.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=1.5, +} +ENT.ClientProps["lamps2"] = { + model = "models/metrostroi_train/81-717/lamps_type2_interim.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=1.5, +} +ENT.ClientProps["body_additional"] = { + model = "models/metrostroi_train/81-717/714_body_additional.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["seats_old"] = { + model = "models/metrostroi_train/81-717/couch_old_int.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=1.5, +} +ENT.ClientProps["handrails_old"] = { + model = "models/metrostroi_train/81-717/handlers_old_int.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["seats_new"] = { + model = "models/metrostroi_train/81-717/couch_new_int.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=1.5, +} +ENT.ClientProps["handrails_new"] = { + model = "models/metrostroi_train/81-717/handlers_new_int.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["seats_old_cap"] = { + model = "models/metrostroi_train/81-717/couch_cap_l.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, +} +ENT.ClientProps["seats_old_cap_o"] = { + model = "models/metrostroi_train/81-717/couch_cap_l.mdl", + pos = Vector(-285,410,13), + ang = Angle(0,70,-70), + hideseat=0.8, +} +ENT.ClientProps["seats_new_cap"] = { + model = "models/metrostroi_train/81-717/couch_new_cap.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, +} +ENT.ClientProps["seats_new_cap_o"] = { + model = "models/metrostroi_train/81-717/couch_new_cap.mdl", + pos = Vector(-285,410,13), + ang = Angle(0,70,-70), + hideseat=0.8, +} +ENT.ClientProps["otsek_cap_l"] = { + model = "models/metrostroi_train/81-717/otsek_cap_l.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, +} +ENT.ClientProps["otsek_cap_r"] = { + model = "models/metrostroi_train/81-717/otsek_cap_r.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, +} + +ENT.ButtonMap["FrontPneumatic"] = { + pos = Vector(470-9,-45.0,-58.0+5), + 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(449+11, -34, -62), + ang = Angle( 15,-90,0), + hide = 2, +} +ENT.ClientProps["FrontTrain"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_blue.mdl", + pos = Vector(449+11, 34, -62), + 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-0.5,45.0,-58.0+5), + ang = Angle(0,270,90), + width = 1050, + height = 100, + scale = 0.1, + + buttons = { + {ID = "RearTrainLineIsolationToggle",x=500, y=0, w=400, h=100, tooltip="",var="RtI",states={"Train.Buttons.Opened","Train.Buttons.Closed"}}, + {ID = "RearBrakeLineIsolationToggle",x=000, y=0, w=400, h=100, tooltip="",var="RbI",states={"Train.Buttons.Opened","Train.Buttons.Closed"}}, + {ID = "ParkingBrakeToggle",x=900, y=0, w=150, h=100, tooltip="",var="ParkingBrake"}, + } +} +ENT.ClientProps["RearTrain"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_blue.mdl", + pos = Vector(-450-22, -34, -62), + ang = Angle(-15,90,0), + hide = 2, +} +ENT.ClientProps["RearBrake"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_red.mdl", + pos = Vector(-450-22, 34, -62), + ang = Angle( 15,90,0), +} +ENT.ClientProps["ParkingBrake"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_white.mdl", + pos = Vector(-450-22, -55, -62), + ang = Angle(-15,90,0), + hide = 0.5, +} +ENT.ClientSounds["ParkingBrake"] = {{"ParkingBrake",function() return "disconnect_valve" end,1,1,50,1e3,Angle(-90,0,0)}} +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-9.5,50+20,-60+2), + 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-9.5,36+20,-78+2), + 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(-185,-68,-50), + ang = Angle(0,0,90), + width = 170, + height = 80, + scale = 0.1, + hideseat=0.1, + hide=true, + screenHide = true, + + buttons = { + {ID = "AirDistributorDisconnectToggle",x=0,y=0,w= 170,h = 80,tooltip="",var="AD",states={"Train.Buttons.On","Train.Buttons.Off"}}, + } +} + +-- Battery panel +ENT.ButtonMap["Battery"] = { + pos = Vector(-470.0,-10,50.6), + ang = Angle(0,-90,180), + width = 100, + height = 100, + scale = 0.08, + hide=0.8, + + buttons = { + {ID = "VBToggle", x=0, y=0, w=100, h=100, tooltip="ВБ: Выключатель батареи", model = { + model = "models/metrostroi_train/81-717/battery_enabler.mdl", + var="VB",speed=0.5,vmin=1,vmax=0.8, + sndvol = 0.8, snd = function(val) return val and "pak_on" or "pak_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + } +} +ENT.ButtonMap["Voltages"] = { + pos = Vector(-464.3,-15.2,60.7), + ang = Angle(0,90,90), + width = 145, + height = 75, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "!BatteryVoltage", x=0, y=0, w=72.5,h=75, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BatteryVoltage"),ent:GetPackedRatio("BatteryVoltage")*150) end}, + {ID = "!BatteryCurrent", x=72.5, y=0, w=72.5,h=75, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BatteryCurrent"),ent:GetPackedRatio("BatteryCurrent")*500) end}, + } +} +ENT.ButtonMap["Pressures"] = { + pos = Vector(-464.3,6.3,61), + ang = Angle(0,90,90), + width = 160, + height = 80, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "!BCPressure", x=0, y=0, w=80,h=80, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BCPressure"),ent:GetPackedRatio("BCPressure")*6) end}, + {ID = "!BLTLPressure", x=80, y=0, w=80,h=80, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BLTLPressure"),ent:GetPackedRatio("TLPressure")*16,ent:GetPackedRatio("BLPressure")*16) end}, + } +} +ENT.ButtonMap["couch_cap"] = { + pos = Vector(-460,60,0), + ang = Angle(0,0,70), + width = 1000, + height = 600, + scale = 0.0625, + hide=0.8, + buttons = { + {ID = "CouchCap",x=0,y=0,w=1000,h=600, tooltip=""} + } +} +ENT.ButtonMap["couch_cap_o"] = { + pos = Vector(-464,-21,-45), + ang = Angle(0,70,5), + width = 1100, + height = 380, + scale = 0.0625, + hide=0.8, + buttons = { + {ID = "CouchCap",x=0,y=0,w=1100,h=380, tooltip=""} + } +} +ENT.ButtonMap["Stopkran"] = { + pos = Vector(-397,-60,0), + ang = Angle(0,180,70), + width = 1000, + height = 600, + scale = 0.0625, + hide=0.8, + buttons = { + {ID = "EmergencyBrakeValveToggle",x=0,y=0,w=1000,h=600,tooltip="", tooltip="",tooltip="",states={"Train.Buttons.Closed","Train.Buttons.Opened"},var="EmergencyBrakeValve"}, + } +} +ENT.ButtonMap["AV_S"] = { + pos = Vector(-456,60,-15), + ang = Angle(0,0,90), + width = 325, + height = 205, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "A53Toggle",x=25*0,y=80*0,w=25,h=45,tooltip=""}, + {ID = "A56Toggle",x=25*1,y=80*0,w=25,h=45,tooltip=""}, + {ID = "A54Toggle",x=25*2,y=80*0,w=25,h=45,tooltip=""}, + {ID = "A24Toggle",x=25*3,y=80*0,w=25,h=45,tooltip=""}, + {ID = "A39Toggle",x=25*4,y=80*0,w=25,h=45,tooltip=""}, + {ID = "A23Toggle",x=25*5,y=80*0,w=25,h=45,tooltip=""}, + {ID = "A14Toggle",x=25*6,y=80*0,w=25,h=45,tooltip=""}, + {ID = "A13Toggle",x=25*7,y=80*0,w=25,h=45,tooltip=""}, + {ID = "A32Toggle",x=25*8,y=80*0,w=25,h=45,tooltip=""}, + {ID = "A31Toggle",x=25*9,y=80*0,w=25,h=45,tooltip=""}, + {ID = "A16Toggle",x=25*10,y=80*0,w=25,h=45,tooltip=""}, + {ID = "A12Toggle",x=25*11,y=80*0,w=25,h=45,tooltip=""}, + {ID = "A49Toggle",x=25*12,y=80*0,w=25,h=45,tooltip=""}, + ------------------------------------------------------------------------ + {ID = "A15Toggle",x=25*0,y=80*1,w=25,h=45,tooltip=""}, + {ID = "A27Toggle",x=25*1,y=80*1,w=25,h=45,tooltip=""}, + {ID = "A50Toggle",x=25*2,y=80*1,w=25,h=45,tooltip=""}, + {ID = "A8Toggle",x=25*3,y=80*1,w=25,h=45,tooltip=""}, + {ID = "A52Toggle",x=25*4,y=80*1,w=25,h=45,tooltip=""}, + {ID = "A19Toggle",x=25*5,y=80*1,w=25,h=45,tooltip=""}, + {ID = "A10Toggle",x=25*6,y=80*1,w=25,h=45,tooltip=""}, + {ID = "A22Toggle",x=25*7,y=80*1,w=25,h=45,tooltip=""}, + {ID = "A30Toggle",x=25*8,y=80*1,w=25,h=45,tooltip=""}, + {ID = "A1Toggle",x=25*9,y=80*1,w=25,h=45,tooltip=""}, + {ID = "A2Toggle",x=25*10,y=80*1,w=25,h=45,tooltip=""}, + {ID = "A3Toggle",x=25*11,y=80*1,w=25,h=45,tooltip=""}, + {ID = "A4Toggle",x=25*12,y=80*1,w=25,h=45,tooltip=""}, + ------------------------------------------------------------------------ + {ID = "A5Toggle",x=25*0,y=80*2,w=25,h=45,tooltip=""}, + {ID = "A6Toggle",x=25*1,y=80*2,w=25,h=45,tooltip=""}, + {ID = "A72Toggle",x=25*2,y=80*2,w=25,h=45,tooltip=""}, + {ID = "A38Toggle",x=25*3,y=80*2,w=25,h=45,tooltip=""}, + {ID = "A20Toggle",x=25*4,y=80*2,w=25,h=45,tooltip=""}, + {ID = "A25Toggle",x=25*5,y=80*2,w=25,h=45,tooltip=""}, + {ID = "A37Toggle",x=25*6,y=80*2,w=25,h=45,tooltip=""}, + {ID = "A55Toggle",x=25*7,y=80*2,w=25,h=45,tooltip=""}, + {ID = "A45Toggle",x=25*8,y=80*2,w=25,h=45,tooltip=""}, + {ID = "A66Toggle",x=25*9,y=80*2,w=25,h=45,tooltip=""}, + {ID = "A51Toggle",x=25*10,y=80*2,w=25,h=45,tooltip=""}, + {ID = "A65Toggle",x=25*11,y=80*2,w=25,h=45,tooltip=""}, + {ID = "A28Toggle",x=25*12,y=80*2,w=25,h=45,tooltip=""}, + } +} +for i,button in pairs(ENT.ButtonMap.AV_S.buttons) do + button.model = { + model = "models/metrostroi_train/81-720/button_av1.mdl", + var=button.ID:Replace("Toggle",""),speed=8,z=-15, + sndvol = 0.8,snd = function(val) return val and "av_on" or "av_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + } + button.ID = "1:"..button.ID +end +ENT.ButtonMap["AV_T"] = { + pos = Vector(-468,23,-18), + ang = Angle(0,80,90), + width = 225, + height = 45, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "A70Toggle",x=25*0,y=0,w=25,h=45,tooltip=""}, + {ID = "AV2Toggle",x=25*1,y=0,w=25,h=45,tooltip=""}, + {ID = "AV3Toggle",x=25*2,y=0,w=25,h=45,tooltip=""}, + {ID = "AV4Toggle",x=25*3,y=0,w=25,h=45,tooltip=""}, + {ID = "AV5Toggle",x=25*4,y=0,w=25,h=45,tooltip=""}, + {ID = "A18Toggle",x=25*5,y=0,w=25,h=45,tooltip=""}, + --{ID = "A81Toggle",x=25*5,y=0,w=25,h=45,tooltip=""}, + {ID = "AV6Toggle",x=25*6,y=0,w=25,h=45,tooltip=""}, + {ID = "A80Toggle",x=25*7,y=0,w=25,h=45,tooltip=""}, + --{ID = "A18Toggle",x=25*8,y=0,w=25,h=45,tooltip=""}, + } +} +for i,button in pairs(ENT.ButtonMap.AV_T.buttons) do + button.model = { + model = "models/metrostroi_train/81-720/button_av1.mdl", + var=button.ID:Replace("Toggle",""),speed=8,z=-15, + sndvol = 0.8,snd = function(val) return val and "av_on" or "av_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + } + button.ID = "1:"..button.ID +end + +ENT.ButtonMap["DriverValveBLTLDisconnect"] = { + pos = Vector(-466,44,-18), + ang = Angle(0,80,90), + width = 160, + height = 140, + scale = 0.0625, + + buttons = { + {ID = "DriverValveBLDisconnectToggle", x=0, y=0, w=80, h=140, tooltip="", model = { + var="DriverValveBLDisconnect",sndid="brake_disconnect", + sndvol = 1, snd = function(val) return "disconnect_valve" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + {ID = "DriverValveTLDisconnectToggle", x=80, y=0, w=80, h=140, tooltip="", model = { + var="DriverValveTLDisconnect",sndid="train_disconnect", + sndvol = 1, snd = function(val) return val and "pneumo_TL_open" or "pneumo_TL_disconnect" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} + +ENT.ClientProps["brake_disconnect"] = { + model = "models/metrostroi_train/81-707/cran1.mdl", + pos = Vector(-466,47,-24), + ang = Angle(90,80,90), + hideseat=0.2, +} +ENT.ClientProps["train_disconnect"] = { + model = "models/metrostroi_train/81-707/cran3.mdl", + pos = Vector(-465,51,-24), + ang = Angle(90,80,90), + hideseat=0.2, +} +ENT.ClientProps["brake013"] = { + model = "models/metrostroi_train/81-717/cran13.mdl", + pos = Vector(-466,49,-10), + ang = Angle(0,58,0), + hideseat = 0.2, +} +ENT.ClientProps["brake334"] = { + model = "models/metrostroi_train/81-703/cabin_cran_334.mdl", + pos = Vector(-466,49,-10), + ang = Angle(0,-50,0), + hideseat = 0.2, +} +if not ENT.ClientSounds["br_013"] then ENT.ClientSounds["br_013"] = {} end +table.insert(ENT.ClientSounds["br_013"],{"brake013",function(ent,_,var) return "br_013" end,0.7,1,50,1e3,Angle(-90,0,0)}) +if not ENT.ClientSounds["br_334"] then ENT.ClientSounds["br_334"] = {} end +table.insert(ENT.ClientSounds["br_334"],{"brake334",function(ent,_,var) return "br_334_"..var end,1,1,50,1e3,Angle(-90,0,0)}) + +ENT.ButtonMap["Shunt"] = { + pos = Vector(-468,28,-5), + ang = Angle(0,80,90), + width = 206, + height = 200, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "BPSNonToggle",x=39,y=30,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-5, + var="BPSNon",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end,sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "!RZPLight",x=39,y=130,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",z = -4, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=2,x=-0.3,y=-0.3,z=20.6,var="RZP",color=Color(255,60,40)} + }}, + {ID = "ConverterProtectionSet",x=39,y=180,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + var="ConverterProtection",speed=16,min=1,max=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "L_1Toggle",x=80,y=30,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-5, + var="L_1",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "OtklBVSet",x=80,y=130,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + var="OtklBV",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button1_on" or "button1_off" end, sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "StartSet",x=80,y=180,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + var="Start",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button2_off" end, sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "VozvratRPSet",x=121,y=180,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + var="VozvratRP",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button2_on" or "button1_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + + {ID = "RV", x=176, y=140, radius=0, model = { + model = "models/metrostroi_train/81-717/buttons/breaker_common001.mdl",ang=270,z=12, + var="RV",speed=2,min=1,max=0.5,getfunc = function(ent) return ent:GetPackedRatio("RV") end, + sndvol = 0.8, snd = function(_,val) return val%2>0 and "pak_on" or "pak_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID="RV-",x=176-30, y=140-30, w=30,h=60, tooltip="ВТПР(влево)",states={"Train.Buttons.Back","Train.Buttons.0","Train.Buttons.Forward"},varTooltip = function(ent) return ent:GetPackedRatio("RV") end,}, + {ID="RV+",x=176 , y=140-30, w=30,h=60, tooltip="ВТПР(вправо)",states={"Train.Buttons.Back","Train.Buttons.0","Train.Buttons.Forward"},varTooltip = function(ent) return ent:GetPackedRatio("RV") end,}, + } +} + +ENT.ButtonMap["VU"] = { + pos = Vector(-468.7,24,-5), + ang = Angle(0,80,90), + width = 60, + height = 120, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "A84Toggle", x=0, y=0, w=60,h=120, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.mdl", z=-20, ang = Angle(180,-90,0), + plomb = {model = "models/metrostroi_train/equipment/vu_plomb_right.mdl",ang=Angle(-90,90,0),x=25,y=33.2,z=9.3,var="A84Pl", ID="A84Pl",}, + var="A84",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} + +ENT.ButtonMap["FrontDoor"] = { + pos = Vector(470-11,16,48.4-2), + 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.ClientProps["door1"] = { + model = "models/metrostroi_train/81-717/door_torec.mdl", + pos = Vector(459.2,-15.9,-2.7), + ang = Angle(0,89.5,0), + hide=2, +} + +ENT.ButtonMap["RearDoor"] = { + pos = Vector(-470-3,-16,48.4-2), + ang = Angle(0,90,90), + width = 642, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "RearDoor",x=0,y=0,w=642,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.ClientProps["door2"] = { + model = "models/metrostroi_train/81-717/door_torec.mdl", + pos = Vector(-472.5,15.75,-2.7), + ang = Angle(0,-90,0), + hide=2, +} + +-------------------------------------------------------------------------------- +ENT.ClientPropsInitialized = false + + +ENT.ClientProps["train_line"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(-465.05,14.2,58.55), + ang = Angle(-90,0,180), + hideseat=0.8, +} +ENT.ClientProps["brake_line"] = { + model = "models/metrostroi_train/Equipment/arrow_tm.mdl", + pos = Vector(-465.01,14.2,58.55), + ang = Angle(-90,0,180), + hideseat=0.8, +} +ENT.ClientProps["brake_cylinder"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(-464.94,9.0,58.45), + ang = Angle(-90,0,180), + hideseat=0.8, +} +-------------------------------------------------------------------------------- +ENT.ClientProps["voltmeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(-464.80,-13.07,56.81), + ang = Angle(-90,0,180), + hideseat=0.8, + bscale = Vector(1.2,1.2,1.65) +} +ENT.ClientProps["ampermeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(-464.80,-8.04,56.81), + ang = Angle(-90,0,180), + hideseat=0.8, + bscale = Vector(1.2,1.2,1.65) +} + +ENT.ClientProps["bortlamps1"] = { + model = "models/metrostroi_train/81-502/bort_lamps_body.mdl", + pos = Vector(-52,67,45.5), + ang = Angle(0,0,0), + hide = 2, +} +ENT.ClientProps["bortlamp1_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = ENT.ClientProps.bortlamps1.pos+Vector(0,0.9,3.25), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp1_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = ENT.ClientProps.bortlamps1.pos+Vector(0,0.9,-0.1), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp1_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = ENT.ClientProps.bortlamps1.pos+Vector(0,0.9,-3.3), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamps2"] = { + model = "models/metrostroi_train/81-717/bort_lamps_body.mdl", + pos = Vector(39,-67,45.5), + ang = Angle(0,180,0), + hide = 2, +} +ENT.ClientProps["bortlamp2_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = ENT.ClientProps.bortlamps2.pos+Vector(0,-0.9,3.25), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp2_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = ENT.ClientProps.bortlamps2.pos+Vector(0,-0.9,-0.1), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp2_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = ENT.ClientProps.bortlamps2.pos+Vector(0,-0.9,-3.3), + ang = Angle(0,180,0), + nohide = true, +} +--[[ +ENT.ClientProps["bortlamps3"] = { + model = "models/metrostroi_train/81-502/bort_lamps_body.mdl", + pos = Vector(-6.5,67,51.2), + ang = Angle(90,0,0), + hide = 2, +} +ENT.ClientProps["bortlamp3_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = ENT.ClientProps.bortlamps3.pos+Vector(3.28,0.9,-0.02), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp3_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = ENT.ClientProps.bortlamps3.pos+Vector(-0.06,0.9,-0.02), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp3_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = ENT.ClientProps.bortlamps3.pos+Vector(-3.33,0.9,-0.02), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamps4"] = { + model = "models/metrostroi_train/81-502/bort_lamps_body.mdl", + pos = Vector(-6.5,-67,51.2), + ang = Angle(90,180,0), + hide = 2, +} +ENT.ClientProps["bortlamp4_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = ENT.ClientProps.bortlamps4.pos+Vector(-3.28,-0.9,-0.02), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp4_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = ENT.ClientProps.bortlamps4.pos+Vector(0.06,-0.9,-0.02), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp4_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = ENT.ClientProps.bortlamps4.pos+Vector(3.33,-0.9,-0.02), + ang = Angle(0,180,0), + nohide = true, +}--]] +-------------------------------------------------------------------------------- +-- Add doors +--[[ local function GetDoorPosition(i,k,j) + if j == 0 + then return Vector(338.0-230.1*i+(1-k)*0.8,-65*(1-2*k),0.761) + else return Vector(338.2-230.1*i+(1-k)*0.8,-65*(1-2*k),0.761) + end +end +for i=0,3 do + for k=0,1 do + ENT.ClientProps["door"..i.."x"..k.."a"] = { + model = "models/metrostroi_train/81-717/door_right_spb.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-717/door_left_spb.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-717/81-717_doors_pos1.mdl", + pos = Vector(338.445,65.164,0.807), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door1x1"] = { + model = "models/metrostroi_train/81-717/81-717_doors_pos2.mdl", + pos = Vector(108.324,65.164,0.807), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door2x1"] = { + model = "models/metrostroi_train/81-717/81-717_doors_pos3.mdl", + pos = Vector(-121.682,65.164,0.807), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door3x1"] = { + model = "models/metrostroi_train/81-717/81-717_doors_pos4.mdl", + pos = Vector(-351.531,65.164,0.807), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door0x0"] = { + model = "models/metrostroi_train/81-717/81-717_doors_pos4.mdl", + pos = Vector(338.445,-65.164,0.807), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door1x0"] = { + model = "models/metrostroi_train/81-717/81-717_doors_pos3.mdl", + pos = Vector(108.324,-65.164,0.807), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door2x0"] = { + model = "models/metrostroi_train/81-717/81-717_doors_pos2.mdl", + pos = Vector(-121.682,-65.164,0.807), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door3x0"] = { + model = "models/metrostroi_train/81-717/81-717_doors_pos1.mdl", + pos = Vector(-351.531,-65.164,0.807), + ang = Angle(0,90,0), + hide = 2.0, +} +for i = 0,12 do + local b = 15--math.random()*15 + local g = 15--b+math.random()*(15-b) + if math.random() > 0.4 then + g = math.random()*15 + b = g + else + g = 15 + b = -10+math.random()*25 + end + ENT.ClientProps["lamp1_"..i+1] = { + model = "models/metrostroi_train/81-717/lamps/lamp_typ1.mdl", + pos = Vector(394.5- 66.65*i, 0, 67.608), + ang = Angle(0,0,0), + color = Color(255,235+g,235+b), + hideseat = 1.1, + } +end +for i = 0,26 do + --[[local r = 15--math.random()*15 + local g = 15--b+math.random()*(15-b) + if math.random() > 0.4 then + r = math.random()*15 + g = r + else + r = 15 + g = -20+math.random()*20 + end--]] + ENT.ClientProps["lamp2_"..i+1] = { + model = "models/metrostroi_train/81-717/lamps/lamp_typ2.mdl", + pos = Vector(354.1 - 32.832*(i-2),0,68.2), + ang = Angle(0,0,0), + --color = Color(245+r,228+g,189), + color = Color(255,255,255), + hideseat = 1.1, + } +end +for i=0,4 do + ENT.ClientProps["TrainNumberL"..i] = { + model = "models/metrostroi_train/common/bort_numbers.mdl", + pos = Vector(41+16+i*6.6-5*6.6/2,67.4,-17.8), + ang = Angle(0,180,0), + skin=i, + hide = 1.5, + callback = function(ent) + ent.WagonNumber = false + end, + } + ENT.ClientProps["TrainNumberR"..i] = { + model = "models/metrostroi_train/common/bort_numbers.mdl", + pos = Vector(64+16-i*6.6-5*6.6/2,-67.4,-17.8), + ang = Angle(0,0,0), + skin=i, + hide = 1.5, + callback = function(ent) + ent.WagonNumber = false + end, + } +end +ENT.Lights = { + -- Interior + [11] = { "dynamiclight", Vector( 200, 0, 0), Angle(0,0,0), Color(255,245,245), brightness = 3, distance = 400 , fov=180,farz = 128, changable = true }, + [12] = { "dynamiclight", Vector( 0, 0, 0), Angle(0,0,0), Color(255,245,245), brightness = 3, distance = 400, fov=180,farz = 128, changable = true }, + [13] = { "dynamiclight", Vector(-200, 0, 0), Angle(0,0,0), Color(255,245,245), brightness = 3, distance = 400 , fov=180,farz = 128, changable = true }, + + -- Side lights + [15] = { "light",Vector(-52,67,45.5)+Vector(0,0.9,3.25), Angle(0,0,0), Color(254,254,254), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [16] = { "light",Vector(-52,67,45.5)+Vector(0,0.9,-0.02), Angle(0,0,0), Color(40,240,122), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [17] = { "light",Vector(-52,67,45.5)+Vector(0,0.9,-3.3), Angle(0,0,0), Color(254,210,18), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [18] = { "light",Vector(39,-67,45.5)+Vector(0,-0.9,3.25), Angle(0,0,0), Color(254,254,254), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [19] = { "light",Vector(39,-67,45.5)+Vector(0,-0.9,-0.02), Angle(0,0,0), Color(40,240,122), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [20] = { "light",Vector(39,-67,45.5)+Vector(0,-0.9,-3.3), Angle(0,0,0), Color(254,210,18), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + + [21] = { "light",Vector(-6.5,67,51.2)+Vector(3.25,0.9,-0.02), Angle(0,0,0), Color(254,254,254), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [22] = { "light",Vector(-6.5,67,51.2)+Vector(-0.06,0.9,-0.02), Angle(0,0,0), Color(40,240,122), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [23] = { "light",Vector(-6.5,67,51.2)+Vector(-3.33,0.9,-0.02), Angle(0,0,0), Color(254,210,18), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [24] = { "light",Vector(-6.5,-67,51.2)+Vector(3.33,-0.9,-0.02), Angle(0,0,0), Color(254,254,254), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [25] = { "light",Vector(-6.5,-67,51.2)+Vector(0.06,-0.9,-0.02), Angle(0,0,0), Color(40,240,122), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [26] = { "light",Vector(-6.5,-67,51.2)+Vector(-3.28,-0.9,-0.02), Angle(0,0,0), Color(254,210,18), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, +} +-------------------------------------------------------------------------------- +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 0, Bortlamp_w) + self:SetLightPower(18, Bortlamp_w > 0, Bortlamp_w) + self:SetLightPower(16, Bortlamp_g > 0, Bortlamp_g) + self:SetLightPower(19, Bortlamp_g > 0, Bortlamp_g) + self:SetLightPower(17, Bortlamp_y > 0, Bortlamp_y) + self:SetLightPower(20, Bortlamp_y > 0, Bortlamp_y) + + local dot5 = self:GetNW2Bool("Dot5") + local lvz = self:GetNW2Bool("LVZ") + local custom = self:GetNW2Bool("Custom") + local newSeats = self:GetNW2Bool("NewSeats") + self:ShowHide("handrails_old",not dot5) + self:ShowHide("handrails_new",dot5) + self:ShowHide("seats_old",not newSeats) + self:ShowHide("seats_new",newSeats) + + local capOpened = self:GetPackedBool("CouchCap") + local c013 = self:GetPackedBool("Crane013") + self:ShowHide("seats_old_cap_o",capOpened and not newSeats) + self:ShowHide("seats_old_cap",not capOpened and not newSeats) + self:ShowHide("seats_new_cap_o",capOpened and newSeats) + self:ShowHide("seats_new_cap",not capOpened and newSeats) + self:HidePanel("couch_cap",capOpened) + self:HidePanel("couch_cap_o",not capOpened) + self:HidePanel("AV_S",not capOpened) + self:HidePanel("AV_T",not capOpened) + self:HidePanel("Stopkran",not capOpened) + self:ShowHide("otsek_cap_r",not capOpened) + self:ShowHide("brake334",capOpened and not c013) + self:ShowHide("brake013",capOpened and c013) + self:ShowHide("brake_disconnect",capOpened) + self:ShowHide("train_disconnect",capOpened) + self:HidePanel("DriverValveBLTLDisconnect",not capOpened) + self:HidePanel("Shunt",not capOpened) + self:HidePanel("VU",not capOpened) + + self:Animate("brake_disconnect",self:GetPackedBool("DriverValveBLDisconnect") and 1 or 0,0.25,0, 4,false) + self:Animate("train_disconnect",self:GetPackedBool("DriverValveTLDisconnect") and 1 or 0,0.25,0, 4,false) + self:Animate("brake334",self:GetPackedRatio("CranePosition")/5,0.35,0.65,256,24) + self:Animate("brake013",Cpos[self:GetPackedRatio("CranePosition")] or 0, 0.03, 0.458, 256,24) + + self:Animate("brake_line", self:GetPackedRatio("BLPressure"),0.14, 0.875, 256,2)--,,0.01) + self:Animate("train_line", self:GetPackedRatio("TLPressure"),0.14, 0.875, 256,2)--,,0.01) + self:Animate("brake_cylinder", self:GetPackedRatio("BCPressure"),0.14, 0.875, 256,2)--,,0.03) + self:Animate("voltmeter", self:GetPackedRatio("BatteryVoltage"),0.601, 0.400) + self:Animate("ampermeter", 0.5+self:GetPackedRatio("BatteryCurrent"),0.604, 0.398) + + local typ = self:GetNW2Int("LampType",1) + if self.LampType ~= typ then + self.LampType = typ + for i=1,27 do + if i<=13 then + self:ShowHide("lamp1_"..i,typ==1) + end + self:ShowHide("lamp2_"..i,typ==2) + end + self:ShowHide("lamps1",typ==1) + self:ShowHide("lamps2",typ==2) + end + local activeLights = 0 + local maxLights + if typ == 1 then + for i = 1,13 do + local colV = self:GetNW2Vector("lamp"..i) + local col = Color(colV.x,colV.y,colV.z) + local state = self:Animate("Lamp1_"..i,self:GetPackedBool("lightsActive"..i) and 1 or 0,0,1,6,false) + self:ShowHideSmooth("lamp1_"..i,state,col) + activeLights = activeLights + state + end + maxLights = 13 + else + for i = 1,27 do + local colV = self:GetNW2Vector("lamp"..i) + local col = Color(colV.x,colV.y,colV.z) + local state = self:Animate("Lamp2_"..i,self:GetPackedBool("lightsActive"..i) and 1 or 0,0,1,6,false) + self:ShowHideSmooth("lamp2_"..i,state,col) + activeLights = activeLights + state + end + maxLights = 27 + end + for i=11,13 do + local col = self:GetNW2Vector("lampD"..i) + if self.LightsOverride[i].vec ~= col then + self.LightsOverride[i].vec = col + self.LightsOverride[i][4] = Color(col.x,col.y,col.z) + self:SetLightPower(i, false) + else + self:SetLightPower(i, activeLights > 0,activeLights/maxLights) + end + end + + local door1 = self:Animate("door1", self:GetPackedBool("FrontDoor") and 0.99 or 0,0,0.25, 4, 0.5) + local door2 = self:Animate("door2", self:GetPackedBool("RearDoor") and (capOpened and 0.25 or 0.99) or 0,0,0.25, 4, 0.5) + + 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 + + + + 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) + self:Animate("ParkingBrake", self:GetPackedBool("ParkingBrake") and 1 or 0,1,0, 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) + + 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.8+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,0.95, 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 + + local dT = self.DeltaTime + local rollingi = math.min(1,self.TunnelCoeff+math.Clamp((self.StreetCoeff-0.82)/0.3,0,1)) + local rollings = math.max(self.TunnelCoeff*0.6,self.StreetCoeff) + 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-55)/10,0,1) ---ANY IDEAS?? MOTORS BACKGROUND SOUNDS AT HISPEED + local rol_motorsp = Lerp((speed-72)/25*0.2,0.85,1.1) + self:SetSoundState("rolling_motors",rol_motors,rol_motorsp) ---ANY IDEAS??--]] + + 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) + local parking_brake = self:GetPackedRatio("ParkingBrakePressure_dPdT",0) + local parking_brake_abs = math.Clamp(math.abs(parking_brake)-0.3,0,1) + if self.ParkingBrake1 ~= (parking_brake<1) then + self.ParkingBrake1 = (parking_brake<1) + if self.ParkingBrake1 then self:PlayOnce("parking_brake_en","bass",1,1) end + end + if self.ParkingBrake2 ~= (parking_brake>-0.8) then + self.ParkingBrake2 = (parking_brake>-0.8) + if self.ParkingBrake2 then self:PlayOnce("parking_brake_rel","bass",0.6,1) end + end + self:SetSoundState("parking_brake",parking_brake_abs,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 c013 then + 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("crane334_brake",0,1.0) + self:SetSoundState("crane334_brake_reflection",0,1.0) + self:SetSoundState("crane334_brake_slow",0,1.0) + self:SetSoundState("crane334_release",0,1.0) + self:SetSoundState("crane013_release",self.CraneRRamp^1.5,1.0) + self:SetSoundState("crane013_brake",math.Clamp(-self.CraneRamp*1.5-0.1,0,1)^1.3,1.0) + local loudV = self:GetNW2Float("Crane013Loud",0) + if loudV>0 then + if ramp>0 then + self.CraneLRamp = self.CraneLRamp + (math.min(ramp,0)-self.CraneLRamp)*dT*0.5 + else + self.CraneLRamp = self.CraneLRamp + (math.min(ramp,0)-self.CraneLRamp)*dT*1 + end + self:SetSoundState("crane013_brake_l",(math.Clamp(-self.CraneRamp*2.5-0.1,0,1)^1.3)*(1-math.Clamp((-self.CraneLRamp-loudV)*3,0,1)),1.12-math.Clamp((-self.CraneLRamp-0.15)*2,0,1)*0.12) + else + self:SetSoundState("crane013_brake_l",0,1) + end + self:SetSoundState("crane013_brake2",math.Clamp(-self.CraneRamp*1.5-0.95,0,1.5)^2,1.0) + else + self:SetSoundState("crane013_brake",0,1.0) + self:SetSoundState("crane013_release",0,1.0) + --self:SetSoundState("crane013_brake2",0,1.0) + + 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) + end + 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)) + + -- Compressor + self:SetSoundState("compressor",self:GetPackedBool("Compressor") and 0.6 or 0,1) + self:SetSoundState("compressor2",self:GetPackedBool("Compressor") and 0.8 or 0,1) + + local v1state = self:GetPackedBool("M1_3") and 1 or 0 + local v2state = self:GetPackedBool("M4_7") and 1 or 0 + self.VentG1 = math.Clamp(self.VentG1 + dT/2.7*(v1state*2-1),0,1) + self.VentG2 = math.Clamp(self.VentG2 + dT/2.7*(v2state*2-1),0,1) + + for i=1,8 do + if i<4 or i==8 then + self:SetSoundState("vent"..i,self.VentG1,1) + else + self:SetSoundState("vent"..i,self.VentG2,1) + end + end + + -- RK rotation + if self:GetPackedBool("RK") then self.RKTimer = CurTime() end + self:SetSoundState("rk",(self.RKTimer and (CurTime() - self.RKTimer) < 0.2) and 0.7 or 0,1) + + -- BPSN sound + self.BPSNType = self:GetNW2Int("BPSNType",13) + if not self.OldBPSNType then self.OldBPSNType = self.BPSNType end + if self.BPSNType ~= self.OldBPSNType then + for i=1,12 do + self:SetSoundState("bpsn"..i,0,1.0) + end + end + self.OldBPSNType = self.BPSNType + if self.BPSNType<13 then + self:SetSoundState("bpsn"..self.BPSNType,self:GetPackedBool("BPSN") and 1 or 0,1) --FIXME громкоÑть по другому + end + + local work = self:GetPackedBool("AnnPlay") + local buzz = self:GetPackedBool("AnnBuzz") and self:GetNW2Int("AnnouncerBuzz",-1) > 0 + local buzz_old = self:GetNW2Int("AnnouncerBuzz",-1) == 2 + for k in ipairs(self.AnnouncerPositions) do + self:SetSoundState("announcer_buzz"..k,(buzz and work and not buzz_old) and 1 or 0,1) + self:SetSoundState("announcer_buzz_o"..k,(buzz and work and buzz_old) and 1 or 0,1) + end + for k,v in ipairs(self.AnnouncerPositions) do + 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:Draw() + self.BaseClass.Draw(self) +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: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 == "pkg" then 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 == "lk2c" then + local speed = self:GetPackedRatio("Speed") + self.SoundPositions[soundid][1] = 350-Lerp(speed/0.1,0,250) + return soundid,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "LK2" then + local speed = self:GetPackedRatio("Speed") + if range == 0 and speed < 20 and self:GetPackedRatio("EnginesCurrent") > 0.55 then + self:PlayOnce("lk2c","bass",1,pitch) + end + 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 == "LK5" and range > 0 then + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["lk5_on"][1] = 440-Lerp(speed/0.1,0,330) + return "lk5_on",location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "brake" then + self:PlayOnce("brake_f",location,range,pitch) + self:PlayOnce("brake_b",location,range,pitch) + return + end + if soundid == "KK" then + return range > 0 and "kk_on" or "kk_off",location,1,0.8 + end + end + return soundid,location,range,pitch +end +Metrostroi.GenerateClientProps() diff --git a/lua/entities/gmod_subway_81-714_mvm/init.lua b/lua/entities/gmod_subway_81-714_mvm/init.lua new file mode 100644 index 0000000..204f581 --- /dev/null +++ b/lua/entities/gmod_subway_81-714_mvm/init.lua @@ -0,0 +1,465 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +ENT.BogeyDistance = 650 -- Needed for gm trainspawner +ENT.SyncTable = { + "A53","A56","A54","A24","A39","A23","A14","A13","A31","A32", + "A16","A12","A49","A15","A27","A50","A8","A52","A19","A10", + "A22","A30","A1","A2","A3","A4","A5","A6","A72","A38","A20", + "A25","A37","A55","A45","A66","A51","A65","A28","A70","AV2", + "AV3","AV4","AV5","A81","AV6","A80","A18", + "VB","GV", + "DriverValveBLDisconnect","DriverValveTLDisconnect","ParkingBrake", + "A84","BPSNon","ConverterProtection","L_1","OtklBV","Start","VozvratRP" +} + +function ENT:Initialize() + self.Plombs = { + A84 = true, + Init = true, + } + self.LampType = 1 + + -- Set model and initialize + self:SetModel("models/metrostroi_train/81-717/81-717_mvm_int.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create seat entities + self.DriverSeat = self:CreateSeat("driver",Vector(-415-16,0,-48+2.5+6),Angle(0,-90,0),"models/vehicles/prisoner_pod_inner.mdl") + --self.InstructorsSeat = self:CreateSeat("instructor",Vector(430,47,-27+2.5),Angle(0,-90,0)) + + -- 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) + + -- Create bogeys + if Metrostroi.BogeyOldMap then + self.FrontBogey = self:CreateBogey(Vector( 317-5,0,-84),Angle(0,180,0),true,"717") + self.RearBogey = self:CreateBogey(Vector(-317+0,0,-84),Angle(0,0,0),false,"717") + self.FrontCouple = self:CreateCouple(Vector( 420.54,0,-62),Angle(0,0,0),true,"717") + self.RearCouple = self:CreateCouple(Vector(-426.04,0,-62),Angle(0,180,0),false,"717") + else + self.FrontBogey = self:CreateBogey(Vector( 317-11,0,-80),Angle(0,180,0),true,"717") + self.RearBogey = self:CreateBogey(Vector(-317+0,0,-80),Angle(0,0,0),false,"717") + self.FrontCouple = self:CreateCouple(Vector( 408,0,-66),Angle(0,0,0),true,"717") + self.RearCouple = self:CreateCouple(Vector(-421,0,-66),Angle(0,180,0),false,"717") + end + + local pneumoPow = 0.8+(math.random()^1.55)*0.4 + self.FrontBogey.PneumaticPow = pneumoPow + self.RearBogey.PneumaticPow = pneumoPow + + -- Initialize key mapping + self.KeyMap = { + [KEY_1] = "StartSet", + [KEY_8] = "StartSet", + [KEY_W] = "StartSet", + [KEY_PAD_DIVIDE] = "StartSet", + [KEY_0] = "RV+", + [KEY_9] = "RV-", + [KEY_PAD_PLUS] = "RV+", + [KEY_PAD_MINUS] = "RV-", + [KEY_G] = "VozvratRPSet", + [KEY_L] = "HornEngage", + + [KEY_F] = "PneumaticBrakeUp", + [KEY_R] = "PneumaticBrakeDown", + [KEY_PAD_1] = "PneumaticBrakeSet1", + [KEY_PAD_2] = "PneumaticBrakeSet2", + [KEY_PAD_3] = "PneumaticBrakeSet3", + [KEY_PAD_4] = "PneumaticBrakeSet4", + [KEY_PAD_5] = "PneumaticBrakeSet5", + [KEY_PAD_6] = "PneumaticBrakeSet6", + [KEY_PAD_7] = "PneumaticBrakeSet7", + [KEY_PAD_0] = "DriverValveDisconnect", + + [KEY_BACKSPACE] = "EmergencyBrakeValveToggle", + + [KEY_LSHIFT] = { + [KEY_L] = "DriverValveDisconnect", + }, + + [KEY_RSHIFT] = { + [KEY_L] = "DriverValveDisconnect", + }, + } + + + self.InteractionZones = { + { + ID = "FrontBrakeLineIsolationToggle", + Pos = Vector(461.5, -34, -53), Radius = 8, + }, + { + ID = "FrontTrainLineIsolationToggle", + Pos = Vector(461.5, 33, -53), Radius = 8, + }, + { + ID = "RearBrakeLineIsolationToggle", + Pos = Vector(-474.5, 33, -53), Radius = 8, + }, + { + ID = "RearTrainLineIsolationToggle", + Pos = Vector(-474.5, -34, -53), Radius = 8, + }, + { + ID = "ParkingBrakeToggle", + Pos = Vector(-469, -54.5, -53), Radius = 8, + }, + { + ID = "FrontDoor", + Pos = Vector(451.5,35,4), Radius = 20, + }, + { + ID = "RearDoor", + Pos = Vector(-464.8,-35,4), Radius = 20, + }, + { + ID = "GVToggle", + Pos = Vector(140.50,62,-64), Radius = 10, + }, + { + ID = "VBToggle", + Pos = Vector(-470 -15, 53), Radius = 20, + }, + { + ID = "AirDistributorDisconnectToggle", + Pos = Vector(-177, -66, -50), Radius = 20, + }, + } + + -- Cross connections in train wires + self.TrainWireInverts = { + [28] = true, + [34] = true, + } + self.TrainWireCrossConnections = { + [5] = 4, -- Reverser F<->B + [31] = 32, -- Doors L<->R + } + + self.Lamps = { + broken = {}, + } + local rand = math.random() > 0.8 and 1 or math.random(0.95,0.99) + for i = 1,27 do + if math.random() > rand then self.Lamps.broken[i] = math.random() > 0.5 end + end + + self:SetNW2Int("Type",self:GetNW2Int("Type",2)) + self:TrainSpawnerUpdate() +end + +function ENT:UpdateLampsColors() + local lCol,lCount = Vector(),0 + local rand = math.random() > 0.8 and 1 or math.random(0.95,0.99) + if self.LampType == 1 then + local r,g,col = 15,15 + local typ = math.Round(math.random()) + local rnd = 0.5+math.random()*0.5 + for i = 1,13 do + local chtp = math.random() > rnd + + if typ == 0 and not chtp or typ == 1 and chtp then + g = math.random()*15 + col=Vector(240+g,240+g,255) + else + b = -5+math.random()*20 + col = Vector(255,255,235+b) + end + lCol = lCol + col + lCount = lCount + 1 + if i%4==0 then + local id = 10+math.ceil(i/4) + + local tcol = (lCol/lCount)/255 + --self.Lights[id][4] = Vector(tcol.r,tcol.g^3,tcol.b^3)*255 + self:SetNW2Vector("lampD"..id,Vector(tcol.r,tcol.g^3,tcol.b^3)*255) + lCol = Vector() + lCount = 0 + end + self:SetNW2Vector("lamp"..i,col) + self.Lamps.broken[i] = math.random() > rand and math.random() > 0.7 + end + else + local rnd1,rnd2,col = 0.7+math.random()*0.3,math.random() + local typ = math.Round(math.random()) + local r,g = 15,15 + for i = 1,27 do + local chtp = math.random() > rnd1 + if typ == 0 and not chtp or typ == 1 and chtp then + if math.random() > rnd2 then + r = -20+math.random()*25 + g = 0 + else + g = -5+math.random()*15 + r = g + end + col = Vector(245+r,228+g,189) + else + if math.random() > rnd2 then + g = math.random()*15 + b = g + else + g = 15 + b = -10+math.random()*25 + end + col = Vector(255,235+g,235+b) + end + lCol = lCol + col + lCount = lCount + 1 + if i%8.3<1 then + local id = 9+math.ceil(i/8.3) + + local tcol = (lCol/lCount)/255 + --self.Lights[id][4] = Vector(tcol.r,tcol.g^3,tcol.b^3)*255 + self:SetNW2Vector("lampD"..id,Vector(tcol.r,tcol.g^3,tcol.b^3)*255) + lCol = Vector() lCount = 0 + end + self:SetNW2Vector("lamp"..i,col) + self.Lamps.broken[i] = math.random() > rand and math.random() > 0.7 + end + end +end + +function ENT:TrainSpawnerUpdate() + self:SetNW2Bool("Custom",self.CustomSettings) + local num = self.WagonNumber + math.randomseed(num+817171) + if self.CustomSettings then + local dot5 = self:GetNW2Int("Type")==2 + local typ = self:GetNW2Int("BodyType") + self:SetNW2Int("Crane",self:GetNW2Int("Cran")) + + local lampType = self:GetNW2Int("LampType") + local BPSNType = self:GetNW2Int("BPSNType") + local SeatType = self:GetNW2Int("SeatType") + self:SetNW2Bool("Dot5",dot5) + self:SetNW2Int("LampType",lampType==1 and (math.random()>0.5 and 2 or 1) or lampType-1) + self:SetNW2Int("BPSNType",BPSNType==1 and math.ceil(math.random()*12+0.5) or BPSNType-1) + if SeatType==1 then + self:SetNW2Bool("NewSeats",math.random()>0.5) + else + self:SetNW2Bool("NewSeats",SeatType==3) + end + else + local num = self.WagonNumber + local typ = self.WagonNumberConf or {} + local lvz = typ[1] + self.Dot5 = typ[2] + self.NewBortlamps = typ[4] + if lvz then + --self:SetModel("models/metrostroi_train/81-717/81-717_lvz.mdl") + self:SetModel("models/metrostroi_train/81-717/81-717_mvm_int.mdl") + else + self:SetModel("models/metrostroi_train/81-717/81-717_mvm_int.mdl") + end + self:SetNW2Bool("Dot5",self.Dot5) + self:SetNW2Bool("LVZ",lvz) + self:SetNW2Bool("NewSeats",typ[3]) + self:SetNW2Bool("NewBortlamps",self.NewBortlamps) + + self:SetNW2Int("LampType",math.random()>0.5 and 2 or 1) + + local tex = typ[5] and typ[5][math.random(1,#typ[5])] or "Def_717MSKWhite" + self:SetNW2String("PassTexture",tex) + local oldType = not self.Dot5 and not typ[3] and not lvz + self:SetNW2Int("BPSNType",oldType and (math.random()>0.7 and 2 or 1) or 2+math.Clamp(math.floor(math.random()*11)+1,1,11)) + + self:SetNW2Int("Crane",not self.Dot5 and 2 or 1) + if self.Dot5 then + self.FrontCouple.CoupleType = "717" + else + self.FrontCouple.CoupleType = "702" + end + self.RearCouple.CoupleType = self.FrontCouple.CoupleType + self.FrontCouple:SetParameters() + self.RearCouple:SetParameters() + self:SetNW2String("Texture","Def_717MSKClassic1") + --self.ARSType = self:GetNW2Int("ARSType",1) + end + self.LampType = self:GetNW2Int("LampType",1) + self.Pneumatic.ValveType = self:GetNW2Int("Crane",1) + self.Announcer.AnnouncerType = self:GetNW2Int("Announcer",1) + + self.WorkingLights = 6 + self:SetPackedBool("Crane013",self.Pneumatic.ValveType == 2) + self:UpdateTextures() + self:UpdateLampsColors() + + local pneumoPow = 0.8+(math.random()^1.55)*0.4 + if IsValid(self.FrontBogey) then + self.FrontBogey.PneumaticPow = pneumoPow + end + if IsValid(self.RearBogey) then + self.RearBogey.PneumaticPow = pneumoPow + end + 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 + math.randomseed(os.time()) +end + +-------------------------------------------------------------------------------- +function ENT:Think() + local retVal = self.BaseClass.Think(self) + local Panel = self.Panel + local Pneumatic = self.Pneumatic + + local lightsActive1 = Panel.EmergencyLights > 0 + local lightsActive2 = Panel.MainLights > 0.0 + local LampCount = self.LampType==2 and 27 or 13 + local Ip = self.LampType==2 and 7 or 3.6 + local Im = self.LampType==2 and 2 or 1 + for i = 1,LampCount do + if (lightsActive2 or (lightsActive1 and math.ceil((i+Ip-Im)%Ip)==1)) then + if not self.Lamps[i] and not self.Lamps.broken[i] then self.Lamps[i] = CurTime() + math.Rand(0.1,math.Rand(0.5,2)) end + else + self.Lamps[i] = nil + end + if (self.Lamps[i] and CurTime() - self.Lamps[i] > 0) then + self:SetPackedBool("lightsActive"..i,true) + else + self:SetPackedBool("lightsActive"..i,false) + end + end + + self:SetPackedBool("DoorsW",Panel.DoorsW > 0) + self:SetPackedBool("GRP",Panel.GreenRP > 0) + self:SetPackedBool("BrW",Panel.BrW > 0) + + self:SetPackedBool("M1_3",Panel.M1_3 > 0) + self:SetPackedBool("M4_7",Panel.M4_7 > 0) + + -- 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) + + --self:SetPackedRatio("Crane", Pneumatic.RealDriverValvePosition) + --self:SetPackedRatio("Controller", (self.KV.ControllerPosition+3)/7) + if Pneumatic.ValveType == 1 then + self:SetPackedRatio("BLPressure", Pneumatic.ReservoirPressure/16.0) + else + self:SetPackedRatio("BLPressure", Pneumatic.BrakeLinePressure/16.0) + end + self:SetPackedRatio("TLPressure", Pneumatic.TrainLinePressure/16.0) + self:SetPackedRatio("BCPressure", Pneumatic.BrakeCylinderPressure/6.0) + self:SetPackedRatio("BatteryVoltage",Panel["V1"]*self.Battery.Voltage/150.0) + self:SetPackedRatio("BatteryCurrent",Panel["V1"]*math.Clamp((self.Battery.Voltage-75)*0.01,-0.01,1)) + self:SetPackedRatio("EnginesCurrent", 0.5 + 0.5*(self.Electric.I24/500.0)) + + self:SetPackedBool("Compressor",Pneumatic.Compressor > 0) + self:SetPackedBool("RK",self.RheostatController.Velocity ~= 0.0) + self:SetPackedBool("BPSN",self.PowerSupply.X2_2 > 0) + self:SetPackedRatio("RV",self.RV.Value/2) + self:SetPackedRatio("CranePosition", Pneumatic.RealDriverValvePosition) + self:SetPackedBool("RZP",Panel.RZP > 0) + + + self:SetPackedBool("FrontDoor",self.FrontDoor) + self:SetPackedBool("RearDoor",self.RearDoor) + self:SetPackedBool("CouchCap",self.CouchCap) + + self:SetPackedBool("AnnBuzz",Panel.AnnouncerBuzz > 0) + self:SetPackedBool("AnnPlay",Panel.AnnouncerPlaying > 0) + -- 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 = 27000+1000*(A < 0 and 1 or 0) + --self.RearBogey.MotorForce = 27000+1000*(A < 0 and 1 or 0) + self.FrontBogey.MotorForce = 22500+5500*(A < 0 and 1 or 0) + self.RearBogey.MotorForce = 22500+5500*(A < 0 and 1 or 0) + self.FrontBogey.Reversed = (self.Reverser.NZ > 0.5) + 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) + --self.RearBogey.MotorPower = P*0.5 + --self.FrontBogey.MotorPower = P*0.5 + + --self.Acc = (self.Acc or 0)*0.95 + self.Acceleration*0.05 + --print(self.Acc) + + -- Apply brakes + self.FrontBogey.PneumaticBrakeForce = 50000.0-2000 + self.FrontBogey.BrakeCylinderPressure = Pneumatic.BrakeCylinderPressure + self.FrontBogey.ParkingBrakePressure = math.max(0,(2.6-Pneumatic.ParkingBrakePressure)/2.6)/2 + self.FrontBogey.BrakeCylinderPressure_dPdT = -Pneumatic.BrakeCylinderPressure_dPdT + self.RearBogey.PneumaticBrakeForce = 50000.0-2000 + self.RearBogey.BrakeCylinderPressure = Pneumatic.BrakeCylinderPressure + self.RearBogey.BrakeCylinderPressure_dPdT = -Pneumatic.BrakeCylinderPressure_dPdT + self.RearBogey.ParkingBrakePressure = math.max(0,(2.6-Pneumatic.ParkingBrakePressure)/2.6)/2 + --self.RearBogey.ParkingBrake = self.ParkingBrake.Value > 0.5 + end + + self:GenerateJerks() + -- Send networked variables + --self:SendPackedData() + return retVal +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 +function ENT:OnButtonPress(button,ply) + if button == "FrontDoor" then self.FrontDoor = not self.FrontDoor end + if button == "RearDoor" then self.RearDoor = not self.RearDoor end + if button == "CouchCap" then + if self.CouchCap and self.Pneumatic.DriverValvePosition>2 then return end + self.CouchCap = not self.CouchCap + end + if not self.CouchCap and (not button:find("VB") and not button:find("GV") and not button:find("Isolation") and not button:find("Parking") and not button:find("Air")) then return true 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.DriverValveBLDisconnect:TriggerInput("Set",0) + self.DriverValveTLDisconnect:TriggerInput("Set",0) + end + return + end + if string.find(button,"PneumaticBrakeSet") then + self.Pneumatic:TriggerInput("BrakeSet",tonumber(button:sub(-1,-1))) + return + end +end + +function ENT:OnButtonRelease(button) + if string.find(button,"PneumaticBrakeSet") then + local pos = tonumber(button:sub(-1,-1)) + if button == "PneumaticBrakeSet1" then + self.Pneumatic:TriggerInput("BrakeSet",2) + end + return + end +end diff --git a/lua/entities/gmod_subway_81-714_mvm/shared.lua b/lua/entities/gmod_subway_81-714_mvm/shared.lua new file mode 100644 index 0000000..8255f54 --- /dev/null +++ b/lua/entities/gmod_subway_81-714_mvm/shared.lua @@ -0,0 +1,435 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" +ENT.SkinsType = "81-717_mvm" +ENT.Model = "models/metrostroi_train/81-717/81-717_mvm_int.mdl" + +ENT.Spawnable = true +ENT.AdminSpawnable = false +ENT.DontAccelerateSimulation = false + +function ENT:PassengerCapacity() + return 300 +end + +function ENT:GetStandingArea() + return Vector(-450,-30,-48),Vector(380,30,-48) +end + +local function GetDoorPosition(i,k) + return Vector(359.0 - 35/2 - 229.5*i,-65*(1-2*k),7.5) +end + +-- Setup door positions +ENT.LeftDoorPositions = {} +ENT.RightDoorPositions = {} +for i=1,4 do + table.insert(ENT.LeftDoorPositions,GetDoorPosition(i-1,1)) + table.insert(ENT.RightDoorPositions,GetDoorPosition(i-1,0)) +end + +ENT.AnnouncerPositions = { + {Vector(-3,-60, 62),300,0.3}, + {Vector(-3,60 ,62),300,0.3}, +} + +ENT.MirrorCams = { + Vector(-441,75,15),Angle(1,0,0),75, + Vector(-441,-75,15),Angle(1,0,0),75, +} + +ENT.Cameras = { + {Vector(-434,20,-13),Angle(0,135,0),"Train.714.Shunt","Shunt"}, + {Vector(450+7,0,30),Angle(60,0,0),"Train.Common.CouplerCamera"}, + {Vector(-471,0,30),Angle(60,180,0),"Train.Common.CouplerCamera"}, +} + +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.15} + self.SoundPositions["rolling_10"] = {480,1e12,Vector(0,0,0),0.20} + self.SoundPositions["rolling_40"] = {480,1e12,Vector(0,0,0),0.55} + self.SoundPositions["rolling_70"] = {480,1e12,Vector(0,0,0),0.60} + self.SoundPositions["rolling_80"] = {480,1e12,Vector(0,0,0),0.75} + + self.SoundNames["rolling_motors"] = {loop=true,"subway_trains/common/junk/wind_background1.wav"} + self.SoundNames["rolling_motors2"] = {loop=true,"subway_trains/common/junk/wind_background1.wav"} + self.SoundPositions["rolling_motors"] = {250,1e12,Vector(200,0,0),0.33} + self.SoundPositions["rolling_motors2"] = {250,1e12,Vector(-250,0,0),0.33} + + 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"] = {480,1e12,Vector(0,0,0),0.90} + self.SoundPositions["rolling_medium2"] = {480,1e12,Vector(0,0,0),0.90} + self.SoundPositions["rolling_high2"] = {480,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,-24.1+1.5,-33.7),1} + self.SoundPositions["pneumo_disconnect1"] = {60,1e9,Vector(431.8,-24.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/relay_on.mp3" + --self.SoundPositions["avu_off"] = {60,1e9, Vector(436.0,-63,-25),1} + --self.SoundNames["r1_5_close"] = {"subway_trains/drive_on3.wav","subway_trains/drive_on4.wav"} + self.SoundNames["bpsn1"] = {"subway_trains/717/bpsn/bpsn_ohigh.wav", loop=true} + self.SoundNames["bpsn2"] = {"subway_trains/717/bpsn/old.wav", loop=true} + self.SoundNames["bpsn3"] = {"subway_trains/717/bpsn/bpsn_olow.wav", loop=true} + self.SoundNames["bpsn4"] = {"subway_trains/717/bpsn/bpsn_spb.wav", loop=true} + self.SoundNames["bpsn5"] = {"subway_trains/717/bpsn/bpsn_tkl.wav", loop=true} + self.SoundNames["bpsn6"] = {"subway_trains/717/bpsn/bpsn_nnov.wav", loop=true} + self.SoundNames["bpsn7"] = {"subway_trains/717/bpsn/bpsn_kiyv.wav", loop=true} + self.SoundNames["bpsn8"] = {"subway_trains/717/bpsn/bpsn_old.wav", loop=true} + self.SoundNames["bpsn9"] = {"subway_trains/717/bpsn/bpsn_1.wav", loop=true} + self.SoundNames["bpsn10"] = {"subway_trains/717/bpsn/bpsn_2.wav", loop=true} + self.SoundNames["bpsn11"] = {"subway_trains/717/bpsn/bpsn_piter.wav", loop=true} + self.SoundNames["bpsn12"] = {"subway_trains/717/bpsn/bpsn1.wav", loop=true} + self.SoundPositions["bpsn1"] = {600,1e9,Vector(0,45,-448),0.02} + self.SoundPositions["bpsn2"] = {600,1e9,Vector(0,45,-448),0.03} + self.SoundPositions["bpsn3"] = {600,1e9,Vector(0,45,-448),0.02} + self.SoundPositions["bpsn4"] = {600,1e9,Vector(0,45,-448),0.025} + self.SoundPositions["bpsn5"] = {600,1e9,Vector(0,45,-448),0.08} + self.SoundPositions["bpsn6"] = {600,1e9,Vector(0,45,-448),0.03} + self.SoundPositions["bpsn7"] = {600,1e9,Vector(0,45,-448),0.02} + self.SoundPositions["bpsn8"] = {600,1e9,Vector(0,45,-448),0.03} + self.SoundPositions["bpsn9"] = {600,1e9,Vector(0,45,-448),0.02} + self.SoundPositions["bpsn10"] = {600,1e9,Vector(0,45,-448),0.02} + self.SoundPositions["bpsn11"] = {600,1e9,Vector(0,45,-448),0.04} + self.SoundPositions["bpsn12"] = {600,1e9,Vector(0,45,-448),0.04} + + --Подвагонка + self.SoundNames["lk2_on"] = "subway_trains/717/pneumo/lk2_on.mp3" + self.SoundNames["lk5_on"] = "subway_trains/717/pneumo/lk1_on.mp3" + self.SoundNames["lk2_off"] = "subway_trains/717/pneumo/lk2_off.mp3" + self.SoundNames["lk2c"] = "subway_trains/717/pneumo/ksh1.mp3" + self.SoundNames["lk3_on"] = "subway_trains/717/pneumo/lk3_on.mp3" + self.SoundNames["lk3_off"] = "subway_trains/717/pneumo/lk3_off.mp3" + --self.SoundNames["ksh1_off"] = "subway_trains/717/pneumo/ksh1.mp3" + self.SoundPositions["lk2_on"] = {440,1e9,Vector(-60,-40,-66),0.22} + self.SoundPositions["lk5_on"] = {440,1e9,Vector(-60,-40,-66),0.30} + self.SoundPositions["lk2_off"] = self.SoundPositions["lk2_on"] + self.SoundPositions["lk2c"] = {440,1e9,Vector(-60,-40,-66),0.6} + self.SoundPositions["lk3_on"] = self.SoundPositions["lk2_on"] + self.SoundPositions["lk3_off"] = self.SoundPositions["lk2_on"] + --self.SoundPositions["ksh1_off"] = self.SoundPositions["lk1_on"] + + self.SoundNames["compressor"] = {loop=2.0,"subway_trains/d/pneumatic/compressor/compessor_d_start.wav","subway_trains/d/pneumatic/compressor/compessor_d_loop.wav", "subway_trains/d/pneumatic/compressor/compessor_d_end.wav"} + self.SoundNames["compressor2"] = {loop=1.79,"subway_trains/717/compressor/compressor_717_start2.wav","subway_trains/717/compressor/compressor_717_loop2.wav", "subway_trains/717/compressor/compressor_717_stop2.wav"} + self.SoundPositions["compressor"] = {600,1e9,Vector(-118,-40,-66),0.15} + self.SoundPositions["compressor2"] = {480,1e9,Vector(-118,-40,-66),0.55} + self.SoundNames["rk"] = {loop=0.8,"subway_trains/717/rk/rk_start.wav","subway_trains/717/rk/rk_spin.wav","subway_trains/717/rk/rk_stop.mp3"} + self.SoundPositions["rk"] = {70,1e3,Vector(110,-40,-75),0.5} + + for i=1,8 do + self.SoundNames["vent"..i] = {loop=true,"subway_trains/717/vent/vent_cab_"..(i>=7 and "low" or "high")..".wav"} + end + self.SoundPositions["vent1"] = {160,1e9,Vector(225, -50, -37.5),0.23} + self.SoundPositions["vent2"] = {160,1e9,Vector(-5, 50, -37.5),0.23} + self.SoundPositions["vent3"] = {160,1e9,Vector(-230, -50, -37.5),0.23} + self.SoundPositions["vent8"] = {120,1e9,Vector(416, 50, -37.5),0.23} + self.SoundPositions["vent4"] = {160,1e9,Vector(225, 50, -37.5),0.23} + self.SoundPositions["vent5"] = {160,1e9,Vector(-5, -50, -37.5),0.23} + self.SoundPositions["vent6"] = {160,1e9,Vector(-230, 50, -37.5),0.23} + self.SoundPositions["vent7"] = {120,1e9,Vector(-432, -50, -37.5),0.23} + + 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["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["button1_off"] = { + "subway_trains/717/switches/button1_off1.mp3", + "subway_trains/717/switches/button1_off2.mp3", + "subway_trains/717/switches/button1_off3.mp3", + } + self.SoundNames["button1_on"] = { + "subway_trains/717/switches/button1_on1.mp3", + "subway_trains/717/switches/button1_on2.mp3", + "subway_trains/717/switches/button1_on3.mp3", + } + self.SoundNames["button2_off"] = { + "subway_trains/717/switches/button2_off1.mp3", + "subway_trains/717/switches/button2_off2.mp3", + } + self.SoundNames["button2_on"] = { + "subway_trains/717/switches/button2_on1.mp3", + "subway_trains/717/switches/button2_on2.mp3", + } + self.SoundNames["button3_off"] = { + "subway_trains/717/switches/button3_off1.mp3", + "subway_trains/717/switches/button3_off2.mp3", + } + self.SoundNames["button3_on"] = { + "subway_trains/717/switches/button3_on1.mp3", + "subway_trains/717/switches/button3_on2.mp3", + } + + self.SoundPositions["uava_reset"] = {80,1e9,Vector(429.6,-60.8,-15.9),0.95} + self.SoundNames["gv_f"] = {"subway_trains/717/kv70/reverser_0-b_1.mp3","subway_trains/717/kv70/reverser_0-b_2.mp3"} + self.SoundNames["gv_b"] = {"subway_trains/717/kv70/reverser_b-0_1.mp3","subway_trains/717/kv70/reverser_b-0_2.mp3"} + + self.SoundNames["pneumo_TL_open"] = { + "subway_trains/ezh3/pneumatic/brake_line_on.mp3", + "subway_trains/ezh3/pneumatic/brake_line_on2.mp3", + } + self.SoundNames["pneumo_TL_disconnect"] = { + "subway_trains/common/334/334_close.mp3", + } + self.SoundPositions["pneumo_TL_open"] = {60,1e9,Vector(431.8,-24.1+1.5,-33.7),0.7} + self.SoundPositions["pneumo_TL_disconnect"] = {60,1e9,Vector(431.8,-24.1+1.5,-33.7),0.7} + self.SoundNames["pneumo_BL_disconnect"] = { + "subway_trains/common/334/334_close.mp3", + } + 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["parking_brake"] = {loop=true,"subway_trains/common/pneumatic/parking_brake.wav"} + self.SoundNames["parking_brake_en"] = "subway_trains/common/pneumatic/parking_brake_stop.mp3" + self.SoundNames["parking_brake_rel"] = "subway_trains/common/pneumatic/parking_brake_stop2.mp3" + self.SoundPositions["parking_brake"] = {80,1e9,Vector(-454, -55,-63),0.6} + self.SoundPositions["parking_brake_en"] = self.SoundPositions["parking_brake"] + self.SoundPositions["parking_brake_rel"] = self.SoundPositions["parking_brake"] + self.SoundNames["front_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["front_isolation"] = {300,1e9,Vector(443, 0,-63),1} + self.SoundNames["rear_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["rear_isolation"] = {300,1e9,Vector(-456, 0,-63),1} + + self.SoundNames["crane013_brake"] = {loop=true,"subway_trains/common/pneumatic/release_2.wav"} + self.SoundPositions["crane013_brake"] = {80,1e9,Vector(-466,51,-12),0.86} + self.SoundNames["crane013_brake2"] = {loop=true,"subway_trains/common/pneumatic/013_brake2.wav"} + self.SoundPositions["crane013_brake2"] = {80,1e9,Vector(-466,51,-12),0.86} + self.SoundNames["crane013_brake_l"] = {loop=true,"subway_trains/common/pneumatic/013_brake_loud2.wav"} + self.SoundPositions["crane013_brake_l"] = {80,1e9,Vector(-466,51,-12),0.7} + self.SoundNames["crane013_release"] = {loop=true,"subway_trains/common/pneumatic/013_release.wav"} + self.SoundPositions["crane013_release"] = {80,1e9,Vector(-466,51,-12),0.4} + self.SoundNames["crane334_brake_high"] = {loop=true,"subway_trains/common/pneumatic/334_brake.wav"} + self.SoundPositions["crane334_brake_high"] = {80,1e9,Vector(-466,51,-12),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(-466,51,-12),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(-466,51,-12),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(-466,51,-70),0.2} + 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(-466,51,-70),0.2} + self.SoundNames["crane334_release"] = {loop=true,"subway_trains/common/pneumatic/334_release3.wav"} + self.SoundPositions["crane334_release"] = {80,1e9,Vector(-466,51,-12),0.2} + self.SoundNames["crane334_release_2"] = {loop=true,"subway_trains/common/pneumatic/334_release2.wav"} + self.SoundPositions["crane334_release_2"] = {80,1e9,Vector(-466,51,-12),0.2} + + self.SoundNames["valve_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["valve_brake"] = {80,1e9,Vector(-430,-662,-22),1} + + self.SoundNames["pak_on"] = "subway_trains/717/switches/rc_on.mp3" + self.SoundNames["pak_off"] = "subway_trains/717/switches/rc_off.mp3" + + 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["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(-470,0,-55),1} + + --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"] = {300,1e9,Vector(-420,45,-30),1} + self.SoundPositions["vdol_off"] = {300,1e9,Vector(-420,45,-30),0.4} + 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(-420,45,-30),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"] = {60,1e9,Vector(-420,45,-30),1} + self.SoundPositions["vdz_off"] = {60,1e9,Vector(-420,45,-30),0.4} + + 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} + 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_buzz"..k] = {loop=true,"subway_announcers/asnp/bpsn_ann.wav"} + self.SoundPositions["announcer_buzz"..k] = {v[2] or 600,1e9,v[1],v[3]/6} + self.SoundNames["announcer_buzz_o"..k] = {loop=true,"subway_announcers/upo/noiseT2.wav"} + --self.SoundNames["announcer_buzz_o"..k] = {loop=true,"subway_announcers/riu/bpsn_ann.wav"} + self.SoundPositions["announcer_buzz_o"..k] = {v[2] or 600,1e9,v[1],v[3]/6} + end +end +function ENT:InitializeSystems() + -- ЭлектроÑиÑтема 81-710 + self:LoadSystem("Electric","81_714_Electric") + + -- Токоприёмник + self:LoadSystem("TR","TR_3B") + -- ЭлектротÑговые двигатели + self:LoadSystem("Engines","DK_117DM") + + -- РезиÑторы Ð´Ð»Ñ Ñ€ÐµÐ¾Ñтата/пуÑковых Ñопротивлений + self:LoadSystem("KF_47A","KF_47A1") + -- РезиÑторы Ð´Ð»Ñ Ð¾ÑÐ»Ð°Ð±Ð»ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð±ÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ + self:LoadSystem("KF_50A") + -- Ящик Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñ…Ñ€Ð°Ð½Ð¸Ñ‚ÐµÐ»Ñми + self:LoadSystem("YAP_57") + + -- РеоÑтатный контроллер Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑƒÑковыми ÑÐ¾Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð»ÐµÐ½Ð¸Ñ + self:LoadSystem("Reverser","PR_722D") + self:LoadSystem("RheostatController","EKG_17B") + -- Групповой переключатель положений + self:LoadSystem("PositionSwitch","PKG_761") + + -- Ящики Ñ Ñ€ÐµÐ»Ðµ и контакторами + self:LoadSystem("BV","BV_630") + self:LoadSystem("LK_755A") + self:LoadSystem("YAR_13B") + self:LoadSystem("YAR_27",nil,"MSK") + self:LoadSystem("YAK_36") + self:LoadSystem("YAK_37E") + self:LoadSystem("YAS_44V") + self:LoadSystem("YARD_2") + + self:LoadSystem("Horn") + + self:LoadSystem("IGLA_PCBK") + -- Панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ 81-710 + self:LoadSystem("Panel","81_714_Panel") + -- ПневмоÑиÑтема 81-710 + self:LoadSystem("Pneumatic","81_717_Pneumatic",{br013_1 = true}) + -- Everything else + self:LoadSystem("Battery") + self:LoadSystem("PowerSupply","BPSN") + self:LoadSystem("Announcer","81_71_Announcer") +end +-- LVZ,Dot5,NewSeats,NewBL,PassTexture,MVM +ENT.NumberRanges = { + + --714 МВМ + { + true, + {0413,0414,0415,0416,0417,0418,0419,0420,0430,0431,0432,0433,0434,0435,0436,0437,0438,0439,0440,0441,0442,0443,0444,0445,0446,0447,0448,0449,0450,0451,0452,0453,0455,0456,0457,0458,0460,0461,0462,0464,0465,0466,0467,0468,0469,0470,0471,0472,0473,0474,0475,0476,0477,0478,0479,0480,0481,0482,0483,0484,0485,0486,0487,0488,0489,0490,0491,0492,0493,0494,0495,0496}, + {false,false,true ,true,{"Def_717MSKWhite","Def_717MSKWood4"}} + }, + { + true, + {9495,9505,9526,9533,9539,9543,9545,9548,9549,9552,9569,9577,9579,9589,9591,9593,9597,9603,9605,9613,9614,9615,9619,9621,9631,9654,9656,9657,9660,9661,9662,9664,9665,9667,9668,9673,9676,9677,9678,9682,9683,9684,9686,9687,9689,9690,9691,9692,9693,9694,9695,9698,9699,9700,9701,9702,9703,9704,9705,9706,9707,9708,9710,9711,9712,9714,9716,9717,9718,9731,9732,9734,9735,9736,9744,9748,9749,9751,9752,9753,9755,9765,9766,9775,9778,9782,9783,9788,9789,9790,9791,9792,9793,9794,9796,9799,9800,9801,9802,9805,9806,9807,9808,9809,9810,9811,9812,9813,9814,9815,9816,9817,9818,9819,9821,9822,9823,9824,9825,9826,9827,9828,9832,9833,9834,9835,9837,9838,9839,9840,9841,9843,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9858,9859,9884,9885,9886,9887,9888,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899,9900,9901,9902,9903,9904,9905,9906,9907,9908,9909,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9926,9927,9928,9929,9930,9931,9932,9933,9934,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944,9945,9946,9947,9948,9953,9954,9955,9956,9957,9958,9965,9966,9967,9968,9969,9970,9971,9972,9973,9977,9978,9979,9981,9982,9983,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993}, + {false,false,false,true,{"Def_717MSKBlue","Def_717MSKWhite",--[[ "Def_717MSKWood",--]] "Def_717MSKWood2"}} + }, + --714 ЛВЗ + { + true, + {7237,7317,7327,7334,7336,7339,7340,7343,7345,7346,7347,7356,7366,7420,7423,7424,7426,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503,7505,7506,7507,7508,7509,7510,7511,7512,7514,7517,7519,7520,7521,7522,7523,7524,7525,7528,7529,7530,7531,7532,7534,7535,7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7547,7549,7550,7551,7552,7553,7554,7555,7559,7561,7563,7564,7565,7566,7567,7568,7569,7570,7572,7573,7574,7575,7576,7578,7579,7580,7581,7582,7583,7585,7587,7589,7590,7591,7592,7593,7594,7595,7596,7620,7621,7622,7623,7624,7625,7627,7628,7629,7630,7631,7633,7634,7637,7639,7640,7641,7642,7643,7644,7646,7647,7648,7650,7651,7693,7695,7696,7697,7698,7703,7704,7705,7706,7732,7734,7738,7739,7740,7741,7742,7743,7744,7745,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758,7759,7760,7761,7762,7763,7764,7766,7767,7768,7769,7770,7771,7772,7876,7878,7879,7880,7882,7883,7887,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903,7904,7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7933,7935,7937,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7968,7969,7970,7971,7972,7973,7979,7981,7982,7983,7984,7985,7986,7987,7988,7989,7990,7991,7992,7994,7995,7996,7997,8012,8018,8020,8021,8023,8024,8025,8026,8036,8043,8044,8045,8046,8053,8062,8063,8064,8065,8071,8072,8073,8074,8075,8076,8078,8079,8080,8081,8083,8084,8086,8087,8088,8089,8093,8094,8095,8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8110,8111,8113,8114,8115,8116,8117,8135,8136,8137,8138,8139,8140,8141,8142,}, + --{true,false,false,false,{"Def_717MSKWhite","Def_717MSKWood4"},true} + {true,false,false ,true,{"Def_717MSKWhite","Def_717MSKWood4"}} + }, + --717.5 МВМ + { + true, + {0497,0498,0499,0500,0501,0502,0503,0504,0505,0506,0507,0508,0509,0510,0511,0512,0513,0514,0515,0516,0517,0518,0519,0520,0521,0522,0523,0524,0525,0526,0527,0528,0529,0530,0531,0532,0533,0534,0535,0536,0536,0538,0539,0540,0541,0542,0543,0544,0545,0546,0547,0548,0549,0550,0551,0552,0553,0554}, + --{false, true,false,true,{"Def_717MSKWhite","Def_717MSKWood4"},true,true} + {false, false,false,true,{"Def_717MSKWhite","Def_717MSKWood4"}} + }, + { + true, + {0623,0624,0625,0626,0627,0628,0629,0630,0631,0632,0633,0634,0635,0636,0637,0638,0639,0640,0641,0642,0643,0644,0645,0646,0647,0648,0649,0650,0651,0652,0653,0654,0655,0656,0657,0658,0662,0663,0664,0665,0666,0667,0668,0669,0670,0671,0672,0673,0674,0682,0684,0685,0686,0687,0688,0689,0690,0691,0692,0693,0694,0695,0696,0697,0698,0699,0703,0704,0705,0712,0713,0714,0715,0722,0723,0724,0725,0726,0727,0728,0729,0730,0731,0732,0733,0734,0735,0736,0737,0738,0739,0752,0753,0754,0755,0756,0757,0758,0759,0760,0761,0762,0763,0764,0765,0766,0767,0768,0769,0770,0771,0781,0782,0783,0786,0787,0788,0795,0796,0797,0798,0802,0803,0804,0805,0806,0807,0808,0809,0810,0811,0812,0813,0814,0818,0819,0820,0821,0822,0823,0824,0825,0826,0827,0828,0829,0830,0831,0833,0834,0835,0836,0837,0838,0839,0840,0841,0842,0843,0844,0845,0846,0847,0848,0849,0855,0856,0857,0858,0859,0860,0861,0862,0863,0864,0867,0872,0874,0875,0876,0877,0880,0881,0882,0883,0884,0885,0886,0887,0890,0891,0892,0893,0894,0895,0896,0897,0902,0903,0904,0905,0906,0907,0908,0909,0916,0917,0918}, + {false, true,true ,true,{"Def_717MSKWhite","Def_717MSKWood4"}} + }, + --717.5 ЛВЗ + { + true, + {8204,8205,8207,8208,8209,8210,8211,8212,8213,8214,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8270,8271,8272,8273,8274,8275,8276,8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,8309,8312,8343,8360,8361,8362,8363,8364,8365,8366,8367,8368,8368,8370,8377,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388}, + {true , true,false,true,{"Def_717MSKWhite","Def_717MSKWood4"}} + }, + { + true, + {11021,11022,11023,11024,11025,11026,11029,11030,11031,11032,11033,11034,11035,11036,11037,11038,11039,11040,11075,11076,11079,11089,11092,11093,11094,11095,11096,11097,11098,11099,11119,11120,11121,11122,11123,1112411125,11126,11127,11128,11129,11130,11131,11132,11133,11139,11140,11142,11143,11144,11145,11146,11147,11148,11149,11150,11151,11152,11153,11154,11155,11158,11159,11160,11161,11162,11163,11164,11165,11166,11169,11170,11171,11172,11175,11176,11177,11178,11179,11180,11183,11184,11185,11186,11193,11194,11195,11197,11198,11199,11200,11201,11202,11203,11204,11205,11206,11207,11208,11212,11213,11214,11216,11217,11218,11219,11221,11222,11223,11224,11226,11227,11228,11229,11230,11231,11232,11233,11234,11235,11236,11237,11238,11239,11240,11248,11250,11251,11252,11253,11256,11257,11264,11265,11266,11267,11268,11269,11270,11272,11274,11275,11276,11277,11278,11279,11280,11281,11282,11283,11286,11287,11288,11289,11290,11291,11295,11299,11307,11308,11309,11310,11311,11312,11313,11314,11315,11317,11318,11319,11320,11321,11324,11325,11326,11327,11328,11329,11330,11331,11332,11333,11334,11358,11359,11361,11363,11365,11366,11376}, + {true , true,true ,true,{"Def_717MSKWhite","Def_717MSKWood4"}} + }, +} + +function ENT:PostInitializeSystems() + self.Electric:TriggerInput("NoRT2",0) + self.Electric:TriggerInput("GreenRPRKR",0) + self.Electric:TriggerInput("Type",self.Electric.MVM) + self.Electric:TriggerInput("X2PS",0) + self.Electric:TriggerInput("HaveVentilation",1) +end +--------------------------------------------------- +-- Defined train information +-- Types of wagon(for wagon limit system): +-- 0 = Head or intherim +-- 1 = Only head +-- 2 = Only intherim +--------------------------------------------------- +ENT.SubwayTrain = { + Type = "81", + Name = "81-714.5m", + WagType = 2, + Manufacturer = "MVM", + EKKType = 717, +} diff --git a/lua/entities/gmod_subway_81-717_lvz/cl_init.lua b/lua/entities/gmod_subway_81-717_lvz/cl_init.lua new file mode 100644 index 0000000..fe09a8c --- /dev/null +++ b/lua/entities/gmod_subway_81-717_lvz/cl_init.lua @@ -0,0 +1,3794 @@ +-------------------------------------------------------------------------------- +-- 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.ClientProps["salon"] = { + model = "models/metrostroi_train/81-717/interior_spb.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["salon_add"] = { + model = "models/metrostroi_train/81-717/717_spb_features.mdl", + pos = Vector(-48.5,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["osp_label"] = { + model = "models/metrostroi_train/81-717/labels/label_spb1.mdl", + pos = Vector(374.470795,42.140141,53.182781), + ang = Angle(0.000000,0.000000,0.000000), + hide=1, +} +ENT.ClientProps["body_additional"] = { + model = "models/metrostroi_train/81-717/717_body_additional_spb_013.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["uss_lamps1"] = { + model = "models/metrostroi_train/81-717/lamps_nvl2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=1, +} +ENT.ButtonMap["USS1"] = { + pos = Vector(459.08,-26.07,17.8), + ang = Angle(0,-127,90), + width = 40, + height = 70, + scale = 0.0588, + hideseat = 0.2, + + buttons = { + {ID = "!NMPressureLow", x=20, y=7, radius=8, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",z = -3.8,color = Color(255,50,45), var="NMLow"}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,50,45),z=-1.4,} + }}, + {ID = "!UAVATriggered", x=20, y=34, radius=8, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",z = -3.8,color = Color(255,50,45), var="UAVATriggered"}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,50,45),z=-1.4,} + }}, + } +} +ENT.ClientProps["uss_lamps2"] = { + model = "models/metrostroi_train/81-717/lamps_nvl1.mdl", + pos = Vector(-0.15,0,0.4), + ang = Angle(0,0,0), + hideseat=1, +} +ENT.ClientProps["schemes"] = { + model = "models/metrostroi_train/81-717/labels/schemes.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, + callback = function(ent) + ent.PassSchemesDone = false + end, +} +ENT.ClientProps["sosd_lamp"] = { + model = "models/metrostroi_train/81-717/sosd_lamp.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["brake_valve_334"] = { + model = "models/metrostroi_train/81-717/brake_valves/334.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=1, +} +ENT.ClientProps["brake_valve_013"] = { + model = "models/metrostroi_train/81-717/brake_valves/013.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=1, +} +ENT.ClientProps["lamps"] = { + model = "models/metrostroi_train/81-717/lamps_type1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=1.5, +} +ENT.ClientProps["seats_old"] = { + model = "models/metrostroi_train/81-717/couch_old.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=1.5, +} +ENT.ClientProps["seats_old_cap"] = { + model = "models/metrostroi_train/81-717/couch_cap_l.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, +} +ENT.ClientProps["seats_new"] = { + model = "models/metrostroi_train/81-717/couch_new.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=1.5, + callback = function(ent) + ent.NewBlueSeats = false + end, +} +ENT.ClientProps["seats_new_cap"] = { + model = "models/metrostroi_train/81-717/couch_new_cap.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, + callback = function(ent) + ent.NewBlueSeats = false + end, +} +ENT.ClientProps["handrails_old"] = { + model = "models/metrostroi_train/81-717/handlers_old.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=1.5, +} +ENT.ClientProps["handrails_new"] = { + model = "models/metrostroi_train/81-717/handlers_new.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=1.5, +} +ENT.ClientProps["mask222_lvz"] = { + model = "models/metrostroi_train/81-717/mask_spb_222.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["mask22_1"] = { + model = "models/metrostroi_train/81-717/mask_22.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["mask22_2"] = { + model = "models/metrostroi_train/81-717/mask_22s.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["Headlights222_1"] = { + model = "models/metrostroi_train/81-717/lamps/headlights_222_group1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["Headlights222_2"] = { + model = "models/metrostroi_train/81-717/lamps/headlights_222_group2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["Headlights22_1"] = { + model = "models/metrostroi_train/81-717/lamps/headlights_22_group2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["Headlights22_2"] = { + model = "models/metrostroi_train/81-717/lamps/headlights_22_group1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["RedLights"] = { + model = "models/metrostroi_train/81-717/lamps/redlights.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["door_otsek1"] = { + model = "models/metrostroi_train/81-717/door_otsek1.mdl", + pos = Vector(375.35,-15.324,5.167), + ang = Angle(0,-90,0), + hideseat=1.7, +} +ENT.ClientProps["door_otsek2"] = { + model = "models/metrostroi_train/81-717/door_otsek2.mdl", + pos = Vector(375.35,-59.65,5.167), + ang = Angle(0,-90,0), + hideseat=1.7, +} +ENT.ClientProps["cap_l"] = { + model = "models/metrostroi_train/81-717/couch_cap_r.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, +} +ENT.ClientProps["door1"] = { + model = "models/metrostroi_train/81-717/door_torec_spb.mdl", + pos = Vector(-472.5,15.75,-2.7), + ang = Angle(0,-90,0), + hide=2, +} +ENT.ClientProps["door2"] = { + model = "models/metrostroi_train/81-717/cab_door.mdl", + pos = Vector(377.322,28.267,-1.599), + ang = Angle(0,-90,0), + hide=2, +} +ENT.ClientProps["door3"] = { + model = "models/metrostroi_train/81-717/door_cabine_spb.mdl", + pos = Vector(443.493,65.111,0.277), + ang = Angle(0,-90,0), + hide=2, +} +ENT.ClientProps["cabine_old"] = { + model = "models/metrostroi_train/81-717/cabine_spb_central.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["cabine_new"] = { + model = "models/metrostroi_train/81-717/cabine_kvr.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["Controller_body"] = { + model = "models/metrostroi_train/81-717/pult/body_spb_yellow.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2.5, +} +ENT.ClientProps["Controller_panel_old"] = { + model = "models/metrostroi_train/81-717/pult/pult_spb_yellow.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color=Color(255,255,255), + hideseat=0.8, +} +ENT.ClientProps["Controller_panel_new"] = { + model = "models/metrostroi_train/81-717/pult/pult_spb_new.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color=Color(255,235,230), + hideseat=0.8, +} +ENT.ClientProps["Controller_puav"] = { + model = "models/metrostroi_train/81-717/pult/puav_new.mdl", + pos = Vector(0.2,-0.2,0.1), + ang = Angle(0,0,0), + hideseat=0.8, +} +ENT.ClientProps["Controller_puav1"] = { + model = "models/metrostroi_train/81-717/pult/puav_old.mdl", + pos = Vector(454.172425-6,0.080645,0.967742-5.4), + ang = Angle(0,0,0), + hideseat=0.2, +} +ENT.ClientProps["SPBARS"] = { + model = "models/metrostroi_train/81-717/pult/ars_spb_yellow.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, +} +ENT.ClientProps["Controller"] = { + model = "models/metrostroi_train/81-717/kv_white.mdl", + pos = Vector(435.848,16.1,-19.779+4.75), + ang = Angle(0,-90,-32), + hideseat=0.2, +} + +ENT.ButtonMap["Block5_6_old"] = { + pos = Vector(455.0-6,12.3,2.5-10.5+5.35),--446 -- 14 -- -0,5 + ang = Angle(0,-90,44), + width = 480, + height = 225, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "1:R_UPOToggle",x=43+24*0,y=40,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_w_a.mdl",ang = 180,z=-3, + var="R_UPO",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "1:R_VPRToggle",x=43+24*1,y=40,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_w_a.mdl",ang = 180,z=-3, + var="R_VPR",speed=16, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=90+70,x=-1-20,y=-24+12,z=-1,var="R_VPRPl",ID="R_VPRPl",}, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "1:R_GToggle",x=43+24*2,y=40,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_w_a.mdl",ang = 180,z=-3, + var="R_G",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + + {ID = "1:KVTSet",x=292,y=40,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl",z = -3, + var="KVT",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button1_on" or "button1_off" end, + sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + + {ID = "!OhSigLamp1",x=332,y=40,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",z = -10,color=Color(127,127,127), + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=63,x=-0.3,y=-0.3,z=20.6,var="OhSigLamp",color=Color(255,60,40)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(255,60,40)}, + }}, + {ID = "1:VZ1Set",x=370,y=35--[[ 40--]] ,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + var="VZ1",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button2_on" or "button2_off" end, + sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "!SPLight1",x=408,y=40,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",ignorepanel = true,skin = 1,z = -10,color=Color(127,127,127), + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=63,x=-0.3,y=-0.3,z=20.6,var="LSP",color=Color(100,255,50)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(100,255,50)}, + }}, + + {ID = "1:OhrSigToggle",x=349,y=66,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_w_a.mdl",ang = 180,z=-5, + var="OhrSig",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + + {ID = "1:VUD1Toggle",x=62,y=101,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",z=-5,ang=0, + var="VUD1",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + states={"Train.Buttons.Unlocked","Train.Buttons.Locked"}, + }}, + {ID = "1:KDLSet",x=62,y=173,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/button_717_3.mdl", + var="KDL",speed=16,vmin=1,vmax=0,z=-2, + lamp = {model = "models/metrostroi_train/81-717/buttons/lamp_button_1.mdl",anim=true,var="DoorsLeftL",speed=9,z=2.2,color=Color(255,130,80), + lcolor=Color(255,110,40),lz = 8,lfov=145,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=.485,scale=0.1,z=5,color=Color(255,130,80)}, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "1:KDLKToggle",x=42,y=183,w=40,h=20,tooltip="",model = { + var="KDLK",speed=8,min=0.32,max=0.678,disable="1:KDLSet", + model = "models/metrostroi_train/81/krishka.mdl",ang = 0,z = -2.5, + sndvol = 1,snd = function(val) return val and "kr_close" or "kr_open" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + noTooltip = true, + }}, + {ID = "1:KDLRSet",x=155,y=173,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/button_717_3.mdl", + var="KDLR",speed=16,vmin=1,vmax=0,z=-2, + lamp = {model = "models/metrostroi_train/81-717/buttons/lamp_button_1.mdl",anim=true,var="DoorsLeftL",speed=9,z=2.2,color=Color(255,130,80), + lcolor=Color(255,110,40),lz = 8,lfov=145,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=.485,scale=0.1,z=5,color=Color(255,130,80)}, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "1:KDLRKToggle",x=135,y=183,w=40,h=20,tooltip="",model = { + model = "models/metrostroi_train/81/krishka.mdl",ang = 0,z = -2.5, + var="KDLRK",speed=8,min=0.32,max=0.678,disable="1:KDLRSet", + sndvol = 1,snd = function(val) return val and "kr_close" or "kr_open" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + noTooltip = true, + }}, + {ID = "1:DoorSelectToggle",x=107,y=184,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-8, + var="DoorSelect",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + states={"Train.Buttons.Left","Train.Buttons.Right"} + }}, + {ID = "1:KRZDSet",x=155,y=86,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + var="KRZD",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "1:VozvratRPSet",x=107,y=131,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + var="VozvratRP",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + + {ID = "!GreenRPLight1",x=155,y=134,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",z = -6, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=2,x=-0.3,y=-0.3,z=20.6,var="GRP",color=Color(100,255,100)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(100,255,100)}, + }}, + {ID = "!RZPLight1",x=332,y=98,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",z = -6, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=63,x=-0.3,y=-0.3,z=20.6,var="RZP",color=Color(255,60,40)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(255,60,40)}, + }}, + {ID = "!LKVPLight1",x=377,y=98,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",z = -6, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=25,x=-0.3,y=-0.3,z=20.6,var="LKVP",color=Color(255,170,110)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(255,170,110)}, + }}, + + {ID = "1:ConverterProtectionSet",x=332,y=133,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z=-3, + var="ConverterProtection",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "1:KSNSet",x=377,y=133,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z=-3, + var="KSN",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button2_on" or "button1_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "1:RingSet",x=422,y=133,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z=-3, + var="Ring",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button2_on" or "button2_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + + {ID = "1:ARSToggle",x=234,y=134,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",z=-6,ang=180, + var="ARS",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "1:ALSToggle",x=265,y=134,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=-6, + var="ALS",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "!AVULight1",x=297,y=134,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",skin = 1,z = -10,color=Color(127,127,127), + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=62,x=-0.3,y=-0.3,z=20.6,var="AVU",color=Color(255,60,40)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(255,60,40)}, + }}, + + {ID = "1:OVTToggle",x=240.2,y=181.2,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",z=-8,ang=180, + var="OVT",speed=16, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270,x=-1,y=24,z=2,var="OVTPl",ID="OVTPl",}, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "1:OtklAVUToggle",x=278.2,y=181.2,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",z=-8,ang=180, + var="OtklAVU",speed=16, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270,x=-1,y=24,z=2,var="OtklAVUPl",ID="OtklAVUPl",}, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "1:L_1Toggle",x=316.3,y=181.2,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-8, + var="L_1",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "1:L_2Toggle",x=354,y=181.2,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-8, + var="L_2",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "1:L_3Toggle",x=392,y=181.2,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-8, + var="L_3",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + } +} + +ENT.ButtonMap["Block5_6_old_paksd"] = { + pos = Vector(455.0-6,12.3,2.5-10.5+5.35),--446 -- 14 -- -0,5 + ang = Angle(0,-90,44), + width = 480, + height = 225, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "3:R_VPRToggle",x=40+24*1,y=40,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_w_a.mdl",ang = 180,z=-3, + var="R_VPR",speed=16, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=90+70,x=-1-20,y=-24+12,z=-1,var="R_VPRPl",ID="R_VPRPl",}, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "3:R_GToggle",x=40+24*2,y=40,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_w_a.mdl",ang = 180,z=-3, + var="R_G",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "3:R_UPOToggle",x=47+24*3,y=40,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_w_a.mdl",ang = 180,z=-3, + var="R_UPO",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + + {ID = "3:KVTSet",x=290,y=40,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl",z = -3, + var="KVT",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button1_on" or "button1_off" end, + sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + + {ID = "3:VZ1Set",x=370,y=35--[[ 40--]] ,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + var="VZ1",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button2_on" or "button2_off" end, + sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "!SPLight3",x=408,y=40,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",ignorepanel = true,skin = 1,z = -10,color=Color(127,127,127), + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=63,x=-0.3,y=-0.3,z=20.6,var="LSP",color=Color(100,255,50)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(100,255,50)}, + }}, + + {ID = "!AVULight3",x=352,y=70,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",skin = 1,z = -10,color=Color(127,127,127), + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=62,x=-0.3,y=-0.3,z=20.6,var="AVU",color=Color(255,60,40)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(255,60,40)}, + }}, + + {ID = "3:VUD1Toggle",x=62,y=101,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",z=-5,ang=0, + var="VUD1",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + states={"Train.Buttons.Unlocked","Train.Buttons.Locked"}, + }}, + {ID = "3:KDLSet",x=62,y=173,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/button_717_3.mdl", + var="KDL",speed=16,vmin=1,vmax=0,z=-2, + lamp = {model = "models/metrostroi_train/81-717/buttons/lamp_button_1.mdl",anim=true,var="DoorsLeftL",speed=9,z=2.2,color=Color(255,130,80), + lcolor=Color(255,110,40),lz = 8,lfov=145,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=.485,scale=0.1,z=5,color=Color(255,130,80)}, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "3:KDLKToggle",x=42,y=183,w=40,h=20,tooltip="",model = { + var="KDLK",speed=8,min=0.32,max=0.678,disable="3:KDLSet", + model = "models/metrostroi_train/81/krishka.mdl",ang = 0,z = -2.5, + sndvol = 1,snd = function(val) return val and "kr_close" or "kr_open" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + noTooltip = true, + }}, + {ID = "3:KDLRSet",x=155,y=173,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/button_717_3.mdl", + var="KDLR",speed=16,vmin=1,vmax=0,z=-2, + lamp = {model = "models/metrostroi_train/81-717/buttons/lamp_button_1.mdl",anim=true,var="DoorsLeftL",speed=9,z=2.2,color=Color(255,130,80), + lcolor=Color(255,110,40),lz = 8,lfov=145,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=.485,scale=0.1,z=5,color=Color(255,130,80)}, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "3:KDLRKToggle",x=135,y=183,w=40,h=20,tooltip="",model = { + model = "models/metrostroi_train/81/krishka.mdl",ang = 0,z = -2.5, + var="KDLRK",speed=8,min=0.32,max=0.678,disable="3:KDLRSet", + sndvol = 1,snd = function(val) return val and "kr_close" or "kr_open" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + noTooltip = true, + }}, + {ID = "3:DoorSelectToggle",x=107,y=184,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-8, + var="DoorSelect",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + states={"Train.Buttons.Left","Train.Buttons.Right"} + }}, + {ID = "3:KRZDSet",x=155,y=86,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + var="KRZD",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "3:VozvratRPSet",x=111,y=131,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + var="VozvratRP",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button1_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + + {ID = "!GreenRPLight3",x=155,y=134,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",z = -6, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=2,x=-0.3,y=-0.3,z=20.6,var="GRP",color=Color(100,255,100)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(100,255,100)}, + }}, + {ID = "!RZPLight3",x=332,y=98,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",z = -6, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=63,x=-0.3,y=-0.3,z=20.6,var="RZP",color=Color(255,60,40)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(255,60,40)}, + }}, + {ID = "!LKVPLight3",x=377,y=98,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",z = -6, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=25,x=-0.3,y=-0.3,z=20.6,var="LKVP",color=Color(255,170,110)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(255,170,110)}, + }}, + + {ID = "3:OtklAVUToggle",x=240.2,y=92,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",z=-6.5,ang=180, + var="OtklAVU",speed=16, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270,x=-1,y=24,z=1.5,var="OtklAVUPl",ID="OtklAVUPl",}, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + + {ID = "3:ConverterProtectionSet",x=332,y=133,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z=-3, + var="ConverterProtection",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "3:KSNSet",x=377,y=133,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z=-3, + var="KSN",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button2_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "3:RingSet",x=422,y=133,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z=-3, + var="Ring",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button2_on" or "button2_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + + {ID = "!VPA1",x=265,y=137,radius=0,model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_b_a.mdl",ang = 180,z=-3, + getfunc = function(ent) return ent:GetPackedBool("VPAOn") and 1 or (ent:GetPackedBool("VPAOff") and 0 or 0.5) end, + var="VPA",speed=16, + }}, + {ID = "1:VPAOnSet",x=265-10,y=137-20,w=20,h=20,tooltip="",model = { + var="VPAOn",sndid = "!VPA1", + sndvol = 0.5,snd = function(val) return val and "triple_0-down" or "triple_down-0" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + noTooltip=false,states={"Train.Buttons.0","Train.Buttons.On"} + }}, + {ID = "1:VPAOffSet",x=265-10,y=137,w=20,h=20,tooltip="",model = { + var="VPAOff",sndid = "!VPA1", + sndvol = 0.5,snd = function(val) return val and "triple_0-up" or "triple_up-0" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + noTooltip=false,states={"Train.Buttons.0","Train.Buttons.Off"} + }}, + + {ID = "3:OVTToggle",x=240.2,y=181.2,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",z=-8,ang=180, + var="OVT",speed=16,vmin=1,vmax=0, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=90,x=1,y=-27,z=3,var="OVTPl",ID="OVTPl",}, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "3:L_1Toggle",x=316.3,y=181.2,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-8, + var="L_1",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "3:L_2Toggle",x=354,y=181.2,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-8, + var="L_2",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "3:L_3Toggle",x=392,y=181.2,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-8, + var="L_3",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + } +} +ENT.ButtonMap["Block5_6_kvr"] = { + pos = Vector(455.0-6,12.3,2.5-10.5+5.35),--446 -- 14 -- -0,5 + ang = Angle(0,-90,44), + width = 480, + height = 225, + scale = 0.0625, + hideseat=0.2, + + buttons = { + { ID = "2:R_VPRToggle",x=65+42*0,y=34,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-6, + var="R_VPR",speed=16, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=90+70,x=-1-20,y=-24+11,z=2,var="R_VPRPl",ID="R_VPRPl",}, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + { ID = "2:R_GToggle",x=65+42*1,y=34,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-6, + var="R_G",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + { ID = "2:R_UPOToggle",x=65+42*2,y=34,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-6, + var="R_UPO",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + + { ID = "2:KVTSet",x=238,y=39,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl",z = -3, + var="KVT",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button1_on" or "button1_off" end, + sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "2:VZ1Set",x=359,y=39,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + var="VZ1",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button2_on" or "button2_off" end, + sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "!OhSigLamp2",x=420,y=39,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-717/lamps/ad22_lamp.mdl",ignorepanel = true,color=Color(165,15,25), + lamp = {model = "models/metrostroi_train/81-717/lamps/ad22_emissive.mdl",var="OhSigLamp",color=Color(255,25,40), + lcolor=Color(255,25,40),lz = 12,lfov=152,lbright=1,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.4,size=.5,scale=0.06,z=5,color=Color(255,25,40)}, + }}, + + --{ID = "2:AutodriveToggle",x=420,y=92,radius=20,tooltip=""}, + + {ID = "2:VUD1Toggle",x=65,y=101,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",z=-8,ang=0, + var="VUD1",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + states={"Train.Buttons.Unlocked","Train.Buttons.Locked"}, + }}, + {ID = "2:KDLSet",x=65,y=173,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_metal.mdl", + var="KDL",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "!KDLLight2",x=65,y=130,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-717/lamps/ad22_lamp.mdl",ignorepanel = true,color=Color(185,195,210), + lamp = {model = "models/metrostroi_train/81-717/lamps/ad22_emissive.mdl",var="DoorsLeftL",color=Color(255,255,255), + lcolor=Color(255,255,255),lz = 12,lfov=156,lbright=1,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.3,size=.5,scale=0.06,z=5,color=Color(255,255,255)}, + }}, + {ID = "2:KDLKToggle",x=45,y=183,w=40,h=20,tooltip="",model = { + var="KDLK",speed=8,min=0.32,max=0.68,disable="2:KDLSet", + model = "models/metrostroi_train/81/krishka.mdl",ang = 0,z = -3, + sndvol = 1,snd = function(val) return val and "kr_close" or "kr_open" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + noTooltip = true, + }}, + {ID = "2:KDLRSet",x=155,y=173,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_metal.mdl", + var="KDLR",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "!KDLRLight2",x=155,y=130,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-717/lamps/ad22_lamp.mdl",ignorepanel = true,color=Color(185,195,210), + lamp = {model = "models/metrostroi_train/81-717/lamps/ad22_emissive.mdl",var="DoorsLeftL",color=Color(255,255,255), + lcolor=Color(255,255,255),lz = 12,lfov=156,lbright=1,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.4,size=.5,scale=0.06,z=5,color=Color(255,255,255)}, + }}, + {ID = "2:KDLRKToggle",x=135,y=183,w=40,h=20,tooltip="",model = { + model = "models/metrostroi_train/81/krishka.mdl",ang = 0,z = -3, + var="KDLRK",speed=8,min=0.32,max=0.68,disable="2:KDLRSet", + sndvol = 1,snd = function(val) return val and "kr_close" or "kr_open" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + noTooltip = true, + }}, + {ID = "2:DoorSelectToggle",x=107,y=184,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-8, + var="DoorSelect",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + states={"Train.Buttons.Left","Train.Buttons.Right"} + }}, + {ID = "2:KRZDSet",x=153,y=85,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + var="KRZD",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "2:VozvratRPSet",x=107,y=134,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + var="VozvratRP",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button1_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "!GreenRPLight2",x=107,y=95,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-717/lamps/ad22_lamp.mdl",ignorepanel = true,color=Color(30,160,100), + lamp = {model = "models/metrostroi_train/81-717/lamps/ad22_emissive.mdl",var="GRP",color=Color(50,255,160), + lcolor=Color(50,255,160),lz = 12,lfov=154,lbright=1,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.4,size=.5,scale=0.06,z=5,color=Color(50,255,160)}, + }}, + + {ID = "!RZPLight2",x=309,y=81,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-717/lamps/ad22_lamp.mdl",ignorepanel = true,color=Color(165,15,25), + lamp = {model = "models/metrostroi_train/81-717/lamps/ad22_emissive.mdl",var="RZP",color=Color(255,25,40), + lcolor=Color(255,25,40),lz = 12,lfov=152,lbright=1,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.4,size=.5,scale=0.06,z=5,color=Color(255,25,40)}, + }}, + {ID = "!LKVPLight2",x=348,y=81,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-717/lamps/ad22_lamp.mdl",ignorepanel = true,color=Color(5,125,185), + lamp = {model = "models/metrostroi_train/81-717/lamps/ad22_emissive.mdl",var="LKVP",color=Color(15,180,255), + lcolor=Color(15,180,255),lz = 12,lfov=158,lbright=1,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.4,size=.5,scale=0.06,z=5,color=Color(15,180,255)}, + }}, + {ID = "2:OhrSigToggle",x=420,y=81,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_w_a.mdl",ang = 180,z=-3, + var="OhrSig",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + + {ID = "2:ConverterProtectionSet",x=316,y=133,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z=-3, + var="ConverterProtection",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "2:KSNSet",x=369,y=133,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z=-3, + var="KSN",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button2_on" or "button1_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "2:RingSet",x=422,y=133,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z=-3, + var="Ring",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button2_on" or "button2_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + + {ID = "2:ARSToggle",x=238,y=136,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=-6, + var="ARS",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "2:ALSToggle",x=265,y=136,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=-6, + var="ALS",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "!VPA2",x=252,y=136,radius=0,model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_b_a.mdl",ang = 180,z=-3, + getfunc = function(ent) return ent:GetPackedBool("VPAOn") and 1 or (ent:GetPackedBool("VPAOff") and 0 or 0.5) end, + var="VPA",speed=16, + labels={{model="models/metrostroi_train/81-717/labels/label_717_plane_small.mdl",skin=1,ang=Angle(-90,90,0),z=0,x=0,y=-19,scale=2.5}} + }}, + {ID = "2:VPAOnSet",x=252-10,y=136-20,w=20,h=20,tooltip="",model = { + var="VPAOn",sndid = "!VPA2", + sndvol = 0.5,snd = function(val) return val and "triple_0-down" or "triple_down-0" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + noTooltip=false,states={"Train.Buttons.0","Train.Buttons.On"} + }}, + {ID = "2:VPAOffSet",x=252-10,y=136,w=20,h=20,tooltip="",model = { + var="VPAOff",sndid = "!VPA2", + sndvol = 0.5,snd = function(val) return val and "triple_0-up" or "triple_up-0" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + noTooltip=false,states={"Train.Buttons.0","Train.Buttons.Off"} + }}, + + {ID = "2:OVTToggle",x=240,y=181,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",z=-8,ang=180, + var="OVT",speed=16, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270,x=-1,y=24,z=2,var="OVTPl",ID="OVTPl",}, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "2:OtklAVUToggle",x=279,y=181,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",z=-8,ang=180, + var="OtklAVU",speed=16, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270,x=-1,y=24,z=2,var="OtklAVUPl",ID="OtklAVUPl",}, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "!AVULight2",x=316,y=181,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-717/lamps/ad22_lamp.mdl",ignorepanel = true,color=Color(165,15,25), + lamp = {model = "models/metrostroi_train/81-717/lamps/ad22_emissive.mdl",var="AVU",color=Color(255,25,40), + lcolor=Color(255,25,40),lz = 12,lfov=152,lbright=1,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.4,size=.5,scale=0.06,z=5,color=Color(255,25,40)}, + }}, + {ID = "2:L_1Toggle",x=354,y=181,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",z=-8,ang=180, + var="L_1",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "2:L_2Toggle",x=392,y=181,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",z=-8,ang=180, + var="L_2",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "2:L_3Toggle",x=430,y=181,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",z=-8,ang=180, + var="L_3",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + } +} + +-- Front panel +ENT.ButtonMap["Block7_old"] = { + pos = Vector(446.22,-17.6,-5.48+5.35), + ang = Angle(0,-90,58), + width = 195, + height = 240, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "1:L_4Toggle",x=43,y=181,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-4, + var="L_4",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "1:VUSToggle",x=76,y=181,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-4, + var="VUS",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "1:VADToggle",x=109,y=181,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-4, + var="VAD",speed=16, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270,x=-1,y=28,z=4,var="VADPl",ID="VADPl",}, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "1:VAHToggle",x=142,y=181,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-4, + var="VAH",speed=16, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270,x=-1,y=28,z=4,var="VAHPl",ID="VAHPl",}, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + + {ID = "1:KRPSet",x=43,y=30,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", + var="KRP",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button1_on" or "button1_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "1:RezMKSet",x=43,y=83,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", + var="RezMK",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + + {ID = "1:KDPSet",x=101,y=127,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/button_717_3.mdl", + lamp = {model = "models/metrostroi_train/81-717/buttons/lamp_button_1.mdl",anim=true,var="DoorsRightL",speed=9,z=2.2,color=Color(255,130,80), + lcolor=Color(255,110,40),lz = 8,lfov=145,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=.485,scale=0.1,z=5,color=Color(255,130,80)}, + var="KDP",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "1:KDPKToggle",x=81,y=137,w=40,h=20,tooltip="",model = { + model = "models/metrostroi_train/81/krishka.mdl",ang = 0,z = -1, + var="KDPK",speed=8,min=0.33,max=0.68,disable="1:KDPSet", + getfunc = function(ent) return ent:GetPackedBool("KDPK") and 1 or math.max(0,(ent.Anims["1:VADToggle"].val-0.5)*2 or 0)*0.16 end, + sndvol = 1,snd = function(val,realval) return val and "kr_close" or "kr_open" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + noTooltip = true, + }}, + + {ID = "!1:PNT",x=135,y=130,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",skin = 4,z = -1, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=81,x=-0.3,y=-0.3,z=20.6,var="PN",color=Color(255,130,90)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(255,130,90)}, + }}, + } +} +ENT.ButtonMap["Block7_kvr"] = { + pos = Vector(446.22,-17.6,-5.48+5.35), + ang = Angle(0,-90,58), + width = 195, + height = 240, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "2:L_4Toggle",x=43,y=181,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-4, + var="L_4",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "2:VUSToggle",x=76,y=181,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-4, + var="VUS",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "2:VADToggle",x=109,y=181,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-4, + var="VAD",speed=16, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270,x=-1,y=28,z=4,var="VADPl",ID="VADPl",}, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "2:VAHToggle",x=142,y=181,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-4, + var="VAH",speed=16, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270,x=-1,y=28,z=4,var="VAHPl",ID="VAHPl",}, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + + {ID = "2:KRPSet",x=43,y=30,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", + var="KRP",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button1_on" or "button1_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "2:RezMKSet",x=43,y=83,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", + var="RezMK",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + + {ID = "!KDPLight2",x=65,y=127,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-717/lamps/ad22_lamp.mdl",ignorepanel = true,color=Color(185,195,210),z=5, + lamp = {model = "models/metrostroi_train/81-717/lamps/ad22_emissive.mdl",var="DoorsRightL",color=Color(255,255,255), + lcolor=Color(255,255,255),lz = 12,lfov=155,lbright=1,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.4,size=.5,scale=0.06,z=5,color=Color(255,255,255)}, + }}, + {ID = "2:KDPSet",x=101,y=127,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", + var="KDP",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "2:KDPKToggle",x=81,y=137,w=40,h=20,tooltip="",model = { + model = "models/metrostroi_train/81/krishka.mdl",ang = 0,z = -1, + var="KDPK",speed=8,min=0.33,max=0.685,disable="2:KDPSet", + getfunc = function(ent) return ent:GetPackedBool("KDPK") and 1 or math.max(0,(ent.Anims["2:VADToggle"].val-0.5)*2 or 0)*0.24 end, + sndvol = 1,snd = function(val,realval) return val and "kr_close" or "kr_open" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + noTooltip = true, + }}, + + {ID = "!2:PNT",x=137,y=127,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-717/lamps/ad22_lamp.mdl",ignorepanel = true,color=Color(165,125,45),z=5, + lamp = {model = "models/metrostroi_train/81-717/lamps/ad22_emissive.mdl",var="PN",color=Color(255,195,70), + lcolor=Color(255,195,70),lz = 12,lfov=160,lbright=1,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.4,size=.5,scale=0.06,z=5,color=Color(255,195,70)}, + }}, + } +} + +-- BPSN panel +ENT.ButtonMap["Block1"] = { + pos = Vector(450.4,28.2,1.3+5.35), + ang = Angle(0,-90,58), + width = 290, + height = 120, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "!BatteryVoltage",x=220,y=60,tooltip="",radius=60,tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BatteryVoltage"),ent:GetPackedRatio("BatteryVoltage")*150) end}, + {ID = "VMKToggle",x=38,y=30,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-5, + var="VMK",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end,sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "BPSNonToggle",x=79,y=30,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-5, + var="BPSNon",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + + {ID = "Radio13Set",x=79,y=80,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", + var="Radio13",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button2_on" or "button1_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "ARS13Set",x=128,y=80,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", + var="ARS13",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button2_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + } +} + + +ENT.ButtonMap["Block3"] = { + pos = Vector(450.4,-10,1.3+5.35), + ang = Angle(0,-90,58), + width = 290, + height = 110, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "!BLTLPressure", x=62, y=55, radius=55, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BLTLPressure"),ent:GetPackedRatio("TLPressure")*16,ent:GetPackedRatio("BLPressure")*16) end}, + {ID = "!BCPressure", x=182, y=55, radius=55, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BCPressure"),ent:GetPackedRatio("BCPressure")*6) end}, + {ID = "!NMPressureLow2", x=134.5, y=90, radius=8, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",z = -3.2,color = Color(255,50,45), var="NMLow", hidden = "!NMPressureLow2"}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,50,45),z=-0.6,} + }}, + {ID = "!UAVATriggered2", x=255.5, y=92.1, radius=8, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",z = -3.2,color = Color(255,50,45), var="UAVATriggered", hidden = "!UAVATriggered2"}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,50,45),z=-0.6,} + }}, + } +} +-- Front panel +ENT.ButtonMap["PUAVO"] = { + pos = Vector(446.4,27.9,0), + ang = Angle(0,-90,58), + width = 260, + height = 240, + scale = 0.0625, + hideseat=0.2, + + + buttons = { + {ID = "!OK16",x=32,y=66+43*0,radius=10,tooltip="",model = { + name="PUOKI",model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",z = -8, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=63,x=-0.3,y=-0.3,z=20.6,var="PUK16",color=Color(255,170,110)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(255,170,110)}, + }}, + {ID = "!OLRS",x=32,y=66+43*0.95,radius=10,tooltip="",model = { + name="PUOLRS",model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",z = -8, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=63,x=-0.3,y=-0.3,z=20.6,var="PULRS",color=Color(100,255,100)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(100,255,100)}, + }}, + {ID = "!OKI1",x=32,y=66+43*2,radius=10,tooltip="",model = { + name="PUOKI1",model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",z = -8, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=63,x=-0.3,y=-0.3,z=20.6,var="PUKI1",color=Color(255,60,40)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(255,60,40)}, + }}, + {ID = "!OKI2",x=32,y=66+43*3,radius=10,tooltip="",model = { + name="PUOKI2",model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",z = -8, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=63,x=-0.3,y=-0.3,z=20.6,var="PUKI2",color=Color(255,60,40)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(255,60,40)}, + }}, + {ID = "!OOS",x=79,y=66+43*0.95,radius=10,tooltip="",model = { + name="PUOOS",model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",z = -8, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=63,x=-0.3,y=-0.3,z=20.6,var="PUOS",color=Color(255,130,90)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(255,130,90)}, + }}, + {ID = "1:KHSet",x=79,y=66+43*2.2,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -2, + var="KH",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button2_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "1:KSZDSet",x=79,y=66+43*3.2,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl",z = -2, + var="KSZD",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button2_on" or "button1_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "!OAVT",x=130,y=66+43*0.95,radius=10,tooltip="",model = { + name="PUOAVT",model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",z = -8, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=63,x=-0.3,y=-0.3,z=20.6,var="PUAVT",color=Color(100,255,100)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(100,255,100)}, + }}, + {ID = "1:VAVToggle",x=130,y=66+43*2.2,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_w_a.mdl",ang = 180,z=0, + var="VAV",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + }}, + {ID = "1:VZPToggle",x=130,y=66+43*3.2,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_w_a.mdl",ang = 180,z=0, + var="VZP",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + }}, + } +} +ENT.ButtonMap["PUAVOScreen"] = { + pos = ENT.ButtonMap.PUAVO.pos-Vector(2.2,4.8,0.5), + ang = Angle(0,-90,57.0), + width = 512, + height = 128, + scale = 0.011, + hideseat=0.2, + hide=true, +} +-- Front panel +ENT.ButtonMap["PUAVN"] = { + pos = Vector(446.4,27.7,0.15), + ang = Angle(0,-90,58), + width = 260, + height = 240, + scale = 0.056, + hideseat=0.2, + + buttons = { + {ID = "!K16",x=47.5,y=21.5,w=10,h=10,tooltip="",model = { + name="PUKI",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_ya.mdl",z=-6,var="PUK16"}, + sprite = {bright=0.1,size=0.25,scale=0.02,color=Color(255,240,40),z=-3,aa=false} + }}, + {ID = "!OS",x=47.5,y=21.5+14.1*1,w=10,h=10,tooltip="",model = { + name="PUOS",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_ya.mdl",z=-6,var="PUOS"}, + sprite = {bright=0.1,size=0.25,scale=0.02,color=Color(255,240,40),z=-3,aa=false} + }}, + {ID = "!AVT",x=47.5,y=21.5+14.1*2,w=10,h=10,tooltip="",model = { + name="PUAVT",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_ya.mdl",z=-6,color=Color(175,250,20),var="PUAVT"}, + sprite = {bright=0.1,size=0.25,scale=0.02,color=Color(175,250,20),z=-3,aa=false} + }}, + {ID = "!LRS",x=47.5,y=21.5+14.1*3,w=10,h=10,tooltip="",model = { + name="PULRS",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_ya.mdl",z=-6,color=Color(175,250,20),var="PULRS"}, + sprite = {bright=0.1,size=0.25,scale=0.02,color=Color(175,250,20),z=-3,aa=false} + }}, + {ID = "!KI1",x=47.5,y=21.5+14.1*4,w=10,h=10,tooltip="",model = { + name="PUKI1",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_ra.mdl",z=-6,var="PUKI1"}, + sprite = {bright=0.1,size=0.25,scale=0.02,color=Color(255,20,40),z=-3,aa=false} + }}, + {ID = "!KI2",x=47.5,y=21.5+14.1*5,w=10,h=10,tooltip="",model = { + name="PUKI2",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_ra.mdl",z=-6,var="PUKI2"}, + sprite = {bright=0.1,size=0.25,scale=0.02,color=Color(255,20,40),z=-3,aa=false} + }}, + {ID = "!ARSOch",x=219,y=21.5,w=10,h=10,tooltip="",model = { + name="PUOCh",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_ra.mdl",z=-6,var="PU04"}, + sprite = {bright=0.1,size=0.25,scale=0.02,color=Color(255,20,40),z=-3,aa=false} + }}, + {ID = "!ARS0",x=219,y=21.5+13.5*1,w=10,h=10,tooltip="",model = { + name="PU0",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_ra.mdl",z=-6,var="PU0"}, + sprite = {bright=0.1,size=0.25,scale=0.02,color=Color(255,20,40),z=-3,aa=false} + }}, + {ID = "!ARS40",x=219,y=21.5+13.5*2,w=10,h=10,tooltip="",model = { + name="PU40",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_ya.mdl",z=-6,var="PU40"}, + sprite = {bright=0.1,size=0.25,scale=0.02,color=Color(255,240,40),z=-3,aa=false} + }}, + {ID = "!ARS60",x=219,y=21.5+13.5*3,w=10,h=10,tooltip="",model = { + name="PU60",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_ya.mdl",z=-6,color=Color(175,250,20),var="PU60"}, + sprite = {bright=0.1,size=0.25,scale=0.02,color=Color(175,250,20),z=-3,aa=false} + }}, + {ID = "!ARS70",x=219,y=21.5+13.5*4,w=10,h=10,tooltip="",model = { + name="PU70",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_ya.mdl",z=-6,color=Color(175,250,20),var="PU70"}, + sprite = {bright=0.1,size=0.25,scale=0.02,color=Color(175,250,20),z=-3,aa=false} + }}, + {ID = "!ARS80",x=219,y=21.5+13.5*5,w=10,h=10,tooltip="",model = { + name="PU80",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_ya.mdl",z=-6,color=Color(175,250,20),var="PU80"}, + sprite = {bright=0.1,size=0.25,scale=0.02,color=Color(175,250,20),z=-3,aa=false} + }}, + {ID = "KHSet",x=109,y=132,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -2, + var="KH",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button1_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "KSZDSet",x=167,y=132,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -2, + var="KSZD",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button1_on" or "button2_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + + {ID = "VAVToggle",x=90,y=183,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_b_a.mdl",ang = 180,z=1, + var="VAV",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + labels={{model="models/metrostroi_train/81-717/labels/label_717_plane.mdl",skin=18,ang=Angle(-90,90,0),z=0,x=47.5,y=20,scale=1.5}} + }}, + {ID = "VZPToggle",x=185,y=183,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_b_a.mdl",ang = 180,z=1, + var="VZP",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + }}, + } +} +ENT.ButtonMap["PUAVNScreen"] = { + pos = ENT.ButtonMap.PUAVN.pos-Vector(1.9,4.94,0.65), + ang = Angle(0,-90,58.0), + width = 512, + height = 128, + scale = 0.0115, + hideseat=0.2, + hide=true, +} +ENT.ButtonMap["PUAVNLights"] = { + pos = ENT.ButtonMap.PUAVN.pos-Vector(3.27,4.9,2.3), + ang = Angle(0,-90,58.0), + width = 13, + height = 24, + scale = 0.056, + hideseat=0.2, + buttons = { + {ID = "!PU",x=6 ,y=4+12.3,w=3,h=3,model = { + name="BURPower",lamp = {speed=24,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",color=Color(175,250,20),z=-5.5,var="BURPower"}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(175,250,20),z=-1,} + }}, + } +} + +local strength = { + [0] = 0.86, + [1] = 0.29, + [2] = 0.71, + [3] = 0.71, + [4] = 0.57, + [5] = 0.71, + [6] = 0.86, + [7] = 0.43, + [8] = 1.00, + [9] = 0.86, +} +ENT.ButtonMap["Block2"] = { + pos = Vector(450.4+0.35,10.0,1.3+5.35), + ang = Angle(0,-90,58), + width = 300, + height = 110, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "!Speedometer1",x=137,y=29,w=17,h=25,tooltip="",model = { + name="SSpeed2",model = "models/metrostroi_train/81-717/segments/segment_spb.mdl",color=Color(175,250,20),skin=0,z=0.1,ang=Angle(0,0,-90), + tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.Speed"),ent:GetNW2Int("ALSSpeed")) end, + sprite = {bright=0.1,size=.5,scale=0.055,vscale=0.065,z=1,color=Color(225,250,20),aa=true,getfunc= function(ent) + if not ent:GetPackedBool("LUDS") then return 0 end + return strength[math.floor(ent:GetNW2Int("ALSSpeed")*0.1)%10] + end}, + }}, + {ID = "!Speedometer2",x=158,y=29,w=17,h=25,tooltip="",model = { + name="SSpeed1",model = "models/metrostroi_train/81-717/segments/segment_spb.mdl",color=Color(175,250,20),skin=0,z=0.1,ang=Angle(0,0,-90), + tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.Speed"),ent:GetNW2Int("ALSSpeed")) end, + sprite = {bright=0.1,size=.5,scale=0.055,vscale=0.065,z=1,color=Color(225,250,20),aa=true,getfunc= function(ent) + if not ent:GetPackedBool("LUDS") then return 0 end + return strength[math.floor(ent:GetNW2Int("ALSSpeed"))%10] + end}, + }}, + + {ID = "!ARSOch",x=100,y=33,w=10,h=10,tooltip="",model = { + name="SAOCh",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_ra.mdl",z=-0.2,var="AR04"}, + sprite = {bright=0.1,size=0.25,scale=0.03,color=Color(255,20,40),z=-1,aa=true} + }}, + {ID = "!ARS0",x=89,y=33+10.9*0,w=10,h=10,tooltip="",model = { + name="SA0",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_ra.mdl",z=-0.2,var="AR0"}, + sprite = {bright=0.1,size=0.25,scale=0.03,color=Color(255,20,40),z=-1,aa=true} + }}, + {ID = "!ARS40",x=89,y=33+10.9*1,w=10,h=10,tooltip="",model = { + name="SA40",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_ya.mdl",z=-0.2,var="AR40"}, + sprite = {bright=0.1,size=0.25,scale=0.03,color=Color(255,240,40),z=-1,aa=true} + }}, + {ID = "!ARS60",x=89,y=33+10.9*2,w=10,h=10,tooltip="",model = { + name="SA60",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_ya.mdl",z=-0.2,color=Color(175,250,20),var="AR60"}, + sprite = {bright=0.1,size=0.25,scale=0.03,color=Color(175,250,20),z=-1,aa=true} + }}, + {ID = "!ARS70",x=89,y=33+10.9*3,w=10,h=10,tooltip="",model = { + name="SA70",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_ya.mdl",z=-0.2,color=Color(175,250,20),var="AR70"}, + sprite = {bright=0.1,size=0.25,scale=0.03,color=Color(175,250,20),z=-1,aa=true} + }}, + {ID = "!ARS80",x=89,y=33+10.9*4,w=10,h=10,tooltip="",model = { + name="SA80",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_ya.mdl",z=-0.2,color=Color(175,250,20),var="AR80"}, + sprite = {bright=0.1,size=0.25,scale=0.03,color=Color(175,250,20),z=-1,aa=true} + }}, + + {ID = "!LampLSD1",x=191.0,y=34.2,w=10,h=4,tooltip="",model = { + name="SSD1",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_yb.mdl",z=-0.2,color=Color(175,250,20),var="SD"}, + sprite = {bright=0.05,size=0.25,scale=0.03,color=Color(175,250,20),z=-1,aa=true} + }}, + {ID = "!LampLSD2",x=201.2,y=34.2,w=10,h=4,tooltip="",model = { + name="SSD2",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_yb.mdl",z=-0.2,ang=90,color=Color(175,250,20),var="SD"}, + sprite = {bright=0.05,size=0.25,scale=0.03,color=Color(175,250,20),z=-1,aa=true} + }}, + + {ID = "!LampLVD",x=191.3,y=43.8+8.8*0,w=10,h=4,tooltip="",model = { + name="SVD",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_yb.mdl",var="A04",z=-0.2,color=Color(175,250,20),var="VD"}, + sprite = {bright=0.05,size=0.25,scale=0.04,vscale=0.02, color=Color(175,250,20),z=-1,aa=true} + }}, + {ID = "!LampLHRK",x=191.3,y=43.8+8.8*1,w=10,h=4,tooltip="",model = { + name="SRK",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_yb.mdl",z=-0.2,var="HRK"}, + sprite = {bright=0.05,size=0.25,scale=0.04,vscale=0.02, color=Color(255,240,40),z=-1,aa=true} + }}, + {ID = "!LampLST",x=191.3,y=43.8+8.8*2,w=10,h=4,tooltip="",model = { + name="SST",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_yb.mdl",z=-0.2,var="ST"}, + sprite = {bright=0.05,size=0.25,scale=0.04,vscale=0.02, color=Color(255,240,40),z=-1,aa=true} + }}, + {ID = "!LampLRD",x=191.3,y=43.8+8.8*3,w=10,h=4,tooltip="",model = { + name="SRD",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_yb.mdl",z=-0.2,color=Color(175,250,20),var="LRD"}, + sprite = {bright=0.05,size=0.25,scale=0.04,vscale=0.02, color=Color(175,250,20),z=-1,aa=true} + }}, + + + {ID = "!LampRP",x=209.8,y=43.9+8.8*0,w=10,h=4,tooltip="",model = { + name="SRP",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_rb.mdl",z=-0.2,var="RP",getfunc = function(ent) return math.Clamp((ent:GetPackedRatio("RPR")-0.42)*7,0,1) end}, + sprite = {bright=0.05,size=0.25,scale=0.04,vscale=0.02, color=Color(255,20,40),z=-1,aa=true} + }}, + {ID = "!LampLSN",x=219.8,y=43.9+8.8*0,w=10,h=4,tooltip="",model = { + name="SSN",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_rb.mdl",z=-0.2,ang=-90,var="SN",getfunc = function(ent) return ent:GetPackedRatio("RPR")^0.9*1.1 end}, + sprite = {bright=0.05,size=0.25,scale=0.04,vscale=0.02, color=Color(255,20,40),z=-1,aa=true} + }}, + + --{x=2031 + 2*0,y=223 + 192*0,w=10,h=10,tooltip="",radius=10}, + {ID = "!LampLKVD",x=219,y=43.8+8.8*1,w=10,h=4,tooltip="",model = { + name="SKVD",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_yb.mdl",z=-0.2,var="KVD"}, + sprite = {bright=0.05,size=0.25,scale=0.04,vscale=0.02, color=Color(255,180,40),z=-1,aa=true} + }}, + {ID = "!LampLKT",x=219,y=43.8+8.8*2,w=10,h=4,tooltip="",model = { + name="SKT",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_yb.mdl",z=-0.2,var="KT"}, + sprite = {bright=0.05,size=0.25,scale=0.04,vscale=0.02, color=Color(255,180,40),z=-1,aa=true} + }}, + {ID = "!LampDV",x=219,y=43.8+8.8*3,w=10,h=4,tooltip="",model = { + name="SDV",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_yb.mdl",z=-0.2,color=Color(175,250,20),var="DV"}, + sprite = {bright=0.05,size=0.25,scale=0.03,color=Color(255,20,40),z=-1,aa=true} + }}, + + {ID = "!SpeedFact1",x=133.1,y=73.6,w=23.7,h=8,tooltip="",model = { + name="SpeedFact1",model = "models/metrostroi_train/81-717/lamps/indicators.mdl",z=0.15,color=Color(175,250,20),skin=10,ang=90, + tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.Speed"),ent:GetPackedRatio("Speed")*100) end + }}, + {ID = "!SpeedFact2",x=133.1+23.7,y=73.6,w=23.7,h=8,tooltip="",model = { + name="SpeedFact2",model = "models/metrostroi_train/81-717/lamps/indicators.mdl",z=0.15,color=Color(175,250,20),skin=10,ang=90, + tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.Speed"),ent:GetPackedRatio("Speed")*100) end + }}, + + {ID = "!ARSL20",x=140,y=83,w=5,h=10,tooltip="",model = { + name="SAL20",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/triangle_red.mdl",z=-0.3,var="AR20"}, + sprite = {bright=0.05,size=0.25,scale=0.02,color=Color(255,20,40),z=-1,aa=true} + }}, + {ID = "!ARSL40",x=140+4.3*2,y=83,w=5,h=10,tooltip="",model = { + name="SAL40",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/triangle_yellow.mdl",z=-0.3,var="AR40"}, + sprite = {bright=0.05,size=0.25,scale=0.02,color=Color(255,240,40),z=-1,aa=true} + }}, + {ID = "!ARSL60",x=140+4.3*(3+1.1),y=83,w=5,h=10,tooltip="",model = { + name="SAL60",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/triangle_yellow.mdl",color=Color(175,250,20),z=-0.3,var="AR60"}, + sprite = {bright=0.05,size=0.25,scale=0.02,color=Color(175,250,20),z=-1,aa=true} + }}, + {ID = "!ARSL70",x=140+4.3*(4+1.2),y=83,w=5,h=10,tooltip="",model = { + name="SAL70",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/triangle_yellow.mdl",color=Color(175,250,20),z=-0.3,var="AR70"}, + sprite = {bright=0.05,size=0.25,scale=0.02,color=Color(175,250,20),z=-1,aa=true} + }}, + {ID = "!ARSL80",x=140+4.3*(5+1.3),y=83,w=5,h=10,tooltip="",model = { + name="SAL80",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/triangle_yellow.mdl",color=Color(175,250,20),z=-0.3,var="AR80"}, + sprite = {bright=0.05,size=0.25,scale=0.02,color=Color(175,250,20),z=-1,aa=true} + }}, + --[[ + {ID = "!LampLN",x=217-0.5*0 ,y=34.6 + 20.7*1,w=10,h=10,tooltip="",model = { + name="SHLN",lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl",color=Color(175,250,20),z=0,var="LN"}, + }}, + {ID = "!LampLRS",x=271.5-1*1,y=34.6 + 20.5*1,w=10,h=10,tooltip="",model = { + name="SHRS",lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl",color=Color(175,250,20),z=0,var="RS"}, + }},]] + } +} +ENT.ClientProps["pam"] = { + model = "models/metrostroi_train/81-717/81-717_pampanel.mdl", + pos = Vector(-0.2,0,0),--Vector(454.172425-6,0.080645,0.967742-5.4), + ang = Angle(0,0,0), + hideseat=0.8, +} +ENT.ButtonMap["PAM"] = { + --pos = Vector(455.22,-34.35,24.15-13), + pos = Vector(445.3-4.7-0.2,27.1,-9.3), + ang = Angle(0,-90,58), + --pos = ENT.ClientProps["pam"].pos+Vector(0.72,4.65,-9.85), + --ang = ENT.ClientProps["pam"].ang, + width = 265, + height = 20, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "2:KSZDSet",x=163,y=10,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -2, + var="KSZD",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button2_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + + {ID = "2:VZPToggle",x=190,y=10,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_b_a.mdl",ang = 180,z=0, + var="VZP",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + }}, + } +} +ENT.ButtonMap["PAM1"] = { + --pos = Vector(455.22-6,-34.35-8.5,24.15), + pos = Vector(445.3-0.2,27.1,-2), + ang = Angle(0,-90,58), + width = 40, + height = 135, + scale = 0.0625, + hideseat=0.2, + + buttons = { + + {ID = "PAMPSet",x=6.9+13.45*2,y=23,radius=8,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons_pam/pam_p.mdl",ang = 0,z=0, + lamp = {speed=12,model = "models/metrostroi_train/81-717/buttons_pam/pamlamp_p.mdl",z=-0.2,anim=true,var="PAPower" }, + var="PAMP",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + }}, + + {ID = "PAMFSet",x=6.9+13.45*0,y=49+13*0,radius=8,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons_pam/pam_f.mdl",ang = 0,z=0, + lamp = {speed=12,model = "models/metrostroi_train/81-717/buttons_pam/pamlamp_f.mdl",z=-0.2,anim=true,var="PAPower" }, + var="PAMF",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + }}, + {ID = "PAMUpSet",x=6.9+13.45*1,y=49+13*0,radius=8,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons_pam/pam_up.mdl",ang = 0,z=0, + lamp = {speed=12,model = "models/metrostroi_train/81-717/buttons_pam/pamlamp_up.mdl",z=-0.2,anim=true,var="PAPower" }, + var="PAMUp",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + }}, + {ID = "PAMMSet",x=6.9+13.45*2,y=49+13*0,radius=8,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons_pam/pam_m.mdl",ang = 0,z=0, + lamp = {speed=12,model = "models/metrostroi_train/81-717/buttons_pam/pamlamp_m.mdl",z=-0.2,anim=true,var="PAPower" }, + var="PAMM",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + }}, + --[=[ {ID = "PAMLeftSet",x=6.9+13.45*0,y=49+13*1,radius=8,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons_pam/pam_left.mdl",ang = 0,z=0, + lamp = {speed=12,model = "models/metrostroi_train/81-717/buttons_pam/pamlamp_left.mdl",z=-0.2,anim=true,var="PAPower" }, + var="PAMLeft",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + }},--]=] + {ID = "PAMLeftSet",x=6.9+13.45*0,y=49+13*1,radius=8,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons_pam/pam_left.mdl",ang = 0,z=2.65, + lamp = {speed=12,model = "models/metrostroi_train/81-717/buttons_pam/pamlamp_left.mdl",z=-0.2-2.65,anim=true,var="PAPower" }, + var="PAMLeft",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + }}, + {ID = "PAMDownSet",x=6.9+13.45*1,y=49+13*1,radius=8,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons_pam/pam_down.mdl",ang = 0,z=0, + lamp = {speed=12,model = "models/metrostroi_train/81-717/buttons_pam/pamlamp_down.mdl",z=-0.2,anim=true,var="PAPower" }, + var="PAMDown",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + }}, + {ID = "PAMRightSet",x=6.9+13.45*2,y=49+13*1,radius=8,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons_pam/pam_right.mdl",ang = 0,z=0, + lamp = {speed=12,model = "models/metrostroi_train/81-717/buttons_pam/pamlamp_right.mdl",z=-0.2,anim=true,var="PAPower" }, + var="PAMRight",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + }}, + + + {ID = "PAM1Set",x=6.9+13.45*0,y=86+12.9*0,radius=8,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons_pam/pam_1.mdl",ang = 0,z=0, + lamp = {speed=12,model = "models/metrostroi_train/81-717/buttons_pam/pamlamp_1.mdl",z=-0.2,anim=true,var="PAPower" }, + var="PAM1",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + }}, + {ID = "PAM2Set",x=6.9+13.45*1,y=86+12.9*0,radius=8,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons_pam/pam_2.mdl",ang = 0,z=0, + lamp = {speed=12,model = "models/metrostroi_train/81-717/buttons_pam/pamlamp_2.mdl",z=-0.2,anim=true,var="PAPower" }, + var="PAM2",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + }}, + {ID = "PAM3Set",x=6.9+13.45*2,y=86+12.9*0,radius=8,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons_pam/pam_3.mdl",ang = 0,z=0, + lamp = {speed=12,model = "models/metrostroi_train/81-717/buttons_pam/pamlamp_3.mdl",z=-0.2,anim=true,var="PAPower" }, + var="PAM3",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + }}, + {ID = "PAM4Set",x=6.9+13.45*0,y=86+12.9*1,radius=8,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons_pam/pam_4.mdl",ang = 0,z=0, + lamp = {speed=12,model = "models/metrostroi_train/81-717/buttons_pam/pamlamp_4.mdl",z=-0.2,anim=true,var="PAPower" }, + var="PAM4",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + }}, + {ID = "PAM5Set",x=6.9+13.45*1,y=86+12.9*1,radius=8,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons_pam/pam_5.mdl",ang = 0,z=0, + lamp = {speed=12,model = "models/metrostroi_train/81-717/buttons_pam/pamlamp_5.mdl",z=-0.2,anim=true,var="PAPower" }, + var="PAM5",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + }}, + {ID = "PAM6Set",x=6.9+13.45*2,y=86+12.9*1,radius=8,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons_pam/pam_6.mdl",ang = 0,z=0, + lamp = {speed=12,model = "models/metrostroi_train/81-717/buttons_pam/pamlamp_6.mdl",z=-0.2,anim=true,var="PAPower" }, + var="PAM6",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + }}, + {ID = "PAM7Set",x=6.9+13.45*0,y=86+12.9*2,radius=8,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons_pam/pam_7.mdl",ang = 0,z=0, + lamp = {speed=12,model = "models/metrostroi_train/81-717/buttons_pam/pamlamp_7.mdl",z=-0.2,anim=true,var="PAPower" }, + var="PAM7",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + }}, + {ID = "PAM8Set",x=6.9+13.45*1,y=86+12.9*2,radius=8,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons_pam/pam_8.mdl",ang = 0,z=0, + lamp = {speed=12,model = "models/metrostroi_train/81-717/buttons_pam/pamlamp_8.mdl",z=-0.2,anim=true,var="PAPower" }, + var="PAM8",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + }}, + {ID = "PAM9Set",x=6.9+13.45*2,y=86+12.9*2,radius=8,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons_pam/pam_9.mdl",ang = 0,z=0, + lamp = {speed=12,model = "models/metrostroi_train/81-717/buttons_pam/pamlamp_9.mdl",z=-0.2,anim=true,var="PAPower" }, + var="PAM9",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + }}, + {ID = "PAMEscSet",x=6.9+13.45*0,y=86+12.9*3,radius=8,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons_pam/pam_esc.mdl",ang = 0,z=0, + lamp = {speed=12,model = "models/metrostroi_train/81-717/buttons_pam/pamlamp_esc.mdl",z=-0.2,anim=true,var="PAPower" }, + var="PAMEsc",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + }}, + {ID = "PAM0Set",x=6.9+13.45*1,y=86+12.9*3,radius=8,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons_pam/pam_0.mdl",ang = 0,z=0, + lamp = {speed=12,model = "models/metrostroi_train/81-717/buttons_pam/pamlamp_0.mdl",z=-0.2,anim=true,var="PAPower" }, + var="PAM0",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + }}, + {ID = "PAMEnterSet",x=6.9+13.45*2,y=86+12.9*3,radius=8,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons_pam/pam_enter.mdl",ang = 0,z=0, + lamp = {speed=12,model = "models/metrostroi_train/81-717/buttons_pam/pamlamp_enter.mdl",z=2.4,anim=true,var="PAPower" }, + var="PAMEnter",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + }}, + } +} +ENT.ButtonMap["PAMScreen"] = { + --pos = Vector(455.15,-34.35,24.15), + pos = Vector(445.03-0.2,22.95,-1.84), + ang = Angle(0,-90,58), + width = 640, + height = 480, + scale = 0.025/1.9, + sensor = true, + system = "PAM", + + hideseat=0.2, + hide=true, +} +local plombed = {A41Toggle=true,AISToggle=true} +ENT.ButtonMap["AV_C"] = { + pos = Vector(396,-17.5,44.6), + ang = Angle(0,90,90), + width = 680, + height = 590, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "A53Toggle",x=30+36.7*0,y=60+157*0,radius=25,tooltip=""}, + {ID = "A56Toggle",x=30+36.7*1,y=60+157*0,radius=25,tooltip=""}, + {ID = "A54Toggle",x=30+36.7*2,y=60+157*0,radius=25,tooltip=""}, + {ID = "A17Toggle",x=30+36.7*3,y=60+157*0,radius=25,tooltip=""}, + {ID = "A44Toggle",x=30+36.7*4,y=60+157*0,radius=25,tooltip=""}, + {ID = "A39Toggle",x=30+36.7*5,y=60+157*0,radius=25,tooltip=""}, + {ID = "A70Toggle",x=30+36.7*6,y=60+157*0,radius=25,tooltip=""}, + {ID = "A14Toggle",x=30+36.7*7,y=60+157*0,radius=25,tooltip=""}, + {ID = "A74Toggle",x=30+36.7*8,y=60+157*0,radius=25,tooltip=""}, + {ID = "A26Toggle",x=30+36.7*9,y=60+157*0,radius=25,tooltip=""}, + {ID = "AR63Toggle",x=30+36.7*10,y=60+157*0,radius=25,tooltip=""}, + {ID = "AS1Toggle",x=30+36.7*11,y=60+157*0,radius=25,tooltip=""}, + {ID = "A13Toggle",x=30+36.7*12,y=60+157*0,radius=25,tooltip=""}, + {ID = "A21Toggle",x=30+36.7*13,y=60+157*0,radius=25,tooltip=""}, + {ID = "A31Toggle",x=30+36.7*14,y=60+157*0,radius=25,tooltip=""}, + {ID = "A32Toggle",x=30+36.7*15,y=60+157*0,radius=25,tooltip=""}, + {ID = "A16Toggle",x=30+36.7*16,y=60+157*0,radius=25,tooltip=""}, + {ID = "A12Toggle",x=30+36.7*17,y=60+157*0,radius=25,tooltip=""}, + ------------------------------------------------------------------------ + {ID = "A24Toggle",x=30+36.7*0,y=60+157*1,radius=25,tooltip=""}, + {ID = "A49Toggle",x=30+36.7*1,y=60+157*1,radius=25,tooltip=""}, + {ID = "A27Toggle",x=30+36.7*2,y=60+157*1,radius=25,tooltip=""}, + {ID = "A72Toggle",x=30+36.7*3,y=60+157*1,radius=25,tooltip=""}, + {ID = "A50Toggle",x=30+36.7*4,y=60+157*1,radius=25,tooltip=""}, + {ID = "A15Toggle",x=30+36.7*5,y=60+157*1,radius=25,tooltip="",lab=8}, + {ID = "AISToggle",x=30+36.7*6,y=60+157*1,radius=25,tooltip="",lab=0}, + {ID = "AV3Toggle",x=30+36.7*7,y=60+157*1,radius=25,tooltip="",lab=1}, + {ID = "AV1Toggle",x=30+36.7*8,y=60+157*1,radius=25,tooltip="",lab=2}, + {ID = "A58Toggle",x=30+36.7*9,y=60+157*1,radius=25,tooltip="",lab=3}, + {ID = "A59Toggle",x=30+36.7*10,y=60+157*1,radius=25,tooltip="",lab=4}, + {ID = "A61Toggle",x=30+36.7*11,y=60+157*1,radius=25,tooltip="",lab=5}, + {ID = "P:A58Toggle",x=30+36.7*9,y=60+157*1,radius=25,tooltip=""}, + {ID = "P:A59Toggle",x=30+36.7*10,y=60+157*1,radius=25,tooltip="",lab2=true}, + {ID = "P:A61Toggle",x=30+36.7*11,y=60+157*1,radius=25,tooltip=""}, + {ID = "A29Toggle",x=30+36.7*12,y=60+157*1,radius=25,tooltip=""}, + {ID = "A46Toggle",x=30+36.7*13,y=60+157*1,radius=25,tooltip=""}, + {ID = "A47Toggle",x=30+36.7*14,y=60+157*1,radius=25,tooltip="",lab=17}, + {ID = "A71Toggle",x=30+36.7*15,y=60+157*1,radius=25,tooltip=""}, + {ID = "A7Toggle",x=30+36.7*16,y=60+157*1,radius=25,tooltip=""}, + {ID = "A9Toggle",x=30+36.7*17,y=60+157*1,radius=25,tooltip=""}, + ------------------------------------------------------------------------ + {ID = "A84Toggle",x=30+36.7*0,y=60+157*2,radius=25,tooltip=""}, + {ID = "A8Toggle",x=30+36.7*1,y=60+157*2,radius=25,tooltip=""}, + {ID = "A52Toggle",x=30+36.7*2,y=60+157*2,radius=25,tooltip=""}, + {ID = "A19Toggle",x=30+36.7*3,y=60+157*2,radius=25,tooltip=""}, + {ID = "A48Toggle",x=30+36.7*4,y=60+157*2,radius=25,tooltip=""}, + {ID = "A10Toggle",x=30+36.7*5,y=60+157*2,radius=25,tooltip=""}, + {ID = "A22Toggle",x=30+36.7*6,y=60+157*2,radius=25,tooltip=""}, + {ID = "A30Toggle",x=30+36.7*7,y=60+157*2,radius=25,tooltip=""}, + {ID = "A1Toggle",x=30+36.7*8,y=60+157*2,radius=25,tooltip=""}, + {ID = "A2Toggle",x=30+36.7*9,y=60+157*2,radius=25,tooltip=""}, + {ID = "A3Toggle",x=30+36.7*10,y=60+157*2,radius=25,tooltip=""}, + {ID = "A4Toggle",x=30+36.7*11,y=60+157*2,radius=25,tooltip=""}, + {ID = "A5Toggle",x=30+36.7*12,y=60+157*2,radius=25,tooltip=""}, + {ID = "A6Toggle",x=30+36.7*13,y=60+157*2,radius=25,tooltip=""}, + {ID = "A18Toggle",x=30+36.7*14,y=60+157*2,radius=25,tooltip=""}, + {ID = "A73Toggle",x=30+36.7*15,y=60+157*2,radius=25,tooltip=""}, + {ID = "A20Toggle",x=30+36.7*16,y=60+157*2,radius=25,tooltip=""}, + {ID = "A25Toggle",x=30+36.7*17,y=60+157*2,radius=25,tooltip=""}, + ------------------------------------------------------------------------ + {ID = "A11Toggle",x=30+36.7*0,y=60+157*3,radius=25,tooltip=""}, + {ID = "A37Toggle",x=30+36.7*1,y=60+157*3,radius=25,tooltip=""}, + {ID = "A45Toggle",x=30+36.7*2,y=60+157*3,radius=25,tooltip=""}, + {ID = "A38Toggle",x=30+36.7*3,y=60+157*3,radius=25,tooltip=""}, + {ID = "A51Toggle",x=30+36.7*4,y=60+157*3,radius=25,tooltip=""}, + {ID = "A65Toggle",x=30+36.7*5,y=60+157*3,radius=25,tooltip=""}, + {ID = "A06Toggle",x=30+36.7*6,y=60+157*3,radius=25,tooltip=""}, + {ID = "A42Toggle",x=30+36.7*7,y=60+157*3,radius=25,tooltip=""}, + {ID = "A43Toggle",x=30+36.7*8,y=60+157*3,radius=25,tooltip="",lab=6}, + {ID = "A41Toggle",x=30+36.7*9,y=60+157*3,radius=25,tooltip=""}, + {ID = "A40Toggle",x=30+36.7*10,y=60+157*3,radius=25,tooltip=""}, + {ID = "A75Toggle",x=30+36.7*11,y=60+157*3,radius=25,tooltip=""}, + {ID = "A76Toggle",x=30+36.7*12,y=60+157*3,radius=25,tooltip=""}, + {ID = "A60Toggle",x=30+36.7*13,y=60+157*3,radius=25,tooltip=""}, + {ID = "A55Toggle",x=30+36.7*14,y=60+157*3,radius=25,tooltip="",lab=7}, + {ID = "A57Toggle",x=30+36.7*15,y=60+157*3,radius=25,tooltip=""}, + {ID = "A66Toggle",x=30+36.7*16,y=60+157*3,radius=25,tooltip=""}, + {ID = "A28Toggle",x=30+36.7*17,y=60+157*3,radius=25,tooltip=""}, + } +} +for i,button in pairs(ENT.ButtonMap.AV_C.buttons) do + button.model = { + model = "models/metrostroi_train/81-720/button_av1.mdl",z=-25, + var=button.ID:gsub("Toggle",""):gsub("[^:]+:",""),speed=8, + sndvol = 0.8,snd = function(val) return val and "av_on" or "av_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + } + if plombed[button.ID] then + button.model.plomb = {model = "models/metrostroi_train/81/plomb_b.mdl",ang=Angle(0,45,90),x=0,y=-37,z=32,var=button.ID:Replace("Toggle","Pl"), ID=button.ID:Replace("Toggle","Pl"),} + end + if button.lab then + button.model.labels={{model="models/metrostroi_train/81-717/labels/label_717.mdl",skin=button.lab,ang=Angle(-90,90,0),z=40,x=2,y=(6<=button.lab and button.lab<=7) and -62 or -65}} + end + if button.lab2 then + button.model.labels = button.model.labels or {} + table.insert(button.model.labels,{model="models/metrostroi_train/81-717/labels/label_717paksd.mdl",skin=0,ang=Angle(-90,90,0),z=40,x=2,y=-65}) + end + button.ID = "1:"..button.ID +end +ENT.ButtonMap["Battery_C"] = { + pos = Vector(410.0,-57,35), + ang = Angle(0,90,90), + width = 180, + height = 530, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "1:RC1Toggle",x=40,y=240+50,radius=40,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons/breaker_rc1.mdl",z=17,ang=180, + var="RC1",speed=0.5,vmin=1,vmax=0.87, + plomb = {model = "models/metrostroi_train/81/plomb_b.mdl",ang=230,x=-28,y=28,var="RC1Pl",ID="RC1Pl",z=-15,}, + sndvol = 0.8,snd = function(val) return val and "pak_on" or "pak_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "1P:RC1Toggle",x=40,y=240+50,radius=40,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons/breaker_rcvay.mdl",z=17,ang=180, + var="RC1",speed=0.5,vmin=1,vmax=0.87, + plomb = {model = "models/metrostroi_train/81/plomb_b.mdl",ang=230,x=-28,y=28,var="RC1Pl",ID="RC1Pl",z=-15,}, + sndvol = 0.8,snd = function(val) return val and "pak_on" or "pak_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "1:RC2Toggle",x=40,y=340+50,radius=40,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons/breaker_rc2.mdl",z=17,ang=180, + var="RC2",speed=0.5,vmin=1,vmax=0.87, + plomb = {model = "models/metrostroi_train/81/plomb_b.mdl",ang=230,x=-28,y=28,var="RC2Pl",ID="RC2Pl",z=-15,}, + sndvol = 0.8,snd = function(val) return val and "pak_on" or "pak_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "1:VBToggle",x=40,y=440+50,radius=40,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons/breaker_vb.mdl",z=17,ang=180, + var="VB",speed=0.5,vmin=1,vmax=0.87, + sndvol = 0.8,snd = function(val) return val and "pak_on" or "pak_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "1:VAUToggle",x=140,y=340+50,radius=40,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons/breaker_rcvay.mdl",z=17,ang=180, + var="VAU",speed=0.5,vmin=1,vmax=0.87, + sndvol = 0.8,snd = function(val) return val and "pak_on" or "pak_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + } +} +ENT.ButtonMap["VRD_C"] = { + pos = Vector(410.0,-34,56), + ang = Angle(0,90,90), + width = 50, + height = 50, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "1:VRDToggle",x=25,y=25,radius=25,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons/breaker_vb.mdl",z=14,ang=180, + var="VRD",speed=0.5,vmin=1,vmax=0.87, + sndvol = 0.8,snd = function(val) return val and "pak_on" or "pak_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + } +} +ENT.ButtonMap["SOSD_C"] = { + pos = Vector(396-1,0.5,57.5), + ang = Angle(0,90,90), + width = 100, + height = 136, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "1:VSOSDToggle",x=0, y=0, w=100, h=136,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=14,ang=90,z=20.9,x=0,y=-12.5}}, + var="VSOSD",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + } +} +ENT.ButtonMap["AV_R"] = { + pos = Vector(398.5+11,-52.9+0.75,37.1), + ang = Angle(0,90,90), + width = 398, + height = 358, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "A11Toggle",x=29.3*0,y=154*0,w=25,h=45,tooltip=""}, + {ID = "A17Toggle",x=29.3*1,y=154*0,w=25,h=45,tooltip=""}, + {ID = "A44Toggle",x=29.3*2,y=154*0,w=25,h=45,tooltip=""}, + {ID = "A58Toggle",x=29.3*3,y=154*0,w=25,h=45,tooltip=""}, + {ID = "A59Toggle",x=29.3*4,y=154*0,w=25,h=45,tooltip=""}, + {ID = "A61Toggle",x=29.3*5,y=154*0,w=25,h=45,tooltip=""}, + {ID = "P:A58Toggle",x=29.3*3,y=154*0,w=25,h=45,tooltip=""}, + {ID = "P:A59Toggle",x=29.3*4,y=154*0,w=25,h=45,tooltip=""}, + {ID = "P:A61Toggle",x=29.3*5,y=154*0,w=25,h=45,tooltip=""}, + {ID = "A21Toggle",x=29.3*6,y=154*0,w=25,h=45,tooltip=""}, + {ID = "A49Toggle",x=29.3*7,y=154*0,w=25,h=45,tooltip=""}, + {ID = "A27Toggle",x=29.3*8,y=154*0,w=25,h=45,tooltip=""}, + {ID = "A10Toggle",x=29.3*9,y=154*0,w=25,h=45,tooltip=""}, + {ID = "A53Toggle",x=29.3*10,y=154*0,w=25,h=45,tooltip=""}, + {ID = "A54Toggle",x=29.3*11,y=154*0,w=25,h=45,tooltip=""}, + {ID = "A84Toggle",x=29.3*12,y=154*0,w=25,h=45,tooltip=""}, + ------------------------------------------------------------------------ + {ID = "A78Toggle",x=29.3*0,y=154*1,w=25,h=45,tooltip=""}, + {ID = "A48Toggle",x=29.3*1,y=154*1,w=25,h=45,tooltip=""}, + {ID = "ABKToggle",x=29.3*2,y=154*1,w=25,h=45,tooltip=""}, + {ID = "A29Toggle",x=29.3*3,y=154*1,w=25,h=45,tooltip=""}, + {ID = "A46Toggle",x=29.3*4,y=154*1,w=25,h=45,tooltip=""}, + {ID = "A47Toggle",x=29.3*5,y=154*1,w=25,h=45,tooltip=""}, + {ID = "A43Toggle",x=29.3*6,y=154*1,w=25,h=45,tooltip=""}, + {ID = "A42Toggle",x=29.3*7,y=154*1,w=25,h=45,tooltip=""}, + {ID = "A74Toggle",x=29.3*8,y=154*1,w=25,h=45,tooltip=""}, + {ID = "A73Toggle",x=29.3*9,y=154*1,w=25,h=45,tooltip=""}, + {ID = "A71Toggle",x=29.3*10,y=154*1,w=25,h=45,tooltip=""}, + {ID = "A41Toggle",x=29.3*11,y=154*1,w=25,h=45,tooltip=""}, + {ID = "A45Toggle",x=29.3*12,y=154*1,w=25,h=45,tooltip=""}, + ------------------------------------------------------------------------ + {ID = "A75Toggle",x=29.3*0,y=154*2,w=25,h=45,tooltip=""}, + {ID = "A8Toggle",x=29.3*1,y=154*2,w=25,h=45,tooltip=""}, + {ID = "A52Toggle",x=29.3*2,y=154*2,w=25,h=45,tooltip=""}, + {ID = "A72Toggle",x=29.3*3,y=154*2,w=25,h=45,tooltip=""}, + {ID = "A31Toggle",x=29.3*4,y=154*2,w=25,h=45,tooltip=""}, + {ID = "A32Toggle",x=29.3*5,y=154*2,w=25,h=45,tooltip=""}, + {ID = "A13Toggle",x=29.3*6,y=154*2,w=25,h=45,tooltip=""}, + {ID = "A1Toggle",x=29.3*7,y=154*2,w=25,h=45,tooltip=""}, + {ID = "A20Toggle",x=29.3*8,y=154*2,w=25,h=45,tooltip=""}, + {ID = "A25Toggle",x=29.3*9,y=154*2,w=25,h=45,tooltip=""}, + {ID = "A30Toggle",x=29.3*10,y=154*2,w=25,h=45,tooltip=""}, + {ID = "A56Toggle",x=29.3*11,y=154*2,w=25,h=45,tooltip=""}, + {ID = "A65Toggle",x=29.3*12,y=154*2,w=25,h=45,tooltip=""}, + } +} +for i,button in pairs(ENT.ButtonMap.AV_R.buttons) do + button.model = { + model = "models/metrostroi_train/81-720/button_av1.mdl",z=-25, + var=button.ID:gsub("Toggle",""):gsub("[^:]+:",""),speed=8, + sndvol = 0.8,snd = function(val) return val and "av_on" or "av_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + } + if plombed[button.ID] then + button.model.plomb = {model = "models/metrostroi_train/81/plomb_b.mdl",ang=Angle(0,25,45),x=19,y=-30,z=24,var=button.ID:Replace("Toggle","Pl"), ID=button.ID:Replace("Toggle","Pl"),} + end +end +ENT.ButtonMap["AV_S"] = { + pos = Vector(392,-33,-20), + ang = Angle(0,270,90), + width = 275, + height = 165, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "A2Toggle",x=25*0,y=60*0,w=25,h=45,tooltip=""}, + {ID = "A3Toggle",x=25*1,y=60*0,w=25,h=45,tooltip=""}, + {ID = "A4Toggle",x=25*2,y=60*0,w=25,h=45,tooltip=""}, + {ID = "A5Toggle",x=25*3,y=60*0,w=25,h=45,tooltip=""}, + {ID = "A6Toggle",x=25*4,y=60*0,w=25,h=45,tooltip=""}, + {ID = "A70Toggle",x=25*5,y=60*0,w=25,h=45,tooltip=""}, + {ID = "A14Toggle",x=25*6,y=60*0,w=25,h=45,tooltip=""}, + {ID = "A39Toggle",x=25*7,y=60*0,w=25,h=45,tooltip=""}, + {ID = "A28Toggle",x=25*8,y=60*0,w=25,h=45,tooltip=""}, + {ID = "A38Toggle",x=25*9,y=60*0,w=25,h=45,tooltip=""}, + {ID = "A22Toggle",x=25*10,y=60*0,w=25,h=45,tooltip=""}, + ------------------------------------------------------------------------ + {ID = "A12Toggle",x=25*0,y=60*1,w=25,h=45,tooltip=""}, + {ID = "A16Toggle",x=25*1,y=60*1,w=25,h=45,tooltip=""}, + {ID = "A37Toggle",x=25*2,y=60*1,w=25,h=45,tooltip=""}, + {ID = "A51Toggle",x=25*3,y=60*1,w=25,h=45,tooltip=""}, + {ID = "A24Toggle",x=25*4,y=60*1,w=25,h=45,tooltip=""}, + {ID = "A19Toggle",x=25*5,y=60*1,w=25,h=45,tooltip=""}, + {ID = "A18Toggle",x=25*7,y=60*1,w=25,h=45,tooltip=""}, + {ID = "A40Toggle",x=25*8,y=60*1,w=25,h=45,tooltip=""}, + {ID = "A15Toggle",x=25*9,y=60*1,w=25,h=45,tooltip=""}, + {ID = "A50Toggle",x=25*10,y=60*1,w=25,h=45,tooltip=""}, + ------------------------------------------------------------------------ + {ID = "AISToggle",x=25*2,y=60*2,w=25,h=45,tooltip=""}, + {ID = "AV3Toggle",x=25*3,y=60*2,w=25,h=45,tooltip=""}, + {ID = "AV1Toggle",x=25*4,y=60*2,w=25,h=45,tooltip=""}, + {ID = "A55Toggle",x=25*5,y=60*2,w=25,h=45,tooltip=""}, + {ID = "A57Toggle",x=25*6,y=60*2,w=25,h=45,tooltip=""}, + {ID = "A60Toggle",x=25*7,y=60*2,w=25,h=45,tooltip=""}, + {ID = "A7Toggle",x=25*8,y=60*2,w=25,h=45,tooltip=""}, + {ID = "A9Toggle",x=25*9,y=60*2,w=25,h=45,tooltip=""}, + } +} +for i,button in pairs(ENT.ButtonMap.AV_S.buttons) do + button.model = { + model = "models/metrostroi_train/81-720/button_av1.mdl",z=-25, + var=button.ID:Replace("Toggle",""),speed=8, + sndvol = 0.8,snd = function(val) return val and "av_on" or "av_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + } + if plombed[button.ID] then + button.model.plomb = {model = "models/metrostroi_train/81/plomb_b.mdl",ang=Angle(0,45,90),x=0,y=-37,z=32,var=button.ID:Replace("Toggle","Pl"), ID=button.ID:Replace("Toggle","Pl"),} + end +end +ENT.ButtonMap["Battery_R"] = { + pos = Vector(410.0,-54.25,8), + ang = Angle(0,90,90), + width = 440, + height = 157, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "2:RC1Toggle",x=64,y=40,radius=40,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons/breaker_rc1.mdl",z=17,ang=180, + var="RC1",speed=0.5,vmin=1,vmax=0.87, + plomb = {model = "models/metrostroi_train/81/plomb_b.mdl",ang=230,x=-28,y=28,var="RC1Pl",ID="RC1Pl",z=-15,}, + sndvol = 0.8,snd = function(val) return val and "pak_on" or "pak_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "2P:RC1Toggle",x=64,y=40,radius=40,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons/breaker_rcvay.mdl",z=17,ang=180, + var="RC1",speed=0.5,vmin=1,vmax=0.87, + plomb = {model = "models/metrostroi_train/81/plomb_b.mdl",ang=230,x=-28,y=28,var="RC1Pl",ID="RC1Pl",z=-15,}, + sndvol = 0.8,snd = function(val) return val and "pak_on" or "pak_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + --{ID = "1:RC1Pl",x=45,y=108,radius=20,tooltip=""}, + {ID = "2:VBToggle",x=220,y=40,radius=40,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons/breaker_vb.mdl",z=17,ang=180, + var="VB",speed=0.5,vmin=1,vmax=0.87, + sndvol = 0.8,snd = function(val) return val and "pak_on" or "pak_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "2:RC2Toggle",x=376,y=40,radius=40,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons/breaker_rc2.mdl",z=17,ang=180, + var="RC2",speed=0.5,vmin=1,vmax=0.87, + plomb = {model = "models/metrostroi_train/81/plomb_b.mdl",ang=230,x=-28,y=28,var="RC2Pl",ID="RC2Pl",z=-15,}, + sndvol = 0.8,snd = function(val) return val and "pak_on" or "pak_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "2:VAUToggle",x=142,y=117,radius=40,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons/breaker_rcvay.mdl",z=17,ang=180, + var="VAU",speed=0.5,vmin=1,vmax=0.87, + sndvol = 0.8,snd = function(val) return val and "pak_on" or "pak_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "2:VRDToggle",x=298,y=117,radius=25,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons/breaker_vb.mdl",z=14,ang=180, + var="VRD",speed=0.5,vmin=1,vmax=0.87, + sndvol = 0.8,snd = function(val) return val and "pak_on" or "pak_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + } +} +ENT.ButtonMap["SOSD_R"] = { + pos = Vector(410.0,-59,38), + ang = Angle(0,90,90), + width = 100, + height = 136, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "2:VSOSDToggle",x=0, y=0, w=100, h=136,radius=25,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=14,ang=90,z=20.9,x=0,y=-12.5}}, + var="VSOSD",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + } +} +ENT.ButtonMap["CabVent_C"] = { + pos = Vector(455.35,46.35,-13.02), + ang = Angle(0,-90,0), + width = 70, + height = 62, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID="PVK-",x=0, y=0, w=35,h=62, tooltip="",states={"Train.Buttons.Off","Train.Buttons.VentHalf","Train.Buttons.VentFull"},varTooltip = function(ent) return ent:GetPackedRatio("PVK") end,}, + {ID = "!PVK",x=35,y=31,model = { + model = "models/metrostroi_train/81-717/buttons/breaker_common001.mdl",ang = 180,z=15, + getfunc = function(ent) return ent:GetPackedRatio("PVK") end, var="PVK",speed=4,min=1,max=0.75, + sndvol = 1,snd = function(val,val2) return "pvk"..val2 end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID="PVK+",x=35, y=0, w=35,h=62, tooltip="",states={"Train.Buttons.Off","Train.Buttons.VentHalf","Train.Buttons.VentFull"},varTooltip = function(ent) return ent:GetPackedRatio("PVK") end,}, + } +} + +-- Train driver helpers panel +ENT.ButtonMap["HelperPanel_C"] = { + pos = Vector(446.5,62.6,18.7), + ang = Angle(0,0,90), + width = 76, + height = 242, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "VUD2Toggle",x=0,y=0,w=76,h=86,tooltip="",model = { + model = "models/metrostroi_train/switches/vudbrown.mdl",z=25, + var="VUD2",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"}, + }}, + {ID = "VDLSet",x=0,y=90,w=76,h=86,tooltip="",model = { + model = "models/metrostroi_train/switches/vudbrown.mdl",z=25, + var="VDL",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 = "VOPDSet",x=38,y=235,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl",z = -3, + var="VOPD",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button2_off" end, + sndmin = 60,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + } +} +ENT.ButtonMap["HelperPanel_R"] = table.Copy(ENT.ButtonMap["HelperPanel_C"]) +ENT.ButtonMap["HelperPanel_R"].pos = ENT.ButtonMap["HelperPanel_R"].pos - Vector(-0.4,0,-0.4) +for k,v in pairs(ENT.ButtonMap["HelperPanel_R"].buttons) do v.ID = "1:"..v.ID end +--[[ +-- Pneumatic instrument panel +ENT.ButtonMap["PneumaticPanels"] = { + pos = Vector(459.6,-9.0,13.4), + ang = Angle(0,-90,56.5), + width = 310, + height = 120, + scale = 0.0625, + + buttons = { + {ID = "!CylinderPressure",x=200,y=55,radius=55,tooltip=""}, + {ID = "!LinePressure",x=65,y=55,radius=55,tooltip=""}, + } +}--]] +ENT.ButtonMap["ParkingBrake"] = { + pos = Vector(456.777527-3,5,-30), + ang = Angle(0,-90,60), + width = 200, + height = 120, + scale = 0.0625, + + buttons = { + {ID = "ParkingBrakeToggle",x=0,y=0,w=200,h=120,tooltip="",model = { + var="ParkingBrake",sndid="parking_brake", + sndvol = 1,snd = function(val) return "disconnect_valve" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} + + + +ENT.ButtonMap["EPKDisconnect"] = { + pos = Vector(439.0,-43.3,-33), + ang = Angle(0,-90,0), + width = 200, + height = 120, + scale = 0.0625, + + buttons = { + {ID = "EPKToggle",x=0,y=0,w=200,h=120,tooltip="",model = { + var="EPK",sndid="EPK_disconnect", + sndvol = 1,snd = function(val) return "disconnect_valve" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} + +ENT.ClientProps["reverser"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = Vector(438,-29.9,-14.9), + ang = Angle(-90-22,180,90), + 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["krureverser"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = Vector(443.8,-24.5,-3.2), + ang = Angle(0,-90,60), + 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.ButtonMap["HVMeters_O"] = { + pos = Vector(453.3,-28.7,20.1), + ang = Angle(0,-130,90), + width = 68, + height = 138, + scale = 0.0625, + + buttons = { + {ID = "!EnginesCurrent", x=0, y=0, w=68, h=64, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesCurrent"),ent:GetPackedRatio("EnginesCurrent")*1000-500) end}, + {ID = "!HighVoltage", x=0, y=74, w=68, h=64, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesVoltage"),ent:GetPackedRatio("EnginesVoltage")*1000) end}, + } +} +ENT.ButtonMap["HVMeters_N"] = { + pos = Vector(455.2,-26.5,15), + ang = Angle(0,-120,90), + width = 145, + height = 45, + scale = 0.0625, + + buttons = { + {ID = "!HighVoltage", x=0, y=0, w=65, h=45, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesVoltage"),ent:GetPackedRatio("EnginesVoltage")*1000) end}, + {ID = "!EnginesCurrent", x=75, y=0, w=70, h=45, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesCurrent"),ent:GetPackedRatio("EnginesCurrent")*1000-500) end}, + } +} + +-- UAVA +ENT.ButtonMap["UAVAPanel"] = { + pos = Vector(423,-57,-25.0), + ang = Angle(0,180,90), + width = 180, + height = 200, + scale = 0.0625, + + buttons = { + {ID = "UAVAToggle",x=0, y=0, w=60, h=200, tooltip="", model = { + plomb = {var="UAVAPl", ID="UAVAPl",}, + var="UAVA", + sndid="UAVALever",sndvol = 1, snd = function(val) return val and "uava_on" or "uava_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "UAVACToggle",x=60, y=0, w=120, h=200, tooltip="",var="UAVAC",states={"Train.Buttons.UAVAOff","Train.Buttons.UAVAOn"}}, + } +} +ENT.ClientProps["UAVALever"] = { + model = "models/metrostroi_train/81-703/cabin_uava.mdl", + pos = Vector(422.7,-59.4,-31.6), + ang = Angle(3,-180,0), + hideseat=0.2, +} + +ENT.ButtonMap["Stopkran"] = { + pos = Vector(401,62,17), + ang = Angle(0,0,90), + width = 200, + height = 1300, + scale = 0.1/2, + buttons = { + {ID = "EmergencyBrakeValveToggle",x=0,y=0,w=200,h=1300,tooltip="", tooltip="",tooltip="",states={"Train.Buttons.Closed","Train.Buttons.Opened"},var="EmergencyBrakeValve"}, + } +} +ENT.ClientProps["stopkran"] = { + model = "models/metrostroi_train/81-717/stop_spb.mdl", + pos = Vector(408.45,62.15,11.5), + ang = Angle(0,0,0), + hideseat=0.2, +} +ENT.ClientSounds["EmergencyBrakeValve"] = {{"stopkran",function() return "disconnect_valve" end,1,1,50,1e3,Angle(-90,0,0)}} +ENT.ButtonMap["DriverValveBLDisconnect"] = { + pos = Vector(426.1,-27.3,-20), + ang = Angle(90,-150,90), + 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 = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} +ENT.ButtonMap["DriverValveTLDisconnect"] = { + pos = Vector(429.3,-23,-15), + ang = Angle(90,-150,90), + 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 = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} +ENT.ButtonMap["EPKDisconnect"] = { + pos = Vector(435,-40,-23), + ang = Angle(0,-90-45,45), + width = 200, + height = 120, + scale = 0.0625, + + buttons = { + {ID = "EPKToggle",x=0,y=0,w=200,h=120,tooltip="",model = { + var="EPK",--,sndid="EPK_disconnect", + --sndvol = 1,snd = function(val) return "disconnect_valve" end, + --sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} +ENT.ButtonMap["EPVDisconnect"] = { + pos = Vector(435,-40,-23), + ang = Angle(0,-90-45,45), + width = 200, + height = 120, + scale = 0.0625, + + buttons = { + {ID = "EPKToggle",x=0,y=0,w=200,h=120,tooltip="",model = { + var="EPK",--,sndid="EPK_disconnect", + --sndvol = 1,snd = function(val) return "disconnect_valve" end, + --sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} +ENT.ClientProps["brake_disconnect"] = { + model = "models/metrostroi_train/81-707/cran1.mdl", + pos = Vector(427.3,-28.9,-32.5), + ang = Angle(90,-60,90), + hideseat=0.2, +} +ENT.ClientSounds["EPK"] = { + {"EPK_disconnect",function() return "disconnect_valve" end,1,1,90,1e3,Angle(-90,0,0)}, + {"EPV_disconnect",function() return "disconnect_valve" end,1,1,90,1e3,Angle(-90,0,0)}, +} +ENT.ClientProps["EPK_disconnect"] = { + model = "models/metrostroi_train/81-707/cran1.mdl", + pos = Vector(432.4,-44.25,-24.7), + ang = Angle(0,-90,0), + hideseat=0.2, +} +ENT.ClientProps["EPV_disconnect"] = { + model = "models/metrostroi_train/81-707/cran1.mdl", + pos = Vector(431.15,-43.5,-24.7), + ang = Angle(0,-90,0), + hideseat=0.2, +} +ENT.ClientProps["train_disconnect"] = { + model = "models/metrostroi_train/81-707/cran3.mdl", + pos = Vector(430.1,-24.0,-24.1), + ang = Angle(90,-60,90), + hideseat=0.2, +} + +ENT.ButtonMap["DriverValveDisconnect"] = { + pos = Vector(425,-23,-27), + ang = Angle(90,-150,90), + width = 200, + height = 90, + scale = 0.0625, + + buttons = { + {ID = "DriverValveDisconnectToggle",x=0,y=0,w=200,h=90,tooltip="",model = { + var="DriverValveDisconnect",sndid="valve_disconnect", + sndvol = 1,snd = function(val) return "disconnect_valve" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} +ENT.ClientProps["valve_disconnect"] = { + model = "models/metrostroi_train/81-707/cran3.mdl", + pos = Vector(428.15,-22.95,-37.43), + ang = Angle(90,240+2,90), + hideseat=0.2, +} + +ENT.ButtonMap["FrontPneumatic"] = { + pos = Vector(470-9,-45.0,-58.0+5), + 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(449+11, -31, -62), + ang = Angle(-15,-90,0), + hide = 2, +} +ENT.ClientProps["FrontTrain"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_blue.mdl", + pos = Vector(449+11, 31, -62), + 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-1,45.0,-58.0+5), + ang = Angle(0,270,90), + width = 900, + height = 100, + scale = 0.1, + buttons = { + {ID = "RearTrainLineIsolationToggle",x=500, y=0, w=400, h=100, tooltip="",var="RtI",states={"Train.Buttons.Opened","Train.Buttons.Closed"}}, + {ID = "RearBrakeLineIsolationToggle",x=000, y=0, w=400, h=100, tooltip="",var="RbI",states={"Train.Buttons.Opened","Train.Buttons.Closed"}}, + } +} +ENT.ClientProps["RearTrain"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_blue.mdl", + pos = Vector(-450-22, -34, -62), + ang = Angle(-15,90,0), + hide = 2, +} +ENT.ClientProps["RearBrake"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_red.mdl", + pos = Vector(-450-22, 34, -62), + 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-9.5,50+20,-60+2), + 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-9.5,36+20,-78+2), + 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.ClientProps["parking_brake"] = { + model = "models/metrostroi_train/81-707/cran3.mdl", + pos = Vector(453.6,-0.25,-39.8), + ang = Angle(120,0,180), + hideseat=0.2, +} + + +ENT.ButtonMap["AirDistributor"] = { + pos = Vector(-185,-68,-50), + ang = Angle(0,0,90), + width = 170, + height = 80, + scale = 0.1, + hideseat=0.1, + hide=true, + screenHide = true, + + buttons = { + {ID = "AirDistributorDisconnectToggle",x=0,y=0,w= 170,h = 80,tooltip="",var="AD",states={"Train.Buttons.On","Train.Buttons.Off"}}, + } +} + +for i=0,4 do + ENT.ClientProps["TrainNumberL"..i] = { + model = "models/metrostroi_train/common/bort_numbers.mdl", + pos = Vector(43+i*6.4,67.2,-12), + ang = Angle(0,180,0), + skin=i, + hide = 1.5, + callback = function(ent) + ent.WagonNumber = false + end, + } + ENT.ClientProps["TrainNumberR"..i] = { + model = "models/metrostroi_train/common/bort_numbers.mdl", + pos = Vector(64-i*6.4,-67.2,-12), + ang = Angle(0,0,0), + skin=i, + hide = 1.5, + callback = function(ent) + ent.WagonNumber = false + end, + } +end + +ENT.ButtonMap["Route"] = { + pos = Vector(458.20,37.9,-2.3), + ang = Angle(0,99,90), + width = 230, + height = 130, + scale = 0.0625, + buttons = { + {ID = "RouteNumber1+",x=76.5*0,y=0,w=76.5,h=65,tooltip=""}, + {ID = "RouteNumber2+",x=76.5*1,y=0,w=76.5,h=65,tooltip=""}, + {ID = "RouteNumber3+",x=76.5*2,y=0,w=76.5,h=65,tooltip=""}, + {ID = "RouteNumber1-",x=76.5*0,y=65,w=76.5,h=65,tooltip=""}, + {ID = "RouteNumber2-",x=76.5*1,y=65,w=76.5,h=65,tooltip=""}, + {ID = "RouteNumber3-",x=76.5*2,y=65,w=76.5,h=65,tooltip=""}, + } +} + +ENT.ClientProps["route1"] = { + model = "models/metrostroi_train/81-502/route/route_number.mdl", + pos = Vector(457.80,40.16,-6.3), + ang = Angle(90,189,180), + skin=2, + hide = 1.5, + callback = function(ent) + ent.RouteNumber.Reloaded = false + end, +} +ENT.ClientProps["route2"] = { + model = "models/metrostroi_train/81-502/route/route_number.mdl", + pos = Vector(457.03,45.03,-6.3), + ang = Angle(90,189,180), + skin=2, + hide = 1.5, + callback = function(ent) + ent.RouteNumber.Reloaded = false + end, +} +ENT.ClientProps["route3"] = { + model = "models/metrostroi_train/81-502/route/route_number.mdl", + pos = Vector(456.30,49.72,-6.3), + ang = Angle(90,189,180), + skin=8, + hide = 1.5, + callback = function(ent) + ent.RouteNumber.Reloaded = false + end, +} + +ENT.ButtonMap["CabinDoor"] = { + pos = Vector(411,64,50), + ang = Angle(0,0,90), + width = 665, + height = 2000, + scale = 0.1/2, + buttons = { + {ID = "CabinDoor",x=0,y=0,w=665,h=2000,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.ButtonMap["OtsekDoor1"] = { + pos = Vector(394.5,28,12.6), + ang = Angle(0,180,90), + width = 310, + height = 130, + scale = 0.1/2, + buttons = { + {ID = "OtsekDoor1",x=0,y=0,w=310,h=130,tooltip="",model = { + var="OtsekDoor1",sndid="door_otsek1", + sndvol = 1,snd = function(val) return "otsek_door_close" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + states = {"Train.Buttons.Closed","Train.Buttons.Opened"} + }}, + } +} +ENT.ButtonMap["OtsekDoor2"] = { + pos = Vector(394.5,28,-15.5), + ang = Angle(0,180,90), + width = 310, + height = 130, + scale = 0.1/2, + buttons = { + {ID = "OtsekDoor2",x=0,y=0,w=310,h=130,tooltip="",model = { + var="OtsekDoor2",sndid="door_otsek2", + sndvol = 1,snd = function(val) return "otsek_door_close" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + states = {"Train.Buttons.Closed","Train.Buttons.Opened"} + }}, + } +} + +ENT.ButtonMap["PassengerDoor"] = { + pos = Vector(390-12.2,29,50.6),--28 + ang = Angle(0,90,90), + width = 642, + height = 2000, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=642,h=2000,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(390-12.2,29+32,50.6),--28 + ang = Angle(0,-90,90), + width = 642, + height = 2000, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=642,h=2000,tooltip=""}, + } +} +ENT.ButtonMap["CabinDoor"] = { + pos = Vector(414.5,64,56.7), + ang = Angle(0,0,90), + width = 642, + height = 2000, + scale = 0.1/2, + buttons = { + {ID = "CabinDoor",x=0,y=0,w=642,h=2000,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.ButtonMap["RearDoor"] = { + pos = Vector(-470-3,-16,48.4-2), + ang = Angle(0,90,90), + width = 642, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "RearDoor",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["LeftMirror"] = { + pos = Vector(469.9,72.75,37.4), + ang = Angle(0,-60,90), + width = 128, + height = 256, + scale = 0.06, +} +ENT.ButtonMap["RightMirror"] = { + pos = Vector(470.0+3.4,-72.75+6,37.4), + ang = Angle(0,-60-60,90), + width = 128, + height = 256, + scale = 0.06, +}--]] +-------------------------------------------------------------------------------- +ENT.ClientPropsInitialized = false +ENT.ClientProps["brake013"] = { + model = "models/metrostroi_train/81-717/cran13.mdl", + pos = Vector(431.5,-20.3,-10.2), + ang = Angle(0,180,0), + hideseat = 0.2, +} +ENT.ClientProps["brake334"] = { + model = "models/metrostroi_train/81-703/cabin_cran_334.mdl", + pos = Vector(432.27,-22.83,-8.2), + ang = Angle(0,-230,0), + hideseat = 0.2, +} +if not ENT.ClientSounds["br_013"] then ENT.ClientSounds["br_013"] = {} end +table.insert(ENT.ClientSounds["br_013"],{"brake013",function(ent,_,var) return "br_013" end,0.7,1,50,1e3,Angle(-90,0,0)}) +if not ENT.ClientSounds["br_334"] then ENT.ClientSounds["br_334"] = {} end +table.insert(ENT.ClientSounds["br_334"],{"brake334",function(ent,_,var) return "br_334_"..var end,1,1,50,1e3,Angle(-90,0,0)}) +-------------------------------------------------------------------------------- + +ENT.ClientProps["PB"] = { + model = "models/metrostroi_train/81-720/720_pb.mdl", + pos = Vector(450, 18, -37), + ang = Angle(0,-90,8), + hideseat = 0.2, +} +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,1,1,50,1e3,Angle(-90,0,0)}) + +ENT.ClientProps["train_line"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(450.665070,-15.255391,-3.192689+5.35), + ang = Angle(-62.299999,-33.400002,0.000000), + hideseat = 0.2, +} +ENT.ClientProps["brake_line"] = { + model = "models/metrostroi_train/Equipment/arrow_tm.mdl", + pos = Vector(450.684143,-15.267894,-3.204609+5.35), + ang = Angle(-62.299999,-33.400002,0.000000), + hideseat = 0.2, +} +ENT.ClientProps["brake_cylinder"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(450.535736,-22.815704,-3.113149+5.35), + ang = Angle(-62.299999,-33.400002,0.000000), + hideseat = 0.2, +} +ENT.ClientProps["ampermeter"] = { + model = "models/metrostroi/81-717/volt_arrow.mdl", + pos = Vector(452.269592,-30.540430,16.922098), + ang = Angle(90.500000,0.000000,40.000000), + hideseat = 0.2, +} +ENT.ClientProps["voltmeter"] = { + model = "models/metrostroi/81-717/volt_arrow.mdl", + pos = Vector(452.246277,-30.519978,12.287716), + ang = Angle(90.500000,0.000000,40.000000), + hideseat = 0.2, +} + +ENT.ClientProps["voltmeter2"] = { + model = "models/metrostroi/81-717/volt_arrow.mdl", + pos = Vector(454.6,-28.33,12.1), + ang = Angle(90.500000,0.000000,30.500000), + hideseat = 0.2, +} +ENT.ClientProps["ampermeter2"] = { + model = "models/metrostroi/81-717/volt_arrow.mdl", + pos = Vector(452.3,-32.45,12.1), + ang = Angle(90.500000,0.000000,30.500000), + hideseat = 0.2, +} +ENT.ClientProps["volt1"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(449.501740,15.141174,0.812889), + ang = Angle(-58.299999,0.000000,27.968136), + bscale = Vector(1,1,1.47), + hideseat = 0.2, +} + +ENT.ClientProps["bortlamps1"] = { + model = "models/metrostroi_train/81-717/bort_lamps_body.mdl", + pos = Vector(-52,67,45.5), + ang = Angle(0,0,0), + hide = 2, +} +ENT.ClientProps["bortlamp1_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = ENT.ClientProps.bortlamps1.pos+Vector(0,0.85,3.2), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp1_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = ENT.ClientProps.bortlamps1.pos+Vector(0,0.85,-0.1), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp1_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = ENT.ClientProps.bortlamps1.pos+Vector(0,0.85,-3.35), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamps2"] = { + model = "models/metrostroi_train/81-717/bort_lamps_body.mdl", + pos = Vector(39,-67,45.5), + ang = Angle(0,180,0), + hide = 2, +} +ENT.ClientProps["bortlamp2_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = ENT.ClientProps.bortlamps2.pos+Vector(0,-0.85,3.2), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp2_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = ENT.ClientProps.bortlamps2.pos+Vector(0,-0.85,-0.1), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp2_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = ENT.ClientProps.bortlamps2.pos+Vector(0,-0.85,-3.35), + ang = Angle(0,180,0), + nohide = true, +} +-------------------------------------------------------------------------------- +-- Add doors +--[[ local function GetDoorPosition(i,k,j) + if j == 0 + then return Vector(338.0-230.1*i+(1-k)*0.8,-65*(1-2*k),0.761) + else return Vector(338.2-230.1*i+(1-k)*0.8,-65*(1-2*k),0.761) + end +end +for i=0,3 do + for k=0,1 do + ENT.ClientProps["door"..i.."x"..k.."a"] = { + model = "models/metrostroi_train/81-717/door_right_spb.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-717/door_left_spb.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-717/81-717_doors_spb_pos1.mdl", + pos = Vector(338.445+1.2-2.2,65.164,0.807), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door1x1"] = { + model = "models/metrostroi_train/81-717/81-717_doors_spb_pos2.mdl", + pos = Vector(108.324+1.2-2.2,65.164,0.807), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door2x1"] = { + model = "models/metrostroi_train/81-717/81-717_doors_spb_pos3.mdl", + pos = Vector(-122.182+1.6-2.2,65.164,0.807), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door3x1"] = { + model = "models/metrostroi_train/81-717/81-717_doors_spb_pos4.mdl", + pos = Vector(-351.531+0.8-2.2,65.164,0.807), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door0x0"] = { + model = "models/metrostroi_train/81-717/81-717_doors_spb_pos4.mdl", + pos = Vector(338.445+1.2,-65.164,0.807), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door1x0"] = { + model = "models/metrostroi_train/81-717/81-717_doors_spb_pos3.mdl", + pos = Vector(108.324+1.2,-65.164,0.807), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door2x0"] = { + model = "models/metrostroi_train/81-717/81-717_doors_spb_pos2.mdl", + pos = Vector(-122.182+1.6,-65.164,0.807), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door3x0"] = { + model = "models/metrostroi_train/81-717/81-717_doors_spb_pos1.mdl", + pos = Vector(-351.531+0.8,-65.164,0.807), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["Lamp_RTM"] = { + model = "models/metrostroi_train/81-717/rtmlamp.mdl", + pos = Vector(448.35,-33.95,-3.9), + ang = Angle(0,-35,0), + hideseat = 0.2, +} +ENT.ClientProps["Lamps_cab1"] = { + model = "models/metrostroi_train/81-717/lamps/lamp_cabine1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat = 0.9, +} +ENT.ClientProps["Lamps_cab2"] = { + model = "models/metrostroi_train/81-717/lamps/lamp_cabine2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat = 0.9, +} +ENT.ClientProps["Lamps2_cab1"] = { + model = "models/metrostroi_train/81-717/lamps/lamp_cabine1.mdl", + pos = Vector(0.5,0,-0.7), + ang = Angle(0,0,0), + hideseat = 0.9, +} +ENT.ClientProps["Lamps2_cab2"] = { + model = "models/metrostroi_train/81-717/lamps/lamp_cabine2.mdl", + pos = Vector(0,0,-0.8), + ang = Angle(0,0,0), + hideseat = 0.9, +} +for i = 0,11 do + --[[ local b = 15--math.random()*15 + local g = 15--b+math.random()*(15-b) + if math.random() > 0.4 then + g = math.random()*15 + b = g + else + g = 15 + b = -10+math.random()*25 + end--]] + ENT.ClientProps["lamp1_"..i+1] = { + model = "models/metrostroi_train/81-717/lamps/lamp_typ1.mdl", + pos = Vector(333.949 - 66.66*i,0,67.7), + ang = Angle(0,0,0), + --color = Color(255,235+g,235+b), + color = Color(255,255,255), + hideseat = 1.1, + } +end +--[[ +local pos = Vector(454.3,-28.3,12+3.5) +local ang = Angle(60,-30,180) +ENT.ClientProps["TEST"] = { + model = "models/metrostroi_train/81/334cran.mdl", + pos = pos, + ang = ang, + scale=0.1, +}--]] +ENT.Lights = { + [1] = { "headlight",Vector(460,0,-40),Angle(0,0,0),Color(216,161,92),farz=5144,brightness = 4, fov=100, texture = "models/metrostroi_train/equipment/headlight",shadows = 1,headlight=true}, + [2] = { "headlight", Vector(460,0,50), Angle(-20,0,0), Color(255,0,0), fov=160 ,brightness = 0.3, farz=450,texture = "models/metrostroi_train/equipment/headlight2",shadows = 0,backlight=true}, + + [3] = { "headlight", Vector(365,-9,50), Angle(50,40,-0), Color(206,135,80), hfov=80, vfov=80,farz=100,brightness = 6,shadows=1, hidden="salon"}, + [4] = { "headlight", Vector(365,-51,50), Angle(50,40,-0), Color(206,135,80), hfov=80, vfov=80,farz=100,brightness = 6,shadows=1, hidden="salon"}, + + -- Reverse + [8] = { "light",Vector(465,-45, 52), Angle(0,0,0), Color(255,50,50), brightness = 0.2, scale = 2.5, texture = "sprites/light_glow02", size=2 }, + [9] = { "light",Vector(465, 45, 52), Angle(0,0,0), Color(255,50,50), brightness = 0.2, scale = 2.5, texture = "sprites/light_glow02", size=2 }, + + -- Cabin + [10] = { "dynamiclight", Vector( 425, 0, 30), Angle(0,0,0), Color(216,161,92), distance = 550, brightness = 0.25, hidden = "salon"}, + + -- Interior + [11] = { "dynamiclight", Vector( 200, 0, 0), Angle(0,0,0), Color(255,245,245), brightness = 3, distance = 400 , fov=180,farz = 128, changable = true }, + [12] = { "dynamiclight", Vector( 0, 0, 0), Angle(0,0,0), Color(255,245,245), brightness = 3, distance = 400, fov=180,farz = 128, changable = true }, + [13] = { "dynamiclight", Vector(-200, 0, 0), Angle(0,0,0), Color(255,245,245), brightness = 3, distance = 400 , fov=180,farz = 128, changable = true }, + + -- Side lights + [15] = { "light",Vector(-52,67,45.5)+Vector(0,0.9,3.25), Angle(0,0,0), Color(254,254,254), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [16] = { "light",Vector(-52,67,45.5)+Vector(0,0.9,-0.02), Angle(0,0,0), Color(40,240,122), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [17] = { "light",Vector(-52,67,45.5)+Vector(0,0.9,-3.3), Angle(0,0,0), Color(254,210,18), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [18] = { "light",Vector(39,-67,45.5)+Vector(0,-0.9,3.25), Angle(0,0,0), Color(254,254,254), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [19] = { "light",Vector(39,-67,45.5)+Vector(0,-0.9,-0.02), Angle(0,0,0), Color(40,240,122), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [20] = { "light",Vector(39,-67,45.5)+Vector(0,-0.9,-3.3), Angle(0,0,0), Color(254,210,18), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + + [30] = { "light", Vector(455 , -45, -23.5), Angle(0,0,0), Color(255,220,180), brightness = 0.2, scale = 2.5, texture = "sprites/light_glow02", changable = true, size = 2}, + [31] = { "light", Vector(455 , 45, -23.5), Angle(0,0,0), Color(255,220,180), brightness = 0.2, scale = 2.5, texture = "sprites/light_glow02", changable = true, size = 2}, + [32] = { "light", Vector(455 , 0, 52), Angle(0,0,0), Color(255,220,180), brightness = 0.2, scale = 2.5, texture = "sprites/light_glow02", changable = true, size = 2}, + + -- Manometers + [40] = { "headlight",Vector(451.9,-13.5,-2+5.35),Angle(52.571899-15-5,-129.269775+25+15,49.853062) ,Color(255,130,25),farz = 8,nearz = 2,shadows = 1,brightness = 1,fov = 145, hidden = "Controller_body" }, + [41] = { "headlight",Vector(451.8,-21,-2+5.35),Angle(52.571899-15-5,-129.269775+25+15,49.853062),Color(255,130,25),farz = 8,nearz = 2,shadows = 1,brightness = 1,fov = 140, hidden = "Controller_body" }, + [42] = { "headlight",Vector(450.3,13.1,-4.4+5.35),Angle(-136.613632-33,-95.636734-28,137.434570),Color(255,130,25),farz = 8,nearz = 2,shadows = 0,brightness = 1.5,fov = 120, hidden = "Controller_body" }, + -- Voltmeter + [44] = { "headlight",Vector(450.273468,-32.306019,13.236823),Angle(-18.000000,25.541767,-90.600349),Color(255,130,25),farz = 10,nearz = 2,shadows = 1,brightness = 1,fov = 100, hidden = "Controller_body" }, + [45] = { "headlight",Vector(450.273468,-32.306019,18.236823),Angle(-12.000000,25.541767,-90.600349),Color(255,130,25),farz = 10,nearz = 2,shadows = 1,brightness = 1,fov = 100, hidden = "Controller_body" }, + + [46] = { "headlight",Vector(452,-32.2,12+3.5),Angle(60,-30,180),Color(255,130,25),farz = 8,nearz = 2,shadows = 0,brightness = 1,fov = 130, hidden = "Controller_body" }, + [47] = { "headlight",Vector(454.3,-28.3,12+3.5),Angle(60,-30,180),Color(255,130,25),farz = 8,nearz = 2,shadows = 0,brightness = 1,fov = 130, hidden = "Controller_body" }, + + + -- Manometers + [50] = { "headlight",Vector(451.9,-13.5,-2+5.35),Angle(52.571899-15-5,-129.269775+25+15,49.853062) ,Color(200,200,255),farz = 8,nearz = 2,shadows = 1,brightness = 2,fov = 145, hidden = "Controller_body" }, + [51] = { "headlight",Vector(451.8,-21,-2+5.35),Angle(52.571899-15-5,-129.269775+25+15,49.853062),Color(200,200,255),farz = 8,nearz = 2,shadows = 1,brightness = 2,fov = 140, hidden = "Controller_body" }, + [52] = { "headlight",Vector(450.3,13.1,-4.4+5.35),Angle(-136.613632-33,-95.636734-28,137.434570),Color(200,200,255),farz = 8,nearz = 2,shadows = 0,brightness = 2.5,fov = 120, hidden = "Controller_body" }, + -- Voltmeter + [54] = { "headlight",Vector(450.273468,-32.306019,13.236823),Angle(-18.000000,25.541767,-90.600349),Color(200,200,255),farz = 10,nearz = 2,shadows = 1,brightness = 2,fov = 100, hidden = "Controller_body" }, + [55] = { "headlight",Vector(450.273468,-32.306019,18.236823),Angle(-12.000000,25.541767,-90.600349),Color(200,200,255),farz = 10,nearz = 2,shadows = 1,brightness = 2,fov = 100, hidden = "Controller_body" }, + + [56] = { "headlight",Vector(452,-32.2,12+3.5),Angle(60,-30,180),Color(200,200,255),farz = 8,nearz = 2,shadows = 0,brightness = 2,fov = 130, hidden = "Controller_body" }, + [57] = { "headlight",Vector(454.3,-28.3,12+3.5),Angle(60,-30,180),Color(200,200,255),farz = 8,nearz = 2,shadows = 0,brightness = 2,fov = 130, hidden = "Controller_body" }, + + [70] = { "headlight",Vector( 425,-56,-70),Angle(0,-90,0),Color(255,220,180),brightness = 0.3,distance = 300 ,fov=120,shadows = 1, texture="effects/flashlight/soft", hidden = "Controller_body" }, + + Lamp_RTM = {"light", Vector(448.35,-33.95,-3.9), Angle(0,0,0),Color(255,180,60),brightness = 0.4,scale = 0.03, texture = "sprites/light_glow02", hidden = "Lamp_RTM"}, + + Lamps_cab1 = {"light", Vector(396.5,14.8,53), Angle(0,0,0),Color(255,220,180),brightness = 0.25,scale = 0.2, texture = "sprites/light_glow02", hidden = "Lamps_cab1"}, + Lamps_cab2 = {"light", Vector(428,-1.5,60), Angle(0,0,0),Color(255,220,180),brightness = 0.35,scale = 0.25, texture = "sprites/light_glow02", hidden = "Lamps_cab2"}, + Lamps2_cab1 = {"light", Vector(396.5,14.8,52.5), Angle(0,0,0),Color(255,220,180),brightness = 0.25,scale = 0.2, texture = "sprites/light_glow02", hidden = "Lamps2_cab1"}, + Lamps2_cab2 = {"light", Vector(428,-1.3,59.2), Angle(0,0,0),Color(255,220,180),brightness = 0.35,scale = 0.25, texture = "sprites/light_glow02", hidden = "Lamps2_cab2"}, +} + +--ENT.AutoPos = {Vector(407.3,-10.5,47),Vector(419.3,-57.5,47.5)} +--local X = Material( "metrostroi_skins/81-717/6.png") + +function ENT:Initialize() + self.BaseClass.Initialize(self) + --self.Train:SetPackedRatio("EmergencyValve_dPdT",leak) + --self.Train:SetPackedRatio("EmergencyValveEPK_dPdT",leak) + --self.Train:SetPackedRatio("EmergencyBrakeValve_dPdT",leak) + self.PUAV = self:CreateRT("717PUAV",512,128) + self.PAM = self:CreateRT("717PAM",1024,512) + self.LeftMirror = self:CreateRT("LeftMirror",128,256) + self.RightMirror = self:CreateRT("RightMirror",128,256) + + 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.VentCab = 0 + + self.BPSNBuzzVolume = 0 +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,i0,sosd) + + local mask = self:GetNW2Int("MaskType",1) + if self.MaskType ~= mask then + self:ShowHide("mask22_1",mask==1) + self:ShowHide("mask22_2",mask==2) + self:ShowHide("mask222_lvz",mask==3) + self:ShowHideSmooth("Headlights222_1",0) + self:ShowHideSmooth("Headlights222_2",0) + self:ShowHideSmooth("Headlights22_1",0) + self:ShowHideSmooth("Headlights22_2",0) + --[[if mask == 3 then + self.LightsOverride[30][2] = Vector(465,-48, -23.5) + self.LightsOverride[31][2] = Vector(465,48 , -23.5) + self.LightsOverride[32][2] = Vector(465,0 , -23.5) + elseif mask < 3 then + self.LightsOverride[30][2] = Vector(465,-45, -23.5) + self.LightsOverride[31][2] = Vector(465,45 , -23.5) + self.LightsOverride[32][2] = Vector(465,0 , 52) + end]] + end + + local HL1 = self:Animate("Headlights1",self:GetPackedBool("Headlights1") and 1 or 0,0,1,6,false) + local HL2 = self:Animate("Headlights2",self:GetPackedBool("Headlights2") and 1 or 0,0,1,6,false) + local RL = self:Animate("RedLights_a",self:GetPackedBool("RedLights") and 1 or 0,0,1,6,false) + if mask == 3 then + self:ShowHideSmooth("Headlights222_1",HL1) + self:ShowHideSmooth("Headlights222_2",HL2) + elseif mask < 3 then + self:ShowHideSmooth("Headlights22_1",HL1) + self:ShowHideSmooth("Headlights22_2",HL2) + end + + self:ShowHideSmooth("RedLights",RL) + self:SetLightPower(8,RL > 0,RL) + self:SetLightPower(9,RL > 0,RL) + + local headlight = HL1*0.6+HL2*0.4 + self:SetLightPower(1,headlight>0,headlight) + self:SetLightPower(2,self:GetPackedBool("RedLights"),RL) + self:SetLightPower(30,headlight > 0,headlight) + self:SetLightPower(31,headlight > 0,headlight) + self:SetLightPower(32,mask==3 and headlight > 0,headlight) + + + 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 Bortlamp_w = self:Animate("Bortlamp_w",self:GetPackedBool("DoorsW") and 1 or 0,0,1,16,false) + local Bortlamp_g = self:Animate("Bortlamp_g",self:GetPackedBool("GRP") and 1 or 0,0,1,16,false) + local Bortlamp_y = self:Animate("Bortlamp_y",self:GetPackedBool("BrW") and 1 or 0,0,1,16,false) + self:ShowHideSmooth("bortlamp1_w",Bortlamp_w) + self:ShowHideSmooth("bortlamp1_g",Bortlamp_g) + self:ShowHideSmooth("bortlamp1_y",Bortlamp_y) + self:ShowHideSmooth("bortlamp2_w",Bortlamp_w) + self:ShowHideSmooth("bortlamp2_g",Bortlamp_g) + self:ShowHideSmooth("bortlamp2_y",Bortlamp_y) + self:SetLightPower(15, Bortlamp_w > 0, Bortlamp_w) + self:SetLightPower(18, Bortlamp_w > 0, Bortlamp_w) + self:SetLightPower(16, Bortlamp_g > 0, Bortlamp_g) + self:SetLightPower(19, Bortlamp_g > 0, Bortlamp_g) + self:SetLightPower(17, Bortlamp_y > 0, Bortlamp_y) + self:SetLightPower(20, Bortlamp_y > 0, Bortlamp_y) + + self:Animate("Controller",self:GetPackedRatio("ControllerPosition"),0.3,0.02,2,false) + + self:Animate("reverser",self:GetNW2Int("ReverserPosition")/2,0,0.27,4,false) + self:Animate("krureverser",self:GetNW2Int("KRUPosition")/2,0.53,0.95,4,false) + self:ShowHide("reverser",self:GetNW2Int("WrenchMode",0)==1) + self:ShowHide("krureverser",self:GetNW2Int("WrenchMode",0)==2) + + local newSeats = self:GetNW2Bool("NewSeats") + self:ShowHide("seats_old",not newSeats) + self:ShowHide("seats_old_cap",not newSeats) + self:ShowHide("seats_new",newSeats) + self:ShowHide("seats_new_cap",newSeats) + self:Animate("PB",self:GetPackedBool("PB") and 1 or 0,0,0.2, 12,false) + self:Animate("UAVALever", self:GetPackedBool("UAVA") and 1 or 0, 0,0.6, 128, 3,false) + self:Animate("parking_brake", self:GetPackedBool("ParkingBrake") and 1 or 0,0.25,0, 4,false) + self:Animate("EPK_disconnect", self:GetPackedBool("EPK") and 1 or 0,0.25,0, 4,false) + self:Animate("EPV_disconnect", self:GetPackedBool("EPK") and 1 or 0,0.25,0, 4,false) + self:Animate("brake_disconnect",self:GetPackedBool("DriverValveBLDisconnect") and 1 or 0,0.25,0, 4,false) + self:Animate("train_disconnect",self:GetPackedBool("DriverValveTLDisconnect") and 1 or 0,0.25,0, 4,false) + self:Animate("valve_disconnect",self:GetPackedBool("DriverValveDisconnect") and 1 or 0,0.25,0, 4,false) + self:Animate("stopkran", self:GetPackedBool("EmergencyBrakeValve") and 0 or 1, 0.25,0, 128, 3,false) + + self:Animate("brake334",self:GetPackedRatio("CranePosition")/5,0.35,0.65,256,24) + self:Animate("brake013", Cpos[self:GetPackedRatio("CranePosition")] or 0, 0.03, 0.458, 256,24) + + self:Animate("UAVALever", self:GetPackedBool("UAVA") and 1 or 0, 0,0.6, 128, 3,false) + + self:Animate("brake_line",self:GetPackedRatio("BLPressure"),0.143,0.88,256,2)--,0.01) + self:Animate("train_line",self:GetPackedRatio("TLPressure"),0.143,0.88,256,0)--,0.01) + self:Animate("brake_cylinder",self:GetPackedRatio("BCPressure"),0.134,0.874,256,2)--,0.03) + + self:Animate("voltmeter",self:GetPackedRatio("EnginesVoltage"),0.396,0.658,nil,nil)--,256,2,0.01) + self:Animate("ampermeter",self:GetPackedRatio("EnginesCurrent"),0.39,0.655,nil,nil,256,2,0.01) + self:Animate("voltmeter2",self:GetPackedRatio("EnginesVoltage"),0.398-0.002,0.648+0.002,nil,nil)--,256,2,0.01) + self:Animate("ampermeter2",self:GetPackedRatio("EnginesCurrent"),0.398-0.009,0.648+0.008,nil,nil,256,2,0.01) + self:Animate("volt1",self:GetPackedRatio("BatteryVoltage"),0.625,0.376,256,0.2,false) + --self:Animate("voltmeter",0.5 or self:GetPackedRatio("EnginesVoltage"),0.396,0.658,nil,nil)--,256,2,0.01) + --self:Animate("ampermeter",0.5 or self:GetPackedRatio("EnginesCurrent"),0.39,0.655,nil,nil,256,2,0.01) + self:Animate("stopkran", self:GetPackedBool("EmergencyBrakeValve") and 0 or 1, 0.25,0, 128, 3,false) + + self:ShowHide("SSpeed1",self:GetPackedBool("LUDS")) + self:ShowHide("SSpeed2",self:GetPackedBool("LUDS")) + self:ShowHide("SpeedFact1",self:GetPackedBool("LUDS")) + self:ShowHide("SpeedFact2",self:GetPackedBool("LUDS")) + if self:GetPackedBool("LUDS") then + local speed = self:GetNW2Int("ALSSpeed") + if IsValid(self.ClientEnts["SSpeed1"])then self.ClientEnts["SSpeed1"]:SetSkin(math.floor(speed)%10) end + if IsValid(self.ClientEnts["SSpeed2"])then self.ClientEnts["SSpeed2"]:SetSkin(math.floor(speed*0.1)%10) end + for i=1,2 do + if IsValid(self.ClientEnts["SpeedFact"..i]) then self.ClientEnts["SpeedFact"..i]:SetSkin(math.ceil(math.Clamp((speed-4)/5-(i-1)*10,0,10))) end + end + end + + + local otsek1 = self:Animate("door_otsek1",self:GetPackedBool("OtsekDoor1") and 1 or 0,0,0.25,4,0.5) + local otsek2 = self:Animate("door_otsek2",self:GetPackedBool("OtsekDoor2") and 1 or 0,0,0.25,4,0.5) + local door1 = self:Animate("door1",self:GetPackedBool("RearDoor") and 1 or 0,0,0.25,4,0.5) + local door2 = self:Animate("door2",self:GetPackedBool("PassengerDoor") and 1 or 0,1,0.8,4,0.5) + local door3 = self:Animate("door3",self:GetPackedBool("CabinDoor") and 1 or 0,0,0.25,4,0.5) + 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 < 1) then + self.Door2 = door2 < 1 + self:PlayOnce("door2","bass",self.Door2 and 1 or 0) + end + if self.Door3 ~= (door3 > 0) then + self.Door3 = door3 > 0 + self:PlayOnce("door3","bass",self.Door3 and 1 or 0) + end + if self.Otsek1 ~= (otsek1 > 0) then + self.Otsek1 = otsek1 > 0 + if not self.Otsek1 then + self:PlayOnce("door_otsek1","bass",1) + end + end + if self.Otsek2 ~= (otsek2 > 0) then + self.Otsek2 = otsek2 > 0 + if not self.Otsek2 then + self:PlayOnce("door_otsek2","bass",1) + end + end + self:SetLightPower(3,self.Otsek1 and self:GetPackedBool("EqLights")) + self:SetLightPower(4,self.Otsek2 and self:GetPackedBool("EqLights")) + + local activeLights = 0 + for i = 1,12 do + local colV = self:GetNW2Vector("lamp"..i) + local col = Color(colV.x,colV.y,colV.z) + local state = self:Animate("Lamp1_"..i,self:GetPackedBool("lightsActive"..i) and 1 or 0,0,1,6,false) + self:ShowHideSmooth("lamp1_"..i,state,col) + activeLights = activeLights + state + end + for i=11,13 do + local col = self:GetNW2Vector("lampD"..i) + if self.LightsOverride[i].vec ~= col then + self.LightsOverride[i].vec = col + self.LightsOverride[i][4] = Color(col.x,col.y,col.z) + self:SetLightPower(i, false) + else + self:SetLightPower(i, activeLights > 0,activeLights/12) + end + end + + if self.KVR ~= self:GetNW2Bool("KVR") or self.Type ~= self:GetNW2Int("AVType",1) then + self.KVR = self:GetNW2Bool("KVR") + self.Type = self:GetNW2Int("AVType",1) + self.RingTypePA = nil + self.RingType = nil + self:ShowHide("cabine_old",not self.KVR) + self:HidePanel("HVMeters_O",self.KVR) + self:HidePanel("HVMeters_N",not self.KVR) + self:ShowHide("Controller_panel_old",not self.KVR) + self:ShowHide("voltmeter",not self.KVR) + self:ShowHide("ampermeter",not self.KVR) + self:HidePanel("HelperPanel_C",self.KVR) + self:HidePanel("Battery_C",self.KVR) + self:HidePanel("Block5_6_old",self.KVR or self.Type==4) + self:HidePanel("Block5_6_old_paksd",self.KVR or self.Type~=4) + self:HidePanel("Block7_old",self.KVR) + self:HidePanel("AV_C",self.KVR) + self:HidePanel("VRD_C",self.KVR) + self:HidePanel("SOSD_C",self.KVR) + self:ShowHide("Controller_panel_new",self.KVR) + self:ShowHide("cabine_new",self.KVR) + self:ShowHide("voltmeter2",self.KVR) + self:ShowHide("ampermeter2",self.KVR) + self:HidePanel("HelperPanel_R",not self.KVR) + self:HidePanel("Battery_R",not self.KVR) + self:HidePanel("Block5_6_kvr",not self.KVR) + self:HidePanel("Block7_kvr",not self.KVR) + self:HidePanel("AV_R",not self.KVR) + self:HidePanel("AV_S",not self.KVR) + --self:HidePanel("BUD_R",not self.KVR) + self:HidePanel("SOSD_R",not self.KVR) + self:ShowHide("handrails_old",not self.KVR) + self:ShowHide("handrails_new",self.KVR) + + self:ShowHide("ARS13Set",not self.KVR) + self:ShowHide("Radio13Set",not self.KVR) + self:ShowHide("Controller_puav",self.Type == 2) + self:ShowHide("pam",self.Type~=2) + self:HidePanel("PUAVO",self.Type~=1) + self:HidePanel("PUAVOScreen",self.Type~=1) + self:HidePanel("PUAVN",self.Type~=2) + self:HidePanel("PUAVNLights",self.Type~=2) + self:HidePanel("PUAVNScreen",self.Type~=2) + self:HidePanel("PAMScreen",self.Type==2) + self:HidePanel("PAM",self.Type==2) + self:HidePanel("PAM1",self.Type==2) + self:ShowHide("1P:RC1Toggle",self.Type==4) + self:ShowHide("1P:RC1Toggle_pl",self.Type==4) + self:ShowHide("1:RC2Toggle",self.Type~=4) + self:ShowHide("1:RC2Toggle_pl",self.Type~=4) + self:ShowHide("1:RC1Toggle",self.Type~=4) + self:ShowHide("1:RC1Toggle_pl",self.Type~=4) + self:ShowHide("1:VAUToggle",self.Type~=4) + self:ShowHide("1:VRDToggle",self.Type~=4) + self:ShowHide("2P:RC1Toggle",self.Type==4) + self:ShowHide("2P:RC1Toggle_pl",self.Type==4) + self:ShowHide("2:RC2Toggle",self.Type~=4) + self:ShowHide("2:RC2Toggle_pl",self.Type~=4) + self:ShowHide("2:RC1Toggle",self.Type~=4) + self:ShowHide("2:RC1Toggle_pl",self.Type~=4) + self:ShowHide("2:VAUToggle",self.Type~=4) + self:ShowHide("2:VRDToggle",self.Type~=4) + self:ShowHide("Controller_puav1",self.Type == 1) + self:ShowHide("2:ARSToggle",self.Type~=4) + self:ShowHide("2:ALSToggle",self.Type~=4) + self:ShowHide("!VPA2",self.Type==4) + self:ShowHide("!VPA2_label1",self.Type==4) + self:ShowHide("2:VPAOnSet",self.Type==4) + self:ShowHide("2:VPAOffSet",self.Type==4) + self:ShowHide("1:A55Toggle_label1",self.Type==2) + self:ShowHide("1:A58Toggle_label1",self.Type==2) + self:ShowHide("1:A59Toggle_label1",self.Type==2) + self:ShowHide("1:A61Toggle_label1",self.Type==2) + self:ShowHide("1:P:A59Toggle_label1",self.Type~=2) + self:ShowHide("1:A58Toggle",self.Type==2) + self:ShowHide("1:A59Toggle",self.Type==2) + self:ShowHide("1:A61Toggle",self.Type==2) + self:ShowHide("1:P:A58Toggle",self.Type~=2) + self:ShowHide("1:P:A59Toggle",self.Type~=2) + self:ShowHide("1:P:A61Toggle",self.Type~=2) + self:ShowHide("A58Toggle",self.Type==2) + self:ShowHide("A59Toggle",self.Type==2) + self:ShowHide("A61Toggle",self.Type==2) + self:ShowHide("P:A58Toggle",self.Type~=2) + self:ShowHide("P:A59Toggle",self.Type~=2) + self:ShowHide("P:A61Toggle",self.Type~=2) + self:ShowHideSmooth("Lamps2_cab2",0) + self:ShowHideSmooth("Lamps2_cab1",0) + self:ShowHideSmooth("Lamps_cab2",0) + self:ShowHideSmooth("Lamps_cab1",0) + self:ShowHideSmooth("Lamp_RTM",0) + self:SetLightPower("Lamp_RTM",false,0) + self:SetLightPower("Lamps_cab1",false,0) + self:SetLightPower("Lamps_cab2",false,0) + self:SetLightPower("Lamps2_cab1",false,0) + self:SetLightPower("Lamps2_cab2",false,0) + self:ShowHide("VAVToggle_label1",self.Type == 2 and self:GetNW2Bool("SBPP")) + + self:SetLightPower(44,false) + self:SetLightPower(45,false) + self:SetLightPower(46,false) + self:SetLightPower(47,false) + self:SetLightPower(54,false) + self:SetLightPower(55,false) + self:SetLightPower(56,false) + self:SetLightPower(57,false) + end + + if self.USS ~= self:GetNW2Bool("NewUSS") then + self:ShowHide("uss_lamps1",not self:GetNW2Bool("NewUSS")) + self:HidePanel("USS1",self:GetNW2Bool("NewUSS")) + self:ShowHide("uss_lamps2",self:GetNW2Bool("NewUSS")) + self:ShowHide("!NMPressureLow2",self:GetNW2Bool("NewUSS")) + self:ShowHide("!UAVATriggered2",self:GetNW2Bool("NewUSS")) + self:ShowHide("!NMPressureLow2_lamp",self:GetNW2Bool("NewUSS")) + self:ShowHide("!UAVATriggered2_lamp",self:GetNW2Bool("NewUSS")) + self.USS = self:GetNW2Bool("NewUSS") + end + + local lamps_cab2 = self:Animate("lamps_cab2",self:GetPackedBool("EqLights") and 1 or 0,0,1,5,false) + local lamps_cab1 = self:Animate("lamps_cab1",self:GetPackedBool("CabLights") and 1 or 0,0,1,5,false) + local lamps_rtm = self:Animate("lamps_rtm",self:GetPackedBool("VPR") and 1 or 0,0,1,8,false) + local cabStrength = (lamps_cab1*0.3+lamps_cab2*0.7)^1.5 + self:SetLightPower(10,cabStrength > 0, cabStrength) + if self.KVR then + self:ShowHideSmooth("Lamps_cab2",lamps_cab2) + self:ShowHideSmooth("Lamps_cab1",lamps_cab1) + self:SetLightPower("Lamps_cab1", lamps_cab1 > 0,lamps_cab1) + self:SetLightPower("Lamps_cab2", lamps_cab2 > 0,lamps_cab2) + self:SetLightPower(46,not WhitePLights and self:GetPackedBool("PanelLights")) + self:SetLightPower(47,not WhitePLights and self:GetPackedBool("PanelLights")) + self:SetLightPower(56,WhitePLights and self:GetPackedBool("PanelLights")) + self:SetLightPower(57,WhitePLights and self:GetPackedBool("PanelLights")) + else + self:ShowHideSmooth("Lamps2_cab2",lamps_cab2) + self:ShowHideSmooth("Lamps2_cab1",lamps_cab1) + self:SetLightPower("Lamps2_cab1", lamps_cab1 > 0,lamps_cab1) + self:SetLightPower("Lamps2_cab2", lamps_cab2 > 0,lamps_cab2) + self:ShowHideSmooth("Lamp_RTM",lamps_rtm) + self:SetLightPower("Lamp_RTM",lamps_rtm > 0,lamps_rtm) + self:SetLightPower(44,not WhitePLights and self:GetPackedBool("PanelLights")) + self:SetLightPower(45,not WhitePLights and self:GetPackedBool("PanelLights")) + self:SetLightPower(54,WhitePLights and self:GetPackedBool("PanelLights")) + self:SetLightPower(55,WhitePLights and self:GetPackedBool("PanelLights")) + end + self:SetSoundState("vpr",lamps_rtm>0 and 1 or 0,1) + + 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) + + local c013 = self:GetNW2Int("Crane",0)==1 + self:ShowHide("brake_valve_334",not c013) + self:ShowHide("brake334",not c013) + self:ShowHide("brake_disconnect",not c013) + self:ShowHide("train_disconnect",not c013) + self:HidePanel("DriverValveBLDisconnect",c013) + self:HidePanel("DriverValveTLDisconnect",c013) + self:HidePanel("EPKDisconnect",c013) + self:ShowHide("EPK_disconnect",not c013) + self:ShowHide("brake_valve_013",c013) + self:ShowHide("brake013",c013) + self:ShowHide("valve_disconnect",c013) + self:ShowHide("EPV_disconnect",c013) + self:HidePanel("EPVDisconnect",not c013) + self:HidePanel("DriverValveDisconnect",not c013) + --[[ -- Animate AV switches + for i in ipairs(self.Panel.AVMap) do + local value = self:GetPackedBool(64+(i-1)) and 1 or 0 + self:Animate("a"..(i-1),value,0,1,8,false) + self:Animate("1_a"..(i-1),value,0,1,8,false) + end--]] + --print(self.ClientProps["a0"]) + -- 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) + --self:InitializeSounds() + 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.8+self.DoorLoopStates[id]*0.2) + local n_l = "door"..i.."x"..k--.."a" + --local n_r = "door"..i.."x"..k.."b" + local dlo = 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,0.95,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 + + --[[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*0.6,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 dT = self.DeltaTime + local rollingi = math.min(1,self.TunnelCoeff+math.Clamp((self.StreetCoeff-0.82)/0.3,0,1)) + local rollings = math.max(self.TunnelCoeff*0.6,self.StreetCoeff) + 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",0*rollingi*rol40,rol40p) + --self:SetSoundState("rolling_70",0*rollingi*rol70,rol70p) + --self:SetSoundState("rolling_80",0*rollingi*rol80,rol80p) + + + local rol32 = math.Clamp((speed-25)/13,0,1)*(1-math.Clamp((speed-40)/10,0,1)) + local rol32p = Lerp((speed-20)/50,0.8,1.2) + local rol68 = math.Clamp((speed-40)/10,0,1)*(1-math.Clamp((speed-50)/20,0,1)) + local rol68p = Lerp(0.6+(speed-68)/26*0.2,0.6,1.4) + local rol75 = math.Clamp((speed-55)/20,0,1) + local rol75p = Lerp(0.8+(speed-75)/15*0.2,0.6,1.2) + self:SetSoundState("rolling_32",rollingi*rol32,rol32p) + self:SetSoundState("rolling_68",rollingi*rol68,rol68p) + self:SetSoundState("rolling_75",rollingi*rol75,rol75p) + + --local rolm = math.Clamp(speed/30,0,1)*(1-math.Clamp((speed-35)/40,0,1)) + --local rolh = math.Clamp((speed-35)/40,0,1.5)+math.Clamp((speed-65)/15,0,1) + --self:SetSoundState("rolling_medium",rollingi*rolm,Lerp((speed-8)/106,0.6,1)) --57 + --self:SetSoundState("rolling_high" ,rollingi*rolh,rol70p) --70 + + 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) + local parking_brake = self:GetPackedRatio("ParkingBrakePressure_dPdT",0) + local parking_brake_abs = math.Clamp(math.abs(parking_brake)-0.3,0,1) + if self.ParkingBrake1 ~= (parking_brake<1) then + self.ParkingBrake1 = (parking_brake<1) + if self.ParkingBrake1 then self:PlayOnce("parking_brake_en","bass",1,1) end + end + if self.ParkingBrake2 ~= (parking_brake>-0.8) then + self.ParkingBrake2 = (parking_brake>-0.8) + if self.ParkingBrake2 then self:PlayOnce("parking_brake_rel","bass",0.6,1) end + end + self:SetSoundState("parking_brake",parking_brake_abs,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 c013 then + 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("crane334_brake",0,1.0) + self:SetSoundState("crane334_brake_reflection",0,1.0) + self:SetSoundState("crane334_brake_slow",0,1.0) + self:SetSoundState("crane334_release",0,1.0) + 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) + else + self:SetSoundState("crane013_brake",0,1.0) + self:SetSoundState("crane013_release",0,1.0) + --self:SetSoundState("crane013_release",0,1.0) + + 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) + end + local emergencyValveEPK = self:GetPackedRatio("EmergencyValveEPK_dPdT",0) + self.EmergencyValveEPKRamp = math.Clamp(self.EmergencyValveEPKRamp + 1.0*((0.5*emergencyValveEPK)-self.EmergencyValveEPKRamp)*dT,0,1) + self:SetSoundState("epk_brake",self.EmergencyValveEPKRamp,1.0) + --[[ if emergencyValveEPK > 0 and not self.EmergencyValveEPKStart then + self:PlayOnce("epk_brake_start","bass",1,1) + self.EmergencyValveEPKStart = true + end--]] + if emergencyValveEPK <= 0 and self.EmergencyValveEPKStart then + self.EmergencyValveEPKStart = false + end + + 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) + 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 + self:SetSoundState("compressor",self:GetPackedBool("Compressor") and 0.6 or 0,1) + self:SetSoundState("compressor2",self:GetPackedBool("Compressor") and 0.8 or 0,1) + + local vCstate = self:GetPackedRatio("M8")/2 + if self.VentCab < vCstate then + self.VentCab = math.min(1,self.VentCab + dT/2.7) + elseif self.VentCab > vCstate then + self.VentCab = math.max(0,self.VentCab - dT/2.7) + end + self:SetSoundState("vent_cabl",math.Clamp(self.VentCab*2,0,1) ,1) + self:SetSoundState("vent_cabh",math.Clamp((self.VentCab-0.5)*2,0,1),1) + + if self.RingType ~= self:GetNW2Int("RingType",1) then + self.RingType = self:GetNW2Int("RingType",1) + self:SetSoundState(self.RingName,0,0) + + self.RingName = "ring3" + self.RingPitch = 1 + if self.RingType == 2 then + self.RingName = "ring2" + elseif self.RingType==3 then + self.RingPitch = 0.8 + elseif self.RingType==4 then + self.RingName = "ring" + end + end + if self.RingTypePA ~= self:GetNW2Int("RingTypePA",1) then + self.RingTypePA = self:GetNW2Int("RingTypePA",1) + self:SetSoundState(self.PARingName,0,0) + + self.RingPitchPA = 1 + if self.Type==2 then + self.PARingName = "pu_ring2" + if self.RingTypePA == 2 then + self.PARingName = "pu_ring" + elseif self.RingTypePA==3 then + self.RingPitchPA = 0.8 + end + else + self.PARingName = "pa_ring" + if self.RingTypePA == 2 then + self.RingPitchPA = 0.8 + elseif self.RingTypePA == 3 then + self.PARingName = "pa_ring2" + end + end + end + -- ARS/ringer alert + self:SetSoundState(self.RingName,self:GetPackedBool("Buzzer") and 0.6 or 0,self.RingPitch) + if self:GetPackedBool("PURingZ") and not self.PUZeroTimer then self.PUZeroTimer = RealTime() end + if not self:GetPackedBool("PURingZ") and self.PUZeroTimer then self.PUZeroTimer = nil end + local pTime = self.PUZeroTimer and RealTime()-self.PUZeroTimer + self:SetSoundState(self.PARingName,(self.Type~=2 and self:GetPackedBool("PURing") or self.Type==2 and (self:GetPackedBool("PURing") or pTime and (pTime < 3 or pTime%1 > 0.5) and pTime<=7)) and 0.6 or 0,self.RingPitchPA)--0.79 + + if self:GetPackedBool("RK") then self.RKTimer = CurTime() end + self:SetSoundState("rk",(self.RKTimer and (CurTime() - self.RKTimer) < 0.2) and 0.7 or 0,1) + + self.BPSNType = self:GetNW2Int("BPSNType",5) + if not self.OldBPSNType then self.OldBPSNType = self.BPSNType end + if self.BPSNType ~= self.OldBPSNType then + for i=1,4 do + self:SetSoundState("bpsn"..i,0,1.0) + end + end + self.OldBPSNType = self.BPSNType + if self.BPSNType<5 then + self:SetSoundState("bpsn"..self.BPSNType,self:GetPackedBool("BPSN") and 1 or 0,1) --FIXME громкоÑть по другому + end + + local cabspeaker = self:GetPackedBool("AnnCab") + local work = self:GetPackedBool("AnnPlay") + local buzz = self:GetPackedBool("AnnBuzz") and self:GetNW2Int("AnnouncerBuzz") + local noise = self:GetNW2Int("AnnouncerNoise", -1) + local volume = self:GetNW2Float("UPOVolume",1) + local noisevolume = self:GetNW2Float("UPONoiseVolume",1) + + local buzzvolume = volume + if self.Sounds["announcer2"] and IsValid(self.Sounds["announcer2"]) then buzzvolume = (1-(self.Sounds["announcer2"]:GetLevel())*math.Rand(0.9,3))*buzzvolume end + if self.BPSNBuzzVolume > buzzvolume then + self.BPSNBuzzVolume = math.Clamp(self.BPSNBuzzVolume + 8*(buzzvolume-self.BPSNBuzzVolume)*dT,0.1,1) + else + self.BPSNBuzzVolume = math.Clamp(self.BPSNBuzzVolume + 0.4*(buzzvolume-self.BPSNBuzzVolume)*dT,0.1,1) + end + + for k,v in ipairs(self.AnnouncerPositions) do + local play = k==1 and cabspeaker or k~=1 and work + self:SetSoundState("announcer_noiseW"..k,play and noisevolume*volume or 0,1) + for i=1,3 do + self:SetSoundState(Format("announcer_noise%d_%d",i,k),(play and i==noise) and volume*self.BPSNBuzzVolume*self:GetNW2Float("UPOBuzzVolume",1) or 0,1) + end + for i=1,2 do + self:SetSoundState(Format("announcer_buzz%d_%d",i,k),(play and i==buzz) and volume*self.BPSNBuzzVolume*self:GetNW2Float("UPOBuzzVolume",1) or 0,1) + end + if IsValid(self.Sounds["announcer"..k]) then self.Sounds["announcer"..k]:SetVolume((k ~= 1 and work or k==1 and cabspeaker) and v[3]*volume or 0) end + end +end + +function ENT:OnAnnouncer(volume,id) + local cabspeaker = self:GetPackedBool("AnnCab") + local work = self:GetPackedBool("AnnPlay") + return (id ~= 1 and work or id == 1 and cabspeaker) and self:GetNW2Float("UPOVolume",1)*volume or 0 +end + +function ENT:Draw() + self.BaseClass.Draw(self) +end +function ENT:DrawPost() + + self.RTMaterial:SetTexture("$basetexture",self.PUAV) + self:DrawOnPanel("PUAVOScreen",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(256,64,512,128,0) + end) + self:DrawOnPanel("PUAVNScreen",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(256,64,512,128,0) + end) + self.RTMaterial:SetTexture("$basetexture",self.PAM) + self:DrawOnPanel("PAMScreen",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(512,256,1024,512,0) + end) + 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) + if button == "ShowHelp" then + RunConsoleCommand("metrostroi_train_manual") + end +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 == "pkg" then 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 == "lk2c" then + local speed = self:GetPackedRatio("Speed") + self.SoundPositions[soundid][1] = 350-Lerp(speed/0.1,0,250) + return soundid,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "LK2" then + local speed = self:GetPackedRatio("Speed") + if range == 0 and speed < 20 and self:GetPackedRatio("EnginesCurrent") > 0.55 then + self:PlayOnce("lk2c","bass",1,pitch) + end + 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 == "LK5" and range > 0 then + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["lk5_on"][1] = 350-Lerp(speed/0.1,0,250) + return "lk5_on",location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "brake" then + self:PlayOnce("brake_f",location,range,pitch) + self:PlayOnce("brake_b",location,range,pitch) + return + end + if soundid == "RVT" then + return range > 0 and "rvt_on" or "rvt_off",location,1,pitch + end + if soundid == "K6" then + return range > 0 and "k6_on" or "k6_off",location,1,pitch + end + if soundid == "R1_5" then + return range > 0 and "r1_5_on" or "r1_5_off",location,1,pitch + end + if soundid == "RPB" then + return range > 0 and "rpb_on" or "rpb_off",location,1,pitch + end + if soundid == "KD" then + return range > 0 and "kd_on" or "kd_off",location,1,pitch + end + if soundid == "KK" then + return range > 0 and "kk_on" or "kk_on",location,1,0.6+range*0.1 + end + if soundid == "K25" then + return range > 0 and "k25_on" or "k25_off",location,1,pitch + end + if soundid == "RO" then + return range > 0 and "ro_on" or "ro_off",location,1,pitch + end + if soundid == "Rp8" then + return range > 0 and "rp8_on" or "rp8_off",location,1,pitch + end + if soundid == "ROT" then + return range > 0 and "rot_on" or "rot_off",location,1,pitch + end + if soundid == "AVU" then + return range > 0 and "avu_on" or "avu_off",location,1,0.9 + end + if soundid == "UAVAC" then + return "uava_reset",location,range,pitch + end + elseif soundid:sub(1,4)=="kv70" and self:GetNW2Bool("SecondKV") then return soundid.."_2",location,range,pitch end + return soundid,location,range,pitch +end +Metrostroi.GenerateClientProps() \ No newline at end of file diff --git a/lua/entities/gmod_subway_81-717_lvz/init.lua b/lua/entities/gmod_subway_81-717_lvz/init.lua new file mode 100644 index 0000000..e7d37c6 --- /dev/null +++ b/lua/entities/gmod_subway_81-717_lvz/init.lua @@ -0,0 +1,914 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +ENT.BogeyDistance = 650 -- Needed for gm trainspawner + +--"DURASelectMain","DURASelectAlternate","DURAToggleChannel","DURAPowerToggle", +ENT.SyncTable = { + "R_UNch","R_ZS","R_G","R_UPO","KVT", + "VZ1","VUD1","KDL","KDLR","KDLK","KDLRK","KDP","KDPK","DoorSelect", + "KRZD","R_VPR","VozvratRP","AVU","KVP","ConverterProtection","RZP",--"SP","GreenRP", + "VPAOn","VPAOff", + "KSN","Ring","ARS","ALS","OtklAVU","TormAT","L_1","L_2","L_3","OhrSig", + "VMK","BPSNon","RezMK","ARS13","Radio13","L_4","VUS","VAH","VAD","KRP","OVT", + "EmergencyBrakeValve", + "AIS","AV3","AV1","A53","A55","A56","A54","A17","A44","A39","A70","A14","A74","A26","AR63","AS1","A13","A21","A31","A32","A16","A12","A24","A49","A27","A72","A50","AV3","AV6","A29","A46","A47","A71","A7","A9","A84","A8","A52","A19","A48","A10","A22","A30","A1","A2","A3","A4","A5","A6","A18","A73","A20","A25","A11","A37","A45","A38","A51","A65","A42","A43","A41","A40","A75","A76","A60","A57","A28", + "A58","A59","A61","A15","A66", + "RC1","VB","VRD","PB", "UAVA","UAVAC", + "DriverValveBLDisconnect","DriverValveTLDisconnect","DriverValveDisconnect","ParkingBrake","EPK", + "VUD2","VDL","VOPD","Wiper", "GV", "RC2","VAU", + "KH","VAV","KSZD","VZP","VSOSD", + "PAM7","PAM8","PAM9","PAMLeft","PAMRight","PAM4","PAM5","PAM6","PAMUp","PAM1","PAM2","PAM3","PAMDown","PAM0","PAMEnter","PAMEsc","PAMF","PAMM","PAMP", +} +ENT.SyncFunctions = { + "" +} +function ENT:Initialize() + self.Plombs = { + VAH = true, + VAD = true, + OtklAVU = true, + OVT = true, + R_VPR = true, + A41=true, + AIS=true, + --TormAT = true, + --KAH = {true,"KAHK"}, + --KAHK = true, + RC1 = true, + RC2 = true, + UAVA = true, + Init = true, + } + -- Set model and initialize + self.MaskType = 1 + self.LampType = 1 + self.WorkingLights = 6 + self:SetModel("models/metrostroi_train/81-717/81-717_spb.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create seat entities + self.DriverSeat = self:CreateSeat("driver",Vector(417,0,-22.5)) + self.InstructorsSeat = self:CreateSeat("instructor",Vector(425,50,-28+3),Angle(0,270,0)) + self.ExtraSeat1 = self:CreateSeat("instructor",Vector(410,30,-43),Angle(0,90,0),"models/vehicles/prisoner_pod_inner.mdl") + self.ExtraSeat2 = self:CreateSeat("instructor",Vector(422,-45,-43),Angle(0,90,0),"models/vehicles/prisoner_pod_inner.mdl") + self.ExtraSeat3 = self:CreateSeat("instructor",Vector(402,50,-43),Angle(0,50,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) + self.ExtraSeat3:SetColor(Color(0,0,0,0)) + self.ExtraSeat3:SetRenderMode(RENDERMODE_TRANSALPHA) + + -- Create bogeys + if Metrostroi.BogeyOldMap then + self.FrontBogey = self:CreateBogey(Vector( 317-5,0,-84),Angle(0,180,0),true,"717") + self.RearBogey = self:CreateBogey(Vector(-317+0,0,-84),Angle(0,0,0),false,"717") + self.FrontCouple = self:CreateCouple(Vector( 419.5,0,-62),Angle(0,0,0),true,"722") + self.RearCouple = self:CreateCouple(Vector(-419.5-6.545,0,-62),Angle(0,180,0),false,"717") + else + self.FrontBogey = self:CreateBogey(Vector( 317-11,0,-80),Angle(0,180,0),true,"717") + self.RearBogey = self:CreateBogey(Vector(-317+0,0,-80),Angle(0,0,0),false,"717") + self.FrontCouple = self:CreateCouple(Vector( 410-3,0,-66),Angle(0,0,0),true,"722") + self.RearCouple = self:CreateCouple(Vector(-423+2,0,-66),Angle(0,180,0),false,"717") + end + local pneumoPow = 1.1+(math.random()^0.4)*0.3 + self.FrontBogey.PneumaticPow = pneumoPow + self.RearBogey.PneumaticPow = pneumoPow + self.FrontCouple.EKKDisconnected = true + + -- 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_8] = "KRPSet", + + [KEY_EQUAL] = "R_Program1Set", + [KEY_MINUS] = "R_Program2Set", + + [KEY_G] = "VozvratRPSet", + + [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] = {"KDL",helper="VDLSet"}, + [KEY_D] = "KDP", + [KEY_V] = {"VUD1Toggle",helper="VUD2Toggle"}, + [KEY_L] = "HornEngage", + [KEY_N] = "VZ1Set", + [KEY_PAD_1] = "PneumaticBrakeSet1", + [KEY_PAD_2] = "PneumaticBrakeSet2", + [KEY_PAD_3] = "PneumaticBrakeSet3", + [KEY_PAD_4] = "PneumaticBrakeSet4", + [KEY_PAD_5] = "PneumaticBrakeSet5", + [KEY_PAD_6] = "PneumaticBrakeSet6", + [KEY_PAD_7] = "PneumaticBrakeSet7", + [KEY_PAD_DIVIDE] = "KRPSet", + [KEY_PAD_MULTIPLY] = "KAHSet", + + [KEY_SPACE] = "PBSet", + [KEY_BACKSPACE] = {"EmergencyBrake",helper="EmergencyBrakeValveToggle"}, + + [KEY_PAD_ENTER] = "KVWrenchKV", + [KEY_PAD_0] = "DriverValveDisconnect", + [KEY_PAD_DECIMAL] = "EPKToggle", + [KEY_LSHIFT] = { + def="KV_Unlock", + [KEY_SPACE] = "KVTSet", + [KEY_V] = "KSZDSet", + [KEY_R] = "VZPToggle", + + [KEY_2] = "RingSet", + [KEY_4] = "KVSet0Fast", + [KEY_L] = "DriverValveDisconnect", + + [KEY_7] = "KVWrenchNone", + [KEY_8] = "KVWrenchKRU", + [KEY_9] = "KVWrenchKV9", + [KEY_0] = "KVWrenchKV", + [KEY_6] = "KVSetT1A", + + [KEY_PAD_ENTER] = "KVWrenchNone", + }, + + [KEY_LALT] = { + [KEY_V] = "VUD1Toggle", + [KEY_L] = "EPKToggle", + [KEY_PAD_PLUS] = "Custom2Set", + [KEY_PAD_MINUS] = "Custom1Set", + [KEY_PAD_ENTER] = "Custom3Set", + [KEY_PAD_ENTER] = "Custom3Set", + [KEY_PAD_MULTIPLY] = "CustomCToggle", + [KEY_PAD_7] = "PAM7Set", + [KEY_PAD_8] = "PAM8Set", + [KEY_PAD_9] = "PAM9Set", + [KEY_LEFT] = "PAMLeftSet", + [KEY_RIGHT] = "PAMRightSet", + [KEY_PAD_4] = "PAM4Set", + [KEY_PAD_5] = "PAM5Set", + [KEY_PAD_6] = "PAM6Set", + [KEY_UP] = "PAMUpSet", + [KEY_PAD_1] = "PAM1Set", + [KEY_PAD_2] = "PAM2Set", + [KEY_PAD_3] = "PAM3Set", + [KEY_DOWN] = "PAMDownSet", + [KEY_PAD_0] = "PAM0Set", + [KEY_PAD_ENTER] = "PAMEnterSet", + [KEY_PAD_DECIMAL] = "PAMEscSet", + [KEY_PAD_DIVIDE] = "PAMFSet", + [KEY_PAD_MULTIPLY] = "PAMMSet", + [KEY_PAD_MINUS] = "PAMPSet", + }, + } + 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(461.5, -34, -53), Radius = 8, + }, + { + ID = "FrontTrainLineIsolationToggle", + Pos = Vector(461.5, 33, -53), Radius = 8, + }, + { + ID = "RearBrakeLineIsolationToggle", + Pos = Vector(-474.5, 33, -53), Radius = 8, + }, + { + ID = "RearTrainLineIsolationToggle", + Pos = Vector(-474.5, -34, -53), Radius = 8, + }, + { + ID = "CabinDoor", + Pos = Vector(456,66,3), Radius = 12, + }, + { + ID = "CabinDoor", + Pos = Vector(385,66,0), Radius = 16, + }, + { + ID = "RearDoor", + Pos = Vector(-464.8,-35,4), Radius = 20, + }, + { + ID = "PassengerDoor", + Pos = Vector(375.5,13.5,12), Radius = 20, + }, + { + ID = "GVToggle", + Pos = Vector(140.50,62,-64), Radius = 10, + }, + { + ID = "AirDistributorDisconnectToggle", + Pos = Vector(-177, -66, -50), Radius = 20, + }, + } + + -- Cross connections in train wires + self.TrainWireInverts = { + [28] = true, + [34] = true, + } + self.TrainWireCrossConnections = { + [5] = 4, -- Reverser F<->B + [31] = 32, -- Doors L<->R + [53] = 54, + } + + self.RearDoor = false + self.FrontDoor = false + self.CabinDoor = false + self.PassengerDoor = false + self.OtsekDoor1 = false + self.OtsekDoor2 = false + + self.Lamps = { + broken = {}, + } + local rand = math.random() > 0.8 and 1 or math.random(0.95,0.99) + for i = 1,12 do + if math.random() > rand then self.Lamps.broken[i] = math.random() > 0.5 end + end + + self:SetNW2Int("Type",self:GetNW2Int("Type",3)) + self:TrainSpawnerUpdate() + self:OnButtonPress("KVWrenchNone") +end + +function ENT:TriggerLightSensor(coil,plate) + if self.LightSensor then + self.PAM:TriggerSensor(coil,plate) + end +end +function ENT:UpdateLampsColors() + local lCol,lCount = Vector(),0 + if self.LampType == 1 then + local r,g,col = 15,15 + local typ = math.Round(math.random()) + local rnd = 0.5+math.random()*0.5 + for i = 1,13 do + local chtp = math.random() > rnd + + if typ == 0 and not chtp or typ == 1 and chtp then + g = math.random()*15 + col=Vector(240+g,240+g,255) + else + b = -5+math.random()*20 + col = Vector(255,255,235+b) + end + lCol = lCol + col + lCount = lCount + 1 + if i%4==0 then + local id = 10+math.ceil(i/4) + + local tcol = (lCol/lCount)/255 + --self.Lights[id][4] = Vector(tcol.r,tcol.g^3,tcol.b^3)*255 + self:SetNW2Vector("lampD"..id,Vector(tcol.r,tcol.g^3,tcol.b^3)*255) + lCol = Vector() + lCount = 0 + end + self:SetNW2Vector("lamp"..i,col) + end + else + local rnd1,rnd2,col = 0.7+math.random()*0.3,math.random() + local typ = math.Round(math.random()) + local r,g = 15,15 + for i = 1,25 do + local chtp = math.random() > rnd1 + if typ == 0 and not chtp or typ == 1 and chtp then + if math.random() > rnd2 then + r = -20+math.random()*25 + g = 0 + else + g = -5+math.random()*15 + r = g + end + col = Vector(245+r,228+g,189) + else + if math.random() > rnd2 then + g = math.random()*15 + b = g + else + g = 15 + b = -10+math.random()*25 + end + col = Vector(255,235+g,235+b) + end + lCol = lCol + col + lCount = lCount + 1 + if i%8.3<1 then + local id = 9+math.ceil(i/8.3) + + local tcol = (lCol/lCount)/255 + --self.Lights[id][4] = Vector(tcol.r,tcol.g^3,tcol.b^3)*255 + self:SetNW2Vector("lampD"..id,Vector(tcol.r,tcol.g^3,tcol.b^3)*255) + lCol = Vector() lCount = 0 + end + self:SetNW2Vector("lamp"..i,col) + end + end +end +function ENT:TrainSpawnerUpdate() + local typ = self:GetNW2Int("Type") + local num = self.WagonNumber + self:SetNW2Bool("Custom",self.CustomSettings) + math.randomseed(num+817171) + local kvr=false + local seats=false + local mask = 3 + local passtex = "Def_717SPBWhite" + local cabtex = "Def_PUAV" + local ring,puring = math.ceil(math.random()*4) + self:SetNW2Int("RingType",ring) + if typ == 1 then --PAKSDM + self.Electric:TriggerInput("X2PS",0) + self.Electric:TriggerInput("Type",self.Electric.LVZ_4) + self.PAM:TriggerInput("KSDMode",1) + self:SetNW2Int("AVType",4) + kvr = num>=8875 or math.random()>0.5 + passtex = kvr and + (num<=8888 and "Def_717SPBWhite" + or num <10000 and "Def_717SPBWood3" + or "Def_717SPBCyan") + or "Def_717SPBWhite" + cabtex = kvr and "Def_PAKSD2" or "Def_PAKSD" + + self:SetNW2Int("RingTypePA",math.ceil(math.random()*3)) + + if kvr then + self.UPO.Buzz = math.random() > 0.7 and 2 or math.random() > 0.7 and 1 + else + self.UPO.Buzz = math.random() > 0.4 and 2 or math.random() > 0.4 and 1 + end + if not IsValid(self.LightSensor) then + self.LightSensor = self:AddLightSensor(Vector(0,0,0),Angle(0,0,0),"models/metrostroi_train/81-717/rfid_reader.mdl") + end + SafeRemoveEntity(self.LeftAutoCoil) + SafeRemoveEntity(self.RightAutoCoil) + SafeRemoveEntity(self.SBPPSensor) + self:SetNW2Bool("NewUSS",kvr or math.random()>0.3) + elseif typ == 2 then --PUAV + self.Electric:TriggerInput("X2PS",1) + self.Electric:TriggerInput("Type",self.Electric.LVZ_2) + self.PAM:TriggerInput("KSDMode",0) + self:SetNW2Int("AVType",2) + seats = math.random()>0.2 + + repeat + puring = math.ceil(math.random()*3) + until puring~=ring + self:SetNW2Int("RingTypePA",puring) + self.UPO.Buzz = math.random() > 0.6 and 2 or math.random() > 0.6 and 1 + if self.SBPP then + if not IsValid(self.SBPPSensor) then + self.SBPPSensor = self:AddLightSensor(Vector(0,0,0),Angle(0,0,0),"models/metrostroi_train/81-717/dkp_reader.mdl") + end + SafeRemoveEntity(self.LeftAutoCoil) + SafeRemoveEntity(self.RightAutoCoil) + else + if not IsValid(self.LeftAutoCoil) then self.LeftAutoCoil = self:AddAutodriveCoil(self.FrontBogey,false) end + if not IsValid(self.RightAutoCoil) then self.RightAutoCoil = self:AddAutodriveCoil(self.FrontBogey,true) end + SafeRemoveEntity(self.SBPPSensor) + end + SafeRemoveEntity(self.LightSensor) + self:SetNW2Bool("NewUSS",kvr or math.random()>0.3) + elseif typ == 3 then --PAM + --[[ self.Electric:TriggerInput("X2PS",1) + self.Electric:TriggerInput("Type",self.Electric.LVZ_3) + self:SetNW2Int("MaskType",3) + self:SetNW2Int("Crane",1) + self:SetNW2Int("AVType",3) + self:SetNW2Bool("KVR",true) + --]] + self.Electric:TriggerInput("X2PS",1) + self.Electric:TriggerInput("Type",self.Electric.LVZ_3) + self:SetNW2Int("AVType",3) + kvr = true + passtex = 10000<=num and num<=10072 and "Def_717SPBCyan" + or num==10177 and "Def_717SPBWood" + or num == 10178 and "Def_717SPBWood2" + or "Def_717SPBWhite" + + self:SetNW2Int("RingTypePA",math.ceil(math.random()*3)) + self.UPO.Buzz = math.random() > 0.6 and 2 or math.random() > 0.6 and 1 + + if not IsValid(self.LightSensor) then self.LightSensor = self:AddLightSensor(Vector(0,0,0),Angle(0,0,0),"models/metrostroi_train/81-717/rfid_reader.mdl") end + SafeRemoveEntity(self.LeftAutoCoil) + SafeRemoveEntity(self.RightAutoCoil) + SafeRemoveEntity(self.SBPPSensor) + self:SetNW2Bool("NewUSS",true) + end + + local bpsn = math.ceil(math.random()*4) + self:SetNW2Int("BPSNType",math.random()>0.2 and 5 or bpsn) + self:SetNW2Int("MaskType",not kvr and (8400<=num and num<=8599) and math.ceil(math.random()*3) or 3) + self:SetNW2Bool("WhitePLights",math.random()>0.5) + self:SetNW2Int("Crane",kvr and 1 or 0) + self:SetNW2Bool("KVR",kvr) + if not self.CustomSettings then + self:SetNW2String("Texture","Def_717SPBDef") + self:SetNW2String("PassTexture",passtex) + self:SetNW2String("CabTexture",cabtex) + self:SetNW2Bool("NewSeats",kvr or seats) + else + self:SetNW2Bool("NewSeats",self:GetNW2Int("SeatType") == 4 or self:GetNW2Int("SeatType") == 3 or self:GetNW2Int("SeatType") == 1 and math.random()>0.5)--(kvr or seats)) + self:SetNW2Bool("NewSeatsBlue",self:GetNW2Int("SeatType") == 4 or self:GetNW2Bool("NewSeats") and self:GetNW2Int("SeatType") == 1 and math.random()>0.5) + local typ = self:GetNW2Int("BodyType") + if typ==3 or typ==1 and math.random() > 0.5 then + self:SetModel("models/metrostroi_train/81-717/81-717_spb_m.mdl") + else + self:SetModel("models/metrostroi_train/81-717/81-717_spb.mdl") + end + end + self.Pneumatic.ValveType = self:GetNW2Int("Crane",1)+1 + self.Announcer.AnnouncerType = self:GetNW2Int("Announcer",1) + self:UpdateTextures() + self:UpdateLampsColors() + + self:SetNW2Float("UPONoiseVolume",math.Rand(0,0.4)) + self:SetNW2Float("UPOVolume",math.Rand(0.9,1)) + self:SetNW2Float("UPOBuzzVolume",math.Rand(0.6,0.9)) + local used = {} + local str = "" + for i,k in ipairs(self.PR14XRelaysOrder) do + local v = self.PR14XRelays[k] + repeat + local rndi = math.ceil(math.random()*#v) + if not used[v[rndi][1]] then + str = str..rndi + used[v[rndi][1]] = true + break + end + until not used[v[rndi][1]] + --print(k,v) + end + self:SetNW2String("RelaysConfig",str) + + local pneumoPow = 1.3+(math.random()^1.2)*0.3 + if IsValid(self.FrontBogey) then + self.FrontBogey:SetNW2Int("SquealType",math.floor(math.random()*7)+1) + self.FrontBogey.PneumaticPow = pneumoPow + end + if IsValid(self.RearBogey) then + self.RearBogey:SetNW2Int("SquealType",math.floor(math.random()*7)+1) + self.RearBogey.PneumaticPow = pneumoPow + end + self:SetNW2Bool("SecondKV",math.random()>0.7) + math.randomseed(os.time()) +end +--[[ +local LK = {} +local PKG = 0 +local RK = 0 +local KV = 0 +local OldTime +]] + +function ENT:NonSupportTrigger() + self.RC1:TriggerInput("Set",0) + self.RC2:TriggerInput("Set",0) + self.VAU:TriggerInput("Set",0) + self.VAH:TriggerInput("Set",1) + self.OVT:TriggerInput("Set",1) + self.EPK:TriggerInput("Set",0) + self.ARS:TriggerInput("Set",0) + self.ALS:TriggerInput("Set",0) + self.VAU:TriggerInput("Set",0) + self.KSD_VAU:TriggerInput("Set",0) + self.Plombs.RC1 = nil + self.Plombs.RC2 = nil + self.Plombs.VAU = nil + self.Plombs.VAH = nil + self.Plombs.OVT = nil +end +-------------------------------------------------------------------------------- +function ENT:Think() + self.RetVal = self.BaseClass.Think(self) + local Panel = self.Panel + + self:SetPackedBool("Headlights1",Panel.Headlights1 > 0) + self:SetPackedBool("Headlights2",Panel.Headlights2 > 0) + self:SetPackedBool("RedLights",Panel.RedLight2 > 0) + self:SetPackedBool("CabLights",Panel.CabLights>0) + self:SetPackedBool("EqLights",Panel.EqLights>0) + + self:SetPackedBool("PanelLights",Panel.PanelLights > 0.5) + --[[if not self.KEKTimer or CurTime()-self.KEKTimer > 3 then + self.KEKTimer = CurTime() + local text = "" + if Panel.DoorsW > 0 then text = text .." Ð±ÐµÐ»Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° дверей" end + if Panel.BrW > 0 then text = text .." Ð¶ÐµÐ»Ñ‚Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° пневмотормоза" end + if Panel.GreenRP > 0 then text = text .." Ð·ÐµÐ»Ñ‘Ð½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° РП" end + if text ~= "" then text = " горит"..text end + if self:GetPackedBool("SN") then text = text.." неÑбор Ñхемы" end + if self.Speed <= 0.5 then text = text .." он Ñтоит" + elseif self.Electric.I13 > 10 then text = text.." он разгонÑетÑÑ" + elseif self.Electric.I13 < -10 then text = text.." он тормозит ЭДТ" + elseif self.Pneumatic.BrakeCylinderPressure > 0.2 then + if self.Electric.I13 < -10 then + text = text.." и пневматикой" + else + text = text.." он тормозит пневматикой" + end + else text = text .." он едет" end + if self.Speed > 0.5 then text = text..Format(" Ñо ÑкороÑтью %02d км/ч и уÑкорением %.1f м/c",self.Speed, self.Acceleration) end + + if Panel.GreenRP > 0 then RunConsoleCommand("say","Ð’ÐИМÐÐИЕ ВСЕМ!!! У "..self:CPPIGetOwner():GetName().." Ð’ÐГОÐ"..self:GetWagonNumber().." СЛУЧИЛОСЬ ЗÐÐМЕÐÐТЕЛЬÐОЕ СОБЫТИЕ!!! У ÐЕГО ЗÐГОРЕЛÐСЬ ЗЕЛÐÐÐЯЛ ЛÐМПРРП!!!") + elseif text ~= "" then RunConsoleCommand("say","Ð’ÐИМÐÐИЕ ВСЕМ!!! У "..self:CPPIGetOwner():GetName().." вагон "..self:GetWagonNumber()..text.."!!!") end + end + + if Panel.GreenRP > 0 and (not self.KEKTimer or CurTime()-self.KEKTimer > 3) then + self.KEKTimer = CurTime() + --RunConsoleCommand("say","Ð’ÐИМÐÐИЕ ВСЕМ!!! У "..self:CPPIGetOwner():GetName().." Ð’ÐГОР"..self:GetWagonNumber().." СЛУЧИЛОСЬ ЗÐÐМЕÐÐТЕЛЬÐОЕ СОБЫТИЕ!!! У ÐЕГО ЗÐГОРЕЛÐСЬ ЗЕЛÐÐÐЯЛ ЛÐМПРРП!!!") + end]] + self:SetPackedBool("BURPower",Panel.BURPower>0) + + local lightsActive1 = Panel.EmergencyLights > 0 + local lightsActive2 = Panel.MainLights > 0.0 + local LampCount = self.LampType==2 and 25 or 12 + local Ip = self.LampType==2 and 7 or 3.6 + local Im = 0 + for i = 1,LampCount do + if (lightsActive2 or (lightsActive1 and math.ceil((i+Ip-Im)%Ip)==1)) then + if not self.Lamps[i] and not self.Lamps.broken[i] then self.Lamps[i] = CurTime() + math.Rand(0.1,math.Rand(0.5,2)) end + else + self.Lamps[i] = nil + end + if (self.Lamps[i] and CurTime() - self.Lamps[i] > 0) then + self:SetPackedBool("lightsActive"..i,true) + else + self:SetPackedBool("lightsActive"..i,false) + end + end + + self:SetPackedBool("DoorsLeftL",Panel.DoorsLeft > 0.5) + self:SetPackedBool("DoorsRightL",Panel.DoorsRight > 0.5) + + -- Side lights + self:SetPackedBool("DoorsW",Panel.DoorsW > 0) + self:SetPackedBool("GRP",Panel.GreenRP > 0) + self:SetPackedBool("BrW",Panel.BrW > 0) + + -- Switch and button states + self:SetPackedBool(0,self:IsWrenchPresent()) + self:SetPackedBool("AVU",Panel.AVU > 0.5) + self:SetPackedBool("OhSigLamp",Panel.OhrSig > 0.5) + self:SetPackedBool("LKVP",Panel.LKVP > 0) + --self:SetPackedBool("LSP",(self.Electric.Overheat1 > 0) or (self.Electric.Overheat2 > 0)) + self:SetPackedBool("RZP",Panel.RZP > 0) + self:SetPackedBool("KUP",Panel.KUP > 0.5) + self:SetPackedBool("PN", Panel.BrT > 0.5) + self:SetPackedBool("VPR",Panel.VPR > 0) + + -- Signal if doors are open or no to platform simulation + self.LeftDoorsOpen = + (self.Pneumatic.LeftDoorState[1] > 0.5) or + (self.Pneumatic.LeftDoorState[2] > 0.5) or + (self.Pneumatic.LeftDoorState[3] > 0.5) or + (self.Pneumatic.LeftDoorState[4] > 0.5) + self.RightDoorsOpen = + (self.Pneumatic.RightDoorState[1] > 0.5) or + (self.Pneumatic.RightDoorState[2] > 0.5) or + (self.Pneumatic.RightDoorState[3] > 0.5) or + (self.Pneumatic.RightDoorState[4] > 0.5) + + -- DIP/power + self:SetPackedBool("LUDS",Panel.LUDS > 0.5) + + self:SetPackedBool("HRK",Panel.LhRK > 0) + self:SetPackedBool("KVC",Panel.KVC > 0) + -- Red RP + local TW18 = 0 + if Panel.LSN > 0 then + local wags = #self.WagonList + for i,v in ipairs(self.WagonList) do + TW18 = TW18+(v.Panel.TW18 or 0)/wags + end + end + + self:SetPackedBool("RP",TW18 > 0.5) + self:SetPackedBool("SN",TW18 > 0) + self:SetPackedRatio("RPR",math.Clamp(TW18^0.7,0,1)) + self:SetPackedBool("SD",Panel.SD > 0.5) + if self:GetNW2Int("AVType")==4 then + self:SetPackedBool("AR04",self.PAM.NoFreq > 0) + self:SetPackedBool("AR20",(self.PAM.NoFreq > 0 or self.PAM.F5 > 0)) + self:SetPackedBool("AR0",self.PAM.F5 > 0) + self:SetPackedBool("AR40",self.PAM.F4 > 0) + self:SetPackedBool("AR60",self.PAM.F3 > 0) + self:SetPackedBool("AR70",self.PAM.F2 > 0) + self:SetPackedBool("AR80",self.PAM.F1 > 0) + self:SetPackedBool("LRD", self.PAM.F6 > 0) + else + self:SetPackedBool("AR04",self.ALS_ARS.NoFreq > 0) + self:SetPackedBool("AR20",(self.ALS_ARS.NoFreq > 0 or self.ALS_ARS.F5 > 0)) + self:SetPackedBool("AR0",self.ALS_ARS.F5 > 0) + self:SetPackedBool("AR40",self.ALS_ARS.F4 > 0) + self:SetPackedBool("AR60",self.ALS_ARS.F3 > 0) + self:SetPackedBool("AR70",self.ALS_ARS.F2 > 0) + self:SetPackedBool("AR80",self.ALS_ARS.F1 > 0) + self:SetPackedBool("LRD", self.ALS_ARS.F6 > 0) + end + if self:GetNW2Int("AVType")>2 then self:SetPackedBool("PAPower",self.PAM.State~=0) end + -- KT + self:SetPackedBool("KT",Panel.KT > 0) + -- ЛРД + -- KVD + self:SetPackedBool("KVD",Panel.LKVD > 0.5) + -- LST + self:SetPackedBool("ST",Panel.LST > 0.5) + -- LVD + self:SetPackedBool("VD",Panel.LVD > 0.5) + -- LKVC + --PUAV + if self:GetNW2Int("AVType")<=2 then + --print(self.PUAV.SetDoorMode) + self:SetPackedBool("PUK16",self.PUAV.LK16 > 0)--self:ReadTrainWire(16) > 0) + self:SetPackedBool("PUOS",self.PUAV.LOS > 0)--self.RC1.Value == 0) + self:SetPackedBool("PUAVT",self.PUAV.LAVT > 0)--self.AVT.Value == 0) + self:SetPackedBool("PULRS",self.PUAV.LRS > 0)--self.ALS_ARS.EnableARS) + self:SetPackedBool("PUKI1",self.PUAV.LKI1 > 0)--CurTime()%0.2>0.1) + self:SetPackedBool("PUKI2",self.PUAV.LKI2 > 0)--CurTime()%0.2<0.1) + --self:SetPackedBool("AR20",(self.PUAV.NoFreq > 0 or self.PUAV.F5 > 0)) + self:SetPackedBool("PU04",self.PUAV.NoFreq > 0) + self:SetPackedBool("PU0",self.PUAV.F5 > 0) + self:SetPackedBool("PU40",self.PUAV.F4 > 0) + self:SetPackedBool("PU60",self.PUAV.F3 > 0) + self:SetPackedBool("PU70",self.PUAV.F2 > 0) + self:SetPackedBool("PU80",self.PUAV.F1 > 0) + self:SetPackedBool("PURing",self.PUAV.Ring>0) + self:SetPackedBool("PURingZ",self.PUAV.RingZero>0) + else + self:SetPackedBool("PURing",self.PAM.Ring>0) + end + self:SetPackedBool("NMLow",Panel.NMLow > 0) + self:SetPackedBool("UAVATriggered",Panel.UAVATriggered > 0 and CurTime()%0.4>0.2) + + ----self:SetLightPower(24,(self.PowerSupply.XT3_1 > 0) and (Panel.V1 > 0.5)) + -- LRS + self:SetPackedBool("RS",self.ALS_ARS.F6 > 0) + + self:SetPackedBool("SOSDL",Panel.SOSD>0) + self.SOSD = Panel.SOSD>0 + + -- Feed packed floats + self:SetNW2Int("WrenchMode",self.KVWrenchMode) + self:SetPackedRatio("PVK",self.PVK.Value/2) + self:SetPackedRatio("M8",Panel.M8) + self:SetPackedRatio("CranePosition", self.Pneumatic.RealDriverValvePosition) + self:SetPackedRatio("ControllerPosition", (self.KV.ControllerPosition+3)/7) + self:SetNW2Int("ReverserPosition", (self.KV.ReverserPosition+1)) + self:SetNW2Int("KRUPosition", self.KRU.Position) + if self.Pneumatic.ValveType == 1 then + self:SetPackedRatio("BLPressure", self.Pneumatic.ReservoirPressure/16.0) + else + self:SetPackedRatio("BLPressure", self.Pneumatic.BrakeLinePressure/16.0) + end + self:SetPackedRatio("TLPressure", self.Pneumatic.TrainLinePressure/16.0) + self:SetPackedRatio("BCPressure", self.Pneumatic.BrakeCylinderPressure/6.0) + self:SetPackedRatio("EnginesVoltage", self.Electric.Aux750V/1000.0) + self:SetPackedRatio("EnginesCurrent2", 0.5 + 0.5*(self.Electric.I13/500.0)) + self:SetPackedRatio("EnginesCurrent", 0.5 + 0.5*(self.Electric.I24/500.0)) + self:SetPackedRatio("BatteryVoltage",Panel["V1"]*self.Battery.Voltage/150.0) + self:SetPackedBool("Compressor",self.Pneumatic.Compressor > 0) + self:SetPackedBool("Buzzer",Panel.Ring > 0) + self:SetPackedBool("RK",self.RheostatController.Velocity ~= 0.0) + + self:SetPackedBool("BPSN",self.PowerSupply.X2_2 > 0) + + self:SetPackedBool("RearDoor",self.RearDoor) + self:SetPackedBool("FrontDoor",self.FrontDoor) + self:SetPackedBool("PassengerDoor",self.PassengerDoor) + self:SetPackedBool("CabinDoor",self.CabinDoor) + self:SetPackedBool("OtsekDoor1",self.OtsekDoor1) + self:SetPackedBool("OtsekDoor2",self.OtsekDoor2) + self:SetPackedRatio("Speed", self.Speed/100) + self:SetNW2Int("ALSSpeed", self.ALS_ARS.Speed) + + --self:SetPackedBool("buzz",self:ReadTrainWire(47) ~= -1 and self.PowerSupply.XT3_1 > 0) + --self:SetPackedBool("buzz_cab",self.R_G.Value == 1.0 and self.PowerSupply.XT3_1 > 0) + self:SetPackedBool("AnnBuzz",Panel.AnnouncerBuzz > 0) + self:SetPackedBool("AnnPlay",Panel.AnnouncerPlaying > 0) + self:SetPackedBool("AnnCab",self.ASNP_VV.CabinSpeakerPower > 0) + + -- 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 + -- These corrections are required to beat source engine friction at very low values of motor power + local A = 2*self.Engines.BogeyMoment + 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.FrontBogey.MotorForce = 22500+5500*(A < 0 and 1 or 0) + self.FrontBogey.Reversed = (self.Reverser.NZ > 0.5) + self.RearBogey.MotorForce = 22500+5500*(A < 0 and 1 or 0) + self.RearBogey.Reversed = (self.Reverser.VP > 0.5) + self.RearBogey.MotorPower = P*0.5*((A > 0) and 1 or -1) + self.FrontBogey.MotorPower = P*0.5*((A > 0) and 1 or -1) + --self.RearBogey.MotorPower = P*0.5 + --self.FrontBogey.MotorPower = P*0.5 + --self.Acc = (self.Acc or 0)*0.95 + self.Acceleration*0.05 + --print(self.Acc) + + -- Apply brakes + self.FrontBogey.PneumaticBrakeForce = 50000.0-2000 + self.FrontBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + self.FrontBogey.ParkingBrakePressure = math.max(0,(2.6-self.Pneumatic.ParkingBrakePressure)/2.6)/2 + self.FrontBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + self.RearBogey.PneumaticBrakeForce = 50000.0-2000 + self.RearBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + self.RearBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + self.RearBogey.ParkingBrakePressure = math.max(0,(2.6-self.Pneumatic.ParkingBrakePressure)/2.6)/2 + --self.RearBogey.ParkingBrake = self.ParkingBrake.Value > 0.5 + end + + self:GenerateJerks() + + return self.RetVal +end + +function ENT:TriggerTurbostroiInput(sys,name,val) + self.BaseClass.TriggerTurbostroiInput(self,sys,name,val) +end +-------------------------------------------------------------------------------- +function ENT:OnButtonPress(button,ply) + if string.find(button,"PneumaticBrakeSet") then + self.Pneumatic:TriggerInput("BrakeSet",tonumber(button:sub(-1,-1))) + return + 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 + if button == "OtsekDoor1" then self.OtsekDoor1 = not self.OtsekDoor1 end + if button == "OtsekDoor2" then self.OtsekDoor2 = not self.OtsekDoor2 end + + if button == "KVUp" then self.KV:TriggerInput("ControllerUp",1.0) end + if button == "KVDown" then self.KV:TriggerInput("ControllerDown",1.0) end + if button == "KV_Unlock" then self.KV:TriggerInput("ControllerUnlock",1.0) end + if (self.KVWrenchMode == 2) and (button == "KVReverserUp") then self.KRU:TriggerInput("Up",1) end + if (self.KVWrenchMode == 2) and (button == "KVReverserDown") then self.KRU:TriggerInput("Down",1) end + if (self.KVWrenchMode == 2) and (button == "KVSetX1") then self.KRU:TriggerInput("SetX1",1) end + if (self.KVWrenchMode == 2) and (button == "KVSetX1B") then self.KRU:TriggerInput("SetX2",1) end + if (self.KVWrenchMode == 2) and (button == "KVSet0") then self.KRU:TriggerInput("Set0",1) 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 and self.KV.ReverserPosition == 0 and self.KRU.Position == 0 then + if self.KVWrenchMode == 2 then + self:PlayOnce("kru_out","cabin",0.7) + else + self:PlayOnce("revers_out","cabin",0.7) + end + self.KVWrenchMode = 0 + self.KV:TriggerInput("Enabled",0) + self.KRU:TriggerInput("Enabled",0) + end + end + if button == "KVWrenchKRU" then + if self.KVWrenchMode == 0 then + self:PlayOnce("kru_in","cabin",0.7) + self.KVWrenchMode = 2 + self.KRU:TriggerInput("Enabled",1) + end + end + --if button == "KVT2Set" then self.KVT:TriggerInput("Close",1) end + if button == "KDL" and self.VUD1.Value < 1 then self.KDL:TriggerInput("Close",1) end + if button == "KDP" and self.VUD1.Value < 1 then self.KDP:TriggerInput("Close",1) end + if button == "VDL" and self.VUD1.Value < 1 then self.VDL:TriggerInput("Close",1) end + if button == "EmergencyBrake" then + self.KV:TriggerInput("ControllerSet",-3) + self.Pneumatic:TriggerInput("BrakeSet",7) + return + end + + if (button == "VDL") or (button == "KDL") then + self.DoorSelect:TriggerInput("Open",1) + self.KDLK:TriggerInput("Open",1) + end + if (button == "KDP") then + self.DoorSelect:TriggerInput("Close",1) + self.KDPK:TriggerInput("Open",1) + end + if (button == "VUD1Set") or (button == "VUD1Toggle") or + (button == "VUD2Set") or (button == "VUD2Toggle") then + self.VDL:TriggerInput("Open",1) + self.KDL:TriggerInput("Open",1) + self.KDP:TriggerInput("Open",1) + end + --print(button) + -- Special sounds + if button == "DriverValveDisconnect" then + if self.Pneumatic.ValveType == 1 then + if self.DriverValveBLDisconnect.Value == 0 or self.DriverValveTLDisconnect.Value == 0 then + self.DriverValveBLDisconnect:TriggerInput("Set",1) + self.DriverValveTLDisconnect:TriggerInput("Set",1) + else + self.DriverValveBLDisconnect:TriggerInput("Set",0) + self.DriverValveTLDisconnect:TriggerInput("Set",0) + end + else + if self.DriverValveDisconnect.Value == 1.0 then + self.DriverValveDisconnect:TriggerInput("Set",0) + else + self.DriverValveDisconnect:TriggerInput("Set",1) + end + 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 == "KDL" then self.KDL:TriggerInput("Open",1) end + if button == "KDP" then self.KDP:TriggerInput("Open",1) end + if button == "VDL" then self.VDL:TriggerInput("Open",1) end + if button == "KV_Unlock" then + self.KV:TriggerInput("ControllerUnlock",0.0) + 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 diff --git a/lua/entities/gmod_subway_81-717_lvz/shared.lua b/lua/entities/gmod_subway_81-717_lvz/shared.lua new file mode 100644 index 0000000..5ec9bde --- /dev/null +++ b/lua/entities/gmod_subway_81-717_lvz/shared.lua @@ -0,0 +1,1041 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" +ENT.SkinsType = "81-717_spb" +ENT.Model = "models/metrostroi_train/81-717/81-717_spb.mdl" + +ENT.Spawnable = true +ENT.AdminSpawnable = false +ENT.DontAccelerateSimulation = false + +function ENT:PassengerCapacity() + return 300 +end + +function ENT:GetStandingArea() + return Vector(-450,-30,-48),Vector(380,30,-48) +end + +local function GetDoorPosition(i,k) + return Vector(359.0 - 35/2 - 229.5*i,-65*(1-2*k),7.5) +end + +-- 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 + +ENT.AnnouncerPositions = { + {Vector(420,-49 ,61),80,0.2}, + {Vector(-3,-60, 62),200,0.2}, + {Vector(-3,60 ,62),200,0.2}, +} +ENT.Cameras = { + {Vector(407.5+23,4,29),Angle(0,180,0),"Train.717.Breakers","AV_C"}, + {Vector(407.5+20,-51,11),Angle(0,180,0),"Train.717.VB","Battery_C"}, + {Vector(407.5+20,-32.4,54.4),Angle(0,180,0),"Train.717.VRD","VRD_C"}, + {Vector(407.5+20,4,54.4),Angle(0,180,0),"Train.717.SOSD","SOSD_C"}, + {Vector(407.5+25,-40,27),Angle(0,180,0),"Train.717.Breakers","AV_R"}, + {Vector(407.5+20,-40.5,3),Angle(0,180,0),"Train.717.VB","Battery_R"}, + {Vector(407.5+20,-57,39),Angle(0,180+5,0),"Train.717.SOSD","SOSD_R"}, + {Vector(407.5+13,-47,-20),Angle(40,270-15,0),"Train.Common.UAVA"}, + {Vector(407.5+5,-20,-10),Angle(40,-30,0),"Train.Common.PneumoPanels"}, + {Vector(407.5+35,40,10),Angle(0,90-17,0),"Train.Common.HelpersPanel"}, + {Vector(407.5+26,20,0),Angle(30,0,0),"Train.717.PUAV","PUAVN"}, + {Vector(407.5+26,20,0),Angle(30,0,0),"Train.717.PA","PAM"}, + {Vector(407.5+30,18.5,-1),Angle(30,0,0),"Train.717.PAScreen","PAMScreen"}, + {Vector(407.5+70,48.3,2) ,Angle(20,180+9,0),"Train.Common.RouteNumber"}, + {Vector(450+7,0,30),Angle(60,0,0),"Train.Common.CouplerCamera"}, +} +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.15} + self.SoundPositions["rolling_10"] = {480,1e12,Vector(0,0,0),0.20} + self.SoundPositions["rolling_40"] = {480,1e12,Vector(0,0,0),0.55} + self.SoundPositions["rolling_70"] = {480,1e12,Vector(0,0,0),0.60} + self.SoundPositions["rolling_80"] = {480,1e12,Vector(0,0,0),0.75}]] + 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.05} + self.SoundPositions["rolling_10"] = {480,1e12,Vector(0,0,0),0.1} + self.SoundPositions["rolling_40"] = {480,1e12,Vector(0,0,0),0.55} + self.SoundPositions["rolling_70"] = {480,1e12,Vector(0,0,0),0.60} + self.SoundPositions["rolling_80"] = {480,1e12,Vector(0,0,0),0.75} + + + self.SoundNames["rolling_32"] = {loop=true,"subway_trains/717/rolling/rolling_32.wav"} + self.SoundNames["rolling_68"] = {loop=true,"subway_trains/717/rolling/rolling_68.wav"} + self.SoundNames["rolling_75"] = {loop=true,"subway_trains/717/rolling/rolling_75.wav"} + self.SoundPositions["rolling_32"] = {480,1e12,Vector(0,0,0),0.2} + self.SoundPositions["rolling_68"] = {480,1e12,Vector(0,0,0),0.4} + self.SoundPositions["rolling_75"] = {480,1e12,Vector(0,0,0),0.8} + + self.SoundNames["rolling_medium"] = {loop=true,"subway_trains/717/rolling/rolling_inside_medium.wav"} + self.SoundNames["rolling_high"] = {loop=true,"subway_trains/717/rolling/rolling_inside_high.wav"} + self.SoundPositions["rolling_medium"] = {480,1e12,Vector(0,0,0),0.5} + self.SoundPositions["rolling_high"] = {480,1e12,Vector(0,0,0),1.00} + self.SoundNames["rolling_motors"] = {loop=true,"subway_trains/common/junk/wind_background1.wav"} + self.SoundNames["rolling_motors2"] = {loop=true,"subway_trains/common/junk/wind_background1.wav"} + self.SoundPositions["rolling_motors"] = {250,1e12,Vector(200,0,0),0.33} + self.SoundPositions["rolling_motors2"] = {250,1e12,Vector(-250,0,0),0.33} + 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"] = {480,1e12,Vector(0,0,0),0.90} + self.SoundPositions["rolling_medium2"] = {480,1e12,Vector(0,0,0),0.90} + self.SoundPositions["rolling_high2"] = {480,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,-24.1+1.5,-33.7),1} + self.SoundPositions["pneumo_disconnect1"] = {60,1e9,Vector(431.8,-24.1+1.5,-33.7),1} + self.SoundNames["epv_on"] = "subway_trains/common/pneumatic/epv_on.mp3" + self.SoundNames["epv_off"] = "subway_trains/common/pneumatic/epv_off.mp3" + self.SoundPositions["epv_on"] = {80,1e9,Vector(437.2,-53.1,-32.0),0.85} + self.SoundPositions["epv_off"] = {80,1e9,Vector(437.2,-53.1,-32.0),0.85} + self.SoundPositions["epv_off"] = {60,1e9,Vector(437.2,-53.1,-32.0),0.85} + -- Релюшки + --self.SoundNames["rpb_on"] = "subway_trains/717/relays/new/ro_off.mp3" + --self.SoundNames["rpb_off"] = "subway_trains/717/relays/ro_on.mp3" + self.SoundNames["rpb_on"] = "subway_trains/717/relays/rev813t_on1.mp3" + self.SoundNames["rpb_off"] = "subway_trains/717/relays/rev813t_off1.mp3" + self.SoundPositions["rpb_on"] = {80,1e9,Vector(440,16,66),1} + self.SoundPositions["rpb_off"] = {80,1e9,Vector(440,16,66),0.7} + --self.SoundNames["rvt_on"] = "subway_trains/717/relays/new/rvt_on1.mp3" + --self.SoundNames["rvt_off"] = "subway_trains/717/relays/new/rvt_off.mp3" + self.SoundNames["rvt_on"] = "subway_trains/717/relays/rev811t_on2.mp3" + self.SoundNames["rvt_off"] = "subway_trains/717/relays/rev811t_off1.mp3" + self.SoundPositions["rvt_on"] = {80,1e9,Vector(440,18,66),1} + self.SoundPositions["rvt_off"] = {80,1e9,Vector(440,18,66),0.7} + --self.SoundNames["k6_on"] = "subway_trains/717/relays/new/k6_on1.mp3" + --self.SoundNames["k6_off"] = "subway_trains/717/relays/new/k6_off.mp3" + self.SoundNames["k6_on"] = "subway_trains/717/relays/tkpm121_on1.mp3" + self.SoundNames["k6_off"] = "subway_trains/717/relays/tkpm121_off1.mp3" + self.SoundPositions["k6_on"] = {80,1e9,Vector(440,20,66),1} + self.SoundPositions["k6_off"] = {80,1e9,Vector(440,20,66),1} + --self.SoundNames["r1_5_on"] = "subway_trains/717/relays/new/r1_5_on.mp3" + --self.SoundNames["r1_5_off"] = "subway_trains/717/relays/new/r1_5_off.mp3" + self.SoundNames["r1_5_on"] = "subway_trains/717/relays/kpd110e_on7.mp3"--,"subway_trains/717/relays/kpd110e_on2.mp3"} + self.SoundNames["r1_5_off"] = "subway_trains/717/relays/kpd110e_off6.mp3"--,"subway_trains/717/relays/kpd110e_off2.mp3"} + self.SoundPositions["r1_5_on"] = {80,1e9,Vector(440,22,66),0.8} + self.SoundPositions["r1_5_off"] = {80,1e9,Vector(440,22,66),0.8} + + self.SoundNames["rot_off"] = "subway_trains/717/relays/lsd_2.mp3" + self.SoundNames["rot_on"] = "subway_trains/717/relays/relay_on.mp3" + self.SoundPositions["rot_on"] = {80,1e9,Vector(380,-40,40),0.25} + self.SoundPositions["rot_off"] = {80,1e9,Vector(380,-40,40),0.25} + + --self.SoundNames["k25_on"] = "subway_trains/717/relays/new/k25_on.mp3" + --self.SoundNames["k25_off"] = "subway_trains/717/relays/new/k25_off.mp3" + self.SoundNames["k25_on"] = self.SoundNames["r1_5_on"] + self.SoundNames["k25_off"] = self.SoundNames["r1_5_off"] + self.SoundPositions["k25_on"] = {80,1e9,Vector(440,-16,66),0.8} + self.SoundPositions["k25_off"] = {80,1e9,Vector(440,-16,66),0.8} + --self.SoundNames["rp8_off"] = "subway_trains/717/relays/lsd_2.mp3" + --self.SoundNames["rp8_on"] = "subway_trains/717/relays/rp8_on.wav" + self.SoundNames["rp8_off"] = "subway_trains/717/relays/rev811t_off2.mp3" + self.SoundNames["rp8_on"] = "subway_trains/717/relays/rev811t_on3.mp3" + self.SoundPositions["rp8_on"] = {80,1e9,Vector(440,-18,66),1} + self.SoundPositions["rp8_off"] = {80,1e9,Vector(440,-18,66),0.2} + --self.SoundNames["kd_off"] = "subway_trains/717/relays/lsd_2.mp3" + --self.SoundNames["kd_on"] = "subway_trains/717/relays/new/kd_on.mp3" + self.SoundNames["kd_off"] = self.SoundNames["rp8_off"] + self.SoundNames["kd_on"] = self.SoundNames["rp8_on"] + self.SoundPositions["kd_on"] = {80,1e9,Vector(440,-20,66),1} + self.SoundPositions["kd_off"] = {80,1e9,Vector(440,-20,66),0.7} + --self.SoundNames["ro_on"] = "subway_trains/717/relays/ro_on.mp3" + --self.SoundNames["ro_off"] = "subway_trains/717/relays/new/ro_off.mp3" + self.SoundNames["ro_on"] = self.SoundNames["r1_5_on"] + self.SoundNames["ro_off"] = self.SoundNames["r1_5_off"] + self.SoundPositions["ro_on"] = {80,1e9,Vector(440,-22,66),1} + self.SoundPositions["ro_off"] = {80,1e9,Vector(440,-22,66),0.7} + self.SoundNames["kk_off"] = "subway_trains/717/relays/lsd_2.mp3" + self.SoundNames["kk_on"] = "subway_trains/717/relays/lsd_1.mp3" + self.SoundPositions["kk_on"] = {80,1e9,Vector(280,40,-30),0.85} + self.SoundPositions["kk_off"] = {80,1e9,Vector(280,40,-30),0.85} + + + self.SoundNames["avu_off"] = "subway_trains/common/pneumatic/ak11b_off.mp3" + self.SoundNames["avu_on"] = "subway_trains/common/pneumatic/ak11b_on.mp3" + self.SoundPositions["avu_on"] = {60,1e9, Vector(432.4,-59.4,-31.6),0.7} + self.SoundPositions["avu_off"] = self.SoundPositions["avu_on"] + --self.SoundNames["r1_5_close"] = {"subway_trains/drive_on3.wav","subway_trains/drive_on4.wav"} + self.SoundNames["bpsn1"] = {"subway_trains/717/bpsn/bpsn_piter.wav", loop=true} + self.SoundNames["bpsn2"] = {"subway_trains/717/bpsn/bpsn_spb.wav", loop=true} + self.SoundNames["bpsn3"] = {"subway_trains/717/bpsn/bpsn_nnov.wav", loop=true} + self.SoundNames["bpsn4"] = {"subway_trains/717/bpsn/bpsn_1.wav", loop=true} + self.SoundPositions["bpsn1"] = {600,1e9,Vector(0,45,-448),0.04} + self.SoundPositions["bpsn2"] = {600,1e9,Vector(0,45,-448),0.025} + self.SoundPositions["bpsn3"] = {600,1e9,Vector(0,45,-448),0.03} + self.SoundPositions["bpsn4"] = {600,1e9,Vector(0,45,-448),0.02} + --Подвагонка + self.SoundNames["lk2_on"] = "subway_trains/717/pneumo/lk2_on.mp3" + self.SoundNames["lk5_on"] = "subway_trains/717/pneumo/lk1_on.mp3" + self.SoundNames["lk2_off"] = "subway_trains/717/pneumo/lk2_off.mp3" + self.SoundNames["lk2c"] = "subway_trains/717/pneumo/ksh1.mp3" + self.SoundNames["lk3_on"] = "subway_trains/717/pneumo/lk3_on.mp3" + self.SoundNames["lk3_off"] = "subway_trains/717/pneumo/lk3_off.mp3" + --self.SoundNames["ksh1_off"] = "subway_trains/717/pneumo/ksh1.mp3" + self.SoundPositions["lk2_on"] = {440,1e9,Vector(-60,-40,-66),0.22} + self.SoundPositions["lk5_on"] = {440,1e9,Vector(-60,-40,-66),0.30} + self.SoundPositions["lk2_off"] = self.SoundPositions["lk2_on"] + self.SoundPositions["lk2c"] = {440,1e9,Vector(-60,-40,-66),0.6} + self.SoundPositions["lk3_on"] = self.SoundPositions["lk2_on"] + self.SoundPositions["lk3_off"] = self.SoundPositions["lk2_on"] + --self.SoundPositions["ksh1_off"] = self.SoundPositions["lk1_on"] + + self.SoundNames["compressor"] = {loop=2.0,"subway_trains/d/pneumatic/compressor/compessor_d_start.wav","subway_trains/d/pneumatic/compressor/compessor_d_loop.wav", "subway_trains/d/pneumatic/compressor/compessor_d_end.wav"} + self.SoundNames["compressor2"] = {loop=1.79,"subway_trains/717/compressor/compressor_717_start2.wav","subway_trains/717/compressor/compressor_717_loop2.wav", "subway_trains/717/compressor/compressor_717_stop2.wav"} + self.SoundPositions["compressor"] = {600,1e9,Vector(-118,-40,-66),0.15} + self.SoundPositions["compressor2"] = {480,1e9,Vector(-118,-40,-66),0.55} + self.SoundNames["rk"] = {loop=0.8,"subway_trains/717/rk/rk_start.wav","subway_trains/717/rk/rk_spin.wav","subway_trains/717/rk/rk_stop.mp3"} + self.SoundPositions["rk"] = {50,1e3,Vector(110,-40,-75),0.5} + + self.SoundNames["revers_0-f"] = {"subway_trains/717/kv70/reverser_0-f_1.mp3","subway_trains/717/kv70/reverser_0-f_2.mp3"} + self.SoundNames["revers_f-0"] = {"subway_trains/717/kv70/reverser_f-0_1.mp3","subway_trains/717/kv70/reverser_f-0_2.mp3"} + self.SoundNames["revers_0-b"] = {"subway_trains/717/kv70/reverser_0-b_1.mp3","subway_trains/717/kv70/reverser_0-b_2.mp3"} + self.SoundNames["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/717/kv70/reverser_in1.mp3","subway_trains/717/kv70/reverser_in2.mp3","subway_trains/717/kv70/reverser_in3.mp3"} + self.SoundNames["revers_out"] = {"subway_trains/717/kv70/reverser_out1.mp3","subway_trains/717/kv70/reverser_out2.mp3"} + self.SoundPositions["revers_0-f"] = {80,1e9,Vector(445.5,-32+1.7,-7.5),0.85} + self.SoundPositions["revers_f-0"] = {80,1e9,Vector(445.5,-32+1.7,-7.5),0.85} + self.SoundPositions["revers_0-b"] = {80,1e9,Vector(445.5,-32+1.7,-7.5),0.85} + self.SoundPositions["revers_b-0"] = {80,1e9,Vector(445.5,-32+1.7,-7.5),0.85} + self.SoundPositions["revers_in"] = {80,1e9,Vector(445.5,-32+1.7,-7.5),0.85} + self.SoundPositions["revers_out"] = {80,1e9,Vector(445.5,-32+1.7,-7.5),0.85} + + 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"] = {80,1e9,Vector(452.3,-24.0,4.0)} + + 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/kru2-3_1.mp3", + "subway_trains/717/kru/kru2-3_2.mp3", + "subway_trains/717/kru/kru2-3_3.mp3", + "subway_trains/717/kru/kru2-3_4.mp3", + } + self.SoundNames["kru_3_2"] = { + "subway_trains/717/kru/kru3-2_1.mp3", + "subway_trains/717/kru/kru3-2_2.mp3", + "subway_trains/717/kru/kru3-2_3.mp3", + "subway_trains/717/kru/kru3-2_4.mp3", + } + self.SoundPositions["kru_0_1"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_1_2"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_2_1"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_1_0"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_2_3"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_3_2"] = {80,1e9,Vector(452.3,-24.0,4.0)} + + self.SoundNames["pvk2"] = "subway_trains/717/switches/vent1-2.mp3" + self.SoundNames["pvk1"] = "subway_trains/717/switches/vent2-1.mp3" + self.SoundNames["pvk0"] = "subway_trains/717/switches/vent1-0.mp3" + self.SoundNames["vent_cabl"] = {loop=true,"subway_trains/717/vent/vent_cab_low.wav"} + self.SoundPositions["vent_cabl"] = {140,1e9,Vector(450.7,44.5,-11.9),0.66} + self.SoundNames["vent_cabh"] = {loop=true,"subway_trains/717/vent/vent_cab_high.wav"} + self.SoundPositions["vent_cabh"] = self.SoundPositions["vent_cabl"] + + self.SoundNames["kr_open"] = { + "subway_trains/717/cover/cover_open1.mp3", + "subway_trains/717/cover/cover_open2.mp3", + "subway_trains/717/cover/cover_open3.mp3", + } + self.SoundNames["kr_close"] = { + "subway_trains/717/cover/cover_close1.mp3", + "subway_trains/717/cover/cover_close2.mp3", + "subway_trains/717/cover/cover_close3.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/717/switches/button1_off1.mp3", + "subway_trains/717/switches/button1_off2.mp3", + "subway_trains/717/switches/button1_off3.mp3", + } + self.SoundNames["button1_on"] = { + "subway_trains/717/switches/button1_on1.mp3", + "subway_trains/717/switches/button1_on2.mp3", + "subway_trains/717/switches/button1_on3.mp3", + } + self.SoundNames["button2_off"] = { + "subway_trains/717/switches/button2_off1.mp3", + "subway_trains/717/switches/button2_off2.mp3", + } + self.SoundNames["button2_on"] = { + "subway_trains/717/switches/button2_on1.mp3", + "subway_trains/717/switches/button2_on2.mp3", + } + self.SoundNames["button3_off"] = { + "subway_trains/717/switches/button3_off1.mp3", + "subway_trains/717/switches/button3_off2.mp3", + } + self.SoundNames["button3_on"] = { + "subway_trains/717/switches/button3_on1.mp3", + "subway_trains/717/switches/button3_on2.mp3", + } + self.SoundNames["button4_off"] = { + "subway_trains/717/switches/button4_off1.mp3", + "subway_trains/717/switches/button4_off2.mp3", + } + self.SoundNames["button4_on"] = { + "subway_trains/717/switches/button4_on1.mp3", + "subway_trains/717/switches/button4_on2.mp3", + } + 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["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(429.6,-60.8,-15.9),0.95} + self.SoundNames["gv_f"] = {"subway_trains/717/kv70/reverser_0-b_1.mp3","subway_trains/717/kv70/reverser_0-b_2.mp3"} + self.SoundNames["gv_b"] = {"subway_trains/717/kv70/reverser_b-0_1.mp3","subway_trains/717/kv70/reverser_b-0_2.mp3"} + + self.SoundNames["pneumo_TL_open"] = { + "subway_trains/common/334/334_open.mp3", + } + 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["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["parking_brake"] = {loop=true,"subway_trains/common/pneumatic/parking_brake.wav"} + self.SoundNames["parking_brake_en"] = "subway_trains/common/pneumatic/parking_brake_stop.mp3" + self.SoundNames["parking_brake_rel"] = "subway_trains/common/pneumatic/parking_brake_stop2.mp3" + self.SoundPositions["parking_brake"] = {80,1e9,Vector(453.6,-0.25,-39.8),0.6} + self.SoundPositions["parking_brake_en"] = self.SoundPositions["parking_brake"] + self.SoundPositions["parking_brake_rel"] = self.SoundPositions["parking_brake"] + self.SoundNames["front_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["front_isolation"] = {300,1e9,Vector(443, 0,-63),1} + self.SoundNames["rear_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["rear_isolation"] = {300,1e9,Vector(-456, 0,-63),1} + + self.SoundNames["crane013_brake"] = {loop=true,"subway_trains/common/pneumatic/release_2.wav"} + self.SoundPositions["crane013_brake"] = {80,1e9,Vector(431.5,-20.3,-12),0.86} + self.SoundNames["crane013_brake2"] = {loop=true,"subway_trains/common/pneumatic/013_brake2.wav"} + self.SoundPositions["crane013_brake2"] = {80,1e9,Vector(431.5,-20.3,-12),0.86} + self.SoundNames["crane013_release"] = {loop=true,"subway_trains/common/pneumatic/013_release.wav"} + self.SoundPositions["crane013_release"] = {80,1e9,Vector(431.5,-20.3,-12),0.4} + self.SoundNames["crane334_brake_high"] = {loop=true,"subway_trains/common/pneumatic/334_brake.wav"} + self.SoundPositions["crane334_brake_high"] = {385,1e9,Vector(432.27,-22.83,-8.2),0.85} + self.SoundNames["crane334_brake_low"] = {loop=true,"subway_trains/common/pneumatic/334_brake_slow.wav"} + self.SoundPositions["crane334_brake_low"] = {385,1e9,Vector(432.27,-22.83,-8.2),0.75} + self.SoundNames["crane334_brake_2"] = {loop=true,"subway_trains/common/pneumatic/334_brake_slow.wav"} + self.SoundPositions["crane334_brake_2"] = {385,1e9,Vector(432.27,-22.83,-8.2),0.85} + self.SoundNames["crane334_brake_eq_high"] = {loop=true,"subway_trains/common/pneumatic/334_release_reservuar.wav"} + self.SoundPositions["crane334_brake_eq_high"] = {385,1e9,Vector(432.27,-22.83,-70.2),0.2} + self.SoundNames["crane334_brake_eq_low"] = {loop=true,"subway_trains/common/pneumatic/334_brake_slow2.wav"} + self.SoundPositions["crane334_brake_eq_low"] = {350,1e9,Vector(432.27,-22.83,-70.2),0.2} + self.SoundNames["crane334_release"] = {loop=true,"subway_trains/common/pneumatic/334_release3.wav"} + self.SoundPositions["crane334_release"] = {385,1e9,Vector(432.27,-22.83,-8.2),0.2} + self.SoundNames["crane334_release_2"] = {loop=true,"subway_trains/common/pneumatic/334_release2.wav"} + self.SoundPositions["crane334_release_2"] = {80,1e9,Vector(432.27,-22.83,-8.2),0.2} + + self.SoundNames["epk_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["epk_brake"] = {80,1e9,Vector(437.2,-53.1,-32.0),0.65} + + self.SoundNames["valve_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["valve_brake"] = {80,1e9,Vector(408.45,62.15,11.5),1} + + 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(401,62,-84),0.95} + self.SoundPositions["emer_brake2"] = {600,1e9,Vector(401,62,-84),1} + self.SoundPositions["emer_brake2"] = self.SoundPositions["emer_brake"] + + 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["kv70_0_t1"] = "subway_trains/717/kv70_4/kv70_0_t1.mp3" + self.SoundNames["kv70_t1_0_fix"]= "subway_trains/717/kv70_4/kv70_t1_0.mp3" + self.SoundNames["kv70_t1_0"] = "subway_trains/717/kv70_4/kv70_t1_0.mp3" + self.SoundNames["kv70_t1_t1a"] = "subway_trains/717/kv70_4/kv70_t1_t1a.mp3" + self.SoundNames["kv70_t1a_t1"] = "subway_trains/717/kv70_4/kv70_t1a_t1.mp3" + self.SoundNames["kv70_t1a_t2"] = "subway_trains/717/kv70_4/kv70_t1a_t2.mp3" + self.SoundNames["kv70_t2_t1a"] = "subway_trains/717/kv70_4/kv70_t2_t1a.mp3" + self.SoundNames["kv70_0_x1"] = "subway_trains/717/kv70_4/kv70_0_x1.mp3" + self.SoundNames["kv70_x1_0"] = "subway_trains/717/kv70_4/kv70_x1_0.mp3" + self.SoundNames["kv70_x1_x2"] = "subway_trains/717/kv70_4/kv70_x1_x2.mp3" + self.SoundNames["kv70_x2_x1"] = "subway_trains/717/kv70_4/kv70_x2_x1.mp3" + self.SoundNames["kv70_x2_x3"] = "subway_trains/717/kv70_4/kv70_x2_x3.mp3" + self.SoundNames["kv70_x3_x2"] = "subway_trains/717/kv70_4/kv70_x3_x2.mp3"--]] + self.SoundNames["kv70_0_t1"] = "subway_trains/717/kv70_3/0-t1.mp3" + self.SoundNames["kv70_t1_0_fix"]= "subway_trains/717/kv70_3/t1-0.mp3" + self.SoundNames["kv70_t1_0"] = "subway_trains/717/kv70_3/t1-0.mp3" + self.SoundNames["kv70_t1_t1a"] = "subway_trains/717/kv70_3/t1-t1a.mp3" + self.SoundNames["kv70_t1a_t1"] = "subway_trains/717/kv70_3/t1a-t1.mp3" + self.SoundNames["kv70_t1a_t2"] = "subway_trains/717/kv70_3/t1a-t2.mp3" + self.SoundNames["kv70_t2_t1a"] = "subway_trains/717/kv70_3/t2-t1a.mp3" + self.SoundNames["kv70_0_x1"] = "subway_trains/717/kv70_3/0-x1.mp3" + self.SoundNames["kv70_x1_0"] = "subway_trains/717/kv70_3/x1-0.mp3" + self.SoundNames["kv70_x1_x2"] = "subway_trains/717/kv70_3/x1-x2.mp3" + self.SoundNames["kv70_x2_x1"] = "subway_trains/717/kv70_3/x2-x1.mp3" + self.SoundNames["kv70_x2_x3"] = "subway_trains/717/kv70_3/x2-x3.mp3" + self.SoundNames["kv70_x3_x2"] = "subway_trains/717/kv70_3/x3-x2.mp3" + self.SoundPositions["kv70_fix_on"] = {110,1e9,Vector(435.848,16.1,-19.779+4.75),0.4} + self.SoundPositions["kv70_fix_off"] = self.SoundPositions["kv70_fix_on"] + self.SoundPositions["kv70_0_t1"] = {110,1e9,Vector(456.5,-20,-8),0.7} + self.SoundPositions["kv70_t1_0_fix"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_t1_0"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_t1_t1a"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_t1a_t1"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_t1a_t2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_t2_t1a"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_0_x1"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_x1_0"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_x1_x2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_x2_x1"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_x2_x3"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_x3_x2"] = self.SoundPositions["kv70_0_t1"] + + self.SoundNames["kv70_0_t1_2"] = "subway_trains/717/kv70_4/kv70_0_t1.mp3" + self.SoundNames["kv70_t1_0_2"] = "subway_trains/717/kv70_4/kv70_t1_0.mp3" + self.SoundNames["kv70_t1_t1a_2"] = "subway_trains/717/kv70_4/kv70_t1_t1a.mp3" + self.SoundNames["kv70_t1a_t1_2"] = "subway_trains/717/kv70_4/kv70_t1a_t1.mp3" + self.SoundNames["kv70_t1a_t2_2"] = "subway_trains/717/kv70_4/kv70_t1a_t2.mp3" + self.SoundNames["kv70_t2_t1a_2"] = "subway_trains/717/kv70_4/kv70_t2_t1a.mp3" + self.SoundNames["kv70_0_x1_2"] = "subway_trains/717/kv70_4/kv70_0_x1.mp3" + self.SoundNames["kv70_x1_0_2"] = "subway_trains/717/kv70_4/kv70_x1_0.mp3" + self.SoundNames["kv70_x1_x2_2"] = "subway_trains/717/kv70_4/kv70_x1_x2.mp3" + self.SoundNames["kv70_x2_x1_2"] = "subway_trains/717/kv70_4/kv70_x2_x1.mp3" + self.SoundNames["kv70_x2_x3_2"] = "subway_trains/717/kv70_4/kv70_x2_x3.mp3" + self.SoundNames["kv70_x3_x2_2"] = "subway_trains/717/kv70_4/kv70_x3_x2.mp3" + self.SoundPositions["kv70_0_t1_2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_t1_0_fix_2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_t1_0_2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_t1_t1a_2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_t1a_t1_2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_t1a_t2_2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_t2_t1a_2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_0_x1_2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_x1_0_2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_x1_x2_2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_x2_x1_2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_x2_x3_2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_x3_x2_2"] = self.SoundPositions["kv70_0_t1"] + + self.SoundNames["ring"] = {loop=0.0,"subway_trains/717/ring/ring2_loop.wav","subway_trains/717/ring/ring2_loop.wav","subway_trains/717/ring/ring2_end.wav"} + self.SoundPositions["ring"] = {60,1e9,Vector(459,6,10),0.5} + self.SoundNames["ring2"] = {loop=0.1,"subway_trains/717/ring/ringc_start.wav","subway_trains/717/ring/ringc_loop.wav","subway_trains/717/ring/ringc_end.mp3"} + self.SoundPositions["ring2"] = {60,1e9,Vector(459,6,10),0.43} + self.SoundNames["ring3"] = {loop=0.1,"subway_trains/717/ring/ringch_start.wav","subway_trains/717/ring/ringch_loop.wav","subway_trains/717/ring/ringch_end.wav"} + self.SoundPositions["ring3"] = {60,1e9,Vector(459,6,10),0.43} + + self.SoundNames["pu_ring"] = self.SoundNames["ring2"] + self.SoundPositions["pu_ring"] = {60,1e9,Vector(450,22,0),0.43} + self.SoundNames["pu_ring2"] = self.SoundNames["ring3"] + self.SoundPositions["pu_ring2"] = {60,1e9,Vector(450,22,0),0.43} + self.SoundNames["pa_ring"] = {loop=0.0,"subway_trains/717/ring/ring_start.wav","subway_trains/717/ring/ring_loop.wav","subway_trains/717/ring/ring_end.wav"} + self.SoundPositions["pa_ring"] = {60,1e9,Vector(450,22,0),0.43} + self.SoundNames["pa_ring2"] = {loop=0.0,"subway_trains/720/ring/ring_loop.wav","subway_trains/720/ring/ring_loop.wav","subway_trains/717/ring/ring_end.wav"} + self.SoundPositions["pa_ring2"] = self.SoundPositions["pa_ring"] + + 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"] = {60,1e9,Vector(420,-49 ,61),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["otsek_door_open"] = {"subway_trains/720/door/door_torec_open.mp3","subway_trains/720/door/door_torec_open2.mp3"} + self.SoundNames["otsek_door_close"] = {"subway_trains/720/door/door_torec_close.mp3","subway_trains/720/door/door_torec_close2.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/igla_start.mp3" + self.SoundNames["igla_start2"] = "subway_trains/common/other/igla/igla_start2.mp3" + self.SoundNames["igla_alarm1"] = "subway_trains/common/other/igla/igla_alarm1.mp3" + self.SoundNames["igla_alarm2"] = "subway_trains/common/other/igla/igla_alarm2.mp3" + self.SoundNames["igla_alarm3"] = "subway_trains/common/other/igla/igla_alarm3.mp3" + self.SoundPositions["igla_on"] = {50,1e9,Vector(458.50,-33,34),0.15} + self.SoundPositions["igla_off"] = {50,1e9,Vector(458.50,-33,34),0.15} + self.SoundPositions["igla_start1"] = {50,1e9,Vector(458.50,-33,34),0.33} + self.SoundPositions["igla_start2"] = {50,1e9,Vector(458.50,-33,34),0.15} + self.SoundPositions["igla_alarm1"] = {50,1e9,Vector(458.50,-33,34),0.33} + self.SoundPositions["igla_alarm2"] = {50,1e9,Vector(458.50,-33,34),0.33} + self.SoundPositions["igla_alarm3"] = {50,1e9,Vector(458.50,-33,34),0.33} + + 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","subway_trains/common/pnm/pnm_switch_off2.mp3"} + self.SoundNames["pnm_button1_on"] = { + "subway_trains/common/pnm/pnm_button_push.mp3", + "subway_trains/common/pnm/pnm_button_push2.mp3", + "subway_trains/common/pnm/pnm_button_push3.mp3", + } + + self.SoundNames["pnm_button2_on"] = { + "subway_trains/common/pnm/pnm_button_push4.mp3", + "subway_trains/common/pnm/pnm_button_push5.mp3", + "subway_trains/common/pnm/pnm_button_push6.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", + "subway_trains/common/pnm/pnm_button_release6.mp3", + } + + 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(450,0,-55)} + + --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"] = {60,1e9,Vector(-420,45,-30),0.86} + self.SoundPositions["vdol_off"] = {60,1e9,Vector(-420,45,-30),0.4} + 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"] + 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"] = {60,1e9,Vector(-420,45,-30),1} + self.SoundPositions["vdz_off"] = {60,1e9,Vector(-420,45,-30),0.4} + + 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} + + 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_end1.mp3","subway_trains/common/door/door_open_end2.mp3","subway_trains/common/door/door_open_end3.mp3","subway_trains/common/door/door_open_end4.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_end3.mp3","subway_trains/common/door/door_close_end4.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_buzz1_"..k] = {loop=true,"subway_announcers/upo/noiseT.wav"} + self.SoundPositions["announcer_buzz1_"..k] = {v[2] or 300,1e9,v[1],v[3]*0.6} + self.SoundNames["announcer_buzz2_"..k] = {loop=true,"subway_announcers/upo/noiseT2.wav"} + self.SoundPositions["announcer_buzz2_"..k] = {v[2] or 300,1e9,v[1],v[3]*0.4 } + 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.2} + 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.2} + self.SoundNames["announcer_noise3_"..k] = {loop=true,"subway_announcers/upo/noiseS3.wav"} + self.SoundPositions["announcer_noise3_"..k] = {v[2] or 300,1e9,v[1],v[3]*0.2} + self.SoundNames["announcer_noiseW"..k] = {loop=true,"subway_announcers/upo/noiseW.wav"} + self.SoundPositions["announcer_noiseW"..k] = {v[2] or 300,1e9,v[1],v[3]*0.2} + end + + self.SoundNames["pa_m"] = "subway_trains/717/pa/key_m.mp3" + self.SoundNames["pa_down"] = "subway_trains/717/pa/key_down.mp3" + self.SoundNames["pa_f"] = "subway_trains/717/pa/key_f.mp3" + self.SoundNames["pa_up"] = "subway_trains/717/pa/key_up.mp3" + self.SoundNames["pa_right"] = "subway_trains/717/pa/key_right.mp3" + self.SoundNames["pa_left"] = "subway_trains/717/pa/key_left.mp3" + self.SoundNames["pa_p"] = "subway_trains/717/pa/key_p.mp3" + + self.SoundNames["pa_1"] = "subway_trains/717/pa/key_1.mp3" + self.SoundNames["pa_2"] = "subway_trains/717/pa/key_2.mp3" + self.SoundNames["pa_3"] = "subway_trains/717/pa/key_3.mp3" + self.SoundNames["pa_4"] = "subway_trains/717/pa/key_4.mp3" + self.SoundNames["pa_5"] = "subway_trains/717/pa/key_5.mp3" + self.SoundNames["pa_6"] = "subway_trains/717/pa/key_6.mp3" + self.SoundNames["pa_7"] = "subway_trains/717/pa/key_7.mp3" + self.SoundNames["pa_8"] = "subway_trains/717/pa/key_8.mp3" + self.SoundNames["pa_9"] = "subway_trains/717/pa/key_9.mp3" + self.SoundNames["pa_esc"] = "subway_trains/717/pa/key_esc.mp3" + self.SoundNames["pa_0"] = "subway_trains/717/pa/key_0.mp3" + self.SoundNames["pa_enter"] = "subway_trains/717/pa/key_enter.mp3" + self.SoundPositions["pa_m"] = {65,1e9,Vector(443.60,20.10,-4.30),0.3} + self.SoundPositions["pa_down"] = self.SoundPositions["pa_m"] + self.SoundPositions["pa_f"] = self.SoundPositions["pa_m"] + self.SoundPositions["pa_up"] = self.SoundPositions["pa_m"] + self.SoundPositions["pa_right"] = self.SoundPositions["pa_m"] + self.SoundPositions["pa_left"] = self.SoundPositions["pa_m"] + self.SoundPositions["pa_p"] = self.SoundPositions["pa_m"] + self.SoundPositions["pa_1"] = self.SoundPositions["pa_m"] + self.SoundPositions["pa_2"] = self.SoundPositions["pa_m"] + self.SoundPositions["pa_3"] = self.SoundPositions["pa_m"] + self.SoundPositions["pa_4"] = self.SoundPositions["pa_m"] + self.SoundPositions["pa_5"] = self.SoundPositions["pa_m"] + self.SoundPositions["pa_6"] = self.SoundPositions["pa_m"] + self.SoundPositions["pa_7"] = self.SoundPositions["pa_m"] + self.SoundPositions["pa_8"] = self.SoundPositions["pa_m"] + self.SoundPositions["pa_9"] = self.SoundPositions["pa_m"] + self.SoundPositions["pa_esc"] = self.SoundPositions["pa_m"] + self.SoundPositions["pa_0"] = self.SoundPositions["pa_m"] + self.SoundPositions["pa_enter"] = self.SoundPositions["pa_m"] + self:SetRelays() + --Vector(-420,45,-30) +end +ENT.PR14XRelaysOrder = {"r1_5_on","r1_5_off","rp8_on","rp8_off","ro_on","ro_off","rpb_on","rpb_off","k6_on","k6_off","rvt_on","rvt_off","kd_on","kd_off","k25_on","k25_off",} +ENT.PR14XRelays = { + --orig 1 + r1_5_on = { + {"kpd110e_on2", 1}, + --^ SPB ONLY ^ + {"kpd110e_on4", 0.8}, + {"kpd110e_on5", 0.8}, + {"kpd110e_on6", 0.8}, + --v MSK ONLY v + --{"kpd110e_on1", 1}, + --{"kpd110e_on3", 0.7}, + --{"kpd110e_on7", 0.8}, + }, + --orig 0.7 + r1_5_off = { + {"kpd110e_off1",0.9}, + {"kpd110e_off2",1}, + --^ SPB ONLY ^ + --v MSK ONLY v + --{"kpd110e_off5", 0.9}, + --{"kpd110e_off6", 0.8}, + }, + --orig 1 + rvt_on = { + {"rev811t_on2", 1}, + {"rev811t_on3", 1}, + {"rev811t_on4", 1}, + {"rev811t_on5", 0.6}, + }, + --orig 1 + rp8_on = { + {"rev811t_on1", 1}, + {"rev811t_on2", 1}, + {"rev811t_on3", 1}, + {"rev811t_on4", 1}, + {"rev811t_on5", 0.6}, + }, + --orig 0.3 + rp8_off = { + {"rev811t_off1",0.3}, + {"rev811t_off2",0.2}, + {"rev811t_off4",0.3}, + }, + ro_on = { + --^ SPB ONLY ^ + {"kpd110e_on4",0.8}, + {"kpd110e_on5",0.8}, + {"kpd110e_on6",0.8}, + {"kpd110e_on1",1}, + {"kpd110e_on3",0.7}, + {"kpd110e_on7",0.8}, + --v MSK ONLY v + }, + ro_off = { + --^ SPB ONLY ^ + {"kpd110e_off1",0.9}, + {"kpd110e_off2",1}, + {"kpd110e_off5",0.9}, + {"kpd110e_off6",0.8}, + --v MSK ONLY v + }, + --1 + rpb_on = {{"rev813t_on1",1},{"rev813t_on2",1}}, + --0.7 + rpb_off = {{"rev813t_off1",0.7}}, + --1 + k6_on = {{"tkpm121_on1",1},{"tkpm121_on2",1}}, + --1 + k6_off = {{"tkpm121_off1",1},{"tkpm121_off2",1}}, +} +ENT.PR14XRelays.rvt_off = ENT.PR14XRelays.rp8_off +ENT.PR14XRelays.kd_on = ENT.PR14XRelays.rp8_on +ENT.PR14XRelays.kd_off = ENT.PR14XRelays.rp8_off +ENT.PR14XRelays.k25_on = ENT.PR14XRelays.ro_on +ENT.PR14XRelays.k25_off = ENT.PR14XRelays.ro_off +function ENT:SetRelays() + local relayConf = self:GetNW2String("RelaysConfig") + if #relayConf<#self.PR14XRelaysOrder then return end + for i,k in ipairs(self.PR14XRelaysOrder) do + local id = tonumber(relayConf[i]) + local v = self.PR14XRelays[k][id] + self.SoundNames[k] = Format("subway_trains/717/relays/%s.mp3",v[1]) + self.SoundPositions[k][4] = v[2] or 1 + end +end + +function ENT:PostInitializeSystems() + self.Electric:TriggerInput("NoRT2",1) + self.Electric:TriggerInput("HaveRO",1) + self.Electric:TriggerInput("GreenRPRKR",0) + self.Electric:TriggerInput("Type",self.Electric.LVZ_2) + self.Electric:TriggerInput("X2PS",1) + self.KRU:TriggerInput("LockX3",1) + if SERVER and (not Metrostroi.MapHasFullSupport or not Metrostroi.MapHasFullSupport("sbpp") and not Metrostroi.MapHasFullSupport("auto")) then + self.PUAV:TriggerInput("CommandDoorsLeft",1) + self.PUAV:TriggerInput("CommandDoorsRight",1) + end +end +function ENT:InitializeSystems() + -- ЭлектроÑиÑтема 81-710 + self:LoadSystem("Electric","81_717_Electric") + + -- Токоприёмник + self:LoadSystem("TR","TR_3B") + -- ЭлектротÑговые двигатели + self:LoadSystem("Engines","DK_117DM") + + -- РезиÑторы Ð´Ð»Ñ Ñ€ÐµÐ¾Ñтата/пуÑковых Ñопротивлений + self:LoadSystem("KF_47A","KF_47A1") + -- РезиÑторы Ð´Ð»Ñ Ð¾ÑÐ»Ð°Ð±Ð»ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð±ÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ + self:LoadSystem("KF_50A") + -- Ящик Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñ…Ñ€Ð°Ð½Ð¸Ñ‚ÐµÐ»Ñми + self:LoadSystem("YAP_57") + + -- РезиÑторы Ð´Ð»Ñ Ñ†ÐµÐ¿ÐµÐ¹ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + --self:LoadSystem("YAS_44V") + self:LoadSystem("Reverser","PR_722D") + -- РеоÑтатный контроллер Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑƒÑковыми ÑÐ¾Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð»ÐµÐ½Ð¸Ñ + self:LoadSystem("RheostatController","EKG_17B") + -- Групповой переключатель положений + self:LoadSystem("PositionSwitch","PKG_761") + -- Кулачковый контроллер + self:LoadSystem("KV","KV_70") + -- Контроллер резервного ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + self:LoadSystem("KRU") + + + -- Ящики Ñ Ñ€ÐµÐ»Ðµ и контакторами + self:LoadSystem("BV","BV_630") + self:LoadSystem("LK_755A") + self:LoadSystem("YAR_13B","YAR_13B_SPB") + self:LoadSystem("YAR_27") + self:LoadSystem("YAK_36") + self:LoadSystem("YAK_37E") + self:LoadSystem("YAS_44V") + self:LoadSystem("YARD_2") + self:LoadSystem("PR_14X_Panels") + + -- ПневмоÑиÑтема 81-710 + self:LoadSystem("Pneumatic","81_717_Pneumatic") + -- Панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ 81-710 + self:LoadSystem("Panel","81_717LVZ_Panel") + -- Everything else + self:LoadSystem("Battery") + self:LoadSystem("PowerSupply","BPSN") + --self:LoadSystem("DURA") + self:LoadSystem("ALS_ARS","81_717_BARS") + + self:LoadSystem("PUAV") + if Metrostroi.MapHasFullSupport and Metrostroi.MapHasFullSupport("sbpp") then + self:LoadSystem("SBPP") + if SERVER then self:SetNW2Bool("SBPP",true) end + else + self:LoadSystem("IPAV") + end + self:LoadSystem("PAM") + + --self:LoadSystem("Radiostation","Motorola") + self:LoadSystem("IGLA_PCBK") + + + self:LoadSystem("RouteNumber","81_71_RouteNumber",3) + + self:LoadSystem("Horn") + self:LoadSystem("Announcer","81_71_Announcer", "AnnouncementsUPO") + self:LoadSystem("UPO","81_71_UPO") + self:LoadSystem("ASNP_VV","81_71_ASNP_VV") +end + +--------------------------------------------------- +-- Defined train information +-- Types of wagon(for wagon limit system): +-- 0 = Head or intherim +-- 1 = Only head +-- 2 = Only intherim +--------------------------------------------------- +ENT.SubwayTrain = { + Type = "81", + Name = "81-717.5", + Manufacturer = "LVZ", + WagType = 1, + ALS = { + HaveAutostop = true, + TwoToSix = false, + RSAs325Hz = false, + Aproove0As325Hz = true, + }, + IPAV = { + Systems = {"PUAV"} + }, + EKKType = 717, + NoFrontEKK=true, +} +--[[ +7874-8189 (белый плаÑтик Ñ Ñиними\зелеными вÑтавками, преимущеÑтвенно Ñтарые Ñидухи, либо Ñиние) +8190-8202 (плаÑтик под дерево, преимущеÑтвенно Ñтарые Ñидухи, либо коричневые) +8308-8319 (зеленый плаÑтик, Ñтарые Ñидухи) +8320-8399 (плаÑтик под дерево, преимущеÑтвенно Ñтраые Ñидухи, либо Ñиние) +8868-8964 (.5 - Ñветлый плаÑтик под дерево, преимущеÑтвенно Ñтарые Ñидухи, либо коричневые) +11000-11306 (белый плаÑтик Ñ Ð·ÐµÐ»ÐµÐ½Ñ‹Ð¼Ð¸ вÑтавками, преимущеÑтвенно Ñтарые Ñидухи, либо Ñиние) +11322-11378 (плаÑтик под дерево Ñ Ð±ÐµÐ»Ñ‹Ð¼Ð¸ вÑтавками, коричневые Ñидухи) +]] +ENT.NumberRanges = { + { + true, + { + --717 - Vyborgskoe PAKSD-M, (вÑÑ 8400-8500 фары 2-2 на 50%, ребра жеÑткоÑти рандомно), + --КВР(белый Ñалон, 013, боковые автоматы) рандом + 8433,8434,8435,8436,8437,8438,8439,8440,8447,8448,8449,8450,8452,8453,8454,8455,8456,8467,8468,8469,8470,8471,8472,8473,8475,8476,8477,8478,8479,8480,8482,8483,8484,8485,8486,8487,8488,8491,8492,8494,8495,8496,8497,8498,8540,8541,8542,8543,8544,8545,8546,8595,8598,8599,8628,8685,8688,8763,8823,8824,8834,8855,8862,8863,8864,8865,8866,8867,8868,8869,8870,8871,8872,8873,8874, + }, + }, + { + true, + { + --717.5 Vyborgskoe PAKSD-M, 013, + --боковые автоматы, 2-2-2 без ребер + --White + 8875,8887,8888, + --LightWood + 8900,8889,8890,8895,8896,8898,8899,8948,8949,8950,8951,8952,8953,8960,8961,8962,8963,8964, + --Cyan + 10014,10015,10016,10017,10018,10019,10020,10021,10022,10023,10024,10025,10026,10027,10051,10052,10053,10054,10061,10062,10063,10064,10065,10073,10074,10110,10111, + --DIMASOM, yellow controller, Cyan + --10129,10130, + ---- БÐРС +ПÐМ, blue controller, циановый Ñалон + --10175,10176, + } + }, + { + true, + --717 Nevskoe PUAV - tip 5 (вÑÑ 8400-8500 фары 2-2, ребра жеÑткоÑти рандомно), + --КВР рандом(белый Ñалон, ÑидениÑ) + {8441,8451,8457,8474,8481,8489,8490,8493,8582,8583,8592,8593,8594,8603,8610,8622,8623,8624,8625,8626,8627,8679,8680,8681,8682,8683,8684,8686,8687,8689,8690,8691,8692,8693,8694,8695,8696,8697,8739,8740,8741,8742,8743,8744,8761,8762,8764,8765,8781,8782,8801,8805,8806,8807,8808,8813} + }, + { + true, + { + --717.5 Moscowskoe PA-M + --Cyan + 10070,10071,10072, + --White + 8897,10104,10105,10112,10124,10125,10126,10147,10148,10162,10163,10173,10174, + --Darkwood white + 10177, + --Darkwood + 10178, + } + }, +} + +ENT.Spawner = { + model = { + "models/metrostroi_train/81-717/81-717_spb.mdl", + "models/metrostroi_train/81-717/interior_spb.mdl", + "models/metrostroi_train/81-717/717_body_additional_spb.mdl", + "models/metrostroi_train/81-717/brake_valves/334.mdl", + "models/metrostroi_train/81-717/lamps_type1.mdl", + "models/metrostroi_train/81-717/couch_old.mdl", + "models/metrostroi_train/81-717/couch_cap_l.mdl", + "models/metrostroi_train/81-717/handlers_old.mdl", + "models/metrostroi_train/81-717/mask_spb_222.mdl", + "models/metrostroi_train/81-717/couch_cap_r.mdl", + "models/metrostroi_train/81-717/cabine_spb_central.mdl", + "models/metrostroi_train/81-717/pult/body_spb_yellow.mdl", + "models/metrostroi_train/81-717/pult/pult_spb_yellow.mdl", + "models/metrostroi_train/81-717/pult/puav_new.mdl", + "models/metrostroi_train/81-717/pult/ars_spb_yellow.mdl", + }, + interim = "gmod_subway_81-714_lvz", + func = function(train,i,max,LastRot) + local typ = train:GetNW2Int("Type") + if 1==i or i==max then + train.NumberRangesID = typ==1 and math.ceil(math.random()+0.5) or typ+1 + else + train.NumberRangesID = typ + end + end, + wagfunc = function(ent,i,num) + end, + --Metrostroi.Skins.GetTable("Texture","Spawner.Texture",false,"train"), + --Metrostroi.Skins.GetTable("PassTexture","Spawner.PassTexture",false,"pass"), + --Metrostroi.Skins.GetTable("CabTexture","Spawner.CabTexture",false,"cab"), + --{"Announcer","Spawner.717.Announcer","List",Announcer}, + --{"KVR","Spawner.717.KVR","Boolean"}, + --{"Blok","Spawner.717L.AutodrivePanel","List",{"Spawner.717L.AutodrivePanel.1"}},--,"Spawner.717L.AutodrivePanel.2","Spawner.717L.AutodrivePanel.3","Spawner.717L.AutodrivePanel.4"}}, + {"Type","Spawner.717.Type","List",{"Spawner.717.Type.Line2","Spawner.717.Type.Line4","Spawner.717.Type.Line5"}}, + {"Scheme","Spawner.717.Schemes","List",function() + local Schemes = {} + for k,v in pairs(Metrostroi.Skins["717_new_schemes"] or {}) do Schemes[k] = v.name or k end + return Schemes + end}, + --{"Crane","Spawner.717.CraneType","List",{"334","013"}}, + --{"MaskType","Spawner.717.MaskType","List",{"2-2","2-2s","2-2-2"}}, + --{"BPSNType","Spawner.717.BPSNType","List",{"Spawner.717.BPSNType.1","Spawner.717.BPSNType.2","Spawner.717.BPSNType.3","Spawner.717.BPSNType.4","Spawner.717.BPSNType.5","Spawner.717.BPSNType.6","Spawner.717.BPSNType.7","Spawner.717.BPSNType.8","Spawner.717.BPSNType.9","Spawner.717.BPSNType.10","Spawner.717.BPSNType.11","Spawner.717.BPSNType.12","Spawner.717.BPSNType.13"}}, + {"SpawnMode","Spawner.717.SpawnMode","List",{"Spawner.717.SpawnMode.Full","Spawner.717.SpawnMode.Deadlock","Spawner.717.SpawnMode.NightDeadlock","Spawner.717.SpawnMode.Depot"}, nil,function(ent,val,rot,i,wagnum,rclk) + if rclk then return end + if ent._SpawnerStarted~=val then + ent.VB:TriggerInput("Set",val<=2 and 1 or 0) + ent.ParkingBrake:TriggerInput("Set",val==3 and 1 or 0) + if ent.AR63 then + local first = i==1 or _LastSpawner~=CurTime() + ent.OhrSig:TriggerInput("Set",val<4 and 1 or 0) + ent.A53:TriggerInput("Set",val<=3 and 1 or 0) + ent.AR63:TriggerInput("Set",val<=2 and 1 or 0) + ent.R_UNch:TriggerInput("Set",val==1 and 1 or 0) + ent.R_UPO:TriggerInput("Set",val<=2 and 1 or 0) + if ent.Plombs.RC1 and val<=2 then + ent.VPAOn:TriggerInput("Set",1) + timer.Simple(1,function() + if not IsValid(ent) or val > 2 then return end + ent.VPAOn:TriggerInput("Set",0) + end) + else + ent.VPAOn:TriggerInput("Set",0) + end + ent.VAU:TriggerInput("Set",(ent.Plombs.RC2 and val<=2) and 1 or 0) + ent.L_4:TriggerInput("Set",val==1 and 1 or 0) + ent.BPSNon:TriggerInput("Set",(val==1 and first) and 1 or 0) + ent.VMK:TriggerInput("Set",(val==1 and first) and 1 or 0) + ent.ARS:TriggerInput("Set",(ent.Plombs.RC1 and val==1 and first) and 1 or 0) + ent.ALS:TriggerInput("Set",(ent.Plombs.RC1 and val==1) and 1 or 0) + ent.L_1:TriggerInput("Set",val==1 and 1 or 0) + ent.L_3:TriggerInput("Set",val==1 and 1 or 0) + ent.L_4:TriggerInput("Set",val==1 and 1 or 0) + ent.EPK:TriggerInput("Set",(ent.Plombs.RC1 and val==1) and 1 or 0) + _LastSpawner=CurTime() + ent.CabinDoor = val==4 and first + ent.PassengerDoor = val==4 + ent.RearDoor = val==4 + else + ent.FrontDoor = val==4 + ent.RearDoor = val==4 + end + if val == 1 then + timer.Simple(1,function() + if not IsValid(ent) then return end + ent.BV:TriggerInput("Enable",1) + end) + end + ent.GV:TriggerInput("Set",val<4 and 1 or 0) + ent._SpawnerStarted = val + end + ent.Pneumatic.TrainLinePressure = val==3 and math.random()*4 or val==2 and 4.5+math.random()*3 or 7.6+math.random()*0.6 + if val==4 then ent.Pneumatic.BrakeLinePressure = 5.2 end + end}, +} \ No newline at end of file diff --git a/lua/entities/gmod_subway_81-717_lvz_custom.lua b/lua/entities/gmod_subway_81-717_lvz_custom.lua new file mode 100644 index 0000000..72ed040 --- /dev/null +++ b/lua/entities/gmod_subway_81-717_lvz_custom.lua @@ -0,0 +1,114 @@ +AddCSLuaFile() +--Entity only for spawner! +function ENT:Initialize() self:Remove() end + +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" +ENT.PrintName = "81-717 SPB Custom" +ENT.SkinsType = "81-717_spb" + +ENT.Spawnable = false +ENT.AdminSpawnable = false + +ENT.SubwayTrain = { + Type = "81", + Name = "81-717.5m", + WagType = 1, + Manufacturer = "SPB", +} + +ENT.Spawner = { + model = { + "models/metrostroi_train/81-717/81-717_spb.mdl", + "models/metrostroi_train/81-717/interior_spb.mdl", + "models/metrostroi_train/81-717/717_body_additional_spb.mdl", + "models/metrostroi_train/81-717/brake_valves/334.mdl", + "models/metrostroi_train/81-717/lamps_type1.mdl", + "models/metrostroi_train/81-717/couch_old.mdl", + "models/metrostroi_train/81-717/couch_cap_l.mdl", + "models/metrostroi_train/81-717/handlers_old.mdl", + "models/metrostroi_train/81-717/mask_spb_222.mdl", + "models/metrostroi_train/81-717/couch_cap_r.mdl", + "models/metrostroi_train/81-717/cabine_spb_central.mdl", + "models/metrostroi_train/81-717/pult/body_spb_yellow.mdl", + "models/metrostroi_train/81-717/pult/pult_spb_yellow.mdl", + "models/metrostroi_train/81-717/pult/puav_new.mdl", + "models/metrostroi_train/81-717/pult/ars_spb_yellow.mdl", + }, + head = "gmod_subway_81-717_lvz", + interim = "gmod_subway_81-714_lvz", + func = function(train,i,max,LastRot) + train.CustomSettings = true + local typ = train:GetNW2Int("Type") + if 1==i or i==max then + train.NumberRangesID = typ==1 and math.ceil(math.random()+0.5) or typ+1 + else + train.NumberRangesID = typ + end + end, + {"Type","Spawner.717.Type","List",{"Spawner.717.Type.Line2","Spawner.717.Type.Line4","Spawner.717.Type.Line5"}}, + {"Scheme","Spawner.717.Schemes","List",function() + local Schemes = {} + for k,v in pairs(Metrostroi.Skins["717_new_schemes"] or {}) do Schemes[k] = v.name or k end + return Schemes + end}, + {}, + Metrostroi.Skins.GetTable("Texture","Spawner.Texture",false,"train"), + Metrostroi.Skins.GetTable("PassTexture","Spawner.PassTexture",false,"pass"), + Metrostroi.Skins.GetTable("CabTexture","Spawner.CabTexture",false,"cab"), + {}, + {"BodyType","Spawner.717.BodyType","List",{"Spawner.717.Common.Random","Spawner.717.Common.Standart","Spawner.717.Common.Old"}}, + {"SeatType","Spawner.717.SeatType","List",{"Spawner.717.Common.Random","Spawner.717.Common.Old","Spawner.717.Common.New","Spawner.717.Common.NewBlue"}}, + {}, + {"SpawnMode","Spawner.717.SpawnMode","List",{"Spawner.717.SpawnMode.Full","Spawner.717.SpawnMode.Deadlock","Spawner.717.SpawnMode.NightDeadlock","Spawner.717.SpawnMode.Depot"}, nil,function(ent,val,rot,i,wagnum,rclk) + if rclk then return end + if ent._SpawnerStarted~=val then + ent.VB:TriggerInput("Set",val<=2 and 1 or 0) + ent.ParkingBrake:TriggerInput("Set",val==3 and 1 or 0) + if ent.AR63 then + local first = i==1 or _LastSpawner~=CurTime() + ent.OhrSig:TriggerInput("Set",val<4 and 1 or 0) + ent.A53:TriggerInput("Set",val<=3 and 1 or 0) + ent.AR63:TriggerInput("Set",val<=2 and 1 or 0) + ent.R_UNch:TriggerInput("Set",val==1 and 1 or 0) + ent.R_UPO:TriggerInput("Set",val<=2 and 1 or 0) + if ent.Plombs.RC1 and val<=2 then + ent.VPAOn:TriggerInput("Set",1) + timer.Simple(1,function() + if not IsValid(ent) or val > 2 then return end + ent.VPAOn:TriggerInput("Set",0) + end) + else + ent.VPAOn:TriggerInput("Set",0) + end + ent.VAU:TriggerInput("Set",(ent.Plombs.RC2 and val<=2) and 1 or 0) + ent.L_4:TriggerInput("Set",val==1 and 1 or 0) + ent.BPSNon:TriggerInput("Set",(val==1 and first) and 1 or 0) + ent.VMK:TriggerInput("Set",(val==1 and first) and 1 or 0) + ent.ARS:TriggerInput("Set",(ent.Plombs.RC1 and val==1 and first) and 1 or 0) + ent.ALS:TriggerInput("Set",(ent.Plombs.RC1 and val==1) and 1 or 0) + ent.L_1:TriggerInput("Set",val==1 and 1 or 0) + ent.L_3:TriggerInput("Set",val==1 and 1 or 0) + ent.L_4:TriggerInput("Set",val==1 and 1 or 0) + ent.EPK:TriggerInput("Set",(ent.Plombs.RC1 and val==1) and 1 or 0) + _LastSpawner=CurTime() + ent.CabinDoor = val==4 and first + ent.PassengerDoor = val==4 + ent.RearDoor = val==4 + else + ent.FrontDoor = val==4 + ent.RearDoor = val==4 + end + if val == 1 then + timer.Simple(1,function() + if not IsValid(ent) then return end + ent.BV:TriggerInput("Enable",1) + end) + end + ent.GV:TriggerInput("Set",val<4 and 1 or 0) + ent._SpawnerStarted = val + end + ent.Pneumatic.TrainLinePressure = val==3 and math.random()*4 or val==2 and 4.5+math.random()*3 or 7.6+math.random()*0.6 + if val==4 then ent.Pneumatic.BrakeLinePressure = 5.2 end + end}, +} diff --git a/lua/entities/gmod_subway_81-717_mvm/cl_init.lua b/lua/entities/gmod_subway_81-717_mvm/cl_init.lua new file mode 100644 index 0000000..d44201d --- /dev/null +++ b/lua/entities/gmod_subway_81-717_mvm/cl_init.lua @@ -0,0 +1,3505 @@ +-------------------------------------------------------------------------------- +-- 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.ClientProps["salon"] = { + model = "models/metrostroi_train/81-717/interior_mvm.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["body_additional"] = { + model = "models/metrostroi_train/81-717/717_body_additional.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["schemes"] = { + model = "models/metrostroi_train/81-717/labels/schemes.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, + callback = function(ent) + ent.PassSchemesDone = false + end, +} +ENT.ClientProps["destination"] = { + model = "models/metrostroi_train/81-717/labels/destination.mdl", + pos = Vector(-0.5,0,0), + ang = Angle(0,0,0), + hide=2, + callback = function(ent) + ent.LastStation.Reloaded = false + end, +} +ENT.ClientProps["destination1"] = { + model = "models/metrostroi_train/81-717/labels/destination.mdl", + pos = Vector(-0.3,0,0), + ang = Angle(0,0,0), + hide=2, + callback = function(ent) + ent.LastStation.Reloaded = false + end, +} +ENT.ButtonMap["LastStation"] = { + pos = Vector(457.7,-27.4,1.75), + ang = Angle(0,90,90), + width = 876, + height = 205, + scale = 0.0625, + buttons = { + {ID = "LastStation-",x=000,y=0,w=438,h=205, tooltip=""}, + {ID = "LastStation+",x=438,y=0,w=438,h=205, tooltip=""}, + } +} +ENT.ClientProps["brake_valve_334"] = { + model = "models/metrostroi_train/81-717/brake_valves/334.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=1, +} +ENT.ClientProps["brake_valve_013"] = { + model = "models/metrostroi_train/81-717/brake_valves/013.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=1, +} +ENT.ClientProps["lamps1"] = { + model = "models/metrostroi_train/81-717/lamps_type1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=1.5, +} +ENT.ClientProps["lamps2"] = { + model = "models/metrostroi_train/81-717/lamps_type2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=1.5, +} +ENT.ClientProps["seats_old"] = { + model = "models/metrostroi_train/81-717/couch_old.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=1.5, +} +ENT.ClientProps["seats_old_cap"] = { + model = "models/metrostroi_train/81-717/couch_cap_l.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, +} +ENT.ClientProps["seats_new"] = { + model = "models/metrostroi_train/81-717/couch_new.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=1.5, +} +ENT.ClientProps["seats_new_cap"] = { + model = "models/metrostroi_train/81-717/couch_new_cap.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, +} +ENT.ClientProps["handrails_old"] = { + model = "models/metrostroi_train/81-717/handlers_old.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=1.5, +} +ENT.ClientProps["handrails_new"] = { + model = "models/metrostroi_train/81-717/handlers_new.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=1.5, +} + +ENT.ClientProps["mask22_mvm_wp"] = { + model = "models/metrostroi_train/81-717/mask_22_wp.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["mask22_mvm"] = { + model = "models/metrostroi_train/81-717/mask_22.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["mask22_glass"] = { + model = "models/metrostroi_train/81-717/mask_22_glass.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["mask22_glass_wp"] = { + model = "models/metrostroi_train/81-717/mask_22_glass_wp.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["mask222_glass"] = { + model = "models/metrostroi_train/81-717/mask_222_glass.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["mask222_glass_wp"] = { + model = "models/metrostroi_train/81-717/mask_222_glass_wp.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["mask222_mvm_wp"] = { + model = "models/metrostroi_train/81-717/mask_spb_222.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["mask222_mvm"] = { + model = "models/metrostroi_train/81-717/mask_222m.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["mask141_mvm"] = { + model = "models/metrostroi_train/81-717/mask_141.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["mask141_mvm_wp"] = { + model = "models/metrostroi_train/81-717/mask_141_wp.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["Headlights222_1"] = { + model = "models/metrostroi_train/81-717/lamps/headlights_222_group1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["Headlights222_2"] = { + model = "models/metrostroi_train/81-717/lamps/headlights_222_group2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["Headlights141_1"] = { + model = "models/metrostroi_train/81-717/lamps/headlights_141_group1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["Headlights141_2"] = { + model = "models/metrostroi_train/81-717/lamps/headlights_141_group2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["Headlights22_1"] = { + model = "models/metrostroi_train/81-717/lamps/headlights_22_group2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["Headlights22_2"] = { + model = "models/metrostroi_train/81-717/lamps/headlights_22_group1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["Headlights22_glass_1"] = { + model = "models/metrostroi_train/81-717/lamps/headlights_22_glass_group2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["Headlights22_glass_2"] = { + model = "models/metrostroi_train/81-717/lamps/headlights_22_glass_group1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["RedLights"] = { + model = "models/metrostroi_train/81-717/lamps/redlights.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(200,200,200), + nohide=true, +} +--[[ +ENT.ClientProps["otsek_cap_l"] = { + model = "models/metrostroi_train/81-717/otsek_cap_l.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0) +} +ENT.ClientProps["otsek_cap_r"] = { + model = "models/metrostroi_train/81-717/otsek_cap_r.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0) +} +]] +ENT.ClientProps["door_otsek1"] = { + model = "models/metrostroi_train/81-717/door_otsek1.mdl", + pos = Vector(375.35,-15.324,5.167), + ang = Angle(0,-90,0), + hideseat=1.7, +} +ENT.ClientProps["door_otsek2"] = { + model = "models/metrostroi_train/81-717/door_otsek2.mdl", + pos = Vector(375.35,-59.65,5.167), + ang = Angle(0,-90,0), + hideseat=1.7, +} +ENT.ClientProps["cap_l"] = { + model = "models/metrostroi_train/81-717/couch_cap_r.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, +} +ENT.ClientProps["door1"] = { + model = "models/metrostroi_train/81-717/door_torec.mdl", + pos = Vector(-472.5,15.75,-2.7), + ang = Angle(0,-90,0), + hide=2, +} +ENT.ClientProps["door2"] = { + model = "models/metrostroi_train/81-717/cab_door.mdl", + pos = Vector(377.322,28.267,-1.599), + ang = Angle(0,-90,0), + hide=2, +} +ENT.ClientProps["door3"] = { + model = "models/metrostroi_train/81-717/door_cabine.mdl", + pos = Vector(443.493,65.111,0.277), + ang = Angle(0,-90,0), + hide=2, +} + +ENT.ClientProps["cabine_mvm"] = { + model = "models/metrostroi_train/81-717/cabine_mvm.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["cabine_lvz"] = { + model = "models/metrostroi_train/81-717/cabine_lvz.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} + +ENT.KVs = { + "models/metrostroi_train/81-717/kv_black.mdl", + "models/metrostroi_train/81-717/kv_white.mdl", + "models/metrostroi_train/81-717/kv_wood.mdl", + "models/metrostroi_train/81-717/kv_yellow.mdl", +} +ENT.ClientProps["Controller"] = { + model = "models/metrostroi_train/81-717/kv_black.mdl", + pos = Vector(435.848+0.08,16.1,-19.779+4.75-0.01), + ang = Angle(0,-90,-32), + hideseat=0.2, + modelcallback = function(ent,cent) + if ent.Anims.Controller then ent.Anims.Controller.reload = true end + return ent.KVs[ent:GetNW2Int("KVType",1)] + end, +} +ENT.ClientProps["body_gray"] = { + model = "models/metrostroi_train/81-717/pult/body_classic.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(255,255,255), + hide=2.5, +} + +ENT.ClientProps["pult_mvm_classic"] = { + model = "models/metrostroi_train/81-717/pult/pult_mvm_classic.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(255,255,255), + hideseat=0.8, +} +ENT.ARSes = { + "models/metrostroi_train/81-717/pult/ars_square.mdl", + "models/metrostroi_train/81-717/pult/ars_round.mdl", + "models/metrostroi_train/81-717/pult/ars_round_yellow.mdl", + "models/metrostroi_train/81-717/pult/ars_old.mdl", + "models/metrostroi_train/81-717/pult/ars_old_yellow.mdl", +} +ENT.ClientProps["ars_mvm"] = { + model = "models/metrostroi_train/81-717/pult/ars_round.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, + modelcallback = function(ent,cent) + return ent.ARSes[ent:GetNW2Int("ARSType",1)] + end, +} +--[[ +ENT.ClientProps["ars_mvm_round"] = { + model = "models/metrostroi_train/81-717/pult/ars_round.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, +} +ENT.ClientProps["ars_mvm_round_yellow"] = { + model = "models/metrostroi_train/81-717/pult/ars_round_yellow.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, +} +ENT.ClientProps["ars_mvm_square"] = { + model = "models/metrostroi_train/81-717/pult/ars_square.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, +} +ENT.ClientProps["ars_mvm_old"] = { + model = "models/metrostroi_train/81-717/pult/ars_old.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, +} +ENT.ClientProps["ars_mvm_old_yellow"] = { + model = "models/metrostroi_train/81-717/pult/ars_old_yellow.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, +}--]] + +--var="ZS",vmin=0,vmax=1,min=0,max=1,speed=16,damping=false, +-- Main panel +ENT.ButtonMap["Block5_6"] = { + pos = Vector(455.0-6,12.3,2.5-10.5+5.35),--446 -- 14 -- -0,5 + ang = Angle(0,-90,44), + width = 480, + height = 225, + scale = 0.0625, + hideseat=0.2, + + buttons = { + { ID = "R_UNchToggle",x=44+25.5*0,y=40,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_w_a.mdl",ang = 180,z=-3, + var="R_UNch",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + { ID = "R_ZSToggle",x=44+25.5*1,y=40,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_w_a.mdl",ang = 180,z=-3, + var="R_ZS",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + { ID = "R_GToggle",x=44+25.5*2,y=40,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_w_a.mdl",ang = 180,z=-3, + var="R_G",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + { ID = "R_RadioToggle",x=44+25.5*3,y=40,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_w_a.mdl",ang = 180,z=-3, + var="R_Radio",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "!R_ProgramToggle",x=155,y=40,radius=0,model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_b_a.mdl",ang = 90,z=-3, + getfunc = function(ent) return ent:GetPackedBool("R_Program1") and 0 or (ent:GetPackedBool("R_Program2") and 1 or 0.5) end, + var="R_Program",speed=16 + }}, + {ID = "R_Program1Set",x=155-20,y=40-10,w=20,h=20,tooltip="",model = { + var="R_Program1",sndid = "!R_ProgramToggle", + sndvol = 0.5,snd = function(val) return val and "triple_0-down" or "triple_down-0" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + noTooltip=false,states={"Train.Buttons.0","Common.ALL.Program1"} + }}, + {ID = "R_Program2Set",x=155+0,y=40-10,w=20,h=20,tooltip="",model = { + var="R_Program2",sndid = "!R_ProgramToggle", + sndvol = 0.5,snd = function(val) return val and "triple_0-up" or "triple_up-0" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + noTooltip=false,states={"Train.Buttons.0","Common.ALL.Program2"} + }}, + + --{ID = "1:KVTSet",x=247,y=33,radius=20,tooltip=""}, + { ID = "1:KVTSet",x=263-(263-234)/2--[[240]],y=36,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl",z = -3, + var="KVT",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button1_on" or "button1_off" end, + sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + { ID = "1:KVTRSet",x=293,y=36,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl",z = -3, + var="KVTR",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button1_on" or "button1_off" end, + sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + { ID = "2:KVTSet",x=293,y=36,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl",z = -3, + var="KVT",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button1_on" or "button1_off" end, + sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + { ID = "2:KVTRSet",x=263-(263-234)/2--[[240]],y=36,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl",z = -3, + var="KVTR",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button1_on" or "button1_off" end, + sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "!L1Light",x=333,y=42,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",ignorepanel = true,skin = 1,z = -3, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=63,x=-0.3,y=-0.3,z=20.6,var="L1",color=Color(255,60,40)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(255,60,40)}, + }}, + {ID = "VZ1Set",x=372.5,y=36,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + var="VZ1",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button2_on" or "button2_off" end, + sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + { ID = "V13Toggle",x=438,y=42,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_w_a.mdl",ang = 180,z=-3, + var="V13",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + + + + --{ID = "AutodriveToggle",x=420,y=92,radius=20,tooltip=""}, + + {ID = "VUD1Toggle",x=60,y=103,radius=40,tooltip="",model = { + model = "models/metrostroi_train/switches/vudblack.mdl",z=-20, + var="VUD1",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"}, + }}, + {ID = "KDLSet",x=60,y=170,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/button_717_3.mdl", + var="KDL",speed=16,min=1,max=0,z=-2, + lamp = {model = "models/metrostroi_train/81-717/buttons/lamp_button_1.mdl",anim=true,var="DoorsLeftL",speed=9,z=2.2,color=Color(255,130,80), + lcolor=Color(255,110,40),lz = 8,lfov=145,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=.485,scale=0.1,z=5,color=Color(255,130,80)}, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "KDLKToggle",x=40,y=180,w=40,h=20,tooltip="",model = { + var="KDLK",speed=8,min=0.32,max=0.678,disable="KDLSet", + model = "models/metrostroi_train/81/krishka.mdl",ang = 0,z = -2.5, + sndvol = 1,snd = function(val) return val and "kr_close" or "kr_open" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + noTooltip = true, + }}, + {ID = "KDLRSet",x=155,y=170,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/button_717_3.mdl", + var="KDLR",speed=16,min=1,max=0,z=-2, + lamp = {model = "models/metrostroi_train/81-717/buttons/lamp_button_1.mdl",anim=true,var="DoorsLeftL",speed=9,z=2.2,color=Color(255,130,80), + lcolor=Color(255,110,40),lz = 8,lfov=145,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=.485,scale=0.1,z=5,color=Color(255,130,80)}, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "KDLRKToggle",x=135,y=180,w=40,h=20,tooltip="",model = { + model = "models/metrostroi_train/81/krishka.mdl",ang = 0,z = -2.5, + var="KDLRK",speed=8,min=0.32,max=0.678,disable="KDLRSet", + sndvol = 1,snd = function(val) return val and "kr_close" or "kr_open" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + noTooltip = true, + }}, + {ID = "DoorSelectToggle",x=107.5,y=183.5,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-8, + var="DoorSelect",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + states={"Train.Buttons.Left","Train.Buttons.Right"} + }}, + {ID = "KRZDSet",x=155,y=85,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + var="KRZD",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "R_VPRToggle",x=107,y=85,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_w_a.mdl",ang = 180,z=-3, + var="R_VPR",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "VozvratRPSet",x=107,y=132,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + var="VozvratRP",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button2_on" or "button1_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + + {ID = "!GreenRPLight",x=155,y=132,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",z = -3, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=2,x=-0.3,y=-0.3,z=20.6,var="GreenRP",color=Color(100,255,100)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(100,255,100)}, + }}, + {ID = "!AVULight",x=333,y=98,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",skin = 1,z = -3, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=62,x=-0.3,y=-0.3,z=20.6,var="AVU",color=Color(255,60,40)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(255,60,40)}, + }}, + {ID = "!LKVPLight",x=377,y=98,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",ignorepanel = true,skin = 3,z = -3, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=25,x=-0.3,y=-0.3,z=20.6,var="LKVP",color=Color(255,170,110)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(255,170,110)}, + }}, + {ID = "!SPLight",x=412,y=42,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",ignorepanel = true,skin = 1,z = -3, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=63,x=-0.3,y=-0.3,z=20.6,var="LSP",color=Color(100,255,50)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(100,255,50)}, + }}, + + {ID = "OtklAVUToggle",x=241,y=85,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=-4, + var="OtklAVU",speed=16, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270,x=-1,y=26,var="OtklAVUPl",ID="OtklAVUPl",}, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "OtklBVSet",x=293,y=90,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + var="OtklBV",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button1_on" or "button1_off" end, + sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + --{ID = "KAHPl",x=37,y=68,radius=20,tooltip=""}, + {ID = "OtklBVKToggle",x=273,y=100,w=40,h=20,tooltip="",model = { + model = "models/metrostroi_train/81/krishka.mdl",ang = 0,z = -1, + var="OtklBVK",speed=8,min=0.378,max=0.685,disable="OtklBVSet", + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=135,x=-17,y=-45,z=-0,var="OtklBVPl",ID="OtklBVPl",}, + getfunc = function(ent) return ent:GetPackedBool("OtklBVK") and 1 or ent.Anims.ARSRToggle and math.max(0,(ent.Anims.ARSRToggle.val-0.5)*2 or 0)^0.2*0.08 or 0 end, + sndvol = 1,snd = function(val) return val and "kr_close" or "kr_open" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + noTooltip = true, + }}, + + { ID = "V11Toggle",x=357,y=70,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_w_a.mdl",ang = 180,z=-3, + var="V11",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + { ID = "V12Toggle",x=400,y=70,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_w_a.mdl",ang = 180,z=-3, + var="V12",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + + {ID = "ConverterProtectionSet",x=333,y=133,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/button_717_1.mdl", + var="ConverterProtection",speed=16,min=1,max=0,z=-4, + lamp = {model = "models/metrostroi_train/81-717/buttons/lamp_button_2.mdl",anim=true,var="RZP",speed=9,z=2.2, + lcolor=Color(255,130,40),lz = 8,lfov=145,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=.5,scale=0.1,z=6,color=Color(255,130,40)}, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + tooltipFunc = function(ent) return ent:GetPackedBool("RZP") and Metrostroi.GetPhrase("Train.Buttons.RZP") end + }}, + {ID = "KSNSet",x=377,y=133,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + var="KSN",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button2_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "RingSet",x=420,y=133,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + var="Ring",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button2_on" or "button2_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + + {ID = "ARSToggle",x=234,y=134,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t2.mdl",ang = 180,z=-6, + var="ARS",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "ALSToggle",x=263,y=134,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t2.mdl",ang = 180,z=-6, + var="ALS",speed=16, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=90,x=2,y=-26,z=2,var="ALSPl",ID="ALSPl",}, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "ARSRToggle",x=293,y=134,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t2.mdl",ang = 180,z=-6, + var="ARSR",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + + {ID = "OVTToggle",x=240,y=181,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-8, + var="OVT",speed=16, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270,x=-1,y=26,z=4,var="OVTPl",ID="OVTPl",}, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "ALSFreqToggle",x=278,y=181,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-8, + var="ALSFreq",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + states={"Train.Buttons.Freq1/5","Train.Buttons.Freq2/6"} + }}, + {ID = "L_1Toggle",x=316,y=181,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-8, + var="L_1",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "L_2Toggle",x=353,y=181,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-8, + var="L_2",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "L_3Toggle",x=391,y=181,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-8, + var="L_3",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "VPToggle",x=429,y=181,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-8, + var="VP",speed=16, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270,x=-1,y=26,z=4,var="VPPl",ID="VPPl",}, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + } +} + +-- Front panel +ENT.ButtonMap["Block7"] = { + pos = Vector(446.22,-17.6,-5.48+5.35), + ang = Angle(0,-90,58), + width = 178, + height = 222, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "L_4Toggle",x=42,y=180.5,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-4, + var="L_4",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "VUSToggle",x=74.5,y=180.5,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-4, + var="VUS",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "VADToggle",x=107,y=180.5,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-4, + var="VAD",speed=16, + --plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270,x=-1,y=28,z=4,var="VADPl",ID="VADPl",}, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "VAHToggle",x=140,y=180.5,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-4, + var="VAH",speed=16, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270,x=-1,y=28,z=4,var="VAHPl",ID="VAHPl",}, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + + {ID = "KRPSet",x=43,y=30,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -2, + var="KRP",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button1_on" or "button1_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "KAHSet",x=43,y=88,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -2, + var="KAH",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button2_on" or "button2_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + --{ID = "KAHPl",x=37,y=68,radius=20,tooltip=""}, + {ID = "KAHKToggle",x=23,y=98,w=40,h=20,tooltip="",model = { + model = "models/metrostroi_train/81/krishka.mdl",ang = 0,z = -1, + var="KAHK",speed=8,min=0.43,max=0.685,disable="KAHSet", + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=135,x=-17,y=-45,z=-0,var="KAHPl",ID="KAHPl",}, + sndvol = 1,snd = function(val) return val and "kr_close" or "kr_open" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + noTooltip = true, + }}, + + {ID = "!PNT",x=45,y=130,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",skin = 2,z = -1, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=43,x=-0.3,y=-0.3,z=20.6,var="PN",color=Color(255,170,110)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(255,170,110)}, + }}, + {ID = "KDPSet",x=90,y=130,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-502/buttons/button_717_3.mdl", + var="KDP",speed=16,min=1,max=0,z=-2, + lamp = {model = "models/metrostroi_train/81-717/buttons/lamp_button_1.mdl",anim=true,var="DoorsRightL",speed=9,z=2.2,color=Color(255,130,80), + lcolor=Color(255,110,40),lz = lz,lfov=165,lbright=145,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=.5,scale=0.1,z=5,color=Color(255,130,80)}, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "KDPKToggle",x=70,y=140,w=40,h=20,tooltip="",model = { + model = "models/metrostroi_train/81/krishka.mdl",ang = 0,z = -1, + var="KDPK",speed=8,min=0.33,max=0.685,disable="KDPSet", + sndvol = 1,snd = function(val,realval) return val and "kr_close" or "kr_open" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + noTooltip = true, + }}, + + {ID = "!PNW",x=135,y=130,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",skin = 4,z = -1, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=81,x=-0.3,y=-0.3,z=20.6,var="BrW",color=Color(255,130,90)}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(255,130,90)}, + }}, + } +} + +ENT.ButtonMap["Block1"] = { + pos = Vector(450.4,28.2,1.3+5.35), + ang = Angle(0,-90,58), + width = 290, + height = 110, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "VMKToggle",x=39,y=30,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-5, + var="VMK",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end,sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "BPSNonToggle",x=80,y=30,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-5, + var="BPSNon",speed=16, + sndvol = 1,snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + + {ID = "RezMKSet",x=80,y=80,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl",z = -2, + var="RezMK",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "ARS13Set",x=130,y=80,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -2, + var="ARS13",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button1_on" or "button2_off" end,sndmin = 60,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "!BatteryVoltage", x=220,y=55,radius=60,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BatteryVoltage"),ent:GetPackedRatio("BatteryVoltage")*150) end}, + } +} + +ENT.ButtonMap["Block3"] = { + pos = Vector(450.4,-10,1.3+5.35), + ang = Angle(0,-90,58), + width = 290, + height = 110, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "!BLTLPressure", x=62, y=55, radius=55, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BLTLPressure"),ent:GetPackedRatio("TLPressure")*16,ent:GetPackedRatio("BLPressure")*16) end}, + {ID = "!BCPressure", x=182, y=55, radius=55, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BCPressure"),ent:GetPackedRatio("BCPressure")*6) end}, + } +} + +ENT.ButtonMap["Block4"] = { + pos = Vector(445.25,23,5.0-11.5+5.35), + ang = Angle(0,-90,58.0), + width = 135, + height = 75, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "R_ASNPMenuSet",x=69,y=56,radius=8,tooltip = "ÐСÐП: Меню",model = { + model = "models/metrostroi_train/81-720/button_round.mdl",z=-10, + var="R_ASNPMenu",speed=12,vmin=0,vmax=0.9, + sndvol = 0.5,snd = function(val) return val and "pnm_button1_on" or "pnm_button1_off" end, + sndmin = 50,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "R_ASNPUpSet",x=123,y=24.5-9,radius=8,tooltip = "ÐСÐП: Вверх",model = { + model = "models/metrostroi_train/81-720/button_round.mdl",z=-10, + var="R_ASNPUp",speed=12,vmin=0,vmax=0.9, + sndvol = 0.5,snd = function(val) return val and "pnm_button1_on" or "pnm_button2_off" end, + sndmin = 50,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "R_ASNPDownSet",x=123,y=24.5+9,radius=8,tooltip = "ÐСÐП: Вниз",model = { + model = "models/metrostroi_train/81-720/button_round.mdl",z=-10, + var="R_ASNPDown",speed=12,vmin=0,vmax=0.9, + sndvol = 0.5,snd = function(val) return val and "pnm_button2_on" or "pnm_button1_off" end, + sndmin = 50,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "R_ASNPOnToggle",x=15,y=22,radius=8,tooltip = "ÐСÐП: Включение",model = { + model = "models/metrostroi_train/81-720/tumbler2.mdl",ang=0, + var="R_ASNPOn",speed=12,vmin=1,vmax=0, + sndvol = 0.5,snd = function(val) return val and "pnm_on" or "pnm_off" end, + sndmin = 50,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + } +} + +ENT.ButtonMap["ASNPScreen"] = { + pos = Vector(445,21.2,-7.25+5.35), + ang = Angle(0,-90,59.0), + width = 512, + height = 128, + scale = 0.025/2.69, + + hideseat=0.2, + hide=true, +} + + +local strength = { + [0] = 0.86, + [1] = 0.29, + [2] = 0.71, + [3] = 0.71, + [4] = 0.57, + [5] = 0.71, + [6] = 0.86, + [7] = 0.43, + [8] = 1.00, + [9] = 0.86, +} +ENT.ButtonMap["Block2_2"] = { + pos = Vector(450.4,10.0,1.3+5.35), + ang = Angle(0,-90,58), + width = 315, + height = 110, + scale = 0.0625, + + hideseat=0.2, + buttons = { + {ID = "!Speedometer1",x=109,y=18.5,w=13,h=22,tooltip="",model = { + name="SSpeed2",model = "models/metrostroi_train/81-717/segments/segment_mvm.mdl",color=Color(175,250,20),skin=0,z=-2,ang=Angle(0,0,-90), + tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.Speed"),ent:GetPackedRatio("Speed")*100) end, + sprite = {bright=0.1,size=.5,scale=0.02,vscale=0.025,z=1,color=Color(225,250,20),getfunc= function(ent) + if not ent:GetPackedBool("LUDS") then return 0 end + return strength[math.floor(ent:GetPackedRatio("Speed")*10)%10] + end}, + }}, + {ID = "!Speedometer2",x=121,y=18.5,w=13,h=22,tooltip="",model = { + name="SSpeed1",model = "models/metrostroi_train/81-717/segments/segment_mvm.mdl",color=Color(175,250,20),skin=0,z=-2,ang=Angle(0,0,-90), + tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.Speed"),ent:GetPackedRatio("Speed")*100) end, + sprite = {bright=0.1,size=.5,scale=0.02,vscale=0.025,z=1,color=Color(225,250,20),getfunc= function(ent) + if not ent:GetPackedBool("LUDS") then return 0 end + return strength[math.floor(ent:GetPackedRatio("Speed")*100)%10] + end}, + }}, + + {ID = "!ARSOch",x=45+26.67*0,y=51.1,w=18,h=10,tooltip="",model = { + name="SAOCh",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamps_mvm_s04.mdl",z=-2,ang=Angle(0,0,90),var="AR04"}, + sprite = {bright=0.5,size=0.25,scale=0.03,vscale=0.02,color=Color(255,20,40),z=-1,} + }}, + {ID = "!ARS0",x=45+26.67*1,y=51.1,w=18,h=10,tooltip="",model = { + name="SA0",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamps_mvm_s0.mdl",z=-2,ang=Angle(0,0,90),var="AR0"}, + sprite = {bright=0.5,size=0.25,scale=0.03,vscale=0.02,color=Color(255,20,40),z=-1,} + }}, + {ID = "!ARS40",x=45+26.67*2,y=51.1,w=18,h=10,tooltip="",model = { + name="SA40",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamps_mvm_s40.mdl",z=-2,ang=Angle(0,0,90),var="AR40"}, + sprite = {bright=0.1,size=0.25,scale=0.03,vscale=0.02,color=Color(150,100,30),z=-1,} + }}, + {ID = "!ARS60",x=45+26.67*3,y=51.1,w=18,h=10,tooltip="",model = { + name="SA60",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamps_mvm_s60.mdl",z=-2,ang=Angle(0,0,90),var="AR60"}, + sprite = {bright=0.1,size=0.25,scale=0.03,vscale=0.02,color=Color(125,200,15),z=-1,} + }}, + {ID = "!ARS70",x=45+26.67*4,y=51.1,w=18,h=10,tooltip="",model = { + name="SA70",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamps_mvm_s70.mdl",z=-2,ang=Angle(0,0,90),var="AR70"}, + sprite = {bright=0.1,size=0.25,scale=0.03,vscale=0.02,color=Color(125,200,15),z=-1,} + }}, + {ID = "!ARS80",x=45+26.67*5,y=51.1,w=18,h=10,tooltip="",model = { + name="SA80",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamps_mvm_s80.mdl",z=-2,ang=Angle(0,0,90),var="AR80"}, + sprite = {bright=0.1,size=0.25,scale=0.03,vscale=0.02,color=Color(125,200,15),z=-1,} + }}, + + {ID = "!LampLSD1",x=45+26.67*0,y=57.9-20.0*(-1),w=18,h=10,tooltip="",model = { + name="SSD1",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamps_mvm_lsd.mdl",z=-2,ang=Angle(0,0,90),var="SD"}, + sprite = {bright=0.1,size=0.25,scale=0.03,vscale=0.02,color=Color(125,200,15),z=-1,} + }}, + {ID = "!LampLSD2",x=45+26.67*1,y=57.9-20.0*(-1),w=18,h=10,tooltip="",model = { + name="SSD2",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamps_mvm_lsd.mdl",z=-2,ang=Angle(0,0,90),var="SD"}, + sprite = {bright=0.1,size=0.25,scale=0.03,vscale=0.02,color=Color(125,200,15),z=-1,} + }}, + + {ID = "!LampLVD",x=45+26.67*7.97,y=57.2,w=18,h=10,tooltip="",model = { + name="SVD",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamps_mvm_lvd.mdl",ang=Angle(0,0,90),z=-2,var="VD"}, + sprite = {bright=0.1,size=0.25,scale=0.03,vscale=0.02,color=Color(125,200,15),z=-1,} + }}, + {ID = "!LampLHRK",x=45+26.67*2.51,y=57.9-20.0*(-1),w=18,h=10,tooltip="",model = { + name="SHRK",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamps_mvm_rk.mdl",z=-2,ang=Angle(0,0,90),var="HRK"}, + sprite = {bright=0.1,size=0.25,scale=0.03,vscale=0.02,color=Color(150,100,30),z=-1,} + }}, + {ID = "!LampLST",x=45+26.67*7.96,y=57.9-20.0*(-1),w=18,h=10,tooltip="",model = { + name="SST",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamps_mvm_lst.mdl",ang=Angle(0,0,90),z=-2,var="ST"}, + sprite = {bright=0.1,size=0.25,scale=0.03,vscale=0.02,color=Color(125,200,15),z=-1,} + }}, + --[[{ID = "!LampLRD",x=192.4,y=42.9+9.3*3,w=10,h=4,tooltip="",model = { + name="SRD",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamps_mvm_lst.mdl",z=-0.2,var="RD",var="AR04"}, + }},]] + + + {ID = "!LampRP",x=45+26.67*4,y=57.9-20.0*(-1),w=18,h=10,tooltip="",model = { + name="SRP",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamps_mvm_rp.mdl",z=-1,ang=Angle(0,0,90) ,var="RP"}, + sprite = {bright=0.5,size=0.25,scale=0.03,vscale=0.02,color=Color(255,20,40),z=-1,} + }}, + {ID = "!LampLSN",x=45+26.67*5,y=57.9-20.0*(-1),w=18,h=10,tooltip="",model = { + name="SSN",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamps_mvm_lsn.mdl",z=-1 ,ang=Angle(0,0,90),var="SN"}, + sprite = {bright=0.5,size=0.25,scale=0.03,vscale=0.02,color=Color(255,20,40),z=-1,} + }}, + + --{x=2031 + 2*0,y=223 + 192*0,w=10,h=10,tooltip="",radius=10}, + {ID = "!LampLKVD",x=45+26.67*6.33,y=57.2,w=18,h=10,tooltip="",model = { + name="SKVD",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamps_mvm_lkvd.mdl",ang=Angle(0,0,90),z=-1,var="KVD",}, + sprite = {bright=0.5,size=0.25,scale=0.03,vscale=0.02,color=Color(255,20,40),z=-1,} + }}, + {ID = "!LampLKVC",x=45+26.67*7.97,y=57.15-20.0*2,w=18,h=10,tooltip="",model = { + name="SKVC",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamps_mvm_lkvc.mdl",ang=Angle(0,0,90),z=-1 ,var="KVC"}, + sprite = {bright=0.5,size=0.25,scale=0.03,vscale=0.02,color=Color(255,20,40),z=-1,} + }}, + {ID = "!LampLKT",x=45+26.67*6.33,y=57.9-20.0*(-1),w=18,h=10,tooltip="",model = { + name="SKT",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamps_mvm_lkt.mdl",z=-1,ang=Angle(0,0,90),var="KT"}, + sprite = {bright=0.1,size=0.25,scale=0.03,vscale=0.02,color=Color(125,200,15),z=-1,} + }}, + --[[{ID = "!LampDV",x=222.0,y=42.9+9.3*3,w=10,h=4,tooltip="",model = { + name="SDV",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_gb.mdl",z=-0.2,var="DV",var="AR04"}, + }},]] + + {ID = "!LampLEKK",x=45+26.67*6.33,y=57.15-20.0*2,w=18,h=10,tooltip="",model = { + name="SLEKK",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamps_mvm_gl.mdl",ang=Angle(0,0,90),z=-1 ,var="GLIB"}, + sprite = {bright=0.1,size=0.25,scale=0.03,vscale=0.02,color=Color(125,200,15),z=-1,} + }}, + {ID = "!LampLN",x=45+26.67*6.33,y=57.3-20.0*1,w=18,h=10,tooltip="",model = { + name="SLN",lamp = {speed=16,model = "models/metrostroi_train/81-717/lamps/lamps_mvm_ln.mdl",z=-1,ang=Angle(0,0,90),var="LN"}, + sprite = {bright=0.1,size=0.25,scale=0.03,vscale=0.02,color=Color(125,200,15),z=-1,} + }}, + {ID = "!LampLRS",x=45+26.67*7.97,y=57.2-20.0*1,w=18,h=10,tooltip="",model = { + name="SRS",lamp = {speed=16,model = "models/metrostroi_train/81-717/lamps/lamps_mvm_rc.mdl",z=-1,ang=Angle(0,0,90),var="RS"}, + sprite = {bright=0.1,size=0.25,scale=0.03,vscale=0.02,color=Color(125,200,15),z=-1,} + }}, + } +} +ENT.ButtonMap["Block2_3"] = { + pos = Vector(450.4,10.0,1.3+5.35), + ang = Angle(0,-90,58), + width = 315, + height = 110, + scale = 0.0625, + + hideseat=0.2, + buttons = { + {ID = "!Speedometer",x=110,y=25,w = 95,h = 50,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.Speed"),ent:GetPackedRatio("Speed")*100) end}, + {ID = "!LSD",x=42.5,y=16+17.9*0,w = 35,h = 15,tooltip="",model = { + lamp = {model = "models/metrostroi_train/81-717/lamps/oldars_lsd.mdl",z=6,ang=90,var="SD",speed=6} + }}, + {ID = "!LOch",x=42.5,y=16+17.9*1,w = 35,h = 15,tooltip="",model = { + lamps = { + {model = "models/metrostroi_train/81-717/lamps/oldars_l0.mdl",z=6,ang=90,speed=6,getfunc=function(ent) return (ent:GetPackedBool("AR0") and not ent:GetPackedBool("AR04")) and 1 or 0 end,var="AR04"}, + {model = "models/metrostroi_train/81-717/lamps/oldars_l04.mdl",z=6,ang=90,speed=6,getfunc=function(ent) return (ent:GetPackedBool("AR04") and not ent:GetPackedBool("AR0")) and 1 or 0 end,var="AR0"}, + {model = "models/metrostroi_train/81-717/lamps/oldars_l0_l04.mdl",z=6,ang=90,speed=6,getfunc=function(ent) return (ent:GetPackedBool("AR0") and ent:GetPackedBool("AR04")) and 1 or 0 end,var="AR04"}, + } + }}, + {ID = "!LN",x=42.5,y=16+17.9*2,w = 35,h = 15,tooltip="",model = { + lamps = { + {model = "models/metrostroi_train/81-717/lamps/oldars_ln.mdl",z=6,ang=90,speed=6,getfunc=function(ent) return (ent:GetPackedBool("LN") and not ent:GetPackedBool("AR40")) and 1 or 0 end,var="AR40"}, + {model = "models/metrostroi_train/81-717/lamps/oldars_l40.mdl",z=6,ang=90,speed=6,getfunc=function(ent) return (ent:GetPackedBool("AR40") and not ent:GetPackedBool("LN")) and 1 or 0 end,var="LN"}, + {model = "models/metrostroi_train/81-717/lamps/oldars_ln_l40.mdl",z=6,ang=90,speed=6,getfunc=function(ent) return (ent:GetPackedBool("LN") and ent:GetPackedBool("AR40")) and 1 or 0 end,var="AR40"}, + } + }}, + {ID = "!60",x=42.5,y=16+17.9*3,w = 35,h = 15,tooltip="",model = { + lamps = { + {model = "models/metrostroi_train/81-717/lamps/oldars_l60.mdl",z=6,ang=90,speed=6,getfunc=function(ent) return (ent:GetPackedBool("AR60") and not ent:GetPackedBool("AR80")) and 1 or 0 end,var="AR80"}, + {model = "models/metrostroi_train/81-717/lamps/oldars_l80.mdl",z=6,ang=90,speed=6,getfunc=function(ent) return (ent:GetPackedBool("AR80") and not ent:GetPackedBool("AR60")) and 1 or 0 end,var="AR60"}, + {model = "models/metrostroi_train/81-717/lamps/oldars_l60_l80.mdl",z=6,ang=90,speed=6,getfunc=function(ent) return (ent:GetPackedBool("AR60") and ent:GetPackedBool("AR80")) and 1 or 0 end,var="AR80"}, + } + }}, + {ID = "!70",x=42.5,y=16+17.9*4,w = 35,h = 15,tooltip="",model = { + lamps = { + {model = "models/metrostroi_train/81-717/lamps/oldars_l70.mdl",z=6,ang=90,speed=6,getfunc=function(ent) return (ent:GetPackedBool("AR70") and not ent:GetPackedBool("HRK")) and 1 or 0 end,var="HRK"}, + {model = "models/metrostroi_train/81-717/lamps/oldars_lrk.mdl",z=6,ang=90,speed=6,getfunc=function(ent) return (ent:GetPackedBool("HRK") and not ent:GetPackedBool("AR70")) and 1 or 0 end,var="AR70"}, + {model = "models/metrostroi_train/81-717/lamps/oldars_l70_lrk.mdl",z=6,ang=90,speed=6,getfunc=function(ent) return (ent:GetPackedBool("AR70") and ent:GetPackedBool("HRK")) and 1 or 0 end,var="HRK"}, + } + }}, + + {ID = "!LEKK",x=258 + 29*0,y=20 + 24*0,radius = 12,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",skin = 3,z = -3, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=75,x=-0.3,y=-0.3,z=20.6,color=Color(210,170,255),var="LEKK"}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(210,170,255)}, + }}, + {ID = "!LPU",x=258 + 29*0,y=20 + 24*1,radius = 12,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",skin = 2,z = -3, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=14,x=-0.3,y=-0.3,z=20.6,color=Color(255,130,90),var="RS"}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(255,130,90)}, + }}, + {ID = "!LKVD",x=258 + 29*0,y=20 + 24*2,radius = 12,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",skin = 1,z = -3, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=62,x=-0.3,y=-0.3,z=20.6,color=Color(255,60,40),var="KVD"}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(255,60,40)}, + }}, + {ID = "!LKT",x=258 + 29*0,y=20 + 24*3,radius = 12,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",skin = 2,z = -3, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=105,x=-0.3,y=-0.3,z=20.6,color=Color(100,255,100),var="KT"}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(100,255,100)}, + }}, + + {ID = "!LRP",x=258 + 29*1,y=20 + 24*0,radius = 12,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",skin = 1,z = -3, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=43,x=-0.3,y=-0.3,z=20.6,color=Color(255,60,40),var="RPR",getfunc = function(ent) return ent:GetPackedRatio("RPR") end}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(255,60,40)}, + }}, + {ID = "!LKVC",x=258 + 29*1,y=20 + 24*1,radius = 12,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",skin = 1,z = -3, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=4,x=-0.3,y=-0.3,z=20.6,color=Color(255,60,40),var="KVC"}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(255,60,40)}, + }}, + {ID = "!LVD",x=258 + 29*1,y=20 + 24*2,radius = 12,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",skin = 0,z = -3, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=87,x=-0.3,y=-0.3,z=20.6,color=Color(100,255,100),var="VD"}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(100,255,100)}, + }}, + {ID = "!LST",x=258 + 29*1,y=20 + 24*3,radius = 12,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",skin = 4,z = -3, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=32,x=-0.3,y=-0.3,z=20.6,color=Color(255,170,110),var="ST"}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(255,170,110)}, + }}, + } +} +ENT.ClientProps["speed"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(448.287628,-0.010203,1.644087), + ang = Angle(0.000000,-90.000000,58.000000), + bscale = Vector(1.2,1.2,1.65), + hideseat=0.2, +} + + +ENT.ButtonMap["Block2_1"] = { + pos = Vector(450.4,10.0,1.3+5.35), + ang = Angle(0,-90,58), + width = 300, + height = 110, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "!Speedometer1",x=59.5,y=35.5,w=12,h=20,tooltip="",model = { + name="RSpeed2",model = "models/metrostroi_train/81-717/segments/segment_mvm.mdl",color=Color(175,250,20),skin=0,z=-2,ang=Angle(0,0,-90), + tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.Speed"),ent:GetPackedRatio("Speed")*100) end, + sprite = {bright=0.1,size=.5,scale=0.02,vscale=0.025,z=1,color=Color(225,250,20),getfunc= function(ent) + if not ent:GetPackedBool("LUDS") then return 0 end + return strength[math.floor(ent:GetPackedRatio("Speed")*10)%10] + end}, + }}, + {ID = "!Speedometer2",x=70.5,y=35.5,w=12,h=20,tooltip="",model = { + name="RSpeed1",model = "models/metrostroi_train/81-717/segments/segment_mvm.mdl",color=Color(175,250,20),skin=0,z=-2,ang=Angle(0,0,-90), + tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.Speed"),ent:GetPackedRatio("Speed")*100) end, + sprite = {bright=0.1,size=.5,scale=0.02,vscale=0.025,z=1,color=Color(225,250,20),getfunc= function(ent) + if not ent:GetPackedBool("LUDS") then return 0 end + return strength[math.floor(ent:GetPackedRatio("Speed")*100)%10] + end}, + }}, + {ID = "!ARSOch",x=101.7+17.85*0,y=52,tooltip="",radius=3,model = { + name="RAOCh",lamp = {speed=24,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",color=Color(255,56,30),z=-3.5,var="AR04"}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,56,30),z=-1,} + }}, + {ID = "!ARS0",x=101.85+17.85*1,y=52,tooltip="",radius=3,model = { + name="RA0",lamp = {speed=24,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",color=Color(255,56,30),z=-3.5,var="AR0"}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,56,30),z=-1,} + }}, + {ID = "!ARS40",x=101.75+17.85*2,y=52,tooltip="",radius=3,model = { + name="RA40",lamp = {speed=24,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",color=Color(255,168,000),z=-3.5,var="AR40"}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,168,000),z=-1,} + }}, + {ID = "!ARS60",x=101.4+17.85*3,y=52,tooltip="",radius=3,model = { + name="RA60",lamp = {speed=24,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",color=Color(175,250,20),z=-3.5,var="AR60"}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(175,250,20),z=-1,} + }}, + {ID = "!ARS70",x=101.5+17.85*4,y=52,tooltip="",radius=3,model = { + name="RA70",lamp = {speed=24,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",color=Color(175,250,20),z=-3.5,var="AR70"}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(175,250,20),z=-1,} + }}, + {ID = "!ARS80",x=101.3+17.7*5,y=52,tooltip="",radius=3,model = { + name="RA80",lamp = {speed=24,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",color=Color(175,250,20),z=-3.5,var="AR80"}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(175,250,20),z=-1,} + }}, + + {ID = "!LampLSD1",x=65.4,y=91,tooltip="",radius=3,model = { + name="RSD1",lamp = {speed=24,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",color=Color(175,250,20),z=-3.5,var="SD"}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(175,250,20),z=-1,} + }}, + {ID = "!LampLSD2",x=82.8,y=91,tooltip="",radius=3,model = { + name="RSD2",lamp = {speed=24,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",color=Color(175,250,20),z=-3.5,var="SD"}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(175,250,20),z=-1,} + }}, + + {ID = "!LampLHRK",x=102.3,y=91,tooltip="",radius=3,model = { + name="RRK",lamp = {speed=24,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",color=Color(255,168,000),z=-3.5,var="HRK"}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,168,000),z=-1,} + }}, + + {ID = "!LampRP",x=137.4,y=91,tooltip="",radius=3,model = { + name="RRP",lamp = {speed=24,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",color=Color(255,56,30),z=-3.5,var="RP",getfunc = function(ent) return math.Clamp((ent:GetPackedRatio("RPR")-0.45)*7,0,1) end}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,56,30),z=-1,} + }}, + {ID = "!LampLSN",x=189.3,y=91,tooltip="",radius=3,model = { + name="RSN",lamp = {speed=24,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",color=Color(255,56,30),z=-3.5,var="SN",getfunc = function(ent) return ent:GetPackedRatio("RPR")^2 end}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,56,30),z=-1,} + }}, + + --{x=2031 + 2*0,y=223 + 192*0,tooltip="",radius=10}, + {ID = "!LampLEKK",x=215.5-0.4*1 ,y=31.8 + 19.7*0,tooltip="",radius=3,model = { + name="RLEKK",lamp = {speed=24,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",color=Color(175,250,20),z=-3.5,var="LN"}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(175,250,20),z=-1,} + }}, + {ID = "!LampLN",x=215.5-0.4*1 ,y=31.8 + 19.7*1,tooltip="",radius=3,model = { + name="RLN",lamp = {speed=24,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",color=Color(175,250,20),z=-3.5,var="LN"}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(175,250,20),z=-1,} + }}, + {ID = "!LampLKVD",x=214.8,y=31.8 + 19.7*2,tooltip="",radius=3,model = { + name="RKVD",lamp = {speed=24,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",color=Color(255,56,30),z=-3.5,var="KVD"}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,56,30),z=-1,} + }}, + {ID = "!LampLKT",x=215.5-0.4*2,y=31.8 + 19.7*3,tooltip="",radius=3,model = { + name="RKT",lamp = {speed=24,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",color=Color(175,250,20),z=-3.5,var="KT"}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(175,250,20),z=-1,} + }}, + {ID = "!LampLKVC",x=267.2-1*0,y=31.8 + 19.7*0,tooltip="",radius=3,model = { + name="RKVC",lamp = {speed=24,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",color=Color(255,56,30),z=-3.5,var="KVC"}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,56,30),z=-1,} + }}, + {ID = "!LampLRS",x=266.30,y=31.8 + 19.7*1,tooltip="",radius=3,model = { + name="RRS",lamp = {speed=24,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",color=Color(175,250,20),z=-3.5,var="RS"}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(175,250,20),z=-1,} + }}, + {ID = "!LampLVD",x=265.2,y=31.8 + 19.7*2,tooltip="",radius=3,model = { + name="RVD",lamp = {speed=24,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",color=Color(175,250,20),z=-3.5,var="VD"}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(175,250,20),z=-1,} + }}, + {ID = "!LampLST",x=267.2-0.85*3,y=31.8 + 19.7*3,tooltip="",radius=3,model = { + name="RST",lamp = {speed=24,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",color=Color(175,250,20),z=-3.5,var="ST"}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(175,250,20),z=-1,} + }}, + } +} +ENT.ButtonMap["BZOS_C"] = { + pos = Vector(440.2,-62.15,-1.1), + ang = Angle(0,180,90), + width = 16, + height = 60, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "SAB1Toggle",x=8.2, y=8, radius=8, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t2.mdl",ang = 180,z=-4, + var="SAB1",speed=16, + sndvol = 0.5,snd = function(val) return val and "pnm_on" or "pnm_off" end, + sndmin = 50,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "!VH1",x=8.2, y=27, radius=4, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",z=-5,var="VH1",color=Color(175,250,20)}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(175,250,20),z=-4,} + }}, + {ID = "!VH2",x=8.2, y=44, radius=4, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",z=-5,var="VH2",color=Color(255,56,30)}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,56,30),z=-4,} + }}, + } +} +ENT.ButtonMap["BZOS_R"] = table.Copy(ENT.ButtonMap["BZOS_C"]) +ENT.ButtonMap["BZOS_R"].pos = ENT.ButtonMap["BZOS_R"].pos - Vector(0.3,0,-0.1) +for k,v in pairs(ENT.ButtonMap["BZOS_R"].buttons) do v.ID = "1:"..v.ID end +--[=[ +ENT.ButtonMap["KiyvARS"] = { + pos = Vector(456.97,10.0,12.5), + ang = Angle(0,-90,58), + width = 300, + height = 110, + scale = 0.0625, + + buttons = { + {ID = "!Speedometer1",x=135,y=28,w=17,h=25,tooltip="",model = { + name="KSpeed2",model = "models/metrostroi_train/81-717/segments/segment_spb.mdl",color=Color(175,250,20),skin=0,z=0.1,ang=Angle(0,0,-90), + }}, + {ID = "!Speedometer2",x=157,y=28,w=17,h=25,tooltip="",model = { + name="KSpeed1",model = "models/metrostroi_train/81-717/segments/segment_spb.mdl",color=Color(175,250,20),skin=0,z=0.1,ang=Angle(0,0,-90), + }}, + + {ID = "!ARSOch",x=95.8,y=31.6,w=10,h=10,tooltip="",model = { + name="KAOCh",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_ra.mdl",z=-0.2,var="AR04"}, + }}, + {ID = "!ARS0",x=84.3,y=31.6+11.4*0,w=10,h=10,tooltip="",model = { + name="KA0",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_ra.mdl",z=-0.2,var="AR0"}, + }}, + {ID = "!ARS40",x=84.3,y=31.6+11.4*1,w=10,h=10,tooltip="",model = { + name="KA40",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_ya.mdl",z=-0.2,var="AR40"}, + }}, + {ID = "!ARS60",x=84.3,y=31.6+11.4*2,w=10,h=10,tooltip="",model = { + name="KA60",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_ya.mdl",z=-0.2,var="AR60",color=Color(200,255,200)}, + }}, + {ID = "!ARS70",x=84.3,y=31.6+11.4*3,w=10,h=10,tooltip="",model = { + name="KA70",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_ya.mdl",z=-0.2,var="AR70",color=Color(200,255,200)}, + }}, + {ID = "!ARS80",x=84.3,y=31.6+11.4*4,w=10,h=10,tooltip="",model = { + name="KA80",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_ya.mdl",z=-0.2,var="AR80",color=Color(200,255,200)}, + }}, + + {ID = "!LampLSD1",x=192.5,y=32.7,w=10,h=4,tooltip="",model = { + name="KSD1",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_yb.mdl",z=-0.2,var="SD",color=Color(200,255,200)}, + }}, + {ID = "!LampLSD2",x=202.6,y=32.7,w=10,h=4,tooltip="",model = { + name="KSD2",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_yb.mdl",z=-0.2,ang=90,var="SD",color=Color(200,255,200)}, + }}, + + {ID = "!LampLVD",x=192.5,y=42.8+9.3*0,w=10,h=4,tooltip="",model = { + name="KVD",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_yb.mdl",var="A04",z=-0.2,var="VD",color=Color(200,255,200)}, + }}, + {ID = "!LampLHRK",x=192.5,y=42.8+9.3*1,w=10,h=4,tooltip="",model = { + name="KRK",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_yb.mdl",z=-0.2,var="HRK"}, + }}, + {ID = "!LampLST",x=192.5,y=42.9+9.3*2,w=10,h=4,tooltip="",model = { + name="KST",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_yb.mdl",z=-0.2,var="ST"}, + }}, + {ID = "!LampLRD",x=192.4,y=42.9+9.3*3,w=10,h=4,tooltip="",model = { + name="KRD",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_yb.mdl",z=-0.2,var="RD",color=Color(200,255,200)}, + }}, + + + {ID = "!LampRP",x=212,y=42.9+9.3*0,w=10,h=4,tooltip="",model = { + name="KRP",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_rb.mdl",z=-0.2,var="RP"}, + }}, + {ID = "!LampLSN",x=222.1,y=42.9+9.3*0,w=10,h=4,tooltip="",model = { + name="KSN",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_rb.mdl",z=-0.2,ang=-90,var="SN"}, + }}, + + --{x=2031 + 2*0,y=223 + 192*0,w=10,h=10,tooltip="",radius=10}, + {ID = "!LampLKVD",x=222.0,y=42.9+9.2*1,w=10,h=4,tooltip="",model = { + name="KKVD",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_yb.mdl",z=-0.2,var="KVD"}, + }}, + {ID = "!LampLKT",x=222.0,y=42.9+9.3*2,w=10,h=4,tooltip="",model = { + name="KKT",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_yb.mdl",z=-0.2,var="KT"}, + }}, + {ID = "!LampDV",x=222.0,y=42.9+9.3*3,w=10,h=4,tooltip="",model = { + name="KDV",lamp = {speed=10,model = "models/metrostroi_train/81-717/lamps/lamp_panelspb_yb.mdl",z=-0.2,var="DV",color=Color(200,255,200)}, + }}, + --[[ + {ID = "!LampLN",x=217-0.5*0 ,y=34.6 + 20.7*1,w=10,h=10,tooltip="",model = { + name="KHLN",lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl",color=Color(175,250,20),z=0,var="LN"}, + }}, + {ID = "!LampLRS",x=271.5-1*1,y=34.6 + 20.5*1,w=10,h=10,tooltip="",model = { + name="KHRS",lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl",color=Color(175,250,20),z=0,var="RS"}, + }},]] + } +}]=] + +-- AV panel +ENT.ButtonMap["AV_C"] = { + pos = Vector(396,-17.5,44.6), + ang = Angle(0,90,90), + width = 680, + height = 590, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "A53Toggle",x=30+36.7*0,y=60+157*0,radius=25,tooltip=""}, + {ID = "A56Toggle",x=30+36.7*1,y=60+157*0,radius=25,tooltip=""}, + {ID = "A54Toggle",x=30+36.7*2,y=60+157*0,radius=25,tooltip=""}, + {ID = "A17Toggle",x=30+36.7*3,y=60+157*0,radius=25,tooltip=""}, + {ID = "A44Toggle",x=30+36.7*4,y=60+157*0,radius=25,tooltip=""}, + {ID = "A39Toggle",x=30+36.7*5,y=60+157*0,radius=25,tooltip=""}, + {ID = "A70Toggle",x=30+36.7*6,y=60+157*0,radius=25,tooltip=""}, + {ID = "A14Toggle",x=30+36.7*7,y=60+157*0,radius=25,tooltip=""}, + {ID = "A74Toggle",x=30+36.7*8,y=60+157*0,radius=25,tooltip=""}, + {ID = "A26Toggle",x=30+36.7*9,y=60+157*0,radius=25,tooltip=""}, + {ID = "AR63Toggle",x=30+36.7*10,y=60+157*0,radius=25,tooltip=""}, + {ID = "AS1Toggle",x=30+36.7*11,y=60+157*0,radius=25,tooltip=""}, + {ID = "A13Toggle",x=30+36.7*12,y=60+157*0,radius=25,tooltip=""}, + {ID = "A21Toggle",x=30+36.7*13,y=60+157*0,radius=25,tooltip=""}, + {ID = "A31Toggle",x=30+36.7*14,y=60+157*0,radius=25,tooltip=""}, + {ID = "A32Toggle",x=30+36.7*15,y=60+157*0,radius=25,tooltip=""}, + {ID = "A16Toggle",x=30+36.7*16,y=60+157*0,radius=25,tooltip=""}, + {ID = "A12Toggle",x=30+36.7*17,y=60+157*0,radius=25,tooltip=""}, + ------------------------------------------------------------------------ + {ID = "A24Toggle",x=30+36.7*0,y=60+157*1,radius=25,tooltip=""}, + {ID = "A49Toggle",x=30+36.7*1,y=60+157*1,radius=25,tooltip=""}, + {ID = "A27Toggle",x=30+36.7*2,y=60+157*1,radius=25,tooltip=""}, + {ID = "A72Toggle",x=30+36.7*3,y=60+157*1,radius=25,tooltip=""}, + {ID = "A50Toggle",x=30+36.7*4,y=60+157*1,radius=25,tooltip=""}, + {ID = "A15Toggle",x=30+36.7*5,y=60+157*1,radius=25,tooltip="",lab=8}, + {ID = "AV3Toggle",x=30+36.7*6,y=60+157*1,radius=25,tooltip=""}, + {ID = "AV2Toggle",x=30+36.7*7,y=60+157*1,radius=25,tooltip="",lab=9}, + {ID = "AV4Toggle",x=30+36.7*8,y=60+157*1,radius=25,tooltip="",lab=10}, + {ID = "AV5Toggle",x=30+36.7*9,y=60+157*1,radius=25,tooltip="",lab=11}, + {ID = "AV6Toggle",x=30+36.7*10,y=60+157*1,radius=25,tooltip="",lab=12}, + {ID = "AV1Toggle",x=30+36.7*11,y=60+157*1,radius=25,tooltip="",lab=13}, + {ID = "A29Toggle",x=30+36.7*12,y=60+157*1,radius=25,tooltip=""}, + {ID = "A46Toggle",x=30+36.7*13,y=60+157*1,radius=25,tooltip=""}, + {ID = "A47Toggle",x=30+36.7*14,y=60+157*1,radius=25,tooltip="",lab=17}, + {ID = "A71Toggle",x=30+36.7*15,y=60+157*1,radius=25,tooltip=""}, + {ID = "A7Toggle",x=30+36.7*16,y=60+157*1,radius=25,tooltip=""}, + {ID = "A9Toggle",x=30+36.7*17,y=60+157*1,radius=25,tooltip=""}, + ------------------------------------------------------------------------ + {ID = "A84Toggle",x=30+36.7*0,y=60+157*2,radius=25,tooltip=""}, + {ID = "A8Toggle",x=30+36.7*1,y=60+157*2,radius=25,tooltip=""}, + {ID = "A52Toggle",x=30+36.7*2,y=60+157*2,radius=25,tooltip=""}, + {ID = "A19Toggle",x=30+36.7*3,y=60+157*2,radius=25,tooltip=""}, + {ID = "A48Toggle",x=30+36.7*4,y=60+157*2,radius=25,tooltip=""}, + {ID = "A10Toggle",x=30+36.7*5,y=60+157*2,radius=25,tooltip=""}, + {ID = "A22Toggle",x=30+36.7*6,y=60+157*2,radius=25,tooltip=""}, + {ID = "A30Toggle",x=30+36.7*7,y=60+157*2,radius=25,tooltip=""}, + {ID = "A1Toggle",x=30+36.7*8,y=60+157*2,radius=25,tooltip=""}, + {ID = "A2Toggle",x=30+36.7*9,y=60+157*2,radius=25,tooltip=""}, + {ID = "A3Toggle",x=30+36.7*10,y=60+157*2,radius=25,tooltip=""}, + {ID = "A4Toggle",x=30+36.7*11,y=60+157*2,radius=25,tooltip=""}, + {ID = "A5Toggle",x=30+36.7*12,y=60+157*2,radius=25,tooltip=""}, + {ID = "A6Toggle",x=30+36.7*13,y=60+157*2,radius=25,tooltip=""}, + {ID = "A18Toggle",x=30+36.7*14,y=60+157*2,radius=25,tooltip=""}, + {ID = "A73Toggle",x=30+36.7*15,y=60+157*2,radius=25,tooltip=""}, + {ID = "A20Toggle",x=30+36.7*16,y=60+157*2,radius=25,tooltip=""}, + {ID = "A25Toggle",x=30+36.7*17,y=60+157*2,radius=25,tooltip=""}, + ------------------------------------------------------------------------ + {ID = "A11Toggle",x=30+36.7*0,y=60+157*3,radius=25,tooltip=""}, + {ID = "A37Toggle",x=30+36.7*1,y=60+157*3,radius=25,tooltip=""}, + {ID = "A45Toggle",x=30+36.7*2,y=60+157*3,radius=25,tooltip=""}, + {ID = "A38Toggle",x=30+36.7*3,y=60+157*3,radius=25,tooltip=""}, + {ID = "A51Toggle",x=30+36.7*4,y=60+157*3,radius=25,tooltip=""}, + {ID = "A65Toggle",x=30+36.7*5,y=60+157*3,radius=25,tooltip=""}, + {ID = "A66Toggle",x=30+36.7*6,y=60+157*3,radius=25,tooltip="",lab=16}, + {ID = "A42Toggle",x=30+36.7*7,y=60+157*3,radius=25,tooltip=""}, + {ID = "A43Toggle",x=30+36.7*8,y=60+157*3,radius=25,tooltip=""}, + {ID = "A41Toggle",x=30+36.7*9,y=60+157*3,radius=25,tooltip=""}, + {ID = "A40Toggle",x=30+36.7*10,y=60+157*3,radius=25,tooltip=""}, + {ID = "A75Toggle",x=30+36.7*11,y=60+157*3,radius=25,tooltip=""}, + {ID = "A76Toggle",x=30+36.7*12,y=60+157*3,radius=25,tooltip=""}, + {ID = "A60Toggle",x=30+36.7*13,y=60+157*3,radius=25,tooltip=""}, + {ID = "A58Toggle",x=30+36.7*14,y=60+157*3,radius=25,tooltip="",lab=14}, + {ID = "A57Toggle",x=30+36.7*15,y=60+157*3,radius=25,tooltip=""}, + {ID = "A59Toggle",x=30+36.7*16,y=60+157*3,radius=25,tooltip="",lab=15}, + {ID = "A28Toggle",x=30+36.7*17,y=60+157*3,radius=25,tooltip=""}, + } +} +for i,button in pairs(ENT.ButtonMap.AV_C.buttons) do + button.model = { + model = "models/metrostroi_train/81-720/button_av1.mdl",z=-25, + var=button.ID:Replace("Toggle",""),speed=8, + sndvol = 0.8,snd = function(val) return val and "av_on" or "av_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + } + button.ID = "1:"..button.ID + if button.lab then + button.model.labels={{model="models/metrostroi_train/81-717/labels/label_717.mdl",skin=button.lab,ang=Angle(-90,90,0),z=40,x=2,y=(14<=button.lab and button.lab<=16) and -62 or -65}} + end +end +ENT.ButtonMap["Battery_C"] = { + pos = Vector(410.0,-57,21), + ang = Angle(0,90,90), + width = 255, + height = 280, + scale = 0.0625, + hide=0.8, + + buttons = { + --{ID = "1:RC1Pl",x=45,y=108,radius=20,tooltip=""}, + {ID = "1:UOSToggle",x=40,y=40,radius=40,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons/breaker_rcuos.mdl",z=17,ang=180, + var="UOS",speed=0.5,vmin=1,vmax=0.87, + plomb = {model = "models/metrostroi_train/81/plomb_b.mdl",ang=0,x=25,y=28,var="UOSPl",ID="UOSPl",z=-15,}, + sndvol = 0.8,snd = function(val) return val and "pak_on" or "pak_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "1:VBToggle",x=215,y=40,radius=40,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons/breaker_vb.mdl",z=17,ang=180, + var="VB",speed=0.5,vmin=1,vmax=0.87, + sndvol = 0.8,snd = function(val) return val and "pak_on" or "pak_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "1:RC1Toggle",x=40,y=240,radius=40,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons/breaker_rc1.mdl",z=17,ang=180, + var="RC1",speed=0.5,vmin=1,vmax=0.87, + plomb = {model = "models/metrostroi_train/81/plomb_b.mdl",ang=230,x=-28,y=28,var="RC1Pl",ID="RC1Pl",z=-15,}, + sndvol = 0.8,snd = function(val) return val and "pak_on" or "pak_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + } +} +ENT.ButtonMap["VBD_C"] = { + pos = Vector(410.0,-56.15,36), + ang = Angle(0,90,90), + width = 50, + height = 125, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "1:VBDToggle",x=25,y=25,radius=25,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t2.mdl",ang = 180,z=-2, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=90,x=1,y=-26,var="VBDPl",ID="VBDPl",}, + var="VBD",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "1:UPPS_OnToggle",x=25,y=100,radius=25,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t2.mdl",ang = 180,z=-2, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=90,x=1,y=-26,var="UPPS_OnPl",ID="UPPS_OnPl",}, + var="UPPS_On",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + + } +} + +ENT.ButtonMap["AV_R"] = { + pos = Vector(398.5+11,-52.9+0.6,37.1), + ang = Angle(0,90,90), + width = 398, + height = 358, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "A11Toggle",x=29.7*0,y=155*0,w=25,h=45,tooltip=""}, + {ID = "A17Toggle",x=29.7*1,y=155*0,w=25,h=45,tooltip=""}, + {ID = "A44Toggle",x=29.7*2,y=155*0,w=25,h=45,tooltip=""}, + {ID = "A26Toggle",x=29.7*3,y=155*0,w=25,h=45,tooltip=""}, + {ID = "AR63Toggle",x=29.7*4,y=155*0,w=25,h=45,tooltip=""}, + {ID = "AS1Toggle",x=29.7*5,y=155*0,w=25,h=45,tooltip=""}, + {ID = "A21Toggle",x=29.7*6,y=155*0,w=25,h=45,tooltip=""}, + {ID = "A49Toggle",x=29.7*7,y=155*0,w=25,h=45,tooltip=""}, + {ID = "A27Toggle",x=29.7*8,y=155*0,w=25,h=45,tooltip=""}, + {ID = "A10Toggle",x=29.7*9,y=155*0,w=25,h=45,tooltip=""}, + {ID = "A53Toggle",x=29.7*10,y=155*0,w=25,h=45,tooltip=""}, + {ID = "A54Toggle",x=29.7*11,y=155*0,w=25,h=45,tooltip=""}, + {ID = "A84Toggle",x=29.7*12,y=155*0,w=25,h=45,tooltip=""}, + ------------------------------------------------------------------------ + {ID = "A76Toggle",x=29.7*0,y=155*1,w=25,h=45,tooltip=""}, + {ID = "A48Toggle",x=29.7*1,y=155*1,w=25,h=45,tooltip=""}, + {ID = "AV1Toggle",x=29.7*2,y=155*1,w=25,h=45,tooltip=""}, + {ID = "A29Toggle",x=29.7*3,y=155*1,w=25,h=45,tooltip=""}, + {ID = "A46Toggle",x=29.7*4,y=155*1,w=25,h=45,tooltip=""}, + {ID = "A47Toggle",x=29.7*5,y=155*1,w=25,h=45,tooltip=""}, + {ID = "A43Toggle",x=29.7*6,y=155*1,w=25,h=45,tooltip=""}, + {ID = "A42Toggle",x=29.7*7,y=155*1,w=25,h=45,tooltip=""}, + {ID = "A74Toggle",x=29.7*8,y=155*1,w=25,h=45,tooltip=""}, + {ID = "A73Toggle",x=29.7*9,y=155*1,w=25,h=45,tooltip=""}, + {ID = "A71Toggle",x=29.7*10,y=155*1,w=25,h=45,tooltip=""}, + {ID = "A41Toggle",x=29.7*11,y=155*1,w=25,h=45,tooltip=""}, + {ID = "A45Toggle",x=29.7*12,y=155*1,w=25,h=45,tooltip=""}, + ------------------------------------------------------------------------ + {ID = "A75Toggle",x=29.7*0,y=155*2,w=25,h=45,tooltip=""}, + {ID = "A8Toggle",x=29.7*1,y=155*2,w=25,h=45,tooltip=""}, + {ID = "A52Toggle",x=29.7*2,y=155*2,w=25,h=45,tooltip=""}, + {ID = "A72Toggle",x=29.7*3,y=155*2,w=25,h=45,tooltip=""}, + {ID = "A31Toggle",x=29.7*4,y=155*2,w=25,h=45,tooltip=""}, + {ID = "A32Toggle",x=29.7*5,y=155*2,w=25,h=45,tooltip=""}, + {ID = "A13Toggle",x=29.7*6,y=155*2,w=25,h=45,tooltip=""}, + {ID = "A1Toggle",x=29.7*7,y=155*2,w=25,h=45,tooltip=""}, + {ID = "A20Toggle",x=29.7*8,y=155*2,w=25,h=45,tooltip=""}, + {ID = "A25Toggle",x=29.7*9,y=155*2,w=25,h=45,tooltip=""}, + {ID = "A30Toggle",x=29.7*10,y=155*2,w=25,h=45,tooltip=""}, + {ID = "A56Toggle",x=29.7*11,y=155*2,w=25,h=45,tooltip=""}, + {ID = "A65Toggle",x=29.7*12,y=155*2,w=25,h=45,tooltip=""}, + } +} +for i,button in pairs(ENT.ButtonMap.AV_R.buttons) do + button.model = { + model = "models/metrostroi_train/81-720/button_av1.mdl",z=-25, + var=button.ID:Replace("Toggle",""),speed=8, + sndvol = 0.8,snd = function(val) return val and "av_on" or "av_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + } + button.ID = "2:"..button.ID +end +ENT.ButtonMap["AV_S"] = { + pos = Vector(392,-33,-20), + ang = Angle(0,270,90), + width = 300, + height = 165, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "A2Toggle",x=25*0,y=60*0,w=25,h=45,tooltip=""}, + {ID = "A3Toggle",x=25*1,y=60*0,w=25,h=45,tooltip=""}, + {ID = "A4Toggle",x=25*2,y=60*0,w=25,h=45,tooltip=""}, + {ID = "A5Toggle",x=25*3,y=60*0,w=25,h=45,tooltip=""}, + {ID = "A6Toggle",x=25*4,y=60*0,w=25,h=45,tooltip=""}, + {ID = "A70Toggle",x=25*5,y=60*0,w=25,h=45,tooltip=""}, + {ID = "A14Toggle",x=25*6,y=60*0,w=25,h=45,tooltip=""}, + {ID = "A39Toggle",x=25*7,y=60*0,w=25,h=45,tooltip=""}, + {ID = "A28Toggle",x=25*8,y=60*0,w=25,h=45,tooltip=""}, + {ID = "A38Toggle",x=25*9,y=60*0,w=25,h=45,tooltip=""}, + {ID = "A22Toggle",x=25*10,y=60*0,w=25,h=45,tooltip=""}, + --{ID = "A8Toggle",x=25*11,y=60*0,w=25,h=45,tooltip=""}, + ------------------------------------------------------------------------ + {ID = "AISToggle",x=25*0,y=60*1,w=25,h=45,tooltip=""}, + {ID = "A12Toggle",x=25*1,y=60*1,w=25,h=45,tooltip=""}, + {ID = "A16Toggle",x=25*2,y=60*1,w=25,h=45,tooltip=""}, + {ID = "A37Toggle",x=25*3,y=60*1,w=25,h=45,tooltip=""}, + {ID = "A51Toggle",x=25*4,y=60*1,w=25,h=45,tooltip=""}, + {ID = "A24Toggle",x=25*5,y=60*1,w=25,h=45,tooltip=""}, + {ID = "A19Toggle",x=25*6,y=60*1,w=25,h=45,tooltip=""}, + {ID = "A66Toggle",x=25*7,y=60*1,w=25,h=45,tooltip=""}, + {ID = "A18Toggle",x=25*8,y=60*1,w=25,h=45,tooltip=""}, + {ID = "A40Toggle",x=25*9,y=60*1,w=25,h=45,tooltip=""}, + {ID = "A80Toggle",x=25*10,y=60*1,w=25,h=45,tooltip=""}, + {ID = "A50Toggle",x=25*11,y=60*1,w=25,h=45,tooltip=""}, + --{ID = "A52Toggle",x=25*12,y=60*1,w=25,h=45,tooltip=""}, + ------------------------------------------------------------------------ + {ID = "AV2Toggle",x=25*1,y=60*2,w=25,h=45,tooltip=""}, + {ID = "AV3Toggle",x=25*2,y=60*2,w=25,h=45,tooltip=""}, + {ID = "AV4Toggle",x=25*3,y=60*2,w=25,h=45,tooltip=""}, + {ID = "AV5Toggle",x=25*4,y=60*2,w=25,h=45,tooltip=""}, + {ID = "AV6Toggle",x=25*5,y=60*2,w=25,h=45,tooltip=""}, + {ID = "A15Toggle",x=25*6,y=60*2,w=25,h=45,tooltip=""}, + {ID = "A57Toggle",x=25*7,y=60*2,w=25,h=45,tooltip=""}, + {ID = "A81Toggle",x=25*8,y=60*2,w=25,h=45,tooltip=""}, + {ID = "A7Toggle",x=25*9,y=60*2,w=25,h=45,tooltip=""}, + {ID = "A9Toggle",x=25*10,y=60*2,w=25,h=45,tooltip=""}, + {ID = "A68Toggle",x=25*11,y=60*2,w=25,h=45,tooltip=""}, + --{ID = "A72Toggle",x=25*12,y=60*2,w=25,h=45,tooltip=""}, + } +} +for i,button in pairs(ENT.ButtonMap.AV_S.buttons) do + button.model = { + model = "models/metrostroi_train/81-720/button_av1.mdl",z=-25, + var=button.ID:Replace("Toggle",""),speed=8, + sndvol = 0.8,snd = function(val) return val and "av_on" or "av_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + } +end +ENT.ButtonMap["Battery_R"] = { + pos = Vector(410.0,-54.25,8), + ang = Angle(0,90,90), + width = 440, + height = 157, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "2:RC1Toggle",x=64,y=40,radius=40,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons/breaker_rc1.mdl",z=17,ang=180, + var="RC1",speed=0.5,vmin=1,vmax=0.87, + plomb = {model = "models/metrostroi_train/81/plomb_b.mdl",ang=230,x=-28,y=28,var="RC1Pl",ID="RC1Pl",z=-15,}, + sndvol = 0.8,snd = function(val) return val and "pak_on" or "pak_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "2:VBToggle",x=220,y=40,radius=40,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons/breaker_vb.mdl",z=17,ang=180, + var="VB",speed=0.5,vmin=1,vmax=0.87, + sndvol = 0.8,snd = function(val) return val and "pak_on" or "pak_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + {ID = "2:UOSToggle",x=376,y=40,radius=40,tooltip="",model = { + model = "models/metrostroi_train/81-717/buttons/breaker_rcuos.mdl",z=17,ang=180, + var="UOS",speed=0.5,vmin=1,vmax=0.87, + plomb = {model = "models/metrostroi_train/81/plomb_b.mdl",ang=0,x=25,y=28,var="UOSPl",ID="UOSPl",z=-15,}, + sndvol = 0.8,snd = function(val) return val and "pak_on" or "pak_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + }}, + } +} +ENT.ButtonMap["VBD_R"] = { + pos = Vector(402,-18.05,15), + ang = Angle(0,180,90), + width = 50, + height = 125, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "2:VBDToggle",x=25,y=25,radius=25,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t2.mdl",ang = 180,z=-2, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=90,x=1,y=-26,var="VBDPl",ID="VBDPl",}, + var="VBD",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "2:UPPS_OnToggle",x=25,y=100,radius=25,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t2.mdl",ang = 180,z=-2, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=90,x=1,y=-26,var="UPPS_OnPl",ID="UPPS_OnPl",}, + var="UPPS_On",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + } +} + +ENT.ButtonMap["CabVent_C"] = { + pos = Vector(455.2,47,-11.9), + ang = Angle(0,-90,0), + width = 70, + height = 62, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID="PVK-",x=0, y=0, w=35,h=62, tooltip="",states={"Train.Buttons.Off","Train.Buttons.VentHalf","Train.Buttons.VentFull"},varTooltip = function(ent) return ent:GetPackedRatio("PVK") end,}, + {ID = "!PVK",x=35,y=31,model = { + model = "models/metrostroi_train/81-717/buttons/breaker_common001.mdl",ang = 180,z=15, + getfunc = function(ent) return ent:GetPackedRatio("PVK") end, var="PVK",speed=4,min=1,max=0.75, + sndvol = 1,snd = function(val,val2) return "pvk"..val2 end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID="PVK+",x=35, y=0, w=35,h=62, tooltip="",states={"Train.Buttons.Off","Train.Buttons.VentHalf","Train.Buttons.VentFull"},varTooltip = function(ent) return ent:GetPackedRatio("PVK") end,}, + } +} +ENT.ButtonMap["CabVent_R"] = table.Copy(ENT.ButtonMap["CabVent_C"]) +ENT.ButtonMap["CabVent_R"].pos = ENT.ButtonMap["CabVent_R"].pos - Vector(-0.2,0.6,1.1) +for k,v in pairs(ENT.ButtonMap["CabVent_R"].buttons) do v.ID = "1:"..v.ID end +-- Train driver helpers panel +ENT.ButtonMap["HelperPanel_C"] = { + pos = Vector(447,62.6,17.75), + ang = Angle(0,0,90), + width = 76, + height = 305, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "VUD2Toggle",x=0,y=0,w=76,h=86,tooltip="",model = { + model = "models/metrostroi_train/switches/vudbrown.mdl",z=25, + var="VUD2",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"}, + }}, + {ID = "VDLSet",x=0,y=86,w=76,h=86,tooltip="",model = { + model = "models/metrostroi_train/switches/vudbrown.mdl",z=25, + var="VDL",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 = "R_Program1HSet",x=38,y=230,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + var="R_Program1H",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button2_off" end, + sndmin = 60,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "R_Program2HSet",x=38,y=285,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + var="R_Program2H",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button1_on" or "button3_off" end, + sndmin = 60,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + } +} +ENT.ButtonMap["HelperPanel_R"] = table.Copy(ENT.ButtonMap["HelperPanel_C"]) +ENT.ButtonMap["HelperPanel_R"].pos = ENT.ButtonMap["HelperPanel_R"].pos - Vector(0.7,0,-0.65) +for k,v in pairs(ENT.ButtonMap["HelperPanel_R"].buttons) do v.ID = "1:"..v.ID end + +ENT.ClientProps["reverser"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = Vector(438,-29.9,-14.9), + ang = Angle(-90-22,180,90), + 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["krureverser"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = Vector(443.8,-24.5,-3.2), + ang = Angle(0,-90,60), + 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, +} + +-- UAVA +ENT.ButtonMap["UAVAPanel"] = { + pos = Vector(423,-57,-25.0), + ang = Angle(0,180,90), + width = 180, + height = 200, + scale = 0.0625, + + buttons = { + {ID = "UAVAToggle",x=0, y=0, w=60, h=200, tooltip="", model = { + plomb = {var="UAVAPl", ID="UAVAPl",}, + var="UAVA", + sndid="UAVALever",sndvol = 1, snd = function(val) return val and "uava_on" or "uava_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "UAVACToggle",x=60, y=0, w=120, h=200, tooltip="",var="UAVAC",states={"Train.Buttons.UAVAOff","Train.Buttons.UAVAOn"}}, + } +} +ENT.ClientProps["UAVALever"] = { + model = "models/metrostroi_train/81-703/cabin_uava.mdl", + pos = Vector(422.7,-59.4,-31.6), + ang = Angle(3,-180,0), + hideseat=0.2, +} + +ENT.ButtonMap["Stopkran"] = { + pos = Vector(401,62,17), + ang = Angle(0,0,90), + width = 200, + height = 1300, + scale = 0.1/2, + buttons = { + {ID = "EmergencyBrakeValveToggle",x=0,y=0,w=200,h=1300,tooltip="",states={"Train.Buttons.Closed","Train.Buttons.Opened"},var="EmergencyBrakeValve"}, + } +} +ENT.ClientProps["stopkran"] = { + model = "models/metrostroi_train/81-717/stop_mvm.mdl", + pos = Vector(408.45,62.15,11.5), + ang = Angle(0,0,0), + hideseat=0.2, +} +ENT.ClientSounds["EmergencyBrakeValve"] = {{"stopkran",function() return "disconnect_valve" end,1,1,50,1e3,Angle(-90,0,0)}} + +ENT.ButtonMap["IGLA_C"] = { + pos = Vector(456.15,-25.45,27.1), + ang = Angle(0,-110,90), + width = 512,--18333.333333333333333333333333333 + height = 107,--7916.6666666666666666666666666667 + scale = 0.0171, + hideseat=0.2, + hide=true, +} +ENT.ButtonMap["IGLAButtons_C"] = { + pos = Vector(456.23,-24.87,27.85), + ang = Angle(0,-110,90), + width = 165, + height = 70, + scale = 0.0625, + hideseat=0.2, + buttons = { + {ID = "IGLA1Set",x=23+32.5*0,y=54,w=14,h=12,tooltip="",model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod1.mdl",var="IGLA:ButtonL1",color=Color(175,250,20),x=1,y=-4.7,z=-2.3}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(175,250,20),x=1,y=-4.7,z=-2.3} + }}, + {ID = "IGLA2Set",x=23+32.5*1,y=54,w=14,h=12,tooltip="",model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod1.mdl",var="IGLA:ButtonL2",color=Color(175,250,20),x=0.6,y=-4.7,z=-2.3}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(175,250,20),x=0.6,y=-4.7,z=-2.3} + }}, + {ID = "IGLA23",x=23+32.5*1.5,y=54,w=14,h=12,tooltip=""}, + {ID = "IGLA3Set",x=23+32.5*2,y=54,w=14,h=12,tooltip="",model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod1.mdl",var="IGLA:ButtonL3",color=Color(175,250,20),x=0.2,y=-4.7,z=-2.3}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(175,250,20),x=0.2,y=-4.7,z=-2.3} + }}, + {ID = "IGLA4Set",x=23+32.5*3,y=54,w=14,h=12,tooltip="",model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod1.mdl",var="IGLA:ButtonL4",color=Color(175,250,20),x=0,y=-4.7,z=-2.3}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(175,250,20),x=0,y=-4.7,z=-2.3} + }}, + {ID = "!IGLAFire",x=142.9,y=56,radius=3,tooltip="",model = { + lamp = {speed=16,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",var="IGLA:Fire",color=Color(255,56,30),z=-2.4,ang=0}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,56,30),z=-2.4,} + }}, + {ID = "!IGLAErr",x=142.9,y=63,radius=3,tooltip="",model = { + lamp = {speed=16,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",var="IGLA:Error",color=Color(255,168,000),z=-2.8,ang=0}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,168,000),z=-2.4,} + }}, + } +} + +ENT.ButtonMap["IGLA_R"] = table.Copy(ENT.ButtonMap["IGLA_C"]) +ENT.ButtonMap["IGLAButtons_R"] = table.Copy(ENT.ButtonMap["IGLAButtons_C"]) +ENT.ButtonMap["IGLA_R"].pos = ENT.ButtonMap["IGLA_R"].pos - Vector(0,0,1.09) +ENT.ButtonMap["IGLAButtons_R"].pos = ENT.ButtonMap["IGLAButtons_R"].pos - Vector(0.01,0,1.08) +for k,v in pairs(ENT.ButtonMap["IGLAButtons_R"].buttons) do v.ID = "1:"..v.ID end +ENT.ButtonMap["DriverValveBLDisconnect"] = { + pos = Vector(426.1,-27.3,-20), + ang = Angle(90,-150,90), + 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 = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} +ENT.ButtonMap["DriverValveTLDisconnect"] = { + pos = Vector(429.3,-23,-15), + ang = Angle(90,-150,90), + 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 = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} +ENT.ButtonMap["EPKDisconnect"] = { + pos = Vector(435,-40,-23), + ang = Angle(0,-90-45,45), + width = 200, + height = 120, + scale = 0.0625, + + buttons = { + {ID = "EPKToggle",x=0,y=0,w=200,h=120,tooltip="",model = { + var="EPK",--,sndid="EPK_disconnect", + --sndvol = 1,snd = function(val) return "disconnect_valve" end, + --sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} +ENT.ButtonMap["EPVDisconnect"] = { + pos = Vector(435,-40,-23), + ang = Angle(0,-90-45,45), + width = 200, + height = 120, + scale = 0.0625, + + buttons = { + {ID = "EPKToggle",x=0,y=0,w=200,h=120,tooltip="",model = { + var="EPK",--,sndid="EPK_disconnect", + --sndvol = 1,snd = function(val) return "disconnect_valve" end, + --sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} +ENT.ButtonMap["ParkingBrake"] = { + pos = Vector(456.777527-3,5,-30), + ang = Angle(0,-90,60), + width = 200, + height = 120, + scale = 0.0625, + + buttons = { + {ID = "ParkingBrakeToggle",x=0,y=0,w=200,h=120,tooltip="",model = { + var="ParkingBrake",sndid="parking_brake", + sndvol = 1,snd = function(val) return "disconnect_valve" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + } +} +ENT.ClientProps["parking_brake"] = { + model = "models/metrostroi_train/81-707/cran3.mdl", + pos = Vector(453.6,-0.25,-39.8), + ang = Angle(120,0,180), + hideseat=0.2, +} + +ENT.ClientProps["brake_disconnect"] = { + model = "models/metrostroi_train/81-707/cran1.mdl", + pos = Vector(427.3,-28.9,-32.5), + ang = Angle(90,-60,90), + hideseat=0.2, +} +ENT.ClientSounds["EPK"] = { + {"EPK_disconnect",function() return "disconnect_valve" end,1,1,90,1e3,Angle(-90,0,0)}, + {"EPV_disconnect",function() return "disconnect_valve" end,1,1,90,1e3,Angle(-90,0,0)}, +} +ENT.ClientProps["EPK_disconnect"] = { + model = "models/metrostroi_train/81-707/cran1.mdl", + pos = Vector(432.4,-44.25,-24.7), + ang = Angle(0,-90,0), + hideseat=0.2, +} +ENT.ClientProps["EPV_disconnect"] = { + model = "models/metrostroi_train/81-707/cran1.mdl", + pos = Vector(431.15,-43.5,-24.7), + ang = Angle(0,-90,0), + hideseat=0.2, +} +ENT.ClientProps["train_disconnect"] = { + model = "models/metrostroi_train/81-707/cran3.mdl", + pos = Vector(430.1,-24.0,-24.1), + ang = Angle(90,-60,90), + hideseat=0.2, +} + + +ENT.ButtonMap["DriverValveDisconnect"] = { + pos = Vector(425,-23,-27), + ang = Angle(90,-150,90), + width = 200, + height = 90, + scale = 0.0625, + + buttons = { + {ID = "DriverValveDisconnectToggle",x=0,y=0,w=200,h=90,tooltip="",model = { + var="DriverValveDisconnect",sndid="valve_disconnect", + sndvol = 1,snd = function(val) return "disconnect_valve" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} +ENT.ClientProps["valve_disconnect"] = { + model = "models/metrostroi_train/81-707/cran3.mdl", + pos = Vector(428.15,-22.95,-37.43), + ang = Angle(90,240+2,90), + hideseat=0.2, +} + +ENT.ButtonMap["FrontPneumatic"] = { + pos = Vector(470-9,-45.0,-58.0+5), + 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(449+11, -31, -62), + ang = Angle(-15,-90,0), + hide = 2, +} +ENT.ClientProps["FrontTrain"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_blue.mdl", + pos = Vector(449+11, 31, -62), + 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-1,45.0,-58.0+5), + ang = Angle(0,270,90), + width = 900, + height = 100, + scale = 0.1, + + buttons = { + {ID = "RearTrainLineIsolationToggle",x=500, y=0, w=400, h=100, tooltip="",var="RtI",states={"Train.Buttons.Opened","Train.Buttons.Closed"}}, + {ID = "RearBrakeLineIsolationToggle",x=000, y=0, w=400, h=100, tooltip="",var="RbI",states={"Train.Buttons.Opened","Train.Buttons.Closed"}}, + } +} +ENT.ClientProps["RearTrain"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_blue.mdl", + pos = Vector(-450-22, -34, -62), + ang = Angle(-15,90,0), + hide = 2, +} +ENT.ClientProps["RearBrake"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_red.mdl", + pos = Vector(-450-22, 34, -62), + 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-9.5,50+20,-60+2), + 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-9.5,36+20,-78+2), + 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(-185,-68,-50), + ang = Angle(0,0,90), + width = 170, + height = 80, + scale = 0.1, + hideseat=0.1, + hide=true, + screenHide = true, + + buttons = { + {ID = "AirDistributorDisconnectToggle",x=0,y=0,w= 170,h = 80,tooltip="",var="AD",states={"Train.Buttons.On","Train.Buttons.Off"}}, + } +} + +for i=0,4 do + ENT.ClientProps["TrainNumberL"..i] = { + model = "models/metrostroi_train/common/bort_numbers.mdl", + pos = Vector(41+16+i*6.6-5*6.6/2,67.4,-17.8), + ang = Angle(0,180,0), + skin=i, + hide = 1.5, + callback = function(ent) + ent.WagonNumber = false + end, + } + ENT.ClientProps["TrainNumberR"..i] = { + model = "models/metrostroi_train/common/bort_numbers.mdl", + pos = Vector(64+16-i*6.6-5*6.6/2,-67.4,-17.8), + ang = Angle(0,0,0), + skin=i, + hide = 1.5, + callback = function(ent) + ent.WagonNumber = false + end, + } +end + +ENT.ButtonMap["Route"] = { + pos = Vector(457,43.4,-3.5), + ang = Angle(0,99,90), + width = 153, + height = 130, + scale = 0.0625, + buttons = { + {ID = "RouteNumber1+",x=76.5*0,y=0,w=76.5,h=65,tooltip=""}, + {ID = "RouteNumber2+",x=76.5*1,y=0,w=76.5,h=65,tooltip=""}, + {ID = "RouteNumber1-",x=76.5*0,y=65,w=76.5,h=65,tooltip=""}, + {ID = "RouteNumber2-",x=76.5*1,y=65,w=76.5,h=65,tooltip=""}, + } +} +ENT.ClientProps["route"] = { + model = "models/metrostroi_train/common/routes/ezh/route_holder.mdl", + pos = Vector(-8,0,-5.65), + ang = Angle(0,1,0), + hide = 2, +} + +ENT.ClientProps["route1"] = { + model = "models/metrostroi_train/common/routes/ezh/route_number1.mdl", + pos = ENT.ClientProps["route"].pos, + ang = ENT.ClientProps["route"].ang, + skin=6, + hide = 2, + callback = function(ent) + ent.RouteNumber.Reloaded = false + end, +} +ENT.ClientProps["route2"] = { + model = "models/metrostroi_train/common/routes/ezh/route_number2.mdl", + pos = ENT.ClientProps["route"].pos, + ang = ENT.ClientProps["route"].ang, + skin=1, + hide = 2, + callback = function(ent) + ent.RouteNumber.Reloaded = false + end, +} + +ENT.ButtonMap["CabinDoor"] = { + pos = Vector(414.5,64,56.7), + ang = Angle(0,0,90), + width = 642, + height = 2000, + scale = 0.1/2, + buttons = { + {ID = "CabinDoor",x=0,y=0,w=642,h=2000,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.ButtonMap["OtsekDoor1"] = { + pos = Vector(394.5,28,12.6), + ang = Angle(0,180,90), + width = 310, + height = 130, + scale = 0.1/2, + buttons = { + {ID = "OtsekDoor1",x=0,y=0,w=310,h=130,tooltip="",model = { + var="OtsekDoor1",sndid="door_otsek1", + sndvol = 1,snd = function(val) return "otsek_door_close" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + states = {"Train.Buttons.Closed","Train.Buttons.Opened"} + }}, + } +} +ENT.ButtonMap["OtsekDoor2"] = { + pos = Vector(394.5,28,-15.5), + ang = Angle(0,180,90), + width = 310, + height = 130, + scale = 0.1/2, + buttons = { + {ID = "OtsekDoor2",x=0,y=0,w=310,h=130,tooltip="",model = { + var="OtsekDoor2",sndid="door_otsek2", + sndvol = 1,snd = function(val) return "otsek_door_close" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + states = {"Train.Buttons.Closed","Train.Buttons.Opened"} + }}, + } +} + +ENT.ButtonMap["PassengerDoor"] = { + pos = Vector(390-12.2,29,50.6),--28 + ang = Angle(0,90,90), + width = 642, + height = 2000, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=642,h=2000,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(390-12.2,29+32,50.6),--28 + ang = Angle(0,-90,90), + width = 642, + height = 2000, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=642,h=2000,tooltip=""}, + } +} +ENT.ButtonMap["CabinDoor"] = { + pos = Vector(411,64,50), + ang = Angle(0,0,90), + width = 665, + height = 2000, + scale = 0.1/2, + buttons = { + {ID = "CabinDoor",x=0,y=0,w=665,h=2000,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.ButtonMap["RearDoor"] = { + pos = Vector(-470-3,-16,48.4-2), + ang = Angle(0,90,90), + width = 642, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "RearDoor",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["LeftMirror"] = { + pos = Vector(470.0-0.1,72.75,37.4), + ang = Angle(0,-60,90), + width = 128, + height = 256, + scale = 0.06, +} +ENT.ButtonMap["RightMirror"] = { + pos = Vector(470.0+3.4,-72.75+6,37.4), + ang = Angle(0,-60-60,90), + width = 128, + height = 256, + scale = 0.06, +}--]] +-------------------------------------------------------------------------------- +ENT.ClientPropsInitialized = false +ENT.ClientProps["brake013"] = { + model = "models/metrostroi_train/81-717/cran13.mdl", + pos = Vector(431.5,-20.3,-10.2), + ang = Angle(0,180,0), + hideseat = 0.2, +} +ENT.ClientProps["brake334"] = { + model = "models/metrostroi_train/81-703/cabin_cran_334.mdl", + pos = Vector(432.27,-22.83,-8.2), + ang = Angle(0,-230,0), + hideseat = 0.2, +} +if not ENT.ClientSounds["br_013"] then ENT.ClientSounds["br_013"] = {} end +table.insert(ENT.ClientSounds["br_013"],{"brake013",function(ent,_,var) return "br_013" end,0.7,1,50,1e3,Angle(-90,0,0)}) +if not ENT.ClientSounds["br_334"] then ENT.ClientSounds["br_334"] = {} end +table.insert(ENT.ClientSounds["br_334"],{"brake334",function(ent,_,var) return "br_334_"..var end,1,1,50,1e3,Angle(-90,0,0)}) + + + +ENT.ClientProps["PB"] = { + model = "models/metrostroi_train/81-720/720_pb.mdl", + pos = Vector(450, 18, -37), + ang = Angle(0,-90,8), + hideseat = 0.2, +} +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,1,1,50,1e3,Angle(-90,0,0)}) + +ENT.ClientProps["train_line"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(450.665070,-15.255391,-3.192689+5.35), + ang = Angle(-62.299999,-33.400002,0.000000), + hideseat = 0.2, +} +ENT.ClientProps["brake_line"] = { + model = "models/metrostroi_train/Equipment/arrow_tm.mdl", + pos = Vector(450.684143,-15.267894,-3.204609+5.35), + ang = Angle(-62.299999,-33.400002,0.000000), + hideseat = 0.2, +} +ENT.ClientProps["brake_cylinder"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(450.535736,-22.815704,-3.113149+5.35), + ang = Angle(-62.299999,-33.400002,0.000000), + hideseat = 0.2, +} +ENT.ClientProps["ampermeter"] = { + model = "models/metrostroi/81-717/volt_arrow.mdl", + pos = Vector(452.269592,-30.540430,16.922098), + ang = Angle(90.500000,0.000000,40.000000), + hideseat = 0.2, +} +ENT.ClientProps["voltmeter"] = { + model = "models/metrostroi/81-717/volt_arrow.mdl", + pos = Vector(452.246277,-30.519978,12.287716), + ang = Angle(90.500000,0.000000,40.000000), + hideseat = 0.2, +} +ENT.ButtonMap["HVMeters"] = { + pos = Vector(453.3,-28.7,20.1), + ang = Angle(0,-130,90), + width = 68, + height = 138, + scale = 0.0625, + + buttons = { + {ID = "!EnginesCurrent", x=0, y=0, w=68, h=64, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesCurrent"),ent:GetPackedRatio("EnginesCurrent")*1000-500) end}, + {ID = "!HighVoltage", x=0, y=74, w=68, h=64, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesVoltage"),ent:GetPackedRatio("EnginesVoltage")*1000) end}, + } +} +ENT.ClientProps["volt1"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(449.501740,15.141174,0.812889), + ang = Angle(-58.299999,0.000000,27.968136), + bscale = Vector(1,1,1.47), + hideseat = 0.2, +} + + +ENT.ClientProps["bortlamps1"] = { + model = "models/metrostroi_train/81-717/bort_lamps_body.mdl", + pos = Vector(-52,67,45.5), + ang = Angle(0,0,0), + hide = 2, +} +ENT.ClientProps["bortlamp1_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = ENT.ClientProps.bortlamps1.pos+Vector(0,0.9,3.25), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp1_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = ENT.ClientProps.bortlamps1.pos+Vector(0,0.9,-0.1), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp1_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = ENT.ClientProps.bortlamps1.pos+Vector(0,0.9,-3.3), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamps2"] = { + model = "models/metrostroi_train/81-717/bort_lamps_body.mdl", + pos = Vector(39,-67,45.5), + ang = Angle(0,180,0), + hide = 2, +} +ENT.ClientProps["bortlamp2_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = ENT.ClientProps.bortlamps2.pos+Vector(0,-0.85,3.2), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp2_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = ENT.ClientProps.bortlamps2.pos+Vector(0,-0.85,-0.1), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp2_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = ENT.ClientProps.bortlamps2.pos+Vector(0,-0.85,-3.35), + ang = Angle(0,180,0), + nohide = true, +} +---[[ +ENT.ClientProps["bortlamps3"] = { + model = "models/metrostroi_train/81-502/bort_lamps_body.mdl", + pos = Vector(0,67,53.5), + ang = Angle(90,0,0), + hide = 2, +} +ENT.ClientProps["bortlamp3_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = ENT.ClientProps.bortlamps3.pos+Vector(3.28,0.85,0), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp3_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = ENT.ClientProps.bortlamps3.pos+Vector(-0.06,0.85,0), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp3_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = ENT.ClientProps.bortlamps3.pos+Vector(-3.35,0.85,0), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamps4"] = { + model = "models/metrostroi_train/81-502/bort_lamps_body.mdl", + pos = Vector(0,-67,53.5), + ang = Angle(90,180,0), + hide = 2, +} +ENT.ClientProps["bortlamp4_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = ENT.ClientProps.bortlamps4.pos+Vector(-3.28,-0.85,0), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp4_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = ENT.ClientProps.bortlamps4.pos+Vector(0.06,-0.85,0), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp4_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = ENT.ClientProps.bortlamps4.pos+Vector(3.35,-0.85,0), + ang = Angle(0,180,0), + nohide = true, +}--]] +-------------------------------------------------------------------------------- +-- Add doors +--[[ local function GetDoorPosition(i,k,j) + if j == 0 + then return Vector(338.0-230.1*i+(1-k)*0.8,-65*(1-2*k),0.761) + else return Vector(338.2-230.1*i+(1-k)*0.8,-65*(1-2*k),0.761) + end +end +for i=0,3 do + for k=0,1 do + ENT.ClientProps["door"..i.."x"..k.."a"] = { + model = "models/metrostroi_train/81-717/door_right_spb.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-717/door_left_spb.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-717/81-717_doors_pos1.mdl", + pos = Vector(338.445,65.164,0.807), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door1x1"] = { + model = "models/metrostroi_train/81-717/81-717_doors_pos2.mdl", + pos = Vector(108.324,65.164,0.807), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door2x1"] = { + model = "models/metrostroi_train/81-717/81-717_doors_pos3.mdl", + pos = Vector(-121.682,65.164,0.807), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door3x1"] = { + model = "models/metrostroi_train/81-717/81-717_doors_pos4.mdl", + pos = Vector(-351.531,65.164,0.807), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door0x0"] = { + model = "models/metrostroi_train/81-717/81-717_doors_pos4.mdl", + pos = Vector(338.445,-65.164,0.807), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door1x0"] = { + model = "models/metrostroi_train/81-717/81-717_doors_pos3.mdl", + pos = Vector(108.324,-65.164,0.807), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door2x0"] = { + model = "models/metrostroi_train/81-717/81-717_doors_pos2.mdl", + pos = Vector(-121.682,-65.164,0.807), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door3x0"] = { + model = "models/metrostroi_train/81-717/81-717_doors_pos1.mdl", + pos = Vector(-351.531,-65.164,0.807), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["Lamp_RTM1"] = { + model = "models/metrostroi_train/81-717/rtmlamp.mdl", + pos = Vector(414.367554,-32.449749,6.717192), + ang = Angle(0.000000,180.000000,0.000000), + hideseat = 0.2, +} +ENT.ClientProps["Lamp_RTM2"] = { + model = "models/metrostroi_train/81-717/rtmlamp.mdl", + pos = Vector(447.35,-32.82,-0.90), + ang = Angle(0,-5,0), + hideseat = 0.2, +} +ENT.ClientProps["Lamps_cab1"] = { + model = "models/metrostroi_train/81-717/lamps/lamp_cabine1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat = 0.9, +} +ENT.ClientProps["Lamps_cab2"] = { + model = "models/metrostroi_train/81-717/lamps/lamp_cabine2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat = 0.9, +} +ENT.ClientProps["Lamps2_cab1"] = { + model = "models/metrostroi_train/81-717/lamps/lamp_cabine1.mdl", + pos = Vector(0.5,0,-0.7), + ang = Angle(0,0,0), + hideseat = 0.9, +} +ENT.ClientProps["Lamps2_cab2"] = { + model = "models/metrostroi_train/81-717/lamps/lamp_cabine2.mdl", + pos = Vector(0,0,-0.8), + ang = Angle(0,0,0), + hideseat = 0.9, +} +for i = 0,11 do + --[[ local b = 15--math.random()*15 + local g = 15--b+math.random()*(15-b) + if math.random() > 0.4 then + g = math.random()*15 + b = g + else + g = 15 + b = -10+math.random()*25 + end--]] + ENT.ClientProps["lamp1_"..i+1] = { + model = "models/metrostroi_train/81-717/lamps/lamp_typ1.mdl", + pos = Vector(333.949 - 66.66*i,0,67.7), + ang = Angle(0,0,0), + --color = Color(255,235+g,235+b), + color = Color(255,255,255), + hideseat = 1.1, + } +end +for i = 0,24 do + --[[local r = 15--math.random()*15 + local g = 15--b+math.random()*(15-b) + if math.random() > 0.4 then + r = math.random()*15 + g = r + else + r = 15 + g = -20+math.random()*20 + end--]] + ENT.ClientProps["lamp2_"..i+1] = { + model = "models/metrostroi_train/81-717/lamps/lamp_typ2.mdl", + pos = Vector(354.1 - 32.832*i,0,68.2), + ang = Angle(0,0,0), + --color = Color(245+r,228+g,189), + color = Color(255,255,255), + hideseat = 1.1, + } +end +--[[ + +local pos = Vector(450.273468,-32.306019,13.236823) +local ang = Angle(-18.000000,25.541767,-90.600349) +ENT.ClientProps["TEST"] = { + model = "models/metrostroi_train/81/334cran.mdl", + pos = pos, + ang = ang, + scale=0.1, +}--]] + + +ENT.Lights = { + -- Headlight glow + [1] = { "headlight",Vector(460,0,-40),Angle(0,0,0),Color(216,161,92),farz=5144,brightness = 4, fov=100, texture = "models/metrostroi_train/equipment/headlight",shadows = 1,headlight=true}, + [2] = { "headlight", Vector(460,0,50), Angle(-20,0,0), Color(255,0,0), fov=160 ,brightness = 0.3, farz=450,texture = "models/metrostroi_train/equipment/headlight2",shadows = 0,backlight=true}, + + [3] = { "headlight", Vector(365,-9,50), Angle(50,40,-0), Color(206,135,80), hfov=80, vfov=80,farz=100,brightness = 6,shadows=1, hidden="salon"}, + [4] = { "headlight", Vector(365,-51,50), Angle(50,40,-0), Color(206,135,80), hfov=80, vfov=80,farz=100,brightness = 6,shadows=1, hidden="salon"}, + + -- Manometers + [40] = { "headlight",Vector(451.9,-13.5,-2+5.35),Angle(52.571899-15-5,-129.269775+25+15,49.853062) ,Color(255,125,25),farz = 8,nearz = 2,shadows = 1,brightness = 1,fov = 145,hidden = "pult_mvm_classic"}, + [41] = { "headlight",Vector(451.8,-21,-2+5.35),Angle(52.571899-15-5,-129.269775+25+15,49.853062),Color(255,125,25),farz = 8,nearz = 2,shadows = 1,brightness = 1,fov = 140,hidden = "pult_mvm_classic"}, + [42] = { "headlight",Vector(450.3,13.1,-4.4+5.35),Angle(-136.613632-33,-95.636734-28,137.434570),Color(255,125,25),farz = 8,nearz = 2,shadows = 0,brightness = 1.5,fov = 120,hidden = "pult_mvm_classic"}, + [43] = { "headlight",Vector(451.9-3,3.6+1,3.35+0.5),Angle(0,-90,0),Color(255,125,25),farz = 8,nearz = 2,shadows = 0,brightness = 1.5,fov = 80,hidden = "pult_mvm_classic"}, + -- Voltmeter + [44] = { "headlight",Vector(450.273468,-32.306019,13.236823),Angle(-18.000000,25.541767,-90.600349),Color(255,145,25),farz = 10,nearz = 2,shadows = 1,brightness = 1,fov = 100,hidden = "pult_mvm_classic" }, + [45] = { "headlight",Vector(450.273468,-32.306019,18.236823),Angle(-12.000000,25.541767,-90.600349),Color(255,125,25),farz = 10,nearz = 2,shadows = 1,brightness = 1,fov = 100,hidden = "pult_mvm_classic" }, + + -- Reverse + [8] = { "light",Vector(460,-45, 52), Angle(0,0,0), Color(255,50,50), brightness = 0.2, scale = 2.5, texture = "sprites/light_glow02", size=2}, + [9] = { "light",Vector(460, 45, 52), Angle(0,0,0), Color(255,50,50), brightness = 0.2, scale = 2.5, texture = "sprites/light_glow02", size=2}, + + -- Cabin + [10] = { "dynamiclight", Vector( 425, 0, 30), Angle(0,0,0), Color(216,161,92), distance = 550, brightness = 0.25,hidden = "salon"}, + + -- Interior + [11] = { "dynamiclight", Vector( 200, 0, -0), Angle(0,0,0), Color(255,245,245), brightness = 3, distance = 400 , fov=180,farz = 128, changable = true }, + [12] = { "dynamiclight", Vector( 0, 0, -0), Angle(0,0,0), Color(255,245,245), brightness = 3, distance = 400, fov=180,farz = 128, changable = true }, + [13] = { "dynamiclight", Vector(-200, 0, -0), Angle(0,0,0), Color(255,245,245), brightness = 3, distance = 400 , fov=180,farz = 128, changable = true }, + + -- Side lights + [15] = { "light",Vector(-52,67,45.5)+Vector(0,0.9,3.25), Angle(0,0,0), Color(254,254,254), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5}, + [16] = { "light",Vector(-52,67,45.5)+Vector(0,0.9,-0.02), Angle(0,0,0), Color(40,240,122), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5}, + [17] = { "light",Vector(-52,67,45.5)+Vector(0,0.9,-3.3), Angle(0,0,0), Color(254,210,18), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5}, + [18] = { "light",Vector(39,-67,45.5)+Vector(0,-0.9,3.25), Angle(0,0,0), Color(254,254,254), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5}, + [19] = { "light",Vector(39,-67,45.5)+Vector(0,-0.9,-0.02), Angle(0,0,0), Color(40,240,122), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5}, + [20] = { "light",Vector(39,-67,45.5)+Vector(0,-0.9,-3.3), Angle(0,0,0), Color(254,210,18), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5}, + + [21] = { "light",Vector(0,67,53.5)+Vector(3.25,0.9,-0.02), Angle(0,0,0), Color(254,254,254), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5}, + [22] = { "light",Vector(0,67,53.5)+Vector(-0.06,0.9,-0.02), Angle(0,0,0), Color(40,240,122), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5}, + [23] = { "light",Vector(0,67,53.5)+Vector(-3.33,0.9,-0.02), Angle(0,0,0), Color(254,210,18), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5}, + [24] = { "light",Vector(0,-67,53.5)+Vector(3.33,-0.9,-0.02), Angle(0,0,0), Color(254,254,254), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5}, + [25] = { "light",Vector(0,-67,53.5)+Vector(0.06,-0.9,-0.02), Angle(0,0,0), Color(40,240,122), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5}, + [26] = { "light",Vector(0,-67,53.5)+Vector(-3.28,-0.9,-0.02), Angle(0,0,0), Color(254,210,18), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5}, + + [30] = { "light", Vector(455 , -45, -23.5), Angle(0,0,0), Color(255,220,180), brightness = 0.2, scale = 2.5, texture = "sprites/light_glow02", changable = true, size = 2}, + [31] = { "light", Vector(455 , 45, -23.5), Angle(0,0,0), Color(255,220,180), brightness = 0.2, scale = 2.5, texture = "sprites/light_glow02", changable = true, size = 2}, + [32] = { "light", Vector(455 , 0, 52), Angle(0,0,0), Color(255,220,180), brightness = 0.2, scale = 2.5, texture = "sprites/light_glow02", changable = true, size = 2}, + + Lamp_RTM1 = {"light", Vector(414.367554,-32.449749,6.717192), Angle(0,0,0),Color(255,180,60),brightness = 0.4,scale = 0.03, texture = "sprites/light_glow02", hidden="Lamp_RTM1"}, + Lamp_RTM2 = {"light", Vector(447.35,-32.82,-0.90), Angle(0,0,0),Color(255,180,60),brightness = 0.4,scale = 0.03, texture = "sprites/light_glow02", hidden="Lamp_RTM2"}, + + Lamps_cab1 = {"light", Vector(396.5,14.8,53), Angle(0,0,0),Color(255,220,180),brightness = 0.25,scale = 0.2, texture = "sprites/light_glow02", hidden="Lamps_cab1"}, + Lamps_cab2 = {"light", Vector(428,-1.5,60), Angle(0,0,0),Color(255,220,180),brightness = 0.35,scale = 0.25, texture = "sprites/light_glow02", hidden="Lamps_cab2"}, + Lamps2_cab1 = {"light", Vector(396.5,14.8,52.5), Angle(0,0,0),Color(255,220,180),brightness = 0.25,scale = 0.2, texture = "sprites/light_glow02", hidden="Lamps2_cab1"}, + Lamps2_cab2 = {"light", Vector(428,-1.3,59.2), Angle(0,0,0),Color(255,220,180),brightness = 0.35,scale = 0.25, texture = "sprites/light_glow02", hidden="Lamps2_cab2"}, + +} + +function ENT:Initialize() + self.BaseClass.Initialize(self) + --self.Train:SetPackedRatio("EmergencyValve_dPdT",leak) + --self.Train:SetPackedRatio("EmergencyValveEPK_dPdT",leak) + --self.Train:SetPackedRatio("EmergencyBrakeValve_dPdT",leak) + self.ASNP = self:CreateRT("717ASNP",512,128) + self.IGLA = self:CreateRT("717IGLA",512,128) + self.LeftMirror = self:CreateRT("LeftMirror",128,256) + self.RightMirror = self:CreateRT("RightMirror",128,256) + + self.CraneRamp = 0 + self.CraneLRamp = 0 + self.CraneRRamp = 0 + self.ReleasedPdT = 0 + self.EmergencyValveRamp = 0 + self.EmergencyValveEPKRamp = 0 + self.EmergencyBrakeValveRamp = 0 + self.FrontLeak = 0 + self.RearLeak = 0 + + self.VentCab = 0 + self.VentG1 = 0 + self.VentG2 = 0 + + self.Door1 = false + self.Door2 = false + self.Door3 = false + self.Otsek1 = false + self.Otsek2 = false + + self.ParkingBrake1 = true + self.ParkingBrake2 = true + self.DoorStates = {} + self.DoorLoopStates = {} + for i=0,3 do + for k=0,1 do + self.DoorStates[(k==1 and "DoorL" or "DoorR")..(i+1)] = false + end + end +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 0,RL) + self:SetLightPower(9,RL > 0,RL) + + local headlight = HL1*0.6+HL2*0.4 + self:SetLightPower(1,headlight>0,headlight) + self:SetLightPower(2,self:GetPackedBool("RedLights"),RL) + + self:SetLightPower(30,headlight > 0,headlight) + self:SetLightPower(31,headlight > 0,headlight) + self:SetLightPower(32,headlight > 0 and (mask == 2 or mask == 3),headlight) + + local newBortlamps = self:GetNW2Bool("NewBortlamps") + local Bortlamp_w = self:Animate("Bortlamp_w",self:GetPackedBool("DoorsW") and 1 or 0,0,1,16,false) + local Bortlamp_g = self:Animate("Bortlamp_g",self:GetPackedBool("GRP") and 1 or 0,0,1,16,false) + local Bortlamp_y = self:Animate("Bortlamp_y",self:GetPackedBool("BrW") and 1 or 0,0,1,16,false) + if newBortlamps then + self:ShowHide("bortlamps1",true) + self:ShowHide("bortlamps2",true) + self:ShowHide("bortlamps3",false) + self:ShowHide("bortlamps4",false) + self:ShowHideSmooth("bortlamp1_w",Bortlamp_w) + self:ShowHideSmooth("bortlamp1_g",Bortlamp_g) + self:ShowHideSmooth("bortlamp1_y",Bortlamp_y) + self:ShowHideSmooth("bortlamp2_w",Bortlamp_w) + self:ShowHideSmooth("bortlamp2_g",Bortlamp_g) + self:ShowHideSmooth("bortlamp2_y",Bortlamp_y) + self:ShowHideSmooth("bortlamp3_w",0) + self:ShowHideSmooth("bortlamp3_g",0) + self:ShowHideSmooth("bortlamp3_y",0) + self:ShowHideSmooth("bortlamp4_w",0) + self:ShowHideSmooth("bortlamp4_g",0) + self:ShowHideSmooth("bortlamp4_y",0) + else + self:ShowHide("bortlamps1",false) + self:ShowHide("bortlamps2",false) + self:ShowHide("bortlamps3",true) + self:ShowHide("bortlamps4",true) + self:ShowHideSmooth("bortlamp1_w",0) + self:ShowHideSmooth("bortlamp1_g",0) + self:ShowHideSmooth("bortlamp1_y",0) + self:ShowHideSmooth("bortlamp2_w",0) + self:ShowHideSmooth("bortlamp2_g",0) + self:ShowHideSmooth("bortlamp2_y",0) + self:ShowHideSmooth("bortlamp3_w",Bortlamp_w) + self:ShowHideSmooth("bortlamp3_g",Bortlamp_g) + self:ShowHideSmooth("bortlamp3_y",Bortlamp_y) + self:ShowHideSmooth("bortlamp4_w",Bortlamp_w) + self:ShowHideSmooth("bortlamp4_g",Bortlamp_g) + self:ShowHideSmooth("bortlamp4_y",Bortlamp_y) + end + self:SetLightPower(15, newBortlamps and Bortlamp_w > 0, Bortlamp_w) + self:SetLightPower(18, newBortlamps and Bortlamp_w > 0, Bortlamp_w) + self:SetLightPower(16, newBortlamps and Bortlamp_g > 0, Bortlamp_g) + self:SetLightPower(19, newBortlamps and Bortlamp_g > 0, Bortlamp_g) + self:SetLightPower(17, newBortlamps and Bortlamp_y > 0, Bortlamp_y) + self:SetLightPower(20, newBortlamps and Bortlamp_y > 0, Bortlamp_y) + self:SetLightPower(21, not newBortlamps and Bortlamp_w > 0, Bortlamp_w) + self:SetLightPower(24, not newBortlamps and Bortlamp_w > 0, Bortlamp_w) + self:SetLightPower(22, not newBortlamps and Bortlamp_g > 0, Bortlamp_g) + self:SetLightPower(25, not newBortlamps and Bortlamp_g > 0, Bortlamp_g) + self:SetLightPower(23, not newBortlamps and Bortlamp_y > 0, Bortlamp_y) + self:SetLightPower(26, not newBortlamps and Bortlamp_y > 0, Bortlamp_y) + + self:Animate("Controller",self:GetPackedRatio("ControllerPosition"),0.3,0.02,2,false) + + self:Animate("reverser",self:GetNW2Int("ReverserPosition")/2,0,0.27,4,false) + self:Animate("krureverser",self:GetNW2Int("KRUPosition")/2,0.53,0.95,4,false) + self:ShowHide("reverser",self:GetNW2Int("WrenchMode",0)==1) + self:ShowHide("krureverser",self:GetNW2Int("WrenchMode",0)==2) + + self:ShowHide("brake013",self:GetPackedBool("Crane013")) + self:ShowHide("brake_valve_013",self:GetPackedBool("Crane013")) + self:ShowHide("valve_disconnect",self:GetPackedBool("Crane013")) + self:ShowHide("EPV_disconnect",self:GetPackedBool("Crane013")) + self:HidePanel("DriverValveDisconnect",not self:GetPackedBool("Crane013")) + + self:ShowHide("brake334",not self:GetPackedBool("Crane013")) + self:ShowHide("brake_valve_334",not self:GetPackedBool("Crane013")) + self:ShowHide("brake_disconnect",not self:GetPackedBool("Crane013")) + self:ShowHide("EPK_disconnect",not self:GetPackedBool("Crane013")) + self:ShowHide("train_disconnect",not self:GetPackedBool("Crane013")) + self:HidePanel("DriverValveBLDisconnect",self:GetPackedBool("Crane013")) + self:HidePanel("DriverValveTLDisconnect",self:GetPackedBool("Crane013")) + + self:Animate("brake334",self:GetPackedRatio("CranePosition")/5,0.35,0.65,256,24) + self:Animate("brake013", Cpos[self:GetPackedRatio("CranePosition")] or 0, 0.03, 0.458, 256,24) + + self:Animate("speed",self:GetPackedRatio("Speed"),0.881+0.004,0.609-0.008,nil,nil,256,2,0.01) + + local ARSType = self:GetNW2Int("ARSType",1) + if self.ARSType ~= ARSType then + self:RemoveCSEnt("ars_mvm") + self.ARSType = ARSType + end + if self.KVType ~= self:GetNW2Int("KVType",1) then + self:RemoveCSEnt("Controller") + self.KVType = self:GetNW2Int("KVType",1) + end + + self:ShowHide("speed",(ARSType==4 or ARSType==5)) + self:HidePanel("Block2_2",ARSType~=1) + self:HidePanel("Block2_1",ARSType~=2 and ARSType~=3) + self:HidePanel("Block2_3",ARSType~=4 and ARSType~=5) + self:ShowHide("SSpeed1",self:GetPackedBool("LUDS")) + self:ShowHide("SSpeed2",self:GetPackedBool("LUDS")) + self:ShowHide("RSpeed1",self:GetPackedBool("LUDS")) + self:ShowHide("RSpeed2",self:GetPackedBool("LUDS")) + self:SetLightPower(43,(ARSType==4 or ARSType==5) and self:GetPackedBool("PanelLights")) + local speed = self:GetPackedRatio("Speed")*100.0 + if self:GetPackedBool("LUDS") then + if ARSType == 1 and IsValid(self.ClientEnts["SSpeed1"])then self.ClientEnts["SSpeed1"]:SetSkin(math.floor(speed)%10) end + if ARSType == 1 and IsValid(self.ClientEnts["SSpeed2"])then self.ClientEnts["SSpeed2"]:SetSkin(math.floor(speed/10)%10) end + if (ARSType == 2 or ARSType == 3) and IsValid(self.ClientEnts["RSpeed1"])then self.ClientEnts["RSpeed1"]:SetSkin(math.floor(speed)%10) end + if (ARSType == 2 or ARSType == 3) and IsValid(self.ClientEnts["RSpeed2"])then self.ClientEnts["RSpeed2"]:SetSkin(math.floor(speed/10)%10) end + end + + local handrails = self:GetNW2Bool("HandRails") + local dot5 = self:GetNW2Bool("Dot5") + local lvz = self:GetNW2Bool("LVZ") + self:ShowHide("cabine_mvm",not dot5) + self:ShowHide("destination",not dot5) + self:HidePanel("Battery_C",dot5) + self:HidePanel("AV_C",dot5) + self:HidePanel("VBD_C",dot5) + self:HidePanel("IGLA_C",dot5) + self:HidePanel("IGLAButtons_C",dot5) + self:HidePanel("HelperPanel_C",dot5) + self:HidePanel("BZOS_C",dot5) + self:HidePanel("CabVent_C",dot5) + self:ShowHide("cabine_lvz",dot5) + self:ShowHide("destination1",dot5) + self:HidePanel("Battery_R",not dot5) + self:HidePanel("AV_R",not dot5) + self:HidePanel("VBD_R",not dot5) + self:HidePanel("IGLA_R",not dot5) + self:HidePanel("IGLAButtons_R",not dot5) + self:HidePanel("CabVent_R",not dot5) + self:HidePanel("HelperPanel_R",not dot5) + self:HidePanel("BZOS_R",not dot5) + self:ShowHide("handrails_old",not dot5) + self:ShowHide("handrails_new",dot5) + self.LastStation.EntityName = dot5 and "destination1" or "destination" + + local lamps_cab2 = self:Animate("lamps_cab2",self:GetPackedBool("EqLights") and 1 or 0,0,1,5,false) + local lamps_cab1 = self:Animate("lamps_cab1",self:GetPackedBool("CabLights") and 1 or 0,0,1,5,false) + self:ShowHideSmooth("Lamps_cab2",dot5 and 0 or lamps_cab2) + self:ShowHideSmooth("Lamps_cab1",dot5 and 0 or lamps_cab1) + self:ShowHideSmooth("Lamps2_cab2",dot5 and lamps_cab2 or 0) + self:ShowHideSmooth("Lamps2_cab1",dot5 and lamps_cab1 or 0) + self:SetLightPower("Lamps_cab1",not dot5 and lamps_cab1 > 0,lamps_cab1) + self:SetLightPower("Lamps_cab2",not dot5 and lamps_cab2 > 0,lamps_cab2) + self:SetLightPower("Lamps2_cab1", dot5 and lamps_cab1 > 0,lamps_cab1) + self:SetLightPower("Lamps2_cab2", dot5 and lamps_cab2 > 0,lamps_cab2) + local cabStrength = (lamps_cab1*0.3+lamps_cab2*0.7)^1.5 + self:SetLightPower(10,cabStrength > 0, cabStrength) + + local lamps_rtm = self:Animate("lamps_rtm",self:GetPackedBool("VPR") and 1 or 0,0,1,8,false) + self:SetSoundState("vpr",lamps_rtm>0 and 1 or 0,1) + + self:ShowHideSmooth("Lamp_RTM1",not dot5 and lamps_rtm or 0) + self:ShowHideSmooth("Lamp_RTM2",dot5 and lamps_rtm or 0) + self:SetLightPower("Lamp_RTM1",not dot5 and lamps_rtm > 0,lamps_rtm) + self:SetLightPower("Lamp_RTM2",dot5 and lamps_rtm > 0,lamps_rtm) + + if self.MaskType ~= mask then + self:ShowHide("mask22_mvm_wp",mask==1) + self:ShowHide("mask22_mvm",mask==2) + self:ShowHide("mask22_glass_wp",mask==3) + self:ShowHide("mask22_glass",mask==4) + self:ShowHide("mask222_mvm_wp",mask==5) + self:ShowHide("mask222_mvm",mask==6) + self:ShowHide("mask222_glass_wp",mask==7) + self:ShowHide("mask222_glass",mask==8) + self:ShowHide("mask141_mvm_wp",mask==9) + self:ShowHide("mask141_mvm",mask==10) + + self:ShowHideSmooth("Headlights222_1",0) + self:ShowHideSmooth("Headlights222_2",0) + self:ShowHideSmooth("Headlights141_1",0) + self:ShowHideSmooth("Headlights141_2",0) + self:ShowHideSmooth("Headlights22_1",0) + self:ShowHideSmooth("Headlights22_2",0) + self:ShowHideSmooth("Headlights22_glass_1",0) + self:ShowHideSmooth("Headlights22_glass_2",0) + if mask >= 9 then + self.LightsOverride[30][2] = Vector(465,-48, -23.5) + self.LightsOverride[31][2] = Vector(465,48 , -23.5) + self.LightsOverride[32][2] = Vector(465,0 , -23.5) + elseif mask < 9 then + self.LightsOverride[30][2] = Vector(465,-45, -23.5) + self.LightsOverride[31][2] = Vector(465,45 , -23.5) + self.LightsOverride[32][2] = Vector(465,0 , 52) + end + end + --self:ShowHide("mask141_lvz",mask and lvz) + self:ShowHide("1:KVTSet",not lvz) + self:ShowHide("1:KVTRSet",not lvz) + self:ShowHide("2:KVTSet",lvz) + self:ShowHide("2:KVTRSet",lvz) + if mask <= 2 then + self:ShowHideSmooth("Headlights22_1",HL1) + self:ShowHideSmooth("Headlights22_2",HL2) + elseif mask < 4 then + self:ShowHideSmooth("Headlights222_1",HL1) + self:ShowHideSmooth("Headlights222_2",HL2) + elseif mask < 6 then + self:ShowHideSmooth("Headlights222_1",HL1) + self:ShowHideSmooth("Headlights222_2",HL2) + elseif mask < 8 then + self:ShowHideSmooth("Headlights222_1",HL1) + self:ShowHideSmooth("Headlights222_2",HL2) + elseif mask < 9 then + self:ShowHideSmooth("Headlights141_1",HL1) + self:ShowHideSmooth("Headlights141_2",HL2) + end + + + local seats = self:GetNW2Int("SeatType",1) + self:ShowHide("seats_old",seats==1) + self:ShowHide("seats_old_cap",seats==1) + self:ShowHide("seats_new",seats==2) + self:ShowHide("seats_new_cap",seats==2) + self:Animate("PB",self:GetPackedBool("PB") and 1 or 0,0,0.2, 12,false) + self:Animate("UAVALever", self:GetPackedBool("UAVA") and 1 or 0, 0,0.6, 128, 3,false) + self:Animate("parking_brake", self:GetPackedBool("ParkingBrake") and 1 or 0,0.25,0, 4,false) + self:Animate("EPK_disconnect", self:GetPackedBool("EPK") and 1 or 0,0.25,0, 4,false) + self:Animate("EPV_disconnect", self:GetPackedBool("EPK") and 1 or 0,0.25,0, 4,false) + self:Animate("brake_disconnect",self:GetPackedBool("DriverValveBLDisconnect") and 1 or 0,0.25,0, 4,false) + self:Animate("train_disconnect",self:GetPackedBool("DriverValveTLDisconnect") and 1 or 0,0.25,0, 4,false) + self:Animate("valve_disconnect",self:GetPackedBool("DriverValveDisconnect") and 1 or 0,0.25,0, 4,false) + self:Animate("stopkran", self:GetPackedBool("EmergencyBrakeValve") and 0 or 1, 0.25,0, 128, 3,false) + + local c013 = self:GetNW2Int("Crane",1)==2 + self:ShowHide("brake_valve_334",not c013) + self:ShowHide("brake334",not c013) + self:ShowHide("brake_disconnect",not c013) + self:ShowHide("train_disconnect",not c013) + self:HidePanel("DriverValveBLDisconnect",c013) + self:HidePanel("DriverValveTLDisconnect",c013) + self:HidePanel("EPKDisconnect",c013) + self:ShowHide("EPK_disconnect",not c013) + self:ShowHide("brake_valve_013",c013) + self:ShowHide("brake013",c013) + self:ShowHide("valve_disconnect",c013) + self:ShowHide("EPV_disconnect",c013) + self:HidePanel("EPVDisconnect",not c013) + self:HidePanel("DriverValveDisconnect",not c013) + + self:Animate("brake_line",self:GetPackedRatio("BLPressure"),0.143,0.88,256,2)--,0.01) + self:Animate("train_line",self:GetPackedRatio("TLPressure"),0.143,0.88,256,0)--,0.01) + self:Animate("brake_cylinder",self:GetPackedRatio("BCPressure"),0.134,0.874,256,0)--,0.03) + + self:Animate("voltmeter",self:GetPackedRatio("EnginesVoltage"),0.396,0.658,256,0.2,false) + self:Animate("volt1",self:GetPackedRatio("BatteryVoltage"),0.625,0.376,256,0.2,false) + self:Animate("ampermeter",self:GetPackedRatio("EnginesCurrent"),0.39,0.655,256,0.2,false) + + local otsek1 = self:Animate("door_otsek1",self:GetPackedBool("OtsekDoor1") and 1 or 0,0,0.25,4,0.5) + local otsek2 = self:Animate("door_otsek2",self:GetPackedBool("OtsekDoor2") and 1 or 0,0,0.25,4,0.5) + self:HidePanel("AV_S",not dot5 or otsek2<=0) + local door1 = self:Animate("door1",self:GetPackedBool("RearDoor") and 1 or 0,0,0.25,4,0.5) + local door2 = self:Animate("door2",self:GetPackedBool("PassengerDoor") and 1 or 0,1,0.8,4,0.5) + local door3 = self:Animate("door3",self:GetPackedBool("CabinDoor") and 1 or 0,0,0.25,4,0.5) + 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 < 1) then + self.Door2 = door2 < 1 + self:PlayOnce("door2","bass",self.Door2 and 1 or 0) + end + if self.Door3 ~= (door3 > 0) then + self.Door3 = door3 > 0 + self:PlayOnce("door3","bass",self.Door3 and 1 or 0) + end + if self.Otsek1 ~= (otsek1 > 0) then + self.Otsek1 = otsek1 > 0 + if not self.Otsek1 then + self:PlayOnce("door_otsek1","bass",1) + end + end + if self.Otsek2 ~= (otsek2 > 0) then + self.Otsek2 = otsek2 > 0 + if not self.Otsek2 then + self:PlayOnce("door_otsek2","bass",1) + end + end + self:SetLightPower(3,self.Otsek1 and self:GetPackedBool("EqLights")) + self:SetLightPower(4,self.Otsek2 and self:GetPackedBool("EqLights")) + + local typ = self:GetNW2Int("LampType",1) + if self.LampType ~= typ then + self.LampType = typ + for i=1,25 do + if i<13 then + self:ShowHide("lamp1_"..i,typ==1) + end + self:ShowHide("lamp2_"..i,typ==2) + end + self:ShowHide("lamps1",typ==1) + self:ShowHide("lamps2",typ==2) + end + local activeLights = 0 + local maxLights + if typ == 1 then + for i = 1,12 do + local colV = self:GetNW2Vector("lamp"..i) + local col = Color(colV.x,colV.y,colV.z) + local state = self:Animate("Lamp1_"..i,self:GetPackedBool("lightsActive"..i) and 1 or 0,0,1,6,false) + self:ShowHideSmooth("lamp1_"..i,state,col) + activeLights = activeLights + state + end + maxLights = 12 + else + for i = 1,25 do + local colV = self:GetNW2Vector("lamp"..i) + local col = Color(colV.x,colV.y,colV.z) + local state = self:Animate("Lamp2_"..i,self:GetPackedBool("lightsActive"..i) and 1 or 0,0,1,6,false) + self:ShowHideSmooth("lamp2_"..i,state,col) + activeLights = activeLights + state + end + maxLights = 25 + end + for i=11,13 do + local col = self:GetNW2Vector("lampD"..i) + if self.LightsOverride[i].vec ~= col then + self.LightsOverride[i].vec = col + self.LightsOverride[i][4] = Color(col.x,col.y,col.z) + self:SetLightPower(i, false) + else + self:SetLightPower(i, activeLights > 0,activeLights/maxLights) + end + 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) + + --self:InitializeSounds() + 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) + 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.8+self.DoorLoopStates[id]*0.2) + local n_l = "door"..i.."x"..k--.."a" + --local n_r = "door"..i.."x"..k.."b" + local dlo = 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,0.95,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 + + local dT = self.DeltaTime + local rollingi = math.min(1,self.TunnelCoeff+math.Clamp((self.StreetCoeff-0.82)/0.3,0,1)) + local rollings = math.max(self.TunnelCoeff*0.6,self.StreetCoeff) + 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",0*rollingi*rol40,rol40p) + self:SetSoundState("rolling_70",0*rollingi*rol70,rol70p) + self:SetSoundState("rolling_80",0*rollingi*rol80,rol80p) + + + local rol32 = math.Clamp((speed-25)/13,0,1)*(1-math.Clamp((speed-40)/10,0,1)) + local rol32p = Lerp((speed-20)/50,0.8,1.2) + local rol68 = math.Clamp((speed-40)/10,0,1)*(1-math.Clamp((speed-50)/20,0,1)) + local rol68p = Lerp(0.6+(speed-68)/26*0.2,0.6,1.4) + local rol75 = math.Clamp((speed-55)/20,0,1) + local rol75p = Lerp(0.8+(speed-75)/15*0.2,0.6,1.2) + self:SetSoundState("rolling_32",rollingi*rol32,rol32p) + self:SetSoundState("rolling_68",rollingi*rol68,rol68p) + self:SetSoundState("rolling_75",rollingi*rol75,rol75p) + + 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) + local parking_brake = self:GetPackedRatio("ParkingBrakePressure_dPdT",0) + local parking_brake_abs = math.Clamp(math.abs(parking_brake)-0.3,0,1) + if self.ParkingBrake1 ~= (parking_brake<1) then + self.ParkingBrake1 = (parking_brake<1) + if self.ParkingBrake1 then self:PlayOnce("parking_brake_en","bass",1,1) end + end + if self.ParkingBrake2 ~= (parking_brake>-0.8) then + self.ParkingBrake2 = (parking_brake>-0.8) + if self.ParkingBrake2 then self:PlayOnce("parking_brake_rel","bass",0.6,1) end + end + self:SetSoundState("parking_brake",parking_brake_abs,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 c013 then + 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("crane334_brake",0,1.0) + self:SetSoundState("crane334_brake_reflection",0,1.0) + self:SetSoundState("crane334_brake_slow",0,1.0) + self:SetSoundState("crane334_release",0,1.0) + self:SetSoundState("crane013_release",self.CraneRRamp^1.5,1.0) + self:SetSoundState("crane013_brake",math.Clamp(-self.CraneRamp*1.5-0.1,0,1)^1.3,1.0) + local loudV = self:GetNW2Float("Crane013Loud",0) + if loudV>0 then + if ramp>0 then + self.CraneLRamp = self.CraneLRamp + (math.min(ramp,0)-self.CraneLRamp)*dT*0.5 + else + self.CraneLRamp = self.CraneLRamp + (math.min(ramp,0)-self.CraneLRamp)*dT*1 + end + self:SetSoundState("crane013_brake_l",(math.Clamp(-self.CraneRamp*2.5-0.1,0,1)^1.3)*(1-math.Clamp((-self.CraneLRamp-loudV)*3,0,1)),1.12-math.Clamp((-self.CraneLRamp-0.15)*2,0,1)*0.12) + else + self:SetSoundState("crane013_brake_l",0,1) + end + self:SetSoundState("crane013_brake2",math.Clamp(-self.CraneRamp*1.5-0.95,0,1.5)^2,1.0) + else + self:SetSoundState("crane013_brake",0,1.0) + self:SetSoundState("crane013_release",0,1.0) + --self:SetSoundState("crane013_brake2",0,1.0) + + 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) + end + 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 emerBrakeValve = self.EmergencyBrakeValveRamp + self:SetSoundState("valve_brake_l",math.Clamp(emerBrakeValve/0.2,0,1),1) + self:SetSoundState("valve_brake_m",math.Clamp((emerBrakeValve-0.2)/0.3,0,1),1) + self:SetSoundState("valve_brake_h",math.Clamp((emerBrakeValve-0.5)/0.5,0,1),1) +--]] + 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) + 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)) + --self:SetSoundState("emer_brake",self.EmergencyValveRamp*0.8,1) + --self:SetSoundState("emer_brake",self.EmergencyValveRamp*0.8,1) + -- Compressor + self:SetSoundState("compressor",self:GetPackedBool("Compressor") and 0.6 or 0,1) + self:SetSoundState("compressor2",self:GetPackedBool("Compressor") and 0.8 or 0,1) + + + + local v1state = self:GetPackedBool("M1_3") and 1 or 0 + local v2state = self:GetPackedBool("M4_7") and 1 or 0 + local vCstate = self:GetPackedRatio("M8")/2 + if self.VentCab < vCstate then + self.VentCab = math.min(1,self.VentCab + dT/2.7) + elseif self.VentCab > vCstate then + self.VentCab = math.max(0,self.VentCab - dT/2.7) + end + self.VentG1 = math.Clamp(self.VentG1 + dT/2.7*(v1state*2-1),0,1) + self.VentG2 = math.Clamp(self.VentG2 + dT/2.7*(v2state*2-1),0,1) + self:SetSoundState("vent_cabl",math.Clamp(self.VentCab*2,0,1) ,1) + self:SetSoundState("vent_cabh",math.Clamp((self.VentCab-0.5)*2,0,1),1) + + for i=1,7 do + if i<4 then + self:SetSoundState("vent"..i,self.VentG1,1) + else + self:SetSoundState("vent"..i,self.VentG2,1) + end + end + if self.RingType ~= self:GetNW2Int("RingType",1) then + self.RingType = self:GetNW2Int("RingType",1) + self:SetSoundState(self.RingName,0,0) + + self.RingPitch = 1 + self.RingVolume = 1 + if self.RingType == 1 then + self.RingName = "ring2" + elseif self.RingType == 2 then + self.RingName = "ring3" + self.RingVolume = 1.4 + self.RingPitch = 0.6 + elseif self.RingType == 3 then + self.RingName = "ring3" + self.RingVolume = 1.2 + self.RingPitch = 0.8 + elseif self.RingType == 4 then + self.RingName = "ring3" + self.RingPitch = 0.95 + elseif self.RingType == 5 then + self.RingName = "ring" + self.RingPitch = 0.8 + elseif self.RingType == 6 then + self.RingName = "ring" + elseif self.RingType == 7 then + self.RingName = "ring4" + elseif self.RingType == 8 then + self.RingName = "ring5" + elseif self.RingType == 9 then + self.RingName = "ring6" + end + self.RingFade = 0 + end + -- ARS/ringer alert + local bzos = self.RingName=="ring" or self.RingName=="ring6" or self.RingName=="ring3" and RealTime()%0.8<0.35 or self.RingName~="ring3" and RealTime()%0.5>0.25 + local ringstate = (self:GetPackedBool("Buzzer") or self:GetPackedBool("BuzzerBZOS") and bzos) and 1 or 0 + if 6< self.RingType and self.RingType < 9 then + self.RingFade = math.Clamp(self.RingFade+(ringstate-self.RingFade)*dT*(self:GetPackedBool("BuzzerBZOS") and 50 or 25),0,1) + self:SetSoundState(self.RingName,self.RingFade*self.RingVolume,self.RingPitch) + else + self:SetSoundState(self.RingName,ringstate*self.RingVolume,self.RingPitch) + end + if self:GetPackedBool("RK") then self.RKTimer = CurTime() end + self:SetSoundState("rk",(self.RKTimer and (CurTime() - self.RKTimer) < 0.2) and 0.7 or 0,1) + + -- BPSN sound + self.BPSNType = self:GetNW2Int("BPSNType",13) + if not self.OldBPSNType then self.OldBPSNType = self.BPSNType end + if self.BPSNType ~= self.OldBPSNType then + for i=1,12 do + self:SetSoundState("bpsn"..i,0,1.0) + end + end + self.OldBPSNType = self.BPSNType + if self.BPSNType<13 then + self:SetSoundState("bpsn"..self.BPSNType,self:GetPackedBool("BPSN") and 1 or 0,1) --FIXME громкоÑть по другому + end + + local cabspeaker = self:GetPackedBool("AnnCab") + local work = self:GetPackedBool("AnnPlay") + local buzz = self:GetPackedBool("AnnBuzz") and self:GetNW2Int("AnnouncerBuzz",-1) > 0 + local buzz_old = self:GetNW2Int("AnnouncerBuzz",-1) == 2 + for k in ipairs(self.AnnouncerPositions) do + self:SetSoundState("announcer_buzz"..k,(buzz and not buzz_old and (k ~= 1 and work or k==1 and cabspeaker)) and 1 or 0,1) + self:SetSoundState("announcer_buzz_o"..k,(buzz and buzz_old and (k ~= 1 and work or k==1 and cabspeaker)) and 1 or 0,1) + end + for k,v in ipairs(self.AnnouncerPositions) do + if IsValid(self.Sounds["announcer"..k]) then + self.Sounds["announcer"..k]:SetVolume((k ~= 1 and work or k==1 and cabspeaker) and (v[3] or 1) or 0) + end + end +end + +function ENT:OnAnnouncer(volume,id) + local cabspeaker = self:GetPackedBool("AnnCab") + local work = self:GetPackedBool("AnnPlay") + return (id ~= 1 and work or id == 1 and cabspeaker) and volume or 0 +end + +function ENT:Draw() + self.BaseClass.Draw(self) +end +function ENT:DrawPost() + self.RTMaterial:SetTexture("$basetexture",self.ASNP) + self:DrawOnPanel("ASNPScreen",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(256,64,512,128,0) + end) + self.RTMaterial:SetTexture("$basetexture",self.IGLA) + self:DrawOnPanel("IGLA_C",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(256,64,512,128,0) + end) + self:DrawOnPanel("IGLA_R",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(256,64,512,128,0) + end) + + 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) + if button == "PrevSign" then + self.InfoTableTimeout = CurTime() + 2.0 + end + if button == "NextSign" then + self.InfoTableTimeout = CurTime() + 2.0 + end + + if button and button:sub(1,3) == "Num" then + self.InfoTableTimeout = CurTime() + 2.0 + end +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 == "lk2c" then + local speed = self:GetPackedRatio("Speed") + self.SoundPositions[soundid][1] = 350-Lerp(speed/0.1,0,250) + return soundid,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "LK2" then + local speed = self:GetPackedRatio("Speed") + if range == 0 and speed < 20 and self:GetPackedRatio("EnginesCurrent") > 0.55 then + self:PlayOnce("lk2c","bass",1,pitch) + end + 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 == "LK5" and range > 0 then + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["lk5_on"][1] = 350-Lerp(speed/0.1,0,250) + return "lk5_on",location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "brake" then + self:PlayOnce("brake_f",location,range,pitch) + self:PlayOnce("brake_b",location,range,pitch) + return + end + if soundid == "RVT" then + return range > 0 and "rvt_on" or "rvt_off",location,1,pitch + end + if soundid == "K6" then + return range > 0 and "k6_on" or "k6_off",location,1,pitch + end + if soundid == "R1_5" then + return range > 0 and "r1_5_on" or "r1_5_off",location,1,pitch + end + if soundid == "RPB" then + return range > 0 and "rpb_on" or "rpb_off",location,1,pitch + end + if soundid == "KD" then + return range > 0 and "kd_on" or "kd_off",location,1,pitch + end + if soundid == "KK" then + return range > 0 and "kk_on" or "kk_off",location,1,pitch--0.8 + end + if soundid == "K25" then + return range > 0 and "k25_on" or "k25_off",location,1,pitch + end + if soundid == "RO" then + return range > 0 and "ro_on" or "ro_off",location,1,pitch + end + if soundid == "Rp8" then + return range > 0 and "rp8_on" or "rp8_off",location,1,pitch + end + if soundid == "ROT1" then + return range > 0 and "rot_on" or "rot_off",location,1,pitch + end + if soundid == "ROT2" then + return range > 0 and "rot_on" or "rot_off",location,1,pitch + end + if soundid == "AVU" then + return range > 0 and "avu_on" or "avu_off",location,1,0.9 + end + if soundid == "UAVAC" then + return "uava_reset",location,range,pitch + end + elseif soundid:sub(1,4)=="kv70" and self:GetNW2Bool("SecondKV") then return soundid.."_2",location,range,pitch end + return soundid,location,range,pitch +end +Metrostroi.GenerateClientProps() diff --git a/lua/entities/gmod_subway_81-717_mvm/init.lua b/lua/entities/gmod_subway_81-717_mvm/init.lua new file mode 100644 index 0000000..0f34929 --- /dev/null +++ b/lua/entities/gmod_subway_81-717_mvm/init.lua @@ -0,0 +1,923 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +ENT.BogeyDistance = 650 -- Needed for gm trainspawner + +--"DURASelectMain","DURASelectAlternate","DURAToggleChannel","DURAPowerToggle", +ENT.SyncTable = { + "CustomC","Custom1","Custom2","Custom3","CustomD", + "CustomE","CustomF","CustomG","R_UNch","R_ZS","R_G","R_Radio","R_Program1","R_Program2","R_Program1H","R_Program2H","KVT","KVTR", + "VZ1","VUD1","KDL","KDLR","KDLK","KDP","KDLRK","DoorSelect", + "KRZD","R_VPR","VozvratRP","AVU","KVP","ConverterProtection","RZP",--"SP","GreenRP", + "KSN","ARS","ARSR","ALS","OtklAVU","OtklBV","OtklBVK","OVT","L_1","L_2","L_3","VP","DIPoff", + "VMK","BPSNon","RezMK","ARS13","L_4","VUS","VAH","VAD","KRP", + "KAH","KAHK","KDPK", + "A53","A56","A54","A17","A44","A39","A70","A14","A74","A26","AR63","AS1","A13","A21","A31","A32","A16","A12","A24","A49","A27","A72","A50","A29","A46","A47","A71","A7","A9","A84","A8","A52","A19","A48","A10","A22","A30","A1","A2","A3","A4","A5","A6","A18","A73","A20","A25","A11","A37","A45","A38","A51","A65","A66","A42","A43","A41","A40","A75","A76","A60","A58","A57","A59","A28", + "AV2","AV3","AV4","AV5","AV6","AV1", + "AIS","A15","A81","A68","A80", + "RC1","VB","BPS","UOS", "PB", "UAVA","UAVAC", + "DriverValveBLDisconnect","DriverValveTLDisconnect","DriverValveDisconnect","ParkingBrake","EPK","EmergencyBrakeValve", + "VUD2","VDL","Wiper", "GV", + "R_ASNPMenu","R_ASNPUp","R_ASNPDown","R_ASNPOn" + , "ALSFreq","Ring","VBD", + "V11","V12","V13","UPPS_On","SAB1" +} +ENT.SyncFunctions = { + "" +} +function ENT:Initialize() + self.Plombs = { + VAH = true, + VP = true, + OtklAVU = true, + OVT = true, + --KAH = {true,"KAHK"}, + KAH = {true}, + OtklBV = {true}, + RC1 = true, + UOS = true, + VBD = true, + UAVA = true, + UPPS_On = true, + Init = true, + } + -- Set model and initialize + self.MaskType = 10 + self.LampType = 1 + self:SetModel("models/metrostroi_train/81-717/81-717_mvm.mdl") + self:SetRenderMode(RENDERMODE_TRANSALPHA) + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create seat entities + self.DriverSeat = self:CreateSeat("driver",Vector(417,0,-22.5)) + self.InstructorsSeat = self:CreateSeat("instructor",Vector(425,50,-28+3),Angle(0,270,0)) + self.ExtraSeat1 = self:CreateSeat("instructor",Vector(410,30,-43),Angle(0,90,0),"models/vehicles/prisoner_pod_inner.mdl") + self.ExtraSeat2 = self:CreateSeat("instructor",Vector(422,-45,-43),Angle(0,90,0),"models/vehicles/prisoner_pod_inner.mdl") + self.ExtraSeat3 = self:CreateSeat("instructor",Vector(402,50,-43),Angle(0,50,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) + self.ExtraSeat3:SetColor(Color(0,0,0,0)) + self.ExtraSeat3:SetRenderMode(RENDERMODE_TRANSALPHA) + + -- Create bogeys + if Metrostroi.BogeyOldMap then + self.FrontBogey = self:CreateBogey(Vector( 317-5,0,-84),Angle(0,180,0),true,"717") + self.RearBogey = self:CreateBogey(Vector(-317+0,0,-84),Angle(0,0,0),false,"717") + self.FrontCouple = self:CreateCouple(Vector( 419.5,0,-62),Angle(0,0,0),true,"717") + self.RearCouple = self:CreateCouple(Vector(-419.5-6.545,0,-62),Angle(0,180,0),false,"717") + else + self.FrontBogey = self:CreateBogey(Vector( 317-11,0,-80),Angle(0,180,0),true,"717") + self.RearBogey = self:CreateBogey(Vector(-317+0,0,-80),Angle(0,0,0),false,"717") + self.RearCouple = self:CreateCouple(Vector(-421,0,-66),Angle(0,180,0),false,"717") + self.FrontCouple = self:CreateCouple(Vector( 410-3,0,-66),Angle(0,0,0),true,"717") + end + local pneumoPow = 0.8+(math.random()^1.55)*0.4 + self.FrontBogey.PneumaticPow = pneumoPow + self.RearBogey.PneumaticPow = pneumoPow + self.FrontCouple.EKKDisconnected = true + + self.LightSensor = self:AddLightSensor(Vector(414-7.5,-130,-100),Angle(0,90,0)) + -- 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_8] = "KRPSet", + + [KEY_EQUAL] = {"R_Program1Set",helper="R_Program1HSet"}, + [KEY_MINUS] = {"R_Program2Set",helper="R_Program2HSet"}, + + [KEY_G] = "VozvratRPSet", + + [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] = {"KDL",helper="VDLSet"}, + [KEY_D] = "KDP", + [KEY_V] = {"VUD1Toggle",helper="VUD2Toggle"}, + [KEY_L] = "HornEngage", + [KEY_N] = "VZ1Set", + [KEY_PAD_1] = "PneumaticBrakeSet1", + [KEY_PAD_2] = "PneumaticBrakeSet2", + [KEY_PAD_3] = "PneumaticBrakeSet3", + [KEY_PAD_4] = "PneumaticBrakeSet4", + [KEY_PAD_5] = "PneumaticBrakeSet5", + [KEY_PAD_6] = "PneumaticBrakeSet6", + [KEY_PAD_7] = "PneumaticBrakeSet7", + [KEY_PAD_DIVIDE] = "KRPSet", + [KEY_PAD_MULTIPLY] = "KAH", + + [KEY_SPACE] = "PBSet", + [KEY_BACKSPACE] = {"EmergencyBrake",helper="EmergencyBrakeValveToggle"}, + + [KEY_PAD_ENTER] = "KVWrenchKV", + [KEY_PAD_0] = "DriverValveDisconnect", + [KEY_PAD_DECIMAL] = "EPKToggle", + [KEY_LSHIFT] = { + def="KV_Unlock", + [KEY_SPACE] = "KVT", + + [KEY_2] = "RingSet", + [KEY_4] = "KVSet0Fast", + [KEY_L] = "DriverValveDisconnect", + + [KEY_7] = "KVWrenchNone", + [KEY_8] = "KVWrenchKRU", + [KEY_9] = "KVWrenchKV9", + [KEY_0] = "KVWrenchKV", + [KEY_6] = "KVSetT1A", + }, + [KEY_LALT] = { + [KEY_V] = "VUD1Toggle", + [KEY_L] = "EPKToggle", + [KEY_RIGHT] = "R_ASNPMenuSet", + [KEY_UP] = "R_ASNPUpSet", + [KEY_DOWN] = "R_ASNPDownSet", + }, + } + 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(461.5, -34, -53), Radius = 8, + }, + { + ID = "FrontTrainLineIsolationToggle", + Pos = Vector(461.5, 33, -53), Radius = 8, + }, + { + ID = "RearBrakeLineIsolationToggle", + Pos = Vector(-474.5, 33, -53), Radius = 8, + }, + { + ID = "RearTrainLineIsolationToggle", + Pos = Vector(-474.5, -34, -53), Radius = 8, + }, + { + ID = "CabinDoor", + Pos = Vector(456,66,3), Radius = 12, + }, + { + ID = "CabinDoor", + Pos = Vector(385,66,0), Radius = 16, + }, + { + ID = "RearDoor", + Pos = Vector(-464.8,-35,4), Radius = 20, + }, + { + ID = "PassengerDoor", + Pos = Vector(375.5,13.5,12), Radius = 20, + }, + { + ID = "GVToggle", + Pos = Vector(140.50,62,-64), Radius = 10, + }, + { + ID = "AirDistributorDisconnectToggle", + Pos = Vector(-177, -66, -50), Radius = 20, + }, + } + + local vX = Angle(0,-90-0.2,56.3):Forward() -- For ARS panel + local vY = Angle(0,-90-0.2,56.3):Right() + -- Cross connections in train wires + self.TrainWireInverts = { + [28] = true, + [34] = true, + } + self.TrainWireCrossConnections = { + [5] = 4, -- Reverser F<->B + [31] = 32, -- Doors L<->R + } + + self.RearDoor = false + self.CabinDoor = false + self.PassengerDoor = false + self.OtsekDoor1 = false + self.OtsekDoor2 = false + + self.Lamps = { + broken = {}, + } + local rand = math.random() > 0.8 and 1 or math.random(0.95,0.99) + for i = 1,25 do + if math.random() > rand then self.Lamps.broken[i] = math.random() > 0.5 end + end + + self:TrainSpawnerUpdate() + self:OnButtonPress("KVWrenchNone") +end +function ENT:TriggerLightSensor(coil,plate) + if plate.PlateType == METROSTROI_UPPSSENSOR then + self.UPPS:TriggerSensor(coil,plate) + end +end + +function ENT:NonSupportTrigger() + self.RC1:TriggerInput("Set",0) + self.UOS:TriggerInput("Set",1) + self.KAH:TriggerInput("Set",1) + self.KAH:TriggerInput("Block",1) + self.KAHK:TriggerInput("Set",0) + self.VAH:TriggerInput("Set",1) + self.OVT:TriggerInput("Set",1) + self.EPK:TriggerInput("Set",0) + self.ARS:TriggerInput("Set",0) + self.ALS:TriggerInput("Set",0) + self.Plombs.RC1 = nil + self.Plombs.UOS = nil + self.Plombs.KAH = nil + self.Plombs.VAH = nil + self.Plombs.OVT = nil +end + +function ENT:UpdateLampsColors() + local lCol,lCount = Vector(),0 + local rand = math.random() > 0.8 and 1 or math.random(0.95,0.99) + if self.LampType == 1 then + local r,g,col = 15,15 + local typ = math.Round(math.random()) + local rnd = 0.5+math.random()*0.5 + for i = 1,12 do + local chtp = math.random() > rnd + + if typ == 0 and not chtp or typ == 1 and chtp then + g = math.random()*15 + col=Vector(240+g,240+g,255) + else + b = -5+math.random()*20 + col = Vector(255,255,235+b) + end + lCol = lCol + col + lCount = lCount + 1 + if i%4==0 then + local id = 10+math.ceil(i/4) + + local tcol = (lCol/lCount)/255 + --self.Lights[id][4] = Vector(tcol.r,tcol.g^3,tcol.b^3)*255 + self:SetNW2Vector("lampD"..id,Vector(tcol.r,tcol.g^3,tcol.b^3)*255) + lCol = Vector() + lCount = 0 + end + self:SetNW2Vector("lamp"..i,col) + self.Lamps.broken[i] = math.random() > rand and math.random() > 0.7 + end + else + local rnd1,rnd2,col = 0.7+math.random()*0.3,math.random() + local typ = math.Round(math.random()) + local r,g = 15,15 + for i = 1,25 do + local chtp = math.random() > rnd1 + if typ == 0 and not chtp or typ == 1 and chtp then + if math.random() > rnd2 then + r = -20+math.random()*25 + g = 0 + else + g = -5+math.random()*15 + r = g + end + col = Vector(245+r,228+g,189) + else + if math.random() > rnd2 then + g = math.random()*15 + b = g + else + g = 15 + b = -10+math.random()*25 + end + col = Vector(255,235+g,235+b) + end + lCol = lCol + col + lCount = lCount + 1 + if i%8.3<1 then + local id = 9+math.ceil(i/8.3) + + local tcol = (lCol/lCount)/255 + --self.Lights[id][4] = Vector(tcol.r,tcol.g^3,tcol.b^3)*255 + self:SetNW2Vector("lampD"..id,Vector(tcol.r,tcol.g^3,tcol.b^3)*255) + lCol = Vector() lCount = 0 + end + self:SetNW2Vector("lamp"..i,col) + self.Lamps.broken[i] = math.random() > rand and math.random() > 0.7 + end + end +end +--[[ +local function rnd(num,max) + local ceil = math.abs(math.ceil(num%max-(max/2))) + if ceil==0 then ceil=1 end + return math.ceil(num%ceil/(max/2)) +end--]] +function ENT:TrainSpawnerUpdate() +--[[ + self.Texture = self:GetNW2String("Texture") + self.PassTexture = self:GetNW2String("PassTexture") + self.CabTexture = self:GetNW2String("CabTexture") + local texture = Metrostroi.Skins["train"][self.Texture] + local passtexture = Metrostroi.Skins["pass"][self.PassTexture] + local cabintexture = Metrostroi.Skins["cab"][self.CabTexture] + + for k in pairs(self:GetMaterials()) do + self:SetSubMaterial(k-1,"") + end + for k,v in pairs(self:GetMaterials()) do + if v == "models/metrostroi_train/81/int02" then + if not Metrostroi.Skins["717_schemes"] or not Metrostroi.Skins["717_schemes"]["m"] then + self:SetSubMaterial(k-1,Metrostroi.Skins["717_schemes"][""]) + else + if not self.Adverts or self.Adverts ~= 4 then + self:SetSubMaterial(k-1,Metrostroi.Skins["717_schemes"]["m"].adv) + else + self:SetSubMaterial(k-1,Metrostroi.Skins["717_schemes"]["m"].clean) + end + end + elseif v == "models/metrostroi_train/81/tabl" then + if not self.SignsList then + self:PrepareSigns() + end + if self.SignsList[self.SignsIndex] then self:SetSubMaterial(k-1,self.SignsList[self.SignsIndex][1]) end + end + local tex = string.Explode("/",v) + tex = tex[#tex] + if cabintexture and cabintexture.textures[tex] then + self:SetSubMaterial(k-1,cabintexture.textures[tex]) + end + if passtexture and passtexture.textures[tex] then + self:SetSubMaterial(k-1,passtexture.textures[tex]) + end + if texture and texture.textures[tex] then + self:SetSubMaterial(k-1,texture.textures[tex]) + end + end--]] + --self:SetNW2String("PassTexture","Def_717MSKBlue") + -- + local num = self.WagonNumber + self:SetNW2Bool("Custom",self.CustomSettings) + math.randomseed(num+817171) + if self.CustomSettings then + --{"Type","Spawner.717.Type","List",{"Spawner.717.Type.717","Spawner.717.Type.7175"}}, + --{"Cran","Spawner.717.CranType","List",{"334","013"}}, + --{"BodyType","Spawner.717.BodyType","List",{"Spawner.717.Type.MVM","Spawner.717.Type.LVZ","Spawner.717.Type.SPB"}}, + --{"HandRail","Spawner.717.HandRail","List",{"Spawner.717.Common.Random","Spawner.717.Common.Old","Spawner.717.Common.New"}}, + --{"SeatType","Spawner.717.SeatType","List",{"Spawner.717.Common.Random","Spawner.717.Common.Old","Spawner.717.Common.New"}}, + --{"LampType","Spawner.717.LampType","List",{"Spawner.717.Common.Random","Spawner.717.Lamp.LPV02","Spawner.717.Lamp.LLV01"}}, + --{"ARSType","Spawner.717.ARS","List",{"Spawner.717.Common.Random","Spawner.717.ARS.1","Spawner.717.ARS.2","Spawner.717.ARS.3"--[[,"Spawner.717.ARS.4"]]}}, + ----{"MaskType","Spawner.717.MaskType","List",{"2-2","2-2-2","Spawner.717.MaskType.1","Spawner.717.MaskType.2","1-1","Spawner.717.MaskType.3"}}, + --{"BPSNType","Spawner.717.BPSNType","List",{"Spawner.717.Common.Random","Spawner.717.BPSNType.1","Spawner.717.BPSNType.2","Spawner.717.BPSNType.3","Spawner.717.BPSNType.4","Spawner.717.BPSNType.5","Spawner.717.BPSNType.6","Spawner.717.BPSNType.7","Spawner.717.BPSNType.8","Spawner.717.BPSNType.9","Spawner.717.BPSNType.10","Spawner.717.BPSNType.11","Spawner.717.BPSNType.12","Spawner.717.BPSNType.13"}}, + --{"RingType","Spawner.717.RingType","List",{"Spawner.717.Common.Random","Spawner.717.RingType.1","Spawner.717.RingType.2","Spawner.717.RingType.3","Spawner.717.RingType.4","Spawner.717.RingType.5","Spawner.717.RingType.6","Spawner.717.RingType.7","Spawner.717.RingType.8"}}, + + local dot5 = self:GetNW2Int("Type")==2 + local typ = self:GetNW2Int("BodyType") + if typ==2 then + self:SetModel("models/metrostroi_train/81-717/81-717_lvz.mdl") + else + self:SetModel("models/metrostroi_train/81-717/81-717_mvm.mdl") + end + self:SetNW2Int("Crane",self:GetNW2Int("Cran")) + + local lampType = self:GetNW2Int("LampType") + local ARSType = self:GetNW2Int("ARSType") + local RingType = self:GetNW2Int("RingType") + local BPSNType = self:GetNW2Int("BPSNType") + local SeatType = self:GetNW2Int("SeatType") + self:SetNW2Bool("HandRails",dot5) + self:SetNW2Bool("Dot5",dot5) + self:SetNW2Bool("LVZ",typ==2) + self:SetNW2Int("LampType",lampType==1 and (math.random()>0.5 and 2 or 1) or lampType-1) + + self.NewBortlamps = typ~=2 or math.random()>0.5 + --local mask = typ[6]==true or typ[6] and typ[6](num,tex) + --self:SetNW2Bool("Mask",mask) + if ARSType == 1 then + ARSType = math.ceil(math.random()*4+0.5) + else ARSType = ARSType-1 end + self:SetNW2Int("ARSType",ARSType) + self:SetNW2Int("KVType",math.ceil(math.random()*3+0.5)) + self:SetNW2Bool("NewBortlamps",self.NewBortlamps) + self:SetNW2Int("BPSNType",BPSNType==1 and math.ceil(math.random()*12+0.5) or BPSNType-1) + self:SetNW2Int("RingType",RingType==1 and math.ceil(math.random()*8+0.5) or RingType-1) + if SeatType==1 then + self:SetNW2Int("SeatType",math.random(1,2)) + else + self:SetNW2Int("SeatType",SeatType-1) + end + else + local typ = self.WagonNumberConf or {} + local lvz = typ[1] + self.Dot5 = typ[2] + self.NewBortlamps = typ[4] + if lvz then + self:SetModel("models/metrostroi_train/81-717/81-717_lvz.mdl") + else + self:SetModel("models/metrostroi_train/81-717/81-717_mvm.mdl") + end + self:SetNW2Bool("Dot5",self.Dot5) + self:SetNW2Bool("LVZ",lvz) + self:SetNW2Int("SeatType",typ[3] and 2 or 1) + self:SetNW2Bool("NewBortlamps",self.NewBortlamps) + self:SetNW2Int("LampType",math.random()>0.5 and 2 or 1) + + local tex = typ[5] and typ[5][math.random(1,#typ[5])] or "Def_717MSKWhite" + self:SetNW2String("PassTexture",tex) + local mask = typ[6]==true or typ[6] and typ[6](num,tex) + self:SetNW2Int("MaskType",mask and 6 or 1) + self:SetNW2String("CabTexture",typ[7] and ((lvz and math.random()>0.2) and "Def_ClassicY" or "Def_ClassicG") or ((lvz and math.random()>0.2) and "Def_HammeriteY" or "Def_HammeriteG")) + local ARSchance = math.random() + self:SetNW2Int("ARSType",(not mask and not self.Dot5 and not lvz or ARSchance>0.8) and (ARSchance>0.93 and 5 or 4) or ARSchance>0.54 and (ARSchance>0.75 and 3 or 2) or 1) + local KVChance = math.random() + local RingChance = math.random() + if self.Dot5 then + self:SetNW2Int("KVType",math.Clamp(math.floor(KVChance*4)+1,1,4)) + if RingChance>0.7 then + self:SetNW2Int("RingType",RingChance>0.8 and 9 or RingChance>0.9 and 6 or 5) + elseif RingChance>0.45 then + self:SetNW2Int("RingType",RingChance>0.67 and 8 or 7) + else + self:SetNW2Int("RingType",math.Clamp(math.floor(KVChance/0.45*4)+1,1,4)) + end + else + if RingChance>0.6 then + self:SetNW2Int("RingType",RingChance>0.8 and 9 or RingChance>0.9 and 6 or 5) + else + self:SetNW2Int("RingType",math.Clamp(math.floor(KVChance/0.9*4)+1,1,4)) + end + self:SetNW2Int("KVType",math.Clamp(math.floor(KVChance*3)+1,1,3)) + end + local oldType = not self.Dot5 and not mask and not lvz + self:SetNW2String("Texture",oldType and "Def_717MSKClassic3" or "Def_717MSKClassic1") + self:SetNW2Int("BPSNType",oldType and (math.random()>0.7 and 2 or 1) or 2+math.Clamp(math.floor(math.random()*11)+1,1,11)) + + self:SetNW2Int("Crane",not oldType and 2 or 1) + if self.Dot5 then + self.FrontCouple.CoupleType = "717" + else + self.FrontCouple.CoupleType = "702" + end + self.RearCouple.CoupleType = self.FrontCouple.CoupleType + self.FrontCouple:SetParameters() + self.RearCouple:SetParameters() + + --self.ARSType = self:GetNW2Int("ARSType",1) + self.MaskType = self:GetNW2Int("MaskType",1) + self.SeatType = self:GetNW2Int("SeatType",1) + self.HandRail = self:GetNW2Int("HandRail",1) + self.BortLampType = self:GetNW2Int("BortLampType",1) + + + end + --[[ + local mask = self:GetNW2Int("MaskType",3) + if mask == 3 then + self.Lights[30][2] = Vector(465,-48, -23.5) + self.Lights[31][2] = Vector(465,48 , -23.5) + self.Lights[32][2] = Vector(465,0 , -23.5) + else + self.Lights[30][2] = Vector(465,-45, -23.5) + self.Lights[31][2] = Vector(465,45 , -23.5) + self.Lights[32][2] = Vector(465,0 , 52) + end]] + self.Announcer.AnnouncerType = self:GetNW2Int("Announcer",1) + self.LampType = self:GetNW2Int("LampType",1) + self.Pneumatic.ValveType = self:GetNW2Int("Crane",1) + self:SetPackedBool("Crane013",self.Pneumatic.ValveType == 2) + self:SetNW2Float("Crane013Loud",(self.Pneumatic.ValveType == 2 and math.random()>0.9) and 1.1+math.random()*0.3 or 0) + self:UpdateLampsColors() + self:UpdateTextures() + --[[ local scheme = Metrostroi.Skins["722_schemes"] and Metrostroi.Skins["722_schemes"][self.Scheme] + if IsValid(sarmat) and IsValid(sarmatr) and scheme then + if self:GetNW2Bool("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--]] + local used = {} + local str = "" + for i,k in ipairs(self.PR14XRelaysOrder) do + local v = self.PR14XRelays[k] + repeat + local rndi = math.ceil(math.random()*#v) + if not used[v[rndi][1]] then + str = str..rndi + used[v[rndi][1]] = true + break + end + until not used[v[rndi][1]] + end + self:SetNW2String("RelaysConfig",str) + + local pneumoPow = 0.8+(math.random()^1.55)*0.4 + if IsValid(self.FrontBogey) then + self.FrontBogey.PneumaticPow = pneumoPow + end + if IsValid(self.RearBogey) then + self.RearBogey.PneumaticPow = pneumoPow + end + 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 + self:SetNW2Bool("SecondKV",math.random()>0.7) + math.randomseed(os.time()) +end + +-------------------------------------------------------------------------------- +function ENT:Think() + self.RetVal = self.BaseClass.Think(self) + + local Panel = self.Panel + local Pneumatic = self.Pneumatic + local power = Panel.V1 > -1.5 + local brightness = math.min(1,Panel.Headlights1)*0.60 + + math.min(1,Panel.Headlights2)*0.40 + + + self:SetPackedBool("Headlights1",Panel.Headlights1 > 0) + self:SetPackedBool("Headlights2",Panel.Headlights2 > 0) + self:SetPackedBool("RedLights",Panel.RedLight2 > 0) + self:SetPackedBool("CabLights",Panel.CabLights>0) + self:SetPackedBool("EqLights",Panel.EqLights>0) + + self:SetPackedBool("PanelLights",Panel.PanelLights > 0.5) + + local lightsActive1 = Panel.EmergencyLights > 0 + local lightsActive2 = Panel.MainLights > 0.0 + local LampCount = self.LampType==2 and 25 or 12 + local Ip = self.LampType==2 and 7 or 3.6 + local Im = 0 + for i = 1,LampCount do + if (lightsActive2 or (lightsActive1 and math.ceil((i+Ip-Im)%Ip)==1)) then + if not self.Lamps[i] and not self.Lamps.broken[i] then self.Lamps[i] = CurTime() + math.Rand(0.1,math.Rand(0.5,2)) end + else + self.Lamps[i] = nil + end + if (self.Lamps[i] and CurTime() - self.Lamps[i] > 0) then + self:SetPackedBool("lightsActive"..i,true) + else + self:SetPackedBool("lightsActive"..i,false) + end + end + + + -- Door button lights + self:SetPackedBool("DoorsLeftL",Panel.DoorsLeft > 0.5) + self:SetPackedBool("DoorsRightL",Panel.DoorsRight > 0.5) + self:SetPackedBool("DoorsW",Panel.DoorsW > 0) + self:SetPackedBool("GRP",Panel.GreenRP > 0) + self:SetPackedBool("BrW",Panel.BrW > 0) + self:SetPackedBool("VH1",self.BZOS.VH1 > 0) + self:SetPackedBool("VH2",self.BZOS.VH2 > 0) + + -- Switch and button states + self:SetPackedBool("GreenRP",Panel.GreenRP > 0.5) + self:SetPackedBool("AVU",Panel.AVU > 0.5) + self:SetPackedBool("LKVP",Panel.LKVP > 0) + self:SetPackedBool("RZP",Panel.RZP > 0) + self:SetPackedBool("KUP",Panel.KUP > 0.5) + self:SetPackedBool("PN", Panel.BrT > 0.5) + self:SetPackedBool("VPR",Panel.VPR > 0) + + -- 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) + + -- DIP/power + self:SetPackedBool("LUDS",Panel.LUDS > 0.5) + + -- Red RP + local TW18 = 0 + if Panel.LSN > 0 then + local wags = #self.WagonList + for i,v in ipairs(self.WagonList) do + TW18 = TW18+(v.Panel.TW18 or 0)/wags + end + end + self:SetPackedBool("RP",TW18 > 0.5) + self:SetPackedBool("SN",TW18 > 0) + self:SetPackedRatio("RPR",math.Clamp(TW18^0.7,0,1)) + + self:SetPackedBool("SD",Panel.SD > 0.5) + + self:SetPackedBool("AR04",Panel.AR04 > 0) + self:SetPackedBool("AR0",Panel.AR0 > 0) + self:SetPackedBool("AR40",Panel.AR40 > 0) + self:SetPackedBool("AR60",Panel.AR60 > 0) + self:SetPackedBool("AR70",Panel.AR70 > 0) + self:SetPackedBool("AR80",Panel.AR80 > 0) + --]] + local drv = self:GetDriver() + self:SetPackedBool("GLIB",power and IsValid(drv) and drv:SteamID() == "STEAM_0:1:31566374") + self:SetPackedBool("LEKK",Panel.LEKK > 0) + self:SetPackedBool("LN",Panel.LN > 0) + self:SetPackedBool("ST",Panel.LST > 0) + self:SetPackedBool("VD",Panel.LVD > 0) + self:SetPackedBool("KVD",Panel.LKVD > 0) + self:SetPackedBool("RS",Panel.RS > 0) + self:SetPackedBool("OneFreq",Panel.OneFreq > 0) + self:SetPackedBool("HRK",Panel.LhRK > 0) + self:SetPackedBool("KVC",Panel.KVC > 0) + self:SetPackedBool("KT",Panel.KT>0) + self:SetPackedRatio("PVK",self.PVK.Value/2) + self:SetPackedBool("L1",Panel.L1 > 0) + self:SetPackedBool("M1_3",Panel.M1_3 > 0) + self:SetPackedBool("M4_7",Panel.M4_7 > 0) + self:SetPackedRatio("M8",Panel.M8) + self:SetNW2Int("WrenchMode",self.KVWrenchMode) + self:SetPackedBool("ReverserPresent",self.KVWrenchMode and self.KVWrenchMode>0) + self:SetPackedRatio("CranePosition", Pneumatic.RealDriverValvePosition) + self:SetPackedRatio("ControllerPosition", (self.KV.ControllerPosition+3)/7) + self:SetNW2Int("ReverserPosition", (self.KV.ReverserPosition+1)) + self:SetNW2Int("KRUPosition", self.KRU.Position) + + if Pneumatic.ValveType == 1 then + self:SetPackedRatio("BLPressure", Pneumatic.ReservoirPressure/16.0) + else + self:SetPackedRatio("BLPressure", Pneumatic.BrakeLinePressure/16.0) + end + self:SetPackedRatio("TLPressure", Pneumatic.TrainLinePressure/16.0) + self:SetPackedRatio("BCPressure", Pneumatic.BrakeCylinderPressure/6.0) + self:SetPackedRatio("EnginesVoltage", self.Electric.Aux750V/1000.0) + self:SetPackedRatio("EnginesCurrent2", 0.5 + 0.5*(self.Electric.I13/500.0)) + self:SetPackedRatio("EnginesCurrent", 0.5 + 0.5*(self.Electric.I24/500.0)) + self:SetPackedRatio("BatteryVoltage",Panel["V1"]*self.Battery.Voltage/150.0) + + self:SetPackedBool("Compressor",Pneumatic.Compressor > 0) + self:SetPackedBool("Buzzer",Panel.Ring >= 1) + self:SetPackedBool("BuzzerBZOS",Panel.Ring>0 and Panel.Ring<1) + self:SetPackedBool("RK",self.RheostatController.Velocity ~= 0.0) + + self:SetPackedBool("BPSN",self.PowerSupply.X2_2 > 0) + + self:SetPackedBool("RearDoor",self.RearDoor) + self:SetPackedBool("PassengerDoor",self.PassengerDoor) + self:SetPackedBool("CabinDoor",self.CabinDoor) + self:SetPackedBool("OtsekDoor1",self.OtsekDoor1) + self:SetPackedBool("OtsekDoor2",self.OtsekDoor2) + + self:SetPackedBool("AnnBuzz",Panel.AnnouncerBuzz > 0) + self:SetPackedBool("AnnPlay",Panel.AnnouncerPlaying > 0) + self:SetPackedBool("AnnCab",self.ASNP_VV.CabinSpeakerPower > 0) + -- Exchange some parameters between engines, pneumatic system, and real world + self.Engines:TriggerInput("Speed",self.Speed) + self:SetPackedRatio("Speed", self.Speed/100 or 0.5 or 0.85-(((CurTime()%36/36)^0.8)*8.5)/10 or self.Speed/100) + if IsValid(self.FrontBogey) and IsValid(self.RearBogey) and not self.IgnoreEngine then + local A = 2*self.Engines.BogeyMoment + --self.FrontBogey.MotorForce = 27000+1000*(A < 0 and 1 or 0) + --self.RearBogey.MotorForce = 27000+1000*(A < 0 and 1 or 0) + self.FrontBogey.MotorForce = 22500+5500*(A < 0 and 1 or 0) + self.RearBogey.MotorForce = 22500+5500*(A < 0 and 1 or 0) + self.FrontBogey.Reversed = (self.Reverser.NZ > 0.5) + 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) + --self.RearBogey.MotorPower = P*0.5 + --self.FrontBogey.MotorPower = P*0.5 + + --self.Acc = (self.Acc or 0)*0.95 + self.Acceleration*0.05 + + -- Apply brakes + self.FrontBogey.PneumaticBrakeForce = 50000.0-2000 + self.FrontBogey.BrakeCylinderPressure = Pneumatic.BrakeCylinderPressure + self.FrontBogey.ParkingBrakePressure = math.max(0,(2.6-Pneumatic.ParkingBrakePressure)/2.6)/2 + self.FrontBogey.BrakeCylinderPressure_dPdT = -Pneumatic.BrakeCylinderPressure_dPdT + self.RearBogey.PneumaticBrakeForce = 50000.0-2000 + self.RearBogey.BrakeCylinderPressure = Pneumatic.BrakeCylinderPressure + self.RearBogey.BrakeCylinderPressure_dPdT = -Pneumatic.BrakeCylinderPressure_dPdT + self.RearBogey.ParkingBrakePressure = math.max(0,(2.6-Pneumatic.ParkingBrakePressure)/2.6)/2 + end + + self:GenerateJerks() + + return self.RetVal +end + +function ENT:TriggerTurbostroiInput(sys,name,val) + self.BaseClass.TriggerTurbostroiInput(self,sys,name,val) +end + +function ENT:PhysicsCollide( colData ) +end +-------------------------------------------------------------------------------- +function ENT:OnButtonPress(button,ply) + if string.find(button,"PneumaticBrakeSet") then + self.Pneumatic:TriggerInput("BrakeSet",tonumber(button:sub(-1,-1))) + return + end + if button == "IGLA23" then + self.IGLA2:TriggerInput("Set",1) + self.IGLA3:TriggerInput("Set",1) + 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 + if button == "OtsekDoor1" then self.OtsekDoor1 = not self.OtsekDoor1 end + if button == "OtsekDoor2" then self.OtsekDoor2 = not self.OtsekDoor2 end + + if button == "KVUp" then self.KV:TriggerInput("ControllerUp",1.0) end + if button == "KVDown" then self.KV:TriggerInput("ControllerDown",1.0) end + if button == "KV_Unlock" then self.KV:TriggerInput("ControllerUnlock",1.0) end + if (self.KVWrenchMode == 2) and (button == "KVReverserUp") then self.KRU:TriggerInput("Up",1) end + if (self.KVWrenchMode == 2) and (button == "KVReverserDown") then self.KRU:TriggerInput("Down",1) end + if (self.KVWrenchMode == 2) and (button == "KVSetX1B") then self.KRU:TriggerInput("SetX1",1) end + if (self.KVWrenchMode == 2) and (button == "KVSetX2") then self.KRU:TriggerInput("SetX2",1) end + if (self.KVWrenchMode == 2) and (button == "KVSet0") then self.KRU:TriggerInput("Set0",1) 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 and self.KV.ReverserPosition == 0 and self.KRU.Position == 0 then + if self.KVWrenchMode == 2 then + self:PlayOnce("kru_out","cabin",0.7) + else + self:PlayOnce("revers_out","cabin",0.7) + end + self.KVWrenchMode = 0 + self.KV:TriggerInput("Enabled",0) + self.KRU:TriggerInput("Enabled",0) + end + end + if button == "KVWrenchKRU" then + if self.KVWrenchMode == 0 then + self:PlayOnce("kru_in","cabin",0.7) + self.KVWrenchMode = 2 + self.KRU:TriggerInput("Enabled",1) + end + end + if button == "KAH" and not self.Plombs.KAH then + self.KAHK:TriggerInput("Open",1) + self.KAH:TriggerInput("Close",1) + end + if button == "KDL" and self.VUD1.Value < 1 then self.KDL:TriggerInput("Close",1) end + if button == "KDP" and self.VUD1.Value < 1 then self.KDP:TriggerInput("Close",1) end + if button == "VDL" and self.VUD1.Value < 1 then self.VDL:TriggerInput("Close",1) end + if button == "EmergencyBrake" then + self.KV:TriggerInput("ControllerSet",-3) + self.Pneumatic:TriggerInput("BrakeSet",7) + return + end + + if button == "KVT" then + self.KVT:TriggerInput("Set",1) + self.KVTR:TriggerInput("Set",1) + end + + if (button == "VDL") or (button == "KDL") then + self.DoorSelect:TriggerInput("Open",1) + self.KDLK:TriggerInput("Open",1) + end + if (button == "KDP") then + self.DoorSelect:TriggerInput("Close",1) + self.KDPK:TriggerInput("Open",1) + end + if (button == "VUD1Set") or (button == "VUD1Toggle") or + (button == "VUD2Set") or (button == "VUD2Toggle") then + self.VDL:TriggerInput("Open",1) + self.KDL:TriggerInput("Open",1) + self.KDP:TriggerInput("Open",1) + end + -- Special sounds + if button == "DriverValveDisconnect" then + if self.Pneumatic.ValveType == 1 then + if self.DriverValveBLDisconnect.Value == 0 or self.DriverValveTLDisconnect.Value == 0 then + self.DriverValveBLDisconnect:TriggerInput("Set",1) + self.DriverValveTLDisconnect:TriggerInput("Set",1) + else + self.DriverValveBLDisconnect:TriggerInput("Set",0) + self.DriverValveTLDisconnect:TriggerInput("Set",0) + end + else + if self.DriverValveDisconnect.Value == 1.0 then + self.DriverValveDisconnect:TriggerInput("Set",0) + else + self.DriverValveDisconnect:TriggerInput("Set",1) + end + 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 == "KAH" then + self.KAH:TriggerInput("Open",1) + end + if button == "KDL" then self.KDL:TriggerInput("Open",1) end + if button == "KDP" then self.KDP:TriggerInput("Open",1) end + if button == "VDL" then self.VDL:TriggerInput("Open",1) end + if button == "KV_Unlock" then + self.KV:TriggerInput("ControllerUnlock",0.0) + end + + if button == "IGLA23" then + self.IGLA2:TriggerInput("Set",0) + self.IGLA3:TriggerInput("Set",0) + end + + if button == "KVT" then + self.KVT:TriggerInput("Set",0) + self.KVTR:TriggerInput("Set",0) + 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 + +function ENT:OnTrainWireError(k) +end +function ENT:OnPlay(soundid,location,range,pitch) + if soundid == "pkg" and self.LK1.Value > 0 and math.floor(self.PositionSwitch.Position+0.5) == 2 then + return "lk2_off",location,range,pitch + end + return soundid,location,range,pitch +end diff --git a/lua/entities/gmod_subway_81-717_mvm/shared.lua b/lua/entities/gmod_subway_81-717_mvm/shared.lua new file mode 100644 index 0000000..96cceab --- /dev/null +++ b/lua/entities/gmod_subway_81-717_mvm/shared.lua @@ -0,0 +1,1055 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.PrintName = "81-717 MVM" +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" +ENT.SkinsType = "81-717_msk" +ENT.Model = "models/metrostroi_train/81-717/81-717_mvm.mdl" + +ENT.Spawnable = true +ENT.AdminSpawnable = false +ENT.DontAccelerateSimulation = false +function ENT:PassengerCapacity() + return 300 +end + +function ENT:GetStandingArea() + return Vector(-450,-30,-48),Vector(380,30,-48) +end + +local function GetDoorPosition(i,k) + return Vector(359.0 - 35/2 - 229.5*i,-65*(1-2*k),7.5) +end + +-- Setup door positions +ENT.LeftDoorPositions = {} +ENT.RightDoorPositions = {} +for i=1,4 do + table.insert(ENT.LeftDoorPositions,GetDoorPosition(i-1,1)) + table.insert(ENT.RightDoorPositions,GetDoorPosition(i-1,0)) +end + +ENT.AnnouncerPositions = { + {Vector(420,-49 ,61),80,0.4}, + {Vector(-3,-60, 62),250,0.3}, + {Vector(-3,60 ,62),250,0.3}, +} +ENT.Cameras = { + {Vector(407.5+23,4,29),Angle(0,180,0),"Train.717.Breakers","AV_C"}, + {Vector(407.5+35,-49,20),Angle(0,180,0),"Train.717.VB","Battery_C"}, + {Vector(407.5+25,-40,27),Angle(0,180,0),"Train.717.Breakers","AV_R"}, + {Vector(407.5+20,-40.5,5.5),Angle(0,180,0),"Train.717.VB","Battery_R"}, + {Vector(407.5-0,-10.5,12),Angle(0,270-45,0),"Train.717.VBD","VBD_R"}, + {Vector(407.5+13,-47,-20),Angle(40,270-15,0),"Train.Common.UAVA"}, + {Vector(407.5+5,-20,-10),Angle(40,-30,0),"Train.Common.PneumoPanels"}, + {Vector(407.5+35,40,10),Angle(0,90-17,0),"Train.Common.HelpersPanel"}, + {Vector(407.5+31,18.8,0),Angle(30,0,0),"Train.Common.ASNP"}, + {Vector(407.5+39,-26.5,25),Angle(0,-20,0),"Train.Common.IGLA"}, + {Vector(407.5+70,51.5,0) ,Angle(20,180+9,0),"Train.Common.RouteNumber"}, + {Vector(407.5+75,0.3,4.5) ,Angle(20,180,0),"Train.Common.LastStation"}, + {Vector(450+7,0,30),Angle(60,0,0),"Train.Common.CouplerCamera"}, +} + +local ARSRelays = {"EK","EK1","KPK1","KPK2","FMM1","FMM2","PD1","PD2","ARS_VP","ARS_RT","NG","NH","BUM_RVD1","BUM_RVD2","BUM_RUVD","BUM_RB","BUM_TR","BUM_PTR","BUM_PTR1","BUM_EK","BUM_EK1","BUM_RVZ1","BUM_RET","BUM_LTR1","BUM_RVT1","BUM_RVT2","BUM_RVT4","BUM_RVT5","BUM_RIPP","BUM_PEK","BUM_KPP","BSM_GE","BSM_SIR1","BSM_SIR2","BSM_SIR3","BSM_SIR4","BSM_SIR5","BSM_SR1","BSM_SR2","BSM_KSR1","BSM_KSR2","BSM_KRO","BSM_KRH","BSM_KRT","BSM_BR1","BSM_BR2","BSM_PR1","BSM_RNT","BSM_RNT1","BLPM_1R1","BLPM_1R2","BLPM_1R3","BLPM_2R1","BLPM_2R2","BLPM_2R3","BLPM_3R1","BLPM_3R2","BLPM_3R3","BLPM_4R1","BLPM_4R2","BLPM_4R3","BLPM_5R1","BLPM_5R2","BLPM_5R3","BLPM_6R1","BLPM_6R2","BLPM_6R3","BIS_R0","BIS_R1","BIS_R2","BIS_R3","BIS_R4","BIS_R5","BIS_R6","BIS_R7","BIS_R8","BIS_R10",} +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.05} + self.SoundPositions["rolling_10"] = {480,1e12,Vector(0,0,0),0.1} + self.SoundPositions["rolling_40"] = {480,1e12,Vector(0,0,0),0.55} + self.SoundPositions["rolling_70"] = {480,1e12,Vector(0,0,0),0.60} + self.SoundPositions["rolling_80"] = {480,1e12,Vector(0,0,0),0.75} + + + self.SoundNames["rolling_32"] = {loop=true,"subway_trains/717/rolling/rolling_32.wav"} + self.SoundNames["rolling_68"] = {loop=true,"subway_trains/717/rolling/rolling_68.wav"} + self.SoundNames["rolling_75"] = {loop=true,"subway_trains/717/rolling/rolling_75.wav"} + self.SoundPositions["rolling_32"] = {480,1e12,Vector(0,0,0),0.2} + self.SoundPositions["rolling_68"] = {480,1e12,Vector(0,0,0),0.4} + self.SoundPositions["rolling_75"] = {480,1e12,Vector(0,0,0),0.8} + + self.SoundNames["rolling_motors"] = {loop=true,"subway_trains/common/junk/wind_background1.wav"} + self.SoundNames["rolling_motors2"] = {loop=true,"subway_trains/common/junk/wind_background1.wav"} + self.SoundPositions["rolling_motors"] = {250,1e12,Vector(200,0,0),0.33} + self.SoundPositions["rolling_motors2"] = {250,1e12,Vector(-250,0,0),0.33} + + 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"] = {480,1e12,Vector(0,0,0),0.90} + self.SoundPositions["rolling_medium2"] = {480,1e12,Vector(0,0,0),0.90} + self.SoundPositions["rolling_high2"] = {480,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,-24.1+1.5,-33.7),1} + self.SoundPositions["pneumo_disconnect1"] = {60,1e9,Vector(431.8,-24.1+1.5,-33.7),1} + self.SoundNames["epv_on"] = "subway_trains/common/pneumatic/epv_on.mp3" + self.SoundNames["epv_off"] = "subway_trains/common/pneumatic/epv_off.mp3" + self.SoundPositions["epv_on"] = {80,1e9,Vector(437.2,-53.1,-32.0),0.85} + self.SoundPositions["epv_off"] = {80,1e9,Vector(437.2,-53.1,-32.0),0.85} + self.SoundPositions["epv_off"] = {60,1e9,Vector(437.2,-53.1,-32.0),0.85} + -- Релюшки + --self.SoundNames["rpb_on"] = "subway_trains/717/relays/new/ro_off.mp3" + --self.SoundNames["rpb_off"] = "subway_trains/717/relays/ro_on.mp3" + self.SoundNames["rpb_on"] = "subway_trains/717/relays/rev813t_on1.mp3" + self.SoundNames["rpb_off"] = "subway_trains/717/relays/rev813t_off1.mp3" + self.SoundPositions["rpb_on"] = {80,1e9,Vector(440,16,66),1} + self.SoundPositions["rpb_off"] = {80,1e9,Vector(440,16,66),0.7} + --self.SoundNames["rvt_on"] = "subway_trains/717/relays/new/rvt_on1.mp3" + --self.SoundNames["rvt_off"] = "subway_trains/717/relays/new/rvt_off.mp3" + self.SoundNames["rvt_on"] = "subway_trains/717/relays/rev811t_on2.mp3" + self.SoundNames["rvt_off"] = "subway_trains/717/relays/rev811t_off1.mp3" + self.SoundPositions["rvt_on"] = {80,1e9,Vector(440,18,66),1} + self.SoundPositions["rvt_off"] = {80,1e9,Vector(440,18,66),0.7} + --self.SoundNames["k6_on"] = "subway_trains/717/relays/new/k6_on1.mp3" + --self.SoundNames["k6_off"] = "subway_trains/717/relays/new/k6_off.mp3" + self.SoundNames["k6_on"] = "subway_trains/717/relays/tkpm121_on1.mp3" + self.SoundNames["k6_off"] = "subway_trains/717/relays/tkpm121_off1.mp3" + self.SoundPositions["k6_on"] = {80,1e9,Vector(440,20,66),1} + self.SoundPositions["k6_off"] = {80,1e9,Vector(440,20,66),1} + --self.SoundNames["r1_5_on"] = "subway_trains/717/relays/new/r1_5_on.mp3" + --self.SoundNames["r1_5_off"] = "subway_trains/717/relays/new/r1_5_off.mp3" + self.SoundNames["r1_5_on"] = "subway_trains/717/relays/kpd110e_on1.mp3"--,"subway_trains/717/relays/kpd110e_on2.mp3"} + self.SoundNames["r1_5_off"] = "subway_trains/717/relays/kpd110e_off1.mp3"--,"subway_trains/717/relays/kpd110e_off2.mp3"} + self.SoundPositions["r1_5_on"] = {80,1e9,Vector(440,22,66),1} + self.SoundPositions["r1_5_off"] = {80,1e9,Vector(440,22,66),0.7} + + self.SoundNames["rot_off"] = "subway_trains/717/relays/lsd_2.mp3" + self.SoundNames["rot_on"] = "subway_trains/717/relays/relay_on.mp3" + self.SoundPositions["rot_on"] = {80,1e9,Vector(380,-40,40),0.25} + self.SoundPositions["rot_off"] = {80,1e9,Vector(380,-40,40),0.25} + + --self.SoundNames["k25_on"] = "subway_trains/717/relays/new/k25_on.mp3" + --self.SoundNames["k25_off"] = "subway_trains/717/relays/new/k25_off.mp3" + self.SoundNames["k25_on"] = self.SoundNames["r1_5_on"] + self.SoundNames["k25_off"] = self.SoundNames["r1_5_off"] + self.SoundPositions["k25_on"] = {80,1e9,Vector(440,-16,66),1} + self.SoundPositions["k25_off"] = {80,1e9,Vector(440,-16,66),0.7} + --self.SoundNames["rp8_off"] = "subway_trains/717/relays/lsd_2.mp3" + --self.SoundNames["rp8_on"] = "subway_trains/717/relays/rp8_on.wav" + self.SoundNames["rp8_off"] = "subway_trains/717/relays/rev811t_off2.mp3" + self.SoundNames["rp8_on"] = "subway_trains/717/relays/rev811t_on3.mp3" + self.SoundPositions["rp8_on"] = {80,1e9,Vector(440,-18,66),1} + self.SoundPositions["rp8_off"] = {80,1e9,Vector(440,-18,66),0.3} + --self.SoundNames["kd_off"] = "subway_trains/717/relays/lsd_2.mp3" + --self.SoundNames["kd_on"] = "subway_trains/717/relays/new/kd_on.mp3" + self.SoundNames["kd_off"] = self.SoundNames["rp8_off"] + self.SoundNames["kd_on"] = self.SoundNames["rp8_on"] + self.SoundPositions["kd_on"] = {80,1e9,Vector(440,-20,66),1} + self.SoundPositions["kd_off"] = {80,1e9,Vector(440,-20,66),0.7} + --self.SoundNames["ro_on"] = "subway_trains/717/relays/ro_on.mp3" + --self.SoundNames["ro_off"] = "subway_trains/717/relays/new/ro_off.mp3" + self.SoundNames["ro_on"] = self.SoundNames["r1_5_on"] + self.SoundNames["ro_off"] = self.SoundNames["r1_5_off"] + self.SoundPositions["ro_on"] = {80,1e9,Vector(440,-22,66),1} + self.SoundPositions["ro_off"] = {80,1e9,Vector(440,-22,66),0.7} + self.SoundNames["kk_off"] = "subway_trains/717/relays/lsd_2.mp3" + self.SoundNames["kk_on"] = "subway_trains/717/relays/lsd_1.mp3" + self.SoundPositions["kk_on"] = {80,1e9,Vector(280,40,-30),0.85} + self.SoundPositions["kk_off"] = {80,1e9,Vector(280,40,-30),0.85} + + self.SoundNames["avu_off"] = "subway_trains/common/pneumatic/ak11b_off.mp3" + self.SoundNames["avu_on"] = "subway_trains/common/pneumatic/ak11b_on.mp3" + self.SoundPositions["avu_on"] = {60,1e9, Vector(432.4,-59.4,-31.6),0.7} + self.SoundPositions["avu_off"] = self.SoundPositions["avu_on"] + + --self.SoundNames["avu_off"] = "subway_trains/717/relays/lsd_2.mp3" + --self.SoundNames["avu_on"] = "subway_trains/717/relays/relay_on.mp3" + --self.SoundPositions["avu_off"] = {60,1e9, Vector(436.0,-63,-25),1} + --self.SoundNames["r1_5_close"] = {"subway_trains/drive_on3.wav","subway_trains/drive_on4.wav"} + self.SoundNames["bpsn1"] = {"subway_trains/717/bpsn/bpsn_ohigh.wav", loop=true} + self.SoundNames["bpsn2"] = {"subway_trains/717/bpsn/old.wav", loop=true} + self.SoundNames["bpsn3"] = {"subway_trains/717/bpsn/bpsn_olow.wav", loop=true} + self.SoundNames["bpsn4"] = {"subway_trains/717/bpsn/bpsn_spb.wav", loop=true} + self.SoundNames["bpsn5"] = {"subway_trains/717/bpsn/bpsn_tkl.wav", loop=true} + self.SoundNames["bpsn6"] = {"subway_trains/717/bpsn/bpsn_nnov.wav", loop=true} + self.SoundNames["bpsn7"] = {"subway_trains/717/bpsn/bpsn_kiyv.wav", loop=true} + self.SoundNames["bpsn8"] = {"subway_trains/717/bpsn/bpsn_old.wav", loop=true} + self.SoundNames["bpsn9"] = {"subway_trains/717/bpsn/bpsn_1.wav", loop=true} + self.SoundNames["bpsn10"] = {"subway_trains/717/bpsn/bpsn_2.wav", loop=true} + self.SoundNames["bpsn11"] = {"subway_trains/717/bpsn/bpsn_piter.wav", loop=true} + self.SoundNames["bpsn12"] = {"subway_trains/717/bpsn/bpsn1.wav", loop=true} + self.SoundPositions["bpsn1"] = {600,1e9,Vector(0,45,-448),0.02} + self.SoundPositions["bpsn2"] = {600,1e9,Vector(0,45,-448),0.03} + self.SoundPositions["bpsn3"] = {600,1e9,Vector(0,45,-448),0.02} + self.SoundPositions["bpsn4"] = {600,1e9,Vector(0,45,-448),0.025} + self.SoundPositions["bpsn5"] = {600,1e9,Vector(0,45,-448),0.08} + self.SoundPositions["bpsn6"] = {600,1e9,Vector(0,45,-448),0.03} + self.SoundPositions["bpsn7"] = {600,1e9,Vector(0,45,-448),0.02} + self.SoundPositions["bpsn8"] = {600,1e9,Vector(0,45,-448),0.03} + self.SoundPositions["bpsn9"] = {600,1e9,Vector(0,45,-448),0.02} + self.SoundPositions["bpsn10"] = {600,1e9,Vector(0,45,-448),0.02} + self.SoundPositions["bpsn11"] = {600,1e9,Vector(0,45,-448),0.04} + self.SoundPositions["bpsn12"] = {600,1e9,Vector(0,45,-448),0.04} + --Подвагонка + self.SoundNames["lk2_on"] = "subway_trains/717/pneumo/lk2_on.mp3" + self.SoundNames["lk5_on"] = "subway_trains/717/pneumo/lk1_on.mp3" + self.SoundNames["lk2_off"] = "subway_trains/717/pneumo/lk2_off.mp3" + self.SoundNames["lk2c"] = "subway_trains/717/pneumo/ksh1.mp3" + self.SoundNames["lk3_on"] = "subway_trains/717/pneumo/lk3_on.mp3" + self.SoundNames["lk3_off"] = "subway_trains/717/pneumo/lk3_off.mp3" + --self.SoundNames["ksh1_off"] = "subway_trains/717/pneumo/ksh1.mp3" + self.SoundPositions["lk2_on"] = {440,1e9,Vector(-60,-40,-66),0.22} + self.SoundPositions["lk5_on"] = {440,1e9,Vector(-60,-40,-66),0.30} + self.SoundPositions["lk2_off"] = self.SoundPositions["lk2_on"] + self.SoundPositions["lk2c"] = {440,1e9,Vector(-60,-40,-66),0.6} + self.SoundPositions["lk3_on"] = self.SoundPositions["lk2_on"] + self.SoundPositions["lk3_off"] = self.SoundPositions["lk2_on"] + --self.SoundPositions["ksh1_off"] = self.SoundPositions["lk1_on"] + + self.SoundNames["compressor"] = {loop=2.0,"subway_trains/d/pneumatic/compressor/compessor_d_start.wav","subway_trains/d/pneumatic/compressor/compessor_d_loop.wav", "subway_trains/d/pneumatic/compressor/compessor_d_end.wav"} + self.SoundNames["compressor2"] = {loop=1.79,"subway_trains/717/compressor/compressor_717_start2.wav","subway_trains/717/compressor/compressor_717_loop2.wav", "subway_trains/717/compressor/compressor_717_stop2.wav"} + self.SoundPositions["compressor"] = {600,1e9,Vector(-118,-40,-66),0.15} + self.SoundPositions["compressor2"] = {480,1e9,Vector(-118,-40,-66),0.55} + self.SoundNames["rk"] = {loop=0.8,"subway_trains/717/rk/rk_start.wav","subway_trains/717/rk/rk_spin.wav","subway_trains/717/rk/rk_stop.mp3"} + self.SoundPositions["rk"] = {70,1e3,Vector(110,-40,-75),0.5} + + self.SoundNames["revers_0-f"] = {"subway_trains/717/kv70/reverser_0-f_1.mp3","subway_trains/717/kv70/reverser_0-f_2.mp3"} + self.SoundNames["revers_f-0"] = {"subway_trains/717/kv70/reverser_f-0_1.mp3","subway_trains/717/kv70/reverser_f-0_2.mp3"} + self.SoundNames["revers_0-b"] = {"subway_trains/717/kv70/reverser_0-b_1.mp3","subway_trains/717/kv70/reverser_0-b_2.mp3"} + self.SoundNames["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/717/kv70/reverser_in1.mp3","subway_trains/717/kv70/reverser_in2.mp3","subway_trains/717/kv70/reverser_in3.mp3"} + self.SoundNames["revers_out"] = {"subway_trains/717/kv70/reverser_out1.mp3","subway_trains/717/kv70/reverser_out2.mp3"} + self.SoundPositions["revers_0-f"] = {80,1e9,Vector(445.5,-32+1.7,-7.5),0.85} + self.SoundPositions["revers_f-0"] = {80,1e9,Vector(445.5,-32+1.7,-7.5),0.85} + self.SoundPositions["revers_0-b"] = {80,1e9,Vector(445.5,-32+1.7,-7.5),0.85} + self.SoundPositions["revers_b-0"] = {80,1e9,Vector(445.5,-32+1.7,-7.5),0.85} + self.SoundPositions["revers_in"] = {80,1e9,Vector(445.5,-32+1.7,-7.5),0.85} + self.SoundPositions["revers_out"] = {80,1e9,Vector(445.5,-32+1.7,-7.5),0.85} + + 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"] = {80,1e9,Vector(452.3,-24.0,4.0)} + + 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/kru2-3_1.mp3", + "subway_trains/717/kru/kru2-3_2.mp3", + "subway_trains/717/kru/kru2-3_3.mp3", + "subway_trains/717/kru/kru2-3_4.mp3", + } + self.SoundNames["kru_3_2"] = { + "subway_trains/717/kru/kru3-2_1.mp3", + "subway_trains/717/kru/kru3-2_2.mp3", + "subway_trains/717/kru/kru3-2_3.mp3", + "subway_trains/717/kru/kru3-2_4.mp3", + } + self.SoundPositions["kru_0_1"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_1_2"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_2_1"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_1_0"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_2_3"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_3_2"] = {80,1e9,Vector(452.3,-24.0,4.0)} + + + --[[self.SoundNames["pvk_0_1"] = "subway_trains/717/switches/vent0-1.mp3" + self.SoundNames["pvk_1_2"] = "subway_trains/717/switches/vent1-2.mp3" + self.SoundNames["pvk_2_1"] = "subway_trains/717/switches/vent2-1.mp3" + self.SoundNames["pvk_1_0"] = "subway_trains/717/switches/vent1-0.mp3"]] + --self.SoundNames["pvk_0_1"] = "subway_trains/717/switches/vent0-1.mp3" + self.SoundNames["pvk2"] = "subway_trains/717/switches/vent1-2.mp3" + self.SoundNames["pvk1"] = "subway_trains/717/switches/vent2-1.mp3" + self.SoundNames["pvk0"] = "subway_trains/717/switches/vent1-0.mp3" + self.SoundNames["vent_cabl"] = {loop=true,"subway_trains/717/vent/vent_cab_low.wav"} + self.SoundPositions["vent_cabl"] = {140,1e9,Vector(450.7,44.5,-11.9),0.66} + self.SoundNames["vent_cabh"] = {loop=true,"subway_trains/717/vent/vent_cab_high.wav"} + self.SoundPositions["vent_cabh"] = self.SoundPositions["vent_cabl"] + + for i=1,7 do + self.SoundNames["vent"..i] = {loop=true,"subway_trains/717/vent/vent_cab_"..(i==7 and "low" or "high")..".wav"} + end + self.SoundPositions["vent1"] = {120,1e9,Vector(225, -50, -37.5),0.23} + self.SoundPositions["vent2"] = {120,1e9,Vector(-5, 50, -37.5),0.23} + self.SoundPositions["vent3"] = {120,1e9,Vector(-230, -50, -37.5),0.23} + self.SoundPositions["vent4"] = {120,1e9,Vector(225, 50, -37.5),0.23} + self.SoundPositions["vent5"] = {120,1e9,Vector(-5, -50, -37.5),0.23} + self.SoundPositions["vent6"] = {120,1e9,Vector(-230, 50, -37.5),0.23} + self.SoundPositions["vent7"] = {120,1e9,Vector(-432, -50, -37.5),0.23} + + self.SoundNames["kr_open"] = { + "subway_trains/717/cover/cover_open1.mp3", + "subway_trains/717/cover/cover_open2.mp3", + "subway_trains/717/cover/cover_open3.mp3", + } + self.SoundNames["kr_close"] = { + "subway_trains/717/cover/cover_close1.mp3", + "subway_trains/717/cover/cover_close2.mp3", + "subway_trains/717/cover/cover_close3.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/717/switches/button1_off1.mp3", + "subway_trains/717/switches/button1_off2.mp3", + "subway_trains/717/switches/button1_off3.mp3", + } + self.SoundNames["button1_on"] = { + "subway_trains/717/switches/button1_on1.mp3", + "subway_trains/717/switches/button1_on2.mp3", + "subway_trains/717/switches/button1_on3.mp3", + } + self.SoundNames["button2_off"] = { + "subway_trains/717/switches/button2_off1.mp3", + "subway_trains/717/switches/button2_off2.mp3", + } + self.SoundNames["button2_on"] = { + "subway_trains/717/switches/button2_on1.mp3", + "subway_trains/717/switches/button2_on2.mp3", + } + self.SoundNames["button3_off"] = { + "subway_trains/717/switches/button3_off1.mp3", + "subway_trains/717/switches/button3_off2.mp3", + } + self.SoundNames["button3_on"] = { + "subway_trains/717/switches/button3_on1.mp3", + "subway_trains/717/switches/button3_on2.mp3", + } + self.SoundNames["button4_off"] = { + "subway_trains/717/switches/button4_off1.mp3", + "subway_trains/717/switches/button4_off2.mp3", + } + self.SoundNames["button4_on"] = { + "subway_trains/717/switches/button4_on1.mp3", + "subway_trains/717/switches/button4_on2.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(429.6,-60.8,-15.9),0.95} + self.SoundNames["gv_f"] = {"subway_trains/717/kv70/reverser_0-b_1.mp3","subway_trains/717/kv70/reverser_0-b_2.mp3"} + self.SoundNames["gv_b"] = {"subway_trains/717/kv70/reverser_b-0_1.mp3","subway_trains/717/kv70/reverser_b-0_2.mp3"} + + self.SoundNames["pneumo_TL_open"] = { + "subway_trains/ezh3/pneumatic/brake_line_on.mp3", + "subway_trains/ezh3/pneumatic/brake_line_on2.mp3", + } + self.SoundNames["pneumo_TL_disconnect"] = { + "subway_trains/common/334/334_close.mp3", + } + self.SoundPositions["pneumo_TL_open"] = {60,1e9,Vector(431.8,-24.1+1.5,-33.7),0.7} + self.SoundPositions["pneumo_TL_disconnect"] = {60,1e9,Vector(431.8,-24.1+1.5,-33.7),0.7} + self.SoundNames["pneumo_BL_disconnect"] = { + "subway_trains/common/334/334_close.mp3", + } + 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["parking_brake"] = {loop=true,"subway_trains/common/pneumatic/parking_brake.wav"} + self.SoundNames["parking_brake_en"] = "subway_trains/common/pneumatic/parking_brake_stop.mp3" + self.SoundNames["parking_brake_rel"] = "subway_trains/common/pneumatic/parking_brake_stop2.mp3" + self.SoundPositions["parking_brake"] = {80,1e9,Vector(453.6,-0.25,-39.8),0.6} + self.SoundPositions["parking_brake_en"] = self.SoundPositions["parking_brake"] + self.SoundPositions["parking_brake_rel"] = self.SoundPositions["parking_brake"] + self.SoundNames["front_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["front_isolation"] = {300,1e9,Vector(443, 0,-63),1} + self.SoundNames["rear_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["rear_isolation"] = {300,1e9,Vector(-456, 0,-63),1} + + self.SoundNames["crane013_brake"] = {loop=true,"subway_trains/common/pneumatic/release_2.wav"} + self.SoundPositions["crane013_brake"] = {80,1e9,Vector(431.5,-20.3,-12),0.86} + self.SoundNames["crane013_brake2"] = {loop=true,"subway_trains/common/pneumatic/013_brake2.wav"} + self.SoundPositions["crane013_brake2"] = {80,1e9,Vector(431.5,-20.3,-12),0.86} + self.SoundNames["crane013_brake_l"] = {loop=true,"subway_trains/common/pneumatic/013_brake_loud2.wav"} + self.SoundPositions["crane013_brake_l"] = {80,1e9,Vector(431.5,-20.3,-12),0.7} + self.SoundNames["crane013_release"] = {loop=true,"subway_trains/common/pneumatic/013_release.wav"} + self.SoundPositions["crane013_release"] = {80,1e9,Vector(431.5,-20.3,-12),0.4} + self.SoundNames["crane334_brake_high"] = {loop=true,"subway_trains/common/pneumatic/334_brake.wav"} + self.SoundPositions["crane334_brake_high"] = {80,1e9,Vector(432.27,-22.83,-8.2),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(432.27,-22.83,-8.2),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(432.27,-22.83,-8.2),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(432.27,-22.83,-70.2),0.2} + 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(432.27,-22.83,-70.2),0.2} + self.SoundNames["crane334_release"] = {loop=true,"subway_trains/common/pneumatic/334_release3.wav"} + self.SoundPositions["crane334_release"] = {80,1e9,Vector(432.27,-22.83,-8.2),0.2} + self.SoundNames["crane334_release_2"] = {loop=true,"subway_trains/common/pneumatic/334_release2.wav"} + self.SoundPositions["crane334_release_2"] = {80,1e9,Vector(432.27,-22.83,-8.2),0.2} + + self.SoundNames["epk_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["epk_brake"] = {80,1e9,Vector(437.2,-53.1,-32.0),0.65} + + self.SoundNames["valve_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["valve_brake"] = {80,1e9,Vector(408.45,62.15,11.5),1} + --[[ self.SoundNames["valve_brake_l"] = {loop=true,"subway_trains/common/pneumatic/emer_low.wav"} + self.SoundNames["valve_brake_m"] = {loop=true,"subway_trains/common/pneumatic/emer_medium.wav"} + self.SoundNames["valve_brake_h"] = {loop=true,"subway_trains/common/pneumatic/emer_high.wav"} + self.SoundPositions["valve_brake_l"] = {80,1e9,Vector(408.45,62.15,11.5),0.3} + self.SoundPositions["valve_brake_m"] = {80,1e9,Vector(408.45,62.15,11.5),0.4} + self.SoundPositions["valve_brake_h"] = {80,1e9,Vector(408.45,62.15,11.5),1}--]] + + 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(345,-55,-84),0.95} + self.SoundPositions["emer_brake2"] = {600,1e9,Vector(345,-55,-84),1} + + + 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["kv70_t1_0_fix"]= {"subway_trains/717/kv70/kv70_t1-0_fix_1.mp3","subway_trains/717/kv70/kv70_t1-0_fix_2.mp3","subway_trains/717/kv70/kv70_t1-0_fix_3.mp3","subway_trains/717/kv70/kv70_t1-0_fix_4.mp3"} + self.SoundNames["kv70_0_t1"] = {"subway_trains/ezh/kv40/kv40_0_t1.mp3"} + self.SoundNames["kv70_t1_0"] = {"subway_trains/ezh/kv40/kv40_t1_0.mp3"} + self.SoundNames["kv70_t1_t1a"] = {"subway_trains/ezh/kv40/kv40_t1_t1a.mp3"} + self.SoundNames["kv70_t1a_t1"] = {"subway_trains/ezh/kv40/kv40_t1a_t1.mp3"} + self.SoundNames["kv70_t1a_t2"] = {"subway_trains/ezh/kv40/kv40_t1a_t2.mp3"} + self.SoundNames["kv70_t2_t1a"] = {"subway_trains/ezh/kv40/kv40_t2_t1a.mp3"} + self.SoundNames["kv70_0_x1"] = {"subway_trains/ezh/kv40/kv40_0_x1.mp3"} + self.SoundNames["kv70_x1_0"] = {"subway_trains/ezh/kv40/kv40_x1_0.mp3"} + self.SoundNames["kv70_x1_x2"] = {"subway_trains/ezh/kv40/kv40_x1_x2.mp3"} + self.SoundNames["kv70_x2_x1"] = {"subway_trains/ezh/kv40/kv40_x2_x1.mp3"} + self.SoundNames["kv70_x2_x3"] = {"subway_trains/ezh/kv40/kv40_x2_x3.mp3"} + self.SoundNames["kv70_x3_x2"] = {"subway_trains/ezh/kv40/kv40_x3_x2.mp3"}--]] + + self.SoundNames["kv70_0_t1"] = "subway_trains/717/kv70_3/0-t1.mp3" + self.SoundNames["kv70_t1_0_fix"]= "subway_trains/717/kv70_3/t1-0.mp3" + self.SoundNames["kv70_t1_0"] = "subway_trains/717/kv70_3/t1-0.mp3" + self.SoundNames["kv70_t1_t1a"] = "subway_trains/717/kv70_3/t1-t1a.mp3" + self.SoundNames["kv70_t1a_t1"] = "subway_trains/717/kv70_3/t1a-t1.mp3" + self.SoundNames["kv70_t1a_t2"] = "subway_trains/717/kv70_3/t1a-t2.mp3" + self.SoundNames["kv70_t2_t1a"] = "subway_trains/717/kv70_3/t2-t1a.mp3" + self.SoundNames["kv70_0_x1"] = "subway_trains/717/kv70_3/0-x1.mp3" + self.SoundNames["kv70_x1_0"] = "subway_trains/717/kv70_3/x1-0.mp3" + self.SoundNames["kv70_x1_x2"] = "subway_trains/717/kv70_3/x1-x2.mp3" + self.SoundNames["kv70_x2_x1"] = "subway_trains/717/kv70_3/x2-x1.mp3" + self.SoundNames["kv70_x2_x3"] = "subway_trains/717/kv70_3/x2-x3.mp3" + self.SoundNames["kv70_x3_x2"] = "subway_trains/717/kv70_3/x3-x2.mp3" + self.SoundPositions["kv70_fix_on"] = {110,1e9,Vector(435.848,16.1,-19.779+4.75),0.4} + self.SoundPositions["kv70_fix_off"] = self.SoundPositions["kv70_fix_on"] + self.SoundPositions["kv70_0_t1"] = {110,1e9,Vector(456.5,-45,-8),0.7} + self.SoundPositions["kv70_t1_0_fix"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_t1_0"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_t1_t1a"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_t1a_t1"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_t1a_t2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_t2_t1a"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_0_x1"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_x1_0"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_x1_x2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_x2_x1"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_x2_x3"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_x3_x2"] = self.SoundPositions["kv70_0_t1"] + + self.SoundNames["kv70_0_t1_2"] = "subway_trains/717/kv70_4/kv70_0_t1.mp3" + self.SoundNames["kv70_t1_0_2"] = "subway_trains/717/kv70_4/kv70_t1_0.mp3" + self.SoundNames["kv70_t1_t1a_2"] = "subway_trains/717/kv70_4/kv70_t1_t1a.mp3" + self.SoundNames["kv70_t1a_t1_2"] = "subway_trains/717/kv70_4/kv70_t1a_t1.mp3" + self.SoundNames["kv70_t1a_t2_2"] = "subway_trains/717/kv70_4/kv70_t1a_t2.mp3" + self.SoundNames["kv70_t2_t1a_2"] = "subway_trains/717/kv70_4/kv70_t2_t1a.mp3" + self.SoundNames["kv70_0_x1_2"] = "subway_trains/717/kv70_4/kv70_0_x1.mp3" + self.SoundNames["kv70_x1_0_2"] = "subway_trains/717/kv70_4/kv70_x1_0.mp3" + self.SoundNames["kv70_x1_x2_2"] = "subway_trains/717/kv70_4/kv70_x1_x2.mp3" + self.SoundNames["kv70_x2_x1_2"] = "subway_trains/717/kv70_4/kv70_x2_x1.mp3" + self.SoundNames["kv70_x2_x3_2"] = "subway_trains/717/kv70_4/kv70_x2_x3.mp3" + self.SoundNames["kv70_x3_x2_2"] = "subway_trains/717/kv70_4/kv70_x3_x2.mp3" + self.SoundPositions["kv70_0_t1_2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_t1_0_fix_2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_t1_0_2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_t1_t1a_2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_t1a_t1_2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_t1a_t2_2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_t2_t1a_2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_0_x1_2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_x1_0_2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_x1_x2_2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_x2_x1_2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_x2_x3_2"] = self.SoundPositions["kv70_0_t1"] + self.SoundPositions["kv70_x3_x2_2"] = self.SoundPositions["kv70_0_t1"] + + self.SoundNames["ring"] = {loop=0.0,"subway_trains/717/ring/ring_start.wav","subway_trains/717/ring/ring_loop.wav","subway_trains/717/ring/ring_end.wav"} + self.SoundPositions["ring"] = {60,1e9,Vector(443.8,0,-3.2),0.43} + + self.SoundNames["ring2"] = {loop=0.25,"subway_trains/717/ring/ringc_start.wav","subway_trains/717/ring/ringc_loop.wav","subway_trains/717/ring/ringc_end.mp3"} + self.SoundPositions["ring2"] = self.SoundPositions["ring"] + self.SoundNames["ring3"] = {loop=0.1,"subway_trains/717/ring/ringch_start.wav","subway_trains/717/ring/ringch_loop.wav","subway_trains/717/ring/ringch_end.wav"} + self.SoundPositions["ring3"] = self.SoundPositions["ring"] + self.SoundNames["ring4"] = {loop=true,"subway_trains/717/ring/son13s.wav"} + self.SoundPositions["ring4"] = {60,1e9,Vector(443.8,0,-3.2),0.3} + self.SoundNames["ring5"] = {loop=true,"subway_trains/717/ring/son17.wav"} + self.SoundPositions["ring5"] = self.SoundPositions["ring4"] + self.SoundNames["ring6"] = {loop=0.0,"subway_trains/717/ring/ring2_loop.wav","subway_trains/717/ring/ring2_loop.wav","subway_trains/717/ring/ring2_end.wav"} + self.SoundPositions["ring6"] = {60,1e9,Vector(443.8,0,-3.2),0.5} + + 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(459,6,10),0.35} + + 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"] = {60,1e9,Vector(420,-49 ,61),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["otsek_door_open"] = {"subway_trains/720/door/door_torec_open.mp3","subway_trains/720/door/door_torec_open2.mp3"} + self.SoundNames["otsek_door_close"] = {"subway_trains/720/door/door_torec_close.mp3","subway_trains/720/door/door_torec_close2.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/igla_start.mp3" + self.SoundNames["igla_start2"] = "subway_trains/common/other/igla/igla_start2.mp3" + self.SoundNames["igla_alarm1"] = "subway_trains/common/other/igla/igla_alarm1.mp3" + self.SoundNames["igla_alarm2"] = "subway_trains/common/other/igla/igla_alarm2.mp3" + self.SoundNames["igla_alarm3"] = "subway_trains/common/other/igla/igla_alarm3.mp3" + self.SoundPositions["igla_on"] = {50,1e9,Vector(458.50,-33,34),0.15} + self.SoundPositions["igla_off"] = {50,1e9,Vector(458.50,-33,34),0.15} + self.SoundPositions["igla_start1"] = {50,1e9,Vector(458.50,-33,34),0.33} + self.SoundPositions["igla_start2"] = {50,1e9,Vector(458.50,-33,34),0.15} + self.SoundPositions["igla_alarm1"] = {50,1e9,Vector(458.50,-33,34),0.33} + self.SoundPositions["igla_alarm2"] = {50,1e9,Vector(458.50,-33,34),0.33} + self.SoundPositions["igla_alarm3"] = {50,1e9,Vector(458.50,-33,34),0.33} + + self.SoundNames["upps"] = {"subway_trains/common/other/upps/upps1.mp3","subway_trains/common/other/upps/upps2.mp3"} + self.SoundPositions["upps"] = {60,1e9,Vector(443,-64,4),0.33} + + 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["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(450,0,-55),1} + + --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"] = {300,1e9,Vector(-420,45,-30),1} + self.SoundPositions["vdol_off"] = {300,1e9,Vector(-420,45,-30),0.4} + 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(-420,45,-30),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"] = {60,1e9,Vector(-420,45,-30),1} + self.SoundPositions["vdz_off"] = {60,1e9,Vector(-420,45,-30),0.4} + + 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} + 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_buzz"..k] = {loop=true,"subway_announcers/asnp/bpsn_ann.wav"} + self.SoundPositions["announcer_buzz"..k] = {v[2] or 600,1e9,v[1],v[3]/6} + self.SoundNames["announcer_buzz_o"..k] = {loop=true,"subway_announcers/upo/noiseT2.wav"} + --self.SoundNames["announcer_buzz_o"..k] = {loop=true,"subway_announcers/riu/bpsn_ann.wav"} + self.SoundPositions["announcer_buzz_o"..k] = {v[2] or 600,1e9,v[1],v[3]/6} + end + + for _,v in pairs(ARSRelays) do + self.SoundNames[v.."_on"] = "subway_trains/common/relays/ars_relays_on1.mp3" + self.SoundNames[v.."_off"] = "subway_trains/common/relays/ars_relays_off1.mp3" + self.SoundPositions[v.."_on"] = {10,1e9,Vector(385,-32, 10),0.03} + self.SoundPositions[v.."_off"] = {10,1e9,Vector(385,-32, 10),0.03} + end + self:SetRelays() +end +ENT.PR14XRelaysOrder = {"r1_5_on","r1_5_off","rp8_on","rp8_off","ro_on","ro_off","rpb_on","rpb_off","k6_on","k6_off","rvt_on","rvt_off","kd_on","kd_off","k25_on","k25_off",} +ENT.PR14XRelays = { + --orig 1 + r1_5_on = { + --{"kpd110e_on2", 1}, + --^ SPB ONLY ^ + {"kpd110e_on4", 0.8}, + {"kpd110e_on5", 0.8}, + {"kpd110e_on6", 0.8}, + --v MSK ONLY v + {"kpd110e_on1", 1}, + {"kpd110e_on3", 0.7}, + {"kpd110e_on7", 0.8}, + }, + --orig 0.7 + r1_5_off = { + --{"kpd110e_off1",0.9}, + --{"kpd110e_off2",1}, + --^ SPB ONLY ^ + --v MSK ONLY v + {"kpd110e_off5", 0.9}, + {"kpd110e_off6", 0.8}, + }, + --orig 1 + rvt_on = { + {"rev811t_on2", 1}, + {"rev811t_on3", 1}, + {"rev811t_on4", 1}, + {"rev811t_on5", 0.6}, + }, + --orig 1 + rp8_on = { + {"rev811t_on1", 1}, + {"rev811t_on2", 1}, + {"rev811t_on3", 1}, + {"rev811t_on4", 1}, + {"rev811t_on5", 0.6}, + }, + --orig 0.3 + rp8_off = { + {"rev811t_off1",0.3}, + {"rev811t_off2",0.2}, + {"rev811t_off4",0.3}, + }, + ro_on = { + --^ SPB ONLY ^ + {"kpd110e_on4",0.8}, + {"kpd110e_on5",0.8}, + {"kpd110e_on6",0.8}, + {"kpd110e_on1",1}, + {"kpd110e_on3",0.7}, + {"kpd110e_on7",0.8}, + --v MSK ONLY v + }, + ro_off = { + --^ SPB ONLY ^ + {"kpd110e_off1",0.9}, + {"kpd110e_off2",1}, + {"kpd110e_off5",0.9}, + {"kpd110e_off6",0.8}, + --v MSK ONLY v + }, + --1 + rpb_on = {{"rev813t_on1",1},{"rev813t_on2",1}}, + --0.7 + rpb_off = {{"rev813t_off1",0.7}}, + --1 + k6_on = {{"tkpm121_on1",1},{"tkpm121_on2",1}}, + --1 + k6_off = {{"tkpm121_off1",1},{"tkpm121_off2",1}}, +} +ENT.PR14XRelays.rvt_off = ENT.PR14XRelays.rp8_off +ENT.PR14XRelays.kd_on = ENT.PR14XRelays.rp8_on +ENT.PR14XRelays.kd_off = ENT.PR14XRelays.rp8_off +ENT.PR14XRelays.k25_on = ENT.PR14XRelays.ro_on +ENT.PR14XRelays.k25_off = ENT.PR14XRelays.ro_off + +function ENT:SetRelays() + local relayConf = self:GetNW2String("RelaysConfig") + if #relayConf<#self.PR14XRelaysOrder then return end + for i,k in ipairs(self.PR14XRelaysOrder) do + local id = tonumber(relayConf[i]) + local v = self.PR14XRelays[k][id] + self.SoundNames[k] = Format("subway_trains/717/relays/%s.mp3",v[1]) + self.SoundPositions[k][4] = v[2] or 1 + end +end +function ENT:InitializeSystems() + -- ЭлектроÑиÑтема 81-710 + self:LoadSystem("Electric","81_717_Electric") + -- Токоприёмник + self:LoadSystem("TR","TR_3B") + -- ЭлектротÑговые двигатели + self:LoadSystem("Engines","DK_117DM") + + -- РезиÑторы Ð´Ð»Ñ Ñ€ÐµÐ¾Ñтата/пуÑковых Ñопротивлений + self:LoadSystem("KF_47A","KF_47A1") + -- РезиÑторы Ð´Ð»Ñ Ð¾ÑÐ»Ð°Ð±Ð»ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð±ÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ + self:LoadSystem("KF_50A") + -- Ящик Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñ…Ñ€Ð°Ð½Ð¸Ñ‚ÐµÐ»Ñми + self:LoadSystem("YAP_57") + + -- РезиÑторы Ð´Ð»Ñ Ñ†ÐµÐ¿ÐµÐ¹ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + --self:LoadSystem("YAS_44V") + self:LoadSystem("Reverser","PR_722D") + -- РеоÑтатный контроллер Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑƒÑковыми ÑÐ¾Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð»ÐµÐ½Ð¸Ñ + self:LoadSystem("RheostatController","EKG_17B") + -- Групповой переключатель положений + self:LoadSystem("PositionSwitch","PKG_761") + -- Кулачковый контроллер + self:LoadSystem("KV","KV_70") + -- Контроллер резервного ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + self:LoadSystem("KRU") + + + -- Ящики Ñ Ñ€ÐµÐ»Ðµ и контакторами + self:LoadSystem("BV","BV_630") + self:LoadSystem("LK_755A") + self:LoadSystem("YAR_13B") + self:LoadSystem("YAR_27",nil,"MSK") + self:LoadSystem("YAK_36") + self:LoadSystem("YAK_37E") + self:LoadSystem("YAS_44V") + self:LoadSystem("YARD_2") + self:LoadSystem("PR_14X_Panels") + + -- ПневмоÑиÑтема 81-710 + self:LoadSystem("Pneumatic","81_717_Pneumatic") + -- Панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ 81-710 + self:LoadSystem("Panel","81_717_Panel") + -- Everything else + self:LoadSystem("Battery") + self:LoadSystem("PowerSupply","BPSN") + --self:LoadSystem("DURA") + self:LoadSystem("ALS_ARS","ALS_ARS_D") + + self:LoadSystem("Horn") + + self:LoadSystem("IGLA_CBKI","IGLA_CBKI1") + self:LoadSystem("IGLA_PCBK") + + self:LoadSystem("UPPS") + + self:LoadSystem("BZOS","81_718_BZOS") + + self:LoadSystem("Announcer","81_71_Announcer", "AnnouncementsASNP") + self:LoadSystem("ASNP","81_71_ASNP") + self:LoadSystem("ASNP_VV","81_71_ASNP_VV") + + self:LoadSystem("RouteNumber","81_71_RouteNumber",2) + self:LoadSystem("LastStation","81_71_LastStation","717","destination") + + --self:LoadSystem("Telemetry",nil,"",{"Electric","Engines","RheostatController","PositionSwitch"}) +end + +function ENT:PostInitializeSystems() + if CLIENT then return end + self.Electric:TriggerInput("NoRT2",0) + self.Electric:TriggerInput("HaveRO",1) + self.Electric:TriggerInput("GreenRPRKR",0) + self.Electric:TriggerInput("Type",self.Electric.MVM) + self.Electric:TriggerInput("X2PS",0) + self.Electric:TriggerInput("HaveVentilation",1) + self.BIS200:TriggerInput("SpeedDec",1) + self.KRU:TriggerInput("LockX3",1) +end +--------------------------------------------------- +-- Defined train information +-- Types of wagon(for wagon limit system): +-- 0 = Head or intherim +-- 1 = Only head +-- 2 = Only intherim +--------------------------------------------------- +ENT.SubwayTrain = { + Type = "81", + Name = "81-717.5m", + WagType = 1, + Manufacturer = "MVM", + ALS = { + HaveAutostop = true, + TwoToSix = true, + RSAs325Hz = true, + Aproove0As325Hz = false, + }, + Announcer = { + }, + EKKType = 717, +} +-- LVZ,Dot5,NewSeats,NewBL,PassTexture,MVM +ENT.NumberRanges = { + --717 МВМ + { + true, + {0001,0003,0002,0004,0007,0008,0009,0010,0011,0012,0013,0014,0015,0015,0016,0017,0018,0019,0020,0021,0022,0023,0044,0045,0046,0047,0048,0049,0050,0051,0052,0053,0054,0055,0056,0066,0068,0069,0070,0071,0072,0073,0078,0080,0084,0085,0086,0123,0124,0125,0126,0127,0128,0130,0131,0132,0133,0134,0135,0136,0137,0138,0139,0140,0141,0142,0143,0144,0145,0146,0147,0148,0149,0150,0151,0152,0153}, + {false,false,true ,true,{"Def_717MSKWhite","Def_717MSKWood4"},true} + }, + { + true, + {9221,9239,9240,9247,9249,9278,9281,9284,9286,9290,9291,9339,9342,9347,9193,9194,9196,9234,9235,9241,9242,9243,9244,9269,9274,9277,9280,9282,9283,9287,9288,9293,9311,9312,9314,9338}, + {false,false,false,true,{"Def_717MSKBlue","Def_717MSKWhite",--[[ "Def_717MSKWood",--]] "Def_717MSKWood2"},function(id,tex) return tex=="Def_717MSKWhite" or math.random()>0.5 end} + }, + --717 ЛВЗ + { + true, + {8459,8460,8462,8465,8502,8508,8509,8511,8512,8513,8514,8518,8522,8523,8526,8528,8529,8532,8533,8534,8538,8548,8549,8550,8554,8555,8557,8560,8596,8597,8516,8517,8519,8520,8521,8524,8525,8530,8531,8536,8547,8551,8552,8553,8559,8561,8586,8587,8611,8612,8613,8614,8615,8616,8617,8618,8619,8620,8621,8705,8706,8707,8708,8709,8710,8711,8713,8714,8716,8717,8719,8720,8721,8722,8723,8725,8726,8727,8728,8730,8731,8732,8733,8734,8745,8746,8753,8760,8791,8792,8802,8803,8816,8828,8829,8831}, + { true,false,false,false,{"Def_717MSKWhite"},true} + }, + --717.5 МВМ + { + true, + {0154,0155,0156,0157,0158,0159,0160,0161,0162,0163,0164,0165,0166,0167,0168,0169,0170,0172,0174,0175,0177}, + {false, true,false,true,{"Def_717MSKWhite","Def_717MSKWood4"},true,true} + }, + { + true, + {0218,0219,0220,0221,0222,0223,0224,0225,0226,0227,0228,0229,0236,0241,0242,0243,0244,0249,0254,0255,0263,0264,0265,0266,0267,0284,0285,0286,0287,0290,0292,0293,0294,0295,0297,0298,0299,0300,0301,0308,0315,0320,0333,0334}, + {false, true,true ,true,{"Def_717MSKWhite","Def_717MSKWood4"},true,true} + }, + --717.5 ЛВЗ + { + true, + {8876,8877,8881,8882,8883,8884,8885,8886,8891,8892,8893,8894,8931,8932,8933,8934,8935,8936,8937,8938,8939,8940,8941,8941,8942,8943,8944,8945,8946,8947,8965,8966,8967,8968,8969,8970,8983,8984,8985,8986,8987,8988,8989,8995,8996,8997,8998,8999}, + {true , true,false,true,{"Def_717MSKWhite","Def_717MSKWood4"},true,true} + }, + { + true, + {10000,10001,10002,10008,10009,10010,10011,10012,10013,10035,10038,10039,10040,10057,10058,10059,10060,10077,10078,10079,10087,10088,10089,10090,10091,10092,10093,10094,10099,10100,10101,10102,10103,10106,10107,10108,10109,10113,10114,10115,10116,10118,10119,10120,10121,10122,10123,10131,10141,10142,10143,10144,10145,10146,10149,10150,10151,10152,10153,10154,10155,10156,10157,10158,10159,10160,10161,10164,10165,10166,10167,10168,10169,10170,10190,10191,10197,10199,10206,10207,10034}, + {true , true,true ,true,{"Def_717MSKWhite","Def_717MSKWood4"},function(id) return id<=10010 end,true} + }, +} + +ENT.Spawner = { + model = { + "models/metrostroi_train/81-717/81-717_mvm.mdl", + "models/metrostroi_train/81-717/interior_mvm.mdl", + "models/metrostroi_train/81-717/717_body_additional.mdl", + "models/metrostroi_train/81-717/brake_valves/334.mdl", + "models/metrostroi_train/81-717/lamps_type1.mdl", + "models/metrostroi_train/81-717/couch_old.mdl", + "models/metrostroi_train/81-717/couch_cap_l.mdl", + "models/metrostroi_train/81-717/handlers_old.mdl", + "models/metrostroi_train/81-717/mask_222.mdl", + "models/metrostroi_train/81-717/couch_cap_r.mdl", + "models/metrostroi_train/81-717/cabine_mvm.mdl", + "models/metrostroi_train/81-717/pult/body_classic.mdl", + "models/metrostroi_train/81-717/pult/pult_mvm_classic.mdl", + "models/metrostroi_train/81-717/pult/ars_old.mdl", + }, + interim = "gmod_subway_81-714_mvm", + --Metrostroi.Skins.GetTable("Texture","Spawner.Texture",false,"train"), + --Metrostroi.Skins.GetTable("PassTexture","Spawner.PassTexture",false,"pass"), + --Metrostroi.Skins.GetTable("CabTexture","Spawner.CabTexture",false,"cab"), + {"Announcer","Spawner.717.Announcer","List",function() + local Announcer = {} + for k,v in pairs(Metrostroi.AnnouncementsASNP or {}) do if not v.riu then Announcer[k] = v.name or k end end + return Announcer + end}, + {"Scheme","Spawner.717.Schemes","List",function() + local Schemes = {} + for k,v in pairs(Metrostroi.Skins["717_new_schemes"] or {}) do Schemes[k] = v.name or k end + return Schemes + end}, + {"SpawnMode","Spawner.717.SpawnMode","List",{"Spawner.717.SpawnMode.Full","Spawner.717.SpawnMode.Deadlock","Spawner.717.SpawnMode.NightDeadlock","Spawner.717.SpawnMode.Depot"}, nil,function(ent,val,rot,i,wagnum,rclk) + if rclk then return end + if ent._SpawnerStarted~=val then + ent.VB:TriggerInput("Set",val<=2 and 1 or 0) + ent.ParkingBrake:TriggerInput("Set",val==3 and 1 or 0) + if ent.AR63 then + local first = i==1 or _LastSpawner~=CurTime() + ent.A53:TriggerInput("Set",val<=2 and 1 or 0) + ent.A49:TriggerInput("Set",val<=2 and 1 or 0) + ent.AR63:TriggerInput("Set",val<=2 and 1 or 0) + ent.R_UNch:TriggerInput("Set",val==1 and 1 or 0) + ent.R_Radio:TriggerInput("Set",val==1 and 1 or 0) + ent.L_4:TriggerInput("Set",val==1 and 1 or 0) + ent.BPSNon:TriggerInput("Set",(val==1 and first) and 1 or 0) + ent.VMK:TriggerInput("Set",(val==1 and first) and 1 or 0) + ent.ARS:TriggerInput("Set",(ent.Plombs.RC1 and val==1 and first) and 1 or 0) + ent.ALS:TriggerInput("Set",val==1 and 1 or 0) + ent.L_1:TriggerInput("Set",val==1 and 1 or 0) + ent.L_3:TriggerInput("Set",vall==1 and 1 or 0) + ent.L_4:TriggerInput("Set",val==1 and 1 or 0) + ent.EPK:TriggerInput("Set",(ent.Plombs.RC1 and val==1) and 1 or 0) + _LastSpawner=CurTime() + ent.CabinDoor = val==4 and first + ent.PassengerDoor = val==4 + ent.RearDoor = val==4 + else + ent.FrontDoor = val==4 + ent.RearDoor = val==4 + end + if val == 1 then + timer.Simple(1,function() + if not IsValid(ent) then return end + ent.BV:TriggerInput("Enable",1) + end) + end + ent.Pneumatic.RightDoorState = val==4 and {1,1,1,1} or {0,0,0,0} + ent.Pneumatic.DoorRight = val==4 + ent.Pneumatic.LeftDoorState = val==4 and {1,1,1,1} or {0,0,0,0} + ent.Pneumatic.DoorLeft = val==4 + ent.GV:TriggerInput("Set",val<4 and 1 or 0) + ent._SpawnerStarted = val + end + ent.Pneumatic.TrainLinePressure = val==3 and math.random()*4 or val==2 and 4.5+math.random()*3 or 7.6+math.random()*0.6 + if val==4 then ent.Pneumatic.BrakeLinePressure = 5.2 end + end}, + --{"Lighter","Spawner.717.Lighter","Boolean"}, + --{"ARSType","Spawner.717.ARS","List",{"Spawner.717.ARS.1","Spawner.717.ARS.2","Spawner.717.ARS.3"--[[,"Spawner.717.ARS.4"]]}}, + --{"Cran","Spawner.717.CranType","List",{"334","013"}}, + --{"MaskType","Spawner.717.MaskType","List",{"2-2","2-2-2","Spawner.717.MaskType.1","Spawner.717.MaskType.2","1-1","Spawner.717.MaskType.3"}}, + --{"LED","Spawner.717.LED","Boolean"}, + --{"BPSNType","Spawner.717.BPSNType","List",{"Spawner.717.BPSNType.1","Spawner.717.BPSNType.2","Spawner.717.BPSNType.3","Spawner.717.BPSNType.4","Spawner.717.BPSNType.5","Spawner.717.BPSNType.6","Spawner.717.BPSNType.7","Spawner.717.BPSNType.8","Spawner.717.BPSNType.9","Spawner.717.BPSNType.10","Spawner.717.BPSNType.11","Spawner.717.BPSNType.12","Spawner.717.BPSNType.13"}}, + --{"NewKV","Spawner.717.NewKV","Boolean"}, + --{"HornType","Spawner.717.HornType","Boolean"}, + --{"RingType","Spawner.717.RingType","List",{"Spawner.717.RingType.1","Spawner.717.RingType.2","Spawner.717.RingType.3","Spawner.717.RingType.4","Spawner.717.RingType.5","Spawner.717.RingType.6","Spawner.717.RingType.7","Spawner.717.RingType.8"}}, + --[[ {"NM","Spawner.717.NM","Slider",1,0,9.0,8.2,function(ent,val) ent.Pneumatic.TrainLinePressure = val end}, + {"Battery","Spawner.717.Battery","Boolean",true,function(ent,val) ent.VB:TriggerInput("Set",val) end}, + {"Switches","Spawner.717.Switches","Boolean",true,function(ent,val) + for k,v in pairs(ent.Panel.AVMap) do + if not ent[v] then continue end + ent[v]:TriggerInput("Set",val and 1 or 0) + end + end,function(CB,VGUI) + VGUI.SwitchesR:SetDisabled(not CB:GetChecked()) + if not CB:GetChecked() then + VGUI.SwitchesR:SetValue(false) + end + end}, + {"SwitchesR","Spawner.717.SwitchesR","Boolean",false,function(ent,val) + if not val then return end + for k,v in pairs(ent.Panel.AVMap) do + if not ent[v] then continue end + ent[v]:TriggerInput("Set",math.random() > 0.2 and 1 or 0) + end + end}, + {"DoorsL","Spawner.717.DoorsL","Boolean",false, function(ent,val,rot) + if rot then + ent.Pneumatic.RightDoorState = val and {1,1,1,1} or {0,0,0,0} + else + ent.Pneumatic.LeftDoorState = val and {1,1,1,1} or {0,0,0,0} + end + end}, + {"DoorsR","Spawner.717.DoorsR","Boolean",false, function(ent,val,rot) + if rot then + ent.Pneumatic.LeftDoorState = val and {1,1,1,1} or {0,0,0,0} + else + ent.Pneumatic.RightDoorState = val and {1,1,1,1} or {0,0,0,0} + end + end}, + {"GV","Spawner.717.GV","Boolean",true,function(ent,val) ent.GV:TriggerInput("Set",val) end}, + {"PB","Spawner.717.PB","Boolean",false,function(ent,val) ent.ParkingBrake:TriggerInput("Set",val) end}, + {"BortLampType","Spawner.717.BortLampType","List",{"Spawner.717.BortLampType.1","Spawner.717.BortLampType.2"}}, + {"MVM","Spawner.717.MVM","Boolean",true}, + {"HandRail","Spawner.717.HandRail","List",{"Spawner.717.Common.Old","Spawner.717.Common.New"}}, + {"SeatType","Spawner.717.SeatType","List",{"Spawner.717.Common.Old","Spawner.717.Common.New"}}, + {"LampType","Spawner.717.LampType","List",{"Spawner.717.Common.Type1","Spawner.717.Common.Type2","Spawner.717.Common.Type3"}}, + {"Breakers","Spawner.717.Breakers","Boolean"}, + {"Adverts","Spawner.717.Adverts","List",{"Spawner.717.Common.Type1","Spawner.717.Common.Type2","Spawner.717.Common.Type3","Spawner.717.Adverts.4"}},--]] +} diff --git a/lua/entities/gmod_subway_81-717_mvm_custom.lua b/lua/entities/gmod_subway_81-717_mvm_custom.lua new file mode 100644 index 0000000..5106354 --- /dev/null +++ b/lua/entities/gmod_subway_81-717_mvm_custom.lua @@ -0,0 +1,111 @@ +AddCSLuaFile() +--Entity only for spawner! +function ENT:Initialize() self:Remove() end + +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" +ENT.PrintName = "81-717 MVM Custom" +ENT.SkinsType = "81-717_msk" + +ENT.Spawnable = false +ENT.AdminSpawnable = false + +ENT.SubwayTrain = { + Type = "81", + Name = "81-717.5m", + WagType = 1, + Manufacturer = "MVM", +} + +ENT.Spawner = { + model = { + "models/metrostroi_train/81-717/81-717_mvm.mdl", + "models/metrostroi_train/81-717/interior_mvm.mdl", + "models/metrostroi_train/81-717/717_body_additional.mdl", + "models/metrostroi_train/81-717/brake_valves/334.mdl", + "models/metrostroi_train/81-717/lamps_type1.mdl", + "models/metrostroi_train/81-717/couch_old.mdl", + "models/metrostroi_train/81-717/couch_cap_l.mdl", + "models/metrostroi_train/81-717/handlers_old.mdl", + "models/metrostroi_train/81-717/mask_222.mdl", + "models/metrostroi_train/81-717/couch_cap_r.mdl", + "models/metrostroi_train/81-717/cabine_mvm.mdl", + "models/metrostroi_train/81-717/pult/body_classic.mdl", + "models/metrostroi_train/81-717/pult/pult_mvm_classic.mdl", + "models/metrostroi_train/81-717/pult/ars_old.mdl", + }, + head = "gmod_subway_81-717_mvm", + interim = "gmod_subway_81-714_mvm", + func = function(train,i,max,LastRot) + train.CustomSettings = true + local typ = train:GetNW2Int("Type") + local body = train:GetNW2Int("BodyType") + + if typ==1 then + train.NumberRangesID = body>1 and 3 or (math.random()>0.5 and 2 or 1) + else + train.NumberRangesID = body>1 and (math.random()>0.5 and 6 or 7) or (math.random()>0.5 and 4 or 5) + end + end, + {"Type","Spawner.717.Type","List",{"81-717","81-717.5"}}, + {"BodyType","Spawner.717.BodyType","List",{"Spawner.717.Type.MVM","Spawner.717.Type.LVZ"}}, + {"Scheme","Spawner.717.Schemes","List",function() + local Schemes = {} + for k,v in pairs(Metrostroi.Skins["717_new_schemes"] or {}) do Schemes[k] = v.name or k end + return Schemes + end}, + {}, + {"MaskType","Spawner.717.MaskType","List",{"2-2","2-2 (M)","2-2 Glass","2-2 Glass (M)","2-2-2","2-2-2 (M)","2-2-2 Glass","2-2-2 Glass (M)","1-4-1","1-4-1 (M)"}}, + {"Cran","Spawner.717.CranType","List",{"334","013"}}, + {"Announcer","Spawner.717.Announcer","List",function() + local Announcer = {} + for k,v in pairs(Metrostroi.AnnouncementsASNP or {}) do Announcer[k] = v.name or k end + return Announcer + end}, + {"LampType","Spawner.717.LampType","List",{"Spawner.717.Common.Random","Spawner.717.Lamp.LPV02","Spawner.717.Lamp.LLV01"}}, + {"SeatType","Spawner.717.SeatType","List",{"Spawner.717.Common.Random","Spawner.717.Common.Old","Spawner.717.Common.New"}}, + {"ARSType","Spawner.717.ARS","List",{"Spawner.717.Common.Random","Spawner.717.ARS.1","Spawner.717.ARS.2","Spawner.717.ARS.3","Spawner.717.ARS.4","Spawner.717.ARS.5"}}, + Metrostroi.Skins.GetTable("Texture","Spawner.Texture",false,"train"), + Metrostroi.Skins.GetTable("PassTexture","Spawner.PassTexture",false,"pass"), + Metrostroi.Skins.GetTable("CabTexture","Spawner.CabTexture",false,"cab"), + --{}, + {"RingType","Spawner.717.RingType","List",{"Spawner.717.Common.Random","Spawner.717.RingType.1","Spawner.717.RingType.2","Spawner.717.RingType.3","Spawner.717.RingType.4","Spawner.717.RingType.5","Spawner.717.RingType.6","Spawner.717.RingType.7","Spawner.717.RingType.8"}}, + {"BPSNType","Spawner.717.BPSNType","List",{"Spawner.717.Common.Random","Spawner.717.BPSNType.1","Spawner.717.BPSNType.2","Spawner.717.BPSNType.3","Spawner.717.BPSNType.4","Spawner.717.BPSNType.5","Spawner.717.BPSNType.6","Spawner.717.BPSNType.7","Spawner.717.BPSNType.8","Spawner.717.BPSNType.9","Spawner.717.BPSNType.10","Spawner.717.BPSNType.11","Spawner.717.BPSNType.12","Spawner.717.BPSNType.13"}}, + {}, + {"SpawnMode","Spawner.717.SpawnMode","List",{"Spawner.717.SpawnMode.Full","Spawner.717.SpawnMode.Deadlock","Spawner.717.SpawnMode.NightDeadlock","Spawner.717.SpawnMode.Depot"}, nil,function(ent,val,rot,i,wagnum,rclk) + if rclk then return end + if ent._SpawnerStarted~=val then + ent.VB:TriggerInput("Set",val<=2 and 1 or 0) + ent.ParkingBrake:TriggerInput("Set",val==3 and 1 or 0) + if ent.AR63 then + local first = i==1 or _LastSpawner~=CurTime() + ent.A53:TriggerInput("Set",val<=2 and 1 or 0) + ent.A49:TriggerInput("Set",val<=2 and 1 or 0) + ent.AR63:TriggerInput("Set",val<=2 and 1 or 0) + ent.R_UNch:TriggerInput("Set",val==1 and 1 or 0) + ent.R_Radio:TriggerInput("Set",val==1 and 1 or 0) + ent.L_4:TriggerInput("Set",val==1 and 1 or 0) + ent.BPSNon:TriggerInput("Set",(val==1 and first) and 1 or 0) + ent.VMK:TriggerInput("Set",(val==1 and first) and 1 or 0) + ent.ARS:TriggerInput("Set",(ent.Plombs.RC1 and val==1 and first) and 1 or 0) + ent.ALS:TriggerInput("Set",val==1 and 1 or 0) + ent.L_1:TriggerInput("Set",val==1 and 1 or 0) + ent.L_3:TriggerInput("Set",vall==1 and 1 or 0) + ent.L_4:TriggerInput("Set",val==1 and 1 or 0) + ent.EPK:TriggerInput("Set",(ent.Plombs.RC1 and val==1) and 1 or 0) + _LastSpawner=CurTime() + ent.CabinDoor = val==4 and first + ent.PassengerDoor = val==4 + ent.RearDoor = val==4 + else + ent.FrontDoor = val==4 + ent.RearDoor = val==4 + end + if val == 1 then ent.BV:TriggerInput("Enable",1) end + ent.GV:TriggerInput("Set",val<4 and 1 or 0) + ent._SpawnerStarted = val + end + ent.Pneumatic.TrainLinePressure = val==3 and math.random()*4 or val==2 and 4.5+math.random()*3 or 7.6+math.random()*0.6 + if val==4 then ent.Pneumatic.BrakeLinePressure = 5.2 end + end}, +} diff --git a/lua/entities/gmod_subway_81-718/cl_init.lua b/lua/entities/gmod_subway_81-718/cl_init.lua new file mode 100644 index 0000000..160714d --- /dev/null +++ b/lua/entities/gmod_subway_81-718/cl_init.lua @@ -0,0 +1,2601 @@ +-------------------------------------------------------------------------------- +-- 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.ClientPropsInitialized = false +ENT.ClientProps = {} +ENT.ButtonMap = {} +ENT.AutoAnims = {} +ENT.AutoAnimNames = {} +ENT.ClientSounds = {} + +ENT.ClientProps["schemes"] = { + model = "models/metrostroi_train/81-717/labels/schemes.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, + callback = function(ent) + ent.PassSchemesDone = false + end, +} +ENT.ClientProps["BUP"] = { + model = "models/metrostroi_train/81-718/81-718_dinas11.mdl", + pos = Vector(0,0,0), + ang = Angle(0.000000,0.000000,0.000000), + hide=2, +} +ENT.ClientProps["Cabine"] = { + model = "models/metrostroi_train/81-718/81-718_cabine.mdl", + pos = Vector(0,0,0), + ang = Angle(0.000000,0.000000,0.000000), + hide=3.6, +} +ENT.ClientProps["RedLights"] = { + model = "models/metrostroi_train/81-718/red_light.mdl", + pos = Vector(0,0,0), + ang = Angle(0.000000,0.000000,0.000000), + hide=2, +} +ENT.ClientProps["destination"] = { + model = "models/metrostroi_train/81-718/labels/destination.mdl", + pos = Vector(0,0,-1), + ang = Angle(0,0,0), + hide=2, + callback = function(ent) + ent.LastStation.Reloaded = false + end, +} +ENT.ButtonMap["LastStation"] = { + pos = Vector(462.5,-27.4,-2.7), + ang = Angle(0,90,90), + width = 876, + height = 131, + scale = 0.0625, + buttons = { + {ID = "LastStation-",x=000,y=0,w=438,h=131, tooltip=""}, + {ID = "LastStation+",x=438,y=0,w=438,h=131, tooltip=""}, + } +} +ENT.ClientProps["salon"] = { + model = "models/metrostroi_train/81-718/interior.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["route"] = { + model = "models/metrostroi_train/81-718/marshrut_number_body.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["route1"] = { + model = "models/metrostroi_train/81-718/lamps/segment_spb.mdl", + pos = Vector(463.15,35.8,38.2), + ang = Angle(90,16,0), + color = Color(241,10,70), + callback = function(ent) + ent.RouteNumber.Reloaded = false + end, + hide=2, +} +ENT.ClientProps["route2"] = { + model = "models/metrostroi_train/81-718/lamps/segment_spb.mdl", + pos = Vector(461.85,40.3,38.2), + ang = Angle(90,16,0), + color = Color(241,10,70), + callback = function(ent) + ent.RouteNumber.Reloaded = false + end, + hide=2, +} +ENT.ButtonMap["Route"] = { + pos = Vector(457.1,41.6,47.2), + ang = Angle(0,270+16,90), + width = 153, + height = 180, + scale = 0.0625, + buttons = { + {ID = "RouteNumber1+",x=76.5*0,y=0,w=76.5,h=90,tooltip=""}, + {ID = "RouteNumber2+",x=76.5*1,y=0,w=76.5,h=90,tooltip=""}, + {ID = "RouteNumber1-",x=76.5*0,y=90,w=76.5,h=90,tooltip=""}, + {ID = "RouteNumber2-",x=76.5*1,y=90,w=76.5,h=90,tooltip=""}, + } +} +ENT.ClientProps["route1_s"] = { + model = "models/metrostroi_train/81-717/segments/segment_mvm.mdl", + pos = Vector(458.2,39.7,35.1), + ang = Angle(90,180+16,0), + color = Color(175,250,20), + callback = function(ent) + ent.RouteNumber.Reloaded = false + end, + hideseat=0.2, +} +ENT.ClientProps["route2_s"] = { + model = "models/metrostroi_train/81-717/segments/segment_mvm.mdl", + pos = Vector(458.4,39,35.1), + ang = Angle(90,180+16,0), + color = Color(175,250,20), + callback = function(ent) + ent.RouteNumber.Reloaded = false + end, + hideseat=0.2, +} +ENT.ClientProps["route1_r"] = { + model = "models/metrostroi_train/81-718/lamps/segment_spb.mdl", + pos = Vector(463.15+1-0.2,35.8+2,38.2-3), + ang = Angle(90,180+16,0), + color = Color(120.50,5.00,35.00), + callback = function(ent) + ent.RouteNumber.Reloaded = false + end, + hideseat=0.8, +} +ENT.ClientProps["route2_r"] = { + model = "models/metrostroi_train/81-718/lamps/segment_spb.mdl", + pos = Vector(461.85+1-0.2,40.3+2,38.2-3), + ang = Angle(90,180+16,0), + color = Color(120.50,5.00,35.00), + callback = function(ent) + ent.RouteNumber.Reloaded = false + end, + hideseat=0.8, +} +ENT.ClientProps["seats"] = { + model = "models/metrostroi_train/81-717/couch_old.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["Headlights_1"] = { + model = "models/metrostroi_train/81-718/headlights.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["Headlights_2"] = { + model = "models/metrostroi_train/81-718/headlights2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} + +ENT.ClientProps["couch_cap"] = { + model = "models/metrostroi_train/81-717/couch_cap_l.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, +} + +ENT.ClientProps["door_otsek1"] = { + model = "models/metrostroi_train/81-717/door_otsek1.mdl", + pos = Vector(375.35,-15.324,5.167), + ang = Angle(0,-90,0), + hideseat=1.7, +} +ENT.ClientProps["door_otsek2"] = { + model = "models/metrostroi_train/81-717/door_otsek2.mdl", + pos = Vector(375.35,-59.65,5.167), + ang = Angle(0,-90,0), + hideseat=1.7, +} +ENT.ClientProps["cap_l"] = { + model = "models/metrostroi_train/81-717/couch_cap_r.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, +} + +ENT.ClientProps["train_line"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(460.909851,-27.286127,2.136254), + ang = Angle(-90.000000,-18.529299,0.000000), + hideseat = 0.2, +} +ENT.ClientProps["brake_line"] = { + model = "models/metrostroi_train/Equipment/arrow_tm.mdl", + pos = Vector(460.897827,-27.245167,2.136254), + ang = Angle(-90.000000,-18.529299,0.000000), + hideseat = 0.2, +} + + +ENT.ClientProps["brake_cylinder"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(459.103638,-33.373646,2.136254), + ang = Angle(-90.000000,-18.529299,0.000000), + hideseat = 0.2, +} + + + +ENT.ClientProps["kru_wrench"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = Vector(451+3.1,24+2,-1-8.5), + ang = Angle(180,90+6,180+11), + 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["kr_wrench"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = Vector(444+2.5,24+2,-2.7-8+0.1), + ang = Angle(180,90+6,180+11), + 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["controller"] = { + model = "models/metrostroi_train/81-718/718_kv.mdl", + pos = Vector(443.8+1.5,18,-2-8), + ang = Angle(0,-90,11), + --bscale = Vector(0.4*4,0.6*4,1), + color = Color(150,150,150), + hideseat=0.2, +} + +--var="ZS",vmin=0,vmax=1,min=0,max=1,speed=16,damping=false, +-- Main panel +ENT.ButtonMap["Main"] = { + pos = Vector(454,10.5,-9.9), --446 -- 14 -- -0,5 + ang = Angle(0,-90,11.3), + width = 472, + height = 190, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "SA5Toggle", x=30, y=65, radius=24, tooltip="Закрытие дверей", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=-20, + var="SA5",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 = "SB3Set", x=81, y=32, radius=20, tooltip="КРЗД", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z=-9, vmin=1, vmax=0, + var="SB3",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + { ID = "SA7Toggle",x=85, y=90, radius=20, tooltip="Выбор Ñтороны", model = { + model = "models/metrostroi_train/81-508/em508_switcher.mdl",z=-15, + var="SA7",speed=6,ang=90-90, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + disableoff = "SB1Set",disableon = "SB2Set", + states={"Train.Buttons.Left","Train.Buttons.Right"} + }}, + + {ID = "SB1Set",x=31, y=148, radius=20, tooltip="Двери левые", model = { + model = "models/metrostroi_train/81-502/buttons/button_717_1.mdl",vmin=1,vmax=0,z=-14, + var="SB1",speed=16, + lamp = {model = "models/metrostroi_train/81-717/buttons/lamp_button_2.mdl",anim=true,var="HL3",speed=6,z=2.2, + lcolor=Color(255,130,40),lz = 16,lfov=160,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=.5,scale=0.1,z=6,color=Color(255,130,40)}, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "SB2Set",x=82, y=148, radius=20, tooltip="Двери правые", model = { + model = "models/metrostroi_train/81-502/buttons/button_717_1.mdl",vmin=1,vmax=0,z=-14, + var="SB2",speed=16, + lamp = {model = "models/metrostroi_train/81-717/buttons/lamp_button_2.mdl",anim=true,var="HL4",speed=6,z=2.2, + lcolor=Color(255,130,40),lz = 16,lfov=160,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=.5,scale=0.1,z=6,color=Color(255,130,40)}, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "!SB1K",x=31, y=148, radius=0, model = { + model = "models/metrostroi_train/81-703/cabin_doors_cover.mdl",ang = Angle(0,180,180),z=-2,y=-30,vmin=0.83,vmax=1, + var="SA7",speed=1, + sndvol = 0.10, snd = function(val) return val and "kr_left" or "kr_right" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "!SB2K",x=82, y=148, radius=0, model = { + model = "models/metrostroi_train/81-703/cabin_doors_cover.mdl",ang = Angle(0,180,180),z=-2,y=-30,vmin=0,vmax=0.17, + var="SA7",speed=1, + sndvol = 0.10, snd = function(val) return val and "kr_left" or "kr_right" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + + + {ID = "SA8Toggle",x=136, y=32, radius=20, tooltip="Выключатель аварийного хода", model = { + model = "models/metrostroi_train/81-508/em508_switcher.mdl",z=-15, + var="SA8",speed=16,ang=180-90, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270,x=0,y=28,z=15,var="SA8Pl", ID="SA8Pl",}, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "SB4Set",x=136, y=91, radius=20, tooltip="Проверка", model = { + model = "models/metrostroi_train/81-502/buttons/button_717_1.mdl",vmin=1,vmax=0,z=-12, + var="SB4",speed=16, + lamp = {model = "models/metrostroi_train/81-717/buttons/lamp_button_2.mdl",anim=true,var="HL5",speed=6,z=2.2, + lcolor=Color(255,130,40),lz = 16,lfov=160,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=.5,scale=0.1,z=6,color=Color(255,130,40)}, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + tooltipFunc = function(ent) return ent:GetPackedBool("HL5") and Metrostroi.GetPhrase("Train.Buttons.HL5") end + }}, + {ID = "SB5Set",x=136, y=148, radius=20, tooltip="Передача управлениÑ(звонок)", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",vmin=1,vmax=0,z=-9, + var="SB5",speed=16, + --lamp = {model = "models/metrostroi_train/81-717/buttons/lamp_button_2.mdl",anim=true,var="RZP",speed=9,z=2.2, + --lcolor=Color(255,130,40),lz = 16,lfov=160,lfar=16,lnear=8,lshadows=0}, + --sprite = {bright=0.2,size=.5,scale=0.1,z=6,color=Color(255,130,40)}, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + + + {ID = "SA9Toggle",x=186, y=32, radius=20, tooltip="Откл. ÐВУ", model = { + model = "models/metrostroi_train/81-508/em508_switcher.mdl",z=-15, + var="SA9",speed=16,ang=180-90, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270,x=0,y=28,z=15,var="SA9Pl", ID="SA9Pl",}, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + + + {ID = "SA13Toggle",x=291, y=32, radius=20, tooltip="ÐРС", model = { + model = "models/metrostroi_train/81-508/em508_switcher.mdl",z=-15, + var="SA13",speed=16,ang=180-90, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "SA14Toggle",x=316, y=32, radius=20, tooltip="ÐРС-Р", model = { + model = "models/metrostroi_train/81-508/em508_switcher.mdl",z=-15, + var="SA14",speed=16,ang=180-90, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "SA15Toggle",x=341, y=32, radius=20, tooltip="ÐЛС", model = { + model = "models/metrostroi_train/81-508/em508_switcher.mdl",z=-15, + var="SA15",speed=16,ang=180-90, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + + {ID = "SA2Toggle",x=236, y=32, radius=20, tooltip="Выключатель аварийный дверей", model = { + model = "models/metrostroi_train/81-508/em508_switcher.mdl",z=-15, + var="SA2",speed=16,ang=180-90, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270,x=0,y=28,z=15,var="SA2Pl", ID="SA2Pl",}, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + + {ID = "SB6KToggle",x=186, y=88, radius=20, tooltip="Крышка хода аварийного", model = { + model = "models/metrostroi_train/81-508/em508_switcher.mdl",z=-15, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270,x=3,y=23,z=15,var="SB6Pl", ID="SB6Pl",}, + var="SB6K",speed=5,ang=90-90, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + disable = "SB6Set", + noTooltip = true, + }}, + {ID = "!SB6K",x=233, y=95, radius=0, model = { + model = "models/metrostroi_train/81-703/cabin_doors_cover.mdl",ang = Angle(0,180,180),z=-2,y=-30,vmin=0.17,vmax=0, + var="SB6K",speed=1, + sndvol = 0.10, snd = function(val) return val and "kr_left" or "kr_right" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "SB6Set",x=233, y=95, radius=20, tooltip="Ход аварийный", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",vmin=1,vmax=0,z=-11, + var="SB6",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "SB7KToggle",x=186, y=146, radius=20, tooltip="Крышка хода маневрового", model = { + model = "models/metrostroi_train/81-508/em508_switcher.mdl",z=-15, + var="SB7K",speed=5,ang=90-90, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + disable = "SB7Set", + noTooltip = true, + }}, + {ID = "!SB7K",x=233, y=152, radius=nil, model = { + model = "models/metrostroi_train/81-703/cabin_doors_cover.mdl",ang = Angle(0,180,180),z=-2,y=-30,vmin=0.17,vmax=0, + var="SB7K",speed=1, + sndvol = 0.10, snd = function(val) return val and "kr_left" or "kr_right" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + + {ID = "SB7Set",x=233, y=152, radius=20, tooltip="Ход маневровый", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", vmin=1, vmax=0, z=-11, + var="SB7",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + + {ID = "SB8Set",x=291, y=95, radius=20, tooltip="КБ1", model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl", vmin=1, vmax=0, z=-9, + var="SB8",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "SB10Set",x=291, y=152, radius=20, tooltip="Программа 1", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", vmin=1, vmax=0, z=-10, + var="SB10",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + + {ID = "SB9Set",x=341, y=95, radius=20, tooltip="КБ2", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", vmin=1, vmax=0, z=-9, + var="SB9",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "SB11Set",x=341, y=152, radius=20, tooltip="Программа 2", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", vmin=1, vmax=0, z=-10, + var="SB11",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + + + + {ID = "SA16Toggle",x=397.5, y=30, radius=20, tooltip="КомпреÑÑор", model = { + model = "models/metrostroi_train/81-508/em508_switcher.mdl",z=-15, + var="SA16",speed=16,ang=180-90, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "SB12Set",x=398, y=95, radius=20, tooltip="Включение БВÐ", model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl", vmin=1, vmax=0, z=-9, + var="SB12",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "SB13Set",x=398, y=148, radius=20, tooltip="Отключение БВÐ", model = { + model = "models/metrostroi_train/81-502/buttons/button_717_1.mdl",vmin=1,vmax=0,z=-12, + lamp = {model = "models/metrostroi_train/81-717/buttons/lamp_button_2.mdl",anim=true,var="HL6",getfunc = function(ent) return ent:GetPackedRatio("HL6") end,speed=6,z=2.2, + lcolor=Color(255,130,40),lz = 16,lfov=160,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=.5,scale=0.1,z=6,color=Color(255,130,40)}, + var="SB13",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + tooltipFunc = function(ent) return ent:GetPackedBool("HL6") and Metrostroi.GetPhrase("Train.Buttons.HL6") end + }}, + + {ID = "SB14Set",x=452, y=34, radius=20, tooltip="Резервный мотор-компреÑÑор", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", vmin=1, vmax=0, z=-9, + var="SB14",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "SB15Set",x=452, y=95, radius=20, tooltip="Включение ББЭ", model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl", vmin=1, vmax=0, z=-9, + var="SB15",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "SB16Set",x=452, y=148, radius=20, tooltip="Отключение ББЭ", model = { + model = "models/metrostroi_train/81-502/buttons/button_717_1.mdl",vmin=1,vmax=0,z=-12, + lamp = {model = "models/metrostroi_train/81-717/buttons/lamp_button_2.mdl",anim=true,var="HL7",speed=6,z=2.2, + lcolor=Color(255,130,40),lz = 16,lfov=160,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=.5,scale=0.1,z=6,color=Color(255,130,40)}, + var="SB16",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + tooltipFunc = function(ent) return ent:GetPackedBool("HL7") and Metrostroi.GetPhrase("Train.Buttons.HL7") end + }}, + } +} +ENT.ButtonMap["Left"] = { + pos = Vector(456.9,10,5-7.5), --446 -- 14 -- -0,5 + ang = Angle(0,-90,90-14.971), + width = 85, + height = 110, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "!BatteryVoltage", x=0,y=0,w=85,h=110,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BatteryVoltage"),ent:GetPackedRatio("BatteryVoltage")*150) end}, + } +} +ENT.ButtonMap["Right"] = { + pos = Vector(456.9,-13.1,5-7.5), --446 -- 14 -- -0,5 + ang = Angle(0,-90,90-14.971), + width = 110, + height = 110, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "SA1/1Toggle",x=55-38, y=93, radius=10, tooltip="Фары 1 группа", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=-3.5, + var="SA1/1",speed=16,ang=180, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "SA2/1Toggle",x=55-19, y=93, radius=10, tooltip="Фары 2 группа", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=-3.5, + var="SA2/1",speed=16,ang=180, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "SA5/1Toggle",x=55+19, y=93, radius=10, tooltip="ЯркоÑть табло", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=-3.5, + var="SA5/1",speed=16,ang=180, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.LHalf","Train.Buttons.LFull"} + }}, + {ID = "SA4/1Toggle",x=55+38, y=93, radius=10, tooltip="ПодÑветка приборов", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=-3.5, + var="SA4/1",speed=16,ang=180, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} +ENT.ButtonMap["HelperPanel"] = { + pos = Vector(446.8,62.6,17.75), + ang = Angle(0,0,90), + width = 76, + height = 305, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "SA6Toggle",x=0,y=0,w=76,h=86,tooltip="",model = { + model = "models/metrostroi_train/switches/vudbrown.mdl",z=25, + var="SA6",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 = "SA24Set",x=0,y=86,w=76,h=86,tooltip="",model = { + model = "models/metrostroi_train/switches/vudbrown.mdl",z=25, + var="SA24",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 = "SB20Set",x=38,y=230,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + var="SB20",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button3_on" or "button2_off" end, + sndmin = 60,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "SB21Set",x=38,y=285,radius=20,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + var="SB21",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button1_on" or "button3_off" end, + sndmin = 60,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + } +} + +ENT.ButtonMap["CabVent"] = { + pos = Vector(456.8,45.8,-13), + ang = Angle(0,-90,0), + width = 70, + height = 62, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID="PVK-",x=0, y=0, w=35,h=62, tooltip="",states={"Train.Buttons.Off","Train.Buttons.VentHalf","Train.Buttons.VentFull"},varTooltip = function(ent) return ent:GetPackedRatio("PVK") end,}, + {ID = "!PVK",x=35,y=31,model = { + model = "models/metrostroi_train/81-717/buttons/breaker_common001.mdl",ang = 180,z=15, + getfunc = function(ent) return ent:GetPackedRatio("PVK") end, var="PVK",speed=4,min=1,max=0.75, + sndvol = 1,snd = function(val,val2) return "pvk"..val2 end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID="PVK+",x=35, y=0, w=35,h=62, tooltip="",states={"Train.Buttons.Off","Train.Buttons.VentHalf","Train.Buttons.VentFull"},varTooltip = function(ent) return ent:GetPackedRatio("PVK") end,}, + } +} +local function placeLamps(name) + if not ENT.ButtonMap[name] or not ENT.ButtonMap[name].buttons then return end + local nAdd = name:sub(name:find("_")+1,-1) + for i,button in pairs(ENT.ButtonMap[name].buttons) do + button.ID = nAdd..button.ID + button.model = { + --model = "models/metrostroi_train/81/lamp.mdl", z = -25, + lamp = { + speed=16, + model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl", + bscale = Vector(0.7,0.7,0.7), + z=-5, + var=button.var, + color=button.col=="y" and Color(255,168,0) or button.col=="r" and Color(255,56,30) or button.col=="g" and Color(175,250,20) or Color(255,255,255), + }, + sprite = {bright=0.5,size=0.25,scale=0.01,color=button.col=="y" and Color(255,168,0) or button.col=="r" and Color(255,56,30) or button.col=="g" and Color(175,250,20) or Color(255,255,255),z=-3,} + } + button.var=nil + end +end +ENT.ButtonMap["BUP_MVSU"] = { + pos = Vector(456.6,-27,-9.7), + ang = Angle(0,-90,10.3), + width = 25, + height = 70, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "KDV", x=8.5+6.15*0,y=0+4.44*4, radius=3,col="g",var="BIKDV", tooltip="ДВ",}, + {ID = "BDV", x=8.5+6.15*0,y=0+4.44*5, radius=3,col="r",var="BINKDV", tooltip="ДВ",}, + {ID = "PB", x=8.5+6.15*0,y=0+4.44*7, radius=3,col="g",var="BIPB", tooltip="ПБ",}, + {ID = "ARS", x=8.5+6.15*0,y=0+4.44*8, radius=3,col="r",var="BIARS", tooltip="ÐРС",}, + {ID = "AVT", x=8.5+6.15*0,y=0+4.44*10, radius=3,col="r",var="BIAVT", tooltip="ÐВТ",}, + {ID = "KVV", x=8.5+6.15*1,y=1+4.26*1, radius=3,col="g",var="BIV", tooltip="Ð’",}, + {ID = "KVN", x=8.5+6.15*1,y=1+4.26*2.1, radius=3,col="g",var="BIN", tooltip="Ð",}, + {ID = "KVX3", x=8.5+6.15*1,y=0+4.46*4, radius=3,col="g",var="BIX3", tooltip="Ð¥3",}, + {ID = "KVX2", x=8.5+6.15*1,y=0+4.46*5, radius=3,col="g",var="BIX2", tooltip="Ð¥2",}, + {ID = "KVX1", x=8.5+6.15*1,y=0+4.46*6, radius=3,col="g",var="BIX1", tooltip="Ð¥1",}, + {ID = "KV0", x=8.5+6.15*1,y=0+4.46*7, radius=3,col="g",var="BI0", tooltip="0",}, + {ID = "KVT1", x=8.5+6.15*1,y=0+4.46*8, radius=3,col="g",var="BIT1", tooltip="Т1",}, + {ID = "KVT2", x=8.5+6.15*1,y=0+4.46*9, radius=3,col="g",var="BIT2", tooltip="Т2",}, + {ID = "KVT3", x=8.5+6.15*1,y=0+4.46*10, radius=3,col="g",var="BIT3", tooltip="Т3",}, + {ID = "PVU", x=8.5+6.15*1,y=1+4.26*12, radius=3,col="r",var="BIPVU", tooltip="ПВУ",}, + {ID = "RPB", x=8.5+6.15*1,y=1+4.26*13.1,radius=3,col="r",var="BIRPB", tooltip="РПБ",}, + + {ID = "ARSX", x=8.5+6.15*2,y=1+4.26*1, radius=3,col="g",var="BIX", tooltip="X",}, + {ID = "ARST", x=8.5+6.15*2,y=1+4.26*2.1, radius=3,col="r",var="BIT", tooltip="T",}, + {ID = "ARSX3",x=8.5+6.15*2,y=0+4.46*4, radius=3,col="g",var="BIBX3", tooltip="Ð¥3",}, + {ID = "ARSX2",x=8.5+6.15*2,y=0+4.46*5, radius=3,col="g",var="BIBX2", tooltip="Ð¥2",}, + {ID = "ARSX1",x=8.5+6.15*2,y=0+4.46*6, radius=3,col="g",var="BIBX1", tooltip="Ð¥1",}, + {ID = "ARS0", x=8.5+6.15*2,y=0+4.46*7, radius=3,col="g",var="BIB0", tooltip="0",}, + {ID = "ARST1",x=8.5+6.15*2,y=0+4.46*8, radius=3,col="g",var="BIBT1", tooltip="Т1",}, + {ID = "ARST2",x=8.5+6.15*2,y=0+4.46*9, radius=3,col="g",var="BIBT2", tooltip="Т2",}, + {ID = "ARST3",x=8.5+6.15*2,y=0+4.46*10, radius=3,col="g",var="BIBT3", tooltip="Т3",}, + {ID = "ROT", x=8.5+6.15*2,y=1+4.26*12, radius=3,col="r",var="BIROT", tooltip="РОТ",}, + {ID = "SOT", x=8.5+6.15*2,y=1+4.26*13.1,radius=3,col="r",var="BISOT", tooltip="СОТ",}, + } +} + +ENT.ButtonMap["BUP_MLUP"] = { + pos = Vector(456.6,-27-1.8,-9.7), + ang = Angle(0,-90,10.3), + width = 10, + height = 70, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "VP", x=5+8*0,y=-1+4.8*3, radius=3,col="g",var="BV", tooltip="ВП",}, + {ID = "NZ", x=5+8*0,y=-1+4.8*4, radius=3,col="g",var="BN", tooltip="ÐЗ",}, + {ID = "BUP", x=5+8*0,y=-1+4.8*5, radius=3,col="r",var="BBBUP", tooltip="БЛ БУП",}, + {ID = "V0", x=5+8*0,y=-2.5+4.8*7-1, radius=3,col="r",var="BV0", tooltip="V=0",}, + {ID = "KU", x=5+8*0,y=-2.5+4.8*8-1, radius=3,col="r",var="BEKV", tooltip="КУ",}, + {ID = "BAV", x=5+8*0,y=-2.5+4.8*9-1, radius=3,col="r",var="BEBAV", tooltip="БÐÐ’",}, + {ID = "KR", x=5+8*0,y=-2.5+4.8*10-1,radius=3,col="r",var="BEKR", tooltip="КР",}, + {ID = "ARS", x=5+8*0,y=-2.5+4.8*11-1,radius=3,col="r",var="BEARS", tooltip="ÐРС",}, + } +} +ENT.ButtonMap["BUP_MUVS1"] = { + pos = Vector(456.6,-27-2.75,-9.7), + ang = Angle(0,-90,10.3), + width = 10, + height = 70, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "VP", x=5+8*0,y=-0.7+4.7*3, radius=3,col="g",var="BOV", tooltip="ВП",}, + {ID = "NZ", x=5+8*0,y=-0.7+4.7*4, radius=3,col="g",var="BON", tooltip="ÐЗ",}, + {ID = "X", x=5+8*0,y= 0.9+4.7*5,radius=3,col="g",var="BOX", tooltip="Ð¥",}, + {ID = "T", x=5+8*0,y= 0.9+4.7*6,radius=3,col="r",var="BOT", tooltip="Т",}, + {ID = "U1", x=5+8*0,y= 0.9+4.7*7,radius=3,col="g",var="BOU1", tooltip="УÑтавка 1",}, + {ID = "U2", x=5+8*0,y= 0.9+4.7*8,radius=3,col="g",var="BOU2", tooltip="УÑтавка 2",}, + {ID = "BAV", x=5+8*0,y= 2.2+4.7*9, radius=3,col="g",var="BOBBAV",tooltip="БЛ БÐÐ’",}, + {ID = "BUP", x=5+8*0,y= 2.2+4.7*10,radius=3,col="g",var="BOBBUP",tooltip="БЛ БУВ",}, + } +} +ENT.ButtonMap["BUP_MUVS2"] = { + pos = Vector(456.6,-27-4.25,-9.7), + ang = Angle(0,-90,10.3), + width = 10, + height = 70, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "0", x=5+8*0,y=0.8+4.35*5.6,radius=3,col="g",var="BO0", tooltip="Выбег",}, + {ID = "ZPT", x=5+8*0,y=0.8+4.35*7.8,radius=3,col="r",var="BOZPT", tooltip="ЗПТ",}, + } +} +ENT.ButtonMap["BUP_MS"] = { + pos = Vector(456.6,-27-5.15,-9.7), + ang = Angle(0,-90,10.3), + width = 10, + height = 70, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "MS", x=5+8*0,y=1.3+4.35*6,radius=3,col="g",var="BMS", tooltip="Ðорма",}, + } +} +ENT.ButtonMap["BUP_MP"] = { + pos = Vector(456.6,-27-6.68,-9.7), + ang = Angle(0,-90,10.3), + width = 10, + height = 70, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "MP", x=5+8*0,y=2.7+4.35*9,radius=3,col="g",var="BMP", tooltip="Ðорма",}, + } +} +---[[ +ENT.ButtonMap["BUV_MPS"] = { + pos = Vector(378.5,-32,-28+43.5), + ang = Angle(0,-90,90), + width = 30, + height = 110, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "PROV", x=5+8*0,y=15+5*2, radius=3,col="g",var="VIPROV", tooltip="Проверка",}, + {ID = "AVR", x=5+8*0,y=15+5*3, radius=3,col="r",var="VIAVR", tooltip="Отключение режимов",}, + {ID = "TARS", x=5+8*0,y=15+5*9, radius=3,col="g",var="VITARS", tooltip="Тормоз БКБД",}, + {ID = "X" , x=5+8*0,y=15+5*10, radius=3,col="g",var="VIX", tooltip="Код режима \"Ход\"",}, + + {ID = "NZ", x=5+8*1,y=15+5*0, radius=3,col="g",var="VINZ", tooltip="Ðазад",}, + {ID = "NZR", x=5+8*1,y=15+5*1, radius=3,col="g",var="VINR", tooltip="Резервный назад",}, + {ID = "PROV0",x=5+8*1,y=15+5*2, radius=3,col="g",var="VIPROV0",tooltip="Проверка работы",}, + {ID = "SK", x=5+8*1,y=15+5*3, radius=3,col="g",var="", tooltip="СкороÑть",}, + {ID = "T", x=5+8*1,y=15+5*9, radius=3,col="g",var="VIT", tooltip="Код режима \"Тормоз\"",}, + {ID = "XR", x=5+8*1,y=15+5*10, radius=3,col="g",var="VIXP", tooltip="Резервный ход 1",}, + {ID = "U1", x=5+8*1,y=15+5*11, radius=3,col="g",var="VIU1", tooltip="УÑтавка 1",}, + {ID = "U2", x=5+8*1,y=15+5*12, radius=3,col="g",var="VIU2", tooltip="УÑтавка 2",}, + + {ID = "VP", x=5+8*2,y=15+5*0, radius=3,col="g",var="VIVP", tooltip="Вперёд",}, + {ID = "VPR", x=5+8*2,y=15+5*1, radius=3,col="g",var="VIVR", tooltip="Резервный вперед",}, + {ID = "VZ", x=5+8*2,y=15+5*2.5,radius=3,col="g",var="VIVZ", tooltip="Возврат защиты",}, + {ID = "XM", x=5+8*2,y=15+5*10, radius=3,col="g",var="VIM", tooltip="Маневровый ход",}, + {ID = "U1R", x=5+8*2,y=15+5*11, radius=3,col="g",var="VIU1R", tooltip="Резервный ход 2",}, + } +} +ENT.ButtonMap["BUV_MVD"] = { + pos = Vector(378.5,-32-1.8,-28+43.5), + ang = Angle(0,-90,90), + width = 20, + height = 110, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "OTK", x=2+8*1,y=15+5*4.5,radius=3,col="r",var="VOTK", tooltip="Отказ режимов",}, + {ID = "RP", x=2+8*1,y=15+5*6.9,radius=3,col="r",var="VRP", tooltip="Сработка РП",}, + } +} + +ENT.ButtonMap["BUV_MALP1"] = { + pos = Vector(378.5,-32-3,-28+43.5), + ang = Angle(0,-90,90), + width = 30, + height = 110, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "MZK", x=11+8*0,y=15+5*2, radius=3,col="r",var="VMZK", tooltip="Мгновенный запрет ключа",}, + {ID = "FM", x=11+8*0,y=15+5*3, radius=3,col="r",var="VFM", tooltip="ÐапрÑжение на фильтре выше 1000 вольт",}, + {ID = "400", x=11+8*0,y=15+5*4, radius=3,col="g",var="VU400", tooltip="Ðаличие400 вольт",}, + {ID = "50" , x=11+8*0,y=15+5*5, radius=3,col="g",var="VE1350", tooltip="Ðаличие тока ÑÐºÐ¾Ñ€Ñ Ð“Ñ€ Ð",}, + {ID = "DIF", x=11+8*0,y=15+5*6, radius=3,col="g",var="VDIF", tooltip="РазноÑть токов гр Ð,Ð’",}, + {ID = "650", x=11+8*0,y=15+5*7, radius=3,col="r",var="VE13650",tooltip="Ток ÑÐºÐ¾Ñ€Ñ Ð“Ñ€ Рвыше 650 ампер",}, + {ID = "0", x=11+8*0,y=15+5*8, radius=3,col="r",var="VE130", tooltip="Якорный ток Гр РотÑутÑтвует",}, + {ID = "ARS", x=11+8*0,y=15+5*9, radius=3,col="r",var="", tooltip="Срыв чаÑтотного запуÑка",}, + {ID = "ITA", x=11+8*0,y=15+5*10, radius=3,col="r",var="", tooltip="Пробой тормозного тириÑтора Гр Ð > 100a",}, + + {ID = "TR", x=11+8*1,y=15+5*5.5,radius=3,col="g",var="", tooltip="Ðаличие реоÑтатного тока более 100 а Гр Ð",}, + {ID = "SN", x=11+8*1,y=15+5*7.3,radius=3,col="r",var="VSN", tooltip="Ð¡Ð¸Ð»Ð¾Ð²Ð°Ñ Ñхема не Ñобрана",}, + {ID = "VN", x=11+8*1,y=15+5*9, radius=3,col="r",var="", tooltip="ÐеиÑправноÑть вентилÑторов",}, + } +} +ENT.ButtonMap["BUV_MALP2"] = { + pos = Vector(378.5,-32-4.8,-28+43.5), + ang = Angle(0,-90,90), + width = 30, + height = 110, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "MSU", x=11+8*0,y=15+5*2, radius=3,col="r",var="VMSU", tooltip="Мгновенный ÑÐ±Ñ€Ð¾Ñ ÑƒÑтавки",}, + {ID = "800", x=11+8*0,y=15+5*3, radius=3,col="g",var="VU800", tooltip="ÐапрÑжение Ñети 800 вольт",}, + {ID = "975", x=11+8*0,y=15+5*4, radius=3,col="g",var="VU975", tooltip="МакÑимальное напрÑжение Ñети ",}, + {ID = "50" , x=11+8*0,y=15+5*5, radius=3,col="g",var="VE2450", tooltip="Ðаличие тока ÑÐºÐ¾Ñ€Ñ Ð“Ñ€ B",}, + {ID = "650", x=11+8*0,y=15+5*7, radius=3,col="r",var="VE24650",tooltip="Ток ÑÐºÐ¾Ñ€Ñ Ð“Ñ€ B выше 650 ампер",}, + {ID = "0", x=11+8*0,y=15+5*8, radius=3,col="r",var="VE240", tooltip="Якорный ток Гр B отÑутÑтвует",}, + {ID = "BV", x=11+8*0,y=15+5*9, radius=3,col="r",var="VBV", tooltip="Сработала БВ",}, + {ID = "ITB", x=11+8*0,y=15+5*10, radius=3,col="r",var="", tooltip="Пробой тормозного тириÑтора Гр B > 100a",}, + } +} +ENT.ButtonMap["BUV_MIV"] = { + pos = Vector(378.5,-32-6.6,-28+43.5), + ang = Angle(0,-90,90), + width = 30, + height = 110, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "33", x=11+8*0,y=15+5*3.7,radius=3,col="g",var="VZZ", tooltip="ЧаÑтотный запуÑк завершен",}, + {ID = "V1", x=11+8*0,y=15+5*5, radius=3,col="g",var="VV1", tooltip="Вентиль1",}, + {ID = "SMA", x=11+8*0,y=15+5*6.3,radius=3,col="g",var="VSMA", tooltip="Сигнал макÑимальный Гр Ð",}, + {ID = "SMB", x=11+8*0,y=15+5*7.6,radius=3,col="g",var="VSMB", tooltip="Сигнал макÑимальный Гр Ð’",}, + } +} + +ENT.ButtonMap["BUV_MGR"] = { + pos = Vector(378.5,-32,-35+43.5), + ang = Angle(0,-90,90), + width = 30, + height = 110, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "TP1", x=5+8*0,y=15+5*2, radius=3,col="y",var="VITP1", tooltip="Прижатие токоприемника 1",}, + {ID = "TP3", x=5+8*0,y=15+5*3.5, radius=3,col="y",var="VITP3", tooltip="Прижатие токоприемника 3",}, + {ID = "KHA", x=5+8*0,y=15+5*9, radius=3,col="y",var="VIKX", tooltip="Включение контакторов хода группы Ð",}, + {ID = "KTA", x=5+8*0,y=15+5*10.5,radius=3,col="y",var="VIKT", tooltip="Включение контакторов тормоза группы Ð",}, + + {ID = "TP2", x=5+8*1,y=15+5*2, radius=3,col="y",var="VITP2", tooltip="Прижатие токоприемника 2",}, + {ID = "TP4", x=5+8*1,y=15+5*3.5, radius=3,col="y",var="VITP4", tooltip="Прижатие токоприемника 4",}, + {ID = "KHB", x=5+8*1,y=15+5*9, radius=3,col="y",var="VIKX", tooltip="Включение контакторов хода группы B",}, + {ID = "KTB", x=5+8*1,y=15+5*10.5,radius=3,col="y",var="VIKT", tooltip="Включение контакторов тормоза группы B",}, + {ID = "KRV", x=5+8*1,y=15+5*12, radius=3,col="y",var="VIRV", tooltip="Включение контакторов реверÑа вперёд",}, + + {ID = "NV", x=5+8*2,y=15+5*1, radius=3,col="r",var="", tooltip="ÐеиÑправноÑть вентилÑтора ПТТИ",}, + {ID = "BV", x=5+8*2,y=15+5*3, radius=3,col="g",var="VIBV", tooltip="БВ взведён",}, + {ID = "LK", x=5+8*2,y=15+5*10, radius=3,col="y",var="VILT", tooltip="Включение линейного контактора",}, + {ID = "KRN", x=5+8*2,y=15+5*12, radius=3,col="y",var="VIRN", tooltip="Включение контакторов реверÑа назад",}, + } +} +ENT.ButtonMap["BUV_MLUA"] = { + pos = Vector(378.5,-32-1.8,-35+43.5), + ang = Angle(0,-90,90), + width = 20, + height = 110, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "KT", x=10+8*0,y=17+5*3, radius=3,col="g",var="VOKT", tooltip="Команда тормоза",}, + {ID = "XH", x=10+8*0,y=17+5*4, radius=3,col="g",var="VOKX", tooltip="Команда хода",}, + {ID = "VP", x=10+8*0,y=17+5*5, radius=3,col="g",var="VOVP", tooltip="Команда Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ€ÐµÐ²ÐµÑ€Ñа вперёд",}, + {ID = "NZ", x=10+8*0,y=17+5*6, radius=3,col="g",var="VONZ", tooltip="Команда Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ€ÐµÐ²ÐµÑ€Ñа назад",}, + {ID = "SS", x=10+8*0,y=17+5*7, radius=3,col="g",var="VSS", tooltip="Сигнал Ñобранной Ñхемы",}, + + {ID = "PV", x=10+8*0,y=17+5*9, radius=3,col="g",var="", tooltip="Команда Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ð²Ð¾Ð·Ð±ÑƒÐ´Ð¸Ñ‚ÐµÐ»Ñ",}, + + {ID = "LK", x=10+8*0,y=17+5*11, radius=3,col="g",var="VOLK", tooltip="Команда Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð»Ð¸Ð½ÐµÐ¹Ð½Ð¾Ð³Ð¾ конатктора",}, + } +} +ENT.ButtonMap["BUV_MUVK1"] = { + pos = Vector(378.5,-32-3,-35+43.5), + ang = Angle(0,-90,90), + width = 40, + height = 110, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "V1", x=11+8*0,y=19+5*2, radius=3,col="g",var="VOV1", tooltip="Управление катушкой ВЗ№1",}, + {ID = "KT", x=11+8*0,y=19+5*3, radius=3,col="g",var="VOKT", tooltip="Управление контакторами тормоза",}, + {ID = "KH", x=11+8*0,y=19+5*4, radius=3,col="g",var="VOKX", tooltip="Управление контакторами хода",}, + {ID = "LK", x=11+8*0,y=19+5*5, radius=3,col="g",var="VOLK", tooltip="Управление линейным контактором",}, + {ID = "PV", x=11+8*0,y=19+5*6, radius=3,col="g",var="", tooltip="Управление подвозбудителем",}, + {ID = "NZ", x=11+8*0,y=19+5*7, radius=3,col="g",var="VONZ", tooltip="Управление реверÑом Ðазад",}, + + {ID = "SN", x=11+8*1,y=19+5*2, radius=3,col="r",var="VOSN", tooltip="Ð¡Ð¸Ð»Ð¾Ð²Ð°Ñ Ñхема вагона не Ñобрана",}, + } +} +ENT.ButtonMap["BUV_MUVK2"] = { + pos = Vector(378.5,-32-5.5,-35+43.5), + ang = Angle(0,-90,90), + width = 30, + height = 110, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "RTM", x=11+8*0,y=19+5*2, radius=3,col="g",var="VORKT", tooltip="Управление реле минимального тока",}, + {ID = "RKT", x=11+8*0,y=19+5*3, radius=3,col="g",var="VORMT", tooltip="Управление реле ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ",}, + {ID = "RP", x=11+8*0,y=19+5*4, radius=3,col="r",var="VORP", tooltip="Сработка защиты",}, + {ID = "OTK", x=11+8*0,y=19+5*5, radius=3,col="r",var="VOOIZ", tooltip="Отказ вагона",}, + {ID = "75", x=11+8*0,y=19+5*6, radius=3,col="g",var="VO75V", tooltip="Резервное питание БУВ",}, + {ID = "VP", x=11+8*0,y=19+5*7, radius=3,col="g",var="VOVP", tooltip="Управление реверÑом Вперед",}, + } +} +---[[ +placeLamps("BUV_MPS") +placeLamps("BUV_MVD") +placeLamps("BUV_MALP1") +placeLamps("BUV_MALP2") +placeLamps("BUV_MIV") +placeLamps("BUV_MGR") +placeLamps("BUV_MLUA") +placeLamps("BUV_MUVK1") +placeLamps("BUV_MUVK2") +--]] + +placeLamps("BUP_MVSU") +placeLamps("BUP_MLUP") +placeLamps("BUP_MUVS1") +placeLamps("BUP_MUVS2") +placeLamps("BUP_MS") +placeLamps("BUP_MP") + +ENT.ButtonMap["DriverValveDisconnect"] = { + pos = Vector(452.13,-27.45,-4.2-9), + ang = Angle(0,-90,0), + width = 259, + height = 80, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "DriverValveDisconnectToggle", x=0, y=10, w=70, h=70, tooltip="Клапан разобщениÑ", model = { + var="DriverValveDisconnect",--sndid="brake_disconnect", + sndvol = 1, snd = function(val) return "disconnect_valve" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + model = "models/metrostroi_train/81-718/disconnect_valve.mdl", ang=90,z=13, + speed=4, min=1,max=0.75, + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + {ID = "ParkingBrakeToggle", x=82.5, y=10, w=70, h=70, tooltip="СтоÑночный тормоз", model = { + var="ParkingBrake",--sndid="brake_disconnect2", + sndvol = 1, snd = function(val) return "disconnect_valve" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + model = "models/metrostroi_train/81-718/disconnect_valve.mdl", ang=90,z=13, + speed=4, min=1,max=0.75, + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + {ID = "EPKToggle", x=188, y=0, w=70, h=70, tooltip="ЭПВ: ЭлектропневматичеÑкий вентиль ÐРС", model = { + var="EPK",--sndid="brake_disconnect2", + sndvol = 1, snd = function(val) return "disconnect_valve" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + model = "models/metrostroi_train/81-718/disconnect_valve.mdl", ang=90,z=13, + speed=4, min=1,max=0.75, + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} + +ENT.ButtonMap["KR"] = { + pos = Vector(460.3,28.5,-2.3-6.2), --446 -- 14 -- -0,5 + ang = Angle(0,-90,11), + width = 180, + height = 40, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "SBR14Set",x=20, y=20, radius=20, tooltip="Резервный ход 1", model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl", vmin=1, vmax=0, z=-3, + var="SBR14",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "SBR16Set",x=90, y=20, radius=20, tooltip="КÐÐ¥", model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl", vmin=1, vmax=0, z=-3, + var="SBR16",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "SBR15Set",x=160, y=20, radius=20, tooltip="Резервный ход 2", model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl", vmin=1, vmax=0, z=-3, + var="SBR15",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + } +} + +ENT.ButtonMap["BackPPZ"] = { + pos = Vector(408,-55.3,49.75), --446 -- 14 -- -0,5 + ang = Angle(0,90,90), + width = 450, + height = 320, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "SF51Toggle",x=0*35.5, y=73, w=20,h=40, tooltip = "SF51: ОÑновное питание ÐРС",}, + {ID = "SF52Toggle",x=1*35.5, y=73, w=20,h=40, tooltip = "SF52: Резервное питание ÐРС",}, + {ID = "SF53Toggle",x=2*35.5, y=73, w=20,h=40, tooltip = "SF53: Тормозные цепи ÐРС",}, + {ID = "SF60Toggle",x=3*35.5, y=73, w=20,h=40, tooltip = "SF60: 12V ÐРС",}, + {ID = "SF61Toggle",x=4*35.5, y=73, w=20,h=40, tooltip = "SF61: 50V ÐРС(ФММ1)",}, + {ID = "SF77Toggle",x=5*35.5, y=73, w=20,h=40, tooltip = "SF77: Ðварийный ход оÑновное управление",}, + {ID = "SF78Toggle",x=6*35.5, y=73, w=20,h=40, tooltip = "SF78: Ðварийный ход резервное управление",}, + {ID = "SF40Toggle",x=7*35.5, y=73, w=20,h=40, tooltip = "SF40: Вентиль â„–2",}, + {ID = "SF41Toggle",x=8*35.5, y=73, w=20,h=40, tooltip = "SF41: Фары",}, + {ID = "SF8Toggle" ,x=9*35.5, y=73, w=20,h=40, tooltip = "SF8: Двери",}, + {ID = "SF10Toggle",x=10*35.5, y=73, w=20,h=40, tooltip = "SF10:ВентилÑторы 1 группа"}, + {ID = "SF11Toggle",x=11*35.5, y=73, w=20,h=40, tooltip = "SF11:ВентилÑторы 2 группа"}, + {ID = "SF7Toggle" ,x=12*35.5, y=73, w=20,h=40, tooltip = "SF7: ББЭ, Мотор-компреÑÑор"}, + + {ID = "SF50Toggle",x=0*35.5, y=275, w=20,h=40, tooltip = "SF50: СкороÑтимер",}, + {ID = "SF76Toggle",x=1*35.5, y=275, w=20,h=40, tooltip = "SF76: ÐŸÐ¾Ð¶Ð°Ñ€Ð½Ð°Ñ ÑигнализациÑ",}, + {ID = "SF73Toggle",x=2*35.5, y=275, w=20,h=40, tooltip = "SF73: ГребнеÑмазыватель",}, + {ID = "SF3Toggle" ,x=3*35.5, y=275, w=20,h=40, tooltip = "SF3: Вагонное питание, ЦУВ",}, + {ID = "SF71Toggle",x=4*35.5, y=275, w=20,h=40, tooltip = "SF71: ЭкÑÑ‚Ñ€ÐµÐ½Ð½Ð°Ñ ÑвÑзь",}, + {ID = "SF63Toggle",x=5*35.5, y=275, w=20,h=40, tooltip = "SF63: РадиоÑтанциÑ",}, + {ID = "SF54Toggle",x=6*35.5, y=275, w=20,h=40, tooltip = "SF54: Радиооповещение 50Ð",}, + {ID = "SF65Toggle",x=7*35.5, y=275, w=20,h=40, tooltip = "SF65: ВентилÑÑ†Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹",}, + {ID = "SF55Toggle",x=8*35.5, y=275, w=20,h=40, tooltip = "SF55: СОТ-3",}, + {ID = "SF9Toggle" ,x=9*35.5, y=275, w=20,h=40, tooltip = "SF9: Управление поездом резервное",}, + {ID = "SF6Toggle",x=10*35.5, y=275, w=20,h=40, tooltip = "SF6: Управление поездом оÑновное"}, + {ID = "SF5Toggle",x=11*35.5, y=275, w=20,h=40, tooltip = "SF5: Управление БКЦУ"}, + {ID = "SF2Toggle" ,x=12*35.5, y=275, w=20,h=40, tooltip = "SF2: Поездное питание"}, + } +} + +for k,buttbl in ipairs(ENT.ButtonMap["BackPPZ"].buttons) do + buttbl.model = { + model = "models/metrostroi_train/81-720/button_av1.mdl",z=-16, ang=-90, + var=buttbl.ID:Replace("Toggle",""),speed=9, vmin=0,vmax=1, + sndvol = 0.8, snd = function(val) return val and "av_on" or "av_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + } +end +ENT.ButtonMap["PVZ"] = { + pos = Vector(392,-25,-20), + ang = Angle(0,270,90), + width = 350, + height = 105, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "SF4Toggle",x=25*1,y=60*0,w=25,h=45,tooltip=""}, + {ID = "SF27Toggle",x=25*2,y=60*0,w=25,h=45,tooltip=""}, + {ID = "SF46Toggle",x=25*3,y=60*0,w=25,h=45,tooltip=""}, + {ID = "SF12Toggle",x=25*4,y=60*0,w=25,h=45,tooltip=""}, + {ID = "SF13Toggle",x=25*5,y=60*0,w=25,h=45,tooltip=""}, + {ID = "SF45Toggle",x=25*6,y=60*0,w=25,h=45,tooltip=""}, + {ID = "SF16Toggle",x=25*7,y=60*0,w=25,h=45,tooltip=""}, + {ID = "SF44Toggle",x=25*8,y=60*0,w=25,h=45,tooltip=""}, + {ID = "SF43Toggle",x=25*9,y=60*0,w=25,h=45,tooltip=""}, + {ID = "SF14Toggle",x=25*10,y=60*0,w=25,h=45,tooltip=""}, + {ID = "SF15Toggle",x=25*11,y=60*0,w=25,h=45,tooltip=""}, + {ID = "SF25Toggle",x=25*12,y=60*0,w=25,h=45,tooltip=""}, + {ID = "SF72Toggle",x=25*13,y=60*0,w=25,h=45,tooltip=""}, + ------------------------------------------------------------------------ + --{ID = "SF56Toggle",x=25*0,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF29Toggle",x=25*1,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF26Toggle",x=25*2,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF42Toggle",x=25*3,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF18Toggle",x=25*4,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF20Toggle",x=25*5,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF17Toggle",x=25*6,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF19Toggle",x=25*7,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF21Toggle",x=25*8,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF22Toggle",x=25*9,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF34Toggle",x=25*10,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF35Toggle",x=25*11,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF23Toggle",x=25*12,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF24Toggle",x=25*13,y=60*1,w=25,h=45,tooltip=""}, + } +} +for i,button in pairs(ENT.ButtonMap.PVZ.buttons) do + button.model = { + model = "models/metrostroi_train/81-720/button_av1.mdl",z=-25, + var=button.ID:Replace("Toggle",""),speed=8, + sndvol = 0.8,snd = function(val) return val and "av_on" or "av_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + } +end +ENT.ButtonMap["VPU"] = { + pos = Vector(407.4,-55.3,27), + ang = Angle(0,90,93), + width = 450, + height = 100, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "SAP8Toggle",x=60, y=31, radius=10, tooltip="ОÑвещение Ñалона", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",z=-2, + var="SAP8",speed=16,ang=180, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "SAP13Toggle",x=91, y=31, radius=10, tooltip="ОÑвещение кабины", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",z=-2, + var="SAP13",speed=16,ang=180, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "SAP36Toggle",x=245, y=31, radius=10, tooltip="Включение ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ ÑкÑтренной ÑвÑзи", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",z=-2, + var="SAP36",speed=16,ang=180, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "SAP12Toggle",x=330, y=31, radius=10, tooltip="ОÑвещение отÑека", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",z=-2, + var="SAP12",speed=16,ang=180, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "SAP11Toggle",x=365, y=31, radius=10, tooltip="Включение Ð¾Ñ‚Ð¾Ð¿Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",z=-2, + var="SAP11",speed=16,ang=180, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "SAP23Toggle",x=400, y=31, radius=10, tooltip="Режим \"Ð’Ñпомогательный поезд\"", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",z=-2, + var="SAP23",speed=16,ang=180, + plomb = {model = "models/metrostroi_train/81/plomb_b.mdl",ang=270-30,x=-13,y=25,z=0,var="SAP23Pl", ID="SAP23Pl",}, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + + + {ID = "SAP9Toggle",x=60, y=85, radius=10, tooltip="ВентилÑÑ†Ð¸Ñ 1 группа", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",z=-2, + var="SAP9",speed=16,ang=180, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "SAP10Toggle",x=91, y=85, radius=10, tooltip="ВентилÑÑ†Ð¸Ñ 2 группа", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",z=-2, + var="SAP10",speed=16,ang=180, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + + {ID = "SAP3Toggle",x=116, y=85, radius=10, tooltip="УÐЧ", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",z=-2, + var="SAP3",speed=16,ang=180, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "SAP39Toggle",x=165, y=85, radius=10, tooltip="КГ", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",z=-2, + var="SAP39",speed=16,ang=180, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "SBP22Set",x=209, y=80, radius=20, tooltip="Проверка работоÑпоÑобноÑти", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", vmin=1, vmax=0, z=-3, + var="SBP22",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "SBP6Set",x=246, y=80, radius=20, tooltip="Резерв двери правые", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", vmin=1, vmax=0, z=-3, + var="SBP6",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "SBP4Set",x=283, y=80, radius=20, tooltip="Резерв двери левые", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", vmin=1, vmax=0, z=-3, + var="SBP4",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "SAP14Toggle",x=330, y=85, radius=10, tooltip="Переключение режима дешифратора ÐЛС (вверх 2/6, вниз 1/5)", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",z=-2, + var="SAP14",speed=16,ang=180, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Freq1/5","Train.Buttons.Freq2/6"} + }}, + {ID = "SAP26Toggle",x=365, y=85, radius=10, tooltip="УОС: УÑтройÑтво Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ ÑкороÑти(езда без ЭПК\\ЭПВ)", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",z=-2, + var="SAP26",speed=16,ang=180, + plomb = {model = "models/metrostroi_train/81/plomb_b.mdl",ang=328,x=19,y=15,z=0,var="SAP26Pl", ID="SAP26Pl",}, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "SAP24Toggle",x=400, y=85, radius=10, tooltip="ВОВТ: Выключатель Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð²ÐµÐ½Ñ‚Ð¸Ð»ÑŒÐ½Ñ‹Ñ… тормозов", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",z=-2, + var="SAP24",speed=16,ang=180,vmin=1,vmax=0, + plomb = {model = "models/metrostroi_train/81/plomb_b.mdl",ang=90-30,x=-1+13,y=-25,z=0,var="SAP24Pl", ID="SAP24Pl",}, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} +ENT.ButtonMap["Battery"] = { + pos = Vector(404.0,-55.3,7.2), + ang = Angle(0,90,0), + width = 450, + height = 100, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "RCToggle", x=150, y=40, radius=30, tooltip="РЦ-1: Разъединитель цепей ÐРС\nRC-1: ARS circuits disconnect", model = { + model = "models/metrostroi_train/81-717/buttons/breaker_common001.mdl",ang=180,z=12, + var="RC",speed=1,vmin=1,vmax=0.87, + plomb = {model = "models/metrostroi_train/81/plomb_b.mdl",ang=230,x=-34,y=34,var="RCPl",ID="RCPl",z=-14,}, + sndvol = 0.8, snd = function(val) return val and "pak_on" or "pak_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "VBToggle", x=225, y=40, radius=30, tooltip="ВБ: Выключатель батареи\nVB: Battery on/off", model = { + model = "models/metrostroi_train/81-717/buttons/breaker_common005.mdl",ang=180,z=12, + var="VB",speed=1,vmin=1,vmax=0.87, + sndvol = 0.8, snd = function(val) return val and "pak_on" or "pak_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "VTPR", x=300, y=40, radius=0, model = { + model = "models/metrostroi_train/81-717/buttons/breaker_common006.mdl",ang=180,z=12, + var="VTPR",speed=2,min=1,max=0.61,getfunc = function(ent) return ent:GetPackedRatio("VTPR") end, + sndvol = 0.8, snd = function(_,val) return val%2>0 and "pak_on" or "pak_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID="VTPR-",x=300-30, y=40-30, w=30,h=60, tooltip="ВТПР(влево)",states = {"Train.Buttons.0","Train.Buttons.VTRAll","Train.Buttons.VTRF","Train.Buttons.VTRB"},varTooltip = function(ent) return ent:GetPackedRatio("VTPR") end,}, + {ID="VTPR+",x=300 , y=40-30, w=30,h=60, tooltip="ВТПР(вправо)",states = {"Train.Buttons.0","Train.Buttons.VTRAll","Train.Buttons.VTRF","Train.Buttons.VTRB"},varTooltip = function(ent) return ent:GetPackedRatio("VTPR") end,}, + } +} + +local strength = { + [0] = 0.86, + [1] = 0.29, + [2] = 0.71, + [3] = 0.71, + [4] = 0.57, + [5] = 0.71, + [6] = 0.86, + [7] = 0.43, + [8] = 1.00, + [9] = 0.86, +} +-- ARS/Speedometer panel +ENT.ButtonMap["ARS"] = { + pos = Vector(459.95,7-4,4.9-9), + ang = Angle(0,-90,90-14.971), + width = 235, + height = 85, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "!Speedometer1", x=107,y=6,w=13,h=22,tooltip="Индикатор ÑкороÑти", model = { + name="SPU_Speed2",model = "models/metrostroi_train/81-717/segments/segment_mvm.mdl", color=Color(175,250,20),skin=0,z=1,ang=Angle(0,0,-90), + tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.Speed"),ent:GetPackedRatio("Speed")*100) end, + sprite = {bright=0.1,size=.5,scale=0.02,vscale=0.025,z=1,color=Color(225,250,20),aa=true,getfunc= function(ent) + if not ent:GetPackedBool("Speedometer") then return 0 end + return strength[math.floor(ent:GetPackedRatio("Speed")*10)%10] + end}, + }}, + {ID = "!Speedometer2", x=118,y=6,w=13,h=22,tooltip="Индикатор ÑкороÑти", model = { + name="SPU_Speed1",model = "models/metrostroi_train/81-717/segments/segment_mvm.mdl", color=Color(175,250,20),skin=0,z=1,ang=Angle(0,0,-90), + tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.Speed"),ent:GetPackedRatio("Speed")*100) end, + sprite = {bright=0.1,size=.5,scale=0.02,vscale=0.025,z=1,color=Color(225,250,20),aa=true,getfunc= function(ent) + if not ent:GetPackedBool("Speedometer") then return 0 end + return strength[math.floor(ent:GetPackedRatio("Speed")*100)%10] + end}, + }}, + + {ID = "!SD", x=9,y=7,w=33,h=13,tooltip="СД: Лампа Ñигнализации дверей поезда (двери закрыты)",model = { + name="SPU_SD",lamp = {speed=10,model = "models/metrostroi_train/81-718/lamps/big_g.mdl",z=1, var="SPU_SD", getfunc=function(ent) return ent:GetPackedBool("SPU_SD") and (ent:GetPackedBool("VD1") and 1 or 0.8) or 0 end}, + sprite = {bright=0.5,size=0.25,scale=0.05,vscale=0.02,color=Color(125,200,15),z=-1,aa=true} + }}, + {ID = "!KT", x=48,y=7,w=33,h=13,tooltip="КТ: Лампа ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ",model = { + name="SPU_KT",lamp = {speed=10,model = "models/metrostroi_train/81-718/lamps/big_g.mdl",z=1, var="SPU_KT", getfunc=function(ent) return ent:GetPackedBool("SPU_KT") and (ent:GetPackedBool("VD1") and 1 or 0.8) or 0 end}, + sprite = {bright=0.5,size=0.25,scale=0.05,vscale=0.02,color=Color(125,200,15),z=-1,aa=true} + }}, + {ID = "!RS", x=158.5,y=7,w=33,h=13,tooltip="РС: Лампа равенÑтва ÑкороÑтей",model = { + name="SPU_RS",lamp = {speed=10,model = "models/metrostroi_train/81-718/lamps/big_g.mdl",z=1, var="SPU_RS", getfunc=function(ent) return ent:GetPackedBool("SPU_RS") and (ent:GetPackedBool("VD1") and 1 or 0.8) or 0 end}, + sprite = {bright=0.5,size=0.25,scale=0.05,vscale=0.02,color=Color(125,200,15),z=-1,aa=true} + }}, + {ID = "!SK", x=196.5,y=7,w=33,h=13,tooltip="СÐ: Лампа ÑоответÑÑ‚Ð²Ð¸Ñ Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ",model = { + name="SPU_SK",lamp = {speed=10,model = "models/metrostroi_train/81-718/lamps/big_g.mdl",z=1, var="SPU_SN", getfunc=function(ent) return ent:GetPackedBool("SPU_SN") and (ent:GetPackedBool("VD1") and 1 or 0.8) or 0 end}, + sprite = {bright=0.5,size=0.25,scale=0.05,vscale=0.02,color=Color(125,200,15),z=-1,aa=true} + }}, + + {ID = "!04", x=9,y=33.5,w=33,h=13,tooltip="ОЧ: Лампа отÑутÑÑ‚Ð²Ð¸Ñ Ñ‡Ð°Ñтоты",model = { + name="SPU_04",lamp = {speed=10,model = "models/metrostroi_train/81-718/lamps/big_r.mdl",z=1, var="SPU_04", getfunc=function(ent) return ent:GetPackedBool("SPU_04") and (ent:GetPackedBool("VD1") and 1 or 0.8) or 0 end}, + sprite = {bright=0.5,size=0.25,scale=0.05,vscale=0.02,color=Color(255,20,40),z=-1,aa=true} + }}, + {ID = "!0", x=48,y=33.5,w=33,h=13,tooltip="0: Лампа разрешённой ÑкороÑти 0 км\\ч",model = { + name="SPU_0",lamp = {speed=10,model = "models/metrostroi_train/81-718/lamps/big_r.mdl",z=1, var="SPU_00", getfunc=function(ent) return ent:GetPackedBool("SPU_00") and (ent:GetPackedBool("VD1") and 1 or 0.8) or 0 end}, + sprite = {bright=0.5,size=0.25,scale=0.05,vscale=0.02,color=Color(255,20,40),z=-1,aa=true} + }}, + {ID = "!40", x=84,y=33.5,w=33,h=13,tooltip="40: Лампа разрешённой ÑкороÑти 40 км\\ч",model = { + name="SPU_40",lamp = {speed=10,model = "models/metrostroi_train/81-718/lamps/big_y.mdl",z=1, var="SPU_40", getfunc=function(ent) return ent:GetPackedBool("SPU_40") and (ent:GetPackedBool("VD1") and 1 or 0.8) or 0 end}, + sprite = {bright=0.5,size=0.25,scale=0.05,vscale=0.02,color=Color(150,100,30),z=-1,aa=true} + }}, + {ID = "!60", x=121,y=33.5,w=33,h=13,tooltip="60: Лампа разрешённой ÑкороÑти 60 км\\ч",model = { + name="SPU_60",lamp = {speed=10,model = "models/metrostroi_train/81-718/lamps/big_g.mdl",z=1, var="SPU_60", getfunc=function(ent) return ent:GetPackedBool("SPU_60") and (ent:GetPackedBool("VD1") and 1 or 0.8) or 0 end}, + sprite = {bright=0.5,size=0.25,scale=0.05,vscale=0.02,color=Color(125,200,15),z=-1,aa=true} + }}, + {ID = "!70", x=158.5,y=33.5,w=33,h=13,tooltip="70: Лампа разрешённой ÑкороÑти 70 км\\ч",model = { + name="SPU_70",lamp = {speed=10,model = "models/metrostroi_train/81-718/lamps/big_g.mdl",z=1, var="SPU_70", getfunc=function(ent) return ent:GetPackedBool("SPU_70") and (ent:GetPackedBool("VD1") and 1 or 0.8) or 0 end}, + sprite = {bright=0.5,size=0.25,scale=0.05,vscale=0.02,color=Color(125,200,15),z=-1,aa=true} + }}, + {ID = "!80", x=196.5,y=33.5,w=33,h=13,tooltip="80: Лампа разрешённой ÑкороÑти 80 км\\ч",model = { + name="SPU_80",lamp = {speed=10,model = "models/metrostroi_train/81-718/lamps/big_g.mdl",z=1, var="SPU_80", getfunc=function(ent) return ent:GetPackedBool("SPU_80") and (ent:GetPackedBool("VD1") and 1 or 0.8) or 0 end}, + sprite = {bright=0.5,size=0.25,scale=0.05,vscale=0.02,color=Color(125,200,15),z=-1,aa=true} + }}, + + {ID = "!KES", x=15,y=60.5,w=18,h=13,tooltip="КЭС: Контроль ÑкÑтренной ÑвÑзи",model = { + name="SPU_KES",lamp = {speed=10,model = "models/metrostroi_train/81-718/lamps/litlle_r.mdl",z=1, var="SPU_KES", getfunc=function(ent) return ent:GetPackedBool("SPU_KES") and (ent:GetPackedBool("VD1") and 1 or 0.8) or 0 end}, + sprite = {bright=0.5,size=0.25,scale=0.03,vscale=0.02,color=Color(255,20,40),z=-1,aa=true} + }}, + {ID = "!ST", x=34,y=60.5,w=18,h=13,tooltip="СТ: Применение пневматичеÑкого Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ Ñработка ÑтоÑночного тормоза",model = { + name="SPU_ST",lamp = {speed=10,model = "models/metrostroi_train/81-718/lamps/litlle_r.mdl",z=1, var="SPU_ST", getfunc=function(ent) return ent:GetPackedBool("SPU_ST") and (ent:GetPackedBool("VD1") and 1 or 0.8) or 0 end}, + sprite = {bright=0.5,size=0.25,scale=0.03,vscale=0.02,color=Color(255,20,40),z=-1,aa=true} + }}, + {ID = "!CUV", x=53,y=60.5,w=18,h=13,tooltip="ЦУВ: Ðевключение ЦУВ на вагоне",model = { + name="SPU_CUV",lamp = {speed=10,model = "models/metrostroi_train/81-718/lamps/litlle_r.mdl",z=1, var="SPU_CUV"}, + sprite = {bright=0.5,size=0.25,scale=0.03,vscale=0.02,color=Color(255,20,40),z=-1,aa=true} + }}, + {ID = "!AVU", x=72,y=60.5,w=18,h=13,tooltip="ÐВУ: Сработка ÐВУ",model = { + name="SPU_AVU",lamp = {speed=10,model = "models/metrostroi_train/81-718/lamps/litlle_r.mdl",z=1, var="SPU_AVU", getfunc=function(ent) return ent:GetPackedBool("SPU_AVU") and (ent:GetPackedBool("VD1") and 1 or 0.8) or 0 end}, + sprite = {bright=0.5,size=0.25,scale=0.03,vscale=0.02,color=Color(255,20,40),z=-1,aa=true} + }}, + {ID = "!AIP", x=91,y=60.5,w=18,h=13,tooltip="ÐИП",model = { + name="SPU_AIP",lamp = {speed=10,model = "models/metrostroi_train/81-718/lamps/litlle_r.mdl",z=1, var="SPU_AIP"}, + sprite = {bright=0.5,size=0.25,scale=0.03,vscale=0.02,color=Color(255,20,40),z=-1,aa=true} + }}, + + {ID = "!RIP", x=148,y=60.5,w=18,h=13,tooltip="РИП",model = { + name="SPU_RIP",lamp = {speed=10,model = "models/metrostroi_train/81-718/lamps/little_g.mdl",z=1, var="SPU_RIP"}, + sprite = {bright=0.5,size=0.25,scale=0.03,vscale=0.02,color=Color(125,200,15),z=-1,aa=true} + }}, + {ID = "!KVD", x=167,y=60.5,w=18,h=13,tooltip="КВД: Лампа Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ…Ð¾Ð´Ð¾Ð²Ð¾Ð³Ð¾ режима ÑиÑтемой ÐРС",model = { + name="SPU_KVD",lamp = {speed=10,model = "models/metrostroi_train/81-718/lamps/little_g.mdl",z=1, var="SPU_KVD", getfunc=function(ent) return ent:GetPackedBool("SPU_KVD") and (ent:GetPackedBool("VD1") and 1 or 0.8) or 0 end}, + sprite = {bright=0.5,size=0.25,scale=0.03,vscale=0.02,color=Color(125,200,15),z=-1,aa=true} + }}, + {ID = "!VS1", x=186,y=60.5,w=18,h=13,tooltip="ВС1: Выключенное ÑоÑтоÑние вентилÑции 1 группы",model = { + name="SPU_VS1",lamp = {speed=10,model = "models/metrostroi_train/81-718/lamps/little_g.mdl",z=1, var="SPU_VS1"}, + sprite = {bright=0.5,size=0.25,scale=0.03,vscale=0.02,color=Color(125,200,15),z=-1,aa=true} + }}, + {ID = "!VS2", x=205,y=60.5,w=18,h=13,tooltip="ВС2: Выключенное ÑоÑтоÑние вентилÑции 2 группы",model = { + name="SPU_VS2",lamp = {speed=10,model = "models/metrostroi_train/81-718/lamps/little_g.mdl",z=1, var="SPU_VS2"}, + sprite = {bright=0.5,size=0.25,scale=0.03,vscale=0.02,color=Color(125,200,15),z=-1,aa=true} + }}, + } +} +ENT.ButtonMap["BZOS"] = { + pos = Vector(435.5,-62.6,-5.5), + ang = Angle(0,180,90), + width = 16, + height = 60, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "!VH2",x=8, y=19, radius=4, tooltip="Лампа тревоги охранной Ñигнализации", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl",z=-1,var="VH2",color=Color(255,56,30)}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,56,30),z=0,} + }}, + {ID = "!VH1",x=8, y=30, radius=4, tooltip="Лампа Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¾Ñ…Ñ€Ð°Ð½Ð½Ð¾Ð¹ Ñигнализации", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl",z=-1,var="VH1",color=Color(175,250,20)}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(175,250,20),z=0,} + }}, + {ID = "SAB1Toggle",x=8, y=45, radius=8, tooltip="Выключатель охранной Ñигнализации", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t2.mdl",ang = 180,z=-4, + var="SAB1",speed=16, + sndvol = 0.5,snd = function(val) return val and "pnm_on" or "pnm_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + } +} + +ENT.ButtonMap["UAVAPanel"] = { + pos = Vector(450,-48,-6), + ang = Angle(0,270,90), + width = 180, + height = 200, + scale = 0.0625, + + buttons = { + {ID = "UAVAToggle",x=0, y=0, w=60, h=200, tooltip="УÐÐ’Ð: Включение автоматичеÑкого Ð²Ñ‹ÐºÐ»ÑŽÑ‡Ð°Ñ‚ÐµÐ»Ñ Ð°Ð²Ñ‚Ð¾Ñтопа", model = { + plomb = {var="UAVAPl", ID="UAVAPl",}, + var="UAVA", + sndid="UAVALever",sndvol = 1, snd = function(val) return val and "uava_on" or "uava_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "UAVACToggle",x=60, y=0, w=120, h=200, tooltip="ВоÑÑтановление контактов УÐÐ’Ð",var="UAVAC",states={"Train.Buttons.UAVAOff","Train.Buttons.UAVAOn"}}, + } +} + +ENT.ButtonMap["Stopkran"] = { + pos = Vector(402,62,16.90), + ang = Angle(0,0,90), + width = 200, + height = 1300, + scale = 0.1/2, + buttons = { + {ID = "EmergencyBrakeValveToggle",x=0,y=0,w=200,h=1300,tooltip="", tooltip="",tooltip="",states={"Train.Buttons.Closed","Train.Buttons.Opened"},var="EmergencyBrakeValve"}, + } +} +ENT.ClientProps["stopkran"] = { + model = "models/metrostroi_train/81-717/stop_mvm.mdl", + pos = Vector(409.45,62.15,11.40), + ang = Angle(0,0,0), + hideseat=0.2, +} +ENT.ClientSounds["EmergencyBrakeValve"] = {{"stopkran",function() return "disconnect_valve" end,1,1,50,1e3,Angle(-90,0,0)}} + +ENT.ButtonMap["FrontPneumatic"] = { + pos = Vector(470-9,-45.0,-58.0+5), + 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(449+11, -31, -62), + ang = Angle(-15,-90,0), + hide = 2, +} +ENT.ClientProps["FrontTrain"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_blue.mdl", + pos = Vector(449+11, 31, -62), + 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-1,45.0,-58.0+5), + ang = Angle(0,270,90), + width = 900, + height = 100, + scale = 0.1, + + buttons = { + {ID = "RearTrainLineIsolationToggle",x=500, y=0, w=400, h=100, tooltip="",var="RtI",states={"Train.Buttons.Opened","Train.Buttons.Closed"}}, + {ID = "RearBrakeLineIsolationToggle",x=000, y=0, w=400, h=100, tooltip="",var="RbI",states={"Train.Buttons.Opened","Train.Buttons.Closed"}}, + } +} +ENT.ClientProps["RearTrain"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_blue.mdl", + pos = Vector(-450-22, -34, -62), + ang = Angle(-15,90,0), + hide = 2, +} +ENT.ClientProps["RearBrake"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_red.mdl", + pos = Vector(-450-22, 34, -62), + 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-9.5+22,50+20,-60+2+5), + 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-9.5+22,36+20,-78+2+5), + ang = Angle(-90,90,-90), + 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(-185,-68,-50), + ang = Angle(0,0,90), + width = 170, + height = 80, + scale = 0.1, + hideseat=0.1, + hide=true, + screenHide = true, + + buttons = { + {ID = "AirDistributorDisconnectToggle",x=0,y=0,w= 170,h = 80,tooltip="",var="AD",states={"Train.Buttons.On","Train.Buttons.Off"}}, + } +} +ENT.ButtonMap["CabinDoor"] = { + pos = Vector(414.5,64,56.7), + ang = Angle(0,0,90), + width = 642, + height = 2000, + scale = 0.1/2, + buttons = { + {ID = "CabinDoor",x=0,y=0,w=642,h=2000, 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.ButtonMap["OtsekDoor1"] = { + pos = Vector(394.5,26,11.6), + ang = Angle(0,180,90), + width = 310, + height = 130, + scale = 0.1/2, + buttons = { + {ID = "OtsekDoor1",x=0,y=0,w=310,h=130,tooltip="",model = { + var="OtsekDoor1",sndid="door_otsek1", + sndvol = 1,snd = function(val) return "otsek_door_close" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + states = {"Train.Buttons.Closed","Train.Buttons.Opened"} + }}, + } +} +ENT.ButtonMap["OtsekDoor2"] = { + pos = Vector(394.5,26,-14), + ang = Angle(0,180,90), + width = 310, + height = 130, + scale = 0.1/2, + buttons = { + {ID = "OtsekDoor2",x=0,y=0,w=310,h=130,tooltip="",model = { + var="OtsekDoor2",sndid="door_otsek2", + sndvol = 1,snd = function(val) return "otsek_door_close" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + states = {"Train.Buttons.Closed","Train.Buttons.Opened"} + }}, + } +} + +ENT.ButtonMap["PassengerDoor"] = { + pos = Vector(390-12.2,29,50.6),--28 + ang = Angle(0,90,90), + width = 642, + height = 2000, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=642,h=2000,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(390-12.2,29+32,50.6),--28 + ang = Angle(0,-90,90), + width = 642, + height = 2000, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=642,h=2000,tooltip=""}, + } +} +ENT.ButtonMap["CabinDoor"] = { + pos = Vector(411,64,50), + ang = Angle(0,0,90), + width = 665, + height = 2000, + scale = 0.1/2, + buttons = { + {ID = "CabinDoor",x=0,y=0,w=665,h=2000,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.ButtonMap["RearDoor"] = { + pos = Vector(-470-3,-16,48.4-2), + ang = Angle(0,90,90), + width = 642, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "RearDoor",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["PneumaticPanels"] = { + pos = Vector(461,-23,6), + ang = Angle(0,-108,90), + width = 230, + height = 120, + scale = 0.0625, + + buttons = { + {ID = "!BLTLPressure", x=65, y=62, radius=45, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BLTLPressure"),ent:GetPackedRatio("TLPressure")*16,ent:GetPackedRatio("BLPressure")*16) end}, + {ID = "!BCPressure", x=166, y=62, radius=45, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BCPressure"),ent:GetPackedRatio("BCPressure")*6) end}, + } +} +ENT.ButtonMap["HVMeters"] = { + pos = Vector(430.3,-63,-5.5), + ang = Angle(0,-180,90), + width = 205, + height = 30, + scale = 0.0625, + + buttons = { + {ID = "!I13", x=0, y=0, w=46, h=30, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesCurrent"),ent:GetPackedRatio("EnginesCurrent13")*1000-500) end}, + {ID = "!I24", x=52, y=0, w=46, h=30, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesCurrent"),ent:GetPackedRatio("EnginesCurrent24")*1000-500) end}, + {ID = "!HVVoltage", x=104, y=0, w=46, h=30, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesVoltage"),ent:GetPackedRatio("EnginesVoltage")*1000) end}, + {ID = "!BatteryCurrent", x=159, y=0, w=46, h=30, tooltip="", tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BatteryCurrent"),ent:GetPackedRatio("BatteryCurrent")*150) end}, + } +} +-------------------------------------------------------------------------------- +ENT.ClientProps["brake013"] = { + model = "models/metrostroi_train/81-717/cran13.mdl", + pos = Vector(439,-24.3,-12.0), + ang = Angle(0,-180,0), + hideseat = 0.2, +} +if not ENT.ClientSounds["br_013"] then ENT.ClientSounds["br_013"] = {} end +table.insert(ENT.ClientSounds["br_013"],{"brake013",function(ent,_,var) return "br_013" end,0.7,1,50,1e3,Angle(-90,0,0)}) +-------------------------------------------------------------------------------- +ENT.ClientProps["ampermeter1"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(428.886963,-63.118961,-7.808218), + ang = Angle(180.000000,0.000000,-90.000000), + bscale = Vector(1,1,0.95), + hideseat = 0.2, +} +ENT.ClientProps["ampermeter2"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(428.886963-3.16,-63.118961,-7.808218), + ang = Angle(180.000000,0.000000,-90.000000), + bscale = Vector(1,1,0.95), + hideseat = 0.2, +} +ENT.ClientProps["voltmeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(428.886963-3.16*2.06,-63.118961,-7.91), + ang = Angle(180.000000,0.000000,-90.000000), + bscale = Vector(1,1,0.95), + hideseat = 0.2, +} +ENT.ClientProps["ampermeter3"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(428.886963-3.16*3.145,-63.118961,-7.91), + ang = Angle(180.000000,0.000000,-90.000000), + bscale = Vector(1,1,0.95), + hideseat = 0.2, +} +ENT.ClientProps["volt1"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(458.416321,7.570844,-8.262030), + ang = Angle(0.000000,-90.000000,87.000000), + bscale = Vector(1,1,1.47), + hideseat = 0.2, +} + + + +ENT.ClientProps["bortlamps1"] = { + model = "models/metrostroi_train/81-718/bort_lamps_body.mdl", + pos = Vector(-52,67,45.5), + ang = Angle(0,0,0), + hide = 2, +} +ENT.ClientProps["bortlamp1_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = ENT.ClientProps.bortlamps1.pos+Vector(0,0.9,3.25), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp1_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = ENT.ClientProps.bortlamps1.pos+Vector(0,0.9,-0.1), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp1_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = ENT.ClientProps.bortlamps1.pos+Vector(0,0.9,-3.3), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamps2"] = { + model = "models/metrostroi_train/81-718/bort_lamps_body.mdl", + pos = Vector(39,-67,45.5), + ang = Angle(0,180,0), + hide = 2, +} +ENT.ClientProps["bortlamp2_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = ENT.ClientProps.bortlamps2.pos+Vector(0,-0.85,3.2), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp2_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = ENT.ClientProps.bortlamps2.pos+Vector(0,-0.85,-0.1), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp2_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = ENT.ClientProps.bortlamps2.pos+Vector(0,-0.85,-3.35), + ang = Angle(0,180,0), + nohide = true, +} +-------------------------------------------------------------------------------- +ENT.ClientProps["PB"] = { + model = "models/metrostroi_train/81-707/pedal.mdl", + pos = Vector(451.472687,19.217855,-38.302654), + ang = Angle(0.000000,-90.000000,40.000000), + hideseat=0.2, +} + +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,1,1,35,1e3,Angle(-90,0,0)}) +-------------------------------------------------------------------------------- +-- Add doors +--[[ local function GetDoorPosition(i,k,j) + if j == 0 + then return Vector(338.2-230.1*i+(1-k)*0.8,-65.449*(1-2*k),0.761) + else return Vector(338.2-230.1*i+(1-k)*0.8,-65.449*(1-2*k),0.761) + end +end +for i=0,3 do + for k=0,1 do + ENT.ClientProps["door"..i.."x"..k.."a"] = { + model = "models/metrostroi_train/81-718/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-718/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-718/81-718_doors_pos1.mdl", + pos = Vector(338.445,65.164,0.807), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door1x1"] = { + model = "models/metrostroi_train/81-718/81-718_doors_pos2.mdl", + pos = Vector(108.324,65.164,0.807), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door2x1"] = { + model = "models/metrostroi_train/81-718/81-718_doors_pos3.mdl", + pos = Vector(-122.182+0.4,65.164,0.807), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door3x1"] = { + model = "models/metrostroi_train/81-718/81-718_doors_pos4.mdl", + pos = Vector(-351.531,65.164,0.807), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door0x0"] = { + model = "models/metrostroi_train/81-718/81-718_doors_pos4.mdl", + pos = Vector(338.445,-65.164,0.807), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door1x0"] = { + model = "models/metrostroi_train/81-718/81-718_doors_pos3.mdl", + pos = Vector(108.324,-65.164,0.807), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door2x0"] = { + model = "models/metrostroi_train/81-718/81-718_doors_pos2.mdl", + pos = Vector(-122.182+0.6,-65.164,0.807), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door3x0"] = { + model = "models/metrostroi_train/81-718/81-718_doors_pos1.mdl", + pos = Vector(-351.531,-65.164,0.807), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["Lamp_RTM"] = { + model = "models/metrostroi_train/81-717/rtmlamp.mdl", + pos = Vector(408.6,-51.3,10.7), + ang = Angle(0.000000,180.000000,0.000000), + hideseat = 0.2, +} +ENT.ClientProps["door1"] = { + model = "models/metrostroi_train/81-718/door_torec.mdl", + pos = Vector(-473.749,15.924,-1.926), + ang = Angle(0,-90,0), + hide = 2, +} +ENT.ClientProps["door2"] = { + model = "models/metrostroi_train/81-717/cab_door.mdl", + pos = Vector(377.322,28.267,-1.599), + ang = Angle(0,-90,0), + hide = 2, +} +ENT.ClientProps["door3"] = { + model = "models/metrostroi_train/81-718/door_cabine.mdl", + pos = Vector(443.493,65.111,0.277), + ang = Angle(0,-90,0), + hide = 2, +} + +ENT.ClientProps["UAVALever"] = { + model = "models/metrostroi_train/81-703/cabin_uava.mdl", + pos = Vector(451.8,-55.9,-15.6), + ang = Angle(3,-180,0), + hideseat=0.2, +} +ENT.ClientProps["E_informator"] = { + model = "models/metrostroi_train/equipment/rri_informator_portable.mdl", + pos = Vector(390,-29.5,-34), + ang = Angle(0,180,0), + hideseat=0.2, +} +ENT.ButtonMap["RRIScreen"] = { + pos = ENT.ClientProps["E_informator"].pos-Vector(2,-2.9,-5), + ang = Angle(0,-90,90), + width = 121, + height = 103, + scale = 0.07, + hide=true, + hideseat=0.2, + + buttons = { + {ID = "RRIUp",x=30,y=60,radius=10,tooltip=""}, + {ID = "RRIDown",x=30,y=80,radius=10,tooltip=""}, + {ID = "RRILeft",x=20,y=70,radius=10,tooltip=""}, + {ID = "RRIRight",x=40,y=70,radius=10,tooltip=""}, + } +} +ENT.ButtonMap["RRI"] = { + pos = ENT.ClientProps["E_informator"].pos-Vector(-0.65,-0.5,-5), + ang = Angle(0,-90,0), + width = 60, + height = 25, + scale = 0.0625, + hideseat=0.2, + + buttons = { + --[[ {ID = "RRIEnableToggle",x=10,y=12.5,radius=10,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=-4, + var="RRIEnable",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "!RRIRewind",x=30,y=12.5,radius=0,model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_b_a.mdl",ang = 180,z=-3, + getfunc = function(ent) return ent:GetPackedRatio("RRIRewind") end, + var="RRIRewind",speed=8, + sndvol = 0.5,snd = function(_,val) return val==2 and "triple_0-up" or val==0 and "triple_0-down" or "triple_up-0" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "RRIRewindSet2",x=30-5,y=12.5-10,w=10,h=10,tooltip=""}, + {ID = "RRIRewindSet0",x=30-5,y=12.5,w=10,h=10,tooltip=""}, + + {ID = "RRIAmplifierToggle",x=50,y=12.5,radius=10,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=-4, + var="RRIAmplifier",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }},--]] + {ID = "!RRIOn",x=70,y=12.5,radius=10,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",z = -13, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=62,x=-0.3,y=-0.3,z=20.6, var="RRIOn", color=Color(210,170,255)}, + }}, + } +} + + +local xpos = { + -417.6, + -354.2, + -285.5, + -236.0, + -186.6, + -123, + -55.62, + -11.79+5.7, + 46.24-2.8, + 104.27+2.65, + 162.30+12.25, + 220.33+3.8, + 278.36-4.9, + 336.3, +} +for i = 0,27 do + ENT.ClientProps["lamp1_"..i+1] = { + model = "models/metrostroi_train/81-717/lamps/lamp_typ2.mdl", + pos = Vector(xpos[math.floor(i/2)+1], 29.7-(i%2)*59.4, 63.3), + ang = Angle(0,0,-8+(i%2)*16), + hideseat = 1.1, + } +end +local yventpos = { + -414.5+0*117, + -414.5+1*117+6.2, + -414.5+2*117+5, + -414.5+3*117+2, + -414.5+4*117+0.5, + -414.5+5*117-2.3, + -414.5+6*117-2.3, +} +for i=1,7 do + ENT.ClientProps["vent"..i] = { + model = "models/metrostroi_train/81-720/vent.mdl", + pos = Vector(yventpos[i],0,62), + ang = Angle(0,0,0), + hide = 1.1, + } +end +ENT.ClientProps["lampcab1"] = { + model = "models/metrostroi_train/81-717/lamps/lamp_typ2.mdl", + pos = Vector(441.6,0,55.5), + ang = Angle(0,-90,0), + color=Color(214*1,181*1.1,124*1.1), + hideseat=0.2, +} +ENT.ClientProps["lampcab2"] = { + model = "models/metrostroi_train/81-717/lamps/lamp_typ2.mdl", + pos = Vector(426.7,0,55.5), + ang = Angle(0,-90,0), + color=Color(214,181,124), + hideseat=0.2, +} +ENT.Lights = { + [40] = { "headlight",Vector(456.94,7.668623,-1.99856),Angle(124.000000,180.000000,0.000000),Color(54,135,0),farz = 9,nearz = 1,shadows = 0,brightness = 4,fov = 80, hidden = "volt1" }, + [41] = { "headlight",Vector(459.34,-28.504929,4.271693),Angle(122.713928,210.196899,45.703571),Color(255,130,25),farz = 9,nearz = 1,shadows = 1,brightness = 2,fov = 110, hidden = "brake_line" }, + [42] = { "headlight",Vector(457.08,-34.343376,4.464308),Angle(122.713928,210.196899,45.703571),Color(255,130,25),farz = 9,nearz = 1,shadows = 1,brightness = 2,fov = 110, hidden = "brake_line" }, + [43] = { "headlight",Vector(428.88,-62.986473,-4.12),Angle(96.323837,89.479485,-2.365463),Color(0,187,20),farz = 9,nearz = 1,shadows = 0,brightness = 2,fov = 80, hidden = "ampermeter1" }, + [44] = { "headlight",Vector(425.71,-62.986473,-4.12),Angle(96.323837,89.479485,-2.365463),Color(0,187,20),farz = 9,nearz = 1,shadows = 0,brightness = 2,fov = 80, hidden = "ampermeter2" }, + [45] = { "headlight",Vector(422.32,-62.986473,-4.12),Angle(96.323837,89.479485,-2.365463),Color(110,162,222),farz = 9,nearz = 1,shadows = 0,brightness = 2,fov = 80, hidden = "ampermeter3" }, + [46] = { "headlight",Vector(418.89,-62.986473,-4.12),Angle(96.323837,89.479485,-2.365463),Color(110,162,222),farz = 9,nearz = 1,shadows = 0,brightness = 2,fov = 80, hidden = "voltmeter" }, + -- Headlight glow + [1] = { "headlight", Vector(460,0,-40), Angle(0,0,0), Color(216,161,92), fov=90,farz=5144,brightness = 4, texture = "models/metrostroi_train/equipment/headlight",shadows = 1,headlight=true}, + [2] = { "headlight", Vector(460,0,50), Angle(-20,0,0), Color(255,0,0), fov=160 ,brightness = 0.3, farz=450,texture = "models/metrostroi_train/equipment/headlight2",shadows = 0,backlight=true}, + + [3] = { "headlight", Vector(365,-9,50), Angle(50,40,-0), Color(206,135,80), hfov=80, vfov=80,farz=100,brightness = 6,shadows=1}, + [4] = { "headlight", Vector(365,-51,50), Angle(50,40,-0), Color(206,135,80), hfov=80, vfov=80,farz=100,brightness = 6,shadows=1}, + + -- Reverse + [8] = { "light",Vector(465,-46.8, 52.8) , Angle(0,0,0), Color(255,50,50), brightness = 0.2, scale = 2.5, texture = "sprites/light_glow02", size = 2 }, + [9] = { "light",Vector(465, 47, 52.8) , Angle(0,0,0), Color(255,50,50), brightness = 0.2, scale = 2.5, texture = "sprites/light_glow02", size = 2 }, + + [11] = { "dynamiclight", Vector( 200, 0, -0), Angle(0,0,0), Color(255,175,50), brightness = 3, distance = 400 , fov=180,farz = 128, changable = true }, + [12] = { "dynamiclight", Vector( 0, 0, -0), Angle(0,0,0), Color(255,175,50), brightness = 3, distance = 400, fov=180,farz = 128, changable = true }, + [13] = { "dynamiclight", Vector(-200, 0, -0), Angle(0,0,0), Color(255,175,50), brightness = 3, distance = 400 , fov=180,farz = 128, changable = true }, + + [10] = { "dynamiclight", Vector( 435, 0, 20), Angle(0,0,0), Color(216,161,92), distance = 550, brightness = 0.3,hidden = "Cabine"}, + -- Side lights + [15] = { "light",Vector(-52,67,45.5)+Vector(0,0.9,3.25), Angle(0,0,0), Color(254,254,254), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [16] = { "light",Vector(-52,67,45.5)+Vector(0,0.9,-0.02), Angle(0,0,0), Color(40,240,122), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [17] = { "light",Vector(-52,67,45.5)+Vector(0,0.9,-3.3), Angle(0,0,0), Color(254,210,18), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [18] = { "light",Vector(39,-67,45.5)+Vector(0,-0.9,3.25), Angle(0,0,0), Color(254,254,254), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [19] = { "light",Vector(39,-67,45.5)+Vector(0,-0.9,-0.02), Angle(0,0,0), Color(40,240,122), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [20] = { "light",Vector(39,-67,45.5)+Vector(0,-0.9,-3.3), Angle(0,0,0), Color(254,210,18), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + + [30] = { "light", Vector(465,-16,-29), Angle(0,0,0), Color(255,220,180), brightness = 0.2, scale = 2.5, texture = "sprites/light_glow02", size = 2}, + [31] = { "light", Vector(465, 16,-29), Angle(0,0,0), Color(255,220,180), brightness = 0.2, scale = 2.5, texture = "sprites/light_glow02", size = 2}, + + Lamp_RTM = {"light", Vector(408.6,-51.3,10.7), Angle(0,0,0),Color(255,180,60),brightness = 0.4,scale = 0.03, texture = "sprites/light_glow02", hidden="Lamp_RTM"}, +} + +--[[ +ENT.ClientProps["helper_light"] = { + model = "models/props_junk/PopCan01a.mdl", + pos = Vector(456.691284,14.138382,6.584029), + ang = Angle(-136.613632,-95.636734,137.434570), +}]] + +--ENT.AutoPos = {Vector(407.3,-10.5,47),Vector(419.3,-57.5,47.5)} +--local X = Material( "metrostroi_skins/81-717/6.png") + +local tbl = {[0]=-0.25,0.00,0.04,0.09,0.13,0.17,0.20,0.27,0.33,0.42,0.56,0.73,1.00} +function ENT:Initialize() + self.BaseClass.Initialize(self) + self.RRIScreen = self:CreateRT("717RRI",128,128) + + 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.TISUVol = 0 + self.TISUFreq = 0 + + self.VentCab = 0 + + self.VentRand = {} + self.VentState = {} + self.VentVol = {} + for i=1,7 do + self.VentRand[i] = math.Rand(0.5,2) + self.VentState[i] = 0 + self.VentVol[i] = 0 + end +end +for i=0,3 do + ENT.ClientProps["TrainNumberL"..i] = { + model = "models/metrostroi_train/common/bort_numbers.mdl", + pos = Vector(41+16+i*6.6-5*6.6/2,67.4,-17.8), + ang = Angle(0,180,0), + skin=i, + hide = 1.5, + callback = function(ent) + ent.WagonNumber = false + end, + } + ENT.ClientProps["TrainNumberR"..i] = { + model = "models/metrostroi_train/common/bort_numbers.mdl", + pos = Vector(64+16-i*6.6-5*6.6/2,-67.4,-17.8), + ang = Angle(0,0,0), + skin=i, + hide = 1.5, + callback = function(ent) + ent.WagonNumber = false + end, + } +end +function ENT:UpdateWagonNumber() + local count = self.WagonNumber < 250 and 3 or 4 + for i=0,3 do + self:ShowHide("TrainNumberL"..i,i 0,cabStrength) + + local HL1 = self:Animate("Headlights1",self:GetPackedBool("Headlights1") and 1 or 0,0,1,6,false) + local HL2 = self:Animate("Headlights2",self:GetPackedBool("Headlights2") and 1 or 0,0,1,6,false) + local RL = self:Animate("RedLights_a",self:GetPackedBool("RedLights") and 1 or 0,0,1,6,false) + self:ShowHideSmooth("Headlights_1",HL1) + self:ShowHideSmooth("Headlights_2",HL2) + local bright = HL1*0.5 + HL2*0.5 + self:SetLightPower(30,bright > 0,bright) + self:SetLightPower(31,bright > 0,bright) + + self:ShowHideSmooth("RedLights",RL) + self:SetLightPower(8,RL > 0,RL) + self:SetLightPower(9,RL > 0,RL) + + local headlight = HL1*0.6+HL2*0.4 + self:SetLightPower(1,headlight>0,headlight) + self:SetLightPower(2,self:GetPackedBool("RedLights"),RL) + + if IsValid(self.GlowingLights[1]) then + if self:GetPackedRatio("Headlight") < 0.5 and self.GlowingLights[1]:GetFarZ() ~= 3144 then + self.GlowingLights[1]:SetFarZ(3144) + end + if self:GetPackedRatio("Headlight") > 0.5 and self.GlowingLights[1]:GetFarZ() ~= 5144 then + self.GlowingLights[1]:SetFarZ(5144) + end + end + + local RN = self:GetPackedBool("RouteNumberWork",false) + + self:ShowHide("route1",RN) + self:ShowHide("route2",RN) + self:ShowHide("route1_r",RN) + self:ShowHide("route2_r",RN) + self:ShowHide("route1_s",RN) + self:ShowHide("route2_s",RN) + + local lamps_rtm = self:Animate("lamps_rtm",self:GetPackedBool("VPR") and 1 or 0,0,1,8,false) + self:SetSoundState("vpr",lamps_rtm>0 and 1 or 0,1) + self:ShowHideSmooth("Lamp_RTM",lamps_rtm or 0) + self:SetLightPower("Lamp_RTM",lamps_rtm > 0, lamps_rtm) + + local Bortlamp_w = self:Animate("Bortlamp_w",self:GetPackedBool("DoorsW") and 1 or 0,0,1,16,false) + local Bortlamp_g = self:Animate("Bortlamp_g",self:GetPackedBool("GRP") and 1 or 0,0,1,16,false) + local Bortlamp_y = self:Animate("Bortlamp_y",self:GetPackedBool("BrW") and 1 or 0,0,1,16,false) + self:ShowHideSmooth("bortlamp1_w",Bortlamp_w) + self:ShowHideSmooth("bortlamp1_g",Bortlamp_g) + self:ShowHideSmooth("bortlamp1_y",Bortlamp_y) + self:ShowHideSmooth("bortlamp2_w",Bortlamp_w) + self:ShowHideSmooth("bortlamp2_g",Bortlamp_g) + self:ShowHideSmooth("bortlamp2_y",Bortlamp_y) + self:SetLightPower(15, Bortlamp_w > 0.5) + self:SetLightPower(18, Bortlamp_w > 0.5) + self:SetLightPower(16, Bortlamp_g > 0.5) + self:SetLightPower(19, Bortlamp_g > 0.5) + self:SetLightPower(17, Bortlamp_y > 0.5) + self:SetLightPower(20, Bortlamp_y > 0.5) + + local activeLights = 0 + for i = 1,28 do + local colV = self:GetNW2Vector("lamp"..i) + local col = Color(colV.x,colV.y,colV.z) + local state = self:Animate("Lamp1_"..i,self:GetPackedBool("lightsActive"..i) and 1 or 0,0,1,6,false) + self:ShowHideSmooth("lamp1_"..i,state,col) + activeLights = activeLights + state + end + for i=11,13 do + local col = self:GetNW2Vector("lampD"..i) + if self.LightsOverride[i].vec ~= col then + self.LightsOverride[i].vec = col + self.LightsOverride[i][4] = Color(col.x,col.y,col.z) + self:SetLightPower(i, false) + else + self:SetLightPower(i, activeLights > 0,activeLights/28) + end + end + self:Animate("brake_line", self:GetPackedRatio("BLPressure"), 0.14, 0.873, 64,12)--256,2) + self:Animate("train_line", self:GetPackedRatio("TLPressure"), 0.145, 0.876, 64,12)--4096,2) + self:Animate("brake_cylinder", self:GetPackedRatio("BCPressure"), 0.142, 0.874, 64,12)--64,12) + + self:Animate("brake013", Cpos[self:GetPackedRatio("B013")] or 0, 0.03, 0.458, 256,24) + self:Animate("controller", (self:GetPackedRatio("Controller")+3)/6, 0.05, 0.33, 3,false) + self:Animate("kr_wrench", self:GetPackedRatio("KR",0),0.3+0.05,0.8-0.05, 3,false) + self:Animate("kru_wrench", self:GetPackedRatio("KRU",0),0.3+0.05,0.8-0.05, 3,false) + self:ShowHide("kr_wrench",self:GetNW2Int("Wrench",0) == 1) + self:ShowHide("kru_wrench",self:GetNW2Int("Wrench",0) == 2) + + self:Animate("volt1", self:GetPackedRatio("BatteryVoltage"), 0.867,0.626,45,2) + self:Animate("voltmeter",self:GetPackedRatio("EnginesVoltage"),0.866, 0.621-0.008,nil,nil) + self:Animate("ampermeter1",self:GetPackedRatio("EnginesCurrent13"),0.859+0.003, 0.625-0.003,nil,nil) + self:Animate("ampermeter2",self:GetPackedRatio("EnginesCurrent24"),0.859+0.003, 0.625-0.003,nil,nil) + self:Animate("ampermeter3",self:GetPackedRatio("BatteryCurrent"),0.859+0.01, 0.625-0.01,nil,nil) + + self:Animate("UAVALever", self:GetPackedBool("UAVA") and 1 or 0, 0,0.6, 128, 3,false) + self:Animate("PB",self:GetPackedBool("PB") and 1 or 0,0,0.2, 12,false) + self:Animate("stopkran", self:GetPackedBool("EmergencyBrakeValve") and 0 or 1, 0.25,0, 128, 3,false) + --self:Animate("Autodrive", self:GetPackedBool(132) and 1 or 0, 0,1, 16, false) + + local otsek1 = self:Animate("door_otsek1",self:GetPackedBool("OtsekDoor1") and 1 or 0,0,0.25,4,0.5) + local otsek2 = self:Animate("door_otsek2",(self:GetPackedBool("OtsekDoor2") or self.CurrentCamera == 9) and 1 or 0,0,0.25,4,0.5) + self:HidePanel("PVZ",otsek2<=0) + self:HidePanel("BUV_MPS",otsek2<=0) + self:HidePanel("BUV_MVD",otsek2<=0) + self:HidePanel("BUV_MALP1",otsek2<=0) + self:HidePanel("BUV_MALP2",otsek2<=0) + self:HidePanel("BUV_MIV",otsek2<=0) + self:HidePanel("BUV_MGR",otsek2<=0) + self:HidePanel("BUV_MLUA",otsek2<=0) + self:HidePanel("BUV_MUVK1",otsek2<=0) + self:HidePanel("BUV_MUVK2",otsek2<=0) + + self:HidePanel("RRI",otsek2<=0) + self:HidePanel("RRIScreen",otsek2<=0) + self:ShowHide("E_informator",otsek2>0) + + local door1 = self:Animate("door1",self:GetPackedBool("RearDoor") and 1 or 0,0,0.25,4,0.5) + local door2 = self:Animate("door2",self:GetPackedBool("PassengerDoor") and 1 or 0,1,0.8,4,0.5) + local door3 = self:Animate("door3",self:GetPackedBool("CabinDoor") and 1 or 0,0,0.25,4,0.5) + 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 < 1) then + self.Door2 = door2 < 1 + self:PlayOnce("door2","bass",self.Door2 and 1 or 0) + end + if self.Door3 ~= (door3 > 0) then + self.Door3 = door3 > 0 + self:PlayOnce("door3","bass",self.Door3 and 1 or 0) + end + if self.Otsek1 ~= (otsek1 > 0) then + self.Otsek1 = otsek1 > 0 + if not self.Otsek1 then + self:PlayOnce("door_otsek1","bass",1) + end + end + if self.Otsek2 ~= (otsek2 > 0) then + self.Otsek2 = otsek2 > 0 + if not self.Otsek2 then + self:PlayOnce("door_otsek2","bass",1) + end + end + + self:SetLightPower(3,self.Otsek1 and self:GetPackedBool("AppLights")) + self:SetLightPower(4,self.Otsek2 and self:GetPackedBool("AppLights")) + 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) + + + self:ShowHide("SPU_Speed1",self:GetPackedBool("Speedometer")) + self:ShowHide("SPU_Speed2",self:GetPackedBool("Speedometer")) + if self:GetPackedBool("Speedometer") then + local speed = self:GetPackedRatio("Speed")*100.0 + if IsValid(self.ClientEnts["SPU_Speed1"])then self.ClientEnts["SPU_Speed1"]:SetSkin(math.floor(speed)%10) end + if IsValid(self.ClientEnts["SPU_Speed2"])then self.ClientEnts["SPU_Speed2"]:SetSkin(math.floor(speed/10)) end + end + --print(self.ClientProps["a0"]) + -- 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) + --self:InitializeSounds() + 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.8+self.DoorLoopStates[id]*0.2) + local n_l = "door"..i.."x"..k--.."a" + --local n_r = "door"..i.."x"..k.."b" + local dlo = 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 + + + local speed = self:GetPackedRatio("Speed", 0)*100 + + local ventSpeedAdd = math.Clamp(speed/30,0,1) + + local v1state = self:GetPackedBool("Vent1Work") + local v2state = self:GetPackedBool("Vent2Work") + for i=1,7 do + local rand = self.VentRand[i] + local vol = self.VentVol[i] + local even = i%2 == 0 + local work = (even and v1state or not even and v2state) + local target = math.min(1,(work and 1 or 0)+ventSpeedAdd*rand*0.4)*2 + if self.VentVol[i] < target then + self.VentVol[i] = math.min(target,vol + dT/1.5*rand) + elseif self.VentVol[i] > target then + self.VentVol[i] = math.max(0,vol - dT/8*rand*(vol*0.3)) + end + self.VentState[i] = (self.VentState[i] + 10*((self.VentVol[i]/2)^3)*dT)%1 + local vol1 = math.max(0,self.VentVol[i]-1) + local vol2 = math.max(0,(self.VentVol[i-1] or self.VentVol[i+1])-1) + self:SetSoundState("vent"..i,vol1*(0.7+vol2*0.3),0.5+0.5*vol1+math.Rand(-0.01,0.01)) + if IsValid(self.ClientEnts["vent"..i]) then + self.ClientEnts["vent"..i]:SetPoseParameter("position",self.VentState[i]) + end + end + + --[[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*0.6,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 dT = self.DeltaTime + local rollingi = math.min(1,self.TunnelCoeff+math.Clamp((self.StreetCoeff-0.82)/0.3,0,1)) + local rollings = math.max(self.TunnelCoeff*0.6,self.StreetCoeff) + 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",0*rollingi*rol40,rol40p) + --self:SetSoundState("rolling_70",0*rollingi*rol70,rol70p) + --self:SetSoundState("rolling_80",0*rollingi*rol80,rol80p) + + + local rol32 = math.Clamp((speed-25)/13,0,1)*(1-math.Clamp((speed-40)/10,0,1)) + local rol32p = Lerp((speed-20)/50,0.8,1.2) + local rol68 = math.Clamp((speed-40)/10,0,1)*(1-math.Clamp((speed-50)/20,0,1)) + local rol68p = Lerp(0.6+(speed-68)/26*0.2,0.6,1.4) + local rol75 = math.Clamp((speed-55)/20,0,1) + local rol75p = Lerp(0.8+(speed-75)/15*0.2,0.6,1.2) + self:SetSoundState("rolling_32",rollingi*rol32,rol32p) + self:SetSoundState("rolling_68",rollingi*rol68,rol68p) + self:SetSoundState("rolling_75",rollingi*rol75,rol75p) +--[[ + local rol_motors = math.Clamp((speed-55)/10,0,1) ---ANY IDEAS?? MOTORS BACKGROUND SOUNDS AT HISPEED + local rol_motorsp = Lerp((speed-72)/25*0.2,0.85,1.1) + self:SetSoundState("rolling_motors",rol_motors,rol_motorsp) ---ANY IDEAS??--]] + + 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) + local parking_brake = self:GetPackedRatio("ParkingBrakePressure_dPdT",0) + local parking_brake_abs = math.Clamp(math.abs(parking_brake)-0.3,0,1) + if self.ParkingBrake1 ~= (parking_brake<1) then + self.ParkingBrake1 = (parking_brake<1) + if self.ParkingBrake1 then self:PlayOnce("parking_brake_en","bass",1,1) end + end + if self.ParkingBrake2 ~= (parking_brake>-0.8) then + self.ParkingBrake2 = (parking_brake>-0.8) + if self.ParkingBrake2 then self:PlayOnce("parking_brake_rel","bass",0.6,1) end + end + self:SetSoundState("parking_brake",parking_brake_abs,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) + 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)) + --self:SetSoundState("emer_brake",self.EmergencyValveRamp*0.8,1) + --self:SetSoundState("emer_brake",self.EmergencyValveRamp*0.8,1) + -- Compressor + self:SetSoundState("compressor",self:GetPackedBool("Compressor") and 0.6 or 0,1) + self:SetSoundState("compressor2",self:GetPackedBool("Compressor") and 0.8 or 0,1) + + local vCstate = self:GetPackedRatio("M1")/2 + if self.VentCab < vCstate then + self.VentCab = math.min(1,self.VentCab + dT/2.7) + elseif self.VentCab > vCstate then + self.VentCab = math.max(0,self.VentCab - dT/2.7) + end + self:SetSoundState("vent_cabl",math.Clamp(self.VentCab*2,0,1) ,1) + self:SetSoundState("vent_cabh",math.Clamp((self.VentCab-0.5)*2,0,1),1) + + local state = self:GetPackedRatio("RNState") + local freq = math.max(1,self:GetNW2Int("RNFreq",0)) + + self.TISUVol = math.Clamp(self.TISUVol+(state-self.TISUVol)*dT*8,0,1) + if freq > 12 then + self.TISUFreq = 12 + elseif freq > self.TISUFreq then + self.TISUFreq = math.min(self.TISUFreq+dT/2*12,12) + elseif freq < self.TISUFreq then + self.TISUFreq = freq--math.max(self.TISUFreq-dT/2*12,0) + end + local fq = 0.25+tbl[math.Round(self.TISUFreq)]*0.75 + self:SetSoundState("tisu",self.TISUVol,fq)--]] + + self:SetSoundState("ring",(self:GetPackedBool("Ring") or self:GetPackedBool("RingBZOS") and RealTime()%0.8<0.35) and 1 or 0,0.95) + + self:SetSoundState("bpsn",self:GetPackedBool("BBE") and 1 or 0,1.0) --FIXME громкоÑть по другому + + local cabspeaker = self:GetPackedBool("AnnCab") + local work = self:GetPackedBool("AnnPlay") + local buzz = self:GetPackedBool("AnnBuzz") and self:GetNW2Int("AnnouncerBuzz",-1) > 0 + for k in ipairs(self.AnnouncerPositions) do + self:SetSoundState("announcer_buzz"..k,(buzz and (k ~= 1 and work or k==1 and cabspeaker)) and 1 or 0,1) + end + for k,v in ipairs(self.AnnouncerPositions) do + if IsValid(self.Sounds["announcer"..k]) then + self.Sounds["announcer"..k]:SetVolume((k ~= 1 and work or k==1 and cabspeaker) and (v[3] or 1) or 0) + end + end +end + +function ENT:OnAnnouncer(volume,id) + local cabspeaker = self:GetPackedBool("AnnCab") + local work = self:GetPackedBool("AnnPlay") + return (id ~= 1 and work or id == 1 and cabspeaker) and volume or 0 +end + +function ENT:Draw() + self.BaseClass.Draw(self) +end +function ENT:DrawPost() + self.RTMaterial:SetTexture("$basetexture", self.RRIScreen) + self:DrawOnPanel("RRIScreen",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(64,64,128,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 location == "bass" then + if soundid == "K1" then + local id = range > 0 and "k1_on" or "k1_off" + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["k1_on"][1] = 440-Lerp(speed/0.1,0,330) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "K2" then + local id = range > 0 and "k2_on" or "k2_off" + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["k2_on"][1] = 440-Lerp(speed/0.1,0,330) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "K3" then + local id = range > 0 and "k3_on" or "k3_off" + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["k3_on"][1] = 440-Lerp(speed/0.1,0,330) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "KMR1" then + local id = range > 0 and "kmr1_on" or "kmr1_off" + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["kmr1_on"][1] = 440-Lerp(speed/0.1,0,330) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "KMR2" then + local id = range > 0 and "kmr2_on" or "kmr2_off" + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["kmr2_on"][1] = 440-Lerp(speed/0.1,0,330) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "brake" then + self:PlayOnce("brake_f",location,range,pitch) + self:PlayOnce("brake_b",location,range,pitch) + return + end + if soundid == "QF1" then + local id = range > 0 and "qf1_on" or "qf1_off" + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["qf1_on"][1] = 440-Lerp(speed/0.1,0,330) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "UAVAC" then + return "uava_reset",location,range,pitch + end + end + return soundid,location,range,pitch +end +Metrostroi.GenerateClientProps() diff --git a/lua/entities/gmod_subway_81-718/init.lua b/lua/entities/gmod_subway_81-718/init.lua new file mode 100644 index 0000000..6d586b1 --- /dev/null +++ b/lua/entities/gmod_subway_81-718/init.lua @@ -0,0 +1,732 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +ENT.BogeyDistance = 650 -- Needed for gm trainspawner + +--"DURASelectMain","DURASelectAlternate","DURAToggleChannel","DURAPowerToggle", +ENT.SyncTable = { + "SA5","SB3","SA7","SB1","SB2","SA8","SB4","SB5","SA9","SA13","SA14","SA15","SA2","SB6","SB7","SB8","SB10","SB9","SB11","SA16","SB12","SB13","SB14","SB15","SB16", + "SB6K","SB7K", + "SA1/1","SA2/1","SA4/1","SA5/1", + "SBR14","SBR15","SBR16", + "SA6","SA24","SB20","SB21", + "SF56","SF51","SF52","SF53","SF60","SF61","SF77","SF78","SF40","SF41","SF8","SF11","SF10","SF7","SF50","SF76","SF73","SF3","SF71","SF63","SF54","SF65","SF55","SF9","SF6","SF5","SF2", + "SF4","SF27","SF46","SF12","SF13","SF45","SF16","SF44","SF43","SF14","SF15","SF25","SF72","SF29","SF26","SF42","SF18","SF20","SF17","SF19","SF21","SF22","SF34","SF35","SF23","SF24", + "RC","VB","VTPR", + "DriverValveDisconnect","EPK","ParkingBrake","UAVA","UAVAC","PB","EmergencyBrakeValve","GV", + "SAP8","SAP13","SAP36","SAP12","SAP11","SAP23","SAP9","SAP10","SAP3","SAP39","SBP22","SBP6","SBP4","SAP14","SAP26","SAP24","SAB1", +} + +function ENT:Initialize() + self.Plombs = { + SA8 = true, + SA9 = true, + SA2 = true, + SAP23 = true, + SAP24 = true, + SB6 = true, + RC = true, + SAP26 = true, + UAVA = true, + Init = true, + } + + self:SetModel("models/metrostroi_train/81-718/81-718.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create seat entities + self.DriverSeat = self:CreateSeat("driver",Vector(417+5,-4,-28)) + self.InstructorsSeat = self:CreateSeat("instructor",Vector(425,50,-28),Angle(0,270,0)) + self.ExtraSeat1 = self:CreateSeat("instructor",Vector(410,35,-43),Angle(0,90,0),"models/vehicles/prisoner_pod_inner.mdl") + self.ExtraSeat2 = self:CreateSeat("instructor",Vector(433,-45,-43),Angle(0,90,0),"models/vehicles/prisoner_pod_inner.mdl") + self.ExtraSeat3 = self:CreateSeat("instructor",Vector(402,50,-43),Angle(0,50,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) + self.ExtraSeat3:SetColor(Color(0,0,0,0)) + self.ExtraSeat3:SetRenderMode(RENDERMODE_TRANSALPHA) + + -- Create bogeys + if Metrostroi.BogeyOldMap then + self.FrontBogey = self:CreateBogey(Vector( 317-5,0,-84),Angle(0,180,0),true,"717") + self.RearBogey = self:CreateBogey(Vector(-317+0,0,-84),Angle(0,0,0),false,"717") + self.FrontCouple = self:CreateCouple(Vector( 419.5,0,-62),Angle(0,0,0),true,"717") + self.RearCouple = self:CreateCouple(Vector(-419.5-6.545,0,-62),Angle(0,180,0),false,"717") + else + self.FrontBogey = self:CreateBogey(Vector( 317-11,0,-80),Angle(0,180,0),true,"717") + self.RearBogey = self:CreateBogey(Vector(-317+0,0,-80),Angle(0,0,0),false,"717") + self.RearCouple = self:CreateCouple(Vector(-423+2,0,-66),Angle(0,180,0),false,"717") + self.FrontCouple = self:CreateCouple(Vector( 410-3,0,-66),Angle(0,0,0),true,"717") + end + local pneumoPow = 1.0+(math.random()^0.4)*0.3 + self.FrontBogey.PneumaticPow = pneumoPow + self.RearBogey.PneumaticPow = pneumoPow + self.FrontCouple.EKKDisconnected = true + + -- Initialize key mapping + self.KeyMap = { + [KEY_W] = "BKCUKVUp", + [KEY_S] = "BKCUKVDown", + [KEY_1] = "BKCUKV1", + [KEY_2] = "BKCUKV2", + [KEY_3] = "BKCUKV3", + [KEY_4] = "BKCUKV4", + [KEY_5] = "BKCUKV5", + [KEY_6] = "BKCUKV6", + [KEY_7] = "BKCUKV7", + [KEY_8] = "BKCUKV8", + [KEY_9] = "KR-", + [KEY_0] = "KR+", + + [KEY_A] = {"SB1",helper="SA24Set"}, + [KEY_D] = "SB2", + [KEY_V] = {"SA5Toggle",helper="SA6Toggle"}, + [KEY_G] = "SB12Set", + [KEY_SPACE] = "PBSet", + + [KEY_EQUAL] = {"SB10Set",helper="SB20Set"}, + [KEY_MINUS] = {"SB11Set",helper="SB21Set"}, + + [KEY_PAD_ENTER] = "WrenchKR", + [KEY_PAD_0] = "DriverValveDisconnectToggle", + [KEY_PAD_DECIMAL] = "EPKToggle", + [KEY_LSHIFT] = { + def="BKCUControllerUnlock", + [KEY_SPACE] = "KVT", + + [KEY_7] = "WrenchNone", + [KEY_8] = "WrenchKRU", + [KEY_9] = "WrenchKR9", + [KEY_0] = "WrenchKR", + --[KEY_G] = "EnableBVEmerSet", + [KEY_1] = "SB7", + [KEY_2] = "SB5Set", + [KEY_L] = "DriverValveDisconnectToggle", + + [KEY_PAD_ENTER] = "KVWrenchNone", + }, + [KEY_LALT] = { + [KEY_UP] = "RRIUp", + [KEY_DOWN] = "RRIDown", + [KEY_LEFT] = "RRILeft", + [KEY_RIGHT] = "RRIRight", + }, + + [KEY_F] = "PneumaticBrakeUp", + [KEY_R] = "PneumaticBrakeDown", + [KEY_PAD_1] = "PneumaticBrakeSet1", + [KEY_PAD_2] = "PneumaticBrakeSet2", + [KEY_PAD_3] = "PneumaticBrakeSet3", + [KEY_PAD_4] = "PneumaticBrakeSet4", + [KEY_PAD_5] = "PneumaticBrakeSet5", + [KEY_PAD_6] = "PneumaticBrakeSet6", + [KEY_PAD_7] = "PneumaticBrakeSet7", + + [KEY_PAD_DIVIDE] = "SBR14Set", + [KEY_PAD_MULTIPLY] = "SBR15Set", + [KEY_PAD_MINUS] = "SB6", + --[KEY_PAD_9] = "EmerBrakeToggle", + + [KEY_BACKSPACE] = {"EmergencyBrake",helper="EmergencyBrakeValveToggle"}, + [KEY_L] = "HornEngage", + } + 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(461.5, -34, -53), Radius = 8, + }, + { + ID = "FrontTrainLineIsolationToggle", + Pos = Vector(461.5, 33, -53), Radius = 8, + }, + { + ID = "RearBrakeLineIsolationToggle", + Pos = Vector(-474.5, 33, -53), Radius = 8, + }, + { + ID = "RearTrainLineIsolationToggle", + Pos = Vector(-474.5, -34, -53), Radius = 8, + }, + { + ID = "CabinDoor", + Pos = Vector(456,66,3), Radius = 12, + }, + { + ID = "CabinDoor", + Pos = Vector(385,66,0), Radius = 16, + }, + { + ID = "RearDoor", + Pos = Vector(-464.8,-35,4), Radius = 20, + }, + { + ID = "PassengerDoor", + Pos = Vector(375.5,13.5,12), Radius = 20, + }, + { + ID = "GVToggle", + Pos = Vector(162.50,62,-59), Radius = 10, + }, + { + ID = "AirDistributorDisconnectToggle", + Pos = Vector(-177, -66, -50), Radius = 20, + }, + } + + -- Cross connections in train wires + self.TrainWireInverts = { + [11] = true, + [34] = true, + } + self.TrainWireCrossConnections = { + [5] = 6, -- Reverser F<->B + [24] = 25, --VTP + [36] = 37, -- Doors L<->R + [57] = 58, -- ReverserR F<->B + } + + -- KV wrench mode + self.KVWrenchMode = 0 + + -- BPSN type + self:SetNW2Int("BPSNType",self.BPSNType or 2+math.floor(Metrostroi.PeriodRandomNumber("BPSN")*7+0.5)) + + self.RearDoor = false + self.FrontDoor = false + self.CabinDoor = false + self.PassengerDoor = false + self.OtsekDoor1 = false + self.OtsekDoor2 = false + + self.Lamps = { + broken = {}, + } + local rand = math.random() > 0.8 and 1 or math.random(0.95,0.99) + for i = 1,28 do + if math.random() > rand then self.Lamps.broken[i] = math.random() > 0.5 end + end + + self.WrenchMode = 0 + + self:TrainSpawnerUpdate() +end + +function ENT:NonSupportTrigger() + self.RC:TriggerInput("Set",0) + self.SB6:TriggerInput("Set",1) + self.SB6K:TriggerInput("Set",0) + self.SB6:TriggerInput("Block",1) + self.SAP24:TriggerInput("Set",1) + self.SA8:TriggerInput("Set",1) + self.SAP26:TriggerInput("Set",1) + self.EPK:TriggerInput("Set",0) + self.SA13:TriggerInput("Set",0) + self.Plombs.SA8 = nil + self.Plombs.SAP24 = nil + self.Plombs.SB6 = nil + self.Plombs.RC = nil + self.Plombs.SAP26 = nil +end + +function ENT:UpdateLampsColors() + self.LampType = math.Round(math.random()^0.5)+1 + self:SetNW2Int("LampType",self.LampType) + + local lCol,lCount = Vector(),0 + local rnd1,rnd2,col = 0.7+math.random()*0.3,math.random() + local typ = math.Round(math.random()) + local r,g = 15,15 + for i = 1,28 do + local chtp = math.random() > rnd1 + if typ == 0 and not chtp or typ == 1 and chtp then + if math.random() > rnd2 then + r = -20+math.random()*25 + g = 0 + else + g = -5+math.random()*15 + r = g + end + col = Vector(245+r,228+g,189) + else + if math.random() > rnd2 then + g = math.random()*15 + b = g + else + g = 15 + b = -10+math.random()*25 + end + col = Vector(255,235+g,235+b) + end + lCol = lCol + col + lCount = lCount + 1 + if i%9.3<1 then + local id = 9+math.ceil(i/9.3) + + local tcol = (lCol/lCount)/255 + --self.Lights[id][4] = Vector(tcol.r,tcol.g^3,tcol.b^3)*255 + self:SetNW2Vector("lampD"..id,Vector(tcol.r,tcol.g^3,tcol.b^3)*255) + lCol = Vector() lCount = 0 + end + self:SetNW2Vector("lamp"..i,col) + end +end +function ENT:TrainSpawnerUpdate() + self:UpdateLampsColors() + 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 Panel = self.Panel + -- Initialize key mapping + self.RetVal = self.BaseClass.Think(self) + + self:SetPackedRatio("VTPR", self.VTPR.Value/3) + self:SetPackedRatio("B013", self.Pneumatic.RealDriverValvePosition) + + self:SetNW2Int("Wrench",self.WrenchMode) + self:SetPackedRatio("Controller",self.BKCU.Controller) + self:SetPackedRatio("KR",(self.KR.Position+1)/2) + self:SetPackedRatio("KRU",(self.KRU.Position+1)/2) + + self:SetPackedBool("RRIOn",self.RRI_VV.Power>0) + self:SetPackedBool("AnnBuzz",Panel.AnnouncerBuzz > 0) + self:SetPackedBool("AnnPlay",Panel.AnnouncerPlaying > 0) + self:SetPackedBool("AnnCab",self.RRI_VV.CabinSpeakerPower > 0) + + + self:SetPackedBool("Cablights1",Panel.EL1 > 0) + self:SetPackedBool("Cablights2",Panel.EL2 > 0) + self:SetPackedBool("Headlights1",Panel.HL17 > 0) + self:SetPackedBool("Headlights2",Panel.HL20 > 0) + self:SetPackedBool("RedLights",Panel.H11 > 0) + self:SetPackedBool("PanelLights",Panel.HL52 > 0) + self:SetPackedBool("AppLights",Panel.EL31 > 0) + + local lightsActive1 = Panel.EL3_6 > 0 + local lightsActive2 = Panel.EL7_30 > 0 + for i = 1,28 do + if (lightsActive2 or (lightsActive1 and math.ceil((i+5)%8)==math.ceil(i/7)%2)) then + if not self.Lamps[i] and not self.Lamps.broken[i] then self.Lamps[i] = CurTime() + math.Rand(0.1,math.Rand(0.5,2)) end + else + self.Lamps[i] = nil + end + if (self.Lamps[i] and CurTime() - self.Lamps[i] > 0) then + self:SetPackedBool("lightsActive"..i,true) + else + self:SetPackedBool("lightsActive"..i,false) + end + end + + self:SetPackedBool("BBE",self.BBE.KM1 > 0) + self:SetPackedBool("Compressor",self.KK.Value) + if self.PTTI.State < 0 then + self:SetPackedRatio("RNState", ((self.PTTI.RNState)-0.25)*math.Clamp((math.abs(self.Electric.Itotal/2)-30-self.Speed*2)/20,0,1)) + self:SetNW2Int("RNFreq", 13) + else + self:SetPackedRatio("RNState", (0.75-self.PTTI.RNState)*math.Clamp((math.abs(self.Electric.Itotal/2)-30-self.Speed*2)/20,0,1)) + self:SetNW2Int("RNFreq", ((self.PTTI.FreqState or 0)-1/3)/(2/3)*12) + end + local power = false--Panel.V1 > 0.5 + self:SetNW2Bool("ASNPPlay",power and self:ReadTrainWire(47) > 0) + --СПУ + self:SetPackedBool("SPU_SD",Panel.SD > 0) + self:SetPackedBool("SPU_KT",Panel.KT > 0) + self:SetPackedBool("SPU_RS",Panel.RS) + self:SetPackedBool("SPU_SN",Panel.LN) + self:SetPackedBool("SPU_04",Panel.AR04 > 0) + self:SetPackedBool("SPU_00",Panel.AR0 > 0) + self:SetPackedBool("SPU_40",Panel.AR40 > 0) + self:SetPackedBool("SPU_60",Panel.AR60 > 0) + self:SetPackedBool("SPU_70",Panel.AR70 > 0) + self:SetPackedBool("SPU_80",Panel.AR80 > 0) + self:SetPackedBool("SPU_KES",Panel.KES > 0) + self:SetPackedBool("SPU_ST",Panel.ST > 0) + self:SetPackedBool("SPU_CUV",Panel.CUV > 0) + self:SetPackedBool("SPU_AVU",Panel.AVU > 0) + --self:SetPackedBool("SPU_AIP",false) + --self:SetPackedBool("SPU_RIP",false) + self:SetPackedBool("SPU_KVD",Panel.KVD > 0) + self:SetPackedBool("SPU_VS1",Panel.VS1 > 0) + self:SetPackedBool("SPU_VS2",Panel.VS2 > 0) + --Лампы МВСУ + self:SetPackedBool("BIPB", self.BUP.IPB > 0) + + self:SetPackedBool("BIV", self.BUP.IV > 0) + self:SetPackedBool("BIN", self.BUP.IN > 0) + self:SetPackedBool("BIX3",self.BUP.IX3 > 0) + self:SetPackedBool("BIX2",self.BUP.IX2 > 0) + self:SetPackedBool("BIX1",self.BUP.IX1 > 0) + self:SetPackedBool("BI0", self.BUP.I0 > 0) + self:SetPackedBool("BIT1",self.BUP.IT1 > 0) + self:SetPackedBool("BIT2",self.BUP.IT2 > 0) + self:SetPackedBool("BIT3",self.BUP.IT3 > 0) + --self:SetPackedBool("BIBX3",self.BUP.IBX3 > 0) + --self:SetPackedBool("BIBX2",self.BUP.IBX2 > 0) + --self:SetPackedBool("BIBX1",self.BUP.IBX1 > 0) + self:SetPackedBool("BIB0", self.BUP.IB0 > 0) + --self:SetPackedBool("BIBT1",self.BUP.IBT1 > 0) + --self:SetPackedBool("BIBT2",self.BUP.IBT2 > 0) + --self:SetPackedBool("BIBT3",self.BUP.IBT3 > 0) + self:SetPackedBool("BIX", self.BUP.IX > 0) + self:SetPackedBool("BIT", self.BUP.IT > 0) + self:SetPackedBool("BIKDV",self.BUP.IKDV > 0) + self:SetPackedBool("BINKDV",self.BUP.INKDV > 0) + self:SetPackedBool("BIPB",self.BUP.IPB > 0) + self:SetPackedBool("BIARS",self.BUP.IARS > 0) + self:SetPackedBool("BIAVT",self.BUP.IAVT > 0) + self:SetPackedBool("BIPVU",self.BUP.IPVU > 0) + self:SetPackedBool("BIRPB",self.BUP.IRPB > 0) + self:SetPackedBool("BIROT",self.BUP.IROT > 0) + self:SetPackedBool("BISOT",self.BUP.ISOT > 0) + + self:SetPackedBool("BBBUP", self.BUP.BBUP > 0) + self:SetPackedBool("BV0", self.BUP.V0 > 0) + self:SetPackedBool("BEKV",self.BUP.EKV > 0) + self:SetPackedBool("BEBAV",self.BUP.EBAV > 0) + self:SetPackedBool("BEKR",self.BUP.EKR > 0) + self:SetPackedBool("BEARS", self.BUP.EARS > 0) + + self:SetPackedBool("BV",self.BUP.OV > 0) + self:SetPackedBool("BN", self.BUP.ON > 0) + + self:SetPackedBool("BOX", Panel.BOX > 0) + self:SetPackedBool("BOT", Panel.BOT > 0) + self:SetPackedBool("BOU1",Panel.BOU1 > 0) + self:SetPackedBool("BOU2",Panel.BOU2 > 0) + self:SetPackedBool("BOV",Panel.BOV > 0) + self:SetPackedBool("BON", Panel.BON > 0) + self:SetPackedBool("BO0",Panel.BO0 > 0) + self:SetPackedBool("BOZPT",Panel.BOZPT > 0) + self:SetPackedBool("BOBBAV",self.BUP.OBBAV > 0) + self:SetPackedBool("BOBBUP",self.BUP.OBBUP > 0) + self:SetPackedBool("BMS",self.BUP.Power > 0) + self:SetPackedBool("BMP",self.BUP.Power > 0) + + if self.OtsekDoor2 then + --Лампы БУВ + --МВД + self:SetPackedBool("VOTK",self.BUV.OTK > 0) + self:SetPackedBool("VRP",self.BUV.RP > 0) + --МÐЛП1,2 + self:SetPackedBool("VFM",self.BUV.FM > 0) + self:SetPackedBool("VU400",self.BUV.U400 > 0) + self:SetPackedBool("VE1350",self.BUV.E1350 > 0) + + self:SetPackedBool("VDIF",self.BUV.DIF > 0) + self:SetPackedBool("VE13650",self.BUV.E13650 > 0) + self:SetPackedBool("VE130",self.BUV.E130 > 0) + self:SetPackedBool("VSN",self.BUV.SN > 0) + + self:SetPackedBool("VU800",self.BUV.U800 > 0) + self:SetPackedBool("VU975",self.BUV.U975 > 0) + self:SetPackedBool("VE2450",self.BUV.E2450 > 0) + self:SetPackedBool("VE24650",self.BUV.E24650 > 0) + self:SetPackedBool("VE240",self.BUV.E240 > 0) + self:SetPackedBool("VBV",self.BUV.BV > 0) + + self:SetPackedBool("VMSU",self.BUV.MSU > 0) + self:SetPackedBool("VMZK",self.BUV.MZK > 0) + --МИВ + self:SetPackedBool("VZZ",self.BUV.ZZ > 0) + self:SetPackedBool("VV1",self.BUV.V1 > 0) + self:SetPackedBool("VSMA",self.BUV.SMA > 0) + self:SetPackedBool("VSMB",self.BUV.SMB > 0) + + self:SetPackedBool("VIVP",self.BUV.IVP > 0) + self:SetPackedBool("VINZ",self.BUV.INZ > 0) + self:SetPackedBool("VIVR",self.BUV.IVR > 0) + self:SetPackedBool("VINR",self.BUV.INR > 0) + + self:SetPackedBool("VIX",self.BUV.IX > 0) + self:SetPackedBool("VIT",self.BUV.IT > 0) + self:SetPackedBool("VIU1",self.BUV.IU1 > 0) + self:SetPackedBool("VIU2",self.BUV.IU2 > 0) + self:SetPackedBool("VIM",self.BUV.IM > 0) + self:SetPackedBool("VIXP",self.BUV.IXP > 0) + self:SetPackedBool("VIU1R",self.BUV.IU1R > 0) + + self:SetPackedBool("VITARS",self.BUV.ITARS > 0) + self:SetPackedBool("VITEM",self.BUV.ITEM > 0) + self:SetPackedBool("VIAVR",self.BUV.IAVR > 0) + + self:SetPackedBool("VIPROV",self.BUV.IPROV > 0) + self:SetPackedBool("VIPROV0",self.BUV.IPROV0 > 0) + self:SetPackedBool("VIVZ",self.BUV.IVZ > 0) + + self:SetPackedBool("VITP1",self.BUV.ITP1 > 0) + self:SetPackedBool("VITP2",self.BUV.ITP2 > 0) + self:SetPackedBool("VITP3",self.BUV.ITP3 > 0) + self:SetPackedBool("VITP4",self.BUV.ITP4 > 0) + self:SetPackedBool("VIKX",self.BUV.IKX > 0) + self:SetPackedBool("VIKT",self.BUV.IKT > 0) + self:SetPackedBool("VILT",self.BUV.ILT > 0) + self:SetPackedBool("VIRV",self.BUV.IRV > 0) + self:SetPackedBool("VIRN",self.BUV.IRN > 0) + self:SetPackedBool("VIBV",self.BUV.IBV > 0) + + self:SetPackedBool("VOVP",self.BUV.OVP > 0) + self:SetPackedBool("VONZ",self.BUV.ONZ > 0) + self:SetPackedBool("VOLK",self.BUV.OLK > 0) + self:SetPackedBool("VOKX",self.BUV.OKX > 0) + self:SetPackedBool("VOKT",self.BUV.OKT > 0) + self:SetPackedBool("VOPV",self.BUV.OPV > 0) + self:SetPackedBool("VOSN",self.BUV.OSN > 0) + self:SetPackedBool("VOOIZ",self.BUV.OIZ > 0) + self:SetPackedBool("VORP",self.BUV.ORP > 0) + + self:SetPackedBool("VOV1",self.BUV.OV1 > 0) + self:SetPackedBool("VORKT",self.BUV.ORKT > 0) + self:SetPackedBool("VORMT",self.BUV.ORMT > 0) + self:SetPackedBool("VO75V",self.BUV.O75V > 0) + + self:SetPackedBool("VSS",self.BUV.SS > 0) + end + + --Лампы + self:SetPackedBool("HL3",Panel.HL3 > 0) + self:SetPackedBool("HL4",Panel.HL4 > 0) + self:SetPackedBool("HL5",Panel.HL5 > 0) + self:SetPackedBool("HL7",Panel.HL7 > 0) + self:SetPackedBool("HL13",Panel.HL13 > 0) + self:SetPackedBool("HL46",Panel.HL46 > 0) + self:SetPackedBool("HL17",Panel.HL17 > 0) + self:SetPackedBool("HL20",Panel.HL20 > 0) + self:SetPackedBool("HL25",Panel.HL25 > 0) + self:SetPackedBool("HL25",Panel.HL25 > 0) + local TW28 = 0 + if Panel.HL6 > 0 then + local wags = #self.WagonList + for i,v in ipairs(self.WagonList) do + TW28 = TW28+(v.Panel.TW28 or 0)/wags + end + end + --self:SetPackedRatio("HL6",HL6) + self:SetPackedRatio("HL6",math.Clamp(TW28^0.7,0,1)) + self:SetPackedBool("VD1",Panel.VD1 > 0) + self:SetPackedBool("RouteNumberWork",Panel.RouteNumber > 0) + + self:SetPackedBool("DoorsW",Panel.HL13 > 0) + self:SetPackedBool("GRP",Panel.HL25 > 0) + self:SetPackedBool("BrW",Panel.HL46 > 0) + self:SetPackedBool("VPR",Panel.VPR > 0) + + self:SetPackedBool("Speedometer",Panel.Speedometer > 0) + + self:SetPackedBool("VH1",self.BZOS.VH1 > 0) + self:SetPackedBool("VH2",self.BZOS.VH2 > 0) + self:SetPackedRatio("M1",Panel.M1) + self:SetPackedRatio("PVK",self.PVK.Value/2) + + + self:SetPackedBool("RearDoor",self.RearDoor) + self:SetPackedBool("PassengerDoor",self.PassengerDoor) + self:SetPackedBool("CabinDoor",self.CabinDoor) + self:SetPackedBool("OtsekDoor1",self.OtsekDoor1) + self:SetPackedBool("OtsekDoor2",self.OtsekDoor2) + + self:SetPackedRatio("Speed", self.Speed/100) + + self:SetPackedBool("Vent1Work",self.BUVS.KV1>0) + self:SetPackedBool("Vent2Work",self.BUVS.KV2>0) + + self:SetPackedRatio("BLPressure", self.Pneumatic.BrakeLinePressure/16.0) + self:SetPackedRatio("TLPressure", self.Pneumatic.TrainLinePressure/16.0) + self:SetPackedRatio("BCPressure", math.min(3.2,self.Pneumatic.BrakeCylinderPressure)/6.0) + + self:SetPackedRatio("EnginesVoltage", self.Electric.Power750V/1000.0) + self:SetPackedRatio("EnginesCurrent13", 0.5 + 0.5*(self.Electric.I13/500.0)) + self:SetPackedRatio("EnginesCurrent24", 0.5 + 0.5*(self.Electric.I24/500.0)) + self:SetPackedRatio("BatteryVoltage",Panel["V1"]*self.Battery.Voltage/150.0) + self:SetPackedRatio("BatteryCurrent",Panel["V1"]*math.Clamp((self.Battery.Voltage-75)*0.033,-0.01,1)) + + --self.PB:TriggerInput("Set",0) + --self.SB6:TriggerInput("Set",0) + self:SetPackedBool("Ring",self.BZOS.Ring >= 1) + self:SetPackedBool("RingBZOS",self.BZOS.Ring>0) + -- 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 = 27000+1000*(A < 0 and 1 or 0) + --self.RearBogey.MotorForce = 27000+1000*(A < 0 and 1 or 0) + self.FrontBogey.MotorForce = 22500+5000*(A < 0 and 1 or 0)*math.max(self.KMR1.Value,self.KMR2.Value) + self.RearBogey.MotorForce = 22500+5000*(A < 0 and 1 or 0)*math.max(self.KMR1.Value,self.KMR2.Value) + self.FrontBogey.Reversed = (self.KMR2.Value > 0.5) + self.RearBogey.Reversed = (self.KMR1.Value > 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 and A > 0 then P = P*(1.0 + 2.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) + --self.RearBogey.MotorPower = P*0.5 + --self.FrontBogey.MotorPower = P*0.5 + + --self.Acc = (self.Acc or 0)*0.95 + self.Acceleration*0.05 + --print(self.Acc) + + -- Apply brakes + self.FrontBogey.PneumaticBrakeForce = 50000.0-2000 + self.FrontBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + self.FrontBogey.ParkingBrakePressure = math.max(0,(2.6-self.Pneumatic.ParkingBrakePressure)/2.6)/2 + self.FrontBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + self.FrontBogey.DisableContacts = self.U5.Value>0 + self.RearBogey.PneumaticBrakeForce = 50000.0-2000 + self.RearBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + self.RearBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + self.RearBogey.ParkingBrakePressure = math.max(0,(2.6-self.Pneumatic.ParkingBrakePressure)/2.6)/2 + self.RearBogey.DisableContacts = self.U5.Value>0 + --self.RearBogey.ParkingBrake = self.ParkingBrake.Value > 0.5 + end + self:GenerateJerks() + + return self.RetVal +end + +function ENT:TriggerTurbostroiInput(sys,name,val) + self.BaseClass.TriggerTurbostroiInput(self,sys,name,val) +end + +-------------------------------------------------------------------------------- +function ENT:OnButtonPress(button,ply) + if string.find(button,"PneumaticBrakeSet") then + self.Pneumatic:TriggerInput("BrakeSet",tonumber(button:sub(-1,-1))) + return + 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 + if button == "OtsekDoor1" then self.OtsekDoor1 = not self.OtsekDoor1 end + if button == "OtsekDoor2" then self.OtsekDoor2 = not self.OtsekDoor2 end + if button == "KR+" then + if self.WrenchMode == 1 then + self.KR:TriggerInput("Set",self.KR.Position+1) + elseif self.WrenchMode == 2 then + self.KRU:TriggerInput("Set",self.KRU.Position+1) + end + end + if button == "KR-" then + if self.WrenchMode == 1 then + self.KR:TriggerInput("Set",self.KR.Position-1) + elseif self.WrenchMode == 2 then + self.KRU:TriggerInput("Set",self.KRU.Position-1) + end + end + if button == "EmergencyBrake" then + self.BKCU:TriggerInput("KV7",1) + self.Pneumatic:TriggerInput("BrakeSet",7) + return + end + if button == "WrenchKR" or button == "WrenchKR9" then + if self.WrenchMode == 0 then + self:PlayOnce("kr_in","cabin",1) + self.WrenchMode = 1 + else + self:OnButtonPress(button == "WrenchKR9" and "KR-" or "KR+") + end + end + if button == "WrenchKRU" then + if self.WrenchMode == 0 then + self:PlayOnce("kru_in","cabin",1) + self.WrenchMode = 2 + end + end + if button == "WrenchNone" then + if self.WrenchMode ~= 0 then + if self.WrenchMode == 2 and self.KRU.Position == 0 then + self:PlayOnce("kru_out","cabin",1,1) + self.WrenchMode = 0 + elseif self.WrenchMode == 1 and self.KR.Position == 0 then + self:PlayOnce("kr_out","cabin",1,1) + self.WrenchMode = 0 + end + end + end + if button == "KVT" then + self.SB8:TriggerInput("Set",1) + self.SB9:TriggerInput("Set",1) + end + if button == "SB1" then + self.SA7:TriggerInput("Open",1) + self.SB1:TriggerInput("Set",1-self.SA5.Value) + end + if button == "SB2" then + self.SA7:TriggerInput("Close",1) + self.SB2:TriggerInput("Set",1-self.SA5.Value) + end + if button == "SB6" then + if self.WrenchMode==2 then + self.SBR16:TriggerInput("Set",1) + elseif not self.Plombs.SB6 then + self.SB6K:TriggerInput("Set",0) + self.SB6:TriggerInput("Set",1) + end + end + if button == "SB7" then + --self.BKCU:TriggerInput("KV1",1) + self.SB7K:TriggerInput("Set",0) + self.SB7:TriggerInput("Set",1) + 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 == "KVT" then + self.SB8:TriggerInput("Set",0) + self.SB9:TriggerInput("Set",0) + end + if button == "SB1" then + self.SB1:TriggerInput("Set",0) + end + if button == "SB2" then + self.SB2:TriggerInput("Set",0) + end + if button == "SB6" then + if not self.Plombs.SB6 then self.SB6:TriggerInput("Set",0) end + self.SBR16:TriggerInput("Set",0) + end + if button == "SB7" then + self.SB7:TriggerInput("Set",0) + 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 + +function ENT:OnTrainWireError(k) +end +function ENT:OnPlay(soundid,location,range,pitch) + return soundid,location,range,pitch +end diff --git a/lua/entities/gmod_subway_81-718/shared.lua b/lua/entities/gmod_subway_81-718/shared.lua new file mode 100644 index 0000000..d2bd604 --- /dev/null +++ b/lua/entities/gmod_subway_81-718/shared.lua @@ -0,0 +1,559 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" +ENT.SkinsType = "81-718" +ENT.Model = "models/metrostroi_train/81-718/81-718.mdl" + +ENT.Spawnable = true +ENT.AdminSpawnable = false +ENT.DontAccelerateSimulation = false +function ENT:PassengerCapacity() + return 300 +end + +function ENT:GetStandingArea() + return Vector(-450,-30,-48),Vector(378,30,-48) +end + +local function GetDoorPosition(i,k) + return Vector(359.0 - 35/2 - 229.5*i,-65*(1-2*k),7.5) +end + +-- 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 + +ENT.AnnouncerPositions = { + {Vector(420,-49 ,61),120,0.4}, + {Vector(-3,-60, 62),300,0.3}, + {Vector(-3,60 ,62),300,0.3}, +} +ENT.Cameras = { + {Vector(407.5+46,-31,-3),Angle(80,0,0),"Train.718.BUP"}, + {Vector(407.5+20,-40,40),Angle(0,180,0),"Train.718.PPZ"}, + {Vector(407.5+20,-40,24),Angle(0,180,0),"Train.718.VPU"}, + {Vector(407.5+10,-41,18),Angle(45,180,0),"Train.717.VB"}, + {Vector(407.5+30,-60,-0),Angle(40,0,0),"Train.Common.UAVA"}, + {Vector(407.5+30,-35,-0),Angle(45,0,0),"Train.Common.PneumoPanels"}, + {Vector(407.5+42,40,10),Angle(0,90,0),"Train.Common.HelpersPanel"}, + {Vector(407.5+20,-45,-7),Angle(0,-90,0),"Train.Common.Voltmeters"}, + {Vector(407.5-29,-30,-30),Angle(10,0,0),"Train.Common.RRI"}, + {Vector(407.5+40,33.5,40) ,Angle(0,16,0),"Train.Common.RouteNumber"}, + {Vector(407.5+75,0.3,1) ,Angle(20,180,0),"Train.Common.LastStation"}, + {Vector(450+7,0,35),Angle(60,0,0),"Train.Common.CouplerCamera"}, +} +local yventpos = { + -414.5+0*117, + -414.5+1*117+6.2, + -414.5+2*117+5, + -414.5+3*117+2, + -414.5+4*117+0.5, + -414.5+5*117-2.3, + -414.5+6*117-2.3, +} +function ENT:InitializeSounds() + self.BaseClass.InitializeSounds(self) + self.SoundNames["tisu"] = {"subway_trains/718/tisu.wav",loop = true} + self.SoundPositions["tisu"] = {400,1e9,Vector(0,0,-448),0.7} --FIXME: Pos + + --[[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.15} + self.SoundPositions["rolling_10"] = {480,1e12,Vector(0,0,0),0.20} + self.SoundPositions["rolling_40"] = {480,1e12,Vector(0,0,0),0.55} + self.SoundPositions["rolling_70"] = {480,1e12,Vector(0,0,0),0.60} + self.SoundPositions["rolling_80"] = {480,1e12,Vector(0,0,0),0.75}]] + 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.05} + self.SoundPositions["rolling_10"] = {480,1e12,Vector(0,0,0),0.1} + self.SoundPositions["rolling_40"] = {480,1e12,Vector(0,0,0),0.55} + self.SoundPositions["rolling_70"] = {480,1e12,Vector(0,0,0),0.60} + self.SoundPositions["rolling_80"] = {480,1e12,Vector(0,0,0),0.75} + + + self.SoundNames["rolling_32"] = {loop=true,"subway_trains/717/rolling/rolling_32.wav"} + self.SoundNames["rolling_68"] = {loop=true,"subway_trains/717/rolling/rolling_68.wav"} + self.SoundNames["rolling_75"] = {loop=true,"subway_trains/717/rolling/rolling_75.wav"} + self.SoundPositions["rolling_32"] = {480,1e12,Vector(0,0,0),0.2} + self.SoundPositions["rolling_68"] = {480,1e12,Vector(0,0,0),0.4} + self.SoundPositions["rolling_75"] = {480,1e12,Vector(0,0,0),0.8} + + self.SoundNames["rolling_motors"] = {loop=true,"subway_trains/common/junk/wind_background1.wav"} + self.SoundNames["rolling_motors2"] = {loop=true,"subway_trains/common/junk/wind_background1.wav"} + self.SoundPositions["rolling_motors"] = {250,1e12,Vector(200,0,0),0.33} + self.SoundPositions["rolling_motors2"] = {250,1e12,Vector(-250,0,0),0.33} + + 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"] = {480,1e12,Vector(0,0,0),0.90} + self.SoundPositions["rolling_medium2"] = {480,1e12,Vector(0,0,0),0.90} + self.SoundPositions["rolling_high2"] = {480,1e12,Vector(0,0,0),1.00} + + self.SoundNames["bpsn"] = {"subway_trains/717/bpsn/bpsn_2.wav", loop=true} + self.SoundPositions["bpsn"] = {400,1e9,Vector(0,45,-448),0.02} + self.SoundNames["compressor"] = {loop=2.0,"subway_trains/d/pneumatic/compressor/compessor_d_start.wav","subway_trains/d/pneumatic/compressor/compessor_d_loop.wav", "subway_trains/d/pneumatic/compressor/compessor_d_end.wav"} + self.SoundNames["compressor2"] = {loop=1.79,"subway_trains/717/compressor/compressor_717_start2.wav","subway_trains/717/compressor/compressor_717_loop2.wav", "subway_trains/717/compressor/compressor_717_stop2.wav"} + self.SoundPositions["compressor"] = {600,1e9,Vector(-118,-40,-66),0.15} + self.SoundPositions["compressor2"] = {480,1e9,Vector(-118,-40,-66),0.55} + + 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["parking_brake"] = {loop=true,"subway_trains/common/pneumatic/parking_brake.wav"} + self.SoundNames["parking_brake_en"] = "subway_trains/common/pneumatic/parking_brake_stop.mp3" + self.SoundNames["parking_brake_rel"] = "subway_trains/common/pneumatic/parking_brake_stop2.mp3" + self.SoundPositions["parking_brake"] = {80,1e9,Vector(449,-34,-40),0.6} + self.SoundPositions["parking_brake_en"] = self.SoundPositions["parking_brake"] + self.SoundPositions["parking_brake_rel"] = self.SoundPositions["parking_brake"] + self.SoundNames["front_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["front_isolation"] = {300,1e9,Vector(443, 0,-63),1} + self.SoundNames["rear_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["rear_isolation"] = {300,1e9,Vector(-456, 0,-63),1} + + self.SoundNames["crane013_brake"] = {loop=true,"subway_trains/common/pneumatic/release_2.wav"} + self.SoundPositions["crane013_brake"] = {80,1e9,Vector(431.5,-20.3,-12),0.86} + self.SoundNames["crane013_brake2"] = {loop=true,"subway_trains/common/pneumatic/013_brake2.wav"} + self.SoundPositions["crane013_brake2"] = {80,1e9,Vector(431.5,-20.3,-12),0.86} + self.SoundNames["crane013_release"] = {loop=true,"subway_trains/common/pneumatic/013_release.wav"} + self.SoundPositions["crane013_release"] = {80,1e9,Vector(431.5,-20.3,-12),0.4} + + self.SoundNames["epk_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["epk_brake"] = {80,1e9,Vector(437.2,-53.1,-32.0),0.65} + + self.SoundNames["valve_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["valve_brake"] = {80,1e9,Vector(408.45,62.15,11.5),1} + + 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(345,-55,-84),0.95} + self.SoundPositions["emer_brake2"] = {600,1e9,Vector(345,-55,-84),1} + + 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["button1_off"] = { + "subway_trains/717/switches/button1_off1.mp3", + "subway_trains/717/switches/button1_off2.mp3", + "subway_trains/717/switches/button1_off3.mp3", + } + self.SoundNames["button1_on"] = { + "subway_trains/717/switches/button1_on1.mp3", + "subway_trains/717/switches/button1_on2.mp3", + "subway_trains/717/switches/button1_on3.mp3", + } + self.SoundNames["button2_off"] = { + "subway_trains/717/switches/button2_off1.mp3", + "subway_trains/717/switches/button2_off2.mp3", + } + self.SoundNames["button2_on"] = { + "subway_trains/717/switches/button2_on1.mp3", + "subway_trains/717/switches/button2_on2.mp3", + } + self.SoundNames["button3_off"] = { + "subway_trains/717/switches/button3_off1.mp3", + "subway_trains/717/switches/button3_off2.mp3", + } + self.SoundNames["button3_on"] = { + "subway_trains/717/switches/button3_on1.mp3", + "subway_trains/717/switches/button3_on2.mp3", + } + self.SoundNames["button4_off"] = { + "subway_trains/717/switches/button4_off1.mp3", + "subway_trains/717/switches/button4_off2.mp3", + } + self.SoundNames["button4_on"] = { + "subway_trains/717/switches/button4_on1.mp3", + "subway_trains/717/switches/button4_on2.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"] = {120,1e9,Vector(429.6,-60.8,-15.9),0.95} + self.SoundNames["gv_f"] = {"subway_trains/717/kv70/reverser_0-b_1.mp3","subway_trains/717/kv70/reverser_0-b_2.mp3"} + self.SoundNames["gv_b"] = {"subway_trains/717/kv70/reverser_b-0_1.mp3","subway_trains/717/kv70/reverser_b-0_2.mp3"} + self.SoundNames["pak_on"] = "subway_trains/717/switches/rc_on.mp3" + self.SoundNames["pak_off"] = "subway_trains/717/switches/rc_off.mp3" + + 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,-24.1+1.5,-33.7),1} + self.SoundPositions["pneumo_disconnect1"] = {60,1e9,Vector(431.8,-24.1+1.5,-33.7),1} + + self.SoundNames["disconnect_valve"] = "subway_trains/common/switches/pneumo_disconnect_switch.mp3" + + self.SoundNames["KV_-3_-2"] = "subway_trains/720/controller/t3_t2.mp3" + self.SoundNames["KV_-2_-1"] = "subway_trains/720/controller/t2_t1.mp3" + self.SoundNames["KV_-1_0"] = "subway_trains/720/controller/t1_0.mp3" + self.SoundNames["KV_0_1"] = "subway_trains/720/controller/0_x1.mp3" + self.SoundNames["KV_1_2"] = "subway_trains/720/controller/x1_x2.mp3" + self.SoundNames["KV_2_3"] = "subway_trains/720/controller/x3_x4.mp3" + self.SoundNames["KV_3_2"] = "subway_trains/720/controller/x4_x3.mp3" + self.SoundNames["KV_2_1"] = "subway_trains/720/controller/x2_x1.mp3" + self.SoundNames["KV_1_0"] = "subway_trains/720/controller/x1_0.mp3" + self.SoundNames["KV_0_-1"] = "subway_trains/720/controller/0_t1.mp3" + self.SoundNames["KV_-1_-2"] = "subway_trains/720/controller/t1_t2.mp3" + self.SoundNames["KV_-2_-3"] = "subway_trains/720/controller/t2_t3.mp3" + self.SoundPositions["KV_-3_-2"] = {80,1e9,Vector(443.8,18,-2),0.85} + self.SoundPositions["KV_-2_-1"] = self.SoundPositions["KV_-3_-2"] + self.SoundPositions["KV_-1_0"] = self.SoundPositions["KV_-3_-2"] + self.SoundPositions["KV_0_1"] = self.SoundPositions["KV_-3_-2"] + self.SoundPositions["KV_1_2"] = self.SoundPositions["KV_-3_-2"] + self.SoundPositions["KV_2_3"] = self.SoundPositions["KV_-3_-2"] + self.SoundPositions["KV_3_4"] = self.SoundPositions["KV_-3_-2"] + self.SoundPositions["KV_4_3"] = self.SoundPositions["KV_-3_-2"] + self.SoundPositions["KV_3_2"] = self.SoundPositions["KV_-3_-2"] + self.SoundPositions["KV_2_1"] = self.SoundPositions["KV_-3_-2"] + self.SoundPositions["KV_1_0"] = self.SoundPositions["KV_-3_-2"] + self.SoundPositions["KV_0_-1"] = self.SoundPositions["KV_-3_-2"] + self.SoundPositions["KV_-1_-2"] = self.SoundPositions["KV_-3_-2"] + self.SoundPositions["KV_-2_-3"] = self.SoundPositions["KV_-3_-2"] + + self.SoundNames["kr_in"] = { + "subway_trains/717/kru/kru_insert1.mp3", + "subway_trains/717/kru/kru_insert2.mp3" + } + self.SoundNames["kr_out"] = { + "subway_trains/717/kru/kru_eject1.mp3", + "subway_trains/717/kru/kru_eject2.mp3", + "subway_trains/717/kru/kru_eject3.mp3", + } + self.SoundNames["kr_-1_0"] = { + "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["kr_0_1"] = { + "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["kr_1_0"] = { + "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["kr_0_-1"] = { + "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.SoundPositions["kr_in"] = {80,1e9,Vector(444+2.5,24+2,-2.7-8)} + self.SoundPositions["kr_out"] = self.SoundPositions["kr_in"] + self.SoundPositions["kr_-1_0"] = self.SoundPositions["kr_in"] + self.SoundPositions["kr_0_1"] = self.SoundPositions["kr_in"] + self.SoundPositions["kr_1_0"] = self.SoundPositions["kr_in"] + self.SoundPositions["kr_0_-1"] = self.SoundPositions["kr_in"] + + self.SoundNames["kru_in"] = self.SoundNames["kr_in"] + self.SoundNames["kru_out"] = self.SoundNames["kr_out"] + self.SoundNames["kru_-1_0"] = self.SoundNames["kr_-1_0"] + self.SoundNames["kru_0_1"] = self.SoundNames["kr_0_1"] + self.SoundNames["kru_1_0"] = self.SoundNames["kr_1_0"] + self.SoundNames["kru_0_-1"] = self.SoundNames["kr_0_-1"] + self.SoundPositions["kru_in"] = {80,1e9,Vector(451+3.2,24+2,-1-8)} + self.SoundPositions["kru_out"] = self.SoundPositions["kru_in"] + self.SoundPositions["kru_-1_0"] = self.SoundPositions["kru_in"] + self.SoundPositions["kru_0_1"] = self.SoundPositions["kru_in"] + self.SoundPositions["kru_1_0"] = self.SoundPositions["kru_in"] + self.SoundPositions["kru_0_-1"] = self.SoundPositions["kru_in"] + + self.SoundNames["pvk2"] = "subway_trains/717/switches/vent1-2.mp3" + self.SoundNames["pvk1"] = "subway_trains/717/switches/vent2-1.mp3" + self.SoundNames["pvk0"] = "subway_trains/717/switches/vent1-0.mp3" + self.SoundNames["vent_cabl"] = {loop=true,"subway_trains/717/vent/vent_cab_low.wav"} + self.SoundPositions["vent_cabl"] = {140,1e9,Vector(456.8,45.8,-13),0.66} + self.SoundNames["vent_cabh"] = {loop=true,"subway_trains/717/vent/vent_cab_high.wav"} + self.SoundPositions["vent_cabh"] = self.SoundPositions["vent_cabl"] + + self.SoundNames["k2_on"] = "subway_trains/717/pneumo/lk2_on.mp3" + self.SoundNames["k2_off"] = "subway_trains/717/pneumatic/lk/lk2_off.mp3" + self.SoundNames["k1_on"] = "subway_trains/717/pneumo/lk1_on.mp3" + self.SoundNames["k3_on"] = self.SoundNames["k2_on"] + self.SoundNames["kmr1_on"] = self.SoundNames["k1_on"] + self.SoundNames["kmr2_on"] = self.SoundNames["kmr1_on"] + self.SoundNames["k1_off"] = self.SoundNames["k2_off"] + self.SoundNames["k3_off"] = self.SoundNames["k2_off"] + self.SoundNames["kmr1_off"] = "subway_trains/717/pneumo/lk2_off.mp3" + self.SoundNames["kmr2_off"] = self.SoundNames["kmr1_off"] + --self.SoundNames["ksh1_off"] = "subway_trains/717/pneumo/ksh1.mp3" + self.SoundPositions["k2_on"] = {440,1e9,Vector(-60,-40,-66),0.22} + self.SoundPositions["k1_on"] = {440,1e9,Vector(-60,-40,-66),0.3} + self.SoundPositions["k2_off"] = {440,1e9,Vector(-60,-40,-66),0.1} + self.SoundPositions["k3_off"] = self.SoundPositions["k2_off"] + self.SoundPositions["k3_on"] = self.SoundPositions["k2_on"] + self.SoundPositions["k3_off"] = self.SoundPositions["k2_off"] + self.SoundPositions["kmr1_on"] = self.SoundPositions["k2_on"] + self.SoundPositions["kmr1_off"] = {440,1e9,Vector(-60,-40,-66),0.3} + self.SoundPositions["kmr2_on"] = self.SoundPositions["k2_on"] + self.SoundPositions["kmr2_off"] = {440,1e9,Vector(-60,-40,-66),0.3} + --self.SoundPositions["ksh1_off"] = self.SoundPositions["lk1_on"] + + self.SoundNames["qf1_on"] = "subway_trains/717/pneumo/ksh1.mp3" + self.SoundNames["qf1_off"] = "subway_trains/717/pneumo/ksh1.mp3" + self.SoundPositions["qf1_on"] = self.SoundPositions["k2_on"] + self.SoundPositions["qf1_off"] = self.SoundPositions["k2_on"] + + 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(500,0,-30)} + + self.SoundNames["ring"] = {loop=0.1,"subway_trains/717/ring/ringch_start.wav","subway_trains/717/ring/ringch_loop.wav","subway_trains/717/ring/ringch_end.wav"} + self.SoundPositions["ring"] = {100,1e9,Vector(459,6,10),0.45} + + 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"] = {60,1e9,Vector(430,-40 ,50),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["otsek_door_open"] = {"subway_trains/720/door/door_torec_open.mp3","subway_trains/720/door/door_torec_open2.mp3"} + self.SoundNames["otsek_door_close"] = {"subway_trains/720/door/door_torec_close.mp3","subway_trains/720/door/door_torec_close2.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"] = {300,1e9,Vector(-420,45,-30),1} + self.SoundPositions["vdol_off"] = {300,1e9,Vector(-420,45,-30),0.4} + 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(-420,45,-30),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"] = {60,1e9,Vector(-420,45,-30),1} + self.SoundPositions["vdz_off"] = {60,1e9,Vector(-420,45,-30),0.4} + + 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} + 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 i=1,7 do + self.SoundNames["vent"..i] = {loop=true,"subway_trains/720/vent_mix.wav"} + self.SoundPositions["vent"..i] = {100,1e9,Vector(yventpos[i],0,30),0.12} + end + for k,v in ipairs(self.AnnouncerPositions) do + self.SoundNames["announcer_buzz"..k] = {loop=true,"subway_announcers/asnp/bpsn_ann.wav"} + self.SoundPositions["announcer_buzz"..k] = {v[2] or 600,1e9,v[1],v[3]/8} + end +end +function ENT:InitializeSystems() + self:LoadSystem("Electric","81_718_Electric") + -- Токоприёмник + self:LoadSystem("TR","TR_3B") + -- ЭлектротÑговые двигатели + self:LoadSystem("Engines","DK_117DM") + + self:LoadSystem("BBE","81_718_BBE") + self:LoadSystem("BKVA","81_718_BKVA") + self:LoadSystem("BSKA","81_718_BSKA") + self:LoadSystem("BUVS","81_718_BUVS") + self:LoadSystem("PTTI","81_718_PTTI") + + self:LoadSystem("Panel","81_718_Panel") + self:LoadSystem("KR","81_718_KR") + self:LoadSystem("KRU","81_718_KRU") + self:LoadSystem("BKCU","81_718_BKCU") + + self:LoadSystem("BUP","81_718_BUP") + self:LoadSystem("BUV","81_718_BUV") + self:LoadSystem("BVA","81_718_BVA") + self:LoadSystem("BKBD","81_718_BKBD") + self:LoadSystem("BZOS","81_718_BZOS") + + --self:LoadSystem("IGLA_CBKI","IGLA_CBKI1") + --self:LoadSystem("IGLA_PCBK") + + self:LoadSystem("Announcer","81_71_Announcer", "AnnouncementsASNP") + + self:LoadSystem("RRI","81_71_RRI",Metrostroi.ASNPSetup) + self:LoadSystem("RRI_VV","81_71_RRI_VV") + --self:LoadSystem("ASNP","81_71_ASNP") + + -- ПневмоÑиÑтема 81-710 + self:LoadSystem("Pneumatic","81_718_Pneumatic") + self:LoadSystem("Battery","81_718_Battery") + + self:LoadSystem("Horn","81_722_Horn") + + self:LoadSystem("RouteNumber","81_718_RouteNumber") + self:LoadSystem("LastStation","81_71_LastStation","717","destination") +end + +function ENT:PostInitializeSystems() + if CLIENT then return end + self.BIS200:TriggerInput("SpeedDec",1) +end + +--------------------------------------------------- +-- Defined train information +-- Types of wagon(for wagon limit system): +-- 0 = Head or intherim +-- 1 = Only head +-- 2 = Only intherim +--------------------------------------------------- +ENT.SubwayTrain = { + Type = "81", + Name = "81-718", + WagType = 1, + Manufacturer = "MVM", + ALS = { + HaveAutostop = true, + TwoToSix = true, + RSAs325Hz = true, + Aproove0As325Hz = false, + }, + Announcer = { + }, + EKKType = 718, +} +ENT.NumberRanges = {{0001,0100},{250,500}} +ENT.Spawner = { + model = { + "models/metrostroi_train/81-718/81-718.mdl", + "models/metrostroi_train/81-718/81-718_dinas11.mdl", + "models/metrostroi_train/81-718/81-718_cabine.mdl", + "models/metrostroi_train/81-718/interior.mdl", + "models/metrostroi_train/81-718/marshrut_number_body.mdl", + "models/metrostroi_train/81-717/couch_old.mdl", + "models/metrostroi_train/81-717/couch_cap_l.mdl", + "models/metrostroi_train/81-717/couch_cap_r.mdl", + }, + interim = "gmod_subway_81-719", + Metrostroi.Skins.GetTable("Texture","Spawner.Texture",false,"train"), + Metrostroi.Skins.GetTable("PassTexture","Spawner.PassTexture",false,"pass"), + --Metrostroi.Skins.GetTable("CabTexture","Spawner.CabTexture",false,"cab"), + {"Announcer","Spawner.718.Announcer","List",function() + local Announcer = {} + for k,v in pairs(Metrostroi.AnnouncementsASNP or {}) do if not v.asnp then Announcer[k] = v.name or k end end + return Announcer + end}, + {"Scheme","Spawner.718.Schemes","List",function() + local Schemes = {} + for k,v in pairs(Metrostroi.Skins["717_new_schemes"] or {}) do Schemes[k] = v.name or k end + return Schemes + end}, + {"SpawnMode","Spawner.718.SpawnMode","List",{"Spawner.718.SpawnMode.Full","Spawner.718.SpawnMode.Deadlock","Spawner.718.SpawnMode.NightDeadlock","Spawner.718.SpawnMode.Depot"}, nil,function(ent,val,rot,i,wagnum,rclk) + if rclk then return end + if ent._SpawnerStarted~=val then + ent.VB:TriggerInput("Set",val<=2 and 1 or 0) + ent.ParkingBrake:TriggerInput("Set",val==3 and 1 or 0) + if ent.SF51 then + local first = i==1 or _LastSpawner~=CurTime() + ent.SF55:TriggerInput("Set",val<=2 and 1 or 0) + ent.SF63:TriggerInput("Set",val<=2 and 1 or 0) + ent.SF41:TriggerInput("Set",val<=3 and 1 or 0) + ent.SF50:TriggerInput("Set",val<=2 and 1 or 0) + ent.SF54:TriggerInput("Set",val<=2 and 1 or 0) + ent.SAP3:TriggerInput("Set",val==1 and 1 or 0) + ent["SA1/1"]:TriggerInput("Set",val==1 and 1 or 0) + ent.SA13:TriggerInput("Set",(ent.Plombs.RC and val==1 and first) and 1 or 0) + ent.SA16:TriggerInput("Set",(val==1 and first) and 1 or 0) + ent.SAP8:TriggerInput("Set",(val==1 and first) and 1 or 0) + ent.SAP9:TriggerInput("Set",val==1 and 1 or 0) + --ent.SAP10:TriggerInput("Set",val==1 and 1 or 0) + _LastSpawner=CurTime() + ent.CabinDoor = val==4 and first + ent.PassengerDoor = val==4 + ent.RearDoor = val==4 + ent.EPK:TriggerInput("Set",(ent.Plombs.RC and val==1) and 1 or 0) + else + ent.FrontDoor = val==4 + ent.RearDoor = val==4 + end + if val == 1 then + ent.BVA:TriggerInput("Enable",1) + ent.BBE:TriggerInput("Enable",1) + end + ent.GV:TriggerInput("Set",val<4 and 1 or 0) + ent._SpawnerStarted = val + end + ent.Pneumatic.TrainLinePressure = val==3 and math.random()*4 or val==2 and 4.5+math.random()*3 or 7.6+math.random()*0.6 + if val==4 then ent.Pneumatic.BrakeLinePressure = 5.2 end + end}, +}--]] diff --git a/lua/entities/gmod_subway_81-719/cl_init.lua b/lua/entities/gmod_subway_81-719/cl_init.lua new file mode 100644 index 0000000..f9048d0 --- /dev/null +++ b/lua/entities/gmod_subway_81-719/cl_init.lua @@ -0,0 +1,1225 @@ +-------------------------------------------------------------------------------- +-- 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.ClientPropsInitialized = false +ENT.ClientProps = {} +ENT.ButtonMap = {} +ENT.AutoAnims = {} +ENT.AutoAnimNames = {} +ENT.ClientSounds = {} + +ENT.ClientProps["schemes"] = { + model = "models/metrostroi_train/81-717/labels/schemes.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, + callback = function(ent) + ent.PassSchemesDone = false + end, +} +ENT.ClientProps["salon"] = { + model = "models/metrostroi_train/81-718/interior_int.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["seats"] = { + model = "models/metrostroi_train/81-717/couch_old_int.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} + +ENT.ClientProps["seats_old_cap"] = { + model = "models/metrostroi_train/81-717/couch_cap_l.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0) +} +ENT.ClientProps["seats_old_cap_o"] = { + model = "models/metrostroi_train/81-717/couch_cap_l.mdl", + pos = Vector(-285,410,13), + ang = Angle(0,70,-70), + hideseat=0.8, +} +ENT.ClientProps["otsek_cap_l"] = { + model = "models/metrostroi_train/81-717/otsek_cap_l.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, +} +ENT.ClientProps["otsek_cap_r"] = { + model = "models/metrostroi_train/81-717/otsek_cap_r.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, +} + +local function placeLamps(name) + if not ENT.ButtonMap[name] or not ENT.ButtonMap[name].buttons then return end + local nAdd = name:sub(name:find("_")+1,-1) + for i,button in pairs(ENT.ButtonMap[name].buttons) do + button.ID = nAdd..button.ID + button.model = { + --model = "models/metrostroi_train/81/lamp.mdl", z = -25, + lamp = { + speed=16, + model = "models/metrostroi_train/common/lamps/svetodiod2.mdl", + z=-5.5, + var=button.var, + color=button.col=="y" and Color(255,168,0) or button.col=="r" and Color(255,56,30) or button.col=="g" and Color(175,250,20) or Color(255,255,255)} + } + button.var=nil + end +end +ENT.ButtonMap["BUV_MPS"] = { + pos = Vector(-425,60+1,-15), + ang = Angle(0,0,90), + width = 30, + height = 110, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "PROV", x=5+8*0,y=15+5*2, radius=3,col="g",var="VIPROV", tooltip="Проверка",}, + {ID = "AVR", x=5+8*0,y=15+5*3, radius=3,col="r",var="VIAVR", tooltip="Отключение режимов",}, + {ID = "TARS", x=5+8*0,y=15+5*9, radius=3,col="g",var="VITARS", tooltip="Тормоз БКБД",}, + {ID = "X" , x=5+8*0,y=15+5*10, radius=3,col="g",var="VIX", tooltip="Код режима \"Ход\"",}, + + {ID = "NZ", x=5+8*1,y=15+5*0, radius=3,col="g",var="VINZ", tooltip="Ðазад",}, + {ID = "NZR", x=5+8*1,y=15+5*1, radius=3,col="g",var="VINR", tooltip="Резервный назад",}, + {ID = "PROV0",x=5+8*1,y=15+5*2, radius=3,col="g",var="VIPROV0",tooltip="Проверка работы",}, + {ID = "SK", x=5+8*1,y=15+5*3, radius=3,col="g",var="", tooltip="СкороÑть",}, + {ID = "T", x=5+8*1,y=15+5*9, radius=3,col="g",var="VIT", tooltip="Код режима \"Тормоз\"",}, + {ID = "XR", x=5+8*1,y=15+5*10, radius=3,col="g",var="VIXP", tooltip="Резервный ход 1",}, + {ID = "U1", x=5+8*1,y=15+5*11, radius=3,col="g",var="VIU1", tooltip="УÑтавка 1",}, + {ID = "U2", x=5+8*1,y=15+5*12, radius=3,col="g",var="VIU2", tooltip="УÑтавка 2",}, + + {ID = "VP", x=5+8*2,y=15+5*0, radius=3,col="g",var="VIVP", tooltip="Вперёд",}, + {ID = "VPR", x=5+8*2,y=15+5*1, radius=3,col="g",var="VIVR", tooltip="Резервный вперед",}, + {ID = "VZ", x=5+8*2,y=15+5*2.5,radius=3,col="g",var="VIVZ", tooltip="Возврат защиты",}, + {ID = "XM", x=5+8*2,y=15+5*10, radius=3,col="g",var="VIM", tooltip="Маневровый ход",}, + {ID = "U1R", x=5+8*2,y=15+5*11, radius=3,col="g",var="VIU1R", tooltip="Резервный ход 2",}, + } +} +ENT.ButtonMap["BUV_MVD"] = { + pos = Vector(-425+1.8,60+1,-15), + ang = Angle(0,0,90), + width = 20, + height = 110, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "OTK", x=2+8*1,y=15+5*4.5,radius=3,col="r",var="VOTK", tooltip="Отказ режимов",}, + {ID = "RP", x=2+8*1,y=15+5*6.9,radius=3,col="r",var="VRP", tooltip="Сработка РП",}, + } +} + +ENT.ButtonMap["BUV_MALP1"] = { + pos = Vector(-425+3,60+1,-15), + ang = Angle(0,0,90), + width = 30, + height = 110, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "MZK", x=11+8*0,y=15+5*2, radius=3,col="r",var="VMZK", tooltip="Мгновенный запрет ключа",}, + {ID = "FM", x=11+8*0,y=15+5*3, radius=3,col="r",var="VFM", tooltip="ÐапрÑжение на фильтре выше 1000 вольт",}, + {ID = "400", x=11+8*0,y=15+5*4, radius=3,col="g",var="VU400", tooltip="Ðаличие400 вольт",}, + {ID = "50" , x=11+8*0,y=15+5*5, radius=3,col="g",var="VE1350", tooltip="Ðаличие тока ÑÐºÐ¾Ñ€Ñ Ð“Ñ€ Ð",}, + {ID = "DIF", x=11+8*0,y=15+5*6, radius=3,col="g",var="VDIF", tooltip="РазноÑть токов гр Ð,Ð’",}, + {ID = "650", x=11+8*0,y=15+5*7, radius=3,col="r",var="VE13650",tooltip="Ток ÑÐºÐ¾Ñ€Ñ Ð“Ñ€ Рвыше 650 ампер",}, + {ID = "0", x=11+8*0,y=15+5*8, radius=3,col="r",var="VE130", tooltip="Якорный ток Гр РотÑутÑтвует",}, + {ID = "ARS", x=11+8*0,y=15+5*9, radius=3,col="r",var="", tooltip="Срыв чаÑтотного запуÑка",}, + {ID = "ITA", x=11+8*0,y=15+5*10, radius=3,col="r",var="", tooltip="Пробой тормозного тириÑтора Гр Ð > 100a",}, + + {ID = "TR", x=11+8*1,y=15+5*5.5,radius=3,col="g",var="", tooltip="Ðаличие реоÑтатного тока более 100 а Гр Ð",}, + {ID = "SN", x=11+8*1,y=15+5*7.3,radius=3,col="r",var="VSN", tooltip="Ð¡Ð¸Ð»Ð¾Ð²Ð°Ñ Ñхема не Ñобрана",}, + {ID = "VN", x=11+8*1,y=15+5*9, radius=3,col="r",var="", tooltip="ÐеиÑправноÑть вентилÑторов",}, + } +} +ENT.ButtonMap["BUV_MALP2"] = { + pos = Vector(-425+4.8,60+1,-15), + ang = Angle(0,0,90), + width = 30, + height = 110, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "MSU", x=11+8*0,y=15+5*2, radius=3,col="r",var="VMSU", tooltip="Мгновенный ÑÐ±Ñ€Ð¾Ñ ÑƒÑтавки",}, + {ID = "800", x=11+8*0,y=15+5*3, radius=3,col="g",var="VU800", tooltip="ÐапрÑжение Ñети 800 вольт",}, + {ID = "975", x=11+8*0,y=15+5*4, radius=3,col="g",var="VU975", tooltip="МакÑимальное напрÑжение Ñети ",}, + {ID = "50" , x=11+8*0,y=15+5*5, radius=3,col="g",var="VE2450", tooltip="Ðаличие тока ÑÐºÐ¾Ñ€Ñ Ð“Ñ€ B",}, + {ID = "650", x=11+8*0,y=15+5*7, radius=3,col="r",var="VE24650",tooltip="Ток ÑÐºÐ¾Ñ€Ñ Ð“Ñ€ B выше 650 ампер",}, + {ID = "0", x=11+8*0,y=15+5*8, radius=3,col="r",var="VE240", tooltip="Якорный ток Гр B отÑутÑтвует",}, + {ID = "BV", x=11+8*0,y=15+5*9, radius=3,col="r",var="VBV", tooltip="Сработала БВ",}, + {ID = "ITB", x=11+8*0,y=15+5*10, radius=3,col="r",var="", tooltip="Пробой тормозного тириÑтора Гр B > 100a",}, + } +} +ENT.ButtonMap["BUV_MIV"] = { + pos = Vector(-425+6.6,60+1,-15), + ang = Angle(0,0,90), + width = 30, + height = 110, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "33", x=11+8*0,y=15+5*3.7,radius=3,col="g",var="VZZ", tooltip="ЧаÑтотный запуÑк завершен",}, + {ID = "V1", x=11+8*0,y=15+5*5, radius=3,col="g",var="VV1", tooltip="Вентиль1",}, + {ID = "SMA", x=11+8*0,y=15+5*6.3,radius=3,col="g",var="VSMA", tooltip="Сигнал макÑимальный Гр Ð",}, + {ID = "SMB", x=11+8*0,y=15+5*7.6,radius=3,col="g",var="VSMB", tooltip="Сигнал макÑимальный Гр Ð’",}, + } +} + +ENT.ButtonMap["BUV_MGR"] = { + pos = Vector(-425,60+1,-23), + ang = Angle(0,0,90), + width = 30, + height = 110, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "TP1", x=5+8*0,y=15+5*2, radius=3,col="y",var="VITP1", tooltip="Прижатие токоприемника 1",}, + {ID = "TP3", x=5+8*0,y=15+5*3.5, radius=3,col="y",var="VITP3", tooltip="Прижатие токоприемника 3",}, + {ID = "KHA", x=5+8*0,y=15+5*9, radius=3,col="y",var="VIKX", tooltip="Включение контакторов хода группы Ð",}, + {ID = "KTA", x=5+8*0,y=15+5*10.5,radius=3,col="y",var="VIKT", tooltip="Включение контакторов тормоза группы Ð",}, + + {ID = "TP2", x=5+8*1,y=15+5*2, radius=3,col="y",var="VITP2", tooltip="Прижатие токоприемника 2",}, + {ID = "TP4", x=5+8*1,y=15+5*3.5, radius=3,col="y",var="VITP4", tooltip="Прижатие токоприемника 4",}, + {ID = "KHB", x=5+8*1,y=15+5*9, radius=3,col="y",var="VIKX", tooltip="Включение контакторов хода группы B",}, + {ID = "KTB", x=5+8*1,y=15+5*10.5,radius=3,col="y",var="VIKT", tooltip="Включение контакторов тормоза группы B",}, + {ID = "KRV", x=5+8*1,y=15+5*12, radius=3,col="y",var="VIRV", tooltip="Включение контакторов реверÑа вперёд",}, + + {ID = "NV", x=5+8*2,y=15+5*1, radius=3,col="r",var="", tooltip="ÐеиÑправноÑть вентилÑтора ПТТИ",}, + {ID = "BV", x=5+8*2,y=15+5*3, radius=3,col="g",var="VIBV", tooltip="БВ взведён",}, + {ID = "LK", x=5+8*2,y=15+5*10, radius=3,col="y",var="VILT", tooltip="Включение линейного контактора",}, + {ID = "KRN", x=5+8*2,y=15+5*12, radius=3,col="y",var="VIRN", tooltip="Включение контакторов реверÑа назад",}, + } +} +ENT.ButtonMap["BUV_MLUA"] = { + pos = Vector(-425+1.8,60+1,-23), + ang = Angle(0,0,90), + width = 20, + height = 110, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "KT", x=10+8*0,y=17+5*3, radius=3,col="g",var="VOKT", tooltip="Команда тормоза",}, + {ID = "XH", x=10+8*0,y=17+5*4, radius=3,col="g",var="VOKX", tooltip="Команда хода",}, + {ID = "VP", x=10+8*0,y=17+5*5, radius=3,col="g",var="VOVP", tooltip="Команда Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ€ÐµÐ²ÐµÑ€Ñа вперёд",}, + {ID = "NZ", x=10+8*0,y=17+5*6, radius=3,col="g",var="VONZ", tooltip="Команда Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ€ÐµÐ²ÐµÑ€Ñа назад",}, + {ID = "SS", x=10+8*0,y=17+5*7, radius=3,col="g",var="VSS", tooltip="Сигнал Ñобранной Ñхемы",}, + + {ID = "PV", x=10+8*0,y=17+5*9, radius=3,col="g",var="", tooltip="Команда Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ð²Ð¾Ð·Ð±ÑƒÐ´Ð¸Ñ‚ÐµÐ»Ñ",}, + + {ID = "LK", x=10+8*0,y=17+5*11, radius=3,col="g",var="VOLK", tooltip="Команда Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð»Ð¸Ð½ÐµÐ¹Ð½Ð¾Ð³Ð¾ конатктора",}, + } +} +ENT.ButtonMap["BUV_MUVK1"] = { + pos = Vector(-425+3,60+1,-23), + ang = Angle(0,0,90), + width = 40, + height = 110, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "V1", x=11+8*0,y=19+5*2, radius=3,col="g",var="VOV1", tooltip="Управление катушкой ВЗ№1",}, + {ID = "KT", x=11+8*0,y=19+5*3, radius=3,col="g",var="VOKT", tooltip="Управление контакторами тормоза",}, + {ID = "KH", x=11+8*0,y=19+5*4, radius=3,col="g",var="VOKX", tooltip="Управление контакторами хода",}, + {ID = "LK", x=11+8*0,y=19+5*5, radius=3,col="g",var="VOLK", tooltip="Управление линейным контактором",}, + {ID = "PV", x=11+8*0,y=19+5*6, radius=3,col="g",var="", tooltip="Управление подвозбудителем",}, + {ID = "NZ", x=11+8*0,y=19+5*7, radius=3,col="g",var="VONZ", tooltip="Управление реверÑом Ðазад",}, + + {ID = "SN", x=11+8*1,y=19+5*2, radius=3,col="r",var="VOSN", tooltip="Ð¡Ð¸Ð»Ð¾Ð²Ð°Ñ Ñхема вагона не Ñобрана",}, + } +} +ENT.ButtonMap["BUV_MUVK2"] = { + pos = Vector(-425+5.5,60+1,-23), + ang = Angle(0,0,90), + width = 30, + height = 110, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "RTM", x=11+8*0,y=19+5*2, radius=3,col="g",var="VORKT", tooltip="Управление реле минимального тока",}, + {ID = "RKT", x=11+8*0,y=19+5*3, radius=3,col="g",var="VORMT", tooltip="Управление реле ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ",}, + {ID = "RP", x=11+8*0,y=19+5*4, radius=3,col="r",var="VORP", tooltip="Сработка защиты",}, + {ID = "OTK", x=11+8*0,y=19+5*5, radius=3,col="r",var="OIZ", tooltip="Отказ вагона",}, + {ID = "75", x=11+8*0,y=19+5*6, radius=3,col="g",var="VO75V", tooltip="Резервное питание БУВ",}, + {ID = "VP", x=11+8*0,y=19+5*7, radius=3,col="g",var="VOVP", tooltip="Управление реверÑом Вперед",}, + } +} +---[[ +placeLamps("BUV_MPS") +placeLamps("BUV_MVD") +placeLamps("BUV_MALP1") +placeLamps("BUV_MALP2") +placeLamps("BUV_MIV") +placeLamps("BUV_MGR") +placeLamps("BUV_MLUA") +placeLamps("BUV_MUVK1") +placeLamps("BUV_MUVK2") +--]] + + +ENT.ButtonMap["FrontPneumatic"] = { + pos = Vector(470-9,-45.0,-58.0+5), + 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(449+11, -31, -62), + ang = Angle(-15,-90,0), + hide = 2, +} +ENT.ClientProps["FrontTrain"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_blue.mdl", + pos = Vector(449+11, 31, -62), + ang = Angle( 15,-90,0), + hide = 2, +} +ENT.ClientSounds["ParkingBrake"] = {{"ParkingBrake",function() return "disconnect_valve" end,1,1,50,1e3,Angle(-90,0,0)}} +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-1,45.0,-58.0+5), + ang = Angle(0,270,90), + width = 1050, + height = 100, + scale = 0.1, + + buttons = { + {ID = "RearTrainLineIsolationToggle",x=000, y=0, w=400, h=100, tooltip="",var="RtI",states={"Train.Buttons.Opened","Train.Buttons.Closed"}}, + {ID = "RearBrakeLineIsolationToggle",x=500, y=0, w=400, h=100, tooltip="",var="RbI",states={"Train.Buttons.Opened","Train.Buttons.Closed"}}, + {ID = "ParkingBrakeToggle",x=900, y=0, w=150, h=100, tooltip="",var="ParkingBrake"}, + } +} +ENT.ClientProps["RearTrain"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_blue.mdl", + pos = Vector(-450-22, -34, -62), + ang = Angle(-15,90,0), + hide = 2, +} +ENT.ClientProps["RearBrake"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_red.mdl", + pos = Vector(-450-22, 34, -62), + ang = Angle( 15,90,0), +} +ENT.ClientProps["ParkingBrake"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_white.mdl", + pos = Vector(-450-22, -55, -62), + ang = Angle(-15,90,0), + hide = 0.5, +} +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-9.5+22,50+20,-60+2+5), + 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-9.5+22,36+20,-78+2+5), + ang = Angle(-90,90,-90), + 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(-185,-68,-50), + ang = Angle(0,0,90), + width = 170, + height = 80, + scale = 0.1, + hideseat=0.1, + hide=true, + screenHide = true, + + buttons = { + {ID = "AirDistributorDisconnectToggle",x=0,y=0,w= 170,h = 80,tooltip="",var="AD",states={"Train.Buttons.On","Train.Buttons.Off"}}, + } +} + +-- Battery panel +ENT.ButtonMap["Battery"] = { + pos = Vector(-470.0,-10,50.6), + ang = Angle(0,-90,180), + width = 100, + height = 100, + scale = 0.08, + hide=0.8, + + buttons = { + {ID = "VBToggle", x=0, y=0, w=100, h=100, tooltip="ВБ: Выключатель батареи", model = { + model = "models/metrostroi_train/81-717/battery_enabler.mdl", + var="VB",speed=0.5,vmin=1,vmax=0.8, + sndvol = 0.8, snd = function(val) return val and "pak_on" or "pak_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + } +} +ENT.ButtonMap["Voltages"] = { + pos = Vector(-464.3,-15.2,60.7), + ang = Angle(0,90,90), + width = 145, + height = 75, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "!BatteryVoltage", x=0, y=0, w=72.5,h=75, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BatteryVoltage"),ent:GetPackedRatio("BatteryVoltage")*150) end}, + {ID = "!BatteryCurrent", x=72.5, y=0, w=72.5,h=75, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BatteryCurrent"),ent:GetPackedRatio("BatteryCurrent")*500) end}, + } +} +ENT.ButtonMap["Pressures"] = { + pos = Vector(-464.3,6.3,61), + ang = Angle(0,90,90), + width = 160, + height = 80, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "!BCPressure", x=0, y=0, w=80,h=80, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BCPressure"),ent:GetPackedRatio("BCPressure")*6) end}, + {ID = "!BLTLPressure", x=80, y=0, w=80,h=80, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BLTLPressure"),ent:GetPackedRatio("TLPressure")*16,ent:GetPackedRatio("BLPressure")*16) end}, + } +} +ENT.ButtonMap["couch_cap"] = { + pos = Vector(-460,60,0), + ang = Angle(0,0,70), + width = 1000, + height = 600, + scale = 0.0625, + hide=0.8, + buttons = { + {ID = "CouchCap",x=0,y=0,w=1000,h=600, tooltip=""} + } +} +ENT.ButtonMap["couch_cap_o"] = { + pos = Vector(-464,-21,-45), + ang = Angle(0,70,5), + width = 1100, + height = 380, + scale = 0.0625, + hide=0.8, + buttons = { + {ID = "CouchCap",x=0,y=0,w=1100,h=380, tooltip=""} + } +} +ENT.ButtonMap["PVZ"] = { + pos = Vector(-456,60,-15), + ang = Angle(0,0,90), + width = 350, + height = 105, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "SF4Toggle",x=25*1,y=60*0,w=25,h=45,tooltip=""}, + {ID = "SF27Toggle",x=25*2,y=60*0,w=25,h=45,tooltip=""}, + {ID = "SF46Toggle",x=25*3,y=60*0,w=25,h=45,tooltip=""}, + {ID = "SF12Toggle",x=25*4,y=60*0,w=25,h=45,tooltip=""}, + {ID = "SF13Toggle",x=25*5,y=60*0,w=25,h=45,tooltip=""}, + {ID = "SF45Toggle",x=25*6,y=60*0,w=25,h=45,tooltip=""}, + {ID = "SF16Toggle",x=25*7,y=60*0,w=25,h=45,tooltip=""}, + {ID = "SF44Toggle",x=25*8,y=60*0,w=25,h=45,tooltip=""}, + {ID = "SF43Toggle",x=25*9,y=60*0,w=25,h=45,tooltip=""}, + {ID = "SF14Toggle",x=25*10,y=60*0,w=25,h=45,tooltip=""}, + {ID = "SF15Toggle",x=25*11,y=60*0,w=25,h=45,tooltip=""}, + {ID = "SF25Toggle",x=25*12,y=60*0,w=25,h=45,tooltip=""}, + {ID = "SF72Toggle",x=25*13,y=60*0,w=25,h=45,tooltip=""}, + ------------------------------------------------------------------------ + {ID = "SF56Toggle",x=25*0,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF29Toggle",x=25*1,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF26Toggle",x=25*2,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF42Toggle",x=25*3,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF18Toggle",x=25*4,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF20Toggle",x=25*5,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF17Toggle",x=25*6,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF19Toggle",x=25*7,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF21Toggle",x=25*8,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF22Toggle",x=25*9,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF34Toggle",x=25*10,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF35Toggle",x=25*11,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF23Toggle",x=25*12,y=60*1,w=25,h=45,tooltip=""}, + {ID = "SF24Toggle",x=25*13,y=60*1,w=25,h=45,tooltip=""}, + } +} +for i,button in pairs(ENT.ButtonMap.PVZ.buttons) do + button.model = { + model = "models/metrostroi_train/81-720/button_av1.mdl", + var=button.ID:Replace("Toggle",""),speed=8,z=-15, + sndvol = 0.8,snd = function(val) return val and "av_on" or "av_off" end,sndmin = 80,sndmax = 1e3/3,sndang = Angle(-90,0,0), + } +end + + +ENT.ButtonMap["FrontDoor"] = { + pos = Vector(470-11,16,48.4-2), + 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.ClientProps["door1"] = { + model = "models/metrostroi_train/81-718/door_torec.mdl", + pos = Vector(459.2,-15.9,-2.7), + ang = Angle(0,89.5,0), + hide=2, +} + +ENT.ButtonMap["RearDoor"] = { + pos = Vector(-470-3,-16,48.4-2), + ang = Angle(0,90,90), + width = 642, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "RearDoor",x=0,y=0,w=642,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.ClientProps["door2"] = { + model = "models/metrostroi_train/81-718/door_torec.mdl", + pos = Vector(-472.5,15.75,-2.7), + ang = Angle(0,-90,0), + hide=2, +} + + +ENT.ClientProps["train_line"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(-465.05,14.2,58.55), + ang = Angle(-90,0,180), + hideseat=0.8, +} +ENT.ClientProps["brake_line"] = { + model = "models/metrostroi_train/Equipment/arrow_tm.mdl", + pos = Vector(-465.01,14.2,58.55), + ang = Angle(-90,0,180), + hideseat=0.8, +} +ENT.ClientProps["brake_cylinder"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(-464.94,9.0,58.45), + ang = Angle(-90,0,180), + hideseat=0.8, +} +-------------------------------------------------------------------------------- +ENT.ClientProps["voltmeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(-464.80,-13.07,56.81), + ang = Angle(-90,0,180), + hideseat=0.8, + bscale = Vector(1.2,1.2,1.65) +} +ENT.ClientProps["ampermeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(-464.80,-8.04,56.81), + ang = Angle(-90,0,180), + hideseat=0.8, + bscale = Vector(1.2,1.2,1.65) +} + +ENT.ClientProps["bortlamps1"] = { + model = "models/metrostroi_train/81-502/bort_lamps_body.mdl", + pos = Vector(-52,67,45.5), + ang = Angle(0,0,0), + hide = 2, +} +ENT.ClientProps["bortlamp1_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = ENT.ClientProps.bortlamps1.pos+Vector(0,0.9,3.25), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp1_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = ENT.ClientProps.bortlamps1.pos+Vector(0,0.9,-0.1), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp1_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = ENT.ClientProps.bortlamps1.pos+Vector(0,0.9,-3.3), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamps2"] = { + model = "models/metrostroi_train/81-717/bort_lamps_body.mdl", + pos = Vector(39,-67,45.5), + ang = Angle(0,180,0), + hide = 2, +} +ENT.ClientProps["bortlamp2_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = ENT.ClientProps.bortlamps2.pos+Vector(0,-0.9,3.25), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp2_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = ENT.ClientProps.bortlamps2.pos+Vector(0,-0.9,-0.1), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp2_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = ENT.ClientProps.bortlamps2.pos+Vector(0,-0.9,-3.3), + ang = Angle(0,180,0), + nohide = true, +} +--[[ +ENT.ClientProps["bortlamps3"] = { + model = "models/metrostroi_train/81-502/bort_lamps_body.mdl", + pos = Vector(-6.5,67,51.2), + ang = Angle(90,0,0), + hide = 2, +} +ENT.ClientProps["bortlamp3_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = ENT.ClientProps.bortlamps3.pos+Vector(3.28,0.9,-0.02), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp3_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = ENT.ClientProps.bortlamps3.pos+Vector(-0.06,0.9,-0.02), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamp3_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = ENT.ClientProps.bortlamps3.pos+Vector(-3.33,0.9,-0.02), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["bortlamps4"] = { + model = "models/metrostroi_train/81-502/bort_lamps_body.mdl", + pos = Vector(-6.5,-67,51.2), + ang = Angle(90,180,0), + hide = 2, +} +ENT.ClientProps["bortlamp4_w"] = { + model = "models/metrostroi_train/equipment/bort_lamps_b.mdl", + pos = ENT.ClientProps.bortlamps4.pos+Vector(-3.28,-0.9,-0.02), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp4_g"] = { + model = "models/metrostroi_train/equipment/bort_lamps_g.mdl", + pos = ENT.ClientProps.bortlamps4.pos+Vector(0.06,-0.9,-0.02), + ang = Angle(0,180,0), + nohide = true, +} +ENT.ClientProps["bortlamp4_y"] = { + model = "models/metrostroi_train/equipment/bort_lamps_y.mdl", + pos = ENT.ClientProps.bortlamps4.pos+Vector(3.33,-0.9,-0.02), + ang = Angle(0,180,0), + nohide = true, +}--]] +-------------------------------------------------------------------------------- +-- Add doors +--[[ local function GetDoorPosition(i,k,j) + if j == 0 + then return Vector(338.2-230.1*i+(1-k)*0.8,-65.449*(1-2*k),0.761) + else return Vector(338.2-230.1*i+(1-k)*0.8,-65.449*(1-2*k),0.761) + end +end +for i=0,3 do + for k=0,1 do + ENT.ClientProps["door"..i.."x"..k.."a"] = { + model = "models/metrostroi_train/81-718/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-718/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-718/81-718_doors_pos1.mdl", + pos = Vector(338.445,65.164,0.807), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door1x1"] = { + model = "models/metrostroi_train/81-718/81-718_doors_pos2.mdl", + pos = Vector(108.324,65.164,0.807), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door2x1"] = { + model = "models/metrostroi_train/81-718/81-718_doors_pos3.mdl", + pos = Vector(-122.182+0.4,65.164,0.807), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door3x1"] = { + model = "models/metrostroi_train/81-718/81-718_doors_pos4.mdl", + pos = Vector(-351.531,65.164,0.807), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door0x0"] = { + model = "models/metrostroi_train/81-718/81-718_doors_pos4.mdl", + pos = Vector(338.445,-65.164,0.807), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door1x0"] = { + model = "models/metrostroi_train/81-718/81-718_doors_pos3.mdl", + pos = Vector(108.324,-65.164,0.807), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door2x0"] = { + model = "models/metrostroi_train/81-718/81-718_doors_pos2.mdl", + pos = Vector(-122.182+0.6,-65.164,0.807), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door3x0"] = { + model = "models/metrostroi_train/81-718/81-718_doors_pos1.mdl", + pos = Vector(-351.531,-65.164,0.807), + ang = Angle(0,90,0), + hide = 2.0, +} + +local xpos = { + -417.6, + -354.2, + -285.5, + -236.0, + -186.6, + -123, + -55.62, + -11.79+5.7, + 46.24-2.8, + 104.27+2.65, + 162.30+12.25, + 220.33+3.8, + 278.36-4.9, + 336.3+5.6, + 394.24+11.25, +} +for i = 0,29 do + ENT.ClientProps["lamp1_"..i+1] = { + model = "models/metrostroi_train/81-717/lamps/lamp_typ2.mdl", + pos = Vector(xpos[math.floor(i/2)+1], 29.7-(i%2)*59.4, 63.3), + ang = Angle(0,0,-8+(i%2)*16), + hide = 1.1, + } +end +local yventpos = { + -414.5+0*117, + -414.5+1*117+6.2, + -414.5+2*117+5, + -414.5+3*117+2, + -414.5+4*117-6.2, + -414.5+5*117-9, + -414.5+6*117-10.2, + -414.5+7*117-4, +} +for i=1,8 do + ENT.ClientProps["vent"..i] = { + model = "models/metrostroi_train/81-720/vent.mdl", + pos = Vector(yventpos[i],0,62), + ang = Angle(0,0,0), + hide = 1.1, + } +end +for i=0,3 do + ENT.ClientProps["TrainNumberL"..i] = { + model = "models/metrostroi_train/common/bort_numbers.mdl", + pos = Vector(41+16+i*6.6-5*6.6/2,67.4,-17.8), + ang = Angle(0,180,0), + skin=i, + hide = 1.5, + callback = function(ent) + ent.WagonNumber = false + end, + } + ENT.ClientProps["TrainNumberR"..i] = { + model = "models/metrostroi_train/common/bort_numbers.mdl", + pos = Vector(64+16-i*6.6-5*6.6/2,-67.4,-17.8), + ang = Angle(0,0,0), + skin=i, + hide = 1.5, + callback = function(ent) + ent.WagonNumber = false + end, + } +end + +ENT.Lights = { + [11] = { "dynamiclight", Vector( 200, 0, -20), Angle(0,0,0), Color(255,175,50), brightness = 3, distance = 400 , fov=180,farz = 128, changable = true }, + [12] = { "dynamiclight", Vector( 0, 0, -20), Angle(0,0,0), Color(255,175,50), brightness = 3, distance = 400, fov=180,farz = 128, changable = true }, + [13] = { "dynamiclight", Vector(-200, 0, -20), Angle(0,0,0), Color(255,175,50), brightness = 3, distance = 400 , fov=180,farz = 128, changable = true }, + + -- Side lights + [15] = { "light",Vector(-52,67,45.5)+Vector(0,0.9,3.25), Angle(0,0,0), Color(254,254,254), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [16] = { "light",Vector(-52,67,45.5)+Vector(0,0.9,-0.02), Angle(0,0,0), Color(40,240,122), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [17] = { "light",Vector(-52,67,45.5)+Vector(0,0.9,-3.3), Angle(0,0,0), Color(254,210,18), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [18] = { "light",Vector(39,-67,45.5)+Vector(0,-0.9,3.25), Angle(0,0,0), Color(254,254,254), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [19] = { "light",Vector(39,-67,45.5)+Vector(0,-0.9,-0.02), Angle(0,0,0), Color(40,240,122), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, + [20] = { "light",Vector(39,-67,45.5)+Vector(0,-0.9,-3.3), Angle(0,0,0), Color(254,210,18), brightness = 0.1, scale = 0.2, texture = "sprites/light_glow02", size = 1.5 }, +} + +local tbl = {[0]=-0.25,0.00,0.04,0.09,0.13,0.17,0.20,0.27,0.33,0.42,0.56,0.73,1.00} +function ENT:Initialize() + self.BaseClass.Initialize(self) + --self.Train:SetPackedRatio("EmergencyValve_dPdT", leak) + --self.Train:SetPackedRatio("EmergencyValveEPK_dPdT", leak) + --self.Train:SetPackedRatio("EmergencyBrakeValve_dPdT", leak) + + self.CraneRamp = 0 + self.ReleasedPdT = 0 + self.EmergencyValveRamp = 0 + self.EmergencyValveEPKRamp = 0 + self.EmergencyBrakeValveRamp = 0 + self.FrontLeak = 0 + self.RearLeak = 0 + + self.TISUVol = 0 + self.TISUFreq = 0 + + self.VentRand = {} + self.VentState = {} + self.VentVol = {} + for i=1,8 do + self.VentRand[i] = math.Rand(0.5,2) + self.VentState[i] = 0 + self.VentVol[i] = 0 + end +end +function ENT:UpdateWagonNumber() + for i=0,3 do + local count = self.WagonNumber < 250 and 3 or 4 + self:ShowHide("TrainNumberL"..i,i 0.5) + self:SetLightPower(18, Bortlamp_w > 0.5) + self:SetLightPower(16, Bortlamp_g > 0.5) + self:SetLightPower(19, Bortlamp_g > 0.5) + self:SetLightPower(17, Bortlamp_y > 0.5) + self:SetLightPower(20, Bortlamp_y > 0.5) + + local activeLights = 0 + for i = 1,30 do + local colV = self:GetNW2Vector("lamp"..i) + local col = Color(colV.x,colV.y,colV.z) + local state = self:Animate("Lamp1_"..i,self:GetPackedBool("lightsActive"..i) and 1 or 0,0,1,6,false) + self:ShowHideSmooth("lamp1_"..i,state,col) + activeLights = activeLights + state + end + for i=11,13 do + local col = self:GetNW2Vector("lampD"..i) + if self.LightsOverride[i].vec ~= col then + self.LightsOverride[i].vec = col + self.LightsOverride[i][4] = Color(col.x,col.y,col.z) + self:SetLightPower(i, false) + else + self:SetLightPower(i, activeLights > 0,activeLights/30) + end + end + self:Animate("brake_line", self:GetPackedRatio("BLPressure"),0.14, 0.875, 256,2)--,,0.01) + self:Animate("train_line", self:GetPackedRatio("TLPressure"),0.14, 0.875, 256,2)--,,0.01) + self:Animate("brake_cylinder", self:GetPackedRatio("BCPressure"),0.14, 0.875, 256,2)--,,0.03) + self:Animate("voltmeter", self:GetPackedRatio("BatteryVoltage"),0.601, 0.400) + self:Animate("ampermeter", 0.5+self:GetPackedRatio("BatteryCurrent"),0.604, 0.398) + + local capOpened = self:GetPackedBool("CouchCap") + self:ShowHide("seats_old_cap_o",capOpened) + self:ShowHide("seats_old_cap",not capOpened) + self:HidePanel("couch_cap",capOpened) + self:HidePanel("couch_cap_o",not capOpened) + self:HidePanel("PVZ",not capOpened) + self:ShowHide("otsek_cap_r",not capOpened) + self:HidePanel("BUV_MPS",not capOpened) + self:HidePanel("BUV_MVD",not capOpened) + self:HidePanel("BUV_MALP1",not capOpened) + self:HidePanel("BUV_MALP2",not capOpened) + self:HidePanel("BUV_MIV",not capOpened) + self:HidePanel("BUV_MGR",not capOpened) + self:HidePanel("BUV_MLUA",not capOpened) + self:HidePanel("BUV_MUVK1",not capOpened) + self:HidePanel("BUV_MUVK2",not capOpened) + + --self:Animate("Autodrive", self:GetPackedBool(132) and 1 or 0, 0,1, 16, false) + local door1 = self:Animate("door1",self:GetPackedBool("FrontDoor") and 1 or 0,0,0.25,4,0.5) + local door2 = self:Animate("door2",self:GetPackedBool("RearDoor") and (capOpened and 0.25 or 1) or 0,0,0.25,4,0.5) + 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 + + 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) + self:Animate("ParkingBrake", self:GetPackedBool("ParkingBrake") and 1 or 0,1,0, 3, false) + + --print(self.ClientProps["a0"]) + -- 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) + --self:InitializeSounds() + 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.8+self.DoorLoopStates[id]*0.2) + local n_l = "door"..i.."x"..k--.."a" + --local n_r = "door"..i.."x"..k.."b" + local dlo = 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 + + local speed = self:GetPackedRatio("Speed", 0)*100 + local ventSpeedAdd = math.Clamp(speed/30,0,1) + + local v1state = self:GetPackedBool("Vent1Work") + local v2state = self:GetPackedBool("Vent2Work") + for i=1,8 do + local rand = self.VentRand[i] + local vol = self.VentVol[i] + local even = i%2 == 0 + local work = (even and v1state or not even and v2state) + local target = math.min(1,(work and 1 or 0)+ventSpeedAdd*rand*0.4)*2 + if self.VentVol[i] < target then + self.VentVol[i] = math.min(target,vol + dT/1.5*rand) + elseif self.VentVol[i] > target then + self.VentVol[i] = math.max(0,vol - dT/8*rand*(vol*0.3)) + end + self.VentState[i] = (self.VentState[i] + 10*((self.VentVol[i]/2)^3)*dT)%1 + local vol1 = math.max(0,self.VentVol[i]-1) + local vol2 = math.max(0,(self.VentVol[i-1] or self.VentVol[i+1])-1) + self:SetSoundState("vent"..i,vol1*(0.7+vol2*0.3),0.5+0.5*vol1+math.Rand(-0.01,0.01)) + if IsValid(self.ClientEnts["vent"..i]) then + self.ClientEnts["vent"..i]:SetPoseParameter("position",self.VentState[i]) + end + end + + local dT = self.DeltaTime + local rollingi = math.min(1,self.TunnelCoeff+math.Clamp((self.StreetCoeff-0.82)/0.3,0,1)) + local rollings = math.max(self.TunnelCoeff*0.6,self.StreetCoeff) + 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-55)/10,0,1) ---ANY IDEAS?? MOTORS BACKGROUND SOUNDS AT HISPEED + local rol_motorsp = Lerp((speed-72)/25*0.2,0.85,1.1) + self:SetSoundState("rolling_motors",rol_motors,rol_motorsp) ---ANY IDEAS??--]] + + 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) + local parking_brake = self:GetPackedRatio("ParkingBrakePressure_dPdT",0) + local parking_brake_abs = math.Clamp(math.abs(parking_brake)-0.3,0,1) + if self.ParkingBrake1 ~= (parking_brake<1) then + self.ParkingBrake1 = (parking_brake<1) + if self.ParkingBrake1 then self:PlayOnce("parking_brake_en","bass",1,1) end + end + if self.ParkingBrake2 ~= (parking_brake>-0.8) then + self.ParkingBrake2 = (parking_brake>-0.8) + if self.ParkingBrake2 then self:PlayOnce("parking_brake_rel","bass",0.6,1) end + end + self:SetSoundState("parking_brake",parking_brake_abs,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) + + self:SetSoundState("compressor",self:GetPackedBool("Compressor") and 0.6 or 0,1) + self:SetSoundState("compressor2",self:GetPackedBool("Compressor") and 0.8 or 0,1) + + local state = self:GetPackedRatio("RNState") + local freq = math.max(1,self:GetNW2Int("RNFreq",0)) + + self.TISUVol = math.Clamp(self.TISUVol+(state-self.TISUVol)*dT*8,0,1) + if freq > 12 then + self.TISUFreq = 12 + elseif freq > self.TISUFreq then + self.TISUFreq = math.min(self.TISUFreq+dT/2*12,12) + elseif freq < self.TISUFreq then + self.TISUFreq = freq--math.max(self.TISUFreq-dT/2*12,0) + end + local fq = 0.25+tbl[math.Round(self.TISUFreq)]*0.75 + self:SetSoundState("tisu",self.TISUVol,fq)--]] + + self:SetSoundState("bpsn",self:GetPackedBool("BBE") and 1 or 0,1.0) --FIXME громкоÑть по другому + + local work = self:GetPackedBool("AnnPlay") + local buzz = self:GetPackedBool("AnnBuzz") and self:GetNW2Int("AnnouncerBuzz",-1) > 0 + for k in ipairs(self.AnnouncerPositions) do + self:SetSoundState("announcer_buzz"..k,(buzz and work) and 1 or 0,1) + end + for k,v in ipairs(self.AnnouncerPositions) do + 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:Draw() + self.BaseClass.Draw(self) +end +function ENT:DrawPost() +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 == "K1" then + local id = range > 0 and "k1_on" or "k1_off" + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["k1_on"][1] = 440-Lerp(speed/0.1,0,330) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "K2" then + local id = range > 0 and "k2_on" or "k2_off" + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["k2_on"][1] = 440-Lerp(speed/0.1,0,330) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "K3" then + local id = range > 0 and "k3_on" or "k3_off" + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["k3_on"][1] = 440-Lerp(speed/0.1,0,330) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "KMR1" then + local id = range > 0 and "kmr1_on" or "kmr1_off" + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["kmr1_on"][1] = 440-Lerp(speed/0.1,0,330) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "KMR2" then + local id = range > 0 and "kmr2_on" or "kmr2_off" + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["kmr2_on"][1] = 440-Lerp(speed/0.1,0,330) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "brake" then + self:PlayOnce("brake_f",location,range,pitch) + self:PlayOnce("brake_b",location,range,pitch) + return + end + if soundid == "QF1" then + local id = range > 0 and "qf1_on" or "qf1_off" + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["qf1_on"][1] = 440-Lerp(speed/0.1,0,330) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + return soundid,location,range,pitch +end +Metrostroi.GenerateClientProps() diff --git a/lua/entities/gmod_subway_81-719/init.lua b/lua/entities/gmod_subway_81-719/init.lua new file mode 100644 index 0000000..815625b --- /dev/null +++ b/lua/entities/gmod_subway_81-719/init.lua @@ -0,0 +1,409 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +ENT.BogeyDistance = 650 -- Needed for gm trainspawner + +ENT.SyncTable = { + "VB","GV","ParkingBrake", + "SF4","SF27","SF46","SF12","SF13","SF45","SF16","SF44","SF43","SF14","SF15","SF25","SF72","SF56","SF29","SF26","SF42","SF18","SF20","SF17","SF19","SF21","SF22","SF34","SF35","SF23","SF24", +} + +function ENT:Initialize() + self.Plombs = { + Init = true, + } + + self:SetModel("models/metrostroi_train/81-718/81-718_int.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create seat entities + self.DriverSeat = self:CreateSeat("driver",Vector(-415-16,0,-48+2.5+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) + + -- Create bogeys + if Metrostroi.BogeyOldMap then + self.FrontBogey = self:CreateBogey(Vector( 317-5,0,-84),Angle(0,180,0),true,"717") + self.RearBogey = self:CreateBogey(Vector(-317+0,0,-84),Angle(0,0,0),false,"717") + self.FrontCouple = self:CreateCouple(Vector( 414+6.545,0,-62),Angle(0,0,0),true,"717") + self.RearCouple = self:CreateCouple(Vector(-419.5-6.545,0,-62),Angle(0,180,0),false,"717") + else + self.FrontBogey = self:CreateBogey(Vector( 317-11,0,-80),Angle(0,180,0),true,"717") + self.RearBogey = self:CreateBogey(Vector(-317+0,0,-80),Angle(0,0,0),false,"717") + self.FrontCouple = self:CreateCouple(Vector( 410-2,0,-66),Angle(0,0,0),true,"717") + self.RearCouple = self:CreateCouple(Vector(-423+2,0,-66),Angle(0,180,0),false,"717") + end + local pneumoPow = 1.0+(math.random()^0.4)*0.3 + self.FrontBogey.PneumaticPow = pneumoPow + self.RearBogey.PneumaticPow = pneumoPow + -- Initialize key mapping + self.KeyMap = { + [KEY_F] = "PneumaticBrakeUp", + [KEY_R] = "PneumaticBrakeDown", + [KEY_PAD_1] = "PneumaticBrakeSet1", + [KEY_PAD_2] = "PneumaticBrakeSet2", + [KEY_PAD_3] = "PneumaticBrakeSet3", + [KEY_PAD_4] = "PneumaticBrakeSet4", + [KEY_PAD_5] = "PneumaticBrakeSet5", + [KEY_PAD_6] = "PneumaticBrakeSet6", + [KEY_PAD_7] = "PneumaticBrakeSet7", + [KEY_PAD_0] = "DriverValveDisconnect", + + [KEY_LSHIFT] = { + [KEY_L] = "DriverValveDisconnectToggle", + }, + + [KEY_RSHIFT] = { + [KEY_L] = "DriverValveDisconnectToggle", + }, + } + + + self.InteractionZones = { + { + ID = "FrontBrakeLineIsolationToggle", + Pos = Vector(461.5, -34, -53), Radius = 8, + }, + { + ID = "FrontTrainLineIsolationToggle", + Pos = Vector(461.5, 33, -53), Radius = 8, + }, + { + ID = "RearBrakeLineIsolationToggle", + Pos = Vector(-474.5, 33, -53), Radius = 8, + }, + { + ID = "RearTrainLineIsolationToggle", + Pos = Vector(-474.5, -34, -53), Radius = 8, + }, + { + ID = "ParkingBrakeToggle", + Pos = Vector(-469, 54.5, -53), Radius = 8, + }, + { + ID = "FrontDoor", + Pos = Vector(451.5,35,4), Radius = 20, + }, + { + ID = "RearDoor", + Pos = Vector(-464.8,-35,4), Radius = 20, + }, + { + ID = "GVToggle", + Pos = Vector(162.50,62,-59), Radius = 10, + }, + { + ID = "VBToggle", + Pos = Vector(-470 -15, 53), Radius = 20, + }, + { + ID = "AirDistributorDisconnectToggle", + Pos = Vector(-177, -66, -50), Radius = 20, + }, + } + + -- Cross connections in train wires + self.TrainWireInverts = { + [11] = true, + [34] = true, + } + self.TrainWireCrossConnections = { + [5] = 6, -- Reverser F<->B + [24] = 25, --VTP + [36] = 37, -- Doors L<->R + [57] = 58, -- ReverserR F<->B + } + + -- KV wrench mode + self.KVWrenchMode = 0 + + self.RearDoor = false + self.FrontDoor = false + + self.Lamps = { + broken = {}, + } + local rand = math.random() > 0.8 and 1 or math.random(0.95,0.99) + for i = 1,30 do + if math.random() > rand then self.Lamps.broken[i] = math.random() > 0.5 end + end + + self.WrenchMode = 0 + + self:TrainSpawnerUpdate() +end +function ENT:UpdateLampsColors() + self.LampType = math.Round(math.random()^0.5)+1 + self:SetNW2Int("LampType",self.LampType) + + local lCol,lCount = Vector(),0 + local rnd1,rnd2,col = 0.7+math.random()*0.3,math.random() + local typ = math.Round(math.random()) + local r,g = 15,15 + for i = 1,30 do + local chtp = math.random() > rnd1 + if typ == 0 and not chtp or typ == 1 and chtp then + if math.random() > rnd2 then + r = -20+math.random()*25 + g = 0 + else + g = -5+math.random()*15 + r = g + end + col = Vector(245+r,228+g,189) + else + if math.random() > rnd2 then + g = math.random()*15 + b = g + else + g = 15 + b = -10+math.random()*25 + end + col = Vector(255,235+g,235+b) + end + lCol = lCol + col + lCount = lCount + 1 + if i%9.3<1 then + local id = 9+math.ceil(i/9.3) + + local tcol = (lCol/lCount)/255 + --self.Lights[id][4] = Vector(tcol.r,tcol.g^3,tcol.b^3)*255 + self:SetNW2Vector("lampD"..id,Vector(tcol.r,tcol.g^3,tcol.b^3)*255) + lCol = Vector() lCount = 0 + end + self:SetNW2Vector("lamp"..i,col) + end +end +function ENT:TrainSpawnerUpdate() + self:UpdateLampsColors() + 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 Panel = self.Panel + -- Initialize key mapping + self.RetVal = self.BaseClass.Think(self) + + self:SetNW2Int("Wrench",self.WrenchMode) + + local lightsActive1 = self.Panel.EL3_6 > 0 + local lightsActive2 = self.Panel.EL7_30 > 0 + for i = 1,30 do + if (lightsActive2 or (lightsActive1 and math.ceil((i+5)%8)==math.ceil(i/7)%2)) then + if not self.Lamps[i] and not self.Lamps.broken[i] then self.Lamps[i] = CurTime() + math.Rand(0.1,math.Rand(0.5,2)) end + else + self.Lamps[i] = nil + end + if (self.Lamps[i] and CurTime() - self.Lamps[i] > 0) then + self:SetPackedBool("lightsActive"..i,true) + else + self:SetPackedBool("lightsActive"..i,false) + end + end + + self:SetPackedBool("AnnBuzz",Panel.AnnouncerBuzz > 0) + self:SetPackedBool("AnnPlay",Panel.AnnouncerPlaying > 0) + + self:SetPackedBool("BBE",self.BBE.KM1 > 0) + self:SetPackedBool("Compressor",self.KK.Value) + if self.PTTI.State < 0 then + self:SetPackedRatio("RNState", ((self.PTTI.RNState)-0.25)*math.Clamp((math.abs(self.Electric.Itotal/2)-30-self.Speed*2)/20,0,1)) + self:SetNW2Int("RNFreq", 13) + else + self:SetPackedRatio("RNState", (0.75-self.PTTI.RNState)*math.Clamp((math.abs(self.Electric.Itotal/2)-30-self.Speed*2)/20,0,1)) + self:SetNW2Int("RNFreq", ((self.PTTI.FreqState or 0)-1/3)/(2/3)*12) + end + local power = false--self.Panel.V1 > 0.5 + self:SetNW2Bool("ASNPPlay",power and self:ReadTrainWire(47) > 0) + + if self.CouchCap then + --Лампы БУВ + --МВД + self:SetPackedBool("VOTK",self.BUV.OTK > 0) + self:SetPackedBool("VRP",self.BUV.RP > 0) + --МÐЛП1,2 + self:SetPackedBool("VFM",self.BUV.FM > 0) + self:SetPackedBool("VU400",self.BUV.U400 > 0) + self:SetPackedBool("VE1350",self.BUV.E1350 > 0) + + self:SetPackedBool("VDIF",self.BUV.DIF > 0) + self:SetPackedBool("VE13650",self.BUV.E13650 > 0) + self:SetPackedBool("VE130",self.BUV.E130 > 0) + self:SetPackedBool("VSN",self.BUV.SN > 0) + + self:SetPackedBool("VU800",self.BUV.U800 > 0) + self:SetPackedBool("VU975",self.BUV.U975 > 0) + self:SetPackedBool("VE2450",self.BUV.E2450 > 0) + self:SetPackedBool("VE24650",self.BUV.E24650 > 0) + self:SetPackedBool("VE240",self.BUV.E240 > 0) + self:SetPackedBool("VBV",self.BUV.BV > 0) + + self:SetPackedBool("VMSU",self.BUV.MSU > 0) + self:SetPackedBool("VMZK",self.BUV.MZK > 0) + --МИВ + self:SetPackedBool("VZZ",self.BUV.ZZ > 0) + self:SetPackedBool("VV1",self.BUV.V1 > 0) + self:SetPackedBool("VSMA",self.BUV.SMA > 0) + self:SetPackedBool("VSMB",self.BUV.SMB > 0) + + self:SetPackedBool("VIVP",self.BUV.IVP > 0) + self:SetPackedBool("VINZ",self.BUV.INZ > 0) + self:SetPackedBool("VIVR",self.BUV.IVR > 0) + self:SetPackedBool("VINR",self.BUV.INR > 0) + + self:SetPackedBool("VIX",self.BUV.IX > 0) + self:SetPackedBool("VIT",self.BUV.IT > 0) + self:SetPackedBool("VIU1",self.BUV.IU1 > 0) + self:SetPackedBool("VIU2",self.BUV.IU2 > 0) + self:SetPackedBool("VIM",self.BUV.IM > 0) + self:SetPackedBool("VIXP",self.BUV.IXP > 0) + self:SetPackedBool("VIU1R",self.BUV.IU1R > 0) + + self:SetPackedBool("VITARS",self.BUV.ITARS > 0) + self:SetPackedBool("VITEM",self.BUV.ITEM > 0) + self:SetPackedBool("VIAVR",self.BUV.IAVR > 0) + + self:SetPackedBool("VIPROV",self.BUV.IPROV > 0) + self:SetPackedBool("VIPROV0",self.BUV.IPROV0 > 0) + self:SetPackedBool("VIVZ",self.BUV.IVZ > 0) + + self:SetPackedBool("VITP1",self.BUV.ITP1 > 0) + self:SetPackedBool("VITP2",self.BUV.ITP2 > 0) + self:SetPackedBool("VITP3",self.BUV.ITP3 > 0) + self:SetPackedBool("VITP4",self.BUV.ITP4 > 0) + self:SetPackedBool("VIKX",self.BUV.IKX > 0) + self:SetPackedBool("VIKT",self.BUV.IKT > 0) + self:SetPackedBool("VILT",self.BUV.ILT > 0) + self:SetPackedBool("VIRV",self.BUV.IRV > 0) + self:SetPackedBool("VIRN",self.BUV.IRN > 0) + self:SetPackedBool("VIBV",self.BUV.IBV > 0) + + self:SetPackedBool("VOVP",self.BUV.OVP > 0) + self:SetPackedBool("VONZ",self.BUV.ONZ > 0) + self:SetPackedBool("VOLK",self.BUV.OLK > 0) + self:SetPackedBool("VOKX",self.BUV.OKX > 0) + self:SetPackedBool("VOKT",self.BUV.OKT > 0) + self:SetPackedBool("VOPV",self.BUV.OPV > 0) + self:SetPackedBool("VOSN",self.BUV.OSN > 0) + self:SetPackedBool("VOOIZ",self.BUV.OIZ > 0) + self:SetPackedBool("VORP",self.BUV.ORP > 0) + + self:SetPackedBool("VOV1",self.BUV.OV1 > 0) + self:SetPackedBool("VORKT",self.BUV.ORKT > 0) + self:SetPackedBool("VORMT",self.BUV.ORMT > 0) + self:SetPackedBool("VO75V",self.BUV.O75V > 0) + + self:SetPackedBool("VSS",self.BUV.SS > 0) + end + + self:SetPackedBool("DoorsW",self.Panel.HL13 > 0) + self:SetPackedBool("GRP",self.Panel.HL25 > 0) + self:SetPackedBool("BrW",self.Panel.HL46 > 0) + + + self:SetPackedBool("RearDoor",self.RearDoor) + self:SetPackedBool("FrontDoor",self.FrontDoor) + self:SetPackedBool("CouchCap",self.CouchCap) + + self:SetPackedRatio("Speed", self.Speed/100) + + self:SetPackedBool("Vent1Work",self.BUVS.KV1>0) + self:SetPackedBool("Vent2Work",self.BUVS.KV2>0) + + self:SetPackedRatio("BLPressure", self.Pneumatic.BrakeLinePressure/16.0) + self:SetPackedRatio("TLPressure", self.Pneumatic.TrainLinePressure/16.0) + self:SetPackedRatio("BCPressure", math.min(3.2,self.Pneumatic.BrakeCylinderPressure)/6.0) + + self:SetPackedRatio("BatteryVoltage",self.Panel["V1"]*self.Battery.Voltage/150.0) + self:SetPackedRatio("BatteryCurrent",self.Panel["V1"]*math.Clamp((self.Battery.Voltage-75)*0.01,-0.01,1)) + + -- 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 = 27000+1000*(A < 0 and 1 or 0) + --self.RearBogey.MotorForce = 27000+1000*(A < 0 and 1 or 0) + self.FrontBogey.MotorForce = 22500+5000*(A < 0 and 1 or 0)*math.max(self.KMR1.Value,self.KMR2.Value) + self.RearBogey.MotorForce = 22500+5000*(A < 0 and 1 or 0)*math.max(self.KMR1.Value,self.KMR2.Value) + self.FrontBogey.Reversed = (self.KMR2.Value > 0.5) + self.RearBogey.Reversed = (self.KMR1.Value > 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 and A > 0 then P = P*(1.0 + 2.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) + --self.RearBogey.MotorPower = P*0.5 + --self.FrontBogey.MotorPower = P*0.5 + + --self.Acc = (self.Acc or 0)*0.95 + self.Acceleration*0.05 + --print(self.Acc) + + -- Apply brakes + self.FrontBogey.PneumaticBrakeForce = 50000.0-2000 + self.FrontBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + self.FrontBogey.ParkingBrakePressure = math.max(0,(2.6-self.Pneumatic.ParkingBrakePressure)/2.6)/2 + self.FrontBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + self.FrontBogey.DisableContacts = self.U5.Value>0 + self.RearBogey.PneumaticBrakeForce = 50000.0-2000 + self.RearBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + self.RearBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + self.RearBogey.ParkingBrakePressure = math.max(0,(2.6-self.Pneumatic.ParkingBrakePressure)/2.6)/2 + self.RearBogey.DisableContacts = self.U5.Value>0 + --self.RearBogey.ParkingBrake = self.ParkingBrake.Value > 0.5 + end + self:GenerateJerks() + + return self.RetVal +end + +function ENT:TriggerTurbostroiInput(sys,name,val) + self.BaseClass.TriggerTurbostroiInput(self,sys,name,val) +end + +-------------------------------------------------------------------------------- +function ENT:OnButtonPress(button,ply) + if string.find(button,"PneumaticBrakeSet") then + self.Pneumatic:TriggerInput("BrakeSet",tonumber(button:sub(-1,-1))) + return + end + if button == "RearDoor" then self.RearDoor = not self.RearDoor end + if button == "FrontDoor" then self.FrontDoor = not self.FrontDoor end + if button == "CouchCap" then self.CouchCap = not self.CouchCap end +end + +function ENT:OnButtonRelease(button) + if string.find(button,"PneumaticBrakeSet") then + local pos = tonumber(button:sub(-1,-1)) + if button == "PneumaticBrakeSet1" then + self.Pneumatic:TriggerInput("BrakeSet",2) + end + return + 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 + +function ENT:OnTrainWireError(k) +end +function ENT:OnPlay(soundid,location,range,pitch) + return soundid,location,range,pitch +end diff --git a/lua/entities/gmod_subway_81-719/shared.lua b/lua/entities/gmod_subway_81-719/shared.lua new file mode 100644 index 0000000..65346aa --- /dev/null +++ b/lua/entities/gmod_subway_81-719/shared.lua @@ -0,0 +1,257 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" +ENT.SkinsType = "81-718" +ENT.Model = "models/metrostroi_train/81-718/81-718_int.mdl" + +ENT.Spawnable = true +ENT.AdminSpawnable = false +ENT.DontAccelerateSimulation = false +function ENT:PassengerCapacity() + return 300 +end + +function ENT:GetStandingArea() + return Vector(-450,-30,-48),Vector(380,30,-48) +end + +local function GetDoorPosition(i,k) + return Vector(359.0 - 35/2 - 229.5*i,-65*(1-2*k),7.5) +end + +-- 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 + +ENT.AnnouncerPositions = { + {Vector(-3,-60, 62),300,0.3}, + {Vector(-3,60 ,62),300,0.3}, +} +ENT.Cameras = { +} +local yventpos = { + -414.5+0*117, + -414.5+1*117+6.2, + -414.5+2*117+5, + -414.5+3*117+2, + -414.5+4*117-6.2, + -414.5+5*117-9, + -414.5+6*117-10.2, + -414.5+7*117-4, +} +function ENT:InitializeSounds() + self.BaseClass.InitializeSounds(self) + self.SoundNames["tisu"] = {"subway_trains/718/tisu.wav",loop = true} + self.SoundPositions["tisu"] = {400,1e9,Vector(0,0,-448),0.7} --FIXME: Pos + + 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.15} + self.SoundPositions["rolling_10"] = {480,1e12,Vector(0,0,0),0.20} + self.SoundPositions["rolling_40"] = {480,1e12,Vector(0,0,0),0.55} + self.SoundPositions["rolling_70"] = {480,1e12,Vector(0,0,0),0.60} + self.SoundPositions["rolling_80"] = {480,1e12,Vector(0,0,0),0.75} + + self.SoundNames["rolling_motors"] = {loop=true,"subway_trains/common/junk/wind_background1.wav"} + self.SoundNames["rolling_motors2"] = {loop=true,"subway_trains/common/junk/wind_background1.wav"} + self.SoundPositions["rolling_motors"] = {250,1e12,Vector(200,0,0),0.33} + self.SoundPositions["rolling_motors2"] = {250,1e12,Vector(-250,0,0),0.33} + + 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"] = {480,1e12,Vector(0,0,0),0.90} + self.SoundPositions["rolling_medium2"] = {480,1e12,Vector(0,0,0),0.90} + self.SoundPositions["rolling_high2"] = {480,1e12,Vector(0,0,0),1.00} + + self.SoundNames["bpsn"] = {"subway_trains/717/bpsn/bpsn_2.wav", loop=true} + self.SoundPositions["bpsn"] = {400,1e9,Vector(0,45,-448),0.02} + self.SoundNames["compressor"] = {loop=2.0,"subway_trains/d/pneumatic/compressor/compessor_d_start.wav","subway_trains/d/pneumatic/compressor/compessor_d_loop.wav", "subway_trains/d/pneumatic/compressor/compessor_d_end.wav"} + self.SoundNames["compressor2"] = {loop=1.79,"subway_trains/717/compressor/compressor_717_start2.wav","subway_trains/717/compressor/compressor_717_loop2.wav", "subway_trains/717/compressor/compressor_717_stop2.wav"} + self.SoundPositions["compressor"] = {600,1e9,Vector(-118,-40,-66),0.15} + self.SoundPositions["compressor2"] = {480,1e9,Vector(-118,-40,-66),0.55} + + 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["parking_brake"] = {loop=true,"subway_trains/common/pneumatic/parking_brake.wav"} + self.SoundNames["parking_brake_en"] = "subway_trains/common/pneumatic/parking_brake_stop.mp3" + self.SoundNames["parking_brake_rel"] = "subway_trains/common/pneumatic/parking_brake_stop2.mp3" + self.SoundPositions["parking_brake"] = {80,1e9,Vector(-456.50, -55,-63),0.6} + self.SoundPositions["parking_brake_en"] = self.SoundPositions["parking_brake"] + self.SoundPositions["parking_brake_rel"] = self.SoundPositions["parking_brake"] + self.SoundNames["front_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["front_isolation"] = {300,1e9,Vector(443, 0,-63),1} + self.SoundNames["rear_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["rear_isolation"] = {300,1e9,Vector(-456, 0,-63),1} + + self.SoundNames["disconnect_valve"] = "subway_trains/common/switches/pneumo_disconnect_switch.mp3" + --[[ self.SoundNames["crane013_brake"] = {loop=true,"subway_trains/common/pneumatic/release_2.wav"} + self.SoundPositions["crane013_brake"] = {100,1e9,Vector(431.5,-20.3,-12),0.86} + self.SoundNames["crane013_release"] = {loop=true,"subway_trains/common/pneumatic/013_brake2.wav"} + self.SoundPositions["crane013_release"] = {250,1e9,Vector(431.5,-20.3,-12),0.86}--]] + + self.SoundNames["pak_on"] = "subway_trains/717/switches/rc_on.mp3" + self.SoundNames["pak_off"] = "subway_trains/717/switches/rc_off.mp3" + + 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["gv_f"] = {"subway_trains/717/kv70/reverser_0-b_1.mp3","subway_trains/717/kv70/reverser_0-b_2.mp3"} + self.SoundNames["gv_b"] = {"subway_trains/717/kv70/reverser_b-0_1.mp3","subway_trains/717/kv70/reverser_b-0_2.mp3"} + self.SoundNames["pak_on"] = "subway_trains/717/switches/rc_on.mp3" + self.SoundNames["pak_off"] = "subway_trains/717/switches/rc_off.mp3" + + self.SoundNames["k2_on"] = "subway_trains/717/pneumo/lk2_on.mp3" + self.SoundNames["k2_off"] = "subway_trains/717/pneumatic/lk/lk2_off.mp3" + self.SoundNames["k1_on"] = "subway_trains/717/pneumo/lk1_on.mp3" + self.SoundNames["k3_on"] = self.SoundNames["k2_on"] + self.SoundNames["kmr1_on"] = self.SoundNames["k1_on"] + self.SoundNames["kmr2_on"] = self.SoundNames["k1_on"] + self.SoundNames["k1_off"] = self.SoundNames["k2_off"] + self.SoundNames["k3_off"] = self.SoundNames["k2_off"] + self.SoundNames["kmr1_off"] = "subway_trains/717/pneumo/lk2_off.mp3" + self.SoundNames["kmr2_off"] = self.SoundNames["kmr1_off"] + --self.SoundNames["ksh1_off"] = "subway_trains/717/pneumo/ksh1.mp3" + self.SoundPositions["k2_on"] = {440,1e9,Vector(-60,-40,-66),0.22} + self.SoundPositions["k1_on"] = {440,1e9,Vector(-60,-40,-66),0.3} + self.SoundPositions["k2_off"] = {440,1e9,Vector(-60,-40,-66),0.1} + self.SoundPositions["k3_off"] = self.SoundPositions["k2_off"] + self.SoundPositions["k3_on"] = self.SoundPositions["k2_on"] + self.SoundPositions["k3_off"] = self.SoundPositions["k2_off"] + self.SoundPositions["kmr1_on"] = self.SoundPositions["k2_on"] + self.SoundPositions["kmr1_off"] = {440,1e9,Vector(-60,-40,-66),0.3} + self.SoundPositions["kmr2_on"] = self.SoundPositions["k2_on"] + self.SoundPositions["kmr2_off"] = {440,1e9,Vector(-60,-40,-66),0.3} + --self.SoundPositions["ksh1_off"] = self.SoundPositions["lk1_on"] + + self.SoundNames["qf1_on"] = "subway_trains/717/pneumo/ksh1.mp3" + self.SoundNames["qf1_off"] = "subway_trains/717/pneumo/ksh1.mp3" + self.SoundPositions["qf1_on"] = self.SoundPositions["k2_on"] + self.SoundPositions["qf1_off"] = self.SoundPositions["k2_on"] + + --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"] = {300,1e9,Vector(-420,45,-30),1} + self.SoundPositions["vdol_off"] = {300,1e9,Vector(-420,45,-30),0.4} + 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(-420,45,-30),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"] = {60,1e9,Vector(-420,45,-30),1} + self.SoundPositions["vdz_off"] = {60,1e9,Vector(-420,45,-30),0.4} + + 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} + 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 i=1,7 do + self.SoundNames["vent"..i] = {loop=true,"subway_trains/720/vent_mix.wav"} + self.SoundPositions["vent"..i] = {100,1e9,Vector(yventpos[i],0,30),0.12} + end + for k,v in ipairs(self.AnnouncerPositions) do + self.SoundNames["announcer_buzz"..k] = {loop=true,"subway_announcers/asnp/bpsn_ann.wav"} + self.SoundPositions["announcer_buzz"..k] = {v[2] or 600,1e9,v[1],v[3]/8} + end +end +function ENT:InitializeSystems() + self:LoadSystem("Electric","81_719_Electric") + -- Токоприёмник + self:LoadSystem("TR","TR_3B") + -- ЭлектротÑговые двигатели + self:LoadSystem("Engines","DK_117DM") + + self:LoadSystem("BBE","81_718_BBE") + self:LoadSystem("BKVA","81_718_BKVA") + self:LoadSystem("BSKA","81_718_BSKA") + self:LoadSystem("BUVS","81_718_BUVS") + self:LoadSystem("PTTI","81_718_PTTI") + + self:LoadSystem("Panel","81_719_Panel") + + self:LoadSystem("BUV","81_718_BUV") + self:LoadSystem("BVA","81_718_BVA") + + --self:LoadSystem("IGLA_CBKI","IGLA_CBKI1") + --self:LoadSystem("IGLA_PCBK") + + self:LoadSystem("Announcer","81_71_Announcer", "AnnouncementsASNP") + --self:LoadSystem("ASNP","81_71_ASNP") + + -- ПневмоÑиÑтема 81-710 + self:LoadSystem("Pneumatic","81_718_Pneumatic") + self:LoadSystem("Battery","81_718_Battery") + + self:LoadSystem("Horn","81_722_Horn") +end + +--------------------------------------------------- +-- Defined train information +-- Types of wagon(for wagon limit system): +-- 0 = Head or intherim +-- 1 = Only head +-- 2 = Only intherim +--------------------------------------------------- +ENT.SubwayTrain = { + Type = "81", + Name = "81-719", + WagType = 2, + Announcer = { + }, + EKKType = 718, +} +ENT.NumberRanges = {{0000,0100},{250,500}} \ No newline at end of file diff --git a/lua/entities/gmod_subway_81-720/cl_init.lua b/lua/entities/gmod_subway_81-720/cl_init.lua new file mode 100644 index 0000000..7efbaa9 --- /dev/null +++ b/lua/entities/gmod_subway_81-720/cl_init.lua @@ -0,0 +1,2076 @@ +-------------------------------------------------------------------------------- +-- 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["PUU"] = { + pos = Vector(480.5-0.5,41,-19.4+2.0), --446 -- 14 -- -0,5 + ang = Angle(0,-90,50), + width = 750, + height = 135, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "!DoorsClosed",x=45.5, y=30.5, radius=8, tooltip = "Двери закрыты",model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",var="DoorsClosed",z=-7, color=Color(120,255,50)}, + }}, + {ID = "StandToggle",x=96, y=30.5, radius=15, tooltip = "СтоÑнка",model = { + model = "models/metrostroi_train/81-720/tumbler1.mdl",z=-5, ang=180, + var="Stand",speed=12, vmin=0, vmax=1, + sndvol = 0.5, snd = function(val) return val and "switch_on" or "switch_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "TickerToggle",x=137.5, y=30.5, radius=15, tooltip = "Ð‘ÐµÐ³ÑƒÑ‰Ð°Ñ Ñтрока",model = { + model = "models/metrostroi_train/81-720/buttons/b2.mdl",z=6, + lamp = {model = "models/metrostroi_train/81-720/buttons/l3.mdl",var="TickerLamp",color=Color(200,150,60), anim=true, + lcolor=Color(200,150,60),lz = 16,lbright=2,lfov=140,lfar=16,lnear=8,lshadows=0}, + var="Ticker",speed=12, vmin=0, vmax=1, + sndvol = 0.3, snd = function(val) return val and "button_square_on" or "button_square_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "KAHToggle",x=137.5+37.83*2, y=30.5, radius=15, tooltip = "КÐÐ¥",model = { + model = "models/metrostroi_train/81-720/buttons/b5.mdl",z=6, + lamp = {model = "models/metrostroi_train/81-720/buttons/l3.mdl",var="KAHLamp",color=Color(160,255,220), anim=true, + lcolor=Color(160,255,220),lz = 10,lbright=2,lfov=155,lfar=16,lnear=8,lshadows=0}, + var="KAH",speed=12, vmin=0, vmax=1, + sndvol = 0.3, snd = function(val) return val and "button_square_on" or "button_square_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "KAHkToggle",x=137.5+37.83*2-20, y=30.5+10, w=40,h=20, tooltip="Крышка кнопки КÐÐ¥\nKAH button cover", model = { + model = "models/metrostroi_train/81/krishka.mdl", ang = 0, z = 1, + var="KAHk",speed=8,min=0.43,max=0.68, disable="KAHToggle", + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=70,x=15,y=-45,z=3,var="KAHPl", ID="KAHPl",}, + sndvol = 1, snd = function(val) return val and "kr_close" or "kr_open" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + noTooltip = true, + }}, + {ID = "ALSToggle",x=137.5+37.83*3, y=30.5, radius=15, tooltip = "ÐЛС",model = { + model = "models/metrostroi_train/81-720/buttons/b6.mdl",z=6, + lamp = {model = "models/metrostroi_train/81-720/buttons/l3.mdl",var="ALSLamp",color=Color(255,80,100), anim=true, + lcolor=Color(255,80,100),lz = 10,lbright=2,lfov=155,lfar=16,lnear=8,lshadows=0}, + var="ALS",speed=12, vmin=0, vmax=1, + sndvol = 0.3, snd = function(val) return val and "button_square_on" or "button_square_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "ALSkToggle",x=137.5+37.83*3-20, y=30.5+10, w=40,h=20, tooltip="Крышка кнопки ÐЛС\nALS button cover", model = { + model = "models/metrostroi_train/81/krishka.mdl", ang = 0, z = 1, + var="ALSk",speed=8,min=0.43,max=0.68, disable="ALSToggle", + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=180-70,x=-5,y=-45,z=3,var="ALSPl", ID="ALSPl",}, + sndvol = 1, snd = function(val) return val and "kr_close" or "kr_open" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + noTooltip = true, + }}, + {ID = "FDepotToggle",x=137.5+37.83*4, y=30.5, radius=15, tooltip = "Выезд из депо",model = { + model = "models/metrostroi_train/81-720/buttons/b4.mdl",z=6, + var="FDepot",speed=12, vmin=0, vmax=1, + sndvol = 0.3, snd = function(val) return val and "button_square_on" or "button_square_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "!HVoltage",x=137.5+37.83*5, y=30.5, radius=8, tooltip = "Сеть контактнаÑ",model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",var="HVoltage",z=-7, color=Color(255,120,50)}, + }}, + {ID = "PassSchemeToggle",x=137.5+37.83*6, y=30.5, radius=15, tooltip = "Табло наддверное",model = { + model = "models/metrostroi_train/81-720/buttons/b4.mdl",z=6, + lamp = {model = "models/metrostroi_train/81-720/buttons/l1.mdl",var="PassSchemeLamp",anim=true, + lcolor=Color(255,255,255),lz = 16,lbright=2,lfov=140,lfar=16,lnear=8,lshadows=0}, + var="PassScheme",speed=12, vmin=0, vmax=1, + sndvol = 0.3, snd = function(val) return val and "button_square_on" or "button_square_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "EmergencyCompressorSet",x=138+37.83*7, y=30.5, radius=15, tooltip = "КомпреÑÑор резервный",model = { + model = "models/metrostroi_train/81-720/buttons/b7.mdl",z=7, + var="EmergencyCompressor",speed=12, vmin=0, vmax=0.9, + sndvol = 0.5, snd = function(val) return val and "button_press" or "button_release" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "EnableBVSet",x=137.5+37.83*8, y=30.5, radius=15, tooltip = "Включение защиты",model = { + model = "models/metrostroi_train/81-720/buttons/b5.mdl",z=6, + var="EnableBV",speed=12, vmin=0, vmax=1, + sndvol = 0.3, snd = function(val) return val and "button_square_press" or "button_square_release" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "DisableBVSet",x=137.5+37.83*9, y=30.5, radius=15, tooltip = "Отключение БВ",model = { + model = "models/metrostroi_train/81-720/buttons/b6.mdl",z=6, + var="DisableBV",speed=12, vmin=0, vmax=1, + sndvol = 0.3, snd = function(val) return val and "button_square_press" or "button_square_release" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "RingSet",x=137.5+37.83*10, y=30.5, radius=15, tooltip = "Передача управлениÑ(звонок)",model = { + model = "models/metrostroi_train/81-720/buttons/b4.mdl",z=6, + var="Ring",speed=12, vmin=0, vmax=1, + sndvol = 0.3, snd = function(val) return val and "button_square_press" or "button_square_release" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "R_Program2Set",x=566.63+36.5*0, y=30.5, radius=15, tooltip = "Программа 2",model = { + model = "models/metrostroi_train/81-720/buttons/b3.mdl",z=6,--blue + var="R_Program2",speed=12, vmin=0, vmax=1, + sndvol = 0.3, snd = function(val) return val and "button_square_press" or "button_square_release" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "R_AnnouncerToggle",x=566.63+36.5*1, y=30.5, radius=15, tooltip = "Информатор",model = { + model = "models/metrostroi_train/81-720/buttons/b3.mdl",z=6,--blue + lamp = {model = "models/metrostroi_train/81-720/buttons/l1.mdl",var="R_AnnouncerLamp",anim=true, color=Color(50,150,200), + lcolor=Color(50,150,200),lz = 16,lbright=2,lfov=140,lfar=4,lnear=2,lshadows=0}, + var="R_Announcer",speed=12, vmin=0, vmax=1, + sndvol = 0.3, snd = function(val) return val and "button_square_on" or "button_square_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "R_LineToggle",x=566.63+35.75*2, y=30.5, radius=15, tooltip = "ЛиниÑ",model = { + model = "models/metrostroi_train/81-720/buttons/b3.mdl",z=6,--blue + lamp = {model = "models/metrostroi_train/81-720/buttons/l3.mdl",var="R_LineLamp",anim=true, color=Color(50,150,200), + lcolor=Color(50,150,200),lz = 16,lbright=2,lfov=140,lfar=4,lnear=2,lshadows=0}, + var="R_Line",speed=12, vmin=0, vmax=1, + sndvol = 0.3, snd = function(val) return val and "button_square_on" or "button_square_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "R_EmerSet",x=566.63+35.5*3, y=30.5, radius=15, tooltip = "СвÑзь ÑкÑтреннаÑ",model = { + model = "models/metrostroi_train/81-720/buttons/b3.mdl",z=6,--blue + var="R_Emer",speed=12, vmin=0, vmax=1, + sndvol = 0.3, snd = function(val) return val and "button_square_press" or "button_square_release" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "R_Program1Set",x=566.63+35.2*4, y=30.5, radius=15, tooltip = "ПуÑк запиÑи",model = { + model = "models/metrostroi_train/81-720/buttons/b5.mdl",z=6,--blue + var="R_Program1",speed=12, vmin=0, vmax=1, + sndvol = 0.3, snd = function(val) return val and "button_square_press" or "button_square_release" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + + {ID = "EnableBVEmerSet",x=42, y=110, radius=15, tooltip = "Возврат БВ резервный",model = { + model = "models/metrostroi_train/81-720/button_circle2.mdl",z=3, + var="EnableBVEmer",speed=12, vmin=0, vmax=0.9, + sndvol = 0.5, snd = function(val) return val and "button_press" or "button_release" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "EmergencyControlsToggle",x=566.63+36.5*1, y=90, radius=15, tooltip = "Управление резервное",model = { + model = "models/metrostroi_train/81-720/tumbler1.mdl",z=-2, + var="EmergencyControls",speed=12, vmin=0, vmax=1, ang=180, + sndvol = 0.5, snd = function(val) return val and "switch_on" or "switch_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "WiperToggle",x=566.63+35.75*1.5, y=90, radius=15, tooltip = "Стекло-очиÑтитель",model = { + model = "models/metrostroi_train/81-720/tumbler1.mdl",z=-2, + var="Wiper",speed=12, vmin=0, vmax=1, ang=180, + sndvol = 0.5, snd = function(val) return val and "switch_on" or "switch_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + + {ID = "!VDop",x=289, y=76, w=107, h=6, tooltip = "ДопуÑтимаÑÑ ÑкороÑть",tooltipFunc = function(ent) + if(ent:GetNW2Bool("BISpeedLimitBlink")) then + return Format(Metrostroi.GetPhrase("Train.Buttons.SpeedLimit"),ent:GetNW2Int("BISpeedLimit")) + .." ("..Metrostroi.GetPhrase("Train.Buttons.04")..")" or "" + elseif ent:GetNW2Int("BISpeedLimit") ~= 100 then + return Format(Metrostroi.GetPhrase("Train.Buttons.SpeedLimit"),ent:GetNW2Int("BISpeedLimit")) + end + end}, + {ID = "!VFact",x=289, y=76+9, w=107, h=6, tooltip = "ФактичеÑÐºÐ°Ñ ÑкороÑть",tooltipFunc = function(ent) return ent:GetNW2Int("BISpeed") ~= -1 and Format(Metrostroi.GetPhrase("Train.Buttons.Speed"),ent:GetNW2Int("BISpeed")) end}, + {ID = "!VPred",x=289, y=76+17, w=107, h=6, tooltip = "ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ ÑкороÑть",tooltipFunc = function(ent) return ent:GetNW2Int("BISpeedLimitNext") ~= 100 and Format(Metrostroi.GetPhrase("Train.Buttons.SpeedLimitNext"),ent:GetNW2Int("BISpeedLimitNext")) end}, + + {ID = "!VFact2",x=403, y=75, w=26, h=28, tooltip = "ДопуÑтимаÑÑ ÑкороÑть",tooltipFunc = function(ent) + if ent:GetNW2Bool("BISpeedLimitBlink") then + return Format(Metrostroi.GetPhrase("Train.Buttons.SpeedAll"),ent:GetNW2Int("BISpeed"),ent:GetNW2Int("BISpeedLimit")).." ("..Metrostroi.GetPhrase("Train.Buttons.04")..")" or "" + elseif ent:GetNW2Int("BISpeed") ~= -1 then + return Format(Metrostroi.GetPhrase("Train.Buttons.SpeedAll"),ent:GetNW2Int("BISpeed"),ent:GetNW2Int("BISpeedLimit")) + end + end}, + + {ID = "!Acc",x=436, y=86, w=80, h=6, tooltip = "УÑкорение",tooltipFunc = function(ent) + if ent:GetPackedRatio("BIAccel",0) <= -10 then + return Metrostroi.GetPhrase("Common.ARS.AO") + else + return Format(Metrostroi.GetPhrase("Train.Buttons.Acceleration"),ent:GetPackedRatio("BIAccel",0)) + end + end}, + {ID = "!Forw",x=525, y=80, w=18, h=10, tooltip = "Движение вперёд"}, + {ID = "!Back",x=525, y=90, w=18, h=10, tooltip = "Движение назад"}, + } +} + +ENT.ButtonMap["PUL"] = { + pos = Vector(473,36,-26.6+1.6), --446 -- 14 -- -0,5 + ang = Angle(0,-90,21.5), + width = 100, + height = 280, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "DoorSelectLToggle",x=33, y=79.5, radius=15, tooltip = "Выбор левых дверей",model = { + model = "models/metrostroi_train/81-720/buttons/b4.mdl",z=-6, + lamp = {model = "models/metrostroi_train/81-720/buttons/l1.mdl",var="DoorLeftLamp",z=0,anim=true, + lcolor=Color(255,255,255),lz = 16,lbright=2,lfov=140,lfar=16,lnear=8,lshadows=0}, + var="DoorSelectL",speed=12, vmin=0, vmax=1, + sndvol = 0.3, snd = function(val) return val and "button_square_on" or "button_square_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "DoorSelectRToggle",x=78.5, y=79.5, radius=15, tooltip = "Выбор правых дверей",model = { + model = "models/metrostroi_train/81-720/buttons/b4.mdl",z=-6, + lamp = {model = "models/metrostroi_train/81-720/buttons/l3.mdl",var="DoorRightLamp",z=0,anim=true, + lcolor=Color(255,255,255),lz = 16,lbright=2,lfov=140,lfar=16,lnear=8,lshadows=0}, + var="DoorSelectR",speed=12, vmin=0, vmax=1, + sndvol = 0.3, snd = function(val) return val and "button_square_on" or "button_square_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "DoorBlockToggle",x=65, y=126.5, radius=15, tooltip = "Блокировка дверей",model = { + model = "models/metrostroi_train/81-720/buttons/b6.mdl",z=-6, + lamp = {model = "models/metrostroi_train/81-720/buttons/l3.mdl",var="DoorBlockLamp",z=0,anim=true,color=Color(255,80,100), + lcolor=Color(255,80,100),lz = 16,lbright=2,lfov=140,lfar=16,lnear=8,lshadows=0}, + var="DoorBlock",speed=12, vmin=0, vmax=1, + sndvol = 0.3, snd = function(val) return val and "button_square_on" or "button_square_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "!DoorLeftLamp",x=47, y=149, radius=8, tooltip = "Работа кнопки левых дверей",model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",var="DoorLeftLamp",z=-3, color=Color(120,255,50)}, + }}, + + {ID = "DoorLeftSet",x=49, y=197, radius=15, tooltip = "Левые двери",model = { + model = "models/metrostroi_train/81-720/button_circle1.mdl",z=-2, ang=0, + var="DoorLeft",speed=12, vmin=0, vmax=1, + sndvol = 0.5, snd = function(val) return val and "button_press" or "button_release" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + } +} +ENT.ButtonMap["PUR"] = { + pos = Vector(473,11,-26.6+1.6), --446 -- 14 -- -0,5 + ang = Angle(0,-90,21.5), + width = 210, + height = 280, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "AccelRateSet",x=13, y=79.5, radius=15, tooltip = "Темп разгона(Режим подъём)",model = { + model = "models/metrostroi_train/81-720/buttons/b4.mdl",z=-6, + var="AccelRate",speed=12, vmin=0, vmax=1, + lamp = {model = "models/metrostroi_train/81-720/buttons/l1.mdl",var="AccelRateLamp",anim=true, + lcolor=Color(255,255,255),lz = 16,lbright=2,lfov=140,lfar=16,lnear=8,lshadows=0}, + sndvol = 0.3, snd = function(val) return val and "button_square_press" or "button_square_release" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "EmerBrakeAddSet",x=58.5, y=79.5, radius=15, tooltip = "(резервный) Тормоз",model = { + model = "models/metrostroi_train/81-720/buttons/b2.mdl",z=-6, + var="EmerBrakeAdd",speed=12, vmin=0, vmax=1, + sndvol = 0.3, snd = function(val) return val and "button_square_press" or "button_square_release" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "EmerBrakeReleaseSet",x=103, y=79.5, radius=15, tooltip = "(резервный) ОтпуÑк",model = { + model = "models/metrostroi_train/81-720/buttons/b5.mdl",z=-6, + var="EmerBrakeRelease",speed=12, vmin=0, vmax=1, + sndvol = 0.3, snd = function(val) return val and "button_square_press" or "button_square_release" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "EmerBrakeToggle",x=149, y=79.5, radius=15, tooltip = "Тормоз резервный",model = { + model = "models/metrostroi_train/81-720/buttons/b6.mdl",z=-6, + lamp = {model = "models/metrostroi_train/81-720/buttons/l3.mdl",var="EmerBrakeWork",z=0,anim=true,color=Color(255,80,100), + lcolor=Color(255,80,100),lz = 16,lbright=2,lfov=140,lfar=16,lnear=8,lshadows=0}, + var="EmerBrake",speed=12, vmin=0, vmax=1, + sndvol = 0.3, snd = function(val) return val and "button_square_on" or "button_square_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + tooltipFunc = function(ent) return Format("%s%s",ent:GetPackedBool("EmerBrakeWork") and Metrostroi.GetPhrase("Train.Buttons.Active").."," or "",Metrostroi.GetPhrase(ent:GetPackedBool("EmerBrake") and "Train.Buttons.On" or "Train.Buttons.Off")) end, + }}, + {ID = "EmergencyBrakeToggle",x=188, y=79.5, radius=15, tooltip = "Тормоз ÑкÑтренный",model = { + model = "models/metrostroi_train/81-720/tumbler2.mdl",z=-2, ang=180, + var="EmergencyBrake",speed=12, vmin=0, vmax=1, + sndvol = 0.5, snd = function(val) return val and "switch_on" or "switch_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + + {ID = "DoorCloseToggle",x=13, y=119, radius=15, tooltip = "Закрытие дверей",model = { + model = "models/metrostroi_train/81-720/buttons/b5.mdl",z=-6, + lamp = {model = "models/metrostroi_train/81-720/buttons/l1.mdl",var="DoorCloseLamp",z=0,anim=true,color=Color(80,255,100), + lcolor=Color(80,255,100),lz = 16,lbright=2,lfov=140,lfar=4,lnear=2,lshadows=0}, + var="DoorClose",speed=12, vmin=0, vmax=1, + sndvol = 0.3, snd = function(val) return val and "button_square_on" or "button_square_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "AttentionMessageSet",x=58.5, y=119, radius=15, tooltip = "ВоÑприÑтие ÑообщениÑ",model = { + model = "models/metrostroi_train/81-720/buttons/b6.mdl",z=-6, + var="AttentionMessage",speed=12, vmin=0, vmax=1, + sndvol = 0.3, snd = function(val) return val and "button_square_press" or "button_square_release" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "AttentionSet",x=103, y=119, radius=15, tooltip = "БдительноÑть",model = { + model = "models/metrostroi_train/81-720/buttons/b6.mdl",z=-6, + var="Attention",speed=12, vmin=0, vmax=1, + sndvol = 0.3, snd = function(val) return val and "button_square_press" or "button_square_release" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "AttentionBrakeSet",x=149, y=119, radius=15, tooltip = "ВоÑприÑтие торможениÑ",model = { + model = "models/metrostroi_train/81-720/buttons/b6.mdl",z=-6, + var="AttentionBrake",speed=12, vmin=0, vmax=1, + sndvol = 0.3, snd = function(val) return val and "button_square_press" or "button_square_release" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "HornBSet",x=26, y=196, radius=15, tooltip = "Сигнал",model = { + model = "models/metrostroi_train/81-720/button_circle1.mdl",z=-2, ang=0, + var="HornB",speed=12, vmin=0, vmax=1, + sndvol = 0.5, snd = function(val) return val and "button_press" or "button_release" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "DoorRightSet",x=111, y=196, radius=15, tooltip = "Прав двери",model = { + model = "models/metrostroi_train/81-720/button_circle1.mdl",z=-2, ang=0, + var="DoorRight",speed=12, vmin=0, vmax=1, + sndvol = 0.5, snd = function(val) return val and "button_press" or "button_release" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "!DoorRightLamp",x=108.5, y=144, radius=8, tooltip = "Работа кнопки правых дверей",model = { + lamp = {model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",var="DoorRightLamp",z=-3, color=Color(120,255,50)}, + }}, + } +} +ENT.ButtonMap["RV"] = { + pos = Vector(473.65,55,-16.65), + ang = Angle(-1,-90+3,27), + width = 120, + height = 250, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "EmerX1Set",x=95, y=53, radius=15, tooltip = "Ход 1 резервный",model = { + model = "models/metrostroi_train/81-720/button_circle3.mdl",z=3, + var="EmerX1",speed=12, vmin=0, vmax=0.9, + sndvol = 0.5, snd = function(val) return val and "button_press" or "button_release" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "EmerX2Set",x=96, y=125, radius=15, tooltip = "Ход 2 резервный",model = { + model = "models/metrostroi_train/81-720/button_circle3.mdl",z=3, + var="EmerX2",speed=12, vmin=0, vmax=0.9, + sndvol = 0.5, snd = function(val) return val and "button_press" or "button_release" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "EmerCloseDoorsSet",x=97, y=190, radius=15, tooltip = "Закрытие дверей резервное",model = { + model = "models/metrostroi_train/81-720/button_circle3.mdl",z=3, + var="EmerCloseDoors",speed=12, vmin=0, vmax=0.9, + sndvol = 0.5, snd = function(val) return val and "button_press" or "button_release" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "EmergencyDoorsToggle",x=60, y=110, radius=15, tooltip = "Двери резервные",model = { + model = "models/metrostroi_train/81-720/tumbler2.mdl",z=-2, + var="EmergencyDoors",speed=12, vmin=0, vmax=1, ang=180, + sndvol = 0.5, snd = function(val) return val and "switch_on" or "switch_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + } +} +ENT.ButtonMap["PneumoHelper1"] = { + pos = Vector(471,59,24), + ang = Angle(0,-30,90), + width = 70, + height = 76, + scale = 0.0625, + + buttons = { + {ID = "!BrakeCylinder",x=35, y=38, radius=38, tooltip = "Тормозной цилиндр",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BCPressure"),ent:GetPackedRatio("BC")*6) end}, + } +} +ENT.ButtonMap["PneumoHelper2"] = { + pos = Vector(474,58.5,6.5), + ang = Angle(0,-30,90), + width = 70, + height = 76, + scale = 0.0625, + + buttons = { + {ID = "!BrakeTrainLine",x=35, y=38, radius=38, tooltip = "КраÑÐ½Ð°Ñ - тормознаÑ, Ñ‡Ñ‘Ñ€Ð½Ð°Ñ - Ð½Ð°Ð¿Ð¾Ñ€Ð½Ð°Ñ Ð¼Ð°Ð³Ð¸Ñтраль",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BLTLPressure"),ent:GetPackedRatio("TL")*16,ent:GetPackedRatio("BL")*16) end}, + } +} +ENT.ButtonMap["VoltHelper1"] = { + pos = Vector(476,60.5,0.9), + ang = Angle(0,-39,90), + width = 60, + height = 60, + scale = 0.0625, + + buttons = { + {ID = "!Battery",x=0, y=0, w=60, h=60, tooltip = "Вольтметр бортовой Ñети(батареÑ)",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BatteryVoltage"),ent:GetPackedRatio("LV")*150) end}, + } +} +ENT.ButtonMap["VoltHelper2"] = { + pos = Vector(476,60.5,-5), + ang = Angle(0,-43,90), + width = 60, + height = 190, + scale = 0.0625, + + buttons = { + {ID = "!HV",x=0, y=0, w=60, h=60, tooltip = "Киловольтметр выÑокого напрÑжениÑ(контактный рельÑ)",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesVoltage"),ent:GetPackedRatio("HV")*1000) end}, + {ID = "!I1_3",x=0, y=65, w=60, h=60, tooltip = "Ток 1-й группы Ñ‚Ñговых двигателей",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesCurrent"),ent:GetPackedRatio("I13")*1000-500) end}, + {ID = "!I2_4",x=0, y=130, w=60, h=60, tooltip = "Ток 2-й группы Ñ‚Ñговых двигателей",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesCurrent"),ent:GetPackedRatio("I24")*1000-500) end}, + } +} +ENT.ButtonMap["ASNP"] = { + pos = Vector(409.4,-10.3,44), --446 -- 14 -- -0,5 + ang = Angle(0,92,90), + width = 180, + height = 100, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "R_ASNPMenuSet",x=28, y=90, radius=8, tooltip = "ÐСÐП: Меню",model = { + model = "models/metrostroi_train/81-720/button_round.mdl", + var="R_ASNPMenu",speed=12, vmin=0, vmax=0.9, + sndvol = 0.5,snd = function(val) return val and "pnm_button1_on" or "pnm_button1_off" end, + sndmin = 50,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "R_ASNPUpSet",x=150, y=38-8, radius=8, tooltip = "ÐСÐП: Вверх",model = { + model = "models/metrostroi_train/81-720/button_round.mdl", + var="R_ASNPUp",speed=12, vmin=0, vmax=0.9, + sndvol = 0.5,snd = function(val) return val and "pnm_button1_on" or "pnm_button2_off" end, + sndmin = 50,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "R_ASNPDownSet",x=150, y=38+8, radius=8, tooltip = "ÐСÐП: Вниз",model = { + model = "models/metrostroi_train/81-720/button_round.mdl", + var="R_ASNPDown",speed=12, vmin=0, vmax=0.9, + sndvol = 0.5,snd = function(val) return val and "pnm_button2_on" or "pnm_button1_off" end, + sndmin = 50,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "R_ASNPOnToggle",x=20, y=38, radius=8, tooltip = "ÐСÐП: Включение",model = { + model = "models/metrostroi_train/81-720/tumbler2.mdl", ang=0, + var="R_ASNPOn",speed=12, vmin=1, vmax=0, + sndvol = 0.5,snd = function(val) return val and "pnm_on" or "pnm_off" end, + sndmin = 50,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + } +} +ENT.ButtonMap["ASNPScreen"] = { + pos = Vector(409.0,-8.3,42.4), --446 -- 14 -- -0,5 + ang = Angle(0,92,90), + width = 512, + height = 128, + scale = 0.025/2, + hide=0.8, +} +ENT.ButtonMap["IGLAButtons"] = { + pos = Vector(409.7,35.6,26.45), --446 -- 14 -- -0,5 + ang = Angle(0,83.3,90), + width = 87, + height = 70, + scale = 0.0701, + hideseat=0.2, + buttons = { + {ID = "IGLA1USet",x=11, y=39, w=12, h=7, tooltip="ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вверх"}, + {ID = "IGLA1Set",x=11, y=46, w=12, h=7, tooltip="ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°"}, + {ID = "IGLA1DSet",x=11, y=53, w=12, h=7, tooltip="ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вниз"}, + {ID = "IGLA2USet",x=65, y=39, w=12, h=7, tooltip="ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вверх"}, + {ID = "IGLA2Set",x=65, y=46, w=12, h=7, tooltip="ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°"}, + {ID = "IGLA2DSet",x=65, y=53, w=12, h=7, tooltip="ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вниз"}, + {ID = "!IGLASR",x=17.9, y=10.5, radius=3, tooltip="ИГЛÐ: SR", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl", var="IGLASR",color=Color(175,250,20),z=-3.5}, + }}, + {ID = "!IGLARX",x=27.5, y=10.5, radius=3, tooltip="ИГЛÐ: RX", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl", var="IGLARX",color=Color(255,56,30),z=-3.5}, + }}, + {ID = "!IGLAErr",x=40.5, y=10.5, radius=3, tooltip="ИГЛÐ: Отказ", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl", var="IGLAErr",color=Color(255,168,000),z=-3.5}, + }}, + {ID = "!IGLAOSP",x=50, y=10.5, radius=3, tooltip="ИГЛÐ: ОСП", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl", var="IGLAOSP",color=Color(175,250,20),z=-3.5}, + }}, + {ID = "!IGLAPI",x=59.5, y=10.5, radius=3, tooltip="ИГЛÐ: ПИ", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl", var="IGLAPI",color=Color(255,56,30),z=-3.5}, + }}, + {ID = "!IGLAOff",x=69, y=10.5, radius=3, tooltip="ИГЛÐ: Откл", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl", var="IGLAOff",color=Color(255,56,30),z=-3.5}, + }}, + } +} +--color=Color(175,250,20) green +--color=Color(255,56,30) red +--color=Color(255,168,000) yellow +ENT.ButtonMap["IGLA"] = { + pos = Vector(409.75,36.5,24.7), --446 -- 14 -- -0,5 + ang = Angle(0,83.3,90), + width = 512, + height = 128, + scale = 0.025/2.96, + hide=0.8, +} +ENT.ButtonMap["Tickers"] = { + pos = Vector(-460.5,-31.5,54.8), --446 -- 14 -- -0,5 + ang = Angle(0,90,90), + width = 852, + height = 64, + scale = 0.074, + hide=true, + hideseat=1, +} +ENT.ButtonMap["BackVent"] = { + pos = Vector(407.5,20,27.6), --446 -- 14 -- -0,5 + ang = Angle(0,83,90), + width = 400, + height = 150, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "!VentCondMode",x=173, y=33, radius=0, model = { + model = "models/metrostroi_train/81-720/rc_rotator1.mdl",z=10,ang=-91, + sndvol = 0.8, snd = function(val) return val and "switch_batt_on" or "switch_batt_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + getfunc = function(ent) return ent:GetPackedRatio("VentCondMode") end,var="VentCondMode", + speed=4, min=0.76,max=0.0 + }}, + {ID = "VentCondMode-",x=143,y=13,w=30,h=40,tooltip="Режим работы вентилÑтора: +",states={"Train.Buttons.Vent","Train.Buttons.Off","Train.Buttons.Cooling","Train.Buttons.Heating"},varTooltip = function(ent) return ent:GetPackedRatio("VentCondMode") end,}, + {ID = "VentCondMode+",x=173,y=13,w=30,h=40,tooltip="Режим работы вентилÑтора: -",states={"Train.Buttons.Vent","Train.Buttons.Off","Train.Buttons.Cooling","Train.Buttons.Heating"},varTooltip = function(ent) return ent:GetPackedRatio("VentCondMode") end,}, + {ID = "!VentHeatMode",x=80, y=60.5, radius=0,model = { + model = "models/metrostroi_train/81-720/rc_rotator1.mdl",z=10,ang=-91, + sndvol = 0.8, snd = function(val) return val and "switch_batt_on" or "switch_batt_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + --getfunc = function(ent) return ent:GetPackedRatio("VentHeatMode") end, + var="VentHeatMode", + speed=4, min=0.25,max=0.75 + }}, + {ID = "VentHeatMode+",x=50,y=40.5,w=30,h=40,tooltip="+",var="VentHeatMode"}, + {ID = "VentHeatMode-",x=80,y=40.5,w=30,h=40,tooltip="-",var="VentHeatMode"}, + {ID = "!VentStrengthMode",x=173, y=108, radius=0, model = { + model = "models/metrostroi_train/81-720/rc_rotator1.mdl",z=10,ang=-91, + sndvol = 0.8, snd = function(val) return val and "switch_batt_on" or "switch_batt_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + getfunc = function(ent) return ent:GetPackedRatio("VentStrengthMode") end,var="VentStrengthMode", + speed=4, min=0.76,max=0.0 + }}, + {ID = "VentStrengthMode-",x=143,y=88,w=30,h=40,tooltip="Сила вентилÑтора: +",states={"Train.Buttons.Low","Train.Buttons.Low","Train.Buttons.Off","Train.Buttons.High"},varTooltip = function(ent) return ent:GetPackedRatio("VentStrengthMode") end,}, + {ID = "VentStrengthMode+",x=173,y=88,w=30,h=40,tooltip="Сила вентилÑтора: -",states={"Train.Buttons.Low","Train.Buttons.Low","Train.Buttons.Off","Train.Buttons.High"},varTooltip = function(ent) return ent:GetPackedRatio("VentStrengthMode") end,}, + } +} + +ENT.ButtonMap["BackPPZ"] = { + pos = Vector(407.5,20,12.6), --446 -- 14 -- -0,5 + ang = Angle(0,83,90), + width = 400, + height = 310, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "SF1Toggle",x=61.5+0*28.8, y=73, w=20,h=40, tooltip = "SF1: Питание общее",}, + {ID = "SF2Toggle",x=61.5+1*28.8, y=73, w=20,h=40, tooltip = "SF2: Управление оÑновное",}, + {ID = "SF3Toggle",x=61.5+2*28.8, y=73, w=20,h=40, tooltip = "SF3: Управление резервное",}, + {ID = "SF4Toggle",x=61.5+3*28.8, y=73, w=20,h=40, tooltip = "SF4: БÐРС",}, + {ID = "SF5Toggle",x=61.5+4*28.8, y=73, w=20,h=40, tooltip = "SF5: БУП",}, + {ID = "SF6Toggle",x=61.5+5*28.8, y=73, w=20,h=40, tooltip = "SF6: БЦКУ",}, + {ID = "SF7Toggle",x=61.5+6*28.8, y=73, w=20,h=40, tooltip = "SF7: ППО",}, + {ID = "SF8Toggle",x=61.5+7*28.8, y=73, w=20,h=40, tooltip = "SF8: Оповещение",}, + {ID = "SF9Toggle",x=61.5+8*28.8, y=73, w=20,h=40, tooltip = "SF9: РадиоÑвÑзь",}, + {ID = "SF10Toggle",x=61.5+9*28.8, y=73, w=20,h=40, tooltip = "SF10: ÐžÑ€Ð¸ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð²Ð°Ð³Ð¾Ð½Ð°",}, + {ID = "SF11Toggle",x=61.5+10*28.8, y=73, w=20,h=40, tooltip = "SF11: Ðаправление движениÑ"}, + + {ID = "SF12Toggle",x=61.5+0*28.8, y=224.5, w=20,h=40, tooltip = "SF12: Фары 1-й группы",}, + {ID = "SF13Toggle",x=61.5+1*28.8, y=224.5, w=20,h=40, tooltip = "SF13: Фары 2-й группы",}, + {ID = "SF14Toggle",x=61.5+2*28.8, y=224.5, w=20,h=40, tooltip = "SF14: Огни габаритные",}, + {ID = "SF15Toggle",x=61.5+3*28.8, y=224.5, w=20,h=40, tooltip = "SF15: ОÑвещение кабины",}, + {ID = "SF16Toggle",x=61.5+4*28.8, y=224.5, w=20,h=40, tooltip = "SF16: Отопление",}, + {ID = "SF17Toggle",x=61.5+5*28.8, y=224.5, w=20,h=40, tooltip = "SF17: Кондиционер кабины",}, + {ID = "SF18Toggle",x=61.5+6*28.8, y=224.5, w=20,h=40, tooltip = "SF18: ГребнеÑмазыватель",}, + {ID = "SF19Toggle",x=61.5+7*28.8, y=224.5, w=20,h=40, tooltip = "SF19: Питание КРМ оÑновное",}, + {ID = "SF20Toggle",x=61.5+8*28.8, y=224.5, w=20,h=40, tooltip = "SF20: Питание КРМ резервное",}, + {ID = "SF21Toggle",x=61.5+9*28.8, y=224.5, w=20,h=40, tooltip = "SF21: Двери открытие",}, + {ID = "SF22Toggle",x=61.5+10*28.8, y=224.5, w=20,h=40, tooltip = "SF22: Двери закрытие"}, + } +} + +for k,buttbl in ipairs(ENT.ButtonMap["BackPPZ"].buttons) do + buttbl.model = { + model = "models/metrostroi_train/81-720/button_av1.mdl",z=-16, ang=-90, + var=buttbl.ID:Replace("Toggle",""),speed=9, vmin=0,vmax=1, + sndvol = 0.8, snd = function(val) return val and "av_on" or "av_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + } +end +ENT.ButtonMap["PVZ"] = { + pos = Vector(383.4,52,5), --446 -- 14 -- -0,5 + ang = Angle(0,0,92), + width = 330, + height = 350, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "SFV1Toggle",x=0*30, y=0, w=30,h=50, tooltip = "SF1: Питание цепей ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð°Ð³Ð¾Ð½Ð°",}, + {ID = "SFV2Toggle",x=1*30, y=0, w=30,h=50, tooltip = "SF2: Питание БУВ",}, + {ID = "SFV3Toggle",x=2*30, y=0, w=30,h=50, tooltip = "SF3: Питание БУТП",}, + {ID = "SFV4Toggle",x=3*30, y=0, w=30,h=50, tooltip = "SF4: БУТП Управление",}, + {ID = "SFV5Toggle",x=4*30, y=0, w=30,h=50, tooltip = "SF5: БУТП Управление резервное",}, + {ID = "SFV6Toggle",x=5*30, y=0, w=30,h=50, tooltip = "SF6: БУТП Питание",}, + {ID = "SFV7Toggle",x=6*30, y=0, w=30,h=50, tooltip = "SF7: ББЭ",}, + {ID = "SFV8Toggle",x=7*30, y=0, w=30,h=50, tooltip = "SF8: БВ управление",}, + {ID = "SFV9Toggle",x=8*30, y=0, w=30,h=50, tooltip = "SF9: БВ питание",}, + {ID = "SFV10Toggle",x=9*30, y=0, w=30,h=50, tooltip = "SF10: ППО",}, + {ID = "SFV11Toggle",x=10*30, y=0, w=30,h=50, tooltip = "SF11: Мотор-компреÑÑор"}, + + {ID = "SFV12Toggle",x=0*30, y=150, w=30,h=50, tooltip = "SF12: Двери закрытие",}, + {ID = "SFV13Toggle",x=1*30, y=150, w=30,h=50, tooltip = "SF13: Двери открытие левых",}, + {ID = "SFV14Toggle",x=2*30, y=150, w=30,h=50, tooltip = "SF14: Двери открытие правых",}, + {ID = "SFV15Toggle",x=3*30, y=150, w=30,h=50, tooltip = "SF15: Двери торцевые",}, + {ID = "SFV16Toggle",x=4*30, y=150, w=30,h=50, tooltip = "SF16: Оповещение",}, + {ID = "SFV17Toggle",x=5*30, y=150, w=30,h=50, tooltip = "SF17: ЭкÑÑ‚Ñ€ÐµÐ½Ð½Ð°Ñ ÑвÑзь",}, + {ID = "SFV18Toggle",x=6*30, y=150, w=30,h=50, tooltip = "SF18: Резерв",}, + {ID = "SFV19Toggle",x=7*30, y=150, w=30,h=50, tooltip = "SF19: ОÑвещение Ñалона питание",}, + {ID = "SFV20Toggle",x=8*30, y=150, w=30,h=50, tooltip = "SF20: ОÑвещение Ñалона аварийное",}, + {ID = "SFV21Toggle",x=9*30, y=150, w=30,h=50, tooltip = "SF21: Датчик ÑкороÑти",}, + {ID = "SFV22Toggle",x=10*30, y=150, w=30,h=50, tooltip = "SF22: Тормоз ÑтоÑночный"}, + + {ID = "SFV23Toggle",x=0*30, y=300, w=30,h=50, tooltip = "SF23: ВентилÑÑ†Ð¸Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ 1-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°",}, + {ID = "SFV24Toggle",x=1*30, y=300, w=30,h=50, tooltip = "SF24: ВентилÑÑ†Ð¸Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ 2-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°",}, + {ID = "SFV25Toggle",x=2*30, y=300, w=30,h=50, tooltip = "SF25: ВентилÑÑ†Ð¸Ñ Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ðµ 1-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°",}, + {ID = "SFV26Toggle",x=3*30, y=300, w=30,h=50, tooltip = "SF26: ВентилÑÑ†Ð¸Ñ Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ðµ 2-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°",}, + {ID = "SFV27Toggle",x=4*30, y=300, w=30,h=50, tooltip = "SF27: Питание Ð²Ð¾Ð·Ð±ÑƒÐ´Ð¸Ñ‚ÐµÐ»Ñ FIXME",}, + {ID = "SFV28Toggle",x=5*30, y=300, w=30,h=50, tooltip = "SF28: Питание ЗКК FIXME",}, + {ID = "SFV29Toggle",x=6*30, y=300, w=30,h=50, tooltip = "SF29: Токоприёмники",}, + {ID = "SFV30Toggle",x=7*30, y=300, w=30,h=50, tooltip = "SF30: Табло",}, + {ID = "SFV31Toggle",x=8*30, y=300, w=30,h=50, tooltip = "SF31: Резерв",}, + {ID = "SFV32Toggle",x=9*30, y=300, w=30,h=50, tooltip = "SF32: Резерв",}, + {ID = "SFV33Toggle",x=10*30, y=300, w=30,h=50, tooltip = "SF33: Резерв"}, + } +} + +for k,buttbl in ipairs(ENT.ButtonMap["PVZ"].buttons) do + buttbl.model = { + model = "models/metrostroi_train/81-720/button_av1.mdl",z=-16, ang=-90, + var=buttbl.ID:Replace("Toggle",""),speed=9, vmin=0,vmax=1, + sndvol = 0.8, snd = function(val) return val and "av_on" or "av_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + } +end + +ENT.ButtonMap["BackDown"] = { + pos = Vector(407.65,20,-13), --446 -- 14 -- -0,5 + ang = Angle(0,83.5,90), + width = 400, + height = 330, + scale = 0.0625, + hide=0.8, + + buttons = { + {ID = "Pant1Toggle",x=85, y=62, radius=12, tooltip = "Отжатие токоприёмников 1-й группы",model = { + model = "models/metrostroi_train/81-720/tumbler1.mdl",z=0, ang=180, + var="Pant1",speed=12, + sndvol = 0.5, snd = function(val) return val and "switch_pvz_on" or "switch_pvz_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "Pant2Toggle",x=105, y=62, radius=12, tooltip = "Отжатие токоприёмников 2-й группы",model = { + model = "models/metrostroi_train/81-720/tumbler1.mdl",z=0, ang=180, + var="Pant2",speed=12, + sndvol = 0.5, snd = function(val) return val and "switch_pvz_on" or "switch_pvz_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "Vent1Toggle",x=148, y=62, radius=12, tooltip = "ВентилÑÑ†Ð¸Ñ 1-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°",model = { + model = "models/metrostroi_train/81-720/tumbler1.mdl",z=0, ang=180, + var="Vent1",speed=12, + sndvol = 0.5, snd = function(val) return val and "switch_pvz_on" or "switch_pvz_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "Vent2Toggle",x=168, y=62, radius=12, tooltip = "ВентилÑÑ†Ð¸Ñ 2-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°",model = { + model = "models/metrostroi_train/81-720/tumbler1.mdl",z=0, ang=180, + var="Vent2",speed=12, + sndvol = 0.5, snd = function(val) return val and "switch_pvz_on" or "switch_pvz_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "VentToggle",x=204, y=62, radius=12, model = { + model = "models/metrostroi_train/81-720/tumbler1.mdl",z=0, ang=180, + var="Vent",speed=12, + sndvol = 0.5, snd = function(val) return val and "switch_pvz_on" or "switch_pvz_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "PassLightToggle",x=240, y=62, radius=12, tooltip = "ОÑвещение Ñалона",model = { + model = "models/metrostroi_train/81-720/tumbler1.mdl",z=0, ang=180, + var="PassLight",speed=12, + sndvol = 0.5, snd = function(val) return val and "switch_pvz_on" or "switch_pvz_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "CabLightToggle",x=260, y=62, radius=12, tooltip = "ОÑвещение кабины",model = { + model = "models/metrostroi_train/81-720/tumbler1.mdl",z=0, ang=180, + var="CabLight",speed=12, + sndvol = 0.5, snd = function(val) return val and "switch_pvz_on" or "switch_pvz_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "Headlights1Toggle",x=315, y=62, radius=12, tooltip = "Фары 1-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°",model = { + model = "models/metrostroi_train/81-720/tumbler1.mdl",z=0, ang=180, + var="Headlights1",speed=12, + sndvol = 0.5, snd = function(val) return val and "switch_pvz_on" or "switch_pvz_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "Headlights2Toggle",x=335, y=62, radius=12, tooltip = "Фары 2-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°",model = { + model = "models/metrostroi_train/81-720/tumbler1.mdl",z=0, ang=180, + var="Headlights2",speed=12, + sndvol = 0.5, snd = function(val) return val and "switch_pvz_on" or "switch_pvz_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + + {ID = "ParkingBrakeToggle",x=81, y=118, radius=12, tooltip = "СтоÑночный тормоз",model = { + model = "models/metrostroi_train/81-720/tumbler1.mdl",z=0, ang=180, + var="ParkingBrake",speed=12, + sndvol = 0.5, snd = function(val) return val and "switch_pvz_on" or "switch_pvz_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "TorecDoorsToggle",x=111, y=118, radius=12, tooltip = "Двери торцевые",model = { + model = "models/metrostroi_train/81-720/tumbler1.mdl",z=0, ang=180, + var="TorecDoors",speed=12, + sndvol = 0.5, snd = function(val) return val and "switch_pvz_on" or "switch_pvz_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "BBERToggle",x=142, y=118, radius=12, tooltip = "ББЭ Резервнео включение",model = { + model = "models/metrostroi_train/81-720/tumbler1.mdl",z=0, ang=180, + var="BBER",speed=12, + sndvol = 0.5, snd = function(val) return val and "switch_pvz_on" or "switch_pvz_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "BBEToggle",x=173, y=118, radius=12, tooltip = "ББЭ",model = { + model = "models/metrostroi_train/81-720/tumbler1.mdl",z=0, ang=180, + var="BBE",speed=12, + sndvol = 0.5, snd = function(val) return val and "switch_pvz_on" or "switch_pvz_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "CompressorToggle",x=204, y=118, radius=12, tooltip = "КомпреÑÑор",model = { + model = "models/metrostroi_train/81-720/tumbler1.mdl",z=0, ang=180, + var="Compressor",speed=12, + sndvol = 0.5, snd = function(val) return val and "switch_pvz_on" or "switch_pvz_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "CabLightStrengthToggle",x=235, y=118, radius=12, tooltip = "Сила оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹",model = { + model = "models/metrostroi_train/81-720/tumbler1.mdl",z=0, ang=180, + var="CabLightStrength",speed=12, + sndvol = 0.5, snd = function(val) return val and "switch_pvz_on" or "switch_pvz_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + states = {"Train.Buttons.Low","Train.Buttons.High"} + }}, + {ID = "AppLights1Toggle",x=308, y=118, radius=12, tooltip = "ОÑвещение аппаратного отÑека",model = { + model = "models/metrostroi_train/81-720/tumbler1.mdl",z=0, ang=180, + var="AppLights1",speed=12, + sndvol = 0.5, snd = function(val) return val and "switch_pvz_on" or "switch_pvz_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "AppLights2Toggle",x=341, y=118, radius=12, model = { --FIXME WHAT IS THIS? + model = "models/metrostroi_train/81-720/tumbler1.mdl",z=0, ang=180, + var="AppLights2",speed=12, + sndvol = 0.5, snd = function(val) return val and "switch_pvz_on" or "switch_pvz_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + + + {ID = "!BARSBlock",x=214, y=211, radius=0, model = { + model = "models/metrostroi_train/81-720/rc_rotator1.mdl",z=12, + getfunc = function(ent) return ent:GetPackedRatio("BARSBlock") end,var="BARSBlock", + plomb = {model = "models/metrostroi_train/81/plomb_b.mdl",ang=-90,x=0,y=40,z=-5,var="BARSBlockPl", ID="BARSBlockPl",}, + speed=6, min=0.5,max=0.15, + sndvol = 1, snd = function(_,val) return val==3 and "switch_batt_on" or val == 0 and "switch_batt_off" or "switch_batt" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "BARSBlock-",x=184,y=201,w=30,h=40,tooltip="Блокировка неиÑправных БÐРСов: -",model={ + plomb = {var="BARSBlockPl", ID="BARSBlockPl", }, + varTooltip = function(ent) return ent:GetPackedRatio("BARSBlock") end,states = {"Train.Buttons.Off","Train.Buttons.BARS1","Train.Buttons.BARS2","Train.Buttons.BARS12"} + }}, + {ID = "BARSBlock+",x=204,y=201,w=30,h=40,tooltip="Блокировка неиÑправных БÐРСов: +", model={ + plomb = {var="BARSBlockPl", ID="BARSBlockPl", }, + varTooltip = function(ent) return ent:GetPackedRatio("BARSBlock") end,states = {"Train.Buttons.Off","Train.Buttons.BARS1","Train.Buttons.BARS2","Train.Buttons.BARS12"} + }}, + {ID = "BatteryToggle",x=334, y=211, radius=20, tooltip = "Выключатель батареи",model = { + model = "models/metrostroi_train/81-720/rc_rotator1.mdl",z=12, ang=90, + var="Battery",speed=2, + sndvol = 1, snd = function(val) return val and "switch_batt_on" or "switch_batt_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + vmin=0.15, vmax=0 + }}, + + {ID = "ALSFreqToggle",x=334, y=295, radius=12, tooltip = "Дешифратор ÐЛС",model = { + model = "models/metrostroi_train/81-720/tumbler1.mdl",z=3, ang=90, + var="ALSFreq",speed=12, + sndvol = 0.5, snd = function(val) return val and "switch_pvz_on" or "switch_pvz_off" end,sndmin = 40, sndmax = 1e3/3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Freq1/5","Train.Buttons.Freq2/6"} + }}, + } +} +ENT.ButtonMap["VityazButtons"] = { + pos = Vector(468.1,-10.25,-32.3), + ang = Angle(0,-89,36), + width = 110, + height = 80, + scale = 0.0625, + hideseat=0.2, + buttons = { + {ID = "VityazF1Set",x=1, y=0, w=20,h=20, tooltip = "ВитÑзь: F1",model = { + model = "models/metrostroi_train/81-720/vyitaz/v_f1.mdl",z=0, ang=0,var="VityazF1",speed=16, + sndvol = 1, snd = function(val) return val and "button_vityaz3_press" or "button_vityaz3_release" end,sndmin = 40, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "VityazF2Set",x=1, y=20, w=20,h=20, tooltip = "ВитÑзь: Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ñтраница",model = { + model = "models/metrostroi_train/81-720/vyitaz/v_f2.mdl",z=0, ang=0,var="VityazF2",speed=16, + sndvol = 1, snd = function(val) return val and "button_vityaz2_press" or "button_vityaz2_release" end,sndmin = 40, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "VityazF3Set",x=1, y=40, w=20,h=20, tooltip = "ВитÑзь: ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ñтраница",model = { + model = "models/metrostroi_train/81-720/vyitaz/v_f3.mdl",z=0, ang=0,var="VityazF3",speed=16, + sndvol = 1, snd = function(val) return val and "button_vityaz1_press" or "button_vityaz1_release" end,sndmin = 40, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "VityazF4Set",x=1, y=60, w=20,h=20, tooltip = "ВитÑзь: Штатный режим",model = { + model = "models/metrostroi_train/81-720/vyitaz/v_f4.mdl",z=0, ang=0,var="VityazF4",speed=16, + sndvol = 1, snd = function(val) return val and "button_vityaz4_press" or "button_vityaz4_release" end,sndmin = 40, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + + {ID = "Vityaz1Set",x=30, y=0, w=20,h=20, tooltip = "ВитÑзь: 1",model = { + model = "models/metrostroi_train/81-720/vyitaz/v_1.mdl",z=0, ang=0, var="Vityaz1",speed=16, + sndvol = 1, snd = function(val) return val and "button_vityaz1_press" or "button_vityaz1_release" end,sndmin = 40, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "Vityaz4Set",x=30, y=20, w=20,h=20, tooltip = "ВитÑзь: 4",model = { + model = "models/metrostroi_train/81-720/vyitaz/v_4.mdl",z=0, ang=0, var="Vityaz4",speed=16, + sndvol = 1, snd = function(val) return val and "button_vityaz2_press" or "button_vityaz2_release" end,sndmin = 40, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "Vityaz7Set",x=30, y=40, w=20,h=20, tooltip = "ВитÑзь: 7",model = { + model = "models/metrostroi_train/81-720/vyitaz/v_7.mdl",z=0, ang=0, var="Vityaz7",speed=16, + sndvol = 1, snd = function(val) return val and "button_vityaz1_press" or "button_vityaz1_release" end,sndmin = 40, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "Vityaz2Set",x=47, y=0, w=20,h=20, tooltip = "ВитÑзь: 2",model = { + model = "models/metrostroi_train/81-720/vyitaz/v_2.mdl",z=0, ang=0, var="Vityaz2",speed=16, + sndvol = 1, snd = function(val) return val and "button_vityaz3_press" or "button_vityaz3_release" end,sndmin = 40, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "Vityaz5Set",x=47, y=20, w=20,h=20, tooltip = "ВитÑзь: 5",model = { + model = "models/metrostroi_train/81-720/vyitaz/v_5.mdl",z=0, ang=0, var="Vityaz5",speed=16, + sndvol = 1, snd = function(val) return val and "button_vityaz1_press" or "button_vityaz1_release" end,sndmin = 40, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "Vityaz8Set",x=47, y=40, w=20,h=20, tooltip = "ВитÑзь: 8",model = { + model = "models/metrostroi_train/81-720/vyitaz/v_8.mdl",z=0, ang=0, var="Vityaz8",speed=16, + sndvol = 1, snd = function(val) return val and "button_vityaz4_press" or "button_vityaz4_release" end,sndmin = 40, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "Vityaz0Set",x=47, y=60, w=20,h=20, tooltip = "ВитÑзь: 0",model = { + model = "models/metrostroi_train/81-720/vyitaz/v_0.mdl",z=0, ang=0, var="Vityaz0",speed=16, + sndvol = 1, snd = function(val) return val and "button_vityaz2_press" or "button_vityaz2_release" end,sndmin = 40, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "Vityaz3Set",x=64, y=0, w=20,h=20, tooltip = "ВитÑзь: 3",model = { + model = "models/metrostroi_train/81-720/vyitaz/v_3.mdl",z=0, ang=0, var="Vityaz3",speed=16, + sndvol = 1, snd = function(val) return val and "button_vityaz3_press" or "button_vityaz3_release" end,sndmin = 40, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "Vityaz6Set",x=64, y=20, w=20,h=20, tooltip = "ВитÑзь: 6",model = { + model = "models/metrostroi_train/81-720/vyitaz/v_6.mdl",z=0, ang=0, var="Vityaz6",speed=16, + sndvol = 1, snd = function(val) return val and "button_vityaz4_press" or "button_vityaz4_release" end,sndmin = 40, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "Vityaz9Set",x=64, y=40, w=20,h=20, tooltip = "ВитÑзь: 9",model = { + model = "models/metrostroi_train/81-720/vyitaz/v_9.mdl",z=0, ang=0, var="Vityaz9",speed=16, + sndvol = 1, snd = function(val) return val and "button_vityaz1_press" or "button_vityaz1_release" end,sndmin = 40, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "VityazF5Set",x=64, y=60, w=20,h=20, tooltip = "ВитÑзь: ЗВ",model = { + model = "models/metrostroi_train/81-720/vyitaz/v_f5.mdl",z=0, ang=0, var="VityazF5",speed=16, + sndvol = 1, snd = function(val) return val and "button_vityaz3_press" or "button_vityaz3_release" end,sndmin = 40, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "VityazF6Set",x=91, y=0, w=20,h=20, tooltip = "ВитÑзь: Вверх\\СкороÑть",model = { + model = "models/metrostroi_train/81-720/vyitaz/v_f6.mdl",z=0, ang=0, var="VityazF6",speed=16, + sndvol = 1, snd = function(val) return val and "button_vityaz2_press" or "button_vityaz2_release" end,sndmin = 40, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "VityazF7Set",x=91, y=20, w=20,h=20, tooltip = "ВитÑзь: Вниз\\Токи",model = { + model = "models/metrostroi_train/81-720/vyitaz/v_f7.mdl",z=0, ang=0, var="VityazF7",speed=16, + sndvol = 1, snd = function(val) return val and "button_vityaz4_press" or "button_vityaz4_release" end,sndmin = 40, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "VityazF8Set",x=91, y=40, w=20,h=20, tooltip = "ВитÑзь: Ввод\\Вагонное оборудование",model = { + model = "models/metrostroi_train/81-720/vyitaz/v_f8.mdl",z=0, ang=0, var="VityazF8",speed=16, + sndvol = 1, snd = function(val) return val and "button_vityaz1_press" or "button_vityaz1_release" end,sndmin = 40, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "VityazF9Set",x=91, y=60, w=20,h=20, tooltip = "ВитÑзь: Выбор\\Управление вагонным оборудованием",model = { + model = "models/metrostroi_train/81-720/vyitaz/v_f9.mdl",z=0, ang=0, var="VityazF9",speed=16, + sndvol = 1, snd = function(val) return val and "button_vityaz2_press" or "button_vityaz2_release" end,sndmin = 40, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + } +} +ENT.ButtonMap["BTO"] = { + pos = Vector(445,-21,-61), --446 -- 14 -- -0,5 + ang = Angle(0,0,0), + width = 224, + height = 50, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "K29Toggle", x=24, y=26, radius=25, tooltip="КРМШ", model = { + model = "models/metrostroi_train/81-720/720_cran.mdl", ang=-90, + var="K29",speed=4, max=0.28, + states={"Train.Buttons.Closed","Train.Buttons.Opened"} + }}, + {ID = "UAVAToggle", x=24+200, y=26, radius=25, tooltip="УÐÐ’Ð", model = { + model = "models/metrostroi_train/81-720/720_cran.mdl", ang=-90, + plomb = {var="UAVAPl", ID="UAVAPl", }, + var="UAVA",speed=4, max=0.28 + }}, + } +} + +ENT.ButtonMap["FrontPneumatic"] = { + pos = Vector(470-9+38,-45.0+13,-58.0+5-6), + ang = Angle(0,90,90), + width = 600, + height = 100, + scale = 0.1, + + buttons = { + {ID = "FrontBrakeLineIsolationToggle",x=000, y=0, w=300, h=100, tooltip="",var="FbI",states={"Train.Buttons.Opened","Train.Buttons.Closed"}}, + {ID = "FrontTrainLineIsolationToggle",x=300, y=0, w=300, 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(449+48, -23, -69), + ang = Angle(-15,-90,0), + hide = 2,30 +} +ENT.ClientProps["FrontTrain"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_blue.mdl", + pos = Vector(449+48, 23, -69), + 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-0.5+4,42,-58.0+5-6), + ang = Angle(0,270,90), + width = 800, + height = 100, + scale = 0.1, + + buttons = { + {ID = "RearTrainLineIsolationToggle",x=400, y=0, w=400, h=100, tooltip="",var="RtI",states={"Train.Buttons.Opened","Train.Buttons.Closed"}}, + {ID = "RearBrakeLineIsolationToggle",x=000, y=0, w=400, h=100, tooltip="",var="RbI",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["PassengerDoor"] = { + pos = Vector(380,-55,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 "cab_door_open" or "cab_door_close" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + noTooltip = true, + }}, + } +} +ENT.ButtonMap["PassengerDoor2"] = { + pos = Vector(380,-18.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"}, + } +} + +if not ENT.ClientSounds["OtsekDoor"] then ENT.ClientSounds["OtsekDoor"] = {} end --FIXME перенеÑти нахуй в шеерд +table.insert(ENT.ClientSounds["OtsekDoor"],{"door_cab_o",function(ent,var) return var>0 and "door_cab_open" or "door_cab_close" end,1,1,90,1e3,Angle(-90,0,0)}) +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 == 1 and "door_cab_open" or val == 2 and "door_cab_roll" or val == 0 and "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 == 1 and "door_cab_open" or val == 2 and "door_cab_roll" or val == 0 and "door_cab_close" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + noTooltip = true, + }}, + } +} +ENT.ButtonMap["RearDoor"] = { + pos = Vector(-465,16,42), + ang = Angle(0,-90,90), + width = 642, + height = 2000, + scale = 0.1/2, + buttons = { + {ID = "RearDoor",x=0,y=0,w=642,h=2000, tooltip="ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ\nFront door", model = { + var="RearDoor",sndid="door_cab_t", + 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["RearDoor1"] = { + pos = Vector(-465,16-32,42), + ang = Angle(0,90,90), + width = 642, + height = 2000, + scale = 0.1/2, + buttons = { + {ID = "RearDoor",x=0,y=0,w=642,h=2000, tooltip="ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ\nFront door"}, + } +} + + +for i=0,3 do + ENT.ClientProps["TrainNumberL"..i] = { + model = "models/metrostroi_train/common/bort_numbers.mdl", + pos = Vector(57+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,3 do + ENT.ClientProps["TrainNumberR"..i] = { + model = "models/metrostroi_train/common/bort_numbers.mdl", + pos = Vector(61+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["salon"] = { + model = "models/metrostroi_train/81-720/720_salon.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["salon_glass"] = { + model = "models/metrostroi_train/81-720/glass_red.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["RedLights"] = { + model = "models/metrostroi_train/81-720/720_redlights.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["HeadLights"] = { + model = "models/metrostroi_train/81-720/720_headights.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["HeadLights_full"] = { + model = "models/metrostroi_train/81-720/720_headights2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide=true, +} +ENT.ClientProps["route"] = { + model = "models/metrostroi_train/81-720/720_label.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, + callback = function(ent) + ent.LastStation.Reloaded = false + end, +} +ENT.ButtonMap["LastStation"] = { + pos = Vector(474,-15.6,46.7), + ang = Angle(0,90,90), + width = 800, + height = 205, + scale = 0.0625, + buttons = { + {ID = "LastStation-",x=000,y=0,w=400,h=205, tooltip=""}, + {ID = "LastStation+",x=400,y=0,w=400,h=205, tooltip=""}, + } +} +ENT.ButtonMap["Route"] = { + pos = Vector(474,37,46.7), + ang = Angle(0,90,90), + width = 200, + height = 205, + scale = 0.0625, + buttons = { + {ID = "RouteNumber1+",x=0 ,y=0,w=100,h=100,tooltip=""}, + {ID = "RouteNumber2+",x=100,y=0,w=100,h=100,tooltip=""}, + {ID = "RouteNumber1-",x=0 ,y=100,w=100,h=100,tooltip=""}, + {ID = "RouteNumber2-",x=100,y=100,w=100,h=100,tooltip=""}, + } +} +ENT.ClientProps["route1"] = { + model = "models/metrostroi_train/81-720/route/route1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, + callback = function(ent) + ent.RouteNumber.Reloaded = false + end, +} +ENT.ClientProps["route2"] = { + model = "models/metrostroi_train/81-720/route/route2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, + callback = function(ent) + ent.RouteNumber.Reloaded = false + end, +} + +ENT.ClientProps["lamp_f"] = { + model = "models/metrostroi_train/81-720/lamp_revers_up.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, +} +ENT.ClientProps["lamp_b"] = { + model = "models/metrostroi_train/81-720/lamp_revers_down.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, +} +ENT.ClientProps["underwagon"] = { + model = "models/metrostroi_train/81-720/721_underwagon.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=0.8, +} + +ENT.ClientProps["fireextinguisher"] = { + model = "models/metrostroi_train/81-502/fireextinguisher.mdl", + pos = Vector(-3,88,-7), + ang = Angle(0,0,0), + hideseat = 0.8, +} + + +---Segments +ENT.ClientProps["acceleration_minus1"] = { + model = "models/metrostroi_train/81-720/segments/acceleration_minus.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + skin = 0, + color = Color(255,50,50), + hideseat = 0.8, +} +ENT.ClientProps["acceleration_minus2"] = { + model = "models/metrostroi_train/81-720/segments/acceleration_minus.mdl", + pos = Vector(0,1.28,0), + ang = Angle(0,0,0), + skin = 0, + color = Color(255,50,50), + hideseat = 0.8, +} +ENT.ClientProps["acceleration_plus1"] = { + model = "models/metrostroi_train/81-720/segments/acceleration_plus.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + skin = 0, + color = Color(255,50,50), + hideseat = 0.8, +} +ENT.ClientProps["acceleration_plus2"] = { + model = "models/metrostroi_train/81-720/segments/acceleration_plus.mdl", + pos = Vector(0,-1.28,0), + ang = Angle(0,0,0), + skin = 0, + color = Color(255,50,50), + hideseat = 0.8, +} +ENT.ClientProps["speedl"] = { + model = "models/metrostroi_train/81-720/720_speed_light.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(150,200,150), + hideseat = 0.8, +} +ENT.ClientProps["speed1"] = { + model = "models/metrostroi_train/81-720/digits/digit.mdl", + pos = Vector(477.45,15.28+0.05,-22.17), + ang = Angle(130,0,0), + color = Color(20,255,50), + hideseat = 0.2, +} +ENT.ClientProps["speed2"] = { + model = "models/metrostroi_train/81-720/digits/digit.mdl", + pos = Vector(477.45,14.86-0.05,-22.17), + ang = Angle(130,0,0), + color = Color(20,255,50), + hideseat = 0.2, +} +for i=1,5 do + ENT.ClientProps["speeddop"..i] = { + model = "models/metrostroi_train/81-720/segments/speed_red.mdl", + pos = Vector(0,1.305*(i-1),0), + ang = Angle(0,0,0), + skin = 0, + color = Color(255,55,55), + hideseat = 0.8, + } +end +for i=1,5 do + ENT.ClientProps["speedfact"..i] = { + model = "models/metrostroi_train/81-720/segments/speed_green.mdl", + pos = Vector(0,-1.305*(i-1),0), + ang = Angle(0,0,0), + skin = 0, + color = Color(90,255,80), + hideseat = 0.8, + } +end +for i=1,5 do + ENT.ClientProps["speedrek"..i] = { + model = "models/metrostroi_train/81-720/segments/speed_yellow.mdl", + pos = Vector(0,1.305*(i-1),0), + ang = Angle(0,0,0), + skin = 0, + color = Color(255,255,60), + hideseat = 0.8, + } +end + +ENT.ClientProps["brake_cylinder"] = { + model = "models/metrostroi_train/equipment/arrow_nm.mdl", + pos = Vector(473.396637,58.499859,21.514017), + ang = Angle(-43.000000,-31.000000,-269.000000), + hideseat = 0.2, +} +ENT.ClientProps["train_line"] = { + model = "models/metrostroi_train/equipment/arrow_nm.mdl", + pos = Vector(476.289825,57.939251,3.990869), + ang = Angle(-43.000000,-28.833702,-272.772339), + hideseat = 0.2, +} +ENT.ClientProps["brake_line"] = { + model = "models/metrostroi_train/equipment/arrow_tm.mdl", + pos = Vector(476.279297,57.921833,3.991589), + ang = Angle(-43.000000,-28.833702,-272.772339), + hideseat = 0.2, +} + +ENT.ClientProps["volt_lv"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(477.452179,59.365273,-1.443494), + ang = Angle(41.227245,-37.233719,92.130653), + hideseat = 0.2, +}--1,0.712 + +ENT.ClientProps["volt_hv"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(477.370789,59.209976,-7.437835), + ang = Angle(46.156513,-41.354576,94.116631), + hideseat = 0.2, +}--1,0.733 + + + +ENT.ClientProps["amp_i13"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(477.418518,59.158699,-11.648458), + ang = Angle(42.932121,-41.354576,94.116631), + hideseat = 0.2, +}--1,0.722 +ENT.ClientProps["amp_i24"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(477.513031,59.213814,-15.593397), + ang = Angle(45.002529,-41.354576,94.116631), + hideseat = 0.2, +}--1,0.726 + +---ПодÑветка +ENT.ClientProps["ticker"] = { + model = "models/metrostroi_train/81-720/720_tablo.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 1.5, +} +ENT.ClientProps["lamps_emer"] = { + model = "models/metrostroi_train/81-720/720_lamps_emer.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(245,238,223), + hide = 1.5, +} +ENT.ClientProps["lamps_full"] = { + model = "models/metrostroi_train/81-720/720_lamps_full.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(245,238,223), + hide = 1.5, +} +ENT.ClientProps["cab_emer"] = { + model = "models/metrostroi_train/81-720/720_lamps_cab1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat = 1.1, + color = Color(206,162,153), +} +ENT.ClientProps["cab_full"] = { + model = "models/metrostroi_train/81-720/720_lamps_cab2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat = 1.1, + color = Color(206,162,153), +} +ENT.ClientProps["cabine"] = { + model = "models/metrostroi_train/81-720/720_cab.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2, +} +ENT.ClientProps["PassSchemes"] = { + model = "models/metrostroi_train/81-720/720_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["PassSchemesR"] = { + model = "models/metrostroi_train/81-720/720_sarmat_r.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 1.5, + callback = function(ent) + ent.PassSchemesDone = false + end, +} +for i=1,5 do + ENT.ClientProps["led_l_f"..i] = { + model = "models/metrostroi_train/81-720/720_led_l_r.mdl", + pos = Vector((i-1)*10.5+0.2,0,0), + ang = Angle(0,0,0), + skin=6, + hideseat = 1.5, + } + ENT.ClientProps["led_l_b"..i] = { + model = "models/metrostroi_train/81-720/720_led_l.mdl", + pos = Vector(-(i-1)*10.5-0.2,0,0), + ang = Angle(0,0,0), + skin=6, + hideseat = 1.5, + } + + ENT.ClientProps["led_r_f"..i] = { + model = "models/metrostroi_train/81-720/720_led_r.mdl", + pos = Vector((i-1)*10.5+0.2,0,0), + ang = Angle(0,0,0), + skin=6, + hideseat = 1.5, + } + + ENT.ClientProps["led_r_b"..i] = { + model = "models/metrostroi_train/81-720/720_led_r_r.mdl", + pos = Vector(-(i-1)*10.5-0.2,0,0), + ang = Angle(0,0,0), + skin=6, + hideseat = 1.5, + } +end + +ENT.ButtonMap["GV"] = { + pos = Vector(128,63,-52-15), + ang = Angle(0,180,90), + width = 170, + height = 150, + scale = 0.1, + buttons = { + {ID = "GVToggle",x=0, y=0, w= 170,h = 150, tooltip="Разъединитель БРУ (ГВ)", model = { + var="GV",sndid = "gv_wrench", + 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_wrench"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = Vector(126.4,50,-60-23.5), + ang = Angle(-90,0,0), + hide = 0.5, +} + +local yventpos = { + -414.5+0*117, + -414.5+1*117+6.2, + -414.5+2*117+5, + -414.5+3*117+2, + -414.5+4*117+0.5, + -414.5+5*117-2.3, + -414.5+6*117-2.3, +} +for i=1,7 do + ENT.ClientProps["vent"..i] = { + model = "models/metrostroi_train/81-720/vent.mdl", + pos = Vector(yventpos[i],0,57.2), + ang = Angle(0,0,0), + hideseat=0.8, + } +end +-------------------------------------------------------------------------------- +-- 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-720/81-720_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-720/81-720_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-720/81-720_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-720/81-720_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-720/81-720_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-720/81-720_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-720/81-720_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-720/81-720_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-720/81-720_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-720/81-720_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-720/720_door_cab.mdl", + pos = Vector(374.9,-45.5+25.5,-12.3), + ang = Angle(0,-90-1,0), + hide = 2, +} +ENT.ClientProps["door_cab_o"] = { + model = "models/metrostroi_train/81-720/720_cab_otsek.mdl", + pos = Vector(374.9,26,-15), + ang = Angle(0,-90+0.45,-0.15), + hide = 2, +} +ENT.ClientProps["door_cab_l"] = { + model = "models/metrostroi_train/81-720/720_door_cab_l.mdl", + pos = Vector(419.4, 62.3,-10), + ang = Angle(0,-90,0), + hide = 2, +} +ENT.ClientProps["door_cab_r"] = { + model = "models/metrostroi_train/81-720/720_door_cab_r.mdl", + pos = Vector(419.4,-62.3,-10), + ang = Angle(0,-90,0), + hide = 2, +} +ENT.ClientProps["door_cab_t"] = { + model = "models/metrostroi_train/81-720/720_door_tor.mdl", + pos = Vector(-467.5,17,-10), + ang = Angle(0,-91,-0), + hide = 2, +} +ENT.ClientProps["KRO"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = Vector(463.445343,53.273838,-21.1), + ang = Angle(180,90+13,180+28), + 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["KRR"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = Vector(470.430176,53.971645,-17.4), + ang = Angle(180,90+13,180+28), + 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["controller"] = { + model = "models/metrostroi_train/81-720/720_kv.mdl", + pos = Vector(458.484589,25.265604,-29.164625), + ang = Angle(0.000000,-90.000000,23.699429), + hideseat = 0.2, +} + +ENT.ClientProps["km013"] = { + model = "models/metrostroi_train/81-720/720_km013.mdl", + pos = Vector(443,-14.8,-47.9), + ang = Angle(180,90,-110), + 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,35,1e3,Angle(-90,0,0)}) + +ENT.ClientProps["PB"] = { + model = "models/metrostroi_train/81-720/720_pb.mdl", + pos = Vector(467.138672,39.572510,-47.119862), + ang = Angle(0.000000,-90.000000,0.000000), + hideseat = 0.2, +} +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,1,1,30,1e3,Angle(-90,0,0)}) + +ENT.Lights = { + -- Headlight glow + [1] = { "headlight",Vector(495,0,-40),Angle(0,0,0),Color(216,161,92),farz=5144,brightness = 4, hfov=105,vfov=105, texture = "models/metrostroi_train/equipment/headlight",shadows = 1,headlight=true}, + [2] = { "headlight", Vector(495,0,-40), Angle(0,0,0), Color(255,0,0), fov=170 ,brightness = 0.1, farz=450,texture = "models/metrostroi_train/equipment/headlight2",shadows = 0,backlight=true}, + [3] = { "headlight", Vector(380,40,43.9), Angle(50,40,-0), Color(206,135,80), hfov=100, vfov=100,farz=200,brightness = 6,shadows=1}, +} + +ENT.ButtonMap["Vityaz"] = { + pos = Vector(479.5,-10.7,-22.25), + ang = Angle(0,-90,38.2), + width = 800, + height = 795, + scale = 0.00725, + hideseat = 0.2, +} +function ENT:Initialize() + self.BaseClass.Initialize(self) + self.Vityaz = self:CreateRT("721Vityaz",1024,1024) + self.ASNP = self:CreateRT("721ASNP",512,128) + self.IGLA = self:CreateRT("720IGLA",512,128) + self.Tickers = self:CreateRT("721Ticker",1024,64) + render.PushRenderTarget(self.Tickers,0,0,1024, 64) + render.Clear(0, 0, 0, 0) + render.PopRenderTarget() + self.ReleasedPdT = 0 + self.CraneRamp = 0 + self.CraneRRamp = 0 + self.EmergencyValveRamp = 0 + self.FrontLeak = 0 + self.RearLeak = 0 + + self.ParkingBrake = 0 + + self.PreviousRingState = false + self.PreviousCompressorState = false + self.TISUVol = 0 + + + self.EmergencyValveRamp = 0 + + self.VentRand = {} + self.VentState = {} + self.VentVol = {} + for i=1,7 do + self.VentRand[i] = math.Rand(0.5,2) + self.VentState[i] = 0 + self.VentVol[i] = 0 + end +end +function ENT:UpdateWagonNumber() + for i=0,3 do + --self:ShowHide("TrainNumberL"..i,i0,headlights) + self:SetLightPower(2,RL>0,RL) + if IsValid(self.GlowingLights[1]) then + if self:GetPackedRatio("Headlights") < 1 and self.GlowingLights[1]:GetFarZ() ~= 4096 then + self.GlowingLights[1]:SetFarZ(4096) + end + if self:GetPackedRatio("Headlights") == 1 and self.GlowingLights[1]:GetFarZ() ~= 5144 then + self.GlowingLights[1]:SetFarZ(5144) + end + end + + local scurr = self:GetNW2Int("PassSchemesLED") + local snext = self:GetNW2Int("PassSchemesLEDN") + local led_back = self:GetPackedBool("PassSchemesLEDO",false) + if self:GetPackedBool("PassSchemesInvert",false) then led_back = not led_back end + local ledwork = scurr~=0 or snext~=0 + for i=1,5 do + self:ShowHide("led_l_f"..i,not led_back and ledwork) + self:ShowHide("led_l_b"..i,led_back and ledwork) + self:ShowHide("led_r_f"..i,not led_back and ledwork) + self:ShowHide("led_r_b"..i,led_back and ledwork) + end + local led = scurr + if snext ~= 0 and CurTime()%.5 > .25 then led = led + snext end + if scurr < 0 then led = math.floor(CurTime()%5*6.2) end + if led_back then + if ledwork then + for i=1,5 do + if IsValid(self.ClientEnts["led_l_b"..i]) then self.ClientEnts["led_l_b"..i]:SetSkin(math.Clamp(led-((i-1)*6),0,6)) end + if IsValid(self.ClientEnts["led_r_b"..i]) then self.ClientEnts["led_r_b"..i]:SetSkin(math.Clamp(led-((i-1)*6),0,6)) end + end + end + else + if ledwork then + for i=1,5 do + if IsValid(self.ClientEnts["led_l_f"..i]) then self.ClientEnts["led_l_f"..i]:SetSkin(math.Clamp(led-((i-1)*6),0,6)) end + if IsValid(self.ClientEnts["led_r_f"..i]) then self.ClientEnts["led_r_f"..i]:SetSkin(math.Clamp(led-((i-1)*6),0,6)) end + end + end + end + -- + --print(self:GetPackedRatio("async2vol"), self:GetPackedRatio("async2")) + 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.9,1.1)) + else + self:PlayOnce(sid.."c","",1,math.Rand(0.9,1.1)) + 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.9+self.DoorLoopStates[id]*0.1) + 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/15 end + end + --[[ if self.Anims[n_r] then + dro = math.abs(state-self.Anims[n_r].oldival) + if dro <= 0 and self.Anims[n_r].oldspeed then dro = self.Anims[n_r].oldspeed/15 end + end--]] + self:Animate(n_l,state,0.02,1, dlo*15,false)--0.8 + (-0.2+0.4*math.random()),0) + --self:Animate(n_r,state,0,1, dro*15,false)--0.8 + (-0.2+0.4*math.random()),0) + end + end + local door_m = self:GetPackedBool("PassengerDoor") + local door_l = self:GetPackedBool("CabinDoorLeft") + local door_r = self:GetPackedBool("CabinDoorRight") + local door_o = self:GetPackedBool("OtsekDoor") or self.CurrentCamera == 7 + local door_t = self:GetPackedBool("RearDoor") + local door_cab_m = self:Animate("door_cab_m",door_m and 1 or -0.05,0,0.235, 8, 0.05) + local door_cab_l = self:Animate("door_cab_l",door_l and 1 or -0.1,1,0.75, 2, 0.5) + local door_cab_r = self:Animate("door_cab_r",door_r and 1 or -0.1,0,0.25, 2, 0.5) + local door_cab_o = self:Animate("door_cab_o",door_o and 1 or -0.05,0,0.3, 8, 0.05) + local door_cab_t = self:Animate("door_cab_t",door_t and 1 or -0.05,0,0.25, 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 door_cab_l = self.Anims["door_cab_l"].val or 0 + local door2s = door_cab_l > 0.75 and door_cab_l < 1 and 2 or (door_cab_l == 0.75 and 3 or door_l and 1 or 0) + if self.Door2 ~= door2s or self.DoorCL ~= door_l then + self.DoorCL = door_l + self.Door2 = door2s + self:PlayOnce("CabinDoorLeft","bass",door2s) + end + local door3s = door_cab_r > 0 and door_cab_r < 0.25 and 2 or (door_cab_r == 0.25 and 3 or door_r and 1 or 0) + if self.Door3 ~= door3s or self.DoorCR ~= door_r then + self.DoorCR = door_r + self.Door3 = door3s + self:PlayOnce("CabinDoorRight","bass",door3s) + end + local door4s = (door_cab_t > 0 or door_t) + if self.Door4 ~= door4s then + self.Door4 = door4s + self:PlayOnce("RearDoor","bass",door4s and 1 or 0) + end + local door5s = (door_cab_o > 0 or door_o) + if self.Door5 ~= door5s then + self.Door5 = door5s + self:PlayOnce("OtsekDoor","bass",door5s and 1 or 0) + end + self:HidePanel("PVZ",not self.Door5) + + local dT = self.DeltaTime + + local dPdT = self:GetPackedRatio("BrakeCylinderPressure_dPdT") + self.ReleasedPdT = math.Clamp(self.ReleasedPdT + 4*(-self:GetPackedRatio("BrakeCylinderPressure_dPdT",0)-self.ReleasedPdT)*dT,0,1) + --print(dPdT) + self:SetSoundState("release",math.Clamp(self.ReleasedPdT,0,1)^1.65,1.0) + + 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) + + 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 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("RingEnabled") + self:SetSoundState("ring",state and 0.40 or 0,1) + local state = self:GetPackedBool("CompressorWork") + self:SetSoundState("compressor",state and 1 or 0,1) + local state = self:GetPackedBool("WorkBeep") + self:SetSoundState("work_beep",state and 1 or 0,1) + + + local speed = self:GetPackedRatio("Speed", 0) + + local ventSpeedAdd = math.Clamp(speed/30,0,1) + + local v1state = self:GetPackedBool("Vent1Work") + local v2state = self:GetPackedBool("Vent2Work") + for i=1,7 do + local rand = self.VentRand[i] + local vol = self.VentVol[i] + local even = i%2 == 0 + local work = (even and v1state or not even and v2state) + local target = math.min(1,(work and 1 or 0)+ventSpeedAdd*rand*0.4)*2 + if self.VentVol[i] < target then + self.VentVol[i] = math.min(target,vol + dT/1.5*rand) + elseif self.VentVol[i] > target then + self.VentVol[i] = math.max(0,vol - dT/8*rand*(vol*0.3)) + end + self.VentState[i] = (self.VentState[i] + 10*((self.VentVol[i]/2)^3)*dT)%1 + local vol1 = math.max(0,self.VentVol[i]-1) + local vol2 = math.max(0,(self.VentVol[i-1] or self.VentVol[i+1])-1) + self:SetSoundState("vent"..i,vol1*(0.7+vol2*0.3),0.5+0.5*vol1+math.Rand(-0.01,0.01)) + if IsValid(self.ClientEnts["vent"..i]) then + self.ClientEnts["vent"..i]:SetPoseParameter("position",self.VentState[i]) + end + end + --Vector(409,25.6,-26.3) + local speed = self:GetPackedRatio("Speed", 0) + --local rol10 = math.Clamp(speed/5,0,1)*(1-math.Clamp((speed-50)/8,0,1)) + --local rol70 = math.Clamp((speed-50)/8,0,1) + 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 rol10 = math.Clamp(speed/12,0,1)*(1-math.Clamp((speed-20)/12,0,1)) + local rol10p = Lerp((speed-12)/12,0.9,1.1) + local rol30 = math.Clamp((speed-20)/12,0,1)*(1-math.Clamp((speed-40)/12,0,1)) + local rol30p = Lerp((speed-15)/30,0.8,1.2) + local rol55 = math.Clamp((speed-40)/12,0,1)*(1-math.Clamp((speed-65)/15,0,1)) + local rol55p = Lerp(0.8+(speed-43)/24,0.8,1.2) + local rol75 = math.Clamp((speed-65)/15,0,1) + local rol75p = Lerp(0.8+(speed-67)/16,0.8,1.2) + self:SetSoundState("rolling_10",rollingi*rol10,rol10p) + self:SetSoundState("rolling_30",rollingi*rol30,rol30p) + self:SetSoundState("rolling_55",rollingi*rol55,rol55p) + self:SetSoundState("rolling_75",rollingi*rol75,rol75p) + + 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 + --rolling_10 + --rolling_45 + --rolling_60 + --rolling_70 + local state = self:GetPackedRatio("RNState") + self.TISUVol = math.Clamp(self.TISUVol+(state-self.TISUVol)*dT*8,0,1) + self:SetSoundState("tisu", self.TISUVol, 1) + self:SetSoundState("tisu2", self.TISUVol, 1) + --self:SetSoundState("tisu3", 0 or self.TISUVol, 1) + self:SetSoundState("bbe", self:GetPackedBool("BBEWork") and 1 or 0, 1) + + local work = self:GetPackedBool("AnnPlay") + for k,v in ipairs(self.AnnouncerPositions) do + 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: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-10,512-80,1024-20,1024-160,0) + end) + self.RTMaterial:SetTexture("$basetexture", self.ASNP) + self:DrawOnPanel("ASNPScreen",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(256,64,512,128,0) + end) + self.RTMaterial:SetTexture("$basetexture", self.IGLA) + self:DrawOnPanel("IGLA",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(256,64,512,128,0) + end) + self.RTMaterial:SetTexture("$basetexture", self.Tickers) + self:DrawOnPanel("Tickers",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(512,32+8,1024+16,64+16,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 == "K1" then + local id = range > 0 and "k1_on" or "k1_off" + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["k1_on"][1] = 440-Lerp(speed/0.1,0,330) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "K2" then + local id = range > 0 and "k2_on" or "k2_off" + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["k2_on"][1] = 440-Lerp(speed/0.1,0,330) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "K3" then + local id = range > 0 and "k3_on" or "k3_off" + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["k3_on"][1] = 440-Lerp(speed/0.1,0,330) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "KMR1" then + local id = range > 0 and "kmr1_on" or "kmr1_off" + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["kmr1_on"][1] = 440-Lerp(speed/0.1,0,330) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "KMR2" then + local id = range > 0 and "kmr2_on" or "kmr2_off" + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["kmr2_on"][1] = 440-Lerp(speed/0.1,0,330) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "QF1" then + local id = range > 0 and "qf1_on" or "qf1_off" + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["qf1_on"][1] = 440-Lerp(speed/0.1,0,330) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + return soundid,location,range,pitch +end +Metrostroi.GenerateClientProps() \ No newline at end of file diff --git a/lua/entities/gmod_subway_81-720/init.lua b/lua/entities/gmod_subway_81-720/init.lua new file mode 100644 index 0000000..ccfa2e5 --- /dev/null +++ b/lua/entities/gmod_subway_81-720/init.lua @@ -0,0 +1,512 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +ENT.BogeyDistance = 650 -- Needed for gm trainspawner +ENT.SyncTable = { + "EnableBVEmer","Ticker","KAH","KAHk","ALS","ALSk","FDepot","PassScheme","EnableBV","DisableBV","Ring","R_Program2","R_Announcer","R_Line","R_Emer","R_Program1", + "DoorSelectL","DoorSelectR","DoorBlock", + "EmerBrakeAdd","EmerBrakeRelease","EmerBrake","DoorClose","AttentionMessage","Attention","AttentionBrake","EmergencyBrake", + "SF1","SF2","SF3","SF4","SF5","SF6","SF7","SF8","SF9","SF10","SF11","SF12", + "SF13","SF14","SF15","SF16","SF17","SF18","SF19","SF20","SF21","SF22", + + "SFV1","SFV2","SFV3","SFV4","SFV5","SFV6","SFV7","SFV8","SFV9","SFV10","SFV11", + "SFV12","SFV13","SFV14","SFV15","SFV16","SFV17","SFV18","SFV19","SFV20","SFV21","SFV22", + "SFV23","SFV24","SFV25","SFV26","SFV27","SFV28","SFV29","SFV30","SFV31","SFV32","SFV33", + + "Stand","EmergencyCompressor","EmergencyControls","Wiper","DoorLeft","AccelRate","HornB","DoorRight", + + "Pant1","Pant2","Vent1","Vent2","Vent","PassLight","CabLight","Headlights1","Headlights2", + "ParkingBrake","TorecDoors","BBER","BBE","Compressor","CabLightStrength","AppLights1","AppLights2", + "Battery", "ALSFreq", + "VityazF1", "VityazF2", "VityazF3", "VityazF4", "Vityaz1", "Vityaz4", "Vityaz7", "Vityaz2", "Vityaz5", "Vityaz8", "Vityaz0", "Vityaz3", "Vityaz6", "Vityaz9", "VityazF5", "VityazF6", "VityazF7", "VityazF8", "VityazF9", + "K29", "UAVA", + "EmerX1","EmerX2","EmerCloseDoors","EmergencyDoors", + "R_ASNPMenu","R_ASNPUp","R_ASNPDown","R_ASNPOn", + "VentHeatMode", + + "RearBrakeLineIsolation","RearTrainLineIsolation", + "FrontBrakeLineIsolation","FrontTrainLineIsolation", + "PB", "GV", +} +-------------------------------------------------------------------------------- +function ENT:Initialize() + -- Set model and initialize + self:SetModel("models/metrostroi_train/81-720/81-720.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,150)) + self.Plombs = { + KAH = {true,"KAHk"}, + KAHk = true, + ALS = {true,"ALSk"}, + ALSk = true, + BARSBlock = true, + UAVA = true, + Init = true, + } + + -- Create seat entities + self.DriverSeat = self:CreateSeat("driver",Vector(439,13,-40)) + self.InstructorsSeat = self:CreateSeat("instructor",Vector(445,50,-50),Angle(0,40,0),"models/vehicles/prisoner_pod_inner.mdl") + self.InstructorsSeat2 = self:CreateSeat("instructor",Vector(435,35,-50),Angle(0,90,0),"models/vehicles/prisoner_pod_inner.mdl") + self.InstructorsSeat3 = self:CreateSeat("instructor",Vector(435,-45,-50),Angle(0,90+40,0),"models/vehicles/prisoner_pod_inner.mdl") + self.InstructorsSeat4 = self:CreateSeat("instructor",Vector(425,-25,-50),Angle(0,90,0),"models/vehicles/prisoner_pod_inner.mdl") + + -- Hide seats + self.DriverSeat:SetRenderMode(RENDERMODE_TRANSALPHA) + self.DriverSeat:SetColor(Color(0,0,0,0)) + self.InstructorsSeat:SetRenderMode(RENDERMODE_TRANSALPHA) + self.InstructorsSeat:SetColor(Color(0,0,0,0)) + self.InstructorsSeat2:SetRenderMode(RENDERMODE_TRANSALPHA) + self.InstructorsSeat2:SetColor(Color(0,0,0,0)) + self.InstructorsSeat3:SetRenderMode(RENDERMODE_TRANSALPHA) + self.InstructorsSeat3:SetColor(Color(0,0,0,0)) + self.InstructorsSeat4:SetRenderMode(RENDERMODE_TRANSALPHA) + self.InstructorsSeat4:SetColor(Color(0,0,0,0)) + + -- Create bogeys + if Metrostroi.BogeyOldMap then + self.FrontBogey = self:CreateBogey(Vector( 350,0,-90),Angle(0,180,0),true,"720") + self.RearBogey = self:CreateBogey(Vector(-320,0,-90),Angle(0,0,0),false,"720") + self.FrontCouple = self:CreateCouple(Vector( 448,0,-79),Angle(0,0,0),true,"717") + self.RearCouple = self:CreateCouple(Vector(-419.5-6.8,0,-79),Angle(0,180,0),false,"717") + else + self.FrontBogey = self:CreateBogey(Vector( 350,0,-90),Angle(0,180,0),true,"720") + self.RearBogey = self:CreateBogey(Vector(-320,0,-90),Angle(0,0,0),false,"720") + self.FrontCouple = self:CreateCouple(Vector( 454 -8,0,-79),Angle(0,0,0),true,"717") + self.RearCouple = self:CreateCouple(Vector(-419-6.8+8,0,-79),Angle(0,180,0),false,"717") + end + self.FrontBogey:SetNWBool("Async",true) + self.RearBogey:SetNWBool("Async",true) + self.FrontBogey:SetNWInt("MotorSoundType",2) + self.RearBogey:SetNWInt("MotorSoundType",2) + local rand = math.random()*0.05 + self.FrontBogey:SetNWFloat("SqualPitch",1.45+rand) + self.RearBogey:SetNWFloat("SqualPitch",1.45+rand) + self.FrontCouple.EKKDisconnected = true + + -- Initialize key mapping + self.KeyMap = { + [KEY_W] = "PanelKVUp", + [KEY_S] = "PanelKVDown", + [KEY_1] = "PanelKV1", + [KEY_2] = "PanelKV2", + [KEY_3] = "PanelKV3", + [KEY_4] = "PanelKV4", + [KEY_5] = "PanelKV5", + [KEY_6] = "PanelKV6", + [KEY_7] = "PanelKV7", + [KEY_8] = "PanelKV8", + [KEY_9] = "KRO-", + [KEY_0] = "KRO+", + + [KEY_A] = "DoorLeft", + [KEY_D] = "DoorRight", + [KEY_V] = "DoorClose", + [KEY_G] = "EnableBVSet", + [KEY_SPACE] = { + def="PBSet", + [KEY_LSHIFT] = "AttentionBrakeSet", + }, + + [KEY_PAD_ENTER] = "KVWrenchKV", + [KEY_EQUAL] = "R_Program1Set", + [KEY_RBRACKET] = "R_Program1Set", + [KEY_MINUS] = "R_Program2Set", + [KEY_LSHIFT] = { + def="PanelControllerUnlock", + [KEY_SPACE] = "AttentionBrakeSet", + [KEY_V] = "EmergencyDoorsToggle", + [KEY_7] = "WrenchNone", + [KEY_8] = "WrenchKRR", + [KEY_9] = "WrenchKRO9", + [KEY_0] = "WrenchKRO", + [KEY_G] = "EnableBVEmerSet", + [KEY_2] = "RingSet", + [KEY_L] = "HornEngage", + + [KEY_PAD_ENTER] = "KVWrenchNone", + }, + [KEY_LALT] = { + [KEY_V] = "DoorCloseToggle", + [KEY_PAD_1] = "Vityaz1Set", + [KEY_PAD_2] = "Vityaz2Set", + [KEY_PAD_3] = "Vityaz3Set", + [KEY_PAD_4] = "Vityaz4Set", + [KEY_PAD_5] = "Vityaz5Set", + [KEY_PAD_6] = "Vityaz6Set", + [KEY_PAD_7] = "Vityaz7Set", + [KEY_PAD_8] = "Vityaz8Set", + [KEY_PAD_9] = "Vityaz9Set", + [KEY_PAD_0] = "Vityaz0Set", + [KEY_PAD_DECIMAL] = "VityazF5Set", + [KEY_PAD_ENTER] = "VityazF8Set", + [KEY_UP] = "VityazF6Set", + [KEY_LEFT] = "VityazF5Set", + [KEY_DOWN] = "VityazF7Set", + [KEY_RIGHT] = "VityazF9Set", + [KEY_PAD_MINUS] = "VityazF2Set", + [KEY_PAD_PLUS] = "VityazF3Set", + [KEY_PAD_MULTIPLY] = "VityazF4Set", + [KEY_PAD_DIVIDE] = "VityazF1Set", + [KEY_SPACE] = "AttentionMessageSet", + }, + [KEY_PAD_PLUS] = "EmerBrakeAddSet", + [KEY_PAD_MINUS] = "EmerBrakeReleaseSet", + [KEY_F] = "PneumaticBrakeUp", + [KEY_R] = "PneumaticBrakeDown", + [KEY_PAD_1] = "PneumaticBrakeSet1", + [KEY_PAD_2] = "PneumaticBrakeSet2", + [KEY_PAD_3] = "PneumaticBrakeSet3", + [KEY_PAD_4] = "PneumaticBrakeSet4", + [KEY_PAD_5] = "PneumaticBrakeSet5", + [KEY_PAD_6] = "PneumaticBrakeSet6", + + [KEY_PAD_DIVIDE] = "EmerX1Set", + [KEY_PAD_MULTIPLY] = "EmerX2Set", + [KEY_PAD_9] = "EmerBrakeToggle", + + [KEY_BACKSPACE] = "EmergencyBrakeToggle", + [KEY_L] = "HornBSet", + } + self.KeyMap[KEY_RALT] = self.KeyMap[KEY_LALT] + self.KeyMap[KEY_RSHIFT] = self.KeyMap[KEY_LSHIFT] + self.KeyMap[KEY_RCONTROL] = self.KeyMap[KEY_LCONTROL] + -- Cross connections in train wires + self.TrainWireCrossConnections = { + [4] = 3, -- Orientation F<->B + [13] = 12, -- Reverser F<->B + [38] = 37, -- Doors L<->R + } + + self.Lights = { + [1] = { "light",Vector(500,-35,-29), Angle(0,0,0), Color(255,220,180), brightness = 0.2, scale = 2.5, texture = "sprites/light_glow02.vmt" }, + [2] = { "light",Vector(500, 35,-29), Angle(0,0,0), Color(255,220,180), brightness = 0.2, scale = 2.5, texture = "sprites/light_glow02.vmt" }, + + [3] = { "light",Vector(500,-50, -29), Angle(0,0,0), Color(255,50,50), brightness = 0.1, scale = 1.5, texture = "sprites/light_glow02.vmt" }, + [4] = { "light",Vector(500, 50, -29), Angle(0,0,0), Color(255,50,50), brightness = 0.1, scale = 1.5, texture = "sprites/light_glow02.vmt" }, + [5] = { "light",Vector(500,-50, -75), Angle(0,0,0), Color(255,50,50), brightness = 0.1, scale = 1.5, texture = "sprites/light_glow02.vmt" }, + [6] = { "light",Vector(500, 50, -75), Angle(0,0,0), Color(255,50,50), brightness = 0.1, scale = 1.5, texture = "sprites/light_glow02.vmt" }, + + [10] = { "dynamiclight", Vector( 440, 0, 13), Angle(0,0,0), Color(206,135,80), brightness = 0.7, distance = 550 }, + -- Interior + --[11] = { "dynamiclight", Vector( 200, 0, 10), Angle(0,0,0), Color(255,175,50), brightness = 3, distance = 400 , fov=180,farz = 128 + [15] = { "dynamiclight", Vector(-350, 0, 10), Angle(0,0,0), Color(238,238,197), brightness = 0.75, distance = 500, fov=180,farz = 128 }, + [16] = { "dynamiclight", Vector(-60, 0, 10), Angle(0,0,0), Color(238,238,197), brightness = 0.75, distance = 500, fov=180,farz = 128 }, + [17] = { "dynamiclight", Vector( 230, 0, 10), Angle(0,0,0), Color(238,238,197), brightness = 0.75, distance = 500, fov=180,farz = 128 }, + --[13] = { "dynamiclight", Vector(-200, 0, 10), Angle(0,0,0), Color(255,175,50), brightness = 3, distance = 400 , fov=180,farz = 128 }, + --[11] = { "dynamiclight", Vector( 100, 0, 10), Angle(0,0,0), Color(255,175,50), brightness = 3, distance = 400 , fov=180,farz = 128 }, + --[12] = { "dynamiclight", Vector( 100, 0, 10), Angle(0,0,0), Color(255,175,50), brightness = 3, distance = 400, fov=180,farz = 128 }, + } + self.InteractionZones = { + { Pos = Vector(466, 64, 30), + Radius = 48, + ID = "CabinDoorLeft" }, + { Pos = Vector(466, 64, -30), + Radius = 48, + ID = "CabinDoorLeft" }, + { Pos = Vector(466, -60, 30), + Radius = 48, + ID = "CabinDoorRight" }, + { Pos = Vector(466, -60, -30), + Radius = 48, + ID = "CabinDoorRight" }, + { Pos = Vector(378, 39, 50), + Radius = 32, + ID = "OtsekDoor" }, + { Pos = Vector(378, 39, 11), + Radius = 32, + ID = "OtsekDoor" }, + { + ID = "FrontBrakeLineIsolationToggle", + Pos = Vector(495, -22, -60), Radius = 16, + }, + { + ID = "FrontTrainLineIsolationToggle", + Pos = Vector(495, 22, -60), Radius = 16, + }, + { + ID = "RearBrakeLineIsolationToggle", + Pos = Vector(-470, 30, -60), Radius = 16, + }, + { + ID = "RearTrainLineIsolationToggle", + Pos = Vector(-470, -30, -60), Radius = 16, + }, + { + ID = "RearDoor", + Pos = Vector(-464.8,-30,0), Radius = 20, + }, + { + ID = "GVToggle", + Pos = Vector(128,60,-75), Radius = 20, + }, + { + ID = "AirDistributorDisconnectToggle", + Pos = Vector(-177, -66, -50), Radius = 20, + }, + } + self.PassengerDoor = false + self.CabinDoorLeft = false + self.CabinDoorRight = false + self.RearDoor = false + self.OtsekDoor = false + self.WrenchMode = 0 +end + +function ENT:NonSupportTrigger() + self.ALS:TriggerInput("Set",1) + self.ALSk:TriggerInput("Set",1) + self.BARSBlock:TriggerInput("Set",3) + self.Plombs.ALS = nil + self.Plombs.ALSk = nil + self.Plombs.BARSBlock = nil +end + +-------------------------------------------------------------------------------- +function ENT:Think() + local retVal = self.BaseClass.Think(self) + local power = self.Electric.Battery80V > 62 + --print(self,self.BPTI.T,self.BPTI.State) + --[[ if self.BUV.Brake > 0 then + self:SetPackedRatio("RNState", power and (Train.K2.Value>0 or Train.K3.Value>0) and self.Electric.RN > 0 and (1-self.Electric.RNState)+math.Clamp(1-(math.abs(self.Electric.Itotal)-50)/50,0,1) or 1) + else + self:SetPackedRatio("RNState", power and (Train.K2.Value>0 or Train.K3.Value>0) and self.Electric.RN > 0 and self.Electric.RNState+math.Clamp(1-(math.abs(self.Electric.Itotal)-50)/50,0,1) or 1) + end--]] + if self.BPTI.State < 0 then + self:SetPackedRatio("RNState", ((self.BPTI.RNState)-0.25)*math.Clamp((math.abs(self.Electric.Itotal/2)-30-self.Speed*2)/20,0,1)) + --self:SetNW2Int("RNFreq", 13) + else--if self.BPTI.State > 0 then + self:SetPackedRatio("RNState", (0.75-self.BPTI.RNState)*math.Clamp((math.abs(self.Electric.Itotal/2)-30-self.Speed*2)/20,0,1)) + --self:SetNW2Int("RNFreq", ((self.BPTI.FreqState or 0)-1/3)/(2/3)*12) + --[[ else + self:SetPackedRatio("RNState", 0)--]] + end + + self:SetPackedRatio("Speed", self.Speed) + self:SetNW2Int("Wrench",self.WrenchMode) + self:SetPackedRatio("Controller",self.Panel.Controller) + self:SetPackedRatio("KRO",(self.RV.KROPosition+1)/2) + self:SetPackedRatio("KRR",(self.RV.KRRPosition+1)/2) + self:SetPackedRatio("VentCondMode",self.VentCondMode.Value/3) + self:SetPackedRatio("VentStrengthMode",self.VentStrengthMode.Value/3) + --self:SetPackedRatio("VentHeatMode",self.VentHeatMode.Value/2) + self:SetPackedRatio("BARSBlock",self.BARSBlock.Value/3) + + self:SetPackedBool("BBEWork",power and self.BUV.BBE > 0) + self:SetPackedBool("WorkBeep",power) + + --print(0.4+math.max(0,math.min(1,1-(self.Speed-30)/30))*0.5) + --print((80-self.Engines.Speed)) + self:SetPackedBool("HeadlightsEnabled1",self.Panel.Headlights1>0) + self:SetPackedBool("HeadlightsEnabled2",self.Panel.Headlights2>0) + local headlights = self.Panel.Headlights1*0.5+self.Panel.Headlights2*0.5 + local redlights = self.Panel.RedLights>0 + self:SetPackedBool("BacklightsEnabled",redlights) + self:SetLightPower(1,headlights>0,headlights) + self:SetLightPower(2,headlights>0,headlights) + self:SetLightPower(3,redlights) + self:SetLightPower(4,redlights) + self:SetLightPower(5,redlights) + self:SetLightPower(6,redlights) + local cablight = self.Panel.CabLights + self:SetLightPower(10,cablight > 0 ,cablight) + self:SetPackedBool("CabinEnabledEmer", cablight > 0) + self:SetPackedBool("CabinEnabledFull", cablight > 0.5) + local passlight = power and (self.BUV.MainLights and 1 or self.SFV20.Value > 0.5 and 0.4) or 0 + self:SetLightPower(15,passlight > 0, passlight) + self:SetLightPower(16,passlight > 0, passlight) + self:SetLightPower(17,passlight > 0, passlight) + self:SetPackedRatio("SalonLighting",passlight) + --self:SetPackedRatio("TrainLine",7.3/16) + --self:SetPackedRatio("BrakeLine",5.2/16) + --self:SetPackedRatio("BrakeCylinder",self.AsyncInverter.PN1*1.1/6) + if self:GetWagonNumber() == 37 then + --self.BV:TriggerInput("Set",0) + end + self:SetPackedRatio("BIAccel",power and self.BARS.BIAccel or 0) + self:SetNW2Int("BISpeed",power and self.Speed or -1)--CurTime()%5*20 + self:SetNW2Bool("BISpeedLimitBlink",power and self.BARS.BINoFreq > 0) + self:SetNW2Int("BISpeedLimit",power and self.BARS.SpeedLimit or 100) + self:SetNW2Int("BISpeedLimitNext",power and self.BARS.NextLimit or 100) + self:SetNW2Bool("BIForward",power and self.BARS.BIDirection >= 0)--power and (self.RV["KRO3-4"] > 0 or self.RV["KRR5-6"] > 0) and self.BARS.Speed > -0.2) + self:SetNW2Bool("BIBack",power and self.BARS.BIDirection <= 0)--power and (self.RV["KRO3-4"] > 0 or self.RV["KRR5-6"] > 0) and self.BARS.Speed < 0.2) + self:SetNW2Bool("DoorsClosed",power and self.BUKP.DoorClosed) + self:SetNW2Bool("HVoltage",power and self.BUKP.HVBad) + self:SetNW2Bool("DoorLeftLamp",self.Panel.DoorLeft>0) + self:SetNW2Bool("DoorRightLamp",self.Panel.DoorRight>0) + self:SetNW2Bool("EmerBrakeWork",self.Panel.EmerBrakeWork>0) + self:SetNW2Bool("TickerLamp",self.Panel.Ticker>0) + self:SetNW2Bool("KAHLamp",self.Panel.KAH>0) + self:SetNW2Bool("ALSLamp",self.Panel.ALS>0) + self:SetNW2Bool("PassSchemeLamp",self.Panel.PassScheme>0) + self:SetNW2Bool("R_AnnouncerLamp",self.Panel.R_Announcer>0) + self:SetNW2Bool("R_LineLamp",self.Panel.R_Line>0) + self:SetNW2Bool("AccelRateLamp",power and self.BUKP.Slope) + self:SetNW2Bool("DoorCloseLamp",self.Panel.DoorClose>0) + self:SetNW2Bool("DoorBlockLamp",self.Panel.DoorBlock>0) + self:SetPackedBool("AppLights", self.Panel.EqLights>0) + + self:SetPackedRatio("LV",self.Electric.Battery80V/150) + self:SetPackedRatio("HV",self.Electric.Main750V/1000) + self:SetPackedRatio("I13",(self.Electric.I13+500)/1000) + self:SetPackedRatio("I24",(self.Electric.I24+500)/1000) + self:SetPackedBool("PassengerDoor",self.PassengerDoor) + self:SetPackedBool("CabinDoorLeft",self.CabinDoorLeft) + self:SetPackedBool("CabinDoorRight",self.CabinDoorRight) + self:SetPackedBool("RearDoor",self.RearDoor) + self:SetPackedBool("OtsekDoor",self.OtsekDoor) + self:SetPackedBool("CompressorWork",self.Pneumatic.Compressor) + self:SetPackedBool("Vent1Work",self.Electric.Vent1>0) + self:SetPackedBool("Vent2Work",self.Electric.Vent2>0) + self:SetPackedBool("RingEnabled",self.BUKP.Ring) + + self:SetNW2Int("PassSchemesLED",self.PassSchemes.PassSchemeCurr) + self:SetNW2Int("PassSchemesLEDN",self.PassSchemes.PassSchemeNext) + self:SetPackedBool("PassSchemesLEDO",self.PassSchemes.PassSchemePath) + + self:SetPackedBool("AnnPlay",self.Panel.AnnouncerPlaying > 0) + + self:SetPackedRatio("Cran", self.Pneumatic.DriverValvePosition) + 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.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 = (24000+3000*(A < 0 and 1 or 0))--*add--35300+10000*(A < 0 and 1 or 0) + self.FrontBogey.Reversed = self.KMR2.Value > 0 + self.FrontBogey.DisableSound = 0 + self.RearBogey.MotorForce = (24000+3000*(A < 0 and 1 or 0))--*add--+5000--35300 + self.RearBogey.Reversed = self.KMR1.Value > 0 + self.RearBogey.DisableSound = 0 + + -- 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 + self.FrontBogey.PneumaticBrakeForce = (50000.0--[[ +5000+10000--]] ) --40000 + self.FrontBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + self.FrontBogey.ParkingBrakePressure = math.max(0,(3-self.Pneumatic.ParkingBrakePressure)/3)/2 + self.FrontBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + self.FrontBogey.DisableContacts = self.BUV.Pant + self.RearBogey.PneumaticBrakeForce = (50000.0--[[ +5000+10000--]] ) --40000 + self.RearBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + self.RearBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + self.RearBogey.ParkingBrakePressure = math.max(0,(3-self.Pneumatic.ParkingBrakePressure)/3)/2 + self.RearBogey.DisableContacts = self.BUV.Pant + end + return retVal +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 + +function ENT:OnButtonPress(button,ply) + if string.find(button,"PneumaticBrakeSet") then + self.Pneumatic:TriggerInput("BrakeSet",tonumber(button:sub(-1,-1))) + return + end + + if button == "PassengerDoor" then self.PassengerDoor = not self.PassengerDoor end + if button == "CabinDoorLeft" then self.CabinDoorLeft = not self.CabinDoorLeft end + if button == "OtsekDoor" then self.OtsekDoor = not self.OtsekDoor end + if button == "CabinDoorRight" then self.CabinDoorRight = not self.CabinDoorRight end + if button == "RearDoor" and (self.RearDoor or not self.BUV.BlockTorec) then self.RearDoor = not self.RearDoor end + if button == "DoorLeft" then + self.DoorSelectL:TriggerInput("Set",1) + self.DoorSelectR:TriggerInput("Set",0) + if self.EmergencyDoors.Value == 1 or self.DoorClose.Value == 0 then + self.DoorLeft:TriggerInput("Set",1) + end + end + if button == "DoorRight" then + self.DoorSelectL:TriggerInput("Set",0) + self.DoorSelectR:TriggerInput("Set",1) + if self.EmergencyDoors.Value == 1 or self.DoorClose.Value == 0 then + self.DoorRight:TriggerInput("Set",1) + end + end + if button == "DoorClose" then + if self.EmergencyDoors.Value == 1 then + self.EmerCloseDoors:TriggerInput("Set",1) + else + self.DoorClose:TriggerInput("Set",1-self.DoorClose.Value) + self.EmerCloseDoors:TriggerInput("Set",0) + end + end + if button == "KRO+" then + if self.WrenchMode == 1 then + self.RV:TriggerInput("KROSet",self.RV.KROPosition+1) + elseif self.WrenchMode == 2 then + self.RV:TriggerInput("KRRSet",self.RV.KRRPosition+1) + end + end + if button == "KRO-" then + if self.WrenchMode == 1 then + self.RV:TriggerInput("KROSet",self.RV.KROPosition-1) + elseif self.WrenchMode == 2 then + self.RV:TriggerInput("KRRSet",self.RV.KRRPosition-1) + end + end + if button == "WrenchKRO" or button == "WrenchKRO9" then + if self.WrenchMode == 0 then + self:PlayOnce("kro_in","cabin",1) + self.WrenchMode = 1 + else + self:OnButtonPress(button == "WrenchKRO9" and "KRO-" or "KRO+") + end + end + if button == "WrenchKRR" then + if self.WrenchMode == 0 then + self:PlayOnce("krr_in","cabin",1) + self.WrenchMode = 2 + end + end + if button == "WrenchNone" then + if self.WrenchMode ~= 0 then + if self.WrenchMode == 2 and self.RV.KRRPosition == 0 then + self:PlayOnce("krr_out","cabin",1,1) + self.WrenchMode = 0 + elseif self.WrenchMode == 1 and self.RV.KROPosition == 0 then + self:PlayOnce("kro_out","cabin",1,1) + self.WrenchMode = 0 + end + end + end +end + +function ENT:OnButtonRelease(button,ply) + 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 == "DoorLeft" then + self.DoorLeft:TriggerInput("Set",0) + end + if button == "DoorRight" then + self.DoorRight:TriggerInput("Set",0) + end + if button == "DoorClose" then + self.EmerCloseDoors:TriggerInput("Set",0) + end +end diff --git a/lua/entities/gmod_subway_81-720/shared.lua b/lua/entities/gmod_subway_81-720/shared.lua new file mode 100644 index 0000000..d247127 --- /dev/null +++ b/lua/entities/gmod_subway_81-720/shared.lua @@ -0,0 +1,500 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" +ENT.SkinsType = "81-720" +ENT.Model = "models/metrostroi_train/81-720/81-720.mdl" + +ENT.Spawnable = true +ENT.AdminSpawnable = true +ENT.DontAccelerateSimulation = false + +function ENT:PassengerCapacity() + return 300 +end + +function ENT:GetStandingArea() + return Vector(-460,-30,-60),Vector(360,30,-60) +end +local function GetDoorPosition(i,k) + return Vector(377.0 - 36.0 + 1*(k) - 230*i,-64*(1-2*k),-10) +end + +-- 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 + +ENT.MirrorCams = { + Vector(441,72,15),Angle(1,180,0),15, + Vector(441,-72,15),Angle(1,180,0),15, +} + + +local yventpos = { + -414.5+0*117, + -414.5+1*117+6.2, + -414.5+2*117+5, + -414.5+3*117+2, + -414.5+4*117+0.5, + -414.5+5*117-2.3, + -414.5+6*117, +} +function ENT:InitializeSounds() + self.BaseClass.InitializeSounds(self) + self.SoundNames["tisu"] = {"subway_trains/720/tisu.wav",loop = true} + self.SoundPositions["tisu"] = {400,1e9,Vector(0,0,-448),0.11} --FIXME: Pos + self.SoundNames["tisu2"] = {"subway_trains/720/tisu4.wav",loop = true} + self.SoundPositions["tisu2"] = {50,1e9,Vector(439,13,-40),0.15} --FIXME: Pos + self.SoundNames["tisu3"] = {"subway_trains/720/tisu3.wav",loop = true} + self.SoundPositions["tisu3"] = {400,1e9,Vector(0,0,-448),0.11} --FIXME: Pos + self.SoundNames["bbe"] = {"subway_trains/720/bbe.wav",loop = true} + self.SoundPositions["bbe"] = {400,1e9,Vector(0,0,-448),0.016*0.5} --FIXME: Pos + for i=1,7 do + self.SoundNames["vent"..i] = {loop=true,"subway_trains/720/vent_mix.wav"} + self.SoundPositions["vent"..i] = {130,1e9,Vector(yventpos[i],0,30),0.11} + end + + self.SoundNames["ring"] = {loop=0.0,"subway_trains/720/ring/ring_start.wav","subway_trains/720/ring/ring_loop.wav","subway_trains/720/ring/ring_end.wav"} + self.SoundPositions["ring"] = {100,1e9,Vector(409,25.6,-26.3),0.45} + + self.SoundNames["compressor"] = {loop=2,"subway_trains/720/compressor/compressor720_start.wav","subway_trains/720/compressor/compressor720_loop.wav","subway_trains/720/compressor/compressor720_stop.wav"} + self.SoundPositions["compressor"] = {485,1e9,Vector(-118,-40,-66),0.35} + self.SoundNames["compressor_pn"] = "subway_trains/722/compressor_pssh.mp3" + self.SoundPositions["compressor_pn"] = {485,1e9,Vector(-118,-40,-66),0.45} --FIXME: Pos + + self.SoundNames["release"] = {loop=true,"subway_trains/720/pneumo_release.wav"} + --self.SoundNames["release"] = {loop=true,"subway_trains/common/pneumatic/release_2.wav"} + self.SoundPositions["release"] = {485,1e9,Vector(-183,0,-70),0.55} + self.SoundNames["parking_brake"] = {loop=true,"subway_trains/common/pneumatic/autostop_loop.wav"} + self.SoundPositions["parking_brake"] = {400,1e9,Vector(-183,0,-70),0.95} + self.SoundNames["crane013_brake"] = {loop=true,"subway_trains/common/pneumatic/release_2.wav"} + self.SoundPositions["crane013_brake"] = {80,1e9,Vector(443,-14.8,-47.9),0.86} + self.SoundNames["crane013_brake2"] = {loop=true,"subway_trains/common/pneumatic/013_brake2.wav"} + self.SoundPositions["crane013_brake2"] = {80,1e9,Vector(443,-14.8,-47.9),0.86} + self.SoundNames["crane013_release"] = {loop=true,"subway_trains/common/pneumatic/013_release.wav"} + self.SoundPositions["crane013_release"] = {80,1e9,Vector(443,-14.8,-47.9),0.4} + + self.SoundNames["front_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["front_isolation"] = {300,1e9,Vector(443, 0,-63),1} + self.SoundNames["rear_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["rear_isolation"] = {300,1e9,Vector(-456, 0,-63),1} + + self.SoundNames["pneumo_disconnect_close"] = {"subway_trains/720/013_close1.mp3","subway_trains/720/013_close2.mp3","subway_trains/720/013_close3.mp3"} + self.SoundNames["pneumo_disconnect_open"] = { + "subway_trains/720/013_open1.mp3", + "subway_trains/720/013_open2.mp3", + "subway_trains/720/013_open3.mp3", + "subway_trains/720/013_open4.mp3", + } + self.SoundPositions["pneumo_disconnect_close"] = {485,1e9,Vector(495,40,-55),0.4} + self.SoundPositions["pneumo_disconnect_open"] = {485,1e9,Vector(495,40,-55),0.4} + self.SoundNames["disconnect_valve"] = "subway_trains/common/switches/pneumo_disconnect_switch.mp3" + + 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["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(500,0,-30),0.8} + + self.SoundNames["KV_-3_-2"] = "subway_trains/720/controller/t3_t2.mp3" + self.SoundNames["KV_-2_-1"] = "subway_trains/720/controller/t2_t1.mp3" + self.SoundNames["KV_-1_0"] = "subway_trains/720/controller/t1_0.mp3" + self.SoundNames["KV_0_1"] = "subway_trains/720/controller/0_x1.mp3" + self.SoundNames["KV_1_2"] = "subway_trains/720/controller/x1_x2.mp3" + self.SoundNames["KV_2_3"] = "subway_trains/720/controller/x2_x3.mp3" + self.SoundNames["KV_3_4"] = "subway_trains/720/controller/x3_x4.mp3" + self.SoundNames["KV_4_3"] = "subway_trains/720/controller/x4_x3.mp3" + self.SoundNames["KV_3_2"] = "subway_trains/720/controller/x3_x2.mp3" + self.SoundNames["KV_2_1"] = "subway_trains/720/controller/x2_x1.mp3" + self.SoundNames["KV_1_0"] = "subway_trains/720/controller/x1_0.mp3" + self.SoundNames["KV_0_-1"] = "subway_trains/720/controller/0_t1.mp3" + self.SoundNames["KV_-1_-2"] = "subway_trains/720/controller/t1_t2.mp3" + self.SoundNames["KV_-2_-3"] = "subway_trains/720/controller/t2_t3.mp3" + self.SoundPositions["KV_-3_-2"] = {80,1e9,Vector(461.8,25.3,-27.7)} + self.SoundPositions["KV_-2_-1"] = self.SoundPositions["KV_-3_-2"] + self.SoundPositions["KV_-1_0"] = self.SoundPositions["KV_-3_-2"] + self.SoundPositions["KV_0_1"] = self.SoundPositions["KV_-3_-2"] + self.SoundPositions["KV_1_2"] = self.SoundPositions["KV_-3_-2"] + self.SoundPositions["KV_2_3"] = self.SoundPositions["KV_-3_-2"] + self.SoundPositions["KV_3_4"] = self.SoundPositions["KV_-3_-2"] + self.SoundPositions["KV_4_3"] = self.SoundPositions["KV_-3_-2"] + self.SoundPositions["KV_3_2"] = self.SoundPositions["KV_-3_-2"] + self.SoundPositions["KV_2_1"] = self.SoundPositions["KV_-3_-2"] + self.SoundPositions["KV_1_0"] = self.SoundPositions["KV_-3_-2"] + self.SoundPositions["KV_0_-1"] = self.SoundPositions["KV_-3_-2"] + self.SoundPositions["KV_-1_-2"] = self.SoundPositions["KV_-3_-2"] + self.SoundPositions["KV_-2_-3"] = self.SoundPositions["KV_-3_-2"] + + self.SoundNames["kro_in"] = { + "subway_trains/717/kru/kru_insert1.mp3", + "subway_trains/717/kru/kru_insert2.mp3" + } + self.SoundNames["kro_out"] = { + "subway_trains/717/kru/kru_eject1.mp3", + "subway_trains/717/kru/kru_eject2.mp3", + "subway_trains/717/kru/kru_eject3.mp3", + } + self.SoundNames["kro_-1_0"] = { + "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["kro_0_1"] = { + "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["kro_1_0"] = { + "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["kro_0_-1"] = { + "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.SoundPositions["kro_in"] = {80,1e9,Vector(463.4,53.3,-21.1)} + self.SoundPositions["kro_out"] = self.SoundPositions["kro_in"] + self.SoundPositions["kro_-1_0"] = self.SoundPositions["kro_in"] + self.SoundPositions["kro_0_1"] = self.SoundPositions["kro_in"] + self.SoundPositions["kro_1_0"] = self.SoundPositions["kro_in"] + self.SoundPositions["kro_0_-1"] = self.SoundPositions["kro_in"] + + self.SoundNames["krr_in"] = self.SoundNames["kro_in"] + self.SoundNames["krr_out"] = self.SoundNames["kro_out"] + self.SoundNames["krr_-1_0"] = self.SoundNames["kro_-1_0"] + self.SoundNames["krr_0_1"] = self.SoundNames["kro_0_1"] + self.SoundNames["krr_1_0"] = self.SoundNames["kro_1_0"] + self.SoundNames["krr_0_-1"] = self.SoundNames["kro_0_-1"] + self.SoundPositions["krr_in"] = {80,1e9,Vector(470.4,53.9,-17.3)} + self.SoundPositions["krr_out"] = self.SoundPositions["krr_in"] + self.SoundPositions["krr_-1_0"] = self.SoundPositions["krr_in"] + self.SoundPositions["krr_0_1"] = self.SoundPositions["krr_in"] + self.SoundPositions["krr_1_0"] = self.SoundPositions["krr_in"] + self.SoundPositions["krr_0_-1"] = self.SoundPositions["krr_in"] + + self.SoundNames["k2_on"] = "subway_trains/717/pneumo/lk2_on.mp3" + self.SoundNames["k2_off"] = "subway_trains/717/pneumo/lk2_off.mp3" + self.SoundNames["k1_on"] = "subway_trains/717/pneumo/lk1_on.mp3" + self.SoundNames["k3_on"] = self.SoundNames["k2_on"] + self.SoundNames["kmr1_on"] = self.SoundNames["k1_on"] + self.SoundNames["kmr2_on"] = self.SoundNames["k1_on"] + self.SoundNames["k1_off"] = self.SoundNames["k2_off"] + self.SoundNames["k3_off"] = self.SoundNames["k2_off"] + self.SoundNames["kmr1_off"] = self.SoundNames["k2_off"] + self.SoundNames["kmr2_off"] = self.SoundNames["k2_off"] + --self.SoundNames["ksh1_off"] = "subway_trains/717/pneumo/ksh1.mp3" + self.SoundPositions["k2_on"] = {440,1e9,Vector(-60,-40,-66),0.45} + self.SoundPositions["k1_on"] = {440,1e9,Vector(-60,-40,-66),0.6} + self.SoundPositions["k2_off"] = self.SoundPositions["k2_on"] + self.SoundPositions["k3_off"] = self.SoundPositions["k2_on"] + self.SoundPositions["k3_on"] = self.SoundPositions["k2_on"] + self.SoundPositions["k3_off"] = self.SoundPositions["k2_on"] + self.SoundPositions["kmr1_on"] = self.SoundPositions["k2_on"] + self.SoundPositions["kmr1_off"] = self.SoundPositions["k2_on"] + self.SoundPositions["kmr2_on"] = self.SoundPositions["k2_on"] + self.SoundPositions["kmr2_off"] = self.SoundPositions["k2_on"] + + self.SoundNames["switch_batt_on"] = {"subway_trains/720/switches/batt_on.mp3","subway_trains/720/switches/batt_on2.mp3"} + self.SoundNames["switch_batt_off"] = {"subway_trains/720/switches/batt_off.mp3","subway_trains/720/switches/batt_off2.mp3"} + + self.SoundNames["switch_batt"] = {"subway_trains/720/switches/batt_on.mp3","subway_trains/720/switches/batt_on2.mp3","subway_trains/720/switches/batt_off.mp3","subway_trains/720/switches/batt_off2.mp3"} + + self.SoundNames["switch_pvz_on"] = {"subway_trains/720/switches/switchb_on.mp3","subway_trains/720/switches/switchp_on.mp3"} + self.SoundNames["switch_pvz_off"] = {"subway_trains/720/switches/switchb_off.mp3","subway_trains/720/switches/switchp_off.mp3"} + + self.SoundNames["switch_on"] = {"subway_trains/720/switches/switchp_on.mp3","subway_trains/720/switches/switchp_on2.mp3","subway_trains/720/switches/switchp_on3.mp3"} + self.SoundNames["switch_off"] = {"subway_trains/720/switches/switchp_off.mp3","subway_trains/720/switches/switchp_off2.mp3","subway_trains/720/switches/switchp_off3.mp3"} + + self.SoundNames["button_vityaz1_press"] = {"subway_trains/720/switches/buttv_press.mp3","subway_trains/720/switches/buttv_press2.mp3","subway_trains/720/switches/buttv_press3.mp3"} + self.SoundNames["button_vityaz1_release"] = {"subway_trains/720/switches/buttv_release.mp3","subway_trains/720/switches/buttv_release2.mp3","subway_trains/720/switches/buttv_release3.mp3"} + self.SoundNames["button_vityaz2_press"] = {"subway_trains/720/switches/buttv_press4.mp3","subway_trains/720/switches/buttv_press5.mp3","subway_trains/720/switches/buttv_press6.mp3"} + self.SoundNames["button_vityaz2_release"] = {"subway_trains/720/switches/buttv_release4.mp3","subway_trains/720/switches/buttv_release5.mp3","subway_trains/720/switches/buttv_release6.mp3"} + self.SoundNames["button_vityaz3_press"] = {"subway_trains/720/switches/buttv_press.mp3","subway_trains/720/switches/buttv_press3.mp3","subway_trains/720/switches/buttv_press7.mp3","subway_trains/720/switches/buttv_press8.mp3"} + self.SoundNames["button_vityaz3_release"] = {"subway_trains/720/switches/buttv_release.mp3","subway_trains/720/switches/buttv_release3.mp3","subway_trains/720/switches/buttv_release7.mp3","subway_trains/720/switches/buttv_release8.mp3"} + self.SoundNames["button_vityaz4_press"] = {"subway_trains/720/switches/buttv3_press.mp3","subway_trains/720/switches/buttv_press2.mp3","subway_trains/720/switches/buttv_press.mp3","subway_trains/720/switches/buttv_press8.mp3"} + self.SoundNames["button_vityaz4_release"] = {"subway_trains/720/switches/buttv4_release.mp3","subway_trains/720/switches/buttv_release5.mp3","subway_trains/720/switches/buttv_release7.mp3","subway_trains/720/switches/buttv_release6.mp3"} + + self.SoundNames["button_press"] = {"subway_trains/720/switches/butt_press.mp3","subway_trains/720/switches/butt_press2.mp3","subway_trains/720/switches/butt_press3.mp3"} + self.SoundNames["button_release"] = {"subway_trains/720/switches/butt_release.mp3","subway_trains/720/switches/butt_release2.mp3","subway_trains/720/switches/butt_release3.mp3"} + + self.SoundNames["button_square_press"] = "subway_trains/720/switches/butts_press.mp3" + self.SoundNames["button_square_release"] = "subway_trains/720/switches/butts_release.mp3" + + self.SoundNames["button_square_on"] = {"subway_trains/720/switches/butts_on.mp3","subway_trains/720/switches/butts_on2.mp3"} + self.SoundNames["button_square_off"] = {"subway_trains/720/switches/butts_off.mp3","subway_trains/720/switches/butts_off2.mp3"} + + self.SoundNames["door_cab_open"] = {"subway_trains/720/door/door_torec_open.mp3","subway_trains/720/door/door_torec_open2.mp3"} + self.SoundNames["door_cab_close"] = {"subway_trains/720/door/door_torec_close.mp3","subway_trains/720/door/door_torec_close2.mp3"} + self.SoundNames["door_cab_roll"] = {"subway_trains/720/door/cabdoor_roll1.mp3","subway_trains/720/door/cabdoor_roll2.mp3","subway_trains/720/door/cabdoor_roll3.mp3","subway_trains/720/door/cabdoor_roll4.mp3"} + 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["rolling_10"] = {loop=true,"subway_trains/720/rolling/rolling_10.wav"} + self.SoundNames["rolling_30"] = {loop=true,"subway_trains/720/rolling/rolling_30.wav"} + self.SoundNames["rolling_55"] = {loop=true,"subway_trains/720/rolling/rolling_55.wav"} + self.SoundNames["rolling_75"] = {loop=true,"subway_trains/720/rolling/rolling_75.wav"} + self.SoundPositions["rolling_10"] = {485,1e9,Vector(0,0,0),0.33} + self.SoundPositions["rolling_30"] = {485,1e9,Vector(0,0,0),0.7} + self.SoundPositions["rolling_55"] = {485,1e9,Vector(0,0,0),0.85} + self.SoundPositions["rolling_75"] = {485,1e9,Vector(0,0,0),0.90} + 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*0.4} + self.SoundPositions["rolling_medium1"] = {480,1e12,Vector(0,0,0),0.90*0.4} + self.SoundPositions["rolling_medium2"] = {480,1e12,Vector(0,0,0),0.90*0.4} + self.SoundPositions["rolling_high2"] = {480,1e12,Vector(0,0,0),1.00*0.4} + + + self.SoundNames["gv_f"] = {"subway_trains/717/kv70/reverser_0-b_1.mp3","subway_trains/717/kv70/reverser_0-b_2.mp3"} + self.SoundNames["gv_b"] = {"subway_trains/717/kv70/reverser_b-0_1.mp3","subway_trains/717/kv70/reverser_b-0_2.mp3"} + self.SoundPositions["gv_f"] = {80,1e9,Vector(126.4,50,-60-23.5),0.8} + self.SoundPositions["gv_b"] = {80,1e9,Vector(126.4,50,-60-23.5),0.8} + + --self.SoundNames["doors"] = "subway_trains/720/door/door_roll.mp3" + --self.SoundNames["doorl"] = {loop=true,"subway_trains/722/door_loop.wav"} + --self.SoundPositions["doors"] = {300,1e9,Vector(0,0,0),0.5} + --self.SoundPositions["doorl"] = {300,1e9,Vector(0,0,0),0.5} + for i=0,3 do + for k=0,1 do + self.SoundNames["door"..i.."x"..k.."r"] = {"subway_trains/720/door/door_loop.wav",loop=true} + self.SoundPositions["door"..i.."x"..k.."r"] = {100,1e9,GetDoorPosition(i,k),0.07} + self.SoundNames["door"..i.."x"..k.."o"] = {"subway_trains/720/door/door_open_end4.mp3","subway_trains/720/door/door_open_end3.mp3"} + self.SoundPositions["door"..i.."x"..k.."o"] = {150,1e9,GetDoorPosition(i,k),0.55} + self.SoundNames["door"..i.."x"..k.."c"] = {"subway_trains/720/door/door_close_end4.mp3","subway_trains/720/door/door_close_end5.mp3","subway_trains/720/door/door_close_end3.mp3"} + self.SoundPositions["door"..i.."x"..k.."c"] = {250,1e9,GetDoorPosition(i,k),0.55} + end + end + + self.SoundNames["work_beep"] = {loop=true,"subway_trains/720/work_beep_loop.wav"} + self.SoundPositions["work_beep"] = {65,1e9,Vector(0,23,10),0.03} + self.SoundNames["batt_on"] = "subway_trains/720/batt_on.mp3" + self.SoundPositions["batt_on"] = {400,1e9,Vector(126.4,50,-60-23.5),0.23} + + 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(409.75,37.5,24.7),0.05} + self.SoundPositions["igla_off"] = {50,1e9,Vector(409.75,37.5,24.7),0.05} + self.SoundPositions["igla_start1"] = {50,1e9,Vector(409.75,37.5,24.7),0.05} + self.SoundPositions["igla_start2"] = {50,1e9,Vector(409.75,37.5,24.7),0.05} + + + self.SoundNames["emer_brake"] = {loop=true,"subway_trains/common/pneumatic/autostop_loop.wav"} + self.SoundPositions["emer_brake"] = {90,1e9,Vector(380,-45,-75),0.85} + + for i = 1,10 do + local id1 = Format("b1tunnel_%d",i) + local id2 = Format("b2tunnel_%d",i) + self.SoundPositions[id1.."a"] = {500,1e9,Vector( 317-5,0,-84),0.5} + self.SoundPositions[id1.."b"] = self.SoundPositions[id1.."a"] + self.SoundPositions[id2.."a"] = {500,1e9,Vector(-317+0,0,-84),0.5} + self.SoundPositions[id2.."b"] = self.SoundPositions[id2.."a"] + end + for i = 1,14 do + local id1 = Format("b1street_%d",i) + local id2 = Format("b2street_%d",i) + self.SoundPositions[id1.."a"] = {500,1e9,Vector( 317-5,0,-84),0.5} + self.SoundPositions[id1.."b"] = self.SoundPositions[id1.."a"] + self.SoundPositions[id2.."a"] = {500,1e9,Vector(-317+0,0,-84),0.5} + self.SoundPositions[id2.."b"] = self.SoundPositions[id2.."a"] + end +end + +function ENT:InitializeSystems() + self:LoadSystem("TR","TR_3B") + self:LoadSystem("Engines","DK_120AM") + self:LoadSystem("Electric","81_720_Electric") + self:LoadSystem("BPTI","81_720_BPTI") + self:LoadSystem("RV","81_720_RV") + + + self:LoadSystem("BUKP","81_720_BUKP") + self:LoadSystem("BUV","81_720_BUV") + + self:LoadSystem("BARS","81_720_BARS") + + self:LoadSystem("Pneumatic","81_720_Pneumatic") + self:LoadSystem("Horn","81_720_Horn") + + + self:LoadSystem("Panel","81_720_Panel") + + self:LoadSystem("Announcer","81_71_Announcer", "AnnouncementsASNP") + self:LoadSystem("ASNP","81_71_ASNP") + self:LoadSystem("ASNP_VV","81_71_ASNP_VV") + + self:LoadSystem("Tickers","81_720_Ticker") + self:LoadSystem("PassSchemes","81_720_PassScheme") + + + self:LoadSystem("IGLA_CBKI","81_720_IGLA_CBKI2") + self:LoadSystem("IGLA_PCBK","81_720_IGLA_PCBK") + + + self:LoadSystem("RouteNumber","81_71_RouteNumber",2) + self:LoadSystem("LastStation","81_71_LastStation","720","route") +end +ENT.AnnouncerPositions = {} +for i=1,3 do + table.insert(ENT.AnnouncerPositions,{Vector(188-(i-1)*230+38,47*(i%2 > 0 and -1 or 1) ,44),200,0.15}) +end +ENT.Cameras = { + {Vector(407.5+17,32,22),Angle(0,180-7,0),"Train.720.CameraCond"}, + {Vector(407.5+17,32,3),Angle(0,180-7,0),"Train.720.CameraPPZ"}, + {Vector(407.5+17,32,-19.5),Angle(0,180-7,0),"Train.720.CameraPV"}, + {Vector(407.5+10,-4,40),Angle(0,180+5,0),"Train.Common.ASNP"}, + {Vector(407.5+50,-14,-15),Angle(90-46,0,0),"Train.720.CameraVityaz"}, + {Vector(407.5+40,-35,-30),Angle(60,90,0),"Train.720.CameraKRMH"}, + {Vector(380,35,-5),Angle(0,60,0),"Train.720.CameraPVZ"}, + {Vector(407.5+90,43.5,47),Angle(15,180,0),"Train.Common.RouteNumber"}, + {Vector(407.5+90,10,47) ,Angle(15,180,0),"Train.Common.LastStation"}, + {Vector(450+40,0,20),Angle(60,0,0),"Train.Common.CouplerCamera"}, +} +--------------------------------------------------- +-- Defined train information +-- Types of wagon(for wagon limit system): +-- 0 = Head or intherim +-- 1 = Only head +-- 2 = Only intherim +--------------------------------------------------- +ENT.SubwayTrain = { + Type = "81-720", + Name = "81-720", + WagType = 1, + Manufacturer = "MVM", + ALS = { + HaveAutostop = true, + TwoToSix = true, + RSAs325Hz = true, + Aproove0As325Hz = false, + }, + EKKType = 720 +} +ENT.NumberRanges = {{0007,0099}} + +ENT.Spawner = { + model = { + "models/metrostroi_train/81-720/81-720.mdl", + "models/metrostroi_train/81-720/720_cab.mdl", + "models/metrostroi_train/81-720/720_salon.mdl", + "models/metrostroi_train/81-720/glass_red.mdl", + "models/metrostroi_train/81-720/721_underwagon.mdl", + }, + interim = "gmod_subway_81-721", + postfunc = function(trains,WagNum) + for i=1,#trains do + local ent = trains[i] + if not ent.BUKP then continue end + ent.BUKP.WagNum = WagNum + ent.BUKP.Trains = {} + local first,last = 1,#trains + for i1=1,#trains do + local tent = trains[i==1 and i1 or #trains-i1+1] + ent.BUKP.Trains[i1] = tent:GetWagonNumber() + ent.BUKP.Trains[-tent:GetWagonNumber()] = {} + end + end + end, + Metrostroi.Skins.GetTable("Texture","Spawner.Texture",false,"train"), + Metrostroi.Skins.GetTable("PassTexture","Spawner.PassTexture",false,"pass"), + Metrostroi.Skins.GetTable("CabTexture","Spawner.CabTexture",false,"cab"), + {"Announcer","Spawner.720.Announcer","List",function() + local Announcer = {} + for k,v in pairs(Metrostroi.AnnouncementsASNP or {}) do if not v.riu then Announcer[k] = v.name or k end end + return Announcer + end}, + {"Scheme","Spawner.720.Schemes","List",function() + local Schemes = {} + for k,v in pairs(Metrostroi.Skins["720_schemes"] or {}) do Schemes[k] = v.name or k end + return Schemes + end}, + {"PassSchemesInvert","Spawner.720.InvertSchemes","Boolean",false,function(ent,val,rot) ent:SetNW2Bool("PassSchemesInvert",rot and not val or not rot and val) end}, + {"SpawnMode","Spawner.Common.SpawnMode","List",{"Spawner.Common.SpawnMode.Full","Spawner.Common.SpawnMode.Deadlock","Spawner.Common.SpawnMode.NightDeadlock","Spawner.Common.SpawnMode.Depot"}, nil,function(ent,val,rot,i,wagnum,rclk) + if rclk then return end + if ent._SpawnerStarted~=val then + ent.Battery:TriggerInput("Set",val<=2 and 1 or 0) + if ent.SF1 then + local first = i==1 or _LastSpawner~=CurTime() + ent.Ticker:TriggerInput("Set",val==1 and 1 or 0) + ent.Vent1:TriggerInput("Set",val==1 and 1 or 0) + --ent.Vent2:TriggerInput("Set",val==1 and 1 or 0) + ent.PassLight:TriggerInput("Set",val==1 and 1 or 0) + ent.Headlights1:TriggerInput("Set",val==1 and 1 or 0) + ent.CabLight:TriggerInput("Set",val==1 and 1 or 0) + ent.BBE:TriggerInput("Set",val==1 and 1 or 0) + ent.Compressor:TriggerInput("Set",val==1 and 1 or 0) + ent.PassScheme:TriggerInput("Set",val==1 and 1 or 0) + ent.R_Announcer:TriggerInput("Set",val<=2 and 1 or 0) + ent.R_ASNPOn:TriggerInput("Set",val<=2 and 1 or 0) + if val==1 then + timer.Simple(1,function() + if not IsValid(ent) then return end + ent.BUKP.State=2 + end) + end + ent.SF4:TriggerInput("Set",val<=2 and 1 or 0) + ent.SF5:TriggerInput("Set",val<=2 and 1 or 0) + ent.SF6:TriggerInput("Set",val<=2 and 1 or 0) + ent.SF12:TriggerInput("Set",val<=2 and 1 or 0) + ent.SF13:TriggerInput("Set",val<=2 and 1 or 0) + ent.SF15:TriggerInput("Set",val<=2 and 1 or 0) + + _LastSpawner=CurTime() + ent.CabinDoorLeft = val==4 and first + ent.CabinDoorRight = val==4 and first + ent.PassengerDoor = val==4 + ent.RearDoor = val==4 + else + ent.FrontDoor = val==4 + ent.RearDoor = val==4 + end + ent.Pneumatic.RightDoorState = val==4 and {1,1,1,1} or {0,0,0,0} + ent.Pneumatic.DoorRight = val==4 + ent.Pneumatic.LeftDoorState = val==4 and {1,1,1,1} or {0,0,0,0} + ent.Pneumatic.DoorLeft = val==4 + ent.GV:TriggerInput("Set",val<4 and 1 or 0) + ent._SpawnerStarted = val + end + if val==1 then ent.BV:TriggerInput("Close",1) end + ent.Pneumatic.TrainLinePressure = val==3 and math.random()*4 or val==2 and 4.5+math.random()*3 or 7.6+math.random()*0.6 + end}, + --{"GV","Spawner.717.GV","Boolean",true,function(ent,val) ent.GV:TriggerInput("Set",val) end}, + --{"PB","Spawner.717.PB","Boolean",false,function(ent,val) ent.ParkingBrake:TriggerInput("Set",val) end}, +} diff --git a/lua/entities/gmod_subway_81-721/cl_init.lua b/lua/entities/gmod_subway_81-721/cl_init.lua new file mode 100644 index 0000000..1055420 --- /dev/null +++ b/lua/entities/gmod_subway_81-721/cl_init.lua @@ -0,0 +1,774 @@ +-------------------------------------------------------------------------------- +-- 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["PVZ"] = { + pos = Vector(450,53,-12), --446 -- 14 -- -0,5 + ang = Angle(0,-90+10,90), + width = 330, + height = 350, + scale = 0.0625, + hideseat=0.2, + + buttons = { + {ID = "SFV1Toggle",x=0*30, y=0, w=30,h=50, tooltip = "SF1: Питание цепей ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð°Ð³Ð¾Ð½Ð°",}, + {ID = "SFV2Toggle",x=1*30, y=0, w=30,h=50, tooltip = "SF2: Питание БУВ",}, + {ID = "SFV3Toggle",x=2*30, y=0, w=30,h=50, tooltip = "SF3: Питание БУТП",}, + {ID = "SFV4Toggle",x=3*30, y=0, w=30,h=50, tooltip = "SF4: БУТП Управление",}, + {ID = "SFV5Toggle",x=4*30, y=0, w=30,h=50, tooltip = "SF5: БУТП Управление резервное",}, + {ID = "SFV6Toggle",x=5*30, y=0, w=30,h=50, tooltip = "SF6: БУТП Питание",}, + {ID = "SFV7Toggle",x=6*30, y=0, w=30,h=50, tooltip = "SF7: ББЭ",}, + {ID = "SFV8Toggle",x=7*30, y=0, w=30,h=50, tooltip = "SF8: БВ управление",}, + {ID = "SFV9Toggle",x=8*30, y=0, w=30,h=50, tooltip = "SF9: БВ питание",}, + {ID = "SFV10Toggle",x=9*30, y=0, w=30,h=50, tooltip = "SF10: ППО",}, + {ID = "SFV11Toggle",x=10*30, y=0, w=30,h=50, tooltip = "SF11: Мотор-компреÑÑор"}, + + {ID = "SFV12Toggle",x=0*30, y=150, w=30,h=50, tooltip = "SF12: Двери закрытие",}, + {ID = "SFV13Toggle",x=1*30, y=150, w=30,h=50, tooltip = "SF13: Двери открытие левых",}, + {ID = "SFV14Toggle",x=2*30, y=150, w=30,h=50, tooltip = "SF14: Двери открытие правых",}, + {ID = "SFV15Toggle",x=3*30, y=150, w=30,h=50, tooltip = "SF15: Двери торцевые",}, + {ID = "SFV16Toggle",x=4*30, y=150, w=30,h=50, tooltip = "SF16: Оповещение",}, + {ID = "SFV17Toggle",x=5*30, y=150, w=30,h=50, tooltip = "SF17: ЭкÑÑ‚Ñ€ÐµÐ½Ð½Ð°Ñ ÑвÑзь",}, + {ID = "SFV18Toggle",x=6*30, y=150, w=30,h=50, tooltip = "SF18: Резерв",}, + {ID = "SFV19Toggle",x=7*30, y=150, w=30,h=50, tooltip = "SF19: ОÑвещение Ñалона питание",}, + {ID = "SFV20Toggle",x=8*30, y=150, w=30,h=50, tooltip = "SF20: ОÑвещение Ñалона аварийное",}, + {ID = "SFV21Toggle",x=9*30, y=150, w=30,h=50, tooltip = "SF21: Датчик ÑкороÑти",}, + {ID = "SFV22Toggle",x=10*30, y=150, w=30,h=50, tooltip = "SF22: Тормоз ÑтоÑночный"}, + + {ID = "SFV23Toggle",x=0*30, y=300, w=30,h=50, tooltip = "SF23: ВентилÑÑ†Ð¸Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ 1-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°",}, + {ID = "SFV24Toggle",x=1*30, y=300, w=30,h=50, tooltip = "SF24: ВентилÑÑ†Ð¸Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ 2-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°",}, + {ID = "SFV25Toggle",x=2*30, y=300, w=30,h=50, tooltip = "SF25: ВентилÑÑ†Ð¸Ñ Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ðµ 1-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°",}, + {ID = "SFV26Toggle",x=3*30, y=300, w=30,h=50, tooltip = "SF26: ВентилÑÑ†Ð¸Ñ Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ðµ 2-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°",}, + {ID = "SFV27Toggle",x=4*30, y=300, w=30,h=50, tooltip = "SF27: Питание Ð²Ð¾Ð·Ð±ÑƒÐ´Ð¸Ñ‚ÐµÐ»Ñ FIXME",}, + {ID = "SFV28Toggle",x=5*30, y=300, w=30,h=50, tooltip = "SF28: Питание ЗКК FIXME",}, + {ID = "SFV29Toggle",x=6*30, y=300, w=30,h=50, tooltip = "SF29: Токоприёмники",}, + {ID = "SFV30Toggle",x=7*30, y=300, w=30,h=50, tooltip = "SF30: Табло",}, + {ID = "SFV31Toggle",x=8*30, y=300, w=30,h=50, tooltip = "SF31: Резерв",}, + {ID = "SFV32Toggle",x=9*30, y=300, w=30,h=50, tooltip = "SF32: Резерв",}, + {ID = "SFV33Toggle",x=10*30, y=300, w=30,h=50, tooltip = "SF33: Резерв"}, + } +} +for k,buttbl in ipairs(ENT.ButtonMap["PVZ"].buttons) do + buttbl.model = { + model = "models/metrostroi_train/81-720/button_av1.mdl",z=-16, ang=-90, + var=buttbl.ID:Replace("Toggle",""),speed=9, vmin=0,vmax=1, + sndvol = 0.8, snd = function(val) return val and "av_on" or "av_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + } +end + +ENT.ButtonMap["Battery"] = { + pos = Vector(455,19.1,-11.5), --446 -- 14 -- -0,5 + ang = Angle(0,0,90), + width = 80, + height = 80, + scale = 0.0625, + + buttons = { + {ID = "BatteryToggle",x=0, y=0, w=80,h=80 , tooltip = "БатареÑ", model = { + model = "models/metrostroi_train/81-717/battery_enabler.mdl", + var="Battery",speed=0.5,vmin=1,vmax=0.8, + sndvol = 0.8, snd = function(val) return val and "pak_on" or "pak_off" end,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + } +} +ENT.ButtonMap["RearDoor"] = { + pos = Vector(-465,16-32,42), + ang = Angle(0,90,90), + width = 642, + height = 2000, + scale = 0.1/2, + buttons = { + {ID = "RearDoor",x=0,y=0,w=642,h=2000, tooltip="ЗаднÑÑ Ð´Ð²ÐµÑ€ÑŒ\nRear door", model = { + var="RearDoor",sndid="door_cab_b", + 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["FrontPneumatic"] = { + pos = Vector(470-9+5,-42,-58.0+5-6), + ang = Angle(0,90,90), + width = 800, + 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=400, 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(449+13, -30+0.5, -69), + ang = Angle( 15,-90,0), + hide = 2,30 +} +ENT.ClientProps["FrontTrain"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_blue.mdl", + pos = Vector(449+13, 30+0.5, -69), + 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-0.5+4,42,-58.0+5-6), + ang = Angle(0,270,90), + width = 800, + 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=400, 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["FrontDoor"] = { + pos = Vector(462,16.5,42), + ang = Angle(0,-90,90), + width = 642, + height = 2000, + scale = 0.1/2, + buttons = { + {ID = "FrontDoor",x=0,y=0,w=642,h=2000, tooltip="ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ\nFront door", model = { + var="FrontDoor",sndid="door_cab_f", + 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,3 do + ENT.ClientProps["TrainNumberL"..i] = { + model = "models/metrostroi_train/common/bort_numbers.mdl", + pos = Vector(57+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,3 do + ENT.ClientProps["TrainNumberR"..i] = { + model = "models/metrostroi_train/common/bort_numbers.mdl", + pos = Vector(61+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.ButtonMap["Tickers"] = { + pos = Vector(-460.5,-31.5,54.8), --446 -- 14 -- -0,5 + ang = Angle(0,90,90), + width = 852, + height = 64, + scale = 0.074, + hide=true, + hideseat=1, +} +ENT.ClientProps["salon"] = { + model = "models/metrostroi_train/81-720/721_salon.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=1.5, +} +ENT.ClientProps["underwagon"] = { + model = "models/metrostroi_train/81-720/721_underwagon.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=1, +} +ENT.ClientProps["tickers"] = { + model = "models/metrostroi_train/81-720/720_tablo.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=1.5, +} +ENT.ClientProps["lamps_emer"] = { + model = "models/metrostroi_train/81-720/720_lamps_emer.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(245,238,223), + hide=1.5, +} +ENT.ClientProps["lamps_full"] = { + model = "models/metrostroi_train/81-720/720_lamps_full.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(245,238,223), + hide=1.5, +} +ENT.ClientProps["PassSchemes"] = { + model = "models/metrostroi_train/81-720/720_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["PassSchemesR"] = { + model = "models/metrostroi_train/81-720/720_sarmat_r.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=1.5, + callback = function(ent) + ent.PassSchemesDone = false + end, +} +for i=1,5 do + ENT.ClientProps["led_l_f"..i] = { + model = "models/metrostroi_train/81-720/720_led_l_r.mdl", + pos = Vector((i-1)*10.5+0.2,0,0), + ang = Angle(0,0,0), + skin=6, + hideseat = 1.5, + } + ENT.ClientProps["led_l_b"..i] = { + model = "models/metrostroi_train/81-720/720_led_l.mdl", + pos = Vector(-(i-1)*10.5-0.2,0,0), + ang = Angle(0,0,0), + skin=6, + hideseat = 1.5, + } + + ENT.ClientProps["led_r_f"..i] = { + model = "models/metrostroi_train/81-720/720_led_r.mdl", + pos = Vector((i-1)*10.5+0.2,0,0), + ang = Angle(0,0,0), + skin=6, + hideseat = 1.5, + } + + ENT.ClientProps["led_r_b"..i] = { + model = "models/metrostroi_train/81-720/720_led_r_r.mdl", + pos = Vector(-(i-1)*10.5-0.2,0,0), + ang = Angle(0,0,0), + skin=6, + hideseat = 1.5, + } +end +ENT.ButtonMap["GV"] = { + pos = Vector(128,63,-52-15), + ang = Angle(0,180,90), + width = 170, + height = 150, + scale = 0.1, + buttons = { + {ID = "GVToggle",x=0, y=0, w= 170,h = 150, tooltip="Разъединитель БРУ (ГВ)", model = { + var="GV",sndid = "gv_wrench", + 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_wrench"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = Vector(126.4,50,-60-23.5), + ang = Angle(-90,0,0), + hide = 0.5, +} +-------------------------------------------------------------------------------- +-- 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-720/81-720_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-720/81-720_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-720/81-720_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-720/81-720_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-720/81-720_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-720/81-720_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-720/81-720_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-720/81-720_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-720/81-720_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-720/81-720_doors_pos1.mdl", + pos = Vector(-348.72,-63.171,-11.1), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door_cab_f"] = { + model = "models/metrostroi_train/81-720/720_door_tor.mdl", + pos = Vector(462,-17,-10), + ang = Angle(0,89,0), + hide=2 +} +ENT.ClientProps["door_cab_b"] = { + model = "models/metrostroi_train/81-720/720_door_tor.mdl", + pos = Vector(-466.2,17,-10), + ang = Angle(0,-91,-0.15), + hide=2 +} + +local yventpos = { + -414.5+0*117, + -414.5+1*117+6.2, + -414.5+2*117+5, + -414.5+3*117+2, + -414.5+4*117+0.5, + -414.5+5*117-2.3, + -414.5+6*117-2.3, + -414.5+7*117+4, +} +for i=1,8 do + ENT.ClientProps["vent"..i] = { + model = "models/metrostroi_train/81-720/vent.mdl", + pos = Vector(yventpos[i],0,57.2), + ang = Angle(0,0,0), + hideseat=0.8, + } +end +ENT.Lights = { + -- Headlight glow + --[2] = { "dynamiclight", Vector( 300, 0, 40), Angle(0,0,0), Color(255,255,255), brightness = 4, distance = 550 }, +} + +function ENT:Initialize() + self.BaseClass.Initialize(self) + self.Tickers = self:CreateRT("721Ticker",1024,64) + render.PushRenderTarget(self.Tickers,0,0,1024, 64) + render.Clear(0, 0, 0, 0) + render.PopRenderTarget() + self.ReleasedPdT = 0 + self.PreviousCompressorState = false + self.CompressorVol = 0 + self.TISUVol = 0 + + self.FrontLeak = 0 + self.RearLeak = 0 + + self.ParkingBrake = 0 + + self.VentRand = {} + self.VentState = {} + self.VentVol = {} + for i=1,8 do + self.VentRand[i] = math.Rand(0.5,2) + self.VentState[i] = 0 + self.VentVol[i] = 0 + end +end +function ENT:UpdateWagonNumber() + for i=0,3 do + --self:ShowHide("TrainNumberL"..i,i .25 then led = led + snext end + if scurr < 0 then led = math.floor(CurTime()%5*6.2) end + if led_back then + if ledwork then + for i=1,5 do + if IsValid(self.ClientEnts["led_l_b"..i]) then self.ClientEnts["led_l_b"..i]:SetSkin(math.Clamp(led-((i-1)*6),0,6)) end + if IsValid(self.ClientEnts["led_r_b"..i]) then self.ClientEnts["led_r_b"..i]:SetSkin(math.Clamp(led-((i-1)*6),0,6)) end + end + end + else + if ledwork then + for i=1,5 do + if IsValid(self.ClientEnts["led_l_f"..i]) then self.ClientEnts["led_l_f"..i]:SetSkin(math.Clamp(led-((i-1)*6),0,6)) end + if IsValid(self.ClientEnts["led_r_f"..i]) then self.ClientEnts["led_r_f"..i]:SetSkin(math.Clamp(led-((i-1)*6),0,6)) end + end + end + end + 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.9,1.1)) + else + self:PlayOnce(sid.."c","",1,math.Rand(0.9,1.1)) + 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.9+self.DoorLoopStates[id]*0.1) + 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/15 end + end + --[[ if self.Anims[n_r] then + dro = math.abs(state-self.Anims[n_r].oldival) + if dro <= 0 and self.Anims[n_r].oldspeed then dro = self.Anims[n_r].oldspeed/15 end + end--]] + self:Animate(n_l,state,0.02,1, dlo*15,false)--0.8 + (-0.2+0.4*math.random()),0) + --self:Animate(n_r,state,0,1, dro*15,false)--0.8 + (-0.2+0.4*math.random()),0) + end + end + local door_f = self:GetPackedBool("FrontDoor") + local door_b = self:GetPackedBool("RearDoor") + local door_cab_f = self:Animate("door_cab_f",door_f and 1 or -0.05,0,0.235, 8, 0.05) + local door_cab_b = self:Animate("door_cab_b",door_b and 1 or -0.05,0,0.25, 8, 0.05) + + local door1s = (door_cab_f > 0 or door_f) + if self.Door1 ~= door1s then + self.Door1 = door1s + self:PlayOnce("FrontDoor","bass",door1s and 1 or 0) + end + local door2s = (door_cab_b > 0 or door_b) + if self.Door2 ~= door2s then + self.Door2 = door2s + self:PlayOnce("RearDoor","bass",door2s and 1 or 0) + end + + local speed = self:GetPackedRatio("Speed", 0) + + local ventSpeedAdd = math.Clamp(speed/30,0,1) + + local v1state = self:GetPackedBool("Vent1Work") + local v2state = self:GetPackedBool("Vent2Work") + for i=1,8 do + local rand = self.VentRand[i] + local vol = self.VentVol[i] + local even = i%2 == 0 + local work = (even and v1state or not even and v2state) + local target = math.min(1,(work and 1 or 0)+ventSpeedAdd*rand*0.4)*2 + if self.VentVol[i] < target then + self.VentVol[i] = math.min(target,vol + dT/1.5*rand) + elseif self.VentVol[i] > target then + self.VentVol[i] = math.max(0,vol - dT/8*rand*(vol*0.3)) + end + self.VentState[i] = (self.VentState[i] + 10*((self.VentVol[i]/2)^3)*dT)%1 + local vol1 = math.max(0,self.VentVol[i]-1) + local vol2 = math.max(0,(self.VentVol[i-1] or self.VentVol[i+1])-1) + self:SetSoundState("vent"..i,vol1*(0.7+vol2*0.3),0.5+0.5*vol1+math.Rand(-0.01,0.01)) + if IsValid(self.ClientEnts["vent"..i]) then + self.ClientEnts["vent"..i]:SetPoseParameter("position",self.VentState[i]) + end + end + self:SetSoundState("compressor",self:GetPackedBool("CompressorWork") and 1 or 0,1) + + local speed = self:GetPackedRatio("Speed", 0) + --local rol10 = math.Clamp(speed/5,0,1)*(1-math.Clamp((speed-50)/8,0,1)) + --local rol70 = math.Clamp((speed-50)/8,0,1) + 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 rol10 = math.Clamp(speed/12,0,1)*(1-math.Clamp((speed-20)/12,0,1)) + local rol10p = Lerp((speed-12)/12,0.9,1.1) + local rol30 = math.Clamp((speed-20)/12,0,1)*(1-math.Clamp((speed-40)/12,0,1)) + local rol30p = Lerp((speed-15)/30,0.8,1.2) + local rol55 = math.Clamp((speed-40)/12,0,1)*(1-math.Clamp((speed-65)/15,0,1)) + local rol55p = Lerp(0.8+(speed-43)/24,0.8,1.2) + local rol75 = math.Clamp((speed-65)/15,0,1) + local rol75p = Lerp(0.8+(speed-67)/16,0.8,1.2) + self:SetSoundState("rolling_10",rollingi*rol10,rol10p) + self:SetSoundState("rolling_30",rollingi*rol30,rol30p) + self:SetSoundState("rolling_55",rollingi*rol55,rol55p) + self:SetSoundState("rolling_75",rollingi*rol75,rol75p) + + 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 = self:GetPackedRatio("RNState") + self.TISUVol = math.Clamp(self.TISUVol+(state-self.TISUVol)*dT*8,0,1) + self:SetSoundState("tisu", self.TISUVol, 1) + self:SetSoundState("bbe", self:GetPackedBool("BBEWork") and 1 or 0, 1) + + local work = self:GetPackedBool("AnnPlay") + for k,v in ipairs(self.AnnouncerPositions) do + 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:Draw() + self.BaseClass.Draw(self) +end + +function ENT:DrawPost() + self.RTMaterial:SetTexture("$basetexture", self.Tickers) + self:DrawOnPanel("Tickers",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(512,32+8,1024+16,64+16,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 == "K1" then + local id = range > 0 and "k1_on" or "k1_off" + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["k1_on"][1] = 440-Lerp(speed/0.1,0,330) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "K2" then + local id = range > 0 and "k2_on" or "k2_off" + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["k2_on"][1] = 440-Lerp(speed/0.1,0,330) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "K3" then + local id = range > 0 and "k3_on" or "k3_off" + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["k3_on"][1] = 440-Lerp(speed/0.1,0,330) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "KMR1" then + local id = range > 0 and "kmr1_on" or "kmr1_off" + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["kmr1_on"][1] = 440-Lerp(speed/0.1,0,330) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "KMR2" then + local id = range > 0 and "kmr2_on" or "kmr2_off" + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["kmr2_on"][1] = 440-Lerp(speed/0.1,0,330) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "QF1" then + local id = range > 0 and "qf1_on" or "qf1_off" + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["qf1_on"][1] = 440-Lerp(speed/0.1,0,330) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + return soundid,location,range,pitch +end +Metrostroi.GenerateClientProps() \ No newline at end of file diff --git a/lua/entities/gmod_subway_81-721/init.lua b/lua/entities/gmod_subway_81-721/init.lua new file mode 100644 index 0000000..97fce1b --- /dev/null +++ b/lua/entities/gmod_subway_81-721/init.lua @@ -0,0 +1,200 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +ENT.BogeyDistance = 650 -- Needed for gm trainspawner +ENT.SyncTable = { + "SFV1","SFV2","SFV3","SFV4","SFV5","SFV6","SFV7","SFV8","SFV9","SFV10","SFV11", + "SFV12","SFV13","SFV14","SFV15","SFV16","SFV17","SFV18","SFV19","SFV20","SFV21","SFV22", + "SFV23","SFV24","SFV25","SFV26","SFV27","SFV28","SFV29","SFV30","SFV31","SFV32","SFV33", + "RearBrakeLineIsolation","RearTrainLineIsolation", + "FrontBrakeLineIsolation","FrontTrainLineIsolation","Battery", + "GV", +} +-------------------------------------------------------------------------------- +function ENT:Initialize() + -- Set model and initialize + self:SetModel("models/metrostroi_train/81-720/81-721.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create seat entities + self.DriverSeat = self:CreateSeat("instructor",Vector(450,11,-35)) + + -- Hide seats + self.DriverSeat:SetRenderMode(RENDERMODE_TRANSALPHA) + self.DriverSeat:SetColor(Color(0,0,0,0)) + + -- Create bogeys + if Metrostroi.BogeyOldMap then + self.FrontBogey = self:CreateBogey(Vector( 320,0,-90),Angle(0,180,0),true,"720") + self.RearBogey = self:CreateBogey(Vector(-320,0,-90),Angle(0,0,0),false,"720") + self.FrontCouple = self:CreateCouple(Vector( 413.7+6.8,0,-79),Angle(0,0,0),true,"717") + self.RearCouple = self:CreateCouple(Vector(-419-6.8,0,-79),Angle(0,180,0),false,"717") + else + self.FrontBogey = self:CreateBogey(Vector( 320,0,-90),Angle(0,180,0),true,"720") + self.RearBogey = self:CreateBogey(Vector(-320,0,-90),Angle(0,0,0),false,"720") + self.FrontCouple = self:CreateCouple(Vector( 420 -8,0,-79),Angle(0,0,0),true,"717") + self.RearCouple = self:CreateCouple(Vector(-419-6.8+8,0,-79),Angle(0,180,0),false,"717") + end + self.FrontBogey:SetNWBool("Async",true) + self.RearBogey:SetNWBool("Async",true) + self.FrontBogey:SetNWInt("MotorSoundType",2) + self.RearBogey:SetNWInt("MotorSoundType",2) + local rand = math.random()*0.05 + self.FrontBogey:SetNWFloat("SqualPitch",1.45+rand) + self.RearBogey:SetNWFloat("SqualPitch",1.45+rand) + + -- Initialize key mapping + self.KeyMap = { + [KEY_F] = "PneumaticBrakeUp", + [KEY_R] = "PneumaticBrakeDown", + [KEY_PAD_1] = "PneumaticBrakeSet1", + [KEY_PAD_2] = "PneumaticBrakeSet2", + [KEY_PAD_3] = "PneumaticBrakeSet3", + [KEY_PAD_4] = "PneumaticBrakeSet4", + [KEY_PAD_5] = "PneumaticBrakeSet5", + [KEY_PAD_6] = "PneumaticBrakeSet6", + } + -- Cross connections in train wires + self.TrainWireCrossConnections = { + [4] = 3, -- Orientation F<->B + [13] = 12, -- Reverser F<->B + [38] = 37, -- Doors L<->R + } + + self.InteractionZones = { + { + ID = "FrontBrakeLineIsolationToggle", + Pos = Vector(463.4, -22, -60), Radius = 16, + }, + { + ID = "FrontTrainLineIsolationToggle", + Pos = Vector(463.4, 22, -60), Radius = 16, + }, + { + ID = "RearBrakeLineIsolationToggle", + Pos = Vector(-470, 30, -60), Radius = 16, + }, + { + ID = "RearTrainLineIsolationToggle", + Pos = Vector(-470, -30, -60), Radius = 16, + }, + { + ID = "RearDoor", + Pos = Vector(-464.8,-30,0), Radius = 20, + }, + { + ID = "FrontDoor", + Pos = Vector(458,30,0), Radius = 20, + }, + { + ID = "GVToggle", + Pos = Vector(128,60,-75), Radius = 20, + }, + { + ID = "AirDistributorDisconnectToggle", + Pos = Vector(-177, -66, -50), Radius = 20, + }, + } + self.Lights = { + -- Interior + --[11] = { "dynamiclight", Vector( 200, 0, 10), Angle(0,0,0), Color(255,175,50), brightness = 3, distance = 400 , fov=180,farz = 128 + [15] = { "dynamiclight", Vector(-330, 0, 10), Angle(0,0,0), Color(238,238,197), brightness = 0.5, distance = 500, fov=180,farz = 128 }, + [16] = { "dynamiclight", Vector(-0, 0, 10), Angle(0,0,0), Color(238,238,197), brightness = 0.5, distance = 500, fov=180,farz = 128 }, + [17] = { "dynamiclight", Vector( 330, 0, 10), Angle(0,0,0), Color(238,238,197), brightness = 0.5, distance = 500, fov=180,farz = 128 }, + --[13] = { "dynamiclight", Vector(-200, 0, 10), Angle(0,0,0), Color(255,175,50), brightness = 3, distance = 400 , fov=180,farz = 128 }, + --[11] = { "dynamiclight", Vector( 100, 0, 10), Angle(0,0,0), Color(255,175,50), brightness = 3, distance = 400 , fov=180,farz = 128 }, + --[12] = { "dynamiclight", Vector( 100, 0, 10), Angle(0,0,0), Color(255,175,50), brightness = 3, distance = 400, fov=180,farz = 128 }, + } + self.FrontDoor = false + self.RearDoor = false +end + + +-------------------------------------------------------------------------------- +function ENT:Think() + local retVal = self.BaseClass.Think(self) + local power = self.Electric.Battery80V > 62 + if self.BPTI.State < 0 then + self:SetPackedRatio("RNState", ((self.BPTI.RNState)-0.25)*math.Clamp((math.abs(self.Electric.Itotal/2)-30-self.Speed*2)/20,0,1)) + --self:SetNW2Int("RNFreq", 13) + else--if self.BPTI.State > 0 then + self:SetPackedRatio("RNState", (0.75-self.BPTI.RNState)*math.Clamp((math.abs(self.Electric.Itotal/2)-30-self.Speed*2)/20,0,1)) + --self:SetNW2Int("RNFreq", ((self.BPTI.FreqState or 0)-1/3)/(2/3)*12) + --[[ else + self:SetPackedRatio("RNState", 0)--]] + end + self:SetPackedRatio("Speed", self.Speed) + self:SetPackedBool("CompressorWork",power and self.Pneumatic.Compressor) + self:SetPackedBool("Vent1Work",self.Electric.Vent1>0) + self:SetPackedBool("Vent2Work",self.Electric.Vent2>0) + self:SetPackedBool("BBEWork",power and self.BUV.BBE > 0) + + self:SetNW2Int("PassSchemesLED",self.PassSchemes.PassSchemeCurr) + self:SetNW2Int("PassSchemesLEDN",self.PassSchemes.PassSchemeNext) + self:SetPackedBool("PassSchemesLEDO",self.PassSchemes.PassSchemePath) + + self:SetPackedBool("AnnPlay",self.Panel.AnnouncerPlaying > 0) + + self:SetPackedBool("FrontDoor",self.FrontDoor) + self:SetPackedBool("RearDoor",self.RearDoor) + local passlight = power and (self.BUV.MainLights and 1 or self.SFV20.Value > 0.5 and 0.4) or 0 + --self:SetLightPower(11,power and mul > 0, mul) + self:SetLightPower(15,passlight > 0, passlight) + self:SetLightPower(16,passlight > 0, passlight) + self:SetLightPower(17,passlight > 0, passlight) + self:SetPackedRatio("SalonLighting",passlight) + --local mul = self.SF45.Value > 0.5 and self.BUV.MainLights and 1 or self.SF46.Value > 0.5 and 0.5 or 0 + --self:SetLightPower(11,self.BUV.Power and mul > 0, mul) + --self:SetLightPower(12,self.BUV.Power and mul > 0, mul) + 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 = (24000+3000*(A < 0 and 1 or 0))--*add--35300+10000*(A < 0 and 1 or 0) + self.FrontBogey.Reversed = self.KMR2.Value > 0 + self.FrontBogey.DisableSound = 0 + self.RearBogey.MotorForce = (24000+3000*(A < 0 and 1 or 0))--*add--+5000--35300 + self.RearBogey.Reversed = self.KMR1.Value > 0 + self.RearBogey.DisableSound = 0 + + -- 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) + + self.FrontBogey.PneumaticBrakeForce = (50000.0--[[ +5000+10000--]] ) --40000 + self.FrontBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + self.FrontBogey.ParkingBrakePressure = math.max(0,(3-self.Pneumatic.ParkingBrakePressure)/3)/2 + self.FrontBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + self.FrontBogey.DisableContacts = self.BUV.Pant + self.RearBogey.PneumaticBrakeForce = (50000.0--[[ +5000+10000--]] ) --40000 + self.RearBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + self.RearBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + self.RearBogey.ParkingBrakePressure = math.max(0,(3-self.Pneumatic.ParkingBrakePressure)/3)/2 + self.RearBogey.DisableContacts = self.BUV.Pant + end + return retVal +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 + +function ENT:OnButtonPress(button,ply) + if button == "FrontDoor" and (self.FrontDoor or not self.BUV.BlockTorec) then self.FrontDoor = not self.FrontDoor end + if button == "RearDoor" and (self.RearDoor or not self.BUV.BlockTorec) then self.RearDoor = not self.RearDoor end +end diff --git a/lua/entities/gmod_subway_81-721/shared.lua b/lua/entities/gmod_subway_81-721/shared.lua new file mode 100644 index 0000000..0226522 --- /dev/null +++ b/lua/entities/gmod_subway_81-721/shared.lua @@ -0,0 +1,166 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" +ENT.SkinsType = "81-720" +ENT.Model = "models/metrostroi_train/81-720/81-721.mdl" + +ENT.Spawnable = true +ENT.AdminSpawnable = true + +function ENT:PassengerCapacity() + return 300 +end + +function ENT:GetStandingArea() + return Vector(-450,-30,-60),Vector(380,30,-60) +end +local function GetDoorPosition(i,k) + return Vector(377.0 - 36.0 + 1*(k) - 230*i,-64*(1-2*k),-10) +end + +-- 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["tisu"] = {"subway_trains/720/tisu.wav",loop = true} + self.SoundPositions["tisu"] = {400,1e9,Vector(0,0,-448),0.11} --FIXME: Pos + self.SoundNames["tisu2"] = {"subway_trains/720/tisu4.wav",loop = true} + self.SoundPositions["tisu2"] = {50,1e9,Vector(439,13,-40),0.15} --FIXME: Pos + self.SoundNames["tisu3"] = {"subway_trains/720/tisu3.wav",loop = true} + self.SoundPositions["tisu3"] = {400,1e9,Vector(0,0,-448),0.11} --FIXME: Pos + self.SoundNames["bbe"] = {"subway_trains/720/bbe.wav",loop = true} + self.SoundPositions["bbe"] = {400,1e9,Vector(0,0,-448),0.016*0.5} --FIXME: Pos + for i=1,7 do + self.SoundNames["vent"..i] = {loop=true,"subway_trains/720/vent_mix.wav"} + self.SoundPositions["vent"..i] = {100,1e9,Vector(-413+(i-1)*117,0,30),0.5} + end + + self.SoundNames["compressor"] = {loop=2,"subway_trains/720/compressor/compressor720_start.wav","subway_trains/720/compressor/compressor720_loop.wav","subway_trains/720/compressor/compressor720_stop.wav"} + self.SoundPositions["compressor"] = {485,1e9,Vector(-118,-40,-66),0.35} + self.SoundNames["compressor_pn"] = "subway_trains/722/compressor_pssh.mp3" + self.SoundPositions["compressor_pn"] = {485,1e9,Vector(-118,-40,-66),0.45} --FIXME: Pos + + self.SoundNames["release"] = {loop=true,"subway_trains/720/pneumo_release.wav"} + --self.SoundNames["release"] = {loop=true,"subway_trains/common/pneumatic/release_2.wav"} + self.SoundPositions["release"] = {485,1e9,Vector(-183,0,-70),0.55} + self.SoundNames["parking_brake"] = {loop=true,"subway_trains/common/pneumatic/autostop_loop.wav"} + self.SoundPositions["parking_brake"] = {400,1e9,Vector(-183,0,-70),0.95} + self.SoundNames["disconnect_valve"] = "subway_trains/common/switches/pneumo_disconnect_switch.mp3" + + self.SoundNames["front_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["front_isolation"] = {300,1e9,Vector(443, 0,-63),1} + self.SoundNames["rear_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["rear_isolation"] = {300,1e9,Vector(-456, 0,-63),1} + + self.SoundNames["k2_on"] = "subway_trains/717/pneumo/lk2_on.mp3" + self.SoundNames["k2_off"] = "subway_trains/717/pneumo/lk2_off.mp3" + self.SoundNames["k1_on"] = "subway_trains/717/pneumo/lk1_on.mp3" + self.SoundNames["k3_on"] = self.SoundNames["k2_on"] + self.SoundNames["kmr1_on"] = self.SoundNames["k1_on"] + self.SoundNames["kmr2_on"] = self.SoundNames["k1_on"] + self.SoundNames["k1_off"] = self.SoundNames["k2_off"] + self.SoundNames["k3_off"] = self.SoundNames["k2_off"] + self.SoundNames["kmr1_off"] = self.SoundNames["k2_off"] + self.SoundNames["kmr2_off"] = self.SoundNames["k2_off"] + --self.SoundNames["ksh1_off"] = "subway_trains/717/pneumo/ksh1.mp3" + self.SoundPositions["k2_on"] = {440,1e9,Vector(-60,-40,-66),0.45} + self.SoundPositions["k1_on"] = {440,1e9,Vector(-60,-40,-66),0.6} + self.SoundPositions["k2_off"] = self.SoundPositions["k2_on"] + self.SoundPositions["k3_off"] = self.SoundPositions["k2_on"] + self.SoundPositions["k3_on"] = self.SoundPositions["k2_on"] + self.SoundPositions["k3_off"] = self.SoundPositions["k2_on"] + self.SoundPositions["kmr1_on"] = self.SoundPositions["k2_on"] + self.SoundPositions["kmr1_off"] = self.SoundPositions["k2_on"] + self.SoundPositions["kmr2_on"] = self.SoundPositions["k2_on"] + self.SoundPositions["kmr2_off"] = self.SoundPositions["k2_on"] + + self.SoundNames["rolling_10"] = {loop=true,"subway_trains/720/rolling/rolling_10.wav"} + self.SoundNames["rolling_30"] = {loop=true,"subway_trains/720/rolling/rolling_30.wav"} + self.SoundNames["rolling_55"] = {loop=true,"subway_trains/720/rolling/rolling_55.wav"} + self.SoundNames["rolling_75"] = {loop=true,"subway_trains/720/rolling/rolling_75.wav"} + self.SoundPositions["rolling_10"] = {485,1e9,Vector(0,0,0),0.33} + self.SoundPositions["rolling_30"] = {485,1e9,Vector(0,0,0),0.7} + self.SoundPositions["rolling_55"] = {485,1e9,Vector(0,0,0),0.85} + self.SoundPositions["rolling_75"] = {485,1e9,Vector(0,0,0),0.90} + 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*0.4} + self.SoundPositions["rolling_medium1"] = {480,1e12,Vector(0,0,0),0.90*0.4} + self.SoundPositions["rolling_medium2"] = {480,1e12,Vector(0,0,0),0.90*0.4} + self.SoundPositions["rolling_high2"] = {480,1e12,Vector(0,0,0),1.00*0.4} + + self.SoundNames["gv_f"] = {"subway_trains/717/kv70/reverser_0-b_1.mp3","subway_trains/717/kv70/reverser_0-b_2.mp3"} + self.SoundNames["gv_b"] = {"subway_trains/717/kv70/reverser_b-0_1.mp3","subway_trains/717/kv70/reverser_b-0_2.mp3"} + self.SoundPositions["gv_f"] = {80,1e9,Vector(126.4,50,-60-23.5),0.8} + self.SoundPositions["gv_b"] = {80,1e9,Vector(126.4,50,-60-23.5),0.8} + self.SoundNames["pak_on"] = "subway_trains/717/switches/rc_on.mp3" + self.SoundNames["pak_off"] = "subway_trains/717/switches/rc_off.mp3" + + self.SoundNames["door_cab_open"] = "subway_trains/common/door/cab/door_open.mp3" + self.SoundNames["door_cab_close"] = "subway_trains/common/door/cab/door_close.mp3" + self.SoundNames["door_cab_roll"] = {"subway_trains/720/door/cabdoor_roll1.mp3","subway_trains/720/door/cabdoor_roll2.mp3","subway_trains/720/door/cabdoor_roll3.mp3","subway_trains/720/door/cabdoor_roll4.mp3"} + for i=0,3 do + for k=0,1 do + self.SoundNames["door"..i.."x"..k.."r"] = {"subway_trains/720/door/door_loop.wav",loop=true} + self.SoundPositions["door"..i.."x"..k.."r"] = {100,1e9,GetDoorPosition(i,k),0.07} + self.SoundNames["door"..i.."x"..k.."o"] = {"subway_trains/720/door/door_open_end4.mp3","subway_trains/720/door/door_open_end3.mp3"} + self.SoundPositions["door"..i.."x"..k.."o"] = {150,1e9,GetDoorPosition(i,k),0.55} + self.SoundNames["door"..i.."x"..k.."c"] = {"subway_trains/720/door/door_close_end4.mp3","subway_trains/720/door/door_close_end5.mp3","subway_trains/720/door/door_close_end3.mp3"} + self.SoundPositions["door"..i.."x"..k.."c"] = {250,1e9,GetDoorPosition(i,k),0.55} + end + end + + self.SoundNames["batt_on"] = "subway_trains/720/batt_on.mp3" + self.SoundPositions["batt_on"] = {400,1e9,Vector(126.4,50,-60-23.5),0.3} +end + +function ENT:InitializeSystems() + self:LoadSystem("TR","TR_3B") + self:LoadSystem("Engines","DK_120AM") + self:LoadSystem("Electric","81_720_Electric") + self:LoadSystem("BPTI","81_720_BPTI") + + self:LoadSystem("BUV","81_720_BUV") + + self:LoadSystem("Pneumatic","81_720_Pneumatic") + + self:LoadSystem("Panel","81_721_Panel") + + self:LoadSystem("Tickers","81_720_Ticker") + self:LoadSystem("PassSchemes","81_720_PassScheme") + + self:LoadSystem("IGLA_PCBK","81_720_IGLA_PCBK") +end + +ENT.AnnouncerPositions = {} +for i=1,3 do + table.insert(ENT.AnnouncerPositions,{Vector(188-(i-1)*230+38,47*(i%2 > 0 and -1 or 1) ,44),200,0.3}) +end +--------------------------------------------------- +-- Defined train information +-- Types of wagon(for wagon limit system): +-- 0 = Head or intherim +-- 1 = Only head +-- 2 = Only intherim +--------------------------------------------------- +ENT.SubwayTrain = { + Type = "81-720", + Name = "81-721", + WagType = 2, + Manufacturer = "MVM", + EKKType = 720 +} +ENT.NumberRanges = {{0100,0300}} diff --git a/lua/entities/gmod_subway_81-722/cl_init.lua b/lua/entities/gmod_subway_81-722/cl_init.lua new file mode 100644 index 0000000..ca4cb61 --- /dev/null +++ b/lua/entities/gmod_subway_81-722/cl_init.lua @@ -0,0 +1,1752 @@ +-------------------------------------------------------------------------------- +-- 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, + }}, + {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, + 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, + }}, + } +} + +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 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 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, + }}, + } +} + +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 = "R_UPOToggle", x=0+15.15*9, y=40+167*0, w=15,h=45, tooltip="SF: УПО1"}, + {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, + 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, + 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} + }}, + + } +} + +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.5,-12), + ang = Angle(0,-90,66), + width = 125, + height = 40, + scale = 0.0625, + buttons = { + {ID="!LRD",x=3, y=5,w=15,h=10, tooltip="ЛРД: Лампа Ñ€Ð°Ð·Ñ€ÐµÑˆÐ°ÑŽÑ‰Ð°Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ðµ(разрешение Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´ 0)"}, + {ID="!LPT",x=3+21*1, y=5,w=15,h=10, tooltip="ЛПТ: Лампа включение пневмотормоза"}, + {ID="!RS",x=3+21*2, y=5,w=15,h=10, tooltip="Р/С: Лампа аварийного Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ñ Ñ€Ð°Ð´Ð¸Ð¾Ñтанции"}, + {ID="!AVS",x=3+21*3, y=5,w=15,h=10, tooltip="ÐВС Лампа низкого Ð´Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¢Ðœ"}, + {ID="!LSD",x=3+21*4, y=5,w=15,h=10, tooltip="ЛСД: Лампа Ñигнализации Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹"}, + {ID="!RU",x=3+21*5, y=5,w=15,h=10, tooltip="РУ: Лампа Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð ÐµÐ»Ðµ УправлениÑ"}, + + {ID="!04",x=3, y=23,w=15,h=10, tooltip="ÐЧ: Лампа отÑутÑÑ‚Ð²Ð¸Ñ Ñ‡Ð°Ñтоты (0км\\ч)"}, + {ID="!00",x=3+21*1, y=23,w=15,h=10, tooltip="0: Лампа Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð² 0км\\ч"}, + {ID="!40",x=3+21*2, y=23,w=15,h=10, tooltip="40: Лампа Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð² 40км\\ч"}, + {ID="!60",x=3+21*3, y=23,w=15,h=10, tooltip="60 Лампа Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð² 60км\\ч"}, + {ID="!70",x=3+21*4, y=23,w=15,h=10, tooltip="70: Лампа Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð² 70км\\ч"}, + {ID="!80",x=3+21*5, y=23,w=15,h=10, tooltip="80: Лампа Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð² 80км\\ч"}, + } +} + +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, +} + + +local models = { + "models/metrostroi_train/81-722/lamp_lrd.mdl", + "models/metrostroi_train/81-722/lamp_lpt.mdl", + "models/metrostroi_train/81-722/lamp_rc.mdl", + "models/metrostroi_train/81-722/lamp_abc.mdl", + "models/metrostroi_train/81-722/lamp_lsd.mdl", + "models/metrostroi_train/81-722/lamp_ru.mdl", + + "models/metrostroi_train/81-722/lamp_nch.mdl", + "models/metrostroi_train/81-722/lamp_0.mdl", + "models/metrostroi_train/81-722/lamp_40.mdl", + "models/metrostroi_train/81-722/lamp_60.mdl", + "models/metrostroi_train/81-722/lamp_70.mdl", + "models/metrostroi_train/81-722/lamp_80.mdl", +} + +for i,model in pairs(models) do + if not model then continue end + if i>6 then + i=i-6 + ENT.ClientProps[model:sub(32,-5)] = { + model=model, + pos = Vector(474.85,19.257429+2.6-(i-1)*1.3,-13.41), + ang = Angle(-67.4,0.000000,0.000000), + hideseat = 0.2, + } + else + ENT.ClientProps[model:sub(32,-5)] = { + model=model, + pos = Vector(475.29,19.257429+2.6-(i-1)*1.3,-12.41 ), + ang = Angle(-67.4,0.000000,0.000000), + hideseat = 0.2, + } + end +end + + +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) + }, + }}, + } +} + +ENT.ButtonMap["Sarmat"] = { + pos = Vector(470.85,41.65,-6.2), + ang = Angle(0.2,-64,67), + width = 1024, + height = 640, + scale = 0.02*0.567, + sensor = true, + system = "SarmatUPO", + 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 = 10, + 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="Ð¢Ñ€ÐµÑ‚ÑŒÑ Ñ†Ð¸Ñ„Ñ€Ð°"}, + } +} +ENT.ButtonMap["RouteNumber"] = { + pos = Vector(485.4,32.6,-4.55), + ang = Angle(0,90+5,88), + width = (7*8)*3+1*8*2, + height = 14*8, + scale = 0.23/4/(14/16), + + hide=2, +} +ENT.ButtonMap["LastStation"] = { + pos = Vector(473.8,-12.5,43.5), + ang = Angle(0,90,90), + width = 512, + height = 64, + scale = 0.1, + + hide=2, +} +ENT.ButtonMap["Tickers"] = { + pos = Vector(-455.4,-11.1,52.8), + ang = Angle(0,90,90), + width = 512, + height = 64, + scale = 0.094, + 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 = "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}, + [3] = { "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}, + + --SOSD + --[2] = { "headlight", Vector( 430, -60, -47), Angle(45,-90,0), Color(255,255,255), brightness = 0.5, distance = 400 , fov=120, shadows = 1 }, + [2] = { "headlight", Vector( 425,-65,-65), Angle(25,-90,0),Color(255,255,255),brightness = 0.5,distance = 400 ,fov=120,shadows = 1 }, + [11] = { "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}, + [12] = { "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}, + [13] = { "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}, + [14] = { "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}, + --[2] = { "dynamiclight", Vector( 300, 0, 40), Angle(0,0,0), Color(255,255,255), brightness = 4, distance = 550 }, +} +function ENT:Initialize() + self.BaseClass.Initialize(self) + self.Vityaz = self:CreateRT("721Vityaz",1024,1024) + self.PAM = self:CreateRT("717PAM",1024,512) + self.Tickers = self:CreateRT("721Tickers",1024,128) + self.Sarmat = self:CreateRT("721Sarmat",1024,1024) + self.RouteNumber = self:CreateRT("721RouteNumber",256,128) + self.LastStation = self:CreateRT("721LastStation",512,64) + 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 + self.BPSNBuzzVolume = 0 + +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,i0,self:GetPackedRatio("Headlight")) + self:SetLightPower(3,self:GetPackedBool("RedLights")) + if IsValid(self.GlowingLights[1]) then + if self:GetPackedRatio("Headlights") < 1 and self.GlowingLights[1]:GetFarZ() ~= 7000 then + self.GlowingLights[1]:SetFarZ(7000) + end + if self:GetPackedRatio("Headlights") == 1 and self.GlowingLights[1]:GetFarZ() ~= 8192 then + self.GlowingLights[1]:SetFarZ(8192) + end + end + self:SetLightPower(2,self:GetPackedBool("SOSD")) + self:SetLightPower(11,self:GetPackedBool("PanelLighting")) + self:SetLightPower(12,self:GetPackedBool("PanelLighting")) + self:SetLightPower(13,self:GetPackedBool("PanelLighting")) + self:SetLightPower(14,self:GetPackedBool("PanelLighting")) + --self:ShowHideSmooth("led",self:Animate("PanelLighting",self:GetPackedBool("PanelLighting") and 1 or 0,0,1,16,false)) + self:ShowHide("led",self:GetPackedBool("PanelLighting")) + --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) + self:ShowHide("HeadLights",self:GetPackedBool("Headlights2")) + self:ShowHide("HeadLightsH",self:GetPackedBool("Headlights1")) + + self:ShowHide("RedLights",self:GetPackedBool("RedLights")) + + self:ShowHide("bortlamp_pneumo",self:GetPackedBool("BortPneumo")) + self:ShowHide("bortlamp_lsd",self:GetPackedBool("BortLSD")) + self:ShowHide("bortlamp_bv",self:GetPackedBool("BortBV")) + + self:ShowHideSmooth("lamps_salon",self:GetPackedRatio("SalonLighting")) + + self:ShowHide("lamps_cab_e",self:GetPackedBool("CabinEnabledEmer")) + self:ShowHide("lamps_cab_f",self:GetPackedBool("CabinEnabledFull")) + self:ShowHide("doorl_l",self:GetPackedBool("DoorAlarmL")) + self:ShowHide("doorl_r",self:GetPackedBool("DoorAlarmR")) + --Радио + self:ShowHide("rvs",self:GetPackedBool("RadioRVS")) + --rvs + self:ShowHideSmooth("lamp_lrd",self:Animate("lamplrd",self:GetPackedBool("LampLRD") and 1 or 0,0,1,10,false)) + self:ShowHideSmooth("lamp_lpt",self:Animate("lamplpt",self:GetPackedBool("LampLPT") and 1 or 0,0,1,10,false)) + self:ShowHideSmooth("lamp_rc",self:Animate("lamprc",self:GetPackedBool("LampRC") and 1 or 0,0,1,10,false)) + self:ShowHideSmooth("lamp_abc",self:Animate("lampavs",self:GetPackedBool("LampAVS") and 1 or 0,0,1,10,false)) + self:ShowHideSmooth("lamp_lsd",self:Animate("lamplsd",self:GetPackedBool("LampSD") and 1 or 0,0,1,10,false)) + self:ShowHideSmooth("lamp_ru",self:Animate("lampru",self:GetPackedBool("LampRU") and 1 or 0,0,1,10,false)) + self:ShowHideSmooth("lamp_nch",self:Animate("lampnch",self:GetPackedBool("Lamp04") and 1 or 0,0,1,10,false)) + self:ShowHideSmooth("lamp_0",self:Animate("lamp0",self:GetPackedBool("Lamp0") and 1 or 0,0,1,10,false)) + self:ShowHideSmooth("lamp_40",self:Animate("lamp40",self:GetPackedBool("Lamp40") and 1 or 0,0,1,10,false)) + self:ShowHideSmooth("lamp_60",self:Animate("lamp60",self:GetPackedBool("Lamp60") and 1 or 0,0,1,10,false)) + self:ShowHideSmooth("lamp_70",self:Animate("lamp70",self:GetPackedBool("Lamp70") and 1 or 0,0,1,10,false)) + self:ShowHideSmooth("lamp_80",self:Animate("lamp80",self:GetPackedBool("Lamp80") and 1 or 0,0,1,10,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) + + local led_back = self:GetPackedBool("PassSchemesLEDO",false) + if self:GetPackedBool("SarmatInvert",false) then led_back = not led_back end + local sleft,sright = self:GetPackedBool("SarmatLeft"),self:GetPackedBool("SarmatRight") + for i=1,4 do + self:ShowHide("led_l_f"..i,not led_back and sleft) + self:ShowHide("led_l_b"..i,led_back and sleft) + self:ShowHide("led_r_f"..i,not led_back and sright) + self:ShowHide("led_r_b"..i,led_back and sright) + end + local scurr = self:GetNW2Int("PassSchemesLED") + local snext = self:GetNW2Int("PassSchemesLEDN") + local led = scurr + if snext ~= 0 and CurTime()%2 > 1 then led = led + snext end + if scurr < 0 then led = math.floor(CurTime()%16.5*2) end + if led_back then + if sleft then + for i=1,4 do if IsValid(self.ClientEnts["led_l_b"..i]) then self.ClientEnts["led_l_b"..i]:SetSkin(math.Clamp(led-((i-1)*8),0,8)) end end + end + if sright then + for i=1,4 do if IsValid(self.ClientEnts["led_r_b"..i]) then self.ClientEnts["led_r_b"..i]:SetSkin(math.Clamp(led-((i-1)*8),0,8)) end end + end + else + if sleft then + for i=1,4 do if IsValid(self.ClientEnts["led_l_f"..i]) then self.ClientEnts["led_l_f"..i]:SetSkin(math.Clamp(led-((i-1)*8),0,8)) end end + end + if sright then + for i=1,4 do if IsValid(self.ClientEnts["led_r_f"..i]) then self.ClientEnts["led_r_f"..i]:SetSkin(math.Clamp(led-((i-1)*8),0,8)) end end + end + end + + local rnwork = self:GetNW2Bool("RouteNumberWork") + local rn = self:GetNW2Int("RouteNumberSet") + for i=1,3 do + self:ShowHide("route_number"..i,rnwork) + if rnwork and IsValid(self.ClientEnts["route_number"..i]) then + local number = math.floor(rn/10^(3-i)) % 10 + --local d1 = math.floor(num) % 10 + --local d2 = math.floor(num / 10) % 10 + --local d3 = math.floor(num / 100) % 10 + self.ClientEnts["route_number"..i]:SetSkin(number) + end + end + --self:Animate("brake_cylinder", 0/6, 0.016, 0.78, 2,false) + --self:Animate("brake_line", 0/16, 0.037, 0.795, 2,false) + --self:Animate("train_line", 0/16, 0.037, 0.795, 2,false) + -- + 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*(-self:GetPackedRatio("BrakeCylinderPressure_dPdT",0)-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:GetPackedBool("AnnPlayUPO") + + local noise = self:GetNW2Int("AnnouncerNoise", -1) + local volume = self:GetNW2Float("UPOVolume",1) + local noisevolume = self:GetNW2Float("UPONoiseVolume",1) + local buzzvolume = volume + if self.Sounds["announcer1"] and IsValid(self.Sounds["announcer1"]) then buzzvolume = UPO and (1-(self.Sounds["announcer1"]:GetLevel())*math.Rand(0.9,3))*buzzvolume*2 or 0 end + if self.BPSNBuzzVolume > buzzvolume then + self.BPSNBuzzVolume = math.Clamp(self.BPSNBuzzVolume + 8*(buzzvolume-self.BPSNBuzzVolume)*dT,0.1,1) + else + self.BPSNBuzzVolume = math.Clamp(self.BPSNBuzzVolume + 0.4*(buzzvolume-self.BPSNBuzzVolume)*dT,0.1,1) + end + + for k,v in ipairs(self.AnnouncerPositions) do + self:SetSoundState("announcer_noiseW"..k,UPO and noisevolume*volume*0.7 or 0,1) + for i=1,3 do + self:SetSoundState(Format("announcer_noise%d_%d",i,k),(UPO and i==noise) and volume*self.BPSNBuzzVolume*self:GetNW2Float("UPOBuzzVolume",1)*0.7 or 0,1) + end + + if IsValid(self.Sounds["announcer"..k]) then self.Sounds["announcer"..k]:SetVolume(work and v[3]*(UPO and volume or 1) or 0) end + end +end + +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 + +local CamRTM = Material( "pp/rt" ) +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.PAM) + self:DrawOnPanel("PAMScreen",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(512,256,1024,512,0) + end)--]] + self.RTMaterial:SetTexture("$basetexture", self.Sarmat) + self:DrawOnPanel("Sarmat",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(512,512,1024,1024,0) + + --surface.SetMaterial(self.RTMaterial2) + --surface.SetDrawColor(255,255,255) + --self.RTMaterial2:SetTexture("$basetexture", self.SarmatUPO.Cam1) + --surface.DrawTexturedRectRotated(384,128,256,256,0) + --self.RTMaterial2:SetTexture("$basetexture", self.SarmatUPO.Cam2) + --surface.DrawTexturedRectRotated(128,128,256,256,0) + end) + self.RTMaterial:SetTexture("$basetexture", self.LastStation) + self:DrawOnPanel("LastStation",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(256,32,512,64,0) + end) + self.RTMaterial:SetTexture("$basetexture", self.Tickers) + self:DrawOnPanel("Tickers",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(256,32,512,64,0) + end) + self.RTMaterial:SetTexture("$basetexture", self.RouteNumber) + self:DrawOnPanel("RouteNumber",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() diff --git a/lua/entities/gmod_subway_81-722/init.lua b/lua/entities/gmod_subway_81-722/init.lua new file mode 100644 index 0000000..3622863 --- /dev/null +++ b/lua/entities/gmod_subway_81-722/init.lua @@ -0,0 +1,489 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +ENT.BogeyDistance = 650 -- Needed for gm trainspawner +ENT.SyncTable = { + "SF1","SF2","SF3","SF4","SF5","SF6","SF7","SF8","SF9","R_UPO","SF01","SF10","SF11","SF12","SF13","SF02", + "SF14","SF15","SF16","SF17","SF18","SF19","SF20","SF21","SF22","SF23","SF24","SF25","SF26","SF27","SF03","SF04", + + "SF31","SF32","SF33","SF34","SF35","SF36","SF37","SF38","SF41","SF42","SF43","SF44","SF45","SF46","SF47","SF48","SF49","SF51","SF52","SF53","SF54","SF55","SF56","SF57","SF58","SF59", + + "PSNToggle","BattOn","BattOff","TorecDoorUnlock", + + "PassLight","VKF","ParkingBrake","VRD","SOSDEnable","VAD","VAH","EmergencyRadioPower","RCARS", + + "MirrorHeating","DoorLeft2","DoorBack","EmergencyDrive","Microphone","DoorLeft1", + + "ARS","ALS","GlassWasher","EmergencyBrakeTPlus","EmergencyBrakeTPlusK","EmergencyBrake","Vigilance","DoorSelect","DoorRight", + + "PanelLight", + + "Ring", + + "K9", "K29", + + "EmergencyBrakeValve","UAVA", + + "FrontBrakeLineIsolation","FrontTrainLineIsolation", + "RearBrakeLineIsolation","RearTrainLineIsolation", + "PB", + +} +-------------------------------------------------------------------------------- +function ENT:Initialize() + self.Plombs = { + EmergencyBrakeTPlusK = true, + VRU=true, + VAH = true, + VAD=true, + EmergencyRadioPower = true, + BARSMode = true, + PantSC = true, + RCARS = true, + K9 = true, + UAVA = true, + Init=true, + } + -- Set model and initialize + self:SetModel("models/metrostroi_train/81-722/81-722.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create seat entities + self.DriverSeat = self:CreateSeat("driver",Vector(450-2,11,-35+2)) + self.InstructorsSeat = self:CreateSeat("instructor",Vector(430,35,-30)) + self.InstructorsSeat2 = self:CreateSeat("instructor",Vector(430,-20,-30)) + + -- Hide seats + self.DriverSeat:SetRenderMode(RENDERMODE_TRANSALPHA) + self.DriverSeat:SetColor(Color(0,0,0,0)) + self.InstructorsSeat:SetRenderMode(RENDERMODE_TRANSALPHA) + self.InstructorsSeat:SetColor(Color(0,0,0,0)) + self.InstructorsSeat2:SetRenderMode(RENDERMODE_TRANSALPHA) + self.InstructorsSeat2:SetColor(Color(0,0,0,0)) + + -- Create bogeys + self.FrontBogey = self:CreateBogey(Vector( 322,0,-90),Angle(0,180,0),true,"722") + self.RearBogey = self:CreateBogey(Vector(-333,0,-90),Angle(0,0,0),false,"722") + self.FrontBogey:SetNWBool("Async",true) + self.RearBogey:SetNWBool("Async",true) + self.FrontBogey:SetNWFloat("SqualPitch",0.75) + self.RearBogey:SetNWFloat("SqualPitch",0.75) + self.FrontBogey:SetNWBool("DisableEngines",true) + self.RearBogey:SetNWBool("DisableEngines",true) + if Metrostroi.BogeyOldMap then + self.FrontCouple = self:CreateCouple(Vector( 448-6,0,-77),Angle(0,0,0),true,"722") + self.RearCouple = self:CreateCouple(Vector(-419.5-7.5+6,0,-77),Angle(0,180,0),false,"717") + else + self.FrontCouple = self:CreateCouple(Vector( 454 -8,0,-79),Angle(0,0,0),true,"722") + self.RearCouple = self:CreateCouple(Vector(-419-6.8+8,0,-79),Angle(0,180,0),false,"717") + end + self.FrontBogey.DisableSound = 1 + self.RearBogey.DisableSound = 1 + self.FrontCouple.EKKDisconnected = true + + -- Initialize key mapping + self.KeyMap = { + [KEY_W] = "PanelKVUp", + [KEY_S] = "PanelKVDown", + [KEY_1] = "PanelKV1", + [KEY_2] = "PanelKV2", + [KEY_3] = "PanelKV2", + [KEY_4] = "PanelKV4", + [KEY_5] = "PanelKV5", + [KEY_6] = "PanelKV6", + [KEY_7] = "PanelKV7", + [KEY_8] = "EmergencyDriveSet", + + [KEY_0] = "KRO+", + [KEY_9] = "KRO-", + [KEY_V] = "DoorCloseA", + [KEY_A] = "DoorLeft", + [KEY_D] = "DoorRight", + [KEY_SPACE] = "PBSet", + [KEY_BACKSPACE] = {"EmergencyBrakeToggle",helper="EmergencyBrakeValveToggle"}, + [KEY_PAD_ENTER] = "KVWrenchKV", + [KEY_LSHIFT] = { + [KEY_2] = "RingSet", + [KEY_S] = "PanelKV7", + [KEY_V] = "DoorCloseM", + [KEY_SPACE] = "VigilanceSet", + + [KEY_PAD_ENTER] = "KVWrenchNone", + }, + [KEY_LALT] = { + [KEY_UP] = "SarmatUpSet", + [KEY_DOWN] = "SarmatDownSet", + [KEY_RIGHT] = "SarmatEnterSet", + [KEY_LEFT] = "SarmatEscSet", + [KEY_PAD_1] = "SarmatF1Set", + [KEY_PAD_2] = "SarmatF2Set", + [KEY_PAD_3] = "SarmatF3Set", + [KEY_PAD_4] = "SarmatF4Set", + }, + + [KEY_F] = "PneumaticBrakeUp", + [KEY_R] = "PneumaticBrakeDown", + [KEY_PAD_1] = "PneumaticBrakeSet1", + [KEY_PAD_2] = "PneumaticBrakeSet2", + [KEY_PAD_3] = "PneumaticBrakeSet3", + [KEY_PAD_4] = "PneumaticBrakeSet4", + [KEY_PAD_5] = "PneumaticBrakeSet5", + [KEY_PAD_6] = "PneumaticBrakeSet6", + [KEY_PAD_MULTIPLY] = "EmergencyDriveSet", + + [KEY_L] = "HornEngage", + } + self.TrainWireInverts = { [8]=true } + -- Cross connections in train wires + self.TrainWireCrossConnections = { + [4] = 3, -- Orientation F<->B + [13] = 12, -- Reverser F<->B + [38] = 37, -- Doors L<->R + } + + self.InteractionZones = { + { + ID = "RearTrainLineIsolationToggle", + Pos = Vector(-469.8, -34, -65), Radius = 8, + }, + { + ID = "RearBrakeLineIsolationToggle", + Pos = Vector(-469.8, 35, -65), Radius = 8, + }, + { + ID = "RearDoor", + Pos = Vector(-464.8, -38, 0), Radius = 20, + }, + { + ID = "PassengerDoor", + Pos = Vector(374, -7, 0), Radius = 13, + }, + { + ID = "CabinDoorLeft", + Pos = Vector(400, 62, -7), Radius = 20, + }, + { + ID = "CabinDoorLeft", + Pos = Vector(400, 62, -30), Radius = 20, + }, + { + ID = "CabinDoorRight", + Pos = Vector(400, -62, -7), Radius = 20, + }, + { + ID = "CabinDoorRight", + Pos = Vector(400, -62, -30), Radius = 20, + }, + } + + self.Lights = { + [1] = { "light", Vector(493 , -60, -36), Angle(0,0,0), Color(200,255,255), brightness = 0.5, scale = 2.5, texture = "sprites/light_glow02.vmt" }, + [2] = { "light", Vector(493 , 62, -36), Angle(0,0,0), Color(200,255,255), brightness = 0.5, scale = 2.5, texture = "sprites/light_glow02.vmt" }, + [3] = { "light", Vector(490, -65, 15), Angle(0,0,0), Color(255,50,50), brightness = 0.2, scale = 4, texture = "sprites/light_glow02.vmt" }, + [4] = { "light", Vector(489, 60, 15), Angle(0,0,0), Color(255,50,50), brightness = 0.2, scale = 4, texture = "sprites/light_glow02.vmt" }, + [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}, + + [15] = { "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" }, + [16] = { "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" }, + [17] = { "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" }, + [18] = { "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" }, + [19] = { "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" }, + [20] = { "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" }, + + } + + self.PassengerDoor = false + self.CabinDoorLeft = false + self.CabinDoorRight = false + self.RearDoor = false + + self:SetNW2Float("UPONoiseVolume",math.Rand(0,0.3)) + self:SetNW2Float("UPOVolume",math.Rand(0.8,1)) + + self.Scheme = 1 +end + +function ENT:NonSupportTrigger() + self.VAH:TriggerInput("Set",1) + self.RCARS:TriggerInput("Set",0) + self.K9:TriggerInput("Set",0) + self.Plombs.VAH = nil + self.Plombs.RCARS = nil + self.Plombs.K9 = nil +end + +function ENT:OnUPOArrived() + return self.SarmatUPO:TriggerInput("CheckUPO") +end + +-------------------------------------------------------------------------------- +function ENT:Think() + local retVal = self.BaseClass.Think(self) + local power = self.BUKV.Power > 0 + + --[[ + if self:GetWagonNumber() == 22010 or self:EntIndex()==1560 then --DEBUG + local accel = 0 + for i=1,#self.WagonList do + accel=accel+self.WagonList[i].Acceleration + end + local drivers = {self.DriverSeat,self.InstructorsSeat,self.ExtraSeat1,self.ExtraSeat2} + if math.abs(accel) > 0.1 then + for k,v in pairs(drivers) do + if IsValid(v) and IsValid(v:GetDriver()) then + v:GetDriver():ChatPrint(Format("v=%.2f I=%.2f RK=%02d a=%.2f",self.Speed,0 or (self.Electric.I13+self.Electric.I24)/2,0 or self.RheostatController.SelectedPosition or 0,accel/#self.WagonList))--(accel/#self.WagonList))) + end + end + end + end + --[[ + self.TestA = self.TestA or nil + self.TestV = self.TestV or nil + local accel = self.Acceleration + + if (1 < self.Speed and self.Speed < 99) and self.Panel.TargetController < 0 and not self.TestA then + self.TestA = CurTime() + self.TestV = self.Speed/3600*1000 + self.TestTyp = self.Speed > 55 and 2 or 1 + self.TestS = 0 + end + if self.Panel.TargetController >= 0 and self.TestA then + self.TestA = nil + self.TestV = nil + self.TestS = nil + end + if self.TestS then self.TestS=self.TestS+self.Speed*self.SpeedSign/3600*1000*self.DeltaTime end + if (self.Speed<2 and self.TestTyp ==2 or self.Speed<2 and self.TestTyp ==1) and self.TestA then + local curSpeed = self.Speed/3600*1000 + local a = (curSpeed-self.TestV)/(CurTime()-self.TestA) + RunConsoleCommand("say",Format("[%05d]V0= %.1f V1=%.1f t=%.2f a=%.2f s=%.1f",self:GetWagonNumber(),self.TestV*3600/1000,curSpeed*3600/1000,CurTime()-self.TestA,a,self.TestS)) + + + self.TestA = nil + self.TestV = nil + self.TestS = nil + end--]] + --self:SetPackedRatio("async1", math.min(self.Speed/7,self.AsyncInverter.State*math.Clamp(1+(self.Speed-15)/120,1,2))) + --self:SetPackedRatio("async1state", self.AsyncInverter.State) + --self:SetPackedRatio("asyncfreq", self.AsyncInverter.InverterFrequency) + --print() + if self.AsyncInverter.State==1 then + local state = math.abs(self.AsyncInverter.InverterFrequency/13)--(10+8*math.Clamp((self.AsyncInverter.State-0.4)/0.4,0,1))) + self:SetPackedRatio("asynccurrent", math.Clamp(state*(state+self.AsyncInverter.State/1),0,1)) + else + local state = math.abs(self.AsyncInverter.InverterFrequency/(11+self.AsyncInverter.State*5))--(10+8*math.Clamp((self.AsyncInverter.State-0.4)/0.4,0,1))) + self:SetPackedRatio("asynccurrent", math.Clamp(state*(state+self.AsyncInverter.State/1),0,1)) + end + self:SetPackedRatio("asyncstate", math.Clamp(self.AsyncInverter.State/0.2*math.abs(self.AsyncInverter.Current)/100,0,1)) + self:SetPackedRatio("chopper", math.Clamp(self.Electric.Chopper>0 and self.Electric.Iexit/100 or 0,0,1)) + --print(self.Electric.Chopper,self.Electric.Iexit/100) + + self:SetPackedBool("BattOnL",self.Panel.BattOn) + self:SetPackedBool("BattOffL",self.Panel.BattOff) + + self:SetPackedBool("BattPressed",self.Electric.BatterySound>0) + + self:SetPackedRatio("ControllerPosition",self.Panel.Controller) + self:SetPackedRatio("ReverserPosition",self.KRO.Value/2) + self:SetPackedRatio("CompressorPosition",self.Compressor.Value) + self:SetPackedRatio("PassVent",self.PassVent.Value/4) + self:SetPackedRatio("VRU",self.VRU.Value/2) + self:SetPackedRatio("BARSMode",self.BARSMode.Value/2) + self:SetPackedRatio("PantSC",self.PantSC.Value/4) + self:SetPackedRatio("GlassCleaner",self.GlassCleaner.Value/2) + self:SetPackedRatio("Headlights",self.Headlights.Value/2) + self:SetPackedRatio("DoorClose",self.DoorClose.Value/2) + self:SetPackedRatio("CabinLight",self.CabinLight.Value/2) + self:SetPackedBool("LampLPT",self.BUKP.LPT) + self:SetPackedBool("LampRU",self.Panel.LRU > 0) + self:SetPackedBool("LampAVS",self.Panel.AVS > 0) + self:SetPackedBool("LampRC",self.Panel.RC > 0) + self:SetPackedBool("LampSD",self.Electric.LSD > 0) + + self:SetPackedBool("RadioRVS",self.Panel.VPR1>0) + self:SetPackedBool("RadioMotorola",self.Panel.VPR2>0) + + self:SetPackedBool("LampLRD",self.ALSCoil.F6 > 0) + self:SetPackedBool("Lamp04",self.ALSCoil.NoFreq > 0) + self:SetPackedBool("Lamp0",self.ALSCoil.F5 > 0) + self:SetPackedBool("Lamp40",self.ALSCoil.F4 > 0) + self:SetPackedBool("Lamp60",self.ALSCoil.F3 > 0) + self:SetPackedBool("Lamp70",self.ALSCoil.F2 > 0) + self:SetPackedBool("Lamp80",self.ALSCoil.F1 > 0) + + local cablight = self.Panel.CabLights + self:SetLightPower(10,cablight > 0,cablight) + self:SetPackedBool("CabinEnabledEmer", cablight > 0) + self:SetPackedBool("CabinEnabledFull", cablight > 0.3) + self:SetPackedBool("PanelLighting",self.Panel.PanelLights>0) + local HeadlightsPower = self.Panel.Headlights2 > 0 and 1 or self.Panel.Headlights1 > 0 and 0.5 or 0 + self:SetPackedBool("Headlights1",self.Panel.Headlights1 > 0) + self:SetPackedBool("Headlights2",self.Panel.Headlights2 > 0) + + self:SetLightPower(1,HeadlightsPower > 0,HeadlightsPower^0.5) + self:SetLightPower(2,HeadlightsPower > 0,HeadlightsPower^0.5) + self:SetPackedRatio("Headlight",HeadlightsPower) + self:SetPackedBool("RedLights",self.Panel.RedLights>0) + self:SetLightPower(3,self.Panel.RedLights>0) + self:SetLightPower(4,self.Panel.RedLights>0) + + local passlight = math.min(1,self.Panel.MainLights+self.Panel.EmergencyLights*0.3) + --self:SetLightPower(11,power and mul > 0, mul) + self:SetLightPower(11,passlight > 0, passlight) + self:SetLightPower(12,passlight > 0, passlight) + self:SetLightPower(13,passlight > 0, passlight) + self:SetPackedRatio("SalonLighting",passlight) + + self:SetPackedBool("CompressorWork",self.Pneumatic.Compressor) + + self:SetPackedBool("DoorLeftLamp",self.BUKP.DoorLeft) + self:SetPackedBool("DoorRightLamp",self.BUKP.DoorRight) + self:SetPackedBool("EmergencyBrakeTPlusL",self.Panel.EmergencyBrakeTPlusL > 0) + self:SetPackedBool("EmergencyDriveL",self.Panel.EmergencyDriveL > 0) + + --self:SetPackedRatio("BatteryVoltage",(self.BUKV.Battery and (self.BUKV.PSN and 82 or 65) or 0)/150) + self:SetPackedRatio("HighVoltage",self.TR.Main750V/1000) + self:SetPackedRatio("LV",(self.Electric.Power*(65+15*self:ReadTrainWire(33)))/150) + self:SetPackedRatio("CranePosition", self.Pneumatic.DriverValvePosition) + self:SetPackedRatio("BLPressure", self.Pneumatic.BrakeLinePressure/16.0) + self:SetPackedRatio("TLPressure", self.Pneumatic.TrainLinePressure/16.0) + self:SetPackedRatio("BCPressure", math.min(3.2,self.Pneumatic.BrakeCylinderPressure)/6.0) + + self:SetPackedBool("SOSD",self.Panel.SOSD>0) + self:SetPackedBool("SOSDLamp",self.BUKP.SOSD>0) + self.SOSD = self.Panel.SOSD>0 + + + self:SetPackedBool("BortPneumo",self.Panel.BrW>0) + self:SetPackedBool("BortLSD",self.Panel.DoorsW>0) + self:SetPackedBool("BortBV",self.Panel.GRP>0) + self:SetLightPower(15, self.Panel.DoorsW > 0.5,1) + self:SetLightPower(18, self.Panel.DoorsW > 0.5,1) + self:SetLightPower(16, self.Panel.BrW > 0.5,1) + self:SetLightPower(19, self.Panel.BrW > 0.5,1) + self:SetLightPower(17, self.Panel.GRP > 0.5,1) + self:SetLightPower(20, self.Panel.GRP > 0.5,1) + + self:SetPackedBool("RingEnabled",self.BUKP.Ring) + self:SetPackedBool("RingEnabledBARS",self.BARS.Ring>0) + + self:SetPackedBool("DoorAlarmL",self.BUKV.CloseRing) + self:SetPackedBool("DoorAlarmR",self.BUKV.CloseRing) + + self:SetNW2Int("PassSchemesLED",self.PassSchemes.PassSchemeCurr) + self:SetNW2Int("PassSchemesLEDN",self.PassSchemes.PassSchemeNext) + self:SetPackedBool("PassSchemesLEDO",self.PassSchemes.PassSchemePath) + self:SetPackedBool("SarmatLeft",self.Panel.PassSchemePowerL) + self:SetPackedBool("SarmatRight",self.Panel.PassSchemePowerR) + + self:SetPackedBool("PassengerDoor",self.PassengerDoor) + self:SetPackedBool("CabinDoorLeft",self.CabinDoorLeft) + self:SetPackedBool("CabinDoorRight",self.CabinDoorRight) + self:SetPackedBool("RearDoor",self.RearDoor) + + self:SetNW2Bool("VityazLamp", self.MFDU.State~=0) + + self:SetPackedBool("AnnPlay",self.Panel.AnnouncerPlaying > 0) + self:SetPackedBool("AnnPlayUPO",self.Announcer.AnnTable=="AnnouncementsUPO") + --print(self.Panel.AnnouncerPlaying,self.UPO.LineOut) + + self:SetPackedRatio("Speed", self.Speed) + self.AsyncInverter:TriggerInput("Speed",self.Speed) + if IsValid(self.FrontBogey) and IsValid(self.RearBogey) and not self.IgnoreEngine then + local A = self.AsyncInverter.Torque + self.FrontBogey.MotorForce = 43000+9000*(A < 0 and 1 or 0)--35300 + self.FrontBogey.Reversed = self.Electric.Reverser < 0 + self.FrontBogey.DisableSound = 1 + self.FrontBogey.DisableContacts = self.Electric.DisablePant > 0 + self.RearBogey.MotorForce = 43000+9000*(A < 0 and 1 or 0)--35300 + self.RearBogey.Reversed = self.Electric.Reverser > 0 + self.RearBogey.DisableSound = 1 + self.RearBogey.DisableContacts = self.Electric.DisablePant > 0 + + -- 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 + self.FrontBogey.PneumaticBrakeForce = 50000.0--3000 --40000 + self.FrontBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + self.FrontBogey.ParkingBrakePressure = math.max(0,(3-self.Pneumatic.ParkingBrakePressure)/3)/2 + self.FrontBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + self.RearBogey.PneumaticBrakeForce = 50000.0--3000 --40000 + self.RearBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + self.RearBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + self.RearBogey.ParkingBrakePressure = math.max(0,(3-self.Pneumatic.ParkingBrakePressure)/3)/2 + end + return retVal +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 + +function ENT:OnButtonPress(button,ply) + if string.find(button,"PneumaticBrakeSet") then + self.Pneumatic:TriggerInput("BrakeSet",tonumber(button:sub(-1,-1))) + return + end + if button == "PassengerDoor" then self.PassengerDoor = not self.PassengerDoor end + if button == "CabinDoorLeft" then self.CabinDoorLeft = not self.CabinDoorLeft end + if button == "CabinDoorRight" then self.CabinDoorRight = not self.CabinDoorRight end + if button == "RearDoor" then self.RearDoor = not self.RearDoor end + if button == "DoorLeft" then + self.DoorSelect:TriggerInput("Set",0) + self.DoorLeft1:TriggerInput("Set",1) + end + if button == "DoorRight" then + self.DoorSelect:TriggerInput("Set",1) + self.DoorRight:TriggerInput("Set",1) + end + if button == "DoorCloseA" then + if self.DoorClose.Value == 1 then + self.DoorClose:TriggerInput("Set",2) + else + self.DoorClose:TriggerInput("Set",1) + end + end + if button == "DoorCloseM" then + if self.DoorClose.Value == 1 then + self.DoorClose:TriggerInput("Set",0) + else + self.DoorClose:TriggerInput("Set",1) + end + end +end +function ENT:OnButtonRelease(button,ply) + 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 == "DoorLeft" then + self.DoorLeft1:TriggerInput("Set",0) + end + if button == "DoorRight" then + self.DoorRight:TriggerInput("Set",0) + end +end diff --git a/lua/entities/gmod_subway_81-722/shared.lua b/lua/entities/gmod_subway_81-722/shared.lua new file mode 100644 index 0000000..a6a4890 --- /dev/null +++ b/lua/entities/gmod_subway_81-722/shared.lua @@ -0,0 +1,390 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" +ENT.SkinsType = "81-722" +ENT.Model = "models/metrostroi_train/81-722/81-722.mdl" + +ENT.Spawnable = true +ENT.AdminSpawnable = false +ENT.DontAccelerateSimulation = false + +function ENT:PassengerCapacity() + return 300 +end + +function ENT:GetStandingArea() + return Vector(-450,-30,-62),Vector(380,30,-62) +end + +local function GetDoorPosition(i,k) + return Vector(377.0 - 36.0 + 1*(k) - 230*i,-64*(1-2*k),-10) +end + +-- 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 + +ENT.MirrorCams = { + Vector(441,72,15),Angle(1,180,0),15, + Vector(441,-72,15),Angle(1,180,0),15, +} + +ENT.AnnouncerPositions = { +} +for i=1,4 do + table.insert(ENT.AnnouncerPositions,{Vector(323-(i-1)*230+37.5,47 ,44),100,0.1}) + table.insert(ENT.AnnouncerPositions,{Vector(323-(i-1)*230,-47,44),100,0.1}) +end +ENT.Cameras = { + {Vector(407.5+10,44,20),Angle(0,180,0),"Train.722.Breakers"}, + {Vector(407.5+5,50,0),Angle(0,180,0),"Train.722.PU2_1"}, + {Vector(407.5+10,43,-10),Angle(0,180,0),"Train.722.PU2_2"}, + {Vector(407.5+60,6,-4.5),Angle(25,0,0),"Train.722.Vityaz"}, + {Vector(407.5+57,31,-6),Angle(25,30,0),"Train.722.SARMAT"}, + {Vector(407.5+40,40,-25),Angle(0,0,0),"Train.722.CabLights"}, + {Vector(407.5+67.5,41.4,5),Angle(75,0,0),"Train.Common.RouteNumber"}, + {Vector(407.5+15,44,-40),Angle(57,180,0),"Train.722.Disconnects"}, + {Vector(407.5+40,45,-40),Angle(45,30,0),"Train.722.KRMH"}, + {Vector(450+38,11,20),Angle(60,0,0),"Train.Common.CouplerCamera"}, +} +function ENT:InitializeSounds() + self.BaseClass.InitializeSounds(self) + self.SoundNames["test_async1"] = {"subway_trains/722/engines/inverter_1000.wav",loop = true} + self.SoundNames["test_async1_2"] = {"subway_trains/722/engines/inverter_1000.wav",loop = true} + self.SoundNames["test_async1_3"] = {"subway_trains/722/engines/inverter_1000.wav",loop = true} + self.SoundNames["test_async2"] = {"subway_trains/722/engines/inverter_2000.wav",loop = true} + self.SoundNames["test_async3"] = {"subway_trains/722/engines/inverter_2800.wav",loop = true} + self.SoundNames["test_async3_2"] = {"subway_trains/722/engines/inverter_2800.wav",loop = true} + self.SoundPositions["test_async1"] = {400,1e9,Vector(0,0,0),0.5} + self.SoundPositions["test_async1_2"] = {400,1e9,Vector(0,0,0),0.1} + self.SoundPositions["test_async1_3"] = {400,1e9,Vector(0,0,0),0.1} + self.SoundPositions["test_async2"] = {400,1e9,Vector(0,0,0),0.1} + self.SoundPositions["test_async3"] = {400,1e9,Vector(0,0,0),0.1} + self.SoundPositions["test_async3_2"] = self.SoundPositions["test_async3"] + self.SoundNames["async_p2"] = {"subway_trains/722/engines/inverter_1000.wav",loop = true} + self.SoundPositions["async_p2"] = {400,1e9,Vector(0,0,0),1} + self.SoundNames["async_p3"] = {"subway_trains/722/engines/inverter_1000.wav",loop = true} + self.SoundPositions["async_p3"] = {400,1e9,Vector(0,0,0),1} + self.SoundNames["engine_loud"] = {"subway_trains/722/engines/engine_loud.wav",loop = true} + self.SoundPositions["engine_loud"] = {400,1e9,Vector(0,0,0),0.2} + self.SoundNames["chopper"] = {"subway_trains/722/chopper.wav",loop = true} + self.SoundPositions["chopper"] = {200,1e9,Vector(0,0,0),0.03} + + self.SoundNames["battery_on_1"] = "subway_trains/722/battery/battery_off_1.mp3" + self.SoundPositions["battery_on_1"] = {100,1e9,Vector(182,50,-75),0.5} + self.SoundNames["battery_off_1"] = "subway_trains/722/battery/battery_off_1.mp3" + self.SoundPositions["battery_off_1"] = {100,1e9,Vector(182,50,-75),0.5} + self.SoundNames["battery_off_2"] = "subway_trains/722/battery/battery_off_2.mp3" + self.SoundPositions["battery_off_2"] = {100,1e9,Vector(182,50,-75),0.5} + self.SoundNames["battery_off_stop"] = "subway_trains/722/battery/battery_off_stop.mp3" + self.SoundPositions["battery_off_stop"] = {120,1e9,Vector(182,50,-75),0.5} + self.SoundNames["battery_pneumo"] = "subway_trains/722/battery/battery_pneumo.mp3" + self.SoundPositions["battery_pneumo"] = {200,1e9,Vector(182,50,-75),0.1} + self.SoundNames["battery_off_loop"] = {loop=true,"subway_trains/722/battery/battery_off_loop.wav"} + self.SoundPositions["battery_off_loop"] = {100,1e9,Vector(182,50,-75),0.02} + + self.SoundNames["compressor"] = {loop=true,"subway_trains/722/compressol_loop.wav"} + self.SoundPositions["compressor"] = {485,1e9,Vector(-118,-40,-66),0.4} --FIXME: Pos + self.SoundNames["compressor_pn"] = "subway_trains/722/compressor_pssh.mp3" + self.SoundPositions["compressor_pn"] = {485,1e9,Vector(-118,-40,-66),0.4} --FIXME: Pos + + self.SoundNames["release"] = {loop=true,"subway_trains/722/pneumo_release2.wav"} + self.SoundPositions["release"] = {320,1e9,Vector(-183,0,-70),0.1} --FIXME: Pos + self.SoundNames["parking_brake"] = {loop=true,"subway_trains/common/pneumatic/autostop_loop.wav"} + self.SoundPositions["parking_brake"] = {400,1e9,Vector(-183,0,-70),0.95} + self.SoundNames["crane013_brake"] = {loop=true,"subway_trains/common/pneumatic/release_2.wav"} + self.SoundPositions["crane013_brake"] = {80,1e9,Vector(475,-10,-47.9),0.86} + self.SoundNames["crane013_brake2"] = {loop=true,"subway_trains/common/pneumatic/013_brake2.wav"} + self.SoundPositions["crane013_brake2"] = {80,1e9,Vector(475,-10,-47.9),0.86} + self.SoundNames["crane013_release"] = {loop=true,"subway_trains/common/pneumatic/013_release.wav"} + self.SoundPositions["crane013_release"] = {80,1e9,Vector(475,-10,-47.9),0.4} + self.SoundNames["pneumo_disconnect_close"] = {"subway_trains/722/013_close1.mp3","subway_trains/722/013_close2.mp3","subway_trains/722/013_close3.mp3"} + self.SoundNames["pneumo_disconnect_open"] = { + "subway_trains/722/013_open1.mp3", + "subway_trains/722/013_open2.mp3", + "subway_trains/722/013_open3.mp3", + "subway_trains/722/013_open4.mp3", + } + self.SoundPositions["pneumo_disconnect_close"] = {100,1e9,Vector(411,45,-61),0.2} + self.SoundPositions["pneumo_disconnect_open"] = {100,1e9,Vector(411,45,-61),0.2} + + self.SoundNames["front_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["front_isolation"] = {300,1e9,Vector(500, 0,-63),1} + self.SoundNames["rear_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["rear_isolation"] = {300,1e9,Vector(-469, 0,-63),1} + + self.SoundNames["ring"] = {loop=0,"subway_trains/722/ring1_loop.wav","subway_trains/722/ring1_loop.wav","subway_trains/722/ring1_end.wav"} + self.SoundPositions["ring"] = {100,1e9,Vector(406+0.2,36.3,-2.7),1} + self.SoundNames["ring2"] = {loop=true,"subway_trains/722/ring2_loop.wav"} --FIXME: Sarmat + self.SoundPositions["ring2"] = {100,1e9,Vector(406+0.2,36.3+1.5,-2.7),1} + + self.SoundNames["rolling_10"] = {loop=true,"subway_trains/722/rolling_10.wav"} + self.SoundNames["rolling_45"] = {loop=true,"subway_trains/722/rolling_45.wav"} + self.SoundNames["rolling_60"] = {loop=true,"subway_trains/722/rolling_60.wav"} + self.SoundNames["rolling_70"] = {loop=true,"subway_trains/722/rolling_70.wav"} + self.SoundPositions["rolling_10"] = {485,1e9,Vector(0,0,0),0.20} + self.SoundPositions["rolling_45"] = {485,1e9,Vector(0,0,0),0.50} + self.SoundPositions["rolling_60"] = {485,1e9,Vector(0,0,0),0.55} + self.SoundPositions["rolling_70"] = {485,1e9,Vector(0,0,0),0.60} + 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*0.4} + self.SoundPositions["rolling_medium1"] = {480,1e12,Vector(0,0,0),0.90*0.4} + self.SoundPositions["rolling_medium2"] = {480,1e12,Vector(0,0,0),0.90*0.4} + self.SoundPositions["rolling_high2"] = {480,1e12,Vector(0,0,0),1.00*0.4} + + 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(500,0,-30)} + + self.SoundNames["disconnect_valve"] = "subway_trains/common/switches/pneumo_disconnect_switch.mp3" + + self.SoundNames["KU_-3_-2"] = "subway_trains/722/kuau/x_xp.mp3" + self.SoundNames["KU_-2_-1"] = "subway_trains/722/kuau/xp_x2.mp3" + self.SoundNames["KU_-1_0"] = "subway_trains/722/kuau/x_xp.mp3" + self.SoundNames["KU_0_1"] = "subway_trains/722/kuau/0_x.mp3" + self.SoundNames["KU_1_2"] = "subway_trains/722/kuau/x_xp.mp3" + self.SoundNames["KU_2_1"] = "subway_trains/722/kuau/xp_x2.mp3" + self.SoundNames["KU_1_0"] = "subway_trains/722/kuau/x_xp.mp3" + self.SoundNames["KU_0_-1"] = "subway_trains/722/kuau/0_x.mp3" + self.SoundNames["KU_-1_-2"] = "subway_trains/722/kuau/x_xp.mp3" + self.SoundNames["KU_-2_-3"] = "subway_trains/722/kuau/xp_x.mp3" + self.SoundPositions["KU_-3_-2"] = {90,1e3,Vector(466.7,0.2,-16.9),0.4} + self.SoundPositions["KU_-2_-1"] = self.SoundPositions["KU_-3_-2"] + self.SoundPositions["KU_-1_0"] = self.SoundPositions["KU_-3_-2"] + self.SoundPositions["KU_0_1"] = self.SoundPositions["KU_-3_-2"] + self.SoundPositions["KU_1_2"] = self.SoundPositions["KU_-3_-2"] + self.SoundPositions["KU_2_1"] = self.SoundPositions["KU_-3_-2"] + self.SoundPositions["KU_1_0"] = self.SoundPositions["KU_-3_-2"] + self.SoundPositions["KU_0_-1"] = self.SoundPositions["KU_-3_-2"] + self.SoundPositions["KU_-1_-2"] = self.SoundPositions["KU_-3_-2"] + self.SoundPositions["KU_-2_-3"] = self.SoundPositions["KU_-3_-2"] + + self.SoundNames["sf_on"] = "subway_trains/722/switches/sf_on.mp3" + self.SoundNames["sf_off"] = "subway_trains/722/switches/sf_off.mp3" + + self.SoundNames["button_on"] = {"subway_trains/722/switches/button_press1.mp3","subway_trains/722/switches/button_press2.mp3","subway_trains/722/switches/button_press3.mp3"} + self.SoundNames["button_off"] = {"subway_trains/722/switches/button_release1.mp3","subway_trains/722/switches/button_release2.mp3","subway_trains/722/switches/button_release3.mp3"} + + self.SoundNames["switch_emer_on"] = "subway_trains/722/switches/big_red_e_on.mp3" + self.SoundNames["switch_emer_off"] = "subway_trains/722/switches/big_red_e_off.mp3" + + self.SoundNames["blinker_on1"] = {"subway_trains/722/blinker_on.mp3","subway_trains/722/blinker_on2.mp3","subway_trains/722/blinker_on3.mp3","subway_trains/722/blinker_on4.mp3","subway_trains/722/blinker_on5.mp3"} + self.SoundNames["blinker_off1"] = {"subway_trains/722/blinker_off.mp3","subway_trains/722/blinker_off2.mp3","subway_trains/722/blinker_off3.mp3","subway_trains/722/blinker_off4.mp3","subway_trains/722/blinker_off5.mp3"} + self.SoundNames["blinker_on2"] = self.SoundNames["blinker_on1"] + self.SoundNames["blinker_off2"] = self.SoundNames["blinker_off1"] + self.SoundPositions["blinker_on1"] = {30,1e9,Vector(481,39.3,-7.2),0.01} + self.SoundPositions["blinker_off1"] = self.SoundPositions["blinker_on1"] + self.SoundPositions["blinker_on2"] = self.SoundPositions["blinker_on1"] + self.SoundPositions["blinker_off2"] = self.SoundPositions["blinker_on1"] + + self.SoundNames["switch_kb_on"] = "subway_trains/722/switches/big_red_kb_on.mp3" + self.SoundNames["switch_kb_off"] = "subway_trains/722/switches/big_red_kb_off.mp3" + + self.SoundNames["switch_panel_up"] = "subway_trains/722/switches/panel_switch_up.mp3" + self.SoundNames["switch_panel_mid"] = "subway_trains/722/switches/panel_switch_mid.mp3" + self.SoundNames["switch_panel_down"] = "subway_trains/722/switches/panel_switch_down.mp3" + + self.SoundNames["multiswitch_panel_max"] = "subway_trains/722/switches/multi_switch_panel_max.mp3" + self.SoundNames["multiswitch_panel_mid"] = {"subway_trains/722/switches/multi_switch_panel_mid.mp3","subway_trains/722/switches/multi_switch_panel_mid2.mp3"} + self.SoundNames["multiswitch_panel_min"] = "subway_trains/722/switches/multi_switch_panel_min.mp3" + + self.SoundNames["door_cab_open"] = "subway_trains/common/door/cab/door_open.mp3" + self.SoundNames["door_cab_close"] = "subway_trains/common/door/cab/door_close.mp3" + + self.SoundNames["door_alarm"] = "subway_trains/722/door_alarm.mp3" + self.SoundPositions["door_alarm"] = {485,1e9,Vector(0,0,0),0.2} + + self.SoundNames["doors"] = "subway_trains/722/door_start.mp3" + self.SoundNames["doorl"] = {loop=true,"subway_trains/722/door_loop.wav"} + self.SoundPositions["doors"] = {300,1e9,Vector(0,0,0),0.2} + self.SoundPositions["doorl"] = {300,1e9,Vector(0,0,0),0.2} + for i=0,3 do + for k=0,1 do + self.SoundNames["door"..i.."x"..k.."c"] = "subway_trains/722/door_close.mp3" + self.SoundPositions["door"..i.."x"..k.."c"] = {485,1e9,GetDoorPosition(i,k),0.2} + end + end + self.SoundNames["door_alarm"] = {"subway_trains/722/door_alarm.mp3"} + self.SoundPositions["door_alarm"] = {485,1e9,Vector(0,0,0),0.25} + + + self.SoundNames["epk_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["epk_brake"] = {40,1e9,Vector(458,56.5,-61),0.65} + + self.SoundNames["valve_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["valve_brake"] = {400,1e9,Vector(418.25,-49.2,1.3),1} + + self.SoundNames["emer_brake"] = {loop=true,"subway_trains/common/pneumatic/autostop_loop.wav"} + self.SoundPositions["emer_brake"] = {600,1e9,Vector(380,-45,-75),0.95} + + for i = 1,10 do + local id1 = Format("b1tunnel_%d",i) + local id2 = Format("b2tunnel_%d",i) + self.SoundPositions[id1.."a"] = {700*0.75,1e9,Vector( 317-5,0,-84),1*0.5} + self.SoundPositions[id1.."b"] = self.SoundPositions[id1.."a"] + self.SoundPositions[id2.."a"] = {700*0.75,1e9,Vector(-317+0,0,-84),1*0.5} + self.SoundPositions[id2.."b"] = self.SoundPositions[id2.."a"] + end + for i = 1,14 do + local id1 = Format("b1street_%d",i) + local id2 = Format("b2street_%d",i) + self.SoundPositions[id1.."a"] = {700,1e9,Vector( 317-5,0,-84),1.5*0.5} + self.SoundPositions[id1.."b"] = self.SoundPositions[id1.."a"] + self.SoundPositions[id2.."a"] = {700,1e9,Vector(-317+0,0,-84),1.5*0.5} + self.SoundPositions[id2.."b"] = self.SoundPositions[id2.."a"] + 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.2} + 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.2} + self.SoundNames["announcer_noise3_"..k] = {loop=true,"subway_announcers/upo/noiseS3.wav"} + self.SoundPositions["announcer_noise3_"..k] = {v[2] or 300,1e9,v[1],v[3]*0.2} + self.SoundNames["announcer_noiseW"..k] = {loop=true,"subway_announcers/upo/noiseW.wav"} + self.SoundPositions["announcer_noiseW"..k] = {v[2] or 300,1e9,v[1],v[3]*0.2} + end +end +function ENT:InitializeSystems() + self:LoadSystem("TR","TR_3B") + self:LoadSystem("Electric","81_722_Electric") + self:LoadSystem("BKCU","81_722_UPI") + + self:LoadSystem("AsyncInverter","81_722_AsyncInverter") + + self:LoadSystem("BUKP","81_722_BUKP") + self:LoadSystem("MFDU","81_722_MFDU") + self:LoadSystem("BUKV","81_722_BUKV") + self:LoadSystem("RouteNumberSys","81_722_RouteNumber") + + self:LoadSystem("BARS","81_722_BARS") + self:LoadSystem("ALSCoil") + + --self:LoadSystem("PAM") + + self:LoadSystem("Pneumatic","81_722_Pneumatic") + self:LoadSystem("Horn","81_722_Horn") + + + self:LoadSystem("Panel","81_722_Panel") + + self:LoadSystem("Announcer","81_71_Announcer", "AnnouncementsSarmatUPO") + self:LoadSystem("SarmatUPO","81_722_sarmat") + self:LoadSystem("UPO","81_71_UPO") + self:LoadSystem("Tickers","81_722_Tickers") + self:LoadSystem("PassSchemes","81_722_PassScheme") + +end + +function ENT:PostInitializeSystems() + self.Electric:TriggerInput("Type",self.Electric.T722) + self.UPO:TriggerInput("ArriveRandom",1) +end + +--------------------------------------------------- +-- Defined train information +-- Types of wagon(for wagon limit system): +-- 0 = Head or intherim +-- 1 = Only head +-- 2 = Only intherim +--------------------------------------------------- +ENT.SubwayTrain = { + Type = "81-722", + Name = "81-722", + WagType = 1, + Manufacturer = "MVM", + ALS = { + HaveAutostop = true, + TwoToSix = false, + RSAs325Hz = false, + Aproove0As325Hz = true, + }, + EKKType = 722, + NoFrontEKK=true, +} +ENT.NumberRanges = {{22001,22100}} + +ENT.Spawner = { + model = { + "models/metrostroi_train/81-722/81-722.mdl", + "models/metrostroi_train/81-722/722_salon1.mdl", + "models/metrostroi_train/81-722/722_cabine.mdl", + "models/metrostroi_train/81-722/722_underwagon.mdl", + "models/metrostroi_train/81-722/722_sarmat_l.mdl", + "models/metrostroi_train/81-722/722_sarmat_r.mdl", + }, + spawnfunc = function(i,tbls,tblt) + local WagNum = tbls.WagNum + if 1= 6) and (i < WagNum/2 or i > WagNum/2+1) then + return "gmod_subway_81-723" + else + return "gmod_subway_81-724" + end + else + return "gmod_subway_81-722" + end + end, + --WagNumTable = {2,3,4,6,8}, + WagNumTable = {3,6,8}, + Metrostroi.Skins.GetTable("Texture","Spawner.Texture",false,"train"), + Metrostroi.Skins.GetTable("PassTexture","Spawner.PassTexture",false,"pass"), + Metrostroi.Skins.GetTable("CabTexture","Spawner.CabTexture",false,"cab"), + {"Announcer","Spawner.722.Announcer","List",function() + local Announcer = {} + for k,v in pairs(Metrostroi.AnnouncementsSarmatUPO or {}) do Announcer[k] = v.name or k end + return Announcer + end}, + {"Scheme","Spawner.722.Schemes","List",function() + local Schemes = {} + for k,v in pairs(Metrostroi.Skins["722_schemes"] or {}) do Schemes[k] = v.name or k end + return Schemes + end}, + {"SarmatInvert","Spawner.722.InvertSchemes","Boolean",false,function(ent,val,rot) ent:SetNW2Bool("SarmatInvert",val and not rot or not val and rot) end}, + {"SpawnMode","Spawner.Common.SpawnMode","List",{"Spawner.Common.SpawnMode.Full","Spawner.Common.SpawnMode.Deadlock","Spawner.Common.SpawnMode.NightDeadlock","Spawner.Common.SpawnMode.Depot"}, nil,function(ent,val,rot,i,wagnum,rclk) + if rclk then return end + if ent._SpawnerStarted~=val then + ent.Battery:TriggerInput("Set",val<=2 and 1 or 0) + if ent.SF1 then + local first = i==1 or _LastSpawner~=CurTime() + ent.ALS:TriggerInput("Set",val==1 and 1 or 0) + ent.Headlights:TriggerInput("Set",val==1 and 1 or 0) + ent.CabinLight:TriggerInput("Set",val==1 and 1 or 0) + ent.Compressor:TriggerInput("Set",val==1 and 1 or 0) + ent.PassLight:TriggerInput("Set",val==1 and 1 or 0) + ent.VKF:TriggerInput("Set",val==3 and 1 or 0) + ent.SOSDEnable:TriggerInput("Set",(first and val==1) and 1 or 0) + ent.SF8:TriggerInput("Set",val<=2 and 1 or 0) + ent.SF9:TriggerInput("Set",val<=2 and 1 or 0) + ent.SF16:TriggerInput("Set",val<=2 and 1 or 0) + ent.SF17:TriggerInput("Set",val<=2 and 1 or 0) + ent.SF19:TriggerInput("Set",val<=2 and 1 or 0) + ent.SF20:TriggerInput("Set",val<=2 and 1 or 0) + + _LastSpawner=CurTime() + ent.CabinDoorLeft = val==4 and first + ent.CabinDoorRight = val==4 and first + ent.PassengerDoor = val==4 + ent.RearDoor = val==4 + else + ent.FrontDoor = val==4 + ent.RearDoor = val==4 + end + --ent.GV:TriggerInput("Set",val<4 and 1 or 0) + ent._SpawnerStarted = val + end + ent.Pneumatic.TrainLinePressure = val==3 and math.random()*4 or val==2 and 4.5+math.random()*3 or 7.6+math.random()*0.6 + end}, + --{"GV","Spawner.717.GV","Boolean",true,function(ent,val) ent.GV:TriggerInput("Set",val) end}, + --{"PB","Spawner.717.PB","Boolean",false,function(ent,val) ent.ParkingBrake:TriggerInput("Set",val) end}, +} diff --git a/lua/entities/gmod_subway_81-723/cl_init.lua b/lua/entities/gmod_subway_81-723/cl_init.lua new file mode 100644 index 0000000..f75a154 --- /dev/null +++ b/lua/entities/gmod_subway_81-723/cl_init.lua @@ -0,0 +1,790 @@ +-------------------------------------------------------------------------------- +-- 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["PVZ"] = { + pos = Vector(-461,28,-12), --446 -- 14 -- -0,5 + ang = Angle(0,90-10,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.4, snd = function(val) return val and "sf_on" or "sf_off" end, + sndmin = 90, sndmax = 1e3, + } + --end +end + +ENT.ButtonMap["FrontPneumatic"] = { + pos = Vector(468.0,-45.0,-58.5), + 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(449+13, -30+0.5, -69), + ang = Angle( 15,-90,0), + hide = 2,30 +} +ENT.ClientProps["FrontTrain"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_blue.mdl", + pos = Vector(449+13, 30+0.5, -69), + 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-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["FrontDoor"] = { + pos = Vector(462,17,41.3), --28 + ang = Angle(0,-90,90), + width = 680, + height = 2000, + scale = 0.1/2, + buttons = { + {ID = "FrontDoor",x=0,y=0,w=680,h=2000, tooltip="ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ", model = { + var="FrontDoor",sndid="door_cab_f", + 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="ЗаднÑÑ Ð´Ð²ÐµÑ€ÑŒ", model = { + var="RearDoor",sndid="door_cab_b", + 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["salon"] = { + model = "models/metrostroi_train/81-722/723_salon1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["salon2"] = { + model = "models/metrostroi_train/81-722/723_salon2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["underwagon"] = { + model = "models/metrostroi_train/81-722/723_underwagon.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +-------------------------------------------------------------------------------- +-- 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_f"] = { + model = "models/metrostroi_train/81-722/81-722_door_cab_t.mdl", + pos = Vector(460.4,-18,-9), + ang = Angle(0,90,-0.15), + hide=2, +} +ENT.ClientProps["door_cab_b"] = { + 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.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, +} + +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["lamps_salon"] = { + model = "models/metrostroi_train/81-722/723_lamps_full.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 1.5, +} + +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, +} +ENT.ClientProps["otsek3"] = { + model = "models/metrostroi_train/81-722/81-722_otsek1.mdl", + pos = Vector(448,54.6,-29.2), + ang = Angle(0,90,0), + hideseat=1.7, +} +ENT.ClientProps["otsek4"] = { + model = "models/metrostroi_train/81-722/81-722_otsek2.mdl", + pos = Vector(448,-54.4,-29.2), + ang = Angle(0,90,0), + hideseat=1.7, +} + +ENT.Lights = { + -- Headlight glow + --[2] = { "dynamiclight", Vector( 300, 0, 40), Angle(0,0,0), Color(255,255,255), brightness = 4, distance = 550 }, +} + +ENT.ButtonMap["Tickers1"] = { + pos = Vector(-455.4,-11.1,52.8), + ang = Angle(0,90,90), + width = 300, + height = 64, + scale = 0.094, + hideseat=1.5, +} +ENT.ButtonMap["Tickers2"] = { + pos = Vector(2,-11.3,52.5), + ang = Angle(0,90,90+10), + width = 300, + height = 64, + scale = 0.099, + hideseat=1.5, +} +ENT.ButtonMap["Tickers3"] = { + pos = Vector(-5,11.3,52.7), + ang = Angle(0,-90,90+10), + width = 300, + height = 64, + scale = 0.1, + hideseat=1.5, +} +ENT.ButtonMap["Tickers4"] = { + pos = Vector(449.3,11.1,52.8), + ang = Angle(0,-90,90), + width = 300, + height = 64, + scale = 0.094, + hideseat=1.5, +} +function ENT:Initialize() + self.BaseClass.Initialize(self) + + self.Tickers = self:CreateRT("721Tickers",1024,128) + + self.FrontLeak = 0 + self.RearLeak = 0 + + self.ReleasedPdT = 0 + self.PreviousCompressorState = false + self.CompressorVol = 0 + self.ParkingBrake = 0 + self.BPSNBuzzVolume = 0 +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 1 then led = led + snext end + if scurr < 0 then led = math.floor(CurTime()%16.5*2) end + if led_back then + if sleft then + for i=1,4 do if IsValid(self.ClientEnts["led_l_b"..i]) then self.ClientEnts["led_l_b"..i]:SetSkin(math.Clamp(led-((i-1)*8),0,8)) end end + end + if sright then + for i=1,4 do if IsValid(self.ClientEnts["led_r_b"..i]) then self.ClientEnts["led_r_b"..i]:SetSkin(math.Clamp(led-((i-1)*8),0,8)) end end + end + else + if sleft then + for i=1,4 do if IsValid(self.ClientEnts["led_l_f"..i]) then self.ClientEnts["led_l_f"..i]:SetSkin(math.Clamp(led-((i-1)*8),0,8)) end end + end + if sright then + for i=1,4 do if IsValid(self.ClientEnts["led_r_f"..i]) then self.ClientEnts["led_r_f"..i]:SetSkin(math.Clamp(led-((i-1)*8),0,8)) end end + end + end + + local playL = false + local playR = false + 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_f = self:GetPackedBool("FrontDoor") + local door_b = self:GetPackedBool("RearDoor") + local door_cab_f = self:Animate("door_cab_f",door_f and 1 or -0.05,1,0.75, 8, 0.05) + local door_cab_b = self:Animate("door_cab_b",door_b and 1 or -0.05,1,0.75, 8, 0.05) + + local door1s = (door_cab_f < 1 or door_f) + if self.Door1 ~= door1s then + self.Door1 = door1s + self:PlayOnce("FrontDoor","bass",door1s and 1 or 0) + end + local door2s = (door_cab_b < 1 or door_b) + if self.Door2 ~= door2s then + self.Door2 = door2s + self:PlayOnce("RearDoor","bass",door2s and 1 or 0) + end + + local dT = self.DeltaTime + + 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 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 + 4*(-self:GetPackedRatio("BrakeCylinderPressure_dPdT",0)-self.ReleasedPdT)*dT,0,1) + --print(dPdT) + self:SetSoundState("release",math.Clamp(self.ReleasedPdT,0,1)^1.65,1.0) + + + local state = self:GetPackedBool("CompressorWork") + --self.PreviousCompressorState = self.PreviousCompressorState or false + 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 + --[[if not state and self.PreviousCompressorState ~= state then + self:PlayOnce("compressor_pn","cabin",1,1) + end]] + --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 = 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.5,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.5),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-40)/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:GetPackedBool("AnnPlayUPO") + + local noise = self:GetNW2Int("AnnouncerNoise", -1) + local volume = self:GetNW2Float("UPOVolume",1) + local noisevolume = self:GetNW2Float("UPONoiseVolume",1) + local buzzvolume = volume + if self.Sounds["announcer1"] and IsValid(self.Sounds["announcer1"]) then buzzvolume = UPO and (1-(self.Sounds["announcer1"]:GetLevel())*math.Rand(0.9,3))*buzzvolume*2 or 0 end + if self.BPSNBuzzVolume > buzzvolume then + self.BPSNBuzzVolume = math.Clamp(self.BPSNBuzzVolume + 8*(buzzvolume-self.BPSNBuzzVolume)*dT,0.1,1) + else + self.BPSNBuzzVolume = math.Clamp(self.BPSNBuzzVolume + 0.4*(buzzvolume-self.BPSNBuzzVolume)*dT,0.1,1) + end + + for k,v in ipairs(self.AnnouncerPositions) do + self:SetSoundState("announcer_noiseW"..k,UPO and noisevolume*volume*0.7 or 0,1) + for i=1,3 do + self:SetSoundState(Format("announcer_noise%d_%d",i,k),(UPO and i==noise) and volume*self.BPSNBuzzVolume*self:GetNW2Float("UPOBuzzVolume",1)*0.7 or 0,1) + end + + if IsValid(self.Sounds["announcer"..k]) then self.Sounds["announcer"..k]:SetVolume(work and v[3]*(UPO and volume or 1) or 0) end + end +end + +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.Tickers) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + for i=1,4 do + self:DrawOnPanel("Tickers"..i,function(...) + if (i==2 or i==3) then + surface.DrawTexturedRectRotated(245,32,490,64,0) + else + surface.DrawTexturedRectRotated(256,32,512,64,0) + end + end) + 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 = {} +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() \ No newline at end of file diff --git a/lua/entities/gmod_subway_81-723/init.lua b/lua/entities/gmod_subway_81-723/init.lua new file mode 100644 index 0000000..26fa3dd --- /dev/null +++ b/lua/entities/gmod_subway_81-723/init.lua @@ -0,0 +1,227 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +ENT.BogeyDistance = 650 -- Needed for gm trainspawner +ENT.SyncTable = { + "SF31","SF32","SF33","SF34","SF35","SF36","SF37","SF38","SF41","SF42","SF43","SF44","SF45","SF46","SF47","SF48","SF49","SF51","SF52","SF53","SF54","SF55","SF56","SF57","SF58","SF59", + + "FrontBrakeLineIsolation","FrontTrainLineIsolation", + "RearBrakeLineIsolation","RearTrainLineIsolation", +} +-------------------------------------------------------------------------------- +function ENT:Initialize() + -- Set model and initialize + self:SetModel("models/metrostroi_train/81-722/81-723.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create seat entities + self.DriverSeat = self:CreateSeat("instructor",Vector(450,11,-35)) + + -- Hide seats + self.DriverSeat:SetRenderMode(RENDERMODE_TRANSALPHA) + self.DriverSeat:SetColor(Color(0,0,0,0)) + + -- Create bogeys + self.FrontBogey = self:CreateBogey(Vector( 322,0,-90),Angle(0,180,0),true,"722") + self.RearBogey = self:CreateBogey(Vector(-333,0,-90),Angle(0,0,0),false,"722") + self.FrontBogey:SetNWBool("Async",true) + self.RearBogey:SetNWBool("Async",true) + self.FrontBogey:SetNWFloat("SqualPitch",0.8) + self.RearBogey:SetNWFloat("SqualPitch",0.8) + self.FrontBogey:SetNWBool("DisableEngines",true) + self.RearBogey:SetNWBool("DisableEngines",true) + if Metrostroi.BogeyOldMap then + self.FrontCouple = self:CreateCouple(Vector( 413.7+7.5,0,-77),Angle(0,0,0),true,"717") + self.RearCouple = self:CreateCouple(Vector(-419-7.5,0,-77),Angle(0,180,0),false,"717") + else + self.FrontCouple = self:CreateCouple(Vector( 420 -8,0,-79),Angle(0,0,0),true,"717") + self.RearCouple = self:CreateCouple(Vector(-419-6.8+8,0,-79),Angle(0,180,0),false,"717") + end + self.FrontBogey.DisableSound = 1 + self.RearBogey.DisableSound = 1 + + -- Initialize key mapping + self.KeyMap = { + [KEY_F] = "PneumaticBrakeUp", + [KEY_R] = "PneumaticBrakeDown", + [KEY_PAD_1] = "PneumaticBrakeSet1", + [KEY_PAD_2] = "PneumaticBrakeSet2", + [KEY_PAD_3] = "PneumaticBrakeSet3", + [KEY_PAD_4] = "PneumaticBrakeSet4", + [KEY_PAD_5] = "PneumaticBrakeSet5", + [KEY_PAD_6] = "PneumaticBrakeSet6", + } + self.TrainWireInverts = { [8]=true } + -- Cross connections in train wires + self.TrainWireCrossConnections = { + [4] = 3, -- Orientation F<->B + [13] = 12, -- Reverser F<->B + [38] = 37, -- Doors L<->R + } + + self.InteractionZones = { + { + ID = "FrontBrakeLineIsolationToggle", + Pos = Vector(463.3, -34, -65), Radius = 8, + }, + { + ID = "FrontTrainLineIsolationToggle", + Pos = Vector(463.3, 35, -65), Radius = 8, + }, + { + ID = "RearTrainLineIsolationToggle", + Pos = Vector(-469.8, -34, -65), Radius = 8, + }, + { + ID = "RearBrakeLineIsolationToggle", + Pos = Vector(-469.8, 35, -65), Radius = 8, + }, + { + ID = "RearDoor", + Pos = Vector(-464.8, -38, 0), Radius = 20, + }, + { + ID = "FrontDoor", + Pos = Vector(457.8, 36, 0), Radius = 20, + }, + } + + self.Lights = { + [10] = { "dynamiclight", Vector( 430, 0, 40), Angle(0,0,0), Color(255,255,255), brightness = 0.05, 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}, + + [15] = { "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" }, + [16] = { "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" }, + [17] = { "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" }, + [18] = { "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" }, + [19] = { "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" }, + [20] = { "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" }, + } + self.FrontDoor = false + self.RearDoor = false + + self:SetNW2Float("UPONoiseVolume",math.Rand(0,0.3)) + self:SetNW2Float("UPOVolume",math.Rand(0.8,1)) +end + +-------------------------------------------------------------------------------- +function ENT:Think() + local retVal = self.BaseClass.Think(self) + local power = self.BUKV.Power > 0 + + if self.AsyncInverter.State==1 then + local state = math.abs(self.AsyncInverter.InverterFrequency/13)--(10+8*math.Clamp((self.AsyncInverter.State-0.4)/0.4,0,1))) + self:SetPackedRatio("asynccurrent", math.Clamp(state*(state+self.AsyncInverter.State/1),0,1)) + else + local state = math.abs(self.AsyncInverter.InverterFrequency/(11+self.AsyncInverter.State*5))--(10+8*math.Clamp((self.AsyncInverter.State-0.4)/0.4,0,1))) + self:SetPackedRatio("asynccurrent", math.Clamp(state*(state+self.AsyncInverter.State/1),0,1)) + end + self:SetPackedRatio("asyncstate", math.Clamp(self.AsyncInverter.State/0.2*math.abs(self.AsyncInverter.Current)/100,0,1)) + self:SetPackedRatio("chopper", math.Clamp(self.Electric.Chopper>0 and self.Electric.Iexit/100 or 0,0,1)) + + self:SetPackedRatio("Speed", self.Speed) + local passlight = math.min(1,self.Panel.MainLights+self.Panel.EmergencyLights*0.3) + --self:SetLightPower(11,power and mul > 0, mul) + self:SetLightPower(11,passlight > 0, passlight) + self:SetLightPower(12,passlight > 0, passlight) + self:SetLightPower(13,passlight > 0, passlight) + + --self:SetPackedBool("BattPressed",self.BUKV.BatteryPressed) + + self:SetNW2Int("PassSchemesLED",self.PassSchemes.PassSchemeCurr) + self:SetNW2Int("PassSchemesLEDN",self.PassSchemes.PassSchemeNext) + self:SetPackedBool("PassSchemesLEDO",self.PassSchemes.PassSchemePath) + self:SetPackedBool("SarmatLeft",self.Panel.PassSchemePowerL) + self:SetPackedBool("SarmatRight",self.Panel.PassSchemePowerR) + + self:SetPackedBool("CompressorWork",self.Pneumatic.Compressor) + + --self:SetPackedRatio("Cran", self.Pneumatic.DriverValvePosition) + --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:SetPackedBool("FrontDoor",self.FrontDoor) + self:SetPackedBool("RearDoor",self.RearDoor) + + self:SetPackedBool("BortPneumo",self.Panel.BrW>0) + self:SetPackedBool("BortLSD",self.Panel.DoorsW>0) + self:SetPackedBool("BortBV",self.Panel.GRP>0) + self:SetLightPower(15, self.Panel.DoorsW > 0.5,1) + self:SetLightPower(18, self.Panel.DoorsW > 0.5,1) + self:SetLightPower(16, self.Panel.BrW > 0.5,1) + self:SetLightPower(19, self.Panel.BrW > 0.5,1) + self:SetLightPower(17, self.Panel.GRP > 0.5,1) + self:SetLightPower(20, self.Panel.GRP > 0.5,1) + + self:SetPackedRatio("SalonLighting",passlight) + + self:SetPackedBool("DoorAlarmL",self.BUKV.CloseRing) + self:SetPackedBool("DoorAlarmR",self.BUKV.CloseRing) + + self:SetNW2Int("PassSchemesLED",self.PassSchemes.PassSchemeCurr) + self:SetNW2Int("PassSchemesLEDN",self.PassSchemes.PassSchemeNext) + self:SetPackedBool("PassSchemesLEDO",self.PassSchemes.PassSchemePath) + self:SetPackedBool("SarmatLeft",self.Panel.PassSchemePowerL) + self:SetPackedBool("SarmatRight",self.Panel.PassSchemePowerR) + + self:SetPackedBool("AnnPlay",self.Panel.AnnouncerPlaying > 0) + self:SetPackedBool("AnnPlayUPO",self.Announcer.AnnTable=="AnnouncementsUPO") + + self.AsyncInverter:TriggerInput("Speed",self.Speed) + if IsValid(self.FrontBogey) and IsValid(self.RearBogey) and not self.IgnoreEngine then + local A = self.AsyncInverter.Torque + self.FrontBogey.MotorForce = 43000+9000*(A < 0 and 1 or 0)--35300 + self.FrontBogey.Reversed = self.Electric.Reverser < 0 + self.FrontBogey.DisableSound = 1 + self.FrontBogey.DisableContacts = self.Electric.DisablePant > 0 + self.RearBogey.MotorForce = 43000+9000*(A < 0 and 1 or 0)--35300 + self.RearBogey.Reversed = self.Electric.Reverser > 0 + self.RearBogey.DisableSound = 1 + self.RearBogey.DisableContacts = self.Electric.DisablePant > 0 + + -- 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 + self.FrontBogey.PneumaticBrakeForce = 50000.0--3000 --40000 + self.FrontBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + self.FrontBogey.ParkingBrakePressure = math.max(0,(3-self.Pneumatic.ParkingBrakePressure)/3)/2 + self.FrontBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + self.RearBogey.PneumaticBrakeForce = 50000.0--3000 --40000 + self.RearBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + self.RearBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + self.RearBogey.ParkingBrakePressure = math.max(0,(3-self.Pneumatic.ParkingBrakePressure)/3)/2 + end + return retVal +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 + +function ENT:OnButtonPress(button,ply) + if button == "FrontDoor" then self.FrontDoor = not self.FrontDoor end + if button == "RearDoor" then self.RearDoor = not self.RearDoor end +end diff --git a/lua/entities/gmod_subway_81-723/shared.lua b/lua/entities/gmod_subway_81-723/shared.lua new file mode 100644 index 0000000..4c07eea --- /dev/null +++ b/lua/entities/gmod_subway_81-723/shared.lua @@ -0,0 +1,190 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" +ENT.SkinsType = "81-722" +ENT.Model = "models/metrostroi_train/81-722/81-723.mdl" + +ENT.Spawnable = true +ENT.AdminSpawnable = false +ENT.DontAccelerateSimulation = false + +function ENT:PassengerCapacity() + return 300 +end + +function ENT:GetStandingArea() + return Vector(-450,-30,-62),Vector(380,30,-62) +end + +local function GetDoorPosition(i,k) + return Vector(377.0 - 36.0 + 1*(k) - 230*i,-64*(1-2*k),-10) +end + +-- 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["test_async1"] = {"subway_trains/722/engines/inverter_1000.wav",loop = true} + self.SoundNames["test_async1_2"] = {"subway_trains/722/engines/inverter_1000.wav",loop = true} + self.SoundNames["test_async1_3"] = {"subway_trains/722/engines/inverter_1000.wav",loop = true} + self.SoundNames["test_async2"] = {"subway_trains/722/engines/inverter_2000.wav",loop = true} + self.SoundNames["test_async3"] = {"subway_trains/722/engines/inverter_2800.wav",loop = true} + self.SoundNames["test_async3_2"] = {"subway_trains/722/engines/inverter_2800.wav",loop = true} + self.SoundPositions["test_async1"] = {400,1e9,Vector(0,0,0),0.5} + self.SoundPositions["test_async1_2"] = {400,1e9,Vector(0,0,0),0.1} + self.SoundPositions["test_async1_3"] = {400,1e9,Vector(0,0,0),0.1} + self.SoundPositions["test_async2"] = {400,1e9,Vector(0,0,0),0.1} + self.SoundPositions["test_async3"] = {400,1e9,Vector(0,0,0),0.1} + self.SoundPositions["test_async3_2"] = self.SoundPositions["test_async3"] + self.SoundNames["async_p2"] = {"subway_trains/722/engines/inverter_1000.wav",loop = true} + self.SoundPositions["async_p2"] = {400,1e9,Vector(0,0,0),1} + self.SoundNames["async_p3"] = {"subway_trains/722/engines/inverter_1000.wav",loop = true} + self.SoundPositions["async_p3"] = {400,1e9,Vector(0,0,0),1} + self.SoundNames["engine_loud"] = {"subway_trains/722/engines/engine_loud.wav",loop = true} + self.SoundPositions["engine_loud"] = {400,1e9,Vector(0,0,0),0.2} + self.SoundNames["chopper"] = {"subway_trains/722/chopper.wav",loop = true} + self.SoundPositions["chopper"] = {200,1e9,Vector(0,0,0),0.05} + + self.SoundNames["rolling_10"] = {loop=true,"subway_trains/722/rolling_10.wav"} + self.SoundNames["rolling_45"] = {loop=true,"subway_trains/722/rolling_45.wav"} + self.SoundNames["rolling_60"] = {loop=true,"subway_trains/722/rolling_60.wav"} + self.SoundNames["rolling_70"] = {loop=true,"subway_trains/722/rolling_70.wav"} + self.SoundPositions["rolling_10"] = {485,1e9,Vector(0,0,0),0.20} + self.SoundPositions["rolling_45"] = {485,1e9,Vector(0,0,0),0.50} + self.SoundPositions["rolling_60"] = {485,1e9,Vector(0,0,0),0.55} + self.SoundPositions["rolling_70"] = {485,1e9,Vector(0,0,0),0.60} + 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*0.4} + self.SoundPositions["rolling_medium1"] = {480,1e12,Vector(0,0,0),0.90*0.4} + self.SoundPositions["rolling_medium2"] = {480,1e12,Vector(0,0,0),0.90*0.4} + self.SoundPositions["rolling_high2"] = {480,1e12,Vector(0,0,0),1.00*0.4} + + self.SoundNames["battery_on_1"] = "subway_trains/722/battery/battery_off_1.mp3" + self.SoundPositions["battery_on_1"] = {100,1e9,Vector(182,50,-75),0.5} + self.SoundNames["battery_off_1"] = "subway_trains/722/battery/battery_off_1.mp3" + self.SoundPositions["battery_off_1"] = {100,1e9,Vector(182,50,-75),0.5} + self.SoundNames["battery_off_2"] = "subway_trains/722/battery/battery_off_2.mp3" + self.SoundPositions["battery_off_2"] = {100,1e9,Vector(182,50,-75),0.5} + self.SoundNames["battery_off_stop"] = "subway_trains/722/battery/battery_off_stop.mp3" + self.SoundPositions["battery_off_stop"] = {120,1e9,Vector(182,50,-75),0.5} + self.SoundNames["battery_pneumo"] = "subway_trains/722/battery/battery_pneumo.mp3" + self.SoundPositions["battery_pneumo"] = {120,1e9,Vector(182,50,-75),0.1} + self.SoundNames["battery_off_loop"] = {loop=true,"subway_trains/722/battery/battery_off_loop.wav"} + self.SoundPositions["battery_off_loop"] = {100,1e9,Vector(182,50,-75),0.02} + + self.SoundNames["compressor"] = {loop=true,"subway_trains/722/compressol_loop.wav"} + self.SoundPositions["compressor"] = {800,1e9,Vector(-118,-40,-66),0.4} + self.SoundNames["compressor_pn"] = "subway_trains/722/compressor_pssh.mp3" + self.SoundPositions["compressor_pn"] = {800,1e9,Vector(-118,-40,-66),0.4} + + self.SoundNames["release"] = {loop=true,"subway_trains/722/pneumo_release2.wav"} + self.SoundPositions["release"] = {320,1e9,Vector(-183,0,-70),0.1} --FIXME: Pos + self.SoundNames["parking_brake"] = {loop=true,"subway_trains/common/pneumatic/autostop_loop.wav"} + self.SoundPositions["parking_brake"] = {400,1e9,Vector(-183,0,-70),0.95} + self.SoundNames["disconnect_valve"] = "subway_trains/common/switches/pneumo_disconnect_switch.mp3" + + self.SoundNames["front_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["front_isolation"] = {300,1e9,Vector(462, 0,-63),1} + self.SoundNames["rear_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["rear_isolation"] = {300,1e9,Vector(-469, 0,-63),1} + + self.SoundNames["sf_on"] = "subway_trains/722/switches/sf_on.mp3" + self.SoundNames["sf_off"] = "subway_trains/722/switches/sf_off.mp3" + + self.SoundNames["door_alarm"] = "subway_trains/722/door_alarm.mp3" + self.SoundPositions["door_alarm"] = {800,1e9,Vector(0,0,0),0.5} + + self.SoundNames["door_cab_open"] = "subway_trains/common/door/cab/door_open.mp3" + self.SoundNames["door_cab_close"] = "subway_trains/common/door/cab/door_close.mp3" + + self.SoundNames["doors"] = "subway_trains/722/door_start.mp3" + self.SoundNames["doorl"] = {loop=true,"subway_trains/722/door_loop.wav"} + self.SoundPositions["doors"] = {300,1e9,Vector(0,0,0),0.5} + self.SoundPositions["doorl"] = {300,1e9,Vector(0,0,0),0.5} + for i=0,3 do + for k=0,1 do + self.SoundNames["door"..i.."x"..k.."c"] = "subway_trains/722/door_close.mp3" + self.SoundPositions["door"..i.."x"..k.."c"] = {800,1e9,GetDoorPosition(i,k),0.2} + end + end + self.SoundNames["door_alarm"] = {"subway_trains/722/door_alarm.mp3"} + self.SoundPositions["door_alarm"] = {800,1e9,Vector(0,0,0),0.5} + for i = 1,10 do + local id1 = Format("b1tunnel_%d",i) + local id2 = Format("b2tunnel_%d",i) + self.SoundPositions[id1.."a"] = {700*0.75,1e9,Vector( 317-5,0,-84),1*0.5} + self.SoundPositions[id1.."b"] = self.SoundPositions[id1.."a"] + self.SoundPositions[id2.."a"] = {700*0.75,1e9,Vector(-317+0,0,-84),1*0.5} + self.SoundPositions[id2.."b"] = self.SoundPositions[id2.."a"] + 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.2} + 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.2} + self.SoundNames["announcer_noise3_"..k] = {loop=true,"subway_announcers/upo/noiseS3.wav"} + self.SoundPositions["announcer_noise3_"..k] = {v[2] or 300,1e9,v[1],v[3]*0.2} + self.SoundNames["announcer_noiseW"..k] = {loop=true,"subway_announcers/upo/noiseW.wav"} + self.SoundPositions["announcer_noiseW"..k] = {v[2] or 300,1e9,v[1],v[3]*0.2} + end +end + +function ENT:InitializeSystems() + self:LoadSystem("TR","TR_3B") + self:LoadSystem("Electric","81_722_Electric") + + self:LoadSystem("AsyncInverter","81_722_AsyncInverter") + + self:LoadSystem("BUKV","81_722_BUKV") + + self:LoadSystem("Pneumatic","81_722_Pneumatic") + --self:LoadSystem("Horn","81_722_Horn") + + + self:LoadSystem("Panel","81_723_Panel") + + self:LoadSystem("Announcer","81_71_Announcer", "AnnouncementsSarmatUPO") + self:LoadSystem("Tickers","81_722_Tickers") + self:LoadSystem("PassSchemes","81_722_PassScheme") + +end + +function ENT:PostInitializeSystems() + self.Electric:TriggerInput("Type",self.Electric.T723) +end + +ENT.AnnouncerPositions = { +} +for i=1,4 do + table.insert(ENT.AnnouncerPositions,{Vector(323-(i-1)*230+37.5,47 ,44),100,0.1}) + table.insert(ENT.AnnouncerPositions,{Vector(323-(i-1)*230,-47,44),100,0.1}) +end +--------------------------------------------------- +-- Defined train information +-- Types of wagon(for wagon limit system): +-- 0 = Head or intherim +-- 1 = Only head +-- 2 = Only intherim +--------------------------------------------------- +ENT.SubwayTrain = { + Type = "81-722", + Name = "81-723", + WagType = 2, + Manufacturer = "MVM", + EKKType = 722, +} +ENT.NumberRanges = {{23001,23200}} diff --git a/lua/entities/gmod_subway_81-724/cl_init.lua b/lua/entities/gmod_subway_81-724/cl_init.lua new file mode 100644 index 0000000..93d5ca5 --- /dev/null +++ b/lua/entities/gmod_subway_81-724/cl_init.lua @@ -0,0 +1,753 @@ +-------------------------------------------------------------------------------- +-- 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["PVZ"] = { + pos = Vector(-461,28,-12), --446 -- 14 -- -0,5 + ang = Angle(0,90-10,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.4, snd = function(val) return val and "sf_on" or "sf_off" end, + sndmin = 90, sndmax = 1e3, + } + --end +end + + +ENT.ButtonMap["FrontPneumatic"] = { + pos = Vector(468.0,-45.0,-58.5), + 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(449+13, -30+0.5, -69), + ang = Angle( 15,-90,0), + hide = 2,30 +} +ENT.ClientProps["FrontTrain"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_blue.mdl", + pos = Vector(449+13, 30+0.5, -69), + 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-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["FrontDoor"] = { + pos = Vector(462,17,41.3), --28 + ang = Angle(0,-90,90), + width = 680, + height = 2000, + scale = 0.1/2, + buttons = { + {ID = "FrontDoor",x=0,y=0,w=680,h=2000, tooltip="ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ", model = { + var="FrontDoor",sndid="door_cab_f", + 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="ЗаднÑÑ Ð´Ð²ÐµÑ€ÑŒ", model = { + var="RearDoor",sndid="door_cab_b", + 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["salon"] = { + model = "models/metrostroi_train/81-722/723_salon1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["salon2"] = { + model = "models/metrostroi_train/81-722/723_salon2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +ENT.ClientProps["underwagon"] = { + model = "models/metrostroi_train/81-722/724_underwagon.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} +-------------------------------------------------------------------------------- +-- 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_f"] = { + model = "models/metrostroi_train/81-722/81-722_door_cab_t.mdl", + pos = Vector(460.4,-18,-9), + ang = Angle(0,90,-0.15), + hide=2, +} +ENT.ClientProps["door_cab_b"] = { + 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.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, +} + +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["lamps_salon"] = { + model = "models/metrostroi_train/81-722/723_lamps_full.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), +} + +ENT.ClientProps["lamps_salon"] = { + model = "models/metrostroi_train/81-722/723_lamps_full.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 1.5, +} + +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, +} +ENT.ClientProps["otsek3"] = { + model = "models/metrostroi_train/81-722/81-722_otsek1.mdl", + pos = Vector(448,54.6,-29.2), + ang = Angle(0,90,0), + hideseat=1.7, +} +ENT.ClientProps["otsek4"] = { + model = "models/metrostroi_train/81-722/81-722_otsek2.mdl", + pos = Vector(448,-54.4,-29.2), + ang = Angle(0,90,0), + hideseat=1.7, +} +ENT.Lights = { + -- Headlight glow + --[2] = { "dynamiclight", Vector( 300, 0, 40), Angle(0,0,0), Color(255,255,255), brightness = 4, distance = 550 }, +} + +ENT.ButtonMap["Tickers1"] = { + pos = Vector(-455.4,-11.1,52.8), + ang = Angle(0,90,90), + width = 300, + height = 64, + scale = 0.094, + hideseat=1.5, +} +ENT.ButtonMap["Tickers2"] = { + pos = Vector(2,-11.3,52.5), + ang = Angle(0,90,90+10), + width = 300, + height = 64, + scale = 0.099, + hideseat=1.5, +} +ENT.ButtonMap["Tickers3"] = { + pos = Vector(-5,11.3,52.7), + ang = Angle(0,-90,90+10), + width = 300, + height = 64, + scale = 0.1, + hideseat=1.5, +} +ENT.ButtonMap["Tickers4"] = { + pos = Vector(449.3,11.1,52.8), + ang = Angle(0,-90,90), + width = 300, + height = 64, + scale = 0.094, + hideseat=1.5, +} +function ENT:Initialize() + self.BaseClass.Initialize(self) + + self.Tickers = self:CreateRT("721Tickers",1024,128) + + self.ReleasedPdT = 0 + + self.FrontLeak = 0 + self.RearLeak = 0 + self.ParkingBrake = 0 + self.BPSNBuzzVolume = 0 +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 1 then led = led + snext end + if scurr < 0 then led = math.floor(CurTime()%16.5*2) end + if led_back then + if sleft then + for i=1,4 do if IsValid(self.ClientEnts["led_l_b"..i]) then self.ClientEnts["led_l_b"..i]:SetSkin(math.Clamp(led-((i-1)*8),0,8)) end end + end + if sright then + for i=1,4 do if IsValid(self.ClientEnts["led_r_b"..i]) then self.ClientEnts["led_r_b"..i]:SetSkin(math.Clamp(led-((i-1)*8),0,8)) end end + end + else + if sleft then + for i=1,4 do if IsValid(self.ClientEnts["led_l_f"..i]) then self.ClientEnts["led_l_f"..i]:SetSkin(math.Clamp(led-((i-1)*8),0,8)) end end + end + if sright then + for i=1,4 do if IsValid(self.ClientEnts["led_r_f"..i]) then self.ClientEnts["led_r_f"..i]:SetSkin(math.Clamp(led-((i-1)*8),0,8)) end end + end + end + + local playL = false + local playR = false + 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) + if (state ~= 1 and state ~= 0) ~= self.DoorStates[id] then + if doorstate and state < 1 or not doorstate and state > 0 then + 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 + 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 + self:SetSoundState("doorl",self.DoorSoundState or 0,1) + + local door_f = self:GetPackedBool("FrontDoor") + local door_b = self:GetPackedBool("RearDoor") + local door_cab_f = self:Animate("door_cab_f",door_f and 1 or -0.05,1,0.75, 8, 0.05) + local door_cab_b = self:Animate("door_cab_b",door_b and 1 or -0.05,1,0.75, 8, 0.05) + + local door1s = (door_cab_f < 1 or door_f) + if self.Door1 ~= door1s then + self.Door1 = door1s + self:PlayOnce("FrontDoor","bass",door1s and 1 or 0) + end + local door2s = (door_cab_b < 1 or door_b) + if self.Door2 ~= door2s then + self.Door2 = door2s + self:PlayOnce("RearDoor","bass",door2s and 1 or 0) + end + + local dT = self.DeltaTime + + 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 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 + 4*(-self:GetPackedRatio("BrakeCylinderPressure_dPdT",0)-self.ReleasedPdT)*dT,0,1) + --print(dPdT) + self:SetSoundState("release",math.Clamp(self.ReleasedPdT,0,1)^1.65,1.0) + + 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 + + self:SetSoundState("battery_off_loop", self:GetPackedBool("BattPressed") and 1 or 0,1) + + local work = self:GetPackedBool("AnnPlay") + local UPO = work and self:GetPackedBool("AnnPlayUPO") + + local noise = self:GetNW2Int("AnnouncerNoise", -1) + local volume = self:GetNW2Float("UPOVolume",1) + local noisevolume = self:GetNW2Float("UPONoiseVolume",1) + local buzzvolume = volume + if self.Sounds["announcer1"] and IsValid(self.Sounds["announcer1"]) then buzzvolume = UPO and (1-(self.Sounds["announcer1"]:GetLevel())*math.Rand(0.9,3))*buzzvolume*2 or 0 end + if self.BPSNBuzzVolume > buzzvolume then + self.BPSNBuzzVolume = math.Clamp(self.BPSNBuzzVolume + 8*(buzzvolume-self.BPSNBuzzVolume)*dT,0.1,1) + else + self.BPSNBuzzVolume = math.Clamp(self.BPSNBuzzVolume + 0.4*(buzzvolume-self.BPSNBuzzVolume)*dT,0.1,1) + end + + for k,v in ipairs(self.AnnouncerPositions) do + self:SetSoundState("announcer_noiseW"..k,UPO and noisevolume*volume*0.7 or 0,1) + for i=1,3 do + self:SetSoundState(Format("announcer_noise%d_%d",i,k),(UPO and i==noise) and volume*self.BPSNBuzzVolume*self:GetNW2Float("UPOBuzzVolume",1)*0.7 or 0,1) + end + + if IsValid(self.Sounds["announcer"..k]) then self.Sounds["announcer"..k]:SetVolume(work and v[3]*(UPO and volume or 1) or 0) end + end +end + +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.Tickers) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + for i=1,4 do + self:DrawOnPanel("Tickers"..i,function(...) + if (i==2 or i==3) then + surface.DrawTexturedRectRotated(245,32,490,64,0) + else + surface.DrawTexturedRectRotated(256,32,512,64,0) + end + end) + 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 = {} +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() \ No newline at end of file diff --git a/lua/entities/gmod_subway_81-724/init.lua b/lua/entities/gmod_subway_81-724/init.lua new file mode 100644 index 0000000..f96d3fa --- /dev/null +++ b/lua/entities/gmod_subway_81-724/init.lua @@ -0,0 +1,201 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +ENT.BogeyDistance = 650 -- Needed for gm trainspawner +ENT.SyncTable = { + "SF31","SF32","SF33","SF34","SF35","SF36","SF37","SF38","SF41","SF42","SF43","SF44","SF45","SF46","SF47","SF48","SF49","SF51","SF52","SF53","SF54","SF55","SF56","SF57","SF58","SF59", + + "FrontBrakeLineIsolation","FrontTrainLineIsolation", + "RearBrakeLineIsolation","RearTrainLineIsolation", +} +-------------------------------------------------------------------------------- +function ENT:Initialize() + -- Set model and initialize + self:SetModel("models/metrostroi_train/81-722/81-724.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create seat entities + self.DriverSeat = self:CreateSeat("instructor",Vector(450,11,-35)) + + -- Hide seats + self.DriverSeat:SetRenderMode(RENDERMODE_TRANSALPHA) + self.DriverSeat:SetColor(Color(0,0,0,0)) + + -- Create bogeys + self.FrontBogey = self:CreateBogey(Vector( 322,0,-90),Angle(0,180,0),true,"722") + self.RearBogey = self:CreateBogey(Vector(-333,0,-90),Angle(0,0,0),false,"722") + self.FrontBogey:SetNWBool("Async",true) + self.RearBogey:SetNWBool("Async",true) + self.FrontBogey:SetNWFloat("SqualPitch",0.8) + self.RearBogey:SetNWFloat("SqualPitch",0.8) + self.FrontBogey:SetNWBool("DisableEngines",true) + self.RearBogey:SetNWBool("DisableEngines",true) + if Metrostroi.BogeyOldMap then + self.FrontCouple = self:CreateCouple(Vector( 413.7+7.5,0,-77),Angle(0,0,0),true,"717") + self.RearCouple = self:CreateCouple(Vector(-419-7.5,0,-77),Angle(0,180,0),false,"717") + else + self.FrontCouple = self:CreateCouple(Vector( 420 -8,0,-79),Angle(0,0,0),true,"717") + self.RearCouple = self:CreateCouple(Vector(-419-6.8+8,0,-79),Angle(0,180,0),false,"717") + end + self.FrontBogey.DisableSound = 1 + self.RearBogey.DisableSound = 1 + + self.InteractionZones = { + { + ID = "FrontBrakeLineIsolationToggle", + Pos = Vector(463.3, -34, -65), Radius = 8, + }, + { + ID = "FrontTrainLineIsolationToggle", + Pos = Vector(463.3, 35, -65), Radius = 8, + }, + { + ID = "RearTrainLineIsolationToggle", + Pos = Vector(-469.8, -34, -65), Radius = 8, + }, + { + ID = "RearBrakeLineIsolationToggle", + Pos = Vector(-469.8, 35, -65), Radius = 8, + }, + { + ID = "RearDoor", + Pos = Vector(-464.8, -38, 0), Radius = 20, + }, + { + ID = "FrontDoor", + Pos = Vector(457.8, 36, 0), Radius = 20, + }, + } + + -- Initialize key mapping + self.KeyMap = { + [KEY_F] = "PneumaticBrakeUp", + [KEY_R] = "PneumaticBrakeDown", + [KEY_PAD_1] = "PneumaticBrakeSet1", + [KEY_PAD_2] = "PneumaticBrakeSet2", + [KEY_PAD_3] = "PneumaticBrakeSet3", + [KEY_PAD_4] = "PneumaticBrakeSet4", + [KEY_PAD_5] = "PneumaticBrakeSet5", + [KEY_PAD_6] = "PneumaticBrakeSet6", + } + self.TrainWireInverts = { [8]=true } + -- Cross connections in train wires + self.TrainWireCrossConnections = { + [4] = 3, -- Orientation F<->B + [13] = 12, -- Reverser F<->B + [38] = 37, -- Doors L<->R + } + + self.Lights = { + [10] = { "dynamiclight", Vector( 430, 0, 40), Angle(0,0,0), Color(255,255,255), brightness = 0.05, 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}, + + [15] = { "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" }, + [16] = { "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" }, + [18] = { "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" }, + [19] = { "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" }, + } + self.FrontDoor = false + self.RearDoor = false + + self:SetNW2Float("UPONoiseVolume",math.Rand(0,0.3)) + self:SetNW2Float("UPOVolume",math.Rand(0.8,1)) +end + +-------------------------------------------------------------------------------- +function ENT:Think() + local retVal = self.BaseClass.Think(self) + local power = self.BUKV.Power > 0 + self:SetPackedRatio("Speed", self.Speed) + local passlight = math.min(1,self.Panel.MainLights+self.Panel.EmergencyLights*0.3) + --self:SetLightPower(11,power and mul > 0, mul) + self:SetLightPower(11,passlight > 0, passlight) + self:SetLightPower(12,passlight > 0, passlight) + self:SetLightPower(13,passlight > 0, passlight) + + self:SetPackedBool("BattPressed",self.BUKV.BatteryPressed) + + self:SetNW2Int("PassSchemesLED",self.PassSchemes.PassSchemeCurr) + self:SetNW2Int("PassSchemesLEDN",self.PassSchemes.PassSchemeNext) + self:SetPackedBool("PassSchemesLEDO",self.PassSchemes.PassSchemePath) + self:SetPackedBool("SarmatLeft",self.Panel.PassSchemePowerL) + self:SetPackedBool("SarmatRight",self.Panel.PassSchemePowerR) + + --self:SetPackedRatio("Cran", self.Pneumatic.DriverValvePosition) + --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:SetPackedBool("FrontDoor",self.FrontDoor) + self:SetPackedBool("RearDoor",self.RearDoor) + + self:SetPackedBool("BortPneumo",self.Panel.BrW>0) + self:SetPackedBool("BortLSD",self.Panel.DoorsW>0) + self:SetLightPower(15, self.Panel.DoorsW > 0.5,1) + self:SetLightPower(18, self.Panel.DoorsW > 0.5,1) + self:SetLightPower(16, self.Panel.BrW > 0.5,1) + self:SetLightPower(19, self.Panel.BrW > 0.5,1) + + self:SetPackedRatio("SalonLighting",passlight) + + self:SetPackedBool("DoorAlarmL",self.BUKV.CloseRing) + self:SetPackedBool("DoorAlarmR",self.BUKV.CloseRing) + + self:SetPackedBool("AnnPlay",self.Panel.AnnouncerPlaying > 0) + self:SetPackedBool("AnnPlayUPO",self.Announcer.AnnTable=="AnnouncementsUPO") + + if IsValid(self.FrontBogey) and IsValid(self.RearBogey) and not self.IgnoreEngine then + --local A = 2*self.Engines.BogeyMoment + self.FrontBogey.MotorForce = 35300 + self.FrontBogey.Reversed = self:ReadTrainWire(13) > 0 + self.FrontBogey.DisableSound = 1 + self.RearBogey.MotorForce = 35300--0 + self.RearBogey.Reversed = self:ReadTrainWire(13) == 0 + self.RearBogey.DisableSound = 1 + + -- These corrections are required to beat source engine friction at very low values of motor power + --local A = self.AsyncInverter.Torque + --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 = 0--P*0.5*((A > 0) and 1 or -1) + self.FrontBogey.MotorPower = 0--P*0.5*((A > 0) and 1 or -1) + + -- Apply brakes + self.FrontBogey.PneumaticBrakeForce = 50000.0--3000 --40000 + self.FrontBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + self.FrontBogey.ParkingBrakePressure = math.max(0,(3-self.Pneumatic.ParkingBrakePressure)/3)/2 + self.FrontBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + self.RearBogey.PneumaticBrakeForce = 50000.0--3000 --40000 + self.RearBogey.BrakeCylinderPressure = self.Pneumatic.BrakeCylinderPressure + self.RearBogey.BrakeCylinderPressure_dPdT = -self.Pneumatic.BrakeCylinderPressure_dPdT + self.RearBogey.ParkingBrakePressure = math.max(0,(3-self.Pneumatic.ParkingBrakePressure)/3)/2 + end + return retVal +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 + +function ENT:OnButtonPress(button,ply) + if button == "FrontDoor" then self.FrontDoor = not self.FrontDoor end + if button == "RearDoor" then self.RearDoor = not self.RearDoor end +end diff --git a/lua/entities/gmod_subway_81-724/shared.lua b/lua/entities/gmod_subway_81-724/shared.lua new file mode 100644 index 0000000..a2a1ae4 --- /dev/null +++ b/lua/entities/gmod_subway_81-724/shared.lua @@ -0,0 +1,164 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" +ENT.SkinsType = "81-722" +ENT.Model = "models/metrostroi_train/81-722/81-724.mdl" + +ENT.Spawnable = true +ENT.AdminSpawnable = false +ENT.DontAccelerateSimulation = false + +function ENT:PassengerCapacity() + return 300 +end + +function ENT:GetStandingArea() + return Vector(-450,-30,-62),Vector(380,30,-62) +end + +local function GetDoorPosition(i,k) + return Vector(377.0 - 36.0 + 1*(k) - 230*i,-64*(1-2*k),-10) +end + +-- 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["release"] = {loop=true,"subway_trains/722/pneumo_release2.wav"} + self.SoundPositions["release"] = {320,1e9,Vector(-183,0,-70),0.1} --FIXME: Pos + self.SoundNames["parking_brake"] = {loop=true,"subway_trains/common/pneumatic/autostop_loop.wav"} + self.SoundPositions["parking_brake"] = {400,1e9,Vector(-183,0,-70),0.95} + self.SoundNames["disconnect_valve"] = "subway_trains/common/switches/pneumo_disconnect_switch.mp3" + + self.SoundNames["front_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["front_isolation"] = {300,1e9,Vector(462, 0,-63),1} + self.SoundNames["rear_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["rear_isolation"] = {300,1e9,Vector(-469, 0,-63),1} + + self.SoundNames["sf_on"] = "subway_trains/722/switches/sf_on.mp3" + self.SoundNames["sf_off"] = "subway_trains/722/switches/sf_off.mp3" + + self.SoundNames["rolling_10"] = {loop=true,"subway_trains/722/rolling_10.wav"} + self.SoundNames["rolling_45"] = {loop=true,"subway_trains/722/rolling_45.wav"} + self.SoundNames["rolling_60"] = {loop=true,"subway_trains/722/rolling_60.wav"} + self.SoundNames["rolling_70"] = {loop=true,"subway_trains/722/rolling_70.wav"} + self.SoundPositions["rolling_10"] = {485,1e9,Vector(0,0,0),0.20} + self.SoundPositions["rolling_45"] = {485,1e9,Vector(0,0,0),0.50} + self.SoundPositions["rolling_60"] = {485,1e9,Vector(0,0,0),0.55} + self.SoundPositions["rolling_70"] = {485,1e9,Vector(0,0,0),0.60} + 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*0.4} + self.SoundPositions["rolling_medium1"] = {480,1e12,Vector(0,0,0),0.90*0.4} + self.SoundPositions["rolling_medium2"] = {480,1e12,Vector(0,0,0),0.90*0.4} + self.SoundPositions["rolling_high2"] = {480,1e12,Vector(0,0,0),1.00*0.4} + + self.SoundNames["battery_on_1"] = "subway_trains/722/battery/battery_off_1.mp3" + self.SoundPositions["battery_on_1"] = {100,1e9,Vector(182,50,-75),0.5} + self.SoundNames["battery_off_1"] = "subway_trains/722/battery/battery_off_1.mp3" + self.SoundPositions["battery_off_1"] = {100,1e9,Vector(182,50,-75),0.5} + self.SoundNames["battery_off_2"] = "subway_trains/722/battery/battery_off_2.mp3" + self.SoundPositions["battery_off_2"] = {100,1e9,Vector(182,50,-75),0.5} + self.SoundNames["battery_off_stop"] = "subway_trains/722/battery/battery_off_stop.mp3" + self.SoundPositions["battery_off_stop"] = {120,1e9,Vector(182,50,-75),0.5} + self.SoundNames["battery_pneumo"] = "subway_trains/722/battery/battery_pneumo.mp3" + self.SoundPositions["battery_pneumo"] = {120,1e9,Vector(182,50,-75),0.1} + self.SoundNames["battery_off_loop"] = {loop=true,"subway_trains/722/battery/battery_off_loop.wav"} + self.SoundPositions["battery_off_loop"] = {100,1e9,Vector(182,50,-75),0.02} + + self.SoundNames["door_alarm"] = "subway_trains/722/door_alarm.mp3" + self.SoundPositions["door_alarm"] = {800,1e9,Vector(0,0,0),0.5} + + self.SoundNames["door_cab_open"] = "subway_trains/common/door/cab/door_open.mp3" + self.SoundNames["door_cab_close"] = "subway_trains/common/door/cab/door_close.mp3" + + self.SoundNames["doors"] = "subway_trains/722/door_start.mp3" + self.SoundNames["doorl"] = {loop=true,"subway_trains/722/door_loop.wav"} + self.SoundPositions["doors"] = {300,1e9,Vector(0,0,0),0.5} + self.SoundPositions["doorl"] = {300,1e9,Vector(0,0,0),0.5} + for i=0,3 do + for k=0,1 do + self.SoundNames["door"..i.."x"..k.."c"] = "subway_trains/722/door_close.mp3" + self.SoundPositions["door"..i.."x"..k.."c"] = {800,1e9,GetDoorPosition(i,k),0.2} + end + end + self.SoundNames["door_alarm"] = {"subway_trains/722/door_alarm.mp3"} + self.SoundPositions["door_alarm"] = {800,1e9,Vector(0,0,0),0.5} + for i = 1,10 do + local id1 = Format("b1tunnel_%d",i) + local id2 = Format("b2tunnel_%d",i) + self.SoundPositions[id1.."a"] = {700*0.75,1e9,Vector( 317-5,0,-84),1*0.5} + self.SoundPositions[id1.."b"] = self.SoundPositions[id1.."a"] + self.SoundPositions[id2.."a"] = {700*0.75,1e9,Vector(-317+0,0,-84),1*0.5} + self.SoundPositions[id2.."b"] = self.SoundPositions[id2.."a"] + 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.2} + 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.2} + self.SoundNames["announcer_noise3_"..k] = {loop=true,"subway_announcers/upo/noiseS3.wav"} + self.SoundPositions["announcer_noise3_"..k] = {v[2] or 300,1e9,v[1],v[3]*0.2} + self.SoundNames["announcer_noiseW"..k] = {loop=true,"subway_announcers/upo/noiseW.wav"} + self.SoundPositions["announcer_noiseW"..k] = {v[2] or 300,1e9,v[1],v[3]*0.2} + end +end + +function ENT:InitializeSystems() + self:LoadSystem("TR","TR_3B") + self:LoadSystem("Electric","81_722_Electric") + + self:LoadSystem("AsyncInverter","81_722_AsyncInverter") + + self:LoadSystem("BUKV","81_722_BUKV") + + self:LoadSystem("Pneumatic","81_722_Pneumatic") + --self:LoadSystem("Horn","81_722_Horn") + + + self:LoadSystem("Panel","81_724_Panel") + + self:LoadSystem("Announcer","81_71_Announcer", "AnnouncementsSarmatUPO") + self:LoadSystem("Tickers","81_722_Tickers") + self:LoadSystem("PassSchemes","81_722_PassScheme") + +end + +function ENT:PostInitializeSystems() + self.Electric:TriggerInput("Type",self.Electric.T724) +end + +ENT.AnnouncerPositions = { +} +for i=1,4 do + table.insert(ENT.AnnouncerPositions,{Vector(323-(i-1)*230+37.5,47 ,44),100,0.1}) + table.insert(ENT.AnnouncerPositions,{Vector(323-(i-1)*230,-47,44),100,0.1}) +end +--------------------------------------------------- +-- Defined train information +-- Types(for wagon limit system): +-- 0 = Head or intherim +-- 1 = Only head +-- 2 = Only intherim +--------------------------------------------------- +ENT.SubwayTrain = { + Type = "81-722", + Name = "81-723", + WagType = 2, + Manufacturer = "MVM", + EKKType = 722, +} +ENT.NumberRanges = {{24001,24200}} diff --git a/lua/entities/gmod_subway_base/cl_init.lua b/lua/entities/gmod_subway_base/cl_init.lua new file mode 100644 index 0000000..e3864f5 --- /dev/null +++ b/lua/entities/gmod_subway_base/cl_init.lua @@ -0,0 +1,2721 @@ +include("shared.lua") + +--if LocalPlayer():GetName():find("iNok") then RunConsoleCommand("say","ЛВЗ говно, обажаю МВМ") end +surface.CreateFont("MetrostroiSubway_LargeText", { + font = "Arial", + size = 100, + weight = 500, + blursize = 0, + scanlines = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true +}) +surface.CreateFont("MetrostroiSubway_SmallText", { + font = "Arial", + size = 70, + weight = 1000, + blursize = 0, + scanlines = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true +}) +surface.CreateFont("MetrostroiSubway_VerySmallText", { + font = "Arial", + size = 45, + weight = 1000, + blursize = 0, + scanlines = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true +}) +surface.CreateFont("MetrostroiSubway_VerySmallText2", { + font = "Arial", + size = 35, + weight = 1000, + blursize = 0, + scanlines = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false + }) + surface.CreateFont("MetrostroiSubway_VerySmallText3", { + font = "Arial", + size = 25, + weight = 1000, + blursize = 0, + scanlines = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true +}) +surface.CreateFont("MetrostroiSubway_LargeText2", { + font = "Arial", + size = 86, + weight = 1000, + blursize = 0, + scanlines = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true +}) +surface.CreateFont("MetrostroiSubway_LargeText3", { + font = "Arial", + size = 66, + weight = 1000, + blursize = 0, + scanlines = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true +}) + +surface.CreateFont("MetrostroiLabels", { + font = "BudgetLabel", + size = 15, + weight = 400, + blursize = 0, + scanlines = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = true, + additive = true, + outline = true, + extended = true +}) +surface.CreateFont("MetrostroiSubway_IGLAb", { + font = "IEE2", + size = 30, + weight = 0, + blursize = 3, + scanlines = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = true, + additive = true, + outline = true, + extended = true +}) +surface.CreateFont("MetrostroiSubway_IGLA", { + font = "IEE2", + size = 30, + weight = 0, + blursize = 0, + scanlines = 0, + antialias = false, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true +}) +surface.CreateFont("MetrostroiSubway_FixedSYS", { + font = "FixedsysTTF", + size = 40, + weight = 0, + blursize = 0, + scanlines = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true +}) +surface.CreateFont("MetrostroiSubway_Speed", { + font = "LCD AT&T Phone Time/Date", + size = 200, + weight = 400, + blursize = 0, + scanlines = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false +}) +surface.CreateFont("MetrostroiSubway_InfoPanel", { + font = "Arial", + size = 64, + weight = 0, + blursize = 0, + scanlines = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true +}) +surface.CreateFont("MetrostroiSubway_InfoRoute", { + font = "Arial", + size = 80, + weight = 800, + blursize = 0, + scanlines = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true +}) +surface.CreateFont("Trebuchet24", { --Creating BUILTIN font (idk what happened with this font') + font = "Trebuchet", + size = 24, + weight = 400, + blursize = 0, + scanlines = 10, + antialias = true, + additive = false, + extended = true +}) +-------------------------------------------------------------------------------- +-- Console commands and convars +-------------------------------------------------------------------------------- +concommand.Add("metrostroi_train_manual", function()--ply, _, args) +--[[ local w = ScrW() * 2/3 + local h = ScrH() * 2/3 + local browserWindow = vgui.Create("DFrame") + browserWindow:SetTitle("Train Manual") + browserWindow:SetPos((ScrW() - w)/2, (ScrH() - h)/2) + browserWindow:SetSize(w,h) + browserWindow.OnClose = function() + browser = nil + browserWindow = nil + end + browserWindow:MakePopup() + + local browser = vgui.Create("DHTML",browserWindow) + browser:SetPos(10, 25) + browser:SetSize(w - 20, h - 35) + + browser:OpenURL + ]]-- + gui.OpenURL("http://phoenixblack.github.io/Metrostroi/manual.html") +end) +ENT.RTMaterial = CreateMaterial("MetrostroiRT1","UnlitGeneric",{ + ["$vertexcolor"] = 0, + ["$vertexalpha"] = 1, + ["$nolod"] = 1, +}) +ENT.RTMaterial2 = CreateMaterial("MetrostroiRT2","UnlitGeneric",{ + ["$vertexcolor"] = 0, + ["$vertexalpha"] = 0, + ["$nolod"] = 1, +}) +ENT.RTScanlineMaterial = CreateMaterial("MetrostroiRTScanline","UnlitGeneric",{ + ["$vertexcolor"] = 1, + ["$vertexalpha"] = 1, + ["$nolod"] = 1, +}) + +function ENT:CreateRT(name, w, h) + local RT = GetRenderTarget("Metrostroi"..self:EntIndex()..":"..name, w or 512, h or 512) + if not RT then Error("Can't create RT\n") end + --mat:SetTexture("$basetexture", RT) + return RT +end + +local C_DisableHUD = GetConVar("metrostroi_disablehud") +local C_RenderDistance = GetConVar("metrostroi_renderdistance") +local C_SoftDraw = GetConVar("metrostroi_softdrawmultipier") +local C_ScreenshotMode = GetConVar("metrostroi_screenshotmode") +local C_DrawDebug = GetConVar("metrostroi_drawdebug") +local C_CabFOV = GetConVar("metrostroi_cabfov") +local C_CabZ = GetConVar("metrostroi_cabz") +local C_FovDesired = GetConVar("fov_desired") +local C_MinimizedShow = GetConVar("metrostroi_minimizedshow") +local C_Shadows1 = GetConVar("metrostroi_shadows1") +local C_Shadows2 = GetConVar("metrostroi_shadows2") +local C_Shadows3 = GetConVar("metrostroi_shadows3") +local C_Shadows4 = GetConVar("metrostroi_shadows4") +local C_AA = GetConVar("mat_antialias") +local C_Sprites = GetConVar("metrostroi_sprites") +local whitelist = { + ["CHudChat"] = true, + ["CHudDeathNotice"] = true, + ["CHudGMod"] = true, +} +hook.Add("HUDShouldDraw","MetrostroiHUDHider",function(name) + if LocalPlayer().InMetrostroiTrain and C_DisableHUD:GetBool() and not whitelist[name] then return false end +end) +-------------------------------------------------------------------------------- +-- Buttons layout +-------------------------------------------------------------------------------- +--ENT.ButtonMap = {} Leave nil if unused + +-- General Panel +--[[table.insert(ENT.ButtonMap,{ + pos = Vector(7,0,0), + ang = Angle(0,90,90), + width = 300, + height = 100, + scale = 0.0625, + + buttons = { + {ID=1, x=-117, y= 0, radius=20, tooltip="Test 1"}, + {ID=2, x= -80, y= 0, radius=20, tooltip="Test 2"}, + } +})]]-- + + +-------------------------------------------------------------------------------- +-- Decoration props +-------------------------------------------------------------------------------- +ENT.ClientProps = {} + +-------------------------------------------------------------------------------- +-- Clientside entities support +-------------------------------------------------------------------------------- +local lastButton +local lastTouch +local drawCrosshair +local canDrawCrosshair +local toolTipText +local toolTipColor +local lastAimButtonChange +local lastAimButton + +function ENT:ShouldRenderClientEnts() + return not self:IsDormant() and math.abs(LocalPlayer():GetPos().z - self:GetPos().z) < 500 and (system.HasFocus() or C_MinimizedShow:GetBool()) and (not Metrostroi or not Metrostroi.ReloadClientside) +end +function ENT:ShouldDrawPanel(v) + return not self.HiddenPanelsDistance[v] and not self.HiddenPanels[v] +end +function ENT:ShouldDrawClientEnt(k,v) + if self.Hidden[k] or self.Hidden.anim[k] then return false end + v = v or self.ClientProps[k] + if not v then return false end + local distance = LocalPlayer():GetPos():Distance(self:LocalToWorld(v.pos)) + local renderDist = C_RenderDistance:GetFloat() + if v.nohide then return true end + if v.hideseat then + local seat = LocalPlayer():GetVehicle() + if IsValid(seat) and self ~= seat:GetParent() then + return false + end + if v.hideseat ~= true then + return distance <= renderDist*v.hideseat + end + elseif v.hide then + return distance <= renderDist*v.hide + else + return distance <= renderDist + end +end +--util.PrecacheModel("models/metrostroi_train/81-720/81-720.mdl") +function ENT:SpawnCSEnt(k,override) + if override and (self.Hidden[k] or self.Hidden.anim[k]) or not override and not self:ShouldDrawClientEnt(k,self.ClientProps[k]) then return false end + local v = self.ClientPropsOv and self.ClientPropsOv[k] or self.ClientProps[k] + if v and not IsValid(self.ClientEnts[k]) and v.model ~= "" then + --local cent = ents.CreateClientProp(LocalPlayer():GetModel()) + local model = v.model + if v.modelcallback then model = v.modelcallback(self) or v.model end + local cent = ClientsideModel(model,RENDERGROUP_OPAQUE) + cent.GetBodyColor = function() + if not IsValid(self) then return Vector(1) end + return self:GetBodyColor() + end + cent.GetDirtLevel = function() + if not IsValid(self) then return 0.25 end + return self:GetDirtLevel() + end + --cent:SetModel( v.model ) + cent:SetParent(self) + cent:SetPos(self:LocalToWorld(v.pos)) + cent:SetAngles(self:LocalToWorldAngles(v.ang)) + cent:SetLOD(C_ScreenshotMode:GetBool() and 0 or -1) + --[[ + hook.Add("MetrostroiBigLag",cent,function(ent) + --print(ent:GetLocalPos()) + ent:SetLocalPos(ent:GetLocalPos()) + ent:SetLocalAngles(ent:GetLocalAngles()) + --if ent.Spawned then hook.Remove("MetrostroiBigLag",ent) end + --ent.Spawned = true + end)]] + cent:SetSkin(v.skin or 0) + if v.scale then cent:SetModelScale(v.scale) end + if v.bscale then cent:ManipulateBoneScale(0,v.bscale) end + if self.Anims[k] and self.Anims[k].value and type(self.Anims[k].value) == "number" then + cent:SetPoseParameter("position",self.Anims[k].value) + end + + + if v.bodygroup then + for k1,v1 in pairs(v.bodygroup) do + cent:SetBodygroup(v1,k1) + end + end + if v.lamps then + for i,k in ipairs(v.lamps) do + self.HiddenLamps[k] = false + end + end + cent.lamps = v.lamps + + local texture = Metrostroi.Skins["train"][self:GetNW2String("Texture")] + local passtexture = Metrostroi.Skins["pass"][self:GetNW2String("PassTexture")] + local cabintexture = Metrostroi.Skins["cab"][self:GetNW2String("CabTexture")] + for k1,v1 in pairs(cent:GetMaterials() or {}) do + local tex = v1:gsub("^.+/","") + if cabintexture and cabintexture.textures and cabintexture.textures[tex] then + if type(cabintexture.textures[tex]) ~= "table" then + cent:SetSubMaterial(k1-1,cabintexture.textures[tex]) + end + end + if passtexture and passtexture.textures and passtexture.textures[tex] then + cent:SetSubMaterial(k1-1,passtexture.textures[tex]) + end + if texture and texture.textures and texture.textures[tex] then + cent:SetSubMaterial(k1-1,texture.textures[tex]) + end + end + + self.ClientEnts[k] = cent + if self.SmoothHide[k] then + if self.SmoothHide[k] > 0 then + cent:SetColor(ColorAlpha(v.color or color_white,self.SmoothHide[k]*255)) + cent:SetRenderMode(RENDERMODE_TRANSALPHA) + else + cent:Remove() + self:ShowHide(k, false,true) + end + elseif v.colora then + cent:SetRenderMode(RENDERMODE_TRANSCOLOR) + cent:SetColor(v.colora) + else + cent:SetColor(v.color or color_white) + end + + cent.BASSSounds = {} + cent.DestroySound = self.DestroySound + cent.Think = function(ent) + for k,v in pairs(ent.BASSSounds) do + if not IsValid(v) or v:GetState() == GMOD_CHANNEL_STOPPED then + self:DestroySound(v) + table.remove(ent.BASSSounds,k) + end + end + ent:SetNextClientThink(CurTime()+0.5) + return true + end + cent.CalcAbsolutePosition = function(ent,pos,ang) + for k,v in pairs(ent.BASSSounds) do + if IsValid(v) and v:GetState() ~= GMOD_CHANNEL_STOPPED then + v:SetPos(pos,ang:Forward()) + end + end + end + if v.lamps then + cent:CallOnRemove("RemoveLights", function(ent) + if IsValid(self) then + for i,k in ipairs(ent.lamps) do + self:SetLightPower(k,false) + self.HiddenLamps[k] = true + end + end + end) + end + self:ShowHide(k, not self.Hidden[k],true) + if v.callback then v.callback(self,cent) end + return true + end + return false +end + +function ENT:GetBodyColor() + return self:GetNW2Vector("BodyColor",Vector(1,1,1)) +end +function ENT:GetDirtLevel() + return self:GetNW2Float("DirtLevel",0.25) +end +hook.Remove("Think","metrostroi_collect_garbage",function() + if Metrostroi.CollectGarbage then + collectgarbage("collect") + Metrostroi.CollectGarbage = false + end +end) +hook.Add("EntityRemoved","metrostroi_bass_disable",function(ent) + if ent.BASSSounds then + for k,v in pairs(ent.BASSSounds) do + ent:DestroySound(v) + ent.BASSSounds[k] = nil + end + end +end) +function ENT:SetCSBodygroup(csent,id,value) + if not self.ClientProps[csent].bodygroup then self.ClientProps[csent].bodygroup = {} end + self.ClientProps[csent].bodygroup[id] = value + if IsValid(self.ClientEnts[csent]) then self.ClientEnts[csent]:SetBodygroup(id,value) end +end +local elapsed = SysTime() +local spawnedCount = 0 +hook.Add("Think","SpawnElasped",function() elapsed = SysTime() spawnedCount = 0 end) +function ENT:CreateCSEnts() + local mul = C_SoftDraw:GetFloat()/100 + local time = mul*0.01 + if self.ClientPropsOv then + for k in pairs(self.ClientPropsOv) do + if k ~= "BaseClass" and not IsValid(self.ClientEnts[k]) and self:SpawnCSEnt(k)then + if SysTime()-elapsed > time then + return false + end + end + end + end + --RunConsoleCommand("say","1:"..tostring(elapsed)) + for k in pairs(self.ClientProps) do + if k ~= "BaseClass" and not IsValid(self.ClientEnts[k]) then + if spawnedCount*mul*3 > 4 and SysTime()-elapsed > time then + return false + end + if self:SpawnCSEnt(k) then spawnedCount = spawnedCount + 1 end + --RunConsoleCommand("say","1:") + end + end + return true +end + +function ENT:RemoveCSEnt(id) + if self.ClientEnts and self.ClientEnts[id] then + SafeRemoveEntity(self.ClientEnts[id]) + self.ClientEnts[id] = nil + end +end + +function ENT:RemoveCSEnts() + if self.ClientEnts then + for _,v in pairs(self.ClientEnts) do + if IsValid(v) then + v:Remove() + end + end + end + if(self.GlowingLights) then + for k,v in pairs(self.GlowingLights) do + if IsValid(v) and v.Remove then + v:Remove() + end + end + end + self.ClientEnts = {} + self.GlowingLights = {} + self.Sprites = {} +end + + +-- Checks if the player is driving a train, also returns said train +local function isValidTrainDriver(ply) + if IsValid(ply.InMetrostroiTrain) then return ply.InMetrostroiTrain end + + local weapon = IsValid(LocalPlayer():GetActiveWeapon()) and LocalPlayer():GetActiveWeapon():GetClass() + if weapon ~= "train_kv_wrench" and weapon ~= "train_kv_wrench_gold" then return end + + local train = util.TraceLine({ + start = LocalPlayer():GetPos(), + endpos = LocalPlayer():GetPos() - LocalPlayer():GetAngles():Up() * 100, + filter = function( ent ) if ent.ButtonMap ~= nil then return true end end + }).Entity + if not IsValid(train) then + train = util.TraceLine({ + start = LocalPlayer():EyePos(), + endpos = LocalPlayer():EyePos() + LocalPlayer():EyeAngles():Forward() * 300, + filter = function( ent ) if ent.ButtonMap ~= nil then return true end end + }).Entity + end + return IsValid(train) and train, true +end +-------------------------------------------------------------------------------- +-- Clientside initialization +-------------------------------------------------------------------------------- +function ENT:CanDrawThings() + return not LocalPlayer().InMetrostroiTrain or self == LocalPlayer().InMetrostroiTrain +end +local function colAlpha(col,a) + return Color(col.r*a,col.g*a,col.b*a) +end +hook.Add("PostDrawTranslucentRenderables", "metrostroi_base_draw", function(_,isDD) + if isDD then return end + for ent in pairs(Metrostroi.SpawnedTrains) do + if ent:IsDormant() then continue end + if MetrostroiStarted and MetrostroiStarted~=true or ent.RenderBlock then + local timeleft = (math.max(0,(MetrostroiStarted and MetrostroiStarted~=true) and 3-(RealTime()-MetrostroiStarted) or 3-(RealTime()-ent.RenderBlock)))+0.99 + cam.Start3D2D(ent:LocalToWorld(Vector(0,-200,100)),ent:LocalToWorldAngles(Angle(0,90,90)),2) + draw.SimpleText("Wait, train will be available across "..string.NiceTime(timeleft)) + cam.End3D2D() + cam.Start3D2D(ent:LocalToWorld(Vector(0,200,100)),ent:LocalToWorldAngles(Angle(0,-90,90)),2) + draw.SimpleText("Wait, train will be available across "..string.NiceTime(timeleft)) + cam.End3D2D() + return + end + cam.IgnoreZ(true) + for i,vHandle in pairs(ent.Sprites) do + local br = ent.LightBrightness[i] + local lightData = ent.LightsOverride[i] or ent.Lights[i] + if lightData[1] ~= "glow" and lightData[1] ~= "light" or br <= 0 then continue end + + local pos = ent:LocalToWorld(lightData[2]) + local visibility = util.PixelVisible(pos, lightData.size or 5, vHandle)--math.max(0,util.PixelVisible(pos, 5, vHandle)-0.25)/0.75 + if visibility > 0 then + render.SetMaterial(lightData.mat) + render.DrawSprite(pos,128*lightData.scale,128*(lightData.vscale or lightData.scale),colAlpha(lightData[4] or Color(255,255,255),visibility*br)) + --render.DrawQuadEasy( ent:GetPos(),-EyeVector(), 128*ent.Scale, 128*ent.Scale, ent:GetColor()) + end + end + cam.IgnoreZ(false) + if not ent.ShouldRenderClientEnts or not ent:ShouldRenderClientEnts() then continue end + + if ent.DrawPost then ent:DrawPost(not ent:CanDrawThings()) end + if not ent:CanDrawThings() then continue end + ent.CLDraw = true + + if ent.Systems then + for _,v in pairs(ent.Systems) do + v:ClientDraw() + end + end + end +end) + +local function enableDebug() + if C_DrawDebug:GetInt() > 0 then + hook.Add("PostDrawTranslucentRenderables","MetrostroiTrainDebug",function(bDrawingDepth,bDrawingSkybox) + if bDrawingSkybox then return end + for ent in pairs(Metrostroi.SpawnedTrains) do + -- Debug draw for buttons + if ent.ButtonMap ~= nil then + draw.NoTexture() + for kp,panel in pairs(ent.ButtonMap) do + if kp ~= "BaseClass" and LocalPlayer():GetPos():Distance(ent:LocalToWorld(panel.pos)) < 512 then + ent:DrawOnPanel(kp,function() + surface.SetDrawColor(0,0,255) + if not ent:ShouldDrawPanel(kp) then surface.SetDrawColor(255,0,0) end + surface.DrawOutlinedRect(0,0,panel.width,panel.height) + + if panel.aimX and panel.aimY then + surface.SetTextColor(255,255,255) + surface.SetFont("BudgetLabel") + surface.SetTextPos(panel.width/2,5) + surface.DrawText(string.format("%d %d",panel.aimX,panel.aimY)) + end + + + --surface.SetDrawColor(255,255,255) + --surface.DrawRect(0,0,panel.width,panel.height) + if panel.buttons then + + surface.SetAlphaMultiplier(0.2) + if ent.HiddenPanels[kp] then surface.SetAlphaMultiplier(0.1) end + + for kb,button in pairs(panel.buttons) do + if ent.Hidden[button.PropName] or ent.Hidden[button.ID] or ent.Hidden.anim[button.PropName] or ent.Hidden.anim[button.ID] or ent.Hidden.button[button.PropName] or ent.Hidden.button[button.ID] then + surface.SetDrawColor(255,255,0) + elseif ent.Hidden[kb] or ent.Hidden.anim[kb] then + surface.SetDrawColor(255,255,0) + elseif ent.HiddenPanels[kp] then + surface.SetDrawColor(100,0,0) + elseif not button.ID or button.ID[1] == "!" then + surface.SetDrawColor(25,40,180) + elseif button.state then + surface.SetDrawColor(255,0,0) + else + surface.SetDrawColor(0,255,0) + end + + if button.w and button.h then + surface.DrawRect(button.x, button.y, button.w, button.h) + surface.DrawRect(button.x + button.w/2 - 8,button.y + button.h/2 - 8,16,16) + else + ent:DrawCircle(button.x,button.y,button.radius or 10) + surface.DrawRect(button.x-8,button.y-8,16,16) + end + end + + --Gotta reset this otherwise the qmenu draws transparent as well + surface.SetAlphaMultiplier(1) + + end + + + end,true) + end + end + end + end + end) + else + hook.Remove("PostDrawTranslucentRenderables","MetrostroiTrainDebug") + end +end +hook.Remove("PostDrawTranslucentRenderables","MetrostroiTrainDebug") +cvars.AddChangeCallback( "metrostroi_drawdebug", enableDebug) +enableDebug() + +local function recurePrecache(sound) + if type(sound) == "table" then + for k,snd in pairs(sound) do recurePrecache(snd) end + elseif type(sound) == "string" then + --util.PrecacheSound(sound) + end +end + + +function ENT:GetWagonNumber() + local number = self:GetNW2Int("WagonNumber",-1) + if number <= 0 then + number = self:EntIndex() + end + return number +end +function ENT:Initialize() + -- Create clientside props + self.ClientEnts = {} + self.HiddenPanels = {} + self.HiddenPanelsDistance = {} + self.HiddenLamps = {} + self.Hidden = { + anim = {},button = {},override = {}, + } + self.Anims = {} + self.SmoothHide = {} + -- Create sounds + self:InitializeSounds() + recurePrecache(self.SoundNames) + self.Sounds = { + loop = {}, + isloop = {}, + } + self.CurrentCamera = 0 + self.Sprites = {} + if self.NoTrain then return end + self.ButtonMapMatrix = {} + -- Passenger models + self.PassengerEnts = {} + self.PassengerEntsStucked = {} + self.PassengerPositions = {} + --self.HiddenQuele = {} + -- Systems defined in the train + self.Systems = {} + -- Initialize train systems + self:InitializeSystems() + + self.GlowingLights = {} + self.LightBrightness = {} + self.LightsOverride = {} + if self.Lights then + for i,lightData in pairs(self.Lights) do + if lightData.changable then + self.LightsOverride[i] = table.Copy(lightData) + end + end + end + --self:EntIndex() + self.PassengerModels = { + "models/metrostroi/passengers/f1.mdl", + "models/metrostroi/passengers/f2.mdl", + "models/metrostroi/passengers/f3.mdl", + "models/metrostroi/passengers/f4.mdl", + "models/metrostroi/passengers/m1.mdl", + "models/metrostroi/passengers/m2.mdl", + "models/metrostroi/passengers/m4.mdl", + "models/metrostroi/passengers/m5.mdl", + } + + self.WagonNumber = 0 + self:PostInitializeSystems() + + self.TunnelCoeff = 0 + self.StreetCoeff = 0 + self.Street = 0 +end + +function ENT:UpdateTextures() + self.Texture = self:GetNW2String("Texture") + self.PassTexture = self:GetNW2String("PassTexture") + self.CabinTexture = self:GetNW2String("CabTexture") + + local texture = Metrostroi.Skins["train"][self.Texture] + local passtexture = Metrostroi.Skins["pass"][self.PassTexture] + local cabintexture = Metrostroi.Skins["cab"][self.CabinTexture] + for id,ent in pairs(self.ClientEnts) do + if not IsValid(ent) then continue end + if self.ClientProps[id].callback then self.ClientProps[id].callback(self,ent) end + for k in pairs(ent:GetMaterials()) do ent:SetSubMaterial(k-1,"") end + for k,v in pairs(ent:GetMaterials()) do + local tex = string.Explode("/",v) + tex = tex[#tex] + if cabintexture and cabintexture.textures and cabintexture.textures[tex] then + ent:SetSubMaterial(k-1,cabintexture.textures[tex]) + end + if passtexture and passtexture.textures and passtexture.textures[tex] then + ent:SetSubMaterial(k-1,passtexture.textures[tex]) + end + if texture and texture.textures and texture.textures[tex] then + ent:SetSubMaterial(k-1,texture.textures[tex]) + end + end + end +end +function ENT:UpdateWagonNumber() end + +ENT.Cameras = {} +function ENT:OnRemove(nfinal) + self.RenderBlock = RealTime() + if nfinal then + drawCrosshair = false + canDrawCrosshair = false + toolTipText = nil + end + self:RemoveCSEnts() + self.RenderClientEnts = false + + + for _,v in pairs(self.Sounds) do + if type(v) ~= "function" and type(v) ~= "table" then + self:DestroySound(v) + end + end + for k,v in pairs(self.Sounds.loop) do + for i,sndt in ipairs(v) do + self:DestroySound(sndt.sound) + end + end + for _,v in pairs(self.PassengerEnts or {}) do + SafeRemoveEntity(v) + end + for _,v in pairs(self.PassengerEntsStucked or {}) do + SafeRemoveEntity(v) + end + if self.GUILocker then self:BlockInput(false) end + self.Sounds = {loop = {},isloop = {}} + self.PassengerEnts = {} + self.PassengerEntsStucked = {} +end + +function ENT:CalcAbsolutePosition(pos, ang) + if self.RenderClientEnts then + if self.Lights and self.GlowingLights then + for id, light in pairs(self.GlowingLights) do + if not IsValid(light) then continue end + local lightData = self.Lights[id] + light:SetPos(self:LocalToWorld(lightData[2])) + light:SetAngles(self:LocalToWorldAngles(lightData[3])) + end + end + for k,v in pairs(self.Sounds) do + if type(v) == "IGModAudioChannel" then + if not IsValid(v) then + self.Sounds[k] = nil + continue + end + if v:GetState() ~= GMOD_CHANNEL_STOPPED then + local tbl = self.SoundPositions[k] + if tbl then + local lpos,lang = LocalToWorld(tbl[3],Angle(0,0,0),pos,ang) + v:SetPos(lpos,ang:Forward()) + else + v:SetPos(pos) + end + continue + end + end + end + for k,v in pairs(self.Sounds.loop) do + local tbl = self.SoundPositions[k] + for i,stbl in ipairs(v) do + local snd = stbl.sound + if not IsValid(snd) then continue end + if snd:GetState() == GMOD_CHANNEL_PLAYING then + if tbl then + local lpos,lang = LocalToWorld(tbl[3],Angle(0,0,0),pos,ang) + snd:SetPos(lpos,ang:Forward()) + end + end + end + end + end + return pos, ang +end +-------------------------------------------------------------------------------- +-- Default think function +-------------------------------------------------------------------------------- +local function SoundTrace(startv,endv) + local tr = util.TraceLine( { + start = startv, + endpos = endv, + mask = MASK_NPCWORLDSTATIC, + } ) + --debugoverlay.Line(startv,endv,FrameTime(),Color( 255, 0, tr.Hit and 255 or 0 )) + if tr.Hit then + --debugoverlay.Sphere(tr.HitPos,4,FrameTime(),Color( 255, 200, 100)) + return startv:Distance(tr.HitPos) + end + return 1000 +end + +MetrostroiStarted = MetrostroiStarted or nil +hook.Add("KeyPress","MetrostroiStarted",function(_,key) + if key~=IN_FORWARD and key~=IN_BACK and key~=IN_MOVELEFT and key~=IN_MOVERIGHT then return end + hook.Add("Think","MetrostroiStarted",function() + if MetrostroiStarted == nil then + MetrostroiStarted = RealTime() + elseif MetrostroiStarted == true or MetrostroiStarted and RealTime()-MetrostroiStarted > 3 then + MetrostroiStarted = true + hook.Remove("Think","MetrostroiStarted") + end + end) + hook.Remove("KeyPress","MetrostroiStarted") +end) + +function ENT:Think() + self.PrevTime = self.PrevTime or RealTime() + self.DeltaTime = (RealTime() - self.PrevTime) + self.PrevTime = RealTime() + if MetrostroiStarted~=true then + return + end + + if not self.FirstTick then + self.FirstTick = true + self.RenderClientEnts = true + self.CreatingCSEnts = false + return + end + if self.RenderClientEnts ~= self:ShouldRenderClientEnts() then + self.RenderClientEnts = self:ShouldRenderClientEnts() + if self.RenderClientEnts then + self.CreatingCSEnts = true + self:BlockInput(self.HandleMouseInput) + --self:CreateCSEnts() + --if self.UpdateTextures then self:UpdateTextures() end + --local _,ent = next(self.ClientEnts) + --if not IsValid(ent) then self.RenderClientEnts = false end + else + self:OnRemove(true) + return + end + end + if not self.RenderClientEnts then return end + + if self.RenderBlock then + if RealTime()-self.RenderBlock < 3 then + self.ClientPropsInitialized = false + return + else + self.RenderBlock = false + end + end + + if not self.ClientPropsInitialized then + self.ClientPropsInitialized = true + self:RemoveCSEnts() + self:InitializeSounds() + self.RenderClientEnts = false + self.StopSounds = false + end + if self.GlowingLights and ( + self.HeadlightShadows ~= C_Shadows1:GetBool() + or self.OtherShadows ~= C_Shadows2:GetBool() + or self.RedLights ~= C_Shadows3:GetBool() + or self.OtherLights ~= C_Shadows4:GetBool() + or self.AAEnabled ~= (C_AA:GetInt() > 1) + or self.SpritesEnabled ~= C_Sprites:GetBool()) then + self.HeadlightShadows = C_Shadows1:GetBool() + self.OtherShadows = C_Shadows2:GetBool() + self.RedLights = C_Shadows3:GetBool() + self.OtherLights = C_Shadows4:GetBool() + self.SpritesEnabled = C_Sprites:GetBool() + self.AAEnabled = C_AA:GetInt() > 1 + for k,v in pairs(self.GlowingLights) do + if IsValid(v) then v:Remove() end + end + self.GlowingLights = {} + self.LightBrightness = {} + self.Sprites = {} + end + + + if self.RenderClientEnts and self.CreatingCSEnts then + self.CreatingCSEnts = not self:CreateCSEnts() + if not self.CreatingCSEnts then + self:UpdateTextures() + if self.Systems then + for _,v in pairs(self.Systems) do + if v.ClientReload then v:ClientReload() end + end + end + end + end + if not self.RenderClientEnts or self.CreatingCSEnts then return end + + if self.WagonNumber ~= self:GetWagonNumber() then + self.WagonNumber = self:GetWagonNumber() + self:UpdateWagonNumber() + end + + if self.Texture ~= self:GetNW2String("Texture") then self:UpdateTextures() end + if self.PassTexture ~= self:GetNW2String("PassTexture") then self:UpdateTextures() end + if self.CabinTexture ~= self:GetNW2String("CabTexture") then self:UpdateTextures() end + + local hasGoldenReverser = self:GetNW2Bool("GoldenReverser") + if self.HasGoldenReverser ~= hasGoldenReverser then + self.HasGoldenReverser = hasGoldenReverser + for id,v in pairs(self.ClientProps) do + if v.model == "models/metrostroi_train/reversor/reversor_classic.mdl" and v.modelcallback and IsValid(self.ClientEnts[id]) then + self:RemoveCSEnt(id) + self:SpawnCSEnt(id) + end + end + end + + if (GetConVarNumber("metrostroi_disablecamaccel") == 0) then + self.HeadAcceleration = (self:Animate("accel",((self:GetNW2Float("Accel",0)+1)/2),0,1, 4, 1)*30-15) + else + self.HeadAcceleration = 0 + end + -- Simulate systems + if self.Systems then + for _,v in pairs(self.Systems) do + v:ClientThink(self.DeltaTime) + end + end + if not self.StopSounds then + local soundPos = self.SoundPositions + local soundNames = self.SoundNames + for k,v in pairs(self.Sounds.loop) do + + local tbl = soundPos[k] + local ntbl = soundNames[k] + local good = true + for i,stbl in ipairs(v) do + if not stbl.volume then good = false end + end + if not good then continue end + for i,stbl in ipairs(v) do + local snd = stbl.sound + if not IsValid(snd) then continue end + if snd:GetState() == GMOD_CHANNEL_PLAYING then + self:SetPitchVolume(snd,v.pitch or 1,stbl.volume,tbl) + if stbl.volume == 0 and not stbl.time then + snd:Pause() + snd:SetTime(0) + end + end + if snd:GetState() ~= GMOD_CHANNEL_PLAYING and stbl.volume ~= 0 then + stbl.volume = 0 + end + if stbl.time then + local targetvol = stbl.state and v.volume or 0 + if stbl.time == true then + stbl.volume = targetvol + else + stbl.volume = math.Clamp((stbl.volume or 0) + FrameTime()/(stbl.time/v.pitch)*(stbl.state and 1 or -1)*v.volume,0,v.volume) + end + if stbl.volume == targetvol then + stbl.time = nil + end + end + + if i==1 then + local no1 = ntbl.loop and ntbl.loop==0 + local endt = (ntbl.loop and snd:GetTime() > ntbl.loop or snd:GetTime()/snd:GetLength() >= 0.8) or no1 + if stbl.state and stbl.volume < v.volume and not no1 then + if snd:GetState() ~= GMOD_CHANNEL_PLAYING then + snd:Play() + self:SetBASSPos(snd,tbl) + end + stbl.volume = v.volume + self:SetPitchVolume(snd,v.pitch,stbl.volume,tbl) + for i=2,3 do + if not v[i].volume or v[i].volume > 0 then + v[i].time=2 + if v[i].GetState and v[i]:GetState() ~= GMOD_CHANNEL_PLAYING then + v[i]:EnableLooping(i==2) + v[i]:Play() + self:SetBASSPos(v[i],tbl) + end + self:SetPitchVolume(v[i].sound,v.pitch,v[i].volume,tbl) + end + end + stbl.time = nil + end + if stbl.state and endt then + stbl.state = false + if no1 then + stbl.time = true + v[2].state = not v[3].state + end + end + + if not stbl.state and stbl.volume == v.volume and not stbl.time then + stbl.time = not ntbl.loop or 0.1/v.pitch--endt and (snd:GetLength()-snd:GetTime())*0.8 or 0.05 + v[2].state = not v[3].state + end + end + if i==2 then + if stbl.state and not stbl.time and stbl.volume == 0 then + if snd:GetState() ~= GMOD_CHANNEL_PLAYING then + snd:EnableLooping(true) + snd:Play() + self:SetBASSPos(snd,tbl) + end + if v[1].time == true then + stbl.volume = v.volume + elseif v[1].time then + stbl.time = v[1].time + stbl.volume = 0 + end + self:SetPitchVolume(snd,v.pitch,stbl.volume,tbl) + end + if not stbl.state and not stbl.time and stbl.volume > 0 then + stbl.time = 0.07/v.pitch + end + end + if i==3 then + local time = v[2].time or v[1].time + if stbl.state and time and not stbl.time then + if snd:GetState() ~= GMOD_CHANNEL_PLAYING then + snd:Play() + self:SetBASSPos(snd,tbl) + end + stbl.volume = 0 + self:SetPitchVolume(snd,v.pitch,stbl.volume,tbl) + + stbl.time = 0.1/v.pitch + for i=1,2 do + if v[i].volume > 0 then + v[i].time=0.07/v.pitch + if v[i].GetState and v[i]:GetState() ~= GMOD_CHANNEL_PLAYING then + v[i]:Play() + self:SetBASSPos(v[i],tbl) + end + self:SetPitchVolume(v[i].sound,v.pitch,v[i].volume,tbl) + end + end + elseif (not stbl.state or (snd:GetTime()/snd:GetLength() >= 0.9)) and stbl.time then + stbl.time = nil + stbl.volume = 0 + stbl.state = false + end + end + end + end + end + if not self.NoTrain then + self.SoundTraceI = self.SoundTraceI or 0 + local min, max = self:OBBMins(),self:OBBMaxs() + local x = self.SoundTraceI==2 and max.x or self.SoundTraceI==1 and 0 or min.x + local leftt = SoundTrace(self:LocalToWorld(Vector(x,min.y,0)),self:LocalToWorld(Vector(x,min.y-128,0))) + local leftst = SoundTrace(self:LocalToWorld(Vector(x,min.y,-64)),self:LocalToWorld(Vector(x,min.y-48,-64))) + local rightst = SoundTrace(self:LocalToWorld(Vector(x,max.y,-64)),self:LocalToWorld(Vector(x,max.y+48,-64))) + local rightt = SoundTrace(self:LocalToWorld(Vector(x,max.y,0)),self:LocalToWorld(Vector(x,max.y+128,0))) + local upt = SoundTrace(self:LocalToWorld(Vector(x,0,max.z)),self:LocalToWorld(Vector(x,0,max.z+256--[[ 384--]] ))) + self.SoundTraceI = self.SoundTraceI+1 + if self.SoundTraceI>2 then self.SoundTraceI=0 end + if upt > 350 then + local coeff = + 1-math.min( + (math.min(130,leftt)/130+math.min(130,rightt)/130)/2, + math.Clamp((leftst-10)/40,0,1), + math.Clamp((rightst-10)/40,0,1) + ) + --print(math.Clamp((leftst-10)/40,0,1)) + --print(Format("%02d %.2f %02d %.2f",leftst,math.Clamp((leftst-30)/20,0,1),rightst,) + --[[ if leftst < 30 or rightst < 30 then + LocalPlayer():ChatPrint(Format("I AM ON A STREET STATION, %.2f",coeff)) + elseif coeff > 1.3 then + LocalPlayer():ChatPrint(Format("I AM ON A STREET, %.2f",coeff)) + else + LocalPlayer():ChatPrint(Format("I AM ON A STREET WITH WALLS, %.2f",coeff)) + end--]] + self.TunnelCoeff = math.Clamp(self.TunnelCoeff+( 0-self.TunnelCoeff)*self.DeltaTime*4,0,1) + self.StreetCoeff = math.Clamp(self.StreetCoeff+((0.8+coeff*0.2)-self.StreetCoeff)*self.DeltaTime*4,0,1) + self.Street = 1 + else + local coeff = + 1-math.min( + math.Clamp((leftt-80)/40,0,1)+math.Clamp((rightt-80)/40,0,1)/2, + (math.Clamp((leftst-10)/40,0,1)+math.Clamp((rightst-10)/40,0,1))/2 + --, + )--(math.Clamp((leftst-30)/20,0,1)+math.Clamp((rightst-30)/20,0,1))*0.6 + --[[ if (leftst < 30 or rightst < 30) and coeff > 1.2 then + LocalPlayer():ChatPrint(Format("I AM ON A STATION L%.2f R%.2f C:%.2f",leftt/55,rightt/55,coeff)) + elseif coeff > 1.3 then + LocalPlayer():ChatPrint(Format("I AM IN A BIG TUNNEL L%.2f R%.2f C:%.2f",leftt/55,rightt/55,coeff)) + else + LocalPlayer():ChatPrint(Format("I AM IN A TUNNEL L%.2f R%.2f C:%.2f",leftt/55,rightt/55,coeff)) + end--]] + self.TunnelCoeff = math.Clamp(self.TunnelCoeff+((0.4+coeff*0.6)-self.TunnelCoeff)*self.DeltaTime*4,0,1) + self.StreetCoeff = math.Clamp(self.StreetCoeff+((0.5-math.max(0,self.TunnelCoeff-0.5))-self.StreetCoeff)*self.DeltaTime*4,0,1) + self.Street = 0 + end + end + if not self.HandleMouseInput and self.ButtonMap then + if self == LocalPlayer().InMetrostroiTrain then + for kp,pan in pairs(self.ButtonMap) do + if not self:ShouldDrawPanel(kp) then continue end + --If player is looking at this panel + if pan.mouse and not pan.outside and pan.aimX and pan.aimY then + local aimX,aimY = math.floor(math.Clamp(pan.aimX,0,pan.width)),math.floor(math.Clamp(pan.aimY,0,pan.height)) + if pan.OldAimX ~= aimX or pan.OldAimY ~= aimY then + net.Start("metrostroi-mouse-move",true) + net.WriteEntity(self) + net.WriteString(kp) + net.WriteFloat(aimX) + net.WriteFloat(aimY) + net.SendToServer() + pan.OldAimX = aimX + pan.OldAimY = aimY + end + end + end + end + end + + if self.ButtonMap and (not self.LastCheck or RealTime()-self.LastCheck > 0.5) then + self.LastCheck = RealTime() + local screenshotMode = C_ScreenshotMode:GetBool() + if self.ScreenshotMode ~= screenshotMode then + self:SetLOD(screenshotMode and 0 or -1) + for k,cent in pairs(self.ClientEnts) do + if IsValid(cent) then + cent:SetLOD(screenshotMode and 0 or -1) + end + end + self.ScreenshotMode = screenshotMode + end + for k in pairs(self.HiddenLamps) do + self.HiddenLamps[k] = false + end + for k,v in pairs(self.ClientProps) do + if not v.pos then continue end + local cent = self.ClientEnts[k] + + if (v.nohide or screenshotMode) then + if not IsValid(cent) then + self:SpawnCSEnt(k,true) + end + continue + end + local hidden = not self:ShouldDrawClientEnt(k,v) + if IsValid(cent) and hidden then + cent:Remove() + self.ClientEnts[k] = nil + elseif not IsValid(cent) and not hidden then + self:SpawnCSEnt(k,true) + end + if v.lamps and hidden then + for i,k in ipairs(v.lamps) do + self:SetLightPower(k,false) + self.HiddenLamps[k] = true + end + end + end + for k,v in pairs(self.Sounds) do + if type(v) ~= "function" and type(v) ~= "table" and not self.Sounds.isloop[k] and (not IsValid(v) or v:GetState() == GMOD_CHANNEL_STOPPED) then + self:DestroySound(v) + self.Sounds[k] = nil + end + end + for k,v in pairs(self.ButtonMap) do + if not v.pos then continue end + + if not v.hide or (v.nohide or screenshotMode) then + self.HiddenPanelsDistance[k] = v.screenHide + continue + end + self.HiddenPanelsDistance[k] = not self:ShouldDrawClientEnt(k,self.ButtonMap[k]) + end + end + + if self.AutoAnims && self.AutoAnimNames then + local aAnims = self.AutoAnims + local aAnimNames = self.AutoAnimNames + local hidden = self.Hidden + for i=1, #aAnims do + if not aAnimNames[i] or not hidden[aAnimNames[i]] then + aAnims[i](self) + end + end + end + if self.Lights and self.GlowingLights then + for id, light in pairs(self.GlowingLights) do + if light.Update then + light:Update() + end + end + end + -- Update passengers + if self.RenderClientEnts and self.PassengerEnts then + local stucked = self.PassengerEntsStucked + for i,v in ipairs(self.LeftDoorPositions) do + if self:GetPackedBool("DoorLS"..i) and not IsValid(stucked[i]) then + local ent = ClientsideModel(table.Random(self.PassengerModels),RENDERGROUP_OPAQUE) + ent:SetPos(self:LocalToWorld(Vector(v.x,v.y,self:GetStandingArea().z))) + ent:SetAngles(self:LocalToWorldAngles(Angle(0,v.y < 0 and -90 or 90,0))) + ent:SetSkin(math.floor(ent:SkinCount()*math.random())) + ent:SetModelScale(0.98 + (-0.02+0.04*math.random()),0) + ent:SetParent(self) + stucked[i] = ent + if math.random() > 0.99 then + self:PlayOnceFromPos("PassStuckL"..i,"subway_trains/common/door/pass_stAAAck.mp3",5,0.9+math.random()*0.2,150,400,v) + elseif math.random() > 0.95 then + self:PlayOnceFromPos("PassStuckL"..i,"subway_trains/common/door/tom.mp3",5,0.9+math.random()*0.2,150,400,v) + elseif ent:GetModel():find("models/metrostroi/passengers/f") then + self:PlayOnceFromPos("PassStuckL"..i,"subway_trains/common/door/pass_stuck.mp3",5,1.6+math.random()*0.2,150,400,v) + else + self:PlayOnceFromPos("PassStuckL"..i,"subway_trains/common/door/pass_stuck.mp3",5,0.9+math.random()*0.2,150,400,v) + end + elseif not self:GetPackedBool("DoorLS"..i) and IsValid(stucked[i]) then + SafeRemoveEntity(stucked[i]) + end + end + for i,v in ipairs(self.RightDoorPositions) do + if self:GetPackedBool("DoorRS"..i) and not IsValid(stucked[-i]) then + local ent = ClientsideModel(table.Random(self.PassengerModels),RENDERGROUP_OPAQUE) + ent:SetPos(self:LocalToWorld(Vector(v.x,v.y,self:GetStandingArea().z))) + ent:SetAngles(self:LocalToWorldAngles(Angle(0,v.y < 0 and -90 or 90,0))) + ent:SetSkin(math.floor(ent:SkinCount()*math.random())) + ent:SetModelScale(0.98 + (-0.02+0.04*math.random()),0) + ent:SetParent(self) + stucked[-i] = ent + if math.random() > 0.99 then + self:PlayOnceFromPos("PassStuckR"..i,"subway_trains/common/door/pass_stAAAck.mp3",5,0.9+math.random()*0.2,150,400,v) + elseif math.random() > 0.95 then + self:PlayOnceFromPos("PassStuckR"..i,"subway_trains/common/door/tom.mp3",5,0.9+math.random()*0.2,150,400,v) + elseif ent:GetModel():find("models/metrostroi/passengers/f") then + self:PlayOnceFromPos("PassStuckR"..i,"subway_trains/common/door/pass_stuck.mp3",5,1.6+math.random()*0.2,150,400,v) + else + self:PlayOnceFromPos("PassStuckR"..i,"subway_trains/common/door/pass_stuck.mp3",5,0.9+math.random()*0.2,150,400,v) + end + elseif not self:GetPackedBool("DoorRS"..i) and IsValid(stucked[-i]) then + SafeRemoveEntity(stucked[-i]) + end + end + if #self.PassengerEnts ~= self:GetNW2Float("PassengerCount") then + -- Passengers go out + while #self.PassengerEnts > self:GetNW2Float("PassengerCount") do + local ent = self.PassengerEnts[#self.PassengerEnts] + table.remove(self.PassengerPositions,#self.PassengerPositions) + table.remove(self.PassengerEnts,#self.PassengerEnts) + ent:Remove() + end + -- Passengers go in + while #self.PassengerEnts < self:GetNW2Float("PassengerCount") do + local min,max = self:GetStandingArea() + local pos = min + Vector((max.x-min.x)*math.random(),(max.y-min.y)*math.random(),(max.z-min.z)*math.random()) + + --local ent = ents.CreateClientProp("models/metrostroi/81-717/reverser.mdl") + --ent:SetModel(table.Random(self.PassengerModels)) + local ent = ClientsideModel(table.Random(self.PassengerModels),RENDERGROUP_OPAQUE) + ent:SetPos(self:LocalToWorld(pos)) + ent:SetAngles(Angle(0,math.random(0,360),0)) + --[[ + hook.Add("MetrostroiBigLag",ent,function(ent) + ent:SetPos(self:LocalToWorld(pos)) + ent:SetAngles(Angle(0,math.random(0,360),0)) + --if ent.Spawned then hook.Remove("MetrostroiBigLag",ent) end + --ent.Spawned = true + end)]] + ent:SetSkin(math.floor(ent:SkinCount()*math.random())) + ent:SetModelScale(0.98 + (-0.02+0.04*math.random()),0) + ent:SetParent(self) + table.insert(self.PassengerPositions,pos) + table.insert(self.PassengerEnts,ent) + end + end + end + for k,v in pairs(self.CustomThinks) do if k ~= "BaseClass" then v(self) end end +end +function ENT:BlockInput(block) + if IsValid(LocalPlayer().InMetrostroiTrain) then + if self ~= LocalPlayer().InMetrostroiTrain then + block = false + end + end + if block and not self.GUILocker then + gui.EnableScreenClicker(true) + self.GUILocker = vgui.Create("DPanel") + + self.GUILocker:SetPos(0,0) + self.GUILocker:SetSize(ScrW(),ScrH()) + self.GUILocker:SetZPos(-32767) + + self.GUILocker.Paint = function() end + + self.GUILocker.Focus = self + + self.GUILocker.Think = function(panel) + if panel.Focus ~= vgui.GetKeyboardFocus() then + panel.Focus = vgui.GetKeyboardFocus() + if IsValid(panel.Focus) then + self.GUILocker:SetCursor("") + else + input.SetCursorPos( ScrW()/2, ScrH()/2) + self.GUILocker:SetCursor("blank") + end + end + end + self.GUILocker.OnCursorMoved = function(panel,cursorX,cursorY ) + if self.GUILocker.LastX ~= cursorX or self.GUILocker.LastY ~= cursorY then + if not IsValid(vgui.GetKeyboardFocus()) then + local x,y = ScrW()/2, ScrH()/2 + input.SetCursorPos(x,y) + net.Start("metrostroi-mouse-move",true) + net.WriteEntity(self) + net.WriteString("") + net.WriteFloat((cursorX-x)/(ScrW()/2)) + net.WriteFloat((cursorY-y)/(ScrH()/2)) + net.SendToServer() + end + self.GUILocker.LastX = cursorX + self.GUILocker.LastY = cursorY + end + --end + end + self.GUILocker:RequestFocus() + self.GUILocker:SetKeyboardInputEnabled(false) + self.GUILocker:MoveToBack(true) + self.GUILocker:SizeToChildren() + elseif not block and self.GUILocker then + self.GUILocker:Remove() + self.GUILocker = nil + gui.EnableScreenClicker(false) + end +end + +function ENT:HandleMouse(handle) + if self.HandleMouseInput ~= handle then + self.HandleMouseInput = handle + self:BlockInput(self.HandleMouseInput) + end +end + +local function compensateSeat(val) + local valAbs = math.abs(val) + if valAbs < 10 then return 1 end + if valAbs > 45 then return 0 end + + local sign = val < 0 and -1 or 1 + return 1-math.Clamp((valAbs-10)/6,0,2)+(math.Clamp((valAbs-30)/10,0,1))+(math.Clamp((valAbs-40)/5,0,1)) +end + +local OldTrainHandle,OldSeat +hook.Add("Think","metrostroi_mouse_handle",function() + local train, outside = isValidTrainDriver(LocalPlayer()) + if outside then train = nil end + + if OldTrainHandle ~= train then + if IsValid(OldTrainHandle) and OldTrainHandle.BlockInput then OldTrainHandle:BlockInput(false) end + if IsValid(train) and train.BlockInput then train:BlockInput(train.HandleMouseInput) end + if IsValid(train) then + OldSeat = LocalPlayer():GetVehicle() + --[=[train.CamAnglesComp = Angle(0,0,0) + train.OldAng = false + --OldSeat.CalcAbsolutePosition = function(...) return ... end + if not OldSeat.OldCalcAbsolutePosition then + OldSeat.OldCalcAbsolutePosition = OldSeat.CalcAbsolutePosition + end + OldSeat.CalcAbsolutePosition = function(ent,...) + --[[local target_ang = Angle(0,0,0) + local train = ent:GetNW2Entity("TrainEntity") + if not IsValid(train) then return end + target_ang:RotateAroundAxis(ent:GetAngles():Forward(),-train.CamAng.p) + target_ang:RotateAroundAxis(ent:GetAngles():Up(),train.CamAng.y) + target_ang:RotateAroundAxis(ent:GetAngles():Right(),train.CamAng.r) + train.CamAnglesComp = target_ang + print(target_ang)]] + return ent:OldCalcAbsolutePosition(...) + end + print(OldSeat.OnAngleChangeID)--]=] + elseif IsValid(OldSeat) then + OldSeat.CalcAbsolutePosition = OldSeat.OldCalcAbsolutePosition or OldSeat.CalcAbsolutePosition + OldSeat.OldCalcAbsolutePosition = nil + OldSeat = nil + end + OldTrainHandle = train + end +end) +--[[hook.Add("PlayerEnteredVehicle","metrostroi_mouse_handle",function(ply,veh) + local train = veh:GetNW2Entity("TrainEntity") + if IsValid(train) then + train.CamAnglesComp = Angle(0,0,0) + train.OldAng = false + if train.BlockInput then train:BlockInput(train.HandleMouseInput) end + end +end) +hook.Add("PlayerEnteredVehicle","metrostroi_mouse_handle",function(ply,veh) + local train = veh:GetNW2Entity("TrainEntity") + if IsValid(train) then + train.CamAnglesComp = Angle(0,0,0) + train.OldAng = false + if train.BlockInput then train:BlockInput(train.HandleMouseInput) end + end +end)]] +--[[ hook.Add("PlayerEnteredVehicle","metrostroi_mouse_handle",function(ply,veh) + local train = veh:GetNW2Entity("TrainEntity") + if IsValid(train) and train.BlockInput then + train:BlockInput(train.HandleMouseInput) + end +end)--]] +-------------------------------------------------------------------------------- +-- Various rendering shortcuts for trains +-------------------------------------------------------------------------------- +function ENT:DrawCircle(cx,cy,radius) + local step = 2*math.pi/12 + local vertexBuffer = { {}, {}, {} } + + for i=1,12 do + vertexBuffer[1].x = cx + radius*math.sin(step*(i+0)) + vertexBuffer[1].y = cy + radius*math.cos(step*(i+0)) + vertexBuffer[2].x = cx + vertexBuffer[2].y = cy + vertexBuffer[3].x = cx + radius*math.sin(step*(i+1)) + vertexBuffer[3].y = cy + radius*math.cos(step*(i+1)) + surface.DrawPoly(vertexBuffer) + end +end + +-------------------------------------------------------------------------------- +-- Schedule Drawing +-- +-- Reference: http://static.diary.ru/userdir/1/0/4/7/1047/28088395.jpg +-------------------------------------------------------------------------------- +local function AddZero( s ) + if #s == 0 then + return "00" + elseif #s == 1 then + return "0" .. s + else + return s + end +end + +local function HoursFromStamp( stamp ) + return AddZero(tostring(math.floor(stamp/3600)%24)) +end + +local function MinutesFromStamp( stamp ) + return AddZero(tostring(math.floor(stamp/60)%60)) +end + +local function SecondsFromStamp( stamp ) + return AddZero(tostring(stamp%60)) +end + +surface.CreateFont( "Schedule_Hand", { + font = "Monotype Corsiva", + size = 30, + weight = 600 +}) +surface.CreateFont( "Schedule_Hand_Small", { + font = "Monotype Corsiva", + size = 18, + weight = 600 +}) +surface.CreateFont( "Schedule_Machine", { + font = "Arial", + size = 22, + weight = 500 +}) +surface.CreateFont( "Schedule_Machine_Small", { + font = "Arial", + size = 16, + weight = 600 +}) + +local DrawRect = surface.DrawRect +local DrawTextHand = function(txt, x, y, col) + draw.SimpleText(txt, "Schedule_Hand", x, y, Color(0,15*col.y,85*col.z), 0, 0) +end +local DrawTextHandSmall = function(txt, x, y, col) + draw.SimpleText(txt, "Schedule_Hand_Small", x, y, Color(0,15*col.y,85*col.z), 0, 0) +end +local DrawTextMachine = function(txt, x, y) + draw.SimpleText(txt, "Schedule_Machine", x, y, Color(0,0,0), 0, 0) +end +local DrawTextMachineSmall = function(txt, x, y) + draw.SimpleText(txt, "Schedule_Machine_Small", x, y, Color(0,0,0), 0, 0) +end + +local function FineStationName(st) + local StT = string.Explode(" ",st) + local str = "" + if #StT > 1 then + str = StT[1][1]..". "..table.concat(StT," ",2) + else + str = st + end + return str +end +-- Placeholder code, to be removed when schedule system is in place +local Schedule = { + stations = { + {"Station 1", os.time() + 20}, + {"Station 2", os.time() + 46}, + {"Station 3", os.time() + 80}, + {"Station 4", os.time() + 95}, + {"Station 5", os.time() + 120} + }, + total = 2000, + interval = 300, + routenumber = math.random(100,999), + pathnumber = math.random(100,999) +} + +local col1w = 80 -- 1st Column width +local col2w = 32 -- The other column widths +local rowtall = 30 -- Row height, includes -only- the usable space and not any lines +local rowtall2 = rowtall*2 -- Helper + +local defaultlight = Vector(0.8,0.8,0.8) -- Light to be used when cabinlights are on +function ENT:DrawSchedule(panel) + local w = panel.width + local h = panel.height + + local light = defaultlight + local cabinlights = self:GetPackedBool(58) + if not cabinlights then + light = render.GetLightColor(self:LocalToWorld(Vector(430,0,26))) -- GetLightColor is pretty shit but it works + end + + --Background + surface.SetDrawColor(Color(255 * light.x, 253 * light.y, 208 * light.z)) + DrawRect(0,0,w,h) + + --Lines + surface.SetDrawColor(Color(0,0,0)) + + --Horisontal lines + DrawRect(0,0,1,h) + DrawRect(1 + col1w,0,1,h) + DrawRect(1 + col1w + 1 + col2w,rowtall2+2,1,h-rowtall2-2) + DrawRect(1 + col1w + 1 + col2w + 1 + col2w,rowtall2+2,1,h-rowtall2-2) + DrawRect(1 + col1w + 1 + col2w + 1 + col2w + 1 + col2w,0,1,h) + + --Vertical lines + DrawRect(0,0,w,1) + DrawRect(1 + col1w,rowtall+1,w - col1w - 1,1) + DrawRect(1 + col1w,rowtall2+2,w - col1w - 1,1) + for i=(rowtall+1)*3,h,rowtall+1 do + DrawRect(0,i,w,1) + end + + -- HACK get schedule from train + local N = self:GetNW2Int("_schedule_N") + Schedule = { + stations = {}, + total = math.floor(self:GetNW2Int("_schedule_duration")/5+0.5)*5, + interval = self:GetNW2Int("_schedule_interval"), + routenumber = self:GetNW2Int("_schedule_id"), + pathnumber = self:GetNW2Int("_schedule_path"), + } + for i=1,N do + Schedule.stations[i] = { + self:GetNW2String("_schedule_"..i.."_5"), + math.floor(self:GetNW2Int("_schedule_"..i.."_3")*60/5)*5 + } + end + + --Text + local t = Schedule + + --Top info + DrawTextMachine("М â„–", 3, 3) + DrawTextHand(t.routenumber, 42, -2, light) + + DrawTextMachine("П â„–", 3, rowtall*2 + 3) + DrawTextHand(t.pathnumber, 42, rowtall*2 - 2, light) + + DrawTextMachineSmall("ВРЕМЯ", col1w + 5, 1, light) + DrawTextMachineSmall("ХОДÐ", col1w + 5, 15, light) + DrawTextHand(MinutesFromStamp(t.total), w - 50, 1, light) + DrawTextHandSmall(SecondsFromStamp(t.total), w - 25, 5, light) + + DrawTextMachineSmall("ИÐТ", col1w + 5, rowtall + 8) + DrawTextHand(MinutesFromStamp(t.interval), w - 50, rowtall, light) + DrawTextHandSmall(SecondsFromStamp(t.interval), w - 25, rowtall + 4, light) + + DrawTextMachineSmall("ЧÐС", col1w + 4, rowtall*2 + 8) + DrawTextMachineSmall("МИÐ", col1w + col2w + 5, rowtall*2 + 8) + DrawTextMachineSmall("СЕК", col1w + col2w*2 + 8, rowtall*2 + 8) + + --Schedule rows + local lasthour = -1 + for i,v in pairs(t.stations) do + local y = ((rowtall+1)*3+2) + (i-1)*(rowtall+1) -- Uhh.. + + local st = FineStationName(v[1]) + surface.SetFont( "Schedule_Machine_Small" ) + local width = select(1, surface.GetTextSize(st)) + + local szf = math.ceil(width/80)-1 + if szf > 0 then + szf = math.ceil(#st/8)-1 + + for i1 = 0,szf do + DrawTextMachineSmall(st:Replace("'",""):sub(i1*8+1,8 + i1*8)..(szf ~= i1 and "-" or ""), 3, y + 6 -6 + 12/szf*i1) -- Stationname + end + else + DrawTextMachineSmall(st, 3, y + 6) -- Stationname + end + + local hours = HoursFromStamp(v[2]) + local minutes = MinutesFromStamp(v[2]) + local seconds = SecondsFromStamp(v[2]) + + if hours ~= lasthour then -- Only draw hours if they've changed + lasthour = hours + + DrawTextHand(hours, col1w + 3, y, light) -- Hours + end + + DrawTextHand(minutes, col1w + col2w + 5, y, light) -- Minutes + DrawTextHand(seconds, col1w + col2w + col2w + 5, y, light) -- Seconds + end +end + +-------------------------------------------------------------------------------- +-- Default rendering function +-------------------------------------------------------------------------------- +function ENT:Draw() + + -- Draw model + self:DrawModel() +end + + +function ENT:DrawOnPanel(index,func,overr) + if not overr and not self:ShouldDrawPanel(index) then return end + local panel = self.ButtonMapMatrix and self.ButtonMapMatrix[index] or self.ButtonMap[index] + cam.Start3D2D(self:LocalToWorld(panel.pos),self:LocalToWorldAngles(panel.ang),panel.scale) + func(panel) + cam.End3D2D() +end + +function ENT:DrawRTOnPanel(index,rt,overr) + if not overr and not self:ShouldDrawPanel(index) then return end + local panel = self.ButtonMapMatrix[index] or self.ButtonMap[index] + cam.Start3D2D(self:LocalToWorld(panel.pos),self:LocalToWorldAngles(panel.ang),panel.scale) + surface.SetMaterial(rt.mat) + --surface.DrawTexturedRect(0,0,panel.width,panel.height) + surface.DrawTexturedRectRotated(panel.width/2,panel.height/2,panel.width,panel.height,0) + cam.End3D2D() +end + + +-------------------------------------------------------------------------------- +-- Animation function +-------------------------------------------------------------------------------- +function ENT:Animate(clientProp, value, min, max, speed, damping, stickyness) + local id = clientProp + local anims = self.Anims + if not anims[id] then + anims[id] = {} + anims[id].val = value + anims[id].value = min + (max-min)*value + anims[id].V = 0.0 + anims[id].block = false + anims[id].stuck = false + anims[id].P = value + end + if self.Hidden[id] or self.Hidden.anim[id] then return 0 end + if anims[id].Ignore then + if RealTime()-anims[id].Ignore < 0 then + return anims[id].value + else + anims[id].Ignore = nil + end + end + local val = anims[id].val + if value ~= val then + anims[id].block = false + end + if anims[id].block then + if anims[id].reload and IsValid(self.ClientEnts[clientProp]) then + self.ClientEnts[clientProp]:SetPoseParameter("position",anims[id].value) + anims[id].reload = false + end + return anims[id].value--min + (max-min)*anims[id].val + end + --if self["_anim_old_"..id] == value then return self["_anim_old_"..id] end + -- Generate sticky value + if stickyness and damping then + if (math.abs(anims[id].P - value) < stickyness) and (anims[id].stuck) then + value = anims[id].P + anims[id].stuck = false + else + anims[id].P = value + end + end + local dT = FrameTime()--self.DeltaTime + if damping == false then + local dX = speed * dT + if value > val then + val = val + dX + end + if value < val then + val = val - dX + end + if math.abs(value - val) < dX then + val = value + anims[id].V = 0 + else + anims[id].V = dX + end + else + -- Prepare speed limiting + local delta = math.abs(value - val) + local max_speed = 1.5*delta / dT + local max_accel = 0.5 / dT + + -- Simulate + local dX2dT = (speed or 128)*(value - val) - anims[id].V * (damping or 8.0) + if dX2dT > max_accel then dX2dT = max_accel end + if dX2dT < -max_accel then dX2dT = -max_accel end + + anims[id].V = anims[id].V + dX2dT * dT + if anims[id].V > max_speed then anims[id].V = max_speed end + if anims[id].V < -max_speed then anims[id].V = -max_speed end + + val = math.max(0,math.min(1,val + anims[id].V * dT)) + + -- Check if value got stuck + if (math.abs(dX2dT) < 0.001) and stickyness and (dT > 0) then + anims[id].stuck = true + end + end + local retval = min + (max-min)*val + if IsValid(self.ClientEnts[clientProp]) then + self.ClientEnts[clientProp]:SetPoseParameter("position",retval) + end + if math.abs(anims[id].V) == 0 and math.abs(val-value) == 0 and not anims[id].stuck then + anims[id].block = true + end + + anims[id].val = val + anims[id].oldival = value + anims[id].oldspeed = speed + anims[id].value = retval + return retval +end +function ENT:AnimateFrom(clientProp,from,min,max) + if not self.Anims[from] then return 0 end + local val = Lerp(self.Anims[from].value,min or 0,max or 1) + if IsValid(self.ClientEnts[clientProp]) then + self.ClientEnts[clientProp]:SetPoseParameter("position",val) + end + if not self.Anims[clientProp] then self.Anims[clientProp] = {} end + self.Anims[clientProp].value = value + return val +end + +function ENT:ShowHide(clientProp, value, over) + if self.Hidden.override[clientProp] then return end + --if IsValid(self.ClientEnts[clientProp]) then + if value == true and (self.Hidden[clientProp] or over) then + self.Hidden[clientProp] = false + if not IsValid(self.ClientEnts[clientProp]) and self:SpawnCSEnt(clientProp) then + self.UpdateRender = true + end + --self.ClientEnts[clientProp]:SetRenderMode(RENDERMODE_NORMAL) + --self.ClientEnts[clientProp]:SetColor(Color(255,255,255,255)) + --self.Hidden[clientProp] = false + return true + elseif value ~= true and (not self.Hidden[clientProp] or over) then + if IsValid(self.ClientEnts[clientProp]) then + self.ClientEnts[clientProp]:Remove() + self.UpdateRender = true + end + self.Hidden[clientProp] = true + --self.ClientEnts[clientProp]:SetRenderMode(RENDERMODE_NONE) + --self.ClientEnts[clientProp]:SetColor(Color(0,0,0,0)) + --self.Hidden[clientProp] = true + return true + end + --self.HiddenQuele[clientProp] = nil + --else + --end +end + +function ENT:HideButton(clientProp, value) + self.Hidden.button[clientProp] = value +end +function ENT:ShowHideSmooth(clientProp, value,color) + if self.Hidden.override[clientProp] then return value end + if not IsValid(self.ClientEnts[clientProp]) and self.SmoothHide[clientProp] then self.SmoothHide[clientProp] = 0 end + if self.SmoothHide[clientProp] and (self.SmoothHide[clientProp] == value and not color) then return value end + self.SmoothHide[clientProp] = value + self.Hidden.anim[clientProp] = value == 0 + + if value > 0 and not IsValid(self.ClientEnts[clientProp]) then + if self:ShowHide(clientProp,true) then self.SmoothHide[clientProp] = nil end + end + if value == 0 and IsValid(self.ClientEnts[clientProp]) then + if self:ShowHide(clientProp,false) then self.SmoothHide[clientProp] = nil end + end + if IsValid(self.ClientEnts[clientProp]) then + local v = self.ClientPropsOv and self.ClientPropsOv[clientProp] or self.ClientProps[clientProp] + self.ClientEnts[clientProp]:SetRenderMode(RENDERMODE_TRANSALPHA) + if color then + self.ClientEnts[clientProp]:SetColor(ColorAlpha(color,value*255)) + else + self.ClientEnts[clientProp]:SetColor(ColorAlpha(v.color or color_white,value*255)) + end + end + return value +end +function ENT:ShowHideSmoothFrom(clientProp,from) + self:ShowHideSmooth(clientProp,self.SmoothHide[from] or 0) +end +local digit_bitmap = { + [1] = { 0,0,1,0,0,1,0 }, + [2] = { 1,0,1,1,1,0,1 }, + [3] = { 1,0,1,1,0,1,1 }, + [4] = { 0,1,1,1,0,1,0 }, + [5] = { 1,1,0,1,0,1,1 }, + [6] = { 1,1,0,1,1,1,1 }, + [7] = { 1,0,1,0,0,1,0 }, + [8] = { 1,1,1,1,1,1,1 }, + [9] = { 1,1,1,1,0,1,1 }, + [0] = { 1,1,1,0,1,1,1 }, +} + +local segment_poly = { + [1] = { + { x = 0, y = 0 }, + { x = 100, y = 0 }, + { x = 80, y = 20 }, + { x = 20, y = 20 }, + }, + [2] = { + { x = 20, y = 0 }, + { x = 80, y = 0 }, + { x = 100, y = 20 }, + { x = 0, y = 20 }, + }, + [3] = { + { x = 0, y = 0 }, + { x = 20, y = 20 }, + { x = 20, y = 80 }, + { x = 0, y = 100 }, + }, + [4] = { + { x = 0, y = 20 }, + { x = 20, y = 0 }, + { x = 20, y = 100 }, + { x = 0, y = 80 }, + }, + [5] = { + { x = 0, y = 12 }, + { x = 20, y = 0 }, + { x = 80, y = 0 }, + { x = 100, y = 12 }, + { x = 80, y = 24 }, + { x = 20, y = 24 }, + }, +} + +local polys = {} +function ENT:DrawSegment(i,x,y,scale_x,scale_y) + if not polys[i] then polys[i] = {} end + if not polys[i][k] then + for k,v in pairs(segment_poly[i]) do + polys[i][k] = { + x = (v.x*scale_x) + x, + y = (v.y*scale_y) + y, + } + end + end + + surface.SetDrawColor(Color(100,255,0,255)) + draw.NoTexture() + surface.DrawPoly(polys[i]) +end + +function ENT:DrawDigit(cx,cy,digit,scalex,scaley,thickness) + scalex = scalex or 1 + scaley = scaley or scalex + thickness = thickness or 1 + local bitmap = digit_bitmap[digit] + if not bitmap then return end + + local sx = 0.9*scalex*thickness + local sy = 0.9*scaley*thickness + local dx = scalex + local dy = scaley + + if bitmap[1] == 1 then self:DrawSegment(1,cx+5*dx,cy, sx,sy) end + if bitmap[2] == 1 then self:DrawSegment(3,cx,cy+10*dy, sx,sy) end + if bitmap[3] == 1 then self:DrawSegment(4,cx+80*dx,cy+10*dy, sx,sy) end + if bitmap[4] == 1 then self:DrawSegment(5,cx+5*dx,cy+95*dy, sx,sy) end + if bitmap[5] == 1 then self:DrawSegment(3,cx,cy+110*dy, sx,sy) end + if bitmap[6] == 1 then self:DrawSegment(4,cx+80*dx,cy+110*dy, sx,sy) end + if bitmap[7] == 1 then self:DrawSegment(2,cx+5*dx,cy+190*dy, sx,sy) end +end + + + +-------------------------------------------------------------------------------- +-- Get train acceleration at given position in train +-------------------------------------------------------------------------------- +function ENT:GetTrainAccelerationAtPos(pos) + local localAcceleration = self:GetTrainAcceleration() + local angularVelocity = self:GetTrainAngularVelocity() + + return localAcceleration - angularVelocity:Cross(angularVelocity:Cross(pos*0.01905)) +end + + +-------------------------------------------------------------------------------- +-- Look into mirrors hook +-------------------------------------------------------------------------------- +--[[hook.Add("InputMouseApply", "Metrostroi_TrainView", function(cmd,x,y,ang) + local seat = LocalPlayer():GetVehicle() + if (not seat) or (not seat:IsValid()) then + return + end + local train = seat:GetNW2Entity("TrainEntity") + if (not train) or (not train:IsValid()) then + return + end + local target_ang = Angle(0,0,0) + target_ang:RotateAroundAxis(seat:GetAngles():Forward(),-ang.p) + target_ang:RotateAroundAxis(seat:GetAngles():Up(),ang.y) + target_ang:RotateAroundAxis(seat:GetAngles():Right(),ang.r) + train.CamAnglesComp = target_ang + train.CamAng = ang +end)]] + +hook.Add("CalcVehicleView", "Metrostroi_TrainView", function(seat,ply,tbl) + local train = ply.InMetrostroiTrain + if not IsValid(train) then + return + end + + --local hack = string.find(train:GetClass(),"81") + --local dy = 0 + --if hack then dy = 3 end + + --[[-- Get acceleration in the train + local headPos = train:WorldToLocal(pos) + local acceleration = train:GetTrainAccelerationAtPos(headPos) + train.Acceleration = train.Acceleration or Vector(0,0,0) + train.Acceleration = train.Acceleration + 0.5*(acceleration - train.Acceleration)*train.DeltaTime + if train.Acceleration:Length() > 100 then train.Acceleration = Vector(0,0,0) end + + -- Calculate direction + local direction = train.Acceleration:GetNormalized() + -- Calculate visual offset + local a = train.Acceleration:Length() + local factor = a * math.exp(-0.05*a) + local offset = 4 * direction * factor + + print(train.Acceleration) + -- Apply offset + return { + origin = train:LocalToWorld(headPos + 0.1*offset), + angles = ang + Angle(offset.x,0,0), + }]]-- + + if seat:GetThirdPersonMode() and train.MirrorCams[1] then + local trainAng = tbl.angles - train:GetAngles() + if trainAng.y > 180 then trainAng.y = trainAng.y - 360 end + if trainAng.y < -180 then trainAng.y = trainAng.y + 360 end + if trainAng.y > 0 then + train.CamPos = train:LocalToWorld(train.MirrorCams[1]) + train.CamAngles = train:LocalToWorldAngles(train.MirrorCams[2]) + return { + origin = train.CamPos, + angles = train.CamAngles, + fov = train.MirrorCams[3], + } + else + train.CamPos = train:LocalToWorld(train.MirrorCams[4]) + train.CamAngles = train:LocalToWorldAngles(train.MirrorCams[5]) + return { + origin = train.CamPos, + angles = train.CamAngles, + fov = train.MirrorCams[6], + } + end + elseif train.CurrentCamera > 0 and train.Cameras[train.CurrentCamera] then + local camera = train.Cameras[train.CurrentCamera] + train.CamPos = train:LocalToWorld(camera[1]) + local tFov = tbl.fov/C_FovDesired:GetFloat()*C_CabFOV:GetFloat() + + return { + origin = train.CamPos, + angles = tbl.angles,--+train:LocalToWorldAngles(camera[2]), + fov = tFov, + } + else + + train.CamPos = train:LocalToWorld(train:WorldToLocal(tbl.origin)+Vector(train.HeadAcceleration,0,C_CabZ:GetFloat())) + local tFov = tbl.fov/C_FovDesired:GetFloat()*C_CabFOV:GetFloat() + return { + origin = train.CamPos, + angles = tbl.angles,--target_ang+train.CamAnglesComp, + fov = tFov, + } + end + return +end) + + + + +-------------------------------------------------------------------------------- +-- Buttons/panel clicking +-------------------------------------------------------------------------------- +--Thanks old gmod wiki! +--[[ +Converts from world coordinates to Draw3D2D screen coordinates. +vWorldPos is a vector in the world nearby a Draw3D2D screen. +vPos is the position you gave Start3D2D. The screen is drawn from this point in the world. +scale is a number you also gave to Start3D2D. +aRot is the angles you gave Start3D2D. The screen is drawn rotated according to these angles. +]]-- + +local function WorldToScreen(vWorldPos, vPos, vScale, aRot) + vWorldPos = vWorldPos - vPos + vWorldPos:Rotate(Angle(0, -aRot.y, 0)) + vWorldPos:Rotate(Angle(-aRot.p, 0, 0)) + vWorldPos:Rotate(Angle(0, 0, -aRot.r)) + + return vWorldPos.x / vScale, (-vWorldPos.y) / vScale +end + +-- Calculates line-plane intersect location +local function LinePlaneIntersect(PlanePos,PlaneNormal,LinePos,LineDir) + local dot = LineDir:Dot(PlaneNormal) + local fac = LinePos-PlanePos + local dis = -PlaneNormal:Dot(fac) / dot + return LineDir * dis + LinePos +end + +local function findAimButton(ply,train) + local panel,panelDist = nil,1e9 + for kp,pan in pairs(train.ButtonMap) do + if not train:ShouldDrawPanel(kp) then continue end + --If player is looking at this panel + if pan.aimedAt and (pan.buttons or pan.sensor or pan.mouse) and pan.aimedAt < panelDist then + panel = pan + panelDist = pan.aimedAt + end + end + if not panel then return false end + if panel.aimX and panel.aimY and (panel.sensor or panel.mouse) and math.InRangeXY(panel.aimX,panel.aimY,0,0,panel.width,panel.height) then return false,panel.aimX,panel.aimY,panel.system end + if not panel.buttons then return false end + + local buttonTarget + for _,button in pairs(panel.buttons) do + if (train.Hidden[button.PropName] or train.Hidden.button[button.PropName]) and (not train.ClientProps[button.PropName] or not train.ClientProps[button.PropName].config or not train.ClientProps[button.PropName].config.staylabel) then continue end + if (train.Hidden[button.ID] or train.Hidden.button[button.ID]) and (not train.ClientProps[button.ID] or not train.ClientProps[button.ID].config or not train.ClientProps[button.ID].config.staylabel) then continue end + if button.w and button.h then + if panel.aimX >= button.x and panel.aimX <= (button.x + button.w) and + panel.aimY >= button.y and panel.aimY <= (button.y + button.h) then + buttonTarget = button + --table.insert(foundbuttons,{button,panel.aimedAt}) + end + else + --If the aim location is withing button radis + local dist = math.Distance(button.x,button.y,panel.aimX,panel.aimY) + if dist < (button.radius or 10) then + buttonTarget = button + --table.insert(foundbuttons,{button,panel.aimedAt}) + end + end + end + + if not buttonTarget then return false end + + return buttonTarget +end + +-- Checks what button/panel is being looked at and check for custom crosshair +hook.Add("Think","metrostroi-cabin-panel",function() + local ply = LocalPlayer() + if not IsValid(ply) then return end + + toolTipText = nil + drawCrosshair = false + canDrawCrosshair = false + + local train, outside = isValidTrainDriver(ply) + if not IsValid(train) then return end + if gui.IsConsoleVisible() or gui.IsGameUIVisible() or IsValid(vgui.GetHoveredPanel()) and not vgui.IsHoveringWorld() and vgui.GetHoveredPanel():GetParent() ~= vgui.GetWorldPanel() then return end + if train.ButtonMap ~= nil then + canDrawCrosshair = true + local plyaimvec + if outside then + plyaimvec = ply:GetAimVector() + else + local x,y = input.GetCursorPos() + --plyaimvec = util.AimVector( train.CamAngles, train.CamFOV,x,y,ScrW(),ScrH()) + --plyaimvec = ply:GetAimVector() + plyaimvec = gui.ScreenToVector(x,y) -- ply:GetAimVector() is unreliable when in seats + end + + -- Loop trough every panel + for k2,panel in pairs(train.ButtonMap) do + if not train:ShouldDrawPanel(kp2) then continue end + local pang = train:LocalToWorldAngles(panel.ang) + + if plyaimvec:Dot(pang:Up()) < 0 then + local campos = not outside and train.CamPos or ply:EyePos() + local ppos = train:LocalToWorld(panel.pos)-- - Vector(math.Round((not outside and train.HeadAcceleration or 0),2),0,0)) + local isectPos = LinePlaneIntersect(ppos,pang:Up(),campos,plyaimvec) + local localx,localy = WorldToScreen(isectPos,ppos,panel.scale,pang) + + panel.aimX = localx + panel.aimY = localy + if plyaimvec:Dot(isectPos - campos)/(isectPos-campos):Length() > 0 and localx > 0 and localx < panel.width and localy > 0 and localy < panel.height then + panel.aimedAt = isectPos:Distance(campos) + drawCrosshair = panel.aimedAt + else + panel.aimedAt = false + end + panel.outside = outside + else + panel.aimedAt = false + end + end + + -- Tooltips + local ttdelay = GetConVarNumber("metrostroi_tooltip_delay") + if GetConVarNumber("metrostroi_disablehovertext") == 0 and ttdelay and ttdelay >= 0 then + local button = findAimButton(ply,train) + --print(train.ClientProps[button.ID].button) + if button and + ((train.Hidden[button.ID] or train.Hidden[button.PropName]) and (not train.ClientProps[button.ID].config or not train.ClientProps[button.ID].config.staylabel) or + (train.Hidden.button[button.ID] or train.Hidden.button[button.PropName]) and (not train.ClientProps[button.PropName].config or not train.ClientProps[button.PropName].config.staylabel)) then + return + end + if button ~= lastAimButton then + lastAimButtonChange = CurTime() + lastAimButton = button + end + + if button then + if ttdelay == 0 or CurTime() - lastAimButtonChange > ttdelay then + if C_DrawDebug:GetInt() > 0 then + toolTipText,toolTipColor = button.ID,Color(255,0,255) + elseif button.plombed then + toolTipText,_,toolTipColor = button.plombed(train) + else + toolTipText,toolTipColor = button.tooltip + end + --[[toolTipPosition = nil + if button.tooltipState then + local newTT,newTTpos = button.tooltipState(train) + toolTipText = toolTipText..newTT + toolTipPosition = Metrostroi.GetPhrase(newTTpos) + end]] + if GetConVarNumber("metrostroi_disablehovertextpos") == 0 and button.tooltipState and button.tooltip then + toolTipText = toolTipText..button.tooltipState(train) + end + end + end + end + end +end) + + +-- Takes button table, sends current status +local function sendButtonMessage(button,train,outside) + local tooltip,buttID = nil,button.ID + if button.plombed then + tooltip,buttID = button.plombed(train) + end + if not buttID then Error(Format("Can't send button message! %s\n",button.ID)) return end + net.Start("metrostroi-cabin-button") + net.WriteEntity(train) + net.WriteString(buttID:gsub("^.+:","")) + net.WriteBit(button.state) + net.WriteBool(outside) + net.SendToServer() + return buttID + --RunConsoleCommand("metrostroi_button_press",button.ID..(button.state and 1 or 0)) +end +-- Takes button table, sends current status +local function sendPanelTouch(panel,x,y,outside,state) + net.Start("metrostroi-panel-touch") + net.WriteString(panel or "") + net.WriteInt(x,11) + net.WriteInt(y,11) + net.WriteBool(outside) + net.WriteBool(state) + net.SendToServer() + --RunConsoleCommand("metrostroi_button_press",button.ID..(button.state and 1 or 0)) +end + +-- Goes over a train's buttons and clears them, sending a message if needed +function ENT:ClearButtons() + if self.ButtonMap == nil then return end + for _,panel in pairs(self.ButtonMap) do + if panel.buttons then + for _,button in pairs(panel.buttons) do + if button.state == true then + button.state = false + sendButtonMessage(button,self) + end + end + end + end +end + +function ENT:HidePanel(kp,hide) + if hide and not self.HiddenPanels[kp] then + self.HiddenPanels[kp] = true + if self.ButtonMap[kp].props then + for _,v in pairs(self.ButtonMap[kp].props) do + --self.Hidden[v] = true + self:ShowHide(v,false,true) + self.Hidden.override[v] = true + end + end + end + if not hide and self.HiddenPanels[kp] then + self.HiddenPanels[kp] = nil + if self.ButtonMap[kp].props then + for _,v in pairs(self.ButtonMap[kp].props) do + --self.Hidden[v] = false + self.Hidden.override[v] = false + self:ShowHide(v,true,true) + end + end + end +end +-- Args are player, IN_ enum and bool for press/release +local function handleKeyEvent(ply,key,pressed) + if not game.SinglePlayer() and not IsFirstTimePredicted() then return end + if gui.IsConsoleVisible() or gui.IsGameUIVisible() or IsValid(vgui.GetHoveredPanel()) and not vgui.IsHoveringWorld() and vgui.GetHoveredPanel():GetParent() ~= vgui.GetWorldPanel() then return end + if key ~= MOUSE_LEFT and key ~= MOUSE_RIGHT then return end + local train, outside = isValidTrainDriver(ply) + + if not IsValid(train) then return end + if train.ButtonMap == nil then return end + if key == MOUSE_LEFT and not pressed then train:ClearButtons() end + if pressed then + local button,x,y,system = findAimButton(ply,train) + local plombed = false + if button and button.ID and button.ID[1] ~= "!" and (key ~= MOUSE_LEFT or not button.plombed or not ({button.plombed(train)})[3]) then + button.state = true + local buttID = sendButtonMessage(button,train,outside) + lastButton = button + lastButton.train = train + if train.OnButtonPressed then + train:OnButtonPressed(buttID:gsub("^.+:","")) + end + elseif not button and x and y and not lastTouch then + sendPanelTouch(system,x,y,outside,true) + lastTouch = {system,x,y} + end + else + -- Reset the last button pressed + if lastButton ~= nil then + if lastButton.state == true then + lastButton.state = false + sendButtonMessage(lastButton,lastButton.train,outside) + end + if train.OnButtonReleased and button then + local tooltip,buttID = nil,button.ID + if button.plombed then + tooltip,buttID = button.plombed(train) + end + train:OnButtonReleased(buttID:gsub("^.+:","")) + end + end + if lastTouch ~= nil then + sendPanelTouch(lastTouch[1],lastTouch[2],lastTouch[3],outside,false) + lastTouch = nil + end + end +end + +-- Hook for clearing the buttons when player exits +net.Receive("metrostroi-cabin-reset",function() + local ent = net.ReadEntity() + if IsValid(ent) and ent.ClearButtons ~= nil then + ent:ClearButtons() + end +end) + +local lastChanged = RealTime() +local camAnim = 0 +local camStart = 0 +local camEnd = 1 +local function handleCam(ply,button) + if not game.SinglePlayer() and not IsFirstTimePredicted() then return end + if not input.IsShiftDown() then return end + local train, outside = isValidTrainDriver(ply) + if not IsValid(train) or outside then return end + if not train.Cameras then return end + local oldCam = train.CurrentCamera + if button == KEY_LEFT then + repeat + train.CurrentCamera = train.CurrentCamera - 1 + if train.CurrentCamera < 0 then + train.CurrentCamera = #train.Cameras + end + until not train.Cameras[train.CurrentCamera] or not train.Cameras[train.CurrentCamera][4] or train:ShouldDrawPanel(train.Cameras[train.CurrentCamera][4]) + end + if button == KEY_RIGHT then + repeat + train.CurrentCamera = train.CurrentCamera + 1 + if train.CurrentCamera > #train.Cameras then + train.CurrentCamera = 0 + end + until not train.Cameras[train.CurrentCamera] or not train.Cameras[train.CurrentCamera][4] or train:ShouldDrawPanel(train.Cameras[train.CurrentCamera][4]) + end + if button == KEY_DOWN then + train.CurrentCamera = nil + end + if train.CurrentCamera ~= oldCam then + if not train.CurrentCamera then train.CurrentCamera = 0 end + if train.CurrentCamera > 0 then + local camera = train.Cameras[train.CurrentCamera] + local seatAng = ply:GetVehicle():GetAngles() + LocalPlayer():SetEyeAngles(train:LocalToWorldAngles(camera[2]-seatAng)) + else + LocalPlayer():SetEyeAngles(Angle(0,ply:GetVehicle():GetModel()=="models/nova/jeep_seat.mdl" and 90 or 0,0)) + end + MsgC("Curent camera:",Color(255,0,0),train.CurrentCamera,"\n") + if train.CamMoved then train:CamMoved() end + lastChanged = RealTime() + if camEnd == 1 then camStart = 0 end + camEnd = 0 + end +end +hook.Add("PlayerButtonDown", "metrostroi-cabin-buttons", function(ply,key) handleKeyEvent(ply, key,true) handleCam(ply,key) end) +hook.Add("PlayerButtonUp", "metrostroi-cabin-buttons", function(ply,key) handleKeyEvent(ply, key,false) end) +if game.SinglePlayer() then + net.Receive("PlayerButtonDown_metrostroi",function() + local key = net.ReadUInt(16) + handleCam(LocalPlayer(),key) + handleKeyEvent(LocalPlayer(),key,true) + end) + net.Receive("PlayerButtonUp_metrostroi",function() + handleKeyEvent(LocalPlayer(),net.ReadUInt(16),false) + end) +end +local Gradient = Material("vgui/gradient-d") +local oldTrain +hook.Add( "HUDPaint", "metrostroi-draw-cameras", function() + local train, outside = isValidTrainDriver(LocalPlayer()) + if not IsValid(train) or not train.Cameras or outside then + if IsValid(oldTrain) then + oldTrain.CurrentCamera = 0 + if oldTrain.CamMoved then oldTrain:CamMoved() end + oldTrain = nil + camStart = 0 + camEnd = 1 + end + return + end + oldTrain = train + local cam = train.Cameras[train.CurrentCamera] + camAnim = camAnim+(train.CurrentCamera-camAnim)*FrameTime()*5 + if camStart < 1 then camStart = math.Clamp(camStart+FrameTime()*2,0,1) end + if RealTime()-lastChanged > 5 and camEnd < 1 then camEnd = math.Clamp(camEnd+FrameTime()*0.5,0,1) end + local a = math.Clamp(camStart*(1-camEnd)*255,0,255 )-- + math.Clamp(255-(255-RealTime()-lastChanged+4)*512,0,255 ) + if a<= 0 then return end + surface.SetDrawColor(255,255,255,a) + surface.DrawRect(15,40,384,40) + render.SetScissorRect( 0, 60-15, 512, 60+15, true ) -- Enable the rect + draw.SimpleText(Metrostroi.GetPhrase("Train.Common.Camera0"),"Trebuchet24",20,60-camAnim*50,Color( 0, 0, 0,a),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + for k,v in ipairs(train.Cameras) do + draw.SimpleText(Metrostroi.GetPhrase(v[3]),"Trebuchet24",20,60+(k-camAnim)*50,Color( 0, 0, 0,a),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + render.SetScissorRect( 0, 0, 0, 0, false ) -- Disable after you are done + --[[ + render.SetStencilEnable(true) + render.SetStencilTestMask(255);render.SetStencilWriteMask(255);render.SetStencilReferenceValue(10) + render.SetStencilPassOperation(STENCIL_REPLACE) + render.SetStencilFailOperation(STENCIL_KEEP) + render.SetStencilZFailOperation(STENCIL_KEEP) + render.SetStencilCompareFunction(STENCIL_ALWAYS) + + render.SetStencilCompareFunction(STENCIL_EQUAL) + + render.SetStencilEnable(false) + render.SetScissorRect(0,0,0,0,false)]] +end) +local ppMat = Material("pp/blurx") +hook.Add( "HUDPaint", "metrostroi-draw-crosshair-tooltip", function() + --if not drawCrosshair then return end + if IsValid(LocalPlayer()) then + local scrX,scrY = surface.ScreenWidth(),surface.ScreenHeight() + + if canDrawCrosshair then + surface.DrawCircle(scrX/2,scrY/2,4.1,drawCrosshair and Color(255,0,0) or Color(255,255,150)) + end + + if toolTipText ~= nil then + surface.SetFont("MetrostroiLabels") + local w,h = surface.GetTextSize("SomeText") + local height = h*1.1 + local texts = string.Explode("\n",toolTipText) + surface.SetDrawColor(0,0,0,125) + for i,v in ipairs(texts) do + local y = scrY/2+height*(i) + if #v==0 then continue end + local w2,h2 = surface.GetTextSize(v) + surface.DrawRect(scrX/2-w2/2-5, scrY/2-h2/2+height*(i), w2+10, h2) + --[[if toolTipPosition and i==#texts then + local st,en = v:find(toolTipPosition) + local textSt,textEn = v:sub(1,st-1),v:sub(en+1,-1) + local x1 = 0-w2/2 + local x2 = surface.GetTextSize(textSt)-w2/2 + local x3 = surface.GetTextSize(textSt)+surface.GetTextSize(toolTipPosition)-w2/2 + draw.SimpleText(textSt,"MetrostroiLabels",scrX/2+x1,y, toolTipColor or Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(toolTipPosition,"MetrostroiLabels",scrX/2+x2,y, toolTipColor or Color(0,255,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(textEn,"MetrostroiLabels",scrX/2+x3,y, toolTipColor or Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(scrX/2+x2,y+h/2-3,scrX/2+x3,y+h/2-3,toolTipColor or Color(0,255,0),1) + else]] + draw.SimpleText(v,"MetrostroiLabels",scrX/2,y, toolTipColor or Color(255,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --end + end + --[[ + local w1 = surface.GetTextSize(text1) + local w2 = surface.GetTextSize(text2) + + surface.SetTextColor(toolTipColor or Color(255,255,255)) + surface.SetTextPos((scrX-w1)/2,scrY/2+10) + surface.DrawText(text1) + surface.SetTextPos((scrX-w2)/2,scrY/2+30) + surface.DrawText(text2)]] + end + end +end) + +language.Add("SBoxLimit_train_limit","Wagons limit") +-------------------------------------------------------------------------------- +-- Turn light on or off +-------------------------------------------------------------------------------- +function ENT:SetLightPower(index,power,brightness) + if self.HiddenLamps[index] then return end + local lightData = self.LightsOverride[index] or self.Lights[index] + brightness = brightness or 1 + if lightData[1] == "glow" or lightData[1] == "light" then + if lightData.panel and not self.SpritesEnabled or lightData.aa and self.AAEnabled then return end + self.LightBrightness[index] = brightness * (lightData.brightness or 0.5) + if power and self.Sprites[index] then return end + self.Sprites[index] = nil + if not power then return end + self.Sprites[index] = util.GetPixelVisibleHandle() + lightData.mat = Metrostroi.MakeSpriteTexture((lightData.texture or "sprites/light_glow02"),lightData[1] == "light") + return + end + + if power and IsValid(self.GlowingLights[index]) then + if lightData[1] == "headlight" and IsValid(self.GlowingLights[index]) then + -- Check if light already glowing + if brightness ~= self.LightBrightness[index] then + local light = self.GlowingLights[index] + light:SetBrightness(brightness * (lightData.brightness or 1.25)) + light:Update() + self.LightBrightness[index] = brightness + end + return + elseif (lightData[1] == "glow") or (lightData[1] == "light") then + local brightness = brightness * (lightData.brightness or 0.5) + if brightness ~= self.LightBrightness[index] then + local light = self.GlowingLights[index] + light:SetBrightness(brightness) + self.LightBrightness[index] = brightness + end + return + elseif lightData[1] == "dynamiclight" then + if brightness ~= self.LightBrightness[index] then + local light = self.GlowingLights[index] + light:SetLightStrength(brightness) + self.LightBrightness[index] = brightness + end + return + end + end + if IsValid(self.GlowingLights[index]) then + self.GlowingLights[index]:Remove() + end + self.GlowingLights[index] = nil + self.LightBrightness[index] = brightness + if not power then return end + -- Create light + if lightData[1] == "light" or lightData[1] == "glow" then + local light = ents.CreateClientside("gmod_train_sprite") + light:SetPos(self:LocalToWorld(lightData[2])) + --light:SetLocalAngles(lightData[3]) + + -- Set parameters + local brightness = brightness * (lightData.brightness or 0.5) + light:SetColor(lightData[4]) + light:SetBrightness(brightness) + light:SetTexture((lightData.texture or "sprites/light_glow02")..".vmt",lightData[1] == "light") + light:SetSize(lightData.scale or 1.0) + light:Set3D(false) + + self.GlowingLights[index] = light + elseif (lightData[1] == "headlight") and (not lightData.backlight or self.RedLights) and (not lightData.panellight or self.OtherLights) then + local light = ProjectedTexture() + light:SetPos(self:LocalToWorld(lightData[2])) + light:SetAngles(self:LocalToWorldAngles(lightData[3])) + --light:SetParent(self) + --light:SetLocalPos(lightData[2]) + --light:SetLocalAngles(lightData[3]) + + -- Set parameters + --light:SetKeyValue("enableshadows", lightData.shadows or 1) + if lightData.headlight and self.HeadlightShadows or not lightData.headlight and self.OtherShadows then + light:SetEnableShadows((lightData.shadows or 0)>0) + else + light:SetEnableShadows(false) + end + --light:SetKeyValue("farz", lightData.farz or 2048) + light:SetFarZ(lightData.farz or 2048) + --light:SetKeyValue("nearz", lightData.nearz or 16) + light:SetNearZ(lightData.nearz or 16) + --light:SetKeyValue("lightfov", lightData.fov or 120) + if lightData.fov then light:SetFOV(lightData.fov or 120) end + if lightData.hfov then light:SetHorizontalFOV(lightData.hfov) end + if lightData.vfov then light:SetVerticalFOV(lightData.vfov or 120) end + light:SetOrthographic(false) + -- Set Brightness + --local brightness = brightness * (lightData.brightness or 1.25) + light:SetBrightness(brightness * (lightData.brightness or 1.25)) + --[[light:SetKeyValue("lightcolor", + Format("%i %i %i 255", + lightData[4].r*brightness, + lightData[4].g*brightness, + lightData[4].b*brightness + ) + )]] + light:SetColor(lightData[4]) + light:SetTexture(lightData.texture or "effects/flashlight001") + + -- Turn light on + light:Update() --"effects/flashlight/caustics" + --light:Input("SpotlightTexture",nil,nil,lightData.texture or "effects/flashlight001") + self.GlowingLights[index] = light + elseif lightData[1] == "dynamiclight" then + local light = ents.CreateClientside("gmod_train_dlight") + light:SetParent(self) + + -- Set position + light:SetLocalPos(lightData[2]) + --light:SetLocalAngles(lightData[3]) + + -- Set parameters + light:SetDColor(lightData[4]) + --light:SetKeyValue("style", 0) + light:SetSize(lightData.distance) + light:SetBrightness(lightData.brightness or 2) + light:SetLightStrength(brightness) + + -- Turn light on + light:Spawn() + self.GlowingLights[index] = light + end +end + +function ENT:OnStyk(soundid,location,range,pitch) + local speed = self:GetNW2Float("TrainSpeed",0)/100 + --local str = "" + if self.TunnelCoeff > 0.01 then + --local snd = Format("b%dtunnel_%d%s",pitch,range%10+1,soundid) + --str=str..Format("tun: %s=%s vol=%d pitch=",snd,self.SoundNames[snd],self.TunnelCoeff*(0.9-math.min(speed,1)*0.3),0.9+math.min(speed,1)*0.3) + self:PlayOnce(Format("b%dtunnel_%d%s",pitch,range%10+1,soundid),"bass",self.TunnelCoeff*(0.9-math.min(speed,1)*0.3),0.9+math.min(speed,1)*0.2) + end + if self.StreetCoeff > 0.01 then + --local snd = Format("b%dstreet_%d%s",pitch,range%14+1,soundid) + --str=str..Format(", str: %s=%s vol=%d pitch=",snd,self.SoundNames[snd],self.StreetCoeff*(0.6-math.min(speed,1)*0.3),0.9+math.min(speed,1)*0.3) + self:PlayOnce(Format("b%dstreet_%d%s",pitch,range%14+1,soundid),"bass",self.StreetCoeff*(0.6-math.min(speed,1)*0.3),0.9+math.min(speed,1)*0.2) + end + --RunConsoleCommand("say",str) +end + +concommand.Add("metrostroi_reload_client",function() + Metrostroi.ReloadClientside = true + timer.Simple(0.5,function() if Metrostroi.ReloadClientside then Metrostroi.ReloadClientside = false end end) +end,nil,"Reload all clientside models") +Metrostroi.OptimisationPatch() \ No newline at end of file diff --git a/lua/entities/gmod_subway_base/init.lua b/lua/entities/gmod_subway_base/init.lua new file mode 100644 index 0000000..09e6777 --- /dev/null +++ b/lua/entities/gmod_subway_base/init.lua @@ -0,0 +1,2583 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") +-----------------------------------DUPLICATOR---------------------------------- + +function ENT:PreEntityCopy() + local BaseDupe = {} + local Tbl = {} + if IsValid(self.FrontBogey) then + Tbl[1] = { + self.FrontBogey:EntIndex(), + self.FrontBogey.NoPhysics, + self.FrontBogey:GetAngles(), + } + end + if IsValid(self.FrontJoin) then + Tbl[1][4] = self.FrontJoin:EntIndex() + end + if IsValid(self.RearBogey) then + Tbl[2] = { + self.RearBogey:EntIndex(), + self.RearBogey.NoPhysics, + self.RearBogey:GetAngles(), + } + end + if IsValid(self.RearJoin) then + Tbl[2][4] = self.RearJoin:EntIndex() + end + + BaseDupe.Tbl = Tbl + duplicator.StoreEntityModifier(self, "BaseDupe", BaseDupe) +end +duplicator.RegisterEntityModifier( "BaseDupe" , function() end) + +function ENT:PostEntityPaste(ply,ent,createdEntities) + local BaseDupe = ent.EntityMods.BaseDupe + local Tbl = BaseDupe.Tbl + for k,v in pairs(Tbl) do + BaseDupe.Tbl[k][1] = createdEntities[BaseDupe.Tbl[k][1]] or nil + BaseDupe.Tbl[k][4] = createdEntities[BaseDupe.Tbl[k][4]] or nil + end + if IsValid(self.FrontBogey) and IsValid(BaseDupe.Tbl[1][1]) then self.FrontBogey:Remove() end + if IsValid(self.RearBogey) and IsValid(BaseDupe.Tbl[2][1]) then self.RearBogey:Remove() end + if IsValid(self.FrontJoin) and IsValid(BaseDupe.Tbl[1][4]) then self.FrontJoin:Remove() end + if IsValid(self.RearJoin) and IsValid(BaseDupe.Tbl[2][4]) then self.RearJoin:Remove() end + if IsValid(self.FrontBogey) and IsValid(self.RearBogey) and not self.IgnoreEngine then + for i = 1,#self.TrainEntities do + if IsValid(self.TrainEntities[i]) and self.TrainEntities[i]:GetClass() == "gmod_train_bogey" then + table.remove(self.TrainEntities,i) + end + end + end + self.FrontBogey = Tbl[1][1] or nil + self.RearBogey = Tbl[2][1] or nil + for k,v in pairs(Tbl) do + if IsValid(v[1]) then + v[1].NoPhysics = v[2] or nil + + -- Assign ownership + if CPPI and IsValid(self:CPPIGetOwner()) then v[1]:CPPISetOwner(self:CPPIGetOwner()) end + + -- Some shared general information about the bogey + self.SquealSound = self.SquealSound or math.floor(4*math.random()) + self.SquealSensitivity = self.SquealSensitivity or math.random() + v[1].SquealSensitivity = self.SquealSensitivity + v[1]:SetNW2Int("SquealSound",self.SquealSound) + v[1]:SetNW2Bool("IsForwardBogey", k == 1) + v[1]:SetNW2Entity("TrainEntity", self) + + -- Constraint bogey to the train + if self.NoPhysics then + v[1]:SetParent(self) + else + constraint.Axis(v[1],self,0,0, + Vector(0,0,0),Vector(0,0,0), + 0,0,0,1,Vector(0,0,1),false) + end + + if self.SubwayTrain.Type == "Tatra" then + v[1]:SetAngles(self:GetAngles() + Angle(0,(1-k)*180,0)) + end + table.insert(self.TrainEntities,v[1]) + end + end + self.Owner = ply +end + +-------------------------------------------------------------------------------- +function ENT:Initialize() + self.Joints = {} + self.JointPositions = {} + if self:GetModel() == "models/error.mdl" then + self:SetModel("models/props_lab/reciever01a.mdl") + end + if not self.NoPhysics then + self:PhysicsInit(SOLID_VPHYSICS) + self:SetMoveType(MOVETYPE_VPHYSICS) + self:SetSolid(SOLID_VPHYSICS) + else + self:SetSolid(SOLID_VPHYSICS) + end + self:SetUseType(SIMPLE_USE) + -- Prop-protection related + if CPPI and IsValid(self.Owner) then + self:CPPISetOwner(self.Owner) + end + -- Entities that belong to train and must be cleaned up later + self.TrainEntities = {} + -- All the sitting positions in train + self.Seats = {} + -- List of headlights, dynamic lights, sprite lights + self.Lights = {} + -- Load sounds + self:InitializeSounds() + if self.NoTrain then return end + + -- Possible number of train wires + self.TrainWireCount = self.TrainWireCount or 36 + -- Train wires + self:ResetTrainWires() + self:UpdateWagonList() + self:ChooseTrainWireLeader() + self:GenerateWagonNumber() + -- Systems defined in the train + self.Systems = {} + -- Initialize train systems + self:InitializeSystems() + -- Initialize highspeed interface + self:InitializeHighspeedLayout() + -- Add telemetry recording module if required + if GetConVarNumber("metrostroi_write_telemetry") == 1 then + self:LoadSystem("Telemetry") + end + self:LoadSystem("FailSim") + + + if Wire_CreateInputs then + -- Initialize wire interface + self.WireIOSystems = self.WireIOSystems or { "KV", "ALSCoil", "Pneumatic"} + self.WireIOIgnoreList = self.WireIOIgnoreList or { + "ALSCoilEnabled", "ALSCoilRealF5" + } + local inputs = {} + local outputs = {} + local inputTypes = {} + local outputTypes = {} + local ignoreOutputs = {} + for k,v in pairs(self.WireIOIgnoreList) do + ignoreOutputs[v] = true + end + for _,name in pairs(self.WireIOSystems) do + local v = self.Systems[name] + if v then + local i = v:Inputs() + local o = v:Outputs() + + for _,v2 in pairs(i) do + if type(v2) == "string" then + local name = (v.Name or "")..v2 + if not ignoreOutputs[name] then + table.insert(inputs,name) + table.insert(inputTypes,"NORMAL") + end + elseif type(v2) == "table" then + local name = (v.Name or "")..v2[1] + if not ignoreOutputs[name] then + table.insert(inputs,name) + table.insert(inputTypes,v2[2]) + end + else + ErrorNoHalt("Invalid wire input for metrostroi subway entity") + end + end + + for _,v2 in pairs(o) do + if type(v2) == "string" then + local name = (v.Name or "")..v2 + if not ignoreOutputs[name] then + table.insert(outputs,(v.Name or "")..v2) + table.insert(outputTypes,"NORMAL") + end + elseif type(v2) == "table" then + local name = (v.Name or "")..v2[1] + if not ignoreOutputs[name] then + table.insert(outputs,(v.Name or "")..v2[1]) + table.insert(outputTypes,v2[2]) + end + else + ErrorNoHalt("Invalid wire output for metrostroi subway entity") + end + end + end + end + + -- Add input for a custom driver seat + table.insert(inputs,"DriverSeat") + table.insert(inputTypes,"ENTITY") + + -- Add input for wrench + table.insert(inputs,"DriversWrenchPresent") + table.insert(inputTypes,"NORMAL") + + -- Add I/O for train wires + if self.SubwayTrain then + --for i=1,self.TrainWireCount do + for i=1,20 do + table.insert(inputs,"TrainWire"..i) + table.insert(inputTypes,"NORMAL") + table.insert(outputs,"TrainWire"..i) + table.insert(outputTypes,"NORMAL") + end + end + + self.Inputs = WireLib.CreateSpecialInputs(self,inputs,inputTypes) + self.Outputs = WireLib.CreateSpecialOutputs(self,outputs,outputTypes) + else + self.WireIOSystems = {} + self.WireIOIgnoreList = {} + end + + -- Setup drivers controls + self.ButtonBuffer = {} + self.KeyBuffer = {} + self.KeyMap = {} + + -- Override for if drivers wrench is present + self.DriversWrenchPresent = false + + -- External interaction areas + self.InteractionAreas = {} + + -- Joystick module support + if joystick then + self.JoystickBuffer = {} + end + self.DebugVars = {} + + + -- Cross-connections in train wires + self.TrainWireCrossConnections = {} + + self.TrainWireInverts = {} + self.TrainWireWritersID = {} + self.TrainWireTurbostroi = {} + -- Overrides for train wire values from wiremod interface and special concommand + self.TrainWireOverrides = {} + self.TrainWireOutside = {} + + + -- Is this train 'odd' or 'even' in coupled set + self.TrainCoupledIndex = 0 + + -- Speed and acceleration of train + self.Speed = 0 + self.SpeedSign = 0 + self.Acceleration = 0 + + -- Initialize train + if Turbostroi and (not self.NoPhysics) and not self.DontAccelerateSimulation then + Turbostroi.InitializeTrain(self) + end + if not Turbostroi or self.DontAccelerateSimulation then self.DataCache = {} end + + -- Passenger related data (must be set by derived trains to allow boarding) + self.LeftDoorsOpen = false + --self.LeftDoorsBlocked = false + self.RightDoorsOpen = false + --self.RightDoorsBlocked = false + + -- Get default train mass + if IsValid(self:GetPhysicsObject()) then + self.NormalMass = self:GetPhysicsObject():GetMass() + end + + SetGlobalInt("metrostroi_train_count",Metrostroi.TrainCount()) + net.Start("MetrostroiTrainCount") net.Broadcast() + + --[[GRAVHULL + if GravHull then + if !(IsValid(self) and self:GetMoveType() == MOVETYPE_VPHYSICS and !GravHull.HULLS[self]) then return false end + GravHull.RegisterHull(self,-2,100) + GravHull.UpdateHull(self) + end + ]] + + self.FailSim:TriggerInput("TrainWires",self.TrainWireCount) + self:FindFineSkin() + -- Initialize train systems + self:PostInitializeSystems() + for k,v in pairs(self.CustomSpawnerUpdates) do if k ~= "BaseClass" then v(self) end end +end +function ENT:GetWagonNumber() + return self.WagonNumber or self:EntIndex() +end +-- Remove entity +function ENT:OnRemove() + -- Remove all linked objects + constraint.RemoveAll(self) + if self.TrainEntities then + for k,v in pairs(self.TrainEntities) do + SafeRemoveEntity(v) + end + end + + -- Deinitialize train + if Turbostroi then + Turbostroi.DeinitializeTrain(self) + end + SetGlobalInt("metrostroi_train_count",Metrostroi.TrainCount()) + net.Start("MetrostroiTrainCount") net.Broadcast() +end + +function ENT:GetDriverName() + local drv = self:GetDriver() + local name = tostring(self) + if IsValid(drv) then + name = drv:GetName().."(sit in driver place)" + elseif IsValid(self.Owner) then + name = self.Owner:GetName().."(owner)" + end + return name +end + +function ENT:GetDriverPly() + local drv = self:GetDriver() + if IsValid(drv) then + return drv,true + elseif IsValid(self.Owner) then + return self.Owner,false + else + return self,nil + end +end + +-- Interaction zones +function ENT:Use(ply) + local tr = ply:GetEyeTrace() + if not tr.Hit then return end + local hitpos = self:WorldToLocal(tr.HitPos) + --print(hitpos) + if self.InteractionZones and ply:GetPos():Distance(tr.HitPos) < 100 then + for k,v in pairs(self.InteractionZones) do + if hitpos:Distance(v.Pos) < v.Radius then + self:ButtonEvent(v.ID,nil,ply) + end + end + end +end + +-- Trigger output +function ENT:TriggerOutput(name,value) + if Wire_TriggerOutput then + Wire_TriggerOutput(self,name,tonumber(value) or 0) + end +end + +-- Trigger input +function ENT:TriggerInput(name, value) + -- Custom seat + if name == "DriverSeat" then + if IsValid(value) and value:IsVehicle() then + self.DriverSeat = value + else + self.DriverSeat = nil + end + end + + -- Train wire input + if string.sub(name,1,9) == "TrainWire" then + local id = tonumber(string.sub(name,10)) + self.TrainWireOverrides[id] = value + end + + -- Drivers wrench present + if name == "DriversWrenchPresent" then + self.DriversWrenchPresent = (value > 0.5) + end + + -- Propagate inputs to relevant systems + for k,v in pairs(self.Systems) do + if v.IsInput[name] then + v:TriggerInput(name,value) + elseif v.Name and (string.sub(name,1,#v.Name) == v.Name) then + local subname = string.sub(name,#v.Name+1) + if v.IsInput[subname] then + v:TriggerInput(subname,value) + end + end + end +end + +-- The debugger will call this +function ENT:GetDebugVars() + -- Train wires + for i=1,99 do + self.DebugVars["TW"..i] = self:ReadTrainWire(i) + end + + -- System variables + for k,v in pairs(self.Systems) do + for _,output in pairs(v.OutputsList or {}) do + self.DebugVars[(v.Name or "")..output] = v[output] or 0 + end + end + + -- Speed/acceleration + self.DebugVars["Speed"] = self.Speed + self.DebugVars["Acceleration"] = self.Acceleration + return self.DebugVars +end + +--Debugging function, call via the console or something +function ENT:ShowInteractionZones() + for k,v in pairs(self.InteractionZones) do + debugoverlay.Sphere(self:LocalToWorld(v.Pos),v.Radius,15,Color(255,185,0),true) + end +end + + + + +-------------------------------------------------------------------------------- +-- Highspeed interface +-------------------------------------------------------------------------------- +-- Initialize highspeed layout +function ENT:InitializeHighspeedLayout() + --local layout = "" + self.HighspeedLayout = {} + for k,v in pairs(Metrostroi.TrainHighspeedInterface) do + local offset = v[1] + 128 + if self.Systems[v[2] ] then + self.HighspeedLayout[offset] = function(value) + if value then + self.Systems[v[2] ]:TriggerInput(v[3],value) + else + return (self.Systems[v[2] ][v[3] ] or 0) + end + end + end + + --layout = layout.."["..offset.."]\t"..v[2].."."..v[3].."\r\n" + end + --file.Write("hs_layout.txt",layout) + + --[[local str = "" + local offset = 0 + for k,v in SortedPairs(self.Systems) do + for i=1,#v.InputsList do + str = str.."{ "..offset..", \""..k.."\", \""..v.InputsList[i].."\" },\r\n" + offset = offset + 1 + end + for i=1,#v.OutputsList do + str = str.."{ "..offset..", \""..k.."\", \""..v.OutputsList[i].."\" },\r\n" + offset = offset + 1 + end + str = str..k.."\r\n" + end + file.Write("hs_layout3.txt",str)]]-- +end + +function ENT:ChooseTrainWireLeader() + local key = math.random( 1, #self.WagonList ) + for k,v in ipairs(self.WagonList) do + v.TrainWireLeader = key==k + end +end + +function ENT:ElectricConnected(train,isRear) + if not IsValid(train) then return end + local conf = self.SubwayTrain + + if isRear then + local rT = self.RearTrain + local rC = rT.SubwayTrain + + if not IsValid(rT) then return end + local rTIsFront = rT.FrontTrain==train + + if rTIsFront and rC and rC.NoFrontEKK then return end + if rC and conf and conf.EKKType ~= rC.EKKType then return end + if rTIsFront and rT.FrontCoupledBogeyDisconnect or not rTIsFront and rT.RearCoupledBogeyDisconnect or self.RearCoupledBogeyDisconnect then return end + if not IsValid(self.RearCouple) or self.RearCouple:ElectricDisconnected() or ( + rT.FrontTrain == self and (not IsValid(rT.FrontCouple) or rT.FrontCouple:ElectricDisconnected()) + or rT.RearTrain == self and (not IsValid(rT.RearCouple) or rT.RearCouple:ElectricDisconnected())) then return end + else + local fT = self.FrontTrain + local fC = fT.SubwayTrain + + if not IsValid(fT) then return end + local fTIsFront = fT.FrontTrain==train + + if conf.NoFrontEKK or fTIsFront and fC and fC.NoFrontEKK then return end + if fC and conf and conf.EKKType ~= fC.EKKType then return end + if fTIsFront and fT.FrontCoupledBogeyDisconnect or not fTIsFront and fT.RearCoupledBogeyDisconnect or self.FrontCoupledBogeyDisconnect then return end + if IsValid(self.FrontCouple) and self.FrontCouple:ElectricDisconnected() or ( + fT.FrontTrain == self and (not IsValid(fT.FrontCouple) or fT.FrontCouple:ElectricDisconnected()) + or fT.RearTrain == self and (not IsValid(fT.RearCouple) or fT.RearCouple:ElectricDisconnected())) then return end + end + return true +end + +function ENT:UpdateWagonList(selfupdate) + if self.LastWagonListUpdate == CurTime() then return end + self.LastUpdate = CurTime() + + -- Populate list of wagons + self.WagonList = {} + self.WagonListIDs = {} + local function populateList(train,checked) + if IsValid(train) then + if checked[train] then return end + checked[train] = true + + self.WagonListIDs[train] = table.insert(self.WagonList,train) + local conf = train.SubwayTrain + local fT = train.FrontTrain + if IsValid(fT) then + local fC = fT.SubwayTrain + --if not conf.NoFrontEKK and (fT.FrontTrain~=train or not fC.NoFrontEKK) and not train.FrontCoupledBogeyDisconnect and conf.EKKType == fC.EKKType then + if train:ElectricConnected(fT,false) then + populateList(fT,checked) + end + end + local rT = train.RearTrain + if IsValid(rT) then + local rC = rT.SubwayTrain + --if (rT.FrontTrain~=train or not rC.NoFrontEKK) and not train.RearCoupledBogeyDisconnect and conf.EKKType == rC.EKKType then + if train:ElectricConnected(rT,true) then + populateList(rT,checked) + end + end + end + end + populateList(self,{}) + if selfupdate then return end + for _,v in pairs(self.WagonList) do + if v ~= self then v:UpdateWagonList(true) end + end +end + +function ENT:GetWagonCount() + return #self.WagonList +end + +function ENT:ReadCell(Address) + if Address < 0 then return nil end + if Address == 0 then + return 1 + end + if (Address > 0) and (Address < 128) then + return self:ReadTrainWire(Address) + end + if self.HighspeedLayout[Address] then + return self.HighspeedLayout[Address]() + end + if (Address >= 49152) and (Address < 49152+8192) then + local x = (Address - (49152+64)) + local entryID = math.floor(x/4) + local varID = x%4 + + if self.Schedule then + if (entryID >= 0) then + local entry = self.Schedule[entryID+1] + if entry then + if varID >= 2 then + return (entry[varID+1] or 0)*60 + else + return entry[varID+1] or 0 + end + end + end + if Address == 49152 then return #self.Schedule end + if Address == 49153 then return self.Schedule.ScheduleID end + if Address == 49154 then return self.Schedule.Interval end + if Address == 49155 then return self.Schedule.Duration end + if Address == 49156 then return self.Schedule.StartStation end + if Address == 49157 then return self.Schedule.EndStation end + if Address == 49158 then return self.Schedule.StartTime*60 end + if Address == 49159 then return self.Schedule.EndTime*60 end + end + + local pos = Metrostroi.TrainPositions[self] + if (Address >= 49160) and (Address <= 49171) and pos and pos[1] then + pos = pos[1] + + -- Get stations + local current,next,prev = 0,0,0 + local cPlatID,nPlatID,pPlatID = 0,0,0 + local x1,x2,x3 = 1e9,0,1e9 + for stationID,stationData in pairs(Metrostroi.Stations) do + for platformID,platformData in pairs(stationData) do + if (platformData.node_start.path == pos.path) and + (platformData.x_start < pos.x) and + (platformData.x_end > pos.x) then + current = stationID + cPlatID = platformID + end + if (platformData.node_start.path == pos.path) and + (platformData.x_start > pos.x) then + if platformData.x_start < x1 then + x1 = platformData.x_start + next = stationID + nPlatID = platformID + end + end + if (platformData.node_start.path == pos.path) and + (platformData.x_start < pos.x) then + if platformData.x_start > x2 then + x2 = platformData.x_start + prev = stationID + pPlatID = platformID + end + end + if (platformData.node_start.path == pos.path) and + (platformData.x_end > pos.x) then + if platformData.x_end < x3 then + x3 = platformData.x_end + next = stationID + nPlatID = platformID + end + end + end + end + if Address == 49160 then return current end + if Address == 49161 then return next end + if Address == 49162 then return prev end + if Address == 49163 then return x1 - pos.x end + if Address == 49165 then return x3 - pos.x end + if Address == 49166 then return cPlatID end + if Address == 49167 then return nPlatID end + if Address == 49168 then return pPlatID end + + if Address == 49169 then return current > 0 and current or next end + if Address == 49170 then return cPlatID > 0 and cPlatID or nPlatID end + if Address == 49170 then return x2 - pos.x end + end + return 0 + end + + if (Address >= 57344) and (Address < 57344+4096) then + local x = (Address - 57344) + local lineID = math.floor(x/800) + local stationID = math.floor((x - lineID*800)/8) + local platformID = math.floor((x - lineID*800 - stationID*8)/4) + local varID = x - lineID*800 - stationID*8 - platformID*4 + + local station = Metrostroi.Stations[(lineID+1)*100 + stationID] + if station then + local platform = station[platformID] + if platform then + if varID == 0 then return platform.x_start end + if varID == 1 then return platform.x_end end + if varID == 2 then return platform.node_start.path.id end + if varID == 3 then return 0 end + end + end + return 0 + end + if (Address >= 65504) and (Address <= 65510) then + local pos = Metrostroi.TrainPositions[self] + if pos and pos[1] then + pos = pos[1] + if Address == 65504 then return pos.x end + if Address == 65505 then return pos.y end + if Address == 65506 then return pos.z end + if Address == 65507 then return pos.distance end + if Address == 65508 then return pos.forward and 1 or 0 end + if Address == 65509 then return pos.node.id end + if Address == 65510 then return pos.path.id end + end + return 0 + end + if Address == 65535 then + ---self:UpdateWagonList() + return #self.WagonList + end + if Address >= 65536 then + local wagonIndex = 1+math.floor(Address/65536) + local variableAddress = Address % 65536 + ---self:UpdateWagonList() + + if self.WagonList[wagonIndex] and IsValid(self.WagonList[wagonIndex]) then + return self.WagonList[wagonIndex]:ReadCell(variableAddress) + else + return 0 + end + end +end + +function ENT:WriteCell(Address, value) + if Address < 0 then return false end + if Address == 0 then return true end + if (Address >= 1) and (Address < 128) then + self.TrainWireOverrides[Address] = value > 0 and 1 or nil + return true + end + if self.HighspeedLayout[Address] then + self.HighspeedLayout[Address](value) + return true + end + if (Address >= 32768) and (Address < (32768+32*24)) then + local stringID = math.floor((Address-32768)/32) + local charID = (Address-32768)%32 + local prevStr = self:GetNW2String("CustomStr"..stringID) + local newStr = "" + for i=0,31 do + local ch = string.byte(prevStr,i+1) or 32 + if i == charID then ch = value end + newStr = newStr..(string.char(ch) or "?") + end + self:SetNW2String("CustomStr"..stringID,newStr) + end + if Address == 49164 then + if self.Announcer then + self.Announcer:Queue(value) + end + end + if Address >= 65536 then + local wagonIndex = 1+math.floor(Address/65536) + local variableAddress = Address % 65536 + ---self:UpdateWagonList() + + if self.WagonList[wagonIndex] and IsValid(self.WagonList[wagonIndex]) then + return self.WagonList[wagonIndex]:WriteCell(variableAddress,value) + else + return false + end + end + return true +end + + +function ENT:SpawnButton(model,pos,ang,min,max,soundtbl) + local ent = ents.Create("gmod_train_button") + ent:SetPos(self:LocalToWorld(pos)) + ent:SetAngles(self:LocalToWorldAngles(ang )) + ent:SetParent(self) + ent.Owner = ply + ent.Model = model + ent.Sounds = soundtbl + ent:Spawn() + ent:Activate() + return ent +end +function ENT:SpawnSwitch(model,pos,ang,min,max,soundtbl) + local ent = ents.Create("gmod_train_swtich") + ent:SetPos(self:LocalToWorld(pos)) + ent:SetAngles(self:LocalToWorldAngles(ang )) + ent:SetParent(self) + ent.Owner = ply + ent.Model = model + ent.Min = min + ent.Max = max + ent.Sounds = soundtbl + ent:Spawn() + ent:Activate() + return ent +end + +function ENT:CANWrite(source,sourceid,target,targetid,textdata,numdata,checked) + for i=1,#self.WagonList do + local train = self.WagonList[i] + if not targetid or targetid == train:GetWagonNumber() then + local sys = train[target] + if sys and sys.CANReceive then + sys:CANReceive(source,sourceid,target,targetid,textdata,numdata) + end + if targetid then return end + end + end + --[[ + --print(self,"CANWrite called") + if not checked then + checked = {} + end + checked[self] = true + + if self.RearTrain and not checked[self.RearTrain] and not self.RearCoupledBogeyDisconnect then + self.RearTrain:CANWrite(source,sourceid,target,targetid,textdata,numdata,checked) + end + if self.FrontTrain and not checked[self.FrontTrain] and not self.FrontCoupledBogeyDisconnect then + self.FrontTrain:CANWrite(source,sourceid,target,targetid,textdata,numdata,checked) + end]] +end +--[[ +function ENT:CANWrite(src,dest,textdata,numdata) + self:CANReceive(src,dest,textdata,numdata) +end]] + --(train,3,"","",36,train:ReadTrainWire(36)) +-------------------------------------------------------------------------------- +-- Train wire I/O +-------------------------------------------------------------------------------- +function ENT:LeaderReadTrainWire(id) + if self.TrainWireOverrides[id] then return self.TrainWireOverrides[id] end + if self.TrainWireOutside[id] then return self.TrainWireOutside[id] end + return (self.TrainWireTurbostroi[id] or 0)+(self.TrainWireWriters[id] or 0) +end + +function ENT:WriteTrainWire(k,v,ignore) + if not self.TrainWireWritersID[k] then self.TrainWireWritersID[k] = true end + self.TrainWireWriters[k] = v +end + +function ENT:ReadTrainWire(k) + return self.TrainWires[k] or 0 +end +function ENT:ResetTrainWires() + -- Remember old train wires reference + local trainWires = self.TrainWires + -- Create new train wires + self.TrainWires = {} + self.TrainWireWriters = {} + + -- Initialize train wires to zero values + for i=1,128 do self.TrainWires[i] = 0 end +end + +function ENT:GetTrainWire18() + ---self:UpdateWagonList() + --[[ + -- Total resistance + local Rtotal = 0.0 + for i,train in ipairs(self.WagonList) do + if train.Electric and train.LK4 then + local RLK4 = train.Electric.RPSignalResistor + train.LK4.Value*1e9 + local RRP = (1-train.RPvozvrat.Value)*1e9 + local Rtrain = ((RRP^-1) + (RLK4^-1))^-1 + Rtotal = Rtotal + (Rtrain^-1) + end + end]] + local Rtotal = 0.0 + for i,train in ipairs(self.WagonList) do + if train.Electric and train.LK4 then + local RLK4 = 1-train.LK4.Value + local RRP = train.RPvozvrat.Value + Rtotal = Rtotal + RLK4+RRP*100 + end + end + + -- Mask for panel RP light info + --local Mask = (self.Panel["RedRP"] > 0.25) and 0 or 1e9 + return Rtotal/#self.WagonList +end + + + + +-------------------------------------------------------------------------------- +-- Coupling logic +-------------------------------------------------------------------------------- +function ENT:UpdateIndexes() + local function updateIndexes(train,checked,newIndex) + if not train then return end + if checked[train] then return end + checked[train] = true + + train.TrainCoupledIndex = newIndex + + local conf = train.SubwayTrain + local fT = train.FrontTrain + if IsValid(fT) then + local fC = fT.SubwayTrain + --if not conf.NoFrontEKK and (fT.FrontTrain~=train or not fC.NoFrontEKK) and not train.FrontCoupledBogeyDisconnect and conf.EKKType == fC.EKKType then + if train:ElectricConnected(fT,false) then + if fT and (fT.FrontTrain == train) then + updateIndexes(fT,checked,1-newIndex) + else + updateIndexes(fT,checked,newIndex) + end + end + end + local rT = train.RearTrain + if IsValid(rT) then + local rC = rT.SubwayTrain + --if (rT.FrontTrain~=train or not rC.NoFrontEKK) and not train.RearCoupledBogeyDisconnect and conf.EKKType == rC.EKKType then + if train:ElectricConnected(rT,true) then + if rT and (rT.RearTrain == train) then + updateIndexes(rT,checked,1-newIndex) + else + updateIndexes(rT,checked,newIndex) + end + end + end + end + updateIndexes(self,{},0) +end + +function ENT:OnConnectDisconnect() + self:UpdateCoupledTrains() + + --if ((train.FrontTrain == self) or (train.RearTrain == self)) then + self:UpdateIndexes() + --end + + self:UpdateWagonList() + self:ChooseTrainWireLeader() +end + +function ENT:OnCouple(bogey,isfront) + if isfront then + self.FrontCoupledBogey = bogey + else + self.RearCoupledBogey = bogey + end + + local train = bogey:GetNW2Entity("TrainEntity") + if not IsValid(train) then return end + hook.Run("MetrostroiCoupled",self,train) + --print(Format("%s(%05d) coupled with %s(%05d)",self,self:GetWagonNumber(),train,train:GetWagonNumber())) + --Don't update train wires when there's no parent train + + self:OnConnectDisconnect() + if self.OnCoupled then self:OnCoupled() end + + -- Update train wires + --[[ if (isfront and self.FrontCoupledBogeyDisconnect) or (not isfront and self.RearCoupledBogeyDisconnect) then + return + end--]] + --[[GRAVHULL + if GravHull then + if IsValid(ent) and self:GetMoveType() == MOVETYPE_VPHYSICS then + if !GravHull.SHIPS[self] then + self = self.MyShip or (self.Ghost and self.Ghost.MyShip) + end + end + if IsValid(self) then + self:GetOwner():ChatPrint("Removed a local physics system.") + GravHull.UnHull(self) + end + + if !(IsValid(self) and self:GetMoveType() == MOVETYPE_VPHYSICS and !GravHull.HULLS[self]) then return false end + GravHull.RegisterHull(self,-2,100) + GravHull.UpdateHull(self) + end + ]] +end + +function ENT:OnDecouple(isfront) + --print(self,"Disconnected from front?:" ,isfront) + if isfront then + self.FrontCoupledBogey = nil + else + self.RearCoupledBogey = nil + end + + self:OnConnectDisconnect() + if self.OnDecoupled then self:OnDecoupled() end + --[[GRAVHULL + if GravHull then + if IsValid(ent) and self:GetMoveType() == MOVETYPE_VPHYSICS then + if !GravHull.SHIPS[self] then + self = self.MyShip or (self.Ghost and self.Ghost.MyShip) + end + end + if IsValid(self) then + self:GetOwner():ChatPrint("Removed a local physics system.") + GravHull.UnHull(self) + end + + if !(IsValid(self) and self:GetMoveType() == MOVETYPE_VPHYSICS and !GravHull.HULLS[self]) then return false end + GravHull.RegisterHull(self,-2,100) + GravHull.UpdateHull(self) + end + ]] +end + +function ENT:OnBogeyDisconnect(bogey,isfront) + if isfront then + self.FrontCoupledBogeyDisconnect = true + else + self.RearCoupledBogeyDisconnect = true + end + + self:OnConnectDisconnect() +end + +function ENT:OnBogeyConnect(bogey,isfront) + --print(self,"Coupled with ",bogey," at ",isfront) + if isfront then + self.FrontCoupledBogeyDisconnect = false + else + self.RearCoupledBogeyDisconnect = false + end + + local train = bogey:GetNW2Entity("TrainEntity") + if not IsValid(train) then return end + --Don't update train wires when there's no parent train + + self:OnConnectDisconnect() +end + +function ENT:UpdateCoupledTrains() + if self.FrontCoupledBogey then + self.FrontTrain = self.FrontCoupledBogey:GetNW2Entity("TrainEntity") + else + self.FrontTrain = nil + end + + if self.RearCoupledBogey then + self.RearTrain = self.RearCoupledBogey:GetNW2Entity("TrainEntity") + else + self.RearTrain = nil + end +end + +-------------------------------------------------------------------------------- +-- Create a bogey for the train +-------------------------------------------------------------------------------- +function ENT:CreateBogey(pos,ang,forward,typ) + -- Create bogey entity + local bogey = ents.Create("gmod_train_bogey") + bogey:SetPos(self:LocalToWorld(pos)) + bogey:SetAngles(self:GetAngles() + ang) + bogey.BogeyType = typ + bogey.NoPhysics = self.NoPhysics + bogey:Spawn() + + -- Assign ownership + if CPPI and IsValid(self:CPPIGetOwner()) then bogey:CPPISetOwner(self:CPPIGetOwner()) end + + -- Some shared general information about the bogey + self.SquealSound = self.SquealSound or math.floor(4*math.random()) + self.SquealSensitivity = self.SquealSensitivity or math.random() + bogey.SquealSensitivity = self.SquealSensitivity + bogey:SetNW2Int("SquealSound",self.SquealSound) + bogey:SetNW2Bool("IsForwardBogey", forward) + bogey:SetNW2Entity("TrainEntity", self) + bogey.SpawnPos = pos + bogey.SpawnAng = ang + local index=1 + for i,v in ipairs(self.JointPositions) do + if v>pos.x then index=i+1 else break end + end + table.insert(self.JointPositions,index,pos.x+53.6) + table.insert(self.JointPositions,index+1,pos.x-53.6) + -- Constraint bogey to the train + if self.NoPhysics then + bogey:SetParent(self) + else + constraint.Axis(bogey,self,0,0, + Vector(0,0,0),Vector(0,0,0), + 0,0,0,1,Vector(0,0,1),false) + if forward and IsValid(self.FrontCouple) then + constraint.NoCollide(bogey,self.FrontCouple,0,0) + elseif not forward and IsValid(self.RearCouple) then + constraint.NoCollide(bogeyself.RearCouple,0,0) + end + end + + -- Add to cleanup list + table.insert(self.TrainEntities,bogey) + return bogey +end +function ENT:AddLightSensor(pos,ang,model) + local sensor = ents.Create("gmod_train_autodrive_coil") + if CPPI and IsValid(self:CPPIGetOwner()) then sensor:CPPISetOwner(self:CPPIGetOwner()) end + sensor:SetPos(self:LocalToWorld(pos)) + sensor:SetAngles(self:LocalToWorldAngles(ang)) + sensor:SetParent(self) + sensor.Model = model or "models/props_c17/display_cooler01a.mdl" + sensor.IsSensor = true + sensor.Train = self + sensor:Spawn() + return sensor +end +function ENT:AddAutodriveCoil(bogey,right) + -- Create bogey entity + local coil = right and bogey.CoilR or not right and bogey.CoilL + if not IsValid(coil) then + coil = ents.Create("gmod_train_autodrive_coil") + coil:Spawn() + if right then + bogey.CoilR = coil + else + bogey.CoilL = coil + end + -- Assign ownership + if CPPI and IsValid(self:CPPIGetOwner()) then coil:CPPISetOwner(self:CPPIGetOwner()) end + end + if right then + coil:SetPos(bogey:LocalToWorld(Vector(-54,70,-30))) + else + coil:SetPos(bogey:LocalToWorld(Vector(-54,-70,-30))) + end + coil:SetAngles(bogey:GetAngles()) + + coil:SetParent(bogey) + + return coil +end +-------------------------------------------------------------------------------- +-- Create a couple for the train +-------------------------------------------------------------------------------- +function ENT:CreateCouple(pos,ang,forward,typ) + -- Create bogey entity + local coupler = ents.Create("gmod_train_couple") + coupler:SetPos(self:LocalToWorld(pos)) + coupler:SetAngles(self:GetAngles() + ang) + coupler.CoupleType = typ + coupler:Spawn() + + -- Assign ownership + if CPPI and IsValid(self:CPPIGetOwner()) then coupler:CPPISetOwner(self:CPPIGetOwner()) end + + -- Some shared general information about the bogey + coupler:SetNW2Bool("IsForwardCoupler", forward) + coupler:SetNW2Entity("TrainEntity", self) + coupler.SpawnPos = pos + coupler.SpawnAng = ang + local index=1 + local x = self:WorldToLocal(coupler:LocalToWorld(coupler.CouplingPointOffset)).x + for i,v in ipairs(self.JointPositions) do + if v>pos.x then index=i+1 else break end + end + table.insert(self.JointPositions,index,x) + -- Constraint bogey to the train + if self.NoPhysics then + bogey:SetParent(coupler) + else + constraint.AdvBallsocket( + self, + coupler, + 0, --bone + 0, --bone + pos, + Vector(0,0,0), + 1, --forcelimit + 1, --torquelimit + -2, --xmin + -2, --ymin + -15, --zmin + 2, --xmax + 2, --ymax + 15, --zmax + 0.1, --xfric + 0.1, --yfric + 1, --zfric + 0, --rotonly + 1 --nocollide + ) + + if forward and IsValid(self.FrontBogey) then + constraint.NoCollide(self.FrontBogey,coupler,0,0) + elseif not forward and IsValid(self.RearBogey) then + constraint.NoCollide(self.RearBogey,coupler,0,0) + end + --[[ + constraint.Axis(coupler,self,0,0, + Vector(0,0,0),Vector(0,0,0), + 0,0,0,1,Vector(0,0,1),false)]] + end + + -- Add to cleanup list + table.insert(self.TrainEntities,coupler) + return coupler +end + + +-------------------------------------------------------------------------------- +-- Create an entity for the seat +-------------------------------------------------------------------------------- +function ENT:CreateSeatEntity(seat_info) + -- Create seat entity + local seat = ents.Create("prop_vehicle_prisoner_pod") + seat:SetModel(seat_info.model or "models/nova/jeep_seat.mdl") --jalopy + seat:SetPos(self:LocalToWorld(seat_info.offset)) + seat:SetAngles(self:GetAngles()+Angle(0,-90,0)+seat_info.angle) + seat:SetKeyValue("limitview",0) + seat:Spawn() + seat:GetPhysicsObject():SetMass(10) + seat:SetCollisionGroup(COLLISION_GROUP_WORLD) + self:DrawShadow(false) + + --Assign ownership + if CPPI and IsValid(self:CPPIGetOwner()) then seat:CPPISetOwner(self:CPPIGetOwner()) end + + -- Hide the entity visually + if seat_info.type == "passenger" then + seat:SetColor(Color(0,0,0,0)) + seat:SetRenderMode(RENDERMODE_TRANSALPHA) + end + + -- Set some shared information about the seat + self:SetNW2Entity("seat_"..seat_info.type,seat) + seat:SetNW2String("SeatType", seat_info.type) + seat:SetNW2Entity("TrainEntity", self) + seat_info.entity = seat + + -- Constrain seat to this object + -- constraint.NoCollide(self,seat,0,0) + seat:SetParent(self) + + -- Add to cleanup list + table.insert(self.TrainEntities,seat) + return seat +end + + +-------------------------------------------------------------------------------- +-- Create a seat position +-------------------------------------------------------------------------------- +function ENT:CreateSeat(type,offset,angle,model) + -- Add a new seat + local seat_info = { + type = type, + offset = offset, + model = model, + angle = angle or Angle(0,0,0), + } + table.insert(self.Seats,seat_info) + + -- If needed, create an entity for this seat + if (type == "driver") or (type == "instructor") or (type == "passenger") then + return self:CreateSeatEntity(seat_info) + end +end + +-- Returns if KV/reverser wrench is present in cabin +function ENT:IsWrenchPresent() + if self.DriversWrenchPresent then return true end + if self.DriversWrenchMissing then return false end + for k,v in pairs(self.Seats) do + if IsValid(v.entity) and v.entity.GetPassenger and + ((v.type == "driver") or (v.type == "instructor")) then + local player = v.entity:GetPassenger(0) + if player and player:IsValid() then return true end + end + end + return false +end + +function ENT:GetDriver() + if IsValid(self.DriverSeat) then + local ply = self.DriverSeat:GetPassenger(0) + if IsValid(ply) then return ply end + end +end + +hook.Remove("SetupPlayerVisibility","PVSDormantFix",function(ply) + for _,ent in pairs(ents.FindByClass("env_*")) do + if ent.DormantFix then + ent:SetPreventTransmit(ply,not ply:TestPVS(ent)) + end + end +end) + +-------------------------------------------------------------------------------- +-- Turn light on or off +-------------------------------------------------------------------------------- +function ENT:SetLightPower(index,power,brightness) + local lightData = self.Lights[index] + self.GlowingLights = self.GlowingLights or {} + self.LightBrightness = self.LightBrightness or {} + brightness = brightness or 1 + + -- Check if light already glowing + if (power and (self.GlowingLights[index])) and + (brightness == self.LightBrightness[index]) then return end + + -- If light already glowing and only brightness changed + if (power and (self.GlowingLights[index])) and + (brightness ~= self.LightBrightness[index]) then + local light = self.GlowingLights[index] + if (lightData[1] == "glow") or (lightData[1] == "light") then + local brightness = brightness * (lightData.brightness or 0.5) + light:SetKeyValue("rendercolor", + Format("%i %i %i", + lightData[4].r*brightness, + lightData[4].g*brightness, + lightData[4].b*brightness + ) + ) + end + if (lightData[1] == "headlight") then + -- Set Brightness + local brightness = brightness * (lightData.brightness or 1.25) + light:SetKeyValue("lightcolor", + Format("%i %i %i 255", + lightData[4].r*brightness, + lightData[4].g*brightness, + lightData[4].b*brightness + ) + ) + end + if (lightData[1] == "dynamiclight") then + --light:SetKeyValue("brightness", brightness * (lightData.brightness or 2)) + light:SetKeyValue("_light", + Format("%i %i %i", + lightData[4].r*brightness, + lightData[4].g*brightness, + lightData[4].b*brightness + ) + ) + end + self.LightBrightness[index] = brightness + return + end + + -- Turn off light + SafeRemoveEntity(self.GlowingLights[index]) + self.GlowingLights[index] = nil + self.LightBrightness[index] = brightness + + -- Create light + if (lightData[1] == "headlight") and (power) then + local light = ents.Create("env_projectedtexture") + light.DormantFix = true + light:SetTransmitWithParent(true) + light:SetParent(self) + light:SetPos(self:LocalToWorld(lightData[2])) + light:SetAngles(self:LocalToWorldAngles(lightData[3])) + + -- Set parameters + light:SetKeyValue("enableshadows", lightData.shadows or 1) + light:SetKeyValue("farz", lightData.farz or 2048) + light:SetKeyValue("nearz", lightData.nearz or 16) + light:SetKeyValue("lightfov", lightData.fov or 120) + + -- Set Brightness + local brightness = brightness * (lightData.brightness or 1.25) + light:SetKeyValue("lightcolor", + Format("%i %i %i 255", + lightData[4].r*brightness, + lightData[4].g*brightness, + lightData[4].b*brightness + ) + ) + + -- Turn light on + light:Spawn() --"effects/flashlight/caustics" + light:Input("SpotlightTexture",nil,nil,lightData.texture or "effects/flashlight001") + self.GlowingLights[index] = light + end + if (lightData[1] == "glow") and (power) then + local light = ents.Create("env_sprite") + light.DormantFix = true + light:SetTransmitWithParent(true) + light:SetParent(self) + light:SetLocalPos(lightData[2]) + light:SetLocalAngles(lightData[3]) + + -- Set parameters + local brightness = brightness * (lightData.brightness or 0.5) + light:SetKeyValue("rendercolor", + Format("%i %i %i", + lightData[4].r*brightness, + lightData[4].g*brightness, + lightData[4].b*brightness + ) + ) + light:SetKeyValue("rendermode", lightData.type or 3) -- 9: WGlow, 3: Glow + light:SetKeyValue("renderfx", 14) + light:SetKeyValue("model", lightData.texture or "sprites/glow1.vmt") +-- light:SetKeyValue("model", "sprites/light_glow02.vmt") +-- light:SetKeyValue("model", "sprites/yellowflare.vmt") + light:SetKeyValue("scale", lightData.scale or 1.0) + light:SetKeyValue("spawnflags", 1) + + -- Turn light on + light:Spawn() + self.GlowingLights[index] = light + end + if (lightData[1] == "light") and (power) then + local light = ents.Create("env_sprite") + light.DormantFix = true + light:SetTransmitWithParent(true) + light:SetParent(self) + light:SetLocalPos(lightData[2]) + light:SetLocalAngles(lightData[3]) + + -- Set parameters + local brightness = brightness * (lightData.brightness or 0.5) + light:SetKeyValue("rendercolor", + Format("%i %i %i", + lightData[4].r*brightness, + lightData[4].g*brightness, + lightData[4].b*brightness + ) + ) + light:SetKeyValue("rendermode", lightData.type or 9) -- 9: WGlow, 3: Glow + light:SetKeyValue("renderfx", 14) +-- light:SetKeyValue("model", "sprites/glow1.vmt") + light:SetKeyValue("model", lightData.texture or "sprites/light_glow02.vmt") +-- light:SetKeyValue("model", "sprites/yellowflare.vmt") + light:SetKeyValue("scale", lightData.scale or 1.0) + --Size of Glow Proxy Geometry + light:SetKeyValue("spawnflags", 1) + + -- Turn light on + light:Spawn() + self.GlowingLights[index] = light + end + if (lightData[1] == "dynamiclight") and (power) then + local light = ents.Create("light_dynamic") + light:SetParent(self) + + -- Set position + light:SetLocalPos(lightData[2]) + light:SetLocalAngles(lightData[3]) + + -- Set parameters + light:SetKeyValue("_light", + Format("%i %i %i", + lightData[4].r*brightness, + lightData[4].g*brightness, + lightData[4].b*brightness + ) + ) + light:SetKeyValue("style", 0) + light:SetKeyValue("distance", lightData.distance or 300) + light:SetKeyValue("brightness", (lightData.brightness or 2)) + + -- Turn light on + light:Spawn() + light:Fire("TurnOn","","0") + self.GlowingLights[index] = light + end +end + + + + +-------------------------------------------------------------------------------- +-- Joystick input +-------------------------------------------------------------------------------- +function ENT:HandleJoystickInput(ply) + for k,v in pairs(jcon.binds) do + if v:GetCategory() == "Metrostroi" then + local jvalue = Metrostroi.GetJoystickInput(ply,k) + if (jvalue != nil) and (self.JoystickBuffer[k] ~= jvalue) then + local inputname = Metrostroi.JoystickSystemMap[k] + self.JoystickBuffer[k] = jvalue + if inputname then + if type(jvalue) == "boolean" then + if jvalue then + jvalue = 1.0 + else + jvalue = 0.0 + end + end + self:TriggerInput(inputname,jvalue) + end + end + end + end +end + + + + +-------------------------------------------------------------------------------- +-- Keyboard input +-------------------------------------------------------------------------------- +function ENT:IsModifier(key) + return type(self.KeyMap[key]) == "table" +end + +function ENT:HasModifier(key) + return self.KeyMods[key] ~= nil +end + +function ENT:GetActiveModifiers(key) + local tbl = {} + local mods = self.KeyMods[key] + for k,v in pairs(mods) do + if self.KeyBuffer[k] ~= nil then + table.insert(tbl,k) + end + end + return tbl +end + +function ENT:OnKeyEvent(key,state,ply,helper) + if state then + self:OnKeyPress(key) + else + self:OnKeyRelease(key) + end + local keyT = self.KeyMap[key] + if self:HasModifier(key) and not helper then + --If we have a modifier + local actmods = self:GetActiveModifiers(key) + if #actmods > 0 then + --Modifier is being preseed + for k,v in pairs(actmods) do + if self.KeyMap[v][key] ~= nil then + self:ButtonEvent(self.KeyMap[v][key],state,ply) + end + end + return + end + end + if self:IsModifier(key) then + if keyT.helper and (helper or keyT[1]) then + self:ButtonEvent(helper and keyT.helper or keyT[1],state,ply) + elseif not helper then + if state and keyT.def and not helper then + self:ButtonEvent(keyT.def,state,ply) + elseif not state then + if keyT.def then + self:ButtonEvent(keyT.def,state,ply) + end + for k,v in pairs(keyT) do + self:ButtonEvent(v,false,ply) + end + end + end + elseif keyT ~= nil and type(keyT) == "string" and not helper then + --If we're a regular binded key + self:ButtonEvent(keyT,state,ply) + end +end +function ENT:OnKeyPress(key) + +end + +function ENT:OnKeyRelease(key) + +end + +function ENT:ProcessKeyMap() + self.KeyMods = {} + + for mod,v in pairs(self.KeyMap) do + if type(v) == "table" then + for k,_ in pairs(v) do + if not self.KeyMods[k] then + self.KeyMods[k]={} + end + self.KeyMods[k][mod]=true + end + end + end +end + + +local function HandleKeyHook(ply,k,state) + local train = ply:GetTrain() + if IsValid(train) then + train.KeyMap[k] = state or nil + end +end + +function ENT:HandleKeyboardInput(ply) + if not self.KeyMods and self.KeyMap then + self:ProcessKeyMap() + end + + -- Check for newly pressed keys + for k,v in pairs(ply.keystate) do + if self.KeyBuffer[k] == nil then + self.KeyBuffer[k] = true + self:OnKeyEvent(k,true,ply) + end + end + + -- Check for newly released keys + for k,v in pairs(self.KeyBuffer) do + if ply.keystate[k] == nil then + self.KeyBuffer[k] = nil + self:OnKeyEvent(k,false,ply) + end + end +end +hook.Add("PlayerButtonUp","metrostroi_button",function(ply, button) + local train,seat = ply:GetTrain() + if IsValid(train) and train.KeyBuffer then + if train.KeyBuffer[button] then + train.KeyBuffer[button] = nil + train:OnKeyEvent(button,false,ply,train.DriverSeat ~= seat) + end + end +end) +hook.Add("PlayerButtonDown","metrostroi_button",function(ply, button) + local train,seat = ply:GetTrain() + if IsValid(train) and train.KeyBuffer then + if train.KeyBuffer[button] == nil then + train.KeyBuffer[button] = true + train:OnKeyEvent(button,true,ply,train.DriverSeat ~= seat) + end + end +end) +function ENT:CreateJointSound(sndnum) + local jID = self.SpeedSign>0 and 1 or #self.JointPositions + table.insert(self.Joints, + { + type = sndnum, + state = jID, + dist = self.JointPositions[jID] + } + ) +end + +-------------------------------------------------------------------------------- +-- Process train logic +-------------------------------------------------------------------------------- +-- Think and execute systems stuff +local joints = { + {2,12.5}, + {3,25}, + {3,50}, + {2,75}, +} +function ENT:Think() + if self.FrontBogey then + if self.SpeedSign and self.WagonList[1] == self and (not self.FrontTrain and self.Speed * self.SpeedSign > 0.25 or not self.RearTrain and self.Speed * self.SpeedSign < -0.25) then + --print(self.FrontBogey.Wheels,self.RearBogey) + --self.TargetDist + --self.rep = 0 + --self.rep = nil + if not self.JointRepeats or self.JointRepeats <= 0 then + local ch + repeat + ch = math.ceil(math.random()*#joints) + until ch~=self.LastJoint + self.LastJoint = ch + self.JointDist = joints[ch][2] + self.JointRepeats = math.floor(math.random(1, joints[ch][1])) + end + if not self.CurrentJointDist then self.CurrentJointDist = 0 end + + + if self.JointDist then + self.CurrentJointDist = self.CurrentJointDist + self.DeltaTime * self.Speed * self.SpeedSign / 3.6 + + if self.JointRepeats > 0 and (self.CurrentJointDist > self.JointDist or self.CurrentJointDist < -self.JointDist) then + self.JointRepeats = self.JointRepeats - 1 + local snd = math.ceil(math.random()*32) + self:CreateJointSound(snd) + self.CurrentJointDist = 0 + end + end + end + + --DISTANCES + --0.774 + --WHEELS:81 2.05 --2.66 + --TRAIN:755 19.17 24.79 + --89 2.26 2.92 + --171 4.34 5.61 + --584 14.83 19.17 + --666 16.91 21.84 + if #self.Joints > 0 then + local first,last = self.JointPositions[1],self.JointPositions[#self.JointPositions] + --self.Joints = {} + for i, j in ipairs(self.Joints) do + j.dist = j.dist + self.DeltaTime * (-self:GetVelocity():Dot(self:GetAngles():Forward())) + local dist = j.dist + local ch = false + for iD,jD in ipairs(self.JointPositions) do + if distjD and j.state>iD then + --RunConsoleCommand("say",Format("[%d] dist(%.1f)%sjD(%.1f) %d%+d",i,dist,dist>jD and ">" or "<",jD,j.state,j.state>iD and j.state-1 or j.state+1)) + j.state = iD--j.state>iD and j.state-1 or j.state+1 + if 1first) and IsValid(self.FrontTrain) then + self.FrontTrain:CreateJointSound(j.type) + elseif (iD~=1 and dist0 and "a" or "b","styk",j.type,math.floor(j.state/2)) + end + end + end + end + if self.FailSim and self.FailSim.TrainWireFall and self.FailSim.TrainWireFail > 0 then + self.TrainWireOutside[self.FailSim.TrainWireFail] = 1 + if fail then self.FailSim:TriggerInput("ResetTW") end + end + self.PrevTime = self.PrevTime or CurTime() + self.DeltaTime = (CurTime() - self.PrevTime) + self.PrevTime = CurTime() + -- Calculate train acceleration + --[[self.PreviousVelocity = self.PreviousVelocity or self:GetVelocity() + local accelerationVector = 0.01905*(self:GetPhysicsObject():GetVelocity() - self.PreviousVelocity) / self.DeltaTime + accelerationVector:Rotate(self:GetAngles()) + self:SetTrainAcceleration(accelerationVector) + self.PreviousVelocity = self:GetVelocity()]]-- + + -- Get angular velocity + --self:SetTrainAngularVelocity(math.pi*self:GetPhysicsObject():GetAngleVelocity()/180) + -- Apply mass of passengers + if self.NormalMass then self:GetPhysicsObject():SetMass(self.NormalMass + 60*self:GetNW2Float("PassengerCount")) end + if self.AnnouncementToLeaveWagon and self:GetNW2Float("PassengerCount") == 0 then self.AnnouncementToLeaveWagon = false end + + -- Hack for VAH switch on non-supported maps so you don't have to hold space all the time + if not self.NonSupportedChecked then + self.NonSupportedChecked = true + if not Metrostroi.MapHasFullSupport("ars") and self.NonSupportTrigger then self:NonSupportTrigger() end + end + + -- Calculate turn information, unused right now + --[[if self.FrontBogey and self.RearBogey then + self.BogeyDistance = self.BogeyDistance or self.FrontBogey:GetPos():Distance(self.RearBogey:GetPos()) + local a = math.AngleDifference(self.FrontBogey:GetAngles().y,self.RearBogey:GetAngles().y+180) + self.TurnRadius = (self.BogeyDistance/2)/math.sin(math.rad(a/2)) + + -- If we're pretty much going straight, correct massive values + if math.abs(self.TurnRadius) > 1e4 then + self.TurnRadius = 0 + end + end]]-- + + -- Process the keymap for modifiers + -- TODO: Need a neat way of calling this once after self.KeyMap is populated + if not self.KeyMods and self.KeyMap then + self:ProcessKeyMap() + end + + -- Keyboard input is done via PlayerButtonDown/Up hooks that call ENT:OnKeyEvent + -- Joystick input + if IsValid(self.DriverSeat) then + local ply = self.DriverSeat:GetPassenger(0) + + if IsValid(ply) then + --if self.KeyMap then self:HandleKeyboardInput(ply) end + if joystick then self:HandleJoystickInput(ply) end + self:SetNW2Bool("GoldenReverser",IsValid(ply) and IsValid(ply:GetWeapon("train_kv_wrench_gold"))) + end + + end + + if Turbostroi and not self.DontAccelerateSimulation then + -- Run iterations on systems simulation + local iterationsCount = 1 + if (not self.Schedule) or (iterationsCount ~= self.Schedule.IterationsCount) then + self.Schedule = { IterationsCount = iterationsCount } + local SystemIterations = {} + + -- Find max number of iterations + local maxIterations = 0 + for k,v in pairs(self.Systems) do + if v.DontAccelerateSimulation then + SystemIterations[k] = (v.SubIterations or 1) + maxIterations = math.max(maxIterations,(v.SubIterations or 1)) + end + end + for iteration=1,maxIterations do + self.Schedule[iteration] = {} + -- Populate schedule + for k,v in pairs(self.Systems) do + if v.DontAccelerateSimulation and ((iteration)%(maxIterations/(v.SubIterations or 1))) == 0 then + table.insert(self.Schedule[iteration],v) + end + end + end + end + -- Simulate according to schedule + for i,s in ipairs(self.Schedule) do + for k,v in ipairs(s) do + --v:Think(self.DeltaTime / (v.SubIterations or 1)/2,i) + v:Think(self.DeltaTime / (v.SubIterations or 1),i) + end + end + else + -- Output all variable values + for sys_name,system in pairs(self.Systems) do + if system.OutputsList and (not system.DontAccelerateSimulation) then + for _,name in pairs(system.OutputsList) do + local value = (system[name] or 0) + --if type(value) == "boolean" then value = value and 1 or 0 end + if not self.DataCache[sys_name] then self.DataCache[sys_name] = {} end + if self.DataCache[sys_name][name] ~= value then + self:TriggerTurbostroiInput(sys_name,name,value) + self.DataCache[sys_name][name] = value + end + end + end + end + -- Run iterations on systems simulation + local iterationsCount = 1 + if (not self.Schedule) or (iterationsCount ~= self.Schedule.IterationsCount) then + self.Schedule = { IterationsCount = iterationsCount } + local SystemIterations = {} + + -- Find max number of iterations + local maxIterations = 0 + for k,v in pairs(self.Systems) do + SystemIterations[k] = (v.SubIterations or 1) + maxIterations = math.max(maxIterations,SystemIterations[k]) + end + for iteration=1,maxIterations do + self.Schedule[iteration] = {} + -- Populate schedule + for k,v in pairs(self.Systems) do + if ((iteration)%(maxIterations/SystemIterations[k])) == 0 then + table.insert(self.Schedule[iteration],v) + end + end + end + end + + -- Simulate according to schedule + for i,s in ipairs(self.Schedule) do + for k,v in ipairs(s) do + local el = v.FileName:find("electric") + if el then + --time = SysTime() + end + --if v.DontAccelerateSimulation then + v:Think(self.DeltaTime / (v.SubIterations or 1),i) + --[[ else + v:Think(self.DeltaTime / (v.SubIterations or 1)/2,i) + v:Think(self.DeltaTime / (v.SubIterations or 1)/2,i) + end--]] + end + end + --print(1/(SysTime()-time)) + -- Wire outputs + --local triggerOutput = self.TriggerOutput + end + for _,name in pairs(self.WireIOSystems) do + local system = self.Systems[name] + if system and system.OutputsList then + for _,name in pairs(system.OutputsList) do + local varname = (system.Name or "")..name + if type(system[name]) == "boolean" then + self.TriggerOutput(self,varname,system[name] and 1 or 0) + else + self.TriggerOutput(self,varname,tonumber(system[name]) or 0) + end + end + end + end + --[[ for k,v in pairs(self.TrainWireTurbostroi) do + self:WriteTrainWire(k,v) + end + -- Write and read train wires + local readTrainWire = self.ReadTrainWire + local writeTrainWire = self.WriteTrainWire + for k,v in pairs(self.TrainWireOverrides) do + if v > 0 then writeTrainWire(self,k,v,true) end + end + for k,v in pairs(self.TrainWireOutside) do + if v > 0 then writeTrainWire(self,k,v,true) end + end--]] + if self.TrainWireLeader then + if #self.WagonList == 1 then + for twID in pairs(self.TrainWireWritersID) do + self.TrainWires[twID] = self:LeaderReadTrainWire(twID) + end + else + local wires = {} + for i,train in ipairs(self.WagonList) do + local inv = train.TrainCoupledIndex ~= self.TrainCoupledIndex + for twID in pairs(train.TrainWireWritersID) do + local target = twID + if inv then + for a,b in pairs(train.TrainWireCrossConnections) do + if target == a then + target = b + elseif target == b then + target = a + end + end + end + local twVal = train:LeaderReadTrainWire(target) + if train.TrainWireInverts[twID] or wires[twID] == true then + if twVal <= 0 then + wires[twID] = true + elseif not wires[twID] or wires[twID] ~= true then + wires[twID] = (wires[twID] or 0) + twVal + end + else + wires[twID] = (wires[twID] or 0) + twVal + end + end + end + local TrainCount = #self.WagonList + for i,train in ipairs(self.WagonList) do + local inv = train.TrainCoupledIndex ~= self.TrainCoupledIndex + for twID in pairs(wires) do + local target = twID + if inv then + for a,b in pairs(train.TrainWireCrossConnections) do + if target == a then + target = b + elseif target == b then + target = a + end + end + end + if wires[twID] == true then + train.TrainWires[target] = 0 + else + train.TrainWires[target] = wires[twID] + end + end + end + end + end + if Wire_CreateInputs then + local readTrainWire = self.ReadTrainWire + for i=1,32 do + self.TriggerOutput(self,"TrainWire"..i,readTrainWire(self,i)) + end + self.TriggerOutput(self,"TrainWire35",readTrainWire(self,35)) + self.TriggerOutput(self,"TrainWire36",readTrainWire(self,36)) + end + + -- Calculate own speed and acceleration + local speed,acceleration = 0,0 + if IsValid(self.FrontBogey) and IsValid(self.RearBogey) and not self.IgnoreEngine then + self.Speed = (self.FrontBogey.Speed + self.RearBogey.Speed)/2 + self.SpeedSign = self.FrontBogey.SpeedSign or 1 + self.Acceleration = (self.FrontBogey.Acceleration + self.RearBogey.Acceleration)/2 + else + self.Acceleration = 0 + self.Speed = 0 + self.SpeedSign = 0 + end + if self.Plombs and self.Plombs.Init then + for k,v in pairs(self.Plombs) do + if k == "Init" then continue end + if self.Plombs.Init then + --self[k]:TriggerInput("Reset",true) + self[k]:TriggerInput("Block",true) + end + if type(v) == "table" then + self:SetPackedBool(k.."Pl",v[1]) + else + self:SetPackedBool(k.."Pl",v) + end + end + self.Plombs.Init = nil + end + if self.Electric and self.Electric.Overheat1 then + -- Draw overheat of the engines FIXME + local smoke_intensity = + self.Electric.Overheat1*((self.Electric.T1-200)/400) or + self.Electric.Overheat2*((self.Electric.T2-200)/400) or 0 + + -- Generate smoke + self.PrevSmokeTime = self.PrevSmokeTime or CurTime() + if (smoke_intensity > 0.0) and (CurTime() - self.PrevSmokeTime > 0.5+4.0*(1-smoke_intensity)) then + self.PrevSmokeTime = CurTime() + + ParticleEffect("generic_smoke", + self:LocalToWorld(Vector(100*math.random(),40,-80)), + Angle(0,0,0),self) + end + end + + if (not self.SpritesTimer or CurTime()-self.SpritesTimer > 1) and self.GlowingLights then + for _,ply in ipairs(player.GetAll()) do + local inPVS = self:TestPVS(ply) + for _,light in pairs(self.GlowingLights) do + light:SetPreventTransmit(ply,not inPVS) + end + end + self.SpritesTimer = CurTime() + end + --[[ + -- Update speed and acceleration + self.Speed = speed + self.Acceleration = acceleration +]] + --[[ + if(self.DriverSeat and IsValid(self.DriverSeat)) then + if not self.DriverSeatPos then self.DriverSeatPos = self.DriverSeat:GetPos() end + if self:GetDriver() then + self.HeadAcceleration = math.Clamp((self.HeadAcceleration or 0)*0.95 + ((self.OldSpeed or 0) - self.Speed)*1.1, -10, 10) + self.DriverSeat:SetPos(self.DriverSeatPos + Vector(math.Round(self.HeadAcceleration,2),0,0)) + elseif self.DriverSeat:GetPos() ~= self.DriverSeatPos then + self.DriverSeat:SetPos(self.DriverSeatPos) + self.HeadAcceleration = 0 + end + end + self.OldSpeed = self.Speed]] + -- Go to next think + self:SetNW2Float("Accel",math.Round((self.OldSpeed or 0) - (self.Speed or 0)*(self.SpeedSign or 0),2)) + self:SetNW2Float("TrainSpeed",self.Speed) + self.OldSpeed = (self.Speed or 0)*(self.SpeedSign or 0) + + for k,v in pairs(self.CustomThinks) do if k ~= "BaseClass" then v(self) end end + self:NextThink(CurTime()+0.05) + return true +end + +function ENT:TriggerTurbostroiInput(sys,name,val) + if name == "Value" then + -- Autosend values to client + if self.SyncTable and table.HasValue(self.SyncTable,sys) then + self:SetPackedBool(sys,val > 0) + end + end +end + + + +-------------------------------------------------------------------------------- +-- Default spawn function +-------------------------------------------------------------------------------- +function ENT:SpawnFunction(ply, tr,className,rotate,func) + --MaxTrains limit + if self.ClassName ~= "gmod_subway_base" and not self.NoTrain then + local Limit1 = math.min(2,GetConVarNumber("metrostroi_maxwagons"))*GetConVarNumber("metrostroi_maxtrains_onplayer")-1 + local Limit2 = math.max(0,GetConVarNumber("metrostroi_maxwagons")-2)*GetConVarNumber("metrostroi_maxtrains_onplayer")-1 + + if Metrostroi.TrainCount() > GetConVarNumber("metrostroi_maxtrains")*GetConVarNumber("metrostroi_maxwagons")-1 then + ply:LimitHit("train_limit") + --Metrostroi.LimitMessage(ply) + return + end + if Metrostroi.TrainCountOnPlayer(ply) > GetConVarNumber("metrostroi_maxwagons")*GetConVarNumber("metrostroi_maxtrains_onplayer")-1 then + ply:LimitHit("train_limit") + --Metrostroi.LimitMessage(ply) + return + end + if self.SubwayTrain and self.SubwayTrain.WagType == 1 then + if Metrostroi.TrainCountOnPlayer(ply, 1) > Limit1 then + ply:LimitHit("train_limit") + --Metrostroi.LimitMessage(ply) + return + end + elseif self.SubwayTrain and self.SubwayTrain.WagType == 2 then + if Metrostroi.TrainCountOnPlayer(ply, 2) > Limit2 then + ply:LimitHit("train_limit") + --Metrostroi.LimitMessage(ply) + return + end + --elseif self.ClassName:find("tatra") then + end + end + local verticaloffset = 5 -- Offset for the train model + local distancecap = 2000 -- When to ignore hitpos and spawn at set distanace + local pos, ang = nil + local inhibitrerail = false + + if func then + pos,ang = func(ply) + --TODO: Make this work better for raw base ent + elseif tr.Hit and self.NoTrain then + -- Regular spawn + if tr.HitPos:Distance(tr.StartPos) > distancecap then + -- Spawnpos is far away, put it at distancecap instead + pos = tr.StartPos + tr.Normal * distancecap + else + -- Spawn is near + pos = tr.HitPos + tr.HitNormal * verticaloffset + end + ang = Angle(0,tr.Normal:Angle().y,0) + elseif tr.Hit and not self.NoTrain then + -- Setup trace to find out of this is a track + local tracesetup = {} + tracesetup.start=tr.HitPos + tracesetup.endpos=tr.HitPos+tr.HitNormal*80 + tracesetup.filter=ply + + local tracedata = util.TraceLine(tracesetup) + + if tracedata.Hit then + -- Trackspawn + pos = (tr.HitPos + tracedata.HitPos)/2 + Vector(0,0,verticaloffset) + ang = tracedata.HitNormal + ang:Rotate(Angle(0,90,0)) + ang = ang:Angle() + -- Bit ugly because Rotate() messes with the orthogonal vector | Orthogonal? I wrote "origional?!" :V + else + -- Regular spawn + if tr.HitPos:Distance(tr.StartPos) > distancecap then + -- Spawnpos is far away, put it at distancecap instead + pos = tr.StartPos + tr.Normal * distancecap + inhibitrerail = true + else + -- Spawn is near + pos = tr.HitPos + tr.HitNormal * verticaloffset + end + ang = Angle(0,tr.Normal:Angle().y,0) + end + else + -- Trace didn't hit anything, spawn at distancecap + pos = tr.StartPos + tr.Normal * distancecap + ang = Angle(0,tr.Normal:Angle().y,0) + end + local ent = ents.Create(className or self.ClassName) + ent:SetPos(pos) + ent:SetAngles(ang) + if rotate then ent:SetAngles(ent:LocalToWorldAngles(Angle(0,180,0))) end + ent.Owner = ply + ent:Spawn() + ent:Activate() + if not inhibitrerail then inhibitrerail = not Metrostroi.RerailTrain(ent) end + if rotate and inhibitrerail then ent:Remove() return false end + + -- Debug mode + --Metrostroi.DebugTrain(ent,ply) + return ent +end + + + + +-------------------------------------------------------------------------------- +-- Process Cabin button and keyboard input +-------------------------------------------------------------------------------- +function ENT:OnButtonPress(button,ply) +end + +function ENT:OnButtonRelease(button) + +end + +-- Clears the serverside keybuffer and fires events +function ENT:ClearKeyBuffer(helper) + for k,v in pairs(self.KeyBuffer) do + local button = self.KeyMap[k] + if button ~= nil then + if helper then + if type(button) == "table" and button.helper then + self:ButtonEvent(button.helper,false) + end + elseif type(button) == "string" then + self:ButtonEvent(button,false) + else + --Check modifiers as well + for k2,v2 in pairs(button) do + self:ButtonEvent(v2,false) + end + end + end + end + self.KeyBuffer = {} +end + +local function ShouldWriteToBuffer(buffer,state) + if state == nil then return false end + if state == false and buffer == nil then return false end + return true +end + +local function ShouldFireEvents(buffer,state) + if state == nil then return true end + if buffer == nil and state == false then return false end + return (state ~= buffer) +end + +-- Checks a button with the buffer and calls +-- OnButtonPress/Release as well as TriggerInput + +function ENT:ButtonEvent(button,state,ply) + if ShouldFireEvents(self.ButtonBuffer[button],state) then + if state == false and not self:OnButtonRelease(button,ply) then + self:TriggerInput(button,0.0) + elseif state ~= false and not self:OnButtonPress(button,ply) then + self:TriggerInput(button,1.0) + if self.Plombs and button:sub(-2,-1) == "Pl" and self.Plombs[button:sub(1,-3)] then + local plomb = self.Plombs[button:sub(1,-3)] + self:BrokePlomb(button:sub(1,-3),ply) + if type(plomb) == "table" then + for i=2,#plomb do + self:BrokePlomb(plomb[i],ply,i>1) + end + end + self:PlayOnce("plomb","cabin",0.7) + end + end + end + + if ShouldWriteToBuffer(self.ButtonBuffer[button],state) then + self.ButtonBuffer[button]=state + end +end + + + + +-------------------------------------------------------------------------------- +-- Handle cabin buttons +-------------------------------------------------------------------------------- +-- Receiver for CS buttons, Checks if people are the legit driver and calls buttonevent on the train +net.Receive("metrostroi-mouse-move", function(len, ply) + local train = net.ReadEntity() + if not IsValid(train) then return end + if train.CursorMove then + local sys = net.ReadString() + local dX = net.ReadFloat() + local dY = net.ReadFloat() + train:CursorMove(sys,dX,dY) + end +end) + +net.Receive("metrostroi-cabin-button", function(len, ply) + local train = net.ReadEntity() + local button = net.ReadString() + local eventtype = net.ReadBit() + local seat = ply:GetVehicle() + local outside = net.ReadBool() + if outside then + if not IsValid(train) then return end + if outside and (train.CPPICanPickup and not train:CPPICanPickup(ply)) then return end + if not outside and ply != train.DriverSeat.lastDriver then return end + if not outside and train.DriverSeat.lastDriverTime and (CurTime() - train.DriverSeat.lastDriverTime) > 1 then return end + else + if not IsValid(train) then return end + if (seat != train.DriverSeat) and (seat != train.InstructorsSeat) and (train.CPPICanPhysgun and not train:CPPICanPhysgun(ply)) and not button:find("Door") then return end + end + train:ButtonEvent(button,(eventtype > 0),ply) +end) + +-- Receiver for panel touchs, Checks if people are the legit driver and calls buttonevent on the train +net.Receive("metrostroi-panel-touch", function(len, ply) + local panel = net.ReadString() + local x = net.ReadInt(11) + local y = net.ReadInt(11) + local outside = net.ReadBool() + local state = net.ReadBool() + local seat = ply:GetVehicle() + local train + + if seat and IsValid(seat) and not outside then + -- Player currently driving + train = seat:GetNW2Entity("TrainEntity") + if (not train) or (not train:IsValid()) then return end + if (seat != train.DriverSeat) and (seat != train.InstructorsSeat) and (not train.CPPICanPhysgun or not train:CPPICanPhysgun(ply)) then return end + else + -- Player not driving, check recent train + train = IsValid(ply.lastVehicleDriven) and ply.lastVehicleDriven:GetNW2Entity("TrainEntity") or NULL + if outside then + local trace = util.TraceLine({ + start = ply:EyePos(), + endpos = ply:EyePos() + ply:EyeAngles():Forward() * 100, + filter = function( ent ) if ent:GetClass():find("subway") then return true end end + }) + train = trace.Entity + end + if !IsValid(train) then return end + if outside and train.CPPICanPickup and not train:CPPICanPickup(ply) then return end + if not outside and ply != train.DriverSeat.lastDriver then return end + if not outside and train.DriverSeat.lastDriverTime and (CurTime() - train.DriverSeat.lastDriverTime) > 1 then return end + end + if panel == "" and train.PanelTouch then train:PanelTouch(state,x,y) return end + if panel ~= "" and not train[panel] then print("Metrostroi:System not found,"..panel) return end + if panel ~= "" and not train[panel].Touch then print("Metrostroi:Touch function not found in system "..panel) return end + if panel ~= "" then train[panel]:Touch(state,x,y) else train:Touch(state,x,y) end +end) + +-- Denies entry if player recently sat in the same train seat +-- This prevents getting stuck in seats when trying to exit +local function CanPlayerEnter(ply,vec,role) + local train = vec:GetNW2Entity("TrainEntity") + + if IsValid(train) and IsValid(ply.lastVehicleDriven) and ply.lastVehicleDriven.lastDriverTime != nil then + if CurTime() - ply.lastVehicleDriven.lastDriverTime < 1 then return false end + end +end + +-- Exiting player hook, stores some vars and moves player if vehicle was train seat +local function HandleExitingPlayer(ply, vehicle) + vehicle.lastDriver = ply + vehicle.lastDriverTime = CurTime() + ply.lastVehicleDriven = vehicle + + local train = vehicle:GetNW2Entity("TrainEntity") + if IsValid(train) then + ply.lastTrain = train + ply.lastTrainSeat = vehicle + -- Move exiting player + local seattype = vehicle:GetNW2String("SeatType") + local offset + + if (seattype == "driver") then + offset = Vector(0,10,-17) + elseif (seattype == "instructor") then + offset = Vector(5,-10,-17) + elseif (seattype == "passenger") then + offset = Vector(10,0,-17) + end + + offset:Rotate(train:GetAngles()) + ply:SetPos(vehicle:GetPos()+offset) + + ply:SetEyeAngles(vehicle:GetForward():Angle()) + + -- Server + train:ClearKeyBuffer(seattype) + -- Client + net.Start("metrostroi-cabin-reset") + net.WriteEntity(train) + net.Send(ply) + end +end + + +function ENT:UpdateTransmitState() + return TRANSMIT_PVS +end + +-------------------------------------------------------------------------------- +-- Register joystick buttons +-- Won't get called if joystick isn't installed +-- I've put it here for now, trains will likely share these inputs anyway +local function JoystickRegister() + Metrostroi.RegisterJoystickInput("met_controller",true,"Controller",-3,3) + Metrostroi.RegisterJoystickInput("met_reverser",true,"Reverser",-1,1) + Metrostroi.RegisterJoystickInput("met_pneubrake",true,"Pneumatic Brake",1,5) + Metrostroi.RegisterJoystickInput("met_headlight",false,"Headlight Toggle") + +-- Metrostroi.RegisterJoystickInput("met_reverserup",false,"Reverser Up") +-- Metrostroi.RegisterJoystickInput("met_reverserdown",false,"Reverser Down") +-- Will make this somewhat better later +-- Uncommenting these somehow makes the joystick addon crap itself + + Metrostroi.JoystickSystemMap["met_controller"] = "KVControllerSet" + Metrostroi.JoystickSystemMap["met_reverser"] = "KVReverserSet" + Metrostroi.JoystickSystemMap["met_pneubrake"] = "PneumaticBrakeSet" + Metrostroi.JoystickSystemMap["met_headlight"] = "HeadLightsToggle" +-- Metrostroi.JoystickSystemMap["met_reverserup"] = "KVReverserUp" +-- Metrostroi.JoystickSystemMap["met_reverserdown"] = "KVReverserDown" +end + +hook.Add("JoystickInitialize","metroistroi_cabin",JoystickRegister) + +hook.Add("PlayerLeaveVehicle", "gmod_subway_81-717-cabin-exit", HandleExitingPlayer ) +hook.Add("CanPlayerEnterVehicle","gmod_subway_81-717-cabin-entry", CanPlayerEnter ) + +function ENT:BrokePlomb(but,ply,nosnd) + if ply then + local nomsg,noplomb = hook.Run("MetrostroiPlombBroken",self,but,ply) + if noplomb then return end + if not nosnd and not nomsg then RunConsoleCommand("say",ply:GetName().." broke seal on "..but.."!") end + end + self[but]:TriggerInput("Block",false) + self.Plombs[but] = false + self:SetPackedBool(but.."Pl",false) +end + + +-------------------------------------------------------------------------------- +-- Common functions +-------------------------------------------------------------------------------- +local types = {Texture = "train",PassTexture = "pass",CabTexture = "cab"} +function ENT:FindFineSkin() + if not self.SkinsType then return end + + for id,typ in pairs(types) do + local fineSkins = {all={},def={}} + for k,v in pairs(Metrostroi.Skins[typ]) do + if v.textures and v.typ == self.SkinsType then + table.insert(fineSkins.all,k) + if v.def then table.insert(fineSkins.def,k) end + end + end + if #fineSkins.def > 0 then + self:SetNW2String(id,table.Random(fineSkins.def)) + self:UpdateTextures() + elseif #fineSkins.all > 0 then + self:SetNW2String(id,table.Random(fineSkins.all)) + self:UpdateTextures() + end + end +end + +function ENT:UpdateTextures() + local texture = Metrostroi.Skins["train"][self:GetNW2String("Texture")] + local passtexture = Metrostroi.Skins["pass"][self:GetNW2String("PassTexture")] + local cabintexture = Metrostroi.Skins["cab"][self:GetNW2String("CabTexture")] + if texture and texture.func then + self:SetNW2String("Texture",texture.func(self)) + end + if passtexture and passtexture.func then + self:SetNW2String("PassTexture",passtexture.func(self)) + end + if cabintexture and cabintexture.func then + self:SetNW2String("CabTexture",cabintexture.func(self)) + end + + self.Texture = self:GetNW2String("Texture") + self.PassTexture = self:GetNW2String("PassTexture") + self.CabTexture = self:GetNW2String("CabTexture") + local texture = Metrostroi.Skins["train"][self.Texture] + local passtexture = Metrostroi.Skins["pass"][self.PassTexture] + local cabintexture = Metrostroi.Skins["cab"][self.CabTexture] + for k in pairs(self:GetMaterials()) do self:SetSubMaterial(k-1,"") end + for k,v in pairs(self:GetMaterials()) do + local tex = v:gsub("^.+/","") + if self.GetAdditionalTextures then + local tex = self:GetAdditionalTextures(tex) + if tex then + self:SetSubMaterial(k-1,tex) + continue + end + end + if cabintexture and cabintexture.textures and cabintexture.textures[tex] then + self:SetSubMaterial(k-1,cabintexture.textures[tex]) + end + if passtexture and passtexture.textures and passtexture.textures[tex] then + self:SetSubMaterial(k-1,passtexture.textures[tex]) + end + if texture and texture.textures and texture.textures[tex] then + self:SetSubMaterial(k-1,texture.textures[tex]) + end + end + + if texture and texture.postfunc then texture.postfunc(self) end + if passtexture and passtexture.postfunc then passtexture.postfunc(self) end + if cabintexture and cabintexture.postfunc then cabintexture.postfunc(self) end + + local level = math.random() > 0.95 and 0.7 or math.random() > 0.8 and 0.55 or math.random() > 0.35 and 0.25 or 0 + self:SetNW2Vector("DirtLevel",math.Clamp(level+math.random()*0.2-0.1,0,1)) +end +function ENT:GenerateWagonNumber(func) + if self.NumberRanges then + self.WagonNumber,self.WagonNumberConf = Metrostroi.GenerateNumber(self,self.NumberRanges,func) + if self.WagonNumber then + self:SetNW2Int("WagonNumber",self.WagonNumber) + end + self:UpdateWagonNumber() + end +end +function ENT:UpdateWagonNumber() end + +-------------------------------------------------------------------------------- +-- Common functions for RKSU(81-71) trains +-------------------------------------------------------------------------------- +function ENT:GenerateJerks() + if not IsValid(self.FrontBogey) or not IsValid(self.RearBogey) then return end + local jerk = math.abs((self.Acceleration - (self.PrevAcceleration or 0)) / self.DeltaTime) + + local roll = self:GetLocalAngles().roll + --local rjerk = ((roll - (self.PrevRoll or 0)) / self.DeltaTime) + self.PrevAcceleration = self.Acceleration + self.PrevRoll = roll + + if jerk > (2.0 + self.Speed/15.0) then + self.PrevTriggerTime1 = self.PrevTriggerTime1 or CurTime() + self.PrevTriggerTime2 = self.PrevTriggerTime2 or CurTime() + + if ((math.random() > 0.00) or (jerk > 10)) and (CurTime() - self.PrevTriggerTime1 > 0.01) then + self.PrevTriggerTime1 = CurTime() + self.FrontBogey:EmitSound(table.Random(self.SoundNames["junk_small"]), 69, math.random(96,110)) + self.FrontBogey:EmitSound(table.Random(self.SoundNames["junk_medium"]), 72, math.random(96,110)) + self.RearBogey:EmitSound(table.Random(self.SoundNames["junk_small"]), 69, math.random(96,110)) + self.RearBogey:EmitSound(table.Random(self.SoundNames["junk_medium"]), 72, math.random(96,110)) + end + end + + local trigger = (0.25 + math.Clamp((2-self.Speed)/8,0,0.25) + math.max(0,(self.Speed-2)/35.0)) + local rjerkstate = math.Round(roll/trigger) + if self.RollJerk ~= rjerkstate then + self.PrevTriggerTime1 = self.PrevTriggerTime1 or CurTime() + self.RollJerk = rjerkstate + if --[[ math.abs(self.Speed) > 0.5 and --]] (CurTime() - self.PrevTriggerTime1 > 0.01) then + self.PrevTriggerTime1 = CurTime() + self.FrontBogey:EmitSound(table.Random(self.SoundNames["junk_small"]), 69, math.random(96,110)) + self.FrontBogey:EmitSound(table.Random(self.SoundNames["junk_medium"]), 72, math.random(96,110)) + self.RearBogey:EmitSound(table.Random(self.SoundNames["junk_small"]), 69, math.random(96,110)) + self.RearBogey:EmitSound(table.Random(self.SoundNames["junk_medium"]), 72, math.random(96,110)) + end + end--]] + local accel = self.Acceleration--*self.SpeedSign + if self.Speed < 0.1 and accel < 0.1 then + self.PrepareStart = true + elseif self.Speed > 2 then + self.PrepareStart = false + elseif self.Speed >= 0.5-math.max(0.25,(1.5-accel)*0.25) and accel > 0.5 and self.PrepareStart then + if IsValid(self.FrontBogey) then self.FrontBogey:EmitSound(table.Random(self.SoundNames["junk_enginestart_speed"]), 68, 1.2*math.random(96,110)) end + if IsValid(self.RearBogey) then self.RearBogey:EmitSound(table.Random(self.SoundNames["junk_enginestart_speed"]), 68, 1.2*math.random(96,110)) end + self.PrepareStart = false + end +end + + + +if game.SinglePlayer() then + util.AddNetworkString("PlayerButtonDown_metrostroi") + util.AddNetworkString("PlayerButtonUp_metrostroi") + hook.Add("PlayerButtonDown","metrostori_button",function(ply,button) + if not IsFirstTimePredicted() then return end + net.Start("PlayerButtonDown_metrostroi") + net.WriteUInt(button,16) + net.Send(ply) + end) + hook.Add("PlayerButtonUp","metrostori_button",function(ply,button) + if not IsFirstTimePredicted() then return end + net.Start("PlayerButtonUp_metrostroi") + net.WriteUInt(button,16) + net.Send(ply) + end) +end + + + --[[ + if self:GetWagonNumber() == 0000 or self:EntIndex()==1531 then --DEBUG + local accel = 0 + for i=1,#self.WagonList do + accel=accel+self.WagonList[i].Acceleration + end + local drivers = {self.DriverSeat,self.InstructorsSeat,self.ExtraSeat1,self.ExtraSeat2} + if math.abs(accel) > 0.1 then + for k,v in pairs(drivers) do + if IsValid(v) and IsValid(v:GetDriver()) then + v:GetDriver():ChatPrint(Format("v=%.2f I=%.2f RK=%02d a=%.2f",self.Speed,(self.Electric.I13+self.Electric.I24)/2,self.RheostatController.SelectedPosition or 0,accel/#self.WagonList))--(accel/#self.WagonList))) + end + end + end + end + self.TestA = self.TestA or nil + self.TestV = self.TestV or nil + local accel = self.Acceleration + if (self.Speed > 75 or self.Speed > 20 and self.Speed < 60) and accel < -0.5 and not self.TestA then + self.TestA = CurTime() + self.TestV = self.Speed/3600*1000 + self.TestTyp = self.Speed > 55 and 2 or 1 + self.TestS = 0 + end + if accel > -0.5 and self.TestA then + self.TestA = nil + self.TestV = nil + self.TestS = nil + end + + if self:GetWagonNumber() == 0000 or self:EntIndex()==0065 then --DEBUG + local accel = 0 + for i=1,#self.WagonList do + accel=accel+self.WagonList[i].Acceleration + end + local drivers = {self.DriverSeat,self.InstructorsSeat,self.ExtraSeat1,self.ExtraSeat2} + if math.abs(accel) > 0.1 then + for k,v in pairs(drivers) do + if IsValid(v) and IsValid(v:GetDriver()) then + v:GetDriver():ChatPrint(Format("v=%.2f I=%.2f RK=%02d a=%.2f",self.Speed,(self.Electric.I13+self.Electric.I24)/2,self.RheostatController.SelectedPosition or 0,accel/#self.WagonList))--(accel/#self.WagonList))) + end + end + end + end + if self.TestS then self.TestS=self.TestS+self.Speed*self.SpeedSign/3600*1000*self.DeltaTime end + if (self.Speed<2 and self.TestTyp ==2 or self.Speed<2 and self.TestTyp ==1) and self.TestA then + local curSpeed = self.Speed/3600*1000 + local a = (curSpeed-self.TestV)/(CurTime()-self.TestA) + RunConsoleCommand("say",Format("[%05d]V0= %.1f V1=%.1f t=%.2f a=%.2f s=%.1f",self:GetWagonNumber(),self.TestV*3600/1000,curSpeed*3600/1000,CurTime()-self.TestA,a,self.TestS)) + + + self.TestA = nil + self.TestV = nil + self.TestS = nil + end--]] + --[[ + if (self.Speed < 20 or self.Speed < 70) and accel > 0.1 and not self.TestA then + self.TestA = CurTime() + self.TestV = self.Speed/3600*1000 + self.TestTyp = self.Speed > 60 and 2 or self.Speed > 30 and 1 or 0 + print("!!!",self.TestTyp) + self.TestS = 0 + end + if self.TestA and self.KV.ControllerPosition<=0 and (self.Speed<0.1 or self.Speed<1 and self.TestA>0) then + self.TestA = nil + self.TestV = nil + self.TestS = nil + end + if self.TestS then self.TestS=self.TestS+self.Speed*self.SpeedSign/3600*1000*dT end + if (self.Speed>=30 and self.TestTyp ==0 or self.Speed>=60 and self.TestTyp ==1 or self.Speed>=80 and self.TestTyp ==2) and self.TestA then + local curSpeed = self.Speed/3600*1000 + local a = (curSpeed-self.TestV)/(CurTime()-self.TestA) + RunConsoleCommand("say",Format("[%05d]V0= %.1f V1=%.1f t=%.2f a=%.2f",self:GetWagonNumber(),self.TestV*3600/1000,curSpeed*3600/1000,CurTime()-self.TestA,a)) + + + self.TestA = nil + self.TestV = nil + self.TestS = nil + end + if self:GetWagonNumber() == 0000 then --DEBUG + local accel = 0 + for i=1,#self.WagonList do + accel=accel+self.WagonList[i].Acceleration + end + + if math.abs(accel) > 0.1 then + Player(6):ChatPrint(Format("v=%.2f I=%.2f",self.Speed,(accel/#self.WagonList))) + Player(7):ChatPrint(Format("v=%.2f I=%.2f",self.Speed,(accel/#self.WagonList))) + Player(9):ChatPrint(Format("v=%.2f I=%.2f",self.Speed,(accel/#self.WagonList))) + end + end--]] + + +Metrostroi.OptimisationPatch() \ No newline at end of file diff --git a/lua/entities/gmod_subway_base/shared.lua b/lua/entities/gmod_subway_base/shared.lua new file mode 100644 index 0000000..b5c31b2 --- /dev/null +++ b/lua/entities/gmod_subway_base/shared.lua @@ -0,0 +1,624 @@ +ENT.Type = "anim" + +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (utility)" + +ENT.Spawnable = true +ENT.AdminSpawnable = false + + +ENT.CustomThinks = ENT.CustomThinks or {} +ENT.CustomSpawnerUpdates = ENT.CustomSpawnerUpdates or {} + +local function destroySound(snd,nogc) + if IsValid(snd) then snd:Stop() end + if not nogc and snd and snd.__gc then snd:__gc() end +end +function ENT:DestroySound(snd,nogc) + destroySound(snd,nogc) +end +-------------------------------------------------------------------------------- +-- Default initializer only loads up DURA +-------------------------------------------------------------------------------- +function ENT:InitializeSystems() + --self:LoadSystem("DURA") + self:LoadSystem("ALSCoil") + self.ALSCoil:TriggerInput("Enabled",1) +end + +function ENT:PostInitializeSystems() end + +function ENT:PassengerCapacity() + return 0 +end + +function ENT:GetStandingArea() + return Vector(-64,-64,0),Vector(64,64,0) +end + +function ENT:BoardPassengers(delta) + self:SetNW2Float("PassengerCount", math.max(0,math.min(self:PassengerCapacity(),self:GetNW2Float("PassengerCount") + delta))) +end + +ENT.LeftDoorPositions = { Vector(0,0,0) } +ENT.RightDoorPositions = { Vector(0,0,0) } +ENT.MirrorCams = { + Vector(450,71,24),Angle(1,180,0),15, + Vector(450,-71,24),Angle(1,180,0),15, +} +-------------------------------------------------------------------------------- +-- Load/define basic sounds +-------------------------------------------------------------------------------- +function ENT:InitializeSounds() + self.SoundPositions = {} -- Positions (used clientside) + self.SoundNames = {} + + self.SoundNames["uava_on"] = { + "subway_trains/common/uava/uava_on1.mp3", + "subway_trains/common/uava/uava_on2.mp3", + "subway_trains/common/uava/uava_on3.mp3", + } + self.SoundNames["uava_off"] = { + "subway_trains/common/uava/uava_off1.mp3", + "subway_trains/common/uava/uava_off2.mp3", + "subway_trains/common/uava/uava_off3.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.SoundNames["junk_small"] = { + "subway_trains/common/junk/junk_small1.mp3", + "subway_trains/common/junk/junk_small2.mp3", + "subway_trains/common/junk/junk_small3.mp3", + "subway_trains/common/junk/junk_small4.mp3", + "subway_trains/common/junk/junk_small5.mp3", + "subway_trains/common/junk/junk_small6.mp3", + } + self.SoundNames["junk_medium"] = { + "subway_trains/common/junk/junk_medium1.mp3", + "subway_trains/common/junk/junk_medium2.mp3", + "subway_trains/common/junk/junk_medium3.mp3", + "subway_trains/common/junk/junk_medium4.mp3", + "subway_trains/common/junk/junk_medium5.mp3", + "subway_trains/common/junk/junk_medium6.mp3", + } + self.SoundNames["junk_enginestart_speed"] = { + "subway_trains/common/junk/junk_enginestart_speed1.mp3", + "subway_trains/common/junk/junk_enginestart_speed2.mp3", + "subway_trains/common/junk/junk_enginestart_speed3.mp3", + "subway_trains/common/junk/junk_enginestart_speed4.mp3", + "subway_trains/common/junk/junk_enginestart_speed5.mp3", + } + + self.SoundNames["pb_on"] = "subway_trains/common/switches/pb_on.mp3" + self.SoundNames["pb_off"] = "subway_trains/common/switches/pb_off.mp3" + + self.SoundNames["vu224_on"] = { + "subway_trains/common/switches/vu224/vu224_on1.mp3", + "subway_trains/common/switches/vu224/vu224_on2.mp3", + "subway_trains/common/switches/vu224/vu224_on3.mp3", + } + self.SoundNames["vu224_off"] = { + "subway_trains/common/switches/vu224/vu224_off1.mp3", + "subway_trains/common/switches/vu224/vu224_off2.mp3", + "subway_trains/common/switches/vu224/vu224_off3.mp3", + } + + self.SoundNames["av_on"] = { + "subway_trains/common/switches/va21/va21_on1.mp3", + "subway_trains/common/switches/va21/va21_on2.mp3", + "subway_trains/common/switches/va21/va21_on3.mp3", + "subway_trains/common/switches/va21/va21_on4.mp3", + "subway_trains/common/switches/va21/va21_on5.mp3", + "subway_trains/common/switches/va21/va21_on6.mp3", + } + self.SoundNames["av_off"] = { + "subway_trains/common/switches/va21/va21_off1.mp3", + "subway_trains/common/switches/va21/va21_off2.mp3", + "subway_trains/common/switches/va21/va21_off3.mp3", + "subway_trains/common/switches/va21/va21_off4.mp3", + "subway_trains/common/switches/va21/va21_off5.mp3", + "subway_trains/common/switches/va21/va21_off6.mp3", + } + self.SoundNames["av_knock"] = { + "subway_trains/common/switches/va21/va21_knock1.mp3", + "subway_trains/common/switches/va21/va21_knock2.mp3", + "subway_trains/common/switches/va21/va21_knock3.mp3", + } + self.SoundNames["br_334_1-2"] = "subway_trains/common/334/334_02.mp3" + self.SoundNames["br_334_2-1"] = "subway_trains/common/334/334_01.mp3" + self.SoundNames["br_334_2-3"] = "subway_trains/common/334/334_02.mp3" + self.SoundNames["br_334_3-2"] = "subway_trains/common/334/334_03.mp3" + self.SoundNames["br_334_4-3"] = "subway_trains/common/334/334_03.mp3" + self.SoundNames["br_334_4-5"] = "subway_trains/common/334/334_05.mp3" + + self.SoundNames["br_013"] = { + "subway_trains/common/switches/013_1.mp3", + "subway_trains/common/switches/013_2.mp3", + "subway_trains/common/switches/013_3.mp3", + "subway_trains/common/switches/013_4.mp3", + } + for i = 1,10 do + local id1 = Format("b1tunnel_%d",i) + local id2 = Format("b2tunnel_%d",i) + self.SoundNames[id1.."a"] = "subway_trains/bogey/st"..i.."a.wav" + self.SoundNames[id1.."b"] = "subway_trains/bogey/st"..i.."b.wav" + self.SoundPositions[id1.."a"] = {700,1e9,Vector( 317-5,0,-84),1} + self.SoundPositions[id1.."b"] = self.SoundPositions[id1.."a"] + self.SoundNames[id2.."a"] = "subway_trains/bogey/st"..i.."a.wav" + self.SoundNames[id2.."b"] = "subway_trains/bogey/st"..i.."b.wav" + self.SoundPositions[id2.."a"] = {700,1e9,Vector(-317+0,0,-84),1} + self.SoundPositions[id2.."b"] = self.SoundPositions[id2.."a"] + end + for i = 1,14 do + local id1 = Format("b1street_%d",i) + local id2 = Format("b2street_%d",i) + self.SoundNames[id1.."a"] = "subway_trains/bogey/wheels/street_"..i.."a.mp3" + self.SoundNames[id1.."b"] = "subway_trains/bogey/wheels/street_"..i.."b.mp3" + self.SoundPositions[id1.."a"] = {700,1e9,Vector( 317-5,0,-84),1.5} + self.SoundPositions[id1.."b"] = self.SoundPositions[id1.."a"] + self.SoundNames[id2.."a"] = "subway_trains/bogey/wheels/street_"..i.."a.mp3" + self.SoundNames[id2.."b"] = "subway_trains/bogey/wheels/street_"..i.."b.mp3" + self.SoundPositions[id2.."a"] = {700,1e9,Vector(-317+0,0,-84),1.5} + self.SoundPositions[id2.."b"] = self.SoundPositions[id2.."a"] + end +end + +-------------------------------------------------------------------------------- +-- Sound functions +-------------------------------------------------------------------------------- +--[[ +function ENT:SetSoundState(sound,volume,pitch,timeout,range) + --if not self.Sounds[sound] then return end + --if sound == "ring" then sound = "zombie_loop" end + if not self.Sounds[sound] then + if self.SoundNames and self.SoundNames[sound] then + local name = self.SoundNames[sound] + if self.SoundPositions[sound] then + local ent_nwID + if self.SoundPositions[sound] == "cabin" then ent_nwID = "seat_driver" end + + local ent = self:GetNW2Entity(ent_nwID) + if IsValid(ent) then + self.Sounds[sound] = CreateSound(ent, Sound(name)) + else + return + end + else + self.Sounds[sound] = CreateSound(self, Sound(name)) + end + else + return + end + end + local default_range = 0.80 + if (volume <= 0) or (pitch <= 0) then + self.Sounds[sound]:SetSoundLevel(100*(range or default_range)) + self.Sounds[sound]:Stop() + return + end + + if soundid == "switch" then default_range = 0.50 end + local pch = math.floor(math.max(0,math.min(255,100*pitch)) + math.random()) + self.Sounds[sound]:SetSoundLevel(100*(range or default_range)) + local vol = math.max(0,math.min(255,2.55*volume)) + (0.001/2.55) + (0.001/2.55)*math.random() + self.Sounds[sound]:PlayEx(vol,pch+1) + self.Sounds[sound]:ChangeVolume(vol,timeout or 0) + self.Sounds[sound]:ChangePitch(pch+1,timeout or 0) + self.Sounds[sound]:SetSoundLevel(100*(range or default_range)) +end +]] +local function PauseBASS(snd) + snd:Pause() + snd:SetTime(0) +end +function ENT:CreateBASSSound(name,callback,noblock,onerr) + if self.StopSounds or not self.ClientPropsInitialized or self.CreatingCSEnts then return end + --if self.SoundSpawned and name:find(".wav") then return end + --self.SoundSpawned = true + sound.PlayFile(Sound("sound/"..name), "3d noplay mono"..(noblock and " noblock" or ""), function( snd,err,errName ) + if not IsValid(self) then destroySound(snd) return end + if err then + self:DestroySound(snd) + if err == 4 or err == 37 then self.StopSounds = true end + if err ~= 41 then + MsgC(Color(255,0,0),Format("Sound:%s\n\tErrCode:%s, ErrName:%s\n",name,err,errName)) + if onerr then callback(false) end + elseif GetConVarNumber("metrostroi_drawdebug") ~= 0 then + MsgC(Color(255,255,0),Format("Sound:%s\n\tBASS_ERROR_UNKNOWN (it's normal),ErrCode:%s, ErrName:%s\n",name,err,errName)) + self:CreateBASSSound(name,callback) + end + return + elseif not self.Sounds then + self:DestroySound(snd) + if onerr then callback(false) end + else + callback(snd) + end + end ) +end +function ENT:SetPitchVolume(snd,pitch,volume,tbl) + if not IsValid(snd) then return end + if tbl then + if tbl[4] then + snd:SetVolume(tbl[4]*volume) + else + snd:SetVolume(volume) + end + else + snd:SetVolume(volume) + end + snd:SetPlaybackRate(pitch) +end + +function ENT:SetBASSPos(snd,tbl) + if tbl then + snd:SetPos(self:LocalToWorld(tbl[3]),self:GetAngles():Forward()) + else + snd:SetPos(self:GetPos()) + end +end +function ENT:SetBassParameters(snd,pitch,volume,tbl,looping,spec) + if snd:GetState() ~= GMOD_CHANNEL_STOPPED and snd:GetState() ~= GMOD_CHANNEL_PAUSED then + return + end + self:SetBASSPos(snd,tbl) + if tbl then + snd:Set3DFadeDistance(tbl[1],tbl[2]) + if tbl[4] then + snd:SetVolume(tbl[4]*volume) + else + snd:SetVolume(volume) + end + else + snd:Set3DFadeDistance(200,1e9) + snd:SetVolume(volume) + end + snd:EnableLooping(looping or false) + snd:SetPlaybackRate(pitch) + local siz1,siz2 = snd:Get3DFadeDistance()--[[] + debugoverlay.Sphere(snd:GetPos(),4,2,Color(0,255,0),true) + debugoverlay.Sphere(snd:GetPos(),siz1,2,Color(255,0,0,100),false)]] + --debugoverlay.Sphere(snd:GetPos(),siz2,2,Color(0,0,255,100),false) +end +function ENT:SetSoundState(soundid,volume,pitch,time) + --volume = (input.IsKeyDown( KEY_LALT ) and soundid == "horn") and 0 or 1+math.sin(CurTime()*3)*0.2 + --pitch = (input.IsKeyDown( KEY_LALT ) and soundid == "horn") and 1 or 1+math.sin(CurTime()*3)*0.2 + if self.StopSounds or not self.ClientPropsInitialized or self.CreatingCSEnts then return end + local name = self.SoundNames and self.SoundNames[soundid] + local tbl = self.SoundPositions[soundid] + local looptbl = type(name) == "table" and name + if looptbl and #name > 1 then --triple-looped sound + if not self.Sounds.loop[soundid] then self.Sounds.loop[soundid] = {state=false,newstate=false,pitch=0} end + local sndtbl = self.Sounds.loop[soundid] + if volume > 0 then sndtbl.volume = volume end + if pitch > 0 then sndtbl.pitch = pitch end + for i,v in ipairs(name) do + if not sndtbl[i] then sndtbl[i] = {} end + if not IsValid(sndtbl[i].sound) and sndtbl[i].sound ~= false then + self:CreateBASSSound(v,function(snd) + if not snd then + destroySound(sndtbl[i].sound) + sndtbl[i].sound = nil + return + end + + snd:SetPos(self:LocalToWorld(tbl[3]),self:GetAngles():Forward()) + sndtbl[i].sound = snd + sndtbl[i].volume = volume > 0 and sndtbl.volume or volume or 0 + self:SetBassParameters(snd,pitch,sndtbl[i].volume,tbl,i==2) + end,true,true) + sndtbl[i].sound = false + end + end + local state = volume > 0 + if sndtbl.state ~= state then + sndtbl[1].state = state + if not state then sndtbl[2].state = false end + sndtbl[3].state = not state + sndtbl.control = state and 1 or 3 + sndtbl.state = state + end + else + if looptbl then name = name[1] end + local snd = self.Sounds[soundid] + if not IsValid(snd) and name and snd ~= false then + self:CreateBASSSound(name,function(snd) + if not snd then + destroySound(self.Sounds[soundid]) + self.Sounds[soundid] = nil + return + end + + self.Sounds[soundid] = snd + self.Sounds.isloop[soundid] = true + self:SetBassParameters(snd,pitch,volume,tbl,looptbl and looptbl.loop) + end,true,true) + self.Sounds[soundid] = false + return + end + + if not IsValid(snd) then return end + local default_range = 0.80 + if ((volume <= 0) or (pitch <= 0)) then + if snd:GetTime() > 0 then + PauseBASS(snd) + end + return + end + if snd:GetState() ~= GMOD_CHANNEL_PLAYING then + if timeout then + snd:SetTime(time) + end + snd:Play() + end + snd:SetPlaybackRate(pitch) + if tbl and tbl[4] then + snd:SetVolume(tbl[4]*volume) + else + snd:SetVolume(volume) + end + end + + + if soundid == "switch" then default_range = 0.50 end + local pch = math.floor(math.max(0,math.min(255,100*pitch)) + math.random()) + --self.Sounds[soundid]:SetSoundLevel(100*(range or default_range)) + --local vol = math.max(0,math.min(255,2.55*volume)) + (0.001/2.55) + (0.001/2.55)*math.random() + --self.Sounds[soundid]:PlayEx(vol,pch+1) + --self.Sounds[soundid]:ChangeVolume(vol,timeout or 0) + --self.Sounds[soundid]:ChangePitch(pch+1,timeout or 0) + --self.Sounds[soundid]:SetSoundLevel(100*(range or default_range)) +end + +--[[function ENT:CheckActionTimeout(action,timeout) + self.LastActionTime = self.LastActionTime or {} + self.LastActionTime[action] = self.LastActionTime[action] or (CurTime()-1000) + if CurTime() - self.LastActionTime[action] < timeout then return true end + self.LastActionTime[action] = CurTime() + + return false +end +]]-- + +if SERVER then + util.AddNetworkString("metrostroi_client_sound") +else + net.Receive("metrostroi_client_sound", function(size) + local train = net.ReadEntity() + if not IsValid(train) or not train.PlayOnce or not train:ShouldRenderClientEnts() then return end + local snd = net.ReadString() + local pos = net.ReadString() + local range = net.ReadFloat() + local pitch = net.ReadUInt(9)/100 + if pitch == 0 then pitch = 1 end + if pos == "styk" and train.OnStyk then + local opsnd,oppos,oprange,oppitch = train:OnStyk(snd,pos,range,pitch) + if opsnd then + train:PlayOnce(opsnd or snd,oppos or pos,oprange or range,oppitch or pitch) + end + elseif train.OnPlay then + local opsnd,oppos,oprange,oppitch = train:OnPlay(snd,pos,range,pitch) + if opsnd then + train:PlayOnce(opsnd or snd,oppos or pos,oprange or range,oppitch or pitch) + end + elseif snd then + train:PlayOnce(snd,pos,range,pitch) + end + end) +end +if SERVER then + function ENT:PlayOnce(soundid,location,range,pitch,randoff) + if self.OnPlay then + soundid,location,range,pitch = self:OnPlay(soundid,location,range,pitch) + end + net.Start("metrostroi_client_sound",true) + net.WriteEntity(self) + net.WriteString(soundid) + net.WriteString(location or "") + net.WriteFloat(range or 0.8) + net.WriteUInt((pitch or 1)*100,9) + net.SendPAS(self:GetPos()) + end +else + function ENT:PlayOnceFromPos(id,sndname,volume,pitch,min,max,location) + if self.StopSounds or not self.ClientPropsInitialized or self.CreatingCSEnts then return end + self:DestroySound(self.Sounds[id],true) + self.Sounds[id] = nil + if sndname == "_STOP" then return end + self.SoundPositions[id] = {min,max,location} + self:CreateBASSSound(sndname,function(snd) + self.Sounds[id] = snd + self:SetBassParameters(self.Sounds[id],pitch,volume,self.SoundPositions[id],false) + snd:Play() + end) + end + function ENT:PlayOnce(soundid,location,range,pitch,randoff) + if self.StopSounds or not self.ClientPropsInitialized or self.CreatingCSEnts then return end + if not soundid then + ErrorNoHalt(debug.Trace()) + end + + -- Emit sound from right location + if self.ClientSounds and self.ClientSounds[soundid] then + local entsound = self.ClientSounds[soundid] + for i,esnd in ipairs(entsound) do + soundid = esnd[2](self,range,location) + local soundname = self.SoundNames[soundid] + if not soundname then print("NO SOUND",soundname,soundid) continue end + if type(soundname) == "table" then soundname = table.Random(soundname) end + if IsValid(self.ClientEnts[esnd[1]]) and not self.ClientEnts[esnd[1]].snd then + local ent = self.ClientEnts[esnd[1]] + sound.PlayFile( "sound/"..soundname, "3d noplay mono", function( snd,err,errName ) + if not IsValid(self) then destroySound(snd) return end + if err then + self:DestroySound(snd) + if err == 4 or err == 37 then self.StopSounds = true end + if err ~= 41 then + MsgC(Color(255,0,0),Format("Sound:%s\n\tErrCode:%s, ErrName:%s\n",name,err,errName)) + elseif GetConVarNumber("metrostroi_drawdebug") ~= 0 then + MsgC(Color(255,255,0),Format("Sound:%s\n\tBASS_ERROR_UNKNOWN (it's normal),ErrCode:%s, ErrName:%s\n",name,err,errName)) + --self:PlayOnce(soundid,location,range,pitch,randoff) + end + return + elseif not IsValid(ent) then + self:DestroySound(snd) + else + snd:SetPos(ent:GetPos(),ent:LocalToWorldAngles(esnd[7]):Forward()) + snd:SetPlaybackRate(esnd[4]) + snd:SetVolume(esnd[3]) + if esnd[5] then + snd:Set3DFadeDistance(esnd[5],esnd[6]) + end + table.insert(ent.BASSSounds,snd) + snd:Play() + --local siz1,siz2 = snd:Get3DFadeDistance() + --debugoverlay.Sphere(snd:GetPos(),4,2,Color(0,255,0),true) + --debugoverlay.Sphere(snd:GetPos(),siz1,2,Color(255,0,0,100),false) + --debugoverlay.Sphere(snd:GetPos(),siz2,2,Color(0,0,255,100),false) + end + end) + end + end + return + end + + local tbl = self.SoundPositions[soundid] + + local soundname = self.SoundNames[soundid] + if type(soundname) == "table" then soundname = table.Random(soundname) end + if not soundname or not tbl then + --print("NO SOUND",soundname,soundid) + return + end + + if IsValid(self.Sounds[soundid]) then + self:DestroySound(self.Sounds[soundid]) + self.Sounds[soundid] = nil + end + self:CreateBASSSound(soundname,function(snd) + self.Sounds[soundid] = snd + self:SetBassParameters(self.Sounds[soundid],pitch,range,tbl,false) + snd:Play() + end) + end +end + + + + +-------------------------------------------------------------------------------- +-- Load a single system with given name +-------------------------------------------------------------------------------- +function ENT:LoadSystem(a,b,...) + local name + local sys_name + if b then + name = b + sys_name = a + else + name = a + sys_name = a + end + + if not Metrostroi.Systems[name] then ErrorNoHalt("No system defined: "..name) return end + if self.Systems[sys_name] then ErrorNoHalt("System already defined: "..sys_name) return end + + local no_acceleration = Metrostroi.BaseSystems[name].DontAccelerateSimulation + local run_everywhere = Metrostroi.BaseSystems[name].RunEverywhere + if SERVER and Turbostroi and not self.DontAccelerateSimulation then + -- Load system into turbostroi + if (not GLOBAL_SKIP_TRAIN_SYSTEMS) then + Turbostroi.LoadSystem(sys_name,name,...) + end + + -- Load system locally (this may load any systems nested in the initializer) + GLOBAL_SKIP_TRAIN_SYSTEMS = GLOBAL_SKIP_TRAIN_SYSTEMS or 0 + if GLOBAL_SKIP_TRAIN_SYSTEMS then GLOBAL_SKIP_TRAIN_SYSTEMS = GLOBAL_SKIP_TRAIN_SYSTEMS + 1 end + self[sys_name] = Metrostroi.Systems[name](self,...) + GLOBAL_SKIP_TRAIN_SYSTEMS = GLOBAL_SKIP_TRAIN_SYSTEMS - 1 + if GLOBAL_SKIP_TRAIN_SYSTEMS == 0 then GLOBAL_SKIP_TRAIN_SYSTEMS = nil end + + -- Setup nice name as normal + --if (name ~= sys_name) or (b) then self[sys_name].Name = sys_name end + self[sys_name].Name = sys_name + self.Systems[sys_name] = self[sys_name] + + -- Create fake placeholder + if not no_acceleration then + if run_everywhere then + local old_func = self[sys_name].TriggerInput + self[sys_name].TriggerInput = function(system,name,value) + old_func(self,sys_name,name,value) + Turbostroi.TriggerInput(self,sys_name,name,value) + end + else + self[sys_name].TriggerInput = function(system,name,value) + Turbostroi.TriggerInput(self,sys_name,name,value) + end + end + self[sys_name].Think = function() end + end + else + -- Load system like normal + self[sys_name] = Metrostroi.Systems[name](self,...) + --if (name ~= sys_name) or (b) then self[sys_name].Name = sys_name end + self[sys_name].Name = sys_name + self.Systems[sys_name] = self[sys_name] + + --if SERVER then + --[[self[sys_name].TriggerOutput = function(sys,name,value) + local varname = (sys.Name or "")..name + --self:TriggerOutput(varname, tonumber(value) or 0) + self.DebugVars[varname] = value + end]]-- + --end + end +end + +function ENT:SetupDataTables() + self._NetData = {{},{}} +end +--------------------------------------------------------------------------------------- +-- Sends and get float via NWVars +--------------------------------------------------------------------------------------- +function ENT:SetPackedRatio(idx,value) + --local idx = type(idx) == "number" and 999-idx or idx + if self._NetData[2][idx] ~= nil and self._NetData[2][idx] == math.floor(value*500) then return end + self:SetNW2Int(idx,math.floor(value*500)) +end + +function ENT:GetPackedRatio(idx) + return self:GetNW2Int(idx)/500 +end + +-------------------------------------------------------------------------------- +-- Sends and get bool via NWVars +-------------------------------------------------------------------------------- +function ENT:SetPackedBool(idx,value) + if self._NetData[1][idx] ~= nil and self._NetData[1][idx] == value then return end + self:SetNW2Bool(idx,value) +end + +function ENT:GetPackedBool(idx) + return self:GetNW2Bool(idx) +end + + + +ENT.SubwayTrain = { + Type = "Base", + Name = "Base", + WagType = 2, + ALS = { + HaveAutostop = false, + TwoToSix = true, + RSAs325Hz = true, + Aproove0As325Hz = false, + }, +} \ No newline at end of file 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..798b981 --- /dev/null +++ b/lua/entities/gmod_subway_em508/cl_init.lua @@ -0,0 +1,1978 @@ +-------------------------------------------------------------------------------- +-- 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.ButtonMap["Main1"] = { + pos = Vector(455.5,-31.2,-11.2+0.2), + ang = Angle(0,-90,11.5), + width = 285, + height = 180, + scale = 0.0588, + hideseat = 0.2, + + buttons = { + {ID = "KU8Set", x=88,y=35, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl", z=-12,vmin=1, vmax=0, + var="KU8",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "KU10Set", x=187, y=35, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", z=-12,vmin=1, vmax=0, + var="KU10",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "KU9Set", x=138,y=35, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", z=-9,vmin=1, vmax=0, + var="KU9",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "KU2Toggle", x=227, y=29,w=42,h=55, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-21, + var="KU2",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"}, + }}, + + + + {ID = "KU15Set", x=15,y=40,w=42,h=55, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-21, + var="KU15",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 = "KU1Toggle", x=88,y=80, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-508/em508_switcher.mdl",z=-20,scale=0.85,ang=90, + var="KU1",speed=16, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "KU11Set", x=138,y=87, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl", z=-9,vmin=1, vmax=0, + var="KU11",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + + + {ID = "KU4Set", x=36.5, y=137, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", z=-12,vmin=1, vmax=0, + var="KU4",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "KU5Set", x=89, y=137, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl", z=-12,vmin=1, vmax=0, + var="KU5",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + + {ID = "UV1Set", x=138, y=136, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", z=-12,vmin=1, vmax=0, + var="UV1",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + + + ----Door panel + {ID = "KU6Set", x=188, y=136, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", z=-12,vmin=1, vmax=0, + var="KU6",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "KU7Set", x=248, y=136, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", z=-12,vmin=1, vmax=0, + var="KU7",speed=16, + sndvol = 0.07, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "KU6KToggle",x=190, y=81, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-508/em508_switcher.mdl",z=-20,scale=0.85, + var="KU6K",speed=6,ang=0, + disableoff="KU6Set",disableon="KU7Set", + getfunc = function(ent) + return ent:GetPackedBool("KU6K") and (ent:GetPackedBool("KU6") and 0.8 or 1) or (ent:GetPackedBool("KU7") and 0.2 or 0) + end, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Left","Train.Buttons.Right"} + }}, + {ID = "!KU6K",x=188, y=136, radius=0, model = { + model = "models/metrostroi_train/81-703/cabin_doors_cover.mdl",ang = Angle(0,180,180),z=-2.5,y=-30,vmin=0.83,vmax=1, + var="KU6K",speed=1, + sndvol = 0.10, snd = function(val) return val and "kr_left" or "kr_right" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "!KU7K",x=248, y=136, radius=0, model = { + model = "models/metrostroi_train/81-703/cabin_doors_cover.mdl",ang = Angle(0,180,180),z=-2.5,y=-30,vmin=0,vmax=0.17, + var="KU6K",speed=1, + sndvol = 0.10, snd = function(val) return val and "kr_left" or "kr_right" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + --{ID = "DoorSelectToggle", x=43.6+43*4.5, y=180, radius=12, tooltip=""}, + } +} + +local strength = { + [0] = 0.86, + [1] = 0.29, + [2] = 0.71, + [3] = 0.71, + [4] = 0.57, + [5] = 0.71, + [6] = 0.86, + [7] = 0.43, + [8] = 1.00, + [9] = 0.86, +} +ENT.ButtonMap["Lamps"] = { + pos = Vector(457.8 ,-30.1-1,-7.4), + ang = Angle(0,-90,90-30), + width = 290, + height = 70, + scale = 0.0588, + hideseat=0.2, + + buttons = { + {ID = "!GRP", x=13+20+0*25+12,y=6, w=50-24,h=50, tooltip="", model = { + lamp = {model = "",bscale=Vector(1.2,0.6,1),z = -45, var="GRP"} + }}, + {ID = "!LSN", x=13+20+1*25+12,y=6, w=50-24,h=50, tooltip="", model = { + lamp = {model = "",bscale=Vector(1.2,0.6,1),z = -45,var="SN",getfunc = function(ent) return ent:GetPackedRatio("RRP")^2*1.01 end} + }}, + {ID = "!RRP", x=13+20+2*25+12,y=6, w=50-24,h=50, tooltip="", model = { + lamp = {model = "",bscale=Vector(1.2,0.6,1),z = -45,var="RP",getfunc = function(ent) return math.Clamp((ent:GetPackedRatio("RRP")-0.45)*7,0,1) end} + }}, + {ID = "!Speedometer1",x=110-6+12,y=9,w=50-24,h=50,tooltip="",model = { + name="Speed2",model = "models/metrostroi_train/81-717/segments/segment_mvm.mdl",color=Color(250,50,20),skin=0,z=-40,ang=Angle(0,0,-90), tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.Speed"),ent:GetPackedRatio("Speed")*100) end, + sprite = {bright=0.1,size=.5,scale=0.02,vscale=0.025,z=1,color=Color(250,50,20),aa=true,getfunc= function(ent) + if not ent:GetPackedBool("V1") then return 0 end + return strength[math.floor(ent:GetPackedRatio("Speed")*10)%10] + end}, + }}, + {ID = "!Speedometer2",x=110+6+12,y=9,w=50-24,h=50,tooltip="",model = { + name="Speed1",model = "models/metrostroi_train/81-717/segments/segment_mvm.mdl",color=Color(250,50,20),skin=0,z=-40,ang=Angle(0,0,-90), tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.Speed"),ent:GetPackedRatio("Speed")*100) end, + sprite = {bright=0.1,size=.5,scale=0.02,vscale=0.025,z=1,color=Color(250,50,20),aa=true,getfunc= function(ent) + if not ent:GetPackedBool("V1") then return 0 end + return strength[math.floor(ent:GetPackedRatio("Speed")*100)%10] + end}, + }}, + {ID = "!SD", x=43+20+3*25+12,y=6, w=50-24,h=50, tooltip="", model = { + lamp = {model = "",bscale=Vector(1.2,0.6,1),z = -45, var="SD",} + }}, + {ID = "!UKS", x=43+20+4*25+12,y=6, w=50-24,h=50, tooltip="", model = { + lamp = {model = "",bscale=Vector(1.2,0.6,1),z = -45, var="UKS",} + }}, + + + { ID = "KU16Toggle", x=255, y=49, radius=10, tooltip="", model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_w_a.mdl",ang = 180,z=-2, + var="KU16",speed=16, + sndvol = 1, snd = function(val) return val and "pnm_on" or "pnm_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} + +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"}, + } +} + +ENT.ButtonMap["AVU"] = { + pos = Vector(462.9,-19,35.5), + ang = Angle(0,-95.5,90), + width = 95, + height = 85, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + { ID = "OtklAVUToggle", x=48, y=51, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=-2, + var="OtklAVU",speed=16, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270,x=-1,y=24,z=-2,var="OtklAVUPl", ID="OtklAVUPl",}, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "!AVULight", x=69, y=51, radius=10, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl", skin = 3, z = -4, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=62,x=-0.3,y=-0.3,z=20.6,var="AVU",color=Color(210,170,255),}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(210,170,255),}, + }}, + } +} +ENT.ClientProps["asotp"] = { + model = "models/metrostroi_train/81-707/asotp.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat = 1, +} +ENT.ButtonMap["ASNP"] = { + pos = Vector(461.42,-35.2,36.4), + ang = Angle(-0.4,-97,90), + width = 115, + height = 60, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "R_ASNPMenuSet",x=58, y=48.5, radius=8, tooltip = "Информатор: Меню",model = { + model = "models/metrostroi_train/81-720/button_round.mdl", + var="R_ASNPMenu",speed=12, vmin=0, vmax=0.9,z=-3, + sndvol = 0.5,snd = function(val) return val and "pnm_button1_on" or "pnm_button1_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "R_ASNPUpSet",x=105, y=14.5, radius=8, tooltip = "Информатор: Вверх",model = { + model = "models/metrostroi_train/81-720/button_round.mdl", + var="R_ASNPUp",speed=12, vmin=0, vmax=0.9,z=-3, + sndvol = 0.5,snd = function(val) return val and "pnm_button1_on" or "pnm_button2_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "R_ASNPDownSet",x=105, y=31, radius=8, tooltip = "Информатор: Вниз",model = { + model = "models/metrostroi_train/81-720/button_round.mdl", + var="R_ASNPDown",speed=12, vmin=0, vmax=0.9,z=-3, + sndvol = 0.5,snd = function(val) return val and "pnm_button2_on" or "pnm_button1_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "R_ASNPOnToggle",x=12, y=18, radius=8, tooltip = "Информатор: Включение",model = { + model = "models/metrostroi_train/81-720/tumbler2.mdl", ang=0, z = -3, + var="R_ASNPOn",speed=12, vmin=1, vmax=0, + sndvol = 0.5,snd = function(val) return val and "pnm_on" or "pnm_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} + +ENT.ButtonMap["ASNPScreen"] = { + pos = ENT.ButtonMap["ASNP"].pos+Vector(-0.1,-1.6,-0.85), + ang = Angle(-.4,-97,90), + width = 512, + height = 128, + scale = 0.008, + hideseat = 0.2, + hide=true, +} + + +ENT.ButtonMap["IGLAButtons"] = { + pos = Vector(459.1,-53.7,15.81+1), + ang = Angle(-0,237.1,90), + width = 87, + height = 70, + scale = 0.0625, + hideseat = 0.2, + buttons = { + {ID = "IGLA1USet",x=11, y=39, w=12, h=7, tooltip=""}, + {ID = "IGLA1Set",x=11, y=46, w=12, h=7, tooltip=""}, + {ID = "IGLA1DSet",x=11, y=53, w=12, h=7, tooltip=""}, + {ID = "IGLA2USet",x=65, y=39, w=12, h=7, tooltip=""}, + {ID = "IGLA2Set",x=65, y=46, w=12, h=7, tooltip=""}, + {ID = "IGLA2DSet",x=65, y=53, w=12, h=7, tooltip=""}, + {ID = "!IGLASR",x=17.9, y=10.5, radius=3, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl", var="IGLASR",color=Color(175,250,20),z=-2}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(175,250,20),z=-1,} + }}, + {ID = "!IGLARX",x=27.5, y=10.5, radius=3, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl", var="IGLARX",color=Color(255,56,30),z=-2}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,56,30),z=-1,} + }}, + {ID = "!IGLAErr",x=40.5, y=10.5, radius=3, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl", var="IGLAErr",color=Color(255,168,000),z=-2}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,168,000),z=-1,} + }}, + {ID = "!IGLAOSP",x=50, y=10.5, radius=3, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl", var="IGLAOSP",color=Color(175,250,20),z=-2}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(175,250,20),z=-1,} + }}, + {ID = "!IGLAPI",x=59.5, y=10.5, radius=3, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl", var="IGLAPI",color=Color(255,56,30),z=-2}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,56,30),z=-1,} + }}, + {ID = "!IGLAOff",x=69, y=10.5, radius=3, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl", var="IGLAOff",color=Color(255,56,30),z=-2}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,56,30),z=-1,} + }}, + } +} +ENT.ButtonMap["IGLA"] = { + pos = ENT.ButtonMap["IGLAButtons"].pos+Vector(-0.30,-0.6,-1.25), + ang = ENT.ButtonMap["IGLAButtons"].ang, + width = 512, + height = 128, + scale = 0.025/2.7, + hideseat = 0.2, + hide=true, + +} +ENT.ClientProps["E_informator"] = { + model = "models/metrostroi_train/equipment/rri_informator_portable.mdl", + pos = Vector(404.75,-38,-4.2), + ang = Angle(0,0,0), + hideseat = 0.2, +} +ENT.ButtonMap["RRI"] = { + pos = ENT.ClientProps["E_informator"].pos+Vector(-0.65,-0.5,5), + ang = Angle(0,90,0), + width = 60, + height = 25, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "RRIEnableToggle",x=10,y=12.5,radius=10,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=-4, + var="RRIEnable",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "!RRIRewind",x=30,y=12.5,radius=0,model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_b_a.mdl",ang = 180,z=-3, + getfunc = function(ent) return ent:GetPackedRatio("RRIRewind") end, + var="RRIRewind",speed=8, + sndvol = 0.5,snd = function(_,val) return val==2 and "triple_0-up" or val==0 and "triple_0-down" or "triple_up-0" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "RRIRewindSet2",x=30-5,y=12.5-10,w=10,h=10,tooltip=""}, + {ID = "RRIRewindSet0",x=30-5,y=12.5,w=10,h=10,tooltip=""}, + + {ID = "RRIAmplifierToggle",x=50,y=12.5,radius=10,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=-4, + var="RRIAmplifier",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "!RRIOn",x=70,y=12.5,radius=10,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",z = -13, + lamp = { model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=62,x=-0.3,y=-0.3,z=20.6, var="RRIOn", color=Color(210,170,255), getfunc=function(ent,min,max,var) return ent:GetPackedBool(var) and (1-(ent.AnnLamp or 0)^1.5*0.6) or 0 end, }, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(210,170,255),}, + }}, + } +} +ENT.ButtonMap["RRIScreen"] = { + pos = ENT.ClientProps["E_informator"].pos+Vector(2,-2.9,5), + ang = Angle(0,90,90), + width = 121, + height = 103, + scale = 0.07, + hideseat = 0.2, + hide=true, + + buttons = { + {ID = "RRIUp",x=30,y=60,radius=10,tooltip=""}, + {ID = "RRIDown",x=30,y=80,radius=10,tooltip=""}, + {ID = "RRILeft",x=20,y=70,radius=10,tooltip=""}, + {ID = "RRIRight",x=40,y=70,radius=10,tooltip=""}, + } +} + +--VU Panel +ENT.ButtonMap["VU"] = { + pos = Vector(464.20,-17,20), + ang = Angle(0,268,90), + width = 70, + height = 100, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "VUToggle", x=0, y=0, w=70, h=100, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_black.mdl", z=-8, 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}}, + 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["KU14"] = { + pos = Vector(463.5,-18,5.3), + ang = Angle(0,268,90), + width = 45, + height = 85, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "KU14Set", x=0, y=0, w=45, h=85, tooltip="", model = { + model = "models/metrostroi_train/switches/vudbrown.mdl", z=0, + labels={{model="models/metrostroi_train/81-707/labels/vu_labels.mdl",skin=12,ang=90,z=18.9,x=0,y=-25.5}}, + var="KU14",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), + }}, + } +} + +ENT.ButtonMap["KU10R"] = { + pos = Vector(462.6,-15.8,-0.8), + ang = Angle(5,270,90), + width = 140, + height = 80, + scale = 0.0625, + hideseat=0.2, + + buttons = { + { ID = "KU10RSet", x=0, y=0, w=140,h=80, tooltip="", model = { + model = "models/metrostroi_train/81-702/buttons/emer_doors.mdl", z=0, ang=Angle(-90,0,0), + var="KU10R",speed=12, + sndvol = 0.1, snd = function(val) return val and "vu220b1_on" or "vu220b1_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} + +ENT.ButtonMap["Stopkran"] = { + pos = Vector(461.6,27,3), + ang = Angle(0,-90,90), + width = 100, + height = 1300, + scale = 0.1/2, + buttons = { + {ID = "EmergencyBrakeValveToggle",x=0, y=0, w=100, h=1300, tooltip="", tooltip="",tooltip="",states={"Train.Buttons.Closed","Train.Buttons.Opened"},var="EmergencyBrakeValve"}, + } +} +ENT.ClientProps["stopkran"] = { + model = "models/metrostroi_train/81-717/stop_mvm.mdl", + pos = Vector(464.5-0.1,24.4,-3), + ang = Angle(0,270,0), + hide = 0.8, +} +ENT.ClientSounds["EmergencyBrakeValve"] = {{"stopkran",function() return "disconnect_valve" end,1,1,50,1e3,Angle(-90,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, + }}, + } +} + + +ENT.ButtonMap["KRR"] = { + pos = Vector(403,-25,4), + ang = Angle(0,90,90), + width = 20, + height = 20, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "KRRSet", x=10, y=10, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl", + var="KRR",speed=16,vmin=1,vmax=0, + sndvol = 0.10, snd = function(val) return val and "button2_on" or "button1_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + } +} + +---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), + }}, + } +} + + +ENT.ButtonMap["AV2"] = { + pos = Vector(403.5,31.7,26), + ang = Angle(0,90,90), + width = 100, + height = 136, + scale = 0.0625, + hide = 0.8, + + buttons = { + {ID = "RSTToggle", x=0, y=0, w=100, h=136, 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=3,ang=90,z=20.9,x=0,y=-12.5}}, + plomb = {model = "models/metrostroi_train/equipment/vu_plomb_left.mdl",ang=Angle(-90,90,0),x=-8,y=33.7,z=9.3,var="RSTPl", ID="RSTPl",}, + var="RST",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} +ENT.ButtonMap["50V"] = { + pos = Vector(403.4,20.5,8.5), + ang = Angle(0,90,90), + width = 100, + height = 136, + scale = 0.0625, + hide = 0.8, + + buttons = { + {ID = "50VToggle", x=0, y=0, w=100, h=136, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_black.mdl", z=20, ang = 180, + var="50V",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} + + +-- Battery panel +ENT.ButtonMap["Battery"] = { + pos = Vector(403.5,21.2,17.3), + 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), + }}, + } +} +-- Battery panel +ENT.ButtonMap["PassHeaters"] = { + pos = Vector(404.10,-45,29), + ang = Angle(0,90,90), + width = 250, + height = 140, + scale = 0.0625, + hide = 0.8, + + buttons = { + {ID = "HPassToggle", x=0, y=0, w=250, h=140, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_black_2.mdl", z=15, ang=Angle(90,0,180), + var="HPass",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["DriverMicrophone"] = { + pos = Vector(446,-58.5,10.8), + ang = Angle(0,-89,90), + width = 30, + height = 30, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "R_Program1Set", x=15, y=30, radius=15, tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -5.5, + labels={{model="models/metrostroi_train/81-702/labels/vu_labels.mdl",skin=7,ang=90,z=2,x=0,y=27}}, + var="R_Program1",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button1_on" or "button3_off" end, + sndmin = 60,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + } +} + +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"}, + }}, + {ID = "R_Program1HSet", x=14, y=220, radius=15, tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + labels={{model="models/metrostroi_train/81-702/labels/vu_labels.mdl",skin=7,ang=90,z=2,x=0,y=-24}}, + var="R_Program1H",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button1_on" or "button3_off" end, + sndmin = 60,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "R_Program2HSet", x=44, y=220, radius=15, tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + labels={{model="models/metrostroi_train/81-702/labels/vu_labels.mdl",skin=8,ang=90,z=2,x=0,y=-24}}, + var="R_Program2H",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button1_on" or "button3_off" end, sndmin = 60,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + } +} + +ENT.ButtonMap["HVMeters"] = { + pos = Vector(460,-56,28.9), + ang = Angle(0,-90-51.8,90), + + width = 66, + height = 152, + scale = 0.0625, + + buttons = { + {ID = "!EnginesVoltage", x=0,y=0,w=66,h=72,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesVoltage"),ent:GetPackedRatio("EnginesVoltage")*1000) end}, + {ID = "!EnginesCurrent", x=0,y=79,w=66,h=72,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesCurrent"),ent:GetPackedRatio("EnginesCurrent")*1000-500) end}, + } +} + +ENT.ButtonMap["BLTLPressure"] = { + pos = Vector(460.5,-54,9.8), + ang = Angle(0,-144,90), + width = 114, + height = 114, + 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}, + } +} +ENT.ButtonMap["BCPressure"] = { + pos = Vector(460.4,-49.5,3.5), + ang = Angle(0,-90-20,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.4,-17.3,10.5), + ang = Angle(0,267,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"}}, + } +} + +-- UAVA +ENT.ButtonMap["UAVAPanel"] = { + pos = Vector(453.5,56,-5), + ang = Angle(0,-70,90), + width = 180, + height = 200, + scale = 0.0625, + + buttons = { + {ID = "UAVAToggle",x=0, y=0, w=60, h=200, tooltip="", model = { + plomb = {var="UAVAPl", ID="UAVAPl",}, + var="UAVA", + sndid="UAVALever",sndvol = 1, snd = function(val) return val and "uava_on" or "uava_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "UAVACToggle",x=60, y=0, w=120, h=150, tooltip="",var="UAVAC",states={"Train.Buttons.UAVAOff","Train.Buttons.UAVAOn"}}, + {ID = "UKSDisconnectToggle",x=60, y=150, w=120, h=50, tooltip="",var="UKSDisconnect",states={"Train.Buttons.Closed","Train.Buttons.Opened"}, model = { + plomb = {var="UAVAPl", ID="UAVAPl",}, + }}, + } +} + + +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_black.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["krureverser"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = Vector(406.5,-22,-2.5), + ang = Angle(-5,90,90), + 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_e_nm.mdl", + pos = Vector(457.98,-56.169998+0.1,4.80), + ang = Angle(170.000000,-143.3,89), + hideseat = 0.2, +} + +ENT.ClientProps["brake_line"] = { + model = "models/metrostroi_train/Equipment/arrow_e_tm.mdl", + pos = Vector(457.96,-56.150002+0.1,4.79), + ang = Angle(170.000000,-143.3,89), + hideseat = 0.2, +} + +ENT.ClientProps["brake_cylinder"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(460.05,-51.7,1), + ang = Angle(-110,70.55,-88.9), + hideseat = 0.2, +} +---------------------------------------------------------------- +ENT.ClientProps["voltmeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(458.265,-57.25,25.27), + ang = Angle(-90.1,-51.75,0), + bscale = Vector(1,1,1.3), + hideseat = 0.2, +} +ENT.ClientProps["ampermeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(458.34,-57.19,20.65), + ang = Angle(-90,-51.8,0), + bscale = Vector(1,1,1.3), + hideseat = 0.2, +} + +ENT.ClientProps["volt1"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(463.26,-19.415,7.65), + ang = Angle(-90.7,-2,0), + bscale = Vector(1,1,1.3), + hideseat = 0.2, +} +-------------------------------------------------------------------------------- +--[[ENT.ClientProps["book"] = { + model = "models/props_lab/binderredlabel.mdl", + pos = Vector(401.763123,-32.429512,48.305576), + ang = Angle(53,0,90), +}]] + +ENT.ClientProps["salon"] = { + model = "models/metrostroi_train/81-502/ema_salon_501.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2.0, +} +ENT.ClientProps["Ema_mirrors"] = { + model = "models/metrostroi_train/81-707/mirrors_ezh.mdl", + pos = Vector(2,0,0), + ang = Angle(0,0,0), + hide = 2.0, +} +ENT.ClientProps["cabin"] = { + model = "models/metrostroi_train/81-509/em509_cabine.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide=2, +} + +ENT.ClientProps["sunprotectors"] = { + model = "models/metrostroi_train/81-502/sun_protectors.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2.0, +} + + +ENT.ClientProps["asotp"] = { + model = "models/metrostroi_train/81-707/asotp.mdl", + pos = Vector(0,0,1), + ang = Angle(0,0,0), + hide = 2.0, + } +ENT.ClientProps["underwagon"] = { + model = "models/metrostroi_train/81-703/81-703_Underwagon.mdl", + pos = Vector(-23.5,0,-191), + 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, +} +ENT.ClientProps["Lamp_RTM"] = { + model = "models/metrostroi_train/81-717/rtmlamp.mdl", + pos = Vector(407.7,23.45,28.57), + ang = Angle(0,180,0), + scale=1.02 +} + +ENT.ClientProps["Drawers"] = { + model = "models/metrostroi_train/81-509/em509_drawers.mdl", + pos = Vector(-2,0,0), + ang = Angle(0,0,0), + hideseat=2, +} + +ENT.ClientProps["GRP"] = { + model = "models/metrostroi_train/81-509/reflects/reflection_rpgreen.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=2, +} + +ENT.ClientProps["SN"] = { + model = "models/metrostroi_train/81-509/reflects/reflection_sn.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=2, +} + +ENT.ClientProps["RRP"] = { + model = "models/metrostroi_train/81-509/reflects/reflection_rpred.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=2, +} + +ENT.ClientProps["SD"] = { + model = "models/metrostroi_train/81-509/reflects/reflection_sd.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=2, +} + +ENT.ClientProps["UKS"] = { + model = "models/metrostroi_train/81-509/reflects/reflection_uks.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=2, +} +--[[ +ENT.ClientProps["PreviewLamps6"] = { + model = "models/metrostroi_train/81-509/reflects/reflection_unnown.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat=2, +}]] + +ENT.ClientProps["tab"] = { + model = "models/metrostroi_train/Equipment/tab.mdl", + pos = Vector(16,0,8), + ang = Angle(0,0,0), + skin = 2, + hide = 2, +} +ENT.ButtonMap["Route"] = { + pos = Vector(465.7,35.3,2), + ang = Angle(0,98,90), + width = 153, + height = 130, + scale = 0.0625, + buttons = { + {ID = "RouteNumber1+",x=76.5*0,y=0, w=76.5,h=65, tooltip=""}, + {ID = "RouteNumber2+",x=76.5*1,y=0, w=76.5,h=65, tooltip=""}, + {ID = "RouteNumber1-",x=76.5*0,y=65,w=76.5,h=65, tooltip=""}, + {ID = "RouteNumber2-",x=76.5*1,y=65,w=76.5,h=65, tooltip=""}, + } +} +ENT.ClientProps["route"] = { + model = "models/metrostroi_train/common/routes/ezh/route_holder.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2, +} +ENT.ClientProps["route1"] = { + model = "models/metrostroi_train/common/routes/ezh/route_number1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2, + callback = function(ent) + ent.RouteNumber.Reloaded = false + end, +} +ENT.ClientProps["route2"] = { + model = "models/metrostroi_train/common/routes/ezh/route_number2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2, + callback = function(ent) + ent.RouteNumber.Reloaded = false + 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/ezh3_door_noars_with_marshrut.mdl", + pos = Vector(460.62+7.4,-14.53,-7), + ang = Angle(0,-90,0), + hide = 2, + callback = function(ent) + ent.LastStation.Reloaded = false + end, +} +ENT.ButtonMap["LastStation"] = { + pos = Vector(460.62+7.4,-14.53,2), + ang = Angle(0,90,90), + width = 500, + height = 150, + scale = 0.0625, + buttons = { + {ID = "LastStation-",x=000,y=0,w=250,h=150, tooltip=""}, + {ID = "LastStation+",x=250,y=0,w=250,h=150, tooltip=""}, + } +} + +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+18,-15,-8.1), + 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["UAVALever"] = { + model = "models/metrostroi_train/81-703/cabin_uava.mdl", + pos = Vector(449+7.7,56.0,-10.24349), + ang = Angle(0,-90+10,0), + hideseat = 0.8, +} + +ENT.ClientProps["RedLights"] = { + model = "models/metrostroi_train/81-703/81-703_red_light.mdl", + pos = Vector(-23+7.2,1,-191), + ang = Angle(0,0,0.000000), + nohide=true, +} +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=95, texture = "models/metrostroi_train/equipment/headlight",shadows = 1,headlight=true}, + [2] = { "headlight", Vector(460,0,45), Angle(-20,0,0), Color(255,0,0), fov=164 ,brightness = 0.3, farz=250,texture = "models/metrostroi_train/equipment/headlight2",shadows = 0,backlight=true}, + [21] = { "headlight", Vector(445,-55,41), Angle(75, 70,45), Color(190, 130, 88), fov=135, farz=90, brightness = 1.5, shadows = 1, texture = "models/metrostroi_train/equipment/headlight", hidden = "Lamps_pult"}, + [22] = { "headlight", Vector(445,-55.0,32.2), Angle(0,0,0), Color(255,130,88), fov=125, farz=65,brightness = 1.5,shadows = 0, texture = "models/metrostroi_train/equipment/headlight", hidden = "Lamps_pult"}, + --[24] = { "headlight", Vector(442,-53.0,-0.2), Angle(75,0,0), Color(255,130,88), fov=90, farz=65,brightness = 2,shadows = 0}, + [40] = { "headlight", Vector(457.80,-37.3,-5.3),Angle(45,-40,120) , Color(255,125,25), farz = 6, nearz = 1, shadows = 0, brightness = 16, fov = 80, hidden = "cabin"}, + [41] = { "headlight", Vector(457.80,-42.6,-5.3),Angle(45,40,120) , Color(255,125,25), farz = 6, nearz = 1, shadows = 0, brightness = 16, fov = 80, hidden = "cabin"}, + + -- Emergency lit + [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(425,0,40), Angle(0,0,0), Color(252, 157, 77), brightness = 0.0007, distance = 600, hidden = "cabin"}, + + [5] = { "light", Vector(465+5,-32, 48), Angle(0,0,0), Color(255,50,50), brightness = 0.2, scale = 1.5, texture = "sprites/light_glow02", size = 2 }, + [6] = { "light", Vector(465+5, 32, 48), Angle(0,0,0), Color(255,50,50), brightness = 0.2, scale = 1.5, texture = "sprites/light_glow02", size = 2 }, + [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.8,-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"}, + Lamp_RTM = {"light", Vector(407.7,23.45,28.57), Angle(0,0,0),Color(255,180,60),brightness = 0.4,scale = 0.03, texture = "sprites/light_glow02", hidden = "Lamp_RTM"}, +} + +function ENT:Initialize() + self.BaseClass.Initialize(self) + + self.FrontLeak = 0 + self.RearLeak = 0 + + --self.Train:SetPackedRatio("EmergencyValve_dPdT", leak) + --self.Train:SetPackedRatio("EmergencyValveEPK_dPdT", leak) + --self.Train:SetPackedRatio("EmergencyBrakeValve_dPdT", leak) + self.ASNP = self:CreateRT("710ASNP",512,128) + self.IGLA = self:CreateRT("710IGLA",512,128) + self.RRIScreen = self:CreateRT("710RRI",128,128) + self.CraneRamp = 0 + self.ReleasedPdT = 0 + self.EmergencyValveRamp = 0 + self.EmergencyValveEPKRamp = 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 + + local typ = self:GetNW2Int("AnnType",1) + self:HidePanel("RRI",typ~=1) + self:HidePanel("RRIScreen",typ~=1 or self.CurrentCamera ~= 6) + self:ShowHide("E_informator",typ==1) + self:HidePanel("ASNP",typ~=2) + self:HidePanel("ASNPScreen",typ~=2) + self:HidePanel("IGLAButtons",typ~=2) + self:HidePanel("IGLA",typ~=2) + self:ShowHide("asotp",typ==2) + + -- 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 + + self:ShowHideSmooth("ars_indicator",self:Animate("L_ARS",self:GetPackedBool("L_ARS") and 1 or 0,0,1,5,false)) + + 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) + local RL = self:Animate("redlights",self:GetPackedBool("RedLight") and 1 or 0,0,1,5,false) + + self:ShowHideSmooth("WhiteLights",HL1) + self:ShowHideSmooth("DistantLights",HL2) + self:ShowHideSmooth("RedLights",RL) + self:SetLightPower(5,RL > 0,RL) + self:SetLightPower(6,RL > 0,RL) + self:SetLightPower(30,HL1 > 0, HL1) + self:SetLightPower(31,HL1 > 0, HL1) + self:SetLightPower(32,HL2 > 0, HL2) + + local bright = HL1*0.3+HL2*0.7 + self:SetLightPower(1,bright>0,bright) + self:SetLightPower(2,RL>0,RL) + + local PL = HL1*self:Animate("lamps_pult",self:GetPackedBool("PanelLights") and 1 or 0,0,1,12,false) + self:ShowHideSmooth("Lamps_pult",PL) + self:SetLightPower("Lamps_pult",PL>0,PL) + self:SetLightPower(21,PL>0,PL) + self:SetLightPower(22,PL>0,PL) + + + 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 + + self:ShowHideSmoothFrom("GRP","!GRP_lamp") + self:ShowHideSmoothFrom("SN","!LSN_lamp") + self:ShowHideSmoothFrom("RRP","!RRP_lamp") + self:ShowHideSmoothFrom("SD","!SD_lamp") + self:ShowHideSmoothFrom("UKS","!UKS_lamp") + + self:ShowHide("Speed1",self:GetPackedBool("V1")) + self:ShowHide("Speed2",self:GetPackedBool("V1")) + local speed = self:GetPackedRatio("Speed")*100.0 + if self:GetPackedBool("V1") then + if IsValid(self.ClientEnts["Speed1"])then self.ClientEnts["Speed1"]:SetSkin(math.floor(speed)%10) end + if IsValid(self.ClientEnts["Speed2"])then self.ClientEnts["Speed2"]:SetSkin(math.floor(speed/10)) 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 + ---PB + self:Animate("PB",self:GetPackedBool("PB") and 1 or 0,0,0.2, 12,false) + + self:Animate("UAVALever", self:GetPackedBool("UAVA") and 1 or 0, 0,0.6, 128, 3,false) + 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("EPK_disconnect",self:GetPackedBool("EPK") and 1 or 0,0.5,0.25, 3,false) + self:Animate("stopkran", self:GetPackedBool("EmergencyBrakeValve") and 1 or 0,0,0.25, 7, false) + + -- Simulate pressure gauges getting stuck a little + self:Animate("brake", self:GetPackedRatio("CranePosition"), 0.00, 0.48,256,24) + 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("krureverser",self:GetPackedRatio("KRUPosition"),0.5,1,3,false) + self:Animate("volt1", self:GetPackedRatio("BatteryVoltage")^0.99,0.624,0.385,45,3) + + self:ShowHide("reverser",self:GetNW2Int("WrenchMode",0)==1) + self:ShowHide("krureverser",self:GetNW2Int("WrenchMode",0)==2) + self:ShowHide("rcureverser",self:GetNW2Int("WrenchMode",0)==3) + + + + ---Animate brakes + self:Animate("brake_line",self:GetPackedRatio("BLPressure"),0.631, 0.795, 256,2)--,,0.01) + self:Animate("train_line",self:GetPackedRatio("TLPressure"),0.631, 0.795, 256,2)--,,0.01) + self:Animate("brake_cylinder",self:GetPackedRatio("BCPressure")^0.95,0.085, 0.81, 256,2)--,,0.03) + --[[self:Animate("brake_cylinder",self:GetPackedRatio("BCPressure"), 0, 0.743, 32,1)--,,0.03) + local anim = self:Animate("brake_cylinder",self:GetPackedRatio("BCPressure"), 0, 0.743, 2048,6)--,,0.03) + self.BrakeCylinder = self.BrakeCylinder or 0.5 + 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("voltmeter",self:GetPackedRatio("EnginesVoltage"),0.62,0.385,92,2) + self:Animate("ampermeter",self:GetPackedRatio("EnginesCurrent"),0.63,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.8+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 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)) + + 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) + + -- 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) + + + -- ARS/ringer alert + self:SetSoundState("ring",self:GetPackedBool("Ring") and 1 or 0,1) + + self:ShowHideSmooth("Lamp_RTM",self:Animate("lamps_rtm",self:GetPackedBool("VPR") and 1 or 0,0,1,8,false)) + self:SetSoundState("vpr",self:GetPackedBool("VPR") and 1 or 0,1) + + -- 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 + self.AnnLamp = self.AnnLamp 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 + local annvolume = self.Sounds.announcer1 and IsValid(self.Sounds.announcer1) and self.Sounds.announcer1:GetLevel()*math.Rand(0.9,3) or 0 + + local lamp = math.max(annvolume,noise and self.NoiseVolume or 0) + + self.AnnLamp = math.Clamp(self.AnnLamp + 8*(lamp-self.AnnLamp)*dT,0,1) + if self.AnnLamp < 0.01 then self.AnnLamp=0 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:Draw() + self.BaseClass.Draw(self) +end +function ENT:DrawPost() + self.RTMaterial:SetTexture("$basetexture", self.ASNP) + self:DrawOnPanel("ASNPScreen",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(256,64,512,128,0) + end) + + self.RTMaterial:SetTexture("$basetexture", self.IGLA) + self:DrawOnPanel("IGLA",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(256,64+22,512,128+22,0) + end) + + 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) + self.RTMaterial:SetTexture("$basetexture", self.RRIScreen) + self:DrawOnPanel("RRIScreen",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(64,64,128,128,0) + end) +end + +function ENT:OnButtonPressed(button) + if button == "PrevSign" then + self.InfoTableTimeout = CurTime() + 2.0 + end + if button == "NextSign" then + self.InfoTableTimeout = CurTime() + 2.0 + end + + if button and button:sub(1,3) == "Num" then + self.InfoTableTimeout = CurTime() + 2.0 + end +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 == "LK1" and range > 0 then + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["lk5_on"][1] = 440-Lerp(speed/0.1,0,330) + return "lk5_on",location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "RVT" then + return range > 0 and "rvt_on" or "rvt_off",location,1,pitch + end + if soundid == "K6" then + return range > 0 and "k6_on" or nil,location,1,pitch + end + if soundid == "RV2" then + return range > 0 and "r1_5_on" or "r1_5_off",location,1,pitch + end + if soundid == "RPB" then + return range > 0 and "rpb_on" or "rpb_off",location,1,pitch + end + if soundid == "KD" then + return range > 0 and "kd_on" or "kd_off",location,1,pitch + end + if soundid == "KK" then + return range > 0 and "kk_on" or "kk_off",location,1,pitch--0.8 + end + if soundid == "K25" then + return range > 0 and "k25_on" or "k25_off",location,1,pitch + end + if soundid == "RO" then + return range > 0 and "ro_on" or "ro_off",location,1,0.8 + end + if soundid == "Rp8" then + return range > 0 and "rp8_on" or "rp8_off",location,1,pitch + end + if soundid == "ROT" then + return range > 0 and "rot_on" or "rot_off",location,1,pitch + end + if soundid == "AVU" then + return range > 0 and "avu_on" or "avu_off",location,1,0.9 + end + if soundid == "brake" then + self:PlayOnce("brake_f",location,range,pitch) + self:PlayOnce("brake_b",location,range,pitch) + return + end + if soundid == "UAVAC" then + return "uava_reset",location,range,pitch + end + end + return soundid,location,range,pitch +end + + +local dist = { + Back1 = 550, + AVMain = 550, + AV1 = 550, + AV2 = 550, + Battery = 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() diff --git a/lua/entities/gmod_subway_em508/init.lua b/lua/entities/gmod_subway_em508/init.lua new file mode 100644 index 0000000..6c4302c --- /dev/null +++ b/lua/entities/gmod_subway_em508/init.lua @@ -0,0 +1,559 @@ +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","RST", "50V", "KU8","KU10","KU10R","KU9","KU2","KU1","KU1","KU11","KU4","KU5","UV1","KU6","KU7","KU6K","KU7K","KU14","KU15","UV1","KU16", + "PanelLamp","OtklAVU","KRR","HPass", + "R_ASNPMenu","R_ASNPUp","R_ASNPDown","R_ASNPOn", + "RRIEnable","RRIAmplifier", + "DriverValveBLDisconnect","DriverValveTLDisconnect","EmergencyBrakeValve", "UKSDisconnect", + "GV", + "R_Program1","R_Program1H","R_Program2H","UAVA","UAVAC", +} +ENT.SyncFunctions = { + "" +} + +function ENT:Initialize() + + self.Plombs = { + --RST = true, + Init = true, + OtklAVU = true, + UKSDisconnect = 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,-38.2,-31.5),Angle(0,0,0)) + self.InstructorsSeat = self:CreateSeat("instructor",Vector(430,40,-48+6+2.5),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 + self.FrontCouple.EKKDisconnected = true + + -- 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_EQUAL] = {"R_Program1Set",helper="R_Program1HSet"}, + [KEY_MINUS] = {helper="R_Program2HSet"}, + + [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_N] = "UV1Set", + + [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_PAD_DIVIDE] = "KU14Set", + + [KEY_BACKSPACE] = {"EmergencyBrake",helper="EmergencyBrakeValveToggle"}, + + [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_8] = "KVWrenchKRU", + [KEY_9] = "KVWrenchKV9", + [KEY_0] = "KVWrenchKV", + [KEY_6] = "KVSetT1A", + + [KEY_PAD_ENTER] = "KVWrenchNone", + }, + [KEY_LALT] = { + [KEY_V] = "KU2Toggle", + [KEY_UP] = "ANNUp", + [KEY_DOWN] = "ANNDown", + [KEY_LEFT] = "ANNLeft", + [KEY_RIGHT] = "ANNRight", + }, + } + 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(462, -30, -62), Radius = 8, + }, + { + ID = "FrontTrainLineIsolationToggle", + Pos = Vector(462, 30, -62), Radius = 8, + }, + { + ID = "RearBrakeLineIsolationToggle", + Pos = Vector(-468, 30, -62), Radius = 8, + }, + { + ID = "RearTrainLineIsolationToggle", + Pos = Vector(-468, -30, -62), Radius = 8, + }, + { + ID = "FrontDoor", + Pos = Vector(462,32,-10), Radius = 12, + }, + { + ID = "CabinDoor", + Pos = Vector(462,58,-10), Radius = 10, + }, + { + ID = "CabinDoor", + Pos = Vector(462,58,-30), Radius = 10, + }, + { + ID = "CabinDoor", + Pos = Vector(395,65,-10), Radius = 16, + }, + { + ID = "PassengerDoor", + Pos = Vector(397,35,8), Radius = 16, + }, + { + ID = "RearDoor", + Pos = Vector(-457,-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:TrainSpawnerUpdate() + if self:GetNW2Int("AnnType",1) == 1 then + self.Announcer:TriggerInput("Reset","AnnouncementsRRI") + self.Electric:TriggerInput("RRI",1) + + self.RRI:TriggerInput("Disable",0) + self.ASNP:TriggerInput("Disable",1) + self.IGLA_CBKI:TriggerInput("Disable",1) + elseif self:GetNW2Int("AnnType",1) == 2 then + self.Announcer:TriggerInput("Reset","AnnouncementsASNP") + self.Electric:TriggerInput("RRI",0) + + self.RRI:TriggerInput("Disable",1) + self.ASNP:TriggerInput("Disable",0) + self.IGLA_CBKI:TriggerInput("Disable",0) + end + 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 Panel = self.Panel + local Pneumatic = self.Pneumatic + + local RetVal = self.BaseClass.Think(self) + self:SetPackedBool("PanelLights",self.PanelLamp.Value > 0.5) + + self:SetPackedBool("RedLight",Panel.RedLights>0) + self:SetPackedBool("Headlights1",Panel.Headlights1 > 0) + self:SetPackedBool("Headlights2",Panel.Headlights2 > 0) + + 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) + + -- 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) + + -- Red RP + 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:SetPackedBool("V1",Panel.V1 > 0) + self:SetPackedBool("UKS",Panel.UKSb == 0 and Panel.UKS > 0 or Panel.UKSb > 0 and CurTime()%0.4>0.2) + self.TrueBrakeAngle = self.TrueBrakeAngle or 0 + if self.ManualBrake < 0.001 and self.ManualBrake > self.TrueBrakeAngle then self.TrueBrakeAngle = self.ManualBrake end + if self.ManualBrake > 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:SetPackedBool("VPR",Panel.VPR > 0) + self:SetPackedBool("Compressor",Pneumatic.Compressor == 1.0) + self:SetPackedBool("RK",(self.RheostatController.Velocity ~= 0.0)) + self:SetPackedBool("AVU",Panel.AVU > 0.5) + self:SetPackedBool("Ring",Panel.Ring > 0.5) + + self:SetPackedBool("RearDoor",self.RearDoor) + self:SetPackedBool("FrontDoor",self.FrontDoor) + self:SetPackedBool("PassengerDoor",self.PassengerDoor) + self:SetPackedBool("CabinDoor",self.CabinDoor) + + self:SetPackedBool("RRIOn",self.RRI_VV.Power>0) + self:SetPackedRatio("RRIRewind",self.RRIRewind.Value/2) + self:SetPackedBool("AnnPlay",Panel.AnnouncerPlaying > 0) + --KRR + --self:SetPackedBool("KRR",self.KRR.Value > 0.5) + --print(self.LK1.Value,self.LK2.Value,self.LK3.Value,self.LK4.Value,self.RheostatController.Position,self.PositionSwitch.Position,self.KSH1.Value,self.KSH2.Value) + --print(self.PositionSwitch.SelectedPosition,self.RheostatController.SelectedPosition)--self.Engines.E13/2,self.Engines.RotationRate) + -- Feed packed floats + self:SetNW2Int("WrenchMode",self.KVWrenchMode) + self:SetPackedRatio("CranePosition", Pneumatic.DriverValvePosition/7) + self:SetPackedRatio("ControllerPosition", (self.KV.ControllerPosition+3)/7) + self:SetPackedRatio("ReverserPosition", 1-(self.KV.ReverserPosition+1)/2) + self:SetPackedRatio("KRUPosition", self.KRU.Position/3) + self:SetPackedBool("RCUPosition", self.KV.RCU > 0) + self:SetPackedRatio("BLPressure", Pneumatic.ReservoirPressure/12) + self:SetPackedRatio("TLPressure", Pneumatic.TrainLinePressure/12) + 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:SetPackedBool("EmergencyBrakeValve",self.EmergencyBrakeValve.Value > 0) + + -- Update ARS system (no ars on E) +-- self:SetPackedRatio(3, self.ALS_ARS.Speed/100.0) + 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() + + -- Temporary hacks + --self:SetNW2Float("V",self.Speed) + --self:SetNW2Float("A",self.Acceleration) + + 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 + if button:sub(1,3) == "ANN" then + local ID = button:sub(4,-1) + if self:GetNW2Int("AnnType",1) == 1 then + self.RRI:TriggerInput(ID,1) + elseif ID == "Up" then + self.R_ASNPUp:TriggerInput("Set",1) + elseif ID == "Down" then + self.R_ASNPDown:TriggerInput("Set",1) + elseif ID == "Right" then + self.R_ASNPMenu:TriggerInput("Set",1) + end + 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 == "ParkingBrakeLeft" then + self.ManualBrake = math.max(0.0,self.ManualBrake - 0.05) + if self.ManualBrake == 0.0 then return end + --print(self.ManualBrake) + end + if button == "ParkingBrakeRight" then + self.ManualBrake = math.min(1.0,self.ManualBrake + 0.05) + if self.ManualBrake == 1.0 then return end + --print(self.ManualBrake) + 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 + + + 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 and self.KRU.Position == 0 then + if self.KVWrenchMode == 2 then + self:PlayOnce("kru_out","cabin",0.7) + else + self:PlayOnce("revers_out","cabin",0.7) + end + self.KVWrenchMode = 0 + self.KV:TriggerInput("Enabled",0) + self.KRU:TriggerInput("Enabled",0) + end + end + if button == "KVWrenchKRU" then + if self.KVWrenchMode == 0 then + self:PlayOnce("kru_in","cabin",0.7) + self.KVWrenchMode = 2 + self.KRU:TriggerInput("Enabled",1) + end + end + 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 + -- KRU + if (self.KVWrenchMode == 2) and (button == "KVReverserUp") then self.KRU:TriggerInput("Up",1) end + if (self.KVWrenchMode == 2) and (button == "KVReverserDown") then self.KRU:TriggerInput("Down",1) end + if (self.KVWrenchMode == 2) and (button == "KVSetX1B") then self.KRU:TriggerInput("SetX1",1) end + if (self.KVWrenchMode == 2) and (button == "KVSetX2") then self.KRU:TriggerInput("SetX2",1) end + if (self.KVWrenchMode == 2) and (button == "KVSet0") then self.KRU:TriggerInput("Set0",1) end + if button == "KU6" and not self.KU7Pressed and self.KU7.Value == 0 then self.KU6K:TriggerInput("Open",1) end + if button == "KU7" and not self.KU6Pressed and self.KU6.Value == 0 then self.KU6K:TriggerInput("Close",1) 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) + 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 + 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:sub(1,3) == "ANN" then + local ID = button:sub(4,-1) + if self:GetNW2Int("TrainType",1) == 1 then + self.RRI:TriggerInput(ID,0) + elseif ID == "Up" then + self.R_ASNPUp:TriggerInput("Set",0) + elseif ID == "Down" then + self.R_ASNPDown:TriggerInput("Set",0) + elseif ID == "Right" then + self.R_ASNPMenu:TriggerInput("Set",0) + end + return + 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..3985b1c --- /dev/null +++ b/lua/entities/gmod_subway_em508/shared.lua @@ -0,0 +1,681 @@ +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 + +-- 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 + +ENT.AnnouncerPositions = { + {Vector(420,-38.2 ,35),80,0.4}, + {Vector(-3,-60, 62),300,0.3}, + {Vector(-3,60 ,62),300,0.3}, +} + +ENT.MirrorCams = { + Vector(441,72,8),Angle(1,180,0),15, + Vector(441,-72,8),Angle(1,180,0),15, +} + +ENT.Cameras = { + {Vector(407+8.5+15,32,16) ,Angle(0,180,0),"Train.703.Breakers1"}, + {Vector(407+8.5+13,48,21) ,Angle(0,180,0),"Train.703.Breakers2"}, + {Vector(407+8.5+28,48,16) ,Angle(0,40,0),"Train.Common.HelpersPanel"}, + {Vector(407+8.5+11,37,5) ,Angle(30,0,0),"Train.703.Parking"}, + {Vector(407.5+45,-38,36),Angle(10,-5,0),"Train.Common.ASNP","ASNP"}, + {Vector(407.5+40,-50.3,12.7),Angle(0,-30,0),"Train.Common.IGLA","IGLAButtons"}, + {Vector(407+8.5+08,-36,15),Angle(35,180,0),"Train.Common.RRI","RRI"}, + {Vector(407+8.5+62,40,2) ,Angle(20,180,0),"Train.Common.RouteNumber"}, + {Vector(407+8.5+70,2,6) ,Angle(20,180,0),"Train.Common.LastStation"}, + {Vector(450+8+6,0,26),Angle(60,0,0),"Train.Common.CouplerCamera"}, +} +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/717/compressor/compressor_717_start2.wav","subway_trains/717/compressor/compressor_717_loop2.wav", "subway_trains/717/compressor/compressor_717_stop2.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_703_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_40") + -- Контроллер резервного ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (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_508_Panel") + -- Everything else + self:LoadSystem("Battery") + self:LoadSystem("Horn") + + self:LoadSystem("Announcer","81_71_Announcer", "AnnouncementsASNP") + self:LoadSystem("ASNP","81_71_ASNP") + self:LoadSystem("ASNP_VV","81_71_ASNP_VV") + self:LoadSystem("RRI","81_71_RRI") + self:LoadSystem("RRI_VV","81_71_RRI_VV") + + self:LoadSystem("IGLA_CBKI","IGLA_CBKI2") + + self:LoadSystem("RouteNumber","81_71_RouteNumber",2) + self:LoadSystem("LastStation","81_71_LastStation","710","door1") + self:LoadSystem("IGLA_PCBK") + + self:LoadSystem("ALSCoil") + self:LoadSystem("UKS","81_508_UKS") +end +function ENT:PostInitializeSystems() + self.Electric:TriggerInput("Type",self.Electric.Em) +end + +ENT.SubwayTrain = { + Type = "E", + Name = "81-508", + WagType = 0, + ARS = { + NoEPK = true, + }, + ALS = { + HaveAutostop = true, + }, + EKKType = 703, +} +ENT.NumberRanges = {{3001,3100},{3301,3400},{3501,3699},{4701,4750},{4851,4900}} + +ENT.Spawner = { + model = { + "models/metrostroi_train/81-703/81-703.mdl", + "models/metrostroi_train/81-703/703_cabine.mdl", + "models/metrostroi_train/81-703/703_salon.mdl", + {"models/metrostroi_train/81-703/81-703_Underwagon.mdl",pos=Vector(-23.5,0,-191)}, + {"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", + func = function(ent,i,maxi) + if ent:GetClass() == "gmod_subway_em508" then + ent.VU:TriggerInput("Set",1) + ent.UAVA:TriggerInput("Set",0) + ent.Plombs.VU = nil + ent.Plombs.UAVA = true + else + ent.VU:TriggerInput("Set",0) + ent.UAVA:TriggerInput("Set",1) + ent.Plombs.VU = true + ent.Plombs.UAVA = nil + end + end, + Metrostroi.Skins.GetTable("Texture","Texture",false,"train"), + Metrostroi.Skins.GetTable("PassTexture","PassTexture",false,"pass"), + Metrostroi.Skins.GetTable("CabTexture","CabTexture",false,"cab"), + {"Announcer","Spawner.710.Announcer","List",function() + local Announcer = {} + if Metrostroi.AnnouncementsRRI then + table.insert(Announcer,Metrostroi.GetPhrase("Spawner.710.RRI")) + end + for k,v in pairs(Metrostroi.AnnouncementsASNP or {}) do if not v.asnp then Announcer[k+1] = v.name or k end end + return Announcer + end, nil,function(ent,val,rot,i,wagnum,rclk) + if Metrostroi.AnnouncementsRRI and val==1 then + ent:SetNW2Int("AnnType",1) + ent:SetNW2Int("Announcer",1) + else + ent:SetNW2Int("Announcer",val-1) + ent:SetNW2Int("AnnType",2) + end + end}, + {"SpawnMode","Spawner.Common.SpawnMode","List",{"Spawner.Common.SpawnMode.Full","Spawner.Common.SpawnMode.Deadlock","Spawner.Common.SpawnMode.NightDeadlock","Spawner.Common.SpawnMode.Depot"}, nil,function(ent,val,rot,i,wagnum,rclk) + if rclk then return end + if ent._SpawnerStarted~=val then + ent.VB:TriggerInput("Set",val<=2 and 1 or 0) + ent.AV:TriggerInput("Set",val<=2 and 1 or 0) + if ent.RRI then + local first = i==1 or _LastSpawner~=CurTime() + + ent.VU2:TriggerInput("Set",(val<=2 and first) and 1 or 0) + --ent.VR:TriggerInput("Set",val<=2 and 1 or 0) + ent.RRIEnable:TriggerInput("Set",val<=2 and 1 or 0) + ent.RRIAmplifier:TriggerInput("Set",val<=2 and 1 or 0) + ent.R_ASNPOn:TriggerInput("Set",val<=2 and 1 or 0) + ent.KU1:TriggerInput("Set",(val==1 and first) and 1 or 0) + _LastSpawner=CurTime() + ent.CabinDoor = val==4 and first + ent.PassengerDoor = val==4 + ent.RearDoor = val==4 + else + ent.FrontDoor = val==4 + ent.RearDoor = val==4 + end + ent.GV:TriggerInput("Set",val<4 and 1 or 0) + ent._SpawnerStarted = val + end + if val==1 then ent.KO:TriggerInput("Close",1) else ent.KO:TriggerInput("Open",1) end + ent.Pneumatic.TrainLinePressure = val==3 and math.random()*4 or val==2 and 4.5+math.random()*3 or 7.6+math.random()*0.6 + if val==4 then ent.Pneumatic.BrakeLinePressure = 5.2 end + end}, +} diff --git a/lua/entities/gmod_subway_em508t/cl_init.lua b/lua/entities/gmod_subway_em508t/cl_init.lua new file mode 100644 index 0000000..e3ae78a --- /dev/null +++ b/lua/entities/gmod_subway_em508t/cl_init.lua @@ -0,0 +1,1321 @@ +-------------------------------------------------------------------------------- +-- 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 = {} + +-- Main panel +ENT.ButtonMap["Main"] = { + pos = Vector(451.5+6.6,-31.78,-10.01), + ang = Angle(0,-88,90-20), + width = 240, + height = 200, + scale = 0.0588, + hideseat = 0.2, + + buttons = { + ----Лампы + {ID = "!RedRP", x=70+33*0,y=22, radius=20, tooltip="", model = { + sprite = {bright=0.2,size=0.25,scale=0.07,color=Color(255,93,0),z=7,lamp="light_rRP",hidden="ezh3_lrp"} + }}, + {ID = "!GreenRP",x=70+33*1,y=22, radius=20, tooltip="", model = { + sprite = {bright=0.2,size=0.25,scale=0.07,color=Color(8, 255, 170),z=7,lamp="Green_rp",hidden="ezh3_lrpgreen"} + }}, + {ID = "!SD", x=70+33*3,y=22, radius=20, tooltip="", model = { + sprite = {bright=0.2,size=0.25,scale=0.07,color=Color(53, 147, 255),z=7,lamp="light_SD",hidden="ezh3_lsd"} + }}, + ----Кнопки + + { ID = "KU12Set", x=31, y=90, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-39, + var="KU12",speed=9, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + { ID = "KU11Set", x=31+45*1, y=90, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-39, + var="KU11",speed=9, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + { ID = "KU9Set", x=31+45*2, y=90, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-39, + var="KU9",speed=9, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + { ID = "KU8Set", x=31+45*3, y=90, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-39, + var="KU8",speed=9, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + { ID = "V2Toggle", x=31+45*4, y=90, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-39, + var="V2",speed=9, + 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"}, + }}, + { ID = "V1Toggle", x=31+45*4, y=90+65, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-45, + var="V1",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 = "V4Set", x=31, y=90+65, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-45, + var="V4",speed=9, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + { ID = "V5Set", x=31+45, y=90+65, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-45, + var="V5",speed=9, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + + { ID = "KU15Set", x=31+45*3, y=90+65, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-45, + var="KU15",speed=9, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "KU7Set", x=28+45*4, y=35, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", z = -3, + var="KU7",speed=16,vmin=1,vmax=0, + 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 = "V10Set", x=31, y=35, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", z = -3, + var="V10",speed=16,vmin=1,vmax=0, + 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), + }}, + + } +} + +--VU Panel +ENT.ButtonMap["VU"] = { + pos = Vector(456+7.6,-16.15,20.0), + ang = Angle(0,270,90), + width = 120, + height = 120, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "VUToggle", x=60, y=60, radius=60, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.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 = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} + +ENT.ButtonMap["VU14"] = { + 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 = "VU14Toggle", x=0, y=110, w=100, h=110, tooltip="", model = { + model = "models/metrostroi_train/equipment/vu22_black.mdl", z=20, ang = 180, + var="VU14",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,37.8,36), + ang = Angle(0,90,90), + width = 335, + height = 270, + scale = 0.0625, + hide = 0.8, + + buttons = { + {ID = "AVToggle", x=0, y=0, w=300, h=380, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_av8r.mdl", 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.24+1,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(452.5+1.6,59.5,22.44), + ang = Angle(0,-53,90), + width = 60, + height = 235, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "V6Set", x=30, y=149, radius=30, tooltip="", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=-5, color = Color(255,255,255), + var="V6",speed=12, max=0.5, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "V3Toggle", x=30, y=40, radius=30, tooltip="", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=-5, color = Color(255,255,255), + var="V3",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"}, + }}, + } +} + + +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 = "!EnginesCurrent", x=0,y=0,w=66,h=60,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesCurrent"),ent:GetPackedRatio("EnginesCurrent")*1000-500) end}, + {ID = "!EnginesVoltage", x=0,y=69,w=66,h=60,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesVoltage"),ent:GetPackedRatio("EnginesVoltage")*1000) 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, + buttons = { + {ID = "AirDistributorDisconnectToggle",x=0, y=0, w= 170,h = 260, tooltip="",var="AD",states={"Train.Buttons.On","Train.Buttons.Off"}}, + } +} +ENT.ClientProps["tab"] = { + model = "models/metrostroi_train/Equipment/tab.mdl", + pos = Vector(16,0,-0), + ang = Angle(0,0,0), + skin = 4, + hide = 2, +} + + +ENT.ButtonMap["FrontDoor"] = { + pos = Vector(468,16,43.4), + ang = Angle(0,-90,90), + width = 642, + height = 1780, + 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,64,43.4), + ang = Angle(0,0,90), + width = 642, + height = 1780, + scale = 0.1/2, + buttons = { + {ID = "CabinDoor",x=0,y=0,w=642,h=2000, 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(400,-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(400,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(448.62+7.87,-52.46,-4.1), + ang = Angle(0,-133,0), + hideseat = 0.2, +} +ENT.ClientProps["controller"] = { + model = "models/metrostroi_train/81-502/kv_black.mdl", + pos = Vector(451.36+6.6,-22.73,-5.8), + ang = Angle(0,180+15,0), + hideseat = 0.2, +} + +ENT.ClientProps["reverser"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = ENT.ClientProps["controller"].pos+Vector(0.2,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.3,-0.1,-1.7), + 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(449.118378+7.6,33.493385+2,-14.713276), + ang = Angle(-90.000000,7,0.000000), + 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["ezh3_lsd"] = { + model = "models/metrostroi_train/81-710/em508t_lsd.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat = 1.0, +} +ENT.ClientProps["ezh3_lrp"] = { + model = "models/metrostroi_train/81-710/em508t_lrpred.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat = 1.0, +} +ENT.ClientProps["ezh3_lrpgreen"] = { + model = "models/metrostroi_train/81-710/em508t_lrpgreen.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat = 1.0, +} +-------------------------------------------------------------------------------- +ENT.ClientProps["salon"] = { + model = "models/metrostroi_train/81-710/508t_salon.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2.0, +} +ENT.ClientProps["salon2"] = { + model = "models/metrostroi_train/81-703/81-703_Underwagon.mdl", + pos = Vector(-23.5,0,-191), + 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,150,150), + hide = 2, +} +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,150,150), + hide = 2, +} +ENT.ClientProps["Lamps_half1"] = { + model = "models/metrostroi_train/81-502/lights_group1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["Lamps_half2"] = { + model = "models/metrostroi_train/81-502/lights_group2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["Lamps_cab1"] = { + model = "models/metrostroi_train/81-502/cabin_lamp_light.mdl", + pos = Vector(0,-0.05,0), + 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.6), + ang = Angle(0,-90,0), + hide = 2, +} +ENT.ClientProps["door2"] = { + model = "models/metrostroi_train/81-710/81-710_door_tor.mdl", + pos = Vector(-469.8,16.53,-8.2), + 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.38), + 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.3,1,-191), + ang = Angle(0,0,0), + nohide=true, +} + +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, + } + ENT.ClientProps["TrainNumberR"..i] = { + model = "models/metrostroi_train/common/bort_numbers.mdl", + pos = Vector(295-i*6.6-4*6.6/2,-66.2,-26), + ang = Angle(0,0,0), + skin=0, + hide = 1.5, + callback = function(ent) + ent.WagonNumber = false + end, + } +end +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,220,180), brightness = 3, distance = 200}, + [10] = { "dynamiclight", Vector(-150, 0, -5), Angle(0,0,0), Color(255,220,180), brightness = 3, distance = 200}, + [11] = { "dynamiclight", Vector( 200, 0, -5), Angle(0,0,0), Color(255,220,180), brightness = 4, distance = 260}, + [12] = { "dynamiclight", Vector( 0, 0, -5), Angle(0,0,0), Color(255,220,180), brightness = 4, distance = 260}, + [13] = { "dynamiclight", Vector(-260, 0, -5), Angle(0,0,0), Color(255,220,180), 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 = "salon"}, + + [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.EmergencyValveEPKRamp = 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 + self.Number = 0 + 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:SetLightPower(30,HL1 > 0, HL1) + self:SetLightPower(31,HL1 > 0, HL1) + self:SetLightPower(32,HL2 > 0, HL2) + self:ShowHideSmooth("WhiteLights",HL1) + self:ShowHideSmooth("DistantLights",HL2) + self:SetLightPower("Lamps_pult",HL1>0,HL1) + self:ShowHideSmooth("Lamps_pult",HL1) + self:SetLightPower(22,HL1>0,HL1) + + 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("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) + + self:ShowHideSmooth("ezh3_lrpgreen",self:Animate("Green_rp",self:GetPackedBool("GRP") and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("ezh3_lrp",self:Animate("light_rRP",self:GetPackedRatio("RRP"),0,1,5,false)) + self:ShowHideSmooth("ezh3_lsd",self:Animate("light_SD",self:GetPackedBool("SD") and 1 or 0,0,1,5,false)) + ---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.8+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) + + if button == "PrevSign" then + self.InfoTableTimeout = CurTime() + 2.0 + end + if button == "NextSign" then + self.InfoTableTimeout = CurTime() + 2.0 + end + + if button and button:sub(1,3) == "Num" then + self.InfoTableTimeout = CurTime() + 2.0 + end +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 == "RVT" then + return range > 0 and "rvt_on" or "rvt_off",location,1,pitch + end + if soundid == "R1_5" then + return range > 0 and "r1_5_on" or "r1_5_off",location,1,pitch + end + if soundid == "RPB" then + return range > 0 and "rpb_on" or "rpb_off",location,1,pitch + end + if soundid == "KD" then + return range > 0 and "kd_on" or "kd_off",location,1,pitch + end + if soundid == "K25" then + return range > 0 and "k25_on" or "k25_off",location,1,pitch + end + if soundid == "RO" then + return range > 0 and "ro_on" or nil,location,1,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 + +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_em508t/init.lua b/lua/entities/gmod_subway_em508t/init.lua new file mode 100644 index 0000000..bebf307 --- /dev/null +++ b/lua/entities/gmod_subway_em508t/init.lua @@ -0,0 +1,463 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +ENT.BogeyDistance = 650 -- Needed for gm trainspawner + +--"DURASelectMain","DURASelectAlternate","DURAToggleChannel","DURAPowerToggle", +ENT.SyncTable = { + "KU12","KU11","KU9","KU8","V2","V1","V4","V5","KU15","KU7","V10", + "VU","AV","VB", + "VU3","VU2","VU1","VU14", + "V6", "V3", + "DriverValveBLDisconnect","DriverValveTLDisconnect", + "RearBrakeLineIsolation","RearTrainLineIsolation", + "FrontBrakeLineIsolation","FrontTrainLineIsolation", + "GV", +} + +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+3.5,0,-75),Angle(0,0,0),true,"722") + self.RearCouple = self:CreateCouple(Vector(-421.5-3.5,0,-75),Angle(0,180,0),false,"717") + 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+4.5,1.0,-72),Angle(0,0,0),true,"702") + self.RearCouple = self:CreateCouple(Vector(-421+2+3.6-4.5,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] = {"KU12",helper="V6Set"}, + [KEY_D] = "KU7", + [KEY_V] = {"V2Toggle",helper="V3Toggle"}, + [KEY_L] = "HornEngage", + [KEY_PAD_1] = "PneumaticBrakeSet1", + [KEY_PAD_2] = "PneumaticBrakeSet2", + [KEY_PAD_3] = "PneumaticBrakeSet3", + [KEY_PAD_4] = "PneumaticBrakeSet4", + [KEY_PAD_5] = "PneumaticBrakeSet5", + + [KEY_SPACE] = "PBSet", + [KEY_BACKSPACE] = "EmergencyBrake", + + [KEY_PAD_ENTER] = "KVWrenchKV", + [KEY_PAD_0] = "DriverValveDisconnect", + [KEY_LSHIFT] = { + [KEY_W] = "KVUp_Unlocked", + + [KEY_1] = "V4Set", + [KEY_2] = "V3Set", + [KEY_4] = "KVSet0Fast", + [KEY_L] = "DriverValveDisconnect", + + [KEY_7] = "KVWrenchNone", + [KEY_8] = "KVWrenchKRU", + [KEY_9] = "KVWrenchKV9", + [KEY_0] = "KVWrenchKV", + [KEY_6] = "KVSetT1A", + + [KEY_PAD_ENTER] = "KVWrenchNone", + }, + + [KEY_LALT] = { + [KEY_V] = "V2Toggle", + }, + } + 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(-462, 30, -62), Radius = 8, + }, + { + ID = "RearTrainLineIsolationToggle", + Pos = Vector(-462, -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("Headlights1",Panel.Headlights1 > 0) + self:SetPackedBool("Headlights2",Panel.Headlights2 > 0) + + 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^1.2,0,1)) + self:SetPackedBool("GRP",Panel.GRP > 0) + self:SetPackedBool("SD",Panel.SD > 0) + self.TrueBrakeAngle = self.TrueBrakeAngle or 0 + if self.ManualBrake < 0.001 and self.ManualBrake > self.TrueBrakeAngle then self.TrueBrakeAngle = self.ManualBrake end + if self.ManualBrake > 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 = 22500+3000*(A < 0 and 1 or 0) + self.FrontBogey.Reversed = (self.Reverser.NZ > 0.5) + self.RearBogey.MotorForce = 22500+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("rcu_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 == "KU12" and self.V2.Value < 1 then self.KU12:TriggerInput("Close",1) end + if button == "KU7" and self.V2.Value < 1 then self.KU7:TriggerInput("Close",1) 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 == "KU12" and self.V2.Value < 1 then self.KU12:TriggerInput("Open",1) end + if button == "KU7" and self.V2.Value < 1 then self.KU7:TriggerInput("Open",1) 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_em508t/shared.lua b/lua/entities/gmod_subway_em508t/shared.lua new file mode 100644 index 0000000..d4bb40e --- /dev/null +++ b/lua/entities/gmod_subway_em508t/shared.lua @@ -0,0 +1,617 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.PrintName = "Em508T" +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" +ENT.SkinsType = "81-710" +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,0 or 180,0),90 or 15, + Vector(441,-72,15),Angle(1,0 or 180,0),90 or 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_motors"] = {loop=true,"subway_trains/common/junk/wind_background1.wav"} + self.SoundNames["rolling_motors2"] = {loop=true,"subway_trains/common/junk/wind_background1.wav"} + self.SoundPositions["rolling_motors"] = {250,1e12,Vector(200,0,0),0.33} + self.SoundPositions["rolling_motors2"] = {250,1e12,Vector(-250,0,0),0.33} + + 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"] = {480,1e12,Vector(0,0,0),0.90} + self.SoundPositions["rolling_medium2"] = {480,1e12,Vector(0,0,0),0.90} + self.SoundPositions["rolling_high2"] = {480,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["epv_on"] = "subway_trains/common/pneumatic/epv_on.mp3" + self.SoundNames["epv_off"] = "subway_trains/common/pneumatic/epv_off.mp3" + self.SoundPositions["epv_on"] = {100,1e9,Vector(437.2,-53.1,-32.0),1} + self.SoundPositions["epv_off"] = {100,1e9,Vector(437.2,-53.1,-32.0),1} + self.SoundPositions["epv_off"] = {60,1e9,Vector(437.2,-53.1,-32.0),1} + -- Релюшки + self.SoundNames["rpb_off"] = "subway_trains/717/relays/lsd_2.mp3" + self.SoundNames["rpb_on"] = "subway_trains/717/relays/relay_on.mp3" + self.SoundPositions["rpb_on"] = {100,1e9,Vector(400,25,-35),1} + self.SoundPositions["rpb_off"] = {100,1e9,Vector(400,25,-35),1} + self.SoundNames["rvt_on"] = "subway_trains/717/relays/new/rvt_on1.mp3" + self.SoundNames["rvt_off"] = "subway_trains/717/relays/new/rvt_off3.mp3" + self.SoundPositions["rvt_on"] = {100,1e9,Vector(400,25,-35),1} + self.SoundPositions["rvt_off"] = {100,1e9,Vector(400,25,-35),1} + self.SoundNames["r1_5_on"] = "subway_trains/717/relays/new/k6_on1.mp3" + self.SoundNames["r1_5_off"] = "subway_trains/717/relays/new/r1_5_off.mp3" + self.SoundPositions["r1_5_on"] = {100,1e9,Vector(400,25,-35),1} + self.SoundPositions["r1_5_off"] = {100,1e9,Vector(400,25,-35),1} + + self.SoundNames["kd_off"] = "subway_trains/717/relays/lsd_2.mp3" + self.SoundNames["kd_on"] = "subway_trains/717/relays/new/kd_on.mp3" + self.SoundPositions["kd_on"] = {100,1e9,Vector(400,25,-35),1} + self.SoundPositions["kd_off"] = {100,1e9,Vector(400,25,-35),1} + + self.SoundNames["k25_on"] = "subway_trains/717/relays/new/k6_on1.mp3" + self.SoundNames["k25_off"] = "subway_trains/717/relays/new/r1_5_off.mp3" + self.SoundPositions["k25_on"] = {120,1e9,Vector(400,25,-35),1} + self.SoundPositions["k25_off"] = {120,1e9,Vector(400,25,-35),1} + self.SoundNames["ro_on"] = "subway_trains/717/relays/ro_on.mp3" + self.SoundNames["ro_off"] = "subway_trains/717/relays/new/ro_off.mp3" + self.SoundPositions["ro_on"] = {140,1e9,Vector(400,-40,55),1} + self.SoundPositions["ro_off"] = {140,1e9,Vector(400,-40,55),1} + + self.SoundNames["avu_off"] = "subway_trains/common/pneumatic/ak11b_off.mp3" + self.SoundNames["avu_on"] = "subway_trains/common/pneumatic/ak11b_on.mp3" + self.SoundPositions["avu_on"] = {60,1e9, Vector(449+7.7,56.0,-10.24349),0.7} + self.SoundPositions["avu_off"] = self.SoundPositions["avu_on"] + --Подвагонка + 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/717/compressor/compressor_717_start2.wav","subway_trains/717/compressor/compressor_717_loop2.wav", "subway_trains/717/compressor/compressor_717_stop2.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(458.02,-22.13,-6.19)} + 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.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_in"] = {80,1e9,Vector(404.8,-23.5,-2.2)} + 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/kru2-3_1.mp3", + "subway_trains/717/kru/kru2-3_2.mp3", + "subway_trains/717/kru/kru2-3_3.mp3", + "subway_trains/717/kru/kru2-3_4.mp3", + } + self.SoundNames["kru_3_2"] = { + "subway_trains/717/kru/kru3-2_1.mp3", + "subway_trains/717/kru/kru3-2_2.mp3", + "subway_trains/717/kru/kru3-2_3.mp3", + "subway_trains/717/kru/kru3-2_4.mp3", + } + self.SoundPositions["kru_0_1"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_1_2"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_2_1"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_1_0"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_2_3"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_3_2"] = {80,1e9,Vector(452.3,-24.0,4.0)} + + self.SoundNames["kr_open"] = { + "subway_trains/717/cover/cover_open1.mp3", + "subway_trains/717/cover/cover_open2.mp3", + "subway_trains/717/cover/cover_open3.mp3", + } + self.SoundNames["kr_close"] = { + "subway_trains/717/cover/cover_close1.mp3", + "subway_trains/717/cover/cover_close2.mp3", + "subway_trains/717/cover/cover_close3.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["button4_off"] = { + "subway_trains/ezh3/switches/button_on1.mp3", + "subway_trains/ezh3/switches/button_on2.mp3", + } + self.SoundNames["button4_on"] = { + "subway_trains/717/switches/button4_on1.mp3", + "subway_trains/717/switches/button4_on2.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(449+7.7,56.0,-10.24349),0.6} + self.SoundNames["gv_f"] = self.SoundNames["ezh3_revers_0-b"] + self.SoundNames["gv_b"] = self.SoundNames["ezh3_revers_b-0"] + self.SoundPositions["gv_f"] = {80,1e2,Vector(120,62.0+0.0,-60),0.5} + self.SoundPositions["gv_b"] = self.SoundPositions["gv_f"] + + --Краны + 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(452, 0,-63),1} + self.SoundNames["rear_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["rear_isolation"] = {300,1e9,Vector(-456, 0,-63),1} + + self.SoundNames["crane013_brake2"] = {loop=true,"subway_trains/common/pneumatic/013_brake2.wav"} + self.SoundPositions["crane013_brake2"] = {80,1e9,Vector(456.49,-52.46,-4.1),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.49,-52.46,-4.1),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.49,-52.46,-4.1),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.49,-52.46,-4.1),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.49,-52.46,-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.49,-52.46,-70),0.45} + self.SoundNames["crane334_release"] = {loop=true,"subway_trains/common/pneumatic/334_release3.wav"} + self.SoundPositions["crane334_release"] = {80,1e9,Vector(456.49,-52.46,-4.1),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.49,-52.46,-4.1),0.2} + + self.SoundNames["valve_brake"] = {loop=true,"subway_trains/common/pneumatic/334_brake.wav"} + self.SoundPositions["valve_brake"] = {400,1e9,Vector(464.40,24.4,-50),0.85} + + --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["epk_brake"] = {loop=true,"subway_trains/common/pneumatic/334_brake.wav"} + self.SoundPositions["epk_brake"] = {200,1e9,Vector(437.2,-63.1,-50.0),0.85} + + + 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["kv66_0_t1"] = {"subway_trains/ezh/kv40_2/0_t1.mp3"} + self.SoundNames["kv66_t1_0"] = {"subway_trains/ezh/kv40_2/t1_0.mp3"} + self.SoundNames["kv66_t1_t1a"] = {"subway_trains/ezh/kv40_2/t1_t1a.mp3"} + self.SoundNames["kv66_t1a_t1"] = {"subway_trains/ezh/kv40_2/t1a_t1.mp3"} + self.SoundNames["kv66_t1a_t2"] = {"subway_trains/ezh/kv40_2/t1a_t2.mp3"} + self.SoundNames["kv66_t2_t1a"] = {"subway_trains/ezh/kv40_2/t2_t1a.mp3"} + self.SoundNames["kv66_0_x1"] = {"subway_trains/ezh/kv40_2/0_x1.mp3"} + self.SoundNames["kv66_x1_0"] = {"subway_trains/ezh/kv40_2/x1_0.mp3"} + self.SoundNames["kv66_x1_x2"] = {"subway_trains/ezh/kv40_2/x1_x2.mp3"} + self.SoundNames["kv66_x2_x1"] = {"subway_trains/ezh/kv40_2/x2_x1.mp3"} + self.SoundNames["kv66_x2_x3"] = {"subway_trains/ezh/kv40_2/x2_x3.mp3"} + self.SoundNames["kv66_x3_x2"] = {"subway_trains/ezh/kv40_2/x3_x2.mp3"} + self.SoundPositions["kv70_fix_on"] = {100,1e9,Vector(457.96,-22.73,-5.8),1} + self.SoundPositions["kv70_fix_off"] = {100,1e9,Vector(457.96,-22.73,-5.8),1} + self.SoundPositions["kv66_0_t1"] = {100,1e9,Vector(457.96,-22.73,-5.8),1} + self.SoundPositions["kv66_t1_0_fix"] = {100,1e9,Vector(457.96,-22.73,-5.8),1} + self.SoundPositions["kv66_t1_0"] = {100,1e9,Vector(457.96,-22.73,-5.8),1} + self.SoundPositions["kv66_t1_t1a"] = {100,1e9,Vector(457.96,-22.73,-5.8),1} + self.SoundPositions["kv66_t1a_t1"] = {100,1e9,Vector(457.96,-22.73,-5.8),1} + self.SoundPositions["kv66_t1a_t2"] = {100,1e9,Vector(457.96,-22.73,-5.8),1} + self.SoundPositions["kv66_t2_t1a"] = {100,1e9,Vector(457.96,-22.73,-5.8),1} + self.SoundPositions["kv66_0_x1"] = {100,1e9,Vector(457.96,-22.73,-5.8),1} + self.SoundPositions["kv66_x1_0"] = {100,1e9,Vector(457.96,-22.73,-5.8),1} + self.SoundPositions["kv66_x1_x2"] = {100,1e9,Vector(457.96,-22.73,-5.8),1} + self.SoundPositions["kv66_x2_x1"] = {100,1e9,Vector(457.96,-22.73,-5.8),1} + self.SoundPositions["kv66_x2_x3"] = {100,1e9,Vector(457.96,-22.73,-5.8),1} + self.SoundPositions["kv66_x3_x2"] = {100,1e9,Vector(457.96,-22.73,-5.8),1} + + + self.SoundNames["samm_revers_in"] = {"subway_trains/ezh3/rc_ars/reversor_rc_in.mp3"} + self.SoundNames["samm_revers_out"] = {"subway_trains/ezh3/rc_ars/reversor_rc_in.mp3"} + self.SoundNames["samm_0-1"] = {"subway_trains/ezh3/rc_ars/0-1.mp3"} + self.SoundNames["samm_0-2"] = {"subway_trains/ezh3/rc_ars/0-2.mp3"} + self.SoundNames["samm_2-0"] = {"subway_trains/ezh3/rc_ars/2-0.mp3"} + self.SoundPositions["samm_0-2"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_2-0"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_0-1"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_revers_out"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_revers_in"] = {60,1e9,Vector(442.2-6,-50,-10)} + + self.SoundNames["ring"] = {loop=0.15,"subway_trains/717/ring/ring_start.wav","subway_trains/717/ring/ring_loop.wav","subway_trains/717/ring/ring_end.wav"} + self.SoundPositions["ring"] = {100,1e9,Vector(445,-55,-15),0.2} + + 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(449.118378+7.6,33.493385,-14.713276),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"} + + self.SoundNames["pneumo_TL_open"] = { + "subway_trains/common/334/334_open.mp3", + } + 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["disconnect_valve"] = "subway_trains/common/switches/pneumo_disconnect_switch.mp3" + + self.SoundNames["pneumo_idle"] = { + "subway_trains/ezh3/pneumatic/idle.wav", + } + self.SoundPositions["pneumo_idle"] = {150,1e9,Vector(438.50,-50,-40),1} + + 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(460.5,-54.3,12.67),0.3} + self.SoundPositions["igla_off"] = {50,1e9,Vector(460.5,-54.3,12.67),0.3} + self.SoundPositions["igla_start1"] = {50,1e9,Vector(460.5,-54.3,12.67),0.3} + self.SoundPositions["igla_start2"] = {50,1e9,Vector(460.5,-54.3,12.67),0.2} + + self.SoundNames["upps"] = {"subway_trains/common/other/upps/upps1.mp3","subway_trains/common/other/upps/upps2.mp3"} + self.SoundPositions["upps"] = {60,1e9,Vector(443,-64,4),0.5} + + 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","subway_trains/common/pnm/pnm_switch_off2.mp3"} + self.SoundNames["pnm_button1_on"] = { + "subway_trains/common/pnm/pnm_button_push.mp3", + "subway_trains/common/pnm/pnm_button_push2.mp3", + "subway_trains/common/pnm/pnm_button_push3.mp3", + } + + self.SoundNames["pnm_button2_on"] = { + "subway_trains/common/pnm/pnm_button_push4.mp3", + "subway_trains/common/pnm/pnm_button_push5.mp3", + "subway_trains/common/pnm/pnm_button_push6.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", + "subway_trains/common/pnm/pnm_button_release6.mp3", + } + + 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(450,-20,-55)} + + --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 + 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} + + self.SoundNames["rt300"] = {loop=true,"subway_trains/ezh3/rt300a_idle.wav"} + self.SoundPositions["rt300"] = {60,1e9,Vector(414.5,-17,47),0.01} + + 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 +end + +function ENT:InitializeSystems() + -- ЭлектроÑиÑтема Е (ÐРС) + self:LoadSystem("Electric","81_508T_Electric") + + -- Токоприёмник + self:LoadSystem("TR","TR_3B") + -- ЭлектротÑговые двигатели + self:LoadSystem("Engines","DK_116A") + + -- РезиÑторы Ð´Ð»Ñ Ñ€ÐµÐ¾Ñтата/пуÑковых Ñопротивлений + self:LoadSystem("KF_47A") + -- РезиÑторы Ð´Ð»Ñ Ð¾ÑÐ»Ð°Ð±Ð»ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð±ÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ + self:LoadSystem("KF_50A") + -- Ящик Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñ…Ñ€Ð°Ð½Ð¸Ñ‚ÐµÐ»Ñми + self:LoadSystem("YAP_57") + + -- РезиÑторы Ð´Ð»Ñ Ñ†ÐµÐ¿ÐµÐ¹ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + --self:LoadSystem("YAS_44V") + self:LoadSystem("Reverser","PR_722D") + -- РеоÑтатный контроллер Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑƒÑковыми ÑÐ¾Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð»ÐµÐ½Ð¸Ñ + self:LoadSystem("RheostatController","EKG_17B") + -- Групповой переключатель положений + self:LoadSystem("PositionSwitch","EKG_18B") + -- Кулачковый контроллер + self:LoadSystem("KV","KV_66") + + + -- Ящики Ñ Ñ€ÐµÐ»Ðµ и контакторами + self:LoadSystem("LK_755A") + self:LoadSystem("YAR_15A") + self:LoadSystem("YAR_27") + self:LoadSystem("YAK_37A") + self:LoadSystem("YAK_36") + self:LoadSystem("YAS_44V") + self:LoadSystem("YARD_2") + self:LoadSystem("PR_124B") + + -- ПневмоÑиÑтема 81-703 + self:LoadSystem("Pneumatic","81_703_Pneumatic") + -- Панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð•Ð¶3 + self:LoadSystem("Panel","81_508T_Panel") + -- Everything else + self:LoadSystem("Battery") + self:LoadSystem("Horn") + + self:LoadSystem("Announcer","81_71_Announcer", "AnnouncementsASNP") + + self:LoadSystem("ALSCoil") + + self:LoadSystem("IGLA_PCBK") +end +function ENT:PostInitializeSystems() + self.YAR_27:TriggerInput("NoRKTT",1) +end + +ENT.SubwayTrain = { + Type = "E", + Name = "Em508T ", + WagType = 0, + ALS = { + HaveAutostop = false, + }, + EKKType = 710, +} +ENT.NumberRanges = {{5560,5999}} diff --git a/lua/entities/gmod_subway_ezh/cl_init.lua b/lua/entities/gmod_subway_ezh/cl_init.lua new file mode 100644 index 0000000..5e1ce78 --- /dev/null +++ b/lua/entities/gmod_subway_ezh/cl_init.lua @@ -0,0 +1,2380 @@ +-------------------------------------------------------------------------------- +-- 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.ButtonMap["Lamps1"] = { + pos = Vector(457.5,-30.9,-9.19), + ang = Angle(0,-90,8.5), + width = 315, + height = 120, + scale = 0.0588, + hideseat = 0.2, + + buttons = { + ----Лампы + {ID = "!AV", x=44.6,y=35.2, radius=20, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-707/ezh_lamp_red.mdl",z = -6, ang=Angle(0,-10,0), color=Color(200,255,255) , var="L_AV", + lcolor=Color(255,80,5),lx = -2,ly=-3,lz = 12,lbright=1.5,lfov=93,lfar=16,lnear=8,lshadows=0,lang=-Angle(0,0,0)}, + sprite = {bright=0.3,size=.25,scale=0.025,z=-8,color=Color(255,80,5)}, + }}, + {ID = "!SEQ", x=44.6+27.3,y=35.2, radius=20, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-707/ezh_lamp_green.mdl",z = -6, ang=Angle(0,-8.5,0), var="SEQ", + lcolor=Color(5,255,80),lx = -2,ly=-3,lz = 12,lbright=1,lfov=93,lfar=16,lnear=8,lshadows=0,lang=-Angle(0,0,0)}, + sprite = {bright=0.3,size=.25,scale=0.025,z=-8,color=Color(5,255,80)}, + }}, + {ID = "!ARS", x=44.6+70.7,y=35.17, radius=20, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-707/ezh_lamp_green.mdl",z = -6, ang=Angle(0,-8.5,0), var="L_ARS", + lcolor=Color(5,255,80),lx = -2,ly=-3,lz = 12,lbright=1,lfov=93,lfar=16,lnear=8,lshadows=0,lang=-Angle(0,0,0)}, + sprite = {bright=0.3,size=.25,scale=0.025,z=-8,color=Color(5,255,80)}, + }}, + {ID = "!AB", x=44.6+141.33,y=35.17, radius=20, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-707/ezh_lamp_red.mdl",z = -6, ang=Angle(0,-8.5,0), color=Color(200,255,255), var="AB" , + lcolor=Color(255,80,5),lx = -2,ly=-3,lz = 12,lbright=1.5,lfov=93,lfar=16,lnear=8,lshadows=0,lang=-Angle(0,0,0)}, + sprite = {bright=0.3,size=.25,scale=0.025,z=-8,color=Color(255,80,5)}, + }}, + + {ID = "!SD", x=231.35,y=35.18, radius=12, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-707/ezh_lamp_green.mdl",z = -6, ang=Angle(0,-8.5,0), color=Color(50,100,255), var="SD", + lcolor=Color(5,80,255),lx = -2,ly=-3,lz = 12,lbright=1.5,lfov=93,lfar=16,lnear=8,lshadows=0,lang=-Angle(0,0,0)}, + sprite = {bright=0.3,size=.25,scale=0.025,z=-8,color=Color(5,80,255)}, + }}, + {ID = "!LSN", x=231.5 + 27.6,y=35.18, radius=12, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-707/ezh_lamp_red.mdl",z = -6, ang=Angle(0,-8.5,0), color=Color(255,100,100), var="LSN", getfunc = function(ent,min,max) return ent:GetPackedRatio("LSN") end, + lcolor=Color(255,20,5),lx = -2,ly=-3,lz = 12,lbright=1.5,lfov=93,lfar=16,lnear=8,lshadows=0,lang=-Angle(0,0,0)}, + sprite = {bright=0.3,size=.25,scale=0.025,z=-8,color=Color(255,20,5)}, + }}, + + {ID = "!AV1", x=59,y=74.3, radius=20, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-707/ezh_lamp_red.mdl",z = -6, ang=Angle(1,-8.5,0), color=Color(255,100,100), var="L_AV1" , + lcolor=Color(255,20,5),lx=-2,ly=-3,lz = 12,lbright=1.5,lfov=93,lfar=16,lnear=8,lshadows=0,lang=Angle(0,0,0)}, + sprite = {bright=0.3,size=.25,scale=0.025,z=-8,color=Color(255,20,5)}, + }}, + {ID = "!RRP", x=245.3,y=74.3, radius=20, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-707/ezh_lamp_red.mdl",z = -6, ang=Angle(1,-8.5,0), color=Color(255,100,100), var="RP", + lcolor=Color(255,20,5),lx=-2,ly=-3,lz = 12,lbright=1.5,lfov=93,lfar=16,lnear=8,lshadows=0,lang=Angle(0,0,0)}, + sprite = {bright=0.3,size=.25,scale=0.025,z=-8,color=Color(255,20,5)}, + }}, + + {ID = "!KT", x=116.25,y=101.1, radius=12, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-707/ezh_lamp_green.mdl",z = -6, ang=Angle(1,-8.5,0), color=Color(255,255,150), var="KT", + lcolor=Color(5,255,40),lx=-2,ly=-3,lz = 12,lbright=1,lfov=93,lfar=16,lnear=8,lshadows=0,lang=Angle(0,0,0)}, + sprite = {bright=0.3,size=.25,scale=0.025,z=-8,color=Color(5,255,40)}, + }}, + {ID = "!VD", x=116.25+23.85,y=101.1, radius=12, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-707/ezh_lamp_green.mdl",z = -6, ang=Angle(1,-8.5,0), var="KVD", + lcolor=Color(5,255,80),lx=-2,ly=-3,lz = 12,lbright=1,lfov=93,lfar=16,lnear=8,lshadows=0,lang=Angle(0,0,0)}, + sprite = {bright=0.3,size=.25,scale=0.025,z=-8,color=Color(5,255,80)}, + }}, + {ID = "!RS", x=116.25+23.85*1.987,y=101.1, radius=12, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-707/ezh_lamp_green.mdl",z = -6, ang=Angle(1,-8.5,0), var="RS", + lcolor=Color(5,255,80),lx=-2,ly=-3,lz = 12,lbright=1,lfov=93,lfar=16,lnear=8,lshadows=0,lang=Angle(0,0,0)}, + sprite = {bright=0.3,size=.25,scale=0.025,z=-8,color=Color(5,255,80)}, + }}, + {ID = "!LN", x=116.25+23.85*2.945,y=101.1, radius=12, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-707/ezh_lamp_red.mdl",z = -6, ang=Angle(1,-8.5,0), var="LN", + lcolor=Color(255,20,5),lx=-2,ly=-3,lz = 12,lbright=1.5,lfov=93,lfar=16,lnear=8,lshadows=0,lang=Angle(0,0,0)}, + sprite = {bright=0.3,size=.25,scale=0.025,z=-8,color=Color(255,20,5)}, + }}, + + + } +} + +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"}, + } +} + +ENT.ButtonMap["Main1"] = { + pos = Vector(460.5,-30.9,-9.3), + ang = Angle(0,-90,9.5), + width = 315, + height = 263, + scale = 0.0588, + hideseat = 0.2, + + buttons = { + { ID = "1:KU16Toggle", x=45.3, y=26.8, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = Angle(-5,0,180),z=1, + var="KU16",speed=16, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + { ID = "1:ALSFreqToggle", x=69.5, y=26.8, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = Angle(-5,0,180),z=1, + var="ALSFreq",speed=16, vmin=1, vmax=0, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Freq1/5","Train.Buttons.Freq2/6"} + }}, + {ID = "1:KVTSet", x=246, y=11, radius=11, tooltip="", model = { + model = "models/metrostroi_train/81-502/buttons/button_big_1.mdl", z = 0,ang=Angle(5,0,0), + var="KVT",speed=16,vmin=1,vmax=0, + sndvol = 0.10, snd = function(val) return val and "button1_on" or "button2_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + ----Lightning + {ID = "1:KU4Set", x=43.6, y=180, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, + var="KU4",speed=12, max=0.5, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "1:KU5Set", x=43.6+43*1, y=180, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, + var="KU5",speed=12, max=0.5, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + + ----Door panel + {ID = "1:KU6KToggle", x=43.6+43*4.5, y=185, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-707/krishka_ezh.mdl", z=13,ang=0, + var="KU6K",speed=12, min=0.05,max=0.95,disableoff="1:KU6Set",disableon="1:KU7Set", + getfunc = function(ent) + return ent:GetPackedBool("KU6K") and (ent:GetPackedBool("KU6") and 0.8 or 1) or (ent:GetPackedBool("KU7") and 0.2 or 0) + end, + sndvol = 1, snd = function(val) return val and "kr_left" or "kr_right" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Left","Train.Buttons.Right"} + }}, + {ID = "1:KU6Set", x=43.6+43*4, y=180, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, + var="KU6",speed=12, max=0.5, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "1:KU7Set", x=43.6+43*5, y=180, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, + var="KU7",speed=12, max=0.5, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + --{ID = "1:DoorSelectToggle", x=43.6+43*4.5, y=180, radius=12, tooltip=""}, + + + + { ID = "1:ALSToggle", x=139.5, y=184.5, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=2, + var="ALS",speed=16, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=60,x=11,y=-25,z=-2,var="ALSPl", ID="ALSPl",}, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + { ID = "1:ARSToggle", x=163, y=184.5, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=2, + var="ARS",speed=16, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + + {ID = "1:KU1Toggle", x=43.6,y=243, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, + var="KU1",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 = "1:KU8Set", x=43.6+44*1,y=243, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, + var="KU8",speed=12, max=0.5, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "1:KU9Set", x=43.6+44*2,y=243, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, + var="KU9",speed=12, max=0.5, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "1:R_Program1Set", x=43.6+43*3+1, y=243, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, + var="R_Program1",speed=12, max=0.5, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "1:KU2Toggle", x=43.6+43*4+1, y=243, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, + var="KU2",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"}, + }}, + {ID = "1:KU10Set", x=43.6+43*5, y=243, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, + var="KU10",speed=12, max=0.5, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} + +ENT.ButtonMap["LampsALS1"] = { + pos = Vector(455.1,-36,-10.35), + ang = Angle(0,-90,0), + width = 128, + height = 30, + scale = 0.0588, + hideseat = 0.2, + + buttons = { + ----Лампы ÐЛС + {ID = "!LNF",x=15.5,y=15, radius = 15, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-707/ezh_lamp_och.mdl",z=0, var="04", ang=90, + lcolor=Color(255,20,5),lz = 16,lbright=2,lfov=105,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=.25,scale=0.035,vscale=0.03,z=0,color=Color(255,20,5)}, + }}, + {ID = "!L0",x=32,y=15, radius = 15,tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-707/ezh_lamp_0.mdl",z=0, var="00", ang=90, + lcolor=Color(255,80,5),lz = 16,lbright=2,lfov=105,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=.25,scale=0.035,vscale=0.03,z=0,color=Color(255,80,5)}, + }}, + {ID = "!L40",x=47,y=15, radius = 15, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-707/ezh_lamp_40.mdl",z=0, var="40", ang=90, + lcolor=Color(5,255,80),lz = 16,lbright=2,lfov=105,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=.25,scale=0.035,vscale=0.03,z=0,color=Color(5,255,80)}, + }}, + {ID = "!L60",x=69,y=15, radius = 15, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-707/ezh_lamp_60.mdl",z=0, var="60", ang=90, + lcolor=Color(5,255,80),lz = 16,lbright=2,lfov=105,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=.25,scale=0.035,vscale=0.03,z=0,color=Color(5,255,80)}, + }}, + {ID = "!L70",x=90,y=15, radius = 15, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-707/ezh_lamp_70.mdl",z=0, var="70", ang=90, + lcolor=Color(5,255,80),lz = 16,lbright=2,lfov=105,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=.25,scale=0.035,vscale=0.03,z=0,color=Color(5,255,80)}, + }}, + {ID = "!L80",x=113,y=15, radius = 15, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-707/ezh_lamp_80.mdl",z=0, var="80", ang=90, + lcolor=Color(5,255,80),lz = 16,lbright=2,lfov=105,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=.25,scale=0.035,vscale=0.03,z=0,color=Color(5,255,80)}, + }}, + } +} +---[=[ +ENT.ButtonMap["Main2"] = { + pos = Vector(460.5,-30.9,-9.3), + ang = Angle(0,-90,9.5), + width = 315, + height = 280, + scale = 0.0588, + hideseat = 0.2, + + buttons = { + { ID = "2:KU16Toggle", x=46, y=25.2, radius=15, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = Angle(-3,0,180),z=1, + var="KU16",speed=16, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + { ID = "2:ALSToggle", x=76.8, y=25.2, radius=15, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = Angle(-3,0,180),z=1, + var="ALS",speed=16, vmin=0, vmax=1, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=Angle(0,3,90),x=-1,y=-30,z=3,var="ALSPl", ID="ALSPl",}, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "2:KVTSet", x=240, y=25, radius=11, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl",z = 4,ang=Angle(5,0,0), + var="KVT",speed=16,vmin=1,vmax=0, + sndvol = 0.10, snd = function(val) return val and "button1_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + ----Lightning + {ID = "2:KU4Set", x=43.6, y=180, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, + var="KU4",speed=12, max=0.5, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "2:KU5Set", x=43.6+43*1, y=180, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, + var="KU5",speed=12, max=0.5, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + + ----Door panel + {ID = "2:KU7Set", x=43.6+43*5, y=180, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, + var="KU7",speed=12, max=0.5, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "2:KU6Set", x=43.6+43*4, y=180, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, + var="KU6",speed=12, max=0.5, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "2:KU6KToggle",x=43.6+43*4.5, y=183.2, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-707/krishka_ezh.mdl", z=13,ang=0, + var="KU6K",speed=12, min=0.05,max=0.95,disableoff="2:KU6Set",disableon="2:KU7Set", + getfunc = function(ent) + return ent:GetPackedBool("KU6K") and (ent:GetPackedBool("KU6") and 0.8 or 1) or (ent:GetPackedBool("KU7") and 0.2 or 0) + end, + sndvol = 1, snd = function(val) return val and "kr_left" or "kr_right" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Left","Train.Buttons.Right"} + }}, + + + + { ID = "2:ALSFreqToggle", x=139.5, y=183.5, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 0,z=3, + var="ALSFreq",speed=16, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Freq1/5","Train.Buttons.Freq2/6"} + }}, + { ID = "2:ARSToggle", x=163.5, y=183.5, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=3, + var="ARS",speed=16, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + + {ID = "2:KU1Toggle", x=43.6,y=243, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, + var="KU1",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 = "2:KU8Set", x=43.6+44*1,y=243, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, + var="KU8",speed=12, max=0.5, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "2:KU9Set", x=43.6+44*2,y=243, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, + var="KU9",speed=12, max=0.5, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "2:R_Program1Set", x=43.6+43*3+1, y=243, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, + var="R_Program1",speed=12, max=0.5, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "2:KU2Toggle", x=43.6+43*4+1, y=243, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, + var="KU2",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"}, + }}, + {ID = "2:KU10Set", x=43.6+43*5, y=243, radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=-19, color = Color(149,95,32), + var="KU10",speed=12, max=0.5, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), color = Color(142,64,54), + }}, + } +} +ENT.ButtonMap["Lamps2"] = { + pos = Vector(457.48,-30.91,-9.19+0.17), + ang = Angle(0,-90,8.5), + width = 315, + height = 120, + scale = 0.0588, + hideseat = 0.2, + + buttons = { + ----Лампы + {ID = "!RRP2",x=44.6,y=33.9, radius=20, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-707/ezh_lamp_red.mdl",z = -9, ang=Angle(1,-8.5,0), color=Color(255,100,100), var="RP", + lcolor=Color(255,20,5),lx=-2,ly=-3,lz = 12,lbright=1.5,lfov=100,lfar=16,lnear=8,lshadows=0,lang=Angle(0,0,0)}, + sprite = {bright=0.3,size=.25,scale=0.025,z=-8,color=Color(255,20,5)}, + }}, + {ID = "!LPU2",x=44+27.8,y=33.9, radius=20, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-707/ezh_lamp_green.mdl",z = -9, ang=Angle(1,-8.5,0), var="SEQ", + lcolor=Color(5,255,80),lx=-2,ly=-3,lz = 12,lbright=1,lfov=100,lfar=16,lnear=8,lshadows=0,lang=Angle(0,0,0)}, + sprite = {bright=0.3,size=.25,scale=0.025,z=-8,color=Color(5,255,80)}, + }}, + + {ID = "!VD2",x=152.15,y=99.9, radius=12, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-707/ezh_lamp_green.mdl",z = -9, ang=Angle(1,-8.5,0), var="KVD", + lcolor=Color(5,255,80),lx=-2,ly=-3,lz = 12,lbright=1,lfov=100,lfar=16,lnear=8,lshadows=0,lang=Angle(0,0,0)}, + sprite = {bright=0.3,size=.25,scale=0.025,z=-8,color=Color(5,255,80)}, + }}, + {ID = "!KT2",x=116.2,y=99.9, radius=12, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-707/ezh_lamp_green.mdl",z = -9, ang=Angle(1,-8.5,0), color=Color(255,255,150), var="KT", + lcolor=Color(5,255,40),lx=-2,ly=-3,lz = 12,lbright=1,lfov=100,lfar=16,lnear=8,lshadows=0,lang=Angle(0,0,0)}, + sprite = {bright=0.3,size=.25,scale=0.025,z=-8,color=Color(5,255,40)}, + }}, + {ID = "!AB2",x=151.4+35,y=99.9, radius=12, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-707/ezh_lamp_green.mdl",z = -9, ang=Angle(1,-8.5,0), color=Color(255,255,150), var="AB", + lcolor=Color(5,255,40),lx=-2,ly=-3,lz = 12,lbright=1,lfov=100,lfar=16,lnear=8,lshadows=0,lang=Angle(0,0,0)}, + sprite = {bright=0.3,size=.25,scale=0.025,z=-8,color=Color(5,255,40)}, + }}, + + {ID = "!SD2",x=231.3,y=33.9, radius=12, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-707/ezh_lamp_green.mdl",z = -9, ang=Angle(1,-8.5,0), color=Color(50,100,255), var="SD", + lcolor=Color(5,80,255),lx=-2,ly=-3,lz = 12,lbright=1.5,lfov=100,lfar=16,lnear=8,lshadows=0,lang=Angle(0,0,0)}, + sprite = {bright=0.3,size=.25,scale=0.025,z=-8,color=Color(5,80,255)}, + }}, + {ID = "!LN2",x=245.3,y=72.95, radius=12, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-707/ezh_lamp_red.mdl",z = -9, ang=Angle(1,-8.5,0), var="LN", + lcolor=Color(255,20,5),lx=-2,ly=-3,lz = 12,lbright=1.5,lfov=100,lfar=16,lnear=8,lshadows=0,lang=Angle(0,0,0)}, + sprite = {bright=0.3,size=.25,scale=0.025,z=-8,color=Color(255,20,5)}, + }}, + {ID = "!LSN2",x=231.5 + 27.6,y=33.9, radius=12, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-707/ezh_lamp_red.mdl",z = -9, ang=Angle(1,-8.5,0), color=Color(255,100,100), var="LSN", getfunc = function(ent,min,max) return ent:GetPackedRatio("LSN") end, + lcolor=Color(255,20,5),lx=-2,ly=-3,lz = 12,lbright=1.5,lfov=100,lfar=16,lnear=8,lshadows=0,lang=Angle(0,0,0)}, + sprite = {bright=0.3,size=.25,scale=0.025,z=-8,color=Color(255,20,5)}, + }}, + + + } +}--]=] +ENT.ButtonMap["AVU"] = { + pos = Vector(462.7,-19,35.5), + ang = Angle(0,-95.5,90), + width = 95, + height = 85, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + { ID = "OtklAVUToggle", x=48, y=51, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=-2, + var="OtklAVU",speed=16, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270,x=-1,y=24,z=-2,var="OtklAVUPl", ID="OtklAVUPl",}, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "!AVULight", x=69, y=51, radius=10, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl", skin = 3, z = -4, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=62,x=-0.3,y=-0.3,z=20.6,var="AVU",color=Color(210,170,255),}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(210,170,255)}, + }}, + } +} +---[[ +ENT.ButtonMap["LampsALS2"] = { + pos = Vector(455.1+0.9,-36,-10.35+0.15), + ang = Angle(0,-90,0), + width = 128, + height = 30, + scale = 0.0588, + hideseat = 0.2, + + buttons = { + ----Лампы ÐЛС + {ID = "!LNF_2",x=17,y=16, radius = 15, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-707/ezh_lamp_och.mdl",z=-0.3, var="04", ang=90, + lcolor=Color(255,20,5),lz = 16,lbright=2,lfov=105,lfar=16,lnear=8,lshadows=0,}, + sprite = {bright=0.2,size=.25,scale=0.035,vscale=0.03,z=0,color=Color(255,20,5)}, + }}, + {ID = "!L0_2",x=32.3,y=16, radius = 15,tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-707/ezh_lamp_0.mdl",z=-0.3, var="00", ang=90, + lcolor=Color(255,80,5),lz = 16,lbright=2,lfov=105,lfar=16,lnear=8,lshadows=0,}, + sprite = {bright=0.2,size=.25,scale=0.035,vscale=0.03,z=0,color=Color(255,80,5)}, + }}, + {ID = "!L40_2",x=48.6,y=16, radius = 15, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-707/ezh_lamp_40.mdl",z=-0.3, var="40", ang=90, + lcolor=Color(5,255,80),lz = 16,lbright=2,lfov=105,lfar=16,lnear=8,lshadows=0,}, + sprite = {bright=0.2,size=.25,scale=0.035,vscale=0.03,z=0,color=Color(5,255,80)}, + }}, + {ID = "!L60_2",x=70.2,y=16, radius = 15, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-707/ezh_lamp_60.mdl",z=-0.3, var="60", ang=90, + lcolor=Color(5,255,80),lz = 16,lbright=2,lfov=105,lfar=16,lnear=8,lshadows=0,}, + sprite = {bright=0.2,size=.25,scale=0.035,vscale=0.03,z=0,color=Color(5,255,80)}, + }}, + {ID = "!L70_2",x=91,y=16, radius = 15, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-707/ezh_lamp_70.mdl",z=-0.3, var="70", ang=90, + lcolor=Color(5,255,80),lz = 16,lbright=2,lfov=105,lfar=16,lnear=8,lshadows=0,}, + sprite = {bright=0.2,size=.25,scale=0.035,vscale=0.03,z=0,color=Color(5,255,80)}, + }}, + {ID = "!L80_2",x=113,y=16, radius = 15, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/81-707/ezh_lamp_80.mdl",z=-0.3, var="80", ang=90, + lcolor=Color(5,255,80),lz = 16,lbright=2,lfov=105,lfar=16,lnear=8,lshadows=0,}, + sprite = {bright=0.2,size=.25,scale=0.035,vscale=0.03,z=0,color=Color(5,255,80)}, + }}, + } +}--]] + +ENT.ClientProps["asotp"] = { + model = "models/metrostroi_train/81-707/asotp.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat = 1, +} +ENT.ButtonMap["ASNP"] = { + pos = Vector(461.42,-35.2,35.4), + ang = Angle(-0.4,-97,90), + width = 115, + height = 60, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "R_ASNPMenuSet",x=58, y=48.5, radius=8, tooltip = "Информатор: Меню",model = { + model = "models/metrostroi_train/81-720/button_round.mdl", + var="R_ASNPMenu",speed=12, vmin=0, vmax=0.9,z=-3, + sndvol = 0.5,snd = function(val) return val and "pnm_button1_on" or "pnm_button1_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "R_ASNPUpSet",x=105, y=14.5, radius=8, tooltip = "Информатор: Вверх",model = { + model = "models/metrostroi_train/81-720/button_round.mdl", + var="R_ASNPUp",speed=12, vmin=0, vmax=0.9,z=-3, + sndvol = 0.5,snd = function(val) return val and "pnm_button1_on" or "pnm_button2_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "R_ASNPDownSet",x=105, y=31, radius=8, tooltip = "Информатор: Вниз",model = { + model = "models/metrostroi_train/81-720/button_round.mdl", + var="R_ASNPDown",speed=12, vmin=0, vmax=0.9,z=-3, + sndvol = 0.5,snd = function(val) return val and "pnm_button2_on" or "pnm_button1_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "R_ASNPOnToggle",x=12, y=18, radius=8, tooltip = "Информатор: Включение",model = { + model = "models/metrostroi_train/81-720/tumbler2.mdl", ang=0, z = -3, + var="R_ASNPOn",speed=12, vmin=1, vmax=0, + sndvol = 0.5,snd = function(val) return val and "pnm_on" or "pnm_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} + +ENT.ButtonMap["ASNPScreen"] = { + pos = ENT.ButtonMap["ASNP"].pos+Vector(-0.1,-1.6,-0.85), + ang = Angle(-.4,-97,90), + width = 512, + height = 128, + scale = 0.008, + hideseat = 0.2, + hide=true, +} + + +ENT.ButtonMap["IGLAButtons"] = { + pos = Vector(459.1,-53.7,15.81), + ang = Angle(-0,237.1,90), + width = 87, + height = 70, + scale = 0.0625, + hideseat = 0.2, + buttons = { + {ID = "IGLA1USet",x=11, y=39, w=12, h=7, tooltip=""}, + {ID = "IGLA1Set",x=11, y=46, w=12, h=7, tooltip=""}, + {ID = "IGLA1DSet",x=11, y=53, w=12, h=7, tooltip=""}, + {ID = "IGLA2USet",x=65, y=39, w=12, h=7, tooltip=""}, + {ID = "IGLA2Set",x=65, y=46, w=12, h=7, tooltip=""}, + {ID = "IGLA2DSet",x=65, y=53, w=12, h=7, tooltip=""}, + {ID = "!IGLASR",x=17.9, y=10.5, radius=3, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl", var="IGLASR",color=Color(175,250,20),z=-2}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(175,250,20),z=-1,} + }}, + {ID = "!IGLARX",x=27.5, y=10.5, radius=3, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl", var="IGLARX",color=Color(255,56,30),z=-2}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,56,30),z=-1,} + }}, + {ID = "!IGLAErr",x=40.5, y=10.5, radius=3, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl", var="IGLAErr",color=Color(255,168,000),z=-2}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,168,000),z=-1,} + }}, + {ID = "!IGLAOSP",x=50, y=10.5, radius=3, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl", var="IGLAOSP",color=Color(175,250,20),z=-2}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(175,250,20),z=-1,} + }}, + {ID = "!IGLAPI",x=59.5, y=10.5, radius=3, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl", var="IGLAPI",color=Color(255,56,30),z=-2}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,56,30),z=-1,} + }}, + {ID = "!IGLAOff",x=69, y=10.5, radius=3, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl", var="IGLAOff",color=Color(255,56,30),z=-2}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,56,30),z=-1,} + }}, + } +} +ENT.ButtonMap["IGLA"] = { + pos = ENT.ButtonMap["IGLAButtons"].pos+Vector(-0.30,-0.6,-1.25), + ang = ENT.ButtonMap["IGLAButtons"].ang, + width = 512, + height = 128, + scale = 0.025/2.7, + hideseat = 0.2, + hide=true, + +} +ENT.ClientProps["E_informator"] = { + model = "models/metrostroi_train/equipment/rri_informator_portable.mdl", + pos = Vector(404.75,-36-4,-4.2), + ang = Angle(0,0,0), + hideseat = 0.2, +} +ENT.ButtonMap["RRI"] = { + pos = ENT.ClientProps["E_informator"].pos+Vector(-0.65,-0.5,5), + ang = Angle(0,90,0), + width = 60, + height = 25, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "RRIEnableToggle",x=10,y=12.5,radius=10,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=-4, + var="RRIEnable",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "!RRIRewind",x=30,y=12.5,radius=0,model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_b_a.mdl",ang = 180,z=-3, + getfunc = function(ent) return ent:GetPackedRatio("RRIRewind") end, + var="RRIRewind",speed=8, + sndvol = 0.5,snd = function(_,val) return val==2 and "triple_0-up" or val==0 and "triple_0-down" or "triple_up-0" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "RRIRewindSet2",x=30-5,y=12.5-10,w=10,h=10,tooltip=""}, + {ID = "RRIRewindSet0",x=30-5,y=12.5,w=10,h=10,tooltip=""}, + + {ID = "RRIAmplifierToggle",x=50,y=12.5,radius=10,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=-4, + var="RRIAmplifier",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "!RRIOn",x=70,y=12.5,radius=10,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",z = -13, + lamp = { model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=62,x=-0.3,y=-0.3,z=20.6, var="RRIOn", color=Color(210,170,255), getfunc=function(ent,min,max,var) return ent:GetPackedBool(var) and (1-(ent.AnnLamp or 0)^1.5*0.6) or 0 end, }, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(210,170,255),}, + }}, + } +} +ENT.ButtonMap["RRIScreen"] = { + pos = ENT.ClientProps["E_informator"].pos+Vector(2,-2.9,5), + ang = Angle(0,90,90), + width = 121, + height = 103, + scale = 0.07, + hideseat = 0.2, + hide=true, + + buttons = { + {ID = "RRIUp",x=30,y=60,radius=10,tooltip=""}, + {ID = "RRIDown",x=30,y=80,radius=10,tooltip=""}, + {ID = "RRILeft",x=20,y=70,radius=10,tooltip=""}, + {ID = "RRIRight",x=40,y=70,radius=10,tooltip=""}, + } +} + +--VU Panel +ENT.ButtonMap["VU"] = { + pos = Vector(464.20,-16.5,18.2), + ang = Angle(0,268,90), + width = 92, + height = 200, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "VUToggle", x=0, y=0, w=92, 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}}, + 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), + }}, + {ID = "KU14Set", x=0, y=100, w=46, h=100, tooltip="", model = { + model = "models/metrostroi_train/switches/vudbrown.mdl", z=19, + labels={{model="models/metrostroi_train/81-707/labels/vu_labels.mdl",skin=12,ang=90,z=18.9,x=0,y=-25.5}}, + var="KU14",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 = "KU15Set", x=46, y=100, w=46, h=100, tooltip="", model = { + model = "models/metrostroi_train/switches/vudbrown.mdl", z=19, + labels={{model="models/metrostroi_train/81-707/labels/vu_labels.mdl",skin=8,ang=90,z=18.9,x=0,y=-25.5}}, + var="KU15",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), + }}, + } +} + +ENT.ButtonMap["Stopkran"] = { + pos = Vector(461.6,27,3), + ang = Angle(0,-90,90), + width = 100, + height = 1300, + scale = 0.1/2, + buttons = { + {ID = "EmergencyBrakeValveToggle",x=0, y=0, w=100, h=1300, tooltip="", tooltip="",tooltip="",states={"Train.Buttons.Closed","Train.Buttons.Opened"},var="EmergencyBrakeValve"}, + } +} +ENT.ClientProps["stopkran"] = { + model = "models/metrostroi_train/81-717/stop_mvm.mdl", + pos = Vector(464.5-0.1,24.4,-3), + ang = Angle(0,270,0), + hide = 0.8, +} +ENT.ClientSounds["EmergencyBrakeValve"] = {{"stopkran",function() return "disconnect_valve" end,1,1,50,1e3,Angle(-90,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, + }}, + } +} + + +ENT.ButtonMap["KRR"] = { + pos = Vector(403,-25,4), + ang = Angle(0,90,90), + width = 20, + height = 20, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "KRRSet", x=10, y=10, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl", + var="KRR",speed=16,vmin=1,vmax=0, + sndvol = 0.10, snd = function(val) return val and "button2_on" or "button1_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + } +} + +---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), + }}, + } +} + + +ENT.ButtonMap["AV2"] = { + pos = Vector(403.5,20.40,32.4), + ang = Angle(0,90,90), + width = 300, + height = 136, + scale = 0.0625, + hide = 0.8, + + buttons = { + {ID = "R_RadioToggle", x=2, y=0, w=100, h=136, 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=4,ang=90,z=20.9,x=0,y=-12.5}}, + var="R_Radio",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + {ID = "RSTToggle", x=120, y=0, w=100, h=136, 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=3,ang=90,z=20.9,x=0,y=-12.5}}, + plomb = {model = "models/metrostroi_train/equipment/vu_plomb_left.mdl",ang=Angle(-90,90,0),x=-8,y=33.7,z=9.3,var="RSTPl", ID="RSTPl",}, + var="RST",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + {ID = "UOSToggle", x=253, y=37, w=40, h=40, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-5, + labels={{model="models/metrostroi_train/81-707/labels/vu_labels.mdl",skin=1,ang=90,z=2.5,x=0,y=-17}}, + var="UOS",speed=16, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270-50,x=-18,y=18,z=1.5,var="UOSPl", ID="UOSPl",}, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} + +ENT.ButtonMap["KAH"] = { + pos = Vector(403.5,38.9,8.15), + ang = Angle(0,90,90), + width = 40, + height = 40, + scale = 0.0625, + hideseat = 0.2, + + + buttons = { + { ID = "KAHToggle", x=0, y=0, w=40, h=40, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=-5, + labels={{model="models/metrostroi_train/81-707/labels/vu_labels.mdl",skin=2,ang=90,z=2.5,x=0,y=-15}}, + var="KAH",speed=16, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270-50,x=-18,y=18,z=1.5,var="KAHPl", ID="KAHPl",}, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} + + +ENT.ButtonMap["RC1"] = { + pos = Vector(413,21.48,3.2), + ang = Angle(0,90,90), + width = 100, + height = 100, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + { ID = "RC1Toggle", x=0, y=0, w=100, h=100, tooltip="", model = { + model = "models/metrostroi_train/81-707/rcr.mdl", ang = Angle(90,90,0), z=-17, + var="RC1",speed=4,vmin=1,vmax=0, + plomb = {var="RC1Pl", ID="RC1Pl",}, + sndvol = 2, snd = function(val) return val and "samm_0-2" or "samm_2-0" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(-90,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"}, + }}, + {ID = "R_Program1HSet", x=14, y=220, radius=15, tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + labels={{model="models/metrostroi_train/81-702/labels/vu_labels.mdl",skin=7,ang=90,z=2,x=0,y=-24}}, + var="R_Program1H",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button1_on" or "button3_off" end, + sndmin = 60,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "R_Program2HSet", x=44, y=220, radius=15, tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = -3, + labels={{model="models/metrostroi_train/81-702/labels/vu_labels.mdl",skin=8,ang=90,z=2,x=0,y=-24}}, + var="R_Program2H",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button1_on" or "button3_off" end, sndmin = 60,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + } +} + +ENT.ButtonMap["AB1"] = { + pos = Vector(403.1,-50,6), + ang = Angle(0,90,90), + width = 40, + height = 50, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "AB1Set", x=0,y=0,w=40,h=50,tooltip="", model = { + model = "models/metrostroi_train/81-502/buttons/button_717_1.mdl",vmin=1,vmax=0, + var="AB1",speed=16, + lamp = {model = "models/metrostroi_train/81-717/buttons/lamp_button_2.mdl",anim=true, var="ABLamp", speed=6,z=2.5, + lcolor=Color(255,130,40),lz = 8,lfov=145,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=.5,scale=0.1,z=8,color=Color(255,130,40)}, + labels={{model="models/metrostroi_train/81-707/labels/vu_labels.mdl",skin=13,ang=90,z=1.3,x=0,y=-20}}, + sndvol = 0.10, snd = function(val) return val and "button1_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + tooltipFunc = function(ent) return ent:GetNW2Bool("ABLamp") and "Train.Buttons.CanAB" or ent:GetNW2Bool("AB") and "Train.Buttons.InAB" end, + }}, + } +} +ENT.ButtonMap["AB2"] = { + pos = Vector(455,62.9,5), + ang = Angle(0,-4,90), + width = 40, + height = 50, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "AB2Set", x=0,y=0,w=40,h=50,tooltip="", model = { + model = "models/metrostroi_train/81-502/buttons/button_717_1.mdl",vmin=1,vmax=0, + var="AB2",speed=16, + lamp = {model = "models/metrostroi_train/81-717/buttons/lamp_button_2.mdl",anim=true, var="ABLamp", speed=6,z=2.5, + lcolor=Color(255,130,40),lz = 8,lfov=145,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.2,size=.5,scale=0.1,z=8,color=Color(255,130,40)}, + labels={{model="models/metrostroi_train/81-707/labels/vu_labels.mdl",skin=13,ang=90,z=1.3,x=0,y=-20}}, + sndvol = 0.10, snd = function(val) return val and "button1_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + tooltipFunc = function(ent) return ent:GetNW2Bool("ABLamp") and "Train.Buttons.CanAB" or ent:GetNW2Bool("AB") and "Train.Buttons.InAB" end, + }}, + } +} + + +ENT.ButtonMap["HVMeters"] = { + pos = Vector(458.3,-55.4,28.2), + ang = Angle(0,-115.3,90), + + width = 66, + height = 152, + scale = 0.0625, + + buttons = { + {ID = "!EnginesCurrent", x=0,y=0,w=66,h=72,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesCurrent"),ent:GetPackedRatio("EnginesCurrent")*1000-500) end}, + {ID = "!EnginesVoltage", x=0,y=79,w=66,h=72,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesVoltage"),ent:GetPackedRatio("EnginesVoltage")*1000) end}, + } +} +ENT.ButtonMap["Speedometer"] = { + pos = Vector(457.7,-36.7,-5), + ang = Angle(0,-90,86), + width = 100, + height = 70, + scale = 0.0625, + + buttons = { + {ID = "!Speedometer", x=0, y=0, w=100, h=70, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.Speed"),ent:GetPackedRatio("Speed")*100) end}, + } +} + +ENT.ButtonMap["BLTLPressure"] = { + pos = Vector(458,-54.5,8.9), + ang = Angle(0,-90-30,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.5,4.9), + ang = Angle(0,-90-30,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.4,-17.3,5), + ang = Angle(0,267,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["EPKDisconnect"] = { + pos = Vector(445.35,-52.78,-30.65), + ang = Angle(0,180+30,45), + width = 200, + height = 90, + scale = 0.0625, + + buttons = { + {ID = "EPKToggle", x=0, y=0, w=200, h=90, tooltip="", model = { + var="EPK",sndid="EPK_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["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"}}, + } +} + +-- UAVA +ENT.ButtonMap["UAVAPanel"] = { + pos = Vector(453.5,56,-5), + ang = Angle(0,-70,90), + width = 180, + height = 200, + scale = 0.0625, + + buttons = { + {ID = "UAVAToggle",x=0, y=0, w=60, h=200, tooltip="", model = { + plomb = {var="UAVAPl", ID="UAVAPl",}, + var="UAVA", + sndid="UAVALever",sndvol = 1, snd = function(val) return val and "uava_on" or "uava_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "UAVACToggle",x=60, y=0, w=120, h=200, tooltip="",var="UAVAC",states={"Train.Buttons.UAVAOff","Train.Buttons.UAVAOn"}}, + } +} + + +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["krureverser"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = Vector(404.5,-23.8,-3.0), + ang = Angle(-25,90,90), + 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["EPK_disconnect"] = { + model = "models/metrostroi_train/81-707/cran1.mdl", + pos = Vector(439.0,-53.7,-33.9), + ang = Angle(7,28,-90), + hideseat = 0.2, +} + +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.00,-56.9,6.54), + ang = Angle(222,58.73,-91.6), + hideseat = 0.2, +} +ENT.ClientProps["brake_line"] = { + model = "models/metrostroi_train/Equipment/arrow_tm.mdl", + pos = Vector(457.02,-56.93,6.52), + ang = Angle(222,58.73,-91.6), + hideseat = 0.2, +} + +ENT.ClientProps["brake_cylinder"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(460.16,-52.74,2.63), + ang = Angle(222,59.75,-89.15), + hideseat = 0.2, +} +---------------------------------------------------------------- +ENT.ClientProps["ampermeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(457.838257,-57.372929,24.954866), + ang = Angle(-90.000000,-25.024040,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(457.800049,-57.465500,19.903502), + ang = Angle(-90.053635,-25.024040,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.614563,-19.442207,1.925565), + ang = Angle(-90,0,0), + bscale = Vector(1,1,1.3), + hideseat = 0.2, +} +ENT.ClientProps["speed1"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(458.596863,-39.826691,-9.930562), + ang = Angle(-85,0.000000,0.000000), + bscale = Vector(1,1,1.5), + hideseat = 0.2, +} + +-------------------------------------------------------------------------------- +--[[ENT.ClientProps["book"] = { + model = "models/props_lab/binderredlabel.mdl", + pos = Vector(401.763123,-32.429512,48.305576), + ang = Angle(53,0,90), +}]] + +ENT.ClientProps["salon"] = { + model = "models/metrostroi_train/81-707/ezh_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.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2.0, +} + +ENT.ClientProps["sunprotectors"] = { + model = "models/metrostroi_train/81-502/sun_protectors.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2.0, +} + +ENT.ClientProps["ars_indicator"] = { + model = "models/metrostroi_train/81-707/a_indicator.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2.0, +} +ENT.ClientProps["controller_1"] = { + model = "models/metrostroi_train/81-707/controller_old.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2.0, +} +ENT.ClientProps["controller_2"] = { + model = "models/metrostroi_train/81-707/controller_new.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2.0, +} + +ENT.ClientProps["asotp"] = { + model = "models/metrostroi_train/81-707/asotp.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2.0, + } +ENT.ClientProps["underwagon"] = { + model = "models/metrostroi_train/81-703/81-703_Underwagon.mdl", + pos = Vector(-23.5,0,-191), + ang = Angle(0,0,0), + hide = 2.0, +} + + +ENT.ClientProps["PB"] = { + model = "models/metrostroi_train/81-707/pedal.mdl", + pos = Vector(451.5, -33.05, -50.7), + ang = Angle(0,-90,-2), + hideseat = 0.5, +} +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,1,1,50,1e3,Angle(-90,0,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/lights_group2.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, +} +ENT.ClientProps["Lamp_RTM"] = { + model = "models/metrostroi_train/81-717/rtmlamp.mdl", + pos = Vector(416.593567,-55.343071,10.316401), + ang = Angle(0.000000,-90.000000,0.000000), +} +----Циферблат +ENT.ClientProps["speedo1"] = { + model = "models/metrostroi_train/81-717/segments/segment_spb.mdl", + pos = Vector(457.82+0.2,-40.1-0.1-0.05,-6.93-0.05), + ang = Angle(90-6,180,0), + color = Color(250,200,70), + hideseat = 0.2, +} +ENT.ClientProps["speedo2"] = { + model = "models/metrostroi_train/81-717/segments/segment_spb.mdl", + pos = Vector(457.82+0.2,-40.1+0.89-0.1+0.05,-6.93-0.05), + ang = Angle(90-6,180,0), + color = Color(250,200,70), + hideseat = 0.2, +} + +ENT.ClientProps["tab"] = { + model = "models/metrostroi_train/Equipment/tab.mdl", + pos = Vector(-0.0,0,-0), + ang = Angle(0,0,0), + skin = 1, + hide = 2, +} +ENT.ButtonMap["Route"] = { + pos = Vector(465.7,35.3,2), + ang = Angle(0,98,90), + width = 153, + height = 130, + scale = 0.0625, + buttons = { + {ID = "RouteNumber1+",x=76.5*0,y=0, w=76.5,h=65, tooltip=""}, + {ID = "RouteNumber2+",x=76.5*1,y=0, w=76.5,h=65, tooltip=""}, + {ID = "RouteNumber1-",x=76.5*0,y=65,w=76.5,h=65, tooltip=""}, + {ID = "RouteNumber2-",x=76.5*1,y=65,w=76.5,h=65, tooltip=""}, + } +} +ENT.ClientProps["route"] = { + model = "models/metrostroi_train/common/routes/ezh/route_holder.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2, +} +ENT.ClientProps["route1"] = { + model = "models/metrostroi_train/common/routes/ezh/route_number1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2, + callback = function(ent) + ent.RouteNumber.Reloaded = false + end, +} +ENT.ClientProps["route2"] = { + model = "models/metrostroi_train/common/routes/ezh/route_number2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2, + callback = function(ent) + ent.RouteNumber.Reloaded = false + end, +} + + + +-------------------------------------------------------------------------------- +-- 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/ezh3_door_noars_with_marshrut.mdl", + pos = Vector(460.62+7.4,-14.53,-7), + ang = Angle(0,-90,0), + hide = 2, + callback = function(ent) + ent.LastStation.Reloaded = false + end, +} +ENT.ButtonMap["LastStation"] = { + pos = Vector(460.62+7.4,-14.53,2), + ang = Angle(0,90,90), + width = 500, + height = 150, + scale = 0.0625, + buttons = { + {ID = "LastStation-",x=000,y=0,w=250,h=150, tooltip=""}, + {ID = "LastStation+",x=250,y=0,w=250,h=150, tooltip=""}, + } +} + +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,-15,-9.6), + 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["UAVALever"] = { + model = "models/metrostroi_train/81-703/cabin_uava.mdl", + pos = Vector(449+7.7,56.0,-10.24349), + ang = Angle(0,-90+10,0), + hideseat = 0.8, +} + +ENT.ClientProps["RedLights"] = { + model = "models/metrostroi_train/81-703/81-703_red_light.mdl", + pos = Vector(-23+7.2,1,-191), + ang = Angle(0,0,0.000000), + nohide=true, +} +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=95, texture = "models/metrostroi_train/equipment/headlight",shadows = 1,headlight=true}, + [2] = { "headlight", Vector(460,0,45), Angle(-20,0,0), Color(255,0,0), fov=164 ,brightness = 0.3, farz=250,texture = "models/metrostroi_train/equipment/headlight2",shadows = 0,backlight=true}, + [21] = { "headlight", Vector(445,-55,41), Angle(75, 70,45), Color(190, 130, 88), fov=135, farz=90, brightness = 1.5, shadows = 1, texture = "models/metrostroi_train/equipment/headlight", hidden = "Lamps_pult"}, + [22] = { "headlight", Vector(445,-55.0,32.2), Angle(0,0,0), Color(255,130,88), fov=125, farz=65,brightness = 1.5,shadows = 0, texture = "models/metrostroi_train/equipment/headlight", hidden = "Lamps_pult"}, + --[24] = { "headlight", Vector(442,-53.0,-0.2), Angle(75,0,0), Color(255,130,88), fov=90, farz=65,brightness = 2,shadows = 0}, + [40] = { "headlight", Vector(457.80,-37.3,-5.3),Angle(45,-40,120) , Color(255,125,25), farz = 6, nearz = 1, shadows = 0, brightness = 16, fov = 80, hidden = "cabin"}, + [41] = { "headlight", Vector(457.80,-42.6,-5.3),Angle(45,40,120) , Color(255,125,25), farz = 6, nearz = 1, shadows = 0, brightness = 16, fov = 80, hidden = "cabin"}, + + [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"}, + + [5] = { "light", Vector(465+5,-32, 48), Angle(0,0,0), Color(255,50,50), brightness = 0.2, scale = 1.5, texture = "sprites/light_glow02", size = 2 }, + [6] = { "light", Vector(465+5, 32, 48), Angle(0,0,0), Color(255,50,50), brightness = 0.2, scale = 1.5, texture = "sprites/light_glow02", size = 2 }, + [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"}, + Lamp_RTM = {"light", Vector(416.593567,-55.343071,10.316401), Angle(0,0,0),Color(255,180,60),brightness = 0.4,scale = 0.03, texture = "sprites/light_glow02", hidden = "Lamp_RTM"}, + + speedo1 = {"light", Vector(457.82+0.2,-40.1-0.1-0.05,-6.93-0.05), Angle(0,0,0),Color(255,180,60),brightness=0.2,scale=0.04,vscale=0.05, texture = "sprites/light_glow02",size=0.5, hidden = "speedo1"}, + speedo2 = {"light", Vector(457.82+0.2,-40.1+0.89-0.1+0.05,-6.93-0.05), Angle(0,0,0),Color(255,180,60),brightness=0.2,scale=0.04,vscale=0.05, texture = "sprites/light_glow02",size=0.5, hidden = "speedo2"}, +} + +local strength = { + [0] = 0.86, + [1] = 0.29, + [2] = 0.71, + [3] = 0.71, + [4] = 0.57, + [5] = 0.71, + [6] = 0.86, + [7] = 0.43, + [8] = 1.00, + [9] = 0.86, +} +function ENT:Initialize() + self.BaseClass.Initialize(self) + + self.FrontLeak = 0 + self.RearLeak = 0 + + --self.Train:SetPackedRatio("EmergencyValve_dPdT", leak) + --self.Train:SetPackedRatio("EmergencyValveEPK_dPdT", leak) + --self.Train:SetPackedRatio("EmergencyBrakeValve_dPdT", leak) + self.ASNP = self:CreateRT("710ASNP",512,128) + self.IGLA = self:CreateRT("710IGLA",512,128) + self.RRIScreen = self:CreateRT("710RRI",128,128) + self.CraneRamp = 0 + self.ReleasedPdT = 0 + self.EmergencyValveRamp = 0 + self.EmergencyValveEPKRamp = 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 + + local typ = self:GetNW2Int("TrainType",1) + self:HidePanel("Main1",typ~=1) + self:HidePanel("Lamps1",typ~=1) + self:HidePanel("LampsALS1",typ~=1) + self:HidePanel("RRI",typ~=1) + self:HidePanel("RRIScreen",typ~=1 or self.CurrentCamera ~= 9) + self:ShowHide("controller_1",typ==1) + self:ShowHide("speed1",typ==1) + self:ShowHide("E_informator",typ==1) + + + self:ShowHide("R_RadioToggle",typ==2) + self:ShowHide("R_RadioToggle_label1",typ==2) + self:HidePanel("Main2",typ~=2) + self:HidePanel("Lamps2",typ~=2) + self:HidePanel("LampsALS2",typ~=2) + self:HidePanel("ASNP",typ~=2) + self:HidePanel("ASNPScreen",typ~=2) + self:HidePanel("IGLAButtons",typ~=2) + self:HidePanel("IGLA",typ~=2) + self:ShowHide("asotp",typ==2) + self:ShowHide("controller_2",typ==2) + + local speed = self:GetPackedRatio("Speed")*100.0 + self:ShowHide("speedo1",typ==2 and self:GetPackedBool("V1")) + self:ShowHide("speedo2",typ==2 and self:GetPackedBool("V1") and speed >= 10) + if IsValid(self.ClientEnts["speedo1"])then + self.ClientEnts["speedo1"]:SetSkin(math.floor(speed)%10) + self:SetLightPower("speedo1",true,strength[math.floor(speed)%10]) + end + if IsValid(self.ClientEnts["speedo2"])then + self.ClientEnts["speedo2"]:SetSkin(math.floor(speed/10)%10) + self:SetLightPower("speedo2",true,strength[math.floor(speed*10)%10]) + 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 + + self:ShowHideSmooth("ars_indicator",self:Animate("L_ARS",self:GetPackedBool("L_ARS") and 1 or 0,0,1,5,false)) + + 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) + local RL = self:Animate("redlights",self:GetPackedBool("RedLight") and 1 or 0,0,1,5,false) + + self:ShowHideSmooth("WhiteLights",HL1) + self:ShowHideSmooth("DistantLights",HL2) + self:ShowHideSmooth("RedLights",RL) + self:SetLightPower(5,RL > 0,RL) + self:SetLightPower(6,RL > 0,RL) + self:SetLightPower(30,HL1 > 0, HL1) + self:SetLightPower(31,HL1 > 0, HL1) + self:SetLightPower(32,HL2 > 0, HL2) + + local bright = HL1*0.3+HL2*0.7 + self:SetLightPower(1,bright>0,bright) + self:SetLightPower(2,RL>0,RL) + + 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(21,PL>0,PL) + self:SetLightPower(22,PL>0,PL) + + self:SetLightPower(40,typ==1 and HL1>0,HL1) + self:SetLightPower(41,typ==1 and HL1>0,HL1) + + 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:ShowHideSmooth("Lamps_full",self:Animate("lamps_full",self:GetPackedBool("Lamps_full") and Lamps or 0,0,1,5,false)) + ---PB + self:Animate("PB",self:GetPackedBool("PB") and 1 or 0,0,0.2, 12,false) + + self:Animate("UAVALever", self:GetPackedBool("UAVA") and 1 or 0, 0,0.6, 128, 3,false) + 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("EPK_disconnect",self:GetPackedBool("EPK") and 1 or 0,0.5,0.25, 3,false) + self:Animate("stopkran", self:GetPackedBool("EmergencyBrakeValve") and 1 or 0,0,0.25, 7, false) + + -- Simulate pressure gauges getting stuck a little + self:Animate("brake", self:GetPackedRatio("CranePosition"), 0.00, 0.48,256,24) + 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("krureverser",self:GetPackedRatio("KRUPosition"),0.61,1,3,false) + self:Animate("volt1", self:GetPackedRatio("BatteryVoltage"),0.622+0.01,0.382-0.01,45,3) + + self:ShowHide("reverser",self:GetNW2Int("WrenchMode",0)==1) + self:ShowHide("krureverser",self:GetNW2Int("WrenchMode",0)==2) + self:ShowHide("rcureverser",self:GetNW2Int("WrenchMode",0)==3) + + + + ---Animate brakes + self:Animate("brake_line",self:GetPackedRatio("BLPressure"),0, 0.748, 256,2)--,,0.01) + self:Animate("train_line",self:GetPackedRatio("TLPressure"),0, 0.748, 4096,2)--,,0.01) + --self:Animate("brake_cylinder",self:GetPackedRatio("BCPressure"), 0, 0.743, 32,1)--,,0.03) + local anim = self:Animate("brake_cylinder",self:GetPackedRatio("BCPressure"), 0, 0.743, 2048,6)--,,0.03) + self.BrakeCylinder = self.BrakeCylinder or 0.5 + 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("voltmeter",self:GetPackedRatio("EnginesVoltage"),0.623,0.38,92,2) + self:Animate("ampermeter",self:GetPackedRatio("EnginesCurrent"),0.629,0.373,92,2) + self:Animate("speed1", self:GetPackedRatio("Speed"),0.630 ,0.370, nil, nil, 90,200,20) + + + 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.8+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)) + + 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) + + -- 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) + + + -- ARS/ringer alert + self:SetSoundState("ring",self:GetPackedBool("Ring") and 1 or 0,1) + + local lamps_rtm = self:Animate("lamps_rtm",self:GetPackedBool("VPR") and 1 or 0,0,1,8,false) + self:ShowHideSmooth("Lamp_RTM",lamps_rtm) + self:SetLightPower("Lamp_RTM",lamps_rtm > 0,lamps_rtm) + self:SetSoundState("vpr",self:GetPackedBool("VPR") and 1 or 0,1) + + -- 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 + self.AnnLamp = self.AnnLamp 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 + local annvolume = self.Sounds.announcer1 and IsValid(self.Sounds.announcer1) and self.Sounds.announcer1:GetLevel()*math.Rand(0.9,3) or 0 + + local lamp = math.max(annvolume,noise and self.NoiseVolume or 0) + + self.AnnLamp = math.Clamp(self.AnnLamp + 8*(lamp-self.AnnLamp)*dT,0,1) + if self.AnnLamp < 0.01 then self.AnnLamp=0 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:Draw() + self.BaseClass.Draw(self) +end +function ENT:DrawPost() + self.RTMaterial:SetTexture("$basetexture", self.ASNP) + self:DrawOnPanel("ASNPScreen",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(256,64,512,128,0) + end) + + self.RTMaterial:SetTexture("$basetexture", self.IGLA) + self:DrawOnPanel("IGLA",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(256,64+22,512,128+22,0) + end) + + 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) + self.RTMaterial:SetTexture("$basetexture", self.RRIScreen) + self:DrawOnPanel("RRIScreen",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(64,64,128,128,0) + end) +end + +function ENT:OnButtonPressed(button) + if button == "PrevSign" then + self.InfoTableTimeout = CurTime() + 2.0 + end + if button == "NextSign" then + self.InfoTableTimeout = CurTime() + 2.0 + end + + if button and button:sub(1,3) == "Num" then + self.InfoTableTimeout = CurTime() + 2.0 + end +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 == "LK1" and range > 0 then + local speed = self:GetPackedRatio("Speed") + self.SoundPositions["lk5_on"][1] = 440-Lerp(speed/0.1,0,330) + return "lk5_on",location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "RVT" then + return range > 0 and "rvt_on" or "rvt_off",location,1,pitch + end + if soundid == "K6" then + return range > 0 and "k6_on" or nil,location,1,pitch + end + if soundid == "RV2" then + return range > 0 and "r1_5_on" or "r1_5_off",location,1,pitch + end + if soundid == "RPB" then + return range > 0 and "rpb_on" or "rpb_off",location,1,pitch + end + if soundid == "KD" then + return range > 0 and "kd_on" or "kd_off",location,1,pitch + end + if soundid == "KK" then + return range > 0 and "kk_on" or "kk_off",location,1,pitch--0.8 + end + if soundid == "K25" then + return range > 0 and "k25_on" or "k25_off",location,1,pitch + end + if soundid == "RO" then + return range > 0 and "ro_on" or "ro_off",location,1,0.8 + end + if soundid == "Rp8" then + return range > 0 and "rp8_on" or "rp8_off",location,1,pitch + end + if soundid == "ROT" then + return range > 0 and "rot_on" or "rot_off",location,1,pitch + end + if soundid == "AVU" then + return range > 0 and "avu_on" or "avu_off",location,1,0.9 + end + if soundid == "brake" then + self:PlayOnce("brake_f",location,range,pitch) + self:PlayOnce("brake_b",location,range,pitch) + return + end + if soundid == "UAVAC" then + return "uava_reset",location,range,pitch + end + end + return soundid,location,range,pitch +end + + +local dist = { + Back1 = 550, + AVMain = 550, + AV1 = 550, + AV2 = 550, + Battery = 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() diff --git a/lua/entities/gmod_subway_ezh/init.lua b/lua/entities/gmod_subway_ezh/init.lua new file mode 100644 index 0000000..5cdf359 --- /dev/null +++ b/lua/entities/gmod_subway_ezh/init.lua @@ -0,0 +1,603 @@ +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_ASNPOn","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 = { + KAH = true, + OtklAVU = true, + RC1 = true, + ALS = true, + UOS = true, + RST = true, + Init = true, + UAVA = true, + } + -- Set model and initialize + self:SetModel("models/metrostroi_train/81-710/81-710.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,1.3,-89),Angle(0,180,0),true,"717") + self.RearBogey = self:CreateBogey(Vector(-317+0,1.3,-89),Angle(0,0,0),false,"717") + self.FrontCouple = self:CreateCouple(Vector( 419.5+3.5,1.3,-75),Angle(0,0,0),true,"702") + self.RearCouple = self:CreateCouple(Vector(-421.5-3.5,1.3,-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+4.5,1.0,-72),Angle(0,0,0),true,"702") + self.RearCouple = self:CreateCouple(Vector(-421+2+3.6-4.5,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 + self.FrontCouple.EKKDisconnected = true + + -- 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_EQUAL] = {"R_Program1Set",helper="R_Program1HSet"}, + [KEY_MINUS] = {"R_Program2Set",helper="R_Program2HSet"}, + + [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_PAD_DIVIDE] = "KU14Set", + + [KEY_SPACE] = "PBSet", + [KEY_BACKSPACE] = {"EmergencyBrake",helper="EmergencyBrakeValveToggle"}, + + [KEY_PAD_ENTER] = "KVWrenchKV", + [KEY_PAD_0] = "DriverValveDisconnect", + [KEY_PAD_DECIMAL] = "EPKToggle", + [KEY_LSHIFT] = { + [KEY_W] = "KVUp_Unlocked", + [KEY_SPACE] = "KVTSet", + + [KEY_1] = "KU4Set", + [KEY_2] = "KU5Set", + [KEY_4] = "KVSet0Fast", + [KEY_L] = "DriverValveDisconnect", + + [KEY_7] = "KVWrenchNone", + [KEY_8] = "KVWrenchKRU", + [KEY_9] = "KVWrenchKV9", + [KEY_0] = "KVWrenchKV", + [KEY_6] = "KVSetT1A", + + [KEY_PAD_ENTER] = "KVWrenchNone", + }, + [KEY_LALT] = { + [KEY_V] = "KU2Toggle", + [KEY_L] = "EPKToggle", + [KEY_UP] = "ANNUp", + [KEY_DOWN] = "ANNDown", + [KEY_LEFT] = "ANNLeft", + [KEY_RIGHT] = "ANNRight", + }, + } + 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:NonSupportTrigger() + self.KAH:TriggerInput("Set",1) + self.UOS:TriggerInput("Set",1) + self.RC1:TriggerInput("Set",0) + self.EPK:TriggerInput("Set",0) + self.ARS:TriggerInput("Set",0) + self.Plombs.KAH = nil + self.Plombs.UOS = nil + self.Plombs.RC1 = nil +end + +function ENT:TrainSpawnerUpdate() + if self:GetNW2Int("TrainType",1) == 1 then + self.Announcer:TriggerInput("Reset","AnnouncementsRRI") + self.Electric:TriggerInput("RRI",1) + + self.RRI:TriggerInput("Disable",0) + self.ASNP:TriggerInput("Disable",1) + self.IGLA_CBKI:TriggerInput("Disable",1) + self:SetNW2Int("Announcer",1) + elseif self:GetNW2Int("TrainType",1) == 2 then + self.Announcer:TriggerInput("Reset","AnnouncementsASNP") + self.Electric:TriggerInput("RRI",0) + + self.RRI:TriggerInput("Disable",1) + self.ASNP:TriggerInput("Disable",0) + self.IGLA_CBKI:TriggerInput("Disable",0) + end + 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 ALS_ARS = self.ALS_ARS + local Pneumatic = self.Pneumatic + self:SetPackedBool("RedLight",Panel.RedLights > 0) + self:SetPackedBool("Headlights1",Panel.Headlights1 > 0) + self:SetPackedBool("Headlights2",Panel.Headlights2 > 0) + + self:SetPackedBool("PanelLights",self.PanelLamp.Value > 0.5) + + 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) + + + self:SetPackedBool("RRIOn",self.RRI_VV.Power>0) + self:SetPackedRatio("RRIRewind",self.RRIRewind.Value/2) + + 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:SetPackedBool("RP",TW18 > 0.5) + self:SetPackedRatio("LSN",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.ManualBrake < 0.001 and self.ManualBrake > self.TrueBrakeAngle then self.TrueBrakeAngle = self.ManualBrake end + if self.ManualBrake > 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:SetPackedBool("SEQ",Panel.Sequence > 0) + -- OCh + self:SetPackedBool("04",ALS_ARS.NoFreq > 0) + -- 0 + self:SetPackedBool("00",ALS_ARS.F5 > 0) + -- 40 + self:SetPackedBool("40",ALS_ARS.F4 > 0) + -- 60 + self:SetPackedBool("60",ALS_ARS.F3 > 0) + -- 70 + self:SetPackedBool("70",ALS_ARS.F2 > 0) + -- 80 + self:SetPackedBool("80",ALS_ARS.F1 > 0) + -- ЛР+ self:SetPackedBool("LN",ALS_ARS.LN > 0) + self:SetPackedBool("AB",ALS_ARS.AB > 0) + self:SetPackedBool("ABLamp",ALS_ARS.ABReady > 0) + self:SetPackedBool("L_ARS",ALS_ARS.ARS > 0) + self:SetPackedBool("L_AV",ALS_ARS.AV > 0) + self:SetPackedBool("L_AV1",ALS_ARS.AV1 > 0) + + self:SetPackedBool("KT",Panel.KT > 0) + self:SetPackedBool("KVD",ALS_ARS.LVD > 0) + self:SetPackedBool("RS",ALS_ARS.F6 > 0) + + self:SetPackedBool("AVU",Panel.AVU > 0.5) + + self:SetPackedBool("Ring",Panel.Ring > 0.5) + -- Ð¡ÐµÐºÐ²ÐµÐ½Ñ†Ð¸Ñ (задейÑтвие РПУ, замыкание РВЗ) + --self:SetPackedBool("LPU",(self.RPU.Value == 1.0) and (self:ReadTrainWire(1) > 0.5 or self:ReadTrainWire(6) > 0.5)) + + 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:SetPackedBool("VPR",Panel.VPR > 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:SetPackedRatio("KRUPosition", self.KRU.Position/3) + 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) + + -- Update ARS system (no ars on E) + self:SetPackedRatio("ALSSpeed", self.ALSCoil.Speed/100.0) + self:SetPackedRatio("Speed", self.Speed/100) + + -- Exchange some parameters between engines, pneumatic system, and real world + self.Engines:TriggerInput("Speed",self.Speed) + --self.Engines:TriggerInput("Speed",CurTime()%5>2.5 and 120 or 82) + 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 + + if button:sub(1,3) == "ANN" then + local ID = button:sub(4,-1) + if self:GetNW2Int("TrainType",1) == 1 then + self.RRI:TriggerInput(ID,1) + elseif ID == "Up" then + self.R_ASNPUp:TriggerInput("Set",1) + elseif ID == "Down" then + self.R_ASNPDown:TriggerInput("Set",1) + elseif ID == "Right" then + self.R_ASNPMenu:TriggerInput("Set",1) + end + 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 + + 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 + -- KRU + if (self.KVWrenchMode == 2) and (button == "KVReverserUp") then self.KRU:TriggerInput("Up",1) end + if (self.KVWrenchMode == 2) and (button == "KVReverserDown") then self.KRU:TriggerInput("Down",1) end + if (self.KVWrenchMode == 2) and (button == "KVSetX1B") then self.KRU:TriggerInput("SetX1",1) end + if (self.KVWrenchMode == 2) and (button == "KVSetX2") then self.KRU:TriggerInput("SetX2",1) end + if (self.KVWrenchMode == 2) and (button == "KVSet0") then self.KRU:TriggerInput("Set0",1) 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 and self.KRU.Position == 0 then + if self.KVWrenchMode == 2 then + self:PlayOnce("kru_out","cabin",0.7) + else + self:PlayOnce("revers_out","cabin",0.7) + end + self.KVWrenchMode = 0 + self.KV:TriggerInput("Enabled",0) + self.KRU:TriggerInput("Enabled",0) + end + end + if button == "KVWrenchKRU" then + if self.KVWrenchMode == 0 then + self:PlayOnce("kru_in","cabin",0.7) + self.KVWrenchMode = 2 + self.KRU:TriggerInput("Enabled",1) + end + end + if button == "KU6" and not self.KU7Pressed and self.KU7.Value == 0 then self.KU6K:TriggerInput("Open",1) end + if button == "KU7" and not self.KU6Pressed and self.KU6.Value == 0 then self.KU6K:TriggerInput("Close",1) 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:sub(1,3) == "ANN" then + local ID = button:sub(4,-1) + if self:GetNW2Int("TrainType",1) == 1 then + self.RRI:TriggerInput(ID,0) + elseif ID == "Up" then + self.R_ASNPUp:TriggerInput("Set",0) + elseif ID == "Down" then + self.R_ASNPDown:TriggerInput("Set",0) + elseif ID == "Right" then + self.R_ASNPMenu:TriggerInput("Set",0) + end + return + 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_ezh/shared.lua b/lua/entities/gmod_subway_ezh/shared.lua new file mode 100644 index 0000000..6e19285 --- /dev/null +++ b/lua/entities/gmod_subway_ezh/shared.lua @@ -0,0 +1,688 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.PrintName = "Ezh (81-707)" +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" +ENT.SkinsType = "81-707" +ENT.Model = "models/metrostroi_train/81-710/81-710.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(420,-38.2 ,35),80,0.33}, + {Vector(-3,-60, 62),300,0.2}, + {Vector(-3,60 ,62),300,0.2}, +} + +-- 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 + +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+18,25,0),Angle(0,180,0),"Train.703.RCARS"}, + {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(407.5+45,-21,32),Angle(0,-5,0),"Train.703.AVU"}, + {Vector(407.5+45,-38,36),Angle(10,-5,0),"Train.Common.ASNP","ASNP"}, + {Vector(407.5+40,-50.3,12.7),Angle(0,-30,0),"Train.Common.IGLA","IGLAButtons"}, + {Vector(407.5+10,-35-3.6,10),Angle(35,180,0),"Train.Common.RRI","RRI"}, + {Vector(407.5+68,40,2) ,Angle(20,180,0),"Train.Common.RouteNumber"}, + {Vector(407.5+80,0,6) ,Angle(20,180,0),"Train.Common.LastStation"}, + {Vector(450+13,0,26),Angle(60,0,0),"Train.Common.CouplerCamera"}, +} +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.20} + self.SoundPositions["rolling_40"] = {480,1e12,Vector(0,0,0),0.40} + self.SoundPositions["rolling_70"] = {480,1e12,Vector(0,0,0),0.55} + self.SoundPositions["rolling_80"] = {480,1e12,Vector(0,0,0),0.75} + + 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"] = {480,1e12,Vector(0,0,0),0.90} + self.SoundPositions["rolling_medium2"] = {480,1e12,Vector(0,0,0),0.90} + self.SoundPositions["rolling_high2"] = {480,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["epv_on"] = "subway_trains/ezh/pneumatic/epv_on.mp3" + self.SoundNames["epv_off"] = "subway_trains/ezh/pneumatic/epv_off.mp3" + self.SoundPositions["epv_on"] = {60,1e9,Vector(445.35,-52.78,-30.65),1} + self.SoundPositions["epv_off"] = {60,1e9,Vector(445.35,-52.78,-30.65),1} + -- Релюшки + self.SoundNames["rpb_on"] = "subway_trains/717/relays/relay_on.mp3" + self.SoundPositions["rpb_on"] = {100,1e9,Vector(400,25,-35),0.65} + self.SoundPositions["rpb_off"] = {100,1e9,Vector(400,25,-35),0.65} + self.SoundNames["rvt_on"] = "subway_trains/717/relays/new/rvt_on1.mp3" + self.SoundNames["rvt_off"] = "subway_trains/717/relays/new/rvt_off3.mp3" + self.SoundPositions["rvt_on"] = {100,1e9,Vector(400,25,-35),0.65} + self.SoundPositions["rvt_off"] = {100,1e9,Vector(400,25,-35),0.65} + self.SoundNames["r1_5_on"] = "subway_trains/717/relays/new/k6_on1.mp3" + self.SoundNames["r1_5_off"] = "subway_trains/717/relays/new/r1_5_off.mp3" + self.SoundPositions["r1_5_on"] = {100,1e9,Vector(400,25,-35),0.65} + self.SoundPositions["r1_5_off"] = {100,1e9,Vector(400,25,-35),0.65} + + self.SoundNames["kd_off"] = "subway_trains/717/relays/lsd_2.mp3" + self.SoundNames["kd_on"] = "subway_trains/717/relays/new/kd_on.mp3" + self.SoundPositions["kd_on"] = {100,1e9,Vector(400,25,-35),0.65} + self.SoundPositions["kd_off"] = {100,1e9,Vector(400,25,-35),0.65} + + self.SoundNames["k25_on"] = "subway_trains/717/relays/new/k25_on1.mp3" + self.SoundNames["k25_off"] = "subway_trains/717/relays/new/k25_off.mp3" + self.SoundPositions["k25_on"] = {120,1e9,Vector(400,25,-35),0.65} + self.SoundPositions["k25_off"] = {120,1e9,Vector(400,25,-35),0.65} + self.SoundNames["ro_on"] = "subway_trains/717/relays/new/ro_off.mp3" + self.SoundNames["ro_off"] = "subway_trains/717/relays/ro_on.mp3" + self.SoundPositions["ro_on"] = {140,1e9,Vector(400,25,-35),0.65} + self.SoundPositions["ro_off"] = {140,1e9,Vector(400,25,-35),0.65} + + + self.SoundNames["avu_off"] = "subway_trains/common/pneumatic/ak11b_off.mp3" + self.SoundNames["avu_on"] = "subway_trains/common/pneumatic/ak11b_on.mp3" + self.SoundPositions["avu_on"] = {60,1e9, Vector(449+7.7,56.0,-10.24349),0.7} + self.SoundPositions["avu_off"] = self.SoundPositions["avu_on"] + + + --Подвагонка + 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/717/compressor/compressor_717_start2.wav","subway_trains/717/compressor/compressor_717_loop2.wav", "subway_trains/717/compressor/compressor_717_stop2.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.23} + + 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.45,-6.60)} + 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(404.5,-23.8,-3.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/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_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["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["button4_off"] = { + "subway_trains/ezh3/switches/button_on1.mp3", + "subway_trains/ezh3/switches/button_on2.mp3", + } + self.SoundNames["button4_on"] = { + "subway_trains/717/switches/button4_on1.mp3", + "subway_trains/717/switches/button4_on2.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(449+7.7,56.0,-10.24349),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(120,62.0+0.0,-60),0.5} + self.SoundPositions["gv_b"] = {80,1e2,Vector(120,62.0+0.0,-60),0.5} + + self.SoundNames["disconnect_valve"] = "subway_trains/common/switches/pneumo_disconnect_switch.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.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"] = {80,1e9,Vector(457.85,-22.8,-6),1} + self.SoundPositions["kv70_fix_off"] = {80,1e9,Vector(457.85,-22.8,-6),1} + self.SoundPositions["kv40_0_t1"] = {80,1e9,Vector(457.85,-22.8,-6),1} + self.SoundPositions["kv70_t1_0_fix"] = {80,1e9,Vector(457.85,-22.8,-6),1} + self.SoundPositions["kv40_t1_0"] = {80,1e9,Vector(457.85,-22.8,-6),1} + self.SoundPositions["kv40_t1_t1a"] = {80,1e9,Vector(457.85,-22.8,-6),1} + self.SoundPositions["kv40_t1a_t1"] = {80,1e9,Vector(457.85,-22.8,-6),1} + self.SoundPositions["kv40_t1a_t2"] = {80,1e9,Vector(457.85,-22.8,-6),1} + self.SoundPositions["kv40_t2_t1a"] = {80,1e9,Vector(457.85,-22.8,-6),1} + self.SoundPositions["kv40_0_x1"] = {80,1e9,Vector(457.85,-22.8,-6),1} + self.SoundPositions["kv40_x1_0"] = {80,1e9,Vector(457.85,-22.8,-6),1} + self.SoundPositions["kv40_x1_x2"] = {80,1e9,Vector(457.85,-22.8,-6),1} + self.SoundPositions["kv40_x2_x1"] = {80,1e9,Vector(457.85,-22.8,-6),1} + self.SoundPositions["kv40_x2_x3"] = {80,1e9,Vector(457.85,-22.8,-6),1} + self.SoundPositions["kv40_x3_x2"] = {80,1e9,Vector(457.85,-22.8,-6),1} + + self.SoundNames["samm_revers_in"] = {"subway_trains/ezh3/rc_ars/reversor_rc_in.mp3"} + self.SoundNames["samm_revers_out"] = {"subway_trains/ezh3/rc_ars/reversor_rc_in.mp3"} + self.SoundNames["samm_0-1"] = {"subway_trains/ezh3/rc_ars/0-1.mp3"} + self.SoundNames["samm_0-2"] = {"subway_trains/ezh3/rc_ars/0-2.mp3"} + self.SoundNames["samm_2-0"] = {"subway_trains/ezh3/rc_ars/2-0.mp3"} + self.SoundPositions["samm_0-2"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_2-0"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_0-1"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_revers_out"] = {60,1e9,Vector(442.2-6,-50,-10),0.70} + self.SoundPositions["samm_revers_in"] = {60,1e9,Vector(442.2-6,-50,-10),0.70} + + self.SoundNames["ring"] = {loop=0.1,"subway_trains/717/ring/ringch_start.wav","subway_trains/717/ring/ringch_loop.wav","subway_trains/717/ring/ringch_end.wav"} + self.SoundPositions["ring"] = {60,1e9,Vector(410,-30,55),0.1} + + 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"] = {60,1e9,Vector(420,-38.2 ,35),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(449.118378+7.6,33.493385,-14.713276),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"} + + --Краны + 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(452, 0,-63),1} + self.SoundNames["rear_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["rear_isolation"] = {300,1e9,Vector(-456, 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.40,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["epk_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["epk_brake"] = {80,1e9,Vector(437.2,-63.1,-40.0),0.65} + + self.SoundNames["pneumo_TL_open"] = { + "subway_trains/common/334/334_open.mp3", + } + 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(457.3,-53.4+2,21.5),0.1} + self.SoundPositions["igla_off"] = {50,1e9,Vector(457.3,-53.4+2,21.5),0.1} + self.SoundPositions["igla_start1"] = {50,1e9,Vector(457.3,-53.4+2,21.5),0.1} + self.SoundPositions["igla_start2"] = {50,1e9,Vector(457.3,-53.4+2,21.5),0.1} + + self.SoundNames["upps"] = {"subway_trains/common/other/upps/upps1.mp3","subway_trains/common/other/upps/upps2.mp3"} + self.SoundPositions["upps"] = {60,1e9,Vector(443,-64,4),0.5} + + 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["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(450,-30,-55)} + + --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_703_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_40") + -- Контроллер резервного ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (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_707_Panel") + -- Everything else + self:LoadSystem("Battery") + self:LoadSystem("Horn") + + self:LoadSystem("Announcer","81_71_Announcer", "AnnouncementsASNP") + self:LoadSystem("ASNP","81_71_ASNP") + self:LoadSystem("ASNP_VV","81_71_ASNP_VV") + self:LoadSystem("RRI","81_71_RRI") + self:LoadSystem("RRI_VV","81_71_RRI_VV") + + self:LoadSystem("ALSCoil") + self:LoadSystem("ALS_ARS","ARS_MP") + + self:LoadSystem("IGLA_CBKI","IGLA_CBKI2") + + self:LoadSystem("RouteNumber","81_71_RouteNumber",2) + self:LoadSystem("LastStation","81_71_LastStation","710","door1") + self:LoadSystem("IGLA_PCBK") +end + +function ENT:PostInitializeSystems() + self.Electric:TriggerInput("Type",self.Electric.Ezh) + self.Electric:TriggerInput("RRI",1) +end +ENT.SubwayTrain = { + Type = "E", + Name = "Ezh", + WagType = 0, + ALS = { + HaveAutostop = true, + TwoToSix = true, + RSAs325Hz = true, + Aproove0As325Hz = false, + }, + EKKType = 703, + NoFrontEKK=false, +} +ENT.NumberRanges = {{5101,5330}} + +ENT.Spawner = { + model = { + "models/metrostroi_train/81-710/81-710.mdl", + "models/metrostroi_train/81-707/ezh_salon.mdl", + "models/metrostroi_train/81-707/cabin.mdl", + "models/metrostroi_train/81-502/sun_protectors.mdl", + "models/metrostroi_train/81-707/controller_old.mdl", + {"models/metrostroi_train/81-703/81-703_Underwagon.mdl",pos = Vector(-23.5,0,-191)}, + }, + spawnfunc = function(i,tbls,tblt) + local WagNum = tbls.WagNum + if tbls.EWagons and i==1 then + tbls.EID = 2+math.floor(math.random()*(WagNum-2)) + end + if 10.9) and "gmod_subway_81-703_int" or "gmod_subway_ezh1" + else + return "gmod_subway_ezh" + end + end, + interim = "gmod_subway_ezh1", + func = function(ent,i,maxi) + if ent:GetClass() == "gmod_subway_ezh" then + ent.VU:TriggerInput("Set",1) + ent.UAVA:TriggerInput("Set",0) + ent.Plombs.VU = nil + ent.Plombs.UAVA = true + else + ent.VU:TriggerInput("Set",0) + ent.UAVA:TriggerInput("Set",1) + ent.Plombs.VU = true + ent.Plombs.UAVA = nil + end + end, + Metrostroi.Skins.GetTable("Texture","Texture",false,"train"), + Metrostroi.Skins.GetTable("PassTexture","PassTexture",false,"pass"), + Metrostroi.Skins.GetTable("CabTexture","CabTexture",false,"cab"), + {"Announcer","Spawner.707.Announcer","List",function() + local Announcer = {} + for k,v in pairs(Metrostroi.AnnouncementsASNP or {}) do if not v.asnp then Announcer[k] = v.name or k end end + return Announcer + end}, + {"TrainType","Type","List",{"Spawner.707.Type.1","Spawner.707.Type.2"}}, + {"SpawnMode","Spawner.Common.SpawnMode","List",{"Spawner.Common.SpawnMode.Full","Spawner.Common.SpawnMode.Deadlock","Spawner.Common.SpawnMode.NightDeadlock","Spawner.Common.SpawnMode.Depot"}, nil,function(ent,val,rot,i,wagnum,rclk) + if ent:GetClass():find("703") then + ent:SetNW2String("PassTexture","") + ent:SetNW2String("CabTexture","") + ent.Electric:TriggerInput("Type",ent.Electric.Ezh) + end + if rclk then return end + if ent._SpawnerStarted~=val then + ent.VB:TriggerInput("Set",val<=2 and 1 or 0) + ent.AV:TriggerInput("Set",val<=2 and 1 or 0) + if ent.RRI then + local first = i==1 or _LastSpawner~=CurTime() + ent.VU2:TriggerInput("Set",(val<=2 and first) and 1 or 0) + ent.ARS:TriggerInput("Set",(val==1 and first and ent.Plombs.RC1) and 1 or 0) + --ent.ALS:TriggerInput("Set",val==1 and 1 or 0) + ent.EPK:TriggerInput("Set",(val<=2 and ent.Plombs.UOS) and 1 or 0) + ent.RRIEnable:TriggerInput("Set",val<=2 and 1 or 0) + ent.RRIAmplifier:TriggerInput("Set",val<=2 and 1 or 0) + ent.R_ASNPOn:TriggerInput("Set",val<=2 and 1 or 0) + ent.KU1:TriggerInput("Set",(val==1 and first) and 1 or 0) + _LastSpawner=CurTime() + ent.CabinDoor = val==4 and first + ent.PassengerDoor = val==4 + ent.RearDoor = val==4 + else + ent.VU2:TriggerInput("Set",0) + ent.FrontDoor = val==4 + ent.RearDoor = val==4 + end + ent.Pneumatic.RightDoorState = val==4 and {1,1,1,1} or {0,0,0,0} + ent.Pneumatic.DoorRight = val==4 + ent.Pneumatic.LeftDoorState = val==4 and {1,1,1,1} or {0,0,0,0} + ent.Pneumatic.DoorLeft = val==4 + ent.GV:TriggerInput("Set",val<4 and 1 or 0) + ent._SpawnerStarted = val + end + if val==1 then ent.KO:TriggerInput("Close",1) else ent.KO:TriggerInput("Open",1) end + ent.Pneumatic.TrainLinePressure = val==3 and math.random()*4 or val==2 and 4.5+math.random()*3 or 7.6+math.random()*0.6 + end}, + {"EWagons","Spawner.502.EWagons","Boolean"}, +} diff --git a/lua/entities/gmod_subway_ezh1/cl_init.lua b/lua/entities/gmod_subway_ezh1/cl_init.lua new file mode 100644 index 0000000..e8db411 --- /dev/null +++ b/lua/entities/gmod_subway_ezh1/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-703/81-703_Underwagon.mdl", + pos = Vector(-23.5,0,-191), + 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.8+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_ezh1/init.lua b/lua/entities/gmod_subway_ezh1/init.lua new file mode 100644 index 0000000..b155aa0 --- /dev/null +++ b/lua/entities/gmod_subway_ezh1/init.lua @@ -0,0 +1,471 @@ +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-710.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+3.5,0,-75),Angle(0,0,0),true,"702") + self.RearCouple = self:CreateCouple(Vector(-421.5-3.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+4.5,1.0,-72),Angle(0,0,0),true,"702") + self.RearCouple = self:CreateCouple(Vector(-421+2+3.6-4.5,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.ManualBrake < 0.001 and self.ManualBrake > self.TrueBrakeAngle then self.TrueBrakeAngle = self.ManualBrake end + if self.ManualBrake > 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_ezh1/shared.lua b/lua/entities/gmod_subway_ezh1/shared.lua new file mode 100644 index 0000000..3f5c9d5 --- /dev/null +++ b/lua/entities/gmod_subway_ezh1/shared.lua @@ -0,0 +1,589 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.PrintName = "Ezh1 (81-707) int" +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" +ENT.SkinsType = "81-707" +ENT.Model = "models/metrostroi_train/81-710/81-710.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.20} + self.SoundPositions["rolling_40"] = {480,1e12,Vector(0,0,0),0.40} + self.SoundPositions["rolling_70"] = {480,1e12,Vector(0,0,0),0.55} + self.SoundPositions["rolling_80"] = {480,1e12,Vector(0,0,0),0.75} + + 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"] = {480,1e12,Vector(0,0,0),0.90} + self.SoundPositions["rolling_medium2"] = {480,1e12,Vector(0,0,0),0.90} + self.SoundPositions["rolling_high2"] = {480,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["epv_on"] = "subway_trains/common/pneumatic/epv_on.mp3" + self.SoundNames["epv_off"] = "subway_trains/common/pneumatic/epv_off.mp3" + self.SoundPositions["epv_on"] = {60,1e9,Vector(445.35,-52.78,-30.65),1} + self.SoundPositions["epv_off"] = {60,1e9,Vector(445.35,-52.78,-30.65),1} + -- Релюшки + self.SoundNames["rpb_on"] = "subway_trains/717/relays/relay_on.mp3" + self.SoundPositions["rpb_on"] = {100,1e9,Vector(400,25,-35),0.85} + self.SoundPositions["rpb_off"] = {100,1e9,Vector(400,25,-35),0.85} + self.SoundNames["rvt_on"] = "subway_trains/717/relays/new/rvt_on1.mp3" + self.SoundNames["rvt_off"] = "subway_trains/717/relays/new/rvt_off3.mp3" + self.SoundPositions["rvt_on"] = {100,1e9,Vector(400,25,-35),0.85} + self.SoundPositions["rvt_off"] = {100,1e9,Vector(400,25,-35),0.85} + self.SoundNames["r1_5_on"] = "subway_trains/717/relays/new/k6_on1.mp3" + self.SoundNames["r1_5_off"] = "subway_trains/717/relays/new/r1_5_off.mp3" + self.SoundPositions["r1_5_on"] = {100,1e9,Vector(400,25,-35),0.85} + self.SoundPositions["r1_5_off"] = {100,1e9,Vector(400,25,-35),0.85} + + self.SoundNames["kd_off"] = "subway_trains/717/relays/lsd_2.mp3" + self.SoundNames["kd_on"] = "subway_trains/717/relays/new/kd_on.mp3" + self.SoundPositions["kd_on"] = {100,1e9,Vector(400,25,-35),0.85} + self.SoundPositions["kd_off"] = {100,1e9,Vector(400,25,-35),0.85} + + self.SoundNames["k25_on"] = "subway_trains/717/relays/new/k25_on1.mp3" + self.SoundNames["k25_off"] = "subway_trains/717/relays/new/k25_off.mp3" + self.SoundPositions["k25_on"] = {120,1e9,Vector(400,25,-35),0.85} + self.SoundPositions["k25_off"] = {120,1e9,Vector(400,25,-35),0.85} + self.SoundNames["ro_on"] = "subway_trains/717/relays/new/ro_off.mp3" + self.SoundNames["ro_off"] = "subway_trains/717/relays/ro_on.mp3" + self.SoundPositions["ro_on"] = {140,1e9,Vector(400,25,-35),0.85} + self.SoundPositions["ro_off"] = {140,1e9,Vector(400,25,-35),0.85} + + + self.SoundNames["avu_off"] = "subway_trains/common/pneumatic/ak11b_off.mp3" + self.SoundNames["avu_on"] = "subway_trains/common/pneumatic/ak11b_on.mp3" + self.SoundPositions["avu_on"] = {60,1e9, Vector(449+7.7,56.0,-10.24349),0.7} + self.SoundPositions["avu_off"] = self.SoundPositions["avu_on"] + + + --Подвагонка + 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/717/compressor/compressor_717_start2.wav","subway_trains/717/compressor/compressor_717_loop2.wav", "subway_trains/717/compressor/compressor_717_stop2.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.23} + + 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.45,-6.60)} + 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"] = {80,1e9,Vector(452.3,-24.0,4.0)} + + 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/kru2-3_1.mp3", + "subway_trains/717/kru/kru2-3_2.mp3", + "subway_trains/717/kru/kru2-3_3.mp3", + "subway_trains/717/kru/kru2-3_4.mp3", + } + self.SoundNames["kru_3_2"] = { + "subway_trains/717/kru/kru3-2_1.mp3", + "subway_trains/717/kru/kru3-2_2.mp3", + "subway_trains/717/kru/kru3-2_3.mp3", + "subway_trains/717/kru/kru3-2_4.mp3", + } + self.SoundPositions["kru_0_1"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_1_2"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_2_1"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_1_0"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_2_3"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundPositions["kru_3_2"] = {80,1e9,Vector(452.3,-24.0,4.0)} + + 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["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["button4_off"] = { + "subway_trains/ezh3/switches/button_on1.mp3", + "subway_trains/ezh3/switches/button_on2.mp3", + } + self.SoundNames["button4_on"] = { + "subway_trains/717/switches/button4_on1.mp3", + "subway_trains/717/switches/button4_on2.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(449+7.7,56.0,-10.24349),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(120,62.0+0.0,-60),0.5} + self.SoundPositions["gv_b"] = {80,1e2,Vector(120,62.0+0.0,-60),0.5} + + self.SoundNames["disconnect_valve"] = "subway_trains/common/switches/pneumo_disconnect_switch.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/kv40_0_T1.mp3","subway_trains/ezh/kv40/kv40_0_T1_2.mp3"} + self.SoundNames["kv40_t1_0"] = {"subway_trains/ezh/kv40/kv40_T1_0.mp3","subway_trains/ezh/kv40/kv40_T1_0_2.mp3"} + self.SoundNames["kv40_t1_t1a"] = {"subway_trains/ezh/kv40/kv40_T1_T1A.mp3"} + self.SoundNames["kv40_t1a_t1"] = {"subway_trains/ezh/kv40/kv40_T1A_T1.mp3","subway_trains/ezh/kv40/kv40_T1A_T1_2.mp3"} + self.SoundNames["kv40_t1a_t2"] = {"subway_trains/ezh/kv40/kv40_T1A_T2.mp3","subway_trains/ezh/kv40/kv40_T1A_T2_2.mp3"} + self.SoundNames["kv40_t2_t1a"] = {"subway_trains/ezh/kv40/kv40_T2_T1A.mp3","subway_trains/ezh/kv40/kv40_T2_T1A_2.mp3"} + self.SoundNames["kv40_0_x1"] = {"subway_trains/ezh/kv40/kv40_0_X1.mp3"} + self.SoundNames["kv40_x1_0"] = {"subway_trains/ezh/kv40/kv40_X1_0.mp3"} + self.SoundNames["kv40_x1_x2"] = {"subway_trains/ezh/kv40/kv40_X1_X2.mp3"} + self.SoundNames["kv40_x2_x1"] = {"subway_trains/ezh/kv40/kv40_X2_X1.mp3"} + self.SoundNames["kv40_x2_x3"] = {"subway_trains/ezh/kv40/kv40_X2_X3.mp3"} + self.SoundNames["kv40_x3_x2"] = {"subway_trains/ezh/kv40/kv40_X3_X2.mp3"} + self.SoundPositions["kv70_fix_on"] = {80,1e9,Vector(457.85,-22.8,-6),0.70} + self.SoundPositions["kv70_fix_off"] = {80,1e9,Vector(457.85,-22.8,-6),0.70} + self.SoundPositions["kv40_0_t1"] = {80,1e9,Vector(457.85,-22.8,-6),0.70} + self.SoundPositions["kv70_t1_0_fix"] = {80,1e9,Vector(457.85,-22.8,-6),0.70} + self.SoundPositions["kv40_t1_0"] = {80,1e9,Vector(457.85,-22.8,-6),0.70} + self.SoundPositions["kv40_t1_t1a"] = {80,1e9,Vector(457.85,-22.8,-6),0.70} + self.SoundPositions["kv40_t1a_t1"] = {80,1e9,Vector(457.85,-22.8,-6),0.70} + self.SoundPositions["kv40_t1a_t2"] = {80,1e9,Vector(457.85,-22.8,-6),0.70} + self.SoundPositions["kv40_t2_t1a"] = {80,1e9,Vector(457.85,-22.8,-6),0.70} + self.SoundPositions["kv40_0_x1"] = {80,1e9,Vector(457.85,-22.8,-6),0.70} + self.SoundPositions["kv40_x1_0"] = {80,1e9,Vector(457.85,-22.8,-6),0.70} + self.SoundPositions["kv40_x1_x2"] = {80,1e9,Vector(457.85,-22.8,-6),0.70} + self.SoundPositions["kv40_x2_x1"] = {80,1e9,Vector(457.85,-22.8,-6),0.70} + self.SoundPositions["kv40_x2_x3"] = {80,1e9,Vector(457.85,-22.8,-6),0.70} + self.SoundPositions["kv40_x3_x2"] = {80,1e9,Vector(457.85,-22.8,-6),0.70} + + self.SoundNames["samm_revers_in"] = {"subway_trains/ezh3/rc_ars/reversor_rc_in.mp3"} + self.SoundNames["samm_revers_out"] = {"subway_trains/ezh3/rc_ars/reversor_rc_in.mp3"} + self.SoundNames["samm_0-1"] = {"subway_trains/ezh3/rc_ars/0-1.mp3"} + self.SoundNames["samm_0-2"] = {"subway_trains/ezh3/rc_ars/0-2.mp3"} + self.SoundNames["samm_2-0"] = {"subway_trains/ezh3/rc_ars/2-0.mp3"} + self.SoundPositions["samm_0-2"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_2-0"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_0-1"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_revers_out"] = {60,1e9,Vector(442.2-6,-50,-10),0.70} + self.SoundPositions["samm_revers_in"] = {60,1e9,Vector(442.2-6,-50,-10),0.70} + + self.SoundNames["ring"] = {loop=0.05,"subway_trains/717/ring/ringc_start.wav","subway_trains/717/ring/ringc_loop.wav","subway_trains/717/ring/ringc_end.mp3"} + self.SoundPositions["ring"] = {150,1e9,Vector(390,-40,20),0.2} + + 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(449.118378+7.6,33.493385,-14.713276),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"} + + --Краны + 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(452, 0,-63),1} + self.SoundNames["rear_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["rear_isolation"] = {300,1e9,Vector(-456, 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.40,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["epk_brake"] = {loop=true,"subway_trains/common/pneumatic/334_brake.wav"} + self.SoundPositions["epk_brake"] = {300,1e9,Vector(437.2,-63.1,-70.0),0.85} + + self.SoundNames["pneumo_TL_open"] = { + "subway_trains/common/334/334_open.mp3", + } + 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(457.3,-53.4+2,21.5),0.1} + self.SoundPositions["igla_off"] = {50,1e9,Vector(457.3,-53.4+2,21.5),0.1} + self.SoundPositions["igla_start1"] = {50,1e9,Vector(457.3,-53.4+2,21.5),0.1} + self.SoundPositions["igla_start2"] = {50,1e9,Vector(457.3,-53.4+2,21.5),0.1} + + self.SoundNames["upps"] = {"subway_trains/common/other/upps/upps1.mp3","subway_trains/common/other/upps/upps2.mp3"} + self.SoundPositions["upps"] = {60,1e9,Vector(443,-64,4),0.5} + + 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","subway_trains/common/pnm/pnm_switch_off2.mp3"} + self.SoundNames["pnm_button1_on"] = { + "subway_trains/common/pnm/pnm_button_push.mp3", + "subway_trains/common/pnm/pnm_button_push2.mp3", + "subway_trains/common/pnm/pnm_button_push3.mp3", + } + + self.SoundNames["pnm_button2_on"] = { + "subway_trains/common/pnm/pnm_button_push4.mp3", + "subway_trains/common/pnm/pnm_button_push5.mp3", + "subway_trains/common/pnm/pnm_button_push6.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", + "subway_trains/common/pnm/pnm_button_release6.mp3", + } + + 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(450,-30,-55)} + + --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", "AnnouncementsRRI") + + 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 = "Ezh", + WagType = 2, + ARS = { + NoEPK = true, + NoUAVA = true, + }, + ALS = { + HaveAutostop = true, + }, + EKKType = 703, +} +ENT.NumberRanges = {{3001,3100},{3301,3400},{3501,3699},{4701,4750},{4851,4900}} diff --git a/lua/entities/gmod_subway_ezh3/cl_init.lua b/lua/entities/gmod_subway_ezh3/cl_init.lua new file mode 100644 index 0000000..7681ddf --- /dev/null +++ b/lua/entities/gmod_subway_ezh3/cl_init.lua @@ -0,0 +1,2041 @@ +-------------------------------------------------------------------------------- +-- 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 = {} + +-- Main panel + +ENT.ButtonMap["Main"] = { + pos = Vector(451.5+6.0,-15.92,-8.9), + ang = Angle(0,-90.8,13), + width = 750, + height = 240, + scale = 0.0588, + hideseat = 0.2, + + buttons = { + ---Блок СÐММ + { ID = "V1Toggle", x=35, y=30, w=45,h=80, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-29, + var="V1",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 = "SAMMSchemeOffSet", x=46, y=61+15+48*2, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl", z = -1, + var="SAMMSchemeOff",speed=16,vmin=1,vmax=0, + sndvol = 0.10, snd = function(val) return val and "button2_on" or "button1_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "SAMMStartSet", x=46+44*1, y=61+15+48*2, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", z = -1, + var="SAMMStart",speed=16,vmin=1,vmax=0, + sndvol = 0.10, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "SAMMResetSet", x=46+44*2, y=61+15+48*2, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", z = -1, + var="SAMMReset",speed=16,vmin=1,vmax=0, + 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 = "SAMMXTLamp", x=46+29*3, y=61+15+48*1, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl", skin = 2, z = -0, + --lamp = {model = "models/metrostroi_train/81/lamp_on.mdl",z = -1.7, var=""} + }}, + {ID = "SAMMSignal1", x=58+29*3, y=32, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl", skin = 4, z = -0, + --lamp = {model = "models/metrostroi_train/81/lamp_on.mdl",z = -1.7, var=""--[[ , var="SAMMOn"--]] } + }}, + {ID = "SAMMSignal2", x=54+29*2, y=32, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl", skin = 4, z = -0, + --lamp = {model = "models/metrostroi_train/81/lamp_on.mdl",z = -1.7, var=""--[[ , var="SAMMBlok"--]] } + }}, + {ID = "SAMMOnToggle", x=58+29*3, y=69, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t2.mdl",ang = 180,z=1, + var="SAMMOn",speed=16, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "SAMMUnitToggle", x=54+29*2, y=69, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=1, + var="SAMMUnit",speed=16, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "SAMMX2Toggle", x=46+29*2, y=61+15+48*1, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t2.mdl",ang = 180,z=1, + var="SAMMX2",speed=16, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "SAMMAheadToggle", x=46+29*1, y=61+15+48*1, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t2.mdl",ang = 180,z=1, + var="SAMMAhead",speed=16, + sndvol = 1, snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "SAMMAcceptToggle", x=46, y=61+15+48*1, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_pp250.mdl",ang = 180,z=1, + var="SAMMAccept",speed=16, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + ---Блок ОÑновной + {ID = "KU8Set", x=227, y=61, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl", z = -1, + var="KU8",speed=16,vmin=1,vmax=0, + sndvol = 0.10, snd = function(val) return val and "button2_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "R_Program1Set", x=227, y=61+48*1, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", z = -1, + var="R_Program1",speed=16,vmin=1,vmax=0, + 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 = "R_Program2Set", x=227, y=61+48*2, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", z = -1, + var="R_Program2",speed=16,vmin=1,vmax=0, + 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 = "VU14Toggle", x=258, y=61+4, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t2.mdl",ang = 180,z=-2, + var="VU14",speed=16, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.LNear","Train.Buttons.LFar"}, + }}, + {ID = "GLightsToggle", x=258, y=61+4+48*1, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t2.mdl",ang = 180,z=-2, + var="GLights",speed=16, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "VAHToggle", x=258, y=61+4+48*2, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t2.mdl",ang = 180,z=-2, + var="VAH",speed=16, + plomb = {model = "models/metrostroi_train/81/plomb.mdl",ang=270,x=-1,y=24,z=-2,var="VAHPl", ID="VAHPl",}, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "V4Set", x=292, y=61+3+48*1, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", z = -1, + var="V4",speed=16,vmin=1,vmax=0, + 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 = "V5Set", x=341, y=61+3+48*1, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", z = -1, + var="V5",speed=16,vmin=1,vmax=0, + 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 = "KU11Set", x=292, y=61+6.5+48*2, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl", z = -1, + var="KU11",speed=16,vmin=1,vmax=0, + 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 = "KVTSet", x=341, y=61+6.5+48*2, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", z = -1, + var="KVT",speed=16,vmin=1,vmax=0, + sndvol = 0.10, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "KBSet", x=340, y=61+1, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", z = -1, + var="KB",speed=16,vmin=1,vmax=0, + sndvol = 0.10, snd = function(val) return val and "button3_on" or "button2_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "RKLamp", x=292, y=61+1, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_kblamp.mdl", skin = 2, z = 5,-- color = Color(60,255,255), + lamp = {model = "models/metrostroi_train/81-710/ezh3_kblamp2.mdl",z = 5-4,color = Color(255,150,150), var="LRK", + lcolor=Color(255,50,20),lz = 20,lbright=2,lfov=130,lfar=16,lnear=8,lshadows=0}, + sprite = {bright=0.4,size=0.25,scale=0.07,color=Color(255,50,20),z=6} + }}, + {ID = "ARSToggle", x=374, y=61+4, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t2.mdl",ang = 180,z=-2, + var="ARS",speed=16, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "R_UNchToggle", x=374, y=61+4+48, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t2.mdl",ang = 180,z=-2, + var="R_UNch",speed=16, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "V2Toggle", x=493, y=55, w=45,h=80, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-30, + var="V2",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"}, + }}, + {ID = "R_RadioToggle", x=374, y=160, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=-2, + var="R_Radio",speed=16, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "ALSToggle", x=374+40, y=61+2, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t2.mdl",ang = 180,z=-2, + var="ALS",speed=16, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "KU9Set", x=374+43, y=58+47*1, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", z = -1, + var="KU9",speed=16,vmin=1,vmax=0, + sndvol = 0.10, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "RingSet", x=374+40, y=61+1+47*2, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl", z = -1, + var="Ring",speed=16,vmin=1,vmax=0, + 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 = "PLightsToggle", x=372+40*2, y=61+7, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t2.mdl",ang = 180,z=-2, + var="PLights",speed=16, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "V10Set", x=374+40*2, y=61+4+48, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl",ang = 180,z=-2, + var="V10",speed=16,vmin=1,vmax=0, + sndvol = 0.10, snd = function(val) return val and "button1_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "KU7Set", x=374+40*2+12+45, y=61+4+48*2, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl",ang = 180,z=-2, + var="KU7",speed=16,vmin=1,vmax=0, + sndvol = 0.10, snd = function(val) return val and "button1_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "KU12Set", x=374+40*2+12, y=61+4+48*2, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl",ang = 180,z=-2, + var="KU12",speed=16,vmin=1,vmax=0, + sndvol = 0.10, snd = function(val) return val and "button3_on" or "button2_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + + ---Блок Резервный + {ID = "KAHSet", x=610, y=61+4+48*2, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl",ang = 180,z=-2, + var="KAH",speed=16,vmin=1,vmax=0, + sndvol = 0.10, snd = function(val) return val and "button3_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "KU15Set", x=610+48*2, y=61+4+48*2, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_metal.mdl",ang = 180,z=-2, + var="KU15",speed=16,vmin=1,vmax=0, + sndvol = 0.10, snd = function(val) return val and "button2_on" or "button1_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "KU10Set", x=610+48*1, y=61+4+48*2, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",ang = 180,z=-2, + var="KU10",speed=16,vmin=1,vmax=0, + sndvol = 0.10, snd = function(val) return val and "button3_on" or "button2_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "RSTToggle", x=693+30, y=61+2+48, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t2.mdl",ang = 180,z=-2, + var="RST",speed=16, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "R_GToggle", x=693, y=61+2+48, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t2.mdl",ang = 180,z=-2, + var="R_G",speed=16, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }},--[[ + {ID = "Custom1Toggle", x=600, y=80, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t2.mdl",ang = 180,z=-2, + var="Custom1",speed=16, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "Custom2Set", x=600+25, y=80, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t2.mdl",ang = 180,z=-2, + var="Custom2",speed=16, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "Custom3Set", x=600+50, y=80, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t2.mdl",ang = 180,z=-2, + var="Custom3",speed=16, + sndvol = 1, snd = function(val) return val and "switch_on" or "switch_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }},--]] + {ID = "!AnnPlay", x=693-25, y=61+2+48, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl", z = -4.1, + --lamp = {model = "models/metrostroi_train/81/lamp_on.mdl",skin = 2, var="AnnPlay"} + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=75,x=-0.3,y=-0.3,z=22,color=Color(255,130,90),var="AnnPlay",getfunc=function(ent) return (ent.AnnLamp or 0)^1.5*2 end}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(255,130,90)}, + }}, + } +} + +ENT.ButtonMap["Panel"] = { + pos = Vector(451.5+9.3,-16.5,-3), + ang = Angle(0,-93.7,62), + width = 750, + height = 110, + scale = 0.0588, + buttons = { + --ARS + {ID = "!L0", x=272,y=12,tooltip="",w=22, h=13, model = { + sprite = {bright=0.20,size=0.25,scale=0.05,vscale=0.04,color=Color(255, 180, 25),y=-1,z=-3,lamp="light_0",hidden="ezh3_l0"} + }}, + {ID = "!L04", x=309,y=12,tooltip="",w=22, h=13, model = { + sprite = {bright=0.20,size=0.25,scale=0.05,vscale=0.04,color=Color(255, 180, 25),y=-1,z=-3,lamp="light_OCh",hidden="ezh3_loch"} + }}, + {ID = "!L40", x=272,y=50,tooltip="",w=22, h=13, model = { + sprite = {bright=0.20,size=0.25,scale=0.05,vscale=0.04,color=Color(255, 251, 148),y=-2,z=-3,lamp="light_40",hidden="ezh3_l40"} + }}, + {ID = "!L60", x=309,y=50,tooltip="",w=22, h=13, model = { + sprite = {bright=0.20,size=0.25,scale=0.05,vscale=0.04,color=Color(116, 212, 163),y=-2,z=-3,lamp="light_60",hidden="ezh3_l60"} + }}, + {ID = "!L70", x=272,y=85,tooltip="",w=22, h=13, model = { + sprite = {bright=0.20,size=0.25,scale=0.05,vscale=0.04,color=Color(116, 212, 163),y=0,z=-3,lamp="light_70",hidden="ezh3_l70"} + }}, + {ID = "!L80", x=309,y=85,tooltip="",w=22, h=13, model = { + sprite = {bright=0.20,size=0.25,scale=0.05,vscale=0.04,color=Color(104, 190, 146),y=0,z=-3,lamp="light_80",hidden="ezh3_l80"} + }}, + + {ID = "!LKT", x=272+189,y=17,tooltip="",w=22, h=13, model = { + sprite = {bright=0.20,size=0.25,scale=0.05,vscale=0.04,color=Color(255, 200, 25),y=-1,z=-3,lamp="light_KT",hidden="ezh3_lkt"} + }}, + {ID = "!LSN", x=309+189,y=17,tooltip="",w=22, h=13, model = { + sprite = {bright=0.20,size=0.25,scale=0.05,vscale=0.04,color=Color(255, 180, 25),y=-1,z=-3,lamp="light_rRP",hidden="ezh3_lrp"} + }}, + {ID = "!LKVD", x=272+189,y=50,tooltip="",w=22, h=13, model = { + sprite = {bright=0.20,size=0.25,scale=0.05,vscale=0.04,color=Color(255, 251, 148),y=0,z=-3,lamp="light_KVD",hidden="ezh3_lkvd"} + }}, + {ID = "!LRP", x=309+189,y=50,tooltip="",w=22, h=13, model = { + sprite = {bright=0.20,size=0.25,scale=0.05,vscale=0.04,color=Color(76, 167, 121),y=0,z=-3,lamp="Green_rp",hidden="ezh3_lrpgreen"} + }}, + {ID = "!LPU", x=272+189,y=83,tooltip="",w=22, h=13--[[, model = { + sprite = {bright=0 or 0.15,size=0.25,scale=0.06,vscale=0.04,color=Color(255,20,40),y=-4,z=-3,lamp="LPU",hidden="ezh3_lpu"} + }]]}, + {ID = "!LSD", x=309+189,y=83,tooltip="",w=22, h=13, model = { + sprite = {bright=0.20,size=0.25,scale=0.05,vscale=0.04,color=Color(136, 159, 211),y=0,z=-3,lamp="light_SD",hidden="ezh3_lsd"} + }}, + + {ID = "!BatteryVoltage", x=120-80,y=25,tooltip="",w=60, h=50,tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BatteryVoltage"),ent:GetPackedRatio("BatteryVoltage")) end}, + {ID = "!EnginesCurrent", x=120-8,y=25,tooltip="",w=60, h=50,tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesCurrent"),ent:GetPackedRatio("EnginesCurrent")*1000-500) end}, + {ID = "!HighVoltage", x=120+80-18,y=25,tooltip="",w=60, h=50,tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.HighVoltage"),ent:GetPackedRatio("EnginesVoltage")*1000) end}, + {ID = "!Speedometer", x=352,y=25,tooltip="",w=85, h=70,tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.Speed"),ent:GetPackedRatio("Speed")*100) end}, + {ID = "!BLTLPressure", x=588,y=65,tooltip="",radius=40,tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BLTLPressure"),ent:GetPackedRatio("TLPressure")*16,ent:GetPackedRatio("BLPressure")*16) end}, + {ID = "!BCPressure", x=688,y=65,tooltip="",radius=40,tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BCPressure"),ent:GetPackedRatio("BCPressure")*6) end}, + } +} + +--[[ +ENT.ButtonMap["Back2"] = { + pos = Vector(405.5,25.9,4.0), + ang = Angle(0,90,90), + width = 280, + height = 340, + scale = 0.1088, + + buttons = { + {ID="!HVHuse",x=0, y=12, w=280, h=130, tooltip=""}, + {ID="!AKBCharge",x=0, y=170, w=300, h=270, tooltip=""}, + {ID="!Heater",x=280, y=170, w=80, h=300, tooltip=""}, + } +} +--]] + +ENT.ButtonMap["RUM"] = { + pos = Vector(406.45,-56.75,16.7), + ang = Angle(0,90,90), + width = 140, + height = 250, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "RUMToggle", x=0, y=0, w=140, h=250, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_sammrc.mdl", ang = Angle(90,180+45,0), z=-20,y=117, + var="RUM",speed=2, vmax=0.3, vmin=0.7, + plomb = {var="RUMPl", ID="RUMPl",}, + sndvol = 0.5, snd = function(val) return val and "samm_0-2" or "samm_2-0" end, + sndmin = 60, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} +ENT.ClientProps["rum_wrench"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = ENT.ButtonMap["RUM"].pos+Vector(-1.1,4.35,-15.15), + ang = Angle(0,270-93,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, +} + +--VU Panel +ENT.ButtonMap["VU"] = { + pos = Vector(456+11,-16.55,-4.0), + ang = Angle(0,180,90), + width = 120, + height = 120, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "VUToggle", x=60, y=60, radius=60, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_brown.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}}, + var="VU",speed=6, + sndvol = 1, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} +ENT.ButtonMap["VUHelper"] = { + pos = Vector(458,-14,-4.0), + ang = Angle(0,-45,90), + width = 80, + height = 80, + scale = 0.0625, + + buttons = { + {ID = "VUToggle", x=40, y=40, radius=40, tooltip=""}, + } +} + + +ENT.ButtonMap["Stopkran"] = { + pos = Vector(461.6,27,3), + ang = Angle(0,-90,90), + width = 200, + height = 1300, + scale = 0.1/2, + buttons = { + {ID = "EmergencyBrakeValveToggle",x=0, y=0, w=200, h=1300, tooltip="", tooltip="",tooltip="",states={"Train.Buttons.Closed","Train.Buttons.Opened"},var="EmergencyBrakeValve"}, + } +} + +ENT.ButtonMap["AVMain"] = { + pos = Vector(405.5,37.8,36), + ang = Angle(0,90,90), + width = 335, + height = 270, + scale = 0.0625, + hide = 0.8, + + buttons = { + {ID = "AVToggle", x=0, y=0, w=300, h=380, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_av8r.mdl", 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, + }}, + } +} + + +ENT.ButtonMap["KRR"] = { + pos = Vector(403,-23.5-0.5,4), + ang = Angle(0,90,90), + width = 20, + height = 20, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "KRRSet", x=10, y=10, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_red.mdl", + var="KRR",speed=16,vmin=1,vmax=0, + sndvol = 0.10, snd = function(val) return val and "button1_on" or "button3_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + } +} +---AV1 Panel +ENT.ButtonMap["AV1"] = { + pos = Vector(403.5,39,18), + ang = Angle(0,90,90), + width = 290+0, + height = 155, + 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, + 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=110, y=0, w=100, h=140, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_black.mdl", z=20, ang = 180, + 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=220, y=0, w=100, h=140, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_black.mdl", z=20, ang = 180, + 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), + }}, + } +} +ENT.ButtonMap["ASNP"] = { + pos = Vector(462.77,-51.43-1.3,5.85), + ang = Angle(-.4,230,90), + width = 220, + height = 100, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "R_ASNPMenuSet",x=100, y=40, radius=8, tooltip = "Информатор: Меню",model = { + model = "models/metrostroi_train/81-720/button_round.mdl", + var="R_ASNPMenu",speed=12, vmin=0, vmax=0.9, + sndvol = 0.5,snd = function(val) return val and "pnm_button1_on" or "pnm_button1_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "R_ASNPUpSet",x=140, y=8, radius=8, tooltip = "Информатор: Вверх",model = { + model = "models/metrostroi_train/81-720/button_round.mdl", + var="R_ASNPUp",speed=12, vmin=0, vmax=0.9, + sndvol = 0.5,snd = function(val) return val and "pnm_button1_on" or "pnm_button2_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "R_ASNPDownSet",x=140, y=8+15, radius=8, tooltip = "Информатор: Вниз",model = { + model = "models/metrostroi_train/81-720/button_round.mdl", + var="R_ASNPDown",speed=12, vmin=0, vmax=0.9, + sndvol = 0.5,snd = function(val) return val and "pnm_button2_on" or "pnm_button1_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "R_ASNPOnToggle",x=52, y=8, radius=8, tooltip = "Информатор: Включение",model = { + model = "models/metrostroi_train/81-720/tumbler2.mdl", ang=0, z = 7, + var="R_ASNPOn",speed=12, vmin=1, vmax=0, + sndvol = 0.5,snd = function(val) return val and "pnm_on" or "pnm_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + } +} + +ENT.ButtonMap["ASNPScreen"] = { + pos = Vector(459.77,-54.43-1.3,5.85), + ang = Angle(-.4,230,90), + width = 512, + height = 128, + scale = 0.025/3, + hideseat = 0.2, + hide=true, +} + +ENT.ButtonMap["IGLAButtons"] = { + pos = Vector(460.9,-53.3,14), + ang = Angle(-0,229.5,90), + width = 87, + height = 70, + scale = 0.0625, + hideseat = 0.2, + buttons = { + {ID = "IGLA1USet",x=11, y=39, w=12, h=7, tooltip=""}, + {ID = "IGLA1Set",x=11, y=46, w=12, h=7, tooltip=""}, + {ID = "IGLA1DSet",x=11, y=53, w=12, h=7, tooltip=""}, + {ID = "IGLA2USet",x=65, y=39, w=12, h=7, tooltip=""}, + {ID = "IGLA2Set",x=65, y=46, w=12, h=7, tooltip=""}, + {ID = "IGLA2DSet",x=65, y=53, w=12, h=7, tooltip=""}, + {ID = "!IGLASR",x=17.9, y=10.5, radius=3, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl", var="IGLASR",color=Color(175,250,20),z=-2}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(175,250,20),z=-1,} + }}, + {ID = "!IGLARX",x=27.5, y=10.5, radius=3, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl", var="IGLARX",color=Color(255,56,30),z=-2}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,56,30),z=-1,} + }}, + {ID = "!IGLAErr",x=40.5, y=10.5, radius=3, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl", var="IGLAErr",color=Color(255,168,000),z=-2}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,168,000),z=-1,} + }}, + {ID = "!IGLAOSP",x=50, y=10.5, radius=3, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl", var="IGLAOSP",color=Color(175,250,20),z=-2}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(175,250,20),z=-1,} + }}, + {ID = "!IGLAPI",x=59.5, y=10.5, radius=3, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl", var="IGLAPI",color=Color(255,56,30),z=-2}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,56,30),z=-1,} + }}, + {ID = "!IGLAOff",x=69, y=10.5, radius=3, tooltip="", model = { + lamp = {speed=16,model = "models/metrostroi_train/common/lamps/svetodiod2.mdl", var="IGLAOff",color=Color(255,56,30),z=-2}, + sprite = {bright=0.5,size=0.25,scale=0.01,color=Color(255,56,30),z=-1,} + }}, + } +} +ENT.ButtonMap["IGLA"] = { + pos = Vector(460.5,-53.87,12.67), + ang = Angle(-0,229.5,90), + width = 512, + height = 128, + scale = 0.025/2.96, + hideseat = 0.2, + hide=true, +} + +ENT.ClientProps["E_informator"] = { + model = "models/metrostroi_train/equipment/rri_informator_portable.mdl", + pos = Vector(404.7,-25,-14-4), + ang = Angle(0,0,0), + hideseat = 0.2, +} +ENT.ButtonMap["RRI"] = { + pos = ENT.ClientProps["E_informator"].pos+Vector(-0.65,-0.5,5), + ang = Angle(0,90,0), + width = 60, + height = 25, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "RRIEnableToggle",x=10,y=12.5,radius=10,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=-4, + var="RRIEnable",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "!RRIRewind",x=30,y=12.5,radius=0,model = { + model = "models/metrostroi_train/81-502/buttons/tumbler_b_a.mdl",ang = 180,z=-3, + getfunc = function(ent) return ent:GetPackedRatio("RRIRewind") end, + var="RRIRewind",speed=8, + sndvol = 0.5,snd = function(_,val) return val==2 and "triple_0-up" or val==0 and "triple_0-down" or "triple_up-0" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "RRIRewindSet2",x=30-5,y=12.5-10,w=10,h=10,tooltip=""}, + {ID = "RRIRewindSet0",x=30-5,y=12.5,w=10,h=10,tooltip=""}, + + {ID = "RRIAmplifierToggle",x=50,y=12.5,radius=10,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_tumbler_t1.mdl",ang = 180,z=-4, + var="RRIAmplifier",speed=16, + sndvol = 1,snd = function(val) return val and "switchbl_on" or "switchbl_off" end, + sndmin = 90,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "!RRIOn",x=70,y=12.5,radius=10,tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_slc77.mdl",z = -13, + lamp = {model = "models/metrostroi_train/81-717/buttons/slc_77_lamp.mdl",ang=62,x=-0.3,y=-0.3,z=20.6, var="RRIOn", color=Color(210,170,255), + getfunc=function(ent,min,max,var) return ent:GetPackedBool(var) and (1-(ent.AnnLamp or 0)^1.5*0.6) or 0 end,}, + sprite = {bright=0.2,size=.5,scale=0.03,z=20,color=Color(210,170,255)}, + }}, + } +} +ENT.ButtonMap["RRIScreen"] = { + pos = ENT.ClientProps["E_informator"].pos+Vector(2,-2.9,5), + ang = Angle(0,90,90), + width = 121, + height = 103, + scale = 0.07, + hideseat = 0.2, + hide=true, + + buttons = { + {ID = "RRIUp",x=30,y=60,radius=10,tooltip=""}, + {ID = "RRIDown",x=30,y=80,radius=10,tooltip=""}, + {ID = "RRILeft",x=20,y=70,radius=10,tooltip=""}, + {ID = "RRIRight",x=40,y=70,radius=10,tooltip=""}, + } +} +-- Battery panel +ENT.ButtonMap["Battery"] = { + pos = Vector(403.5,21.24+1,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(452.5+1.6,59.5,22.44), + ang = Angle(0,-53,90), + width = 60, + height = 235, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "V6Set", x=30, y=149, radius=30, tooltip="", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=-5, color = Color(255,255,255), + var="V6",speed=12, max=0.5, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "V3Toggle", x=30, y=40, radius=30, tooltip="", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=-5, color = Color(255,255,255), + var="V3",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"}, + }}, + {ID = "R_Program1HSet", x=14, y=220, radius=15, tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = 8, + labels={{model="models/metrostroi_train/81-702/labels/vu_labels.mdl",skin=7,ang=90,z=2,x=0,y=24}}, + var="R_Program1H",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button1_on" or "button3_off" end, + sndmin = 60,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + {ID = "R_Program2HSet", x=44, y=220, radius=15, tooltip="",model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",z = 8, + labels={{model="models/metrostroi_train/81-702/labels/vu_labels.mdl",skin=8,ang=90,z=2,x=0,y=24}}, + var="R_Program2H",speed=16,vmin=1,vmax=0, + sndvol = 0.07,snd = function(val) return val and "button1_on" or "button3_off" end, sndmin = 60,sndmax = 1e3,sndang = Angle(-90,0,0), + }}, + } +} + + +ENT.ButtonMap["DriverValveBLTLDisconnect"] = { + pos = Vector(427,-60.78,-22.65), + ang = Angle(0,90,0), + width = 170, + height = 100, + scale = 0.0625, + + buttons = { + {ID = "DriverValveBLDisconnectToggle", x=0, y=0, w=95, h=100, tooltip="", model = { + var="DriverValveBLDisconnect",sndid="brake_disconnect", + sndvol = 1, snd = function(val) return "disconnect_valve" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + {ID = "DriverValveTLDisconnectToggle", x=95, y=0, w=75, h=100, tooltip="", model = { + var="DriverValveTLDisconnect",sndid="train_disconnect", + sndvol = 1, snd = function(val) return val and "pneumo_TL_open" or "pneumo_TL_disconnect" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} + +ENT.ButtonMap["EPKDisconnect"] = { + pos = Vector(433,-60.78,-28.65), + ang = Angle(0,90,0), + width = 150, + height = 100, + scale = 0.0625, + + buttons = { + {ID = "EPKToggle", x=0, y=0, w=150, h=100, tooltip="", model = { + var="EPK",sndid="EPK_disconnect", + sndvol = 1, snd = function(val) return "disconnect_valve" end, + sndmin = 90, 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"}}, + } +} + +-- UAVA +ENT.ButtonMap["UAVAPanel"] = { + pos = Vector(453.5,56,-5), + ang = Angle(0,-70,90), + width = 180, + height = 200, + scale = 0.0625, + + buttons = { + {ID = "UAVAToggle",x=0, y=0, w=60, h=200, tooltip="", model = { + plomb = {var="UAVAPl", ID="UAVAPl",}, + var="UAVA", + sndid="UAVALever",sndvol = 1, snd = function(val) return val and "uava_on" or "uava_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "UAVACToggle",x=60, y=0, w=120, h=200, tooltip="",var="UAVAC",states={"Train.Buttons.UAVAOff","Train.Buttons.UAVAOn"}}, + } +} + +ENT.ClientProps["tab"] = { + model = "models/metrostroi_train/Equipment/tab.mdl", + pos = Vector(-0.0,0,-0), + ang = Angle(0,0,0), + skin = 3, + hide = 2, +} +ENT.ButtonMap["Route"] = { + pos = Vector(465.7,35.3,2), + ang = Angle(0,98,90), + width = 153, + height = 130, + scale = 0.0625, + buttons = { + {ID = "RouteNumber1+",x=76.5*0,y=0, w=76.5,h=65, tooltip=""}, + {ID = "RouteNumber2+",x=76.5*1,y=0, w=76.5,h=65, tooltip=""}, + {ID = "RouteNumber1-",x=76.5*0,y=65,w=76.5,h=65, tooltip=""}, + {ID = "RouteNumber2-",x=76.5*1,y=65,w=76.5,h=65, tooltip=""}, + } +} +ENT.ClientProps["route"] = { + model = "models/metrostroi_train/common/routes/ezh/route_holder.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2, +} +ENT.ClientProps["route1"] = { + model = "models/metrostroi_train/common/routes/ezh/route_number1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + callback = function(ent) + ent.RouteNumber.Reloaded = false + end, + hide = 2, +} +ENT.ClientProps["route2"] = { + model = "models/metrostroi_train/common/routes/ezh/route_number2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2, + callback = function(ent) + ent.RouteNumber.Reloaded = false + end, +} + + + +ENT.ButtonMap["FrontDoor"] = { + pos = Vector(468,16,43.4), + ang = Angle(0,-90,90), + width = 642, + height = 1780, + 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(416,64,43.4), + ang = Angle(0,0,90), + width = 642, + height = 1780, + scale = 0.1/2, + buttons = { + {ID = "CabinDoor",x=0,y=0,w=642,h=2000, 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,43.4), + ang = Angle(0,90,90), + width = 642, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=642,h=2000, 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,16,43.4), + ang = Angle(0,-90,90), + width = 642, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=642,h=2000, 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["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["brake334"] = { + model = "models/metrostroi_train/81-703/cabin_cran_334.mdl", + pos = Vector(448.62+3.6,-56.5,-38.0), + ang = Angle(0,-150,0), + hideseat = 0.2, +} +ENT.ClientProps["brake"] = { + model = "models/metrostroi_train/81-710/ezh3_km334.mdl", + pos = Vector(448.62+3.2,-48.69,-15.0), + ang = Angle(0,-90+2,90-27), + hideseat = 0.2, +} +ENT.ClientProps["controller"] = { + model = "models/metrostroi_train/81-710/ezh3_kv.mdl", + pos = Vector(451.36+2,-26.45,-17), + ang = Angle(0,-91,60), + hideseat = 0.2, +} + + +ENT.ClientProps["reverser"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = Vector(452.95,-21.00,-15.9), + ang = Angle(180,89,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["reverser"] = { + model = "models/metrostroi/81-717/reverser.mdl", + pos = ENT.ClientProps["controller"].pos+Vector(0,0.35,-0.6), + ang = Angle(0,45,90) +}--]] +ENT.ClientProps["krureverser"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = Vector(404.8+0.45,-23.5,-2.2), + ang = Angle(30+180,90,90), + 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["reverser"].pos+Vector(-4.1,-0.65,-0.9), + 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-710/ezh3_red_brake.mdl", + pos = Vector(430.7,-58.90,-21.01), + ang = Angle(0,270,0), + hideseat = 0.2, +} +ENT.ClientProps["train_disconnect"] = { + model = "models/metrostroi_train/81-710/ezh3_blue_brake.mdl", + pos = Vector(430.7+0.5,-56.50,-25.51), + ang = Angle(0,270,0), + hideseat = 0.2, +} +ENT.ClientProps["EPK_disconnect"] = { + model = "models/metrostroi_train/81-710/ezh3_epk.mdl", + pos = Vector(430.7+6.87,-56.30,-28.51), + ang = Angle(0,270,0), + hideseat = 0.2, +} + +ENT.ClientProps["EmergencyBrakeValve"] = { + model = "models/metrostroi_train/81-710/ezh3_stopkran.mdl", + pos = Vector(454+10.34,24.45,-2.39), + ang = Angle(0,180,0), + hideseat = 0.2, +} + + +ENT.ClientProps["parking_brake"] = { + model = "models/metrostroi_train/81-703/cabin_parking.mdl", + pos = Vector(449.118378+7.6,33.493385+2,-14.713276), + ang = Angle(-90.000000,7,0.000000), + hideseat = 0.2, +} + +-------------------------------------------------------------------------------- +ENT.ClientProps["train_line"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(457.441650,-50.929134,-6.880497), + ang = Angle(-130.645157,119.032257,-130.645157), + hideseat = 0.2, +} +ENT.ClientProps["brake_line"] = { + model = "models/metrostroi_train/Equipment/arrow_tm.mdl", + pos = Vector(457.549988,-50.889999,-6.960000), + ang = Angle(-130.645157,119.032257,-130.645157), + hideseat = 0.2, +} +ENT.ClientProps["brake_cylinder"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(457.100006,-56.860001,-6.950000), + ang = Angle(-130.645157,124.838707,-136.451614), + hideseat = 0.2, +} +---------------------------------------------------------------- +ENT.ClientProps["voltmeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(448.201+9.90,-28.78,-6.69), + ang = Angle(-62,0,0), + hideseat = 0.2, +} + +ENT.ClientProps["ampermeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(448.20+10.09,-24.66,-6.69), + ang = Angle(-62,0,0), + hideseat = 0.2, +} + +ENT.ClientProps["volt1"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(448.20+10.21,-20.43,-6.69), + ang = Angle(-62,0,0), + hideseat = 0.2, +} +ENT.ClientProps["speed1"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(457.175720,-39.546356,-8.339609), + ang = Angle(-61.5,-5,0), + bscale = Vector(1,1,1.5), + hideseat = 0.2, +} + +-------------------------------------------------------------------------------- +--[[ENT.ClientProps["book"] = { + model = "models/props_lab/binderredlabel.mdl", + pos = Vector(401.763123,-32.429512,48.305576), + ang = Angle(53,0,90), +}]] + +ENT.ClientProps["salon"] = { + model = "models/metrostroi_train/81-710/ezh3_salon.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2.0, +} +ENT.ClientProps["salon3"] = { + model = "models/metrostroi_train/81-710/ezh3_cabine.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2.0, +} +ENT.ClientProps["salon2"] = { + model = "models/metrostroi_train/81-703/81-703_Underwagon.mdl", + pos = Vector(-23.5,0,-191), + ang = Angle(0,0,0), + hide = 2.0, +} +ENT.ClientProps["asotp"] = { + model = "models/metrostroi_train/81-710/710_asotp.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat = 1.0, +} + +--Gauges light switch mesh +ENT.ClientProps["Gauges_lit"] = { + model = "models/metrostroi_train/81-710/710_gaugeslit.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat = 1.0, +} +--Panel lamps +ENT.ClientProps["ezh3_l0"] = { + model = "models/metrostroi_train/81-710/ezh3_l0.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(200,200,200), + hideseat = 1.0, +} +ENT.ClientProps["ezh3_loch"] = { + model = "models/metrostroi_train/81-710/ezh3_loch.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(200,200,200), + hideseat = 1.0, +} +ENT.ClientProps["ezh3_l40"] = { + model = "models/metrostroi_train/81-710/ezh3_l40.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(200,200,200), + hideseat = 1.0, +} +ENT.ClientProps["ezh3_l60"] = { + model = "models/metrostroi_train/81-710/ezh3_l60.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(200,200,200), + hideseat = 1.0, +} +ENT.ClientProps["ezh3_l70"] = { + model = "models/metrostroi_train/81-710/ezh3_l70.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(200,200,200), + hideseat = 1.0, +} +ENT.ClientProps["ezh3_l80"] = { + model = "models/metrostroi_train/81-710/ezh3_l80.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(200,200,200), + hideseat = 1.0, +} +ENT.ClientProps["ezh3_lkt"] = { + model = "models/metrostroi_train/81-710/ezh3_lkt.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(200,200,200), + hideseat = 1.0, +} +ENT.ClientProps["ezh3_lkvd"] = { + model = "models/metrostroi_train/81-710/ezh3_lkvd.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(200,200,200), + hideseat = 1.0, +} +ENT.ClientProps["ezh3_lpu"] = { + model = "models/metrostroi_train/81-710/ezh3_lpu.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(200,200,200), + hideseat = 1.0, +} +ENT.ClientProps["ezh3_lsd"] = { + model = "models/metrostroi_train/81-710/ezh3_lsd.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(200,200,200), + hideseat = 1.0, +} +ENT.ClientProps["ezh3_lrp"] = { + model = "models/metrostroi_train/81-710/ezh3_lrp.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(200,200,200), + hideseat = 1.0, +} +ENT.ClientProps["ezh3_lrpgreen"] = { + model = "models/metrostroi_train/81-710/ezh3_lrpgreen.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + color = Color(200,200,200), + hideseat = 1.0, +} +ENT.ClientProps["ezh3_lamp1"] = { + model = "models/metrostroi_train/81-710/ezh3_lamposv1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hideseat = 1.0, +} +ENT.ClientProps["ezh3_lamp2"] = { + model = "models/metrostroi_train/81-502/cabin_lamp_light.mdl", + pos = Vector(0,-0.05,0.17), + ang = Angle(0,0,0), + hide = 0.8, +} +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,150,150), + hide = 2, +} +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,150,150), + hide = 2, +} +ENT.ClientProps["Lamps_half1"] = { + model = "models/metrostroi_train/81-502/lights_group1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide = true, +} +ENT.ClientProps["Lamps_half2"] = { + model = "models/metrostroi_train/81-502/lights_group2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + nohide = true, +} + +ENT.ClientProps["PB"] = { + model = "models/metrostroi_train/81-707/pedal.mdl", + pos = Vector(458.320068,-40.480316,-35.155365), + ang = Angle(90,0,0), + hideseat = 0.2, +} +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,1,1,35,1e3,Angle(-90,0,0)}) + +-------------------------------------------------------------------------------- +-- 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/ezh3_door_noars_with_marshrut.mdl", + pos = Vector(460.62+7.4,-14.53,-7.6), + ang = Angle(0,-90,0), + hide = 2, + callback = function(ent) + ent.LastStation.Reloaded = false + end, +} +ENT.ButtonMap["LastStation"] = { + pos = Vector(460.62+7.4,-14.53,2), + ang = Angle(0,90,90), + width = 500, + height = 150, + scale = 0.0625, + buttons = { + {ID = "LastStation-",x=000,y=0,w=250,h=150, tooltip=""}, + {ID = "LastStation+",x=250,y=0,w=250,h=150, tooltip=""}, + } +} +ENT.ClientProps["door2"] = { + model = "models/metrostroi_train/81-710/81-710_door_tor.mdl", + pos = Vector(-469.8,16.53,-8.2), + 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,-15,-9.4), + 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.38), + ang = Angle(0,-90,0), + hide = 2, +} +ENT.ClientProps["UAVALever"] = { + model = "models/metrostroi_train/81-703/cabin_uava.mdl", + pos = Vector(449+7.7,56.0,-10.24349), + ang = Angle(0,-90+10,0), + hideseat = 0.8, +} + +ENT.ClientProps["RedLights"] = { + model = "models/metrostroi_train/81-703/81-703_red_light.mdl", + pos = Vector(-23+7.2,1,-191), + ang = Angle(0,0,0.000000), + nohide=true, +} +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.3,1,-191), + ang = Angle(0,0,0), + nohide=true, +} + + +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, + } + ENT.ClientProps["TrainNumberR"..i] = { + model = "models/metrostroi_train/common/bort_numbers.mdl", + pos = Vector(295-i*6.6-4*6.6/2,-66.2,-26), + ang = Angle(0,0,0), + skin=0, + hide = 1.5, + callback = function(ent) + ent.WagonNumber = false + end, + } +end +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}, + [2] = { "headlight", Vector(460,0,45), Angle(-20,0,0), Color(255,0,0), fov=164 ,brightness = 0.3, farz=250,texture = "models/metrostroi_train/equipment/headlight2",shadows = 0,backlight=true}, + + [19] = { "headlight", Vector(458.467194,-39.912831,-5.513901), Angle(45,-0.000000,0.000000), Color(255,145,25), farz = 16.7, nearz = 1, shadows = 1, brightness = 2, fov = 155,panellight=true,hidden = "Gauges_lit"}, + --manometers + [20] = { "headlight", Vector(457.679059,-50.208813,-5.092313), Angle(45,0.000000,0.000000), Color(255,145,25), farz = 16, nearz = 1, shadows = 1, brightness = 2, fov = 155,panellight=true,hidden = "Gauges_lit"}, + [21] = { "headlight", Vector(457.579059,-57.208813,-4.092313), Angle(45,0.000000,0.000000), Color(255,145,25), farz = 16, nearz = 1, shadows = 1, brightness = 2, fov = 150,panellight=true,hidden = "Gauges_lit"}, + [22] = { "headlight", Vector(432+18.5,-33.5,47.2), Angle(90,0,0), Color(252, 157, 77), farz = 200, nearz = 0.1, shadows = 0, brightness = 0.3, fov = 160, texture = "models/metrostroi_train/equipment/headlight",hidden = "ezh3_lamp1"}, + --[24] = { "headlight", Vector(448.20+9.4,-55.86,-4.8), Angle(93,0,60), Color(255,145,25), farz = 15, nearz = 1, shadows = 1, brightness = 0, fov = 80}, + --cabinlight + + [9] = { "dynamiclight", Vector(200, 0, -5), Angle(0,0,0), Color(255,220,180), brightness = 3, distance = 200}, + [10] = { "dynamiclight", Vector(-150, 0, -5), Angle(0,0,0), Color(255,220,180), brightness = 3, distance = 200}, + [11] = { "dynamiclight", Vector( 200, 0, -5), Angle(0,0,0), Color(255,220,180), brightness = 4, distance = 260}, + [12] = { "dynamiclight", Vector( 0, 0, -5), Angle(0,0,0), Color(255,220,180), brightness = 4, distance = 260}, + [13] = { "dynamiclight", Vector(-260, 0, -5), Angle(0,0,0), Color(255,220,180), 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 = "salon3"}, + + [5] = { "light", Vector(465+5,-32, 48), Angle(0,0,0), Color(255,50,50), brightness = 0.2, scale = 1.5, texture = "sprites/light_glow02", size = 2 }, + [6] = { "light", Vector(465+5, 32, 48), Angle(0,0,0), Color(255,50,50), brightness = 0.2, scale = 1.5, texture = "sprites/light_glow02", size = 2 }, + [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 }, + + ezh3_lamp1 = {"light", Vector(451,-33.5,47.2), Angle(0,0,0),Color(252, 157, 77),brightness = 0.35,scale = 0.4, texture = "sprites/light_glow02", hidden = "ezh3_lamp1"}, + ezh3_lamp2 = {"light", Vector(404,1.2,56), Angle(0,0,0),Color(252, 157, 77),brightness = 0.25,scale = 0.3, texture = "sprites/light_glow02", hidden = "ezh3_lamp2"}, +} +function ENT:Initialize() + self.BaseClass.Initialize(self) + + self.FrontLeak = 0 + self.RearLeak = 0 + + --self.Train:SetPackedRatio("EmergencyValve_dPdT", leak) + --self.Train:SetPackedRatio("EmergencyValveEPK_dPdT", leak) + --self.Train:SetPackedRatio("EmergencyBrakeValve_dPdT", leak) + self.ASNP = self:CreateRT("710ASNP",512,128) + self.IGLA = self:CreateRT("710IGLA",512,128) + self.RRIScreen = self:CreateRT("710RRI",128,128) + self.CraneRamp = 0 + self.ReleasedPdT = 0 + self.EmergencyValveRamp = 0 + self.EmergencyValveEPKRamp = 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-3*6.6/2,69,-26))) + leftNum:SetSkin(num) + end + if IsValid(rightNum) then + rightNum:SetPos(self:LocalToWorld(Vector(-280-i*6.6-3*6.6/2,-66.2,-26))) + rightNum:SetSkin(num) + end + end +end + +local kruPos = {0,0.2,0.8,1} +-------------------------------------------------------------------------------- +function ENT:Think() + self.BaseClass.Think(self) + if not self.RenderClientEnts or self.CreatingCSEnts then + return + end + + local val = self:Animate("gauges_lit",self:GetPackedBool("GaugeLights") and 1 or 0,0,1,12,false) + self:ShowHideSmooth("Gauges_lit",val) + self:SetLightPower(19,val>0,val)--self:GetPackedBool("PanelLights")) + self:SetLightPower(20,val>0,val)--self:GetPackedBool("PanelLights")) + self:SetLightPower(21,val>0,val)--self:GetPackedBool("PanelLights")) + + local typ = self:GetNW2Int("AnnType",1) + self:HidePanel("RRI",typ~=1) + self:HidePanel("RRIScreen",typ~=1 or self.CurrentCamera ~= 9) + self:ShowHide("E_informator",typ==1) + self:HidePanel("ASNP",typ~=2) + self:HidePanel("ASNPScreen",typ~=2) + self:HidePanel("IGLAButtons",typ~=2) + self:HidePanel("IGLA",typ~=2) + self:ShowHide("asotp",typ==2) + + -- 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 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("ezh3_lamp2",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("ezh3_lamp2",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 + + 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) + local RL = self:Animate("redlights",self:GetPackedBool("RedLight") and 1 or 0,0,1,5,false) + + self:ShowHideSmooth("WhiteLights",HL1) + self:ShowHideSmooth("DistantLights",HL2) + self:ShowHideSmooth("RedLights",RL) + self:SetLightPower(5,RL > 0,RL) + self:SetLightPower(6,RL > 0,RL) + self:SetLightPower(30,HL1 > 0, HL1) + self:SetLightPower(31,HL1 > 0, HL1) + self:SetLightPower(32,HL2 > 0, HL2) + + local bright = HL1*0.3+HL2*0.7 + self:SetLightPower(1,bright>0,bright) + self:SetLightPower(2,RL>0,RL) + + 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 panel = self:Animate("L_2",self:GetPackedBool("PanelLights") and 1 or 0,0,1,5,false) + self:ShowHideSmooth("ezh3_lamp1",panel) + self:SetLightPower("ezh3_lamp1",panel > 0,panel) + self:SetLightPower(22,panel > 0,panel) + + self:ShowHideSmooth("ezh3_lkvd",self:Animate("light_KVD",self:GetPackedBool("KVD") and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("ezh3_lkt",self:Animate("light_KT",self:GetPackedBool("KT") and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("ezh3_lrpgreen",self:Animate("Green_rp",self:GetPackedBool("GRP") and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("ezh3_lrp",self:Animate("light_rRP",self:GetPackedRatio("LSN"),0,1,5,false)) + self:ShowHideSmooth("ezh3_lsd",self:Animate("light_SD",self:GetPackedBool("SD") and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("ezh3_lpu",self:Animate("LPU",self:GetPackedBool("LPU") and 1 or 0,0,1,5,false)) + ---ARS + self:ShowHideSmooth("ezh3_loch",self:Animate("light_OCh",self:GetPackedBool("AR04") and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("ezh3_l0",self:Animate("light_0",self:GetPackedBool("AR0") and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("ezh3_l40",self:Animate("light_40",self:GetPackedBool("AR40") and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("ezh3_l60",self:Animate("light_60",self:GetPackedBool("AR60") and 1 or 0,0,1,5,false)) + self:ShowHideSmooth("ezh3_l80",self:Animate("light_80",self:GetPackedBool("AR80") and 1 or 0,0,1,8,false)) + self:ShowHideSmooth("ezh3_l70",self:Animate("light_70",self:GetPackedBool("AR70") and 1 or 0,0,1,6,false)) + + self:Animate("PB",self:GetPackedBool("PB") and 0 or 1,0,0.2, 12,false) + self:Animate("UAVALever", self:GetPackedBool("UAVA") and 1 or 0, 0,0.6, 128, 3,false) + self:Animate("brake_disconnect",self:GetPackedBool("DriverValveBLDisconnect") and 1 or 0,0.5,0, 4,false) + self:Animate("train_disconnect",self:GetPackedBool("DriverValveTLDisconnect") and 1 or 0,0.5,0, 4,false) + self:Animate("EPK_disconnect",self:GetPackedBool("EPK") and 1 or 0,0.5,0, 3,false) + self:Animate("EmergencyBrakeValve", self:GetPackedBool("EmergencyBrakeValve") and 1 or 0,0.5,0, 7, false) + + self:Animate("brake",self:GetPackedRatio("CranePosition"),0.06, 0.39,5000,100) + self:AnimateFrom("brake334","brake",-0.05, 1.1) + self:Animate("controller",self:GetNW2Int("ControllerPosition")/7, 0.38, 0.04, 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("krureverser",self:GetNW2Int("KRUPosition")/3,0.6,1,3,false) + + self:ShowHide("reverser",self:GetNW2Int("WrenchMode",0)==1) + self:ShowHide("krureverser",self:GetNW2Int("WrenchMode",0)==2) + self:ShowHide("rcureverser",self:GetNW2Int("WrenchMode",0)==3) + + + self:ShowHide("rum_wrench",self.RUMResetTime and CurTime()-self.RUMResetTime<1.5) + if IsValid(self.ClientEnts.rum_wrench) and self.Anims.RUMToggle then + self.ClientEnts.rum_wrench:SetPoseParameter("position",1-self.Anims.RUMToggle.value) + end + if self.LastRUMValue ~= self:GetPackedBool("RUM") then + self.RUMResetTime = CurTime()+1.5 + self.LastRUMValue = self:GetPackedBool("RUM") + end + + ---Animate brakes + self:Animate("brake_line",self:GetPackedRatio("BLPressure"), 0.044, 0.778, 256,3)--,,0.01) + self:Animate("train_line",self:GetPackedRatio("TLPressure"), 0.044, 0.778, 256,2)--,,0.01) + self:Animate("brake_cylinder",self:GetPackedRatio("BCPressure"), 0.052, 0.794,nil,2)--,,0.03) + self:Animate("voltmeter",self:GetPackedRatio("EnginesVoltage"), 0.632,0.36,92,2) + self:Animate("ampermeter",self:GetPackedRatio("EnginesCurrent"), 0.632,0.36, nil, nil, 92,20,3) + self:Animate("volt1",self:GetPackedRatio("BatteryVoltage"),0.6,0.5,45,2) + self:Animate("speed1",self:GetPackedRatio("Speed"),0.645, 0.363, nil, nil, 90,200,20) + + + 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 +--self:InitializeSounds() + 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.8+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 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) + --[[ if emergencyValveEPK > 0 and not self.EmergencyValveEPKStart then + self:PlayOnce("epk_brake_start","bass",1,1) + self.EmergencyValveEPKStart = true + end--]] + if emergencyValveEPK <= 0 and self.EmergencyValveEPKStart then + self.EmergencyValveEPKStart = false + end + + 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) + + -- ARS/ringer alert + self:SetSoundState("ring",self:GetPackedBool("RingEnabled") and 1 or 0,1) + + self:SetSoundState("vpr",self:GetPackedBool("VPR") and 1 or 0,1) + + self:SetSoundState("rt300",self:GetPackedBool("RT300") and 1 or 0,1) + + + -- 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 cabspeaker = self:GetPackedBool("AnnCab") + local work = self:GetPackedBool("AnnPlay") + local noise = self:GetNW2Int("AnnouncerBuzz",-1) > 0 + self.NoiseVolume = self.NoiseVolume or 0 + self.AnnLamp = self.AnnLamp or 0 + + --if self.AnnVolume > annvolume then + --[[ else + self.AnnVolume = math.Clamp(self.AnnVolume + 0.5*(annvolume-self.AnnVolume)*dT,0.1,1) + end--]] + + local noisevolume = 1 + if work and 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 + local annvolume = self.Sounds.announcer1 and IsValid(self.Sounds.announcer1) and self.Sounds.announcer1:GetLevel()*math.Rand(0.9,3) or 0 + + local lamp = math.max(annvolume,noise and self.NoiseVolume or 0) + + self.AnnLamp = math.Clamp(self.AnnLamp + 8*(lamp-self.AnnLamp)*dT,0,1) + if self.AnnLamp < 0.01 then self.AnnLamp=0 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 (k ~= 1 and work or k==1 and cabspeaker) and self.NoiseVolume*(v[3] or 1) or 0,1) + end + if IsValid(self.Sounds["announcer"..k]) then self.Sounds["announcer"..k]:SetVolume((k ~= 1 and work or k==1 and cabspeaker) and (v[3] or 1) or 0) end + end +end + +function ENT:OnAnnouncer(volume, id) + local cabspeaker = self:GetPackedBool("AnnCab") + local work = self:GetPackedBool("AnnPlay") + return (id ~= 1 and work or id == 1 and cabspeaker) and volume or 0 +end + +function ENT:Draw() + self.BaseClass.Draw(self) +end +function ENT:DrawPost() + self.RTMaterial:SetTexture("$basetexture", self.IGLA) + self:DrawOnPanel("IGLA",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(256,64+22,512,128+22,0) + end) + + self.RTMaterial:SetTexture("$basetexture", self.ASNP) + self:DrawOnPanel("ASNPScreen",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(256,64,512,128,0) + end) + + 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) + if true or self.CurrentCamera == 5 then + self.RTMaterial:SetTexture("$basetexture", self.RRIScreen) + self:DrawOnPanel("RRIScreen",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(64,64,128,128,0) + end) + self.RRI.CanDraw = true + end +end + +function ENT:OnButtonPressed(button) +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 == "RVT" then + return range > 0 and "rvt_on" or "rvt_off",location,1,pitch + end + if soundid == "R1_5" then + return range > 0 and "r1_5_on" or "r1_5_off",location,1,pitch + end + if soundid == "RPB" then + return range > 0 and "rpb_on" or "rpb_off",location,1,pitch + end + if soundid == "KD" then + return range > 0 and "kd_on" or "kd_off",location,1,pitch + end + if soundid == "K25" then + return range > 0 and "k25_on" or "k25_off",location,1,pitch + end + if soundid == "KK" then + return range > 0 and "kk_on" or "kk_off",location,1,pitch--0.8 + end + if soundid == "RO" then + return range > 0 and "ro_on" or nil,location,1,pitch + end + if soundid == "AVU" then + return range > 0 and "avu_on" or "avu_off",location,1,0.9 + end + if soundid == "brake" then + self:PlayOnce("brake_f",location,range,pitch) + self:PlayOnce("brake_b",location,range,pitch) + return + end + if soundid == "UAVAC" then + return "uava_reset",location,range,pitch + end + end + return soundid,location,range,pitch +end + +Metrostroi.GenerateClientProps() diff --git a/lua/entities/gmod_subway_ezh3/init.lua b/lua/entities/gmod_subway_ezh3/init.lua new file mode 100644 index 0000000..6cbeb4f --- /dev/null +++ b/lua/entities/gmod_subway_ezh3/init.lua @@ -0,0 +1,577 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +ENT.BogeyDistance = 650 -- Needed for gm trainspawner + +--"DURASelectMain","DURASelectAlternate","DURAToggleChannel","DURAPowerToggle", +ENT.SyncTable = { + "VB","DoorSelect","V4","V5","KU9","KU15","V1","VU14","V2","V3","V6","KU12","KU7","V10","KU8","OtklAVU","KU10","KU11","KRR","R_UNch","R_ZS","R_G","R_Radio","R_Program1","R_Program2","Ring","PB","RC1","VAH","VAD","ARS","ALS","KVT","KB","KAH","VU1","VU2","VU3","AV","VU","PLights","GLights","RST","RUM","KRR","R_ASNPOn", + "R_Program1H","R_Program2H", + "SAMMSchemeOff","SAMMStart","SAMMReset","SAMMOn","SAMMBlok","SAMMX2","SAMMAhead","SAMMAccept","SAMMUnit", + "RRIEnable","RRIAmplifier", + "DriverValveBLDisconnect","DriverValveTLDisconnect","EPK","EmergencyBrakeValve","UAVA","UAVAC", + "GV" +} + +function ENT:Initialize() + self.Plombs = { + VAH = true, + RUM = true, + UAVA = true, + Init = true, + } + -- Set model and initialize + self:SetModel("models/metrostroi_train/81-710/81-710.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create seat entities + self.DriverSeat = self:CreateSeat("driver",Vector(425+5,-39,-31.5),Angle(0,0,0)) + self.InstructorsSeat = self:CreateSeat("instructor",Vector(430,40,-52),Angle(0,90,0),"models/vehicles/prisoner_pod_inner.mdl") + self.ExtraSeat1 = self:CreateSeat("instructor",Vector(443,0,-52),Angle(0,90,0),"models/vehicles/prisoner_pod_inner.mdl") + self.ExtraSeat2 = self:CreateSeat("instructor",Vector(420,-20,-52),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 + --.FrontBogey = self:CreateBogey(Vector( 320,0,-75),Angle(0,180,0),true) + --self.RearBogey = self:CreateBogey(Vector(-320,0,-75),Angle(0,0,0),false) + + 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+3.5,0,-75),Angle(0,0,0),true,"702") + self.RearCouple = self:CreateCouple(Vector(-421.5-3.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+4.5,1.0,-72),Angle(0,0,0),true,"702") + self.RearCouple = self:CreateCouple(Vector(-421+2+3.6-4.5,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 + self.FrontCouple.EKKDisconnected = true + + -- 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_8] = "KU10Set", + + [KEY_EQUAL] = {"R_Program1Set",helper="R_Program1HSet"}, + [KEY_MINUS] = {"R_Program2Set",helper="R_Program2HSet"}, + + [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] = {"KU12",helper="V6Set"}, + [KEY_D] = "KU7", + [KEY_V] = {"V2Toggle",helper="V3Toggle"}, + [KEY_L] = "HornEngage", + [KEY_PAD_1] = "PneumaticBrakeSet1", + [KEY_PAD_2] = "PneumaticBrakeSet2", + [KEY_PAD_3] = "PneumaticBrakeSet3", + [KEY_PAD_4] = "PneumaticBrakeSet4", + [KEY_PAD_5] = "PneumaticBrakeSet5", + [KEY_PAD_DIVIDE] = "KU10Set", + [KEY_PAD_MULTIPLY] = "KAHSet", + + [KEY_SPACE] = { + def="PBSet", + [KEY_LSHIFT] = "KVTSet", + }, + [KEY_BACKSPACE] = {"EmergencyBrake",helper="EmergencyBrakeValveToggle"}, + + [KEY_PAD_ENTER] = "KVWrenchKV", + [KEY_PAD_0] = "DriverValveDisconnect", + [KEY_PAD_DECIMAL] = "EPKToggle", + [KEY_LSHIFT] = { + [KEY_W] = "KVUp_Unlocked", + [KEY_SPACE] = "KVTSet", + + [KEY_1] = "V4Set", + [KEY_2] = "RingSet", + [KEY_4] = "KVSet0Fast", + [KEY_L] = "DriverValveDisconnect", + + [KEY_7] = "KVWrenchNone", + [KEY_8] = "KVWrenchKRU", + [KEY_9] = "KVWrenchKV9", + [KEY_0] = "KVWrenchKV", + [KEY_6] = "KVSetT1A", + + [KEY_PAD_ENTER] = "KVWrenchNone", + }, + + [KEY_LALT] = { + [KEY_V] = "V2Toggle", + [KEY_L] = "EPKToggle", + [KEY_UP] = "ANNUp", + [KEY_DOWN] = "ANNDown", + [KEY_LEFT] = "ANNLeft", + [KEY_RIGHT] = "ANNRight", + }, + } + 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, + [21] = 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.A5:TriggerInput("Set",0) + self:TrainSpawnerUpdate() +end + +function ENT:NonSupportTrigger() + self.RUM:TriggerInput("Set",0) + self.VAH:TriggerInput("Set",1) + self.Plombs.RUM = nil + self.Plombs.VAH = nil + self.EPK:TriggerInput("Set",0) + self.ARS:TriggerInput("Set",0) +end + +function ENT:TrainSpawnerUpdate() + if self:GetNW2Int("AnnType",1) == 1 then + self.Announcer:TriggerInput("Reset","AnnouncementsRRI") + self.Electric:TriggerInput("RRI",1) + + self.RRI:TriggerInput("Disable",0) + self.ASNP:TriggerInput("Disable",1) + self.IGLA_CBKI:TriggerInput("Disable",1) + elseif self:GetNW2Int("AnnType",1) == 2 then + self.Announcer:TriggerInput("Reset","AnnouncementsASNP") + self.Electric:TriggerInput("RRI",0) + + self.RRI:TriggerInput("Disable",1) + self.ASNP:TriggerInput("Disable",0) + self.IGLA_CBKI:TriggerInput("Disable",0) + end + 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",Panel.PanelLights> 0.5) + self:SetPackedBool("GaugeLights",Panel.GaugeLights > 0.5) + self:SetPackedBool("RedLight",Panel.RedLights>0) + self:SetPackedBool("Headlights1",Panel.Headlights1 > 0) + self:SetPackedBool("Headlights2",Panel.Headlights2 > 0) + + local power = Panel.V1 > 0.5 + self:SetPackedBool("V1p",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_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) + + -- 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) + + self:SetPackedBool("RRIOn",self.RRI_VV.Power>0) + self:SetPackedRatio("RRIRewind",self.RRIRewind.Value/2) + + 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:SetPackedBool("RP",TW18 > 0.5) + self:SetPackedRatio("LSN",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.ManualBrake < 0.001 and self.ManualBrake > self.TrueBrakeAngle then self.TrueBrakeAngle = self.ManualBrake end + if self.ManualBrake > 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:SetPackedBool("LRK",Panel.Sequence > 0) + self:SetPackedBool("KT",Panel.KT > 0) + self:SetPackedBool("AVU",Panel.AVU > 0.5) + self:SetPackedBool("RingEnabled",Panel.Ring > 0.5) + + 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) + if self:GetNW2Int("AnnType",1) == 1 then + self:SetPackedBool("AnnCab",self.RRI_VV.CabinSpeakerPower > 0) + else + self:SetPackedBool("AnnCab",self.ASNP_VV.CabinSpeakerPower > 0) + end + + self:SetPackedBool("VPR",Panel.VPR > 0) + + self:SetPackedRatio("CranePosition", Pneumatic.DriverValvePosition/7) + self:SetNW2Int("ControllerPosition", (self.KV.ControllerPosition+3)) + self:SetPackedRatio("ReverserPosition", 1-(self.KV.ReverserPosition+1)/2) + self:SetNW2Int("KRUPosition", self.KRU.Position) + 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.Electric.Main750V/1000.0) + self:SetPackedRatio("EnginesCurrent", 0.5 + 0.5*(self.Electric.I24/500.0)) + self:SetPackedRatio("BatteryVoltage",self.Panel["V1"]*self.Battery.Voltage) + + self:SetPackedBool("RT300",self.Electric.ThyristorControllerPower*self.Electric.ThyristorControllerWork>0) + + self:SetPackedBool("AR04",Panel.AR04 > 0) + self:SetPackedBool("AR0",Panel.AR0 > 0) + self:SetPackedBool("AR40",Panel.AR40 > 0) + self:SetPackedBool("AR60",Panel.AR60 > 0) + self:SetPackedBool("AR70",Panel.AR70 > 0) + self:SetPackedBool("AR80",Panel.AR80 > 0) + self:SetPackedBool("KT",Panel.KT) + self:SetPackedBool("KVD",Panel.KVD > 0) + + 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 = 22500+3000*(A < 0 and 1 or 0) + self.FrontBogey.Reversed = (self.Reverser.NZ > 0.5) + self.RearBogey.MotorForce = 22500+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 A = 2*self.Engines.BogeyMoment + 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 + 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 + + if button:sub(1,3) == "ANN" then + local ID = button:sub(4,-1) + if self:GetNW2Int("AnnType",1) == 1 then + self.RRI:TriggerInput(ID,1) + elseif ID == "Up" then + self.R_ASNPUp:TriggerInput("Set",1) + elseif ID == "Down" then + self.R_ASNPDown:TriggerInput("Set",1) + elseif ID == "Right" then + self.R_ASNPMenu:TriggerInput("Set",1) + end + return + end + + 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 + -- KRU + if (self.KVWrenchMode == 2) and (button == "KVReverserUp") then self.KRU:TriggerInput("Up",1) end + if (self.KVWrenchMode == 2) and (button == "KVReverserDown") then self.KRU:TriggerInput("Down",1) end + if (self.KVWrenchMode == 2) and (button == "KVSetX1B") then self.KRU:TriggerInput("SetX1",1) end + if (self.KVWrenchMode == 2) and (button == "KVSetX2") then self.KRU:TriggerInput("SetX2",1) end + if (self.KVWrenchMode == 2) and (button == "KVSet0") then self.KRU:TriggerInput("Set0",1) 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 and self.KRU.Position == 0 then + if self.KVWrenchMode == 2 then + self:PlayOnce("kru_out","cabin",0.7) + else + self:PlayOnce("revers_out","cabin",0.7) + end + self.KVWrenchMode = 0 + self.KV:TriggerInput("Enabled",0) + self.KRU:TriggerInput("Enabled",0) + end + end + if button == "KVWrenchKRU" then + if self.KVWrenchMode == 0 then + self:PlayOnce("kru_in","cabin",0.7) + self.KVWrenchMode = 2 + self.KRU:TriggerInput("Enabled",1) + end + end + if button == "KU12" and self.V2.Value < 1 then + self.KU7:TriggerInput("Open",1) + self.KU12:TriggerInput("Close",1) + end + if button == "KU7" and self.V2.Value < 1 then + self.KU12:TriggerInput("Open",1) + self.KU7:TriggerInput("Close",1) + 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 == "KU12" and self.V2.Value < 1 then self.KU12:TriggerInput("Open",1) end + if button == "KU7" and self.V2.Value < 1 then self.KU7:TriggerInput("Open",1) end + if button == "KVSetT1AB" then + if self.KV.ControllerPosition > -3 then + self.KV:TriggerInput("ControllerSet",-2) + end + end + + if button:sub(1,3) == "ANN" then + local ID = button:sub(4,-1) + if self:GetNW2Int("AnnType",1) == 1 then + self.RRI:TriggerInput(ID,0) + elseif ID == "Up" then + self.R_ASNPUp:TriggerInput("Set",0) + elseif ID == "Down" then + self.R_ASNPDown:TriggerInput("Set",0) + elseif ID == "Right" then + self.R_ASNPMenu:TriggerInput("Set",0) + end + return + 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 diff --git a/lua/entities/gmod_subway_ezh3/shared.lua b/lua/entities/gmod_subway_ezh3/shared.lua new file mode 100644 index 0000000..891ce26 --- /dev/null +++ b/lua/entities/gmod_subway_ezh3/shared.lua @@ -0,0 +1,714 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.PrintName = "Ezh-3 (81-710)" +ENT.Author = "oldy, glebqip" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" +ENT.SkinsType = "81-710" +ENT.Model = "models/metrostroi_train/81-710/81-710.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(420,-38.2 ,40),80,0.4}, + {Vector(-3,-60, 62),300,0.3}, + {Vector(-3,60 ,62),300,0.3}, +} + +ENT.Cameras = { + {Vector(407.5+43,-4,-6),Angle(0,-40,0),"Common.ALL.VU"}, + {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+18,-52.5,10),Angle(10,180,0),"Train.703.RCARS"}, + {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(407.5+45,-52.4,4),Angle(0,-40,0),"Train.Common.ASNP","ASNP"}, + {Vector(407.5+45,-50.3,12),Angle(0,-40,0),"Train.Common.IGLA","IGLAButtons"}, + {Vector(407.5+10,-24,-3-4),Angle(35,180,0),"Train.Common.RRI","RRI"}, + {Vector(407.5+68,40,2) ,Angle(20,180,0),"Train.Common.RouteNumber"}, + {Vector(407.5+80,0,6) ,Angle(20,180,0),"Train.Common.LastStation"}, + {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"] = {480,1e12,Vector(0,0,0),0.90} + self.SoundPositions["rolling_medium2"] = {480,1e12,Vector(0,0,0),0.90} + self.SoundPositions["rolling_high2"] = {480,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["epv_on"] = "subway_trains/common/pneumatic/epv_on.mp3" + self.SoundNames["epv_off"] = "subway_trains/common/pneumatic/epv_off.mp3" + self.SoundPositions["epv_on"] = {100,1e9,Vector(437.2,-53.1,-32.0),1} + self.SoundPositions["epv_off"] = {100,1e9,Vector(437.2,-53.1,-32.0),1} + self.SoundPositions["epv_off"] = {60,1e9,Vector(437.2,-53.1,-32.0),1} + -- Релюшки + self.SoundNames["rpb_off"] = "subway_trains/717/relays/lsd_2.mp3" + self.SoundNames["rpb_on"] = "subway_trains/717/relays/relay_on.mp3" + self.SoundPositions["rpb_on"] = {100,1e9,Vector(400,25,-35),1} + self.SoundPositions["rpb_off"] = {100,1e9,Vector(400,25,-35),1} + self.SoundNames["rvt_on"] = "subway_trains/717/relays/new/rvt_on1.mp3" + self.SoundNames["rvt_off"] = "subway_trains/717/relays/new/rvt_off3.mp3" + self.SoundPositions["rvt_on"] = {100,1e9,Vector(400,25,-35),1} + self.SoundPositions["rvt_off"] = {100,1e9,Vector(400,25,-35),1} + --self.SoundNames["r1_5_on"] = "subway_trains/717/relays/new/k6_on1.mp3" + self.SoundNames["r1_5_on"] = "subway_trains/ezh3/relays/r1_5_on.mp3" + self.SoundNames["r1_5_off"] = "subway_trains/717/relays/new/r1_5_off.mp3" + self.SoundPositions["r1_5_on"] = {100,1e9,Vector(400,25,-35),1} + self.SoundPositions["r1_5_off"] = {100,1e9,Vector(400,25,-35),1} + + self.SoundNames["kd_off"] = "subway_trains/717/relays/lsd_2.mp3" + self.SoundNames["kd_on"] = "subway_trains/717/relays/new/kd_on.mp3" + self.SoundPositions["kd_on"] = {100,1e9,Vector(400,25,-35),1} + self.SoundPositions["kd_off"] = {100,1e9,Vector(400,25,-35),1} + + self.SoundNames["k25_on"] = "subway_trains/717/relays/new/k6_on1.mp3" + --self.SoundNames["k25_off"] = "subway_trains/717/relays/new/r1_5_off.mp3" + self.SoundNames["k25_off"] = "subway_trains/ezh3/relays/ro_on.mp3" + self.SoundPositions["k25_on"] = {120,1e9,Vector(400,25,-35),1} + self.SoundPositions["k25_off"] = {120,1e9,Vector(400,25,-35),1} + self.SoundNames["ro_on"] = "subway_trains/717/relays/ro_on.mp3" + self.SoundNames["ro_off"] = "subway_trains/717/relays/new/ro_off.mp3" + self.SoundPositions["ro_on"] = {140,1e9,Vector(400,-40,55),1} + self.SoundPositions["ro_off"] = {140,1e9,Vector(400,-40,55),1} + + self.SoundNames["avu_off"] = "subway_trains/common/pneumatic/ak11b_off.mp3" + self.SoundNames["avu_on"] = "subway_trains/common/pneumatic/ak11b_on.mp3" + self.SoundPositions["avu_on"] = {60,1e9, Vector(449+7.7,56.0,-10.24349),0.7} + self.SoundPositions["avu_off"] = self.SoundPositions["avu_on"] + --Подвагонка + 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/717/compressor/compressor_717_start2.wav","subway_trains/717/compressor/compressor_717_loop2.wav", "subway_trains/717/compressor/compressor_717_stop2.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(453,-21.00,-16.0)} + self.SoundPositions["ezh3_revers_f-0"] = {80,1e9,Vector(453,-21.00,-16.0)} + self.SoundPositions["ezh3_revers_0-b"] = {80,1e9,Vector(453,-21.00,-16.0)} + self.SoundPositions["ezh3_revers_b-0"] = {80,1e9,Vector(453,-21.00,-16.0)} + self.SoundPositions["revers_in"] = {80,1e9,Vector(453,-21.00,-16.0)} + self.SoundPositions["revers_out"] = {80,1e9,Vector(453,-21.00,-16.0)} + 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.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_in"] = {80,1e9,Vector(404.8,-23.5,-2.2)} + 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/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_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_open"] = { + "subway_trains/717/cover/cover_open1.mp3", + "subway_trains/717/cover/cover_open2.mp3", + "subway_trains/717/cover/cover_open3.mp3", + } + self.SoundNames["kr_close"] = { + "subway_trains/717/cover/cover_close1.mp3", + "subway_trains/717/cover/cover_close2.mp3", + "subway_trains/717/cover/cover_close3.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["button4_off"] = { + "subway_trains/ezh3/switches/button_on1.mp3", + "subway_trains/ezh3/switches/button_on2.mp3", + } + self.SoundNames["button4_on"] = { + "subway_trains/717/switches/button4_on1.mp3", + "subway_trains/717/switches/button4_on2.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(449+7.7,56.0,-10.24349),0.6} + self.SoundNames["gv_f"] = self.SoundNames["ezh3_revers_0-b"] + self.SoundNames["gv_b"] = self.SoundNames["ezh3_revers_b-0"] + self.SoundPositions["gv_f"] = {80,1e2,Vector(120,62.0+0.0,-60),0.5} + self.SoundPositions["gv_b"] = self.SoundPositions["gv_f"] + + --Краны + 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(452, 0,-63),1} + self.SoundNames["rear_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["rear_isolation"] = {300,1e9,Vector(-456, 0,-63),1} + + self.SoundNames["crane013_brake2"] = {loop=true,"subway_trains/common/pneumatic/013_brake2.wav"} + self.SoundPositions["crane013_brake2"] = {80,1e9,Vector(452.22,-56.5,-38.0),0.86} + self.SoundNames["crane334_brake_high"] = {loop=true,"subway_trains/common/pneumatic/334_brake.wav"} + self.SoundPositions["crane334_brake_high"] = {80,1e9,Vector(452.22,-56.5,-38.0),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(452.22,-56.5,-38.0),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(452.22,-56.5,-38.0),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(452.22,-56.5,-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(452.22,-56.5,-70),0.45} + self.SoundNames["crane334_release"] = {loop=true,"subway_trains/common/pneumatic/334_release3.wav"} + self.SoundPositions["crane334_release"] = {80,1e9,Vector(452.22,-56.5,-38.0),0.2} + self.SoundNames["crane334_release_2"] = {loop=true,"subway_trains/common/pneumatic/334_release2.wav"} + self.SoundPositions["crane334_release_2"] = {80,1e9,Vector(452.22,-56.5,-38.0),0.2} + + self.SoundNames["valve_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["valve_brake"] = {400,1e9,Vector(464.40,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["epk_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["epk_brake"] = {80,1e9,Vector(437.2,-63.1,-50.0),0.65} + + + 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["kv66_0_t1"] = {"subway_trains/ezh3/kv66/ezh3_0_T1.mp3"} + self.SoundNames["kv66_t1_0"] = {"subway_trains/ezh3/kv66/ezh3_T1_0.mp3"} + self.SoundNames["kv66_t1_t1a"] = {"subway_trains/ezh3/kv66/ezh3_T1_T1A.mp3"} + self.SoundNames["kv66_t1a_t1"] = {"subway_trains/ezh3/kv66/ezh3_T1A_T1.mp3"} + self.SoundNames["kv66_t1a_t2"] = {"subway_trains/ezh3/kv66/ezh3_T1A_T2.mp3"} + self.SoundNames["kv66_t2_t1a"] = {"subway_trains/ezh3/kv66/ezh3_T2_T1A.mp3"} + self.SoundNames["kv66_0_x1"] = {"subway_trains/ezh3/kv66/ezh3_0_X1.mp3"} + self.SoundNames["kv66_x1_0"] = {"subway_trains/ezh3/kv66/ezh3_X1_0.mp3"} + self.SoundNames["kv66_x1_x2"] = {"subway_trains/ezh3/kv66/ezh3_X1_X2.mp3"} + self.SoundNames["kv66_x2_x1"] = {"subway_trains/ezh3/kv66/ezh3_X2_X1.mp3"} + self.SoundNames["kv66_x2_x3"] = {"subway_trains/ezh3/kv66/ezh3_X2_X3.mp3"} + self.SoundNames["kv66_x3_x2"] = {"subway_trains/ezh3/kv66/ezh3_X3_X2.mp3"} + self.SoundPositions["kv70_fix_on"] = {100,1e9,Vector(453.36,-26.45,-17),0.67} + self.SoundPositions["kv70_fix_off"] = {100,1e9,Vector(453.36,-26.45,-17),0.67} + self.SoundPositions["kv66_0_t1"] = {100,1e9,Vector(453.36,-26.45,-17),0.67} + self.SoundPositions["kv66_t1_0_fix"] = {100,1e9,Vector(453.36,-26.45,-17),0.67} + self.SoundPositions["kv66_t1_0"] = {100,1e9,Vector(453.36,-26.45,-17),0.67} + self.SoundPositions["kv66_t1_t1a"] = {100,1e9,Vector(453.36,-26.45,-17),0.67} + self.SoundPositions["kv66_t1a_t1"] = {100,1e9,Vector(453.36,-26.45,-17),0.67} + self.SoundPositions["kv66_t1a_t2"] = {100,1e9,Vector(453.36,-26.45,-17),0.67} + self.SoundPositions["kv66_t2_t1a"] = {100,1e9,Vector(453.36,-26.45,-17),0.67} + self.SoundPositions["kv66_0_x1"] = {100,1e9,Vector(453.36,-26.45,-17),0.67} + self.SoundPositions["kv66_x1_0"] = {100,1e9,Vector(453.36,-26.45,-17),0.67} + self.SoundPositions["kv66_x1_x2"] = {100,1e9,Vector(453.36,-26.45,-17),0.67} + self.SoundPositions["kv66_x2_x1"] = {100,1e9,Vector(453.36,-26.45,-17),0.67} + self.SoundPositions["kv66_x2_x3"] = {100,1e9,Vector(453.36,-26.45,-17),0.67} + self.SoundPositions["kv66_x3_x2"] = {100,1e9,Vector(453.36,-26.45,-17),0.67} + + + self.SoundNames["samm_revers_in"] = {"subway_trains/ezh3/rc_ars/reversor_rc_in.mp3"} + self.SoundNames["samm_revers_out"] = {"subway_trains/ezh3/rc_ars/reversor_rc_in.mp3"} + self.SoundNames["samm_0-1"] = {"subway_trains/ezh3/rc_ars/0-1.mp3"} + self.SoundNames["samm_0-2"] = {"subway_trains/ezh3/rc_ars/0-2.mp3"} + self.SoundNames["samm_2-0"] = {"subway_trains/ezh3/rc_ars/2-0.mp3"} + self.SoundPositions["samm_0-2"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_2-0"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_0-1"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_revers_out"] = {60,1e9,Vector(442.2-6,-50,-10)} + self.SoundPositions["samm_revers_in"] = {60,1e9,Vector(442.2-6,-50,-10)} + + self.SoundNames["ring"] = {loop=0.15,"subway_trains/717/ring/ringo_start.wav","subway_trains/717/ring/ringo_loop.wav","subway_trains/717/ring/ringo_end.mp3"}--{loop=0.15,"subway_trains/717/ring/ring_start.wav","subway_trains/717/ring/ring_loop.wav","subway_trains/717/ring/ring_end.wav"} + self.SoundPositions["ring"] = {60,1e9,Vector(400,-30,55),0.5}--{100,1e9,Vector(445,-55,-15),0.2} + + 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"] = {60,1e9,Vector(420,-38.2 ,40),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(449.118378+7.6,33.493385,-14.713276),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"} + + self.SoundNames["pneumo_TL_open"] = { + "subway_trains/common/334/334_open.mp3", + } + 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["disconnect_valve"] = "subway_trains/common/switches/pneumo_disconnect_switch.mp3" + + self.SoundNames["pneumo_idle"] = { + "subway_trains/ezh3/pneumatic/idle.wav", + } + self.SoundPositions["pneumo_idle"] = {150,1e9,Vector(438.50,-50,-40),1} + + 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(460.5,-54.3,12.67),0.3} + self.SoundPositions["igla_off"] = {50,1e9,Vector(460.5,-54.3,12.67),0.3} + self.SoundPositions["igla_start1"] = {50,1e9,Vector(460.5,-54.3,12.67),0.3} + self.SoundPositions["igla_start2"] = {50,1e9,Vector(460.5,-54.3,12.67),0.2} + + self.SoundNames["upps"] = {"subway_trains/common/other/upps/upps1.mp3","subway_trains/common/other/upps/upps2.mp3"} + self.SoundPositions["upps"] = {60,1e9,Vector(443,-64,4),0.5} + + 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["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(450,-20,-55)} + + --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 + 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} + + self.SoundNames["rt300"] = {loop=true,"subway_trains/ezh3/rt300a_idle.wav"} + self.SoundPositions["rt300"] = {60,1e9,Vector(414.5,-17,47),0.01} + + 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 +end + +function ENT:InitializeSystems() + -- ЭлектроÑиÑтема Е (ÐРС) + self:LoadSystem("Electric","81_710_Electric") + + -- Токоприёмник + self:LoadSystem("TR","TR_3B") + -- ЭлектротÑговые двигатели + self:LoadSystem("Engines","DK_116A") + + -- РезиÑторы Ð´Ð»Ñ Ñ€ÐµÐ¾Ñтата/пуÑковых Ñопротивлений + self:LoadSystem("KF_47A") + -- РезиÑторы Ð´Ð»Ñ Ð¾ÑÐ»Ð°Ð±Ð»ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð±ÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ + self:LoadSystem("KF_50A") + -- Ящик Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñ…Ñ€Ð°Ð½Ð¸Ñ‚ÐµÐ»Ñми + self:LoadSystem("YAP_57") + + -- РезиÑторы Ð´Ð»Ñ Ñ†ÐµÐ¿ÐµÐ¹ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + --self:LoadSystem("YAS_44V") + self:LoadSystem("Reverser","PR_722D") + -- РеоÑтатный контроллер Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑƒÑковыми ÑÐ¾Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð»ÐµÐ½Ð¸Ñ + self:LoadSystem("RheostatController","EKG_17B") + -- Групповой переключатель положений + self:LoadSystem("PositionSwitch","EKG_18B") + -- Кулачковый контроллер + self:LoadSystem("KV","KV_66") + ---- Контроллер резервного ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (KRP) + self:LoadSystem("KRU") + + + -- Ящики Ñ Ñ€ÐµÐ»Ðµ и контакторами + self:LoadSystem("LK_755A") + self:LoadSystem("YAR_15A") + self:LoadSystem("YAR_27") + self:LoadSystem("YAK_37A") + self:LoadSystem("YAK_36") + self:LoadSystem("YAS_44V") + self:LoadSystem("YARD_2") + self:LoadSystem("PR_124B") + + -- ПневмоÑиÑтема 81-703 + self:LoadSystem("Pneumatic","81_703_Pneumatic") + -- Панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð•Ð¶3 + self:LoadSystem("Panel","81_710_Panel") + -- Everything else + self:LoadSystem("Battery") + self:LoadSystem("Horn") + + self:LoadSystem("Announcer","81_71_Announcer", "AnnouncementsASNP") + self:LoadSystem("ASNP","81_71_ASNP") + self:LoadSystem("ASNP_VV","81_71_ASNP_VV") + self:LoadSystem("RRI","81_71_RRI") + self:LoadSystem("RRI_VV","81_71_RRI_VV") + + self:LoadSystem("ALS_ARS","ALS_ARS_Ezh3") + --self:LoadSystem("ALSCoil") + + self:LoadSystem("IGLA_CBKI","IGLA_CBKI2") + + self:LoadSystem("RouteNumber","81_71_RouteNumber",2) + self:LoadSystem("LastStation","81_71_LastStation","710","door1") + self:LoadSystem("IGLA_PCBK") +end +function ENT:PostInitializeSystems() + self.Electric:TriggerInput("RRI",1) + self.YAR_27:TriggerInput("NoRKTT",1) +end + +ENT.SubwayTrain = { + Type = "E", + Name = "Ezh3", + WagType = 0, + ALS = { + HaveAutostop = true, + TwoToSix = false, + RSAs325Hz = false, + Aproove0As325Hz = false, + }, + EKKType = 710, +} +ENT.NumberRanges = {{5560,5999}} + +ENT.Spawner = { + model = { + "models/metrostroi_train/81-710/81-710.mdl", + {"models/metrostroi_train/81-710/ezh3_salon.mdl",pos = Vector(0,0,0)}, + {"models/metrostroi_train/81-710/ezh3_cabine.mdl",pos = Vector(0,0,0)}, + {"models/metrostroi_train/81-703/81-703_Underwagon.mdl",pos = Vector(-23.5,0,-191)}, + }, + interim = "gmod_subway_em508t", + func = function(ent,i,maxi) + if ent:GetClass() == "gmod_subway_ezh3" then + ent.VU:TriggerInput("Set",1) + ent.UAVA:TriggerInput("Set",0) + ent.Plombs.VU = nil + ent.Plombs.UAVA = true + else + ent.VU:TriggerInput("Set",0) + ent.UAVA:TriggerInput("Set",1) + ent.Plombs.VU = true + ent.Plombs.UAVA = nil + end + end, + Metrostroi.Skins.GetTable("Texture","Texture",false,"train"), + Metrostroi.Skins.GetTable("PassTexture","PassTexture",false,"pass"), + Metrostroi.Skins.GetTable("CabTexture","CabTexture",false,"cab"), + {"Announcer","Spawner.710.Announcer","List",function() + local Announcer = {} + if Metrostroi.AnnouncementsRRI then + table.insert(Announcer,Metrostroi.GetPhrase("Spawner.710.RRI")) + end + for k,v in pairs(Metrostroi.AnnouncementsASNP or {}) do if not v.asnp then Announcer[k+1] = v.name or k end end + return Announcer + end, nil,function(ent,val,rot,i,wagnum,rclk) + if Metrostroi.AnnouncementsRRI and val==1 then + ent:SetNW2Int("AnnType",1) + ent:SetNW2Int("Announcer",1) + else + ent:SetNW2Int("Announcer",val-1) + ent:SetNW2Int("AnnType",2) + end + end}, + {"SpawnMode","Spawner.Common.SpawnMode","List",{"Spawner.Common.SpawnMode.Full","Spawner.Common.SpawnMode.Deadlock","Spawner.Common.SpawnMode.NightDeadlock","Spawner.Common.SpawnMode.Depot"}, nil,function(ent,val,rot,i,wagnum,rclk) + if rclk then return end + if ent._SpawnerStarted~=val then + ent.VB:TriggerInput("Set",val<=2 and 1 or 0) + ent.AV:TriggerInput("Set",val<=2 and 1 or 0) + if ent.RRI then + local first = i==1 or _LastSpawner~=CurTime() + ent.VU2:TriggerInput("Set",(val<=2 and first) and 1 or 0) + ent.ARS:TriggerInput("Set",(val==1 and first and ent.Plombs.RUM) and 1 or 0) + ent.ALS:TriggerInput("Set",val==1 and 1 or 0) + ent.EPK:TriggerInput("Set",(val<=2 and ent.Plombs.RUM) and 1 or 0) + ent.RRIEnable:TriggerInput("Set",val<=2 and 1 or 0) + ent.RRIAmplifier:TriggerInput("Set",val<=2 and 1 or 0) + ent.R_ASNPOn:TriggerInput("Set",val<=2 and 1 or 0) + ent.R_UNch:TriggerInput("Set",val<=2 and 1 or 0) + ent.R_Radio:TriggerInput("Set",val<=2 and 1 or 0) + ent.V1:TriggerInput("Set",(val==1 and first) and 1 or 0) + _LastSpawner=CurTime() + ent.CabinDoor = val==4 and first + ent.PassengerDoor = val==4 + ent.RearDoor = val==4 + else + ent.VU2:TriggerInput("Set",0) + ent.FrontDoor = val==4 + ent.RearDoor = val==4 + end + ent.Pneumatic.RightDoorState = val==4 and {1,1,1,1} or {0,0,0,0} + ent.Pneumatic.DoorRight = val==4 + ent.Pneumatic.LeftDoorState = val==4 and {1,1,1,1} or {0,0,0,0} + ent.Pneumatic.DoorLeft = val==4 + ent.GV:TriggerInput("Set",val<4 and 1 or 0) + ent._SpawnerStarted = val + end + if val==1 then ent.KO:TriggerInput("Close",1) else ent.KO:TriggerInput("Open",1) end + ent.Pneumatic.TrainLinePressure = val==3 and math.random()*4 or val==2 and 4.5+math.random()*3 or 7.6+math.random()*0.6 + end}, +} diff --git a/lua/entities/gmod_subway_tatra_t3/cl_init.lua b/lua/entities/gmod_subway_tatra_t3/cl_init.lua new file mode 100644 index 0000000..ac6340a --- /dev/null +++ b/lua/entities/gmod_subway_tatra_t3/cl_init.lua @@ -0,0 +1,17 @@ +include("shared.lua") +--[[ENT.ClientProps = {} +ENT.ClientProps["body"] = { + model = "models/tram/lm57/lm57_body.mdl", + pos = Vector(0,0,-60), + ang = Angle(0,0,0), + hide = 2.0, + scale = 100/2.54/0.75, +} +ENT.ClientProps["interior"] = { + model = "models/tram/lm57/lm57_int.mdl", + pos = Vector(0,0,-60), + ang = Angle(0,0,0), + hide = 2.0, + scale = 100/2.54/0.75, +} +Metrostroi.GenerateClientProps()]] \ No newline at end of file diff --git a/lua/entities/gmod_subway_tatra_t3/init.lua b/lua/entities/gmod_subway_tatra_t3/init.lua new file mode 100644 index 0000000..b15a183 --- /dev/null +++ b/lua/entities/gmod_subway_tatra_t3/init.lua @@ -0,0 +1,94 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + + + +--------------------------------------------------- +-- Defined train information +-- Types of wagon(for wagon limit system): +-- 0 = Head or intherim +-- 1 = Only head +-- 2 = Only intherim +--------------------------------------------------- +ENT.SubwayTrain = { + Type = "Tatra", + Name = "Tatra T3", + WagType = 0, + Manufacturer = "ChKD", +} + +function ENT:Initialize() + + -- Set model and initialize + self:SetModel("models/metrostroi/tatra_t3/tatra_t3.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create seat entities + self.DriverSeat = self:CreateSeat("driver",Vector(305,10,-12)) + --self.InstructorsSeat = self:CreateSeat("instructor",Vector(395,35,-30)) + + -- Create bogeys + self.FrontBogey = self:CreateBogey(Vector( 160,0,-60),Angle(0,180,0),true,"tatra") + self.RearBogey = self:CreateBogey(Vector(-150,0,-60),Angle(0,0,0),false,"tatra") + + -- Create joins + self.FrontJoin = self:CreateJoin(Vector(350,0,-50),false) + self.RearJoin = self:CreateJoin(Vector(-350,0,-50),true) + + -- Initialize key mapping + self.KeyMap = { + [KEY_W] = "Drive", + [KEY_S] = "Brake", + [KEY_R] = "Reverse", + } +end + +function ENT:CreateJoin(pos,rev) + local ang = Angle(0,0,0) + if rev then ang = Angle(0,180,0) end + local join = ents.Create("prop_physics") + join:SetModel("models/metrostroi/tatra_t3/tatra_join.mdl") + join:SetPos(self:LocalToWorld(pos)) + join:SetAngles(self:GetAngles() + ang) + join:Spawn() + join:SetOwner(self:GetOwner()) + + -- Constraint join to the train + --[[constraint.Axis(join,self,0,0, + Vector(0,0,0),Vector(0,0,0), + 0,0,0,1,Vector(0,0,1),false)]]-- + local xmin = -5 + local xmax = 2 + if rev then + xmin = -2 + xmax = 5 + end + + constraint.AdvBallsocket( + join, + self, + 0, --bone + 0, --bone + Vector(-40,0,10), + pos, + 0, --forcelimit + 0, --torquelimit + xmin, --xmin + 0, --ymin + -30, --zmin + xmax, --xmax + 0, --ymax + 30, --zmax + 0, --xfric + 0, --yfric + 0, --zfric + 0, --rotonly + 1 --nocollide + ) + + -- Add to cleanup list + table.insert(self.TrainEntities,join) + return join +end \ No newline at end of file diff --git a/lua/entities/gmod_subway_tatra_t3/shared.lua b/lua/entities/gmod_subway_tatra_t3/shared.lua new file mode 100644 index 0000000..6cab80c --- /dev/null +++ b/lua/entities/gmod_subway_tatra_t3/shared.lua @@ -0,0 +1,16 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (utility)" + +ENT.Spawnable = true +ENT.AdminSpawnable = false + + +function ENT:InitializeSystems() + self:LoadSystem("Tatra_Systems") +end diff --git a/lua/entities/gmod_track_arm/cl_init.lua b/lua/entities/gmod_track_arm/cl_init.lua new file mode 100644 index 0000000..e1aa306 --- /dev/null +++ b/lua/entities/gmod_track_arm/cl_init.lua @@ -0,0 +1,458 @@ +include("shared.lua") + +-------------------------------------------------------------------------------- +ENT.ClientProps = {} +ENT.ButtonMap = {} +ENT.AutoAnims = {} +ENT.AutoAnimNames = {} +ENT.ClientSounds = {} +ENT.ClientPropsInitialized = false + + +ENT.ButtonMap["ARM"] = { + pos = Vector(-4.9,9.1,50.3), + ang = Angle(0,-90-1,90), + width = 800, + height = 600, + scale = 0.02*1.2, + mouse = true +} +ENT.ClientProps["ARMPK"] = { + model = "models/cyber_metrostroi/pc_arm/pc_screen.mdl", + pos = Vector(-5,0,31.2), + ang = Angle(0,180,0), + bscale = Vector(4/3,1,1), +} +ENT.ClientProps["ARMMonitor"] = { + model = "models/cyber_metrostroi/pc_arm/pc_body.mdl", + pos = Vector(-5,15,0), + ang = Angle(0,180,0), + bscale = Vector(4/3,1,1), +} +ENT.ClientProps["ARMKeyboard"] = { + model = "models/cyber_metrostroi/pc_arm/pc_keyboard.mdl", + pos = Vector(-15,-2,31), + ang = Angle(0,180,0), +} +ENT.ClientProps["ARMMouse"] = { + model = "models/cyber_metrostroi/pc_arm/pc_mouse.mdl", + pos = Vector(-18,-20,32), + ang = Angle(0,180,0), +} +ENT.ClientProps["ARMBreen"] = { + model = "models/props_combine/breenglobe.mdl", + pos = Vector(-11,30,39.5), + ang = Angle(0,-180+45,0), +} + +function ENT:Initialize() + self.BaseClass.Initialize(self) + self.ARM = self:CreateRT("ARM",1024,1024) + for k,v in pairs(self.Types) do + for i,tex in pairs(v) do + if type(tex) == "table" and type(tex[1]) == "string" then + tex.mat = surface.GetTextureID(tex[1]) + end + end + end +end + +function ENT:CamMoved() + self:HandleMouse(false) + gui.EnableScreenClicker(self.CurrentCamera ~= 0) +end + +function ENT:Think() + self.BaseClass.Think(self) + if not self.RenderClientEnts or self.CreatingCSEnts then + return + end + + if not self.ARM then return end + --self.MouseX = 0 + --self.MouseY = 0 + self.MouseX = self:GetNW2Int("CursorX",0) + self.MouseY = self:GetNW2Int("CursorY",0) + render.PushRenderTarget(self.ARM,0,0,1024, 1024) + render.Clear(0, 0, 0, 0) + cam.Start2D() + render.OverrideAlphaWriteEnable(true, true) + surface.SetDrawColor(0,0,0) + surface.DrawRect(0,0,800,600) + self:ARMMonitor() + cam.End2D() + render.PopRenderTarget() +end + +function ENT:Draw() + self.BaseClass.Draw(self) +end + + +function ENT:DrawPost() + self.RTMaterial:SetTexture("$basetexture", self.ARM) + self:DrawOnPanel("ARM",function(...) + surface.SetMaterial(self.RTMaterial) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(512,512,1024,1024,0) + end) +end + + +local gray = Color(100,100,100) +local black = Color(0,0,0) +local white = Color(150,150,150) +local green = Color(0,50,0) + +local function GetTextures(segm,typ) + return segm[typ],segm.maintex or segm[typ] +end +--Get texture Width and Height +local function GetWH(segm,typ) + local tex,dtex = GetTextures(segm,typ) + return tex.w or dtex.w,tex.h or dtex.h +end +--Get real(original) texture Width and Height +local function GetRWH(segm,typ) + local tex,dtex = GetTextures(segm,typ) + return tex.rw or dtex.rw,tex.rh or dtex.rh +end +--Get X and Y adds +local function GetXYA(segm,typ) + local tex,dtex = GetTextures(segm,typ) + return tex.xa or dtex.xa or 0,tex.ya or dtex.ya or 0 +end + +local function GetXY(x,y) + return 100+x*36,100+y*70 +end +local function drawSegment(w,h,u0,v0,u1,v1,segm,typ,align) + --local segm = self.Types[typ] + if not segm or not segm[typ] then return end + local tex,dtex = GetTextures(segm,typ) + if dtex.mat then + local sx,sy = GetXY(w,h) + local sw,sh = GetWH(segm,typ) + local sxa = tex.x or dtex.x or 0 + local xa,ya = GetXYA(segm,typ) + local rw,rh = GetRWH(segm,typ) + surface.SetDrawColor(tex.col or dtex.col or white) + surface.SetTexture(tex.mat or dtex.mat) + surface.DrawTexturedRectUV(sx+xa+sxa*u0,sy+ya-(rh-8)*v0,rw,rh,(rw/sw)*u0,(rh/sh)*v0,(rw/sw)*u1,(rh/sh)*v1) + end +end +local function drawElement(sx,sy,u0,v0,u1,v1,segm,typ,col) + --local segm = self.Types[typ] + if not segm or not segm[typ] then return end + local tex = segm[typ] + local dtex = segm.maintex or tex + --local sx,sy = 100+w*36,100+h*70 + local sw,sh = tex.w or dtex.w,tex.h or dtex.h + local sxa = tex.x or dtex.x or 0 + local xa,ya = tex.xa or dtex.xa or 0,tex.ya or dtex.ya or 0 + local rw,rh = tex.rw or dtex.rw,tex.rh or dtex.rh + surface.SetDrawColor(col or tex.col or dtex.col or white) + surface.SetTexture(tex.mat or dtex.mat) + surface.DrawTexturedRectUV(sx+xa+sxa*u0,sy+ya-(rh-8)*v0 ,rw,rh,(rw/sw)*u0,(rh/sh)*v0,(rw/sw)*u1,(rh/sh)*v1) +end + +local mouse = surface.GetTextureID("gui/info") + +local function createFont(name,font,size,weight) + surface.CreateFont("Metrostroi_"..name, { + font = font, + size = size, + weight = weight or 400, + blursize = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + }) +end +createFont("Arial10","Arial",10,400) +createFont("Arial11","Arial",11,400) +createFont("Arial13","Arial",13,400) +createFont("Arial15","Arial",15,400) +createFont("Arial15B","Arial",15,800) +createFont("Arial20","Arial",20,800) + +local colorConverter = { + r = Color(0,0,0), + y = Color(240,240,71), + g = Color(41,202,26), + b = Color(26,84,202), + w = Color(255,255,255), +} +local function GetSegmPos(segm,alt) + local x,y = segm.x,segm.y + local segmt = segm.segm + local u0,v0,u1,v1 = 0,0,1,1 + if segm.invertX then u0,u1 = 1,0 end + if segm.invertY then v0,v1 = 1,0 end + if alt == nil then + return GetXY(x+segm.width*u0,y) + elseif alt == false and segmt.next_m then + return GetXY(x+segmt.next_m.x-segm.width*u0,y+segmt.next_m.y) + --print(123,x,y) + elseif alt and segmt.next_a then + return GetXY(x+segmt.next_a.x*u1-segmt.next_a.x*u0+segmt.width*u0,y+segmt.next_a.y*v1-segmt.next_a.y*v0) + end +end + + +function ENT:ARMMonitor() + if self.FilterMag then + render.PopFilterMag() + render.PopFilterMin() + end + + render.PushFilterMag( TEXFILTER.POINT ) + render.PushFilterMin( TEXFILTER.POINT ) + self.FilterMag = true + surface.SetDrawColor(gray) + surface.DrawRect(0,0,800,600) + local station = self:GetNW2Int("ARM:Station",0) + --draw.SimpleText("ÐРМ ДЫЫСЦЫПЫ","Metrostroi_BUKPSpeed",400, 300,Color(220,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + if station > 0 and Metrostroi.ARMConfigGenerated and Metrostroi.ARMConfigGenerated[station] then + local armTable = Metrostroi.ARMConfigGenerated[station] + for id,segm in ipairs(armTable) do + local u0,v0,u1,v1 = 0,0,1,1 + if segm.invertX then u0,u1 = 1,0 end + if segm.invertY then v0,v1 = 1,0 end + drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"maintex") + end + local w,h = 0,0 + for id,segm in ipairs(armTable) do + local u0,v0,u1,v1 = 0,0,1,1 + if segm.invertX then u0,u1 = 1,0 end + if segm.invertY then v0,v1 = 1,0 end + if Metrostroi.GetARMInfo(station,id,"occup2") then + drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"occup_x") + end + if Metrostroi.GetARMInfo(station,id,"switch_m") then + if Metrostroi.GetARMInfo(station,id,"occup") then drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"occup_m") + elseif Metrostroi.GetARMInfo(station,id,"route") then drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"route_m") end + drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"switch_m") + elseif Metrostroi.GetARMInfo(station,id,"switch_a") then + if Metrostroi.GetARMInfo(station,id,"occup") then drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"occup_a") + elseif Metrostroi.GetARMInfo(station,id,"route") then drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"route_a") end + drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"switch_a") + elseif Metrostroi.GetARMInfo(station,id,"switch_na") then + if Metrostroi.GetARMInfo(station,id,"occup") then + drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"occup_m") + drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"occup_a") + end + drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"switch_an") + drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"switch_mn") + else + if Metrostroi.GetARMInfo(station,id,"occup") then drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"occup_m") + elseif Metrostroi.GetARMInfo(station,id,"route") then drawSegment(segm.x,segm.y,u0,v0,u1,v1,segm.segm,"route_m") end + end + if segm.signal1 then + local sig = segm.signal1 + local typ = self.Types["tl_"..sig.type] + + local x,y = 100+(segm.x+segm.width)*36,100+segm.y*70-(sig.top and -26 or 15) + local rw,rh = GetRWH(typ,"maintex") + local sx,sy = x-rw-2,y-rh-2 + + draw.SimpleText(sig.name,"Metrostroi_Arial10",x, y-(sig.top and -7 or 15),Color(0,0,0),TEXT_ALIGN_RIGHT,TEXT_ALIGN_BOTTOM) + drawElement(sx,sy,0,0,1,1,typ,"maintex") + local colors = Metrostroi.GetARMInfo(station,id,"signal1") or "" + if sig.type > 1 and Metrostroi.GetARMInfo(station,id,"signal1I") then + drawElement(sx+13*(sig.type-1),sy,0,0,1,1,typ,"full",colorConverter.w) + end + if sig.type > 2 and Metrostroi.GetARMInfo(station,id,"signal1Y") then + drawElement(sx+13*(sig.type-2),sy,0,0,1,1,typ,"full",colorConverter.y) + end + if colors ~= "" and #colors == 1 then + local color = colors:lower() + drawElement(sx,sy,0,0,1,1,typ,"full",colorConverter[color] or Color(0,0,0)) + elseif colors ~= "" and #colors == 2 then + local color = colors:lower() + drawElement(sx,sy,0,0,1,1,typ,"h1",colorConverter[color[1]] or Color(0,0,0)) + drawElement(sx,sy,0,0,1,1,typ,"h2",colorConverter[color[2]] or Color(0,0,0)) + end + end + if segm.signal2 then + local sig = segm.signal2 + local typ = self.Types["tl_"..sig.type] + + local rw,rh = GetRWH(typ,"maintex") + local x,y = 100+(segm.x)*36+2,100+segm.y*70+(sig.top and -38 or 3) + local sx,sy = x-1,y+rh + + draw.SimpleText(sig.name,"Metrostroi_Arial10",x, y+(sig.top and -2 or 20),Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_TOP) + drawElement(sx,sy,1,1,0,0,typ,"maintex") + local colors = Metrostroi.GetARMInfo(station,id,"signal2") or "" + if sig.type > 1 and Metrostroi.GetARMInfo(station,id,"signal2I") then + drawElement(sx+rw-12-13*(sig.type-1),sy,1,1,0,0,typ,"full",colorConverter.w) + end + if sig.type > 2 and Metrostroi.GetARMInfo(station,id,"signal2Y") then + drawElement(sx+rw-12-13*(sig.type-2),sy,1,1,0,0,typ,"full",colorConverter.y) + end + if colors ~= "" and #colors == 1 then + local color = colors:lower() + drawElement(sx+rw-12,sy,1,1,0,0,typ,"full",colorConverter[color] or Color(0,0,0)) + elseif colors ~= "" and #colors == 2 then + local color = colors:lower() + drawElement(sx+rw-12,sy,1,1,0,0,typ,"h1",colorConverter[color[1]] or Color(0,0,0)) + drawElement(sx+rw-12,sy,1,1,0,0,typ,"h2",colorConverter[color[2]] or Color(0,0,0)) + end + end + end + for id,obj in ipairs(armTable.objects) do + if obj.type=="b" then + local x1,y1 = GetXY(obj.x1,obj.y1) + local x2,y2 = GetXY(obj.x2,obj.y2) + local w,h = x2-x1,y2-y1 + --Metrostroi.DrawRectOL(x1,y1,x2-x1,y2-y1,Color(255,255,255),2,Color(200,200,200)) + surface.SetDrawColor(200,200,200) + surface.DrawRect(x1,y1,w,h) + surface.SetDrawColor(255,255,255) + surface.DrawOutlinedRect(x1,y1,w,h) + surface.SetFont("Metrostroi_Arial20") + local fw,fh = 0,0 + local rows = string.Explode("\n",obj.name) + for _,text in ipairs(rows) do + local w,h = surface.GetTextSize(text) + fw,fh = math.max(w,fw),math.max(h,fh) + end + for i=#rows,1,-1 do + local x,y = x1+w/2,y1+h/2+(i-1)*20-(#rows-1)*20/2 + surface.SetDrawColor(150,150,150) + surface.DrawRect(x-fw/2-5,y-fh/2-5,fw+10,fh+10) + draw.SimpleText(rows[i],"Metrostroi_Arial20",x, y,Color(40,40,40),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + if obj.type=="cl" then + local x,y = GetXY(obj.x,obj.y) + if obj.right then x = x-50 y = y-30 end + --Metrostroi.DrawRectOL(x1,y1,x2-x1,y2-y1,Color(255,255,255),2,Color(200,200,200)) + surface.SetDrawColor(60,60,60) + surface.DrawRect(x,y,50,30) + draw.SimpleText(Format("%02d:%02d",23,30),"Metrostroi_Arial15",x+4, y+4,Color(150,255,50),TEXT_ALIGN_LEFT,TEXT_ALIGN_TOP) + end + end + for id,button in ipairs(armTable.buttons) do + local sx,sy = 100+button.x*36,100+button.y*70 + local sw,sh = 15,25 + local xa,ya = 3,12 + if button.type=="r" then + sw,sh = 15,25 + xa,ya = 3,12 + end + if button.type=="pn" then + sw,sh = 15,15 + xa,ya = -sw/2,-sh/2 + end + if button.type=="rn" then + surface.SetFont("Metrostroi_Arial15") + local w,h = surface.GetTextSize(button.name) + sw,sh = w+9,15 + xa,ya = -sw/2,-sh/2 + end + local x,y = sx+xa,sy+ya + if Metrostroi.GetARMInfo(station,1000+id,"buttonSelected") then + surface.SetDrawColor(Color(80,80,180)) + elseif Metrostroi.GetARMInfo(station,1000+id,"buttonPressable") then + surface.SetDrawColor(Color(220,220,220)) + else + if button.type=="pn" then + surface.SetDrawColor(Color(20,20,20)) + else + surface.SetDrawColor(Color(120,120,120)) + end + end + surface.DrawRect(x,y,sw,sh) + Metrostroi.DrawLine(x,y,x,y+sh,Color(240,240,240),2) + Metrostroi.DrawLine(x-1,y,x+sw,y,Color(240,240,240),2) + Metrostroi.DrawLine(x+sw,y,x+sw,y+sh,Color(60,60,60),2) + Metrostroi.DrawLine(x,y+sh,x+sw+1,y+sh,Color(60,60,60),2) + + if button.type=="rn" then + draw.SimpleText(button.name,"Metrostroi_Arial15B",x+sw/2, y+sh/2,Color(50,50,50),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + for id,text in ipairs(armTable.info) do + local x,y = 100+text.x*36,100+text.y*70 + local w,h = 45,13 + if text.col then + surface.SetDrawColor(text.col) + surface.DrawRect(x,y,w,h) + end + draw.SimpleText(text.text,"Metrostroi_Arial13",x+2, y+h/2,Color(50,50,50),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(x,y,x,y+h,Color(240,240,240),2) + Metrostroi.DrawLine(x-1,y,x+w,y,Color(240,240,240),2) + Metrostroi.DrawLine(x+w,y,x+w,y+h,Color(60,60,60),2) + Metrostroi.DrawLine(x,y+h,x+w+1,y+h,Color(60,60,60),2) + + --[[ if button.type=="rn" then + draw.SimpleText(button.name,"Metrostroi_Arial15B",x+sw/2, y+sh/2,Color(50,50,50),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end--]] + end + end + for i,v in ipairs(Metrostroi.ARMConfigGenerated) do + if i == station then + surface.SetDrawColor(Color(110,140,170)) + elseif math.InRangeXYR(self.MouseX,self.MouseY,20+(i-1)*30,20,30,20) then + surface.SetDrawColor(Color(80,110,140)) + else + surface.SetDrawColor(Color(100,130,160)) + end + + surface.DrawRect(20+(i-1)*31,20,30,20) + draw.SimpleText(v.shortname or v.id,"Metrostroi_Arial20",35+(i-1)*31, 30,Color(40,60,170),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + if station > 0 and Metrostroi.ARMConfigGenerated and Metrostroi.ARMConfigGenerated[station] then + local armTable = Metrostroi.ARMConfigGenerated[station] + for id,segm in ipairs(armTable) do + local u0,v0,u1,v1 = 0,0,1,1 + if segm.invertX then u0,u1 = 1,0 end + if segm.invertY then v0,v1 = 1,0 end + +---[[ DEBUG + local w,h = GetXY(segm.x+segm.width*u0,segm.y) + surface.SetDrawColor(Color(255,0,0)) + surface.DrawLine(w+5*u1-5*u0,h,w,h) + surface.DrawLine(w,h+5,w,h) + local w,h = GetSegmPos(segm,false) + surface.SetDrawColor(Color(255,255,0)) + surface.DrawLine(w-6*u1+6*u0,h,w,h) + surface.DrawLine(w,h-6,w,h) + local w,h = GetSegmPos(segm,true) + if w then + surface.SetDrawColor(Color(0,255,0)) + surface.DrawLine(w-6*u1+6*u0,h,w,h) + surface.DrawLine(w,h-6*v1+6*v0,w,h) + end + local x,y = 100+(segm.x+segm.width)*36,100+segm.y*70-4 + local rw,rh = GetRWH(segm.segm,"maintex") + local sx,sy = x-rw-2,y-rh-2 + + surface.SetDrawColor(Color(0,0,0,150)) + surface.DrawRect(sx,y-7,30,10) + draw.SimpleText(Format("%.1f:%.1f",segm.x,segm.y),"Metrostroi_Arial11",sx, y-2,Color(255,255,50),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) +--]] + end + end + --if self.CurrentCamera == 0 then + surface.SetDrawColor(255,255,255) + surface.SetTexture(mouse) + surface.DrawTexturedRectRotated(self.MouseX,self.MouseY,8,8,0) + --end + + surface.SetDrawColor(0,0,0,200) + surface.DrawRect(0,0,800,600) + render.PopFilterMag() + render.PopFilterMin() + self.FilterMag = false +end +Metrostroi.GenerateClientProps() \ No newline at end of file diff --git a/lua/entities/gmod_track_arm/init.lua b/lua/entities/gmod_track_arm/init.lua new file mode 100644 index 0000000..bcb5bd5 --- /dev/null +++ b/lua/entities/gmod_track_arm/init.lua @@ -0,0 +1,207 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +function ENT:Initialize() + self:SetModel("models/props_combine/breendesk.mdl") + self.BaseClass.Initialize(self) + self.DriverSeat = self:CreateSeat("driver", Vector(-40, 0, 0), Angle(0, 0, 0), "models//nova/chair_office02.mdl") + self.CursorX = 0 + self.CursorY = 0 + self:CursorMove(0, 0) + self.Station = 0 +end + +hook.Add("AcceptInput", "metrostroi_arm_trigger_check", function(ent, inputName, activator, called, data) + if inputName == "ARMStartTouch" then + called.ARMTriggered = true + print(called, called:GetName(), activator, "Enable") + end + + if inputName == "ARMEndTouch" then + called.ARMTriggered = false + print(called, called:GetName(), activator, "Disable") + end +end) + + +local function GetOccupation(tbl) + for sID,signame in ipairs(tbl) do + if signame[1] == "@" then + local trigger = Metrostroi.ARMGet(signame:sub(2,-1), "trigger") + if not trigger or trigger.ARMTriggered then + return true + end + elseif signame ~= "" then + local signal = Metrostroi.ARMGet(signame, "signal") + if not signal or signal.OccupiedBy and signal.OccupiedBy ~= signal then + return true + end + end + end + return false +end + +function ENT:Think() + local armTbl = Metrostroi.ARMTable + local armConf = Metrostroi.ARMConfigGenerated + local station = armConf[self.Station] + local armTblStation = armTbl[self.Station] + if not station then return end + if not armTblStation or (IsValid(armTblStation.Controller) and armTblStation.Controller ~= self) then return end + armTblStation.Controller = self + for buttonID,button in ipairs(station.buttons) do + --print(button,button.selected) + Metrostroi.ARMSync(self.Station, 1000+buttonID, "buttonPressable",button.pressable) + Metrostroi.ARMSync(self.Station, 1000+buttonID, "buttonSelected",button.selected) + end + for segmID, segm in ipairs(station) do + if type(segm) == "table" then + if segm.occup then + Metrostroi.ARMSync(self.Station, segmID, "occup", segm.occupied) + end + + if segm.occup2 then + Metrostroi.ARMSync(self.Station, segmID, "occup2", segm._occup or GetOccupation(segm.occup2)) + end + Metrostroi.ARMSync(self.Station, segmID, "route", segm.route and true) + + + if segm.switch then + local switch = Metrostroi.ARMGet(segm.switch, "switch") + local main = switch and switch.MainTrack and not switch.AlternateTrack + local alt = switch and not switch.MainTrack and switch.AlternateTrack + Metrostroi.ARMSync(self.Station, segmID, "switch_m", main) + Metrostroi.ARMSync(self.Station, segmID, "switch_a", alt) + Metrostroi.ARMSync(self.Station, segmID, "switch_na", not main and not alt) + end + if segm.signal1 then + local signal = Metrostroi.ARMGet(segm.signal1.name, "signal") + local colors = signal and signal.Colors + if segm.signal1.type > 1 then Metrostroi.ARMSync(self.Station, segmID, "signal1I", signal and signal.InvationSignal) end + if segm.signal1.type > 2 and colors then + local Y = #colors:gsub("[^yY]","") > 1 + if Y then colors = colors:SetChar(colors:find("[yY]"),"") end + Metrostroi.ARMSync(self.Station, segmID, "signal1Y", Y) + end + Metrostroi.ARMSync(self.Station, segmID, "signal1", colors) + end + if segm.signal2 then + local signal = Metrostroi.ARMGet(segm.signal2.name, "signal") + local colors = signal and signal.Colors + if segm.signal2.type > 1 then Metrostroi.ARMSync(self.Station, segmID, "signal2I", signal and signal.InvationSignal) end + if segm.signal2.type > 2 and colors then + local Y = #colors:gsub("[^yY]","") > 1 + if Y then colors = colors:SetChar(colors:find("[yY]"),"") end + Metrostroi.ARMSync(self.Station, segmID, "signal2Y", Y) + end + Metrostroi.ARMSync(self.Station, segmID, "signal2", colors) + end + end + end + + self:NextThink(CurTime() + 0.5) + + return true +end + +function ENT:OnRemove() +end + +function ENT:CursorMove(sys, dX, dY) + self.CursorX = sys == "" and math.Clamp(self.CursorX + dX * 200, 0, 800) or dX + self.CursorY = sys == "" and math.Clamp(self.CursorY + dY * 200, 0, 600) or dY + self:SetNW2Int("CursorX", math.floor(self.CursorX or 0)) + self:SetNW2Int("CursorY", math.floor(self.CursorY or 0)) +end + +local function GetTextures(segm,typ) + return segm[typ],segm.maintex or segm[typ] +end +--Get real(original) texture Width and Height +local function GetRWH(segm,typ) + local tex,dtex = GetTextures(segm,typ) + return tex.rw or dtex.rw,tex.rh or dtex.rh +end +local function GetXY(x,y) + return 100+x*36,100+y*70 +end + + +function ENT:RouteButtonPressed(button) + --if not button.routes then return end + if self.RouteChoosing then + for k,v in ipairs(self.RouteChoosing.routes) do + if v.endButtons and table.HasValue(v.endButtons,button) then + Metrostroi.CentralisationPrepareRoute(self.Station,v) + break + end + end + elseif button.routes and not self.RouteChoosing and button.pressable then + self.RouteChoosing = button + for _,route in ipairs(self.RouteChoosing.routes) do + print(route.endButtons) + if not route.endButtons then continue end + for _,b in ipairs(route.endButtons) do b.selected = true end + end + end +end +function ENT:PanelTouch(state--[[ , x, y--]] ) + for i, v in ipairs(Metrostroi.ARMConfig) do + if math.InRangeXYR(self.CursorX, self.CursorY, 20 + (i - 1) * 30, 20, 30, 20) then + self.Station = i + self:SetNW2Int("ARM:Station", i) + end + end + if not state then return end + local ResetRoute = false + if self.RouteChoosing then + for _,route in ipairs(self.RouteChoosing.routes) do + if not route.endButtons then continue end + for _,b in ipairs(route.endButtons) do b.selected = false end + end + ResetRoute = true + end + --[[ local RouteChoosing = self.RouteChoosing + self.RouteChoosing = nil--]] + local confGenStation = Metrostroi.ARMConfigGenerated[self.Station] + if not confGenStation then return end + for k,button in pairs(confGenStation.buttons) do + local sx,sy = 100+button.x*36,100+button.y*70 + if button.type == "r" and math.InRangeXYR(self.CursorX, self.CursorY, sx+3,sy+12,15,25) then + self:RouteButtonPressed(button) + --[[ local sw,sh = 15,25 + local xa,ya = 3,12 + local x,y = sx+xa,sy+ya math.InRangeXYR(self.CursorX, self.CursorY, x,y,sw,sh) + if RouteChoosing then + if math.InRangeXYR(self.CursorX, self.CursorY, x,y,sw,sh) then + for k,v in ipairs(RouteChoosing.routes) do + if k == Format("%s-%s",button.name,v.name) then + Metrostroi.CentralisationPrepareRoute(self.Station,v) + end + end + end + elseif not self.RouteChoosing and button.pressable then + if math.InRangeXYR(self.CursorX, self.CursorY, x,y,sw,sh) then + self.RouteChoosing = button + for k,v in ipairs(button.routes) do + if v.buttonend then + v.buttonend.selected = true + end + end + end + end--]] + end + end + if not self.RouteChoosing then + for k,segm in ipairs(confGenStation) do + local x,y = GetXY(segm.x,segm.y) + local w,h = GetRWH(segm.segm,"maintex") + if math.InRangeXYR(self.CursorX, self.CursorY, x,y,w,h) then + segm._occup = not segm._occup + print(segm) + end + end + end + if ResetRoute then self.RouteChoosing = nil end +end \ No newline at end of file diff --git a/lua/entities/gmod_track_arm/shared.lua b/lua/entities/gmod_track_arm/shared.lua new file mode 100644 index 0000000..c877f8c --- /dev/null +++ b/lua/entities/gmod_track_arm/shared.lua @@ -0,0 +1,836 @@ +ENT.Type = "anim" + +--Inherit subway base for some need functions +ENT.Base = "gmod_subway_base" +ENT.NoTrain = true + +ENT.Category = "Metrostroi" + +ENT.Spawnable = false +ENT.AdminSpawnable = true + +ENT.Cameras = { + {Vector(-18+3,0,43+2),Angle(0,0,0),"Common.ARM.Monitor1",true}, +} +ENT.Types = { + --Main segments + [0.25]={ + maintex = {"metrostroi_arm/sec025",w=8,h=8,rw=7,rh=8,}, + occup_m = {"metrostroi_arm/sec025_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/sec025_m",col=Color(39,103,63)}, + width = 0.25, + next_m = {x=0.25,y=0} + }, + [0.5]={ + maintex = {"metrostroi_arm/sec05",w=16,h=8,rw=16,rh=8,}, + occup_m = {"metrostroi_arm/sec05_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/sec05_m",col=Color(39,103,63)}, + width = 0.5, + next_m = {x=0.5,y=0} + }, + [1]={ + maintex = {"metrostroi_arm/sec1",w=64,h=8,rw=34,rh=8,}, + occup_m = {"metrostroi_arm/sec1_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/sec1_m",col=Color(39,103,63)}, + width = 1, + next_m = {x=1,y=0} + }, + [2]={ + maintex = {"metrostroi_arm/sec2",w=128,h=8,rw=70,rh=8,}, + occup_m = {"metrostroi_arm/sec2_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/sec2_m",col=Color(39,103,63)}, + width = 2, + next_m = {x=2,y=0} + }, + [3]={ + maintex = {"metrostroi_arm/sec3",w=128,h=8,rw=106,rh=8,}, + occup_m = {"metrostroi_arm/sec3_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/sec3_m",col=Color(39,103,63)}, + width = 3, + next_m = {x=3,y=0} + }, + [4]={ + maintex = {"metrostroi_arm/sec4",w=256,h=8,rw=142,rh=8,}, + occup_m = {"metrostroi_arm/sec4_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/sec4_m",col=Color(39,103,63)}, + width = 4, + next_m = {x=4,y=0} + }, + [5]={ + maintex = {"metrostroi_arm/sec5",w=256,h=8,rw=178,rh=8,}, + occup_m = {"metrostroi_arm/sec5_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/sec5_m",col=Color(39,103,63)}, + width = 5, + next_m = {x=5,y=0} + }, + --Switches and helpers + sw = { + maintex = {"metrostroi_arm/switch",w=128,h=128,rw=70,rh=78,}, + occup_m = {"metrostroi_arm/switch_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/switch_m",col=Color(39,103,63)}, + occup_a = {"metrostroi_arm/switch_a",col=Color(255,255,255)}, + route_a = {"metrostroi_arm/switch_a",col=Color(39,103,63)}, + switch_m = {"metrostroi_arm/switch_ms",col=Color(41,202,26)}, + switch_a = {"metrostroi_arm/switch_as",col=Color(240,240,71)}, + switch_mn = {"metrostroi_arm/switch_ms",col=Color(200,50,50)}, + switch_an = {"metrostroi_arm/switch_as",col=Color(200,50,50)}, + width = 2, + next_m = {x=2,y=0}, + next_a = {x=2,y=1}, + }, + ["2sw"] = { + maintex = {"metrostroi_arm/2-switch_half",w=128,h=256,rw=70,rh=143,}, + occup_m = {"metrostroi_arm/2-switch_half_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/2-switch_half_m",col=Color(39,103,63)}, + occup_a = {"metrostroi_arm/2-switch_half_a",col=Color(255,255,255)}, + route_a = {"metrostroi_arm/2-switch_half_a",col=Color(39,103,63)}, + switch_m = {"metrostroi_arm/2-switch_half_ms",col=Color(41,202,26)}, + switch_a = {"metrostroi_arm/2-switch_half_as",col=Color(240,240,71)}, + switch_mn = {"metrostroi_arm/2-switch_half_as",col=Color(200,50,50)}, + switch_an = {"metrostroi_arm/2-switch_half_ms",col=Color(200,50,50)}, + width = 2, + next_m = {x=2,y=0}, + next_a = {x=2,y=2}, + }, + ["2swm"] = { + maintex = {"metrostroi_arm/2-switch-middle_half",w=128,h=128,rw=70,rh=73,}, + occup_m = {"metrostroi_arm/2-switch-middle_half_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/2-switch-middle_half_m",col=Color(39,103,63)}, + occup_a = {"metrostroi_arm/2-switch-middle_half_a",col=Color(255,255,255)}, + route_a = {"metrostroi_arm/2-switch-middle_half_a",col=Color(39,103,63)}, + switch_m = {"metrostroi_arm/2-switch-middle_half_ms",col=Color(41,202,26)}, + switch_a = {"metrostroi_arm/2-switch-middle_half_as",col=Color(240,240,71)}, + switch_mn = {"metrostroi_arm/2-switch-middle_half_ms",col=Color(200,50,50)}, + switch_an = {"metrostroi_arm/2-switch-middle_half_as",col=Color(200,50,50)}, + width = 2, + next_m = {x=2,y=0}, + next_a = {x=1.5,y=1}, + }, + ["4sw"] = { + maintex = {"metrostroi_arm/4-switch_quarter",w=128,h=256,rw=73,rh=143,x=-3,}, + occup_m = {"metrostroi_arm/4-switch_quarter_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/4-switch_quarter_m",col=Color(39,103,63)}, + occup_a = {"metrostroi_arm/4-switch_quarter_a1",col=Color(255,255,255)}, + route_a = {"metrostroi_arm/4-switch_quarter_a1",col=Color(39,103,63)}, + occup_x = {"metrostroi_arm/4-switch_quarter_a2",col=Color(255,255,255)}, + route_x = {"metrostroi_arm/4-switch_quarter_a2",col=Color(39,103,63)}, + switch_m = {"metrostroi_arm/4-switch_quarter_ms",col=Color(41,202,26)}, + switch_a = {"metrostroi_arm/4-switch_quarter_as",col=Color(240,240,71)}, + switch_mn = {"metrostroi_arm/4-switch_quarter_ms",col=Color(200,50,50)}, + switch_an = {"metrostroi_arm/4-switch_quarter_as",col=Color(200,50,50)}, + width = 2, + next_m = {x=2,y=0}, + next_a = {x=2,y=2}, + acc_x = ">", + acc_y = "!", + }, + ["4sws"] = { + maintex = {"metrostroi_arm/4-switch_quarter_small",w=64,h=128,rw=53,rh=78,x=-1,}, + occup_m = {"metrostroi_arm/4-switch_quarter_small_m",col=Color(255,255,255),x=-1,}, + route_m = {"metrostroi_arm/4-switch_quarter_small_m",col=Color(39,103,63),x=-1,}, + occup_a = {"metrostroi_arm/4-switch_quarter_small_a",col=Color(255,255,255),x=-1,}, + route_a = {"metrostroi_arm/4-switch_quarter_small_a",col=Color(39,103,63),x=-1,}, + switch_m = {"metrostroi_arm/4-switch_quarter_small_ms",col=Color(41,202,26)}, + switch_a = {"metrostroi_arm/4-switch_quarter_small_as",col=Color(240,240,71)}, + switch_mn = {"metrostroi_arm/4-switch_quarter_small_ms",col=Color(200,50,50)}, + switch_an = {"metrostroi_arm/4-switch_quarter_small_as",col=Color(200,50,50)}, + width = 1.5, + next_m = {x=1.5,y=0}, + next_a = {x=1.5,y=1}, + acc_x = ">", + acc_y = "!", + }, + ofd = { + maintex = {"metrostroi_arm/offset_down",w=64,h=256,rw=57,rh=143,}, + occup_m = {"metrostroi_arm/offset_down_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/offset_down_m",col=Color(39,103,63)}, + width = 2, + next_m = {x=2,y=2}, + }, + ofds = { + maintex = {"metrostroi_arm/offsed_down_small",w=128,h=128,rw=70,rh=78,}, + occup_m = {"metrostroi_arm/offsed_down_small_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/offsed_down_small_m",col=Color(39,103,63)}, + width = 2, + next_m = {x=2,y=1}, + }, + ysw = { + maintex = {"metrostroi_arm/y-switch_half",w=128,h=128,rw=70,rh=108,}, + occup_m = {"metrostroi_arm/y-switch_half_m",col=Color(255,255,255)}, + route_m = {"metrostroi_arm/y-switch_half_m",col=Color(39,103,63)}, + occup_a = {"metrostroi_arm/y-switch_half_a",col=Color(255,255,255)}, + route_a = {"metrostroi_arm/y-switch_half_a",col=Color(39,103,63)}, + switch_m = {"metrostroi_arm/y-switch_half_ms",col=Color(41,202,26)}, + switch_a = {"metrostroi_arm/y-switch_half_as",col=Color(240,240,71)}, + switch_mn = {"metrostroi_arm/y-switch_half_ms",col=Color(200,50,50)}, + switch_an = {"metrostroi_arm/y-switch_half_as",col=Color(200,50,50)}, + width = 2, + next_m = {x=2,y=0}, + next_a = {x=2,y=1}, + }, + --Signals + tl_1 = { + maintex = {"metrostroi_arm/tl_1",w=32,h=16,rw=21,rh=13}, + full = {"metrostroi_arm/tl_f",w=16,h=16,rw=12,rh=12}, + h1 = {"metrostroi_arm/tl_h1",w=16,h=16,rw=12,rh=12}, + h2 = {"metrostroi_arm/tl_h2",w=16,h=16,rw=12,rh=12}, + }, + tl_2 = { + maintex = {"metrostroi_arm/tl_2",w=64,h=16,rw=34,rh=13}, + full = {"metrostroi_arm/tl_f",w=16,h=16,rw=12,rh=12}, + h1 = {"metrostroi_arm/tl_h1",w=16,h=16,rw=12,rh=12}, + h2 = {"metrostroi_arm/tl_h2",w=16,h=16,rw=12,rh=12}, + }, + tl_3 = { + maintex = {"metrostroi_arm/tl_3",w=64,h=16,rw=47,rh=13}, + full = {"metrostroi_arm/tl_f",w=16,h=16,rw=12,rh=12}, + h1 = {"metrostroi_arm/tl_h1",w=16,h=16,rw=12,rh=12}, + h2 = {"metrostroi_arm/tl_h2",w=16,h=16,rw=12,rh=12}, + }, +} +if CLIENT then + for i,segm in pairs(ENT.Types) do + for k,tex in pairs(segm) do + if type(tex) ~= "table" or type(tex[1]) ~= "string" then continue end + tex.mat = surface.GetTextureID(tex[1]) + end + segm.id = i + end +end + +-------------- +-- Syntax of table +-- { +-- station = "ID,abbreviation,full name" +-- First line of segments +-- {"segment type:occupation checkers,...,occupation checkers:lights:...:lights"}, +-- Second line of segments +-- {x=x indent,skip=y indent(skips y segments vertically),"segment type:occupation checkers main,...,occupation checkers main:occupation checkers alt,...,occupation checkers alt:lights:...:lights"}, +-- } +-- segment type can have > or ! on start, when we want mirror it vertically or horisontally +-- Occupation checkers can be triggers(have @ in start of trigger name) or signals +-- Lights can be empty, if we want take light name from occupation checkers +-- Lights can have ! when stay in right direction or !! when stay in opposite direction +-- Lights can have > when we want switch light location from bottom to top +-- Examples +--{ +-- station = "001,ST,Station name", +-- { +-- {"1:L1:!","1:L3:!","sw:@sw1trigger:@sw3trigger"} +-- {x=1,"1:L2",">sw:@sw2trigger:@sw3rigger"}, +-- } +--} +-------------- +Metrostroi.ARMConfig = { + --[=[ + { + station = "451,ВБ,УоллеÑа брина", + {"0.5:1","0.5:1","0.5:1","0.5:1","1:1","1:1","1:1","sw:1","3:1","3:1"}, + {x=7,"0.5:1","4sws:1",">4sws:1","1:1","1:1"},{skip=1}, + {x=7,"0.5:1","!4sws:1",">!4sws:1","1:1","1:1"}, + {"0.5:1","0.5:1","0.5:1","0.5:1","1:1","1:1","1:1","!sw:1","3:1","3:1"}, + },{ + station="915,РЧ,РечнаÑ", + {x=3.5,"0.5:RX22","1:RX22","1:RX20","0.5:RX98","4sw:::RX1:0",">4sw:::RX3:","1","2","2","1","1"},{skip=3}, + {"1:201","0.5:203","0.5:205","0.5:207","0.5:209","0.5:211","0.5:213","1:215","1:217","0.5:219","!4sw:::RX2::!!2RX95",">!4sw:::RX4:","1","2","2","1","1"}, + },{ + station="110,МД,МеждународнаÑ", + {"1:145//:!1","1:143:!1","1:141//:!1","0.5:RC137","0.5:139M:!1","3:137:!>1","sw:@wt_md_s1:@wt_md_s1:MD1:!!>2D:!>2G","3:@wt_md_t1_1::!2MD3","2:@wt_md_t1_2"}, + {x=9,"4sws:@wt_md_s3::MD3",">4sws:@wt_md_s5::MD5:!2MD1","2:@wt_md_t3"},{skip=1}, + {x=9,"!4sws:@wt_md_s4::MD4",">!4sws:@wt_md_s6::MD6:!>2MD2","2:@wt_md_t4"}, + {"1:MD148:!!2","1:MD146:!!2","1:MD144:!!2","1:MD142:!!2:!1 OP","1:MD140:!!2","1:RC144A","1:RC142","!sw:@wt_md_s2:@wt_md_s2:MD2:!!2MD138G:!1E","3:@wt_md_t2_1::!>2MD4","2:@wt_md_t2_2"}, + objects={ + {type="b",name="МЕЖДУÐÐРОДÐÐЯ",x1=4+0.3,y1=0+0.6,x2=7-0.3,y2=4-0.6,}, + {type="cl",path=1,x=4+0.4,y=0+0.65}, + {type="cl",path=2,x=7-0.4,y=4-0.65, right=true}, + }, + buttons = { + {type="r" ,y=4-0.6 ,x=0,name="2I"}, + {type="pn",y=4-0.6 ,x=0.3,name="2IA"}, + {type="r" ,y=4-0.6 ,x=4,name="OP"}, + {type="r" ,y=4 ,x=6+0.4, name="MD138G"}, + {type="r" ,y=4-0.6 ,x=9,name="E"}, + {type="r" ,y=3 ,x=12,name="4I"}, + {type="r" ,y=1-0.6 ,x=12,name="3I"}, + {type="r" ,y=0-0.6 ,x=6+0.4, name="D"}, + {type="pn",y=0-0.6 ,x=6.7,name="DA"}, + {type="r" ,y=0 ,x=9,name="G"}, + {type="pn",y=1+0.3 ,x=1.4,name="CPS"}, + {type="rn",y=2-0.3 ,x=1.4,name="ГОК"}, + {type="pn",y=1+0.3 ,x=2.5,name="CRI"}, + {type="rn",y=2-0.3 ,x=2.5,name="ОМО"}, + + {type="rn",y=1.6 ,x=9,name="ÐО 3П"}, + {type="rn",y=2.4 ,x=9,name="ÐО 4П"}, + }, + info= { + {y=4.7,x=6.3,text="ТЕСТ"}, + {y=4.7,x=7.65,text="ÐÐ’:Ð¥3",col=Color(50,230,50)}, + {y=4.95,x=7.65,text="ÐÐ’:ДВ",col=Color(50,230,50)}, + {y=5.2, x=7.65,text="УПО",col=Color(50,230,50)}, + {y=4.7,x=9,text="П1ДЦ",col=Color(255,230,50)}, + {y=4.95,x=9,text="П2ДЦ",col=Color(255,230,50)}, + }, + routes = { + ["2I-OP"] = { + signals={"MD148","MD146","MD144","MD142"},mode=1, + first={0,4},last={3,4}, + }, + ["OP-MD138G"] = { + signals={"MD140"},mode=1, + first={4,4},last={6,4}, + }, + ["MD138G-4I"] = { + signals={"MD138G"},mode=3, + first={7,4},last={12,3}, + }, + ["MD138G-3I"] = { + signals={"MD138G"},mode=3, + first={7,4},last={12,1},checks={{9,1},{10.5,3}}, + }, + ["4I-OP"] = { + signals={"MD2"},mode=3, + first={12,3},last={4,4}, + }, + ["3I-OP"] = { + signals={"MD1"},mode=3, + first={12,1},last={4,4},checks={{9,1},{10.5,3}}, + }, + ["MD138G-E"] = { + signals={"MD138G"},mode=3, + first={7,4},last={9,4}, + }, + ["E-MD138G"] = { + signals={"E"},mode=3, + first={7,4},last={4,4}, + }, + ["D-4I"] = { + signals={"D"},mode=3, + first={7,0},last={12,3},checks={{9,3},{10.5,1}}, + }, + ["D-3I"] = { + signals={"D"},mode=3, + first={7,0},last={12,1}, + }, + ["D-G"] = { + signals={"D"},mode=3, + first={7,0},last={9,0}, + }, + ["G-D"] = { + signals={"G"},mode=3, first={7,0},last={4,0}, + }, + ["4I-D"] = { + signals={"MD2"},mode=3, + first={12,3},last={4,0},checks={{9,3},{10.5,1},{3.5,0}},ignore={{12,3}} + }, + ["3I-D"] = { + signals={"MD1"},mode=3, + first={12,1},last={4,0},checks={{3.5,0}}, + }, + }, + signals = { + --"LensesStr": "YYG-RW", + MD148={ + Mode=1, --AB 1/5 + R="4",RY="42",Y="1",YG="13",G="3",IS="5", --Lenses ID + Autostop = true,AO = false,bs=3, + }, + MD146={ + Mode=1, --AB 1/5 + R="4",RY="42",Y="1",YG="13",G="3",IS="5", --Lenses ID + Autostop = true,AO = false,bs=3, + }, + MD144={ + Mode=1, --AB 1/5 + R="4",RY="42",Y="1",YG="13",G="3",IS="5", --Lenses ID + Autostop = true,AO = false,bs=3, + }, + MD142={ + Mode=1, --AB 1/5 + R="3",RY="31",Y="1",G="2",IS="4", --Lenses ID + Autostop = true,AO = false,bs=4, + }, + MD140={ + Mode=1, --AB 1/5 + R="4",RY="42",--[[ Y="1",--]] YG="13",IS="5", --Lenses ID + Autostop = true,AO = false,bs=3, + }, + MD138G={ + Mode=1, --AB 1/5 + R="3",RY="32",W="1",IS="4", --Lenses ID + Autostop = true,AO = false,bs=1, + }, + MD3={ + Mode=1, --AB 1/5 + R="1",IS="2", + Autostop = true,AO = false, + }, + MD4={ + Mode=1, --AB 1/5 + R="1",IS="2", + Autostop = true,AO = false, + }, + MD1={ + Mode=1, --AB 1/5 + R="2",W="1",IS="3", + Autostop = true,AO = false, + }, + MD2={ + Mode=1, --AB 1/5 + R="2",W="1",IS="3", + Autostop = true,AO = false, + }, + E={ + Mode=1, --AB 1/5 + R="2",W="1", + Autostop = true,AO = false, + }, + G={ + Mode=1, --AB 1/5 + R="2",W="1",IS="3", + Autostop = true,AO = false, + }, + D={ + Mode=1, --AB 1/5 + R="2",W="1",IS="3", + Autostop = true,AO = false, + }, + } + },{ + station="112,ПТ,ПолитехничеÑкаÑ", + {x=1,"1:PT2TB","2:PT2TA","2:PT2T:!!2PT2","2:PT4SA:!!2PT4",">2swm:@wt_pt_t4::PT4:!3PT968M:!!2G ","1:PT966A","2:PT966:!>2","sw:@wt_pt_t6::PT6:!>2PT964:!!>3A","1:962"}, + {x=15,"1:PT6SS","1:963"}, + {x=1,"1:77:!1","1:75:!1","1:73:!1","1:71:!>1",">2swm:@wt_pt_t1::PT1:!!>2B","!2swm:@wt_pt_t3::PT3:!>2PT69","1:PT67M:!2","1:PT65B","1:PT65A","1:PT65:!2","1:PT63:!2:!!1 OP ","1:PT61:!2","1:PT59:!2","1:PT57:!2"},{skip=1}, + {"1:PT70:!!2:!1 OP2 ","1:PT68:!!2","2:@wt_pt_t2:!!2PT66","!2swm:@wt_pt_t4::PT2:!!3PT64","2","2:62:!!1","1:60:!!1","2:60A","1:58M:!!1","1:56:!!1","1:54:!!1","1: 52:!!1"}, + {}, + objects={ + {type="b",name="ПОЛИТЕХÐИ-\nЧЕСКÐЯ I",x1=10+0.3,y1=0+0.6,x2=13-0.3,y2=2-0.6,}, + {type="b",name="ПОЛИТЕХÐИ-\nЧЕСКÐЯ II",x1=10+0.3,y1=4+0.6,x2=13-0.3,y2=6-0.6,}, + {type="cl",path=3,x=10+0.4,y=0+0.3}, + {type="cl",path=1,x=10+0.4,y=1+0.3}, + {type="cl",path=2,x=13-0.4,y=5-0.3, right=true}, + }, + labels = { + + }, + buttons = { + --{type="r",y=0-0.6 ,x=1, start="3T",target={1,0},flip=true}, + --{type="r",y=0 ,x=3+0.4,start="PT2",target={1,0},flip=true}, + + --{type="r",y=4-0.6 ,x=1, signal=" OP2 "}, + --{type="r",y=4 ,x=-1+0.4, signal="PT70"}, + --{type="r",y=4 ,x=3+0.4, signal="2P",target={8,4}}, + ----{type="r",y=4 ,x=7+0.4, signal="62"}, + --{type="r",y=2 ,x=5, signal="71"}, + --{type="r",y=2-0.6 ,x=4+0.4, signal="B",target={5,2}}, + --{type="r",y=2-0.6 ,x=17, signal="PT57"}, + --{type="r",y=2-0.6 ,x=10, signal="PT67M"}, + --{type="r",y=2 ,x=12+0.4,signal=" OP "}, + --{type="r",y=0-0.6 ,x=10, signal="PT968M",flip=true}, + --{type="r",y=0 ,x=15, signal="PT964",flip=true}, + --{type="r",y=1-0.6 ,x=15, signal="4O",target={15,1},flip=true}, + --{type="r",y=0-0.6 ,x=12+0.4,signal="A",flip=true}, + }, + routes = { + --[[ PT2 = {"A"}, + PT70 = {" OP ","A","2P"}, + --PT64 = {" OP ","A","PT64"}, + B = {" OP ","A"}, + PT57 = {"PT67M"}, + PT964 = {"PT968M"}, + PT67M = {"71"," OP2 "}, + PT968M = {"3T","71"," OP2 "}, + A={"4O"}--]] + }, + signals = { + --"LensesStr": "YYG-RW", + PT70={ + Mode=1, --AB 1/5 + R="4",RY="41",Y="2",YG="23",G="3",IS="5", --Lenses ID + Autostop = true,AO = false, + }, + PT68={ + Mode=1, --AB 1/5 + R="4",RY="41",Y="2",YG="23",G="3",IS="5", --Lenses ID + Autostop = true,AO = false, + }, + PT66={ + Mode=1, --AB 1/5 + R="4",RY="41",Y="2",YG="23",G="3",IS="5", --Lenses ID + Autostop = true,AO = false, + }, + PT64={ --"YWY-GRW + Mode=1, --AB 1/5 + R="5",RY="51",Y="3",YG="34",G="4",IS="6",W="2",YY="13",YbY="1b3", --Lenses ID + Autostop = true,AO = false, + routes = { + [" OP "]={path=2,mode=3},--Path-2, Mode: W + A={path=3,mode=2},--Path-2, Mode: YY + } + } + } + },{ + station="115,ОК,ОктÑбрьÑкаÑ", + {"1","1","1","1","3","sw:::OK1","1"}, + {x=9,"4sws:::OK3",">4sws:::OK5","1"},{skip=1}, + {x=9,"!4sws:::OK4",">!4sws:::OK6","1"}, + {"1","1","1","1","3","!sw:::OK2","5"}, + objects={ + {type="b",name="ОКТЯБРЬСКÐЯ",x1=4+0.3,y1=0+0.6,x2=7-0.3,y2=4-0.6,}, + {type="cl",path=1,x=4+0.4,y=0+0.65}, + {type="cl",path=2,x=7-0.4,y=4-0.65, right=true}, + }, + }--]=] +} + +print("MetrostroiARM:Generating ARM table...") +local errors,warnings = 0,0 +local function ARMGenError(text,err) + MsgC(Color(255,err and 0 or 255,0),"MetrostroiARM:"..text.."\n") + ErrorNoHalt() + if err then errors = errors + 1 else warnings = warnings + 1 end +end + +local function ParseARMTable(text,station,line,segm) + local resultTbl = {} + + local tbl = string.Explode(":",text) + + local typ = tbl[1] + if typ:find("^[>!]") then + resultTbl.invertX = typ:find(">") + resultTbl.invertY = typ:find("!") + typ = typ:gsub("^[>!]+","") + end + local segmTyp = ENT.Types[tonumber(typ) or typ] + if not segmTyp then return {error = 1,type = tbl[1]} end + table.remove(tbl,1) + + for i,str in ipairs(tbl) do + if str:find(",") then + tbl[i] = string.Explode(",",str) + end + if str:sub(1,2) == "!!" then + resultTbl.signal2 = str:sub(3,-1) + elseif str[1] == "!" then + resultTbl.signal1 = str:sub(2,-1) + end + end + resultTbl.occup = type(tbl[1]) == "table" and tbl[1] or {tbl[1]} + if segmTyp.occup_a then + resultTbl.occupAlt = type(tbl[2]) == "table" and tbl[2] or {tbl[2]} + resultTbl.switch = tbl[3] + if segmTyp.occup_x then + resultTbl.occup2 = type(tbl[4]) == "table" and tbl[4] or {tbl[4]} + end + end + + if resultTbl.signal1 then + local signal = resultTbl.signal1:gsub("^[>]+","") + local top = resultTbl.signal1:find("^>") + + local typ = tonumber(signal[1]) + local name = signal:sub(2,-1) + if not typ then + ARMGenError(Format("Parser warning. Signal type in id station %d line %d segm %d segment not found. Using default 1",station,line,segm),false) + name = signal[1]..name + elseif typ < 1 or typ > 3 then + ARMGenError(Format("Parser warning. Signal type in id station %d line %d segm %d segment have wrong ID, must be in range 1..3. Using default 1",station,line,segm),false) + typ = 1 + end + if name == "" then name = resultTbl.occup[1] end + resultTbl.signal1 = {name=name,type=typ or 1,top = top,segm=resultTbl,dir=false} + end + if resultTbl.signal2 then + local signal = resultTbl.signal2:gsub("^[>]+","") + local top = resultTbl.signal2:find("^>") + local typ = tonumber(signal[1]) + local name = signal:sub(2,-1) + if not typ then + ARMGenError(Format("Parser warning. Signal type in id station %d line %d segm %d segment not found. Using default 1",station,line,segm),false) + name = signal[1]..name + elseif typ < 1 or typ > 3 then + ARMGenError(Format("Parser warning. Signal type in id station %d line %d segm %d segment have wrong ID, must be in range 1..3. Using default 1",station,line,segm),false) + typ = 1 + end + if name == "" then name = resultTbl.occup[1] end + resultTbl.signal2 = {name=name,type=typ or 1,top = top,segm=resultTbl,dir=true} + end + resultTbl.type = typ + resultTbl.width = segmTyp.width or 1 + resultTbl.segm = segmTyp + return resultTbl +end + + +Metrostroi.ARMConfigGenerated = {} +local id = 0 +for i,station in ipairs(Metrostroi.ARMConfig) do + if not Metrostroi.ARMConfigGenerated[i] then Metrostroi.ARMConfigGenerated[i] = {} end + local genStation = Metrostroi.ARMConfigGenerated[i] + local y = 0 + + MsgC(Color(0, 222, 255),"MetrostroiARM:Solving station ",i,"\n") + if #station == 0 then ARMGenError(Format("Parser warning. Empty station %d! Skipping...",i),false) continue end + if not station.station then ARMGenError(Format("Parser error. Can't find station name in station %d! Skipping...",i),true) continue end + + local stationTbl = string.Explode(",",station.station) + if not stationTbl or #stationTbl < 3 or not tonumber(stationTbl[1]) then ARMGenError(Format("Parser error. Malformed station data in station %d! Skipping...",i),true) continue end + + genStation.id = stationTbl[1] + genStation.shortname = stationTbl[2] + genStation.name = stationTbl[3] + genStation.buttons = {} + genStation.routes = station.routes or {} + genStation.objects = station.objects or {} + genStation.info = station.info or {} + genStation.signals = station.signals or {} + for lineID,line in ipairs(station) do + local x = line.x or 0 + for segmID,segm in ipairs(line) do + if type(segm) ~= "string" then + ARMGenError(Format("Parser error on station %d line %d segm %d, excepted string,got %s. Skipping segment...",i,lineID,segmID,type(segm)),true) + continue + end + local segmTbl= ParseARMTable(segm,i,lineID,segmID) + if segmTbl.error then + ARMGenError(Format("Parser warning. Skipping station %d line %d segm %d segment, type error(type '%s' not found)",i,lineID,segmID,segmTbl.type),false) + continue + end + if segmTbl.signal1 then + for name,sig in pairs(genStation.signals) do + if name==segmTbl.signal1.name then + sig.sig = segmTbl.signal1 + sig.segm = segmTbl + end + end + end + if segmTbl.signal2 then + for name,sig in pairs(genStation.signals) do + if name==segmTbl.signal2.name then + sig.sig = segmTbl.signal2 + sig.segm = segmTbl + end + end + end + segmTbl.x = x + segmTbl.y = y + segmTbl.id = table.insert(genStation,segmTbl) + x = x + (segmTbl.width or 1) + end + y = y + (line.skip or 1) + end + if station.buttons then + for _,button in pairs(station.buttons) do + button.pressable = false + button.selected = false + button.isbutton = true + if button.type == "r" then + button.segm = ENT.Types.button_normal + end + table.insert(genStation.buttons,button) + end + end + if station.routes then + for name,route in pairs(station.routes) do + route.name = name + end + end +end + +function ENT.FindSegment(station,x,y) + for segmid,segm in ipairs(station) do + if segm.x == x and segm.y == y then return segm end + end +end + +local function GetXY(x,y) + return 100+x*36,100+y*70 +end + +local function GetSegmPos(segm,alt) + local x,y = segm.x,segm.y + local segmt = segm.segm + local u0,v0,u1,v1 = 0,0,1,1 + if segm.invertX then u0,u1 = 1,0 end + if segm.invertY then v0,v1 = 1,0 end + if alt == nil then + return GetXY(x+segm.width*u0,y) + elseif alt == false and segmt.next_m then + return GetXY(x+segmt.next_m.x-segm.width*u0,y+segmt.next_m.y) + --print(123,x,y) + elseif alt and segmt.next_a then + return GetXY(x+segmt.next_a.x*u1-segmt.next_a.x*u0+segmt.width*u0,y+segmt.next_a.y*v1-segmt.next_a.y*v0) + end +end + + + +local function ARMSetNextCompare(posX,posY,segm,nsegm) + local xp,yp = GetSegmPos(segm) + local x,y = GetSegmPos(nsegm) + if sx and posX == x and posY == y then + nsegm.prev = segm + return true + end + + sx,sy = GetSegmPos(nsegm,false) + if sx and posX == sx and posY == sy then + nsegm.next_m = segm + return true + end + if not nsegm.segm.next_a then return end + sx,sy = GetSegmPos(nsegm,true) + if x ~= xp and y ~= yp and sx and posX == sx and posY == sy then + nsegm.next_a = segm + return true + end +end + +local function ARMSetNext(station) + for csegmid,csegm in ipairs(station) do + for segmid,segm in ipairs(station) do + if segm == csegm then continue end + + local posX,posY = GetSegmPos(csegm) + if ARMSetNextCompare(posX,posY,csegm,segm) then + csegm.prev = segm + --break + end + local posOX,posOY = GetSegmPos(csegm,false) + if ARMSetNextCompare(posOX,posOY,csegm,segm) then + csegm.next_m = segm + --break + end + local posAX,posAY = GetSegmPos(segm) + if not csegm.segm.next_a or posX == posAX or posY == posAY then continue end + posOX,posOY = GetSegmPos(csegm,true) + if ARMSetNextCompare(posOX,posOY,csegm,segm) then + csegm.next_a = segm + --break + end + end + end +end +for i,st in ipairs(Metrostroi.ARMConfigGenerated) do ARMSetNext(st) end + +local iter = 0 +function ENT.TraceSegments(station,segm,to,dir,last,checked,trace) + if not checked then iter=0 checked = {} end + iter = iter + 1 + if iter > 10000 then ARMGenError(Format("Routes generation error. Max iter reached!"),true) return false end + + if not trace then trace = {} end + if last == to then return trace end + if not segm or checked[segm] then return restbl end + checked[segm] = true + local segmIndex = table.insert(trace,{segm.id}) + + local segmM,segmA = segm.next_m,segm.next_a + local segmP = segm.prev + local mainM = segmM and (dir and segmM.x > segm.x or not dir and segmM.x < segm.x) + local mainP = segmP and (dir and segmP.x > segm.x or not dir and segmP.x < segm.x) + if segmA and mainM then + local trace= table.Copy(trace) + trace[segmIndex][2] = true + local result = ENT.TraceSegments(station,segmA,to,dir,segm,checked,trace) + if result then return result end + end + if segmM and mainM then + return ENT.TraceSegments(station,segmM,to,dir,segm,checked,trace) + end + if segmP and mainP then + trace[segmIndex][2] = last and segm.next_a == last or nil-- or segmP.next_a == segm or nil + return ENT.TraceSegments(station,segmP,to,dir,segm,checked,trace) + end + if segm == to then return trace end +end +for i,station in ipairs(Metrostroi.ARMConfigGenerated) do + for name,route in pairs(station.routes) do + if not route.first or not route.last then ARMGenError(Format("Route check[%s]. Skipping route, missing first/last...",name),false) continue end + + local first,last = ENT.FindSegment(station,route.first[1],route.first[2]),ENT.FindSegment(station,route.last[1],route.last[2]) + if not first or not last then ARMGenError(Format("Route check[%s]. Skipping route, can't find first/last on selected pos...",name),false) continue end + + if route.checks then + for k,segmt in pairs(route.checks) do + route.checks[k] = ENT.FindSegment(station,segmt[1],segmt[2]) + end + end + local trace1 = ENT.TraceSegments(station,first,last,false) + if trace1 then + route.dir,route.route,route.directions = false,{},{} + for i,segm in ipairs(trace1) do + table.insert(route.route,station[segm[1]]) + route.directions[i] = segm[2] + end + if route.ignore then + route.ignores = {} + for k,segmti in pairs(route.ignore) do + local segm = ENT.FindSegment(station,segmti[1],segmti[2]) + for i,segmt in ipairs(route.route) do + if segm == segmt then route.ignores[i] = segm end + end + end + end + continue + end + local trace2 = ENT.TraceSegments(station,first,last,true) + if trace2 then + route.dir,route.route,route.directions = true,{},{} + for i,segm in ipairs(trace2) do + table.insert(route.route,station[segm[1]]) + route.directions[i] = segm[2] + end + if route.ignore then + route.ignores = {} + for k,segmti in pairs(route.ignore) do + local segm = ENT.FindSegment(station,segmti[1],segmti[2]) + for i,segmt in ipairs(route.route) do + if segm == segmt then route.ignores[i] = segm end + end + end + end + continue + end + ARMGenError(Format("Route check[%s]. Can't find path from start on end.",name),false) + end + for _,button in pairs(station.buttons) do + for name,route in pairs(station.routes) do + if name:find("-") then + local buttonName = name:sub(1,name:find("-")-1) + local buttonNameEnd = name:sub(name:find("-")+1,-1) + if button.name == buttonName then + if not route.startButtons then route.startButtons = {} end + table.insert(route.startButtons, button) + button.pressable = true + + if not button.routes then button.routes = {} end + table.insert(button.routes,route) + end + if button.name == buttonNameEnd then + if not route.endButtons then route.endButtons = {} end + table.insert(route.endButtons, button) + end + end + end + end +end +if errors == 0 and warnings == 0 then + MsgC(Color(0,255,0),"MetrostroiARM:Generate finished without errors and warnings.\n") +elseif errors == 0 then + MsgC(Color(255,255,0),"MetrostroiARM:Generate finished with "..warnings.." warnings.\n") +else + MsgC(Color(255,0,0),"MetrostroiARM:Generate finished with "..errors.." errors and "..warnings.." warnings!\n") +end +--PrintTable(Metrostroi.ARMConfigGenerated) + +for k,v in ipairs(Metrostroi.ARMConfigGenerated) do + Metrostroi.ARMTable[k] = { + occChecks = {}, + net = {}, + signal = {}, + switch = {}, + routes = {}, + } +end \ No newline at end of file diff --git a/lua/entities/gmod_track_autodrive_plate/cl_init.lua b/lua/entities/gmod_track_autodrive_plate/cl_init.lua new file mode 100644 index 0000000..a95ce8b --- /dev/null +++ b/lua/entities/gmod_track_autodrive_plate/cl_init.lua @@ -0,0 +1,56 @@ +include("shared.lua") + +local debug = GetConVar("metrostroi_drawsignaldebug") +local function enableDebug() + if debug:GetBool() then + hook.Add("PostDrawTranslucentRenderables","MetrostroiAutoDebug",function(bDrawingDepth,bDrawingSkybox) + for _,ent in pairs(ents.FindByClass("gmod_track_autodrive_plate")) do + if bDrawingDepth and LocalPlayer():GetPos():Distance(sig:GetPos()) < 512 then + local pos = sig:LocalToWorld(Vector(0,0,0)) + local ang = sig:LocalToWorldAngles(Angle(0,90,90)) + cam.Start3D2D(pos, ang, 0.25) + surface.SetDrawColor(125, 125, 0, 255) + surface.DrawRect(-40, -20, 80, 20) + cam.End3D2D() + end + end + end) + else + hook.Remove("PostDrawTranslucentRenderables","MetrostroiAutoDebug") + end +end +hook.Remove("PostDrawTranslucentRenderables","MetrostroiAutoDebug") +cvars.AddChangeCallback( "metrostroi_drawsignaldebug", enableDebug) +enableDebug() + +function ENT:Initialize() +end + +function ENT:OnRemove() +end +function ENT:RemoveModels() +end + +function ENT:Draw() + self:DrawModel() + if false and self.SpeedDetectors then + cam.Start3D() + for i,dist in ipairs(self.SpeedDetectors) do + render.DrawLine(self:LocalToWorld(Vector((dist-80)/0.01905,-3.3,5.5)),self:LocalToWorld(Vector((dist-80)/0.01905,3.3,5.5)), Color(255,0,0),true) + render.DrawLine(self:LocalToWorld(Vector((dist-80-0.02)/0.01905,-3.3,5.5)),self:LocalToWorld(Vector((dist-80+0.02)/0.01905,-3.3,5.5)), Color(255,0,0),true) + render.DrawLine(self:LocalToWorld(Vector((dist-80-0.02)/0.01905,3.3,5.5)),self:LocalToWorld(Vector((dist-80+0.02)/0.01905,3.3,5.5)), Color(255,0,0),true) + end + cam.End3D() + end +end + +net.Receive("metrostroi_auodrive_coils",function() + local ent = net.ReadEntity() + if true or not ent then return end + ent.SpeedDetectors = {} + local count = net.ReadUInt(16) + for i=1,count do + table.insert(ent.SpeedDetectors,net.ReadFloat()) + end + PrintTable(ent.SpeedDetectors) +end) \ No newline at end of file diff --git a/lua/entities/gmod_track_autodrive_plate/init.lua b/lua/entities/gmod_track_autodrive_plate/init.lua new file mode 100644 index 0000000..297833d --- /dev/null +++ b/lua/entities/gmod_track_autodrive_plate/init.lua @@ -0,0 +1,197 @@ +AddCSLuaFile("shared.lua") +AddCSLuaFile("cl_init.lua") +include("shared.lua") +util.AddNetworkString("metrostroi_auodrive_coils") +function ENT:Initialize() + self:DrawShadow(false) + + self:SetModel(self.Model or "models/metrostroi/signals/autodrive/doska160.mdl") + + --self:PhysicsInit(MOVETYPE_VPHYSICS) + self:PhysicsInitStatic(SOLID_VPHYSICS ) + self:SetMoveType(MOVETYPE_NONE) + self:SetSolid(SOLID_VPHYSICS) + self:GetPhysicsObject():Sleep() + --self:SetCollisionGroup(COLLISION_GROUP_IN_VEHICLE) + + self:SetTrigger(true) + + self.Touches = {} + self.SpeedDetectors = {} + self.Power = true +end + + +METROSTROI_ABRAKE_PRG = 92 +METROSTROI_ABRAKE_DIST = 0.1 +METROSTROI_ABRAKE_COEFF = 1.4 +ENT.RELOAD = true +function ENT:Think() + if self.PlateType == METROSTROI_LSENSOR then + return + end + if self.StationID then + if not IsValid(self.Station) then + local stationT = Metrostroi.Stations[tonumber(self.StationID)] + local platformT = stationT and stationT[tonumber(self.StationPath)] + if platformT then + self.Station = platformT.ent + end + self.Power = false + else + self.Power = self.Station.AnnouncerPlay + end + end + --self:SetMoveType(MOVETYPE_NONE) + --self:SetMoveType(MOVETYPE_VPHYSICS) + -- if self.PlateType == METROSTROI_ACOIL_SBRAKE then + -- if IsValid(self.Touches) then + -- self.BrakeProgrammPassed = self.Touches.BrakeProgrammPassed + -- else + -- self.BrakeProgrammPassed = false + -- end + -- end + if self.RELOAD and self.PlateType == METROSTROI_ACOIL_SBRAKE and self.BrakeProps then for k,v in pairs(self.BrakeProps) do SafeRemoveEntity(v) end self.BrakeProps = false end + if self.PlateType == METROSTROI_ACOIL_SBRAKE and not self.BrakeProps then + self.BrakeProps = {} + self.SpeedDetectors = {} + --[=[ for i=0,METROSTROI_ABRAKE_PRG do + local targetdist = 100/METROSTROI_ABRAKE_PRG*i + local targetspeed = math.min((targetdist/6)^2*15,15) + math.max((targetdist-20)/(90-20),0)^2*(60) + --local targetdist = math.min((targetspeed/(15))^3*20,20) + math.max((targetspeed-15)/(70-15),0)^2.5*(150-20) + --local targetspeed = 70/METROSTROI_ABRAKE_PRG*i + --local targetdist = math.min((targetspeed/(15))^3*20,20) + math.max((targetspeed-15)/(70-15),0)^2.5*(150-20) + local targetProgDist = math.max(0.15,targetspeed/3600*1000*METROSTROI_ABRAKE_DIST) + if dist > 100 then break end + --[[ if speed > 15 then + targetdist = ((speed)/65)^METROSTROI_ABRAKE_COEFF*150 + else + targetdist = ((speed)/65)^METROSTROI_ABRAKE_COEFF*150 + end--]] + --print(-2,i,speed,targetdist) + if targetspeed ~= 15 and targetspeed <= 65 then + local iter = 0 + while dist < targetdist and iter < 100 do + iter = iter + 1 + if iter == 100 then print("InfiniteLoop") end + table.insert(self.SpeedDetectors,dist) + dist = dist + targetProgDist + end + --if targetdist > dist then print(targetdist-dist,prevdist) end + print(Format("On %.1f m we must have %.1f km\\h, our interval = %.3f m, bpdist = %.3f, spd=%.1f",targetdist,targetspeed,targetProgDist,dist,(targetProgDist)/0.1/1000*3600)) + --[[ local prop = ents.Create("gmod_track_autodrive_plate") + -- if i > 15 then + -- prop:SetPos(self:LocalToWorld(Vector((((160 + 160 + 10)*(((i-16)/67)^1.3))-165+15)/0.01905,0,0))) + -- else + -- prop:SetPos(self:LocalToWorld(Vector((((160 + 160 + 10)*(((i)/80)^1.94))-165)/0.01905,0,0))) + -- end + prop:SetPos(self:LocalToWorld(Vector((dist*2-165)/0.01905,0,0))) + prop:SetAngles(self:GetAngles()) + prop.Model = "models/hunter/blocks/cube025x025x025.mdl" + prop.PlateType = METROSTROI_ACOIL_SBRAKECMD + prop:Spawn() + prop:SetMaterial("phoenix_storms/mrtire",true) + table.insert(self.BrakeProps,prop) + prop:SetParent(self) + prop:ManipulateBoneScale(0,Vector(0.1,0.75,1)) + prop:GetPhysicsObject():SetPos(Vector(1000,0,0),true) + + prop:SetTrigger(true)--]] + else + dist = targetdist + end + prevdist = targetProgDist + --dist = dist + targetProgDist + end--]=] + local dist = 0.05 + local prevdist = 0 + for i=0,12 do + local targetdist = i + local targetspeed = math.min((targetdist/12)^0.5*25-3,22) + --local targetspeed = math.min((targetdist/14)^0.5*25-3,22) + local targetProgDist = math.max(0.15,targetspeed/3600*1000*0.15)--0.096 + + local iter = 0 + while dist < targetdist-targetProgDist and iter < 100 do + iter = iter + 1 + assert(iter<100,"InfiniteLoop") + table.insert(self.SpeedDetectors,dist) + dist = dist + targetProgDist + end + --if targetdist > dist then print(targetdist-dist,prevdist) end + --print(Format("On %.1f m we must have %.1f km\\h, our interval = %.3f m, bpdist = %.3f, spd=%.1f",targetdist,targetspeed,targetProgDist,dist,(targetProgDist)/0.15/1000*3600)) + prevdist = targetProgDist + --dist = dist + targetProgDist + end + + + local dist = 30 + local prevdist = 30 + for i=30,100 do + local targetdist = i + local targetspeed = math.min(((targetdist-30)/66)^0.6*66-1,66) + --local targetspeed = math.min(((targetdist-30)/65)^0.5*65-1,65) + local targetProgDist = math.max(0,targetspeed/3600*1000*0.15) + local iter = 0 + while dist < targetdist-targetProgDist and iter < 100 do + iter = iter + 1 + assert(iter<100,"InfiniteLoop") + table.insert(self.SpeedDetectors,dist) + dist = dist + targetProgDist + end + --if targetdist > dist then print(targetdist-dist,prevdist) end + --print(Format("On %.1f m we must have %.1f km\\h, our interval = %.3f m, bpdist = %.3f, spd=%.1f",targetdist,targetspeed,targetProgDist,dist,(targetProgDist)/0.15/1000*3600)) + prevdist = targetProgDist + --dist = dist + targetProgDist + end + --print(#self.SpeedDetectors) + ---[[ + net.Start("metrostroi_auodrive_coils") + net.WriteEntity(self) + net.WriteUInt(#self.SpeedDetectors,16) + for k,v in ipairs(self.SpeedDetectors) do + net.WriteFloat(v) + end + net.Broadcast()--]] + + + end + self.RELOAD = false +end + + + +function ENT:StartTouch( ent ) + if not self:PassesTriggerFilters(ent) then return end + --[[ if self.PlateType == METROSTROI_ACOIL_SBRAKECMD then + ent.BrakeProgrammPassed = (CurTime()-ent.LastBrakeProgrammPassed) + ent.LastBrakeProgrammPassed = CurTime() + end--]] + if not ent.Commands[self] then + ent.Commands[self] = table.insert(ent.Commands,self) + end + --print("Coil:TRIGGER!") + if ent.Trigger then + --print("Coil:TRIGGERED!") + ent:Trigger(self) + end + self.Touches[ent] = true +end +function ENT:EndTouch( ent ) + if not self:PassesTriggerFilters(ent) then return end + if ent.Commands[self] then + table.remove(ent.Commands,ent.Commands[self]) + ent.Commands[self] = nil + end + for k,v in ipairs(ent.Commands) do ent.Commands[v] = k end + self.Touches[ent] = nil +end +function ENT:PassesTriggerFilters(ent) + return IsValid(ent) and ent:GetClass() == "gmod_train_autodrive_coil" +end +function ENT:OnRemove() + if self.Touches then + for ent in pairs(self.Touches) do self:EndTouch(ent) end + end + if self.BrakeProps then for k,v in pairs(self.BrakeProps) do SafeRemoveEntity(v) end end +end diff --git a/lua/entities/gmod_track_autodrive_plate/shared.lua b/lua/entities/gmod_track_autodrive_plate/shared.lua new file mode 100644 index 0000000..2e619c9 --- /dev/null +++ b/lua/entities/gmod_track_autodrive_plate/shared.lua @@ -0,0 +1,19 @@ +ENT.Type = "anim" + +ENT.PrintName = "Autodrive plate" +ENT.Category = "Metrostroi (utility)" + +ENT.Spawnable = false +ENT.AdminSpawnable = false +ENT.RenderGroup = RENDERGROUP_BOTH +ENT.PhysgunDisabled = true +ENT.m_tblToolsAllowed = {""} + +METROSTROI_ACOIL_DRIVE = 1 +METROSTROI_ACOIL_SBRAKE = 2 +METROSTROI_ACOIL_DOOR = 3 +--METROSTROI_ACOIL_BRAKE = 4 +--METROSTROI_ACOIL_SBRAKECMD = 10 +METROSTROI_LSENSOR = 4 +METROSTROI_UPPSSENSOR = 6 +METROSTROI_SBPPSENSOR = 7 diff --git a/lua/entities/gmod_track_clock_interval/cl_init.lua b/lua/entities/gmod_track_clock_interval/cl_init.lua new file mode 100644 index 0000000..9531965 --- /dev/null +++ b/lua/entities/gmod_track_clock_interval/cl_init.lua @@ -0,0 +1,66 @@ +include("shared.lua") +ENT.DigitPositions = { + {Vector(14,-8.5,0)}, + {Vector(-2,-8.5,0)}, + {Vector(-15,-8.5,0)}, + {Vector(7,-8.5,0),true}, +} + +function ENT:Initialize() + self.Digits = {} +end +function ENT:Think() + if self:IsDormant() then + self:OnRemove() + return + end + + for k, v in pairs(self.DigitPositions) do + if not IsValid(self.Digits[k]) then + local model + if v[2] then + model = "models/metrostroi/mus_clock/ind_"..(self:GetNW2Bool("Type") and "spb" or "msk").."_type"..tostring(self:GetNW2Int("Light",1)).."_dot.mdl" + else + model = "models/metrostroi/mus_clock/ind_"..(self:GetNW2Bool("Type") and "spb" or "msk").."_type"..tostring(self:GetNW2Int("Light",1)).."_numb.mdl" + end + + --self.Digits[k] = ents.CreateClientProp("models/metrostroi/81-717/reverser.mdl") + --self.Digits[k]:SetModel(model) + --hook.Add("MetrostroiBigLag", self.Digits[k], function(ent) + -- ent:SetPos(self:LocalToWorld(v[1])) + --end) + self.Digits[k] = ClientsideModel(model, RENDERGROUP_OPAQUE) + + --if ent.Spawned then hook.Remove("MetrostroiBigLag",ent) end + --ent.Spawned = true + self.Digits[k]:SetPos(self:LocalToWorld(v[1])) + self.Digits[k]:SetAngles(self:GetAngles()) + self.Digits[k]:SetSkin(10) + self.Digits[k]:SetParent(self) + end + end + + local dT = Metrostroi.GetTimedT() + --local interval = -dT + os.time() - (self:GetIntervalResetTime()+GetGlobalFloat("MetrostroiTY")) + local interval = Metrostroi.GetSyncTime() - (self:GetIntervalResetTime() + GetGlobalFloat("MetrostroiTY")) + if (interval <= (9 * 60 + 59)) and (interval >= 0) then + if IsValid(self.Digits[1]) then self.Digits[1]:SetSkin(math.floor(interval / 60)) end + if IsValid(self.Digits[2]) then self.Digits[2]:SetSkin(math.floor((interval % 60) / 10)) end + if IsValid(self.Digits[3]) then self.Digits[3]:SetSkin(math.floor((interval % 60) % 10)) end + else + for i = 1, 3 do + if IsValid(self.Digits[i]) then + self.Digits[i]:SetSkin(10) + end + end + end +end +function ENT:OnRemove() + for _,v in pairs(self.Digits) do + SafeRemoveEntity(v) + end +end + +function ENT:Draw() + self:DrawModel() +end diff --git a/lua/entities/gmod_track_clock_interval/init.lua b/lua/entities/gmod_track_clock_interval/init.lua new file mode 100644 index 0000000..3402133 --- /dev/null +++ b/lua/entities/gmod_track_clock_interval/init.lua @@ -0,0 +1,103 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +function ENT:KeyValue(key, value) + self.VMF = self.VMF or {} + self.VMF[key] = value +end +-------------------------------------------------------------------------------- +function ENT:Initialize() + self:EntIndex() + self.VMF = self.VMF or {} + self.Type = (tonumber(self.VMF.Type) or 0) + self.Light = (tonumber(self.VMF.Light) or 0) + self.NoAutoSearch = (tonumber(self.VMF.NoAutoSearch) or 0) + self.NoInterval = (tonumber(self.VMF.NoInterval) or 0) + if self.Type == 0 then + self:SetModel("models/metrostroi/clock_interval_moscow.mdl") + else + self:SetModel("models/metrostroi/clock_interval_type2.mdl") + end + self:SetNW2Bool("Type",self.Type > 0) + self:SetNW2Int("Light",self.Light+1) +end + +function ENT:PostInitalize() + if self.NoInterval == 1 then return end + self.Signal = nil + if self.NoAutoSearch == 0 then + local mind, sig + for _,v in pairs(ents.FindInSphere(self:GetPos(),1512)) do + if v:GetClass() == "gmod_track_signal" and not v.ARSOnly and (not sig or v:GetPos():Distance(self:GetPos()) < mind) and (self:GetAngles()-v:GetAngles()):Forward().x > 0 then + --err = self:WorldToLocal(v:GetPos()).y < 0 + --print(self:WorldToLocal(v:GetPos()).x) + sig = v + mind = v:GetPos():Distance(self:GetPos()) + delta_z = math.abs(self:GetPos().z-v:GetPos().z) + end + end + if sig then + self.Signal = sig + --print(self,"linked to",sig.Name,mind,self:WorldToLocal(sig:GetPos()).x) + end + end +end + +function ENT:Think() + if self.NoInterval == 1 then return end + self.SensingTrain = false + if self.NoAutoSearch == 0 then + if IsValid(self.Signal) then + if self.Signal.OccupiedBy and self.Signal.OccupiedBy ~= self.Signal then + self.SensingTrain = true + end + else + -- Check if train passes the sign + for ray=0,6 do + local trace = { + start = self:GetPos() - self:GetRight()*16 + self:GetForward()*50*(ray-3) + Vector(0,0,64), + endpos = self:GetPos() - self:GetRight()*16 + self:GetForward()*50*(ray-3) - Vector(0,0,256), + --mask = -1, + --filter = { }, + ignoreworld = true, + } + + --debugoverlay.Cross(trace.start,10,1,Color(0,0,255)) + --debugoverlay.Line(trace.start,trace.endpos,1,Color(0,0,255)) + + local result = util.TraceLine(trace) + if result.Hit and (not result.HitWorld) then + --debugoverlay.Sphere(result.HitPos,5,1,Color(0,0,255),true) + if result.Entity and (not result.Entity:IsPlayer()) then + self.SensingTrain = true + end + end + end + end + end + -- If only sensing train for the first time, reset + self.SensingTime = self.SensingTime or (Metrostroi.GetSyncTime()) + if self.SensingTrain and (not self.IntervalReset) then + self:SetIntervalResetTime(Metrostroi.GetSyncTime()-GetGlobalFloat("MetrostroiTY")+Metrostroi.GetTimedT()) + self.SensingTime = Metrostroi.GetSyncTime() + self.IntervalReset = true + end + + -- If not sensing anything for more than 3 seconds, expect something again + if (not self.SensingTrain) and (Metrostroi.GetSyncTime() - self.SensingTime > 7.0) then + self.IntervalReset = false + end + self:NextThink(CurTime() + (self.NoAutoSearch ~= 0 and 2 or not IsValid(self.Signal) and 1 or 0.5)) + return true +end +function ENT:AcceptInput( input, activator, called, data ) + if self.NoInterval == 1 then return end + if input == "Reset" then + if not self.IntervalReset then + self:SetIntervalResetTime(Metrostroi.GetSyncTime()-GetGlobalFloat("MetrostroiTY")+Metrostroi.GetTimedT()) + self.SensingTime = Metrostroi.GetSyncTime() + self.IntervalReset = true + end + end +end diff --git a/lua/entities/gmod_track_clock_interval/shared.lua b/lua/entities/gmod_track_clock_interval/shared.lua new file mode 100644 index 0000000..cd539cb --- /dev/null +++ b/lua/entities/gmod_track_clock_interval/shared.lua @@ -0,0 +1,11 @@ +ENT.Type = "anim" + +ENT.Category = "Metrostroi (utility)" + +ENT.Spawnable = true +ENT.AdminSpawnable = false + +function ENT:SetupDataTables() + self:NetworkVar("Float", 0, "IntervalResetTime") + self:NetworkVar("Float", 0, "IntervalResetTime") +end diff --git a/lua/entities/gmod_track_clock_small/cl_init.lua b/lua/entities/gmod_track_clock_small/cl_init.lua new file mode 100644 index 0000000..9408242 --- /dev/null +++ b/lua/entities/gmod_track_clock_small/cl_init.lua @@ -0,0 +1,98 @@ +include("shared.lua") +ENT.DigitPositions = { + { + {Vector(16+7,-1,1)}, + {Vector(9+7,-1,1)}, + {Vector(-0+7,-1,1)}, + {Vector(-7+7,-1,1)}, + {Vector(-16+7,-1,1)}, + {Vector(-23+7,-1,1)}, + {Vector(-11+7-0.5,-1,0.7), true}, --точка + {Vector(5+7-0.5,-1,0.7), true}, --точка + {Vector(-7+7,-1,-11)}, + {Vector(-16+7,-1,-11)}, + {Vector(-23+7,-1,-11)}, + {Vector(-11+7-0.5,-1,-11.3), true}, -- точка + },{ + {Vector(18.3,-0.3,0.8)}, + {Vector(12.8,-0.3,0.8)}, + {Vector( 7.3,-0.3,0.8)}, + {Vector( 1.8,-0.3,0.8)}, + {Vector(-3.7,-0.3,0.8)}, + {Vector(-9.2,-0.3,0.8)}, + {Vector( 8.8,-0.3,0.5), true}, --точка + {Vector(-2.3,-0.3,0.5), true}, --точка + {Vector(18.3,-0.3,-8.7)}, + {Vector(12.8,-0.3,-8.7)}, + {Vector( 7.3,-0.3,-8.7)}, + {Vector(14.2,-0.3,-9), true}, -- точка + + } +} + +function ENT:Initialize() + self.Digits = {} +end +function ENT:Think() + if self:IsDormant() then self:OnRemove();return end + for k,v in pairs(self.DigitPositions[self:GetNW2Int("Type") == 2 and 2 or 1]) do + if not IsValid(self.Digits[k]) then + local model + if v[2] then + if self:GetNW2Int("Type") == 2 then + model = "models/metrostroi/mus_clock/ind_small_orange_dot_spb.mdl" + else + model = "models/metrostroi/mus_clock/ind_small_"..(self:GetNW2Int("Type") == 1 and "red" or "orange").."_dot.mdl" + end + else + if self:GetNW2Int("Type") == 2 then + model = "models/metrostroi/mus_clock/ind_small_orange_numb_spb.mdl" + else + model = "models/metrostroi/mus_clock/ind_small_"..(self:GetNW2Int("Type") == 1 and "red" or "orange").."_numb.mdl" + end + end + --self.Digits[k] = ents.CreateClientProp("models/metrostroi/81-717/reverser.mdl") + --self.Digits[k]:SetModel(model) + --hook.Add("MetrostroiBigLag",self.Digits[k],function(ent) + -- ent:SetPos(self:LocalToWorld(v[1])) + -- --if ent.Spawned then hook.Remove("MetrostroiBigLag",ent) end + -- --ent.Spawned = true + --end) + self.Digits[k] = ClientsideModel(model,RENDERGROUP_OPAQUE) + self.Digits[k]:SetPos(self:LocalToWorld(v[1])) + self.Digits[k]:SetAngles(self:GetAngles()) + self.Digits[k]:SetSkin(10) + self.Digits[k]:SetParent(self) + end + end + + local d = os.date("!*t",Metrostroi.GetSyncTime()) + if IsValid(self.Digits[1]) then self.Digits[1]:SetSkin(math.floor(d.hour / 10)) end + if IsValid(self.Digits[2]) then self.Digits[2]:SetSkin(math.floor(d.hour % 10)) end + if IsValid(self.Digits[3]) then self.Digits[3]:SetSkin(math.floor(d.min / 10)) end + if IsValid(self.Digits[4]) then self.Digits[4]:SetSkin(math.floor(d.min % 10)) end + if IsValid(self.Digits[5]) then self.Digits[5]:SetSkin(math.floor(d.sec / 10)) end + if IsValid(self.Digits[6]) then self.Digits[6]:SetSkin(math.floor(d.sec % 10)) end + + --local dT = Metrostroi.GetTimedT() + local interval = Metrostroi.GetSyncTime() - (self:GetIntervalResetTime()+GetGlobalFloat("MetrostroiTY")) + if (interval <= (9*60+59)) and (interval >= 0) then + if IsValid(self.Digits[9]) then self.Digits[9]:SetSkin(math.floor(interval/60)) end + if IsValid(self.Digits[10]) then self.Digits[10]:SetSkin(math.floor((interval%60)/10)) end + if IsValid(self.Digits[11]) then self.Digits[11]:SetSkin(math.floor((interval%60)%10)) end + else + for i = 9,11 do + if IsValid(self.Digits[i]) then + self.Digits[i]:SetSkin(10) + end + end + end +end +function ENT:OnRemove() + for _,v in pairs(self.Digits) do + SafeRemoveEntity(v) + end +end +function ENT:Draw() + self:DrawModel() +end diff --git a/lua/entities/gmod_track_clock_small/init.lua b/lua/entities/gmod_track_clock_small/init.lua new file mode 100644 index 0000000..12a23f9 --- /dev/null +++ b/lua/entities/gmod_track_clock_small/init.lua @@ -0,0 +1,102 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +function ENT:KeyValue(key, value) + self.VMF = self.VMF or {} + self.VMF[key] = value +end + +function ENT:Initialize() + self:EntIndex() + self.VMF = self.VMF or {} + self.Type = (tonumber(self.VMF.Type) or tonumber(self.VMF.type) or 2) + self.NoAutoSearch = (tonumber(self.VMF.NoAutoSearch) or 0) + self.NoInterval = (tonumber(self.VMF.NoInterval) or 0) + self:SetNW2Int("Type",self.Type) + if self.Type == 2 then + self:SetModel("models/metrostroi/mus_clock/ind_small_base_spb.mdl") + else + self:SetModel("models/metrostroi/mus_clock/ind_small_base.mdl") + end +end + +function ENT:PostInitalize() + if self.NoInterval == 1 then return end + self.Signal = nil + if self.NoAutoSearch == 0 then + local mind, sig + for _,v in pairs(ents.FindInSphere(self:GetPos(),1512)) do + if v:GetClass() == "gmod_track_signal" and not v.ARSOnly and (not sig or v:GetPos():Distance(self:GetPos()) < mind) and (self:GetAngles()-v:GetAngles()):Forward().x > 0 then + --err = self:WorldToLocal(v:GetPos()).y < 0 + --print(self:WorldToLocal(v:GetPos()).x) + sig = v + mind = v:GetPos():Distance(self:GetPos()) + delta_z = math.abs(self:GetPos().z-v:GetPos().z) + end + end + if sig then + self.Signal = sig + --print(self,"linked to",sig.Name,mind,self:WorldToLocal(sig:GetPos()).x) + end + end +end + +function ENT:Think() + if self.NoInterval == 1 then return end + + self.SensingTrain = false + if self.NoAutoSearch == 0 then + if IsValid(self.Signal) then + if self.Signal.OccupiedBy and self.Signal.OccupiedBy ~= self.Signal then + self.SensingTrain = true + end + else + -- Check if train passes the sign + for ray=0,6 do + local trace = { + start = self:GetPos() - self:GetRight()*16 + self:GetForward()*50*(ray-3) + Vector(0,0,64), + endpos = self:GetPos() - self:GetRight()*16 + self:GetForward()*50*(ray-3) - Vector(0,0,256), + --mask = -1, + --filter = { }, + ignoreworld = true, + } + + --debugoverlay.Cross(trace.start,10,1,Color(0,0,255)) + --debugoverlay.Line(trace.start,trace.endpos,1,Color(0,0,255)) + + local result = util.TraceLine(trace) + if result.Hit and (not result.HitWorld) then + --debugoverlay.Sphere(result.HitPos,5,1,Color(0,0,255),true) + if result.Entity and (not result.Entity:IsPlayer()) then + self.SensingTrain = true + end + end + end + end + end + -- If only sensing train for the first time, reset + self.SensingTime = self.SensingTime or (Metrostroi.GetSyncTime()) + if self.SensingTrain and (not self.IntervalReset) then + self:SetIntervalResetTime(Metrostroi.GetSyncTime()-GetGlobalFloat("MetrostroiTY")+Metrostroi.GetTimedT()) + self.SensingTime = Metrostroi.GetSyncTime() + self.IntervalReset = true + end + + -- If not sensing anything for more than 3 seconds, expect something again + if (not self.SensingTrain) and (Metrostroi.GetSyncTime() - self.SensingTime > 7.0) then + self.IntervalReset = false + end + self:NextThink(CurTime() + (self.NoAutoSearch ~= 0 and 2 or not IsValid(self.Signal) and 1 or 0.5)) + return true +end +function ENT:AcceptInput( input, activator, called, data ) + if self.NoInterval == 1 then return end + if input == "Reset" then + if not self.IntervalReset then + self:SetIntervalResetTime(Metrostroi.GetSyncTime()-GetGlobalFloat("MetrostroiTY")+Metrostroi.GetTimedT()) + self.SensingTime = Metrostroi.GetSyncTime() + self.IntervalReset = true + end + end +end diff --git a/lua/entities/gmod_track_clock_small/shared.lua b/lua/entities/gmod_track_clock_small/shared.lua new file mode 100644 index 0000000..d546dbb --- /dev/null +++ b/lua/entities/gmod_track_clock_small/shared.lua @@ -0,0 +1,10 @@ +ENT.Type = "anim" + +ENT.Category = "Metrostroi (utility)" + +ENT.Spawnable = true +ENT.AdminSpawnable = false + +function ENT:SetupDataTables() + self:NetworkVar("Float", 0, "IntervalResetTime") +end diff --git a/lua/entities/gmod_track_clock_time/cl_init.lua b/lua/entities/gmod_track_clock_time/cl_init.lua new file mode 100644 index 0000000..8f2d4a9 --- /dev/null +++ b/lua/entities/gmod_track_clock_time/cl_init.lua @@ -0,0 +1,56 @@ +include("shared.lua") +ENT.DigitPositions = { + {Vector(35,-8.5,0)}, + {Vector(22,-8.5,0)}, + {Vector(6,-8.5,0)}, + {Vector(-7,-8.5,0)}, + {Vector(-23,-8.5,0)}, + {Vector(-36,-8.5,0)}, + {Vector(15,-8.5,0),true}, + {Vector(-14,-8.5,0),true}, +} + +function ENT:Initialize() + self.Digits = {} +end +function ENT:Think() + if self:IsDormant() then self:OnRemove();return end + for k,v in pairs(self.DigitPositions) do + if not IsValid(self.Digits[k]) and (not v[2] or self:GetNW2Bool("Type") or not self:GetNW2Bool("Type") and k==7) then + local model + if v[2] then + model = "models/metrostroi/mus_clock/ind_"..(self:GetNW2Bool("Type") and "spb" or "msk").."_type"..tostring(self:GetNW2Int("Light",1)).."_dot.mdl" + else + model = "models/metrostroi/mus_clock/ind_"..(self:GetNW2Bool("Type") and "spb" or "msk").."_type"..tostring(self:GetNW2Int("Light",1)).."_numb.mdl" + end + --self.Digits[k] = ents.CreateClientProp("models/metrostroi/81-717/reverser.mdl") + --self.Digits[k]:SetModel(model) + --hook.Add("MetrostroiBigLag",self.Digits[k],function(ent) + -- ent:SetPos(self:LocalToWorld(v[1])) + -- --if ent.Spawned then hook.Remove("MetrostroiBigLag",ent) end + -- --ent.Spawned = true + --end) + self.Digits[k] = ClientsideModel(model,RENDERGROUP_OPAQUE) + self.Digits[k]:SetPos(self:LocalToWorld(v[1])) + self.Digits[k]:SetAngles(self:GetAngles()) + self.Digits[k]:SetSkin(10) + self.Digits[k]:SetParent(self) + end + end + + local d = os.date("!*t",Metrostroi.GetSyncTime()) + if IsValid(self.Digits[1]) then self.Digits[1]:SetSkin(math.floor(d.hour / 10)) end + if IsValid(self.Digits[2]) then self.Digits[2]:SetSkin(math.floor(d.hour % 10)) end + if IsValid(self.Digits[3]) then self.Digits[3]:SetSkin(math.floor(d.min / 10)) end + if IsValid(self.Digits[4]) then self.Digits[4]:SetSkin(math.floor(d.min % 10)) end + if IsValid(self.Digits[5]) then self.Digits[5]:SetSkin(math.floor(d.sec / 10)) end + if IsValid(self.Digits[6]) then self.Digits[6]:SetSkin(math.floor(d.sec % 10)) end +end +function ENT:OnRemove() + for _,v in pairs(self.Digits) do + SafeRemoveEntity(v) + end +end +function ENT:Draw() + self:DrawModel() +end diff --git a/lua/entities/gmod_track_clock_time/init.lua b/lua/entities/gmod_track_clock_time/init.lua new file mode 100644 index 0000000..e595955 --- /dev/null +++ b/lua/entities/gmod_track_clock_time/init.lua @@ -0,0 +1,20 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") +function ENT:KeyValue(key, value) + self.VMF = self.VMF or {} + self.VMF[key] = value +end +function ENT:Initialize() + self:EntIndex() + self.VMF = self.VMF or {} + self.Type = (tonumber(self.VMF.Type) or 0) + self.Light = (tonumber(self.VMF.Light) or 0) + if self.Type == 0 then + self:SetModel("models/metrostroi/clock_time_moscow.mdl") + else + self:SetModel("models/metrostroi/clock_time_type2.mdl") + end + self:SetNW2Bool("Type",self.Type > 0) + self:SetNW2Int("Light",self.Light+1) +end diff --git a/lua/entities/gmod_track_clock_time/shared.lua b/lua/entities/gmod_track_clock_time/shared.lua new file mode 100644 index 0000000..745474f --- /dev/null +++ b/lua/entities/gmod_track_clock_time/shared.lua @@ -0,0 +1,6 @@ +ENT.Type = "anim" + +ENT.Category = "Metrostroi (utility)" + +ENT.Spawnable = true +ENT.AdminSpawnable = false diff --git a/lua/entities/gmod_track_controller/cl_init.lua b/lua/entities/gmod_track_controller/cl_init.lua new file mode 100644 index 0000000..339429d --- /dev/null +++ b/lua/entities/gmod_track_controller/cl_init.lua @@ -0,0 +1,53 @@ +include("shared.lua") +local frame = nil +function CreateFrame() + if !frame or !frame:IsValid() then + local self = net.ReadEntity() + local Map = game.GetMap() or "" + if Map:find("gm_metrostroi") and Map:find("lite") then + Map = "gm_metrostroi_lite" + elseif Map:find("gm_metrostroi") then + Map = "gm_metrostroi" + elseif Map:find("gm_mus_orange_line") and Map:find("long") then + Map = "gm_orange" + elseif Map:find("gm_mus_orange_line") then + Map = "gm_orange_lite" + end + frame = vgui.Create("DFrame") + frame:SetDeleteOnClose(true) + frame:SetTitle("Dispatch control") + --frame:SetSize(275, 34+24*17) + frame:SetDraggable(false) + frame:SetSizable(false) + frame:MakePopup() + + frame:SetSize(ScrW()-40,ScrH()-40) + frame:Center() + local StationChoose = vgui.Create( "DComboBox",frame ) + StationChoose:SetPos( 5, 30 ) + StationChoose:SetSize( 250, 20 ) + StationChoose:SetValue( "Choose station" ) + for k,v in pairs(Metrostroi.WorkingStations[Map][1]) do + if Metrostroi.AnnouncerData[v] then StationChoose:AddChoice(Metrostroi.AnnouncerData[v][1]) end + end + + local PlayerChoose = vgui.Create( "DComboBox",frame ) + PlayerChoose:SetPos( ScrW()-300,30 ) + PlayerChoose:SetSize( 250, 20 ) + PlayerChoose:SetValue( "Choose player" ) + for i = 1,20 do + PlayerChoose:AddChoice(i) + end + + local Main = vgui.Create( "DPanel",frame ) + Main:SetPos(0,60) + Main:SetSize(frame:GetWide(),frame:GetTall()-60) + Main.Paint = function(self,w,h) + surface.DrawRect(5, 0, w-10, h-5) + end + + end +end +function ENT:Initialize() +end +net.Receive("TrackController",CreateFrame) \ No newline at end of file diff --git a/lua/entities/gmod_track_controller/init.lua b/lua/entities/gmod_track_controller/init.lua new file mode 100644 index 0000000..9fe3b90 --- /dev/null +++ b/lua/entities/gmod_track_controller/init.lua @@ -0,0 +1,29 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") +util.AddNetworkString("TrackController") +local function ShowWindowOnCL(ply,ent) + net.Start("TrackController") + net.WriteEntity(ent) + net.Send(ply) +end +function ENT:Initialize() + self:SetModel("models/metrostroi/signals/clock_time.mdl") +end + +function ENT:Think() +end +function ENT:SpawnFunction( ply, tr, ClassName ) + + if ( !tr.Hit ) then return end + + local SpawnPos = tr.HitPos + tr.HitNormal * 16 + local ent = ents.Create( ClassName ) + ent:SetPos( SpawnPos ) + ent:Spawn() + ent:Activate() + + ShowWindowOnCL(ply,ent) + return ent + +end \ No newline at end of file diff --git a/lua/entities/gmod_track_controller/shared.lua b/lua/entities/gmod_track_controller/shared.lua new file mode 100644 index 0000000..a5bc144 --- /dev/null +++ b/lua/entities/gmod_track_controller/shared.lua @@ -0,0 +1,6 @@ +ENT.Type = "anim" + +ENT.Category = "Metrostroi (utility)" + +ENT.Spawnable = false +ENT.AdminSpawnable = false diff --git a/lua/entities/gmod_track_horlift_signal/cl_init.lua b/lua/entities/gmod_track_horlift_signal/cl_init.lua new file mode 100644 index 0000000..096bf0f --- /dev/null +++ b/lua/entities/gmod_track_horlift_signal/cl_init.lua @@ -0,0 +1,157 @@ +include("shared.lua") + +ENT.DigitPositions = { + { + {Vector(7.61,-26.57,25.16),4,4}, + {Vector(7.59,-27.33,13.00),5,4}, + }, + { + {Vector(7.41,-27.54,25.26),1,4}, + {Vector(7.41,-27.54,14.00),2,1}, + {Vector(7.43,4.46,25.26),3}, + {Vector(7.43,4.46,14.00),3}, + } +} +ENT.ModelNames = { + "models/metrostroi/signals/mus/lamp_base.mdl", + "models/metrostroi/signals/mus/lamp_base.mdl", + "models/metrostroi/signals/mus/lamp_lens.mdl", + "models/metrostroi/signals/mus/lamp_base_horlift_square.mdl", + "models/metrostroi/signals/mus/lamp_base_horlift_dots.mdl", +} +function ENT:Initialize() + self.Models = {} + self.Anims = {} +end +function ENT:Animate(clientProp, value, min, max, speed, damping, stickyness) + local id = clientProp + if not self.Anims[id] then + self.Anims[id] = {} + self.Anims[id].val = value + self.Anims[id].V = 0.0 + end + --if self["_anim_old_"..id] == value then return self["_anim_old_"..id] end + -- Generate sticky value + if stickyness and damping then + self.Anims[id].stuck = self.Anims[id].stuck or false + self.Anims[id].P = self.Anims[id].P or value + if (math.abs(self.Anims[id].P - value) < stickyness) and (self.Anims[id].stuck) then + value = self.Anims[id].P + self.Anims[id].stuck = false + else + self.Anims[id].P = value + end + end + + if damping == false then + local dX = speed * self.DeltaTime + if value > self.Anims[id].val then + self.Anims[id].val = self.Anims[id].val + dX + end + if value < self.Anims[id].val then + self.Anims[id].val = self.Anims[id].val - dX + end + if math.abs(value - self.Anims[id].val) < dX then + self.Anims[id].val = value + end + else + -- Prepare speed limiting + local delta = math.abs(value - self.Anims[id].val) + local max_speed = 1.5*delta / self.DeltaTime + local max_accel = 0.5 / self.DeltaTime + + -- Simulate + local dX2dT = (speed or 128)*(value - self.Anims[id].val) - self.Anims[id].V * (damping or 8.0) + if dX2dT > max_accel then dX2dT = max_accel end + if dX2dT < -max_accel then dX2dT = -max_accel end + + self.Anims[id].V = self.Anims[id].V + dX2dT * self.DeltaTime + if self.Anims[id].V > max_speed then self.Anims[id].V = max_speed end + if self.Anims[id].V < -max_speed then self.Anims[id].V = -max_speed end + + self.Anims[id].val = math.max(0,math.min(1,self.Anims[id].val + self.Anims[id].V * self.DeltaTime)) + + -- Check if value got stuck + if (math.abs(dX2dT) < 0.001) and stickyness and (self.DeltaTime > 0) then + self.Anims[id].stuck = true + end + end + --print(id,min + (max-min)*self.Anims[id].val,value, min + (max-min)*value) + --self["_anim_old_"..id] = min + (max-min)*self.Anims[id].val + return min + (max-min)*self.Anims[id].val +end +------ +function ENT:AnimateFrom(clientProp,from) + if IsValid(self.ClientEnts[clientProp]) then + self.ClientEnts[clientProp]:SetPoseParameter("position",self.Anims[from].val) + end + return self.Anims[from].val +end + +function ENT:OnRemove() + self:RemoveModels() +end + + +function ENT:RemoveModels() + if self.Models then + for k,v in pairs(self.Models) do v:Remove() end + end + self.Models = {} +end +function ENT:Think() + if self:IsDormant() then self:OnRemove();return end + self.PrevTime = self.PrevTime or RealTime() + self.DeltaTime = (RealTime() - self.PrevTime) + self.PrevTime = RealTime() + self.Type = self:GetNWInt("Type") + self.YellowSignal = not self:GetNWBool("Yellow") + self.WhiteSignal = not self:GetNWBool("White") + self.PeopleGoing = not self:GetNWBool("White2") + if self.Type ~= self.OldType then + if self.Models then + for k,v in pairs(self.Models) do v:Remove() end + end + self.OldType = self.Type + end + for k,v in pairs(self.DigitPositions[self.Type+1]) do + if not IsValid(self.Models[k]) then + --self.Models[k] = ents.CreateClientProp("models/metrostroi/81-717/reverser.mdl") + --self.Models[k]:SetModel(self.ModelNames[v[2]]) + --hook.Add("MetrostroiBigLag",self.Models[k],function(ent) + -- ent:SetPos(self:LocalToWorld(v[1])) + -- --if ent.Spawned then hook.Remove("MetrostroiBigLag",ent) end + -- --ent.Spawned = true + --end) + self.Models[k] = ClientsideModel(self.ModelNames[v[2]],RENDERGROUP_OPAQUE) + self.Models[k]:SetPos(self:LocalToWorld(v[1])) + self.Models[k]:SetAngles(self:LocalToWorldAngles(Angle(v[2]==5 and 90 or 0,0,0))) + if k < 3 then + self.Models[k]:SetRenderMode(RENDERMODE_TRANSALPHA) + end + if v[3] then + self.Models[k]:SetSkin(v[3]) + end + self.Models[k]:SetParent(self) + end + end + if self.Type == 0 then + local State = self:Animate("white", self.WhiteSignal and 1 or 0, 0,1, 256) + if IsValid(self.Models[1]) then + self.Models[1]:SetColor(Color(255,255,255,State*255)) + end + State = self:Animate("white1", self.PeopleGoing and 1 or 0, 0,1, 256) + if IsValid(self.Models[2]) then + self.Models[2]:SetColor(Color(255,255,255,State*255)) + end + else + local State = self:Animate("white", self.WhiteSignal and 1 or 0, 0,1, 256) + if IsValid(self.Models[1]) then + self.Models[1]:SetColor(Color(255,255,255,State*255)) + end + State = self:Animate("yellow", self.YellowSignal and 1 or 0, 0,1, 256) + if IsValid(self.Models[2]) then + self.Models[2]:SetColor(Color(255,255,255,State*255)) + end + end +end diff --git a/lua/entities/gmod_track_horlift_signal/init.lua b/lua/entities/gmod_track_horlift_signal/init.lua new file mode 100644 index 0000000..94e073a --- /dev/null +++ b/lua/entities/gmod_track_horlift_signal/init.lua @@ -0,0 +1,33 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +-------------------------------------------------------------------------------- +-- Load key-values defined in VMF +-------------------------------------------------------------------------------- +function ENT:KeyValue(key, value) + self.VMF = self.VMF or {} + self.VMF[key] = value +end + +function ENT:Initialize() + self.VMF = self.VMF or {} + self.Type = (tonumber(self.VMF.Type) or 0) + if self.Type == 0 then + self:SetModel("models/metrostroi/signals/mus/light_2_horlift_out.mdl") + else + self:SetModel("models/metrostroi/signals/mus/light_2_horlift_in.mdl") + end + self:SetNWInt("Type",self.Type) + + self.YellowSignal = true + self.WhiteSignal = false + +end +function ENT:Think() + self:SetNWBool("Yellow",self.YellowSignal) + self:SetNWBool("White",self.WhiteSignal) + self:SetNWBool("White2",self.PeopleGoing) + self:NextThink(CurTime() + 0.50) + return true +end diff --git a/lua/entities/gmod_track_horlift_signal/shared.lua b/lua/entities/gmod_track_horlift_signal/shared.lua new file mode 100644 index 0000000..e63fe0d --- /dev/null +++ b/lua/entities/gmod_track_horlift_signal/shared.lua @@ -0,0 +1,37 @@ +ENT.Type = "anim" +ENT.PrintName = "Horizontal Lift Station Signalling" +ENT.Category = "Metrostroi (utility)" + +ENT.Spawnable = false +ENT.AdminSpawnable = false + + +-------------------------------------------------------------------------------- +function ENT:SetupDataTables() + self:NetworkVar("Int", 0, "ActiveSignals") +end + +local function addBitField(name) + ENT["Set"..name.."Bit"] = function(self,idx,value) + local packed_value = bit.lshift(value and 1 or 0,idx) + local mask = bit.bnot(bit.lshift(1,idx)) + self["Set"..name](self,bit.bor(bit.band(self["Get"..name](self),mask),packed_value)) + end + + ENT["Get"..name.."Bit"] = function(self,idx) + local mask = bit.lshift(1,idx) + return bit.band(self["Get"..name](self),mask) ~= 0 + end +end + +local function addBitParameter(name,field,bit) + ENT["Set"..name] = function(self,value) + self["Set"..field.."Bit"](self,bit,value) + end + + ENT["Get"..name] = function(self) + return self["Get"..field.."Bit"](self,bit) + end +end + +addBitField("ActiveSignals") \ No newline at end of file diff --git a/lua/entities/gmod_track_mus_elektronika7/cl_init.lua b/lua/entities/gmod_track_mus_elektronika7/cl_init.lua new file mode 100644 index 0000000..ba1ca9d --- /dev/null +++ b/lua/entities/gmod_track_mus_elektronika7/cl_init.lua @@ -0,0 +1,47 @@ +include("shared.lua") +ENT.DigitPositions = { + Vector(0,17,0), + Vector(0,7,0), + Vector(0,-6.5,0), + Vector(0,-16.5,0), +} + +function ENT:Initialize() + self.Digits = {} +end + +function ENT:Think() + if self:IsDormant() then self:OnRemove();return end + for k,v in pairs(self.DigitPositions) do + if not IsValid(self.Digits[k]) then + --self.Digits[k] = ents.CreateClientProp("models/metrostroi/81-717/reverser.mdl") + --self.Digits[k]:SetModel(("models/mus/ussr_clock_model/num_"..(k == 1 and "no" or "").."zero.mdl")) + --hook.Add("MetrostroiBigLag",self.Digits[k],function(ent) + -- ent:SetPos(self:LocalToWorld(v)) + -- ent:SetAngles(self:GetAngles()) + -- --if ent.Spawned then hook.Remove("MetrostroiBigLag",ent) end + -- --ent.Spawned = true + --end) + self.Digits[k] = ClientsideModel("models/mus/ussr_clock_model/num_"..(k == 1 and "no" or "").."zero.mdl",RENDERGROUP_OPAQUE) + self.Digits[k]:SetPos(self:LocalToWorld(v)) + self.Digits[k]:SetAngles(self:GetAngles()) + self.Digits[k]:SetSkin(10) + self.Digits[k]:SetParent(self) + end + end + + local d = os.date("!*t",Metrostroi.GetSyncTime()) + if IsValid(self.Digits[1]) then self.Digits[1]:SetSkin(math.floor(d.hour / 10)) end + if IsValid(self.Digits[2]) then self.Digits[2]:SetSkin(math.floor(d.hour % 10)) end + if IsValid(self.Digits[3]) then self.Digits[3]:SetSkin(math.floor(d.min / 10)) end + if IsValid(self.Digits[4]) then self.Digits[4]:SetSkin(math.floor(d.min % 10)) end +end + +function ENT:OnRemove() + for _,v in pairs(self.Digits) do + SafeRemoveEntity(v) + end +end +function ENT:Draw() + self:DrawModel() +end diff --git a/lua/entities/gmod_track_mus_elektronika7/init.lua b/lua/entities/gmod_track_mus_elektronika7/init.lua new file mode 100644 index 0000000..c5c079f --- /dev/null +++ b/lua/entities/gmod_track_mus_elektronika7/init.lua @@ -0,0 +1,13 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +function ENT:Initialize() + self:SetModel("models/mus/ussr_clock_model/base.mdl") +end + +function ENT:Think() + self:SetSkin((os.time()-(os.time() - CurTime()))%1*2) + self:NextThink(0.1) + return true +end diff --git a/lua/entities/gmod_track_mus_elektronika7/shared.lua b/lua/entities/gmod_track_mus_elektronika7/shared.lua new file mode 100644 index 0000000..745474f --- /dev/null +++ b/lua/entities/gmod_track_mus_elektronika7/shared.lua @@ -0,0 +1,6 @@ +ENT.Type = "anim" + +ENT.Category = "Metrostroi (utility)" + +ENT.Spawnable = true +ENT.AdminSpawnable = false diff --git a/lua/entities/gmod_track_pa_marker/cl_init.lua b/lua/entities/gmod_track_pa_marker/cl_init.lua new file mode 100644 index 0000000..3823051 --- /dev/null +++ b/lua/entities/gmod_track_pa_marker/cl_init.lua @@ -0,0 +1,49 @@ +include("shared.lua") + +local mat = Material("vgui/bg-lines") +--[[ +function ENT:Draw() + if not self.CanDraw then return end + cam.Start3D() + render.SetMaterial(mat) + --render.DrawQuadEasy(self:GetPos(),self:GetAngles():Forward(),600,600,Color(255,255,255),0) + + render.DrawQuadEasy(self:GetPos(),-self:GetAngles():Forward(),600,300,Color(255,0,0),0) + render.DrawLine( self:GetPos(), self:LocalToWorld(Vector(50,0,0)), Color(255,0,0)) + render.DrawLine( self:GetPos(), self:LocalToWorld(Vector(0,50,0)), Color(0,255,0)) + render.DrawLine( self:GetPos(), self:LocalToWorld(Vector(0,0,50)), Color(0,0,255)) + --render.DrawSprite( pos, 16, 16, white ) + cam.End3D() + self:DrawModel() +end]] + +function ENT:Draw() +end + +local debug = GetConVar("metrostroi_drawsignaldebug") +local function enableDebug() + if debug:GetBool() then + hook.Add("PostDrawTranslucentRenderables","MetrostroiPAMarkerDebug",function(bDrawingDepth,bDrawingSkybox) + for _,ent in pairs(ents.FindByClass("gmod_track_autodrive_plate")) do + if bDrawingDepth and LocalPlayer():GetPos():Distance(sig:GetPos()) < 512 then + cam.Start3D() + render.SetMaterial(mat) + --render.DrawQuadEasy(self:GetPos(),self:GetAngles():Forward(),600,600,Color(255,255,255),0) + + render.DrawQuadEasy(ent:GetPos(),-ent:GetAngles():Forward(),600,300,Color(255,0,0),0) + render.DrawLine( ent:GetPos(), ent:LocalToWorld(Vector(50,0,0)), Color(255,0,0)) + render.DrawLine( ent:GetPos(), ent:LocalToWorld(Vector(0,50,0)), Color(0,255,0)) + render.DrawLine( ent:GetPos(), ent:LocalToWorld(Vector(0,0,50)), Color(0,0,255)) + --render.DrawSprite( pos, 16, 16, white ) + cam.End3D() + ent:DrawModel() + end + end + end) + else + hook.Remove("PostDrawTranslucentRenderables","MetrostroiPAMarkerDebug") + end +end +hook.Remove("PostDrawTranslucentRenderables","MetrostroiPAMarkerDebug") +cvars.AddChangeCallback( "metrostroi_drawsignaldebug", enableDebug) +enableDebug() \ No newline at end of file diff --git a/lua/entities/gmod_track_pa_marker/init.lua b/lua/entities/gmod_track_pa_marker/init.lua new file mode 100644 index 0000000..55aabc2 --- /dev/null +++ b/lua/entities/gmod_track_pa_marker/init.lua @@ -0,0 +1,50 @@ +AddCSLuaFile("shared.lua") +AddCSLuaFile("cl_init.lua") +include("shared.lua") +util.AddNetworkString("metrostroi_auodrive_coils") +function ENT:Initialize() + self:DrawShadow(false) + + self:SetModel("models/mechanics/roboticslarge/xfoot.mdl") + self:SetColor(Color(200,50,50,100)) + self:SetRenderMode(RENDERMODE_TRANSALPHA) +end + +function ENT:Think() +end + +function ENT:UpdateTrackPos(pos,ang) + local results = Metrostroi.GetPositionOnTrack(pos or self:GetPos(),ang or self:GetAngles()) + if #results > 0 then + pos,ang = Metrostroi.GetTrackPosition(results[1].node1.path,results[1].x) + self:SetPos(pos) + self:SetAngles(ang:Angle()) + self.TrackPosition = results[1] + + self.TrackPath = self.TrackPosition.node1.path.id + self.TrackX = self.TrackPosition.x + else + self:SetPos(pos) + self:SetAngles(ang) + end +end + +function ENT:SetTrackPosition(path,x) + local results = Metrostroi.GetPositionOnTrack(self:GetPos(),self:GetAngles()) + local pos,ang = Metrostroi.GetTrackPosition(path,x) + if not pos then + pos,ang = Metrostroi.GetTrackPosition(results[1].path,results[1].x) + if not pos then + ErrorNoHalt(Format("Metrostroi: Can't find PA track position: %s!\n",self:GetPos())) + return + else + ErrorNoHalt(Format("Metrostroi: Can't find PA track position: %s, using standart...\n",self:GetPos())) + end + --pos,ang = Metrostroi.GetTrackPosition(path,x) + end + self.TrackPosition = results[1] + if self:GetPos():Distance(pos) > 1 then + self:SetPos(pos) + self:SetAngles(ang:Angle()) + end +end \ No newline at end of file diff --git a/lua/entities/gmod_track_pa_marker/shared.lua b/lua/entities/gmod_track_pa_marker/shared.lua new file mode 100644 index 0000000..10b4bbd --- /dev/null +++ b/lua/entities/gmod_track_pa_marker/shared.lua @@ -0,0 +1,10 @@ +ENT.Type = "anim" + +ENT.PrintName = "Autodrive plate" +ENT.Category = "Metrostroi (utility)" + +ENT.Spawnable = false +ENT.AdminSpawnable = false +ENT.RenderGroup = RENDERGROUP_BOTH +ENT.PhysgunDisabled = true +ENT.m_tblToolsAllowed = {""} \ No newline at end of file diff --git a/lua/entities/gmod_track_platform/cl_init.lua b/lua/entities/gmod_track_platform/cl_init.lua new file mode 100644 index 0000000..a0bd866 --- /dev/null +++ b/lua/entities/gmod_track_platform/cl_init.lua @@ -0,0 +1,409 @@ +include("shared.lua") + +-------------------------------------------------------------------------------- +-- Random number generation +-------------------------------------------------------------------------------- +local random = math.random +local sqrt = math.sqrt +local ln = math.log +local cos = math.cos +local sin = math.sin +local pi2 = 2*math.pi + +-- Generate at least 60 random bits +local function rand60() + return random() + random()/(2^15) + random()/(2^30) + random()/(2^45) +end + +-- Generate random gaussian-distributed value +local function gauss_random(x0,sigma) + local u,v = rand60(),rand60() + if u == 0.0 then return gauss_random(x0,sigma) end -- Remove singularity + local r = sqrt(-2 * ln(u)) + local x,y = r * cos(pi2*v) + return x*(sigma or 0.5) + (x0 or 0) +end + +-------------------------------------------------------------------------------- +-- +-------------------------------------------------------------------------------- +local passengerModels = { -- Common passenger models + "models/metrostroi/passengers/f1.mdl", + "models/metrostroi/passengers/f2.mdl", + "models/metrostroi/passengers/f3.mdl", + "models/metrostroi/passengers/f4.mdl", + "models/metrostroi/passengers/m1.mdl", + "models/metrostroi/passengers/m2.mdl", + "models/metrostroi/passengers/m4.mdl", + "models/metrostroi/passengers/m5.mdl", +} +local rareModels = { -- Less common special models + "models/metrostroi/passengers/m3.mdl", + "models/metrostroi/passengers/f5.mdl", +} + + +function ENT:Initialize() + self.PassengerSounds = CreateSound(self,Sound( "subway_stations/announces/peoples.wav" )) + self.NonPassengerSounds = CreateSound(self,Sound( "ambient/levels/canals/tunnel_wind_loop1.wav" )) + self.ClientModels = {} + self.CleanupModels = {} + self:DrawShadow(false) +end + +function ENT:OnRemove() + self.PassengerSounds:Stop() + self.NonPassengerSounds:Stop() + for k,v in pairs(self.ClientModels) do SafeRemoveEntity(v) end + self.ClientModels = {} + self.ClientsideModels = {} + self.CleanupModels = {} + self.Pool = nil + self.PassengersLeft = nil +end +-------------------------------------------------------------------------------- +-- Is position in the world free or blocked by world +-------------------------------------------------------------------------------- +local trace = {} +local function isPositionFree(pos) + local ped_size = 16 + local ped_legs = 8 + local ped_height = 90 + + trace.start = pos+Vector(0,0,ped_legs) + trace.endpos = pos+Vector(0,0,ped_height) + trace.mask = -1 + local result = util.TraceLine(trace) + if result.Hit then return false end + + trace.start = pos+Vector(-ped_size,0,ped_legs) + trace.endpos = pos+Vector(-ped_size,0,ped_height) + trace.mask = -1 + local result = util.TraceLine(trace) + if result.Hit then return false end + + trace.start = pos+Vector(ped_size,0,ped_legs) + trace.endpos = pos+Vector(ped_size,0,ped_height) + trace.mask = -1 + local result = util.TraceLine(trace) + if result.Hit then return false end + + trace.start = pos+Vector(0,-ped_size,ped_legs) + trace.endpos = pos+Vector(0,-ped_size,ped_height) + trace.mask = -1 + local result = util.TraceLine(trace) + if result.Hit then return false end + + trace.start = pos+Vector(0,ped_size,ped_legs) + trace.endpos = pos+Vector(0,ped_size,ped_height) + trace.mask = -1 + local result = util.TraceLine(trace) + if result.Hit then return false end + + return true +end + + +-------------------------------------------------------------------------------- +-- Populate platform with pedestrians +-------------------------------------------------------------------------------- +function ENT:PopulatePlatform(platformStart,platformEnd,stationCenter) + -- Define platform + local platformDir = platformEnd-platformStart + local platformN = (platformDir:Angle()+Angle(0,90,0)):Forward() + local platformD = platformDir:GetNormalized() + local platformWidth = ((platformStart-stationCenter) - ((platformStart-stationCenter):Dot(platformD))*platformD):Length() + + -- Create pool + self.Pool = self.Pool or {} + + -- Fill pool + math.randomseed(self:Seed() + #self.Pool) + local N = math.min(self:PoolSize() - #self.Pool,32) + for i=1,N do + local pedestrian = {} + local iterations = 1 + while iterations <= 16 do + -- Generate random constants + local a = -1 + while (a < 0) or (a > 1) do a = gauss_random(self:GetNW2Float("X0"),self:GetNW2Float("Sigma")) end + local b = math.abs(gauss_random(0.00,0.20)) + + -- Create random position + pedestrian.distance = b*platformWidth + pedestrian.pos = platformStart + platformDir*a + platformN*pedestrian.distance + + -- Check if pedestrian is not standing in a building + if isPositionFree(pedestrian.pos) then break end + iterations = iterations + 1 + end + + -- Random other parameters + pedestrian.ang = platformN:Angle() + Angle(0,math.random(-50,50),0) + pedestrian.skin = math.random() + pedestrian.scale = 0.98 + gauss_random(0,0.03) + pedestrian.model = table.Random(passengerModels) + + -- Add to pool + table.insert(self.Pool,pedestrian) + end +end + + +-------------------------------------------------------------------------------- +-- Think loop that manages clientside models +-------------------------------------------------------------------------------- +function ENT:Think() + --self.TestSound = CreateSound(self,Sound( "subway_stations_test1/orange_1.mp3" )) + --self.TestSound:SetDSP(117) + --self.TestSound:SetSoundLevel(105) + --self.TestSound:SetDSP(58) + --self.TestSound:Stop() + --self.TestSound:Play() + --self.TestSound:ChangeVolume(0.7) + self.PrevTime = self.PrevTime or CurTime() + self.DeltaTime = (CurTime() - self.PrevTime) + self.PrevTime = CurTime() + if self:IsDormant() then + if self.Pool then + self:OnRemove() + end + return + end + + if self:GetNW2Bool("MustPlayAnnounces") then + self.PassengerSounds:SetSoundLevel(105) + self.PassengerSounds:Play() + self.PassengerSounds:SetSoundLevel(105) + self.PassengerSounds:ChangeVolume(0.3) + else + if self.PassengerSounds:IsPlaying() then + self.PassengerSounds:Stop() + end + end + if self:GetNW2Bool("MustPlaySpooky") then + self.NonPassengerSounds:SetSoundLevel(105) + self.NonPassengerSounds:Play() + self.NonPassengerSounds:SetSoundLevel(105) + self.NonPassengerSounds:ChangeVolume(1) + else + if self.NonPassengerSounds:IsPlaying() then + self.NonPassengerSounds:Stop() + end + end + + -- Platform parameters + local platformStart = self:GetNW2Vector("PlatformStart",false) + local platformEnd = self:GetNW2Vector("PlatformEnd",false) + local stationCenter = self:GetPos()--self:GetNW2Vector("StationCenter",false) + if not platformStart or not platformEnd or not stationCenter or not self:GetNW2Float("X0",false) or not self:GetNW2Float("Sigma",false) then return end + + -- Platforms with tracks in middle + local dot = (stationCenter - platformStart):Cross(platformEnd - platformStart) + if dot.z > 0.0 then + local a,b = platformStart,platformEnd + platformStart,platformEnd = b,a + end + + -- If platform is defined and pool is not + --print(self:GetNW2Vector("StationCenter")) + --print(entStart,entEnd,self.Pool) + local dataReady = (self:GetNW2Float("X0",-1) >= 0) and (self:GetNW2Float("Sigma",-1) > 0) + local poolReady = (self.Pool) and (#self.Pool == self:PoolSize()) + if (not poolReady) and (stationCenter:Length() > 0.0) then + self:PopulatePlatform(platformStart,platformEnd,stationCenter) + end + + local modelCount = 0 + -- Check if set of models changed + if (CurTime() - (self.ModelCheckTimer or 0) > 1.0) and poolReady then + self.ModelCheckTimer = CurTime() + + local WindowStart = self:GetNW2Int("WindowStart") + local WindowEnd = self:GetNW2Int("WindowEnd") + for i=1,self:PoolSize() do + local in_bounds = false + if WindowStart <= WindowEnd then in_bounds = (i >= WindowStart) and (i < WindowEnd) end + if WindowStart > WindowEnd then in_bounds = (i >= WindowStart) or (i <= WindowEnd) end + if in_bounds then + -- Model in window + if not self.ClientModels[i] then + --self.ClientModels[i] = ents.CreateClientProp("models/metrostroi/81-717/reverser.mdl") + --self.ClientModels[i]:SetModel(self.Pool[i].model) + --hook.Add("MetrostroiBigLag",self.ClientModels[i],function(ent) + -- if not self.Pool then return end + -- ent:SetPos(self.Pool[i].pos) + -- ent:SetAngles(self.Pool[i].ang) + -- --if ent.Spawned then hook.Remove("MetrostroiBigLag",ent) end + -- --ent.Spawned = true + --end) + self.ClientModels[i] = ClientsideModel(self.Pool[i].model,RENDERGROUP_OPAQUE) + self.ClientModels[i]:SetPos(self.Pool[i].pos) + self.ClientModels[i]:SetAngles(self.Pool[i].ang) + self.ClientModels[i]:SetSkin(math.floor(self.ClientModels[i]:SkinCount()*self.Pool[i].skin)) + self.ClientModels[i]:SetModelScale(self.Pool[i].scale,0) + self.ClientModels[i]:DestroyShadow() + self.ClientModels[i]:DrawShadow(false) + modelCount = modelCount + 1 + if modelCount > 15 then poolReady = false self.ModelCheckTimer = self.ModelCheckTimer - 0.9 break end + end + else + -- Model found that is not in window + if IsValid(self.ClientModels[i]) then + -- Get nearest door + local count = self:GetNW2Int("TrainDoorCount",0) + local distance = 1e9 + local target = Vector(0,0,0) + for j=1,count do + local vec = self:GetNW2Vector("TrainDoor"..j,Vector(0,0,0)) + local d = vec:Distance(self.ClientModels[i]:GetPos()) + if d < distance then + target = vec + distance = d + end + end + -- Add to list of cleanups + table.insert(self.CleanupModels,{ + ent = self.ClientModels[i], + target = target, + }) + self.ClientModels[i] = nil + end + end + end + end + + -- Add models for cleanup of people who left trains + self.PassengersLeft = self.PassengersLeft or self:GetNW2Int("PassengersLeft") + while poolReady and (self.PassengersLeft < self:GetNW2Int("PassengersLeft")) do + -- Get random door + local count = self:GetNW2Int("TrainDoorCount",0) + local i = math.max(1,math.min(count,1+math.floor((count-1)*math.random() + 0.5))) + local pos = self:GetNW2Vector("TrainDoor"..i,Vector(0,0,0)) + pos.z = self:GetPos().z + + -- Create clientside model + local i = math.max(1,math.min(self:PoolSize(),1+math.floor(math.random()*self:PoolSize() + 0.5))) + --local ent = ents.CreateClientProp("models/metrostroi/81-717/reverser.mdl") + --ent:SetModel(self.Pool[i].model) + --hook.Add("MetrostroiBigLag",ent,function(ent) + -- ent:SetPos(pos) + -- --if ent.Spawned then hook.Remove("MetrostroiBigLag",ent) end + -- --ent.Spawned = true + --end) + local ent= ClientsideModel(self.Pool[i].model,RENDERGROUP_OPAQUE) + ent:SetPos(pos) + ent:SetSkin(math.floor(ent:SkinCount()*self.Pool[i].skin)) + ent:SetModelScale(self.Pool[i].scale,0) + -- Generate target pos + local platformDir = platformEnd-platformStart + local platformN = (platformDir:Angle()+Angle(0,90,0)):Forward() + local platformD = platformDir:GetNormalized() + local platformWidth = ((platformStart-stationCenter) - ((platformStart-stationCenter):Dot(platformD))*platformD):Length() + local target = pos + platformN*platformWidth + pos = pos - platformN * 4.0 * math.random() + pos = pos + platformD * 16.0 * math.random() + target = target + platformD * 128.0 * math.random() + + -- Add to list of cleanups + table.insert(self.CleanupModels,{ + ent = ent, + target = target, + }) + + -- Add passenger + self.PassengersLeft = self.PassengersLeft + 1 + end + + -- Animate models for cleanup + for k,v in pairs(self.CleanupModels) do + -- if not v or not IsValid(v) then self.CleanupModels[k] = nil return end + if not IsValid(v.ent) then + self.CleanupModels[k] = nil + continue + end + -- Get pos and target in XY plane + local pos = v.ent:GetPos() + local target = v.target + pos.z = 0 + target.z = 0 + + local distance = pos:DistToSqr(target) + local count = self:GetNW2Int("TrainDoorCount",0) + -- Delete if reached the target point + if distance < 2*256--[[threshold]] or math.abs(LocalPlayer():GetPos().z - v.ent:GetPos().z) > 256 or count == 0 then + v.ent:Remove() + self.CleanupModels[k] = nil + continue + end + + + -- Find direction in which pedestrians must walk + local targetDir = (target - pos):GetNormalized() + + -- Make it go along the platform if too far + local threshold = 16 + if distance > 36864--[[192]] then + local platformDir = (platformEnd-platformStart):GetNormalized() + local projection = targetDir:Dot(platformDir) + if math.abs(projection) > 0.1 then + targetDir = (platformDir * projection):GetNormalized() + end + end + + -- Move pedestrian + local speed = 1024 + if distance > 1048576--[[1024]] then speed = 2048 end + v.ent:SetPos(v.ent:GetPos() + targetDir*math.min(threshold,speed*self.DeltaTime)) + -- Rotate pedestrian + v.ent:SetAngles(targetDir:Angle() + Angle(0,180,0)) + + + --[[ Check if door can be reached at all (it still exists) + local distance = 1e9 + local new_target = target + for j=1,count do + local vec = self:GetNW2Vector("TrainDoor"..j,Vector(0,0,0)) + local d = vec:DistToSqr(v.target) + if d < distance then + new_target = vec + distance = d + end + end + + --if distance > 32 + --then v.target = self:GetPos() + --else v.target = new_target + --end]] + end +end + + +-------------------------------------------------------------------------------- +-- Make sure entity is not drawn +-------------------------------------------------------------------------------- +function ENT:Draw() + if GetConVarNumber("metrostroi_drawsignaldebug") ~= 1 then return end + local platformStart = self:GetNW2Vector("PlatformStart",false) + local platformEnd = self:GetNW2Vector("PlatformEnd",false) + + local pos = self:GetPos()+Vector(0,0,50) + --[[ if platformStart and platformEnd then + pos = platformStart + (platformEnd-platformStart)/2+Vector(0,0,50) + end--]] + --print(2) + local ang = self:LocalToWorldAngles(Angle(0,180,90)) + cam.Start3D2D(pos, ang, 0.25) + surface.SetDrawColor(125, 125, 0, 255) + surface.DrawRect(0, 0, 160, 24) + + draw.DrawText(Format("[%d]/%d",self:GetNWInt("StationIndex"),self:GetNWInt("PlatformIndex")),"Trebuchet24",5,0,Color(0,0,0,255)) + cam.End3D2D() + local ang = self:LocalToWorldAngles(Angle(0,0,90)) + cam.Start3D2D(pos, ang, 0.25) + surface.SetDrawColor(125, 125, 0, 255) + surface.DrawRect(0, 0, 160, 24) + + draw.DrawText(Format("[%d]/%d",self:GetNWInt("StationIndex"),self:GetNWInt("PlatformIndex")),"Trebuchet24",5,0,Color(0,0,0,255)) + cam.End3D2D() +end diff --git a/lua/entities/gmod_track_platform/init.lua b/lua/entities/gmod_track_platform/init.lua new file mode 100644 index 0000000..4c76e58 --- /dev/null +++ b/lua/entities/gmod_track_platform/init.lua @@ -0,0 +1,617 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + + +ENT.TriTone = Sound( "subway_stations/tritone.mp3" ) +function ENT:PlayAnnounce(arriving,Ann) + if not arriving then + if self.MustPlayAnnounces then + local tbl = Metrostroi.StationSound + if not tbl and not Ann then return end + local snd = Ann or table.Random(tbl) + if not snd.sound then snd.sound = Sound(snd[1]) end + sound.Play(snd.sound,self:LocalToWorld(Vector(0,-1200,200)),90,100,1) + sound.Play(snd.sound,self:LocalToWorld(Vector(0,1200,200)),90,100,1) + timer.Adjust( "metrostroi_station_announce_"..self:EntIndex(), snd[2]+math.random(10,30),0,function() self:PlayAnnounce() end) + if self.SyncAnnounces and not Ann then + local ent = Metrostroi.Stations[self.StationIndex][self.PlatformIndex == 2 and 1 or 2].ent + if IsValid(ent) then ent:PlayAnnounce(nil,snd) end + end + else + timer.Remove("metrostroi_station_announce_"..self:EntIndex()) + end + elseif arriving == 1 then + sound.Play(self.TriTone,self:LocalToWorld(Vector(0,-1200,200)),120,self.TritonePitch,1) + sound.Play(self.TriTone,self:LocalToWorld(Vector(0,1200,200)),120,self.TritonePitch,1) + elseif arriving == 2 then + sound.Play(Ann,self:LocalToWorld(Vector(-1200,0,50)),120,100,0.4) + sound.Play(Ann,self:LocalToWorld(Vector(1200,0,50)),120,100,0.4) + end +end + +-------------------------------------------------------------------------------- +-- Initialize the platform data +-------------------------------------------------------------------------------- +function ENT:Initialize() + -- Get platform parameters + self.VMF = self.VMF or {} + self.PlatformStart = ents.FindByName(self.VMF.PlatformStart or "")[1] + self.SignOff = tonumber(self.VMF.Sign or self.VMF.NoSign or "0") == 1 + self.PlatformEnd = ents.FindByName(self.VMF.PlatformEnd or "")[1] + self.StationIndex = tonumber(self.VMF.StationIndex) or 100 + self.PlatformIndex = tonumber(self.VMF.PlatformIndex) or 1 + self:SetNWInt("StationIndex",self.StationIndex) + self:SetNWInt("PlatformIndex",self.PlatformIndex) + self.PopularityIndex = self.VMF.PopularityIndex or 1.0 + self.PlatformLast = (self.VMF.PlatformLast == "yes") + self.PlatformX0 = self.VMF.PlatformX0 or 0.80 + self.PlatformSigma = self.VMF.PlatformSigma or 0.25 + self.HorliftStation = tonumber(self.VMF.HorliftStation) or 0 + self.HorliftHaveSignal = (tonumber(self.VMF.HorliftHaveSignal) or 0) > 0 + self.TritonePitch = math.random(90,110) + if not self.PlatformStart then + self.VMF.PlatformStart = "station"..self.StationIndex.."_"..(self.VMF.PlatformStart or "") + self.PlatformStart = ents.FindByName(self.VMF.PlatformStart or "")[1] + end + if not self.PlatformEnd then + self.VMF.PlatformEnd = "station"..self.StationIndex.."_"..(self.VMF.PlatformEnd or "") + self.PlatformEnd = ents.FindByName(self.VMF.PlatformEnd or "")[1] + end + + -- Drop to floor + self:DropToFloor() + if IsValid(self.PlatformStart) then self.PlatformStart:DropToFloor() end + if IsValid(self.PlatformEnd) then self.PlatformEnd:DropToFloor() end + + -- Positions + if IsValid(self.PlatformStart) then + self.PlatformStart = self.PlatformStart:GetPos() + else + self.PlatformStart = Vector(0,0,0) + end + if IsValid(self.PlatformEnd) then + self.PlatformEnd = self.PlatformEnd:GetPos() + else + self.PlatformEnd = Vector(0,0,0) + end + self.PlatformDir = self.PlatformEnd-self.PlatformStart + self.PlatformNorm = self.PlatformDir:GetNormalized() + -- Platforms with tracks in middle + local dot = (self:GetPos() - self.PlatformStart):Cross(self.PlatformEnd - self.PlatformStart) + + self.InvertSides = dot.z > 0.0 + + -- Initial platform pool configuration + self.WindowStart = 0 -- Increases when people board train + self.WindowEnd = 0 -- Increases naturally over time + self.PassengersLeft = 0 -- Number of passengers that left trains + + -- Send things to client + self:SetNW2Float("X0",self.PlatformX0) + self:SetNW2Float("Sigma",self.PlatformSigma) + self:SetNW2Int("WindowStart",self.WindowStart) + self:SetNW2Int("WindowEnd",self.WindowEnd) + self:SetNW2Int("PassengersLeft",self.PassengersLeft) + self:SetNW2Vector("PlatformStart",self.PlatformStart) + self:SetNW2Vector("PlatformEnd",self.PlatformEnd) + self:SetNW2Vector("StationCenter",self:GetPos()) + + -- FIXME make this nicer + for i=1,32 do self:SetNW2Vector("TrainDoor"..i,Vector(0,0,0)) end + self:SetNW2Int("TrainDoorCount",0) + local ars_ents = ents.FindInSphere(self.PlatformEnd,768) + for k,v in pairs(ars_ents) do + local delta_z = math.abs(self.PlatformEnd.z-v:GetPos().z) + if (v:GetClass() == "gmod_track_pui") and (delta_z < 160) then + self.PUI = v + v.Horlift = self.HorliftStation > 0 + end + end + --[[ + self.NoEntry = {} + local position = Metrostroi.StationData and Metrostroi.StationData[self.StationIndex] and "outside" or "inside" + if Metrostroi.StationAnnouncesToEnd then + for i,route in ipairs(Metrostroi.WorkingStations) do + for k, station in ipairs(route) do + if station == self.StationIndex then + local endst = route[self.PlatformIndex == 1 and #route or 1] + if Metrostroi.StationAnnouncesToEnd[endst] then + self.NoEntry.arr = Sound(Metrostroi.StationAnnouncesToEnd[endst][1]:Replace("inside",position)) + self.NoEntry.dep = Sound(Metrostroi.StationAnnouncesToEnd[endst][2]:Replace("inside",position)) + end + break + end + if self.NoEntry.arr then break end + end + end + end + if not self.NoEntry.arr then + ErrorNoHalt("Metrostroi: Station "..self.VMF.PlatformStart.." can't choose no_entry sound!\n") + self.NoEntry.arr = Sound( "subway_stations/"..position.."/no_entry_arr.mp3" ) + self.NoEntry.dep = Sound( "subway_stations/"..position.."/no_entry_dep.mp3" ) + end + self.NoEntry.depot = Sound( "subway_stations/"..position.."/no_entry_depot.mp3" ) + if Metrostroi.StationAnnouncesTo[self.StationIndex] and Metrostroi.StationAnnouncesTo[self.StationIndex][1] == self.PlatformIndex then + self.NoEntry.specarr = Sound(Metrostroi.StationAnnouncesTo[self.StationIndex][3]) + self.NoEntry.specdep = Sound(Metrostroi.StationAnnouncesTo[self.StationIndex][4]) + end]] + self:DrawShadow(false) +end + +function ENT:OnRemove() + timer.Destroy("metrostroi_station_announce_"..self:EntIndex()) +end + +-------------------------------------------------------------------------------- +-- Load key-values defined in VMF +-------------------------------------------------------------------------------- +function ENT:KeyValue(key, value) + self.VMF = self.VMF or {} + self.VMF[key] = value +end + +-------------------------------------------------------------------------------- +-- Process platform logic +-------------------------------------------------------------------------------- +function erf(x) + local a1 = 0.254829592 + local a2 = -0.284496736 + local a3 = 1.421413741 + local a4 = -1.453152027 + local a5 = 1.061405429 + local p = 0.3275911 + + -- Save the sign of x + sign = 1 + if x < 0 then sign = -1 end + x = math.abs(x) + + -- A&S formula 7.1.26 + t = 1.0/(1.0 + p*x) + y = 1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*math.exp(-x*x) + + return sign*y +end +local function CDF(x,x0,sigma) return 0.5 * (1 + erf((x - x0)/math.sqrt(2*sigma^2))) end +local function merge(t1,t2) for k,v in pairs(t2) do table.insert(t1,v) end end + +function ENT:PopulationCount() + local totalCount = self.WindowEnd - self.WindowStart + if self.WindowStart > self.WindowEnd then totalCount = (self:PoolSize() - self.WindowStart) + self.WindowEnd end + return totalCount +end + +local empty_checked = {} +local function getTrainDriver(train,checked) + if not checked then + for k,v in pairs(empty_checked) do empty_checked[k] = nil end + checked = empty_checked + end + if not IsValid(train) then return end + if checked[train] then return end + checked[train] = true + + local ply = train:GetDriver() + if IsValid(ply) then -- and (train.KV.ReverserPosition ~= 0) + return ply + end + + return getTrainDriver(train.RearTrain,checked) or getTrainDriver(train.FrontTrain,checked) +end + +function ENT:FireHorliftDoors(input) + if not self.Doors then + self.Doors = {} + local doors = ents.FindByName("station"..self.StationIndex.."_platform"..self.PlatformIndex.."_door") + for _,v in pairs(doors) do + table.insert(self.Doors,v) + end + end + for _,v in pairs(self.Doors) do + v:Fire(input,"","1") + end +end +function ENT:GetDoorState() + if not self.Doors then + self.Doors = {} + local doors = ents.FindByName("station"..self.StationIndex.."_platform"..self.PlatformIndex.."_door") + for _,v in pairs(doors) do + table.insert(self.Doors,v) + end + end + for _,v in pairs(self.Doors) do + if v:GetSaveTable().m_toggle_state ~= 1 then return true end + end + return false +end + +local function getPassengerRate(passCount) + if passCount < 80 then + return 1-((passCount/80)^3)*0.2 + else + return 1-math.min(1, (((passCount-80)/220)^0.6)*0.85+0.2) + end +end + +ENT.TESTTEST = false +local dT = 0.25 +local trains = {} +function ENT:Think() + if not Metrostroi.Stations[self.StationIndex] then return end + -- Send update to client + self:SetNW2Int("WindowStart",self.WindowStart) + self:SetNW2Int("WindowEnd",self.WindowEnd) + self:SetNW2Int("PassengersLeft",self.PassengersLeft) + + -- Check if any trains are at the platform + if Metrostroi.Stations[self.StationIndex] then + self.MustPlayAnnounces = (not Metrostroi.Stations[self.StationIndex][self.PlatformIndex == 2 and 1 or 2] or self.PlatformIndex == 1) + self:SetNW2Bool("MustPlaySpooky",(not Metrostroi.Stations[self.StationIndex][self.PlatformIndex == 2 and 1 or 2]) and self.PlatformIndex == 1) + if self:GetNW2Bool("MustPlaySpooky") then + end + if not timer.Exists("metrostroi_station_announce_"..self:EntIndex()) and self.MustPlayAnnounces then + timer.Create("metrostroi_station_announce_"..self:EntIndex(),0,0,function() self:PlayAnnounce() end) + end + self.SyncAnnounces = self.InvertSides and Metrostroi.Stations[self.StationIndex][self.PlatformIndex == 2 and 1 or 2] + self:SetNW2Bool("MustPlayAnnounces",self.MustPlayAnnounces or self.InvertSides) + end + + local boardingDoorList = {} + + local CurrentTrain + local TrainArrivedDist + + local PeopleGoing = false + local boarding = false + + local BoardTime = 8+7*self.HorliftStation + for k,v in pairs(ents.FindByClass("gmod_subway_*")) do + if v.Base ~= "gmod_subway_base" and v:GetClass() ~= "gmod_subway_base" then continue end + if not IsValid(v) or v:GetPos():Distance(self:GetPos()) > self.PlatformStart:Distance(self.PlatformEnd) then continue end + + local platform_distance = ((self.PlatformStart-v:GetPos()) - ((self.PlatformStart-v:GetPos()):Dot(self.PlatformNorm))*self.PlatformNorm):Length() + local vertical_distance = math.abs(v:GetPos().z - self.PlatformStart.z) + if vertical_distance >= 192 or platform_distance >= 256 then continue end + + local minb,maxb = v:LocalToWorld(Vector(-480,0,0)),v:LocalToWorld(Vector(480,0,0)) --FIXME + --[[ + local minb,maxb = v:WorldSpaceAABB() --FIXME + if (self:GetAngles()-v:GetAngles()):Forward().y > 0 then + local temp = maxb + maxb = minb + minb = temp + end + --local train_start = (v:LocalToWorld(Vector(480,0,0)) - self.PlatformStart):Dot(self.PlatformDir) / (self.PlatformDir:Length()^2) + --local train_end = (v:LocalToWorld(Vector(-480,0,0)) - self.PlatformStart):Dot(self.PlatformDir) / (self.PlatformDir:Length()^2)]] + local train_start = (maxb - self.PlatformStart):Dot(self.PlatformDir) / (self.PlatformDir:Length()^2) + local train_end = (minb - self.PlatformStart):Dot(self.PlatformDir) / (self.PlatformDir:Length()^2) + local left_side = train_start > train_end + if self.InvertSides then left_side = not left_side end + + local doors_open = left_side and v.LeftDoorsOpen or not left_side and v.RightDoorsOpen + if (train_start < 0) and (train_end < 0) then doors_open = false end + if (train_start > 1) and (train_end > 1) then doors_open = false end + + if -0.2 < train_start and train_start < 1.2 then + v.BoardTime = self.Timer and CurTime()-self.Timer + v.Horlift = self.HorliftStation > 0 + end + + if 0 < train_start and train_start < 1 and (not TrainArrivedDist or TrainArrivedDist < train_start) then + TrainArrivedDist = train_start + CurrentTrain = v + end + + -- Check horizontal lift station logic + local passengers_can_board = false + if self.HorliftStation > 0 then + -- Check fine stop + local stopped_fine = false + for i=0,4 do + local x_s = 0.99086 - i*0.1929 + local x_e = 0.97668 - i*0.1929 + stopped_fine = stopped_fine or ((train_start < x_s) and (train_start > x_e)) + end + + -- Open doors on station + if stopped_fine and (v.SOSD or self.OldOpened and not self.OpenedBySOSD) then + self.OpenedBySOSD = v.SOSD + self.HorliftTimer1 = self.HorliftTimer1 or CurTime() + if ((CurTime() - self.HorliftTimer1) > 0.5) then + if not self.HorliftTimer2 then self:FireHorliftDoors("Open") end + self.HorliftTimer2 = CurTime() + end + end + + -- Allow boarding + if self.HorliftTimer2 and self:GetDoorState() then passengers_can_board = doors_open end + else + passengers_can_board = doors_open + end + + -- Board passengers + if passengers_can_board then + -- Find player of the train + local driver = getTrainDriver(v) + + -- Limit train to platform + train_start = math.max(0,math.min(1,train_start)) + train_end = math.max(0,math.min(1,train_end)) + -- Check if this was the last stop + if (v.LastPlatform ~= self) then + v.LastPlatform = self + if v.AnnouncementToLeaveWagonAcknowledged then v.AnnouncementToLeaveWagonAcknowledged = nil end + + -- How many passengers must leave on this station + local proportion = math.random() * math.max(0,1.0 + math.log(self.PopularityIndex)) + if self.PlatformLast then proportion = 1 end + if (v.AnnouncementToLeaveWagon == true) then proportion = 1 end + -- Total count + v.PassengersToLeave = math.floor(proportion * v:GetNW2Float("PassengerCount") + 0.5) + end + -- Check for announcement + if v.AnnouncementToLeaveWagon and not v.AnnouncementToLeaveWagonAcknowledged then + v.AnnouncementToLeaveWagonAcknowledged = true + end + -- Calculate number of passengers near the train + local passenger_density = math.abs(CDF(train_start,self.PlatformX0,self.PlatformSigma) - CDF(train_end,self.PlatformX0,self.PlatformSigma)) + local passenger_count = passenger_density * self:PopulationCount() + -- Get number of doors + local door_count = #v.LeftDoorPositions + if not left_side then door_count = #v.RightDoorPositions end + + -- Get maximum boarding rate for normal russian subway train doors + local max_boarding_rate = getPassengerRate(v:GetNW2Int("PassengerCount")) * 1.4 * door_count * dT + --print(Format("R:%.2f\tS:%.2f\tP:% 3d",max_boarding_rate,getPassengerRate(v:GetNW2Int("PassengerCount")),v:GetNW2Int("PassengerCount"))) + -- Get boarding rate based on passenger density + local boarding_rate = math.min(max_boarding_rate,passenger_count) + if self.PlatformLast then boarding_rate = 0 end + -- Get rate of leaving + local leaving_rate = 1.4 * door_count * dT + if v.PassengersToLeave == 0 and not v.AnnouncementToLeaveWagonAcknowledged then leaving_rate = 0 end + -- Board these passengers into train + local speedLimit = math.max(0,1-math.abs(v.Speed/5)) + local boarded,left,count + --if v.AnnouncementToLeaveWagonAcknowledged then + if v.AnnouncementToLeaveWagonAcknowledged then + boarded = 0 + left = math.ceil(math.min(math.max(2,leaving_rate + 0.5),v:GetNW2Int("PassengerCount"))*speedLimit*1.5) + count = v:GetNW2Int("PassengerCount") + else + count = self:PopulationCount() + v.PassengersToLeave + boarded = math.ceil(math.min(math.max(2,boarding_rate+0.5),self:PopulationCount())*speedLimit) + left = math.ceil(math.min(math.max(2,leaving_rate +0.5),v.PassengersToLeave)*speedLimit) + end + if (v.PrevLeftDoorsOpening ~= v.LeftDoorsOpening) then + v.CanStuckPassengerLeft = not v.LeftDoorsOpening and ((boarded > 0 or left > 0) and math.min(1,count/100) or math.min(1,count/400)) + v.PrevLeftDoorsOpening = v.LeftDoorsOpening + if v.LeftDoorsOpening then v.LastPlatform = nil end + end + if (v.PrevRightDoorsOpening ~= v.RightDoorsOpening) then + v.CanStuckPassengerRight = not v.RightDoorsOpening and ((boarded > 0 or left > 0) and math.min(1,count/100) or math.min(1,count/400)) + v.PrevRightDoorsOpening = v.RightDoorsOpening + if v.RightDoorsOpening then v.LastPlatform = nil end + end + + if math.random() <= math.Clamp(17-passenger_count,0,17)/17*0.5 then boarded = 0 end + if math.random() <= math.Clamp(17-v.PassengersToLeave,0,17)/17*0.5 then left = 0 end + local passenger_delta = boarded - left + -- People board from platform + if boarded > 0 then + PeopleGoing = true + self.WindowStart = (self.WindowStart + boarded) % self:PoolSize() + end + -- People leave to + if left > 0 then + PeopleGoing = true + if IsValid(driver) then + driver:AddFrags(left) + driver.MTransportedPassengers = (driver.MTransportedPassengers or 0) + left + end + + -- Move passengers + v.PassengersToLeave = v.PassengersToLeave - left + self.PassengersLeft = self.PassengersLeft + left + if v.AnnouncementToLeaveWagonAcknowledged and not self.PlatformLast then + if math.random() > 0.3 then + self.WindowStart = (self.WindowStart - left) % self:PoolSize() + end + elseif not self.PlatformLast and math.random() > 0.9 then + self.WindowStart = (self.WindowStart - left) % self:PoolSize() + end + end + --[[ People boarded train + if boarded > 0 then + if IsValid(driver) then + driver:AddDeaths(boarded) + end + end]] + -- Change number of people in train + v:BoardPassengers(passenger_delta) + + -- Keep list of door positions + if left_side then + for k, vec in ipairs(v.LeftDoorPositions) do + table.insert(boardingDoorList, v:LocalToWorld(vec)) + end + else + for k, vec in ipairs(v.RightDoorPositions) do + table.insert(boardingDoorList, v:LocalToWorld(vec)) + end + end + if v.AnnouncementToLeaveWagonAcknowledged then + BoardTime = math.max(BoardTime,8+7*self.HorliftStation+(v.PassengersToLeave or 0)*dT*0.6) + else + BoardTime = math.max(BoardTime,8+7*self.HorliftStation+math.max((v.PassengersToLeave or 0)*dT,self:PopulationCount()*dT)*0.5) + end + -- Add doors to boarding list + --print("BOARDING",boarding_rate,"DELTA = "..passenger_delta,self.PlatformLast,v:GetNW2Int("PassengerCount")) + end + if v.UPO then v.UPO.AnnouncerPlay = self.AnnouncerPlay end + v.BoardTimer = self.BoardTimer + boarding = boarding or passengers_can_board + end + --if not boarding then CurrentTrain = nil end + self.BoardTime = BoardTime + if CurrentTrain and not self.CurrentTrain then + self.CurrentTrain = CurrentTrain + self:PlayAnnounce(1) + elseif not CurrentTrain and self.CurrentTrain then + self.CurrentTrain = nil + end + + --PUI Timer + if boarding and not self.Timer then self.Timer = math.max(CurTime()+20,CurTime()+self.BoardTime) end + if not self.CurrentTrain and self.Timer then self.Timer = nil end + if self.Timer then + self.BoardTimer = -(CurTime()-self.Timer) + self.AnnouncerPlay = self.BoardTimer < 8+7*self.HorliftStation+0.2 + --print(self.PlatformIndex,self.BoardTimer,self.AnnouncerPlay) + else + self.BoardTimer = 20 + self.AnnouncerPlay = false + end + if IsValid(self.PUI) then + local train = self.CurrentTrain + if IsValid(train) and Metrostroi.EndStations and Metrostroi.EndStations[1] and type(train.SignsIndex) == "number" then + local id = Metrostroi.EndStations[1][1] + for k,v in pairs(train.SignsList or {}) do + if v == train.SignsIndex then id = k; break end + end + local ends = false + for k,v in pairs(Metrostroi.EndStations) do + if id == v[1] or id == v[#v] then + ends = true + break + end + end + if ends then + self.PUI.Last = 0 + else + self.PUI.Last = id + end + else + self.PUI.Last = 0 + end + if IsValid(self.CurrentTrain) and IsValid(self.PUI) and self.Timer then + if not self.PUI.Work then self.PUI.Work = true end + + + self.PUI.BoardTime = self.BoardTimer + local time = 8+7*self.HorliftStation + self.PUI.Lamp = time-0.2 < self.BoardTimer and self.BoardTimer < time+0.3 + else + self.PUIStartGoing = false + self.PUI.Work = false + self.PUI.Lamp = false + end + end + --[[ + if self.CurrentTrain and not self.SignOff then + if not self.TritonePlayed then + if false and self.CurrentTrain.SignsList and (self.CurrentTrain.SignsList[self.CurrentTrain.SignsIndex] == "" or self.CurrentTrain.SignsList[self.CurrentTrain.SignsIndex] and self.CurrentTrain.SignsList[self.CurrentTrain.SignsIndex][3]) then + self:PlayAnnounce(2,self.NoEntry.arr) + timer.Simple(20,function() + if not IsValid(self.CurrentTrain) then return end + self:PlayAnnounce(2,self.NoEntry.dep) + if self.CurrentTrain.SignsIndex == #self.CurrentTrain.SignsList-3 then + timer.Simple(15,function() self:PlayAnnounce(2,self.NoEntry.depot) end) + end + end) + else + local spec = false + if self.NoEntry.specarr then + for k,v in pairs( self.CurrentTrain.SignsList or {}) do + if v == self.CurrentTrain.SignsIndex then + if Metrostroi.StationAnnouncesTo[self.StationIndex][2] == k then + spec = true + break + end + end + end + end + if spec then + self:PlayAnnounce(2,self.NoEntry.specarr) + timer.Simple(20,function() + if not IsValid(self.CurrentTrain) then return end + self:PlayAnnounce(2,self.NoEntry.specdep) + end) + else + self:PlayAnnounce(1) + end + end + self.TritonePlayed = true + end + else + self.TritonePlayed = nil + end]] + -- Add passengers + if (not self.PlatformLast) and (#boardingDoorList == 0) then + local target = (Metrostroi.PassengersScale or 50)*self.PopularityIndex --300 + -- then target = target*0.1 end + + if target <= 0 then + self.WindowEnd = self.WindowStart + else + local growthDelta = math.max(0,(target-self:PopulationCount())*0.005) + if growthDelta < 1.0 then -- Accumulate fractional rate + self.GrowthAccumulation = (self.GrowthAccumulation or 0) + growthDelta + if self.GrowthAccumulation > 1.0 then + growthDelta = 1 + self.GrowthAccumulation = self.GrowthAccumulation - 1.0 + end + end + self.WindowEnd = (self.WindowEnd + math.floor(growthDelta+0.5)) % self:PoolSize() + end + end + + if self.HorliftStation > 0 then + if self.HorliftTimer2 then + if (CurTime() - self.HorliftTimer2) > 1 then + self:FireHorliftDoors("Close") + self.HorliftTimer1 = nil + self.HorliftTimer2 = nil + self.HorliftTimer3 = CurTime() + end + end + if self.HorliftTimer3 and (CurTime() - self.HorliftTimer3) > 2.5 then + self.HorliftTimer3 = nil + end + end + if self.OldOpened ~= self:GetDoorState() or self.OldPeopleGoing ~= PeopleGoing then + self.ARSOverride = true + self.OldOpened = self:GetDoorState() + self.OldPeopleGoing = PeopleGoing + if not self.OldOpened then self.OpenedBySOSD = false end + end + -- Block local ARS sections + if self.ARSOverride ~= nil then + -- Signal override to all signals + local ars_ents = ents.FindInSphere(self.PlatformEnd,768) + for k,v in pairs(ars_ents) do + local delta_z = math.abs(self.PlatformEnd.z-v:GetPos().z) + if (v:GetClass() == "gmod_track_signal") and (delta_z < 128) then + v.OverrideTrackOccupied = self:GetDoorState() + end + if (v:GetClass() == "gmod_track_horlift_signal") and (delta_z < 90 and v:GetNWInt("Type") == 0 or v:GetNWInt("Type") == 1) then + v.WhiteSignal = self:GetDoorState() + v.YellowSignal = not self:GetDoorState() + v.PeopleGoing = PeopleGoing + end + end + + -- Finish override + self.ARSOverride = nil + end + if self.BoardingDoorListLength ~= #boardingDoorList then + -- Send boarding list FIXME make this nicer + for k,v in ipairs(boardingDoorList) do + self:SetNW2Vector("TrainDoor"..k,v) + end + self:SetNW2Int("TrainDoorCount",#boardingDoorList) + end + self.BoardingDoorListLength = #boardingDoorList + self:NextThink(CurTime() + dT) + return true +end diff --git a/lua/entities/gmod_track_platform/shared.lua b/lua/entities/gmod_track_platform/shared.lua new file mode 100644 index 0000000..a545e31 --- /dev/null +++ b/lua/entities/gmod_track_platform/shared.lua @@ -0,0 +1,14 @@ +-- FIXME: this should be point, but for some reason it won't call init/think callbacks that way +--ENT.Type = "point" +ENT.Type = "anim" +ENT.PrintName = "Train Platform" +ENT.Spawnable = false +ENT.AdminSpawnable = false + +function ENT:PoolSize() + return 1024 +end + +function ENT:Seed() + return self:EntIndex() +end diff --git a/lua/entities/gmod_track_pneumatic_snake/cl_init.lua b/lua/entities/gmod_track_pneumatic_snake/cl_init.lua new file mode 100644 index 0000000..96c6222 --- /dev/null +++ b/lua/entities/gmod_track_pneumatic_snake/cl_init.lua @@ -0,0 +1,7 @@ +include("shared.lua") + + +-------------------------------------------------------------------------------- +function ENT:Draw() + self:DrawModel() +end \ No newline at end of file diff --git a/lua/entities/gmod_track_pneumatic_snake/init.lua b/lua/entities/gmod_track_pneumatic_snake/init.lua new file mode 100644 index 0000000..cab2a4e --- /dev/null +++ b/lua/entities/gmod_track_pneumatic_snake/init.lua @@ -0,0 +1,78 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +ENT.Pneumatic = { + TrainLinePressure = 7.8, + ReadOnly = true, +} +function ENT:Initialize() + self:SetModel("models/mus/depo/connector_snake.mdl") + self.VMF = self.VMF or {} + self:SetUseType(SIMPLE_USE) + self:PhysicsInit(SOLID_VPHYSICS) + self:SetMoveType(MOVETYPE_VPHYSICS) + self:SetSolid(SOLID_VPHYSICS) + local physobj = self:GetPhysicsObject() + if physobj:IsValid() then physobj:SetMass(50) end +end +function ENT:Touch(ent) + if IsValid(ent) and (ent:GetClass() == "gmod_train_bogey" and not ent.DontHaveCoupler or ent:GetClass() == "gmod_train_couple") then + local pos = ent:WorldToLocal(self:GetPos()) + local cpos = ent.CouplingPointOffset + local X = cpos.x - 13 + if not self.Timer and pos.x > X and self.CoupledWith ~= ent and not IsValid(ent.DepotPneumo) then + self:SetPos(ent:LocalToWorld(ent.SnakePos or Vector(cpos.x+0.13,cpos.y+0,cpos.z+6.5))) + self:SetAngles(ent:LocalToWorldAngles(ent.SnakeAng or Angle(0,90,0))) + if IsValid(constraint.Weld(ent,self,0,0,0--[[33000]],true,false)) then + self.CoupledWith = ent + ent.DepotPneumo = self + DropEntityIfHeld(ent) + + --[[if self.LastPickup and self:IsPlayerHolding() then + self.LastPickup:DropObject() + end]] + sound.Play("buttons/lever2.wav",self:GetPos()) + end + end + end +end +local function removeWeldBetweenEnts(ent1,ent2) + local constrainttable = constraint.FindConstraints(ent1,"Weld") + for k,v in pairs(constrainttable) do + if (v.Ent1 == ent1 or v.Ent1 == ent2) and (v.Ent2 == ent1 or v.Ent2 == ent2) then + v.Constraint:Remove() + end + end +end +function ENT:Use(ply) --TODO: GravGunPickup + if IsValid(self.CoupledWith) then + sound.Play("buttons/lever8.wav",(self:GetPos()+self.CoupledWith:GetPos())/2) + removeWeldBetweenEnts(self,self.CoupledWith) + removeWeldBetweenEnts(self.CoupledWith,self) + + self.CoupledWith.DepotPneumo = nil + self.Timer = CurTime()+2 + end + self.CoupledWith = nil + if ( self:IsPlayerHolding() ) then return end + if ply.PickupObject then ply:PickupObject( self ) end + self.LastPickup = ply +end +function ENT:Think() + if self.Timer and CurTime() - self.Timer > 0 then + self.Timer = nil + end + if IsValid(self.CoupledWith) and self.CoupledWith.DepotPneumo == self then + local coupled = false + for k,v in pairs(constraint.FindConstraints(self,"Weld")) do + if (v.Ent1 == self or v.Ent1 == self.CoupledWith) and (v.Ent2 == self or v.Ent2 == self.CoupledWith) then + coupled = true + break + end + end + if not coupled then self:Use(self,self,0,0) end + end + self:NextThink(CurTime() + 1) + return true +end diff --git a/lua/entities/gmod_track_pneumatic_snake/shared.lua b/lua/entities/gmod_track_pneumatic_snake/shared.lua new file mode 100644 index 0000000..a60ae3d --- /dev/null +++ b/lua/entities/gmod_track_pneumatic_snake/shared.lua @@ -0,0 +1,6 @@ +ENT.Type = "anim" +ENT.PrintName = "Udochka" +ENT.Category = "Metrostroi (utility)" + +ENT.Spawnable = false +ENT.AdminSpawnable = false diff --git a/lua/entities/gmod_track_powermeter/cl_init.lua b/lua/entities/gmod_track_powermeter/cl_init.lua new file mode 100644 index 0000000..aa7617a --- /dev/null +++ b/lua/entities/gmod_track_powermeter/cl_init.lua @@ -0,0 +1,62 @@ +include("shared.lua") + +function ENT:Draw() + self:DrawModel() + + --self:SetNW2Float("Total",Metrostroi.TotalkWh) + --self:SetNW2Float("Rate",Metrostroi.TotalRateWatts) + + local pos = self:LocalToWorld(Vector(4.6,-5.5,14)) + local ang = self:LocalToWorldAngles(Angle(0,90,90)) + cam.Start3D2D(pos, ang, 1/16) + surface.SetDrawColor(0, 0, 0, 255) + surface.DrawRect(6, 32+64*0, 192-24, 32) + surface.DrawRect(6, 32+64*1, 192-24, 32) + surface.DrawRect(6, 32+64*2, 192-24, 32) + surface.DrawRect(6, 32+64*3, 192-24, 32) + surface.DrawRect(6, 32+64*4, 192-24, 32) + + draw.DrawText(Format("%07.0f",self:GetTotal()*1000),"MetrostroiSubway_IGLA",6+4,32+64*0,Color(255,255,255,255)) + --draw.DrawText(",","MetrostroiSubway_IGLA",20+4+26,32+64*0,Color(255,255,255,255)) + draw.DrawText(".","MetrostroiSubway_IGLA",20+4+64+4,32+64*0+2,Color(255,255,255,255)) + draw.DrawText("E (watts-hour)","MetrostroiSubway_VerySmallText3",16,6+64*0,Color(0,0,0,255)) + + draw.DrawText(Format("%07.1f",self:GetRate()*1e-3),"MetrostroiSubway_IGLA",6+4,32+64*1,Color(255,255,255,255)) + draw.DrawText("P (kW)","MetrostroiSubway_VerySmallText3",16,8+64*1,Color(0,0,0,255)) + + draw.DrawText(Format("%7.2f",Metrostroi.GetEnergyCost(self:GetTotal())),"MetrostroiSubway_IGLA",6+4,32+64*2,Color(255,255,255,255)) + draw.DrawText("Cost ($)","MetrostroiSubway_VerySmallText3",16,8+64*2,Color(0,0,0,255)) + + draw.DrawText(Format("%7.1f",self:GetV()),"MetrostroiSubway_IGLA",6+4,32+64*3,Color(255,255,255,255)) + draw.DrawText("Voltage (V)","MetrostroiSubway_VerySmallText3",16,8+64*3,Color(0,0,0,255)) + + draw.DrawText(Format("%7.1f",self:GetA()),"MetrostroiSubway_IGLA",6+4,32+64*4,Color(255,255,255,255)) + draw.DrawText("Current (A)","MetrostroiSubway_VerySmallText3",16,8+64*4,Color(0,0,0,255)) + + --Metrostroi.DrawClockDigit(56+170,48,2.0,0) + + --[[local T0 = self:GetNW2Float("T0",os.time())+1396011937 + local T1 = self:GetNW2Float("T1",CurTime()) + local dT = (os.time()-T0 + (CurTime() % 1.0)) - (CurTime()-T1) + + local digits = { 1,2,3,4,5,6 } + local os_time = os.time()-dT + local d = os.date("!*t",os_time) + digits[1] = math.floor(d.hour / 10) + digits[2] = math.floor(d.hour % 10) + digits[3] = math.floor(d.min / 10) + digits[4] = math.floor(d.min % 10) + digits[5] = math.floor(d.sec / 10) + digits[6] = math.floor(d.sec % 10) + + for i,v in ipairs(digits) do + local j = i-1 + local x = 56+100*(i-1)+50*math.floor((i-1)/2) + local y = 48 + Metrostroi.DrawClockDigit(x,y,1.7,v) + end + Metrostroi.DrawClockDigit(56+170,48,1.7,".")]]-- + cam.End3D2D() + + +end \ No newline at end of file diff --git a/lua/entities/gmod_track_powermeter/init.lua b/lua/entities/gmod_track_powermeter/init.lua new file mode 100644 index 0000000..89f6a9e --- /dev/null +++ b/lua/entities/gmod_track_powermeter/init.lua @@ -0,0 +1,60 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") +local OldVoltage +function ENT:Initialize() + self:SetModel("models/z-o-m-b-i-e/metro_2033/electro/m33_electro_box_12_4.mdl") + + self:PhysicsInit(SOLID_VPHYSICS) + self:SetMoveType(MOVETYPE_VPHYSICS) + self:SetSolid(SOLID_VPHYSICS) + self:SetUseType(SIMPLE_USE) + if not Metrostroi.OldVoltage then + Metrostroi.OldVoltage = 0 + end +end + +function ENT:Use(ply) + --if not ply:IsAdmin() then return end + if Metrostroi.Voltage == 0 then + RunConsoleCommand("metrostroi_voltage",Metrostroi.OldVoltage ~= 0 and Metrostroi.OldVoltage or 750) + Metrostroi.OldVoltage = 0 + else + Metrostroi.OldVoltage = GetConVarNumber("metrostroi_voltage") + RunConsoleCommand("metrostroi_voltage",0) + Metrostroi.Voltage = 0 + Metrostroi.VoltageOffByPlayerUse = true + end + self:EmitSound("buttons/lever8.wav",100,100) +end + +function ENT:Think() + self:SetTotal(Metrostroi.TotalkWh) + self:SetRate(Metrostroi.TotalRateWatts) + self:SetV(Metrostroi.Voltage) + self:SetA(Metrostroi.Current) + + if Metrostroi.Voltage >= 10 then + Metrostroi.VoltageOffByPlayerUse = nil + end + if Metrostroi.Voltage < 10 and not Metrostroi.VoltageOffByPlayerUse then + self.SoundTimer = self.SoundTimer or CurTime() + if (CurTime() - self.SoundTimer) > 1.0 then + self:EmitSound("ambient/alarms/klaxon1.wav", 100, 100) + self.SoundTimer = CurTime() + end + end + + self:NextThink(CurTime()) + return true +end + +function ENT:OnRemove() + if Metrostroi.Voltage == 0 then + RunConsoleCommand("metrostroi_voltage",Metrostroi.OldVoltage ~= 0 and Metrostroi.OldVoltage or 750) + end +end + + + + \ No newline at end of file diff --git a/lua/entities/gmod_track_powermeter/shared.lua b/lua/entities/gmod_track_powermeter/shared.lua new file mode 100644 index 0000000..1ba3f94 --- /dev/null +++ b/lua/entities/gmod_track_powermeter/shared.lua @@ -0,0 +1,13 @@ +ENT.Type = "anim" + +ENT.Category = "Metrostroi (utility)" + +ENT.Spawnable = true +ENT.AdminSpawnable = false + +function ENT:SetupDataTables() + self:NetworkVar("Float", 0, "Total" ) + self:NetworkVar("Float", 1, "Rate" ) + self:NetworkVar("Float", 2, "V") + self:NetworkVar("Float", 3, "A" ) +end diff --git a/lua/entities/gmod_track_pui/cl_init.lua b/lua/entities/gmod_track_pui/cl_init.lua new file mode 100644 index 0000000..25f4e8a --- /dev/null +++ b/lua/entities/gmod_track_pui/cl_init.lua @@ -0,0 +1,113 @@ +include("shared.lua") +ENT.DigitPositions = { + {Vector(0.1,0,0),"minus"}, + {Vector(0.1,0,0),"numb"}, + {Vector(0.1,6,0),"numb"}, + {Vector(0.1,0,0),"dots"}, + {Vector(0.1,13.28, 0),"numb"}, + {Vector(0.1,19.28,0),"numb"}, + {Vector(0.1,0,0),"station"}, +} + +function ENT:Initialize() + self.Digits = {} + self.Anims = {} +end + +function ENT:Animate(clientProp, value, min, max, speed) + local id = clientProp + if not self.Anims[id] then + self.Anims[id] = {} + self.Anims[id].val = value + self.Anims[id].V = 0.0 + end + -- Prepare speed limiting + local delta = math.abs(value - self.Anims[id].val) + local max_speed = 1.5*delta / self.DeltaTime + local max_accel = 0.5 / self.DeltaTime + + -- Simulate + local dX2dT = (speed or 128)*(value - self.Anims[id].val) - self.Anims[id].V * (damping or 8.0) + if dX2dT > max_accel then dX2dT = max_accel end + if dX2dT < -max_accel then dX2dT = -max_accel end + + self.Anims[id].V = self.Anims[id].V + dX2dT * self.DeltaTime + if self.Anims[id].V > max_speed then self.Anims[id].V = max_speed end + if self.Anims[id].V < -max_speed then self.Anims[id].V = -max_speed end + + self.Anims[id].val = math.max(0,math.min(1,self.Anims[id].val + self.Anims[id].V * self.DeltaTime)) + + -- Check if value got stuck + if (math.abs(dX2dT) < 0.001) and stickyness and (self.DeltaTime > 0) then + self.Anims[id].stuck = true + end + return min + (max-min)*self.Anims[id].val +end +function ENT:Think() + self.PrevTime = self.PrevTime or RealTime() + self.DeltaTime = (RealTime() - self.PrevTime) + self.PrevTime = RealTime() + if self:IsDormant() then self:OnRemove();return end + for k,v in pairs(self.DigitPositions) do + if not IsValid(self.Digits[k]) and (k>6 or (k>1 or self:GetNWInt("Time",0) < 0) and k<=6 and self:GetNWBool("Work",false)) then + --self.Digits[k] = ents.CreateClientProp("models/metrostroi/81-717/reverser.mdl") + --self.Digits[k]:SetModel("models/metrostroi/mus_clock/pui_ind_"..v[2]..".mdl") + --hook.Add("MetrostroiBigLag",self.Digits[k],function(ent) + -- ent:SetPos(self:LocalToWorld(v[1])) + -- ent:SetAngles(self:GetAngles()) + -- --if ent.Spawned then hook.Remove("MetrostroiBigLag",ent) end + -- --ent.Spawned = true + --end) + self.Digits[k] = ClientsideModel("models/metrostroi/mus_clock/pui_ind_"..v[2]..".mdl",RENDERGROUP_OPAQUE) + self.Digits[k]:SetPos(self:LocalToWorld(v[1])) + self.Digits[k]:SetAngles(self:GetAngles()) + self.Digits[k]:SetSkin(1) + self.Digits[k]:SetParent(self) + elseif IsValid(self.Digits[k]) and( + (k>1 or self:GetNWInt("Time",0) >= 0 or not self:GetNWBool("Work",false)) + and k<=6 and (k == 1 or not self:GetNWBool("Work",false))) then + SafeRemoveEntity(self.Digits[k]) + end + end + local lamp = self:Animate("Lamp",self:GetNWBool("Lamp",false) and 1 or 0, 0,1, 1024) + if not IsValid(self.Digits[0]) and lamp > 0 then + --self.Digits[0] = ents.CreateClientProp("models/metrostroi/81-717/reverser.mdl") + --self.Digits[0]:SetModel("models/metrostroi/mus_clock/pui_lamp.mdl") + --hook.Add("MetrostroiBigLag",self.Digits[0],function(ent) + -- ent:SetPos(self:GetAttachment(self:LookupAttachment("lamp")).Pos) + -- ent:SetAngles(self:GetAngles()) + -- --if ent.Spawned then hook.Remove("MetrostroiBigLag",ent) end + -- --ent.Spawned = true + --end) + self.Digits[0] = ClientsideModel("models/metrostroi/mus_clock/pui_lamp.mdl",RENDERGROUP_OPAQUE) + self.Digits[0]:SetPos(self:GetAttachment(self:LookupAttachment("lamp")).Pos) + self.Digits[0]:SetAngles(self:GetAngles()) + self.Digits[0]:SetParent(self) + self.Digits[0]:SetRenderMode( RENDERMODE_TRANSALPHA ) + self.Digits[0]:SetColor(Color(255,255,255,lamp*255)) + elseif IsValid(self.Digits[0]) and lamp > 0 then + self.Digits[0]:SetColor(Color(255,255,255,lamp*255)) + elseif IsValid(self.Digits[0]) and lamp == 0 then + SafeRemoveEntity(self.Digits[0]) + end + if self:GetNWBool("Work",false) then + local time = Format("%02d%02d",math.floor(math.abs((self:GetNWInt("Time"))/60)),math.abs(self:GetNWInt("Time"))%60) + if IsValid(self.Digits[2]) then self.Digits[2]:SetSkin(time[1]) end + if IsValid(self.Digits[3]) then self.Digits[3]:SetSkin(time[2]) end + if IsValid(self.Digits[5]) then self.Digits[5]:SetSkin(time[3]) end + if IsValid(self.Digits[6]) then self.Digits[6]:SetSkin(time[4]) end + end + if self:GetNWInt("Last",0) == 0 then + if IsValid(self.Digits[7]) then self.Digits[7]:SetSkin(0) end + else + if IsValid(self.Digits[7]) then self.Digits[7]:SetSkin(self.StationConverter[self:GetNWInt("Last",0)] or 8) end + end +end +function ENT:OnRemove() + for _,v in pairs(self.Digits) do + SafeRemoveEntity(v) + end +end +function ENT:Draw() + self:DrawModel() +end diff --git a/lua/entities/gmod_track_pui/init.lua b/lua/entities/gmod_track_pui/init.lua new file mode 100644 index 0000000..a4bb038 --- /dev/null +++ b/lua/entities/gmod_track_pui/init.lua @@ -0,0 +1,33 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +function ENT:KeyValue(key, value) + self.VMF = self.VMF or {} + self.VMF[key] = value +end +-------------------------------------------------------------------------------- +function ENT:Initialize() + self:EntIndex() + self.VMF = self.VMF or {} + self.Model = self.VMF.model or "models/metrostroi/mus_clock/pui_var_a.mdl" + self:SetModel(self.Model) + self.Work = false + self.Last = 0 +end +--ENT.Update = true +function ENT:Think() + -- Time sync + --[[if self.Update then + self.BoardTime = CurTime() + self.Work = true + self.Update = false + end]] + self:SetNWBool("Work",self.Work == true) + self:SetNWInt("Last",self.Last) + self:SetNWInt("Time",self.BoardTime or 0)--math.floor((self.BoardTime or 0)-CurTime())) + --self:SetNWBool("Lamp",self.Work and (self.Horlift and self:GetNWInt("Time") == 15 or self:GetNWInt("Time") == 8)) + self:SetNWBool("Lamp",self.Lamp) + self:NextThink(0.1) + return true +end diff --git a/lua/entities/gmod_track_pui/shared.lua b/lua/entities/gmod_track_pui/shared.lua new file mode 100644 index 0000000..43f9402 --- /dev/null +++ b/lua/entities/gmod_track_pui/shared.lua @@ -0,0 +1,19 @@ +ENT.Type = "anim" + +ENT.Category = "Metrostroi (utility)" + +ENT.Spawnable = false +ENT.AdminSpawnable = false + +ENT.StationConverter = { + [108] = 2, + [111] = 3, + [114] = 4, + [121] = 5, + [121] = 6, + [322] = 7, + [651] = 8, + [654] = 9, + [655] = 10, + [656] = 11, +} diff --git a/lua/entities/gmod_track_sign/cl_init.lua b/lua/entities/gmod_track_sign/cl_init.lua new file mode 100644 index 0000000..84edcdf --- /dev/null +++ b/lua/entities/gmod_track_sign/cl_init.lua @@ -0,0 +1,217 @@ +include("shared.lua") + +surface.CreateFont("MetrostroiSubway_StationFont1", { + font = "Arial", + size = 96, + weight = 0, + blursize = 0, + scanlines = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true +}) + +surface.CreateFont("MetrostroiSubway_StationFont2", { + font = "Times New Roman", + size = 128, + weight = 0, + antialias = true, + extended = true +}) + +surface.CreateFont("MetrostroiSubway_StationList1", { + font = "Arial", + size = 28, + weight = 1000, + antialias = true, + extended = true +}) +surface.CreateFont("MetrostroiSubway_StationList2", { + font = "Arial", + size = 28, + weight = 0, + antialias = true, + extended = true +}) +surface.CreateFont("MetrostroiSubway_StationList3", { + font = "Arial", + size = 28, + weight = 0, + antialias = true, + extended = true +}) + +function ENT:Initialize() + self:SetRenderBounds( + Vector(-16,-768,-64), + Vector(16,768,64)) +end + +local P1 = -2 +local P2 = 3 +function ENT:DrawStation(x,y,ID,currentStation,R1,G1,B1,W,H,text1,text2,text3) + local R2 = 225 + local G2 = 205 + local B2 = 0 + + if currentStation then + local R,G,B = R2,G2,B2 + R2,G2,B2 = R1,G1,B1 + R1,G1,B1 = R,G,B + end + + self.LastColor = self.LastColor or Color(R1,G1,B1,255) + + surface.SetDrawColor(0,0,0,255) + surface.DrawRect(x+P1,y,W-P1*2,H) + + surface.SetDrawColor(R1,G1,B1,255) + surface.DrawRect(x+P1+P2,y+P2,W-P1*2-P2*2,H-P2*2) + + local cx = x+W*0.1 + local cy = y+H*0.5 + local N = 10 + local radius = 23 + local step = 2*math.pi/N + local vertexBuffer = { {}, {}, {} } + + surface.SetDrawColor(255,255,255,255) + for i=1,N do + vertexBuffer[1].x = cx + radius*math.sin(step*(i+0)) + vertexBuffer[1].y = cy + radius*math.cos(step*(i+0)) + vertexBuffer[2].x = cx + vertexBuffer[2].y = cy + vertexBuffer[3].x = cx + radius*math.sin(step*(i+1)) + vertexBuffer[3].y = cy + radius*math.cos(step*(i+1)) + surface.DrawPoly(vertexBuffer) + end + + draw.Text({ + text = text1, + font = "MetrostroiSubway_StationList3", + pos = { x+W*0.1, y+H*0.5}, + xalign = TEXT_ALIGN_CENTER, + yalign = TEXT_ALIGN_CENTER, + color = Color(0,0,0,255)}) + draw.Text({ + text = text2, + font = "MetrostroiSubway_StationList1", + pos = { x+W*0.55, y+H*0.25}, + xalign = TEXT_ALIGN_CENTER, + yalign = TEXT_ALIGN_CENTER, + color = Color(0,0,0,255)}) + draw.Text({ + text = text3, + font = "MetrostroiSubway_StationList2", + pos = { x+W*0.55, y+H*0.75}, + xalign = TEXT_ALIGN_CENTER, + yalign = TEXT_ALIGN_CENTER, + color = Color(0,0,0,255)}) +end + +function ENT:Draw() + local pos = self:LocalToWorld(Vector(4,0,16)) + local ang = self:LocalToWorldAngles(Angle(0,90,90)) + cam.Start3D2D(pos, ang, 0.50) + --surface.SetDrawColor(255,255,255,255) + --surface.DrawRect(0, 0, 256, 320) + + draw.Text({ + text = self:GetNW2String("Name","Error"), + font = "MetrostroiSubway_StationFont2",--..self:GetNW2Int("Style",1), + pos = { 0, 0 }, + xalign = TEXT_ALIGN_CENTER, + yalign = TEXT_ALIGN_CENTER, + color = Color(0,0,0,255)}) + cam.End3D2D() + + local pos = self:LocalToWorld(Vector(4,0,-32)) + local ang = self:LocalToWorldAngles(Angle(0,90,90)) + cam.Start3D2D(pos, ang, 0.125) + draw.NoTexture() + + local N = self:GetNW2Int("StationList#") + local W = 320 + local H = 64 + local X = -N*W*0.5 + self.LastColor = nil + for i=1,N do + local x = X+W*(i-1) + local ID = self:GetNW2Int("StationList"..i.."[ID]") + local currentStation = (self:GetNW2Int("ID") == ID) + + local R1 = self:GetNW2Int("StationList"..i.."[R]") + local G1 = self:GetNW2Int("StationList"..i.."[G]") + local B1 = self:GetNW2Int("StationList"..i.."[B]") + + self:DrawStation(x,0,ID,currentStation,R1,G1,B1,W,H, + self:GetNW2String("StationList"..i.."[ID]"), + self:GetNW2String("StationList"..i.."[Name1]"), + self:GetNW2String("StationList"..i.."[Name2]")) + + -- Draw change + if self:GetNW2Int("Change2") == tonumber(self:GetNW2String("StationList"..i.."[ID]")) then + local Nc = self:GetNW2Int("Change2List#") + local ChangeStation = self:GetNW2Int("Change2ID") + local N2 = 0 + for j=1,Nc do + if self:GetNW2Int("Change2List"..j.."[ID]") < ChangeStation then + N2 = N2 + 1 + end + end + + for j=1,Nc do + local ID = self:GetNW2Int("Change2List"..j.."[ID]") + local R2 = self:GetNW2Int("Change2List"..j.."[R]") + local G2 = self:GetNW2Int("Change2List"..j.."[G]") + local B2 = self:GetNW2Int("Change2List"..j.."[B]") + + local H2 = H*0.85 + local y = 0 + if j <= N2 + then y = -H2*(N2-j+1) + else y = 0+H+H2*(j-N2-1) + end + + self:DrawStation(x,y,ID,false,R2,G2,B2,W,H2, + self:GetNW2String("Change2List"..j.."[ID]"), + self:GetNW2String("Change2List"..j.."[Name1]"), + self:GetNW2String("Change2List"..j.."[Name2]")) + end + end + end + + -- Inner part of arrow + local arrow = { + { x = 0, y = 0 }, + { x = 0, y = H }, + { x = -H/2, y = H/2 }, + } + for k,v in ipairs(arrow) do + v.x = v.x - (N*0.5)*W - 2 + end + + surface.SetDrawColor(Color(0,0,0,255)) + surface.DrawPoly(arrow) + + -- Outer part of arrow + arrow = { + { x = -P2, y = 2*P2 }, + { x = -P2, y = H-2*P2 }, + { x = -H/2+P2, y = H/2 }, + } + for k,v in ipairs(arrow) do + v.x = v.x - (N*0.5)*W + end + + surface.SetDrawColor(self.LastColor or Color(0,0,0,0)) + surface.DrawPoly(arrow) + cam.End3D2D() +end diff --git a/lua/entities/gmod_track_sign/init.lua b/lua/entities/gmod_track_sign/init.lua new file mode 100644 index 0000000..2940b93 --- /dev/null +++ b/lua/entities/gmod_track_sign/init.lua @@ -0,0 +1,13 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +function ENT:Initialize() +end + +--[[function ENT:MakeStationSign(rus_name,eng_name) + self:SetNW2String("Type","station_sign") + self:SetNW2Int("Style",2) + self:SetNW2String("RusName",rus_name) + self:SetNW2String("EngName",eng_name) +end]]-- \ No newline at end of file diff --git a/lua/entities/gmod_track_sign/shared.lua b/lua/entities/gmod_track_sign/shared.lua new file mode 100644 index 0000000..d6f56da --- /dev/null +++ b/lua/entities/gmod_track_sign/shared.lua @@ -0,0 +1,7 @@ +ENT.Type = "anim" +ENT.PrintName = "Track Sign" +ENT.Category = "Metrostroi (utility)" + +ENT.Spawnable = false +ENT.AdminSpawnable = false +ENT.RenderGroup = RENDERGROUP_BOTH \ No newline at end of file diff --git a/lua/entities/gmod_track_signal/cl_init.lua b/lua/entities/gmod_track_signal/cl_init.lua new file mode 100644 index 0000000..bf649b9 --- /dev/null +++ b/lua/entities/gmod_track_signal/cl_init.lua @@ -0,0 +1,677 @@ +include("shared.lua") + +-------------------------------------------------------------------------------- +function ENT:Initialize() + self.Sig = "" + self.OldName = "" + self.Models = {{},{},{}} + self.Signals = {} + self.Anims = {} +end + +function ENT:Animate(clientProp, value, min, max, speed, damping, stickyness) + local id = clientProp + if not self.Anims[id] then + self.Anims[id] = {} + self.Anims[id].val = value + self.Anims[id].V = 0.0 + end + + if damping == false then + local dX = speed * self.DeltaTime + if value > self.Anims[id].val then + self.Anims[id].val = self.Anims[id].val + dX + end + if value < self.Anims[id].val then + self.Anims[id].val = self.Anims[id].val - dX + end + if math.abs(value - self.Anims[id].val) < dX then + self.Anims[id].val = value + end + else + -- Prepare speed limiting + local delta = math.abs(value - self.Anims[id].val) + local max_speed = 1.5*delta / self.DeltaTime + local max_accel = 0.5 / self.DeltaTime + + -- Simulate + local dX2dT = (speed or 128)*(value - self.Anims[id].val) - self.Anims[id].V * (damping or 8.0) + if dX2dT > max_accel then dX2dT = max_accel end + if dX2dT < -max_accel then dX2dT = -max_accel end + + self.Anims[id].V = self.Anims[id].V + dX2dT * self.DeltaTime + if self.Anims[id].V > max_speed then self.Anims[id].V = max_speed end + if self.Anims[id].V < -max_speed then self.Anims[id].V = -max_speed end + + self.Anims[id].val = math.max(0,math.min(1,self.Anims[id].val + self.Anims[id].V * self.DeltaTime)) + + -- Check if value got stuck + if (math.abs(dX2dT) < 0.001) and stickyness and (self.DeltaTime > 0) then + self.Anims[id].stuck = true + end + end + return min + (max-min)*self.Anims[id].val +end +-------------------------- +-- MAIN SPAWN FUNCTIONS -- +-------------------------- +function ENT:SpawnMainModels(pos,ang,LenseNum,add) + local TLM = self.TrafficLightModels[self.LightType] + for k,v in pairs(TLM) do + if type(v) == "string" and not k:find("long") then + if IsValid(self.Models[1][add and v..add or v]) then break else + if TLM[k.."_long"] and LenseNum >= 7 then + self.Models[1][add and v..add or v] = ClientsideModel(TLM[k.."_long"],RENDERGROUP_OPAQUE) + self.LongOffset = Vector(0,0,TLM[k.."_long_pos"]) + else + self.Models[1][add and v..add or v] = ClientsideModel(v,RENDERGROUP_OPAQUE) + end + self.Models[1][add and v..add or v]:SetPos(self:LocalToWorld(pos)) + self.Models[1][add and v..add or v]:SetAngles(self:LocalToWorldAngles(ang)) + self.Models[1][add and v..add or v]:SetParent(self) + end + end + end +end + +function ENT:SpawnHeads(ID,model,pos,ang,glass,notM,add) + if not IsValid(self.Models[1][ID]) then + self.Models[1][ID] = ClientsideModel(model,RENDERGROUP_OPAQUE) + self.Models[1][ID]:SetPos(self:LocalToWorld(pos)) + self.Models[1][ID]:SetAngles(self:LocalToWorldAngles(ang)) + self.Models[1][ID]:SetParent(self) + end + if self.RN and self.RN == self.RouteNumbers.sep then + self.RN = self.RN + 1 + end + local id = self.RN + if id and not IsValid(self.Models[1]["rou"..id]) then + local rnadd = ((self.RouteNumbers[id] and self.RouteNumbers[id][1] ~= "X") and (self.RouteNumbers[id][3] and not self.RouteNumbers[id][2] and "2" or "") or "5") + self.Models[1]["rou"..id] = ClientsideModel("models/metrostroi/signals/mus/light_lampindicator"..rnadd..".mdl",RENDERGROUP_OPAQUE) + self.Models[1]["rou"..id]:SetPos(self:LocalToWorld(pos-self.RouteNumberOffset*Vector(self.Left and 0.2 or 1))) + self.Models[1]["rou"..id]:SetAngles(self:GetAngles()) + self.Models[1]["rou"..id]:SetParent(self) + if self.RouteNumbers[id] then self.RouteNumbers[id].pos = pos-self.RouteNumberOffset*Vector(self.Left and 0.2 or 1) end + self.RN = self.RN + 1 + end + if notM then + if glass then + for i,tbl in pairs(glass) do + if not IsValid(self.Models[1][tostring(ID).."_glass"..i]) then --NEWLENSES + self.Models[1][tostring(ID).."_glass"..i] = ClientsideModel(tbl[1],RENDERGROUP_OPAQUE) + self.Models[1][tostring(ID).."_glass"..i]:SetPos(self:LocalToWorld(pos+tbl[2]*Vector(add and -1 or 1,1,1))) + self.Models[1][tostring(ID).."_glass"..i]:SetAngles(self:LocalToWorldAngles(ang)) + self.Models[1][tostring(ID).."_glass"..i]:SetParent(self) + end + end + end + end +end + +function ENT:SetLight(ID,ID2,pos,ang,skin,State,Change) + if State >0 and Change and not IsValid(self.Models[3][ID..ID2]) then + self.Models[3][ID..ID2] = ClientsideModel("models/metrostroi/signals/mus/lamp_base.mdl",RENDERGROUP_OPAQUE) + self.Models[3][ID..ID2]:SetPos(self:LocalToWorld(pos)) + self.Models[3][ID..ID2]:SetAngles(self:LocalToWorldAngles(ang)) + self.Models[3][ID..ID2]:SetSkin(skin) + self.Models[3][ID..ID2]:SetParent(self) + self.Models[3][ID..ID2]:SetRenderMode(RENDERMODE_TRANSCOLOR) + self.Models[3][ID..ID2]:SetColor(Color(255,255,255,0)) + end + if IsValid(self.Models[3][ID..ID2]) then + if State > 0 and Change then + self.Models[3][ID..ID2]:SetColor(Color(255,255,255,State*255)) + elseif State == 0 then + self.Models[3][ID..ID2]:Remove() + end + end +end + +function ENT:SpawnLetter(i,model,pos,letter,double) + if double ~= false and not IsValid(self.Models[2][i]) and (self.Double or not self.Left) and (not letter:match("s[1-3]") or letter == "s3" or self.Double and self.Left) then + self.Models[2][i] = ClientsideModel(model,RENDERGROUP_OPAQUE) + self.Models[2][i]:SetAngles(self:LocalToWorldAngles(Angle(0,180,0))) + self.Models[2][i]:SetPos(self:LocalToWorld(self.BasePosition+pos)) + self.Models[2][i]:SetParent(self) + for k,v in pairs(self.Models[2][i]:GetMaterials()) do + if v:find("models/metrostroi/signals/let/let_start") then + self.Models[2][i]:SetSubMaterial(k-1,"models/metrostroi/signals/let/"..letter) + end + end + end + if not double and not IsValid(self.Models[2][i.."d"]) and (self.Double or self.Left) and (not letter:match("s[1-3]") or letter == "s3" or self.Double and not self.Left) then + self.Models[2][i.."d"] = ClientsideModel(model,RENDERGROUP_OPAQUE) + self.Models[2][i.."d"]:SetAngles(self:LocalToWorldAngles(Angle(0,180,0))) + self.Models[2][i.."d"]:SetPos(self:LocalToWorld((self.BasePosition+pos)*Vector(-1,1,1))) + self.Models[2][i.."d"]:SetParent(self) + for k,v in pairs(self.Models[2][i.."d"]:GetMaterials()) do + if v:find("models/metrostroi/signals/let/let_start") then + self.Models[2][i.."d"]:SetSubMaterial(k-1,"models/metrostroi/signals/let/"..letter) + end + end + end +end + +function ENT:OnRemove() + self:RemoveModels() +end + +function ENT:RemoveModels(final) + if self.Models and self.Models.have then + for _,v in pairs(self.Models) do if type(v) == "table" then for _,v1 in pairs(v) do v1:Remove() end end end + end + self.Models = {{},{},{}} + self.ModelsCreated = false +end + +net.Receive("metrostroi-signal", function() + local ent = net.ReadEntity() + if not IsValid(ent) then return end + ent.LightType = net.ReadInt(3) + ent.Name = net.ReadString() + --ent.Name = " BUDAPEiT"..string.gsub(ent.Name,"[A-Za-z]*","") + ent.Lenses = net.ReadString() + ent.ARSOnly = ent.Lenses == "ARSOnly" + ent.RouteNumberSetup = net.ReadString() + ent.Left = net.ReadBool() + ent.Double = net.ReadBool() + ent.DoubleL = net.ReadBool() + ent.AutostopPresent = net.ReadBool() + if not ent.ARSOnly then + ent.LensesTBL = string.Explode("-",ent.Lenses) + end + if ent.RemoveModels then ent:RemoveModels() end +end) + +function ENT:Think() + self.PrevTime = self.PrevTime or RealTime() + self.DeltaTime = (RealTime() - self.PrevTime) + self.PrevTime = RealTime() + if self:IsDormant() or Metrostroi and Metrostroi.ReloadClientside then + if not self.ReloadModels and self.ModelsCreated then + self:RemoveModels() + end + return + end + + if self.ReloadModels then + self.ReloadModels = false + self:RemoveModels() + end + + if not self.Name then + if self.sended and (CurTime() - self.sended) > 0 then + self.sended = nil + end + if not self.sended then + net.Start("metrostroi-signal") + net.WriteEntity(self) + net.SendToServer() + self.sended = CurTime() + 1.5 + end + return + end + local TLM = self.TrafficLightModels[self.LightType] + + if not self.ModelsCreated then + local ID = 0 + local ID2 = 0 + -- Create new clientside models + if not self.ARSOnly then + --SPAWN A OLD ROUTE Numbers + local rn1 = {} + local rn2 = {} + self.RouteNumbers = {} + self.SpecRouteNumbers = {} + for i=1,#self.RouteNumberSetup do + local CurRN = self.RouteNumberSetup[i] + if self.OldRouteNumberSetup[1]:find(CurRN) then + table.insert(rn1,CurRN) + elseif self.OldRouteNumberSetup[2]:find(CurRN) then + table.insert(rn2,CurRN) + elseif self.OldRouteNumberSetup[3]:find(CurRN) then + table.insert(self.SpecRouteNumbers,{CurRN,CurRN == "F"}) + end + end + for i=1,#rn1,2 do + table.insert(self.RouteNumbers,{rn1[i],rn1[i+1],true}) + end + for k,v in pairs(rn2) do + table.insert(self.RouteNumbers,{v}) + end + self.Arrow = nil + if #self.SpecRouteNumbers > 0 then + for k,v in pairs(self.SpecRouteNumbers) do + if not v[2] then + self.Arrow = k + self.SpecRouteNumbers = v + break + end + end + end + local LenseNum = self.Arrow and 1 or 0 + local OneLense = self.Arrow == nil + for k,v in ipairs(self.LensesTBL) do + if k > 1 and v:find("[RGBWYM]+") then + OneLense = false + end + for i=1,#v do + if v[i]:find("[RGBWYM]") then + LenseNum = LenseNum+1 + end + end + end + if LenseNum == 0 then OneLense = false end + local offset = self.RenderOffset[self.LightType] or Vector(0,0,0) + self.LongOffset = self.LongOffset or Vector(0,0,0) + if not self.Left or self.Double then self:SpawnMainModels(self.BasePosition,Angle(0,0,0),LenseNum) end + if self.Left or self.Double then self:SpawnMainModels(self.BasePosition*Vector(-1,1,1),Angle(0,180,0),LenseNum,self.Double and "d" or nil) end + + + if not self.RouteNumbers.sep and #self.RouteNumbers > 1 then + self.RouteNumbers.sep = 2 + elseif not self.RouteNumbers.sep and #self.RouteNumbers > 0 then + self.RouteNumbers.sep = 1 + end + if self.RouteNumbers.sep and self.RouteNumbers[self.RouteNumbers.sep][1] ~= "X" then + local id = self.RouteNumbers.sep + local rnadd = self.RouteNumbers[id][3] and not self.RouteNumbers[id][2] and "3" or "4" + self.Models[1]["rous"] = ClientsideModel("models/metrostroi/signals/mus/light_lampindicator"..rnadd..".mdl",RENDERGROUP_OPAQUE) + self.RouteNumbers[id].pos = (self.BasePosition+offset+self.LongOffset-Vector(8,0,0)) + if self.Left then self.RouteNumbers[id].pos = self.RouteNumbers[id].pos*Vector(-0.9,1,1) end + self.Models[1]["rous"]:SetPos(self:LocalToWorld(self.RouteNumbers[id].pos)) + self.Models[1]["rous"]:SetAngles(self:GetAngles()) + self.Models[1]["rous"]:SetParent(self) + end + if #self.RouteNumbers > 0 and (#self.RouteNumbers ~= 1 or not self.RouteNumbers.sep) then + self.RN = 1 + self.RouteNumberOffset = Vector(10,0,0) + offset = offset + self.RouteNumberOffset*Vector(self.Left and -1 or 1,1,1) + else + self.RouteNumberOffset = nil + self.RN = nil + end + if self.AutostopPresent then + if not IsValid(self.Models[1]["autostop"]) then + self.Models[1]["autostop"] = ClientsideModel(self.AutostopModel[1],RENDERGROUP_OPAQUE) + self.Models[1]["autostop"]:SetPos(self:LocalToWorld(self.BasePosition+self.AutostopModel[2])) + self.Models[1]["autostop"]:SetAngles(self:GetAngles()) + self.Models[1]["autostop"]:SetParent(self) + end + end + self.NamesOffset = Vector(0,0,0) + -- Create traffic light models + --if self.LightType > 2 then self.LightType = 2 end + --if self.LightType < 0 then self.LightType = 0 end + local first = true + for _,v in ipairs(self.LensesTBL) do + local data + if not self.TrafficLightModels[self.LightType][v] then + data = self.TrafficLightModels[self.LightType][#v-1] + else + if v == "M" then + self.RouteNumber = ID + end + data = self.TrafficLightModels[self.LightType][v] + end + if not data then continue end + if first then + first = false + else + offset = offset - Vector(0,0,data[1]) + end + + self.NamesOffset = self.NamesOffset + Vector(0,0,data[1]) + if not self.Left or self.Double then self:SpawnHeads(ID,data[2],self.BasePosition + offset + self.LongOffset,Angle(0,0,0),data[3] and data[3].glass,v~="M") end + if self.Left or self.Double then self:SpawnHeads((self.Double and ID.."d" or ID),(not TLM.noleft) and data[2]:Replace(".mdl","_mirror.mdl") or data[2],self.BasePosition*Vector(-1,1,1) + offset + self.LongOffset,Angle(0,0,0),data[3] and data[3].glass,v~="M",true) end + if v ~= "M" then + for i = 1,#v do + ID2 = ID2 + 1 + if not self.Signals[ID2] then self.Signals[ID2] = {} end + if not self.DoubleL then + self:SetLight(ID,ID2,self.BasePosition*Vector(self.Left and -1 or 1,1,1) + offset + self.LongOffset + data[3][i-1]*Vector(self.Left and -1 or 1,1,1),Angle(0,0,0),self.SignalConverter[v[i]]-1,0 ) + else + self:SetLight(ID,ID2,self.BasePosition*Vector( 1,1,1) + offset + self.LongOffset + data[3][i-1]*Vector(1,1,1),Angle(0,0,0),self.SignalConverter[v[i]]-1,0) + self:SetLight(ID,ID2.."x",self.BasePosition*Vector(-1,1,1) + offset + self.LongOffset + data[3][i-1]*Vector(-1,1,1),Angle(0,0,0),self.SignalConverter[v[i]]-1,0) + end + end + end + + ID = ID + 1 + end + if self.Arrow then + local id = self.Arrow + self.Models[1]["roua"] = ClientsideModel("models/metrostroi/signals/mus/light_lampindicator4.mdl",RENDERGROUP_OPAQUE) + self.SpecRouteNumbers.pos = (self.BasePosition+offset+self.LongOffset-Vector(3,0,3))*Vector(self.Left and -1 or 1,1,self.Left and 0.85 or 1)-(self.RouteNumberOffset or Vector()) + self.Models[1]["roua"]:SetPos(self:LocalToWorld(self.SpecRouteNumbers.pos)) + self.Models[1]["roua"]:SetAngles(self:LocalToWorldAngles(Angle(self.Left and -90 or 90,0,0))) + self.Models[1]["roua"]:SetParent(self) + end + offset = self.RenderOffset[self.LightType]+(OneLense and TLM.name_one or TLM.name)+(OneLense and self.RouteNumberOffset or Vector()) + if self.LightType == 1 then + offset = offset - self.NamesOffset + end + local double = self.LightType ~= 1 and string.find(self.Name,"^[A-Z][A-Z]") + if double then + if not self.Left or self.Double then + self:SpawnLetter(0,"models/metrostroi/signals/mus/sign_letter_small.mdl",offset - Vector(-1.5,0,0),(Metrostroi.LiterWarper[self.Name[0+1]] or self.Name[0+1]),true) + self:SpawnLetter(1,"models/metrostroi/signals/mus/sign_letter_small.mdl",offset - Vector(1.5,0,0),(Metrostroi.LiterWarper[self.Name[1+1]] or self.Name[1+1]),true) + end + if self.Left or self.Double then + self:SpawnLetter(0,"models/metrostroi/signals/mus/sign_letter_small.mdl",offset - Vector(1.5,0,0),(Metrostroi.LiterWarper[self.Name[0+1]] or self.Name[0+1]),false) + self:SpawnLetter(1,"models/metrostroi/signals/mus/sign_letter_small.mdl",offset - Vector(-1.5,0,0),(Metrostroi.LiterWarper[self.Name[1+1]] or self.Name[1+1]),false) + end + end + local min = 0 + for i = double and 2 or 0,#self.Name-1 do + local id = (double and i-1 or i) - min + if double and i == 2 then offset = offset + Vector(0,0,1.62) end + if self.Name[i+1] == " " then continue end + if self.Name[i+1] == "/" then min = min + 1; continue end + --if not IsValid(self.Models[2][i]) then + self:SpawnLetter(i,"models/metrostroi/signals/mus/sign_letter.mdl",offset - Vector(0,0,id*5.85),(Metrostroi.LiterWarper[self.Name[i+1]] or self.Name[i+1])) + --end + end + if self.Name and self.Name:match("(/+)$") then + local i = #self.Name + local id = (double and i-1 or i) - min + self:SpawnLetter(i,"models/metrostroi/signals/mus/sign_letter.mdl",offset - Vector(0,0,id*5.85),Format("s%d",math.min(3,#self.Name:match("(/+)$")))) + end + else + local k = "m1" + + if not IsValid(self.Models[1][k]) then + local v = TLM["m1"] + self.Models[1][k] = ClientsideModel(v,RENDERGROUP_OPAQUE) + self.Models[1][k]:SetPos(self:LocalToWorld(self.BasePosition*Vector(self.Left and -1 or 1,1,1))) + self.Models[1][k]:SetAngles(self:LocalToWorldAngles(Angle(self.Left and -1 or 1,1,1))) + self.Models[1][k]:SetParent(self) + end + end + self.Models.have = true + self.ModelsCreated = true + else + --TODO + if self.AutostopPresent then + if IsValid(self.Models[1]["autostop"]) then + self.Models[1]["autostop"]:SetPoseParameter("position",self:Animate("Autostop", self:GetNW2Bool("Autostop") and 1 or 0, 0,1, 0.4,false)) + end + end + + + self.Sig = self:GetNW2String("Signal","") + self.Num = self:GetNW2String("Number",nil) + if self.OldNum ~= self.Num then + self.NextNumWork = CurTime() + 1 + end + self.OldNum = self.Num + + if (self.NextNumWork or CurTime()) - CurTime() >= 0 then + self.Num = "" + end + if self.ARSOnly then return end + local offset = (self.RenderOffset[self.LightType] or Vector(0,0,0)) + if self.RouteNumberOffset then offset = offset + self.RouteNumberOffset*Vector(self.Left and -1 or 1,1) end + local ID = 0 + local ID2 = 0 + local first = true + for _,v in ipairs(self.LensesTBL) do + local data + if not self.TrafficLightModels[self.LightType][v] then + data = self.TrafficLightModels[self.LightType][#v-1] + else + data = self.TrafficLightModels[self.LightType][v] + end + if not data then continue end + if first then + first = false + else + offset = offset - Vector(0,0,data[1]) + end + + --self.NamesOffset = self.NamesOffset + Vector(0,0,data[1]) + if v ~= "M" then + for i = 1,#v do + ID2 = ID2 + 1 + if tonumber(self.Sig[ID2]) and self.Signals[ID2].RealState ~= (tonumber(self.Sig[ID2]) > 0) then + self.Signals[ID2].RealState = tonumber(self.Sig[ID2]) > 0 + self.Signals[ID2].Stop = CurTime() + 0.5 + end + if self.Signals[ID2].Stop and CurTime()-self.Signals[ID2].Stop > 0 then + self.Signals[ID2].Stop = nil + end + local State = self:Animate(ID.."/"..i, ((tonumber(self.Sig[ID2]) == 1 or (tonumber(self.Sig[ID2]) == 2 and (RealTime() % 1.2 > 0.4))) and not self.Signals[ID2].Stop) and 1 or 0, 0,1, 128) + if not IsValid(self.Models[3][ID..ID2]) and State > 0 then self.Signals[ID2].State = nil end + if not self.DoubleL then + self:SetLight(ID,ID2,self.BasePosition*Vector(self.Left and -1 or 1,1,1) + offset + self.LongOffset + data[3][i-1]*Vector(self.Left and -1 or 1,1,1),Angle(0,0,0),self.SignalConverter[v[i]]-1,State,self.Signals[ID2].State ~= State) + else + self:SetLight(ID,ID2,self.BasePosition*Vector( 1,1,1) + offset + self.LongOffset + data[3][i-1]*Vector(1,1,1),Angle(0,0,0),self.SignalConverter[v[i]]-1,State,self.Signals[ID2].State ~= State) + self:SetLight(ID,ID2.."x",self.BasePosition*Vector(-1,1,1) + offset + self.LongOffset + data[3][i-1]*Vector(-1,1,1),Angle(0,0,0),self.SignalConverter[v[i]]-1,State,self.Signals[ID2].State ~= State) + end + self.Signals[ID2].State = State + end + else + if Metrostroi.RoutePointer[self.Num[1]] and IsValid(self.Models[1][self.RouteNumber]) then self.Models[1][self.RouteNumber]:SetSkin(Metrostroi.RoutePointer[self.Num[1]]) end + end + + ID = ID + 1 + end + for k,v in pairs(self.RouteNumbers) do + if k == "sep" then continue end + local State1 = self:Animate("rou1"..k,self.Num:find(v[1]) and 1 or 0, 0,1, 256) + local State2 + --if v[3] then + if v[2] then State2 = self:Animate("rou2"..k,self.Num:find(v[2])and 1 or 0, 0,1, 256) end + if not IsValid(self.Models[3]["rou1"..k]) and State1 > 0 then + self.Models[3]["rou1"..k] = ClientsideModel("models/metrostroi/signals/mus/light_lampindicator_"..(v[3] and "numb" or "lamp")..".mdl",RENDERGROUP_OPAQUE) + self.Models[3]["rou1"..k]:SetPos(self:LocalToWorld(v.pos + self.OldRouteNumberSetup[4])) + self.Models[3]["rou1"..k]:SetAngles(self:GetAngles()) + self.Models[3]["rou1"..k]:SetParent(self) + self.Models[3]["rou1"..k]:SetSkin(v[3] and self.OldRouteNumberSetup[5][v[1]] or self.OldRouteNumberSetup[6][v[1]] or tonumber(v[1])-1) + self.Models[3]["rou1"..k]:SetRenderMode(RENDERMODE_TRANSCOLOR) + self.Models[3]["rou1"..k]:SetColor(Color(255,255,255,0)) + end + if IsValid(self.Models[3]["rou1"..k]) then + if State1 > 0 then + self.Models[3]["rou1"..k]:SetColor(Color(255,255,255,State1*255)) + elseif State1 == 0 then + self.Models[3]["rou1"..k]:Remove() + end + end + if not IsValid(self.Models[3]["rou2"..k]) and v[3] and v[2] and State2 > 0 then + self.Models[3]["rou2"..k] = ClientsideModel("models/metrostroi/signals/mus/light_lampindicator_numb.mdl",RENDERGROUP_OPAQUE) + self.Models[3]["rou2"..k]:SetPos(self:LocalToWorld(v.pos + self.OldRouteNumberSetup[4] + Vector(0,0,7.2))) + self.Models[3]["rou2"..k]:SetAngles(self:GetAngles()) + self.Models[3]["rou2"..k]:SetParent(self) + self.Models[3]["rou2"..k]:SetSkin(self.OldRouteNumberSetup[5][v[2]] or tonumber(v[2])-1) + self.Models[3]["rou2"..k]:SetRenderMode(RENDERMODE_TRANSCOLOR) + self.Models[3]["rou2"..k]:SetColor(Color(255,255,255,0)) + end + if IsValid(self.Models[3]["rou2"..k]) then + if State2 > 0 then + self.Models[3]["rou2"..k]:SetColor(Color(255,255,255,State2*255)) + elseif State2 == 0 then + self.Models[3]["rou2"..k]:Remove() + end + end + end + if self.Arrow then + local State = self:Animate("roua",self.Num:find(self.SpecRouteNumbers[1]) and 1 or 0, 0,1, 256) + if not IsValid(self.Models[3]["roua"]) and State > 0 then + self.Models[3]["roua"] = ClientsideModel("models/metrostroi/signals/mus/light_lampindicator_lamp.mdl",RENDERGROUP_OPAQUE) + self.SpecRouteNumbers.pos = (self.BasePosition+offset-Vector(3,-1,3))-self.RouteNumberOffset+ Vector(10.5,0,-6) + if self.Left then self.SpecRouteNumbers.pos = self.SpecRouteNumbers.pos*Vector(-0.8,1,0.94) end + self.Models[3]["roua"]:SetPos(self.Models[1]["roua"]:LocalToWorld(Vector(6.2,0,24.5))) + self.Models[3]["roua"]:SetAngles(self.Models[1]["roua"]:LocalToWorldAngles(Angle(180,0,0))) + self.Models[3]["roua"]:SetParent(self) + if self.Left then + if self.Num[1] == "L" then + self.Models[3]["roua"]:SetSkin(self.OldRouteNumberSetup[6]["R"] or 0) + else + self.Models[3]["roua"]:SetSkin(self.OldRouteNumberSetup[6]["L"] or 0) + end + else + self.Models[3]["roua"]:SetSkin(self.OldRouteNumberSetup[6][self.Num[1]] or 0) + end + self.Models[3]["roua"]:SetRenderMode(RENDERMODE_TRANSCOLOR) + self.Models[3]["roua"]:SetColor(Color(255,255,255,0)) + end + if IsValid(self.Models[3]["roua"]) then + if State > 0 then + self.Models[3]["roua"]:SetColor(Color(255,255,255,State*255)) + elseif State == 0 then + self.Models[3]["roua"]:Remove() + end + end + end + --self.SpecRouteNumbers + end +end + +function ENT:Draw() + -- Draw model + self:DrawModel() +end +local debug = GetConVar("metrostroi_drawsignaldebug") + +local ars = { + {"275 Hz", "0 KM/H"}, + {"N/A Hz", "No frequency"}, + {"275-N/A", "Absolute stop"}, + nil, + {"225 Hz", "40 KM/H"}, + nil, + {"175 Hz", "60 KM/H"}, + {"125 Hz", "70 KM/H"}, + {"75 Hz", "80 KM/H"}, +} +local function enableDebug() + if debug:GetBool() then + hook.Add("PostDrawTranslucentRenderables","MetrostroiSignalDebug",function(bDrawingDepth,bDrawingSkybox) + for _,ent in pairs(ents.FindByClass("gmod_track_signal")) do + if bDrawingDepth and LocalPlayer():GetPos():Distance(sig:GetPos()) < 384 then + local pos = sig:LocalToWorld(Vector(48,0,150)) + local ang = sig:LocalToWorldAngles(Angle(0,180,90)) + cam.Start3D2D(pos, ang, 0.25) + + if sig:GetNW2Bool("Debug",false) then + surface.SetDrawColor(sig.ARSOnly and 255 or 125, 125, 0, 255) + surface.DrawRect(0, -60, 364, 210) + if not sig.ARSOnly then + surface.DrawRect(0, 155, 240, 170) + surface.DrawRect(0, 330, 240, 190) + surface.SetDrawColor(0,0,0, 255) + surface.DrawRect(245, 155, 119, 365) + else + surface.DrawRect(0, 155, 364, 150) + surface.DrawRect(0, 310, 364, 190) + end + + if sig.Name then + draw.DrawText(Format("Joint main info (%d)",sig:EntIndex()),"Trebuchet24",5,-60,Color(200,0,0,255)) + draw.DrawText("Signal name: "..sig.Name,"Trebuchet24", 15, -40,Color(0,0,0,255)) + draw.DrawText("TrackID: "..sig:GetNW2Int("PosID",0),"Trebuchet24", 25, -20,Color(0,0,0,255)) + draw.DrawText(Format("PosX: %.02f",sig:GetNW2Float("Pos",0)),"Trebuchet24", 135, -20,Color(0,0,0,255)) + draw.DrawText(Format("NextSignalName: %s",sig:GetNW2String("NextSignalName","N/A")),"Trebuchet24", 15, 0,Color(0,0,0,255)) + draw.DrawText(Format("TrackID: %s",sig:GetNW2Int("NextPosID",0)),"Trebuchet24", 25, 20,Color(0,0,0,255)) + draw.DrawText(Format("PosX: %.02f",sig:GetNW2Float("NextPos",0)),"Trebuchet24", 135, 20,Color(0,0,0,255)) + draw.DrawText(Format("Dist: %.02f",sig:GetNW2Float("DistanceToNext",0)),"Trebuchet24", 15, 40,Color(0,0,0,255)) + draw.DrawText(Format("PrevSignalName: %s",sig:GetNW2String("PrevSignalName","N/A")),"Trebuchet24", 15, 60,Color(0,0,0,255)) + draw.DrawText(Format("TrackID: %s",sig:GetNW2Int("PrevPosID",0)),"Trebuchet24", 25, 80,Color(0,0,0,255)) + draw.DrawText(Format("PosX: %.02f",sig:GetNW2Float("PrevPos",0)),"Trebuchet24", 135, 80,Color(0,0,0,255)) + draw.DrawText(Format("DistPrev: %.02f",sig:GetNW2Float("DistanceToPrev",0)),"Trebuchet24", 15, 100,Color(0,0,0,255)) + draw.DrawText(Format("Current route: %d",sig:GetNW2Int("CurrentRoute",-1)),"Trebuchet24", 15, 120,Color(0,0,0,255)) + + draw.DrawText("AB info","Trebuchet24",5,160,Color(200,0,0,255)) + draw.DrawText(Format("Occupied: %s",sig:GetNW2Bool("Occupied",false) and "Y" or "N"),"Trebuchet24",5,180,Color(0,0,0,255)) + draw.DrawText(Format("Linked to controller: %s",sig:GetNW2Bool("LinkedToController",false) and "Y" or "N"),"Trebuchet24",5,200,Color(0,0,0,255)) + draw.DrawText(Format("Num: %d",sig:GetNW2Int("ControllersNumber",0)),"Trebuchet24",10,220,Color(0,0,0,255)) + draw.DrawText(Format("Controller logic: %s",sig:GetNW2Bool("BlockedByController",false) and "Y" or "N"),"Trebuchet24",5,240,Color(0,0,0,255)) + draw.DrawText(Format("Autostop: %s",not sig.ARSOnly and sig.AutostopPresent and (sig:GetNW2Bool("Autostop") and "Up" or "Down") or "No present"),"Trebuchet24",5,260,Color(0,0,0,255)) + draw.DrawText(Format("2/6: %s",sig:GetNW2Bool("2/6",false) and "Y" or "N"),"Trebuchet24",5,280,Color(0,0,0,255)) + draw.DrawText(Format("FreeBS: %d",sig:GetNW2Int("FreeBS")),"Trebuchet24",5,300,Color(0,0,0,255)) + + draw.DrawText("ARS info","Trebuchet24",5,335,Color(200,0,0,255)) + local num = 0 + for i,tbl in pairs(ars) do + if not tbl then continue end + if sig:GetNW2Bool("CurrentARS"..(i-1),false) then + draw.DrawText(Format("(% s)",tbl[1]),"Trebuchet24",5,355+num*20,Color(0,100,0,255)) + draw.DrawText(Format("%s",tbl[2]),"Trebuchet24",105,355+num*20,Color(0,100,0,255)) + else + draw.DrawText(Format("(% s)",tbl[1]),"Trebuchet24",5,355+num*20,Color(0,0,0,255)) + draw.DrawText(Format("%s",tbl[2]),"Trebuchet24",105,355+num*20,Color(0,0,0,255)) + end + num = num+1 + end + if sig:GetNW2Bool("CurrentARS325",false) or sig:GetNW2Bool("CurrentARS325_2",false) then + draw.DrawText("(325 Hz)","Trebuchet24",5,355+num*20,Color(0,100,0,255)) + draw.DrawText(Format("LN:%s Apr0:%s",sig:GetNW2Bool("CurrentARS325",false) and "Y" or "N",sig:GetNW2Bool("CurrentARS325_2",false) and "Y" or "N"),"Trebuchet24",105,355+num*20,Color(0,100,0,255)) + else + draw.DrawText("(325 Hz)","Trebuchet24",5,355+num*20,Color(0,0,0,255)) + draw.DrawText(Format("LN:%s Apr0:%s",sig:GetNW2Bool("CurrentARS325",false) and "Y" or "N",sig:GetNW2Bool("CurrentARS325_2",false) and "Y" or "N"),"Trebuchet24",105,355+num*20,Color(0,0,0,255)) + end + + if not sig.ARSOnly then + draw.DrawText("Signal info","Trebuchet24",250,160,Color(200,0,0,255)) + local ID = 0 + local ID2 = 0 + local first = true + for _,v in ipairs(sig.LensesTBL) do + local data + if not sig.TrafficLightModels[sig.LightType][v] then + data = sig.TrafficLightModels[sig.LightType][#v-1] + else + data = sig.TrafficLightModels[sig.LightType][v] + end + if not data then continue end + + --sig.NamesOffset = sig.NamesOffset + Vector(0,0,data[1]) + local cols = { + R = Color(200,0,0), + Y = Color(200,200,0), + G = Color(0,200,0), + W = Color(200,200,200), + B = Color(0,0,200), + } + if v ~= "M" then + for i = 1,#v do + ID2 = ID2 + 1 + local State = tonumber(sig.Sig[ID2]) == 1 and "X" or (tonumber(sig.Sig[ID2]) == 2 and (RealTime() % 1.2 > 0.4)) and "B" or false + draw.DrawText(Format(v[i],sig:EntIndex()),"Trebuchet24",250,160 + ID*20 + ID2*20,cols[v[i]]) + if State then + draw.DrawText(State,"Trebuchet24",280,160 + ID*20 + ID2*20,cols[v[i]]) + end + end + else + ID2 = ID2 + 1 + draw.DrawText("M","Trebuchet24",250,160 + ID*20 + ID2*20,Color(200,200,200)) + draw.DrawText(sig.Num or "none","Trebuchet24",280,160 + ID*20 + ID2*20,Color(200,200,200)) + + --if Metrostroi.RoutePointer[sig.Num[1]] then sig.Models[1][sig.RouteNumber]:SetSkin(Metrostroi.RoutePointer[sig.Num[1]]) end + end + + ID = ID + 1 + end + end + else + draw.DrawText("No data...","Trebuchet24",5,0,Color(0,0,0,255)) + end + else + surface.SetDrawColor(sig.ARSOnly and 255 or 125, 125, 0, 255) + surface.DrawRect(0, 0, 364, 25) + draw.DrawText("Debug disabled...","Trebuchet24",5,0,Color(0,0,0,255)) + end + cam.End3D2D() + end + end + end) + else + hook.Remove("PostDrawTranslucentRenderables","MetrostroiSignalDebug") + end +end +hook.Remove("PostDrawTranslucentRenderables","MetrostroiSignalDebug") +cvars.AddChangeCallback( "metrostroi_drawsignaldebug", enableDebug) +enableDebug() + +Metrostroi.OptimisationPatch() \ No newline at end of file diff --git a/lua/entities/gmod_track_signal/init.lua b/lua/entities/gmod_track_signal/init.lua new file mode 100644 index 0000000..e58d90f --- /dev/null +++ b/lua/entities/gmod_track_signal/init.lua @@ -0,0 +1,724 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") +util.AddNetworkString "metrostroi-signal" +util.AddNetworkString "metrostroi-signal-state" +function ENT:SetSprite(index,active,model,scale,brightness,pos,color) + if active and self.Sprites[index] then return end + if not active and not self.Sprites[index] then return end + if not active and self.Sprites[index] then + SafeRemoveEntity(self.Sprites[index]) + self.Sprites[index] = nil + end + + if active then + local sprite = ents.Create("env_sprite") + sprite:SetParent(self) + sprite:SetLocalPos(pos) + sprite:SetLocalAngles(self:GetAngles()) + + -- Set parameters + sprite:SetKeyValue("rendercolor", + Format("%i %i %i", + color.r*brightness, + color.g*brightness, + color.b*brightness + ) + ) + sprite:SetKeyValue("rendermode", 9) -- 9: WGlow, 3: Glow + sprite:SetKeyValue("renderfx", 14) + sprite:SetKeyValue("model", model) + sprite:SetKeyValue("scale", scale) + sprite:SetKeyValue("spawnflags", 1) + + -- Turn sprite on + sprite:Spawn() + self.Sprites[index] = sprite + end +end +function ENT:OpenRoute(route) + self.LastOpenedRoute = route + if self.Routes[route].Manual then self.Routes[route].IsOpened = true end + if not self.Routes[route].Switches then return end + local Switches = string.Explode(",",self.Routes[route].Switches) + + for i1 =1, #Switches do + if not Switches[i1] or Switches[i1] == "" then continue end + + local SwitchState = Switches[i1]:sub(-1,-1) == "-" + local SwitchName = Switches[i1]:sub(1,-2) + --if not self.Switches[SwitchName] then self.Switches[SwitchName] = Metrostroi.GetSwitchByName(SwitchName) end + if not Metrostroi.GetSwitchByName(SwitchName) then print(self.Name,"switch not found") continue end + --If route go right from this switch - add it + if SwitchState ~= (Metrostroi.GetSwitchByName(SwitchName):GetSignal() ~= 0) then + Metrostroi.GetSwitchByName(SwitchName):SendSignal(SwitchState and "alt" or "main",nil,true) + --RunConsoleCommand("say","changing",SwitchName) + end + end +end + +function ENT:CloseRoute(route) + if self.Routes[route].Manual then self.Routes[route].IsOpened = false end + if not self.Routes[route].Switches then return end + + local Switches = string.Explode(",",self.Routes[route].Switches) + for i1 =1, #Switches do + if not Switches[i1] or Switches[i1] == "" then continue end + + --local SwitchState = Switches[i1]:sub(-1,-1) == "-" + local SwitchName = Switches[i1]:sub(1,-2) + --if not self.Switches[SwitchName] then self.Switches[SwitchName] = Metrostroi.GetSwitchByName(SwitchName) end + if not Metrostroi.GetSwitchByName(SwitchName) then print(self.Name,"switch not found") continue end + --If route go right from this switch - add it + if SwitchState ~= (Metrostroi.GetSwitchByName(SwitchName):GetSignal() ~= 0) then + Metrostroi.GetSwitchByName(SwitchName):SendSignal("main",nil,true) + --RunConsoleCommand("say","changing",SwitchName) + end + end +end + +function MSignalSayHook(ply, comm, fromULX) + if ulx and not fromULX then return end + for i,sig in pairs(ents.FindByClass("gmod_track_signal")) do + local comm = comm + if comm:sub(1,8) == "!sactiv " then + comm = comm:sub(9,-1):upper() + + comm = string.Explode(":",comm) + if sig.Routes then + for k,v in pairs(sig.Routes) do + if (v.RouteName and v.RouteName:upper() == comm[1] or comm[1] == "*") and v.Emer then + if sig.LastOpenedRoute and k ~= sig.LastOpenedRoute then sig:CloseRoute(sig.LastOpenedRoute) end + v.IsOpened = true + break + end + end + end + elseif comm:sub(1,10) == "!sdeactiv " then + comm = comm:sub(11,-1):upper() + + comm = string.Explode(":",comm) + if sig.Routes then + for k,v in pairs(sig.Routes) do + if (v.RouteName and v.RouteName:upper() == comm[1] or comm[1] == "*") and v.Emer then + v.IsOpened = false + break + end + end + end + elseif comm:sub(1,8) == "!sclose " then + comm = comm:sub(9,-1):upper() + + comm = string.Explode(":",comm) + if comm[1] == sig.Name then + if sig.Routes[1] and sig.Routes[1].Manual then + sig:CloseRoute(1) + else + if not sig.Close then + sig.Close = true + end + if sig.InvationSignal then + sig.InvationSignal = false + end + if (sig.LastOpenedRoute and sig.LastOpenedRoute == 1) or sig.Routes[1].Repeater then + sig:CloseRoute(1) + else + sig:OpenRoute(1) + end + end + elseif sig.Routes then + for k,v in pairs(sig.Routes) do + if v.RouteName and v.RouteName:upper() == comm[1] then + if sig.LastOpenedRoute and k ~= sig.LastOpenedRoute then sig:CloseRoute(sig.LastOpenedRoute) end + sig:CloseRoute(k) + end + end + end + elseif comm:sub(1,7) == "!sopen " then + comm = comm:sub(8,-1):upper() + comm = string.Explode(":",comm) + if comm[1] == sig.Name then + if comm[2] then + if sig.NextSignals[comm[2]] then + local Route + for k,v in pairs(sig.Routes) do + if v.NextSignal == comm[2] then Route = k break end + end + sig:OpenRoute(Route) + end + else + if sig.Routes[1] and sig.Routes[1].Manual then + sig:OpenRoute(1) + elseif sig.Close then + sig.Close = false + end + end + elseif sig.Routes then + for k,v in pairs(sig.Routes) do + if v.RouteName and v.RouteName:upper() == comm[1] then + if sig.LastOpenedRoute and k ~= sig.LastOpenedRoute then sig:CloseRoute(sig.LastOpenedRoute) end + sig:OpenRoute(k) + end + end + end + elseif comm:sub(1,7) == "!sopps " then + comm = comm:sub(8,-1):upper() + comm = string.Explode(":",comm) + if comm[1] == sig.Name then + sig.InvationSignal = true + end + elseif comm:sub(1,7) == "!sclps " then + comm = comm:sub(8,-1):upper() + comm = string.Explode(":",comm) + if comm[1] == sig.Name then + sig.InvationSignal = false + end + end + end +end +hook.Add("PlayerSay","metrostroi-signal-say", function(ply, comm) MSignalSayHook(ply,comm) end) +function ENT:Initialize() + self:SetModel("models/metrostroi/signals/mus/ars_box.mdl") + self.Sprites = {} + self.Sig = "" + self.FreeBS = 1 + self.OldBSState = 1 + self.OutputARS = 1 + self.EnableDelay = {} + self.PostInitalized = true + + self.Controllers = nil +end + +function ENT:PreInitalize() + self.AutostopOverride = nil + if not self.Routes or self.Routes[1].NextSignal == "" then + self.AutostopOverride = true + end + if self.Sprites then + for k,v in pairs(self.Sprites) do + SafeRemoveEntity(v) + self.Sprites[k] = nil + end + end + self.NextSignals = {} + --self.Switches = {} + for k,v in ipairs(self.Routes) do + if v.NextSignal == "" then + self.NextSignals[""] = nil--self + elseif v.NextSignal == "*" then + else + if not v.NextSignal then + ErrorNoHalt(Format("Metrostroi: No next signal name in signal %s! Check it now!\n", self.Name)) + self.AutostopOverride = true + else + self.NextSignals[v.NextSignal] = Metrostroi.GetSignalByName(v.NextSignal) + if not self.NextSignals[v.NextSignal] then + print(Format("Metrostroi: Signal %s, signal not found(%s)", self.Name, v.NextSignal)) + self.AutostopOverride = true + end + end + end + end + self.MU = false + for k,v in ipairs(self.Lenses) do + if v:find("M") then self.MU = true break end + end +end +function ENT:PostInitalize() + if not self.Routes or #self.Routes == 0 then print(self, "NEED SETUP") return end + for k,v in ipairs(self.Routes) do + if v.NextSignal == "*" and self.TrackPosition then + local sig + local cursig = self + while true do + cursig = Metrostroi.GetARSJoint(cursig.TrackPosition.node1,cursig.TrackPosition.x,cursig.TrackDir,false) + if not IsValid(cursig) then break end + sig = cursig + if not cursig.PassOcc then break end + end + if IsValid(sig) then + self.NextSignals["*"] = sig + else + self.AutostopOverride = true + print(Format("Metrostroi: Signal %s, cant automaticly find signal", self.Name)) + end + end + end + local pos = self.TrackPosition + local node = pos and pos.node1 or nil + self.Node = node + + self.SwitchesFunction = {} + self.Switches = {} + for i = 1,#self.Routes do + if not self.Routes[i].Switches then continue end + + local Switches = string.Explode(",",self.Routes[i].Switches) + local SwitchesTbl = {} + --local GoodSwitches = true + --Checking all route switches + for i1 =1, #Switches do + if not Switches[i1] or Switches[i1] == "" then continue end + + local SwitchState = Switches[i1]:sub(-1,-1) == "-" + local SwitchName = Switches[i1]:sub(1,-2) + if not Metrostroi.GetSwitchByName(SwitchName) then + print(Format("Metrostroi: %s, switch not found(%s)", self.Name, SwitchName)) + continue + end + --If route go right from this switch - add it + table.insert(SwitchesTbl,{n = SwitchName,s = SwitchState}) + end + self.Switches[i] = SwitchesTbl + if #SwitchesTbl == 0 then continue end + self.SwitchesFunction[i] = function() + local GoodSwitches = true + for i1 = 1,#self.Switches[i] do + if not self.Switches[i][i1] or not IsValid(Metrostroi.GetSwitchByName(self.Switches[i][i1].n)) then continue end + if self.Switches[i][i1].s ~= (Metrostroi.GetSwitchByName(self.Switches[i][i1].n):GetSignal() > 0) then + GoodSwitches = false + break + end + end + return GoodSwitches + end + end + for k,v in pairs(self.Routes) do + if not v.Lights then continue end + v.LightsExploded = string.Explode("-",v.Lights) + end + if not self.RouteNumberSetup or not self.RouteNumberSetup:find("W") then + self.GoodInvationSignal = 0 + local index = 1 + for k,v in ipairs(self.Lenses) do + if v ~= "M" then + for i = 1,#v do + if v[i] == "W" then self.GoodInvationSignal = index end + index = index + 1 + end + end + end + else + self.GoodInvationSignal = -1 + end + if self.Left then + self:SetModel("models/metrostroi/signals/mus/ars_box_mittor.mdl") + else + self:SetModel("models/metrostroi/signals/mus/ars_box.mdl") + end + self.PostInitalized = false + +end + +function ENT:OnRemove() + Metrostroi.UpdateSignalEntities() + Metrostroi.PostSignalInitialize() +end + +function ENT:GetARS(ARSID,Force1_5,Force2_6) + if self.OverrideTrackOccupied then return ARSID == 2 end + if not self.ARSSpeedLimit then return false end + local nxt = self.ARSNextSpeedLimit == 2 and 0 or self.ARSNextSpeedLimit ~= 1 and self.ARSNextSpeedLimit + return self.ARSSpeedLimit == ARSID or ((self.TwoToSix and not Force1_5 or Force2_6) and nxt and nxt == ARSID and self.ARSSpeedLimit > nxt) +end +--[[ function ENT:GetRS() + if not self.TwoToSix or not self.ARSSpeedLimit then return false end + --if self.ARSSpeedLimit == 1 or self.ARSSpeedLimit == 2 then return false end + if self.ARSSpeedLimit <= 2 then return false end + return self.OverrideTrackOccupied or self.ARSSpeedLimit == 0 or (not self.ARSNextSpeedLimit or self.ARSNextSpeedLimit == 1) or self.ARSSpeedLimit <= self.ARSNextSpeedLimit +end--]] + +function ENT:GetRS() + if self.OverrideTrackOccupied or not self.TwoToSix or not self.ARSSpeedLimit then return false end + --if self.ARSSpeedLimit == 1 or self.ARSSpeedLimit == 2 then return false end + if self.ARSSpeedLimit ~= 0 and self.ARSSpeedLimit== 2 then return false end + return (self.ARSSpeedLimit > 4 or self.ARSSpeedLimit == 4 and self.Approve0) and (not self.ARSNextSpeedLimit or self.ARSNextSpeedLimit >= self.ARSSpeedLimit) +end + +function ENT:Get325HzAproove0() + if self.OverrideTrackOccupied or not self.ARSSpeedLimit then return false end + return self.ARSSpeedLimit == 0 and self.Approve0 +end + +function ENT:GetMaxARS() + local ARSCodes = self.Routes[1].ARSCodes + if not self.Routes[1] or not ARSCodes then return 1 end + return tonumber(ARSCodes[#ARSCodes]) or 1 +end +function ENT:GetMaxARSNext() + local Routes = self.NextSignalLink and self.NextSignalLink.Routes or self.Routes + local ARSCodes = Routes[1] and Routes[1].ARSCodes + local code = tonumber(ARSCodes[#ARSCodes]) or 1 + local This = self:GetMaxARS() + if not ARSCodes then return This end + if code > This then return This end + --if not ARSCodes then return 1 end + return tonumber(ARSCodes[#ARSCodes]) or 1 +end + +function ENT:CheckOccupation() + --print(self.FoundedAll) + --if not self.FoundedAll then return end + if not self.Close and not self.KGU then --not self.OverrideTrackOccupied and + if self.Node and self.TrackPosition then + self.Occupied,self.OccupiedBy,self.OccupiedByNow = Metrostroi.IsTrackOccupied(self.Node, self.TrackPosition.x,self.TrackPosition.forward,self.ARSOnly and "ars" or "light", self) + end + if self.Routes[self.Route] and self.Routes[self.Route].Manual then + self.Occupied = self.Occupied or not self.Routes[self.Route].IsOpened + end + if self.OccupiedByNowOld ~= self.OccupiedByNow then + self.InvationSignal = false + self.OccupiedByNowOld = self.OccupiedByNow + end + else + self.NextSignalLink = nil + self.Occupied = self.Close or self.KGU --self.OverrideTrackOccupied or + end +end +function ENT:ARSLogic(tim) + --print(self.FoundedAll) + --if not self.FoundedAll then return end + if not self.Routes or not self.NextSignals then return end + -- Check track occuping + if not self.Routes[self.Route or 1].Repeater then + self:CheckOccupation() + if self.Occupied then + if self.Routes[self.Route or 1].Manual then self.Routes[self.Route or 1].IsOpened = false end + end + if self.Occupied or not self.NextSignalLink or not self.NextSignalLink.FreeBS then + self.FreeBS = 0 + else + self.FreeBS = math.min(10,self.NextSignalLink.FreeBS + 1) + end + if self.FreeBS - (self.OldBSState or self.FreeBS) > 1 then + local Free = self.FreeBS + timer.Simple(tim+0.1,function() + if not IsValid(self) then return end + if self.NextSignalLink and self.NextSignalLink.FreeBS + 1 - self.OldBSState > 1 then + self.FreeBS = Free + self.OldBSState = Free + end + end) + self.FreeBS = self.OldBSState + end + self.OldBSState = self.FreeBS + if self.FreeBS == 1 then + self.OccupiedBy = self + elseif self.FreeBS > 1 then + self.AutostopEnt = nil + end + if self.OccupiedByNow ~= self.AutostopEnt and self.AutostopEnt ~= self.CurrentAutostopEnt then + self.AutostopEnt = nil + end + end + if self.OldRoute ~= self.Route then + self.InvationSignal = false + self.OldRoute = self.Route + end + --Removing NSL + self.NextSignalLink = nil + --Set the first route, if no switches in route or no switches + --or not self.Switches + if #self.Routes == 1 and (self.Routes[1].Switches == "" or not self.Routes[1].Switches) then + self.NextSignalLink = self.NextSignals[self.Routes[1].NextSignal] + self.Route = 1 + else + local route + --Finding right route + for i = 1,#self.Routes do + + --If all switches right - get this route! + if self.SwitchesFunction[i] and self.SwitchesFunction[i]() and (not self.Routes[i].Manual and not self.Routes[i].Emer or self.Routes[i].IsOpened) then + --if self.Route ~= i then + route = i + --self.NextSignalLink = nil + --end + elseif not self.SwitchesFunction[i] and (not self.Routes[i].Manual and not self.Routes[i].Emer or self.Routes[i].IsOpened) then + route = i + --self.NextSignalLink = nil + end + end + if self.Route ~= route and (not self.Routes[route] or not self.Routes[route].Emer) then + self.Route = route + self.NextSignalLink = false + else + if self.Route ~= route then self.Route = route end + self.NextSignalLink = self.Routes[route] and self.NextSignals[self.Routes[route].NextSignal] + end + end + if self.NextSignalLink == nil then + if self.Occupied then + self.NextSignalLink = self + self.FreeBS = 0 + --self.Route = 1 + end + end + if self.Routes[self.Route] then + if self.Routes[self.Route or 1].Repeater then + self.RealName = IsValid(self.NextSignalLink) and self.NextSignalLink.RealName or self.Name + else + self.RealName = self.Name + end + if self.Routes[self.Route or 1].Repeater then + self.RealName = IsValid(self.NextSignalLink) and self.NextSignalLink.Name or self.Name + self.ARSSpeedLimit = IsValid(self.NextSignalLink) and self.NextSignalLink.ARSSpeedLimit or 1 + self.ARSNextSpeedLimit = IsValid(self.NextSignalLink) and self.NextSignalLink.ARSNextSpeedLimit or 1 + self.FreeBS = IsValid(self.NextSignalLink) and self.NextSignalLink.FreeBS or 0 + elseif self.Routes[self.Route].ARSCodes then + local ARSCodes = self.Routes[self.Route].ARSCodes + self.ARSNextSpeedLimit = IsValid(self.NextSignalLink) and self.NextSignalLink.ARSSpeedLimit or tonumber(ARSCodes[1]) + self.ARSSpeedLimit = tonumber(ARSCodes[math.min(#ARSCodes, self.FreeBS+1)]) or 0 + if self.InvationSignal and self.ARSSpeedLimit == 2 then self.ARSSpeedLimit = 1 end + end + end + if self.NextSignalLink ~= false and (self.Occupied or not self.NextSignalLink or not self.NextSignalLink.FreeBS) then + if self.Routes[self.Route or 1].Manual then self.Routes[self.Route or 1].IsOpened = false end + end +end + +function ENT:Think() + if self.PostInitalized then return end + --DEBUG + if Metrostroi.SignalDebugCV:GetBool() then + self:SetNW2Bool("Debug",true) + local next = self.NextSignalLink + local pos = self.TrackPosition + local prev = self.PrevSig + if next then + next.PrevSig = self + local nextpos = self.NextSignalLink.TrackPosition + self:SetNW2String("NextSignalName",next.Name) + if pos and nextpos then + self:SetNW2Float("DistanceToNext",nextpos.x - pos.x) + else + self:SetNW2Float("DistanceToNext",0) + end + self:SetNW2Int("NextPosID",nextpos and nextpos.path and nextpos.path.id or 0) + self:SetNW2Float("NextPos",nextpos and nextpos.x or 0) + else + self:SetNW2String("NextSignalName","N/A") + self:SetNW2Float("DistanceToNext",0) + self:SetNW2Float("NextPos",0) + self:SetNW2Float("NextPosID",0) + end + if prev then + local prevpos = prev.TrackPosition + if pos and prevpos then + self:SetNW2Float("DistanceToPrev",-prevpos.x + pos.x) + else + self:SetNW2Float("DistanceToPrev",0) + end + self:SetNW2String("PrevSignalName",self.PrevSig.Name) + self:SetNW2Int("PrevPosID",prevpos and prevpos.path and prevpos.path.id or 0) + self:SetNW2Float("PrevPos",prevpos and prevpos.x or 0) + else + self:SetNW2String("PrevSignalName","N/A") + self:SetNW2Int("PrevPosID",0) + self:SetNW2Float("PrevPos",0) + end + self:SetNW2Float("Pos",pos and pos.x or 0) + self:SetNW2Int("PosID",pos and pos.path and pos.path.id or 0) + + self:SetNW2Bool("CurrentRoute",self.Route or -1) + self:SetNW2Bool("Occupied",self.Occupied) + self:SetNW2Bool("2/6",self.TwoToSix) + self:SetNW2Int("FreeBS",self.FreeBS) + self:SetNW2Bool("LinkedToController",self.Controllers ~= nil) + self:SetNW2Int("ControllersNumber",self.Controllers ~= nil and #self.Controllers or -1) + self:SetNW2Bool("BlockedByController",self.ControllerLogic) + for i=0,8 do + if i==3 or i==5 then continue end + self:SetNW2Bool("CurrentARS"..i,self:GetARS(i)) + end + self:SetNW2Bool("CurrentARS325",self:GetRS()) + self:SetNW2Bool("CurrentARS325_2",self:Get325HzAproove0()) + end + if not self.ControllerLogic then + if not self.Routes or #self.Routes == 0 then + ErrorNoHalt(Format("Metrostroi:Signal %s don't have a routes!\n",self.Name)) + return + end + if not self.Routes[self.Route or 1] then + ErrorNoHalt(Format("Metrostroi:Signal %s have a null %s route!!\n",self.Name,self.Route)) + return + end + + self.PrevTime = self.PrevTime or 0 + if (CurTime() - self.PrevTime) > 1.0 then + self.PrevTime = CurTime()+math.random(0.5,1.5) + self:ARSLogic(self.PrevTime - CurTime()) + end + self.RouteNumberOverrite = nil + local number = "" + if self.MU or self.ARSOnly or self.RouteNumberSetup and self.RouteNumberSetup ~= "" or self.RouteNumber and self.RouteNumber ~= "" then + if self.NextSignalLink then + if not self.NextSignalLink.Red and not self.Red then + self.RouteNumberOverrite = self.NextSignalLink.RouteNumberOverrite ~= "" and self.NextSignalLink.RouteNumberOverrite or self.NextSignalLink.RouteNumber + else + self.RouteNumberOverrite = self.RouteNumber + end + if self.NextSignalLink.RouteNumberOverrite and (not self.Red or self.InvationSignal) and self.Routes[self.Route or 1].EnRou then + number = number..self.NextSignalLink.RouteNumberOverrite + end + if self.NextSignalLink.RouteNumber and (self.Routes[self.Route or 1].EnRou and not self.AutoEnabled or self.InvationSignal) then + number = number..self.NextSignalLink.RouteNumber + end + --print(self.Name,self.NextSignalLink.RouteNumberOverrite) + self.RouteNumberOverrite = (self.RouteNumberOverrite or "")..number + else + self.RouteNumberOverrite = self.RouteNumber + end + end + if self.InvationSignal and self.GoodInvationSignal == -1 then + number = number.."W" + end + if self.KGU then number = number.."K" end + if number then self:SetNW2String("Number",number) end + + if self.ARSOnly then + if self.Sprites then + for k,v in pairs(self.Sprites) do + SafeRemoveEntity(v) + self.Sprites[k] = nil + end + if self.ARSOnly and self.Sprites then + self.Sprites = nil + end + end + self:SetNW2String("Signal","") + self.AutoEnabled = not self.ARSOnly + return + end + + self.AutoEnabled = false + self.Red = nil + if not self.Routes[self.Route or 1].Lights then return end + local Route = self.Routes[self.Route or 1] + local index = 1 + local offset = self.RenderOffset[self.SignalType] or Vector(0,0,0) + self.Sig = "" + self.Colors = "" + for k,v in ipairs(self.Lenses) do + if self.Routes[self.Route or 1].Repeater and IsValid(self.NextSignalLink) and (not self.Routes[self.Route or 1].Lights or self.Routes[self.Route or 1].Lights == "") then + break + end + if v ~= "M" then + --get the some models data + local data = #v ~= 1 and self.TrafficLightModels[self.SignalType][#v-1] or self.TrafficLightModels[self.SignalType][self.Signal_IS] + if not data then continue end + for i = 1,#v do + --Get the LightID and check, is this light must light up + local LightID = IsValid(self.NextSignalLink) and math.min(#Route.LightsExploded,self.FreeBS+1) or 1 + local AverageState = Route.LightsExploded[LightID]:find(tostring(index)) or ((v[i] == "W" and self.InvationSignal and self.GoodInvationSignal == index) and 1 or 0) + local MustBlink = (v[i] == "W" and self.InvationSignal and self.GoodInvationSignal == index) or (AverageState > 0 and Route.LightsExploded[LightID][AverageState+1] == "b") --Blinking, when next is "b" (or it's invasion signal') + self.Sig = self.Sig..(AverageState > 0 and (MustBlink and 2 or 1) or 0) + + if AverageState > 0 then + if self.GoodInvationSignal ~= index then self.Colors = self.Colors..(MustBlink and v[i]:lower() or v[i]:upper()) end + if v[i] == "R" then + self.AutoEnabled = not self.NonAutoStop + self.Red = true + end + end + index = index + 1 + end + end + end + else + local number = self.RouteNumberReplace or "" + self.PrevTime = self.PrevTime or 0 + if (CurTime() - self.PrevTime) > 1.0 then + self.PrevTime = CurTime()+math.random(0.5,1.5) + self:ARSLogic(self.PrevTime - CurTime()) + self:CheckOccupation() + end + --[[ + if self.MU or self.ARSOnly or self.RouteNumberSetup and self.RouteNumberSetup ~= "" or self.RouteNumber and self.RouteNumber ~= "" then + if self.NextSignalLink then + if not self.NextSignalLink.AutoEnabled and not self.AutoEnabled then + self.RouteNumberOverrite = self.NextSignalLink.RouteNumberOverrite ~= "" and self.NextSignalLink.RouteNumberOverrite or self.NextSignalLink.RouteNumber + else + self.RouteNumberOverrite = self.RouteNumber + end + if self.NextSignalLink.RouteNumberOverrite and not self.AutoEnabled and (self.Routes[self.Route or 1].EnRou or self.InvationSignal) then + number = number..self.NextSignalLink.RouteNumberOverrite + end + if self.NextSignalLink.RouteNumber and (self.Routes[self.Route or 1].EnRou and not self.AutoEnabled or self.InvationSignal) then + number = number..self.NextSignalLink.RouteNumber + end + --print(self.Name,self.NextSignalLink.RouteNumberOverrite) + self.RouteNumberOverrite = (self.RouteNumberOverrite or "")..number + else + self.RouteNumberOverrite = self.RouteNumber + end + end]] + if self.InvationSignal and self.GoodInvationSignal == -1 then + number = number.."W" + end + if self.KGU then number = number.."K" end + if number then self:SetNW2String("Number",number) end + local index = 1 + self.Colors = "" + for k,v in ipairs(self.Lenses) do + if v ~= "M" then + --get the some models data + local data = #v ~= 1 and self.TrafficLightModels[self.SignalType][#v-1] or self.TrafficLightModels[self.SignalType][self.Signal_IS] + if not data then continue end + for i = 1,#v do + if (self.Sig[index] == "1" or self.Sig[index] == "2") then self.Colors = self.Colors..v[i]:lower() end + index = index + 1 + end + end + end + end + if self.Controllers then + for k,v in pairs(self.Controllers) do + if self.Sig ~= v.Sig then + local Route = self.Routes[self.Route or 1] + local LightID = IsValid(self.NextSignalLink) and math.min(#Route.LightsExploded,self.FreeBS+1) or 1 + local lights = Route.LightsExploded[LightID] + v:TriggerOutput("LenseEnabled",self,Route.LightsExploded[LightID]) + v.Sig = self.Sig + end + if v.OldIS ~= self.InvationSignal then + if self.InvationSignal then + v:TriggerOutput("LenseEnabled",self,"I") + else + v:TriggerOutput("LenseDisabled",self,"I") + end + v.OldIS = self.InvationSignal + end + end + end + self:SetNW2String("Signal",self.Sig) + if not self.AutostopPresent then self:SetNW2Bool("Autostop",self.AutoEnabled) end + + self:NextThink(CurTime() + 0.25) + return true +end + +--Net functions +--Send update, if parameters have been changed +function ENT:SendUpdate(ply) + net.Start("metrostroi-signal") + net.WriteEntity(self) + net.WriteInt(self.SignalType or 0,3) + net.WriteString(self.Name or "NOT LOADED") + net.WriteString(self.ARSOnly and "ARSOnly" or self.LensesStr) + net.WriteString(self.SignalType == 0 and self.RouteNumberSetup or "") + net.WriteBool(self.Left) + net.WriteBool(self.Double) + net.WriteBool(self.DoubleL) + net.WriteBool(not self.NonAutoStop) + if ply then net.Send(ply) else net.Broadcast() end +end + +--On receive update request, we send update +net.Receive("metrostroi-signal", function(_, ply) + local ent = net.ReadEntity() + if not IsValid(ent) or not ent.SendUpdate then return end + ent:SendUpdate(ply) +end) + +Metrostroi.OptimisationPatch() \ No newline at end of file diff --git a/lua/entities/gmod_track_signal/shared.lua b/lua/entities/gmod_track_signal/shared.lua new file mode 100644 index 0000000..106aa6f --- /dev/null +++ b/lua/entities/gmod_track_signal/shared.lua @@ -0,0 +1,296 @@ +ENT.Type = "anim" +ENT.PrintName = "Signalling Element" +ENT.Category = "Metrostroi (utility)" + +ENT.Spawnable = false +ENT.AdminSpawnable = false + +ENT.TrafficLightModels = {} +ENT.RenderOffset = {} +ENT.BasePosition = Vector(-110,32,0) +ENT.ReloadModels = true +ENT.Signal_IS = "W" +Metrostroi.LiterWarper = { + A = "f",B = ",",V = "d",G = "u",D = "l",E = "t",J = ";",Z = "p", + I = "b",Y = "q",K = "r",L = "k",M = "v",N = "y",O = "j",P = "g", + R = "h",S = "c",T = "n",U = "e",F = "a",H = "[",C = "w", + --Y = "",--ЧЩЪЫЬЭЮ + W = "o",Q = "z", +} + +-- Lamp indexes +-- 0 Red +-- 1 Yellow +-- 2 Green +-- 3 Blue +-- 4 Second yellow (flashing yellow) +-- 5 White +--[[ +Metrostroi.RoutePointer = { + [""] = { + false,false,false,false,false, + false,false,false,false,false, + false,false,false,false,false, + false,false,false,false,false, + false,false,false,false,false, + false,false,false,false,false, + false,false,false,false,false, + }, + ["1"] = { + false,false,true ,false,false, + false,true ,true ,false,false, + true ,false,true ,false,false, + false,false,true ,false,false, + false,false,true ,false,false, + false,false,true ,false,false, + true ,true ,true ,true ,true , + }, + ["2"] = { + false,true ,true ,true ,false, + true ,false,false,false,true , + false,false,false,false,true , + false,false,false,true,false, + false,false,true ,false,false, + false,true ,false,false,false, + true ,true ,true ,true ,true , + }, + ["3"] = { + false,true ,true ,true ,false, + true ,false,false,false,true , + false,false,false,false,true , + false,false,true ,true ,false, + false,false,false,false,true , + true ,false,false,false,true , + false,true ,true ,true ,false, + }, + ["4"] = { + false,false,false,true ,false, + false,false,true ,true ,false, + false,true ,false,true ,false, + true ,false,false,true ,false, + true ,true ,true ,true ,true , + false,false,false,true ,false, + false,false,false,true ,false, + }, + ["5"] = { + true ,true ,true ,true ,true , + true ,false,false,false,false, + true ,true ,true ,true ,false, + false,false,false,false,true , + false,false,false,false,true , + true ,false,false,false,true , + false,true ,true ,true ,false, + }, + ["6"] = { + false,true ,true ,true ,false, + true ,false,false,false,true , + true ,false,false,false,false, + true ,true ,true ,true ,false, + true ,false,false,false,true , + true ,false,false,false,true , + false,true ,true ,true ,false, + }, + ["7"] = { + true ,true ,true ,true ,true , + false,false,false,false,true , + false,false,false,true ,false, + false,false,true ,false,false, + false,true ,false,false,false, + false,true ,false,false,false, + false,true ,false,false,false, + }, + ["8"] = { + false,true ,true ,true ,false, + true ,false,false,false,true , + true ,false,false,false,true , + false,true ,true ,true ,false, + true ,false,false,false,true , + true ,false,false,false,true , + false,true ,true ,true ,false, + }, + ["9"] = { + false,true ,true ,true ,false, + true ,false,false,false,true , + true ,false,false,false,true , + false,true ,true ,true ,true , + false,false,false,false,true , + true ,false,false,false,true , + false,true ,true ,true ,false, + }, + ["0"] = { + false,true ,true ,true ,false, + true ,false,false,false,true , + true ,false,false,true ,true , + true ,false,true ,false,true , + true ,true ,false,false,true , + true ,false,false,false,true , + false,true ,true ,true ,false, + }, + ["D"] = { + false,true ,true ,true ,false, + false,true ,false,true ,false, + false,true ,false,true ,false, + false,true ,false,true ,false, + false,true ,false,true ,false, + true ,true ,true ,true ,true , + true ,false,false,false,true , + }, +}]] +Metrostroi.RoutePointer = { + [""] = 0, + ["0"] = 10, + ["D"] = 11, +} +for i = 1,9 do + Metrostroi.RoutePointer[tostring(i)] = i +end +Metrostroi.Lenses = { + ["R"] = Color(255,0,0), + ["Y"] = Color(255,127,0), + ["G"] = Color(0,255,0), + ["W"] = Color(255,255,255), + ["B"] = Color(0,0,255), +} +--[[ +ENT.LightType = 0 +ENT.Name = "" +ENT.Lenses = { +} +ENT.RouteNumber = "" +ENT.OnlyARS = false + +ENT.Routes = { +} +]] +ENT.AutostopModel = { + "models/metrostroi/signals/mus/autostop.mdl", + Vector(41,-0.5,1.5) +} + +ENT.OldRouteNumberSetup = { + "1234D", + "WKFX","LR", + Vector(6,0,10.5), + {D=4},{["F"]=0,["L"]=0,["R"]=2,W=3,K=4} +} + +-------------------------------------------------------------------------------- +-- Inside +-------------------------------------------------------------------------------- +ENT.RenderOffset[0] = Vector(0,0.5,113.35) +ENT.TrafficLightModels[0] = { + m1 = "models/metrostroi/signals/mus/box.mdl", + m2 = "models/metrostroi/signals/mus/pole_2.mdl", + m2_long = "models/metrostroi/signals/mus/pole_2_long.mdl", + m2_long_pos = 46, + m2_long_replace = "pole_", + name = Vector(-1.75,2.5,3), + name_one = Vector(7.41,0.5,1), + [1] = { 32, "models/metrostroi/signals/mus/light_2.mdl", { + [0] = Vector(7.41,-27.54,25.26), + [1] = Vector(7.41,-27.54,14.2),-- + ["glass"] = { + {"models/metrostroi/signals/mus/lamp_lens.mdl",Vector(7.43,4.46,25)}, + {"models/metrostroi/signals/mus/lamp_lens.mdl",Vector(7.43,4.46,14)}, + } + }}, + [2] = { 43, "models/metrostroi/signals/mus/light_3.mdl", { + [0] = Vector(7.41,-27.54,35.1), + [1] = Vector(7.41,-27.54,25.26), + [2] = Vector(7.41,-27.54,14.2),---27.54 + ["glass"] = { + {"models/metrostroi/signals/mus/lamp_lens.mdl",Vector(7.43,4.46,35.2)}, + {"models/metrostroi/signals/mus/lamp_lens.mdl",Vector(7.43,4.46,25)}, + {"models/metrostroi/signals/mus/lamp_lens.mdl",Vector(7.43,4.46,14)}, + } + }}, + + M = { 24, "models/metrostroi/signals/mus/light_pathindicator.mdl", Vector(13.1,2, 19.5), 1.75, 2.05, 4}, +} + + +-------------------------------------------------------------------------------- +-- Outside +-------------------------------------------------------------------------------- +ENT.RenderOffset[1] = Vector(0,0,200) +ENT.TrafficLightModels[1] = { + ["m1"] = "models/metrostroi/signals/mus/pole_1.mdl", + name = Vector(0,3,40), + [1] = { 46, "models/metrostroi/signals/mus/light_outside_2.mdl", { + [0] = Vector(-0.51,-18.76,19.95), + [1] = Vector(-0.51,-18.76,7.97), + ["glass"] = { + {"models/metrostroi/signals/mus/lamp_lens.mdl",Vector(0,13.3,19.95)}, + {"models/metrostroi/signals/mus/lamp_lens.mdl",Vector(0,13.3,7.97 )}, + } + }}, + [2] = { 56, "models/metrostroi/signals/mus/light_outside_3.mdl", { + [0] = Vector(-0.51,-18.76,30.88), + [1] = Vector(-0.51,-18.76,19.95), + [2] = Vector(-0.51,-18.76,7.97), + ["glass"] = { + {"models/metrostroi/signals/mus/lamp_lens.mdl",Vector(0,13.3,30.88)}, + {"models/metrostroi/signals/mus/lamp_lens.mdl",Vector(0,13.3,19.95)}, + {"models/metrostroi/signals/mus/lamp_lens.mdl",Vector(0,13.3,7.97 )}, + } + } }, + + W = { 25, "models/metrostroi/signals/mus/light_outside_1.mdl" , { + [0] = Vector(-0.51,-18.76,7.97), + ["glass"] = { + {"models/metrostroi/signals/mus/lamp_lens.mdl",Vector(0,13.3,7.97 )}, + } + }}, + M = { 40, "models/metrostroi/signals/mus/light_pathindicator3.mdl", Vector(7,11, 25), 3.6, 3.4, 5}, + noleft = true, +} + +-------------------------------------------------------------------------------- +-- Outside box +-------------------------------------------------------------------------------- +ENT.RenderOffset[2] = Vector(0,0.,112) +ENT.TrafficLightModels[2] = { + ["m1"] = "models/metrostroi/signals/mus/box_outside.mdl", + ["m2"] = "models/metrostroi/signals/mus/pole_3.mdl", + ["name"] = Vector(-3,2.5,7), + name_one = Vector(10.07,0.5,3), + [1] = { 42, "models/metrostroi/signals/mus/light_outside2_2.mdl", { + [0] = Vector(10.07,-29.7,27.55), + [1] = Vector(10.07,-29.7,16), + ["glass"] = { + {"models/metrostroi/signals/mus/lamp_lens.mdl",Vector(10.39,2.32,27.55)}, + {"models/metrostroi/signals/mus/lamp_lens.mdl",Vector(10.39,2.32,16)}, + } + }}, + [2] = { 47, "models/metrostroi/signals/mus/light_outside2_3.mdl", { + [0] = Vector(10.07,-29.7,39.37), + [1] = Vector(10.07,-29.7,27.55), + [2] = Vector(10.07,-29.7,16), + ["glass"] = { + {"models/metrostroi/signals/mus/lamp_lens.mdl",Vector(10.39,2.32,39.37)}, + {"models/metrostroi/signals/mus/lamp_lens.mdl",Vector(10.39,2.32,27.55)}, + {"models/metrostroi/signals/mus/lamp_lens.mdl",Vector(10.39,2.32,16)}, + } + }}, + [3] = { 47, "models/metrostroi/signals/mus/light_outside2_4.mdl", { + [0] = Vector(10.07,-29.7,50.45), + [1] = Vector(10.07,-29.7,39.37), + [2] = Vector(10.07,-29.7,27.55), + [3] = Vector(10.07,-29.7,16), + ["glass"] = { + {"models/metrostroi/signals/mus/lamp_lens.mdl",Vector(10.39,2.32,50.45)}, + {"models/metrostroi/signals/mus/lamp_lens.mdl",Vector(10.39,2.32,39.37)}, + {"models/metrostroi/signals/mus/lamp_lens.mdl",Vector(10.39,2.32,27.55)}, + {"models/metrostroi/signals/mus/lamp_lens.mdl",Vector(10.39,2.32,16)}, + } + }}, + + M = { 24, "models/metrostroi/signals/mus/light_pathindicator.mdl", Vector(13.8,2, 22.8), 1.8, 2.1, 4}, +} +ENT.SignalConverter = { + R = 1, + Y = 2, + G = 3, + B = 4, + W = 5 +} diff --git a/lua/entities/gmod_track_signal_controller/cl_init.lua b/lua/entities/gmod_track_signal_controller/cl_init.lua new file mode 100644 index 0000000..c68660a --- /dev/null +++ b/lua/entities/gmod_track_signal_controller/cl_init.lua @@ -0,0 +1,6 @@ +include("shared.lua") + +function ENT:Initialize() +end +function ENT:OnRemove() +end diff --git a/lua/entities/gmod_track_signal_controller/init.lua b/lua/entities/gmod_track_signal_controller/init.lua new file mode 100644 index 0000000..7e887bd --- /dev/null +++ b/lua/entities/gmod_track_signal_controller/init.lua @@ -0,0 +1,145 @@ +AddCSLuaFile("shared.lua") +AddCSLuaFile("cl_init.lua") +include("shared.lua") + +function ENT:Initialize() + self:SetModel("models/z-o-m-b-i-e/metro_2033/electro/m33_electro_box_08.mdl") + self.Sig = "" +end + +function ENT:OnRemove() +end + +function ENT:Think() + if not IsValid(self.SignalEntity) then + self.SignalEntity = Metrostroi.GetSignalByName(self.Signal) + if IsValid(self.SignalEntity) then + print(Format("Metrostroi Signal Controller: Linked to signal %s",self.Signal)) + if not self.SignalEntity.Controllers then + self.SignalEntity.Controllers = {} + table.insert(self.SignalEntity.Controllers,self) + end + self.SignalEntity.ControllerLogic = self.DisableSignal + for k,v in pairs(self.SignalEntity.Controllers) do + if v == self then + self:NextThink(CurTime() + 1.0) + return true + end + end + table.insert(self.SignalEntity.Controllers,self) + end + end + self:NextThink(CurTime() + 1.0) + return true +end + +function ENT:KeyValue(key ,value) + if key == "targetsignal" then + self.Signal = value + elseif key == "disablesignal" and value == "1" then + self.DisableSignal = true + elseif key == "LenseEnabled" then + if not self.Entities then self.Entities = {} end + local tbl = string.Explode(",",value) + timer.Simple(0,function() table.insert(self.Entities,{ents.FindByName(tbl[1]),tbl[2]}) end) + self:StoreOutput(key,value) + elseif key == "LenseDisabled" then + if not self.Entities then self.Entities = {} end + local tbl = string.Explode(",",value) + timer.Simple(0,function() table.insert(self.Entities,{ents.FindByName(tbl[1]),tbl[2],true}) end) + self:StoreOutput(key,value) + end +end + +function ENT:TriggerOutput(output,_,data) + if not self.Entities then return end + for k,v in pairs(self.Entities) do + if output == "LenseEnabled" and not v[3] or output == "LenseDisabled" and v[3] then + for _,ent in pairs(v[1]) do + ent:Fire(v[2],data) + end + end + end +end + +function ENT:AcceptInput( input, activator, called, data ) + if not IsValid(self.SignalEntity) then + self.SignalEntity = Metrostroi.GetSignalByName(self.Signal) + if not IsValid(self.SignalEntity) then + if #ents.FindByClass("gmod_track_signal") > 0 then + ErrorNoHalt(Format("\nMetrostroi Signal Controller: Can't find signal %s!\nCheck, that you use official verion of signal\n",self.Signal)) + else + ErrorNoHalt("\nMetrostroi Signal Controller: Please, load a signals first!\n") + end + end + return true + end + local sig = self.SignalEntity + if input == "Open" then + for k,v in pairs(sig.Routes) do + if v.Manual then v.IsOpened = true end + end + elseif input == "OpenRoute" then + for k,v in pairs(sig.Routes) do + sig.Close = false + if v.RouteName and v.RouteName:upper() == data then + if v.Manual then v.IsOpened = true end + else + if v.Manual then v.IsOpened = false end + end + end + elseif input == "Close" then + for k,v in pairs(sig.Routes) do + if v.Manual then v.IsOpened = false end + end + elseif input == "SetKGU" then + sig.KGU = data == "1" + elseif input == "SetIS" then + sig.InvationSignal = data == "1" + elseif input == "SetSignal" then + local index = 0 + for k,v in ipairs(sig.Lenses) do + if v ~= "M" then + --get the some models data + local dat = #v ~= 1 and sig.TrafficLightModels[sig.SignalType][#v-1] or sig.TrafficLightModels[sig.SignalType][sig.Signal_IS] + if not dat then continue end + for i = 1,#v do + if index == tonumber(data) then + sig.Sig = string.SetChar(sig.Sig,index,"1") + end + index = index + 1 + end + end + end + elseif input == "ResetSignal" then + sig.Sig = "" + local index = 0 + for k,v in ipairs(sig.Lenses) do + if v ~= "M" then + --get the some models data + local data = #v ~= 1 and sig.TrafficLightModels[sig.SignalType][#v-1] or sig.TrafficLightModels[sig.SignalType][sig.Signal_IS] + if not data then continue end + for i = 1,#v do + index = index + 1 + sig.Sig = sig.Sig..0 + end + end + end + elseif input == "SetFreq" then + sig.ARSSpeedLimit = tonumber(data) or 1 + elseif input == "SetFreqMode26" then + sig.TwoToSix = true + elseif input == "SetFreqMode15" then + sig.TwoToSix = false + elseif input == "ResetFreq" then + sig.ARSSpeedLimit = 1 + elseif input == "SetAutostop" then + sig.AutoEnabled = true + elseif input == "ResetAutostop" then + sig.AutoEnabled = false + elseif input == "SetRouteNumber" then + sig.RouteNumberReplace = data + elseif input == "ResetRouteNumber" then + sig.RouteNumberReplace = data + end +end diff --git a/lua/entities/gmod_track_signal_controller/shared.lua b/lua/entities/gmod_track_signal_controller/shared.lua new file mode 100644 index 0000000..ad7d80c --- /dev/null +++ b/lua/entities/gmod_track_signal_controller/shared.lua @@ -0,0 +1,10 @@ +ENT.Type = "anim" + +ENT.PrintName = "Map signal controller" +ENT.Category = "Metrostroi (utility)" + +ENT.Spawnable = false +ENT.AdminSpawnable = false + +function ENT:SetupDataTables() +end diff --git a/lua/entities/gmod_track_signs/cl_init.lua b/lua/entities/gmod_track_signs/cl_init.lua new file mode 100644 index 0000000..ccd49d9 --- /dev/null +++ b/lua/entities/gmod_track_signs/cl_init.lua @@ -0,0 +1,111 @@ +include("shared.lua") + +local debug = GetConVar("metrostroi_drawsignaldebug") +local function enableDebug() + if debug:GetBool() then + hook.Add("PostDrawTranslucentRenderables","MetrostroiSignDebug",function(bDrawingDepth,bDrawingSkybox) + for _,ent in pairs(ents.FindByClass("gmod_track_signs")) do + if bDrawingDepth and LocalPlayer():GetPos():Distance(sig:GetPos()) < 512 then + local pos = sig:LocalToWorld(Vector(0,0,0)) + local ang = sig:LocalToWorldAngles(Angle(0,90,90)) + cam.Start3D2D(pos, ang, 0.25) + surface.SetDrawColor(125, 125, 0, 255) + surface.DrawRect(-40, -20, 80, 20) + cam.End3D2D() + end + end + end) + else + hook.Remove("PostDrawTranslucentRenderables","MetrostroiSignDebug") + end +end +hook.Remove("PostDrawTranslucentRenderables","MetrostroiSignDebug") +cvars.AddChangeCallback( "metrostroi_drawsignaldebug", enableDebug) +enableDebug() + +function ENT:Initialize() + --self.ModelProp = self:GetNWInt("Model") +end + +function ENT:OnRemove() + print(12323) + self:RemoveModels() + --self.LightType = 0 + --hook.Remove("PostDrawOpaqueRenderables") +end +function ENT:RemoveModels() + SafeRemoveEntity(self.Model) + self.Model = nil +end +function ENT:Think() + self:SetNextClientThink(CurTime()+5) + --if self.SendReq == nil or (self.SendReq and CurTime() - self.SendReq <= 0) then return true elseif self.SendReq then self.SendReq = false end + if self:IsDormant() or Metrostroi and Metrostroi.ReloadClientside then + if IsValid(self.Model) then + self.Model:Remove() + self.Model = nil + end + self.MustDraw = false + return true + else + self.MustDraw = true + end + if self:GetNWInt("Type") ~= self.Type or self:GetNWBool("Left") ~= self.Left or self.Offset ~= self:GetNWVector("Offset") then + self.Type = self:GetNWInt("Type") + self.ModelProp = self.SignModels[self.Type-1] + self.Left = self:GetNWBool("Left",false) + if self.Left then + self.Offset = self:GetNWVector("Offset") + else + self.Offset = self:GetNWVector("Offset") + end + self:RemoveModels() + end + if not self.ModelProp then + self:SetNextClientThink(CurTime()+1) + return true + end + if not IsValid(self.Model) then + --ents.CreateClientProp("models/metrostroi/81-717/reverser.mdl") + --hook.Add("MetrostroiBigLag",self.Model,function(ent) + -- ent:SetPos(self:LocalToWorld(pos)) + -- ent:SetAngles(self:LocalToWorldAngles(ang)) + -- --if ent.Spawned then hook.Remove("MetrostroiBigLag",ent) end + -- --ent.Spawned = true + --end) + if self.Left and not self.ModelProp.noleft then + if self.ModelProp.model:find("_r.mdl") then + self.Model = ClientsideModel(self.ModelProp.model:Replace("_r.mdl","_l.mdl"), RENDERGROUP_OTHER) + --self.Model:SetModel(self.ModelProp.model:Replace("_r.mdl","_l.mdl")) + else + self.Model = ClientsideModel(self.ModelProp.model:Replace("_l.mdl","_r.mdl"), RENDERGROUP_OTHER) + --self.Model:SetModel(self.ModelProp.model:Replace("_l.mdl","_r.mdl")) + end + else + self.Model = ClientsideModel(self.ModelProp.model, RENDERGROUP_OTHER) + --self.Model:SetModel(self.ModelProp.model) + end + local RAND = math.random(-10,10) + local pos = self.ModelProp.pos + self.Offset + local ang = self.ModelProp.angles + if not self.ModelProp.noauto then + pos = pos+Vector(0,0,RAND/5) + if self.ModelProp.axis == 1 then + ang = ang+Angle(RAND,0,0) + elseif self.ModelProp.axis == 2 then + ang = ang+Angle(0,RAND,0) + else + ang = ang+Angle(0,0,RAND) + end + end + if self.Left then pos = pos*Vector(1,-1,1) end + if self.Left and self.ModelProp.rotate then ang = ang-Angle(0,180,0) end + self.Model:SetParent(self) + self.Model:SetPos(self:LocalToWorld(pos)) + self.Model:SetAngles(self:LocalToWorldAngles(ang)) + end + return true +end + +function ENT:Draw() +end diff --git a/lua/entities/gmod_track_signs/init.lua b/lua/entities/gmod_track_signs/init.lua new file mode 100644 index 0000000..9c41728 --- /dev/null +++ b/lua/entities/gmod_track_signs/init.lua @@ -0,0 +1,22 @@ +AddCSLuaFile("shared.lua") +AddCSLuaFile("cl_init.lua") +include("shared.lua") +util.AddNetworkString "metrostroi-signs" + +function ENT:Initialize() + self:DrawShadow(false) + self:SendUpdate() +end + +function ENT:OnRemove() +end + +function ENT:Think() +end + +function ENT:SendUpdate() + if not self.SignType then return end + self:SetNWInt("Type",self.SignType or 1) + self:SetNWVector("Offset",Vector(0,self.YOffset,self.ZOffset)) + self:SetNWBool("Left",self.Left or false) +end diff --git a/lua/entities/gmod_track_signs/shared.lua b/lua/entities/gmod_track_signs/shared.lua new file mode 100644 index 0000000..8b432bb --- /dev/null +++ b/lua/entities/gmod_track_signs/shared.lua @@ -0,0 +1,511 @@ +ENT.Type = "anim" + +ENT.PrintName = "Sign" +ENT.Category = "Metrostroi (utility)" + +ENT.Spawnable = false +ENT.AdminSpawnable = false +ENT.RenderGroup = RENDERGROUP_BOTH + +ENT.SignModels = {} + +-------------------------------------------------------------------------------- +-- Inside +-------------------------------------------------------------------------------- +--ENT.RenderOffset[0] = Vector(0,0,112+32) +ENT.SignModels[0] = { + model = "models/metrostroi/re_sign/t_och_r.mdl", + pos = Vector(0,90,125), + angles = Angle(0,0,0), +} +ENT.SignModels[1] = { + model = "models/metrostroi/re_sign/t_40_r.mdl", + pos = Vector(0,90,125), + angles = Angle(0,0,0), +} +ENT.SignModels[2] = { + model = "models/metrostroi/re_sign/t_60_r.mdl", + pos = Vector(0,90,125), + angles = Angle(0,0,0), +} +ENT.SignModels[3] = { + model = "models/metrostroi/re_sign/t_70_r.mdl", + pos = Vector(0,90,125), + angles = Angle(0,0,0), +} +ENT.SignModels[4] = { + model = "models/metrostroi/re_sign/t_80_r.mdl", + pos = Vector(0,90,125), + angles = Angle(0,0,0), +} +ENT.SignModels[5] = { + model = "models/metrostroi/re_sign/station_border.mdl", + pos = Vector(0,90,125), + angles = Angle(0,0,0), + noauto = true, +} +ENT.SignModels[6] = { + model = "models/metrostroi/re_sign/signal_outdoor.mdl", + pos = Vector(0,100,50), + angles = Angle(0,90,0), + noauto = true, +} +ENT.SignModels[7] = { + model = "models/metrostroi/re_sign/stop_1.mdl", + pos = Vector(0,100,40), + angles = Angle(0,90,0), + noauto = true, +} +ENT.SignModels[8] = { + model = "models/metrostroi/re_sign/t_opasno_r.mdl", + pos = Vector(0,90,125), + angles = Angle(0,0,0), + noauto = true, +} +ENT.SignModels[9] = { + model = "models/metrostroi/re_sign/t_otstoi_r.mdl", + pos = Vector(0,90,125), + angles = Angle(0,0,0), + noauto = true, +} +ENT.SignModels[10] = { + model = "models/metrostroi/props_models/stop_marker_vertical.mdl", + pos = Vector(0,113,143), + angles = Angle(0,0,90), + noauto = true, +} +ENT.SignModels[11] = { + model = "models/metrostroi/re_sign/t_!_r.mdl", + pos = Vector(0,90,125), + angles = Angle(0,0,0), +} +ENT.SignModels[12] = { + model = "models/metrostroi/re_sign/t_x_r.mdl", + pos = Vector(0,90,125), + angles = Angle(0,0,0), +} +ENT.SignModels[13] = { + model = "models/metrostroi/re_sign/t_nachalo_r.mdl", + pos = Vector(0,90,125), + angles = Angle(0,0,0), +} +ENT.SignModels[14] = { + model = "models/metrostroi/re_sign/t_t_konec_r.mdl", + pos = Vector(0,90,125), + angles = Angle(0,0,0), +} +ENT.SignModels[15] = { + model = "models/metrostroi/re_sign/t_sbor_r.mdl", + pos = Vector(0,90,125), + angles = Angle(0,0,0), +} +ENT.SignModels[16] = { + model = "models/metrostroi/re_sign/t_tedoff_r.mdl", + pos = Vector(0,90,112), + angles = Angle(0,0,-0), +} +ENT.SignModels[17] = { + model = "models/metrostroi/re_sign/t_tedon_r.mdl", + pos = Vector(0,90,112), + angles = Angle(0,0,-0), +} +ENT.SignModels[18] = { + model = "models/metrostroi/re_sign/t_c_r.mdl", + pos = Vector(0,90,125), + angles = Angle(0,0,0), +} +ENT.SignModels[19] = { + model = "models/metrostroi/re_sign/t_t_r.mdl", + pos = Vector(0,0,-2), + angles = Angle(0,0,0), + noauto = true, + noleft = true, +} +ENT.SignModels[20] = { + model = "models/metrostroi/re_sign/t_shod.mdl", + pos = Vector(0,0,-2), + angles = Angle(0,0,0), + noauto = true, + noleft = true, +} +ENT.SignModels[21] = { + model = "models/metrostroi/re_sign/t_door_r.mdl", + pos = Vector(0,0,-2), + angles = Angle(0,0,0), + noauto = true, + noleft = true +} +ENT.SignModels[22] = { + model = "models/metrostroi/re_sign/t_phone_l.mdl", + pos = Vector(0,99,125), + angles = Angle(0,-90,0), + rotate = true, +} +ENT.SignModels[23] = { + model = "models/metrostroi/re_sign/t_phone_r.mdl", + pos = Vector(0,99,125), + angles = Angle(0,-90,0), + rotate = true, +} +ENT.SignModels[24] = { + model = "models/metrostroi/re_sign/t_1up_r.mdl",--replace + pos = Vector(0,90,125), + angles = Angle(0,0,0), +} +ENT.SignModels[25] = { + model = "models/metrostroi/re_sign/stop_2.mdl", + pos = Vector(0,100,40), + angles = Angle(0,90,0), + noauto = true, +} +ENT.SignModels[26] = { + model = "models/metrostroi/re_sign/signal_outdoor_och.mdl", + pos = Vector(0,100,50), + angles = Angle(0,90,0), + noauto = true, +} +ENT.SignModels[27] = { + model = "models/metrostroi/re_sign/signal_outdoor_35.mdl", + pos = Vector(0,100,50), + angles = Angle(0,90,0), + noauto = true, +} +ENT.SignModels[28] = { + model = "models/metrostroi/re_sign/signal_outdoor_40.mdl", + pos = Vector(0,100,50), + angles = Angle(0,90,0), + noauto = true, +} +ENT.SignModels[29] = { + model = "models/metrostroi/re_sign/signal_outdoor_60.mdl", + pos = Vector(0,100,50), + angles = Angle(0,90,0), + noauto = true, +} +ENT.SignModels[30] = { + model = "models/metrostroi/re_sign/signal_outdoor_70.mdl", + pos = Vector(0,100,50), + angles = Angle(0,90,0), + noauto = true, +} +ENT.SignModels[31] = { + model = "models/metrostroi/re_sign/signal_outdoor_80.mdl", + pos = Vector(0,100,50), + angles = Angle(0,90,0), + noauto = true, +} +ENT.SignModels[32] = { + model = "models/metrostroi/re_sign/signal_outdoor_sbor.mdl", + pos = Vector(0,100,50), + angles = Angle(0,90,0), + noauto = true, +} + +ENT.SignModels[33] = { + model = "models/metrostroi/re_sign/t_35_r.mdl", + pos = Vector(0,90,125), + angles = Angle(0,0,0), +} +ENT.SignModels[34] = { + model = "models/metrostroi/re_sign/t_opasno_200_r.mdl", + pos = Vector(0,90,125), + angles = Angle(0,0,0), +} +ENT.SignModels[35] = { + model = "models/metrostroi/tracks/powerrail_end_2.mdl", + pos = Vector(0,-0.2,-0.6), + angles = Angle(0,0,0), + noauto = true, + rotate = true, +} +ENT.SignModels[36] = { + model = "models/metrostroi/tracks/powerrail_end_2.mdl", + pos = Vector(0,-0.2+139,-0.6), + angles = Angle(0,180,0), + noauto = true, + rotate = true, +} +ENT.SignModels[37] = { + model = "models/metrostroi/re_sign/t_2up_r.mdl", + pos = Vector(0,90,125), + angles = Angle(0,0,0), +} +ENT.SignModels[38] = { + model = "models/metrostroi/re_sign/t_3up_r.mdl", + pos = Vector(0,90,125), + angles = Angle(0,0,0), +} +ENT.SignModels[39] = { + model = "models/metrostroi/re_sign/t_4up_r.mdl", + pos = Vector(0,90,125), + angles = Angle(0,0,0), +} +ENT.SignModels[40] = { + model = "models/metrostroi/re_sign/t_5up_r.mdl", + pos = Vector(0,90,125), + angles = Angle(0,0,0), +} +ENT.SignModels[41] = { + model = "models/metrostroi/re_sign/t_6up_r.mdl", + pos = Vector(0,90,125), + angles = Angle(0,0,0), +} +ENT.SignModels[42] = { + model = "models/metrostroi/re_sign/signal_outdoor_x.mdl", + pos = Vector(0,100,50), + angles = Angle(0,90,0), + noauto = true, +} +ENT.SignModels[43] = { + model = "models/metrostroi/re_sign/t_metal_r.mdl",--replace + pos = Vector(0,90,125), + angles = Angle(0,0,0), +} + +ENT.SignModels[44] = { + model = "models/metrostroi/re_sign/t_50_r.mdl", + pos = Vector(0,90,125), + angles = Angle(0,0,0), +} + +ENT.SignModels[45] = { + model = "models/metrostroi/re_sign/signal_outdoor_50.mdl", + pos = Vector(0,100,50), + angles = Angle(0,90,0), + noauto = true, +} + +ENT.SignModels[46] = { + model = "models/metrostroi/signs/forward_x2.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[47] = { + model = "models/metrostroi/signs/tedoff_kn.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[48] = { + model = "models/metrostroi/signs/tedoff_p1.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[49] = { + model = "models/metrostroi/signs/tedoff_p2.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[50] = { + model = "models/metrostroi/signs/tedoff_pn.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[51] = { + model = "models/metrostroi/signs/tedoff_t1.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[52] = { + model = "models/metrostroi/signs/tedoff_t2.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[53] = { + model = "models/metrostroi/signs/tedoff_t3.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[54] = { + model = "models/metrostroi/signs/tedoff_t4.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[55] = { + model = "models/metrostroi/signs/tedon_kn.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[56] = { + model = "models/metrostroi/signs/tedon_p1.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[57] = { + model = "models/metrostroi/signs/tedon_p2.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[58] = { + model = "models/metrostroi/signs/tedon_pn.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[59] = { + model = "models/metrostroi/signs/tedon_t1.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[60] = { + model = "models/metrostroi/signs/tedon_t2.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[61] = { + model = "models/metrostroi/signs/tedon_t3.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[62] = { + model = "models/metrostroi/signs/tedon_t4.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[63] = { + model = "models/metrostroi/signs/tedoff_722_1.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[64] = { + model = "models/metrostroi/signs/tedoff_722_2.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[65] = { + model = "models/metrostroi/signs/tedoff_722_3.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[66] = { + model = "models/metrostroi/signs/tedoff_722_4.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[67] = { + model = "models/metrostroi/signs/tedoff_722_5.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[68] = { + model = "models/metrostroi/signs/tedoff_722_6.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[69] = { + model = "models/metrostroi/signs/tedoff_722_7.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[70] = { + model = "models/metrostroi/signs/tedoff_722_8.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[71] = { + model = "models/metrostroi/signs/tedoff_722_9.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[72] = { + model = "models/metrostroi/signs/tedoff_722_10.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[73] = { + model = "models/metrostroi/signs/tedoff_outside.mdl", + pos = Vector(0,110,100), + angles = Angle(0,-90,0), + noauto = true, +} +ENT.SignModels[74] = { + model = "models/metrostroi/signs/tedon_722_1.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[75] = { + model = "models/metrostroi/signs/tedon_722_2.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[76] = { + model = "models/metrostroi/signs/tedon_722_3.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[77] = { + model = "models/metrostroi/signs/tedon_722_4.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[78] = { + model = "models/metrostroi/signs/tedon_722_5.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[79] = { + model = "models/metrostroi/signs/tedon_722_6.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[80] = { + model = "models/metrostroi/signs/tedon_722_7.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[81] = { + model = "models/metrostroi/signs/tedon_722_8.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[82] = { + model = "models/metrostroi/signs/tedon_722_9.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[83] = { + model = "models/metrostroi/signs/tedon_722_10.mdl", + pos = Vector(0,115,140), + angles = Angle(0,-90,0), + axis=1, +} +ENT.SignModels[84] = { + model = "models/metrostroi/signs/tedon_outside.mdl", + pos = Vector(0,110,100), + angles = Angle(0,-90,0), + noauto = true, +} \ No newline at end of file diff --git a/lua/entities/gmod_track_switch/cl_init.lua b/lua/entities/gmod_track_switch/cl_init.lua new file mode 100644 index 0000000..8a6c5bf --- /dev/null +++ b/lua/entities/gmod_track_switch/cl_init.lua @@ -0,0 +1,26 @@ +include("shared.lua") + +local debug = GetConVar("metrostroi_drawsignaldebug") +local function enableDebug() + if debug:GetBool() then + hook.Add("PostDrawTranslucentRenderables","MetrostroiSwitchDebug",function(bDrawingDepth,bDrawingSkybox) + for _,ent in pairs(ents.FindByClass("gmod_track_switch")) do + if bDrawingDepth and LocalPlayer():GetPos():Distance(sig:GetPos()) < 512 then + local pos = ent:LocalToWorld(Vector(30,0,75)) + local ang = ent:LocalToWorldAngles(Angle(0,180,90)) + cam.Start3D2D(pos, ang, 0.25) + surface.SetDrawColor(125, 125, 0, 255) + surface.DrawRect(0, 0, 160, 24) + + draw.DrawText("SwitchID:"..ent:GetNW2String("ID"),"Trebuchet24",5,0,Color(0,0,0,255)) + cam.End3D2D() + end + end + end) + else + hook.Remove("PostDrawTranslucentRenderables","MetrostroiSwitchDebug") + end +end +hook.Remove("PostDrawTranslucentRenderables","MetrostroiSwitchDebug") +cvars.AddChangeCallback( "metrostroi_drawsignaldebug", enableDebug) +enableDebug() \ No newline at end of file diff --git a/lua/entities/gmod_track_switch/init.lua b/lua/entities/gmod_track_switch/init.lua new file mode 100644 index 0000000..b28884e --- /dev/null +++ b/lua/entities/gmod_track_switch/init.lua @@ -0,0 +1,130 @@ +AddCSLuaFile("shared.lua") +AddCSLuaFile("cl_init.lua") +include("shared.lua") + +function ENT:Initialize() + self:SetModel("models/metrostroi/signals/mus/box.mdl") + Metrostroi.DropToFloor(self) + + -- Initial state of the switch + self.AlternateTrack = false + self.OldAlternateTrack = false + self.InhibitSwitching = false + self.LastSignalTime = 0 + + -- Find rotating parts which belong to this switch + local list = ents.FindInSphere(self:GetPos(),game.GetMap():find("metrostroi") and 512 or 256) + self.TrackSwitches = {} + for k,v in pairs(list) do + if (v:GetClass() == "prop_door_rotating") and (string.find(v:GetName(),"switch") or string.find(v:GetName(),"swh") or string.find(v:GetName(),"swit")) then + table.insert(self.TrackSwitches,v) + + timer.Simple(0.05,function() + debugoverlay.Line(v:GetPos(),self:GetPos(),10,Color(255,255,0),true) + end) + end + end + + Metrostroi.UpdateSignalEntities() + Metrostroi.UpdateSwitchEntities() + Metrostroi.UpdateARSSections() +end + +function ENT:OnRemove() + Metrostroi.UpdateSignalEntities() + Metrostroi.UpdateSwitchEntities() + Metrostroi.UpdateARSSections() +end + +function ENT:SendSignal(index,channel,route) + if not route then + if channel and channel ~= self:GetChannel() then return end + + -- Switch to alternate track + if index == "alt" then self.AlternateTrack = true end + -- Switch to main track + if index == "main" then self.AlternateTrack = false end + + -- Remember this signal + self.LastSignal = index + self.LastSignalTime = CurTime() + else + if index == "alt" then + for k,v in pairs(self.TrackSwitches) do v:Fire(self.Invertred and "Close" or "Open","","0") end + elseif index == "main" then + for k,v in pairs(self.TrackSwitches) do v:Fire(self.Invertred and "Open" or "Close","","0") end + end + if index == "alt" then self.AlternateTrack = true end + if index == "main" then self.AlternateTrack = false end + end + +end + +function ENT:SwitchTo(index) + if index == "alt" then + for k,v in pairs(self.TrackSwitches) do v:Fire(self.Invertred and "Close" or "Open","","0") end + elseif index == "main" then + for k,v in pairs(self.TrackSwitches) do v:Fire(self.Invertred and "Open" or "Close","","0") end + end +end + +function ENT:Think() + -- Reset + self.InhibitSwitching = false + + -- Check if local section of track is occupied or no + + if self.NotChangePos == nil then + self.NotChangePos = false + end + -- Force door state state + if self.NotChangePos then + self.AlternateTrack = false + self.MainTrack = false + for k,v in pairs(self.TrackSwitches) do + self.AlternateTrack = self.AlternateTrack or not self.Invertred and v:GetSaveTable().m_eDoorState == 2 or self.Invertred and v:GetSaveTable().m_eDoorState == 0 + self.MainTrack = self.MainTrack or not self.Invertred and v:GetSaveTable().m_eDoorState == 0 or self.Invertred and v:GetSaveTable().m_eDoorState == 2 + end + else + local pos = self.TrackPosition + if pos and self.AlternateTrack then + local trackOccupied = Metrostroi.IsTrackOccupied(pos.node1,pos.x,pos.forward,"switch") + if trackOccupied then -- Prevent track switches from working when there's a train on segment + self.InhibitSwitching = true + end + end + if self.AlternateTrack then + for k,v in pairs(self.TrackSwitches) do if IsValid(v) then v:Fire(self.Invertred and "Close" or "Open","","0") end end + else + for k,v in pairs(self.TrackSwitches) do if IsValid(v) then v:Fire(self.Invertred and "Open" or "Close","","0") end end + end + -- Return switch to original position + if (self.InhibitSwitching == false) and (self.AlternateTrack == true) and + (CurTime() - self.LastSignalTime > 20.0) then + self:SendSignal("main",self:GetChannel()) + end + -- Force signal + if self.LockedSignal then + self:SendSignal(self.LockedSignal,self:GetChannel()) + end + end + if self.AlternateTrack ~= self.OldAlternateTrack then + self.OldAlternateTrack = self.AlternateTrack + hook.Run("MetrostroiChangedSwitch",self,self.AlternateTrack) + end + -- Process logic + self:NextThink(CurTime() + 1.0) + if self.Name and self.Name ~= "" then + self:SetNW2String("ID",self.Name) + elseif self.TrackPosition then + --PrintTable(self.TrackPosition.node1) + self:SetNW2String("ID",self.TrackPosition.path.id.."/"..self.TrackPosition.node1.id) + end + return true +end + +function ENT:GetSignal() + if self.InhibitSwitching and self.AlternateTrack then return 1 end + if self.AlternateTrack then return 3 end + return 0 +end diff --git a/lua/entities/gmod_track_switch/shared.lua b/lua/entities/gmod_track_switch/shared.lua new file mode 100644 index 0000000..f7ee4ec --- /dev/null +++ b/lua/entities/gmod_track_switch/shared.lua @@ -0,0 +1,10 @@ +ENT.Type = "anim" + +ENT.Category = "Metrostroi (utility)" + +ENT.Spawnable = true +ENT.AdminSpawnable = true + +function ENT:SetupDataTables() + self:NetworkVar("Int", 0, "Channel") +end diff --git a/lua/entities/gmod_track_udochka/cl_init.lua b/lua/entities/gmod_track_udochka/cl_init.lua new file mode 100644 index 0000000..96c6222 --- /dev/null +++ b/lua/entities/gmod_track_udochka/cl_init.lua @@ -0,0 +1,7 @@ +include("shared.lua") + + +-------------------------------------------------------------------------------- +function ENT:Draw() + self:DrawModel() +end \ No newline at end of file diff --git a/lua/entities/gmod_track_udochka/init.lua b/lua/entities/gmod_track_udochka/init.lua new file mode 100644 index 0000000..3186b87 --- /dev/null +++ b/lua/entities/gmod_track_udochka/init.lua @@ -0,0 +1,61 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +function ENT:Initialize() + self:SetModel("models/mus/depo/connector_feed_1.mdl") + self.VMF = self.VMF or {} + self:SetUseType(SIMPLE_USE) + self:PhysicsInit(SOLID_VPHYSICS) + self:SetMoveType(MOVETYPE_VPHYSICS) + self:SetSolid(SOLID_VPHYSICS) + local physobj = self:GetPhysicsObject() + if physobj:IsValid() then physobj:SetMass(25) end +end + +local function removeWeldBetweenEnts(ent1,ent2) + local constrainttable = constraint.FindConstraints(ent1,"Weld") + for k,v in pairs(constrainttable) do + if (v.Ent1 == ent1 or v.Ent1 == ent2) and (v.Ent2 == ent1 or v.Ent2 == ent2) then + v.Constraint:Remove() + end + end +end +function ENT:Use(ply) + if self.Coupled then + sound.Play("buttons/lever8.wav",self:GetPos()) + removeWeldBetweenEnts(self,self.Coupled) + removeWeldBetweenEnts(self.Coupled,self) + + self.Timer = CurTime()+2 + end + self.Coupled = nil + if ( self:IsPlayerHolding() ) then return end + if ply.PickupObject then ply:PickupObject( self ) end + self.LastPickup = ply +end +function ENT:Think() + self.Power = self.VMF.power and self.VMF.power == "1" + if self.Timer and CurTime() - self.Timer > 0 then + self.Timer = nil + end + if IsValid(self.Coupled) then + local coupled = false + for k,v in pairs(constraint.FindConstraints(self,"Weld")) do + if (v.Ent1 == self or v.Ent1 == self.Coupled) and (v.Ent2 == self or v.Ent2 == self.Coupled) then + coupled = true + break + end + end + if not coupled then self:Use(self,self,0,0) end + elseif self.Coupled then + self:Use(self,self,0,0) + end + self:NextThink(CurTime() + 1) + return true +end + +function ENT:KeyValue(key, value) + self.VMF = self.VMF or {} + self.VMF[key] = value +end diff --git a/lua/entities/gmod_track_udochka/shared.lua b/lua/entities/gmod_track_udochka/shared.lua new file mode 100644 index 0000000..32dae75 --- /dev/null +++ b/lua/entities/gmod_track_udochka/shared.lua @@ -0,0 +1,6 @@ +ENT.Type = "anim" + +ENT.Category = "Metrostroi (utility)" + +ENT.Spawnable = true +ENT.AdminSpawnable = false diff --git a/lua/entities/gmod_train_autodrive_coil/cl_init.lua b/lua/entities/gmod_train_autodrive_coil/cl_init.lua new file mode 100644 index 0000000..d536e6b --- /dev/null +++ b/lua/entities/gmod_train_autodrive_coil/cl_init.lua @@ -0,0 +1,21 @@ +include("shared.lua") + +function ENT:Initialize() + self.CanDraw = GetConVarNumber("metrostroi_drawsignaldebug")>0 + for k,v in pairs(self.ValidModels) do + if v==self:GetModel() then + self.CanDraw = true + break + end + end + self:DrawShadow(false) +end +function ENT:Draw() + if not self.CanDraw then return end + self:DrawModel() +end +cvars.AddChangeCallback("metrostroi_drawsignaldebug", function() + for k,auto in pairs(ents.FindByClass("gmod_train_autodrive_coil")) do + if auto.Initialize then auto:Initialize() end + end +end,"AutodriveCoil") \ No newline at end of file diff --git a/lua/entities/gmod_train_autodrive_coil/init.lua b/lua/entities/gmod_train_autodrive_coil/init.lua new file mode 100644 index 0000000..56ca152 --- /dev/null +++ b/lua/entities/gmod_train_autodrive_coil/init.lua @@ -0,0 +1,58 @@ +AddCSLuaFile("shared.lua") +AddCSLuaFile("cl_init.lua") +include("shared.lua") + +function ENT:Initialize() + self:SetModel(self.Model or "models/props_building_details/Storefront_Template001a_Bars.mdl") + + self:PhysicsInit(SOLID_VPHYSICS) + self:SetMoveType(MOVETYPE_VPHYSICS) + self:SetSolid(SOLID_VPHYSICS) + self:SetCollisionGroup(COLLISION_GROUP_IN_VEHICLE) + + + self.Commands = {} + self.LastBrakeProgrammPassed = CurTime() + self.BrakeProgrammPassed = 1e9 +end + +function ENT:OnRemove() +end + +function ENT:Trigger(plate) + if self.IsSensor then + --print("Sensor:TRIGGERED!") + if IsValid(self.Train) and self.Train.TriggerLightSensor then self.Train:TriggerLightSensor(self,plate) end + end +end +function ENT:Think() + local dist + local speedDist = 1e9 + local founded = false + for _,ent in ipairs(self.Commands) do + if ent.PlateType == METROSTROI_ACOIL_SBRAKE then + founded = true + dist = ent:WorldToLocal(self:GetPos()).x*0.01905+80 + if dist > 130 then break end + for i,brakeDist in ipairs(ent.SpeedDetectors) do + if brakeDist <= dist then + speedDist = brakeDist + end + end + end + end + self.BrakeCommandFounded = dist and (dist < 130 or dist > 150) + if self.SpeedDist ~= speedDist then + if speedDist == 1e9 or self.SpeedDist == 1e9 then + self.BrakeProgrammPassed = 1e9 + else + self.BrakeProgrammPassed = (CurTime()-self.LastBrakeProgrammPassed) + end + self.LastBrakeProgrammPassed = CurTime() + self.SpeedDist = speedDist + --print(speedDist,self.BrakeProgrammPassed) + end + self:NextThink(CurTime()) + return true + --if #self.Commands == 0 then self.BrakeProgrammPassed = 1e9 end +end \ No newline at end of file diff --git a/lua/entities/gmod_train_autodrive_coil/shared.lua b/lua/entities/gmod_train_autodrive_coil/shared.lua new file mode 100644 index 0000000..05d824d --- /dev/null +++ b/lua/entities/gmod_train_autodrive_coil/shared.lua @@ -0,0 +1,13 @@ +ENT.Type = "anim" + +ENT.PrintName = "Autodrive coil" +ENT.Category = "Metrostroi (utility)" + +ENT.Spawnable = false +ENT.AdminSpawnable = false +ENT.RenderGroup = RENDERGROUP_BOTH + +ENT.ValidModels = { + "models/metrostroi_train/81-717/rfid_reader.mdl", + "models/metrostroi_train/81-717/dkp_reader.mdl", +} \ No newline at end of file diff --git a/lua/entities/gmod_train_bogey/cl_init.lua b/lua/entities/gmod_train_bogey/cl_init.lua new file mode 100644 index 0000000..b65f80d --- /dev/null +++ b/lua/entities/gmod_train_bogey/cl_init.lua @@ -0,0 +1,440 @@ +include("shared.lua") + +-- Bogey-related sounds +ENT.SoundNames = {} +ENT.SoundNames["ted1_703"] = "subway_trains/bogey/engines/703/speed_8.wav" +ENT.SoundNames["ted2_703"] = "subway_trains/bogey/engines/703/speed_16.wav" +ENT.SoundNames["ted3_703"] = "subway_trains/bogey/engines/703/speed_24.wav" +ENT.SoundNames["ted4_703"] = "subway_trains/bogey/engines/703/speed_32.wav" +ENT.SoundNames["ted5_703"] = "subway_trains/bogey/engines/703/speed_40.wav" +ENT.SoundNames["ted6_703"] = "subway_trains/bogey/engines/703/speed_48.wav" +ENT.SoundNames["ted7_703"] = "subway_trains/bogey/engines/703/speed_56.wav" +ENT.SoundNames["ted8_703"] = "subway_trains/bogey/engines/703/speed_64.wav" +ENT.SoundNames["ted9_703"] = "subway_trains/bogey/engines/703/speed_72.wav" +ENT.SoundNames["ted10_703"] = "subway_trains/bogey/engines/703/speed_80.wav" +ENT.SoundNames["ted11_703"] = "subway_trains/bogey/engines/703/speed_88.wav" +--ENT.SoundNames["tedm_703"] = "subway_trains/bogey/engines/703/engines_medium.wav" + +ENT.SoundNames["ted1_717"] = "subway_trains/bogey/engines/717/engines_8.wav" +ENT.SoundNames["ted2_717"] = "subway_trains/bogey/engines/717/engines_16.wav" +ENT.SoundNames["ted3_717"] = "subway_trains/bogey/engines/717/engines_24.wav" +ENT.SoundNames["ted4_717"] = "subway_trains/bogey/engines/717/engines_32.wav" +ENT.SoundNames["ted5_717"] = "subway_trains/bogey/engines/717/engines_40.wav" +ENT.SoundNames["ted6_717"] = "subway_trains/bogey/engines/717/engines_48.wav" +ENT.SoundNames["ted7_717"] = "subway_trains/bogey/engines/717/engines_56.wav" +ENT.SoundNames["ted8_717"] = "subway_trains/bogey/engines/717/engines_64.wav" +ENT.SoundNames["ted9_717"] = "subway_trains/bogey/engines/717/engines_72.wav" +ENT.SoundNames["ted10_717"] = "subway_trains/bogey/engines/717/engines_80.wav" + +ENT.SoundNames["ted11_720"] = "subway_trains/bogey/engines/720/speed_88.wav" +ENT.SoundNames["ted1_720"] = "subway_trains/bogey/engines/720/speed_8.wav" +ENT.SoundNames["ted2_720"] = "subway_trains/bogey/engines/720/speed_16.wav" +ENT.SoundNames["ted3_720"] = "subway_trains/bogey/engines/720/speed_24.wav" +ENT.SoundNames["ted4_720"] = "subway_trains/bogey/engines/720/speed_32.wav" +ENT.SoundNames["ted5_720"] = "subway_trains/bogey/engines/720/speed_40.wav" +ENT.SoundNames["ted6_720"] = "subway_trains/bogey/engines/720/speed_48.wav" +ENT.SoundNames["ted7_720"] = "subway_trains/bogey/engines/720/speed_56.wav" +ENT.SoundNames["ted8_720"] = "subway_trains/bogey/engines/720/speed_64.wav" +ENT.SoundNames["ted9_720"] = "subway_trains/bogey/engines/720/speed_72.wav" +ENT.SoundNames["ted10_720"] = "subway_trains/bogey/engines/720/speed_80.wav" +--*0.975 +--*1.025 +ENT.SoundNames["flangea"] = "subway_trains/bogey/skrip1.wav" +ENT.SoundNames["flangeb"] = "subway_trains/bogey/skrip2.wav" +ENT.SoundNames["flange1"] = "subway_trains/bogey/flange_9.wav" +ENT.SoundNames["flange2"] = "subway_trains/bogey/flange_10.wav" +ENT.SoundNames["brakea_loop1"] = "subway_trains/bogey/braking_async1.wav" +ENT.SoundNames["brakea_loop2"] = "subway_trains/bogey/braking_async2.wav" +ENT.SoundNames["brake_loop1"] = "subway_trains/bogey/brake_rattle3.wav" +ENT.SoundNames["brake_loop2"] = "subway_trains/bogey/brake_rattle4.wav" +ENT.SoundNames["brake_loop3"] = "subway_trains/bogey/brake_rattle5.wav" +ENT.SoundNames["brake_loop4"] = "subway_trains/bogey/brake_rattle6.wav" +ENT.SoundNames["brake_loopb"] = "subway_trains/common/junk/junk_background_braking1.wav" +ENT.SoundNames["brake2_loop1"] = "subway_trains/bogey/brake_rattle2.wav" +ENT.SoundNames["brake2_loop2"] = "subway_trains/bogey/brake_rattle_h.wav" +ENT.SoundNames["brake_squeal1"] = "subway_trains/bogey/brake_squeal1.wav" +ENT.SoundNames["brake_squeal2"] = "subway_trains/bogey/brake_squeal2.wav" + +ENT.EngineSNDConfig = { + { + {"ted1_703" ,08,00,16,1}, + {"ted2_703" ,16,08-4,24,1}, + {"ted3_703" ,24,16-4,32,1}, + {"ted4_703" ,32,24-4,40,1}, + {"ted5_703" ,40,32-4,48,1}, + {"ted6_703" ,48,40-4,56,1}, + {"ted7_703" ,56,48-4,64,1}, + {"ted8_703" ,64,56-4,72,1}, + {"ted9_703" ,72,64-4,80,1}, + {"ted10_703",80,72-4,88,1}, + {"ted11_703",88,80-4 ,1}, + }, + { + {"ted1_717" ,08,00,16,1}, + {"ted2_717" ,16,08-4,24,1}, + {"ted3_717" ,24,16-4,32,1}, + {"ted4_717" ,32,24-4,40,1}, + {"ted5_717" ,40,32-4,48,1}, + {"ted6_717" ,48,40-4,56,1}, + {"ted7_717" ,56,48-4,64,1}, + {"ted8_717" ,64,56-4,72,1}, + {"ted9_717" ,72,64-4,80,1}, + {"ted10_717",80,72-4 ,1}, + }, + { + {"ted1_720" ,08,00,16,1*0.4}, + {"ted2_720" ,16,08-4,24,1*0.43}, + {"ted3_720" ,24,16-4,32,1*0.46}, + {"ted4_720" ,32,24-4,40,1*0.49}, + {"ted5_720" ,40,32-4,48,1*0.52}, + {"ted6_720" ,48,40-4,56,1*0.55}, + {"ted7_720" ,56,48-4,64,1*0.58}, + {"ted8_720" ,64,56-4,72,1*0.61}, + {"ted9_720" ,72,64-4,80,1*0.64}, + {"ted10_720",80,72-4,88,1*0.67}, + {"ted11_720",88,80-4 ,1*0.7}, + }, +} + +-------------------------------------------------------------------------------- +function ENT:ReinitializeSounds() + -- Remove old sounds + if self.Sounds then + for k,v in pairs(self.Sounds) do + v:Stop() + end + end + + -- Create sounds + self.Sounds = {} + for k,v in pairs(self.SoundNames) do + --[[local e = self + if (k == "brake3a") and IsValid(self:GetNW2Entity("TrainWheels")) then + e = self:GetNW2Entity("TrainWheels") + end]] + self.Sounds[k] = CreateSound(self, Sound(v)) + end + + self.MotorSoundType = nil +end +function ENT:SetSoundState(sound,volume,pitch,name,level ) + if not self.Sounds[sound] then + if self.SoundNames[name or sound] and (not wheels or IsValid(self:GetNW2Entity("TrainWheels"))) then + self.Sounds[sound] = CreateSound(wheels and self:GetNW2Entity("TrainWheels") or self, Sound(self.SoundNames[name or sound])) + else + return + end + end + local snd = self.Sounds[sound] + if (volume <= 0) or (pitch <= 0) then + if snd:IsPlaying() then + snd:ChangeVolume(0.0,0) + snd:Stop() + end + return + end + local pch = math.floor(math.max(0,math.min(255,100*pitch)) + math.random()) + local vol = math.max(0,math.min(255,2.55*volume)) + (0.001/2.55) + (0.001/2.55)*math.random() + if name~=false and not snd:IsPlaying() or name==false and snd:GetVolume()==0 then + --if not self.Playing[sound] or name~=false and not snd:IsPlaying() or name==false and snd:GetVolume()==0 then + if level and snd:GetSoundLevel() ~= level then + snd:Stop() + snd:SetSoundLevel(level) + end + snd:PlayEx(vol,pch+1) + end + --snd:SetDSP(22) + snd:ChangeVolume(vol,0) + snd:ChangePitch(pch+1,0) + --snd:SetDSP(22) +end + +function ENT:Initialize() + self.MotorPowerSound = 0 + self.SmoothAngleDelta = 0 + self.CurrentBrakeSqueal = 0 + self:ReinitializeSounds() +end + +function ENT:OnRemove() + if self.Sounds then + for k,v in pairs(self.Sounds) do + v:Stop() + end + self.Sounds = {} + end +end + +-------------------------------------------------------------------------------- +function ENT:Think() + self.PrevTime = self.PrevTime or RealTime()-0.33 + self.DeltaTime = (RealTime() - self.PrevTime) + self.PrevTime = RealTime() + -- Get interesting parameters + local train = self:GetNW2Entity("TrainEntity") + + local soundsmul = 1 + local streetC,tunnelC = 0,1 + if IsValid(train) then + streetC,tunnelC = train.StreetCoeff or 0,train.TunnelCoeff or 1 + soundsmul = math.Clamp(tunnelC^1.5+(streetC^0.5)*0.2,0,1) + end + + local speed = self:GetSpeed() + + -- Engine sound + local motorPower = self:GetMotorPower()*(1+math.max(0,(speed-55)/35)*0.4) + if self.MotorSoundType ~= self:GetNWInt("MotorSoundType",1) or self.DisableEngines ~= self:GetNWBool("DisableEngines") then + if self.MotorSoundType then + for _,snd in ipairs(self.EngineSNDConfig[self.MotorSoundType+1]) do + self:SetSoundState(snd[1],0,0) + end + end + + self.MotorSoundType = self:GetNWInt("MotorSoundType",1) + self.DisableEngines = self:GetNWBool("DisableEngines") + self.MotorSoundArr = self.EngineSNDConfig [self.MotorSoundType+1] + end + + if not self.DisableEngines and self.MotorSoundArr then + self.MotorPowerSound = math.Clamp(self.MotorPowerSound + (motorPower - self.MotorPowerSound)*self.DeltaTime*3,-1.5,1.5) + local t = RealTime()*2.5 + local modulation = math.max(0,(speed-60)/30)*0.7+(0.2 + 1.0*math.max(0,0.2+math.sin(t)*math.sin(t*3.12)*math.sin(t*0.24)*math.sin(t*4.0)))*math.Clamp((speed-15)/60,0,1) + local mod2 = 1.0-math.min(1.0,(math.abs(self.MotorPowerSound)/0.1)) + if (speed > -1.0) and (math.abs(self.MotorPowerSound)+modulation) >= 0.0 then + --local startVolRamp = 0.2 + 0.8*math.max(0.0,math.min(1.0,(speed - 1.0)*0.5)) + local powerVolRamp + if self.MotorSoundType==2 then + powerVolRamp = 0.2*modulation*mod2 + 6*math.abs(self.MotorPowerSound)--2.0*(math.abs(motorPower)^2) + else + powerVolRamp = 0.3*modulation*mod2 + 2*math.abs(self.MotorPowerSound)--2.0*(math.abs(motorPower)^2) + end + + --local k,x = 1.0,math.max(0,math.min(1.1,(speed-1.0)/80)) + --local motorPchRamp = (k*x^3 - k*x^2 + x) + --local motorPitch = 0.03+1.85*motorPchRamp + local volumemul = math.min(1,(speed/4)^3) + local motorsnd = math.min(1.0,math.max(0.0,1.25*(math.abs(self.MotorPowerSound)))) + local motorvol = (soundsmul^0.3)*math.Clamp(motorsnd + powerVolRamp,0,1)*volumemul + + for i,snd in ipairs(self.MotorSoundArr) do + local prev = self.MotorSoundArr[i-1] + local next = self.MotorSoundArr[i+1] + local volume = 1 + if prev and speed <= prev[4] then + volume = math.max(0,1-(prev[4]-speed)/(prev[4]-snd[3])) + elseif next and speed > next[3] then + volume = math.max(0,(snd[4]-speed)/(snd[4]-next[3])) + end + local pitch = math.max(0,speed/snd[2])+0.06*streetC + self:SetSoundState(snd[1],motorvol*volume*(snd[5] or 1),math.Clamp(pitch,0,2)) + end + end + end + + --Stop old sounds when we changind brake squeal type + if self.Async ~= self:GetNWBool("Async") then + self:SetSoundState("brake_loop1",0,0) + self:SetSoundState("brake_loop2",0,0) + self:SetSoundState("brake_loop3",0,0) + self:SetSoundState("brake_loop4",0,0) + self:SetSoundState("brake_loopb",0,0) + self:SetSoundState("brake2_loop1",0,0) + self:SetSoundState("brake2_loop2",0,0) + self:SetSoundState("brakea_loop1",0,0) + self:SetSoundState("brakea_loop2",0,0) + + self.Async = self:GetNWBool("Async") + end + + if self.Async then + local brakeSqueal = self:GetNW2Float("BrakeSqueal",0) + if (brakeSqueal) > 0.0 then + local nominalSqueal = self:GetNWFloat("SqualPitch",1) + local secondSqueal = math.Clamp(1-(speed-2)/5,0,1) + local squealPitch = nominalSqueal+secondSqueal*0.05 + local squealVolume = math.Clamp(speed/2,0,1) + + local volume = brakeSqueal*squealVolume* math.Clamp(1-(speed-2)/3,0,1) + self:SetSoundState("brakea_loop1",volume*(1-secondSqueal*0.5)*0.4,squealPitch,false,75) + self:SetSoundState("brakea_loop2",volume*secondSqueal*0.4,squealPitch,false,75) + elseif self.CurrentBrakeSqueal > 0 then + self:SetSoundState("brakea_loop1",0,0) + self:SetSoundState("brakea_loop2",0,0) + end + self.CurrentBrakeSqueal = brakeSqueal + else + local brakeSqueal1 = math.max(0.0,math.min(2,self:GetNW2Float("BrakeSqueal1"))) + if not self.SquealVolume or brakeSqueal1 <= 0 and self.CurrentBrakeSqueal > 0 or self.SquealType ~= self:GetNW2Int("SquealType",1) then + self.SquealType = self:GetNW2Int("SquealType",1) + self.SquealSound1 = "brake_loop"..self.SquealType + self.SquealVolume = self.SquealType == 1 and 0.2 or 1 + + self:SetSoundState("brake_loop1",0,0) + self:SetSoundState("brake_loop2",0,0) + self:SetSoundState("brake_loop3",0,0) + self:SetSoundState("brake_loop4",0,0) + self:SetSoundState("brake_loopb",0,0) + self:SetSoundState("brake2_loop1",0,0) + self:SetSoundState("brake2_loop2",0,0) + elseif brakeSqueal1 > 0 then + --local brakeRamp1 = math.min(1.0,math.max(0.0,(speed-10)/50.0))^1.5 + local brakeRamp2 = math.min(1.0,math.max(0.0,speed/3.0)) + local ramp = 0.3+math.Clamp((40-speed)/40,0,1)*0.7 + if self.SquealType <= 4 then + self:SetSoundState(self.SquealSound1,soundsmul*brakeSqueal1*ramp*self.SquealVolume,1+0.05*(1.0-brakeRamp2)) + --[[self:SetSoundState("brake_loop1",typ==1 and soundsmul*brakeSqueal1*ramp*0.2 or 0,1+0.05*(1.0-brakeRamp2)) + self:SetSoundState("brake_loop2",typ==2 and soundsmul*brakeSqueal1*ramp or 0,1+0.05*(1.0-brakeRamp2)) + self:SetSoundState("brake_loop3",typ==3 and soundsmul*brakeSqueal1*ramp or 0,1+0.05*(1.0-brakeRamp2)) + self:SetSoundState("brake_loop4",typ==4 and soundsmul*brakeSqueal1*ramp or 0,1+0.05*(1.0-brakeRamp2)) + self:SetSoundState("brake_loopb",typ<=4 and 0*soundsmul*brakeSqueal1*ramp*0.4 or 0,1+0.05*(1.0-brakeRamp2))]] + elseif self.SquealType <= 7 then + local loop_h = soundsmul*brakeSqueal1*ramp*0.5 + if loop_h > 0.1 and speed > 1.5 then + if not self.HighLoop then + self.HighLoop = math.random()>0.5 and "brake_squeal2" or "brake_squeal1" + end + self:SetSoundState(self.HighLoop,loop_h*1.5,1) + elseif loop_h<0.02 and self.HighLoop then + self:SetSoundState(self.HighLoop,0,0) + self.HighLoop = false + end + + self.StartLoopStrength = loop_h + if self.SquealType <= 6 then + self:SetSoundState("brake2_loop1",math.Clamp(loop_h*0.5,0,0.5),1+0.06*(1.0-brakeRamp2)) + end + if self.SquealType >= 6 then + self:SetSoundState("brake2_loop2",loop_h*0.3,1+0.06*(1.0-brakeRamp2)) + end + end + end + self.CurrentBrakeSqueal = brakeSqueal1 + end + + -- Generate procedural landscape thingy + local a = self:GetPos().x + local b = self:GetPos().y + local c = self:GetPos().z + local f = math.sin(c/200 + a*c/3e7 + b*c/3e7) --math.sin(a/3000)*math.sin(b/3000) + -- Calculate flange squeal + self.PreviousAngles = self.PreviousAngles or self:GetAngles() + local deltaAngleYaw = math.abs(self:GetAngles().yaw - self.PreviousAngles.yaw) + deltaAngleYaw = (deltaAngleYaw) % 360 + if deltaAngleYaw >= 180 then + deltaAngleYaw = deltaAngleYaw - 360 + end + + local speedAdd = math.max(1,math.min(2,1-(speed-60)/40)) + local deltaAngle = deltaAngleYaw/math.max(0.1,self.DeltaTime)*speedAdd + deltaAngle = math.max(math.min(1.0,f*10)*math.abs(deltaAngle),0) + + self.PreviousAngles = self:GetAngles() + -- Smooth it out + self.SmoothAngleDelta = math.min(7,self.SmoothAngleDelta + (deltaAngle - self.SmoothAngleDelta)*2*self.DeltaTime) + -- Create sound + local speed_mod = math.min(1.0,math.max(0.0,speed/5)) + local flangea = math.Clamp((speed-18)/25,0,1) + local x = self.SmoothAngleDelta + local f1 = math.max(0,x-0.5)*0.1 + local f2 = math.max(0,x-3-flangea*1)*0.6 + local f3 = math.max(0,x-4.0-flangea*1.5)*0.6 + local t = RealTime() + local modulation = 1.5*math.max(0,0.2+math.sin(t)*math.sin(t*3.12)*math.sin(t*0.24)*math.sin(t*4.0)) + local pitch40 = math.max(0.9,1.0+(speed-40.0)/160.0) + --local pitch60 = math.max(0.9,1.0+(speed-60.0)/160.0) + -- Play it + self:SetSoundState("flangea",(0.3+soundsmul*0.7)*(speed_mod)*math.Clamp(f2,0,1),pitch40) + self:SetSoundState("flangeb",(0.3+soundsmul*0.7)*(speed_mod)*math.Clamp(f3*modulation,0,1),pitch40) + self:SetSoundState("flange1",(0.3+soundsmul*0.7)*(speed_mod)*f1*modulation,pitch40) + self:SetSoundState("flange2",(0.3+soundsmul*0.7)*(speed_mod)*f1,pitch40) +end + + +function ENT:Draw() + self:DrawModel() +end + + +local c_gui +if IsValid(c_gui) then c_gui:Close() end + +local function addButton(parent,stext,state,scolor,btext,benabled,callback) + --local a = v[1] + local panel = vgui.Create("DPanel") + panel:Dock( TOP ) + panel:DockMargin( 5, 0, 5, 5 ) + panel:DockPadding( 5, 5, 5, 5 ) + if benabled then + local button = vgui.Create("DButton",panel) + button:Dock(RIGHT) + button:SetText(Metrostroi.GetPhrase(btext)) + button:DockPadding( 5, 5, 5, 5 ) + button:SizeToContents() + button:SetContentAlignment(5) + button:SetEnabled(benabled) + button.DoClick = callback + end + + --DrawCutText(panel,Metrostroi.GetPhrase("Workshop.Warning"),false,"DermaDefaultBold") + vgui.MetrostroiDrawCutText(panel,Metrostroi.GetPhrase(stext),false,"DermaDefaultBold") + vgui.MetrostroiDrawCutText(panel,Metrostroi.GetPhrase(state),scolor,"DermaDefaultBold") + + panel:InvalidateLayout( true ) + panel:SizeToChildren(true,true ) + parent:AddItem(panel) +end + +function ENT:DrawGUI(tbl) + if IsValid(c_gui) then c_gui:Close() end + c_gui = vgui.Create("DFrame") + c_gui:SetDeleteOnClose(true) + c_gui:SetTitle(Metrostroi.GetPhrase("Common.Bogey.Title")) + c_gui:SetSize(0, 0) + c_gui:SetDraggable(true) + c_gui:SetSizable(false) + c_gui:MakePopup() + local scrollPanel = vgui.Create( "DScrollPanel", c_gui ) + addButton(scrollPanel,"Common.Bogey.ContactState",tbl.relcontact and "Common.Bogey.CReleased" or "Common.Bogey.CPressed",tbl.relcontact and Color(150,50,0) or Color(0,150,0),tbl.relcontact and "Common.Bogey.CPress" or "Common.Bogey.CRelease",tbl.access,function() + net.Start("metrostroi-bogey-menu") + net.WriteEntity(self) + net.WriteUInt(0,8) + net.SendToServer() + c_gui:Close() + end) + if tbl.havepb then + addButton(scrollPanel,"Common.Bogey.ParkingBrakeState",tbl.pbdisabled and "Common.Bogey.PBDisabled" or "Common.Bogey.PBEnabled", Color(0,150,0),tbl.pbdisabled and "Common.Bogey.PBEnable" or "Common.Bogey.PBDisable",tbl.access,function() + net.Start("metrostroi-bogey-menu") + net.WriteEntity(self) + net.WriteUInt(1,8) + net.SendToServer() + c_gui:Close() + end) + end + + scrollPanel:Dock( FILL ) + scrollPanel:InvalidateLayout( true ) + scrollPanel:SizeToChildren(false,true) + local spPefromLayout = scrollPanel.PerformLayout + function scrollPanel:PerformLayout() + spPefromLayout(self) + if not self.First then self.First = true return end + local _,y = scrollPanel:ChildrenSize() + if self.Centered then return end + self.Centered = true + c_gui:SetSize(512,math.min(350,y)+35) + c_gui:Center() + end +end + + +net.Receive("metrostroi-bogey-menu",function() + local ent = net.ReadEntity() + if not IsValid(ent) or IsValid(c_gui) and c_gui.Entity ~= ent then return end + ent:DrawGUI{ + access = net.ReadBool(), + relcontact=net.ReadBool(), + havepb=net.ReadBool(), + pbdisabled=net.ReadBool(), + } +end) \ No newline at end of file diff --git a/lua/entities/gmod_train_bogey/init.lua b/lua/entities/gmod_train_bogey/init.lua new file mode 100644 index 0000000..4ae5c3e --- /dev/null +++ b/lua/entities/gmod_train_bogey/init.lua @@ -0,0 +1,719 @@ +--92 ЮÐИТРРÐССТОЯÐИЕ МЕЖДУ СЦЕПКОЙ И ПЕРВОЙ КОЛПÐРОЙ + +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +local DECOUPLE_TIMEOUT = 2 -- Time after decoupling furing wich a bogey cannot couple +local COUPLE_MAX_DISTANCE = 20 -- Maximum distance between couple offsets +local COUPLE_MAX_ANGLE = 18 -- Maximum angle between bogeys on couple + + +-------------------------------------------------------------------------------- +COUPLE_MAX_DISTANCE = COUPLE_MAX_DISTANCE ^ 2 +COUPLE_MAX_ANGLE = math.cos(math.rad(COUPLE_MAX_ANGLE)) + +-------------------------------------------------------------------------------- +ENT.Types = { + ["702"] = { + "models/metrostroi_train/bogey/metro_bogey_702.mdl", + Vector(0,0.0,-7),Angle(0,90,0),"models/metrostroi_train/bogey/metro_wheels_702.mdl", + Vector(0,-61,-14),Vector(0,61,-14), + nil, + Vector(4.3,-63,-3.3),Vector(4.3,63,-3.3), + }, + ["717"] = { + "models/metrostroi_train/bogey/metro_bogey_717.mdl", + Vector(0,0.0,-10),Angle(0,90,0),"models/metrostroi_train/bogey/metro_wheels_collector.mdl", + Vector(0,-61,-14),Vector(0,61,-14), + nil, + Vector(4.3,-63,-3.3),Vector(4.3,63,-3.3), + }, + ["720"] = { + "models/metrostroi_train/bogey/metro_bogey_collector.mdl", + Vector(0,0.0,-10),Angle(0,90,0),"models/metrostroi_train/bogey/metro_wheels_collector.mdl", + Vector(0,-61,-14),Vector(0,61,-14), + nil, + Vector(4.3,-63,-3.3),Vector(4.3,63,-3.3), + + }, + ["722"] = { + "models/metrostroi_train/bogey/metro_bogey_async.mdl", + Vector(0,0.0,-10),Angle(0,90,0),"models/metrostroi_train/bogey/metro_wheels_collector.mdl", + Vector(0,-61,-14),Vector(0,61,-14), + nil, + Vector(4.3,-63,-3.3),Vector(4.3,63,-3.3), + }, + tatra={ + "models/metrostroi/tatra_t3/tatra_bogey.mdl", + Vector(0,0.0,-3),Angle(0,90,0),nil, + Vector(0,-61,-14),Vector(0,61,-14), + nil, + Vector(4.3,-63,-3.3),Vector(4.3,63,-3.3), + }, + def={ + "models/metrostroi/metro/metro_bogey.mdl", + Vector(0,0.0,-10),Angle(0,90,0),nil, + Vector(0,-61,-14),Vector(0,61,-14), + nil, + Vector(4.3,-63,-3.3),Vector(4.3,63,-3.3), + }, +} + +ENT.SnakePos = Vector(-168.25,0,6.5) +ENT.SnakeAng = Angle(0,90,0) +function ENT:SetParameters() + local typ = self.Types[self.BogeyType or "717"] + self:SetModel(typ and typ[1] or "models/metrostroi/metro/metro_bogey.mdl") + self.PantLPos = typ and typ[5] + self.PantRPos = typ and typ[6] + self.BogeyOffset = typ and typ[7] + self.PantLCPos = typ and typ[8] + self.PantRCPos = typ and typ[9] +end +function ENT:Initialize() + self:SetParameters() + if not self.NoPhysics then + self:PhysicsInit(SOLID_VPHYSICS) + self:SetMoveType(MOVETYPE_VPHYSICS) + self:SetSolid(SOLID_VPHYSICS) + end + self:SetUseType(SIMPLE_USE) + + -- Set proper parameters for the bogey + if IsValid(self:GetPhysicsObject()) then + self:GetPhysicsObject():SetMass(5000) + end + + -- Store coupling point offset + self.CouplingPointOffset = Vector(-168.13,0,0) + + -- Create wire controls + if Wire_CreateInputs then + self.Inputs = Wire_CreateInputs(self,{ + "BrakeCylinderPressure", + "MotorCommand", "MotorForce", "MotorReversed", + "DisableSound" }) + self.Outputs = Wire_CreateOutputs(self,{ + "Speed", "BrakeCylinderPressure","Voltage" + }) + end + + -- Setup default motor state + self.Reversed = false + self.MotorForce = 30000.0 + self.MotorPower = 0.0 + self.Speed = 0 + self.SpeedSign = 1 + self.Acceleration = 0 + self.PneumaticBrakeForce = 100000.0 + self.DisableSound = 0 + + self.Variables = {} + + -- Pressure in brake cylinder + self.BrakeCylinderPressure = 0.0 -- atm + + self.Voltage = 0 + self.VoltageDrop = 0 + self.DropByPeople = 0 + self.PlayTime = { 0, 0 } + self.ContactStates = { false, false } + self.DisableContacts = false + self.DisableContactsManual = false + self.DisableParking = false + self.NextStates = { false,false } + self.Connectors = { } + self.CheckTimeout = 0 + + if self:GetNW2Int("SquealType",0)==0 then + self:SetNW2Int("SquealType",math.floor(math.random()*4)+1) + end +end + +function ENT:InitializeWheels() + -- Create missing wheels + if IsValid(self.Wheels) then SafeRemoveEntity(self.Wheels) end + local wheels = ents.Create("gmod_train_wheels") + local typ = self.Types[self.BogeyType or "717"] + wheels.Model = typ[4] + if typ and typ[3] then wheels:SetAngles(self:LocalToWorldAngles(typ[3])) end + if typ and typ[2] then wheels:SetPos(self:LocalToWorld(typ[2])) end + + wheels.WheelType = self.BogeyType + wheels.NoPhysics = self.NoPhysics + wheels:Spawn() + + if self.NoPhysics then + wheels:SetParent(self) + else + constraint.Weld(self,wheels,0,0,0,1,0) + end + if CPPI then wheels:CPPISetOwner(self:CPPIGetOwner() or self:GetNW2Entity("TrainEntity"):GetOwner()) end + wheels:SetNW2Entity("TrainBogey",self) + self.Wheels = wheels +end + +function ENT:OnRemove() + SafeRemoveEntity(self.Wheels) + if self.CoupledBogey ~= nil then + self:Decouple() + end +end + +function ENT:GetDebugVars() + return self.Variables +end + +function ENT:TriggerInput(iname, value) + if iname == "BrakeCylinderPressure" then + self.BrakeCylinderPressure = value + elseif iname == "MotorCommand" then + self.MotorPower = value + elseif iname == "MotorForce" then + self.MotorForce = value + elseif iname == "MotorReversed" then + self.Reversed = value > 0.5 + elseif iname == "DisableSound" then + self.DisableSound = math.max(0,math.min(3,math.floor(value))) + end +end + +--[[ Checks if there's an advballsocket between two entities +local function AreCoupled(ent1,ent2) + if ent1.CoupledBogey or ent2.CoupledBogey then return false end + local constrainttable = constraint.FindConstraints(ent1,"AdvBallsocket") + local coupled = false + for k,v in pairs(constrainttable) do + if v.Type == "AdvBallsocket" then + if( (v.Ent1 == ent1 or v.Ent1 == ent2) and (v.Ent2 == ent1 or v.Ent2 == ent2)) then + coupled = true + end + end + end + + return coupled +end]] + +-- Adv ballsockets ents by their CouplingPointOffset +function ENT:Couple(ent) + if IsValid(constraint.AdvBallsocket( + self, + ent, + 0, --bone + 0, --bone + self.CouplingPointOffset, + ent.CouplingPointOffset, + 0, --forcelimit + 0, --torquelimit + -25, --xmin + -10, --ymin + -25, --zmin + 25, --xmax + 10, --ymax + 25, --zmax + 0, --xfric + 0, --yfric + 0, --zfric + 0, --rotonly + 1 --nocollide + )) then + sound.Play("subway_trains/bogey/couple.mp3",(self:GetPos()+ent:GetPos())/2,70,100,1) + + self:OnCouple(ent) + ent:OnCouple(self) + end +end + +local function AreInCoupleDistance(ent1,ent2) + return ent2:LocalToWorld(ent2.CouplingPointOffset):DistToSqr(ent1:LocalToWorld(ent1.CouplingPointOffset)) < COUPLE_MAX_DISTANCE +end + +local function AreFacingEachother(ent1,ent2) + return ent1:GetForward():Dot(ent2:GetForward()) < -COUPLE_MAX_ANGLE +end + +function ENT:IsInTimeOut() + return (((self.DeCoupleTime or 0) + DECOUPLE_TIMEOUT) > CurTime()) +end + +function ENT:CanCouple() + if self.CoupledBogey then return false end + if self:IsInTimeOut() then return false end + if not constraint.CanConstrain(self,0) then return false end + return true +end + +-- This feels so wrong, any ideas how to improve this? +local function CanCoupleTogether(ent1,ent2) + if ent1.DontHaveCoupler or ent2.DontHaveCoupler then return false end + if ent2:GetClass() ~= ent1:GetClass() then return false end + --if not (ent1.CanCouple and ent1:CanCouple()) then return false end + --if not (ent2.CanCouple and ent2:CanCouple()) then return false end + if not AreInCoupleDistance(ent1,ent2) then return false end + if not AreFacingEachother(ent1,ent2) then return false end + return true +end + +-- Used the couple with other bogeys +function ENT:StartTouch(ent) + if CanCoupleTogether(self,ent) then + self:Couple(ent) + end +end + + +util.AddNetworkString("metrostroi-bogey-menu") +-- Used to decouple +function ENT:Use(ply) + net.Start("metrostroi-bogey-menu") + net.WriteEntity(self) + net.WriteBool(game.SinglePlayer() or not self.CPPICanUse or self:CPPICanUse(ply)) + net.WriteBool(self.DisableContactsManual) + net.WriteBool(self.ParkingBrakePressure~=nil) + net.WriteBool(self.DisableParking) + net.Send(ply) +end + +net.Receive("metrostroi-bogey-menu",function(_,ply) + local bogey = net.ReadEntity() + + if not game.SinglePlayer() and bogey.CPPICanUse and not bogey:CPPICanUse(ply) then return end + local id = net.ReadUInt(8) + if id==0 then + bogey.DisableContactsManual = not bogey.DisableContactsManual + end + if id==1 then + bogey.DisableParking = not bogey.DisableParking + end +end) + +function ENT:ConnectDisconnect(status) + local isfront = self:GetNW2Bool("IsForwardBogey") + local train = self:GetNW2Entity("TrainEntity") + if IsValid(train) then + if status ~= nil then + if status then train:OnBogeyConnect(self, isfront) else train:OnBogeyDisconnect(self, isfront) end + else + if (train.FrontCoupledBogeyDisconnect and isfront) or (train.RearCoupledBogeyDisconnect and not isfront) then + train:OnBogeyConnect(self, isfront) + if IsValid(self.CoupledBogey) then self.CoupledBogey:ConnectDisconnect(true) end + return + end + if (not train.FrontCoupledBogeyDisconnect and isfront) or (not train.RearCoupledBogeyDisconnect and not isfront) then + train:OnBogeyDisconnect(self, isfront) + if IsValid(self.CoupledBogey) then self.CoupledBogey:ConnectDisconnect(false) end + return + end + end + end +end + +function ENT:GetConnectDisconnect() + local isfront = self:GetNW2Bool("IsForwardBogey") + local train = self:GetNW2Entity("TrainEntity") + if IsValid(train) then + if (train.FrontCoupledBogeyDisconnect and isfront) or (train.RearCoupledBogeyDisconnect and not isfront) then + return false + end + if (not train.FrontCoupledBogeyDisconnect and isfront) or (not train.RearCoupledBogeyDisconnect and not isfront) then + return true + end + end +end + +local function removeAdvBallSocketBetweenEnts(ent1,ent2) + local constrainttable = constraint.FindConstraints(ent1,"AdvBallsocket") + for k,v in pairs(constrainttable) do + if (v.Ent1 == ent1 or v.Ent1 == ent2) and (v.Ent2 == ent1 or v.Ent2 == ent2) then + v.Constraint:Remove() + end + end +end + +function ENT:Decouple() + if self.CoupledBogey then + sound.Play("buttons/lever8.wav",(self:GetPos()+self.CoupledBogey:GetPos())/2) + removeAdvBallSocketBetweenEnts(self,self.CoupledBogey) + + self.CoupledBogey.CoupledBogey = nil + self.CoupledBogey:Decouple() + self.CoupledBogey = nil + end + + -- Above this runs on initiator, below runs on both + self.DeCoupleTime = CurTime() + self:OnDecouple() +end + + +function ENT:OnCouple(ent) + self.CoupledBogey = ent + + --Call OnCouple on our parent train as well + local parent = self:GetNW2Entity("TrainEntity") + local isforward = self:GetNW2Bool("IsForwardBogey") + if IsValid(parent) then + parent:OnCouple(ent,isforward) + end + if self.OnCoupleSpawner then self:OnCoupleSpawner() end +end + +function ENT:OnDecouple() + --Call OnDecouple on our parent train as well + local parent = self:GetNW2Entity("TrainEntity") + local isforward = self:GetNW2Bool("IsForwardBogey") + + if IsValid(parent) then + parent:OnDecouple(isforward) + end +end + +function ENT:CheckContact(pos,dir,id,cpos) + local result = util.TraceHull({ + start = self:LocalToWorld(pos), + endpos = self:LocalToWorld(pos + dir*10), + mask = -1, + filter = { self:GetNW2Entity("TrainEntity"), self }, + mins = Vector( -2, -2, -2 ), + maxs = Vector( 2, 2, 2 ) + }) + + if not result.Hit then return end + if result.HitWorld then return true end + + local traceEnt = result.Entity + if not self.Connectors[id] and traceEnt:GetClass() == "gmod_track_udochka" then + if not traceEnt.Timer and traceEnt.CoupledWith ~= self then + --local vec = Vector(pos.y < 0 and 1 or 1.1,pos.y < 0 and -1 or 1.05, 1) + traceEnt:SetPos(self:LocalToWorld(cpos)) + traceEnt:SetAngles(self:GetAngles()) + if IsValid(constraint.Weld(self,traceEnt,0,0,33000,true,false)) then + traceEnt:SetPos(self:LocalToWorld(cpos)) + traceEnt:SetAngles(self:GetAngles()) + traceEnt.Coupled = self + sound.Play("udochka_connect.wav",traceEnt:GetPos()) + self.Connectors[id] = traceEnt + DropEntityIfHeld(traceEnt) + --[[timer.Simple(0,function() + if not IsValid(traceEnt) or not traceEnt:IsPlayerHolding() then return end + traceEnt:ForcePlayerDrop() + if traceEnt.LastPickup and traceEnt.LastPickup:IsPlayer() then + traceEnt.LastPickup:DropObject() + end + end)]] + end + end + return false + elseif traceEnt:GetClass() == "player" and self.Voltage > 40 then + local pPos = traceEnt:GetPos() + self.VoltageDropByTouch = (self.VoltageDropByTouch or 0) + 1 + util.BlastDamage(traceEnt,traceEnt,pPos,64,3.0*self.Voltage) + + local effectdata = EffectData() + effectdata:SetOrigin(pPos + Vector(0,0,-16+math.random()*(40+0))) + util.Effect("cball_explode",effectdata,true,true) + sound.Play("ambient/energy/zap"..math.random(1,3)..".wav",pPos,75,math.random(100,150),1.0) + return + end + return result.Hit +end + +local C_Reqiure3rdRail = GetConVar("metrostroi_train_requirethirdrail") + +function ENT:CheckVoltage(dT) + -- Check contact states + if (CurTime() - self.CheckTimeout) <= 0.25 then return end + self.CheckTimeout = CurTime() + local supported = C_Reqiure3rdRail:GetInt() > 0 and Metrostroi.MapHasFullSupport() + local feeder = self.Feeder and Metrostroi.Voltages[self.Feeder] + local volt = feeder or Metrostroi.Voltage or 750 + + -- Non-metrostroi maps + if not supported then + self.Voltage = volt + self.NextStates[1] = true + self.NextStates[2] = true + return + end + + self.VoltageDropByTouch = 0 + self.NextStates[1] = not self.DisableContacts and not self.DisableContactsManual + and self:CheckContact(self.PantLPos,Vector(0,-1,0),1,self.PantLCPos) + self.NextStates[2] = not self.DisableContacts and not self.DisableContactsManual + and self:CheckContact(self.PantRPos,Vector(0, 1,0),2,self.PantRCPos) + + -- Detect changes in contact states + for i=1,2 do + local state = self.NextStates[i] + if state ~= self.ContactStates[i] then + self.ContactStates[i] = state + if not state then continue end + + self.VoltageDrop = -40*(0.5 + 0.5*math.random()) + + local dt = CurTime() - self.PlayTime[i] + self.PlayTime[i] = CurTime() + + local volume = 0.53 + if dt < 1.0 then volume = 0.43 end + if i == 1 then sound.Play("subway_trains/bogey/tr_"..math.random(1,5)..".wav",self:LocalToWorld(self.PantLPos),65,math.random(90,120),volume) end + if i == 2 then sound.Play("subway_trains/bogey/tr_"..math.random(1,5)..".wav",self:LocalToWorld(self.PantRPos),65,math.random(90,120),volume) end + + -- Sparking probability + local probability = math.Clamp(1-(self.MotorPower/2),0,1) + if math.random() > probability then + local effectdata = EffectData() + if i == 1 then effectdata:SetOrigin(self:LocalToWorld(self.PantLPos)) end + if i == 2 then effectdata:SetOrigin(self:LocalToWorld(self.PantRPos)) end + effectdata:SetNormal(Vector(0,0,-1)) + util.Effect("stunstickimpact", effectdata, true, true) + + local light = ents.Create("light_dynamic") + light:SetPos(effectdata:GetOrigin()) + light:SetKeyValue("_light","100 220 255") + light:SetKeyValue("style", 0) + light:SetKeyValue("distance", 256) + light:SetKeyValue("brightness", 5) + light:Spawn() + light:Fire("TurnOn","","0") + light.Time = CurTime() + timer.Simple(0.1,function() + SafeRemoveEntity(light) + end) + sound.Play("subway_trains/bogey/spark.mp3",effectdata:GetOrigin(),75,math.random(100,150),volume) + --self.Train:PlayOnce("zap",sound_source,0.7*volume,50+math.random(90,120)) + end + end + end + -- Voltage spikes + self.VoltageDrop = math.max(-30,math.min(30,self.VoltageDrop + (0 - self.VoltageDrop)*10*dT)) + + -- Detect voltage + self.Voltage = 0 + self.DropByPeople = 0 + for i=1,2 do + if self.ContactStates[i] then + self.Voltage = volt + self.VoltageDrop + elseif IsValid(self.Connectors[i]) and self.Connectors[i].Coupled == self then + self.Voltage = self.Connectors[i].Power and Metrostroi.Voltage or 0 + end + end + if self.VoltageDropByTouch > 0 then + local Rperson = 0.613 + local Iperson = Metrostroi.Voltage / (Rperson/(self.VoltageDropByTouch + 1e-9)) + self.DropByPeople = Iperson + end +end + +function ENT:Think() + -- Re-initialize wheels + if not IsValid(self.Wheels) or self.Wheels:GetNW2Entity("TrainBogey") ~= self then + self:InitializeWheels() + + constraint.NoCollide(self.Wheels,self,0,0) + if IsValid(self:GetNW2Entity("TrainEntity")) then + constraint.NoCollide(self.Wheels,self:GetNW2Entity("TrainEntity"),0,0) + end + end + + -- Update timing + self.PrevTime = self.PrevTime or CurTime() + self.DeltaTime = (CurTime() - self.PrevTime) + self.PrevTime = CurTime() + + self:SetNW2Entity("TrainWheels",self.Wheels) + self:CheckVoltage(self.DeltaTime) + + -- Skip physics related stuff + if self.NoPhysics or not self.Wheels:GetPhysicsObject():IsValid() then + self:SetMotorPower(self.MotorPower or 0) + self:SetSpeed(self.Speed or 0) + self:NextThink(CurTime()) + return true + end + + -- Get speed of bogey in km/h + local localSpeed = -self:GetVelocity():Dot(self:GetAngles():Forward()) * 0.06858 + local absSpeed = math.abs(localSpeed) + if self.Reversed then localSpeed = -localSpeed end + + local sign = 1 + if localSpeed < 0 then sign = -1 end + self.Speed = absSpeed + self.SpeedSign = self.Reversed and -sign or sign + + -- Calculate acceleration in m/s + self.Acceleration = 0.277778*(self.Speed - (self.PrevSpeed or 0)) / self.DeltaTime + self.PrevSpeed = self.Speed + + -- Add variables to debugger + self.Variables["Speed"] = self.Speed + self.Variables["Acceleration"] = self.Acceleration + + -- Calculate motor power + local motorPower = 0.0 + if self.MotorPower > 0.0 then + motorPower = math.Clamp(self.MotorPower, -1, 1) + else + motorPower = math.Clamp(self.MotorPower*sign, -1, 1) + end + -- Increace forces on slopes + local slopemul = 1 + local pitch = self:GetAngles().pitch*sign + if motorPower < 0 and pitch > 3 then + slopemul = slopemul + math.Clamp((math.abs(pitch)-3)/3,0,1) + else + slopemul = slopemul + math.Clamp((pitch-3)/3,0,1)*1.5 + end + + -- Final brake cylinder pressure + local pneumaticPow = self.PneumaticPow or 1 + local pB = not self.DisableParking and self.ParkingBrakePressure or 0 + local BrakeCP = (((self.BrakeCylinderPressure/2.7+pB/1.6)^pneumaticPow)*2.7)/4.5-- + (self.ParkingBrake and 1 or 0) + if (BrakeCP*4.5 > 1.5-math.Clamp(math.abs(pitch)/1,0,1)) and (absSpeed < 1) then + self.Wheels:GetPhysicsObject():SetMaterial("gmod_silent") + else + self.Wheels:GetPhysicsObject():SetMaterial("gmod_ice") + end + + -- Calculate forces + local motorForce = self.MotorForce*motorPower*slopemul + local pneumaticFactor = math.Clamp(0.5*self.Speed,0,1)*(1+math.Clamp((2-self.Speed)/2,0,1)*0.5) + local pneumaticForce = 0 + if BrakeCP >= 0.05 then + local slopemulBr = 1 + if -3 > pitch or pitch > 3 then + slopemulBr = 1 + math.Clamp((math.abs(pitch)-3)/3,0,1)*0.7 + end + pneumaticForce = -sign*pneumaticFactor*self.PneumaticBrakeForce*BrakeCP*slopemulBr + end + + -- Compensate forward friction + local compensateA = self.Speed / 86 + local compensateF = sign * self:GetPhysicsObject():GetMass() * compensateA + -- Apply sideways friction + local sideSpeed = -self:GetVelocity():Dot(self:GetAngles():Right()) * 0.06858 + if sideSpeed < 0.5 then sideSpeed = 0 end + local sideForce = sideSpeed * 0.5 * self:GetPhysicsObject():GetMass() + + -- Apply force + local dt_scale = 66.6/(1/self.DeltaTime) + --print(pneumaticForce) + local force = dt_scale*(motorForce + pneumaticForce + compensateF) + + local side_force = dt_scale*(sideForce) + + if self.Reversed then + self:GetPhysicsObject():ApplyForceCenter( self:GetAngles():Forward()*force + self:GetAngles():Right()*side_force) + else + self:GetPhysicsObject():ApplyForceCenter(-self:GetAngles():Forward()*force + self:GetAngles():Right()*side_force) + end + + -- Apply Z axis damping + local avel = self:GetPhysicsObject():GetAngleVelocity() + local avelz = math.min(20,math.max(-20,avel.z)) + local damping = Vector(0,0,-avelz) * 0.75 * dt_scale + self:GetPhysicsObject():AddAngleVelocity(damping) + + -- Calculate brake squeal + self.SquealSensitivity = 1 + local BCPress = math.abs(self.BrakeCylinderPressure) + self.RattleRandom = self.RattleRandom or 0.5+math.random()*0.2 + local PnF1 = math.Clamp((BCPress-0.6)/0.6,0,2) + local PnF2 = math.Clamp((BCPress-self.RattleRandom)/0.6,0,2) + local brakeSqueal1 = (PnF1*PnF2)*pneumaticFactor + + --local brakeSqueal2 = (PnF1*PnF3)*pneumaticFactor + -- Send parameters to client + if self.DisableSound < 1 then + self:SetMotorPower(motorPower) + end + + if self.DisableSound < 2 then + if self:GetNWBool("Async") then + self:SetNW2Float("BrakeSqueal",(self.BrakeCylinderPressure-0.9)/1.7) + else + self:SetNW2Float("BrakeSqueal1",brakeSqueal1) + end + end + if self.DisableSound < 3 then + self:SetSpeed(absSpeed) + end + self:NextThink(CurTime()) + + -- Trigger outputs + if Wire_TriggerOutput then + Wire_TriggerOutput(self, "Speed", absSpeed) + Wire_TriggerOutput(self, "Voltage", self.Voltage) + Wire_TriggerOutput(self, "BrakeCylinderPressure", self.BrakeCylinderPressure) + end + return true +end + + + +-------------------------------------------------------------------------------- +-- Default spawn function +-------------------------------------------------------------------------------- +function ENT:SpawnFunction(ply, tr) + local verticaloffset = 40 -- Offset for the train model, gmod seems to add z by default, nvm its you adding 170 :V + local distancecap = 2000 -- When to ignore hitpos and spawn at set distanace + local pos, ang = nil + local inhibitrerail = false + + if tr.Hit then + -- Setup trace to find out of this is a track + local tracesetup = {} + tracesetup.start=tr.HitPos + tracesetup.endpos=tr.HitPos+tr.HitNormal*80 + tracesetup.filter=ply + + local tracedata = util.TraceLine(tracesetup) + + if tracedata.Hit then + -- Trackspawn + pos = (tr.HitPos + tracedata.HitPos)/2 + Vector(0,0,verticaloffset) + ang = tracedata.HitNormal + ang:Rotate(Angle(0,90,0)) + ang = ang:Angle() + -- Bit ugly because Rotate() messes with the orthogonal vector | Orthogonal? I wrote "origional?!" :V + else + -- Regular spawn + if tr.HitPos:Distance(tr.StartPos) > distancecap then + -- Spawnpos is far away, put it at distancecap instead + pos = tr.StartPos + tr.Normal * distancecap + inhibitrerail = true + else + -- Spawn is near + pos = tr.HitPos + tr.HitNormal * verticaloffset + end + ang = Angle(0,tr.Normal:Angle().y,0) + end + else + -- Trace didn't hit anything, spawn at distancecap + pos = tr.StartPos + tr.Normal * distancecap + ang = Angle(0,tr.Normal:Angle().y,0) + end + + local ent = ents.Create(self.ClassName) + ent:SetPos(pos) + ent:SetAngles(ang) + ent:Spawn() + ent:Activate() + + if not inhibitrerail then Metrostroi.RerailBogey(ent) end + return ent +end + +function ENT:AcceptInput(inputName, activator, called, data) + if inputName == "OnFeederIn" then + self.Feeder = tonumber(data) + if self.Feeder and not Metrostroi.Voltages[self.Feeder] then + Metrostroi.Voltages[self.Feeder] = 0 + Metrostroi.Currents[self.Feeder] = 0 + end + elseif inputName == "OnFeederOut" then + self.Feeder = nil + end +end \ No newline at end of file diff --git a/lua/entities/gmod_train_bogey/shared.lua b/lua/entities/gmod_train_bogey/shared.lua new file mode 100644 index 0000000..02d315e --- /dev/null +++ b/lua/entities/gmod_train_bogey/shared.lua @@ -0,0 +1,62 @@ +ENT.Type = "anim" + +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (utility)" + +ENT.Spawnable = true +ENT.AdminSpawnable = false + +physenv.AddSurfaceData([[ +"gmod_silent" +{ + + "impacthard" "DoorSound.Null" + "impactsoft" "DoorSound.Null" + + "audiohardnessfactor" "0.0" + "audioroughnessfactor" "0.0" + + "scrapeRoughThreshold" "1.0" + "impactHardThreshold" "1.0" + "gamematerial" "X" +} +"gmod_ice" +{ + "friction" "0.01" + "elasticity" "0.01" + "audioroughnessfactor" "0.1" + "gamematerial" "X" +} +]]) +function ENT:GetSpeed() + return self:GetNW2Int("Speed")/5 +end +function ENT:GetMotorPower() + return self:GetNW2Int("MotorPower")/50 +end +function ENT:GetBrakeSqueal() + return self:GetNW2Int("BrakeSqueal")/10 +end + +if SERVER then + function ENT:SetSpeed(val) + if self.OldSpeed == math.floor(val*5) then return end + self.OldSpeed = math.floor(val*5) + self:SetNW2Int("Speed",self.OldSpeed) + end + + function ENT:SetMotorPower(val) + if self.OldMotorPower == math.floor(val*50) then return end + self.OldMotorPower = math.floor(val*50) + self:SetNW2Int("MotorPower",self.OldMotorPower) + end + + function ENT:SetBrakeSqueal(val) + if self.OldBrakeSqueal == math.floor(val*10) then return end + self.OldBrakeSqueal = math.floor(val*10) + self:SetNW2Int("BrakeSqueal",self.OldBrakeSqueal) + end +end \ No newline at end of file diff --git a/lua/entities/gmod_train_couple/cl_init.lua b/lua/entities/gmod_train_couple/cl_init.lua new file mode 100644 index 0000000..87797a4 --- /dev/null +++ b/lua/entities/gmod_train_couple/cl_init.lua @@ -0,0 +1,177 @@ +include("shared.lua") + +function ENT:Initialize() +end + +function ENT:OnRemove() +end + +-------------------------------------------------------------------------------- +function ENT:Think() +end + +local c_gui +if IsValid(c_gui) then c_gui:Close() end + +local function addButton(parent,stext,state,scolor,btext,benabled,callback) + --local a = v[1] + local panel = vgui.Create("DPanel") + panel:Dock( TOP ) + panel:DockMargin( 5, 0, 5, 5 ) + panel:DockPadding( 5, 5, 5, 5 ) + if benabled then + local button = vgui.Create("DButton",panel) + button:Dock(RIGHT) + button:SetText(Metrostroi.GetPhrase(btext)) + button:DockPadding( 5, 5, 5, 5 ) + button:SizeToContents() + button:SetContentAlignment(5) + button:SetEnabled(benabled) + button.DoClick = callback + end + + --DrawCutText(panel,Metrostroi.GetPhrase("Workshop.Warning"),false,"DermaDefaultBold") + vgui.MetrostroiDrawCutText(panel,Metrostroi.GetPhrase(stext),false,"DermaDefaultBold") + vgui.MetrostroiDrawCutText(panel,Metrostroi.GetPhrase(state),scolor,"DermaDefaultBold") + + panel:InvalidateLayout( true ) + panel:SizeToChildren(true,true ) + parent:AddItem(panel) +end + +function ENT:DrawGUI(tbl) + if IsValid(c_gui) then c_gui:Close() end + local c_gui = vgui.Create("DFrame") + c_gui:SetDeleteOnClose(true) + c_gui:SetTitle(Metrostroi.GetPhrase("Common.Couple.Title")) + c_gui:SetSize(0, 0) + c_gui:SetDraggable(true) + c_gui:SetSizable(false) + c_gui:MakePopup() + local scrollPanel = vgui.Create( "DScrollPanel", c_gui ) + addButton(scrollPanel,"Common.Couple.CoupleState",tbl.coupled and "Common.Couple.Coupled" or "Common.Couple.Uncoupled", Color(0,150,0),"Common.Couple.Uncouple",tbl.coupled and tbl.access,function(button) + net.Start("metrostroi-coupler-menu") + net.WriteEntity(self) + net.WriteUInt(0,8) + net.SendToServer() + c_gui:Close() + end) + if tbl.isolpresent then + addButton(scrollPanel,"Common.Couple.IsolState",tbl.isolated and "Common.Couple.Isolated" or "Common.Couple.Opened", Color(0,150,0),tbl.isolated and "Common.Couple.Open" or "Common.Couple.Isolate",tbl.access,function(button) + net.Start("metrostroi-coupler-menu") + net.WriteEntity(self) + net.WriteUInt(1,8) + net.SendToServer() + c_gui:Close() + end) + end + if tbl.haveEKK then + addButton(scrollPanel,"Common.Couple.EKKState",tbl.ekk_disc and "Common.Couple.Disconnected" or "Common.Couple.Connected",tbl.ekk_disc and Color(150,50,0) or Color(0,150,0),tbl.ekk_disc and "Common.Couple.Connect" or "Common.Couple.Disconnect",tbl.access,function(button) + net.Start("metrostroi-coupler-menu") + net.WriteEntity(self) + net.WriteUInt(2,8) + net.SendToServer() + c_gui:Close() + end) + end + + scrollPanel:Dock( FILL ) + scrollPanel:InvalidateLayout( true ) + scrollPanel:SizeToChildren(false,true) + local spPefromLayout = scrollPanel.PerformLayout + function scrollPanel:PerformLayout() + spPefromLayout(self) + if not self.First then self.First = true return end + local x,y = scrollPanel:ChildrenSize() + if self.Centered then return end + self.Centered = true + c_gui:SetSize(512,math.min(350,y)+35) + c_gui:Center() + end +end + + +function ENT:DrawGUIHTML(tbl) + if IsValid(c_gui) then c_gui:Close() end + c_gui = vgui.Create("DFrame") + c_gui:SetDeleteOnClose(true) + c_gui:SetTitle(Metrostroi.GetPhrase("Common.Couple.Title")) + c_gui:SetSize(640, 400) + c_gui:SetDraggable(true) + c_gui:SetSizable(false) + c_gui:Center() + local html = vgui.Create( "DHTML" , c_gui ) + html:Dock( FILL ) + html:SetHTML( [[ + + + + + + + + + + +
+
+

Меню Ñцепки

+
+
+

+ СоÑтоÑние Ñцепки +
Сцеплено
+

+ +
+
+
+
+

+ СоÑтоÑние концевых кранов +
Открыты
+

+ +
+
+
+
+

+ СоÑтоÑние ЭКК +
Разъединена
+

+ +
+
+
+
+ + + ]] ) + html:SetAllowLua( true ) + html:ConsoleMessage( print) + html:AddFunction( "metrostroi", "getText", Metrostroi.GetPhrase) + + c_gui:MakePopup() + + +end +net.Receive("metrostroi-coupler-menu",function() + local ent = net.ReadEntity() + if not IsValid(ent) or IsValid(c_gui) and c_gui.Entity ~= ent then return end + ent:DrawGUI{ + access = net.ReadBool(), + coupled=net.ReadBool(), + isolpresent=net.ReadBool(), + isolated=net.ReadBool(), + haveEKK=not net.ReadBool(), + ekk_disc=net.ReadBool(), + } +end) \ No newline at end of file diff --git a/lua/entities/gmod_train_couple/init.lua b/lua/entities/gmod_train_couple/init.lua new file mode 100644 index 0000000..414688c --- /dev/null +++ b/lua/entities/gmod_train_couple/init.lua @@ -0,0 +1,323 @@ +--92 ЮÐИТРРÐССТОЯÐИЕ МЕЖДУ СЦЕПКОЙ И ПЕРВОЙ КОЛПÐРОЙ + +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +local DECOUPLE_TIMEOUT = 2 -- Time after decoupling furing wich a Coupler cannot couple +local COUPLE_MAX_DISTANCE = 20 -- Maximum distance between couple offsets +local COUPLE_MAX_ANGLE = 18 -- Maximum angle between Couplers on couple + +-------------------------------------------------------------------------------- +COUPLE_MAX_DISTANCE = COUPLE_MAX_DISTANCE ^ 2 +COUPLE_MAX_ANGLE = math.cos(math.rad(COUPLE_MAX_ANGLE)) +--Model,Couple pos,Snake pos,Snake ang +ENT.Types = { + ["717"] = {"models/metrostroi_train/bogey/metro_couple_717.mdl",Vector(65,0,0),Vector(65.1,1,-4.9),Angle(0,-90,0)}, + ["702"] = {"models/metrostroi_train/bogey/metro_couple_ezh.mdl",Vector(65,0,0),Vector(65.1,1,-4.9),Angle(0,-90,0)}, + ["722"] = {"models/metrostroi_train/bogey/metro_couple_noekk.mdl",Vector(65,0,0),Vector(65.1,1,-4.9),Angle(0,-90,0)}, + def={"models/metrostroi_train/bogey/metro_couple_717.mdl",Vector(65,0,0),Vector(65.25,0,6.5),Angle(0,90,0)}, +} + +function ENT:SetParameters() + local typ = self.Types[self.CoupleType or "def"] + self:SetModel(typ and typ[1] or "models/metrostroi_train/bogey/metro_couple.mdl") + self.CouplingPointOffset = typ and typ[2] or Vector(65,0,0) + self.SnakePos = typ and typ[3] or Vector(65,0,0) + self.SnakeAng = typ and typ[4] or Angle(180,90,0) +end + +function ENT:Initialize() + self:SetParameters() + if not self.NoPhysics then + self:PhysicsInit(SOLID_VPHYSICS) + self:SetMoveType(MOVETYPE_VPHYSICS) + self:SetSolid(SOLID_VPHYSICS) + end + self:SetUseType(SIMPLE_USE) + + -- Set proper parameters for the Coupler + if IsValid(self:GetPhysicsObject()) then + self:GetPhysicsObject():SetMass(5000) + end +end + + +function ENT:OnRemove() + if self.CoupledEnt ~= nil then + self:Decouple() + end +end +local function AreCoupled(ent1,ent2) + if ent1.Coupled or ent2.Coupled then return false end + local constrainttable = constraint.FindConstraints(ent1,"Weld") + local coupled = false + for k,v in pairs(constrainttable) do + if v.Type == "Weld" then + if( (v.Ent1 == ent1 or v.Ent1 == ent2) and (v.Ent2 == ent1 or v.Ent2 == ent2)) then + coupled = true + end + end + end + + return coupled +end + +-- Adv ballsockets ents by their CouplingPointOffset +function ENT:Couple(ent) + local strain = self:GetNW2Entity("TrainEntity") + local etrain = ent:GetNW2Entity("TrainEntity") + if IsValid(strain) then + --self:SetPos(strain:LocalToWorld(self.SpawnPos)) + self:SetAngles(strain:LocalToWorldAngles(self.SpawnAng)) + end + if IsValid(etrain) then + --ent:SetPos(etrain:LocalToWorld(ent.SpawnPos)) + ent:SetAngles(etrain:LocalToWorldAngles(ent.SpawnAng)) + end + ent:SetPos(self:LocalToWorld(self.CouplingPointOffset*Vector(2,-1,-1))) + ent:SetAngles(self:LocalToWorldAngles(Angle(0,180,0))) + self:SetPos(ent:LocalToWorld(ent.CouplingPointOffset*Vector(2,-1,-1))) + self:SetAngles(ent:LocalToWorldAngles(Angle(0,180,0))) + if IsValid(constraint.Weld( + self, + ent, + 0, --bone + 0, --bone + --self.CouplingPointOffset, + --ent.CouplingPointOffset, + 0 --forcelimit + ----0, --torquelimit + ---25, --xmin + ---10, --ymin + ---25, --zmin + --25, --xmax + --10, --ymax + --25, --zmax + --0, --xfric + --0, --yfric + --0, --zfric + --0, --rotonly + --1 --nocollide + )) then + sound.Play("subway_trains/bogey/couple.mp3",(self:GetPos()+ent:GetPos())/2,70,100,1) + + self:OnCouple(ent) + ent:OnCouple(self) + end +end + +local function AreInCoupleDistance(ent,self) + return self:LocalToWorld(self.CouplingPointOffset):DistToSqr(ent:LocalToWorld(ent.CouplingPointOffset)) < COUPLE_MAX_DISTANCE +end + + +local function AreFacingEachother(ent1,ent2) + return ent1:GetForward():Dot(ent2:GetForward()) < - COUPLE_MAX_ANGLE +end + +function ENT:IsInTimeOut() + return (((self.DeCoupleTime or 0) + DECOUPLE_TIMEOUT) > CurTime()) +end + +function ENT:CanCouple() + if self.CoupledEnt then return false end + if self:IsInTimeOut() then return false end + if not constraint.CanConstrain(self,0) then return false end + return true +end + +-- This feels so wrong, any ideas how to improve this? +local function CanCoupleTogether(ent1,ent2) + if not (ent1.CanCouple and ent1:CanCouple()) then return false end + if not (ent2.CanCouple and ent2:CanCouple()) then return false end + if ent2:GetClass() ~= ent1:GetClass() then return false end + if not AreInCoupleDistance(ent1,ent2) then return false end + if not AreFacingEachother(ent1,ent2) then return false end + return true +end + +-- Used the couple with other Couplers +function ENT:StartTouch(ent) + if CanCoupleTogether(self,ent) then + self:Couple(ent) + end +end + + +util.AddNetworkString("metrostroi-coupler-menu") +-- Used to decouple +function ENT:Use(ply) + local train = self:GetNW2Entity("TrainEntity") + local isfront = self:GetNW2Bool("IsForwardCoupler") + net.Start("metrostroi-coupler-menu") + net.WriteEntity(self) + net.WriteBool(not self.CPPICanUse or self:CPPICanUse(ply)) + net.WriteBool(self.CoupledEnt ~= nil) + if IsValid(train) then + if isfront and train.FrontBrakeLineIsolation and train.FrontTrainLineIsolation then + net.WriteBool(true) + net.WriteBool(train.FrontBrakeLineIsolation.Value>0 and train.FrontTrainLineIsolation.Value>0) + elseif not isfront and train.RearBrakeLineIsolation and train.RearTrainLineIsolation then + net.WriteBool(true) + net.WriteBool(train.RearBrakeLineIsolation.Value>0 and train.RearTrainLineIsolation.Value>0) + else + net.WriteBool(false) + net.WriteBool(false) + end + else + net.WriteBool(false) + net.WriteBool(false) + end + net.WriteBool(self.CoupleType=="722") + net.WriteBool(self.EKKDisconnected) + net.Send(ply) + --[[ if self.CoupledEnt ~= nil then + local tr = ply:GetEyeTrace() + if not tr.Hit then return end + if self:LocalToWorld(self.CouplingPointOffset):Distance(tr.HitPos) < 25 then + self:Decouple() + end + end--]] +end + +function ENT:ElectricDisconnected() + if not IsValid(self.CoupledEnt) then return end + return self.EKKDisconnected or self.CoupledEnt.EKKDisconnected +end + +net.Receive("metrostroi-coupler-menu",function(_,ply) + local bogey = net.ReadEntity() + local train = bogey:GetNW2Entity("TrainEntity") + local isfront = bogey:GetNW2Bool("IsForwardCoupler") + + if bogey.CPPICanUse and not bogey:CPPICanUse(ply) then return end + local id = net.ReadUInt(8) + if id==0 and bogey.CoupledEnt ~= nil then bogey:Decouple() end + if id==1 then + if not IsValid(train) then return end + if isfront and train.FrontBrakeLineIsolation and train.FrontTrainLineIsolation then + local state = train.FrontBrakeLineIsolation.Value>0 or train.FrontTrainLineIsolation.Value>0 + train.FrontBrakeLineIsolation:TriggerInput("Set",state and 0 or 1) + train.FrontTrainLineIsolation:TriggerInput("Set",state and 0 or 1) + if IsValid(train.FrontTrain)then + local ftrain = train.FrontTrain + if ftrain.RearTrain==train and train.RearBrakeLineIsolation and train.RearTrainLineIsolation then + ftrain.RearBrakeLineIsolation:TriggerInput("Set",state and 0 or 1) + ftrain.RearTrainLineIsolation:TriggerInput("Set",state and 0 or 1) + elseif ftrain.FrontTrain==train and ftrain.FrontBrakeLineIsolation and ftrain.FrontTrainLineIsolation then + ftrain.FrontBrakeLineIsolation:TriggerInput("Set",state and 0 or 1) + ftrain.FrontTrainLineIsolation:TriggerInput("Set",state and 0 or 1) + end + end + elseif not isfront and train.RearBrakeLineIsolation and train.RearTrainLineIsolation then + local state = train.RearBrakeLineIsolation.Value>0 or train.RearTrainLineIsolation.Value>0 + train.RearBrakeLineIsolation:TriggerInput("Set",state and 0 or 1) + train.RearTrainLineIsolation:TriggerInput("Set",state and 0 or 1) + if IsValid(train.RearTrain)then + local rtrain = train.RearTrain + if rtrain.RearTrain==train and train.RearBrakeLineIsolation and train.RearTrainLineIsolation then + rtrain.RearBrakeLineIsolation:TriggerInput("Set",state and 0 or 1) + rtrain.RearTrainLineIsolation:TriggerInput("Set",state and 0 or 1) + elseif rtrain.FrontTrain==train and rtrain.FrontBrakeLineIsolation and rtrain.FrontTrainLineIsolation then + rtrain.FrontBrakeLineIsolation:TriggerInput("Set",state and 0 or 1) + rtrain.FrontTrainLineIsolation:TriggerInput("Set",state and 0 or 1) + end + end + end + end + if id==2 then + bogey.EKKDisconnected = not bogey.EKKDisconnected + if bogey.CoupledEnt ~= nil then + bogey.CoupledEnt.EKKDisconnected = bogey.EKKDisconnected + if IsValid(train) then train:OnConnectDisconnect() end + local coupledTrain = bogey.CoupledEnt:GetNW2Entity("TrainEntity") + if IsValid(coupledTrain) then coupledTrain:OnConnectDisconnect() end + end + end +end) + +function ENT:ConnectDisconnect(status) + local isfront = self:GetNW2Bool("IsForwardCoupler") + local train = self:GetNW2Entity("TrainEntity") + if IsValid(train) then + if status ~= nil then + if status then train:OnCouplerConnect(self, isfront) else train:OnCouplerDisconnect(self, isfront) end + else + if (train.FrontCoupledCouplerDisconnect and isfront) or (train.RearCoupledCouplerDisconnect and not isfront) then + train:OnCouplerConnect(self, isfront) + if IsValid(self.Coupled) then self.CoupledEnt:ConnectDisconnect(true) end + return + end + if (not train.FrontCoupledCouplerDisconnect and isfront) or (not train.RearCoupledCouplerDisconnect and not isfront) then + train:OnCouplerDisconnect(self, isfront) + if IsValid(self.Coupled) then self.CoupledEnt:ConnectDisconnect(false) end + return + end + end + end +end + +function ENT:GetConnectDisconnect() + local isfront = self:GetNW2Bool("IsForwardCoupler") + local train = self:GetNW2Entity("TrainEntity") + if IsValid(train) then + if (train.FrontCoupledCouplerDisconnect and isfront) or (train.RearCoupledCouplerDisconnect and not isfront) then + return false + end + if (not train.FrontCoupledCouplerDisconnect and isfront) or (not train.RearCoupledCouplerDisconnect and not isfront) then + return true + end + end +end + +local function removeAdvBallSocketBetweenEnts(ent1,ent2) + local constrainttable = constraint.FindConstraints(ent1,"Weld") + for k,v in pairs(constrainttable) do + if (v.Ent1 == ent1 or v.Ent1 == ent2) and (v.Ent2 == ent1 or v.Ent2 == ent2) then + v.Constraint:Remove() + end + end +end + +function ENT:Decouple() + if IsValid(self.CoupledEnt) then + sound.Play("buttons/lever8.wav",(self:GetPos()+self.CoupledEnt:GetPos())/2) + removeAdvBallSocketBetweenEnts(self,self.CoupledEnt) + self.CoupledEnt.CoupledEnt = nil + self.CoupledEnt:Decouple() + end + self.CoupledEnt = nil + + -- Above this runs on initiator, below runs on both + self.DeCoupleTime = CurTime() + self:OnDecouple() +end + + +function ENT:OnCouple(ent) + self.CoupledEnt = ent + + --Call OnCouple on our parent train as well + local parent = self:GetNW2Entity("TrainEntity") + local isforward = self:GetNW2Bool("IsForwardCoupler") + if IsValid(parent) then + parent:OnCouple(ent,isforward) + end + if self.OnCoupleSpawner then self:OnCoupleSpawner() end +end + +function ENT:OnDecouple() + --Call OnDecouple on our parent train as well + local parent = self:GetNW2Entity("TrainEntity") + local isforward = self:GetNW2Bool("IsForwardCoupler") + + if IsValid(parent) then + parent:OnDecouple(isforward) + end +end + +function ENT:Think() + self:NextThink(CurTime()+1) + return true +end diff --git a/lua/entities/gmod_train_couple/shared.lua b/lua/entities/gmod_train_couple/shared.lua new file mode 100644 index 0000000..81700a9 --- /dev/null +++ b/lua/entities/gmod_train_couple/shared.lua @@ -0,0 +1,10 @@ +ENT.Type = "anim" + +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (utility)" + +ENT.Spawnable = true +ENT.AdminSpawnable = false \ No newline at end of file diff --git a/lua/entities/gmod_train_dlight.lua b/lua/entities/gmod_train_dlight.lua new file mode 100644 index 0000000..d7677f7 --- /dev/null +++ b/lua/entities/gmod_train_dlight.lua @@ -0,0 +1,110 @@ +--[[------------------------------------------------------------------------- +Client light_dynamic entity +---------------------------------------------------------------------------]] +AddCSLuaFile() +ENT.Type = "anim" +ENT.PrintName = "Clientside dlight" + +ENT.Spawnable = false +ENT.AdminSpawnable = false + +if SERVER then return end +MetrostroiDLights = MetrostroiDLights or 0 + +function ENT:Initialize() + self.ID = 817200-MetrostroiDLights + MetrostroiDLights = MetrostroiDLights + 3 + + self.Strength = 1 + self.Color = Color(255,220,80) + self.Brightness = 1 + + self.AffectW = true + + self:SetSize(512) + + self:MakeDLight() +end + +function ENT:Think() + self:MakeDLight() + --[[ + if not self.Created then + self:MakeDLight() + return + end + self.DLight.Pos = self:GetPos() + --self.DLight.Brightness = 5 + self.DLight.Size = self.Size + self.DLight.Decay = self.Size * 50 + self.DLight.DieTime = CurTime() + 1]] +end + +function ENT:SetDColor(col) + --[[if self.Created then + self.DLight.r = col.r*self.Strength + self.DLight.g = col.g*self.Strength + self.DLight.b = col.b*self.Strength + end]] + self.Color = col +end + +function ENT:SetLightStrength(br) + --[[if self.Created then + self.DLight.r = self.Color.r*br + self.DLight.g = self.Color.g*br + self.DLight.b = self.Color.b*br + end]] + self.Strength = br +end + +function ENT:SetBrightness(br) + --if self.Created then self.DLight.Brightness = br end + self.Brightness = br +end +function ENT:SetSize(sz) + self.Size = sz +end +function ENT:SetStyle(style) + --[[if self.Created then + self.DLight.Style = style + end]] + self.Style = style +end + +function ENT:MakeDLight() + if DLightFreeze ~= RealTime() then self.Created = true end + DLightFreeze = RealTime() + + self.DLight = DynamicLight(self.ID, not self.AffectW) + self.DLight.Style = self.Style + self.DLight.r = self.Color.r*self.Strength + self.DLight.g = self.Color.g*self.Strength + self.DLight.b = self.Color.b*self.Strength + self.DLight.nomodel = self.nomodel + self.DLight.Brightness = self.Brightness + + self.DLight.Pos = self:GetPos() + --self.DLight.Brightness = 5 + self.DLight.Size = self.Size + self.DLight.Decay = self.Size * 50 + self.DLight.DieTime = CurTime() + 1 +end + +function ENT:AffectWorld(affect) + --[[self.AffectW = affect + self.Created = false + self:DLight()]] +end +function ENT:OnRemove() + if self.Created then + self.DLight.DieTime = 0 + end +end +function ENT:AffectModels(affect) + --[[if self.Created then + self.DLight.nomodel = not affect + end]] + self.nomodel = not affect +end +function ENT:Draw() end \ No newline at end of file diff --git a/lua/entities/gmod_train_door/cl_init.lua b/lua/entities/gmod_train_door/cl_init.lua new file mode 100644 index 0000000..339429d --- /dev/null +++ b/lua/entities/gmod_train_door/cl_init.lua @@ -0,0 +1,53 @@ +include("shared.lua") +local frame = nil +function CreateFrame() + if !frame or !frame:IsValid() then + local self = net.ReadEntity() + local Map = game.GetMap() or "" + if Map:find("gm_metrostroi") and Map:find("lite") then + Map = "gm_metrostroi_lite" + elseif Map:find("gm_metrostroi") then + Map = "gm_metrostroi" + elseif Map:find("gm_mus_orange_line") and Map:find("long") then + Map = "gm_orange" + elseif Map:find("gm_mus_orange_line") then + Map = "gm_orange_lite" + end + frame = vgui.Create("DFrame") + frame:SetDeleteOnClose(true) + frame:SetTitle("Dispatch control") + --frame:SetSize(275, 34+24*17) + frame:SetDraggable(false) + frame:SetSizable(false) + frame:MakePopup() + + frame:SetSize(ScrW()-40,ScrH()-40) + frame:Center() + local StationChoose = vgui.Create( "DComboBox",frame ) + StationChoose:SetPos( 5, 30 ) + StationChoose:SetSize( 250, 20 ) + StationChoose:SetValue( "Choose station" ) + for k,v in pairs(Metrostroi.WorkingStations[Map][1]) do + if Metrostroi.AnnouncerData[v] then StationChoose:AddChoice(Metrostroi.AnnouncerData[v][1]) end + end + + local PlayerChoose = vgui.Create( "DComboBox",frame ) + PlayerChoose:SetPos( ScrW()-300,30 ) + PlayerChoose:SetSize( 250, 20 ) + PlayerChoose:SetValue( "Choose player" ) + for i = 1,20 do + PlayerChoose:AddChoice(i) + end + + local Main = vgui.Create( "DPanel",frame ) + Main:SetPos(0,60) + Main:SetSize(frame:GetWide(),frame:GetTall()-60) + Main.Paint = function(self,w,h) + surface.DrawRect(5, 0, w-10, h-5) + end + + end +end +function ENT:Initialize() +end +net.Receive("TrackController",CreateFrame) \ No newline at end of file diff --git a/lua/entities/gmod_train_door/init.lua b/lua/entities/gmod_train_door/init.lua new file mode 100644 index 0000000..9fe3b90 --- /dev/null +++ b/lua/entities/gmod_train_door/init.lua @@ -0,0 +1,29 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") +util.AddNetworkString("TrackController") +local function ShowWindowOnCL(ply,ent) + net.Start("TrackController") + net.WriteEntity(ent) + net.Send(ply) +end +function ENT:Initialize() + self:SetModel("models/metrostroi/signals/clock_time.mdl") +end + +function ENT:Think() +end +function ENT:SpawnFunction( ply, tr, ClassName ) + + if ( !tr.Hit ) then return end + + local SpawnPos = tr.HitPos + tr.HitNormal * 16 + local ent = ents.Create( ClassName ) + ent:SetPos( SpawnPos ) + ent:Spawn() + ent:Activate() + + ShowWindowOnCL(ply,ent) + return ent + +end \ No newline at end of file diff --git a/lua/entities/gmod_train_door/shared.lua b/lua/entities/gmod_train_door/shared.lua new file mode 100644 index 0000000..58393da --- /dev/null +++ b/lua/entities/gmod_train_door/shared.lua @@ -0,0 +1,7 @@ +ENT.Type = "anim" + +ENT.PrintName = "Train door" +ENT.Category = "Metrostroi (utility)" + +ENT.Spawnable = false +ENT.AdminSpawnable = false diff --git a/lua/entities/gmod_train_sound_provider/cl_init.lua b/lua/entities/gmod_train_sound_provider/cl_init.lua new file mode 100644 index 0000000..339429d --- /dev/null +++ b/lua/entities/gmod_train_sound_provider/cl_init.lua @@ -0,0 +1,53 @@ +include("shared.lua") +local frame = nil +function CreateFrame() + if !frame or !frame:IsValid() then + local self = net.ReadEntity() + local Map = game.GetMap() or "" + if Map:find("gm_metrostroi") and Map:find("lite") then + Map = "gm_metrostroi_lite" + elseif Map:find("gm_metrostroi") then + Map = "gm_metrostroi" + elseif Map:find("gm_mus_orange_line") and Map:find("long") then + Map = "gm_orange" + elseif Map:find("gm_mus_orange_line") then + Map = "gm_orange_lite" + end + frame = vgui.Create("DFrame") + frame:SetDeleteOnClose(true) + frame:SetTitle("Dispatch control") + --frame:SetSize(275, 34+24*17) + frame:SetDraggable(false) + frame:SetSizable(false) + frame:MakePopup() + + frame:SetSize(ScrW()-40,ScrH()-40) + frame:Center() + local StationChoose = vgui.Create( "DComboBox",frame ) + StationChoose:SetPos( 5, 30 ) + StationChoose:SetSize( 250, 20 ) + StationChoose:SetValue( "Choose station" ) + for k,v in pairs(Metrostroi.WorkingStations[Map][1]) do + if Metrostroi.AnnouncerData[v] then StationChoose:AddChoice(Metrostroi.AnnouncerData[v][1]) end + end + + local PlayerChoose = vgui.Create( "DComboBox",frame ) + PlayerChoose:SetPos( ScrW()-300,30 ) + PlayerChoose:SetSize( 250, 20 ) + PlayerChoose:SetValue( "Choose player" ) + for i = 1,20 do + PlayerChoose:AddChoice(i) + end + + local Main = vgui.Create( "DPanel",frame ) + Main:SetPos(0,60) + Main:SetSize(frame:GetWide(),frame:GetTall()-60) + Main.Paint = function(self,w,h) + surface.DrawRect(5, 0, w-10, h-5) + end + + end +end +function ENT:Initialize() +end +net.Receive("TrackController",CreateFrame) \ No newline at end of file diff --git a/lua/entities/gmod_train_sound_provider/init.lua b/lua/entities/gmod_train_sound_provider/init.lua new file mode 100644 index 0000000..9fe3b90 --- /dev/null +++ b/lua/entities/gmod_train_sound_provider/init.lua @@ -0,0 +1,29 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") +util.AddNetworkString("TrackController") +local function ShowWindowOnCL(ply,ent) + net.Start("TrackController") + net.WriteEntity(ent) + net.Send(ply) +end +function ENT:Initialize() + self:SetModel("models/metrostroi/signals/clock_time.mdl") +end + +function ENT:Think() +end +function ENT:SpawnFunction( ply, tr, ClassName ) + + if ( !tr.Hit ) then return end + + local SpawnPos = tr.HitPos + tr.HitNormal * 16 + local ent = ents.Create( ClassName ) + ent:SetPos( SpawnPos ) + ent:Spawn() + ent:Activate() + + ShowWindowOnCL(ply,ent) + return ent + +end \ No newline at end of file diff --git a/lua/entities/gmod_train_sound_provider/shared.lua b/lua/entities/gmod_train_sound_provider/shared.lua new file mode 100644 index 0000000..6416af6 --- /dev/null +++ b/lua/entities/gmod_train_sound_provider/shared.lua @@ -0,0 +1,7 @@ +ENT.Type = "anim" + +ENT.PrintName = "Train sound provider" +ENT.Category = "Metrostroi (utility)" + +ENT.Spawnable = false +ENT.AdminSpawnable = false diff --git a/lua/entities/gmod_train_spawner/cl_init.lua b/lua/entities/gmod_train_spawner/cl_init.lua new file mode 100644 index 0000000..7467f87 --- /dev/null +++ b/lua/entities/gmod_train_spawner/cl_init.lua @@ -0,0 +1,642 @@ +include("shared.lua") +local MaxHorisontal = 14 +local frame = nil +local pFrame = nil +local wFrame = nil +local MaxWagons = 0 +local MaxWagonsOnPlayer = 0 +local Settings = { + Train = 1, + WagNum = 3, + AutoCouple = true, +} +ENT.Settings = Settings + +if not file.Exists("metrostroi_train_spawner.txt","DATA") then + file.Write("metrostroi_train_spawner.txt","") +end + +local function UpdateConCMD() + file.Write("metrostroi_train_spawner.txt",util.TableToJSON(Settings,true)) + --[[ + for k,v in pairs(Settings) do + RunConsoleCommand("train_spawner_"..k:lower(), v) + end]] +end + +local function LoadConCMD() + Settings = util.JSONToTable(file.Read("metrostroi_train_spawner.txt","DATA")) or Settings + if not Settings[Settings.Train] then Settings[Settings.Train] = {} end + --PrintTable(Settings) +end +local Pos = 0 +local VGUI = {} +local function CreateList(name,text,tbl,OnSelect,stbl) + tbl = tbl or {} + stbl = stbl or Settings[Settings.Train] + if type(tbl)=="function" then tbl = tbl() or {} end + local count = 0;for k,v in pairs(tbl) do count = count+1 end + if count<=1 then + stbl[name] = next(tbl) + return + end + local ListLabel = vgui.Create("DLabel", frame) + -- ListLabel:SetPos(5 + 300*math.floor(Pos/MaxHorisontal), 24+24*(Pos%MaxHorisontal)) + ListLabel:SetPos(5 + 270*math.floor(Pos/MaxHorisontal),24+24*(Pos%MaxHorisontal)) + ListLabel:SetSize(115,28) + ListLabel:SetText(text) + ListLabel:SetExpensiveShadow(1,Color(0,0,0,200)) + + local List = vgui.Create("DComboBox", frame)-- + List:SetTooltip(text) + List.Call = OnSelect + List:SetPos(130 + 270*math.floor(Pos/MaxHorisontal),28+24*(Pos%MaxHorisontal)) + -- List:SetPos(130 + 300*math.floor(Pos/MaxHorisontal), 28+24*(Pos%MaxHorisontal)) + List:SetWide(120) + if #tbl == count then + for i=1,#tbl do + List:AddChoice(tbl[i], i, stbl[name] == i) + end + else + for k,v in pairs(tbl) do + if type(v) == "table" and v.name then k = v.name end + List:AddChoice(v, k, stbl[name] == k) + end + end + if not List:GetOptionData(1) then ListLabel:Remove() List:Remove() return end + if not List:GetSelectedID() then + local done + for i,v in pairs(List.Choices) do + if v:find("Random") then + List:ChooseOptionID(i) + stbl[name] = List:GetOptionData(i) + done = true + break + end + end + if not done then + List:ChooseOptionID(1) + stbl[name] = List:GetOptionData(1) + end + end + List.OnSelect = function(self,_, _, index) + for _,v in ipairs(VGUI) do v(nil,nil,true) end + stbl[name] = index + if OnSelect then OnSelect(List,VGUI) end + end + List.ID = table.insert(VGUI,function(val, disabled, reset) + if reset then + if List.Disable then List:SetDisabled(false) end + elseif val or disabled then + if val ~= nil then List:ChooseOptionID(val) end + List:SetDisabled(disabled) + List.Disable = disabled + else + ListLabel:Remove() + List:Remove() + end + --local on = Types[Settings.Train]:find(name) and tbl + --List:SetVisible(on) + --ListLabel:SetVisible(on) + --if on then + --end + end) + VGUI[name] = List + Pos = Pos + 1 + --if Types[Settings.Train]:find(name) and #tbl > 0 then Pos = Pos + 1 end +end + +local function CreateSlider(name,decimals,min,max,text,OnSelect,stbl) + stbl = stbl or Settings[Settings.Train] + local Slider = vgui.Create("DNumSlider", frame) + Slider.Call = OnSelect + --Slider:SetPos(5 + 300*math.floor(Pos/MaxHorisontal), 28+24*(Pos%MaxHorisontal)-7) + Slider:SetPos(5 + 270*math.floor(Pos/MaxHorisontal), 28+24*(Pos%MaxHorisontal)-7+4) + Slider:SetWide(290) + Slider:SetTall(28) + Slider:SetMinMax(min, max) + Slider:SetDecimals(decimals) + Slider:SetText(text..":") + --if stbl[name] > max then stbl[name] = max end FIXME + Slider:SetValue(stbl[name]) + Slider:SetTooltip(text) + Slider.Label:SetExpensiveShadow(1,Color(0,0,0,200)) + Slider.Label:SetSize(125,28) + Slider.TextArea:SetTextColor(Slider.Label:GetTextColor()) + + --local _old = Slider.ValueChanged + function Slider:Think(...) + if not self.Editing and self:IsEditing() then + self.Editing = true + elseif self.Editing and not self:IsEditing() then + self.Editing = false + local val = self:GetValue() + if OnSelect then val = OnSelect(Slider,VGUI) or val end + stbl[name] = math.Round(val,decimals) + Slider:SetValue(stbl[name]) + end + end + Slider.ID = table.insert(VGUI,function(val, disabled, reset) + if reset then + if Slider.Disable then Slider:SetDisabled(false) Slider.Disable = nil end + return + end + if val or disabled then + if val ~= nil then Slider:SetValue(val) end + Slider:SetDisabled(disabled) + Slider.Disable = disabled + return + end + Slider:Remove() + --local on = Types[Settings.Train]:find(name) + --Slider:SetVisible(on) + --if on then + --end + end) + VGUI[name] = Slider + Pos = Pos + 1 + --if Types[Settings.Train]:find(name) then Pos = Pos + 1 end +end + +local function CreateCheckBox(name,text,OnSelect,stbl) + stbl = stbl or Settings[Settings.Train] + --if not Types[Settings.Train]:find(name) then return end + local CBLabel = vgui.Create("DLabel", frame)-- + CBLabel:SetPos(5 + 270*math.floor(Pos/MaxHorisontal),27+24*(Pos%MaxHorisontal)-4) + --CBLabel:SetPos(5 + 300*math.floor(Pos/MaxHorisontal), 25+24*(Pos%MaxHorisontal)) + CBLabel:SetText(text) + CBLabel:SetWide(125) + CBLabel:SetTall(28) + CBLabel:ApplySchemeSettings(true) + --CBLabel:SetAutoStretchVertical(true) + CBLabel:SetExpensiveShadow(1,Color(0,0,0,200)) + local CB = vgui.Create("DCheckBox", frame) + CB:SetTooltip(text) + CB.Call = OnSelect + CB:SetPos(130 + 270*math.floor(Pos/MaxHorisontal),31+24*(Pos%MaxHorisontal)) + --CB:SetPos(130 + 300*math.floor(Pos/MaxHorisontal), 28+24*(Pos%MaxHorisontal)) + CB:SetValue(stbl[name]) + CB.OnChange = function(self) + for _,v in ipairs(VGUI) do v(nil,nil,true) end + stbl[name] = CB:GetChecked() + if OnSelect then OnSelect(CB,VGUI) end + end + CB.ID = table.insert(VGUI,function(val, disabled, reset) + if reset then + if CB.Disable then CB:SetDisabled(false) CB.Disable = nil end + return + end + if val or disabled then + if val ~= nil then CB:SetValue(val) end + CB:SetDisabled(disabled) + CB.Disable = disabled + return + end + CBLabel:Remove() + CB:Remove() + --local on = Types[Settings.Train]:find(name) + --CBLabel:SetVisible(on) + --CB:SetVisible(on) + --if on then + --end + end) + VGUI[name] = CB + Pos = Pos + 1 + --if Types[Settings.Train]:find(name) then Pos = Pos + 1 end +end + +local function UpdateTrainList(fromPresets) + Pos = 2 + for k,v in ipairs(VGUI) do + if k > 2 then + v() + VGUI[k] = nil + end + end + if not VGUI.Train:GetSelectedID() then + VGUI.Train:ChooseOptionID(1) + Settings.Train = VGUI.Train:GetOptionData(1) + end + if not Settings[Settings.Train] then Settings[Settings.Train] = {} end + for k,name in pairs(Metrostroi.TrainClasses) do + local ENT = scripted_ents.Get(name) + if not ENT.Spawner or ENT.ClassName ~= Settings.Train then continue end + for i, menu in ipairs(ENT.Spawner) do + if menu[3] == "List" then + if Settings[Settings.Train][menu[1]] == nil then + Settings[Settings.Train][menu[1]] = menu[5] + end + CreateList(menu[1],menu[2],menu[4],menu[7]) + elseif menu[3] == "Boolean" then + if Settings[Settings.Train][menu[1]] == nil then + Settings[Settings.Train][menu[1]] = menu[4] + end + CreateCheckBox(menu[1],menu[2],menu[6]) + elseif menu[3] == "Slider" then + if Settings[Settings.Train][menu[1]] == nil then + Settings[Settings.Train][menu[1]] = menu[7] + end + CreateSlider(menu[1],menu[4],menu[5],menu[6],tostring(menu[2])) + --"NM",1,0.1,9,"Train Line Pressure" + elseif type(menu[1]) == "number" then + Pos=Pos+menu[1] + elseif #menu==0 then + Pos=Pos+1 + end + --Trains[k] = v.SubwayTrain.Name + end + end + --defaults + for k,v in pairs(VGUI) do + if k ~= "Train" and type(v) ~= "function" and v.Call then v:Call(VGUI) end + end + VGUI.WagNum:ValueChanged() + frame:SetSize(262 + 262*math.floor((Pos-1)/MaxHorisontal)+10, 58+24*math.min(MaxHorisontal,Pos)) + frame:Center() + if VGUI.Close then VGUI.Close() end + if VGUI.spawn then VGUI.spawn() end + if VGUI.Presets then VGUI.Presets() end + if VGUI.Wagons then VGUI.Wagons() end + if VGUI.PFrame and fromPresets ~= true then VGUI.PFrame(true) end + if VGUI.WFrame then VGUI.WFrame() end +end +local function Draw() + local Trains = {} + for _,name in pairs(Metrostroi.TrainClasses) do + local ENT = scripted_ents.Get(name) + if not ENT.Spawner or not ENT.SubwayTrain then continue end + local ENTl = list.Get("SpawnableEntities")[name] + --Trains[ENT.ClassName] = ENT.SubwayTrain.Name.."("..ENT.SubwayTrain.Manufacturer..")" + Trains[ENT.ClassName] = ENTl and ENTl.PrintName or ENT.Spawner and ENT.Spawner.Name or ENT.SubwayTrain.Name.."("..ENT.SubwayTrain.Manufacturer..")" + end + CreateList("Train",Format("%s(%d/%d)\n%s:%d",Metrostroi.GetPhrase("Spawner.Trains1"),GetGlobalInt("metrostroi_train_count"),MaxWagons,Metrostroi.GetPhrase("Spawner.Trains2"),MaxWagonsOnPlayer),Trains,UpdateTrainList,Settings) + CreateSlider("WagNum",0,1, GetGlobalInt("metrostroi_maxwagons"),Metrostroi.GetPhrase("Spawner.WagNum"),function(slider) + local WagNumTable + for k,name in pairs(Metrostroi.TrainClasses) do + local ENT = scripted_ents.Get(name) + if not ENT.Spawner or ENT.ClassName ~= Settings.Train then continue end + WagNumTable = ENT.Spawner.WagNumTable + break + end + if WagNumTable then + local retval = WagNumTable[1] + for i=2,#WagNumTable do + if WagNumTable[i] <= math.Round(slider:GetValue(),0) then + retval = WagNumTable[i] + end + end + return retval + end + end,Settings) + --CreateCheckBox("AutoCouple",Metrostroi.GetPhrase("Spawner.AutoCouple"),nil,Settings) + + UpdateTrainList() +end + +local function savePresetData(trainArr,presetArr) + for k,v in pairs(trainArr) do + if k == "Presets" or k == "Specials" then continue end + presetArr[k] = v + end +end + +local function getPresetName(name, presets, ignoreOwn) + local maxrep = tonumber(name:match("(.+)[%s*]%((%d+)%)$")) or 0 + + for i,v in ipairs(presets) do + local name2,nameid = v.PresetName:match("(.+)[%s*]%((%d+)%)$") + if (not ignoreOwn or i ~= presets.Selected) and (v.PresetName == name or name2 == name) then + maxrep = math.max(1,tonumber(nameid) or 1) + end + end + return maxrep > 0 and Format("%s (%d)",name:match("(.+)[%s*]%(%d+%)$") or name,maxrep+1) or name +end + +local function createPresetsFrame() + if IsValid(pFrame) then return end + pFrame = vgui.Create("DFrame",frame) + pFrame:SetTitle(Metrostroi.GetPhrase("Spawner.PresetTitle")) + pFrame:SetDrawOnTop(false) + pFrame.btnMaxim:SetVisible(false) + pFrame.btnMinim:SetVisible(false) + --frame:SetSize(275, 34+24*17) + pFrame:SetDraggable(true) + pFrame:SetSizable(false) + pFrame:MakePopup() + pFrame:SetZPos(frame:GetZPos()+1) + pFrame:SetSize(262+10, 58+24*1) + --pFrame:Center() + pFrame.OnRemove = function() + if IsValid(WFrame) then + VGUI.WFrame() + end + end + + --[[local ListLabel = vgui.Create("DLabel", frame) + -- ListLabel:SetPos(5 + 300*math.floor(Pos/MaxHorisontal), 24+24*(Pos%MaxHorisontal)) + ListLabel:SetPos(5 + 270*math.floor(Pos/MaxHorisontal),24+24*(Pos%MaxHorisontal)) + ListLabel:SetSize(115,28) + ListLabel:SetText(text) + ListLabel:SetExpensiveShadow(1,Color(0,0,0,200))]] + + local Presets = vgui.Create("DComboBox", pFrame)-- + Presets:SetPos(5,28) + -- Presets:SetPos(130 + 300*math.floor(Pos/MaxHorisontal), 28+24*(Pos%MaxHorisontal)) + Presets:SetWide(272-8-72-5) + + + local PAdd = vgui.Create("DButton", pFrame) + PAdd:SetWide(24) + PAdd:SetPos(272-7-72, 28) + PAdd:SetTooltip(Metrostroi.GetPhrase("Spawner.Preset.NewTooltip")) + PAdd:SetImage("icon16/add.png") + local PUpdate = vgui.Create("DButton", pFrame) + PUpdate:SetWide(24) + PUpdate:SetPos(272-6-48, 28) + PUpdate:SetTooltip(Metrostroi.GetPhrase("Spawner.Preset.UpdateTooltip")) + PUpdate:SetText("") + PUpdate:SetImage("icon16/arrow_refresh.png") + local PRemove = vgui.Create("DButton", pFrame) + PRemove:SetWide(24) + PRemove:SetPos(272-5-24, 28) + PRemove:SetTooltip(Metrostroi.GetPhrase("Spawner.Preset.RemoveTooltip")) + PRemove:SetText("") + PRemove:SetImage("icon16/cross.png") + + local PNameLabel = vgui.Create("DLabel", pFrame) + PNameLabel:SetPos(5,24+24*1+4) + PNameLabel:SetSize(115,28) + PNameLabel:SetText(Metrostroi.GetPhrase("Spawner.Presets.Name")) + PNameLabel:SetWide(100) + PNameLabel:SetExpensiveShadow(1,Color(0,0,0,200)) + local PName = vgui.Create("DTextEntry", pFrame) + PName:SetPos(132,24+24*1+4) + PName:SetSize(135,20) + PName:SetText("") + PName:SetPlaceholderText(Metrostroi.GetPhrase("Spawner.Presets.NamePlaceholder")) + + Presets.OnSelect = function(pnl,i, text) + if i == 1 then + PName:SetText("My preset name") + else + local presets = Settings[Settings.Train] and Settings[Settings.Train].Presets + + if presets and pnl.selected ~= -1 then + if not presets.Selected or presets.Selected == 0 then + if not presets[0] then presets[0] = {} end + savePresetData(Settings[Settings.Train],presets[0]) + end + presets.Selected = i-2 + for k,v in pairs(presets[presets.Selected] or {}) do + if k == "PresetName" then continue end + Settings[Settings.Train][k] = v + end + UpdateTrainList(true) + end + if i == 2 then + PName:SetText("") + else + PName:SetText(text) + end + end + end + + VGUI["PFrame"] = function(firstDraw) + if not IsValid(pFrame) then return end + local presets = Settings[Settings.Train] and Settings[Settings.Train].Presets + + Presets:Clear() + Presets:AddChoice(Metrostroi.GetPhrase("Spawner.Preset.New"),-2,nil,"icon16/add.png") + Presets:AddChoice(Metrostroi.GetPhrase("Spawner.Preset.Unsaved"),-1,nil,"icon16/disk.png") + Presets:SetText(Metrostroi.GetPhrase("Spawner.Preset.NotSelected")) + PName:SetText("") + + if firstDraw then Presets.selected = -1 end + if presets then + --presets.Selected = false + for i,v in ipairs(presets) do + Presets:AddChoice(v.PresetName or Format("N/A (%d)",i),i,not firstDraw and presets.Selected == i,nil and "icon16/add.png") + end + end + if Presets:GetSelectedID() == -1 then + Presets:ChooseOptionID(2) + if presets then presets.Selected = false end + end + + if not pFrame.Moved then + local posX,posY = frame:GetPos() + pFrame:SetPos(posX+5,posY+30) + pFrame.Moved = true + end + end + + PName.MainPaint = PName.Paint + PName.Paint = function(pnl, w, h) + pnl.MainPaint(pnl,w,h) + if pnl.Error then + surface.SetDrawColor(255,100,0,150) + surface.DrawRect(1,1,w-2,h-2) + end + end + PName.CheckEmpty = function(pnl) + pnl.Error = pnl:GetText():Trim() == "" + if pnl.Error == "" then + pnl:SetPlaceholderText(Metrostroi.GetPhrase("Spawner.Presets.NameError")) + else + pnl:SetPlaceholderText(Metrostroi.GetPhrase("Spawner.Presets.NamePlaceholder")) + end + pnl:SetUpdateOnType(pnl.Error) + return pnl.Error + end + PName.OnValueChange = PName.CheckEmpty + PAdd.DoClick = function() + if PName:CheckEmpty() or not Settings[Settings.Train] then return end + if not Settings[Settings.Train].Presets then Settings[Settings.Train].Presets = {} end + local presets = Settings[Settings.Train].Presets + + presets.Selected = #presets+1 + local settings = { + PresetName = getPresetName(PName:GetValue(),presets) + } + savePresetData(Settings[Settings.Train],settings) + table.insert(presets,settings) + + VGUI.PFrame() + end + PUpdate.DoClick = function() + local presets = Settings[Settings.Train] and Settings[Settings.Train].Presets + if not presets or #presets == 0 or not presets.Selected or presets.Selected > #presets then return end + + local settings = { + PresetName = getPresetName(PName:GetValue(),presets,true) + } + savePresetData(Settings[Settings.Train],settings) + presets[presets.Selected] = settings + + VGUI.PFrame() + end + PRemove.DoClick = function() + local presets = Settings[Settings.Train] and Settings[Settings.Train].Presets + if not presets or #presets == 0 or not presets.Selected or presets.Selected > #presets then return end + table.remove(presets,presets.Selected) + presets.Selected = false + + VGUI.PFrame(true) + end + pFrame.OrigThink = pFrame.Think + pFrame.Think = function(...) + pFrame.OrigThink(...) + if not pFrame:IsActive() and frame:IsActive() then pFrame:MakePopup() end + end + + VGUI.PFrame(true) +end +local function createWagonsFrame() + if IsValid(wFrame) then return end + wFrame = vgui.Create("DFrame",frame) + wFrame:SetTitle(Metrostroi.GetPhrase("Spawner.WagonsTitle")) + wFrame:SetDrawOnTop(true) + wFrame:SetZPos(frame:GetZPos()) + wFrame.btnMaxim:SetVisible(false) + wFrame.btnMinim:SetVisible(false) + --frame:SetSize(275, 34+24*17) + wFrame:SetDraggable(true) + wFrame:SetSizable(false) + wFrame:MakePopup() + wFrame:SetZPos(frame:GetZPos()+1) + wFrame:SetSize(262 + 262*math.floor((1-1)/MaxHorisontal)+10, 58+24*math.min(MaxHorisontal,1)) + --wFrame:Center() + VGUI["WFrame"] = function() + if not IsValid(wFrame) then return end + local posX,posY = frame:GetPos() + wFrame:SetPos(posX+7,posY+32) + end + wFrame.OnRemove = function() + if IsValid(PFrame) then + VGUI.PFrame() + end + end + VGUI.WFrame() +end +local function createFrame() + MaxWagons = GetGlobalInt("metrostroi_maxtrains")*GetGlobalInt("metrostroi_maxwagons") + MaxWagonsOnPlayer = GetGlobalInt("metrostroi_maxtrains_onplayer")*GetGlobalInt("metrostroi_maxwagons") + --if GetConVarString("gmod_toolmode") == "train_spawner" then RunConsoleCommand("gmod_toolmode", "weld") end + if IsValid(frame) then return end + Pos = 0 + VGUI = {} + frame = vgui.Create("DFrame") + frame:SetDeleteOnClose(true) + frame:SetTitle(Metrostroi.GetPhrase("Spawner.Title")) + frame.btnMaxim:SetVisible(false) + frame.btnMinim:SetVisible(false) + --frame:SetSize(275, 34+24*17) + frame:SetDraggable(false) + frame:SetSizable(false) + frame:MakePopup() + frame.OnRemove = function(panel) + if IsValid(pFrame) then pFrame:Remove() end + if IsValid(wFrame) then wFrame:Remove() end + UpdateConCMD() + end + + --frame:SetSize(262 + 262*math.floor((Pos-1)/MaxHorisontal)+10, 58+24*math.min(MaxHorisontal,Pos)) + --frame:Center() + local Close = vgui.Create("DButton", frame) + Close:SetWide(80) + Close:SetPos(5, frame:GetTall() - Close:GetTall() - 5) + Close:SetText(Metrostroi.GetPhrase("Spawner.Close")) + + Close.DoClick = function() + frame:Close() + end + VGUI["Close"] = function() + if IsValid(Close) and IsValid(frame) then Close:SetPos(5, frame:GetTall() - Close:GetTall() - 5) end + end + + local spawn = vgui.Create("DButton", frame) + spawn:SetWide(80) + spawn:SetPos(frame:GetWide() - Close:GetWide() - 5, frame:GetTall() - Close:GetTall() - 5) + spawn:SetText(Metrostroi.GetPhrase("Spawner.Spawn")) + VGUI["spawn"] = function() + if IsValid(spawn) and IsValid(frame) then spawn:SetPos(frame:GetWide() - Close:GetWide() - 5, frame:GetTall() - Close:GetTall() - 5) end + end + + spawn.DoClick = function() + --[[ + local Tool = GetConVarString("gmod_toolmode") + if Tool == "train_spawner" then Tool = "weld" end + RunConsoleCommand("train_spawner_oldT", Tool) + RunConsoleCommand("train_spawner_oldW", LocalPlayer():GetActiveWeapon():GetClass()) + RunConsoleCommand("gmod_tool", "train_spawner") + ]] + local tbl = {} + tbl = table.Copy(Settings[Settings.Train]) + tbl.Train = Settings.Train + tbl.AutoCouple = Settings.AutoCouple + tbl.WagNum = Settings.WagNum or 1 + net.Start("train_spawner_open") + net.WriteTable(tbl) + net.SendToServer() + local tool = LocalPlayer():GetTool("train_spawner") + tool.Settings = tbl + local ENT = scripted_ents.Get(tool.Settings.Train) + if ENT and ENT.Spawner then tool.Train = ENT end + frame:Close() + end + + local Presets = vgui.Create("DButton", frame) + Presets:SetWide(24) + --Presets:SetPos(5, spawn:GetPos() + 5) + Presets:SetText("") + Presets:SetImage("icon16/book.png") + + Presets.DoClick = function() + if IsValid(pFrame) then pFrame:Remove() else + createPresetsFrame() + pFrame.OnRemove = function() if IsValid(Presets) then Presets:SetImage("icon16/book.png") end end + end + Presets:SetImage(IsValid(pFrame) and "icon16/book_edit.png" or "icon16/book.png") + end + VGUI["Presets"] = function() + if not IsValid(Presets) or not IsValid(frame) then return end + local posX,posY,width = Close:GetBounds() + Presets:SetPos(posX + width + 5, posY) + end + + local Wagons = vgui.Create("DButton", frame) + Wagons:SetWide(24) + --Wagons:SetPos(5, spawn:GetPos() + 5) + Wagons:SetText("") + Wagons:SetImage("icon16/table.png") + + Wagons.DoClick = function() + if IsValid(wFrame) then wFrame:Remove() else + createWagonsFrame() + wFrame.OnRemove = function() Wagons:SetImage("icon16/table.png") end + end + Wagons:SetImage(IsValid(wFrame) and "icon16/table_edit.png" or "icon16/table.png") + end + VGUI["Wagons"] = function() + if not IsValid(Wagons) or not IsValid(frame) then return end + local posX,posY,width = Presets:GetBounds() + Wagons:SetPos(posX + width + 5, posY) + end + + LoadConCMD() + Draw() +end + +net.Receive("MetrostroiTrainSpawner",createFrame) +net.Receive("MetrostroiMaxWagons", function() + MaxWagons = GetGlobalInt("metrostroi_maxtrains")*GetGlobalInt("metrostroi_maxwagons") + MaxWagonsOnPlayer = GetGlobalInt("metrostroi_maxtrains_onplayer")*GetGlobalInt("metrostroi_maxwagons") + if trainTypeT and trainTypeT:IsValid() then + trainTypeT:SetText(Format("%s(%d/%d)\n%s:%d",Metrostroi.GetPhrase("Spawner.Trains1"),GetGlobalInt("metrostroi_train_count"),MaxWagons,Metrostroi.GetPhrase("Spawner.Trains2"),MaxWagonsOnPlayer)) + end +end) +net.Receive("MetrostroiTrainCount", function() + if trainTypeT and trainTypeT:IsValid() then + trainTypeT:SetText(Format("%s(%d/%d)\n%s:%d",Metrostroi.GetPhrase("Spawner.Trains1"),GetGlobalInt("metrostroi_train_count"),MaxWagons,Metrostroi.GetPhrase("Spawner.Trains2"),MaxWagonsOnPlayer)) + end +end) diff --git a/lua/entities/gmod_train_spawner/init.lua b/lua/entities/gmod_train_spawner/init.lua new file mode 100644 index 0000000..ca6b448 --- /dev/null +++ b/lua/entities/gmod_train_spawner/init.lua @@ -0,0 +1,39 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +util.AddNetworkString "MetrostroiTrainSpawner" +util.AddNetworkString "MetrostroiTrainCount" +util.AddNetworkString "MetrostroiMaxWagons" +CreateConVar("metrostroi_maxtrains",3,{FCVAR_ARCHIVE},"Maximum of allowed trains") +CreateConVar("metrostroi_maxwagons",3,{FCVAR_ARCHIVE},"Maximum of allowed wagons in 1 train") +CreateConVar("metrostroi_maxtrains_onplayer",1,{FCVAR_ARCHIVE},"Maximum of allowed trains by player") +local function MaxWagonsChangeCallback() + SetGlobalInt("metrostroi_maxtrains",GetConVarNumber("metrostroi_maxtrains")) + SetGlobalInt("metrostroi_maxtrains_onplayer",GetConVarNumber("metrostroi_maxtrains_onplayer")) + SetGlobalInt("metrostroi_maxwagons",GetConVarNumber("metrostroi_maxwagons")) + timer.Simple(0,function() + net.Start("MetrostroiMaxWagons") + net.Broadcast() + end) +end + +cvars.AddChangeCallback("metrostroi_maxtrains", MaxWagonsChangeCallback) +cvars.AddChangeCallback("metrostroi_maxtrains_onplayer", MaxWagonsChangeCallback) +cvars.AddChangeCallback("metrostroi_maxwagons", MaxWagonsChangeCallback) +local function ShowWindowOnCL(ply, id) + SetGlobalInt("metrostroi_train_count",Metrostroi.TrainCount()) + timer.Simple(0,function() + net.Start("MetrostroiTrainSpawner") + --net.WriteTable(Metrostroi.Skins) + net.Send(ply) + end) +end +timer.Create("metrostroi-maxtrains-hook",5,0,MaxWagonsChangeCallback) +function ENT:SpawnFunction(ply, tr) + if not ply:HasWeapon("gmod_tool") then + --ply:Give("gmod_tool") + return + end + ShowWindowOnCL(ply) +end diff --git a/lua/entities/gmod_train_spawner/shared.lua b/lua/entities/gmod_train_spawner/shared.lua new file mode 100644 index 0000000..e317973 --- /dev/null +++ b/lua/entities/gmod_train_spawner/shared.lua @@ -0,0 +1,8 @@ +ENT.Type = "anim" + +ENT.Author = "glebqip" +ENT.Instructions = "Spawns a train with settings" +ENT.Category = "Metrostroi" + +ENT.Spawnable = true +ENT.AdminSpawnable = false diff --git a/lua/entities/gmod_train_special_box/cl_init.lua b/lua/entities/gmod_train_special_box/cl_init.lua new file mode 100644 index 0000000..e859770 --- /dev/null +++ b/lua/entities/gmod_train_special_box/cl_init.lua @@ -0,0 +1,39 @@ +include("shared.lua") + +function ENT:Initialize() + self.Digits = {} +end + +function ENT:SpawnDigit(id,i) + + local cent = ClientsideModel(Format("models/metrostroi_train/reversor/revers_number0%d.mdl",id),RENDERGROUP_OPAQUE) + cent:SetParent(self) + cent:SetPos(self:LocalToWorld(Vector(-0.65+i*0.3,0.3,4.49+i*0.005))) + cent:SetAngles(self:LocalToWorldAngles(Angle(-1,0,0))) + self.Digits[i] = cent +end + +function ENT:OnRemove() + for i,v in pairs(self.Digits) do + SafeRemoveEntity(v) + end + self.Digits = {} +end + +function ENT:Think() + if #self.Digits > 0 and self:GetModel()=="models/metrostroi_train/reversor/reversor_collection_box_empty.mdl" then + self:OnRemove() + end + if self.Code ~= self:GetNW2Int("Code",-1) then + self:OnRemove() + self.Code = self:GetNW2Int("Code",-1) + if self.Code>0 then + for i=0,2 do + local num = math.floor(self.Code%(10^(i+1))/10^i) + self:SpawnDigit(num,i) + end + else + self:OnRemove() + end + end +end \ No newline at end of file diff --git a/lua/entities/gmod_train_special_box/init.lua b/lua/entities/gmod_train_special_box/init.lua new file mode 100644 index 0000000..0e95388 --- /dev/null +++ b/lua/entities/gmod_train_special_box/init.lua @@ -0,0 +1,94 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + + + +-------------------------------------------------------------------------------- +function ENT:Initialize() + self:SetModel("models/metrostroi_train/reversor/reversor_collection_box.mdl") + self:SetMoveType(MOVETYPE_VPHYSICS) + self:SetSolid(SOLID_VPHYSICS) + self:PhysicsInit(SOLID_VPHYSICS) + self:SetUseType(SIMPLE_USE) + local phys = self:GetPhysicsObject() + if IsValid(phys) then phys:Wake() end + self.Owner._RevBlockSpawn = true +end + +function ENT:OnRemove() + -- Remove all linked objects + constraint.RemoveAll(self) + if IsValid(self.Cover) then + SafeRemoveEntity(self.Cover) + end + self.Owner._RevBlockSpawn = false +end + +function ENT:Use(_,ply) + if ply~=self.Owner then return end + if not self.Cover then + self:SetModel(self.Code and "models/metrostroi_train/reversor/reversor_collection_box2.mdl" or "models/metrostroi_train/reversor/reversor_collection_box_empty.mdl") + self.Cover = ents.Create("prop_physics") + self.Cover:SetModel("models/metrostroi_train/reversor/reversor_collection_box2_cover.mdl") + self.Cover:SetPos(self:LocalToWorld(Vector(0,0,5.7))) + self.Cover:SetAngles(self:GetAngles()) + self.Cover:Spawn() + self.Cover:SetOwner(self.Owner) + local phys = self.Cover:GetPhysicsObject() + phys:ApplyForceCenter(self.Cover:GetUp()*phys:GetMass()*40+self.Cover:GetRight()*phys:GetMass()*35 ) + if CPPI and IsValid(self.Owner) then + self.Cover:CPPISetOwner(self.Owner) + end + if self.Code then self:SetNW2Int("Code",self.Code) end + elseif self:GetModel() == "models/metrostroi_train/reversor/reversor_collection_box2.mdl" then + ply:StripWeapon("train_kv_wrench") + ply:Give("train_kv_wrench_gold") + ply:SelectWeapon("train_kv_wrench_gold") + local reverser = ply:GetWeapon("train_kv_wrench_gold") + if IsValid(reverser) then + reverser:SetCode(self.Code) + end + self:SetModel("models/metrostroi_train/reversor/reversor_collection_box_empty.mdl") + self:SetNW2Int("Code",-1) + end +end +function ENT:Think(dT) +end + +function ENT:SpawnReverser(ent,code) + if not code then + ent.Owner:StripWeapon("train_kv_wrench_gold") + end + ent.Code = code + ent:Spawn() + ent:Activate() +end + +function ENT:SpawnFunction(ply,tr,className) + if not tr.Hit or ply.SpawningReverser or ply._RevBlockSpawn then return end + ply.SpawningReverser = false + + local ent = ents.Create(className) + + local SpawnPos = tr.HitPos + tr.HitNormal * 10 + local SpawnAng = ply:EyeAngles() + SpawnAng.p = 0 + SpawnAng.y = SpawnAng.y+90 + + ent:SetPos( SpawnPos ) + ent:SetAngles( SpawnAng ) + + ent.Owner = ply + + --ent.Code = code + --ent:Spawn() + --ent:Activate() + + Metrostroi.GetReverserID(ply,function(code) + if not IsValid(ent) then return end + ply.SpawningReverser = false + self:SpawnReverser(ent,code) + end,true) + return ent +end \ No newline at end of file diff --git a/lua/entities/gmod_train_special_box/shared.lua b/lua/entities/gmod_train_special_box/shared.lua new file mode 100644 index 0000000..8bf6731 --- /dev/null +++ b/lua/entities/gmod_train_special_box/shared.lua @@ -0,0 +1,11 @@ +ENT.Type = "anim" + +ENT.PrintName = "Special box" +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (utility)" + +ENT.Spawnable = true +ENT.AdminSpawnable = false diff --git a/lua/entities/gmod_train_sprite.lua b/lua/entities/gmod_train_sprite.lua new file mode 100644 index 0000000..d92b579 --- /dev/null +++ b/lua/entities/gmod_train_sprite.lua @@ -0,0 +1,136 @@ +--[[------------------------------------------------------------------------- +Client sprite entity for metrostroi trains, trying to copy +env_sprite render behavior with oun functions +---------------------------------------------------------------------------]] +AddCSLuaFile() +ENT.Type = "anim" +ENT.PrintName = "Clientside sprite" + +ENT.Spawnable = false +ENT.AdminSpawnable = false + +if SERVER then return end +MetrostroiSprites = MetrostroiSprites or {} +MetrostroiSprites2D = MetrostroiSprites2D or {} + +local function colAlpha(col,a) + return Color(col.r*a,col.g*a,col.b*a) +end + +hook.Add("PostDrawTranslucentRenderables","MetrostroiClientSprite",function(_,isSkybox) + --print(ENT.Sprites) + if isSkybox then return end + --cam.Start3D() + + --render.SetLightingMode(2) + + for i=1, #MetrostroiSprites do + local ent = MetrostroiSprites[i] + if not ent.Visible or ent.Brightness <= 0 then continue end + + + local pos = ent:GetPos() + local visibility = util.PixelVisible(pos, 5, ent.vHandle)--math.max(0,util.PixelVisible(pos, 5, vHandle)-0.25)/0.75 + if visibility > 0 then + render.SetMaterial(ent.Material) + render.DrawSprite(pos,128*ent.Scale,128*ent.Scale,colAlpha(ent:GetColor(),visibility*ent.Brightness)) + end + end + + for i=1, #MetrostroiSprites2D do + local ent = MetrostroiSprites2D[i] + if not ent.Visible or ent.Brightness <= 0 then continue end + + + local pos = ent:GetPos() + local visibility = util.PixelVisible(pos, 5, ent.vHandle)--math.max(0,util.PixelVisible(pos, 5, vHandle)-0.25)/0.75 + if visibility > 0 then + render.SetMaterial(ent.Material) + cam.IgnoreZ(true) + render.DrawSprite(pos,128*ent.Scale,128*ent.Scale,colAlpha(ent:GetColor(),visibility*ent.Brightness)) + cam.IgnoreZ(false) + --render.DrawQuadEasy( ent:GetPos(),-EyeVector(), 128*ent.Scale, 128*ent.Scale, ent:GetColor()) + end + end + + --render.SetLightingMode(0) + --[[for i=1, #MetrostroiSprites2D do + local ent = MetrostroiSprites2D[i] + if not ent.Visible or ent.Brightness <= 0 then continue end + + ent._visibility = util.PixelVisible(ent:GetPos(), 5, ent.vHandle)--math.max(0,util.PixelVisible(pos, 5, vHandle)-0.25)/0.75 + end]] + --cam.End3D() +end) + +hook.Remove("PreDrawViewModel","MetrostroiClientSprite",function() +end) + +function ENT:Initialize() + self:SetSize(self.Scale or 1) + self:SetTexture(self.Texture or "sprites/glow1.vmt") + self:SetColor(self.Color or Color(255,255,255)) + self:SetBrightness(1) + self:SetVisible(true) + + self.vHandle = util.GetPixelVisibleHandle() + table.insert(MetrostroiSprites2D,self) +end + +function ENT:OnRemove() + if self.Is3D then + for i,v in ipairs(MetrostroiSprites) do + if self == v then table.remove(MetrostroiSprites,i) end + end + else + for i,v in ipairs(MetrostroiSprites2D) do + if self == v then table.remove(MetrostroiSprites2D,i) end + end + end +end + +function ENT:SetSize(scale) + self.Scale = math.max(scale,0) +end + +__TEST = (__TEST or 0) + 1 +function ENT:SetTexture(texture,isSprite) + self.Texture = texture + self.Material = Metrostroi.MakeSpriteTexture(texture,isSprite) + --[[if isSprite then + self.Material = CreateMaterial(texture..":sprite0000"..__TEST,"Sprite",{ + ["$basetexture"] = texture, + ["$spriteorientation"] = "vp_parallel", + ["$spriteorigin"] = "[ 0.50 0.50 ]", + ["$illumfactor"] = 7, + ["$spriterendermode"] = 3, + }) + else + self.Material =CreateMaterial(texture..":spriteug0000"..__TEST,"UnlitGeneric",{ + ["$basetexture"] = texture, + ["$translucent"]= 1, + ["$additive"] = 1, + ["$vertexcolor"] = 1, + --["$vertexalpha"] = 1, + }) + end]] +end + +function ENT:SetSColor(col) + self.Color = colAlpha(col,col.a/255) +end +function ENT:SetBrightness(brightness) + self.Brightness = brightness +end +function ENT:SetVisible(vis) + self.Visible = vis +end +function ENT:Set3D(is3D) + self:OnRemove() + if is3D then + table.insert(MetrostroiSprites,self) + else + table.insert(MetrostroiSprites2D,self) + end + self.Is3D = is3D +end \ No newline at end of file diff --git a/lua/entities/gmod_train_wheels/cl_init.lua b/lua/entities/gmod_train_wheels/cl_init.lua new file mode 100644 index 0000000..6fc6c8e --- /dev/null +++ b/lua/entities/gmod_train_wheels/cl_init.lua @@ -0,0 +1,19 @@ +include("shared.lua") + +function ENT:Think() + if self:GetNW2Bool("Disabled") then return end + -- Timing + self.PrevTime = self.PrevTime or RealTime() + local dT = (RealTime() - self.PrevTime) + self.PrevTime = RealTime() + + -- Angular velocity + local wheel_radius = 0.5*44.1 -- units + local speed = -self:GetVelocity():Dot(self:GetAngles():Right()) + local ang_vel = speed/(2*math.pi*wheel_radius) + + -- Rotate wheel + self.Angle = ((self.Angle or math.random()) + ang_vel*dT) % 1.0 + self:SetPoseParameter("position",1.0-self.Angle) + --self:InvalidateBoneCache() +end diff --git a/lua/entities/gmod_train_wheels/init.lua b/lua/entities/gmod_train_wheels/init.lua new file mode 100644 index 0000000..684885a --- /dev/null +++ b/lua/entities/gmod_train_wheels/init.lua @@ -0,0 +1,49 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + + + +-------------------------------------------------------------------------------- +function ENT:Initialize() + self:SetModel(self.Model or "models/metrostroi/metro/metro_wheels.mdl") + if not self.NoPhysics then + self:PhysicsInit(SOLID_VPHYSICS) + self:SetMoveType(MOVETYPE_VPHYSICS) + self:SetSolid(SOLID_VPHYSICS) + end + self.Meters = 0 + self.Angle = 0 +end +--[[ +function ENT:Think(dT) + -- Update timing + self.PrevTime = self.PrevTime or CurTime() + self.dT = (CurTime() - self.PrevTime) + self.PrevTime = CurTime() + local Bogey = self:GetNW2Entity("TrainBogey") + + --if not IsValid(Bogey) then return end + --self.Meters = self.Meters + self.dT * Bogey.Speed * Bogey.SpeedSign + + +end +--]] +function ENT:PhysicsCollide(data,physobj) + -- Generate junction sounds + if data.HitEntity and data.HitEntity:IsValid() and data.HitEntity:GetClass() == "prop_door_rotating" then + self.LastJunctionTime = self.LastJunctionTime or CurTime() + local dt = CurTime() - self.LastJunctionTime + + if dt > 3.5 then + local speed = self:GetVelocity():Length() * 0.06858 + if speed > 10 then + self.LastJunctionTime = CurTime() + + local pitch_var = math.random(90,110) + local pitch = pitch_var*math.max(0.8,math.min(1.3,speed/40)) + self:EmitSound("subway_trains/bogey/junct_"..math.random(1,4)..".wav",100,pitch ) + end + end + end +end diff --git a/lua/entities/gmod_train_wheels/shared.lua b/lua/entities/gmod_train_wheels/shared.lua new file mode 100644 index 0000000..817ff03 --- /dev/null +++ b/lua/entities/gmod_train_wheels/shared.lua @@ -0,0 +1,10 @@ +ENT.Type = "anim" + +ENT.PrintName = "Train Wheels" +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" + +ENT.Spawnable = false +ENT.AdminSpawnable = false diff --git a/lua/metrostroi/_obsolete/_turbostroi_v2_old b/lua/metrostroi/_obsolete/_turbostroi_v2_old new file mode 100644 index 0000000..bb3cefe --- /dev/null +++ b/lua/metrostroi/_obsolete/_turbostroi_v2_old @@ -0,0 +1,489 @@ +-------------------------------------------------------------------------------- +-- Simulation acceleration DLL support +-------------------------------------------------------------------------------- +if Turbostroi and not Turbostroi.SetMTAffinityMask then return end +local turbostroiTrains = {} +if not TURBOSTROI then + local FPS = 33 + local messageTimeout = 0 + local messageCounter = 0 + local dataCache = {{},{}} + hook.Add("EntityRemoved","Turbostroi",function(ent) + if dataCache[ent] then + dataCache[ent] = nil + end + if turbostroiTrains[ent] then + turbostroiTrains[ent] = nil + end + end) + for k,ent in pairs(ents.GetAll()) do + if ent.Base == "gmod_subway_base" and not ent.NoTrain and not ent.DontAccelerateSimulation then + turbostroiTrains[ent] = true + end + end + hook.Add("OnEntityCreated","Turbostroi",function(ent) + timer.Simple(0,function() + if IsValid(ent) and ent.Base == "gmod_subway_base" and not ent.NoTrain and not ent.DontAccelerateSimulation then + turbostroiTrains[ent] = true + end + end) + end) + local inputCache = {} + local id,system,name,index,value + local _DEBUGPRINT + local function updateTrains(trains) + --local recvMessage = Turbostroi.RecvMessage + -- Get data packets from simulation + for train in pairs(trains) do + if not dataCache[train] then + if not Turbostroi.SendMessage(train,5,"","",0,0) then return end + dataCache[train] = {wiresW = {}} + + for sys_name,system in pairs(train.Systems) do + if system.OutputsList and system.DontAccelerateSimulation then + for _,name in pairs(system.OutputsList) do + local value = system[name] or 0 + if type(value) == "boolean" then value = value and 1 or 0 end + if type(value) == "number" then + if not dataCache[train][sys_name] then dataCache[train][sys_name] = {} end + dataCache[train][sys_name][name] = math.Round(value) + end + end + end + end + end + for i,message in pairs(Turbostroi.RecvMessages(train)) do --NEWTURBOSTROI + id,system,name,index,value = unpack(message,0) --NEWTURBOSTROI + --while true do --OLDTURBOSTROI + --id,system,name,index,value = Turbostroi.RecvMessage(train) + if id == 1 then + if train.Systems[system] then + train.Systems[system][name] = value + if train.TriggerTurbostroiInput then train:TriggerTurbostroiInput(system,name,value) end + end + end + if id == 2 then + if index == 0 and name ~= "bass" then index = nil end + if value == 0 and name ~= "bass" then value = nil end + if name == "" then name = nil end + --net.WriteString(name) + train:PlayOnce(system,name,index,value) + end + if id == 3 then + if name == "on" then + --print("[!]Wire "..index.." starts update! Value "..value) + dataCache[train]["wiresW"][index] = value + --train:WriteTrainWire(index,value) + if not train.TrainWireWritersID[index] then train.TrainWireWritersID[index] = true end + train.TrainWireTurbostroi[index] = value + if train.TriggerTurbostroiInput then train:TriggerTurbostroiInput("TrainWire",index,value) end + else + --print("[!]Wire "..index.." stop update!") + dataCache[train]["wiresW"][index] = nil + end + end + if id == 4 then + if train.Systems[system] then + train.Systems[system]:TriggerInput(name,value) + end + end + if id == 5 then + for twid,value in pairs(dataCache[train]["wiresW"]) do + --train:WriteTrainWire(twid,value) + end + end + if id == 6 then + if IsValid(Player(index)) then + if value==0 then + Player(index):PrintMessage( HUD_PRINTCONSOLE, "--START" ) + print("--START") + end + Player(index):PrintMessage( HUD_PRINTCONSOLE, system ) + print(system) + end + end + --print(id,name) + + --if not id then + --break--OLDTURBOSTROI + --end + messageCounter = messageCounter + 1 + end + end + -- Send train wire values + -- Output all system values + for train in pairs(trains) do + if train.ReadTrainWire then + for i in pairs(train.TrainWires) do + if not dataCache[train]["wires"] then dataCache[train]["wires"] = {} end + if dataCache[train]["wires"][i] ~= train:ReadTrainWire(i) then + if Turbostroi.SendMessage(train,3,"","",i,train:ReadTrainWire(i)) then + dataCache[train]["wires"][i] = train:ReadTrainWire(i) + end + end + end + for sys_name,system in pairs(train.Systems) do + if system.OutputsList and system.DontAccelerateSimulation then + for _,name in pairs(system.OutputsList) do + local value = system[name] or 0 + if type(value) == "boolean" then + value = value and 1 or 0 + end + if type(value) == "number" then + value = math.Round(value) + if not dataCache[train][sys_name] then dataCache[train][sys_name] = {} end + if dataCache[train][sys_name][name] ~= value then + if Turbostroi.SendMessage(train,1,sys_name,name,0,value) then + dataCache[train][sys_name][name] = value + end + end + end + end + end + end + end + end + end + if Turbostroi then + concommand.Add("metrostroi_turbostroi_run",function(ply,_,_,cmd) + if not IsValid(ply) then return end + local train = ply:GetTrain() + if IsValid(train) then + print(cmd:sub(1,2),cmd:sub(3,4)) + Turbostroi.SendMessage(train,6,cmd:sub(1,255),cmd:sub(256,511),ply:UserID(),0) + end + end) + function Turbostroi.TriggerInput(train,system,name,value) + local v = value or 0 + if type(value) == "boolean" then v = value and 1 or 0 end + Turbostroi.SendMessage(train,4,system,name,0,v) + --end + end + Turbostroi.SetMTAffinityMask(8) -- CPU5 CPU4 on 6 core --NEWTURBOSTROI + Turbostroi.SetSTAffinityMask(7) -- 0 - disabled --NEWTURBOSTROI + Turbostroi.SetSimulationFPS(FPS) + hook.Add("Think", "Turbostroi_Think", function() + if not Turbostroi then return end + + -- Proceed with the think loop + --Turbostroi.SetTargetTime(CurTime()) //depricated! now using engine + --Turbostroi.Think() //depricated! now using engine + + -- Update all types of trains + --for k,v in ipairs(turbostroiTrains) do + updateTrains(turbostroiTrains) + --end + -- HACK + GLOBAL_SKIP_TRAIN_SYSTEMS = nil + + -- Print stats + if ((CurTime() - messageTimeout) > 1.0) then + messageTimeout = CurTime() + --RunConsoleCommand("say",Format("Metrostroi: %d messages per second (%d per tick)",messageCounter,messageCounter / FPS)) + messageCounter = 0 + end + end) + end + return +end + + + + +-------------------------------------------------------------------------------- +-- Turbostroi scripts +-------------------------------------------------------------------------------- +-- NEW API +local ffi = require("ffi") +local C = ffi.load("gmsv_turbostroi_win32") +ffi.cdef[[ +bool ThreadSendMessage(void *p, int message, const char* system_name, const char* name, double index, double value); +]] + +Metrostroi = {} +local dataCache = {wires = {},wiresW = {},wiresL = {}} +Metrostroi.BaseSystems = {} -- Systems that can be loaded +Metrostroi.Systems = {} -- Constructors for systems + +LoadSystems = {} -- Systems that must be loaded/initialized +GlobalTrain = {} -- Train emulator +GlobalTrain.Systems = {} -- Train systems +GlobalTrain.TrainWires = {} +GlobalTrain.WriteTrainWires = {} + +TimeMinus = 0 +_Time = 0 +function CurTime() + --return CurrentTime-TimeMinus + return _Time +end +--function CurTime() return os.clock() end + +function Metrostroi.DefineSystem(name) + TRAIN_SYSTEM = {} + Metrostroi.BaseSystems[name] = TRAIN_SYSTEM + + -- Create constructor + Metrostroi.Systems[name] = function(train,...) + local tbl = { _base = name } + local TRAIN_SYSTEM = Metrostroi.BaseSystems[tbl._base] + if not TRAIN_SYSTEM then print("No system: "..tbl._base) return end + for k,v in pairs(TRAIN_SYSTEM) do + if type(v) == "function" then + tbl[k] = function(...) + if not Metrostroi.BaseSystems[tbl._base][k] then + print("ERROR",k,tbl._base) + end + return Metrostroi.BaseSystems[tbl._base][k](...) + end + else + tbl[k] = v + end + end + + tbl.Initialize = tbl.Initialize or function() end + tbl.Think = tbl.Think or function() end + tbl.Inputs = tbl.Inputs or function() return {} end + tbl.Outputs = tbl.Outputs or function() return {} end + tbl.TriggerInput = tbl.TriggerInput or function() end + tbl.TriggerOutput = tbl.TriggerOutput or function() end + + tbl.Train = train + tbl:Initialize(...) + tbl.OutputsList = tbl:Outputs() + tbl.InputsList = tbl:Inputs() + tbl.IsInput = {} + for k,v in pairs(tbl.InputsList) do tbl.IsInput[v] = true end + return tbl + end +end + +function GlobalTrain.LoadSystem(self,a,b,...) + local name + local sys_name + if b then + name = b + sys_name = a + else + name = a + sys_name = a + end + + if not Metrostroi.Systems[name] then error("No system defined: "..name) end + if self.Systems[sys_name] then error("System already defined: "..sys_name) end + + self[sys_name] = Metrostroi.Systems[name](self,...) + self[sys_name].Name = sys_name + self[sys_name].BaseName = name + self.Systems[sys_name] = self[sys_name] + + -- Don't simulate on here + local no_acceleration = Metrostroi.BaseSystems[name].DontAccelerateSimulation + if no_acceleration then + self.Systems[sys_name].Think = function() end + self.Systems[sys_name].TriggerInput = function(train,name,value) + local v = value or 0 + if type(value) == "boolean" then v = value and 1 or 0 end + C.ThreadSendMessage(_userdata, 4,sys_name,name,0,v) + end -- replace with new api + + --Precache values + elseif self[sys_name].OutputsList then + dataCache[sys_name] = {} + for _,name in pairs(self[sys_name].OutputsList) do + dataCache[sys_name][name] = 0--self[sys_name][name] or 0 + end + end +end + +function GlobalTrain.PlayOnce(self,soundid,location,range,pitch) + C.ThreadSendMessage(_userdata, 2,soundid or "",location or "",range or 0,pitch or 0) -- replace with new api +end + +function GlobalTrain.ReadTrainWire(self,n) + return self.TrainWires[n] or 0 +end + +function GlobalTrain.WriteTrainWire(self,n,v) + self.WriteTrainWires[n] = v +end + + +GlobalTrain.DeltaTime = 0.33 + +-------------------------------------------------------------------------------- +-- Main train code (turbostroi side) +-------------------------------------------------------------------------------- +print("[!] Train initialized!") +function Think(skipped) + -- This is just blatant copy paste from init.lua of base train entity + local self = GlobalTrain + + --[[ if skipped then + self.BeSkip = self.BeSkip or CurTime() + return + else + self.PrevTime = self.PrevTime or CurTime() + if self.BeSkip then + --print(1,(CurTime()-self.BeSkip)-0.03) + TimeMinus = TimeMinus + math.max(0,(CurTime()-self.BeSkip)-0.03) + --print(2,TimeMinus) + self.BeSkip = false + end + end--]] + + -- Is initialized? + if not self.Initialized then + Initialize() + return + end + + self.DeltaTime = (CurrentTime - self.PrevTime)--self.DeltaTime+math.min(0.02,((CurrentTime - self.PrevTime)-self.DeltaTime)*0.1) + self.PrevTime = CurrentTime + if skipped or self.DeltaTime<=0 then return end + _Time = _Time+self.DeltaTime + + -- Perform data exchange + DataExchange() + + -- Simulate according to schedule + for i,s in ipairs(self.Schedule) do + for k,v in ipairs(s) do + v:Think(self.DeltaTime / (v.SubIterations or 1),i) + end + end +end + +function Initialize() + if not CurrentTime then return end + print("[!] Loading systems") + local time = os.clock() + for k,v in pairs(LoadSystems) do + GlobalTrain:LoadSystem(k,v) + end + print(string.format("[!] -Took %.2fs",os.clock()-time)) + GlobalTrain.PrevTime = CurrentTime + local iterationsCount = 1 + if (not GlobalTrain.Schedule) or (iterationsCount ~= GlobalTrain.Schedule.IterationsCount) then + GlobalTrain.Schedule = { IterationsCount = iterationsCount } + local SystemIterations = {} + + -- Find max number of iterations + local maxIterations = 0 + for k,v in pairs(GlobalTrain.Systems) do + SystemIterations[k] = (v.SubIterations or 1) + maxIterations = math.max(maxIterations,(v.SubIterations or 1)) + end + + -- Create a schedule of simulation + for iteration=1,maxIterations do + GlobalTrain.Schedule[iteration] = {} + -- Populate schedule + for k,v in pairs(GlobalTrain.Systems) do + if ((iteration)%(maxIterations/(v.SubIterations or 1))) == 0 then + table.insert(GlobalTrain.Schedule[iteration],v) + end + + end + end + end + GlobalTrain.Initialized = true +end + +local id,system,name,index,value +function DataExchange() + -- Get data packets + for i,message in pairs(RecvMessages()) do + id,system,name,index,value = unpack(message,0) --NEWTURBOSTROI + --while true do + --id,system,name,index,value = RecvMessage() --OLDTURBOSTROI + if id == 1 then + if GlobalTrain.Systems[system] then + GlobalTrain.Systems[system][name] = value + end + end + if id == 3 then + dataCache["wiresW"][index] = value + end + if id == 4 then + if GlobalTrain.Systems[system] then + GlobalTrain.Systems[system]:TriggerInput(name,value) + end + end + if id == 5 then + dataCache["wiresL"] = {} + end + if id == 6 then + local scr = [[ + local _retdata="" + local print = function(...) + for k,v in ipairs({...}) do _retdata = _retdata..tostring(v).."\t" end + _retdata = _retdata.."\n" + end + ]] + scr = scr..system..name.."\n" + scr = scr.."return _retdata" + local data,err = loadstring(scr) + if data then + local ret = tostring(data()) or "N\\A" + for i=0,math.ceil(#ret/63) do + C.ThreadSendMessage(_userdata, 6, ret:sub(i*63,(i+1)*63-1), "",index,i) + end + else + print(err) + C.ThreadSendMessage(_userdata, 6, tostring(err), "",index,0) + end + --Turbostroi.SendMessage(train,6,cmd:sub(1,255),cmd:sub(256,511),ply:UserID(),0) + end + if not id then break end + end + for twid,value in pairs(dataCache["wiresW"]) do + GlobalTrain.TrainWires[twid] = value + end + + -- Output all variable values + for sys_name,system in pairs(GlobalTrain.Systems) do + if system.OutputsList and (not system.DontAccelerateSimulation) then + for _,name in pairs(system.OutputsList) do + local value = (system[name] or 0) + --if type(value) == "boolean" then value = value and 1 or 0 end + if not dataCache[sys_name] then print(sys_name) end + if dataCache[sys_name][name] ~= value then + --print(sys_name,name,value) + --if SendMessage(1,sys_name,name,0,tonumber(value) or 0) then -- OLD API + if C.ThreadSendMessage(_userdata, 1, sys_name , name, 0, tonumber(value) or 0) then -- NEW API + dataCache[sys_name][name] = value + end + end + end + end + end + + -- Output train wire writes + for twID,value in pairs(GlobalTrain.WriteTrainWires) do + --local value = tonumber(value) or 0 + if dataCache["wires"][twID] ~= value then + dataCache["wires"][twID] = value + dataCache["wiresL"][twID] = false + end + if not dataCache["wiresL"][twID] or dataCache["wiresL"][twID]~=GlobalTrain.PrevTime then + --SendMessage(3,"","on",tonumber(twID) or 0,dataCache["wires"][twID]) -- OLD API + C.ThreadSendMessage(_userdata, 3, "", "on", tonumber(twID) or 0, dataCache["wires"][twID]) -- NEW API + --print("[!]Wire "..twID.." starts update! Value "..dataCache["wires"][twID]) + end + GlobalTrain.WriteTrainWires[twID] = nil + dataCache["wiresL"][twID] = CurTime() + end + for twID,time in pairs(dataCache["wiresL"]) do + if time~=CurTime() then + C.ThreadSendMessage(_userdata,3, "", "off", tonumber(twID) or 0, 0) + --print("[!]Wire "..twID.." stops update!") + dataCache["wiresL"][twID] = nil + end + end + --SendMessage(5,"","",0,0) -- OLD API + --C.ThreadSendMessage(_userdata, 5,"","",0,0) -- NEW API + --print(string.format("%s %s",count,#msgCache)) + --count = 0 + +end diff --git a/lua/metrostroi/cl_cpanel.lua b/lua/metrostroi/cl_cpanel.lua new file mode 100644 index 0000000..4380e55 --- /dev/null +++ b/lua/metrostroi/cl_cpanel.lua @@ -0,0 +1,89 @@ +--Helper function for common use +local function AddBox(panel,cmd,str) + panel:AddControl("CheckBox",{Label=str, Command=cmd}) +end +--Helper function for common use +local function AddTextBox(panel,cmd,str) + panel:AddControl("TextBox",{Label=str, Command=cmd}) +end +local function AddSlider(panel,cmd,str,min,max,fl) + panel:AddControl("Slider",{Label=str, Command=cmd,min=min,max=max,type=fl and "float"}) +end +-- Build admin panel +local function AdminPanel(panel) + if not LocalPlayer():IsAdmin() then return end + AddBox(panel,"metrostroi_train_requirethirdrail",Metrostroi.GetPhrase("Panel.RequireThirdRail")) + --panel:AddControl("CheckBox",{Label="Trains require 3rd rail", Command = "metrostroi_train_requirethirdrail"}) +end +-- Build regular client panel +local function ClientPanel(panel) + panel:ClearControls() + panel:SetPadding(0) + panel:SetSpacing(0) + panel:Dock( FILL ) + local Lang = vgui.Create("DComboBox") + Lang:SetValue(Metrostroi.CurrentLanguageTable and Metrostroi.CurrentLanguageTable.lang or Metrostroi.GetPhrase("Panel.Language")) + Lang:SetColor(color_black) + for k,v in pairs(Metrostroi.Languages) do + Lang:AddChoice(v.lang, k) + end + Lang.OnSelect = function(Lang,index,value,data) + Metrostroi.ChoosedLang = data + RunConsoleCommand("metrostroi_language",Metrostroi.ChoosedLang) + end + panel:AddItem(Lang) + panel:ControlHelp(Metrostroi.GetPhrase("AuthorText")) + if Metrostroi.HasPhrase("AuthorTextMetadmin") then + panel:ControlHelp(Metrostroi.GetPhrase("AuthorTextMetadmin")) + end + + + AddBox(panel,"metrostroi_drawcams",Metrostroi.GetPhrase("Panel.DrawCams")) + AddBox(panel,"metrostroi_disablehud",Metrostroi.GetPhrase("Panel.DisableHUD")) + AddBox(panel,"metrostroi_disablecamaccel",Metrostroi.GetPhrase("Panel.DisableCamAccel")) + AddBox(panel,"metrostroi_disablehovertext",Metrostroi.GetPhrase("Panel.DisableHoverText")) + AddBox(panel,"metrostroi_disablehovertextpos",Metrostroi.GetPhrase("Panel.DisableHoverTextP")) + AddBox(panel,"metrostroi_screenshotmode",Metrostroi.GetPhrase("Panel.ScreenshotMode")) + AddBox(panel,"metrostroi_shadows1",Metrostroi.GetPhrase("Panel.ShadowsHeadlight")) + AddBox(panel,"metrostroi_shadows3",Metrostroi.GetPhrase("Panel.RedLights")) + AddBox(panel,"metrostroi_shadows2",Metrostroi.GetPhrase("Panel.ShadowsOther")) + AddBox(panel,"metrostroi_shadows4",Metrostroi.GetPhrase("Panel.PanelLights")) + AddBox(panel,"metrostroi_sprites",Metrostroi.GetPhrase("Panel.PanelSprites")) + local DRouteNumber = panel:TextEntry(Metrostroi.GetPhrase("Panel.RouteNumber"),"metrostroi_route_number") + AddBox(panel,"metrostroi_minimizedshow",Metrostroi.GetPhrase("Panel.MinimizedShow")) + AddSlider(panel,"metrostroi_cabfov",Metrostroi.GetPhrase("Panel.FOV"),65,100) + AddSlider(panel,"metrostroi_cabz",Metrostroi.GetPhrase("Panel.Z"),-10,10,true) + AddSlider(panel,"metrostroi_renderdistance",Metrostroi.GetPhrase("Panel.RenderDistance"),960,3072) + panel:Button(Metrostroi.GetPhrase("Panel.ReloadClient"),"metrostroi_reload_client",true) + + function DRouteNumber:OnChange() + local oldval = self:GetValue() + local NewValue = "" + for i = 1,math.min(3,#oldval) do + NewValue = NewValue..((oldval[i] or ""):upper():match("[%d]+") or "") + end + local oldpos = self:GetCaretPos() + self:SetText(NewValue) + self:SetCaretPos(math.min(#NewValue,oldpos,3)) + end +end +local function ClientAdvanced(panel) + panel:ClearControls() + panel:SetPadding(0) + panel:SetSpacing(0) + panel:Dock( FILL ) + AddBox(panel,"metrostroi_drawdebug",Metrostroi.GetPhrase("Panel.DrawDebugInfo")) + AddBox(panel,"metrostroi_drawsignaldebug",Metrostroi.GetPhrase("Panel.DrawSignalDebugInfo")) + panel:Button(Metrostroi.GetPhrase("Panel.CheckAddons"),"metrostroi_addons_check") + panel:Button(Metrostroi.GetPhrase("Panel.ReloadLang"),"metrostroi_language_reload",true) + AddSlider(panel,"metrostroi_softdrawmultipier",Metrostroi.GetPhrase("Panel.SoftDraw"),25,400) + AddBox(panel,"metrostroi_language_softreload",Metrostroi.GetPhrase("Panel.SoftReloadLang")) + --panel:AddControl("combobox","metrostroi_language",{Label="Language", options = {"РуÑÑкий","ÐнглийÑкий"}}) + --panel:AddControl("Checkbox",{Label="Draw debugging info", Command = "metrostroi_drawdebug"}) +end + +hook.Add("PopulateToolMenu", "Metrostroi cpanel", function() + spawnmenu.AddToolMenuOption("Utilities", "Metrostroi", "metrostroi_admin_panel", Metrostroi.GetPhrase("Panel.Admin"), "", "", AdminPanel) + spawnmenu.AddToolMenuOption("Utilities", "Metrostroi", "metrostroi_client_panel", Metrostroi.GetPhrase("Panel.Client"), "", "", ClientPanel) + spawnmenu.AddToolMenuOption("Utilities", "Metrostroi", "metrostroi_clientadv_panel", Metrostroi.GetPhrase("Panel.ClientAdvanced"), "", "", ClientAdvanced) +end) diff --git a/lua/metrostroi/cl_debugger.lua b/lua/metrostroi/cl_debugger.lua new file mode 100644 index 0000000..46e7ed7 --- /dev/null +++ b/lua/metrostroi/cl_debugger.lua @@ -0,0 +1,677 @@ +--[[ +Server keeps track of entities and sends their ent:GetDebugVars() return table to all clients +Clients receive and store this data based on entID +Clients loop over displaygroups and read relevant vars from the stored data + +To lower net usage, an array to map variable names to indexes is send to the client when +the length of the table changes. Regular data packages only contain a nameless list of data. +-]] + +local Debugger = {} +Debugger.DisplayGroups = {} +Debugger.EntData = {} +Debugger.EntDataTime = {} +Debugger.EntNameMap = {} + + +local Colors = { + {120,255,255}, + {255,255,0}, + {255,0,0}, + {255,0,255} +} + +local currentcolor = 1 +local function advancecolor() + currentcolor = currentcolor%(#Colors)+1 +end + + +--group.Ents is a list of entities to show the group for, # is baseclass prefix +Debugger.DisplayGroups["Train State"] = { + Data = { + {"Speed","%.1f","km/h"}, + {"Acceleration","%6.3f","m/s2"}, + + {"KVControllerPosition","%.0f","X/T"}, + {"KVReverserPosition", "%.0f","fwd/rev"}, + }, + + Ents = {"#gmod_subway_base"} +} + +Debugger.DisplayGroups["ARS/ALS"] = { + Data = { + {"ALSValue", "%.0f","on/off"}, + {"ARSValue", "%.0f","on/off"}, + + {"ALS_ARS2", "%.0f",""}, + {"ALS_ARS8", "%.0f",""}, + {"ALS_ARS20", "%.0f",""}, + {"ALS_ARS29", "%.0f",""}, + {"ALS_ARS33D", "%.0f",""}, + {"ALS_ARS33G", "%.0f",""}, + {"ALS_ARS33Zh", "%.0f",""}, + + {"ALS_ARSSpeed", "%.1f","km/h"}, + {"ALS_ARSSpeedLimit", "%.1f","km/h"}, + {"ALS_ARSNextLimit", "%.1f","km/h"}, + + {"ALS_ARSSignal80", "%.0f",""}, + {"ALS_ARSSignal70", "%.0f",""}, + {"ALS_ARSSignal60", "%.0f",""}, + {"ALS_ARSSignal40", "%.0f",""}, + {"ALS_ARSSignal0", "%.0f",""}, + {"ALS_ARSSpecial", "%.0f",""}, + {"ALS_ARSNoFreq", "%.0f",""}, + {"ALS_ARSRing", "%.0f",""}, + }, + + Ents = {"#gmod_subway_base"}, + ignore_prefix = "ALS_ARS", +} + +Debugger.DisplayGroups["Power Relays"] = { + Data = { + {"RKRValue","%.0f","0-fwd/1-rev"}, + + {"LK1Value","%.0f",""}, + {"LK2Value","%.0f",""}, + {"LK3Value","%.0f",""}, + {"LK4Value","%.0f",""}, + {"LK5Value","%.0f",""}, + + {"KSH1Value","%.0f",""}, + {"KSH2Value","%.0f",""}, + {"TR1Value","%.0f",""}, + {"TR2Value","%.0f",""}, + + {"RKTTValue","%.0f",""}, + {"RUTValue","%.0f",""}, + {"DR1Value","%.0f",""}, + {"DR2Value","%.0f",""}, + + {"RPLValue","%.0f",""}, + {"RP1_3Value","%.0f",""}, + {"RP2_4Value","%.0f",""}, + {"RPvozvratValue","%.0f",""}, + + {"RZ_1Value","%.0f",""}, + {"RZ_2Value","%.0f",""}, + {"RZ_3Value","%.0f",""}, + }, + + ignore_suffix = "Value", + Ents = {"#gmod_subway_base"} +} + +Debugger.DisplayGroups["Control Relays"] = { + Data = { + --{"RVOValue","%.0f",""}, + --{"RV3Value","%.0f",""}, + --{"RT2Value","%.0f",""}, + --{"RRValue","%.0f",""}, + --{"RSUValue","%.0f",""}, + + {"Xod","relays:",""}, + {"NRValue","%.0f",""}, + {"RKRValue","%.0f",""}, + {"RperValue","%.0f",""}, + + {"Tormoz","relays:",""}, + {"RUPValue","%.0f",""}, + + {"RK","relays:",""}, + {"RRTValue","%.0f",""}, + {"RUTValue","%.0f",""}, + {"SR1Value","%.0f",""}, + {"RV1Value","%.0f",""}, + {"RRValue","%.0f",""}, + + {"Cabin","Relays:",""}, + {"R1_5Value","%.0f",""}, + {"K6Value","%.0f",""}, + {"RVTValue","%.0f",""}, + {"RPBValue","%.0f",""}, + {"KDValue","%.0f",""}, + + {"RV2Value","%.0f",""}, + + {"Other:","",""}, + {"AVTValue","%.0f",""}, + + {"RPLValue","%.0f",""}, + {"RP1_3Value","%.0f",""}, + {"RP2_4Value","%.0f",""}, + {"RPvozvratValue","%.0f",""}, + }, + ignore_suffix = "Value", + Ents = {"#gmod_subway_base"} +} + +Debugger.DisplayGroups["Train Wires"] = { + Data = { + {"TW1", "%d", "level"}, + {"TW2", "%d", "level"}, + {"TW3", "%d", "level"}, + {"TW4", "%d", "level"}, + {"TW5", "%d", "level"}, + {"TW6", "%d", "level"}, + {"TW7", "%d", "level"}, + {"TW8", "%d", "level"}, + {"TW9", "%d", "level"}, + {"TW10", "%d", "level"}, + {"TW11", "%d", "level"}, + {"TW12", "%d", "level"}, + {"TW13", "%d", "level"}, + {"TW14", "%d", "level"}, + {"TW15", "%d", "level"}, + {"TW16", "%d", "level"}, + + {"TW17", "%d", "level"}, + {"TW18", "%d", "level"}, + {"TW19", "%d", "level"}, + {"TW20", "%d", "level"}, + {"TW21", "%d", "level"}, + {"TW22", "%d", "level"}, + {"TW23", "%d", "level"}, + {"TW24", "%d", "level"}, + {"TW25", "%d", "level"}, + {"TW26", "%d", "level"}, + {"TW27", "%d", "level"}, + {"TW28", "%d", "level"}, + {"TW29", "%d", "level"}, + {"TW30", "%d", "level"}, + {"TW31", "%d", "level"}, + {"TW32", "%d", "level"}, + }, + + Ents = {"#gmod_subway_base"} +} + +Debugger.DisplayGroups["Pneumatic System"] = { + Data = { + {"PneumaticDriverValvePosition", "%d", "position"}, + {"PneumaticBrakeLinePressure", "%.3f", "atm"}, + {"PneumaticBrakeCylinderPressure", "%.3f", "atm"}, + {"PneumaticReservoirPressure", "%.3f", "atm"}, + {"PneumaticTrainLinePressure", "%.3f", "atm"}, + {"PneumaticNo1Value","%.0f","on/off"}, + {"PneumaticNo2Value","%.0f","on/off"}, + + {"Pneumatic","latches:",""}, + {"AKValue","%.0f",""}, + {"AVUValue","%.0f",""}, + {"AVTValue","%.0f",""}, + {"BPTValue","%.0f",""}, + {"BDValue","%.0f",""}, + + {"Door","control:",""}, + {"VDOLValue","%.0f",""}, + {"VDOPValue","%.0f",""}, + {"VDZValue","%.0f",""}, + + }, + + ignore_prefix = "Pneumatic", + ignore_suffix = "Value", + Ents = {"#gmod_subway_base"} +} + +Debugger.DisplayGroups["Electric System (1)"] = { + Data = { + {"GVValue","%.0f","on/off"}, + + {"DIP-01K:","",""}, + + {"PowerSupplyXT3.1","%.2f","V"}, + {"PowerSupplyXT3.4","%.2f","V"}, + {"PowerSupplyXT1.2","%.2f","V"}, + + {"Volts:","",""}, + + {"ElectricMain750V","%.2f","V"}, + {"ElectricPower750V","%.2f","V"}, + {"ElectricAux750V","%.2f","V"}, + {"ElectricAux80V","%.2f","V"}, + + {"ElectricR1","%.3g","Ohm"}, + {"ElectricR2","%.3g","Ohm"}, + {"ElectricR3","%.3g","Ohm"}, + {"ElectricRs1","%.3g","Ohm"}, + {"ElectricRs2","%.3g","Ohm"}, + + {"ElectricP1","%.1f","W"}, + {"ElectricP2","%.1f","W"}, + {"ElectricT1","%.2f","degC"}, + {"ElectricT2","%.2f","degC"}, + }, + + ignore_prefix = {"Electric","PowerSupply"}, + ignore_suffix = "Value", + Ents = {"#gmod_subway_base"} +} + +Debugger.DisplayGroups["Electric System (2)"] = { + Data = { + {"ElectricI13","%.2f","A"}, + {"ElectricI24","%.2f","A"}, + {"ElectricItotal","%.2f","A"}, + {"ElectricIRT2","%.2f","A"}, + + {"ElectricUstator13","%.3f","V"}, + {"ElectricUstator24","%.3f","V"}, + {"ElectricIshunt13","%.2f","A"}, + {"ElectricIshunt24","%.2f","A"}, + {"ElectricIstator13","%.2f","A"}, + {"ElectricIstator24","%.2f","A"}, + + {"ElectricR1","%.3g","Ohm"}, + {"ElectricR2","%.3g","Ohm"}, + {"ElectricR3","%.3g","Ohm"}, + {"ElectricRs1","%.3g","Ohm"}, + {"ElectricRs2","%.3g","Ohm"}, + + {"ElectricP1","%.1f","W"}, + {"ElectricP2","%.1f","W"}, + {"ElectricT1","%.2f","degC"}, + {"ElectricT2","%.2f","degC"}, + }, + + ignore_prefix = {"Electric","PowerSupply"}, + ignore_suffix = "Value", + Ents = {"#gmod_subway_base"} +} + +Debugger.DisplayGroups["Engines"] = { + Data = { + {"EnginesMagneticFlux13","%.3f",""}, + {"EnginesMagneticFlux24","%.3f",""}, + {"EnginesE13","%.3f","V"}, + {"EnginesE24","%.3f","V"}, + {"EnginesRotationRate","%.1f","rpm"}, + {"EnginesMoment13","%.2f",""}, + {"EnginesMoment24","%.2f",""}, + + {"EnginesFieldReduction13","%.2f","%"}, + {"EnginesFieldReduction24","%.2f","%"}, + }, + + ignore_prefix = "Engines", + Ents = {"#gmod_subway_base"} +} + +Debugger.DisplayGroups["RK & PS"] = { + Data = { + {"Rheostat","controller:",""}, + + {"RheostatControllerMotorState","%.1f",""}, + {"RheostatControllerMotorCoilState","%.1f",""}, + + {"RheostatControllerPosition","%.2f","position"}, + {"RheostatControllerVelocity","%.2f","1/sec"}, + + {"RheostatControllerRKM1","%.1f",""}, + {"RheostatControllerRKM2","%.1f",""}, + {"RheostatControllerRKP","%.1f",""}, + + {"Position","switch:",""}, + + {"PositionSwitchMotorState","%.1f",""}, + {"PositionSwitchMotorCoilState","%.1f",""}, + + {"PositionSwitchPosition","%.2f","position"}, + {"PositionSwitchVelocity","%.2f","1/sec"}, + {"PositionSwitchRKP","%.1f",""}, + }, + + + ignore_prefix = {"RheostatController","PositionSwitch"}, + Ents = {"#gmod_subway_base"} +} + +Debugger.DisplayGroups["DURA"] = { + Data = { + {"DURASwitchBlocked","%.0f",""}, + {"DURASelectedAlternate","%.0f",""}, + {"DURASelectingAlternate","%.0f",""}, + {"DURASelectingMain","%.0f",""}, + + {"DURANextLightRed","%.0f",""}, + {"DURANextLightYellow","%.0f",""}, + {"DURADistanceToLight","%.1f","m"}, + }, + + ignore_prefix = "DURA", + Ents = {"#gmod_subway_base"} +} + +Debugger.DisplayGroups["Bogey"] = { + Data = { + {"Speed","%.1f","km/h"}, + {"Acceleration","%6.2f","","m/s2"}, + }, + + Ents = {"gmod_train_bogey"} +} + + + + +-------------------------------------------------------------------------------- +local function ProccessGroup(group) + group.Enabled = true + + local prefixes = group.ignore_prefix + local suffix = group.ignore_suffix + if type(prefixes) ~= "table" then + prefixes = { prefixes } + end + + for k,v in pairs(group.Data) do + if not v[4] then + for _,prefix in pairs(prefixes) do + if string.find(v[1],prefix) then + v[4] = string.Right(v[1],string.len(v[1])-string.len(prefix)) + end + end + if suffix then + if string.find(v[1],suffix) then + v[4] = string.sub(v[1],1,string.len(v[1])-string.len(suffix)) + end + end + end + end +end + +for k,v in pairs(Debugger.DisplayGroups) do + ProccessGroup(v) +end + + +local function GetEntVar(entid,varname) + if not Debugger.EntNameMap[entid] then return end + if not Debugger.EntNameMap[entid][varname] then return end + if not Debugger.EntData[entid] then return end + + return Debugger.EntData[entid][Debugger.EntNameMap[entid][varname]] +end + +local function EnableGroup(group,bool) + group.Enabled = bool +end + + + +local function OpenConfigWindow() + local Panel = vgui.Create("DFrame") + Panel:SetPos(surface.ScreenWidth()/5,surface.ScreenHeight()/3) + Panel:SetSize(250,250) + Panel:SetTitle("Metrostroi Debugger Config") + Panel:SetVisible(true) + Panel:SetDraggable(true) + Panel:ShowCloseButton(true) + + Panel:MakePopup() + + List = vgui.Create("DPanelList",Panel) + + List:SetPos(10,30) + List:SetSize(200,200) + List:SetSpacing(5) + List:EnableHorizontal(false) + List:EnableVerticalScrollbar(true) + + for k,v in pairs(Debugger.DisplayGroups) do + local Box = vgui.Create("DCheckBoxLabel") + Box:SetText(k) + if v.Enabled then + Box:SetValue(1) + else + Box:SetValue(0) + end -- TODO: Do this nicer somehow + Box:SizeToContents() + List:AddItem(Box) + Box.OnChange = function() EnableGroup(v,Box:GetChecked()) end + end +end +concommand.Add("metrostroi_debugger_config",OpenConfigWindow,nil,"Show debugger system selection window") +--[[ --Unused, just reference for now +local function PresentSelectionScreen(options) + local screen = vgui.Create("DFrame") + screen:SetPos(50,50) + screen:SetSize(400,400) + screen:SetTitle("Select systems to view") + screen:SetVisible(true) + screen:SetDraggable(true) + screen:ShowCloseButton(true) + + local syslist = vgui.Create("DListView",screen) + syslist:SetMultiSelect(true) + syslist:AddColumn("Systems") + syslist:SetSize(400,300) + syslist:SetPos(5,30) + + + for k,v in pairs(options) do + syslist:AddLine(k) + end + + local send = vgui.Create("DButton",screen) + send:SetText("Confirm") + send:SetPos(200,370) + send.DoClick = function() + local selectedsystems = {} + for k,v in pairs(syslist:GetSelected()) do + table.insert(selectedsystems,v:GetValue(1)) + end + + net.Start("metrostroi_debugger_server_system_setup") + net.WriteTable(selectedsystems) + net.SendToServer() + end + send:SizeToContents() + + + screen:SizeToContents() + screen:MakePopup() + +end +--]] + + --[[ --Uncomment me if you need to keep track of changes in ent:GetDebugVars returns +local lastcount +local lastcopy +local tabledebug = true +--]] + +--Receives the bulk nameless data +net.Receive("metrostroi-debugger-dataupdate",function(len,ply) + local count = net.ReadInt(8) + for i=1,count do + local data = net.ReadTable() + Debugger.EntData[data[1]]=data[2] + Debugger.EntDataTime[data[1]]=CurTime() + + --Hackly code for debugging purposes, see above + if tabledebug then + newcopy = Debugger.EntData[data[1]] + newcount = table.Count(newcopy) + if newcount ~= lastcount and lastcount ~= nil then + + for k,v in pairs(newcopy) do + if not lastcopy[k] then + print("System debugger: New key ",k,v) + end + end + + for k,v in pairs(lastcopy) do + if not newcopy[k] then + print("System debugger: Key missing ",k,v) + end + end + end + + lastcount = newcount + lastcopy = newcopy + end + end +end) + + +surface.CreateFont( "DebugBoxText", { + font = "Consolas", + size = 13, + weight = -5, --Don't question it + blursize = 0, + scanlines = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false +} ) + +--Takes an entire displaygroup and ent, returns width of complete box +local function getDisplayGroupWidth(displaygroup,entid) + local width = 0 + for k,v in pairs(displaygroup.Data) do + local v2 = string.format(v[2],tonumber(GetEntVar(entid,v[1]) or 0) or 0) + width = width + 5 + math.max( + surface.GetTextSize(v[4] or v[1]), + surface.GetTextSize(v2), + surface.GetTextSize(v[3]) + ) + end + return width +end + +--Takes x,y, complete group and entid, draws debugger box +local function drawBox(x,y,displaygroup,entid) + local localx = 10 + + local width = getDisplayGroupWidth(displaygroup,entid) + + + + local rgb = Colors[currentcolor] + + --surface.SetTextColor(Color(120,255,255)) + surface.SetTextColor(rgb[1],rgb[2],rgb[3]) + surface.SetAlphaMultiplier(0.8) + surface.SetDrawColor(Color(0,0,0)) + surface.DrawRect(x,y,width+10,55) + surface.SetAlphaMultiplier(1) + + + for k,v in pairs(displaygroup.Data) do + surface.SetTextPos(x+localx,y+5) + surface.DrawText(v[4] or v[1]) + + local v2 = string.format(v[2],tonumber(GetEntVar(entid,v[1]) or 0) or 0) + surface.SetTextPos(x+localx,y+20) + surface.DrawText(v2) + + surface.SetTextPos(x+localx,y+35) + surface.DrawText(v[3]) + + localx = localx + 5 + math.max( + surface.GetTextSize(v[4] or v[1]), + surface.GetTextSize(v2), + surface.GetTextSize(v[3]) + ) + end + +end + +--Checks if we haven't gotten data from entid in a while +local function isTimedOut(id) + local timeout = GetConVarNumber("metrostroi_debugger_data_timeout") + return timeout ~= nil and timeout > 0 and CurTime() - Debugger.EntDataTime[id] > timeout +end + +--Checks if we should draw a group according to group settings and entity state +local function ShouldDrawGroup(group,id) + if not group.Enabled then return false end + local ent = ents.GetByIndex(id) + if not IsValid(ent) then return false end + for k,v in pairs(group.Ents) do + if v[1]=="#" then + if string.Right(v,string.len(v)-1) == ent.Base then return true end + else + if ent:GetClass() == v then return true end + end + end + return false +end + + +hook.Add( "HUDPaint", "metrostroi-draw-system-debugger", function() + surface.SetFont("DebugBoxText") + currentcolor = 1 + + + if Debugger.EntData ~= nil then + local localy = 15 --+ 65 + + if GetConVarNumber("developer") then + localy = 77 + end + + if IsValid(LocalPlayer()) then + local wep = LocalPlayer():GetActiveWeapon() + if IsValid(wep) and wep:GetClass() == "gmod_tool" then + localy = 178 + end + end + + --For every entity + for id,vars in pairs(Debugger.EntData) do + + --For every displaygroup + if not isTimedOut(id) then + for groupname,group in pairs(Debugger.DisplayGroups) do + if ShouldDrawGroup(group,id) then + drawBox(25,localy,group,id) + + localy=localy+60 + end + end + advancecolor() + end + end + end + +end) + +--Clears all relevant entity data +local function RemoveEnt(id) + Debugger.EntData[id] = nil + Debugger.EntDataTime[id] = nil + Debugger.EntNameMap[id] = nil +end + +--Receiving this from the server since the client hook is unreliable +net.Receive("metrostroi-debugger-entremoved",function(len,ply) + local id = net.ReadInt(16) + if Debugger.EntData[id] then + RemoveEnt(id) + end +end) + +--Receives the namemap +net.Receive("metrostroi-debugger-entnamemap",function(len,ply) + local entid = net.ReadInt(16) + local entvars = net.ReadTable() + local index = 1 + + Debugger.EntNameMap[entid] = {} + for k,v in SortedPairs(entvars) do + Debugger.EntNameMap[entid][k] = index + index = index + 1 + end +end) diff --git a/lua/metrostroi/cl_language.lua b/lua/metrostroi/cl_language.lua new file mode 100644 index 0000000..f79a34f --- /dev/null +++ b/lua/metrostroi/cl_language.lua @@ -0,0 +1,459 @@ +---[=[ +local function removeSpaces(str) + return str:gsub("#[.*#]",""):gsub("([^\\#])#.*$","%1"):gsub("\\#","#"):gsub("^[ \t]+",""):gsub("[ \t]+$","") +end + +--local LangTable = {} + +--]=] + + +Metrostroi.Languages = Metrostroi.Languages or {} +Metrostroi.ChoosedLang = GetConVarString("metrostroi_language") +function Metrostroi.GetPhrase(phrase) + if Metrostroi.CurrentLanguageTable and not Metrostroi.CurrentLanguageTable[phrase] then + MsgC(Color(255,0,0),"No phrase:",Color(0,255,0),phrase,"\n") + end + return + Metrostroi.CurrentLanguageTable and Metrostroi.CurrentLanguageTable[phrase] or phrase +end +function Metrostroi.HasPhrase(phrase) + if Metrostroi.CurrentLanguageTable and not Metrostroi.CurrentLanguageTable[phrase] then + MsgC(Color(255,0,0),"No phrase:",Color(0,255,0),phrase,"\n") + end + return + Metrostroi.CurrentLanguageTable and Metrostroi.CurrentLanguageTable[phrase] +end + +if not file.Exists("metrostroi_data","DATA") then file.CreateDir("metrostroi_data") end +if not file.Exists("metrostroi_data/languages","DATA") then file.CreateDir("metrostroi_data/languages") end +local function debugmsg(...) + if GetConVarNumber("metrostroi_drawdebug") == 0 then return end + MsgC(...) + MsgC("\n") +end +local function errmsg(...) + if GetConVarNumber("metrostroi_drawdebug") == 0 then return end + MsgC(...) + ErrorNoHalt("\n") +end +local function errnhmsg(...) + if GetConVarNumber("metrostroi_drawdebug") == 0 then return end + ErrorNoHalt(...) +end +function Metrostroi.LoadLanguage(lang,force) + if not Metrostroi.Languages[lang] then return end + local ENTl = list.GetForEdit("SpawnableEntities") + local SWEPl = list.GetForEdit("Weapon") + Metrostroi.CurrentLanguageTable = Metrostroi.Languages[lang] or {} + for id,phrase in pairs(Metrostroi.CurrentLanguageTable) do + if id == "lang" then continue end + if id:sub(1,9) == "Entities." then + local tbl = string.Explode(".",id:sub(10,-1)) + if tbl[1] == "Category" then + local cat = tbl[2] + debugmsg(Color(255,0,255),"Add language ",lang," phrase:\t",Color(0,255,0),id,"=",phrase,Color(255,0,255)," for class ",Color(0,255,0),class) + continue + end + local class = tbl[1] + local ENT = scripted_ents.GetStored(class) + if not ENT then + errmsg(Color(255,0,0),"No entity ",Color(255,0,255),class,Color(255,0,0)," for phrase:",Color(0,255,0),id) + continue + else + ENT = ENT.t + end + if tbl[2] == "Name" then + if not ENTl[class] then + if ENT.Spawner then + ENT.Spawner.Name = phrase + else + errmsg(Color(255,0,0),"No spawnmenu for entity ",Color(255,0,255),class,Color(255,0,0)," for phrase:",Color(0,255,0),id) + end + continue + end + ENTl[class].PrintName = phrase + debugmsg(Color(255,0,255),"Add language ",lang," phrase:\t",Color(0,255,0),id,"=",phrase,Color(255,0,255)," for class ",Color(0,255,0),class) + elseif tbl[2] == "Buttons" then + if not ENT.ButtonMap[tbl[3]] then + errnhmsg("Check translation for "..id.."! Can't find panel named "..tbl[3].."\n") + continue + end + if not ENT.ButtonMap[tbl[3]].buttons then + errnhmsg("Check translation for "..id.."! Can't find buttons in panel named "..tbl[3].."\n") + end + local button + for k,v in pairs(ENT.ButtonMap[tbl[3]].buttons) do + if v.ID == tbl[4] then + v.tooltip = phrase + button = v + break + end + end + if not button then + errnhmsg("Check translation for "..id.."! Can't find button named "..tbl[4].." in panel "..tbl[3].."\n") + end + elseif tbl[2] == "Spawner" then + if not ENT.Spawner then + errmsg(Color(255,0,0),"No spawner table for entity ",Color(255,0,255),class,Color(255,0,0)," for phrase:",Color(0,255,0),id) + continue + end + for i,v in pairs(ENT.Spawner) do + if type(v) == "function" then continue end + if v[1] == tbl[3] then + if tbl[4] == "Name" then + v[2] = phrase + elseif v[3] == "List" and v[4] then + local numb = tonumber(tbl[4]) + if numb and type(v[4]) ~= "function" and v[4][numb] then + v[4][numb] = phrase + else + errmsg(Color(255,0,0),"No spawner list table for entity ",Color(255,0,255),class,Color(255,0,0)," for phrase:",Color(0,255,0),id) + end + else + errmsg(Color(255,0,0),"Spawner translate error for entity ",Color(255,0,255),class,Color(255,0,0)," for phrase:",Color(0,255,0),id) + end + end + end + end + elseif id:sub(1,8) == "Weapons." then + local tbl = string.Explode(".",id:sub(9,-1)) + local class = tbl[1] + local SWEP = weapons.GetStored(class) + if not SWEP then + errmsg(Color(255,0,0),"No weapon ",Color(255,0,255),class,Color(255,0,0)," for phrase:",Color(0,255,0),id) + continue + end + if tbl[2] == "Name" then + SWEP.PrintName = phrase + SWEPl[class].PrintName = phrase + elseif tbl[2] == "Purpose" then + SWEP.Purpose = phrase + --SWEPl[class].Purpose = phrase + elseif tbl[2] == "Instructions" then + SWEP.Instructions = phrase + --SWEPl[class].Instructions = phrase + end + debugmsg(Color(255,0,255),"Add language ",lang," phrase:\t",Color(0,255,0),id,"=",phrase,Color(255,0,255)," for class ",Color(0,255,0),class) + else + debugmsg(Color(255,0,255),"Add language ",lang," phrase:\t",Color(0,255,0),id,Color(255,0,255),"=",Color(0,255,0),phrase) + end + end + if force or GetConVarNumber("metrostroi_language_softreload")~=1 then + RunConsoleCommand("spawnmenu_reload") + hook.Run( "GameContentChanged" ) + end +end + +cvars.AddChangeCallback("metrostroi_language", function(cvar, old, value) + Metrostroi.LoadLanguage(value,true) +end, "language") + +local function parseLangFile(filename,txt) + local currlang + local i = 0 + local ignoring = false + for line in txt:gmatch("[^\n\r]+") do + i = i + 1 + if ignoring and line:find("%][^\\]?#") then ignoring = false continue end + if ignoring then continue end + if line:find("[^\\]?#%[") then ignoring = true end + local lang,founded = removeSpaces(line):gsub("^%[([%w]+)%]$","%1") + if founded > 0 then + currlang = lang + Metrostroi.Languages[lang] = Metrostroi.Languages[lang] or {} + continue + end + local founded = line:gsub("^%[([%w]+)%]$","%1") + local k,v = line:match("([^=]+)=([^=]+)") + if k and v then + if not currlang then + errnhmsg("Metrostroi: Language not selected\n") + break + end + Metrostroi.Languages[currlang][removeSpaces(k)] = removeSpaces(v):gsub("\\n","\n"):gsub("\\t","\t") + continue + end + if #line > 0 and line[1] ~="#" then + errnhmsg(Format("Metrostroi: Language parse error in line %d: %s [%s]\n",i,line,filename)) + break + end + end +end + +local function exportLangJSON(filename,txt) + local langs = {} + local currlang + local i = 0 + local ignoring = false + for line in txt:gmatch("[^\n\r]+") do + i = i + 1 + if ignoring and line:find("%][^\\]?#") then ignoring = false continue end + if ignoring then continue end + if line:find("[^\\]?#%[") then ignoring = true end + local lang,founded = removeSpaces(line):gsub("^%[([%w]+)%]$","%1") + if founded > 0 then + print("Selected lang",lang) + currlang = lang + if not langs[currlang] then langs[currlang] = "{" end + continue + end + local founded = line:gsub("^%[([%w]+)%]$","%1") + local k,v = line:match("([^=]+)=([^=]+)") + if k and v then + if not currlang then + errnhmsg("Metrostroi: Language not selected\n") + break + end + local str,addstr = langs[currlang],Format('\n\t"%s": "%s"',removeSpaces(k),removeSpaces(string.JavascriptSafe(v):gsub("\\\\([tn])","\\%1"))) + if langs[currlang] == "{" then + langs[currlang] = str..addstr + else + langs[currlang] = str..","..addstr + end + continue + end + if #line > 0 and line[1] ~="#" then + errnhmsg(Format("Metrostroi: Language parse error in line %d: %s [%s]\n",i,line,filename)) + break + end + end + local str = "" + for k,v in pairs(langs) do + str = str.."["..k.."]\n"..v.."\n}" + end + SetClipboardText(str) +end + + +concommand.Add("metrostroi_language_exportjson", function(_, _, args) + if not args[1] then return end + print("metrostroi_data/languages/"..args[1]..".lua") + exportLangJSON(args[1],include("metrostroi_data/languages/"..args[1]..".lua")) +end) + +local function reloadLang() + if not GAMEMODE or not Metrostroi then return end + Metrostroi.Languages = {en = {}} + --Load builtin default languages + --[[ if Metrostroi.BuiltinLanguages then + for k, lang in pairs(Metrostroi.BuiltinLanguages) do + local JSON = util.JSONToTable(lang) + if not JSON then ErrorNoHalt("Metrostroi: Error loading default language file: ",k,"\n") continue end + if not Metrostroi.Languages[JSON.Lang] then Metrostroi.Languages[JSON.Lang] = {} end + for id,phrase in pairs(JSON) do + Metrostroi.Languages[JSON.Lang][id] = phrase + end + end + end--]] + + --Load builtin lua languages/*_base.lua + for k, filename in pairs(file.Find("metrostroi_data/languages/*_base.lua","LUA")) do + local lang = include("metrostroi_data/languages/"..filename) + if not lang then continue end + parseLangFile(filename,lang) + end + --Load client languages + for k, filename in pairs(file.Find( "metrostroi_data/languages/*_base.txt", "DATA")) do + local lang = file.Read("metrostroi_data/languages/"..filename) + parseLangFile(filename,lang) + end + + --Load builtin lua languages + for k, filename in pairs(file.Find("metrostroi_data/languages/*.lua","LUA")) do + if filename:find("_base.lua") then continue end + local lang = include("metrostroi_data/languages/"..filename) + if not lang then continue end + parseLangFile(filename,lang) + end + --Load client languages + for k, filename in pairs(file.Find( "metrostroi_data/languages/*.txt", "DATA")) do + if filename:find("_base.txt") then continue end + local lang = file.Read("metrostroi_data/languages/"..filename) + parseLangFile(filename,lang) + end + --shitcode yay(repace missing phrase with english) + for lang,langtbl in pairs(Metrostroi.Languages) do + if lang == "en" then continue end + for id,phrase in pairs(Metrostroi.Languages.en) do + if not langtbl[id] then + langtbl[id] = phrase + debugmsg(Color(255,0,0),"Founded missing phrase ",Color(255,0,255),id,Color(255,0,0)," in ",lang," translation! Replaced with en.") + end + end + end + for lang,tbl in pairs(Metrostroi.Languages) do + for id,str in pairs(tbl) do + local pos = 1 + local iter = 1 + repeat + local start_pos,end_pos = str:find("@%[[^]]+%]",pos) + if not start_pos then break end + + local repstr = tbl[str:match("@%[([^]]+)%]")] + if not repstr then + pos = end_pos+1 + continue + end + str = str:sub(1,start_pos-1)..repstr..str:sub(end_pos+1,-1) + iter = iter + 1 + until iter > 1000 + if iter > 1 then tbl[id] = str end + end + end + + Metrostroi.LoadLanguage(Metrostroi.ChoosedLang) + if not Metrostroi.CurrentLanguageTable then + Metrostroi.ChoosedLang = GetConVarString("gmod_language") + if not Metrostroi.Languages[Metrostroi.ChoosedLang] then Metrostroi.ChoosedLang = "en" end + RunConsoleCommand("metrostroi_language",Metrostroi.ChoosedLang) + end +end +hook.Add("OnGamemodeLoaded","MetrostroiLanguageSystem",reloadLang) +concommand.Add("metrostroi_language_reload",reloadLang) +reloadLang() + + + + +concommand.Add("metrostroi_language_checktranslation", function(_, _, args) + if not Metrostroi.CurrentLanguageTable then return end + local str = "[langname]\nlang=Langname\n\n" + + for class, t in pairs(scripted_ents.GetList()) do + local ENT = t.t + if ENT.ButtonMap or ENT.Cameras or ENT.Spawner then + str = str.."#"..class.."\n" + end + if ENT.ButtonMap then + str = str.."#Buttons:\n" + for panelname, panel in pairs(ENT.ButtonMap) do + if panel.buttons then + for buttonname, button in pairs(panel.buttons) do + if button.tooltip then + if not button.ID and args[1] then + MsgC(Color(255, 0, 0), ENT.ClassName, " ", (button.tooltip or "nil"):Replace("\n", "\\n"):Replace("\t", "\\t"):Replace("\"", "\\\""), "\n") + elseif button.ID and not args[1] then + local id = Format("Entities.%s.Buttons.%s.%s", class, panelname, button.ID) + --elseif button.ID and args[1] == "all" then + --print(Format("\"Entities.%s.Buttons.%s.%s\": \"%s\",",class,panelname,button.ID,button.tooltip:Replace("\n","\\n"):Replace("\t","\\t"):Replace("\"","\\\""))) + if not Metrostroi.CurrentLanguageTable[id] then + local name = Format("%s = %s\n", id,button.tooltip:JavascriptSafe()) + MsgC(Color(255, 0, 0), name) + str = str .. name + end + end + end + end + end + end + end + + --Format("Entities.%s.Buttons.%s.%s",class,panelname,button.ID) + if ENT.Cameras then + str = str.."#Cameras:\n" + for i, cam in pairs(ENT.Cameras) do + if not cam[3] or type(cam[3])~="string" then continue end + local id = cam[3]:JavascriptSafe() + + if not Metrostroi.CurrentLanguageTable[id] then + MsgC(Color(255, 0, 0), Format("%s = %s\n", id, id)) + str = str .. Format("%s = %s\n", id, id) + end + end + end + --end + + --for class, t in pairs(scripted_ents.GetList()) do + --local ENT = t.t + + if ENT.Spawner then + str = str.."#Spawner:\n" + for i, tbl in ipairs(ENT.Spawner) do + if not args[1] and not Metrostroi.CurrentLanguageTable[Format("Entities.%s.Spawner.%s.Name", class, tbl[1])] and tbl[2] then + local name = tbl[2] + + if name:sub(1, 8) == "Spawner." then + name = Metrostroi.GetPhrase(name) + end + + name = name:JavascriptSafe() + print(Format("Entities.%s.Spawner.%s.Name = %s", class, tbl[1], name)) + str = str .. Format("Entities.%s.Spawner.%s.Name = %s\n", class, tbl[1], name) + end + + if tbl[3] == "List" and type(tbl[4])=="table" then + for k, v in ipairs(tbl[4]) do + if type(v) == "string" and not args[1] and not Metrostroi.CurrentLanguageTable[Format("Entities.%s.Spawner.%s.%s", class, tbl[1], k)] then + if v:sub(1, 8) == "Spawner." then + v = Metrostroi.GetPhrase(v) + end + v = v:JavascriptSafe() + print(Format("Entities.%s.Spawner.%s.%s = %s", class, tbl[1], k, v)) + str = str .. Format("Entities.%s.Spawner.%s.%s = %s\n", class, tbl[1], k, v) + end + end + end + end + end + end + + SetClipboardText(str) +end) + +Metrostroi.LanguageCache = Metrostroi.LanguageCache or {} +timer.Simple(0,function() + net.Start("metrostroi_language_sync") + net.SendToServer() +end) +net.Receive("metrostroi_language_sync",function() + print("------RECV------") + local id = net.ReadUInt(32) + local maxf = net.ReadUInt(8) + local currf = net.ReadUInt(8) + local count = net.ReadUInt(8) + local num = net.ReadUInt(8) + print("ID:"..id) + print(Format("Num:%02d/%02d",currf,maxf)) + print(Format("count:%02d/%02d",num,count)) + + Metrostroi.LanguageCache[id] = Metrostroi.LanguageCache[id] or {} + Metrostroi.LanguageCache[id][currf] = Metrostroi.LanguageCache[id][currf] or {} + local size = net.ReadUInt(32) + Metrostroi.LanguageCache[id][currf][num] = net.ReadData(size) + + print(Format("Metrostroi.LanguageCache[%d][%d] %s",id,currf,Metrostroi.LanguageCache[id][currf])) + print("Size:"..size) + + local done = true + + for cf=1,maxf do + if not Metrostroi.LanguageCache[id][cf] then done = false break end + local tdata = Metrostroi.LanguageCache[id][cf] + local pd = true + if tdata and type(tdata) == "table" and true then + for cd=0,#tdata do + if not tdata[cd] then pd = false break end + end + if pd then + print("Done receiving text data") + local data = "" + for i=0,#tdata do + data = data.. tdata[i] + end + Metrostroi.LanguageCache[id][cf] = data + end + end + if not pd then done = false break end + end + if done then + print("Done receiving all lang data") + local langdata = Metrostroi.LanguageCache[id] + Metrostroi.LanguageCache[id] = nil + Metrostroi.BuiltinLanguages = {} + for k,v in pairs(langdata) do Metrostroi.BuiltinLanguages[k] = util.Decompress(v) end + --data = util.Decompress(data) + reloadLang() + end + +end) diff --git a/lua/metrostroi/cl_trackeditor.lua b/lua/metrostroi/cl_trackeditor.lua new file mode 100644 index 0000000..3319cd3 --- /dev/null +++ b/lua/metrostroi/cl_trackeditor.lua @@ -0,0 +1,188 @@ +local Paths = {} +local ServerMessage +local MessageLabel +local List +local SelectedPath + +local SelectedColor = Color(255,0,0) +local DeSelectedColor = color_white + +local function RemovePath(pathid) + RunConsoleCommand("metrostroi_trackeditor_removepath",pathid) +end + +local function TeleToStart(pathid) + RunConsoleCommand("metrostroi_trackeditor_teletostart",pathid) +end + +local function TeleToEnd(pathid) + RunConsoleCommand("metrostroi_trackeditor_teletoend",pathid) +end + +local function TeleEntToStart(pathid) + RunConsoleCommand("metrostroi_trackeditor_teleenttostart",pathid) +end + +local function TeleEntToEnd(pathid) + RunConsoleCommand("metrostroi_trackeditor_teleenttoend",pathid) +end + +local function SetSelectedPath(self,lineID, line) + SelectedPath = lineID +end + +local function ShowRowMenu(self,lineID, line) + local menu = DermaMenu() + menu:AddOption("Teleport entity to start",function() TeleEntToStart(lineID) end) + menu:AddOption("Teleport entity to end",function() TeleEntToEnd(lineID) end) + menu:AddOption("Teleport me to start",function() TeleToStart(lineID) end) + menu:AddOption("Teleport me to end",function() TeleToEnd(lineID) end) + menu:AddOption("Delete",function() RemovePath(lineID) end) + menu:Open() +end + +local function UpdateList() + if not List then return end + List:Clear() + for k,v in pairs(Paths) do + List:AddLine(k,#v) + end +end + +net.Receive("metrostroi_trackeditor_trackdata",function(len,ply) + local ID = net.ReadInt(16) + print(Format("Received trackeditor path:%d",ID)) + if ID == 0 then + Paths = {} + return + end + Paths[ID] = net.ReadTable() + UpdateList() +end) + +net.Receive("metrostroi_trackeditor_message",function(len,ply) + ServerMessage = net.ReadString() + if MessageLabel and ServerMessage and IsValid(MessageLabel) then + MessageLabel:SetText(ServerMessage) + end +end) +local ShowPaths=true +concommand.Add("metrostroi_trackeditor_togglenodes",function() + ShowPaths=not ShowPaths +end) +local function OpenConfigWindow() + + local function AddButton(parent,cmd,label,tooltip) + local Button = vgui.Create("DButton",parent) + Button:SetText(label) + Button:SizeToContents() + Button:SetConsoleCommand(cmd) + Button:SetSize(100,30) + Button:DockMargin(2,2,2,2) + Button:SetColor(color_black) + Button:SetToolTip(tooltip) + return Button + end + + local function AddLabel(parent,str) + local Label = vgui.Create("DLabel",parent) + Label:SetText(str) + Label:SizeToContents() + Label:SetContentAlignment(5) + Label:DockMargin(2,2,2,2) + return Label + end + + --Main frame + local Frame = vgui.Create("DFrame") + Frame:SetPos(surface.ScreenWidth()/5,surface.ScreenHeight()/3) + Frame:SetSize(250,400) + Frame:SetTitle("Metrostroi Track Recorder") + Frame:SetVisible(true) + Frame:SetDraggable(true) + Frame:ShowCloseButton(true) + + --Mark entity button + local mb = AddButton(Frame,"metrostroi_trackeditor_mark","Mark Entity","Mark the entity you're looking at as the one to record with") + mb:DockMargin(2,2,2,2) + mb:Dock(TOP) + mb:SetColor(color_black) + + --Panel for path recording + local PathPanel = vgui.Create("DPanel",Frame) + PathPanel:SetSize(20,60) + PathPanel:DockMargin(2,2,2,2) + PathPanel:Dock(TOP) + + --Label for path recording panel + local PathL = AddLabel(PathPanel,"Path Recording") + PathL:Dock(TOP) + PathL:SetDark(true) + + --Start/stop buttons + local b1 = AddButton(PathPanel,"metrostroi_trackeditor_start","Start","Start recording a new path") + local b2 = AddButton(PathPanel,"metrostroi_trackeditor_stop","Stop","Stop recording the current path") + + b1:Dock(LEFT) + b2:Dock(RIGHT) + + --Save/load panel + local LoadPanel = vgui.Create("DPanel",Frame) + LoadPanel:SetSize(20,60) + LoadPanel:DockMargin(2,2,2,2) + LoadPanel:Dock(TOP) + + --Label for save/load panel + local FileL = AddLabel(LoadPanel,"Save/load to file") + FileL:Dock(TOP) + FileL:SetDark(true) + + --Save/load buttons + local b1 = AddButton(LoadPanel,"metrostroi_trackeditor_load","Load","Load the map's track data file") + local b2 = AddButton(LoadPanel,"metrostroi_trackeditor_save","Save","Save all paths to the map's data file") + + b1:Dock(LEFT) + b2:Dock(RIGHT) + + --Server message label + MessageLabel = AddLabel(Frame,"") + MessageLabel:Dock(TOP) + + local b3=AddButton(Frame,"metrostroi_trackeditor_togglenodes","Hide/Show Nodes","Toggle if node lines are shown or not.") + b3:Dock(TOP) + + List = vgui.Create("DListView",Frame) + List:DockMargin(2,2,2,2) + List:Dock(FILL) + List:SetMultiSelect(false) + List:AddColumn("ID") + List:AddColumn("Nodes") + List:SetTall(100) + List.OnRowSelected = SetSelectedPath + List.OnRowRightClick = ShowRowMenu + UpdateList() + + Frame:SizeToContents() + Frame:MakePopup() +end +concommand.Add("metrostroi_trackeditor",OpenConfigWindow,nil,"GUI for track editor") + + + +hook.Add("PostDrawTranslucentRenderables","metrostroi_trackeditor_draw",function() + if ShowPaths then + for k,path in pairs(Paths) do + + local lastnode = nil + local col = Either(k==SelectedPath,SelectedColor,DeSelectedColor) + + for k2,node in pairs(path) do + if lastnode then + render.DrawLine(node,lastnode,col,true) + end + render.DrawWireframeSphere(node,10,2,2,col,true) + lastnode = node + end + end + end +end) \ No newline at end of file diff --git a/lua/metrostroi/cl_trainedit.lua b/lua/metrostroi/cl_trainedit.lua new file mode 100644 index 0000000..d287305 --- /dev/null +++ b/lua/metrostroi/cl_trainedit.lua @@ -0,0 +1,603 @@ +local Frame +local Train +local function AddButton(parent,func,label,tooltip) + local Button = vgui.Create("DButton",parent) + Button:SetText(label) + Button:SizeToContents() + Button.DoClick = func + Button:SetSize(100,30) + Button:DockMargin(2,2,2,2) + Button:SetColor(color_black) + Button:SetToolTip(tooltip) + return Button +end + +local function AddLabel(parent,str) + local Label = vgui.Create("DLabel",parent) + Label:SetText(str) + Label:SizeToContents() + Label:SetContentAlignment(5) + Label:DockMargin(2,2,2,2) + return Label +end +local function EditCSEnts() + local CSFrame = vgui.Create("DFrame",Frame) + local _,y = Frame:GetSize() + CSFrame:SetPos(surface.ScreenWidth()/5+250,surface.ScreenHeight()/3-400/2+y/2) + CSFrame:SetSize(400,420) + CSFrame:SetTitle("CSEnts editor") + CSFrame:SetVisible(true) + CSFrame:SetDraggable(true) + CSFrame:ShowCloseButton(true) + CSFrame:MakePopup() + CSFrame:SetScreenLock(true) + --Mark entity button + + local CSEnts = vgui.Create( "DTextEntry",CSFrame) + CSEnts:SetText("Choose a CSEnt") + CSEnts:Dock(TOP) + --for k,v in pairs(Train.ClientProps) do + --CSEnts:AddChoice(k) + --end + CSEnts.OnChange = function(self) + local val = self:GetValue() + if not Train.ClientProps[val] and not Train.ClientPropsOv[val] then + if val ~= "" then CSFrame.AddButton:SetVisible(true) end + CSFrame.PropertiesPanel:SetVisible(false) + return + end + local Properties = CSFrame.PropertiesPanel + if not Train.ClientPropsOv[val] and Train.ClientProps[val] then + Train.ClientPropsOv[val] = table.Copy(Train.ClientProps[val]) + end + CSFrame.ChoosedProp = Train.ClientPropsOv[val] + CSFrame.ChoosedEnt = function() return Train.ClientEnts[val] end + CSFrame.ChoosedName = val + Properties:SetVisible(true) + Properties:GetCategory("Generic"):GetRow("Model"):SetValue(CSFrame.ChoosedProp.model) + Properties:GetCategory("Generic"):GetRow("Skin"):SetValue(CSFrame.ChoosedProp.skin) + Properties:GetCategory("Generic"):GetRow("Bodygroup"):SetValue(CSFrame.ChoosedProp.bodygroup) + local color = CSFrame.ChoosedProp.color or Color(255,255,255) + Properties:GetCategory("Generic"):GetRow("Ent Color(White for non change)"):SetValue(Vector(color.r/255,color.g/255,color.b/255)) + + Properties:GetCategory("Position"):GetRow("X"):SetValue(CSFrame.ChoosedProp.pos.x) + Properties:GetCategory("Position"):GetRow("Y"):SetValue(CSFrame.ChoosedProp.pos.y) + Properties:GetCategory("Position"):GetRow("Z"):SetValue(CSFrame.ChoosedProp.pos.z) + + Properties:GetCategory("Angles"):GetRow("Pitch"):SetValue(CSFrame.ChoosedProp.ang.x) + Properties:GetCategory("Angles"):GetRow("Yaw"):SetValue(CSFrame.ChoosedProp.ang.y) + Properties:GetCategory("Angles"):GetRow("Roll"):SetValue(CSFrame.ChoosedProp.ang.z) + + CSFrame.AddButton:SetVisible(false) + end + local function ReloadCSEnt() + local name = CSFrame.ChoosedName + SafeRemoveEntity(CSFrame.ChoosedEnt()) + Train:SpawnCSEnt(name) + --CSFrame.ChoosedEnt = Train.ClientEnts[name] + end + + local Properties = vgui.Create( "DProperties", CSFrame ) + Properties:SetVisible(false) + CSFrame.PropertiesPanel = Properties + local Model = Properties:CreateRow( "Generic", "Model" ) Model:Setup( "Generic" ) + Model.DataChanged = function(_,val) + CSFrame.ChoosedProp.model = val + ReloadCSEnt() + end + local Skin = Properties:CreateRow( "Generic", "Skin" ) Skin:Setup("Int", {min=0,max=99}) Skin:SetValue(0) + Skin.DataChanged = function(_,val) + CSFrame.ChoosedProp.skin = val + ReloadCSEnt() + end + local Bodygroup = Properties:CreateRow( "Generic", "Bodygroup" ) Bodygroup:Setup("Int", {min=0,max=10}) Bodygroup:SetValue(0) + local EColor = Properties:CreateRow( "Generic", "Ent Color(White for non change)" ) EColor:Setup("VectorColor", {}) EColor:SetValue(Vector(1,1,1)) + EColor.DataChanged = function(self,val) + local val = Vector(val) + CSFrame.ChoosedProp.color = Color(val.x*255,val.y*255,val.z*255) + ReloadCSEnt() + end + local Animation = Properties:CreateRow( "Generic", "Test animation" ) Animation:Setup("FloatEx", {min=0,max=1, dec = 3,fv=0.1}) Animation:SetValue(0) + Animation.DataChanged = function(_,val) + local name = CSFrame.ChoosedName + local CSEnt = CSFrame.ChoosedEnt() + + if Train.Anims[name] then + Train.Anims[name].Ignore = CurTime()+5 + end + CSEnt:SetPoseParameter("position",val) + + end + local Reload = Properties:CreateRow( "Generic", "Reload" ) Reload:Setup("Button") + Reload.OnPress = function(self) + CSEnts:OnChange(CSEnts:GetValue(),CSFrame.ChoosedName) + end + local Reset = Properties:CreateRow( "Generic", "Reset/Remove" ) Reset:Setup("Button") + Reset.OnPress = function(self) + CSEnts:OnChange() + Train.ClientPropsOv[CSEnts:GetValue()] = nil + CSEnts:OnChange() + ReloadCSEnt(CSFrame.ChoosedName) + end + local PosX = Properties:CreateRow( "Position", "X" ) + PosX:Setup("FloatEx", {min=-500,max=500, zoom = 1000}) + PosX:SetValue(0) + PosX.DataChanged = function(_,val) + local pos = CSFrame.ChoosedProp.pos + CSFrame.ChoosedProp.pos = Vector(val,pos.y,pos.z) + ReloadCSEnt() + end + local PosY = Properties:CreateRow( "Position", "Y" ) + PosY:Setup("FloatEx", {min=-100,max=100, zoom=1000}) + PosY:SetValue(0) + PosY.DataChanged = function(_,val) + local pos = CSFrame.ChoosedProp.pos + CSFrame.ChoosedProp.pos = Vector(pos.x,val,pos.z) + ReloadCSEnt() + end + local PosZ = Properties:CreateRow( "Position", "Z" ) + PosZ:Setup("FloatEx", {min=-100,max=100, zoom=1000}) + PosZ:SetValue(0) + PosZ.DataChanged = function(_,val) + local pos = CSFrame.ChoosedProp.pos + CSFrame.ChoosedProp.pos = Vector(pos.x,pos.y,val) + ReloadCSEnt() + end + + local LMX = Properties:CreateRow( "LocalMove", "X" ) + LMX:Setup("FloatEx", {min=-1,max=1, zoom = 1000, nodraw = true}) + LMX:SetValue(0) + LMX.DataChanged = function(self,val) + local pos = CSFrame.ChoosedProp.pos + local ang = CSFrame.ChoosedProp.ang + local rotated = Vector(val,0,0) + rotated:Rotate(ang) + CSFrame.ChoosedProp.pos = pos + rotated + ReloadCSEnt() + self:SetValue(0) + Properties:GetCategory("Position"):GetRow("X"):SetValue(CSFrame.ChoosedProp.pos.x) + Properties:GetCategory("Position"):GetRow("Y"):SetValue(CSFrame.ChoosedProp.pos.y) + Properties:GetCategory("Position"):GetRow("Z"):SetValue(CSFrame.ChoosedProp.pos.z) + end + local LMY = Properties:CreateRow( "LocalMove", "Y" ) + LMY:Setup("FloatEx", {min=-1,max=1, zoom=1000}) + LMY:SetValue(0) + LMY.DataChanged = function(self,val) + local pos = CSFrame.ChoosedProp.pos + local ang = CSFrame.ChoosedProp.ang + local rotated = Vector(0,val,0) + rotated:Rotate(ang) + CSFrame.ChoosedProp.pos = pos + rotated + ReloadCSEnt() + self:SetValue(0) + Properties:GetCategory("Position"):GetRow("X"):SetValue(CSFrame.ChoosedProp.pos.x) + Properties:GetCategory("Position"):GetRow("Y"):SetValue(CSFrame.ChoosedProp.pos.y) + Properties:GetCategory("Position"):GetRow("Z"):SetValue(CSFrame.ChoosedProp.pos.z) + end + local LMZ = Properties:CreateRow( "LocalMove", "Z" ) + LMZ:Setup("FloatEx", {min=-1,max=1, zoom=1000}) + LMZ:SetValue(0) + LMZ.DataChanged = function(self,val) + local pos = CSFrame.ChoosedProp.pos + local ang = CSFrame.ChoosedProp.ang + local rotated = Vector(0,0,val) + rotated:Rotate(ang) + CSFrame.ChoosedProp.pos = pos + rotated + ReloadCSEnt() + self:SetValue(0) + Properties:GetCategory("Position"):GetRow("X"):SetValue(CSFrame.ChoosedProp.pos.x) + Properties:GetCategory("Position"):GetRow("Y"):SetValue(CSFrame.ChoosedProp.pos.y) + Properties:GetCategory("Position"):GetRow("Z"):SetValue(CSFrame.ChoosedProp.pos.z) + end + local AngP = Properties:CreateRow( "Angles", "Pitch" ) + AngP:Setup("FloatEx", {min=-360,max=360, dec=1, zoom=1000}) + AngP:SetValue(0) + AngP.DataChanged = function(self,val) + local ang = CSFrame.ChoosedProp.ang + CSFrame.ChoosedProp.ang = Angle(val,ang.y,ang.r) + ReloadCSEnt() + end + local AngY = Properties:CreateRow( "Angles", "Yaw" ) + AngY:Setup("FloatEx", {min=-360,max=360, zoom=1000}) + AngY:SetValue(0) + AngY.DataChanged = function(_,val) + local ang = CSFrame.ChoosedProp.ang + CSFrame.ChoosedProp.ang = Angle(ang.p,val,ang.r) + ReloadCSEnt() + end + local AngR = Properties:CreateRow( "Angles", "Roll" ) + AngR:Setup("FloatEx", {min=-360,max=360, zoom=1000}) + AngR:SetValue(0) + AngR.DataChanged = function(_,val) + local ang = CSFrame.ChoosedProp.ang + CSFrame.ChoosedProp.ang = Angle(ang.p,ang.y,val) + ReloadCSEnt() + end + Properties:Dock(FILL) + + local BottomPanel = vgui.Create("DPanel",CSFrame) + BottomPanel:SetSize(20,50) + BottomPanel:Dock(BOTTOM) + BottomPanel:SetPaintBackground(false) + + local AddButt = AddButton(CSFrame,function() + Train.ClientPropsOv[CSEnts:GetValue()] = { + pos = Vector(0,0,0), + ang = Angle(0,0,0), + model = "", + config = {}, + } + CSEnts:OnChange() + end,"Add","Add a new CSEnt") AddButt:Dock(BOTTOM) AddButt:SetVisible(false) + CSFrame.AddButton = AddButt + + local CpSet = AddButton(BottomPanel,function() + local name = CSFrame.ChoosedName + local prop = CSFrame.ChoosedProp + local model = prop.model + local skin = prop.skin + local color = prop.color + local bodygroup = prop.bodygroup + local pos = prop.pos + local ang = prop.ang + local set = "ENT.ClientProps[\"" + set = set..CSFrame.ChoosedName.."\"] = {\n" + set = set..Format("\tmodel = \"%s\",\n",model) + set = set..Format("\tpos = Vector(%f,%f,%f),\n",pos.x,pos.y,pos.z) + set = set..Format("\tang = Angle(%f,%f,%f),\n",ang.p,ang.y,ang.r) + if skin and skin > 0 then + set = set..Format("\tskin = %d,\n",skin) + end + if color and color ~= Color(255,255,255) then + set = set..Format("\tcolor = Color(%d,%d,%d),\n",color.r,color.g,color.b) + end + if bodygroup and bodygroup > 0 then + set = set..Format("\tbodygroup = %d,\n",bodygroup) + end + set = set.."}\n" + SetClipboardText(set) + end,"Copy settings","Copy LUA part to clipboard and print it") + CpSet:Dock(LEFT) + CpSet:SetColor(color_black) + + local PrSet = AddButton(BottomPanel,function() + local name = CSFrame.ChoosedName + local prop = CSFrame.ChoosedProp + local model = prop.model + local skin = prop.skin + local color = prop.color + local bodygroup = prop.bodygroup + local pos = prop.pos + local ang = prop.ang + local set = "ENT.ClientProps[\"" + set = set..CSFrame.ChoosedName.."\"] = {\n" + set = set..Format("\tmodel = \"%s\",\n",model) + set = set..Format("\tpos = Vector(%f,%f,%f),\n",pos.x,pos.y,pos.z) + set = set..Format("\tang = Angle(%f,%f,%f),\n",ang.p,ang.y,ang.r) + if skin and skin > 0 then + set = set..Format("\tskin = %d,\n",skin) + end + if color and color ~= Color(255,255,255) then + set = set..Format("\tcolor = Color(%d,%d,%d),\n",color.r,color.g,color.b) + end + if bodygroup and bodygroup > 0 then + set = set..Format("\tbodygroup = %d,\n",bodygroup) + end + set = set.."}\n" + print(set) + end,"Print settings","Print LUA part to clipboard and print it") + PrSet:Dock(RIGHT) +end + +local function EditPanel() + local PanelFrame = vgui.Create("DFrame",Frame) + local _,y = Frame:GetSize() + PanelFrame:SetPos(surface.ScreenWidth()/5+250,surface.ScreenHeight()/3-400/2+y/2) + PanelFrame:SetSize(400,420) + PanelFrame:SetTitle("Panel editor") + PanelFrame:SetVisible(true) + PanelFrame:SetDraggable(true) + PanelFrame:ShowCloseButton(true) + PanelFrame:MakePopup() + PanelFrame:SetScreenLock(true) + --Mark entity button + + local PanelEnts = vgui.Create( "DComboBox",PanelFrame) + PanelEnts:SetText("Choose a PanelEnt") + PanelEnts:Dock(TOP) + for k,v in pairs(Train.ClientProps) do + PanelEnts:AddChoice(k) + end + PanelEnts.OnSelect = function(self,_,val) + local Properties = PanelFrame.PropertiesPanel + if not Train.ClientPropsOv[val] then + --Train.ClientPropsOv[val] = {} + --table.CopyFromTo(Train.ClientProps[val],Train.ClientPropsOv[val]) + end + --PanelFrame.ChoosedProp = Train.ClientPropsOv[val] + PanelFrame.ChoosedEnt = Train.ClientEnts[val] + PanelFrame.ChoosedName = val + Properties:SetVisible(true) + end + local function ReloadCSEnt() + local name = PanelFrame.ChoosedName + SafeRemoveEntity(CSFrame.ChoosedEnt) + Train:SpawnCSEnt(name) + CSFrame.ChoosedEnt = Train.ClientEnts[name] + end + + local Properties = vgui.Create( "DProperties", PanelFrame ) + Properties:SetVisible(false) + PanelFrame.PropertiesPanel = Properties + Properties:Dock(FILL) + + local BottomPanel = vgui.Create("DPanel",PanelFrame) + BottomPanel:SetSize(20,100) + BottomPanel:Dock(BOTTOM) + BottomPanel:SetPaintBackground(false) + + local Reload = AddButton(BottomPanel,function() + --PanelEnts:OnSelect(PanelEnts:GetSelectedID(),PanelFrame.ChoosedPanelEntName) + end, "Reload", "Reload all settings") + Reload:Dock(TOP) + local Reset = AddButton(BottomPanel,function() + --PanelEnts:OnSelect(PanelEnts:GetSelectedID(),PanelFrame.ChoosedPanelEntName) + --Train.ClientPropsOv[PanelFrame.ChoosedPanelEntName] = nil + --PanelEnts:OnSelect(PanelEnts:GetSelectedID(),PanelFrame.ChoosedPanelEntName) + --ReloadPanelEnt(PanelFrame.ChoosedPanelEntName) + end, "Reset", "Reset all settings") + Reset:Dock(TOP) + + local CpSet = AddButton(BottomPanel,function() + local set = "" + SetClipboardText(set) + end,"Copy settings","Copy LUA part to clipboard and print it") + CpSet:Dock(LEFT) + CpSet:SetColor(color_black) + + local PrSet = AddButton(BottomPanel,function() + local set = "" + end,"Print settings","Print LUA part to clipboard and print it") + PrSet:Dock(RIGHT) +end + +local function EditCLPFB() + local CLPFBFrame = vgui.Create("DFrame",Frame) + local _,y = Frame:GetSize() + CLPFBFrame:SetPos(surface.ScreenWidth()/5+250,surface.ScreenHeight()/3-400/2+y/2) + CLPFBFrame:SetSize(400,420) + CLPFBFrame:SetTitle("ClientPropForButton editor") + CLPFBFrame:SetVisible(true) + CLPFBFrame:SetDraggable(true) + CLPFBFrame:ShowCloseButton(true) + CLPFBFrame:MakePopup() + CLPFBFrame:SetScreenLock(true) + --Mark entity button + + local CLPFBEnts = vgui.Create( "DTextEntry",CLPFBFrame) + CLPFBEnts:SetText("Choose a ClientPropForButton") + CLPFBEnts:Dock(TOP) + --for k,v in pairs(Train.ClientProps) do + --if v.config then CLPFBEnts:AddChoice(k) end + --end + CLPFBEnts.OnChange = function(self) + local Properties = CLPFBFrame.PropertiesCLPFB + local val = self:GetValue() + if not Train.ClientProps[val] and not Train.ClientPropsOv[val] then + if val ~= "" then CLPFBFrame.AddButton:SetVisible(true) end + Properties:SetVisible(false) + return + end + if not Train.ClientPropsOv[val] and Train.ClientProps[val] then + Train.ClientPropsOv[val] = table.Copy(Train.ClientProps[val]) + end + CLPFBFrame.ChoosedTable = function() return Train.ClientPropsOv[val].config end + CLPFBFrame.ChoosedEnt = function() return Train.ClientEnts[val] end + CLPFBFrame.ChoosedName = val + --Properties:GetCategory("Generic"):GetRow("Panel"):SetValue(CLPFBFrame.ChoosedTable().panel) + local panel = Properties:GetCategory("Generic"):GetRow("Panel") + panel:Setup("Combo",{text="Select panel", values = {}}) + --PrintTable(panel.Panel:GetTable()) + --for i=1,100 do + --print(panel:SetSelected(i)) + --end + for k,v in pairs(Train.ButtonMap) do + panel:AddChoice(k,k,k == CLPFBFrame.ChoosedTable().panel) + end + + local button = Properties:GetCategory("Generic"):GetRow("Button") + button:Setup("Combo",{text="Select button", values = {}}) + if Train.ButtonMap[CLPFBFrame.ChoosedTable().panel] then + for k,v in pairs(Train.ButtonMap[CLPFBFrame.ChoosedTable().panel].buttons) do + button:AddChoice(v.ID,v.ID,v.ID == CLPFBFrame.ChoosedTable().button) + end + end + --Properties:GetCategory("Generic"):GetRow("Button"):SetValue(CLPFBFrame.ChoosedTable().button) + Properties:GetCategory("Generic"):GetRow("Model"):SetValue(CLPFBFrame.ChoosedTable().model) + Properties:GetCategory("Generic"):GetRow("Angles"):SetValue(CLPFBFrame.ChoosedTable().ang or 270) + Properties:GetCategory("Generic"):GetRow("Z offset"):SetValue(CLPFBFrame.ChoosedTable().z) + Properties:GetCategory("Generic"):GetRow("Skin"):SetValue(CLPFBFrame.ChoosedTable().skin) + Properties:GetCategory("Generic"):GetRow("Ignore touch"):SetValue(CLPFBFrame.ChoosedTable().ignorepanel) + local color = CLPFBFrame.ChoosedTable().color or Color(255,255,255) + Properties:GetCategory("Generic"):GetRow("Ent Color(White for non change)"):SetValue(Vector(color.r/255,color.g/255,color.b/255)) + + Properties:SetVisible(true) + CLPFBFrame.AddButton:SetVisible(false) + end + local function ReloadCSEnt() + local name = CLPFBFrame.ChoosedName + Metrostroi.TempoaryClientPropForButton(Train,name,CLPFBFrame.ChoosedTable()) + SafeRemoveEntity(CLPFBFrame.ChoosedEnt()) + Train:SpawnCSEnt(name) + --CLPFBFrame.ChoosedEnt() = Train.ClientEnts[name] + end + + local Properties = vgui.Create( "DProperties", CLPFBFrame ) CLPFBFrame.PropertiesCLPFB = Properties + Properties:SetVisible(false) + Properties:Dock(FILL) + + local Panel = Properties:CreateRow("Generic","Panel") + Panel:Setup("Combo",{text="Select panel", values = {}}) + --for k,v in pairs(Train.ButtonMap) do + --if v.buttons then Panel:AddChoice(k,k) end + --end + Panel.DataChanged = function(self, data) + local button = Properties:GetCategory("Generic"):GetRow("Button") + button:Setup("Combo",{text="Select button", values = {}}) + for k,v in pairs(Train.ButtonMap[data].buttons) do + button:AddChoice(v.ID,v.ID,v.ID == CLPFBFrame.ChoosedTable().button) + end + CLPFBFrame.ChoosedTable().panel = data + end + --for k,v in pairs(Train.ButtonMap) do + --Panel:AddChoice(k,Train.ButtonMap.buttons) + --local Button = Properties:CreateRow("General","Panel") Panel:Setup("Combo") + local Button = Properties:CreateRow("Generic","Button") + Button:Setup("Combo",{text="Select button", values = {}}) + Button.DataChanged = function(self,val) + CLPFBFrame.ChoosedTable().button = val + ReloadCSEnt() + end + + local Model = Properties:CreateRow("Generic","Model") Model:Setup("Generic") + Model.DataChanged = function(self,val) + CLPFBFrame.ChoosedTable().model = val + ReloadCSEnt() + end + local Ang = Properties:CreateRow("Generic","Angles") Ang:Setup("Int",{min=0,max=360}) Ang:SetValue(0) + Ang.DataChanged = function(self,val) + CLPFBFrame.ChoosedTable().ang = val + ReloadCSEnt() + end + local Z = Properties:CreateRow("Generic","Z offset") Z:Setup("Float",{min=-30,max=30}) Z:SetValue(0) + Z.DataChanged = function(self,val) + CLPFBFrame.ChoosedTable().z = val + ReloadCSEnt() + end + local Skin = Properties:CreateRow("Generic","Skin","Test") Skin:Setup("Int", {min=0,max=99}) Skin:SetValue(0) + Skin.DataChanged = function(self,val) + CLPFBFrame.ChoosedTable().skin = val + ReloadCSEnt() + end + local IgnoreP = Properties:CreateRow("Generic","Ignore touch","Test") IgnoreP:Setup("Boolean") IgnoreP:SetValue(false) + IgnoreP.DataChanged = function(self,val) + CLPFBFrame.ChoosedTable().ignorepanel = val + ReloadCSEnt() + end + local EColor = Properties:CreateRow( "Generic", "Ent Color(White for non change)" ) EColor:Setup("VectorColor", {}) EColor:SetValue(Vector(1,1,1)) + EColor.DataChanged = function(self,val) + local val = Vector(val) + CLPFBFrame.ChoosedTable().color = Color(val.x*255,val.y*255,val.z*255) + ReloadCSEnt() + end + + local Reload = Properties:CreateRow( "Generic", "Reload" ) Reload:Setup("Button") + Reload.OnPress = function(self) + CLPFBEnts:OnChange() + end + local Reset = Properties:CreateRow( "Generic", "Reset/Remove" ) Reset:Setup("Button") + Reset.OnPress = function(self) + CLPFBEnts:OnChange() + Train.ClientPropsOv[CLPFBFrame.ChoosedName] = nil + CLPFBEnts:OnChange() + if Train.ClientPropsOv[CLPFBFrame.ChoosedName] then ReloadCSEnt() end + end + + local BottomCLPFB = vgui.Create("DPanel",CLPFBFrame) + BottomCLPFB:SetSize(20,50) + BottomCLPFB:Dock(BOTTOM) + BottomCLPFB:SetPaintBackground(false) + local AddButt = AddButton(CLPFBFrame,function() + Train.ClientPropsOv[CLPFBEnts:GetValue()] = { + pos = Vector(0,0,0), + ang = Angle(0,0,0), + model = "", + config = {}, + } + CLPFBEnts:OnChange() + end,"Add","Add a new ClientPropForButton") AddButt:Dock(BOTTOM) AddButt:SetVisible(false) + CLPFBFrame.AddButton = AddButt + + local CpSet = AddButton(BottomCLPFB,function() + local set = "" + SetClipboardText(set) + end,"Copy settings","Copy LUA part to clipboard and print it") + CpSet:Dock(LEFT) + CpSet:SetColor(color_black) + + local PrSet = AddButton(BottomCLPFB,function() + local set = "" + end,"Print settings","Print LUA part to clipboard and print it") + PrSet:Dock(RIGHT) +end + +local function markEntity(self) + ent = LocalPlayer():GetEyeTrace().Entity + if IsEntity(ent) and IsValid(ent) and ent.Base == "gmod_subway_base" then + Train = ent + if not Train.ClientPropsOv then Train.ClientPropsOv = {} end + Frame.MessageLabel:SetText("Current train:"..tostring(Train:EntIndex())) + local UtilsPanel = vgui.Create("DPanel",Frame) + UtilsPanel:SetSize(20,90) + UtilsPanel:DockMargin(2,2,2,2) + UtilsPanel:Dock(TOP) + local UtilsL = AddLabel(UtilsPanel,"Edit a:") + UtilsL:Dock(TOP) + UtilsL:SetDark(true) + + --Start/stop buttons + local b1 = AddButton(UtilsPanel,EditCSEnts,"CSEnts","Edits a panel in train"):Dock(TOP) + local b2 = AddButton(UtilsPanel,EditPanel,"Panel","Edits a panel in train"):Dock(LEFT) + local b2 = AddButton(UtilsPanel,EditCLPFB,"CLPFB","Edits a ClientPropForButton"):Dock(RIGHT) + Frame:SetSize(250,210) + else + local Frame = vgui.Create("DFrame") + Frame:SetPos(surface.ScreenWidth()/5,surface.ScreenHeight()/3) + Frame:SetSize(250,85) + Frame:SetTitle("Warning") + Frame:SetVisible(true) + Frame:SetDraggable(false) + Frame:ShowCloseButton(true) + Frame:MakePopup() + Frame:Center() + AddLabel(Frame,"You should look at valid train!"):Dock(TOP) + AddButton(Frame,function() Frame:Close() end,"Close"):Dock(TOP) + end +end +local xxx + +local function OpenConfigWindow() + --Main frame + if not IsValid(Frame) then + Frame = vgui.Create("DFrame") + Frame:SetPos(surface.ScreenWidth()/5,surface.ScreenHeight()/3) + Frame:SetSize(250,100) + Frame:SetTitle("Metrostroi train editor") + Frame:SetVisible(true) + Frame:SetDraggable(true) + Frame:ShowCloseButton(true) + Frame:MakePopup() + --Frame:KillFocus() + else + Frame:ToggleVisible() + return + end + --Mark entity button + local mb = AddButton(Frame,function() Frame:ToggleVisible() end,"Hide","Hide a panel") + mb:DockMargin(2,2,2,2) + mb:Dock(TOP) + mb:SetColor(color_black) + --Mark entity button + local mb = AddButton(Frame,markEntity,"Mark Entity","Mark the entity you're looking at as the one to edit") + mb:DockMargin(2,2,2,2) + mb:Dock(TOP) + mb:SetColor(color_black) + if xxx then AddButton(Frame,function() Frame:Close() end,"Close"):Dock(TOP) end + Frame.MessageLabel = AddLabel(Frame,"") + Frame.MessageLabel:Dock(TOP) + +end +concommand.Add("metrostroi_traineditor",OpenConfigWindow,nil,"Train editor for trains") +concommand.Add("metrostroi_traineditor_hide",function() Frame:SetVisible(false) end,nil,"Hide train editor") +concommand.Add("metrostroi_traineditor_close",function() Frame:Close() end,nil,"Close train editor") + diff --git a/lua/metrostroi/cl_util.lua b/lua/metrostroi/cl_util.lua new file mode 100644 index 0000000..3ddf491 --- /dev/null +++ b/lua/metrostroi/cl_util.lua @@ -0,0 +1,1010 @@ +-------------------------------------------------------------------------------- +-- Clientside utility functions +-------------------------------------------------------------------------------- +local bitmap_font_1 = { + [10] = { + 0,0,0,0, + 0,0,0,0, + 0,0,0,0, + 0,0,0,0, + 0,0,0,0, + 0,0,0,0, + 0,0,0,0}, + ["."] = { + 0,0,0,0, + 0,0,0,0, + 0,0,0,0, + 0,0,0,0, + 0,0,0,0, + 0,0,0,0, + 0,0,1,0}, + [1] = { + 0,0,0,1, + 0,0,0,1, + 0,0,0,1, + 0,0,0,1, + 0,0,0,1, + 0,0,0,1, + 0,0,0,1}, + [2] = { + 1,1,1,1, + 0,0,0,1, + 0,0,0,1, + 1,1,1,1, + 1,0,0,0, + 1,0,0,0, + 1,1,1,1}, + [3] = { + 1,1,1,1, + 0,0,0,1, + 0,0,0,1, + 1,1,1,1, + 0,0,0,1, + 0,0,0,1, + 1,1,1,1}, + [4] = { + 1,0,0,1, + 1,0,0,1, + 1,0,0,1, + 1,1,1,1, + 0,0,0,1, + 0,0,0,1, + 0,0,0,1}, + [5] = { + 1,1,1,1, + 1,0,0,0, + 1,0,0,0, + 1,1,1,1, + 0,0,0,1, + 0,0,0,1, + 1,1,1,1}, + [6] = { + 1,1,1,1, + 1,0,0,0, + 1,0,0,0, + 1,1,1,1, + 1,0,0,1, + 1,0,0,1, + 1,1,1,1}, + [7] = { + 1,1,1,1, + 0,0,0,1, + 0,0,0,1, + 0,0,0,1, + 0,0,0,1, + 0,0,0,1, + 0,0,0,1}, + [8] = { + 1,1,1,1, + 1,0,0,1, + 1,0,0,1, + 1,1,1,1, + 1,0,0,1, + 1,0,0,1, + 1,1,1,1}, + [9] = { + 1,1,1,1, + 1,0,0,1, + 1,0,0,1, + 1,1,1,1, + 0,0,0,1, + 0,0,0,1, + 0,0,0,1}, + [0] = { + 1,1,1,1, + 1,0,0,1, + 1,0,0,1, + 1,0,0,1, + 1,0,0,1, + 1,0,0,1, + 1,1,1,1}, +} + + + +-------------------------------------------------------------------------------- +-- Draw bitmap digit +function Metrostroi.DrawClockDigit(cx,cy,scale,digit) + local bitmap = bitmap_font_1[digit] + if not bitmap then return end + + local w=12*scale + local p=8*scale + for i=1,4*7 do + local x = (i-1)%4 + local y = math.floor((i-1)/4) + if bitmap[i] == 1 then + for z=1,6,1 do + surface.SetDrawColor(Color(255,60,0,math.max(0,30-1*z*z))) + surface.DrawRect(cx+x*w-z*scale, cy+y*w-z*scale, p+2*z*scale, p+2*z*scale) + end + + surface.SetDrawColor(Color(255,240,0,255)) + surface.DrawRect(cx+x*w, cy+y*w, p, p) + end + end +end + + + + + +function Metrostroi.PositionFromPanel(panel,button_id_or_vec,z,x,y,train) + local self = train or ENT + local panel = self.ButtonMap[panel] + if not panel then return Vector(0,0,0) end + if not panel.buttons then return Vector(0,0,0) end + + -- Find button or read position + local vec + if type(button_id_or_vec) == "string" then + local button + for k,v in pairs(panel.buttons) do + if v.ID == button_id_or_vec then + button = v + break + end + end + vec = Vector(button.x + (button.radius and 0 or (button.w or 0)/2)+(x or 0),button.y + (button.radius and 0 or (button.h or 0)/2)+(y or 0),z or 0) + else + vec = button_id_or_vec + end + + -- Convert to global coords + vec.y = -vec.y + vec:Rotate(panel.ang) + return panel.pos + vec * panel.scale +end + +function Metrostroi.AngleFromPanel(panel,ang,train) + local self = train or ENT + local panel = self.ButtonMap[panel] + if not panel then return Vector(0,0,0) end + local true_ang = panel.ang + Angle(0,0,0) + if type(ang) == "Angle" then + true_ang:RotateAroundAxis(panel.ang:Forward(),ang.pitch) + true_ang:RotateAroundAxis(panel.ang:Right(),ang.yaw) + true_ang:RotateAroundAxis(panel.ang:Up(),ang.roll) + else + true_ang:RotateAroundAxis(panel.ang:Up(),ang or -90) + end + return true_ang +end + +Metrostroi.PrecacheModels = Metrostroi.PrecacheModels or {} +function Metrostroi.GenerateClientProps() + local self = ENT + if not self.AutoAnimNames then self.AutoAnimNames = {} end + local ret = "self.table = {\n" + --local reti = 0 + for id, panel in pairs(self.ButtonMap) do + if not panel.buttons then continue end + if not panel.props then panel.props = {} end + for name, buttons in pairs(panel.buttons) do + --if reti > 8 then reti=0; ret=ret.."\n" end + + if buttons.tooltipFunc then + local func = buttons.tooltipFunc + buttons.tooltipState = function(ent) + local str = func(ent) + if not str then return "" end + return "\n["..str:gsub("\n","]\n[").."]" + end + elseif buttons.varTooltip then + local states = buttons.states or {"Train.Buttons.Off","Train.Buttons.On"} + local count = (#states-1) + buttons.tooltipState = function(ent) + return Format("\n[%s]",Metrostroi.GetPhrase(states[math.floor(buttons.varTooltip(ent)*count+0.5)+1]):gsub("\n","]\n[")) + end + elseif buttons.var then + local var = buttons.var + local st1,st2 = "Train.Buttons.Off","Train.Buttons.On" + if buttons.states then + st1 = buttons.states[1] + st2 = buttons.states[2] + end + buttons.tooltipState = function(ent) + return Format("\n[%s]",Metrostroi.GetPhrase(ent:GetPackedBool(var) and st2 or st1):gsub("\n","]\n[")) + end + end + if buttons.model then + local config = buttons.model + local name = config.name or buttons.ID + + if config.tooltipFunc then + local func = config.tooltipFunc + buttons.tooltipState = function(ent) + local str = func(ent) + if not str then return "" end + return "\n["..str:gsub("\n","]\n[").."]" + end + elseif config.varTooltip then + local states = config.states or {"Train.Buttons.Off","Train.Buttons.On"} + local count = (#states-1) + local func = config.getfunc + if config.varTooltip == true and func then + buttons.tooltipState = function(ent) + return Format("\n[%s]",Metrostroi.GetPhrase(states[math.floor(config.func(ent)*count+0.5)+1]):gsub("\n","]\n[")) + end + elseif config.varTooltip ~= true then + buttons.tooltipState = function(ent) + return Format("\n[%s]",Metrostroi.GetPhrase(states[math.floor(config.varTooltip(ent)*count+0.5)+1]):gsub("\n","]\n[")) + end + end + elseif (config.var and (not config.noTooltip and not buttons.ID:find("Set") or config.noTooltip==false)) then + local var = config.var + local st1,st2 = "Train.Buttons.Off","Train.Buttons.On" + if config.states then + st1 = config.states[1] + st2 = config.states[2] + end + buttons.tooltipState = function(ent) + return Format("\n[%s]",Metrostroi.GetPhrase(ent:GetPackedBool(var) and st2 or st1)) + end + end + if config.model then + table.insert(panel.props,name) + self.ClientProps[name] = { + model = config.model or "models/metrostroi/81-717/button07.mdl", + pos = Metrostroi.PositionFromPanel(id,config.pos or buttons.ID,(config.z or 0.2),(config.x or 0),(config.y or 0)), + ang = Metrostroi.AngleFromPanel(id,config.ang), + color = config.color, + colora = config.colora, + skin = config.skin or 0, + config = config, + cabin = config.cabin, + hide = panel.hide or config.hide, + hideseat = panel.hideseat or config.hideseat, + bscale = config.bscale, + scale = config.scale, + } + --[[if config.varTooltip then + local states = config.states or {"Train.Buttons.On","Train.Buttons.Off"} + local count = (#states-1) + buttons.tooltipState = function(ent) + local text = "\n[" + for i,t in ipairs(states) do + if i == #states then + text = text..Metrostroi.GetPhrase(t) + else + text = text..Metrostroi.GetPhrase(t).."|" + end + end + text = text.."]" + return text,states[math.floor(config.varTooltip(ent)+0.5)*count+1] + end + elseif (config.var and not config.noTooltip) then + local var = config.var + local st1,st2 = "Train.Buttons.On","Train.Buttons.Off" + if config.states then + st1 = config.states[1] + st2 = config.states[2] + end + buttons.tooltipState = function(ent) + return Format("\n[%s|%s]",Metrostroi.GetPhrase(st1),Metrostroi.GetPhrase(st2)),ent:GetPackedBool(var) and st1 or st2 + end + end]] + if config.var then + local var = config.var + local vmin, vmax = config.vmin or 0,config.vmax or 1 + local min,max = config.min or 0,config.max or 1 + local speed,damping,stickyness = config.speed or 16,config.damping or false,config.stickyness or nil + local func = config.getfunc + local i + if func then + if config.disable then + i = table.insert(self.AutoAnims, function(ent) + ent:Animate(name,func(ent,vmin,vmax,var),min,max,speed,damping,stickyness) + ent:HideButton(config.disable,ent:GetPackedBool(var)) + end) + elseif config.disableinv then + i = table.insert(self.AutoAnims, function(ent) + ent:Animate(name,func(ent,vmin,vmax,var),min,max,speed,damping,stickyness) + ent:HideButton(config.disableinv,not ent:GetPackedBool(var)) + end) + elseif config.disableoff and config.disableon then + i = table.insert(self.AutoAnims, function(ent) + ent:Animate(name,func(ent,vmin,vmax,var),min,max,speed,damping,stickyness) + ent:HideButton(config.disableoff,ent:GetPackedBool(var)) + ent:HideButton(config.disableon,not ent:GetPackedBool(var)) + end) + elseif config.disablevar then + i = table.insert(self.AutoAnims, function(ent) + ent:HideButton(name,ent:GetPackedBool(config.disablevar)) + ent:Animate(name,func(ent,vmin,vmax,var),min,max,speed,damping,stickyness) + end) + else + i = table.insert(self.AutoAnims, function(ent) ent:Animate(name,func(ent,vmin,vmax),min,max,speed,damping,stickyness) end) + end + else + if config.disable then + i = table.insert(self.AutoAnims, function(ent) + ent:Animate(name,ent:GetPackedBool(var) and vmax or vmin,min,max,speed,damping,stickyness) + ent:HideButton(config.disable,ent:GetPackedBool(var)) + end) + elseif config.disableinv then + i = table.insert(self.AutoAnims, function(ent) + ent:Animate(name,ent:GetPackedBool(var) and vmax or vmin,min,max,speed,damping,stickyness) + ent:HideButton(config.disableinv,not ent:GetPackedBool(var)) + end) + elseif config.disableoff and config.disableon then + i = table.insert(self.AutoAnims, function(ent) + ent:Animate(name,ent:GetPackedBool(var) and vmax or vmin,min,max,speed,damping,stickyness) + ent:HideButton(config.disableoff,ent:GetPackedBool(var)) + ent:HideButton(config.disableon,not ent:GetPackedBool(var)) + end) + elseif config.disablevar then + i = table.insert(self.AutoAnims, function(ent) + ent:HideButton(name,ent:GetPackedBool(config.disablevar)) + ent:Animate(name,ent:GetPackedBool(var) and vmax or vmin,min,max,speed,damping,stickyness) + end) + else + i = table.insert(self.AutoAnims, function(ent) ent:Animate(name,ent:GetPackedBool(var) and vmax or vmin,min,max,speed,damping,stickyness) end) + end + end + self.AutoAnimNames[i] = name + end + end + if config.sound or config.sndvol and config.var then + local id = config.sound or config.var + local sndid = config.sndid or buttons.ID + local vol,pitch,min,max = config.sndvol, config.sndpitch,config.sndmin,config.sndmax + local func,snd = config.getfunc, config.snd + local vmin, vmax = config.vmin or 0,config.vmax or 1 + local var = config.var + local ang = config.sndang + --if func then + --self.ClientSounds[id] = {sndid,function(ent,var) return snd(func(ent,vmin,vmax),var) end,vol or 1,pitch or 1,min or 100,max or 1000,ang or Angle(0,0,0)} + --else + if not self.ClientSounds[id] then self.ClientSounds[id] = {} end + table.insert(self.ClientSounds[id],{sndid,function(ent,var) return snd(var > 0,var) end,vol or 1,pitch or 1,min or 100,max or 1000,ang or Angle(0,0,0)}) + --end + end + if config.plomb then + local pconfig = config.plomb + local pname = name.."_pl" + if pconfig.model then + table.insert(panel.props,pname) + self.ClientProps[pname] = { + model = pconfig.model, + pos = Metrostroi.PositionFromPanel(id,config.pos or buttons.ID,(config.z or 0.2)+(pconfig.z or 0.2),(config.x or 0)+(pconfig.x or 0),(config.y or 0)+(pconfig.y or 0)), + ang = Metrostroi.AngleFromPanel(id,pconfig.ang or config.ang), + color = pconfig.color or pconfig.color, + skin = pconfig.skin or config.skin or 0, + config = pconfig, + cabin = pconfig.cabin, + hide = panel.hide or config.hide, + hideseat = panel.hideseat or config.hideseat, + bscale = pconfig.bscale or config.bscale, + scale = pconfig.scale or config.scale, + } + end + if pconfig.var then + local var = pconfig.var + if pconfig.model then + local i = table.insert(self.AutoAnims, function(ent) + ent:SetCSBodygroup(pname,1,ent:GetPackedBool(var) and 0 or 1) + end) + self.AutoAnimNames[i] = pname + end + local id,tooltip = buttons.ID,buttons.tooltip + local pid,ptooltip = pconfig.ID,pconfig.tooltip + buttons.plombed = function(ent) + if ent:GetPackedBool(var) then + return Format("%s\n%s",buttons.tooltip,Metrostroi.GetPhrase("Train.Buttons.Sealed") or "Plombed"),pid,Color(255,150,150),true + else + return buttons.tooltip,id,false + end + end + end + end + if config.lamp then + local lconfig = config.lamp + local lname = name.."_lamp" + table.insert(panel.props,lname) + self.ClientProps[lname] = { + model = lconfig.model or "models/metrostroi/81-717/button07.mdl", + pos = Metrostroi.PositionFromPanel(id,config.pos or buttons.ID,(config.z or 0.2)+(lconfig.z or 0.2),(config.x or 0)+(lconfig.x or 0),(config.y or 0)+(lconfig.y or 0)), + ang = Metrostroi.AngleFromPanel(id,lconfig.ang or config.ang), + color = lconfig.color or config.color, + skin = lconfig.skin or config.skin or 0, + config = lconfig, + cabin = lconfig.cabin, + igrorepanel = true, + hide = panel.hide or config.hide, + hideseat = panel.hideseat or config.hideseat, + bscale = lconfig.bscale or config.bscale, + scale = lconfig.scale or config.scale, + } + if lconfig.anim then + local i = table.insert(self.AutoAnims, function(ent) + ent:AnimateFrom(lname,name) + end) + self.AutoAnimNames[i] = lname + end + + if lconfig.lcolor then + self.Lights[lname] = { "headlight", + Metrostroi.PositionFromPanel(id,config.pos or buttons.ID,(config.z or 0.2)+(lconfig.z or 0.2)+(lconfig.lz or 0.2),(config.x or 0)+(lconfig.x or 0)+(lconfig.lx or 0),(config.y or 0)+(lconfig.y or 0)+(lconfig.ly or 0)), + Metrostroi.AngleFromPanel(id,lconfig.lang or lconfig.ang or config.ang)+Angle(90,0,0), + lconfig.lcolor,farz = lconfig.lfarz or 8,nearz = lconfig.lnearz or 1,shadows = lconfig.lshadows or 1,brightness = lconfig.lbright or 1,fov = lconfig.lfov,texture=lconfig.ltex or "effects/flashlight/soft",panellight=true, + hidden = lname, + } + --[[self.ClientProps[lname.."TEST"] = { + model = "models/metrostroi_train/81-703/cabin_cran_334.mdl", + pos = Metrostroi.PositionFromPanel(id,config.pos or buttons.ID,(config.z or 0.2)+(lconfig.z or 0.2)+(lconfig.lz or 0.2),(config.x or 0)+(lconfig.x or 0)+(lconfig.lx or 0),(config.y or 0)+(lconfig.y or 0)+(lconfig.ly or 0)), + ang = Metrostroi.AngleFromPanel(id,lconfig.lang or lconfig.ang or config.ang)+Angle(-180,180,0), + scale=0.1, + }]] + --[[table.insert(self.AutoAnims, function(ent) + ent:AnimateFrom(lname,name) + end)]] + end + if lconfig.var then + --ret=ret.."\""..lconfig.var.."\"," + --reti = reti + 1 + local var,animvar = lconfig.var,lname.."_anim" + local min,max = lconfig.min or 0,lconfig.max or 1 + local speed = lconfig.speed or 10 + local func = lconfig.getfunc + local light = lconfig.lcolor + if func then + table.insert(self.AutoAnims, function(ent) + local val = ent:Animate(animvar,func(ent,min,max,var),0,1,speed,false) + ent:ShowHideSmooth(lname,val) + if light then ent:SetLightPower(lname,val>0,val) end + end) + else + local i = table.insert(self.AutoAnims, function(ent) + --print(lname,ent.SmoothHide[lname]) + local val = ent:Animate(animvar,ent:GetPackedBool(var) and max or min,0,1,speed,false) + ent:ShowHideSmooth(lname,val) + if light then ent:SetLightPower(lname,val>0,val) end + end) + end + end + end + if config.lamps then + for k,lconfig in ipairs(config.lamps) do + local lname = name.."_lamp"..k + table.insert(panel.props,lname) + self.ClientProps[lname] = { + model = lconfig.model or "models/metrostroi/81-717/button07.mdl", + pos = Metrostroi.PositionFromPanel(id,config.pos or buttons.ID,(config.z or 0.2)+(lconfig.z or 0.2),(config.x or 0)+(lconfig.x or 0),(config.y or 0)+(lconfig.y or 0)), + ang = Metrostroi.AngleFromPanel(id,lconfig.ang or config.ang), + color = lconfig.color or config.color, + skin = lconfig.skin or config.skin or 0, + config = lconfig, + cabin = lconfig.cabin, + igrorepanel = true, + hide = panel.hide or config.hide, + hideseat = panel.hideseat or config.hideseat, + bscale = lconfig.bscale or config.bscale, + scale = lconfig.scale or config.scale, + } + if lconfig.var then + --ret=ret.."\""..lconfig.var.."\"," + --reti = reti + 1 + local var,animvar = lconfig.var,lname.."_anim" + local min,max = lconfig.min or 0,lconfig.max or 1 + local speed = lconfig.speed or 10 + local func = lconfig.getfunc + if func then + table.insert(self.AutoAnims, function(ent) + local val = ent:Animate(animvar,func(ent,min,max,var),0,1,speed,false) + ent:ShowHideSmooth(lname,val) + end) + else + table.insert(self.AutoAnims, function(ent) + --print(lname,ent.SmoothHide[lname]) + local val = ent:Animate(animvar,ent:GetPackedBool(var) and max or min,0,1,speed,false) + ent:ShowHideSmooth(lname,val) + end) + end + end + end + end + if config.sprite then + local sconfig = config.sprite + + local hideName = sconfig.hidden or config.lamp and name.."_lamp" or name + self.Lights[sconfig.lamp or name] = { sconfig.glow and "glow" or "light", + Metrostroi.PositionFromPanel(id,config.pos or buttons.ID,(config.z or 0.5)+(sconfig.z or 0.2),(config.x or 0)+(sconfig.x or 0),(config.y or 0)+(sconfig.y or 0)), + Metrostroi.AngleFromPanel(id, sconfig.ang or config.ang)+Angle(90,0,0), + sconfig.color or sconfig.color, + brightness = sconfig.bright,texture=sconfig.texture or "sprites/light_glow02",scale=sconfig.scale or 0.02,vscale=sconfig.vscale, + size = sconfig.size, + hidden = hideName, + aa = sconfig.aa,panel = sconfig.panel ~= false, + } + local i + if sconfig.getfunc then + local func = sconfig.getfunc + i = table.insert(self.AutoAnims, function(ent) + local val = func(ent) + ent:SetLightPower(name,not ent.Hidden[hideName] and val>0,val) + end) + elseif sconfig.var then + --ret=ret.."\""..lconfig.var.."\"," + --reti = reti + 1 + local var,animvar = sconfig.var,name.."_sanim" + local speed = sconfig.speed or 10 + i = table.insert(self.AutoAnims, function(ent) + local val = ent:Animate(animvar,ent:GetPackedBool(var) and 1 or 0,0,1,speed,false) + ent:SetLightPower(name,val>0,val) + end) + elseif sconfig.lamp then + local lightName = sconfig.lamp + i = table.insert(self.AutoAnims, function(ent) + local val = ent.Anims[lightName] and ent.Anims[lightName].value or 0 + ent:SetLightPower(lightName,val>0,val) + end) + elseif config.lamp and config.lamp.var then + local lname = name.."_lamp" + local lightName = lname.."_anim" + i = table.insert(self.AutoAnims, function(ent) + local val = ent.Anims[lightName] and ent.Anims[lightName].value or 0 + ent:SetLightPower(name,val>0,val) + end) + end + if not i then + ErrorNoHalt("Bad sprite "..name.."/"..hideName..", no controlable function...\n") + else + self.AutoAnimNames[i] = hideName + end + end + if config.labels then + for k,aconfig in ipairs(config.labels) do + local aname = name.."_label"..k + table.insert(panel.props,aname) + self.ClientProps[aname] = { + model = aconfig.model or "models/metrostroi/81-717/button07.mdl", + pos = Metrostroi.PositionFromPanel(id,config.pos or buttons.ID,(config.z or 0.2)+(aconfig.z or 0.2),(config.x or 0)+(aconfig.x or 0),(config.y or 0)+(aconfig.y or 0)), + ang = Metrostroi.AngleFromPanel(id,aconfig.ang or config.ang), + color = aconfig.color or config.color, + colora = aconfig.colora or config.colora, + skin = aconfig.skin or config.skin or 0, + config = aconfig, + cabin = aconfig.cabin, + igrorepanel = true, + hide = panel.hide or config.hide, + hideseat = panel.hideseat or config.hideseat, + bscale = aconfig.bscale or config.bscale, + scale = aconfig.scale or config.scale, + } + end + end + buttons.model = nil + end + end + end + for k,v in pairs(self.ClientProps) do + if not v.model then continue end + Metrostroi.PrecacheModels[v.model] = true + end + for k,v in pairs(self.Lights or {}) do + if not v.hidden then continue end + local cP = self.ClientProps[v.hidden] + if not cP then ErrorNoHalt("No clientProp "..v.hidden.." in entity "..self.Folder.."\n") continue end + if not cP.lamps then cP.lamps = {} end + table.insert(cP.lamps,k) + end + --ret = ret.."\n}" + --SetClipboardText(ret) +end +--[[ +timer.Simple(1,function() + for k,ent in pairs(Metrostroi.PrecacheModels) do + if ent==true or not IsValid(ent) then + local model = ClientsideModel(k) + model:SetPos(LocalPlayer():GetPos()) + Metrostroi.PrecacheModels[k] = model + end + end + timer.Simple(2,function() + for k,ent in pairs(Metrostroi.PrecacheModels) do + if IsValid(ent) then + SafeRemoveEntity(ent) + end + end + end) +end)]] + +function Metrostroi.InsertHide(panel,prop_name) + local self = ENT + if self.ButtonMap[panel] then + if not self.ButtonMap[panel].props then self.ButtonMap[panel].props = {} end + table.insert(self.ButtonMap[panel].props,prop_name) + end +end + + + + + + +-------------------------------------------------------------------------------- +-- Training markers +-------------------------------------------------------------------------------- +local prevV = 0 +local A = 0 +local D1true = 0 +local D2true = 0 +local prevTime +hook.Add("PostDrawOpaqueRenderables", "metrostroi-draw-stopmarker",function() + prevTime = prevTime or RealTime() + local dT = math.max(0.001,RealTime() - prevTime) + prevTime = RealTime() + + -- Skip if disabled + if GetConVarNumber("metrostroi_stop_helper") ~= 1 then return end + + -- Get train + local train = LocalPlayer().InMetrostroiTrain + if not IsValid(train) then return end + + -- Calculate acceleration + local V = train:GetNW2Float("V",train:GetVelocity():Length()*0.01905)*0.277778 + local newA = (V - prevV)/dT + prevV = V + + -- Calculate marker position + A = train:GetNW2Float("A",A + (newA - A)*1.0*dT) + local T1 = math.abs(V/(A+1e-8)) + local T2 = math.abs(V/(1.2+1e-8)) + local D1 = T1*V + (T1^2)*A/2 + local D2 = T2*V + (T2^2)*A/2 + + -- Smooth out D + D1 = math.min(200,math.max(0,D1))*0.65 + D2 = math.min(200,math.max(0,D2))*0.70 + D1true = D1true + (D1 - D1true)*12.0*dT + D2true = D2true + (D2 - D2true)*12.0*dT + local offset1 = D1true/0.01905 + local offset2 = D2true/0.01905 + + -- Draw marker + if A > -0.1 then return end +-- if D1 > 195 then return end + if D2 > 195 then return end + local base_pos1 = train:LocalToWorld(Vector(500+offset1,80,10)) + cam.Start3D2D(base_pos1,train:LocalToWorldAngles(Angle(0,-90,90)),1.0) + surface.SetDrawColor(255,255,255) + surface.DrawRect(-1,-1,8*20+2,4+2) + for i=0,19 do + surface.SetDrawColor(240,200,40) + surface.DrawRect(8*i+0,0,4,4) + surface.SetDrawColor(0,0,0) + surface.DrawRect(8*i+4,0,4,4) + end + surface.SetDrawColor(255,255,255) + surface.DrawRect(-1,-96,2,192) + surface.DrawRect(8*20,-96,2,192) + +-- surface.SetTextColor(255,255,255) +-- surface.SetFont("Trebuchet24") +-- surface.SetTextPos(64-128,-30) +-- surface.DrawText(Format("%.1f m %.1f m/s %.1f m/s2",D,V,A)) +-- surface.SetTextPos(64,-30) +-- surface.DrawText(Format("%.1f m %.0f sec",D,T)) + cam.End3D2D() + + local base_pos2 = train:LocalToWorld(Vector(500+offset2,80,10)) + cam.Start3D2D(base_pos2,train:LocalToWorldAngles(Angle(0,-90,90)),1.0) + surface.SetDrawColor(240,40,40) + surface.DrawRect(-1,-1,8*20+2,4+2) + for i=0,19 do + surface.SetDrawColor(0,0,0) + surface.DrawRect(8*i+0,0,4,4) + surface.SetDrawColor(240,40,40) + surface.DrawRect(8*i+4,0,4,4) + end + + surface.SetDrawColor(240,40,40) + surface.DrawRect(-1,-1+110,8*20+2,16+2) + for i=0,19 do + surface.SetDrawColor(0,0,0) + surface.DrawRect(8*i+0,110,4,16) + surface.SetDrawColor(240,40,40) + surface.DrawRect(8*i+4,110,4,16) + end + + surface.SetDrawColor(240,40,40) + surface.DrawRect(-6,-96,6,192) + surface.DrawRect(8*20,-96,4,192) + cam.End3D2D() +end) + + + + +-------------------------------------------------------------------------------- +-- Fix for gm_metrostroi 3D sky +-------------------------------------------------------------------------------- +local player_state = {} +if string.sub(game.GetMap(),1,13) == "gm_metrostroi" then + timer.Create("Metrostroi_3DSkyFix",1.0,0,function() + local player = LocalPlayer() + if not IsValid(player) then return end + + RunConsoleCommand("r_3dsky", (player:GetPos().z < -1024) and "0" or "1") + end) +end + +timer.Simple(0,function() + net.Start("metrostroi_cam_update") net.SendToServer() +end) +net.Receive("metrostroi_cam_update",function() + local ent = Entity(net.ReadUInt(16)) + Metrostroi.RTCamera = ent +end) + +local CamRT = surface.GetTextureID( "pp/rt" ) +local CamWork = GetConVar("metrostroi_drawcams") +Metrostroi.CamTimers = Metrostroi.CamTimers or {} +Metrostroi.CamQueue = Metrostroi.CamQueue or {} +function Metrostroi.RenderCamOnRT(train,cpos,name,time,RT,post,pos,ang,x,y,scale,xmin,ymin) + if not CamWork then CamWork = GetConVar("metrostroi_drawcams") return end + if not CamWork:GetBool() then return end + name = train:EntIndex()..name + --print(name,Metrostroi.CamQueue[name]) + if (not Metrostroi.CamTimers[name] or RealTime()-Metrostroi.CamTimers[name] > time) and not Metrostroi.CamQueue[name] then + Metrostroi.CamQueue[name] = table.insert(Metrostroi.CamQueue,{train,cpos,name,time,RT,post,pos,ang,x,y,scale,xmin,ymin}) + end +end +function Metrostroi.SetCamPosAng(pos,ang) + if IsValid(Metrostroi.RTCamera) then + Metrostroi.RTCamera:SetPos(pos) + Metrostroi.RTCamera:SetAngles(ang) + end +end +hook.Add("Think","metrostroi_camera_move",function() + if IsValid(Metrostroi.RTCamera) then + Metrostroi.RTCamera:SetPos(Vector(0,0,-2^16)) + Metrostroi.RTCamera:SetAngles(Angle(90,0,0)) + end + if Metrostroi.RenderCam and Metrostroi.RenderedCam ~= RealTime() then + local camera = Metrostroi.RenderCam + Metrostroi.RenderCam = nil + if IsValid(camera[1]) then + local distance = camera[1]:LocalToWorld(camera[2]):Distance(LocalPlayer():GetPos()) + if distance > 256 then return end + local x,y = camera[9],camera[10] + local scale = camera[11] or 1 + local xmin,ymin = camera[12] or 0,camera[13] or 0 + render.PushRenderTarget(camera[5],0,0,x, y) + render.Clear(0, 0, 0, 0) + cam.Start2D() + surface.SetTexture( CamRT ) + surface.SetDrawColor( 255, 255, 255, 255 ) + surface.DrawTexturedRectRotated((x/2-xmin)*scale,(y/2-ymin)*scale,x*scale,y*scale,0) + cam.End2D() + render.PopRenderTarget() + else + end + end + if #Metrostroi.CamQueue > 0 and not Metrostroi.RenderCam then + local cam = table.remove(Metrostroi.CamQueue,1) + Metrostroi.CamQueue[cam[3]] = nil + local name,time,post,pos,ang = cam[3],cam[4],cam[6],cam[7],cam[8] + if IsValid(post) then + debugoverlay.Sphere(post:LocalToWorld(pos),1,time,Color( 150, 105, 200 ),true) + debugoverlay.Text(post:LocalToWorld(pos),name,time,Color( 150, 105, 200 ),true) + debugoverlay.Line(post:LocalToWorld(pos),post:LocalToWorld(pos)+post:LocalToWorldAngles(ang):Forward()*25,time,Color( 150, 105, 200 ),true) + Metrostroi.RenderCam = cam + Metrostroi.SetCamPosAng(post:LocalToWorld(cam[7]),post:LocalToWorldAngles(cam[8])) + Metrostroi.CamTimers[cam[3]] = RealTime() + end + end +end) + +local function rect_ol(x,y,w,h,c) + Metrostroi.DrawLine(x-1,y,x+w,y,c) + Metrostroi.DrawLine(x+w,y,x+w,y+h,c) + Metrostroi.DrawLine(x,y+h,x+w,y+h,c) + Metrostroi.DrawLine(x,y,x,y+h,c) +end + +function Metrostroi.DrawLine(x1,y1,x2,y2,col,sz) + surface.SetDrawColor(col) + if x1 == x2 then + -- vertical line + local wid = (sz or 1) / 2 + surface.DrawRect(x1-wid, y1, wid*2, y2-y1) + elseif y1 == y2 then + -- horizontal line + local wid = (sz or 1) / 2 + surface.DrawRect(x1, y1-wid, x2-x1, wid*2) + else + -- other lines + local x3 = (x1 + x2) / 2 + local y3 = (y1 + y2) / 2 + local wx = math.sqrt((x2-x1) ^ 2 + (y2-y1) ^ 2) + local angle = math.deg(math.atan2(y1-y2, x2-x1)) + draw.NoTexture() + surface.DrawTexturedRectRotated(x3, y3, wx, (sz or 1), angle) + end +end +function Metrostroi.DrawRectOutline(x,y,w,h,col,sz) + local wid = sz or 1 + if wid < 0 then + for i=0, wid+1, -1 do + rect_ol(x+i, y+i, w-2*i, h-2*i, col) + end + elseif wid > 0 then + for i=0, wid-1 do + rect_ol(x+i, y+i, w-2*i, h-2*i, col) + end + end +end + +function Metrostroi.DrawRectOL(x,y,w,h,col,sz,col1) + local wid = sz or 1 + if wid < 0 then + for i=0, wid+1, -1 do + rect_ol(x+i, y+i, w-2*i, h-2*i, col) + end + elseif wid > 0 then + for i=0, wid-1 do + rect_ol(x+i, y+i, w-2*i, h-2*i, col) + end + end + surface.SetDrawColor(col1) + surface.DrawRect(x+math.max(0,sz-1),y+math.max(0,sz-1),w-math.max(0,(sz-0.5)*2),h-math.max(0,(sz-0.5)*1.5)) +end + +function Metrostroi.DrawTextRect(x,y,w,h,col,mat) + surface.SetDrawColor(col) + surface.SetMaterial(mat) + surface.DrawTexturedRect(x,y,w,h) +end + +function Metrostroi.DrawTextRectOL(x,y,w,h,col,mat,sz,col1) + local wid = sz or 1 + if wid < 0 then + for i=0, wid+1, -1 do + rect_ol(x+i, y+i, w-2*i, h-2*i, col1) + end + elseif wid > 0 then + for i=0, wid-1 do + rect_ol(x+i, y+i, w-2*i, h-2*i, col1) + end + end + surface.SetDrawColor(col) + surface.DrawRect(x+math.max(0,sz-1),y+math.max(0,sz-1),w-math.max(0,(sz-0.5)*2),h-math.max(0,(sz-0.5)*1.5)) + surface.SetDrawColor(Color(col.r - 40,col.g - 40,col.b - 40)) + surface.SetMaterial(mat) + surface.DrawTexturedRect(x+math.max(0,sz-1),y+math.max(0,sz-1),w-math.max(0,(sz-0.5)*2),h-math.max(0,(sz-0.5)*2)) +end + + +local function recurePrecache(sound) + if type(sound) == "table" then + for k,snd in pairs(sound) do recurePrecache(snd) end + elseif type(sound) == "string" then + util.PrecacheSound(sound) + end +end +local function util_PrecacheSound(dir) + local files,dirs = file.Find(dir.."/*","GAME") + for _, fdir in pairs(dirs) do + util_PrecacheSound(dir.."/"..fdir) + end + + for _,v in pairs(files) do + util.PrecacheSound(dir.."/"..v) + end +end +--util_PrecacheSound("sound/subway_trains") +matproxy.Add{ + name = "TrainBodyColor", + init = function( self, mat, values ) + -- Store the name of the variable we want to set + if values then self._MATresultVarC = values.resultvar end + end, + bind = function( self, mat, ent ) + if ( self._MATresultVarC and ent.GetBodyColor ) then + mat:SetVector( self._MATresultVarC, ent:GetBodyColor() ) + end + end +} +matproxy.Add{ + name = "TrainBodyDecal", + init = function( self, mat, values ) + -- Store the name of the variable we want to set + if values then self._MATresultVarD = values.resultvar end + end, + bind = function( self, mat, ent ) + if ( self._MATresultVarD and ent.GetDirtLevel ) then + mat:SetFloat( self._MATresultVarD, ent:GetDirtLevel() ) + end + end +} + +Metrostroi.RenderTargetNames = { + "ASNP","IGLA","PUAV","PAM","Vityaz","Tickers","Sarmat","Cam1","Cam2","Cam3","Cam4", +} +function Metrostroi.AddCaptureRTName(name) + if not table.HasValue(Metrostroi.RenderTargetNames,name) then + table.insert(Metrostroi.RenderTargetNames,name) + end +end + +concommand.Add("metrostroi_capture_rt",function(_,_,args) + local RTs = #args > 0 and args or Metrostroi.RenderTargetNames + + local train = LocalPlayer().InMetrostroiTrain + if not IsValid(train) then return end + + local oldRt = render.GetRenderTarget() -- we'll save the old screen and draw on a new one! + file.CreateDir("rt_captures") + for i,v in ipairs(RTs) do + local RT = train[v] + if RT and type(RT) == "ITexture" then + + render.SetRenderTarget( train[v] ) + + local data = render.Capture( { format = "png", quality = 100, x = 0, y = 0, h = RT:Height(), w = RT:Width() } ) + + local pictureFile = file.Open("rt_captures/"..train:EntIndex().." "..v.." "..os.date("!%d%m%y_%H%M%S",os.time())..".png", "wb", "DATA" ) + pictureFile:Write( data ) + pictureFile:Close() + end + end + + render.SetRenderTarget( oldRt ) +end) + +-------------------------------------------------------------------------------- +-- Player meta table magic +-- Author: HunterNL +-------------------------------------------------------------------------------- +local Player = FindMetaTable("Player") + +function Player:GetTrain() + local seat = self:GetVehicle() + if IsValid(seat) then + return seat:GetNW2Entity("TrainEntity"),seat + end +end +hook.Add("Think","MetrostroiGetTrain",function() + local ply = LocalPlayer() + local train = ply:GetTrain() + if IsValid(train) then + ply.InMetrostroiTrain = train + else + ply.InMetrostroiTrain = false + end +end) + +RunConsoleCommand("r_rootlod",0) -- Train models only visible with High model quality + +local matSprite = { + ["$basetexture"] = "", + ["$spriteorientation"] = "vp_parallel", + ["$spriteorigin"] = "[ 0.50 0.50 ]", + ["$illumfactor"] = 7, + ["$spriterendermode"] = 3, +} +local matUnlit = { + ["$basetexture"] = "", + ["$translucent"]= 1, + ["$additive"] = 1, + ["$vertexcolor"] = 1, + --["$vertexalpha"] = 1, +} +Metrostroi.SpriteCache1 = Metrostroi.SpriteCache1 or {} +Metrostroi.SpriteCache2 = Metrostroi.SpriteCache2 or {} +function Metrostroi.MakeSpriteTexture(path,isSprite) + if isSprite then + if Metrostroi.SpriteCache1[path] then return Metrostroi.SpriteCache1[path] end + matSprite["$basetexture"] = path + Metrostroi.SpriteCache1[path] = CreateMaterial(path..":sprite","Sprite",matSprite) + return Metrostroi.SpriteCache1[path] + else + if Metrostroi.SpriteCache1[path] then return Metrostroi.SpriteCache1[path] end + matUnlit["$basetexture"] = path + Metrostroi.SpriteCache2[path] = CreateMaterial(path..":spriteug","UnlitGeneric",matUnlit) + return Metrostroi.SpriteCache2[path] + end +end \ No newline at end of file diff --git a/lua/metrostroi/convars.lua b/lua/metrostroi/convars.lua new file mode 100644 index 0000000..d2ccc08 --- /dev/null +++ b/lua/metrostroi/convars.lua @@ -0,0 +1,116 @@ +-- FIXME hack +function Metrostroi.GetEnergyCost(kWh) + return kWh*0.08 +end + +--Not sure about the quirks related to shared convars like this +CreateConVar("metrostroi_train_requirethirdrail",1,FCVAR_ARCHIVE,"Whether or not Metrostroi trains require power from the third rail") +CreateConVar("metrostroi_debugger_update_interval",1,FCVAR_ARCHIVE,"Seconds between debugger data messages") + +CreateConVar("metrostroi_arsmode",1,FCVAR_ARCHIVE) +CreateConVar("metrostroi_arsmode_nogreen",0,FCVAR_ARCHIVE) +CreateConVar("metrostroi_write_telemetry",0,FCVAR_ARCHIVE) + +CreateConVar("metrostroi_voltage",750,FCVAR_ARCHIVE) +CreateConVar("metrostroi_current_limit",4000,FCVAR_ARCHIVE) +CreateConVar("metrostroi_ars_sfreq",1,FCVAR_ARCHIVE,"Enable second freq.") +CreateConVar("metrostroi_signal_debug",0,FCVAR_ARCHIVE,"Enable signal debug") + + +Metrostroi.SignalDebugCV = GetConVar("metrostroi_signal_debug") +if SERVER then + util.AddNetworkString("metrostroi_expel_passengers") + CreateConVar("metrostroi_ars_printnext",0,FCVAR_NONE,"Prints next signal to console on wagon with entered number") + + + local function BrokeAndSet(button,state,ply,train) + local train = ply:GetTrain() + + if IsValid(train) then + if train[button] then + if train.Plombs[button] then train:BrokePlomb(button,ply) end + train[button]:TriggerInput("Set",state) + end + end + end + concommand.Add("metrostroi_disablears",function(ply) + if not IsValid(ply) then return end + local train = ply:GetTrain() + BrokeAndSet("KAH",1,ply) + BrokeAndSet("ARS",0,ply) + if train.BARSBlock then + BrokeAndSet("ALS",1,ply) + BrokeAndSet("BARSBlock",3,ply) + end + BrokeAndSet("VBA",0,ply) + BrokeAndSet("EPK",0,ply) + BrokeAndSet("EPV",0,ply) + BrokeAndSet("U4",0,ply) + BrokeAndSet("K9",0,ply) + BrokeAndSet("KAHK",0,ply) + BrokeAndSet("RC1",0,ply) + BrokeAndSet("RUM",0,ply) + BrokeAndSet("UOS",1,ply) + BrokeAndSet("OVT",train.KPVU and 0 or 1,ply) + BrokeAndSet("VAH",1,ply) + BrokeAndSet("RC2",0,ply) + BrokeAndSet("VAU",0,ply) + BrokeAndSet("RUM",0,ply) + BrokeAndSet("RCARS",0,ply) + BrokeAndSet("RCAV3",0,ply) + BrokeAndSet("RCAV4",0,ply) + BrokeAndSet("RCAV5",0,ply) + BrokeAndSet("UAVA",1,ply) + BrokeAndSet("SAP26",1,ply) + BrokeAndSet("SAP24",1,ply) + BrokeAndSet("RC",0,ply) + BrokeAndSet("SA8",1,ply) + BrokeAndSet("SB6",1,ply) + BrokeAndSet("PB",1,ply) + end) + net.Receive("metrostroi_expel_passengers",function(_,ply) + if not IsValid(ply) then return end + local train = ply:GetTrain() + if not IsValid(train) or not train.WagonList or (train.CPPICanPickup and not train:CPPICanPickup(ply)) then return end + + for k,t in pairs(train.WagonList) do t.AnnouncementToLeaveWagon = true end + end,nil,"Expel passengers from train") + return +end +concommand.Add("metrostroi_expel_passengers",function() + net.Start("metrostroi_expel_passengers") net.SendToServer() +end,nil,"Expel passengers from train") + +CreateClientConVar("metrostroi_language","",true,true) +CreateClientConVar("metrostroi_language_softreload",0,true) + +CreateClientConVar("metrostroi_stop_helper",0,true) + +CreateClientConVar("metrostroi_drawdebug",0,true) +CreateClientConVar("metrostroi_drawsignaldebug",0,true) +CreateClientConVar("metrostroi_drawcams",1,true) +CreateClientConVar("metrostroi_cabfov",75,true) +CreateClientConVar("metrostroi_cabz",0,true) +CreateClientConVar("metrostroi_disablecamaccel",0,true) +CreateClientConVar("metrostroi_disablehovertext",0,true) +CreateClientConVar("metrostroi_disablehovertextpos",0,true) +CreateClientConVar("metrostroi_debugger_data_timeout",2,true,false) + +CreateClientConVar("metrostroi_disablehud",0,true) +CreateClientConVar("metrostroi_renderdistance",1024,true) +CreateClientConVar("metrostroi_screenshotmode",0,true) +CreateClientConVar("metrostroi_softdrawmultipier",100,true) + +CreateClientConVar("metrostroi_route_number",61,true,true) +CreateClientConVar("metrostroi_shadows1",1,true) +CreateClientConVar("metrostroi_shadows2",1,true) +CreateClientConVar("metrostroi_shadows3",0,true) +CreateClientConVar("metrostroi_shadows4",0,true) +CreateClientConVar("metrostroi_sprites",1,true) +CreateClientConVar("metrostroi_minimizedshow",0,true) +local function reload() + --Metrostroi.ReloadClientside = true +end +cvars.AddChangeCallback("metrostroi_shadows1",reload,"reload_shadows") +cvars.AddChangeCallback("metrostroi_shadows2",reload,"reload_shadows") +CreateClientConVar("metrostroi_tooltip_delay",0,true) diff --git a/lua/metrostroi/maps/b46_lite.lua b/lua/metrostroi/maps/b46_lite.lua new file mode 100644 index 0000000..92c3836 --- /dev/null +++ b/lua/metrostroi/maps/b46_lite.lua @@ -0,0 +1,45 @@ +local Map = game.GetMap():lower() or "" + +if Map:find("gm_metrostroi") and Map:find("lite") then + Metrostroi.PlatformMap = "metrostroi" + Metrostroi.CurrentMap = "gm_metrostroi_lite" + Metrostroi.BogeyOldMap = true +else + return +end + +--[ÐОМЕР] = {ÐÐЗВÐÐИЕ,ПРÐÐ’ÐЯ СТОРОÐÐ,ВЕЖЛИВОСТЬ,ВЕЩИ,ПРИСЛÐОЯТЬСЯ К ДВЕРЯМ,ИМЕЕТ Ð’ ÐÐЗВÐÐИИ "СТÐÐЦИЯ",СТÐÐЦИЯ ПЕРЕХОДÐ,СТÐÐЦИЯ РÐЗДЕЛЕÐИЯ,ÐЕ КОÐЕЧÐÐЯ(развернуть информатор)} +Metrostroi.AnnouncerData = +{ + [108] = {"Avtozavodskaya", false,false,false ,false ,false,0 }, + [109] = {"Industrial'naya", false,false ,false,true ,false,0 }, + [110] = {"Moskovskaya", true ,true,false ,false,false,0 }, + [111] = {"Oktyabrs'kaya", false,false,1 ,false,false,0 }, + [112] = {"Ploschad' Myra", false,false,false ,true ,false,0 }, + [113] = {"Novoarmeyskaya", false,true ,0 ,false,false,0 }, + [114] = {"Vokzalnaya", false,false,1 ,false,false,0 }, +} +Metrostroi.AnnouncerTranslate = { + [108] = "ÐвтозаводÑкаÑ", + [109] = "ИндуÑтриальнаÑ", + [110] = "МоÑковÑкаÑ", + [111] = "ОктÑбрьÑкаÑ", + [112] = "Площадь мира", + [113] = "ÐовоармейÑкаÑ", + [114] = "ВокзальнаÑ", +} + +Metrostroi.WorkingStations = { + {108,109,110,111,112,113,114}, +} +Metrostroi.EndStations = { + {108,111,114}, +} +Metrostroi.Skins["717_schemes"]["p"] = { + adv = "metrostroi_skins/81-717_schemes/int_b50_spb_adv", + clean = "metrostroi_skins/81-717_schemes/int_b50_spb_clean", +} +Metrostroi.Skins["717_schemes"]["m"] = { + adv = "metrostroi_skins/81-717_schemes/int_b50_msk_adv", + clean = "metrostroi_skins/81-717_schemes/int_b50_msk_noadv", +} diff --git a/lua/metrostroi/maps/b50.lua b/lua/metrostroi/maps/b50.lua new file mode 100644 index 0000000..eb02abb --- /dev/null +++ b/lua/metrostroi/maps/b50.lua @@ -0,0 +1,1857 @@ +local Map = game.GetMap():lower() or "" + +if Map:find("gm_metrostroi") and not Map:find("lite") then + Metrostroi.PlatformMap = "metrostroi" + Metrostroi.CurrentMap = "gm_metrostroi" + Metrostroi.BogeyOldMap = true +else + return +end +Metrostroi.AddPassSchemeTex("717_new","Line 1",{ + "models/metrostroi_schemes/map_2", +}) +Metrostroi.AddPassSchemeTex("720","Line 1",{ + "metrostroi_skins/81-720_schemes/b50_1", + "metrostroi_skins/81-720_schemes/b50_1r", +}) +Metrostroi.AddPassSchemeTex("720","Line 2",{ + "metrostroi_skins/81-720_schemes/b50_2", + "metrostroi_skins/81-720_schemes/b50_2r", +}) +Metrostroi.AddPassSchemeTex("722","Line 1",{ + "metrostroi_skins/81-722_schemes/b50_1", + "metrostroi_skins/81-722_schemes/b50_1r", +}) +Metrostroi.AddPassSchemeTex("722","Line 2",{ + "metrostroi_skins/81-722_schemes/b50_2", + "metrostroi_skins/81-722_schemes/b50_2r", +}) +Metrostroi.AddLastStationTex("702",108,"models/metrostroi_schemes/destination_table_black/label_avtozavodskaya") +Metrostroi.AddLastStationTex("702",111,"models/metrostroi_schemes/destination_table_black/label_oktyabrskaya") +Metrostroi.AddLastStationTex("702",112,"models/metrostroi_schemes/destination_table_black/label_ploshad_mira") +Metrostroi.AddLastStationTex("702",114,"models/metrostroi_schemes/destination_table_black/label_vokzalnaya") +Metrostroi.AddLastStationTex("702",115,"models/metrostroi_schemes/destination_table_black/label_komsomolskaya") +Metrostroi.AddLastStationTex("702",121,"models/metrostroi_schemes/destination_table_black/label_minskaya") +Metrostroi.AddLastStationTex("702",123,"models/metrostroi_schemes/destination_table_black/label_mezdustroiskaya") +Metrostroi.AddLastStationTex("702",322,"models/metrostroi_schemes/destination_table_black/label_avt_yujnaya") + +Metrostroi.AddLastStationTex("710",108,"models/metrostroi_schemes/destination_table_white/label_avtozavodskaya") +Metrostroi.AddLastStationTex("710",111,"models/metrostroi_schemes/destination_table_white/label_oktyabrskaya") +Metrostroi.AddLastStationTex("710",112,"models/metrostroi_schemes/destination_table_white/label_ploshad_mira") +Metrostroi.AddLastStationTex("710",114,"models/metrostroi_schemes/destination_table_white/label_vokzalnaya") +Metrostroi.AddLastStationTex("710",115,"models/metrostroi_schemes/destination_table_white/label_komsomolskaya") +Metrostroi.AddLastStationTex("710",121,"models/metrostroi_schemes/destination_table_white/label_minskaya") +Metrostroi.AddLastStationTex("710",123,"models/metrostroi_schemes/destination_table_white/label_mezdustroiskaya") +Metrostroi.AddLastStationTex("710",322,"models/metrostroi_schemes/destination_table_white/label_avt_yujnaya") + +Metrostroi.AddLastStationTex("717",108,"models/metrostroi_schemes/destination_table_white/label_avtozavodskaya") +Metrostroi.AddLastStationTex("717",111,"models/metrostroi_schemes/destination_table_white/label_oktyabrskaya") +Metrostroi.AddLastStationTex("717",112,"models/metrostroi_schemes/destination_table_white/label_ploshad_mira") +Metrostroi.AddLastStationTex("717",114,"models/metrostroi_schemes/destination_table_white/label_vokzalnaya") +Metrostroi.AddLastStationTex("717",115,"models/metrostroi_schemes/destination_table_white/label_komsomolskaya") +Metrostroi.AddLastStationTex("717",121,"models/metrostroi_schemes/destination_table_white/label_minskaya") +Metrostroi.AddLastStationTex("717",123,"models/metrostroi_schemes/destination_table_white/label_mezdustroiskaya") +Metrostroi.AddLastStationTex("717",322,"models/metrostroi_schemes/destination_table_white/label_avt_yujnaya") + +Metrostroi.AddLastStationTex("720",108,"models/metrostroi_schemes/destination_table_white/label_avtozavodskaya") +Metrostroi.AddLastStationTex("720",111,"models/metrostroi_schemes/destination_table_white/label_oktyabrskaya") +Metrostroi.AddLastStationTex("720",112,"models/metrostroi_schemes/destination_table_white/label_ploshad_mira") +Metrostroi.AddLastStationTex("720",114,"models/metrostroi_schemes/destination_table_white/label_vokzalnaya") +Metrostroi.AddLastStationTex("720",115,"models/metrostroi_schemes/destination_table_white/label_komsomolskaya") +Metrostroi.AddLastStationTex("720",121,"models/metrostroi_schemes/destination_table_white/label_minskaya") +Metrostroi.AddLastStationTex("720",123,"models/metrostroi_schemes/destination_table_white/label_mezdustroiskaya") +Metrostroi.AddLastStationTex("720",322,"models/metrostroi_schemes/destination_table_white/label_avt_yujnaya") + +Metrostroi.TickerAdverts = {"МЕТРОПОЛИТЕРИМЕÐИ ГÐРРИ ÐЬЮМÐÐРПРИГЛÐШÐЕТ ÐРРÐБОТУ РЕÐЛЬÐЕ МÐФЕÐЕСТОВ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,ТЕЛЕФОРДЛЯ СПРÐВОК 8 (800) 555-35-35", "ЭЛЕКТРОДЕПО ТЧ-1 ПРИГЛÐШÐЕТ ÐРРÐБОТУ МÐППЕРОВ ДЛЯ РÐССТÐÐОВКИ УДОЧЕК И ЗМЕЙ", "СТÐÐЦИЯ МОСКОВСКÐЯ ПРИГЛÐШÐЕТ ÐРРÐБОТУ МÐШИÐИСТОВ И ПОМОЩÐИКОВ МÐШИÐИСТРЭСКÐЛÐТОРÐ. ОПЛÐТР5 КУСОЧКОВ ÐОМЕРÐОГО.", "ЭЛЕКТРОДЕПО ТЧ1 ПРИГЛÐШÐЕТ ÐРРÐБООООООООООООООООООООООООООООООООООООООООООЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГГ"} + +Metrostroi.StationAnnouncesTo = { + [122] = {1, 322, "subway_stations/inside/station_arr_to_322.mp3", "subway_stations/inside/station_dep_to_322.mp3"} +} + +Metrostroi.StationAnnouncesToEnd = { + [108] = {"subway_stations/inside/no_entry_arr_108.mp3", "subway_stations/inside/no_entry_dep_108.mp3"}, + [123] = {"subway_stations/inside/no_entry_arr_123.mp3", "subway_stations/inside/no_entry_dep_123.mp3"} +} + +Metrostroi.StationData = { + [109] = true, + [110] = true, + [118] = true +} + + +Metrostroi.SetRRIAnnouncer({ + click_end = {"subway_announcers/rri/boiko/spec/click_end.mp3",0.281451}, + click_start = {"subway_announcers/rri/boiko/spec/click_start.mp3",0.438118}, + last = {"subway_announcers/rri/boiko/spec/last.mp3",22.264354}, + exit = {"subway_announcers/rri/boiko/spec/spec_attention_exit.mp3",5.446236}, + handrails = {"subway_announcers/rri/boiko/spec/spec_attention_handrails.mp3",4.594558}, + objects = {"subway_announcers/rri/boiko/spec/spec_attention_objects.mp3",5.143175}, + things = {"subway_announcers/rri/boiko/spec/spec_attention_things.mp3",05.093}, + politeness = {"subway_announcers/rri/boiko/spec/spec_attention_politeness.mp3",11.457075}, + train_depeat = {"subway_announcers/rri/boiko/spec/spec_attention_train_depeat.mp3",4.842222}, + train_stop = {"subway_announcers/rri/boiko/spec/spec_attention_train_stop.mp3",6.963424}, + + skip_lesnaya = {"subway_announcers/rri/boiko/b50/skip_lesnaya.mp3",5.501270}, + skip_vokzalnaya = {"subway_announcers/rri/boiko/b50/skip_vokzalnaya.mp3",5.792358}, + arr_avtozavodskaya = {"subway_announcers/rri/boiko/b50/1/arr_avtozavodskaya.mp3",2.500000}, + arr_elektrosila = {"subway_announcers/rri/boiko/b50/1/arr_elektrosila.mp3",2.502834}, + arr_industrialnaya = {"subway_announcers/rri/boiko/b50/1/arr_industrialnaya.mp3",2.410635}, + arr_komsomolskaya = {"subway_announcers/rri/boiko/b50/1/arr_komsomolskaya.mp3",6.525873}, + arr_mejdustroyskaya = {"subway_announcers/rri/boiko/b50/1/arr_mejdustroyskaya.mp3",3.867710}, + arr_minskaya = {"subway_announcers/rri/boiko/b50/1/arr_minskaya.mp3",1.716757}, + arr_moskovskaya = {"subway_announcers/rri/boiko/b50/1/arr_moskovskaya.mp3",3.636893}, + arr_novoarmeyskaya = {"subway_announcers/rri/boiko/b50/1/arr_novoarmeyskaya.mp3",2.318912}, + arr_oktyabrskaya = {"subway_announcers/rri/boiko/b50/1/arr_oktyabrskaya.mp3",2.235147}, + arr_park_pobedy = {"subway_announcers/rri/boiko/b50/1/arr_park_pobedy.mp3",3.625102}, + arr_ploschad_myra = {"subway_announcers/rri/boiko/b50/1/arr_ploschad_myra.mp3",2.527211}, + arr_sineozernaya = {"subway_announcers/rri/boiko/b50/1/arr_sineozernaya.mp3",2.137528}, + arr_teatralnaya_ploschad = {"subway_announcers/rri/boiko/b50/1/arr_teatralnaya_ploschad.mp3",2.527211}, + arr_tsarskiye_vorota = {"subway_announcers/rri/boiko/b50/1/arr_tsarskiye_vorota.mp3",2.524717}, + arr_vokzalnaya = {"subway_announcers/rri/boiko/b50/1/arr_vokzalnaya.mp3",2.213537}, + next_avtozavodskaya = {"subway_announcers/rri/boiko/b50/1/next_avtozavodskaya.mp3",5.483583}, + next_elektrosila = {"subway_announcers/rri/boiko/b50/1/next_elektrosila.mp3",4.693197}, + next_industrialnaya = {"subway_announcers/rri/boiko/b50/1/next_industrialnaya.mp3",5.509410}, + next_komsomolskaya = {"subway_announcers/rri/boiko/b50/1/next_komsomolskaya.mp3",6.685805}, + next_mejdustroyskaya = {"subway_announcers/rri/boiko/b50/1/next_mejdustroyskaya.mp3",6.323129}, + next_minskaya = {"subway_announcers/rri/boiko/b50/1/next_minskaya.mp3",5.326644}, + next_moskovskaya = {"subway_announcers/rri/boiko/b50/1/next_moskovskaya.mp3",6.832426}, + next_novoarmeyskaya = {"subway_announcers/rri/boiko/b50/1/next_novoarmeyskaya.mp3",5.227596}, + next_oktyabrskaya = {"subway_announcers/rri/boiko/b50/1/next_oktyabrskaya.mp3",5.492200}, + next_park_pobedy = {"subway_announcers/rri/boiko/b50/1/next_park_pobedy.mp3",6.588798}, + next_ploschad_myra = {"subway_announcers/rri/boiko/b50/1/next_ploschad_myra.mp3",5.653560}, + next_sineozernaya = {"subway_announcers/rri/boiko/b50/1/next_sineozernaya.mp3",5.245646}, + next_teatralnaya_ploschad = {"subway_announcers/rri/boiko/b50/1/next_teatralnaya_ploschad.mp3",5.059252}, + next_tsarskiye_vorota = {"subway_announcers/rri/boiko/b50/1/next_tsarskiye_vorota.mp3",5.482063}, + next_vokzalnaya = {"subway_announcers/rri/boiko/b50/1/next_vokzalnaya.mp3",5.194921}, + to_komsomolskaya = {"subway_announcers/rri/boiko/b50/1/to_komsomolskaya.mp3",4.835986}, + to_mejdustroyskaya = {"subway_announcers/rri/boiko/b50/1/to_mejdustroyskaya.mp3",4.359819}, + to_minskaya = {"subway_announcers/rri/boiko/b50/1/to_minskaya.mp3",4.384014}, + to_oktyabrskaya = {"subway_announcers/rri/boiko/b50/1/to_oktyabrskaya.mp3",2.956871}, + to_ploschad_myra = {"subway_announcers/rri/boiko/b50/1/to_ploschad_myra.mp3",4.712041}, + to_vokzalnaya = {"subway_announcers/rri/boiko/b50/1/to_vokzalnaya.mp3",2.808526}, + arr_akademicheskaya = {"subway_announcers/rri/boiko/b50/2/arr_akademicheskaya.mp3",2.259342}, + arr_derjavinskaya = {"subway_announcers/rri/boiko/b50/2/arr_derjavinskaya.mp3",2.276848}, + arr_kirovskaya = {"subway_announcers/rri/boiko/b50/2/arr_kirovskaya.mp3",1.750159}, + arr_leninskaya = {"subway_announcers/rri/boiko/b50/2/arr_leninskaya.mp3",4.512132}, + arr_ohotny_ryad = {"subway_announcers/rri/boiko/b50/2/arr_ohotny_ryad.mp3",3.689388}, + arr_profsoyuznaya = {"subway_announcers/rri/boiko/b50/2/arr_profsoyuznaya.mp3",2.278889}, + arr_sokol = {"subway_announcers/rri/boiko/b50/2/arr_sokol.mp3",1.876780}, + next_akademicheskaya = {"subway_announcers/rri/boiko/b50/2/next_akademicheskaya.mp3",5.546712}, + next_derjavinskaya = {"subway_announcers/rri/boiko/b50/2/next_derjavinskaya.mp3",5.031474}, + next_kirovskaya = {"subway_announcers/rri/boiko/b50/2/next_kirovskaya.mp3",5.105624}, + next_leninskaya = {"subway_announcers/rri/boiko/b50/2/next_leninskaya.mp3",5.129546}, + next_ohotny_ryad = {"subway_announcers/rri/boiko/b50/2/next_ohotny_ryad.mp3",6.871950}, + next_profsoyuznaya = {"subway_announcers/rri/boiko/b50/2/next_profsoyuznaya.mp3",5.099955}, + next_sokol = {"subway_announcers/rri/boiko/b50/2/next_sokol.mp3",4.716689}, + to_leninskaya = {"subway_announcers/rri/boiko/b50/2/to_leninskaya.mp3",3.299909}, + arr_avtostanciya_yujnaya = {"subway_announcers/rri/boiko/b50/3/arr_avtostanciya_yujnaya.mp3",2.634762}, + arr_muzey_skulptur = {"subway_announcers/rri/boiko/b50/3/arr_muzey_skulptur.mp3",2.595941}, + next_avtostanciya_yujnaya = {"subway_announcers/rri/boiko/b50/3/next_avtostanciya_yujnaya.mp3",5.735669}, + next_muzey_skulptur = {"subway_announcers/rri/boiko/b50/3/next_muzey_skulptur.mp3",5.769365}, + to_avtostanciya_yujnaya = {"subway_announcers/rri/boiko/b50/3/to_avtostanciya_yujnaya.mp3",5.443832}, +},{ + { + Name = "Industr.-Sineozern.", + Loop = false, + spec_last = {"last"}, + spec_wait = {{"train_stop"},{"train_depeat"}}, + { + 108,"Avtozavodskaya", + arrlast = {nil, {"arr_avtozavodskaya", 0.5, "last"}, "avtozavodskaya"}, + dep = {{ "next_industrialnaya",0.1,"politeness"}} + }, + { + 109,"Industrialnaya", + arr = {"arr_industrialnaya", "arr_industrialnaya"}, + dep = {{ "next_moskovskaya"}, { "next_avtozavodskaya"}} + }, + { + 110,"Moskovskaya", + arr = {{"arr_moskovskaya",0.1,"politeness"}, "arr_moskovskaya"}, + dep = {{ "next_oktyabrskaya",0.1,"objects"}, { "next_industrialnaya",0.1,"handrails"}} + }, + { + 111,"Oktyabrskaya", + arr = {"arr_oktyabrskaya", "arr_oktyabrskaya"}, + dep = {{ "next_ploschad_myra"}, { "next_moskovskaya"}}, + arrlast = {{"arr_oktyabrskaya", 0.5, "last"}, {"arr_oktyabrskaya", 0.5, "last"}, "oktyabrskaya"}, + not_last = {3, "to_oktyabrskaya"} + }, + { + 112,"Ploschad myra", + arr = {{"arr_ploschad_myra",0.1,"things"}, "arr_ploschad_myra"}, + dep = {{ "next_novoarmeyskaya"}, { "next_oktyabrskaya"}}, + arrlast = {{"arr_ploschad_myra", 0.5, "last"}, {"arr_ploschad_myra", 0.5, "last"}, "ploschad_myra"}, + not_last = {3, "to_ploschad_myra"} + }, + { + 113,"Novoarmeyskaya", + arr = {{"arr_novoarmeyskaya", "skip_vokzalnaya"}, {"arr_novoarmeyskaya",0.1,"exit"}}, + dep = {{ "next_komsomolskaya",0.1,"handrails"}, { "next_ploschad_myra",0.1,"objects"}} + }, + { + 115,"Komsomolskaya", + arr = {{"arr_komsomolskaya",0.1,"things"}, {"arr_komsomolskaya", "skip_vokzalnaya",0.1,"objects"}}, + dep = {{ "next_elektrosila"}, { "next_novoarmeyskaya",0.1,"handrails"}}, + arrlast = {{"arr_komsomolskaya", 0.5, "last"}, {"arr_komsomolskaya", 0.5, "last"}, "komsomolskaya"}, + not_last = {3, "to_komsomolskaya"}, + have_inrerchange = true + }, + { + 116,"Elektrosila", + arr = {"arr_elektrosila", "arr_elektrosila"}, + dep = {{ "next_teatralnaya_ploschad"}, { "next_komsomolskaya"}} + }, + { + 117,"Teatr. ploschad", + arr = {{"arr_teatralnaya_ploschad",0.1,"handrails"}, "arr_teatralnaya_ploschad"}, + dep = {{ "next_park_pobedy",0.1,"exit"}, { "next_elektrosila",0.1,"exit"}} + }, + { + 118,"Park pobedy", + arr = {"arr_park_pobedy", {"arr_park_pobedy",0.1,"politeness"}}, + dep = {{ "next_sineozernaya"}, { "next_teatralnaya_ploschad"}} + }, + { + 119,"Sineozernaya", + arr = {"arr_sineozernaya", "arr_sineozernaya"}, + dep = {{ "next_minskaya",0.1,"things"}, { "next_park_pobedy",0.1,"objects"}} + }, + { + 121,"Minskaya", + arr = {{"arr_minskaya",0.1,"objects"}, {"arr_minskaya",0.1,"things"}}, + dep = {{ "next_tsarskiye_vorota"}, { "next_sineozernaya"}}, + arrlast = {{"arr_minskaya", 0.5, "last"}, {"arr_minskaya", 0.5, "last"}, "minskaya"}, + not_last = {3, "to_minskaya"} + }, + { + 122,"Tsarskiye vorota", + arr = {{"arr_tsarskiye_vorota", 3, "to_mejdustroyskaya"}, "arr_tsarskiye_vorota"}, + dep = {{ "next_mejdustroyskaya"}, { "next_minskaya"}} + }, + { + 123,"Mejdustroyskaya", + arr = {"arr_mejdustroyskaya", {"arr_mejdustroyskaya"}}, + arrlast = {{"arr_mejdustroyskaya", 0.5, "last"}, nil, "mejdustroyskaya"}, + dep = {nil, { "next_tsarskiye_vorota",0.1,"politeness"}} + } + }, + { + Name = "Industr.-Av.Uj.", + Loop = false, + spec_last = {"last"}, + spec_wait = {{"train_stop"},{"train_depeat"}}, + { + 108,"Avtozavodskaya", + arrlast = {nil, {"arr_avtozavodskaya", 0.5, "last"}, "avtozavodskaya"}, + dep = {{ "next_industrialnaya",0.1,"politeness"}} + }, + { + 109,"Industrialnaya", + arr = {"arr_industrialnaya", "arr_industrialnaya"}, + dep = {{ "next_moskovskaya"}, { "next_avtozavodskaya"}} + }, + { + 110,"Moskovskaya", + arr = {{"arr_moskovskaya",0.1,"politeness"}, "arr_moskovskaya"}, + dep = {{ "next_oktyabrskaya",0.1,"objects"}, { "next_industrialnaya",0.1,"handrails"}} + }, + { + 111,"Oktyabrskaya", + arr = {"arr_oktyabrskaya", "arr_oktyabrskaya"}, + dep = {{ "next_ploschad_myra"}, { "next_moskovskaya"}}, + arrlast = {{"arr_oktyabrskaya", 0.5, "last"}, {"arr_oktyabrskaya", 0.5, "last"}, "oktyabrskaya"}, + not_last = {3, "to_oktyabrskaya"} + }, + { + 112,"Ploschad myra", + arr = {{"arr_ploschad_myra",0.1,"things"}, "arr_ploschad_myra"}, + dep = {{ "next_novoarmeyskaya"}, { "next_oktyabrskaya"}}, + arrlast = {{"arr_ploschad_myra", 0.5, "last"}, {"arr_ploschad_myra", 0.5, "last"}, "ploschad_myra"}, + not_last = {3, "to_ploschad_myra"} + }, + { + 113,"Novoarmeyskaya", + arr = {{"arr_novoarmeyskaya", "skip_vokzalnaya"}, {"arr_novoarmeyskaya",0.1,"exit"}}, + dep = {{ "next_komsomolskaya",0.1,"handrails"}, { "next_ploschad_myra",0.1,"objects"}} + }, + { + 115,"Komsomolskaya", + arr = {{"arr_komsomolskaya",0.1,"things"}, {"arr_komsomolskaya", "skip_vokzalnaya",0.1,"objects"}}, + dep = {{ "next_elektrosila"}, { "next_novoarmeyskaya",0.1,"handrails"}}, + arrlast = {{"arr_komsomolskaya", 0.5, "last"}, {"arr_komsomolskaya", 0.5, "last"}, "komsomolskaya"}, + not_last = {3, "to_komsomolskaya"}, + have_inrerchange = true + }, + { + 116,"Elektrosila", + arr = {"arr_elektrosila", "arr_elektrosila"}, + dep = {{ "next_teatralnaya_ploschad"}, { "next_komsomolskaya"}} + }, + { + 117,"Teatr. ploschad", + arr = {{"arr_teatralnaya_ploschad",0.1,"handrails"}, "arr_teatralnaya_ploschad"}, + dep = {{ "next_park_pobedy",0.1,"exit"}, { "next_elektrosila",0.1,"exit"}} + }, + { + 118,"Park pobedy", + arr = {"arr_park_pobedy", {"arr_park_pobedy",0.1,"politeness"}}, + dep = {{ "next_sineozernaya"}, { "next_teatralnaya_ploschad"}} + }, + { + 119,"Sineozernaya", + arr = {"arr_sineozernaya", "arr_sineozernaya"}, + dep = {{ "next_minskaya",0.1,"things"}, { "next_park_pobedy",0.1,"objects"}} + }, + { + 121,"Minskaya", + arr = {{"arr_minskaya",0.1,"objects"}, {"arr_minskaya",0.1,"things"}}, + dep = {{ "next_tsarskiye_vorota"}, { "next_sineozernaya"}}, + arrlast = {{"arr_minskaya", 0.5, "last"}, {"arr_minskaya", 0.5, "last"}, "minskaya"}, + not_last = {3, "to_minskaya"} + }, + { + 122,"Tsarskiye vorota", + arr = {{"arr_tsarskiye_vorota", 3, "to_avtostanciya_yujnaya"}, "arr_tsarskiye_vorota"}, + dep = {{ "next_muzey_skulptur"}, { "next_minskaya"}} + }, + { + 321,"Muzey skulptur", + arr = {{"arr_muzey_skulptur",0.1,"politeness"}, {"arr_muzey_skulptur",0.1,"exit"}}, + dep = {{ "next_avtostanciya_yujnaya",0.1,"things"}, { "next_tsarskiye_vorota"}} + }, + { + 322,"Avtostanciya yujnaya", + arr = {"arr_avtostanciya_yujnaya", "arr_avtostanciya_yujnaya"}, + arrlast = {{"arr_avtostanciya_yujnaya", 0.5, "last"}, nil, "avtostanciya_yujnaya"}, + dep = {nil, { "next_muzey_skulptur",0.1,"handrails"}} + } + }, +}) + +Metrostroi.AddANSPAnnouncer("ASNP Boiko + Pyaseckaya",{ + asnp = true, + + click1 = {"subway_announcers/asnp/boiko_new/click1.mp3",0.5}, + click2 = {"subway_announcers/asnp/boiko_new/click2.mp3",0.3}, + click3 = {"subway_announcers/asnp/boiko_new/click3.mp3",0.3}, + + + announcer_ready = {"subway_announcers/asnp/boiko_new/announcer_ready.mp3",3.295479}, + doors_closing_m = {"subway_announcers/asnp/boiko_new/doors_closing.mp3",3.782542}, + deadlock_m = {"subway_announcers/asnp/boiko_new/spec_attention_deadlock.mp3",9.352500}, + exit_m = {"subway_announcers/asnp/boiko_new/spec_attention_exit.mp3",5.363563}, + handrails_m = {"subway_announcers/asnp/boiko_new/spec_attention_handrails.mp3",4.221854}, + last_m = {"subway_announcers/asnp/boiko_new/spec_attention_last.mp3",4.425625}, + objects_m = {"subway_announcers/asnp/boiko_new/spec_attention_objects.mp3",4.674771}, + politeness_m = {"subway_announcers/asnp/boiko_new/spec_attention_politeness.mp3",9.057104}, + things_m = {"subway_announcers/asnp/boiko_new/spec_attention_things.mp3",4.559146}, + train_depeat_m = {"subway_announcers/asnp/boiko_new/spec_attention_train_depeat.mp3",4.633417}, + train_stop_m = {"subway_announcers/asnp/boiko_new/spec_attention_train_stop.mp3",6.501979}, + station_m = {"subway_announcers/asnp/boiko_new/station.mp3",0.943438}, + train_goes_to_m = {"subway_announcers/asnp/boiko_new/train_goes_to.mp3",2.077708}, + + avtozavodskaya_m = {"subway_announcers/asnp/boiko_new/b50/1/avtozavodskaya.mp3",1.297188}, + elektrosila_m = {"subway_announcers/asnp/boiko_new/b50/1/elektrosila.mp3",1.084354}, + industrialnaya_m = {"subway_announcers/asnp/boiko_new/b50/1/industrialnaya.mp3",1.160792}, + komsomolskaya_m = {"subway_announcers/asnp/boiko_new/b50/1/komsomolskaya.mp3",1.144188}, + komsomolskaya_arr_m = {"subway_announcers/asnp/boiko_new/b50/1/komsomolskaya_arr.mp3",5.042271}, + komsomolskaya_next_m = {"subway_announcers/asnp/boiko_new/b50/1/komsomolskaya_next.mp3",2.497333}, + mejdustroyskaya_m = {"subway_announcers/asnp/boiko_new/b50/1/mejdustroyskaya.mp3",1.300000}, + mejdustroyskaya_arr_m = {"subway_announcers/asnp/boiko_new/b50/1/mejdustroyskaya_arr.mp3",2.727396}, + minskaya_m = {"subway_announcers/asnp/boiko_new/b50/1/minskaya.mp3",0.873375}, + moskovskaya_m = {"subway_announcers/asnp/boiko_new/b50/1/moskovskaya.mp3",2.484708}, + novoarmeyskaya_m = {"subway_announcers/asnp/boiko_new/b50/1/novoarmeyskaya.mp3",1.278167}, + oktyabrskaya_m = {"subway_announcers/asnp/boiko_new/b50/1/oktyabrskaya.mp3",1.017979}, + park_pobedy_m = {"subway_announcers/asnp/boiko_new/b50/1/park_pobedy.mp3",2.479792}, + ploschad_myra_m = {"subway_announcers/asnp/boiko_new/b50/1/ploschad_myra.mp3",1.123229}, + sineozernaya_m = {"subway_announcers/asnp/boiko_new/b50/1/sineozernaya.mp3",1.111458}, + skip_lesnaya_m = {"subway_announcers/asnp/boiko_new/b50/1/skip_lesnaya.mp3",5.215625}, + skip_vokzalnaya_m = {"subway_announcers/asnp/boiko_new/b50/1/skip_vokzalnaya.mp3",5.280792}, + teatralnaya_ploschad_m = {"subway_announcers/asnp/boiko_new/b50/1/teatralnaya_ploschad.mp3",1.436104}, + tsarskiye_vorota_m = {"subway_announcers/asnp/boiko_new/b50/1/tsarskiye_vorota.mp3",1.309313}, + vokzalnaya_m = {"subway_announcers/asnp/boiko_new/b50/1/vokzalnaya.mp3",1.039125}, + + avtostanciya_yujnaya_m = {"subway_announcers/asnp/boiko_new/b50/3/avtostanciya_yujnaya.mp3",1.914771}, + muzey_skulptur_m = {"subway_announcers/asnp/boiko_new/b50/3/muzey_skulptur.mp3",1.138042}, + + doors_closing_f = {"subway_announcers/asnp/pyaseckaya/doors_closing.mp3",2.340813}, + deadlock_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_deadlock.mp3",10.501979}, + exit_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_exit.mp3",5.111104}, + handrails_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_handrails.mp3",4.675083}, + last_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_last.mp3",4.878542}, + objects_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_objects.mp3",5.323146}, + politeness_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_politeness.mp3",10.685375}, + things_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_things.mp3",5.144021}, + train_depeat_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_train_depeat.mp3",4.481875}, + train_stop_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_train_stop.mp3",6.395313}, + + arr_avtozavodskaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/arr_avtozavodskaya.mp3",2.202729}, + arr_elektrosila_f = {"subway_announcers/asnp/pyaseckaya/b50/1/arr_elektrosila.mp3",2.293104}, + arr_industrialnaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/arr_industrialnaya.mp3",2.040417}, + arr_komsomolskaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/arr_komsomolskaya.mp3",6.179500}, + arr_mejdustroyskaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/arr_mejdustroyskaya.mp3",3.846125}, + arr_minskaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/arr_minskaya.mp3",2.087354}, + arr_moskovskaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/arr_moskovskaya.mp3",3.358958}, + arr_novoarmeyskaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/arr_novoarmeyskaya.mp3",2.356708}, + arr_oktyabrskaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/arr_oktyabrskaya.mp3",2.000917}, + arr_park_pobedy_f = {"subway_announcers/asnp/pyaseckaya/b50/1/arr_park_pobedy.mp3",3.815313}, + arr_ploschad_myra_f = {"subway_announcers/asnp/pyaseckaya/b50/1/arr_ploschad_myra.mp3",2.391229}, + arr_sineozernaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/arr_sineozernaya.mp3",2.524604}, + arr_tetralnaya_ploschad_f = {"subway_announcers/asnp/pyaseckaya/b50/1/arr_tetralnaya_ploschad.mp3",2.729667}, + arr_tsarskiye_vorota_f = {"subway_announcers/asnp/pyaseckaya/b50/1/arr_tsarskiye_vorota.mp3",2.853583}, + arr_vokzalnaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/arr_vokzalnaya.mp3",1.961479}, + avtozavodskaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/avtozavodskaya.mp3",1.345104}, + komsomolskaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/komsomolskaya.mp3",1.166375}, + mejdustroyskaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/mejdustroyskaya.mp3",1.499396}, + minskaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/minskaya.mp3",0.991021}, + next_avtozavodskaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/next_avtozavodskaya.mp3",3.068979}, + next_elektrosila_f = {"subway_announcers/asnp/pyaseckaya/b50/1/next_elektrosila.mp3",3.157750}, + next_industrialnaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/next_industrialnaya.mp3",2.989896}, + next_komsomolskaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/next_komsomolskaya.mp3",4.301313}, + next_mejdustroyskaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/next_mejdustroyskaya.mp3",4.650063}, + next_minskaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/next_minskaya.mp3",2.874417}, + next_moskovskaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/next_moskovskaya.mp3",4.207333}, + next_novoarmeyskaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/next_novoarmeyskaya.mp3",2.971479}, + next_oktyabrskaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/next_oktyabrskaya.mp3",2.852229}, + next_park_pobedy_f = {"subway_announcers/asnp/pyaseckaya/b50/1/next_park_pobedy.mp3",4.466313}, + next_ploschad_myra_f = {"subway_announcers/asnp/pyaseckaya/b50/1/next_ploschad_myra.mp3",3.302917}, + next_sineozernaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/next_sineozernaya.mp3",3.238208}, + next_tetralnaya_ploschad_f = {"subway_announcers/asnp/pyaseckaya/b50/1/next_tetralnaya_ploschad.mp3",3.369938}, + next_tsarskiye_vorota_f = {"subway_announcers/asnp/pyaseckaya/b50/1/next_tsarskiye_vorota.mp3",3.423333}, + next_vokzalnaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/next_vokzalnaya.mp3",2.890313}, + oktyabrskaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/oktyabrskaya.mp3",1.225917}, + ploschad_myra_f = {"subway_announcers/asnp/pyaseckaya/b50/1/ploschad_myra.mp3",1.491229}, + skip_lesnaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/skip_lesnaya.mp3",6.511333}, + skip_vokzalnaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/skip_vokzalnaya.mp3",6.290542}, + to_komsomolskaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/to_komsomolskaya.mp3",3.467458}, + to_mejdustroyskaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/to_mejdustroyskaya.mp3",3.811167}, + to_minskaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/to_minskaya.mp3",3.523042}, + to_oktyabrskaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/to_oktyabrskaya.mp3",3.334688}, + to_ploschad_myra_f = {"subway_announcers/asnp/pyaseckaya/b50/1/to_ploschad_myra.mp3",3.480750}, + to_vokzalnaya_f = {"subway_announcers/asnp/pyaseckaya/b50/1/to_vokzalnaya.mp3",3.464708}, + vokzalnaya = {"subway_announcers/asnp/pyaseckaya/b50/1/vokzalnaya.mp3",1.219938}, + + arr_avtostanciya_yujnaya_f = {"subway_announcers/asnp/pyaseckaya/b50/3/arr_avtostanciya_yujnaya.mp3",2.790583}, + arr_muzey_skulptur_f = {"subway_announcers/asnp/pyaseckaya/b50/3/arr_muzey_skulptur.mp3",2.458417}, + avtostanciya_yujnaya_f = {"subway_announcers/asnp/pyaseckaya/b50/3/avtostanciya_yujnaya.mp3",2.082250}, + next_avtostanciya_yujnaya_f = {"subway_announcers/asnp/pyaseckaya/b50/3/next_avtostanciya_yujnaya.mp3",3.553896}, + next_muzey_skulptur_f = {"subway_announcers/asnp/pyaseckaya/b50/3/next_muzey_skulptur.mp3",3.205750}, + to_avtostanciya_yujnaya_f = {"subway_announcers/asnp/pyaseckaya/b50/3/to_avtostanciya_yujnaya.mp3",4.426438}, +}, +{ + { + LED = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, + Name = "ИндуÑтриал.-Синеозёрн.", + Loop = false, + spec_last = {"last_m",0.5,"things_m"}, + spec_last_f = {"last_f",0.5,"things_f"}, + spec_wait = {{"train_stop_m"},{"train_depeat_m"}}, + spec_wait_f = {{"train_stop_f"},{"train_depeat_f"}}, + BlockDoors = true, + { + 108, + "ÐвтозаводÑкаÑ", + arrlast = {nil, {"arr_avtozavodskaya_f", 0.5, "last_f",2,"things_f",2,"deadlock_f"}, "avtozavodskaya_m"}, + dep = {{"doors_closing_m", "industrialnaya_m",0.1,"politeness_m"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 109, + "ИндуÑтриальнаÑ", + arr = {{"station_m","industrialnaya_m"}, "arr_industrialnaya_f"}, + dep = {{"doors_closing_m", "moskovskaya_m"}, {"doors_closing_f", "next_avtozavodskaya_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 110, + "МоÑковÑкаÑ", + arr = {{"station_m","moskovskaya_m",0.1,"politeness_m"}, "arr_moskovskaya_f"}, + dep = {{"doors_closing_m", "oktyabrskaya_m",0.1,"objects_m"}, {"doors_closing_f", "next_industrialnaya_f",0.1,"handrails_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + right_doors=true, + }, + { + 111, + "ОктÑбрьÑкаÑ", + arr = {{"station_m","oktyabrskaya_m"}, "arr_oktyabrskaya_f"}, + dep = {{"doors_closing_m", "ploschad_myra_m"}, {"doors_closing_f", "next_moskovskaya_f"}}, + arrlast = {{"station_m","oktyabrskaya_m", 0.5, "last_m",2,"things_m",2,"deadlock_m"}, {"arr_oktyabrskaya_f", 0.5, "last_f",2,"things_f",2,"deadlock_f"}, "oktyabrskaya_m"}, + not_last = {3, "train_goes_to_m", "oktyabrskaya_m"}, + not_last_f = {3, "to_oktyabrskaya_f"}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 112, + "Площадь мира", + arr = {{"station_m","ploschad_myra_m",0.1,"things_m"}, "arr_ploschad_myra_f"}, + dep = {{"doors_closing_m", "novoarmeyskaya_m"}, {"doors_closing_f", "next_oktyabrskaya_f"}}, + arrlast = {{"station_m","ploschad_myra_m", 0.5, "last_m",2,"things_m",2,"deadlock_m"}, {"arr_ploschad_myra_f", 0.5, "last_f",2,"things_f",2,"deadlock_f"}, "ploschad_myra_m"}, + not_last = {3, "train_goes_to_m", "ploschad_myra_m"}, + not_last_f = {3, "to_ploschad_myra_f"}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 113, + "ÐовоармейÑкаÑ", + arr = {{"station_m","novoarmeyskaya_m",0.1,"skip_vokzalnaya_m"}, {"arr_novoarmeyskaya_f",0.1,"exit_f"}}, + dep = {{"doors_closing_m", "komsomolskaya_next_m",0.1,"handrails_m"}, {"doors_closing_f", "next_ploschad_myra_f",0.1,"objects_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 115, + "КомÑомольÑкаÑ", + arr = {{"arr_komsomolskaya_f",0.1,"things_f"}, {"station_m","komsomolskaya_arr_m",0.1,"objects_m",0.2,"skip_vokzalnaya_m"}}, + dep = {{"doors_closing_f", "next_elektrosila_f"}, {"doors_closing_m", "novoarmeyskaya_m",0.1,"handrails_m"}}, + arrlast = {{"arr_komsomolskaya_f", 0.5, "last_f",2,"things_f",2,"deadlock_f"}, {"station_m","komsomolskaya_m", 0.5, "last_m",2,"things_m",2,"deadlock_m"}, "komsomolskaya_m"}, + not_last = {3, "train_goes_to_m", "komsomolskaya_m"}, + not_last_f = {3, "to_komsomolskaya_f"}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + have_inrerchange = true, + right_doors=true, + }, + { + 116, + "ЭлектроÑила", + arr = {"arr_elektrosila_f", {"station_m","elektrosila_m"}}, + dep = {{"doors_closing_f", "next_tetralnaya_ploschad_f"}, {"doors_closing_m", "komsomolskaya_next_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 117, + "Театр. площадь", + arr = {{"arr_tetralnaya_ploschad_f",0.1,"handrails_f"}, {"station_m","teatralnaya_ploschad_m"}}, + dep = {{"doors_closing_f", "next_park_pobedy_f",0.1,"exit_f"}, {"doors_closing_m", "elektrosila_m",0.1,"exit_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 118, + "Парк победы", + arr = {"arr_park_pobedy_f", {"station_m","park_pobedy_m",0.1,"politeness_m"}}, + dep = {{"doors_closing_f", "next_sineozernaya_f"}, {"doors_closing_m", "teatralnaya_ploschad_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + right_doors=true, + }, + { + 119, + "СинеозёрнаÑ", + arr = {"arr_sineozernaya_f", {"station_m","sineozernaya_m"}}, + dep = {{"doors_closing_f", "next_minskaya_f",0.1,"things_f"}, {"doors_closing_m", "park_pobedy_m",0.1,"objects_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 121, + "МинÑкаÑ", + arr = {{"arr_minskaya_f",0.1,"objects_f"}, {"station_m","minskaya_m",0.1,"things_m"}}, + dep = {{"doors_closing_f", "next_tsarskiye_vorota_f"}, {"doors_closing_m", "sineozernaya_m"}}, + arrlast = {{"arr_minskaya_f", 0.5, "last_f",2,"things_f",2,"deadlock_f"}, {"station_m","minskaya_m", 0.5, "last_m",2,"things_m",2,"deadlock_m"}, "minskaya_m"}, + not_last = {3, "train_goes_to_m", "minskaya_m"}, + not_last_f = {3, "to_minskaya_f"}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 122, + "ЦарÑкие ворота", + arr = {{"arr_tsarskiye_vorota_f", 3, "to_mejdustroyskaya_f"}, {"station_m","tsarskiye_vorota_m"}}, + dep = {{"doors_closing_f", "next_mejdustroyskaya_f"}, {"doors_closing_m", "minskaya_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 123, + "МеждуÑтройÑкаÑ", + arr = {"arr_mejdustroyskaya_f"}, + arrlast = {{"arr_mejdustroyskaya_f", 0.5, "last_f",2,"things_f",2,"deadlock_f"}, nil, "mejdustroyskaya_m"}, + dep = {nil, {"doors_closing_m", "tsarskiye_vorota_m",0.1,"politeness_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + right_doors=true, + } + }, + { + LED = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1}, + Name = "ИндуÑтриально-Ðвт.Юж.", + Loop = false, + spec_last = {"spec_attention_last",0.5,"spec_attention_things"}, + spec_wait = {{"spec_attention_train_stop"},{"spec_attention_train_depeat"}}, + BlockDoors = true, + { + 108, + "ÐвтозаводÑкаÑ", + arrlast = {nil, {"arr_avtozavodskaya_f", 0.5, "last_f",2,"things_f",2,"deadlock_f"}, "avtozavodskaya_m"}, + dep = {{"doors_closing_m", "industrialnaya_m",0.1,"politeness_m"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 109, + "ИндуÑтриальнаÑ", + arr = {{"station_m","industrialnaya_m"}, "arr_industrialnaya_f"}, + dep = {{"doors_closing_m", "moskovskaya_m"}, {"doors_closing_f", "next_avtozavodskaya_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 110, + "МоÑковÑкаÑ", + arr = {{"station_m","moskovskaya_m",0.1,"politeness_m"}, "arr_moskovskaya_f"}, + dep = {{"doors_closing_m", "oktyabrskaya_m",0.1,"objects_m"}, {"doors_closing_f", "next_industrialnaya_f",0.1,"handrails_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + right_doors=true, + }, + { + 111, + "ОктÑбрьÑкаÑ", + arr = {{"station_m","oktyabrskaya_m"}, "arr_oktyabrskaya_f"}, + dep = {{"doors_closing_m", "ploschad_myra_m"}, {"doors_closing_f", "next_moskovskaya_f"}}, + arrlast = {{"station_m","oktyabrskaya_m", 0.5, "last_m",2,"things_m",2,"deadlock_m"}, {"arr_oktyabrskaya_f", 0.5, "last_f",2,"things_f",2,"deadlock_f"}, "oktyabrskaya_m"}, + not_last = {3, "train_goes_to_m", "oktyabrskaya_m"}, + not_last_f = {3, "to_oktyabrskaya_f"}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 112, + "Площадь мира", + arr = {{"station_m","ploschad_myra_m",0.1,"things_m"}, "arr_ploschad_myra_f"}, + dep = {{"doors_closing_m", "novoarmeyskaya_m"}, {"doors_closing_f", "next_oktyabrskaya_f"}}, + arrlast = {{"station_m","ploschad_myra_m", 0.5, "last_m",2,"things_m",2,"deadlock_m"}, {"arr_ploschad_myra_f", 0.5, "last_f",2,"things_f",2,"deadlock_f"}, "ploschad_myra_m"}, + not_last = {3, "train_goes_to_m", "ploschad_myra_m"}, + not_last_f = {3, "to_ploschad_myra_f"}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 113, + "ÐовоармейÑкаÑ", + arr = {{"station_m","novoarmeyskaya_m",0.1,"skip_vokzalnaya_m"}, {"arr_novoarmeyskaya_f",0.1,"exit_f"}}, + dep = {{"doors_closing_m", "komsomolskaya_next_m",0.1,"handrails_m"}, {"doors_closing_f", "next_ploschad_myra_f",0.1,"objects_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 115, + "КомÑомольÑкаÑ", + arr = {{"arr_komsomolskaya_f",0.1,"things_f"}, {"station_m","komsomolskaya_arr_m",0.1,"objects_m",0.2,"skip_vokzalnaya_m"}}, + dep = {{"doors_closing_f", "next_elektrosila_f"}, {"doors_closing_m", "novoarmeyskaya_m",0.1,"handrails_m"}}, + arrlast = {{"arr_komsomolskaya_f", 0.5, "last_f",2,"things_f",2,"deadlock_f"}, {"station_m","komsomolskaya_m", 0.5, "last_m",2,"things_m",2,"deadlock_m"}, "komsomolskaya_m"}, + not_last = {3, "train_goes_to_m", "komsomolskaya_m"}, + not_last_f = {3, "to_komsomolskaya_f"}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + have_inrerchange = true, + right_doors=true, + }, + { + 116, + "ЭлектроÑила", + arr = {"arr_elektrosila_f", {"station_m","elektrosila_m"}}, + dep = {{"doors_closing_f", "next_tetralnaya_ploschad_f"}, {"doors_closing_m", "komsomolskaya_next_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 117, + "Театр. площадь", + arr = {{"arr_tetralnaya_ploschad_f",0.1,"handrails_f"}, {"station_m","teatralnaya_ploschad_m"}}, + dep = {{"doors_closing_f", "next_park_pobedy_f",0.1,"exit_f"}, {"doors_closing_m", "elektrosila_m",0.1,"exit_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 118, + "Парк победы", + arr = {"arr_park_pobedy_f", {"station_m","park_pobedy_m",0.1,"politeness_m"}}, + dep = {{"doors_closing_f", "next_sineozernaya_f"}, {"doors_closing_m", "teatralnaya_ploschad_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + right_doors=true, + }, + { + 119, + "СинеозёрнаÑ", + arr = {"arr_sineozernaya_f", {"station_m","sineozernaya_m"}}, + dep = {{"doors_closing_f", "next_minskaya_f",0.1,"things_f"}, {"doors_closing_m", "park_pobedy_m",0.1,"objects_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 121, + "МинÑкаÑ", + arr = {{"arr_minskaya_f",0.1,"objects_f"}, {"station_m","minskaya_m",0.1,"things_m"}}, + dep = {{"doors_closing_f", "next_tsarskiye_vorota_f"}, {"doors_closing_m", "sineozernaya_m"}}, + arrlast = {{"arr_minskaya_f", 0.5, "last_f",2,"things_f",2,"deadlock_f"}, {"station_m","minskaya_m", 0.5, "last_m",2,"things_m",2,"deadlock_m"}, "minskaya_m"}, + not_last = {3, "train_goes_to_m", "minskaya_m"}, + not_last_f = {3, "to_minskaya_f"}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 122, + "ЦарÑкие ворота", + arr = {{"arr_tsarskiye_vorota_f", 3, "to_avtostanciya_yujnaya_f"}, {"station_m","tsarskiye_vorota_m"}}, + dep = {{"doors_closing_f", "next_muzey_skulptur_f"}, {"doors_closing_m", "minskaya_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 321, + "Музей Ñкульптур", + arr = {"arr_muzey_skulptur_f", {"station_m","muzey_skulptur_m"}}, + dep = {{"doors_closing_f", "next_avtostanciya_yujnaya_f"}, {"doors_closing_m", "tsarskiye_vorota_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 322, + "ÐвтоÑÑ‚Ð°Ð½Ñ†Ð¸Ñ ÑŽÐ¶Ð½Ð°Ñ", + arr = {"arr_avtostanciya_yujnaya_f"}, + arrlast = {{"arr_avtostanciya_yujnaya_f", 0.5, "last_f",2,"things_f",2,"deadlock_f"}, nil, "avtostanciya_yujnaya_m"}, + dep = {nil, {"doors_closing_m", "muzey_skulptur_m",0.1,"politeness_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + }, +}) + +Metrostroi.AddANSPAnnouncer("RIU Boiko + Pyaseckaya",{ + riu = true, + + click1 = {"subway_announcers/riu/boiko_new/click1.mp3",0.5}, + click2 = {"subway_announcers/riu/boiko_new/click2.mp3",0.3}, + click3 = {"subway_announcers/riu/boiko_new/click3.mp3",0.3}, + click_start = {"subway_announcers/riu/boiko_new/click1.mp3",0.5}, + click_end = {"subway_announcers/riu/boiko_new/click3.mp3",0.3}, + + announcer_ready = {"subway_announcers/riu/boiko_new/announcer_ready.mp3",3.785}, + doors_closing_m = {"subway_announcers/riu/boiko_new/doors_closing.mp3",5}, + deadlock_m = {"subway_announcers/riu/boiko_new/spec_attention_deadlock.mp3",9.608}, + exit_m = {"subway_announcers/riu/boiko_new/spec_attention_exit.mp3",5.985}, + handrails_m = {"subway_announcers/riu/boiko_new/spec_attention_handrails.mp3",4.929}, + last_m = {"subway_announcers/riu/boiko_new/spec_attention_last.mp3",4.556}, + objects_m = {"subway_announcers/riu/boiko_new/spec_attention_objects.mp3",5.278}, + politeness_m = {"subway_announcers/riu/boiko_new/spec_attention_politeness.mp3",10.335}, + things_m = {"subway_announcers/riu/boiko_new/spec_attention_things.mp3",5.101}, + train_depeat_m = {"subway_announcers/riu/boiko_new/spec_attention_train_depeat.mp3",5.209}, + train_stop_m = {"subway_announcers/riu/boiko_new/spec_attention_train_stop.mp3",7.370}, + station_m = {"subway_announcers/riu/boiko_new/station.mp3",1.2}, + train_goes_to_m = {"subway_announcers/riu/boiko_new/train_goes_to.mp3",2.540}, + + avtozavodskaya_m = {"subway_announcers/riu/boiko_new/b50/1/avtozavodskaya.mp3",1.390068}, + elektrosila_m = {"subway_announcers/riu/boiko_new/b50/1/elektrosila.mp3",1.269025}, + industrialnaya_m = {"subway_announcers/riu/boiko_new/b50/1/industrialnaya.mp3",1.483243}, + komsomolskaya_m = {"subway_announcers/riu/boiko_new/b50/1/komsomolskaya.mp3",1.220454}, + komsomolskaya_arr_m = {"subway_announcers/riu/boiko_new/b50/1/komsomolskaya_arr.mp3",5.675034}, + komsomolskaya_next_m = {"subway_announcers/riu/boiko_new/b50/1/komsomolskaya_next.mp3",2.854921}, + mejdustroyskaya_m = {"subway_announcers/riu/boiko_new/b50/1/mejdustroyskaya.mp3",1.497664}, + mejdustroyskaya_arr_m = {"subway_announcers/riu/boiko_new/b50/1/mejdustroyskaya_arr.mp3",3.011270}, + minskaya_m = {"subway_announcers/riu/boiko_new/b50/1/minskaya.mp3",0.973424}, + moskovskaya_m = {"subway_announcers/riu/boiko_new/b50/1/moskovskaya.mp3",2.823605}, + novoarmeyskaya_m = {"subway_announcers/riu/boiko_new/b50/1/novoarmeyskaya.mp3",1.396848}, + oktyabrskaya_m = {"subway_announcers/riu/boiko_new/b50/1/oktyabrskaya.mp3",1.317415}, + park_pobedy_m = {"subway_announcers/riu/boiko_new/b50/1/park_pobedy.mp3",2.724331}, + ploschad_myra_m = {"subway_announcers/riu/boiko_new/b50/1/ploschad_myra.mp3",1.281837}, + sineozernaya_m = {"subway_announcers/riu/boiko_new/b50/1/sineozernaya.mp3",1.276190}, + skip_vokzalnaya_m = {"subway_announcers/riu/boiko_new/b50/1/skip_vokzalnaya.mp3",6.786417}, + teatralnaya_ploschad_m = {"subway_announcers/riu/boiko_new/b50/1/teatralnaya_ploschad.mp3",1.667800}, + tsarskiye_vorota_m = {"subway_announcers/riu/boiko_new/b50/1/tsarskiye_vorota.mp3",1.366372}, + vokzalnaya_m = {"subway_announcers/riu/boiko_new/b50/1/vokzalnaya.mp3",1.185125}, + + avtostanciya_yujnaya_m = {"subway_announcers/riu/boiko_new/b50/3/avtostanciya_yujnaya.mp3",2.336599}, + muzey_skulptur_m = {"subway_announcers/riu/boiko_new/b50/3/muzey_skulptur.mp3",1.446553}, + + doors_closing_f = {"subway_announcers/riu/pyaseckaya/doors_closing.mp3",2.994}, + deadlock_f = {"subway_announcers/riu/pyaseckaya/spec_attention_deadlock.mp3",10.133}, + exit_f = {"subway_announcers/riu/pyaseckaya/spec_attention_exit.mp3",5.466}, + handrails_f = {"subway_announcers/riu/pyaseckaya/spec_attention_handrails.mp3",4.744}, + last_f = {"subway_announcers/riu/pyaseckaya/spec_attention_last.mp3",4.506}, + objects_f = {"subway_announcers/riu/pyaseckaya/spec_attention_objects.mp3",5.219}, + politeness_f = {"subway_announcers/riu/pyaseckaya/spec_attention_politeness.mp3",10.221}, + things_f = {"subway_announcers/riu/pyaseckaya/spec_attention_things.mp3",5.154}, + train_depeat_f = {"subway_announcers/riu/pyaseckaya/spec_attention_train_depeat.mp3",4.829}, + train_stop_f = {"subway_announcers/riu/pyaseckaya/spec_attention_train_stop.mp3",7.240}, + + arr_avtozavodskaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/arr_avtozavodskaya.mp3",2.269501}, + arr_elektrosila_f = {"subway_announcers/riu/pyaseckaya/b50/1/arr_elektrosila.mp3",2.226463}, + arr_industrialnaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/arr_industrialnaya.mp3",2.021995}, + arr_komsomolskaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/arr_komsomolskaya.mp3",6.268594}, + arr_mejdustroyskaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/arr_mejdustroyskaya.mp3",3.773764}, + arr_minskaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/arr_minskaya.mp3",2.002063}, + arr_moskovskaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/arr_moskovskaya.mp3",3.290907}, + arr_novoarmeyskaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/arr_novoarmeyskaya.mp3",2.396190}, + arr_oktyabrskaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/arr_oktyabrskaya.mp3",2.053832}, + arr_park_pobedy_f = {"subway_announcers/riu/pyaseckaya/b50/1/arr_park_pobedy.mp3",3.958390}, + arr_ploschad_myra_f = {"subway_announcers/riu/pyaseckaya/b50/1/arr_ploschad_myra.mp3",2.362041}, + arr_sineozernaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/arr_sineozernaya.mp3",2.476916}, + arr_tetralnaya_ploschad_f = {"subway_announcers/riu/pyaseckaya/b50/1/arr_tetralnaya_ploschad.mp3",2.726508}, + arr_tsarskiye_vorota_f = {"subway_announcers/riu/pyaseckaya/b50/1/arr_tsarskiye_vorota.mp3",2.827642}, + arr_vokzalnaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/arr_vokzalnaya.mp3",2.000000}, + avtozavodskaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/avtozavodskaya.mp3",1.404308}, + komsomolskaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/komsomolskaya.mp3",1.159615}, + mejdustroyskaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/mejdustroyskaya.mp3",1.476440}, + minskaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/minskaya.mp3",0.988980}, + next_avtozavodskaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/next_avtozavodskaya.mp3",3.073039}, + next_elektrosila_f = {"subway_announcers/riu/pyaseckaya/b50/1/next_elektrosila.mp3",3.125510}, + next_industrialnaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/next_industrialnaya.mp3",3.000363}, + next_komsomolskaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/next_komsomolskaya.mp3",4.254943}, + next_mejdustroyskaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/next_mejdustroyskaya.mp3",4.575692}, + next_minskaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/next_minskaya.mp3",2.992993}, + next_moskovskaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/next_moskovskaya.mp3",4.171338}, + next_novoarmeyskaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/next_novoarmeyskaya.mp3",3.179637}, + next_oktyabrskaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/next_oktyabrskaya.mp3",3.000000}, + next_park_pobedy_f = {"subway_announcers/riu/pyaseckaya/b50/1/next_park_pobedy.mp3",4.765556}, + next_ploschad_myra_f = {"subway_announcers/riu/pyaseckaya/b50/1/next_ploschad_myra.mp3",3.326009}, + next_sineozernaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/next_sineozernaya.mp3",3.375941}, + next_tetralnaya_ploschad_f = {"subway_announcers/riu/pyaseckaya/b50/1/next_tetralnaya_ploschad.mp3",3.578753}, + next_tsarskiye_vorota_f = {"subway_announcers/riu/pyaseckaya/b50/1/next_tsarskiye_vorota.mp3",3.654376}, + next_vokzalnaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/next_vokzalnaya.mp3",2.899229}, + oktyabrskaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/oktyabrskaya.mp3",1.357324}, + ploschad_myra_f = {"subway_announcers/riu/pyaseckaya/b50/1/ploschad_myra.mp3",1.503424}, + skip_lesnaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/skip_lesnaya.mp3",6.401995}, + skip_vokzalnaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/skip_vokzalnaya.mp3",6.232766}, + to_komsomolskaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/to_komsomolskaya.mp3",3.429864}, + to_mejdustroyskaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/to_mejdustroyskaya.mp3",3.560544}, + to_minskaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/to_minskaya.mp3",3.489977}, + to_oktyabrskaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/to_oktyabrskaya.mp3",3.348458}, + to_ploschad_myra_f = {"subway_announcers/riu/pyaseckaya/b50/1/to_ploschad_myra.mp3",3.502449}, + to_vokzalnaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/to_vokzalnaya.mp3",3.545510}, + vokzalnaya_f = {"subway_announcers/riu/pyaseckaya/b50/1/vokzalnaya.mp3",1.223152}, + + arr_avtostanciya_yujnaya_f = {"subway_announcers/riu/pyaseckaya/b50/3/arr_avtostanciya_yujnaya.mp3",2.928866}, + arr_muzey_skulptur_f = {"subway_announcers/riu/pyaseckaya/b50/3/arr_muzey_skulptur.mp3",2.384694}, + avtostanciya_yujnaya_f = {"subway_announcers/riu/pyaseckaya/b50/3/avtostanciya_yujnaya.mp3",2.112041}, + next_avtostanciya_yujnaya_f = {"subway_announcers/riu/pyaseckaya/b50/3/next_avtostanciya_yujnaya.mp3",3.654626}, + next_muzey_skulptur_f = {"subway_announcers/riu/pyaseckaya/b50/3/next_muzey_skulptur.mp3",3.192313}, + to_avtostanciya_yujnaya_f = {"subway_announcers/riu/pyaseckaya/b50/3/to_avtostanciya_yujnaya.mp3",4.618163}, +}, +{ + { + LED = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, + Name = "ИндуÑтриал.-Синеозёрн.", + Loop = false, + BlockDoors = true, + spec_last = {"last_m",0.5,"things_m"}, + spec_last_f = {"last_f",0.5,"things_f"}, + spec_wait = {{"train_stop_m"},{"train_depeat_m"}}, + spec_wait_f = {{"train_stop_f"},{"train_depeat_f"}}, + { + 108, + "ÐвтозаводÑкаÑ","Avtozavodskaya", + arrlast = {nil, {"arr_avtozavodskaya_f", 0.5, "last_f",2,"things_f",2,"deadlock_f"}, "avtozavodskaya_m"}, + dep = {{"doors_closing_m", "industrialnaya_m",0.1,"politeness_m"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 109, + "ИндуÑтриальнаÑ","Industrialnaya", + arr = {{"station_m","industrialnaya_m"}, "arr_industrialnaya_f"}, + dep = {{"doors_closing_m", "moskovskaya_m"}, {"doors_closing_f", "next_avtozavodskaya_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 110, + "МоÑковÑкаÑ","Moskovskaya", + arr = {{"station_m","moskovskaya_m",0.1,"politeness_m"}, "arr_moskovskaya_f"}, + dep = {{"doors_closing_m", "oktyabrskaya_m",0.1,"objects_m"}, {"doors_closing_f", "next_industrialnaya_f",0.1,"handrails_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + right_doors=true, + }, + { + 111, + "ОктÑбрьÑкаÑ","Oktyabrskaya", + arr = {{"station_m","oktyabrskaya_m"}, "arr_oktyabrskaya_f"}, + dep = {{"doors_closing_m", "ploschad_myra_m"}, {"doors_closing_f", "next_moskovskaya_f"}}, + arrlast = {{"station_m","oktyabrskaya_m", 0.5, "last_m",2,"things_m",2,"deadlock_m"}, {"arr_oktyabrskaya_f", 0.5, "last_f",2,"things_f",2,"deadlock_f"}, "oktyabrskaya_m"}, + not_last = {3, "train_goes_to_m", "oktyabrskaya_m"}, + not_last_f = {3, "to_oktyabrskaya_f"}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 112, + "Площадь мира","Ploschad myra", + arr = {{"station_m","ploschad_myra_m",0.1,"things_m"}, "arr_ploschad_myra_f"}, + dep = {{"doors_closing_m", "novoarmeyskaya_m"}, {"doors_closing_f", "next_oktyabrskaya_f"}}, + arrlast = {{"station_m","ploschad_myra_m", 0.5, "last_m",2,"things_m",2,"deadlock_m"}, {"arr_ploschad_myra_f", 0.5, "last_f",2,"things_f",2,"deadlock_f"}, "ploschad_myra_m"}, + not_last = {3, "train_goes_to_m", "ploschad_myra_m"}, + not_last_f = {3, "to_ploschad_myra_f"}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 113, + "ÐовоармейÑкаÑ","Novoarmeyskaya", + arr = {{"station_m","novoarmeyskaya_m",0.1,"skip_vokzalnaya_m"}, {"arr_novoarmeyskaya_f",0.1,"exit_f"}}, + dep = {{"doors_closing_m", "komsomolskaya_next_m",0.1,"handrails_m"}, {"doors_closing_f", "next_ploschad_myra_f",0.1,"objects_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 115, + "КомÑомольÑкаÑ","Komsomolskaya", + arr = {{"arr_komsomolskaya_f",0.1,"things_f"}, {"station_m","komsomolskaya_arr_m",0.1,"objects_m",0.2,"skip_vokzalnaya_m"}}, + dep = {{"doors_closing_f", "next_elektrosila_f"}, {"doors_closing_m", "novoarmeyskaya_m",0.1,"handrails_m"}}, + arrlast = {{"arr_komsomolskaya_f", 0.5, "last_f",2,"things_f",2,"deadlock_f"}, {"station_m","komsomolskaya_m", 0.5, "last_m",2,"things_m",2,"deadlock_m"}, "komsomolskaya_m"}, + not_last = {3, "train_goes_to_m", "komsomolskaya_m"}, + not_last_f = {3, "to_komsomolskaya_f"}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + have_inrerchange = true, + right_doors=true, + }, + { + 116, + "ЭлектроÑила","Elektrosila", + arr = {"arr_elektrosila_f", {"station_m","elektrosila_m"}}, + dep = {{"doors_closing_f", "next_tetralnaya_ploschad_f"}, {"doors_closing_m", "komsomolskaya_next_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 117, + "Театр. площадь","Teatr. ploschad", + arr = {{"arr_tetralnaya_ploschad_f",0.1,"handrails_f"}, {"station_m","teatralnaya_ploschad_m"}}, + dep = {{"doors_closing_f", "next_park_pobedy_f",0.1,"exit_f"}, {"doors_closing_m", "elektrosila_m",0.1,"exit_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 118, + "Парк победы","Park pobedy", + arr = {"arr_park_pobedy_f", {"station_m","park_pobedy_m",0.1,"politeness_m"}}, + dep = {{"doors_closing_f", "next_sineozernaya_f"}, {"doors_closing_m", "teatralnaya_ploschad_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + right_doors=true, + }, + { + 119, + "СинеозёрнаÑ","Sineozernaya", + arr = {"arr_sineozernaya_f", {"station_m","sineozernaya_m"}}, + dep = {{"doors_closing_f", "next_minskaya_f",0.1,"things_f"}, {"doors_closing_m", "park_pobedy_m",0.1,"objects_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 121, + "МинÑкаÑ","Minskaya", + arr = {{"arr_minskaya_f",0.1,"objects_f"}, {"station_m","minskaya_m",0.1,"things_m"}}, + dep = {{"doors_closing_f", "next_tsarskiye_vorota_f"}, {"doors_closing_m", "sineozernaya_m"}}, + arrlast = {{"arr_minskaya_f", 0.5, "last_f",2,"things_f",2,"deadlock_f"}, {"station_m","minskaya_m", 0.5, "last_m",2,"things_m",2,"deadlock_m"}, "minskaya_m"}, + not_last = {3, "train_goes_to_m", "minskaya_m"}, + not_last_f = {3, "to_minskaya_f"}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 122, + "ЦарÑкие ворота","Tsarskiye vorota", + arr = {{"arr_tsarskiye_vorota_f", 3, "to_mejdustroyskaya_f"}, {"station_m","tsarskiye_vorota_m"}}, + dep = {{"doors_closing_f", "next_mejdustroyskaya_f"}, {"doors_closing_m", "minskaya_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 123, + "МеждуÑтройÑкаÑ","Mejdustroyskaya", + arr = {"arr_mejdustroyskaya_f"}, + arrlast = {{"arr_mejdustroyskaya_f", 0.5, "last_f",2,"things_f",2,"deadlock_f"}, nil, "mejdustroyskaya_m"}, + dep = {nil, {"doors_closing_m", "tsarskiye_vorota_m",0.1,"politeness_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + right_doors=true, + } + }, + { + LED = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1}, + Name = "ИндуÑтриально-Ðвт.Юж.", + Loop = false, + BlockDoors = true, + spec_last = {"spec_attention_last",0.5,"spec_attention_things"}, + spec_wait = {{"spec_attention_train_stop"},{"spec_attention_train_depeat"}}, + { + 108, + "ÐвтозаводÑкаÑ","Avtozavodskaya", + arrlast = {nil, {"arr_avtozavodskaya_f", 0.5, "last_f",2,"things_f",2,"deadlock_f"}, "avtozavodskaya_m"}, + dep = {{"doors_closing_m", "industrialnaya_m",0.1,"politeness_m"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 109, + "ИндуÑтриальнаÑ","Industrialnaya", + arr = {{"station_m","industrialnaya_m"}, "arr_industrialnaya_f"}, + dep = {{"doors_closing_m", "moskovskaya_m"}, {"doors_closing_f", "next_avtozavodskaya_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 110, + "МоÑковÑкаÑ","Moskovskaya", + arr = {{"station_m","moskovskaya_m",0.1,"politeness_m"}, "arr_moskovskaya_f"}, + dep = {{"doors_closing_m", "oktyabrskaya_m",0.1,"objects_m"}, {"doors_closing_f", "next_industrialnaya_f",0.1,"handrails_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + right_doors=true, + }, + { + 111, + "ОктÑбрьÑкаÑ","Oktyabrskaya", + arr = {{"station_m","oktyabrskaya_m"}, "arr_oktyabrskaya_f"}, + dep = {{"doors_closing_m", "ploschad_myra_m"}, {"doors_closing_f", "next_moskovskaya_f"}}, + arrlast = {{"station_m","oktyabrskaya_m", 0.5, "last_m",2,"things_m",2,"deadlock_m"}, {"arr_oktyabrskaya_f", 0.5, "last_f",2,"things_f",2,"deadlock_f"}, "oktyabrskaya_m"}, + not_last = {3, "train_goes_to_m", "oktyabrskaya_m"}, + not_last_f = {3, "to_oktyabrskaya_f"}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 112, + "Площадь мира","Ploschad myra", + arr = {{"station_m","ploschad_myra_m",0.1,"things_m"}, "arr_ploschad_myra_f"}, + dep = {{"doors_closing_m", "novoarmeyskaya_m"}, {"doors_closing_f", "next_oktyabrskaya_f"}}, + arrlast = {{"station_m","ploschad_myra_m", 0.5, "last_m",2,"things_m",2,"deadlock_m"}, {"arr_ploschad_myra_f", 0.5, "last_f",2,"things_f",2,"deadlock_f"}, "ploschad_myra_m"}, + not_last = {3, "train_goes_to_m", "ploschad_myra_m"}, + not_last_f = {3, "to_ploschad_myra_f"}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 113, + "ÐовоармейÑкаÑ","Novoarmeyskaya", + arr = {{"station_m","novoarmeyskaya_m",0.1,"skip_vokzalnaya_m"}, {"arr_novoarmeyskaya_f",0.1,"exit_f"}}, + dep = {{"doors_closing_m", "komsomolskaya_next_m",0.1,"handrails_m"}, {"doors_closing_f", "next_ploschad_myra_f",0.1,"objects_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 115, + "КомÑомольÑкаÑ","Komsomolskaya", + arr = {{"arr_komsomolskaya_f",0.1,"things_f"}, {"station_m","komsomolskaya_arr_m",0.1,"objects_m",0.2,"skip_vokzalnaya_m"}}, + dep = {{"doors_closing_f", "next_elektrosila_f"}, {"doors_closing_m", "novoarmeyskaya_m",0.1,"handrails_m"}}, + arrlast = {{"arr_komsomolskaya_f", 0.5, "last_f",2,"things_f",2,"deadlock_f"}, {"station_m","komsomolskaya_m", 0.5, "last_m",2,"things_m",2,"deadlock_m"}, "komsomolskaya_m"}, + not_last = {3, "train_goes_to_m", "komsomolskaya_m"}, + not_last_f = {3, "to_komsomolskaya_f"}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + have_inrerchange = true, + right_doors=true, + }, + { + 116, + "ЭлектроÑила","Elektrosila", + arr = {"arr_elektrosila_f", {"station_m","elektrosila_m"}}, + dep = {{"doors_closing_f", "next_tetralnaya_ploschad_f"}, {"doors_closing_m", "komsomolskaya_next_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 117, + "Театр. площадь","Teatr. ploschad", + arr = {{"arr_tetralnaya_ploschad_f",0.1,"handrails_f"}, {"station_m","teatralnaya_ploschad_m"}}, + dep = {{"doors_closing_f", "next_park_pobedy_f",0.1,"exit_f"}, {"doors_closing_m", "elektrosila_m",0.1,"exit_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 118, + "Парк победы","Park pobedy", + arr = {"arr_park_pobedy_f", {"station_m","park_pobedy_m",0.1,"politeness_m"}}, + dep = {{"doors_closing_f", "next_sineozernaya_f"}, {"doors_closing_m", "teatralnaya_ploschad_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + right_doors=true, + }, + { + 119, + "СинеозёрнаÑ","Sineozernaya", + arr = {"arr_sineozernaya_f", {"station_m","sineozernaya_m"}}, + dep = {{"doors_closing_f", "next_minskaya_f",0.1,"things_f"}, {"doors_closing_m", "park_pobedy_m",0.1,"objects_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 121, + "МинÑкаÑ","Minskaya", + arr = {{"arr_minskaya_f",0.1,"objects_f"}, {"station_m","minskaya_m",0.1,"things_m"}}, + dep = {{"doors_closing_f", "next_tsarskiye_vorota_f"}, {"doors_closing_m", "sineozernaya_m"}}, + arrlast = {{"arr_minskaya_f", 0.5, "last_f",2,"things_f",2,"deadlock_f"}, {"station_m","minskaya_m", 0.5, "last_m",2,"things_m",2,"deadlock_m"}, "minskaya_m"}, + not_last = {3, "train_goes_to_m", "minskaya_m"}, + not_last_f = {3, "to_minskaya_f"}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 122, + "ЦарÑкие ворота","Tsarskiye vorota", + arr = {{"arr_tsarskiye_vorota_f", 3, "to_avtostanciya_yujnaya_f"}, {"station_m","tsarskiye_vorota_m"}}, + dep = {{"doors_closing_f", "next_muzey_skulptur_f"}, {"doors_closing_m", "minskaya_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 321, + "Музей Ñкульптур","Muzey skulptur", + arr = {"arr_muzey_skulptur_f", {"station_m","muzey_skulptur_m"}}, + dep = {{"doors_closing_f", "next_avtostanciya_yujnaya_f"}, {"doors_closing_m", "tsarskiye_vorota_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 322, + "ÐвтоÑÑ‚Ð°Ð½Ñ†Ð¸Ñ ÑŽÐ¶Ð½Ð°Ñ","Avtostanciya yujnaya", + arr = {"arr_avtostanciya_yujnaya_f"}, + arrlast = {{"arr_avtostanciya_yujnaya_f", 0.5, "last_f",2,"things_f",2,"deadlock_f"}, nil, "avtostanciya_yujnaya_m"}, + dep = {nil, {"doors_closing_m", "muzey_skulptur_m",0.1,"politeness_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + }, +}) +Metrostroi.AddSarmatUPOAnnouncer("UPO RHINO",{ + tone = {"subway_announcers/sarmat_upo/tone.mp3", 1}, + avtozavodskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/avtozavodskaya.mp3", 1.070100}, + next_avtozavodskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_avtozavodskaya.mp3", 1.957500}, + last_avtozavodskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/last_avtozavodskaya.mp3", 10.100700}, + industrialnaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/industrialnaya.mp3", 1.017900}, + next_industrialnaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_industrialnaya.mp3", 1.983600}, + moskovskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/moskovskaya.mp3", 0.730800}, + next_moskovskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_moskovskaya.mp3", 3.158100}, + next_moskovskaya1 = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_moskovskaya1.mp3", 1.800900}, + oktyabrskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/oktyabrskaya.mp3", 0.887400}, + next_oktyabrskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_oktyabrskaya.mp3", 1.853100}, + last_oktyabrskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/last_oktyabrskaya.mp3", 10.074600}, + ploschad_myra = {"subway_announcers/sarmat_upo/rhino/metrostroi/ploschad_myra.mp3", 0.835200}, + next_ploschad_myra = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_ploschad_myra.mp3", 1.879200}, + last_ploschad_myra = {"subway_announcers/sarmat_upo/rhino/metrostroi/last_ploschad_myra.mp3", 10.283400}, + novoarmeyskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/novoarmeyskaya.mp3", 0.809100}, + next_novoarmeyskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_novoarmeyskaya.mp3", 1.879200}, + vokzalnaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/vokzalnaya.mp3", 0.783000}, + next_vokzalnaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_vokzalnaya.mp3", 1.748700}, + last_vokzalnaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/last_vokzalnaya.mp3", 9.865800}, + komsomolskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/komsomolskaya.mp3", 0.887400}, + next_komsomolskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_komsomolskaya.mp3", 3.340800}, + next_komsomolskaya1 = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_komsomolskaya1.mp3", 1.879200}, + last_komsomolskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/last_komsomolskaya.mp3", 11.327400}, + elektrosila = {"subway_announcers/sarmat_upo/rhino/metrostroi/elektrosila.mp3", 0.835200}, + next_elektrosila = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_elektrosila.mp3", 2.009700}, + teatralnaya_ploschad = {"subway_announcers/sarmat_upo/rhino/metrostroi/teatralnaya_ploschad.mp3", 1.122300}, + next_teatralnaya_ploschad = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_teatralnaya_ploschad.mp3", 2.192400}, + park_pobedy = {"subway_announcers/sarmat_upo/rhino/metrostroi/park_pobedy.mp3", 0.809100}, + next_park_pobedy = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_park_pobedy.mp3", 3.340800}, + next_park_pobedy1 = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_park_pobedy1.mp3", 1.853100}, + sineozernaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/sineozernaya.mp3", 0.887400}, + next_sineozernaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_sineozernaya.mp3", 1.957500}, + skip_lesnaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/skip_lesnaya.mp3", 4.202100}, + minskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/minskaya.mp3", 0.626400}, + next_minskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_minskaya.mp3", 1.644300}, + last_minskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/last_minskaya.mp3", 10.100700}, + tsarskiye_vorota = {"subway_announcers/sarmat_upo/rhino/metrostroi/tsarskiye_vorota.mp3", 1.044000}, + next_tsarskiye_vorota = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_tsarskiye_vorota.mp3", 1.983600}, + mejdustroyskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/mejdustroyskaya.mp3", 0.965700}, + next_mejdustroyskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_mejdustroyskaya.mp3", 3.445200}, + next_mejdustroyskaya1 = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_mejdustroyskaya1.mp3", 2.088000}, + last_mejdustroyskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/last_mejdustroyskaya.mp3", 11.353500}, + muzey_skulptur = {"subway_announcers/sarmat_upo/rhino/metrostroi/muzey_skulptur.mp3", 0.939600}, + next_muzey_skulptur = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_muzey_skulptur.mp3", 1.957500}, + avtostanciya_yujnaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/avtostanciya_yujnaya.mp3", 1.331100}, + next_avtostanciya_yujnaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_avtostanciya_yujnaya.mp3", 2.401200}, + last_avtostanciya_yujnaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/last_avtostanciya_yujnaya.mp3", 10.283400}, + akademicheskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/akademicheskaya.mp3", 0.965700}, + next_akademicheskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_akademicheskaya.mp3", 3.184200}, + next_akademicheskaya1 = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_akademicheskaya1.mp3", 1.800900}, + sokol = {"subway_announcers/sarmat_upo/rhino/metrostroi/sokol.mp3", 0.574200}, + next_sokol = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_sokol.mp3", 1.539900}, + ohotniy_ryad = {"subway_announcers/sarmat_upo/rhino/metrostroi/ohotniy_ryad.mp3", 0.861300}, + next_ohotniy_ryad = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_ohotniy_ryad.mp3", 3.419100}, + next_ohotniy_ryad1 = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_ohotniy_ryad1.mp3", 1.853100}, + kirovskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/kirovskaya.mp3", 0.704700}, + next_kirovskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_kirovskaya.mp3", 1.722600}, + profsoyuznaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/profsoyuznaya.mp3", 0.913500}, + next_profsoyuznaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_profsoyuznaya.mp3", 1.827000}, + last_profsoyuznaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/last_profsoyuznaya.mp3", 9.944100}, + leninskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/leninskaya.mp3", 0.835200}, + next_leninskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_leninskaya.mp3", 1.722600}, + last_leninskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/last_leninskaya.mp3", 9.761400}, + derjavinskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/derjavinskaya.mp3", 0.939600}, + next_derjavinskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/next_derjavinskaya.mp3", 1.800900}, + last_derjavinskaya = {"subway_announcers/sarmat_upo/rhino/metrostroi/last_derjavinskaya.mp3", 10.022400}, + spec_attention_handrails = {"subway_announcers/sarmat_upo/rhino/metrostroi/spec_attention_handrails.mp3", 3.967200}, + spec_attention_politeness = {"subway_announcers/sarmat_upo/rhino/metrostroi/spec_attention_politeness.mp3", 5.533200}, + spec_line1 = {"subway_announcers/sarmat_upo/rhino/metrostroi/spec_line1.mp3", 1.618200}, + spec_line2 = {"subway_announcers/sarmat_upo/rhino/metrostroi/spec_line2.mp3", 1.513800}, + spec_line3 = {"subway_announcers/sarmat_upo/rhino/metrostroi/spec_line3.mp3", 1.618200}, + odz1 = {"subway_announcers/sarmat_upo/rhino/metrostroi/odz1.mp3", 2.088000 + 0.3}, + odz2 = {"subway_announcers/sarmat_upo/rhino/metrostroi/odz2.mp3", 2.192400 + 0.3} +}, { + { + LED = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2}, + Name = "ИндуÑтриал.-Синеозёрн.", + Loop = false, + { + 108, + "ÐвтозаводÑкаÑ","Avtozavodskaya", + arrlast = {nil, "last_avtozavodskaya"}, + dep = {"next_industrialnaya"}, + odz = "odz1" + }, + { + 109, + "ИндуÑтриальнаÑ","Industrialnaya", + arr = {{"industrialnaya", 3, "next_moskovskaya","spec_attention_handrails"}, {"industrialnaya", 3, "next_avtozavodskaya","spec_attention_handrails"}}, + dep = {"next_moskovskaya1", "next_avtozavodskaya"}, + odz = "odz2" + }, + { + 110, + "МоÑковÑкаÑ","Moskovskaya", + arr = {{"moskovskaya", 3, "next_oktyabrskaya"}, {"moskovskaya", 3, "next_industrialnaya"}}, + dep = {"next_oktyabrskaya", "next_industrialnaya"}, + odz = "odz1", + right_doors = true, + }, + { + 111, + "ОктÑбрьÑкаÑ","Oktyabrskaya", + arr = {{"oktyabrskaya", 3, "next_ploschad_myra","spec_attention_politeness"}, {"oktyabrskaya", 3, "next_moskovskaya","spec_attention_politeness"}}, + dep = {"next_ploschad_myra", "next_moskovskaya1"}, + odz = "odz1", + arrlast = {"last_oktyabrskaya", "last_oktyabrskaya"} + }, + { + 112, + "Площадь мира","Ploschad myra", + arr = {{"ploschad_myra", 3, "next_novoarmeyskaya"}, {"ploschad_myra", 3, "next_oktyabrskaya"}}, + dep = {"next_novoarmeyskaya", "next_oktyabrskaya"}, + odz = "odz2", + arrlast = {"last_ploschad_myra", "last_ploschad_myra"} + }, + { + 113, + "ÐовоармейÑкаÑ","Novoarmeyskaya", + arr = {{"novoarmeyskaya", 3, "next_vokzalnaya","spec_attention_handrails"}, {"novoarmeyskaya", 3, "next_ploschad_myra"}}, + dep = {"next_vokzalnaya", "next_ploschad_myra"}, + odz = "odz2" + }, + { + 114, + "ВокзальнаÑ","Vokzalnaya", + arr = {{"vokzalnaya", 3, "next_komsomolskaya", "spec_line2"}, {"vokzalnaya", 3, "next_novoarmeyskaya","spec_attention_handrails"}}, + dep = {"next_komsomolskaya1", "next_novoarmeyskaya"}, + odz = "odz1", + arrlast = {"last_vokzalnaya", "last_vokzalnaya"} + }, + { + 115, + "КомÑомольÑкаÑ","Komsomolskaya", + arr = {{"komsomolskaya", 3, "next_elektrosila"}, {"komsomolskaya", 3, "next_vokzalnaya"}}, + dep = {"next_elektrosila", "next_vokzalnaya"}, + odz = "odz1", + arrlast = {"last_komsomolskaya", "last_komsomolskaya"}, + right_doors = true + }, + { + 116, + "ЭлектроÑила","Elektrosila", + arr = {{"elektrosila", 3, "next_teatralnaya_ploschad","spec_attention_handrails"}, {"elektrosila", 3, "next_komsomolskaya", "spec_line2"}}, + dep = {"next_teatralnaya_ploschad", "next_komsomolskaya1"}, + odz = "odz2" + }, + { + 117, + "Театр. площадь","Teatraln. ploschad", + arr = {{"teatralnaya_ploschad", 3, "next_park_pobedy","spec_attention_politeness"}, {"teatralnaya_ploschad", 3, "next_elektrosila","spec_attention_politeness"}}, + dep = {"next_park_pobedy1", "next_elektrosila"}, + odz = "odz1" + }, + { + 118, + "Парк победы","Park pobedy", + arr = {{"park_pobedy", 3, "next_sineozernaya","spec_attention_handrails"}, {"park_pobedy", 3, "next_teatralnaya_ploschad"}}, + dep = {"next_sineozernaya", "next_teatralnaya_ploschad"}, + odz = "odz1", + right_doors = true, + }, + { + 119, + "СинеозёрнаÑ","Sineozernaya", + arr = {{"sineozernaya", 3, "next_minskaya", "skip_lesnaya"}, {"sineozernaya", 3, "next_park_pobedy","spec_attention_handrails"}}, + dep = {"next_minskaya", "next_park_pobedy1"}, + odz = "odz2" + }, + { + 121, + "МинÑкаÑ","Minskaya", + arr = {{"minskaya", 3, "next_tsarskiye_vorota", "spec_line3"}, {"minskaya", 3, "next_sineozernaya", "skip_lesnaya"}}, + dep = {"next_tsarskiye_vorota", "next_sineozernaya"}, + odz = "odz1", + arrlast = {"last_minskaya", "last_minskaya"} + }, + { + 122, + "ЦарÑкие ворота","Tsarskiye vorota", + arr = {{"tsarskiye_vorota", 3, "next_mejdustroyskaya"}, {"tsarskiye_vorota", 3, "next_minskaya","spec_attention_politeness"}}, + dep = {"next_mejdustroyskaya1", "next_minskaya"}, + odz = "odz2" + }, + { + 123, + "МеждуÑтройÑкаÑ","Mejdustroyskaya", + arrlast = {"last_mejdustroyskaya"}, + dep = {nil, "next_tsarskiye_vorota"}, + odz = "odz2", + right_doors = true, + } + }, + { + LED = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 1, 1}, + Name = "ИндуÑтриально-Ðвт.Юж.", + Loop = false, + { + 108, + "ÐвтозаводÑкаÑ","Avtozavodskaya", + arrlast = {nil, "last_avtozavodskaya"}, + dep = {"next_industrialnaya"}, + odz = "odz1" + }, + { + 109, + "ИндуÑтриальнаÑ","Industrialnaya", + arr = {{"industrialnaya", 3, "next_moskovskaya","spec_attention_handrails"}, {"industrialnaya", 3, "next_avtozavodskaya","spec_attention_handrails"}}, + dep = {"next_moskovskaya1", "next_avtozavodskaya"}, + odz = "odz2" + }, + { + 110, + "МоÑковÑкаÑ","Moskovskaya", + arr = {{"moskovskaya", 3, "next_oktyabrskaya"}, {"moskovskaya", 3, "next_industrialnaya"}}, + dep = {"next_oktyabrskaya", "next_industrialnaya"}, + odz = "odz1", + right_doors = true, + }, + { + 111, + "ОктÑбрьÑкаÑ","Oktyabrskaya", + arr = {{"oktyabrskaya", 3, "next_ploschad_myra","spec_attention_politeness"}, {"oktyabrskaya", 3, "next_moskovskaya","spec_attention_politeness"}}, + dep = {"next_ploschad_myra", "next_moskovskaya1"}, + odz = "odz1", + arrlast = {"last_oktyabrskaya", "last_oktyabrskaya"} + }, + { + 112, + "Площадь мира","Ploschad myra", + arr = {{"ploschad_myra", 3, "next_novoarmeyskaya"}, {"ploschad_myra", 3, "next_oktyabrskaya"}}, + dep = {"next_novoarmeyskaya", "next_oktyabrskaya"}, + odz = "odz2", + arrlast = {"last_ploschad_myra", "last_ploschad_myra"} + }, + { + 113, + "ÐовоармейÑкаÑ","Novoarmeyskaya", + arr = {{"novoarmeyskaya", 3, "next_vokzalnaya","spec_attention_handrails"}, {"novoarmeyskaya", 3, "next_ploschad_myra"}}, + dep = {"next_vokzalnaya", "next_ploschad_myra"}, + odz = "odz2" + }, + { + 114, + "ВокзальнаÑ","Vokzalnaya", + arr = {{"vokzalnaya", 3, "next_komsomolskaya", "spec_line2"}, {"vokzalnaya", 3, "next_novoarmeyskaya","spec_attention_handrails"}}, + dep = {"next_komsomolskaya1", "next_novoarmeyskaya"}, + odz = "odz1", + arrlast = {"last_vokzalnaya", "last_vokzalnaya"} + }, + { + 115, + "КомÑомольÑкаÑ","Komsomolskaya", + arr = {{"komsomolskaya", 3, "next_elektrosila"}, {"komsomolskaya", 3, "next_vokzalnaya"}}, + dep = {"next_elektrosila", "next_vokzalnaya"}, + odz = "odz1", + arrlast = {"last_komsomolskaya", "last_komsomolskaya"}, + right_doors = true + }, + { + 116, + "ЭлектроÑила","Elektrosila", + arr = {{"elektrosila", 3, "next_teatralnaya_ploschad","spec_attention_handrails"}, {"elektrosila", 3, "next_komsomolskaya", "spec_line2"}}, + dep = {"next_teatralnaya_ploschad", "next_komsomolskaya1"}, + odz = "odz2" + }, + { + 117, + "Театр. площадь","Teatraln. ploschad", + arr = {{"teatralnaya_ploschad", 3, "next_park_pobedy","spec_attention_politeness"}, {"teatralnaya_ploschad", 3, "next_elektrosila","spec_attention_politeness"}}, + dep = {"next_park_pobedy1", "next_elektrosila"}, + odz = "odz1" + }, + { + 118, + "Парк победы","Park pobedy", + arr = {{"park_pobedy", 3, "next_sineozernaya","spec_attention_handrails"}, {"park_pobedy", 3, "next_teatralnaya_ploschad"}}, + dep = {"next_sineozernaya", "next_teatralnaya_ploschad"}, + odz = "odz1", + right_doors = true, + }, + { + 119, + "СинеозёрнаÑ","Sineozernaya", + arr = {{"sineozernaya", 3, "next_minskaya", "skip_lesnaya"}, {"sineozernaya", 3, "next_park_pobedy","spec_attention_handrails"}}, + dep = {"next_minskaya", "next_park_pobedy1"}, + odz = "odz2" + }, + { + 121, + "МинÑкаÑ","Minskaya", + arr = {{"minskaya", 3, "next_tsarskiye_vorota", "spec_line3"}, {"minskaya", 3, "next_sineozernaya", "skip_lesnaya"}}, + dep = {"next_tsarskiye_vorota", "next_sineozernaya"}, + odz = "odz1", + arrlast = {"last_minskaya", "last_minskaya"} + }, + { + 122, + "ЦарÑкие ворота","Tsarskiye vorota", + arr = {{"tsarskiye_vorota", 3, "next_muzey_skulptur"}, {"tsarskiye_vorota", 3, "next_minskaya"}}, + dep = {"next_mejdustroyskaya1", "next_minskaya"}, + odz = "odz2" + }, + { + 321, + "Музей Ñкульптур","Muzey skulptur", + arr = {{"muzey_skulptur", 3, "next_avtostanciya_yujnaya"}, {"muzey_skulptur", 3, "next_tsarskiye_vorota","spec_attention_politeness"}}, + dep = {"next_avtostanciya_yujnaya", "next_tsarskiye_vorota"}, + odz = "odz1" + }, + { + 311, + "ÐвтоÑÑ‚Ð°Ð½Ñ†Ð¸Ñ ÑŽÐ¶Ð½Ð°Ñ","Avtostanciya yujnaya", + arrlast = {"last_avtostanciya_yujnaya"}, + dep = {nil, "next_muzey_skulptur"}, + odz = "odz2" + }, + }, +}) +Metrostroi.SetUPOAnnouncer({ + name = "UPO RHINO", + tone1 = {"subway_announcers/upo/rhino/metrostroi/line1/tone.mp3", 1.2}, + tone2 = {"subway_announcers/upo/rhino/metrostroi/line2/tone.mp3", 1.2}, + click1 = {"subway_announcers/upo/click1.mp3", 0.3}, + click2 = {"subway_announcers/upo/click2.mp3", 0.1}, + avtozavodskaya = {"subway_announcers/upo/rhino/metrostroi/line1/avtozavodskaya.mp3", 1.070100}, + next_avtozavodskaya = {"subway_announcers/upo/rhino/metrostroi/line1/next_avtozavodskaya.mp3", 1.957500}, + last_avtozavodskaya = {"subway_announcers/upo/rhino/metrostroi/line1/last_avtozavodskaya.mp3", 10.100700}, + industrialnaya = {"subway_announcers/upo/rhino/metrostroi/line1/industrialnaya.mp3", 1.017900}, + next_industrialnaya = {"subway_announcers/upo/rhino/metrostroi/line1/next_industrialnaya.mp3", 1.983600}, + moskovskaya = {"subway_announcers/upo/rhino/metrostroi/line1/moskovskaya.mp3", 0.730800}, + next_moskovskaya = {"subway_announcers/upo/rhino/metrostroi/line1/next_moskovskaya.mp3", 3.158100}, + next_moskovskaya1 = {"subway_announcers/upo/rhino/metrostroi/line1/next_moskovskaya1.mp3", 1.800900}, + oktyabrskaya = {"subway_announcers/upo/rhino/metrostroi/line1/oktyabrskaya.mp3", 0.887400}, + next_oktyabrskaya = {"subway_announcers/upo/rhino/metrostroi/line1/next_oktyabrskaya.mp3", 1.853100}, + last_oktyabrskaya = {"subway_announcers/upo/rhino/metrostroi/line1/last_oktyabrskaya.mp3", 10.074600}, + ploschad_myra = {"subway_announcers/upo/rhino/metrostroi/line1/ploschad_myra.mp3", 0.835200}, + next_ploschad_myra = {"subway_announcers/upo/rhino/metrostroi/line1/next_ploschad_myra.mp3", 1.879200}, + last_ploschad_myra = {"subway_announcers/upo/rhino/metrostroi/line1/last_ploschad_myra.mp3", 10.283400}, + novoarmeyskaya = {"subway_announcers/upo/rhino/metrostroi/line1/novoarmeyskaya.mp3", 0.809100}, + next_novoarmeyskaya = {"subway_announcers/upo/rhino/metrostroi/line1/next_novoarmeyskaya.mp3", 1.879200}, + vokzalnaya = {"subway_announcers/upo/rhino/metrostroi/line1/vokzalnaya.mp3", 0.783000}, + next_vokzalnaya = {"subway_announcers/upo/rhino/metrostroi/line1/next_vokzalnaya.mp3", 1.748700}, + last_vokzalnaya = {"subway_announcers/upo/rhino/metrostroi/line1/last_vokzalnaya.mp3", 9.865800}, + komsomolskaya = {"subway_announcers/upo/rhino/metrostroi/line1/komsomolskaya.mp3", 0.887400}, + next_komsomolskaya = {"subway_announcers/upo/rhino/metrostroi/line1/next_komsomolskaya.mp3", 3.340800}, + next_komsomolskaya1 = {"subway_announcers/upo/rhino/metrostroi/line1/next_komsomolskaya1.mp3", 1.879200}, + last_komsomolskaya = {"subway_announcers/upo/rhino/metrostroi/line1/last_komsomolskaya.mp3", 11.327400}, + elektrosila = {"subway_announcers/upo/rhino/metrostroi/line1/elektrosila.mp3", 0.835200}, + next_elektrosila = {"subway_announcers/upo/rhino/metrostroi/line1/next_elektrosila.mp3", 2.009700}, + teatralnaya_ploschad = {"subway_announcers/upo/rhino/metrostroi/line1/teatralnaya_ploschad.mp3", 1.122300}, + next_teatralnaya_ploschad = {"subway_announcers/upo/rhino/metrostroi/line1/next_teatralnaya_ploschad.mp3", 2.192400}, + park_pobedy = {"subway_announcers/upo/rhino/metrostroi/line1/park_pobedy.mp3", 0.809100}, + next_park_pobedy = {"subway_announcers/upo/rhino/metrostroi/line1/next_park_pobedy.mp3", 3.340800}, + next_park_pobedy1 = {"subway_announcers/upo/rhino/metrostroi/line1/next_park_pobedy1.mp3", 1.853100}, + sineozernaya = {"subway_announcers/upo/rhino/metrostroi/line1/sineozernaya.mp3", 0.887400}, + next_sineozernaya = {"subway_announcers/upo/rhino/metrostroi/line1/next_sineozernaya.mp3", 1.957500}, + skip_lesnaya = {"subway_announcers/upo/rhino/metrostroi/line1/skip_lesnaya.mp3", 4.202100}, + minskaya = {"subway_announcers/upo/rhino/metrostroi/line1/minskaya.mp3", 0.626400}, + next_minskaya = {"subway_announcers/upo/rhino/metrostroi/line1/next_minskaya.mp3", 1.644300}, + last_minskaya = {"subway_announcers/upo/rhino/metrostroi/line1/last_minskaya.mp3", 10.100700}, + tsarskiye_vorota = {"subway_announcers/upo/rhino/metrostroi/line1/tsarskiye_vorota.mp3", 1.044000}, + next_tsarskiye_vorota = {"subway_announcers/upo/rhino/metrostroi/line1/next_tsarskiye_vorota.mp3", 1.983600}, + mejdustroyskaya = {"subway_announcers/upo/rhino/metrostroi/line1/mejdustroyskaya.mp3", 0.965700}, + next_mejdustroyskaya = {"subway_announcers/upo/rhino/metrostroi/line1/next_mejdustroyskaya.mp3", 3.445200}, + next_mejdustroyskaya1 = {"subway_announcers/upo/rhino/metrostroi/line1/next_mejdustroyskaya1.mp3", 2.088000}, + last_mejdustroyskaya = {"subway_announcers/upo/rhino/metrostroi/line1/last_mejdustroyskaya.mp3", 11.353500}, + muzey_skulptur = {"subway_announcers/upo/rhino/metrostroi/line1/muzey_skulptur.mp3", 0.939600}, + next_muzey_skulptur = {"subway_announcers/upo/rhino/metrostroi/line1/next_muzey_skulptur.mp3", 1.957500}, + avtostanciya_yujnaya = {"subway_announcers/upo/rhino/metrostroi/line1/avtostanciya_yujnaya.mp3", 1.331100}, + next_avtostanciya_yujnaya = {"subway_announcers/upo/rhino/metrostroi/line1/next_avtostanciya_yujnaya.mp3", 2.401200}, + last_avtostanciya_yujnaya = {"subway_announcers/upo/rhino/metrostroi/line1/last_avtostanciya_yujnaya.mp3", 10.283400}, + spec_attention_handrails = {"subway_announcers/upo/rhino/metrostroi/line2/spec_attention_handrails.mp3", 3.967200}, + spec_attention_politeness = {"subway_announcers/upo/rhino/metrostroi/line2/spec_attention_politeness.mp3", 5.533200}, + spec_line1 = {"subway_announcers/upo/rhino/metrostroi/line1/spec_line1.mp3", 1.618200}, + spec_line2 = {"subway_announcers/upo/rhino/metrostroi/line1/spec_line2.mp3", 1.513800}, + spec_line3 = {"subway_announcers/upo/rhino/metrostroi/line1/spec_line3.mp3", 1.618200}, + odz = {"subway_announcers/upo/rhino/metrostroi/line1/odz.mp3",2.02}, + + akademicheskaya = {"subway_announcers/upo/rhino/metrostroi/line2/akademicheskaya.mp3", 0.965700}, + next_akademicheskaya = {"subway_announcers/upo/rhino/metrostroi/line2/next_akademicheskaya.mp3", 3.184200}, + next_akademicheskaya1 = {"subway_announcers/upo/rhino/metrostroi/line2/next_akademicheskaya1.mp3", 1.800900}, + sokol = {"subway_announcers/upo/rhino/metrostroi/line2/sokol.mp3", 0.574200}, + next_sokol = {"subway_announcers/upo/rhino/metrostroi/line2/next_sokol.mp3", 1.539900}, + ohotniy_ryad = {"subway_announcers/upo/rhino/metrostroi/line2/ohotniy_ryad.mp3", 0.861300}, + next_ohotniy_ryad = {"subway_announcers/upo/rhino/metrostroi/line2/next_ohotniy_ryad.mp3", 3.419100}, + next_ohotniy_ryad1 = {"subway_announcers/upo/rhino/metrostroi/line2/next_ohotniy_ryad1.mp3", 1.853100}, + kirovskaya = {"subway_announcers/upo/rhino/metrostroi/line2/kirovskaya.mp3", 0.704700}, + next_kirovskaya = {"subway_announcers/upo/rhino/metrostroi/line2/next_kirovskaya.mp3", 1.722600}, + profsoyuznaya = {"subway_announcers/upo/rhino/metrostroi/line2/profsoyuznaya.mp3", 0.913500}, + next_profsoyuznaya = {"subway_announcers/upo/rhino/metrostroi/line2/next_profsoyuznaya.mp3", 1.827000}, + last_profsoyuznaya = {"subway_announcers/upo/rhino/metrostroi/line2/last_profsoyuznaya.mp3", 9.944100}, + leninskaya = {"subway_announcers/upo/rhino/metrostroi/line2/leninskaya.mp3", 0.835200}, + next_leninskaya = {"subway_announcers/upo/rhino/metrostroi/line2/next_leninskaya.mp3", 1.722600}, + last_leninskaya = {"subway_announcers/upo/rhino/metrostroi/line2/last_leninskaya.mp3", 9.761400}, + derjavinskaya = {"subway_announcers/upo/rhino/metrostroi/line2/derjavinskaya.mp3", 0.939600}, + next_derjavinskaya = {"subway_announcers/upo/rhino/metrostroi/line2/next_derjavinskaya.mp3", 1.800900}, + last_derjavinskaya = {"subway_announcers/upo/rhino/metrostroi/line2/last_derjavinskaya.mp3", 10.022400}, + spec_attention_handrails_2 = {"subway_announcers/upo/rhino/metrostroi/line2/spec_attention_handrails.mp3", 3.967200}, + spec_attention_politeness_2 = {"subway_announcers/upo/rhino/metrostroi/line2/spec_attention_politeness.mp3", 5.533200}, + spec_line1_2 = {"subway_announcers/upo/rhino/metrostroi/line2/spec_line1.mp3", 1.618200}, + spec_line2_2 = {"subway_announcers/upo/rhino/metrostroi/line2/spec_line2.mp3", 1.513800}, + spec_line3_2 = {"subway_announcers/upo/rhino/metrostroi/line2/spec_line3.mp3", 1.618200}, + odz1 = {"subway_announcers/upo/rhino/metrostroi/line2/odz1.mp3", 2.088000 + 0.3}, + odz2 = {"subway_announcers/upo/rhino/metrostroi/line2/odz2.mp3", 2.192400 + 0.3} +},{ + { + 108, + "ÐвтозаводÑкаÑ", + arrlast = {nil, "last_avtozavodskaya"}, + dep = {"odz"}, + tone = "tone1", dist = 70, + noises = {1,2,3},noiserandom = 0.2, + }, + { + 109, + "ИндуÑтриальнаÑ", + arr = {{"industrialnaya", 0.5, "next_moskovskaya","spec_attention_handrails"}, {"industrialnaya", 0.5, "next_avtozavodskaya","spec_attention_handrails"}}, + dep = {"odz", "odz"}, + tone = "tone1", dist = 75, + noises = {1,2,3},noiserandom = 0.1, + }, + { + 110, + "МоÑковÑкаÑ", + arr = {{"moskovskaya", 0.5, "next_oktyabrskaya"}, {"moskovskaya", 0.5, "next_industrialnaya"}}, + dep = {"odz", "odz"}, + tone = "tone1", dist = 85, + noises = {2,3},noiserandom = 0.2, + }, + { + 111, + "ОктÑбрьÑкаÑ", + arr = {{"oktyabrskaya", 0.5, "next_ploschad_myra","spec_attention_politeness"}, {"oktyabrskaya", 0.5, "next_moskovskaya","spec_attention_politeness"}}, + dep = {"odz", "odz"}, + tone = "tone1", dist = 60, + noises = {1,2,3},noiserandom = 0.1, + }, + { + 112, + "Площадь мира", + arr = {{"ploschad_myra", 0.5, "next_novoarmeyskaya"}, {"ploschad_myra", 0.5, "next_oktyabrskaya"}}, + dep = {"odz", "odz"}, + tone = "tone1", dist = 80, + noises = {1,2},noiserandom = 0.3, + }, + { + 113, + "ÐовоармейÑкаÑ", + arr = {{"novoarmeyskaya", 0.5, "next_vokzalnaya","spec_attention_handrails"}, {"novoarmeyskaya", 0.5, "next_ploschad_myra"}}, + dep = {"odz", "odz"}, + tone = "tone1", dist = 60, + noises = {1,2,3},noiserandom = 0.2, + }, + { + 114, + "ВокзальнаÑ", + arr = {{"vokzalnaya", 0.5, "next_komsomolskaya", "spec_line2"}, {"vokzalnaya", 0.5, "next_novoarmeyskaya","spec_attention_handrails"}}, + dep = {"odz", "odz"}, + tone = "tone1", dist = 55, + noises = {1,3},noiserandom = 0.4, + }, + { + 115, + "КомÑомольÑкаÑ", + arr = {{"komsomolskaya", 0.5, "next_elektrosila"}, {"komsomolskaya", 0.5, "next_vokzalnaya"}}, + dep = {"odz", "odz"}, + tone = "tone1", dist = 40, + noises = {1,2,3},noiserandom = 0.4, + }, + { + 116, + "ЭлектроÑила", + arr = {{"elektrosila", 0.5, "next_teatralnaya_ploschad","spec_attention_handrails"}, {"elektrosila", 0.5, "next_komsomolskaya", "spec_line2"}}, + dep = {"odz", "odz"}, + tone = "tone1", dist = 65, + noises = {1,2,3},noiserandom = 0.2, + }, + { + 117, + "Театр. площадь", + arr = {{"teatralnaya_ploschad", 0.5, "next_park_pobedy","spec_attention_politeness"}, {"teatralnaya_ploschad", 0.5, "next_elektrosila","spec_attention_politeness"}}, + dep = {"odz", "odz"}, + tone = "tone1", dist = 80, + noises = {3},noiserandom = 0.1, + }, + { + 118, + "Парк победы", + arr = {{"park_pobedy", 0.5, "next_sineozernaya","spec_attention_handrails"}, {"park_pobedy", 0.5, "next_teatralnaya_ploschad"}}, + dep = {"odz", "odz"}, + tone = "tone1", dist = 60, + noises = {2},noiserandom = 0.3, + }, + { + 119, + "СинеозёрнаÑ", + arr = {{"sineozernaya", 0.5, "next_minskaya", "skip_lesnaya"}, {"sineozernaya", 0.5, "next_park_pobedy","spec_attention_handrails"}}, + dep = {"odz", "odz"}, + tone = "tone1", dist = 75, + noises = {1,3},noiserandom = 0.2, + }, + { + 121, + "МинÑкаÑ", + arr = {{"minskaya", 0.5, "next_tsarskiye_vorota"}, {"minskaya", 0.5, "next_sineozernaya", "skip_lesnaya"}}, + dep = {"odz", "odz"}, + tone = "tone1", dist = 75, + noises = {1},noiserandom = 0.4, + }, + { + 122, + "ЦарÑкие ворота", + arr = {{"tsarskiye_vorota"}, {"tsarskiye_vorota", 0.5, "next_minskaya","spec_attention_politeness"}}, + dep = {"odz", "odz"}, + tone = "tone1", dist = 75, + noises = {1,2,3},noiserandom = 0.5, + }, + { + 123, + "МеждуÑтройÑкаÑ", + arrlast = {"last_mejdustroyskaya"}, + dep = {nil, "odz"}, + tone = "tone1", dist = 40, + }, + + + { + 321, + "Музей Ñкульптур", + arr = {{"muzey_skulptur", 0.5, "next_avtostanciya_yujnaya"}, {"muzey_skulptur", 0.5, "next_tsarskiye_vorota"}}, + dep = {"odz", "odz"}, + tone = "tone1", dist = 65, + noises = {1,3},noiserandom = 0.1, + }, + { + 322, + "ÐвтоÑтан. юж.", + arrlast = {"last_avtostanciya_yujnaya"}, + dep = {nil, "odz"}, + tone = "tone1", dist = 65, + noises = {1,3},noiserandom = 0.1, + }, + + + { + 210, + "ÐкадемичеÑкаÑ", + arrlast = {nil, "last_akademicheskaya"}, + dep = {{"odz1","next_sokol"}}, + tone = "tone2", dist = 40, + noises = {2,3},noiserandom = 0.1, + }, + { + 211, + "Сокол", + arr = {{"sokol", 3, "next_ohotniy_ryad","spec_attention_handrails_2"}, {"sokol", 3, "next_akademicheskaya"}}, + dep = {{"odz2","next_ohotniy_ryad1"},{"odz1","next_akademicheskaya1"}}, + tone = "tone2", dist = 40, + noises = {1,2},noiserandom = 0.20, + }, + { + 212, + "Охотный Ñ€Ñд", + arr = {{"ohotniy_ryad", 3, "next_kirovskaya"}, {"ohotniy_ryad", 3, "next_sokol","spec_attention_politeness_2"}}, + dep = {{"odz1","next_kirovskaya"},{"odz2","next_sokol"}}, + tone = "tone2", dist = 40, + noises = {1,2,3},noiserandom = 0.17, + }, + { + 213, + "КировÑкаÑ", + arr = {{"kirovskaya", 3, "next_profsoyuznaya","spec_attention_politeness_2"}, {"kirovskaya", 3, "next_ohotniy_ryad","spec_attention_handrails_2"}}, + dep = {{"odz2","next_profsoyuznaya"},{"odz2","next_ohotniy_ryad1"}}, + tone = "tone2", dist = 40, + noises = {2,3},noiserandom = 0.03, + }, + { + 214, + "ПрофÑоюзнаÑ", + arr = {{"profsoyuznaya", 3, "next_leninskaya", "spec_line1_2"}, {"profsoyuznaya", 3, "next_kirovskaya"}}, + dep = {{"odz1","next_leninskaya"},{"odz1","next_kirovskaya"}}, + tone = "tone2", dist = 40, + }, + { + 215, + "ЛенинÑкаÑ", + arr = {{"leninskaya", 3, "next_derjavinskaya","spec_attention_handrails_2"}, {"leninskaya", 3, "next_profsoyuznaya","spec_attention_politeness_2"}}, + dep = {{"odz1","next_derjavinskaya"},{"odz2","next_profsoyuznaya"}}, + tone = "tone2", dist = 40, + noises = {1,3},noiserandom = 0.05, + }, + { + 216, + "ДержавинÑкаÑ", + arrlast = {"last_derjavinskaya"}, + dep = {nil, {"odz2","next_leninskaya"}}, + tone = "tone2", dist = 40, + noises = {1,2},noiserandom = 0.05, + } +}) +Metrostroi.StationSound = { + {"subway_stations/announces/b50/metrostroi_1.mp3",45.531375}, + {"subway_stations/announces/b50/metrostroi_2.mp3",41.848125}, + {"subway_stations/announces/b50/metrostroi_3.mp3",27.036688}, + {"subway_stations/announces/b50/metrostroi_4.mp3",53.524875}, + {"subway_stations/announces/b50/metrostroi_5.mp3",35.709375}, + {"subway_stations/announces/b50/metrostroi_6.mp3",47.777938}, +} +Metrostroi.StationConfigurations = { + [108] = + { + names = {"автозаводÑкаÑ","Avtozavodskaya"}, + positions = { + {Vector(4820.791992, 5585.694336, -1603.769043),Angle(0,0,0)}, + } + }, + [109] = + { + names = {"индуÑтриальнаÑ","Industrialnaya"}, + positions = { + {Vector(-15276.645508, 6032.157715, 640),Angle(0,0,0)}, + } + }, + [110] = + { + names = {"моÑковÑкаÑ","Moskovskaya"}, + positions = { + {Vector(7205.387695, 7826.301758, 235.031235),Angle(0,0,0)}, + } + }, + [111] = + { + names = {"октÑбрьÑкаÑ","Oktyabrskaya"}, + positions = { + {Vector(14950.475586, 929.608032, -345.968750),Angle(0,0,0)}, + } + }, + [112] = + { + names = {"площадь мира","Ploschad myra"}, + positions = { + {Vector(8964.811523, -1026.779419, -2196.968750),Angle(0,0,0)}, + } + }, + [113] = + { + names = {"новоармейÑкаÑ","Novoarmeyskaya"}, + positions = { + {Vector(519.362549, -1849.162720, -2708.968750),Angle(0,0,0)}, + } + }, + [114] = + { + names = {"вокзальнаÑ","Vokzalnaya"}, + positions = { + {Vector(-10384.938477, -769.048767, -2708.968750),Angle(0,0,0)}, + } + }, + [115] = + { + names = {"комÑомольÑкаÑ","Komsomolskaya"}, + positions = { + {Vector(-10550.576172, -2059.577148, -3732.968750),Angle(0,0,0)}, + } + }, + [116] = + { + names = {"ÑлектроÑила","Elektrosila"}, + positions = { + {Vector(7315.029785, -1850.208008, -4244.968750),Angle(0,0,0)}, + } + }, + [117] = + { + names = {"Ñ‚ÐµÐ°Ñ‚Ñ€Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ð»Ð¾Ñ‰Ð°Ð´ÑŒ","Teatralnaya ploschad"}, + positions = { + {Vector(-372.223755, -15192.013672, -4757.968750),Angle(0,0,0)}, + } + }, + [118] = + { + names = {"парк победы","Park pobedy"}, + positions = { + {Vector(-898.368103, -2030.919312, -7456.968750),Angle(0,0,0)}, + } + }, + [119] = + { + names = {"ÑинеозёрнаÑ","Sineozernaya"}, + positions = { + {Vector(-3195.315430, 9382.029297, -8467.968750),Angle(0,0,0)}, + } + }, + [121] = + { + names = {"минÑкаÑ","Minskaya"}, + positions = { + {Vector(-7236.259277, 632.344849, -10355),Angle(0,0,0)}, + } + }, + [122] = + { + names = {"царÑкие ворота","Tsarskiye vorota"}, + positions = { + {Vector(-1507.229248, 14172.663086, -14281.968750),Angle(0,0,0)}, + } + }, + [123] = + { + names = {"междуÑтройÑкаÑ","Mejdustroyskaya"}, + positions = { + {Vector(15273.905273, 1011.733582, -16056.282227),Angle(0,0,0)}, + } + }, + [321] = + { + names = {"музей Ñкульптур","muzey skulptur","museum"}, + positions = { + {Vector(1514.049316, -10277.442383, -14801.968750),Angle(0,0,0)}, + } + }, + [322] = + { + names = {"автоÑÑ‚Ð°Ð½Ñ†Ð¸Ñ ÑŽÐ¶Ð½Ð°Ñ","Autostanciya yujnaya","autostation"}, + positions = { + {Vector(7203.874512, -3788.718506, -13259.068359),Angle(0,0,0)}, + } + }, + [210] = + { + names = {"академичеÑкаÑ","Akademicheskaya"}, + positions = { + {Vector(0,0,0),Angle(0,0,0)}, + } + }, + [211] = + { + names = {"Ñокол","Sokol"}, + positions = { + {Vector(671,3219,-12741),Angle(0,0,0)}, + } + }, + [212] = + { + names = {"охотный Ñ€Ñд","Ohotniy ryad"}, + positions = { + {Vector(15487,4007,-12741),Angle(0,0,0)}, + } + }, + [213] = + { + names = {"кировÑкаÑ","Kirovskaya"}, + positions = { + {Vector(-2588,5431,-11109),Angle(0,0,0)}, + } + }, + [214] = + { + names = {"профÑоюзнаÑ","Profsoyuznaya"}, + positions = { + {Vector(-3219,6296 -8975),Angle(0,0,0)}, + } + }, + [215] = + { + names = {"ленинÑкаÑ","Leninskaya"}, + positions = { + {Vector(-9390,2248,-5318),Angle(0,0,0)}, + } + }, + [216] = + { + names = {"державинÑкаÑ","Derjavinskaya"}, + positions = { + {Vector(0,0,0),Angle(0,0,0)}, + } + }, + + depot = { + names = {"депо"}, + positions = { + {Vector(-3049.407959, -5360.429688, -11565.102539),Angle(0,0,0)}, + } + } +} \ No newline at end of file diff --git a/lua/metrostroi/maps/crimson.lua b/lua/metrostroi/maps/crimson.lua new file mode 100644 index 0000000..7fb9aae --- /dev/null +++ b/lua/metrostroi/maps/crimson.lua @@ -0,0 +1,41 @@ +local Map = game.GetMap():lower() or "" + +if Map:find("gm_mus_crimson") and not Map:find("tox") then + Metrostroi.PlatformMap = "crimson" + Metrostroi.CurrentMap = "gm_orange_crimson" +else + return +end +Metrostroi.Skins["717_schemes"]["p"] = { + adv = "metrostroi_skins/81-717_schemes/int_orange_spb_adv", + clean = "metrostroi_skins/81-717_schemes/int_orange_spb_clean", +} +Metrostroi.Skins["717_schemes"]["m"] = { + adv = "metrostroi_skins/81-717_schemes/int_orange_msk_adv", + clean = "metrostroi_skins/81-717_schemes/int_orange_msk_noadv", +} + +Metrostroi.AnnouncementsSarmatUPO = { + { + name = "UPO RHINO", + tone = {"subway_announcers/sarmat_upo/tone.mp3",1}, + aeroport = {"subway_announcers/sarmat_upo/rhino/crimson/aeroport.mp3",0.835200}, + brateevo = {"subway_announcers/sarmat_upo/rhino/crimson/brateevo.mp3",0.730800}, + fauna = {"subway_announcers/sarmat_upo/rhino/crimson/fauna.mp3",0.652500}, + last_pionerskaya = {"subway_announcers/sarmat_upo/rhino/crimson/last_pionerskaya.mp3",9.865800}, + metrostroiteley = {"subway_announcers/sarmat_upo/rhino/crimson/metrostroiteley.mp3",1.070100}, + next_aeroport = {"subway_announcers/sarmat_upo/rhino/crimson/next_aeroport.mp3",1.879200}, + next_brateevo = {"subway_announcers/sarmat_upo/rhino/crimson/next_brateevo.mp3",1.774800}, + next_fauna = {"subway_announcers/sarmat_upo/rhino/crimson/next_fauna.mp3",1.592100}, + next_metrostroiteley = {"subway_announcers/sarmat_upo/rhino/crimson/next_metrostroiteley.mp3",2.088000}, + next_pionerskaya = {"subway_announcers/sarmat_upo/rhino/crimson/next_pionerskaya.mp3",3.210300}, + next_pionerskaya1 = {"subway_announcers/sarmat_upo/rhino/crimson/next_pionerskaya1.mp3",1.879200}, + next_stalinskaya = {"subway_announcers/sarmat_upo/rhino/crimson/next_stalinskaya.mp3",1.748700}, + odz1 = {"subway_announcers/sarmat_upo/rhino/crimson/odz1.mp3",2.088000}, + odz2 = {"subway_announcers/sarmat_upo/rhino/crimson/odz2.mp3",2.192400}, + spec_attention_handrails = {"subway_announcers/sarmat_upo/rhino/crimson/spec_attention_handrails.mp3",3.967200}, + spec_attention_politeness = {"subway_announcers/sarmat_upo/rhino/crimson/spec_attention_politeness.mp3",5.533200}, + spec_line3 = {"subway_announcers/sarmat_upo/rhino/crimson/spec_line3.mp3",1.957500}, + stalinskaya = {"subway_announcers/sarmat_upo/rhino/crimson/stalinskaya.mp3",0.835200}, + } +} diff --git a/lua/metrostroi/maps/crossline.lua b/lua/metrostroi/maps/crossline.lua new file mode 100644 index 0000000..a174261 --- /dev/null +++ b/lua/metrostroi/maps/crossline.lua @@ -0,0 +1,854 @@ +local Map = game.GetMap():lower() or "" +if Map:find("gm_metro_crossline_c") then + Metrostroi.PlatformMap = "gm_metro_crossline" + Metrostroi.CurrentMap = "gm_metro_crossline" +else + return +end +Metrostroi.AddPassSchemeTex("717_new","1 Line",{ + "models/metrostroi_schemes/map_1", +}) +Metrostroi.AddPassSchemeTex("720","Crossline",{ + "metrostroi_skins/81-720_schemes/crossline", + "metrostroi_skins/81-720_schemes/crossliner", +}) +Metrostroi.AddPassSchemeTex("722","Crossline",{ + "metrostroi_skins/81-722_schemes/crossline", + "metrostroi_skins/81-722_schemes/crossliner", +}) +Metrostroi.AddLastStationTex("702",110,"models/metrostroi_schemes/destination_table_black/label_mezhdunarodnaya") +Metrostroi.AddLastStationTex("702",115,"models/metrostroi_schemes/destination_table_black/label_oktyabrskaya") +Metrostroi.AddLastStationTex("702",116,"models/metrostroi_schemes/destination_table_black/label_rechnaya") +Metrostroi.AddLastStationTex("702",117,"models/metrostroi_schemes/destination_table_black/label_proletarskaya") +Metrostroi.AddLastStationTex("710",110,"models/metrostroi_schemes/destination_table_white/label_mezhdunarodnaya") +Metrostroi.AddLastStationTex("710",115,"models/metrostroi_schemes/destination_table_white/label_oktyabrskaya") +Metrostroi.AddLastStationTex("710",116,"models/metrostroi_schemes/destination_table_white/label_rechnaya") +Metrostroi.AddLastStationTex("710",117,"models/metrostroi_schemes/destination_table_white/label_proletarskaya") +Metrostroi.AddLastStationTex("717",110,"models/metrostroi_schemes/destination_table_white/label_mezhdunarodnaya") +Metrostroi.AddLastStationTex("717",115,"models/metrostroi_schemes/destination_table_white/label_oktyabrskaya") +Metrostroi.AddLastStationTex("717",116,"models/metrostroi_schemes/destination_table_white/label_rechnaya") +Metrostroi.AddLastStationTex("717",117,"models/metrostroi_schemes/destination_table_white/label_proletarskaya") +Metrostroi.AddLastStationTex("720",110,"models/metrostroi_schemes/destination_table_white/label_mezhdunarodnaya") +Metrostroi.AddLastStationTex("720",115,"models/metrostroi_schemes/destination_table_white/label_oktyabrskaya") +Metrostroi.AddLastStationTex("720",116,"models/metrostroi_schemes/destination_table_white/label_rechnaya") +Metrostroi.AddLastStationTex("720",117,"models/metrostroi_schemes/destination_table_white/label_proletarskaya") +Metrostroi.TickerAdverts = { + "МЕТРОПОЛИТЕРИМЕÐИ ГÐРРИ ÐЬЮМÐÐРПРИГЛÐШÐЕТ ÐРРÐБОТУ РЕÐЛЬÐЕ МÐФЕÐЕСТОВ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,ТЕЛЕФОРДЛЯ СПРÐВОК 8 (800) 555-35-35", + "УВÐЖÐЕМЫЕ ПÐССÐЖИРЫ, ПРИ ВЫХОДЕ ИЗ ПОЕЗДÐ, ÐЕ ЗÐБЫВÐЙТЕ СВОИ ВЕЩИ", + "ЭЛЕКТРОДЕПО КРОССЛÐЙÐРПРИГЛÐШÐЕТ ÐРРÐБОТУ МОДЕЛЕРОВ ДЛЯ ПОСТРОЙКИ ЭЛЕКТРОДЕПО", + "СТÐÐЦИЯ РЕЧÐÐЯ ПРИГЛÐШÐЕТ ÐРРÐБОТУ МÐШИÐИСТОВ И ПОМОЩÐИКОВ МÐШИÐИСТРЭСКÐЛÐТОРÐ. ОПЛÐТР5 КУСОЧКОВ ÐОМЕРÐОГО.", + "ЭЛЕКТРОДЕПО КРОССЛÐЙРПРИГЛÐШÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВССССССССССССССССССССССССССССССССССССССССССССССССС", + ".", + "ЪЪъъЪЪЪъЪЪЪЪъъъЪЪЪЪЪъъЪЪъъЪЪЪъъЪЪъЪЪъЪъъЪЪЪЪъъъЪЪъъЪЪЪЪЪъъЪЪъъЪъЪЪЪЪЪъЪЪЪЪъъЪЪЪЪЪъъъЪЪъ", +} + + +Metrostroi.AddANSPAnnouncer("ASNP Boiko + Pyaseckaya",{ + asnp = true, + + click1 = {"subway_announcers/asnp/boiko_new/click1.mp3",0.5}, + click2 = {"subway_announcers/asnp/boiko_new/click2.mp3",0.3}, + click3 = {"subway_announcers/asnp/boiko_new/click3.mp3",0.3}, + click_start = {"subway_announcers/asnp/boiko_new/click1.mp3",0.5}, + click_end = {"subway_announcers/asnp/boiko_new/click3.mp3",0.3}, + + + announcer_ready = {"subway_announcers/asnp/boiko_new/announcer_ready.mp3",3.295479}, + doors_closing_m = {"subway_announcers/asnp/boiko_new/doors_closing.mp3",3.782542}, + deadlock_m = {"subway_announcers/asnp/boiko_new/spec_attention_deadlock.mp3",9.352500}, + exit_m = {"subway_announcers/asnp/boiko_new/spec_attention_exit.mp3",5.363563}, + handrails_m = {"subway_announcers/asnp/boiko_new/spec_attention_handrails.mp3",4.221854}, + last_m = {"subway_announcers/asnp/boiko_new/spec_attention_last.mp3",4.425625}, + objects_m = {"subway_announcers/asnp/boiko_new/spec_attention_objects.mp3",4.674771}, + politeness_m = {"subway_announcers/asnp/boiko_new/spec_attention_politeness.mp3",9.057104}, + things_m = {"subway_announcers/asnp/boiko_new/spec_attention_things.mp3",4.559146}, + train_depeat_m = {"subway_announcers/asnp/boiko_new/spec_attention_train_depeat.mp3",4.633417}, + train_stop_m = {"subway_announcers/asnp/boiko_new/spec_attention_train_stop.mp3",6.501979}, + station_m = {"subway_announcers/asnp/boiko_new/station.mp3",0.943438}, + train_goes_to_m = {"subway_announcers/asnp/boiko_new/train_goes_to.mp3",2.077708}, + + kirovskaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/kirovskaya.mp3",0.883667}, + mejdunarodnaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/mejdunarodnaya.mp3",1.206667}, + molodejnaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/molodejnaya.mp3",1.112917}, + nahimovskaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/nahimovskaya.mp3",1.097292}, + oktyabrskaya_arr_m = {"subway_announcers/asnp/boiko_new/crossline/1/oktyabrskaya_arr.mp3",5.656979}, + oktyabrskaya_next_m = {"subway_announcers/asnp/boiko_new/crossline/1/oktyabrskaya_next.mp3",1.124083}, + olimpiyskaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/olimpiyskaya.mp3",1.081750}, + park_kultury_m = {"subway_announcers/asnp/boiko_new/crossline/1/park_kultury.mp3",1.142833}, + politehnicheskaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/politehnicheskaya.mp3",1.269479}, + politehnicheskaya_arr_m = {"subway_announcers/asnp/boiko_new/crossline/1/politehnicheskaya_arr.mp3",4.657938}, + politehnicheskaya_next_m = {"subway_announcers/asnp/boiko_new/crossline/1/politehnicheskaya_next.mp3",2.674708}, + proletarskaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/proletarskaya.mp3",1.060521}, + prospekt_suvorova_m = {"subway_announcers/asnp/boiko_new/crossline/1/prospekr_suvorova.mp3",1.244667}, + rechnaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/rechnaya.mp3",2.090708}, + rechnaya_arr_m = {"subway_announcers/asnp/boiko_new/crossline/1/rechnaya_arr.mp3",2.090708}, + spec_attention_politehnicheskaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/spec_attention_politehnicheskaya.mp3",10.516479}, + spec_attention_rechnaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/spec_attention_rechnaya.mp3",8.791000}, + kalininskaya_m = {"subway_announcers/asnp/boiko_new/crossline/2/kalininskaya.mp3",0.996938}, + pionerskaya_m = {"subway_announcers/asnp/boiko_new/crossline/2/pionerskaya.mp3",0.916688}, + politehnicheskaya2_arr_m = {"subway_announcers/asnp/boiko_new/crossline/2/politehnicheskaya_arr.mp3",3.165667}, + politehnicheskaya2_next_m = {"subway_announcers/asnp/boiko_new/crossline/2/politehnicheskaya_next.mp3",1.224833}, + timerazevskaya_m = {"subway_announcers/asnp/boiko_new/crossline/2/timerazevskaya.mp3",1.060000}, + vokzalnaya_arr_m = {"subway_announcers/asnp/boiko_new/crossline/2/vokzalnaya_arr.mp3",4.609771}, + vokzalnaya_next_m = {"subway_announcers/asnp/boiko_new/crossline/2/vokzalnaya_next.mp3",2.498896}, + + + doors_closing_f = {"subway_announcers/asnp/pyaseckaya/doors_closing.mp3",2.340813}, + deadlock_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_deadlock.mp3",10.501979}, + exit_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_exit.mp3",5.111104}, + handrails_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_handrails.mp3",4.675083}, + last_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_last.mp3",4.878542}, + objects_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_objects.mp3",5.323146}, + politeness_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_politeness.mp3",10.685375}, + things_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_things.mp3",5.144021}, + train_depeat_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_train_depeat.mp3",4.481875}, + train_stop_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_train_stop.mp3",6.395313}, + + + arr_kirovskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_kirovskaya.mp3",1.987917}, + arr_mejdunarodnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_mejdunarodnaya.mp3",2.185542}, + arr_molodejnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_molodejnaya.mp3",2.093146}, + arr_nahimovskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_nahimovskaya.mp3",2.171021}, + arr_oktyabrskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_oktyabrskaya.mp3",6.757750}, + arr_olimpiyskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_olimpiyskaya.mp3",2.338708}, + arr_park_kultury_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_park_kultury.mp3",2.171104}, + arr_politehnicheskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_politehnicheskaya_old.mp3",6.295417}, + arr_proletarskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_proletarskaya.mp3",2.334667}, + arr_prospekt_suvorova_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_prospekt_suvorova.mp3",2.538375}, + arr_rechnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_rechnaya.mp3",3.408208}, + mejdunarodnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/mejdunarodnaya.mp3",1.275063}, + molodejnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/molodejnaya.mp3",1.196188}, + next_kirovskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_kirovskaya.mp3",2.771500}, + next_mejdunarodnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_mejdunarodnaya.mp3",2.947417}, + next_molodejnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_molodejnaya.mp3",2.818333}, + next_nahimovskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_nahimovskaya.mp3",2.930021}, + next_oktyabrskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_oktyabrskaya.mp3",2.702000}, + next_olimpiyskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_olimpiyskaya.mp3",2.996396}, + next_park_kultury_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_park_kultury.mp3",2.954438}, + next_politehnicheskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_politehnicheskaya.mp3",4.652875}, + next_proletarskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_proletarskaya.mp3",2.964667}, + next_prospekt_suvorova_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_prospekt_suvorova.mp3",3.674854}, + next_rechnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_rechnaya.mp3",4.248000}, + oktyabrskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/oktyabrskaya.mp3",1.186063}, + olimpiyskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/olimpiyskaya.mp3",1.208104}, + politehnicheskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/politehnicheskaya.mp3",1.506854}, + spec_attemton_politehnicheskaya3_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/spec_attemton_politehnicheskaya3.mp3",12.349063}, + spec_rechnaya_doors_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/spec_rechnaya_doors.mp3",10.953646}, + to_molodejnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/to_molodejnaya.mp3",3.460771}, + to_oktyabrskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/to_oktyabrskaya.mp3",3.355125}, + to_olimpiyskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/to_olimpiyskaya.mp3",3.424896}, + to_politehnicheskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/to_politehnicheskaya.mp3",3.638792}, + to_rechnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/to_rechnaya.mp3",3.312688}, + arr_kalininskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/arr_kalininskaya.mp3",2.369042}, + arr_pionerskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/arr_pionerskaya.mp3",2.146000}, + arr_politehnicheskaya2_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/arr_politehnicheskaya.mp3",6.419542}, + arr_timerazevskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/arr_timerazevskaya.mp3",2.398271}, + arr_vokzalnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/arr_vokzalnaya.mp3",5.819833}, + next_kalininskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/next_kalininskaya.mp3",2.845229}, + next_pionerskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/next_pionerskaya.mp3",2.837875}, + next_politehnicheskaya2_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/next_politehnicheskaya.mp3",3.293792}, + next_timerazevskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/next_timerazevskaya.mp3",3.049167}, + next_vokzalnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/next_vokzalnaya.mp3",4.291833}, + politehnicheskaya2_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/politehnicheskaya.mp3",1.361250}, + timerazevskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/timerazevskaya.mp3",1.352604}, + to_vokzalnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/to_vokzalnaya.mp3",3.471125}, + vokzalnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/vokzalnaya.mp3",1.175854}, +},{ + { --МÐРШРУТ + LED = {5,4,4,4,5,4,2,2}, --FIXME + Name = "Ð›Ð¸Ð½Ð¸Ñ 1", + spec_last = {"last_m",0.5,"things_m"}, + spec_last_f = {"last_f",0.5,"things_f"}, + spec_wait = {{"train_stop_m"},{"train_depeat_m"}}, + spec_wait_f = {{"train_stop_f"},{"train_depeat_f"}}, + Loop = false, + BlockDoors = true, + { + 110,"МеждународнаÑ", + arrlast = {nil,{"arr_mejdunarodnaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},"mejdunarodnaya_m"}, + dep = {{"doors_closing_m","park_kultury_m"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 111,"Парк Культуры", + arr = {{"station_m","park_kultury_m"},"arr_park_kultury_f"}, + dep = {{"doors_closing_m","politehnicheskaya_m",0.2,"politeness_m"},{"doors_closing_f","next_mejdunarodnaya_f",0.2,"politeness_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 112,"Политехнич.", + arr = {{"station_m","politehnicheskaya_m",0.2,"things_m"},{"arr_politehnicheskaya_f",0.2,"objects_f"}}, + dep = {{"doors_closing_m","prospekt_suvorova_m"},{"doors_closing_f","next_park_kultury_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 113,"Пр. Суворова", + arr = {{"station_m","prospekt_suvorova_m",0.2,"objects_m"},{"station_m","prospekt_suvorova_m",0.2,"things_m"}}, + dep = {{"doors_closing_m","nahimovskaya_m"},{"doors_closing_m","politehnicheskaya_m"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 114,"ÐахимовÑкаÑ", + arr = {"arr_nahimovskaya_f",{"station_m","nahimovskaya_m"}}, + dep = {{"doors_closing_f","next_oktyabrskaya_f",0.2,"politeness_f"},{"doors_closing_m","prospekt_suvorova_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 115,"ОктÑбрьÑкаÑ", + arr = {"arr_oktyabrskaya_f",{"station_m","oktyabrskaya_arr_m",0.2,"exit_m"}}, + dep = {{"doors_closing_f","next_rechnaya_f","spec_rechnaya_doors_f"},{"doors_closing_m","nahimovskaya_m"}}, + arrlast = {{"arr_oktyabrskaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},{"station","oktyabrskaya_arr_m",0.5,"last_m",2,"things_m",2,"deadlock_m"},"oktyabrskaya_next_m"}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + not_last = {3,"train_goes_to_m","oktyabrskaya_next_m"}, + not_last_f = {3,"to_oktyabrskaya_f"}, + }, + { + 116,"РечнаÑ", + arr = {"arr_rechnaya_f",{"station_m","rechnaya_arr_m"}}, + arrlast = {{"arr_rechnaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},{"station","rechnaya_arr_m",0.5,"last_m",2,"things_m",2,"deadlock_m"},"rechnaya_m"}, + dep = {{"doors_closing_f","next_proletarskaya_f"},{"doors_closing_m","oktyabrskaya_next_m",0.2}}, + not_last = {3,"train_goes_to_m","rechnaya_m"}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + not_last_f = {3,"to_rechnaya_f"}, + right_doors = true, + }, + { + 117,"ПролетарÑкаÑ", + --arr = {"arr_rechnaya",{"arr_rechnaya"}}, + arrlast = {{"arr_proletarskaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},nil,"proletarskaya_m"}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + dep = {nil,{"doors_closing_m","rechnaya_m",0.2,"politeness_m"}}, + }, + }, +}) + +Metrostroi.AddANSPAnnouncer("RIU Boiko + Pyaseckaya",{ + riu = true, + + click1 = {"subway_announcers/riu/boiko_new/click1.mp3",0.5}, + click2 = {"subway_announcers/riu/boiko_new/click2.mp3",0.3}, + click3 = {"subway_announcers/riu/boiko_new/click3.mp3",0.3}, + click_start = {"subway_announcers/riu/boiko_new/click1.mp3",0.5}, + click_end = {"subway_announcers/riu/boiko_new/click3.mp3",0.3}, + + + announcer_ready = {"subway_announcers/riu/boiko_new/announcer_ready.mp3",3.785}, + doors_closing_m = {"subway_announcers/riu/boiko_new/doors_closing.mp3",5}, + deadlock_m = {"subway_announcers/riu/boiko_new/spec_attention_deadlock.mp3",9.608}, + exit_m = {"subway_announcers/riu/boiko_new/spec_attention_exit.mp3",5.985}, + handrails_m = {"subway_announcers/riu/boiko_new/spec_attention_handrails.mp3",4.929}, + last_m = {"subway_announcers/riu/boiko_new/spec_attention_last.mp3",4.556}, + objects_m = {"subway_announcers/riu/boiko_new/spec_attention_objects.mp3",5.278}, + politeness_m = {"subway_announcers/riu/boiko_new/spec_attention_politeness.mp3",10.335}, + things_m = {"subway_announcers/riu/boiko_new/spec_attention_things.mp3",5.101}, + train_depeat_m = {"subway_announcers/riu/boiko_new/spec_attention_train_depeat.mp3",5.209}, + train_stop_m = {"subway_announcers/riu/boiko_new/spec_attention_train_stop.mp3",7.370}, + station_m = {"subway_announcers/riu/boiko_new/station.mp3",1.2}, + train_goes_to_m = {"subway_announcers/riu/boiko_new/train_goes_to.mp3",2.540}, + + kirovskaya_m = {"subway_announcers/riu/boiko_new/crossline/1/kirovskaya.mp3",1.159252}, + mejdunarodnaya_m = {"subway_announcers/riu/boiko_new/crossline/1/mejdunarodnaya.mp3",1.402086}, + molodejnaya_m = {"subway_announcers/riu/boiko_new/crossline/1/molodejnaya.mp3",1.093787}, + nahimovskaya_m = {"subway_announcers/riu/boiko_new/crossline/1/nahimovskaya.mp3",1.307188}, + oktyabrskaya_arr_m = {"subway_announcers/riu/boiko_new/crossline/1/oktyabrskaya_arr.mp3",3.624490}, + oktyabrskaya_next_m = {"subway_announcers/riu/boiko_new/crossline/1/oktyabrskaya_next.mp3",1.380862}, + olimpiyskaya_m = {"subway_announcers/riu/boiko_new/crossline/1/olimpiyskaya.mp3",1.371542}, + park_kultury_m = {"subway_announcers/riu/boiko_new/crossline/1/park_kultury.mp3",1.379252}, + politehnicheskaya_m = {"subway_announcers/riu/boiko_new/crossline/1/politehnicheskaya.mp3",1.459274}, + politehnicheskaya_arr_m = {"subway_announcers/riu/boiko_new/crossline/1/politehnicheskaya_arr.mp3",5.036077}, + politehnicheskaya_next_m = {"subway_announcers/riu/boiko_new/crossline/1/politehnicheskaya_next.mp3",2.939342}, + proletarskaya_m = {"subway_announcers/riu/boiko_new/crossline/1/proletarskaya.mp3",1.282245}, + prospekt_suvorova_m = {"subway_announcers/riu/boiko_new/crossline/1/prospekr_suvorova.mp3",1.972812}, + rechnaya_m = {"subway_announcers/riu/boiko_new/crossline/1/rechnaya.mp3",1.033628}, + rechnaya_arr_m = {"subway_announcers/riu/boiko_new/crossline/1/rechnaya_arr.mp3",2.607868}, + spec_attention_politehnicheskaya_m = {"subway_announcers/riu/boiko_new/crossline/1/spec_attention_politehnicheskaya.mp3",12.280635}, + spec_attention_rechnaya_m = {"subway_announcers/riu/boiko_new/crossline/1/spec_attention_rechnaya.mp3",10.942902}, + kalininskaya_m = {"subway_announcers/riu/boiko_new/crossline/2/kalininskaya.mp3",1.189909}, + pionerskaya_m = {"subway_announcers/riu/boiko_new/crossline/2/pionerskaya.mp3",1.110431}, + + doors_closing_f = {"subway_announcers/riu/pyaseckaya/doors_closing.mp3",2.994}, + deadlock_f = {"subway_announcers/riu/pyaseckaya/spec_attention_deadlock.mp3",10.133}, + exit_f = {"subway_announcers/riu/pyaseckaya/spec_attention_exit.mp3",5.466}, + handrails_f = {"subway_announcers/riu/pyaseckaya/spec_attention_handrails.mp3",4.744}, + last_f = {"subway_announcers/riu/pyaseckaya/spec_attention_last.mp3",4.506}, + objects_f = {"subway_announcers/riu/pyaseckaya/spec_attention_objects.mp3",5.219}, + politeness_f = {"subway_announcers/riu/pyaseckaya/spec_attention_politeness.mp3",10.221}, + things_f = {"subway_announcers/riu/pyaseckaya/spec_attention_things.mp3",5.154}, + train_depeat_f = {"subway_announcers/riu/pyaseckaya/spec_attention_train_depeat.mp3",4.829}, + train_stop_f = {"subway_announcers/riu/pyaseckaya/spec_attention_train_stop.mp3",7.240}, + + arr_kirovskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_kirovskaya.mp3",2.004694}, + arr_mejdunarodnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_mejdunarodnaya.mp3",2.188118}, + arr_molodejnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_molodejnaya.mp3",1.969433}, + arr_nahimovskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_nahimovskaya.mp3",2.300317}, + arr_oktyabrskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_oktyabrskaya.mp3",4.212676}, + arr_olimpiyskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_olimpiyskaya.mp3",2.282313}, + arr_park_kultury_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_park_kultury.mp3",2.156463}, + arr_politehnicheskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_politehnicheskaya_old.mp3",6.628639}, + arr_politehnicheskaya_old_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_politehnicheskaya_old.mp3",4.201995}, + arr_proletarskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_proletarskaya.mp3",2.275125}, + arr_prospekt_suvorova_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_prospekt_suvorova.mp3",2.518776}, + arr_rechnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_rechnaya.mp3",3.470952}, + mejdunarodnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/mejdunarodnaya.mp3",1.218481}, + molodejnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/molodejnaya.mp3",1.175714}, + next_kirovskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_kirovskaya.mp3",3.130476}, + next_mejdunarodnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_mejdunarodnaya.mp3",3.000000}, + next_molodejnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_molodejnaya.mp3",3.188957}, + next_nahimovskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_nahimovskaya.mp3",3.020159}, + next_oktyabrskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_oktyabrskaya.mp3",2.734263}, + next_olimpiyskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_olimpiyskaya.mp3",3.175488}, + next_park_kultury_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_park_kultury.mp3",2.934172}, + next_politehnicheskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_politehnicheskaya.mp3",4.616077}, + next_proletarskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_proletarskaya.mp3",2.969206}, + next_prospekt_suvorova_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_prospekt_suvorova.mp3",3.677937}, + next_rechnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_rechnaya.mp3",4.450204}, + oktyabrskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/oktyabrskaya.mp3",1.186236}, + olimpiyskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/olimpiyskaya.mp3",1.237823}, + politehnicheskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/politehnicheskaya.mp3",1.425170}, + rechnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/rechnaya.mp3",1.073265}, + spec_attemton_politehnicheskaya3_f = {"subway_announcers/riu/pyaseckaya/crossline/1/spec_attemton_politehnicheskaya3.mp3",13.328209}, + spec_rechnaya_doors_f = {"subway_announcers/riu/pyaseckaya/crossline/1/spec_rechnaya_doors.mp3",11.516440}, + to_molodejnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/to_molodejnaya.mp3",3.633515}, + to_oktyabrskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/to_oktyabrskaya.mp3",3.345057}, + to_olimpiyskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/to_olimpiyskaya.mp3",3.568209}, + to_politehnicheskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/to_politehnicheskaya.mp3",3.683401}, + to_rechnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/to_rechnaya.mp3",3.336893}, +},{ + { --МÐРШРУТ + LED = {5,4,4,4,5,4,2,2}, + Name = "Ð›Ð¸Ð½Ð¸Ñ 1", + NameEn = "Line 1", + spec_last = {"last_m",0.5,"things_m"}, + spec_last_f = {"last_f",0.5,"things_f"}, + spec_wait = {{"train_stop_m"},{"train_depeat_m"}}, + spec_wait_f = {{"train_stop_f"},{"train_depeat_f"}}, + Loop = false, + BlockDoors = true, + { + 110,"МеждународнаÑ","Mezhdunarod.", + arrlast = {nil,{"arr_mejdunarodnaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},"mejdunarodnaya_m"}, + dep = {{"doors_closing_m","park_kultury_m"}}, + }, + { + 111,"Парк Культуры","Park Kultury", + arr = {{"station_m","park_kultury_m"},"arr_park_kultury_f"}, + dep = {{"doors_closing_m","politehnicheskaya_m",0.2,"politeness_m"},{"doors_closing_f","next_mejdunarodnaya_f",0.2,"politeness_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 112,"Политехнич.","Politehnich.", + arr = {{"station_m","politehnicheskaya_m",0.2,"things_m"},{"arr_politehnicheskaya_f",0.2,"objects_f"}}, + dep = {{"doors_closing_m","prospekt_suvorova_m"},{"doors_closing_f","next_park_kultury_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 113,"Пр. Суворова","Pr. Suvorova", + arr = {{"station_m","prospekt_suvorova_m",0.2,"objects_m"},{"station_m","prospekt_suvorova_m",0.2,"things_m"}}, + dep = {{"doors_closing_m","nahimovskaya_m"},{"doors_closing_m","politehnicheskaya_m"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 114,"ÐахимовÑкаÑ","Nahimovskaya", + arr = {"arr_nahimovskaya_f",{"station_m","nahimovskaya_m"}}, + dep = {{"doors_closing_f","next_oktyabrskaya_f",0.2,"politeness_f"},{"doors_closing_m","prospekt_suvorova_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 115,"ОктÑбрьÑкаÑ","Oktabrskaya", + arr = {"arr_oktyabrskaya_f",{"station_m","oktyabrskaya_arr_m",0.2,"exit_m"}}, + dep = {{"doors_closing_f","next_rechnaya_f","spec_rechnaya_doors_f"},{"doors_closing_m","nahimovskaya_m"}}, + arrlast = {{"arr_oktyabrskaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},{"station","oktyabrskaya_arr_m",0.5,"last_m",2,"things_m",2,"deadlock_m"},"oktyabrskaya_next_m"}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + not_last = {3,"train_goes_to_m","oktyabrskaya_next_m"}, + not_last_f = {3,"to_oktyabrskaya_f"}, + }, + { + 116,"РечнаÑ","Rechnaya", + arr = {"arr_rechnaya_f",{"station_m","rechnaya_arr_m"}}, + arrlast = {{"arr_rechnaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},{"station","rechnaya_arr_m",0.5,"last_m",2,"things_m",2,"deadlock_m"},"rechnaya_m"}, + dep = {{"doors_closing_f","next_proletarskaya_f"},{"doors_closing_m","oktyabrskaya_next_m",0.2}}, + not_last = {3,"train_goes_to_m","rechnaya_m"}, + not_last_f = {3,"to_rechnaya"}, + right_doors = true, + }, + { + 117,"ПролетарÑкаÑ","Proletarskaya", + --arr = {"arr_rechnaya",{"arr_rechnaya"}}, + arrlast = {{"arr_proletarskaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},nil,"proletarskaya_m"}, + dep = {nil,{"doors_closing_m","rechnaya_m",0.2,"politeness_m"}}, + }, + }, +}) +Metrostroi.SetRRIAnnouncer({ + click_end = {"subway_announcers/rri/boiko/spec/click_end.mp3",0.1}, + click_start = {"subway_announcers/rri/boiko/spec/click_start.mp3",0.1}, + last = {"subway_announcers/rri/boiko/spec/last.mp3",22.264354}, + exit = {"subway_announcers/rri/boiko/spec/spec_attention_exit.mp3",5.446236}, + handrails = {"subway_announcers/rri/boiko/spec/spec_attention_handrails.mp3",4.594558}, + objects = {"subway_announcers/rri/boiko/spec/spec_attention_objects.mp3",5.143175}, + things = {"subway_announcers/rri/boiko/spec/spec_attention_things.mp3",05.093}, + politeness = {"subway_announcers/rri/boiko/spec/spec_attention_politeness.mp3",11.457075}, + train_depeat = {"subway_announcers/rri/boiko/spec/spec_attention_train_depeat.mp3",4.842222}, + train_stop = {"subway_announcers/rri/boiko/spec/spec_attention_train_stop.mp3",6.963424}, + + arr_kirovskaya = {"subway_announcers/rri/boiko/crossline/1/arr_kirovskaya.mp3",2.121701}, + arr_mejdunarodnaya = {"subway_announcers/rri/boiko/crossline/1/arr_mejdunarodnaya.mp3",2.160771}, + arr_molodejnaya = {"subway_announcers/rri/boiko/crossline/1/arr_molodejnaya.mp3",2.291270}, + arr_nahimovskaya = {"subway_announcers/rri/boiko/crossline/1/arr_nahimovskaya.mp3",2.197279}, + arr_oktyabrskaya = {"subway_announcers/rri/boiko/crossline/1/arr_oktyabrskaya.mp3",4.348}, + arr_olimpiyskaya = {"subway_announcers/rri/boiko/crossline/1/arr_olimpiyskaya.mp3",1.951587}, + arr_park_kultury = {"subway_announcers/rri/boiko/crossline/1/arr_park_kultury.mp3",2.079796}, + --arr_politehnicheskaya = {"subway_announcers/rri/boiko/crossline/1/arr_politehnicheskaya.mp3",5.529909}, + arr_politehnicheskaya = {"subway_announcers/rri/boiko/crossline/1/arr_politehnicheskaya2.mp3",4}, + arr_proletarskaya = {"subway_announcers/rri/boiko/crossline/1/arr_proletarskaya.mp3",2.057959}, + arr_prospekt_suvorova = {"subway_announcers/rri/boiko/crossline/1/arr_prospekt_suvorova.mp3",3.038118}, + arr_rechnaya = {"subway_announcers/rri/boiko/crossline/1/arr_rechnaya.mp3",3.004853}, + next_kirovskaya = {"subway_announcers/rri/boiko/crossline/1/next_kirovskaya.mp3",5.574558}, + next_mejdunarodnaya = {"subway_announcers/rri/boiko/crossline/1/next_mejdunarodnaya.mp3",5.155261}, + next_molodejnaya = {"subway_announcers/rri/boiko/crossline/1/next_molodejnaya.mp3",5.864898}, + next_nahimovskaya = {"subway_announcers/rri/boiko/crossline/1/next_nahimovskaya.mp3",5.102834}, + next_oktyabrskaya = {"subway_announcers/rri/boiko/crossline/1/next_oktyabrskaya.mp3",5.102834}, + next_olimpiyskaya = {"subway_announcers/rri/boiko/crossline/1/next_olimpiyskaya.mp3",5.038776}, + next_park_kultury = {"subway_announcers/rri/boiko/crossline/1/next_park_kultury.mp3",5.226780}, + next_politehnicheskaya = {"subway_announcers/rri/boiko/crossline/1/next_politehnicheskaya.mp3",5.088367}, + next_proletarskaya = {"subway_announcers/rri/boiko/crossline/1/next_proletarskaya.mp3",5.155193}, + next_prospekt_suvorova = {"subway_announcers/rri/boiko/crossline/1/next_prospekt_suvorova.mp3",6.172585}, + next_rechnaya = {"subway_announcers/rri/boiko/crossline/1/next_rechnaya.mp3",6.388458}, + spec_politehnicheskaya = {"subway_announcers/rri/boiko/crossline/1/spec_politehnicheskaya.mp3",11.393311}, + spec_rechnaya_doors = {"subway_announcers/rri/boiko/crossline/1/spec_rechnaya_doors.mp3",9.786349}, + to_molodejnaya = {"subway_announcers/rri/boiko/crossline/1/to_molodejnaya.mp3",4.925374}, + to_oktyabrskaya = {"subway_announcers/rri/boiko/crossline/1/to_oktyabrskaya.mp3",4.578889}, + to_olimpiyskaya = {"subway_announcers/rri/boiko/crossline/1/to_olimpiyskaya.mp3",4.639796}, + to_politehnicheskaya = {"subway_announcers/rri/boiko/crossline/1/to_politehnicheskaya.mp3",4.665238}, + to_rechnaya = {"subway_announcers/rri/boiko/crossline/1/to_rechnaya.mp3",4.470000}, + arr_kalininskaya = {"subway_announcers/rri/boiko/crossline/2/arr_kalininskaya.mp3",2.158163}, + arr_pionerskaya = {"subway_announcers/rri/boiko/crossline/2/arr_pionerskaya.mp3",2.090045}, + arr_politehnicheskaya2 = {"subway_announcers/rri/boiko/crossline/2/arr_politehnicheskaya.mp3",5.491179}, + arr_timeryazevskaya = {"subway_announcers/rri/boiko/crossline/2/arr_timeryazevskaya.mp3",2.062154}, + arr_vokzalnaya = {"subway_announcers/rri/boiko/crossline/2/arr_vokzalnaya.mp3",6.513039}, + next_kalininskaya = {"subway_announcers/rri/boiko/crossline/2/next_kalininskaya.mp3",5.364104}, + next_pionerskaya = {"subway_announcers/rri/boiko/crossline/2/next_pionerskaya.mp3",5.116485}, + next_politehnicheskaya2 = {"subway_announcers/rri/boiko/crossline/2/next_politehnicheskaya.mp3",7.010385}, + next_timeryazevskaya = {"subway_announcers/rri/boiko/crossline/2/next_timeryazevskaya.mp3",5.356667}, + next_vokzalnaya = {"subway_announcers/rri/boiko/crossline/2/next_vokzalnaya.mp3",5.007256}, + to_vokzalnaya = {"subway_announcers/rri/boiko/crossline/2/to_vokzalnaya.mp3",4.658980}, +},{ + { + Name = "Line 1", + spec_last = {"last"}, + spec_wait = {{"train_stop"},{"train_depeat"}}, + BlockDoors = true, + { + 110,"Mezhdunarod.", + arrlast = {nil,{"arr_mejdunarodnaya",0.5,"last"}}, + dep = {"next_park_kultury"}, + }, + { + 111,"Park Kultury", + arr = {"arr_park_kultury","arr_park_kultury"}, + dep = {{"next_politehnicheskaya",0.2,"politeness"},{"next_mejdunarodnaya",0.2,"politeness"}}, + }, + { + 112,"Politehnich.", + arr = {{"arr_politehnicheskaya",0.2,"things"},{"arr_politehnicheskaya",0.2,"objects"}}, + dep = {"next_prospekt_suvorova","next_park_kultury"}, + }, + { + 113,"Pr. Suvorova", + arr = {{"arr_prospekt_suvorova",0.2,"objects"},{"arr_prospekt_suvorova",0.2,"things"}}, + dep = {"next_nahimovskaya","next_politehnicheskaya"}, + }, + { + 114,"Nahimovskaya", + arr = {"arr_nahimovskaya","arr_nahimovskaya"}, + dep = {{"next_oktyabrskaya",0.2,"politeness"},"next_prospekt_suvorova"}, + }, + { + 115,"Oktabrskaya", + arr = {"arr_oktyabrskaya",{"arr_oktyabrskaya",0.2,"exit"}}, + dep = {{"next_rechnaya",0.5,"spec_rechnaya_doors"},"next_nahimovskaya"}, + arrlast = {{"arr_oktyabrskaya",0.5,"last"},{"arr_oktyabrskaya",0.5,"last"}}, + not_last = {3,"to_oktyabrskaya"} + }, + { + 116,"Rechnaya", + arr = {"arr_rechnaya","arr_rechnaya"}, + arrlast = {{"arr_rechnaya",0.5,"last"},nil}, + dep = {{"next_proletarskaya",0.2,"politeness"},{"next_oktyabrskaya",0.2,"politeness"}}, + not_last = {3,"to_rechnaya"}, + right_doors = true, + }, + { + 117,"Proletarskaya", + --arr = {"arr_rechnaya",{"arr_rechnaya"}}, + arrlast = {{"arr_proletarskaya",0.5,"last"},nil}, + dep = {nil,"next_rechnaya"}, + }, + } +}) +Metrostroi.SetUPOAnnouncer({ + name = "UPO RHINO", + tone = {"subway_announcers/upo/rhino/crossline/tone.mp3", 1.2}, + click1 = {"subway_announcers/upo/click1.mp3", 0.3}, + click2 = {"subway_announcers/upo/click2.mp3", 0.1}, + proletarskaya = {"subway_announcers/upo/rhino/crossline/proletarskaya.mp3",0.809100}, + next_proletarskaya = {"subway_announcers/upo/rhino/crossline/next_proletarskaya.mp3",1.853100}, + last_proletarskaya = {"subway_announcers/upo/rhino/crossline/last_proletarskaya.mp3",9.625000}, + + --olimpiyskaya = {"subway_announcers/upo/rhino/crossline/olimpiyskaya.mp3",0.835200}, + --next_olimpiyskaya = {"subway_announcers/upo/rhino/crossline/next_olimpiyskaya.mp3",1.800900}, + --last_olimpiyskaya = {"subway_announcers/upo/rhino/crossline/last_olimpiyskaya.mp3",9.735300}, + + --kirovskaya = {"subway_announcers/upo/rhino/crossline/kirovskaya.mp3",0.678600}, + --next_kirovskaya = {"subway_announcers/upo/rhino/crossline/next_kirovskaya.mp3",1.644300}, + + --molodejnaya = {"subway_announcers/upo/rhino/crossline/molodejnaya.mp3",0.704700}, + --next_molodejnaya = {"subway_announcers/upo/rhino/crossline/next_molodejnaya.mp3",1.696500}, + --last_molodejnaya = {"subway_announcers/upo/rhino/crossline/last_molodejnaya.mp3",10.100700}, + + mejdunarodnaya = {"subway_announcers/upo/rhino/crossline/mejdunarodnaya.mp3",1.017900}, + next_mejdunarodnaya = {"subway_announcers/upo/rhino/crossline/next_mejdunarodnaya.mp3",1.800900}, + last_mejdunarodnaya = {"subway_announcers/upo/rhino/crossline/last_mejdunarodnaya.mp3",9.709200}, + + park_kultury = {"subway_announcers/upo/rhino/crossline/park_kultury.mp3",0.887400}, + next_park_kultury = {"subway_announcers/upo/rhino/crossline/next_park_kultury.mp3",1.827000}, + + politehnicheskaya = {"subway_announcers/upo/rhino/crossline/politehnicheskaya.mp3",0.965700}, + next_politehnicheskaya = {"subway_announcers/upo/rhino/crossline/next_politehnicheskaya.mp3",2.035800}, + + prospekt_suvorova = {"subway_announcers/upo/rhino/crossline/prospekt_suvorova.mp3",1.044000}, + next_prospekt_suvorova = {"subway_announcers/upo/rhino/crossline/next_prospekt_suvorova.mp3",2.009700}, + + nahimovskaya = {"subway_announcers/upo/rhino/crossline/nahimovskaya.mp3",0.861300}, + next_nahimovskaya = {"subway_announcers/upo/rhino/crossline/next_nahimovskaya.mp3",1.853100}, + + oktyabrskaya = {"subway_announcers/upo/rhino/crossline/oktyabrskaya.mp3",0.835200}, + next_oktyabrskaya = {"subway_announcers/upo/rhino/crossline/next_oktyabrskaya.mp3",1.879200}, + + rechnaya = {"subway_announcers/upo/rhino/crossline/rechnaya.mp3",0.678600}, + next_rechnaya = {"subway_announcers/upo/rhino/crossline/next_rechnaya.mp3",10.727100}, + next_rechnaya1 = {"subway_announcers/upo/rhino/crossline/next_rechnaya1.mp3",1.722600}, + last_rechnaya = {"subway_announcers/upo/rhino/crossline/last_rechnaya.mp3",10.727100}, + + spec_attention_handrails = {"subway_announcers/upo/rhino/crossline/spec_attention_handrails.mp3",3.967200}, + spec_attention_politeness = {"subway_announcers/upo/rhino/crossline/spec_attention_politeness.mp3",5.533200}, + + odz1 = {"subway_announcers/upo/rhino/crossline/odz1.mp3",2.02 + 0.3}, + odz2 = {"subway_announcers/upo/rhino/crossline/odz2.mp3",2.117 + 0.3}, +},{ + { + 909,"МеждународнаÑ", + arrlast = {nil,"last_mejdunarodnaya"}, + dep = {{"odz2","next_park_kultury"}}, + noises = {2,3},noiserandom = 0.08, + }, + { + 910,"Парк Культуры", + arr = {{"park_kultury",3,"next_politehnicheskaya"},{"park_kultury",3,"next_mejdunarodnaya","spec_attention_politeness"}}, + dep = {{"odz1","next_politehnicheskaya"},{"odz2","next_mejdunarodnaya"}}, + noises = {1,2},noiserandom = 0.12, + }, + { + 911,"ПолитехничеÑкаÑ", + arr = {{"politehnicheskaya",3,"next_prospekt_suvorova","spec_attention_politeness"},{"politehnicheskaya",3,"next_park_kultury","spec_attention_handrails"}}, + dep = {{"odz2","next_prospekt_suvorova"},{"odz1","next_park_kultury"}}, + noises = {3},noiserandom = 0.05, + }, + { + 912,"Пр. Суворова", + arr = {{"prospekt_suvorova",3,"next_nahimovskaya","spec_attention_handrails"},{"prospekt_suvorova",3,"next_politehnicheskaya"}}, + dep = {{"odz2","next_nahimovskaya"},{"odz2","next_politehnicheskaya"}}, + }, + { + 913,"ÐахимовÑкаÑ", + arr = {{"nahimovskaya",3,"next_oktyabrskaya","spec_attention_politeness"},{"nahimovskaya",3,"next_prospekt_suvorova","spec_attention_politeness"}}, + dep = {{"odz1","next_oktyabrskaya"},{"odz1","next_prospekt_suvorova"}}, + noises = {1,2,3},noiserandom = 0.02, + }, + { + 914,"ОктÑбрьÑкаÑ", + arr = {{"oktyabrskaya",3,"next_rechnaya"},{"oktyabrskaya",3,"next_nahimovskaya"}}, + dep = {{"odz1","next_rechnaya1"},{"odz2","next_nahimovskaya"}}, + noises = {1,2},noiserandom = 0.2, + }, + { + 915,"РечнаÑ", + arr = {{"rechnaya",3,"next_proletarskaya"},{"rechnaya",3,"next_oktyabrskaya"}}, + dep = {{"odz2","next_proletarskaya"},{"odz2","next_oktyabrskaya"}}, + noises = {1,3},noiserandom = 0.08, + }, + { + 916,"ПролетарÑкаÑ", + arrlast = {"last_proletarskaya"}, + dep = {nil,{"odz1","next_rechnaya1"}}, + noises = {2,3},noiserandom = 0.2, + }, +}) +--[[Metrostroi.AddSarmatUPOAnnouncer("UPO RHINO",{ + tone = {"subway_announcers/sarmat_upo/tone.mp3",1}, + proletarskaya = {"subway_announcers/sarmat_upo/rhino/crossline/proletarskaya.mp3",0.809100}, + next_proletarskaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_proletarskaya.mp3",1.853100}, + last_proletarskaya = {"subway_announcers/sarmat_upo/rhino/crossline/last_proletarskaya.mp3",9.619000}, + + --olimpiyskaya = {"subway_announcers/sarmat_upo/rhino/crossline/olimpiyskaya.mp3",0.835200}, + --next_olimpiyskaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_olimpiyskaya.mp3",1.800900}, + --last_olimpiyskaya = {"subway_announcers/sarmat_upo/rhino/crossline/last_olimpiyskaya.mp3",9.735300}, + + --kirovskaya = {"subway_announcers/sarmat_upo/rhino/crossline/kirovskaya.mp3",0.678600}, + --next_kirovskaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_kirovskaya.mp3",1.644300}, + + --molodejnaya = {"subway_announcers/sarmat_upo/rhino/crossline/molodejnaya.mp3",0.704700}, + --next_molodejnaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_molodejnaya.mp3",1.696500}, + --last_molodejnaya = {"subway_announcers/sarmat_upo/rhino/crossline/last_molodejnaya.mp3",10.100700}, + + mejdunarodnaya = {"subway_announcers/sarmat_upo/rhino/crossline/mejdunarodnaya.mp3",1.017900}, + next_mejdunarodnaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_mejdunarodnaya.mp3",1.800900}, + last_mejdunarodnaya = {"subway_announcers/sarmat_upo/rhino/crossline/last_mejdunarodnaya.mp3",9.709200}, + + park_kultury = {"subway_announcers/sarmat_upo/rhino/crossline/park_kultury.mp3",0.887400}, + next_park_kultury = {"subway_announcers/sarmat_upo/rhino/crossline/next_park_kultury.mp3",1.827000}, + + politehnicheskaya = {"subway_announcers/sarmat_upo/rhino/crossline/politehnicheskaya.mp3",0.965700}, + next_politehnicheskaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_politehnicheskaya.mp3",2.035800}, + + prospekt_suvorova = {"subway_announcers/sarmat_upo/rhino/crossline/prospekt_suvorova.mp3",1.044000}, + next_prospekt_suvorova = {"subway_announcers/sarmat_upo/rhino/crossline/next_prospekt_suvorova.mp3",2.009700}, + + nahimovskaya = {"subway_announcers/sarmat_upo/rhino/crossline/nahimovskaya.mp3",0.861300}, + next_nahimovskaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_nahimovskaya.mp3",1.853100}, + + oktyabrskaya = {"subway_announcers/sarmat_upo/rhino/crossline/oktyabrskaya.mp3",0.835200}, + next_oktyabrskaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_oktyabrskaya.mp3",1.879200}, + + rechnaya = {"subway_announcers/sarmat_upo/rhino/crossline/rechnaya.mp3",0.678600}, + next_rechnaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_rechnaya.mp3",10.727100}, + next_rechnaya1 = {"subway_announcers/sarmat_upo/rhino/crossline/next_rechnaya1.mp3",1.722600}, + last_rechnaya = {"subway_announcers/sarmat_upo/rhino/crossline/last_rechnaya.mp3",10.727100}, + + spec_attention_handrails = {"subway_announcers/sarmat_upo/rhino/crossline/spec_attention_handrails.mp3",3.967200}, + spec_attention_politeness = {"subway_announcers/sarmat_upo/rhino/crossline/spec_attention_politeness.mp3",5.533200}, + + odz1 = {"subway_announcers/sarmat_upo/rhino/crossline/odz1.mp3",2.088000+0.3}, + odz2 = {"subway_announcers/sarmat_upo/rhino/crossline/odz2.mp3",2.192400+0.3}, +},{ + { --МÐРШРУТ + LED = {3,4,5,5,5,5,5}, + { + 909,"МеждународнаÑ", + arr = {nil,"last_mejdunarodnaya"}, + arrlast = {nil,"last_mejdunarodnaya"}, + dep = {"next_park_kultury"}, + odz = "odz1", + dist = 30, + }, + { + 910,"Парк Культуры", + arr = {{"park_kultury",3,"next_politehnicheskaya"},{"park_kultury",3,"next_mejdunarodnaya","spec_attention_politeness"}}, + dep = {"next_politehnicheskaya","next_mejdunarodnaya"}, + odz = "odz2", + dist = 30, + }, + { + 911,"ПолитехничеÑкаÑ", + arr = {{"politehnicheskaya",3,"next_prospekt_suvorova","spec_attention_politeness"},{"politehnicheskaya",3,"next_park_kultury","spec_attention_handrails"}}, + dep = {"next_prospekt_suvorova","next_park_kultury"}, + odz = "odz1", + dist = 30, + }, + { + 912,"Пр. Суворова", + arr = {{"prospekt_suvorova",3,"next_nahimovskaya","spec_attention_handrails"},{"prospekt_suvorova",3,"next_politehnicheskaya"}}, + dep = {"next_nahimovskaya","next_politehnicheskaya"}, + odz = "odz2", + dist = 30, + }, + { + 913,"ÐахимовÑкаÑ", + arr = {{"nahimovskaya",3,"next_oktyabrskaya","spec_attention_politeness"},{"nahimovskaya",3,"next_prospekt_suvorova","spec_attention_politeness"}}, + dep = {"next_oktyabrskaya","next_prospekt_suvorova"}, + odz = "odz1", + dist = 30, + }, + { + 914,"ОктÑбрьÑкаÑ", + arr = {{"oktyabrskaya",3,"next_rechnaya"},{"oktyabrskaya",3,"next_nahimovskaya"}}, + dep = {"next_rechnaya1","next_nahimovskaya"}, + odz = "odz2", + dist = 30, + }, + { + 915,"РечнаÑ", + arr = {"last_rechnaya"}, + arrlast = {"last_rechnaya"}, + dep = {nil,"next_oktyabrskaya"}, + odz = "odz1", + dist = 30, + }, + }, +})--]] +Metrostroi.AddSarmatUPOAnnouncer("UPO Artur",{ + tone = {"subway_announcers/sarmat_upo/tone.mp3",1}, + rechnaya = {"subway_announcers/sarmat_upo/crossline_artur/rechnaya.mp3",0.939271}, + last_rechnaya = {"subway_announcers/sarmat_upo/crossline_artur/last_rechnaya.mp3",12.962604}, + next_rechnaya = {"subway_announcers/sarmat_upo/crossline_artur/next_rechnaya1.mp3",12.384375}, + next_rechnaya2 = {"subway_announcers/sarmat_upo/crossline_artur/next_rechnaya2.mp3",1.720896}, + + oktyabrskaya = {"subway_announcers/sarmat_upo/crossline_artur/oktyabrskaya.mp3",1.144646}, + next_oktyabrskaya = {"subway_announcers/sarmat_upo/crossline_artur/next_oktyabrskaya.mp3",2.240396}, + + nahimovskaya = {"subway_announcers/sarmat_upo/crossline_artur/nahimovskaya.mp3",1.179146}, + next_nahimovskaya = {"subway_announcers/sarmat_upo/crossline_artur/next_nahimovskaya.mp3",2.466563}, + + prospekt_suvorova = {"subway_announcers/sarmat_upo/crossline_artur/prospekt_suvorova.mp3",1.566375}, + next_prospekt_suvorova = {"subway_announcers/sarmat_upo/crossline_artur/next_prospekt_suvorova.mp3",2.486813}, + + politehnicheskaya = {"subway_announcers/sarmat_upo/crossline_artur/politehnicheskaya.mp3",1.178271}, + next_politehnicheskaya = {"subway_announcers/sarmat_upo/crossline_artur/next_politehnicheskaya.mp3",2.400917}, + + park_kultury = {"subway_announcers/sarmat_upo/crossline_artur/park_kultury.mp3",1.285271}, + next_park_kultury = {"subway_announcers/sarmat_upo/crossline_artur/next_park_kultury.mp3",2.242479}, + + mejdunarodnaya = {"subway_announcers/sarmat_upo/crossline_artur/mejdunarodnaya.mp3",1.123333}, + next_mejdunarodnaya = {"subway_announcers/sarmat_upo/crossline_artur/next_mejdunarodnaya.mp3",2.360938}, + last_mejdunarodnaya = {"subway_announcers/sarmat_upo/crossline_artur/last_mejdunarodnaya.mp3",11.327729}, + --molodejnaya = {"subway_announcers/sarmat_upo/crossline_artur/molodejnaya.mp3",1.064354}, + --next_molodejnaya = {"subway_announcers/sarmat_upo/crossline_artur/next_molodejnaya.mp3",1.996167}, + --last_molodejnaya = {"subway_announcers/sarmat_upo/crossline_artur/last_molodejnaya.mp3",11.295438}, + --kirovskaya = {"subway_announcers/sarmat_upo/crossline_artur/kirovskaya.mp3",0.900000}, + --next_kirovskaya = {"subway_announcers/sarmat_upo/crossline_artur/next_kirovskaya.mp3",2.142271}, + --olimpiyskaya = {"subway_announcers/sarmat_upo/crossline_artur/olimpiyskaya.mp3",1.095958}, + --next_olimpiyskaya = {"subway_announcers/sarmat_upo/crossline_artur/next_olimpiyskaya.mp3",2.446542}, + --last_olimpiyskaya = {"subway_announcers/sarmat_upo/crossline_artur/last_olimpiyskaya.mp3",11.552521}, + proletarskaya = {"subway_announcers/sarmat_upo/crossline_artur/proletarskaya.mp3",1.111333}, + next_proletarskaya = {"subway_announcers/sarmat_upo/crossline_artur/next_proletarskaya.mp3",2.072313}, + last_proletarskaya = {"subway_announcers/sarmat_upo/crossline_artur/last_proletarskaya.mp3",11.298000}, + odz1 = {"subway_announcers/sarmat_upo/crossline_artur/odz.mp3",2.612750}, + odz2 = {"subway_announcers/sarmat_upo/crossline_artur/odz2.mp3",2.392542}, + spec_attention_handrails = {"subway_announcers/sarmat_upo/crossline_artur/spec_attention_handrails.mp3",3.972021}, + spec_attention_politeness = {"subway_announcers/sarmat_upo/crossline_artur/spec_attention_politeness.mp3",5.614417}, +},{ + { --МÐРШРУТ + LED = {3,4,5,5,5,5,3,2}, + { + 110,"МеждународнаÑ","Mezhdunarodnaya", + arr = {nil,"last_mejdunarodnaya"}, + arrlast = {nil,"last_mejdunarodnaya"}, + dep = {"next_park_kultury"}, + odz = "odz1", + }, + { + 111,"Парк Культуры","Park kultury", + arr = {{"park_kultury",3,"next_politehnicheskaya"},{"park_kultury",3,"next_mejdunarodnaya","spec_attention_politeness"}}, + dep = {"next_politehnicheskaya","next_mejdunarodnaya"}, + odz = "odz1", + }, + { + 112,"ПолитехничеÑкаÑ","Politehnicheskaya", + arr = {{"politehnicheskaya",3,"next_prospekt_suvorova","spec_attention_politeness"},{"politehnicheskaya",3,"next_park_kultury","spec_attention_handrails"}}, + dep = {"next_prospekt_suvorova","next_park_kultury"}, + odz = "odz2", + messagedep="%gУважаемые паÑÑажиры!\nВо изжежании травм,\nдержитеÑÑŒ за поручни.", + }, + { + 113,"Пр. Суворова","Pr. Suvorova", + arr = {{"prospekt_suvorova",3,"next_nahimovskaya","spec_attention_handrails"},{"prospekt_suvorova",3,"next_politehnicheskaya"}}, + dep = {"next_nahimovskaya","next_politehnicheskaya"}, + odz = "odz1", + }, + { + 114,"ÐахимовÑкаÑ","Nahimovskaya", + arr = {{"nahimovskaya",3,"next_oktyabrskaya","spec_attention_politeness"},{"nahimovskaya",3,"next_prospekt_suvorova","spec_attention_politeness"}}, + dep = {"next_oktyabrskaya","next_prospekt_suvorova"}, + odz = "odz2", + messagedep="%gУважаемые паÑÑажиры!\nВо изжежании травм,\nдержитеÑÑŒ за поручни.", + }, + { + 115,"ОктÑбрьÑкаÑ","Oktyabrskaya", + arr = {{"oktyabrskaya",3,"next_rechnaya"},{"oktyabrskaya",3,"next_nahimovskaya"}}, + dep = {"next_rechnaya2","next_nahimovskaya"}, + odz = "odz1", + }, + { + 116,"РечнаÑ","Rechnaya", + arr = {{"rechnaya",3,"next_proletarskaya"},{"rechnaya",3,"next_oktyabrskaya"}}, + arrlast = {"last_rechnaya"}, + dep = {"next_proletarskaya","next_oktyabrskaya"}, + odz = "odz1", + messagearr="%rÐа Ñтанции ведётÑÑ\nуÑтановка и наладка\nÑтанционных дверей.\n%rБудьте внимательны!\nÐекоторые двери\nмогут быть закрыты.", + right_doors = true, + }, + { + 117,"ПролетарÑкаÑ","Proletarskaya", + arr = {"last_proletarskaya"}, + arrlast = {"last_proletarskaya"}, + dep = {nil,"next_rechnaya2"}, + odz = "odz2", + }, + }, +}) + +Metrostroi.StationConfigurations = { + [110] = + { + names = {"международнаÑ","Mezhdunarodnaya"}, + positions = { + {Vector(-3813, -2650, -14450),Angle(0,0,0)}, + } + }, + [111] = + { + names = {"парк культуры","Park Kultury"}, + positions = { + {Vector(15337, -182, -14138),Angle(0,0,0)}, + } + }, + [112] = + { + names = {"политехничеÑкаÑ","Politehnicheskaya"}, + positions = { + {Vector(728, -14830, -13537),Angle(0,0,0)}, + } + }, + [113] = + { + names = {"проÑпект Ñуворова","Prospekt Suvorova"}, + positions = { + {Vector(-8463, 13150, -13081),Angle(0,0,0)}, + } + }, + [114] = + { + names = {"нахимовÑкаÑ","Nahimovskaya"}, + positions = { + {Vector(-3096, -9736, -12483),Angle(0,0,0)}, + } + }, + [115] = + { + names = {"октÑбрьÑкаÑ","Oktyabrskaya"}, + positions = { + {Vector(-3609.804443, -10125.108398, -11879.468750),Angle(0,0,0)}, + } + }, + [116] = + { + names = {"речнаÑ","Rechnaya"}, + positions = { + {Vector(14482.483398, -3609.774170, -10715.968750),Angle(0,0,0)}, + } + }, + [117] = + { + names = {"пролетарÑкаÑ","Proletarskaya"}, + positions = { + {Vector(-15195.234375, -1370.885132, -9809.968750),Angle(0,0,0)}, + } + }, + + depot = { + names = {"депо"}, + positions = { + {Vector(-10921, -5384, -11111),Angle(0,0,0)}, + } + } +} \ No newline at end of file diff --git a/lua/metrostroi/maps/crossline_m12.lua b/lua/metrostroi/maps/crossline_m12.lua new file mode 100644 index 0000000..a72a58e --- /dev/null +++ b/lua/metrostroi/maps/crossline_m12.lua @@ -0,0 +1,817 @@ +local Map = game.GetMap():lower() or "" +if Map:find("gm_metro_crossline_m") then + Metrostroi.PlatformMap = "gm_metro_crossline" + Metrostroi.CurrentMap = "gm_metro_crossline" +else + return +end +Metrostroi.AddPassSchemeTex("717_new","1 Line",{ + "models/metrostroi_schemes/map_1", +}) +Metrostroi.AddPassSchemeTex("720","Crossline",{ + "metrostroi_skins/81-720_schemes/crossline", + "metrostroi_skins/81-720_schemes/crossliner", +}) +Metrostroi.AddPassSchemeTex("722","Crossline",{ + "metrostroi_skins/81-722_schemes/crossline", + "metrostroi_skins/81-722_schemes/crossliner", +}) +Metrostroi.AddLastStationTex("702",909,"models/metrostroi_schemes/destination_table_black/label_mezhdunarodnaya") +Metrostroi.AddLastStationTex("702",914,"models/metrostroi_schemes/destination_table_black/label_oktyabrskaya") +Metrostroi.AddLastStationTex("702",915,"models/metrostroi_schemes/destination_table_black/label_rechnaya") +Metrostroi.AddLastStationTex("702",916,"models/metrostroi_schemes/destination_table_black/label_proletarskaya") +Metrostroi.AddLastStationTex("710",909,"models/metrostroi_schemes/destination_table_white/label_mezhdunarodnaya") +Metrostroi.AddLastStationTex("710",914,"models/metrostroi_schemes/destination_table_white/label_oktyabrskaya") +Metrostroi.AddLastStationTex("710",915,"models/metrostroi_schemes/destination_table_white/label_rechnaya") +Metrostroi.AddLastStationTex("710",916,"models/metrostroi_schemes/destination_table_white/label_proletarskaya") +Metrostroi.AddLastStationTex("717",909,"models/metrostroi_schemes/destination_table_white/label_mezhdunarodnaya") +Metrostroi.AddLastStationTex("717",914,"models/metrostroi_schemes/destination_table_white/label_oktyabrskaya") +Metrostroi.AddLastStationTex("717",915,"models/metrostroi_schemes/destination_table_white/label_rechnaya") +Metrostroi.AddLastStationTex("717",916,"models/metrostroi_schemes/destination_table_white/label_proletarskaya") +Metrostroi.AddLastStationTex("720",909,"models/metrostroi_schemes/destination_table_white/label_mezhdunarodnaya") +Metrostroi.AddLastStationTex("720",914,"models/metrostroi_schemes/destination_table_white/label_oktyabrskaya") +Metrostroi.AddLastStationTex("720",915,"models/metrostroi_schemes/destination_table_white/label_rechnaya") +Metrostroi.AddLastStationTex("720",916,"models/metrostroi_schemes/destination_table_white/label_proletarskaya") +Metrostroi.TickerAdverts = { + "МЕТРОПОЛИТЕРИМЕÐИ ГÐРРИ ÐЬЮМÐÐРПРИГЛÐШÐЕТ ÐРРÐБОТУ РЕÐЛЬÐЕ МÐФЕÐЕСТОВ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,ТЕЛЕФОРДЛЯ СПРÐВОК 8 (800) 555-35-35", + "УВÐЖÐЕМЫЕ ПÐССÐЖИРЫ, ПРИ ВЫХОДЕ ИЗ ПОЕЗДÐ, ÐЕ ЗÐБЫВÐЙТЕ СВОИ ВЕЩИ", + "ЭЛЕКТРОДЕПО КРОССЛÐЙÐРПРИГЛÐШÐЕТ ÐРРÐБОТУ МОДЕЛЕРОВ ДЛЯ ПОСТРОЙКИ ЭЛЕКТРОДЕПО", + "СТÐÐЦИЯ РЕЧÐÐЯ ПРИГЛÐШÐЕТ ÐРРÐБОТУ МÐШИÐИСТОВ И ПОМОЩÐИКОВ МÐШИÐИСТРЭСКÐЛÐТОРÐ. ОПЛÐТР5 КУСОЧКОВ ÐОМЕРÐОГО.", + "ЭЛЕКТРОДЕПО КРОССЛÐЙРПРИГЛÐШÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВССССССССССССССССССССССССССССССССССССССССССССССССС", + ".", + "ЪЪъъЪЪЪъЪЪЪЪъъъЪЪЪЪЪъъЪЪъъЪЪЪъъЪЪъЪЪъЪъъЪЪЪЪъъъЪЪъъЪЪЪЪЪъъЪЪъъЪъЪЪЪЪЪъЪЪЪЪъъЪЪЪЪЪъъъЪЪъ", +} + + +Metrostroi.AddANSPAnnouncer("ASNP Boiko + Pyaseckaya",{ + asnp = true, + + click1 = {"subway_announcers/asnp/boiko_new/click1.mp3",0.5}, + click2 = {"subway_announcers/asnp/boiko_new/click2.mp3",0.3}, + click3 = {"subway_announcers/asnp/boiko_new/click3.mp3",0.3}, + + + announcer_ready = {"subway_announcers/asnp/boiko_new/announcer_ready.mp3",3.295479}, + doors_closing_m = {"subway_announcers/asnp/boiko_new/doors_closing.mp3",3.782542}, + deadlock_m = {"subway_announcers/asnp/boiko_new/spec_attention_deadlock.mp3",9.352500}, + exit_m = {"subway_announcers/asnp/boiko_new/spec_attention_exit.mp3",5.363563}, + handrails_m = {"subway_announcers/asnp/boiko_new/spec_attention_handrails.mp3",4.221854}, + last_m = {"subway_announcers/asnp/boiko_new/spec_attention_last.mp3",4.425625}, + objects_m = {"subway_announcers/asnp/boiko_new/spec_attention_objects.mp3",4.674771}, + politeness_m = {"subway_announcers/asnp/boiko_new/spec_attention_politeness.mp3",9.057104}, + things_m = {"subway_announcers/asnp/boiko_new/spec_attention_things.mp3",4.559146}, + train_depeat_m = {"subway_announcers/asnp/boiko_new/spec_attention_train_depeat.mp3",4.633417}, + train_stop_m = {"subway_announcers/asnp/boiko_new/spec_attention_train_stop.mp3",6.501979}, + station_m = {"subway_announcers/asnp/boiko_new/station.mp3",0.943438}, + train_goes_to_m = {"subway_announcers/asnp/boiko_new/train_goes_to.mp3",2.077708}, + + kirovskaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/kirovskaya.mp3",0.883667}, + mejdunarodnaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/mejdunarodnaya.mp3",1.206667}, + molodejnaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/molodejnaya.mp3",1.112917}, + nahimovskaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/nahimovskaya.mp3",1.097292}, + oktyabrskaya_arr_m = {"subway_announcers/asnp/boiko_new/crossline/1/oktyabrskaya_arr.mp3",5.656979}, + oktyabrskaya_next_m = {"subway_announcers/asnp/boiko_new/crossline/1/oktyabrskaya_next.mp3",1.124083}, + olimpiyskaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/olimpiyskaya.mp3",1.081750}, + park_kultury_m = {"subway_announcers/asnp/boiko_new/crossline/1/park_kultury.mp3",1.142833}, + politehnicheskaya_arr_m = {"subway_announcers/asnp/boiko_new/crossline/1/politehnicheskaya_arr.mp3",4.657938}, + politehnicheskaya_next_m = {"subway_announcers/asnp/boiko_new/crossline/1/politehnicheskaya_next.mp3",2.674708}, + proletarskaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/proletarskaya.mp3",1.060521}, + prospekt_suvorova_m = {"subway_announcers/asnp/boiko_new/crossline/1/prospekr_suvorova.mp3",1.244667}, + rechnaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/rechnaya.mp3",2.090708}, + spec_attention_politehnicheskaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/spec_attention_politehnicheskaya.mp3",10.516479}, + spec_attention_rechnaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/spec_attention_rechnaya.mp3",8.791000}, + kalininskaya_m = {"subway_announcers/asnp/boiko_new/crossline/2/kalininskaya.mp3",0.996938}, + pionerskaya_m = {"subway_announcers/asnp/boiko_new/crossline/2/pionerskaya.mp3",0.916688}, + politehnicheskaya2_arr_m = {"subway_announcers/asnp/boiko_new/crossline/2/politehnicheskaya_arr.mp3",3.165667}, + politehnicheskaya2_next_m = {"subway_announcers/asnp/boiko_new/crossline/2/politehnicheskaya_next.mp3",1.224833}, + timerazevskaya_m = {"subway_announcers/asnp/boiko_new/crossline/2/timerazevskaya.mp3",1.060000}, + vokzalnaya_arr_m = {"subway_announcers/asnp/boiko_new/crossline/2/vokzalnaya_arr.mp3",4.609771}, + vokzalnaya_next_m = {"subway_announcers/asnp/boiko_new/crossline/2/vokzalnaya_next.mp3",2.498896}, + + + doors_closing_f = {"subway_announcers/asnp/pyaseckaya/doors_closing.mp3",2.340813}, + deadlock_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_deadlock.mp3",10.501979}, + exit_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_exit.mp3",5.111104}, + handrails_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_handrails.mp3",4.675083}, + last_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_last.mp3",4.878542}, + objects_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_objects.mp3",5.323146}, + politeness_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_politeness.mp3",10.685375}, + things_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_things.mp3",5.144021}, + train_depeat_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_train_depeat.mp3",4.481875}, + train_stop_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_train_stop.mp3",6.395313}, + + + arr_kirovskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_kirovskaya.mp3",1.987917}, + arr_mejdunarodnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_mejdunarodnaya.mp3",2.185542}, + arr_molodejnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_molodejnaya.mp3",2.093146}, + arr_nahimovskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_nahimovskaya.mp3",2.171021}, + arr_oktyabrskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_oktyabrskaya.mp3",6.757750}, + arr_olimpiyskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_olimpiyskaya.mp3",2.338708}, + arr_park_kultury_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_park_kultury.mp3",2.171104}, + arr_politehnicheskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_politehnicheskaya_old.mp3",6.295417}, + arr_proletarskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_proletarskaya.mp3",2.334667}, + arr_prospekt_suvorova_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_prospekt_suvorova.mp3",2.538375}, + arr_rechnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_rechnaya.mp3",3.408208}, + mejdunarodnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/mejdunarodnaya.mp3",1.275063}, + molodejnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/molodejnaya.mp3",1.196188}, + next_kirovskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_kirovskaya.mp3",2.771500}, + next_mejdunarodnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_mejdunarodnaya.mp3",2.947417}, + next_molodejnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_molodejnaya.mp3",2.818333}, + next_nahimovskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_nahimovskaya.mp3",2.930021}, + next_oktyabrskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_oktyabrskaya.mp3",2.702000}, + next_olimpiyskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_olimpiyskaya.mp3",2.996396}, + next_park_kultury_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_park_kultury.mp3",2.954438}, + next_politehnicheskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_politehnicheskaya.mp3",4.652875}, + next_proletarskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_proletarskaya.mp3",2.964667}, + next_prospekt_suvorova_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_prospekt_suvorova.mp3",3.674854}, + next_rechnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_rechnaya.mp3",4.248000}, + oktyabrskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/oktyabrskaya.mp3",1.186063}, + olimpiyskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/olimpiyskaya.mp3",1.208104}, + politehnicheskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/politehnicheskaya.mp3",1.506854}, + spec_attemton_politehnicheskaya3_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/spec_attemton_politehnicheskaya3.mp3",12.349063}, + spec_rechnaya_doors_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/spec_rechnaya_doors.mp3",10.953646}, + to_molodejnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/to_molodejnaya.mp3",3.460771}, + to_oktyabrskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/to_oktyabrskaya.mp3",3.355125}, + to_olimpiyskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/to_olimpiyskaya.mp3",3.424896}, + to_politehnicheskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/to_politehnicheskaya.mp3",3.638792}, + to_rechnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/to_rechnaya.mp3",3.312688}, + arr_kalininskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/arr_kalininskaya.mp3",2.369042}, + arr_pionerskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/arr_pionerskaya.mp3",2.146000}, + arr_politehnicheskaya2_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/arr_politehnicheskaya.mp3",6.419542}, + arr_timerazevskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/arr_timerazevskaya.mp3",2.398271}, + arr_vokzalnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/arr_vokzalnaya.mp3",5.819833}, + next_kalininskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/next_kalininskaya.mp3",2.845229}, + next_pionerskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/next_pionerskaya.mp3",2.837875}, + next_politehnicheskaya2_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/next_politehnicheskaya.mp3",3.293792}, + next_timerazevskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/next_timerazevskaya.mp3",3.049167}, + next_vokzalnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/next_vokzalnaya.mp3",4.291833}, + politehnicheskaya2_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/politehnicheskaya.mp3",1.361250}, + timerazevskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/timerazevskaya.mp3",1.352604}, + to_vokzalnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/to_vokzalnaya.mp3",3.471125}, + vokzalnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/vokzalnaya.mp3",1.175854}, +},{ + { --МÐРШРУТ + LED = {5,4,4,4,5,4,4}, + Name = "Ð›Ð¸Ð½Ð¸Ñ 1", + spec_last = {"last_m",0.5,"things_m"}, + spec_last_f = {"last_f",0.5,"things_f"}, + spec_wait = {{"train_stop_m"},{"train_depeat_m"}}, + spec_wait_f = {{"train_stop_f"},{"train_depeat_f"}}, + Loop = false, + BlockDoors = true, + { + 909,"МеждународнаÑ", + arrlast = {nil,{"arr_mejdunarodnaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},"mejdunarodnaya_m"}, + dep = {{"doors_closing_m","park_kultury_m"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 910,"Парк Культуры", + arr = {{"station_m","park_kultury_m"},"arr_park_kultury_f"}, + dep = {{"doors_closing_m","politehnicheskaya_next_m",0.2,"politeness_m"},{"doors_closing_f","next_mejdunarodnaya_f",0.2,"politeness_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 911,"Политехнич.", + arr = {{"station_m","politehnicheskaya_arr_m",0.2,"things_m"},{"arr_politehnicheskaya_f",0.2,"objects_f"}}, + dep = {{"doors_closing_m","prospekt_suvorova_m"},{"doors_closing_f","next_park_kultury_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 912,"Пр. Суворова", + arr = {{"station_m","prospekt_suvorova_m",0.2,"objects_m"},{"station_m","prospekt_suvorova_m",0.2,"things_m"}}, + dep = {{"doors_closing_m","nahimovskaya_m"},{"doors_closing_m","politehnicheskaya_m"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 913,"ÐахимовÑкаÑ", + arr = {"arr_nahimovskaya_f",{"station_m","nahimovskaya_m"}}, + dep = {{"doors_closing_f","next_oktyabrskaya_f",0.2,"politeness_f"},{"doors_closing_m","prospekt_suvorova_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 914,"ОктÑбрьÑкаÑ", + arr = {"arr_oktyabrskaya_f",{"station_m","oktyabrskaya_arr_m",0.2,"exit_m"}}, + dep = {{"doors_closing_f","next_rechnaya_f","spec_rechnaya_doors_f"},{"doors_closing_m","nahimovskaya_m"}}, + arrlast = {{"arr_oktyabrskaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},{"station","oktyabrskaya_arr_m",0.5,"last_m",2,"things_m",2,"deadlock_m"},"oktyabrskaya_next_m"}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + not_last = {3,"train_goes_to_m","oktyabrskaya_next_m"}, + not_last_f = {3,"to_oktyabrskaya_f"}, + }, + { + 915,"РечнаÑ","Rechnaya", + arrlast = {{"arr_rechnaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},{"station","rechnaya_arr_m",0.5,"last_m",2,"things_m",2,"deadlock_m"},"rechnaya_m"}, + dep = {nil,{"doors_closing_m","oktyabrskaya_next_m",0.2}}, + not_last_f = {3,"to_rechnaya"}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + right_doors = true, + }, + }, +}) + +Metrostroi.AddANSPAnnouncer("RIU Boiko + Pyaseckaya",{ + riu = true, + + click1 = {"subway_announcers/riu/boiko_new/click1.mp3",0.5}, + click2 = {"subway_announcers/riu/boiko_new/click2.mp3",0.3}, + click3 = {"subway_announcers/riu/boiko_new/click3.mp3",0.3}, + click_start = {"subway_announcers/riu/boiko_new/click1.mp3",0.5}, + click_end = {"subway_announcers/riu/boiko_new/click3.mp3",0.3}, + + + announcer_ready = {"subway_announcers/riu/boiko_new/announcer_ready.mp3",3.785}, + doors_closing_m = {"subway_announcers/riu/boiko_new/doors_closing.mp3",5}, + deadlock_m = {"subway_announcers/riu/boiko_new/spec_attention_deadlock.mp3",9.608}, + exit_m = {"subway_announcers/riu/boiko_new/spec_attention_exit.mp3",5.985}, + handrails_m = {"subway_announcers/riu/boiko_new/spec_attention_handrails.mp3",4.929}, + last_m = {"subway_announcers/riu/boiko_new/spec_attention_last.mp3",4.556}, + objects_m = {"subway_announcers/riu/boiko_new/spec_attention_objects.mp3",5.278}, + politeness_m = {"subway_announcers/riu/boiko_new/spec_attention_politeness.mp3",10.335}, + things_m = {"subway_announcers/riu/boiko_new/spec_attention_things.mp3",5.101}, + train_depeat_m = {"subway_announcers/riu/boiko_new/spec_attention_train_depeat.mp3",5.209}, + train_stop_m = {"subway_announcers/riu/boiko_new/spec_attention_train_stop.mp3",7.370}, + station_m = {"subway_announcers/riu/boiko_new/station.mp3",1.2}, + train_goes_to_m = {"subway_announcers/riu/boiko_new/train_goes_to.mp3",2.540}, + + kirovskaya_m = {"subway_announcers/riu/boiko_new/crossline/1/kirovskaya.mp3",1.159252}, + mejdunarodnaya_m = {"subway_announcers/riu/boiko_new/crossline/1/mejdunarodnaya.mp3",1.402086}, + molodejnaya_m = {"subway_announcers/riu/boiko_new/crossline/1/molodejnaya.mp3",1.093787}, + nahimovskaya_m = {"subway_announcers/riu/boiko_new/crossline/1/nahimovskaya.mp3",1.307188}, + oktyabrskaya_arr_m = {"subway_announcers/riu/boiko_new/crossline/1/oktyabrskaya_arr.mp3",3.624490}, + oktyabrskaya_next_m = {"subway_announcers/riu/boiko_new/crossline/1/oktyabrskaya_next.mp3",1.380862}, + olimpiyskaya_m = {"subway_announcers/riu/boiko_new/crossline/1/olimpiyskaya.mp3",1.371542}, + park_kultury_m = {"subway_announcers/riu/boiko_new/crossline/1/park_kultury.mp3",1.379252}, + politehnicheskaya_m = {"subway_announcers/riu/boiko_new/crossline/1/politehnicheskaya.mp3",1.459274}, + politehnicheskaya_arr_m = {"subway_announcers/riu/boiko_new/crossline/1/politehnicheskaya_arr.mp3",5.036077}, + politehnicheskaya_next_m = {"subway_announcers/riu/boiko_new/crossline/1/politehnicheskaya_next.mp3",2.939342}, + proletarskaya_m = {"subway_announcers/riu/boiko_new/crossline/1/proletarskaya.mp3",1.282245}, + prospekt_suvorova_m = {"subway_announcers/riu/boiko_new/crossline/1/prospekr_suvorova.mp3",1.972812}, + rechnaya_m = {"subway_announcers/riu/boiko_new/crossline/1/rechnaya.mp3",1.033628}, + rechnaya_arr_m = {"subway_announcers/riu/boiko_new/crossline/1/rechnaya_arr.mp3",2.607868}, + spec_attention_politehnicheskaya_m = {"subway_announcers/riu/boiko_new/crossline/1/spec_attention_politehnicheskaya.mp3",12.280635}, + spec_attention_rechnaya_m = {"subway_announcers/riu/boiko_new/crossline/1/spec_attention_rechnaya.mp3",10.942902}, + kalininskaya_m = {"subway_announcers/riu/boiko_new/crossline/2/kalininskaya.mp3",1.189909}, + pionerskaya_m = {"subway_announcers/riu/boiko_new/crossline/2/pionerskaya.mp3",1.110431}, + + doors_closing_f = {"subway_announcers/riu/pyaseckaya/doors_closing.mp3",2.994}, + deadlock_f = {"subway_announcers/riu/pyaseckaya/spec_attention_deadlock.mp3",10.133}, + exit_f = {"subway_announcers/riu/pyaseckaya/spec_attention_exit.mp3",5.466}, + handrails_f = {"subway_announcers/riu/pyaseckaya/spec_attention_handrails.mp3",4.744}, + last_f = {"subway_announcers/riu/pyaseckaya/spec_attention_last.mp3",4.506}, + objects_f = {"subway_announcers/riu/pyaseckaya/spec_attention_objects.mp3",5.219}, + politeness_f = {"subway_announcers/riu/pyaseckaya/spec_attention_politeness.mp3",10.221}, + things_f = {"subway_announcers/riu/pyaseckaya/spec_attention_things.mp3",5.154}, + train_depeat_f = {"subway_announcers/riu/pyaseckaya/spec_attention_train_depeat.mp3",4.829}, + train_stop_f = {"subway_announcers/riu/pyaseckaya/spec_attention_train_stop.mp3",7.240}, + + arr_kirovskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_kirovskaya.mp3",2.004694}, + arr_mejdunarodnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_mejdunarodnaya.mp3",2.188118}, + arr_molodejnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_molodejnaya.mp3",1.969433}, + arr_nahimovskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_nahimovskaya.mp3",2.300317}, + arr_oktyabrskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_oktyabrskaya.mp3",4.212676}, + arr_olimpiyskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_olimpiyskaya.mp3",2.282313}, + arr_park_kultury_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_park_kultury.mp3",2.156463}, + arr_politehnicheskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_politehnicheskaya_old.mp3",6.628639}, + arr_politehnicheskaya_old_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_politehnicheskaya_old.mp3",4.201995}, + arr_proletarskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_proletarskaya.mp3",2.275125}, + arr_prospekt_suvorova_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_prospekt_suvorova.mp3",2.518776}, + arr_rechnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_rechnaya.mp3",3.470952}, + mejdunarodnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/mejdunarodnaya.mp3",1.218481}, + molodejnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/molodejnaya.mp3",1.175714}, + next_kirovskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_kirovskaya.mp3",3.130476}, + next_mejdunarodnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_mejdunarodnaya.mp3",3.000000}, + next_molodejnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_molodejnaya.mp3",3.188957}, + next_nahimovskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_nahimovskaya.mp3",3.020159}, + next_oktyabrskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_oktyabrskaya.mp3",2.734263}, + next_olimpiyskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_olimpiyskaya.mp3",3.175488}, + next_park_kultury_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_park_kultury.mp3",2.934172}, + next_politehnicheskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_politehnicheskaya.mp3",4.616077}, + next_proletarskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_proletarskaya.mp3",2.969206}, + next_prospekt_suvorova_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_prospekt_suvorova.mp3",3.677937}, + next_rechnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_rechnaya.mp3",4.450204}, + oktyabrskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/oktyabrskaya.mp3",1.186236}, + olimpiyskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/olimpiyskaya.mp3",1.237823}, + politehnicheskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/politehnicheskaya.mp3",1.425170}, + rechnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/rechnaya.mp3",1.073265}, + spec_attemton_politehnicheskaya3_f = {"subway_announcers/riu/pyaseckaya/crossline/1/spec_attemton_politehnicheskaya3.mp3",13.328209}, + spec_rechnaya_doors_f = {"subway_announcers/riu/pyaseckaya/crossline/1/spec_rechnaya_doors.mp3",11.516440}, + to_molodejnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/to_molodejnaya.mp3",3.633515}, + to_oktyabrskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/to_oktyabrskaya.mp3",3.345057}, + to_olimpiyskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/to_olimpiyskaya.mp3",3.568209}, + to_politehnicheskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/to_politehnicheskaya.mp3",3.683401}, + to_rechnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/to_rechnaya.mp3",3.336893}, +},{ + { --МÐРШРУТ + LED = {5,4,4,4,5,4,2,2}, + Name = "Ð›Ð¸Ð½Ð¸Ñ 1", + NameEn = "Line 1", + spec_last = {"last_m",0.5,"things_m"}, + spec_last_f = {"last_f",0.5,"things_f"}, + spec_wait = {{"train_stop_m"},{"train_depeat_m"}}, + spec_wait_f = {{"train_stop_f"},{"train_depeat_f"}}, + Loop = false, + BlockDoors = true, + { + 909,"МеждународнаÑ","Mezhdunarod.", + arrlast = {nil,{"arr_mejdunarodnaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},"mejdunarodnaya_m"}, + dep = {{"doors_closing_m","park_kultury_m"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 910,"Парк Культуры","Park Kultury", + arr = {{"station_m","park_kultury_m"},"arr_park_kultury_f"}, + dep = {{"doors_closing_m","politehnicheskaya_next_m",0.2,"politeness_m"},{"doors_closing_f","next_mejdunarodnaya_f",0.2,"politeness_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 911,"Политехнич.","Politehnich.", + arr = {{"station_m","politehnicheskaya_arr_m",0.2,"things_m"},{"arr_politehnicheskaya_f",0.2,"objects_f"}}, + dep = {{"doors_closing_m","prospekt_suvorova_m"},{"doors_closing_f","next_park_kultury_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 912,"Пр. Суворова","Pr. Suvorova", + arr = {{"station_m","prospekt_suvorova_m",0.2,"objects_m"},{"station_m","prospekt_suvorova_m",0.2,"things_m"}}, + dep = {{"doors_closing_m","nahimovskaya_m"},{"doors_closing_m","politehnicheskaya_m"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 913,"ÐахимовÑкаÑ","Nahimovskaya", + arr = {"arr_nahimovskaya_f",{"station_m","nahimovskaya_m"}}, + dep = {{"doors_closing_f","next_oktyabrskaya_f",0.2,"politeness_f"},{"doors_closing_m","prospekt_suvorova_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 914,"ОктÑбрьÑкаÑ","Oktabrskaya", + arr = {"arr_oktyabrskaya_f",{"station_m","oktyabrskaya_arr_m",0.2,"exit_m"}}, + dep = {{"doors_closing_f","next_rechnaya_f","spec_rechnaya_doors_f"},{"doors_closing_m","nahimovskaya_m"}}, + arrlast = {{"arr_oktyabrskaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},{"station","oktyabrskaya_arr_m",0.5,"last_m",2,"things_m",2,"deadlock_m"},"oktyabrskaya_next_m"}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + not_last = {3,"train_goes_to_m","oktyabrskaya_next_m"}, + not_last_f = {3,"to_oktyabrskaya_f"}, + }, + { + 915,"РечнаÑ","Rechnaya", + arrlast = {{"arr_rechnaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},{"station","rechnaya_arr_m",0.5,"last_m",2,"things_m",2,"deadlock_m"},"rechnaya_m"}, + dep = {nil,{"doors_closing_m","oktyabrskaya_next_m",0.2}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + not_last_f = {3,"to_rechnaya"}, + right_doors = true, + }, + }, +}) +Metrostroi.SetRRIAnnouncer({ + click_end = {"subway_announcers/rri/boiko/spec/click_end.mp3",0.1}, + click_start = {"subway_announcers/rri/boiko/spec/click_start.mp3",0.1}, + last = {"subway_announcers/rri/boiko/spec/last.mp3",22.264354}, + exit = {"subway_announcers/rri/boiko/spec/spec_attention_exit.mp3",5.446236}, + handrails = {"subway_announcers/rri/boiko/spec/spec_attention_handrails.mp3",4.594558}, + objects = {"subway_announcers/rri/boiko/spec/spec_attention_objects.mp3",5.143175}, + things = {"subway_announcers/rri/boiko/spec/spec_attention_things.mp3",05.093}, + politeness = {"subway_announcers/rri/boiko/spec/spec_attention_politeness.mp3",11.457075}, + train_depeat = {"subway_announcers/rri/boiko/spec/spec_attention_train_depeat.mp3",4.842222}, + train_stop = {"subway_announcers/rri/boiko/spec/spec_attention_train_stop.mp3",6.963424}, + + arr_kirovskaya = {"subway_announcers/rri/boiko/crossline/1/arr_kirovskaya.mp3",2.121701}, + arr_mejdunarodnaya = {"subway_announcers/rri/boiko/crossline/1/arr_mejdunarodnaya.mp3",2.160771}, + arr_molodejnaya = {"subway_announcers/rri/boiko/crossline/1/arr_molodejnaya.mp3",2.291270}, + arr_nahimovskaya = {"subway_announcers/rri/boiko/crossline/1/arr_nahimovskaya.mp3",2.197279}, + arr_oktyabrskaya = {"subway_announcers/rri/boiko/crossline/1/arr_oktyabrskaya.mp3",4.348}, + arr_olimpiyskaya = {"subway_announcers/rri/boiko/crossline/1/arr_olimpiyskaya.mp3",1.951587}, + arr_park_kultury = {"subway_announcers/rri/boiko/crossline/1/arr_park_kultury.mp3",2.079796}, + --arr_politehnicheskaya = {"subway_announcers/rri/boiko/crossline/1/arr_politehnicheskaya.mp3",5.529909}, + arr_politehnicheskaya = {"subway_announcers/rri/boiko/crossline/1/arr_politehnicheskaya2.mp3",4}, + arr_proletarskaya = {"subway_announcers/rri/boiko/crossline/1/arr_proletarskaya.mp3",2.057959}, + arr_prospekt_suvorova = {"subway_announcers/rri/boiko/crossline/1/arr_prospekt_suvorova.mp3",3.038118}, + arr_rechnaya = {"subway_announcers/rri/boiko/crossline/1/arr_rechnaya.mp3",3.004853}, + next_kirovskaya = {"subway_announcers/rri/boiko/crossline/1/next_kirovskaya.mp3",5.574558}, + next_mejdunarodnaya = {"subway_announcers/rri/boiko/crossline/1/next_mejdunarodnaya.mp3",5.155261}, + next_molodejnaya = {"subway_announcers/rri/boiko/crossline/1/next_molodejnaya.mp3",5.864898}, + next_nahimovskaya = {"subway_announcers/rri/boiko/crossline/1/next_nahimovskaya.mp3",5.102834}, + next_oktyabrskaya = {"subway_announcers/rri/boiko/crossline/1/next_oktyabrskaya.mp3",5.102834}, + next_olimpiyskaya = {"subway_announcers/rri/boiko/crossline/1/next_olimpiyskaya.mp3",5.038776}, + next_park_kultury = {"subway_announcers/rri/boiko/crossline/1/next_park_kultury.mp3",5.226780}, + next_politehnicheskaya = {"subway_announcers/rri/boiko/crossline/1/next_politehnicheskaya.mp3",5.088367}, + next_proletarskaya = {"subway_announcers/rri/boiko/crossline/1/next_proletarskaya.mp3",5.155193}, + next_prospekt_suvorova = {"subway_announcers/rri/boiko/crossline/1/next_prospekt_suvorova.mp3",6.172585}, + next_rechnaya = {"subway_announcers/rri/boiko/crossline/1/next_rechnaya.mp3",6.388458}, + spec_politehnicheskaya = {"subway_announcers/rri/boiko/crossline/1/spec_politehnicheskaya.mp3",11.393311}, + spec_rechnaya_doors = {"subway_announcers/rri/boiko/crossline/1/spec_rechnaya_doors.mp3",9.786349}, + to_molodejnaya = {"subway_announcers/rri/boiko/crossline/1/to_molodejnaya.mp3",4.925374}, + to_oktyabrskaya = {"subway_announcers/rri/boiko/crossline/1/to_oktyabrskaya.mp3",4.578889}, + to_olimpiyskaya = {"subway_announcers/rri/boiko/crossline/1/to_olimpiyskaya.mp3",4.639796}, + to_politehnicheskaya = {"subway_announcers/rri/boiko/crossline/1/to_politehnicheskaya.mp3",4.665238}, + to_rechnaya = {"subway_announcers/rri/boiko/crossline/1/to_rechnaya.mp3",4.470000}, + arr_kalininskaya = {"subway_announcers/rri/boiko/crossline/2/arr_kalininskaya.mp3",2.158163}, + arr_pionerskaya = {"subway_announcers/rri/boiko/crossline/2/arr_pionerskaya.mp3",2.090045}, + arr_politehnicheskaya2 = {"subway_announcers/rri/boiko/crossline/2/arr_politehnicheskaya.mp3",5.491179}, + arr_timeryazevskaya = {"subway_announcers/rri/boiko/crossline/2/arr_timeryazevskaya.mp3",2.062154}, + arr_vokzalnaya = {"subway_announcers/rri/boiko/crossline/2/arr_vokzalnaya.mp3",6.513039}, + next_kalininskaya = {"subway_announcers/rri/boiko/crossline/2/next_kalininskaya.mp3",5.364104}, + next_pionerskaya = {"subway_announcers/rri/boiko/crossline/2/next_pionerskaya.mp3",5.116485}, + next_politehnicheskaya2 = {"subway_announcers/rri/boiko/crossline/2/next_politehnicheskaya.mp3",7.010385}, + next_timeryazevskaya = {"subway_announcers/rri/boiko/crossline/2/next_timeryazevskaya.mp3",5.356667}, + next_vokzalnaya = {"subway_announcers/rri/boiko/crossline/2/next_vokzalnaya.mp3",5.007256}, + to_vokzalnaya = {"subway_announcers/rri/boiko/crossline/2/to_vokzalnaya.mp3",4.658980}, +},{ + { + Name = "Line 1", + spec_last = {"last"}, + spec_wait = {{"train_stop"},{"train_depeat"}}, + BlockDoors = true, + { + 909,"Mezhdunarod.", + arrlast = {nil,{"arr_mejdunarodnaya",0.5,"last"}}, + dep = {"next_park_kultury"}, + }, + { + 910,"Park Kultury", + arr = {"arr_park_kultury","arr_park_kultury"}, + dep = {{"next_politehnicheskaya",0.2,"politeness"},{"next_mejdunarodnaya",0.2,"politeness"}}, + }, + { + 911,"Politehnich.", + arr = {{"arr_politehnicheskaya",0.2,"things"},{"arr_politehnicheskaya",0.2,"objects"}}, + dep = {"next_prospekt_suvorova","next_park_kultury"}, + }, + { + 912,"Pr. Suvorova", + arr = {{"arr_prospekt_suvorova",0.2,"objects"},{"arr_prospekt_suvorova",0.2,"things"}}, + dep = {"next_nahimovskaya","next_politehnicheskaya"}, + }, + { + 913,"Nahimovskaya", + arr = {"arr_nahimovskaya","arr_nahimovskaya"}, + dep = {{"next_oktyabrskaya",0.2,"politeness"},"next_prospekt_suvorova"}, + }, + { + 914,"Oktabrskaya", + arr = {"arr_oktyabrskaya",{"arr_oktyabrskaya",0.2,"exit"}}, + dep = {{"next_rechnaya",0.5,"spec_rechnaya_doors"},"next_nahimovskaya"}, + arrlast = {{"arr_oktyabrskaya",0.5,"last"},{"arr_oktyabrskaya",0.5,"last"}}, + not_last = {3,"to_oktyabrskaya"} + }, + { + 915,"Rechnaya", + --arr = {"arr_rechnaya","arr_rechnaya"}, + arrlast = {{"arr_rechnaya",0.5,"last"},nil}, + dep = {nil,{"next_oktyabrskaya",0.2,"politeness"}}, + not_last = {3,"to_rechnaya"}, + right_doors = true, + }, + } +}) +Metrostroi.SetUPOAnnouncer({ + name = "UPO RHINO", + tone = {"subway_announcers/upo/rhino/crossline/tone.mp3", 1.2}, + click1 = {"subway_announcers/upo/click1.mp3", 0.3}, + click2 = {"subway_announcers/upo/click2.mp3", 0.1}, + proletarskaya = {"subway_announcers/upo/rhino/crossline/proletarskaya.mp3",0.809100}, + next_proletarskaya = {"subway_announcers/upo/rhino/crossline/next_proletarskaya.mp3",1.853100}, + last_proletarskaya = {"subway_announcers/upo/rhino/crossline/last_proletarskaya.mp3",9.625000}, + + --olimpiyskaya = {"subway_announcers/upo/rhino/crossline/olimpiyskaya.mp3",0.835200}, + --next_olimpiyskaya = {"subway_announcers/upo/rhino/crossline/next_olimpiyskaya.mp3",1.800900}, + --last_olimpiyskaya = {"subway_announcers/upo/rhino/crossline/last_olimpiyskaya.mp3",9.735300}, + + --kirovskaya = {"subway_announcers/upo/rhino/crossline/kirovskaya.mp3",0.678600}, + --next_kirovskaya = {"subway_announcers/upo/rhino/crossline/next_kirovskaya.mp3",1.644300}, + + --molodejnaya = {"subway_announcers/upo/rhino/crossline/molodejnaya.mp3",0.704700}, + --next_molodejnaya = {"subway_announcers/upo/rhino/crossline/next_molodejnaya.mp3",1.696500}, + --last_molodejnaya = {"subway_announcers/upo/rhino/crossline/last_molodejnaya.mp3",10.100700}, + + mejdunarodnaya = {"subway_announcers/upo/rhino/crossline/mejdunarodnaya.mp3",1.017900}, + next_mejdunarodnaya = {"subway_announcers/upo/rhino/crossline/next_mejdunarodnaya.mp3",1.800900}, + last_mejdunarodnaya = {"subway_announcers/upo/rhino/crossline/last_mejdunarodnaya.mp3",9.709200}, + + park_kultury = {"subway_announcers/upo/rhino/crossline/park_kultury.mp3",0.887400}, + next_park_kultury = {"subway_announcers/upo/rhino/crossline/next_park_kultury.mp3",1.827000}, + + politehnicheskaya = {"subway_announcers/upo/rhino/crossline/politehnicheskaya.mp3",0.965700}, + next_politehnicheskaya = {"subway_announcers/upo/rhino/crossline/next_politehnicheskaya.mp3",2.035800}, + + prospekt_suvorova = {"subway_announcers/upo/rhino/crossline/prospekt_suvorova.mp3",1.044000}, + next_prospekt_suvorova = {"subway_announcers/upo/rhino/crossline/next_prospekt_suvorova.mp3",2.009700}, + + nahimovskaya = {"subway_announcers/upo/rhino/crossline/nahimovskaya.mp3",0.861300}, + next_nahimovskaya = {"subway_announcers/upo/rhino/crossline/next_nahimovskaya.mp3",1.853100}, + + oktyabrskaya = {"subway_announcers/upo/rhino/crossline/oktyabrskaya.mp3",0.835200}, + next_oktyabrskaya = {"subway_announcers/upo/rhino/crossline/next_oktyabrskaya.mp3",1.879200}, + + rechnaya = {"subway_announcers/upo/rhino/crossline/rechnaya.mp3",0.678600}, + next_rechnaya = {"subway_announcers/upo/rhino/crossline/next_rechnaya.mp3",10.727100}, + next_rechnaya1 = {"subway_announcers/upo/rhino/crossline/next_rechnaya1.mp3",1.722600}, + last_rechnaya = {"subway_announcers/upo/rhino/crossline/last_rechnaya.mp3",10.727100}, + + spec_attention_handrails = {"subway_announcers/upo/rhino/crossline/spec_attention_handrails.mp3",3.967200}, + spec_attention_politeness = {"subway_announcers/upo/rhino/crossline/spec_attention_politeness.mp3",5.533200}, + + odz1 = {"subway_announcers/upo/rhino/crossline/odz1.mp3",2.02 + 0.3}, + odz2 = {"subway_announcers/upo/rhino/crossline/odz2.mp3",2.117 + 0.3}, +},{ + { + 909,"МеждународнаÑ", + arrlast = {nil,"last_mejdunarodnaya"}, + dep = {{"odz2","next_park_kultury"}}, + noises = {2,3},noiserandom = 0.08,dist=20, + }, + { + 910,"Парк Культуры", + arr = {{"park_kultury",3,"next_politehnicheskaya"},{"park_kultury",3,"next_mejdunarodnaya","spec_attention_politeness"}}, + dep = {{"odz1","next_politehnicheskaya"},{"odz2","next_mejdunarodnaya"}}, + noises = {1,2},noiserandom = 0.12,dist=20, + }, + { + 911,"ПолитехничеÑкаÑ", + arr = {{"politehnicheskaya",3,"next_prospekt_suvorova","spec_attention_politeness"},{"politehnicheskaya",3,"next_park_kultury","spec_attention_handrails"}}, + dep = {{"odz2","next_prospekt_suvorova"},{"odz1","next_park_kultury"}}, + noises = {3},noiserandom = 0.05,dist=20, + }, + { + 912,"Пр. Суворова", + arr = {{"prospekt_suvorova",3,"next_nahimovskaya","spec_attention_handrails"},{"prospekt_suvorova",3,"next_politehnicheskaya"}}, + dep = {{"odz2","next_nahimovskaya"},{"odz2","next_politehnicheskaya"}}, + noises = {1,3},noiserandom = 0.4,dist=20, + }, + { + 913,"ÐахимовÑкаÑ", + arr = {{"nahimovskaya",3,"next_oktyabrskaya","spec_attention_politeness"},{"nahimovskaya",3,"next_prospekt_suvorova","spec_attention_politeness"}}, + dep = {{"odz1","next_oktyabrskaya"},{"odz1","next_prospekt_suvorova"}}, + noises = {1,2,3},noiserandom = 0.02,dist=20, + }, + { + 914,"ОктÑбрьÑкаÑ", + arr = {{"oktyabrskaya",3,"next_rechnaya"},{"oktyabrskaya",3,"next_nahimovskaya"}}, + dep = {{"odz1","next_rechnaya1"},{"odz2","next_nahimovskaya"}}, + noises = {1,2},noiserandom = 0.2,dist=20, + }, + { + 915,"РечнаÑ", + arr = {"last_rechnaya"}, + dep = {nil,{"odz2","next_oktyabrskaya"}}, + noises = {1,3},noiserandom = 0.08,dist=20, + }, +}) +--[[Metrostroi.AddSarmatUPOAnnouncer("UPO RHINO",{ + tone = {"subway_announcers/sarmat_upo/tone.mp3",1}, + proletarskaya = {"subway_announcers/sarmat_upo/rhino/crossline/proletarskaya.mp3",0.809100}, + next_proletarskaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_proletarskaya.mp3",1.853100}, + last_proletarskaya = {"subway_announcers/sarmat_upo/rhino/crossline/last_proletarskaya.mp3",9.619000}, + + --olimpiyskaya = {"subway_announcers/sarmat_upo/rhino/crossline/olimpiyskaya.mp3",0.835200}, + --next_olimpiyskaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_olimpiyskaya.mp3",1.800900}, + --last_olimpiyskaya = {"subway_announcers/sarmat_upo/rhino/crossline/last_olimpiyskaya.mp3",9.735300}, + + --kirovskaya = {"subway_announcers/sarmat_upo/rhino/crossline/kirovskaya.mp3",0.678600}, + --next_kirovskaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_kirovskaya.mp3",1.644300}, + + --molodejnaya = {"subway_announcers/sarmat_upo/rhino/crossline/molodejnaya.mp3",0.704700}, + --next_molodejnaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_molodejnaya.mp3",1.696500}, + --last_molodejnaya = {"subway_announcers/sarmat_upo/rhino/crossline/last_molodejnaya.mp3",10.100700}, + + mejdunarodnaya = {"subway_announcers/sarmat_upo/rhino/crossline/mejdunarodnaya.mp3",1.017900}, + next_mejdunarodnaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_mejdunarodnaya.mp3",1.800900}, + last_mejdunarodnaya = {"subway_announcers/sarmat_upo/rhino/crossline/last_mejdunarodnaya.mp3",9.709200}, + + park_kultury = {"subway_announcers/sarmat_upo/rhino/crossline/park_kultury.mp3",0.887400}, + next_park_kultury = {"subway_announcers/sarmat_upo/rhino/crossline/next_park_kultury.mp3",1.827000}, + + politehnicheskaya = {"subway_announcers/sarmat_upo/rhino/crossline/politehnicheskaya.mp3",0.965700}, + next_politehnicheskaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_politehnicheskaya.mp3",2.035800}, + + prospekt_suvorova = {"subway_announcers/sarmat_upo/rhino/crossline/prospekt_suvorova.mp3",1.044000}, + next_prospekt_suvorova = {"subway_announcers/sarmat_upo/rhino/crossline/next_prospekt_suvorova.mp3",2.009700}, + + nahimovskaya = {"subway_announcers/sarmat_upo/rhino/crossline/nahimovskaya.mp3",0.861300}, + next_nahimovskaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_nahimovskaya.mp3",1.853100}, + + oktyabrskaya = {"subway_announcers/sarmat_upo/rhino/crossline/oktyabrskaya.mp3",0.835200}, + next_oktyabrskaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_oktyabrskaya.mp3",1.879200}, + + rechnaya = {"subway_announcers/sarmat_upo/rhino/crossline/rechnaya.mp3",0.678600}, + next_rechnaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_rechnaya.mp3",10.727100}, + next_rechnaya1 = {"subway_announcers/sarmat_upo/rhino/crossline/next_rechnaya1.mp3",1.722600}, + last_rechnaya = {"subway_announcers/sarmat_upo/rhino/crossline/last_rechnaya.mp3",10.727100}, + + spec_attention_handrails = {"subway_announcers/sarmat_upo/rhino/crossline/spec_attention_handrails.mp3",3.967200}, + spec_attention_politeness = {"subway_announcers/sarmat_upo/rhino/crossline/spec_attention_politeness.mp3",5.533200}, + + odz1 = {"subway_announcers/sarmat_upo/rhino/crossline/odz1.mp3",2.088000+0.3}, + odz2 = {"subway_announcers/sarmat_upo/rhino/crossline/odz2.mp3",2.192400+0.3}, +},{ + { --МÐРШРУТ + LED = {3,4,5,5,5,5,5}, + { + 909,"МеждународнаÑ", + arr = {nil,"last_mejdunarodnaya"}, + arrlast = {nil,"last_mejdunarodnaya"}, + dep = {"next_park_kultury"}, + odz = "odz1", + dist = 30, + }, + { + 910,"Парк Культуры", + arr = {{"park_kultury",3,"next_politehnicheskaya"},{"park_kultury",3,"next_mejdunarodnaya","spec_attention_politeness"}}, + dep = {"next_politehnicheskaya","next_mejdunarodnaya"}, + odz = "odz2", + dist = 30, + }, + { + 911,"ПолитехничеÑкаÑ", + arr = {{"politehnicheskaya",3,"next_prospekt_suvorova","spec_attention_politeness"},{"politehnicheskaya",3,"next_park_kultury","spec_attention_handrails"}}, + dep = {"next_prospekt_suvorova","next_park_kultury"}, + odz = "odz1", + dist = 30, + }, + { + 912,"Пр. Суворова", + arr = {{"prospekt_suvorova",3,"next_nahimovskaya","spec_attention_handrails"},{"prospekt_suvorova",3,"next_politehnicheskaya"}}, + dep = {"next_nahimovskaya","next_politehnicheskaya"}, + odz = "odz2", + dist = 30, + }, + { + 913,"ÐахимовÑкаÑ", + arr = {{"nahimovskaya",3,"next_oktyabrskaya","spec_attention_politeness"},{"nahimovskaya",3,"next_prospekt_suvorova","spec_attention_politeness"}}, + dep = {"next_oktyabrskaya","next_prospekt_suvorova"}, + odz = "odz1", + dist = 30, + }, + { + 914,"ОктÑбрьÑкаÑ", + arr = {{"oktyabrskaya",3,"next_rechnaya"},{"oktyabrskaya",3,"next_nahimovskaya"}}, + dep = {"next_rechnaya1","next_nahimovskaya"}, + odz = "odz2", + dist = 30, + }, + { + 915,"РечнаÑ", + arr = {"last_rechnaya"}, + arrlast = {"last_rechnaya"}, + dep = {nil,"next_oktyabrskaya"}, + odz = "odz1", + dist = 30, + }, + }, +})--]] +Metrostroi.AddSarmatUPOAnnouncer("UPO Artur",{ + tone = {"subway_announcers/sarmat_upo/tone.mp3",1}, + rechnaya = {"subway_announcers/sarmat_upo/crossline_artur/rechnaya.mp3",0.939271}, + last_rechnaya = {"subway_announcers/sarmat_upo/crossline_artur/last_rechnaya.mp3",12.962604}, + next_rechnaya = {"subway_announcers/sarmat_upo/crossline_artur/next_rechnaya1.mp3",12.384375}, + next_rechnaya2 = {"subway_announcers/sarmat_upo/crossline_artur/next_rechnaya2.mp3",1.720896}, + + oktyabrskaya = {"subway_announcers/sarmat_upo/crossline_artur/oktyabrskaya.mp3",1.144646}, + next_oktyabrskaya = {"subway_announcers/sarmat_upo/crossline_artur/next_oktyabrskaya.mp3",2.240396}, + + nahimovskaya = {"subway_announcers/sarmat_upo/crossline_artur/nahimovskaya.mp3",1.179146}, + next_nahimovskaya = {"subway_announcers/sarmat_upo/crossline_artur/next_nahimovskaya.mp3",2.466563}, + + prospekt_suvorova = {"subway_announcers/sarmat_upo/crossline_artur/prospekt_suvorova.mp3",1.566375}, + next_prospekt_suvorova = {"subway_announcers/sarmat_upo/crossline_artur/next_prospekt_suvorova.mp3",2.486813}, + + politehnicheskaya = {"subway_announcers/sarmat_upo/crossline_artur/politehnicheskaya.mp3",1.178271}, + next_politehnicheskaya = {"subway_announcers/sarmat_upo/crossline_artur/next_politehnicheskaya.mp3",2.400917}, + + park_kultury = {"subway_announcers/sarmat_upo/crossline_artur/park_kultury.mp3",1.285271}, + next_park_kultury = {"subway_announcers/sarmat_upo/crossline_artur/next_park_kultury.mp3",2.242479}, + + mejdunarodnaya = {"subway_announcers/sarmat_upo/crossline_artur/mejdunarodnaya.mp3",1.123333}, + next_mejdunarodnaya = {"subway_announcers/sarmat_upo/crossline_artur/next_mejdunarodnaya.mp3",2.360938}, + last_mejdunarodnaya = {"subway_announcers/sarmat_upo/crossline_artur/last_mejdunarodnaya.mp3",11.327729}, + --molodejnaya = {"subway_announcers/sarmat_upo/crossline_artur/molodejnaya.mp3",1.064354}, + --next_molodejnaya = {"subway_announcers/sarmat_upo/crossline_artur/next_molodejnaya.mp3",1.996167}, + --last_molodejnaya = {"subway_announcers/sarmat_upo/crossline_artur/last_molodejnaya.mp3",11.295438}, + --kirovskaya = {"subway_announcers/sarmat_upo/crossline_artur/kirovskaya.mp3",0.900000}, + --next_kirovskaya = {"subway_announcers/sarmat_upo/crossline_artur/next_kirovskaya.mp3",2.142271}, + --olimpiyskaya = {"subway_announcers/sarmat_upo/crossline_artur/olimpiyskaya.mp3",1.095958}, + --next_olimpiyskaya = {"subway_announcers/sarmat_upo/crossline_artur/next_olimpiyskaya.mp3",2.446542}, + --last_olimpiyskaya = {"subway_announcers/sarmat_upo/crossline_artur/last_olimpiyskaya.mp3",11.552521}, + proletarskaya = {"subway_announcers/sarmat_upo/crossline_artur/proletarskaya.mp3",1.111333}, + next_proletarskaya = {"subway_announcers/sarmat_upo/crossline_artur/next_proletarskaya.mp3",2.072313}, + last_proletarskaya = {"subway_announcers/sarmat_upo/crossline_artur/last_proletarskaya.mp3",11.298000}, + odz1 = {"subway_announcers/sarmat_upo/crossline_artur/odz.mp3",2.612750}, + odz2 = {"subway_announcers/sarmat_upo/crossline_artur/odz2.mp3",2.392542}, + spec_attention_handrails = {"subway_announcers/sarmat_upo/crossline_artur/spec_attention_handrails.mp3",3.972021}, + spec_attention_politeness = {"subway_announcers/sarmat_upo/crossline_artur/spec_attention_politeness.mp3",5.614417}, +},{ + { --МÐРШРУТ + LED = {3,4,5,5,5,5,3,2}, + { + 909,"МеждународнаÑ","Mezhdunarodnaya", + arr = {nil,"last_mejdunarodnaya"}, + arrlast = {nil,"last_mejdunarodnaya"}, + dep = {"next_park_kultury"}, + odz = "odz1", + }, + { + 910,"Парк Культуры","Park kultury", + arr = {{"park_kultury",3,"next_politehnicheskaya"},{"park_kultury",3,"next_mejdunarodnaya","spec_attention_politeness"}}, + dep = {"next_politehnicheskaya","next_mejdunarodnaya"}, + odz = "odz1", + }, + { + 911,"ПолитехничеÑкаÑ","Politehnicheskaya", + arr = {{"politehnicheskaya",3,"next_prospekt_suvorova","spec_attention_politeness"},{"politehnicheskaya",3,"next_park_kultury","spec_attention_handrails"}}, + dep = {"next_prospekt_suvorova","next_park_kultury"}, + odz = "odz2", + messagedep="%gУважаемые паÑÑажиры!\nВо изжежании травм,\nдержитеÑÑŒ за поручни.", + }, + { + 912,"Пр. Суворова","Pr. Suvorova", + arr = {{"prospekt_suvorova",3,"next_nahimovskaya","spec_attention_handrails"},{"prospekt_suvorova",3,"next_politehnicheskaya"}}, + dep = {"next_nahimovskaya","next_politehnicheskaya"}, + odz = "odz1", + }, + { + 913,"ÐахимовÑкаÑ","Nahimovskaya", + arr = {{"nahimovskaya",3,"next_oktyabrskaya","spec_attention_politeness"},{"nahimovskaya",3,"next_prospekt_suvorova","spec_attention_politeness"}}, + dep = {"next_oktyabrskaya","next_prospekt_suvorova"}, + odz = "odz2", + messagedep="%gУважаемые паÑÑажиры!\nВо изжежании травм,\nдержитеÑÑŒ за поручни.", + }, + { + 914,"ОктÑбрьÑкаÑ","Oktyabrskaya", + arr = {{"oktyabrskaya",3,"next_rechnaya"},{"oktyabrskaya",3,"next_nahimovskaya"}}, + dep = {"next_rechnaya2","next_nahimovskaya"}, + odz = "odz1", + }, + { + 915,"РечнаÑ","Rechnaya", + --arr = {{"rechnaya",3,"next_proletarskaya"},{"rechnaya",3,"next_oktyabrskaya"}}, + arrlast = {"last_rechnaya"}, + dep = {nil and "next_proletarskaya","next_oktyabrskaya"}, + odz = "odz1", + messagearr="%rÐа Ñтанции ведётÑÑ\nуÑтановка и наладка\nÑтанционных дверей.\n%rБудьте внимательны!\nÐекоторые двери\nмогут быть закрыты.", + right_doors = true, + }, + }, +}) + +Metrostroi.StationConfigurations = { + [909] = + { + names = {"международнаÑ","Mezhdunarodnaya"}, + positions = { + {Vector(-3813, -2650, -14450),Angle(0,0,0)}, + } + }, + [910] = + { + names = {"парк культуры","Park Kultury"}, + positions = { + {Vector(15337, -182, -14138),Angle(0,0,0)}, + } + }, + [911] = + { + names = {"политехничеÑкаÑ","Politehnicheskaya"}, + positions = { + {Vector(728, -14830, -13537),Angle(0,0,0)}, + } + }, + [912] = + { + names = {"проÑпект Ñуворова","Prospekt Suvorova"}, + positions = { + {Vector(-8463, 13150, -13081),Angle(0,0,0)}, + } + }, + [913] = + { + names = {"нахимовÑкаÑ","Nahimovskaya"}, + positions = { + {Vector(-3096, -9736, -12483),Angle(0,0,0)}, + } + }, + [914] = + { + names = {"октÑбрьÑкаÑ","Oktyabrskaya"}, + positions = { + {Vector(-3609.804443, -10125.108398, -11879.468750),Angle(0,0,0)}, + } + }, + [915] = + { + names = {"речнаÑ","Rechnaya"}, + positions = { + {Vector(14482.483398, -3609.774170, -10715.968750),Angle(0,0,0)}, + } + }, + [916] = + { + names = {"пролетарÑкаÑ","Proletarskaya"}, + positions = { + {Vector(-15195.234375, -1370.885132, -9809.968750),Angle(0,0,0)}, + } + }, + + depot = { + names = {"депо"}, + positions = { + {Vector(-10921, -5384, -11111),Angle(0,0,0)}, + } + } +} \ No newline at end of file diff --git a/lua/metrostroi/maps/crossline_r.lua b/lua/metrostroi/maps/crossline_r.lua new file mode 100644 index 0000000..28c3ff7 --- /dev/null +++ b/lua/metrostroi/maps/crossline_r.lua @@ -0,0 +1,964 @@ +local Map = game.GetMap() or "" + +if Map:find("gm_metro_crossline_r") then + Metrostroi.PlatformMap = "gm_metro_crossline" + Metrostroi.CurrentMap = "gm_metro_crossline" +else + return +end +Metrostroi.Skins["717_schemes"]["p"] = { + adv = "metrostroi_skins/81-717_schemes/int_orange_spb_adv", + clean = "metrostroi_skins/81-717_schemes/int_orange_spb_clean", +} +Metrostroi.Skins["717_schemes"]["m"] = { + adv = "metrostroi_skins/81-717_schemes/int_orange_msk_adv", + clean = "metrostroi_skins/81-717_schemes/int_orange_msk_noadv", +} +Metrostroi.AddPassSchemeTex("720","Crossline",{ + "metrostroi_skins/81-720_schemes/crossline", + "metrostroi_skins/81-720_schemes/crossliner", +}) +Metrostroi.AddPassSchemeTex("722","Crossline",{ + "metrostroi_skins/81-722_schemes/crossline", + "metrostroi_skins/81-722_schemes/crossliner", +}) +Metrostroi.AddLastStationTex("710",110,"metrostroi_skins/81-710_names/route_me") +Metrostroi.AddLastStationTex("710",115,"metrostroi_skins/81-710_names/route_oktober") +Metrostroi.AddLastStationTex("710",116,"metrostroi_skins/81-710_names/route_rechnaya") +Metrostroi.AddLastStationTex("720",110,"metrostroi_skins/81-720_names/label_mezhdunarodnaya") +Metrostroi.AddLastStationTex("720",115,"metrostroi_skins/81-720_names/label_okt") +Metrostroi.AddLastStationTex("720",116,"metrostroi_skins/81-720_names/label_rech") + +Metrostroi.TickerAdverts = { + "МЕТРОПОЛИТЕРИМЕÐИ ГÐРРИ ÐЬЮМÐÐРПРИГЛÐШÐЕТ ÐРРÐБОТУ РЕÐЛЬÐЕ МÐФЕÐЕСТОВ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,ТЕЛЕФОРДЛЯ СПРÐВОК 8 (800) 555-35-35", + "УВÐЖÐЕМЫЕ ПÐССÐЖИРЫ, ПРИ ВЫХОДЕ ИЗ ПОЕЗДÐ, ÐЕ ЗÐБЫВÐЙТЕ СВОИ ВЕЩИ", + "ЭЛЕКТРОДЕПО КРОССЛÐЙÐРПРИГЛÐШÐЕТ ÐРРÐБОТУ МОДЕЛЕРОВ ДЛЯ ПОСТРОЙКИ ЭЛЕКТРОДЕПО", + "СТÐÐЦИЯ РЕЧÐÐЯ ПРИГЛÐШÐЕТ ÐРРÐБОТУ МÐШИÐИСТОВ И ПОМОЩÐИКОВ МÐШИÐИСТРЭСКÐЛÐТОРÐ. ОПЛÐТР5 КУСОЧКОВ ÐОМЕРÐОГО.", + "ЭЛЕКТРОДЕПО КРОССЛÐЙРПРИГЛÐШÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВССССССССССССССССССССССССССССССССССССССССССССССССС", + ".", + "ЪЪъъЪЪЪъЪЪЪЪъъъЪЪЪЪЪъъЪЪъъЪЪЪъъЪЪъЪЪъЪъъЪЪЪЪъъъЪЪъъЪЪЪЪЪъъЪЪъъЪъЪЪЪЪЪъЪЪЪЪъъЪЪЪЪЪъъъЪЪъ", +} + +Metrostroi.AddANSPAnnouncer("ASNP Boiko + Pyaseckaya",{ + asnp = true, + click1 = {"subway_announcers/asnp/boiko_new/click1.mp3",0.367833}, + click2 = {"subway_announcers/asnp/boiko_new/click2.mp3",0.209688}, + click3 = {"subway_announcers/asnp/boiko_new/click3.mp3",0.203479}, + + + announcer_ready = {"subway_announcers/asnp/boiko_new/announcer_ready.mp3",3.295479}, + doors_closing_m = {"subway_announcers/asnp/boiko_new/doors_closing.mp3",3.782542}, + deadlock_m = {"subway_announcers/asnp/boiko_new/spec_attention_deadlock.mp3",9.352500}, + exit_m = {"subway_announcers/asnp/boiko_new/spec_attention_exit.mp3",5.363563}, + handrails_m = {"subway_announcers/asnp/boiko_new/spec_attention_handrails.mp3",4.221854}, + last_m = {"subway_announcers/asnp/boiko_new/spec_attention_last.mp3",4.425625}, + objects_m = {"subway_announcers/asnp/boiko_new/spec_attention_objects.mp3",4.674771}, + politeness_m = {"subway_announcers/asnp/boiko_new/spec_attention_politeness.mp3",9.057104}, + things_m = {"subway_announcers/asnp/boiko_new/spec_attention_things.mp3",4.559146}, + train_depeat_m = {"subway_announcers/asnp/boiko_new/spec_attention_train_depeat.mp3",4.633417}, + train_stop_m = {"subway_announcers/asnp/boiko_new/spec_attention_train_stop.mp3",6.501979}, + station_m = {"subway_announcers/asnp/boiko_new/station.mp3",0.943438}, + train_goes_to_m = {"subway_announcers/asnp/boiko_new/train_goes_to.mp3",2.077708}, + + kirovskaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/kirovskaya.mp3",0.883667}, + mejdunarodnaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/mejdunarodnaya.mp3",1.206667}, + molodejnaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/molodejnaya.mp3",1.112917}, + nahimovskaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/nahimovskaya.mp3",1.097292}, + oktyabrskaya_arr_m = {"subway_announcers/asnp/boiko_new/crossline/1/oktyabrskaya_arr.mp3",5.656979}, + oktyabrskaya_next_m = {"subway_announcers/asnp/boiko_new/crossline/1/oktyabrskaya_next.mp3",1.124083}, + olimpiyskaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/olimpiyskaya.mp3",1.081750}, + park_kultury_m = {"subway_announcers/asnp/boiko_new/crossline/1/park_kultury.mp3",1.142833}, + politehnicheskaya_arr_m = {"subway_announcers/asnp/boiko_new/crossline/1/politehnicheskaya_next.mp3",2.674708}, + --politehnicheskaya_arr_m = {"subway_announcers/asnp/boiko_new/crossline/1/politehnicheskaya_arr.mp3",4.657938}, + politehnicheskaya_next_m = {"subway_announcers/asnp/boiko_new/crossline/1/politehnicheskaya_next.mp3",2.674708}, + proletarskaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/proletarskaya.mp3",1.060521}, + prospekt_suvorova_m = {"subway_announcers/asnp/boiko_new/crossline/1/prospekr_suvorova.mp3",1.244667}, + rechnaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/rechnaya.mp3",2.090708}, + spec_attention_politehnicheskaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/spec_attention_politehnicheskaya.mp3",10.516479}, + spec_attention_rechnaya_m = {"subway_announcers/asnp/boiko_new/crossline/1/spec_attention_rechnaya.mp3",8.791000}, + kalininskaya_m = {"subway_announcers/asnp/boiko_new/crossline/2/kalininskaya.mp3",0.996938}, + pionerskaya_m = {"subway_announcers/asnp/boiko_new/crossline/2/pionerskaya.mp3",0.916688}, + politehnicheskaya2_arr_m = {"subway_announcers/asnp/boiko_new/crossline/2/politehnicheskaya_arr.mp3",3.165667}, + politehnicheskaya2_next_m = {"subway_announcers/asnp/boiko_new/crossline/2/politehnicheskaya_next.mp3",1.224833}, + timerazevskaya_m = {"subway_announcers/asnp/boiko_new/crossline/2/timerazevskaya.mp3",1.060000}, + vokzalnaya_arr_m = {"subway_announcers/asnp/boiko_new/crossline/2/vokzalnaya_arr.mp3",4.609771}, + vokzalnaya_next_m = {"subway_announcers/asnp/boiko_new/crossline/2/vokzalnaya_next.mp3",2.498896}, + + + doors_closing_f = {"subway_announcers/asnp/pyaseckaya/doors_closing.mp3",2.340813}, + deadlock_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_deadlock.mp3",10.501979}, + exit_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_exit.mp3",5.111104}, + handrails_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_handrails.mp3",4.675083}, + last_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_last.mp3",4.878542}, + objects_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_objects.mp3",5.323146}, + politeness_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_politeness.mp3",10.685375}, + things_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_things.mp3",5.144021}, + train_depeat_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_train_depeat.mp3",4.481875}, + train_stop_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_train_stop.mp3",6.395313}, + + + arr_kirovskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_kirovskaya.mp3",1.987917}, + arr_mejdunarodnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_mejdunarodnaya.mp3",2.185542}, + arr_molodejnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_molodejnaya.mp3",2.093146}, + arr_nahimovskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_nahimovskaya.mp3",2.171021}, + arr_oktyabrskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_oktyabrskaya.mp3",6.757750}, + arr_olimpiyskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_olimpiyskaya.mp3",2.338708}, + arr_park_kultury_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_park_kultury.mp3",2.171104}, + arr_politehnicheskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_politehnicheskaya_old.mp3",6.295417}, + arr_proletarskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_proletarskaya.mp3",2.334667}, + arr_prospekt_suvorova_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_prospekt_suvorova.mp3",2.538375}, + arr_rechnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/arr_rechnaya.mp3",3.408208}, + mejdunarodnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/mejdunarodnaya.mp3",1.275063}, + molodejnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/molodejnaya.mp3",1.196188}, + next_kirovskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_kirovskaya.mp3",2.771500}, + next_mejdunarodnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_mejdunarodnaya.mp3",2.947417}, + next_molodejnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_molodejnaya.mp3",2.818333}, + next_nahimovskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_nahimovskaya.mp3",2.930021}, + next_oktyabrskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_oktyabrskaya.mp3",2.702000}, + next_olimpiyskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_olimpiyskaya.mp3",2.996396}, + next_park_kultury_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_park_kultury.mp3",2.954438}, + next_politehnicheskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_politehnicheskaya.mp3",4.652875}, + next_proletarskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_proletarskaya.mp3",2.964667}, + next_prospekt_suvorova_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_prospekt_suvorova.mp3",3.674854}, + next_rechnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/next_rechnaya.mp3",4.248000}, + oktyabrskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/oktyabrskaya.mp3",1.186063}, + olimpiyskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/olimpiyskaya.mp3",1.208104}, + politehnicheskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/politehnicheskaya.mp3",1.506854}, + spec_attemton_politehnicheskaya3_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/spec_attemton_politehnicheskaya3.mp3",12.349063}, + spec_rechnaya_doors_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/spec_rechnaya_doors.mp3",10.953646}, + to_molodejnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/to_molodejnaya.mp3",3.460771}, + to_oktyabrskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/to_oktyabrskaya.mp3",3.355125}, + to_olimpiyskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/to_olimpiyskaya.mp3",3.424896}, + to_politehnicheskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/1/to_politehnicheskaya.mp3",3.638792}, + arr_kalininskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/arr_kalininskaya.mp3",2.369042}, + arr_pionerskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/arr_pionerskaya.mp3",2.146000}, + arr_politehnicheskaya2_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/arr_politehnicheskaya.mp3",6.419542}, + arr_timerazevskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/arr_timerazevskaya.mp3",2.398271}, + arr_vokzalnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/arr_vokzalnaya.mp3",5.819833}, + next_kalininskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/next_kalininskaya.mp3",2.845229}, + next_pionerskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/next_pionerskaya.mp3",2.837875}, + next_politehnicheskaya2_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/next_politehnicheskaya.mp3",3.293792}, + next_timerazevskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/next_timerazevskaya.mp3",3.049167}, + next_vokzalnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/next_vokzalnaya.mp3",4.291833}, + politehnicheskaya2_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/politehnicheskaya.mp3",1.361250}, + timerazevskaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/timerazevskaya.mp3",1.352604}, + to_vokzalnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/to_vokzalnaya.mp3",3.471125}, + vokzalnaya_f = {"subway_announcers/asnp/pyaseckaya/crossline/2/vokzalnaya.mp3",1.175854}, +},{ + { --МÐРШРУТ + LED = {5,4,4,4,5,4,4}, + Name = "Ð›Ð¸Ð½Ð¸Ñ 1", + spec_last = {"last_m",0.5,"things_m"}, + spec_wait = {{"train_stop_m"},{"train_depeat_m"}}, + Loop = false, + BlockDoors = true, + { + 110,"МеждународнаÑ", + arrlast = {nil,{"arr_mejdunarodnaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},"mejdunarodnaya_m"}, + dep = {{"doors_closing_m","park_kultury_m"}}, + }, + { + 111,"Парк Культуры", + arr = {{"station_m","park_kultury_m"},"arr_park_kultury_f"}, + dep = {{"doors_closing_m","politehnicheskaya_next_m",0.2,"politeness_m"},{"doors_closing_f","next_mejdunarodnaya_f",0.2,"politeness_f"}}, + not_last_c = {nil,"not_last_f"} + }, + { + 112,"Политехнич.", + arr = {{"station_m","politehnicheskaya_arr_m",0.2,"things_m"},{"arr_politehnicheskaya_f",0.2,"objects_f"}}, + dep = {{"doors_closing_m","prospekt_suvorova_m"},{"doors_closing_f","next_park_kultury_f"}}, + not_last_c = {nil,"not_last_f"}, + have_inrerchange = true, + right_doors=true, + }, + { + 113,"Пр. Суворова", + arr = {{"station_m","prospekt_suvorova_m"},{"arr_prospekt_suvorova_f"}}, + dep = {{"doors_closing_m","nahimovskaya_m"},{"doors_closing_f","next_politehnicheskaya_f"}}, + not_last_c = {nil,"not_last_f"} + }, + { + 114,"ÐахимовÑкаÑ", + arr = {{"station_m","nahimovskaya_m"},{"arr_nahimovskaya_f"}}, + dep = {{"doors_closing_m","oktyabrskaya_next_m"},{"doors_closing_f","next_prospekt_suvorova_f"}}, + not_last_c = {nil,"not_last_f"} + }, + { + 115,"ОктÑбрьÑкаÑ", + arr = {{"station_m","oktyabrskaya_arr_m"},{"arr_oktyabrskaya_f"}}, + dep = {{"doors_closing_m","rechnaya_m","spec_attention_rechnaya_m"},{"doors_closing_f","next_nahimovskaya_f"}}, + arrlast = {{"station_m","oktyabrskaya_arr_m",0.5,"last_m",2,"things_m",2,"deadlock_m"},{"arr_oktyabrskaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},"oktyabrskaya_next_m"}, + not_last = {3,"train_goes_to_m","oktyabrskaya_next_m"}, + not_last_f = {3,"to_oktyabrskaya_f"}, + not_last_c = {nil,"not_last_f"} + }, + { + 116,"РечнаÑ", + arr = {{"arr_rechnaya_f"},{"station_m","rechnaya_m"}}, + --arrlast = {{"station","oktyabrskaya_arr_m",0.5,"last_m",2,"things_m",2,"deadlock_m"},{"arr_oktyabrskaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},"oktyabrskaya_next_m"}, + --not_last = {3,"train_goes_to_m","rechnaya_m"}, + --not_last_f = {3,""}, + dep = {{"doors_closing_f","next_proletarskaya_f"},{"doors_closing_m","oktyabrskaya_next_m"}}, + not_last_c = {"not_last_f"}, + right_doors = true, + }, + { + 117,"ПролетарÑкаÑ", + arr = {{"arr_proletarskaya_f"},{"station_m","proletarskaya_m"}}, + dep = {{"doors_closing_f","next_olimpiyskaya_f"},{"doors_closing_m","rechnaya_m"}}, + not_last_c = {"not_last_f"}, + }, + { + 118,"ОлимпийÑкаÑ", + arr = {{"arr_olimpiyskaya_f"},{"station_m","olimpiyskaya_m"}}, + dep = {{"doors_closing_f","next_kirovskaya_f"},{"doors_closing_m","proletarskaya_m"}}, + arrlast = {{"arr_olimpiyskaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},{"station_m","olimpiyskaya_m",0.5,"last_m",2,"things_m",2,"deadlock_m"},"olimpiyskaya_m"}, + not_last_c = {"not_last_f"}, + not_last = {3,"train_goes_to_m","olimpiyskaya_m"}, + not_last_f = {3,"to_olimpiyskaya_f"}, + }, + { + 118,"КировÑкаÑ", + arr = {{"arr_kirovskaya_f",3,"to_molodejnaya_f"},{"station_m","kirovskaya_m"}}, + dep = {{"doors_closing_f","next_molodejnaya_f"},{"doors_closing_m","olimpiyskaya_m"}}, + not_last_c = {"not_last_f"}, + }, + { + 120,"МолодёжнаÑ", + arrlast = {{"arr_molodejnaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},nil,"molodejnaya_m"}, + dep = {nil,{"doors_closing_m","kirovskaya_m"}}, + not_last_c = {"not_last_f"}, + }, + }, +}) + +Metrostroi.AddANSPAnnouncer("RIU Boiko + Pyaseckaya",{ + riu = true, + + click1 = {"subway_announcers/riu/boiko_new/click1.mp3",0.5}, + click2 = {"subway_announcers/riu/boiko_new/click2.mp3",0.3}, + click3 = {"subway_announcers/riu/boiko_new/click3.mp3",0.3}, + click_start = {"subway_announcers/riu/boiko_new/click1.mp3",0.5}, + click_end = {"subway_announcers/riu/boiko_new/click3.mp3",0.3}, + + + announcer_ready = {"subway_announcers/riu/boiko_new/announcer_ready.mp3",3.785}, + doors_closing_m = {"subway_announcers/riu/boiko_new/doors_closing.mp3",5}, + deadlock_m = {"subway_announcers/riu/boiko_new/spec_attention_deadlock.mp3",9.608}, + exit_m = {"subway_announcers/riu/boiko_new/spec_attention_exit.mp3",5.985}, + handrails_m = {"subway_announcers/riu/boiko_new/spec_attention_handrails.mp3",4.929}, + last_m = {"subway_announcers/riu/boiko_new/spec_attention_last.mp3",4.556}, + objects_m = {"subway_announcers/riu/boiko_new/spec_attention_objects.mp3",5.278}, + politeness_m = {"subway_announcers/riu/boiko_new/spec_attention_politeness.mp3",10.335}, + things_m = {"subway_announcers/riu/boiko_new/spec_attention_things.mp3",5.101}, + train_depeat_m = {"subway_announcers/riu/boiko_new/spec_attention_train_depeat.mp3",5.209}, + train_stop_m = {"subway_announcers/riu/boiko_new/spec_attention_train_stop.mp3",7.370}, + station_m = {"subway_announcers/riu/boiko_new/station.mp3",1.2}, + train_goes_to_m = {"subway_announcers/riu/boiko_new/train_goes_to.mp3",2.540}, + + kirovskaya_m = {"subway_announcers/riu/boiko_new/crossline/1/kirovskaya.mp3",0.883667}, + mejdunarodnaya_m = {"subway_announcers/riu/boiko_new/crossline/1/mejdunarodnaya.mp3",1.206667}, + molodejnaya_m = {"subway_announcers/riu/boiko_new/crossline/1/molodejnaya.mp3",1.112917}, + nahimovskaya_m = {"subway_announcers/riu/boiko_new/crossline/1/nahimovskaya.mp3",1.097292}, + oktyabrskaya_arr_m = {"subway_announcers/riu/boiko_new/crossline/1/oktyabrskaya_arr.mp3",5.656979}, + oktyabrskaya_next_m = {"subway_announcers/riu/boiko_new/crossline/1/oktyabrskaya_next.mp3",1.124083}, + olimpiyskaya_m = {"subway_announcers/riu/boiko_new/crossline/1/olimpiyskaya.mp3",1.081750}, + park_kultury_m = {"subway_announcers/riu/boiko_new/crossline/1/park_kultury.mp3",1.142833}, + --politehnicheskaya_arr_m = {"subway_announcers/riu/boiko_new/crossline/1/politehnicheskaya_arr.mp3",4.657938}, + politehnicheskaya_arr_m = {"subway_announcers/riu/boiko_new/crossline/1/politehnicheskaya_next.mp3",2.674708}, + politehnicheskaya_next_m = {"subway_announcers/riu/boiko_new/crossline/1/politehnicheskaya_next.mp3",2.674708}, + proletarskaya_m = {"subway_announcers/riu/boiko_new/crossline/1/proletarskaya.mp3",1.060521}, + prospekt_suvorova_m = {"subway_announcers/riu/boiko_new/crossline/1/prospekr_suvorova.mp3",1.244667}, + rechnaya_m = {"subway_announcers/riu/boiko_new/crossline/1/rechnaya.mp3",2.090708}, + spec_attention_politehnicheskaya_m = {"subway_announcers/riu/boiko_new/crossline/1/spec_attention_politehnicheskaya.mp3",10.516479}, + spec_attention_rechnaya_m = {"subway_announcers/riu/boiko_new/crossline/1/spec_attention_rechnaya.mp3",8.791000}, + kalininskaya_m = {"subway_announcers/riu/boiko_new/crossline/2/kalininskaya.mp3",0.996938}, + pionerskaya_m = {"subway_announcers/riu/boiko_new/crossline/2/pionerskaya.mp3",0.916688}, + politehnicheskaya2_arr_m = {"subway_announcers/riu/boiko_new/crossline/2/politehnicheskaya_arr.mp3",3.165667}, + politehnicheskaya2_next_m = {"subway_announcers/riu/boiko_new/crossline/2/politehnicheskaya_next.mp3",1.224833}, + timerazevskaya_m = {"subway_announcers/riu/boiko_new/crossline/2/timerazevskaya.mp3",1.060000}, + vokzalnaya_arr_m = {"subway_announcers/riu/boiko_new/crossline/2/vokzalnaya_arr.mp3",4.609771}, + vokzalnaya_next_m = {"subway_announcers/riu/boiko_new/crossline/2/vokzalnaya_next.mp3",2.498896}, + + + doors_closing_f = {"subway_announcers/riu/pyaseckaya/doors_closing.mp3",2.994}, + deadlock_f = {"subway_announcers/riu/pyaseckaya/spec_attention_deadlock.mp3",10.133}, + exit_f = {"subway_announcers/riu/pyaseckaya/spec_attention_exit.mp3",5.466}, + handrails_f = {"subway_announcers/riu/pyaseckaya/spec_attention_handrails.mp3",4.744}, + last_f = {"subway_announcers/riu/pyaseckaya/spec_attention_last.mp3",4.506}, + objects_f = {"subway_announcers/riu/pyaseckaya/spec_attention_objects.mp3",5.219}, + politeness_f = {"subway_announcers/riu/pyaseckaya/spec_attention_politeness.mp3",10.221}, + things_f = {"subway_announcers/riu/pyaseckaya/spec_attention_things.mp3",5.154}, + train_depeat_f = {"subway_announcers/riu/pyaseckaya/spec_attention_train_depeat.mp3",4.829}, + train_stop_f = {"subway_announcers/riu/pyaseckaya/spec_attention_train_stop.mp3",7.240}, + + + arr_kirovskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_kirovskaya.mp3",1.987917}, + arr_mejdunarodnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_mejdunarodnaya.mp3",2.185542}, + arr_molodejnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_molodejnaya.mp3",2.093146}, + arr_nahimovskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_nahimovskaya.mp3",2.171021}, + arr_oktyabrskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_oktyabrskaya.mp3",6.757750}, + arr_olimpiyskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_olimpiyskaya.mp3",2.338708}, + arr_park_kultury_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_park_kultury.mp3",2.171104}, + arr_politehnicheskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_politehnicheskaya_old.mp3",6.295417}, + arr_proletarskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_proletarskaya.mp3",2.334667}, + arr_prospekt_suvorova_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_prospekt_suvorova.mp3",2.538375}, + arr_rechnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/arr_rechnaya.mp3",3.408208}, + mejdunarodnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/mejdunarodnaya.mp3",1.275063}, + molodejnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/molodejnaya.mp3",1.196188}, + next_kirovskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_kirovskaya.mp3",2.771500}, + next_mejdunarodnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_mejdunarodnaya.mp3",2.947417}, + next_molodejnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_molodejnaya.mp3",2.818333}, + next_nahimovskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_nahimovskaya.mp3",2.930021}, + next_oktyabrskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_oktyabrskaya.mp3",2.702000}, + next_olimpiyskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_olimpiyskaya.mp3",2.996396}, + next_park_kultury_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_park_kultury.mp3",2.954438}, + next_politehnicheskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_politehnicheskaya.mp3",4.652875}, + next_proletarskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_proletarskaya.mp3",2.964667}, + next_prospekt_suvorova_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_prospekt_suvorova.mp3",3.674854}, + next_rechnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/next_rechnaya.mp3",4.248000}, + oktyabrskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/oktyabrskaya.mp3",1.186063}, + olimpiyskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/olimpiyskaya.mp3",1.208104}, + politehnicheskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/politehnicheskaya.mp3",1.506854}, + spec_attemton_politehnicheskaya3_f = {"subway_announcers/riu/pyaseckaya/crossline/1/spec_attemton_politehnicheskaya3.mp3",12.349063}, + spec_rechnaya_doors_f = {"subway_announcers/riu/pyaseckaya/crossline/1/spec_rechnaya_doors.mp3",10.953646}, + to_molodejnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/to_molodejnaya.mp3",3.460771}, + to_oktyabrskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/to_oktyabrskaya.mp3",3.355125}, + to_olimpiyskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/to_olimpiyskaya.mp3",3.424896}, + to_politehnicheskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/1/to_politehnicheskaya.mp3",3.638792}, + arr_kalininskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/2/arr_kalininskaya.mp3",2.369042}, + arr_pionerskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/2/arr_pionerskaya.mp3",2.146000}, + arr_politehnicheskaya2_f = {"subway_announcers/riu/pyaseckaya/crossline/2/arr_politehnicheskaya.mp3",6.419542}, + arr_timerazevskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/2/arr_timerazevskaya.mp3",2.398271}, + arr_vokzalnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/2/arr_vokzalnaya.mp3",5.819833}, + next_kalininskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/2/next_kalininskaya.mp3",2.845229}, + next_pionerskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/2/next_pionerskaya.mp3",2.837875}, + next_politehnicheskaya2_f = {"subway_announcers/riu/pyaseckaya/crossline/2/next_politehnicheskaya.mp3",3.293792}, + next_timerazevskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/2/next_timerazevskaya.mp3",3.049167}, + next_vokzalnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/2/next_vokzalnaya.mp3",4.291833}, + politehnicheskaya2_f = {"subway_announcers/riu/pyaseckaya/crossline/2/politehnicheskaya.mp3",1.361250}, + timerazevskaya_f = {"subway_announcers/riu/pyaseckaya/crossline/2/timerazevskaya.mp3",1.352604}, + to_vokzalnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/2/to_vokzalnaya.mp3",3.471125}, + vokzalnaya_f = {"subway_announcers/riu/pyaseckaya/crossline/2/vokzalnaya.mp3",1.175854}, +},{ + { --МÐРШРУТ + LED = {5,4,4,4,5,4,4}, + Name = "Ð›Ð¸Ð½Ð¸Ñ 1", + spec_last = {"last_m",0.5,"things_m"}, + spec_wait = {{"train_stop_m"},{"train_depeat_m"}}, + Loop = false, + BlockDoors = true, + { + 110,"МеждународнаÑ", + arrlast = {nil,{"arr_mejdunarodnaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},"mejdunarodnaya_m"}, + dep = {{"doors_closing_m","park_kultury_m"}}, + }, + { + 111,"Парк Культуры", + arr = {{"station_m","park_kultury_m"},"arr_park_kultury_f"}, + dep = {{"doors_closing_m","politehnicheskaya_next_m",0.2,"politeness_m"},{"doors_closing_f","next_mejdunarodnaya_f",0.2,"politeness_f"}}, + not_last_c = {nil,"not_last_f"} + }, + { + 112,"Политехнич.", + arr = {{"station_m","politehnicheskaya_arr_m",0.2,"things_m"},{"arr_politehnicheskaya_f",0.2,"objects_f"}}, + dep = {{"doors_closing_m","prospekt_suvorova_m"},{"doors_closing_f","next_park_kultury_f"}}, + not_last_c = {nil,"not_last_f"}, + have_inrerchange = true, + right_doors=true, + }, + { + 113,"Пр. Суворова", + arr = {{"station_m","prospekt_suvorova_m"},{"arr_prospekt_suvorova_f"}}, + dep = {{"doors_closing_m","nahimovskaya_m"},{"doors_closing_f","next_politehnicheskaya_f"}}, + not_last_c = {nil,"not_last_f"} + }, + { + 114,"ÐахимовÑкаÑ", + arr = {{"station_m","nahimovskaya_m"},{"arr_nahimovskaya_f"}}, + dep = {{"doors_closing_m","oktyabrskaya_next_m"},{"doors_closing_f","next_prospekt_suvorova_f"}}, + not_last_c = {nil,"not_last_f"} + }, + { + 115,"ОктÑбрьÑкаÑ", + arr = {{"station_m","oktyabrskaya_arr_m"},{"arr_oktyabrskaya_f"}}, + dep = {{"doors_closing_m","rechnaya_m","spec_attention_rechnaya_m"},{"doors_closing_f","next_nahimovskaya_f"}}, + arrlast = {{"station_m","oktyabrskaya_arr_m",0.5,"last_m",2,"things_m",2,"deadlock_m"},{"arr_oktyabrskaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},"oktyabrskaya_next_m"}, + not_last = {3,"train_goes_to_m","oktyabrskaya_next_m"}, + not_last_f = {3,"to_oktyabrskaya_f"}, + not_last_c = {nil,"not_last_f"} + }, + { + 116,"РечнаÑ", + arr = {{"arr_rechnaya_f"},{"station_m","rechnaya_m"}}, + --arrlast = {{"station","oktyabrskaya_arr_m",0.5,"last_m",2,"things_m",2,"deadlock_m"},{"arr_oktyabrskaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},"oktyabrskaya_next_m"}, + --not_last = {3,"train_goes_to_m","rechnaya_m"}, + --not_last_f = {3,""}, + dep = {{"doors_closing_f","next_proletarskaya_f"},{"doors_closing_m","oktyabrskaya_next_m"}}, + not_last_c = {"not_last_f"}, + right_doors = true, + }, + { + 117,"ПролетарÑкаÑ", + arr = {{"arr_proletarskaya_f"},{"station_m","proletarskaya_m"}}, + dep = {{"doors_closing_f","next_olimpiyskaya_f"},{"doors_closing_m","rechnaya_m"}}, + not_last_c = {"not_last_f"}, + }, + { + 118,"ОлимпийÑкаÑ", + arr = {{"arr_olimpiyskaya_f"},{"station_m","olimpiyskaya_m"}}, + dep = {{"doors_closing_f","next_kirovskaya_f"},{"doors_closing_m","proletarskaya_m"}}, + arrlast = {{"arr_olimpiyskaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},{"station_m","olimpiyskaya_m",0.5,"last_m",2,"things_m",2,"deadlock_m"},"olimpiyskaya_m"}, + not_last_c = {"not_last_f"}, + not_last = {3,"train_goes_to_m","olimpiyskaya_m"}, + not_last_f = {3,"to_olimpiyskaya_f"}, + }, + { + 118,"КировÑкаÑ", + arr = {{"arr_kirovskaya_f",3,"to_molodejnaya_f"},{"station_m","kirovskaya_m"}}, + dep = {{"doors_closing_f","next_molodejnaya_f"},{"doors_closing_m","olimpiyskaya_m"}}, + not_last_c = {"not_last_f"}, + }, + { + 120,"МолодёжнаÑ", + arrlast = {{"arr_molodejnaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},nil,"molodejnaya_m"}, + dep = {nil,{"doors_closing_m","kirovskaya_m"}}, + not_last_c = {"not_last_f"}, + }, + }, +}) + +Metrostroi.SetRRIAnnouncer({ + click_end = {"subway_announcers/rri/boiko/spec/click_end.mp3",0.1}, + click_start = {"subway_announcers/rri/boiko/spec/click_start.mp3",0.1}, + last = {"subway_announcers/rri/boiko/spec/last.mp3",22.264354}, + exit = {"subway_announcers/rri/boiko/spec/spec_attention_exit.mp3",5.446236}, + handrails = {"subway_announcers/rri/boiko/spec/spec_attention_handrails.mp3",4.594558}, + objects = {"subway_announcers/rri/boiko/spec/spec_attention_objects.mp3",5.143175}, + things = {"subway_announcers/rri/boiko/spec/spec_attention_things.mp3",05.093}, + politeness = {"subway_announcers/rri/boiko/spec/spec_attention_politeness.mp3",11.457075}, + train_depeat = {"subway_announcers/rri/boiko/spec/spec_attention_train_depeat.mp3",4.842222}, + train_stop = {"subway_announcers/rri/boiko/spec/spec_attention_train_stop.mp3",6.963424}, + + arr_kirovskaya = {"subway_announcers/rri/boiko/crossline/1/arr_kirovskaya.mp3",2.121701}, + arr_mejdunarodnaya = {"subway_announcers/rri/boiko/crossline/1/arr_mejdunarodnaya.mp3",2.160771}, + arr_molodejnaya = {"subway_announcers/rri/boiko/crossline/1/arr_molodejnaya.mp3",2.291270}, + arr_nahimovskaya = {"subway_announcers/rri/boiko/crossline/1/arr_nahimovskaya.mp3",2.197279}, + arr_oktyabrskaya = {"subway_announcers/rri/boiko/crossline/1/arr_oktyabrskaya.mp3",6.664853}, + arr_olimpiyskaya = {"subway_announcers/rri/boiko/crossline/1/arr_olimpiyskaya.mp3",1.951587}, + arr_park_kultury = {"subway_announcers/rri/boiko/crossline/1/arr_park_kultury.mp3",2.079796}, + arr_politehnicheskaya = {"subway_announcers/rri/boiko/crossline/1/arr_politehnicheskaya.mp3",5.529909}, + arr_proletarskaya = {"subway_announcers/rri/boiko/crossline/1/arr_proletarskaya.mp3",2.057959}, + arr_prospekt_suvorova = {"subway_announcers/rri/boiko/crossline/1/arr_prospekt_suvorova.mp3",3.038118}, + arr_rechnaya = {"subway_announcers/rri/boiko/crossline/1/arr_rechnaya.mp3",3.004853}, + next_kirovskaya = {"subway_announcers/rri/boiko/crossline/1/next_kirovskaya.mp3",5.574558}, + next_mejdunarodnaya = {"subway_announcers/rri/boiko/crossline/1/next_mejdunarodnaya.mp3",5.155261}, + next_molodejnaya = {"subway_announcers/rri/boiko/crossline/1/next_molodejnaya.mp3",5.864898}, + next_nahimovskaya = {"subway_announcers/rri/boiko/crossline/1/next_nahimovskaya.mp3",5.102834}, + next_oktyabrskaya = {"subway_announcers/rri/boiko/crossline/1/next_oktyabrskaya.mp3",5.102834}, + next_olimpiyskaya = {"subway_announcers/rri/boiko/crossline/1/next_olimpiyskaya.mp3",5.038776}, + next_park_kultury = {"subway_announcers/rri/boiko/crossline/1/next_park_kultury.mp3",5.226780}, + next_politehnicheskaya = {"subway_announcers/rri/boiko/crossline/1/next_politehnicheskaya.mp3",5.088367}, + next_proletarskaya = {"subway_announcers/rri/boiko/crossline/1/next_proletarskaya.mp3",5.155193}, + next_prospekt_suvorova = {"subway_announcers/rri/boiko/crossline/1/next_prospekt_suvorova.mp3",6.172585}, + next_rechnaya = {"subway_announcers/rri/boiko/crossline/1/next_rechnaya.mp3",6.388458}, + spec_politehnicheskaya = {"subway_announcers/rri/boiko/crossline/1/spec_politehnicheskaya.mp3",11.393311}, + spec_rechnaya_doors = {"subway_announcers/rri/boiko/crossline/1/spec_rechnaya_doors.mp3",9.786349}, + to_molodejnaya = {"subway_announcers/rri/boiko/crossline/1/to_molodejnaya.mp3",4.925374}, + to_oktyabrskaya = {"subway_announcers/rri/boiko/crossline/1/to_oktyabrskaya.mp3",4.578889}, + to_olimpiyskaya = {"subway_announcers/rri/boiko/crossline/1/to_olimpiyskaya.mp3",4.639796}, + to_politehnicheskaya = {"subway_announcers/rri/boiko/crossline/1/to_politehnicheskaya.mp3",4.665238}, + arr_kalininskaya = {"subway_announcers/rri/boiko/crossline/2/arr_kalininskaya.mp3",2.158163}, + arr_pionerskaya = {"subway_announcers/rri/boiko/crossline/2/arr_pionerskaya.mp3",2.090045}, + arr_politehnicheskaya2 = {"subway_announcers/rri/boiko/crossline/2/arr_politehnicheskaya.mp3",5.491179}, + arr_timeryazevskaya = {"subway_announcers/rri/boiko/crossline/2/arr_timeryazevskaya.mp3",2.062154}, + arr_vokzalnaya = {"subway_announcers/rri/boiko/crossline/2/arr_vokzalnaya.mp3",6.513039}, + next_kalininskaya = {"subway_announcers/rri/boiko/crossline/2/next_kalininskaya.mp3",5.364104}, + next_pionerskaya = {"subway_announcers/rri/boiko/crossline/2/next_pionerskaya.mp3",5.116485}, + next_politehnicheskaya2 = {"subway_announcers/rri/boiko/crossline/2/next_politehnicheskaya.mp3",7.010385}, + next_timeryazevskaya = {"subway_announcers/rri/boiko/crossline/2/next_timeryazevskaya.mp3",5.356667}, + next_vokzalnaya = {"subway_announcers/rri/boiko/crossline/2/next_vokzalnaya.mp3",5.007256}, + to_vokzalnaya = {"subway_announcers/rri/boiko/crossline/2/to_vokzalnaya.mp3",4.658980}, +},{ + { + Name = "Line 1", + spec_last = {"last"}, + spec_wait = {{"train_stop"},{"train_depeat"}}, + { + 110,"Mezhdunarod.", + arrlast = {nil,{"arr_mejdunarodnaya",0.5,"last"}}, + dep = {"next_park_kultury"}, + }, + { + 111,"Park Kultury", + arr = {"arr_park_kultury","arr_park_kultury"}, + dep = {{"next_politehnicheskaya",0.2,"politeness"},{"next_mejdunarodnaya",0.2,"politeness"}}, + }, + { + 112,"Politehnich.", + arr = {{"arr_politehnicheskaya",0.2,"things"},{"arr_politehnicheskaya",0.2,"objects"}}, + dep = {"next_prospekt_suvorova","next_park_kultury"}, + }, + { + 113,"Pr. Suvorova", + arr = {{"arr_prospekt_suvorova",0.2,"objects"},{"arr_prospekt_suvorova",0.2,"things"}}, + dep = {"next_nahimovskaya","next_politehnicheskaya"}, + }, + { + 114,"Nahimovskaya", + arr = {"arr_nahimovskaya","arr_nahimovskaya"}, + dep = {{"next_oktyabrskaya",0.2,"politeness"},"next_prospekt_suvorova"}, + }, + { + 115,"Oktabrskaya", + arr = {"arr_oktyabrskaya","arr_oktyabrskaya"}, + dep = {{"next_rechnaya",0.5,"spec_rechnaya_doors"},"next_nahimovskaya"}, + arrlast = {{"arr_oktyabrskaya",0.5,"last"},{"arr_oktyabrskaya",0.5,"last"}}, + not_last = {3,"to_oktyabrskaya"} + }, + { + 116,"Rechnaya", + arr = {"arr_rechnaya","arr_rechnaya"}, + dep = {"next_proletarskaya","next_oktyabrskaya"}, + --arrlast = {{"arr_rechnaya",0.5,"last"},{"arr_rechnaya",0.5,"last"}}, + --not_last = {3,"" + }, + { + 117,"Proletarskaya", + arr = {"arr_proletarskaya","arr_proletarskaya"}, + dep = {"next_olimpiyskaya",{"next_rechnaya",0.5,"spec_rechnaya_doors"}}, + }, + { + 118,"Olimpyiskaya", + arr = {"arr_olimpiyskaya","arr_olimpiyskaya"}, + dep = {"next_kirovskaya","next_proletarskaya"}, + arrlast = {{"arr_olimpiyskaya",0.5,"last"},{"arr_olimpiyskaya",0.5,"last"}}, + not_last = {3,"to_olimpiyskaya"} + }, + { + 119,"Kirovskaya", + arr = {{"arr_kirovskaya",3,"to_molodejnaya"},{"arr_kirovskaya",0.2,"exit"}}, + dep = {"next_molodejnaya","next_olimpiyskaya"}, + }, + { + 120,"Molodejnaya", + --arr = {"arr_rechnaya",{"arr_rechnaya"}}, + arrlast = {{"arr_molodejnaya",0.5,"last"},nil}, + dep = {nil,{"next_kirovskaya",0.2,"politeness"}}, + }, + }, +}) +Metrostroi.SetUPOAnnouncer({ + name = "UPO RHINO", + tone = {"subway_announcers/upo/rhino/crossline/tone.mp3", 1.2}, + click1 = {"subway_announcers/upo/click1.mp3", 0.3}, + click2 = {"subway_announcers/upo/click2.mp3", 0.1}, + --proletarskaya = {"subway_announcers/upo/rhino/crossline/proletarskaya.mp3",0.809100}, + --next_proletarskaya = {"subway_announcers/upo/rhino/crossline/next_proletarskaya.mp3",1.853100}, + + --olimpiyskaya = {"subway_announcers/upo/rhino/crossline/olimpiyskaya.mp3",0.835200}, + --next_olimpiyskaya = {"subway_announcers/upo/rhino/crossline/next_olimpiyskaya.mp3",1.800900}, + --last_olimpiyskaya = {"subway_announcers/upo/rhino/crossline/last_olimpiyskaya.mp3",9.735300}, + + --kirovskaya = {"subway_announcers/upo/rhino/crossline/kirovskaya.mp3",0.678600}, + --next_kirovskaya = {"subway_announcers/upo/rhino/crossline/next_kirovskaya.mp3",1.644300}, + + --molodejnaya = {"subway_announcers/upo/rhino/crossline/molodejnaya.mp3",0.704700}, + --next_molodejnaya = {"subway_announcers/upo/rhino/crossline/next_molodejnaya.mp3",1.696500}, + --last_molodejnaya = {"subway_announcers/upo/rhino/crossline/last_molodejnaya.mp3",10.100700}, + + mejdunarodnaya = {"subway_announcers/upo/rhino/crossline/mejdunarodnaya.mp3",1.017900}, + next_mejdunarodnaya = {"subway_announcers/upo/rhino/crossline/next_mejdunarodnaya.mp3",1.800900}, + last_mejdunarodnaya = {"subway_announcers/upo/rhino/crossline/last_mejdunarodnaya.mp3",9.709200}, + + park_kultury = {"subway_announcers/upo/rhino/crossline/park_kultury.mp3",0.887400}, + next_park_kultury = {"subway_announcers/upo/rhino/crossline/next_park_kultury.mp3",1.827000}, + + politehnicheskaya = {"subway_announcers/upo/rhino/crossline/politehnicheskaya.mp3",0.965700}, + next_politehnicheskaya = {"subway_announcers/upo/rhino/crossline/next_politehnicheskaya.mp3",2.035800}, + + prospekt_suvorova = {"subway_announcers/upo/rhino/crossline/prospekt_suvorova.mp3",1.044000}, + next_prospekt_suvorova = {"subway_announcers/upo/rhino/crossline/next_prospekt_suvorova.mp3",2.009700}, + + nahimovskaya = {"subway_announcers/upo/rhino/crossline/nahimovskaya.mp3",0.861300}, + next_nahimovskaya = {"subway_announcers/upo/rhino/crossline/next_nahimovskaya.mp3",1.853100}, + + oktyabrskaya = {"subway_announcers/upo/rhino/crossline/oktyabrskaya.mp3",0.835200}, + next_oktyabrskaya = {"subway_announcers/upo/rhino/crossline/next_oktyabrskaya.mp3",1.879200}, + + rechnaya = {"subway_announcers/upo/rhino/crossline/rechnaya.mp3",0.678600}, + next_rechnaya = {"subway_announcers/upo/rhino/crossline/next_rechnaya.mp3",10.727100}, + next_rechnaya1 = {"subway_announcers/upo/rhino/crossline/next_rechnaya1.mp3",1.722600}, + last_rechnaya = {"subway_announcers/upo/rhino/crossline/last_rechnaya.mp3",10.727100}, + + spec_attention_handrails = {"subway_announcers/upo/rhino/crossline/spec_attention_handrails.mp3",3.967200}, + spec_attention_politeness = {"subway_announcers/upo/rhino/crossline/spec_attention_politeness.mp3",5.533200}, + + odz = {"subway_announcers/upo/rhino/crossline/odz.mp3",2.02}, +},{ + { + 110,"МеждународнаÑ", + arrlast = {nil,"last_mejdunarodnaya"}, + dep = {"odz"}, + noises = {2,3},noiserandom = 0.08, + }, + { + 111,"Парк Культуры", + arr = {{"park_kultury",0.5,"next_politehnicheskaya"},{"park_kultury",0.5,"next_mejdunarodnaya","spec_attention_politeness"}}, + dep = {"odz","odz"}, + noises = {1,2},noiserandom = 0.12, + }, + { + 112,"ПолитехничеÑкаÑ", + arr = {{"politehnicheskaya",0.5,"next_prospekt_suvorova","spec_attention_politeness"},{"politehnicheskaya",0.5,"next_park_kultury","spec_attention_handrails"}}, + dep = {"odz","odz"}, + noises = {3},noiserandom = 0.05, + }, + { + 113,"Пр. Суворова", + arr = {{"prospekt_suvorova",0.5,"next_nahimovskaya","spec_attention_handrails"},{"prospekt_suvorova",0.5,"next_politehnicheskaya"}}, + dep = {"odz","odz"}, + }, + { + 114,"ÐахимовÑкаÑ", + arr = {{"nahimovskaya",0.5,"next_oktyabrskaya","spec_attention_politeness"},{"nahimovskaya",0.5,"next_prospekt_suvorova","spec_attention_politeness"}}, + dep = {"odz","odz"}, + noises = {1,2,3},noiserandom = 0.02, + }, + { + 115,"ОктÑбрьÑкаÑ", + arr = {{"oktyabrskaya",0.5,"next_rechnaya"},{"oktyabrskaya",3,"next_nahimovskaya"}}, + dep = {"odz","odz"}, + noises = {1,2},noiserandom = 0.2, + }, + { + 116,"РечнаÑ", + arrlast = {"last_rechnaya"}, + dep = {nil,"odz"}, + noises = {1,3},noiserandom = 0.08, + }, +}) +--[[Metrostroi.AddSarmatUPOAnnouncer("UPO RHINO",{ + tone = {"subway_announcers/sarmat_upo/tone.mp3",1}, + --proletarskaya = {"subway_announcers/sarmat_upo/rhino/crossline/proletarskaya.mp3",0.809100}, + --next_proletarskaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_proletarskaya.mp3",1.853100}, + + --olimpiyskaya = {"subway_announcers/sarmat_upo/rhino/crossline/olimpiyskaya.mp3",0.835200}, + --next_olimpiyskaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_olimpiyskaya.mp3",1.800900}, + --last_olimpiyskaya = {"subway_announcers/sarmat_upo/rhino/crossline/last_olimpiyskaya.mp3",9.735300}, + + --kirovskaya = {"subway_announcers/sarmat_upo/rhino/crossline/kirovskaya.mp3",0.678600}, + --next_kirovskaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_kirovskaya.mp3",1.644300}, + + --molodejnaya = {"subway_announcers/sarmat_upo/rhino/crossline/molodejnaya.mp3",0.704700}, + --next_molodejnaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_molodejnaya.mp3",1.696500}, + --last_molodejnaya = {"subway_announcers/sarmat_upo/rhino/crossline/last_molodejnaya.mp3",10.100700}, + + mejdunarodnaya = {"subway_announcers/sarmat_upo/rhino/crossline/mejdunarodnaya.mp3",1.017900}, + next_mejdunarodnaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_mejdunarodnaya.mp3",1.800900}, + last_mejdunarodnaya = {"subway_announcers/sarmat_upo/rhino/crossline/last_mejdunarodnaya.mp3",9.709200}, + + park_kultury = {"subway_announcers/sarmat_upo/rhino/crossline/park_kultury.mp3",0.887400}, + next_park_kultury = {"subway_announcers/sarmat_upo/rhino/crossline/next_park_kultury.mp3",1.827000}, + + politehnicheskaya = {"subway_announcers/sarmat_upo/rhino/crossline/politehnicheskaya.mp3",0.965700}, + next_politehnicheskaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_politehnicheskaya.mp3",2.035800}, + + prospekt_suvorova = {"subway_announcers/sarmat_upo/rhino/crossline/prospekt_suvorova.mp3",1.044000}, + next_prospekt_suvorova = {"subway_announcers/sarmat_upo/rhino/crossline/next_prospekt_suvorova.mp3",2.009700}, + + nahimovskaya = {"subway_announcers/sarmat_upo/rhino/crossline/nahimovskaya.mp3",0.861300}, + next_nahimovskaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_nahimovskaya.mp3",1.853100}, + + oktyabrskaya = {"subway_announcers/sarmat_upo/rhino/crossline/oktyabrskaya.mp3",0.835200}, + next_oktyabrskaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_oktyabrskaya.mp3",1.879200}, + + rechnaya = {"subway_announcers/sarmat_upo/rhino/crossline/rechnaya.mp3",0.678600}, + next_rechnaya = {"subway_announcers/sarmat_upo/rhino/crossline/next_rechnaya.mp3",10.727100}, + next_rechnaya1 = {"subway_announcers/sarmat_upo/rhino/crossline/next_rechnaya1.mp3",1.722600}, + last_rechnaya = {"subway_announcers/sarmat_upo/rhino/crossline/last_rechnaya.mp3",10.727100}, + + spec_attention_handrails = {"subway_announcers/sarmat_upo/rhino/crossline/spec_attention_handrails.mp3",3.967200}, + spec_attention_politeness = {"subway_announcers/sarmat_upo/rhino/crossline/spec_attention_politeness.mp3",5.533200}, + + odz1 = {"subway_announcers/sarmat_upo/rhino/crossline/odz1.mp3",2.088000+0.3}, + odz2 = {"subway_announcers/sarmat_upo/rhino/crossline/odz2.mp3",2.192400+0.3}, +},{ + { --МÐРШРУТ + LED = {3,4,5,5,5,5,5}, + { + 909,"МеждународнаÑ", + arr = {nil,"last_mejdunarodnaya"}, + arrlast = {nil,"last_mejdunarodnaya"}, + dep = {"next_park_kultury"}, + odz = "odz1", + dist = 30, + }, + { + 910,"Парк Культуры", + arr = {{"park_kultury",3,"next_politehnicheskaya"},{"park_kultury",3,"next_mejdunarodnaya","spec_attention_politeness"}}, + dep = {"next_politehnicheskaya","next_mejdunarodnaya"}, + odz = "odz2", + dist = 30, + }, + { + 911,"ПолитехничеÑкаÑ", + arr = {{"politehnicheskaya",3,"next_prospekt_suvorova","spec_attention_politeness"},{"politehnicheskaya",3,"next_park_kultury","spec_attention_handrails"}}, + dep = {"next_prospekt_suvorova","next_park_kultury"}, + odz = "odz1", + dist = 30, + }, + { + 912,"Пр. Суворова", + arr = {{"prospekt_suvorova",3,"next_nahimovskaya","spec_attention_handrails"},{"prospekt_suvorova",3,"next_politehnicheskaya"}}, + dep = {"next_nahimovskaya","next_politehnicheskaya"}, + odz = "odz2", + dist = 30, + }, + { + 913,"ÐахимовÑкаÑ", + arr = {{"nahimovskaya",3,"next_oktyabrskaya","spec_attention_politeness"},{"nahimovskaya",3,"next_prospekt_suvorova","spec_attention_politeness"}}, + dep = {"next_oktyabrskaya","next_prospekt_suvorova"}, + odz = "odz1", + dist = 30, + }, + { + 914,"ОктÑбрьÑкаÑ", + arr = {{"oktyabrskaya",3,"next_rechnaya"},{"oktyabrskaya",3,"next_nahimovskaya"}}, + dep = {"next_rechnaya1","next_nahimovskaya"}, + odz = "odz2", + dist = 30, + }, + { + 915,"РечнаÑ", + arr = {"last_rechnaya"}, + arrlast = {"last_rechnaya"}, + dep = {nil,"next_oktyabrskaya"}, + odz = "odz1", + dist = 30, + }, + }, +})--]] +Metrostroi.AddSarmatUPOAnnouncer("UPO Artur",{ + tone = {"subway_announcers/sarmat_upo/tone.mp3",1}, + rechnaya = {"subway_announcers/sarmat_upo/crossline_artur/rechnaya.mp3",0.939271}, + last_rechnaya = {"subway_announcers/sarmat_upo/crossline_artur/last_rechnaya.mp3",12.962604}, + next_rechnaya = {"subway_announcers/sarmat_upo/crossline_artur/next_rechnaya1.mp3",12.384375}, + next_rechnaya2 = {"subway_announcers/sarmat_upo/crossline_artur/next_rechnaya2.mp3",1.720896}, + + oktyabrskaya = {"subway_announcers/sarmat_upo/crossline_artur/oktyabrskaya.mp3",1.144646}, + next_oktyabrskaya = {"subway_announcers/sarmat_upo/crossline_artur/next_oktyabrskaya.mp3",2.240396}, + + nahimovskaya = {"subway_announcers/sarmat_upo/crossline_artur/nahimovskaya.mp3",1.179146}, + next_nahimovskaya = {"subway_announcers/sarmat_upo/crossline_artur/next_nahimovskaya.mp3",2.466563}, + + prospekt_suvorova = {"subway_announcers/sarmat_upo/crossline_artur/prospekt_suvorova.mp3",1.566375}, + next_prospekt_suvorova = {"subway_announcers/sarmat_upo/crossline_artur/next_prospekt_suvorova.mp3",2.486813}, + + politehnicheskaya = {"subway_announcers/sarmat_upo/crossline_artur/politehnicheskaya.mp3",1.178271}, + next_politehnicheskaya = {"subway_announcers/sarmat_upo/crossline_artur/next_politehnicheskaya.mp3",2.400917}, + + park_kultury = {"subway_announcers/sarmat_upo/crossline_artur/park_kultury.mp3",1.285271}, + next_park_kultury = {"subway_announcers/sarmat_upo/crossline_artur/next_park_kultury.mp3",2.242479}, + + mejdunarodnaya = {"subway_announcers/sarmat_upo/crossline_artur/mejdunarodnaya.mp3",1.123333}, + next_mejdunarodnaya = {"subway_announcers/sarmat_upo/crossline_artur/next_mejdunarodnaya.mp3",2.360938}, + last_mejdunarodnaya = {"subway_announcers/sarmat_upo/crossline_artur/last_mejdunarodnaya.mp3",11.327729}, + --molodejnaya = {"subway_announcers/sarmat_upo/crossline_artur/molodejnaya.mp3",1.064354}, + --next_molodejnaya = {"subway_announcers/sarmat_upo/crossline_artur/next_molodejnaya.mp3",1.996167}, + --last_molodejnaya = {"subway_announcers/sarmat_upo/crossline_artur/last_molodejnaya.mp3",11.295438}, + --kirovskaya = {"subway_announcers/sarmat_upo/crossline_artur/kirovskaya.mp3",0.900000}, + --next_kirovskaya = {"subway_announcers/sarmat_upo/crossline_artur/next_kirovskaya.mp3",2.142271}, + --olimpiyskaya = {"subway_announcers/sarmat_upo/crossline_artur/olimpiyskaya.mp3",1.095958}, + --next_olimpiyskaya = {"subway_announcers/sarmat_upo/crossline_artur/next_olimpiyskaya.mp3",2.446542}, + --last_olimpiyskaya = {"subway_announcers/sarmat_upo/crossline_artur/last_olimpiyskaya.mp3",11.552521}, + --proletarskaya = {"subway_announcers/sarmat_upo/crossline_artur/proletarskaya.mp3",1.111333}, + --next_proletarskaya = {"subway_announcers/sarmat_upo/crossline_artur/next_proletarskaya.mp3",2.072313}, + odz1 = {"subway_announcers/sarmat_upo/crossline_artur/odz.mp3",2.612750}, + odz2 = {"subway_announcers/sarmat_upo/crossline_artur/odz2.mp3",2.392542}, + spec_attention_handrails = {"subway_announcers/sarmat_upo/crossline_artur/spec_attention_handrails.mp3",3.972021}, + spec_attention_politeness = {"subway_announcers/sarmat_upo/crossline_artur/spec_attention_politeness.mp3",5.614417}, +},{ + { --МÐРШРУТ + LED = {3,4,5,5,5,5,5}, + { + 110,"МеждународнаÑ","Mezhdunarodnaya", + arr = {nil,"last_mejdunarodnaya"}, + arrlast = {nil,"last_mejdunarodnaya"}, + dep = {"next_park_kultury"}, + odz = "odz1", + messagedep = "Проверка обычнаÑ\n%rПроверка краÑнаÑ\n%gУважаемые паÑÑажиры,\nво избежании травм\nдержитеÑÑŒ за поручни!", + }, + { + 111,"Парк Культуры","Park kultury", + arr = {{"park_kultury",3,"next_politehnicheskaya"},{"park_kultury",3,"next_mejdunarodnaya","spec_attention_politeness"}}, + dep = {"next_politehnicheskaya","next_mejdunarodnaya"}, + odz = "odz1", + }, + { + 112,"ПолитехничеÑкаÑ","Politehnicheskaya", + arr = {{"politehnicheskaya",3,"next_prospekt_suvorova","spec_attention_politeness"},{"politehnicheskaya",3,"next_park_kultury","spec_attention_handrails"}}, + dep = {"next_prospekt_suvorova","next_park_kultury"}, + odz = "odz2", + right_doors=true, + }, + { + 113,"Пр. Суворова","Pr. Suvorova", + arr = {{"prospekt_suvorova",3,"next_nahimovskaya","spec_attention_handrails"},{"prospekt_suvorova",3,"next_politehnicheskaya"}}, + dep = {"next_nahimovskaya","next_politehnicheskaya"}, + odz = "odz1", + }, + { + 114,"ÐахимовÑкаÑ","Nahimovskaya", + arr = {{"nahimovskaya",3,"next_oktyabrskaya","spec_attention_politeness"},{"nahimovskaya",3,"next_prospekt_suvorova","spec_attention_politeness"}}, + dep = {"next_oktyabrskaya","next_prospekt_suvorova"}, + odz = "odz2", + messagedep="%rЧто то интереÑное...", + }, + { + 115,"ОктÑбрьÑкаÑ","Oktyabrskaya", + arr = {{"oktyabrskaya",3,"next_rechnaya"},{"oktyabrskaya",3,"next_nahimovskaya"}}, + dep = {"next_rechnaya2","next_nahimovskaya"}, + odz = "odz1", + messagearr="%gУважаемые паÑÑажиры!\nВо изжежании травм,\nдержитеÑÑŒ за поручни.", + messagedep="Ðа Ñтанции речнаÑ\nведётÑÑ ÑƒÑтановка\nи наладка\nÑтанционных дверей.\n%rБудьте внимательны!\nÐекоторые двери\nмогут быть закрыты.", + }, + { + 116,"РечнаÑ","Rechnaya", + arr = {"last_rechnaya"}, + arrlast = {"last_rechnaya"}, + dep = {nil,"next_oktyabrskaya"}, + odz = "odz2", + right_doors=true, + }, + }, +}) + +Metrostroi.StationConfigurations = { + [110] = + { + names = {"международнаÑ","Mezhdunarodnaya"}, + positions = { + {Vector(2593, -622, 1815),Angle(0,0,0)}, + } + }, + [111] = + { + names = {"парк культуры","Park Kultury"}, + positions = { + {Vector(1969, 14608, 2200),Angle(0,0,0)}, + } + }, + [112] = + { + names = {"политехничеÑкаÑ","Politehnicheskaya"}, + positions = { + {Vector(13975, 2474, 3000),Angle(0,0,0)}, + } + }, + [113] = + { + names = {"проÑпект Ñуворова","Prospekt Suvorova"}, + positions = { + {Vector(2238, 6440, 1830),Angle(0,0,0)}, + } + }, + [114] = + { + names = {"нахимовÑкаÑ","Nahimovskaya"}, + positions = { + {Vector(9856, 374, 907),Angle(0,0,0)}, + } + }, + [115] = + { + names = {"октÑбрьÑкаÑ","Oktyabrskaya"}, + positions = { + {Vector(-161, -6652, -340),Angle(0,0,0)}, + } + }, + [116] = + { + names = {"речнаÑ","Rechnaya"}, + positions = { + {Vector(2877, -12828, 318),Angle(0,0,0)}, + } + }, + [117] = + { + names = {"пролетарÑкаÑ","Proletarskaya"}, + positions = { + {Vector(5190, -15872, -928),Angle(0,0,0)}, + } + }, + [118] = + { + names = {"олимпийÑкаÑ","Olimpyiskaya"}, + positions = { + {Vector(0, 0, -0),Angle(0,0,0)}, + } + }, + + [119] = + { + names = {"кировÑкаÑ","Kirovskaya"}, + positions = { + {Vector(0, 0, 0),Angle(0,0,0)}, + } + }, + + [120] = + { + names = {"молодежнаÑ","Molodezjnaya"}, + positions = { + {Vector(0, 0, 0),Angle(0,0,0)}, + } + }, +-------------------------------------------------------------- + --[[[201] = + { + names = {"политехничеÑкаÑ","Politehnicheskaya"}, + positions = { + {Vector(13975, 2474, 3000),Angle(0,0,0)}, + } + },]] + + [202] = + { + names = {"пионерÑкаÑ","Pionerskaya"}, + positions = { + {Vector(-13676, -3965, 3684),Angle(0,0,0)}, + } + }, + + [203] = + { + names = {"вокзальнаÑ","Vokzalnaya"}, + positions = { + {Vector(2826, -11557, 4830),Angle(0,0,0)}, + } + }, + + [204] = + { + names = {"калининÑкаÑ","kalininskaya"}, + positions = { + {Vector(0, 0, 0),Angle(0,0,0)}, + } + }, + + [205] = + { + names = {"тимирÑзевÑкаÑ","temiryazevskaya"}, + positions = { + {Vector(0, 0, 0),Angle(0,0,0)}, + } + }, + + depot = { + names = {"депо"}, + positions = { + {Vector(3900, 2595, 250),Angle(0,0,0)}, + } + } +} \ No newline at end of file diff --git a/lua/metrostroi/maps/loopline.lua b/lua/metrostroi/maps/loopline.lua new file mode 100644 index 0000000..5c4e507 --- /dev/null +++ b/lua/metrostroi/maps/loopline.lua @@ -0,0 +1,579 @@ +local Map = game.GetMap():lower() or "" + +if Map:find("gm_mus_loop") then + Metrostroi.PlatformMap = "loop" + Metrostroi.CurrentMap = "gm_loop" + Metrostroi.BogeyOldMap = true +else + return +end +Metrostroi.AddLastStationTex("702",651,"models/metrostroi_schemes/destination_table_black/label_first_april") +Metrostroi.AddLastStationTex("702",654,"models/metrostroi_schemes/destination_table_black/label_marine") +Metrostroi.AddLastStationTex("702",655,"models/metrostroi_schemes/destination_table_black/label_glorious_country") +Metrostroi.AddLastStationTex("702",656,"models/metrostroi_schemes/destination_table_black/label_pioneer") +Metrostroi.AddLastStationTex("710",651,"models/metrostroi_schemes/destination_table_white/label_first_april") +Metrostroi.AddLastStationTex("710",654,"models/metrostroi_schemes/destination_table_white/label_marine") +Metrostroi.AddLastStationTex("710",655,"models/metrostroi_schemes/destination_table_white/label_glorious_country") +Metrostroi.AddLastStationTex("710",656,"models/metrostroi_schemes/destination_table_white/label_pioneer") +Metrostroi.AddLastStationTex("717",651,"models/metrostroi_schemes/destination_table_white/label_first_april") +Metrostroi.AddLastStationTex("717",654,"models/metrostroi_schemes/destination_table_white/label_marine") +Metrostroi.AddLastStationTex("717",655,"models/metrostroi_schemes/destination_table_white/label_glorious_country") +Metrostroi.AddLastStationTex("717",656,"models/metrostroi_schemes/destination_table_white/label_pioneer") +Metrostroi.AddLastStationTex("720",651,"models/metrostroi_schemes/destination_table_white/label_first_april") +Metrostroi.AddLastStationTex("720",654,"models/metrostroi_schemes/destination_table_white/label_marine") +Metrostroi.AddLastStationTex("720",655,"models/metrostroi_schemes/destination_table_white/label_glorious_country") +Metrostroi.AddLastStationTex("720",656,"models/metrostroi_schemes/destination_table_white/label_pioneer") + +Metrostroi.AddPassSchemeTex("717_new","1 Line",{ + "models/metrostroi_schemes/mus_loopline", +}) +Metrostroi.AddPassSchemeTex("720","Crossline",{ + "metrostroi_skins/81-720_schemes/loopliner", + "metrostroi_skins/81-720_schemes/loopline", +}) +Metrostroi.AddPassSchemeTex("722","Crossline",{ + "metrostroi_skins/81-722_schemes/loopliner", + "metrostroi_skins/81-722_schemes/loopline", +}) +Metrostroi.TickerAdverts = { + "МЕТРОПОЛИТЕРИМЕÐИ ГÐРРИ ÐЬЮМÐÐРПРИГЛÐШÐЕТ ÐРРÐБОТУ РЕÐЛЬÐЕ МÐФЕÐЕСТОВ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,ТЕЛЕФОРДЛЯ СПРÐВОК 8 (800) 555-35-35", + "ЭЛЕКТРОДЕПО 'РÐБÐ' ПРИГЛÐШÐЕТ ÐРРÐБОТУ МОЙЩИКОВ", + "Ð’ СВЯЗИ С ВВЕЕДЕÐИЕМ ЭЛЕКТРОПОЕЗДОВ ÐОВОГО ПОКОЛЕÐИЯ Ð’ ЭКСПЛУÐТÐЦИЮ, ЭЛЕКТРОДЕПО 'РÐБÐ' ПРИГЛÐШÐЕТ ÐРРÐБОТУ СЛЕСÐРЕЙ ПОДИВЖÐОГО СОСТÐÐ’Ð", + "УПЦ МЕТРОПОЛИТЕÐРИМЕÐИ ГÐРРИ ÐЬЮМÐÐРПРОВОДИТ ÐÐБОР ÐРОБУЧЕÐИЕ ПО ПРОФЕССИИ 'МÐШИÐИСТ ЭЛЕКТРОПОЕЗДÐ'. ВО ВРЕМЯ ОБУЧЕÐИЯ ВЫПЛÐЧИВÐЕТСЯ СТИПЕÐДИЯ Ð’ РÐЗМЕРЕ 10У.Е.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,ТЕЛЕФОРДЛЯ СПРÐВОК 8 (800) 555-35-35", + "СТÐÐЦИЯ СЛÐВУТИЧ ПРИГЛÐШÐЕТ ÐРРÐБОТУ МÐШИÐИСТОВ И ПОМОЩÐИКОВ МÐШИÐИСТРЭСКÐЛÐТОРÐ. ОПЛÐТР5 КУСОЧКОВ ÐОМЕРÐОГО.", + "ЭЛЕКТРОДЕПО ТЧ1ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ", +} + +Metrostroi.AddSarmatUPOAnnouncer("UPO RHINO",{ + name = "UPO RHINO", + tone = {"subway_announcers/sarmat_upo/tone.mp3",1}, + last_morskaya = {"subway_announcers/sarmat_upo/rhino/loop/last_morskaya.mp3",9.735300}, + last_pervoaprelskaya = {"subway_announcers/sarmat_upo/rhino/loop/last_pervoaprelskaya.mp3",9.996300}, + last_pionerskaya = {"subway_announcers/sarmat_upo/rhino/loop/last_pionerskaya.mp3",9.865800}, + last_slavnaya_strana = {"subway_announcers/sarmat_upo/rhino/loop/last_slavnaya_strana.mp3",10.074600}, + metrostroiteley = {"subway_announcers/sarmat_upo/rhino/loop/metrostroiteley.mp3",1.070100}, + morskaya = {"subway_announcers/sarmat_upo/rhino/loop/morskaya.mp3",0.652500}, + next_metrostroiteley = {"subway_announcers/sarmat_upo/rhino/loop/next_metrostroiteley.mp3",2.088000}, + next_morskaya = {"subway_announcers/sarmat_upo/rhino/loop/next_morskaya.mp3",1.670400}, + next_park = {"subway_announcers/sarmat_upo/rhino/loop/next_park.mp3",1.487700}, + next_pervoaprelskaya = {"subway_announcers/sarmat_upo/rhino/loop/next_pervoaprelskaya.mp3",2.009700}, + next_pionerskaya = {"subway_announcers/sarmat_upo/rhino/loop/next_pionerskaya.mp3",1.879200}, + next_slavnaya_strana = {"subway_announcers/sarmat_upo/rhino/loop/next_slavnaya_strana.mp3",1.983600}, + odz1 = {"subway_announcers/sarmat_upo/rhino/loop/odz1.mp3",2.088000}, + odz2 = {"subway_announcers/sarmat_upo/rhino/loop/odz2.mp3",2.192400}, + park = {"subway_announcers/sarmat_upo/rhino/loop/park.mp3",0.469800}, + pervoaprelskaya = {"subway_announcers/sarmat_upo/rhino/loop/pervoaprelskaya.mp3",0.913500}, + pionerskaya = {"subway_announcers/sarmat_upo/rhino/loop/pionerskaya.mp3",0.809100}, + slavnaya_strana = {"subway_announcers/sarmat_upo/rhino/loop/slavnaya_strana.mp3",1.017900}, + spec_attention_handrails = {"subway_announcers/sarmat_upo/rhino/loop/spec_attention_handrails.mp3",3.967200}, + spec_attention_politeness = {"subway_announcers/sarmat_upo/rhino/loop/spec_attention_politeness.mp3",5.533200}, + spec_line4 = {"subway_announcers/sarmat_upo/rhino/loop/spec_line4.mp3",1.905300}, + spec_line5= {"subway_announcers/sarmat_upo/rhino/loop/spec_line5.mp3",1.748700}, +},{ + { + LED = {5,6,5,6,5,5}, + Name = "Line 1", + Loop = true, + { + 651,"ПервоапрельÑкаÑ","First april", + arr = {{"pervoaprelskaya",3,"next_park","spec_line4"},{"pervoaprelskaya",3,"next_pionerskaya","spec_line5",0.4,"spec_attention_handrails"}}, + dep = {"next_park","next_pionerskaya"}, + arrlast = {"last_pervoaprelskaya","last_pervoaprelskaya"}, + odz = "odz1", + }, + { + 652,"Парк","Park", + arr = {{"park",3,"next_metrostroiteley","spec_line5"},{"park",3,"next_pervoaprelskaya",0.4,"spec_attention_politeness"}}, + dep = {"next_metrostroiteley","next_pervoaprelskaya"}, + odz = "odz2", + }, + { + 653,"МетроÑтроителей","Metrostroiteley", + arr = {{"metrostroiteley",3,"next_morskaya",0.4,"spec_attention_politeness"},{"metrostroiteley",3,"next_park","spec_line4"}}, + dep = {"next_morskaya","next_park"}, + odz = "odz1", + }, + { + 654,"МорÑкаÑ","Marine", + arr = {{"morskaya",3,"next_slavnaya_strana","spec_line4"},{"morskaya",3,"next_metrostroiteley","spec_line5"}}, + dep = {"next_slavnaya_strana","next_metrostroiteley"}, + arrlast = {"last_morskaya","last_morskaya"}, + odz = "odz2", + }, + { + 655,"Ð¡Ð»Ð°Ð²Ð½Ð°Ñ Ñтр.","Glorious c.", + arr = {{"slavnaya_strana",3,"next_pionerskaya","spec_line5"},{"slavnaya_strana",3,"next_morskaya"}}, + dep = {"next_pionerskaya","next_morskaya"}, + arrlast = {"last_slavnaya_strana","last_slavnaya_strana"}, + odz = "odz2", + }, + { + 656,"ПионерÑкаÑ","Pionerskaya", + arr = {{"pionerskaya",3,"next_pervoaprelskaya",0.4,"spec_attention_handrails"},{"pionerskaya",3,"next_slavnaya_strana","spec_line4"}}, + dep = {"next_pervoaprelskaya","next_slavnaya_strana"}, + arrlast = {"last_pionerskaya","last_pionerskaya"}, + odz = "odz1", + }, + } +}) +Metrostroi.SetUPOAnnouncer({ + tone = {"subway_announcers/upo/rhino/loop/tone.mp3",1}, + click1 = {"subway_announcers/upo/click1.mp3", 0.3}, + click2 = {"subway_announcers/upo/click2.mp3", 0.1}, + odz = {"subway_announcers/upo/rhino/loop/odz.mp3",2.02}, + last_morskaya = {"subway_announcers/upo/rhino/loop/last_morskaya.mp3",9.735300}, + last_pervoaprelskaya = {"subway_announcers/upo/rhino/loop/last_pervoaprelskaya.mp3",9.996300}, + last_pionerskaya = {"subway_announcers/upo/rhino/loop/last_pionerskaya.mp3",9.865800}, + last_slavnaya_strana = {"subway_announcers/upo/rhino/loop/last_slavnaya_strana.mp3",10.074600}, + metrostroiteley = {"subway_announcers/upo/rhino/loop/metrostroiteley.mp3",1.070100}, + morskaya = {"subway_announcers/upo/rhino/loop/morskaya.mp3",0.652500}, + next_metrostroiteley = {"subway_announcers/upo/rhino/loop/next_metrostroiteley.mp3",2.088000}, + next_morskaya = {"subway_announcers/upo/rhino/loop/next_morskaya.mp3",1.670400}, + next_park = {"subway_announcers/upo/rhino/loop/next_park.mp3",1.487700}, + next_pervoaprelskaya = {"subway_announcers/upo/rhino/loop/next_pervoaprelskaya.mp3",2.009700}, + next_pionerskaya = {"subway_announcers/upo/rhino/loop/next_pionerskaya.mp3",1.879200}, + next_slavnaya_strana = {"subway_announcers/upo/rhino/loop/next_slavnaya_strana.mp3",1.983600}, + park = {"subway_announcers/upo/rhino/loop/park.mp3",0.469800}, + pervoaprelskaya = {"subway_announcers/upo/rhino/loop/pervoaprelskaya.mp3",0.913500}, + pionerskaya = {"subway_announcers/upo/rhino/loop/pionerskaya.mp3",0.809100}, + slavnaya_strana = {"subway_announcers/upo/rhino/loop/slavnaya_strana.mp3",1.017900}, + spec_attention_handrails = {"subway_announcers/upo/rhino/loop/spec_attention_handrails.mp3",3.967200}, + spec_attention_politeness = {"subway_announcers/upo/rhino/loop/spec_attention_politeness.mp3",5.533200}, + spec_line4 = {"subway_announcers/upo/rhino/loop/spec_line4.mp3",1.905300}, + spec_line5= {"subway_announcers/upo/rhino/loop/spec_line5.mp3",1.748700}, +},{ + { + 651,"ПервоапрельÑкаÑ","First april", + arr = {{"pervoaprelskaya",0.5,"next_park","spec_line4"},{"pervoaprelskaya",0.5,"next_pionerskaya","spec_line5",0.4,"spec_attention_handrails"}}, + dep = {"odz","odz"}, + arrlast = {"last_pervoaprelskaya","last_pervoaprelskaya"}, + noises = {1,3},noiserandom = 0.3, + }, + { + 652,"Парк","Park", + arr = {{"park",0.5,"next_metrostroiteley","spec_line5"},{"park",0.5,"next_pervoaprelskaya",0.4,"spec_attention_politeness"}}, + dep = {"odz","odz"}, + noises = {2,3},noiserandom = 0.2, + }, + { + 653,"МетроÑтроителей","Metrostroiteley", + arr = {{"metrostroiteley",0.5,"next_morskaya",0.4,"spec_attention_politeness"},{"metrostroiteley",0.5,"next_park","spec_line4"}}, + dep = {"odz","odz"}, + noises = {1,2},noiserandom = 0.6, + }, + { + 654,"МорÑкаÑ","Marine", + arr = {{"morskaya",0.5,"next_slavnaya_strana","spec_line4"},{"morskaya",0.5,"next_metrostroiteley","spec_line5"}}, + dep = {"odz","odz"}, + arrlast = {"last_morskaya","last_morskaya"}, + noises = {1},noiserandom = 0.5, + }, + { + 655,"Ð¡Ð»Ð°Ð²Ð½Ð°Ñ Ñтр.","Glorious country", + arr = {{"slavnaya_strana",0.5,"next_pionerskaya","spec_line5"},{"slavnaya_strana",0.5,"next_morskaya"}}, + dep = {"odz","odz"}, + arrlast = {"last_slavnaya_strana","last_slavnaya_strana"}, + noises = {2,3},noiserandom = 0.2, + }, + { + 656,"ПионерÑкаÑ","Pionerskaya", + arr = {{"pionerskaya",0.5,"next_pervoaprelskaya",0.4,"spec_attention_handrails"},{"pionerskaya",0.5,"next_slavnaya_strana","spec_line4"}}, + dep = {"odz","odz"}, + arrlast = {"last_pionerskaya","last_pionerskaya"}, + noises = {1,2,3},noiserandom = 0.1, + }, +}) + + +Metrostroi.AddANSPAnnouncer("ASNP Boiko + Pyaseckaya",{ + asnp = true, + click1 = {"subway_announcers/asnp/boiko_new/click1.mp3",0.5}, + click2 = {"subway_announcers/asnp/boiko_new/click2.mp3",0.3}, + click3 = {"subway_announcers/asnp/boiko_new/click3.mp3",0.3}, + + announcer_ready = {"subway_announcers/asnp/boiko_new/announcer_ready.mp3",3.295479}, + doors_closing_m = {"subway_announcers/asnp/boiko_new/doors_closing.mp3",3.782542}, + deadlock_m = {"subway_announcers/asnp/boiko_new/spec_attention_deadlock.mp3",9.352500}, + exit_m = {"subway_announcers/asnp/boiko_new/spec_attention_exit.mp3",5.363563}, + handrails_m = {"subway_announcers/asnp/boiko_new/spec_attention_handrails.mp3",4.221854}, + last_m = {"subway_announcers/asnp/boiko_new/spec_attention_last.mp3",4.425625}, + objects_m = {"subway_announcers/asnp/boiko_new/spec_attention_objects.mp3",4.674771}, + politeness_m = {"subway_announcers/asnp/boiko_new/spec_attention_politeness.mp3",9.057104}, + things_m = {"subway_announcers/asnp/boiko_new/spec_attention_things.mp3",4.559146}, + train_depeat_m = {"subway_announcers/asnp/boiko_new/spec_attention_train_depeat.mp3",4.633417}, + train_stop_m = {"subway_announcers/asnp/boiko_new/spec_attention_train_stop.mp3",6.501979}, + station_m = {"subway_announcers/asnp/boiko_new/station.mp3",0.943438}, + train_goes_to_m = {"subway_announcers/asnp/boiko_new/train_goes_to.mp3",2.077708}, + + metrostroiteley_arr_m = {"subway_announcers/asnp/boiko_new/loopline/metrostroiteley_arr.mp3",3.264208}, + metrostroiteley_next_m = {"subway_announcers/asnp/boiko_new/loopline/metrostroiteley_next.mp3",1.291229}, + morskaya_m = {"subway_announcers/asnp/boiko_new/loopline/morskaya.mp3",1.085170}, + park_arr_m = {"subway_announcers/asnp/boiko_new/loopline/park_arr.mp3",2.638146}, + park_next_m = {"subway_announcers/asnp/boiko_new/loopline/park_next.mp3",0.624333}, + pervoaprelskaya_m = {"subway_announcers/asnp/boiko_new/loopline/pervoaprelskaya.mp3",1.186750}, + pionerskaya_arr_m = {"subway_announcers/asnp/boiko_new/loopline/pionerskaya_arr.mp3",2.980854}, + pionerskaya_next_m = {"subway_announcers/asnp/boiko_new/loopline/pionerskaya_next.mp3",1.035500}, + skip_park_m = {"subway_announcers/asnp/boiko_new/loopline/skip_park.mp3",5.091938}, + slavnaya_strana_arr_m = {"subway_announcers/asnp/boiko_new/loopline/slavnaya_strana_arr.mp3",3.270875}, + slavnaya_strana_next_m = {"subway_announcers/asnp/boiko_new/loopline/slavnaya_strana_next.mp3",1.365604}, + + doors_closing_f = {"subway_announcers/asnp/pyaseckaya/doors_closing.mp3",2.340813}, + deadlock_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_deadlock.mp3",10.501979}, + exit_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_exit.mp3",5.111104}, + handrails_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_handrails.mp3",4.675083}, + last_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_last.mp3",4.878542}, + objects_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_objects.mp3",5.323146}, + politeness_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_politeness.mp3",10.685375}, + things_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_things.mp3",5.144021}, + train_depeat_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_train_depeat.mp3",4.481875}, + train_stop_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_train_stop.mp3",6.395313}, + + arr_metrostroiteley_f = {"subway_announcers/asnp/pyaseckaya/loopline/arr_metrostroiteley.mp3",4.936458}, + arr_morskaya_f = {"subway_announcers/asnp/pyaseckaya/loopline/arr_morskaya.mp3",1.874917}, + arr_park_f = {"subway_announcers/asnp/pyaseckaya/loopline/arr_park.mp3",3.602146}, + arr_pervoaprelskaya_f = {"subway_announcers/asnp/pyaseckaya/loopline/arr_pervoaprelskaya.mp3",2.208521}, + arr_pionerskaya_f = {"subway_announcers/asnp/pyaseckaya/loopline/arr_pionerskaya.mp3",4.471729}, + arr_slavnaya_strana_f = {"subway_announcers/asnp/pyaseckaya/loopline/arr_slavnaya_strana.mp3",4.996729}, + morskaya_f = {"subway_announcers/asnp/pyaseckaya/loopline/morskaya.mp3",0.992667}, + next_metrostroiteley_f = {"subway_announcers/asnp/pyaseckaya/loopline/next_metrostroiteley.mp3",3.245333}, + next_morskaya_f = {"subway_announcers/asnp/pyaseckaya/loopline/next_morskaya.mp3",2.688708}, + next_park_f = {"subway_announcers/asnp/pyaseckaya/loopline/next_park.mp3",2.285958}, + next_pervoaprelskaya_f = {"subway_announcers/asnp/pyaseckaya/loopline/next_pervoaprelskaya.mp3",2.868479}, + next_pionerskaya_f = {"subway_announcers/asnp/pyaseckaya/loopline/next_pionerskaya.mp3",3.003958}, + next_slavnaya_strana_f = {"subway_announcers/asnp/pyaseckaya/loopline/next_slavnaya_strana.mp3",3.037104}, + pervoaprelskaya_f = {"subway_announcers/asnp/pyaseckaya/loopline/pervoaprelskaya.mp3",1.389958}, + pionerskaya_f = {"subway_announcers/asnp/pyaseckaya/loopline/pionerskaya.mp3",1.220271}, + skip_park_f = {"subway_announcers/asnp/pyaseckaya/loopline/skip_park.mp3",5.944917}, + slavnaya_strana_f = {"subway_announcers/asnp/pyaseckaya/loopline/slavnaya_strana.mp3",1.532729}, + to_morskaya_f = {"subway_announcers/asnp/pyaseckaya/loopline/to_morskaya.mp3",3.279521}, + to_pervoaprelskaya_f = {"subway_announcers/asnp/pyaseckaya/loopline/to_pervoaprelskaya.mp3",3.481292}, + to_pionerskaya_f = {"subway_announcers/asnp/pyaseckaya/loopline/to_pionerskaya.mp3",3.558833}, + to_slavnaya_strana_f = {"subway_announcers/asnp/pyaseckaya/loopline/to_slavnaya_strana.mp3",3.839063}, +},{ + { + LED = {5,5,5,5,5,5}, + Name = "Line 1", + Loop = true, + BlockDoors = true, + spec_last = {"last_m",0.5,"things_m"}, + spec_last_f = {"last_f",0.5,"things_f"}, + spec_wait = {{"train_stop_m"},{"train_depeat_m"}}, + spec_wait_f = {{"train_stop_f"},{"train_depeat_f"}}, + { + 651,"ПервоапрельÑкаÑ","First april", + arr = {{"station_m","pervoaprelskaya_m","skip_park_m"},"arr_pervoaprelskaya_f"}, + dep = {{"doors_closing_m","metrostroiteley_next_m"},{"doors_closing_f","next_pionerskaya_f"}}, + arrlast = {nil,{"arr_pervoaprelskaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},"pervoaprelskaya_m"}, + not_last = {3,"train_goes_to_m","pervoaprelskaya_m"}, + not_last_f = {3,"to_pervoaprelskaya_f"}, + not_last_c = {nil, "not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + --[[{ + 652,"Парк", + arr = {{"station_m","park_arr_m",0.1,"things_m"},{"arr_park_f",0.1,"objects_f"}}, + dep = {{"doors_closing_m","metrostroiteley_next_m"},{"doors_closing_f","next_pervoaprelskaya_f"}}, + have_inrerchange = true, + },]] + { + 653,"МетроÑтроителей","Metrostroiteley", + arr = {{"station_m","metrostroiteley_arr_m",0.1,"objects_m"},{"arr_metrostroiteley_f","skip_park_f",0.1,"things_f"}}, + dep = {{"doors_closing_m","morskaya_m"},{"doors_closing_f","next_pervoaprelskaya_f"}}, + not_last_c = {nil, "not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + have_inrerchange = true, + }, + { + 654,"МорÑкаÑ","Marine", + arr = {{"station_m","morskaya_m"},"arr_morskaya_f"}, + dep = {{"doors_closing_m","slavnaya_strana_next_m"},{"doors_closing_f","next_metrostroiteley_f",0.1,"politeness_f"}}, + arrlast = {{"station_m","morskaya_m",0.5,"last_m",2,"things_m",2,"deadlock_m"},nil,"morskaya_m"}, + not_last = {3,"train_goes_to_m","morskaya_m"}, + not_last_f = {3,"to_morskaya_f"}, + not_last_c = {nil, "not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 655,"Ð¡Ð»Ð°Ð²Ð½Ð°Ñ Ñтр.","Glorious c.", + arr = {{"station_m","slavnaya_strana_arr_m"},{"arr_slavnaya_strana_f",0.1,"exit_f"}}, + dep = {{"doors_closing_m","pionerskaya_next_m"},{"doors_closing_f","next_morskaya_f"}}, + arrlast = {nil,{"arr_slavnaya_strana_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},"slavnaya_strana_next_m"}, + not_last = {3,"train_goes_to_m","slavnaya_strana_next_m"}, + not_last_f = {3,"to_slavnaya_strana_f"}, + not_last_c = {nil, "not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + have_inrerchange = true, + }, + { + 656,"ПионерÑкаÑ","Pionerskaya", + arr = {{"station_m","pionerskaya_arr_m",0.1,"exit_m"},"arr_pionerskaya_f"}, + dep = {{"doors_closing_m","pervoaprelskaya_m"},{"doors_closing_f","next_slavnaya_strana_f"}}, + arrlast = {{"station_m","pionerskaya_arr_m",0.5,"last_m",2,"things_m",2,"deadlock_m"},{"arr_pionerskaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},"pionerskaya_next_m"}, + not_last = {3,"train_goes_to_m","pionerskaya_next_m"}, + not_last_f = {3,"to_pionerskaya_f"}, + not_last_c = {nil, "not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + have_inrerchange = true, + }, + }, +}) + +Metrostroi.AddANSPAnnouncer("RIU Boiko + Pyaseckaya",{ + riu = true, + + click1 = {"subway_announcers/riu/boiko_new/click1.mp3",0.5}, + click2 = {"subway_announcers/riu/boiko_new/click2.mp3",0.3}, + click3 = {"subway_announcers/riu/boiko_new/click3.mp3",0.3}, + click_start = {"subway_announcers/riu/boiko_new/click1.mp3",0.5}, + click_end = {"subway_announcers/riu/boiko_new/click3.mp3",0.3}, + + announcer_ready = {"subway_announcers/riu/boiko_new/announcer_ready.mp3",3.785}, + doors_closing_m = {"subway_announcers/riu/boiko_new/doors_closing.mp3",5}, + deadlock_m = {"subway_announcers/riu/boiko_new/spec_attention_deadlock.mp3",9.608}, + exit_m = {"subway_announcers/riu/boiko_new/spec_attention_exit.mp3",5.985}, + handrails_m = {"subway_announcers/riu/boiko_new/spec_attention_handrails.mp3",4.929}, + last_m = {"subway_announcers/riu/boiko_new/spec_attention_last.mp3",4.556}, + objects_m = {"subway_announcers/riu/boiko_new/spec_attention_objects.mp3",5.278}, + politeness_m = {"subway_announcers/riu/boiko_new/spec_attention_politeness.mp3",10.335}, + things_m = {"subway_announcers/riu/boiko_new/spec_attention_things.mp3",5.101}, + train_depeat_m = {"subway_announcers/riu/boiko_new/spec_attention_train_depeat.mp3",5.209}, + train_stop_m = {"subway_announcers/riu/boiko_new/spec_attention_train_stop.mp3",7.370}, + station_m = {"subway_announcers/riu/boiko_new/station.mp3",1.2}, + train_goes_to_m = {"subway_announcers/riu/boiko_new/train_goes_to.mp3",2.540}, + + metrostroiteley_arr_m = {"subway_announcers/riu/boiko_new/loopline/metrostroiteley_arr.mp3",3.434036}, + metrostroiteley_next_m = {"subway_announcers/riu/boiko_new/loopline/metrostroiteley_next.mp3",1.434036}, + morskaya_m = {"subway_announcers/riu/boiko_new/loopline/morskaya.mp3",0.983447}, + park_arr_m = {"subway_announcers/riu/boiko_new/loopline/park_arr.mp3",3.144943}, + park_next_m = {"subway_announcers/riu/boiko_new/loopline/park_next.mp3",0.794512}, + pervoaprelskaya_m = {"subway_announcers/riu/boiko_new/loopline/pervoaprelskaya.mp3",1.457211}, + pionerskaya_arr_m = {"subway_announcers/riu/boiko_new/loopline/pionerskaya_arr.mp3",3.234785}, + pionerskaya_next_m = {"subway_announcers/riu/boiko_new/loopline/pionerskaya_next.mp3",1.112290}, + skip_park_m = {"subway_announcers/riu/boiko_new/loopline/skip_park.mp3",5.925646}, + slavnaya_strana_arr_m = {"subway_announcers/riu/boiko_new/loopline/slavnaya_strana_arr.mp3",3.821610}, + slavnaya_strana_next_m = {"subway_announcers/riu/boiko_new/loopline/slavnaya_strana_next.mp3",1.592494}, + + doors_closing_f = {"subway_announcers/riu/pyaseckaya/doors_closing.mp3",2.994}, + deadlock_f = {"subway_announcers/riu/pyaseckaya/spec_attention_deadlock.mp3",10.133}, + exit_f = {"subway_announcers/riu/pyaseckaya/spec_attention_exit.mp3",5.466}, + handrails_f = {"subway_announcers/riu/pyaseckaya/spec_attention_handrails.mp3",4.744}, + last_f = {"subway_announcers/riu/pyaseckaya/spec_attention_last.mp3",4.506}, + objects_f = {"subway_announcers/riu/pyaseckaya/spec_attention_objects.mp3",5.219}, + politeness_f = {"subway_announcers/riu/pyaseckaya/spec_attention_politeness.mp3",10.221}, + things_f = {"subway_announcers/riu/pyaseckaya/spec_attention_things.mp3",5.154}, + train_depeat_f = {"subway_announcers/riu/pyaseckaya/spec_attention_train_depeat.mp3",4.829}, + train_stop_f = {"subway_announcers/riu/pyaseckaya/spec_attention_train_stop.mp3",7.240}, + + arr_metrostroiteley_f = {"subway_announcers/riu/pyaseckaya/loopline/arr_metrostroiteley.mp3",5.278526}, + arr_morskaya_f = {"subway_announcers/riu/pyaseckaya/loopline/arr_morskaya.mp3",1.893469}, + arr_park_f = {"subway_announcers/riu/pyaseckaya/loopline/arr_park.mp3",3.770590}, + arr_pervoaprelskaya_f = {"subway_announcers/riu/pyaseckaya/loopline/arr_pervoaprelskaya.mp3",2.302834}, + arr_pionerskaya_f = {"subway_announcers/riu/pyaseckaya/loopline/arr_pionerskaya.mp3",4.670862}, + arr_slavnaya_strana_f = {"subway_announcers/riu/pyaseckaya/loopline/arr_slavnaya_strana.mp3",5.182018}, + morskaya_f = {"subway_announcers/riu/pyaseckaya/loopline/morskaya.mp3",0.973741}, + next_metrostroiteley_f = {"subway_announcers/riu/pyaseckaya/loopline/next_metrostroiteley.mp3",3.265329}, + next_morskaya_f = {"subway_announcers/riu/pyaseckaya/loopline/next_morskaya.mp3",2.726259}, + next_park_f = {"subway_announcers/riu/pyaseckaya/loopline/next_park.mp3",2.282200}, + next_pervoaprelskaya_f = {"subway_announcers/riu/pyaseckaya/loopline/next_pervoaprelskaya.mp3",3.040998}, + next_pionerskaya_f = {"subway_announcers/riu/pyaseckaya/loopline/next_pionerskaya.mp3",3.051043}, + next_slavnaya_strana_f = {"subway_announcers/riu/pyaseckaya/loopline/next_slavnaya_strana.mp3",3.010068}, + pervoaprelskaya_f = {"subway_announcers/riu/pyaseckaya/loopline/pervoaprelskaya.mp3",1.402902}, + pionerskaya_f = {"subway_announcers/riu/pyaseckaya/loopline/pionerskaya.mp3",1.130952}, + skip_park_f = {"subway_announcers/riu/pyaseckaya/loopline/skip_park.mp3",5.990408}, + slavnaya_strana_f = {"subway_announcers/riu/pyaseckaya/loopline/slavnaya_strana.mp3",1.504286}, + to_morskaya_f = {"subway_announcers/riu/pyaseckaya/loopline/to_morskaya.mp3",3.354150}, + to_pervoaprelskaya_f = {"subway_announcers/riu/pyaseckaya/loopline/to_pervoaprelskaya.mp3",3.599660}, + to_pionerskaya_f = {"subway_announcers/riu/pyaseckaya/loopline/to_pionerskaya.mp3",3.646735}, + to_slavnaya_strana_f = {"subway_announcers/riu/pyaseckaya/loopline/to_slavnaya_strana.mp3",3.939138}, +},{ + { + LED = {5,5,5,5,5,5}, + Name = "Line 1", + Loop = true, + BlockDoors = true, + spec_last = {"last_m",0.5,"things_m"}, + spec_last_f = {"last_f",0.5,"things_f"}, + spec_wait = {{"train_stop_m"},{"train_depeat_m"}}, + spec_wait_f = {{"train_stop_f"},{"train_depeat_f"}}, + { + 651,"ПервоапрельÑкаÑ","First april", + arr = {{"station_m","pervoaprelskaya_m","skip_park_m"},"arr_pervoaprelskaya_f"}, + dep = {{"doors_closing_m","metrostroiteley_next_m"},{"doors_closing_f","next_pionerskaya_f"}}, + arrlast = {nil,{"arr_pervoaprelskaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},"pervoaprelskaya_m"}, + not_last = {3,"train_goes_to_m","pervoaprelskaya_m"}, + not_last_f = {3,"to_pervoaprelskaya_f"}, + not_last_c = {nil, "not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + --[[{ + 652,"Парк", + arr = {{"station_m","park_arr_m",0.1,"things_m"},{"arr_park_f",0.1,"objects_f"}}, + dep = {{"doors_closing_m","metrostroiteley_next_m"},{"doors_closing_f","next_pervoaprelskaya_f"}}, + have_inrerchange = true, + },]] + { + 653,"МетроÑтроителей","Metrostroiteley", + arr = {{"station_m","metrostroiteley_arr_m",0.1,"objects_m"},{"arr_metrostroiteley_f","skip_park_f",0.1,"things_f"}}, + dep = {{"doors_closing_m","morskaya_m"},{"doors_closing_f","next_pervoaprelskaya_f"}}, + not_last_c = {nil, "not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + have_inrerchange = true, + }, + { + 654,"МорÑкаÑ","Marine", + arr = {{"station_m","morskaya_m"},"arr_morskaya_f"}, + dep = {{"doors_closing_m","slavnaya_strana_next_m"},{"doors_closing_f","next_metrostroiteley_f",0.1,"politeness_f"}}, + arrlast = {{"station_m","morskaya_m",0.5,"last_m",2,"things_m",2,"deadlock_m"},nil,"morskaya_m"}, + not_last = {3,"train_goes_to_m","morskaya_m"}, + not_last_f = {3,"to_morskaya_f"}, + not_last_c = {nil, "not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 655,"Ð¡Ð»Ð°Ð²Ð½Ð°Ñ Ñтр.","Glorious c.", + arr = {{"station_m","slavnaya_strana_arr_m"},{"arr_slavnaya_strana_f",0.1,"exit_f"}}, + dep = {{"doors_closing_m","pionerskaya_next_m"},{"doors_closing_f","next_morskaya_f"}}, + arrlast = {nil,{"arr_slavnaya_strana_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},"slavnaya_strana_next_m"}, + not_last = {3,"train_goes_to_m","slavnaya_strana_next_m"}, + not_last_f = {3,"to_slavnaya_strana_f"}, + not_last_c = {nil, "not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + have_inrerchange = true, + }, + { + 656,"ПионерÑкаÑ","Pionerskaya", + arr = {{"station_m","pionerskaya_arr_m",0.1,"exit_m"},"arr_pionerskaya_f"}, + dep = {{"doors_closing_m","pervoaprelskaya_m"},{"doors_closing_f","next_slavnaya_strana_f"}}, + arrlast = {{"station_m","pionerskaya_arr_m",0.5,"last_m",2,"things_m",2,"deadlock_m"},{"arr_pionerskaya_f",0.5,"last_f",2,"things_f",2,"deadlock_f"},"pionerskaya_next_m"}, + not_last = {3,"train_goes_to_m","pionerskaya_next_m"}, + not_last_f = {3,"to_pionerskaya_f"}, + not_last_c = {nil, "not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + have_inrerchange = true, + }, + }, +}) + +Metrostroi.SetRRIAnnouncer({ + click_end = {"subway_announcers/rri/boiko/spec/click_end.mp3",0.1}, + click_start = {"subway_announcers/rri/boiko/spec/click_start.mp3",0.1}, + last = {"subway_announcers/rri/boiko/spec/last.mp3",22.264354}, + exit = {"subway_announcers/rri/boiko/spec/spec_attention_exit.mp3",5.446236}, + handrails = {"subway_announcers/rri/boiko/spec/spec_attention_handrails.mp3",4.594558}, + objects = {"subway_announcers/rri/boiko/spec/spec_attention_objects.mp3",5.143175}, + things = {"subway_announcers/rri/boiko/spec/spec_attention_things.mp3",05.093}, + politeness = {"subway_announcers/rri/boiko/spec/spec_attention_politeness.mp3",11.457075}, + train_depeat = {"subway_announcers/rri/boiko/spec/spec_attention_train_depeat.mp3",4.842222}, + train_stop = {"subway_announcers/rri/boiko/spec/spec_attention_train_stop.mp3",6.963424}, + + arr_metrostroiteley = {"subway_announcers/rri/boiko/loopline/arr_metrostroiteley.mp3",4.055533}, + arr_morskaya = {"subway_announcers/rri/boiko/loopline/arr_morskaya.mp3",2.024943}, + arr_park = {"subway_announcers/rri/boiko/loopline/arr_park.mp3",3.762721}, + arr_pervoaprelskaya = {"subway_announcers/rri/boiko/loopline/arr_pervoaprelskaya.mp3",2.368798}, + arr_pionerskaya = {"subway_announcers/rri/boiko/loopline/arr_pionerskaya.mp3",4.074036}, + arr_slavnaya_strana = {"subway_announcers/rri/boiko/loopline/arr_slavnaya_strana.mp3",4.395465}, + next_metrostroiteley = {"subway_announcers/rri/boiko/loopline/next_metrostroiteley.mp3",4.841429}, + next_morskaya = {"subway_announcers/rri/boiko/loopline/next_morskaya.mp3",4.846440}, + next_park = {"subway_announcers/rri/boiko/loopline/next_park.mp3",5.244014}, + next_pervoaprelskaya = {"subway_announcers/rri/boiko/loopline/next_pervoaprelskaya.mp3",5.477551}, + next_pionerskaya = {"subway_announcers/rri/boiko/loopline/next_pionerskaya.mp3",5.424694}, + next_slavnaya_strana = {"subway_announcers/rri/boiko/loopline/next_slavnaya_strana.mp3",5.635828}, + skip_park = {"subway_announcers/rri/boiko/loopline/skip_park.mp3",5.650794}, + to_morskaya = {"subway_announcers/rri/boiko/loopline/to_morskaya.mp3",4.707687}, + to_pervoaprelskaya = {"subway_announcers/rri/boiko/loopline/to_pervoaprelskaya.mp3",5.230794}, + to_pionerskaya = {"subway_announcers/rri/boiko/loopline/to_pionerskaya.mp3",4.834286}, + to_slavnaya_strana = {"subway_announcers/rri/boiko/loopline/to_slavnaya_strana.mp3",5.505760}, +},{ + { + LED = {5,5,5,5,5,5}, + Loop = true, + Name = "Line 1", + spec_last = {"last"}, + spec_wait = {{"train_stop"},{"train_depeat"}}, + { + 651,"ПервоапрельÑкаÑ","First april", + arr = {{"arr_pervoaprelskaya","skip_park"},"arr_pervoaprelskaya"}, + dep = {{"next_metrostroiteley"},{"next_pionerskaya"}}, + arrlast = {nil,{"arr_pervoaprelskaya",0.5,"last",2,"things",2,"deadlock"}}, + not_last = {3,"to_pervoaprelskaya"}, + }, + { + 653,"МетроÑтроителей","Metrostroiteley", + arr = {{"arr_metrostroiteley",0.1,"objects"},{"arr_metrostroiteley","skip_park",0.1,"things"}}, + dep = {{"next_morskaya"},{"next_pervoaprelskaya"}}, + have_inrerchange = true, + }, + { + 654,"МорÑкаÑ","Marine", + arr = {{"arr_morskaya"},"arr_morskaya"}, + dep = {{"next_slavnaya_strana"},{"next_metrostroiteley",0.1,"politeness"}}, + arrlast = {{"morskaya",0.5,"last",2,"things",2,"deadlock"}}, + not_last = {3,"to_morskaya"}, + }, + { + 655,"Ð¡Ð»Ð°Ð²Ð½Ð°Ñ Ñтр.","Glorious c.", + arr = {{"arr_slavnaya_strana"},{"arr_slavnaya_strana",0.1,"exit"}}, + dep = {{"next_pionerskaya"},{"next_morskaya"}}, + arrlast = {nil,{"arr_slavnaya_strana",0.5,"last",2,"things",2,"deadlock"}}, + not_last = {3,"to_slavnaya_strana"}, + have_inrerchange = true, + }, + { + 656,"ПионерÑкаÑ","Pionerskaya", + arr = {{"arr_pionerskaya",0.1,"exit"},"arr_pionerskaya"}, + dep = {{"next_pervoaprelskaya"},{"next_slavnaya_strana"}}, + arrlast = {{"arr_pionerskaya",0.5,"last",2,"things",2,"deadlock"},{"arr_pionerskaya",0.5,"last",2,"things",2,"deadlock"}}, + not_last = {3,"to_pionerskaya"}, + have_inrerchange = true, + }, + }, +}) +Metrostroi.StationSound = { + {"subway_stations/announces/orange/orange_1.mp3",51.965563}, + {"subway_stations/announces/orange/orange_2.mp3",47.132875}, + {"subway_stations/announces/orange/orange_3.mp3",42.169625}, + {"subway_stations/announces/orange/orange_4.mp3",44.494500}, + {"subway_stations/announces/orange/orange_5.mp3",26.548438}, + {"subway_stations/announces/orange/orange_6.mp3",39.661875}, +} + +Metrostroi.StationConfigurations = { + [651] = { + names = {"первоапрельÑкаÑ","First april"}, + positions = { + {Vector(-1655,-390,-497),Angle(0,0,0)}, + }, + }, + [652] = { + names = {"парк","Park"}, + positions = { + {Vector(2675,10622,-1004),Angle(0,0,0)}, + }, + }, + [653] = { + names = {"метроÑтроителей","Metrostroiteley","Metrobuilder station"}, + positions = { + {Vector(3544,-8880,-2034),Angle(0,0,0)}, + }, + }, + [654] = { + names = {"морÑкаÑ","Marine"}, + positions = { + {Vector(14950, 4282, -5105),Angle(0,0,0)}, + }, + }, + [655] = { + names = {"ÑÐ»Ð°Ð²Ð½Ð°Ñ Ñтрана","Glorious country"}, + positions = { + {Vector(-10223,3444,-3057.97),Angle(0,0,0)}, + }, + }, + [656] = { + names = {"пионерÑкаÑ","Pionerskaya","Pioneer station"}, + positions = { + {Vector(-15200,7954,-1010),Angle(0,0,0)}, + }, + }, + depot = { + names = {"Депо","депо"}, + positions = { + {Vector(-9315,-8450,918),Angle(0,0,0)}, + } + }, + pto = { + pto = {"пто","ПТО"}, + positions = { + {Vector(-4539,5624,-4597),Angle(0,0,0)}, + } + } +} \ No newline at end of file diff --git a/lua/metrostroi/maps/orange.lua b/lua/metrostroi/maps/orange.lua new file mode 100644 index 0000000..04acb9d --- /dev/null +++ b/lua/metrostroi/maps/orange.lua @@ -0,0 +1,879 @@ +local Map = game.GetMap():lower() or "" + +if Map:find("gm_mus_crimson") then + return +elseif Map:find("gm_mus") and Map:find("neoorange") then + Metrostroi.PlatformMap = "orange" + Metrostroi.CurrentMap = "gm_orange" +else + return +end + +Metrostroi.AddLastStationTex("702",401,"models/metrostroi_schemes/destination_table_black/label_ikarus") +Metrostroi.AddLastStationTex("702",404,"models/metrostroi_schemes/destination_table_black/label_aeroport") +Metrostroi.AddLastStationTex("702",408,"models/metrostroi_schemes/destination_table_black/label_park") +Metrostroi.AddLastStationTex("702",411,"models/metrostroi_schemes/destination_table_black/label_wallance_breen") +Metrostroi.AddLastStationTex("710",401,"models/metrostroi_schemes/destination_table_white/label_ikarus") +Metrostroi.AddLastStationTex("710",404,"models/metrostroi_schemes/destination_table_white/label_aeroport") +Metrostroi.AddLastStationTex("710",408,"models/metrostroi_schemes/destination_table_white/label_park") +Metrostroi.AddLastStationTex("710",411,"models/metrostroi_schemes/destination_table_white/label_wallance_breen") +Metrostroi.AddLastStationTex("717",401,"models/metrostroi_schemes/destination_table_white/label_ikarus") +Metrostroi.AddLastStationTex("717",404,"models/metrostroi_schemes/destination_table_white/label_aeroport") +Metrostroi.AddLastStationTex("717",408,"models/metrostroi_schemes/destination_table_white/label_park") +Metrostroi.AddLastStationTex("717",411,"models/metrostroi_schemes/destination_table_white/label_wallance_breen") +Metrostroi.AddLastStationTex("720",401,"models/metrostroi_schemes/destination_table_white/label_ikarus") +Metrostroi.AddLastStationTex("720",404,"models/metrostroi_schemes/destination_table_white/label_aeroport") +Metrostroi.AddLastStationTex("720",408,"models/metrostroi_schemes/destination_table_white/label_park") +Metrostroi.AddLastStationTex("720",411,"models/metrostroi_schemes/destination_table_white/label_wallance_breen") + +Metrostroi.AddPassSchemeTex("717_new","1 Line",{ + "models/metrostroi_schemes/mus_neoorange", +}) +Metrostroi.AddPassSchemeTex("720","Crossline",{ + "metrostroi_skins/81-720_schemes/oranger", + "metrostroi_skins/81-720_schemes/orange", +}) +Metrostroi.AddPassSchemeTex("722","Crossline",{ + "metrostroi_skins/81-722_schemes/oranger", + "metrostroi_skins/81-722_schemes/orange", +}) + +Metrostroi.TickerAdverts = {"МЕТРОПОЛИТЕРИМЕÐИ ГÐРРИ ÐЬЮМÐÐРПРИГЛÐШÐЕТ ÐРРÐБОТУ РЕÐЛЬÐЕ МÐФЕÐЕСТОВ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,ТЕЛЕФОРДЛЯ СПРÐВОК 8 (800) 555-35-35", "ЭЛЕКТРОДЕПО 'РÐБÐ' ПРИГЛÐШÐЕТ ÐРРÐБОТУ МОЙЩИКОВ", "Ð’ СВЯЗИ С ВВЕЕДЕÐИЕМ ЭЛЕКТРОПОЕЗДОВ ÐОВОГО ПОКОЛЕÐИЯ Ð’ ЭКСПЛУÐТÐЦИЮ, ЭЛЕКТРОДЕПО 'РÐБÐ' ПРИГЛÐШÐЕТ ÐРРÐБОТУ СЛЕСÐРЕЙ ПОДИВЖÐОГО СОСТÐÐ’Ð", "УПЦ МЕТРОПОЛИТЕÐРИМЕÐИ ГÐРРИ ÐЬЮМÐÐРПРОВОДИТ ÐÐБОР ÐРОБУЧЕÐИЕ ПО ПРОФЕССИИ 'МÐШИÐИСТ ЭЛЕКТРОПОЕЗДÐ'. ВО ВРЕМЯ ОБУЧЕÐИЯ ВЫПЛÐЧИВÐЕТСЯ СТИПЕÐДИЯ Ð’ РÐЗМЕРЕ 10У.Е.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,ТЕЛЕФОРДЛЯ СПРÐВОК 8 (800) 555-35-35", "СТÐÐЦИЯ СЛÐВУТИЧ ПРИГЛÐШÐЕТ ÐРРÐБОТУ МÐШИÐИСТОВ И ПОМОЩÐИКОВ МÐШИÐИСТРЭСКÐЛÐТОРÐ. ОПЛÐТР5 КУСОЧКОВ ÐОМЕРÐОГО.", "ЭЛЕКТРОДЕПО ТЧ1ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ"} +Metrostroi.SetUPOAnnouncer({ + tone = {"subway_announcers/upo/rhino/orange/tone.mp3", 1}, + click1 = {"subway_announcers/upo/click1.mp3", 0.3}, + click2 = {"subway_announcers/upo/click2.mp3", 0.1}, + + aeroport = {"subway_announcers/upo/rhino/orange/aeroport.mp3", 0.835200}, + arsenal = {"subway_announcers/upo/rhino/orange/arsenal.mp3", 0.678600}, + flora = {"subway_announcers/upo/rhino/orange/flora.mp3", 0.600300}, + gcfscape = {"subway_announcers/upo/rhino/orange/gcfscape.mp3", 1.174500}, + ikarus = {"subway_announcers/upo/rhino/orange/ikarus.mp3", 0.652500}, + imeni_uollesa_brina = {"subway_announcers/upo/rhino/orange/imeni_uollesa_brina.mp3", 1.278900}, + last_aeroport = {"subway_announcers/upo/rhino/orange/last_aeroport.mp3", 9.787500}, + last_ikarus = {"subway_announcers/upo/rhino/orange/last_ikarus.mp3", 9.944100}, + last_imeni_uollesa_brina = {"subway_announcers/upo/rhino/orange/last_imeni_uollesa_brina.mp3", 10.779300}, + last_park = {"subway_announcers/upo/rhino/orange/last_park.mp3", 10.935900}, + litievaya = {"subway_announcers/upo/rhino/orange/litievaya.mp3", 0.730800}, + next_aeroport = {"subway_announcers/upo/rhino/orange/next_aeroport.mp3", 1.879200}, + next_arsenal = {"subway_announcers/upo/rhino/orange/next_arsenal.mp3", 1.800900}, + next_flora = {"subway_announcers/upo/rhino/orange/next_flora.mp3", 1.539900}, + next_gcfscape = {"subway_announcers/upo/rhino/orange/next_gcfscape.mp3", 3.732300}, + next_gcfscape1 = {"subway_announcers/upo/rhino/orange/next_gcfscape1.mp3", 2.166300}, + next_ikarus = {"subway_announcers/upo/rhino/orange/next_ikarus.mp3", 1.696500}, + next_imeni_uollesa_brina = {"subway_announcers/upo/rhino/orange/next_imeni_uollesa_brina.mp3", 2.427300}, + next_litievaya = {"subway_announcers/upo/rhino/orange/next_litievaya.mp3", 1.722600}, + next_park = {"subway_announcers/upo/rhino/orange/next_park.mp3", 3.053700}, + next_park1 = {"subway_announcers/upo/rhino/orange/next_park1.mp3", 1.487700}, + next_slavnaya_strana = {"subway_announcers/upo/rhino/orange/next_slavnaya_strana.mp3", 1.983600}, + next_slavutich = {"subway_announcers/upo/rhino/orange/next_slavutich.mp3", 1.774800}, + next_smrc = {"subway_announcers/upo/rhino/orange/next_smrk.mp3", 1.931400}, + next_vhe = {"subway_announcers/upo/rhino/orange/next_vhe.mp3", 2.322900}, + odz1 = {"subway_announcers/upo/rhino/orange/odz1.mp3", 2.088000+0.5}, + odz2 = {"subway_announcers/upo/rhino/orange/odz2.mp3", 2.192400+0.5}, + park = {"subway_announcers/upo/rhino/orange/park.mp3", 0.469800}, + slavnaya_strana = {"subway_announcers/upo/rhino/orange/slavnaya_strana.mp3", 1.017900}, + slavutich = {"subway_announcers/upo/rhino/orange/slavutich.mp3", 0.809100}, + smrk = {"subway_announcers/upo/rhino/orange/smrk.mp3", 0.809100}, + spec_attention_handrails = {"subway_announcers/upo/rhino/orange/spec_attention_handrails.mp3", 3.967200}, + spec_attention_politeness = {"subway_announcers/upo/rhino/orange/spec_attention_politeness.mp3", 5.533200}, + spec_line1 = {"subway_announcers/upo/rhino/orange/spec_line1.mp3", 1.800900}, + spec_line5 = {"subway_announcers/upo/rhino/orange/spec_line5.mp3", 1.722600}, + spec_line6 = {"subway_announcers/upo/rhino/orange/spec_line6.mp3", 1.957500}, + spec_line4 = {"subway_announcers/upo/rhino/orange/spec_line4.mp3", 1.905300}, + spec_line5 = {"subway_announcers/upo/rhino/orange/spec_line5.mp3", 1.748700}, + spec_line6 = {"subway_announcers/upo/rhino/orange/spec_line6.mp3", 1.722600}, + vhe = {"subway_announcers/upo/rhino/orange/vhe.mp3", 1.096200} +},{ + { + 462, + "ИкаруÑ", + arrlast = {nil, "last_ikarus"}, + dep = {{"odz1","next_smrc"}, nil}, + dist = 40, + noises = {1,3},noiserandom = 0.3, + }, + { + 461, + "СМРК", + arr = {{"smrk", 3, "next_flora",0.4,"spec_attention_politeness"}, {"smrk", 3, "next_ikarus",0.4,"spec_attention_handrails"}}, + dep = {{"odz2","next_flora"}, {"odz1","next_ikarus"}}, + dist = 40, + noises = {2,3},noiserandom = 0.4, + }, + { + 460, + "Флора", + arr = {{"flora", 3, "next_aeroport"}, {"flora", 3, "next_smrc"}}, + dep = {{"odz1","next_aeroport"}, {"odz2","next_smrc"}}, + dist = 40, + noises = {2,1},noiserandom = 0.2, + }, + { + 458, + "ÐÑропорт", + arr = {{"aeroport", 3, "next_slavnaya_strana", "spec_line6",0.4,"spec_attention_handrails"}, {"aeroport", 3, "next_flora",0.4,"spec_attention_politeness"}}, + dep = {{"odz2","next_slavnaya_strana"}, {"odz1","next_flora"}}, + dist = 40, + noises = {1,2,3},noiserandom = 0.5, + }, + { + 457, + "Ð¡Ð»Ð°Ð²Ð½Ð°Ñ Ñтр.", + arr = {{"slavnaya_strana", 3, "next_litievaya", "spec_line5"}, {"slavnaya_strana", 3, "next_aeroport",0.4,"spec_attention_handrails"}}, + dep = {{"odz1","next_litievaya"}, {"odz2","next_aeroport"}}, + dist = 40, + noises = {1},noiserandom = 0.2, + }, + { + 456, + "ЛитиеваÑ", + arr = {{"litievaya", 3, "next_arsenal",0.4,"spec_attention_politeness"}, {"litievaya", 3, "next_slavnaya_strana", "spec_line6"}}, + dep = {{"odz2","next_arsenal"}, {"odz1","next_slavnaya_strana"}}, + dist = 40, + noises = {3},noiserandom = 0.6, + }, + { + 455, + "ÐÑ€Ñенал", + arr = {{"arsenal", 3, "next_park", "spec_line6",0.4,"spec_attention_handrails"}, {"arsenal", 3, "next_litievaya", "spec_line5"}}, + dep = {{"odz1","next_park1"}, {"odz2","next_litievaya"}}, + dist = 40, + noises = {},noiserandom = 0.3, + }, + { + 454, + "Парк", + arr = {{"park", 3, "next_gcfscape"}, {"park", 3, "next_arsenal",0.4,"spec_attention_handrails"}}, + dep = {{"odz1","next_gcfscape1"}, {"odz2","next_arsenal"}}, + dist = 40, + noises = {1,2},noiserandom = 0.2, + }, + { + 453, + "GCFScape", + arr = {{"gcfscape", 3, "next_vhe",0.4,"spec_attention_handrails"}, {"gcfscape", 3, "next_park", "spec_line6",0.4,"spec_attention_politeness"}}, + dep = {{"odz2","next_vhe"}, {"odz2","next_park1"}}, + dist = 40, + noises = {3,2},noiserandom = 0.3, + }, + { + 452, + "VHE", + arr = {{"vhe", 3, "next_imeni_uollesa_brina"}, {"vhe", 3, "next_gcfscape"}}, + dep = {{"odz1","next_imeni_uollesa_brina"}, {"odz1","next_gcfscape1"}}, + dist = 40, + noises = {1,3},noiserandom = 0.2, + }, + { + 451, + "У. Брина", + arrlast = {"last_imeni_uollesa_brina"}, + dep = {nil, {"odz1","next_vhe"}}, + dist = 40, + noises = {2,1},noiserandom = 0.2, + } +}) + +Metrostroi.AddSarmatUPOAnnouncer("UPO RHINO", { + tone = {"subway_announcers/sarmat_upo/tone.mp3", 1.2}, + aeroport = {"subway_announcers/sarmat_upo/rhino/orange/aeroport.mp3", 0.835200}, + arsenal = {"subway_announcers/sarmat_upo/rhino/orange/arsenal.mp3", 0.678600}, + flora = {"subway_announcers/sarmat_upo/rhino/orange/flora.mp3", 0.600300}, + gcfscape = {"subway_announcers/sarmat_upo/rhino/orange/gcfscape.mp3", 1.174500}, + ikarus = {"subway_announcers/sarmat_upo/rhino/orange/ikarus.mp3", 0.652500}, + imeni_uollesa_brina = {"subway_announcers/sarmat_upo/rhino/orange/imeni_uollesa_brina.mp3", 1.278900}, + last_aeroport = {"subway_announcers/sarmat_upo/rhino/orange/last_aeroport.mp3", 9.787500}, + last_ikarus = {"subway_announcers/sarmat_upo/rhino/orange/last_ikarus.mp3", 9.944100}, + last_imeni_uollesa_brina = {"subway_announcers/sarmat_upo/rhino/orange/last_imeni_uollesa_brina.mp3", 10.779300}, + last_park = {"subway_announcers/sarmat_upo/rhino/orange/last_park.mp3", 10.935900}, + litievaya = {"subway_announcers/sarmat_upo/rhino/orange/litievaya.mp3", 0.730800}, + next_aeroport = {"subway_announcers/sarmat_upo/rhino/orange/next_aeroport.mp3", 1.879200}, + next_arsenal = {"subway_announcers/sarmat_upo/rhino/orange/next_arsenal.mp3", 1.800900}, + next_flora = {"subway_announcers/sarmat_upo/rhino/orange/next_flora.mp3", 1.539900}, + next_gcfscape = {"subway_announcers/sarmat_upo/rhino/orange/next_gcfscape.mp3", 3.732300}, + next_gcfscape1 = {"subway_announcers/sarmat_upo/rhino/orange/next_gcfscape1.mp3", 2.166300}, + next_ikarus = {"subway_announcers/sarmat_upo/rhino/orange/next_ikarus.mp3", 1.696500}, + next_imeni_uollesa_brina = {"subway_announcers/sarmat_upo/rhino/orange/next_imeni_uollesa_brina.mp3", 2.427300}, + next_litievaya = {"subway_announcers/sarmat_upo/rhino/orange/next_litievaya.mp3", 1.722600}, + next_park = {"subway_announcers/sarmat_upo/rhino/orange/next_park.mp3", 3.053700}, + next_park1 = {"subway_announcers/sarmat_upo/rhino/orange/next_park1.mp3", 1.487700}, + next_slavnaya_strana = {"subway_announcers/sarmat_upo/rhino/orange/next_slavnaya_strana.mp3", 1.983600}, + next_slavutich = {"subway_announcers/sarmat_upo/rhino/orange/next_slavutich.mp3", 1.774800}, + next_smrc = {"subway_announcers/sarmat_upo/rhino/orange/next_smrk.mp3", 1.931400}, + next_vhe = {"subway_announcers/sarmat_upo/rhino/orange/next_vhe.mp3", 2.322900}, + odz1 = {"subway_announcers/sarmat_upo/rhino/orange/odz1.mp3", 2.088000}, + odz2 = {"subway_announcers/sarmat_upo/rhino/orange/odz2.mp3", 2.192400}, + park = {"subway_announcers/sarmat_upo/rhino/orange/park.mp3", 0.469800}, + slavnaya_strana = {"subway_announcers/sarmat_upo/rhino/orange/slavnaya_strana.mp3", 1.017900}, + slavutich = {"subway_announcers/sarmat_upo/rhino/orange/slavutich.mp3", 0.809100}, + smrk = {"subway_announcers/sarmat_upo/rhino/orange/smrk.mp3", 0.809100}, + spec_attention_handrails = {"subway_announcers/sarmat_upo/rhino/orange/spec_attention_handrails.mp3", 3.967200}, + spec_attention_politeness = {"subway_announcers/sarmat_upo/rhino/orange/spec_attention_politeness.mp3", 5.533200}, + spec_line1 = {"subway_announcers/sarmat_upo/rhino/orange/spec_line1.mp3", 1.800900}, + spec_line5 = {"subway_announcers/sarmat_upo/rhino/orange/spec_line5.mp3", 1.722600}, + spec_line6 = {"subway_announcers/sarmat_upo/rhino/orange/spec_line6.mp3", 1.957500}, + spec_line4 = {"subway_announcers/sarmat_upo/rhino/orange/spec_line4.mp3", 1.905300}, + spec_line5 = {"subway_announcers/sarmat_upo/rhino/orange/spec_line5.mp3", 1.748700}, + spec_line6 = {"subway_announcers/sarmat_upo/rhino/orange/spec_line6.mp3", 1.722600}, + vhe = {"subway_announcers/sarmat_upo/rhino/orange/vhe.mp3", 1.096200} +},{ + { + LED = {2, 2, 3, 3, 4, 3, 3, 3, 3, 3, 3}, + Name = "Line 1", + -- Loop = false, + { + 462,"ИкаруÑ","Ikarus", + arrlast = {nil, "last_ikarus"}, + dep = {"next_smrc", nil}, + odz = "odz1", + dist = 40, + }, + { + 461,"СМРК","SMRC", + arr = {{"smrk", 3, "next_flora",0.4,"spec_attention_politeness"}, {"smrk", 3, "next_ikarus",0.4,"spec_attention_handrails"}}, + dep = {"next_flora", "next_ikarus"}, + odz = "odz1", + dist = 40, + }, + { + 460,"Флора","Flora", + arr = {{"flora", 3, "next_aeroport"}, {"flora", 3, "next_smrc",0.4,"spec_attention_politeness"}}, + dep = {"next_aeroport", "next_smrc"}, + odz = "odz2", + dist = 40, + }, + { + 458,"ÐÑропорт","Airport", + arr = {{"aeroport", 3, "next_slavnaya_strana", "spec_line6"}, {"aeroport", 3, "next_flora",0.4,"spec_attention_handrails"}}, + dep = {"next_slavnaya_strana", "next_flora"}, + arrlast = {"last_aeroport", "last_aeroport"}, + odz = "odz2", + dist = 40, + }, + { + 457,"Ð¡Ð»Ð°Ð²Ð½Ð°Ñ Ñтр.","Glorius c.", + arr = {{"slavnaya_strana", 3, "next_litievaya", "spec_line5"}, {"slavnaya_strana", 3, "next_aeroport",0.4,"spec_attention_politeness"}}, + dep = {"next_litievaya", "next_aeroport"}, + odz = "odz1", + dist = 40, + }, + { + 456,"ЛитиеваÑ","Lithium", + arr = {{"litievaya", 3, "next_arsenal",0.4,"spec_attention_handrails"}, {"litievaya", 3, "next_slavnaya_strana", "spec_line6"}}, + dep = {"next_arsenal", "next_slavnaya_strana"}, + odz = "odz2", + dist = 40, + }, + { + 455,"ÐÑ€Ñенал","Arsenal", + arr = {{"arsenal", 3, "next_park", "spec_line6"}, {"arsenal", 3, "next_litievaya", "spec_line5",0.4,"spec_attention_politeness"}}, + dep = {"next_park1", "next_litievaya"}, + odz = "odz1", + dist = 40, + }, + { + 454,"Парк","Park", + arr = {{"park", 3, "next_gcfscape",0.4,"spec_attention_politeness"}, {"park", 3, "next_arsenal",0.4,"spec_attention_handrails"}}, + dep = {"next_gcfscape1", "next_arsenal"}, + arrlast = {{"last_park", "spec_line6"}, {"last_park", "spec_line6"}}, + odz = "odz2", + dist = 40, + }, + { + 453,"GCFScape","GCFScape", + arr = {{"gcfscape", 3, "next_vhe",0.4,"spec_attention_handrails"}, {"gcfscape", 3, "next_park", "spec_line6"}}, + dep = {"next_vhe", "next_park1"}, + odz = "odz2", + dist = 40, + }, + { + 452,"VHE","VHE", + arr = {{"vhe", 3, "next_imeni_uollesa_brina"}, {"vhe", 3, "next_gcfscape",0.4,"spec_attention_politeness"}}, + dep = {"next_imeni_uollesa_brina", "next_gcfscape1"}, + odz = "odz1", + dist = 40, + }, + { + 451,"У. Брина","W. Breen", + arrlast = {"last_imeni_uollesa_brina"}, + dep = {nil, "next_vhe"}, + odz = "odz1", + dist = 40, + } + } +}) + +Metrostroi.AddANSPAnnouncer("ASNP Boiko + Pyaseckaya",{ + asnp = true, + + click1 = {"subway_announcers/asnp/boiko_new/click1.mp3",0.5}, + click2 = {"subway_announcers/asnp/boiko_new/click2.mp3",0.3}, + click3 = {"subway_announcers/asnp/boiko_new/click3.mp3",0.3}, + click_start = {"subway_announcers/asnp/boiko_new/click1.mp3",0.5}, + click_end = {"subway_announcers/asnp/boiko_new/click3.mp3",0.3}, + + announcer_ready = {"subway_announcers/asnp/boiko_new/announcer_ready.mp3",3.295479}, + doors_closing_m = {"subway_announcers/asnp/boiko_new/doors_closing.mp3",3.782542}, + deadlock_m = {"subway_announcers/asnp/boiko_new/spec_attention_deadlock.mp3",9.352500}, + exit_m = {"subway_announcers/asnp/boiko_new/spec_attention_exit.mp3",5.363563}, + handrails_m = {"subway_announcers/asnp/boiko_new/spec_attention_handrails.mp3",4.221854}, + last_m = {"subway_announcers/asnp/boiko_new/spec_attention_last.mp3",4.425625}, + objects_m = {"subway_announcers/asnp/boiko_new/spec_attention_objects.mp3",4.674771}, + politeness_m = {"subway_announcers/asnp/boiko_new/spec_attention_politeness.mp3",9.057104}, + things_m = {"subway_announcers/asnp/boiko_new/spec_attention_things.mp3",4.559146}, + train_depeat_m = {"subway_announcers/asnp/boiko_new/spec_attention_train_depeat.mp3",4.633417}, + train_stop_m = {"subway_announcers/asnp/boiko_new/spec_attention_train_stop.mp3",6.501979}, + station_m = {"subway_announcers/asnp/boiko_new/station.mp3",0.943438}, + train_goes_to_m = {"subway_announcers/asnp/boiko_new/train_goes_to.mp3",2.077708}, + + + aeroport_m = {"subway_announcers/asnp/boiko_new/neoorange/aeroport.mp3",0.936042}, + arsenal_m = {"subway_announcers/asnp/boiko_new/neoorange/arsenal.mp3",0.897958}, + flora_m = {"subway_announcers/asnp/boiko_new/neoorange/flora.mp3",0.713271}, + gcfscape_m = {"subway_announcers/asnp/boiko_new/neoorange/gcfscape.mp3",2.977167}, + ikarus_m = {"subway_announcers/asnp/boiko_new/neoorange/ikarus.mp3",0.767938}, + imeni_uollesa_brina_m = {"subway_announcers/asnp/boiko_new/neoorange/imeni_uollesa_brina.mp3",1.710667}, + litiyevaya_arr_m = {"subway_announcers/asnp/boiko_new/neoorange/litiyevaya_arr.mp3",3.008667}, + litiyevaya_next_m = {"subway_announcers/asnp/boiko_new/neoorange/litiyevaya_next.mp3",1.011000}, + park_m = {"subway_announcers/asnp/boiko_new/neoorange/park.mp3",0.600000}, + park_arr_m = {"subway_announcers/asnp/boiko_new/neoorange/park_arr.mp3",3.896833}, + park_next_m = {"subway_announcers/asnp/boiko_new/neoorange/park_next.mp3",2.024271}, + slavnaya_strana_arr_m = {"subway_announcers/asnp/boiko_new/neoorange/slavnaya_strana_next.mp3",3.397833}, + slavnaya_strana_next_m = {"subway_announcers/asnp/boiko_new/neoorange/slavnaya_strana_arr.mp3",1.482604}, + smrc_m = {"subway_announcers/asnp/boiko_new/neoorange/smrc.mp3",1.083688}, + spec_attention_aeroport_m = {"subway_announcers/asnp/boiko_new/neoorange/spec_attention_aeroport.mp3",11.032125}, + vhe_m = {"subway_announcers/asnp/boiko_new/neoorange/vhe.mp3",1.387604}, + + + doors_closing_f = {"subway_announcers/asnp/pyaseckaya/doors_closing.mp3",2.340813}, + deadlock_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_deadlock.mp3",10.501979}, + exit_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_exit.mp3",5.111104}, + handrails_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_handrails.mp3",4.675083}, + last_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_last.mp3",4.878542}, + objects_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_objects.mp3",5.323146}, + politeness_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_politeness.mp3",10.685375}, + things_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_things.mp3",5.144021}, + train_depeat_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_train_depeat.mp3",4.481875}, + train_stop_f = {"subway_announcers/asnp/pyaseckaya/spec_attention_train_stop.mp3",6.395313}, + + aeroport_f = {"subway_announcers/asnp/pyaseckaya/neoorange/aeroport.mp3",0.913667}, + arr_aeroport_f = {"subway_announcers/asnp/pyaseckaya/neoorange/arr_aeroport.mp3",1.800000}, + arr_arsenal_f = {"subway_announcers/asnp/pyaseckaya/neoorange/arr_arsenal.mp3",1.895021}, + arr_flora_f = {"subway_announcers/asnp/pyaseckaya/neoorange/arr_flora.mp3",1.536813}, + arr_gcfscape_f = {"subway_announcers/asnp/pyaseckaya/neoorange/arr_gcfscape.mp3",3.838000}, + arr_ikarus_f = {"subway_announcers/asnp/pyaseckaya/neoorange/arr_ikarus.mp3",1.810500}, + arr_imeni_uollesa_brina_f = {"subway_announcers/asnp/pyaseckaya/neoorange/arr_imeni_uollesa_brina.mp3",2.713104}, + arr_litiyevaya_f = {"subway_announcers/asnp/pyaseckaya/neoorange/arr_litiyevaya.mp3",4.139396}, + arr_park_f = {"subway_announcers/asnp/pyaseckaya/neoorange/arr_park.mp3",5.076708}, + arr_slavnaya_strana_f = {"subway_announcers/asnp/pyaseckaya/neoorange/arr_slavnaya_strana.mp3",4.527333}, + arr_smrc_f = {"subway_announcers/asnp/pyaseckaya/neoorange/arr_smrc.mp3",1.941479}, + arr_vhe_f = {"subway_announcers/asnp/pyaseckaya/neoorange/arr_vhe.mp3",2.162292}, + ikarus_f = {"subway_announcers/asnp/pyaseckaya/neoorange/ikarus.mp3",1.029813}, + next_aeroport_f = {"subway_announcers/asnp/pyaseckaya/neoorange/next_aeroport.mp3",2.693333}, + next_arsenal_f = {"subway_announcers/asnp/pyaseckaya/neoorange/next_arsenal.mp3",2.515958}, + next_flora_f = {"subway_announcers/asnp/pyaseckaya/neoorange/next_flora.mp3",2.473229}, + next_gcfscape_f = {"subway_announcers/asnp/pyaseckaya/neoorange/next_gcfscape.mp3",4.695188}, + next_ikarus_f = {"subway_announcers/asnp/pyaseckaya/neoorange/next_ikarus.mp3",2.365021}, + next_imeni_uollesa_brina_f = {"subway_announcers/asnp/pyaseckaya/neoorange/next_imeni_uollesa_brina.mp3",3.516208}, + next_litiyevaya_f = {"subway_announcers/asnp/pyaseckaya/neoorange/next_litiyevaya.mp3",2.865813}, + next_park_f = {"subway_announcers/asnp/pyaseckaya/neoorange/next_park.mp3",3.773146}, + next_slavnaya_strana_f = {"subway_announcers/asnp/pyaseckaya/neoorange/next_slavnaya_strana.mp3",3.161896}, + next_smrc_f = {"subway_announcers/asnp/pyaseckaya/neoorange/next_smrc.mp3",2.622750}, + next_vhe_f = {"subway_announcers/asnp/pyaseckaya/neoorange/next_vhe.mp3",2.779979}, + park_f = {"subway_announcers/asnp/pyaseckaya/neoorange/park.mp3",0.625875}, + spec_attention_aeroport3_f = {"subway_announcers/asnp/pyaseckaya/neoorange/spec_attention_aeroport3.mp3",11.147292}, + to_aeroport_f = {"subway_announcers/asnp/pyaseckaya/neoorange/to_aeroport.mp3",3.230083}, + to_park_f = {"subway_announcers/asnp/pyaseckaya/neoorange/to_park.mp3",2.990750}, +},{ + { + LED = {2, 1, 2, 3, 3, 3, 3, 3, 3, 3, 4}, + Name = "Line 1", + spec_last = {"last_m",0.5,"things_m"}, + spec_last_f = {"last_f",0.5,"things_f"}, + spec_wait = {{"train_stop_m"},{"train_depeat_m"}}, + spec_wait_f = {{"train_stop_f"},{"train_depeat_f"}}, + Loop = false, + BlockDoors = true, + { + 462, "ИкаруÑ","Ikarus", + arrlast = {nil, {"arr_ikarus_f",0.5,"last_f",2,"things_f",2,"deadlock_f"}, "ikarus_m"}, + dep = {{"doors_closing_m","smrc_m",0.1,"politeness_m"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 461, "СМРК","SMRC", + arr = {{"station_m","smrc_m"}, "arr_smrc_f"}, + dep = {{"doors_closing_m","flora_m", 0.1,"handrails_m"}, {"doors_closing_f","next_ikarus_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 460, "Флора","Flora", + arr = {{"station_m","flora_m"}, "arr_flora_f"}, + dep = {{"doors_closing_m","aeroport_m", 0.1,"things_m"}, {"doors_closing_f","next_smrc_f",0.1,"handrails_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 458, "ÐÑропорт","Airport", + arr = {{"station_m","aeroport_m",0.1,"objects_m"}, {"arr_aeroport_f",0.1,"things_f"}}, + dep = {{"doors_closing_m","slavnaya_strana_next_m"}, {"doors_closing_f","next_flora_f",0.1,"politeness_f"}}, + arrlast = {{"station_m","aeroport_m",0.5,"last_m",2,"things_m",2,"deadlock_m"}, {"arr_aeroport_f",0.5,"last_f",2,"things_f",2,"deadlock_f"}, "aeroport_m"}, + not_last = {3,"train_goes_to_m","aeroport_m"}, + not_last_f = {3,"to_aeroport_f"}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + --not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 457, "Ð¡Ð»Ð°Ð²Ð½Ð°Ñ Ñтр.","Glorius c.", + arr = {{"station_m","slavnaya_strana_arr_m"}, "arr_slavnaya_strana_f"}, + dep = {{"doors_closing_m","litiyevaya_next_m",0.1,"politeness_m"}, {"doors_closing_f","next_aeroport_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + have_inrerchange = true + }, + { + --male<->female + 456, "ЛитиеваÑ","Lithium", + arr = {{"station_m","litiyevaya_arr_m"}, {"station_m","litiyevaya_arr_m"}}, + dep = {{"doors_closing_f","next_arsenal_f"}, {"doors_closing_f","next_slavnaya_strana_f",0.1,"objects_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + have_inrerchange = true + }, + { + 455, "ÐÑ€Ñенал","Arsenal", + arr = {"arr_arsenal_f", {"station_m","arsenal_m"}}, + dep = {{"doors_closing_f","next_park_f",0.1,"handrails_f"}, {"doors_closing_m","litiyevaya_next_m",0.1,"handrails_m"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 454, "Парк","Park", + arr = {{"arr_park_f", 0.1,"things_f"}, {"station_m","park_arr_m",0.1,"things_m"}}, + dep = {{"doors_closing_f","next_gcfscape_f"}, {"doors_closing_m","arsenal_m",0.1,"objects_m"}}, + arrlast = {{"arr_park_f",0.5,"last_f",2,"things_f",2,"deadlock_f"}, {"station_m","park_arr_m",0.5,"last_m",2,"things_m",2,"deadlock_m"}, "aeroport_m"}, + not_last = {3,"train_goes_to_m","park_m"}, + not_last_f = {3,"to_park_f"}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + have_inrerchange = true, + right_doors = true, + }, + { + 453, "GCFScape", + arr = {"arr_gcfscape_f", {"station_m","gcfscape_m"}}, + dep = {{"doors_closing_f","next_vhe_f"}, {"doors_closing_m","park_next_m",0.1,"politeness_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + right_doors = true, + }, + { + 452, "VHE", + arr = {"arr_vhe_f", {"station_m","vhe_m"}}, + dep = {{"doors_closing_f","next_imeni_uollesa_brina_f",0.1,"exit_f"}, {"doors_closing_m","gcfscape_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + have_inrerchange = true + }, + { + 451, "У. Брина","W. Breen", + arrlast = {{"arr_imeni_uollesa_brina_f",0.5,"last_f",2,"things_f",2,"deadlock_f"}, nil, "imeni_uollesa_brina_m"}, + dep = {nil, {"doors_closing_m","vhe_m",0.1,"politeness_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + } + } +}) + + + +Metrostroi.AddANSPAnnouncer("RIU Boiko + Pyaseckaya",{ + riu = true, + + click1 = {"subway_announcers/riu/boiko_new/click1.mp3",0.5}, + click2 = {"subway_announcers/riu/boiko_new/click2.mp3",0.3}, + click3 = {"subway_announcers/riu/boiko_new/click3.mp3",0.3}, + click_start = {"subway_announcers/riu/boiko_new/click1.mp3",0.5}, + click_end = {"subway_announcers/riu/boiko_new/click3.mp3",0.3}, + + + announcer_ready = {"subway_announcers/riu/boiko_new/announcer_ready.mp3",3.785}, + doors_closing_m = {"subway_announcers/riu/boiko_new/doors_closing.mp3",5}, + deadlock_m = {"subway_announcers/riu/boiko_new/spec_attention_deadlock.mp3",9.608}, + exit_m = {"subway_announcers/riu/boiko_new/spec_attention_exit.mp3",5.985}, + handrails_m = {"subway_announcers/riu/boiko_new/spec_attention_handrails.mp3",4.929}, + last_m = {"subway_announcers/riu/boiko_new/spec_attention_last.mp3",4.556}, + objects_m = {"subway_announcers/riu/boiko_new/spec_attention_objects.mp3",5.278}, + politeness_m = {"subway_announcers/riu/boiko_new/spec_attention_politeness.mp3",10.335}, + things_m = {"subway_announcers/riu/boiko_new/spec_attention_things.mp3",5.101}, + train_depeat_m = {"subway_announcers/riu/boiko_new/spec_attention_train_depeat.mp3",5.209}, + train_stop_m = {"subway_announcers/riu/boiko_new/spec_attention_train_stop.mp3",7.370}, + station_m = {"subway_announcers/riu/boiko_new/station.mp3",1.2}, + train_goes_to_m = {"subway_announcers/riu/boiko_new/train_goes_to.mp3",2.540}, + + aeroport_m = {"subway_announcers/riu/boiko_new/neoorange/aeroport.mp3",0.967891}, + arsenal_m = {"subway_announcers/riu/boiko_new/neoorange/arsenal.mp3",1.054218}, + flora_m = {"subway_announcers/riu/boiko_new/neoorange/flora.mp3",0.831474}, + gcfscape_m = {"subway_announcers/riu/boiko_new/neoorange/gcfscape.mp3",3.509569}, + ikarus_m = {"subway_announcers/riu/boiko_new/neoorange/ikarus.mp3",0.937528}, + imeni_uollesa_brina_m = {"subway_announcers/riu/boiko_new/neoorange/imeni_uollesa_brina.mp3",1.850499}, + litiyevaya_arr_m = {"subway_announcers/riu/boiko_new/neoorange/litiyevaya_arr.mp3",3.323265}, + litiyevaya_next_m = {"subway_announcers/riu/boiko_new/neoorange/litiyevaya_next.mp3",1.072630}, + park_m = {"subway_announcers/riu/boiko_new/neoorange/park.mp3",0.777211}, + park_arr_m = {"subway_announcers/riu/boiko_new/neoorange/park_arr.mp3",4.777211}, + park_next_m = {"subway_announcers/riu/boiko_new/neoorange/park_next.mp3",2.277211}, + slavnaya_strana_arr_m = {"subway_announcers/riu/boiko_new/neoorange/slavnaya_strana_arr.mp3",3.743923}, + slavnaya_strana_next_m = {"subway_announcers/riu/boiko_new/neoorange/slavnaya_strana_next.mp3",1.543129}, + smrc_m = {"subway_announcers/riu/boiko_new/neoorange/smrc.mp3",1.282971}, + spec_attention_aeroport_m = {"subway_announcers/riu/boiko_new/neoorange/spec_attention_aeroport.mp3",11.860317}, + vhe_m = {"subway_announcers/riu/boiko_new/neoorange/vhe.mp3",1.384308}, + + doors_closing_f = {"subway_announcers/riu/pyaseckaya/doors_closing.mp3",2.994}, + deadlock_f = {"subway_announcers/riu/pyaseckaya/spec_attention_deadlock.mp3",10.133}, + exit_f = {"subway_announcers/riu/pyaseckaya/spec_attention_exit.mp3",5.466}, + handrails_f = {"subway_announcers/riu/pyaseckaya/spec_attention_handrails.mp3",4.744}, + last_f = {"subway_announcers/riu/pyaseckaya/spec_attention_last.mp3",4.506}, + objects_f = {"subway_announcers/riu/pyaseckaya/spec_attention_objects.mp3",5.219}, + politeness_f = {"subway_announcers/riu/pyaseckaya/spec_attention_politeness.mp3",10.221}, + things_f = {"subway_announcers/riu/pyaseckaya/spec_attention_things.mp3",5.154}, + train_depeat_f = {"subway_announcers/riu/pyaseckaya/spec_attention_train_depeat.mp3",4.829}, + train_stop_f = {"subway_announcers/riu/pyaseckaya/spec_attention_train_stop.mp3",7.240}, + + + aeroport_f = {"subway_announcers/riu/pyaseckaya/neoorange/aeroport.mp3",0.919796}, + arr_aeroport_f = {"subway_announcers/riu/pyaseckaya/neoorange/arr_aeroport.mp3",1.757120}, + arr_arsenal_f = {"subway_announcers/riu/pyaseckaya/neoorange/arr_arsenal.mp3",1.782177}, + arr_flora_f = {"subway_announcers/riu/pyaseckaya/neoorange/arr_flora.mp3",1.500068}, + arr_gcfscape_f = {"subway_announcers/riu/pyaseckaya/neoorange/arr_gcfscape.mp3",3.953605}, + arr_ikarus_f = {"subway_announcers/riu/pyaseckaya/neoorange/arr_ikarus.mp3",1.826327}, + arr_imeni_uollesa_brina_f = {"subway_announcers/riu/pyaseckaya/neoorange/arr_imeni_uollesa_brina.mp3",2.669433}, + arr_litiyevaya_f = {"subway_announcers/riu/pyaseckaya/neoorange/arr_litiyevaya.mp3",4.173039}, + arr_park_f = {"subway_announcers/riu/pyaseckaya/neoorange/arr_park.mp3",5.374286}, + arr_slavnaya_strana_f = {"subway_announcers/riu/pyaseckaya/neoorange/arr_slavnaya_strana.mp3",4.443878}, + arr_smrc_f = {"subway_announcers/riu/pyaseckaya/neoorange/arr_smrc.mp3",1.938571}, + arr_vhe_f = {"subway_announcers/riu/pyaseckaya/neoorange/arr_vhe.mp3",2.146213}, + ikarus_f = {"subway_announcers/riu/pyaseckaya/neoorange/ikarus.mp3",0.887551}, + next_aeroport_f = {"subway_announcers/riu/pyaseckaya/neoorange/next_aeroport.mp3",2.785510}, + next_arsenal_f = {"subway_announcers/riu/pyaseckaya/neoorange/next_arsenal.mp3",2.537188}, + next_flora_f = {"subway_announcers/riu/pyaseckaya/neoorange/next_flora.mp3",2.504785}, + next_gcfscape_f = {"subway_announcers/riu/pyaseckaya/neoorange/next_gcfscape.mp3",4.949478}, + next_ikarus_f = {"subway_announcers/riu/pyaseckaya/neoorange/next_ikarus.mp3",2.355102}, + next_imeni_uollesa_brina_f = {"subway_announcers/riu/pyaseckaya/neoorange/next_imeni_uollesa_brina.mp3",3.467687}, + next_litiyevaya_f = {"subway_announcers/riu/pyaseckaya/neoorange/next_litiyevaya.mp3",2.990249}, + next_park_f = {"subway_announcers/riu/pyaseckaya/neoorange/next_park.mp3",3.788617}, + next_slavnaya_strana_f = {"subway_announcers/riu/pyaseckaya/neoorange/next_slavnaya_strana.mp3",3.204467}, + next_smrc_f = {"subway_announcers/riu/pyaseckaya/neoorange/next_smrc.mp3",2.746145}, + next_vhe_f = {"subway_announcers/riu/pyaseckaya/neoorange/next_vhe.mp3",2.763560}, + park_f = {"subway_announcers/riu/pyaseckaya/neoorange/park.mp3",0.596961}, + spec_attention_aeroport3_f = {"subway_announcers/riu/pyaseckaya/neoorange/spec_attention_aeroport3.mp3",11.945805}, + to_aeroport_f = {"subway_announcers/riu/pyaseckaya/neoorange/to_aeroport.mp3",3.273401}, + to_park_f = {"subway_announcers/riu/pyaseckaya/neoorange/to_park.mp3",3.055488}, +},{ + { + LED = {2, 1, 2, 3, 3, 3, 3, 3, 3, 3, 4}, + Name = "Line 1", + spec_last = {"last_m",0.5,"things_m"}, + spec_last_f = {"last_f",0.5,"things_f"}, + spec_wait = {{"train_stop_m"},{"train_depeat_m"}}, + spec_wait_f = {{"train_stop_f"},{"train_depeat_f"}}, + Loop = false, + BlockDoors = true, + { + 462, "ИкаруÑ","Ikarus", + arrlast = {nil, {"arr_ikarus_f",0.5,"last_f",2,"things_f",2,"deadlock_f"}, "ikarus_m"}, + dep = {{"doors_closing_m","smrc_m",0.1,"politeness_m"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 461, "СМРК","SMRC", + arr = {{"station_m","smrc_m"}, "arr_smrc_f"}, + dep = {{"doors_closing_m","flora_m", 0.1,"handrails_m"}, {"doors_closing_f","next_ikarus_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 460, "Флора","Flora", + arr = {{"station_m","flora_m"}, "arr_flora_f"}, + dep = {{"doors_closing_m","aeroport_m", 0.1,"things_m"}, {"doors_closing_f","next_smrc_f",0.1,"handrails_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 458, "ÐÑропорт","Airport", + arr = {{"station_m","aeroport_m",0.1,"objects_m"}, {"arr_aeroport_f",0.1,"things_f"}}, + dep = {{"doors_closing_m","slavnaya_strana_next_m"}, {"doors_closing_f","next_flora_f",0.1,"politeness_f"}}, + arrlast = {{"station_m","aeroport_m",0.5,"last_m",2,"things_m",2,"deadlock_m"}, {"arr_aeroport_f",0.5,"last_f",2,"things_f",2,"deadlock_f"}, "aeroport_m"}, + not_last = {3,"train_goes_to_m","aeroport_m"}, + not_last_f = {3,"to_aeroport_f"}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + }, + { + 457, "Ð¡Ð»Ð°Ð²Ð½Ð°Ñ Ñтр.","Glorius c.", + arr = {{"station_m","slavnaya_strana_arr_m"}, "arr_slavnaya_strana_f"}, + dep = {{"doors_closing_m","litiyevaya_next_m",0.1,"politeness_m"}, {"doors_closing_f","next_aeroport_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + have_inrerchange = true + }, + { + --male<->female + 456, "ЛитиеваÑ","Lithium", + arr = {{"station_m","litiyevaya_arr_m"}, {"station_m","litiyevaya_arr_m"}}, + dep = {{"doors_closing_f","next_arsenal_f"}, {"doors_closing_f","next_slavnaya_strana_f",0.1,"objects_f"}}, + not_last_c = {nil,"not_last_f"},spec_last_c = {nil,"spec_last_f"}, spec_wait_c = {nil,"spec_wait_f"}, + have_inrerchange = true + }, + { + 455, "ÐÑ€Ñенал","Arsenal", + arr = {"arr_arsenal_f", {"station_m","arsenal_m"}}, + dep = {{"doors_closing_f","next_park_f",0.1,"handrails_f"}, {"doors_closing_m","litiyevaya_next_m",0.1,"handrails_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + }, + { + 454, "Парк","Park", + arr = {{"arr_park_f", 0.1,"things_f"}, {"station_m","park_arr_m",0.1,"things_m"}}, + dep = {{"doors_closing_f","next_gcfscape_f"}, {"doors_closing_m","arsenal_m",0.1,"objects_m"}}, + arrlast = {{"arr_park_f",0.5,"last_f",2,"things_f",2,"deadlock_f"}, {"station_m","park_arr_m",0.5,"last_m",2,"things_m",2,"deadlock_m"}, "aeroport_m"}, + not_last = {3,"train_goes_to_m","park_m"}, + not_last_f = {3,"to_park_f"}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + right_doors = true, + have_inrerchange = true + }, + { + 453, "GCFScape", + arr = {"arr_gcfscape_f", {"station_m","gcfscape_m"}}, + dep = {{"doors_closing_f","next_vhe_f"}, {"doors_closing_m","park_next_m",0.1,"politeness_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + right_doors = true, + }, + { + 452, "VHE", + arr = {"arr_vhe_f", {"station_m","vhe_m"}}, + dep = {{"doors_closing_f","next_imeni_uollesa_brina_f",0.1,"exit_f"}, {"doors_closing_m","gcfscape_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + have_inrerchange = true + }, + { + 451, "У. Брина","W. Breen", + arrlast = {{"arr_imeni_uollesa_brina_f",0.5,"last_f",2,"things_f",2,"deadlock_f"}, nil, "imeni_uollesa_brina_m"}, + dep = {nil, {"doors_closing_m","vhe_m",0.1,"politeness_m"}}, + not_last_c = {"not_last_f"},spec_last_c = {"spec_last_f"}, spec_wait_c = {"spec_wait_f"}, + } + } +}) + +Metrostroi.SetRRIAnnouncer({ + click_end = {"subway_announcers/rri/boiko/spec/click_end.mp3",0.1}, + click_start = {"subway_announcers/rri/boiko/spec/click_start.mp3",0.1}, + last = {"subway_announcers/rri/boiko/spec/last.mp3",22.264354}, + exit = {"subway_announcers/rri/boiko/spec/spec_attention_exit.mp3",5.446236}, + handrails = {"subway_announcers/rri/boiko/spec/spec_attention_handrails.mp3",4.594558}, + objects = {"subway_announcers/rri/boiko/spec/spec_attention_objects.mp3",5.143175}, + things = {"subway_announcers/rri/boiko/spec/spec_attention_things.mp3",05.093}, + politeness = {"subway_announcers/rri/boiko/spec/spec_attention_politeness.mp3",11.457075}, + train_depeat = {"subway_announcers/rri/boiko/spec/spec_attention_train_depeat.mp3",4.842222}, + train_stop = {"subway_announcers/rri/boiko/spec/spec_attention_train_stop.mp3",6.963424}, + + arr_aeroport = {"subway_announcers/rri/boiko/orange/arr_aeroport.mp3",1.884000}, + arr_arsenal = {"subway_announcers/rri/boiko/orange/arr_arsenal.mp3",1.939388}, + arr_flora = {"subway_announcers/rri/boiko/orange/arr_flora.mp3",1.813628}, + arr_gcfscape = {"subway_announcers/rri/boiko/orange/arr_gcfscape.mp3",3.924717}, + arr_ikarus = {"subway_announcers/rri/boiko/orange/arr_ikarus.mp3",2.137075}, + arr_imeni_uollesa_brina = {"subway_announcers/rri/boiko/orange/arr_imeni_uollesa_brina.mp3",2.906961}, + arr_litiyevaya = {"subway_announcers/rri/boiko/orange/arr_litiyevaya.mp3",3.487029}, + arr_park = {"subway_announcers/rri/boiko/orange/arr_park.mp3",4.575147}, + arr_slavnaya_strana = {"subway_announcers/rri/boiko/orange/arr_slavnaya_strana.mp3",2.483492}, + arr_smrc = {"subway_announcers/rri/boiko/orange/arr_smrc.mp3",2.227914}, + arr_vhe = {"subway_announcers/rri/boiko/orange/arr_vhe.mp3",2.472018}, + next_aeroport = {"subway_announcers/rri/boiko/orange/next_aeroport.mp3",4.956000}, + next_arsenal = {"subway_announcers/rri/boiko/orange/next_arsenal.mp3",5.055873}, + next_flora = {"subway_announcers/rri/boiko/orange/next_flora.mp3",5.021905}, + next_gcfscape = {"subway_announcers/rri/boiko/orange/next_gcfscape.mp3",7.011995}, + next_ikarus = {"subway_announcers/rri/boiko/orange/next_ikarus.mp3",5.147483}, + next_imeni_uollesa_brina = {"subway_announcers/rri/boiko/orange/next_imeni_uollesa_brina.mp3",5.538209}, + next_litiyevaya = {"subway_announcers/rri/boiko/orange/next_litiyevaya.mp3",4.949320}, + next_park = {"subway_announcers/rri/boiko/orange/next_park.mp3",6.216032}, + next_slavnaya_strana = {"subway_announcers/rri/boiko/orange/next_slavnaya_strana.mp3",5.626304}, + next_smrc = {"subway_announcers/rri/boiko/orange/next_smrc.mp3",5.320068}, + next_vhe = {"subway_announcers/rri/boiko/orange/next_vhe.mp3",5.457755}, + spec_aeroport = {"subway_announcers/rri/boiko/orange/spec_aeroport.mp3",11.101020}, + to_aeroport = {"subway_announcers/rri/boiko/orange/to_aeroport.mp3",4.759955}, + to_park = {"subway_announcers/rri/boiko/orange/to_park.mp3",2.882993}, + +},{ + { + Name = "Line 1", + spec_last = {"last"}, + spec_wait = {{"train_stop"},{"train_depeat"}}, + { + 462, "ИкаруÑ","Ikarus", + arrlast = {nil, {"arr_ikarus",0.5,"last"}}, + dep = {{"next_smrc",0.1,"politeness"}} + }, + { + 461, "СМРК","SMRC", + arr = {"arr_smrc", "arr_smrc"}, + dep = {{"next_flora", 0.1,"handrails"}, "next_ikarus"} + }, + { + 460, "Флора","Flora", + arr = {"arr_flora", "arr_flora"}, + dep = {{"next_aeroport", 0.1,"things"}, {"next_smrc",0.1,"handrails"}} + }, + { + 458, "ÐÑропорт","Airport", + arr = {{"arr_aeroport",0.1,"objects"}, {"arr_aeroport",0.1,"things"}}, + dep = {{"next_slavnaya_strana"}, {"next_flora",0.1,"politeness"}}, + arrlast = {{"arr_aeroport",0.5,"last"}, {"arr_aeroport",0.5,"last"}}, + not_last = {3,"to_aeroport"}, + }, + { + 457, "Ð¡Ð»Ð°Ð²Ð½Ð°Ñ Ñтр.","Glorius c.", + arr = {"arr_slavnaya_strana", "arr_slavnaya_strana"}, + dep = {{"next_litiyevaya",0.1,"politeness"}, "next_aeroport"}, + have_inrerchange = true + }, + { + --male<->female + 456, "ЛитиеваÑ","Lithium", + arr = {"arr_litiyevaya", "arr_litiyevaya"}, + dep = {"next_arsenal", {"next_slavnaya_strana",0.1,"objects"}}, + have_inrerchange = true + }, + { + 455, "ÐÑ€Ñенал","Arsenal", + arr = {"arr_arsenal", "arr_arsenal"}, + dep = {{"next_park",0.1,"handrails"}, {"next_litiyevaya",0.1,"handrails"}}, + }, + { + 454, "Парк","Park", + arr = {{"arr_park", 0.1,"things"}, {"arr_park",0.1,"things"}}, + dep = {{"next_gcfscape"}, {"next_arsenal",0.1,"objects"}}, + arrlast = {{"arr_park",0.5,"last"}, {"arr_park",0.5,"last"}}, + not_last = {3,"to_park"}, + have_inrerchange = true + }, + { + 453, "GCFScape", + arr = {"arr_gcfscape", {"arr_gcfscape"}}, + dep = {{"next_vhe"}, {"next_park",0.1,"politeness"}}, + }, + { + 452, "VHE", + arr = {"arr_vhe", "arr_vhe"}, + dep = {{"next_imeni_uollesa_brina",0.1,"exit"}, "next_gcfscape"}, + have_inrerchange = true + }, + { + 451, "У. Брина","W. Breen", + arrlast = {{"arr_imeni_uollesa_brina",0.5,"last"}}, + dep = {nil, {"next_vhe",0.1,"politeness"}}, + } + }, +}) + +Metrostroi.StationSound = { + {"subway_stations/announces/orange/orange_1.mp3",51.965563}, + {"subway_stations/announces/orange/orange_2.mp3",47.132875}, + {"subway_stations/announces/orange/orange_3.mp3",42.169625}, + {"subway_stations/announces/orange/orange_4.mp3",44.494500}, + {"subway_stations/announces/orange/orange_5.mp3",26.548438}, + {"subway_stations/announces/orange/orange_6.mp3",39.661875}, +} +Metrostroi.StationConfigurations = { + [462] = { + names = {"икаруÑ","Ikarus"}, + positions = { + {Vector(-917,13102,5266-64),Angle(0,0,0)}, + {Vector(-838,12974,5266-64),Angle(0,180+30,0)}, + {Vector(-2100,13283,5266-64),Angle(0,30,0)}, + {Vector(7263,13279,5250-64),Angle(0,180,0)}, + + } + }, + [461] = { + names = {"Ñмрк","SMRC"}, + positions = { + {Vector(-1632,-12568,4959-64),Angle(0,0,0)}, + {Vector(-238,-12856,4959-64),Angle(0,180+30,0)}, + {Vector(-2988,-12306,4959-64),Angle(0,30,0)}, + } + }, + [460] = { + names = {"флора","Flora"}, + positions = { + {Vector(2526,-15264,4516-64),Angle(0,0,0)}, + {Vector(3858,-15680,4516-64),Angle(0,180+30,0)}, + {Vector(1132,-14838,4516-64),Angle(0,30,0)}, + } + }, + [458] = { + names = {"аÑропорт","Airport"}, + positions = { + {Vector(-995,-14800,3470-64),Angle(0,0,0)}, + {Vector(906,-15125,3470-64),Angle(0,180+30,0)}, + {Vector(-2156,-13920,3470-64),Angle(0,30,0)}, + {Vector(1076,-14700,3470-64),Angle(0,180-30,0)}, + } + }, + [457] = { + names = {"ÑÐ»Ð°Ð²Ð½Ð°Ñ Ñтрана","Glorius country"}, + positions = { + {Vector(-14068,315,2867-64),Angle(0,-90,0)}, + {Vector(-14533,-1031,2867-64),Angle(0,90+30,0)}, + {Vector(-13588,1816,2867-64),Angle(0,-90+30,0)}, + } + }, + [456] = { + names = {"литиеваÑ","Lithium"}, + positions = { + {Vector(-14761,2882,2264-64),Angle(0,-90,0)}, + {Vector(-15037,1342,2264-64),Angle(0,90+30,0)}, + {Vector(-14506,4438,2264-64),Angle(0,-90+30,0)}, + } + }, + [455] = { + names = {"арÑенал","Arsenal"}, + positions = { + {Vector(-638,14050,1626-64),Angle(0,180,0)}, + {Vector(-1892,14433,1626-64),Angle(0,30,0)}, + {Vector(878,13680,1626-64),Angle(0,180+30,0)}, + } + }, + [454] = { + names = {"парк","Park"}, + positions = { + {Vector(10362,-536,988-64),Angle(0,48,0)}, + {Vector(10964,1870,988-64),Angle(0,270-48,0)}, + {Vector(10652,-8218,983-64),Angle(0,90,0)}, + } + }, + [453] = { + names = {"gcfscape"}, + positions = { + {Vector(15050,3393,531-64),Angle(20,-90,0)}, + {Vector(14777,2290,347-64),Angle(0,90-30,0)}, + {Vector(15324,5121,347-64),Angle(0,-90-30,0)}, + } + }, + [452] = { + names = {"vhe"}, + positions = { + {Vector(-1295,15124,-253-64),Angle(0,0,0)}, + {Vector(-107,14735,-253-64),Angle(0,180+30,0)}, + {Vector(-2838,15487,-253-64),Angle(0,30,0)}, + } + }, + [451] = { + names = {"уоллеÑа брина","Wallace breen"}, + positions = { + {Vector(2616,11550,-854-64),Angle(0,90,0)}, + {Vector(3990,10843,-854-64),Angle(0,180+30,0)}, + {Vector(1180,12277,-854-64),Angle(0,30,0)}, + {Vector(4119,10804,-854-64),Angle(0,0,0)}, + {Vector(8345,469,-849-64),Angle(0,90,0)}, + } + }, + depot = { + names = {"депо"}, + positions = { + {Vector(-9377,-233,5328-64), Angle(0,90,0)}, + {Vector(-9358,2668,5328-64), Angle(0,180,0)}, + {Vector(-13265,2284,5323-64), Angle(0,0,0)}, + {Vector(-9348,854,5328-64), Angle(0,-180,0)}, + {Vector(-12170,4269,5378-64), Angle(0,0,0)}, + {Vector(-13367,4753,5328-64), Angle(0,-10,0)}, + } + } +} \ No newline at end of file diff --git a/lua/metrostroi/sh_arm.lua b/lua/metrostroi/sh_arm.lua new file mode 100644 index 0000000..5399c67 --- /dev/null +++ b/lua/metrostroi/sh_arm.lua @@ -0,0 +1,125 @@ +Metrostroi.ARMTable = {signal = {},switch = {},trigger = {}} + +if SERVER then + util.AddNetworkString "metrostroi-arm" + hook.Add("Think","metrostroi_arm_remove",function() + for i,v in ipairs(Metrostroi.ARMTable) do + if IsValid(v.Controller) and v.Controller.Station ~= i then + v.Controller = nil + v.net = {} + end + end + end) + net.Receive("metrostroi-arm",function(_,ply) + local station = net.ReadUInt(16) + --print("Player "..tostring(ply).." request full sync."..station) + net.Start("metrostroi-arm") + net.WriteBool(true) + net.WriteInt(station,16) + net.WriteTable(Metrostroi.ARMTable[station].net) + net.Send(ply) + end) + function Metrostroi.ARMGet(name,typ) + if not name or not Metrostroi.ARMTable[typ] then return end + if typ == "signal" then + local signal = Metrostroi.ARMTable[typ][name] + if not IsValid(signal) then + Metrostroi.ARMTable[typ][name] = Metrostroi.GetSignalByName(name) + return false + end + return signal + end + if typ == "switch" then + local switch = Metrostroi.ARMTable[typ][name] + if not IsValid(switch) then + Metrostroi.ARMTable[typ][name] = Metrostroi.GetSwitchByName(name) + return false + end + return switch + end + if typ == "trigger" then + local trigger = Metrostroi.ARMTable[typ][name] + if not IsValid(trigger) then + local triggers = ents.FindByName(name) + if #triggers == 1 then + trigger = triggers[1] + Metrostroi.ARMTable[typ][name] = trigger + trigger:Fire("AddOutput","OnEndTouchAll !self:ARMEndTouch::0:-1",0) + trigger:Fire("AddOutput","OnStartTouchAll !self:ARMStartTouch::0:-1",0) + trigger:Fire("AddOutput","OnTouching !self:ARMStartTouch::0:-1",0) + trigger:Fire("TouchTest") + end + return + else + return trigger + end + end + end + function Metrostroi.ARMSync(station,segmid,id,val) + local tbl = Metrostroi.ARMTable[station]and Metrostroi.ARMTable[station].net + if not tbl then return end + if not tbl[segmid] then tbl[segmid] = {} end + if val == false then val = nil end + if tbl[segmid][id] == val then return end + print("Syncing",station,segmid,id,val) + net.Start("metrostroi-arm") + net.WriteBool(false) + net.WriteUInt(station,16) + net.WriteUInt(segmid,16) + net.WriteString(id) + net.WriteType(val) + net.Broadcast() + tbl[segmid][id] = val + end +else + hook.Add("Think","arm_think",function() + for i,station in ipairs(Metrostroi.ARMTable) do + if (not station.LastSync or CurTime()-station.LastSync > 15) and (not Metrostroi.ARMTable.LastSyncRequest or CurTime()-Metrostroi.ARMTable.LastSyncRequest > 1) then + print(CurTime(),UnPredictedCurTime(),RealTime(),tostring(IsFirstTimePredicted())) + net.Start("metrostroi-arm") + net.WriteInt(i,16) + net.SendToServer() + print("Requesting full sync",i) + Metrostroi.ARMTable.LastSyncRequest = CurTime() + end + end + end) + + net.Receive("metrostroi-arm",function(_,ply) + if net.ReadBool() then + local station = net.ReadUInt(16) + print("We got sync.",station) + Metrostroi.ARMTable[station] = net.ReadTable() + Metrostroi.ARMTable[station].LastSync = CurTime() + else + local station = net.ReadUInt(16) + local segmid = net.ReadUInt(16) + local id = net.ReadString() + local val = net.ReadType() + print("Received",station,segmid,id,val) + if not Metrostroi.ARMTable[station] then Metrostroi.ARMTable[station] = {} end + if not Metrostroi.ARMTable[station][segmid] then Metrostroi.ARMTable[station][segmid] = {} end + Metrostroi.ARMTable[station][segmid][id] = val + end + end) + + + function Metrostroi.GetARMInfo(station,segmid,id) + local tbl = Metrostroi.ARMTable[station] + if not tbl then return end + if not tbl[segmid] then return end + return tbl[segmid][id] + end +end +if Metrostroi.ARMConfigGenerated then + for k,v in ipairs(Metrostroi.ARMConfigGenerated) do + Metrostroi.ARMTable[k] = { + occChecks = {}, + net = {}, + signal = {}, + switch = {}, + trigger = {}, + routes = {}, + } + end +end \ No newline at end of file diff --git a/lua/metrostroi/sh_failsim.lua b/lua/metrostroi/sh_failsim.lua new file mode 100644 index 0000000..0043e97 --- /dev/null +++ b/lua/metrostroi/sh_failsim.lua @@ -0,0 +1,389 @@ +local random = math.random +local sqrt = math.sqrt +local ln = math.log +local cos = math.cos +local sin = math.sin +local pi2 = 2*math.pi + + +-------------------------------------------------------------------------------- +-- Generate random number with at least 60 bits of randomness +-- (on my machine random() was 15-bit) +-------------------------------------------------------------------------------- +local function rand60() + return random() + random()/(2^15) + random()/(2^30) + random()/(2^45) +end + + +-------------------------------------------------------------------------------- +-- Generate random gaussian-distributed value +-------------------------------------------------------------------------------- +local function gauss_random(x0,sigma) + local u,v = rand60(),rand60() + if u == 0.0 then return gauss_random(x0,sigma) end -- Remove singularity + if u > 1 then u = 1 end --gauss_random returns nan, because rand60() can return 1.00001 + + local r = sqrt(-2 * ln(u)) + local x,y = r * cos(pi2*v) + return x*(sigma or 0.5) + (x0 or 0) +end + +-------------------------------------------------------------------------------- +-- Generates random failure time given MTBF in units of time +-- Returns true if device has failued, given MTBF and timestep +-------------------------------------------------------------------------------- +local function check_failure(mtbf,dt) + local probability = dt/mtbf + return rand60() < probability +end + + + + +-------------------------------------------------------------------------------- +-- Failure simulator +-------------------------------------------------------------------------------- +FailSim = {} +FailSim.Objects = {} + + + + +-------------------------------------------------------------------------------- +-- Parameter description +-- nominal_value Nominal value of the parameter +-- value (same) +-- precision Precision of real value vs nominal value +-- instance_precision Precision of a single event vs real value +-- varies If true, "Value()" returns a slightly varying result each time +-- min +-- max Parameter will be clamped to these +-------------------------------------------------------------------------------- +function FailSim.AddParameter(object, name, a, b) + if not FailSim.Objects[object] then + FailSim.Objects[object] = { Parameters = {}, FailurePoints = {}, Age = 0.0, Stress = 1.0 } + end + + -- Create description + local d = a + if type(d) ~= "table" then + d = { + nominal_value = a, + precision = b + } + end + d.nominal_value = d.nominal_value or d.value or 0 -- Nominal value of the parameter + d.precision = d.precision or 0.05 -- Precision with which parameter is defined + d.instance_precision = d.instance_precision or d.precision -- Precision of every 'event' this parameter defines + + -- Add new parameter + local parameter = { + object = object, + name = name, + failures = {}, -- List of failures for this parameter + } + for k,v in pairs(d) do parameter[k] = v end + + -- Calculate current (initial) value of the parameter + parameter.value = gauss_random(d.nominal_value,d.nominal_value*d.precision) + parameter.start_value = parameter.value + + -- Store it + FailSim.Objects[object].Parameters[name] = parameter + return parameter.value +end + + + + +-------------------------------------------------------------------------------- +-- Failure types +-- +-- age_drift (drift of parameter with time) +-- const value Average drift over mean time period +-- const mean_time Period of drift +-- +-------------------------------------------------------------------------------- +-- (shared parameters) +-- const mean_time Mean time between failures of this kind +-- +-- on (fails to 1.0) +-- off (fails to 0.0) +-- value (parameter fails to specific value) +-- const value Value to which it fails +-- +-- precision (loss of precision) +-- const value How much tolerance must be added +-- const precision How well tolerance is defined +-- +-- shift (change in value) +-- const value How much must be added/subtracted +-- const precision Precision of 'value' +-- +-- +-------------------------------------------------------------------------------- +function FailSim.AddFailurePoint(object, param_name, failure_name, d) + if not FailSim.Objects[object] then + FailSim.Objects[object] = { Parameters = {}, FailurePoints = {}, Age = 0.0 } + end + + -- Create description + d.value = d.value or 0 -- Some failure parameter + d.precision = d.precision or 0.10 -- Precision of 'value' + d.mean_time = d.mean_time or d.mtbf or + (1/d.mfr) or (1/d.mean_fail_rate) or 1e9 -- Mean time to failure, seconds + d.time_precision = d.time_precision or d.dmtbf or 0.25 -- Precision of Mtime + d.duration_precision = d.duration_precision or 0.50 -- Precision of duration + + -- Add new failure point + local failure = { + object = object, + parameter_name = param_name, -- Name of failing parameter + name = failure_name, -- Name of failure + } + for k,v in pairs(d) do failure[k] = v end + + -- Special logic + if failure.type == "on" then + failure.type = "value" + failure.value = 1.0 + elseif failure.type == "off" then + failure.type = "value" + failure.value = 0.0 + end + + -- Add to list of failures + table.insert(FailSim.Objects[object].FailurePoints,failure) + -- Return failure description + return failure +end + + + +-------------------------------------------------------------------------------- +-- Process failures and add object age +-------------------------------------------------------------------------------- +local function doFailure(parameter,v) + if v.type == "value" then + parameter.oldvalue = parameter.value + parameter.value = v.value + parameter.failures[v] = v + elseif v.type == "precision" then + parameter.oldinstance_precision = parameter.instance_precision + parameter.instance_precision = parameter.instance_precision + + math.abs(gauss_random(v.value,v.value*v.precision)) + parameter.failures[v] = v + elseif v.type == "shift" then + parameter.oldvalue = parameter.value + parameter.value = parameter.value + + math.abs(gauss_random(v.value,v.value*v.precision)) + parameter.failures[v] = v + end + --[[if v.duration then + parameter.failure_end_age = object.Age + + gauss_random(v.duration,v.duration*v.duration_precision) + end]]-- +end + +function FailSim.Age(object, delta_time) + local object = FailSim.Objects[object] + if not object then return end + + -- Age the object by given value + object.Age = object.Age + delta_time + + -- Check if any of the objects failure points must be triggered + for k,v in pairs(object.FailurePoints) do + local parameter = object.Parameters[v.parameter_name] + if parameter and ((not parameter.failures[v]) or (v.recurring)) then + -- Drift of parameters over time at certain speed + if v.type == "age_drift" then + local dxdt = v.value / failure.fail_age --gauss_random(v.value / v.mean_time,v.sigma) + parameter.value = parameter.value + dxdt*dt + end + + -- Single-event failures + if check_failure(v.mean_time,delta_time) then + doFailure(parameter,v) + end + end + end +end + +function FailSim.RandomFailure() + -- List all failures + local failureList = {} + for _,object in pairs(FailSim.Objects) do + for k,v in pairs(object.FailurePoints) do + table.insert(failureList,v) + end + end + + -- Get random failure + local count = #failureList + local i = math.floor(rand60()*count)+1 + if i > count then i = count end + if i < 1 then i = 1 end + + local failure = failureList[i] + local parameter = FailSim.Objects[failure.object].Parameters[failure.parameter_name] + print("Generated random failure from total of "..count.." failures:") + print("[!FAIL!] "..failure.name.." in "..(failure.object.Name or "?")) + doFailure(parameter,failure) +end + + + + +-------------------------------------------------------------------------------- +-- Return value of the parameter +-------------------------------------------------------------------------------- +function FailSim.Value(object,name) + local cobject = FailSim.Objects[object] + if not cobject then return end + local parameter = cobject.Parameters[name] + if not parameter then return end + + -- Generate value + local value + if parameter.varies then + local instance_sigma = parameter.value*parameter.instance_precision + value = gauss_random(parameter.value,instance_sigma) + else + value = parameter.value + end + + -- Clamp it + if parameter.min then value = math.max(parameter.min,value) end + if parameter.max then value = math.min(parameter.max,value) end + + -- Return + if value~=value then + print("WARNING!!!",object.Name,name,value) + end + return value +end + +function FailSim.ResetParameter(object,name,value) + local object = FailSim.Objects[object] + if not object then return end + local parameter = object.Parameters[name] + if not parameter then return end + + parameter.failures = {} + parameter.value = value or + gauss_random(parameter.nominal_value,parameter.nominal_value*parameter.precision) +end + + + + +-------------------------------------------------------------------------------- +-- Return failures report for object +-------------------------------------------------------------------------------- +function FailSim.Report(obj,type) + if not obj then + print("Listing all failures:") + for k,v in pairs(FailSim.Objects) do + FailSim.Report(k,type) + end + print("...done!") + return + end + local object = FailSim.Objects[obj] + if not object then return end + + -- Table of failures + if type == "parameters" then + for k,v in pairs(object.Parameters) do + print((obj.Name or "Unknown object")..": "..k) + end + end + if type == "failure_points" then + for k,v in pairs(object.FailurePoints) do + print((obj.Name or "Unknown object")..": "..v.name.." ("..v.parameter_name..")") + end + end + if type == "failures" then + local any = false + for k,v in pairs(object.Parameters) do + for k2,v2 in pairs(v.failures) do + print((obj.Name or "Unknown object")..": "..v2.name) + any = true + end + end + end +end + +function FailSim.Reset() + for k,v in pairs(FailSim.Objects) do + for k2,v2 in pairs(v.Parameters) do + FailSim.ResetParameter(v,v2,0) + --if v2.oldvalue then v2.value = v2.oldvalue end + --if v2.oldinstance_precision then v2.instance_precision = v2.oldinstance_precision end + --v2.failures = {} + --[[print("!",k,v,k2,v2)]] + end + --[[for k2,v2 in pairs(v.FailurePoints) do + --FailSim.Objects.Parameters[k2] = 0 + for k3,v3 in pairs(v2) do + print("#",k3,v3) + end + print("@",k,v,k2,v2) + end]] + --FailSim.ResetParameter(v,v.Name,v.Value) + end + --object.FailurePoints +end +--[[ +Metrostroi = { DefineSystem = function() end } +math.randomseed(os.time()) + +TRAIN_SYSTEM = {} +dofile("sys_relay.lua") +RELAY = TRAIN_SYSTEM + +RELAY:Initialize() + +-- Start switching +local i = 0 +local x = 0 +for t = 0.0, 200000.0, 0.5 do + function CurTime() return t end + + if (i % 8) == 0 then + + if RELAY.Value ~= 0 then + print("RELAY WRONG VALUE AFTER",x,"CYCLES") + print(FailSim.Report(RELAY)) + error() + end + + RELAY:TriggerInput("Open",1.0) + x = x + 1 + elseif (i % 8) == 2 then + if RELAY.Value ~= 1 then + print("RELAY FAILED TO OPEN AFTER",x,"CYCLES") + print(FailSim.Report(RELAY)) + error() + end + elseif (i % 8) == 4 then + if RELAY.Value ~= 1 then + print("RELAY WRONG VALUE AFTER",x,"CYCLES") + print(FailSim.Report(RELAY)) + error() + end + + RELAY:TriggerInput("Close",1.0) + x = x + 1 + elseif (i % 8) == 6 then + if RELAY.Value ~= 0 then + print("RELAY FAILED TO CLOSE AFTER",x,"CYCLES") + print(FailSim.Report(RELAY)) + error() + end + end + + RELAY:Think() + i = i + 1 +end]]-- \ No newline at end of file diff --git a/lua/metrostroi/sh_rerail.lua b/lua/metrostroi/sh_rerail.lua new file mode 100644 index 0000000..0e8bf06 --- /dev/null +++ b/lua/metrostroi/sh_rerail.lua @@ -0,0 +1,313 @@ +-------------------------------------------------------------------------------- +-- Rerailing, testing whether train is on rails +-------------------------------------------------------------------------------- +-- Z Offset for rerailing bogeys +local bogeyOffset = 31 +local TRACK_GAUGE = 80 --Distance between rails +local TRACK_WIDTH = 5.8 --Width of a single rail +local TRACK_HEIGHT = 10 --Height of a single rail +local TRACK_CLEARANCE = 150 --Vertical space above the rails that will always be clear of world, also used as rough estimation of train height + +-------------------------------------------------------------------------------- + +local TRACK_SINGLERAIL = (TRACK_GAUGE + TRACK_WIDTH) / 2 + +local function dirdebug(v1,v2) + debugoverlay.Line(v1,v1+v2*30,10,Color(255,0,0),true) +end + +-- Takes datatable from getTrackData +local function debugtrackdata(data) + dirdebug(data.centerpos,data.forward) + dirdebug(data.centerpos,data.right) + dirdebug(data.centerpos,data.up) +end + +-- Helper for commonly used trace +local function traceWorldOnly(pos,dir,col) + local tr = util.TraceLine({ + start = pos, + endpos = pos+dir, + mask = MASK_NPCWORLDSTATIC + }) + if false then -- Shows all traces done by rerailer + debugoverlay.Line(tr.StartPos,tr.HitPos,10,col or Color(0,0,255),true) + debugoverlay.Sphere(tr.StartPos,2,10,Color(0,255,255),true) + end + return tr +end + +-- Go over the enttable, bogeys and train and reset them +local function resetSolids(enttable,train) + for k,v in pairs(enttable) do + if IsValid(k) then + k:SetSolid(v) + k:GetPhysicsObject():EnableMotion(true) + end + end + if train ~= nil and IsValid(train) then + train.FrontBogey:GetPhysicsObject():EnableMotion(true) + train.RearBogey:GetPhysicsObject():EnableMotion(true) + if IsValid(train.FrontCouple) then + train.FrontCouple:GetPhysicsObject():EnableMotion(true) + train.RearCouple:GetPhysicsObject():EnableMotion(true) + end + + train:GetPhysicsObject():EnableMotion(true) + end +end + +-- Elevates a position to track level +-- Requires a position in the center of the track +local function ElevateToTrackLevel(pos,right,up) + local tr1 = traceWorldOnly(pos+up*TRACK_CLEARANCE+right*TRACK_SINGLERAIL,-up*TRACK_CLEARANCE*2) + local tr2 = traceWorldOnly(pos+up*TRACK_CLEARANCE-right*TRACK_SINGLERAIL,-up*TRACK_CLEARANCE*2) + --Trace from above the track down to the rails + if not tr1.Hit or not tr2.Hit then return false end + return (tr1.HitPos + tr2.HitPos)/2 +end + +-- Takes position and initial rough forward vector, return table of track data +-- Position needs to be between/below the tracks already, don't use a props origin +-- Only needs a rough forward vector, ent:GetAngles():Forward() suffices +local function getTrackData(pos,forward) + --Trace down + --debugoverlay.Cross(pos,5,10,Color(255,0,255),true) + local tr = traceWorldOnly(pos,Vector(0,0,-500)) + if !tr or !tr.Hit then return false end + + + --debugoverlay.Line(tr.StartPos,tr.HitPos,10,Color(0,255,0),true) + local updir = tr.HitNormal + local floor = tr.HitPos + updir * (TRACK_HEIGHT * 0.9) + local right = forward:Cross(updir) + + --Trace right + local tr = traceWorldOnly(floor,right*500) + if not tr or not tr.Hit then return false end + + + --debugoverlay.Line(tr.StartPos,tr.HitPos,10,Color(0,255,0),true) + + local trackforward = tr.HitNormal:Cross(updir) + local trackright = trackforward:Cross(updir) + + debugoverlay.Axis(floor,trackforward:Angle(),10,5,true) + + --debugoverlay.Line(pos,pos+trackforward*30,10,Color(255,0,0),true) + + --Trace right with proper right + local tr1 = traceWorldOnly(floor,trackright*TRACK_GAUGE) + local tr2 = traceWorldOnly(floor,-trackright*TRACK_GAUGE) + if not tr1 or not tr2 then return false end + + + local floor = (tr1.HitPos+tr2.HitPos)/2 + + debugoverlay.Cross(floor,5,10,Color(0,255,0),true) + + local centerpos = ElevateToTrackLevel(floor,trackright,updir) + + if not centerpos then return false end + + debugoverlay.Cross(centerpos,5,10,Color(255,0,0),true) + + local data = { + forward = trackforward, + right = trackright, + up = updir, + centerpos = centerpos + } + + return data +end +Metrostroi.RerailGetTrackData = getTrackData + + +-- Helper function that tries to find trackdata at -z or -ent:Up() +local function getTrackDataBelowEnt(ent) + local forward = ent:GetAngles():Forward() + + local tr = traceWorldOnly(ent:GetPos(),Vector(0,0,-500)) + if tr.Hit then + local td = getTrackData(tr.HitPos,forward) + if td then return td end + end + + local tr = traceWorldOnly(ent:GetPos(),ent:GetAngles():Up()*-500) + if tr.Hit then + local td = getTrackData(tr.HitPos,forward) + if td then return td end + end + + return false +end + +local function PlayerCanRerail(ply,ent) + if CPPI and ent.CPPICanTool then + return ent:CPPICanTool(ply,"metrostroi_rerailer") + else + return ply:IsAdmin() or (ent.Owner and ent.Owner == ply) + end +end + +-- ConCMD for rerailer +local function RerailConCMDHandler(ply,cmd,args,fullstring) + local train = ply:GetEyeTrace().Entity + if not IsValid(train) then return end + + + --If we're aiming at bogeys or wheels + local nwent = train:GetNW2Entity("TrainEntity") + if nwent and nwent.SubwayTrain ~= nil then + train = nwent + end + + if not PlayerCanRerail(ply,train) then return end + + if train:GetClass() == "gmod_train_bogey" then + Metrostroi.RerailBogey(train) + else + Metrostroi.RerailTrain(train) + end +end +if SERVER then + concommand.Add("metrostroi_rerail",RerailConCMDHandler) +end + + + + +-------------------------------------------------------------------------------- +-- Rerails a single bogey +-------------------------------------------------------------------------------- +function Metrostroi.RerailBogey(bogey) + if timer.Exists("metrostroi_rerailer_solid_reset_"..bogey:EntIndex()) then return false end + + local trackData = getTrackDataBelowEnt(bogey) + if not trackData then return false end + bogey:SetPos(trackData.centerpos+trackData.up*(bogey.BogeyOffset or bogeyOffset)) + bogey:SetAngles(trackData.forward:Angle()) + + bogey:GetPhysicsObject():EnableMotion(false) + + local solids = {} + local wheels = bogey.Wheels + + solids[bogey]=bogey:GetSolid() + bogey:SetSolid(SOLID_NONE) + + if wheels ~= nil then + solids[wheels]=wheels:GetSolid() + wheels:SetSolid(SOLID_NONE) + end + + timer.Create("metrostroi_rerailer_solid_reset_"..bogey:EntIndex(),1,1,function() resetSolids(solids) end ) + return true +end + + + + +-------------------------------------------------------------------------------- +-- Rerails given train entity +-------------------------------------------------------------------------------- +function Metrostroi.RerailTrain(train) + + --Safety checks + if not IsValid(train) or train.SubwayTrain == nil then return false end + if train.NoPhysics or not IsValid(train:GetPhysicsObject()) then return false end + if timer.Exists("metrostroi_rerailer_solid_reset_"..train:EntIndex()) then return false end + --[[ + --Trace down to get the track + local tr = traceWorldOnly(train:GetPos(),Vector(0,0,-500)) + if !tr or !tr.Hit then + tr = traceWorldOnly(train:GetPos(),train:GetAngles():Up()*-500) + if !tr or !tr.Hit then return false end + end + + --Get track data below the train + local trackdata = getTrackData(tr.HitPos+tr.HitNormal*3,train:GetAngles():Forward()) + if !trackdata then return false end + --]] + + local trackdata = getTrackDataBelowEnt(train) + if not trackdata then return false end + local ang = trackdata.forward:Angle() + + + --Get the positions of the bogeys if we'd rerail the train now + local frontoffset=train:WorldToLocal(train.FrontBogey:GetPos()) + frontoffset:Rotate(ang) + local frontpos = frontoffset+train:GetPos() + + local rearoffset = train:WorldToLocal(train.RearBogey:GetPos()) + rearoffset:Rotate(ang) + local rearpos=rearoffset+train:GetPos() + + --Get thet track data at these locations + local tr = traceWorldOnly(frontpos,-trackdata.up*500) + if !tr or !tr.Hit then return false end + local frontdata = getTrackData(tr.HitPos+tr.HitNormal*3,trackdata.forward) + if !frontdata then return false end + + local tr = traceWorldOnly(rearpos,-trackdata.up*500) + if !tr or !tr.Hit then return false end + local reardata = getTrackData(tr.HitPos+tr.HitNormal*3,trackdata.forward) + if !reardata then return false end + + --Find the current difference between the bogeys and the train's model center + local TrainOriginToBogeyOffset = (train:WorldToLocal(train.FrontBogey:GetPos())+train:WorldToLocal(train.RearBogey:GetPos()))/2 + + --Final trains pos is the average of the 2 bogey locations + local trainpos = (frontdata.centerpos+reardata.centerpos)/2 + + --Apply bogey-origin and bogey-track offsets + trainpos = LocalToWorld(TrainOriginToBogeyOffset*-1,ang,trainpos,ang) + Vector(0,0,(train.FrontBogey.BogeyOffset or bogeyOffset)) + --Not sure if this is neccesary anymore, but I'm not touching this anytime soon + + --Store and set solids + local entlist = { + train, + train.FrontBogey, + train.RearBogey, + train.FrontBogey.Wheels, + train.RearBogey.Wheels, + train.FrontCouple, + train.RearCouple + } + + local solids = {} + for k,v in pairs(entlist) do + solids[v]=v:GetSolid() + v:SetSolid(SOLID_NONE) + end + + train:SetPos(trainpos) + train:SetAngles(ang) + + train.FrontBogey:SetPos(train:LocalToWorld(train.FrontBogey.SpawnPos))--frontdata.centerpos+frontdata.up*(train.FrontBogey.BogeyOffset or bogeyOffset)) + train.RearBogey:SetPos(train:LocalToWorld(train.RearBogey.SpawnPos))--reardata.centerpos+reardata.up*(train.FrontBogey.BogeyOffset or bogeyOffset)) + + train.FrontBogey:SetAngles(train:LocalToWorldAngles(train.FrontBogey.SpawnAng))--(frontdata.forward*-1):Angle()) + train.RearBogey:SetAngles(train:LocalToWorldAngles(train.RearBogey.SpawnAng))--reardata.forward:Angle()) + + + if IsValid(train.FrontCouple) then + train.FrontCouple:SetPos(train:LocalToWorld(train.FrontCouple.SpawnPos)) + train.RearCouple:SetPos(train:LocalToWorld(train.RearCouple.SpawnPos)) + train.FrontCouple:SetAngles(train:LocalToWorldAngles(train.FrontCouple.SpawnAng)) + train.RearCouple:SetAngles(train:LocalToWorldAngles(train.RearCouple.SpawnAng)) + + train.FrontCouple:GetPhysicsObject():EnableMotion(false) + train.RearCouple:GetPhysicsObject():EnableMotion(false) + end + + train:GetPhysicsObject():EnableMotion(false) + + train.FrontBogey:GetPhysicsObject():EnableMotion(false) + train.RearBogey:GetPhysicsObject():EnableMotion(false) + + timer.Create("metrostroi_rerailer_solid_reset_"..train:EntIndex(),1,1,function() resetSolids(solids,train) end ) + return true +end diff --git a/lua/metrostroi/sh_time.lua b/lua/metrostroi/sh_time.lua new file mode 100644 index 0000000..f83059f --- /dev/null +++ b/lua/metrostroi/sh_time.lua @@ -0,0 +1,433 @@ +if CLIENT then + local function getTime() + return os.time()+GetGlobalFloat("MetrostroiTimeOffset",0) + end + function Metrostroi.GetTimedT(notsync) + local T0 = GetGlobalFloat("MetrostroiT0",os.time())+GetGlobalFloat("MetrostroiTY") + local T1 = GetGlobalFloat("MetrostroiT1",CurTime()) + local dT + if notsync then + dT = (os.time()-T0) - (CurTime()-T1) + else + dT = (os.time()-T0 + (CurTime() % 1.0)) - (CurTime()-T1) + end + return dT + end + function Metrostroi.GetSyncTime(notsync) + return getTime()-Metrostroi.GetTimedT(notsync) + end + timer.Simple(0,function() + net.Start("MetrostroiUpdateTimeSync") + net.SendToServer() + end) + return +end + +local C_TimeOffset = CreateConVar("metrostroi_time_offset",0,FCVAR_ARCHIVE,"Server time offset in seconds") +local C_TimeOld = CreateConVar("metrostroi_time_old",0,FCVAR_ARCHIVE,"Enables old time system without codepoints") +local function getTime() + return os.time()+C_TimeOffset:GetFloat() +end + +local function UpdateTimeSync() + --if GetGlobalFloat("MetrostroiT0",0) == 0 then + local year = os.time{hour=3,day=1,month=1,year=1971} + SetGlobalFloat("MetrostroiTY",year*math.ceil((os.time())/year)) + SetGlobalFloat("MetrostroiT0",os.time()-GetGlobalFloat("MetrostroiTY")) + SetGlobalFloat("MetrostroiT1",CurTime()) + SetGlobalFloat("MetrostroiTimeOffset",C_TimeOffset:GetFloat()) + --[[else + print"GETSECOND" + SetGlobalFloat("MetrostroiT0",GetGlobalFloat("MetrostroiT0")) + SetGlobalFloat("MetrostroiT1",GetGlobalFloat("MetrostroiT1")) + end]] +end +timer.Create("metrostroi_time_update",60,0,UpdateTimeSync) +util.AddNetworkString("MetrostroiUpdateTimeSync") +net.Receive("MetrostroiUpdateTimeSync",UpdateTimeSync) +cvars.AddChangeCallback("metrostroi_time_offset",UpdateTimeSync,"MetrostroiUpdateTimeSync") +hook.Add("PlayerInitialSpawn","metrostroi_time_sync",UpdateTimeSync) +UpdateTimeSync() + + +local function tonumberVar(...) + local out = {} + for i,num in ipairs{...} do out[i] = tonumber(num) or num ~= "" and num end + return unpack(out) +end +local message =[[ +metrostroi_time_set commang usage: +Date or time in DD.MM.YYYY HH:MM:SS format +Time offset in +24 or -24 format +Seconds and 12-hours(AM/PM) are optional +Examples: +metrostroi_time_set 12:00 +metrostroi_time_set 01.01.2019 +metrostroi_time_set 27.03.2019 10:14:30 +metrostroi_time_set 26.10.1985 9:00AM +metrostroi_time_set +3 +metrostroi_time_set 0 to reset]] + +concommand.Add("metrostroi_time_set",function(ply,_,_,fargs) + if IsValid(ply) then return end + + local tMinArr = os.date("*t") + local tArr = os.date("!*t") + local GMTMin = os.time(tMinArr)-os.time(tArr) + local timeAdd = tonumber(string.match(fargs,"^+?-?[012]?%d$")) + + if timeAdd then + if -24 <= timeAdd and timeAdd <= 24 then + RunConsoleCommand("metrostroi_time_offset",timeAdd*3600) + RunConsoleCommand("metrostroi_time") + else + print(message) + end + else + local H,M,S,twH = tonumberVar(string.match(fargs,"(%d?%d):(%d%d):?(%d?%d?)%s?(P?A?M?)")) + if H and M then + if twH and twH ~= "AM" and twH ~= "PM" then MsgC(Color(255,0,0),"Bad metrostroi_time_set commang usage.\n12-hours parameter must be AM or PM\n") return end + if H < 0 or (not twH and H > 24 or twH and H > 12) then MsgC(Color(255,0,0),"Bad metrostroi_time_set commang usage.\nHours must be in 0.."..(twH and 12 or 23).." range\n") return end + if M < 0 or M > 59 then MsgC(Color(255,0,0),"Bad metrostroi_time_set commang usage.\nMinutes must be in 0..59 range\n") return end + if S and (S < 0 or S > 59) then MsgC(Color(255,0,0),"Bad metrostroi_time_set commang usage.\nSeconds must be in 0..59 range\n") return end + local isPM = twH and twH == "PM" + if twH and H == 12 then H = 0 isPM = not isPM end + tArr.changed = true + tArr.hour = (isPM and H+12 or H) + tArr.min = M + tArr.sec = S or tArr.sec + end + local d,m,y = tonumberVar(string.match(fargs,"(%d%d)%.(%d%d?)%.(%d%d%d?%d?)")) + if d and m and y then + local maxDays = m == 2 and (y%4 == 0 and 29 or 28) or (m < 8 and m%2==1 or m >= 8 and m%2==0) and 31 or 30 + if y < 1970 or y > 2999 then MsgC(Color(255,0,0),"Bad metrostroi_time_set commang usage.\nYear must be in 1970..2999 range\n") return end + if d < 1 or d > maxDays then MsgC(Color(255,0,0),"Bad metrostroi_time_set commang usage.\nDay must be in 1.."..maxDays.." range\n") return end + if m < 1 or m > 12 then MsgC(Color(255,0,0),"Bad metrostroi_time_set commang usage.\nMonth must be in 1..12 range\n") return end + tArr.changed = true + tArr.day = d + tArr.month = m + tArr.year = y + end + if not tArr.changed then print(message) return end + RunConsoleCommand("metrostroi_time_offset",-os.time()+os.time(tArr)+GMTMin) + RunConsoleCommand("metrostroi_time") + end +end,nil,"Sets current server date and time. metrostroi_time to more info.") + +function Metrostroi.GetTimedT(notsync) + local T0 = GetGlobalFloat("MetrostroiT0",os.time())+GetGlobalFloat("MetrostroiTY") + local T1 = GetGlobalFloat("MetrostroiT1",CurTime()) + local dT + if notsync then + dT = (os.time()-T0) - (CurTime()-T1) + else + dT = (os.time()-T0 + (CurTime() % 1.0)) - (CurTime()-T1) + end + return dT +end +function Metrostroi.GetSyncTime(notsync) + return getTime()-Metrostroi.GetTimedT(notsync) +end + +local CV_PassScale = CreateConVar("metrostroi_passengers_scale",50,FCVAR_ARCHIVE,"Global passengers scale") +concommand.Add("metrostroi_time", function(ply, _, args) + local time = Metrostroi.GetSyncTime() + if IsValid(ply) then + ply:PrintMessage(HUD_PRINTCONSOLE, os.date("!Server date: %d.%m.%Y Server time: %H:%M:%S ",time)..Format("Current scale %.1f (%d%%)",Metrostroi.PassengersScale,Metrostroi.PassengersScale/CV_PassScale:GetFloat()*100)) + + --[=[local t = (time/60)%(60*24) + local printed = false + local train = ply:GetTrain() + if IsValid(train) and train.Schedule then + for k,v in ipairs(train.Schedule) do + local prefix = "" + if (not printed) and (t < v[3]) then + prefix = ">>>>" + printed = true + end + ply:PrintMessage(HUD_PRINTCONSOLE, + Format(prefix.."\t[%03d][%s] %02d:%02d:%02d",v[1], + Metrostroi.StationNames[v[1]] or "N/A", + math.floor(v[3]/60)%24, + math.floor(v[3])%60, + math.floor(v[3]*60)%60)) + + end + end]=] + else + print(os.date("!Server date: %d.%m.%Y Server time: %H:%M:%S ",time)..Format("Current scale %.1f (%d%%)",Metrostroi.PassengersScale,Metrostroi.PassengersScale/CV_PassScale:GetFloat()*100)) + end +end,nil,"Prints the current server time.") + +Metrostroi.CodePoints = Metrostroi.CodePoints or { + {23,1,0.2}, + {5.5,8.5,3}, + {10,13,1}, + {16,18,3}, + {20.5,22.5,0.5}, +} + +function Metrostroi.GetPassengersScale(time) + for i,tA in ipairs(Metrostroi.CodePoints) do + local pA,nA = (Metrostroi.CodePoints[i-1] or Metrostroi.CodePoints[#Metrostroi.CodePoints]),Metrostroi.CodePoints[i] + local pTime,nTime = pA[2],nA[2] + if pTime > nTime and (time < pTime and time > nTime) or pTime < nTime and (time < pTime or time > nTime) then continue end + local time1,time2 = tA[1],tA[2] + local pPoint, nPoint = pA[3],nA[3] + if not pPoint then pPoint = Metrostroi.CodePoints[#Metrostroi.CodePoints] end + if not nPoint then nPoint = Metrostroi.CodePoints[1] end + if time1 > time2 and time >= time1 then time2 = time1+24+(time2-time1) end + if time1 > time2 and time <= time2 then time1 = time2-24-(time2-time1) end + if pPoint > nPoint then + return math.Clamp(pPoint + (time-time1)/(time2-time1)*(nPoint-pPoint),nPoint,pPoint)*CV_PassScale:GetFloat() + else + return math.Clamp(pPoint + (time-time1)/(time2-time1)*(nPoint-pPoint),pPoint,nPoint)*CV_PassScale:GetFloat() + end + end + return CV_PassScale:GetFloat() +end + + +local function timeStr(time) + return Format("%02d:%02d",math.floor(time),math.floor(time*60)%60) +end +local function appendRight(str,sz) + return str..string.rep(" ",sz-#str) +end + +local function printArray(id) + if #Metrostroi.CodePoints == 0 then + print("No codepoints array. Current scale:"..Metrostroi.GetPassengersScale(0)) + return + end + + for i,point in pairs(Metrostroi.CodePoints) do + print(Format("[% 2d] %s-%s scale from %.2f to %.2f%s",i,timeStr(point[1]),timeStr(point[2]),(Metrostroi.CodePoints[i-1] or Metrostroi.CodePoints[#Metrostroi.CodePoints])[3],point[3],i == id and " <" or "")) + end + print("Time scale array:") + for x=0,4 do + for i=x*5,math.min(23.5,x*5+4) do Msg(appendRight(Format("%d",i),10)) end + Msg("\n") + for i=x*5,math.min(23.5,x*5+4.5),0.5 do Msg(appendRight(Format("%.2f",Metrostroi.GetPassengersScale(i)/CV_PassScale:GetFloat()),5)) end + Msg("\n") + end +end +concommand.Add("metrostroi_time_codepoints",function(ply,_,_,fargs) + if IsValid(ply) then return end + printArray() +end,nil,"Print current codepoints array") + +local function getTime(str,st) + local _,en,H,M,twH = tonumberVar(string.find(str,"(%d?%d):?(%d?%d?)%s?(P?A?M?)",st)) + if H then + if twH and twH ~= "AM" and twH ~= "PM" then MsgC(Color(255,0,0),"Bad metrostroi_time_codepoint_add commang usage.\n12-hours parameter must be AM or PM\n") return end + if H < 0 or (not twH and H > 24 or twH and H > 12) then MsgC(Color(255,0,0),"Bad metrostroi_time_codepoint_add commang usage.\nHours must be in 0.."..(twH and 12 or 23).." range\n") return end + if M and (M < 0 or M > 59) then MsgC(Color(255,0,0),"Bad metrostroi_time_codepoint_add commang usage.\nMinutes must be in 0..59 range\n") return end + local isPM = twH and twH == "PM" + if twH and H == 12 then H = 0 isPM = not isPM end + if isPM then H = H+12 end + + return M and H+M/60 or H,en + end +end + +local function checkTime(v1,v2,afterMid,id,arr) + for i,point in ipairs(arr or Metrostroi.CodePoints) do + if i == id then continue end + if not afterMid and point[1] == v1 and point[2] == v2 or afterMid and point[1] == v2 and point[2] == v1 + or point[1] < point[2] and ( + point[1] < v1 and v1 < point[2] or + point[1] < v2 and v2 < point[2] or + not afterMid and point[1] > v1 and point[2] < v2 or + afterMid and point[1] < v1 and point[2] > v2 + ) or point[1] > point[2] and (point[1] < v2 or point[2] > v1) then + print("Time overlap!") + print(Format("[% 2d] %s-%s our %s-%s",i,timeStr(point[1]),timeStr(point[2]),timeStr(v1),timeStr(v2))) + return false + end + end + return not id or (arr or Metrostroi.CodePoints)[id] +end + +concommand.Add("metrostroi_time_add",function(ply,_,_,fargs) + if IsValid(ply) then return end + + local v1, e1 = getTime(fargs) + local v2, e2 = getTime(fargs,e1) + local val = e2 and tonumber(string.sub(fargs,e2,-1)) + if not v1 or not v2 or not val then + print("metrostroi_time_add usage:\nEnter scale change start and end time and then target scale at end of this time\nExamples:\nmetrostroi_time_add 10:00 11:00 2\nmetrostroi_time_add 12 13 1") + return + end + + local afterMid = v1 > v2 + if afterMid then + local v = v1 + v1 = v2 + v2 = v + end + if not checkTime(v1,v2,afterMid) then return end + if afterMid then + table.insert(Metrostroi.CodePoints,{v2,v1,val}) + else + table.insert(Metrostroi.CodePoints,{v1,v2,val}) + end + table.sort(Metrostroi.CodePoints,function(a,b) return a[2] < b[2] end) + for i,v in ipairs(Metrostroi.CodePoints) do + if afterMid and v1 == v[2] and v2 == v[1] or not afterMid and v1 == v[1] and v2 == v[2] then + printArray(i) + print("Added at id "..i) + return + end + end +end,nil,"Adds a new codepoint. metrostroi_time_add to more info.") + +concommand.Add("metrostroi_time_edit",function(ply,_,_,fargs) + if IsValid(ply) then return end + local _,e1,id = tonumberVar(string.find(fargs,"([^%s]+)")) + local v1, e2 = getTime(fargs,e1 and e1+1) + local v2, e3 = getTime(fargs,e2) + local val = e3 and tonumber(string.sub(fargs,e3,-1)) + + if not id or not v1 or not v2 or not val then + print("metrostroi_time_edit usage:\nEnter scale change start and end time and then target scale at end of this time\nExamples:\nmetrostroi_time_edit 10:00 11:00 2\nmetrostroi_time_edit 12 13 1") + return + end + + if not Metrostroi.CodePoints[id] then + print("Codepoint at "..id.." id is not found!") + return + end + + local afterMid = v1 > v2 + if afterMid then + local v = v1 + v1 = v2 + v2 = v + end + local points = checkTime(v1,v2,afterMid,id) + if not points then return end + if afterMid then + points[1] = v2 + points[2] = v1 + points[3] = val + else + points[1] = v1 + points[2] = v2 + points[3] = val + end + table.sort(Metrostroi.CodePoints,function(a,b) return a[2] < b[2] end) + printArray(id) + print("Edited id "..id) +end,nil,"Edits an exist codepoint. metrostroi_time_edit to more info.") + +concommand.Add("metrostroi_time_remove",function(ply,_,_,fargs) + if IsValid(ply) then return end + local id = tonumber(fargs) + if not id then + print("metrostroi_time_remove usage:\nEnter codepoint id to remove it\nExamples:\nmetrostroi_time_remove 2") + return + end + if not Metrostroi.CodePoints[id] then + print("Codepoint at "..id.." id is not found!") + return + end + table.remove(Metrostroi.CodePoints,id) + table.sort(Metrostroi.CodePoints,function(a,b) return a[2] < b[2] end) + + printArray(id-1) + print("Removed id "..id) +end,nil,"Removes an exist codepoint. metrostroi_time_remove to more info.") + +concommand.Add("metrostroi_time_clear",function(ply,_,_,fargs) + if IsValid(ply) then return end + Metrostroi.CodePoints = {} + printArray() + print("Codepoints array cleared ") +end,nil,"Fully clears codepoint array.") + +concommand.Add("metrostroi_time_reset",function(ply,_,_,fargs) + if IsValid(ply) then return end + Metrostroi.CodePoints = { + {23,1,0.2}, + {5.5,8.5,3}, + {10,13,1}, + {16,18,3}, + {20.5,22.5,0.5}, + } + printArray() + print("Codepoints array cleared ") +end,nil,"Resets codepoint array to default.") + +function Metrostroi.LoadCodepoints() + local arrayData = file.Read("metrostroi_data/time_codepoints.txt") + local arr + if arrayData then + arr = {} + + for v1,v2,val in string.gmatch(arrayData,"([^%s]+)%s*([^%s]+)%s*([^\n\r]+)") do + v1,v2,val = tonumberVar(v1,v2,val) + if not v1 or not v2 or not val then + arr = false + break + end + table.insert(arr,{v1,v2,val}) + end + end + if arr then + --table.sort(arr,function(a,b) return a[2] < b[2] end) + local good = true + for i,point in ipairs(arr) do + if point[1] > point[2] and not checkTime(point[2],point[1],true,i,arr) or point[1] < point[2] and not checkTime(point[1],point[2],false,i,arr) then + good = false + break + end + end + if good then + Metrostroi.CodePoints = arr + print("Metrostroi: Loaded time codepoints") + return + end + end + Metrostroi.CodePoints = { + {23,1,0.2}, + {5.5,8.5,3}, + {10,13,1}, + {16,18,3}, + {20.5,22.5,0.5}, + } + print("Metrostroi: Loaded default time codepoints") +end +function Metrostroi.SaveCodepoints() + if not file.Exists("metrostroi_data","DATA") then + file.CreateDir("metrostroi_data") + end + + local arrayData = "" + for i,v in ipairs(Metrostroi.CodePoints) do + arrayData = arrayData..Format("%f %f %f\n",v[1],v[2],v[3]) + end + file.Write("metrostroi_data/time_codepoints.txt",arrayData) + print("Metrostroi: Saved time codepoints") +end +Metrostroi.LoadCodepoints() +concommand.Add("metrostroi_time_save", function(ply, _, args) + if IsValid(ply) then return end + Metrostroi.SaveCodepoints() +end,nil,"Save current codepoint array.") + +concommand.Add("metrostroi_time_load", function(ply, _, args) + if IsValid(ply) then return end + Metrostroi.LoadCodepoints() +end,nil,"Load current codepoint array.") + +local function getScale() + if C_TimeOld:GetBool() then + Metrostroi.PassengersScale = CV_PassScale:GetFloat() + else + Metrostroi.PassengersScale = Metrostroi.GetPassengersScale(Metrostroi.GetSyncTime()%86400/3600) + end +end +timer.Create("PassScaleChecker", 10, 0, getScale) +getScale() +cvars.AddChangeCallback("metrostroi_time_old",getScale,"PassScaleChecker") \ No newline at end of file diff --git a/lua/metrostroi/sh_util.lua b/lua/metrostroi/sh_util.lua new file mode 100644 index 0000000..43fb41a --- /dev/null +++ b/lua/metrostroi/sh_util.lua @@ -0,0 +1,145 @@ +function Metrostroi.VectorAngle(v,v1,v2) + local vec1 = (v1-v):GetNormalized() + local vec2 = (v2-v):GetNormalized() + return math.deg(math.acos(vec1:Dot(vec2))) +end + +function Metrostroi.GetLowVal(...) + local valID,val + for k,v in pairs{...} do + if v and (not val or v < val) then + valID = k + val = v + end + end + return valID,val +end + +if not math.InRange then + function math.InRangeXY(x,y,px1,py1,px2,py2) + return (px1 < x and x < px2) and (py1 < y and y < py2) + end + function math.InRangeXYR(x,y,px,py,pw,ph) + return (px < x and x < px+pw) and (py < y and y < py+ph) + end + function math.InRangeXYRC(x,y,px,py,pw,ph) + local hpw,hph = pw/2,ph/2 + return (px-hpw < x and x < px+hpw) and (py-hph < y and y < py+hph) + end +end + +function Metrostroi.SortInSpawner(ent,id,name) + if not ent.Spawner then return end + local spawnerLine + for _,var in ipairs(ent.Spawner) do + if var[1] == id and type(var[4]) == "table" then + spawnerLine = var + if not spawnerLine.original then + spawnerLine.original = table.Copy(var[4]) + spawnerLine.custom = {} + end + break + end + end + if not spawnerLine then return end + + local retID = table.KeyFromValue(spawnerLine[4],name) + if not retID then + table.insert(spawnerLine.custom,name) + table.sort(spawnerLine.custom) + spawnerLine[4] = {} + table.Add(spawnerLine[4],spawnerLine.original) + table.Add(spawnerLine[4],spawnerLine.custom) + retID = table.KeyFromValue(spawnerLine[4],name) + end + return retID,#spawnerLine[4] +end + + + +--CHECK ME +Metrostroi.PatchedENTCache = Metrostroi.PatchedENTCache or {} +local MetrostroiENTCache = Metrostroi.PatchedENTCache + +local function updateMeta() + local meta = table.Copy(FindMetaTable("Entity")) + function meta:__index( key ) + --__index function patch, because builtin function have shit with :GetTable, + --which is slow, so i precache GetTable's result and use cached version of it + local val = meta[ key ] + if val ~= nil then return val end + if not MetrostroiENTCache[self] then return end --FIXME какова Ñ…ÑƒÑ Ñука, почему оно ÑтановитÑÑ Ð½ÐµÐ²Ð°Ð»Ð¸Ð´Ð½Ñ‹Ð¼ :AAAA: + val = MetrostroiENTCache[self][key] + if val ~= nil then return val end + if key == "Owner" then return meta.GetOwner(self) end + end + Metrostroi.PatchedMetatable = meta +end +hook.Add("OnGamemodeLoaded","MetrostroiOptimisationPatch",updateMeta) +updateMeta() + +timer.Create("MetrostroiCacheWatchdog", 1, 0, function() + for ent in pairs(MetrostroiENTCache) do + if not IsValid(ent) then + MetrostroiENTCache[ent] = nil + print("Cleared cache",ent) + end + end +end) + +function Metrostroi.OptimisationPatch(ent) + if true or ent then + --[[MetrostroiENTCache[ent] = ent:GetTable() + debug.setmetatable(ent,Metrostroi.PatchedMetatable) + print(tostring(ent).." patched...")]] + return + end + if not ENT then error("This function must be runned at the end of entity initialisation") end + if not ENT.Initialize then error("Can't get ENT.Initialize. Maybe you running function too early?") end + print(ENT.Folder.." added to patched entities...") + + + ENT.MetrostroiUnPatchedInitialize = ENT.Initialize + ENT.Initialize = function(self,...) + --[[local jitEnabled = jit.status() + print(jitEnabled and "JIT was enabled" or "JIT was disabled") + jit.on() + local x + local arr = self:GetTable() + for i=1,1000000 do + arr["i1"..i] = i*2 + arr["i2"..i] = i*2 + arr["i3"..i] = i*2 + end + local time = SysTime() + for i=1,1000000 do + x = self["i3"..i]--*self["i3"..i]/self["i3"..i]^self["i3"..i] + end + local elapsed1 = SysTime()-time + print("Before patch:"..elapsed1) + + local time = SysTime() + for i=1,1000000 do + x = arr["i2"..i]--*arr["i3"..i]/self["i3"..i]^self["i3"..i] + end + local elapsed3 = SysTime()-time + print("Direct access:"..elapsed3) + + __MetrostroiENTCache[self] = self:GetTable() + debug.setmetatable(self,Metrostroi.PatchedMetatable) + local time = SysTime() + for i=1,1000000 do + x = self["i1"..i]--*self["i3"..i]/self["i3"..i]^self["i3"..i] + end + local elapsed2 = SysTime()-time + print("After patch:"..elapsed2) + + print(Format("Patch is faster by %d%%\nPatch is faster than direct access by %d%%",elapsed1/elapsed2*100,elapsed3/elapsed2*100)) + print("BASE",getmetatable(self)) + jit.on()]] + MetrostroiENTCache[self] = self:GetTable() + debug.setmetatable(self,Metrostroi.PatchedMetatable) + + return self:MetrostroiUnPatchedInitialize(...) + end +end \ No newline at end of file diff --git a/lua/metrostroi/skins/default.lua b/lua/metrostroi/skins/default.lua new file mode 100644 index 0000000..d202540 --- /dev/null +++ b/lua/metrostroi/skins/default.lua @@ -0,0 +1,1054 @@ +-------------------------------------------------------------------------------- +-- Add skins function +-- category - a skin category(pass, cab, train) +-- name - name of skin(must be unique) or skin table(table must have a name) +-- tbl - skin table +-- Skin table: +-- { +-- typ = "81-717_spb", (it's a gmod_subway_*(gmod_subway_81-717_spb)) +-- name = "NAME",(or you can send name to function) +-- textures = { +-- texture_name = "path_to_texture", +-- b01a = "myskin/mycoolskin", +-- } +-- } +-- List of trains and manufacturers: +-- 81-502 +-- 81-702 +-- 81-703 +-- 81-707 +-- 81-710 +-- 81-717_msk +-- 81-717_spb +-- 81-718 +-- 81-720 +-- 81-722 +-------------------------------------------------------------------------------- + +Metrostroi.AddSkin("train","Def_502Def",{ + name = "Default", + typ = "81-502", + postfunc = function(ent) + local bright = math.Rand(1,1.1) + local colType = math.Round(math.Rand(1,2)) + if colType == 1 then + ent:SetNW2Vector("BodyColor",Vector(bright,bright,bright-(0.1-0.4*math.random())*bright)) + else + ent:SetNW2Vector("BodyColor",Vector(bright-(0.1-0.4*math.random())*bright,bright,bright)) + end + end, + def=true, +}) +Metrostroi.AddSkin("pass","Def_502Def",{ + name = "Default", + typ = "81-502", + textures = {}, + def=true, +}) +Metrostroi.AddSkin("cab","Def_502Def",{ + name = "Default", + typ = "81-502", + textures = {}, + def=true, +}) +Metrostroi.AddSkin("train","Def_702",{ + name = "Green", + typ = "81-702", + textures = { + body_green = "models/metrostroi_train/81-702/body_green", + body = "models/metrostroi_train/81-702/body_green", + }, + postfunc = function(ent) + local bright = math.Rand(1,1.1) + local colType = math.Round(math.Rand(1,2)) + if colType == 1 then + ent:SetNW2Vector("BodyColor",Vector(bright,bright,bright-(0.1-0.4*math.random())*bright)) + else + ent:SetNW2Vector("BodyColor",Vector(bright,bright-(0.1-0.2*math.random())*bright,bright)) + end + end +}) +Metrostroi.AddSkin("train","Def_702Blue",{ + name = "Blue", + typ = "81-702", + textures = { + body_green = "models/metrostroi_train/81-702/body_blue", + body = "models/metrostroi_train/81-702/body_blue", + }, + postfunc = function(ent) + local bright = math.Rand(1,1.1) + local colType = math.Round(math.Rand(1,2)) + if colType == 1 then + ent:SetNW2Vector("BodyColor",Vector(bright,bright,bright-(0.1-0.4*math.random())*bright)) + else + ent:SetNW2Vector("BodyColor",Vector(bright-(0.1-0.4*math.random())*bright,bright,bright)) + end + end +}) +Metrostroi.AddSkin("train","Def_702Random",{ + name = "Random", + typ = "81-702", + func = function(ent) + local tbl = {} + for k,v in pairs(Metrostroi.Skins.train) do + if not v.norandom and v.typ == "81-702" and not v.norandom then + table.insert(tbl,k) + end + end + return table.Random(tbl) + end, + def=true, + norandom = true, +}) +Metrostroi.AddSkin("pass","Def_702Def",{ + name = "Default", + typ = "81-702", + textures = {}, + def=true, +}) +Metrostroi.AddSkin("cab","Def_702Def",{ + name = "Default", + typ = "81-702", + textures = {}, + def=true, +}) + +Metrostroi.AddSkin("train","Def_703L1",{ + name = "Line 1 (Blue)", + typ = "81-703", + textures = { + ["710_green3"] = "models/metrostroi_train/81-703/81-703_line1", + }, + postfunc = function(ent) + local bright = math.Rand(1,1.1) + local colType = math.Round(math.Rand(1,2)) + if colType == 1 then + ent:SetNW2Vector("BodyColor",Vector(bright,bright,bright-(0.1-0.4*math.random())*bright)) + else + ent:SetNW2Vector("BodyColor",Vector(bright-(0.1-0.4*1)*bright,bright,bright)) + end + end, + rnd = 1, +}) +Metrostroi.AddSkin("train","Def_703L2",{ + name = "Line 2 (Green)", + typ = "81-703", + textures = { + ["710_green3"] = "models/metrostroi_train/81-703/81-703_line2", + }, + postfunc = function(ent) + local bright = math.Rand(1,1.1) + local colType = math.Round(math.Rand(1,2)) + if colType == 1 then + ent:SetNW2Vector("BodyColor",Vector(bright,bright,bright-(0.1-0.3*math.random())*bright)) + else + ent:SetNW2Vector("BodyColor",Vector(bright,bright-(0.1-0.3*math.random())*bright,bright)) + end + end, + rnd = 1, +}) +Metrostroi.AddSkin("train","Def_703L3",{ + name = "Line 3 (Green)", + typ = "81-703", + textures = { + ["710_green3"] = "models/metrostroi_train/81-703/81-703_line3", + }, + postfunc = function(ent) + local bright = math.Rand(1,1.1) + local colType = math.Round(math.Rand(1,2)) + if colType == 1 then + ent:SetNW2Vector("BodyColor",Vector(bright,bright,bright-(0.1-0.3*math.random())*bright)) + else + ent:SetNW2Vector("BodyColor",Vector(bright,bright-(0.1-0.3*math.random())*bright,bright)) + end + end, + rnd = 1, +}) +Metrostroi.AddSkin("train","Def_703L4",{ + name = "Line 4 (Blue)", + typ = "81-703", + textures = { + ["710_green3"] = "models/metrostroi_train/81-703/81-703_line4", + }, + postfunc = function(ent) + local bright = math.Rand(1,1.1) + local colType = math.Round(math.Rand(1,2)) + if colType == 1 then + ent:SetNW2Vector("BodyColor",Vector(bright,bright,bright-(0.1-0.4*math.random())*bright)) + else + ent:SetNW2Vector("BodyColor",Vector(bright-(0.1-0.4*math.random())*bright,bright,bright)) + end + end, + rnd = 1, +}) +Metrostroi.AddSkin("train","Def_703SPB",{ + name = "SPB", + typ = "81-703", + textures = { + ["710_green3"] = "models/metrostroi_train/81-703/ema502_body", + }, + --[[ postfunc = function(ent) + local bright = math.Rand(1,1.1) + ent:SetNW2Vector("BodyColor",Vector(bright,bright,bright)) + local colType = math.Round(math.Rand(1,2)) + if colType == 1 then + ent:SetNW2Vector("BodyColor",Vector(bright,bright,bright-(0.1-0.3*math.random())*bright)) + else + ent:SetNW2Vector("BodyColor",Vector(bright,bright-(0.1-0.3*math.random())*bright,bright)) + end + end,]] +}) +Metrostroi.AddSkin("train","Def_703Random1",{ + name = "Random", + typ = "81-703", + func = function(ent) + local tbl = {} + for k,v in pairs(Metrostroi.Skins.train) do + if v.rnd==1 and v.typ == "81-703" and not v.norandom then + table.insert(tbl,k) + end + end + return table.Random(tbl) + end, + def=true, + norandom = true, +}) +Metrostroi.AddSkin("pass","Def_703Def",{ + name = "Default", + typ = "81-703", + textures = {}, + def=true, +}) +Metrostroi.AddSkin("cab","Def_703Def",{ + name = "Default", + typ = "81-703", + textures = {}, + def=true, +}) + + +Metrostroi.AddSkin("train","Def_710GR1",{ + name = "Line1 (Green)", + typ = "81-710", + textures = { + ["710_green3"] = "models/metrostroi_train/81-710/710_green1", + ["508t_green3"] = "models/metrostroi_train/81-710/508t_green1", + }, + postfunc = function(ent) + local bright = math.Rand(1,1.1) + local colType = math.Round(math.Rand(1,2)) + if colType == 1 then + ent:SetNW2Vector("BodyColor",Vector(bright,bright,bright-(0.1-0.3*math.random())*bright)) + else + ent:SetNW2Vector("BodyColor",Vector(bright,bright-(0.1-0.3*math.random())*bright,bright)) + end + end, + rnd = true, +}) +Metrostroi.AddSkin("train","Def_710GR2",{ + name = "Line 7 (Green)", + typ = "81-710", + textures = { + ["710_green3"] = "models/metrostroi_train/81-710/710_green2", + ["508t_green3"] = "models/metrostroi_train/81-710/508t_green2", + }, + postfunc = function(ent) + local bright = math.Rand(1,1.1) + local colType = math.Round(math.Rand(1,2)) + if colType == 1 then + ent:SetNW2Vector("BodyColor",Vector(bright,bright,bright-(0.1-0.3*math.random())*bright)) + else + ent:SetNW2Vector("BodyColor",Vector(bright,bright-(0.1-0.3*math.random())*bright,bright)) + end + end, + rnd = true, +}) +Metrostroi.AddSkin("train","Def_710BL1",{ + name = "Line 7 (Blue)", + typ = "81-710", + textures = { + ["710_green3"] = "models/metrostroi_train/81-710/710_blue", + ["508t_green3"] = "models/metrostroi_train/81-710/508t_blue", + }, + postfunc = function(ent) + local bright = math.Rand(1,1.1) + local colType = math.Round(math.Rand(1,2)) + if colType == 1 then + ent:SetNW2Vector("BodyColor",Vector(bright,bright,bright-(0.1-0.4*math.random())*bright)) + else + ent:SetNW2Vector("BodyColor",Vector(bright-(0.1-0.4*math.random())*bright,bright,bright)) + end + end, + rnd = true, +}) +Metrostroi.AddSkin("train","Def_710ev3",{ + name = "Budapest Ev3 (Blue)", + typ = "81-710", + textures = { + ["710_green3"] = "models/metrostroi_train/81-710/710_ev3", + ["508t_green3"] = "models/metrostroi_train/81-710/508t_ev3", + }, + postfunc = function(ent) + local bright = math.Rand(1,1.1) + local colType = math.Round(math.Rand(1,2)) + if colType == 1 then + ent:SetNW2Vector("BodyColor",Vector(bright,bright,bright-(0.1-0.3*math.random())*bright)) + else + ent:SetNW2Vector("BodyColor",Vector(bright,bright-(0.1-0.3*math.random())*bright,bright)) + end + end, + norandom = true, +}) +Metrostroi.AddSkin("train","Def_710ecs",{ + name = "Echs (81-709)", + typ = "81-710", + textures = { + ["710_green3"] = "models/metrostroi_train/81-710/710_echs", + ["508t_green3"] = "models/metrostroi_train/81-710/508t_echs", + }, + postfunc = function(ent) + local bright = math.Rand(1,1.1) + ent:SetNW2Vector("BodyColor",Vector(bright,bright,bright)) + end, + norandom = true, +}) +Metrostroi.AddSkin("train","Def_710Native",{ + name = "Line 7 (Dark)", + typ = "81-710", + textures = { + }, + postfunc = function(ent) + local bright = math.Rand(1,1.1) + local colType = math.Round(math.Rand(1,2)) + if colType == 1 then + ent:SetNW2Vector("BodyColor",Vector(bright,bright,bright-(0.1-0.4*math.random())*bright)) + else + ent:SetNW2Vector("BodyColor",Vector(bright-(0.1-0.4*math.random())*bright,bright,bright)) + end + end, + rnd = true, +}) +Metrostroi.AddSkin("train","Def_710Random",{ + name = "Random", + typ = "81-710", + func = function(ent) + local tbl = {} + for k,v in pairs(Metrostroi.Skins.train) do + if not v.norandom and v.typ == "81-710" and v.rnd then + table.insert(tbl,k) + end + end + local tex = table.Random(tbl) + return tex + end, + norandom = true, + def=true, +}) +---Eж3 Ñалоны +Metrostroi.AddSkin("pass","Def_710pass1",{ + name = "Green interior 1971", + typ = "81-710", + textures = { + ["int0"] = "models/metrostroi_train/81-710/int0_green", + ["kvkm"] = "models/metrostroi_train/81-710/kvkm_plastic", + }, + rnd=true, +}) +Metrostroi.AddSkin("pass","Def_710pass2",{ + name = "Wood 1980", + typ = "81-710", + textures = { + ["int0"] = "models/metrostroi_train/81-710/int0_wood", + ["kvkm"] = "models/metrostroi_train/81-710/kvkm_plastic", + }, + rnd=true, +}) + +Metrostroi.AddSkin("pass","Def_710pass3",{ + name = "Wood KVR", + typ = "81-710", + textures = { + ["int0"] = "models/metrostroi_train/81-710/int0_wood1", + ["kvkm"] = "models/metrostroi_train/81-710/kvkm_plastic", + }, + rnd=true, +}) + +Metrostroi.AddSkin("pass","Def_710pass4",{ + name = "Dark-wood interior", + typ = "81-710", + textures = { + ["int0"] = "models/metrostroi_train/81-710/int0_wood2", + }, + rnd=true, +}) + + +Metrostroi.AddSkin("pass","Def_710pass1",{ + name = "White plastic", + typ = "81-710", + textures = { + }, + rnd=true, +}) +Metrostroi.AddSkin("pass","Def_710Random",{ + name = "Random", + typ = "81-710", + func = function(ent) + local tbl = {} + for k,v in pairs(Metrostroi.Skins.pass) do + if not v.norandom and v.typ == "81-710" and v.rnd then + table.insert(tbl,k) + end + end + local tex = table.Random(tbl) + return tex + end, + norandom = true, + def=true, +}) +---Eж3 кабины +Metrostroi.AddSkin("cab","Def_710cab1",{ + name = "Wood", + typ = "81-710", + textures = { + ["cab"] = "models/metrostroi_train/81-710/cab_wood", + }, + rnd=true +}) +Metrostroi.AddSkin("cab","Def_710cab2",{ + name = "Classic", + typ = "81-710", + textures = {}, + rnd=true +}) +Metrostroi.AddSkin("cab","Def_710Random",{ + name = "Random", + typ = "81-710", + func = function(ent) + local tbl = {} + for k,v in pairs(Metrostroi.Skins.cab) do + if not v.norandom and v.typ == "81-710" and v.rnd then + table.insert(tbl,k) + end + end + local tex = table.Random(tbl) + return tex + end, + norandom = true, + def=true, +}) + + +--81-707 +Metrostroi.AddSkin("train","Def_707L1",{ + name = "Line1 (Blue)", + typ = "81-707", + textures = { + ["710_green3"] = "models/metrostroi_train/81-707/81-707_line1", + ["508t_green3"] = "models/metrostroi_train/81-710/81-509_line1", + }, + postfunc = function(ent) + local bright = math.Rand(1,1.1) + local colType = math.Round(math.Rand(1,2)) + if colType == 1 then + ent:SetNW2Vector("BodyColor",Vector(bright,bright,bright-(0.1-0.4*math.random())*bright)) + else + ent:SetNW2Vector("BodyColor",Vector(bright-(0.1-0.4*1)*bright,bright,bright)) + end + end +}) +Metrostroi.AddSkin("train","Def_707L2",{ + name = "Line2 (Green)", + typ = "81-707", + textures = { + ["710_green3"] = "models/metrostroi_train/81-707/81-707_line2", + ["508t_green3"] = "models/metrostroi_train/81-710/81-509_line2", + }, + postfunc = function(ent) + local bright = math.Rand(1,1.1) + local colType = math.Round(math.Rand(1,2)) + if colType == 1 then + ent:SetNW2Vector("BodyColor",Vector(bright,bright,bright-(0.1-0.3*math.random())*bright)) + else + ent:SetNW2Vector("BodyColor",Vector(bright,bright-(0.1-0.3*math.random())*bright,bright)) + end + end +}) +Metrostroi.AddSkin("train","Def_707L3",{ + name = "Line3 (Blue)", + typ = "81-707", + textures = { + ["710_green3"] = "models/metrostroi_train/81-707/81-707_line3", + ["508t_green3"] = "models/metrostroi_train/81-710/81-509_line3", + }, + postfunc = function(ent) + local bright = math.Rand(1,1.1) + local colType = math.Round(math.Rand(1,2)) + if colType == 1 then + ent:SetNW2Vector("BodyColor",Vector(bright,bright,bright-(0.1-0.3*math.random())*bright)) + else + ent:SetNW2Vector("BodyColor",Vector(bright,bright-(0.1-0.3*math.random())*bright,bright)) + end + end +}) +Metrostroi.AddSkin("train","Def_707L4",{ + name = "Line4 (Blue)", + typ = "81-707", + textures = { + ["710_green3"] = "models/metrostroi_train/81-707/81-707_line4", + ["508t_green3"] = "models/metrostroi_train/81-710/81-509_line4", + }, + postfunc = function(ent) + local bright = math.Rand(1,1.1) + local colType = math.Round(math.Rand(1,2)) + if colType == 1 then + ent:SetNW2Vector("BodyColor",Vector(bright,bright,bright-(0.1-0.4*math.random())*bright)) + else + ent:SetNW2Vector("BodyColor",Vector(bright-(0.1-0.4*math.random())*bright,bright,bright)) + end + end +}) +Metrostroi.AddSkin("train","Def_707Random",{ + name = "Random", + typ = "81-707", + func = function(ent) + local tbl = {} + for k,v in pairs(Metrostroi.Skins.train) do + if not v.norandom and v.typ == "81-707" then + table.insert(tbl,k) + end + end + local tex = table.Random(tbl) + return tex + end, + norandom = true, + def=true, +}) +Metrostroi.AddSkin("train","Def_710M1",{ + name = "Budapest Ev (Dark Blue)", + typ = "81-710", + textures = { + ["710_green3"] = "models/metrostroi_train/81-707/81-707_m1", + ["508t_green3"] = "models/metrostroi_train/81-710/81-509_m1", + }, + postfunc = function(ent) + local bright = math.Rand(1,1.1) + local colType = math.Round(math.Rand(1,3)) + if colType == 1 then + ent:SetNW2Vector("BodyColor",Vector(bright,bright,bright-(0.1-0.3*math.random())*bright)) + elseif colType == 2 then + ent:SetNW2Vector("BodyColor",Vector(bright,bright-(0.1-0.3*math.random())*bright,bright)) + else + ent:SetNW2Vector("BodyColor",Vector(bright-(0.1-0.3*math.random())*bright,bright,bright)) + end + end, + norandom = true, +}) +---Eж и Еж1 Ñалоны +Metrostroi.AddSkin("pass","Def_707pass2",{ + name = "Blue interior 1970", + typ = "81-707", + textures = { + ["int0"] = "models/metrostroi_train/81-710/int0_blue", + } +}) + +Metrostroi.AddSkin("pass","Def_707pass3",{ + name = "Green interior 1971", + typ = "81-707", + textures = { + ["int0"] = "models/metrostroi_train/81-710/int0_green", + }, + norandom = true, +}) + +Metrostroi.AddSkin("pass","Def_707pass4",{ + name = "Wood interior 1980", + typ = "81-707", + textures = { + ["int0"] = "models/metrostroi_train/81-710/int0_wood", + } +}) + +Metrostroi.AddSkin("pass","Def_707pass5",{ + name = "Wood interior classic", + typ = "81-707", + textures = { + ["int0"] = "models/metrostroi_train/81-710/int0_wood1", + } +}) + +Metrostroi.AddSkin("pass","Def_707pass6",{ + name = "Dark Wood 1990", + typ = "81-707", + textures = { + ["int0"] = "models/metrostroi_train/81-710/int0_wood2", + } +}) + +Metrostroi.AddSkin("pass","Def_707pass1",{ + name = "White plastic 1972", + typ = "81-707", + textures = { + } +}) + +Metrostroi.AddSkin("pass","Def_707Random",{ + name = "Random", + typ = "81-707", + func = function(ent) + local tbl = {} + for k,v in pairs(Metrostroi.Skins.pass) do + if not v.norandom and v.typ == "81-707" and k ~= "Def_707Random" then + table.insert(tbl,k) + end + end + local tex = table.Random(tbl) + return tex + end, + def=true, +}) +Metrostroi.AddSkin("cab","Def_707Def",{ + name = "Default", + typ = "81-707", + textures = {}, + def=true, +}) + + + +Metrostroi.AddSkin("train","Def_717MSKClassic1",{ + name = "Line 1", + typ = "81-717_msk", + textures = { + ["717_classic1"] = "models/metrostroi_train/81-717/717_classic1", + ["717_kvr"] = "models/metrostroi_train/81-717/717_classic1", + }, + random = true, + postfunc = function(ent) + local bright = math.Rand(1,1.1) + local colType = 2--math.Round(math.Rand(1,2)) + if colType == 1 then + ent:SetNW2Vector("BodyColor",Vector(bright,bright,bright-(0.1-0.2*math.random())*bright)) + else + ent:SetNW2Vector("BodyColor",Vector(bright-(0.05-0.2*math.random())*bright,bright,bright)) + end + end +}) +Metrostroi.AddSkin("train","Def_717MSKClassic3",{ + name = "Line 5", + typ = "81-717_msk", + textures = { + ["717_classic1"] = "models/metrostroi_train/81-717/717_classic3", + ["717_kvr"] = "models/metrostroi_train/81-717/717_classic3", + }, + random = true, + postfunc = function(ent) + local bright = math.Rand(1,1.1) + ent:SetNW2Vector("BodyColor",Vector(bright,bright,bright-(0.05-0.2*math.random())*bright)) + end, + def=true, +}) +Metrostroi.AddSkin("pass","Def_717MSKBlue",{ + name = "Blue interior", + typ = "81-717_msk", + textures = { + color_blue = "models/metrostroi_train/81-717/color_blue", + }, + random = true, +}) +Metrostroi.AddSkin("pass","Def_717MSKWhite",{ + name = "White interior", + typ = "81-717_msk", + textures = { + color_blue = "models/metrostroi_train/81-717/color_white", + }, + random = true, +}) +Metrostroi.AddSkin("pass","Def_717MSKWood",{ + name = "Wood interior 1", + typ = "81-717_msk", + textures = { + color_blue = "models/metrostroi_train/81-717/color_wood", + }, + random = true, +}) +Metrostroi.AddSkin("pass","Def_717MSKWood2",{ + name = "Wood interior 2", + typ = "81-717_msk", + textures = { + color_blue = "models/metrostroi_train/81-717/color_wood2", + }, + random = true, +}) + +Metrostroi.AddSkin("pass","Def_717MSKWood4",{ + name = "Wood interior 3", + typ = "81-717_msk", + textures = { + color_blue = "models/metrostroi_train/81-717/color_wood4", + }, + random = true, +}) + +Metrostroi.AddSkin("pass","Def_717MSKWood3",{ + name = "Light-Wood interior", + typ = "81-717_msk", + textures = { + color_blue = "models/metrostroi_train/81-717/color_wood3", + }, + random = true, +}) +Metrostroi.AddSkin("train","Def_717Random",{ + name = "Random", + typ = "81-717_msk", + func = function(ent) + local tbl = {} + for k,v in pairs(Metrostroi.Skins.train) do + if v.typ == "81-717_msk" and v.random then + table.insert(tbl,k) + end + end + return table.Random(tbl) + end, + def=true, +}) + +Metrostroi.AddSkin("cab","Def_ClassicG",{ + name = "Variant 1",--"Classic + Gray body", + typ = "81-717_msk", + textures = { + p_m_classic = "metrostroi_train/81-717/pult/p_m_classic", + p_b_gray = "models/metrostroi_train/81-717/pult/p_b_gray", + }, + def=true, +}) +Metrostroi.AddSkin("cab","Def_ClassicY",{ + name = "Variant 2",--"Classic + Yellow body", + typ = "81-717_msk", + textures = { + p_m_classic = "metrostroi_train/81-717/pult/p_m_classic", + p_b_gray = "models/metrostroi_train/81-717/pult/p_b_yellow", + }, + def=true, +}) +Metrostroi.AddSkin("cab","Def_HammeriteG",{ + name = "Variant 3",--"Hammerite + Gray body", + typ = "81-717_msk", + textures = { + p_m_classic = "models/metrostroi_train/81-717/pult/pult_hammerite", + p_b_gray = "models/metrostroi_train/81-717/pult/p_b_gray", + }, + def=true, +}) +Metrostroi.AddSkin("cab","Def_HammeriteY",{ + name = "Variant 4",--"Hammerite + Yellow body", + typ = "81-717_msk", + textures = { + p_m_classic = "models/metrostroi_train/81-717/pult/pult_hammerite", + p_b_gray = "models/metrostroi_train/81-717/pult/p_b_yellow", + }, + def=true, +}) + +Metrostroi.AddSkin("train","Def_717SPBDef",{ + name = "Default", + typ = "81-717_spb", + textures = { + ["717_kvr"] = "models/metrostroi_train/81-717/717_kvr", + }, + def=true, +}) +Metrostroi.AddSkin("train","Def_717SPBWDef",{ + name = "Default w. white doors", + typ = "81-717_spb", + textures = { + ["717_kvr"] = "models/metrostroi_train/81-717/skins/whitedoors", + }, + def=true, +}) + +Metrostroi.AddSkin("pass","Def_717SPBWhite",{ + name = "White interior", + typ = "81-717_spb", + textures = { + color_blue = "models/metrostroi_train/81-717/skins/color_white", + interior_mvm = "models/metrostroi_train/81-717/interior_spb", + }, +}) +Metrostroi.AddSkin("pass","Def_717SPBWhite2",{ + name = "White interior (KVR)", + typ = "81-717_spb", + textures = { + color_blue = "models/metrostroi_train/81-717/skins/color_white", + interior_mvm = "models/metrostroi_train/81-717/skins/interior_spb3", + }, +}) + +Metrostroi.AddSkin("pass","Def_717SPBCyanF",{ + name = "Cyan interior full", + typ = "81-717_spb", + textures = { + color_blue = "models/metrostroi_train/81-717/skins/color_cian_full", + interior_mvm = "models/metrostroi_train/81-717/skins/interior_spb"--[[..floor]],--ГЛЕб!!! флур=1 - дефолт, флур=2 -пиздаредко, запили рандом Ñ Ð²ÐµÑ€Ð¾ÑтноÑтью в не более 10% Ð´Ð»Ñ Ñ„Ð»ÑƒÑ€2 + }, +}) +for i=1,5 do + Metrostroi.AddSkin("pass","Def_717SPBCyanP"..i,{ + name = "Cyan interior partially"..i, + typ = "81-717_spb", + textures = { + color_blue = "models/metrostroi_train/81-717/skins/color_cian_partly"..i, + interior_mvm = "models/metrostroi_train/81-717/skins/interior_spb"--[[..floor]],--ГЛЕб!!! флур=1 - дефолт, флур=2 -пиздаредко, запили рандом Ñ Ð²ÐµÑ€Ð¾ÑтноÑтью в не более 10% Ð´Ð»Ñ Ñ„Ð»ÑƒÑ€2 + }, + }) +end +Metrostroi.AddSkin("pass","Def_717SPBGreenF",{ + name = "Green interior full", + typ = "81-717_spb", + textures = { + color_blue = "models/metrostroi_train/81-717/skins/color_green_full", + interior_mvm = "models/metrostroi_train/81-717/skins/interior_spb", + }, +}) +for i=1,6 do + Metrostroi.AddSkin("pass","Def_717SPBGreenP"..i,{ + name = "Green interior partially"..i, + typ = "81-717_spb", + textures = { + color_blue = "models/metrostroi_train/81-717/skins/color_green_partly"..i, + interior_mvm = "models/metrostroi_train/81-717/skins/interior_spb", + }, + }) +end + +Metrostroi.AddSkin("pass","Def_717SPBWoodDark",{ + name = "Dark-Wood interior", + typ = "81-717_spb", + textures = { + color_blue = "models/metrostroi_train/81-717/skins/color_wood_dark", + interior_mvm = "models/metrostroi_train/81-717/skins/interior_spb", + }, +}) + +Metrostroi.AddSkin("pass","Def_717SPBWoodLight1",{ + name = "Light-Wood, dark ceiling", + typ = "81-717_spb", + textures = { + color_blue = "models/metrostroi_train/81-717/skins/color_wood_light1", + interior_mvm = "models/metrostroi_train/81-717/skins/interior_spb", + }, +}) +Metrostroi.AddSkin("pass","Def_717SPBWoodLight2",{ + name = "Light-Wood, white ceiling", + typ = "81-717_spb", + textures = { + color_blue = "models/metrostroi_train/81-717/skins/color_wood_light2", + interior_mvm = "models/metrostroi_train/81-717/skins/interior_spb", + }, +}) + + +Metrostroi.AddSkin("cab","Def_YellowOY",{ + name = "Yellow old + Yellow body", + typ = "81-717_spb", + textures = { + pult_panel_yellow_old = "models/metrostroi_train/81-717/pult/pult_panel_yellow_old", + p_b_yellow = "models/metrostroi_train/81-717/pult/p_b_yellow", + }, + def=true, +}) +Metrostroi.AddSkin("cab","Def_YellowOG",{ + name = "Yellow old + Gray body", + typ = "81-717_spb", + textures = { + pult_panel_yellow_old = "models/metrostroi_train/81-717/pult/pult_panel_yellow_old", + p_b_yellow = "models/metrostroi_train/81-717/pult/p_b_gray_spb", + }, + def=true, +}) +--[[ +Metrostroi.AddSkin("cab","Def_YellowNY",{ + name = "Yellow new + Yellow body", + typ = "81-717_spb", + textures = { + pult_panel_yellow_old = "models/metrostroi_train/81-717/pult/pult_panel_yellow_new", + p_b_yellow = "models/metrostroi_train/81-717/pult/p_b_yellow", + }, +}) +Metrostroi.AddSkin("cab","Def_YellowNG",{ + name = "Yellow new + Gray body", + typ = "81-717_spb", + textures = { + pult_panel_yellow_old = "models/metrostroi_train/81-717/pult/pult_panel_yellow_new", + p_b_yellow = "models/metrostroi_train/81-717/pult/p_b_gray_spb", + }, +})]] +Metrostroi.AddSkin("cab","Def_Gray",{ + name = "Gray", + typ = "81-717_spb", + textures = { + pult_panel_yellow_old = "models/metrostroi_train/81-717/pult/pult_panel_spb_gray", + p_b_yellow = "models/metrostroi_train/81-717/pult/p_b_gray_spb", + p_ars_yellow = "models/metrostroi_train/81-717/pult/p_ars", + }, + puav=true, +}) +Metrostroi.AddSkin("cab","Def_Yellow",{ + name = "Yellow + Yellow body", + typ = "81-717_spb", + textures = { + pult_panel_yellow_old = "models/metrostroi_train/81-717/pult/pult_panel_yellow_old", + p_b_yellow = "models/metrostroi_train/81-717/pult/p_b_yellow", + p_ars_yellow = "models/metrostroi_train/81-717/pult/p_ars_yellow", + }, + puav=true, +}) +Metrostroi.AddSkin("cab","Def_Blue",{ + name = "Blue", + typ = "81-717_spb", + textures = { + pult_panel_yellow_old = "models/metrostroi_train/81-717/pult/pult_panel_spb_blue", + p_b_yellow = "models/metrostroi_train/81-717/pult/p_b_gray_blue", + p_ars_yellow = "models/metrostroi_train/81-717/pult/p_ars_blue", + }, + paksdo=true, +}) +Metrostroi.AddSkin("cab","Def_Yellow2",{ + name = "Yellow KSD", + typ = "81-717_spb", + textures = { + pult_panel_yellow_old = "models/metrostroi_train/81-717/pult/pult_panel_spb_blue", + p_b_yellow = "models/metrostroi_train/81-717/pult/p_b_gray", + p_ars_yellow = "models/metrostroi_train/81-717/pult/p_ars_yellow", + }, + paksdn=true, +}) +Metrostroi.AddSkin("cab","Def_PUAV",{ + name = "PUAV", + typ = "81-717_spb", + func = function(ent) + local tbl = {} + for k,v in pairs(Metrostroi.Skins.cab) do + if v.typ == "81-717_spb" and v.puav then + table.insert(tbl,k) + end + end + return table.Random(tbl) + end, +}) +Metrostroi.AddSkin("cab","Def_PAKSD",{ + name = "PAKSD", + typ = "81-717_spb", + func = function(ent) + local tbl = {} + for k,v in pairs(Metrostroi.Skins.cab) do + if v.typ == "81-717_spb" and v.paksdo then + table.insert(tbl,k) + end + end + return table.Random(tbl) + end, +}) +Metrostroi.AddSkin("cab","Def_PAKSD2",{ + name = "PAKSD", + typ = "81-717_spb", + func = function(ent) + local tbl = {} + for k,v in pairs(Metrostroi.Skins.cab) do + if v.typ == "81-717_spb" and v.paksdn then + table.insert(tbl,k) + end + end + return table.Random(tbl) + end, +}) + + +Metrostroi.AddSkin("train","Def_718Def",{ + name = "Default", + typ = "81-718", + textures = {}, + rnd=true, +}) +Metrostroi.AddSkin("pass","Def_718Wood2",{ + name = "Wood", + typ = "81-718", + textures = { + color_blue = "models/metrostroi_train/81-717/color_wood3", + }, + rnd=true, +}) + + +Metrostroi.AddSkin("cab","Def_708Def1",{ + name = "White cab", + typ = "81-718", + textures = { + ["1003"] = "", + ["1006"] = "", + }, + default = true +}) + +Metrostroi.AddSkin("cab","Def2",{ + name = "Red cab", + typ = "81-718", + textures = { + ["1003"] = "models/metrostroi_train/81_718/1003_red", + ["1006"] = "models/metrostroi_train/81_718/1006_red", + }, +}) +Metrostroi.AddSkin("cab","Def_718Random",{ + name = "Random", + typ = "81-718", + func = function(ent) + local tbl = {} + for k,v in pairs(Metrostroi.Skins.cab) do + if v.typ == "81-718" and v.random then + table.insert(tbl,k) + end + end + return table.Random(tbl) + end, + def=true, +}) + + +Metrostroi.AddSkin("train","Def_720Def",{ + name = "Default", + typ = "81-720", + texures = {}, + def=true, +}) +Metrostroi.AddSkin("pass","Def_720Def",{ + name = "Default", + typ = "81-720", + textures = {}, + def=true, +}) +Metrostroi.AddSkin("cab","Def_720Def",{ + name = "Default", + typ = "81-720", + textures = {}, + def=true, +}) +Metrostroi.AddSkin("train","Def_722Def",{ + name = "Default", + typ = "81-722", + textures = {}, + def=true, +}) +Metrostroi.AddSkin("pass","Def_722Def",{ + name = "Default", + typ = "81-722", + textures = {}, + def=true, +}) +Metrostroi.AddSkin("cab","Def_722Def",{ + name = "Default", + typ = "81-722", + textures = {}, + def=true, +}) \ No newline at end of file diff --git a/lua/metrostroi/sv_centralisation.lua b/lua/metrostroi/sv_centralisation.lua new file mode 100644 index 0000000..9d6ba5f --- /dev/null +++ b/lua/metrostroi/sv_centralisation.lua @@ -0,0 +1,315 @@ + +local function GetOccupation(tbl) + if not tbl then return end + for sID,signame in ipairs(tbl) do + if signame[1] == "@" then + local trigger = Metrostroi.ARMGet(signame:sub(2,-1), "trigger") + --if not trigger then print(signame) end + if not trigger or trigger.ARMTriggered then + return true + end + elseif signame ~= "" then + local signal = Metrostroi.ARMGet(signame, "signal") + if not signal or signal.OccupiedBy and signal.OccupiedBy ~= signal then + return true + end + end + end + return false +end + +function Metrostroi.CentralisationPrepareRoute(station,route) + if not Metrostroi.ARMTable[station].routes then Metrostroi.ARMTable[station].routes = {} end + local Routes = Metrostroi.ARMTable[station].routes + local stationT = Metrostroi.ARMConfigGenerated[station] + if not Routes[route] then + local segments = route.route + for i,segm in pairs(segments) do + if segm.inroute then + RunConsoleCommand("say",Format("Station %d. Error building route %s, because there is already another route",station,route)) + return false + end + if route.ignores and (not route.ignores or not route.ignores[i]) and segm.occupied then + RunConsoleCommand("say",Format("Station %d. Error building route %s. Route occupied!",station,route)) + return false + end + end + if route.checks then + for i,segm in pairs(route.checks) do + if segm.inroute then + RunConsoleCommand("say",Format("Station %d. Error building route %s, because there is already another route on protective segments",station,route)) + return false + end + if route.ignores and (not route.ignores or not route.ignores[i]) and segm.occupied then + RunConsoleCommand("say",Format("Station %d. Error building route %s. Protective segments occupied!",station,route)) + return false + end + end + end + + for _,segm in pairs(segments) do + segm.inroute = true + end + Routes[route] = table.insert(Routes,route) + RunConsoleCommand("say",Format("Station %d. Added route %s with ID:%d",station,route,Routes[route])) + return true + end +end +local function CentralistationCalculateFreeBS(segm,dir,sigconf,pSeg,rccount) + if pSeg then + local signal = dir and segm.signal2 or not dir and segm.signal1 + if signal then + local ent = signal.ent + if not ent then return 1 end + local conf = sigconf[ent.Name] + --return (ent.FreeBSARM or ent.FreeBS or 0)+(conf and conf.bs or 1),ent + return (ent.FreeBSARM or ent.FreeBS or 0)+rccount,ent + end + end + rccount = (rccount or 0) + 1 + if not segm or segm.occupied then + return rccount + end + local alt,main = false,true + if segm.switch then + local switch = Metrostroi.ARMGet(segm.switch, "switch") + main = switch and switch.MainTrack and not switch.AlternateTrack + alt = switch and not switch.MainTrack and switch.AlternateTrack + if not alt and not main then return 0 end + end + + if pSeg and segm.next_a and (segm.next_a == pSeg and not alt or segm.next_m == pSeg and not main) then return 0 end + local segmM,segmA = segm.next_m,segm.next_a + local segmP = segm.prev + + + local mainM = segmM and (dir and segmM.x > segm.x or not dir and segmM.x < segm.x) + local mainP = segmP and (dir and segmP.x > segm.x or not dir and segmP.x < segm.x) + if mainM then + local next + if alt and segmA then next = segmA end + if main and segmM then next = segmM end + return CentralistationCalculateFreeBS(next,dir,sigconf,segm,rccount) + end + if segmP and mainP then + return CentralistationCalculateFreeBS(segmP,dir,sigconf,segm,rccount) + end +end +local function CentralisationSolveSignalLogic(signal,signalE,signalDir,station,segm) + if not signalE then return end + if station.signals and station.signals[signal] then + local sigconf = station.signals[signal] + signalE.ControllerLogic = station + local target,codes = "","" + local alt = false + local occupied = segm.occupied + if segm.switch then + local switch = Metrostroi.ARMGet(segm.switch, "switch") + local main = switch and switch.MainTrack and not switch.AlternateTrack + alt = switch and not switch.MainTrack and switch.AlternateTrack + if not alt and not main then occupied = true end + end + if alt then + --occupied = occupied or segm.next_a and GetOccupation(segm.next_a) + else + --occupied = occupied or segm.next_m and GetOccupation(segm.next_m) + end + + local route = sigconf.route + local free,nextSignal = CentralistationCalculateFreeBS(segm,signalDir,station.signals) + --print(free,signalE,signalE.Name) + local dir = route and route.dir + if route and dir ~= signalDir then + print(signalE.Name,dir ,signalDir) + route = nil + occupied = true + end + if sigconf.Mode == 1 then + if occupied then + target = sigconf.R + codes = "2" + elseif route then + if nextSignal then + local colors = nextSignal.Colors or "" + local segments = route[2] + --print(route) + local start = false + local specialS = sigconf.routes and sigconf.routes[route[1].name] + if free < (sigconf.bs or 1) then + target = sigconf.RY or sigconf.R + elseif route.mode == 3 then + target = sigconf.W + elseif colors:find("[rR]+") and colors:find("[yY]+") then + target = sigconf.Y or sigconf.YG or sigconf.RY or sigconf.R + elseif colors:find("[rR]+") then + target = sigconf.Y or sigconf.RY or sigconf.R + elseif colors:find("[ygYG]+[ygYG]+") or colors:find("[gwGW]+") then + target = sigconf.G or sigconf.YG or sigconf.Y or sigconf.RY or sigconf.R + elseif colors:find("[yY]+") then + target = sigconf.YG or sigconf.G or sigconf.Y or sigconf.RY or sigconf.R + else + target = sigconf.R + end + elseif route.mode == 3 then + target = sigconf.W + else + target = sigconf.R + end + else + if free and free < 1 then + target = sigconf.R or sigconf.RY or "" + else + target = sigconf.RY or sigconf.R + end + codes = "0" + end + signalE.Red = target==sigconf.R or target==sigconf.RY + signalE.AutoEnabled = signalE.AutoEnabled + else + + end + local sig = "" + for i=1,#target do + local id = tonumber(target[i]) + if not id then continue end + if #sig < id then sig = sig..string.rep("0",id-#sig) end + sig = string.SetChar(sig,tonumber(target[i]),target[i+1]=="b" and "2" or "1") + end + signalE.Sig = sig + signalE.FreeBSARM = occupied and 0 or free + signalE.FreeBS = math.ceil(signalE.FreeBSARM or 0) + --print(occupied,free,signalE.FreeBS) + --print(signalE.Colors,target,signalE.Sig) + end +end +local function CentralisationSolveRoutesLogic(stationID,station) + local Routes = Metrostroi.ARMTable[stationID].routes + local HasPrepared = true + for k,route in ipairs(Routes) do + local segments = route.route + local directions = route.directions + if route.prepared then + --HasPrepared = true + local done,occupiedN,halfroute = true--,100 + for segmID,segm in ipairs(segments) do + if segm.occupied then + if not occupiedN or occupiedN < segmID then occupiedN = segmID end + end + if segm.route then done = false end + if not segm.route then halfroute = true end + end + if occupiedN then + for segmID,segm in ipairs(segments) do + if segmID > occupiedN then break end + if segm.route == route then + segm.route = false + segm.inroute = false + local signal = route[3] and segm.signal2 or not route[3] and segm.signal1 + local sig = Metrostroi.ARMGet(signal and signal.name, "signal") + end + end + end + if done or halfroute and not occupiedN then + for _,segm in ipairs(segments) do + segm.inroute = false + segm.route = false + end + for i,signame in pairs(route.signals) do + if not station.signals[signame] then continue end + station.signals[signame].route = nil + end + RunConsoleCommand("say",Format("Station %d. Route %s(%d) has destroyed",stationID,route,Routes[route])) + table.remove(Routes,Routes[route]) + Routes[route] = nil + for i,v in pairs(Routes) do Routes[v] = i end + route.prepared = false + end + else + local Prepared = true + --Check for occupation + for i,segm in ipairs(segments) do + if route.ignores and not route.ignores[i] and segm.occupied then Prepared = false break end + if segm.route then Prepared = false break end + end + --If there is no occupation - check and prepare switches + if Prepared then + for segmID,segm in ipairs(segments) do + if not segm.switch then continue end + local switch = Metrostroi.ARMGet(segm.switch, "switch") + if not switch then continue end + local dir = directions[segmID] + + local main = switch and switch.MainTrack and not switch.AlternateTrack + local alt = switch and not switch.MainTrack and switch.AlternateTrack + --print(route[3],switch,dir) + if dir and main or not dir and alt or (not main and not alt) then + switch:SwitchTo(dir and "alt" or "main") + Prepared = false + print("Move",segmID,segm.switch,switch,dir and "alt" or "main") + end + if not main and not alt then Prepared = false end + end + end + if Prepared then + for k,segm in ipairs(segments) do + segm.route = route + local signal = route[3] and segm.signal2 or not route[3] and segm.signal1 + local sig = Metrostroi.ARMGet(signal and signal.name, "signal") + end + for i,signame in pairs(route.signals) do + if not station.signals[signame] then continue end + station.signals[signame].route = route + end + route.prepared = true + RunConsoleCommand("say",Format("Station %d. Route %s(%d) has assembled",stationID,route,Routes[route])) + end + end + end + return HasPrepared +end + +function Metrostroi.Centralisation() + if not Metrostroi.ARMConfigGenerated then return end + for stationID,station in pairs(Metrostroi.ARMConfigGenerated) do + --Route logic + local HasPrepared = CentralisationSolveRoutesLogic(stationID,station) + + for name, signal in pairs(station.signals) do + if signal.sig then + local ent = Metrostroi.ARMGet(name, "signal") + signal.sig.ent = ent + CentralisationSolveSignalLogic(name,ent,signal.sig.dir,station,signal.segm) + end + end + for segmID, segm in ipairs(station) do + segm.occupied = segm._occup or GetOccupation(segm.occup) or GetOccupation(segm.occupAlt) + if true then + if segm.switch then + local switch = Metrostroi.ARMGet(segm.switch, "switch") + local main = switch and switch.MainTrack and not switch.AlternateTrack + local alt = switch and not switch.MainTrack and switch.AlternateTrack + if switch and not segm.route and not segm.inroute and not segm.occupied and (alt or not main and not alt) then + switch:SwitchTo("main") + print("Reset",segm.switch,switch,segmID,segm.route) + end + end + --[[ if segm.signal1 then + local ent = Metrostroi.ARMGet(segm.signal1.name, "signal") + segm.signal1.ent = ent + CentralisationSolveSignalLogic(segm.signal1.name,ent,false,station,segm) + end + if segm.signal2 then + local ent = Metrostroi.ARMGet(segm.signal2.name, "signal") + segm.signal2.ent = ent + CentralisationSolveSignalLogic(segm.signal2.name,ent,true,station,segm) + end--]] + --[[ if segm.route and not HasPrepared then + segm.route = false + segm.inroute = false + end--]] + end + end + end +end + +timer.Create("metrostroi_centralisation",0.1,0,Metrostroi.Centralisation) \ No newline at end of file diff --git a/lua/metrostroi/sv_debug.lua b/lua/metrostroi/sv_debug.lua new file mode 100644 index 0000000..35fd630 --- /dev/null +++ b/lua/metrostroi/sv_debug.lua @@ -0,0 +1,126 @@ +-------------------------------------------------------------------------------- +-- Debug: spawn train on metrostroi +-------------------------------------------------------------------------------- +function Metrostroi.DebugTrain() + local base = Vector(1000.284180,-15152.133789,24.219715-170) + + local ent = ents.Create("gmod_subway_81-717") + ent:SetPos(base+0*Vector(-955,0,0)) + ent:SetAngles(Angle(0,180,0)) + ent:Spawn() + + local ent = ents.Create("gmod_subway_81-714") + ent:SetPos(base+1*Vector(-955,0,0)) + ent:SetAngles(Angle(0,180,0)) + ent:Spawn() + + local ent = ents.Create("gmod_subway_81-714") + ent:SetPos(base+2*Vector(-955,0,0)) + ent:SetAngles(Angle(0,180,0)) + ent:Spawn() + + local ent = ents.Create("gmod_subway_81-714") + ent:SetPos(base+3*Vector(-955,0,0)) + ent:SetAngles(Angle(0,180,0)) + ent:Spawn() + + local ent = ents.Create("gmod_subway_81-717") + ent:SetPos(base+4*Vector(-955,0,0)) + ent:SetAngles(Angle(0,0,0)) + ent:Spawn() +end +function Metrostroi.DebugTrain1() + local base = Vector(15131.00,-11900,-369.720795-170) + + local ent = ents.Create("gmod_subway_81-717") + ent:SetPos(base+0*Vector(0,-955,0)) + ent:SetAngles(Angle(0,270,0)) + ent:Spawn() + + local ent = ents.Create("gmod_subway_81-714") + ent:SetPos(base+1*Vector(0,-955,0)) + ent:SetAngles(Angle(0,270,0)) + ent:Spawn() + + local ent = ents.Create("gmod_subway_81-714") + ent:SetPos(base+2*Vector(0,-955,0)) + ent:SetAngles(Angle(0,270,0)) + ent:Spawn() + + local ent = ents.Create("gmod_subway_81-714") + ent:SetPos(base+3*Vector(0,-955,0)) + ent:SetAngles(Angle(0,270,0)) + ent:Spawn() + + local ent = ents.Create("gmod_subway_81-717") + ent:SetPos(base+4*Vector(0,-955,0)) + ent:SetAngles(Angle(0,90,0)) + ent:Spawn() +end + +function Metrostroi.DebugTrain2() + local base = Vector(14450.80,-11900,-369.720795-170) + + local ent = ents.Create("gmod_subway_81-717") + ent:SetPos(base+0*Vector(0,-955,0)) + ent:SetAngles(Angle(0,270,0)) + ent:Spawn() + + local ent = ents.Create("gmod_subway_81-714") + ent:SetPos(base+1*Vector(0,-955,0)) + ent:SetAngles(Angle(0,270,0)) + ent:Spawn() + + local ent = ents.Create("gmod_subway_81-714") + ent:SetPos(base+2*Vector(0,-955,0)) + ent:SetAngles(Angle(0,270,0)) + ent:Spawn() + + local ent = ents.Create("gmod_subway_81-714") + ent:SetPos(base+3*Vector(0,-955,0)) + ent:SetAngles(Angle(0,270,0)) + ent:Spawn() + + local ent = ents.Create("gmod_subway_81-717") + ent:SetPos(base+4*Vector(0,-955,0)) + ent:SetAngles(Angle(0,90,0)) + ent:Spawn() +end + +function Metrostroi.DebugTrain(base,ang) + base = base + Vector(0,0,-160) + + local ent = ents.Create("gmod_subway_81-717") + ent:SetPos(base+0*955*ang:Forward()) + ent:SetAngles(ang) + ent:Spawn() + + local ent = ents.Create("gmod_subway_81-714") + ent:SetPos(base+1*955*ang:Forward()) + ent:SetAngles(ang) + ent:Spawn() + + local ent = ents.Create("gmod_subway_81-714") + ent:SetPos(base+2*955*ang:Forward()) + ent:SetAngles(ang) + ent:Spawn() + + local ent = ents.Create("gmod_subway_81-714") + ent:SetPos(base+3*955*ang:Forward()) + ent:SetAngles(ang) + ent:Spawn() + + local ent = ents.Create("gmod_subway_81-717") + ent:SetPos(base+4*955*ang:Forward()) + ent:SetAngles(ang + Angle(0,180,0)) + ent:Spawn() +end + +function Metrostroi.SpawnDepot1(idx) + if (not idx) or (idx == 1) then Metrostroi.DebugTrain(Vector(-2235.816406,-7250.668457,-2486.183594),Angle(0,90-11.25,0)) end + if (not idx) or (idx == 2) then Metrostroi.DebugTrain(Vector(-2233.157715,-8258.770508,-2486.118652),Angle(0,90-11.25,0)) end + if (not idx) or (idx == 3) then Metrostroi.DebugTrain(Vector(-2231.008301,-9273.424805,-2486.197266),Angle(0,90-11.25,0)) end +end + +--Metrostroi.DebugTrain() +--Metrostroi.DebugTrain2() diff --git a/lua/metrostroi/sv_debugger.lua b/lua/metrostroi/sv_debugger.lua new file mode 100644 index 0000000..8ff68e0 --- /dev/null +++ b/lua/metrostroi/sv_debugger.lua @@ -0,0 +1,118 @@ +local Debugger = {} +Debugger.Clients = {} +Debugger.NameMap = {} +Debugger.EntVarCounts = {} + +util.AddNetworkString("metrostroi-debugger-dataupdate") +util.AddNetworkString("metrostroi-debugger-entremoved") +util.AddNetworkString("metrostroi-debugger-entnamemap") + + +if game.SinglePlayer() then + RunConsoleCommand("metrostroi_debugger_update_interval",0) +end --[[else --Lets not reset it every time on dedicated servers + RunConsoleCommand("metrostroi_debugger_update_interval",0.5) +end--]] + +local function SendNameMap(ply,ent) + net.Start("metrostroi-debugger-entnamemap") + net.WriteInt(ent:EntIndex(),16) + net.WriteTable(ent:GetDebugVars()) + if ply then + net.Send(ply) + else + net.Broadcast() + end +end + +--Add a new client to send an entities debugvars to +local function AddClient(ply,ent) + if not Debugger.Clients[ply] then + Debugger.Clients[ply]={} + end + if table.HasValue(Debugger.Clients[ply],ent) then return end + table.insert(Debugger.Clients[ply],ent) + +end + +local function RemoveEnt(ply,ent) + if ply and Debugger.Clients[ply] then + if ent then + table.RemoveByValue(Debugger.Clients[ply],ent) + else + Debugger.Clients[ply]=nil + end + else + for k,v in pairs(Debugger.Clients) do + table.RemoveByValue(v,ent) + end + end +end + +--Handler for adding new ents to listen to +local function cmdinithandler(ply,cmd,args,fullstring) + local ent = ply:GetEyeTrace().Entity + if not IsValid(ent) or not ent.GetDebugVars then return end + + AddClient(ply,ent) +end +concommand.Add("metrostroi_debugtrainsystems", cmdinithandler, nil, "Add aimed at entity to debugger") + +-- Automatically engage debugger for train owner +function Metrostroi.DebugTrain(train,ply) + if not ply then ply = train:GetOwner() end + if (not IsValid(train)) or (not IsValid(ply)) then return end + + AddClient(ply,train) +end + +local nextthink = 0 +local function think() + if CurTime() < nextthink then return end + nextthink = CurTime() + GetConVarNumber("metrostroi_debugger_update_interval") + --Loop over clients and their ents and send the collected data + + --Check for new entity variables + for ply,entlist in pairs(Debugger.Clients) do + for k,ent in pairs(entlist) do + local count = table.Count(ent:GetDebugVars()) + if Debugger.EntVarCounts[ent] ~= count then + SendNameMap(nil,ent) + Debugger.EntVarCounts[ent] = count + end + end + end + + --Send the bulk, nameless data + for ply,entlist in pairs(Debugger.Clients) do + + net.Start("metrostroi-debugger-dataupdate") + local count = table.Count(entlist) + net.WriteInt(count,8) + for k,ent in pairs(entlist) do + local entvars = ent:GetDebugVars() + local newtable = {} + + for k,v in SortedPairs(entvars) do + table.insert(newtable,v) + end + + net.WriteTable({ent:EntIndex(),newtable}) + end + net.Send(ply) + end + +end +hook.Add("Think","metrostroi-debugger-think",think) + +local function OnEntRemove(ent) + RemoveEnt(nil,ent) + + --Client doesn't get all removed ents, broadcast it manually to all + net.Start("metrostroi-debugger-entremoved") + net.WriteInt(ent:EntIndex(),16) + net.Broadcast() +end + +hook.Add("EntityRemoved","metrostroi-debugger-cleanup",OnEntRemove) +hook.Add("PlayerDisconnected","metrstroi-debugger-plycleanup",RemoveEnt) diff --git a/lua/metrostroi/sv_hs_layout.lua b/lua/metrostroi/sv_hs_layout.lua new file mode 100644 index 0000000..4144858 --- /dev/null +++ b/lua/metrostroi/sv_hs_layout.lua @@ -0,0 +1,959 @@ +Metrostroi.TrainHighspeedInterface = { +{ 0, "A1", "Open" }, +{ 1, "A1", "Close" }, +{ 2, "A1", "Set" }, +{ 3, "A1", "Toggle" }, +{ 4, "A1", "Value" }, +{ 5, "A10", "Open" }, +{ 6, "A10", "Close" }, +{ 7, "A10", "Set" }, +{ 8, "A10", "Toggle" }, +{ 9, "A10", "Value" }, +{ 10, "A12", "Open" }, +{ 11, "A12", "Close" }, +{ 12, "A12", "Set" }, +{ 13, "A12", "Toggle" }, +{ 14, "A12", "Value" }, +{ 15, "A13", "Open" }, +{ 16, "A13", "Close" }, +{ 17, "A13", "Set" }, +{ 18, "A13", "Toggle" }, +{ 19, "A13", "Value" }, +{ 20, "A14", "Open" }, +{ 21, "A14", "Close" }, +{ 22, "A14", "Set" }, +{ 23, "A14", "Toggle" }, +{ 24, "A14", "Value" }, +{ 25, "A16", "Open" }, +{ 26, "A16", "Close" }, +{ 27, "A16", "Set" }, +{ 28, "A16", "Toggle" }, +{ 29, "A16", "Value" }, +{ 30, "A17", "Open" }, +{ 31, "A17", "Close" }, +{ 32, "A17", "Set" }, +{ 33, "A17", "Toggle" }, +{ 34, "A17", "Value" }, +{ 35, "A2", "Open" }, +{ 36, "A2", "Close" }, +{ 37, "A2", "Set" }, +{ 38, "A2", "Toggle" }, +{ 39, "A2", "Value" }, +{ 40, "A20", "Open" }, +{ 41, "A20", "Close" }, +{ 42, "A20", "Set" }, +{ 43, "A20", "Toggle" }, +{ 44, "A20", "Value" }, +{ 45, "A21", "Open" }, +{ 46, "A21", "Close" }, +{ 47, "A21", "Set" }, +{ 48, "A21", "Toggle" }, +{ 49, "A21", "Value" }, +{ 50, "A22", "Open" }, +{ 51, "A22", "Close" }, +{ 52, "A22", "Set" }, +{ 53, "A22", "Toggle" }, +{ 54, "A22", "Value" }, +{ 55, "A23", "Open" }, +{ 56, "A23", "Close" }, +{ 57, "A23", "Set" }, +{ 58, "A23", "Toggle" }, +{ 59, "A23", "Value" }, +{ 60, "A24", "Open" }, +{ 61, "A24", "Close" }, +{ 62, "A24", "Set" }, +{ 63, "A24", "Toggle" }, +{ 64, "A24", "Value" }, +{ 65, "A25", "Open" }, +{ 66, "A25", "Close" }, +{ 67, "A25", "Set" }, +{ 68, "A25", "Toggle" }, +{ 69, "A25", "Value" }, +{ 70, "A27", "Open" }, +{ 71, "A27", "Close" }, +{ 72, "A27", "Set" }, +{ 73, "A27", "Toggle" }, +{ 74, "A27", "Value" }, +{ 75, "A29", "Open" }, +{ 76, "A29", "Close" }, +{ 77, "A29", "Set" }, +{ 78, "A29", "Toggle" }, +{ 79, "A29", "Value" }, +{ 80, "A3", "Open" }, +{ 81, "A3", "Close" }, +{ 82, "A3", "Set" }, +{ 83, "A3", "Toggle" }, +{ 84, "A3", "Value" }, +{ 85, "A30", "Open" }, +{ 86, "A30", "Close" }, +{ 87, "A30", "Set" }, +{ 88, "A30", "Toggle" }, +{ 89, "A30", "Value" }, +{ 90, "A31", "Open" }, +{ 91, "A31", "Close" }, +{ 92, "A31", "Set" }, +{ 93, "A31", "Toggle" }, +{ 94, "A31", "Value" }, +{ 95, "A32", "Open" }, +{ 96, "A32", "Close" }, +{ 97, "A32", "Set" }, +{ 98, "A32", "Toggle" }, +{ 99, "A32", "Value" }, +{ 100, "A39", "Open" }, +{ 101, "A39", "Close" }, +{ 102, "A39", "Set" }, +{ 103, "A39", "Toggle" }, +{ 104, "A39", "Value" }, +{ 105, "A41", "Open" }, +{ 106, "A41", "Close" }, +{ 107, "A41", "Set" }, +{ 108, "A41", "Toggle" }, +{ 109, "A41", "Value" }, +{ 110, "A42", "Open" }, +{ 111, "A42", "Close" }, +{ 112, "A42", "Set" }, +{ 113, "A42", "Toggle" }, +{ 114, "A42", "Value" }, +{ 115, "A43", "Open" }, +{ 116, "A43", "Close" }, +{ 117, "A43", "Set" }, +{ 118, "A43", "Toggle" }, +{ 119, "A43", "Value" }, +{ 120, "A44", "Open" }, +{ 121, "A44", "Close" }, +{ 122, "A44", "Set" }, +{ 123, "A44", "Toggle" }, +{ 124, "A44", "Value" }, +{ 125, "A45", "Open" }, +{ 126, "A45", "Close" }, +{ 127, "A45", "Set" }, +{ 128, "A45", "Toggle" }, +{ 129, "A45", "Value" }, +{ 130, "A46", "Open" }, +{ 131, "A46", "Close" }, +{ 132, "A46", "Set" }, +{ 133, "A46", "Toggle" }, +{ 134, "A46", "Value" }, +{ 135, "A47", "Open" }, +{ 136, "A47", "Close" }, +{ 137, "A47", "Set" }, +{ 138, "A47", "Toggle" }, +{ 139, "A47", "Value" }, +{ 140, "A5", "Open" }, +{ 141, "A5", "Close" }, +{ 142, "A5", "Set" }, +{ 143, "A5", "Toggle" }, +{ 144, "A5", "Value" }, +{ 145, "A50", "Open" }, +{ 146, "A50", "Close" }, +{ 147, "A50", "Set" }, +{ 148, "A50", "Toggle" }, +{ 149, "A50", "Value" }, +{ 150, "A51", "Open" }, +{ 151, "A51", "Close" }, +{ 152, "A51", "Set" }, +{ 153, "A51", "Toggle" }, +{ 154, "A51", "Value" }, +{ 155, "A53", "Open" }, +{ 156, "A53", "Close" }, +{ 157, "A53", "Set" }, +{ 158, "A53", "Toggle" }, +{ 159, "A53", "Value" }, +{ 160, "A54", "Open" }, +{ 161, "A54", "Close" }, +{ 162, "A54", "Set" }, +{ 163, "A54", "Toggle" }, +{ 164, "A54", "Value" }, +{ 165, "A55", "Open" }, +{ 166, "A55", "Close" }, +{ 167, "A55", "Set" }, +{ 168, "A55", "Toggle" }, +{ 169, "A55", "Value" }, +{ 170, "A56", "Open" }, +{ 171, "A56", "Close" }, +{ 172, "A56", "Set" }, +{ 173, "A56", "Toggle" }, +{ 174, "A56", "Value" }, +{ 175, "A6", "Open" }, +{ 176, "A6", "Close" }, +{ 177, "A6", "Set" }, +{ 178, "A6", "Toggle" }, +{ 179, "A6", "Value" }, +{ 180, "A61", "Open" }, +{ 181, "A61", "Close" }, +{ 182, "A61", "Set" }, +{ 183, "A61", "Toggle" }, +{ 184, "A61", "Value" }, +{ 185, "A62", "Open" }, +{ 186, "A62", "Close" }, +{ 187, "A62", "Set" }, +{ 188, "A62", "Toggle" }, +{ 189, "A62", "Value" }, +{ 190, "A63", "Open" }, +{ 191, "A63", "Close" }, +{ 192, "A63", "Set" }, +{ 193, "A63", "Toggle" }, +{ 194, "A63", "Value" }, +{ 195, "A64", "Open" }, +{ 196, "A64", "Close" }, +{ 197, "A64", "Set" }, +{ 198, "A64", "Toggle" }, +{ 199, "A64", "Value" }, +{ 200, "A65", "Open" }, +{ 201, "A65", "Close" }, +{ 202, "A65", "Set" }, +{ 203, "A65", "Toggle" }, +{ 204, "A65", "Value" }, +{ 205, "A7", "Open" }, +{ 206, "A7", "Close" }, +{ 207, "A7", "Set" }, +{ 208, "A7", "Toggle" }, +{ 209, "A7", "Value" }, +{ 210, "A75", "Open" }, +{ 211, "A75", "Close" }, +{ 212, "A75", "Set" }, +{ 213, "A75", "Toggle" }, +{ 214, "A75", "Value" }, +{ 215, "A8", "Open" }, +{ 216, "A8", "Close" }, +{ 217, "A8", "Set" }, +{ 218, "A8", "Toggle" }, +{ 219, "A8", "Value" }, +{ 220, "A80", "Open" }, +{ 221, "A80", "Close" }, +{ 222, "A80", "Set" }, +{ 223, "A80", "Toggle" }, +{ 224, "A80", "Value" }, +{ 225, "A9", "Open" }, +{ 226, "A9", "Close" }, +{ 227, "A9", "Set" }, +{ 228, "A9", "Toggle" }, +{ 229, "A9", "Value" }, +{ 230, "AK", "Open" }, +{ 231, "AK", "Close" }, +{ 232, "AK", "Set" }, +{ 233, "AK", "Toggle" }, +{ 234, "AK", "Value" }, +{ 235, "ALS", "Open" }, +{ 236, "ALS", "Close" }, +{ 237, "ALS", "Set" }, +{ 238, "ALS", "Toggle" }, +{ 239, "ALS", "Value" }, +{ 240, "ALS_ARS", "AttentionPedal" }, +{ 241, "ALS_ARS", "2" }, +{ 242, "ALS_ARS", "8" }, +{ 243, "ALS_ARS", "20" }, +{ 244, "ALS_ARS", "29" }, +{ 245, "ALS_ARS", "33D" }, +{ 246, "ALS_ARS", "33G" }, +{ 247, "ALS_ARS", "33Zh" }, +{ 248, "ALS_ARS", "Speed" }, +{ 249, "ALS_ARS", "Signal80" }, +{ 250, "ALS_ARS", "Signal70" }, +{ 251, "ALS_ARS", "Signal60" }, +{ 252, "ALS_ARS", "Signal40" }, +{ 253, "ALS_ARS", "Signal0" }, +{ 254, "ALS_ARS", "Special" }, +{ 255, "ALS_ARS", "NoFreq" }, +{ 256, "ALS_ARS", "SpeedLimit" }, +{ 257, "ALS_ARS", "NextLimit" }, +{ 258, "ALS_ARS", "Ring" }, +{ 259, "ARS", "Open" }, +{ 260, "ARS", "Close" }, +{ 261, "ARS", "Set" }, +{ 262, "ARS", "Toggle" }, +{ 263, "ARS", "Value" }, +{ 264, "AVT", "Open" }, +{ 265, "AVT", "Close" }, +{ 266, "AVT", "Set" }, +{ 267, "AVT", "Toggle" }, +{ 268, "AVT", "Value" }, +{ 269, "AVU", "Open" }, +{ 270, "AVU", "Close" }, +{ 271, "AVU", "Set" }, +{ 272, "AVU", "Toggle" }, +{ 273, "AVU", "Value" }, +{ 274, "BD", "Open" }, +{ 275, "BD", "Close" }, +{ 276, "BD", "Set" }, +{ 277, "BD", "Toggle" }, +{ 278, "BD", "Value" }, +{ 279, "BPSNon", "Open" }, +{ 280, "BPSNon", "Close" }, +{ 281, "BPSNon", "Set" }, +{ 282, "BPSNon", "Toggle" }, +{ 283, "BPSNon", "Value" }, +{ 284, "BPT", "Open" }, +{ 285, "BPT", "Close" }, +{ 286, "BPT", "Set" }, +{ 287, "BPT", "Toggle" }, +{ 288, "BPT", "Value" }, +{ 289, "Battery", "Capacity" }, +{ 290, "Battery", "Charge" }, +{ 291, "Battery", "Voltage" }, +{ 292, "DIPoff", "Open" }, +{ 293, "DIPoff", "Close" }, +{ 294, "DIPoff", "Set" }, +{ 295, "DIPoff", "Toggle" }, +{ 296, "DIPoff", "Value" }, +{ 297, "DIPon", "Open" }, +{ 298, "DIPon", "Close" }, +{ 299, "DIPon", "Set" }, +{ 300, "DIPon", "Toggle" }, +{ 301, "DIPon", "Value" }, +{ 302, "DR1", "Open" }, +{ 303, "DR1", "Close" }, +{ 304, "DR1", "Set" }, +{ 305, "DR1", "Toggle" }, +{ 306, "DR1", "Value" }, +{ 307, "DR2", "Open" }, +{ 308, "DR2", "Close" }, +{ 309, "DR2", "Set" }, +{ 310, "DR2", "Toggle" }, +{ 311, "DR2", "Value" }, +{ 312, "DURA", "SelectAlternate" }, +{ 313, "DURA", "SelectMain" }, +{ 314, "DURA", "SelectChannel" }, +{ 315, "DURA", "ToggleChannel" }, +{ 316, "DURA", "Signal" }, +{ 317, "DriverValveDisconnect", "Open" }, +{ 318, "DriverValveDisconnect", "Close" }, +{ 319, "DriverValveDisconnect", "Set" }, +{ 320, "DriverValveDisconnect", "Toggle" }, +{ 321, "DriverValveDisconnect", "Value" }, +{ 322, "Electric", "R1" }, +{ 323, "Electric", "R2" }, +{ 324, "Electric", "R3" }, +{ 325, "Electric", "Rs1" }, +{ 326, "Electric", "Rs2" }, +{ 327, "Electric", "Itotal" }, +{ 328, "Electric", "I13" }, +{ 329, "Electric", "I24" }, +{ 330, "Electric", "IRT2" }, +{ 331, "Electric", "Ustator13" }, +{ 332, "Electric", "Ustator24" }, +{ 333, "Electric", "Ishunt13" }, +{ 334, "Electric", "Istator13" }, +{ 335, "Electric", "Ishunt24" }, +{ 336, "Electric", "Istator24" }, +{ 337, "Electric", "T1" }, +{ 338, "Electric", "T2" }, +{ 339, "Electric", "P1" }, +{ 340, "Electric", "P2" }, +{ 341, "Electric", "Main750V" }, +{ 342, "Electric", "Power750V" }, +{ 343, "Electric", "Aux750V" }, +{ 344, "Electric", "Aux80V" }, +{ 345, "Electric", "Lights80V" }, +{ 346, "Engines", "Speed" }, +{ 347, "Engines", "MagneticFlux13" }, +{ 348, "Engines", "MagneticFlux24" }, +{ 349, "Engines", "RotationRate" }, +{ 350, "Engines", "E13" }, +{ 351, "Engines", "E24" }, +{ 352, "Engines", "Moment13" }, +{ 353, "Engines", "Moment24" }, +{ 354, "Engines", "FieldReduction13" }, +{ 355, "Engines", "FieldReduction24" }, +{ 356, "Engines", "BogeyMoment" }, +{ 357, "FrontBrakeLineIsolation", "Open" }, +{ 358, "FrontBrakeLineIsolation", "Close" }, +{ 359, "FrontBrakeLineIsolation", "Set" }, +{ 360, "FrontBrakeLineIsolation", "Toggle" }, +{ 361, "FrontBrakeLineIsolation", "Value" }, +{ 362, "GV", "Open" }, +{ 363, "GV", "Close" }, +{ 364, "GV", "Set" }, +{ 365, "GV", "Toggle" }, +{ 366, "GV", "Value" }, +{ 367, "K25", "Open" }, +{ 368, "K25", "Close" }, +{ 369, "K25", "Set" }, +{ 370, "K25", "Toggle" }, +{ 371, "K25", "Value" }, +{ 372, "K6", "Open" }, +{ 373, "K6", "Close" }, +{ 374, "K6", "Set" }, +{ 375, "K6", "Toggle" }, +{ 376, "K6", "Value" }, +{ 377, "KD", "Open" }, +{ 378, "KD", "Close" }, +{ 379, "KD", "Set" }, +{ 380, "KD", "Toggle" }, +{ 381, "KD", "Value" }, +{ 382, "KDL", "Open" }, +{ 383, "KDL", "Close" }, +{ 384, "KDL", "Set" }, +{ 385, "KDL", "Toggle" }, +{ 386, "KDL", "Value" }, +{ 387, "KDP", "Open" }, +{ 388, "KDP", "Close" }, +{ 389, "KDP", "Set" }, +{ 390, "KDP", "Toggle" }, +{ 391, "KDP", "Value" }, +{ 392, "KK", "Open" }, +{ 393, "KK", "Close" }, +{ 394, "KK", "Set" }, +{ 395, "KK", "Toggle" }, +{ 396, "KK", "Value" }, +{ 397, "KPP", "Open" }, +{ 398, "KPP", "Close" }, +{ 399, "KPP", "Set" }, +{ 400, "KPP", "Toggle" }, +{ 401, "KPP", "Value" }, +{ 402, "KRZD", "Open" }, +{ 403, "KRZD", "Close" }, +{ 404, "KRZD", "Set" }, +{ 405, "KRZD", "Toggle" }, +{ 406, "KRZD", "Value" }, +{ 407, "KSB1", "Open" }, +{ 408, "KSB1", "Close" }, +{ 409, "KSB1", "Set" }, +{ 410, "KSB1", "Toggle" }, +{ 411, "KSB1", "Value" }, +{ 412, "KSB2", "Open" }, +{ 413, "KSB2", "Close" }, +{ 414, "KSB2", "Set" }, +{ 415, "KSB2", "Toggle" }, +{ 416, "KSB2", "Value" }, +{ 417, "KSH1", "Open" }, +{ 418, "KSH1", "Close" }, +{ 419, "KSH1", "Set" }, +{ 420, "KSH1", "Toggle" }, +{ 421, "KSH1", "Value" }, +{ 422, "KSH2", "Open" }, +{ 423, "KSH2", "Close" }, +{ 424, "KSH2", "Set" }, +{ 425, "KSH2", "Toggle" }, +{ 426, "KSH2", "Value" }, +{ 427, "KSN", "Open" }, +{ 428, "KSN", "Close" }, +{ 429, "KSN", "Set" }, +{ 430, "KSN", "Toggle" }, +{ 431, "KSN", "Value" }, +{ 432, "KUP", "Open" }, +{ 433, "KUP", "Close" }, +{ 434, "KUP", "Set" }, +{ 435, "KUP", "Toggle" }, +{ 436, "KUP", "Value" }, +{ 437, "KV", "ControllerSet" }, +{ 438, "KV", "ReverserSet" }, +{ 439, "KV", "ControllerUp" }, +{ 440, "KV", "ControllerDown" }, +{ 441, "KV", "ReverserUp" }, +{ 442, "KV", "ReverserDown" }, +{ 443, "KV", "SetX1" }, +{ 444, "KV", "SetX2" }, +{ 445, "KV", "SetX3" }, +{ 446, "KV", "Set0" }, +{ 447, "KV", "SetT1" }, +{ 448, "KV", "SetT1A" }, +{ 449, "KV", "SetT2" }, +{ 450, "KV", "ControllerPosition" }, +{ 451, "KV", "ReverserPosition" }, +{ 452, "KVC", "Open" }, +{ 453, "KVC", "Close" }, +{ 454, "KVC", "Set" }, +{ 455, "KVC", "Toggle" }, +{ 456, "KVC", "Value" }, +{ 457, "KVP", "Open" }, +{ 458, "KVP", "Close" }, +{ 459, "KVP", "Set" }, +{ 460, "KVP", "Toggle" }, +{ 461, "KVP", "Value" }, +{ 462, "LK1", "Open" }, +{ 463, "LK1", "Close" }, +{ 464, "LK1", "Set" }, +{ 465, "LK1", "Toggle" }, +{ 466, "LK1", "Value" }, +{ 467, "LK2", "Open" }, +{ 468, "LK2", "Close" }, +{ 469, "LK2", "Set" }, +{ 470, "LK2", "Toggle" }, +{ 471, "LK2", "Value" }, +{ 472, "LK3", "Open" }, +{ 473, "LK3", "Close" }, +{ 474, "LK3", "Set" }, +{ 475, "LK3", "Toggle" }, +{ 476, "LK3", "Value" }, +{ 477, "LK4", "Open" }, +{ 478, "LK4", "Close" }, +{ 479, "LK4", "Set" }, +{ 480, "LK4", "Toggle" }, +{ 481, "LK4", "Value" }, +{ 482, "NR", "Open" }, +{ 483, "NR", "Close" }, +{ 484, "NR", "Set" }, +{ 485, "NR", "Toggle" }, +{ 486, "NR", "Value" }, +{ 487, "OtklAVU", "Open" }, +{ 488, "OtklAVU", "Close" }, +{ 489, "OtklAVU", "Set" }, +{ 490, "OtklAVU", "Toggle" }, +{ 491, "OtklAVU", "Value" }, +{ 492, "PA1", "Open" }, +{ 493, "PA1", "Close" }, +{ 494, "PA1", "Set" }, +{ 495, "PA1", "Toggle" }, +{ 496, "PA1", "Value" }, +{ 497, "PA2", "Open" }, +{ 498, "PA2", "Close" }, +{ 499, "PA2", "Set" }, +{ 500, "PA2", "Toggle" }, +{ 501, "PA2", "Value" }, +{ 502, "PB", "Open" }, +{ 503, "PB", "Close" }, +{ 504, "PB", "Set" }, +{ 505, "PB", "Toggle" }, +{ 506, "PB", "Value" }, +{ 507, "PNB_1250_1", "Open" }, +{ 508, "PNB_1250_1", "Close" }, +{ 509, "PNB_1250_1", "Set" }, +{ 510, "PNB_1250_1", "Toggle" }, +{ 511, "PNB_1250_1", "Value" }, +{ 512, "PNB_1250_2", "Open" }, +{ 513, "PNB_1250_2", "Close" }, +{ 514, "PNB_1250_2", "Set" }, +{ 515, "PNB_1250_2", "Toggle" }, +{ 516, "PNB_1250_2", "Value" }, +{ 517, "PP_28", "Open" }, +{ 518, "PP_28", "Close" }, +{ 519, "PP_28", "Set" }, +{ 520, "PP_28", "Toggle" }, +{ 521, "PP_28", "Value" }, +{ 522, "Panel", "CabinLight" }, +{ 523, "Panel", "HeadLights1" }, +{ 524, "Panel", "HeadLights2" }, +{ 525, "Panel", "HeadLights3" }, +{ 526, "Panel", "RedLightLeft" }, +{ 527, "Panel", "RedLightRight" }, +{ 528, "Panel", "EmergencyLight" }, +{ 529, "Panel", "GreenRP" }, +{ 530, "Panel", "RedRP" }, +{ 531, "Panel", "KUP" }, +{ 532, "Panel", "V1" }, +{ 533, "Panel", "AVU" }, +{ 534, "Panel", "Ring" }, +{ 535, "Panel", "SD" }, +{ 536, "Panel", "TrainBrakes" }, +{ 537, "Panel", "TrainRP" }, +{ 538, "Panel", "TrainDoors" }, +{ 539, "Pneumatic", "BrakeUp" }, +{ 540, "Pneumatic", "BrakeDown" }, +{ 541, "Pneumatic", "BrakeSet" }, +{ 542, "Pneumatic", "BrakeLinePressure" }, +{ 543, "Pneumatic", "BrakeCylinderPressure" }, +{ 544, "Pneumatic", "DriverValvePosition" }, +{ 545, "Pneumatic", "ReservoirPressure" }, +{ 546, "Pneumatic", "TrainLinePressure" }, +{ 547, "Pneumatic", "DoorLinePressure" }, +{ 548, "PneumaticNo1", "Open" }, +{ 549, "PneumaticNo1", "Close" }, +{ 550, "PneumaticNo1", "Set" }, +{ 551, "PneumaticNo1", "Toggle" }, +{ 552, "PneumaticNo1", "Value" }, +{ 553, "PneumaticNo2", "Open" }, +{ 554, "PneumaticNo2", "Close" }, +{ 555, "PneumaticNo2", "Set" }, +{ 556, "PneumaticNo2", "Toggle" }, +{ 557, "PneumaticNo2", "Value" }, +{ 558, "PositionSwitch", "MotorState" }, +{ 559, "PositionSwitch", "MotorCoilState" }, +{ 560, "PositionSwitch", "Position" }, +{ 561, "PositionSwitch", "Velocity" }, +{ 562, "PositionSwitch", "MotorState" }, +{ 563, "PositionSwitch", "MotorCoilState" }, +{ 564, "PositionSwitch", "RKM1" }, +{ 565, "PositionSwitch", "RKP" }, +{ 566, "PowerSupply", "XR3.2" }, +{ 567, "PowerSupply", "XR3.3" }, +{ 568, "PowerSupply", "XR3.4" }, +{ 569, "PowerSupply", "XR3.5" }, +{ 570, "PowerSupply", "XR3.6" }, +{ 571, "PowerSupply", "XR3.7" }, +{ 572, "PowerSupply", "XT3.1" }, +{ 573, "PowerSupply", "XT3_1" }, +{ 574, "PowerSupply", "XT3_4" }, +{ 575, "PowerSupply", "XT1_2" }, +{ 576, "R1_5", "Open" }, +{ 577, "R1_5", "Close" }, +{ 578, "R1_5", "Set" }, +{ 579, "R1_5", "Toggle" }, +{ 580, "R1_5", "Value" }, +{ 581, "RD", "Open" }, +{ 582, "RD", "Close" }, +{ 583, "RD", "Set" }, +{ 584, "RD", "Toggle" }, +{ 585, "RD", "Value" }, +{ 586, "RKR", "Open" }, +{ 587, "RKR", "Close" }, +{ 588, "RKR", "Set" }, +{ 589, "RKR", "Toggle" }, +{ 590, "RKR", "Value" }, +{ 591, "RKTT", "Open" }, +{ 592, "RKTT", "Close" }, +{ 593, "RKTT", "Set" }, +{ 594, "RKTT", "Toggle" }, +{ 595, "RKTT", "Value" }, +{ 596, "RO", "Open" }, +{ 597, "RO", "Close" }, +{ 598, "RO", "Set" }, +{ 599, "RO", "Toggle" }, +{ 600, "RO", "Value" }, +{ 601, "RP1_3", "Open" }, +{ 602, "RP1_3", "Close" }, +{ 603, "RP1_3", "Set" }, +{ 604, "RP1_3", "Toggle" }, +{ 605, "RP1_3", "Value" }, +{ 606, "RP2_4", "Open" }, +{ 607, "RP2_4", "Close" }, +{ 608, "RP2_4", "Set" }, +{ 609, "RP2_4", "Toggle" }, +{ 610, "RP2_4", "Value" }, +{ 611, "RPB", "Open" }, +{ 612, "RPB", "Close" }, +{ 613, "RPB", "Set" }, +{ 614, "RPB", "Toggle" }, +{ 615, "RPB", "Value" }, +{ 616, "RPL", "Open" }, +{ 617, "RPL", "Close" }, +{ 618, "RPL", "Set" }, +{ 619, "RPL", "Toggle" }, +{ 620, "RPL", "Value" }, +{ 621, "RPU", "Open" }, +{ 622, "RPU", "Close" }, +{ 623, "RPU", "Set" }, +{ 624, "RPU", "Toggle" }, +{ 625, "RPU", "Value" }, +{ 626, "RPvozvrat", "Open" }, +{ 627, "RPvozvrat", "Close" }, +{ 628, "RPvozvrat", "Set" }, +{ 629, "RPvozvrat", "Toggle" }, +{ 630, "RPvozvrat", "Value" }, +{ 631, "RR", "Open" }, +{ 632, "RR", "Close" }, +{ 633, "RR", "Set" }, +{ 634, "RR", "Toggle" }, +{ 635, "RR", "Value" }, +{ 636, "RRP1", "Open" }, +{ 637, "RRP1", "Close" }, +{ 638, "RRP1", "Set" }, +{ 639, "RRP1", "Toggle" }, +{ 640, "RRP1", "Value" }, +{ 641, "RRP2", "Open" }, +{ 642, "RRP2", "Close" }, +{ 643, "RRP2", "Set" }, +{ 644, "RRP2", "Toggle" }, +{ 645, "RRP2", "Value" }, +{ 646, "RRT", "Open" }, +{ 647, "RRT", "Close" }, +{ 648, "RRT", "Set" }, +{ 649, "RRT", "Toggle" }, +{ 650, "RRT", "Value" }, +{ 651, "RSU", "Open" }, +{ 652, "RSU", "Close" }, +{ 653, "RSU", "Set" }, +{ 654, "RSU", "Toggle" }, +{ 655, "RSU", "Value" }, +{ 656, "RT2", "Open" }, +{ 657, "RT2", "Close" }, +{ 658, "RT2", "Set" }, +{ 659, "RT2", "Toggle" }, +{ 660, "RT2", "Value" }, +{ 661, "RUP", "Open" }, +{ 662, "RUP", "Close" }, +{ 663, "RUP", "Set" }, +{ 664, "RUP", "Toggle" }, +{ 665, "RUP", "Value" }, +{ 666, "RUT", "Open" }, +{ 667, "RUT", "Close" }, +{ 668, "RUT", "Set" }, +{ 669, "RUT", "Toggle" }, +{ 670, "RUT", "Value" }, +{ 671, "RV1", "Open" }, +{ 672, "RV1", "Close" }, +{ 673, "RV1", "Set" }, +{ 674, "RV1", "Toggle" }, +{ 675, "RV1", "Value" }, +{ 676, "RV2", "Open" }, +{ 677, "RV2", "Close" }, +{ 678, "RV2", "Set" }, +{ 679, "RV2", "Toggle" }, +{ 680, "RV2", "Value" }, +{ 681, "RVO", "Open" }, +{ 682, "RVO", "Close" }, +{ 683, "RVO", "Set" }, +{ 684, "RVO", "Toggle" }, +{ 685, "RVO", "Value" }, +{ 686, "RVT", "Open" }, +{ 687, "RVT", "Close" }, +{ 688, "RVT", "Set" }, +{ 689, "RVT", "Toggle" }, +{ 690, "RVT", "Value" }, +{ 691, "RV3", "Open" }, +{ 692, "RV3", "Close" }, +{ 693, "RV3", "Set" }, +{ 694, "RV3", "Toggle" }, +{ 695, "RV3", "Value" }, +{ 696, "RZP", "Open" }, +{ 697, "RZP", "Close" }, +{ 698, "RZP", "Set" }, +{ 699, "RZP", "Toggle" }, +{ 700, "RZP", "Value" }, +{ 701, "RZ_1", "Open" }, +{ 702, "RZ_1", "Close" }, +{ 703, "RZ_1", "Set" }, +{ 704, "RZ_1", "Toggle" }, +{ 705, "RZ_1", "Value" }, +{ 706, "RZ_2", "Open" }, +{ 707, "RZ_2", "Close" }, +{ 708, "RZ_2", "Set" }, +{ 709, "RZ_2", "Toggle" }, +{ 710, "RZ_2", "Value" }, +{ 711, "RZ_3", "Open" }, +{ 712, "RZ_3", "Close" }, +{ 713, "RZ_3", "Set" }, +{ 714, "RZ_3", "Toggle" }, +{ 715, "RZ_3", "Value" }, +{ 716, "RearBrakeLineIsolation", "Open" }, +{ 717, "RearBrakeLineIsolation", "Close" }, +{ 718, "RearBrakeLineIsolation", "Set" }, +{ 719, "RearBrakeLineIsolation", "Toggle" }, +{ 720, "RearBrakeLineIsolation", "Value" }, +{ 721, "RezMK", "Open" }, +{ 722, "RezMK", "Close" }, +{ 723, "RezMK", "Set" }, +{ 724, "RezMK", "Toggle" }, +{ 725, "RezMK", "Value" }, +{ 726, "RheostatController", "MotorState" }, +{ 727, "RheostatController", "MotorCoilState" }, +{ 728, "RheostatController", "Position" }, +{ 729, "RheostatController", "Velocity" }, +{ 730, "RheostatController", "MotorState" }, +{ 731, "RheostatController", "MotorCoilState" }, +{ 732, "RheostatController", "RKM1" }, +{ 733, "RheostatController", "RKP" }, +{ 734, "Rp8", "Open" }, +{ 735, "Rp8", "Close" }, +{ 736, "Rp8", "Set" }, +{ 737, "Rp8", "Toggle" }, +{ 738, "Rp8", "Value" }, +{ 739, "Rper", "Open" }, +{ 740, "Rper", "Close" }, +{ 741, "Rper", "Set" }, +{ 742, "Rper", "Toggle" }, +{ 743, "Rper", "Value" }, +{ 744, "SR1", "Open" }, +{ 745, "SR1", "Close" }, +{ 746, "SR1", "Set" }, +{ 747, "SR1", "Toggle" }, +{ 748, "SR1", "Value" }, +{ 749, "TR", "Main750V" }, +{ 750, "TR1", "Open" }, +{ 751, "TR1", "Close" }, +{ 752, "TR1", "Set" }, +{ 753, "TR1", "Toggle" }, +{ 754, "TR1", "Value" }, +{ 755, "TR2", "Open" }, +{ 756, "TR2", "Close" }, +{ 757, "TR2", "Set" }, +{ 758, "TR2", "Toggle" }, +{ 759, "TR2", "Value" }, +{ 760, "TRK", "Open" }, +{ 761, "TRK", "Close" }, +{ 762, "TRK", "Set" }, +{ 763, "TRK", "Toggle" }, +{ 764, "TRK", "Value" }, +{ 765, "ThyristorBU5_6", "Open" }, +{ 766, "ThyristorBU5_6", "Close" }, +{ 767, "ThyristorBU5_6", "Set" }, +{ 768, "ThyristorBU5_6", "Toggle" }, +{ 769, "ThyristorBU5_6", "Value" }, +{ 770, "VAD", "Open" }, +{ 771, "VAD", "Close" }, +{ 772, "VAD", "Set" }, +{ 773, "VAD", "Toggle" }, +{ 774, "VAD", "Value" }, +{ 775, "VAH", "Open" }, +{ 776, "VAH", "Close" }, +{ 777, "VAH", "Set" }, +{ 778, "VAH", "Toggle" }, +{ 779, "VAH", "Value" }, +{ 780, "VB", "Open" }, +{ 781, "VB", "Close" }, +{ 782, "VB", "Set" }, +{ 783, "VB", "Toggle" }, +{ 784, "VB", "Value" }, +{ 785, "VDL", "Open" }, +{ 786, "VDL", "Close" }, +{ 787, "VDL", "Set" }, +{ 788, "VDL", "Toggle" }, +{ 789, "VDL", "Value" }, +{ 790, "VDOL", "Open" }, +{ 791, "VDOL", "Close" }, +{ 792, "VDOL", "Set" }, +{ 793, "VDOL", "Toggle" }, +{ 794, "VDOL", "Value" }, +{ 795, "VDOP", "Open" }, +{ 796, "VDOP", "Close" }, +{ 797, "VDOP", "Set" }, +{ 798, "VDOP", "Toggle" }, +{ 799, "VDOP", "Value" }, +{ 800, "VDZ", "Open" }, +{ 801, "VDZ", "Close" }, +{ 802, "VDZ", "Set" }, +{ 803, "VDZ", "Toggle" }, +{ 804, "VDZ", "Value" }, +{ 805, "VMK", "Open" }, +{ 806, "VMK", "Close" }, +{ 807, "VMK", "Set" }, +{ 808, "VMK", "Toggle" }, +{ 809, "VMK", "Value" }, +{ 810, "VU", "Open" }, +{ 811, "VU", "Close" }, +{ 812, "VU", "Set" }, +{ 813, "VU", "Toggle" }, +{ 814, "VU", "Value" }, +{ 815, "VUD1", "Open" }, +{ 816, "VUD1", "Close" }, +{ 817, "VUD1", "Set" }, +{ 818, "VUD1", "Toggle" }, +{ 819, "VUD1", "Value" }, +{ 820, "VUD2", "Open" }, +{ 821, "VUD2", "Close" }, +{ 822, "VUD2", "Set" }, +{ 823, "VUD2", "Toggle" }, +{ 824, "VUD2", "Value" }, +{ 825, "VUS", "Open" }, +{ 826, "VUS", "Close" }, +{ 827, "VUS", "Set" }, +{ 828, "VUS", "Toggle" }, +{ 829, "VUS", "Value" }, +{ 830, "VozvratRP", "Open" }, +{ 831, "VozvratRP", "Close" }, +{ 832, "VozvratRP", "Set" }, +{ 833, "VozvratRP", "Toggle" }, +{ 834, "VozvratRP", "Value" }, +{ 835, "YAR_13A", "WeightLoadRatio" }, +{ 836, "Electric", "ThyristorResistance" }, +{ 837, "Electric", "ThyristorState" }, +{ 838, "RheostatController", "RKM2" }, +{ 839, "PositionSwitch", "RKM2" }, +{ 840, "Electric", "Urotor13" }, +{ 841, "Electric", "Urotor24" }, +{ 842, "Electric", "U13" }, +{ 843, "Electric", "U24" }, +{ 844, "Electric", "Utotal" }, +{ 845, "Electric", "Overheat1" }, +{ 846, "Electric", "Overheat2" }, +{ 847, "Custom1", "Open" }, +{ 848, "Custom1", "Close" }, +{ 849, "Custom1", "Set" }, +{ 850, "Custom1", "Toggle" }, +{ 851, "Custom1", "Value" }, +{ 852, "Custom2", "Open" }, +{ 853, "Custom2", "Close" }, +{ 854, "Custom2", "Set" }, +{ 855, "Custom2", "Toggle" }, +{ 856, "Custom2", "Value" }, +{ 857, "Custom3", "Open" }, +{ 858, "Custom3", "Close" }, +{ 859, "Custom3", "Set" }, +{ 860, "Custom3", "Toggle" }, +{ 861, "Custom3", "Value" }, +{ 862, "Custom4", "Open" }, +{ 863, "Custom4", "Close" }, +{ 864, "Custom4", "Set" }, +{ 865, "Custom4", "Toggle" }, +{ 866, "Custom4", "Value" }, +{ 867, "Custom5", "Open" }, +{ 868, "Custom5", "Close" }, +{ 869, "Custom5", "Set" }, +{ 870, "Custom5", "Toggle" }, +{ 871, "Custom5", "Value" }, +{ 872, "Custom6", "Open" }, +{ 873, "Custom6", "Close" }, +{ 874, "Custom6", "Set" }, +{ 875, "Custom6", "Toggle" }, +{ 876, "Custom6", "Value" }, +{ 877, "Custom7", "Open" }, +{ 878, "Custom7", "Close" }, +{ 879, "Custom7", "Set" }, +{ 880, "Custom7", "Toggle" }, +{ 881, "Custom7", "Value" }, +{ 882, "Custom8", "Open" }, +{ 883, "Custom8", "Close" }, +{ 884, "Custom8", "Set" }, +{ 885, "Custom8", "Toggle" }, +{ 886, "Custom8", "Value" }, +{ 887, "CustomA", "Open" }, +{ 888, "CustomA", "Close" }, +{ 889, "CustomA", "Set" }, +{ 890, "CustomA", "Toggle" }, +{ 891, "CustomA", "Value" }, +{ 892, "CustomB", "Open" }, +{ 893, "CustomB", "Close" }, +{ 894, "CustomB", "Set" }, +{ 895, "CustomB", "Toggle" }, +{ 896, "CustomB", "Value" }, +{ 897, "CustomC", "Open" }, +{ 898, "CustomC", "Close" }, +{ 899, "CustomC", "Set" }, +{ 900, "CustomC", "Toggle" }, +{ 901, "CustomC", "Value" }, +{ 902, "CustomD", "Open" }, +{ 903, "CustomD", "Close" }, +{ 904, "CustomD", "Set" }, +{ 905, "CustomD", "Toggle" }, +{ 906, "CustomD", "Value" }, +{ 907, "CustomE", "Open" }, +{ 908, "CustomE", "Close" }, +{ 909, "CustomE", "Set" }, +{ 910, "CustomE", "Toggle" }, +{ 911, "CustomE", "Value" }, +{ 912, "CustomF", "Open" }, +{ 913, "CustomF", "Close" }, +{ 914, "CustomF", "Set" }, +{ 915, "CustomF", "Toggle" }, +{ 916, "CustomF", "Value" }, +{ 917, "CustomG", "Open" }, +{ 918, "CustomG", "Close" }, +{ 919, "CustomG", "Set" }, +{ 920, "CustomG", "Toggle" }, +{ 921, "CustomG", "Value" }, +{ 922, "R_UNch", "Open" }, +{ 923, "R_UNch", "Close" }, +{ 924, "R_UNch", "Set" }, +{ 925, "R_UNch", "Toggle" }, +{ 926, "R_UNch", "Value" }, +{ 927, "R_ZS", "Open" }, +{ 928, "R_ZS", "Close" }, +{ 929, "R_ZS", "Set" }, +{ 930, "R_ZS", "Toggle" }, +{ 931, "R_ZS", "Value" }, +{ 932, "R_G", "Open" }, +{ 933, "R_G", "Close" }, +{ 934, "R_G", "Set" }, +{ 935, "R_G", "Toggle" }, +{ 936, "R_G", "Value" }, +{ 937, "R_Radio", "Open" }, +{ 938, "R_Radio", "Close" }, +{ 939, "R_Radio", "Set" }, +{ 940, "R_Radio", "Toggle" }, +{ 941, "R_Radio", "Value" }, +{ 942, "R_Program1", "Open" }, +{ 943, "R_Program1", "Close" }, +{ 944, "R_Program1", "Set" }, +{ 945, "R_Program1", "Toggle" }, +{ 946, "R_Program1", "Value" }, +{ 947, "RC1", "Open" }, +{ 948, "RC1", "Close" }, +{ 949, "RC1", "Set" }, +{ 950, "RC1", "Toggle" }, +{ 951, "RC1", "Value" }, +{ 952, "R_Program2", "Open" }, +{ 953, "R_Program2", "Close" }, +{ 954, "R_Program2", "Set" }, +{ 955, "R_Program2", "Toggle" }, +{ 956, "R_Program2", "Value" }, +} \ No newline at end of file diff --git a/lua/metrostroi/sv_language.lua b/lua/metrostroi/sv_language.lua new file mode 100644 index 0000000..471641f --- /dev/null +++ b/lua/metrostroi/sv_language.lua @@ -0,0 +1,60 @@ +util.AddNetworkString("metrostroi_language_sync") + +Metrostroi.LanguageCache = {} +function Metrostroi.SendLanguages(ply) + if true then return end + -- Add all clientside files + local files = file.Find("lua/metrostroi_data/languages/*","GAME") + local langs = {} + for i,filename in ipairs(files) do + local bytes = (#filename+4)+4+(1+1)+(1+1)+4 + local data = util.Compress(file.Read("metrostroi_data/languages/"..filename,"LUA")) + local count = math.floor(#data/(65533-bytes)) + if count > 32 then + ErrorNoHalt("Default language file metrostroi_data/languages/"..filename.." is too big (max ~2mb compressed)") + elseif count > 0 then + local bytescount = (65533-bytes) + for c=0,count do + local write = data:sub(c*bytescount,(i+1)*bytescount-1) + table.insert(Metrostroi.LanguageCache,{ + CurTime(), --ID + #files,i, --Count/CurrFile + count,c, --Count/CurrPacket + #write,write, --Count/Data + ply --Player + }) + end + else + table.insert(Metrostroi.LanguageCache,{ + CurTime(), --ID + #files,i, --Count/CurrFile + 0,0, --Count/CurrPacket + #data,data, --Count/Data + ply --Player + }) + end + end +end +timer.Create("metrostroi_language_sender",0.5,0,function() + if #Metrostroi.LanguageCache > 0 then + local tbl = table.remove(Metrostroi.LanguageCache,1) + if tbl and (not tbl[8] or IsValid(tbl[8])) then + print(Format("Send [%s] %01d/%01d %01d/%01d %d",tbl[1],tbl[3],tbl[2],tbl[5],tbl[4],tbl[6])) + net.Start("metrostroi_language_sync") + net.WriteFloat(tbl[1]) -- ID of packet + net.WriteUInt(tbl[2],8) -- Count of files + net.WriteUInt(tbl[3],8) -- Current file + net.WriteUInt(tbl[4],8) -- Count of packets + net.WriteUInt(tbl[5],8) -- Current packet + net.WriteUInt(tbl[6],32) --Count of datasize + net.WriteData(tbl[7],tbl[6]) --Data + if IsValid(tbl[8]) then net.Send(tbl[8]) else net.Broadcast() end + end + end +end) + +net.Receive("metrostroi_language_sync",function(_,ply) Metrostroi.SendLanguages(ply) end) +--Metrostroi.LanguageCache = {} +--Metrostroi.SendLanguages() + +concommand.Add("metrostroi_language_reload",Metrostroi.SendLanguages) diff --git a/lua/metrostroi/sv_railnetwork.lua b/lua/metrostroi/sv_railnetwork.lua new file mode 100644 index 0000000..44a9f5b --- /dev/null +++ b/lua/metrostroi/sv_railnetwork.lua @@ -0,0 +1,1702 @@ +-------------------------------------------------------------------------------- +-- Rail network handling and ARS simulation +-------------------------------------------------------------------------------- +if not Metrostroi.Paths then + -- Definition of paths used in runtime + Metrostroi.Paths = {} + -- Spatial lookup for nodes + Metrostroi.SpatialLookup = {} + + -- List of signal entities for every track segment/node + Metrostroi.SignalEntitiesForNode = {} + -- List of nodes for every signal entity + Metrostroi.SignalEntityPositions = {} + -- List of track switches for every track segment/node + Metrostroi.SwitchesForNode = {} + -- List of trains for every segment/node + Metrostroi.TrainsForNode = {} + -- List of train positions + Metrostroi.TrainPositions = {} + --List of train directions on the way + Metrostroi.TrainDirections = {} + Metrostroi.GetARSJointCache = {} + -- List of stations/platforms + Metrostroi.Stations = {} + + -- List of ARS subsections + Metrostroi.ARSSubSections = {} + + -- List of names for signals + Metrostroi.SignalEntitiesByName = {} + + -- List of names for switches + Metrostroi.SwitchesByName = {} + + -- Should position updates in switches and signals be ignores + Metrostroi.IgnoreEntityUpdates = false + + Metrostroi.OldUpdateTime = 0 +end +Metrostroi.SignalVersion = 1.2 + + +-------------------------------------------------------------------------------- +-- Size of spatial cells into which all the 3D space is divided +local SPATIAL_CELL_WIDTH = 1024 +local SPATIAL_CELL_HEIGHT = 256 + +-- Return spatial cell indexes for given XYZ +local function spatialPosition(pos) + return math.floor(pos.x/SPATIAL_CELL_WIDTH), + math.floor(pos.y/SPATIAL_CELL_WIDTH), + math.floor(pos.z/SPATIAL_CELL_HEIGHT) +end + +local function addLookup(node) + local kx,ky,kz = spatialPosition(node.pos) + + Metrostroi.SpatialLookup[kz] = Metrostroi.SpatialLookup[kz] or {} + Metrostroi.SpatialLookup[kz][kx] = Metrostroi.SpatialLookup[kz][kx] or {} + Metrostroi.SpatialLookup[kz][kx][ky] = Metrostroi.SpatialLookup[kz][kx][ky] or {} + table.insert(Metrostroi.SpatialLookup[kz][kx][ky],node) +end +-- Return list of nodes in spatial cell kx,ky,kz +local empty_table = {} +local function spatialNodes(kx,ky,kz) + if Metrostroi.SpatialLookup[kz] then + if Metrostroi.SpatialLookup[kz][kx] then + return Metrostroi.SpatialLookup[kz][kx][ky] or empty_table + else + return empty_table + end + else + return empty_table + end +end + + +-------------------------------------------------------------------------------- +-- for nodeID,node in Metrostroi.NearestNodes(pos) do ... end +-- +-- This is used for iterating through nodes around given position +-------------------------------------------------------------------------------- +function Metrostroi.NearestNodes(pos) + local kx,ky,kz = spatialPosition(pos) + local t = {} + for x=-1,1 do for y=-1,1 do for z=-1,1 do + table.insert(t,spatialNodes(kx+x,ky+y,kz+z)) + end end end + + local i,j = 0,1 + return function () + -- Find next set of nodes that's not empty + while (j <= #t) and (i >= #t[j]) do + j = j + 1; i = 0 + end + -- Should iterator end + if j > #t then return nil end + + -- Iterate table like normal + i = i + 1 + if i <= #t[j] then return t[j][i].id,t[j][i] end + end +end + +-------------------------------------------------------------------------------- +-- Return position on track for target XYZ +-- +-- Simply checks every line between two nodes, for all ndoes around position +-------------------------------------------------------------------------------- +function Metrostroi.GetPositionOnTrack(pos,ang,opts) + if not opts then opts = empty_table end + + -- Angle can be specified to determine if facing forward or backward + ang = ang or Angle(0,0,0) + + -- Size of box which envelopes region of space that counts as being on track + local X_PAD = 0 + local Y_PAD = opts.y_pad or opts.radius or 384/2 + local Z_PAD = opts.z_pad or 256/2 + + -- Find position on any track + local results = {} + for nodeID,node in Metrostroi.NearestNodes(pos) do + -- Get local coordinate system of a section + local forward = node.dir + local up = Vector(0,0,1) + local right = forward:Cross(up) + + -- Transform position into local coordinates + local local_pos = pos - node.pos + local local_x = local_pos:Dot(forward) + local local_y = local_pos:Dot(right) + local local_z = local_pos:Dot(up) + local yz_delta = math.sqrt(local_y^2 + local_z^2) + + -- Determine if facing forward or backward + local local_dir = ang:Forward() + local dir_delta = local_dir:Dot(forward) + local dir_forward = dir_delta > 0 + local dir_angle = 90-math.deg(math.acos(dir_delta)) + + -- If this position resides on track, add it to results + if ((local_x > -X_PAD) and (local_x < node.vec:Length()+X_PAD) and + (local_y > -Y_PAD) and (local_y < Y_PAD) and + (local_z > -Z_PAD) and (local_z < Z_PAD)) and (node.path ~= opts.ignore_path) then + + table.insert(results,{ + node1 = node, + node2 = node.next, + path = node.path, + + angle = dir_angle, -- Angle between forward vector and axis of track + forward = dir_forward, -- Is facing forward relative to track + x = local_x*0.01905 + node.x, -- Local coordinates in track curvilinear coordinates + y = local_y*0.01905, -- + z = local_z*0.01905, -- + + distance = yz_delta, -- Distance to path axis + }) + end + end + + -- Sort results by distance + table.sort(results, function(a,b) return a.distance < b.distance end) + + -- Return list of positions + return results +end + + +-------------------------------------------------------------------------------- +-- Return XYZ for given position on path +-------------------------------------------------------------------------------- +function Metrostroi.GetTrackPosition(path,x) + -- Build a lookup + if not path.GetTrackPosition then + path.GetTrackPosition = {} + for nodeID,node in ipairs(path) do + if not path.GetTrackPosition[math.floor(node.x/500)] then + path.GetTrackPosition[math.floor(node.x/500)] = nodeID + end + end + end + + -- Find offset on path path.GetTrackPosition[math.floor(x/200)] or + local startNodeID = 1 + for nodeID=startNodeID,#path do + local node = path[nodeID] + if (node.x < x) and (path[nodeID+1]) and (path[nodeID+1].x > x) then + local dir1 = node.dir + local dir2 = path[nodeID+1].dir + local t = (x - node.x)/node.length + return (node.pos+node.vec*t),dir1*(1-t)+dir2*t,node + end + end +end + +function Metrostroi.UpdateSignalNames() + print("Metrostroi: Updating signal names...") + Metrostroi.SignalEntitiesByName = {} + Metrostroi.GetARSJointCache = {} + local entities = ents.FindByClass("gmod_track_signal") + for k,v in pairs(entities) do + if v.Name then + if Metrostroi.SignalEntitiesByName[v.Name] then-- + print(Format("Metrostroi: Signal with this name %s already exists! Check signal names!\nInfo:\n\tFirst signal: %s\n\tPos: %s\n\tSecond signal: %s\n\tPos: %s", + v.Name, Metrostroi.SignalEntitiesByName[v.Name], Metrostroi.SignalEntitiesByName[v.Name]:GetPos(), v, v:GetPos())) + else + Metrostroi.SignalEntitiesByName[v.Name] = v + end + end + end +end +-------------------------------------------------------------------------------- +-- Update list of signal entities and signal positions on track +-------------------------------------------------------------------------------- +function Metrostroi.UpdateSignalEntities() + if Metrostroi.IgnoreEntityUpdates then return end + if CurTime() - Metrostroi.OldUpdateTime < 0.05 then + print("Metrostroi: Stopping all updates!") + Metrostroi.IgnoreEntityUpdates = true + timer.Simple(0.2, function() + print("Metrostroi: Retrieve updates.") + Metrostroi.IgnoreEntityUpdates = false + Metrostroi.UpdateSignalEntities() + Metrostroi.UpdateSwitchEntities() + Metrostroi.UpdateARSSections() + end) + return + end + Metrostroi.OldUpdateTime = CurTime() + local options = { z_pad = 256 } + + Metrostroi.UpdateSignalNames() + + Metrostroi.SignalEntitiesForNode = {} + Metrostroi.SignalEntityPositions = {} + + + + local count = 0 + local repeater = 0 + local entities = ents.FindByClass("gmod_track_signal") + print("Metrostroi: PreInitialize signals") + for k,v in pairs(entities) do + local pos = Metrostroi.GetPositionOnTrack(v:GetPos(),v:GetAngles() - Angle(0,90,0),options)[1] + local pos2 = Metrostroi.GetPositionOnTrack(v:LocalToWorld(Vector(0,10,0)), v:GetAngles() - Angle(0,90,0),options) + if pos then -- FIXME make it select proper path + + Metrostroi.SignalEntitiesForNode[pos.node1] = + Metrostroi.SignalEntitiesForNode[pos.node1] or {} + table.insert(Metrostroi.SignalEntitiesForNode[pos.node1],v) + + -- A signal belongs only to a single track + Metrostroi.SignalEntityPositions[v] = pos + v.TrackPosition = pos + v.TrackX = pos.x + if pos2 and pos2[1] then + v.TrackDir = (pos2[1].x - v.TrackX) < 0 + else + print(Format("Metrostroi: Signal %s, second position not found, system can't detect direction of the signal!",v.Name)) + v.TrackDir = true + end + if not v.ARSOnly then + --v.AutostopPos = Metrostroi.GetTrackPosition(pos.path,v.TrackX - (v.TrackDir and 2.5 or -2.5)) + --if not v.AutostopPos then print(Format("Metrostroi: Signal %s, can't place autostop!",v.Name)) end + end + else + if not v.Routes or v.Routes[1].NextSignal ~= "" then + print(Format("Metrostroi: Signal %s, position not found, system can't detect the track occupation!",v.Name)) + end + end + if not v.Routes[1] then ErrorNoHalt(Format("Metrostroi: Signal %s don't have first route!",v.Name)) end + if v.Routes and v.Routes[1].Repeater then + repeater = repeater + 1 + end + count = count + 1 + v:PreInitalize() + end + print(Format("Metrostroi: Total signals: %u (normal: %u, repeaters: %u)", count, count-repeater, repeater)) +end + +function Metrostroi.PostSignalInitialize() + if Metrostroi.IgnoreEntityUpdates then return end + print("Metrostroi: PostInitialize signals") + local entities = ents.FindByClass("gmod_track_*") + Metrostroi.HaveAuto = false + Metrostroi.HaveSBPP = false + for k,v in pairs(entities) do + if v.PostInitalize then v:PostInitalize() end + if v:GetClass() == "gmod_track_autodrive_plate" then + if v.PlateType==METROSTROI_SBPPSENSOR then Metrostroi.HaveSBPP = true end + if not Metrostroi.HaveAuto and v.PlateType==METROSTROI_ACOIL_DOOR then Metrostroi.HaveAuto = 1 end + if v.PlateType==METROSTROI_ACOIL_DRIVE then Metrostroi.HaveAuto = 2 end + end + end--[[ + print("Metrostroi: Linking swithes to branches") + local function linkSwitch(node,...) + if not node then return end + if node[2] then node = node[2] end + if not node.branches or node.switch ~= nil then return end + if #node.branches ~= 1 then + print("Metrostroi: Bad track branch("..#node.branches.." != 1)") + print(Format("\t Node %d path %d id %d pos %s",0,node.path.id,node.id,node.pos)) + for i,v in ipairs(node.branches) do + print(Format("\tBranch %d path %d id %d pos %s",i,v[2].path.id,v[2].id,v[2].pos)) + end + return + end + + local path = node.path + + local switch,switchDist = false,false + for k,ent in pairs(ents.FindInSphere(node.pos, 512)) do + local entDist = ent:GetPos():Distance(node.pos) + if ent:GetClass() == "gmod_track_switch" and (not switch or entDist < switchDist) then + switch = ent + switchDist = entDist + end + end + if switch then + print(Format("Metrostroi: Path:%d nodeX:%d\tLinked to switch %s",path.id,node.x,switch)) + for i,brTbl in pairs(node.branches) do + local nodeB = brTbl[2] + local pathB = nodeB.path + + + --Try to go 3 nodes forward\backward + local nextNode1,nextNode2 + local nextNodeB1,nextNodeB2 + for i=1,3 do + if pathB[nodeB.id+i] then nextNodeB1 = pathB[nodeB.id+i] end + if pathB[nodeB.id-i] then nextNodeB2 = pathB[nodeB.id-i] end + if path[node.id+i] then nextNode1 = path[node.id+i] end + if path[node.id-i] then nextNode2 = path[node.id-i] end + end + + --Find angles from available nodes + local ang1,ang2,ang3,ang4 + if nextNodeB1 and nextNode1 then ang1 = Metrostroi.VectorAngle(node.pos,nextNodeB1.pos,nextNode1.pos) end + if nextNodeB1 and nextNode2 then ang2 = Metrostroi.VectorAngle(node.pos,nextNodeB1.pos,nextNode2.pos) end + if nextNodeB2 and nextNode1 then ang3 = Metrostroi.VectorAngle(node.pos,nextNodeB2.pos,nextNode1.pos) end + if nextNodeB2 and nextNode2 then ang4 = Metrostroi.VectorAngle(node.pos,nextNodeB2.pos,nextNode2.pos) end + + local id, ang = Metrostroi.GetLowVal(ang1,ang2,ang3,ang4) + + local nextNode ,nextNodeB + nextNodeB = id > 2 and nextNodeB2 or nextNodeB1 + nextNode = id%2 == 0 and nextNode2 or nextNode1 + print("- Metrostroi: Node paths") + print("--","node1.path","node1b.path") + print("--",node.id.."->"..nextNode.id,"",nodeB.id.."->"..nextNodeB.id) + print("--",node.id %.0f m",pos.path.id,pos.x,v.x)) + local node = pos.node1 + while (node) and (node ~= v.node1) do + if (offset > delta_offset) and (math.abs(node.x - v.x) > delta_offset) then + Metrostroi.AddARSSubSection(node,signal) + offset = offset - delta_offset + count = count + 1 + end + + node = node.next + if node then + offset = offset + node.length + end + end + end + --if count == 0 then + --print("Could not add any signals for",k) + --end + end + end + Metrostroi.IgnoreEntityUpdates = false + Metrostroi.UpdateSignalEntities() + + print(Format("Metrostroi: Added %d ARS rail joints",Metrostroi.ARSSubSectionCount)) + ]] +end + + +-------------------------------------------------------------------------------- +-- Scans an isolated track segment and for every useable segment calls func +-------------------------------------------------------------------------------- +local check_table = {} +function Metrostroi.ScanTrack(itype,node,func,x,dir,checked) + local light,ars,switch = itype == "light",itype == "ars",itype == "switch" + -- Check if this node was already scanned + if not node then return end + if not checked then + for k,v in pairs(check_table) do + check_table[k] = nil + end + checked = check_table + end + if checked[node] then return end + checked[node] = true + -- Try to use entire node length by default + local min_x = node.x + local max_x = min_x + node.length + + -- Get range of node which can be actually sensed + local isolateForward = false -- Should scanning continue forward along track + local isolateBackward = false -- Should scanning continue backward along track + if Metrostroi.SignalEntitiesForNode[node] then + for k,v in pairs(Metrostroi.SignalEntitiesForNode[node]) do + local isolating = false + if IsValid(v) then + if light then + isolating = ((v.TrackDir == dir and not v.Routes[v.Route or 1].Repeater) or (v.TrackDir == dir and v.Routes[v.Route or 1].Repeater and tonumber(v.RouteNumber) == 9) or (tonumber(v.RouteNumber) ~= nil and v.Routes[v.Route or 1].Repeater)) and (not v.PassOcc or v.TrackX == x) + end + if ars then + isolating = v.TrackDir == dir and (not v.PassOcc or v.TrackX == x) + end + if switch then + isolating = v.IsolateSwitches + end + --if itype == "ars" then isolating = true end + end + if isolating then + -- If scanning forward, and there's a joint IN FRONT of current X + if dir and (v.TrackX > x) then + max_x = math.min(max_x,v.TrackX) + isolateForward = true + end + -- If scanning forward, and there's a joint in current X + -- This is triggered when traffic light searches for next light from its own X (then + -- scan direction is defined by dir) + if dir and (v.TrackX == x) then + min_x = math.max(min_x,v.TrackX) + isolateBackward = true + end + -- if scanning backward, and there's a joint BEHIND current X + if (not dir) and (v.TrackX < x) then + min_x = math.max(min_x,v.TrackX) + isolateBackward = true + end + -- If scanning backward starting from current X, use dir for guiding scan + if (not dir) and (v.TrackX == x) then + max_x = math.min(max_x,v.TrackX) + isolateForward = true + end + end + end + end + + -- Show the scanned path + --[[if GetConVarNumber("metrostroi_drawdebug") == 1 then + local T = CurTime() + timer.Simple(0.05 + math.random()*0.05,function() + if node.next then + debugoverlay.Line(node.pos,node.next.pos,3,Color((T*1234)%255,(T*12345)%255,(T*12346)%255),true) + end + end) + end]]-- + + -- Call function for the determined portion of the node + local results = {func(node,min_x,max_x)} + if results[1] ~= nil then + return unpack(results) + end + -- First check all the branches, whose positions fall within min_x..max_x + if node.branches and not ars then + for k,v in pairs(node.branches) do + if (v[1] >= min_x) and (v[1] <= max_x) then + -- FIXME: somehow define direction and X! + local results = {Metrostroi.ScanTrack(itype,v[2],func,v[1],true,checked)} + if results[1] ~= nil then return unpack(results) end + end + end + end + -- If not isolated, continue scanning forward from the front end of node + if (dir or switch)and (not isolateForward) then + local results = {Metrostroi.ScanTrack(itype,node.next,func,max_x,true,checked)} + if results[1] ~= nil then + return unpack(results) + end + end + -- If not isolated, continue scanning backward from the rear end of node + if (not dir or switch) and (not isolateBackward) then + local results = {Metrostroi.ScanTrack(itype,node.prev,func,min_x,false,checked)} + if results[1] ~= nil then return unpack(results) end + end +end + +-------------------------------------------------------------------------------- +-- Get one next traffic light within current isolated segment. Ignores ARS sections. +-------------------------------------------------------------------------------- +function Metrostroi.GetSignalByName(signal_name) + return Metrostroi.SignalEntitiesByName[signal_name] +end + +-------------------------------------------------------------------------------- +-- Get one next switch by name +-------------------------------------------------------------------------------- +function Metrostroi.GetSwitchByName(switch_name) + if Metrostroi.SwitchesByName[switch_name] then + return Metrostroi.SwitchesByName[switch_name] + end + switch_name = tostring(switch_name) + local Path = tonumber(switch_name:sub(1,1)) + local ID = tonumber(switch_name:sub(2,-1)) + if not Metrostroi.SwitchesByName[Path] then return end + if switch_name:find("/") then + if not Metrostroi.SwitchesByName[switch_name] then + local Switch = string.Explode("/",switch_name) + Path = tonumber(Switch[1]) + ID = tonumber(Switch[2]) + if not Metrostroi.SwitchesByName[Path] then return end + Metrostroi.SwitchesByName[switch_name] = Metrostroi.SwitchesByName[Path][ID] + end + return Metrostroi.SwitchesByName[switch_name] + end + return Metrostroi.SwitchesByName[Path] and Metrostroi.SwitchesByName[Path][ID] or nil +end + +-------------------------------------------------------------------------------- +-- Get one next traffic light within current isolated segment. Ignores ARS sections. +-------------------------------------------------------------------------------- +function Metrostroi.GetNextTrafficLight(src_node,x,dir,include_ars_sections,override_type) + return Metrostroi.ScanTrack(override_type or "light",src_node,function(node,min_x,max_x) + -- If there are no signals in node, keep scanning + if (not Metrostroi.SignalEntitiesForNode[node]) or (#Metrostroi.SignalEntitiesForNode[node] == 0) then + return + end + + -- For every signal entity in node, check if it rests on path + for k,v in pairs(Metrostroi.SignalEntitiesForNode[node]) do + if IsValid(v) and + ((include_ars_sections) and (v.TrackX ~= x) and --(v:GetTrafficLights() > 0) or + (v.TrackX >= min_x) and (v.TrackX <= max_x)) then + return v + end + end + end,x,dir) +end + +local function inRange(x, minx, maxx) + return minx < x and x < maxx +end +local function ARSJointScan(node,min_x,max_x,train,dir,x) + -- If there are no signals in node, keep scanning + local tnode = Metrostroi.TrainPositions[train] and Metrostroi.TrainPositions[train][1] + if IsValid(train) and tnode and Metrostroi.TrainsForNode[node] and #Metrostroi.TrainsForNode[node] > 0 then + local x1 = tnode.x+train.PosX + for k,v in pairs(Metrostroi.TrainsForNode[node]) do + --local found = false + --for _,train in pairs(train.WagonList) do if v == train then found=true;break end end + --if found then continue end + if v == train or not IsValid(v) then continue end + + local pos = Metrostroi.TrainPositions[v] + --[[ if v ~= train and ( + dir and tnode.x+train.PosX < pos.x+v.PosX or + not dir and tnode.x+train.PosX > pos.x+v.PosX + ) then return--]] + --print(train,v,pos[1].x,tnode.x) + if pos[1]==tnode then continue end + for k2,v2 in pairs(pos) do + if v2.path == node.path then + --local pos1 = Metrostroi.GetPositionOnTrack(v:LocalToWorld(Vector(0,1,0)), v:GetAngles()) + --if pos1 then pos1 = pos1[1] end + --if pos1 and (((pos1.x - v2.x) < 0 and not dir) or ((pos1.x - v2.x) > 0 and dir)) then continue end + --local TrackX = v2.TrackX + --local x1 = v2.x-1100*0.5 + --local x2 = v2.x+1100*0.5 + + local x2 = v2.x+v.PosX + if dir and x1x2 then return false end + + --[=[ if ((x1 >= min_x) and (x1 <= max_x)) then--[[ or + ((x2 >= min_x) and (x2 <= max_x)) or + ((x1 <= min_x) and (x2 >= max_x)) then]] + --return false--return true,v + end--]=] + end + end + end + end + if (not Metrostroi.SignalEntitiesForNode[node]) or (#Metrostroi.SignalEntitiesForNode[node] == 0) then + return + end + -- For every signal entity in node, check if it rests on path + for k,v in pairs(Metrostroi.SignalEntitiesForNode[node]) do + if IsValid(v) then + --print(dir,v.Name,v.TrackDir,train) + if dir ~= v.TrackDir then continue end + if ((v.OutputARS ~= 0) and (v.TrackX ~= x) and + (v.TrackX >= min_x) and (v.TrackX <= max_x)) then + if dir and (v.TrackX > x) then return v end + if (not dir) and (v.TrackX < x) then return v end + --print("i lose signal") + end + end + end +end +local function ARSJointScanBack(node,min_x,max_x,train,dir,x,forw) + if (not Metrostroi.SignalEntitiesForNode[node]) or (#Metrostroi.SignalEntitiesForNode[node] == 0) then + return + end + local node1 = Metrostroi.TrainPositions[train] and Metrostroi.TrainPositions[train][1] + if not node1 then return false end + if node.path.id ~= node1.path.id then return end + -- For every signal entity in node, check if it rests on path + for k,v in pairs(Metrostroi.SignalEntitiesForNode[node]) do + if IsValid(v) then + if dir == v.TrackDir then continue end + --if forw == v then continue end + if ((v.OutputARS ~= 0) and (v.TrackX ~= x) and + (v.TrackX <= min_x) and (v.TrackX >= max_x)) then + if dir and (v.TrackX > x) then return v end + if (not dir) and (v.TrackX < x) then return v end + --print("i lose signal") + end + end + end +end +-------------------------------------------------------------------------------- +-- Get next/previous ARS section +-------------------------------------------------------------------------------- +function Metrostroi.GetARSJoint(src_node,x,dir,train) + local forw,back + if train then + --[[ + local data = Metrostroi.GetARSJointCache[train:EntIndex()] + if data then + if not train.SpeedSing or (math.abs(train.Speed*train.SpeedSing or 99) > 2 and ((train.Speed*train.SpeedSing > 0 and data.speed > 0) or (train.Speed*train.SpeedSing < 0 and data.speed < 0))) then + if inRange(x,data.StartX,data.EndX) or inRange(x,data.EndX,data.StartX) then + --print(data.StartX-data.EndX,train:EntIndex()) + if data.signal and data.signal.TrackPosition and x - data.signal.TrackPosition.x > 4000 then print("Metrostroi:GetARSJoint: Signal is too far") data.signal = nil return end + if data.signal and data.signal.TrackPosition and data.signal.TrackPosition.x - x > 4000 then print("Metrostroi:GetARSJoint: Signal is too far") data.signal = nil return end + --if x < data.signal.TrackPosition.x then print(2) end + if src_node.path.id == data.pathID then + if data.signal then return data.signal,data.back end + end + end + end + end + forw = Metrostroi.ScanTrack("ars",src_node,function(node,min_x,max_x) return ARSJointScan(node,min_x,max_x,train,dir,x) end,x,dir) + back = Metrostroi.ScanTrack("ars",src_node,function(node,min_x,max_x) return ARSJointScanBack(node,max_x,min_x,train,not dir,x,forw) end,x,not dir) + if IsValid(forw) and IsValid(back) and false then + Metrostroi.GetARSJointCache[train:EntIndex()] = { + StartX = forw.TrackPosition.x, + EndX = back.TrackPosition.x, + pathID = src_node.path.id, + signal = forw, + back = back, + speed = train.SpeedSign*train.Speed, + } + else + Metrostroi.GetARSJointCache[train:EntIndex()] = nil + end]] + forw = Metrostroi.ScanTrack("ars",src_node,function(node,min_x,max_x) return ARSJointScan(node,min_x,max_x,train,dir,x) end,x,dir) + back = Metrostroi.ScanTrack("ars",src_node,function(node,min_x,max_x) return ARSJointScanBack(node,max_x,min_x,train,not dir,x,forw) end,x,not dir) + else + forw = Metrostroi.ScanTrack("ars",src_node,function(node,min_x,max_x) return ARSJointScan(node,min_x,max_x,train,dir,x) end,x,dir) + end + return forw,back +end + + +-------------------------------------------------------------------------------- +-- Get all track switches in an isolated section +-------------------------------------------------------------------------------- +function Metrostroi.GetTrackSwitches(src_node,x,dir) + local switches = {} + Metrostroi.ScanTrack("switch",src_node,function(node,min_x,max_x) + -- If there are no signals in node, keep scanning + if (not Metrostroi.SwitchesForNode[node]) or (#Metrostroi.SwitchesForNode[node] == 0) then + return + end + + -- For every entity in node, check if it rests on path + for k,v in pairs(Metrostroi.SwitchesForNode[node]) do + if v.TrackPosition and + (v.TrackPosition.x >= min_x) and (v.TrackPosition.x <= max_x) then + table.insert(switches,v) + end + end + end,x,dir) + + -- Find similar switches and add them even if they aren't on the same section + local ent_list = ents.FindByClass("gmod_track_switch") + local extra_switches = {} + for k,v in pairs(switches) do + if v.TrackSwitches[1] then + local name = v.TrackSwitches[1]:GetName() + for _,v2 in pairs(ent_list) do + if v2.TrackSwitches[1] and (v2 ~= v) and (name == v2.TrackSwitches[1]:GetName()) then + table.insert(extra_switches,v2) + end + end + end + end + + for k,v in pairs(extra_switches) do table.insert(switches,v) end + return switches +end + + +-------------------------------------------------------------------------------- +-- Check if there is a train somewhere in the local isolated section. This +-- ignores ARS subsections (if they are unisolated), accounts for traffic lights +-------------------------------------------------------------------------------- +function Metrostroi.IsTrackOccupied(src_node,x,dir,t) + local Trains = {} + Metrostroi.ScanTrack(t or "light",src_node,function(node,min_x,max_x) + -- If there are no trains in node, keep scanning + if (not Metrostroi.TrainsForNode[node]) or (#Metrostroi.TrainsForNode[node] == 0) then + return + end + + -- For every train in node, for every path it rests on, check if it's in range + --print("SCAN TRACK",node.id,min_x,max_x) + for k,v in pairs(Metrostroi.TrainsForNode[node]) do + local pos = Metrostroi.TrainPositions[v] + for k2,v2 in pairs(pos) do + if v2.path == node.path then + --local pos1 = Metrostroi.GetPositionOnTrack(v:LocalToWorld(Vector(0,1,0)), v:GetAngles()) + --if pos1 then pos1 = pos1[1] end + --if pos1 and (((pos1.x - v2.x) < 0 and not dir) or ((pos1.x - v2.x) > 0 and dir)) then continue end + --local TrackX = v2.TrackX + --local x1 = v2.x-1100*0.5 + --local x2 = v2.x+1100*0.5 + --print(x1,x2) + local x1,x2 = v2.x,v2.x + if ((x1 >= min_x) and (x1 <= max_x)) or + ((x2 >= min_x) and (x2 <= max_x)) or + ((x1 <= min_x) and (x2 >= max_x)) then + table.insert(Trains,v)--return true,v + end + end + end + end + end,x,dir) + + return #Trains > 0,Trains[#Trains],Trains[1] +end +-------------------------------------------------------------------------------- +-- Update train positions +-------------------------------------------------------------------------------- +function Metrostroi.PredictTrainPositions() + for train in pairs(Metrostroi.SpawnedTrains) do + if not IsValid(train) then Metrostroi.SpawnedTrains[train] = nil return end + local localSpeed = train:GetVelocity():Dot(train:GetAngles():Forward()) * 0.01905 + local pos = Metrostroi.TrainPositions[train];pos = pos and pos[1] + if not pos then continue end + if Metrostroi.TrainDirections[train] then + train.PosX = train.PosX + localSpeed*FrameTime() + else + train.PosX = train.PosX - localSpeed*FrameTime() + end + train.OldPos = pos.x+train.PosX + end +end +function Metrostroi.UpdateTrainPositions() + Metrostroi.TrainPositions = {} + Metrostroi.TrainDirections = {} + Metrostroi.TrainsForNode = {} + -- Query all train types + for train in pairs(Metrostroi.SpawnedTrains) do + if not IsValid(train) then continue end + if train.ALS_ARS and train.ALS_ARS.IgnoreThisARS or train.NoTrain then continue end + train.PosX = 0--(train:GetVelocity():Dot(train:GetAngles():Forward()) * 0.01905)*FrameTime() + local pos1e = IsValid(train.FrontBogey) and train.FrontBogey or train + local positions = Metrostroi.GetPositionOnTrack(pos1e:GetPos(),train:GetAngles()) + local positions2 + if not positions or not positions[1] then + positions = Metrostroi.GetPositionOnTrack(train:LocalToWorld(Vector(0,0,0)),train:GetAngles()) + positions2 = Metrostroi.GetPositionOnTrack(train:LocalToWorld(Vector(25,0,0)), train:GetAngles()) + else + positions2 = Metrostroi.GetPositionOnTrack(pos1e:LocalToWorld(Vector(-25,0,0)), train:GetAngles()) + end + Metrostroi.TrainPositions[train] = {} + Metrostroi.TrainDirections[train] = true + if positions and positions[1] then + Metrostroi.TrainPositions[train][1] = positions[1] + if positions2 and positions2[1] then + Metrostroi.TrainDirections[train] = (positions2[1].x - positions[1].x) > 0 + end + end + + --print("TRAIN",train,positions[1].path.id,positions2[1].path.id) + --for k,v in pairs(Metrostroi.TrainPositions[train]) do + --print(Format("\t[%d] Path #%d: (%.2f x %.2f x %.2f) m Facing %s",k,v.path.id,v.x,v.y,v.z,v.forward and "forward" or "backward")) + --end + + for _,pos in pairs(Metrostroi.TrainPositions[train]) do + Metrostroi.TrainsForNode[pos.node1] = Metrostroi.TrainsForNode[pos.node1] or {} + table.insert(Metrostroi.TrainsForNode[pos.node1],train) + end + end +end +local PervTimerIter = CurTime() +hook.Add( "Think", "Metrostroi_TrainPositionTimer",function() + if CurTime()-PervTimerIter <= 0.15 then + Metrostroi.PredictTrainPositions() + else + PervTimerIter = CurTime() + Metrostroi.UpdateTrainPositions() + end +end) + + +-------------------------------------------------------------------------------- +-- Update stations list +-------------------------------------------------------------------------------- +function Metrostroi.UpdateStations() + Metrostroi.Stations = {} + local platforms = ents.FindByClass("gmod_track_platform") + for _,platform in pairs(platforms) do + local station = Metrostroi.Stations[platform.StationIndex] or {} + Metrostroi.Stations[platform.StationIndex] = station + + -- Position + local dir = platform.PlatformEnd - platform.PlatformStart + local pos1 = Metrostroi.GetPositionOnTrack(platform.PlatformStart,dir:Angle())[1] + local pos2 = Metrostroi.GetPositionOnTrack(platform.PlatformEnd,dir:Angle())[1] + if pos1 and pos2 then + -- Add platform to station + local platform_data = { + x_start = pos1.x, + x_end = pos2.x, + length = math.abs(pos2.x - pos1.x), + node_start = pos1.node1, + node_end = pos2.node1, + ent = platform, + } + if station[platform.PlatformIndex] then + print(Format("Metrostroi: Error, station %03d has two platforms %d with same index!",platform.StationIndex,platform.PlatformIndex)) + else + station[platform.PlatformIndex] = platform_data + end + + -- Print information + print(Format("\t[%03d][%d] %.3f-%.3f km (%.1f m) on path %d", + platform.StationIndex,platform.PlatformIndex,pos1.x*1e-3,pos2.x*1e-3, + platform_data.length,platform_data.node_start.path.id)) + else + print(Format("Metrostroi: Error, station %03d platform %d, cant find pos! \n\tStart%s \n\tEnd:%s",platform.StationIndex,platform.PlatformIndex,platform.PlatformStart,platform.PlatformEnd)) + end + end +end + + +-------------------------------------------------------------------------------- +-- Get travel time between two nodes in seconds +-------------------------------------------------------------------------------- +function Metrostroi.GetTravelTime(src,dest) + -- Determine direction of travel + --assert(src.path == dest.path) + local direction = src.x < dest.x + + -- Accumulate travel time + local travel_time = 0 + local travel_dist = 0 + local travel_speed = 20 + local iter = 0 + function scan(node,path) + local oldx + local oldars + while (node) and (node ~= dest) do + local ars_speed + local ars_joint = Metrostroi.GetARSJoint(node,node.x+0.01,path or true) + if ars_joint then + --[[if oldx and oldx ~= ars_joint.TrackPosition.x then + print(Format("\t\t\t%.2f:\t%s->%s",(ars_joint.TrackPosition.x - oldx)/18.8,oldars.Name,ars_joint.Name)) + end + oldx = ars_joint.TrackPosition.x + oldars = ars_joint]] + --print(ars_joint.Name) + local ARSLimit = ars_joint:GetMaxARS() + --print(ARSLimit) + if ARSLimit >= 4 then + ars_speed = ARSLimit*10 + end + --print(ars_speed) + end + if ars_speed then travel_speed = ars_speed end + --print(Format("[%03d] %.2f m V = %02d km/h",node.id,node.length,ars_speed or 0)) + + -- Assume 70% of travel speed + local speed = travel_speed * 0.82 + + -- Add to travel time + travel_dist = travel_dist + node.length + travel_time = travel_time + (node.length / (speed/3.6)) + node = node.next + if not node then break end + if src.path == dest.path and node.branches and node.branches[1][2].path == src.path then scan(node,src.x > node.branches[1][2].x) end + if src.path == dest.path and node.branches and node.branches[2] and node.branches[2][2].path == src.path then scan(node,src.x > node.branches[1][1].x) end + assert(iter < 10000, "OH SHI~") + iter = iter + 1 + end + end + scan(src) + + return travel_time,travel_dist +end + + +-------------------------------------------------------------------------------- +-- Load track definition and sign definitions +-------------------------------------------------------------------------------- + +local function getFile(path,name,id) + local data,found + if file.Exists(Format(path..".txt",name),"DATA") then + print(Format("Metrostroi: Loading %s definition...",id)) + data= util.JSONToTable(file.Read(Format(path..".txt",name),"DATA")) + found = true + end + if not data and file.Exists(Format(path..".lua",name),"LUA") then + print(Format("Metrostroi: Loading default %s definition...",id)) + data= util.JSONToTable(file.Read(Format(path..".lua",name),"LUA")) + found = true + end + if not found then + print(Format("%s definition file not found: %s",id,Format(path,name))) + return + elseif not data then + print(Format("Parse error in %s %s definition JSON",id,Format(path,name))) + return + end + return data +end + +local function loadTracks(name) + local track = getFile("metrostroi_data/track_%s",name,"Track") or {} + -- Quick small hack to load tracks as well + if Metrostroi.TrackEditor then + Metrostroi.TrackEditor.Paths = track + end + + -- Prepare spatial lookup table + Metrostroi.SpatialLookup = {} + + -- Create paths definition + Metrostroi.Paths = {} + for pathID,path in pairs(track) do + local currentPath = { id = pathID } + Metrostroi.Paths[pathID] = currentPath + + -- Count length of path and offset in every node + currentPath.length = 0 + local prevPos,prevNode + for nodeID,nodePos in pairs(path) do + -- Count distance + local distance = 0 + if prevPos then + distance = prevPos:Distance(nodePos)*0.01905 + currentPath.length = currentPath.length + distance + end + + -- Add a node + currentPath[nodeID] = { + id = nodeID, + path = currentPath, + + pos = nodePos, + x = currentPath.length, + prev = prevNode, + } + if prevNode then + prevNode.next = currentPath[nodeID] + prevNode.dir = (nodePos - prevNode.pos):GetNormalized() + prevNode.vec = nodePos - prevNode.pos + prevNode.length = distance + end + + -- Add to spatial lookup + addLookup(currentPath[nodeID]) + prevPos = nodePos + prevNode = currentPath[nodeID] + end + + if prevNode then + prevNode.next = nil + prevNode.dir = Vector(0,0,0) + prevNode.vec = Vector(0,0,0) + prevNode.length = 0 + end + end + + -- Find places where tracks link up together + for pathID,path in pairs(Metrostroi.Paths) do + if #path == 0 then break end + -- Find position of end nodes + local node1,node2 = path[1],path[#path] + local ignore_path = path + if game.GetMap():find("orange") and node1.path.id == 1 then + ignore_path = nil + --print(node1) + end + local pos1 = Metrostroi.GetPositionOnTrack(node1.pos,nil,{ ignore_path = ignore_path }) + local pos2 = Metrostroi.GetPositionOnTrack(node2.pos,nil,{ ignore_path = ignore_path }) + -- Create connection + local join1,join2 + if pos1[1] then join1 = pos1[1].node1 end + if pos2[1] then join2 = pos2[1].node1 end + + -- Record it + if join1 then + join1.branches = join1.branches or {} + table.insert(join1.branches,{ pos1[1].x, node1 }) + node1.branches = node1.branches or {} + table.insert(node1.branches,{ node1.x, join1 }) + end + if join2 then + join2.branches = join2.branches or {} + table.insert(join2.branches,{ pos2[1].x, node2 }) + node2.branches = node2.branches or {} + table.insert(node2.branches,{ node2.x, join2 }) + end + end +end +local function loadSigns(name,keep) + if keep then return end + print("Metrostroi: Loading signs, signals, switches...") + local signs = getFile("metrostroi_data/signs_%s",name,"Signal") + + if not signs then print("Metrostroi: Loading canceled, no file found") return end + + local signals_ents = ents.FindByClass("gmod_track_signal") + for k,v in pairs(signals_ents) do SafeRemoveEntity(v) end + local switch_ents = ents.FindByClass("gmod_track_switch") + for k,v in pairs(switch_ents) do SafeRemoveEntity(v) end + local signs_ents = ents.FindByClass("gmod_track_signs") + for k,v in pairs(signs_ents) do SafeRemoveEntity(v) end + + --Some compatibility checks + local version + version = signs.Version + if not version then + print("Metrostroi: This signs file is incompatible with signs version") + signs = nil + else + signs.Version = nil + end + local TwoToSix = false + if version ~= 1.2 then + print(Format("Metrostroi: !!Converting from version %.1f!! signals converted to %s.",version,TwoToSix and "2/6" or "1/5")) + if game.GetMap():find("gm_mus_loop") then + TwoToSix = true + end + end + + -- Create new entities (add a delay so the old entities clean up) + for k,v in pairs(signs) do + local ent = ents.Create(v.Class) + if IsValid(ent) then + ent:SetPos(v.Pos) + ent:SetAngles(v.Angles) + if v.Class == "gmod_track_switch" then + ---CHANGE + ent:SetChannel(v.Channel or 1) + ent.LockedSignal = v.LockedSignal + ent.NotChangePos = v.NotChangePos + ent.Invertred = v.Invertred + ent.Name = v.Name, + ent:Spawn() + end + if v.Class == "gmod_track_signal" and v.Routes then + ent.SignalType = v.SignalType + ent.Name = v.Name + ent.RouteNumberSetup = v.RouteNumberSetup + ent.LensesStr = v.LensesStr + ent.Lenses = string.Explode("-",v.LensesStr) + ent.RouteNumber = v.RouteNumber + ent.IsolateSwitches = v.IsolateSwitches + ent.Routes = v.Routes + ent.ARSOnly = v.ARSOnly + ent.Left = v.Left + ent.Double = v.Double + ent.DoubleL = v.DoubleL + ent.Approve0 = v.Approve0 + ent.TwoToSix = v.TwoToSix + ent.NonAutoStop = v.NonAutoStop + ent.PassOcc = v.PassOcc + ent.Lenses = string.Explode("-",ent.LensesStr) + ent.InS = nil + for i = 1,#ent.Lenses do + if ent.Lenses[i]:find("W") then + ent.InS = i + end + end + if version == 1 and ent.Left then + print(Format("Metrostroi: !!Converting from version %.1f!! signal %s rotated.",version,ent.Name)) + ent:SetAngles(ent:LocalToWorldAngles(ent:WorldToLocalAngles(ent:GetAngles())+Angle(0,180,0))) + end + if version ~= 1.2 then ent.TwoToSix = TwoToSix end + ent:Spawn() + elseif v.Class == "gmod_track_signs" then + ent.SignType = v.SignType + ent.YOffset = v.YOffset + ent.ZOffset = v.ZOffset + ent.Left = v.Left, + ent:Spawn() + ent:SendUpdate() + elseif v.Class == "gmod_track_signal" then ent:Remove() end + end + end +end +local function loadAutoSigns(name,keep) + if keep then return end + local auto = getFile("metrostroi_data/auto_%s",name,"Autodrive") + + if not auto then return end + local auto_ents = ents.FindByClass("gmod_track_autodrive_plate") + for _,v in pairs(auto_ents) do SafeRemoveEntity(v) end + Metrostroi.HaveSBPP = false + Metrostroi.HaveAuto = false + for k,v in pairs(auto) do + local ent = ents.Create("gmod_track_autodrive_plate") + if IsValid(ent) and v.Model then + ent:SetPos(v.Pos) + ent:SetAngles(v.Angles) + ent.PlateType = v.Type + ent.Right = v.Right + ent.Mode = v.Mode + ent.Model = v.Model + ent.StationID = v.StationID + ent.StationPath = v.StationPath + ent.UPPS = v.UPPS + ent.DistanceToOPV = v.DistanceToOPV + + ent.SBPPType = v.SBPPType + ent.IsDeadlock = v.IsDeadlock + ent.DriveMode = v.DriveMode + ent.RightDoors = v.RightDoors + ent.WTime = v.WTime + ent.RKPos = v.RKPos + + ent:SetModel(ent.Model) + ent:Spawn() + --[[ if ent.PlateType <= 2 then + Metrostroi.HaveAuto = true + end--]] + if ent.SBPPType==3 and not ent.BrakeProps then + ent.BrakeProps = {} + for i=-1,1,2 do + local entL = ents.Create("gmod_track_autodrive_plate") + entL.Model = "models/metrostroi/signals/autodrive/rfid.mdl" + entL:SetPos(v.Pos + (v.Angles:Right()*(-1.5*i)/0.01905)) + entL:SetModel(v.Model) + entL:SetAngles(v.Angles) + entL:Spawn() + entL.Linked = ent + entL.SBPPType = ent.SBPPType + entL.PlateType = METROSTROI_SBPPSENSOR + table.insert(ent.BrakeProps,entL) + end + end + end + end +end +local function loadPAData(name) + local pa = getFile("metrostroi_data/pa_%s",name,"PAData") + + if not pa then return end + Metrostroi.PAMConfTest = pa + if pa.markers then + for k,v in pairs(pa.markers) do + if not v.TrackPath or not v.TrackX then continue end + local ent = ents.Create("gmod_track_pa_marker") + if IsValid(ent) then + ent:SetPos(v.Pos) + ent:SetAngles(v.Angles) + if Metrostroi.Paths[v.TrackPath] then + ent:SetTrackPosition(Metrostroi.Paths[v.TrackPath],v.TrackX) + end + ent.TrackPath = v.TrackPath + ent.TrackX = v.TrackX + ent.PAType = v.PAType + if ent.PAType == 1 then + ent.PAStationPath = tonumber(v.PAStationPath) + ent.PAStationID = tonumber(v.PAStationID) + ent.PAStationName = v.PAStationName + ent.PALastStation = v.PALastStation + ent.PAStationRightDoors = v.PAStationRightDoors + ent.PAStationHorlift = v.PAStationHorlift + ent.PAStationHasSwtiches = v.PAStationHasSwtiches + ent.PAStationCorrection = tonumber(v.PAStationCorrection) + if ent.PALastStation then + ent.PALastStationName = v.PALastStationName + ent.PAWrongPath = v.PAWrongPath + ent.PADeadlockStart = tonumber(v.PADeadlockStart) + ent.PADeadlockEnd = tonumber(v.PADeadlockEnd) + ent.PALineChange = v.PALineChange + if ent.PALineChange then + ent.PALineChangeStationPath = tonumber(v.PALineChangeStationPath) + ent.PALineChangeStationID = tonumber(v.PALineChangeStationID) + end + end + end + ent:Spawn() + end + end + end + Metrostroi.PARebuildStations() +end + +function Metrostroi.Load(name,keep_signs) + name = name or game.GetMap() + + loadTracks(name) + + -- Initialize stations list + Metrostroi.UpdateStations() + -- Print info + Metrostroi.PrintStatistics() + + -- Ignore updates to prevent created/removed switches from constantly updating table of positions + Metrostroi.IgnoreEntityUpdates = true + loadSigns(name,keep_signs) + loadAutoSigns(name,keep_signs) + + local pa_ents = ents.FindByClass("gmod_track_pa_marker") + for _,v in pairs(pa_ents) do SafeRemoveEntity(v) end + loadPAData(name) + timer.Simple(0.05,function() + -- No more ignoring updates + Metrostroi.IgnoreEntityUpdates = false + -- Load ARS entities + Metrostroi.UpdateSignalEntities() + -- Load switches + Metrostroi.UpdateSwitchEntities() + -- Add additional ARS sections + Metrostroi.UpdateARSSections() + end) + + -- Load schedules data + local sched_data = getFile("metrostroi_data/sched_%s",name,"schedules") + if sched_data then + Metrostroi.LoadSchedulesData(sched_data) + else + print("Metrostroi: Could not load schedules configuration!") + end + + -- Initialize signs + print("Metrostroi: Initializing signs...") + Metrostroi.InitializeSigns() +end + +-------------------------------------------------------------------------------- +-- Save track & sign definitions +-------------------------------------------------------------------------------- +function Metrostroi.Save(name) + if not file.Exists("metrostroi_data","DATA") then + file.CreateDir("metrostroi_data") + end + name = name or game.GetMap() + + -- Format signs, signal, switch data + local signs = {} + local signals_ents = ents.FindByClass("gmod_track_signal") + if not signals_ents then print("Metrostroi: Signs file is corrupted!") end + for k,v in pairs(signals_ents) do + if not Metrostroi.ARSSubSections[v] then + local Routes = table.Copy(v.Routes) + for k,v in pairs(Routes) do + v.LightsExploded = nil + v.IsOpened = nil + end + table.insert(signs,{ + Class = "gmod_track_signal", + Pos = v:GetPos(), + Angles = v:GetAngles(), + SignalType = v.SignalType, + Name = v.Name, + RouteNumberSetup = v.RouteNumberSetup, + LensesStr = v.LensesStr, + RouteNumber = v.RouteNumber, + IsolateSwitches = v.IsolateSwitches, + ARSOnly = v.ARSOnly, + Routes = Routes, + Approve0 = v.Approve0, + TwoToSix = v.TwoToSix, + NonAutoStop = v.NonAutoStop, + Left = v.Left, + Double = v.Double, + DoubleL = v.DoubleL, + AutoStop = v.AutoStop, + PassOcc = v.PassOcc, + }) + end + end + local switch_ents = ents.FindByClass("gmod_track_switch") + for k,v in pairs(switch_ents) do + table.insert(signs,{ + Class = "gmod_track_switch", + Pos = v:GetPos(), + Angles = v:GetAngles(), + Name = v.Name, + Channel = v:GetChannel(), + NotChangePos = v.NotChangePos, + LockedSignal = v.LockedSignal, + Invertred = v.Invertred, + }) + end + local signs_ents = ents.FindByClass("gmod_track_signs") + for k,v in pairs(signs_ents) do + table.insert(signs,{ + Class = "gmod_track_signs", + Pos = v:GetPos(), + Angles = v:GetAngles(), + SignType = v.SignType, + YOffset = v.YOffset, + ZOffset = v.ZOffset, + Left = v.Left, + }) + end + signs.Version = Metrostroi.SignalVersion + -- Save data + print("Metrostroi: Saving signs and track definition...") + local data = util.TableToJSON(signs,true) + file.Write(string.format("metrostroi_data/signs_%s.txt",name),data) + print(Format("Saved to metrostroi_data/signs_%s.txt",name)) + + local auto = {} + local auto_ents = ents.FindByClass("gmod_track_autodrive_plate") + for k,v in pairs(auto_ents) do + if not v.Linked then + table.insert(auto,{ + Pos = v:GetPos(), + Angles = v:GetAngles(), + Type = v.PlateType, + Right = v.Right, + Mode = v.Mode, + Model = v.Model, + StationID = v.StationID, + StationPath = v.StationPath, + + --UPPS + UPPS = v.UPPS, + DistanceToOPV = v.DistanceToOPV, + + SBPPType = v.SBPPType, + IsDeadlock = v.IsDeadlock, + DriveMode = v.DriveMode, + RightDoors = v.RightDoors, + WTime = v.WTime, + RKPos = v.RKPos, + }) + end + end + print("Metrostroi: Saving auto definition...") + local adata = util.TableToJSON(auto,true) + file.Write(string.format("metrostroi_data/auto_%s.txt",name),adata) + print(Format("Saved to metrostroi_data/auto_%s.txt",name)) + + local pa_ents = ents.FindByClass("gmod_track_pa_marker") + if Metrostroi.PAMConfTest then + print("Metrostroi: Saving PAData definition...") + local pa = table.Copy(Metrostroi.PAMConfTest) + pa.markers = {} + for k,v in pairs(pa_ents) do + if not v.UPPS and v.PAType == 1 then + table.insert(pa.markers,{ + Pos = v:GetPos(), + Angles = v:GetAngles(), + PAType = v.PAType, + PAStationPath = tonumber(v.PAStationPath), + PAStationID = tonumber(v.PAStationID), + PAStationName = v.PAStationName, + PALastStation = v.PALastStation, + PAWrongPath = v.PALastStation and v.PAWrongPath, + PADeadlockStart = v.PALastStation and v.PADeadlockStart, + PADeadlockEnd = v.PALastStation and v.PADeadlockEnd, + PALineChange = v.PALastStation and v.PALineChange, + PALineChangeStationPath = v.PALastStation and v.PALineChange and tonumber(v.PALineChangeStationPath), + PALineChangeStationID = v.PALastStation and v.PALineChange and tonumber(v.PALineChangeStationID), + PALastStationName = v.PALastStation and v.PALastStationName or nil, + PAStationRightDoors = v.PAStationRightDoors, + PAStationHorlift = v.PAStationHorlift, + PAStationHasSwtiches = v.PAStationHasSwtiches, + PAStationCorrection = tonumber(v.PAStationCorrection), + TrackPath = v.TrackPath, + TrackX = v.TrackX, + }) + end + end + local data = util.TableToJSON(pa,true) + file.Write(string.format("metrostroi_data/pa_%s.txt",name),data) + print(Format("Saved to metrostroi_data/pa_%s.txt",name)) + end +end + + +-------------------------------------------------------------------------------- +-- Concommands and automatic loading of rail network +-------------------------------------------------------------------------------- +hook.Add("Initialize", "Metrostroi_MapInitialize", function() + timer.Simple(2.0,Metrostroi.Load) +end) +hook.Add("Initialize", "Metrostroi_MapInitialize", function() + timer.Simple(2.0,Metrostroi.Load) +end) + +hook.Add("PreCleanupMap", "Metrostroi_PreCleanupMap", function() + Metrostroi.IgnoreEntityUpdates = true +end) +hook.Add("PostCleanupMap", "Metrostroi_PostCleanupMap", function() + timer.Simple(0.05,function() + Metrostroi.IgnoreEntityUpdates = false + Metrostroi.UpdateSignalEntities() + Metrostroi.UpdateSwitchEntities() + Metrostroi.UpdateARSSections() + end) +end) + +concommand.Add("metrostroi_save", function(ply, _, args) + if (ply:IsValid()) and (not ply:IsAdmin()) then return end + Metrostroi.Save() +end) +concommand.Add("metrostroi_reload", function(ply, _, args) + if (ply:IsValid()) and (not ply:IsAdmin()) then return end-- Load schedules data + print("Metrostroi: Loading schedules configuration...") + local sched_data = util.JSONToTable(file.Read(string.format("metrostroi_data/sched_%s.txt", game.GetMap())) or "") + if not sched_data then sched_data = util.JSONToTable(file.Read(string.format("metrostroi_data/sched_%s.lua", game.GetMap())) or "","LUA") end + if sched_data then + Metrostroi.LoadSchedulesData(sched_data) + else + print("Metrostroi: Could not load schedules configuration!") + end +end) + +concommand.Add("metrostroi_load", function(ply, _, args) + if (ply:IsValid()) and (not ply:IsAdmin()) then return end + Metrostroi.IgnoreEntityUpdates = true + local signals_ents = ents.FindByClass("gmod_track_signal") + for _,v in pairs(signals_ents) do SafeRemoveEntity(v) end + local signs_ents = ents.FindByClass("gmod_track_signs") + for _,v in pairs(signs_ents) do SafeRemoveEntity(v) end + local auto_ents = ents.FindByClass("gmod_track_autodrive_plate") + for _,v in pairs(auto_ents) do SafeRemoveEntity(v) end + local pa_ents = ents.FindByClass("gmod_track_pa_marker") + for _,v in pairs(pa_ents) do SafeRemoveEntity(v) end + if not args[1] then + local switch_ents = ents.FindByClass("gmod_track_switch") + for k,v in pairs(switch_ents) do SafeRemoveEntity(v) end + end + timer.Simple(1,function() + Metrostroi.IgnoreEntityUpdates = false + Metrostroi.UpdateSignalEntities() + Metrostroi.UpdateSwitchEntities() + Metrostroi.UpdateARSSections() + Metrostroi.Load() + end) +end) + +concommand.Add("metrostroi_cleanup_signals", function(ply, _, args) + if (ply:IsValid()) and (not ply:IsAdmin()) then return end + Metrostroi.IgnoreEntityUpdates = true + local signals_ents = ents.FindByClass("gmod_track_signal") + for k,v in pairs(signals_ents) do SafeRemoveEntity(v) end + local signs_ents = ents.FindByClass("gmod_track_signs") + for k,v in pairs(signs_ents) do SafeRemoveEntity(v) end + local auto_ents = ents.FindByClass("gmod_track_autodrive_plate") + for _,v in pairs(auto_ents) do SafeRemoveEntity(v) end + local pa_ents = ents.FindByClass("gmod_track_pa_marker") + for _,v in pairs(pa_ents) do SafeRemoveEntity(v) end + if not args[1] then + local switch_ents = ents.FindByClass("gmod_track_switch") + for k,v in pairs(switch_ents) do SafeRemoveEntity(v) end + end + timer.Simple(0.05,function() + Metrostroi.IgnoreEntityUpdates = false + Metrostroi.UpdateSignalEntities() + Metrostroi.UpdateSwitchEntities() + Metrostroi.UpdateARSSections() + end) +end) + +concommand.Add("metrostroi_pos_info", function(ply, _, args) + if (ply:IsValid()) and (not ply:IsAdmin()) then return end + + -- Draw nearest nodes + timer.Simple(0.05,function() + for k,v in Metrostroi.NearestNodes(ply:GetPos()) do + debugoverlay.Cross(v.pos,10,10,Color(0,0,255),true) + debugoverlay.Line(v.pos,ply:GetPos(),10,Color(0,0,255),true) + end + end) + + -- Print interesting information + local results = Metrostroi.GetPositionOnTrack(ply:GetPos(),ply:GetAimVector():Angle()) + for k,v in pairs(results) do + print(Format("\t[%d] Path #%d, ID #%d: (%.2f x %.2f x %.2f) m Facing %s",k,v.path.id,v.node1.id,v.x,v.y,v.z,v.forward and "forward" or "backward")) + end + + -- Info about local track + if results[1] then + print(Format("Track status: %s", + Metrostroi.IsTrackOccupied(results[1].node1) and "occupied" or "free" + )) + end +end) + +concommand.Add("metrostroi_track_main", function(ply, _, args) + if (not ply:IsValid()) then return end + + -- Trigger all track switches + local results = Metrostroi.GetPositionOnTrack(ply:GetPos(),ply:GetAimVector():Angle()) + print(ply, "changed swtiches") + for k,v in pairs(results) do + local switches = Metrostroi.GetTrackSwitches(v.node1,v.x,v.forward) + for _,switch in pairs(switches) do + print("Found switch:",switch,switch.TrackPosition.x) + switch:SendSignal("main",tonumber(args[1]) or 1) + end + end +end) + +concommand.Add("metrostroi_track_alt", function(ply, _, args) + if (not ply:IsValid()) then return end + print(ply, "changed swtiches") + -- Trigger all track switches + local results = Metrostroi.GetPositionOnTrack(ply:GetPos(),ply:GetAimVector():Angle()) + for k,v in pairs(results) do + local switches = Metrostroi.GetTrackSwitches(v.node1,v.x,v.forward) + for _,switch in pairs(switches) do + print("Found switch:",switch,switch.TrackPosition.x) + switch:SendSignal("alt",tonumber(args[1]) or 1) + end + end +end) + +concommand.Add("metrostroi_track_arstest", function(ply, _, args) + if (ply:IsValid()) and (not ply:IsAdmin()) then return end + + -- Trigger all track switches + local results = Metrostroi.GetPositionOnTrack(ply:GetPos(),ply:GetAimVector():Angle()) + for k,v in pairs(results) do + --Metrostroi.GetARSJoint(pos.node1,pos.x,false) + local ars = Metrostroi.GetARSJoint(v.node1,v.x,true) + + --Metrostroi.GetNextTrafficLight(v.node1,v.x,v.forward,true) + if ars then + local ARS80 = ars:GetARS(8) + local ARS70 = ars:GetARS(7) + local ARS60 = ars:GetARS(6) + local ARS40 = ars:GetARS(4) + local ARS0 = ars:GetARS(0) + local ARSsp = false + + if not (ARS80 or ARS70 or ARS60 or ARS40 or ARS0 or ARSsp) then + print(Format("[%d] ARS: NO SIGNAL",k)) + else + print(Format("[%d] ARS: 80:%d 70:%d 60:%d 40:%d 0:%d Sp:%d", + k, + ARS80 and 1 or 0, + ARS70 and 1 or 0, + ARS60 and 1 or 0, + ARS40 and 1 or 0, + ARS0 and 1 or 0, + ARSsp and 1 or 0)) + end + else + print(Format("[%d] ARS: NO SIGNAL (NO ARS)",k)) + end + end +end) + + + + +-------------------------------------------------------------------------------- +-- Print statistics and information about the loaded rail network +-------------------------------------------------------------------------------- +function Metrostroi.PrintStatistics() + local totalLength = 0 + for pathNo,path in pairs(Metrostroi.Paths) do + totalLength = totalLength + path.length + end + + print(Format("Metrostroi: Total %.3f km of paths defined:",totalLength/1000)) + for pathNo,path in pairs(Metrostroi.Paths) do + print(Format("\t[%d] %.3f km (%d nodes)",path.id,path.length/1000,#path)) + end + + local count = #Metrostroi.SpatialLookup + local cells = {} + for _,z in pairs(Metrostroi.SpatialLookup) do + count = count + #z + for _,x in pairs(z) do + count = count + #x + for _,y in pairs(x) do + table.insert(cells,#y) + end + end + end + print(Format("Metrostroi: %d tables used for spatial lookup (%d cells)",count,#cells)) + local maxn,avgn = 0,0 + for k,v in pairs(cells) do maxn = math.max(maxn,v) avgn = avgn + v end + print(Format("Metrostroi: Most nodes in cell: %d, average nodes in cell: %.2f",maxn,avgn/#cells)) +end \ No newline at end of file diff --git a/lua/metrostroi/sv_schedule.lua b/lua/metrostroi/sv_schedule.lua new file mode 100644 index 0000000..3922531 --- /dev/null +++ b/lua/metrostroi/sv_schedule.lua @@ -0,0 +1,257 @@ +-------------------------------------------------------------------------------- +-- Schedule generator +-------------------------------------------------------------------------------- +-- List of all unique routes that can be used in schedule generation +-- { station, platform } +Metrostroi.ScheduleRoutes = Metrostroi.ScheduleRoutes or {} +Metrostroi.SchedulesInitialized = false + +-- List of all time intervals in which schedules must be generated +-- { start_time, end_time, route_name, train_interval, +Metrostroi.ScheduleConfiguration = Metrostroi.ScheduleConfiguration or {} + +-- List of station names +Metrostroi.StationNames = Metrostroi.StationNames or {} +Metrostroi.StationTitles = Metrostroi.StationTitles or {} +Metrostroi.StationNamesConfiguration = Metrostroi.StationNamesConfiguration or {} + +-- AI train behavior configuration +Metrostroi.AIConfiguration = Metrostroi.AIConfiguration or {} + +-- Current server time +function Metrostroi.ServerTime() + return (os.time() % 86400) +end + +-- Departure time of last train from first station +Metrostroi.DepartureTime = Metrostroi.DepartureTime or {} +-- Schedule counter +Metrostroi.ScheduleID = Metrostroi.ScheduleID or 0 + + +-------------------------------------------------------------------------------- +local function timeToSec(str) + local x = string.find(str,":") + if not x then return tonumber(sec) or 0 end + + local min = tonumber(string.sub(str,1,x-1)) or 0 + local sec = tonumber(string.sub(str,x+1)) or 0 + return min*60+sec,min,sec +end + +local function prepareRouteData(routeData,name) + -- Prepare general route information + routeData.Duration = 0 + routeData.Name = name + + -- Fix up every station + for i,stationID in ipairs(routeData) do + routeData[i].ID = i + routeData[i].TimeOffset = routeData.Duration + if routeData[i+1] then + if not Metrostroi.Stations[routeData[i][1]] then print(Format("No station %d",routeData[i][1])) return end + if not Metrostroi.Stations[routeData[i][1]][routeData[i][2]] then print(Format("No platform %d for station %d",routeData[i][2],routeData[i][1])) return end + if not Metrostroi.Stations[routeData[i+1][1]] then print(Format("No station %d",routeData[i+1][1])) return end + if not Metrostroi.Stations[routeData[i+1][1]][routeData[i][2]] then print(Format("No platform %d for station %d",routeData[i+1][2],routeData[i+1][1])) return end + + -- Get nodes + local start_node = Metrostroi.Stations[routeData[i ][1]][routeData[i ][2]].node_end + local end_node = Metrostroi.Stations[routeData[i+1][1]][routeData[i+1][2]].node_end + if false and start_node.path ~= end_node.path then + print(Format("Platform %d for station %d: path %d; Platform %d for station %d: path %d", + routeData[i ][2],routeData[i ][1],start_node.path.id, + routeData[i+1][2],routeData[i+1][1],end_node.path.id)) + return + end + + -- Calculate travel time between two nodes + local travelTime,travelDistance = Metrostroi.GetTravelTime(start_node,end_node) + -- Add time for startup and slowdown + travelTime = travelTime + 25 + + -- Remember stats + routeData.Duration = routeData.Duration + travelTime + routeData[i].TravelTime = travelTime + routeData[i].TravelDistance = travelDistance + + -- Print debug information + print(Format("\t\t[%03d-%d]->[%03d-%d] %02d:%02d min %4.0f m %4.1f km/h", + routeData[i][1],routeData[i][2], + routeData[i+1][1],routeData[i+1][2], + math.floor(travelTime/60),math.floor(travelTime)%60,travelDistance,(travelDistance/travelTime)*3.6)) + else + routeData.LastID = i + routeData.LastStation = routeData[i][1] + end + end + + -- Add a quick lookup + routeData.Lookup = {} + for i,_ in ipairs(routeData) do + routeData.Lookup[routeData[i][1]] = routeData[i] + end +end + +function Metrostroi.InitializeSchedules() + if Metrostroi.SchedulesInitialized then return end + Metrostroi.SchedulesInitialized = true + + -- Fix up all routes + print("Metrostroi: Preparing routes...") + for routeName,routeData in pairs(Metrostroi.ScheduleRoutes) do + print(Format("\tTravel distances for preset route '%s':",routeName)) + prepareRouteData(routeData,routeName) + print(Format("\t\tTotal duration: %02d:%02d min",math.floor(routeData.Duration/60),math.floor(routeData.Duration)%60)) + end +end + +function Metrostroi.GenerateSchedule(routeID,starts,ends) + Metrostroi.InitializeSchedules() + if not Metrostroi.ScheduleRoutes[routeID] then print("Error generating schedule, line or path not found") return end + local st = 1 + local fst = not starts + local en = #Metrostroi.ScheduleRoutes[routeID] + local fen = not ends + for k,v in ipairs(Metrostroi.ScheduleRoutes[routeID]) do + if v[1] == starts and not fst then + st = k + fst = true + end + if v[1] == ends and not fen then + en = k + fen = true + end + if fst and fen then break end + end + if not fst then print("Metrostroi: Warning! Station "..starts.." not found") st = 1 end + if not fen then print("Metrostroi: Warning! Station "..ends.." not found") en = #Metrostroi.ScheduleRoutes[routeID] end + + -- Time padding (extra time before schedule starts, wait time between trains) + local paddingTime = timeToSec("1:30") + -- Current server time + local serverTime = Metrostroi.ServerTime()/60 + -- hack + if routeID == "Line1_Platform2" then + paddingTime = timeToSec("3:00") + end + + -- Determine schedule configuration + local interval + for _,config in pairs(Metrostroi.ScheduleConfiguration) do + local t_start = timeToSec(config[1]) + local t_end = timeToSec(config[2]) + if (config[3] == routeID) and (t_start <= serverTime) and (t_end > serverTime) then + interval = timeToSec(config[4]) + end + end + + -- If no interval, then no schedules available + if not interval then return end + + -- If no schedules started + if not Metrostroi.DepartureTime[routeID] then + Metrostroi.DepartureTime[routeID] = serverTime + paddingTime/60 + else + -- If schedules started, depart with interval + Metrostroi.DepartureTime[routeID] = math.max(Metrostroi.DepartureTime[routeID] + interval/60,serverTime + paddingTime/60) + end + + -- Create new schedule + Metrostroi.ScheduleID = Metrostroi.ScheduleID + 1 + local schedule = { + ScheduleID = Metrostroi.ScheduleID, + Interval = interval, + Duration = Metrostroi.ScheduleRoutes[routeID].Duration, + } + + -- Fill out all stations + local currentTime = Metrostroi.DepartureTime[routeID] + for id,stationData in ipairs(Metrostroi.ScheduleRoutes[routeID]) do + if st > id or id > en then continue end + -- Calculate stop time + local stopTime = 15 +-- if not stationData.TravelTime then stopTime = 0 end + + -- Add entry + schedule[#schedule+1] = { + stationData[1], -- Station + stationData[2], -- Platform + currentTime+stopTime/60, -- Departure time + currentTime, -- Arrival time + } + + schedule[#schedule].arrivalTimeStr = + Format("%02d:%02d:%02d", + math.floor(schedule[#schedule][3]/60), + math.floor(schedule[#schedule][3])%60, + math.floor(schedule[#schedule][3]*60)%60) + + -- Add travel time + if stationData.TravelTime then + currentTime = currentTime + (stationData.TravelTime + stopTime)/60 + end + end + + -- Fill out start and end + schedule.StartStation = schedule[1][1] + schedule.EndStation = schedule[#schedule][1] + schedule.StartTime = schedule[1][2] + schedule.EndTime = schedule[#schedule][2] + + -- Print result + print(Format("--- %03d --- From %03d to %03d --------------------", + schedule.ScheduleID,schedule.StartStation,schedule.EndStation)) + for i,d in ipairs(schedule) do + print(Format("\t%03d %s",d[1],d.arrivalTimeStr)) + end + return schedule +end + +function Metrostroi.LoadSchedulesData(data) + Metrostroi.ScheduleRoutes = data.Routes or {} + Metrostroi.ScheduleConfiguration = data.Configuration or {} + Metrostroi.StationNames = data.StationNames or {} + Metrostroi.StationTitles = data.StationTitles or {} + Metrostroi.AIConfiguration = data.AIConfiguration or {} + Metrostroi.StationNamesConfiguration = data.StationNamesConfiguration or {} + Metrostroi.SchedulesInitialized = false + timer.Simple(3.0,function() + Metrostroi.InitializeSchedules() + Metrostroi.DepartureTime = {} + Metrostroi.ScheduleID = 0 + for k,v in pairs(Metrostroi.TrainClasses) do + if v == "gmod_subway_base" then continue end + local ents = ents.FindByClass(v) + for k2,v2 in pairs(ents) do + if v2.Schedule then v2.Schedule = nil end + end + end + end) +end + +concommand.Add("metrostroi_resetschedules", function(ply, _, args) + if not ply:IsAdmin() then return end + Metrostroi.DepartureTime = {} + Metrostroi.ScheduleID = 0 + for k,v in pairs(Metrostroi.TrainClasses) do + if v == "gmod_subway_base" then continue end + local ents = ents.FindByClass(v) + for k2,v2 in pairs(ents) do + if v2.Schedule then v2.Schedule = nil end + end + end +end) +concommand.Add("metrostroi_schedule1", function(ply, _, args) + Metrostroi.GenerateSchedule("Line1_Platform1") +end) + +concommand.Add("metrostroi_schedule2", function(ply, _, args) + Metrostroi.GenerateSchedule("Line1_Platform2") +end) +concommand.Add("metrostroi_print_scheduleinfo", function(ply, _, args) + for routeName,routeData in pairs(Metrostroi.ScheduleRoutes) do + print(Format("\tTravel distances for preset route '%s':",routeName)) + prepareRouteData(routeData,routeName) + print(Format("\t\tTotal duration: %02d:%02d min",math.floor(routeData.Duration/60),math.floor(routeData.Duration)%60)) + end +end) diff --git a/lua/metrostroi/sv_signs.lua b/lua/metrostroi/sv_signs.lua new file mode 100644 index 0000000..4331ab5 --- /dev/null +++ b/lua/metrostroi/sv_signs.lua @@ -0,0 +1,306 @@ +-------------------------------------------------------------------------------- +-- Signs in tunnels and on stations +-------------------------------------------------------------------------------- +Metrostroi.Signs = Metrostroi.Signs or {} + + + +-------------------------------------------------------------------------------- +-- Helper for commonly used trace +-------------------------------------------------------------------------------- +local function trace(pos,dir,col) + local tr = util.TraceLine({ + start = pos, + endpos = pos+dir, + mask = MASK_NPCWORLDSTATIC + }) + timer.Simple(0.05,function() + local t = 5 + debugoverlay.Line(tr.StartPos,tr.HitPos,t,col or Color(0,0,255),true) + debugoverlay.Sphere(tr.StartPos,2,t,Color(0,255,255),true) + debugoverlay.Sphere(tr.HitPos,2,t,Color(255,0,0),true) + end) + return tr +end + + +-------------------------------------------------------------------------------- +-- Create station name signs +-------------------------------------------------------------------------------- +function Metrostroi.AddStationSign(ent) + if ent.SignOff then return end + if not Metrostroi.StationNamesConfiguration[ent.StationIndex] then return end + + local platformStart = ent.PlatformStart + local platformEnd = ent.PlatformEnd + local platformDir = platformEnd-platformStart + local platformN = (platformDir:Angle()-Angle(0,90,0)):Forward() + local platformD = platformDir:GetNormalized() + + local N = 2 + local X = { 0.25, 0.75 } + for i=1,N do + local pos = (platformStart + platformDir*X[i]) + Vector(0,0,64+32) + platformN*96 + local tr = trace(pos,platformN*384) + + -- Bad hit workaround + if (not tr.Hit) or (tr.Fraction < 0.05) then + --print("STATION BAD HIT 1",ent.StationIndex,tr.Hit,tr.Fraction) + + pos = (platformStart + platformDir*X[i]) + Vector(0,0,64+32) + platformN*0 + tr = trace(pos,platformN*384) + end + if (not tr.Hit) or (tr.Fraction < 0.05) then + --print("STATION BAD HIT 3",ent.StationIndex,tr.Hit,tr.Fraction) + + pos = (platformStart + platformDir*X[i]) + Vector(0,0,64+32) + platformN*0 + tr = trace(pos,-platformN*384) + end + if (not tr.Hit) or (tr.Fraction < 0.05) then + --print("STATION BAD HIT 2",ent.StationIndex,tr.Hit,tr.Fraction) + + pos = (platformStart + platformDir*X[i]) + Vector(0,0,64+32) + platformN*96 + tr = trace(pos,-platformN*384) + end + + local sign = ents.Create("gmod_track_sign") + if IsValid(sign) then + if tr.Hit then + sign:SetPos(tr.HitPos + tr.HitNormal*4) + sign:SetAngles(tr.HitNormal:Angle()) + else + sign:SetPos(tr.HitPos + tr.HitNormal*4) + sign:SetAngles(-platformN:Angle()) + print(Format("Metrostroi: Could not find a nice way to place station names for %03d",ent.StationIndex)) + end + sign:Spawn() + + sign:SetNW2String("Type","station") + sign:SetNW2String("Name",Metrostroi.StationNames[ent.StationIndex] or "") + sign:SetNW2Int("ID",ent.StationIndex) + sign:SetNW2Int("Platform",ent.PlatformIndex) + + -- Get path of this station + local path1 = math.floor(ent.StationIndex/100) + + -- List of change stations + local ChangeStations = { + [122] = 321, + [321] = 122, + } + + -- Store up to two changes + local change2List = {} + local change3List = {} + local change2Used = nil + local change3Used = nil + for k,v in pairs(ChangeStations) do + local path2 = math.floor(k/100) + if path1 == path2 then + if not change2Used then + change2Used = k + sign:SetNW2Int("Change2",k) + sign:SetNW2Int("Change2ID",v) + elseif not change3Used then + change3Used = k + sign:SetNW2Int("Change3",k) + sign:SetNW2Int("Change3ID",v) + end + end + end + + -- Get stations list + local change2_path = math.floor((ChangeStations[change2Used or 0] or 0)/100) + local change3_path = math.floor((ChangeStations[change3Used or 0] or 0)/100) + local stationList = {} + for k,v in pairs(Metrostroi.StationNames) do + local path2 = math.floor(k/100) + if (path1 == path2) or (change2_path == path2) or (change3_path == path2) then + local R = (Metrostroi.StationNamesConfiguration[k] or {})[1] or 0 + local G = (Metrostroi.StationNamesConfiguration[k] or {})[2] or 0 + local B = (Metrostroi.StationNamesConfiguration[k] or {})[3] or 0 + local Use = (Metrostroi.StationNamesConfiguration[k] or {})[4] or 0 + if (Use > 0) then + if (change2_path == path2) and (path2 ~= path1) then + table.insert(change2List,k) + elseif (change3_path == path3) and (path2 ~= path1) then + table.insert(change3List,k) + else + if ((ent.PlatformIndex == 2) and (ent.StationIndex >= k)) or + ((ent.PlatformIndex == 1) and (ent.StationIndex <= k)) then + table.insert(stationList,k) + end + end + end + end + end + + -- Sort stations list + if ent.PlatformIndex == 2 then + table.sort(stationList, function(a, b) return a < b end) + else + table.sort(stationList, function(a, b) return a > b end) + end + table.sort(change2List, function(a, b) return a < b end) + table.sort(change3List, function(a, b) return a < b end) + + -- Send stations list + sign:SetNW2Int("StationList#",#stationList) + for k,v in ipairs(stationList) do + sign:SetNW2Int("StationList"..k.."[ID]",v) + sign:SetNW2String("StationList"..k.."[Name1]",Metrostroi.StationTitles[v]) + sign:SetNW2String("StationList"..k.."[Name2]",Metrostroi.StationNames[v]) + sign:SetNW2Int("StationList"..k.."[R]",(Metrostroi.StationNamesConfiguration[v] or {})[1]) + sign:SetNW2Int("StationList"..k.."[G]",(Metrostroi.StationNamesConfiguration[v] or {})[2]) + sign:SetNW2Int("StationList"..k.."[B]",(Metrostroi.StationNamesConfiguration[v] or {})[3]) + --sign:SetNW2Int("StationList"..k.."[R]",(Metrostroi.StationNamesConfiguration[v.ID] or {})[1]) + end + + -- Send change lists + sign:SetNW2Int("Change2List#",#change2List) + for k,v in ipairs(change2List) do + sign:SetNW2Int("Change2List"..k.."[ID]",v) + sign:SetNW2String("Change2List"..k.."[Name1]",Metrostroi.StationTitles[v]) + sign:SetNW2String("Change2List"..k.."[Name2]",Metrostroi.StationNames[v]) + sign:SetNW2Int("Change2List"..k.."[R]",(Metrostroi.StationNamesConfiguration[v] or {})[1]) + sign:SetNW2Int("Change2List"..k.."[G]",(Metrostroi.StationNamesConfiguration[v] or {})[2]) + sign:SetNW2Int("Change2List"..k.."[B]",(Metrostroi.StationNamesConfiguration[v] or {})[3]) + end + sign:SetNW2Int("Change3List#",#change3List) + for k,v in ipairs(change3List) do + sign:SetNW2Int("Change3List"..k.."[ID]",v) + sign:SetNW2String("Change3List"..k.."[Name1]",Metrostroi.StationTitles[v]) + sign:SetNW2String("Change3List"..k.."[Name2]",Metrostroi.StationNames[v]) + sign:SetNW2Int("Change3List"..k.."[R]",(Metrostroi.StationNamesConfiguration[v] or {})[1]) + sign:SetNW2Int("Change3List"..k.."[G]",(Metrostroi.StationNamesConfiguration[v] or {})[2]) + sign:SetNW2Int("Change3List"..k.."[B]",(Metrostroi.StationNamesConfiguration[v] or {})[3]) + end + + --[[sign:MakeStationSign( + Metrostroi.StationTitles[ent.StationIndex] or Metrostroi.StationNames[ent.StationIndex], + Metrostroi.StationNames[ent.StationIndex])]]-- + table.insert(Metrostroi.Signs,sign) + end + end +end + +-------------------------------------------------------------------------------- +-- Create horizontal lift signals +-------------------------------------------------------------------------------- +function Metrostroi.AddStationSignal(ent) + if ent.HorliftStation == 0 or ent.HorliftHaveSignal then return end + + local platformStart = ent.PlatformStart + local platformEnd = ent.PlatformEnd + local platformDir = platformEnd-platformStart + local platformN = (platformDir:Angle()-Angle(0,90,0)):Forward() + local platformD = platformDir:GetNormalized() + + local pos = platformEnd + Vector(0,0,64) + platformN*96 + platformD*(192-32) + local tr = trace(pos,platformN*384) + local sign = ents.Create("gmod_track_horlift_signal") + if IsValid(sign) then + sign.VMF = sign.VMF or {} + sign.VMF.Type = "0" + if tr.Hit then + sign:SetPos(tr.HitPos) + sign:SetAngles(tr.HitNormal:Angle()) + else + sign:SetPos(tr.HitPos) + sign:SetAngles(-platformN:Angle()) + end + sign:Spawn() + table.insert(Metrostroi.Signs,sign) + end +end + + +-------------------------------------------------------------------------------- +-- Create all signs +-------------------------------------------------------------------------------- +function Metrostroi.InitializeSigns() + -- Clear old signs + for k,v in pairs(Metrostroi.Signs) do + SafeRemoveEntity(v) + end + Metrostroi.Signs = {} + + -- Add sign for every station name + local entities = ents.FindByClass("gmod_track_platform") + for k,v in pairs(entities) do + Metrostroi.AddStationSign(v) + Metrostroi.AddStationSignal(v) + end + + -- Add temporary lights + --[[ + local entities = ents.FindByClass("gmod_track_switch") + for k,v in pairs(entities) do + for k2,v2 in pairs(v.TrackSwitches) do + local tr = trace(v2:GetPos(),Vector(0,0,384)) + if tr.Hit then + local light = ents.Create("env_projectedtexture") + light:SetPos(tr.HitPos - Vector(0,0,16)) + light:SetAngles(tr.HitNormal:Angle()) + + -- Set parameters + light:SetKeyValue("enableshadows", 0) + light:SetKeyValue("farz", 600) + light:SetKeyValue("nearz", 16) + light:SetKeyValue("lightfov", 170) + + -- Set Brightness + local brightness = 0.3 + light:SetKeyValue("lightcolor", + Format("%i %i %i 255", + 180*brightness, + 255*brightness, + 255*brightness + ) + ) + + -- Turn light on + light:Spawn() + light:Input("SpotlightTexture",nil,nil,"effects/flashlight001") + table.insert(Metrostroi.Signs,light) + end + end + end + + --17473 20200 + if Metrostroi.Paths[1] then + for k,v in pairs(Metrostroi.Paths[1]) do + if (type(v) == "table") and (v.x) and (v.x > 17470) and (v.x < 20200) then + local tr = trace(v.pos + Vector(0,0,64),Vector(0,0,384)) --384*(v.dir:Angle() + Angle(0,0,90)):Forward()) + if tr.Hit and ((k % 2) == 0) and false then + local light = ents.Create("env_projectedtexture") + light:SetPos(tr.HitPos - tr.HitNormal*64) + light:SetAngles(tr.HitNormal:Angle()) + + -- Set parameters + light:SetKeyValue("enableshadows", 0) + light:SetKeyValue("farz", 512+192) + light:SetKeyValue("nearz", 128) + light:SetKeyValue("lightfov", 160) + + -- Set Brightness + local brightness = 0.20 + light:SetKeyValue("lightcolor", + Format("%i %i %i 255", + 180*brightness, + 255*brightness, + 255*brightness + ) + ) + + -- Turn light on + light:Spawn() + light:Input("SpotlightTexture",nil,nil,"effects/flashlight001") + table.insert(Metrostroi.Signs,light) + end + end + end + end]]-- +end + +Metrostroi.InitializeSigns() diff --git a/lua/metrostroi/sv_socket.lua b/lua/metrostroi/sv_socket.lua new file mode 100644 index 0000000..f9b7afd --- /dev/null +++ b/lua/metrostroi/sv_socket.lua @@ -0,0 +1,77 @@ +require("bromsock") + +if server then server:Close() end +server = BromSock() +server:SetOption(0xFFFF, 0x0008, 1) +server:SetOption(0x6, 0x0001 , 1) + +if (not server:Listen(1337)) then + print("[BS:S] Failed to listen!") +else + print("[BS:S] Server listening...") +end +server:SetCallbackConnect(function(sockObj, succ, ip, port ) + print(sockObj, succ, ip, port ) +end) +local opened = {} +concommand.Add("test_command_send",function(_,_,args) + local sock = opened[tonumber(args[1])] + if not sock then return end + local packet = BromPacket() + packet:WriteStringRaw(args[2]) + sock:Send(packet,true) +end) +concommand.Add("test_command_sendtest",function(_,_,args) + local sock = opened[tonumber(args[1])] + if not sock then return end + local packet = BromPacket() + packet:WriteByte(0x00) + packet:WriteUInt(1234) + packet:WriteStringNT("test") + sock:Send(packet,true) +end) +server:SetCallbackAccept(function(serversock, clientsock) + print("[BS:S] Accepted:", serversock, clientsock,clientsock:GetPort()) + opened[clientsock:GetPort()] = clientsock + clientsock:SetCallbackReceive(function(sock, packet) + print("[BS:S] Received:", sock, packet) + + local typ = packet:ReadByte() + print("[BS:S] Type:", typ) + if typ == 0x01 then + local trains = {} + for k,ent in pairs(ents.GetAll()) do + if ent.Base == "gmod_subway_base" and not ent.NoTrain then + table.insert(trains,ent) + end + end + + local packet = BromPacket() + packet:WriteByte(0x00) + packet:WriteUInt(#trains) + sock:Send(packet,true) + for k,v in ipairs(trains) do + print("Send train",v:GetClass()) + local packet = BromPacket() + packet:WriteByte(0x01) + packet:WriteUInt(#trains) + packet:WriteUInt(v:EntIndex()) + packet:WriteStringNT(v:GetClass()) + sock:Send(packet,true) + end + end + end) + + clientsock:SetCallbackDisconnect(function(sock) + print("[BS:S] Disconnected:", sock) + opened[clientsock:GetPort()] = nil + end) + + clientsock:SetTimeout(1000) + + clientsock:Receive() + + -- Who's next in line? + serversock:Accept() +end) +server:Accept() diff --git a/lua/metrostroi/sv_telemetry.lua b/lua/metrostroi/sv_telemetry.lua new file mode 100644 index 0000000..2bd0c21 --- /dev/null +++ b/lua/metrostroi/sv_telemetry.lua @@ -0,0 +1,304 @@ +--local canPost = true +local function onDispatcherMessage(msg) + if string.sub(msg,1,1) == "@" then + local cmd = string.Explode(",",string.sub(msg,2)) + if cmd[1] == "red" then + for k,v in pairs(Metrostroi.TrafficLights) do + if v:IsValid() and (v.EquipmentID == tonumber(cmd[2])) then + v.TelemetryOverrideToRed = true + if Metrostroi.TrafficLightStates[v] then + Metrostroi.TrafficLightStates[v].state = -1 + end + end + end + elseif cmd[1] == "auto" then + for k,v in pairs(Metrostroi.TrafficLights) do + if v:IsValid() and (v.EquipmentID == tonumber(cmd[2])) then + v.TelemetryOverrideToRed = nil + if Metrostroi.TrafficLightStates[v] then + Metrostroi.TrafficLightStates[v].state = -1 + end + end + end + end + + print("Dispatcher command: "..msg) + else + PrintMessage(HUD_PRINTTALK,"Dispatcher: "..msg) + print("Dispatcher: "..msg) + + Metrostroi.DriverChatBacklog["global"] = + Metrostroi.DriverChatBacklog["global"] or {} + + table.insert(Metrostroi.DriverChatBacklog["global"],"Dispatcher: "..msg) + end +end + +local function onSuccess(content) + local data = string.Explode("\n",content) + if data[1] == "OK" then + for i=2,#data do + if data[i] and (data[i] ~= "") then + onDispatcherMessage(data[i]) + end + end + end + +-- print(content) +end +local function onFailure(reason) + +end + + + + +-------------------------------------------------------------------------------- +-- Sends asynchronous HTTP request +-------------------------------------------------------------------------------- +--timer.Simple(0.01, function() require("socket") end) + +local s +local http_data +function Metrostroi.HTTPRequest(request) + if not socket then return end + + -- Process data +-- print(string.gsub(data," ","+")) + + -- Re-create socket + if s then s:close() end + s = socket.connect("foxworks.wireos.com", 80) + s:settimeout(0.00) +-- s:send("GET /metrostroi/ms-act.php HTTP/1.1\n") + s:send("POST /metrostroi/ms-act.php HTTP/1.0\n") + s:send("Host: foxworks.wireos.com\n") + s:send("User-Agent: GMod10\n") + s:send("Connection: Close\n") + s:send("Content-Type: application/x-www-form-urlencoded\n") + s:send("Content-Length: "..#request.."\n") + s:send("\n") + s:send(request) + http_data = "" + + -- Create timer + timer.Create("Metrostroi_HTTPRequest",0.01,0,function() + if not s then return end + s:settimeout(0.00) + local data, status, rdata = s:receive(2^10) + data = data or rdata + + -- Gather HTTP data + if data then http_data = http_data .. data end + + -- Check timeout/error + if status and (status ~= "timeout") then + local data = string.Explode("\r\n\r\n",http_data) + table.remove(data,1) + local content = string.Implode("\n\n",data) + + timer.Destroy("Metrostroi_HTTPRequest") + onSuccess(content) + end + end) +end + + + + + + +-------------------------------------------------------------------------------- +-- Generate HTTP request +-------------------------------------------------------------------------------- +local function bool2str(b) if b then return "1" else return "0" end end +Metrostroi.TrafficLightStates = {} +Metrostroi.SwitchStates = {} +function Metrostroi.UpdateTelemetry() + if true then return end + if not Metrostroi.TrainPositions then return end + + local request = "query=update&r={ \"trains\": {" + local f = false + for train,data in pairs(Metrostroi.TrainPositions) do + if train:IsValid() and train.WagonID then + if f == true then request = request.."," end + if f == false then f = true end + +-- print(train.WagonID) + request = request.."\""..train.WagonID.."\": {" + + request = request.."\"wid\":"..train.WagonID.."," + request = request.."\"tid\":"..train.TrainID.."," + request = request.."\"mod\":"..train.Mode.."," + request = request.."\"pos\":"..Format("%.1f",data.position).."," + request = request.."\"sec\":"..Format("%d", data.section).."," + request = request.."\"pth\":"..Format("%d", data.path).."," + + if train.NextLightRed then + request = request.."\"nxt\":1," + elseif train.NextLightYellow then + request = request.."\"nxt\":2," + else + request = request.."\"nxt\":3," + end + + request = request.."\"spd\":"..Format("%.1f",train.Speed or 0).."," + request = request.."\"ars\":"..Format("%.1f",train.ARSSpeed or -1).."," + + if train.Reverse then + request = request.."\"d1\":"..bool2str(train.DoorState[1]).."," + request = request.."\"d2\":"..bool2str(train.DoorState[0]).."," + else + request = request.."\"d1\":"..bool2str(train.DoorState[0]).."," + request = request.."\"d2\":"..bool2str(train.DoorState[1]).."," + end + request = request.."\"l1\":"..bool2str(train.LightState[0]).."," + request = request.."\"l2\":"..bool2str(train.LightState[1]).."," + request = request.."\"r\":"..bool2str(train.Reverse).."," + request = request.."\"m\":"..bool2str(train.MasterTrain == nil).."," + request = request.."\"at\":"..bool2str(train.AlternateTrack).."," + request = request.."\"sat\":"..bool2str(train.SelectAlternateTrack).."," + request = request.."\"atb\":"..bool2str(train.AlternateTrackBlocked) + + --[[Metrostroi.DriverChatBacklog[train] = Metrostroi.DriverChatBacklog[train] or {} + local chatlog = "{" + for k,v in pairs(Metrostroi.DriverChatBacklog[train]) do + chatlog = chatlog.."\""..k.."\":".."\""..v.."\"" + if k ~= #Metrostroi.DriverChatBacklog[train] then + chatlog = chatlog.."," + end + end + Metrostroi.DriverChatBacklog[train] = {} + request = request.."\"log\":"..chatlog.."}" ]]-- + + request = request.."}" + end + end + request = request.."}," + request = request.."\"chat\":{" + + local i = 1 + local f = false + for train,data in pairs(Metrostroi.DriverChatBacklog) do + if (train ~= "global") and train:IsValid() then + for k,v in pairs(data) do + if f == true then request = request.."," end + f = true + + request = request.."\""..i.."\":{" + request = request.."\"t\":".."\""..v.."\"," + request = request.."\"w\":".."\""..train.WagonID.."\"" + request = request.."}" + i = i + 1 + end + Metrostroi.DriverChatBacklog[train] = {} + else + for k,v in pairs(data) do + if f == true then request = request.."," end + f = true + + request = request.."\""..i.."\":{" + request = request.."\"t\":".."\""..v.."\"," + request = request.."\"w\":".."\"global\"" + request = request.."}" + i = i + 1 + end + Metrostroi.DriverChatBacklog[train] = {} + end + end + + request = request.."}," + request = request.."\"lights\":{" + local f = false + for light,data in pairs(Metrostroi.TrafficLightPositions) do + if light:IsValid() and light.EquipmentID then + local bits = 0 + if light.LightStates[1] then bits = bits + 1 end + if light.LightStates[2] then bits = bits + 2 end + if light.LightStates[3] then bits = bits + 4 end + + if (not Metrostroi.TrafficLightStates[light]) or + (Metrostroi.TrafficLightStates[light].state ~= bits) or + (CurTime() - Metrostroi.TrafficLightStates[light].time > 120) then + if f == true then request = request.."," end + f = true + Metrostroi.TrafficLightStates[light] = { + state = bits, + time = CurTime(), + } + + request = request.."\""..light.EquipmentID.."\": {" + request = request.."\"id\":"..light.EquipmentID.."," + request = request.."\"state\":"..bits.."," + request = request.."\"ovrd\":"..bool2str(light.TelemetryOverrideToRed).."," + request = request.."\"pos\":"..Format("%.1f",data.position).."," + request = request.."\"pth\":"..Format("%d", data.path).."," + request = request.."\"fwd\":"..bool2str(data.forward_facing).."," + request = request.."\"lgh\":\""..string.lower(light.TrafficLight).."\" " + request = request.."}" + end + end + end + --[[request = request.."\"switches\":{" + local f = false + for index,switch in pairs(Metrostroi.PicketSignByIndex) do + if switch:IsValid() and switch.TrackSwitchName then + local state = switch:GetTrackSwitchState() + + if (not Metrostroi.SwitchStates[switch]) or + (Metrostroi.SwitchStates[switch].state ~= bits) or + (CurTime() - Metrostroi.SwitchStates[switch].time > 120) then + if f == true then request = request.."," end + f = true + Metrostroi.SwitchStates[switch] = { + state = state, + time = CurTime(), + } + + request = request.."\""..index.."\": {" + request = request.."\"id\":"..index.."," + request = request.."\"state\":"..bool2str(state) + request = request.."}" + end + end + end]]-- + request = request.."}}" + Metrostroi.HTTPRequest(request) +-- print(request) +-- http.Post("http://foxworks.wireos.com/metrostroi/ms-act.php",{ r = request, query = "update" },onSuccess,onFailure) +-- print("POST",CurTime()) +end + +timer.Create("Metrostroi_UpdateTelemetry",1.0,0,Metrostroi.UpdateTelemetry) + + + + +-------------------------------------------------------------------------------- +-- Get driver chats +-------------------------------------------------------------------------------- +if not Metrostroi.DriverChatBacklog then + Metrostroi.DriverChatBacklog = {} +end + +--[[hook.Add("PlayerSay", "Metrostroi_PlayerSay", function(ply,text,team) + local name = ply:GetName() + local trains = ents.FindInSphere(ply:GetPos(),768) --512) + local train = nil + for k,v in pairs(trains) do + if v.IsSubwayTrain then train = v end + end + + if not train then + local trains = ents.FindByClass("gmod_subway_81-717") + if trains[1] then train = trains[1] end + name = name.."[a]" + end + + if train then + Metrostroi.DriverChatBacklog[train] = Metrostroi.DriverChatBacklog[train] or {} + table.insert(Metrostroi.DriverChatBacklog[train],name..": "..text) + end + return text +end)]]-- \ No newline at end of file diff --git a/lua/metrostroi/sv_trackeditor.lua b/lua/metrostroi/sv_trackeditor.lua new file mode 100644 index 0000000..5566b6b --- /dev/null +++ b/lua/metrostroi/sv_trackeditor.lua @@ -0,0 +1,359 @@ +-------------------------------------------------------------------------------- +-- Track definition generator +-- Author: HunterNL +-------------------------------------------------------------------------------- +-- Yes, this code is a mess + + + +Metrostroi.TrackEditor = Metrostroi.TrackEditor or {} +Metrostroi.TrackEditor.Paths = Metrostroi.TrackEditor.Paths or {} + +local ANGLE_LIMIT = 10 -- At what difference from last node do we make a new node +local MAX_NODE_DISTANCE = 512 -- When do we force a new node regardless of angle difference +local MIN_NODE_DISTANCE = 100 -- Minimal distance between nodes + +-- Convert variables into something we can throw at the vector dot product and cheaper distance calculation +ANGLE_LIMIT = math.cos(math.rad(ANGLE_LIMIT)) +MAX_NODE_DISTANCE = MAX_NODE_DISTANCE ^ 2 +MIN_NODE_DISTANCE = MIN_NODE_DISTANCE ^ 2 + +local CurrentPath +local Active = false +local LastNode +local LastDir +local Train + +local FileDir = "metrostroi_data" +local FilePath = string.format("%s/track_%s.txt",FileDir,game.GetMap()) + +local function GetFile() + local name = game.GetMap() + local tracktype = 0 + if file.Exists(Format("metrostroi_data/track_%s.txt",name),"DATA") then tracktype = bit.bor(tracktype,2) end + if file.Exists(Format("metrostroi_data/track_%s.lua",name),"LUA") then tracktype = bit.bor(tracktype,1) end + if tractype == 0 then print("Track definition file not found: metrostroi_data/track_"..name..".txt") return end + + if bit.band(tracktype,2) > 0 then + paths= util.JSONToTable(file.Read(Format("metrostroi_data/track_%s.txt",name))) + print("Metrostroi: Loading track definition...") + end + if not paths and bit.band(tracktype,1) > 0 then + paths= util.JSONToTable(file.Read(Format("metrostroi_data/track_%s.lua",name),"LUA")) + print("Metrostroi: Loading default track definition...") + end + return paths +end +local DataMsgName = "metrostroi_trackeditor_trackdata" +local StrMsgName = "metrostroi_trackeditor_message" + +util.AddNetworkString(DataMsgName) +util.AddNetworkString(StrMsgName) + +local function SendTable(i,tbl,ply) + net.Start(DataMsgName) + net.WriteInt(i,16) + net.WriteTable(tbl) + net.Send(ply) +end +local function SendClientUpdate(ply) + net.Start(DataMsgName) + net.WriteInt(0,16) + net.Send(ply) + local Paths = Metrostroi.TrackEditor.Paths + for i=1,#Paths do + --timer.Simple(i*0.5,function() + SendTable(i,Paths[i],ply) + --end) + end +end + +local function SendClientMsg(ply,msg) + net.Start(StrMsgName) + net.WriteString(msg) + if ply then + net.Send(ply) + else + net.Broadcast() + end +end + +local function DebugLine(p1,p2) + debugoverlay.Line(p1,p2,10,Color(0,0,255),true) +end + +local function DrawPath(path) + local lastnode + for k,v in pairs(path) do + debugoverlay.Cross(v,10,10,Color(255,0,0),true) + if lastnode then + DebugLine(lastnode,v) + end + lastnode = v + end +end + +-- TODO: I know these are almost duplicates, will improve later +local function TeleStart(args,ply) + if #args > 0 then + ply:SetPos(Metrostroi.TrackEditor.Paths[tonumber(args[1])][1]) + end +end + +local function TeleEnd(args,ply) + if #args > 0 then + ply:SetPos(table.GetLastValue(Metrostroi.TrackEditor.Paths[tonumber(args[1])])) + end +end + +local function TeleEntStart(args,ply) + if #args > 0 and IsValid(Train) then + Train:SetPos(Metrostroi.TrackEditor.Paths[tonumber(args[1])][1]) + + if Train.Base == "gmod_subway_base" then + Metrostroi.RerailTrain(Train) + end + end +end + +local function TeleEntEnd(args,ply) + if #args > 0 and IsValid(Train) then + Train:SetPos(table.GetLastValue(Metrostroi.TrackEditor.Paths[tonumber(args[1])])) + + if Train.Base == "gmod_subway_base" then + Metrostroi.RerailTrain(Train) + end + end + +end + +local function ShowAll() + local paths = Metrostroi.TrackEditor.Paths + if not paths or #paths == 0 then return end + + for _,path in pairs(paths) do + if #path > 0 then + DrawPath(path) + end + end +end + +local function ShowStatus(_,ply) + SendClientUpdate(ply) + local paths = Metrostroi.TrackEditor.Paths + if paths and #paths > 0 then + print(string.format("%d Paths:",#paths)) + for k,path in pairs(paths) do + local suffix = "" + + if path == CurrentPath then + suffix = "<<< Active" + end + + if #path > 0 then + print(string.format("\t %d: %d nodes %s",k,#path,suffix)) + else + print("Erroneous empty path?!") + end + end + else + print("No recorded paths") + end +end + +local function Mark(args,ply) + ent = ply:GetEyeTrace().Entity + if IsEntity(ent) and IsValid(ent) then + Train = ent + print(Train," marked") + SendClientMsg(ply,tostring(Train).." marked") + end +end + +local function NextNode() + local pos = Train:LocalToWorld(Vector(Train:OBBMaxs().x,0,0))--Train:GetPos() + Train:OBBMins()*2*Train:GetAngles():Forward() + if LastNode then + DebugLine(pos,LastNode,10,Color(0,0,255),true) + LastDir = (pos - LastNode):GetNormalized() + end + debugoverlay.Cross(pos,10,10,Color(0,100,255),true) + table.insert(CurrentPath,pos) + + LastNode = pos + --Metrostroi.TrackEditor.Paths[CurrentPath][table.insert(Metrostroi.TrackEditor.Paths[CurrentPathID],self.Train:GetPos())] + --Lets not do that + --PrintTable(self.Paths) +end + +local function Think() + if not Active then return end + + local pos = Train:LocalToWorld(Vector(Train:OBBMaxs().x,0,0))--Train:GetPos() + Train:OBBMins()*2*Train:GetAngles():Forward() + + if LastNode then + CurrentDir = (pos-LastNode):GetNormalized() + end + + + if LastDir and (LastDir:Dot(CurrentDir) < ANGLE_LIMIT) + and (LastNode:DistToSqr(pos) > MIN_NODE_DISTANCE) + then + NextNode() + end + + if LastNode:DistToSqr(pos) > MAX_NODE_DISTANCE then + NextNode() + end +end +-- Unused +local function ClientDraw() + if GetConVarNumber("metrostroi_drawsignaldebug") <= 0 then return end + if #Metrostroi.TrackEditor.Paths == 0 then return end + + local lastpos + for _,path in pairs(Metrostroi.TrackEditor.Paths) do + if #path > 0 then + local drawcolor + if path == CurrentPath then + drawcolor = {0,255,0} + else + drawcolor = {0,0,255} + end + + for k,node in pairs(path) do + if lastpos then + render.DrawLine(lastpos,node,drawcolor,false) + end + render.DrawWireframeSphere(node,10,2,2,drawcolor,false) + lastpos = node + end + end + end +end + +local function FinishPath(args,ply) + NextNode() + CurrentPath = nil + LastNode = nil + LastDir = nil + print("Path ended") + SendClientMsg(ply,"Path ended") +end + +local function RemovePath(args,ply) + local id = tonumber(args[1]) + local path = Metrostroi.TrackEditor.Paths[id] + if path == CurrentPath then + FinishPath() + end + table.remove(Metrostroi.TrackEditor.Paths,id) + SendClientUpdate(ply) +end + +--Takes forward direction +local function StartPath(id) + if id then + print("Re-recording path "..id) + else + print("New Path") + end + + if id then + Metrostroi.TrackEditor.Paths[id] = {} + CurrentPath = Metrostroi.TrackEditor.Paths[id] + else + local ID = table.insert(Metrostroi.TrackEditor.Paths,{}) + CurrentPath = Metrostroi.TrackEditor.Paths[ID] + end + + local forward = forward or (Train and Train:GetAngles():Forward()) + LastDir = forward*-1 + + NextNode() +end + + +local function Start(args,ply) + if Active then + print("Already started") + SendClientMsg(ply,"Already started") + return + end + + if Train then + StartPath(tonumber(args[1])) + Active = true + print("Started") + SendClientMsg(ply,"Started") + else + print("No train!") + SendClientMsg(ply,"No train!") + end +end + +local function Stop(args,ply) + if Active then + FinishPath() + Active = false + SendClientUpdate(ply) + else + print("Not active") + SendClientMsg(ply,"Not active") + end +end + +local function Save(args,ply) + if not file.Exists(FileDir,"DATA") then + file.CreateDir(FileDir) + end + local data = util.TableToJSON(Metrostroi.TrackEditor.Paths,true) + local path = FilePath + file.Write(path,data) + print("Saved to " .. path) + SendClientMsg(ply,"Saved to file") +end + +local function Load(args,ply) + local tbl = GetFile() + if tbl == nil then + print("JSON Parse error reading from "..FilePath) + else + Metrostroi.TrackEditor.Paths = tbl -- Maybe requires hardcopy? + print("Loaded from "..FilePath) + SendClientMsg(ply,"Loaded from file") + SendClientUpdate(ply) + end +end + + +hook.Add("Think","metrostroi track editor",Think) + +local function AddCmd(name,func,helptext,flags) + concommand.Add(string.format("metrostroi_trackeditor_%s",name),function(ply,cmd,args,fullstring) if ply:IsAdmin() then func(args,ply) end end,flags,helptext) +end + +AddCmd("start",Start,"Start recording a new path") +AddCmd("stop",Stop,"Stop recording a path") +AddCmd("removepath",RemovePath,"Remove path with given ID") +AddCmd("save",Save,"Save the current paths to file") +AddCmd("load",Load,"Load paths from file") +AddCmd("status",ShowStatus,"Show status") +AddCmd("mark",Mark,"Mark the given ent index as ent to record with") +AddCmd("teletostart",TeleStart,"Teleport to the start of the given path") +AddCmd("teletoend",TeleEnd,"Teleport to the end of the given path") +AddCmd("teleenttostart",TeleEntStart,"Teleport train to the end of the given path") +AddCmd("teleenttoend",TeleEntEnd,"Teleport train to the end of the given path") + +--[[ +if SERVER and false then + concommand.Add("metrostroi_trackeditor_mark",function(ply,cmd,args,fullstring) Mark(ply:GetEyeTrace().Entity) end,nil,"Mark currently aimed at entity as track editing source") + concommand.Add("metrostroi_trackeditor_start",function(ply,cmd,args,fullstring) Start() end,nil,"Start recording") + concommand.Add("metrostroi_trackeditor_stop",function(ply,cmd,args,fullstring) Stop() end,nil,"Stop recording") + concommand.Add("metrostroi_trackeditor_drawall",function(ply,cmd,args,fullstring) timer.Simple(0.05,ShowAll) end,nil,"Draw all paths") + concommand.Add("metrostroi_trackeditor_status",function(ply,cmd,args,fullstring) ShowStatus() end,nil,"Show path status") + concommand.Add("metrostroi_trackeditor_drawpath",function(ply,cmd,args,fullstring) timer.Simple(0.05,function() DrawPathID(args) end) end,nil,"Draw single path") + concommand.Add("metrostroi_trackeditor_removepath",function(ply,cmd,args,fullstring) RemovePath(args) end,nil,"Remove a path") + concommand.Add("metrostroi_trackeditor_save",function(ply,cmd,args,fullstring) Save(args) end,nil,"Save track") + concommand.Add("metrostroi_trackeditor_load",function(ply,cmd,args,fullstring) Load(args) end,nil,"Load track") +end +--]] diff --git a/lua/metrostroi/sv_turbostroi.lua b/lua/metrostroi/sv_turbostroi.lua new file mode 100644 index 0000000..91a45f3 --- /dev/null +++ b/lua/metrostroi/sv_turbostroi.lua @@ -0,0 +1,452 @@ +-------------------------------------------------------------------------------- +-- Simulation acceleration DLL support +-------------------------------------------------------------------------------- +if Turbostroi and Turbostroi.SetMTAffinityMask then return end +local turbostroiTrains = {} +if not TURBOSTROI then + local FPS = 33 + local messageTimeout = 0 + local messageCounter = 0 + local dataCache = {{},{}} + hook.Add("EntityRemoved","Turbostroi",function(ent) + if dataCache[ent] then + dataCache[ent] = nil + end + if turbostroiTrains[ent] then + turbostroiTrains[ent] = nil + end + end) + for k,ent in pairs(ents.GetAll()) do + if ent.Base == "gmod_subway_base" and not ent.NoTrain and not ent.DontAccelerateSimulation then + turbostroiTrains[ent] = true + end + end + hook.Add("OnEntityCreated","Turbostroi",function(ent) + timer.Simple(0,function() + if IsValid(ent) and ent.Base == "gmod_subway_base" and not ent.NoTrain and not ent.DontAccelerateSimulation then + turbostroiTrains[ent] = true + end + end) + end) + local inputCache = {} + local id,system,name,index,value + local function updateTrains(trains) + --local recvMessage = Turbostroi.RecvMessage + -- Get data packets from simulation + for train in pairs(trains) do + if not dataCache[train] then + Turbostroi.SendMessage(train,5,"","",0,0) + dataCache[train] = {wiresW = {}} + + for sys_name,system in pairs(train.Systems) do + if system.OutputsList and system.DontAccelerateSimulation then + for _,name in pairs(system.OutputsList) do + local value = system[name] or 0 + if type(value) == "boolean" then value = value and 1 or 0 end + if type(value) == "number" then + if not dataCache[train][sys_name] then dataCache[train][sys_name] = {} end + dataCache[train][sys_name][name] = math.Round(value) + end + end + end + end + end + local systems = train.Systems + local twWritersID = train.TrainWireWritersID + local twTurbostroi = train.TrainWireTurbostroi + local tti = train.TriggerTurbostroiInput + while true do + id,system,name,index,value = Turbostroi.RecvMessage(train) + --print(id,system,name,index,value) + --while true do --OLDTURBOSTROI + --id,system,name,index,value = Turbostroi.RecvMessage(train) + if id == 1 then + if systems[system] then + systems[system][name] = value + if tti then tti(train,system,name,value) end + end + end + if id == 2 then + if index == 0 and name ~= "bass" then index = nil end + if value == 0 and name ~= "bass" then value = nil end + if name == "" then name = nil end + --net.WriteString(name) + train:PlayOnce(system,name,index,value) + end + if id == 3 then + if name == "on" then + --print("[!]Wire "..index.." starts update! Value "..value) + dataCache[train]["wiresW"][index] = value + --train:WriteTrainWire(index,value) + if not twWritersID[index] then twWritersID[index] = true end + twTurbostroi[index] = value + if tti then tti(train,"TrainWire",index,value) end + else + --print("[!]Wire "..index.." stop update!") + dataCache[train]["wiresW"][index] = nil + end + end + if id == 4 then + if systems[system] then + systems[system]:TriggerInput(name,value) + end + end + --[[if id == 5 then + for twid,value in pairs(dataCache[train]["wiresW"]) do + --train:WriteTrainWire(twid,value) + end + end]] + + if not id then break end + messageCounter = messageCounter + 1 + end + --[[ + end + -- Send train wire values + -- Output all system values + for train in pairs(trains) do + ]] + for i in pairs(train.TrainWires) do + if not dataCache[train]["wires"] then dataCache[train]["wires"] = {} end + if dataCache[train]["wires"][i] ~= train:ReadTrainWire(i) then + Turbostroi.SendMessage(train,3,"","",i,train:ReadTrainWire(i)) + dataCache[train]["wires"][i] = train:ReadTrainWire(i) + end + end + for sys_name,system in pairs(train.Systems) do + if system.OutputsList and system.DontAccelerateSimulation then + for _,name in pairs(system.OutputsList) do + local value = system[name] or 0 + if type(value) == "boolean" then + value = value and 1 or 0 + end + if type(value) == "number" then + value = math.Round(value) + if not dataCache[train][sys_name] then dataCache[train][sys_name] = {} end + if dataCache[train][sys_name][name] ~= value then + Turbostroi.SendMessage(train,1,sys_name,name,0,value) + dataCache[train][sys_name][name] = value + end + end + end + end + end + end + end + + if Turbostroi then + function Turbostroi.TriggerInput(train,system,name,value) + local v = value or 0 + if type(value) == "boolean" then v = value and 1 or 0 end + Turbostroi.SendMessage(train,4,system,name,0,v) + --end + end + hook.Add("Think", "Turbostroi_Think", function() + if not Turbostroi then return end + + -- Proceed with the think loop + Turbostroi.SetSimulationFPS(FPS) + Turbostroi.SetTargetTime(CurTime()) + Turbostroi.Think() + + -- Update all types of trains + --for k,v in ipairs(turbostroiTrains) do + updateTrains(turbostroiTrains) + --end + + -- HACK + GLOBAL_SKIP_TRAIN_SYSTEMS = nil + + -- Print stats + if ((CurTime() - messageTimeout) > 1.0) then + messageTimeout = CurTime() + --RunConsoleCommand("say",Format("Metrostroi: %d messages per second (%d per tick)",messageCounter,messageCounter / FPS)) + messageCounter = 0 + end + end) + end + return +end + + + + +-------------------------------------------------------------------------------- +-- Turbostroi scripts +-------------------------------------------------------------------------------- +Metrostroi = {} +local dataCache = {wires = {},wiresW = {},wiresL = {}} +Metrostroi.BaseSystems = {} -- Systems that can be loaded +Metrostroi.Systems = {} -- Constructors for systems + +LoadSystems = {} -- Systems that must be loaded/initialized +GlobalTrain = {} -- Train emulator +GlobalTrain.Systems = {} -- Train systems +GlobalTrain.TrainWires = {} +GlobalTrain.WriteTrainWires = {} + +function CurTime() return CurrentTime end + +function Metrostroi.DefineSystem(name) + TRAIN_SYSTEM = {} + Metrostroi.BaseSystems[name] = TRAIN_SYSTEM + + -- Create constructor + Metrostroi.Systems[name] = function(train,...) + local tbl = { _base = name } + local TRAIN_SYSTEM = Metrostroi.BaseSystems[tbl._base] + if not TRAIN_SYSTEM then print("No system: "..tbl._base) return end + for k,v in pairs(TRAIN_SYSTEM) do + if type(v) == "function" then + tbl[k] = function(...) + if not Metrostroi.BaseSystems[tbl._base][k] then + print("ERROR",k,tbl._base) + end + return Metrostroi.BaseSystems[tbl._base][k](...) + end + else + tbl[k] = v + end + end + + tbl.Initialize = tbl.Initialize or function() end + tbl.Think = tbl.Think or function() end + tbl.Inputs = tbl.Inputs or function() return {} end + tbl.Outputs = tbl.Outputs or function() return {} end + tbl.TriggerInput = tbl.TriggerInput or function() end + tbl.TriggerOutput = tbl.TriggerOutput or function() end + + tbl.Train = train + tbl:Initialize(...) + tbl.OutputsList = tbl:Outputs() + tbl.InputsList = tbl:Inputs() + tbl.IsInput = {} + for k,v in pairs(tbl.InputsList) do tbl.IsInput[v] = true end + return tbl + end +end + +function GlobalTrain.LoadSystem(self,a,b,...) + local name + local sys_name + if b then + name = b + sys_name = a + else + name = a + sys_name = a + end + + if not Metrostroi.Systems[name] then print("Error: No system defined: "..name) return end + if self.Systems[sys_name] then print("Error: System already defined: "..sys_name) return end + + self[sys_name] = Metrostroi.Systems[name](self,...) + --if (name ~= sys_name) or (b) then self[sys_name].Name = sys_name end + self[sys_name].Name = sys_name + self[sys_name].BaseName = name + self.Systems[sys_name] = self[sys_name] + + local no_acceleration = Metrostroi.BaseSystems[name].DontAccelerateSimulation + + -- Don't simulate on here + if no_acceleration then + self.Systems[sys_name].Think = function() end + self.Systems[sys_name].TriggerInput = function(train,name,value) + local v = value or 0 + if type(value) == "boolean" then v = value and 1 or 0 end + SendMessage(4,sys_name,name,0,v) end + + --Precache values + elseif self[sys_name].OutputsList then + dataCache[sys_name] = {} + for _,name in pairs(self[sys_name].OutputsList) do + dataCache[sys_name][name] = 0--self[sys_name][name] or 0 + end + end +end + +function GlobalTrain.PlayOnce(self,soundid,location,range,pitch) + SendMessage(2,soundid or "",location or "",range or 0,pitch or 0) +end + +function GlobalTrain.ReadTrainWire(self,n) + return self.TrainWires[n] or 0 +end + +function GlobalTrain.WriteTrainWire(self,n,v) + self.WriteTrainWires[n] = v +end + + + +local _GENREPORT = false +local _REPORT = {} + +-------------------------------------------------------------------------------- +-- Main train code (turbostroi side) +-------------------------------------------------------------------------------- +print("[!] Train initialized!") +function Think() + -- This is just blatant copy paste from init.lua of base train entity + local self = GlobalTrain + ---------------------------------------------------------------------------- + self.PrevTime = self.PrevTime or CurTime() + self.DeltaTime = (CurTime() - self.PrevTime) + + -- Is initialized? + if not self.Initialized then return end + + -- Perform data exchange + DataExchange() + if not messageTimeout or ((CurTime() - messageTimeout) > 1.0) then + messageTimeout = CurTime() + --print(string.format("Metrostroi: %d messages per second (~%d per tick)",messageCounter,messageCounter / (1/self.DeltaTime))) + + if _GENREPORT then + local totalALl = 0 + print("[!] Performance report:") + for sys_name,iters in pairs(_REPORT) do + if #iters == 1 then + if self[sys_name].BaseName ~= "Relay" and iters[1] > 0 then print(string.format("[!] -System:%s took:%.3f ~fps:%03d",sys_name,iters[1],1/iters[1])) end + totalALl = totalALl + iters[1] + else + --if self[sys_name].BaseName ~= "Relay" then print(string.format("[!] -System:%s",sys_name)) end + local total = 0 + for i,took in ipairs(iters) do + --print(string.format("[!] --I:%02d took:%.3f ~fps:%03d",i,took,1/took)) + total = total + took + end + if self[sys_name].BaseName ~= "Relay" and total > 0 then print(string.format("[!] -System:%s Total:%.3f ~fps:%03d",sys_name,total,1/total)) end + totalALl = totalALl + total + end + end + print(string.format("[!] -Total report:%.3f ~fps:%03d",totalALl,1/totalALl)) + end + messageCounter = 0 + end + -- Run iterations on systems simulation + if _GENREPORT then + _REPORT = {} + -- Simulate according to schedule + for i,s in ipairs(self.Schedule) do + for k,v in ipairs(s) do + if not _REPORT[v.Name] then _REPORT[v.Name] = {} end + local time = os.clock() + v:Think(self.DeltaTime / (v.SubIterations or 1),i) + table.insert(_REPORT[v.Name],os.clock()-time) + end + end + else + -- Simulate according to schedule + for i,s in ipairs(self.Schedule) do + for k,v in ipairs(s) do + v:Think(self.DeltaTime / (v.SubIterations or 1),i) + end + end + end + self.PrevTime = CurTime() +end + + +function Initialize() + print("[!] Loading systems") + local time = os.clock() + for k,v in pairs(LoadSystems) do + GlobalTrain:LoadSystem(k,v) + end + print(string.format("[!] -Took %.2fs",os.clock()-time)) + + local iterationsCount = 1 + if (not GlobalTrain.Schedule) or (iterationsCount ~= GlobalTrain.Schedule.IterationsCount) then + GlobalTrain.Schedule = { IterationsCount = iterationsCount } + local SystemIterations = {} + + -- Find max number of iterations + local maxIterations = 0 + for k,v in pairs(GlobalTrain.Systems) do + SystemIterations[k] = (v.SubIterations or 1) + maxIterations = math.max(maxIterations,(v.SubIterations or 1)) + end + + -- Create a schedule of simulation + for iteration=1,maxIterations do + GlobalTrain.Schedule[iteration] = {} + -- Populate schedule + for k,v in pairs(GlobalTrain.Systems) do + if ((iteration)%(maxIterations/(v.SubIterations or 1))) == 0 then + table.insert(GlobalTrain.Schedule[iteration],v) + end + + end + end + end + --dataCache = {} + -- Output all variable values + GlobalTrain.Initialized = true +end +messageCounter = 0 +function DataExchange() + -- Get data packets + local id,system,name,index,value + while true do + id,system,name,index,value = RecvMessage() + messageCounter = messageCounter + 1 + if id == 1 then + if GlobalTrain.Systems[system] then + GlobalTrain.Systems[system][name] = value + end + end + if id == 3 then + dataCache["wiresW"][index] = value + end + if id == 4 then + if GlobalTrain.Systems[system] then + GlobalTrain.Systems[system]:TriggerInput(name,value) + end + end + if id == 5 then + dataCache["wiresL"] = {} + end + if not id then break end + end + for twid,value in pairs(dataCache["wiresW"]) do + GlobalTrain.TrainWires[twid] = value + end + + -- Output all variable values + for sys_name,system in pairs(GlobalTrain.Systems) do + if system.OutputsList and (not system.DontAccelerateSimulation) then + for _,name in pairs(system.OutputsList) do + local value = (system[name] or 0) + --if type(value) == "boolean" then value = value and 1 or 0 end + if not dataCache[sys_name] then print(sys_name) end + if dataCache[sys_name][name] ~= value then + SendMessage(1, sys_name , name, 0, tonumber(value) or 0) + dataCache[sys_name][name] = value + end + end + end + end + --print(CurTime(),GlobalTrain.DeltaTime) + -- Output train wire writes + for twID,value in pairs(GlobalTrain.WriteTrainWires) do + --local value = tonumber(value) or 0 + if dataCache["wires"][twID] ~= value then + dataCache["wires"][twID] = value + dataCache["wiresL"][twID] = false + end + if not dataCache["wiresL"][twID] or dataCache["wiresL"][twID]~=GlobalTrain.PrevTime then + SendMessage(3, "", "on", tonumber(twID) or 0, dataCache["wires"][twID]) + end + GlobalTrain.WriteTrainWires[twID] = nil + dataCache["wiresL"][twID] = CurTime() + end + for twID,time in pairs(dataCache["wiresL"]) do + if time~=CurTime() then + SendMessage(3, "", "off", tonumber(twID) or 0, 0) + --print("[!]Wire "..twID.." stops update!") + dataCache["wiresL"][twID] = nil + end + end + SendMessage(5,"","",0,0) +end diff --git a/lua/metrostroi/sv_turbostroi_railnetwork.lua b/lua/metrostroi/sv_turbostroi_railnetwork.lua new file mode 100644 index 0000000..08d02a7 --- /dev/null +++ b/lua/metrostroi/sv_turbostroi_railnetwork.lua @@ -0,0 +1,1299 @@ +if not TURBOSTROI and (not Turbostroi or not Turbostroi.SetMTAffinityMask) then return end +if not TURBOSTROI then + Turbostroi.StartRailNetwork() + + --Turbostroi.RnSendMessage(ent_id, id, name, value) + --Turbostroi.RnRecvMessages() + return +end +-------------------------------------------------------------------------------- +-- Turbostroi scripts (turbostroi side) +-------------------------------------------------------------------------------- +print("[!] RailNetwork initialized!") +-- NEW API +local ffi = require("ffi") +local C = ffi.load("gmsv_turbostroi_win32") +ffi.cdef[[ +bool RnThreadSendMessage(int ent_id, int id, const char* name, double value); +]] + +function CurTime() return CurrentTime end +Metrostroi = {} +if not Metrostroi.Paths then + -- Definition of paths used in runtime + Metrostroi.Paths = {} + -- Spatial lookup for nodes + Metrostroi.SpatialLookup = {} + + -- List of signal entities for every track segment/node + Metrostroi.SignalEntitiesForNode = {} + -- List of nodes for every signal entity + Metrostroi.SignalEntityPositions = {} + -- List of track switches for every track segment/node + Metrostroi.SwitchesForNode = {} + -- List of trains for every segment/node + Metrostroi.TrainsForNode = {} + -- List of train positions + Metrostroi.TrainPositions = {} + --List of train directions on the way + Metrostroi.TrainDirections = {} + Metrostroi.GetARSJointCache = {} + -- List of stations/platforms + Metrostroi.Stations = {} + + -- List of ARS subsections + Metrostroi.ARSSubSections = {} + + -- List of names for signals + Metrostroi.SignalEntitiesByName = {} + + -- List of names for switches + Metrostroi.SwitchesByName = {} + + -- Should position updates in switches and signals be ignores + Metrostroi.IgnoreEntityUpdates = false + + Metrostroi.OldUpdateTime = 0 +end + +-------------------------------------------------------------------------------- +-- Size of spatial cells into which all the 3D space is divided +local SPATIAL_CELL_WIDTH = 1024 +local SPATIAL_CELL_HEIGHT = 256 + +-- Return spatial cell indexes for given XYZ +local function spatialPosition(pos) + return math.floor(pos.x/SPATIAL_CELL_WIDTH), + math.floor(pos.y/SPATIAL_CELL_WIDTH), + math.floor(pos.z/SPATIAL_CELL_HEIGHT) +end + +-- Return list of nodes in spatial cell kx,ky,kz +local empty_table = {} +local function spatialNodes(kx,ky,kz) + if Metrostroi.SpatialLookup[kz] then + if Metrostroi.SpatialLookup[kz][kx] then + return Metrostroi.SpatialLookup[kz][kx][ky] or empty_table + else + return empty_table + end + else + return empty_table + end +end + + +-------------------------------------------------------------------------------- +-- for nodeID,node in Metrostroi.NearestNodes(pos) do ... end +-- +-- This is used for iterating through nodes around given position +-------------------------------------------------------------------------------- +function Metrostroi.NearestNodes(pos) + local kx,ky,kz = spatialPosition(pos) + local t = {} + for x=-1,1 do for y=-1,1 do for z=-1,1 do + table.insert(t,spatialNodes(kx+x,ky+y,kz+z)) + end end end + + local i,j = 0,1 + return function () + -- Find next set of nodes that's not empty + while (j <= #t) and (i >= #t[j]) do + j = j + 1; i = 0 + end + -- Should iterator end + if j > #t then return nil end + + -- Iterate table like normal + i = i + 1 + if i <= #t[j] then return t[j][i].id,t[j][i] end + end +end + +-------------------------------------------------------------------------------- +-- Return position on track for target XYZ +-- +-- Simply checks every line between two nodes, for all ndoes around position +-------------------------------------------------------------------------------- +function Metrostroi.GetPositionOnTrack(pos,ang,opts) + if not opts then opts = empty_table end + + -- Angle can be specified to determine if facing forward or backward + ang = ang or Angle(0,0,0) + + -- Size of box which envelopes region of space that counts as being on track + local X_PAD = 0 + local Y_PAD = opts.y_pad or opts.radius or 384/2 + local Z_PAD = opts.z_pad or 256/2 + + -- Find position on any track + local results = {} + for nodeID,node in Metrostroi.NearestNodes(pos) do + -- Get local coordinate system of a section + local forward = node.dir + local up = Vector(0,0,1) + local right = forward:Cross(up) + + -- Transform position into local coordinates + local local_pos = pos - node.pos + local local_x = local_pos:Dot(forward) + local local_y = local_pos:Dot(right) + local local_z = local_pos:Dot(up) + local yz_delta = math.sqrt(local_y^2 + local_z^2) + + -- Determine if facing forward or backward + local local_dir = ang:Forward() + local dir_delta = local_dir:Dot(forward) + local dir_forward = dir_delta > 0 + local dir_angle = 90-math.deg(math.acos(dir_delta)) + + -- If this position resides on track, add it to results + if ((local_x > -X_PAD) and (local_x < node.vec:Length()+X_PAD) and + (local_y > -Y_PAD) and (local_y < Y_PAD) and + (local_z > -Z_PAD) and (local_z < Z_PAD)) and (node.path ~= opts.ignore_path) then + + table.insert(results,{ + node1 = node, + node2 = node.next, + path = node.path, + + angle = dir_angle, -- Angle between forward vector and axis of track + forward = dir_forward, -- Is facing forward relative to track + x = local_x*0.01905 + node.x, -- Local coordinates in track curvilinear coordinates + y = local_y*0.01905, -- + z = local_z*0.01905, -- + + distance = yz_delta, -- Distance to path axis + }) + end + end + + -- Sort results by distance + table.sort(results, function(a,b) return a.distance < b.distance end) + + -- Return list of positions + return results +end + + +-------------------------------------------------------------------------------- +-- Return XYZ for given position on path +-------------------------------------------------------------------------------- +function Metrostroi.GetTrackPosition(path,x) + -- Build a lookup + if not path.GetTrackPosition then + path.GetTrackPosition = {} + for nodeID,node in ipairs(path) do + if not path.GetTrackPosition[math.floor(node.x/500)] then + path.GetTrackPosition[math.floor(node.x/500)] = nodeID + end + end + end + + -- Find offset on path path.GetTrackPosition[math.floor(x/200)] or + local startNodeID = 1 + for nodeID=startNodeID,#path do + local node = path[nodeID] + if (node.x < x) and (path[nodeID+1]) and (path[nodeID+1].x > x) then + local dir1 = node.dir + local dir2 = path[nodeID+1].dir + local t = (x - node.x)/node.length + return (node.pos+node.vec*t),dir1*(1-t)+dir2*t,node + end + end +end + +function Metrostroi.UpdateSignalNames() + print("Metrostroi: Updating signal names...") + Metrostroi.SignalEntitiesByName = {} + Metrostroi.GetARSJointCache = {} + local entities = ents.FindByClass("gmod_track_signal") + for k,v in pairs(entities) do + if v.Name then + if Metrostroi.SignalEntitiesByName[v.Name] then-- + print(string.format("Metrostroi: Signal with this name %s already exists! Check signal names!\nInfo:\n\tFirst signal: %s\n\tPos: %s\n\tSecond signal: %s\n\tPos: %s", + v.Name, Metrostroi.SignalEntitiesByName[v.Name], Metrostroi.SignalEntitiesByName[v.Name]:GetPos(), v, v:GetPos())) + else + Metrostroi.SignalEntitiesByName[v.Name] = v + end + end + end +end +-------------------------------------------------------------------------------- +-- Update list of signal entities and signal positions on track +-------------------------------------------------------------------------------- +function Metrostroi.UpdateSignalEntities() + if Metrostroi.IgnoreEntityUpdates then return end + if CurTime() - Metrostroi.OldUpdateTime < 0.05 then + print("Metrostroi: Stopping all updates!") + Metrostroi.IgnoreEntityUpdates = true + timer.Simple(0.2, function() + print("Metrostroi: Retrieve updates.") + Metrostroi.IgnoreEntityUpdates = false + Metrostroi.UpdateSignalEntities() + Metrostroi.UpdateSwitchEntities() + Metrostroi.UpdateARSSections() + end) + return + end + Metrostroi.OldUpdateTime = CurTime() + local options = { z_pad = 256 } + + Metrostroi.UpdateSignalNames() + + Metrostroi.SignalEntitiesForNode = {} + Metrostroi.SignalEntityPositions = {} + + local count = 0 + local repeater = 0 + local entities = ents.FindByClass("gmod_track_signal") + print("Metrostroi: PreInitialize signals") + for k,v in pairs(entities) do + local pos = Metrostroi.GetPositionOnTrack(v:GetPos(),v:GetAngles() - Angle(0,90,0),options)[1] + local pos2 = Metrostroi.GetPositionOnTrack(v:LocalToWorld(Vector(0,10,0)), v:GetAngles() - Angle(0,90,0),options) + if pos then -- FIXME make it select proper path + + Metrostroi.SignalEntitiesForNode[pos.node1] = + Metrostroi.SignalEntitiesForNode[pos.node1] or {} + table.insert(Metrostroi.SignalEntitiesForNode[pos.node1],v) + + -- A signal belongs only to a single track + Metrostroi.SignalEntityPositions[v] = pos + v.TrackPosition = pos + v.TrackX = pos.x + if pos2 and pos2[1] then + v.TrackDir = (pos2[1].x - v.TrackX) < 0 + else + print(string.format("Metrostroi: Signal %s, second position not found, system can't detect direction of the signal!",v.Name)) + v.TrackDir = true + end + if not v.ARSOnly then + --v.AutostopPos = Metrostroi.GetTrackPosition(pos.path,v.TrackX - (v.TrackDir and 2.5 or -2.5)) + --if not v.AutostopPos then print(string.format("Metrostroi: Signal %s, can't place autostop!",v.Name)) end + end + else + if not v.Routes or v.Routes[1].NextSignal ~= "" then + print(string.format("Metrostroi: Signal %s, position not found, system can't detect the track occupation!",v.Name)) + end + end + if not v.Routes[1] then ErrorNoHalt(string.format("Metrostroi: Signal %s don't have first route!",v.Name)) end + if v.Routes and v.Routes[1].Repeater then + repeater = repeater + 1 + end + count = count + 1 + v:PreInitalize() + end + print(string.format("Metrostroi: Total signals: %u (normal: %u, repeaters: %u)", count, count-repeater, repeater)) +end + +function Metrostroi.PostSignalInitialize() + if Metrostroi.IgnoreEntityUpdates then return end + print("Metrostroi: PostInitialize signals") + local entities = ents.FindByClass("gmod_track_*") + for k,v in pairs(entities) do + if v.PostInitalize then v:PostInitalize() end + end +end + +-------------------------------------------------------------------------------- +-- Update lists of switches +-- +-- This is used for searching where the switches belong on tracks. One switch +-- belongs to one track. +-------------------------------------------------------------------------------- +function Metrostroi.UpdateSwitchEntities() + if Metrostroi.IgnoreEntityUpdates then return end + Metrostroi.SwitchesForNode = {} + Metrostroi.SwitchesByName = {} + + local entities = ents.FindByClass("gmod_track_switch") + for k,v in pairs(entities) do + local pos = Metrostroi.GetPositionOnTrack(v:GetPos(),v:GetAngles() - Angle(0,90,0))[1] + if pos then + if not v.Name or v.Name == "" then + --pos.path.id.."/"..pos.node1.id + if not Metrostroi.SwitchesByName[pos.path.id] then Metrostroi.SwitchesByName[pos.path.id] = {} end + Metrostroi.SwitchesByName[pos.path.id][pos.node1.id] = v + end + Metrostroi.SwitchesForNode[pos.node1] = Metrostroi.SwitchesForNode[pos.node1] or {} + table.insert(Metrostroi.SwitchesForNode[pos.node1],v) + v.TrackPosition = pos -- FIXME: check that one switch belongs to one track + end + if v.Name and v.Name ~= "" then + Metrostroi.SwitchesByName[v.Name] = v + end + + end + Metrostroi.PostSignalInitialize() +end + + +-------------------------------------------------------------------------------- +-- Add additional ARS element in the given node +-- +-- These ARS elements do not isolate track signals, only isolate ARS signals +-------------------------------------------------------------------------------- +function Metrostroi.AddARSSubSection(node,source) + if true then return end + local ent = ents.Create("gmod_track_signal") + if not IsValid(ent) then return end + + local tr = Metrostroi.RerailGetTrackData(node.pos - node.dir*32,node.dir) + if not tr then return end + + ent:SetPos(tr.centerpos - tr.up * 9.5) + ent:SetAngles((-tr.right):Angle()) + ent:Spawn() + + -- Add to list of ARS subsections + Metrostroi.ARSSubSections[ent] = true + Metrostroi.ARSSubSectionCount = Metrostroi.ARSSubSectionCount + 1 +end + + +-------------------------------------------------------------------------------- +-- Update ARS sections (and add additional subsections (now not needed) +-------------------------------------------------------------------------------- +function Metrostroi.UpdateARSSections() + --[[ + Metrostroi.ARSSubSections = {} + Metrostroi.ARSSubSectionCount = 0 + + print("Metrostroi: Updating ARS subsections...") + Metrostroi.IgnoreEntityUpdates = true + for k,v in pairs(Metrostroi.SignalEntityPositions) do + -- Find signal which sits BEFORE this signal + local signal = Metrostroi.GetARSJoint(v.node1,v.x,true) + + --Metrostroi.GetNextTrafficLight(v.node1,v.x,not v.forward,true) + if IsValid(k) and signal then + local pos = Metrostroi.SignalEntityPositions[signal] + --debugoverlay.Line(k:GetPos(),signal:GetPos(),10,Color(0,0,255),true) + + -- Interpolate between two positions and add intermediates + local count = 0 + local offset = 0 + local delta_offset = 120 --100 + if (v.path == pos.path) and (pos.x < v.x) then + --print(string.format("Metrostroi: Adding ARS sections between [%d] %.0f -> %.0f m",pos.path.id,pos.x,v.x)) + local node = pos.node1 + while (node) and (node ~= v.node1) do + if (offset > delta_offset) and (math.abs(node.x - v.x) > delta_offset) then + Metrostroi.AddARSSubSection(node,signal) + offset = offset - delta_offset + count = count + 1 + end + + node = node.next + if node then + offset = offset + node.length + end + end + end + --if count == 0 then + --print("Could not add any signals for",k) + --end + end + end + Metrostroi.IgnoreEntityUpdates = false + Metrostroi.UpdateSignalEntities() + + print(string.format("Metrostroi: Added %d ARS rail joints",Metrostroi.ARSSubSectionCount)) + ]] +end + + +-------------------------------------------------------------------------------- +-- Scans an isolated track segment and for every useable segment calls func +-------------------------------------------------------------------------------- +local check_table = {} +function Metrostroi.ScanTrack(itype,node,func,x,dir,checked,startx,train) + if not startx then startx = x end + local light,ars,switch = itype == "light",itype == "ars",itype == "switch" + -- Check if this node was already scanned + if not node then return end + if not checked then + for k,v in pairs(check_table) do + check_table[k] = nil + end + checked = check_table + end + if checked[node] then return end + checked[node] = true + -- Try to use entire node length by default + local min_x = node.x + local max_x = min_x + node.length + + -- Get range of node which can be actually sensed + local isolateForward = false -- Should scanning continue forward along track + local isolateBackward = false -- Should scanning continue backward along track + if Metrostroi.SignalEntitiesForNode[node] then + for k,v in pairs(Metrostroi.SignalEntitiesForNode[node]) do + local isolating = false + if IsValid(v) then + if light then + isolating = ((v.TrackDir == dir and not v.Routes[v.Route or 1].Repeater) or (v.TrackDir == dir and v.Routes[v.Route or 1].Repeater and tonumber(v.RouteNumber) == 9) or (tonumber(v.RouteNumber) ~= nil and v.Routes[v.Route or 1].Repeater)) and not v.PassOcc + end + if ars then + isolating = v.TrackDir == dir + end + if switch then + isolating = v.IsolateSwitches + end + --if itype == "ars" then isolating = true end + end + if isolating then + -- If scanning forward, and there's a joint IN FRONT of current X + if dir and (v.TrackX > x) then + max_x = math.min(max_x,v.TrackX) + isolateForward = true + end + -- If scanning forward, and there's a joint in current X + -- This is triggered when traffic light searches for next light from its own X (then + -- scan direction is defined by dir) + if dir and (v.TrackX == x) then + min_x = math.max(min_x,v.TrackX) + isolateBackward = true + end + -- if scanning backward, and there's a joint BEHIND current X + if (not dir) and (v.TrackX < x) then + min_x = math.max(min_x,v.TrackX) + isolateBackward = true + end + -- If scanning backward starting from current X, use dir for guiding scan + if (not dir) and (v.TrackX == x) then + max_x = math.min(max_x,v.TrackX) + isolateForward = true + end + end + end + end + + -- Show the scanned path + --[[if GetConVarNumber("metrostroi_drawdebug") == 1 then + local T = CurTime() + timer.Simple(0.05 + math.random()*0.05,function() + if node.next then + debugoverlay.Line(node.pos,node.next.pos,3,Color((T*1234)%255,(T*12345)%255,(T*12346)%255),true) + end + end) + end]]-- + + -- Call function for the determined portion of the node + local results = {func(node,min_x,max_x)} + if results[1] ~= nil then + return unpack(results) + end + -- First check all the branches, whose positions fall within min_x..max_x + if node.branches and not ars then + for k,v in pairs(node.branches) do + if (v[1] >= min_x) and (v[1] <= max_x) then + -- FIXME: somehow define direction and X! + local results = {Metrostroi.ScanTrack(itype,v[2],func,v[1],true,checked,startx)} + if results[1] ~= nil then return unpack(results) end + end + end + end + -- If not isolated, continue scanning forward from the front end of node + if (dir or switch)and (not isolateForward) then + local results = {Metrostroi.ScanTrack(itype,node.next,func,max_x,true,checked,startx)} + if results[1] ~= nil then + return unpack(results) + end + end + -- If not isolated, continue scanning backward from the rear end of node + if (not dir or switch) and (not isolateBackward) then + local results = {Metrostroi.ScanTrack(itype,node.prev,func,min_x,false,checked,startx)} + if results[1] ~= nil then return unpack(results) end + end +end + +-------------------------------------------------------------------------------- +-- Get one next traffic light within current isolated segment. Ignores ARS sections. +-------------------------------------------------------------------------------- +function Metrostroi.GetSignalByName(signal_name) + return Metrostroi.SignalEntitiesByName[signal_name] +end + +-------------------------------------------------------------------------------- +-- Get one next switch by name +-------------------------------------------------------------------------------- +function Metrostroi.GetSwitchByName(switch_name) + if Metrostroi.SwitchesByName[switch_name] then + return Metrostroi.SwitchesByName[switch_name] + end + switch_name = tostring(switch_name) + local Path = tonumber(switch_name:sub(1,1)) + local ID = tonumber(switch_name:sub(2,-1)) + if not Metrostroi.SwitchesByName[Path] then return end + if switch_name:find("/") then + if not Metrostroi.SwitchesByName[switch_name] then + local Switch = string.Explode("/",switch_name) + Path = tonumber(Switch[1]) + ID = tonumber(Switch[2]) + if not Metrostroi.SwitchesByName[Path] then return end + Metrostroi.SwitchesByName[switch_name] = Metrostroi.SwitchesByName[Path][ID] + end + return Metrostroi.SwitchesByName[switch_name] + end + return Metrostroi.SwitchesByName[Path] and Metrostroi.SwitchesByName[Path][ID] or nil +end + +-------------------------------------------------------------------------------- +-- Get one next traffic light within current isolated segment. Ignores ARS sections. +-------------------------------------------------------------------------------- +function Metrostroi.GetNextTrafficLight(src_node,x,dir,include_ars_sections,override_type) + return Metrostroi.ScanTrack(override_type or "light",src_node,function(node,min_x,max_x) + -- If there are no signals in node, keep scanning + if (not Metrostroi.SignalEntitiesForNode[node]) or (#Metrostroi.SignalEntitiesForNode[node] == 0) then + return + end + + -- For every signal entity in node, check if it rests on path + for k,v in pairs(Metrostroi.SignalEntitiesForNode[node]) do + if IsValid(v) and + ((include_ars_sections) and (v.TrackX ~= x) and --(v:GetTrafficLights() > 0) or + (v.TrackX >= min_x) and (v.TrackX <= max_x)) then + return v + end + end + end,x,dir) +end + +local function inRange(x, minx, maxx) + return minx < x and x < maxx +end +local function ARSJointScan(node,min_x,max_x,train,dir,x) + -- If there are no signals in node, keep scanning + local tnode = Metrostroi.TrainPositions[train] and Metrostroi.TrainPositions[train][1] + if IsValid(train) and Metrostroi.TrainsForNode[node] and #Metrostroi.TrainsForNode[node] > 0 then + for k,v in pairs(Metrostroi.TrainsForNode[node]) do + --local found = false + --for _,train in pairs(train.WagonList) do if v == train then found=true;break end end + --if found then continue end + --if v == train or v == train.RearTrain or v == v.FrontTrain then continue end + local pos = Metrostroi.TrainPositions[v] + --print(train,v,pos[1].x,tnode.x) + if pos[1]~=tnode then + for k2,v2 in pairs(pos) do + if v2.path == node.path then + --local pos1 = Metrostroi.GetPositionOnTrack(v:LocalToWorld(Vector(0,1,0)), v:GetAngles()) + --if pos1 then pos1 = pos1[1] end + --if pos1 and (((pos1.x - v2.x) < 0 and not dir) or ((pos1.x - v2.x) > 0 and dir)) then continue end + --local TrackX = v2.TrackX + --local x1 = v2.x-1100*0.5 + --local x2 = v2.x+1100*0.5 + + local x1,x2 = v2.x,v2.x + if ((x1 >= min_x) and (x1 <= max_x)) then--[[ or + ((x2 >= min_x) and (x2 <= max_x)) or + ((x1 <= min_x) and (x2 >= max_x)) then]] + --return false--return true,v + end + end + end + end + end + end + if (not Metrostroi.SignalEntitiesForNode[node]) or (#Metrostroi.SignalEntitiesForNode[node] == 0) then + return + end + -- For every signal entity in node, check if it rests on path + for k,v in pairs(Metrostroi.SignalEntitiesForNode[node]) do + if IsValid(v) then + --print(dir,v.Name,v.TrackDir,train) + if dir ~= v.TrackDir and ((v.OutputARS ~= 0) and (v.TrackX ~= x) and + (v.TrackX >= min_x) and (v.TrackX <= max_x)) then + if dir and (v.TrackX > x) then return v end + if (not dir) and (v.TrackX < x) then return v end + --print("i lose signal") + end + end + end +end +local function ARSJointScanBack(node,min_x,max_x,train,dir,x,forw) + if (not Metrostroi.SignalEntitiesForNode[node]) or (#Metrostroi.SignalEntitiesForNode[node] == 0) then + return + end + local node1 = Metrostroi.TrainPositions[train] and Metrostroi.TrainPositions[train][1] + if not node1 then return false end + if node.path.id ~= node1.path.id then return end + -- For every signal entity in node, check if it rests on path + for k,v in pairs(Metrostroi.SignalEntitiesForNode[node]) do + if IsValid(v) then + if dir ~= v.TrackDir and ((v.OutputARS ~= 0) and (v.TrackX ~= x) and + (v.TrackX <= min_x) and (v.TrackX >= max_x)) then + if dir and (v.TrackX > x) then return v end + if (not dir) and (v.TrackX < x) then return v end + --print("i lose signal") + end + end + end +end +-------------------------------------------------------------------------------- +-- Get next/previous ARS section +-------------------------------------------------------------------------------- +function Metrostroi.GetARSJoint(src_node,x,dir,train) + local forw,back + if train then + --[[ + local data = Metrostroi.GetARSJointCache[train:EntIndex()] + if data then + if not train.SpeedSing or (math.abs(train.Speed*train.SpeedSing or 99) > 2 and ((train.Speed*train.SpeedSing > 0 and data.speed > 0) or (train.Speed*train.SpeedSing < 0 and data.speed < 0))) then + if inRange(x,data.StartX,data.EndX) or inRange(x,data.EndX,data.StartX) then + --print(data.StartX-data.EndX,train:EntIndex()) + if data.signal and data.signal.TrackPosition and x - data.signal.TrackPosition.x > 4000 then print("Metrostroi:GetARSJoint: Signal is too far") data.signal = nil return end + if data.signal and data.signal.TrackPosition and data.signal.TrackPosition.x - x > 4000 then print("Metrostroi:GetARSJoint: Signal is too far") data.signal = nil return end + --if x < data.signal.TrackPosition.x then print(2) end + if src_node.path.id == data.pathID then + if data.signal then return data.signal,data.back end + end + end + end + end + forw = Metrostroi.ScanTrack("ars",src_node,function(node,min_x,max_x) return ARSJointScan(node,min_x,max_x,train,dir,x) end,x,dir) + back = Metrostroi.ScanTrack("ars",src_node,function(node,min_x,max_x) return ARSJointScanBack(node,max_x,min_x,train,not dir,x,forw) end,x,not dir) + if IsValid(forw) and IsValid(back) and false then + Metrostroi.GetARSJointCache[train:EntIndex()] = { + StartX = forw.TrackPosition.x, + EndX = back.TrackPosition.x, + pathID = src_node.path.id, + signal = forw, + back = back, + speed = train.SpeedSign*train.Speed, + } + else + Metrostroi.GetARSJointCache[train:EntIndex()] = nil + end]] + forw = Metrostroi.ScanTrack("ars",src_node,function(node,min_x,max_x) return ARSJointScan(node,min_x,max_x,train,dir,x) end,x,dir) + back = Metrostroi.ScanTrack("ars",src_node,function(node,min_x,max_x) return ARSJointScanBack(node,max_x,min_x,train,not dir,x,forw) end,x,not dir) + else + forw = Metrostroi.ScanTrack("ars",src_node,function(node,min_x,max_x) return ARSJointScan(node,min_x,max_x,train,dir,x) end,x,dir) + end + return forw,back +end + + +-------------------------------------------------------------------------------- +-- Get all track switches in an isolated section +-------------------------------------------------------------------------------- +function Metrostroi.GetTrackSwitches(src_node,x,dir) + local switches = {} + Metrostroi.ScanTrack("switch",src_node,function(node,min_x,max_x) + -- If there are no signals in node, keep scanning + if (not Metrostroi.SwitchesForNode[node]) or (#Metrostroi.SwitchesForNode[node] == 0) then + return + end + + -- For every entity in node, check if it rests on path + for k,v in pairs(Metrostroi.SwitchesForNode[node]) do + if v.TrackPosition and + (v.TrackPosition.x >= min_x) and (v.TrackPosition.x <= max_x) then + table.insert(switches,v) + end + end + end,x,dir) + + -- Find similar switches and add them even if they aren't on the same section + local ent_list = ents.FindByClass("gmod_track_switch") + local extra_switches = {} + for k,v in pairs(switches) do + if v.TrackSwitches[1] then + local name = v.TrackSwitches[1]:GetName() + for _,v2 in pairs(ent_list) do + if v2.TrackSwitches[1] and (v2 ~= v) and (name == v2.TrackSwitches[1]:GetName()) then + table.insert(extra_switches,v2) + end + end + end + end + + for k,v in pairs(extra_switches) do table.insert(switches,v) end + return switches +end + + +-------------------------------------------------------------------------------- +-- Check if there is a train somewhere in the local isolated section. This +-- ignores ARS subsections (if they are unisolated), accounts for traffic lights +-------------------------------------------------------------------------------- +function Metrostroi.IsTrackOccupied(src_node,x,dir,t) + local Trains = {} + Metrostroi.ScanTrack(t or "light",src_node,function(node,min_x,max_x) + -- If there are no trains in node, keep scanning + if (not Metrostroi.TrainsForNode[node]) or (#Metrostroi.TrainsForNode[node] == 0) then + return + end + + -- For every train in node, for every path it rests on, check if it's in range + --print("SCAN TRACK",node.id,min_x,max_x) + for k,v in pairs(Metrostroi.TrainsForNode[node]) do + local pos = Metrostroi.TrainPositions[v] + for k2,v2 in pairs(pos) do + if v2.path == node.path then + local x1,x2 = v2.x,v2.x + if ((x1 >= min_x) and (x1 <= max_x)) or + ((x2 >= min_x) and (x2 <= max_x)) or + ((x1 <= min_x) and (x2 >= max_x)) then + table.insert(Trains,v)--return true,v + end + end + end + end + end,x,dir) + + return #Trains > 0,Trains[#Trains],Trains[1] +end + +-------------------------------------------------------------------------------- +-- Update train positions +-------------------------------------------------------------------------------- +function Metrostroi.PredictTrainPositions() + --[[ for train in pairs(Metrostroi.SpawnedTrains) do + local localSpeed = train:GetVelocity():Dot(train:GetAngles():Forward()) * 0.01905 + local pos = Metrostroi.TrainPositions[train];pos = pos and pos[1] + if pos then + train.PosX = train.PosX + localSpeed*FrameTime() + train.OldPos = pos.x+train.PosX + end + end--]] +end +function Metrostroi.UpdateTrainPositions() + --[[ Metrostroi.TrainPositions = {} + Metrostroi.TrainDirections = {} + Metrostroi.TrainsForNode = {} + -- Query all train types + for train in pairs(Metrostroi.SpawnedTrains) do + if train.ALS_ARS and train.ALS_ARS.IgnoreThisARS or train.NoTrain then continue end + train.PosX = 0--(train:GetVelocity():Dot(train:GetAngles():Forward()) * 0.01905)*FrameTime() + local pos1e = train.FrontBogey or train + local positions = Metrostroi.GetPositionOnTrack(pos1e:GetPos(),train:GetAngles()) + local positions2 + if not positions or not positions[1] then + positions = Metrostroi.GetPositionOnTrack(train:LocalToWorld(Vector(0,0,0)),train:GetAngles()) + positions2 = Metrostroi.GetPositionOnTrack(train:LocalToWorld(Vector(25,0,0)), train:GetAngles()) + else + positions2 = Metrostroi.GetPositionOnTrack(pos1e:LocalToWorld(Vector(-25,0,0)), train:GetAngles()) + end + Metrostroi.TrainPositions[train] = {} + Metrostroi.TrainDirections[train] = true + if positions and positions[1] then + Metrostroi.TrainPositions[train][1] = positions[1] + if positions2 and positions2[1] then + Metrostroi.TrainDirections[train] = (positions2[1].x - positions[1].x) > 0 + end + end + + --print("TRAIN",train,positions[1].path.id,positions2[1].path.id) + --for k,v in pairs(Metrostroi.TrainPositions[train]) do + --print(string.format("\t[%d] Path #%d: (%.2f x %.2f x %.2f) m Facing %s",k,v.path.id,v.x,v.y,v.z,v.forward and "forward" or "backward")) + --end + + for _,pos in pairs(Metrostroi.TrainPositions[train]) do + Metrostroi.TrainsForNode[pos.node1] = Metrostroi.TrainsForNode[pos.node1] or {} + table.insert(Metrostroi.TrainsForNode[pos.node1],train) + end + end--]] +end + +-------------------------------------------------------------------------------- +-- Update stations list +-------------------------------------------------------------------------------- +function Metrostroi.UpdateStations() + Metrostroi.Stations = {} + local platforms = ents.FindByClass("gmod_track_platform") + for _,platform in pairs(platforms) do + local station = Metrostroi.Stations[platform.StationIndex] or {} + Metrostroi.Stations[platform.StationIndex] = station + + -- Position + local dir = platform.PlatformEnd - platform.PlatformStart + local pos1 = Metrostroi.GetPositionOnTrack(platform.PlatformStart,dir:Angle())[1] + local pos2 = Metrostroi.GetPositionOnTrack(platform.PlatformEnd,dir:Angle())[1] + if pos1 and pos2 then + -- Add platform to station + local platform_data = { + x_start = pos1.x, + x_end = pos2.x, + length = math.abs(pos2.x - pos1.x), + node_start = pos1.node1, + node_end = pos2.node1, + ent = platform, + } + if station[platform.PlatformIndex] then + print(string.format("Metrostroi: Error, station %03d has two platforms %d with same index!",platform.StationIndex,platform.PlatformIndex)) + else + station[platform.PlatformIndex] = platform_data + end + + -- Print information + print(string.format("\t[%03d][%d] %.3f-%.3f km (%.1f m) on path %d", + platform.StationIndex,platform.PlatformIndex,pos1.x*1e-3,pos2.x*1e-3, + platform_data.length,platform_data.node_start.path.id)) + else + print(string.format("Metrostroi: Error, station %03d platform %d, cant find pos! \n\tStart%s \n\tEnd:%s",platform.StationIndex,platform.PlatformIndex,platform.PlatformStart,platform.PlatformEnd)) + end + end +end + + +-------------------------------------------------------------------------------- +-- Get travel time between two nodes in seconds +-------------------------------------------------------------------------------- +function Metrostroi.GetTravelTime(src,dest) + -- Determine direction of travel + --assert(src.path == dest.path) + local direction = src.x < dest.x + + -- Accumulate travel time + local travel_time = 0 + local travel_dist = 0 + local travel_speed = 20 + local iter = 0 + function scan(node,path) + local oldx + local oldars + while (node) and (node ~= dest) do + local ars_speed + local ars_joint = Metrostroi.GetARSJoint(node,node.x+0.01,path or true) + if ars_joint then + --[[if oldx and oldx ~= ars_joint.TrackPosition.x then + print(string.format("\t\t\t%.2f:\t%s->%s",(ars_joint.TrackPosition.x - oldx)/18.8,oldars.Name,ars_joint.Name)) + end + oldx = ars_joint.TrackPosition.x + oldars = ars_joint]] + --print(ars_joint.Name) + local ARSLimit = ars_joint:GetMaxARS() + --print(ARSLimit) + if ARSLimit >= 4 then + ars_speed = ARSLimit*10 + end + --print(ars_speed) + end + if ars_speed then travel_speed = ars_speed end + --print(string.format("[%03d] %.2f m V = %02d km/h",node.id,node.length,ars_speed or 0)) + + -- Assume 70% of travel speed + local speed = travel_speed * 0.82 + + -- Add to travel time + travel_dist = travel_dist + node.length + travel_time = travel_time + (node.length / (speed/3.6)) + node = node.next + if not node then break end + if src.path == dest.path and node.branches and node.branches[1][2].path == src.path then scan(node,src.x > node.branches[1][2].x) end + if src.path == dest.path and node.branches and node.branches[2] and node.branches[2][2].path == src.path then scan(node,src.x > node.branches[1][1].x) end + assert(iter < 10000, "OH SHI~") + iter = iter + 1 + end + end + scan(src) + + return travel_time,travel_dist +end + + +-------------------------------------------------------------------------------- +-- Load track definition and sign definitions +-------------------------------------------------------------------------------- + +local function getFile(path,name,id) + local typ = 0 + if file.Exists(string.format(path..".txt",name),"DATA") then typ = bit.bor(typ,2) end + if file.Exists(string.format(path..".lua",name),"LUA") then typ = bit.bor(typ,1) end + if typ == 0 then print(string.format("%s definition file not found: %s",id,string.format(path,name))) end + return typ +end +function Metrostroi.Load(name,keep_signs) + if not TrackLoadedData then return end + -- Prepare spatial lookup table + Metrostroi.SpatialLookup = {} + local function addLookup(node) + local kx,ky,kz = spatialPosition(node.pos) + + Metrostroi.SpatialLookup[kz] = Metrostroi.SpatialLookup[kz] or {} + Metrostroi.SpatialLookup[kz][kx] = Metrostroi.SpatialLookup[kz][kx] or {} + Metrostroi.SpatialLookup[kz][kx][ky] = Metrostroi.SpatialLookup[kz][kx][ky] or {} + table.insert(Metrostroi.SpatialLookup[kz][kx][ky],node) + end + + -- Create paths definition + Metrostroi.Paths = {} + if true then return end + print(type(TrackLoadedData)) + for pathID,path in pairs(TrackLoadedData) do + local currentPath = { id = pathID } + Metrostroi.Paths[pathID] = currentPath + + -- Count length of path and offset in every node + currentPath.length = 0 + local prevPos,prevNode + for nodeID,nodePos in pairs(path) do + -- Count distance + local distance = 0 + if prevPos then + distance = prevPos:Distance(nodePos)*0.01905 + currentPath.length = currentPath.length + distance + end + + -- Add a node + currentPath[nodeID] = { + id = nodeID, + path = currentPath, + + pos = nodePos, + x = currentPath.length, + prev = prevNode, + } + if prevNode then + prevNode.next = currentPath[nodeID] + prevNode.dir = (nodePos - prevNode.pos):GetNormalized() + prevNode.vec = nodePos - prevNode.pos + prevNode.length = distance + end + + -- Add to spatial lookup + addLookup(currentPath[nodeID]) + prevPos = nodePos + prevNode = currentPath[nodeID] + end + + if prevNode then + prevNode.next = nil + prevNode.dir = Vector(0,0,0) + prevNode.vec = Vector(0,0,0) + prevNode.length = 0 + end + end + + -- Find places where tracks link up together + for pathID,path in pairs(Metrostroi.Paths) do + if #path == 0 then break end + -- Find position of end nodes + local node1,node2 = path[1],path[#path] + local ignore_path = path + if game.GetMap():find("orange") and node1.path.id == 1 then + ignore_path = nil + --print(node1) + end + local pos1 = Metrostroi.GetPositionOnTrack(node1.pos,nil,{ ignore_path = ignore_path }) + local pos2 = Metrostroi.GetPositionOnTrack(node2.pos,nil,{ ignore_path = ignore_path }) + -- Create connection + local join1,join2 + if pos1[1] then join1 = pos1[1].node1 end + if pos2[1] then join2 = pos2[1].node1 end + + -- Record it + if join1 then + join1.branches = join1.branches or {} + table.insert(join1.branches,{ pos1[1].x, node1 }) + node1.branches = node1.branches or {} + table.insert(node1.branches,{ node1.x, join1 }) + end + if join2 then + join2.branches = join2.branches or {} + table.insert(join2.branches,{ pos2[1].x, node2 }) + node2.branches = node2.branches or {} + table.insert(node2.branches,{ node2.x, join2 }) + end + end + + -- Initialize stations list + Metrostroi.UpdateStations() + -- Print info + Metrostroi.PrintStatistics() + + -- Ignore updates to prevent created/removed switches from constantly updating table of positions + Metrostroi.IgnoreEntityUpdates = true + + -- Remove old entities + if not keep_signs then + local signals_ents = ents.FindByClass("gmod_track_signal") + for k,v in pairs(signals_ents) do SafeRemoveEntity(v) end + local switch_ents = ents.FindByClass("gmod_track_switch") + for k,v in pairs(switch_ents) do SafeRemoveEntity(v) end + local signs_ents = ents.FindByClass("gmod_track_signs") + for k,v in pairs(signs_ents) do SafeRemoveEntity(v) end + local auto_ents = ents.FindByClass("gmod_track_autodrive_plate") + for _,v in pairs(auto_ents) do SafeRemoveEntity(v) end + + -- Create new entities (add a delay so the old entities clean up) + print("Metrostroi: Loading signs, signals, switches...") + local signs + if bit.band(signstype,2) > 0 then + signs= util.JSONToTable(file.Read(string.format("metrostroi_data/signs_%s.txt",name))) + print("Metrostroi: Loading signs definition...") + end + if not signs and bit.band(signstype,1) > 0 then + signs= util.JSONToTable(file.Read(string.format("metrostroi_data/signs_%s.lua",name),"LUA")) + print("Metrostroi: Loading default signs definition...") + end + if not signs then print("Metrostroi: Signs file is corrupted!") end + local version + if signs then + version = signs.Version + if not version then + print("Metrostroi: This signs file is incompatible with signs version") + signs = nil + else + signs.Version = nil + end + end + if signs then + local TwoToSix = false + if version ~= 1.2 then + print(string.format("Metrostroi: !!Converting from version %.1f!! signals converted to %s.",version,TwoToSix and "2/6" or "1/5")) + if game.GetMap():find("gm_mus_loop") then + TwoToSix = true + end + end + for k,v in pairs(signs) do + local ent = ents.Create(v.Class) + if IsValid(ent) then + ent:SetPos(v.Pos) + ent:SetAngles(v.Angles) + if v.Class == "gmod_track_switch" then + ---CHANGE + ent:SetChannel(v.Channel or 1) + ent.LockedSignal = v.LockedSignal + ent.NotChangePos = v.NotChangePos + ent.Name = v.Name, + ent:Spawn() + end + if v.Class == "gmod_track_signal" and v.Routes then + ent.SignalType = v.SignalType + ent.Name = v.Name + ent.RouteNumberSetup = v.RouteNumberSetup + ent.LensesStr = v.LensesStr + ent.Lenses = string.Explode("-",v.LensesStr) + ent.RouteNumber = v.RouteNumber + ent.IsolateSwitches = v.IsolateSwitches + ent.Routes = v.Routes + ent.ARSOnly = v.ARSOnly + ent.Left = v.Left + ent.Double = v.Double + ent.DoubleL = v.DoubleL + ent.Approve0 = v.Approve0 + ent.TwoToSix = v.TwoToSix + ent.NonAutoStop = v.NonAutoStop + ent.PassOcc = v.PassOcc + ent.Lenses = string.Explode("-",ent.LensesStr) + ent.InS = nil + for i = 1,#ent.Lenses do + if ent.Lenses[i]:find("W") then + ent.InS = i + end + end + if version == 1 and ent.Left then + print(string.format("Metrostroi: !!Converting from version %.1f!! signal %s rotated.",version,ent.Name)) + ent:SetAngles(ent:LocalToWorldAngles(ent:WorldToLocalAngles(ent:GetAngles())+Angle(0,180,0))) + end + if version ~= 1.2 then ent.TwoToSix = TwoToSix end + ent:Spawn() + elseif v.Class == "gmod_track_signs" then + ent.SignType = v.SignType + ent.YOffset = v.YOffset + ent.ZOffset = v.ZOffset + ent.Left = v.Left, + ent:Spawn() + ent:SendUpdate() + elseif v.Class == "gmod_track_signal" then ent:Remove() end + end + end + end + + local auto + if bit.band(autotype,2) > 0 then + auto= util.JSONToTable(file.Read(string.format("metrostroi_data/auto_%s.txt",name))) + print("Metrostroi: Loading autodrive definition...") + end + if not auto and bit.band(autotype,1) > 0 then + auto= util.JSONToTable(file.Read(string.format("metrostroi_data/auto_%s.lua",name),"LUA")) + print("Metrostroi: Loading default autodrive definition...") + end + if auto then + for k,v in pairs(auto) do + local ent = ents.Create("gmod_track_autodrive_plate") + print(k,v,ent) + if IsValid(ent) then + ent:SetPos(v.Pos) + ent:SetAngles(v.Angles) + ent.PlateType = v.Type + ent.Right = v.Right + ent.Mode = v.Mode + ent.Model = v.Model + ent:SetModel(ent.Model) + ent:Spawn() + end + end + else + print("Metrostroi: Signs file is corrupted!") + end + end + + timer.Simple(0.05,function() + -- No more ignoring updates + Metrostroi.IgnoreEntityUpdates = false + -- Load ARS entities + Metrostroi.UpdateSignalEntities() + -- Load switches + Metrostroi.UpdateSwitchEntities() + -- Add additional ARS sections + Metrostroi.UpdateARSSections() + end) + + -- Initialize signs + print("Metrostroi: Initializing signs...") + Metrostroi.InitializeSigns() +end + +-------------------------------------------------------------------------------- +-- Save track & sign definitions +-------------------------------------------------------------------------------- +function Metrostroi.Save(name) + if not file.Exists("metrostroi_data","DATA") then + file.CreateDir("metrostroi_data") + end + name = name or game.GetMap() + + -- string.format signs, signal, switch data + local signs = {} + local signals_ents = ents.FindByClass("gmod_track_signal") + if not signals_ents then print("Metrostroi: Signs file is corrupted!") end + for k,v in pairs(signals_ents) do + if not Metrostroi.ARSSubSections[v] then + local Routes = table.Copy(v.Routes) + for k,v in pairs(Routes) do + v.LightsExploded = nil + v.IsOpened = nil + end + table.insert(signs,{ + Class = "gmod_track_signal", + Pos = v:GetPos(), + Angles = v:GetAngles(), + SignalType = v.SignalType, + Name = v.Name, + RouteNumberSetup = v.RouteNumberSetup, + LensesStr = v.LensesStr, + RouteNumber = v.RouteNumber, + IsolateSwitches = v.IsolateSwitches, + ARSOnly = v.ARSOnly, + Routes = Routes, + Approve0 = v.Approve0, + TwoToSix = v.TwoToSix, + NonAutoStop = v.NonAutoStop, + Left = v.Left, + Double = v.Double, + DoubleL = v.DoubleL, + AutoStop = v.AutoStop, + PassOcc = v.PassOcc, + }) + end + end + local switch_ents = ents.FindByClass("gmod_track_switch") + for k,v in pairs(switch_ents) do + table.insert(signs,{ + Class = "gmod_track_switch", + Pos = v:GetPos(), + Angles = v:GetAngles(), + Name = v.Name, + Channel = v:GetChannel(), + NotChangePos = v.NotChangePos, + LockedSignal = v.LockedSignal, + }) + end + local signs_ents = ents.FindByClass("gmod_track_signs") + for k,v in pairs(signs_ents) do + table.insert(signs,{ + Class = "gmod_track_signs", + Pos = v:GetPos(), + Angles = v:GetAngles(), + SignType = v.SignType, + YOffset = v.YOffset, + ZOffset = v.ZOffset, + Left = v.Left, + }) + end + signs.Version = Metrostroi.SignalVersion + -- Save data + print("Metrostroi: Saving signs and track definition...") + local data = util.TableToJSON(signs,true) + file.Write(string.format("metrostroi_data/signs_%s.txt",name),data) + print(string.format("Saved to metrostroi_data/signs_%s.txt",name)) + + local auto = {} + local auto_ents = ents.FindByClass("gmod_track_autodrive_plate") + for k,v in pairs(auto_ents) do + table.insert(auto,{ + Pos = v:GetPos(), + Angles = v:GetAngles(), + Type = v.PlateType, + Right = v.Right, + Mode = v.Mode, + Model = v.Model, + }) + end + print("Metrostroi: Saving auto definition...") + local adata = util.TableToJSON(auto,true) + file.Write(string.format("metrostroi_data/auto_%s.txt",name),adata) + print(string.format("Saved to metrostroi_data/auto_%s.txt",name)) +end + + +Metrostroi.Load() + +-------------------------------------------------------------------------------- +-- Print statistics and information about the loaded rail network +-------------------------------------------------------------------------------- +function Metrostroi.PrintStatistics() + local totalLength = 0 + for pathNo,path in pairs(Metrostroi.Paths) do + totalLength = totalLength + path.length + end + + print(string.format("Metrostroi: Total %.3f km of paths defined:",totalLength/1000)) + for pathNo,path in pairs(Metrostroi.Paths) do + print(string.format("\t[%d] %.3f km (%d nodes)",path.id,path.length/1000,#path)) + end + + local count = #Metrostroi.SpatialLookup + local cells = {} + for _,z in pairs(Metrostroi.SpatialLookup) do + count = count + #z + for _,x in pairs(z) do + count = count + #x + for _,y in pairs(x) do + table.insert(cells,#y) + end + end + end + print(string.format("Metrostroi: %d tables used for spatial lookup (%d cells)",count,#cells)) + local maxn,avgn = 0,0 + for k,v in pairs(cells) do maxn = math.max(maxn,v) avgn = avgn + v end + print(string.format("Metrostroi: Most nodes in cell: %d, average nodes in cell: %.2f",maxn,avgn/#cells)) +end + + +local messageTimeout = 0 +function Think() + PervTimerIter = PervTimerIter or CurTime() + if CurTime()-PervTimerIter <= 0.15 then + Metrostroi.PredictTrainPositions() + else + PervTimerIter = CurTime() + Metrostroi.UpdateTrainPositions() + end + if ((CurTime() - messageTimeout) > 1.0) then + messageTimeout = CurTime() + if TrainsPos then + for ent_id,train in pairs(TrainsPos) do + --print("ID: "..ent_id.." X: "..train[0].." Y: "..train[1].." Z: "..train[2]) + end + end + end + --RnRecvMessages() +end + +--TrackLoadedData - data/metrostroi_data/track_mapname.txt or lua/metrostroi_data/track_mapname.txt +--SignsLoadedData - data/metrostroi_data/signs_mapname.txt or lua/metrostroi_data/signs_mapname.txt +--SchedLoadedData - data/metrostroi_data/sched_mapname.txt or lua/metrostroi_data/sched_mapname.txt diff --git a/lua/metrostroi/sv_turbostroi_v2.lua b/lua/metrostroi/sv_turbostroi_v2.lua new file mode 100644 index 0000000..f54debb --- /dev/null +++ b/lua/metrostroi/sv_turbostroi_v2.lua @@ -0,0 +1,506 @@ +-------------------------------------------------------------------------------- +-- Simulation acceleration DLL support +-------------------------------------------------------------------------------- +if not TURBOSTROI and (not Turbostroi or not Turbostroi.SetMTAffinityMask) then return end +local turbostroiTrains = {} +if Turbostroi and not TURBOSTROI then + local FPS = 1/engine.TickInterval() + local messageTimeout = 0 + local messageCounter = 0 + local dataCache = {{},{}} + + local SendMessage = Turbostroi.SendMessage + local RecvMessages = Turbostroi.RecvMessages + local RecvMessage = Turbostroi.RecvMessage + local ReadAvailable = Turbostroi.ReadAvailable + + local unpack = unpack + + hook.Add("EntityRemoved","Turbostroi",function(ent) + if dataCache[ent] then + dataCache[ent] = nil + end + if turbostroiTrains[ent] then + turbostroiTrains[ent] = nil + end + end) + for k,ent in pairs(ents.GetAll()) do + if ent.Base == "gmod_subway_base" and not ent.NoTrain and not ent.DontAccelerateSimulation then + turbostroiTrains[ent] = true + end + end + hook.Add("OnEntityCreated","Turbostroi",function(ent) + timer.Simple(0,function() + if IsValid(ent) and ent.Base == "gmod_subway_base" and not ent.NoTrain and not ent.DontAccelerateSimulation then + turbostroiTrains[ent] = true + end + end) + end) + local id,system,name,index,value + local msg_count = 0 + local idActionTable = { + [1] = function (train) + if train.Systems[system] then + train.Systems[system][name] = value + if train.TriggerTurbostroiInput then train:TriggerTurbostroiInput(system,name,value) end + end + end, + [2] = function (train) + if index == 0 and name ~= "bass" then index = nil end + if value == 0 and name ~= "bass" then value = nil end + if name == "" then name = nil end + --net.WriteString(name) + train:PlayOnce(system,name,index,value) + end, + [3] = function (train) + if name == "on" then + --print("[!]Wire "..index.." starts update! Value "..value) + dataCache[train]["wiresW"][index] = value + --train:WriteTrainWire(index,value) + if not train.TrainWireWritersID[index] then train.TrainWireWritersID[index] = true end + train.TrainWireTurbostroi[index] = value + if train.TriggerTurbostroiInput then train:TriggerTurbostroiInput("TrainWire",index,value) end + else + --print("[!]Wire "..index.." stop update!") + dataCache[train]["wiresW"][index] = nil + end + end, + [4] = function (train) + if train.Systems[system] then + train.Systems[system]:TriggerInput(name,value) + end + end, + [5] = function (train) + for twid,value in pairs(dataCache[train]["wiresW"]) do + --train:WriteTrainWire(twid,value) + end + end, + [6] = function (train) + if IsValid(Player(index)) then + if value==0 then + Player(index):PrintMessage( HUD_PRINTCONSOLE, "--START" ) + print("--START") + end + Player(index):PrintMessage( HUD_PRINTCONSOLE, system ) + print(system) + end + end, + } + local function updateTrains(trains) + --local recvMessage = Turbostroi.RecvMessage + -- Get data packets from simulation + for train in pairs(trains) do + if not dataCache[train] then + if not SendMessage(train,5,"","",0,0) then return end + dataCache[train] = {wiresW = {}} + + for sys_name,system in pairs(train.Systems) do + if system.OutputsList and system.DontAccelerateSimulation then + for _,name in pairs(system.OutputsList) do + local value = system[name] or 0 + if type(value) == "boolean" then value = value and 1 or 0 end + if type(value) == "number" then + if not dataCache[train][sys_name] then dataCache[train][sys_name] = {} end + dataCache[train][sys_name][name] = math.Round(value) + end + end + end + end + end + msg_count = ReadAvailable(train) + for _ = 1, msg_count do + id,system,name,index,value = RecvMessage(train) + + idActionTable[id](train) + messageCounter = messageCounter + 1 + + end + end + -- Send train wire values + -- Output all system values + for train in pairs(trains) do + if train.ReadTrainWire then + for i in pairs(train.TrainWires) do + if not dataCache[train]["wires"] then dataCache[train]["wires"] = {} end + if dataCache[train]["wires"][i] ~= train:ReadTrainWire(i) then + if SendMessage(train,3,"","",i,train:ReadTrainWire(i)) then + dataCache[train]["wires"][i] = train:ReadTrainWire(i) + end + end + end + for sys_name,system in pairs(train.Systems) do + if system.OutputsList and system.DontAccelerateSimulation then + for _,name in pairs(system.OutputsList) do + local value = system[name] or 0 + if type(value) == "boolean" then + value = value and 1 or 0 + end + if type(value) == "number" then + value = math.Round(value,1) + if not dataCache[train][sys_name] then dataCache[train][sys_name] = {} end + if dataCache[train][sys_name][name] ~= value then + if SendMessage(train,1,sys_name,name,0,value) then + dataCache[train][sys_name][name] = value + end + end + end + end + end + end + end + end + end + if Turbostroi then + concommand.Add("metrostroi_turbostroi_run",function(ply,_,_,cmd) + if not IsValid(ply) or not ply:IsSuperAdmin() then return end + local train = ply:GetTrain() + if IsValid(train) then + print(cmd:sub(1,2),cmd:sub(3,4)) + SendMessage(train,6,cmd:sub(1,255),cmd:sub(256,511),ply:UserID(),0) + end + end) + function Turbostroi.TriggerInput(train,system,name,value) + local v = value or 0 + if type(value) == "boolean" then v = value and 1 or 0 end + SendMessage(train,4,system,name,0,v) + --end + end + CreateConVar("turbostroi_main_cores",1, FCVAR_ARCHIVE,"Set cores for main thread") + CreateConVar("turbostroi_train_cores",254, FCVAR_ARCHIVE,"Set cores for train threads") + cvars.AddChangeCallback("turbostroi_main_cores", function(cvar, old, value) + Turbostroi.SetMTAffinityMask(tonumber(value) or 1) -- CPU5 CPU4 on 6 core --NEWTURBOSTROI + end, "turbostroi") + cvars.AddChangeCallback("turbostroi_train_cores", function(cvar, old, value) + Turbostroi.SetSTAffinityMask(tonumber(value) or 254) -- 0 - disabled --NEWTURBOSTROI + end, "turbostroi") + Turbostroi.SetMTAffinityMask(GetConVarNumber("turbostroi_main_cores") or 1) -- CPU5 CPU4 on 6 core --NEWTURBOSTROI + Turbostroi.SetSTAffinityMask(GetConVarNumber("turbostroi_train_cores") or 254) -- 0 - disabled --NEWTURBOSTROI + Turbostroi.SetSimulationFPS(FPS) + hook.Add("Think", "Turbostroi_Think", function() + if not Turbostroi then return end + updateTrains(turbostroiTrains) + --[[ + -- HACK + GLOBAL_SKIP_TRAIN_SYSTEMS = nil + + -- Print stats + if ((CurTime() - messageTimeout) > 1.0) then + messageTimeout = CurTime() + RunConsoleCommand("say",Format("Metrostroi: %d messages per second (%d per tick)",messageCounter,messageCounter / FPS)) + messageCounter = 0 + end]] + end) + end + return +end + + + + +-------------------------------------------------------------------------------- +-- Turbostroi scripts +-------------------------------------------------------------------------------- +-- NEW API +local ffi = require("ffi") +ffi.cdef[[ +bool ThreadSendMessage(void *p, int message, const char* system_name, const char* name, double index, double value); +int ThreadReadAvailable(void* p); +typedef struct { + int message; + char system_name[64]; + char name[64]; + double index; + double value; +} thread_msg; +thread_msg ThreadRecvMessage(void* p); +]] +local TS = ffi.load("gmsv_turbostroi_win32") + +Metrostroi = {} +local dataCache = {wires = {},wiresW = {},wiresL = {}} +Metrostroi.BaseSystems = {} -- Systems that can be loaded +Metrostroi.Systems = {} -- Constructors for systems + +LoadSystems = {} -- Systems that must be loaded/initialized +GlobalTrain = {} -- Train emulator +GlobalTrain.Systems = {} -- Train systems +GlobalTrain.TrainWires = {} +GlobalTrain.WriteTrainWires = {} + +TimeMinus = 0 +_Time = 0 +function CurTime() + --return CurrentTime-TimeMinus + return _Time +end +--function CurTime() return os.clock() end + +function Metrostroi.DefineSystem(name) + TRAIN_SYSTEM = {} + Metrostroi.BaseSystems[name] = TRAIN_SYSTEM + + -- Create constructor + Metrostroi.Systems[name] = function(train,...) + local tbl = { _base = name } + local TRAIN_SYSTEM = Metrostroi.BaseSystems[tbl._base] + if not TRAIN_SYSTEM then print("No system: "..tbl._base) return end + for k,v in pairs(TRAIN_SYSTEM) do + if type(v) == "function" then + tbl[k] = function(...) + if not Metrostroi.BaseSystems[tbl._base][k] then + print("ERROR",k,tbl._base) + end + return Metrostroi.BaseSystems[tbl._base][k](...) + end + else + tbl[k] = v + end + end + + tbl.Initialize = tbl.Initialize or function() end + tbl.Think = tbl.Think or function() end + tbl.Inputs = tbl.Inputs or function() return {} end + tbl.Outputs = tbl.Outputs or function() return {} end + tbl.TriggerInput = tbl.TriggerInput or function() end + tbl.TriggerOutput = tbl.TriggerOutput or function() end + + tbl.Train = train + tbl:Initialize(...) + tbl.OutputsList = tbl:Outputs() + tbl.InputsList = tbl:Inputs() + tbl.IsInput = {} + for k,v in pairs(tbl.InputsList) do tbl.IsInput[v] = true end + return tbl + end +end + +function GlobalTrain.LoadSystem(self,a,b,...) + local name + local sys_name + if b then + name = b + sys_name = a + else + name = a + sys_name = a + end + + if not Metrostroi.Systems[name] then print("Error: No system defined: "..name) return end + if self.Systems[sys_name] then print("Error: System already defined: "..sys_name) return end + + self[sys_name] = Metrostroi.Systems[name](self,...) + self[sys_name].Name = sys_name + self[sys_name].BaseName = name + self.Systems[sys_name] = self[sys_name] + + -- Don't simulate on here + local no_acceleration = Metrostroi.BaseSystems[name].DontAccelerateSimulation + if no_acceleration then + self.Systems[sys_name].Think = function() end + self.Systems[sys_name].TriggerInput = function(train,name,value) + local v = value or 0 + if type(value) == "boolean" then v = value and 1 or 0 end + TS.ThreadSendMessage(_userdata, 4,sys_name,name,0,v) + end -- replace with new api + + --Precache values + elseif self[sys_name].OutputsList then + dataCache[sys_name] = {} + for _,name in pairs(self[sys_name].OutputsList) do + dataCache[sys_name][name] = 0--self[sys_name][name] or 0 + end + end +end + +function GlobalTrain.PlayOnce(self,soundid,location,range,pitch) + TS.ThreadSendMessage(_userdata, 2,soundid or "",location or "",range or 0,pitch or 0) -- replace with new api +end + +function GlobalTrain.ReadTrainWire(self,n) + return self.TrainWires[n] or 0 +end + +function GlobalTrain.WriteTrainWire(self,n,v) + self.WriteTrainWires[n] = v +end + + +GlobalTrain.DeltaTime = 0.33 + +-------------------------------------------------------------------------------- +-- Main train code (turbostroi side) +-------------------------------------------------------------------------------- +print("[!] Train initialized!") +function Think(skipped) + -- This is just blatant copy paste from init.lua of base train entity + local self = GlobalTrain + + --[[ if skipped then + self.BeSkip = self.BeSkip or CurTime() + return + else + self.PrevTime = self.PrevTime or CurTime() + if self.BeSkip then + --print(1,(CurTime()-self.BeSkip)-0.03) + TimeMinus = TimeMinus + math.max(0,(CurTime()-self.BeSkip)-0.03) + --print(2,TimeMinus) + self.BeSkip = false + end + end--]] + + -- Is initialized? + if not self.Initialized then + Initialize() + return + end + + self.DeltaTime = (CurrentTime - self.PrevTime)--self.DeltaTime+math.min(0.02,((CurrentTime - self.PrevTime)-self.DeltaTime)*0.1) + self.PrevTime = CurrentTime + if skipped or self.DeltaTime<=0 then return end + _Time = _Time+self.DeltaTime + + -- Perform data exchange + DataExchange() + + -- Simulate according to schedule + for i,s in ipairs(self.Schedule) do + for k,v in ipairs(s) do + v:Think(self.DeltaTime / (v.SubIterations or 1),i) + end + end +end + +function Initialize() + if not CurrentTime then return end + print("[!] Loading systems") + local time = os.clock() + for k,v in pairs(LoadSystems) do + GlobalTrain:LoadSystem(k,v) + end + print(string.format("[!] -Took %.2fs",os.clock()-time)) + GlobalTrain.PrevTime = CurrentTime + local iterationsCount = 1 + if (not GlobalTrain.Schedule) or (iterationsCount ~= GlobalTrain.Schedule.IterationsCount) then + GlobalTrain.Schedule = { IterationsCount = iterationsCount } + local SystemIterations = {} + + -- Find max number of iterations + local maxIterations = 0 + for k,v in pairs(GlobalTrain.Systems) do + SystemIterations[k] = (v.SubIterations or 1) + maxIterations = math.max(maxIterations,(v.SubIterations or 1)) + end + + -- Create a schedule of simulation + for iteration=1,maxIterations do + GlobalTrain.Schedule[iteration] = {} + -- Populate schedule + for k,v in pairs(GlobalTrain.Systems) do + if ((iteration)%(maxIterations/(v.SubIterations or 1))) == 0 then + table.insert(GlobalTrain.Schedule[iteration],v) + end + + end + end + end + GlobalTrain.Initialized = true +end +local msg_data +local msg_count = 0 +local id,system,name,index,value +function DataExchange() + -- Get data packets + msg_count = TS.ThreadReadAvailable(_userdata) + for i = 1, msg_count do + msg_data = TS.ThreadRecvMessage(_userdata) + if msg_data.message == 1 then + local system_name = ffi.string(msg_data.system_name) + if GlobalTrain.Systems[system_name] then + GlobalTrain.Systems[system_name][ffi.string(msg_data.name)] = msg_data.value + end + end + if msg_data.message == 3 then + dataCache["wiresW"][msg_data.index] = msg_data.value + end + if msg_data.message == 4 then + local system_name = ffi.string(msg_data.system_name) + if GlobalTrain.Systems[system_name] then + GlobalTrain.Systems[system_name]:TriggerInput(ffi.string(msg_data.name),msg_data.value) + end + end + if msg_data.message == 5 then + dataCache["wiresL"] = {} + end + if msg_data.message == 6 then + local scr = [[ + local _retdata="" + local print = function(...) + for k,v in ipairs({...}) do _retdata = _retdata..tostring(v).."\t" end + _retdata = _retdata.."\n" + end + ]] + scr = scr..ffi.string(msg_data.system_name)..ffi.string(msg_data.name).."\n" + scr = scr.."return _retdata" + local data,err = loadstring(scr) + if data then + local ret = tostring(data()) or "N\\A" + for i=0,math.ceil(#ret/63) do + TS.ThreadSendMessage(_userdata, 6, ret:sub(i*63,(i+1)*63-1), "",msg_data.index,i) + end + else + print(err) + TS.ThreadSendMessage(_userdata, 6, tostring(err), "",msg_data.index,0) + end + --Turbostroi.SendMessage(train,6,cmd:sub(1,255),cmd:sub(256,511),ply:UserID(),0) + end + end + for twid,value in pairs(dataCache["wiresW"]) do + GlobalTrain.TrainWires[twid] = value + end + + -- Output all variable values + for sys_name,system in pairs(GlobalTrain.Systems) do + if system.OutputsList and (not system.DontAccelerateSimulation) then + for _,name in pairs(system.OutputsList) do + local value = (system[name] or 0) + --if type(value) == "boolean" then value = value and 1 or 0 end + if not dataCache[sys_name] then print(sys_name) end + if dataCache[sys_name][name] ~= value then + --print(sys_name,name,value) + --if SendMessage(1,sys_name,name,0,tonumber(value) or 0) then -- OLD API + if TS.ThreadSendMessage(_userdata, 1, sys_name , name, 0, tonumber(value) or 0) then -- NEW API + dataCache[sys_name][name] = value + end + end + end + end + end + + -- Output train wire writes + for twID,value in pairs(GlobalTrain.WriteTrainWires) do + --local value = tonumber(value) or 0 + if dataCache["wires"][twID] ~= value then + dataCache["wires"][twID] = value + dataCache["wiresL"][twID] = false + end + if not dataCache["wiresL"][twID] or dataCache["wiresL"][twID]~=GlobalTrain.PrevTime then + --SendMessage(3,"","on",tonumber(twID) or 0,dataCache["wires"][twID]) -- OLD API + TS.ThreadSendMessage(_userdata, 3, "", "on", tonumber(twID) or 0, dataCache["wires"][twID]) -- NEW API + --print("[!]Wire "..twID.." starts update! Value "..dataCache["wires"][twID]) + end + GlobalTrain.WriteTrainWires[twID] = nil + dataCache["wiresL"][twID] = CurTime() + end + for twID,time in pairs(dataCache["wiresL"]) do + if time~=CurTime() then + TS.ThreadSendMessage(_userdata,3, "", "off", tonumber(twID) or 0, 0) + --print("[!]Wire "..twID.." stops update!") + dataCache["wiresL"][twID] = nil + end + end + --SendMessage(5,"","",0,0) -- OLD API + --C.ThreadSendMessage(_userdata, 5,"","",0,0) -- NEW API + --print(string.format("%s %s",count,#msgCache)) + --count = 0 + +end diff --git a/lua/metrostroi/sv_util.lua b/lua/metrostroi/sv_util.lua new file mode 100644 index 0000000..dd277bd --- /dev/null +++ b/lua/metrostroi/sv_util.lua @@ -0,0 +1,1029 @@ +-------------------------------------------------------------------------------- +-- Assign train IDs +-------------------------------------------------------------------------------- +if not Metrostroi.WagonID then + Metrostroi.WagonID = 1 +end +function Metrostroi.NextWagonID() + local id = Metrostroi.WagonID + Metrostroi.WagonID = Metrostroi.WagonID + 1 + if Metrostroi.WagonID > 99 then Metrostroi.WagonID = 1 end + return id +end + +Metrostroi.UsedNumbers = Metrostroi.UsedNumbers or {} +hook.Add("EntityRemoved","WagonNumberRemove",Metrostroi.RemoveNumber) +function Metrostroi.RemoveNumber(ent) + if IsValid(ent) and ent.WagonNumber then + local typ = ent.SubwayTrain and ent.SubwayTrain.Type or ent:GetClass() + local tbl = Metrostroi.UsedNumbers[typ] + if not tbl then return end + print(Format("Removed number %05d to %s(%04d %s)",ent.WagonNumber,ent:GetClass(),ent:EntIndex(),typ)) + tbl[ent.WagonNumber] = nil + end +end +function Metrostroi.GenerateNumber(train,tbl,func,retry) + Metrostroi.RemoveNumber(train) + if not tbl or not IsValid(train) then return 0 end + local typ = train.SubwayTrain and train.SubwayTrain.Type or train:GetClass() + if not Metrostroi.UsedNumbers[typ] then Metrostroi.UsedNumbers[typ] = {} end + for i=1,1000 do + local range = train.NumberRangesID and tbl[train.NumberRangesID] or tbl[math.random(1,#tbl)] + local number + if range[1]==true then + local tblN = range[2] + number = tblN[math.random(1,#tblN)] + else + number = math.random(range[1],range[2]) + end + if func then number = func(train,number) or number end + if number and number~=true and not Metrostroi.UsedNumbers[typ][number] then + Metrostroi.UsedNumbers[typ][number] = true + print(Format("Assigned number %05d to %s(%04d %s)",number,train:GetClass(),train:EntIndex(),typ)) + return number,range[3] + end + end + if retry then + ErrorNoHalt(Format("Metrostroi: Error generating number for train %s! Second try was failed.\n",train:GetClass())) + return 0 + else + ErrorNoHalt(Format("Metrostroi: Error generating number for train %s! Clearing wagon numbers table...\n",train:GetClass())) + Metrostroi.UsedNumbers = {} + return Metrostroi.GenerateNumber(train,tbl,func,true) + end +end + +if not Metrostroi.EquipmentID then + Metrostroi.EquipmentID = 1 +end +function Metrostroi.NextEquipmentID() + local id = Metrostroi.EquipmentID + Metrostroi.EquipmentID = Metrostroi.EquipmentID + 1 + return id +end + + +-------------------------------------------------------------------------------- +-- Custom drop to floor that only checks origin and not bounding box +-------------------------------------------------------------------------------- +function Metrostroi.DropToFloor(ent) + local result = util.TraceLine({ + start = ent:GetPos(), + endpos = ent:GetPos() - Vector(0,0,256), + mask = -1, + filter = { ent }, + }) + if result.Hit then ent:SetPos(result.HitPos) end +end + + + + +-------------------------------------------------------------------------------- +-- Get random number that is same over a period of 1 minute +-------------------------------------------------------------------------------- +local prediods = {} +local periodNumbers = {} +local randomPeriodStart = 0 +local randomPeriodNumber = math.random() +function Metrostroi.PeriodRandomNumber(typ) + typ = typ or 0 + if not prediods[typ] or (CurTime() - prediods[typ]) > 60 then + periodNumbers[typ] = math.random() + end + + -- Refresh the period + prediods[typ] = CurTime() + + -- Return number + return periodNumbers[typ] +end + + + + +-------------------------------------------------------------------------------- +-- Joystick controls +-- Author: HunterNL +-------------------------------------------------------------------------------- +if not Metrostroi.JoystickValueRemap then + Metrostroi.JoystickValueRemap = {} + Metrostroi.JoystickSystemMap = {} +end + +function Metrostroi.RegisterJoystickInput (uid,analog,desc,min,max) + if not joystick then + Error("Joystick Input registered without joystick addon installed, get it at https://github.com/MattJeanes/Joystick-Module") + end + --If this is only called in a JoystickRegister hook it should never even happen + + if #uid > 20 then + print("Metrostroi Joystick UID too long, trimming") + local uid = string.Left(uid,20) + end + + + local atype + if analog then + atype = "analog" + else + atype = "digital" + end + + local temp = { + uid = uid, + type = atype, + description = desc, + category = "Metrostroi" --Just Metrostroi for now, seperate catagories for different trains later? + --Catergory is also checked in subway base, don't just change + } + + + --Joystick addon's build-in remapping doesn't work so well, so we're doing this instead + if min ~= nil and max ~= nil and analog then + Metrostroi.JoystickValueRemap[uid]={min,max} + end + + jcon.register(temp) +end + +-- Wrapper around joystick get to implement our own remapping +function Metrostroi.GetJoystickInput(ply,uid) + local remapinfo = Metrostroi.JoystickValueRemap[uid] + local jvalue = joystick.Get(ply,uid) + if remapinfo == nil then + return jvalue + elseif jvalue ~= nil then + return math.Remap(joystick.Get(ply,uid),0,255,remapinfo[1],remapinfo[2]) + else + return jvalue + end +end + + + + +-------------------------------------------------------------------------------- +-- Player meta table magic +-- Author: HunterNL +-------------------------------------------------------------------------------- +local Player = FindMetaTable("Player") + +function Player:CanDriveTrains() + return IsValid(self:GetWeapon("train_kv_wrench")) or self:IsAdmin() +end + +function Player:GetTrain() + local seat = self:GetVehicle() + if IsValid(seat) then + return seat:GetNW2Entity("TrainEntity"),seat + end +end + +hook.Add("PlayerEnteredVehicle","MetrostroiPlayerTrain",function(ply,veh) + ply.InMetrostroiTrain = IsValid(veh:GetNW2Entity("TrainEntity")) and veh:GetNW2Entity("TrainEntity") +end) +hook.Add("PlayerLeaveVehicle","MetrostroiPlayerTrain",function(ply,veh) + ply.InMetrostroiTrain = false +end) + + +-------------------------------------------------------------------------------- +-- Train count +-------------------------------------------------------------------------------- +function Metrostroi.TrainCount(...) + local classnames = {...} + if #classnames == 1 then + return #ents.FindByClass(classnames[1]) + end + + local N = 0 + for k,v in pairs(#classnames > 0 and classnames or Metrostroi.TrainClasses) do + if not baseclass.Get(v).SubwayTrain then continue end + N = N + #ents.FindByClass(v) + end + return N +end + +function Metrostroi.TrainCountOnPlayer(ply ,...) + local classnames = {...} + local typ + if type(classnames[1]) == "number" then + typ = classnames[1] + classnames = {} + end + if CPPI then + local N = 0 + for k,v in pairs(#classnames > 0 and classnames or Metrostroi.TrainClasses) do + if not baseclass.Get(v).SubwayTrain then continue end + local ents = ents.FindByClass(v) + for k2,v2 in pairs(ents) do + if ply == v2:CPPIGetOwner() and (not typ or v2.SubwayTrain.WagType == typ) then + N = N + 1 + end + end + end + return N + end + return 0 +end + +concommand.Add("metrostroi_train_count", function(ply, _, args) + print("Trains on server: "..Metrostroi.TrainCount()) + if CPPI then + local N = {} + for k,v in pairs(Metrostroi.TrainClasses) do + if v == "gmod_subway_base" then continue end + local ents = ents.FindByClass(v) + for k2,v2 in pairs(ents) do + N[v2:CPPIGetOwner() or "(disconnected)"] = (N[v2:CPPIGetOwner() or "(disconnected)"] or 0) + 1 + end + end + for k,v in pairs(N) do + print(k,"Trains count: "..v) + end + end +end) + + + + +-------------------------------------------------------------------------------- +-- Simple hack to get a driving schedule +-------------------------------------------------------------------------------- +concommand.Add("metrostroi_schedule", function(ply, _, args) + if not IsValid(ply) then return end + local train = ply:GetTrain() + local pos = Metrostroi.TrainPositions[train] + --if pos and pos[1] then + local line = tonumber(args[1]) + local path = tonumber(args[2]) or 1 + local starts = tonumber(args[3]) + local ends = tonumber(args[4]) + train.Schedule = Metrostroi.GenerateSchedule("Line"..line.."_Platform"..path,starts,ends) + if train.Schedule then + train:SetNW2Int("_schedule_id",train.Schedule.ScheduleID) + train:SetNW2Int("_schedule_duration",train.Schedule.Duration) + train:SetNW2Int("_schedule_interval",train.Schedule.Interval) + train:SetNW2Int("_schedule_N",#train.Schedule) + train:SetNW2Int("_schedule_path",path) + for k,v in ipairs(train.Schedule) do + train:SetNW2Int("_schedule_"..k.."_1",v[1]) + train:SetNW2Int("_schedule_"..k.."_2",v[2]) + train:SetNW2Int("_schedule_"..k.."_3",v[3]) + train:SetNW2Int("_schedule_"..k.."_4",v[4]) + train:SetNW2String("_schedule_"..k.."_5",Metrostroi.StationNames[v[1]] or v[1]) + end + end + --end +end) + + + + +-------------------------------------------------------------------------------- +-- Failures related stuff +-------------------------------------------------------------------------------- +concommand.Add("metrostroi_failures", function(ply, _, args) + local i = 0 + for _,class in pairs(Metrostroi.TrainClasses) do + local trains = ents.FindByClass(class) + for _,train in pairs(trains) do + timer.Simple(0.1+i*0.2,function() + print("Failures for train "..train:EntIndex()) + train:TriggerInput("FailSimStatus",1) + end) + i = i + 1 + end + end +end) + +concommand.Add("metrostroi_fail", function(ply, _, args) + local trainList = {} + if not IsValid(ply) then + for _,class in pairs(Metrostroi.TrainClasses) do + local trains = ents.FindByClass(class) + for _,train in pairs(trains) do + table.insert(trainList,train) + end + end + else + local train = ply:GetTrain() + if IsValid(train) then + train:UpdateWagonList() + for k,v in pairs(train.WagonList) do + trainList[k] = v + end + end + end + + local train = table.Random(trainList) + if train then + if IsValid(ply) then + ply:PrintMessage(HUD_PRINTCONSOLE,"Generating random failure in your train!") + print("Player "..tostring(ply).." generated random failure in train "..train:EntIndex()) + else + print("Generating random failure in train "..train:EntIndex()) + end + train:TriggerInput("FailSimFail",1) + else + if IsValid(ply) then + ply:PrintMessage(HUD_PRINTCONSOLE,"You must be inside a train to generate a failure!") + end + end +end) + +concommand.Add("metrostroi_fail_reset", function(ply, _, args) + local trainList = {} + if not IsValid(ply) then + for _,class in pairs(Metrostroi.TrainClasses) do + local trains = ents.FindByClass(class) + for _,train in pairs(trains) do + table.insert(trainList,train) + end + end + else + local train = ply:GetTrain() + if IsValid(train) then + train:UpdateWagonList() + for k,v in pairs(train.WagonList) do + trainList[k] = v + end + end + end + + if #trainList > 0 then + if IsValid(ply) then + ply:PrintMessage(HUD_PRINTCONSOLE,"Reset all failures in your train!") + print("Player "..tostring(ply).." reset all failures in train "..trainList[1]:EntIndex()) + else + print("Reset all failures in train "..trainList[1]:EntIndex()) + end + for _,v in pairs(trainList) do v:TriggerInput("FailSimReset") end + else + if IsValid(ply) then + ply:PrintMessage(HUD_PRINTCONSOLE,"You must be inside a train to reset all failures!") + end + end +end) + +concommand.Add("metrostroi_wire", function(ply, _, args) + local trainList = {} + if not IsValid(ply) then + for _,class in pairs(Metrostroi.TrainClasses) do + local trains = ents.FindByClass(class) + for _,train in pairs(trains) do + table.insert(trainList,train) + end + end + else + local train = ply:GetTrain() + if IsValid(train) then + --train:UpdateWagonList() + for k,v in pairs(train.WagonList) do + trainList[k] = v + end + end + end + + local train = table.Random(trainList) + if train then + if IsValid(ply) then + args[1] = tonumber(args[1]) + if not args[1] then ply:PrintMessage(HUD_PRINTCONSOLE,"Argument must be a number") return end + ply:PrintMessage(HUD_PRINTCONSOLE,"sets outside power in train wire"..args[1].."!") + print("Player "..tostring(ply).." sets outside power in train "..args[1].." wire failure in train "..train:EntIndex()) + else + print("sets outside power in train wire "..train:EntIndex()) + end + --if train.WriteTrainWire then train:WriteTrainWire(args[1],1) end + train.TrainWireOutside[args[1]] = 1 + --if train.WriteTrainWire then train:WriteTrainWire(args[1],1) end + else + if IsValid(ply) then + ply:PrintMessage(HUD_PRINTCONSOLE,"You must be inside a train!") + end + end +end) +concommand.Add("metrostroi_wire_reset", function(ply, _, args) + local trainList = {} + if not IsValid(ply) then + for _,class in pairs(Metrostroi.TrainClasses) do + local trains = ents.FindByClass(class) + for _,train in pairs(trains) do + table.insert(trainList,train) + end + end + else + local train = ply:GetTrain() + if IsValid(train) then + --train:UpdateWagonList() + for k,v in pairs(train.WagonList) do + trainList[k] = v + end + end + end + + if #trainList > 0 then + if IsValid(ply) then + ply:PrintMessage(HUD_PRINTCONSOLE,"reset wire outside power in train!") + print("Player "..tostring(ply).." reset outside power in train ") + else + print("Reset outside power in trains ") + end + for _,v in pairs(trainList) do v.TrainWireOutside = {} end + else + if IsValid(ply) then + ply:PrintMessage(HUD_PRINTCONSOLE,"You must be inside a train!") + end + end +end) +concommand.Add("metrostroi_can", function(ply, _, args) + if not IsValid(ply) or not IsValid(ply:GetVehicle()) then return end + local train = ply:GetVehicle():GetNW2Entity("TrainEntity") + if not IsValid(train) then return end + if not args[4] then return end + local system = args[1] + local id = tonumber(args[2]) + local name = args[3] + local value = args[4] + if args[4] == "curtime" then value = CurTime() end + if args[4] == "true" then value = true end + if args[4] == "false" then value = false end + if tonumber(args[4]) then value = tonumber(args[4]) end + local srcid = tonumber(args[5]) + ply:PrintMessage(HUD_PRINTCONSOLE,"Hacking CAN!") + print(Format("Player %s hack CAN(%s->%s:%s %s=%s)",ply,srcid,system,id,name,value)) + train:CANWrite("Hacker",srcid or train:GetWagonNumber(),system,id,name,value) +end) + +-------------------------------------------------------------------------------- +-- Electric consumption stats +-------------------------------------------------------------------------------- +-- Load total kWh +timer.Create("Metrostroi_TotalkWhTimer",5.00,0,function() + file.Write("metrostroi_data/total_kwh.txt",Metrostroi.TotalkWh or 0) +end) +Metrostroi.TotalkWh = Metrostroi.TotalkWh or tonumber(file.Read("metrostroi_data/total_kwh.txt") or "") or 0 +Metrostroi.TotalRateWatts = Metrostroi.TotalRateWatts or 0 +Metrostroi.Voltage = 750 +Metrostroi.Voltages = Metrostroi.Voltages or {} +Metrostroi.Currents = Metrostroi.Currents or {} +Metrostroi.Current = 0 +Metrostroi.PeopleOnRails = 0 +Metrostroi.VoltageRestoreTimer = 0 + +local prevTime +hook.Add("Think", "Metrostroi_ElectricConsumptionThink", function() + -- Change in time + prevTime = prevTime or CurTime() + local deltaTime = (CurTime() - prevTime) + prevTime = CurTime() + + -- Calculate total rate + Metrostroi.TotalRateWatts = 0 + Metrostroi.Current = 0 + for k,v in pairs(Metrostroi.Currents) do Metrostroi.Currents[k] = 0 end + local bogeys = ents.FindByClass("gmod_train_bogey") + for _,bogey in pairs(bogeys) do + if bogey.Feeder then + Metrostroi.Currents[bogey.Feeder] = Metrostroi.Currents[bogey.Feeder] + bogey.DropByPeople + else + Metrostroi.Current = Metrostroi.Current + bogey.DropByPeople + end + end + for _,class in pairs(Metrostroi.TrainClasses) do + local trains = ents.FindByClass(class) + for _,train in pairs(trains) do + if train.Electric then + Metrostroi.TotalRateWatts = Metrostroi.TotalRateWatts + math.max(0,(train.Electric.EnergyChange or 0)) + local current = math.max(0,(train.Electric.Itotal or 0)) - math.max(0,(train.Electric.Iexit or 0)) + local feeder = false + local fB = train.FrontBogey + local rB = train.RearBogey + if IsValid(fB) then + if fB.Feeder then + Metrostroi.Currents[fB.Feeder] = Metrostroi.Currents[fB.Feeder] + fB.DropByPeople+current*0.4 + feeder = true + else + Metrostroi.Current = Metrostroi.Current + fB.DropByPeople + end + end + if IsValid(rB) then + if rB.Feeder then + Metrostroi.Currents[rB.Feeder] = Metrostroi.Currents[rB.Feeder] + rB.DropByPeople+current*0.4 + feeder = true + else + Metrostroi.Current = Metrostroi.Current + rB.DropByPeople + end + end + if not feeder then Metrostroi.Current = Metrostroi.Current + current*0.4 end + end + end + end + -- Ignore invalid values + if Metrostroi.TotalRateWatts > 1e8 then Metrostroi.TotalRateWatts = 0 end + if Metrostroi.TotalRateWatts > 0 then + -- Calculate total kWh + Metrostroi.TotalkWh = Metrostroi.TotalkWh + (Metrostroi.TotalRateWatts/(3.6e6))*deltaTime + end + -- Calculate total resistance of people on rails and current flowing through + --local Rperson = 0.613 + --local Iperson = Metrostroi.Voltage / (Rperson/(Metrostroi.PeopleOnRails + 1e-9)) + --Metrostroi.Current = Metrostroi.Current + Iperson + + -- Check if exceeded global maximum current + if Metrostroi.Current > GetConVarNumber("metrostroi_current_limit") then + Metrostroi.VoltageRestoreTimer = CurTime() + 7.0 + print(Format("[!] Power feed protection tripped: current peaked at %.1f A",Metrostroi.Current)) + end + + local voltage = math.max(0,GetConVarNumber("metrostroi_voltage")) + + -- Calculate new voltage + local Rfeed = 0.03 --25 + Metrostroi.Voltage = voltage - Metrostroi.Current*Rfeed + if CurTime() < Metrostroi.VoltageRestoreTimer then Metrostroi.Voltage = 0 end + for i in pairs(Metrostroi.Voltages) do + Metrostroi.Voltages[i] = math.max(0,voltage - Metrostroi.Currents[i]*Rfeed) + end + --print(Format("%5.1f v %.0f A",Metrostroi.Voltage,Metrostroi.Current)) +end) + +concommand.Add("metrostroi_electric", function(ply, _, args) -- (%.2f$) Metrostroi.GetEnergyCost(Metrostroi.TotalkWh), + local m = Format("[%25s] %010.3f kWh, %.3f kW (%5.1f v, %4.0f A)","", + Metrostroi.TotalkWh,Metrostroi.TotalRateWatts*1e-3, + Metrostroi.Voltage,Metrostroi.Current) + if IsValid(ply) + then ply:PrintMessage(HUD_PRINTCONSOLE,m) + else print(m) + end + + if CPPI then + local U = {} + local D = {} + for _,class in pairs(Metrostroi.TrainClasses) do + local trains = ents.FindByClass(class) + for _,train in pairs(trains) do + local owner = "(disconnected)" + if train:CPPIGetOwner() then + owner = train:CPPIGetOwner():GetName() + end + if train.Electric then + U[owner] = (U[owner] or 0) + train.Electric.ElectricEnergyUsed + D[owner] = (D[owner] or 0) + train.Electric.ElectricEnergyDissipated + end + end + end + for player,_ in pairs(U) do --, n=%.0f%% + --local m = Format("[%20s] %08.1f KWh (lost %08.1f KWh)",player,U[player]/(3.6e6),D[player]/(3.6e6)) --,100*D[player]/U[player]) --,D[player]) + local m = Format("[%25s] %010.3f kWh (%.2f$)",player,U[player]/(3.6e6),Metrostroi.GetEnergyCost(U[player]/(3.6e6))) + if IsValid(ply) + then ply:PrintMessage(HUD_PRINTCONSOLE,m) + else print(m) + end + end + end +end) + +timer.Create("Metrostroi_ElectricConsumptionTimer",0.5,0,function() + if CPPI then + local U = {} + local D = {} + for _,class in pairs(Metrostroi.TrainClasses) do + local trains = ents.FindByClass(class) + for _,train in pairs(trains) do + local owner = train:CPPIGetOwner() + if owner and (train.Electric) then + U[owner] = (U[owner] or 0) + train.Electric.ElectricEnergyUsed + D[owner] = (D[owner] or 0) + train.Electric.ElectricEnergyDissipated + end + end + end + for player,_ in pairs(U) do + if IsValid(player) then + player:SetDeaths(10*U[player]/(3.6e6)) + player.MUsedEnergy = (player.MUsedEnergy or 0) + 10*U[player]/(3.6e6) + end + end + end +end) + +local function murder(v) + local positions = Metrostroi.GetPositionOnTrack(v:GetPos()) + for k2,v2 in pairs(positions) do + local y,z = v2.y,v2.z + y = math.abs(y) + + local y1 = 0.91-0.10 + local y2 = 1.78 ---0.50 + if (y > y1) and (y < y2) and (z < -1.70) and (z > -1.72) and (Metrostroi.Voltage > 40) then + local pos = v:GetPos() + + util.BlastDamage(v,v,pos,64,3.0*Metrostroi.Voltage) + + local effectdata = EffectData() + effectdata:SetOrigin(pos + Vector(0,0,-16+math.random()*(40+0))) + util.Effect("cball_explode",effectdata,true,true) + + sound.Play("ambient/energy/zap"..math.random(1,3)..".wav",pos,75,math.random(100,150),1.0) + Metrostroi.PeopleOnRails = Metrostroi.PeopleOnRails + 1 + + --if math.random() > 0.85 then + --Metrostroi.VoltageRestoreTimer = CurTime() + 7.0 + --print("[!] Power feed protection tripped: "..(tostring(v) or "").." died on rails") + --end + end + end +end +--[[ +timer.Create("Metrostroi_PlayerKillTimer",0.1,0,function() + if true then return end + Metrostroi.PeopleOnRails = 0 + for k,v in pairs(player.GetAll()) do + murder(v) + end + for k,v in pairs(ents.FindByClass("npc_*")) do + murder(v) + end +end) +]] +timer.Remove("Metrostroi_PlayerKillTimer") + + +-------------------------------------------------------------------------------- +-- Does current map have any sort of metrostroi support +-------------------------------------------------------------------------------- +function Metrostroi.MapHasFullSupport(typ) + if not typ then + return (#Metrostroi.Paths > 0) + elseif typ=="ars" then + return next(Metrostroi.SignalEntitiesByName) + elseif typ=="auto" then + return Metrostroi.HaveAuto + elseif typ=="sbpp" then + return Metrostroi.HaveSBPP + elseif typ=="pa" then + return next(Metrostroi.PAMConfTest) + end +end + +concommand.Add("metrostroi_insert_signs", function(ply,_,args) + if IsValid(ply) then error("Metrostroi: This command can be run only from server console!") end + local MAP_NAME = game.GetMap() --"gm_mus_loopline_a3" + local MAP_VERSION = args and args[1] or "" + + local commands = {Format("session_begin %s %s",MAP_NAME,MAP_VERSION)} + + local function createSign(pos,ang,model) + table.insert(commands,Format("entity_create prop_static %s",pos)) + table.insert(commands,Format("entity_set_keyvalue prop_static %s \"angles\" \"%s\"",pos,ang))--table.insert(commands,Format("entity_rotate_incremental prop_static %s %s",pos,ang)) + table.insert(commands,Format("entity_set_keyvalue prop_static %s \"model\" \"%s\"",pos,model)) + end + + for k,v in pairs(ents.FindByClass("gmod_track_signs")) do + local data = v.SignModels[v.SignType-1] + local left = v.Left + local offset = Vector(0,v.YOffset,v.ZOffset) + local model = data.model + if left and not data.noleft then + if model:find("_r.mdl") then + model = model:Replace("_r.mdl","_l.mdl") + else + model = model:Replace("_l.mdl","_r.mdl") + end + end + local RAND = math.random(-10,10) + local pos = data.pos + offset + local ang = data.angles + if not data.noauto then pos = pos+Vector(0,0,RAND/5); ang = ang+Angle(0,0,RAND) end + if left then pos = pos*Vector(1,-1,1) end + if left and data.rotate then ang = ang-Angle(0,180,0) end + + createSign(v:LocalToWorld(pos),v:LocalToWorldAngles(ang),model) + end + + table.insert(commands,"session_end") + + for k,v in pairs(commands) do + local result = hammer.SendCommand(v) + if result ~= "ok" then + hammer.SendCommand("session_end") + error(Format("Error \"%s\" on command %s(%d)",result,v,k)) + end + end +end) +SafeRemoveEntity(Metrostroi.RTCamera) +function Metrostroi.GetCam() + if not IsValid(Metrostroi.RTCamera) then + Metrostroi.RTCamera = ents.Create( "point_camera" ) + Metrostroi.RTCamera:SetKeyValue( "GlobalOverride", 1 ) + Metrostroi.RTCamera:SetKeyValue( "fogEnable", 1 ) + Metrostroi.RTCamera:SetKeyValue( "fogStart", 1 ) + Metrostroi.RTCamera:SetKeyValue( "fogEnd", 4096 ) + Metrostroi.RTCamera:SetKeyValue( "fogColor", "0 0 0 127" ) + Metrostroi.RTCamera:SetPos(Vector(0,0,-2^16)) + Metrostroi.RTCamera:SetNoDraw(true) + Metrostroi.RTCamera:Activate() + Metrostroi.RTCamera:Spawn() + Metrostroi.RTCamera:Fire( "SetOff", "", 0.0 ) + end + return Metrostroi.RTCamera +end +util.AddNetworkString("metrostroi_cam_update") +local function updateCam() + timer.Simple(0,function() + local cam = Metrostroi.GetCam() + net.Start("metrostroi_cam_update") + net.WriteUInt(cam:EntIndex(),16) + net.Broadcast() + end) +end +net.Receive("metrostroi_cam_update",updateCam) +updateCam() + + +function Metrostroi.FindNextStation(src,stationsPath,stations) + -- Determine direction of travel + --assert(src.path == dest.path) + --local direction = src.x < dest.x + print("start") + + local markersForNode = {} + local sensorsForNode = {} + local entities = ents.FindByClass("gmod_track_pa_marker") + for k,v in pairs(entities) do + if v.TrackPosition then + local node = v.TrackPosition.node1 + if not markersForNode[node] then markersForNode[node] = {} end + table.insert(markersForNode[node],v) + end + end + + local entities = ents.FindByClass("gmod_track_autodrive_plate") + for k,v in pairs(entities) do + --print(v.PlateType) + if v.PlateType ~= METROSTROI_LSENSOR then continue end + local results = Metrostroi.GetPositionOnTrack(v:GetPos(),v:GetAngles()) + --[[ for k,v in pairs(results) do + print(k,v.x,v.node2.x) + end--]] + local pos = results[1] + if pos then -- FIXME make it select proper path + sensorsForNode[pos.node1] = sensorsForNode[pos.node1] or {} + table.insert(sensorsForNode[pos.node1],v) + + -- A signal belongs only to a single track + sensorsForNode[v] = pos + end + end + -- Accumulate travel time + local iter = 0 + local function scan(node,stations,path,trace,dist,branches) + while node do + local nextnode = path and node.next or not path and node.prev + assert(iter < 1000000, "OH SHI~") + iter = iter + 1 + if nextnode then + local heightDist = (nextnode.pos.z-node.pos.z)*0.01905 + local slope = heightDist/node.length*1000 + if math.abs(slope)>2 then + if not trace.slopeCurrent then + trace.slopeCurrent = node.id + trace.slopeLength = node.length + trace.slope = {} + else + trace.slopeLength = trace.slopeLength+node.length + end + --print(dist,slope) + table.insert(trace.slope,{dist,slope}) + elseif trace.slopeCurrent then + local slm,slmx,slc = 0,0,0 + --print(#trace.slope,trace.slopeLength) + local restbl = {} + for _,v in pairs(trace.slope) do + local sl = math.floor((v[2]+2.5)/5)*5 + if slm~=sl then + local slmax = sl>0 and math.max(sl,slm) or math.min(sl,slm) + if (slc>2 or math.abs(slm-sl)>20) and (not restbl[#restbl] or restbl[#restbl][1] ~= slmax) then + table.insert(restbl,{slmax,slmx}) + slmx = v[1] + end + if slmx==0 then slmx = v[1] end + slm = sl + slc = 0 + else + slc = slc + 1 + end + --print(k,v,) + --slc = slc+v[1] + end + if #restbl==0 and slm~=0 and math.abs(dist-slmx)>30 then table.insert(restbl,{slm,slmx,slc}) end + if #restbl~=0 then + table.insert(restbl,{0,dist}) + for k,v in pairs(restbl) do + --print(k,v[1],v[2],v[3]) + table.insert(trace.slopes,v) + end + end + --print("E---",node.pos) + trace.slopeCurrent = nil + end + end + + local targetStation = tonumber(stations[1]) + --local stationT = Metrostroi.Stations[tonumber(id)] + if markersForNode[node] then + for i,marker in ipairs(markersForNode[node]) do + if marker.PAType == 1 then + print("MAKR",marker.TrackX,marker.TrackPosition.x,marker.PAStationID,targetStation,marker.PAStationPath,stationsPath) + if marker.PAStationID ~= targetStation or tonumber(marker.PAStationPath) ~= stationsPath then return end + table.remove(stations,1) + --if marker.PAStationCorrection then print(targetStation) end + local distance = dist+(marker.TrackPosition.x-node.x)-(marker.PAStationCorrection or 0) + local lastSens,nearSens + for s=0,3 do + if not trace.sensors[#trace.sensors-s] or distance-trace.sensors[#trace.sensors-s] > 150 then break end + lastSens = #trace.sensors-s + end + table.insert(trace.stations,{ + id=targetStation, + path=stationsPath, + pos=distance, + isHorlift = marker.PAStationHorlift, + hasSwitches = marker.PAStationHasSwtiches, + rightDoors = marker.PAStationRightDoors, + name = marker.PAStationName, + isLast = marker.PALastStation, + isInWrong = marker.PAWrongPath, + name_last = marker.PALastStationName, + dist_last_start = marker.PADeadlockStart and distance+marker.PADeadlockStart, + dist_last_end = marker.PADeadlockEnd and distance+marker.PADeadlockEnd, + linkedSensor = lastSens, + }) + --print("MAKR GOOD",marker.TrackX,marker.TrackPosition.x,targetStation) + break + end + end + end + if Metrostroi.SignalEntitiesForNode[node] then + for k,signal in pairs(Metrostroi.SignalEntitiesForNode[node]) do + if signal.TrackDir ~= path then continue end + table.insert(trace.signals,{signal.Name,dist+(signal.TrackX-node.x)--[[ signal.TrackPosition.x--]] }) + end + end + if sensorsForNode[node] then + local sensor = sensorsForNode[node][1] + local x = sensorsForNode[sensor].x + --print("SENS",node,dist,dist+(x-node.x)) + table.insert(trace.sensors,dist+(x-node.x)--[[ sensor.TrackPosition.x--]] ) + end + dist = dist+node.length + if node.branches then + for k,v in pairs(node.branches) do + if branches[v[2]] or v[2].path == src.path then continue end + branches[v[2]] = true + local result = scan(v[2],table.Copy(stations),true,table.Copy(trace),dist,branches) or scan(v[2],table.Copy(stations),false,table.Copy(trace),dist,branches) + if result and #result[3] == 0 then return result end + end + end + --[=[if node.branches and not branches[node.branches[1]] and node.branches[1][2].path ~= src.path then + branches[node.branches[1]] = true + local result = scan(node,table.Copy(stations),true,table.Copy(trace),dist,branches) or scan(node,table.Copy(stations),false,table.Copy(trace),dist,branches) + if result and #stations == 0 then return result end + end + if node.branches and not node.branches[2] and branches[node.branches[2]] and node.branches[2][2].path ~= src.path then + branches[node.branches[2]] = true + local result = scan(node,table.Copy(stations),true,table.Copy(trace),dist,branches) or scan(node,table.Copy(stations),false,table.Copy(trace),dist,branches) + if result and #stations == 0 then return result end + end]=] + node = nextnode + if not node then break end + end + if #stations == 0 then print(debug.traceback()) end + return #stations == 0 and {trace,dist,stations} + end + + return scan(src,stations,true,{signals={},stations={},sensors={},slopes={}},0,{}) or scan(src,stations,false,{signals={},stations={},sensors={},slopes={}},0,{}) +end +concommand.Add("metrostroi_pam_genconfig", function(ply, _, args) + if not IsValid(ply) or not ply:IsAdmin() then return end + + if args[1] == "clear" then + ply:PrintMessage(HUD_PRINTCONSOLE,"Cleared!") + Metrostroi.PAMConfTest = {} + return + end + + local line = tonumber(table.remove(args,1) or false) + local path = tonumber(table.remove(args,1) or false) + if (not line or not path) or #args == 0 then + ply:PrintMessage(HUD_PRINTCONSOLE,"Bad metrostroi_pam_genconfig use.\nmetrostroi_pam_genconfig line path station1 ... stationN-1 stationN") + return + end + + local badFind = false + for k,id in pairs(args) do + id = tonumber(id) + if not id--[[ or not Metrostroi.Stations[id]--]] then + badFind = id + break + end + end + + if badFind then + ply:PrintMessage(HUD_PRINTCONSOLE,Format("Check station id %s!",badFind)) + return + end + + -- Print interesting information + local results = Metrostroi.GetPositionOnTrack(ply:GetPos(),ply:GetAimVector():Angle()) + for k,v in pairs(results) do + --ply:PrintMessage(HUD_PRINTCONSOLE,Format("\t[%d] Path #%d, ID #%d: (%.2f x %.2f x %.2f) m Facing %s",k,v.path.id,v.node1.id,v.x,v.y,v.z,v.forward and "forward" or "v.node1")) + local result = Metrostroi.FindNextStation(v.node1,path,args) + if not result then + ply:PrintMessage(HUD_PRINTCONSOLE,Format("Config not generated! Can't find all stations")) + return + end + PrintTable(result) + if not Metrostroi.PAMConfTest then + Metrostroi.PAMConfTest = {} + end + if not Metrostroi.PAMConfTest[line] then + Metrostroi.PAMConfTest[line] = {} + end + --if not Metrostroi.PAMConfTest[line][path] then + Metrostroi.PAMConfTest[line][path] = result + ply:PrintMessage(HUD_PRINTCONSOLE,"Generated!") + --end + Metrostroi.PARebuildStations() + --print(distance) + end +end) +function Metrostroi.PARebuildStations() + Metrostroi.PAMStations = {} + Metrostroi.LineCount = 1 + for lineID,line in pairs(Metrostroi.PAMConfTest) do + if type(lineID) ~= "number" then continue end + Metrostroi.LineCount = math.max(Metrostroi.LineCount) + for _,path in ipairs(line) do + for _,station in ipairs(path[1].stations) do + if not station.id then continue end + if not Metrostroi.PAMStations[lineID] then Metrostroi.PAMStations[lineID] = {} end + if not Metrostroi.PAMStations[lineID][station.id] then + Metrostroi.PAMStations[lineID][station.id] =table.insert(Metrostroi.PAMStations[lineID],station) + end + end + end + end +end + +concommand.Add("metrostroi_pam_add_station", function(ply, _, args) + if not IsValid(ply) or not ply:IsAdmin() then return end + + local line = tonumber(table.remove(args,1) or false) + local path = tonumber(table.remove(args,1) or false) + local station = tonumber(table.remove(args,1) or false) + local dist = tonumber(table.remove(args,1) or false) + if (not line or not path or not station) then + ply:PrintMessage(HUD_PRINTCONSOLE,"Bad metrostroi_pam_add_station use.\nmetrostroi_pam_add_station line path station dist") + return + end + if not Metrostroi.PAMConfTest[line][path] then + ply:PrintMessage(HUD_PRINTCONSOLE,"Generate config first!") + return + end + local PA + if not dist then + local train = ply:GetTrain() + if IsValid(train) and train.PAM and train.PAM.Distance then + dist = train.PAM.Distance + PA = train.PAM + end + end + if not dist then + ply:PrintMessage(HUD_PRINTCONSOLE,"Bad metrostroi_pam_add_station use.\nCan't get dist, because it's not entered and not found train with PAM") + return + end + local tbl = Metrostroi.PAMConfTest[line][path][1].stations + local badFind = false + for k,id in ipairs(tbl) do + if id.id == station then + if math.abs(id.pos-dist)>20 then + ply:PrintMessage(HUD_PRINTCONSOLE,Format("Too big delta, pos %.1f station %d station pos %.1f delta %.1f",dist,station,id.pos,id.pos-dist)) + return + end + ply:PrintMessage(HUD_PRINTCONSOLE,Format("Set pos %.1f to station %d, prev dist %.1f",dist,station,id.pos)) + id.pos = dist + if PA then + PA.StationTable = PA:FindStation(PA.Line,PA.StationTable.path,PA.StationTable.id) + end + table.sort(tbl, function(a,b) return a.pos < b.pos end) + return + end + end + --[[ table.insert(Metrostroi.PAMConfTest[line][path][1].stations,{station,dist}) + table.sort(tbl, function(a,b) print(a,b,a[2],b[2]) return a[2] < b[2] end) + Metrostroi.PARebuildStations() + ply:PrintMessage(HUD_PRINTCONSOLE,"Setted!")--]] +end) diff --git a/lua/metrostroi/systems/_obsolete/_ys_electric_ b/lua/metrostroi/systems/_obsolete/_ys_electric_ new file mode 100644 index 0000000..0d0c535 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/_ys_electric_ @@ -0,0 +1,616 @@ +-------------------------------------------------------------------------------- +-- ������������� ���� +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("Electric") +function TRAIN_SYSTEM:Initialize() + -- General power output + self.Main750V = 0.0 + self.Aux750V = 0.0 + self.Power750V = 0.0 + self.Aux80V = 0.0 + self.Lights80V = 0.0 + + -- Resistances + self.R1 = 1e9 + self.R2 = 1e9 + self.R3 = 1e9 + self.Rs1 = 1e9 + self.Rs2 = 1e9 + + self.Rstator13 = 1e9 + self.Rstator24 = 1e9 + self.Ranchor13 = 1e9 + self.Ranchor24 = 1e9 + + -- Load internal circuits + self.Train:LoadSystem("InternalCircuits","Gen_Int") + + -- Electric network info + self.Itotal = 0.0 + self.I13 = 0.0 + self.I24 = 0.0 + self.Ustator13 = 0.0 + self.Ustator24 = 0.0 + self.Ishunt13 = 0.0 + self.Istator13 = 0.0 + self.Ishunt24 = 0.0 + self.Istator24 = 0.0 + + self.Magnetization = 0 + + -- Calculate current through rheostats 1, 2 + self.IR1 = self.Itotal + self.IR2 = self.Itotal + self.IRT2 = self.Itotal + self.T1 = 25 + self.T2 = 25 + self.P1 = 0 + self.P2 = 0 + self.Overheat1 = 0 + self.Overheat2 = 0 + + -- Total energy used by train + self.ElectricEnergyUsed = 0 -- joules + self.ElectricEnergyDissipated = 0 -- joules + self.EnergyChange = 0 + + -- Signal resistor + self.RPSignalResistor = FailSim.AddParameter(self,"SignalResistor", { value = 1.0, precision = 0.20 }) + + --Train wire outside power + -- Need many iterations for engine simulation to converge + self.SubIterations = 16 + -- ������� ����������� + + self.Train:LoadSystem("GV","Relay","GV_10ZH",{bass=true}) + + -- Thyristor contrller + if self.ThyristorController then + self.Train:LoadSystem("ThyristorBU5_6","Relay") + self.ThyristorResistance = 1e9 + self.ThyristorState = 0.0 + self.ThyristorControllerWork = 0 + end + + self.Cosume = 0 +end + + +function TRAIN_SYSTEM:Inputs() + return { "Type" } +end + +function TRAIN_SYSTEM:Outputs() + return { --[[ "R1","R2","R3","Rs1","Rs2",--]] "Itotal","I13","I24","IRT2", + --[[ "Ustator13","Ustator24","Ishunt13","Istator13","Ishunt24","Istator24", + "Uanchor13","Uanchor24",--]] "U13","U24","Utotal", + "T1", "T2", "P1", "P2", + "Overheat1","Overheat2", + "Main750V", "Power750V", "Aux750V", "Aux80V", "Lights80V", + --[[ "ThyristorResistance", "ThyristorState", + "ElectricEnergyUsed", "ElectricEnergyDissipated", "EnergyChange", + "RPSignalResistor", --]] "Cosume","Type"} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Type" then + self.Type = value + end +end + +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:Think(dT,iter) + local Train = self.Train + ---------------------------------------------------------------------------- + -- Voltages from the third rail + ---------------------------------------------------------------------------- + -- ���������� � ������� ������������� ����� + self.Main750V = Train.TR.Main750V * Train.PNB_1250_1.Value + -- ���������� � �������������� ������������� ����� + self.Aux750V = Train.TR.Main750V * Train.PNB_1250_2.Value * Train.KVC.Value + -- ������� ���������� ������� ����� + self.Power750V = self.Main750V * Train.GV.Value + + + ---------------------------------------------------------------------------- + -- Information only + ---------------------------------------------------------------------------- + if Train.PowerSupply then + -- ������� ��������������� ����� 80V + self.Aux80V = Train.PowerSupply.XT3_1 + -- ������� ��������� 80V + self.Lights80V = Train.PowerSupply.XT3_4 + end + + + ---------------------------------------------------------------------------- + -- Solve circuits + ---------------------------------------------------------------------------- + if self.ThyristorController then + self:SolveThyristorController(Train,dT) + end + self:SolvePowerCircuits(Train,dT) + self:SolveInternalCircuits(Train,dT,iter==1) + + + ---------------------------------------------------------------------------- + -- Calculate current flow out of the battery + ---------------------------------------------------------------------------- + --local totalCurrent = 5*A30 + 63*A24 + 16*A44 + 5*A39 + 10*A80 + --local totalCurrent = 20 + 60*DIP +end + + +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:SolveInternalCircuits(Train,dT) + if (self.TrainSolver == "81_717") or (self.TrainSolver == "81_714") then + local SDRK_Shunt = 1.0 + self.Triggers = { -- FIXME + ["KPP"] = function(V) Train.KPP:TriggerInput("Close",V) end, + + ["RPvozvrat"] = function(V) Train.RPvozvrat:TriggerInput("Open",V) end, + ["RRTuderzh"] = function(V) Train.RRTuderzh = V end, + ["RRTpod"] = function(V) Train.RRTpod = V end, + ["RUTpod"] = function(V) Train.RUTpod = V end, + + ["SDPP"] = function(V) Train.PositionSwitch:TriggerInput("MotorState",-1.0 + 2.0*math.max(0,V)) end, + ["SDRK_Shunt"] = function(V) SDRK_Shunt = V end, + ["SDRK_Coil"] = function(V) Train.RheostatController:TriggerInput("MotorCoilState",SDRK_Shunt*math.min(1,math.max(0,V))*(-1.0 + 2.0*Train.RR.Value)) end, + ["SDRK"] = function(V) Train.RheostatController:TriggerInput("MotorState",V) end, + + ["XR3.2"] = function(V) Train.PowerSupply:TriggerInput("XR3.2",V) end, + ["XR3.3"] = function(V) Train.PowerSupply:TriggerInput("XR3.3",V) end, + ["XR3.4"] = function(V) end, --Train.PowerSupply:TriggerInput("XR3.4",V) end, + ["XR3.6"] = function(V) end, --Train.PowerSupply:TriggerInput("XR3.6",V) end, + ["XR3.7"] = function(V) end, --Train.PowerSupply:TriggerInput("XR3.7",V) end, + ["XT3.1"] = function(V) Train.PowerSupply:TriggerInput("XT3.1",Train.Battery.Voltage*V) end, + + ["ReverserForward"] = function(V) Train.RKR:TriggerInput("Open",V) end, + ["ReverserBackward"] = function(V) Train.RKR:TriggerInput("Close",V) end, + } + if self.TrainSolver == "81_717" then + Train.InternalCircuits.Solve81_717(Train,self.Triggers) + else + Train.InternalCircuits.Solve81_714(Train,self.Triggers) + end + end + if (self.TrainSolver == "Ezh3") or (self.TrainSolver == "Ema508") then + local KSH1,KSH2 = 0,0 + local SDRK_Shunt = 1.0 + self.Triggers = { -- FIXME + --["KSH1"] = function(V) KSH1 = KSH1 + V end, + --["KSH2"] = function(V) KSH2 = KSH2 + V end, + --["KSB1"] = function(V) Train.KSB1:TriggerInput("Set",V) KSH1 = KSH1 + V end, + --["KSB2"] = function(V) Train.KSB2:TriggerInput("Set",V) KSH2 = KSH2 + V end, + ["KPP"] = function(V) Train.KPP:TriggerInput("Close",V) end, + + ["RPvozvrat"] = function(V) Train.RPvozvrat:TriggerInput("Open",V) end, + ["RRTuderzh"] = function(V) Train.RRTuderzh = V end, + ["RRTpod"] = function(V) Train.RRTpod = V end, + ["RUTpod"] = function(V) Train.RUTpod = V end, + + ["SDPP"] = function(V) Train.PositionSwitch:TriggerInput("MotorState",-1.0 + 2.0*math.max(0,V)) end, + ["SDRK_Shunt"] = function(V) SDRK_Shunt = V end, + ["SDRK_Coil"] = function(V) Train.RheostatController:TriggerInput("MotorCoilState",SDRK_Shunt*math.min(1,math.max(0,V))*(-1.0 + 2.0*Train.RR.Value)) end, + ["SDRK"] = function(V) Train.RheostatController:TriggerInput("MotorState",V) end, + + ["XR3.2"] = function(V) Train.PowerSupply:TriggerInput("XR3.2",V) end, + ["XR3.3"] = function(V) Train.PowerSupply:TriggerInput("XR3.3",V) end, + ["XR3.4"] = function(V) end, --Train.PowerSupply:TriggerInput("XR3.4",V) end, + ["XR3.6"] = function(V) end, --Train.PowerSupply:TriggerInput("XR3.6",V) end, + ["XR3.7"] = function(V) end, --Train.PowerSupply:TriggerInput("XR3.7",V) end, + ["XT3.1"] = function(V) Train.PowerSupply:TriggerInput("XT3.1",Train.Battery.Voltage*V) end, + + ["ReverserForward"] = function(V) Train.RKR:TriggerInput("Open",V) end, + ["ReverserBackward"] = function(V) Train.RKR:TriggerInput("Close",V) end, + } + --local S = Train.InternalCircuits.SolveEzh3(Train,self.Triggers) + --Train.KSH1:TriggerInput("Set",KSH1) + --Train.KSH2:TriggerInput("Set",KSH2) + + if self.TrainSolver == "Ezh3" then + Train.InternalCircuits.SolveEzh3(Train,self.Triggers) + else + Train.InternalCircuits.SolveEma508(Train,self.Triggers) + end + end + if (self.TrainSolver == "E") then + local KSH1,KSH2 = 0,0 + local SDRK_Shunt = 1.0 + self.Triggers = { -- FIXME + --["KSH1"] = function(V) KSH1 = KSH1 + V end, + --["KSH2"] = function(V) KSH2 = KSH2 + V end, + --["KSB1"] = function(V) Train.KSB1:TriggerInput("Set",V) KSH1 = KSH1 + V end, + --["KSB2"] = function(V) Train.KSB2:TriggerInput("Set",V) KSH2 = KSH2 + V end, + ["KPP"] = function(V) Train.KPP:TriggerInput("Close",V) end, + + ["RPvozvrat"] = function(V) Train.RPvozvrat:TriggerInput("Open",V) end, + ["RRTuderzh"] = function(V) Train.RRTuderzh = V end, + ["RRTpod"] = function(V) Train.RRTpod = V end, + ["RUTpod"] = function(V) Train.RUTpod = V end, + + ["SDPP"] = function(V) Train.PositionSwitch:TriggerInput("MotorState",-1.0 + 2.0*math.max(0,V)) end, + ["SDRK_Shunt"] = function(V) SDRK_Shunt = V end, + ["SDRK_Coil"] = function(V) Train.RheostatController:TriggerInput("MotorCoilState",SDRK_Shunt*math.min(1,math.max(0,V))*(-1.0 + 2.0*Train.RR.Value)) end, + ["SDRK"] = function(V) Train.RheostatController:TriggerInput("MotorState",V) end, + + ["XR3.2"] = function(V) Train.PowerSupply:TriggerInput("XR3.2",V) end, + ["XR3.3"] = function(V) Train.PowerSupply:TriggerInput("XR3.3",V) end, + ["XR3.4"] = function(V) end, --Train.PowerSupply:TriggerInput("XR3.4",V) end, + ["XR3.6"] = function(V) end, --Train.PowerSupply:TriggerInput("XR3.6",V) end, + ["XR3.7"] = function(V) end, --Train.PowerSupply:TriggerInput("XR3.7",V) end, + ["XT3.1"] = function(V) Train.PowerSupply:TriggerInput("XT3.1",Train.Battery.Voltage*V) end, + + ["ReverserForward"] = function(V) Train.RKR:TriggerInput("Open",V) end, + ["ReverserBackward"] = function(V) Train.RKR:TriggerInput("Close",V) end, + } + --local S = Train.InternalCircuits.SolveEzh3(Train,self.Triggers) + --Train.KSH1:TriggerInput("Set",KSH1) + --Train.KSH2:TriggerInput("Set",KSH2) + Train.InternalCircuits.SolveE(Train,self.Triggers) + end + if (self.TrainSolver == "81_704") then + local KSH1,KSH2 = 0,0 + local SDRK_Shunt = 1.0 + self.Triggers = { -- FIXME + --["KSH1"] = function(V) KSH1 = KSH1 + V end, + --["KSH2"] = function(V) KSH2 = KSH2 + V end, + --["KSB1"] = function(V) Train.KSB1:TriggerInput("Set",V) KSH1 = KSH1 + V end, + --["KSB2"] = function(V) Train.KSB2:TriggerInput("Set",V) KSH2 = KSH2 + V end, + ["KPP"] = function(V) Train.KPP:TriggerInput("Close",V) end, + + ["RPvozvrat"] = function(V) Train.RPvozvrat:TriggerInput("Open",V) end, + ["RRTuderzh"] = function(V) Train.RRTuderzh = V end, + ["RRTpod"] = function(V) Train.RRTpod = V end, + ["RUTpod"] = function(V) Train.RUTpod = V end, + + ["SDPP"] = function(V) Train.PositionSwitch:TriggerInput("MotorState",-1.0 + 2.0*math.max(0,V)) end, + ["SDRK_Shunt"] = function(V) SDRK_Shunt = V end, + ["SDRK_Coil"] = function(V) Train.RheostatController:TriggerInput("MotorCoilState",SDRK_Shunt*math.min(1,math.max(0,V))*(-1.0 + 2.0*Train.RR.Value)) end, + ["SDRK"] = function(V) Train.RheostatController:TriggerInput("MotorState",V) end, + + ["XR3.2"] = function(V) Train.PowerSupply:TriggerInput("XR3.2",V) end, + ["XR3.3"] = function(V) Train.PowerSupply:TriggerInput("XR3.3",V) end, + ["XR3.4"] = function(V) end, --Train.PowerSupply:TriggerInput("XR3.4",V) end, + ["XR3.6"] = function(V) end, --Train.PowerSupply:TriggerInput("XR3.6",V) end, + ["XR3.7"] = function(V) end, --Train.PowerSupply:TriggerInput("XR3.7",V) end, + ["XT3.1"] = function(V) Train.PowerSupply:TriggerInput("XT3.1",Train.Battery.Voltage*V) end, + + ["ReverserForward"] = function(V) Train.RKR:TriggerInput("Open",V) end, + ["ReverserBackward"] = function(V) Train.RKR:TriggerInput("Close",V) end, + } + --local S = Train.InternalCircuits.SolveEzh3(Train,self.Triggers) + --Train.KSH1:TriggerInput("Set",KSH1) + --Train.KSH2:TriggerInput("Set",KSH2) + Train.InternalCircuits.Solve81_704(Train,self.Triggers) + end +end + + + +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:SolveThyristorController(Train,dT) + -- General state + local Active = ((Train.KSB1.Value > 0) or (Train.KSB2.Value > 0)) and (Train.LK2.Value == 1.0) + local StatorCurrent = (math.abs(self.Istator13) + math.abs(self.Istator24))*0.5 + local Current = (math.abs(Train.Electric.I13) + math.abs(Train.Electric.I24))/2 + local PrevCurrent = self.ThyristorPrevCurrent or Current + self.ThyristorPrevCurrent = Current + + -- Controllers resistance + local Resistance = 0.036 + + -- Update thyristor controller signal + if not Active then + self.ThyristorState = 0.00 + self.ThyristorTimeout = 0 + self.PrepareElectric = CurTime() + self.ThyristorDone = false + else--if self.PrepareElectric then + -- Generate control signal + --180+80 + local T = 180.0 + + --80.0*self.ThyristorState*(1-Train:ReadTrainWire(2)) + + (100.0*Train.Pneumatic.WeightLoadRatio+80.0)*Train:ReadTrainWire(2) + local I = Current + local dI = (Current - PrevCurrent)/dT + local A = (T-I)*0.1--0.05 + local B = -dI*0.1--0.05 + local C = A + B + + -- Output signal + --print(Format("%.1f/%.1f A %3d%% %.3f A",Current,T,self.ThyristorState*100,C)) + if self.PrepareElectric then + self.ThyristorState = 1 + if Current > 150 or CurTime()-self.PrepareElectric > 1.2 then + self.PrepareElectric = false + self.ThyristorState = 0 + end + elseif not self.ThyristorDone then + self.ThyristorState = math.max(0,math.min(1,self.ThyristorState + C*dT)) + if self.ThyristorState == 1 then self.ThyristorDone = true end + end + -- Generate resistance + local keypoints = { + 0.10,0.008, + 0.20,0.018, + 0.30,0.030, + 0.40,0.047, + 0.50,0.070, + 0.60,0.105, + 0.70,0.165, + 0.80,0.280, + 0.90,0.650, + 1.00,15.00, + } + local TargetField = 0.30 + 0.70*self.ThyristorState + local Found = false + for i=1,#keypoints/2 do + local X1,Y1 = keypoints[(i-1)*2+1],keypoints[(i-1)*2+2] + local X2,Y2 = keypoints[(i)*2+1],keypoints[(i)*2+2] + + if (not Found) and (not X2) then + Resistance = Y1 + Found = true + elseif (TargetField >= X1) and (TargetField < X2) then + local T = (TargetField-X1)/(X2-X1) + Resistance = Y1 + (Y2-Y1)*T + Found = true + end + end + end + + -- Allow or deny using manual brakes + --Train.ThyristorBU5_6:TriggerInput("Set",not self.PrepareElectric and self.ThyristorState > 0.90) + Train.ThyristorBU5_6:TriggerInput("Set",self.ThyristorDone) + -- Set resistance + self.ThyristorResistance = Resistance + 1e9 * (Active and 0 or 1) +end + + + +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:SolvePowerCircuits(Train,dT) + -- ���������� ������������� � ���������� ����������� ����������� + if not self.ResistorBlocksInit then + self.ResistorBlocksInit = true + -- Load resistor blocks + self.Train:LoadSystem("ResistorBlocks","Gen_Res") + Train.ResistorBlocks.InitializeResistances_81_705(Train) + end + -- ���������� ���������� �1-�2, �12-�13 + self.ExtraResistanceLK5 = Train.KF_47A["L2-L4" ]*(1-Train.LK5.Value) + self.ExtraResistanceLK2 = Train.KF_47A["L12-L13"]*(1-Train.LK2.Value) + + if Train.PositionSwitch.SelectedPosition == 1 then -- PS + self.R1 = Train.ResistorBlocks.R1C1(Train) + self.R2 = Train.ResistorBlocks.R2C1(Train) + self.R3 = 0.0 + elseif Train.PositionSwitch.SelectedPosition == 2 then -- PP + self.R1 = Train.ResistorBlocks.R1C2(Train) + self.R2 = Train.ResistorBlocks.R2C2(Train) + self.R3 = 0.0 + elseif Train.PositionSwitch.SelectedPosition >= 3 then -- PT + self.R1 = Train.ResistorBlocks.R1C1(Train) + self.R2 = Train.ResistorBlocks.R2C1(Train) + self.R3 = Train.ResistorBlocks.R3(Train) + end + -- Apply LK3, LK4 contactors + self.R1 = self.R1 + 1e9*(1 - Train.LK3.Value) + self.R2 = self.R2 + 1e9*(1 - Train.LK4.Value) + + -- Shunt resistance + self.Rs1 = Train.ResistorBlocks.S1(Train) + 1e9*(1 - Train.KSH1.Value) + self.Rs2 = Train.ResistorBlocks.S2(Train) + 1e9*(1 - Train.KSH2.Value) + + -- Thyristor contrller + if self.ThyristorController then + self.Rs1 = ((self.ThyristorResistance^-1) + (self.Rs1^-1))^-1 + self.Rs2 = ((self.ThyristorResistance^-1) + (self.Rs2^-1))^-1 + end + + -- Calculate total resistance of engines winding + local RwAnchor = Train.Engines.Rwa*2 -- Double because each set includes two engines + local RwStator = Train.Engines.Rws*2 + -- Total resistance of the stator + shunt + self.Rstator13 = (RwStator^-1 + self.Rs1^-1)^-1 + self.Rstator24 = (RwStator^-1 + self.Rs2^-1)^-1 + -- Total resistance of entire motor + self.Ranchor13 = RwAnchor + self.Ranchor24 = RwAnchor + + -- ���������� ����������� (calculate electric power network) + if Train.PositionSwitch.SelectedPosition == 1 then -- PS + self:SolvePS(Train) + elseif Train.PositionSwitch.SelectedPosition == 2 then -- PS + self:SolvePP(Train,Train.RheostatController.SelectedPosition >= 17) + else + self:SolvePT(Train) + end + + -- Calculate current through rheostats 1, 2 + self.IR1 = self.I13 + self.IR2 = self.I24 + + -- Calculate induction properties of the motor + self.I13SH = self.I13SH or self.I13 + self.I24SH = self.I24SH or self.I24 + + -- Time constant + local T13const1 = math.max(16.00,math.min(28.0,(self.R13^2) * 2.0)) -- R * L + local T24const1 = math.max(16.00,math.min(28.0,(self.R24^2) * 2.0)) -- R * L + + -- Total change + local dI13dT = T13const1 * (self.I13 - self.I13SH) * dT + local dI24dT = T24const1 * (self.I24 - self.I24SH) * dT + + -- Limit change and apply it + if dI13dT > 0 then dI13dT = math.min(self.I13 - self.I13SH,dI13dT) end + if dI13dT < 0 then dI13dT = math.max(self.I13 - self.I13SH,dI13dT) end + if dI24dT > 0 then dI24dT = math.min(self.I24 - self.I24SH,dI24dT) end + if dI24dT < 0 then dI24dT = math.max(self.I24 - self.I24SH,dI24dT) end + self.I13SH = self.I13SH + dI13dT + self.I24SH = self.I24SH + dI24dT + self.I13 = self.I13SH + self.I24 = self.I24SH + + -- Re-calculate total current and simulate infinite resistance in circuit + if Train.PositionSwitch.SelectedPosition == 1 then -- PS + self.I13 = self.I13 * (Train.LK3.Value * Train.LK4.Value * Train.LK1.Value) + self.I24 = self.I24 * (Train.LK3.Value * Train.LK4.Value * Train.LK1.Value) + + self.I24 = (self.I24 + self.I13)*0.5 + self.I13 = self.I24 + self.Itotal = self.I24 + elseif Train.PositionSwitch.SelectedPosition == 2 then -- PS + self.I13 = self.I13 * Train.LK3.Value * Train.LK1.Value + self.I24 = self.I24 * Train.LK4.Value * Train.LK1.Value + + self.Itotal = self.I13 + self.I24 + else -- PT + self.I13 = self.I13 * Train.LK3.Value*Train.LK4.Value + self.I24 = self.I24 * Train.LK4.Value*Train.LK3.Value + + self.Itotal = self.I13 + self.I24 + end + + -- Calculate extra information + self.Uanchor13 = self.I13 * self.Ranchor13 + self.Uanchor24 = self.I24 * self.Ranchor24 + + + + ---------------------------------------------------------------------------- + -- Calculate current through stator and shunt + self.Ustator13 = self.I13 * self.Rstator13 + self.Ustator24 = self.I24 * self.Rstator24 + + self.Ishunt13 = self.Ustator13 / self.Rs1 + self.Istator13 = self.Ustator13 / RwStator + self.Ishunt24 = self.Ustator24 / self.Rs2 + self.Istator24 = self.Ustator24 / RwStator + + if Train.PositionSwitch.SelectedPosition >= 3 then + local I1,I2 = self.Ishunt13,self.Ishunt24 + self.Ishunt13 = -I2 + self.Ishunt24 = -I1 + + I1,I2 = self.Istator13,self.Istator24 + self.Istator13 = -I2 + self.Istator24 = -I1 + end + + -- Calculate current through RT2 relay + self.IRT2 = math.abs(self.Itotal * Train.PositionSwitch["10_contactor"]) + + -- Sane checks + if self.R1 > 1e5 then self.IR1 = 0 end + if self.R2 > 1e5 then self.IR2 = 0 end + + -- Calculate power and heating + local K = 12.0*1e-5 + local H = (10.00+(15.00*Train.Engines.Speed/80.0))*1e-3 + self.P1 = (self.IR1^2)*self.R1 + self.P2 = (self.IR2^2)*self.R2 + self.T1 = (self.T1 + self.P1*K*dT - (self.T1-25)*H*dT) + self.T2 = (self.T2 + self.P2*K*dT - (self.T2-25)*H*dT) + self.Overheat1 = math.min(1-1e-12, + self.Overheat1 + math.max(0,(math.max(0,self.T1-750.0)/400.0)^2)*dT ) + self.Overheat2 = math.min(1-1e-12, + self.Overheat2 + math.max(0,(math.max(0,self.T2-750.0)/400.0)^2)*dT ) + + -- Energy consumption + self.ElectricEnergyUsed = self.ElectricEnergyUsed + math.max(0,self.EnergyChange)*dT + self.ElectricEnergyDissipated = self.ElectricEnergyDissipated + math.max(0,-self.EnergyChange)*dT + --print(self.EnergyChange) +end + + + + +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:SolvePS(Train) + -- Calculate total resistance of the entire series circuit + local Rtotal = self.Ranchor13 + self.Ranchor24 + self.Rstator13 + self.Rstator24 + + self.R1 + self.R2 + self.R3 + self.ExtraResistanceLK5 + local CircuitClosed = (self.Power750V*Train.LK1.Value > 0) and 1 or 0 + + -- Calculate total current + self.Utotal = (self.Power750V - Train.Engines.E13 - Train.Engines.E24)*Train.LK1.Value + self.Itotal = (self.Utotal / Rtotal)*CircuitClosed*(Train.BV and Train.BV.State or 1) + + -- Total resistance (for induction RL circuit) + self.R13 = Rtotal + self.R24 = Rtotal + + -- Calculate everything else + self.I13 = self.Itotal + self.I24 = self.Itotal + self.U13 = self.Utotal*(1/2) + self.U24 = self.Utotal*(1/2) + + -- Energy consumption + self.EnergyChange = math.abs((self.Itotal^2)*Rtotal) +end + +function TRAIN_SYSTEM:SolvePP(Train,inTransition) + -- Temporary hack for transition to parallel circuits + local extraR = 0.00 --inTransition and 0.909 or 0.00 + + -- Calculate total resistance of each branch + local R1 = self.Ranchor13 + self.Rstator13 + self.R1 + extraR + self.ExtraResistanceLK5 + local R2 = self.Ranchor24 + self.Rstator24 + self.R2 + extraR + self.ExtraResistanceLK5 + local R3 = 0 + local CircuitClosed = (self.Power750V*Train.LK1.Value > 0) and 1 or 0 + + -- Main circuit parameters + local V = self.Power750V*Train.LK1.Value + local E1 = Train.Engines.E13 + local E2 = Train.Engines.E24 + + -- Calculate current through engines 13, 24 + self.I13 = -((E1*R2 + E1*R3 - E2*R3 - R2*V)/(R1*R2 + R1*R3 + R2*R3))*CircuitClosed*(Train.BV and Train.BV.State or 1) + self.I24 = -((E2*R1 - E1*R3 + E2*R3 - R1*V)/(R1*R2 + R1*R3 + R2*R3))*CircuitClosed*(Train.BV and Train.BV.State or 1) + + -- Total resistance (for induction RL circuit) + self.R13 = R1 + self.R24 = R2 + + -- Calculate everything else + self.U13 = self.I13*R1 + self.U24 = self.I24*R2 + self.Utotal = (self.U13 + self.U24)/2 + self.Itotal = self.I13 + self.I24 + + -- Energy consumption + self.EnergyChange = math.abs((self.I13^2)*R1) + math.abs((self.I24^2)*R2) +end + +function TRAIN_SYSTEM:SolvePT(Train) + -- Winding resistances + local R1 = self.Ranchor13 + self.Rstator13 + local R2 = self.Ranchor24 + self.Rstator24 + -- Total resistance of the entire braking rheostat + local R3 = self.R1 + self.R2 + self.R3 + self.ExtraResistanceLK2 + + -- Main circuit parameters + local V = self.Power750V*Train.LK1.Value + local E1 = Train.Engines.E13 + local E2 = Train.Engines.E24 + + -- Calculate current through engines 13, 24 + self.I13 = -((E1*R2 + E1*R3 - E2*R3 - R2*V)/(R1*R2 + R1*R3 + R2*R3))*(Train.BV and Train.BV.State or 1) + self.I24 = -((E2*R1 - E1*R3 + E2*R3 - R1*V)/(R1*R2 + R1*R3 + R2*R3))*(Train.BV and Train.BV.State or 1) + + -- Total resistance (for induction RL circuit) + self.R13 = R3+((R1^-1 + R2^-1)^-1) + self.R24 = R3+((R1^-1 + R2^-1)^-1) + -- Calculate everything else + self.U13 = self.I13*R1 + self.U24 = self.I24*R2 + self.Utotal = (self.U13 + self.U24)/2 + self.Itotal = self.I13 + self.I24 + + -- Energy consumption + self.EnergyChange = -math.abs(((0.5*self.Itotal)^2)*self.R13) +end diff --git a/lua/metrostroi/systems/_obsolete/sys_81_502_upo.lua b/lua/metrostroi/systems/_obsolete/sys_81_502_upo.lua new file mode 100644 index 0000000..7fb2400 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_81_502_upo.lua @@ -0,0 +1,144 @@ +-------------------------------------------------------------------------------- +-- UPO Announcer system for 81-502 +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_502_UPO") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.Line = 1 + self.Path = false + self.Station = 1 + self.Arrived = true + self.Selected = 0 + self.LineEnabled = false + if math.Rand then + self.Buzz = math.random() > 0.7 and 2 or math.random() > 0.7 and 1 + self.Clicks = math.random() > 0.7 + end + + self.LineOut = 0 +end + +function TRAIN_SYSTEM:Outputs() + return {"LineOut"} +end + +function TRAIN_SYSTEM:Inputs() + return {} +end + +if TURBOSTROI then return end + +function TRAIN_SYSTEM:TriggerInput(name, value) +end + +function TRAIN_SYSTEM:AnnQueue(msg) + local Announcer = self.Train.Announcer + if msg and type(msg) ~= "table" then + Announcer:Queue{msg} + else + Announcer:Queue(msg) + end +end + +function TRAIN_SYSTEM:Play(dep) + local tbl = Metrostroi.UPOSetup + if not tbl then return end + local stbl = tbl[self.Station] + local path = self.Path and 2 or 1 + if not stbl or dep and not stbl.dep or not dep and not stbl.arr and not stbl.arrlast then return end + if dep and stbl.dep and stbl.dep[path] then + if self.Buzz then self:AnnQueue{"buzz_start_upo",self.Buzz} else self:AnnQueue("buzz_end_upo") end + if self.Clicks then self:AnnQueue("click1") end + self:AnnQueue(math.Rand(0.0,0.2)) + if self.Noise then self:AnnQueue{"noise_start",self.Noise} else self:AnnQueue("noise_end") end + self:AnnQueue{math.Rand(0.0,0.2), stbl.tone or "tone"} + self:AnnQueue(stbl.dep[path]) + self:AnnQueue{math.Rand(0.1,0.4),"noise_end","buzz_end_upo"} + if self.Clicks then self:AnnQueue("click2") end + elseif not dep then + local msg,lastst + if stbl.arr then msg = stbl.arr[path] end + + if not msg and stbl.arrlast then + msg = stbl.arrlast[path] + lastst = true + end + if msg then + if self.Buzz then self:AnnQueue{"buzz_start_upo",self.Buzz} else self:AnnQueue("buzz_end_upo") end + if self.Clicks then self:AnnQueue("click1") end + self:AnnQueue(math.Rand(0.1,0.3)) + if self.Noise then self:AnnQueue{"noise_start",self.Noise} else self:AnnQueue("noise_end") end + self:AnnQueue{math.Rand(0.1,0.3), stbl.tone or "tone"} + if lastst then self:AnnQueue{-1} end + self:AnnQueue(msg) + self:AnnQueue{math.Rand(0.1,0.4),"noise_end","buzz_end_upo"} + if self.Clicks then self:AnnQueue("click2") end + end + end +end + +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local Power = Train.Panel.V1 > 0.5 + local tbl = Metrostroi.UPOSetup + if not tbl then + self.State = false + + return + end + --local KRUEnabled = Train.KRU and Train.KRU["14/1-B3"] > 0 + --local RVForward = (Train.KV["D4-15"] > 0 or KRUEnabled) + local UPOWork = Train.Panel.UPOPower>0 + + --self.LastStationName = stbl[self.Line][self.Path and self.StartStation or self.EndStation][2] + if UPOWork then + local path = Train:ReadCell(49170) --Metrostroi.PathConverter[self.Train:ReadCell(65510)] or 0 + self.Path = path == 2 + local station = Train:ReadCell(49169) + local stbl + local distance = math.min(3072, self.Train:ReadCell(49165)) + --Find my station + self.Station = nil + for i2, v in ipairs(tbl) do + if v[1] == station then + stbl = v + self.Station = i2 + break + end + end + --local stbl = tbl[self.Line] and tbl[self.Line][self.Station] + local dist = stbl and stbl.dist or 75 + --print(self.Path,stbl.arr[self.Path and 2 or 1][3],self.Path and 2 or 1) + if station ~= self.CurrentStation and distance < dist and self.UPOArrived == nil then + self.UPOArrived = true + self.CurrentStation = station + self.Noise = stbl and stbl.noise or 0 + if stbl then + self:Play(false) + end + end + if self.UPOArrived and self.AnnouncerPlay then + self.UPOArrived = false + if stbl then + self:Play(true) + if Train.PUAV then Train.PUAV.KSZDRing = true end + end + end + + if self.UPOArrived == false and Train.Speed > 0.1 then + self.UPOArrived = nil + end + if distance < 0 or distance > dist then + if #Train.Announcer.Schedule > 0 then + Train.Announcer:Reset() + --Train.Announcer:Queue{"click2"} + --Train:WriteTrainWire(47, 0) + end + if self.UPOArrived ~= nil then self.UPOArrived = nil end + if self.CurrentStation then self.CurrentStation = nil end + end + end + local Ann = Train.Announcer + self.LineOut = (Ann.AnnTable=="AnnouncementsUPO" and Ann.AnnounceTimer) and 1 or 0 +end \ No newline at end of file diff --git a/lua/metrostroi/systems/_obsolete/sys_81_508_electric.lua b/lua/metrostroi/systems/_obsolete/sys_81_508_electric.lua new file mode 100644 index 0000000..70aecec --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_81_508_electric.lua @@ -0,0 +1,30 @@ +-------------------------------------------------------------------------------- +-- ЭлектричеÑкие цепи 81-508 и 81-509 +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_508_Electric") + +function TRAIN_SYSTEM:Initialize() + self.TrainSolver = "E" + self.ThyristorController = false + + -- Load all functions from base + Metrostroi.BaseSystems["Electric"].Initialize(self) + for k,v in pairs(Metrostroi.BaseSystems["Electric"]) do + if type(v) == "function" then + self[k] = v + end + end +end + +function TRAIN_SYSTEM:Inputs(...) + return Metrostroi.BaseSystems["Electric"].Inputs(self,...) +end +function TRAIN_SYSTEM:Outputs(...) + return Metrostroi.BaseSystems["Electric"].Outputs(self,...) +end +function TRAIN_SYSTEM:TriggerInput(...) + return Metrostroi.BaseSystems["Electric"].TriggerInput(self,...) +end +function TRAIN_SYSTEM:Think(...) + return Metrostroi.BaseSystems["Electric"].Think(self,...) +end \ No newline at end of file diff --git a/lua/metrostroi/systems/_obsolete/sys_81_508_panel.lua b/lua/metrostroi/systems/_obsolete/sys_81_508_panel.lua new file mode 100644 index 0000000..28a8668 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_81_508_panel.lua @@ -0,0 +1,111 @@ +-------------------------------------------------------------------------------- +-- Панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ E +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_508_Panel") + +function TRAIN_SYSTEM:Initialize() + -- Выключатель батареи (ВБ) + self.Train:LoadSystem("VB","Relay","Switch", {bass = true}) + + -- Buttons on the panel + self.Train:LoadSystem("DoorSelect","Relay","Switch", {bass = true, normally_closed = false }) + self.Train:LoadSystem("DIPon","Relay","Switch", {bass = true}) + self.Train:LoadSystem("DIPoff","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VozvratRP","Relay","Switch", {bass = true}) + self.Train:LoadSystem("RezMK","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU1","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VAH","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VAD","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VUS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VUD1","Relay","Switch", {bass = true }) + self.Train:LoadSystem("VUD2","Relay","Switch", { normally_closed = true, bass = true }) -- Doors close + self.Train:LoadSystem("VUD2L","Relay","Switch", { bass = true }) -- Doors close + self.Train:LoadSystem("VDL","Relay","Switch", {bass = true}) -- Doors left open + self.Train:LoadSystem("KDL","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KDP","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KRZD","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KSN","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VZ1","Relay","Switch", {bass = true}) + self.Train:LoadSystem("OtklAVU","Relay","Switch", {bass = true}) + self.Train:LoadSystem("ARS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("ALS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KVT","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KRP","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KRR","Relay","Switch", {bass = true}) + --self.Train:LoadSystem("KB","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("KSD","Relay","Switch", {bass = true}) + self.Train:LoadSystem("DP","Relay","Switch", {bass = true, normally_closed = true}) + + + + self.Train:LoadSystem("Custom1","Relay","Switch",{bass = true}) + self.Train:LoadSystem("Custom2","Relay","Switch",{bass = true}) + self.Train:LoadSystem("Custom3","Relay","Switch",{bass = true}) + self.Train:LoadSystem("R_UNch","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_ZS","Relay","Switch", {av = true}) + self.Train:LoadSystem("R_G","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_Radio","Relay","Switch", {av = true}) + self.Train:LoadSystem("R_Program1","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_Program2","Relay","Switch", {bass = true}) + self.Train:LoadSystem("RC1","Relay","Switch",{bass = true, normally_closed = true }) + + -- Педаль бдительноÑти (ПБ) + self.Train:LoadSystem("PB","Relay","Switch", {bass = true}) + + -- ÐвтоматичеÑкие выключатели (ÐÐ’) + self.Train:LoadSystem("VU3","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VU1","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VU2","Relay","Switch", {bass = true, normally_closed = true}) + self.Train:LoadSystem("AV8B","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VU","Relay","Switch", {bass = true, normally_closed = false}) + self.Train:LoadSystem("KDLK","Relay","Switch", {bass = true, normally_closed = true }) + self.Train:LoadSystem("VDLK","Relay","Switch", {bass = true, normally_closed = true }) + self.Train:LoadSystem("KDPK","Relay","Switch", {bass = true, normally_closed = true }) + self.Train:LoadSystem("KAHK","Relay","Switch", {bass = true, normally_closed = true }) + self.Train:LoadSystem("L_3","Relay","Switch",{bass = true}) + + self.Train:LoadSystem("RST","Relay","Switch", {bass = true}) + self.Train:LoadSystem("IGLA","Relay","Switch", {bass = true}) + + -- Map of AV switches to indexes on panel + self:InitializeAVMap() + + self.CabinLight = 0 + self.HeadLights1 = 0 + self.HeadLights2 = 0 + self.HeadLights3 = 0 + self.RedLightLeft = 0 + self.RedLightRight = 0 + self.EmergencyLight = 0 + self.GreenRP = 0 + self.RedRP = 0 + self.KUP = 0 + self.V1 = 0 + self.AVU = 0 + self.Ring = 0 + self.SD = 0 + self.TrainBrakes = 0 + self.TrainRP = 0 + self.TrainDoors = 0 +end + +function TRAIN_SYSTEM:ClientInitialize() + self:InitializeAVMap() +end + +function TRAIN_SYSTEM:Outputs() + return { "CabinLight", "HeadLights1", "HeadLights2", "HeadLights3", + "RedLightLeft", "RedLightRight", "EmergencyLight", + "GreenRP", "RedRP", "KUP", "V1", "AVU", "Ring", "SD", + "TrainBrakes", "TrainRP", "TrainDoors" } +end + +function TRAIN_SYSTEM:InitializeAVMap() + self.AVMap = { + 61,55,54,56,27,21,10,53,43,45,42,41, + "VU",64,63,50,51,23,14,75, 1, 2, 3,17, + 62,29, 5, 6, 8,20,25,22,30,39,44,80, + 65,"L_5",24,32,31,16,"KSD",12, 7, 9,46,47 + } +end diff --git a/lua/metrostroi/systems/_obsolete/sys_81_701_electric.lua b/lua/metrostroi/systems/_obsolete/sys_81_701_electric.lua new file mode 100644 index 0000000..d122ab5 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_81_701_electric.lua @@ -0,0 +1,30 @@ +-------------------------------------------------------------------------------- +-- ЭлектричеÑкие цепи 81-701 +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_701_Electric") + +function TRAIN_SYSTEM:Initialize() + self.TrainSolver = "E" + self.ThyristorController = true + + -- Load all functions from base + Metrostroi.BaseSystems["Electric"].Initialize(self) + for k,v in pairs(Metrostroi.BaseSystems["Electric"]) do + if type(v) == "function" then + self[k] = v + end + end +end + +function TRAIN_SYSTEM:Inputs(...) + return Metrostroi.BaseSystems["Electric"].Inputs(self,...) +end +function TRAIN_SYSTEM:Outputs(...) + return Metrostroi.BaseSystems["Electric"].Outputs(self,...) +end +function TRAIN_SYSTEM:TriggerInput(...) + return Metrostroi.BaseSystems["Electric"].TriggerInput(self,...) +end +function TRAIN_SYSTEM:Think(...) + return Metrostroi.BaseSystems["Electric"].Think(self,...) +end \ No newline at end of file diff --git a/lua/metrostroi/systems/_obsolete/sys_81_704_electric.lua b/lua/metrostroi/systems/_obsolete/sys_81_704_electric.lua new file mode 100644 index 0000000..4f318fa --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_81_704_electric.lua @@ -0,0 +1,30 @@ +-------------------------------------------------------------------------------- +-- ЭлектричеÑкие цепи 81-704 +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_704_Electric") + +function TRAIN_SYSTEM:Initialize() + self.TrainSolver = "81_704" + self.ThyristorController = true + + -- Load all functions from base + Metrostroi.BaseSystems["Electric"].Initialize(self) + for k,v in pairs(Metrostroi.BaseSystems["Electric"]) do + if type(v) == "function" then + self[k] = v + end + end +end + +function TRAIN_SYSTEM:Inputs(...) + return Metrostroi.BaseSystems["Electric"].Inputs(self,...) +end +function TRAIN_SYSTEM:Outputs(...) + return Metrostroi.BaseSystems["Electric"].Outputs(self,...) +end +function TRAIN_SYSTEM:TriggerInput(...) + return Metrostroi.BaseSystems["Electric"].TriggerInput(self,...) +end +function TRAIN_SYSTEM:Think(...) + return Metrostroi.BaseSystems["Electric"].Think(self,...) +end \ No newline at end of file diff --git a/lua/metrostroi/systems/_obsolete/sys_81_704_panel.lua b/lua/metrostroi/systems/_obsolete/sys_81_704_panel.lua new file mode 100644 index 0000000..d320899 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_81_704_panel.lua @@ -0,0 +1,111 @@ +-------------------------------------------------------------------------------- +-- Панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Eм +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_704_Panel") + +function TRAIN_SYSTEM:Initialize() + -- Выключатель батареи (ВБ) + self.Train:LoadSystem("VB","Relay","Switch", {av3 = true}) + self.Train:LoadSystem("VBA","Relay","Switch", {av3 = true}) + + -- Buttons on the panel + --self.Train:LoadSystem("KVT","Relay","Switch", {bass = true}) + --self.Train:LoadSystem("VZP","Relay","Switch", {bass = true}) + --self.Train:LoadSystem("VZD","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KRZD","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("KDL","Relay","Switch", {bass = true}) + self.Train:LoadSystem("DIPon","Relay","Switch", {bass = true}) + self.Train:LoadSystem("DIPoff","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VozvratRP","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KSN","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KDP","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("KU1","Relay","Switch", {bass = true}) + self.Train:LoadSystem("Ring","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VUS","Relay","Switch", {bass = true}) + --self.Train:LoadSystem("KAK","Relay","Switch", {bass = true}) + --self.Train:LoadSystem("VAutodrive","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VUD1","Relay","Switch", {bass = true }) + + self.Train:LoadSystem("RezMK","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("VUD2","Relay","Switch", { normally_closed = true, bass = true }) -- Doors close + self.Train:LoadSystem("VUD2L","Relay","Switch", { bass = true }) -- Doors close + self.Train:LoadSystem("VDL","Relay","Switch", {bass = true}) -- Doors left open + + self.Train:LoadSystem("VRU","Relay","Switch", {av = true}) + self.Train:LoadSystem("VAH","Relay","Switch", {av = true}) + self.Train:LoadSystem("VAD","Relay","Switch", {av = true}) + self.Train:LoadSystem("OVT","Relay","Switch", {av = true, normally_closed = true}) + self.Train:LoadSystem("KSD","Relay","Switch", {av = true}) + self.Train:LoadSystem("DP","Relay","Switch", {av = true, normally_closed = true}) + self.Train:LoadSystem("VKF","Relay","Switch", {av = true}) + + --self.Train:LoadSystem("KSAUP.","Relay","Switch", {av = true}) + self.Train:LoadSystem("OtklAVU","Relay","Switch", {av = true}) + self.Train:LoadSystem("KRP","Relay","Switch", {bass = true}) + + --self.Train:LoadSystem("RC1","Relay","Switch",{ bass = true,normally_closed = true }) + + --self.Train:LoadSystem("Radio13","Relay","Switch", {bass = true}) + --self.Train:LoadSystem("ARS13","Relay","Switch", {bass = true}) + + -- Педаль бдительноÑти (ПБ) + --self.Train:LoadSystem("PB","Relay","Switch", {bass = true}) + + -- ÐвтоматичеÑкие выключатели (ÐÐ’) + self.Train:LoadSystem("VU3","Relay","Switch", {av = true}) + self.Train:LoadSystem("VU1","Relay","Switch", {av = true}) + self.Train:LoadSystem("VU2","Relay","Switch", {av = true}) + self.Train:LoadSystem("AV8B","Relay","Switch", {mainav = true}) + self.Train:LoadSystem("VU","Relay","Switch", {normally_closed = false, av = true}) + --self.Train:LoadSystem("KDLK","Relay","Switch", { normally_closed = true }) + --self.Train:LoadSystem("VDLK","Relay","Switch", { normally_closed = true }) + --self.Train:LoadSystem("KDPK","Relay","Switch", { normally_closed = true }) + --self.Train:LoadSystem("KAHK","Relay","Switch", { normally_closed = true }) + + --self.Train:LoadSystem("RST","Relay","Switch", {normally_closed = true, av = true}) + --self.Train:LoadSystem("VSOSD","Relay","Switch", {av = true, normally_closed = true}) + + -- Map of AV switches to indexes on panel + self:InitializeAVMap() + + self.CabinLight = 0 + self.HeadLights1 = 0 + self.HeadLights2 = 0 + self.HeadLights3 = 0 + self.RedLightLeft = 0 + self.RedLightRight = 0 + self.EmergencyLight = 0 + self.GreenRP = 0 + self.RedRP = 0 + self.KUP = 0 + self.V1 = 0 + self.AVU = 0 + self.Ring = 0 + self.SD = 0 + self.TrainBrakes = 0 + self.TrainRP = 0 + self.TrainDoors = 0 +end + +function TRAIN_SYSTEM:ClientInitialize() + self:InitializeAVMap() +end + +function TRAIN_SYSTEM:Outputs() + return { "CabinLight", "HeadLights1", "HeadLights2", "HeadLights3", + "RedLightLeft", "RedLightRight", "EmergencyLight", + "GreenRP", "RedRP", "KUP", "V1", "AVU", "Ring", "SD", + "TrainBrakes", "TrainRP", "TrainDoors" } +end + +function TRAIN_SYSTEM:InitializeAVMap() + self.AVMap = { + 61,55,54,56,27,21,10,53,43,45,42,41, + "VU",64,63,50,51,23,14,75, 1, 2, 3,17, + 62,29, 5, 6, 8,20,25,22,30,39,44,80, + 65,"L_5",24,32,31,16,13,12, 7, 9,46,47 + } +end \ No newline at end of file diff --git a/lua/metrostroi/systems/_obsolete/sys_81_705_electric.lua b/lua/metrostroi/systems/_obsolete/sys_81_705_electric.lua new file mode 100644 index 0000000..6db74cb --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_81_705_electric.lua @@ -0,0 +1,30 @@ +-------------------------------------------------------------------------------- +-- ЭлектричеÑкие цепи 81-705 +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_705_Electric") + +function TRAIN_SYSTEM:Initialize() + self.TrainSolver = "Ema508" + self.ThyristorController = true + + -- Load all functions from base + Metrostroi.BaseSystems["Electric"].Initialize(self) + for k,v in pairs(Metrostroi.BaseSystems["Electric"]) do + if type(v) == "function" then + self[k] = v + end + end +end + +function TRAIN_SYSTEM:Inputs(...) + return Metrostroi.BaseSystems["Electric"].Inputs(self,...) +end +function TRAIN_SYSTEM:Outputs(...) + return Metrostroi.BaseSystems["Electric"].Outputs(self,...) +end +function TRAIN_SYSTEM:TriggerInput(...) + return Metrostroi.BaseSystems["Electric"].TriggerInput(self,...) +end +function TRAIN_SYSTEM:Think(...) + return Metrostroi.BaseSystems["Electric"].Think(self,...) +end \ No newline at end of file diff --git a/lua/metrostroi/systems/_obsolete/sys_81_705_panel.lua b/lua/metrostroi/systems/_obsolete/sys_81_705_panel.lua new file mode 100644 index 0000000..5a6d006 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_81_705_panel.lua @@ -0,0 +1,113 @@ +-------------------------------------------------------------------------------- +-- Панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Eма +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_705_Panel") + +function TRAIN_SYSTEM:Initialize() + -- Выключатель батареи (ВБ) + self.Train:LoadSystem("VB","Relay","Switch", {av3 = true}) + -- Выключатель батареи автоведениÑ(ВБÐ) + self.Train:LoadSystem("VBA","Relay","VB-11", {av3 = true}) + + -- Buttons on the panel + self.Train:LoadSystem("KVT","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VZP","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VZD","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KRZD","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("KDL","Relay","Switch", {bass = true}) + self.Train:LoadSystem("DIPon","Relay","Switch", {bass = true}) + self.Train:LoadSystem("DIPoff","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VozvratRP","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KSN","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KDP","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("KU1","Relay","Switch", {bass = true}) + self.Train:LoadSystem("Ring","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VUS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KAK","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VAutodrive","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VUD1","Relay","Switch", {bass = true }) + + self.Train:LoadSystem("RezMK","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("VUD2","Relay","Switch", { normally_closed = true, bass = true }) -- Doors close + self.Train:LoadSystem("VUD2L","Relay","Switch", { bass = true }) -- Doors close + self.Train:LoadSystem("VDL","Relay","Switch", {bass = true}) -- Doors left open + + self.Train:LoadSystem("VRU","Relay","Switch", {av = true}) + self.Train:LoadSystem("VAH","Relay","Switch", {av = true}) + self.Train:LoadSystem("VAD","Relay","Switch", {av = true}) + self.Train:LoadSystem("OVT","Relay","Switch", {av = true, normally_closed = true}) + self.Train:LoadSystem("KSD","Relay","Switch", {av = true}) + self.Train:LoadSystem("DP","Relay","Switch", {av = true, normally_closed = true}) + self.Train:LoadSystem("VKF","Relay","Switch", {av = true}) + + --self.Train:LoadSystem("KSAUP.","Relay","Switch", {av = true}) + self.Train:LoadSystem("OtklAVU","Relay","Switch", {av = true}) + self.Train:LoadSystem("KRP","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("RC1","Relay","Switch",{rcr = true, normally_closed = true }) + + --self.Train:LoadSystem("Radio13","Relay","Switch", {bass = true}) + --self.Train:LoadSystem("ARS13","Relay","Switch", {bass = true}) + + -- Педаль бдительноÑти (ПБ) + self.Train:LoadSystem("PB","Relay","Switch", {bass = true}) + + -- ÐвтоматичеÑкие выключатели (ÐÐ’) + self.Train:LoadSystem("VU3","Relay","Switch", {av = true}) + self.Train:LoadSystem("VU1","Relay","Switch", {av = true}) + self.Train:LoadSystem("VU2","Relay","Switch", {av = true}) + self.Train:LoadSystem("AV8B","Relay","Switch", {mainav = true}) + self.Train:LoadSystem("VU","Relay","Switch", {normally_closed = true, av = true}) + self.Train:LoadSystem("KDLK","Relay","Switch", { normally_closed = true }) + self.Train:LoadSystem("VDLK","Relay","Switch", { normally_closed = true }) + self.Train:LoadSystem("KDPK","Relay","Switch", { normally_closed = true }) + self.Train:LoadSystem("KAHK","Relay","Switch", { normally_closed = true }) + self.Train:LoadSystem("L_3","Relay","Switch",{bass = true}) + + self.Train:LoadSystem("RST","Relay","Switch", {normally_closed = true, av = true}) + self.Train:LoadSystem("VSOSD","Relay","Switch", {av = true, normally_closed = true}) + + -- Map of AV switches to indexes on panel + self:InitializeAVMap() + + self.CabinLight = 0 + self.HeadLights1 = 0 + self.HeadLights2 = 0 + self.HeadLights3 = 0 + self.RedLightLeft = 0 + self.RedLightRight = 0 + self.EmergencyLight = 0 + self.GreenRP = 0 + self.RedRP = 0 + self.KUP = 0 + self.V1 = 0 + self.AVU = 0 + self.Ring = 0 + self.SD = 0 + self.TrainBrakes = 0 + self.TrainRP = 0 + self.TrainDoors = 0 +end + +function TRAIN_SYSTEM:ClientInitialize() + self:InitializeAVMap() +end + +function TRAIN_SYSTEM:Outputs() + return { "CabinLight", "HeadLights1", "HeadLights2", "HeadLights3", + "RedLightLeft", "RedLightRight", "EmergencyLight", + "GreenRP", "RedRP", "KUP", "V1", "AVU", "Ring", "SD", + "TrainBrakes", "TrainRP", "TrainDoors" } +end + +function TRAIN_SYSTEM:InitializeAVMap() + self.AVMap = { + 61,55,54,56,27,21,10,53,43,45,42,41, + "VU",64,63,50,51,23,14,75, 1, 2, 3,17, + 62,29, 5, 6, 8,20,25,22,30,39,44,80, + 65,"L_5",24,32,31,16,13,12, 7, 9,46,47 + } +end \ No newline at end of file diff --git a/lua/metrostroi/systems/_obsolete/sys_81_707_electric.lua b/lua/metrostroi/systems/_obsolete/sys_81_707_electric.lua new file mode 100644 index 0000000..4755700 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_81_707_electric.lua @@ -0,0 +1,30 @@ +-------------------------------------------------------------------------------- +-- ЭлектричеÑкие цепи 81-704-81-710 (Е, Еж, Ем) +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_707_Electric") + +function TRAIN_SYSTEM:Initialize() + self.TrainSolver = "E" + self.ThyristorController = true + + -- Load all functions from base + Metrostroi.BaseSystems["Electric"].Initialize(self) + for k,v in pairs(Metrostroi.BaseSystems["Electric"]) do + if type(v) == "function" then + self[k] = v + end + end +end + +function TRAIN_SYSTEM:Inputs(...) + return Metrostroi.BaseSystems["Electric"].Inputs(self,...) +end +function TRAIN_SYSTEM:Outputs(...) + return Metrostroi.BaseSystems["Electric"].Outputs(self,...) +end +function TRAIN_SYSTEM:TriggerInput(...) + return Metrostroi.BaseSystems["Electric"].TriggerInput(self,...) +end +function TRAIN_SYSTEM:Think(...) + return Metrostroi.BaseSystems["Electric"].Think(self,...) +end \ No newline at end of file diff --git a/lua/metrostroi/systems/_obsolete/sys_81_708_panel.lua b/lua/metrostroi/systems/_obsolete/sys_81_708_panel.lua new file mode 100644 index 0000000..bb248bc --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_81_708_panel.lua @@ -0,0 +1,92 @@ +-------------------------------------------------------------------------------- +-- Панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ E +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_708_Panel") + +function TRAIN_SYSTEM:Initialize() + -- Выключатель батареи (ВБ) + self.Train:LoadSystem("VB","Relay","Switch", {av3 = true}) + + -- Buttons on the panel + self.Train:LoadSystem("DIPon","Relay","Switch", {bass = true}) + self.Train:LoadSystem("DIPoff","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VozvratRP","Relay","Switch", {bass = true}) + self.Train:LoadSystem("RezMK","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU1","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VUS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VUD1","Relay","Switch", {bass = true }) + self.Train:LoadSystem("VUD2","Relay","Switch", { normally_closed = true, bass = true }) -- Doors close + self.Train:LoadSystem("VUD2L","Relay","Switch", { bass = true }) -- Doors close + self.Train:LoadSystem("VDL","Relay","Switch", {bass = true}) -- Doors left open + self.Train:LoadSystem("KDL","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KDP","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KRZD","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KSN","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VZ1","Relay","Switch", {bass = true}) + self.Train:LoadSystem("OtklAVU","Relay","Switch", {bass = true}) + self.Train:LoadSystem("ARS","Relay","Switch", {av = true}) + self.Train:LoadSystem("ALS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KVT","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KRP","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KRR","Relay","Switch", {bass = true}) + --self.Train:LoadSystem("KB","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("KSD","Relay","Switch", {bass = true}) + self.Train:LoadSystem("DP","Relay","Switch", {av = true, normally_closed = true}) + + -- ÐвтоматичеÑкие выключатели (ÐÐ’) + self.Train:LoadSystem("VU3","Relay","Switch", {av = true}) + + self.Train:LoadSystem("VU1","Relay","Switch", {av = true}) + self.Train:LoadSystem("VU2","Relay","Switch", {av = true, normally_closed = true}) + self.Train:LoadSystem("AV8B","Relay","Switch", {mainav = true}) + self.Train:LoadSystem("VU","Relay","Switch", {av = true, normally_closed = false}) + self.Train:LoadSystem("KDLK","Relay","Switch", { normally_closed = true }) + self.Train:LoadSystem("VDLK","Relay","Switch", { normally_closed = true }) + self.Train:LoadSystem("KDPK","Relay","Switch", { normally_closed = true }) + self.Train:LoadSystem("KAHK","Relay","Switch", { normally_closed = true }) + self.Train:LoadSystem("L_3","Relay","Switch",{bass = true}) + + self.Train:LoadSystem("RST","Relay","Switch", {av = true}) + + -- Map of AV switches to indexes on panel + self:InitializeAVMap() + + self.CabinLight = 0 + self.HeadLights1 = 0 + self.HeadLights2 = 0 + self.HeadLights3 = 0 + self.RedLightLeft = 0 + self.RedLightRight = 0 + self.EmergencyLight = 0 + self.GreenRP = 0 + self.RedRP = 0 + self.KUP = 0 + self.V1 = 0 + self.AVU = 0 + self.Ring = 0 + self.SD = 0 + self.TrainBrakes = 0 + self.TrainRP = 0 + self.TrainDoors = 0 +end + +function TRAIN_SYSTEM:ClientInitialize() + self:InitializeAVMap() +end + +function TRAIN_SYSTEM:Outputs() + return { "CabinLight", "HeadLights1", "HeadLights2", "HeadLights3", + "RedLightLeft", "RedLightRight", "EmergencyLight", + "GreenRP", "RedRP", "KUP", "V1", "AVU", "Ring", "SD", + "TrainBrakes", "TrainRP", "TrainDoors" } +end + +function TRAIN_SYSTEM:InitializeAVMap() + self.AVMap = { + 61,55,54,56,27,21,10,53,43,45,42,41, + "VU",64,63,50,51,23,14,75, 1, 2, 3,17, + 62,29, 5, 6, 8,20,25,22,30,39,44,80, + 65,"L_5",24,32,31,16,"KSD",12, 7, 9,46,47 + } +end diff --git a/lua/metrostroi/systems/_obsolete/sys_81_710ru1_electric.lua b/lua/metrostroi/systems/_obsolete/sys_81_710ru1_electric.lua new file mode 100644 index 0000000..6fcfc2e --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_81_710ru1_electric.lua @@ -0,0 +1,30 @@ +-------------------------------------------------------------------------------- +-- ЭлектричеÑкие цепи 81-704-81-710 (Е, Еж, Ем) +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_710RU1_Electric") + +function TRAIN_SYSTEM:Initialize() + self.TrainSolver = "Ezh3RU1" + self.ThyristorController = true + + -- Load all functions from base + Metrostroi.BaseSystems["Electric"].Initialize(self) + for k,v in pairs(Metrostroi.BaseSystems["Electric"]) do + if type(v) == "function" then + self[k] = v + end + end +end + +function TRAIN_SYSTEM:Inputs(...) + return Metrostroi.BaseSystems["Electric"].Inputs(self,...) +end +function TRAIN_SYSTEM:Outputs(...) + return Metrostroi.BaseSystems["Electric"].Outputs(self,...) +end +function TRAIN_SYSTEM:TriggerInput(...) + return Metrostroi.BaseSystems["Electric"].TriggerInput(self,...) +end +function TRAIN_SYSTEM:Think(...) + return Metrostroi.BaseSystems["Electric"].Think(self,...) +end diff --git a/lua/metrostroi/systems/_obsolete/sys_81_710ru1_panel.lua b/lua/metrostroi/systems/_obsolete/sys_81_710ru1_panel.lua new file mode 100644 index 0000000..08fcbfe --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_81_710ru1_panel.lua @@ -0,0 +1,146 @@ +-------------------------------------------------------------------------------- +-- Панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð•Ð¶3, Ем508Т, Ема +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_710RU1_Panel") + +function TRAIN_SYSTEM:Initialize() + -- Выключатель батареи (ВБ) + self.Train:LoadSystem("VB","Relay","VB-11", {bass = true}) + + -- Buttons on the panel + self.Train:LoadSystem("DIPon","Relay","Switch", {bass = true}) + self.Train:LoadSystem("DIPoff","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VozvratRP","Relay","Switch", {bass = true}) + self.Train:LoadSystem("RezMK","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VMK","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VAH","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VAD","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VUS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VUD1","Relay","Switch", {bass = true }) + self.Train:LoadSystem("VUD2","Relay","Switch", { normally_closed = true, bass = true }) -- Doors close + self.Train:LoadSystem("VDL","Relay","Switch", {bass = true}) -- Doors left open + self.Train:LoadSystem("KDL","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KDP","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KRZD","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KSN","Relay","Switch", {bass = true}) + self.Train:LoadSystem("OtklAVU","Relay","Switch", {bass = true}) + self.Train:LoadSystem("ARS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("ALS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KVT","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KB","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KRP","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("R_UNch","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_ZS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_G","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_Radio","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_VPR","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_Program1","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_Program2","Relay","Switch", {bass = true}) + self.Train:LoadSystem("RC1","Relay","Switch",{ normally_closed = true }) + + self.Train:LoadSystem("Radio13","Relay","Switch", {bass = true}) + self.Train:LoadSystem("ARS13","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("L_3","Relay","Switch", {bass = true}) + + -- Педаль бдительноÑти (ПБ) + self.Train:LoadSystem("PB","Relay","Switch", {bass = true}) + + -- ÐвтоматичеÑкие выключатели (ÐÐ’) + self.Train:LoadSystem("A1","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A2","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A3","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A5","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A6","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A7","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A8","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A9","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A10","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A12","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A13","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A14","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A16","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A17","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A20","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A21","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A22","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A23","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A24","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A25","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A27","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A29","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A30","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A31","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A32","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A39","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A41","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A42","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A43","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A44","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A45","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A46","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A47","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A50","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A51","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A53","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A54","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A55","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A56","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A61","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A62","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A63","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A64","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A65","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("A75","Relay","VA21-29",{ normally_closed = false, bass = true}) + self.Train:LoadSystem("A80","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("VU","Relay","VA21-29", {bass = true}) + self.Train:LoadSystem("KDLK","Relay","Switch", { normally_closed = true ,bass = true}) + self.Train:LoadSystem("VDLK","Relay","Switch", { normally_closed = true ,bass = true}) + self.Train:LoadSystem("KDPK","Relay","Switch", { normally_closed = true ,bass = true}) + self.Train:LoadSystem("KAHK","Relay","Switch", { normally_closed = true ,bass = true}) + + -- 81-717 special + self.Train:LoadSystem("BPSNon","Relay","Switch", { bass = true }) + + -- Map of AV switches to indexes on panel + self:InitializeAVMap() + + self.CabinLight = 0 + self.HeadLights1 = 0 + self.HeadLights2 = 0 + self.HeadLights3 = 0 + self.RedLightLeft = 0 + self.RedLightRight = 0 + self.EmergencyLight = 0 + self.GreenRP = 0 + self.RedRP = 0 + self.KUP = 0 + self.V1 = 0 + self.AVU = 0 + self.Ring = 0 + self.SD = 0 + self.TrainBrakes = 0 + self.TrainRP = 0 + self.TrainDoors = 0 +end + +function TRAIN_SYSTEM:ClientInitialize() + self:InitializeAVMap() +end + +function TRAIN_SYSTEM:Outputs() + return { "CabinLight", "HeadLights1", "HeadLights2", "HeadLights3", + "RedLightLeft", "RedLightRight", "EmergencyLight", + "GreenRP", "RedRP", "KUP", "V1", "AVU", "Ring", "SD", + "TrainBrakes", "TrainRP", "TrainDoors" } +end + +function TRAIN_SYSTEM:InitializeAVMap() + self.AVMap = { + 61,55,54,56,27,21,10,53,43,45,42,41, + "VU",64,63,50,51,23,14,75, 1, 2, 3,17, + 62,29, 5, 6, 8,20,25,22,30,39,44,80, + 65,"L_5",24,32,31,16,13,12, 7, 9,46,47 + } +end diff --git a/lua/metrostroi/systems/_obsolete/sys_81_717_kv_70AV.lua b/lua/metrostroi/systems/_obsolete/sys_81_717_kv_70AV.lua new file mode 100644 index 0000000..b50ebee --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_81_717_kv_70AV.lua @@ -0,0 +1,232 @@ +-------------------------------------------------------------------------------- +-- Кулачковый контроллер КВ-70 +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("KV_70_AV") + +function TRAIN_SYSTEM:Initialize() + self.Enabled = 1 + self.ControllerPosition = 0 + self.AutodrivePosition = 0 + self.ReverserPosition = 0 + self.RealControllerPosition = 0 + self.ChangeSpeed = 0.10 + + self.ReverserMatrix = { + {"D", "D1" }, + { 1, 0, 1 }, + {"10/4", "C3" }, + { 0, 0, 1 }, + {"10/4", "F1" }, + { 1, 1, 0 }, + {"D4", "15" }, + { 1, 0, 1 }, + {"D8", "15A" }, + { 0, 1, 0 }, + {"3M35", "4" }, + { 0, 0, 1 }, + {"10AK", "4" }, + { 1, 0, 0 }, + {"10AK", "5" }, + { 0, 0, 1 }, + {"FR1", "10" }, + { 1, 0, 1 }, + {"F7", "10" }, + { 1, 0, 1 }, + } + self.ControllerMatrix = { + {"10", "8" }, + { 1, 0, 0, 0, 0, 0, 0 }, + {"U2", "10AS"}, + { 1, 1, 1, 0, 1, 1, 1 }, + {"0", "0" }, + { 0, 0, 0, 1, 0, 0, 0 }, + {"10AK", "2" }, + { 1, 1, 0, 0, 0, 1, 1 }, + {"U2", "3" }, + { 0, 0, 0, 0, 0, 0, 1 }, + {"0", "0" }, + { 0, 0, 0, 1, 1, 1, 1 }, + {"10AS", "33"}, + { 0, 0, 0, 0, 1, 1, 1 }, + {"10AS", "33D"}, + { 0, 0, 0, 1, 1, 1, 1 }, + {"U2", "33G"}, + { 1, 1, 1, 0, 0, 0, 0 }, + {"U2", "20a"}, + { 0, 0, 0, 0, 1, 1, 1 }, + {"U2", "25"}, + { 0, 1, 0, 0, 0, 0, 0 }, + {"10AS", "U4"}, + { 0, 0, 0, 1, 0, 0, 0 }, + {"15A", "15B"}, + { 1, 1, 1, 1, 0, 0, 0 }, + {"U2", "20b"}, + { 1, 1, 1, 0, 0, 0, 0 }, + } + + -- Initialize contacts values + for i=1,#self.ReverserMatrix/2 do + local v = self.ReverserMatrix[i*2-1] + self[v[1].."-"..v[2]] = 0 + end + for i=1,#self.ControllerMatrix/2 do + local v = self.ControllerMatrix[i*2-1] + self[v[1].."-"..v[2]] = 0 + end +end + +function TRAIN_SYSTEM:Inputs() + return { "Enabled", "ControllerSet", "ReverserSet", + "ControllerUp","ControllerDown","ReverserUp","ReverserDown", + "SetX1", "SetX2", "SetX3", "Set0", "Set0Fast", "SetT1", "SetT1A", "SetT2", "ControllerUnlock", + "SetAutodrive" } +end + +function TRAIN_SYSTEM:Outputs() + return { "ControllerPosition","RealControllerPosition", "ReverserPosition", "10AS-33","10-8","D4-15","10AK-4","U2-25", "AutodrivePosition"} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + local prevReverserPosition = self.ReverserPosition + -- Change position + if name == "Type" then + self.Type = math.floor(value) + elseif name == "Enabled" then + self.Enabled = math.floor(value) + elseif name == "ControllerSet" then + if (self.Enabled ~= 0) and (self.ReverserPosition ~= 0) and (math.floor(value) ~= self.ControllerPosition) then + local prevControllerPosition = self.ControllerPosition + self.ControllerPosition = math.floor(value) + + -- Limit motion + if self.ControllerPosition > 3 then self.ControllerPosition = 3 end + if self.ControllerPosition < -3 then self.ControllerPosition = -3 end + end + elseif name == "ReverserSet" then + if (self.Enabled ~= 0) and (math.floor(value) ~= self.ReverserPosition) and self.ControllerPosition == 0 then + local prevReverserPosition = self.ReverserPosition + self.ReverserPosition = math.floor(value) + if self.ReverserPosition > 1 then self.ReverserPosition = 1 end + if self.ReverserPosition < -1 then self.ReverserPosition = -1 end + if prevReverserPosition ~= self.ReverserPosition then + if self.ReverserPosition == -1 then self.Train:PlayOnce("revers_0-b","cabin",1) end + if self.ReverserPosition == 0 then + if prevReverserPosition == -1 then + self.Train:PlayOnce("revers_b-0","cabin",1) + else + self.Train:PlayOnce("revers_f-0","cabin",1) + end + end + if self.ReverserPosition == 1 then self.Train:PlayOnce("revers_0-f","cabin",1) end + end + end + elseif (name == "ControllerUp") and (value > 0.5) then + if self.ControllerPosition+1 == 0 and not self.Locker then return end + self:TriggerInput("ControllerSet",self.ControllerPosition+1) + self.Timer = CurTime()-self.ChangeSpeed + self.SecondSound = true + elseif (name == "ControllerDown") and (value > 0.5) then + self:TriggerInput("ControllerSet",self.ControllerPosition-1) + self.Timer = CurTime()-self.ChangeSpeed + self.SecondSound = true + elseif (name == "ReverserUp") and (value > 0.5) then + self:TriggerInput("ReverserSet",self.ReverserPosition+1) + elseif (name == "ReverserDown") and (value > 0.5) then + self:TriggerInput("ReverserSet",self.ReverserPosition-1) + elseif (name == "SetX1") and (value > 0.5) then + self:TriggerInput("ControllerSet",1) + elseif (name == "SetX2") and (value > 0.5) then + self:TriggerInput("ControllerSet",2) + elseif (name == "SetX3") and (value > 0.5) then + self:TriggerInput("ControllerSet",3) + elseif (name == "Set0") and (value > 0.5) then + self:TriggerInput("ControllerSet",0) + elseif (name == "Set0Fast") and (value > 0.5) then + self:TriggerInput("ControllerSet",0) + self.ChangeSpeed = 0.05 + elseif (name == "SetT1") and (value > 0.5) then + self:TriggerInput("ControllerSet",-1) + elseif (name == "SetT1A") and (value > 0.5) then + self:TriggerInput("ControllerSet",-2) + elseif (name == "SetT2") and (value > 0.5) then + self:TriggerInput("ControllerSet",-3) + elseif (name == "ControllerUnlock") then + self.Locker = value > 0.5 + if self.Locker then + self.Train:PlayOnce("kv70_fix_on", "cabin",1) + else + self.Train:PlayOnce("kv70_fix_off", "cabin",1) + end + elseif name == "SetAutodrive" then + self.AutodrivePosition = value + end +end + + +function TRAIN_SYSTEM:Think() + local Train = self.Train + + if (self.Enabled == 0) and (self.ReverserPosition ~= 0) then + self.ReverserPosition = 0 + self.ControllerPosition = 0 + end + if (self.ReverserPosition == 0) and (self.ControllerPosition ~= 0) then + self.ReverserPosition = 0 + self.ControllerPosition = 0 + end + + -- Move controller + self.Timer = self.Timer or CurTime() + if ((CurTime() - self.Timer > self.ChangeSpeed) and (self.ControllerPosition > self.RealControllerPosition)) then + local previousPosition = self.RealControllerPosition + self.Timer = CurTime() + self.RealControllerPosition = self.RealControllerPosition + 1 + + local A,B = previousPosition,self.RealControllerPosition + + if (A == -3) and (B == -2) then self.Train:PlayOnce("kv70_t2_t1a", "cabin",1) end + if (A == -2) and (B == -1) then self.Train:PlayOnce("kv70_t1a_t1", "cabin",1) end + if self.SecondSound and (A == -1) and (B == 0) then self.Train:PlayOnce("kv70_t1_0", "cabin",1) end + if not self.SecondSound and (A == -1) and (B == 0) then self.Train:PlayOnce("kv70_t1_0_fix", "cabin",1) end + + if (A == 0) and (B == 1) then self.Train:PlayOnce("kv70_0_x1", "cabin",1) end + if (A == 1) and (B == 2) then self.Train:PlayOnce("kv70_x1_x2", "cabin",1) end + if (A == 2) and (B == 3) then self.Train:PlayOnce("kv70_x2_x3", "cabin",1) end + self.SecondSound = nil + end + if ((CurTime() - self.Timer > self.ChangeSpeed) and (self.ControllerPosition < self.RealControllerPosition)) then + local previousPosition = self.RealControllerPosition + self.Timer = CurTime() + self.RealControllerPosition = self.RealControllerPosition - 1 + + local A,B = previousPosition,self.RealControllerPosition + if (A == 3) and (B == 2) then self.Train:PlayOnce("kv70_x3_x2", "cabin",1) end + if (A == 2) and (B == 1) then self.Train:PlayOnce("kv70_x2_x1", "cabin",1) end + if (A == 1) and (B == 0) then self.Train:PlayOnce("kv70_x1_0", "cabin",1) end + + if (A == 0) and (B == -1) then self.Train:PlayOnce("kv70_0_t1", "cabin",1) end + if (A == -1) and (B == -2) then self.Train:PlayOnce("kv70_t1_t1a", "cabin",1) end + if (A == -2) and (B == -3) then self.Train:PlayOnce("kv70_t1a_t2", "cabin",1) end + self.SecondSound = nil + end + if self.RealControllerPosition == 0 then self.ChangeSpeed = 0.10 end + local position + if self.AutodrivePosition ~= 0 and self.RealControllerPosition == 0 then + position = self.AutodrivePosition + elseif self.AutodrivePosition >= 0 and self.RealControllerPosition ~= 0 then + position = self.RealControllerPosition + else + position = math.min(self.AutodrivePosition,self.RealControllerPosition) + end + -- Update contacts + for i=1,#self.ReverserMatrix/2 do + local v = self.ReverserMatrix[i*2-1] + local d = self.ReverserMatrix[i*2] + self[v[1].."-"..v[2]] = d[self.ReverserPosition+2] + end + for i=1,#self.ControllerMatrix/2 do + local v = self.ControllerMatrix[i*2-1] + local d = self.ControllerMatrix[i*2] + self[v[1].."-"..v[2]] = d[(position)+4] + end +end diff --git a/lua/metrostroi/systems/_obsolete/sys_81_717_pam.lua b/lua/metrostroi/systems/_obsolete/sys_81_717_pam.lua new file mode 100644 index 0000000..678683e --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_81_717_pam.lua @@ -0,0 +1,3046 @@ +-------------------------------------------------------------------------------- +-- ПÐМ +-------------------------------------------------------------------------------- +--[[ +а) включение ПÐ-М и начальное теÑтирование: + V 1) включение ПÐ-М; + V 2) алгоритм Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ€ÐµÐ²ÐµÑ€Ñивной рукоÑтки (РР); + V 3) функции доÑтупа к ÑиÑтеме: + – вход в ÑиÑтему Ñ ÐºÐ¾Ð´Ð¾Ð¼ доÑтупа Ñлектромеханика, теÑтовый контроль аппаратуры; + – вход в ÑиÑтему Ñ ÐºÐ¾Ð´Ð¾Ð¼ доÑтупа машиниÑта и приемка ÑоÑтава; + 4) алгоритм взаимодейÑÑ‚Ð²Ð¸Ñ ÐŸÐ-М и БÐРС; + 5) выход из депо, переход в режим «Работа»; +б) алгоритмы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð¿Ð½ÐµÐ²Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑких ÑиÑтем поезда: + 1) алгоритм ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð¾Ñ‚Ð¿ÑƒÑка тормозов; + 2) алгоритм ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ воздухораÑпределителей; + 3) алгоритм ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð²ÐµÐ½Ñ‚Ð¸Ð»ÐµÐ¹ Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð’1 и Ð’2; + 4) алгоритм ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð²ÐµÐ½Ñ‚Ð¸Ð»ÐµÐ¹ Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð’1 и Ð’2; +в) алгоритмы Ñ€ÐµÐ³ÑƒÐ»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑкороÑти: + 1) алгоритм Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾Ð¿ÑƒÑтимой ÑкороÑти Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ перегону; + 2) регулирование ÑкороÑти в режиме КС и ОС; + V 3) регулирование ÑкороÑти в режиме КС при значении Vд = 0; + 4) алгоритм ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ ÑффективноÑти торможениÑ; +г) алгоритм ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ÐµÐ·Ð´Ð¾Ð¼ на Ñтанции в режимах КС и ОС: + 1) фикÑÐ°Ñ†Ð¸Ñ Ñтанции; + 2) оÑаживание поезда; + 3) процедура открытиÑ/Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ на Ñтанции; + 4) отправление Ñо Ñтанции; + 5) движение при переезде поездом зоны ОПВ на Ñтанции; + 6) оборот на промежуточной Ñтанции; +д) проезд Ñтанции без оÑтановки (транзитом); +е) алгоритм перехода на другую линию; +ж) управление поездом на перегоне: + 1) управление поездом при потере ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ на перегоне; + 2) Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ на перегоне по запроÑу машиниÑта; + +з) алгоритм коррекции пройденного пути; +и) алгоритм коррекции значений коÑффициентов (бандажа); +к) оÑаживание при пожаре; +л) алгоритм ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ ÑÐºÐ°Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ÐµÐ·Ð´Ð° (режим КС); +м) алгоритм проверки «противоÑкатываниÑ» поезда; +н) алгоритм Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ Ñтанционным путÑм; +о) алгоритм работы ПÐ-М в режиме резервного ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ÐµÐ·Ð´Ð¾Ð¼; +п) Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ терминала машиниÑта. + +2.1.5 При обнаружении ПÐ-М Ð¿Ñ€Ð¾Ð¿Ð°Ð´Ð°Ð½Ð¸Ñ Ñигнала КД она формирует команду ОХТ и ожидает Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° разрешение Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð±ÐµÐ· КД. +2.1.6 При пропадании Ñигнала КСОТ ПÐ-М автоматичеÑки переходит в режим ОС, дальнейшее движение поезда возможно при нажатой ПБ. При поÑвлении Ñигнала КСОТ проиÑходит автоматичеÑкий переход в КС. +2.1.7 ПÐ-М не позволÑет производить открытие дверей на перегоне, кроме ÑÐ»ÑƒÑ‡Ð°Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¼Ð°ÑˆÐ¸Ð½Ð¸Ñтом запроÑа на открытие дверей только поÑле полной оÑтановки поезда. +2.1.8 ПÐ-М блокирует возможноÑть Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÑоÑтава при Vд = 0. Движение при Vд = 0 возможно Ñо ÑкороÑтью не более 20 км/ч при нажатой ПБ и включенном тумблере ВРД или введенном запроÑе машиниÑта «Движение при Vд = 0». +2.1.9 ПÐ-М не производит автоматичеÑкого Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ на Ñтанции при отÑутÑтвии радиоÑвÑзи Ñ Ð¡Ð ÐšÐ¡Ð”. +2.1.10 ПÐ-М блокирует открытие дверей на Ñтанции Ñо Ñтороны, противоположной Ñтороне платформы. +2.1.11 ПÐ-М запрещает оÑаживание поезда на Ñтанции открытого типа при проезде зоны ОПВ и разрешает на Ñтанции закрытого типа при проезде зоны ОПВ не более 3 м. +2.1.12 ПÐ-М запрещает движение Ñо ÑкороÑтью более 20 км/ч при нажатой ПБ незавиÑимо от Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Vд. +2.1.13 ПÐ-М в режимах КС и ОС блокирует возможноÑть проÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтанции без оÑтановки, кроме ÑÐ»ÑƒÑ‡Ð°Ñ Ð²Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¼Ð°ÑˆÐ¸Ð½Ð¸Ñтом запроÑа на проÑледование Ñтанции транзитом. +2.2.3.2 Перед включением ПÐ-М проверить включенное ÑоÑтоÑние переключателей РЦ1, РЦ2, автоматичеÑких выключателей Ð58, Ð59, Ð61 и включенное ÑоÑтоÑние Ð²Ñ‹ÐºÐ»ÑŽÑ‡Ð°Ñ‚ÐµÐ»Ñ Ð’ÐУ (положение «ВКЛ»). + +2.3.3 Управление поездом при отÑутÑтвии ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ (ÐЧ) +2.3.3.1 Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾Ð¿ÑƒÑтимой ÑкороÑти движениÑ: + а) При наезде на Vд = ÐЧ выдаетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ предыдущей допуÑтимой ÑкороÑти, пока непройдет 0.8 Ñекунды Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ‚Ð° наезда на Vд = ÐЧ и поезд не проедет 12 – 20 м (в завиÑимоÑтиот ÑкороÑти Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ÐµÐ·Ð´Ð°); + б) При неÑовпадении данных полученных от двух плат ФФК или получении недоÑтовер-ных данных по одной из них (при получении чаÑтот вне диапазона значений или двойных чаÑ-тот и Ñ‚.д.) формируетÑÑ Vд = ÐЧ через 1,5 Ñекунды и поÑле Ð¿Ñ€Ð¾Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ð¾ÐµÐ·Ð´Ð¾Ð¼ 12 – 20 м(в завиÑимоÑти от ÑкороÑти Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ÐµÐ·Ð´Ð°); + в) Ðа ÑтоÑщем поезде (при ÑкороÑти менее 0.1 м/Ñ), при пропадании чаÑтоты Ñмена допуÑ-тимой ÑкороÑти производитÑÑ Ñ‡ÐµÑ€ÐµÐ· 2,5 Ñ, не дожидаÑÑÑŒ Ð¿Ñ€Ð¾Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ ÑоÑтавом 12 м.2.3.3.2 Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ÐµÐ·Ð´Ð¾Ð¼ при наезде на рельÑовую цепь Ñ Ð¾Ñ‚ÑутÑтвием коди-Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ (ÐЧ): + а) При наезде на рельÑовую цепь Ñ Ð¾Ñ‚ÑутÑтвием ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ (ÐЧ) выдаетÑÑ Ð·ÑƒÐ¼Ð¼ÐµÑ€; + б) ПРМ формирует поÑледовательноÑть команд ОХТ → Т2; + в) ПоÑле Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ ÐŸÐ‘ зуммер отключаетÑÑ; + г) Торможение (Т2) продолжаетÑÑ Ð´Ð¾ полной оÑтановки, а поÑле оÑтановки поезда ПÐ-М формирует команду Ð’1; + д) При отпущенной ПБ ПÐ-М формирует команду ОХТ + Ð’1; + е) При уÑтановленном в положение «0» КВ и нажатой ПБ ПÐ-М формирует команду ОД; + ж) ПоÑле перевода КВ в положение ХОД движение поезда возможно Ñо ÑкороÑтью не более 20 км/ч при нажатой ПБ. + 2.3.4 ВозможноÑть проÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð»Ð¾Ðº-учаÑтка Ñ Vд = 0 +2.3.4.1 При наезде на рельÑовую цепь Ñ Vд = 0 за 100 метров до Ñтанции Ñ Ð¿ÑƒÑ‚ÐµÐ²Ñ‹Ð¼ разви- тием, разрешаетÑÑ Ð´Ð°Ð»ÑŒÐ½ÐµÐ¹ÑˆÐµÐµ движение без оÑтановки Ñо ÑкороÑтью не более 20 км/ч при уÑ- ловии нажатой ПБ. +2.3.4.2 Ð’ оÑтальных ÑлучаÑÑ… при наезде на Vд = 0 проиÑходит торможение до полной оÑ- тановки. +2.3.4.3 При Ñмене допуÑтимой ÑкороÑти Ñ Vд ≠ 0 на Vд = 0 ПÐ-М должна Ñформировать поÑледовательноÑть команд ОХТ → Т2 до оÑтановки поезда, Ñ Ð²Ñ‹Ð´Ð°Ñ‡ÐµÐ¹ зуммера. +2.3.4.4 ПоÑле оÑтановки поезда и нажатии ПБ команда Т2 + Ð’1 менÑетÑÑ Ð½Ð° ОХТ + Ð’1. +2.3.4.5 При поÑледующем отпуÑке ПБ, зуммер отключаетÑÑ. +2.3.4.6 При переводе КВ в положение ХОД назначение ходового режима запрещаетÑÑ, и на диÑплее ТМ поÑвлÑетÑÑ Ð¿Ð¾Ð´Ñказка «Движение при Vд = 0». +2.3.4.7 ПоÑле оÑтановки поезда возобновление Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ñо ÑкороÑтью не более 20 км/ч возможно при уÑловии нажатой ПБ и Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ñ Ñигнала ВРД (включен выключатель ВРД). +2.3.4.8 ПоÑле оÑтановки поезда возобновление Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ñо ÑкороÑтью не более 20 км/ч возможно при уÑловии нажатой ПБ и Ð²Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð½Ð° блоке ТМ запроÑа «Движение при Vд = 0». +2.3.4.9 Ð”Ð»Ñ Ð²Ð²Ð¾Ð´Ð° запроÑа необходимо поÑледовательно нажать на ТМ клавишу «F», за- тем выбрать пункт меню, нажав клавишу «5». +2.3.4.10 Ðа диÑплее ТМ поÑвитÑÑ Â«Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° разрешение Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ Vд = 0» (риÑунок 11). +2.3.4.11 При нажатии клавиши «Esc» произойдет возврат к предыдущему кадру без раз- Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ (режим ОХТ + Ð’1). +2.3.4.12 При нажатии клавиши « â†â» ПРМ разрешит продолжение Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ Vд = 0, а на ТМ произойдет возврат к предыдущему кадру и на Ð²Ñ€ÐµÐ¼Ñ 7 Ñекунд поÑвитÑÑ Ð¿Ð¾Ð´- Ñказка «Разрешено движение при Vд = 0». +2.3.4.13 Режим ОХТ + Ð’1 ÑменитÑÑ Ð½Ð° ОД + Ð’1 при нажатой ПБ. +2.3.4.14 При поÑвлении Vд ≠ 0 Ð·Ð°Ð¿Ñ€Ð¾Ñ Â«Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ðµ при Vд = 0» автоматичеÑки ÑнимаетÑÑ. +]] + +Metrostroi.DefineSystem("PAM") +TRAIN_SYSTEM.DontAccelerateSimulation = true +TRAIN_SYSTEM.TriggerNames = { + "PAM7", + "PAM8", + "PAM9", + "PAMLeft", + "PAMRight", + "PAM4", + "PAM5", + "PAM6", + "PAMUp", + "PAM1", + "PAM2", + "PAM3", + "PAMDown", + "PAM0", + "PAMEnter", + "PAMEsc", + "PAMF", + "PAMM", + "PAMP", + "PAMKeyB", +} + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("PAM_VV") + self.Train:LoadSystem("KSD_R","Relay") + self.Train:LoadSystem("KSD_VAU","Relay") + --self.Train:LoadSystem("KSZD","Relay","Switch",{ bass = true }) + --self.Train:LoadSystem("VZP","Relay","Switch",{ bass = true }) + --self.Train:LoadSystem("VAU","Relay","Switch",{ bass = true, normally_closed = true }) + --self.Train:LoadSystem("RC2","Relay","Switch",{ bass = true, normally_closed = true }) + + + self.Triggers = {} + self.Touches = {} + for k,v in pairs(self.TriggerNames) do + self.Train:LoadSystem(v,"Relay","Switch",{ bass = true }) + self.Triggers[k] = false + self.Touches[k] = false + end + + self.NoFreq = 0 + self.F6 = 0 + self.F5 = 0 + self.F4 = 0 + self.F3 = 0 + self.F2 = 0 + self.F1 = 0 + + self["2"] = 0 --Вращение РК + self["3"] = 0 --Ход 3 + self["8"] = 0 --Замещение ÑлектричеÑкого Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ + self["16"] = 0 --Закрытие дверей + self["17"] = 0 -- Разрешение воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€ÐµÐ»Ðµ перегрузки + self["19"] = 0 -- Разрешение Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÑлектричеÑкого Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ + self["20"] = 0 -- Включение двигателей + self["20X"] = 0 -- Разрешение Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹ в ходовые режимы + self["025"] = 0 -- Разрешение ручного Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ + self["25"] = 0 -- Ручное торможение + self["31"] = 0 --Открытие Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð»ÐµÐ²Ñ‹Ñ… дверей + self["32"] = 0 --Открытие правых дверей + self["33"] = 0 --Включение ходового режима + self["033"] = 0 --Разрешение Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ…Ð¾Ð´Ð¾Ð²Ð¾Ð³Ð¾ режима + self["33G"] = 0 --Включение режима Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ + self["39"] = 0 --Включение Ð²ÐµÐ½Ñ‚Ð¸Ð»Ñ Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ â„– 2 + self["7GA"] = 0 --Включение Ð²ÐµÐ½Ñ‚Ð¸Ð»Ñ Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ â„– 2 + self["48"] = 0 --Включение Ð²ÐµÐ½Ñ‚Ð¸Ð»Ñ Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ â„– 1 + self.EPK = 0 + + + self.Ring = 0 + + self.State = 0 + self.Selected = 1 + + self.Keyboard = false + + self.Station = "" + self.Path = "" + self.RouteNumber = "" + self.DriverNumber = "" + --self:SetDriveMode = "Zero" + --self.CurrentDoorMode = "DO" + --self.CurrentPneumoMode = "NT" + self.SpeedLimit = 0 + self.ErrorTimers = {} +end + + +--if TURBOSTROI then return end +function TRAIN_SYSTEM:Inputs() + return { "KSDMode" } +end +function TRAIN_SYSTEM:Outputs() + return { + "2","3","8","16","17","19","20","20X","025","25","31","32","33","033","33G","39","7GA","48","EPK", + "Ring", "NoFreq", "F5", "F4", "F3", "F2", "F1" + } +end + +if CLIENT then + local function createFont(name,font,size) + surface.CreateFont("Metrostroi_"..name, { + font = font, + size = size, + weight = 800, + blursize = false, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + scanlines = false, + }) + end + createFont("PAM15","Arial",15) + createFont("PAM19","Arial",19) + createFont("PAM20","Arial",20) + createFont("PAM21","Arial",21) + createFont("PAM24","Arial",24) + createFont("PAM25","Arial",25) + createFont("PAM26","Arial",26) + createFont("PAM27","Arial",27) + createFont("PAM28","Arial",28) + createFont("PAM29","Arial",29) + createFont("PAM30","Arial",30) + createFont("PAM31","Arial",31) + createFont("PAM35","Arial",35) + createFont("PAM45","Arial",45) + + function TRAIN_SYSTEM:ClientThink() + if not self.Train:ShouldDrawPanel("PAMScreen") then return end + if self.FilterMag then + render.PopFilterMag() + render.PopFilterMin() + end + + self.FilterMag = true + + render.PushRenderTarget(self.Train.PAM,0,0,1024, 512) + render.Clear(0, 0, 0, 0) + cam.Start2D() + render.SetScissorRect(0, 0, 640, 480, true) + render.PushFilterMag( TEXFILTER.POINT ) + render.PushFilterMin( TEXFILTER.POINT ) + surface.SetDrawColor(0,0,0) + surface.DrawRect(0,0,640,480) + if true then self:PAMScreen(self.Train) end + render.SetScissorRect(0, 0, 0, 0, false) + render.PopFilterMag() + render.PopFilterMin() + cam.End2D() + render.PopRenderTarget() + self.FilterMag = false + end + + local button = {"button_lt","button_lc","button_lb","button_ct","button_cc","button_cb"} + local button_p = {"button_p_lt","button_p_lc","button_p_lb","button_p_ct","button_p_cc","button_p_cb"} + local button_s = {"button_s_lt","button_s_lc","button_s_lb","button_s_ct","button_s_cc","button_s_cb"} + + local textbox = { + "textbox_corner_tl","textbox_corner_t","textbox_corner_tr", + "textbox_corner_l","textbox_corner_r", + "textbox_corner_bl","textbox_corner_b","textbox_corner_br", + } + local speed = { + "speed_tl","speed_t","speed_tr", + "speed_l","speed_c","speed_r", + "speed_bl","speed_b","speed_br", + } + local window = { + "window_tl","window_tc","window_tr", + "window_cl","window_cc","window_cr", + "window_bl","window_bc","window_br", + } + local function replaceNames(tbl,path) + for k,v in pairs(tbl) do tbl[k] = surface.GetTextureID((path or "models/metrostroi_train/81-717/screens/pa/buttons/")..v) end + end + replaceNames(button) + replaceNames(button_p) + replaceNames(button_s) + replaceNames(textbox) + replaceNames(speed) + replaceNames(window,"models/metrostroi_train/81-717/screens/pa/window/") + local function drawButton(x,y,w,h,button,color) + --[[ surface.SetDrawColor(255,0,0) + surface.DrawLine(x,y,x+w,y) + surface.DrawLine(x+w,y,x+w,y+h) + surface.DrawLine(x,y+h,x+w,y+h) + surface.DrawLine(x,y,x,y+h)--]] + if not button then return end + w = math.max(w-16,0) + h = math.max(h-16,0) + surface.SetDrawColor(color or Color(255,255,255)) + surface.SetTexture(button[1]) + surface.DrawTexturedRect(x,y,8,8) + surface.DrawTexturedRectUV(x+w+8,y,8,8,1,0,0,1) + if h > 0 then + surface.SetTexture(button[2]) + surface.DrawTexturedRect(x,y+8,8,h) + surface.SetTexture(button[2]) + surface.DrawTexturedRectUV(x+w+8,y+8,8,h,1,0,0,1) + --surface.DrawTexturedRectUV(x+8,y,w,h,0,0,1*(w/8),1) + end + if w > 0 then + surface.SetTexture(button[4]) + surface.DrawTexturedRectUV(x+8,y,w,8,0,0,1*(w/8),1) + surface.SetTexture(button[5]) + surface.DrawTexturedRect(x+8,y+8,w,h) + surface.SetTexture(button[6]) + surface.DrawTexturedRectUV(x+8,y+h+8,w,8,0,0,1*(w/8),1) + end + surface.SetTexture(button[3]) + surface.DrawTexturedRect(x,y+h+8,8,8) + surface.DrawTexturedRectUV(x+w+8,y+h+8,8,8,1,0,0,1) + --surface.SetTexture(button[3]) + --surface.DrawTexturedRect(x+w+8,y,8,h,0) + end + local function drawWindow(x,y,w,h,text) + w = math.max(w-16,0) + h = math.max(h-40,0) + --Color(74,95,148) + surface.SetDrawColor(color or Color(255,255,255)) + --surface.DrawRect(x+4,y+4,w,h) + surface.SetTexture(window[1]) + surface.DrawTexturedRect(x,y,8,32) + surface.SetTexture(window[2]) + surface.DrawTexturedRect(x+8,y,w,32) + surface.SetTexture(window[3]) + surface.DrawTexturedRect(x+w+8,y,8,32) + draw.SimpleText(text,"Metrostroi_PAM19",x+8+w/2,y+18, Color(28,35,53),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(text,"Metrostroi_PAM19",x+8+w/2,y+16, col or Color(255,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + surface.SetDrawColor(color or Color(255,255,255)) + surface.SetTexture(window[4]) + surface.DrawTexturedRect(x,y+32,8,h) + surface.SetTexture(window[5]) + surface.DrawTexturedRect(x+8,y+32,w,h) + surface.SetTexture(window[6]) + surface.DrawTexturedRect(x+w+8,y+32,8,h) + + surface.SetTexture(window[7]) + surface.DrawTexturedRect(x,y+h+32,8,4) + surface.SetTexture(window[8]) + surface.DrawTexturedRect(x+8,y+h+32,w,4) + surface.SetTexture(window[9]) + surface.DrawTexturedRect(x+w+8,y+h+32,8,4) + + --draw.SimpleText(text,font,x+w/2+4,y+h/2+4, Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --surface.SetTexture(button[3]) + --surface.DrawTexturedRect(x+w+8,y,8,h,0) + end + local function drawTextBox(x,y,w,h,text,font,color) + --[[ surface.SetDrawColor(255,0,0) + surface.DrawLine(x,y,x+w,y) + surface.DrawLine(x+w,y,x+w,y+h) + surface.DrawLine(x,y+h,x+w,y+h) + surface.DrawLine(x,y,x,y+h)--]] + + w = math.max(w-8,0) + h = math.max(h-8,0) + surface.SetDrawColor(color or Color(255,255,255)) + surface.DrawRect(x+4,y+4,w,h) + surface.SetTexture(textbox[1]) + surface.DrawTexturedRect(x,y,4,4) + surface.SetTexture(textbox[2]) + surface.DrawTexturedRect(x+4,y,w,4) + surface.SetTexture(textbox[3]) + surface.DrawTexturedRect(x+w+4,y,4,4) + + surface.SetTexture(textbox[4]) + surface.DrawTexturedRect(x,y+4,4,h) + surface.SetTexture(textbox[5]) + surface.DrawTexturedRect(x+w+4,y+4,4,h) + + surface.SetTexture(textbox[6]) + surface.DrawTexturedRect(x,y+h+4,4,4) + surface.SetTexture(textbox[7]) + surface.DrawTexturedRect(x+4,y+h+4,w,4) + surface.SetTexture(textbox[8]) + surface.DrawTexturedRect(x+w+4,y+h+4,4,4) + + draw.SimpleText(text,font,x+w/2+4,y+h/2+4, Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + local function drawSpeed(x,y,w,h,color) + --[[ + surface.SetDrawColor(255,0,0) + surface.DrawLine(x,y,x+w,y) + surface.DrawLine(x+w,y,x+w,y+h) + surface.DrawLine(x,y+h,x+w,y+h) + surface.DrawLine(x,y,x,y+h)--]] + --w = math.max(w-8,0) + h = math.max(h-8,0) + if w < -4 then return end + surface.SetDrawColor(color or Color(255,255,255)) + --surface.DrawRect(x+4,y+4,w,h) + surface.SetTexture(speed[1]) + surface.DrawTexturedRect(x,y,4,4) + surface.SetTexture(speed[2]) + surface.DrawTexturedRect(x+4,y,w,4) + surface.SetTexture(speed[3]) + surface.DrawTexturedRect(x+w+4,y,4,4) + + surface.SetTexture(speed[4]) + surface.DrawTexturedRect(x,y+4,4,h) + surface.SetTexture(speed[5]) + surface.DrawTexturedRectUV(x+4,y+4,w,h,0,0,1*(w/19),1) + surface.SetTexture(speed[6]) + surface.DrawTexturedRect(x+w+4,y+4,4,h) + + surface.SetTexture(speed[7]) + surface.DrawTexturedRect(x,y+h+4,4,4) + surface.SetTexture(speed[8]) + surface.DrawTexturedRect(x+4,y+h+4,w,4) + surface.SetTexture(speed[9]) + surface.DrawTexturedRect(x+w+4,y+h+4,4,4) + end + local function buttonWTextC(x,y,w,h,text,font,color,button,buttoncolor) + drawButton(x,y,w,h,button,buttoncolor) + draw.SimpleText(text,font,x+w/2,y+h/2, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + + function drawFrame(tex,x,y,w,h,alpha) + x,y,w,h = x or 0,y or 0,w or 1024,h or 512 + surface.SetTexture(tex) + surface.SetDrawColor(255,255,255,alpha) + surface.DrawTexturedRect(x,y,w,h) + --surface.DrawTexturedRectRotated(x+w/2,y+h/2,w,h,0) + end + + function stateDebug(Train) + draw.SimpleText(Format("St = %.02f",Train:GetNW2Float("PAM:TrackS",-1)),"Metrostroi_PAM30",5,20, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("S = %.02f",Train:GetNW2Float("PAM:S",-1)),"Metrostroi_PAM30",5,20+20*1, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("Sd = %.02f",Train:GetNW2Float("PAM:Sd",-1)),"Metrostroi_PAM30",5,20+20*2, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("S2 = %.02f",Train:GetNW2Float("PAM:S2",-1)),"Metrostroi_PAM30",5,20+20*3, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("S2d = %.02f",Train:GetNW2Float("PAM:S2d",-1)),"Metrostroi_PAM30",5,20+20*4, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("SSd = %.02f",Train:GetNW2Float("PAM:S",-1)-Train:GetNW2Float("PAM:S2",-1)),"Metrostroi_PAM30",5,20+20*5, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + + draw.SimpleText(Format("SensID = %0.1f",Train:GetNW2Float("PAM:LastSensorDist",-1)),"Metrostroi_PAM30",5,20+20*7, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("SensD = %0.1f",Train:GetNW2Float("PAM:SensorDist",-1)),"Metrostroi_PAM30",5,20+20*8, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("SensT = %0.1f",Train:GetNW2Float("PAM:LastSensorTime",-1)),"Metrostroi_PAM30",5,20+20*9, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("SensD1 = %0.3f",Train:GetNW2Float("PAM:LastSensorDiff",-1)),"Metrostroi_PAM30",5,20+20*10, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("SensD2 = %0.3f",Train:GetNW2Float("PAM:LastSensorDiff2",-1)),"Metrostroi_PAM30",5,20+20*11, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + + draw.SimpleText(Format("Sig = %s",Train:GetNW2String("PAM:Signal","n\\a")),"Metrostroi_PAM30",5,20+20*13, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + + draw.SimpleText(Format("ST = %d",Train:GetNW2Int("PAM:Station",-1)),"Metrostroi_PAM30",5,20+20*15, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("STd = %0.2f",Train:GetNW2Float("PAM:StationS",-1)),"Metrostroi_PAM30",5,20+20*16, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("STD = %0.1f",Train:GetNW2Float("PAM:StationD",-1)),"Metrostroi_PAM30",5,20+20*17, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + + local state1_nkr = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state1_nkr") + local state1_kr = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state1_kr") + local function State1(Train) + local reverser = Train:GetNW2Bool("PAM:Reverser") + local xmin = reverser and 36 or 0 + drawFrame(reverser and state1_kr or state1_nkr) + local Stest,SSetup,SBack = Train:GetNW2Bool("PAM:GoodTest"),Train:GetNW2Bool("PAM:GoodSetup"),Train:GetNW2Int("PAM:GoodBack",0) + if Stest then + draw.SimpleText("ÐОРМÐ","Metrostroi_PAM28",431,163+38*0-xmin, Color(0,165,13),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + draw.SimpleText("ÐЕ ÐОРМÐ","Metrostroi_PAM28",431,163+38*0-xmin, Color(213,18,8),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + if SSetup then + draw.SimpleText("ÐОРМÐ","Metrostroi_PAM28",431,163+38*1-xmin, Color(0,165,13),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + draw.SimpleText("ÐЕ ÐОРМÐ","Metrostroi_PAM28",431,163+38*1-xmin, Color(213,18,8),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + if SBack==1 then + draw.SimpleText("ÐОРМÐ","Metrostroi_PAM28",431,163+38*2-xmin, Color(0,165,13),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + elseif SBack==-1 then + draw.SimpleText("ÐЕ ÐОРМÐ","Metrostroi_PAM28",431,163+38*2-xmin, Color(213,18,8),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + draw.SimpleText("ÐЕТ СВЯЗИ","Metrostroi_PAM28",431,163+38*2-xmin, Color(125,125,125),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + draw.SimpleText("2.2","Metrostroi_PAM28",431-5,163+38*3-xmin, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + + + draw.SimpleText("ПСР не подключен","Metrostroi_PAM27",315,318-xmin, Color(213,18,8),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + buttonWTextC(542,352-xmin,77,51,"Esc","Metrostroi_PAM30",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEsc") and button_p or button) + if reverser then + buttonWTextC(320-55,410,110,51,"Enter","Metrostroi_PAM30",SSetup and Color(0,0,0) or Color(124,124,124), (SSetup and Train:GetNW2Bool("PAM:KeyEnter")) and button_p or button) + end + end + local state1_errs = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state1_errs") + local function State1_5(Train) + drawFrame(state1_errs) + local backPA = Train:GetNW2Int("PAM:GoodBack",0) + for i=0,7 do + if i~=4 or Train:GetNW2Bool("PAM:GoodSetup") then + draw.SimpleText("ÐОРМÐ","Metrostroi_PAM28",302,164+31*i, Color(0,165,13),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText("ÐЕ ÐОРМÐ","Metrostroi_PAM28",302,164+31*i, Color(213,18,8),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + if backPA ==0 then + draw.SimpleText("ÐЕТ СВЯЗИ","Metrostroi_PAM28",471,164+31*i, Color(125,125,125),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + elseif i==4 and backPA == -1 then + draw.SimpleText("ÐЕ ÐОРМÐ","Metrostroi_PAM28",471,164+31*i, Color(213,18,8),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText("ÐОРМÐ","Metrostroi_PAM28",471,164+31*i, Color(0,165,13),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + buttonWTextC(320-82,408,164,51,"Закрыть","Metrostroi_PAM30",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEsc") and button_p or button) + end + local state2 = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state2") + local tbl = { + 1,"Выход на линию", + 2,"ПерезапуÑк", + false,"Ðазад", + "M","ТехнологичеÑкое меню", + } + local function State2(Train) + drawFrame(state2) + local sel = Train:GetNW2Int("PAM:Selected",1) + for i=1,#tbl/2 do + local color = i==sel and Color(255,255,255) or Color(0,0,0) + local y = 121+59*(i-1)+25 + if i~=2 or Train:GetNW2Bool("PAM:HaveRestart") then + if i==4 then y=y+69 end + drawButton(320-298,y-25,596,50, i==sel and button_s or button) + draw.SimpleText(tbl[i*2],"Metrostroi_PAM28",320-98,y, color,TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if tbl[i*2-1] then + draw.SimpleText(tbl[i*2-1],"Metrostroi_PAM28",320-292,y, color,TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if i==4 then + Metrostroi.DrawLine(320-290,y+13,320-272,y+13,color,3) + else + Metrostroi.DrawLine(320-290,y+13,320-277,y+13,color,3) + end + end + end + end + end + + local keyboard_na = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/keyboard_na") + local keyboard = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/keyboard") + local keys = { + "P", + "F" , "Up" , "M", + "Left","Down","Right", + "1" , "2" , "3", + "4" , "5" , "6", + "7" , "8" , "9", + "Esc" , "0" ,"Enter", + } + local keysConv = {Up="â–²",Left="â—„",Down="â–¼",Right="â–º",} + local function drawKeyboard(Train,x,y) + local selected = Train:GetNW2String("PAM:Touching","") ~= "" + drawFrame(selected and keyboard or keyboard_na,x,y,256,512) + local colors = Color(0,0,0,255*0.3) + for i,keyName in ipairs(keys) do + local touched = not selected and Train:GetNW2String("PAM:LastToucn") == keyName + local touching = Train:GetNW2String("PAM:Touching") == keyName + local col = Color(255,255,255,colors.a) + if touching then col = Color(245,46,18) end + if touched then + col = Color(255,255,255) + end + local key = i+1 + local xp = key%3 + local yp = math.floor(key/3) + buttonWTextC(x+5+60*xp,y+32+49*yp,60,49,keysConv[keyName] or keyName,"Metrostroi_PAM27",Color(0,0,0), Train:GetNW2Bool("PAM:Key"..keyName) and button_p or button,col) + end + end + local combobox = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/combobox") + local combobox_g = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/combobox_g") + local function comboBox(Train,x,y) + local count = Train:GetNW2Int("PAM:ElemCount",0) + if count <= 0 then return end + local w,h = 260,163 + drawFrame(combobox,x,y,256,256) + for i=1,Train:GetNW2String("PAM:ElemCount",0) do + local text = Train:GetNW2String("PAM:Elem"..i) + local tab = text:find("\t") + if tab then + draw.SimpleText(text:sub(1,tab-1),"Metrostroi_PAM20",x+13,y+27-10+18*(i-1), Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(text:sub(tab+1,-1),"Metrostroi_PAM20",x+13+35,y+27-10+18*(i-1), Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + draw.SimpleText(text,"Metrostroi_PAM20",x+13,y+27-5+18*(i-1), Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + --x+28+18*i Train:SetNW2String("PAM:Elem"..iS,id.."\t"..(name or id)) + end + --[[ surface.SetDrawColor(Color(255,0,0)) + surface.DrawLine(x+219,y+5,x+219+31,y+5) + surface.DrawLine(x+219,y+5,x+219,y+5+15) + surface.DrawLine(x+219,y+5+15,x+219+31,y+5+15) + surface.DrawLine(x+219+31,y+5,x+219+31,y+5+15) + + surface.SetDrawColor(Color(0,255,0)) + surface.DrawLine(x+219,y+128,x+219+31,y+128) + surface.DrawLine(x+219,y+128,x+219,y+128+14) + surface.DrawLine(x+219,y+128+14,x+219+31,y+128+14) + surface.DrawLine(x+219+31,y+128,x+219+31,y+128+14) + + surface.SetDrawColor(Color(0,0,255)) + surface.DrawLine(x+219,y+143,x+219+31,y+143) + surface.DrawLine(x+219,y+143,x+219,y+143+14) + surface.DrawLine(x+219,y+143+14,x+219+31,y+143+14) + surface.DrawLine(x+219+31,y+143,x+219+31,y+143+14)--]] + + end + local state3 = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state3") + local state3k = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state3k") + local keyb_icon = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/buttons/keyb_icon") + local function State3(Train) + local selected = Train:GetNW2String("PAM:Touching") ~= "" + local keyboard = Train:GetNW2Bool("PAM:Keyboard") + if keyboard then drawFrame(state3k,640-512,nil,512) else drawFrame(state3) end + local sel = Train:GetNW2Int("PAM:Selected",1) + local xadd = keyboard and 1 or 0 + drawTextBox(374,103+35*0,210,35,Train:GetNW2String("PAM:StationS",""),"Metrostroi_PAM30",not selected and sel == 1 and Color(79,252,246)) + drawTextBox(374,103+35*1,210,35,Train:GetNW2String("PAM:PathS",""),"Metrostroi_PAM30",not selected and sel == 2 and Color(79,252,246)) + drawTextBox(374,103+35*2,210,35,Train:GetNW2String("PAM:RouteNumber",""),"Metrostroi_PAM30",not selected and sel == 3 and Color(79,252,246)) + drawTextBox(374,103+35*3,210,35,Train:GetNW2String("PAM:DriverNumber",""),"Metrostroi_PAM30",not selected and sel == 4 and Color(79,252,246)) + drawTextBox(374,103+35*4,210,35,os.date("%d.%m.%y %H:%M:%S",Metrostroi.GetSyncTime()),"Metrostroi_PAM30",sel == 5 and Color(79,252,246)) + if sel==1 then comboBox(Train,374,103+35*1) end + local err = Train:GetNW2String("PAM:EnterError","") + if err ~= "" then draw.SimpleText(err,"Metrostroi_PAM30",320+xadd*90,300, Color(213,18,8),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + local currStation = Train:GetNW2String("PAM:CurrentStationS") + if currStation ~= "" then draw.SimpleText(currStation,"Metrostroi_PAM30",320+xadd*90,330, Color(0,165,13),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + buttonWTextC(156+xadd*127,369,120,51,"Ввод","Metrostroi_PAM30",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEnter") and button_p or button) + buttonWTextC(286+xadd*127,369,120,51,"Ðазад","Metrostroi_PAM30",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEsc") and button_p or button) + if Train:GetNW2Bool("PAM:KeyKeyB") or keyboard then drawButton(443+xadd*100,369,40,51, keyboard and button_p or button) end + surface.SetDrawColor(255,255,255) + surface.SetTexture(keyb_icon) + surface.DrawTexturedRect(447+xadd*100,363,32,64) + if keyboard then drawKeyboard(Train,22,47) end + end + local state35 = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state35") + local state35k = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state35k") + local function State35(Train) + local selected = Train:GetNW2String("PAM:Touching") ~= "" + local keyboard = Train:GetNW2Bool("PAM:Keyboard") + + if keyboard then drawFrame(state35k,640-512,nil,512) else drawFrame(state35) end + local sel = Train:GetNW2Int("PAM:Selected",1) + local xadd = keyboard and 1 or 0 + drawTextBox(374,103+35*0,210,35,Train:GetNW2String("PAM:StationS",""),"Metrostroi_PAM30",not selected and sel == 1 and Color(79,252,246)) + drawTextBox(374,103+35*1,210,35,Train:GetNW2String("PAM:PathS",""),"Metrostroi_PAM30",not selected and sel == 2 and Color(79,252,246)) + if sel==1 then comboBox(Train,374,103+35*1) end + local err = Train:GetNW2String("PAM:EnterError","") + if err ~= "" then draw.SimpleText(err,"Metrostroi_PAM30",320+xadd*90,260, Color(213,18,8),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + local currStation = Train:GetNW2String("PAM:CurrentStationS") + if currStation ~= "" then draw.SimpleText(currStation,"Metrostroi_PAM30",320+xadd*90,330, Color(0,165,13),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + + buttonWTextC(156+xadd*127,369,120,51,"Ввод","Metrostroi_PAM30",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEnter") and button_p or button) + buttonWTextC(286+xadd*127,369,120,51,"Ðазад","Metrostroi_PAM30",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEsc") and button_p or button) + + if Train:GetNW2Bool("PAM:KeyKeyB") or keyboard then drawButton(443+xadd*100,369,40,51, keyboard and button_p or button) end + surface.SetDrawColor(255,255,255) + surface.SetTexture(keyb_icon) + surface.DrawTexturedRect(447+xadd*100,363,32,64) + + if keyboard then drawKeyboard(Train,22,47,selected) end + end + + local state4 = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state4") + local function State4(Train) + drawFrame(state4) + buttonWTextC(320-19,278,76,38,"Ввод","Metrostroi_PAM30",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEnter") and button_p or button) + end + + local function drawText2(x,y,text,state,col) + if state then + draw.SimpleText(text,"Metrostroi_PAM30",x,y, col or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText(text,"Metrostroi_PAM30",x+1,y+1, Color(173,178,172),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(text,"Metrostroi_PAM30",x,y, col or Color(142,147,146),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + local driveModes = { + [0]="?", + "ОС", + "КС", + "ÐÐ’", + "ОР", + "КР", + } + + local KVModes = { + [-4]="Т2", + [-3]="Т1а", + [-2]="Т1", + [-1]="ОХТ", + [0]="ОД", + [1]="Ð¥1", + [2]="Ð¥2", + [3]="Ð¥3", + } + local menus = { + {"Проверка","ÑкатываниÑ"}, + {"Движение","без КД"}, + "Смена линии", + {"Движение","транзитом"}, + {"Движение"," при Vд=0"}, + {"Открытие дверей","на перегоне"}, + {"Движение","без ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð›ÐŸÐ¢"}, + {"Зонный","оборот"}, + {"ФикÑациÑ","Ñтанции"}, + [12]="Закрыть" + } + local acceptions = { + [-7] = "Подтверди переход на другую линию", + [-6] = "Подтверди оÑаживание при пожаре", + [-4] = {"Подтверди движение по Ñтанционным","путÑм"}, + [-3] = "Подтверди переход в ОС", + [-2] = "Подтверди переход в КС", + [-1] = "Подтверди переход в ÐÐ’", + "Подтвердите проверку ÑкатываниÑ", + "Подтвердите движение без КД", + "Подтвердите Ñмену линии", + "Подтвердите движение транзитом", + "Подтвердите движение при Vд = 0", + "Подтвердите открытие дверей на перегоне", + "Подтвердите движение без ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð›ÐŸÐ¢", + "Подтвердите зонный оборот", + [11]="Подтвердите отмену проверки ÑкатываниÑ", + [12]="Подтвердите отмену Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð±ÐµÐ· КД", + [13]="Подтвердите отмену Ñмены линии", + [14]="Подтвердите отмену Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ñ‚Ñ€Ð°Ð½Ð·Ð¸Ñ‚Ð¾Ð¼", + [15]="Подтвердите отмену Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ Vд = 0", + [16]={"Подтвердите отмену Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ на","перегоне"}, + [17]="Подтвердите воÑÑтановление ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð›ÐŸÐ¢", + [18]="Подтвердите отмену зонного оборота", + } + local menusReset = { + {"Проверка","ÑкатываниÑ"}, + {"Движение","без КД"}, + "Смена линии", + "Транзит", + {"Движение"," при Vд=0"}, + {"Открытие дверей","на перегоне"}, + {"Движение","без ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð›ÐŸÐ¢"}, + "Оборот", + [11]="Закрыть" + } + + local errors = { + "Открой правые двери", + "Открой левые двери", + "Переведи РР вперед", + "Ðет ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Ðет ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Ðет блокировки дверей", + "Разблокируй двери", + "Ðе открыл двери! ПодтвердиÑÑŒ ПБ", + "ÐеÑработка ДКП! ЗафикÑируйте Ñтанцию", + "ОтпуÑти пневмотормоз", + "Выключите тумблер ВЗП", + "Движение при Vд=0", + "Ðет набора ÑкороÑти", + "Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° ÑброÑьте Ñ Ñ…Ð¾Ð´Ð°", + "Доложи диÑпетчеру Vд=0", + "Выход на линию", + "УÑтанови реверÑивную рукоÑтку", + "Ðеобходимо дополнительное включение", + "РР в другой голове", + "Переход в ОС", + "Переход в КС", + "ПоÑтоÑнное Ñлектропитание на КДЛ/КДП", + "Введён транзит", + "ОтÑутÑтвует КСОТ", + "Оборот", + "Режим ОС", + "Открой двери Ñтанции", + "Перейди в КС", + "Ðет Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ñ Ð½Ð° 34 проводе(ЛКТ)", + "ЕÑть притание на 34 проводе", + + [51]={"Контроль дверей отменён"}, + [52]={"Контроль дверей воÑÑтановлен"}, + [53]={"Движение по Ñтанционным","путÑм запрещено",true}, + [54]={"Разрешено движение","при Vд = 0"}, + [55]={"Движение по Ñтанционным","путÑм разрешено"}, + [56]={"Открытие дверей на","перегоне разрешено"}, + [57]={"Открытие дверей на","перегоне запрещено",true}, + [58]={"Контроль ЛПТ отменён"}, + [59]={"Контроль ЛПТ","воÑÑтановлен"}, + [60]={"Движение под оборот","разрешено"}, + [61]={"Движение под оборот","запрещено",true}, + [62]={"Оборот отменён"}, + [63]={"Транзит разрешён"}, + [64]={"Транзит запрещён",true}, + [65]={"Транзит отменён"}, + [66]={"ОÑаживание при пожаре","разрешено"}, + [67]={"ОÑаживание при пожаре","запрещено",true}, + [68] = {"Режим КС разрешён"}, + [69] = {"Режим КС запрещён",true}, + [70] = {"Режим ОС разрешён"}, + [71]={"Движение по Ñтанционным","путÑм",true}, + } + local state5 = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state5_main") + local state5k = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state5k_main") + local state5b = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state5b_main") + local state5kb = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state5kb_main") + local question = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/question") + local function State5(Train) + local speed = Train:GetNW2Int("PAM:Vf") + local mode = Train:GetNW2Int("PAM:Mode",0) + local currentStation = Train:GetNW2String("PAM:CurrentStation") + local targetStation = Train:GetNW2String("PAM:TargetStation") + local Vd = Train:GetNW2Int("PAM:Vd") + local speedLimit = Train:GetNW2Int("PAM:SpeedLimit") + + local driveMode = Train:GetNW2Int("PAM:DriveMode",0) + local KVMode = Train:GetNW2Int("PAM:KVMode",0) + + local state = Train:GetNW2Int("PAM:State5",-1) + local stateAcc = Train:GetNW2Int("PAM:State5Accept",0) + local sel = Train:GetNW2Int("PAM:Selected",1) + local block = state~=-1 or stateAcc~=0 + + local ksd = Train:GetNW2Bool("PAM:KSD") + + surface.SetDrawColor(1,54,2) + surface.DrawRect(2,70,541,35) + if Train:GetNW2Bool("PAM:OXT") then + drawSpeed(3,71,542/100*speed-5,33,Color(240,240,40)) + else + drawSpeed(3,71,542/100*speed-5,33,Color(40,220,40)) + end + if block then + drawFrame(ksd and state5kb or state5b) + else + drawFrame(ksd and state5k or state5) + end + + + draw.SimpleText("28.08.2012","Metrostroi_PAM24",57,11, Color(199,199,199),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("12:38:19","Metrostroi_PAM28",59,32, Color(199,199,199),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + --Train:GetNW2Int("PAM:Vf") + --Train:GetNW2Int("PAM:Vd") + --Train:GetNW2String("PAM:RC") + --Train:GetNW2Float("PAM:S") + --Ð›Ð¸Ð½Ð¸Ñ + draw.SimpleText(Train:GetNW2String("PAM:Line"),"Metrostroi_PAM28",239,13, Color(222,234,58),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --Путь + draw.SimpleText(Train:GetNW2String("PAM:Path"),"Metrostroi_PAM28",371,13, Color(222,234,58),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + --Ð¢ÐµÐºÑƒÑ‰Ð°Ñ + draw.SimpleText(speed,"Metrostroi_PAM45",605,67, Color(20,239,32),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + --Ограничение + if speedLimit == -1 then + draw.SimpleText("ÐЧ","Metrostroi_PAM45",605,104, Color(232,13,12),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + elseif speedLimit <= 20 then + draw.SimpleText(speedLimit,"Metrostroi_PAM45",605,104, Color(232,13,12),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + else + draw.SimpleText(speedLimit,"Metrostroi_PAM45",605,104, Color(246,242,0),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + end + + if Train:GetNW2Bool("PAM:State5_5") then draw.SimpleText("Vд=0","Metrostroi_PAM28",145,70, Color(225,235,110),TEXT_ALIGN_CENTER,TEXT_ALIGN_BOTTOM) end + if Train:GetNW2Bool("PAM:State5_2") then draw.SimpleText("КД","Metrostroi_PAM28",195,70, Color(225,235,110),TEXT_ALIGN_CENTER,TEXT_ALIGN_BOTTOM) end + if Train:GetNW2Bool("PAM:State5_4") then draw.SimpleText("ТР","Metrostroi_PAM28",235,70, Color(225,235,110),TEXT_ALIGN_CENTER,TEXT_ALIGN_BOTTOM) end + if Train:GetNW2Bool("PAM:State5_8") then draw.SimpleText("ОБ","Metrostroi_PAM28",275,70, Color(225,235,110),TEXT_ALIGN_CENTER,TEXT_ALIGN_BOTTOM) end + if Train:GetNW2Bool("PAM:State5_3") then draw.SimpleText("СЛ","Metrostroi_PAM28",315,70, Color(225,235,110),TEXT_ALIGN_CENTER,TEXT_ALIGN_BOTTOM) end + if Train:GetNW2Bool("PAM:State5_7") then draw.SimpleText("ЛПТ","Metrostroi_PAM28",365,70, Color(225,235,110),TEXT_ALIGN_CENTER,TEXT_ALIGN_BOTTOM) end + if Train:GetNW2Bool("PAM:State5_6") then draw.SimpleText("ДП","Metrostroi_PAM28",420,70, Color(225,235,110),TEXT_ALIGN_CENTER,TEXT_ALIGN_BOTTOM) end + + if Vd == -1 then + draw.SimpleText("ÐЧ","Metrostroi_PAM24",5,122, Color(232,13,12),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(6,68,6,107,Color(246,242,0),3) + elseif Vd == 0 then + draw.SimpleText(0,"Metrostroi_PAM24",5,122, Color(232,13,12),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(6,68,6,107,Color(246,242,0),3) + elseif Vd <= 20 then + draw.SimpleText(0,"Metrostroi_PAM24",-4+5.47*20,122, Color(232,13,12),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(-5+5.47*20,68,-5+5.47*20,107,Color(246,242,0),3) + else + draw.SimpleText(speedLimit,"Metrostroi_PAM24",-4+5.47*speedLimit,122, Color(246,242,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(-5+5.47*speedLimit,68,-5+5.47*speedLimit,107,Color(246,242,0),3) + end + + local mess = Train:GetNW2Int("PAM:CurrentMessage",0) + if mode == 6 then + if mess==0 then mess = 21 end + elseif mode == 3 then + draw.SimpleText("T = 00:00:00","Metrostroi_PAM31",0,412, Color(20,239,32),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("пр","Metrostroi_PAM15",20,416, Color(20,239,32),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("Ðагон= 0 Ñ"),"Metrostroi_PAM28",175,411, Color(20,239,32),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("T ="),"Metrostroi_PAM28",355,411, Color(20,239,32),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("оÑÑ‚","Metrostroi_PAM15",374,416, Color(20,239,32),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(math.Clamp(Train:GetNW2Int("PAM:BoardTime",0),-999,999),"Metrostroi_PAM28",443,411, Color(20,239,32),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("Ñ","Metrostroi_PAM28",470+3,411, Color(20,239,32),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("S=%.2fм",Train:GetNW2Float("PAM:S")),"Metrostroi_PAM31",639,412, Color(20,239,32),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + + if not Train:GetNW2Bool("PAM:Shunt") then + if mess == 0 then + draw.SimpleText(currentStation,"Metrostroi_PAM35",320,222, Color(20,239,32),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("%d путь",Train:GetNW2String("PAM:Path")),"Metrostroi_PAM35",320,258, Color(20,239,32),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + if targetStation=="оборот" then + draw.SimpleText("оборот","Metrostroi_PAM26",639,11, Color(154,154,154),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + else + draw.SimpleText(Format("до %s",targetStation),"Metrostroi_PAM26",639,11, Color(154,154,154),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + end + draw.SimpleText(currentStation,"Metrostroi_PAM25",639,34, Color(20,239,32),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + end + + elseif mode == 2 then + draw.SimpleText(Format("РЦ= %s",Train:GetNW2String("PAM:RC")),"Metrostroi_PAM31",0,412, Color(27,234,30),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + --draw.SimpleText(Format("Пикет="),"Metrostroi_PAM28",141,411, Color(27,234,30),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("Уклон= %d",Train:GetNW2Int("PAM:Slope",0)),"Metrostroi_PAM28",349,411, Color(27,234,30),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("S=%.2fм",Train:GetNW2Float("PAM:S")),"Metrostroi_PAM31",639,412, Color(27,234,30),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("до %s",targetStation),"Metrostroi_PAM26",639,11, Color(154,154,154),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + draw.SimpleText(currentStation,"Metrostroi_PAM25",639,34, Color(154,154,154),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + elseif mode == 4 or mode == 5 then + draw.SimpleText("РЦ= ","Metrostroi_PAM31",0,412, Color(27,234,30),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + --draw.SimpleText(Format("Пикет="),"Metrostroi_PAM28",141,411, Color(27,234,30),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("Уклон=","Metrostroi_PAM28",349,411, Color(27,234,30),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("S=%.2fм",Train:GetNW2Float("PAM:S")),"Metrostroi_PAM31",639,412, Color(27,234,30),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + draw.SimpleText(mode == 5 and "депо" or "оборот","Metrostroi_PAM26",639,11, Color(154,154,154),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + draw.SimpleText(currentStation,"Metrostroi_PAM25",639,34, Color(154,154,154),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + else + draw.SimpleText("РЦ=","Metrostroi_PAM31",0,412, Color(27,234,30),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + --draw.SimpleText("Пикет=","Metrostroi_PAM28",141,411, Color(27,234,30),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("Уклон=","Metrostroi_PAM28",349,411, Color(27,234,30),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("S=1337.00м","Metrostroi_PAM31",639,412, Color(27,234,30),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + draw.SimpleText("выход на линию","Metrostroi_PAM26",639,11, Color(154,154,154),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + draw.SimpleText(currentStation,"Metrostroi_PAM25",639,34, Color(154,154,154),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + end + if mess>0 then + local mess = errors[50+mess] + if #mess == 1 or #mess==2 and mess[2]==true then + draw.SimpleText(mess[1],"Metrostroi_PAM35",320,240, mess[2] and Color(238,129,31) or Color(20,239,32),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText(mess[1],"Metrostroi_PAM35",320,222, mess[3] and Color(238,129,31) or Color(20,239,32),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(mess[2],"Metrostroi_PAM35",320,258, mess[3] and Color(238,129,31) or Color(20,239,32),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + local err = Train:GetNW2Int("PAM:CurrentError",0) + if err>0 then + draw.SimpleText(errors[err],"Metrostroi_PAM31",10,385, Color(225,235,110),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + + --local function draw + draw.SimpleText("1 ÐÐ’","Metrostroi_PAM29",3,173, Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(4,173+14,15,173+14,Color(206,206,206),3) + draw.SimpleText("1 ÐÐ’","Metrostroi_PAM29",2,172, Color(140,140,140),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(3,172+14,15,172+14,Color(140,140,140),3) + draw.SimpleText("7 Лин","Metrostroi_PAM29",570+1,262+1, Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(570,262+14+1,583,262+14+1,Color(206,206,206),3) + draw.SimpleText("7 Лин","Metrostroi_PAM29",570,262, Color(140,140,140),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(570,262+14,583,262+14,Color(140,140,140),3) + for i=block and 1 or 0,0,-1 do + local blocked = i==0 and block + draw.SimpleText("2 КС","Metrostroi_PAM29",2+i,218+i, ((driveMode==2 or driveMode==4) and i==0) and Color(85,75,225) or blocked and Color(140,140,140) or Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(3,218+14+i,15,218+14+i,((driveMode==2 or driveMode==4) and i==0) and Color(85,75,225) or blocked and Color(140,140,140) or Color(206,206,206),3) + if ksd then + draw.SimpleText("3 ОС","Metrostroi_PAM29",2+i,264+i, ((driveMode==1 or driveMode==5) and i==0) and Color(85,75,225) or blocked and Color(140,140,140) or Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(3,264+14+i,15,264+14+i,((driveMode==1 or driveMode==5) and i==0) and Color(85,75,225) or blocked and Color(140,140,140) or Color(206,206,206),3) + end + draw.SimpleText("P Маш","Metrostroi_PAM29",2+i,305+i, blocked and Color(140,140,140) or Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(3,304+14+i,17,304+14+i,blocked and Color(140,140,140) or Color(206,206,206),3) + + + draw.SimpleText("4 СтП","Metrostroi_PAM29",570+i,170+i, blocked and Color(140,140,140) or Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(570,170+14+i,583,170+14+i,blocked and Color(140,140,140) or Color(206,206,206),3) + draw.SimpleText("6 Пож","Metrostroi_PAM29",570+i,216+i, (Train:GetNW2Bool("PAM:State5_-6") and i==0) and Color(85,75,225) or blocked and Color(140,140,140) or Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(570,216+14+i,583,216+14+i,(Train:GetNW2Bool("PAM:State5_-6") and i==0) and Color(85,75,225) or blocked and Color(140,140,140) or Color(206,206,206),3) + --draw.SimpleText("7 Лин","Metrostroi_PAM29",570+i,262+i, blocked and Color(140,140,140) or Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + --Metrostroi.DrawLine(570,262+14+i,583,262+14+i,blocked and Color(140,140,140) or Color(206,206,206),3) + draw.SimpleText("8 Отм","Metrostroi_PAM29",570+i,308+i, blocked and Color(140,140,140) or Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(570,308+14+i,583,308+14+i,blocked and Color(140,140,140) or Color(206,206,206),3) + draw.SimpleText("9 ФСт","Metrostroi_PAM29",570+i,354+i, (mode == 3 and i==0) and Color(85,75,225) or blocked and Color(140,140,140) or Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(570,354+14+i,583,354+14+i,(mode == 3 and i==0) and Color(85,75,225) or blocked and Color(140,140,140) or Color(206,206,206),3) + end + if state==0 then + surface.SetDrawColor(192,192,192,255) + surface.DrawRect(0,119,636,248,0) + for i,text in pairs(menus) do + local color = i==3 and Color(113,113,113) or i==sel and Color(255,255,255) or Color(0,0,0) + + local x,y = 212*((i-1)%3),119+(math.ceil(i/3)-1)*62 + drawButton(x,y,212,62, i==sel and button_s or button) + if type(text)=="table" then + draw.SimpleText(text[1],"Metrostroi_PAM21",x+106+10,y+31-12, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(text[2],"Metrostroi_PAM21",x+106+10,y+31+12, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText(text,"Metrostroi_PAM21",x+106+10,y+31, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + if i<12 then + draw.SimpleText(i%10,"Metrostroi_PAM35",x+17,y+31, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(x+10,y+48,x+24,y+48,color,3) + end + end + end + if state==8 then + drawWindow(0,120, 640,241,"Зонный оборот") + local count = Train:GetNW2Int("PAM:ElemCount",0) + for i=1,math.min(9,Train:GetNW2String("PAM:ElemCount",0)) do + local selected = i==sel + local color = selected and Color(255,255,255) or Color(0,0,0) + + local x,y = 4+210*((i-1)%3),152+(math.ceil(i/3)-1)*50 + drawButton(x,y,210,50, selected and button_s or button) + local text = Train:GetNW2String("PAM:Elem"..i) + draw.SimpleText(text:sub(1,-2),selected and "Metrostroi_PAM20" or "Metrostroi_PAM21",x+106+10,y+24-10, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + if text[#text]=="1" then + draw.SimpleText("(непр) оборот",selected and "Metrostroi_PAM20" or "Metrostroi_PAM21",x+106+10,y+24+10, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText("оборот",selected and "Metrostroi_PAM20" or "Metrostroi_PAM21",x+106+10,y+24+10, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + draw.SimpleText(i%10,"Metrostroi_PAM31",x+17,y+24, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(x+10,y+37,x+24,y+37,color,2) + --x+28+18*i Train:SetNW2String("PAM:Elem"..iS,id.."\t"..(name or id)) + end + buttonWTextC(4+210*1.5-145,152+3*50,140,50,"Да - Enter","Metrostroi_PAM25",Color(0,0,0),Train:GetNW2Bool("PAM:KeyEnter") and button_p or button) + buttonWTextC(4+210*1.5+5,152+3*50,140,50,"Ðет - Esc","Metrostroi_PAM25",Color(0,0,0),Train:GetNW2Bool("PAM:KeyEsc") and button_p or button) + if Train:GetNW2Bool("PAM:ElemCountStart") then + buttonWTextC(4+210*0,152+3*50,80,50,"â—„","Metrostroi_PAM25",Color(0,0,0),Train:GetNW2Bool("PAM:KeyLeft") and button_p or button) + end + if Train:GetNW2Bool("PAM:ElemCountEnd") then + buttonWTextC(4+210*3-80,152+3*50,80,50,"â–º","Metrostroi_PAM25",Color(0,0,0),Train:GetNW2Bool("PAM:KeyRight") and button_p or button) + end + end + if state==-8 then + drawWindow(0,120, 640,241,"Введенные запроÑÑ‹") + for i,text in pairs(menusReset) do + if Train:GetNW2Bool("PAM:State5_"..i) or i==11 then + local selected = i==sel + local disabled = i==5 or i==6 + local color = disabled and Color(113,113,113) or selected and Color(255,255,255) or Color(0,0,0) + + local x,y = 4+210*((i-1)%3),152+(math.ceil(i/3)-1)*50 + drawButton(x,y,209,49, selected and button_s or button) + if type(text)=="table" then + draw.SimpleText(text[1],selected and "Metrostroi_PAM20" or "Metrostroi_PAM21",x+106+10,y+24-10, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(text[2],selected and "Metrostroi_PAM20" or "Metrostroi_PAM21",x+106+10,y+24+10, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText(text,selected and "Metrostroi_PAM20" or "Metrostroi_PAM21",x+106+10,y+24, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + if i<11 and not disabled then + draw.SimpleText(i%10,"Metrostroi_PAM31",x+17,y+24, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(x+10,y+37,x+24,y+37,color,2) + end + end + end + Metrostroi.DrawLine(4,202,640-8,202,Color(113,113,113),2) + Metrostroi.DrawLine(4,252,640-8,252,Color(113,113,113),2) + Metrostroi.DrawLine(4,302,640-8,302,Color(113,113,113),2) + Metrostroi.DrawLine(214,154,214,351,Color(113,113,113),2) + Metrostroi.DrawLine(424,154,424,351,Color(113,113,113),2) + end + if state==1 then + drawWindow(82,160, 484,180,"Режим проверки ÑкатываниÑ") + buttonWTextC(139,270,370,50,"Завершить Ñкатывание (Esc)","Metrostroi_PAM30",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEsc") and button_p or button) + local dist = Train:GetNW2Float("PAM:RollDist",0) + draw.SimpleText("Скатывание на","Metrostroi_PAM30",110,225, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + + draw.SimpleText(Format("%.2f",dist),"Metrostroi_PAM35",380,225, Color(0,0,0),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + + draw.SimpleText("м","Metrostroi_PAM30",395,225, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if dist >= 0 then + draw.SimpleText("вперед","Metrostroi_PAM30",440,225, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + draw.SimpleText("назад","Metrostroi_PAM30",440,225, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + elseif state==9 then + local selected = Train:GetNW2String("PAM:Touching") ~= "" + local keyboard = Train:GetNW2Bool("PAM:Keyboard") + + drawWindow(keyboard and 82+130 or 82,145,keyboard and 484-(130-40) or 484,261,"ФикÑÐ°Ñ†Ð¸Ñ Ñтанции") + local sel = Train:GetNW2Int("PAM:Selected",1) + local xadd = keyboard and 1 or 0 + if keyboard then + draw.SimpleText("СтанциÑ","Metrostroi_PAM27",99+130,201, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("Путь","Metrostroi_PAM27",99+130,201+39, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + draw.SimpleText("Код Ñтанции","Metrostroi_PAM27",99,201, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("Ðомер пути","Metrostroi_PAM27",99,201+39, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + drawTextBox(322+40*xadd,190+39*0,229,31,Train:GetNW2String("PAM:StationS",""),"Metrostroi_PAM30",not selected and sel == 1 and Color(79,252,246)) + drawTextBox(322+40*xadd,190+39*1,229,31,Train:GetNW2String("PAM:PathS",""),"Metrostroi_PAM30",not selected and sel == 2 and Color(79,252,246)) + local err = Train:GetNW2String("PAM:EnterError","") + if err ~= "" then draw.SimpleText(err,"Metrostroi_PAM30",325+xadd*90,275, Color(213,18,8),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + local currStation = Train:GetNW2String("PAM:CurrentStationS") + if currStation ~= "" then draw.SimpleText(currStation,"Metrostroi_PAM30",325+xadd*90,301, Color(0,165,13),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + + buttonWTextC(190+xadd*39,320,75+xadd*65,50,"Ввод","Metrostroi_PAM30",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEnter") and button_p or button) + buttonWTextC(288+xadd*(42+39+10),320,120+xadd*20,50,"Закрыть","Metrostroi_PAM30",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEsc") and button_p or button) + + if Train:GetNW2Bool("PAM:KeyKeyB") or keyboard then drawButton(501+xadd*40,320,40,51, keyboard and button_p or button) end + surface.SetDrawColor(255,255,255) + surface.SetTexture(keyb_icon) + surface.DrawTexturedRect(505+xadd*40,314,32,64) + + if sel==1 then comboBox(Train,320+40*xadd,200+29*1) end + if keyboard then drawKeyboard(Train,10,47,selected) end + end + if stateAcc ~= 0 then + local text = acceptions[stateAcc] + surface.SetFont("Metrostroi_PAM21") + local y,x=21 + if type(text) == "table" then + x = surface.GetTextSize(text[1]) + y=42 + else x = surface.GetTextSize(text) end + drawWindow(320-x/2-36,240-72-16,x+72,128+y+16,"Подтверждение") + surface.SetTexture(question) + surface.DrawTexturedRect(296-x/2,200,32,32) + if type(text) == "table" then + draw.SimpleText(text[1],"Metrostroi_PAM21",336-x/2,210, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(text[2],"Metrostroi_PAM21",336-x/2,210+21, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + draw.SimpleText(text,"Metrostroi_PAM21",336-x/2,210, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + + buttonWTextC(194,219+y,120,50,"Да - Enter","Metrostroi_PAM21",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEnter") and button_p or button) + buttonWTextC(326,219+y,120,50,"Ðет - Esc","Metrostroi_PAM21",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEsc") and button_p or button) + end + + + drawText2(201,441,Format("%s = %s",driveModes[driveMode],KVModes[KVMode]),true) + + local VZ = Train:GetNW2Int("PAM:V",0) + if VZ > 0 then + drawText2(307,441,"Ð’"..VZ,true) + elseif VZ==-1 then + drawText2(307,441,"ЭПК",true) + else + drawText2(307,441,"Ð’",false) + end + + drawText2(386,441,"ЛПТ",Train:GetNW2Bool("PAM:LPT")) + local KD = Train:GetNW2Int("PAM:KD",2) + if KD == 2 then + drawText2(465,441,"КД",true,Color(213,15,15)) + elseif KD==1 then + drawText2(465-1,441-1,"КД",false,Color(238,129,31)) + else + drawText2(465,441,"КД",true,Color(0,0,0)) + end + + if ksd then + drawText2(320,467,"Зона ОПВ",Train:GetNW2Bool("PAM:OPV")) + else + drawText2(181.5,467,"ÐРС",Train:GetNW2Bool("PAM:KVARS")) + drawText2(273.5,467,"ПСР",false) + drawText2(365.5,467,"ВРД",Train:GetNW2Bool("PAM:VRD")) + drawText2(458,467,"ОПВ",Train:GetNW2Bool("PAM:OPV")) + end + end + local function drawBlink_(x,y) if CurTime()%0.4 > 0.2 then draw.SimpleText("_","Metrostroi_PAM30",x, y,Color(150,150,150),TEXT_ALIGN_LEFT,TEXT_ALIGN_BOTTOM) end end + local bios_splash = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/bios_splash") + local splash = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/splash") + local splash_egg = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/splash_egg") + function TRAIN_SYSTEM:PAMScreen(Train) + --surface.SetTexture(splash_egg) + --surface.SetDrawColor(255,255,255) + --surface.DrawTexturedRectRotated(512,256,1024,512,0) + + local state = Train:GetNW2Float("PAM:State",0) + + if state ~= 0 and state ~= -1 and state ~= -0.5 then + surface.SetDrawColor(50,50,50,100) + surface.DrawRect(0,0,640,480,0) + if state == -100 then stateDebug(Train) end + if state < 0 then + local time = Train:GetNW2Float("PAM:StartTimer",0) + if state == -2 then + if time > 0.4 then drawBlink_(620,440) else drawBlink_(5,20) end + end + if state == -3 then drawFrame(bios_splash) end + if state == -4 then + if time > 0.5 then drawBlink_(5,40) else drawBlink_(5,20) end + end + if state == -5 then drawFrame(splash) end + end + + if state == 1 then State1(Train) end + if state == 1.5 then State1_5(Train) end + if state == 2 then State2(Train) end + if state == 3 then State3(Train) end + if state == 3.5 then State35(Train) end + if state == 4 then State4(Train) end + if state == 5 then State5(Train) end + surface.SetDrawColor(0,0,0,150) + surface.DrawRect(0,0,640,480,0) + end + end + return +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "KSDMode" then self.PAKSD = value>0 end +end + +function TRAIN_SYSTEM:UpdateStationList(entered,id) + local Train = self.Train + if not entered or #entered < 1 or #entered > 2 then + Train:SetNW2Int("PAM:ElemCount",0) + self.ScrollCount = 0 + self.Scroll = 0 + return + end + local iS = 0 + if #entered < 3 then + local line = tonumber(entered[1]) + local tbl = Metrostroi.PAMStations[line] + if id then + if tbl then + for k,station in ipairs(tbl) do + if string.find(tostring(station.id),"^"..entered) then + if iS < 8+self.Scroll and iS >= self.Scroll and (iS+1-self.Scroll)==id then + return station.id + end + iS = iS + 1 + end + end + end + return + else + self.LineS = line + if tbl then + for k,station in ipairs(tbl) do + if string.find(tostring(station.id),"^"..entered) then + if iS < 8+self.Scroll and iS >= self.Scroll then + local id,name = station.id,station.name + Train:SetNW2String("PAM:Elem"..(iS+1-self.Scroll),id.."\t"..(name or id)) + end + iS = iS + 1 + end + end + end + end + end + Train:SetNW2Int("PAM:ElemCount",math.min(8,iS)) + self.ScrollCount = iS + self.Scroll = math.Clamp(self.Scroll,0,math.max(0,self.ScrollCount-8)) + --end +end +function TRAIN_SYSTEM:UpdateLastStationList() + local Train = self.Train + local iS = 0 + local dist = self.Distance + local line = self.Line + local path = tonumber(self.Path) + local tbl = Metrostroi.PAMConfTest and Metrostroi.PAMConfTest[line] and Metrostroi.PAMConfTest[line][path] + if not tbl then return end + self.Scroll = math.Clamp(self.Scroll,0,math.max(0,math.ceil(((self.ScrollCount or 0)-9)/9)*9)) + self.DeadlockS = nil + local curr + if self.Mode==2 or self.Mode==3 and not self.Shunt then + for i,stat in ipairs(tbl[1].stations) do + if i<#tbl[1].stations then + if not curr and tostring(self.Station)==tostring(stat.id) then + curr=i + end + if curr and i>=curr and stat.isLast then + if iS < 9+self.Scroll and iS >= self.Scroll then + local id = (iS+1-self.Scroll) + Train:SetNW2String("PAM:Elem"..id,stat.name..(stat.isInWrong and 1 or 0)) + if self.Selected == id then self.DeadlockS = stat end + end + iS = iS + 1 + end + end + end + end + if self.Selected>0 and self.DeadlockS == nil then self.Selected = 0 end + Train:SetNW2Int("PAM:ElemCount",math.min(10,iS-self.Scroll)) + Train:SetNW2Bool("PAM:ElemCountStart",self.Scroll>=9) + Train:SetNW2Bool("PAM:ElemCountEnd",(iS-self.Scroll)>9) + self.ScrollCount = iS + self.Scroll = math.Clamp(self.Scroll,0,math.max(0,math.ceil((self.ScrollCount-9)/9)*9)) + --end +end +function TRAIN_SYSTEM:Trigger(name,value,press) + local Train = self.Train + Train:SetNW2Bool("PAM:Key"..name,value) + if press and value then + self.Train:PlayOnce("pa_"..name:lower(),"bass",1) + end + if name == "KeyB" and not value then self.Keyboard = not self.Keyboard end + if self.State == 1 and not value then + if name == "Esc" then + self.State = 1.5 + self:SetWaitTimer(0.1) + end + if name == "Enter" and self.GoodSetup and self.ReverserWrench then + self.State = 2 + self:SetWaitTimer(0.1) + self.Selected = 1 + + self.LineS = self.LineS or self.Line + self.PathS = self.PathS or self.Path + self.StationS = self.StationS or self.Station + self.RouteNumberS = self.RouteNumberS or self.RouteNumber + self.DriverNumberS = self.DriverNumberS or self.DriverNumber + + self.HaveRestart = #self.DriverNumber == 4 and #self.RouteNumber == 3 + and Metrostroi.PAMConfTest[self.Line] + and Metrostroi.PAMConfTest[self.Line][tonumber(self.Path)] + and Metrostroi.PAMStations[self.Line][tonumber(self.Station)] + Train:SetNW2Bool("PAM:HaveRestart",self.HaveRestart) + end + elseif self.State == 1.5 and name == "Esc" and not value then + self.State = 1 + self:SetWaitTimer(0.1) + elseif self.State == 2 then + if name == "Down" and value then + self.Selected = self.Selected < 4 and self.Selected+1 or 1 + if not self.HaveRestart and self.Selected == 2 then self.Selected = 3 end + end + if name == "Up" and value then + self.Selected = self.Selected > 1 and self.Selected-1 or 4 + if not self.HaveRestart and self.Selected == 2 then self.Selected = 1 end + end + if name == "1" and value then self.Selected = 1 end + if name == "2" and self.HaveRestart and value then self.Selected = 2 end + if name == "Esc" and value then self.Selected = 3 end + if name == "M" and value then self.Selected = 4 end + if (name == "Esc" or name == "Enter") and not value and self.Selected == 3 then + self.State = 1 + self:SetWaitTimer(0.1) + end + if (name == "1" or name == "Enter") and not value and self.Selected == 1 then + self.State = 3 + self.KeyboardX,self.KeyboardY = 22,47 + self:SetWaitTimer(0.1) + self.Selected = 1 + self.StationS = "" + self.PathS = "" + self.RouteNumberS = "" + self.DriverNumberS = "" + Train:SetNW2String("PAM:EnterError","") + end + if self.HaveRestart and (name == "2" or name == "Enter") and not value and self.Selected == 2 then + self.State = 3.5 + self.KeyboardX,self.KeyboardY = 22,47 + self:SetWaitTimer(0.1) + self.Selected = 1 + self.StationS = tostring(self.StationS) + self.PathS = tostring(self.PathS) + self.RouteNumberS = tostring(self.RouteNumberS) + self.DriverNumberS = tostring(self.DriverNumberS) + Train:SetNW2String("PAM:EnterError","") + end + if (name == "M" or name == "Enter") and not value and self.Selected == 4 then + self.State = 2 + self:SetWaitTimer(0.1) + end + elseif self.State == 3 then + if name == "Down" and value then self.Selected = self.Selected < 4 and self.Selected+1 or 1 end + if name == "Up" and value then self.Selected = self.Selected > 1 and self.Selected-1 or 4 end + local num = tonumber(name) + if num and value then + if self.Selected == 1 and #self.StationS < 3 then + self.StationS = self.StationS..num + self.Scroll = 0 + self:UpdateStationList(self.StationS) + end + if self.Selected == 2 and #self.PathS < #tostring(Metrostroi.LineCount) then self.PathS = self.PathS..num end + if self.Selected == 3 and #self.RouteNumberS < 3 then self.RouteNumberS = self.RouteNumberS..num end + if self.Selected == 4 and #self.DriverNumberS < 4 then self.DriverNumberS = self.DriverNumberS..num end + end + if name == "Left" and value then + if self.Selected == 1 then + self.StationS = self.StationS:sub(1,-2) + self.Scroll = 0 + self:UpdateStationList(self.StationS) + end + if self.Selected == 2 then self.PathS = self.Path:sub(1,-2) end + if self.Selected == 3 then self.RouteNumberS = self.RouteNumberS:sub(1,-2) end + if self.Selected == 4 then self.DriverNumberS = self.DriverNumberS:sub(1,-2) end + end + if name == "Esc" and not value then + self.State = 2 + self:SetWaitTimer(0.1) + end + if name == "Enter" and not value then + if #self.StationS < 3 or not Metrostroi.PAMStations[self.LineS] or not Metrostroi.PAMStations[self.LineS][tonumber(self.StationS)] then + Train:SetNW2String("PAM:EnterError","Ðеверный номер Ñтанции") + elseif #self.PathS < #tostring(Metrostroi.LineCount) or not Metrostroi.PAMConfTest[self.LineS][tonumber(self.PathS)] then + Train:SetNW2String("PAM:EnterError","Ðеверный номер пути") + elseif #self.RouteNumberS < 3 then + Train:SetNW2String("PAM:EnterError","Ðеверный номер маршрута") + elseif #self.DriverNumberS < 4 then + Train:SetNW2String("PAM:EnterError","Ðеверный табельный номер") + else + self.Line = self.LineS + self.Station = self.StationS + self.Path = self.PathS + self.RouteNumber = self.RouteNumberS + self.drivernumber = self.DriverNumberS + self.StationS = nil + self.PathS = nil + self.RouteNumberS = nil + self.DriverNumberS = nil + + self.State = 4 + self.CheckRing = true + self:SetWaitTimer(0.1) + self.StationTable,self.PrevStationTable = self:FindStation(self.Line,self.Path,self.Station) + self.LastStationTable = self:FindLastStation() + end + end + elseif self.State == 3.5 then + if name == "Down" and value then self.Selected = self.Selected < 2 and self.Selected+1 or 1 end + if name == "Up" and value then self.Selected = self.Selected > 1 and self.Selected-1 or 2 end + local num = tonumber(name) + if num and value then + if self.Selected == 1 and #self.StationS < 3 then + self.StationS = self.StationS..num + self.Scroll = 0 + self:UpdateStationList(self.StationS) + end + if self.Selected == 2 and #self.PathS < 1 then self.PathS = self.PathS..num end + end + if name == "Left" and value then + if self.Selected == 1 then + self.StationS = self.StationS:sub(1,-2) + self.Scroll = 0 + self:UpdateStationList(self.StationS) + end + if self.Selected == 2 then self.PathS = self.PathS:sub(1,-2) end + end + if name == "Esc" and not value then + self.State = 2 + self:SetWaitTimer(0.1) + end + if name == "Enter" and not value then + if #self.StationS < 3 or not Metrostroi.PAMStations[self.LineS] or not Metrostroi.PAMStations[self.LineS][tonumber(self.StationS)] then + Train:SetNW2String("PAM:EnterError","Ðеверный номер Ñтанции") + elseif #self.Path < #tostring(Metrostroi.LineCount) or not Metrostroi.PAMConfTest[self.Line][tonumber(self.PathS)] then + Train:SetNW2String("PAM:EnterError","Ðеверный номер пути") + else + self.Station = self.StationS + self.Path = self.PathS + self.StationS = nil + self.PathS = nil + + self.State = 5 + self.EPKActive = true + self.ControlMode = 2 + self:SetWaitTimer(0.1) + self.Mode = 1--Выход на линию + self.Distance = 1000 + self.StationTable,self.PrevStationTable = self:FindStation(self.Line,self.Path,self.Station) + self.LastStationTable = self:FindLastStation() + self.SensorError = false + end + end + elseif self.State == 4 and not self.CheckRing and not self.Stopping and name == "Enter" and not value then + self.State = 5 + self.EPKActive = 1 + self.ControlMode = 2 + self:SetWaitTimer(0.1) + self.Mode = 1--Выход на линию + self.Distance = 1000 + self.SensorError = false + elseif self.State == 5 then + local char = tonumber(name) + --if char and not value and self.Selected == char then self.State5 = char+1 end + if self.State5Accept then + local PAM_VV = Train.PAM_VV + if name == "Enter" and not value then + if self.State5Accept == 2 then + self.NoKD = true + self:Message(1) + elseif self.State5Accept == 4 then + if self.Mode == 2 or self.Mode == 3 then + self.Transit = true + self:Message(13) + else + self:Message(14) + end + elseif self.State5Accept == 5 and self.ZeroStopped then + self.Vd0 = true + self:Message(4) + elseif self.State5Accept == 6 then + if self.Speed<2.5 and (PAM_VV.LPT>0 or self.NoLPT or PAM_VV.V1>0) then + self.OpenDoors = true + self:Message(6) + else + self.OpenDoors = false + self:Message(7) + end + elseif self.State5Accept == -6 then + local prev = self:FindPrevStation() + if self.StationTable and self.StationTable~=prev and self.Speed<0.2 then + self.FireBack = prev + self:Message(16) + else + self.FireBack = false + self:Message(17) + end + elseif self.State5Accept == -1 then + --AV + elseif self.State5Accept == -2 then + if PAM_VV.KSOT == 0 or not self.ControlMode2 then + self:Error(24,true,7,true) + self:Message(19) + else + self.ControlMode=2 + self.ControlModeAuto = false + self:Message(18) + end + elseif self.State5Accept == -3 then + self.ControlMode=1 + self.ControlModeAuto = false + self:Message(20) + elseif self.State5Accept == -4 then + if self.Speed<0.2 and (self.StationTable.isLast or self.StationTable.hasSwitches) then + self:Message(5) + self.Shunt = true + else + self:Message(3) + end + elseif self.State5Accept == 7 then + self.NoLPT = true + self:Message(8) + elseif self.State5Accept == 12 then + self.NoKD = false + self:Message(2) + elseif self.State5Accept == 14 then + self.Transit = false + self:Message(15) + elseif self.State5Accept == 15 then self.Vd0 = false + elseif self.State5Accept == 16 then self.OpenDoors = false + elseif self.State5Accept == 17 then + self.NoLPT = false + self:Message(9) + elseif self.State5Accept == 18 then + self.Deadlock = nil + self:Message(12) + else + self.State5 = self.State5Accept + if self.State5 == 8 then + self.Selected = 0 + self.Scroll = 0 + self:UpdateLastStationList() + end + end + self.State5Accept = nil + end + if name == "Esc" and not value then self.State5 = nil self.State5Accept = nil end + elseif self.State5 == 0 then + if char and value and char ~= 3 then self.Selected = char end + if char and not value and char==self.Selected then + self.State5 = nil + if char == 9 then + self:Trigger("9",true) + self:Trigger("9",false) + else + self.State5Accept = char + end + end + if name == "Esc" and value then self.Selected = 12 end + if name == "Esc" and not value and self.Selected == 12 then self.State5 = nil end + elseif self.State5 == 8 then + if name == "Esc" and not value then + self.State5 = nil + self.DeadlockS = nil + end + if name == "Enter" and not value then + self.State5 = nil + if true or not self.Transit then + self.Deadlock = self.DeadlockS + self:Message(10) + else + self:Message(11) + end + end + if (name == "Left" or name == "Right") and not value then + self.Scroll = name == "Right" and self.Scroll+9 or math.max(self.Scroll-9,0) + self.Selected = 0 + self:UpdateLastStationList() + end + if char and value then + self.Selected = char + self:UpdateLastStationList() + end + elseif self.State5 == -8 then + local charAccept = char and Train:GetNW2Bool("PAM:State5_"..char) + if charAccept and value and (char~=5 and char~=6) then self.Selected = char end + if charAccept and not value and char==self.Selected then + self.State5 = nil + self.State5Accept = 10+char + end + if name == "Esc" and value then self.Selected = 11 end + if name == "Esc" and not value and self.Selected == 11 then self.State5 = nil end + elseif self.State5 == 1 then + if name == "Esc" and not value then + self.State5 = nil + Train:SetNW2Float("PAM:RollDist",0) + end + elseif self.State5 == 9 then + if name == "Down" and value then self.Selected = self.Selected < 2 and self.Selected+1 or 1 end + if name == "Up" and value then self.Selected = self.Selected > 1 and self.Selected-1 or 2 end + local num = tonumber(name) + if num and value then + if self.Selected == 1 and #self.StationS < 3 then + self.StationS = self.StationS..num + self.Scroll = 0 + self:UpdateStationList(self.StationS) + end + if self.Selected == 2 and #self.PathS < 1 then self.PathS = self.PathS..num end + end + if name == "Left" and value then + if self.Selected == 1 then + self.StationS = self.StationS:sub(1,-2) + self.Scroll = 0 + self:UpdateStationList(self.StationS) + end + if self.Selected == 2 then self.PathS = self.PathS:sub(1,-2) end + end + if name == "Esc" and not value then + self.State5 = nil + end + if name == "Enter" and not value then + if #self.StationS < 3 or not Metrostroi.PAMStations[self.Line] or not Metrostroi.PAMStations[self.Line][tonumber(self.StationS)] then + Train:SetNW2String("PAM:EnterError","Ðеверный номер Ñтанции") + elseif #self.Path < #tostring(Metrostroi.LineCount) or not Metrostroi.PAMConfTest[self.Line][tonumber(self.PathS)] then + Train:SetNW2String("PAM:EnterError","Ðеверный номер пути") + else + if self.Speed < 2.5 then + self.Station = self.StationS + self.Path = self.PathS + self.StationTable,self.PrevStationTable = self:FindStation(self.Line,self.Path,self.Station) + self.LastStationTable = self:FindLastStation() + self.Distance = self.StationTable.pos+0.001 + self.Mode = 3 + self.SensorError = false + self:FindSensor(self.Distance,true) + self.Transit = false + self.FireBack = false + self.Shunt = false + self.AntiMiss = false + end + self.StationS = nil + self.PathS = nil + self.State5 = nil + end + end + else + if name == "F" and value then + self.State5 = 0 + self.Selected = 1 + end + + --if name == "1" and value then self.State5Accept=-1 end + if name == "2" and value then self.State5Accept=-2 end + if name == "3" and value then self.State5Accept=-3 end + if name == "4" and value then self.State5Accept=-4 end + if name == "6" and value then self.State5Accept=-6 end + --if name == "7" and value then self.State5Accept=-7 end + if name == "8" and value then self.State5=-8 self.Selected = 0 end + if name == "9" and value then + self.State5=9 + self.Selected = 1 + self.StationS = ""--tostring(self.Station) + self.PathS = ""--tostring(self.Path) + self.KeyboardX,self.KeyboardY = 10,47 + Train:SetNW2String("PAM:EnterError","") + self:UpdateStationList(self.StationS) + end + end + end +end +local keys = { + "P", + "F" , "Up" , "M", + "Left","Down","Right", + "1" , "2" , "3", + "4" , "5" , "6", + "7" , "8" , "9", + "Esc" , "0" ,"Enter", +} +local acceptions = { + [-7] = 1, + [-6] = 1, + [-4] = 2, + [-3] = 1, + [-2] = 1, + [-1] = 1, + 1,1,1,1,1,1,1,1, + [11]=1, + [12]=1, + [13]=1, + [14]=1, + [15]=1, + [16]=2, + [17]=1, + [18]=1, +} +local acceptionsReset = { + 1,1,1,1,1,2,1,1, +} +function TRAIN_SYSTEM:Touch(value,x,y) + local Train = self.Train + Train:SetNW2String("PAM:Touching","") + if self.Keyboard and (self.State==3 or self.State==3.5 or self.State==5 and self.State5==9) then + for i,keyName in ipairs(keys) do + local key = i+1 + local xp = key%3 + local yp = math.floor(key/3) + if math.InRangeXYR(x,y,self.KeyboardX+5+60*xp,self.KeyboardY+33+49*yp,60,49) then + self.Touches[keyName] = true + Train:SetNW2String("PAM:LastToucn",keyName) + if value then Train:SetNW2String("PAM:Touching",keyName) end + break + end + end + end + if not value then + for k in pairs(self.Touches) do self.Touches[k] = false end + return + end + if self.State == 1 then + if value and math.InRangeXYR(x,y,542,self.ReverserWrench and 316 or 352,77,51) then self.Touches["Esc"] = true return end + if value and math.InRangeXYR(x,y,265,410,110,51) then self.Touches["Enter"] = true return end + elseif self.State == 1.5 then + if value and math.InRangeXYR(x,y,238,408,164,51) then self.Touches["Esc"] = true return end + elseif self.State == 2 then + if math.InRangeXYR(x,y,320-298,121+59*0,596,50) then self.Touches["1"] = true return end + if math.InRangeXYR(x,y,320-298,121+59*1,596,50) then self.Touches["2"] = true return end + if math.InRangeXYR(x,y,320-298,121+59*2,596,50) then self.Touches["Esc"] = true return end + if math.InRangeXYR(x,y,320-298,121+59*4+10,596,50) then self.Touches["M"] = true return end + elseif self.State == 3 or self.State == 3.5 then + if self.Selected==1 and self.ScrollCount and self.ScrollCount > 0 then + local xa,ya = 374,103+35*1 + if math.InRangeXYR(x,y,xa+219,ya+5,31,15) or math.InRangeXYR(x,y,xa+219,ya+128,31,14) then + self.Scroll = math.max(self.Scroll-1,0) + self:UpdateStationList(self.StationS) + return + elseif math.InRangeXYR(x,y,xa+219,ya+143,31,14) then + self.Scroll = math.Clamp(self.Scroll+1,0,math.max(0,self.ScrollCount-8)) + self:UpdateStationList(self.StationS) + return + end + + for i=1,math.min(8,self.ScrollCount) do + if math.InRangeXYR(x,y,xa+13,ya+27-10+18*(i-1)-9,200,17) then + local st = self:UpdateStationList(self.StationS,i) + self.StationS = st and tostring(st) or self.StationS + self:UpdateStationList(self.StationS) + return + end + end + else + for i=0,self.State==3.5 and 1 or 3 do + if math.InRangeXYR(x,y,374,103+35*i,210,35) then self.Selected = i+1 return end + end + end + if self.Keyboard then + if math.InRangeXYR(x,y,156+127,369,120,51) then self.Touches["Enter"] = true return end + if math.InRangeXYR(x,y,286+127,369,120,51) then self.Touches["Esc"] = true return end + if math.InRangeXYR(x,y,443+100,369,40,51) then self.Touches["KeyB"] = true return end + else + if math.InRangeXYR(x,y,156,369,120,51) then self.Touches["Enter"] = true return end + if math.InRangeXYR(x,y,286,369,120,51) then self.Touches["Esc"] = true return end + if math.InRangeXYR(x,y,443,369,40,51) then self.Touches["KeyB"] = true return end + end + elseif self.State == 4 and math.InRangeXYR(x,y,320-19,278,76,38) then + self.Touches["Enter"] = true + return + elseif self.State == 5 then + if self.State5Accept and self.State5Accept ~= 0 then + local ya = acceptions[self.State5Accept]*21 + if math.InRangeXYR(x,y,194,219+ya,120,50) then self.Touches["Enter"] = true return end + if math.InRangeXYR(x,y,326,219+ya,120,50) then self.Touches["Esc"] = true return end + elseif self.State5==0 then + for i=1,10 do + if i==10 then i=12 end + if math.InRangeXYR(x,y,212*((i-1)%3),119+(math.ceil(i/3)-1)*62,212,62) then + if i==12 then + self.Touches["Esc"] = true + return + else + self.Touches[tostring(i%10)] = true + return + end + end + end + elseif self.State5==-8 then + for i=1,9 do + if i==9 then i=11 end + if math.InRangeXYR(x,y,4+210*((i-1)%3),152+(math.ceil(i/3)-1)*50,209,49) then + if i==11 then + self.Touches["Esc"] = true + return + else + self.Touches[tostring(i%10)] = true + return + end + end + end + elseif self.State5 == 1 then + if math.InRangeXYR(x,y,139,270,370,50) then self.Touches["Esc"] = true return end + elseif self.State5 == 8 then + if self.ScrollCount and self.ScrollCount > 0 then + for i=1,math.min(9,Train:GetNW2String("PAM:ElemCount",0)) do + if math.InRangeXYR(x,y,4+210*((i-1)%3),152+(math.ceil(i/3)-1)*50,210,50) then self.Touches[tostring(i)] = true return end + end + if math.InRangeXYR(x,y,4+210*0,152+3*50,80,50) then self.Touches["Left"] = true return end + if math.InRangeXYR(x,y,4+210*3-80,152+3*50,80,50) then self.Touches["Right"] = true return end + end + if math.InRangeXYR(x,y,4+210*1.5-145,152+3*50,140,50) then self.Touches["Enter"] = true return end + if math.InRangeXYR(x,y,4+210*1.5+5,152+3*50,140,50) then self.Touches["Esc"] = true return end + elseif self.State5 == 9 then + if self.Selected==1 and self.ScrollCount and self.ScrollCount > 0 then + local xa,ya = 320+40*(self.Keyboard and 1 or 0),229 + if math.InRangeXYR(x,y,xa+219,ya+5,31,15) or math.InRangeXYR(x,y,xa+219,ya+128,31,14) then + self.Scroll = math.max(self.Scroll-1,0) + self:UpdateStationList(self.StationS) + return + elseif math.InRangeXYR(x,y,xa+219,ya+143,31,14) then + self.Scroll = math.Clamp(self.Scroll+1,0,self.ScrollCount-8) + self:UpdateStationList(self.StationS) + return + end + + for i=1,math.min(8,self.ScrollCount) do + if math.InRangeXYR(x,y,xa+13,ya+27-10+18*(i-1)-9,200,17) then + local st = self:UpdateStationList(self.StationS,i) + self.StationS = st and tostring(st) or self.StationS + self:UpdateStationList(self.StationS) + return + end + end + else + for i=0,1 do + if math.InRangeXYR(x,y,322+40*(self.Keyboard and 1 or 0),190+39*i,229,31) then self.Selected = i+1 return end + end + end + if self.Keyboard then + if math.InRangeXYR(x,y,190+1*39,320,75+1*65,50) then self.Touches["Enter"] = true return end + if math.InRangeXYR(x,y,288+1*(42+39+10),320,120+1*20,50) then self.Touches["Esc"] = true return end + if math.InRangeXYR(x,y,501+1*40,320,40,51) then self.Touches["KeyB"] = true return end + else + if math.InRangeXYR(x,y,190+0*39,320,75+0*65,50) then self.Touches["Enter"] = true return end + if math.InRangeXYR(x,y,288+0*(42+39+10),320,120+0*20,50) then self.Touches["Esc"] = true return end + if math.InRangeXYR(x,y,501+0*40,320,40,51) then self.Touches["KeyB"] = true return end + end + else + if math.InRangeXYR(x,y,0,429,136,51) then self.Touches["F"] = true return end + if math.InRangeXYR(x,y,3,289,80,35) then self.Touches["P"] = true return end + + for i=0,2 do + if math.InRangeXYR(x,y,2,157+i*46,70,35) then self.Touches[tostring(i+1)] = true end + end + for i=0,4 do + if math.InRangeXYR(x,y,570,155+i*46,70,35) then self.Touches[i==0 and "4" or tostring(i+5)] = true end + end + end + end +end + +TRAIN_SYSTEM.DriveModesConv = { + AT = -4, + AT1 = -4, + VPR = -3, + ST = -2, + OXT = -1, + OD = 0, + X1 = 1, + X2 = 2, + X3 = 3, +} +TRAIN_SYSTEM.DriveModes = { + --Priority 2 3 8 017 19 20 20X 25 025 33 033 33G + X3 = {1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0}, + X2 = {2, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0}, + X1 = {3, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0}, + OD = {4, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0}, + OXT = {5, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0}, + ST = {6, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1}, + VPR = {7, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1}, + AT1 = {8, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1}, + AT = {9, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1}, + Zero = {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +} +function TRAIN_SYSTEM:SetDriveMode(curMode,override) + local mode = self.DriveModes[curMode] + if mode and mode[1] > self.CurrentDriveModePriority then + self.CurrentDriveMode = mode + self.CurrentDriveModePriority = mode[1] + self.DriveMode = curMode + end +end +TRAIN_SYSTEM.PneumoModes = { + --Priority 39 48 + NT = {1, 0, 0,}, + V1 = {2, 0, 1,}, + V2 = {3, 1, 0,}, + V12 = {4, 1, 1,}, +} +function TRAIN_SYSTEM:SetDoorMode(curMode,override) + local mode = self.DoorModes[curMode] + self.CurrentDoorMode = mode + self.DoorMode = curMode +end +TRAIN_SYSTEM.DoorModes = { + -- 16 31 32 + ZD = {1, 0, 0,}, + DL = {0, 1, 0,}, + DP = {0, 0, 1,}, + DO = {0, 0, 0,}, +} +function TRAIN_SYSTEM:SetPneumoMode(curMode,override) + if self.CurrentPneumoModePriority==2 and curMode=="V2" then + curMode = "V12" + end + if self.CurrentPneumoModePriority==3 and curMode=="V1" then + curMode = "V12" + end + local mode = self.PneumoModes[curMode] + if mode and (override or mode[1] > self.CurrentPneumoModePriority) then + self.CurrentPneumoMode = mode + self.CurrentPneumoModePriority = mode[1] + self.PneumoMode = curMode + end +end + +function TRAIN_SYSTEM:TriggerSensor(coil,plate) + if self.SensorEnabled then + --self.Distance = plate.TrackX + local line = self.Line + local path = tonumber(self.Path) + local tbl = Metrostroi.PAMConfTest and Metrostroi.PAMConfTest[line] and Metrostroi.PAMConfTest[line][path] + if not tbl then return end + if self.Mode == 1 then + --Ищем позицию нашей Ñтанции + --[[ local pos + for i,stat in ipairs(tbl[1].stations) do + if stat.id == tonumber(self.Station) then + pos = stat.pos + break + end + end--]] + --Ищем ближайший датчик на Ñтанции в районе 200м + --[[ for i,sensor in ipairs(tbl[1].sensors) do + if pos-sensor<200 then + sensorDist = sensor + break + end + end--]] + self:FindSensor(self.StationTable.linkedSensor or false) + if self.NextSensorDist then + --print(Format("SENSOR: New pos: %.2fm",self.NextSensorDist)) + self.Distance = self.NextSensorDist + self.SensorError = false + self.Mode = 2 + self.LastStationTable = self:FindLastStation() + self:FindSensor() + --else + --print(Format("SENSOR: Error! Can't find good detector near station %s",self.Station)) + end + self.AlwaysSensor = false + else + --Ищем ближайший ÑенÑор от Ð½Ð°Ñ Ð´Ð»Ñ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ†Ð¸Ð¸ пути + --[[ local nearest,sensorDist + for i,sensor in ipairs(tbl[1].sensors) do + if not nearest or math.abs(sensor-self.Distance) dist then + self.NextSensor = i + break + end + end + elseif sens~=nil then + self.NextSensor = sens + else + self.NextSensor = self.NextSensor + 1 + end + self.NextSensorDist = tbl[1].sensors[self.NextSensor] +end + +function TRAIN_SYSTEM:FindNextSignal() + local dist = self.Distance + local line = self.Line + local path = tonumber(self.Path) + local tbl = Metrostroi.PAMConfTest and Metrostroi.PAMConfTest[line] and Metrostroi.PAMConfTest[line][path] + if not tbl then return end + for i,sig in ipairs(tbl[1].signals) do + if sig[2] > dist then + return sig[1] + end + end +end + +function TRAIN_SYSTEM:FindNextSlope() + local dist = self.Distance + local line = self.Line + local path = tonumber(self.Path) + local tbl = Metrostroi.PAMConfTest and Metrostroi.PAMConfTest[line] and Metrostroi.PAMConfTest[line][path] + if not tbl then return 0 end + local stbl = tbl[1].slopes + if not stbl then return 0 end + for i,slp in ipairs(stbl) do + if slp[2] > dist then + return stbl[i-1] and stbl[i-1][1] or 0 + end + end +end + +function TRAIN_SYSTEM:FindNextStation() + local dist = self.Distance + local line = self.Line + local path = tonumber(self.Path) + local tbl = Metrostroi.PAMConfTest and Metrostroi.PAMConfTest[line] and Metrostroi.PAMConfTest[line][path] + if not tbl then return end + for i,stat in ipairs(tbl[1].stations) do + if stat.pos-10 > dist then + return stat,tbl[1].stations[i-1] + end + end +end +function TRAIN_SYSTEM:FindPrevStation() + local dist = self.Distance + local line = self.Line + local path = tonumber(self.Path) + local tbl = Metrostroi.PAMConfTest and Metrostroi.PAMConfTest[line] and Metrostroi.PAMConfTest[line][path] + if not tbl then return end + for i,stat in ipairs(tbl[1].stations) do + if stat.pos+120 > dist then + return stat + end + end +end +function TRAIN_SYSTEM:FindStation(line,path,stationIndex) + local tbl = Metrostroi.PAMConfTest and Metrostroi.PAMConfTest[line] and Metrostroi.PAMConfTest[line][tonumber(path) or 1] + if not tbl then return end + for i,v in ipairs(tbl[1].stations) do + if v.id == tonumber(stationIndex) then return v,tbl[1].stations[i-1] end + end + return station and station.id +end +function TRAIN_SYSTEM:FindFirstStation() + local dist = self.Distance + local line = self.Line + local path = tonumber(self.Path) + local tbl = Metrostroi.PAMConfTest and Metrostroi.PAMConfTest[line] and Metrostroi.PAMConfTest[line][path] + if not tbl then return end + return tbl[1].stations[1] +end +function TRAIN_SYSTEM:FindLastStation() + local dist = self.Distance + local line = self.Line + local path = tonumber(self.Path) + local tbl = Metrostroi.PAMConfTest and Metrostroi.PAMConfTest[line] and Metrostroi.PAMConfTest[line][path] + if not tbl then return end + return tbl[1].stations[#tbl[1].stations] +end +function TRAIN_SYSTEM:Message(id) + self.CurrentMessage = id + self.MessageTimer = CurTime() +end +local errorsRing = { + true ,true ,nil ,false,nil ,nil ,true ,true , + true ,nil ,nil ,nil ,false,nil ,false,nil , + nil ,nil ,nil ,nil ,nil ,true ,nil ,false, + nil ,nil ,false,nil ,nil ,false,nil ,nil , +} +function TRAIN_SYSTEM:Error(id,state,time,removeOnTimer) + if (state or removeOnTimer and self.ErrorTimers[id] and CurTime()-self.ErrorTimers[id]0 then + if self.State<4 and back.State==4 then self.State = 4 end + if self.State<5 and back.State>=5 then self.EPKActive = 1 self.State = 5 self.ControlMode = 2 end + if self.State==5 then + self.Line = back.Line + self.Path = back.Path=="2" and "1" or "2" + self.RouteNumber = back.RouteNumber + self.DriverNumber = back.DriverNumber + self.Deadlock = self.Mode==4 and self.Deadlock or nil + self.Shunt = back.Shunt + if self.Station ~= back.Station or not self.BackRR or self.BackMode~=back.Mode then + local line = self.Line + local path = tonumber(self.Path) + local tbl = Metrostroi.PAMConfTest and Metrostroi.PAMConfTest[line] and Metrostroi.PAMConfTest[line][path] + for k,v in ipairs(tbl[1].stations) do + if v.id == tonumber(back.Station) then + self.Station = back.Station + self.StationTable = v + self.Distance = v.pos + self.PrevStationTable = tbl[1].stations[k-1] + self.LastStationTable = self:FindLastStation() + self.AlwaysSensor = true + self:FindSensor(self.StationTable.linkedSensor or false) + self.AddDistance = 100+math.random()*50 + end + end + self.BackMode = back.Mode + end + if back.Deadlock and not self.Deadlock then + local line = self.Line + local path = tonumber(self.Path) + local tbl = Metrostroi.PAMConfTest and Metrostroi.PAMConfTest[line] and Metrostroi.PAMConfTest[line][path] + for k,v in ipairs(tbl[1].stations) do + if back.Deadlock and v.id == back.Deadlock and tonumber(back.Station) == back.Deadlock and not self.StationTable.isInWrong then + self.Deadlock = v + self.Mode = 4 + self.AddDistance = false + end + end + end + if back.Mode<=4 and not self.Deadlock then + self.Mode = math.min(2,back.Mode) + --[[ elseif back.Mode==3 and self.StationTable and self.StationTable.isInWrong and self.Deadlock then + self.Mode = 2 + self.Deadlock = nil--]] + end + if (back.Mode==5 or back.Mode==1) and self.Mode~=1 then + self.Mode = 1 + self.Distance = 1000 + self.StationTable,self.PrevStationTable = self:FindStation(self.Line,self.Path,self.Station) + self.LastStationTable = self:FindLastStation() + self.SensorError = false + end + if back.Mode==6 then + self.Mode = 6 + self.Shunt = false + self.StationTable,self.PrevStationTable = self:FindStation(self.Line,self.Path,self.Station) + self.LastStationTable = self:FindLastStation() + end + end + end + self.BackRR = back and back.RR + end + +end +function TRAIN_SYSTEM:CANWrite(name,value,number) + if self.State == 0 then return end + if self.CANIgnore and CurTime()-self.CANIgnore < 1 then return end + local source = self.Train:GetWagonNumber() + self.Train:CANWrite("PAM",source,"PAM",number,name,value) +end +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + if Train.Electric.Type < 4 then return end + self.OldDriveModePriority = self.CurrentDriveModePriority or 0 + self.CurrentDriveModePriority = 0 + self.CurrentPneumoModePriority = 0 + + local PAM_VV = Train.PAM_VV + local Power = PAM_VV.Power > 0 + local ALS = Train.ALSCoil + local BackReverser = PAM_VV.KRR2 > 0 + local BackActive = PAM_VV.KRR1 > 0 + local RR = (PAM_VV.KRR > 0 or PAM_VV.KRU > 0) and not BackActive + if RR and self.AddDistance then + if not self.Deadlock then self.Distance = self.Distance-self.AddDistance end + self.AddDistance = false + end + if Power and self.State == 0 then + self.State = -0.5 + self.StartTimer = CurTime() + end + if not Power and self.State ~= 0 then + self.State = 0 + for k,v in pairs(self.TriggerNames) do + self.Triggers[v] = false + self.Touches[v:sub(4,-1)] = false + end + self.BackCheckTimer = false + self.BackPA = nil + end + if self.State == -0.5 and CurTime()-self.StartTimer > 0.05 then self.State = -1 self.StartTimer = CurTime() end + if self.State == -1 and CurTime()-self.StartTimer > 5 then self.State = -2 self.StartTimer = CurTime() self:SetWaitTimer(0.2) end + if self.State == -2 and CurTime()-self.StartTimer > 0.8 then self.State = -3 self.StartTimer = CurTime() self:SetWaitTimer(1) end + if self.State == -3 and CurTime()-self.StartTimer > 3 then self.State = -4 self.StartTimer = CurTime() end + if self.State == -4 and CurTime()-self.StartTimer > 2 then self.State = -5 self.StartTimer = CurTime() self:SetWaitTimer(1) end + if self.State == -4 and CurTime()-self.StartTimer > 2 then self.State = -5 self.StartTimer = CurTime() self:SetWaitTimer(1) end + if self.State == -5 and CurTime()-self.StartTimer > 5 then self.State = 1 self.StartTimer = CurTime() self:SetWaitTimer(0.2) end + if self.ChangeTimer and CurTime()-self.ChangeTimer > 0 then self.ChangeTimer = nil end + + local ALSOn = (self.State>0 and RR) and 1 or 0 + if self.PAKSD and ALSOn ~= ALS.Enabled then + ALS:TriggerInput("Enable",ALSOn) + end + + self.Speed = ALS.Speed--math.Round(ALS.Speed or 0,1) + local speed = self.Speed + local speedMpS = speed/3600*1000 + local speedMpSSigned = speedMpS*ALS.SpeedSign + local accel = ALS.Acceleration + if self.State > 0 or self.State<-3 then + for k,v in pairs(self.TriggerNames) do + local name = v:sub(4,-1) + local val = Train[v].Value > 0.5 + if (self.Touches[name] or val) ~= self.Triggers[v] then + self.Triggers[v] = self.Touches[name] or val + self:Trigger(name,self.Triggers[v],val == self.Triggers[v]) + end + end + if (not self.BackCheckTimer or CurTime()-self.BackCheckTimer > 1) then + self:CANWrite("Check") + self.BackCheckTimer = CurTime() + end + if self.BackPA and CurTime()-self.BackPA.LastAnswer > 2 then + self.BackPA = nil + end + + local ALSSh = (1-Train.ALS.Value)*Train.VRD.Value --ALS Shunt + local Vd = -1 + if ALS.F5*(1-ALSSh) > 0 then Vd = 0 end + if ALS.F4*(1-ALSSh) > 0 then Vd = 40 end + if ALS.F3*(1-ALSSh) > 0 then Vd = 60 end + if ALS.F2*(1-ALSSh) > 0 then Vd = 70 end + if ALS.F1*(1-ALSSh) > 0 then Vd = 80 end + if Vd ~= self.SpeedLimit then + if Vd == -1 and not self.FQChagneTimer then + self.FQChagneTimer = CurTime() + end + if Vd ~= -1 or self.FQChagneTimer and (speedMpS <= 0.1 and CurTime()-self.FQChagneTimer > 2.5 or speedMpS >= 0.1 and CurTime()-self.FQChagneTimer > 0.8) then + self.SpeedLimit = Vd + self.FQChagneTimer = nil + end + end + if self.PAKSD then --ALS outputs for KSD + self.F5 = self.SpeedLimit==0 and 1 or 0 + self.F4 = self.SpeedLimit==40 and 1 or 0 + self.F3 = self.SpeedLimit==60 and 1 or 0 + self.F2 = self.SpeedLimit==70 and 1 or 0 + self.F1 = self.SpeedLimit==80 and 1 or 0 + self.F6 = self.SpeedLimit>-1 and ALS.F6 or 0 + end + self.NoFreq = self.SpeedLimit==-1 and 1 or 0 + elseif self.State==-0.5 then + self.NoFreq = 1 + self.F6 = 1 + self.F5 = 1 + self.F4 = 1 + self.F3 = 1 + self.F2 = 1 + self.F1 = 1 + else + self.NoFreq = 0 + self.F6 = 0 + self.F5 = 0 + self.F4 = 0 + self.F3 = 0 + self.F2 = 0 + self.F1 = 0 + end + Train:SetNW2Float("PAM:State",self.ChangeTimer and -10 or self.State) + if self.StartTimer then Train:SetNW2Float("PAM:StartTimer",CurTime()-self.StartTimer) end + + --if self.WorkTimer and CurTime()- self.WorkTimer < 0.1 then return end + --self.WorkTimer = CurTime() --CHECK + local Ring = false + if self.State > 0 then + self.GoodSetup = Metrostroi.PAMConfTest ~= nil + self.ReverserWrench = PAM_VV.KRR > 0 + self.CurrentError = 0 + + if self.State == 1 or self.State == 1.5 then + Train:SetNW2Bool("PAM:GoodTest",true) + Train:SetNW2Bool("PAM:GoodSetup",self.GoodSetup) + Train:SetNW2Int("PAM:GoodBack",self.BackPA~=nil and (self.BackPA.state.Errors and -1 or 1) or 0 ) + + end + if self.State == 3 then + Train:SetNW2String("PAM:RouteNumber",self.RouteNumberS) + Train:SetNW2String("PAM:DriverNumber",self.DriverNumberS) + end + if self.State == 3 or self.State == 3.5 or self.State==5 and self.State5 == 9 then + if self.StationS ~= "" then + local st = self:FindStation(self.LineS,self.PathS,self.StationS) + Train:SetNW2String("PAM:CurrentStationS",st and (st.name or st.id) or "") + else + Train:SetNW2String("PAM:CurrentStationS", "") + end + Train:SetNW2String("PAM:StationS",self.StationS) + Train:SetNW2String("PAM:LineS",self.LineS) + Train:SetNW2String("PAM:PathS",self.PathS) + end + if self.State < 4 then + self:SetDriveMode("OXT") + self:SetDoorMode("DO") + self:SetPneumoMode("NT") + self["7GA"] = 0 + --[[ if PAM_VV.KB==0 then + self:SetPneumoMode("V2") + else + self:SetPneumoMode("NT") + end--]] + self.SensorEnabled = false + if (not self.ReverserWrench or not self.GoodSetup) and self.State >= 2 then + self.State = 1 + self:SetWaitTimer(0.1) + end + else + self["7GA"] = PAM_VV.KSOT+PAM_VV.KB + end + if self.State == 4 then + self.SensorEnabled = false + if self.CheckRing and PAM_VV.KB > 0 then self.CheckRing = false end + Ring = self.CheckRing + + + if RR and PAM_VV.KDL > 0 or PAM_VV.KDP > 0 then + self:SetDoorMode(PAM_VV.KDP>0 and "DP"or "DL") + else + self:SetDoorMode("DO") + end + if RR and speed>0.2 then self.Stopping = true end + if RR and speed<=0.2 and PAM_VV.KGR>0 and PAM_VV.KB>0 then self.Stopping = false end + if RR and self.Stopping then + self:SetDriveMode("AT") + self:SetPneumoMode("V2") + else + self:SetDriveMode("OD") + self:SetPneumoMode("NT") + end + else + self.Stopping = false + end + + + if self.State == 5 then + self:Error(17,not RR and not BackActive) + self:Error(19,BackActive) + --Distance count + if not self.Distance then self.Distance = self.StationTable and self.StationTable.pos or 0 end + if self.Mode > 1 and self.Mode~=6 then + local pos = Metrostroi.TrainPositions[Train];pos = pos and pos[1] + local delta = speedMpS*dT + if pos and pos.path ~= self.OldPath then + self.OldPath = pos.path + self.OldPos = pos.x+Train.PosX + delta = speedMpS*dT + elseif pos then + local x = pos.x+Train.PosX + delta = (x-self.OldPos)*(Metrostroi.TrainDirections[Train] and 1 or -1) + self.OldPos = x + end + self.Distance = self.Distance + delta + end + --Drive block after drive reset + if self.OldDriveModePriority>4 and PAM_VV.KGR==0 then + self:SetDriveMode("OXT") + else + self:SetDriveMode("OD") + end + self:SetDoorMode("DO") + if not RR and not BackActive then + self:SetPneumoMode("V1") + else + self:SetPneumoMode("NT") + end + + if (self.Mode~=2 and self.Mode~=3) or self.NextSensorDist and math.abs(self.Distance-self.NextSensorDist)<=20 or self.AlwaysSensor then + self.SensorEnabled =true + elseif self.SensorEnabled then + if self.Mode==2 and self.SensorError==nil then + self.SensorError = true + end + self.SensorEnabled = nil + end + + local stationLast = "" + local station = "" + local signal = "" + local slope = 0 + local dist = 1337 + local opv = false + if self.Mode == 1 then + stationLast = "выход на линию" + if self.StationTable then station = self.StationTable.name end + elseif self.Mode == 2 or self.Mode == 3 then + local lasttbl = self.Deadlock or self.LastStationTable + if self.Mode == 3 and lasttbl and lasttbl.id==self.StationTable.id then + stationLast = "оборот" + else + stationLast = lasttbl and lasttbl.name_last or "?" + end + dist = self.StationTable.pos-self.Distance + station = self.StationTable.name + signal = self:FindNextSignal() + slope = self:FindNextSlope() + if self.PrevStationTable then + local dist = self.PrevStationTable.pos-self.Distance + local opvDist = self.PrevStationTable.isHorlift and 0.45 or 3 + opv = -opvDist < dist and dist < opvDist + end + if not opv then + local opvDist = self.StationTable.isHorlift and 0.45 or 3 + opv = -opvDist < dist and dist < opvDist + end + elseif self.Mode == 4 or self.Mode == 5 then + stationLast = "оборот" + station = self.StationTable.name + if self.Mode == 5 then + dist = 1337 + opv = true + else + dist = self.StationTable.dist_last_end-self.Distance + opv = self.Distance > self.StationTable.dist_last_start + end + end + + if RR and (self.Mode==2 or self.Mode==3) and (dist < -3 and (self.Transit or not self.AntiMiss)) or self.OpenControl == false and speed > 0.2 or self.Mode == 4 and dist<0 then + local oldSt = self.StationTable + if not self.Shunt then self.StationTable,self.PrevStationTable = self:FindNextStation() end + + if self.Mode == 4 then + self.Mode = 5 + + self.StationTable = oldSt + elseif self.StationTable then + if self.Shunt then + self.Mode = 6 + self.Shunt = false + elseif self.Deadlock and oldSt.id == self.Deadlock.id then + self.Mode=4 + + self.StationTable=self.Deadlock + self.Deadlock = nil + elseif self.Mode == 3 then + self.Mode = 2 + end + elseif oldSt and oldSt.isLast and oldSt.dist_last_end then + self.Mode = 4 + self.StationTable = oldSt + else + self.Mode = 1 + self.StationTable = self:FindFirstStation() + end + self.Station = self.StationTable.id + self.OpenControl = nil + end + if self.Mode==2 and dist<=200 then + local line = self.Line + local path = tonumber(self.Path) + local tbl = Metrostroi.PAMConfTest and Metrostroi.PAMConfTest[line] and Metrostroi.PAMConfTest[line][path] + if self.StationBrakeRing==nil and tbl and tbl[1].sensors[self.StationTable.linkedSensor] and tbl[1].sensors[self.StationTable.linkedSensor]0.05 then self.StationBrakeRing = false end + elseif self.StationBrakeRing==false or self.StationBrakeRing and CurTime()-self.StationBrakeRing > 0.05 then + self.StationBrakeRing = nil + end + + Train:SetNW2Int("PAM:Mode",self.Mode) + self:Error(8,self.AntiMiss==2 or dist<-3 and self.AntiMiss ) + Train:SetNW2Bool("PAM:Shunt",self.Shunt) + -- DO: Движение по Ñтанционным путÑм + -- ВключаетÑÑ Ð½Ð° ÑтанциÑÑ… Ñ Ð¿ÑƒÑ‚ÐµÐ²Ñ‹Ð¼ развитием при фактичеÑкой ÑкороÑти 0 или нахождении в зоне ОПВ + -- ÐвтоматичеÑки вводитÑÑ Ð¿Ð¾Ñле передачи ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ отÑутÑтвии ÑвÑзи между головой и хвоÑтом + -- Ðе контролирует пройденный путь и отменÑетÑÑ Ð¿Ñ€Ð¸ фикÑации + -- Разрешает движение Ñо ÑкороÑтью не более 40, а при ограничении 20 не делает предварительную оÑтановку + + --TODO: Смена линии + -- Возможно назначить в любой момент до Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñо Ñтанции Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾Ð¹ ветвью + -- Видны вÑе Ñтанции по ходу движениÑ, имеющие передаточную ветвь + -- ÐвтмоатичеÑÐºÐ°Ñ Ñ„Ð¸ÐºÑÐ°Ñ†Ð¸Ñ Ñтанции + -- При ограничении 20 не делает предварительную оÑтановку + + --TODO: Транзит + -- Ограничение ÑкороÑти проезда ОПВ 29км\\ч и 10 на конечных + -- При запрещающем показании Ñветофора у выходных Ñветофоров торможенеи до полной оÑтановки + + --Block door open without all conditions + --TODO: При наличии 16 провода и отÑутвии 15го в течении 5 Ñекунд подÑказка "Ðет ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹" + local CanOpen = PAM_VV.KRH==0 and (PAM_VV.LPT > 0 or self.NoLPT and PAM_VV.V1>0) + if RR and ((opv or self.Mode==5) and speed < 0.5 or (self.OpenDoors and speed < 2.5)) and CanOpen then + self:SetDoorMode(not self.OpenControl and "ZD" or "DO") + local err + if (self.Mode > 3 or self.OpenDoors) then + local Open = PAM_VV.KDL > 0 or PAM_VV.KDP > 0 + if Open and PAM_VV.ZD == 0 then + self:SetDoorMode(PAM_VV.KDP > 0 and "DP"or "DL") + if not self.OpenControl then self.OpenControl = CurTime() end + if not self.OpeningTimer and PAM_VV.KD>0 then self.OpeningTimer = CurTime() end + end + if Open and PAM_VV.ZD>0 and not self.OpenTimer then + self.OpenTimer = CurTime() + elseif (not Open or PAM_VV.ZD==0) and self.OpenTimer then + self.OpenTimer = nil + end + --TODO: При открытии контроль 16 провода, через 0.7Ñ Ð¿Ñ€Ð¸ наличии 16 провода Ñообщение "Разблокируйте двери" + --TODO: При нажатии на кнопку>2.5Ñ Ð¸ не пропадании КД подÑказка "Ðет ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ + elseif self.Mode<=3 then + local stationTable = dist>10 and self.PrevStationTable or self.StationTable + local Open = PAM_VV.KDL > 0 or PAM_VV.KDP > 0 + local CanOpen = not self.Transit and (PAM_VV.KDL > 0 and not stationTable.rightDoors or PAM_VV.KDP > 0 and stationTable.rightDoors) + if PAM_VV.ZD==0 and CanOpen then + self:SetDoorMode(stationTable.rightDoors and "DP"or "DL") + if opv and (stationTable==self.StationTable or self.FireBack) then + self.Mode = 3 + self.StationTable = stationTable + self.FireBack = false + if not self.AntiMiss then self.AntiMiss = false end + end + if not self.OpenControl then self.OpenControl = CurTime() end + if not self.OpeningTimer and PAM_VV.KD>0 then self.OpeningTimer = CurTime() end + else + self.OpeningTimer = false + self:Error(1,Open and not CanOpen and not self.Transit and stationTable.rightDoors) + self:Error(2,Open and not CanOpen and not self.Transit and not stationTable.rightDoors) + self:Error(23,Open and not CanOpen and self.Transit) + end + if CanOpen and PAM_VV.ZD>0 and not self.OpenTimer then + self.OpenTimer = CurTime() + elseif (not CanOpen or PAM_VV.ZD==0) and self.OpenTimer then + self.OpenTimer = nil + end + --TODO: При открытии контроль 16 провода, через 0.7Ñ Ð¿Ñ€Ð¸ наличии 16 провода Ñообщение "Разблокируйте двери" + --TODO: При нажатии на кнопку>2.5Ñ Ð¸ не пропадании КД подÑказка "Ðет ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ + end + if self.OpeningTimer and (CurTime()-self.OpeningTimer>2.7 and PAM_VV.KD==0 or not RR) then self.OpeningTimer = false end + self:Error(4,self.OpeningTimer and CurTime()-self.OpeningTimer>2.7) + --TODO: Ð”Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° "3" на Ñтанции закрытого типа Ñообщение "Откройте двери Ñтанции" при отÑутÑтвии КД(контроллируемом) и наличии чаÑтоты + -- Отмена ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð½Ð° КБ либо поÑвлении 0(Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¾Ð¹ ходового режима) + else + if RR and (not CanOpen or PAM_VV.ZD>0 or self.DoorMode=="ZD") then self:SetDoorMode("ZD") end + self.OpenDoors = false + self.OpenTimer = false + self.OpeningTimer = false + end + --if PAM_VV.K16>0 and PAM_VV.KD==0 and not self.KDTimer then self.KDTimer = CurTime() end + --if (PAM_VV.K16==0 or PAM_VV.KD>0) and self.KDTimer then self.KDTimer = nil end + if RR and (self.OpenControl~=true or PAM_VV.K16>0) and PAM_VV.KD==0 then + if not self.KDTimer then self.KDTimer = CurTime() end + if self.KDTimer and CurTime()-self.KDTimer>5 then self.OpenControl = false end + elseif self.KDTimer then + self.KDTimer = nil + end + if RR and self.OpenControl and self.StationTable.isHorlift and self.SpeedLimit~=0 then + if not self.StationDoorsTimer then self.StationDoorsTimer = CurTime() end + if PAM_VV.KB>0 then self.StationDoorsTimer = true end + elseif self.StationDoorsTimer then + self.StationDoorsTimer = nil + end + --self:Error(10,self.KDTimer and not self.OpenControl,7,true) + self:Error(5,self.KDTimer and not self.OpenControl) + self:Error(27,self.StationDoorsTimer and self.StationDoorsTimer~=true and CurTime()-self.StationDoorsTimer>1.5) + + + if self.OpenControl and self.OpenControl~=true and PAM_VV.KD > 0 then self.OpenControl = CurTime() end + if self.OpenControl==true and PAM_VV.KD > 0 then self.OpenControl = false end + if self.OpenControl and self.OpenControl ~= true and CurTime()-self.OpenControl > 1 then self.OpenControl = true end + self:Error(7,self.OpenTimer and CurTime()-self.OpenTimer>0.7) + self:Error(9,self.SensorError and PAM_VV.ZD==0 and (PAM_VV.KDL>0 or PAM_VV.KDP>0)) + if PAM_VV.KDL>0 or PAM_VV.KDP>0 then + if not self.KDLPTimer then self.KDLPTimer = CurTime() end + elseif self.KDLPTimer then self.KDLPTimer = nil end + self:Error(22,self.KDLPTimer and CurTime()-self.KDLPTimer>10) + + --Disable NoKD if we got KD + if self.NoKD and PAM_VV.KD>0 and not self.KDOnTime then self.KDOnTime = CurTime() end + if self.NoKD then self:SetDoorMode("ZD") end + if self.KDOnTime and PAM_VV.KD>0 and CurTime()-self.KDOnTime>5 then self.KDOnTime = false self.NoKD = false end + if self.KDOnTime and PAM_VV.KD==0 then self.KDOnTime = false end + if PAM_VV.KRU>0 and PAM_VV.ZD==0 then self:SetPneumoMode("V2") end + + --Movement block by 64tw + if RR and PAM_VV.I33*PAM_VV.LPT>0 and not self.NoLPT then + if not self.LPTTimer then self.LPTTimer = CurTime() end + elseif self.LPTTimer and (PAM_VV.KGR>0 or not RR or self.NoLPT or CurTime()-self.LPTTimer<=6.5) then + self.LPTTimer = nil + end + self:Error(10,self.LPTTimer and CurTime()-self.LPTTimer > 6.5) + + --Get controller state + local driveModeKV = 0 + if PAM_VV.KGR == 0 then + driveModeKV = 1+PAM_VV.I2+PAM_VV.I3 + elseif PAM_VV.I33G > 0 then + driveModeKV = -2-PAM_VV.I2*2+PAM_VV.I25 + end + + --Fire rolling back logic + if self.FireBack then + local opvDist = self.FireBack.isHorlift and -0.45 or -1 + if self.FireBack.pos-self.Distance>opvDist then + self.StationTable=self.FireBack + self:SetDriveMode("OXT") + self:SetPneumoMode("V1") + if speed>5.4 then self:SetPneumoMode("V2") end + if speed<0.2 then self.FireBack = false end + end + end + local No34 = self.V1Stop and CurTime()-self.V1Stop > 4 + self.ControlMode2 = (PAM_VV.KVARS > 0 or self.PAKSD) and not No34 and PAM_VV.KSOT > 0 + local mode = self.ControlMode2 and 2 or 1 + + if self.ControlMode~=mode and (mode==1 or self.ControlModeAuto) then + self.ControlMode = mode + self.ControlModeAuto = true + end + self:Error(20,self.ControlModeAuto and self.ControlMode==1,No34 and 14 or 7,true) + self:Error(21,self.ControlModeAuto and self.ControlMode==2,7,true) + self:Error(29,No34,7,true) + + self:Error(30,self.No34 and not No34,7,true) + self.No34 = No34 + + self:Error(24,false,7,true) + local BlockBack = not self.FireBack and (not self.StationTable.isHorlift or dist > -.45 or dist < -6 or speed>=3.6) + if (driveModeKV>=0 or PAM_VV.KRU > 0) and ( + --TODO аппаратура отменÑет ходвоой режим и назначает ВЗ№1 при подезде к рейке + BackReverser and BlockBack + or self.FireBack and speed>10 + or self.LPTTimer and CurTime()-self.LPTTimer>6.5 + or self.ControlMode==1 and PAM_VV.KB==0 + or PAM_VV.KD < 1 and not self.NoKD and PAM_VV.KRU == 0 + or PAM_VV.KTARS > 0) then + self:SetDriveMode("OXT") + end + self:Error(3,BackReverser and BlockBack and not BackActive) + + + local speedLimit = math.max(20,self.SpeedLimit+1) + if self.ControlMode == 1 then + speedLimit = (speedLimit > 40 and 35 or 20)*PAM_VV.KB + elseif PAM_VV.KB>0 then + speedLimit=20 + end + if self.Mode > 3 then speedLimit = math.min(40,speedLimit) end + local OXT = false + --KS Mode + if RR and self.SpeedLimit <= 20 then + if not self.ZeroStopped and speed <= 0.2 then + self.ZeroStopped = true + end + local station = (self.Mode==1 or self.Mode==2) and dist<=100 + if self.ZeroStopped == nil and speed > 0.2 then + self.ZeroStopped = self.Mode>3 or station and not self.Transit + end + if self.ZeroStopped and PAM_VV.KB == 0 or self.SpeedLimit~=-1 and ((ALS.F6==0 or station and self.Transit) and not self.Vd0 and (PAM_VV.VRD==0 or self.PAKSD) and not station) then + self:SetDriveMode("OXT") + OXT = true + speedLimit=0 + end + if not self.ZeroStopped or speed > 0.2 and PAM_VV.KB == 0 then speedLimit = 0 end + if self.SpeedLimit~=-1 then + if not self.ZeroTimer then self.ZeroTimer = CurTime() end + else + self.ZeroTimer = nil + end + self:Error(12,not self.ZeroStopped and PAM_VV.KGR==0 and OXT and PAM_VV.KB>0) + self:Error(15,self.ZeroTimer and CurTime()-self.ZeroTimer>30,7,true) + elseif self.SpeedLimit > 20 then + self.ZeroStopped = nil + self.ZeroTimer = nil + end + self:Error(26,self.ControlMode==1 and PAM_VV.KB==0 and PAM_VV.KGR==0) + if self.SpeedLimit>20 or self.SpeedLimit == -1 then self.Vd0 = false end + local speedLimitMpS = speedLimit/3600*1000 + local timeAdd = (1-PAM_VV.I33G*1+PAM_VV.I33*1) + self.Acceleration = self.Acceleration or 0 + self.Acceleration = self.Acceleration+(accel-self.Acceleration)*dT*1 + if RR and (speedMpS+self.Acceleration*timeAdd > speedLimitMpS and speed>0.2 or self.STTimer) then + local ST,AT = false,false + if not self.OXTTimer then self.OXTTimer = CurTime() end + if speed > speedLimit or self.OXTTimer and CurTime()-self.OXTTimer > 1.5 then + ST = true + if not self.STTimer then + self.STTimer = CurTime() + self.RingArmed = PAM_VV.KRT==0 and CurTime() + self.STV1Timer = PAM_VV.KRT==0 and CurTime() + end + end + if speed > speedLimit or self.STTimer and CurTime()-self.STTimer > 1 then + AT = true + end + if self.STV1Timer and CurTime()-self.STV1Timer < 0.7 then self:SetPneumoMode("V1") end + if AT then + self:SetDriveMode("AT") + elseif ST then + self:SetDriveMode("ST") + else + self:SetDriveMode("OXT") + end + if speed < speedLimit-2 and not self.RingArmed then self.STTimer = false end + OXT = true + else + self.STTimer = false + self.OXTTimer = false + self.STV1Timer = nil + end + --Rolling check + if self.State5==1 then + if not self.RollingCheckRolled then self.RollingCheckRolled = 0 end + local rolled = speedMpSSigned*dT + if math.abs(rolled) >0.001 then + self.RollingCheckRolled = self.RollingCheckRolled + rolled + Train:SetNW2Float("PAM:RollDist",self.RollingCheckRolled) + end + if self.RollingCheckRolled > 2.5 or self.RollingCheckRolled < -0.3 then + self.Stopped = 1 + self.RollingCheckRolled = false + self.State5 = nil + Train:SetNW2Float("PAM:RollDist",0) + end + if self.NoFreq>0 and PAM_VV.KB==0 then + self:SetPneumoMode("V2") + end + else + self.RollingCheckRolled = false + end + --AntiRolling + if RR then + if not self.RollingCheckRolled and (speed < 2.5 or self.Stopped) and PAM_VV.KRH == 0 and (self.NoFreq==0 or PAM_VV.KB==0) then + self:SetPneumoMode("V1") + if not self.V1Stop and PAM_VV.KET==0 then self.V1Stop = CurTime() end + if PAM_VV.KET>0 and self.V1Stop then + if not self.V1StopTimer then self.V1StopTimer = CurTime() end + if self.V1StopTimer and CurTime()-self.V1StopTimer>1 then + self.V1StopTimer = nil + self.V1Stop = nil + end + end + if not self.Stopped then self.Stopped = true end + if self.Stopped and speed>5.5 then + self.Stopped = 1 + end + if self.Stopped==1 then self:SetPneumoMode("V2") end + self.Starting = (speed>0.2 or PAM_VV.KRH>0 or PAM_VV.KGR==0) and self.Starting + elseif not self.RollingCheckRolled then + if self.Stopped then + self.Stopped = false + self.Starting = self.NoFreq==0 and CurTime() + end + if self.Starting and CurTime()-self.Starting<4.5 and speed>0.5 then self.Starting = nil end + end + else + self.Starting = nil + self.Stopped = false + end + if self.Starting and CurTime()-self.Starting>=4.5 then self:SetDriveMode("AT") end + if not self.Stopped then self.V1Stop = nil end + self:Error(13,self.Starting and CurTime()-self.Starting>=4.5) + if RR then + if speedMpSSigned < -0.01 and not self.Rolling and not self.FireBack then self.Rolling = 0 end + if self.Rolling and self.Rolling < 0 then self.Rolling = false end + if self.Rolling then + local rolled = -speedMpSSigned*dT + if math.abs(rolled) >0.001 then + self.Rolling = self.Rolling + rolled + end + end + if not self.Rolled and self.Rolling and self.Rolling > 0.5+PAM_VV.KRH*2.5 then + self.Rolled = PAM_VV.KRH + end + if self.Rolled then + if self.Rolled>0 then + self:SetDriveMode("OXT") + end + if self.Rolled == 0 and PAM_VV.KRH > 0 then + self.Rolled = false + self.Rolling = false + end + if PAM_VV.KRH == 0 then self.Rolled = 0 end + self:SetPneumoMode("V2") + end + else + self.Rolled = false + self.Rolling = false + end + if RR and self.Transit and self.Mode == 2 then + local lasttbl = self.Deadlock or self.LastStationTable + local last = lasttbl and lasttbl.id==self.StationTable.id + if last and dist<60 and speed>10 or not last and dist<50 and speed>35 then + self.TransitBraking = last and 10 or 35 + end + if self.TransitBraking and speed>self.TransitBraking then + self:SetDriveMode("AT") + elseif self.TransitBraking then + self.TransitBraking = false + end + else + self.TransitBraking = false + end + if RR and not self.Transit and (self.Mode==2 or self.Mode==3) then + if self.AntiMiss == nil then + local SchemeEngageDistance,_ACCEL,_ACCEL2 + local currA = -math.min(0,Train.Acceleration) + _ACCEL = 1.61 + _ACCEL2 = _ACCEL*2 + local _SCHTime + if PAM_VV.KRT>0 then + --local speed = 45 + --local speedMpS = speed/3600*1000 + _SCHTime = ( + ( + math.Clamp(((18-PAM_VV.KPRK)/17)^1.5*(55-(speed-5))/55,0,1)^1.1 + )*2.2-math.Clamp(PAM_VV.KPRK-14,0,4)/4*3.3*math.Clamp((16-(speed-3))/16,0,1)^2.2 + )*math.Clamp((0.5-currA),0,1) + --_SCHTime = ((math.Clamp((PAM_VV.KPRK-1)/17*(55-(10-5))/55,0,1)^1.1)*2.2-math.Clamp(PAM_VV.KPRK-12,0,6)/6*3-3.5*math.Clamp((16-(10-3))/16,0,1)^2.2)*math.Clamp((0.8-currA)/0.8,0.2,1) + SchemeEngageDistance = speedMpS*_SCHTime+(_ACCEL*(_SCHTime^2))/2-(2.0)*math.Clamp((7-(speed-3))/7,0,1) + else + _SCHTime = ((math.Clamp((55-(speed-5))/55,0,1)^1.2)*1.85+1-3.5*math.Clamp((16-(speed-3))/16,0,1)^1.7)*math.Clamp((_ACCEL-currA)/_ACCEL,0,1) + SchemeEngageDistance = speedMpS*_SCHTime+(_ACCEL*(_SCHTime^2))/2 + end + --SchemeEngageDistance = speedMS*_SCHTime+(_ACCEL*(_SCHTime^2))/2 + if speed>0.2 and (dist-SchemeEngageDistance) < (speedMpS^2)/_ACCEL2 and not self.AntiMiss then + self.AntiMiss = opv and 2 or 1 + print("ENGAGED "..dist) + end + end + if self.AntiMiss then + self:SetDriveMode("AT") + self:SetPneumoMode("V1") + if speed<6 then + self:SetPneumoMode("V2") + end + if speed < 0.2 and ((self.AntiMiss==2 or -3<=dist) and PAM_VV.KB>0 or self.AntiMiss==1) then + self.AntiMiss = self.AntiMiss==1 and nil + end + end + if self.AntiMiss==false and self.Mode==2 and dist > 150 then self.AntiMiss = nil end + else + self.AntiMiss = nil + end + --if RR and self.ControlMode==1 and PAM_VV.KB==0 then self:SetPneumoMode("V2") end + if self.PneumoMode == "V1" or self.PneumoMode == "V12" then + if PAM_VV.V1==0 and not self.V1Timer then self.V1Timer = CurTime() end + if PAM_VV.V1>0 then + if self.V1Timer then self.V1Timer = nil end + if PAM_VV.LPT==0 and not self.V1ETimer then self.V1ETimer = CurTime() end + if PAM_VV.LPT>0 and PAM_VV.V2==0 and self.V1ETimer then self.V1ETimer = nil end + end + else + self.V1Timer = nil + self.V1ETimer = nil + end + if self.V1Timer and CurTime()-self.V1Timer > 2 then self:SetPneumoMode("V2") end + if self.V1ETimer and CurTime()-self.V1ETimer > 2.5 then self:SetPneumoMode("V2") end + + if self.PneumoMode == "V2" or self.PneumoMode == "V12" then + if PAM_VV.V2==0 and not self.V2Timer then self.V2ETimer = CurTime() end + if PAM_VV.V2>0 then + if self.V2Timer then self.V2Timer = nil end + if PAM_VV.LPT==0 and not self.V2ETimer then self.V2ETimer = CurTime() end + if PAM_VV.LPT>0 and self.V2ETimer then self.V2ETimer = nil end + end + else + self.V2Timer = nil + self.V2ETimer = nil + end + if speed<2.5 and (PAM_VV.KB > 0 or not RR) then self.EPKActive = true end + if self.RingArmed and CurTime()-self.RingArmed>3 then self.EPKActive = false end + if self.V2ETimer and CurTime()-self.V2ETimer>2 then self.EPKActive = false end + if self.Mode==3 then + if self.BoardRing==nil and Train.BoardTimer and Train.BoardTimer<-2 and PAM_VV.KD==0 then self.BoardRing = CurTime() end + if self.BoardRing and (PAM_VV.KB>0 or PAM_VV.KD>0 or CurTime()-self.BoardRing>2) then self.BoardRing = false end + else + self.BoardRing = nil + end + + if self.RingArmed and PAM_VV.KB > 0 then self.RingArmed = false end + if self.CurrentErrorR ~= self.CurrentError then + self.CurrentErrorR = self.CurrentError + self.CurrentErrorRing = errorsRing[self.CurrentError]==false and CurTime() + end + Ring = self.RingArmed or self.BoardRing or self.StationBrakeRing or errorsRing[self.CurrentError] or self.CurrentErrorRing and CurTime()-self.CurrentErrorRing<1.5 + Train:SetNW2Int("PAM:DriveMode",self.ControlMode+PAM_VV.KRU*3) + local driveMode = self.DriveModesConv[self.DriveMode] + Train:SetNW2Int("PAM:KVMode",driveMode>0 and math.max(driveMode,driveModeKV) or driveMode<0 and math.min(driveMode,driveModeKV) or driveModeKV) + Train:SetNW2String("PAM:CurrentStation",station) + Train:SetNW2String("PAM:TargetStation",stationLast) + Train:SetNW2Int("PAM:BoardTime",Train.BoardTimer or 0) + Train:SetNW2Int("PAM:CurrentError",self.CurrentError or 0) + + if self.MessageTimer and CurTime()-self.MessageTimer > 4 then + self.CurrentMessage = 0 + self.MessageTimer = false + end + Train:SetNW2Int("PAM:CurrentMessage",self.CurrentMessage or 0) + + Train:SetNW2Bool("PAM:OXT",OXT) + Train:SetNW2Int("PAM:Vf",speed) + Train:SetNW2Int("PAM:Vd",self.SpeedLimit) + Train:SetNW2Int("PAM:SpeedLimit",self.SpeedLimit) + Train:SetNW2String("PAM:RC",signal) + Train:SetNW2Int("PAM:Slope",slope) + Train:SetNW2Float("PAM:S",dist) + Train:SetNW2Int("PAM:V",not self.EPKActive and -1 or PAM_VV.V2 > 0 and 2 or PAM_VV.V1 > 0 and (false and 2 or 1) or 0) + Train:SetNW2Bool("PAM:LPT",PAM_VV.LPT > 0) + Train:SetNW2Bool("PAM:KD",self.OpenControl==true and 1 or PAM_VV.KD <= 0 and 2 or 0) + Train:SetNW2Bool("PAM:KVARS",PAM_VV.KVARS > 0) + Train:SetNW2Bool("PAM:VRD",PAM_VV.VRD > 0) + Train:SetNW2Bool("PAM:OPV",opv) + Train:SetNW2Bool("PAM:State5_-6",not not self.FireBack) --Vд=0 + Train:SetNW2Bool("PAM:State5_5",self.Vd0) --Vд=0 + Train:SetNW2Bool("PAM:State5_2",self.NoKD) --КД + Train:SetNW2Bool("PAM:State5_4",self.Transit) --ТР + Train:SetNW2Bool("PAM:State5_8",self.Deadlock~=nil) --ОБ + --Train:SetNW2Bool("PAM:State5_3") --СЛ + Train:SetNW2Bool("PAM:State5_7",self.NoLPT) --ЛПТ + Train:SetNW2Bool("PAM:State5_6",self.OpenDoors) --ОДП + end + if self.CurrentDriveMode then + self["2"] = self.CurrentDriveMode[2] + self["3"] = self.CurrentDriveMode[3] + local pr8 = self.CurrentDriveMode[4] + if pr8 ~= self.Target8 then + if pr8 == 0 or self.pr8Timer and CurTime()-self.pr8Timer > 1.5 then + self.Target8 = pr8 + self.pr8Timer = nil + end + if pr8 > 0 and not self.pr8Timer then self.pr8Timer = CurTime() end + end + if pr8 == 0 and self.pr8Timer then self.pr8Timer = CurTime() end + self["8"] = self.Target8+self.CurrentDriveMode[13]*(PAM_VV.KRU+self.NoFreq) + self["17"] = self.CurrentDriveMode[5] + self["19"] = self.CurrentDriveMode[6] + self["20"] = self.CurrentDriveMode[7] + self["20X"] = self.CurrentDriveMode[8] + self["25"] = self.CurrentDriveMode[9] + self["025"] = self.CurrentDriveMode[10] + self["33"] = self.CurrentDriveMode[11] + self["033"] = self.CurrentDriveMode[12] + self["33G"] = self.CurrentDriveMode[13]*(1-PAM_VV.KRU) + end + if self.CurrentDoorMode then + self["16"] = self.CurrentDoorMode[1] + self["31"] = self.CurrentDoorMode[2] + self["32"] = self.CurrentDoorMode[3] + end + if self.CurrentPneumoMode then + self["39"] = self.CurrentPneumoMode[2] + self["48"] = self.CurrentPneumoMode[3] + end + self.EPK = (self.State==4 or self.State==5 and RR and self.EPKActive) and 1 or 0 + self.Ring = (Ring) and 1 or 0 + Train:SetNW2String("PAM:Station",self.Station) + Train:SetNW2String("PAM:Line",self.Line) + Train:SetNW2String("PAM:Path",self.Path) + Train:SetNW2Bool("PAM:Reverser",self.ReverserWrench) + Train:SetNW2Bool("PAM:Keyboard",self.Keyboard) + Train:SetNW2Bool("PAM:Selected",self.Selected) + Train:SetNW2Int("PAM:State5",self.State5) + Train:SetNW2Int("PAM:State5Accept",self.State5Accept) + else + self["2"] = 0 + self["3"] = 0 + self["8"] = 0 + self["17"] = 0 + self["19"] = 0 + self["20"] = 0 + self["20X"] = 0 + self["25"] = 0 + self["025"] = 0 + self["33"] = 0 + self["033"] = 0 + self["33G"] = 0 + self["16"] = 0 + self["31"] = 0 + self["32"] = 0 + self["39"] = 0 + self["7GA"] = 0 + self["48"] = 0 + self.EPK = 0 + + self.Ring = self.State==-0.5 and 1 or 0 + self.Mode = 0 + self.SensorEnabled = false + end + Train:SetNW2Bool("PAM:KSD",self.PAKSD) + --[[ + local pos = Metrostroi.TrainPositions[Train];pos = pos and pos[1] + self.Distance2 = self.Distance2 or self.Distance + local delta = 0 + if pos then + local x = pos.x+Train.PosX + self.Distance = self.Distance or x + self.OldPos = self.OldPos or x + delta = x-self.OldPos + self.OldPos = x + end + self:FindNextSignal() + self:FindNextStation() + local speed = Train.Speed*Train.SpeedSign + local speedMpS = speed*0.2778 + if not self.Distance then return end + self.Distance = self.Distance + delta + self.Distance2 = self.Distance2 + speedMpS*dT + Train:SetNW2Float("PAM:TrackS",pos and pos.x+Train.PosX or -2) + Train:SetNW2Float("PAM:S",self.Distance) + Train:SetNW2Float("PAM:Sd",delta) + Train:SetNW2Float("PAM:S2",self.Distance2) + Train:SetNW2Float("PAM:S2d",delta) + if IsValid(self.Signal) then + Train:SetNW2String("PAM:Signal",self.Signal.Name) + end + if self.Station then + Train:SetNW2Int("PAM:Station",self.Station[1]) + Train:SetNW2Int("PAM:StationD",self.Station[2]) + Train:SetNW2Float("PAM:StationS",self.Station[2]-self.Distance) + end--]] +end \ No newline at end of file diff --git a/lua/metrostroi/systems/_obsolete/sys_81_717_puav_normal.lua b/lua/metrostroi/systems/_obsolete/sys_81_717_puav_normal.lua new file mode 100644 index 0000000..466bd36 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_81_717_puav_normal.lua @@ -0,0 +1,736 @@ +-------------------------------------------------------------------------------- +-- ПУÐÐ’ - Поездное УÑтройÑтво ÐÐ²Ñ‚Ð¾Ð’ÐµÐ´ÐµÐ½Ð¸Ñ +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("PUAV_N") +TRAIN_SYSTEM.DontAccelerateSimulation = false + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("IPAV") + + self.Train:LoadSystem("KH","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("VAV","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("KSZD","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("VZP","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("VAU","Relay","Switch",{ bass = true, normally_closed = true }) + self.Train:LoadSystem("RC2","Relay","Switch",{ bass = true, normally_closed = true }) + + self.Train:LoadSystem("P1","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("P2","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("P3","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("P4","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("P5","Relay","Switch",{ bass = true }) + + self.Selected = true + + self.KRRBrake = false + self.LK16 = 0 + self.LAVT = 0 + self.LOS = 0 + self.LRS = 0 + self.LKI1 = 0 + self.LKI2 = 0 + + self.NoFreq = 0 + self.F5 = 0 + self.F4 = 0 + self.F3 = 0 + self.F2 = 0 + self.F1 = 0 + self.LRSTimer = false + self.OldF5 = 0 + self.OldNF = 0 + + self["2"] = 0 --Вращение РК + self["3"] = 0 --Ход 3 + self["8"] = 0 --Замещение ÑлектричеÑкого Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ + self["16"] = 0 --Закрытие дверей + self["17"] = 0 -- Разрешение воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€ÐµÐ»Ðµ перегрузки + self["19"] = 0 -- Разрешение Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÑлектричеÑкого Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ + self["20"] = 0 -- Включение двигателей + self["20X"] = 0 -- Разрешение Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹ в ходовые режимы + self["025"] = 0 -- Разрешение ручного Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ + self["25"] = 0 -- Ручное торможение + self["31"] = 0 --Открытие Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð»ÐµÐ²Ñ‹Ñ… дверей + self["32"] = 0 --Открытие правых дверей + self["33"] = 0 --Включение ходового режима + self["033"] = 0 --Разрешение Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ…Ð¾Ð´Ð¾Ð²Ð¾Ð³Ð¾ режима + self["33G"] = 0 --Включение режима Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ + self["39"] = 0 --Включение Ð²ÐµÐ½Ñ‚Ð¸Ð»Ñ Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ â„– 2 + self["48"] = 0 --Включение Ð²ÐµÐ½Ñ‚Ð¸Ð»Ñ Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ â„– 1 + + self.Power = 0 + self.ALSPower = 0 + self.KRH = 0 + self.KRT = 0 + self.KGR = 0 + self.KRR1 = 0 --Контроль нулевого Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ€ÐµÐ²ÐµÑ€Ñивной рукоÑтки головного вагона + self.KRR2 = 0 --Контроль нулевого Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ€ÐµÐ²ÐµÑ€Ñивной рукоÑтки хвоÑтового вагона + self.KRR3 = 0 --Контроль реверÑивной рукоÑтки, уÑтановленной в положение «Ðазад» + self.KD = 0 + self.KPRK = 0 + self.KOAT = 0 + self.KET = 0 + self.KSOT = 0 + self.KDL = 0 + self.KDP = 0 + self.RK1 = 0 + self.KRU = 0 + + self.KVARS = 0 + self.KTARS = 0 + self.VAV = 0 + self.KH3 = 0 + self.VZP = 0 + self.KSZD = 0 + self.KB = 0 + self.RD = 0 + + + self.Ring = 0 + self.RingZero = 0 + + self.State = -1 + + --self:SetDriveMode = "Zero" + --self.CurrentDoorMode = "DO" + --self.CurrentPneumoMode = "NT" +end + + +--if TURBOSTROI then return end +function TRAIN_SYSTEM:Inputs() + return { + --Autodrive commands + "CommandDoorsLeft","CommandDoorsRight", + "CommandDrive", "CommandBrake","CommandBrakeCount","CommandBrakeElapsed" + } +end +function TRAIN_SYSTEM:Outputs() + return { "Ring","RingZero","LK16" , "LAVT", "LOS", "LRS", "LKI1", "LKI2", "NoFreq", "F5", "F4", "F3", "F2", "F1" } +end + +if CLIENT then + local function createFont(name,font,size) + surface.CreateFont("Metrostroi_"..name, { + font = font, + size = size, + weight = 500, + blursize = false, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + scanlines = false, + }) + end + createFont("PUAV","Liquid Crystal Display",38,400) + function TRAIN_SYSTEM:ClientThink() + if not self.Train:ShouldDrawPanel("PUAVOScreen") and not self.Train:ShouldDrawPanel("PUAVNScreen") then return end + --RunConsoleCommand("say","президент!!!") + if not self.DrawTimer then + render.PushRenderTarget(self.Train.PUAV,0,0,512, 128) + render.Clear(0, 0, 0, 0) + render.PopRenderTarget() + end + if self.DrawTimer and CurTime()-self.DrawTimer < 0.1 then return end + self.DrawTimer = CurTime() + render.PushRenderTarget(self.Train.PUAV,0,0,512, 128) + --render.Clear(0, 0, 0, 0) + cam.Start2D() + self:PUAVScreen(self.Train) + cam.End2D() + render.PopRenderTarget() + end + function TRAIN_SYSTEM:PrintText(x,y,text,inverse) + local str = {utf8.codepoint(text,1,-1)} + for i=1,#str do + local char = utf8.char(str[i]) + if inverse then + draw.SimpleText(string.char(0x7f),"Metrostroi_PUAV",(x+i)*27+15,y*50+30,Color(0,0,0,240),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(char,"Metrostroi_PUAV",(x+i)*27+15,y*50+30,Color(140,190,0,150),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText(char,"Metrostroi_PUAV",(x+i)*27+15,y*50+30,Color(0,0,0,240),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + end + + function TRAIN_SYSTEM:PUAVScreen(Train) + local State = Train:GetNW2Bool("BURPower",false) + if State then + surface.SetDrawColor(75*0.8,165*0.8,0,self.Warm and 130 or 0) + self.Warm = true + else + surface.SetDrawColor(20,50,0,150) + self.Warm = false + end + surface.DrawRect(0,0,512,128) + if not State then + return + end + surface.SetDrawColor(75*0.3,165*0.3,0,35) + for x=1,16 do + for y=0,1 do + surface.DrawRect(x*27+3,y*50+12,26,40) + end + end + self:PrintText(-2+9,0,"БУР") + + self:PrintText(0,1,os.date("%H:%M:%S %d/%m",Metrostroi.GetSyncTime())) + --self:PrintText(0,0,"010101010101") + --self:PrintText(1,1,Format("РК:%02d",Train:GetNW2Int("PUAV:RK",0))) + --self:PrintText(1,1,"(точнее криво)") + end +end + +function TRAIN_SYSTEM:Trigger(name,nosnd) +end + +TRAIN_SYSTEM.DriveModes = { + --Priority 2 3 8 017 19 20 20X 25 025 33 033 33G + X3 = {1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0}, + X2 = {2, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0}, + X1 = {3, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0}, + OD = {4, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0}, + OXT = {5, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0}, + ST = {6, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1}, + VPR = {7, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1}, + AT1 = {8, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1}, + AT = {9, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1}, + Zero = {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +} +function TRAIN_SYSTEM:SetDriveMode(curMode,override) + local mode = self.DriveModes[curMode] + if mode and mode[1] > self.CurrentDriveModePriority then + self.CurrentDriveMode = mode + self.CurrentDriveModePriority = mode[1] + self.DriveMode = curMode + end +end +TRAIN_SYSTEM.PneumoModes = { + --Priority 39 48 + NT = {1, 0, 0,}, + V1 = {2, 0, 1,}, + V2 = {3, 1, 0,}, +} +function TRAIN_SYSTEM:SetDoorMode(curMode,override) + local mode = self.DoorModes[curMode] + self.CurrentDoorMode = mode +end +TRAIN_SYSTEM.DoorModes = { + -- 16 31 32 + ZD = {1, 0, 0,}, + DL = {0, 1, 0,}, + DP = {0, 0, 1,}, + DO = {0, 0, 0,}, +} +function TRAIN_SYSTEM:SetPneumoMode(curMode,override) + if curMode == "V2" and self.Train.ALSCoil.Speed > 10 then self.SpeedError = true return end + local mode = self.PneumoModes[curMode] + if mode and (override or mode[1] > self.CurrentPneumoModePriority) then + self.CurrentPneumoMode = mode + self.CurrentPneumoModePriority = mode[1] + end +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "CommandBrakeElapsed" and self.KRR2 == 0 and self.KRR1 > 0 and value ~= -1 and self.CrossCount then + if self.Stage1 and value > 1 then self.Stage2Prepared = true end + + if value*1000 < 80+46+2*(8*1.5) then + self.CrossCount = self.CrossCount+1 + if self.CrossCount > 10 then self.Station = true end + if not self.Stage1 and self.BrakeProgramm then + self.Stage1 = true + self:SetTargetKPRK(15) + end + if self.Stage2Prepared then + self.Stage2 = true + end + end + --if self.VAV > 0 then print(self.Stage1,self.Stage2Prepared,self.Stage2,value*1000) end + end + if name == "CommandBrake" and self.KRR2 == 0 and self.KRR1 > 0 then + self.BrakeProgramm = self.LAVT > 0 + self.CommandDrive = false + self.DriveCommand = false + + if self.TargetKPRK and self.LastBrakeProgrammLoss and CurTime()-self.LastBrakeProgrammLoss > 0.3 then self:SetTargetKPRK(self.TargetKPRK+1) end + self.LastBrakeProgrammLoss = value == 0 and CurTime() + if self.BrakeProgrammLossDistance and self.BrakeProgrammLossDistance>15 then + self.BrakeProgrammCurrentDistance=0 + elseif value == 0 then + self.BrakeProgrammLossDistance = 0 + end + if value > 0 then + self.CrossCount = 0 + else + self.CrossCount = nil + end + end + if name == "CommandDrive" then + if value < 0 then + self.CommandDrive = false + self.DriveCommand = false + self.BrakeProgramm = false + elseif value > 0 then + self.CommandDrive = value + else + self.CommandDrive = false + end + end + if name == "CommandDoorsLeft" then self.DoorsLeft = value > 0 end + if name == "CommandDoorsRight" then self.DoorsRight = value > 0 end + +end + +function TRAIN_SYSTEM:SetTargetKPRK(val) + self.TargetKPRK = val + self.LastKRPK = self.KPRK +end + +local IgnoreDoors = false +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + if Train.Electric.Type > 3 then return end + self.CurrentDriveModePriority = 0 + self.CurrentPneumoModePriority = 0 + --if self.KB > 0 and not self.KBimer then self.KBimer = CurTime() end + --if self.KB == 0 and self.KBimer then self.KBimer = nil end + local ALS = Train.ALSCoil + + local Ring = false + local LKI = false + + local speed = math.Round(Train.ALS_ARS.Speed or 0,1) + local speedMpS = speed*0.2778 + local speedMpSS = speedMpS*ALS.SpeedSign + + local Power = self.Power>0 + local Reverser = (self.KRR1 > 0 or self.KRU > 0) + local BackReverser = self.KRR2 > 0 + if Power and not BackReverser and self.Checked==true and Reverser then + --KPRK + if self.RK1 > 0 then self.RKPos = 1 end + + local OS = ((1-self.KVARS))+(1-self.KSOT)--0 + local RS = (1-OS)*self.KVARS*self.KSOT--1 + local AV = RS*self.VAV + local KB = self.KB > 0 + -- + local ALSSh = (1-Train.ALS.Value)*Train.VRD.Value + self.F1 = ALS.F1*(1-ALSSh)*self.ALSPower + self.F2 = ALS.F2*(1-ALSSh)*self.ALSPower + self.F3 = ALS.F3*(1-ALSSh)*self.ALSPower + self.F4 = ALS.F4*(1-ALSSh)*self.ALSPower + self.F5 = ALS.F5*(1-ALSSh)*self.ALSPower + self.F6 = ALS.F6*(1-ALSSh)*self.ALSPower + self.NoFreq = (1-math.min(1,self.F5+self.F4+self.F3+self.F2+self.F1))*self.ALSPower + local NoFreq = self.NoFreq+(1-self.ALSPower) + if self.ALSPower==0 then LKI=true end + --Find current speedlimit + local Vz = 0 + if self.F4 > 0 then Vz = 40 end + if self.F3 > 0 then Vz = 60 end + if self.F2 > 0 then Vz = 70 end + if self.F1 > 0 then Vz = 80 end + + local Station = self.Station and 1 or self.F6 + local Vno = -1 + + if self.IgnorePedal and not KB then self.IgnorePedal = false end + if (NoFreq > 0 and self.OldF5 > 0 or self.F5+self.F6 > 0 and self.OldNF > 0) and self.IgnorePedal then + KB = false + end + self.OldF5 = self.F5+self.F6 + self.OldNF = NoFreq + if OS > 0 then + if KB and Vz <= 40 then Vno = 20 end + if KB and Vz > 40 then Vno = 35 end + if self.F5 > 0 and self.IgnoreF6 == nil then self.IgnoreF6 = true end + if self.F5 > 0 and self.IgnoreF6 and speed < 0.1 and self.KGR > 0 then self.IgnoreF6 = false end + if self.F5 == 0 and self.IgnoreF6 ~= nil then self.IgnoreF6 = nil end + else + self.IgnoreF6 = nil + Vno = Vz + if self.VRD > 0 and Vno > 20 then Vno = -1 end + if KB and Vno < 40 or KB and Vno >= 40 then Vno = 20 end + if self.F5 > 0 and (Station+self.VRD) == 0 then Vno = -1 end + end + if self.F5 > 0 and (not KB or Station+self.VRD == 0 or self.VRD > 0 and self.IgnoreF6) then Vno = -1 end + if NoFreq > 0 and not KB then Vno = -1 end + if self.VRD > 0 and Vno > 20 then Vno = 20 end + if self.KVARS*self.KTARS > 0 then self:SetDriveMode("OXT") end + + local prior = self.CurrentDriveModePriority + local Vo = speed + math.max(0,ALS.Acceleration*(1+self.KRH-self.KRT)) + local Vko = Vno-4 + if Vo > Vno then + if not self.OXT then + self.OXT = true + self.OXTTimer = CurTime() + + if NoFreq > 0 or self.F5*self.KD > 0 then self.RingArmed = self.RingArmed or speed>0.1 and CurTime() end + end + if (self.OXTTimer and CurTime()-self.OXTTimer > 1.5 or speed > Vno) and not self.ST then + self.ST = true + self.RingArmed = self.RingArmed or speed>0.1 and CurTime() + --if Vz > 40 then self.RingArmed = true end + end + if self.ST and not self.STTimer and self.KRT==0 then + self.STTimer = CurTime() + end + if self.ST and (self.STTimer and CurTime()-self.STTimer > 1 and speed > Vno or not self.STTimer and self.KRT>0) then + self.AT = true + end + end + if Vo < Vno and self.OXT and not self.ST and self.KGR > 0 then + if not self.OXTTimer or CurTime()-self.OXTTimer > 1.5 then + self.OXTTimer = false + self.OXT = false + end + end + --if Vo < Vko and self.ST and not self.RingArmed then --KB then + if Vo < Vno and self.ST and not self.RingArmed then --KB then + self.ST = false + self.STTimer = false + self.AT = false + end + if KB and self.RingArmed then self.RingArmed = false end + + if self.AT then + self:SetDriveMode("AT") + elseif self.ST then + self:SetDriveMode("ST") + elseif self.OXT then + self:SetDriveMode("OXT") + end + local NoStation = (not self.BrakeProgramm or not self.DoorsLeft or not self.DoorRight) and self.NoStationTimer + if NoStation and not self.NoStationTimer then self.NoStationTimer = CurTime() end + if self.NoStationTimer and not NoStation then self.NoStationTimer = nil end + local ResetBrake = self.KGR==0 and speed>10 and self.NoStationTimer and CurTime()-self.NoStationTimer>1 + if not self.BrakeProgramm or ResetBrake then + --self.BrakeProgrammLossDistance = false + --self.BrakeProgrammCurrentDistance = false + self.Stage1 = false + self.Stage1Timer = false + self.Stage2Prepared = false + self.Stage2 = false + self.Stage3 = false + self.LastBrakeProgrammLoss = false + self.TargetKPRK = false + if ResetBrake then + self.Station = false + self.NoStationTimer = false + end + end + + if self.BrakeProgrammLossDistance then self.BrakeProgrammLossDistance = self.BrakeProgrammLossDistance+speedMpS*dT end + if self.BrakeProgrammLossDistance and self.BrakeProgrammLossDistance > 30 then self.BrakeProgrammLossDistance = false end + if self.BrakeProgrammCurrentDistance then + if self.StationBrakeRing == nil then + self.StationBrakeRing = self.KRT == 0 and CurTime() + end + self.BrakeProgrammCurrentDistance = self.BrakeProgrammCurrentDistance+speedMpS*dT + end + if self.StationBrakeRing and CurTime()-self.StationBrakeRing > 3 then self.StationBrakeRing = false end + if not self.BrakeProgrammCurrentDistance and self.StationBrakeRing == false then self.StationBrakeRing = nil end + if self.BrakeProgramm then + self:SetDriveMode("OXT") + if AV > 0 then + if self.KRH == 0 then + self:SetDriveMode("ST") + if not self.TargetKPRK then self.TargetKPRK = 1 end + end + if self.TargetKPRK and self.TargetKPRK > 1 and self.KPRK < self.TargetKPRK-0.3 then + local diff = self.TargetKPRK-self.LastKRPK + if diff <= 1.4 then + self.VPR = CurTime() + else + self:SetDriveMode("AT") + end + elseif self.TargetKPRK == 5 then + self.Stage1Timer = CurTime() + end + if self.VPR then + if CurTime()-self.VPR < 0.5 then + self:SetDriveMode("VPR") + --print("VPR",self.TargetKPRK,self.KPRK) + else + self.VPR = false + end + end + if self.Stage2 then + self:SetDriveMode("AT1") + end + if self.Stage2 and not self.BrakeProgramm then + self:SetPneumoMode("V1") + end + if self.Stage1Timer and CurTime()-self.Stage1Timer > 5 then + self.Stage1 = true + self:SetTargetKPRK(15) + end + else + self.BrakeProgramm = false + end + if self.BrakeProgrammCurrentDistance then + if not self.BrakeProgrammTargetDistance and speed<36 then self.BrakeProgrammTargetDistance=(130-6*speedMpS-2*8) end + if self.BrakeProgrammTargetDistance and (self.BrakeProgrammTargetDistance) < self.BrakeProgrammCurrentDistance and self.TargetKPRK < 5 then + self:SetTargetKPRK(5) + end + end + end + if self.BrakeProgrammCurrentDistance and (not self.BrakeProgrammTargetDistance or self.BrakeProgrammCurrentDistance > self.BrakeProgrammTargetDistance) then + self.BrakeProgrammCurrentDistance = false + self.BrakeProgrammTargetDistance = false + end + --if self.KH3 > 0 then self.SpeedError = true end + if self.SpeedError and speed < 0.1 then self.SpeedError = false end + if self.SpeedError and not self.LoseVf then self.LoseVf = CurTime() end + if not self.SpeedError and self.LoseVf then self.LoseVf = false end + if self.LoseVf then + local LTimer = CurTime()-self.LoseVf + if LTimer >= 2.5 then + self:SetDriveMode("AT1") + elseif LTimer >= 1.5 then + self:SetDriveMode("ST") + else + self:SetDriveMode("OXT") + end + LKI = true + end + self:SetPneumoMode("NT") + local AntiRollingAccept = not self.Stage2 and (NoFreq==0 or self.KB==0) + if AntiRollingAccept and speed < 3.6 and self.KRH == 0 or self.KRT==0 and self.STTimer and CurTime()-self.STTimer < 0.8 then + self:SetPneumoMode("V1") + end + self.LRS = RS + self.LAVT = AV + self.LOS = OS + + if self.KGR == 0 and NoFreq == 0 then + if self.AntiRolling == nil then + self.AntiRolling = CurTime() + end + elseif self.AntiRolling == false then + self.AntiRolling = nil + self.AntiRollingCount = false + end + if self.AntiRolling and not self.AntiRollingCount then self.AntiRollingCount = 0 end + if self.AntiRollingCount then self.AntiRollingCount = self.AntiRollingCount+speedMpSS*dT end + if self.AntiRolling and (self.AntiRollingCount<-(AntiRollingAccept and 0.35 or 5) or CurTime()-self.AntiRolling > 6) then + local time = CurTime()-self.AntiRolling-6 + + if self.KGR == 1 and speed < 0.1 then + self.AntiRolling = false + self.AntiRollingCount = false + end + self:SetDriveMode("OXT") + LKI = true + if time > 7 then + self:SetPneumoMode("V2") + else + self:SetPneumoMode("V1") + Ring = time > 5 or time%1 > 0.5 + end + elseif self.AntiRollingCount and self.AntiRollingCount > 0.5 and self.AntiRolling then + self.AntiRolling = false + self.AntiRollingCount = false + end + if self.F5 > 0 and self.F6 == 0 then + if self.F5Timer == nil then self.F5Timer = CurTime() end + else + self.F5Timer = nil + end + if self.F5Timer and CurTime()-self.F5Timer > 30 then + local time = CurTime()-self.F5Timer-30 + self.RingZero = time<8 and 1 or 0--time < 3 or time%1 > 0.5 + if time > 7 then self.F5Timer = false end + else self.RingZero = 0 end + + local KD = self.KD>0 + if KD and not self.KDTimer then self.KDTimer = CurTime() end + if not KD then self.KDTimer = false end + if KD and self.KDTimer and CurTime()-self.KDTimer < 0.3 then KD=false end + --print(self.KD)-- ,self.KD>0 , NoFreq == 0 , Vz > 20 , self.KSOT > 0 , self.VZP*self.VAV > 0 , self.KRT == 0 , self.KRR3 == 0) + --Autodrive drive commands control + local CanDrive = KD and NoFreq == 0 and Vz > 20 and self.KSOT > 0 and self.VZP*self.VAV > 0 and self.KRT == 0 and self.KRR3 == 0 and self.KDCycle -- and self.KGR > 0 or speed > 0.1) + local commandDrive = math.max(self.CommandDrive or 0,self.KH3*3--[[ *(Vz > 40 and 3 or 2)--]] ,self.DriveCommand or 0) + if self.KH3*self.VAV>0 and self.KDOffTimer then + self.CommandDrive = 3--Vz > 40 and 3 or 2 + end + if CanDrive and commandDrive>0 then + self.DriveCommand = commandDrive + end + --[=[ if CanDrive and --[[ not self.DriveCommand and--]] self.KH3 > 0 then + self.DriveCommand = (Vz > 40 or self.DriveCommand and self.DriveCommand>2) and 3 or 2 + end--]=] + if (Vo > Vno or self.KTARS > 0 or self.VZP==0) then + self.DriveCommand = false + end + if not CanDrive then self.DriveCommand = false end + if self.DriveCommand then + if self.KRH > 0 and not self.KRHTimer then self.KRHTimer = CurTime() end + if self.KRHTimer and CurTime()-self.KRHTimer > 1 then + if self.DriveCommand == 3 then self:SetDriveMode("X3") + elseif self.DriveCommand > 0 then self:SetDriveMode("X2") end + elseif not self.CommandDrive and self.KH3==0 then self.DriveCommand = false + else self:SetDriveMode("X1") end + else + self:SetDriveMode("OD") + self.KRHTimer = false + end + + if self.KD == 0 and not self.KDOffTimer then self.KDOffTimer = CurTime() end + if self.KD > 0 and self.KDOffTimer then self.KDOffTimer = false end + if commandDrive>0 and self.KDOffTimer and CurTime()-self.KDOffTimer > 5 then + if self.KGR > 0 then self.BrakeProgramm = false end + if (self.KRT == 0 or AV==0) and self.StationRing == nil then self.StationRing = CurTime() end + self.KDCycle = true + end + if self.VAV==0 then self.KDCycle = nil end + if self.StationRing and (self.KRH > 0 or self.KSZD > 0) then self.StationRing = false end + if not self.KDOffTimer and self.StationRing ~= nil then self.StationRing = nil end + + --Doors control + local CanOpen = speed <= 0.1 and self.KOAT > 0 and self.KSZD*self.VAV < 1 + --and (not self.StationRing or CurTime()-self.StationRing<4) --KEK + local CanOpenLeft = CanOpen and (self.DoorsLeft or self.ALSPower*NoFreq > 0) + local CanOpenRight = CanOpen and (self.DoorsRight or self.ALSPower*NoFreq > 0) + + if self.BrakeProgramm and self.Station and CanOpen and self.K16 == 0 then + self.OpenLeftTimer = CanOpenLeft and CurTime() + self.OpenRightTimer = CanOpenRight and CurTime() + end + --if --[[ self.KH3 > 0 or--]] speed < 0.1 and (not self.OpenLeftTimer and not self.OpenLeftTimer) or self.KD < 1 then self.BrakeProgramm = false end + --if self.KH3 > 0 then self.Station = false end + if self.OpenLeftTimer and CurTime()-self.OpenLeftTimer > 1 then self.OpenLeftTimer = nil end + if self.OpenRightTimer and CurTime()-self.OpenRightTimer > 1 then self.OpenRightTimer = nil end + if CanOpenLeft or CanOpenRight then + self.CanOpen = true + end + if not CanOpen then self.CanOpen = false end + if self.CanOpen then self:SetDoorMode("DO") else self:SetDoorMode("ZD") end + if CanOpenLeft and (self.KDL > 0 or self.OpenLeftTimer) then + self:SetDoorMode("DL") + end + if CanOpenRight and (self.KDP > 0 or self.OpenRightTimer) then + self:SetDoorMode("DP") + end + + --if self.VAV==0 or self.KDCycle and (not CanOpen or self.KD>0) then self.KDCycle = nil end + --if self.KD == 0 and CanOpen and self.KDCycle==nil then self.KDCycle = CurTime() end + --if self.KDCycle and CurTime()-self.KDCycle>5 then self.KDCycle = false end) + self.LKI1 = LKI and CurTime()%0.5 > 0.25 and 1 or 0 + self.LKI2 = LKI and CurTime()%0.5 <= 0.25 and 1 or 0 + self.LK16 = self.K16 + self.KRR1Brake = true + else + if self.Checked and not Power then self.Checked = false end + self.OXTTimer = false + self.OXT = false + self.ST = false + self.STTimer = false + self.F5Timer = nil + self.AT = false + self.RingArmed = false + self.BrakeProgramm = false + self.LastBrakeProgrammLoss = false + self.BrakeProgrammLossDistance = false + self.BrakeProgrammTargetDistance = false + self.BrakeProgrammCurrentDistance = false + self.StationBrakeRing = false + self.SpeedError = false + self.LoseVf = false + self.AntiRolling = false + self.KRHTimer = false + self.StationRing = false + self.KDOffTimer = false + self.CommandDrive = false + --print(self.KRR1,self.KRR2) + if Power and Reverser and not BackReverser and not self.Checked then + self.Checked = CurTime() + elseif not BackReverser and Power then + if self.KRR1Brake then + self:SetDriveMode("OD") + self:SetPneumoMode("V1") + else + self:SetDriveMode("Zero") + self:SetPneumoMode("NT") + end + self:SetDoorMode("DO") + if speed > 1 then self.KRR1Brake = true end + if self.Checked and self.Checked ~= true and CurTime()-self.Checked < 0.2 then + Ring = true + end + if self.Checked and self.Checked ~= true and CurTime()-self.Checked > 1.5 then + self.Checked = true + self.RingArmed = CurTime() + end + else + self:SetDriveMode("Zero") + self:SetPneumoMode("NT") + end + + self.LK16 = (self.Checked and self.Checked ~= true) and 1 or 0 + self.LRS = self.LK16 + self.LAVT = self.LK16 + self.LOS = self.LK16 + self.LKI1 = self.LK16 + self.LKI2 = self.LK16 + + self.NoFreq = 0 + self.F1 = 0 + self.F2 = 0 + self.F3 = 0 + self.F4 = 0 + self.F5 = 0 + self.F6 = 0 + self.SpeedError = false + self.RingZero = 0 + end + if self.CurrentDriveMode then + self["2"] = self.CurrentDriveMode[2] + self["3"] = self.CurrentDriveMode[3] + local pr8 = self.CurrentDriveMode[4] + if pr8 ~= self.Target8 then + if pr8 == 0 or self.pr8Timer and CurTime()-self.pr8Timer > 1.5 then + self.Target8 = pr8 + self.pr8Timer = nil + end + if (--[[ (1-self.KOAT)*pr8 > 0 and--]] speed>0.1) and not self.pr8Timer then self.pr8Timer = CurTime() end + end + if pr8 == 0 and self.pr8Timer then self.pr8Timer = CurTime() end + self["8"] = (self.Target8+self.CurrentDriveMode[13]*self.KRU)*self.KRR1 + self["17"] = self.CurrentDriveMode[5] + self["19"] = self.CurrentDriveMode[6] + self["20"] = self.CurrentDriveMode[7] + self["20X"] = self.CurrentDriveMode[8] + self["25"] = self.CurrentDriveMode[9] + self["025"] = self.CurrentDriveMode[10] + self["33"] = self.CurrentDriveMode[11] + self["033"] = self.CurrentDriveMode[12] + self["33G"] = self.CurrentDriveMode[13]*(1-self.KRU) + end + if self.CurrentDoorMode then + self["16"] = self.CurrentDoorMode[1] + self["31"] = self.CurrentDoorMode[2] + self["32"] = self.CurrentDoorMode[3] + end + if self.CurrentPneumoMode then + self["39"] = self.CurrentPneumoMode[2]*self.KRR1 + self["48"] = self.CurrentPneumoMode[3]*self.Power + end + self.Ring = (Ring or self.RingArmed and (self.RingArmed-CurTime())%3 > 1.5 or self.StationRing or self.StationBrakeRing) and 1 or 0 + --[[ + for i,train in ipairs(Train.WagonList) do + if train.RheostatController then + Train:SetNW2Int("PUAV:RK"..i,math.floor(train.RheostatController.Position+0.5)) + end + end--]] +end diff --git a/lua/metrostroi/systems/_obsolete/sys_81_718_bkbd.lua b/lua/metrostroi/systems/_obsolete/sys_81_718_bkbd.lua new file mode 100644 index 0000000..71f6aeb --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_81_718_bkbd.lua @@ -0,0 +1,270 @@ +-------------------------------------------------------------------------------- +-- Блок ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑти Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ 718 +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_718_BKBD") + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("ALSCoil") + self.Power = 0 + self.FMM1 = 0 + + self.KB = 0 + self.Ring = 0 + self.KRH = 0 + self.Drive = 0 + self.Brake = 0 + self.EPKContacts = 0 + self.V0 = 0 + + self.F1 = 0 + self.F2 = 0 + self.F3 = 0 + self.F4 = 0 + self.F5 = 0 + self.F6 = 0 + self.RealF5 = 0 + self.NoFreq = 0 + -- Реле педали бдительноÑти (РПБ) + self.Train:LoadSystem("RPB","Relay","REV-813T", { bass = true, open_time = 2.5,}) + self.Train:LoadSystem("ROT1","Relay","", { bass = true}) + self.Train:LoadSystem("ROT2","Relay","", { bass = true}) + + + self.Train:LoadSystem("ARS_NG","Relay","") + self.Train:LoadSystem("ARS_NH","Relay","") + self.Train:LoadSystem("KPK1","Relay","") + self.Train:LoadSystem("KPK2","Relay","") +end + +function TRAIN_SYSTEM:Inputs() + return { } +end + +local outputs = {"NoFreq","F5","F4","F3","F2","F1"} +function TRAIN_SYSTEM:Outputs() + return outputs +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end +if not math.Round then + function math.Round( num, idp ) + + local mult = 10 ^ ( idp or 0 ) + return math.floor( num * mult + 0.5 ) / mult + + end +end + +--A48-self.PBPower +--KRU*A42+A48*KV*A79 - self.FMM1 +--KRU*A17+A48*KV*A29- self.FMM2 +function TRAIN_SYSTEM:Think() + local Train = self.Train + local ALS = Train.ALSCoil + local speed = math.Round(ALS.Speed or 0,1) + local BUP = Train.BUP + local EnableALS = (Train.BKBD.Power75V+self.Power) + + Train.FMM1:TriggerInput("Set",self.FMM1) + Train.FMM2:TriggerInput("Set",self.FMM2) + self.PBPower = 1 + self.KPK1 = self.FMM1 + if EnableALS ~= ALS.Enabled then + ALS:TriggerInput("Enable",EnableALS) + end + if self.Power12V > 0 then + self.NoFreq = ALS.NoFreq + self.F1 = ALS.F1*(1-self.NoFreq) + self.F2 = ALS.F2*(1-self.NoFreq) + self.F3 = ALS.F3*(1-self.NoFreq) + self.F4 = ALS.F4*(1-self.NoFreq) + self.F5 = ALS.F5*(1-self.NoFreq) + self.F6 = ALS.F6*(1-self.NoFreq) + self.RealF5 = self.F5*(1-(self.F4+self.F3+self.F2+self.F1)) + self.NoFreq = self.NoFreq + (1-math.min(1,self.F5+self.F4+self.F3+self.F2+self.F1)) + else + self.F1 = 0 + self.F2 = 0 + self.F3 = 0 + self.F4 = 0 + self.F5 = 0 + self.F6 = 0 + self.RealF5 = 0 + self.NoFreq = 0 + end + + -- ARS system placeholder logic + if EnableALS then + local TwoToSix = self.TwoToSix > 0 + if (ALS.F1+ALS.F2+ALS.F3+ALS.F4+ALS.F5+ALS.F6+self.NoFreq) == 0 then self.NoFreq = 1 end + local Vlimit = 0 + if self.F4 > 0 then Vlimit = 40 end + if self.F3 > 0 then Vlimit = 60 end + if self.F2 > 0 then Vlimit = 70 end + if self.F1 > 0 then Vlimit = 80 end + -- Determine next limit and current limit + self.SpeedLimit = Vlimit + self.NextLimit = Vlimit + if self.F1 > 0 then self.NextLimit = 80 end + if self.F2 > 0 then self.NextLimit = 70 end + if self.F3 > 0 then self.NextLimit = 60 end + if self.F4 > 0 then self.NextLimit = 40 end + if self.F5 > 0 then self.NextLimit = 20 end + if not TwoToSix and (self.NextLimit ~= math.max(20,Vlimit) or self.F6 > 0) then + self.SpeedLimit = 0 + self.NextLimit = self.SpeedLimit + self.NoFreq = 1 + self.F1 = 0 + self.F2 = 0 + self.F3 = 0 + self.F4 = 0 + self.F5 = 0 + self.F6 = 0 + self.RealF5 = 0 + elseif TwoToSix and (self.NextLimit == math.max(20,Vlimit) and self.F6 == 0) then + self.SpeedLimit = math.min(40,self.SpeedLimit) + self.NextLimit = math.min(40,self.NextLimit) + end + if self.AttentionPedal then self.SpeedLimit = self.SpeedLimit > 40 and 40 or 0 end + if TwoToSix and self.F4 > 0 and self.F6 > 0 then + self.LN = 1 + elseif not TwoToSix then + self.LN = 0 + end + else + local V = math.floor(speed +0.05) + self.SpeedLimit = 0 + self.NextLimit = 0 + end + + if self.Power > 0 then + self.KVT = self.KB>0 + --[[ if PB and not self.AttentionPedalTimer and not self.Overspeed then + self.AttentionPedalTimer = CurTime() + 1 + end + + if PB and self.AttentionPedalTimer and (CurTime() - self.AttentionPedalTimer) > 0 then + self.AttentionPedal = true + end + if not PB and (self.AttentionPedalTimer or self.AttentionPedal) then + self.AttentionPedal = false + self.AttentionPedalTimer = nil + end + if PB or Train.SB9.Value > 0.5 then self.KVT = true end + if not PB and Train.SB9.Value < 0.5 then self.KVT = false end +--]] + -- Ignore pedal + --[[ if self.IgnorePedal and self.KVT then + self.KVT = false + else + self.IgnorePedal = false + end--]] + + --if self.EnableARS ~= EnableARS then Train.EPKContacts:TriggerInput("Set",Train.EPKContacts.Value) end + local SpeedLimit = self.LN == 0 and TwoToSix and self.SpeedLimit > 40 and 40 or self.SpeedLimit + if SpeedLimit < 20 and self.KVT then SpeedLimit = 20 end + -- Check absolute stop + if self.NoFreq ~= self.PrevNoFreq and BUP.IT < 1 then + self.IgnorePedal = self.NoFreq > 0 and BUP.IT < 1 + self.PrevNoFreq = self.NoFreq + end + local zero = (self.NoFreq+self.RealF5) > 0 + -- Enable PV1 and disassembly when we overspeed + if speed > SpeedLimit+0.5 and not self.Disassembly then + if zero then + self.Disassembly = CurTime()-2 + else + self.Disassembly = CurTime() + end + self.ElectricBrake = true + self.ARSRing = true + end + if self.KVT and self.ARSRing then self.ARSRing = false end + --We can disable brake, if speed < Vdop-3 and electric brake + if not self.ARSRing and speed <= SpeedLimit-3 and self.ElectricBrake then + self.ElectricBrake = false + self.Disassembly = false + self.PneumaticBrake2 = false + end + --We can disable ring if speed < Vdop and not electric brake + if self.KVT and speed <= SpeedLimit and not self.ElectricBrake and self.ARSRing then self.ARSRing = false end + --Disable PN1 when we overspeed and time of overspeed < 1.5 + --[[ if speed <= SpeedLimit and self.Disassembly and CurTime()-self.Disassembly < 1.5 then + self.Disassembly = false + self.ElectricBrake = false + end--]] + --PN2 when we brake to 0 speed + if self.Disassembly and self.ElectricBrake and speed < 0.25 then self.PneumaticBrake2 = true end + + -- AntiRolling + local Drive = self.KRH > 0 + -- Engage RO + if speed < 3 and self.RO ~= true and not Drive and self.KDReadyToRelease ~= false then self.RO = true end + -- Check RO when we starting + if self.RO and self.RO ~= true and (speed > 5 or CurTime()-self.RO > 7) then + self.RO = nil + self.PneumaticBrake2 = self.NoFreq == 0 and speed <= 5 + self.KDReadyToRelease = nil + end + -- Disable PN1 and start RO timer + if Drive and self.RO == true then + self.RO = CurTime() + end + + -- Kiyv door close cancel pneumatic brake 1 command trigger + --[[ if self.KiyvMode then + -- Prepare + if Train.KD.Value == 0 then self.KDReadyToRelease = true end + -- Release brakes and give RO additional time + if (Train.KD.Value == 1) and self.KDReadyToRelease then + self.KDReadyToRelease = false + self.RO = CurTime() + 1.5 + end + end--]] + + --[[ local delay = 3.5 + if 10 < speed and speed < 30 then delay = 5.5 end + if speed < 3 then delay = 10 end + if (self.ElectricBrake or speed < 0.2) and Train:ReadTrainWire(34) == 0 then + if not self.EPKTimer then self.EPKTimer = CurTime() end + else + self.EPKTimer = nil + end + if self.EPKTimer and CurTime()-self.EPKTimer > delay then Train.EPKContacts:TriggerInput("Open",1) end +--]] + -- ARS signals + local Ebrake, Abrake, Pbrake1,Pbrake2 = + ((self.ElectricBrake) and 1 or 0), + ((self.Disassembly or self.ARSRing or self.ElectricBrake or zero and not self.KVT) and 1 or 0), + ((self.Disassembly and (zero or CurTime()-self.Disassembly < 1.5) or self.RO == true) and 1 or 0), + ((self.PneumaticBrake2 or zero and not self.KVT) and 1 or 0) + -- Apply ARS system commands + + self.Drive = 1-(Ebrake+Abrake) + self.DriveR = self.Drive + self.Brake = Ebrake + self.EPKContacts = 1 + self.OKT = self.IKT + self.Ring = self.ARSRing and 1 or 0 + self.V0 = self.RO == true and 1 or 0 + else + --if Train.EPK.Value == 0 then Train.EPKContacts:TriggerInput("Set",1) end + self.ARSRing = true + self.ElectricBrake = true + self.PneumaticBrake1 = false + self.PneumaticBrake2 = true + self.Disassembly = CurTime()-5 + self.EPKTimer = false + self.RO = true + + self.Drive = 0 + self.Brake = 0 + --self.DriveR = 0 + self.EPKContacts = 0 + self.IKT = 0 + self.OKT = 0 + self.Ring = 0 + self.V0 = 0 + end +end diff --git a/lua/metrostroi/systems/_obsolete/sys_81_718_electric.lu b/lua/metrostroi/systems/_obsolete/sys_81_718_electric.lu new file mode 100644 index 0000000..e31c870 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_81_718_electric.lu @@ -0,0 +1,784 @@ +-------------------------------------------------------------------------------- +-- ЭлектричеÑкие и Ñиловые цепи 718 +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_718_Electric") +TRAIN_SYSTEM.DontAccelerateSimulation = false + + + +function TRAIN_SYSTEM:Initialize() + -- General power output + self.Main750V = 0.0 + self.Aux750V = 0.0 + self.Power750V = 0.0 + self.Aux80V = 0.0 + self.Lights80V = 0.0 + self.Battery80V = 0.0 + + -- Resistances + self.R1 = 1e9 + self.R2 = 1e9 + self.Rs1 = 1e9 + self.Rs2 = 1e9 + + self.Rstator13 = 1e9 + self.Rstator24 = 1e9 + self.Ranchor13 = 1e9 + self.Ranchor24 = 1e9 + + -- Electric network info + self.Itotal = 0.0 + self.I13 = 0.0 + self.I24 = 0.0 + self.Ustator13 = 0.0 + self.Ustator24 = 0.0 + self.Ishunt13 = 0.0 + self.Istator13 = 0.0 + self.Ishunt24 = 0.0 + self.Istator24 = 0.0 + self.Utotal = 0.0 + -- Calculate current through rheostats 1, 2 + self.IR1 = self.Itotal + self.IR2 = self.Itotal + self.IRT2 = self.Itotal + self.T1 = 25 + self.T2 = 25 + self.P1 = 0 + self.P2 = 0 + self.Overheat1 = 0 + self.Overheat2 = 0 + + -- Total energy used by train + self.ElectricEnergyUsed = 0 -- joules + self.ElectricEnergyDissipated = 0 -- joules + self.EnergyChange = 0 + + --Train wire outside power + -- Need many iterations for engine simulation to converge + self.SubIterations = 16 + + self.Train:LoadSystem("KK","Relay","KPP-110",{ bass = true }) + self.Train:LoadSystem("BV","Relay") + self.Train:LoadSystem("GV","Relay","GV_10ZH",{bass=true}) + + + --РегулÑтор Ð´Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + self.Train:LoadSystem("RD","Relay","AK-11B") + --self.Train:LoadSystem("Telemetry",nil,"",{"Electric","Panel","Engines"}) +end + + +function TRAIN_SYSTEM:Inputs() + return { } +end + +function TRAIN_SYSTEM:Outputs() + return { "I13","I24","Itotal", "Brake", "Drive", + --[[ + "Rs1","Rs2","Itotal","I13","I24","IRT2", + "Ustator13","Ustator24","Ishunt13","Istator13","Ishunt24","Istator24", + "Uanchor13","Uanchor24","U13","U24","Utotal","RVState",--]] + "Main750V", "Power750V", "Aux750V", "Aux80V", "Lights80V", "Battery80V", --[[ + "ElectricEnergyUsed", "ElectricEnergyDissipated", "EnergyChange", + "RPSignalResistor"]] + "RNState", "RN", + "BTB","V2","V1", + "BVKA_KM1","BVKA_KM2","BVKA_KM3","BVKA_KM4","BVKA_KM5", + "Vent1","Vent2", + "BSKA","BTPI_V","BTPI_ZKK","BUTP" + } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + + + +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:Think(dT,iter) + local Train = self.Train + -- local dT = dT/8 + ---------------------------------------------------------------------------- + -- Voltages from the third rail + ---------------------------------------------------------------------------- + self.Main750V = Train.TR.Main750V + self.Aux750V = Train.TR.Main750V + self.Power750V = self.Main750V--*Train.GV.Value + + + ---------------------------------------------------------------------------- + -- Information only + ---------------------------------------------------------------------------- + self.Aux80V = BBE and 82 or 65 + self.Lights80V = BBE and 82 or 0 + self.Battery80V = 65--(Train.VB.Value > 0) and (BBE and 82 or 65) or 0 + + ---------------------------------------------------------------------------- + -- Some internal electric + ---------------------------------------------------------------------------- + local P = self.Battery80V > 62 and 1 or 0 + local HV = 550 < self.Main750V and self.Main750V < 975 and 1 or 0 + + + ---------------------------------------------------------------------------- + -- Solve circuits + ---------------------------------------------------------------------------- + self:SolvePowerCircuits(Train,dT) + if iter == 1 then + self:SolveControlCircuits(Train,dT) + end + + + ---------------------------------------------------------------------------- + -- Calculate current flow out of the battery + ---------------------------------------------------------------------------- + --local totalCurrent = 5*A30 + 63*A24 + 16*A44 + 5*A39 + 10*A80 + --local totalCurrent = 20 + 60*DIP +end + +local S = {} +local min = math.min +function TRAIN_SYSTEM:SolveControlCircuits(Train,dT) + local B = (Train.Battery.Voltage > 62) and 1 or 0 + local T = Train.SolverTemporaryVariables + if not T then + T = {} + for i=1,100 do T[i] = 0 end + Train.SolverTemporaryVariables = T + end + + for i=1,100 do + T[i] = min(Train:ReadTrainWire(i),1) + end + T[-34] = min(Train:ReadTrainWire(-34),1) + T[-11] = min(Train:ReadTrainWire(-11),1) + + local BUP = Train.BUP + local BUV = Train.BUV + + local BKCU = Train.BKCU + local BKVA = Train.BKVA + local BUVS = Train.BUVS + local BBE = Train.BBE + local BKBD = Train.BKBD + + local Panel = Train.Panel + --1.1. Цепи аккумулÑторной батареи. Страница 7 + S[303] = B*Train.VB.Value + S[305] = S[303] + S[315] = S[303]*Train.SF5.Value + S[310] = B*Train.VB.Value + S[550] = S[310]*Train.SF2.Value--CHECK + Train:WriteTrainWire(50,S[550]) + S[316] = S[315]+T[50] --+ДИОД + S[311] = B*Train.VB.Value + S[334] = S[311]*Train.SF45.Value + S[312] = S[311]*Train.SF3.Value --CHECK + BBE.KMPower = S[334] + BBE.Power = S[305] + + --1.2. Цепи зарÑда аккумулÑторной батареи. Включение ББЭ. Страница 7 + S[318] = S[316]*Train.SF7.Value + S[518] = S[318]*Train.SB15.Value + Train:WriteTrainWire(18,S[518]) + S[324] = T[18]*Train.SF12.Value + BBE.Activate = S[324] --Включение ББЭ + + --1.4. Отключение ББЭ. Страница 8 + S[519] = S[318]*Train.SB16.Value + Train:WriteTrainWire(19,S[519]) + S[333] = T[19]*Train.SF13.Value + + --1.5. Ðварийное отключение ББЭ и Ñигнализации Страница 9 + Train:WriteTrainWire(20,BBE.Error) + Panel.HL7 = S[318]*T[20] + BBE.Deactivate = S[333] --Включение ББЭ + + --2.1. ОÑвещение вагонов оÑновное. Страница 9 + S[544] = S[318]*Train.SAP8.Value + Train:WriteTrainWire(44,S[544]) + S[538] = (1-Train.SAP8.Value)*T[44] + Train:WriteTrainWire(38,S[538]) + S[340] = T[38]*Train.SF16.Value + BBE.KM2Power = S[340] + + S[408] = S[305]*BBE.KM2 + S[409] = S[408]*Train.SF44.Value --END + Panel.EL7_30 = S[409] + + --2.2. Ðварийное оÑвещение Ñалонов и кабины. Страница 10 + S[407] = S[312]*Train.SF44.Value + Panel.EL3_6 = S[407] + S[322] = T[50]*Train.SF11.Value + Panel.EL1 = S[322] + S[321] = T[50]*Train.SF10.Value + S[385] = S[321]*Train.SAP13.Value + Panel.EL2 = S[385] + --2.3. ОÑвещение аппаратных отÑеков. Страница 10 + S[384] = S[322]*Train.SAP12.Value + Panel.EL31 = S[384] + --2.4. ПодÑветка прибора. Страница 10 + S[328] = T[50]*Train.SF72.Value + S[131] = S[328]*Train["SA4/1"].Value + Panel.HL52 = S[131] + + --3.1 ОÑновное управление ЭК. Страница 11 + S[531] = S[318]*(1-Train.SA16.Value) + Train:WriteTrainWire(31,S[531]) + S[410] = Train.SA16.Value*T[31] + Train.SF56.Value*T[55] --3.3. ОÑобенноÑти ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð­Ðš в неполном ÑоÑтаве. Страница 12 + S[529] = S[410]*Train.SP1.Value + Train:WriteTrainWire(29,S[529]) + + + --3.2. Резервное управление ЭК. Страница 10 + S[320] = S[316]*Train.SF9.Value + S[530] = S[320]*Train.SB14.Value + Train:WriteTrainWire(30,S[530]) + S[348] = T[30]*Train.SF22.Value + + S[347] = T[29] + BKVA.KM2 = (S[347]+S[348])--[[*тепловое реле]] + + S[206] = self.Main750V > 200 and 1 or 0 + S[208] = S[206]*BKVA.KM2 + Train.KK:TriggerInput("Set",S[208]) + + --4.1. Обогрев кабины. Страница 13 + S[383] = S[321]*Train.SAP11.Value + BKVA.KM1 = S[383] + + --5.1. ВентилÑÑ†Ð¸Ñ Ñалонов. Страница 13 + S[307] = S[312]*Train.SF34.Value + + S[540] = S[321]*Train.SAP9.Value --Включение + Train:WriteTrainWire(40,S[540]) + S[375] = T[40]*Train.SF23.Value + BUVS.KM1 = S[375] + + S[379] = S[307]*BUVS.KM1 --Контроль + BUVS.KV1 = S[379] + S[542] = 1-BUVS.KV1 --Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ + Train:WriteTrainWire(42,S[542]) + Panel.VS1 = T[42]*S[321] + + + S[541] = S[322]*Train.SAP10.Value + Train:WriteTrainWire(41,S[541]) + S[377] = T[41]*Train.SF23.Value + BUVS.KM2 = S[377] + + S[381] = S[307]*BUVS.KM2 + BUVS.KV2 = S[381] + + S[549] = 1-BUVS.KV2 + Train:WriteTrainWire(49,S[549]) + Panel.VS2 = T[49]*S[322] + + -- 5.2. Питание Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»Ñ Ð²ÐµÐ½Ñ‚Ð¸Ð»Ñтора кабины. Страница 13 + + + --6.1. Ð—Ð²ÑƒÐºÐ¾Ð²Ð°Ñ ÑигнализациÑ. Страница 14 + S[613] = B*(1-Train.VB.Value) + S[675] = S[613]*Train.SF55.Value + + S[548] = S[318]*Train.SB5.Value + S[675]*Train.SP7.Value + Train:WriteTrainWire(48,S[548]) + Train.BZOS.Ring = T[48] + + --6.3. ÐŸÐ¾Ð¶Ð°Ñ€Ð½Ð°Ñ ÑигнализациÑ. Страница 15 --TODO + S[326] = T[50]*Train.SF76.Value + --6.2. ÐžÑ…Ñ€Ð°Ð½Ð½Ð°Ñ ÑигнализациÑ. Страница 14 + Train.BZOS.Power = S[326] + + --7.2. Цепи "нулевого" Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÐšÐ  и КРУ. Цепи габаритных фонарей. Страница 16 + S[317] = S[316]*Train.SF6.Value + BKCU.KM3 = S[317]*Train.KRU["317-317A"]*Train.KR["317A-387"]*(1-BKCU.KM1)*(1-BKCU.KM2) + S[320] = S[316]*Train.SF9.Value + BKCU.KM7 = S[320]*Train.KRU["320A-393"]*(1-BKCU.KM5)*(1-BKCU.KM6) + S[366] = S[316]*Train.SF41.Value + Panel.H11 = S[366]*(1-BKCU.KM2) + + --7.3. Цепи Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ "ВПЕРЕД" КР. Страница 17 + S[3178] = S[317]*Train.KRU["317-317A"]*(1-BKCU.KM8)*(1-BKCU.KM4) --FIXME + BKCU.KM2 = S[3178]*Train.KR["317B-388"] + S[673] = S[317]*Train.SF51.Value + --673-679 - ГребнеÑмазыватель + --S[369] = S[316]*Train.SF8.Value*Train.KR["673-679"] + + --7.4. Цепи Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ "ÐÐЗÐД" КР. Страница 17 + BKCU.KM1 = S[3178]*Train.KR["317B-386"] + + --7.5. Цепи Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ "ВПЕРЕД" КРУ. Страница 17 + S[3208] = S[320]*Train.KR["320-320A"]*(1-BKCU.KM8)*(1-BKCU.KM4) --FIXME + BKCU.KM6 = S[3208]*Train.KRU["320B-392"] + S[319] = S[316]*Train.SF8.Value + S[369] = S[319]*(Train.KR["319-369"]+Train.KRU["319-369"]) + + S[680] = S[316]*Train.SF52.Value + S[620] = S[680]*Train.KRU["680-680A"] + S[673]*Train.KR["673-673A"] + S[611] = S[620]*Train.SF61.Value + BKBD.FMM1 = S[611] + BKCU.KM5 = S[3208]*Train.KRU["320B-394"] + + --8.1. Открытие дверей. Страница 18 + S[536] = S[369]*(Train.SB1.Value*(1-Train.SA7.Value)+Train.SA24.Value+Train.SBP4.Value) + Panel.HL3 = S[369]*(1-Train.SA7.Value) + Train:WriteTrainWire(36,S[536]) + --S[357] = T[36]*Train.SF18.Value+S[358] + + --8.1.4 Открытие правых дверей Страница 19 + S[537] = S[369]*(Train.SB2.Value*Train.SA7.Value+Train.SBP6.Value) + Train:WriteTrainWire(37,S[537]) + Panel.HL4 = S[369]*Train.SA7.Value + --S[359] = T[37]*Train.SF20.Value+S[358] + + --8.2. Закрытие дверей. Страница 19 + S[532] = S[369]*Train.SA5.Value*Train.SA6.Value + Train:WriteTrainWire(32,S[532]) + + --352-353-354 + S[354] =(1-BKVA.KM4) + Train.U1:TriggerInput("Set", T[32]*S[354]) + + --8.2.2 + S[533] = S[369]*Train.SB3.Value + Train:WriteTrainWire(33,S[533]) + + S[358] = T[33]*Train.SF19.Value + S[357] = T[36]*Train.SF18.Value+S[358] + S[359] = T[37]*Train.SF20.Value+S[358] + Train.U2:TriggerInput("Set",S[357]) + Train.U3:TriggerInput("Set",S[359]) + + --8.3. Контроль Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹. Страницы 19-20 + --312-SA15..SA22-351 + S[351] = S[312]*Train.SAD.Value + BKVA.KM4 = S[351] + + --312-KM2/1-534(-34)-Концевые каждого вагона(34)-Замкнутый КМ3 БКЦУ-36 провод + S[534] = S[312]*(BKCU.KM1+BKCU.KM2)+S[320]*(BKCU.KM5+BKCU.KM6)*(1-BKCU.KM7) + Train:WriteTrainWire(-34,S[534]) --Подача Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ñ Ð½Ð° 34 провод + Train:WriteTrainWire(34,T[-34]*Train.SAD.Value) --Разрыв Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ñ Ð¾Ð½Ñ†ÐµÐ²Ñ‹Ñ… переключателей + S[535] = T[34]*BKCU.KM3*BKCU.KM7 + Train:WriteTrainWire(35,S[535]) + Panel.SD = T[35] + Panel.HL13 = S[312]*S[354] + BUP.IKDV = BUP.Power*(1-T[35]) + + --9. БЛОКИРОВКРПОСТОВ УПРÐВЛЕÐИЯ И ФОРМИРОВÐÐИЕ ЦЕПЕЙ УПРÐВЛЕÐИЯ ДВИЖЕÐИЕМ СОСТÐÐ’Ð + --Страница 20-21 + --317Г + S[515] = S[317]*(BKCU.KM1+BKCU.KM2)-->V + Train:WriteTrainWire(15,S[515])-->V + BKCU.KM4 = T[15]*min(1,BKCU.KM3+BKCU.KM4) + --320Г + S[516] = S[320]*(BKCU.KM5+BKCU.KM6)-->V + Train:WriteTrainWire(16,S[516])-->V + BKCU.KM8 = T[16]*min(1,BKCU.KM7+BKCU.KM8) + BUP.Power = S[515] + + --9.4 + S[335] = T[15]*Train.SF14.Value + S[337] = T[16]*Train.SF5.Value + BKVA.KM3 = S[335]+S[337] + + --312=314 + S[314] = S[312]*Train.SF4.Value*BKVA.KM3 + BUV.Power = S[314] + Train.BSKA.Power = S[314] + Train.PTTI.Power = S[314] + + S[517] = (1-BKVA.KM3) + Train:WriteTrainWire(17,S[517]) + Panel.CUV = T[15]*T[17]--Питание Ñ 15 провода и Ð·ÐµÐ¼Ð»Ñ Ñ 17 + + --10. ЦЕПИ БЕЛЫХ ФÐР И ЛÐМП СИГÐÐЛИЗÐЦИИ СТОЯÐОЧÐОГО ТОРМОЗР+ --Страница 322 + + + --316-SF41-365-KM2/6-390 + S[390] = S[316]*Train.SF41.Value*(BKCU.KM2+BKCU.KM6) + --390-SA1/1(SA2/1)-367(368)-R9(R10)-HL17-19(HL20-22) + S[512] = S[328]*Train.SQ1.Value + Train:WriteTrainWire(12,S[512]) + Panel.HL46 = S[512] + Panel.ST = T[12] + + Panel.HL17 = S[390]*Train["SA1/1"].Value + Panel.HL20 = S[390]*Train["SA2/1"].Value + --11. ЗÐЩИТРСИЛОВЫХ ЦЕПЕЙ. ЦЕПИ КОÐТРОЛЯ СОСТОЯÐИЯ ЗÐЩИТЫ. + --11.1. Цепи быÑтродейÑтвующих автоматичеÑких выключателей. + --Страница 23 + S[306] = S[312]*Train.SF27.Value + Train.BVA.Power = S[306] + S[3061] = S[306]*Train.SF46.Value + Train.BVA.ControlPower = S[3061] + + --S[526] = T[45]*Train.SB12.Value + Train.BVA.Reset = T[26] + + --317Г + 320Г + S[522] = S[515]*Train.SB13.Value + Train:WriteTrainWire(22,S[522]) + + --11.4 + Train.BVA.Disable = T[22] + --360Ð-Лампа-БУВ-725 + Panel.HL25 = S[3061]*BUV.ORP + --Мы получаем землю + S[528] = Panel.HL25*100+BUV.OIZ + Train:WriteTrainWire(28,S[528]) + Panel.HL6 = S[515]*(S[528]+T[28]) + + --11.1.5 + S[526] = (T[45]+T[54])*Train.SB12.Value + Train:WriteTrainWire(26,S[526]) + + --12.2. Команды Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ. + BUP.IV = BUP.Power*S[317]*BKCU.KM2 + BUP.IN = BUP.Power*S[317]*BKCU.KM1 + + --13.1. Формирование Ñигналов безопаÑноÑти Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ð¾Ð¹ ÑиÑтемой ÐРС. + --626=363 + S[626] = (S[611]*Train.SA13.Value+T[87]*(1-Train.SA13.Value))*Train.RC.Value + BKBD.Power = S[626] + S[610] = Train.PB.Value*S[611] + (1-Train.SAP26.Value)*S[626] + Train.RPB:TriggerInput("Set",S[610]) + BUP.IPB = BUP.Power*S[610] + + S[584] = S[626]*Train.PB.Value + T[87]*Train.SA14.Value*Train.SB8.Value + Train:WriteTrainWire(84,S[584]) + BKBD.KB = T[84] + + --13.2 + S[5908] = S[673]*(1-Train.RC.Value) + S[5901] = S[5908]*Train.SF77.Value + S[590] = BKBD.Drive*Train.RC.Value + S[5901]*Train.SBR16.Value + Train:WriteTrainWire(90,S[590]) + S[589] = BKBD.Drive--[[R]] *Train.RC.Value + Train:WriteTrainWire(89,S[589]) + --13.1 + BUP.IX = T[90] + Train.ROT1:TriggerInput("Set",S[590]+T[90]*(1-Train.RC.Value)) + Train.ROT2:TriggerInput("Set",S[589]+T[89]*(1-Train.RC.Value)) + Panel.KVD = T[87]*(1-Train.ROT2.Value) + --501Г-501Ð’ + S[5012] = Train.ROT1.Value*BUP.OXp + --501Б-501Е + S[5016] = S[5012]*(Train.SP2.Value+Train.SA9.Value) + S[5011] = S[5016]*(Train.SP5.Value+Train.SAP26.Value) + S[501] = S[5011]*(Train.RPB.Value+Train.SA8.Value) + BUP.IX = S[501] + BUP.IROT = BUP.OXp*(1-S[5012]) + BUP.IPVU = BUP.OXp*(1-S[5016]) + BUP.ISOT = BUP.OXp*(1-S[5011]) + BUP.IRPB = BUP.OXp*(1-S[501]) + Train:WriteTrainWire(1,S[501]) + + S[649] = S[326]*(1-Train.SP2.Value) + Panel.AVU = S[649] + + S[724] = S[515]*Train.SA2.Value + BUP.IBDV = S[724] + + + --13.2. Формирование Ñигналов безопаÑноÑти при отключении ÑиÑтемы ÐРС. Страница 30 + --РПБ- + S[509] = S[611]*(1-Train.RPB.Value)*(1-Train.SAP24.Value) + T[14]*Train.KRU["514-509"]--15.2 + Train:WriteTrainWire(09,S[509]) + S[5091] = T[09]*Train.SF26.Value + + S[672] = S[316]*Train.SF60.Value + S[615]= S[672]*(Train.SA13.Value+Train.SA15.Value) + S[627] = S[672]*Train.SA15.Value + BKBD.Power75V = S[627] + BKBD.Power12V = S[615] + + --13.3 Формирование Ñигналов безопаÑноÑти в режиме ÐРС-Р. Страница 31 + S[680] = S[316]*Train.SF52.Value + S[5875] = S[680]*Train.SA14.Value + S[587] = S[5875]*(1-Train.RC.Value) + Train:WriteTrainWire(87,S[587]) + + S[606] = BKBD.EPKContacts*Train.RC.Value + + S[583] = S[606]*(1-Train.SA13.Value) + Train:WriteTrainWire(83,S[583]) + Train.U4:TriggerInput("Set",T[83]+S[606]) + + --14.1. Ходовые режимы оÑновного управлениÑ. Страница 32-33 + Train.KMR1:TriggerInput("Set",BUV.OVP*(1-Train.KMR2.Value)*S[314]) + Train.KMR2:TriggerInput("Set",BUV.ONZ*(1-Train.KMR1.Value)*S[314]) + BUV.IRV = S[314]*Train.KMR1.Value + BUV.IRN = S[314]*Train.KMR2.Value + + BUV.IRV = S[314]*Train.KMR1.Value + BUV.IRN = S[314]*Train.KMR2.Value + Train.K1:TriggerInput("Set",S[314]*BUV.OLK) + Train.K2:TriggerInput("Set",S[314]*BUV.OKX) + Train.K3:TriggerInput("Set",S[314]*BUV.OKT) + + BUV.IKX = Train.K2.Value + BUV.IKT = Train.K3.Value + BUV.ILT = Train.K1.Value + + --14.2. Резервное управление ходовыми режимами. Страница 34 + S[557] = S[320]*BKCU.KM6 + Train:WriteTrainWire(57,S[557]) + S[558] = S[320]*BKCU.KM5 + Train:WriteTrainWire(58,S[558]) + + S[3205] = S[516]*(Train.ROT2.Value+Train.ROT1.Value)*Train.SP5.Value + S[555] = S[3205]*(Train.SBR14.Value+Train.SBR15.Value) + Train:WriteTrainWire(55,S[555]) + S[556] = S[555]*Train.SBR15.Value + Train:WriteTrainWire(56,S[556]) + --14.3. Режим "МÐÐЕВР". Страница 35 + S[513] = S[515]*Train.SB7.Value + Train:WriteTrainWire(13,S[513]) + --15. УПРÐВЛЕÐИЕ СИЛОВЫМ ПРИВОДОМ Ð’ ТОРМОЗÐЫХ РЕЖИМÐÐ¥ Страница 36-37 + --КТ + --БКБД головного-511-К4БУВС-БКБД хвоÑтового + S[5092] = S[5091]+T[08]*(1-BUVS.KM3) + BUVS.KM3 = S[314]*BUV.ORMT + BUVS.KM4 = S[314]*BUV.ORKT + Train.U6:TriggerInput("Set",S[5092]) + S[5102] = T[10]+Train.SF29.Value*BUV.OV1 + Train.U7:TriggerInput("Set",S[5102]) + --15.2. Управление от ÐРС и контроль ÑффективноÑти торможениÑ. Страница 39 + --!!!7.5.4. замкнутыми контакта ми КРУ 514 КРУ → 509 КРУ объединÑÑŽÑ‚ÑÑ Ñ†ÐµÐ¿Ð¸ команд аварийного Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð’Ð— â„–2 от БКБД. + S[507] = S[626]*BKBD.Brake + + Train:WriteTrainWire(07,S[507]) + Train:WriteTrainWire(14,S[507]) + --16. ПЕРЕХОД Ð’ РЕЖИМ "ВЫБЕГ" + --320Г-SB14/15 + S[554] = S[516]*(1-Train.SBR14.Value)*(1-Train.SBR15.Value) + Train:WriteTrainWire(54,S[554]) + --17. РЕЖИМЫ РÐБОТЫ ЭЛЕКТРИЧЕСКОЙ СХЕМЫ УПРÐВЛЕÐИЯ Ð’ÐГОÐРИ ЦЕПЕЙ КОÐТРОЛЯ + S[527] = S[318]*Train.SB4.Value + Train:WriteTrainWire(27,S[527]) + S[523] = BUV.Power*BUV.OSN + Train:WriteTrainWire(23,S[523]) + Panel.HL5 = S[318]*T[23] + S[547] = S[515]*Train.SBP22.Value + Train:WriteTrainWire(47,S[547]) + + --19. УПРÐВЛЕÐИЕ ОТЖÐТИЕМ ТОКОПРИЕМÐИКОВ + S[524] = T[50]*((Train.VTPR.Value == 1 or Train.VTPR.Value == 2) and 1 or 0) + S[525] = T[50]*((Train.VTPR.Value == 1 or Train.VTPR.Value == 3) and 1 or 0) + S[559] = Train.VTPR.Value > 0 and 1 or 0 + Train:WriteTrainWire(24,S[524]) + Train:WriteTrainWire(25,S[525]) + Train:WriteTrainWire(59,S[559]) + Train.U5:TriggerInput("Set",T[24]*T[59]) + + --24. УПРÐВЛЕÐИЕ ÐППÐРÐТУРОЙ ÐРС ПРИ ДВИЖЕÐИИ СОСТÐВРСО ВСПОМОГÐТЕЛЬÐЫМ ПОЕЗДОМ + S[574] = S[611]*Train.SAP23.Value + Train:WriteTrainWire(74,S[574]) + S[588] = S[611]*Train.SAP14.Value*(1-Train.SAP23.Value) + Train:WriteTrainWire(88,S[588]) + --Выдача Ñигналов БУП на поездные провода + Train:WriteTrainWire(01,BUP.OX) + Train:WriteTrainWire(02,BUP.OT) + Train:WriteTrainWire(03,BUP.OU1) + Train:WriteTrainWire(04,BUP.OU2) + Train:WriteTrainWire(05,BUP.OV) + Train:WriteTrainWire(06,BUP.ON) + Train:WriteTrainWire(08,BUP.OZPT) + Train:WriteTrainWire(45,BUP.O0) + + --Передача Ñигналов Ñ Ð¿Ð¾ÐµÐ·Ð´Ð½Ñ‹Ñ… проводов в БУВ + local BUVPower = BUV.Power + BUV.IX = BUVPower*T[01] + BUV.IT = BUVPower*T[02] + BUV.IU1 = BUVPower*T[03] + BUV.IU2 = BUVPower*T[04] + BUV.IVP = BUVPower*T[05] + BUV.INZ = BUVPower*T[06] + BUV.ITARS = BUVPower*T[07] + BUV.ITEM = BUVPower*T[14] + BUV.IM = BUVPower*T[13] + BUV.IVZ = BUVPower*T[26] + BUV.IPROV = BUVPower*T[27] + BUV.IPROV0 = BUVPower*T[47] + BUV.IXP = BUVPower*T[55] + BUV.IU1R = BUVPower*T[56] + BUV.IVR = BUVPower*T[57] + BUV.INR = BUVPower*T[58] + BUV.IAVR = BUVPower*(1-Train.SP3.Value) --737-700 14.3. Режим "МÐÐЕВР". + --BUV. = BUVPower*Train:ReadTrainWire(45) + self.Schemes = S +end + +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:SolvePowerCircuits(Train,dT) + -- Apply K2, K3 contactors + self.R1 = self.R1 + 1e9*(1 - math.min(1,Train.K2.Value+Train.K3.Value)) + self.R2 = self.R2 + 1e9*(1 - math.min(1,Train.K2.Value+Train.K3.Value)) + + -- Thyristor contrller + self.Rs1 = Train.PTTI.RVResistance or 1e9 + self.Rs2 = Train.PTTI.RVResistance or 1e9 + + -- Calculate total resistance of engines winding + local RwAnchor = Train.Engines.Rwa*2 -- Double because each set includes two engines + local RwStator = Train.Engines.Rws*2 + -- Total resistance of the stator + shunt + self.Rstator13 = (RwStator^(-1) + self.Rs1^(-1))^(-1) + self.Rstator24 = (RwStator^(-1) + self.Rs2^(-1))^(-1) + -- Total resistance of entire motor + self.Ranchor13 = RwAnchor + self.Ranchor24 = RwAnchor + + -- Calculate electric power network + --FIXME + if Train.PTTI.State < 0 then + self:SolvePT(Train) + else + self:SolvePP(Train) + end + + -- Calculate current through rheostats 1, 2 + self.IR1 = self.I13 + self.IR2 = self.I24 + + -- Calculate induction properties of the motor + self.I13SH = self.I13SH or self.I13 + self.I24SH = self.I24SH or self.I24 + + -- Time constant + local T13const1 = math.max(16.00,math.min(28.0,(self.R13^2) * 2.0)) -- R * L + local T24const1 = math.max(16.00,math.min(28.0,(self.R24^2) * 2.0)) -- R * L + -- Total change + local dI13dT = T13const1 * (self.I13 - self.I13SH) * dT + local dI24dT = T24const1 * (self.I24 - self.I24SH) * dT + + -- Limit change and apply it + if dI13dT > 0 then dI13dT = math.min(self.I13 - self.I13SH,dI13dT) end + if dI13dT < 0 then dI13dT = math.max(self.I13 - self.I13SH,dI13dT) end + if dI24dT > 0 then dI24dT = math.min(self.I24 - self.I24SH,dI24dT) end + if dI24dT < 0 then dI24dT = math.max(self.I24 - self.I24SH,dI24dT) end + self.I13SH = self.I13SH + dI13dT + self.I24SH = self.I24SH + dI24dT + self.I13 = self.I13SH + self.I24 = self.I24SH + + --FIXME + if Train.PTTI.State > 0 then -- PS + self.I13 = self.I13 * Train.K2.Value * Train.K1.Value + self.I24 = self.I24 * Train.K2.Value * Train.K1.Value + + self.Itotal = Train.Electric.I13 + Train.Electric.I24 + else -- PT + self.I13 = self.I13 * Train.K3.Value + self.I24 = self.I24 * Train.K3.Value + + self.Itotal = Train.Electric.I13 + Train.Electric.I24 + end + + -- Calculate extra information + self.Uanchor13 = self.I13 * self.Ranchor13 + self.Uanchor24 = self.I24 * self.Ranchor24 + + + + ---------------------------------------------------------------------------- + -- Calculate current through stator and shunt + self.Ustator13 = self.I13 * self.Rstator13 + self.Ustator24 = self.I24 * self.Rstator24 + + self.Ishunt13 = self.Ustator13 / self.Rs1 + self.Istator13 = self.Ustator13 / RwStator + self.Ishunt24 = self.Ustator24 / self.Rs2 + self.Istator24 = self.Ustator24 / RwStator + + --FIXME + if Train.PTTI.State < 0 then + local I1,I2 = self.Ishunt13,self.Ishunt24 + self.Ishunt13 = -I2 + self.Ishunt24 = -I1 + + I1,I2 = self.Istator13,self.Istator24 + self.Istator13 = -I2 + self.Istator24 = -I1 + end + + + -- Sane checks + if self.R1 > 1e5 then self.IR1 = 0 end + if self.R2 > 1e5 then self.IR2 = 0 end + + -- Calculate power and heating --FIXME + local K = 12.0*1e-5 + local H = (10.00+(15.00*Train.Engines.Speed/80.0))*1e-3 + self.P1 = (self.IR1^2)*self.R1 + self.P2 = (self.IR2^2)*self.R2 + self.T1 = (self.T1 + self.P1*K*dT - (self.T1-25)*H*dT) + self.T2 = (self.T2 + self.P2*K*dT - (self.T2-25)*H*dT) + self.Overheat1 = math.min(1-1e-12, + self.Overheat1 + math.max(0,(math.max(0,self.T1-750.0)/400.0)^2)*dT ) + self.Overheat2 = math.min(1-1e-12, + self.Overheat2 + math.max(0,(math.max(0,self.T2-750.0)/400.0)^2)*dT ) + + -- Energy consumption + self.ElectricEnergyUsed = self.ElectricEnergyUsed + math.max(0,self.EnergyChange)*dT + self.ElectricEnergyDissipated = self.ElectricEnergyDissipated + math.max(0,-self.EnergyChange)*dT +end + +function TRAIN_SYSTEM:SolvePP(Train) + -- Calculate total resistance of each branch + local R1 = self.Ranchor13 + self.Rstator13 + local R2 = self.Ranchor13 + self.Rstator13 + local CircuitClosed = (self.Power750V*Train.K1.Value > 0) and 1 or 0 + + -- Main circuit parameters + local V = self.Power750V*Train.K1.Value*Train.PTTI.RNState + local E1 = Train.Engines.E13 + local E2 = Train.Engines.E24 + + -- Calculate current through engines 13, 24 + self.I13 = math.max(0,((V - E1)/R1)*CircuitClosed) + self.I24 = math.max(0,((V - E2)/R2)*CircuitClosed) + + -- Total resistance (for induction RL circuit) + self.R13 = R1 + self.R24 = R2 + + -- Calculate everything else + self.U13 = self.I13*R1 + self.U24 = self.I24*R2 + self.Utotal = (self.U13 + self.U24)/2 + self.Itotal = Train.Electric.I13 + Train.Electric.I24 + -- Energy consumption + self.EnergyChange = math.abs((self.I13^2)*R1) + math.abs((self.I24^2)*R2) +end + +function TRAIN_SYSTEM:SolvePT(Train) + -- Winding resistances + local R1 = self.Ranchor13 + self.Rstator13 + local R2 = self.Ranchor24 + self.Rstator24 + -- Total resistance of the entire braking rheostat + local R3 = --[[ (1.730+0.4)*--]] 2.5*(1-0.84*Train.PTTI.RNState) + -- Main circuit parameters + local V = self.Power750V*Train.K1.Value + local E1 = Train.Engines.E13 + local E2 = Train.Engines.E24 + + -- Calculate current through engines 13, 24 + self.I13 = -((E1*R2 + E1*R3 - E2*R3 - R2*V)/(R1*R2 + R1*R3 + R2*R3)) + self.I24 = -((E2*R1 - E1*R3 + E2*R3 - R1*V)/(R1*R2 + R1*R3 + R2*R3)) + + -- Total resistance (for induction RL circuit) + self.R13 = R3+((R1^(-1) + R2^(-1))^(-1)) + self.R24 = R3+((R1^(-1) + R2^(-1))^(-1)) + + -- Calculate everything else + self.U13 = self.I13*R1 + self.U24 = self.I24*R2 + self.Utotal = (self.U13 + self.U24)/2 + self.Itotal = Train.Electric.I13 + Train.Electric.I24 + + -- Energy consumption + self.EnergyChange = -math.abs(((0.5*self.Itotal)^2)*self.R13) +end diff --git a/lua/metrostroi/systems/_obsolete/sys_81_720_asnp.lua b/lua/metrostroi/systems/_obsolete/sys_81_720_asnp.lua new file mode 100644 index 0000000..678aa1c --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_81_720_asnp.lua @@ -0,0 +1,737 @@ +-------------------------------------------------------------------------------- +-- Announcer and announcer-related code +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_720_ASNP") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.TriggerNames = { + "R_ASNPMenu", + "R_ASNPUp", + "R_ASNPDown", + "R_ASNPOn", + "R_Program1", + "R_Program2", + --R_Announcer + --R_Line + } + self.Triggers = {} + + self.State = 0 + + self.Line = 1 + self.Path = false + self.Station = 1 + self.Arrived = true + + self.RouteNumber = 0 + + self.Line = 1 + + self.Train:LoadSystem("R_ASNPOn","Relay","Switch",{ normally_closed = true, bass = true }) + self.Train:LoadSystem("R_ASNPMenu","Relay","Switch",{bass = true }) + self.Train:LoadSystem("R_ASNPUp","Relay","Switch",{bass = true }) + self.Train:LoadSystem("R_ASNPDown","Relay","Switch",{bass = true }) +end + +if TURBOSTROI then return end +function TRAIN_SYSTEM:ClientInitialize() +end +if TURBOSTROI then return end + +function TRAIN_SYSTEM:Inputs() + return {} +end + +function TRAIN_SYSTEM:Outputs() + return {} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end +if CLIENT then + local function createFont(name,font,size) + surface.CreateFont("Metrostroi_"..name, { + font = font, + size = size, + weight = 500, + blursize = false, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + scanlines = false, + }) + end + createFont("ASNP","Liquid Crystal Display",30,400) + function TRAIN_SYSTEM:ClientThink() + --RunConsoleCommand("say","президент!!!") + if not self.DrawTimer then + render.PushRenderTarget(self.Train.ASNP,0,0,512, 128) + render.Clear(0, 0, 0, 0) + render.PopRenderTarget() + end + if self.DrawTimer and CurTime()-self.DrawTimer < 0.1 then return end + self.DrawTimer = CurTime() + render.PushRenderTarget(self.Train.ASNP,0,0,512, 128) + --render.Clear(0, 0, 0, 0) + cam.Start2D() + self:ASNPScreen(self.Train) + cam.End2D() + render.PopRenderTarget() + end + function TRAIN_SYSTEM:PrintText(x,y,text,inverse) + local str = {utf8.codepoint(text,1,-1)} + for i=1,#str do + local char = utf8.char(str[i]) + if inverse then + draw.SimpleText(string.char(0x7f),"Metrostroi_ASNP",(x+i)*20.5+5,y*40+40,Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(char,"Metrostroi_ASNP",(x+i)*20.5+5,y*40+40,Color(140,190,0,150),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText(char,"Metrostroi_ASNP",(x+i)*20.5+5,y*40+40,Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + end + + TRAIN_SYSTEM.LoadSeq = "/-\\|" + function TRAIN_SYSTEM:ASNPScreen(Train) + local State = self.Train:GetNW2Int("ASNP:State",-1) + if State ~= 0 then + surface.SetDrawColor(140,190,0,self.Warm and 130 or 255) + self.Warm = true + else + surface.SetDrawColor(20,50,0,230) + self.Warm = false + end + surface.DrawRect(0,0,512,128) + if State == 0 then + return + end + + + if State == -2 then + self:PrintText(0,0,"Ошибка памÑти") + self:PrintText(0,1,"Карта не поддерживаетÑÑ") + return + end + + if State == 1 then + self:PrintText(0,0,"Ðажмиие \"MENU\"") + self:PrintText(0 ,1,"Ð´Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° наÑтройки") + end + if State > 1 and not Metrostroi.ASNPSetup then + self:PrintText(0,0,"Client error") + self:PrintText(0,1,"ASNPSetup nil") + return + end + if State == 2 then + local RouteNumber = Format("%02d",Train:GetNW2Int("ASNP:RouteNumber",0)) + local sel = Train:GetNW2Int("ASNP:Selected",0) + self:PrintText(0,0,"Ðомер маршрута:") + if sel == 2 then + local timer = math.ceil(RealTime()%7.5/1.5) + if timer == 1 then self:PrintText(4,1,"Ð”Ð»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ") + elseif timer == 2 then self:PrintText(6,1,"нажмите \"МЕÐЮ\"") + elseif timer == 3 then self:PrintText(6,1,"Ð”Ð»Ñ Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‚Ð° к") + elseif timer == 4 then self:PrintText(5,1,"предыдущей цифре") + elseif timer == 5 then self:PrintText(4,1,"нажмите \"+\" или \"-\"") end + else + local timer = math.ceil(RealTime()%7.5/1.5) + if timer == 1 then self:PrintText(5,1,"Ð”Ð»Ñ Ð²Ð²Ð¾Ð´Ð° номера") + elseif timer == 2 then self:PrintText(4,1,"нажмите \"+\" или \"-\"") + elseif timer == 3 then self:PrintText(6,1,"Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° к") + elseif timer == 4 then self:PrintText(5,1,"Ñледующей цифре") + elseif timer == 5 then self:PrintText(6,1,"нажмите \"МЕÐЮ\"") end + end + + self:PrintText(0,1,RouteNumber[1],sel==0 and RealTime()%1 > 0.5) + self:PrintText(1,1,RouteNumber[2],sel==1 and RealTime()%1 > 0.5) + end + + local stbl = Metrostroi.ASNPSetup and Metrostroi.ASNPSetup[Train:GetNW2Int("Announcer",1)] + if State > 2 and not stbl then + self:PrintText(0,0,"Client error") + self:PrintText(0,1,"ASNPSetup[ann] nil") + return + end + + if State == 3 then + local Line = self.Train:GetNW2Int("ASNP:Line",1) + local ltbl = stbl[Line] + local St,En = ltbl[1],ltbl[#ltbl] + self:PrintText(0,0,"Маршрут"..(ltbl.Loop and " ()" or "")) + local timer = math.ceil(RealTime()%7.5/1.5) + if timer == 1 then self:PrintText(0,1,(ltbl.Name or "Ðет названиÑ")) + elseif timer == 2 then self:PrintText(0,1,"От:");self:PrintText(3,1,St[2]);self:PrintText(21,1,tostring(St[1])) + elseif timer == 3 then self:PrintText(0,1,"До:");self:PrintText(3,1,En[2]);self:PrintText(21,1,tostring(En[1])) + elseif timer == 4 then self:PrintText(4,1,"Ð”Ð»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ") + elseif timer == 5 then self:PrintText(6,1,"нажмите \"МЕÐЮ\"") end + end + + if State == 4 then + local Line = Train:GetNW2Int("ASNP:Line",1) + local ltbl = stbl[Line] + if ltbl.Loop then + local Path = Train:GetNW2Bool("ASNP:Path") + self:PrintText(0,0,"Путь") + self:PrintText(0,1,Path and "II (второй)" or " I (первый)") + else + local St = ltbl[Train:GetNW2Int("ASNP:FirstStation",1)] + self:PrintText(0,0,"ÐÐ°Ñ‡Ð°Ð»ÑŒÐ½Ð°Ñ ÑтанциÑ") + self:PrintText(0,1,St[1]..":"..St[2]) + end + end + + if State == 5 then + local Line = Train:GetNW2Int("ASNP:Line",1) + local ltbl = stbl[Line] + if ltbl.Loop then + local station = Train:GetNW2Int("ASNP:LastStation",1) + local En = ltbl[station] + self:PrintText(0,0,"ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ ÑтанциÑ") + if station == 0 then + self:PrintText(0,1," ():".."Кольцевой") + else + self:PrintText(0,1,En[1]..":"..En[2]) + end + else + local En = ltbl[Train:GetNW2Int("ASNP:LastStation",1)] + self:PrintText(0,0,"ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ ÑтанциÑ") + self:PrintText(0,1,En[1]..":"..En[2]) + end + end + + if State == 6 then + local Line = Train:GetNW2Int("ASNP:Line",1) + local ltbl = stbl[Line] + local Path = Train:GetNW2Bool("ASNP:Path") + self:PrintText(0,0,"Проверьте данные") + self:PrintText(18,0,Format("%02d",Line)) + self:PrintText(22,0,Path and "II" or "I") + self:PrintText(22,1,Format("%02d",Train:GetNW2Int("ASNP:RouteNumber",0))) + if ltbl.Loop then + local station = Train:GetNW2Int("ASNP:LastStation",1) + local En = ltbl[station] + self:PrintText(20,0,"()") + local timer = math.ceil(RealTime()%9/1.5) + if timer == 1 then self:PrintText(0,1,"()"..(ltbl.Name or "Ðет названиÑ")) + elseif timer == 2 and station > 0 then self:PrintText(0,1,"До:");self:PrintText(3,1,En[2]);self:PrintText(21,1,tostring(En[1])) + elseif timer == 2 and station == 0 then self:PrintText(0,1,"До:Кольцевой") + --elseif timer == 3 then self:PrintText(0,1,"До:");self:PrintText(3,1,En[2]);self:PrintText(21,1,tostring(En[1])) + elseif timer == 3 then self:PrintText(2,1,"Ð”Ð»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ") + elseif timer == 4 then self:PrintText(4,1,"нажмите \"МЕÐЮ\"") + elseif timer == 5 then self:PrintText(6,1,"Ð”Ð»Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ñ‹") + elseif timer == 6 then self:PrintText(1,1,"нажмите \"+\" или \"-\"") end + else + local St = ltbl[Train:GetNW2Int("ASNP:FirstStation",1)] + local En = ltbl[Train:GetNW2Int("ASNP:LastStation",1)] + if Path then + local StT = En;En=St;St=StT + end + local timer = math.ceil(RealTime()%10.5/1.5) + if timer == 1 then self:PrintText(0,1,(ltbl.Name or "Ðет названиÑ")) + elseif timer == 2 then self:PrintText(0,1,"От:");self:PrintText(3,1,St[2]);self:PrintText(21,1,tostring(St[1])) + elseif timer == 3 then self:PrintText(0,1,"До:");self:PrintText(3,1,En[2]);self:PrintText(21,1,tostring(En[1])) + elseif timer == 4 then self:PrintText(2,1,"Ð”Ð»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ") + elseif timer == 5 then self:PrintText(4,1,"нажмите \"МЕÐЮ\"") + elseif timer == 6 then self:PrintText(6,1,"Ð”Ð»Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ñ‹") + elseif timer == 7 then self:PrintText(1,1,"нажмите \"+\" или \"-\"") end + end + end + if State == 7 then + local Line = Train:GetNW2Int("ASNP:Line",1) + local ltbl = stbl[Line] + + local Path = Train:GetNW2Bool("ASNP:Path") + + local St = ltbl[Train:GetNW2Int("ASNP:FirstStation",1)] + local En + if Path and not ltbl.Loop then + En = ltbl[Train:GetNW2Int("ASNP:FirstStation",1)] + else + En = ltbl[Train:GetNW2Int("ASNP:LastStation",1)] + end + + local Station = ltbl[Train:GetNW2Int("ASNP:Station",1)] + local Dep = self.Train:GetNW2Bool("ASNP:Arrived",false) + + + if Dep then self:PrintText(0,0,"Отпр.") else self:PrintText(0,0,"Приб.") end + self:PrintText(6,0,Station[2]) + --if self.Train:GetNW2Int("ASNP:Locked",0) > 1 then self:PrintText(20,0,"Бл*Л") else self:PrintText(20,0,"Пл Л") end + if Train:GetNW2Bool("ASNP:Playing",false) then + self:PrintText(0,1,"<<< ИДЕТ ОБЪЯВЛЕÐИЕ >>>") + --elseif Station == En then + -- self:PrintText(0,1,"<<< КОÐЕЧÐЯ >>>") + else + --self:PrintText(0,1,string.rep("I",Path and 2 or 1)) + self:PrintText(0,1,string.format("%02d",Train:GetNW2Int("ASNP:RouteNumber",0))) + if ltbl.Loop and Train:GetNW2Int("ASNP:LastStation",1) == 0 then + self:PrintText(6,1,"Кольцевой") + else + self:PrintText(6,1,En[2]:upper()) + end + --if self.Train:GetNW2Int("ASNP:Locked",0) > 1 then self:PrintText(20,1,"Бл*П") else self:PrintText(20,1,"Пл П") end + end + end + end + return +end + +function TRAIN_SYSTEM:Zero() + self.Station = self.Path and self.LastStation or self.FirstStation + self.Arrived = true + self:UpdateBoards() +end + +function TRAIN_SYSTEM:Next() + local tbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + if tbl.Loop then + if self.Arrived then + if self.Path then + self.Station = self.Station - 1 + else + self.Station = self.Station + 1 + end + if self.Station == 0 or self.Station > #tbl then + self.Station = self.Station == 0 and #tbl or 1 + end + if self.Station == 0 or self.Station > #tbl then + self.Station = self.Station == 0 and (self.LastStation > 0 and self.LastStation or #tbl) or 1 + end + self.Arrived = false + --self.Station = 1 + else + self.Arrived = true + end + else + if self.Arrived then + if self.Station ~= (self.Path and self.FirstStation or self.LastStation) then + if self.Path then + self.Station = math.max(self.FirstStation,self.Station - 1) + else + self.Station = math.min(self.LastStation,self.Station + 1) + end + self.Arrived = false + end + else + self.Arrived = true + end + end + self:UpdateBoards() +end +function TRAIN_SYSTEM:Prev() + local tbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + if tbl.Loop then + if not self.Arrived then + if self.Path then + self.Station = self.Station + 1 + else + self.Station = self.Station - 1 + end + if self.Station == 0 or self.Station > #tbl then + self.Station = self.Station == 0 and (self.LastStation > 0 and self.LastStation or #tbl) or 1 + end + --self.Station = 1 + self.Arrived = true + else + self.Arrived = false + end + else + if not self.Arrived then + if self.Path then + self.Station = math.min(self.LastStation,self.Station + 1) + else + self.Station = math.max(self.FirstStation,self.Station - 1) + end + self.Arrived = true + else + if self.Station ~= (self.Path and self.LastStation or self.FirstStation) then + self.Arrived = false + end + end + end + self:UpdateBoards() +end +function TRAIN_SYSTEM:AnnQueue(msg) + local Announcer = self.Train.Announcer + if msg and type(msg) ~= "table" then + Announcer:Queue{msg} + else + Announcer:Queue(msg) + end +end +function TRAIN_SYSTEM:Play(dep,not_last) + local message + local tbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + local stbl = tbl[self.Station] + local last,lastst + if tbl.Loop then + last = self.LastStation + lastst = not dep and self.LastStation > 0 and self.Station == last and tbl[last].arrlast + else + last = self.Path and self.FirstStation or self.LastStation + lastst = not dep and self.Station == last and tbl[last].arrlast + end + if dep then + message = stbl.dep[self.Path and 2 or 1] + else + if lastst then + message = stbl.arrlast[self.Path and 2 or 1] + else + message = stbl.arr[self.Path and 2 or 1] + end + end + self:AnnQueue{"click1"} + self:AnnQueue(message) + if lastst then table.insert(message,1,-1) end + local stbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line][self.Station] + if self.LastStation > 0 and not dep and self.Station ~= last and tbl[last].not_last and (stbl.have_inrerchange or math.abs(last-self.Station) <= 3) then + self:AnnQueue(tbl[last].not_last) + end + self:AnnQueue{"click2"} + self:UpdateBoards() +end +function TRAIN_SYSTEM:CANReceive(source,sourceid,target,targetid,textdata,numdata) + if sourceid == self.Train:GetWagonNumber() then return end + if textdata == "RouteNumber" then self.RouteNumber = numdata end + if textdata == "Path" then self.Path = numdata > 0 end + if textdata == "Line" then self.Line = numdata end + if textdata == "FirstStation" then self.FirstStation = numdata end + if textdata == "LastStation" then self.LastStation = numdata end + if textdata == "Activate" then + local tbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + self.Station = tbl.Loop and 1 or self.Path and self.LastStation or self.FirstStation + self.Arrived = true + self.State = 7 + local last = self.Path and not tbl.Loop and self.FirstStation or self.LastStation + local lastst = tbl[last] and tbl[last][1] + if lastst then self.Train:SetNW2Int("LastStation",lastst) end + self.Train:SetNW2Int("RouteNumber",self.RouteNumber) + end +end +function TRAIN_SYSTEM:SyncASNP() + local tbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + local last = self.Path and self.FirstStation or self.LastStation + local lastst = tbl[last] and tbl[last][1] + if lastst then self.Train:SetNW2Int("LastStation",lastst) end + self.Train:SetNW2Int("RouteNumber",self.RouteNumber) + self.Train:CANWrite("ASNP",self.Train:GetWagonNumber(),"ASNP",nil,"RouteNumber",self.RouteNumber) + self.Train:CANWrite("ASNP",self.Train:GetWagonNumber(),"ASNP",nil,"Path",self.Path and 0 or 1) + self.Train:CANWrite("ASNP",self.Train:GetWagonNumber(),"ASNP",nil,"Line",self.Line) + self.Train:CANWrite("ASNP",self.Train:GetWagonNumber(),"ASNP",nil,"FirstStation",self.FirstStation) + self.Train:CANWrite("ASNP",self.Train:GetWagonNumber(),"ASNP",nil,"LastStation",self.LastStation) + self.Train:CANWrite("ASNP",self.Train:GetWagonNumber(),"ASNP",nil,"Activate") +end +function TRAIN_SYSTEM:UpdateBoards() + if self.State < 7 then + return + end + local BUKP = self.Train.BUKP + local tbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + local stbl = tbl.LED + local curr = 0 + if self.Path then + for i=#stbl,self.Station+1,-1 do curr = curr + stbl[i] end + else + for i=1,self.Station-1 do curr = curr + stbl[i] end + end + local nxt = 0 + if self.Arrived then + curr = curr + stbl[self.Station] + else + nxt = stbl[self.Station] + end + BUKP:CState("PassSchemeCurr",curr,nil,true) + BUKP:CState("PassSchemeArr",nxt,nil,true) + --[[ + if Train:GetNW2Bool("PassSchemesRotated") then + --BUKP:CState("PassSchemePath",not self.Path,nil,true) + else + --BUKP:CState("PassSchemePath",self.Path,nil,true) + end]] + BUKP:CState("PassSchemePath",self.Path,nil,true) + BUKP:CState("TickerNext",not self.Arrived,nil,true) + BUKP:CState("TickerCurr",tbl[self.Station][2],nil,true) +end + +function TRAIN_SYSTEM:Trigger(name,value) + local tbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)] + if name == "R_Program2" and value and #self.Train.Announcer.Schedule==0 then + if self.State ~= 7 and tbl[self.Line] and tbl[self.Line].spec_last then + self:AnnQueue{"click1"} + self:AnnQueue(-1) + self:AnnQueue(tbl[self.Line].spec_last) + self:AnnQueue{"click2"} + elseif self.State == 7 then + local ltbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + local last,lastst + if self.Arrived then + if tbl.Loop then + ltbl = self.LastStation + lastst = self.LastStation > 0 and self.Station == last and ltbl[last].arrlast + else + last = self.Path and self.FirstStation or self.LastStation + lastst = self.Station == last and ltbl[last].arrlast + end + end + if lastst then + self:AnnQueue{"click1"} + self:AnnQueue(-1) + self:AnnQueue(ltbl.spec_last) + self:AnnQueue{"click2"} + else + self.StopMessage = not self.StopMessage + self:AnnQueue{"click1"} + self:AnnQueue(ltbl.spec_wait[self.StopMessage and 1 or 2]) + self:AnnQueue{"click2"} + end + end + end + if self.State == 1 and name == "R_ASNPMenu" and value then + self.State = 2 + self.Selected = 0 + elseif self.State == 2 and value then + if name == "R_ASNPMenu" then + self.Selected = self.Selected + 1 + if self.Selected > 2 then + self.State = 3 + end + end + if (name == "R_ASNPUp" or name == "R_ASNPDown") and self.Selected < 2 then + local sel = 1-self.Selected + local num = Format("%02d",self.RouteNumber)[self.Selected+1] + if name == "R_ASNPUp" then if num == "9" then self.RouteNumber = self.RouteNumber - 10^sel*9 else self.RouteNumber = self.RouteNumber + 10^sel end end + if name == "R_ASNPDown" then if num == "0" then self.RouteNumber = self.RouteNumber + 10^sel*9 else self.RouteNumber = self.RouteNumber - 10^sel end end + end + if (name == "R_ASNPUp" or name == "R_ASNPDown") and self.Selected == 2 then self.Selected = 0 end + elseif self.State == 3 and value then + if name == "R_ASNPDown" and value then + self.Line =self.Line + 1 + if self.Line > #tbl then self.Line = 1 end + end + if name == "R_ASNPUp" and value then + self.Line = math.max(1,self.Line - 1) + if self.Line < 1 then self.Line = #tbl end + end + if name == "R_ASNPMenu" and value then + if not tbl[self.Line].Loop then + self.FirstStation = 1 + end + self.State = 4 + end + elseif self.State == 4 and value and not tbl[self.Line].Loop then --Ðе кольцевой + local stbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + if name == "R_ASNPDown" then + local found = false + for i=self.FirstStation+1,#stbl do + if stbl[i].arrlast then self.FirstStation = i;found=true;break end + end + if not found then + for i=1,#stbl do + if stbl[i].arrlast then self.FirstStation = i;break end + end + end + end + if name == "R_ASNPUp" then + local found = false + for i=self.FirstStation-1,1,-1 do + if stbl[i].arrlast then self.FirstStation = i;found=true;break end + end + if not found then + for i=#stbl,1,-1 do + if stbl[i].arrlast then self.FirstStation = i;break end + end + end + end + if name == "R_ASNPMenu" then + self.State = 5 + for i=#stbl,1,-1 do + if i ~= self.FirstStation and stbl[i].arrlast then self.LastStation = i;break end + end + end + elseif self.State == 4 and value and tbl[self.Line].Loop then --Кольцевой + if name == "R_ASNPDown" or name == "R_ASNPUp" then + self.Path = not self.Path + end + if name == "R_ASNPMenu" then + self.LastStation = 0 + self.FirstStation = 0 + self.State = 5 + end + elseif self.State == 5 and value and not tbl[self.Line].Loop then --Ðе кольцевой + local stbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + if name == "R_ASNPDown" then + local found = false + for i=self.LastStation+1,#stbl do + if i ~= self.FirstStation and stbl[i].arrlast then self.LastStation = i;found=true;break end + end + if not found then + for i=1,#stbl do + if i ~= self.FirstStation and stbl[i].arrlast then self.LastStation = i;break end + end + end + end + if name == "R_ASNPUp" then + local found = false + for i=self.LastStation-1,1,-1 do + if i ~= self.FirstStation and stbl[i].arrlast then self.LastStation = i;found=true;break end + end + if not found then + for i=#stbl,1,-1 do + if i ~= self.FirstStation and stbl[i].arrlast then self.LastStation = i;break end + end + end + end + if name == "R_ASNPMenu" then + self.Path = self.FirstStation > self.LastStation + self.Station = self.FirstStation + if self.Path then + local first = self.LastStation + self.LastStation = self.FirstStation + self.FirstStation = first + end + self.Arrived = true + self.State = 6 + end + elseif self.State == 5 and value and tbl[self.Line].Loop then --Кольцевой + local stbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + if name == "R_ASNPDown" then + local found = false + for i=self.LastStation+1,#stbl do + if stbl[i].arrlast then self.LastStation = i;found=true;break end + end + if not found and self.LastStation ~= 0 then + self.LastStation = 0 + end + end + if name == "R_ASNPUp" then + local found = false + if self.LastStation == 1 then + self.LastStation = 0 + found = true + end + for i=self.LastStation-1,1,-1 do + if stbl[i].arrlast and stbl[i].arrlast[self.Path and 2 or 1] then self.LastStation = i;found=true;break end + end + if not found then + for i=#stbl,1,-1 do + if stbl[i].arrlast and stbl[i].arrlast[self.Path and 2 or 1] then self.LastStation = i;break end + end + end + end + if name == "R_ASNPMenu" then + self.State = 6 + self.Station = 1 + self.Arrived = true + end + elseif self.State == 6 and value then + local stbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + if name == "R_ASNPDown" or name == "R_ASNPUp" then + self.State = 2 + self.Selected = 0 + end + if name == "R_ASNPMenu" then + if self.FirstStation ~= 0 then + if self.Path then + self.Train.Announcer:Queue{"click1","announcer_ready",stbl[self.LastStation].arrlast[3],stbl[self.FirstStation].arrlast[3],"click2"} + else + self.Train.Announcer:Queue{"click1","announcer_ready",stbl[self.FirstStation].arrlast[3],stbl[self.LastStation].arrlast[3],"click2"} + end + end + self.State = 7 + self:UpdateBoards() + self:SyncASNP() + self.StopMessage = false + end + elseif self.State == 7 then + local stbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + if name == "R_ASNPMenu" and value then self.ReturnTimer = CurTime() end + if name == "R_ASNPMenu" and not value and self.ReturnTimer and self.ReturnTimer - CurTime() < 0.7 then + self.ReturnTimer = nil + end + if name == "R_ASNPDown" and value then self:Next() end + if name == "R_ASNPUp" and value then self:Prev() end + if name == "R_Program1" and value and #self.Train.Announcer.Schedule==0 then + if self.Arrived and self.Station == (self.Path and self.FirstStation or self.LastStation) then + self:Zero() + end + self:Play(self.Arrived) + self:Next() + end + end +end + +--States: +-- -2 - Loaded in another cab +-- -1 - Starting up +--nil - First setUp and get settings from last +--1 - Welcome Screen +--2 - Route Choose +--3 - Choose start station +--4 - Choose end station +--5 - Choose path +--6 - Choose style of playing +--7 - Normal state +--8 - Confim a settings (on last stations) +function TRAIN_SYSTEM:Think() + local Train = self.Train + local Power = Train.Electric.Battery80V > 62 +--[[ + if self.Train.R_ZS.Value < 0.5 and self.Train.KV.ReverserPosition == 1.0 then + Train:WriteTrainWire(47,1) + else + Train:WriteTrainWire(47,0) + end + Train:SetNW2Bool("ASNPPlay",Power and Train:ReadTrainWire(47) > 0)]] + local ASNPWork = Power and Train.R_ASNPOn.Value > 0.5 + if not ASNPWork and self.ASNPState ~= 0 then + self.State = 0 + self.ASNPTimer = nil + end + if ASNPWork and self.State == 0 then + self.State = -1 + self.ASNPTimer = CurTime()-math.Rand(-0.3,0.3) + end + if self.State == -1 and self.ASNPTimer and CurTime()-self.ASNPTimer > 1 then + self.State = Metrostroi.ASNPSetup and 1 or -2 + end + if ASNPWork and self.State > -1 then + for k,v in pairs(self.TriggerNames) do + if Train[v] and (Train[v].Value > 0.5) ~= self.Triggers[v] then + self:Trigger(v,Train[v].Value > 0.5) + self.Triggers[v] = Train[v].Value > 0.5 + end + end + end + if not Metrostroi.ASNPSetup and self.State > 0 then + self.State = -2 + end + if self.PassSchemeWork ~= (Train.PassScheme.Value>0 and self.State==7) then + self:UpdateBoards() + self.PassSchemeWork = Train.PassScheme.Value>0 and self.State==7 + end + + if self.ReturnTimer and CurTime()-self.ReturnTimer > 0.7 then + if self.State == 7 then self.State = 6 end + self.ReturnTimer = nil + end + Train:SetNW2Int("ASNP:State",self.State) + Train:SetNW2Int("ASNP:RouteNumber",self.RouteNumber) + + Train:SetNW2Int("ASNP:Selected",self.Selected) + Train:SetNW2Int("ASNP:Line",self.Line) + Train:SetNW2Int("ASNP:FirstStation",self.FirstStation) + Train:SetNW2Int("ASNP:LastStation",self.LastStation) + Train:SetNW2Bool("ASNP:Path",self.Path) + + Train:SetNW2Bool("ASNP:Station",self.Station) + Train:SetNW2Bool("ASNP:Arrived",self.Arrived) + Train:SetNW2Bool("ASNP:Playing",#Train.Announcer.Schedule>0) +end diff --git a/lua/metrostroi/systems/_obsolete/sys_81_720_tr_7b.lua b/lua/metrostroi/systems/_obsolete/sys_81_720_tr_7b.lua new file mode 100644 index 0000000..f245ad2 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_81_720_tr_7b.lua @@ -0,0 +1,35 @@ +-------------------------------------------------------------------------------- +-- 81-720 TR-7B +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_720_TR_7B") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + -- Output voltage from contact rail + self.Main750V = 0.0 +end + +function TRAIN_SYSTEM:Inputs() + return { } +end + +function TRAIN_SYSTEM:Outputs() + return { "Main750V"} +end + +function TRAIN_SYSTEM:Think(dT) + -- Don't do logic if train is broken + if (not IsValid(self.Train.FrontBogey)) or (not IsValid(self.Train.RearBogey)) then + return + end + + -- Too high current + --print( self.Train.AsyncInverter.InverterVoltage*self.Main750V , ">", (750*1000)) + if self.Train.Electric.Utotal*self.Main750V > (750*1000) then + self.Train:PlayOnce("spark","front_bogey",1.0,math.random(100,150)) + self.Train:PlayOnce("spark","rear_bogey",1.0,math.random(100,150)) + end + self.Main750V = math.max(self.Train.FrontBogey.Voltage,self.Train.RearBogey.Voltage) +end diff --git a/lua/metrostroi/systems/_obsolete/sys_81_722_bars.lua b/lua/metrostroi/systems/_obsolete/sys_81_722_bars.lua new file mode 100644 index 0000000..6e6a662 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_81_722_bars.lua @@ -0,0 +1,250 @@ +-------------------------------------------------------------------------------- +-- БÐРС Ð´Ð»Ñ 81-722 +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_722_BARS") +TRAIN_SYSTEM.DontAccelerateSimulation = true + + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("ALSCoil") + self.Power = 0 + self.ARSPower = 0 + + -- Internal state + self.Active = 0 + + self.SpeedLimit = 0 + self.NextLimit = 0 + self.Ring = 0 + self.Overspeed = false + + self.Brake = false + self.Brake2 = false + self.Drive = false + self.Braking = false + self.PN1 = 0 + self.PN2 = 0 + self.RVTB = 0 + + + self.NoFreq = 0 + self.F1 = 0 + self.F2 = 0 + self.F3 = 0 + self.F4 = 0 + self.F5 = 0 + self.F6 = 0 +end + +function TRAIN_SYSTEM:Outputs() + return {"Active","Ring","Brake","Brake2","Drive","PN1","PN2", "SpeedLimit", "RVTB"} +end + +function TRAIN_SYSTEM:Inputs() + return {"NoFreq","F1","F2","F3","F4","F5","F6"} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local ALS = Train.ALSCoil + local speed = ALS.Speed + local Power = self.Power + local EnableALS = Power and Train.ALS.Value > 0.5-- and Train.BUKP.Active > 0 + if EnableALS ~= (ALS.Enabled==1) then + ALS:TriggerInput("Enable",EnableALS and 1 or 0) + end + + self.NoFreq = ALS.NoFreq + self.F1 = ALS.F1 + self.F2 = ALS.F2 + self.F3 = ALS.F3 + self.F4 = ALS.F4 + self.F5 = ALS.F5 + self.F6 = ALS.F6 + self.RealF5 = self.F5*(1-self.F6) + if (self.F1+self.F2+self.F3+self.F4+self.F5+self.F6) == 0 then self.NoFreq = 1 end + + -- Speed check and update speed data + if CurTime() - (self.LastSpeedCheck or 0) > 0.5 then + self.LastSpeedCheck = CurTime() + end + -- ARS system placeholder logic + self.KVT = (Train.PB.Value > 0.5 or Train.Vigilance.Value > 0.5)-- and not self.PBBlock + --[[if self.PBBlock == nil and self.NoFreq then + self.PBBlock = Train.PB.Value > 0.5 or Train.Vigilance.Value > 0.5 + end + if self.PBBlock and Train.PB.Value < 0.5 and Train.Vigilance.Value < 0.5 then self.PBBlock = false end + if self.PBBlock ~= nil and not self.NoFreq then self.PBBlock = nil end]] + local Active = Power and self.ARSPower + if self.KVT and not self.AttentionPedalTimer then + self.AttentionPedalTimer = CurTime() + 1 + end + + if self.KVT and self.AttentionPedalTimer and (CurTime() - self.AttentionPedalTimer) > 0 then + self.AttentionPedal = true + end + if not self.KVT and (self.AttentionPedalTimer or self.AttentionPedal) then + self.AttentionPedal = false + self.AttentionPedalTimer = nil + end + if EnableALS then + local V = math.floor(speed +0.05) + local Vlimit = 0 + if self.F4 then Vlimit = 40 end + if self.F3 then Vlimit = 60 end + if self.F2 then Vlimit = 70 end + if self.F1 then Vlimit = 80 end + + --if ( self.KVT) and (Vlimit ~= 0) and (V > Vlimit) then self.Overspeed = true end + --if ( self.KVT) and (Vlimit == 0) and (V > 20) then self.Overspeed = true end + --if (not self.KVT) and (V > Vlimit) and (V > (self.RealNoFreq and 0 or 3)) then self.Overspeed = true end + --if ( self.KVT) and (Vlimit == 0) and self.Train.ARSType and self.Train.ARSType == 3 and not self.Train["PA-KSD"].VRD then self.Overspeed = true end + --self.Ring = self.Overspeed and (speed > 5) + + -- Determine next limit and current limit + self.SpeedLimit = Vlimit+0.5 + self.NextLimit = Vlimit + if self.F1 then self.NextLimit = 80 end + if self.F2 then self.NextLimit = 70 end + if self.F3 then self.NextLimit = 60 end + if self.F4 then self.NextLimit = 40 end + if self.F5 then self.NextLimit = 20 end + else + local V = math.floor(speed +0.05) + self.SpeedLimit = 0 + self.NextLimit = 0 + end + + if Active then + if Train.Pneumatic.RVTBLeak == 0 then + self.RVTB = 1 + end + if self.Starting and CurTime() - self.Starting > 7 then + if speed > 7 then + self.Starting = nil + else + self.Starting = false + end + end + if speed < 0.1 and self.Starting == false and self.KVT then + self.Starting = nil + end + local Drive = self.Drive > 0 + local Brake = self.Brake > 0 + local Brake2 = self.Brake2 > 0 + local SpeedLimit = self.SpeedLimit + if self.SpeedLimit < 20 then SpeedLimit = 20 end + if self.AttentionPedal or Train.VRD.Value > 0.5 then SpeedLimit = 20 end + if speed > SpeedLimit + or (self.Starting == false or self.Starting and CurTime() - self.Starting > 7) + --or (self.F1 or self.F2 or self.F3 or self.F4) and self.KVT and speed > 20 + or not EnableALS and not self.NoFreq + or (self.NoFreq) and not self.KVT + or not self.NoFreq and self.RealF5 and (not self.KVT or not self.F6 and not self.VRD) + or self.Braking and not Brake then + if not Brake and self.SpeedLimit > 20 then self.Braking = true end + if not Brake and (self.SpeedLimit > 20 or speed > 0.1) then self.Ringing = true end + Brake = true + elseif speed < SpeedLimit and not self.Braking then + Brake = false + Brake2 = false + end + if (self.Braking or self.Ringing) and self.KVT and (self.NoFreq or EnableALS) then + self.Braking = false + self.Ringing = false + end + if self.Ringing and self.KVT then + self.Ringing = false + end + if self.Ringing then + self.RVTB = 0 + end + if speed < 3 and self.PN1 == 0 and Train.BUKP.PowerCommand <= 0 then + self.PN1 = 1 + self.PN2Timer = CurTime() + if self.Starting then self.Starting = nil end + end + if (Train.BUKP.PowerCommand > 0.1 or self.NoFreq and self.KVT) and self.PN1 > 0 then + if not self.Starting and not self.NoFreq then + self.Starting = CurTime() + end + self.PN1 = 0 + end + if self.PN1 > 0 and (--[[ Train.BUKP.PN2 > 0 or --]] self.PN2Timer and CurTime()-self.PN2Timer > 1) and self.PN2 == 0 then + self.PN2 = 1 + self.PN2Timer = nil + end + if self.PN1 < 1 then self.PN2 = 0 end + if self.BPSArmed then self.PN2 = 1 end + + if Brake and not Brake2 and not self.Brake2Timer then self.Brake2Timer = CurTime() end + if Brake and not Brake2 and self.Brake2Timer and CurTime() - self.Brake2Timer > 1.5 then + self.Brake2Timer = nil + Brake2 = true + end + if not Brake and (Brake2 or self.Brake2Timer) then + self.Brake2Timer = nil + Brake2 = false + end + if Train.VRD.Value > 0.5 and self.RealF5 and self.VRD == nil then + self.VRD = false + end + if (Train.VRD.Value < 0.5 or not self.RealF5) and self.VRD ~= nil then + self.VRD = nil + end + if self.VRD == false and speed <= 0.1 then + self.VRD = true + end + + --[[ self.BPSMeter = self.BPSMeter or 0 + if Train.Speed*Train.SpeedSign < 0 or self.BPSMeter < 0 then + self.BPSMeter = self.BPSMeter + math.min(0,Train.Speed*Train.SpeedSign*1000/3600)*dT + if Train.Speed*Train.SpeedSign > 0.1 then + self.BPSMeter = 0 + end + if -self.BPSMeter > 1.5 then + self.BPSArmed = true + end + end + if Train.BUV.Reverser == 0 and self.BPSArmed then self.BPSArmed = nil end--]] + --speed >= SpeedLimit-3 and (Train.BUKP.PowerCommand > 5 or Train:ReadTrainWire(19) > 0) or + self.DriveOff = speed >= SpeedLimit-2 + Drive = not self.DriveOff and ( + not self.NoFreq and EnableALS and self.RealF5 and self.KVT and (self.F6 or self.VRD) + or (self.NoFreq or not EnableALS) and self.KVT + or not self.NoFreq and EnableALS and not self.RealF5 + ) and not Brake and not self.BPSArmed + self.Ring = self.Ringing and 1 or 0 + self.Brake = Brake and 1 or 0 + self.Brake2 = Brake2 and 1 or 0 + self.Drive = Drive and 1 or 0 + if self.RVTBReset then + self.RVTB = 1 + self.RVTBReset = false + end + else + if self.RVTB == 0 and not self.RVTBReset then + if not self.RVTBResetTimer then self.RVTBResetTimer = CurTime() end + end + if not self.RVTBReset and self.RVTB == 1 or self.RVTBResetTimer and CurTime()-self.RVTBResetTimer > 3 then + self.RVTBReset = trueÑ + self.RVTBResetTimer = nil + end + self.RVTB = (self.KVT or Train.VAH.Value > 0.5) and 1 or 0 + self.Brake = 0 + self.Brake2 = 0 + self.Brake2Timer = nil + self.Drive = 0 + self.Ring = 0 + self.PN1 = 0 + self.PN2 = Train.RCARS.Value*Train.BUKP.Active + self.Starting = nil + self.Braking = true + self.Ringing = true + self.BPSArmed = nil + end + self.Active = Active and 1 or 0 +end diff --git a/lua/metrostroi/systems/_obsolete/sys_alstest.lua b/lua/metrostroi/systems/_obsolete/sys_alstest.lua new file mode 100644 index 0000000..36b8acc --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_alstest.lua @@ -0,0 +1,106 @@ +-------------------------------------------------------------------------------- +-- Статив и приёмные катушки ÐЛС +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("ALSTest") +TRAIN_SYSTEM.DontAccelerateSimulation = true + + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("F6","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("F5","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("F4","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("F3","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("F2","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("F1","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("NF","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("SpeedAdd","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("SpeedRem","Relay","Switch",{ bass = true }) + + self.TriggerNames = { + "F6", + "F5", + "F4", + "F3", + "F2", + "F1", + "NF", + "SpeedAdd", + "SpeedRem", + } + self.Triggers = {} + for k,v in pairs(self.TriggerNames) do + if self.Train[v] then self.Triggers[v] = self.Train[v].Value > 0.5 end + end + self.Speed = 0 + self.Acceleration = 0 + -- ALS state + self.F1 = 0 + self.F2 = 0 + self.F3 = 0 + self.F4 = 0 + self.F5 = 0 + self.F6 = 0 + self.NoFreq = 1 + self.NoFreqTimer = nil + self.RealF5 = 1 + self.Speed = 0 + self.SpeedSign = 0 +end + +function TRAIN_SYSTEM:Outputs() + return { + } +end + +function TRAIN_SYSTEM:Inputs() + return {"Enable"} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Enable" then + self.Enabled = value + end +end + +function TRAIN_SYSTEM:Trigger(name,value) + local Train = self.Train + if name == "SpeedAdd" then + self.Speed = self.Speed + 2.5 + return + end + if name == "SpeedRem" then + self.Speed = self.Speed - 2.5 + return + end + if not value then return end + if name == "F6" then + self.F6 = 1-self.F6 + return + end + if name == "NF" then + self.F6 = 0 + self.F5 = 0 + self.F4 = 0 + self.F3 = 0 + self.F2 = 0 + self.F1 = 0 + self.NoFreq = 1 + return + end + self.F5 = name =="F5" and 1 or 0 + self.F4 = name =="F4" and 1 or 0 + self.F3 = name =="F3" and 1 or 0 + self.F2 = name =="F2" and 1 or 0 + self.F1 = name =="F1" and 1 or 0 + self.NoFreq = 0 +end +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + + for k,v in pairs(self.TriggerNames) do + if Train[v] and (Train[v].Value > 0.5) ~= self.Triggers[v] then + self:Trigger(v,Train[v].Value > 0.5) + self.Triggers[v] = Train[v].Value > 0.5 + end + end +end diff --git a/lua/metrostroi/systems/_obsolete/sys_announcer.lua b/lua/metrostroi/systems/_obsolete/sys_announcer.lua new file mode 100644 index 0000000..c3c93ab --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_announcer.lua @@ -0,0 +1,249 @@ +-------------------------------------------------------------------------------- +-- Announcer and announcer-related code +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("Announcer") +TRAIN_SYSTEM.DontAccelerateSimulation = true +if TURBOSTROI then return end + +function table.GetLastKey(t) + local lk = -math.huge + for ki in pairs(t) do + lk = math.max(lk,ki) + end + return lk +end +--[[ +Metrostroi.AnnouncementSequences = { + [1101] = { 0211, 0308, 0321 }, + [1102] = { 0211, 0321, 0308 }, + + [1108] = { 0220, 0308 }, + [1109] = { 0220, 0309 }, + [1110] = { 0220, 0310, 0231 }, + [1111] = { 0220, 0311 }, + [1112] = { 0220, 0312 }, + [1113] = { 0220, 0313 }, + [1114] = { 0220, 0314 }, + [1115] = { 0220, 0315, 0231, 0202, 0203, 0415 }, + [1116] = { 0220, 0316 }, + [1117] = { 0220, 0317 }, + [1118] = { 0220, 0318, 0231 }, + [1119] = { 0220, 0319 }, + [1120] = { }, + [1121] = { 0220, 0321 }, + [1122] = { 0220, 0322 }, + [1123] = { 0220, 0323 }, + + [1208] = { 0218, 0219, 0308 }, + [1209] = { 0218, 0219, 0309 }, + [1210] = { 0218, 0219, 0310 }, + [1211] = { 0218, 0219, 0311 }, + [1212] = { 0218, 0219, 0312 }, + [1213] = { 0218, 0219, 0313 }, + [1214] = { 0218, 0219, 0314 }, + [1215] = { 0218, 0219, 0315 }, + [1216] = { 0218, 0219, 0316 }, + [1217] = { 0218, 0219, 0317 }, + [1218] = { 0218, 0219, 0318 }, + [1219] = { 0218, 0219, 0319 }, + [1220] = { }, + [1221] = { 0218, 0219, 0321 }, + [1222] = { 0218, 0219, 0322 }, + [1223] = { 0218, 0219, 0323 }, +}]] +--[[ Quick lookup +for k,v in pairs(Metrostroi.Announcements) do + v[3] = k +end +for k,v in pairs(Metrostroi.AnnouncementsPNM) do + v[3] = k +end]] + +local function recurprecache(tbl) + if not tbl then return end + for k,v in pairs(tbl) do + if type(v[2]) == "string" then + util.PrecacheSound(v[2]) + elseif type(v) == "table" then + recurprecache(v) + else ErrorNoHalt("Metrtostroi: Can't precache "..k..", because v("..tostring(v).." !table") end + end +end + +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:Initialize() + recurprecache(Metrostroi.Announcements) + + self.AnnouncerType = 0 + -- Currently playing announcement + self.Announcement = 0 + -- End time of the announcement + self.EndTime = -1e9 + -- Announcement schedule + self.Schedule = {} + -- Fake wire 49 + self.Fake48 = 0 +end + + +function TRAIN_SYSTEM:Inputs() + return { "Queue" } +end +function TRAIN_SYSTEM:Outputs() + return { "AnnMap" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if (name == "Queue") and (value > 0.0) then + self:Queue(math.floor(value)) + end +end + + +function TRAIN_SYSTEM:Queue(id) + if self.Train and self.Train.SubwayTrain and self.Train.SubwayTrain.Type and self.Train.SubwayTrain.Type == "E" and + (id == 5 or id == 6) then return end + -- Add announcement to queue + if #self.Schedule < 16 then + --[[if Metrostroi.AnnouncementSequences[id] then + for k,i in pairs(Metrostroi.AnnouncementSequences[id]) do + self:Queue(i) + end + else]] + local tbl = Metrostroi.Announcements[self.AnnouncerType][id] + if id >= 1000 then + tbl = Metrostroi.Announcements[self.AnnouncerType].stations[id-1000] + end + if not tbl then print(id) end + table.insert(self.Schedule, {id,tbl[1]}) + end +end + + +function TRAIN_SYSTEM:ClientInitialize() +end + +function TRAIN_SYSTEM:ClientThink() + if self.AnnouncerType ~= self.Train:GetNW2Int("Announcer") then + self.AnnouncerType = self.Train:GetNW2Int("Announcer") + if Metrostroi.Announcements[self.AnnouncerType] then + self.Train.SoundNames["bpsn_ann"] = Metrostroi.Announcements[self.AnnouncerType][0007][2] + self.Train.SoundNames["bpsn_ann_cab"] = Metrostroi.Announcements[self.AnnouncerType][0007][2] + end + end + local active = self.Train:GetNW2Bool("BPSNBuzz",false) + self.Train:SetSoundState("bpsn_ann",(active and self.Train:GetPackedBool("buzz")) and 0.175 or 0,1) + self.Train:SetSoundState("bpsn_ann_cab",(active and self.Train:GetPackedBool("buzz_cab")) and 0.175 or 0,1) +end + +function TRAIN_SYSTEM:MultiQueue(...) + for _,v in pairs({...}) do + local v = tonumber(v) + if v ~= nil then + self:Queue(v) + end + end +end + +function TRAIN_SYSTEM:Think() + -- Check if new announcement must be started from train wire + local targetAnnouncement = self.Train:ReadTrainWire(47) + if targetAnnouncement < 0 then targetAnnouncement = 0 end + local onlyCabin = false + if (targetAnnouncement == 0) then targetAnnouncement = self.Fake48 or 0 onlyCabin = true end + if (targetAnnouncement > 0) and (targetAnnouncement ~= self.Announcement) and (CurTime() > self.EndTime) then + self.Announcement = targetAnnouncement + local tbl = Metrostroi.Announcements[self.AnnouncerType][targetAnnouncement] + if targetAnnouncement >= 1000 then + tbl = Metrostroi.Announcements[self.AnnouncerType].stations[targetAnnouncement-1000] + end + if tbl then + --if not Metrostroi["Announcements" .. (self.Train.PNM and "PNM" or "")][targetAnnouncement] then print(targetAnnouncement) end + self.Sound = tbl[2] + self.EndTime = CurTime() + tbl[1] + + -- Emit the sound + if self.Sound ~= "" then + if self.Train.DriverSeat and (not self.Train.R_G or self.Train.R_G.Value > 0.5) then + self.Train.DriverSeat:EmitSound(self.Sound, 73, 100) + end + if onlyCabin == false then + self.Train:EmitSound(self.Sound, 85, 100) + end + if tbl[3] == 2 then + self.Train.AnnouncementToLeaveWagon = true + self.Train.AnnouncementToLeaveWagonAcknowledged = false + --else + --self.Train.AnnouncementToLeaveWagon = false + end + if self.Train:GetNW2Float("PassengerCount") == 0 then + self.Train.AnnouncementToLeaveWagon = false + end + end + -- BPSN buzz + if tbl[3] == 1 and self.Train.PNM then timer.Simple(0.1,function() self.Train:SetNW2Bool("BPSNBuzz",true) end) end + if tbl[3] == 1 and not self.Train.PNM then timer.Simple(0.2,function() self.Train:SetNW2Bool("BPSNBuzz",true) end) end + if tbl[3] == 0 then + self.Train:SetNW2Bool("BPSNBuzz",false) + --[[ + if self.Train.PNM then + self.Train:SetNW2Bool("BPSNBuzz",false) + self.BPSNBuzzTimeout1 = CurTime() + 0 + else + self.BPSNBuzzTimeout1 = CurTime() + 0.4 + --timer.Simple(0.4,function() if not IsValid(self.Train) then return end self.Train:SetNW2Bool("BPSNBuzz",false) end) + end + ]] + end + self.BPSNBuzzTimeout = CurTime() + 10.0 + end + elseif (targetAnnouncement == 0) then + self.Announcement = 0 + end + + -- Buzz timeout + if self.BPSNBuzzTimeout and (CurTime() > self.BPSNBuzzTimeout) then + self.BPSNBuzzTimeout = nil + self.Train:SetNW2Bool("BPSNBuzz",false) + end + if self.BPSNBuzzTimeout1 and (CurTime() > self.BPSNBuzzTimeout1) then + self.BPSNBuzzTimeout1 = nil + self.Train:SetNW2Bool("BPSNBuzz",false) + end + -- Check if new announcement must be started from schedule + if (self.ScheduleAnnouncement == 0) and (self.Schedule[1]) then + self.ScheduleAnnouncement = self.Schedule[1][1] + self.ScheduleEndTime = CurTime() + self.Schedule[1][2] + table.remove(self.Schedule,1) + end + + + -- Check if schedule announcement is playing + if self.ScheduleAnnouncement ~= 0 then + if self.Train.DriverSeat and ((self.Train.R_ZS and self.Train.R_ZS.Value < 0.5) or (self.Train.R_UPO and self.Train.R_UPO.Value < 0.5)) then + self.Fake48 = self.ScheduleAnnouncement + else + self.Train:WriteTrainWire(47,self.ScheduleAnnouncement) + self.Fake48 = 0 + end + if CurTime() > (self.ScheduleEndTime or -1e9) then + self.ScheduleAnnouncement = 0 + self.Fake48 = 0 + self.Train:WriteTrainWire(47,0) + end + end + if self.Train.R_ZS and self.Train.KV then + if self.Train.R_ZS.Value < 0.5 and self.Train.KV.ReverserPosition == 1.0 then + self.Train:WriteTrainWire(47,-1) + elseif self.Train:ReadTrainWire(47) == -1 then + self.Train:WriteTrainWire(47,0) + end + end + if self.Train.R_UPO and self.Train.KV then + if self.Train.R_UPO.Value < 0.5 and self.Train.KV.ReverserPosition == 1.0 then + self.Train:WriteTrainWire(47,-1) + elseif self.Train:ReadTrainWire(47) == -1 then + self.Train:WriteTrainWire(47,0) + end + end +end diff --git a/lua/metrostroi/systems/_obsolete/sys_ars_dnepr_spb.lua b/lua/metrostroi/systems/_obsolete/sys_ars_dnepr_spb.lua new file mode 100644 index 0000000..8383afc --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_ars_dnepr_spb.lua @@ -0,0 +1,333 @@ +-------------------------------------------------------------------------------- +-- ÐРС-ÐЛС +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("ARS_Dnepr_SPB") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("BPS","Relay","Switch", {bass = true,normally_closed = true }) + self.Train:LoadSystem("BUD","Relay","Switch", {bass = true,normally_closed = true }) + self.Train:LoadSystem("RC2","Relay","Switch", {bass = true,normally_closed = true }) + self.Train:LoadSystem("VAU","Relay","Switch",{ bass = true,normally_closed = true }) + self.Train:LoadSystem("VRD","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("ROT","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("ALSCoil") + + -- Internal state + self.SpeedLimit = 0 + self.ARSRing = false + self.Overspeed = false + self.ElectricBrake = false + self.PneumaticBrake1 = false + self.PneumaticBrake2 = true + self.AttentionPedal = false + + self.KVT = false + self.LN = 0 + + -- ARS wires + self["33D"] = 0 + self["33G"] = 0 + self["33Zh"] = 0 + self["2"] = 0 + self["6"] = 0 + self["8"] = 0 + self["20"] = 0 + --self["21"] = 0 + self["29"] = 0 + self["31"] = 0 + self["32"] = 0 + + -- Lamps + ---self.LKT = false + self.LVD = false +end + +function TRAIN_SYSTEM:Outputs() + return { + "2", "8", "20", "29", "33D", "33G", "33Zh", "31", "32", + "NoFreq","F1","F2","F3","F4","F5","F6","LN" + } +end + +function TRAIN_SYSTEM:Inputs() + return { "IgnoreThisARS","AttentionPedal","Ring" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + local Train = self.Train + if name == "AttentionPedal" then + self.AttentionPedal = value > 0.5 + if Train and Train.PB then + Train.PB:TriggerInput("Set",value) + end + end + if name == "IgnoreThisARS" then + self.IgnoreThisARS = value > 0.5 + end + if name == "Ring" then + self.ARSRingOverride = value > 0.5 + end +end + + +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local PUAV = not Train.Blok or Train.Blok == 1 + if not PUAV then return end + local ALS = Train.ALSCoil + local speed = math.Round(ALS.Speed or 0,1) + + local power = Train.VB.Value > 0 + -- ALS, ARS state + local KRUEnabled = Train.KRU and Train.KRU["14/1-B3"] > 0 + local RVForward = power and (Train.KV["D4-15"] > 0 or KRUEnabled) + local EnableARS = power and RVForward and (not Train.A42 or Train.A42.Value > 0) and Train.ARS.Value > 0 + local EnableALS = power and (not Train.A43 or Train.A43.Value > 0) and Train.ALS.Value > 0 + + if (RVForward and EnableALS) ~= (ALS.Enabled==1) then + ALS:TriggerInput("Enable",RVForward and EnableALS and 1 or 0) + end + + self.EnableARS = EnableARS + self.EnableALS = EnableALS + + --local EPKActivated = Train.EPK and Train.EPK.Value > 0.5 and (Train.Pneumatic.ValveType == 2 and Train.DriverValveDisconnect.Value > 0.5 or Train.DriverValveBLDisconnect.Value > 0.5) + -- Pedal state + --if (Train.PB) and Train.PB.Value > 0.5 then self.AttentionPedal = true end + --if (Train.PB) and Train.PB.Value < 0.5 then self.AttentionPedal = false end + local PB = Train.PB.Value > 0 + if PB and not self.AttentionPedalTimer and not self.Overspeed then + self.AttentionPedalTimer = CurTime() + 1 + end + + if PB and self.AttentionPedalTimer and (CurTime() - self.AttentionPedalTimer) > 0 then + self.AttentionPedal = true + end + if not PB and (self.AttentionPedalTimer or self.AttentionPedal) then + self.AttentionPedal = false + self.AttentionPedalTimer = nil + end + if PB or (Train.KVT) and Train.KVT.Value > 0.5 then self.KVT = true end + if not PB and (Train.KVT) and Train.KVT.Value < 0.5 then self.KVT = false end + + -- Ignore pedal + if self.IgnorePedal and self.KVT then + self.KVT = false + else + self.IgnorePedal = false + end + + + self.NoFreq = ALS.NoFreq + self.F1 = ALS.F1*(1-self.NoFreq) + self.F2 = ALS.F2*(1-self.NoFreq) + self.F3 = ALS.F3*(1-self.NoFreq) + self.F4 = ALS.F4*(1-self.NoFreq) + self.F5 = ALS.F5*(1-self.NoFreq) + self.F6 = ALS.F6*(1-self.NoFreq) + self.RealF5 = self.F5*(1-(self.F4+self.F3+self.F2+self.F1)) + if EnableARS then self.NoFreq = self.NoFreq + (1-math.min(1,self.F5+self.F4+self.F3+self.F2+self.F1)) end + + -- ARS system placeholder logic + if EnableALS then + if (ALS.F1+ALS.F2+ALS.F3+ALS.F4+ALS.F5+ALS.F6+self.NoFreq) == 0 then self.NoFreq = 1 end + local Vlimit = 0 + if self.F4 > 0 then Vlimit = 40 end + if self.F3 > 0 then Vlimit = 60 end + if self.F2 > 0 then Vlimit = 70 end + if self.F1 > 0 then Vlimit = 80 end + -- Determine next limit and current limit + self.SpeedLimit = Vlimit + else + local V = math.floor(speed +0.05) + self.SpeedLimit = 0 + end + + if EnableARS then + if self.EnableARS ~= EnableARS then Train.EPKContacts:TriggerInput("Set",Train.EPKContacts.Value) end + local SpeedLimit = self.SpeedLimit + if SpeedLimit < 20 and self.KVT then SpeedLimit = 20 end + -- Check absolute stop + if self.NoFreq ~= self.PrevNoFreq and Train:ReadTrainWire(6) < 1 then + self.IgnorePedal = self.NoFreq > 0 and Train:ReadTrainWire(6) < 1 + self.PrevNoFreq = self.NoFreq + end + local zero = (self.NoFreq+self.RealF5) > 0 + -- Enable PV1 and disassembly when we overspeed + if speed > SpeedLimit+0.5 and not self.Disassembly then + if zero then + self.Disassembly = CurTime()-2 + else + self.Disassembly = CurTime() + end + self.ElectricBrake = true + self.ARSRing = true + end + if self.KVT and self.ARSRing then self.ARSRing = false end + --We can disable brake, if speed < Vdop-3 and electric brake + if not self.ARSRing and speed <= SpeedLimit-3 and self.ElectricBrake then + self.ElectricBrake = false + self.Disassembly = false + self.PneumaticBrake2 = false + end + --We can disable ring if speed < Vdop and not electric brake + if self.KVT and speed <= SpeedLimit and not self.ElectricBrake and self.ARSRing then self.ARSRing = false end + --Disable PN1 when we overspeed and time of overspeed < 1.5 + if speed <= SpeedLimit and self.Disassembly and CurTime()-self.Disassembly < 1.5 then + self.Disassembly = false + self.ElectricBrake = false + end + --Engage electric when we overspeed and time of overspeed >= 1.5 + if self.Disassembly and not self.ElectricBrake and ((CurTime() - self.Disassembly) >= 1.5) then + self.ElectricBrake = true + end + --PN2 when we brake to 0 speed + if self.Disassembly and self.ElectricBrake and speed < 0.25 then self.PneumaticBrake2 = true end + + -- AntiRolling + local Drive = (Train.KV["10AS-33"] > 0 or KRUEnabled)-- and Train.KRR.Value > 0) + -- Engage RO + if speed < 3 and self.RO ~= true and not Drive and self.KDReadyToRelease ~= false then self.RO = true end + -- Check RO when we starting + if self.RO and self.RO ~= true and (speed > 5 or CurTime()-self.RO > 7) then + self.RO = nil + self.PneumaticBrake2 = self.NoFreq == 0 and speed <= 5 + self.KDReadyToRelease = nil + end + -- Disable PN1 and start RO timer + if Drive and self.RO == true then + self.RO = CurTime() + end + + local delay = 3.5 + if 10 < speed and speed < 30 then delay = 5.5 end + if speed < 3 then delay = 10 end + if (self.ElectricBrake or speed < 0.2) and Train.Panel.KT == 0 then + if not self.EPKTimer then self.EPKTimer = CurTime() end + else + self.EPKTimer = nil + end + if self.EPKTimer and CurTime()-self.EPKTimer > delay then Train.EPKContacts:TriggerInput("Open",1) end + -- ARS signals + local Ebrake, Abrake, Pbrake1,Pbrake2 = + ((self.ElectricBrake) and 1 or 0), + ((self.Disassembly or self.ARSRing or self.ElectricBrake or zero and not self.KVT or self.F5 > 0 and Train.VRD.Value == 0) and 1 or 0), + ((self.Disassembly and (zero or CurTime()-self.Disassembly < 1.5) or self.RO == true) and 1 or 0), + ((self.PneumaticBrake2 or zero and not self.KVT) and 1 or 0) + -- Apply ARS system commands + self["33D"] = (1 - Abrake)*(1-Pbrake2) + self["33G"] = Ebrake + self["33Zh"] = (1 - Abrake)*(1-Pbrake2) + self["2"] = Ebrake-- + NFBrake + self["20"] = Ebrake-- + NFBrake + self["29"] = Pbrake1-- + (self.BPSActive and 1 or 0) + --print(Train.Speed) + --if GetConVarNumber("metrostroi_ars_printnext") == Train:EntIndex() then print(self.SpeedLimit,self.self.SpeedLimit <= 20 and not self.KVT) end + --if StPetersburg then print(self.Train:EntIndex()) end + self["8"] = Pbrake2 + + (KRUEnabled and 1 or 0)*Ebrake + (self.Disassembly and CurTime()-self.Disassembly >= 1.5 and 1 or 0) + --+ (1 - ((EPKActivated and 1 or 0) or 1)) + ---self.LKT = (self["33G"] > 0.5) or (self["29"] > 0.5) or (Train:ReadTrainWire(35) > 0) + self.LVD = self.LVD or self["33D"] < 0.5 + if Train:ReadTrainWire(6) < 1 and self["33D"] > 0.5 then self.LVD = false end + --self.ARSRing = ((self["33D"] < 0.5) or self.KSZD) + else + if Train.EPK.Value == 0 then Train.EPKContacts:TriggerInput("Set",1) end + self.ElectricBrake = true + self.PneumaticBrake1 = false + self.PneumaticBrake2 = true + self.Disassembly = CurTime()-5 + self.RO = true + self["33D"] = 0 + self["33Zh"] = 1 + self["8"] = KRUEnabled and (1-Train.RPB.Value) or 0 + self["33G"] = 0 + self["2"] = 0 + self["20"] = 0 + self["29"] = 0 + + ---self.LKT = false + self.LN = 0 + self.LVD = false + self.ARSRing = true + end + -- ARS signalling train wires + self.Train:WriteTrainWire(21,self.LVD and 1 or 0) + -- RC1 operation + if Train.RC1 and Train.RC1.Value == 0 then + self["33D"] = 1 + self["33G"] = 0 + self["33Zh"] = 1--KAH + -- + self["2"] = 0 + self["20"] = 0 + self["29"] = 0 + -- + self["31"] = 0 + self["32"] = 0 + self["8"] = KRUEnabled and (1-Train.RPB.Value) or 0 + --[[ + if not EnableARS and EnableUOS then + self["33D"] = speed > 35 and 0 or KAH + --self["33Zh"] = 1--(self.Speed + 0.5 > 40) and 0 or KAH + self["8"] = speed > 35 and 1 or KRUEnabled and (1-Train.RPB.Value) or 0 + else]] + --end + end + local EPKActivated = Train.Pneumatic.EPKEnabled-- or Train.UOS.Value > 0 + if (not EPKActivated or Train.EPKContacts.Value == 0) and Train.RC1.Value > 0 then + self["33D"] = 0 + end + + if Train.BPS.Value > 0 and Train.KV["10AK-4"] > 0 then + if not self.BPSArmed then + self.BPSMeter = self.BPSMeter or 0 + self.BPSMeter = self.BPSMeter + math.min(0,Train.Speed*Train.SpeedSign*1000/3600)*dT + if Train.Speed*Train.SpeedSign > 0.1 then + self.BPSMeter = 0 + end + if -self.BPSMeter > 3 then + self.BPSArmed = true + end + end + else + self.BPSArmed = false + self.BPSMeter = 0 + end + if self.BPSArmed then + self["8"] = 1 + self["29"] = 1 + self["33D"] = 0 + self["33Zh"] = 0 + end + + Train.RV_2:TriggerInput("Set",(EnableARS and not self.BPSArmed) and 1 or 0) + -- 81-717 special VZ1 button + if self.Train.VZ1 then self["29"] = self["29"] + self.Train.VZ1.Value end + if (Train.Pneumatic and Train.Pneumatic.EmergencyValve) or self.UAVAContacts then self["33D"] = 0 end + if Train.UAVAContact.Value > 0.5 and not Train.Pneumatic.EmergencyValve and self.UAVAContacts then + self.UAVAContacts = nil + Train:PlayOnce("uava_reset","bass",1) + end + self["8"] = self["8"]*(self.Train.A41 and self.Train.A41.Value or 1)*(self.Train.A8 and self.Train.A8.Value or 1) + self["29"] = self["29"]*(self.Train.A8 and self.Train.A8.Value or 1) + --Train.Rp8:TriggerInput("Set",self["8"] + ((self.Train.RC1 and (self.Train.RC1.Value == 0)) and (1-self["33D"]) or 0)) + Train.Rp8:TriggerInput("Set",EnableARS and (Train:ReadTrainWire(6)*Train:ReadTrainWire(2)*(1-Train:ReadTrainWire(25))) or 0) + + --local P = math.ceil(Train.PositionSwitch.Position) --FIXME + local RK = math.ceil(Train.RheostatController.Position) + --print(RK,P,((RK >= 17 and RK <= 18) and 1 or 0),Train.KV["10-8"]) + --Train.RO:TriggerInput("Set",Train.A8.Value*Train:ReadTrainWire(8)*((RK >= 17 and RK <= 18) and 1 or 0) + ((EnableARS and self.RO==true) and 1 or 0)) + self.Ring = self.ARSRingOverride or self.ARSRing and EnableARS + if Train.PUAV.ZeroTimer then + local timer = (CurTime()-Train.PUAV.ZeroTimer) + if timer >= 0 and timer < 3.5 then + self.Ring = true + elseif timer >= 3.5 and timer < 3.5+4 and timer%1 < 0.5 then + self.Ring = true + end + end + self.Ring = self.Ring or Train.PUAV.RingArmed +end diff --git a/lua/metrostroi/systems/_obsolete/sys_ars_ezh3.lua b/lua/metrostroi/systems/_obsolete/sys_ars_ezh3.lua new file mode 100644 index 0000000..3bb8cf7 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_ars_ezh3.lua @@ -0,0 +1,366 @@ +-------------------------------------------------------------------------------- +-- ÐРС-ÐЛС (Ð¼Ð¾Ð´Ð¸Ñ„Ð¸Ñ†Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ð´Ð»Ñ ÑоÑтавов Еж) +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("ARS_EZh3") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("ALSCoil") + self.Train:LoadSystem("EPKContacts","Relay","",{close_time = 3}) + self.Alarm = false + -- Internal state + self.SpeedLimit = 0 + self.NextLimit = 0 + self.Ring = false + self.Overspeed = false + self.ElectricBrake = false + self.PneumaticBrake1 = false + self.PneumaticBrake2 = true + self.AttentionPedal = false + self.KVT = false + self.LN = false + self.IgnoreThisARS = false + + -- ARS wires + self["33D"] = 0 + self["33G"] = 0 + self["33Zh"] = 0 + self["2"] = 0 + self["6"] = 0 + self["8"] = 0 + self["20"] = 0 + --self["21"] = 0 + self["29"] = 0 + self["31"] = 0 + self["32"] = 0 + + -- Lamps + ---self.LKT = false + self.LVD = false +end + +function TRAIN_SYSTEM:Outputs() + return { "2", "8", "20", "29", "33D", "33G", "33Zh",--"31", "32", + "Speed", "SpeedLimit", "Ring"} +end + +function TRAIN_SYSTEM:Inputs() + return { "IgnoreThisARS","AttentionPedal","Ring" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + local Train = self.Train + if name == "AttentionPedal" then + self.AttentionPedal = value > 0.5 + if Train and Train.PB then + Train.PB:TriggerInput("Set",value) + end + end + if name == "IgnoreThisARS" then + self.IgnoreThisARS = value > 0.5 + end + if name == "Ring" then + self.RingOverride = value > 0.5 + end +end + + + +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local ALS = Train.ALSCoil + local speed = ALS.Speed + --if GetConVarNumber("metrostroi_ars_printnext") == Train:EntIndex() then print(Train:ReadCell(49165)) end + + + -- ALS, ARS state + local power = Train.VB.Value > 0 + local KRUEnabled = Train.KRU and Train.KRU["14/1-B3"] > 0 + local RVForward = power and (Train.KV["D4-15"] > 0 or KRUEnabled) + local EnableARS = Train.VB.Value == 1.0 and Train.ARS.Value == 1.0 and RVForward + local EnableALS = Train.VB.Value == 1.0 and Train.ALS.Value == 1.0 and RVForward + if EnableALS ~= (ALS.Enabled==1) then + ALS:TriggerInput("Enable",EnableALS and 1 or 0) + end + + self.EnableARS = EnableARS + self.EnableALS = EnableALS + local EPKActivated = Train.EPK and Train.EPK.Value > 0.5 and Train.DriverValveBLDisconnect.Value > 0.5 + -- Pedal state + local PB = Train.PB.Value > 0.5 or Train.KB.Value > 0.5 + self.KVT = Train.KVT.Value > 0.5 + if PB and not self.AttentionPedal then + self.AttentionPedal = true + end + if not PB and self.AttentionPedal then + self.AttentionPedal = false + end + + -- Ignore pedal + if self.IgnorePedal and self.AttentionPedal then + self.AttentionPedal = false + else + self.IgnorePedal = false + end + -- Speed check and update speed data + if CurTime() - (self.LastSpeedCheck or 0) > 0.5 then + self.LastSpeedCheck = CurTime() + --self.Speed = (Train.Speed or 0) --FIXME + end + --if RVForward then + self.NoFreq = ALS.NoFreq + self.F1 = ALS.F1*(1-self.NoFreq) + self.F2 = ALS.F2*(1-self.NoFreq) + self.F3 = ALS.F3*(1-self.NoFreq) + self.F4 = ALS.F4*(1-self.NoFreq) + self.F5 = ALS.F5*(1-self.NoFreq) + self.F6 = ALS.F6*(1-self.NoFreq) + self.RealF5 = self.F5*(1-(self.F4+self.F3+self.F2+self.F1)) + if EnableARS then self.NoFreq = self.NoFreq + (1-math.min(1,self.F5+self.F4+self.F3+self.F2+self.F1+self.NoFreq)) end + --end + + + if EnableALS then + local V = math.floor(speed +0.05) + local Vlimit = 20 + local VLimit2 + if self.F4 > 0 then Vlimit = 40 end + if self.F3 > 0 then Vlimit = 60 end + if self.F2 > 0 then Vlimit = 70 end + if self.F1 > 0 then Vlimit = 80 end + + --if ( self.KVT) and (Vlimit ~= 0) and (V > Vlimit) then self.Overspeed = true end + --if ( self.KVT) and (Vlimit == 0) and (V > 20) then self.Overspeed = true end + --if (not self.KVT) and (V > Vlimit) and (V > (self.RealNoFreq and 0 or 3)) then self.Overspeed = true end + --if ( self.KVT) and (Vlimit == 0) and self.Train.ARSType and self.Train.ARSType == 3 and not self.Train["PA-KSD"].VRD then self.Overspeed = true end + --self.Ring = self.Overspeed and (speed > 5) + + -- Determine next limit and current limit + self.SpeedLimit = VLimit2 or Vlimit--+0.5 + else + local V = math.floor(speed +0.05) + self.SpeedLimit = 0 + end + + + if EnableARS then + if self.EnableARS ~= EnableARS then Train.EPKContacts:TriggerInput("Set",Train.EPKContacts.Value) end + local SpeedLimit = self.SpeedLimit + if self.AttentionPedal then SpeedLimit = 20 end + + -- Check absolute stop + if self.NoFreq > 0 and not self.PrevNoFreq then --and Train:ReadTrainWire(6) < 1 then + self.IgnorePedal = true + end + if self.F5 > 0 and not self.PrevF5 then --and Train:ReadTrainWire(6) < 1 then + self.IgnorePedal = self.PrevNoFreq + end + self.PrevNoFreq = self.NoFreq > 0 + self.PrevF5 = self.F5 > 0 + -- Check overspeed + if speed > SpeedLimit and not self.ElectricBrake then + self.ElectricBrake = true + self.BSpeedLimit = SpeedLimit + self.RVV = nil + end + if self.BSpeedLimit and speed < self.BSpeedLimit-4 and self.ElectricBrake and not self.ARSBrake then + self.ElectricBrake = false + self.RVV = CurTime() + end + if self.RVV and CurTime()-self.RVV > 8 then + self.ARSBrake = true + self.ElectricBrake = true + self.RVV = nil + end + if speed < SpeedLimit and self.ElectricBrake and not self.ARSBrake and self.KVT then + self.RVV = nil + self.ElectricBrake = false + end + if self.KVT and self.RVV then + self.RVV = nil + end + + if self.BSpeedLimit and SpeedLimit < self.BSpeedLimit then self.BSpeedLimit = SpeedLimit end + + if (not self.BSpeedLimit or speed < self.BSpeedLimit) and self.ElectricBrake and self.KVT then + self.ARSBrake = false + self.ElectricBrake = false + self.PneumaticBrake2 = false + end + if (Train.KV["10AS-33"] > 0 and self.AntiRolling or Train:ReadTrainWire(31)> 0 or Train:ReadTrainWire(32) > 0 or Train:ReadTrainWire(12) > 0) and speed < 10 then + self.AntiRolling = false + self.RO = true + self.ROBlock = Train.KV["10AS-33"] > 0 + end + if self.ROBlock and Train.KV["10AS-33"] <= 0 then self.ROBlock = false end + --[[ + if self.Speed <= 5.5 and not self.AntiRolling and not self.RO then + self.AntiRolling = CurTime() + end + if self.Speed < 3 and Train:ReadTrainWire(6) > 0 and not self.RO and not self.AntiRolling then + self.AntiRolling = CurTime()-8 + end]] + if speed < 3 and not self.RO and not self.AntiRolling and self.NoFreq == 0 then + self.AntiRolling = CurTime()-8 + end + if self.AntiRolling and speed > 5.5 then + self.AntiRolling = false + end + if not self.ROBlock and (Train.KV["10AS-33"] > 0 or self.AttentionPedal and not self.AttentionPedalRO) and self.RO == true then + self.PneumaticBrake1 = false + self.AttentionPedalRO = true + self.RO = CurTime() + if self.AntiRolling and CurTime()-self.AntiRolling > 8 then self.AntiRolling = false end + end + if self.AttentionPedalRO and not self.AttentionPedal then self.AttentionPedalRO = false end + if self.RO and self.RO ~= true and (speed > 5.5 or CurTime()-self.RO > 7 or self.NoFreq > 0) then + self.AntiRolling = speed <= 5.5 and CurTime()-8 or false + if not self.ElectricBrake and not self.PneumaticBrake2 and self.AntiRolling and not self.AttentionPedal then + Train.EPKContacts:TriggerInput("Open",1) + end + self.RO = false + end + if self.RO and self.RO ~= true and self.AttentionPedal then self.RO = false end + if self.AntiRolling and self.AttentionPedal then self.AntiRolling = false end + --[[ + -- Check use of valve #1 during overspeed + --self.PV1Timer = self.PV1Timer or -1e9 + if self.PV1Timer and ((CurTime() - self.PV1Timer) >= 1) then + if self.Overspeed then + self.ElectricBrake = true + if self.Speed <= 5 then + self.PneumaticBrake2 = true + end + else + self.PneumaticBrake1 = false + end + self.PV1Timer = nil + end]] + local ElectricBrake = (self.ElectricBrake or self.AntiRolling and CurTime()-self.AntiRolling > 8) + + if (ElectricBrake or self.PN2Timer == false) and not self.PN2Timer then + self.PN2Timer = CurTime() + elseif not ElectricBrake and self.PN2Timer then + self.PN2Timer = nil + end + local delay + if 60 < speed then + delay = 3.6--3.2 + elseif 30 < speed then + delay = 4.2--3.9 + elseif 20 < speed then + delay = 5.2 + else + delay = 7.9 + end + if (ElectricBrake or speed < 0.2 and not self.AttentionPedal) and Train:ReadTrainWire(34) == 0 then + if not self.EPKTimer then self.EPKTimer = CurTime() end + else + self.EPKTimer = nil + end + if self.EPKTimer and CurTime()-self.EPKTimer > delay then Train.EPKContacts:TriggerInput("Open",1) end + -- ARS signals + local Ebrake, Abrake, Pbrake1,Pbrake2 = + (ElectricBrake and 1 or 0), + ((ElectricBrake or self.RO==true) and 1 or 0), + --((self.SpeedLimit == 0 and not self.KVT and not self.ARSBrake) and 1 or 0), + (self.RO == true and 1 or 0), + ((self.PneumaticBrake2 or self.PN2Timer and CurTime()-self.PN2Timer > 2.7 or SpeedLimit <= 20.5 and not self.AttentionPedal) and 1 or 0) + -- Apply ARS system commands + self["33D"] = (1 - Abrake) + self["33G"] = Ebrake + self["33Zh"] = (1 - Abrake) + self["2"] = Ebrake + self["20"] = Ebrake + self["29"] = Pbrake1 + self["8"] = Pbrake2 + --print(self.ElectricBrake , self.AntiRolling,self.ARSBrake,self.RO,self.BSpeedLimit,Train:ReadTrainWire(2),Train:ReadTrainWire(8)) + self.LVD = math.min(1,self.LVD+self["33G"]) + if Train:ReadTrainWire(6) < 1 and self["33G"] < 0.5 then self.LVD = 0 end + self.Ring = self.ARSBrake and 1 or 0 + --[[ + торможении от ÐРС ЭПВ имеет 4 Ñтупени задержки по времени на Ñрабатывание: + 80-60 км/ч - 3Ñ (округлённо) + 60-30 км/ч - 4Ñ + 30-20 км/ч - 5Ñ + менее 10 км/ч - 8Ñ + if self.ElectricBrake or self.PneumaticBrake2 then + if not self.LKT and not self.EPKTimer then + self.EPKTimer = CurTime() + ((10 <= self.Speed and self.Speed <= 30) and 5.5 or 3.3) + elseif self.LKT then + self.EPKTimer = nil + end + else + self.EPKTimer = nil + end + --if self.BPSActive then self.AntiRolling = false end + if EPKActivated and not self.LKT and self.Speed < 0.05 and Train:ReadTrainWire(1) == 0 then -- or (self.AntiRolling and Train:ReadTrainWire(1) > 0) then + if not self.EPKTimer2 then + self.EPKTimer2 = CurTime()+1 + end + if self.EPKTimer2 and CurTime() - self.EPKTimer2 > 0 and not Train.Pneumatic.EmergencyValveEPK then + Train.Pneumatic.EmergencyValveEPK = true + + RunConsoleCommand("say","EPV braking (LKT off when stopped)",Train:GetDriverName()) + self.BeOffARS = nil + end + else + self.EPKTimer2 = nil + end]] + else + if Train.EPK.Value == 0 then Train.EPKContacts:TriggerInput("Set",1) end + self.ElectricBrake = true + self.ARSBrake = true + self.RO = true + self.PneumaticBrake2 = false + self.AntiRolling = false + self.BSpeedLimit = nil + self.PN2Timer = false + self["33D"] = 0 + self["33Zh"] = 1 + self["8"] = KRUEnabled and (1-Train.RPB.Value) or 0 + self["33G"] = 0 + self["2"] = 0 + self["20"] = 0 + self["29"] = 0 + + ---self.LKT = false + self.LVD = 0 + self.Ring = 0 + end + -- ARS signalling train wires + if EnableARS then + self.Train:WriteTrainWire(21,self.LVD)-----self.LKT and 1 or 0) + else--if not EnableUOS then + self.Train:WriteTrainWire(21,0) + end + -- RC1 operation + if self.Train.RC1.Value == 0 then + self["33D"] = 1 + self["33G"] = 0 + self["33Zh"] = 1--KAH + -- + self["2"] = 0 + self["20"] = 0 + self["29"] = 0 + -- + self["31"] = 0 + self["32"] = 0 + self["8"] = KRUEnabled and (1-Train.RPB.Value) or 0 + end + if Train.RV_2 then Train.RV_2:TriggerInput("Set",EnableARS and 1 or 0) end + if (Train.Pneumatic and Train.Pneumatic.EmergencyValve) or self.UAVAContacts then self["33D"] = 0 end + if Train.UAVAContact.Value > 0.5 and not Train.Pneumatic.EmergencyValve and self.UAVAContacts then + self.UAVAContacts = nil + Train:PlayOnce("uava_reset","bass",1) + end + local EPKActivated = Train.Pneumatic.EPKEnabled or Train.RC1.Value == 0 + if not EPKActivated or Train.EPKContacts.Value == 0 then + self["33D"] = 0 + end + --self.Ring = self.Ring and 1 or 0 + if Train.Rp8 then Train.Rp8:TriggerInput("Set",self["8"] + (1-self.Train.RC1.Value)*(1-self["33D"]))end + --self.Ring = self.RingOverride or self.Ring + Train.RPB:TriggerInput("Set",(self.Train.PB.Value + self.Train.KVT.Value + self.Train.RV_2.Value)*self.Train.VB.Value) + Train:WriteTrainWire(34,Train.RKTT.Value+Train.DKPT.Value) +end diff --git a/lua/metrostroi/systems/_obsolete/sys_asnp.lua b/lua/metrostroi/systems/_obsolete/sys_asnp.lua new file mode 100644 index 0000000..573a141 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_asnp.lua @@ -0,0 +1,945 @@ +-------------------------------------------------------------------------------- +-- Announcer and announcer-related code +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("ASNP") +TRAIN_SYSTEM.DontAccelerateSimulation = true +if TURBOSTROI then return end + +function table.GetLastKey(t) + local lk = -math.huge + for ki in pairs(t) do + lk = math.max(lk,ki) + end + return lk +end + + +function TRAIN_SYSTEM:Initialize() + self.TriggerNames = { + "Custom1", + "Custom2", + "Custom3", + "R_Program1", + "R_Program2", + } + self.Triggers = {} + self.State = 0 + self.Style = 1 + self.RealState = 99 + self.RouteNumber = "00" + self.Depeat = false + self.Train:LoadSystem("ASNPOn","Relay","Switch",{ normally_closed = true, bass = true }) +end + +function TRAIN_SYSTEM:ClientInitialize() + self.STR1r = {} + self.STR1x = 1 + + self.End = false + self.Right = false + self.State = 0 + self.Right = false +end +if TURBOSTROI then return end + +function TRAIN_SYSTEM:Inputs() + return {} +end + +function TRAIN_SYSTEM:Outputs() + return {} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end +Metrostroi.AnnButtons = {"-","+","Меню"} +function TRAIN_SYSTEM:AnnDisplay(train,ezh3) + -- Draw button labels + if not ezh3 then + for x=0,2 do + draw.Text({ + text = string.Trim(Metrostroi.AnnButtons[x+1]), + font = "MetrostroiSubway_VerySmallText3", + pos = { 310+x*135,350+0*150}, + xalign = TEXT_ALIGN_CENTER,yalign = TEXT_ALIGN_CENTER,color = Color(0,0,0,255)}) + end + draw.Text({ + text = "Manual", + font = "MetrostroiSubway_VerySmallText3", + pos = { 735,200}, + xalign = TEXT_ALIGN_CENTER,yalign = TEXT_ALIGN_CENTER,color = Color(0,0,0,255)}) + draw.Text({ + text = "Auto", + font = "MetrostroiSubway_VerySmallText3", + pos = { 735,100}, + xalign = TEXT_ALIGN_CENTER,yalign = TEXT_ALIGN_CENTER,color = Color(0,0,0,255)}) + end + + if not train:GetPackedBool(32) then return end + if false then + for i=1,25 do + surface.SetDrawColor(Color(53,91,25)) + surface.DrawRect(235+(i-1)*18+1 - (ezh3 and 5 or 0),125+4,16,25) + --draw.DrawText(string.upper(text1[i] or ""),"MetrostroiSubway_IGLA",287+(i-1)*17.7,125+0,Color(0,0,0,210)) + end + for i=1,25 do + surface.SetDrawColor(Color(53,91,25)) + surface.DrawRect(235+(i-1)*18+1 - (ezh3 and 5 or 0),125+31+4,16,25) + --draw.DrawText(string.upper(text2[i] or ""),"MetrostroiSubway_IGLA",287+(i-1)*17.7,125+31,Color(0,0,0,210)) + end + end + + for y = 0,#self.STR1r-1 do + local xmin = 0 + local blink = false + local checked = false + local x = 0 + local iter = 0 + while((x <= math.min(24+xmin,#self.STR1r[y+1]-1+xmin))) do + --for x = 0,math.min(19,#self.STR1r[y+1]-1)-xmin do + local char = self.STR1r[y+1][x+1] + if char == "|" then + Metrostroi.DrawLine(235+9+(x-xmin)*18 - (ezh3 and 5 or 0),141 + y*30-10,235+9+(x-xmin)*18,141+ y*30+9, Color(0,0,0),3) + elseif char == "_" then + if CurTime()%0.5<=0.25 then + draw.DrawText(char,"MetrostroiSubway_FixedSYS",236+(x-xmin)*18 - (ezh3 and 5 or 0),121 + y*30, Color(0,0,0)) + end + xmin = xmin + 1 + else + draw.DrawText(char,"MetrostroiSubway_FixedSYS",235+(x-xmin)*18 - (ezh3 and 5 or 0),125 + y*30, Color(0,0,0)) + end + x = x + 1 + end + end + surface.SetAlphaMultiplier(1) +end +function TRAIN_SYSTEM:STR1(str,notchange) + if type(str) == "number" then str = tostring(str) end + if SERVER then return end + if str == true then + for i = 1,2 do + self.STR1r[i] = "" + end + self.STR1x = 1 + else + if self.STR1x > (notchange and 3 or 2) then print("STR1:ERR:MAX",str) return end + if notchange then + self.STR1r[self.STR1x-1] = self.STR1r[self.STR1x-1]..str:upper() + else + self.STR1r[self.STR1x] = str:upper() or "" + self.STR1x = self.STR1x + 1 + end + end +end +function TRAIN_SYSTEM:DisplayStation(St,stay,max) + max = (max or 25)-1 + local sz = stay and #self.STR1r[self.STR1x-1] or #self.STR1r[self.STR1x] + local Siz = stay and #self.STR1r[self.STR1x-1] or #self.STR1r[self.STR1x] + local StS = Metrostroi.AnnouncerData[St] and Metrostroi.AnnouncerData[St][1] or "Unknown" + local StT = string.Explode(" ",StS) + local str = "" + if #StT > 1 then + str = StT[1][1]..". "..table.concat(StT," ",2) + elseif #StS > 26-sz-(25-max) then + str = StS:sub(1,25-sz-2-(25-max)).."..." + else + str = StS + end + self:STR1(str,stay) +end +TRAIN_SYSTEM.LoadSeq = "/-\\|" +function TRAIN_SYSTEM:ClientThink() + + local State = self.Train:GetNW2Int("Announcer:State",-1) + self:STR1(true) + + if State == -2 then + self:STR1("ASNP Error") + self:STR1("Map not supported") + end + if State == 0 then + self:STR1("Welcome! ver 0.8") + self:STR1("loading:") + self:STR1(self.LoadSeq[math.floor(CurTime()%0.5*8)+1],true) + + --self:STR1("ver 0.8") + end + + if State == 1 then + self:STR1("Welcome") + if self.Train:GetNW2Bool("BPSNBuzzType",false) then + self:STR1(" pnm ",true) + else + self:STR1(" riu ",true) + end + self:STR1("ver 0.8",true) + + self:STR1("press menu to start") + end + if State > 1 and (not Metrostroi.WorkingStations or not Metrostroi.EndStations) then + self:STR1("Client error") + self:STR1("WorkingStations nil") + return + end + if State == 2 then + local RouteNumber = self.Train:GetNW2String("Announcer:RouteNumber","00") + local Pos = self.Train:GetNW2Int("Announcer:State2Pos",1) + self:STR1("enter route number: ") + if Pos == 1 then + self:STR1("_",true) + end + self:STR1(RouteNumber[1],true) + if Pos == 2 then + self:STR1("_",true) + end + self:STR1(RouteNumber[2],true) + if Pos == 3 then + if CurTime()%3 > 1.5 then + self:STR1("accept: menu") + else + self:STR1("cancel: +/-") + end + else + self:STR1("confirm ") + self:STR1(Pos,true) + self:STR1(" digit: \"menu\"",true) + end + end + if State > 2 and not Metrostroi.EndStations[self.Train:GetNW2Int("Announcer:Line",1)] then + self:STR1("Client error") + self:STR1("EndStations") + return + end + if State > 2 and not Metrostroi.WorkingStations[self.Train:GetNW2Int("Announcer:Line",1)] then + self:STR1("Client error") + self:STR1("WorkingStations") + return + end + + if State == 3 then + local Line = self.Train:GetNW2Int("Announcer:Line",1) + local St = Metrostroi.EndStations[Line][1] + local En = Metrostroi.EndStations[Line][#Metrostroi.EndStations[Line]] + self:STR1("choose route") + self:STR1("_") + self:STR1(Line, true) + local tim = CurTime()%4.5 + if tim < 1.5 then + self:STR1(" ",true) + self:STR1(St,true) + self:STR1("->",true) + self:STR1(En,true) + elseif tim < 3 then + self:STR1(" ST:",true) + self:DisplayStation(St,true) + else + self:STR1(" EN:",true) + self:DisplayStation(En,true) + end + end + + if State == 4 then + local Line = self.Train:GetNW2Int("Announcer:Line",1) + local StSt = self.Train:GetNW2Int("Announcer:FirstStation",1) + local St =Metrostroi.EndStations[Line][StSt] + self:STR1("Choose start station") + if not St then + self:STR1("Error, restart ASNP") + else + self:STR1(St ) + local tim = CurTime()%4.5 + self:STR1(":",true) + self:DisplayStation(St,true) + end + end + + if State == 5 then + local Line = self.Train:GetNW2Int("Announcer:Line",1) + local StSt = self.Train:GetNW2Int("Announcer:LastStation",1) + local St =Metrostroi.EndStations[Line][StSt] + self:STR1("Choose end station") + if not St then + self:STR1("Error, restart ASNP") + else + self:STR1(St) + local tim = CurTime()%4.5 + self:STR1(":",true) + self:DisplayStation(St,true) + end + end + + if State == 6 then + local Style = self.Train:GetNW2Int("Announcer:Style",1) + self:STR1("Choose style") + self:STR1(Metrostroi.PlayingStyles[Style]) + end + + if State == 7 then + local Line = self.Train:GetNW2Int("Announcer:Line",1) + local StStF = self.Train:GetNW2Int("Announcer:FirstStation",1) + local StStL = self.Train:GetNW2Int("Announcer:LastStation",1) + local StF =Metrostroi.EndStations[Line][StStF] + local StL =Metrostroi.EndStations[Line][StStL] + local Style = self.Train:GetNW2Int("Announcer:Style",1) + self:STR1("Check settings") + local tim = CurTime()%6 + if tim < 1.5 then + self:STR1("Line:") + self:STR1(Line,true) + elseif tim < 3 then + self:STR1("ST:") + self:DisplayStation(StF,true) + elseif tim < 4.5 then + self:STR1("EN:") + self:DisplayStation(StL,true) + else + self:STR1("Style:") + self:STR1(Metrostroi.PlayingStyles[Style],true) + end + end + if State < 8 then + self.Right = false + self.End = false + end + if State == 8 then + local Depeat = self.Train:GetNW2Bool("Announcer:Depeat",false) + + local RouteNumber = self.Train:GetNW2String("Announcer:RouteNumber","00") + + local Line = self.Train:GetNW2Int("Announcer:Line",1) + local StF = self.Train:GetNW2Int("Announcer:FirstStationW",1) + local Stl = self.Train:GetNW2Int("Announcer:LastStationW",1) + local StC = self.Train:GetNW2Int("Announcer:CurrentStation",2) + + local add = Stl > StF and 1 or -1 + local St =Metrostroi.WorkingStations[Line][StC] + --local StN =Metrostroi.WorkingStations[Line][StC+add] + local StL =Metrostroi.WorkingStations[Line][Stl] + + if Depeat then self:STR1("Dep. ") else self:STR1("Arr. ") end + self:DisplayStation(St,true,22) + self:STR1(string.rep(" ",23-#self.STR1r[self.STR1x-1]),true) + --self.Right = Metrostroi.AnnouncerData[St][2] + --if self.Right then self:STR1("*R",true) else self:STR1("*L",true) end + + if self.Train:GetNW2Int("Announcer:Locked",0) > 0 and self.Train:GetNW2Int("Announcer:Locked",0) ~= 2 then + self:STR1("*L",true) + else + self:STR1(" L",true) + end + + if not self.Train:GetNW2Bool("Announcer:Playing1",false) then + if add > 0 then + self:STR1("I ") + else + self:STR1("II ") + end + self:STR1(string.format("%02d ",RouteNumber),true) + end + if self.Train:GetNW2Bool("Announcer:Playing1",false) then + self:STR1("<<< Goes Announce >>>") + --self:DisplayStation(St,true,23) + elseif add > 0 and StC >= Stl or add < 0 and StC <= Stl then + self:STR1("<<>>",true) + self.End = true + else + self:DisplayStation(StL,true,22) + self.End = false + end + self:STR1(string.rep(" ",23-#self.STR1r[self.STR1x-1]),true) + if add > 0 and StC < StL or add < 0 and StC > StL then + if not self.Train:GetNW2Bool("Announcer:Playing1",false) then + --if self.Right then self:STR1("R",true) else self:STR1("L",true) end + --else + --if Metrostroi.AnnouncerData[StL][2] then self:STR1("*R",true) else self:STR1("*L",true) end + if self.Train:GetNW2Int("Announcer:Locked",0) > 1 then + self:STR1("*R",true) + else + self:STR1(" R",true) + end + end + end + end + + if State == 9 then + local Choosed = self.Train:GetNW2Int("Announcer:Choosed",0) + if Choosed == 0 then + self:STR1(">Back") + self:STR1(" Swap paths") + elseif Choosed == 1 then + self:STR1(">Swap paths") + self:STR1(" Reset") + else + self:STR1(" Swap paths") + self:STR1(">Reset") + end + end +end + + +Metrostroi.PlayingStyles = {"Moscow","Kiev"} + +function TRAIN_SYSTEM:ReloadSigns() + if not self.Line or not Metrostroi.EndStations[self.Line] then return end + local StL = Metrostroi.EndStations[self.Line][self.LastStation] + if not StL then return end + self.Train:PrepareSigns() + + + if self.Train.SignsList[StL] then + self.Train.SignsIndex = self.Train.SignsList[StL] or 1 + if self.Train.SignsList[self.Train.SignsIndex] then self.Train:SetNW2String("FrontText",self.Train.SignsList[self.Train.SignsIndex][2]) end + end + + local StF= Metrostroi.EndStations[self.Line][self.FirstStation] + if #self.Train.WagonList <= 1 or not StF then return end + local LastTrain = self.Train.WagonList[#self.Train.WagonList] + LastTrain:PrepareSigns() + if LastTrain.SignsList[StF] then + LastTrain.SignsIndex = self.Train.SignsList[StF] or 1 + if self.Train.SignsList[self.Train.SignsIndex] then LastTrain:SetNW2String("FrontText",self.Train.SignsList[self.Train.SignsIndex][2]) end + end +end + +function TRAIN_SYSTEM:UpdateAnnouncer() + for k,v in pairs(self.Train.WagonList) do + if v.ASNP then + if v ~= self.Train then + if self.Line then v.ASNP.Line = self.Line end + if self.FirstStation then + v.ASNP.LastStation = self.FirstStation + v.ASNP.LastStationW = self.FirstStationW + end + if self.LastStation then + v.ASNP.CurrentStation = self.LastStationW + v.ASNP.FirstStation = self.LastStation + v.ASNP.FirstStationW= self.LastStationW + if Metrostroi.EndStations[self.Line] and Metrostroi.AnnouncerData[Metrostroi.EndStations[self.Line][self.LastStation]] and Metrostroi.AnnouncerData[Metrostroi.EndStations[self.Line][self.LastStation]][9] then + v.ASNP.LastStation = self.LastStation + v.ASNP.LastStationW = self.LastStationW + v.ASNP.CurrentStation = self.FirstStationW + v.ASNP.FirstStation = self.FirstStation + v.ASNP.FirstStationW= self.FirstStationW + end + end + + v.ASNP.State = self.State + v.ASNP.Style = self.Style + v.ASNP.Depeat = true + v.ASNP.RouteNumber = self.RouteNumber + end + end + v:OnButtonPress("RouteNumberUpdate",self.RouteNumber) + end + self:ReloadSigns() +end + +function TRAIN_SYSTEM:Trigger(name,nosnd) + if self.Train.KV.ReverserPosition == 0 and self.Train.KRU.Position == 0 then return end + if self.State == 1 and name == "Custom3" then self:SetState(2) return end + + if self.State == 2 then + if name == "Custom1" and self.State2Pos < 3 then + local num = tonumber(self.RouteNumber[self.State2Pos]) - 1 + if num < 0 then num = 9 end + self.RouteNumber = string.SetChar(self.RouteNumber,self.State2Pos,num) + self:UpdateAnnouncer() + end + if name == "Custom2" and self.State2Pos < 3 then + local num = tonumber(self.RouteNumber[self.State2Pos]) + 1 + if num > 9 then num = 0 end + self.RouteNumber = string.SetChar(self.RouteNumber,self.State2Pos,num) + self:UpdateAnnouncer() + end + if (name == "Custom1" or name == "Custom2") and self.State2Pos == 3 then + self.State2Pos = 1 + end + if name == "Custom3" then + if self.State2Pos < 3 then + self.State2Pos = self.State2Pos+1 + else + self:SetState(3) + return + end + end + end + + if self.State == 3 then + if name == "Custom1" then + self.Line = self.Line - 1 + if self.Line < 1 then self.Line = #Metrostroi.WorkingStations end + self:UpdateAnnouncer() + end + if name == "Custom2" then + self.Line = self.Line + 1 + if self.Line > #Metrostroi.WorkingStations then self.Line = 1 end + self:UpdateAnnouncer() + end + if name == "Custom3" then + self:SetState(4) + return + end + end + + if self.State == 4 then + if name == "Custom1" then + self.FirstStation = self.FirstStation - 1 + if self.FirstStation < 1 then self.FirstStation = #Metrostroi.EndStations[self.Line] end + self:UpdateAnnouncer() + end + if name == "Custom2" then + self.FirstStation = self.FirstStation + 1 + if self.FirstStation > #Metrostroi.EndStations[self.Line] then self.FirstStation = 1 end + self:UpdateAnnouncer() + end + if name == "Custom3" then + self:SetState(5) + return + end + end + + if self.State == 5 then + if name == "Custom1" then + self.LastStation = self.LastStation - 1 + if self.LastStation < 1 then self.LastStation = #Metrostroi.EndStations[self.Line] end + if self.LastStation == self.FirstStation then self:Trigger("Custom1") return end + self:UpdateAnnouncer() + end + if name == "Custom2" then + self.LastStation = self.LastStation + 1 + if self.LastStation > #Metrostroi.EndStations[self.Line] then self.LastStation = 1 end + if self.LastStation == self.FirstStation then self:Trigger("Custom2") return end + self:UpdateAnnouncer() + end + if name == "Custom3" and self.FirstStation ~= self.LastStation then + self:SetState(6) + return + end + end + + if self.State == 6 then + if name == "Custom1" then + self.Style = self.Style - 1 + if self.Style < 1 then self.Style = #Metrostroi.PlayingStyles end + self:UpdateAnnouncer() + end + if name == "Custom2" then + self.Style = self.Style + 1 + if self.Style > #Metrostroi.PlayingStyles then self.Style = 1 end + self:UpdateAnnouncer() + end + if name == "Custom3" then + self:SetState(7) + return + end + end + + if self.State == 7 then + if name == "Custom1" or name == "Custom2" then + self:SetState(2) + return + end + if name == "Custom3" and (self.Train.KV.ReverserPosition > 0 or self.Train.KRU.Position > 0) then + self:SetState(8) + self.Train.Announcer:MultiQueue(0006,0001,0005) + self.Train.Announcer:MultiQueue(0201,0211,Metrostroi.EndStations[self.Line][self.FirstStation]+1000,Metrostroi.EndStations[self.Line][self.LastStation]+1000) + + self.Train.Announcer:MultiQueue(0006) + return + end + end + if self.State == 8 then + if name == "Custom1" then + if not self.Depeat then + if self.LastStation < self.FirstStation then + self.CurrentStation = math.min(self.FirstStationW,self.CurrentStation + 1) + else + self.CurrentStation = math.max(self.FirstStationW,self.CurrentStation - 1) + end + end + + if self.LastStation < self.FirstStation and self.CurrentStation >= self.FirstStationW or self.LastStation > self.FirstStation and self.CurrentStation <= self.FirstStationW then + if Metrostroi.AnnouncerData[Metrostroi.WorkingStations[self.Line][self.CurrentStation]][9] then + self.CurrentStation = self.FirstStationW + local tem = self.FirstStation + self.FirstStation = self.LastStation + self.LastStation = tem + self.Depeat = not self.Depeat + else + self.Depeat = true + end + else + self.Depeat = not self.Depeat + end + end + if name == "Custom2" then + if self.Depeat then + if self.LastStation > self.FirstStation then + self.CurrentStation = math.min(self.LastStationW,self.CurrentStation + 1) + else + self.CurrentStation = math.max(self.LastStationW,self.CurrentStation - 1) + end + end + + if self.LastStation < self.FirstStation and self.CurrentStation <= self.LastStationW or self.LastStation > self.FirstStation and self.CurrentStation >= self.LastStationW then + if Metrostroi.AnnouncerData[Metrostroi.WorkingStations[self.Line][self.CurrentStation]][9] then + self.CurrentStation = self.LastStationW + local tem = self.FirstStation + self.FirstStation = self.LastStation + self.LastStation = tem + self.Depeat = not self.Depeat + else + self.Depeat = false + end + else + self.Depeat = not self.Depeat + end + end + if name == "Custom3" then + self:SetState(9) + return + end + + if name == "R_Program1" and #self.Train.Announcer.Schedule == 0 and (self.Train.CustomC.Value < 0.5 or + self.CurrentStation == math.Clamp(self.CurrentStation,path and self.LastStationW or self.FirstStationW,path and self.FirstStationW or self.LastStationW) and self.Depeat == true) then + self:PlayAnnounce1() + if self.Depeat and self.Train.CustomC.Value < 0.5 then + if self.LastStation > self.FirstStation then + self.CurrentStation = math.min(self.LastStationW,self.CurrentStation + 1) + else + self.CurrentStation = math.max(self.LastStationW,self.CurrentStation - 1) + end + end + + if (self.LastStation < self.FirstStation and self.CurrentStation <= self.LastStationW or self.LastStation > self.FirstStation and self.CurrentStation >= self.LastStationW) and not self.Depeat then + self.Depeat = false + if Metrostroi.AnnouncerData[Metrostroi.WorkingStations[self.Line][self.CurrentStation]][9] then + self.CurrentStation = self.LastStationW + local tem = self.FirstStation + self.FirstStation = self.LastStation + self.LastStation = tem + self.Depeat = not self.Depeat + else + self.CurrentStation = self.FirstStationW + end + elseif self.Train.CustomC.Value < 0.5 or self.Depeat == true then + self.Depeat = not self.Depeat + end + end + end + + if self.State == 9 then + if name == "Custom1" then + self.Choosed = math.max(0,self.Choosed-1) + end + if name == "Custom2" then + self.Choosed = math.min(2,self.Choosed+1) + end + if name == "Custom3" then + if self.Choosed == 0 then + self.State = 8 + elseif self.Choosed == 1 then + local tmp = self.FirstStation + self.FirstStation = self.LastStation + self.LastStation = tmp + if self.FirstStation and self.Line and self.FirstStationW ~= self.FirstStation then + self.FirstStationW = Metrostroi.WorkingStations[self.Line][Metrostroi.EndStations[self.Line][self.FirstStation]] + end + if self.LastStation and self.Line and self.LastStationW ~= self.LastStation then + self.LastStationW = Metrostroi.WorkingStations[self.Line][Metrostroi.EndStations[self.Line][self.LastStation]] + end + if Metrostroi.AnnouncerData[Metrostroi.EndStations[self.Line][self.FirstStation]][9] then + local tem = self.FirstStation + self.FirstStation = self.LastStation + self.LastStation = tem + end + self:SetState(7) + else + self:SetState(7) + end + return + end + end +end + +function TRAIN_SYSTEM:PlayAnnounce1(val) + local add = self.LastStation > self.FirstStation and 1 or -1 + local curr = Metrostroi.WorkingStations[self.Line][self.CurrentStation] + local currt = Metrostroi.AnnouncerData[curr] + local next = Metrostroi.WorkingStations[self.Line][self.CurrentStation + add] + local nextt = Metrostroi.AnnouncerData[next] + --local uvpass = false + self.Train.Announcer:MultiQueue(0006,0001,0005) -- Щелчки и начало + if self.Depeat then -- Отправление + if Metrostroi.AnnouncerData[curr +add] and not Metrostroi.AnnouncerData[curr +add][1] then self.Train.Announcer:MultiQueue(0230,curr+add+1000,0001) end + + self.Train.Announcer:MultiQueue(0218,0219,next+1000) -- ОДЗ СС + if nextt and nextt[2] then self.Train.Announcer:MultiQueue(self.Style == 2 and 0215 or 0231) end -- Платформа Ñправа(или киевÑкий вариант) + --[=[ + if nextt[7] and nextt[7] ~= 0 then + if Metrostroi.AnnouncerData[nextt[7][1]] then + self.Train.Announcer:MultiQueue(0202, 0203,nextt[7][1]) + else + self.Train.Announcer:MultiQueue(0202, nextt[7][1]) + end + end -- Переход + ]=] + if nextt and nextt[5] and self.Style == 3 then self.Train.Announcer:MultiQueue(0213) end -- ПриÑлонÑтьÑÑ + if nextt and nextt[3] then + --uvpass = true + if self.Style == 1 then self.Train.Announcer:MultiQueue(0230) end + self.Train.Announcer:MultiQueue(self.Style == 2 and 0214 or 0232) -- ВежливоÑть + end + --if nextt[8] == (add > 0 and 1 or 2) then self.Train.Announcer:MultiQueue(0002,self.Style == 2 and 0210 or 0223,Metrostroi.EndStations[self.Line][self.LastStation]) end -- до Ñтанции + else + self.Train.Announcer:MultiQueue(0220,curr+1000) -- Ð¡Ñ‚Ð°Ð½Ñ†Ð¸Ñ + if currt[2] then self.Train.Announcer:MultiQueue(self.Style == 2 and 0215 or 0231) end -- Платформа Ñправа(или киевÑкий вариант) + if currt[7] and currt[7] ~= 0 then + if Metrostroi.AnnouncerData[currt[7][1]] then + self.Train.Announcer:MultiQueue(0202, 0203,currt[7][1]+1000) + else + self.Train.Announcer:MultiQueue(0202, currt[7][1]) + end + end -- Переход + + if self.LastStation < self.FirstStation and self.CurrentStation <= self.LastStationW or self.LastStation > self.FirstStation and self.CurrentStation >= self.LastStationW then + if not currt[9] then + if self.Style == 1 then + self.Train.Announcer:MultiQueue(0224,0002,0230,0226) -- ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ + else + self.Train.Announcer:MultiQueue(0212) -- ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ + end + self.Train.Announcer:MultiQueue(0006) -- Конечный щелчок + return + end + end + if currt[4] then + --uvpass = true + if self.Style == 1 then self.Train.Announcer:MultiQueue(0230) end + self.Train.Announcer:MultiQueue(0226+(currt[4] or 0)) -- Вещи + end + if add > 0 and self.LastStationW < #Metrostroi.WorkingStations[self.Line] or add < 0 and self.LastStationW > 1 then + self.Train.Announcer:MultiQueue(0002,self.Style == 2 and 0210 or 0223,Metrostroi.EndStations[self.Line][self.LastStation]+1000) -- Следует до Ñтанции + end + if currt[8] == (add > 0 and 1 or 2) then self.Train.Announcer:MultiQueue(0002,self.Style == 2 and 0210 or 0223,Metrostroi.EndStations[self.Line][self.LastStation]+1000) end -- до Ñтанции + end + self.Train.Announcer:MultiQueue(0006) -- Конечный щелчок +end + + + +function TRAIN_SYSTEM:GetTimer(val) + return self.TimerMod and (CurTime() - self.Timer) > val +end +function TRAIN_SYSTEM:SetTimer(mod) + if mod then + if self.TimerMod == mod then return end + self.TimerMod = mod + else + self.TimerMod = nil + end + self.Timer = CurTime() +end + +function TRAIN_SYSTEM:SetState(state,state7,noupd) + local Train = self.Train + local ARS = Train.ALS_ARS + local Announcer = Train.Announcer + if state and self.State ~= state then + self.State = state + if state == 1 or state == 1.1 then + self.NextState = add + end + self:SetTimer() + elseif not state then + state = self.NextState + self.State = self.NextState + else + return + end + if state == 0 then + self.LoadTimer = math.random(2,4) + end + if state == 2 then + self.State2Pos = 1 + end + if state == 3 then + self.Line = self.Line or 1 + end + if state == 4 then + self.FirstStation = self.FirstStation or 1 + if self.FirstStation > #Metrostroi.EndStations[self.Line] then self.FirstStation = 1 end + self:UpdateAnnouncer() + end + if state == 5 then + self.LastStation = self.LastStation or self.LastStation ~= self.FirstStation and #Metrostroi.EndStations[self.Line] or 1 + if self.LastStation > #Metrostroi.EndStations[self.Line] then self.LastStation = 1 end + self:UpdateAnnouncer() + end + if state == 6 then + self.Style = self.Style or 1 + end + if state == 8 and (self.Train.KV.ReverserPosition > 0 or self.Train.KRU.Position > 0) then + if self.Train:ReadCell(49170) == 2 and false and self.LastStation > self.FirstStation then + local tem = self.FirstStation + self.FirstStation = self.LastStation + self.LastStation = tem + end + if self.Train:ReadCell(49170) == 1 and false and self.LastStation < self.FirstStation then + local tem = self.FirstStation + self.FirstStation = self.LastStation + self.LastStation = tem + end + + if self.FirstStation and self.Line and self.FirstStationW ~= self.FirstStation then + self.FirstStationW = Metrostroi.WorkingStations[self.Line][Metrostroi.EndStations[self.Line][self.FirstStation]] + end + if self.LastStation and self.Line and self.LastStationW ~= self.LastStation then + self.LastStationW = Metrostroi.WorkingStations[self.Line][Metrostroi.EndStations[self.Line][self.LastStation]] + end + local curr = self.FirstStationW + print(curr) + local path = self.LastStation < self.FirstStation + local st = self.Train:ReadCell(49169) > 0 and Metrostroi.WorkingStations[self.Line][self.Train:ReadCell(49169)] or 0 + if st > 0 then + curr = math.Clamp(st,path and self.LastStationW or self.FirstStationW,path and self.FirstStationW or self.LastStationW) + end + self:UpdateAnnouncer() + print(curr) + self.CurrentStation = curr + self.Depeat = true + end + if state < 8 then + self.Train.ASNP31:TriggerInput("Set",0) + self.Train.ASNP32:TriggerInput("Set",0) + end + if state == 9 then + self.Choosed = 0 + end +end + +--States: +-- -2 - Loaded in another cab +-- -1 - Starting up +--nil - First setUp and get settings from last +--1 - Welcome Screen +--2 - Route Choose +--3 - Choose start station +--4 - Choose end station +--5 - Choose path +--6 - Choose style of playing +--7 - Normal state +--8 - Confim a settings (on last stations) +function TRAIN_SYSTEM:Think() + local Train = self.Train + if Train.VB.Value > 0.5 and Train.Battery.Voltage > 55 and self.State > -1 then + for k,v in pairs(self.TriggerNames) do + if Train[v] and (Train[v].Value > 0.5) ~= self.Triggers[v] then + if Train[v].Value > 0.5 then + self:Trigger(v) + end + --print(v,self.Train[v].Value > 0.5) + self.Triggers[v] = Train[v].Value > 0.5 + end + end + end + if self.Train.R_Radio.Value > 0.5 and self.State == -1 then + self:SetState(0) + end + if self.Train.R_Radio.Value < 0.5 and self.State ~= -1 then + self:SetState(-1) + return + end + if not Metrostroi.AnnouncerData and self.State ~= -2 then + if self.State ~= -2 then self:SetState(-2) end + return + end + + if self.State == 0 then + self:SetTimer(0) + if self:GetTimer(self.LoadTimer) then + self.LoadTimer = nil + self:SetState(1) + end + end + if self.State >= 8 then + local Distance = math.min(3072,self.Train:ReadCell(49165)) + --local st = self.Train:ReadCell(49169) > 0 and Metrostroi.AnnouncerData[self.Train:ReadCell(49169)] or false + local st = self.Train:ReadCell(49169) + local right = st and Metrostroi.AnnouncerData[st] and Metrostroi.AnnouncerData[st][2] + local unlock = Distance > 100 and self.Train.ALS_ARS.Speed <= 2 + local lock = self.Train.ALS_ARS.Speed > 2 + if self.Train.ASNPOn.Value > 0.5 and not unlock then + if right then + if self.Train.ASNP31.Value == 0 then self.Train.ASNP31:TriggerInput("Set",1) end + + --if not lock and + if not lock and self.Train.ASNP32.Value == 1 then self.Train.ASNP32:TriggerInput("Set",0) end + if lock and self.Train.ASNP32.Value == 0 then self.Train.ASNP32:TriggerInput("Set",1) end + else + --if not lock and + if not lock and self.Train.ASNP31.Value == 1 then self.Train.ASNP31:TriggerInput("Set",0) end + if lock and self.Train.ASNP31.Value == 0 then self.Train.ASNP31:TriggerInput("Set",1) end + + if self.Train.ASNP32.Value == 0 then self.Train.ASNP32:TriggerInput("Set",1) end + end + else + if self.Train.ASNP32.Value == 1 then self.Train.ASNP32:TriggerInput("Set",0) end + if self.Train.ASNP31.Value == 1 then self.Train.ASNP31:TriggerInput("Set",0) end + end + end + if self.State == 8 and (self.Train.KV.ReverserPosition > 0 or self.Train.KRU.Position > 0) then + if self.Train.CustomC.Value > 0.5 then + local Distance = math.min(3072,self.Train:ReadCell(49165)) + local st = self.Train:ReadCell(49169) > 0 and Metrostroi.WorkingStations[self.Line][self.Train:ReadCell(49169)] or 0 + if Distance < 25 and self.AutoStation ~= st and self.Train:ReadCell(49169) > 0 and st == math.Clamp(st,path and self.LastStationW or self.FirstStationW,path and self.FirstStationW or self.LastStationW) then + + self.CurrentStation = math.Clamp(st,path and self.LastStationW or self.FirstStationW,path and self.FirstStationW or self.LastStationW) + self.Depeat = false + self:PlayAnnounce1() + self.Depeat = true + self.AutoStation = self.CurrentStation + end + end + end + self.Train:SetNW2Int("Announcer:State",self.State) + self.Train:SetNW2Int("Announcer:Line",self.Line) + self.Train:SetNW2Int("Announcer:FirstStation",self.FirstStation) + self.Train:SetNW2Int("Announcer:LastStation",self.LastStation) + self.Train:SetNW2String("Announcer:RouteNumber",self.RouteNumber) + if self.State == 2 then + self.Train:SetNW2Int("Announcer:State2Pos",self.State2Pos) + end + if self.State == 6 then + self.Train:SetNW2String("Announcer:Style",self.Style) + end + if self.State == 8 then + self.Train:SetNW2Int("Announcer:FirstStationW",self.FirstStationW) + self.Train:SetNW2Int("Announcer:LastStationW",self.LastStationW) + self.Train:SetNW2String("Announcer:CurrentStation",self.CurrentStation) + self.Train:SetNW2Bool("Announcer:Depeat",self.Depeat) + if self.Train.ASNP31.Value == 1 then + if self.Train.ASNP32.Value == 1 then + self.Train:SetNW2Int("Announcer:Locked",3) + else + self.Train:SetNW2Int("Announcer:Locked",1) + end + elseif self.Train.ASNP32.Value == 1 then + self.Train:SetNW2Int("Announcer:Locked",2) + else + self.Train:SetNW2Int("Announcer:Locked",0) + end + + end + if self.State == 9 then + self.Train:SetNW2Int("Announcer:Choosed",self.Choosed) + end + self.Train:SetNW2Bool("Announcer:Playing", self.Train.Announcer.ScheduleAnnouncement > 2) + self.Train:SetNW2Bool("Announcer:Playing1", #self.Train.Announcer.Schedule > 0) + if self.FirstStation and self.Line and self.FirstStationW ~= self.FirstStation then + self.FirstStationW = Metrostroi.WorkingStations[self.Line][Metrostroi.EndStations[self.Line][self.FirstStation]] + end + if self.LastStation and self.Line and self.LastStationW ~= self.LastStation then + self.LastStationW = Metrostroi.WorkingStations[self.Line][Metrostroi.EndStations[self.Line][self.LastStation]] + end +end diff --git a/lua/metrostroi/systems/_obsolete/sys_autodrive.lua b/lua/metrostroi/systems/_obsolete/sys_autodrive.lua new file mode 100644 index 0000000..9b58e48 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_autodrive.lua @@ -0,0 +1,723 @@ +-------------------------------------------------------------------------------- +-- Àâòîâåäåíèå +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("Autodrive") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.MU = -0.25 + self.Horlifts = { + [114] = true, + } +end + +function TRAIN_SYSTEM:Outputs() + return {} +end + +function TRAIN_SYSTEM:Inputs() + return {} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + +TRAIN_SYSTEM.Corrections = { + [0] = { + }, + [1] = { + [108] = -3.23, + [109] = -2.79, + [110] = -3.09, + [111] = -3.17, + [112] = -3.17, + [113] = -3.18, + [114] = -3.21, + [115] = -3.21, + [116] = -3.22, + [117] = -3.21, + [118] = -3.02, + [119] = -3.20, + [121] = -3.17, + [122] = -4.10, + [123] = -1.98, + }, + [2] = { + [123] = -1.98, + [122] = -4.10,-- + [121] = -3.17, + [119] = -3.20, + [118] = -3.02, + [117] = -3.21, + [116] = -3.22, + [115] = -3.21, + [114] = -3.21, + [113] = -3.18, + [112] = -3.17, + [111] = -3.17, + [110] = -3.09, + [109] = -2.79, + [108] = -3.23, + } + } +function TRAIN_SYSTEM:GetStationRK(dX,horlift) + -- Calculate RK position based on distance and autodrive profile + local TargetBrakeRKPosition = 1 + local speed = self.Train.ALS_ARS.Speed + if dX < 160 then TargetBrakeRKPosition = speed > 55 and 3 or 1 end + if dX < 86.25 then TargetBrakeRKPosition = 6 end + if dX < 53.21 + (horlift and 10 or 0) then TargetBrakeRKPosition = 10 end + if dX < 20.13 then TargetBrakeRKPosition = 15 end + if dX < 8 then + TargetBrakeRKPosition = 15 + --if dX < 10 and speed > 15 then TargetBrakeRKPosition = 18 + --else + --else + if dX < 6 then TargetBrakeRKPosition = 16 end + --if dX < 2.64 then TargetBrakeRKPosition = 18 end + if horlift and dX < 4 and speed > 6 then TragetBrakeRKPosition = 17 end + if dX < 3 then TargetBrakeRKPosition = 18 end + --if horlift and dX < 1.5 then TargetBrakeRKPosition = 19 end + --if VZ then TargetBrakeRKPosition = 18 end + end + --if dX < 15 then TargetBrakeRKPosition = 16 end + return TargetBrakeRKPosition +end + +function TRAIN_SYSTEM:Autodrive(StationBraking) + local Train= self.Train + -- Calculate distance to station + local dX = self.Train.UPO.Distance + --local speedLimit = (Train.ALS_ARS.Signal0 or Train.ALS_ARS.RealNoFreq) and 0 or Train.ALS_ARS.Signal40 and 40 or Train.ALS_ARS.Signal60 and 60 or Train.ALS_ARS.Signal70 and 70 or Train.ALS_ARS.Signal80 and 80 or 0 + local speedLimit = 0--(self.Train.ALS_ARS.Signal0 or self.Train.ALS_ARS.RealNoFreq) and 0 or self.Train.ALS_ARS.Signal40 and 40 or self.Train.ALS_ARS.Signal60 and 60 or self.Train.ALS_ARS.Signal70 and 70 or self.Train.ALS_ARS.Signal80 and 80 or 0 + if self.Train.ALS_ARS.AVSpeedLimit and self.Train.ALS_ARS.AVSpeedLimit > 20 then + speedLimit = self.Train.ALS_ARS.AVSpeedLimit + end + local OnStation = dX < (160+35*self.MU - (speedLimit == 40 and 30 or 0)) and not self.StartMoving and Metrostroi.AnnouncerData[self.Train.UPO.Station]and Metrostroi.AnnouncerData[self.Train.UPO.Station][1] + if StationBraking and (dX >= (160+35*self.MU - (speedLimit == 40 and 30 or 0)) or not OnStation) then self.Train.UPO.StationAutodrive = false return end + -- Target and real RK position (0 if not braking) + local TargetBrakeRKPosition = 0 + + local RKPosition = math.floor(Train.RheostatController.Position+0.5) + + -- Calculate next speed limit + + -- Get angle + local Slope = Train:GetAngles().pitch + + -- Check speed constraints + if Train.ALS_ARS.Speed > (speedLimit - 6) then self.NoAcceleration = true end + if Train.ALS_ARS.Speed < (speedLimit - 10) then self.NoAcceleration = false end + + local Brake = false + local Accelerate = false + + local threshold = 1.0 + (Slope > 1 and 1 or 0) + + -- Slow down on slopes + if Train.ALS_ARS.Speed > speedLimit - 5 - (self.NoAcceleration and 4 or 7) then + if Slope > 1 then + if speedLimit == 40 then + TargetBrakeRKPosition = 7 + elseif speedLimit > 40 then + TargetBrakeRKPosition = 1 + Brake = (Train.ALS_ARS.Speed > speedLimit - 4) + end + end + end + + -- Slow down if overspeeding soon + if (Train.ALS_ARS.Speed > (speedLimit - threshold)) then + TargetBrakeRKPosition = 18 + end + + -- How smooth braking should be (higher self.MU = more gentle braking) + -- Full stop command + if Train.ALS_ARS.SpeedLimit < 30 then TargetBrakeRKPosition = 18 Brake = true end + -- Calculate RK position based on distance and autodrive profile + if OnStation then + TargetBrakeRKPosition = self:GetStationRK(dX) + else + if dX > (160+35*self.MU - (speedLimit == 40 and 30 or 0)) then self.StartMoving = nil end + end + + -- Generate commands + local ElectricBrakeActive = FullStop or TargetBrakeRKPosition > 0 + local AcceleratingActive = not ElectricBrakeActive and not self.NoAcceleration and Slope < 1 + + -- Generate brake rheostat rotation + local RheostatBrakeRotating = Brake or RKPosition < TargetBrakeRKPosition + -- Generate accel rheostat rotation + local PP = math.floor(Train.PositionSwitch.Position + 0.5) == 2 + + local AmpNorm = true --Train.Electric.Itotal < (350 - (Train:GetPhysicsObject():GetMass()-30000)/24) * math.floor(Train.PositionSwitch.Position + 0.5) + local RheostatAccelRotating = AcceleratingActive + + if Slope < -2 and (math.floor(Train.PositionSwitch.Position + 0.5) == 2 and RKPosition == 10 and Train.Electric.Itotal > 500) then + --if PP and (8 <= RKPosition and RKPosition <= 12) then + RheostatAccelRotating = false + --end + end + local PneumaticValve1 = ((dX < 1.55) and (Train.ALS_ARS.Speed > 0.1) and OnStation and TargetBrakeRKPosition == 18) or (Train.ALS_ARS.Speed > (Train.ALS_ARS.SpeedLimit - threshold)) + --or (Train:ReadCell(6) > 0 and Train:ReadCell(18) < 1 and Slope > 1) + if dX < 2 and Train.ALS_ARS.Speed < 0.5 then self.AutodriveReset = true end + --Disable autodrive on end of station brake + --local StatID = Metrostroi.WorkingStations[self.Train.UPO.Station] or Metrostroi.WorkingStations[self.Train.UPO.Station + (self.Path == 1 and 1 or -1)] or 0 + + if (TargetBrakeRKPosition == 18 and Train.ALS_ARS.Speed < 0.1 and not self.StartMoving and OnStation) or (self.StartMoving and 10 < dX and dX < 160) then + if (TargetBrakeRKPosition == 18 and Train.ALS_ARS.Speed < 0.1 and not self.StartMoving and OnStation) then + self.Train.UPO.StationAutodrive = false + + -- + --self.VUDOverride = true + --[[ + --local self.Train.UPO.Station = self.Train:ReadCell(49160) > 0 and self.Train:ReadCell(49160) or self.Train:ReadCell(49161) + if self.Train.UPO.Station == 0 then return end + local StatID = Metrostroi.WorkingStations[self.Train.UPO.Station] or Metrostroi.WorkingStations[self.Train.UPO.Station + (self.Path == 1 and 1 or -1)] or 0 + if not StationBraking then--GetConVarNumber("metrostroi_paksd_autoopen",0) > 0 and not StationBraking then + local Curr = Metrostroi.AnnouncerData[self.Train.UPO.Station] + if Curr[2] then + Train:WriteCell(32,1) + else + Train:WriteCell(31,1) + end + timer.Simple(0.1,function() + if not IsValid(Train) then return end + Train:WriteCell(32,0) + Train:WriteCell(31,0) + end) + Train.ADoorDisable:TriggerInput("Set",1) + end + ]] + end + self.AutodriveReset = true + return + end + + -- Enter commands + --Train:WriteCell(1, AcceleratingActive and 1 or 0) --Engage engines + --Train:WriteCell(2, (RheostatAccelRotating or (ElectricBrakeActive and (RheostatBrakeRotating or RKPosition == 18 and not OnStation))) and 1 or 0) --X2/T2 + --Train:WriteCell(3, (Train.ALS_ARS.Speed > 30 and RheostatAccelRotating) and 1 or 0) --X3 + --Train:WriteCell(6, ElectricBrakeActive and 1 or 0) --Engage brakes + --Train:WriteCell(20,(ElectricBrakeActive or not self.NoAcceleration) and 1 or 0) -- Engage power circuits + local KVPos = 0 + if ElectricBrakeActive then + if (RheostatBrakeRotating or RKPosition == 18 and not OnStation) and not Train:GetPackedBool(35) then + KVPos = -3 + else + KVPos = -1 + end + elseif AcceleratingActive then + if Train.ALS_ARS.Speed > 30 and RheostatAccelRotating and not Train:GetPackedBool(35) then + KVPos = 3 + elseif RheostatAccelRotating and not Train:GetPackedBool(35) then + KVPos = 2 + else + KVPos = 1 + end + end + if (KVPos == -1) and Train:GetPackedBool(35) then + if not self.VZTimer1 then self.VZTimer1 = CurTime() + 1 end + else + self.VZTimer1 = nil + end + if self.VZTimer1 and self.VZTimer1 < CurTime() then + PneumaticValve1 = true + end + if OnStation then + self.Train.R25p:TriggerInput("Set",self.OldRheostatBrakeRotating ~= RheostatBrakeRotating) + self.OldRheostatBrakeRotating = RheostatBrakeRotating + end + Train:WriteCell(29, PneumaticValve1 and 1 or 0) -- Engage PN1 + Train:TriggerInput("KVControllerAutodriveSet",KVPos) + --Train:WriteCell(25,(ElectricBrakeActive and self.TargetBrakeRKPosition > 17) and 1 or 0) -- Engage power circuits + self.Brake = ElectricBrakeActive + self.Accelerate = AcceleratingActive + self.Rotating = RheostatBrakeRotating and true or RheostatAccelRotating and false or nil +end + +TRAIN_SYSTEM.Commands = { + { + [108] = { + {9999,2.5}, + }, + [109] = { + {9999,2.5}, + {1366,0}, + {1217,3}, + {981,0}, + {684,3}, + {338,0}, + {259,2.5}, + {152,-6}, + }, + [110] = { + {9999,2.5}, + {1003,0}, + {1016,-1}, + {820,0}, + {136,-6}, + }, + [111] = { + {9999,2.5}, + {860,0}, + {335,-1}, + {233,0}, + {153,-6}, + }, + [112] = { + {9999,2.5}, + {1809,3}, + {1645,0}, + {1446,-4}, + {1402,-4}, + {1286,0}, + {1220,-4}, + {1049,0}, + {541,-5}, + {403,0}, + {138,-6}, + }, + }, + { + [111] = { + {9999,2.5}, + {1651,3}, + {1464,0}, + {1260,2.5}, + {1232,2.5}, + {893,0}, + {847,2.5}, + {712,0}, + {491,-4}, + {288,0}, + {216,2.5}, + {156,0}, + {170,-6}, + }, + [110] = { + {9999,2.5}, + {805,3}, + {770,0}, + {127,-6}, + }, + [109] = { + {9999,3}, + {1043,0}, + {419,2.5}, + {353,3}, + {224,0}, + {176,-6}, + }, + [108] = { + {9999,2.5}, + {1433,0}, + {1345,-1}, + {1339,-2}, + {1167,-1}, + {1075,0}, + {817,-1}, + {650,0}, + {167,-6}, + }, + } +} +function TRAIN_SYSTEM:GetCurrentCommand() + self.Commands = { + { + [108] = { + {9999,2.5}, + }, + [109] = { + {9999,2.5}, + {1366,0}, + {1217,3}, + {981,0}, + {684,3}, + {338,0}, + {259,2.5}, + {152,-6}, + }, + [110] = { + {9999,2.5}, + {1003,0}, + {1016,-1}, + {850,0}, + {150,-6}, + }, + [111] = { + {9999,2.5}, + {860,0}, + {335,-1}, + {233,0}, + {153,-6}, + }, + [112] = { + {9999,2.5}, + {1809,3}, + {1645,0}, + {1446,-4}, + --{1402,-4}, + {1286,0}, + {1220,-4}, + {1018,0}, --1049 + {541,-5}, + {390,0}, + {150,-6}, + }, + [113] = { + {9999,2.5}, + {678,0}, + {294,-1}, + {130,-6}, + }, + [114] = { + {9999,3}, + {540,0}, + {150,-7}, + }, + [115] = { + {9999,2.5}, + {1470,0}, + {1400,-4}, + {1288,0}, + {1207,2.5}, + {1101,3}, + {940,0}, + {896,-5}, + {761,0}, + {180,-6}, + }, + [116] = { + {9999,3}, + {1190,0}, + {684,-5}, + {560,0}, + {140,-6}, + }, + [117] = { + {9999,3}, + {1482,0}, + {974,-5}, + {866,0}, + {140,-6}, + }, + [118] = { + {9999,3}, + {1780,0}, + {1750,-2}, + {1621,0}, + {1490,-4}, + {1273,0}, + {844,-4}, + {637,0}, + {557,-4}, + {416,0}, + {204,2.5}, + {165,0}, + {90,-6}, + }, + [119] = { + {9999,2.5}, + {1650,0}, + {1148,2.5}, + {894,0}, + {630,-5}, + {498,0}, + {380,-2}, + {288,0}, + {222,-6}, + }, + [120] = { + {9999,2.5}, + {1659,0}, + {1489,-5}, + {1405,0}, + {677,-1}, + {442,0}, + {158,-1}, + {80,-2}, + {75,-1}, + {65,-2}, + {60,-1}, + {55,-2}, + {50,-1}, + }, + [121] = { + {9999,0}, + {3040,2.5}, + {2946,3}, + {2703,0}, + {1994,3}, + {1787,0}, + {1440,-5}, + {1311,0}, + {1074,-1}, + {1008,-2}, + {935,0}, + {145,-6}, + }, + [122] = { + {9999,2.5}, + {2054,3}, + {1840,0}, + {1567,-5}, + {1370,0}, + {1154,-5}, + {870,0}, + {634,-5}, + {370,-0}, + {147,-6}, + }, + [123] = { + {9999,3}, + {2855,0}, + {2684,-1}, + {2532,0}, + {1793,-5}, + {1548,0}, + {757,-1}, + {652,0}, + {137,-6}, + } + }, + { + [111] = { + {9999,2.5}, + {1651,3}, + {1464,0}, + {1260,2.5}, + {1232,2.5}, + {893,0}, + {847,2.5}, + {712,0}, + {491,-4}, + {288,0}, + {216,2.5}, + {156,0}, + {170,-6}, + }, + [110] = { + {9999,2.5}, + {805,3}, + {770,0}, + {150,-6}, + }, + [109] = { + {9999,3}, + {1043,0}, + {419,2.5}, + {353,3}, + {224,0}, + {176,-6}, + }, + [108] = { + {9999,2.5}, + {1433,0}, + {1345,-1}, + {1339,-2}, + {1167,-1}, + {1075,0}, + {817,-1}, + {650,0}, + {167,-6}, + }, + } + } + if (Metrostroi.TrainPositions[self.Train] and Metrostroi.TrainPositions[self.Train][1]) then + self.PathID = Metrostroi.TrainPositions[self.Train][1].path.id + end + if not self.Commands[self.PathID] or not self.Commands[self.PathID][self.Train.UPO.Station] then return 2 end + if self.Train:ReadCell(49165) < 20 and not self.OnStation then return 2 end + local max-- = self.Train:ReadCell(49165) + local pos = 0 + for k,v in ipairs(self.Commands[self.PathID][self.Train.UPO.Station]) do + if v[1] > self.Train:ReadCell(49165) then + max = v[1] + pos = v[2] + end + end + local speedLimit = 0--(self.Train.ALS_ARS.Signal0 or self.Train.ALS_ARS.RealNoFreq) and 0 or self.Train.ALS_ARS.Signal40 and 40 or self.Train.ALS_ARS.Signal60 and 60 or self.Train.ALS_ARS.Signal70 and 70 or self.Train.ALS_ARS.Signal80 and 80 or 0 + if self.Train.ALS_ARS.AVSpeedLimit and self.Train.ALS_ARS.AVSpeedLimit > 20 then + speedLimit = self.Train.ALS_ARS.AVSpeedLimit + end + --if self.Train.Speed > speedLimit-1 and pos > 0 then pos = 0 end + local RKPosition = math.floor(self.Train.RheostatController.Position+0.5) + local PP = math.floor(self.Train.PositionSwitch.Position + 0.5) == 2 + if pos == 2.5 then + return (not PP or RKPosition >= 7) and 3 or 1 + elseif pos > -4 then + return pos + elseif pos == -4 then + return not self.Train:GetPackedBool(35) and RKPosition < 7 and -3 or -1 + elseif pos == -5 then + return self.Train.Speed > speedLimit-5 and -2 or -1 + elseif pos == -6 or pos == -7 then + self.OnStation = true + local S = self.Train.UPO.Distance + local RK = self:GetStationRK(S,pos == -7) + + if (RK >= 18 and self.Train.ALS_ARS.Speed < 0.1 and not self.StartMoving and self.OnStation) then + self.Train.UPO.StationAutodrive = false + --self.VUDOverride = true + + --local self.Train.UPO.Station = self.Train:ReadCell(49160) > 0 and self.Train:ReadCell(49160) or self.Train:ReadCell(49161) + if self.Train.UPO.Station == 0 then self.AutodriveReset = true return end + --local StatID = Metrostroi.WorkingStations[self.Train.UPO.Station] or Metrostroi.WorkingStations[self.Train.UPO.Station + (self.Path == 1 and 1 or -1)] or 0 + if not StationBraking then + local Curr = Metrostroi.AnnouncerData[self.Train.UPO.Station] + if Curr[2] then + self.Train:WriteCell(32,1) + else + self.Train:WriteCell(31,1) + end + timer.Simple(0.1,function() + if not IsValid(self.Train) then return end + self.Train:WriteCell(32,0) + self.Train:WriteCell(31,0) + end) + self.Train.ADoorDisable:TriggerInput("Set",1) + end + self.AutodriveReset = true + self.KVPos = 0 + end + return (not self.Train:GetPackedBool(35) and (RK > RKPosition or RK >= 18)) and (RK == 19 and -4 or-3) or -1 + end +end +function TRAIN_SYSTEM:BoardAutodrive() + local Train= self.Train + + -- Calculate distance to station + local dX = self.Train.UPO.Distance + if dX > 160 then self.StartMoving = nil end + local OnStation = dX < 160 and not self.StartMoving and Metrostroi.AnnouncerData[self.Train.UPO.Station]and Metrostroi.AnnouncerData[self.Train.UPO.Station][1] + --if StationBraking and (dX >= (160+35*self.MU - (speedLimit == 40 and 30 or 0)) or not OnStation) then self.Train.UPO.StationAutodrive = false return end + -- Target and real RK position (0 if not braking) + local TargetBrakeRKPosition = 0 + + local Command = self:GetCurrentCommand() + local KVPos = Command + local VZP = self.Train.KSAUP and self.Train.VZP.Value > 0.5 + local Vn2 = KVPos == -4 + if VZP and KVPos > 0 then + KVPos = 0 + elseif ElectricBrakeActive then + if (RheostatBrakeRotating or RKPosition == 18 and not OnStation) and not Train:GetPackedBool(35) then + KVPos = -3 + else + KVPos = -1 + end + elseif AcceleratingActive then + if Train.ALS_ARS.Speed > 30 and RheostatAccelRotating and not Train:GetPackedBool(35) then + KVPos = 3 + elseif RheostatAccelRotating and not Train:GetPackedBool(35) then + KVPos = 2 + else + KVPos = 1 + end + end + if Vn2 then KVPos = 0 end + if OnStation then + self.Train.R25p:TriggerInput("Set",self.OldRheostatBrakeRotating ~= RheostatBrakeRotating) + self.OldRheostatBrakeRotating = RheostatBrakeRotating + end + --Train:WriteCell(29, PneumaticValve1 and 1 or 0) -- Engage PN1 + Train:TriggerInput("KVControllerAutodriveSet",KVPos) + --Train:WriteCell(25,(ElectricBrakeActive and self.TargetBrakeRKPosition > 17) and 1 or 0) -- Engage power circuits + self.Brake = ElectricBrakeActive + self.Accelerate = AcceleratingActive + self.KVPos = KVPos + self.Rotating = RheostatBrakeRotating and true or RheostatAccelRotating and false or nil +end + +function TRAIN_SYSTEM:Enable() + if not self.AutodriveEnabled and not self.AutodriveReset then + self.AutodriveEnabled = true + self.StartMoving = true + end +end +function TRAIN_SYSTEM:Disable() + self.AutodriveReset = true +end +function TRAIN_SYSTEM:Think() + self.TrainCorrections = { + ["Em"] = 0, + ["717"] = 0, + } + local S = self.Train.UPO.Distance + self.Time = self.Time or CurTime() + if (CurTime() - self.Time) > 0.1 and self.Train.A29 and self.Train.A29.Value < 0.5 then + self.Time = CurTime() + --RunConsoleCommand("say",Format("station:%.2f,%.2f\t distance:%.2f",self.Train.UPO.Station,self.Train:ReadCell(49165),S)) + end + if self.Train.KSAUP then return end + if self.Train.VZP then + if self.Train.BCCD and self.Train.BCCD.Value > 0 and self.Train.ADoorDisable.Value > 0 then + self.Train.ADoorDisable:TriggerInput("Set",0) + self.OnStation = false + self.AutodriveEnabled = false + self.ReadyToStart = true + end + --[[if Train:CPPIGetOwner() and Train:CPPIGetOwner():GetName() ~= "glebqip(RUS)" and (self.AutodriveEnabled or not self.AutodriveReset) then + self.AutodriveReset = true + else]] + + if self.AutodriveReset then + self.Train:TriggerInput("KVControllerAutodriveSet",0) + self.NoAcceleration = nil + self.Train:WriteCell(8,0) + self.Train:WriteCell(29,0) + self.AutodriveEnabled = false + self.OnStation = false + end + + if (self.Train.VZP.Value < 0.5 or (self.Train.Blok and self.Train.Blok == 4)) and self.AutodriveReset then + self.AutodriveReset = false + end + --Disable autodrive, if KV pos is not zero, ARS or ALS not enabled, Reverser position is not forward or Driver value pos is > 2 + if self.Train.Blok and self.Train.Blok ~= 1 then + if (self.Train.Pneumatic.BrakeLinePressure < 4.8 or self.Train.Pneumatic.BrakeCylinderPressure > 1.8) and not self.BCTimer then + self.BCTimer = CurTime()+3 + end + if self.Train.Pneumatic.BrakeLinePressure >= 4.8 and self.Train.Pneumatic.BrakeCylinderPressure <= 1.8 then + self.BCTimer = nil + end + if self.BCTimer and CurTime() - self.BCTimer > 0 then + self:Disable() + end + if self.Train.KV.ControllerPosition ~= 0.0 or not self.Train.ALS_ARS.EnableARS or self.Train.KV.ReverserPosition ~= 1.0 or self.Train.Panel.SD < 0.5 then + self:Disable() + end + if self.Train.ALS_ARS["33G"] > 0.5 then + self:Disable() + end + end + --if self.OnStation and self.Train.UPO.StationAutodrive and self.AutodriveWorking and not self.VRD and self.Train.ALS_ARS.EnableARS and self.Train.KV.ReverserPosition == 1.0 and self.Train.Pneumatic.DriverValvePosition <= 2 and self.self.Train.Panel.SD > 0.5 then + --self:Autodrive(true) + --elseif self.Train.UPO.StationAutodrive then + --self.Train.UPO.StationAutodrive = false + --end + if self.AutodriveEnabled then + if self.Train.Blok ~= 1 and not self.KSAUP then + self:Autodrive() + else + self:BoardAutodrive() + end + end + if self.ReadyToStart and self.Train.Panel["SD"] > 0.5 then + self.ReadyToStart = nil + self.AutodriveReset = false + end + if self.Blocks == 2 and self["PA-KSD"].StationAutodrive then + self:Autodrive(true) + end + --end + end + if self.RealControllerPosition ~= self.Train.KV.RealControllerPosition and self.Train.Blok == 1 and self.Train.A5 and self.Train.A5.Value > 0.5 then + local dX = self.Train.UPO.Distance + --RunConsoleCommand("say",self.Train.KV.RealControllerPosition,dX,self.Train.UPO.Station,(Metrostroi.TrainPositions[self.Train] and Metrostroi.TrainPositions[self.Train][1]) and Metrostroi.TrainPositions[self.Train][1].path.id or "unk",math.floor(self.Train.RheostatController.Position+0.5)) + --file.Append("puav.txt",Format("%d\t%s\t%d\t%s\t%d\n",self.Train.KV.RealControllerPosition,dX,self.Train.UPO.Station,(Metrostroi.TrainPositions[self.Train] and Metrostroi.TrainPositions[self.Train][1]) and Metrostroi.TrainPositions[self.Train][1].path.id or "unk",math.floor(self.Train.RheostatController.Position+0.5))) + self.RealControllerPosition = self.Train.KV.RealControllerPosition + end + --self:GetCurrentCommand() +end diff --git a/lua/metrostroi/systems/_obsolete/sys_bars.lua b/lua/metrostroi/systems/_obsolete/sys_bars.lua new file mode 100644 index 0000000..679f0f0 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_bars.lua @@ -0,0 +1,568 @@ +-------------------------------------------------------------------------------- +-- ÐРС-ÐЛС +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("BARS") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("RC2","Relay","Switch", {bass = true,normally_closed = true }) + self.Train:LoadSystem("VAU","Relay","Switch",{ bass = true,normally_closed = true }) + self.Train:LoadSystem("VRD","Relay","Switch",{ bass = true }) + + self.Train:LoadSystem("ALSCoil") + + -- Internal state + self.Speed = 0 + self.SpeedLimit = 0 + self.NextLimit = 0 + self.Ring = false + self.Overspeed = false + self.ElectricBrake = false + self.PneumaticBrake1 = false + self.PneumaticBrake2 = true + self.AttentionPedal = false + + self.KVT = false + + self["33D"] = 1 + self["33Zh"] = 1 + self["33G"] = 0 + self["2"] = 0 + self["20"] = 0 + self["29"] = 0 + self["8"] = 0 + self["31"] = 0 + self["32"] = 0 + -- Lamps + self.LKT = false + --self.EPK = {} +end + +function TRAIN_SYSTEM:Outputs() + return { + "2", "8", "20", "29", "33D", "33G", "33Zh", "31", "32", + "NoFreq","F1","F2","F3","F4","F5","F6","LN" + } +end + +function TRAIN_SYSTEM:Inputs() + return { "IgnoreThisARS","AttentionPedal","Ring", "PA-Ring" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + local Train = self.Train + if name == "AttentionPedal" then + self.AttentionPedal = value > 0.5 + if Train and Train.PB then + Train.PB:TriggerInput("Set",value) + end + end + if name == "Ring" then + self.ARSRingOverride = value > 0.5 + end + --[[if name == "PA-Ring" then + self.PA_Ring= value > 0.5 + end]] +end + +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local PUAV = Train.Blok == 1 + if PUAV then return end + local ALS = Train.ALSCoil + local speed = math.Round(ALS.Speed or 0,1) + + + local power = Train.VB.Value > 0 + -- ALS, ARS state + local KRUEnabled = Train.KRU and Train.KRU["14/1-B3"] > 0 + local RVForward = power and (Train.KV["D4-15"] > 0 or KRUEnabled) + local EnableARS = power and RVForward and Train.A42.Value > 0 and Train.ARS.Value > 0 + local EnableALS = power and Train.A43.Value > 0 and Train.ALS.Value > 0 + + if RVForward and EnableALS ~= (ALS.Enabled==1) then + ALS:TriggerInput("Enable",RVForward and EnableALS and 1 or 0) + end + + local PAKSDM = Train.Blok == 4 + local PAKSD = Train.Blok == 2 + local PAM = Train.Blok == 3 + local KSDType = Train.Blok == 4 and "PA-KSD-M" or Train.Blok == 2 and "PA-KSD" or "PA-M" + --if self.Train.ARSType == 3 and self.Train:EntIndex() ~= 3472 then self.Train.ARSType = 1 end + --[[ + if not OverrideState then + if PAKSD then + EnableARS = EnableARS and (self.Train[KSDType].State > 4 and self.Train[KSDType].State ~= 45 and self.Train[KSDType].State ~= 49) and self.Train.RC1.Value > 0.5 + EnableALS = EnableALS and Train[KSDType].VPA and (self.Train[KSDType].State > 0 or self.Train[KSDType].State == -1 or self.Train[KSDType].State == -9) + elseif PAKSDM then + EnableARS = EnableARS and (self.Train[KSDType].State > 7 or ((self.Train[KSDType].State == 1.1 or self.Train[KSDType].State == 1) and self.Train[KSDType].NextState > 8)) and self.Train.RC1.Value > 0.5 + EnableALS = EnableALS and (self.Train[KSDType].State > 2 or ((self.Train[KSDType].State == 1.1 or self.Train[KSDType].State == 1) and self.Train[KSDType].NextState > 3)) + else + EnableARS = EnableARS and Train.ARS.Value == 1 + EnableALS = EnableALS and Train.ALS.Value == 1 + end + EnableUOS = false--Train[KSDType].UOS--EnableUOS and Train[KSDType].UOS + end]] + self.EnableARS = EnableARS + self.EnableALS = EnableALS + --[[local EPKActivated + if (PAKSD or PAKSDM) then + EPKActivated = EnableARS + else + EPKActivated = Train.EPK.Value > 0.5 and (Train.Pneumatic.ValveType == 2 and Train.DriverValveDisconnect.Value > 0.5 or Train.DriverValveBLDisconnect.Value > 0.5) + end + if not self.EPKActivated and EPKActivated then + self.EPKActivated = EPKActivated + end + if EPKActivated and self.EPKActTimer then + self.EPKActTimer = nil + end + if not EPKActivated and self.EPKActivated and not (PAKSD or PAKSDM) and not self.EPKActTimer then + self.EPKActTimer = CurTime() + 3 + end + if not EPKActivated and self.EPKActivated and (PAKSD or PAKSDM) then + self.EPKActivated = false + --self.EPKBrake = false + for k in pairs(self.EPK) do + self.EPK[k] = nil + end + end + if self.EPKActTimer and CurTime() - self.EPKActTimer > 0 then + self.EPKActivated = false + --self.EPKBrake = false + for k in pairs(self.EPK) do + self.EPK[k] = nil + end + end]] + + -- Pedallocal PB = Train.PB.Value > 0 + if PB and not self.AttentionPedalTimer and not self.Overspeed then + self.AttentionPedalTimer = CurTime() + 1 + end + + if PB and self.AttentionPedalTimer and (CurTime() - self.AttentionPedalTimer) > 0 then + self.AttentionPedal = true + end + if not PB and (self.AttentionPedalTimer or self.AttentionPedal) then + self.AttentionPedal = false + self.AttentionPedalTimer = nil + end + if PB or (Train.KVT) and Train.KVT.Value > 0.5 then self.KVT = true end + if not PB and (Train.KVT) and Train.KVT.Value < 0.5 then self.KVT = false end + + -- Ignore pedal + if self.IgnorePedal and self.KVT then + self.KVT = false + else + self.IgnorePedal = false + end + + self.NoFreq = ALS.NoFreq + self.F1 = ALS.F1*(1-self.NoFreq) + self.F2 = ALS.F2*(1-self.NoFreq) + self.F3 = ALS.F3*(1-self.NoFreq) + self.F4 = ALS.F4*(1-self.NoFreq) + self.F5 = ALS.F5*(1-self.NoFreq) + self.F6 = ALS.F6*(1-self.NoFreq) + self.RealF5 = self.F5*(1-(self.F4+self.F3+self.F2+self.F1)) + self.NoFreq = self.NoFreq + (1-math.min(1,self.F5+self.F4+self.F3+self.F2+self.F1)) + + + -- ARS system placeholder logic + if EnableALS --[[or EnableUOS]] then + if (ALS.F1+ALS.F2+ALS.F3+ALS.F4+ALS.F5+ALS.F6+self.NoFreq) == 0 then self.NoFreq = 1 end + local V = math.floor(self.Speed +0.05) + local Vlimit = 0 + if self.F4 > 0 then Vlimit = 40 end + if self.F3 > 0 then Vlimit = 60 end + if self.F2 > 0 then Vlimit = 70 end + if self.F1 > 0 then Vlimit = 80 end + + self.Overspeed = false--[[ + if (PAKSD or PAM or PAKSDM) and self.Train[KSDType].VRD and not self.Signal0 and not self.RealNoFreq then + self.Train[KSDType].VRD = false + end + if self.AttentionPedal then + Vlimit = 0 + end]] + + --if ( self.KVT) and (Vlimit == 0) and self.Train.ARSType and self.Train.ARSType == 3 and not self.Train[KSDType].VRD then self.Overspeed = true end + --self.Ring = self.Overspeed and (self.Speed > 5) + + -- Determine next limit and current limit + self.SpeedLimit = Vlimit + else + local V = math.floor(self.Speed +0.05) + self.SpeedLimit = 0 + self.NextLimit = 0 + end + ------------------ + if self.SpeedLimit > 20 then self.SpeedLimit = self.SpeedLimit - 2 end + if EnableARS then + local SpeedLimit = self.SpeedLimit + if self.ElectricBrake1 and self.ARSBrake and not (self.RealNoFreq and not self.KVT and not self.ARSBrake) then + if self.ARSBrakeTimer == nil then self.ARSBrakeTimer = CurTime() + 5 end + else + self.ARSBrakeTimer = nil + end + + if self.RealNoFreq and (not self.PrevNoFreq) then + self.IgnorePedal = true + end + self.PrevNoFreq = self.RealNoFreq + -- Check overspeed + --if self.Train.Owner:GetName():find("E11") then self.SpeedLimit = 25 end + if SpeedLimit > 20 then + --[[if (PAM or PAKSDM) and self.Train.YAR_13A.Slope == 0 and self.Speed >= self.SpeedLimit and not self.ARSBrake then + self.ElectricBrake1 = true + end]] + if self.Speed >= SpeedLimit + 1 then + if Train:ReadTrainWire(6) == 0 then + self.ElectricBrake = true + --self.PneumaticBrake1 = true + end + self.ElectricBrake1 = true + self.ARSBrake = true + end + end + if self.ElectricBrake then + self.PneumaticBrake1 = self.Train.Electric.I24 > -50 + --print(self.PneumaticBrake1) + end + if self.Overspeed then + self.ARSBrake = true + self.ElectricBrake1 = true + self.ElectricBrake = true + --self.PneumaticBrake1 = true + end + -- Check cancel of overspeed command + if not self.Overspeed and not self.ElectricBrake1 and self.ARSBrake then + self.PneumaticBrake1 = false + + end + if (self.KVT or not self.ARSBrakeTimer) and (self.Speed < self.SpeedLimit - 1 and self.SpeedLimit > 20 or self.SpeedLimit < 20 and not self.Overspeed) and (self.ElectricBrake or self.ARSBrake) then + self.ElectricBrake = false + self.ElectricBrake1 = false + self.ARSBrake = false + self.PneumaticBrake1 = false + self.PneumaticBrake2 = false + end + if self.Speed < self.SpeedLimit - 1 and (self.ARSBrake or self.ElectricBrake1) and not self.ElectricBrake then + self.ARSBrake = false + self.ElectricBrake1 = false + end + --print(Train:GetPackedBool(131)) + -- Check use of valve #1 during overspeed + if self.ARSBrake and self.ElectricBrake1 and self.Speed < 0.25 then + self.PneumaticBrake2 = true + end + if (self.Signal0 or self.Special) then + if not self.ZeroTimer then + self.ZeroTimer = CurTime()+30 + self.ZeroTimerState = true + end + if self.ZeroTimerState and self.ZeroTimer and CurTime()-self.ZeroTimer > 7.5 and self.Speed < 0.25 then + self.ZeroTimerState = false + self.ZeroTimer = CurTime()+30 + end + elseif self.ZeroTimer ~= nil then + self.ZeroTimer = nil + end + if self.Speed < 1.25 then + self.PneumaticBrake1 = true + end + -- Parking brake limit + local BPSWorking = Train:ReadTrainWire(5) > 0 and (not (PAKSD or PAM or PAKSDM) or not Train[KSDType].Nakat) + if BPSWorking then + if self.Nakat ~= nil then + self.PneumaticBrake1 = true + self.AntiRolling = self.Nakat and true or nil + self.Nakat = nil + end + if self.Speed*Train.SpeedSign < -0.5 then + if not self.Meters then self.Meters = 0 end + self.Meters = self.Meters + self.Speed/3600*1000*dT + if self.Meters > 0.5 + (Train:ReadTrainWire(1) > 0 and 2.5 or 0) then + self.AntiRolling = true + end + else + if Train.KV.ControllerPosition <= 0 and self.AntiRolling then + self.AntiRolling = false + end + if Train.KV.ControllerPosition > 0 and self.AntiRolling == false then + self.AntiRolling = nil + end + self.Meters = nil + end + else + self.AntiRolling = nil + if (PAKSD or PAM or PAKSDM) and Train[KSDType].Nakat then self.PneumaticBrake1 = false end + end + --if BPSWorking and self.EPKActivated and not Train[KSDType].Stancionniy and Train:ReadTrainWire(5) > 0 and self.Speed*self.Train.SpeedSign < -5 and not self.EPKBrake then + --self.EPKBrake = true + --RunConsoleCommand("say","EPV braking (Driver rolling back)",Train:GetDriverName()) + --end + + --BPS Logic + if not BPSWorking then + self.StoppedOnSlopeByRP = false + self.BPSActive = false + end + --if (Train.BPS == nil or Train.BPS.Value < 0.5) then self.AntiRolling = nil end + -- Check cancel pneumatic brake 1 command + if ((Train:ReadTrainWire(1) > 0) or (Train.RRP and Train.RRP.Value > 0 and not self.ElectricBrake1)) then + if (Train:ReadTrainWire(1) > 0 or (Train.RRP and Train.RRP.Value > 0 and not self.ElectricBrake1)) and self.PneumaticBrake1 and not self.Overspeed then + self.PneumaticBrake1 = false + end + end + if self.Signal0 and not self.Special and not self.RealNoFreq and not self.Signal40 and not self.Signal60 and not self.Signal70 and not self.Signal80 then + if not self.ReadyPeep then self.ReadyPeep = true end + if not self.NonVRD and (not Train[KSDType].VRD and (PAKSD or PAKSDM) or self.Train.VRD.Value < 0.5 and (PAM or PUAV)) then + self.VRDTimer = nil + end + + self.NonVRD = (PAKSD or PAKSDM) and not Train[KSDType].VRD or (PAM or PUAV) and self.Train.VRD.Value < 0.5 + if self.NonVRD and self.Train:ReadTrainWire(6) < 0 then + if self.VRDTimer and CurTime() - self.VRDTimer > 0 then + self.VRDTimer = false + elseif self.VRDTimer ~= false then + if not self.VRDTimer and self.KVT then self.VRDTimer = CurTime() + 1 end + if self.VRDTimer and not self.KVT then self.VRDTimer = nil end + end + elseif self.Train:ReadTrainWire(6) > 0 then + self.VRDTimer = false + else + self.VRDTimer = false + end + else + if self.ReadyPeep then + self.ReadyPeep = nil + self.PeepTimer = CurTime() + 0.1 + end + if self.PeepTimer and self.PeepTimer - CurTime() < 0 then + self.PeepTimer = nil + end + -- self.PeepTimer = nil + --if self.ReadyPeep == nil then + --self.ReadyPeep = true + --end + if self.NonVRD then self.NonVRD = false end + self.VRDTimer = false + end + local VRDoff = (PAKSD or PAKSDM ) and 0 or 1 + if (self.Train:ReadTrainWire(15) < 1.0) and (self.Speed < 1.0) and not Train[KSDType].KD and (PAKSD or PAM or PAKSDM) then + self.KD = true + elseif (PAKSD or PAM or PAKSDM) and Train[KSDType].AutodriveWorking and not self.Train.Autodrive.AutodriveEnabled then + self.KD = true + elseif Train[KSDType].KD or self.Train:ReadTrainWire(15) > 0.0 and (PAKSD or PAM or PAKSDM) then + self.KD = false + end + -- ARS signals + local Ebrake, Abrake, NFBrake, Pbrake1,Pbrake2 = + ((self.ElectricBrake) and 1 or 0), + ((self.ARSBrake) and 1 or 0), + ((self.SpeedLimit < 20 and not self.KVT and not self.ARSBrake) and 1 or 0), + (self.PneumaticBrake1 and 1 or 0), + (self.PneumaticBrake2 and 1 or 0) + local VRDBrake = self.NonVRD or self.VRDTimer ~= false + + -- Apply ARS system commands + self["33D"] = (1 - Abrake) *(1-NFBrake)*((self.KD or self.ElectricBrake1 or VRDBrake or self.AntiRolling ~= nil or Train[KSDType].StopTrain) and 0 or 1) --*(2 - Pbrake2) + self["33G"] = Ebrake + NFBrake*VRDoff + ((VRDBrake) and 1 or 0)*VRDoff + self["33Zh"] = (1 - Abrake)*(1-NFBrake*VRDoff)*((self.KD or VRDBrake or self.ElectricBrake1 or self.AntiRolling ~= nil or Train[KSDType].StopTrain) and 0 or 1)--*(2 - Pbrake2) + --print(self["33Zh"]) + self["2"] = Ebrake + NFBrake*VRDoff + ((VRDBrake) and 1 or 0)*VRDoff + self["20"] = Ebrake + NFBrake*VRDoff + ((VRDBrake) and 1 or 0)*VRDoff + self["29"] = Pbrake1-- + (self.BPSActive and 1 or 0) + --if GetConVarNumber("metrostroi_ars_printnext") == Train:EntIndex() then print(self.SpeedLimit,self.self.SpeedLimit <= 20 and not self.KVT) end + --if StPetersburg then print(self.Train:EntIndex()) end + self["8"] = Pbrake2 + + (KRUEnabled and 1 or 0)*Ebrake + + ((self.SpeedLimit < 20 and not self.KVT and VRDBrake == 0 or self.Speed > 20 and self.SpeedLimit < 20) and 1 or 0) + + (self.BPSActive and 1 or 0) + + (self.AntiRolling ~= nil and 1 or 0) + + (1 - ((self.EPKActivated and 1 or 0) or 1) + + (Train[KSDType].StopTrain and 1 or 0)) + + ---self.LKT = (self["33G"] > 0.5) or (self["29"] > 0.5) or (Train:ReadTrainWire(35) > 0) + self.LVD = self.LVD or self["33D"] < 0.5 + if Train:ReadTrainWire(6) < 1 and self["33D"] > 0.5 then self.LVD = false end + self.Ring = ((self["33D"] < 0.5 and ((NFBrake < 1 and self.ARSBrakeTimer ~= nil and self.ARSBrakeTimer ~= false) or self.VRDTimer ~= false)) or self.KSZD or (self.PeepTimer and self.PeepTimer-CurTime() > 0)) or math.max(20,self.SpeedLimit-1) < self.Speed and (PAKSDM or PAM) + --self.ZeroTimer = nil + if Train.PUAV.ZeroTimer then + local timer = (CurTime()-Train.PUAV.ZeroTimer) + if timer >= 0 and timer < 3.5 then + self.Ring = true + elseif timer >= 3.5 and timer < 3.5+4 and timer%1 < 0.5 then + self.Ring = true + end + end + if self.ElectricBrake or self.PneumaticBrake2 then + if not self.LKT then + self:EPVBrake("LKT not light-up when ARS stopping") + else + self:EPVDisableBrake("LKT not light-up when ARS stopping") + end + else + self:EPVDisableBrake("LKT not light-up when ARS stopping") + end + if self.KVT and self.ARSBrakeTimer then self.ARSBrakeTimer = false end + if self.EPKActivated and not self.LKT and self.Speed < 0.05 and Train:ReadTrainWire(1) == 0 and (not (PAKSD or PAM or PAKSDM) or not Train[KSDType].Nakat) then -- or (self.AntiRolling ~= nil and Train:ReadTrainWire(1) > 0) then + self:EPVBrake("LKT off when stopped") + else + self:EPVDisableBrake("LKT off when stopped") + end + else + self.AntiRolling = nil + self.ElectricBrake1 = true + self.ElectricBrake = true + self.PneumaticBrake1 = false + self.PneumaticBrake2 = true + self.ARSBrake = true + self.ZeroTimer = nil + self["33D"] = 0 + self["33Zh"] = 1 + self["8"] = KRUEnabled and (1-Train.RPB.Value) or 0 + self["33G"] = 0 + self["2"] = 0 + self["20"] = 0 + self["29"] = 0 + + ---self.LKT = false + self.LVD = false + self.Ring = false + end + -- ARS signalling train wires + if EnableARS then + self.Train:WriteTrainWire(21,self.LVD and 1 or 0)-----self.LKT and 1 or 0) + else--if not EnableUOS then + self.Train:WriteTrainWire(21,0) + end + -- RC1 operation + if self.Train.RC1 and (self.Train.RC1.Value == 0) then + if PAKSD or PAKSDM and not Train[KSDType].UOS then + Train[KSDType].UOS = true + end + --self["33D"] = self.Speed > 55 and 0 or 1 + self["33G"] = 0 + self["33Zh"] = 1 + -- + self["2"] = 0 + self["20"] = 0 + self["29"] = 0 + -- + self["31"] = 0 + self["32"] = 0 + --self["8"] = KRUEnabled and (1-Train.RPB.Value) or 0 + self["33D"] = (self.Speed + 0.5 > 9000 and ((not PAKSD and not PAKSDM) or Train[KSDType].State > 0)) and 0 or 1 + --self["33G"] = (self.Speed + 0.5 > 35) and 1 or KRUEnabled and (1-Train.RPB.Value) or 0 + --self["33Zh"] = 1--(self.Speed + 0.5 > 40) and 0 or KAH + self["8"] = (self.Speed + 0.5 > 9000 and ((not PAKSD and not PAKSDM) or Train[KSDType].State > 0)) and 1 or KRUEnabled and (1-Train.RPB.Value) or 0 + else + if (not self.EPKActivated) then + self["33D"] = 0 + self["33Zh"] = 1 + end + end + + if Train.RV_2 then + Train.RV_2:TriggerInput("Set",EnableARS and 1 or 0) + end + + if self.EPKActivated then + --if self.EPKOffARS then + --self:EPVBrake("Was the emergency brake",true) + --end + --self.EPKOffARS = nil + --if self.EPKTimer then print(self.EPKTimer - CurTime(),self.EPKTimer < CurTime(),self.EPKTimer > CurTime() ) end + if not EnableARS then + self:EPVBrake("ARS disabled") + else + self:EPVDisableBrake("ARS disabled") + end + if self.ARSBrakeTimer then + self:EPVBrake("Braking 3 seconds") + else + self:EPVDisableBrake("Braking 3 seconds") + end + if (PAKSD or PAKSDM) and self.KVT and not self.EPKOffTimer and self.EPKBrake then + self.EPKOffTimer = CurTime() + 1 + --self.EPKBrake = false + end + if self.EPKOffTimer and not self.KVT then + self.EPKOffTimer = nil + self.EPKBrake = true + end + if self.EPKOffTimer and CurTime()-self.EPKOffTimer > 0 then + self.EPKOffTimer = nil + self.EPKBrake = false + end + else + --self.EPKOffTimer = nil + --[[if EnableARS and self.EPKOffARS == nil then + self.EPKOffARS = true + else + self.EPKOffARS = false + end]] + --if self.EPKOffARS then + --self.EPKOffARS = false + --end + if not EnableARS then + self.EPKBrake = false + end + end + --if not EPKActivated then + --if EnableARS and self.EPKOffARS == nil then + --print(self.EPKBrake) + --self.EPKOffARS = self.EPKBrake + --end + --end + --if GetConVarNumber("metrostroi_ars_printnext") == Train:EntIndex() then print(self.EPKOffARS,EnableARS) end + if not EnableARS then self.EPKOffARS = false end + -- 81-717 autodrive/autostop + if (Train.Pneumatic and Train.Pneumatic.EmergencyValve) or self.UAVAContacts then + self["33D"] = 0 + self["33Zh"] = 1 + end + + -- 81-717 special VZ1 button + if self.Train.VZ1 then + self["29"] = self["29"] + self.Train.VZ1.Value + end + if Train.UAVAContact and Train.UAVAContact.Value > 0.5 and not Train.Pneumatic.EmergencyValve then + self.UAVAContacts = nil + end + self["8"] = self["8"]*(self.Train.A41 and self.Train.A41.Value or 1)*(self.Train.A8 and self.Train.A8.Value or 1) + self.Train.OVT.Value + self["29"] = self["29"]*(self.Train.A8 and self.Train.A8.Value or 1) + self.Ring = self.Ring or (self.Alert and self.Alert - CurTime() > 0) + if Train.Rp8 then Train.Rp8:TriggerInput("Set",self["8"] + ((self.Train.RC1 and (self.Train.RC1.Value == 0)) and (1-self["33D"]) or 0)) end + self.Ring = self.PA_Ring or self.ARSRingOverride or self.Ring + self.Ring = self.Ring or (PUAV and self.Train.PUAV.RingArmed and true) + --[[ + if PAKSD and Train["PA-KSD"].State == 5 then + self["33D"] = 1 + self["33Zh"] = 1 + self["33G"] = 0 + self["2"] = 0 + self["20"] = 0 + self["29"] = 0 + self["8"] = 0 + end + if (PAM or PAKSDM) and Train["PA-M"].State == 8 then + self["33D"] = 1 + self["33Zh"] = 1 + self["33G"] = 0 + self["2"] = 0 + self["20"] = 0 + self["29"] = 0 + self["8"] = 0 + end + ]] + for k,v in pairs(self.EPK) do + if CurTime() - v > 0 and not self.EPKBrake and (not self.KVT or not (PAKSD or PAKSDM)) then + self.EPKBrake = true + RunConsoleCommand("say","EPV braking ("..k..")",self.Train:GetDriverName()) + end + end + Train.Pneumatic.EmergencyValveEPK = self.EPKBrake and not self.EPKOffTimer and not self.EPKActTimer +end diff --git a/lua/metrostroi/systems/_obsolete/sys_bars_717.lua b/lua/metrostroi/systems/_obsolete/sys_bars_717.lua new file mode 100644 index 0000000..04aaebc --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_bars_717.lua @@ -0,0 +1,324 @@ +-------------------------------------------------------------------------------- +-- БÐРС +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("ARS_BARS_717") +TRAIN_SYSTEM.DontAccelerateSimulation = false + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("VRD","Relay","Switch",{ bass = true }) + + self.Train:LoadSystem("ALSCoil") + --self.Train:LoadSystem("ALSCoil","ALSTest") + + self.Train:LoadSystem("ROT1","Relay") + self.Train:LoadSystem("ROT2","Relay") + self.Train:LoadSystem("EK","Relay") + self.Train:LoadSystem("EK1","Relay",{close_time = 3}) + self.Train:LoadSystem("EPKC","Relay") + + -- Internal state + self.Speed = 0 + self.SpeedLimit = 0 + self.ARSRing = false + self.Overspeed = false + self.ElectricBrake = false + self.PneumaticBrake1 = false + self.PneumaticBrake2 = true + self.AttentionPedal = false + + self.KRT = 0 + self.KRH = 0 + self.K25 = 0 + self.KVT = false + self.LN = 0 + self.Freq = 0 + self.NoFreq = 0 + self.F1 = 0 + self.F2 = 0 + self.F3 = 0 + self.F4 = 0 + self.F5 = 0 + self.F6 = 0 + self.RealF5 = 0 + + -- ARS wires + self["33D"] = 0 + self["33G"] = 0 + self["2"] = 0 + self["6"] = 0 + self["8"] = 0 + self["20"] = 0 + --self["21"] = 0 + self["48"] = 0 + self["31"] = 0 + self["32"] = 0 + + self.Speed = 0 + + -- Lamps + ---self.LKT = false + self.LVD = 0 + self.Ring = 0 +end + +function TRAIN_SYSTEM:Outputs() + return { + "Ring","LVD", + "NoFreq","F1","F2","F3","F4","F5","F6","LN","Speed" + } +end + +function TRAIN_SYSTEM:Inputs() + return { "Confirm", "IgnoreThisARS","AttentionPedal","Ring" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + local Train = self.Train + if name == "AttentionPedal" then + self.AttentionPedal = value > 0.5 + if Train and Train.PB then + Train.PB:TriggerInput("Set",value) + end + end + if name == "IgnoreThisARS" then + self.IgnoreThisARS = value > 0.5 + end + if name == "Ring" then + self.ARSRingOverride = value > 0.5 + end + + if name == "Confirm" then self.ConfirmARS = true end +end + + +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + if Train.Electric.Type < 2 then return end + local ALS = Train.ALSCoil + local speed = math.Round(ALS.Speed or 0,1/3) + self.SpeedoTimer = self.SpeedoTimer or CurTime() + if CurTime()-self.SpeedoTimer > 0.4 then + local time = (CurTime()-self.SpeedoTimer) + self.Speed = math.max(0,self.Speed+(speed-self.Speed)*(0.4+math.max(0,math.min((self.Speed-5)*0.2,0.4)))) + self.SpeedoTimer = CurTime() + end + + local power = Train.VB.Value > 0 + -- ALS, ARS state + local KRUEnabled = Train.KRU and Train.KRU["14/1-B3"] > 0 + local RVForward = power and (Train.KV["D4-15"] > 0 or KRUEnabled) + local EnableARS = power and RVForward and --[[ (not Train.A42 or Train.A42.Value > 0) and--]] Train.ARS.Value > 0 + local EnableALS = power and --[[ (not Train.A43 or Train.A43.Value > 0) and--]] Train.ALS.Value > 0 + if (RVForward and EnableALS) ~= (ALS.Enabled==1) then + ALS:TriggerInput("Enable",RVForward and EnableALS and 1 or 0) + end + + self.EnableARS = EnableARS + self.EnableALS = EnableALS + + self.Power = self.EnableARS and 1 or 0 + + --local EPKActivated = Train.EPK and Train.EPK.Value > 0.5 and (Train.Pneumatic.ValveType == 2 and Train.DriverValveDisconnect.Value > 0.5 or Train.DriverValveBLDisconnect.Value > 0.5) + -- Pedal state + --if (Train.PB) and Train.PB.Value > 0.5 then self.AttentionPedal = true end + --if (Train.PB) and Train.PB.Value < 0.5 then self.AttentionPedal = false end + local PB = Train.PB.Value > 0 or self.ConfirmARS + if PB and not self.AttentionPedalTimer and not self.Overspeed then + self.AttentionPedalTimer = CurTime() + 1 + end + + if PB and self.AttentionPedalTimer and (CurTime() - self.AttentionPedalTimer) > 0 then + self.AttentionPedal = true + end + if not PB and (self.AttentionPedalTimer or self.AttentionPedal) then + self.AttentionPedal = false + self.AttentionPedalTimer = nil + end + if PB or (Train.KVT) and Train.KVT.Value > 0.5 then self.KVT = true end + if not PB and (Train.KVT) and Train.KVT.Value < 0.5 then self.KVT = false end + + -- Ignore pedal + if self.IgnorePedal and self.KVT then + self.KVT = false + else + self.IgnorePedal = false + end + + local freq = ALS.F1*1+ALS.F2*2+ALS.F3*4+ALS.F4*8+ALS.F5*16+ALS.F6*32+ALS.NoFreq*64 + if freq ~= self.Freq and not self.FreqChangeTimer then self.FreqChangeTimer = CurTime() end + if self.FreqChangeTimer and CurTime()-self.FreqChangeTimer > 0.5 then + self.Freq = freq + self.NoFreq = ALS.NoFreq + self.F1 = ALS.F1*(1-self.NoFreq) + self.F2 = ALS.F2*(1-self.NoFreq) + self.F3 = ALS.F3*(1-self.NoFreq) + self.F4 = ALS.F4*(1-self.NoFreq) + self.F5 = ALS.F5*(1-self.NoFreq) + self.F6 = ALS.F6*(1-self.NoFreq) + self.RealF5 = self.F5*(1-(self.F4+self.F3+self.F2+self.F1)) + self.FreqChangeTimer = nil + end + --if EnableARS and self.NoFreq == 0 then self.NoFreq = (1-math.min(1,self.F5+self.F4+self.F3+self.F2+self.F1)) end + + -- ARS system placeholder logic + if EnableALS then + if freq == self.Freq and self.Freq == 0 then self.NoFreq = 1 end + local Vlimit = 0 + if self.F4 > 0 then Vlimit = 40 end + if self.F3 > 0 then Vlimit = 60 end + if self.F2 > 0 then Vlimit = 70 end + if self.F1 > 0 then Vlimit = 80 end + -- Determine next limit and current limit + self.SpeedLimit = Vlimit + else + local V = math.floor(speed +0.05) + self.SpeedLimit = 0 + if self.Freq == 0 then self.NoFreq = 0 end + end + + if EnableARS then + Train.EK:TriggerInput("Close",Train.EK1.Value) + local SpeedLimit = self.SpeedLimit + if SpeedLimit < 20 and self.KVT then SpeedLimit = 20 end + -- Check absolute stop + if self.NoFreq ~= self.PrevNoFreq and self.KRT < 1 then + self.IgnorePedal = self.NoFreq > 0 and self.KRT < 1 + self.PrevNoFreq = self.NoFreq + end + local zero = (self.NoFreq+self.RealF5) > 0 + -- Enable PV1 and disassembly when we overspeed + if speed > SpeedLimit+0.5 and not self.Overspeed then + self.Overspeed = self.KRT > 0 and CurTime()-1 or CurTime() + self.ElectricBrake = true + self.ARSRing = true + end + if self.KVT and self.ARSRing then self.ARSRing = false end + --We can disable brake, if speed < Vdop-3 and electric brake + if not self.ARSRing and speed <= SpeedLimit-2 and self.ElectricBrake then + self.ElectricBrake = false + self.Overspeed = false + self.PneumaticBrake2 = false + end + --We can disable ring if speed < Vdop and not electric brake + if self.KVT and speed <= SpeedLimit and not self.ElectricBrake and self.ARSRing then self.ARSRing = false end + --Engage electric when we overspeed + if self.Overspeed and not self.ElectricBrake and self.Overspeed then + self.ElectricBrake = true + end + --PN2 when we brake to 0 speed + --if self.Overspeed and self.ElectricBrake and speed < 0.25 then self.PneumaticBrake2 = true end + + -- AntiRolling + local Drive = (--[[ Train.KV["10AS-33"] > 0 and--]] self.KRH > 0)-- and Train.KRR.Value > 0) + + if speed > SpeedLimit-1 then self.BlockDrive = true end + if speed < SpeedLimit-2 and not Drive then self.BlockDrive = false end + + -- Engage RO + if speed < 3 and self.RO ~= true and not Drive then self.RO = true end + -- Check RO when we starting + if self.RO and self.RO ~= true and (speed > 5 or CurTime()-self.RO > 6) then + self.RO = nil + self.AntiRolling = self.NoFreq == 0 and speed <= 5 and CurTime() + end + if self.AntiRolling and Drive then self.AntiRolling = CurTime() elseif self.AntiRolling and CurTime()-self.AntiRolling > 3 then self.AntiRolling = false end + -- Disable PN1 and start RO timer + if Drive and self.RO == true then + self.RO = CurTime() + end + + local delay = 3.5 + if 10 < speed and speed < 30 then delay = 5.5 end + --if speed < 3 then delay = 10 end + if (self.ElectricBrake or speed < 0.2) and Train.Panel.KT == 0 or self.ARSRing then + if not self.EPKTimer then self.EPKTimer = CurTime() end + else + self.EPKTimer = nil + end + if self.EPKTimer and CurTime()-self.EPKTimer > delay then Train.EK1:TriggerInput("Open",1) end + -- ARS signals + local zeroBrake = self.Freq == 0 or zero and not self.KVT or self.F5 > 0 and Train.VRD.Value == 0 and self.F6 == 0 + local Ebrake, Abrake, Pbrake1,Pbrake2 = + ((self.ElectricBrake or zeroBrake) and 1 or 0), + ((self.BlockDrive or self.Overspeed or self.ARSRing or self.ElectricBrake or zeroBrake or self.AntiRolling) and 1 or 0), + ((self.Overspeed and CurTime()-self.Overspeed < 1 or self.RO == true or self.AntiRolling) and 1 or 0), + ((self.PneumaticBrake2 or zeroBrake) and 1 or 0) + -- Apply ARS system commands + self["33D"] = (1 - Abrake)*(1 - Pbrake2) + self["33G"] = Ebrake + self["2"] = Ebrake-- + NFBrake + self["20"] = Ebrake-- + NFBrake + self["48"] = Pbrake1-- + (self.BPSActive and 1 or 0) + --print(Train.Speed) + self["8"] = self.K25*-10+Pbrake2 + + (KRUEnabled and 1 or 0)*Ebrake + (self.Overspeed and CurTime()-self.Overspeed >= 1.5 and 1 or 0) + --+ (1 - ((EPKActivated and 1 or 0) or 1)) + ---self.LKT = (self["33G"] > 0.5) or (self["48"] > 0.5) or (Train:ReadTrainWire(35) > 0) + self.LVD = math.min(1,self.LVD + (1-self["33D"])) + if self.KRH < 1 and self["33D"] > 0.5 then self.LVD = 0 end + --self.ARSRing = ((self["33D"] < 0.5) or self.KSZD) + else + Train.EK:TriggerInput("Open",1) + Train.EK1:TriggerInput("Close",1) + self.ElectricBrake = true + self.PneumaticBrake1 = false + self.PneumaticBrake2 = true + self.Overspeed = CurTime() + self.BlockDrive = false + self.RO = true + self.AntiRolling = false + self["33D"] = 0 + self["8"] = KRUEnabled and (1-Train.RPB.Value) or 0 + self["33G"] = 0 + self["2"] = 0 + self["20"] = 0 + self["48"] = 0 + + ---self.LKT = false + self.LN = 0 + self.LVD = 0 + self.ARSRing = true + end + -- ARS signalling train wires + self.Train:WriteTrainWire(21,self.LVD and 1 or 0) + if 0*Train.KV["10AK-4"] > 0 then + if not self.BPSArmed then + self.BPSMeter = self.BPSMeter or 0 + self.BPSMeter = self.BPSMeter + math.min(0,Train.Speed*Train.SpeedSign*1000/3600)*dT + if Train.Speed*Train.SpeedSign > 0.1 then + self.BPSMeter = 0 + end + if -self.BPSMeter > 3 then + self.BPSArmed = true + end + end + else + self.BPSArmed = false + self.BPSMeter = 0 + end + if self.BPSArmed then + self["8"] = 1 + self["48"] = 1 + self["33D"] = 0 + end + + --Train.RV_2:TriggerInput("Set",(EnableARS and not self.BPSArmed) and 1 or 0) + + --Train.Rp8:TriggerInput("Set",self["8"] + ((self.Train.RC1 and (self.Train.RC1.Value == 0)) and (1-self["33D"]) or 0)) + --Train.Rp8:TriggerInput("Set",EnableARS and (Train:ReadTrainWire(6)*Train:ReadTrainWire(2)*(1-Train:ReadTrainWire(25))) or 0) + + self.Ring = (self.ARSRingOverride or self.ARSRing and EnableARS) and 1 or 0 + --[[ if Train.PUAV.ZeroTimer then + local timer = (CurTime()-Train.PUAV.ZeroTimer) + if timer >= 0 and timer < 3.5 then + self.Ring = true + elseif timer >= 3.5 and timer < 3.5+4 and timer%1 < 0.5 then + self.Ring = true + end + end + self.Ring = self.Ring or (Train.PUAV.RingArmed and CurTime()-Train.PUAV.RingArmed > 0)--]] + + Train.ROT1:TriggerInput("Set",self["33D"]) + Train.ROT2:TriggerInput("Set",self["33D"]) + if self.ConfirmARS then self.ConfirmARS = false end +end diff --git a/lua/metrostroi/systems/_obsolete/sys_bars_em.lua b/lua/metrostroi/systems/_obsolete/sys_bars_em.lua new file mode 100644 index 0000000..991e663 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_bars_em.lua @@ -0,0 +1,575 @@ +-------------------------------------------------------------------------------- +-- БÐРС Ð´Ð»Ñ Ð•Ð¼ +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("BARS_Em") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("VRD","Relay","Switch", {av = true}) + self.Train:LoadSystem("RC2","Relay","Switch", {bass = true,normally_closed = true }) + -- ALS state + self.Signal80 = false + self.Signal70 = false + self.Signal60 = false + self.Signal40 = false + self.Signal0 = false + self.Special = false + self.NoFreq = true + self.RealNoFreq = true + self.Alarm = false + self.CheckedNF = 2 + + -- Internal state + self.Speed = 0 + self.SpeedLimit = 0 + self.NextLimit = 0 + self.Ring = false + self.Overspeed = false + self.ElectricBrake = false + self.PneumaticBrake1 = false + self.PneumaticBrake2 = true + self.AttentionPedal = false + self.KVT = false + + -- ARS wires + self["33D"] = 0 + self["33G"] = 0 + self["33Zh"] = 1 + self["2"] = 0 + self["6"] = 0 + self["8"] = 0 + self["20"] = 0 + --self["21"] = 0 + self["29"] = 0 + self["31"] = 0 + self["32"] = 0 + + -- Lamps + ---self.LKT = false + self.LVD = false + self.EPK = {} +end + +function TRAIN_SYSTEM:Outputs() + return { "2", "8", "20", "31", "32", "29", "33D", "33G", "33Zh", + "Speed", "Signal80","Signal70","Signal60","Signal40","Signal0","Special","NoFreq","RealNoFreq", + "SpeedLimit", "NextLimit","Ring","KVT","EnableARS","EnableALS","Signal", "UAVA"} +end + +function TRAIN_SYSTEM:Inputs() + return { "AttentionPedal","Ring" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + local Train = self.Train + if name == "AttentionPedal" then + self.AttentionPedal = value > 0.5 + if Train and Train.PB then + Train.PB:TriggerInput("Set",value) + end + end + if name == "IgnoreThisARS" then + self.IgnoreThisARS = value > 0.5 + end + if name == "Ring" then + self.RingOverride = value > 0.5 + end +end + +function TRAIN_SYSTEM:EPVBrake(reason,imm) + if not self.EPK[reason] and not self.EPKOffTimer and not self.EPKActTimer then + if imm then + self.EPK[reason] = CurTime() - 1 + else + self.EPK[reason] = CurTime() + ((10 <= self.Speed and self.Speed <= 30) and 5.5 or 3.3) + end + end +end + +function TRAIN_SYSTEM:EPVDisableBrake(reason) + if self.EPK[reason] then + self.EPK[reason] = nil + end +end +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + --if GetConVarNumber("metrostroi_ars_printnext") == Train:EntIndex() then print(Train:ReadCell(49165)) end + self.LKT = true + for i,train in ipairs(Train.WagonList) do + --print(i,train.RKTT.Value,self["33G"],train.DKPT.Value) + --if (train.RKTT and train.RKTT.Value < 0.5 and train.DKPT.Value < 0.5 and self["33G"] > 0) or (train.DKPT and train.DKPT.Value < 0.5 and self["33G"] == 0) then + if (train.RKTT and train.RKTT.Value < 0.5 and train.DKPT.Value < 0.5) then-- or (train.DKPT and train.DKPT.Value < 0.5) then + self.LKT = false + end + end + + -- ALS, ARS state + local KRUEnabled = Train.KRU and Train.KRU.Position > 0 + local EnableARS = Train.VB.Value == 1.0 and (Train.KV.ReverserPosition ~= 0.0 or KRUEnabled) and Train.VBA.Value == 1.0 + local EnableALS = Train.VB.Value == 1.0 + + self.EnableARS = EnableARS + self.EnableALS = EnableALS + local EPKActivated = Train.EPK.Value > 0.5 and (Train.Pneumatic.ValveType == 2 and Train.DriverValveDisconnect.Value > 0.5 or Train.DriverValveBLDisconnect.Value > 0.5) + if not self.EPKActivated and EPKActivated then + self.EPKActivated = EPKActivated + end + if EPKActivated and self.EPKActTimer then + self.EPKActTimer = nil + end + if not EPKActivated and self.EPKActivated and not self.EPKActTimer then + self.EPKActTimer = CurTime() + 3 + end + if self.EPKActTimer and CurTime() - self.EPKActTimer > 0 then + self.EPKActivated = false + --self.EPKBrake = false + for k,v in pairs(self.EPK) do + self.EPK[k] = nil + end + end + + local PB = Train.PB and Train.PB.Value > 0.5 + if PB and not self.AttentionPedalTimer and not self.Overspeed then + self.AttentionPedalTimer = CurTime() + 1 + end + + if PB and self.AttentionPedalTimer and (CurTime() - self.AttentionPedalTimer) > 0 then + self.AttentionPedal = true + end + if not PB and (self.AttentionPedalTimer or self.AttentionPedal) then + self.AttentionPedal = false + self.AttentionPedalTimer = nil + end + if PB or (Train.KVT) and Train.KVT.Value > 0.5 then self.KVT = true end + if not PB and (Train.KVT) and Train.KVT.Value < 0.5 then self.KVT = false end + + -- Ignore pedal + if self.IgnorePedal and self.KVT then + self.KVT = false + else + self.IgnorePedal = false + end + + -- Speed check and update speed data + if CurTime() - (self.LastSpeedCheck or 0) > 0.5 then + self.LastSpeedCheck = CurTime() + self.Speed = (Train.Speed or 0) + end + + if (Train.UAVA and Train.SpeedSign and Train.SpeedSign > 0 and self.Speed > 0.25) or EnableALS then + local ars,arsback + self.Timer = self.Timer or CurTime() + if CurTime() - self.Timer > 1.00 then + self.Timer = CurTime() + -- Get train position + local pos = Metrostroi.TrainPositions[Train] --Metrostroi.GetPositionOnTrack(Train:GetPos(),Train:GetAngles()) --(this metod laggy for dir checks) + if pos then pos = pos[1] end + -- Get previous ARS section + if pos then + ars,arsback = Metrostroi.GetARSJoint(pos.node1,pos.x,Metrostroi.TrainDirections[Train], Train) + end + + if Train.UAVA and Train.SpeedSign > 0 then + if IsValid(arsback) then + if arsback == self.AutostopSignal then + Train.Pneumatic.EmergencyValve = not Train.Pneumatic.UAVA + self.UAVAContacts = not Train.Pneumatic.UAVA + self.AutostopSignal = nil + if not Train.Pneumatic.UAVA then + RunConsoleCommand("say","Autostop braking",Train:GetDriverName(),arsback.Name) + end + if not IsValid(Train.FrontTrain) or not IsValid(Train.RearTrain)then + RunConsoleCommand("say","Passed stop signal",Train:GetDriverName(),arsback.Name) + local ply,mode = Train:GetDriverPly() + hook.Run("MetrostroiPassedRed",Train,ply,mode,arsback.Name) + end + end + end + if IsValid(ars) then + if ars.AutoEnabled then + self.AutostopSignal = ars + --print("enty") + elseif self.AutostopSignal == ars then + self.AutostopSignal = nil + --print("entn") + end + end + end + if Train:ReadTrainWire(5) < 1 or self.Train.VU.Value < 0.5 then + ars = nil + self.RealNoFreq = true + self.NoFreq = true + self.CheckedNF = 2 + end + + if IsValid(ars) then + self.CheckedNF = 0 + self.Alert = nil + self.Signal80 = ars:GetARS(8,Train) + self.Signal70 = ars:GetARS(7,Train) + self.Signal60 = ars:GetARS(6,Train) + self.Signal40 = ars:GetARS(4,Train) + self.Signal0 = ars:GetARS(0,Train) or ars:GetARS(2,Train) + self.Special = ars:Get325HzAproove0() and not ars:GetARS(2,Train) + self.NoFreq = ars:GetARS(1,Train) or not (self.Signal80 or self.Signal70 or self.Signal60 or self.Signal40 or self.Signal0) + if GetConVarNumber("metrostroi_ars_printnext") == Train:EntIndex() then RunConsoleCommand("say",ars.Name,tostring(arsback and arsback.Name),tostring(ars.NextSignalLink and ars.NextSignalLink.Name or "unknown"),tostring(pos.node1.path.id),tostring(Metrostroi.TrainDirections[Train])) end + self.RealNoFreq = not (self.Signal80 or self.Signal70 or self.Signal60 or self.Signal40 or self.Signal0) + else + if GetConVarNumber("metrostroi_ars_printnext") == Train:EntIndex() then RunConsoleCommand("say","LOSE SIGNAL",tostring(pos and pos.node1.path.id or "unknown"),tostring(Metrostroi.TrainDirections[Train])) end + if (self.CheckedNF and self.CheckedNF > 1) or (self.CheckedNF == 0 and self.NoFreq) or self.RealNoFreq then + self.Alert = nil + self.Signal80 = false + self.Signal70 = false + self.Signal60 = false + self.Signal40 = false + self.Signal0 = false + self.Special = false + self.NoFreq = true + self.RealNoFreq = true + self.CheckedNF = 2 + else + if not self.CheckedNF then self.CheckedNF = 0 end + self.CheckedNF = self.CheckedNF + 1 + self.NoFreq = true + self.Alert = CurTime() + 0.5 + end + end + self.Signal = ars + end + end + -- Check ARS signals + if not EnableALS --[[or EnableUOS]] then + self.Signal80 = false + self.Signal70 = false + self.Signal60 = false + self.Signal40 = false + self.Signal0 = false + self.Special = false + self.NoFreq = EnableARS + self.RealNoFreq = EnableARS + self.CheckedNF = 2 + self.Alert = nil + end + + -- ARS system placeholder logic + if EnableALS then + local V = math.floor(self.Speed +0.05) + local Vlimit = 0 + if self.Signal40 then Vlimit = 40 end + if self.Signal60 then Vlimit = 60 end + if self.Signal70 then Vlimit = 70 end + if self.Signal80 then Vlimit = 80 end + + self.Overspeed = false + if self.AttentionPedal then + Vlimit = 0 + end + if ( self.KVT) and (Vlimit ~= 0) and (V > Vlimit) then self.Overspeed = true end + if ( self.KVT) and (Vlimit == 0) and (V > 20) then self.Overspeed = true end + Vlimit = Vlimit + 2 + if (not self.KVT) and (V > Vlimit) and (V > (self.RealNoFreq and 0 or 3)) then self.Overspeed = true end + + -- Determine next limit and current limit + self.SpeedLimit = Vlimit + self.NextLimit = Vlimit + if self.Signal80 then self.NextLimit = 80 end + if self.Signal70 then self.NextLimit = 70 end + if self.Signal60 then self.NextLimit = 60 end + if self.Signal40 then self.NextLimit = 40 end + if self.Signal0 then self.NextLimit = 0 end + + if not EnableARS then + self.ElectricBrake = false + self.PneumaticBrake1 = false + self.PneumaticBrake2 = false + end + else + local V = math.floor(self.Speed +0.05) + self.SpeedLimit = 0 + self.NextLimit = 0 + self.Overspeed = false + if not self.KVT and V > 0 then self.Overspeed = true end + if ( self.KVT) and (V > 20) then self.Overspeed = true end + end + ------------------ + if self.SpeedLimit > 20 then self.SpeedLimit = self.SpeedLimit - 2 end + if EnableARS then + if self.ElectricBrake1 and self.ARSBrake and not (self.RealNoFreq and not self.KVT and not self.ARSBrake) then + if self.ARSBrakeTimer == nil then self.ARSBrakeTimer = CurTime() + 5 end + else + self.ARSBrakeTimer = nil + end + + if self.RealNoFreq and (not self.PrevNoFreq) and Train:ReadTrainWire(6) < 1 then + self.IgnorePedal = true + end + self.PrevNoFreq = self.RealNoFreq + -- Check overspeed + if self.SpeedLimit > 20 then + if self.Speed >= self.SpeedLimit + 1 then + if Train:ReadTrainWire(6) == 0 then + self.ElectricBrake = true + self.PneumaticBrake1 = true + end + self.ElectricBrake1 = true + self.ARSBrake = true + end + end + if self.Overspeed then + self.ARSBrake = true + self.ElectricBrake1 = true + self.ElectricBrake = true + self.PneumaticBrake1 = true + end + -- Check cancel of overspeed command + if not self.Overspeed and not self.ElectricBrake1 and self.ARSBrake then + self.PneumaticBrake1 = false + + end + if (self.KVT or not self.ARSBrakeTimer) and (self.Speed < self.SpeedLimit - 1 and self.SpeedLimit > 20 or self.SpeedLimit < 20 and not self.Overspeed) and (self.ElectricBrake or self.ARSBrake) then + self.ElectricBrake = false + self.ElectricBrake1 = false + self.ARSBrake = false + self.PneumaticBrake1 = false + self.PneumaticBrake2 = false + end + if self.Speed < self.SpeedLimit - 1 and (self.ARSBrake or self.ElectricBrake1) and not self.ElectricBrake then + self.ARSBrake = false + self.ElectricBrake1 = false + end + --print(Train:GetPackedBool(131)) + -- Check use of valve #1 during overspeed + if self.ARSBrake and self.ElectricBrake1 and self.Speed < 0.25 then + self.PneumaticBrake2 = true + end + + if self.Speed < 0.25 then + self.PneumaticBrake1 = true + end + -- Parking brake limit + local BPSWorking = Train:ReadTrainWire(5) > 0 + if BPSWorking then + if self.Nakat ~= nil then + self.PneumaticBrake1 = true + self.AntiRolling = self.Nakat and true or nil + self.Nakat = nil + end + if self.Speed*Train.SpeedSign < -0.5 then + if not self.Meters then self.Meters = 0 end + self.Meters = self.Meters + self.Speed/3600*1000*dT + if self.Meters > 0.5 + (Train:ReadTrainWire(1) > 0 and 2.5 or 0) then + self.AntiRolling = true + end + else + if Train.KV.ControllerPosition <= 0 and self.AntiRolling then + self.AntiRolling = false + end + if Train.KV.ControllerPosition > 0 and self.AntiRolling == false then + self.AntiRolling = nil + end + self.Meters = nil + end + else + self.AntiRolling = nil + end + + --BPS Logic + if not BPSWorking then + self.StoppedOnSlopeByRP = false + self.BPSActive = false + end + + -- Check cancel pneumatic brake 1 command + if ((Train:ReadTrainWire(1) > 0) or (Train.RRP and Train.RRP.Value > 0 and not self.ElectricBrake1)) then + if (Train:ReadTrainWire(1) > 0 or (Train.RRP and Train.RRP.Value > 0 and not self.ElectricBrake1)) and self.PneumaticBrake1 and not self.Overspeed then + self.PneumaticBrake1 = false + end + end + if self.Signal0 and not self.Special and not self.RealNoFreq and not self.Signal40 and not self.Signal60 and not self.Signal70 and not self.Signal80 then + if not self.NonVRD and self.Train.VRD.Value < 0.5 then + self.VRDTimer = nil + end + + self.NonVRD = self.Train.VRD.Value < 0.5 + if self.NonVRD then + if self.VRDTimer and CurTime() - self.VRDTimer > 0 then + self.VRDTimer = false + elseif self.VRDTimer ~= false then + if not self.VRDTimer and self.KVT then self.VRDTimer = CurTime() + 1 end + if self.VRDTimer and not self.KVT then self.VRDTimer = nil end + end + else + self.VRDTimer = false + end + else + if self.NonVRD then self.NonVRD = false end + self.VRDTimer = false + end + + -- ARS signals + local Ebrake, Abrake, NFBrake, Pbrake1,Pbrake2 = + ((self.ElectricBrake) and 1 or 0), + ((self.ARSBrake) and 1 or 0), + ((self.SpeedLimit < 20 and not self.KVT and not self.ARSBrake) and 1 or 0), + (self.PneumaticBrake1 and 1 or 0), + (self.PneumaticBrake2 and 1 or 0) + -- Apply ARS system commands + self["33D"] = (1 - Abrake) *(1-NFBrake)*((self.NonVRD or self.VRDTimer ~= false or self.ElectricBrake1 or self.AntiRolling ~= nil) and 0 or 1) --*(2 - Pbrake2) + self["33G"] = Ebrake + NFBrake + ((self.NonVRD or self.VRDTimer ~= false) and 1 or 0) + self["33Zh"] = (1 - Abrake)*(1-NFBrake)*((self.NonVRD or self.VRDTimer ~= false or self.ElectricBrake1 or self.AntiRolling ~= nil) and 0 or 1)--*(2 - Pbrake2) + --print(self["33Zh"]) + self["2"] = Ebrake + NFBrake + ((self.NonVRD or self.VRDTimer ~= false) and 1 or 0) + self["20"] = Ebrake + NFBrake + ((self.NonVRD or self.VRDTimer ~= false) and 1 or 0) + self["29"] = Pbrake1-- + (self.BPSActive and 1 or 0) + --print(Train.Speed) + --if GetConVarNumber("metrostroi_ars_printnext") == Train:EntIndex() then print(self.SpeedLimit,self.self.SpeedLimit <= 20 and not self.KVT) end + --if StPetersburg then print(self.Train:EntIndex()) end + self["8"] = Pbrake2 + + (KRUEnabled and 1 or 0)*Ebrake + + ((self.SpeedLimit < 20 and not self.KVT or self.Speed > 20 and self.SpeedLimit < 20) and 1 or 0) + + (self.BPSActive and 1 or 0) + + (self.AntiRolling ~= nil and 1 or 0) + + (1 - ((self.EPKActivated and 1 or 0) or 1)) + + ---self.LKT = (self["33G"] > 0.5) or (self["29"] > 0.5) or (Train:ReadTrainWire(35) > 0) + self.LVD = self.LVD or self["33D"] < 0.5 + if Train:ReadTrainWire(6) < 1 and self["33D"] > 0.5 then self.LVD = false end + self.Ring = ((self["33D"] < 0.5 and ((NFBrake < 1 and self.ARSBrakeTimer ~= nil and self.ARSBrakeTimer ~= false) or self.VRDTimer ~= false)) or self.KSZD) + if self.ElectricBrake or self.PneumaticBrake2 then + if not self.LKT then + self:EPVBrake("LKT not light-up when ARS stopping") + else + self:EPVDisableBrake("LKT not light-up when ARS stopping") + end + else + self:EPVDisableBrake("LKT not light-up when ARS stopping") + end + if self.KVT and self.ARSBrakeTimer then self.ARSBrakeTimer = false end + if self.EPKActivated and not self.LKT and self.Speed < 0.05 and Train:ReadTrainWire(1) == 0 then -- or (self.AntiRolling ~= nil and Train:ReadTrainWire(1) > 0) then + self:EPVBrake("LKT off when stopped") + else + self:EPVDisableBrake("LKT off when stopped") + end + else + if (Train.RPB) and not self.AttentionPedal then + --Train.RPB:TriggerInput("Open",1) + end + self.AntiRolling = nil + self.ElectricBrake1 = true + self.ElectricBrake = true + self.PneumaticBrake1 = false + self.PneumaticBrake2 = true + self.ARSBrake = true + self["33D"] = 0 + self["33Zh"] = 1 + self["8"] = KRUEnabled and (1-Train.RPB.Value) or 0 + self["33G"] = 0 + self["2"] = 0 + self["20"] = 0 + self["29"] = 0 + + ---self.LKT = false + self.LVD = false + self.Ring = false + end + -- ARS signalling train wires + if EnableARS then + self.Train:WriteTrainWire(21,self.LVD and 1 or 0)-----self.LKT and 1 or 0) + else--if not EnableUOS then + self.Train:WriteTrainWire(21,0) + end + -- RC1 operation + if self.Train.RC1 and (self.Train.RC1.Value == 0) then + local KAH = (Train.KAH ~= nil and Train.KAH.Value > 0.5) and 1 or 0 + --self["33D"] = 1 + self["33G"] = 0 + self["33Zh"] = 1--KAH + -- + self["2"] = 0 + self["20"] = 0 + self["29"] = 0 + -- + self["31"] = 0 + self["32"] = 0 + --self["8"] = KRUEnabled and (1-Train.RPB.Value) or 0 + self["33D"] = (self.Speed + 0.5 > 9000) and 0 or 1 + --self["33G"] = (self.Speed + 0.5 > 35) and 1 or KRUEnabled and (1-Train.RPB.Value) or 0 + --self["33Zh"] = 1--(self.Speed + 0.5 > 40) and 0 or KAH + self["8"] = (self.Speed + 0.5 > 9000) and 1 or KRUEnabled and (1-Train.RPB.Value) or 0 + else + if (not self.EPKActivated) then + self["33D"] = 0 + self["33Zh"] = 1 + end + end + + if Train.RV_2 then + Train.RV_2:TriggerInput("Set",EnableARS and 1 or 0) + end + + if self.EPKActivated then + --if self.EPKOffARS then + --self:EPVBrake("Was the emergency brake",true) + --end + --self.EPKOffARS = nil + --if self.EPKTimer then print(self.EPKTimer - CurTime(),self.EPKTimer < CurTime(),self.EPKTimer > CurTime() ) end + if not EnableARS then + self:EPVBrake("ARS disabled") + else + self:EPVDisableBrake("ARS disabled") + end + if self.ARSBrakeTimer then + self:EPVBrake("Braking 3 seconds") + else + self:EPVDisableBrake("Braking 3 seconds") + end + else + --self.EPKOffTimer = nil + --[[if EnableARS and self.EPKOffARS == nil then + self.EPKOffARS = true + else + self.EPKOffARS = false + end]] + --if self.EPKOffARS then + --self.EPKOffARS = false + --end + if not EnableARS then + self.EPKBrake = false + end + end + --if not EPKActivated then + --if EnableARS and self.EPKOffARS == nil then + --print(self.EPKBrake) + --self.EPKOffARS = self.EPKBrake + --end + --end + --if GetConVarNumber("metrostroi_ars_printnext") == Train:EntIndex() then print(self.EPKOffARS,EnableARS) end + if not EnableARS then self.EPKOffARS = false end + -- 81-717 autodrive/autostop + if (Train.Pneumatic and Train.Pneumatic.EmergencyValve) or self.UAVAContacts then + self["33D"] = 0 + self["33Zh"] = 1 + end + + self["8"] = self["8"]*Train.OVT.Value + self["29"] = self["29"]*Train.OVT.Value + if Train.UAVAContact and Train.UAVAContact.Value > 0.5 and not Train.Pneumatic.EmergencyValve then + self.UAVAContacts = nil + end + self.Ring = self.Ring or (self.Alert and self.Alert - CurTime() > 0) + if Train.Rp8 then Train.Rp8:TriggerInput("Set",self["8"] + ((self.Train.RC1 and (self.Train.RC1.Value == 0)) and (1-self["33D"]) or 0)) end + self.Ring = self.RingOverride or self.Ring + + for k,v in pairs(self.EPK) do + if not self.EPKActivated then + if self.EPK[k] then + self.EPK[k] = nil + end + end + if CurTime() - v > 0 and not self.EPKBrake then + self.EPKBrake = true + RunConsoleCommand("say","EPV braking ("..k..")",self.Train:GetDriverName()) + end + end + Train.Pneumatic.EmergencyValveEPK = self.EPKBrake and not self.EPKOffTimer and not self.EPKActTimer +end diff --git a/lua/metrostroi/systems/_obsolete/sys_dip_01k.lua b/lua/metrostroi/systems/_obsolete/sys_dip_01k.lua new file mode 100644 index 0000000..b78e088 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_dip_01k.lua @@ -0,0 +1,78 @@ +-------------------------------------------------------------------------------- +-- "DIP-01K" power supply +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("DIP_01K") + +function TRAIN_SYSTEM:Initialize() + self.XR3 = { + [2] = 0, + [3] = 0, + [4] = 0, + [5] = 0, -- Out only + [6] = 0, + [7] = 0, + } + self.XT3_1 = 0 -- General (battery) output + self.XT3_4 = 0 -- Output for passenger lights + self.XT1_2 = 0 + + self.XT3_1ext = 0 -- External + self.Active = 0 + self.LightsActive = 0 +end + +function TRAIN_SYSTEM:Inputs() + return { "XR3.2", "XR3.3", "XR3.4", "XR3.5", "XR3.6", "XR3.7", "XT3.1" } +end + +function TRAIN_SYSTEM:Outputs() + return { "XT3_1", "XT3_4", "XT1_2" } +end + + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "XT3.1" then + self.XT3_1ext = value + else + local idx = tonumber(string.sub(name,5,6)) or 0 + if self.XR3[idx] then + if value > 0.5 + then self.XR3[idx] = 1.0 + else self.XR3[idx] = 0.0 + end + end + end +end + +function TRAIN_SYSTEM:Think() + local Train = self.Train + + -- Get high-voltage input + self.XT1_2 = Train.Electric.Aux750V * Train.KPP.Value * 1 -- P4 + -- Get battery input + local XT3_1 = self.XT3_1ext + + -- Check if enable signal is present + if self.XR3[2] > 0 then self.Active = 1 end + if self.XR3[3] > 0 then self.Active = 0 self.LightsActive = 0 end + if self.XR3[4] > 0 then self.LightsActive = 1 end + if self.XR3[6] > 0 then self.Active = 1 end + if self.XR3[7] > 0 then self.LightsActive = 1 end + + -- Undervoltage/overvoltage + local voltage_bat = XT3_1 + if (self.XT1_2 > 550) and (self.XT1_2 < 975) then voltage_bat = 75 end + if voltage_bat < 55 then self.Active = 0 self.LightsActive = 0 end + if voltage_bat > 85 then self.Active = 0 self.LightsActive = 0 end + + local voltage = 0 + if (self.XT1_2 > 550) and (self.XT1_2 < 975) then voltage = 75 end + + -- Generate output + self.XT3_1 = voltage * self.Active + self.XT3_4 = voltage * self.Active + Train.KPP:TriggerInput("Open",1.0 - self.Active) +end \ No newline at end of file diff --git a/lua/metrostroi/systems/_obsolete/sys_dura.lua b/lua/metrostroi/systems/_obsolete/sys_dura.lua new file mode 100644 index 0000000..1cccd25 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_dura.lua @@ -0,0 +1,96 @@ +-------------------------------------------------------------------------------- +-- ДУРР(Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð£Ð½Ð¸Ð²ÐµÑ€ÑÐ°Ð»ÑŒÐ½Ð°Ñ Ð Ð°Ð´Ð¸Ð¾Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚ÑƒÑ€Ð°) +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("DURA") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.SelectAlternate = nil + self.Channel = 1 + self.Signal = 0 + self.Power = 1 +end + +function TRAIN_SYSTEM:Outputs() + return { "Signal" } +end + +function TRAIN_SYSTEM:Inputs() + return { "SelectAlternate", "SelectMain", "SelectChannel", "ToggleChannel", "Power", "PowerToggle" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if (name == "SelectAlternate") and (value > 0.0) then + self.SelectAlternate = true + self.TimerToggle = true + elseif (name == "SelectMain") and (value > 0.0) then + self.SelectAlternate = false + self.TimerToggle = true + elseif (name == "ToggleChannel") and (value > 0.0) then + if self.Channel == 1 then self.Channel = 2 else self.Channel = 1 end + elseif (name == "SelectChannel") then + self.Channel = math.floor(value) + elseif (name == "PowerToggle") and (value > 0.0) then + self.Power = not self.Power + end +end + +function TRAIN_SYSTEM:Think() + -- Require 54 volts + if self.Train.Battery and (self.Train.Battery.Voltage < 54) then return end + if not self.Power then return end --or self.Train.ARSType == 3 then return end + --self.Train:PlayOnce("dura2","cabin",0.4,100) + -- Check ARS signals + self.Timer = self.Timer or CurTime() + if CurTime() - self.Timer > 2.00 or self.TimerToggle then + self.TimerToggle = nil + self.Timer = CurTime() + + -- Get train position + local pos = Metrostroi.TrainPositions[self.Train] + if pos then pos = pos[1] end + + -- Get all switches in current isolated section + local no_switches = true + local signal = 0 + local Alt1, Alt2 + if pos then + -- Get traffic light in front + local light = Metrostroi.GetNextTrafficLight(pos.node1,pos.x,pos.forward) + local function getSignal(base,chan) + if (chan == 1) and (base == "alt") and light and light:GetInvertChannel1() then return "main" end + if (chan == 2) and (base == "alt") and light and light:GetInvertChannel2() then return "main" end + return base + end + + -- Get switches and trigger them all + local switches = Metrostroi.GetTrackSwitches(pos.node1,pos.x,pos.forward) + for _,switch in pairs(switches) do + Alt1 = Alt1 or (switch:GetChannel() == 1 and switch:GetSignal() > 0) + Alt2 = Alt2 or (switch:GetChannel() == 2 and switch:GetSignal() > 0) + no_switches = false + if self.SelectAlternate == true then + if self.Channel == 1 then switch:SendSignal(getSignal("alt",1),1) end + if self.Channel == 2 then switch:SendSignal(getSignal("alt",2),2) end + elseif self.SelectAlternate == false then + if self.Channel == 1 then switch:SendSignal(getSignal("main",1),1) end + if self.Channel == 2 then switch:SendSignal(getSignal("main",2),2) end + end + signal = math.max(signal,switch:GetSignal()) + end + + -- Reset state selection + end + if signal > 0 then + self.Train:PlayOnce("dura1","cabin",0.30,200) + end + self.Signal = signal + self.Channel1Alternate = Alt1 + self.Channel2Alternate = Alt2 + -- If no switches, reset + if (no_switches or not pos) and (self.SelectAlternate ~= nil) then + self.Train:PlayOnce("dura2","cabin",0.30,220) + end + self.SelectAlternate = nil + end +end \ No newline at end of file diff --git a/lua/metrostroi/systems/_obsolete/sys_gen_int_710.lua b/lua/metrostroi/systems/_obsolete/sys_gen_int_710.lua new file mode 100644 index 0000000..f7ad796 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_gen_int_710.lua @@ -0,0 +1,757 @@ +-------------------------------------------------------------------------------- +-- Internal systems simulation code +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("Gen_Int") + +-- Node values +local S = {} +-- Converts boolean expression to a number +local function C(x) return x and 1 or 0 end + +local min = math.min +local max = math.max + + +function TRAIN_SYSTEM.SolveEzh3(Train,Triggers) + local P = Train.PositionSwitch.SelectedPosition + local RK = Train.RheostatController.SelectedPosition + local B = (Train.Battery.Voltage > 55) and 1 or 0 + local T = Train.SolverTemporaryVariables + if not T then + T = {} + for i=1,100 do T[i] = 0 end + Train.SolverTemporaryVariables = T + end + + -- Solve all circuits + --T["SDRK_ShortCircuit"] = -10*Train.RheostatController.RKP*(Train.RUT.Value+Train.RRT.Value+(1.0-Train.SR1.Value) ) + T["SDRK_ShortCircuit"] = -10*Train.RheostatController.RKP*(Train.RUT.Value+(1.0-Train.SR1.Value) ) + Triggers["SDRK_Shunt"]( 1.0 - (0.20+0.20*C((RK >= 2) and (RK <= 7))*C(P == 1))*Train.LK2.Value ) + S["33-33Aa"] = Train.KD.Value+Train.VAD.Value + S["U2-20"] = Train.KV["U2-20a"]+Train.KV["U2-20b"] + S["31V'-31V"] = Train.KDL.Value+Train.VDL.Value + S["10AK-VAH1"] = Train.VAH.Value+Train.RPB.Value + S["33B-33AVU"] = Train.AVU.Value+Train.OtklAVU.Value + S["1T-1P"] = Train.NR.Value+Train.RPU.Value + S["2Zh-2A"] = (1.0-Train.KSB1.Value)+(1.0-Train.TR1.Value) + S["2Zh-2A"] = Train.ThyristorBU5_6.Value+S["2Zh-2A"] + --S["2Zh-2A"] = Train.KSB2.Value+S["2Zh-2A"] + S["8A-8Ye"] = C(RK == 1)+(1.0-Train.LK4.Value) + S["15A-15B"] = Train.KV["15A-15B"]+Train.KD.Value + S["10AYa-10E"] = (1.0-Train.LK3.Value)+Train.Rper.Value + S["10AP-10AD"] = Train.LK2.Value+C((P == 3) or (P == 4)) + S["10AE-10B"] = Train.TR1.Value+Train.RV1.Value + S["D1-32V"] = 1*Train.KDP.Value+Train.ALS_ARS["32"] + S["TW[15]-15A"] = Train.KRU["15/2-D8"]*Train.KV["D8-15A"]+1 + S["1E-1Yu"] = Train.KSH2.Value+Train.KSB2.Value*Train.KSB1.Value + S["2V-2G"] = C((RK >= 5) and (RK <= 18))+C((RK >= 2) and (RK <= 4))*Train.KSH1.Value + S["10-8"] = Train.KV["10-8"]+(1.0-Train.VAH.Value)*Train.KV["FR1-10"]*(1.0-Train.RPB.Value) + S["10AG-10AD"] = (1.0-Train.TR1.Value)*C((P == 2) or (P == 3) or (P == 4))*(1.0-Train.TR2.Value)+Train.TR2.Value*Train.TR1.Value*C((P == 1) or (P == 2) or (P == 4)) + S["1G-1Zh"] = Train.LK3.Value+C((P == 1) or (P == 3))*Train.LK5.Value*C(RK == 1)*S["1E-1Yu"] + S["10N-10Zh"] = (1.0-Train.RRT.Value)*(1.0-Train.RUT.Value)*Train.SR1.Value+Train.RheostatController.RKM1 + S["10E-10AG"] = (1.0-Train.LK1.Value)*S["10AP-10AD"]*S["10AG-10AD"]+C(RK == 18)*C((P == 1))*Train.LK3.Value + S["1A-1M"] = C((RK >= 1) and (RK <= 5))+C(RK == 6)*Train.RheostatController.RKM1 + S["2A-2G"] = C((P == 1) or (P == 3))*C((RK >= 1) and (RK <= 17))+C((P == 2) or (P == 4))*S["2V-2G"] + S["D1-31V"] = Train.ALS_ARS["31"]+1*S["31V'-31V"] + S["1A-1R"] = (1.0-Train.RV1.Value)*C((P == 1))+C((P == 2))*S["1A-1M"] + S["10"] = 1*Train:ReadTrainWire(10) + S["FR1/2"] = S["10"]*Train.KV["FR1-10"] + S["15B"] = S["TW[15]-15A"]*S["15A-15B"]*Train:ReadTrainWire(15) + S["10AL"] = S["10"]*Train.VU.Value + S["10ALa"] = S["10AL"]*Train.VU3.Value + S["Sh1-43"] = S["10AL"]*Train.ARS.Value--A45.Value + S["10AS"] = S["10AL"]--*Train.A55.Value + S["10AK"] = S["10AL"]--*Train.A54.Value --Pred:pr24 + S["6P"] = S["10AL"]--*Train.A61.Value + S["6"] = S["6P"]*Train.RVT.Value + S["2-7R-24"] = S["6P"]*(1.0-Train.AVU.Value) + S["29"] = S["2-7R-24"]*(1.0-Train.OtklAVU.Value)+Train.ALS_ARS["29"] + --???? + --23w*PR31+PR14*22 + S["22A"] = Train:ReadTrainWire(23)+T[6]--*Train.KU1.Value --Pred:PR20 --Train.A23.Value*1*Train:ReadTrainWire(23)+T[6]*Train.A22.Value + S["10AN"] = (1.0-Train.RPvozvrat.Value)--*Train.A14.Value*1*1 + S["1-7R-8"] = S["10AS"]*Train.KV["10AS-U4"]*Train.VozvratRP.Value + --S["1A"] = Train.A1.Value*(1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value*Train.A39.Value)*Train:ReadTrainWire(1) + --S["3A"] = Train.A3.Value*(1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value*Train.A39.Value)*Train:ReadTrainWire(3) + S["1A"] = (1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value)*Train:ReadTrainWire(1) + S["3A"] = (1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value)*Train:ReadTrainWire(3) + S["33V"] = S["10AK"]*Train.RV2.Value*S["10AK-VAH1"]*1*S["33B-33AVU"] + S["1R"] = S["1A"]*S["1A-1R"] + --S["20B"] = (1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value*Train.A39.Value)*(1.0-Train.RPvozvrat.Value)*Train.A20.Value*Train:ReadTrainWire(20) + S["20B"] = (1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value)*(1.0-Train.RPvozvrat.Value)*Train:ReadTrainWire(20) + S["4B"] = (1.0-Train.RKR.Value)*Train:ReadTrainWire(4) + S["5B"] = Train.RKR.Value*Train:ReadTrainWire(5) + S["5V"] = Train.RKR.Value*Train:ReadTrainWire(4)+T[8]*(1.0-Train.RKR.Value) + S["5B'"] = S["5V"]*Train.LK3.Value + S["6A"] = Train:ReadTrainWire(6)--Train.A6.Value*Train:ReadTrainWire(6) + S["B12"] = 1*Train.VB.Value*B + S["8A"] = Train:ReadTrainWire(8) --Pred:PR23 --Train.A8.Value*Train:ReadTrainWire(8) + S["8Zh"] = S["8A"]*C((RK >= 17) and (RK <= 18))+T[10]*1 + S["12A"] = Train:ReadTrainWire(12)--Train.A12.Value*Train:ReadTrainWire(12) + S["1"] = S["10AS"]*Train.R1_5.Value*Train.KV["10AS-33D"]*Train.ALS_ARS["33D"]+(-10*Train.KRU["1/3-ZM31"]) + S["8"] = S["10"]*S["10-8"]+Train.ALS_ARS["8"] + S["16V"] = (1.0-Train.RD.Value)*Train:ReadTrainWire(16) --Train.A16.Value*(1.0-Train.RD.Value)*Train:ReadTrainWire(16) + S["6Yu"] = S["6A"]*C((P == 3) or (P == 4))*C((RK >= 1) and (RK <= 2)) + S["17A"] = Train:ReadTrainWire(17) --Train.A17.Value*Train:ReadTrainWire(17) + S["24V"] = (1.0-Train.LK4.Value)*Train:ReadTrainWire(24) + --S["25A"] = Train.A25.Value*Train:ReadTrainWire(25) + --S["27A"] = Train.A50.Value*Train:ReadTrainWire(27) + --S["28A"] = Train.A51.Value*Train:ReadTrainWire(28) + --S["31A"] = Train.A31.Value*Train:ReadTrainWire(31)+T[3]*1 + --S["32A"] = Train.A32.Value*Train:ReadTrainWire(32)+T[4]*1 + + S["25A"] = Train:ReadTrainWire(25) + S["27A"] = Train:ReadTrainWire(27) + S["28A"] = Train:ReadTrainWire(28) + S["31A"] = Train:ReadTrainWire(31)+T[3]*1 + S["32A"] = Train:ReadTrainWire(32)+T[4]*1 + S["B2"] = 1*Train.VB.Value*B + --S["18A"] = (1.0-Train.RPvozvrat.Value)*Train.A14.Value*1+(-0.5*(1.0-Train.LK4.Value)) + S["18A"] = (1.0-Train.RPvozvrat.Value)+(-0.5*(1.0-Train.LK4.Value)) + S["B8"] = S["B2"]*Train.AV8B.Value + S["B22"] = S["B8"]*Train.VU1.Value + S["B28"] = S["B8"]*Train.KUP.Value + S["36Ya"] = S["B8"]*Train.KVC.Value + S["B13"] = S["B12"]--*Train.A24.Value + S["B3"] = S["B2"]--*Train.A44.Value + S["1-7R-29"] = S["B3"]*Train.RezMK.Value + S["4"] = S["10AK"]*Train.KV["10AK-4"]+(-10*Train.KRU["5/3-ZM31"]*0 + Train.KRU["14/1-B3"]*S["B3"]*(1-Train.KRR.Value)*1) + S["5"] = S["10AK"]*Train.KV["10AK-5"]+(-10*Train.KRU["5/3-ZM31"]*0 + Train.KRU["14/1-B3"]*S["B3"]*(Train.KRR.Value)*1) + S["U2"] = S["10AS"]*Train.KV["U2-10AS"] + S["24"] = S["U2"]*Train.KSN.Value + S["2-7R-21"] = S["U2"]*1+(-1*max(0,Train:ReadTrainWire(18))) + S["2"] = S["10AK"]*Train.KV["10AK-2"]+Train.ALS_ARS["2"]+(-10*Train.KRU["2/3-ZM31"]) + S["3"] = S["U2"]*Train.KV["U2-3"]+(-10*Train.KRU["3/3-ZM31"]) + S["33Aa"] = S["10AS"]*Train.KV["10AS-33"]*S["33-33Aa"] + S["22V"] = S["22A"]*(1.0-Train.TRK.Value) + --S["10/4"] = S["B12"]*Train.VB.Value*Train.A56.Value+(1-Train.VB.Value)*Train:ReadTrainWire(10) + S["10/4"] = S["B12"]*Train.VB.Value+(1-Train.VB.Value)*Train:ReadTrainWire(10) + S["1P"] = S["1A"]*C((P == 1) or (P == 2))*S["1T-1P"]+T[2]*C((P == 3) or (P == 4)) + S["25"] = S["U2"]*Train.KV["U2-25"]*Train.K25.Value + S["1Zh"] = S["1P"]*Train.AVT.Value*(1.0-Train.RPvozvrat.Value)*S["1G-1Zh"] + S["8G"] = S["8A"]*(1.0-Train.RT2.Value)*S["8A-8Ye"] + S["11A"] = S["B2"]*(1.0-Train.RD.Value) + S["1-7R-31"] = S["B3"]*Train.KRU["14/1-B3"]*Train.KRP.Value + S["10AYa"] = S["B2"]--*Train.A80.Value + S["10AE"] = S["B2"]--*Train.A30.Value + S["20"] = S["U2"]*S["U2-20"]+Train.ALS_ARS["20"]+(-10*Train.KRU["20/3-ZM31"]) + S["10I"] = S["10AE"]*Train.RheostatController.RKM2 + S["10AH"] = S["10I"]*(1.0-Train.LK1.Value)+0 + S["10H"] = S["10I"]*Train.LK4.Value + S["10B"] = S["10AE"]*S["10AE-10B"] + S["10/4a"] = S["10/4"]*Train.VB.Value + S["22K"] = S["10/4"]--*Train.A10.Value + S["22E'"] = S["22K"]*Train.KU1.Value*Train.AK.Value*Train.AV8B.Value + S["U0"] = S["10/4"]--*Train.A27.Value + S["U0a"] = S["U0"]*1+(-10*S["10AN"]) + S["s3"] = S["U0"]*Train.DIPon.Value + S["s10"] = S["U0"]*Train.DIPoff.Value + S["F1"] = S["10/4"]*Train.KV["10/4-F1"] + S["D4"] = S["10/4"]*(1.00-Train.KSD.Value) + S["15"] = S["D4"]*Train.KV["D4-15"]+(-10*Train:ReadTrainWire(11)) + Train.KRU["14/1-B3"]*S["B3"]*20 + S["D4/3"] = S["D4"]*1 + --S["D1"] = S["10/4"]*Train.A21.Value*Train.KV["D-D1"]+(1*Train.KRU["11/3-D1/1"]*Train.KRU["14/1-B3"]*S["B3"]) + S["D1"] = S["10/4"]*Train.KV["D-D1"]+(1*Train.KRU["11/3-D1/1"]*Train.KRU["14/1-B3"]*S["B3"]) + S["11B"] = S["10/4"]*Train.KV["10/4-C3"]*(1.0-Train.NR.Value)+T[1]*1 + S["16"] = S["D1"]*Train.VUD1.Value*Train.VUD2.Value + S["F2a"] = S["F1"]--*Train.A7.Value + S["F1a"] = S["F1"]--*Train.A9.Value + S["ST/1+ST/2"] = S["D4/3"]*Train.BPT.Value + S["16V/1+16V/2"] = S["D4/3"]*(1.0-Train.RD.Value) + S["D6/1"] = S["D4/3"]*Train.BD.Value + S["1K"] = S["1Zh"]*C((P == 1) or (P == 2)) + S["1N"] = S["1Zh"]*C((P == 1) or (P == 3)) + S["10N"] = S["10AE"]*S["10N-10Zh"]*1+T["SDRK_ShortCircuit"] + S["31V"] = S["D1"]*S["D1-31V"] + S["10AG"] = S["10AYa"]*S["10E-10AG"]*S["10AYa-10E"] + S["2Ye10AV"] = S["10AYa"]*(1.0-Train.LK3.Value)*C((RK >= 2) and (RK <= 18))*(1.0-Train.LK4.Value)+0 + S["32V"] = S["D1"]*S["D1-32V"] + S["12"] = S["D1"]*Train.KRZD.Value + S["F7"] = S["10"]*Train.KV["F7-10"]+(1*Train.KRU["11/3-FR1"]*Train.KRU["14/1-B3"]*S["B3"]) + S["F7/1"] = S["10"]*Train.KV["F7-10"]+(1*Train.KRU["11/3-FR1"]*Train.KRU["14/1-B3"]*S["B3"]) + S["33G"] = 1*Train.ALS_ARS["33G"]+S["U2"]*Train.KV["U2-33G"] + --S["2Ye"] = Train.A2.Value*(1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value*Train.A39.Value)*S["2Zh-2A"]*Train.LK4.Value*S["2A-2G"]*Train:ReadTrainWire(2)+(S["2Ye10AV"]) + S["2Ye"] = (1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value)*S["2Zh-2A"]*Train.LK4.Value*S["2A-2G"]*Train:ReadTrainWire(2)+(S["2Ye10AV"]) + S["F13"] = S["F7"]--*Train.A46.Value + S["F10"] = S["F7/1"]*Train.VUS.Value--*Train.A47.Value + + + -- Call all triggers + T[4] = min(1,S["12A"]) + Train.Panel["RedLightRight"] = S["F2a"] + Train.RRP:TriggerInput("Set",Train:ReadTrainWire(14)*(1-Train.Rp8.Value)) + Train.RZ_2:TriggerInput("Set",S["24V"]) + Train.Panel["HeadLights2"] = S["F13"] + Triggers["ReverserForward"](S["5B"]) + Train:WriteTrainWire(2,S["2"]) + Train.Panel["TrainDoors"] = S["16V/1+16V/2"] + Train:WriteTrainWire(14,S["1-7R-31"]) + Train:WriteTrainWire(27,S["s3"]) + Train:WriteTrainWire(9,S["10/4a"]) + Train.RV1:TriggerInput("Set",S["2Ye"]) + Train.TR1:TriggerInput("Set",S["6A"]) + Train.SR1:TriggerInput("Set",S["2Ye"]) + Train.Panel["EmergencyLight"] = S["B12"] + Triggers["XR3.4"](S["36Ya"]) + Train.Panel["AVU"] = S["2-7R-24"] + Train.PneumaticNo2:TriggerInput("Set",S["8G"]) + Triggers["SDRK_Coil"](S["10B"]) + Train.RD:TriggerInput("Set",S["D6/1"]) + Triggers["XR3.6"](S["36Ya"]) + Train:WriteTrainWire(20,S["20"]) + Train:WriteTrainWire(32,S["32V"]) + T[6] = min(1,Train:ReadTrainWire(22)) + Train.KSH1:TriggerInput("Set",S["1R"]) + Train.Panel["KUP"] = S["B28"] + Train:WriteTrainWire(23,S["1-7R-29"]) + Triggers["XR3.7"](S["36Ya"]) + Train.Panel["TrainBrakes"] = S["ST/1+ST/2"] + Train:WriteTrainWire(31,S["31V"]) + Train.LK5:TriggerInput("Set",S["20B"]) + Train.LK1:TriggerInput("Set",S["1K"]) + Train:WriteTrainWire(4,S["4"]) + Train.VDOL:TriggerInput("Set",S["31A"]) + Triggers["SDRK"](S["10N"]) + Train.LK4:TriggerInput("Set",S["5B'"]) + Train:WriteTrainWire(16,S["16"]) + Train.R1_5:TriggerInput("Set",S["33V"]) + Train:WriteTrainWire(10,S["10/4a"]) + Triggers["XR3.2"](S["27A"]) + Train.KVC:TriggerInput("Set",S["B8"]) + T[8] = min(1,Train:ReadTrainWire(5)) + T[7] = min(1,S["5V"]) + Train.RVT:TriggerInput("Set",S["33G"]) + T[10] = min(1,Train:ReadTrainWire(29)) + Train.RPU:TriggerInput("Set",S["27A"]) + T[5] = min(1,S["22A"]) + Train:WriteTrainWire(25,S["25"]) + T[1] = min(1,S["28A"]) + Train.KK:TriggerInput("Set",S["22V"]) + Train:WriteTrainWire(5,S["5"]) + Triggers["RUTpod"](S["10H"]) + Train:WriteTrainWire(29,S["29"]) + Triggers["RRTpod"](S["10AH"]) + Train.Panel["GreenRP"] = S["U0a"] + Triggers["SDPP"](S["10AG"]) + Train.Panel["CabinLight"] = S["10ALa"] + T[2] = min(1,S["6A"]) + Triggers["XT3.1"](S["B13"]) + Triggers["XR3.3"](S["28A"]) + Train.KSB1:TriggerInput("Set",S["6Yu"]) + Triggers["RRTuderzh"](S["25A"]) + Train.Panel["V1"] = S["10/4"] + Train.RR:TriggerInput("Set",S["1N"]) + T[3] = min(1,S["12A"]) + Train:WriteTrainWire(8,S["8"]) + Train:WriteTrainWire(1,S["1"]) + Train.Panel["SD"] = S["15B"] + Train.TR2:TriggerInput("Set",S["6A"]) + Triggers["KPP"](S["27A"]) + Train:WriteTrainWire(24,S["24"]) + T[9] = min(1,S["8Zh"]) + Train:WriteTrainWire(3,S["3"]) + Train:WriteTrainWire(15,S["15"]) + Train.LK3:TriggerInput("Set",S["1Zh"]) + Train.KUP:TriggerInput("Set",S["B22"]) + Train.Rper:TriggerInput("Set",S["3A"]) + Train.Panel["RedRP"] = S["2-7R-21"] + Train:WriteTrainWire(18,S["18A"]) + Triggers["RPvozvrat"](S["17A"]) + Train.VDZ:TriggerInput("Set",S["16V"]) + Train.Panel["RedLightLeft"] = S["F1a"] + Train.KD:TriggerInput("Set",S["15B"]) + Train.LK2:TriggerInput("Set",S["20B"]) + Train.KSH2:TriggerInput("Set",S["1R"]) + Train.PneumaticNo1:TriggerInput("Set",S["8Zh"]) + Train.K25:TriggerInput("Set",Train.ALS_ARS["33Zh"]) + Train.KSB2:TriggerInput("Set",S["6Yu"]) + Train.RUP:TriggerInput("Set",S["6Yu"]) + Train:WriteTrainWire(17,S["1-7R-8"]) + Train.Panel["TrainRP"] = S["2-7R-21"] + Train.Panel["Ring"] = S["11B"] + Train:WriteTrainWire(28,S["s10"]) + Triggers["ReverserBackward"](S["4B"]) + Train.RV2:TriggerInput("Set",S["33Aa"]) + Train.Panel["HeadLights1"] = S["F10"] + Train:WriteTrainWire(11,S["11A"]) + Train.Panel["HeadLights3"] = S["F13"] + Train:WriteTrainWire(22,S["22E'"]) + Train.VDOP:TriggerInput("Set",S["32A"]) + Train:WriteTrainWire(6,S["6"]) + Train:WriteTrainWire(12,S["12"]) + return S +end + +function TRAIN_SYSTEM.SolveEzh3RU1(Train,Triggers) + local P = Train.PositionSwitch.SelectedPosition + local RK = Train.RheostatController.SelectedPosition + local B = (Train.Battery.Voltage > 55) and 1 or 0 + local T = Train.SolverTemporaryVariables + if not T then + T = {} + for i=1,100 do T[i] = 0 end + Train.SolverTemporaryVariables = T + end + + -- Solve all circuits + T["SDRK_ShortCircuit"] = -10*Train.RheostatController.RKP*(Train.RUT.Value+Train.RRT.Value+(1.0-Train.SR1.Value) ) + Triggers["SDRK_Shunt"]( 1.0 - (0.20+0.20*C((RK >= 2) and (RK <= 7))*C(P == 1))*Train.LK2.Value ) + S["33-33Aa"] = Train.KD.Value+Train.VAD.Value + S["U2-20"] = Train.KV["U2-20a"]+Train.KV["U2-20b"] + S["31V'-31V"] = (Train.KDL.Value+Train.VDL.Value)*(1-Train.ASNP31.Value) + S["10AK-VAH1"] = Train.VAH.Value+Train.RPB.Value + S["33B-33AVU"] = Train.AVU.Value+Train.OtklAVU.Value + S["1T-1P"] = Train.NR.Value+Train.RPU.Value + S["2Zh-2A"] = (1.0-Train.KSB1.Value)+(1.0-Train.TR1.Value) + S["2Zh-2A"] = Train.ThyristorBU5_6.Value+S["2Zh-2A"] + S["8A-8Ye"] = C(RK == 1)+(1.0-Train.LK4.Value) + S["15A-15B"] = Train.KV["15A-15B"]+Train.KD.Value + S["10AYa-10E"] = (1.0-Train.LK3.Value)+Train.Rper.Value + S["10AP-10AD"] = Train.LK2.Value+C((P == 3) or (P == 4)) + S["10AE-10B"] = Train.TR1.Value+Train.RV1.Value + S["D1-32V"] = (1*Train.KDP.Value+Train.ALS_ARS["32"])*(1-Train.ASNP32.Value) + S["TW[15]-15A"] = Train.KRU["15/2-D8"]*Train.KV["D8-15A"]+1 + S["1E-1Yu"] = Train.KSH2.Value+Train.KSB2.Value*Train.KSB1.Value + S["2V-2G"] = C((RK >= 5) and (RK <= 18))+C((RK >= 2) and (RK <= 4))*Train.KSH1.Value + S["10-8"] = Train.KV["10-8"]+(1.0-Train.VAH.Value)*Train.KV["FR1-10"]*(1.0-Train.RPB.Value) + S["10AG-10AD"] = (1.0-Train.TR1.Value)*C((P == 2) or (P == 3) or (P == 4))*(1.0-Train.TR2.Value)+Train.TR2.Value*Train.TR1.Value*C((P == 1) or (P == 2) or (P == 4)) + S["1G-1Zh"] = Train.LK3.Value+C((P == 1) or (P == 3))*Train.LK5.Value*C(RK == 1)*S["1E-1Yu"] + S["10N-10Zh"] = (1.0-Train.RRT.Value)*(1.0-Train.RUT.Value)*Train.SR1.Value+Train.RheostatController.RKM1 + S["10E-10AG"] = (1.0-Train.LK1.Value)*S["10AP-10AD"]*S["10AG-10AD"]+C(RK == 18)*C((P == 1))*Train.LK3.Value + S["1A-1M"] = C((RK >= 1) and (RK <= 5))+C(RK == 6)*Train.RheostatController.RKM1 + S["2A-2G"] = C((P == 1) or (P == 3))*C((RK >= 1) and (RK <= 17))+C((P == 2) or (P == 4))*S["2V-2G"] + S["D1-31V"] = (Train.ALS_ARS["31"]+1*S["31V'-31V"]) + S["1A-1R"] = (1.0-Train.RV1.Value)*C((P == 1))+C((P == 2))*S["1A-1M"] + S["10"] = 1*Train:ReadTrainWire(10) + S["FR1/2"] = S["10"]*Train.KV["FR1-10"] + S["15B"] = S["TW[15]-15A"]*S["15A-15B"]*Train:ReadTrainWire(15) + S["10AL"] = S["10"]*Train.VU.Value + Train.VU:TriggerInput("Check",S["10AL"]) if Train.VU.Value < 0.5 then S["10AL"] = 0 end + S["10ALa"] = S["10AL"]*Train.A64.Value + --Train.A64.TriggerInput("Check",S["10ALa"]) if Train.A64.Value < 0.5 then S["10ALa"] = 0 end --if Train.A.Value < 0.5 then S[""] = 0 end + S["Sh1-43"] = S["10AL"]*Train.A45.Value + --Train.A45.TriggerInput("Check",S["Sh1-43"]) if Train.A45.Value < 0.5 then S["Sh1-43"] = 0 end + S["10AS"] = S["10AL"]*Train.A55.Value + --Train.A55.TriggerInput("Check",S["10AS"]) if Train.A55.Value < 0.5 then S["10AS"] = 0 end + S["10AK"] = S["10AL"]*Train.A54.Value + --Train.A54.TriggerInput("Check",S["10AK"]) if Train.A54.Value < 0.5 then S["10AK"] = 0 end + S["6P"] = S["10AL"]*Train.A61.Value + --Train.A61.TriggerInput("Check",S["6P"]) if Train.A61.Value < 0.5 then S["6P"] = 0 end + S["6"] = S["6P"]*Train.RVT.Value + S["2-7R-24"] = S["6P"]*(1.0-Train.AVU.Value) + S["29"] = S["2-7R-24"]*(1.0-Train.OtklAVU.Value)+Train.ALS_ARS["29"] + S["22A"] = Train.A23.Value*1*Train:ReadTrainWire(23)+T[6]*Train.A22.Value + --Train.A22.TriggerInput("Check",S["22A"]) if Train.A22.Value < 0.5 then S["22A"] = 0 end + --Train.A23.TriggerInput("Check",S["22A"]) if Train.A23.Value < 0.5 then S["22A"] = 0 end + S["10AN"] = (1.0-Train.RPvozvrat.Value)*Train.A14.Value*1*1 + --Train.A14.TriggerInput("Check",S["10AN"]) if Train.A14.Value < 0.5 then S["10AN"] = 0 end + S["1-7R-8"] = S["10AS"]*Train.KV["10AS-U4"]*Train.VozvratRP.Value + S["1A"] = Train.A1.Value*(1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value*Train.A39.Value)*Train:ReadTrainWire(1) + --Train.A1.TriggerInput("Check",S["1A"]) if Train.A1.Value < 0.5 then S["1A"] = 0 end + --Train.A39.TriggerInput("Check",S["1A"]) if Train.A39.Value < 0.5 then S["1A"] = 0 end + S["3A"] = Train.A3.Value*(1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value*Train.A39.Value)*Train:ReadTrainWire(3) + --Train.A1.TriggerInput("Check",S["3A"]) if Train.A1.Value < 0.5 then S["3A"] = 0 end + --Train.A39.TriggerInput("Check",S["3A"]) if Train.A39.Value < 0.5 then S["3A"] = 0 end + S["33V"] = S["10AK"]*Train.RV2.Value*S["10AK-VAH1"]*1*S["33B-33AVU"] + S["1R"] = S["1A"]*S["1A-1R"] + S["20B"] = (1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value*Train.A39.Value)*(1.0-Train.RPvozvrat.Value)*Train.A20.Value*Train:ReadTrainWire(20) + --Train.A39.TriggerInput("Check",S["20B"]) if Train.A39.Value < 0.5 then S["20B"] = 0 end + --Train.A20.TriggerInput("Check",S["20B"]) if Train.A20.Value < 0.5 then S["20B"] = 0 end + S["4B"] = (1.0-Train.RKR.Value)*Train:ReadTrainWire(4) + S["5B"] = Train.RKR.Value*Train:ReadTrainWire(5) + S["5V"] = Train.RKR.Value*Train:ReadTrainWire(4)+T[8]*(1.0-Train.RKR.Value) + S["5B'"] = S["5V"]*Train.LK3.Value + S["6A"] = Train.A6.Value*Train:ReadTrainWire(6) + --Train.A6.TriggerInput("Check",S["6A"]) if Train.A6.Value < 0.5 then S["6A"] = 0 end + S["B12"] = 1*Train.VB.Value*B + S["8A"] = Train.A8.Value*Train:ReadTrainWire(8) + --Train.A8.TriggerInput("Check",S["8A"]) if Train.A8.Value < 0.5 then S["8A"] = 0 end + S["8Zh"] = S["8A"]*C((RK >= 17) and (RK <= 18))+T[10]*1 + S["12A"] = Train.A12.Value*Train:ReadTrainWire(12) + --Train.A12.TriggerInput("Check",S["12A"]) if Train.A12.Value < 0.5 then S["12A"] = 0 end + S["1"] = S["10AS"]*Train.R1_5.Value*Train.KV["10AS-33D"]*Train.ALS_ARS["33D"]+(-10*Train.KRU["1/3-ZM31"]) + S["8"] = S["10"]*S["10-8"]+Train.ALS_ARS["8"] + S["16V"] = Train.A16.Value*(1.0-Train.RD.Value)*Train:ReadTrainWire(16) + --Train.A16.TriggerInput("Check",S["16V"]) if Train.A16.Value < 0.5 then S["16V"] = 0 end + S["6Yu"] = S["6A"]*C((P == 3) or (P == 4))*C((RK >= 1) and (RK <= 2)) + S["17A"] = Train.A17.Value*Train:ReadTrainWire(17) + --Train.A17.TriggerInput("Check",S["17A"]) if Train.A17.Value < 0.5 then S["17A"] = 0 end + S["24V"] = (1.0-Train.LK4.Value)*Train:ReadTrainWire(24) + --Train.A24.TriggerInput("Check",S["24V"]) if Train.A24.Value < 0.5 then S["24V"] = 0 end + S["25A"] = Train.A25.Value*Train:ReadTrainWire(25) + --Train.A25.TriggerInput("Check",S["25A"]) if Train.A25.Value < 0.5 then S["25A"] = 0 end + S["27A"] = Train.A50.Value*Train:ReadTrainWire(27) + --Train.A50.TriggerInput("Check",S["27A"]) if Train.A50.Value < 0.5 then S["27A"] = 0 end + S["28A"] = Train.A51.Value*Train:ReadTrainWire(28) + --Train.A51.TriggerInput("Check",S["28A"]) if Train.A51.Value < 0.5 then S["28A"] = 0 end + S["31A"] = Train.A31.Value*Train:ReadTrainWire(31)+T[3]*1 + --Train.A31.TriggerInput("Check",S["31A"]) if Train.A31.Value < 0.5 then S["31A"] = 0 end + S["32A"] = Train.A32.Value*Train:ReadTrainWire(32)+T[4]*1 + --Train.A32.TriggerInput("Check",S["32A"]) if Train.A32.Value < 0.5 then S["32A"] = 0 end + S["B2"] = 1*Train.VB.Value*B + S["18A"] = (1.0-Train.RPvozvrat.Value)*Train.A14.Value*1+(-0.5*(1.0-Train.LK4.Value)) + --Train.A14.TriggerInput("Check",S["18A"]) if Train.A14.Value < 0.5 then S["18A"] = 0 end + S["B8"] = S["B2"]*Train.A53.Value + --Train.A53.TriggerInput("Check",S["B8"]) if Train.A53.Value < 0.5 then S["B8"] = 0 end + S["B22"] = S["B8"]*Train.A75.Value + --Train.A75.TriggerInput("Check",S["B22"]) if Train.A75.Value < 0.5 then S["B22"] = 0 end + S["B28"] = S["B8"]*Train.KUP.Value + S["36Ya"] = S["B8"]*Train.KVC.Value + S["B13"] = S["B12"]*Train.A24.Value + --Train.A24.TriggerInput("Check",S["B13"]) if Train.A24.Value < 0.5 then S["B13"] = 0 end + S["B3"] = S["B2"]*Train.A44.Value + --Train.A44.TriggerInput("Check",S["B3"]) if Train.A44.Value < 0.5 then S["B3"] = 0 end + S["1-7R-29"] = S["B3"]*Train.RezMK.Value + S["4"] = S["10AK"]*Train.KV["10AK-4"] + S["5"] = S["10AK"]*Train.KV["10AK-5"]+(-10*Train.KRU["5/3-ZM31"]*0 + Train.KRU["14/1-B3"]*S["B3"]*1) + S["U2"] = S["10AS"]*Train.KV["U2-10AS"] + S["24"] = S["U2"]*Train.KSN.Value + S["2-7R-21"] = S["U2"]*1+(-1*max(0,Train:ReadTrainWire(18))) + S["2"] = S["10AK"]*Train.KV["10AK-2"]+Train.ALS_ARS["2"]+(-10*Train.KRU["2/3-ZM31"]) + S["3"] = S["U2"]*Train.KV["U2-3"]+(-10*Train.KRU["3/3-ZM31"]) + S["33Aa"] = S["10AS"]*Train.KV["10AS-33"]*S["33-33Aa"] + S["22V"] = S["22A"]*(1.0-Train.TRK.Value) + S["10/4"] = S["B12"]*Train.VB.Value*Train.A56.Value+(1-Train.VB.Value)*Train:ReadTrainWire(10) + --Train.A56.TriggerInput("Check",S["10/4"]) if Train.A56.Value < 0.5 then S["10/4"] = 0 end + S["1P"] = S["1A"]*C((P == 1) or (P == 2))*S["1T-1P"]+T[2]*C((P == 3) or (P == 4)) + S["25"] = S["U2"]*Train.KV["U2-25"]*Train.K25.Value + S["1Zh"] = S["1P"]*Train.AVT.Value*(1.0-Train.RPvozvrat.Value)*S["1G-1Zh"] + S["8G"] = S["8A"]*(1.0-Train.RT2.Value)*S["8A-8Ye"] + S["11A"] = S["B2"]*(1.0-Train.RD.Value) + S["1-7R-31"] = S["B3"]*Train.KRU["14/1-B3"]*Train.KRP.Value + S["10AYa"] = S["B2"]*Train.A80.Value + --Train.A80.TriggerInput("Check",S["10AYa"]) if Train.A80.Value < 0.5 then S["10AYa"] = 0 end + S["10AE"] = S["B2"]*Train.A30.Value + --Train.A30.TriggerInput("Check",S["10AE"]) if Train.A30.Value < 0.5 then S["10AE"] = 0 end + S["20"] = S["U2"]*S["U2-20"]+Train.ALS_ARS["20"]+(-10*Train.KRU["20/3-ZM31"]) + S["10I"] = S["10AE"]*Train.RheostatController.RKM2 + S["10AH"] = S["10I"]*(1.0-Train.LK1.Value)+0 + S["10H"] = S["10I"]*Train.LK4.Value + S["10B"] = S["10AE"]*S["10AE-10B"] + S["10/4a"] = S["10/4"]*Train.VB.Value + S["22K"] = S["10/4"]*Train.A10.Value + --Train.A10.TriggerInput("Check",S["22K"]) if Train.A10.Value < 0.5 then S["22K"] = 0 end + S["22E'"] = S["22K"]*Train.VMK.Value*Train.AK.Value + S["U0"] = S["10/4"]*Train.A27.Value + --Train.A27.TriggerInput("Check",S["U0"]) if Train.A27.Value < 0.5 then S["U0"] = 0 end + S["U0a"] = S["U0"]*1+(-10*S["10AN"]) + S["s3"] = S["U0"]*Train.DIPon.Value + S["s10"] = S["U0"]*Train.DIPoff.Value + S["F1"] = S["10/4"]*Train.KV["10/4-F1"] + S["D4"] = S["10/4"]*Train.A13.Value + --Train.A13.TriggerInput("Check",S["D4"]) if Train.A13.Value < 0.5 then S["D4"] = 0 end + S["15"] = S["D4"]*Train.KV["D4-15"]+(-10*Train:ReadTrainWire(11)) + Train.KRU["14/1-B3"]*S["B3"]*20 + S["D4/3"] = S["D4"]*1 + S["D1"] = S["10/4"]*Train.A21.Value*Train.KV["D-D1"]+(1*Train.KRU["11/3-D1/1"]*Train.KRU["14/1-B3"]*S["B3"]) + --Train.A21.TriggerInput("Check",S["D1"]) if Train.A21.Value < 0.5 then S["D1"] = 0 end + S["11B"] = S["10/4"]*Train.KV["10/4-C3"]*(1.0-Train.NR.Value)+T[1]*1 + S["16"] = S["D1"]*Train.VUD1.Value*Train.VUD2.Value + S["F2a"] = S["F1"]*Train.A7.Value + --Train.A7.TriggerInput("Check",S["F2a"]) if Train.A7.Value < 0.5 then S["F2a"] = 0 end + S["F1a"] = S["F1"]*Train.A9.Value + --Train.A9.TriggerInput("Check",S["F1a"]) if Train.A9.Value < 0.5 then S["F1a"] = 0 end + S["ST/1+ST/2"] = S["D4/3"]*Train.BPT.Value + S["16V/1+16V/2"] = S["D4/3"]*(1.0-Train.RD.Value) + S["D6/1"] = S["D4/3"]*Train.BD.Value + S["1K"] = S["1Zh"]*C((P == 1) or (P == 2)) + S["1N"] = S["1Zh"]*C((P == 1) or (P == 3)) + S["10N"] = S["10AE"]*S["10N-10Zh"]*1+T["SDRK_ShortCircuit"] + S["31V"] = S["D1"]*S["D1-31V"] + S["10AG"] = S["10AYa"]*S["10E-10AG"]*S["10AYa-10E"] + S["2Ye10AV"] = S["10AYa"]*(1.0-Train.LK3.Value)*C((RK >= 2) and (RK <= 18))*(1.0-Train.LK4.Value)+0 + S["32V"] = S["D1"]*S["D1-32V"] + S["12"] = S["D1"]*Train.KRZD.Value + S["F7"] = S["10"]*Train.KV["F7-10"]+(1*Train.KRU["11/3-FR1"]*Train.KRU["14/1-B3"]*S["B3"]) + S["F7/1"] = S["10"]*Train.KV["F7-10"]+(1*Train.KRU["11/3-FR1"]*Train.KRU["14/1-B3"]*S["B3"]) + S["33G"] = 1*Train.ALS_ARS["33G"]+S["U2"]*Train.KV["U2-33G"] + S["2Ye"] = Train.A2.Value*(1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value*Train.A39.Value)*S["2Zh-2A"]*Train.LK4.Value*S["2A-2G"]*Train:ReadTrainWire(2)+(S["2Ye10AV"]) + --Train.A2.TriggerInput("Check",S["2Ye"]) if Train.A2.Value < 0.5 then S["2Ye"] = 0 end + --Train.A39.TriggerInput("Check",S["2Ye"]) if Train.A39.Value < 0.5 then S["2Ye"] = 0 end + S["F13"] = S["F7"]*Train.A46.Value + --Train.A46.TriggerInput("Check",S["F13"]) if Train.A46.Value < 0.5 then S["F13"] = 0 end + S["F10"] = S["F7/1"]*Train.VUS.Value*Train.A47.Value + --Train.A47.TriggerInput("Check",S["F10"]) if Train.A47.Value < 0.5 then S["F10"] = 0 end + --Train.A.TriggerInput("Check",S[""]) + + -- Call all triggers + T[4] = min(1,S["12A"]) + Train.Panel["RedLightRight"] = S["F2a"] + Train.RRP:TriggerInput("Set",Train:ReadTrainWire(14)*(1-Train.Rp8.Value)) + Train.RZ_2:TriggerInput("Set",S["24V"]) + Train.Panel["HeadLights2"] = S["F13"] + Triggers["ReverserForward"](S["5B"]) + Train:WriteTrainWire(2,S["2"]) + Train.Panel["TrainDoors"] = S["16V/1+16V/2"] + Train:WriteTrainWire(14,S["1-7R-31"]) + Train:WriteTrainWire(27,S["s3"]) + Train:WriteTrainWire(9,S["10/4a"]) + Train.RV1:TriggerInput("Set",S["2Ye"]) + Train.TR1:TriggerInput("Set",S["6A"]) + Train.SR1:TriggerInput("Set",S["2Ye"]) + Train.Panel["EmergencyLight"] = S["B12"] + Triggers["XR3.4"](S["36Ya"]) + Train.Panel["AVU"] = S["2-7R-24"] + Train.PneumaticNo2:TriggerInput("Set",S["8G"]) + Triggers["SDRK_Coil"](S["10B"]) + Train.RD:TriggerInput("Set",S["D6/1"]) + Triggers["XR3.6"](S["36Ya"]) + Train:WriteTrainWire(20,S["20"]) + Train:WriteTrainWire(32,S["32V"]) + T[6] = min(1,Train:ReadTrainWire(22)) + Train.KSH1:TriggerInput("Set",S["1R"]) + Train.Panel["KUP"] = S["B28"] + Train:WriteTrainWire(23,S["1-7R-29"]) + Triggers["XR3.7"](S["36Ya"]) + Train.Panel["TrainBrakes"] = S["ST/1+ST/2"] + Train:WriteTrainWire(31,S["31V"]) + Train.LK5:TriggerInput("Set",S["20B"]) + Train.LK1:TriggerInput("Set",S["1K"]) + Train:WriteTrainWire(4,S["4"]) + Train.VDOL:TriggerInput("Set",S["31A"]) + Triggers["SDRK"](S["10N"]) + Train.LK4:TriggerInput("Set",S["5B'"]) + Train:WriteTrainWire(16,S["16"]) + Train.R1_5:TriggerInput("Set",S["33V"]) + Train:WriteTrainWire(10,S["10/4a"]) + Triggers["XR3.2"](S["27A"]) + Train.KVC:TriggerInput("Set",S["B8"]) + T[8] = min(1,Train:ReadTrainWire(5)) + T[7] = min(1,S["5V"]) + Train.RVT:TriggerInput("Set",S["33G"]) + T[10] = min(1,Train:ReadTrainWire(29)) + Train.RPU:TriggerInput("Set",S["27A"]) + T[5] = min(1,S["22A"]) + Train:WriteTrainWire(25,S["25"]) + T[1] = min(1,S["27A"]) + Train.KK:TriggerInput("Set",S["22V"]) + Train:WriteTrainWire(5,S["5"]) + Triggers["RUTpod"](S["10H"]) + Train:WriteTrainWire(29,S["29"]) + Triggers["RRTpod"](S["10AH"]) + Train.Panel["GreenRP"] = S["U0a"] + Triggers["SDPP"](S["10AG"]) + Train.Panel["CabinLight"] = S["10ALa"] + T[2] = min(1,S["6A"]) + Triggers["XT3.1"](S["B13"]) + Triggers["XR3.3"](S["28A"]) + Train.KSB1:TriggerInput("Set",S["6Yu"]) + Triggers["RRTuderzh"](S["25A"]) + Train.Panel["V1"] = S["10/4"] + Train.RR:TriggerInput("Set",S["1N"]) + T[3] = min(1,S["12A"]) + Train:WriteTrainWire(8,S["8"]) + Train:WriteTrainWire(1,S["1"]) + Train.Panel["SD"] = S["15B"] + Train.TR2:TriggerInput("Set",S["6A"]) + Triggers["KPP"](S["27A"]) + Train:WriteTrainWire(24,S["24"]) + T[9] = min(1,S["8Zh"]) + Train:WriteTrainWire(3,S["3"]) + Train:WriteTrainWire(15,S["15"]) + Train.LK3:TriggerInput("Set",S["1Zh"]) + Train.KUP:TriggerInput("Set",S["B22"]) + Train.Rper:TriggerInput("Set",S["3A"]) + Train.Panel["RedRP"] = S["2-7R-21"] + Train:WriteTrainWire(18,S["18A"]) + Triggers["RPvozvrat"](S["17A"]) + Train.VDZ:TriggerInput("Set",S["16V"]) + Train.Panel["RedLightLeft"] = S["F1a"] + Train.KD:TriggerInput("Set",S["15B"]) + Train.LK2:TriggerInput("Set",S["20B"]) + Train.KSH2:TriggerInput("Set",S["1R"]) + Train.PneumaticNo1:TriggerInput("Set",S["8Zh"]) + Train.K25:TriggerInput("Set",Train.ALS_ARS["33Zh"]) + Train.KSB2:TriggerInput("Set",S["6Yu"]) + Train.RUP:TriggerInput("Set",S["6Yu"]) + Train:WriteTrainWire(17,S["1-7R-8"]) + Train.Panel["TrainRP"] = S["2-7R-21"] + Train.Panel["Ring"] = S["11B"] + Train:WriteTrainWire(28,S["s10"]) + Triggers["ReverserBackward"](S["4B"]) + Train.RV2:TriggerInput("Set",S["33Aa"]) + Train.Panel["HeadLights1"] = S["F10"] + Train:WriteTrainWire(11,S["11A"]) + Train.Panel["HeadLights3"] = S["F13"] + Train:WriteTrainWire(22,S["22E'"]) + Train.VDOP:TriggerInput("Set",S["32A"]) + Train:WriteTrainWire(6,S["6"]) + Train:WriteTrainWire(12,S["12"]) + return S +end + +function TRAIN_SYSTEM.SolveEma508(Train,Triggers) + local P = Train.PositionSwitch.SelectedPosition + local RK = Train.RheostatController.SelectedPosition + local B = (Train.Battery.Voltage > 55) and 1 or 0 + local T = Train.SolverTemporaryVariables + if not T then + T = {} + for i=1,100 do T[i] = 0 end + Train.SolverTemporaryVariables = T + end + + -- Solve all circuits + T["SDRK_ShortCircuit"] = -10*Train.RheostatController.RKP*(Train.RUT.Value+Train.RRT.Value+(1.0-Train.SR1.Value) ) + Triggers["SDRK_Shunt"]( 1.0 - (0.20+0.20*C((RK >= 2) and (RK <= 7))*C(P == 1))*Train.LK2.Value ) + S["1T-1P"] = Train.NR.Value+Train.RPU.Value + S["2Zh-2A"] = (1.0-Train.KSB1.Value)+(1.0-Train.TR1.Value) + S["2Zh-2A"] = Train.ThyristorBU5_6.Value+S["2Zh-2A"] + S["8A-8Ye"] = C(RK == 1)+(1.0-Train.LK4.Value) + S["10AYa-10E"] = (1.0-Train.LK3.Value)+Train.Rper.Value + S["10AP-10AD"] = Train.LK2.Value+C((P == 3) or (P == 4)) + S["10AE-10B"] = Train.TR1.Value+Train.RV1.Value + S["2V-2G"] = C((RK >= 5) and (RK <= 18))+C((RK >= 2) and (RK <= 4))*Train.KSH1.Value + S["1E-1Yu"] = Train.KSH2.Value+Train.KSB2.Value*Train.KSB1.Value + S["10Zh-10N"] = Train.RheostatController.RKM1+(1.0-Train.RUT.Value)*Train.SR1.Value*(1.0-Train.RRT.Value) + S["1G-1Zh"] = Train.LK3.Value+C((P == 1) or (P == 3))*Train.LK5.Value*C(RK == 1)*S["1E-1Yu"] + S["10AG-10AD"] = C((P == 2) or (P == 3) or (P == 4))*(1.0-Train.TR2.Value)*(1.0-Train.TR1.Value)+Train.TR2.Value*Train.TR1.Value*C((P == 1) or (P == 2) or (P == 4)) + S["1A-1M"] = C((RK >= 1) and (RK <= 5))+C(RK == 6)*Train.RheostatController.RKM1 + S["10E-10AG"] = Train.LK3.Value*C(RK == 18)*C((P == 1))+S["10AG-10AD"]*S["10AP-10AD"]*(1.0-Train.LK1.Value) + S["1A-1R"] = (1.0-Train.RV1.Value)*C((P == 1))+C((P == 2))*S["1A-1M"] + S["2A-2G"] = C((P == 2) or (P == 4))*S["2V-2G"]+C((P == 1) or (P == 3))*C((RK >= 1) and (RK <= 17)) + S["10"] = 1*Train:ReadTrainWire(10) + S["3A"] = Train.A3.Value*(1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value*Train.A39.Value)*Train:ReadTrainWire(3) + S["4B"] = (1.0-Train.RKR.Value)*Train:ReadTrainWire(4) + S["5B"] = Train.RKR.Value*Train:ReadTrainWire(5) + S["5V"] = Train.RKR.Value*Train:ReadTrainWire(4)+T[37]*(1.0-Train.RKR.Value) + S["5B'"] = S["5V"]*Train.LK3.Value + S["6A"] = Train.A6.Value*Train:ReadTrainWire(6) + S["8A"] = Train.A8.Value*Train:ReadTrainWire(8) + S["8Zh"] = S["8A"]*C((RK >= 17) and (RK <= 18))+T[39]*1 + S["12A"] = Train.A12.Value*Train:ReadTrainWire(12) + S["10AN"] = 1*(1.0-Train.RPvozvrat.Value)*Train.A14.Value*1 + S["16V"] = Train.A16.Value*(1.0-Train.RD.Value)*Train:ReadTrainWire(16) + S["1A"] = Train.A1.Value*(1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value*Train.A39.Value)*Train:ReadTrainWire(1) + S["17A"] = Train.A17.Value*Train:ReadTrainWire(17) + S["6Yu"] = S["6A"]*C((P == 3) or (P == 4))*C((RK >= 1) and (RK <= 2)) + S["24V"] = (1.0-Train.LK4.Value)*Train:ReadTrainWire(24) + S["25A"] = Train.A25.Value*Train:ReadTrainWire(25) + S["27A"] = Train.A50.Value*Train:ReadTrainWire(27) + S["28A"] = Train.A51.Value*Train:ReadTrainWire(28) + S["31A"] = Train.A31.Value*Train:ReadTrainWire(31)+T[32]*1 + S["32A"] = Train.A32.Value*Train:ReadTrainWire(32)+T[33]*1 + S["18A"] = (1.0-Train.RPvozvrat.Value)*Train.A14.Value*1+(-0.5*(1.0-Train.LK4.Value)) + S["B2"] = 1*Train.VB.Value*B + S["8G"] = S["8A"]*(1.0-Train.RT2.Value)*S["8A-8Ye"] + S["22A"] = Train.A23.Value*1*Train:ReadTrainWire(23)+T[35]*Train.A22.Value + S["B12"] = 1*Train.VB.Value*B + S["20B"] = Train.A20.Value*(1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value*Train.A39.Value)*(1.0-Train.RPvozvrat.Value)*Train:ReadTrainWire(20) + S["B8"] = S["B2"]*Train.A53.Value + S["B22"] = S["B8"]*Train.A75.Value + S["B28"] = S["B8"]*Train.KUP.Value + S["36Ya"] = S["B8"]*Train.KVC.Value + S["B13"] = S["B12"]*Train.A24.Value + S["1R"] = S["1A"]*S["1A-1R"] + S["22V"] = S["22A"]*(1.0-Train.TRK.Value) + S["1P"] = S["1A"]*C((P == 1) or (P == 2))*S["1T-1P"]+T[31]*C((P == 3) or (P == 4)) + S["11A"] = S["B2"]*(1.0-Train.RD.Value) + S["10/4"] = S["B12"]*Train.VB.Value*Train.A56.Value + S["10AYa"] = S["B2"]*Train.A80.Value + S["10AE"] = S["B2"]*Train.A30.Value + S["10I"] = S["10AE"]*Train.RheostatController.RKM2 + S["10AH"] = S["10I"]*(1.0-Train.LK1.Value) + S["10H"] = S["10I"]*Train.LK4.Value + S["10B"] = S["10AE"]*S["10AE-10B"] + S["22K"] = S["10/4"]*Train.A10.Value + S["22E'"] = S["22K"]*Train.VMK.Value*Train.AK.Value + S["1Zh"] = S["1P"]*Train.AVT.Value*(1.0-Train.RPvozvrat.Value)*S["1G-1Zh"] + S["D4/3"] = S["10/4"]*Train.A13.Value*1 + S["2Ye10AV"] = S["10AYa"]*(1.0-Train.LK4.Value)*(1.0-Train.LK3.Value)*C((RK >= 2) and (RK <= 18))+0 + S["10/4a"] = S["10/4"]*Train.VB.Value + S["D"] = S["10/4"]*Train.A21.Value + S["10AK"] = S["10/4"]*Train.A54.Value + S["1/1p"] = S["10AK"]*Train.PMP["3-4"] + S["20/1p"] = S["10AK"]*Train.PMP["9-10"] + S["10AKl"] = S["10AK"]*Train.KRP.Value + S["4/1p"] = S["10AKl"]*Train.PMP["5-6"] + S["5/1p"] = S["10AKl"]*Train.PMP["7-8"] + S["10N"] = S["10AE"]*1*S["10Zh-10N"]+T["SDRK_ShortCircuit"] + S["ST/1+ST/2"] = S["D4/3"]*Train.BPT.Value + S["16V/1+16V/2"] = S["D4/3"]*(1.0-Train.RD.Value) + S["D6/1"] = S["D4/3"]*Train.BD.Value + S["U0"] = S["10/4"]*Train.A27.Value + S["U0a"] = S["U0"]*1+(-10*S["10AN"]) + S["s3"] = S["U0"]*Train.BPSNon.Value*(1-Train:ReadTrainWire(35)) + S["1K"] = S["1Zh"]*C((P == 1) or (P == 2)) + S["1N"] = S["1Zh"]*C((P == 1) or (P == 3)) + S["10AG"] = S["10AYa"]*S["10E-10AG"]*S["10AYa-10E"] + S["1-7R-29"] = S["U0"]*Train.A23.Value*Train.RezMK.Value + S["17/1p"] = S["10AK"]*(1.0-Train.KRP.Value)*Train.VozvratRP.Value + S["2Ye"] = S["2A-2G"]*Train.LK4.Value*Train.A2.Value*(1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value*Train.A39.Value)*S["2Zh-2A"]*Train:ReadTrainWire(2)+(S["2Ye10AV"]) + + -- Call all triggers + Train.RRP:TriggerInput("Set",Train:ReadTrainWire(14)) + Train.RZ_2:TriggerInput("Set",S["24V"]) + Triggers["ReverserForward"](S["5B"]) + Train.Panel["TrainDoors"] = S["16V/1+16V/2"] + Train.PneumaticNo1:TriggerInput("Set",S["8Zh"]) + Train:WriteTrainWire(27,S["s3"]) + Train:WriteTrainWire(9,S["10/4a"]) + Train.RV1:TriggerInput("Set",S["2Ye"]) + T[37] = min(1,Train:ReadTrainWire(5)) + Train.TR1:TriggerInput("Set",S["6A"]) + Train.SR1:TriggerInput("Set",S["2Ye"]) + T[34] = min(1,S["22A"]) + Train.Panel["EmergencyLight"] = S["B12"] + Triggers["XR3.4"](S["36Ya"]) + Train.PneumaticNo2:TriggerInput("Set",S["8G"]) + Triggers["SDRK_Coil"](S["10B"]) + Triggers["RPvozvrat"](S["17A"]) + Triggers["XR3.6"](S["36Ya"]) + Train:WriteTrainWire(20,S["20/1p"]) + Triggers["XR3.2"](S["27A"]) + Train.KSH1:TriggerInput("Set",S["1R"]) + Train.Panel["KUP"] = S["B28"] + Train:WriteTrainWire(23,S["1-7R-29"]) + Triggers["XR3.7"](S["36Ya"]) + Train.Panel["TrainBrakes"] = S["ST/1+ST/2"] + Train.LK5:TriggerInput("Set",S["20B"]) + Train.LK1:TriggerInput("Set",S["1K"]) + Train:WriteTrainWire(4,S["4/1p"]) + Train.VDOL:TriggerInput("Set",S["31A"]) + Triggers["SDRK"](S["10N"]) + Train.LK4:TriggerInput("Set",S["5B'"]) + Train.KVC:TriggerInput("Set",S["B8"]) + Train.KSB2:TriggerInput("Set",S["6Yu"]) + Train.RPU:TriggerInput("Set",S["27A"]) + Train:WriteTrainWire(5,S["5/1p"]) + Train.Panel["GreenRP"] = S["U0a"] + Triggers["SDPP"](S["10AG"]) + Triggers["XT3.1"](S["B13"]) + Train.KSB1:TriggerInput("Set",S["6Yu"]) + Triggers["RRTuderzh"](S["25A"]) + Train.RR:TriggerInput("Set",S["1N"]) + T[39] = min(1,Train:ReadTrainWire(29)) + Train:WriteTrainWire(22,S["22E'"]) + Train:WriteTrainWire(1,S["1/1p"]) + T[38] = min(1,S["8Zh"]) + Train.TR2:TriggerInput("Set",S["6A"]) + Triggers["KPP"](S["27A"]) + Train.RUP:TriggerInput("Set",S["6Yu"]) + Train.LK3:TriggerInput("Set",S["1Zh"]) + Train.KUP:TriggerInput("Set",S["B22"]) + Train.Rper:TriggerInput("Set",S["3A"]) + Train:WriteTrainWire(10,S["10/4a"]) + Triggers["XR3.3"](S["28A"]) + Train.LK2:TriggerInput("Set",S["20B"]) + Train:WriteTrainWire(18,S["18A"]) + T[35] = min(1,Train:ReadTrainWire(22)) + T[33] = min(1,S["12A"]) + Train:WriteTrainWire(17,S["17/1p"]) + T[32] = min(1,S["12A"]) + T[31] = min(1,S["6A"]) + Triggers["RUTpod"](S["10H"]) + Triggers["ReverserBackward"](S["4B"]) + Train.KK:TriggerInput("Set",S["22V"]) + Triggers["RRTpod"](S["10AH"]) + Train:WriteTrainWire(11,S["11A"]) + T[36] = min(1,S["5V"]) + Train.KSH2:TriggerInput("Set",S["1R"]) + Train.VDOP:TriggerInput("Set",S["32A"]) + Train.RD:TriggerInput("Set",S["D6/1"]) + Train.VDZ:TriggerInput("Set",S["16V"]) + return S +end diff --git a/lua/metrostroi/systems/_obsolete/sys_gen_res_717_5m.lua b/lua/metrostroi/systems/_obsolete/sys_gen_res_717_5m.lua new file mode 100644 index 0000000..b91751c --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_gen_res_717_5m.lua @@ -0,0 +1,202 @@ +-------------------------------------------------------------------------------- +-- Resistor arrays calculations +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +--[[ +Rxx PS PP1 PP2 PT PS1 PS2 PT1 PT2 S1 S2 +R01 = 4.176 0.000 0.000 1.329 3.267 0.909 1.329 +R02 = 4.176 0.000 0.000 1.329 3.267 0.909 1.329 +R03 = 3.048 0.000 0.000 1.189 2.139 0.909 1.189 +R04 = 2.310 0.000 0.000 1.057 1.401 0.909 1.057 +R05 = 1.818 0.000 0.000 0.941 0.909 0.909 0.941 +R06 = 1.669 0.000 0.000 0.899 0.760 0.909 0.899 +R07 = 1.520 0.149 0.000 0.854 0.760 0.760 0.854 +R08 = 1.331 0.149 0.149 0.791 0.760 0.571 0.791 +R09 = 1.142 0.149 0.338 0.720 0.571 0.571 0.720 +R10 = 0.896 0.338 0.338 0.614 0.325 0.571 0.614 +R11 = 0.650 0.584 0.338 0.488 0.325 0.325 0.488 +R12 = 0.451 0.584 0.584 0.366 0.325 0.126 0.366 +R13 = 0.252 0.584 0.783 0.223 0.126 0.126 0.223 +R14 = 0.126 0.783 0.783 0.118 0.000 0.126 0.118 +R15 = 0.000 0.909 0.783 0.000 0.000 0.000 0.000 +R16 = 0.000 0.909 0.909 0.000 0.000 0.000 0.000 +R17 = 0.000 0.909 0.909 0.000 0.000 0.000 0.000 +R18 = 0.000 0.909 0.909 0.000 0.000 0.000 0.000 +]]-- + +-------------------------------------------------------------------------------- +-- Resistor arrays calculations - auto-generated by gen.lua +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("Gen_Res_717_5m") + +local R = {} + +local P13_11 +local P11_12 +local P12_9 +local P9_8 +local P8_7 +local P1_7 +local P4_1 +local P3_4 +local P17_20 +local P20_25 +local P25_21 +local P21_22 +local P22_23 +local P10_42 + +local P29_P28 +local P30_P29 +local P31_P30 +local L76_P31 + +local P35_L18 +local P36_P35 +local P37_P36 +local L74_P37 +-- + +function TRAIN_SYSTEM.InitializeResistances_81_717(Train) + P13_11 = Train.KF_47A["P13_11"] + P11_12 = Train.KF_47A["P11_12"] + P12_9 = Train.KF_47A["P12_9"] + P9_8 = Train.KF_47A["P9_8"] + P8_7 = Train.KF_47A["P8_7"] + P1_7 = Train.KF_47A["P1_7"] + P4_1 = Train.KF_47A["P4_1"] + P3_4 = Train.KF_47A["P3_4"] + + P17_20 = Train.KF_47A["P17_20"] + P20_25 = Train.KF_47A["P20_25"] + P25_21 = Train.KF_47A["P25_21"] + P21_22 = Train.KF_47A["P21_22"] + P22_23 = Train.KF_47A["P22_23"] + + P10_42 = Train.KF_47A["P10_42"] + + P29_P28 = Train.KF_50A["P29-P28"] + P30_P29 = Train.KF_50A["P30-P29"] + P31_P30 = Train.KF_50A["P31-P30"] + L76_P31 = Train.KF_50A["L76-P31"] + + P35_L18 = Train.KF_50A["P35-L18"] + P36_P35 = Train.KF_50A["P36-P35"] + P37_P36 = Train.KF_50A["P37-P36"] + L74_P37 = Train.KF_50A["L74-P37"] +end + +function TRAIN_SYSTEM.R1C1(Train) + local RK = Train.RheostatController + local PM = Train.PositionSwitch.RPM + local PT = Train.PositionSwitch.RPT + R[1] = ((RK[17])^-1 + (P12_9)^-1)^-1 + R[2] = ((RK[18])^-1 + (P11_12+R[1])^-1)^-1 + R[3] = ((RK[19])^-1 + (P13_11+R[2])^-1)^-1 + R[4] = ((RK[5])^-1 + (RK[3]+P3_4)^-1)^-1 + R[5] = ((RK[7])^-1 + (P4_1+R[4])^-1)^-1 + R[6] = ((RK[9])^-1 + (R[5]+P1_7)^-1)^-1 + R[7] = ((RK[11])^-1 + (R[6]+P8_7)^-1)^-1 + R[8] = ((RK[13])^-1 + (R[7]+P9_8)^-1)^-1 + return R[8]+R[3] +end + +function TRAIN_SYSTEM.R1C2(Train) + local RK = Train.RheostatController + local PM = Train.PositionSwitch.RPM + local PT = Train.PositionSwitch.RPT + R[1] = ((RK[17])^-1 + (P12_9)^-1)^-1 + R[2] = ((RK[18])^-1 + (RK[19]+P13_11)^-1)^-1 + R[3] = ((P11_12+R[1])^-1 + (R[2])^-1)^-1 + R[4] = ((RK[7])*(P1_7)+(RK[7])*(P4_1)+(P1_7)*(P4_1))/(RK[7]) + R[5] = ((RK[7])*(P1_7)+(RK[7])*(P4_1)+(P1_7)*(P4_1))/(P1_7) + R[6] = ((RK[7])*(P1_7)+(RK[7])*(P4_1)+(P1_7)*(P4_1))/(P4_1) + R[7] = ((RK[9])^-1 + (R[6])^-1)^-1 + R[8] = ((RK[5])^-1 + (R[5])^-1)^-1 + R[9] = ((R[8])*(R[4])+(R[8])*(P3_4)+(R[4])*(P3_4))/(R[8]) + R[10] = ((R[8])*(R[4])+(R[8])*(P3_4)+(R[4])*(P3_4))/(R[4]) + R[11] = ((R[8])*(R[4])+(R[8])*(P3_4)+(R[4])*(P3_4))/(P3_4) + R[12] = ((R[11])^-1 + (R[7])^-1)^-1 + R[13] = ((R[10])^-1 + (RK[3])^-1)^-1 + R[14] = ((R[9])*(R[12])+(R[9])*(P8_7)+(R[12])*(P8_7))/(R[9]) + R[15] = ((R[9])*(R[12])+(R[9])*(P8_7)+(R[12])*(P8_7))/(R[12]) + R[16] = ((R[9])*(R[12])+(R[9])*(P8_7)+(R[12])*(P8_7))/(P8_7) + R[17] = ((RK[11])^-1 + (R[14])^-1)^-1 + R[18] = ((R[16])^-1 + (R[13])^-1)^-1 + R[19] = ((RK[13])*(P9_8)+(RK[13])*(R[3])+(P9_8)*(R[3]))/(RK[13]) + R[20] = ((RK[13])*(P9_8)+(RK[13])*(R[3])+(P9_8)*(R[3]))/(P9_8) + R[21] = ((RK[13])*(P9_8)+(RK[13])*(R[3])+(P9_8)*(R[3]))/(R[3]) + R[22] = ((R[17])^-1 + (R[21])^-1)^-1 + R[23] = ((R[22])^-1 + (R[20]+R[19])^-1)^-1 + R[24] = ((R[23]+R[15])^-1 + (R[18])^-1)^-1 + return R[24] +end + +function TRAIN_SYSTEM.R2C1(Train) + local RK = Train.RheostatController + local PM = Train.PositionSwitch.RPM + local PT = Train.PositionSwitch.RPT + R[1] = ((RK[6])^-1 + (RK[4]+P17_20)^-1)^-1 + R[2] = ((RK[8])^-1 + (P20_25+R[1])^-1)^-1 + R[3] = ((RK[10])^-1 + (P25_21+R[2])^-1)^-1 + R[4] = ((RK[12])^-1 + (P21_22+R[3])^-1)^-1 + R[5] = ((RK[14])^-1 + (R[4]+P22_23)^-1)^-1 + return R[5] +end + +function TRAIN_SYSTEM.R2C2(Train) + local RK = Train.RheostatController + local PM = Train.PositionSwitch.RPM + local PT = Train.PositionSwitch.RPT + R[1] = ((RK[12])^-1 + (RK[14]+P22_23)^-1)^-1 + R[2] = ((RK[10])^-1 + (P21_22+R[1])^-1)^-1 + R[3] = ((RK[8])^-1 + (R[2]+P25_21)^-1)^-1 + R[4] = ((R[3]+P20_25)^-1 + (RK[6])^-1)^-1 + R[5] = ((R[4]+P17_20)^-1 + (RK[4])^-1)^-1 + return R[5] +end + +function TRAIN_SYSTEM.R3(Train) + local RK = Train.RheostatController + local PM = Train.PositionSwitch.RPM + local PT = Train.PositionSwitch.RPT + R[1] = ((RK[17])^-1 + (P12_9)^-1)^-1 + R[2] = ((RK[18])^-1 + (P11_12+R[1])^-1)^-1 + R[3] = ((RK[19])^-1 + (P13_11+R[2])^-1)^-1 + R[4] = ((RK[5])^-1 + (RK[3]+P3_4)^-1)^-1 + R[5] = ((RK[7])^-1 + (P4_1+R[4])^-1)^-1 + R[6] = ((RK[9])^-1 + (P1_7+R[5])^-1)^-1 + R[7] = ((RK[11])^-1 + (P8_7+R[6])^-1)^-1 + R[8] = ((RK[13])^-1 + (P9_8+R[7])^-1)^-1 + R[9] = ((RK[6])^-1 + (RK[4]+P17_20)^-1)^-1 + R[10] = ((RK[8])^-1 + (P20_25+R[9])^-1)^-1 + R[11] = ((RK[10])^-1 + (P25_21+R[10])^-1)^-1 + R[12] = ((RK[12])^-1 + (P21_22+R[11])^-1)^-1 + R[13] = ((RK[14])^-1 + (P22_23+R[12])^-1)^-1 + R[14] = ((P10_42)^-1 + (P10_42)^-1)^-1 + R[15] = ((PT+PT+R[14])^-1 + (R[13]+R[3]+R[8])^-1)^-1 + return R[15] +end + +function TRAIN_SYSTEM.S1(Train) + local RK = Train.RheostatController + local PM = Train.PositionSwitch.RPM + local PT = Train.PositionSwitch.RPT + R[1] = ((L76_P31)^-1 + (RK[21])^-1)^-1 + R[2] = ((RK[23])^-1 + (P31_P30+R[1])^-1)^-1 + R[3] = ((P30_P29+R[2])^-1 + (RK[25])^-1)^-1 + return P29_P28+R[3] +end + +function TRAIN_SYSTEM.S2(Train) + local RK = Train.RheostatController + local PM = Train.PositionSwitch.RPM + local PT = Train.PositionSwitch.RPT + R[1] = ((L74_P37)^-1 + (RK[22])^-1)^-1 + R[2] = ((RK[24])^-1 + (P37_P36+R[1])^-1)^-1 + R[3] = ((P36_P35+R[2])^-1 + (RK[26])^-1)^-1 + return P35_L18+R[3] +end + diff --git a/lua/metrostroi/systems/_obsolete/sys_kf_47a6.lua b/lua/metrostroi/systems/_obsolete/sys_kf_47a6.lua new file mode 100644 index 0000000..b1f325c --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_kf_47a6.lua @@ -0,0 +1,96 @@ +-------------------------------------------------------------------------------- +-- HV Rheostats (KF-47A6) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("KF_47A6") + +function TRAIN_SYSTEM:Initialize() + self.Resistors = { + ["L12-L13"] = 1.730, + + ["P3-P4"] = 0.144, + ["P4-P5"] = 0.220, --["P4-P5"] = 0.223, + ["P5-P6"] = 0.190, --["P5-P6"] = 0.190, + ["P6-P7"] = 0.230, --["P6-P7"] = 0.223, + ["P7-P8"] = 0.219, --["P7-P8"] = 0.223, + ["P8-P9"] = 0.180, --["P8-P9"] = 0.190, + ["P9-P10"] = 0.144, + ["P10-P11"] = 0.144, + ["P11-P12"] = 1.000, --1.070 + ["P12-P13"] = 0.570, --["P12-P13"] = 0.485, + ["P1-P3"] = 0.715, + ["P3-P14"] = 1.620, + ["P13-P42"] = 0.285, + + ["P16-P17"] = 0.360, -- ["P16-P17"] = 0.485, + ["P17-P18"] = 0.120, + ["P18-P19"] = 0.224, --["P18-P19"] = 0.223, + ["P19-P20"] = 0.183, --["P19-P20"] = 0.190, + ["P20-P21"] = 0.223, + ["P21-P22"] = 0.223, + ["P22-P23"] = 0.190, -- ["P22-P23"] = 0.190, + ["P23-P24"] = 0.130, --["P23-P24"] = 0.144, + ["P24-P25"] = 0.130, --["P24-P25"] = 0.144, + ["P25-P26"] = 0.790, --["P25-P26"] = 0.716, + ["P17-P76"] = 0.246, + ["P76-P27"] = 1.710, + + ["L2-L4"] = 1.140, + ["L24-L39"] = 1.000, + ["L40-L63"] = 1.000, + + } + self.ResistorTemperatures = { + ["P3-P4"] = 1, + ["P4-P5"] = 1, + ["P5-P6"] = 1, + ["P6-P7"] = 1, + ["P7-P8"] = 1, + ["P8-P9"] = 1, + ["P9-P10"] = 1, + ["P10-P11"] = 1, + ["P11-P12"] = 1, + ["P12-P13"] = 1, + ["P1-P3"] = 1, + ["P3-P14"] = 1, + ["P13-P42"] = 1, + + ["P16-P17"] = 2, + ["P17-P18"] = 2, + ["P18-P19"] = 2, + ["P19-P20"] = 2, + ["P20-P21"] = 2, + ["P21-P22"] = 2, + ["P22-P23"] = 2, + ["P23-P24"] = 2, + ["P24-P25"] = 2, + ["P25-P26"] = 2, + ["P17-P76"] = 2, + ["P76-P27"] = 2, + } + self.Overheating = {} + + for k,v in pairs(self.Resistors) do + self[k] = v + self.Overheating[k] = 0 + end +end + +function TRAIN_SYSTEM:Think(dT) + -- Temperature coefficient + local a = 0.0001 + + -- Update resistances + if self.Train.Electric then + for k,v in pairs(self.ResistorTemperatures) do + -- Get temperature + local T = self.Train.Electric["T"..v] or 25 + local O = self.Train.Electric["Overheat"..v] or 0 + + -- Calculate new resistance + self[k] = self.Resistors[k]*(1.0 + a*(T-25) - math.log(1-O)) + end + end +end \ No newline at end of file diff --git a/lua/metrostroi/systems/_obsolete/sys_kf_47a7.lua b/lua/metrostroi/systems/_obsolete/sys_kf_47a7.lua new file mode 100644 index 0000000..4678f60 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_kf_47a7.lua @@ -0,0 +1,96 @@ +-------------------------------------------------------------------------------- +-- HV Rheostats (KF-47A7) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("KF_47A7") + +function TRAIN_SYSTEM:Initialize() + self.Resistors = { + ["L12-L13"] = 1.730, + + ["P3-P4"] = 0.144, + ["P4-P5"] = 0.220, --["P4-P5"] = 0.223, + ["P5-P6"] = 0.190, --["P5-P6"] = 0.190, + ["P6-P7"] = 0.230, --["P6-P7"] = 0.223, + ["P7-P8"] = 0.219, --["P7-P8"] = 0.223, + ["P8-P9"] = 0.180, --["P8-P9"] = 0.190, + ["P9-P10"] = 0.144, + ["P10-P11"] = 0.144, + ["P11-P12"] = 1.000, --1.070 + ["P12-P13"] = 0.570, --["P12-P13"] = 0.485, + ["P1-P3"] = 0.715, + ["P3-P14"] = 1.620, + ["P13-P42"] = 0.285, + + ["P16-P17"] = 0.360, -- ["P16-P17"] = 0.485, + ["P17-P18"] = 0.120, + ["P18-P19"] = 0.224, --["P18-P19"] = 0.223, + ["P19-P20"] = 0.183, --["P19-P20"] = 0.190, + ["P20-P21"] = 0.223, + ["P21-P22"] = 0.223, + ["P22-P23"] = 0.190, -- ["P22-P23"] = 0.190, + ["P23-P24"] = 0.130, --["P23-P24"] = 0.144, + ["P24-P25"] = 0.130, --["P24-P25"] = 0.144, + ["P25-P26"] = 0.790, --["P25-P26"] = 0.716, + ["P17-P76"] = 0.246, + ["P76-P27"] = 1.710, + + ["L2-L4"] = 1.140, + ["L24-L39"] = 1.000, + ["L40-L63"] = 1.000, + + } + self.ResistorTemperatures = { + ["P3-P4"] = 1, + ["P4-P5"] = 1, + ["P5-P6"] = 1, + ["P6-P7"] = 1, + ["P7-P8"] = 1, + ["P8-P9"] = 1, + ["P9-P10"] = 1, + ["P10-P11"] = 1, + ["P11-P12"] = 1, + ["P12-P13"] = 1, + ["P1-P3"] = 1, + ["P3-P14"] = 1, + ["P13-P42"] = 1, + + ["P16-P17"] = 2, + ["P17-P18"] = 2, + ["P18-P19"] = 2, + ["P19-P20"] = 2, + ["P20-P21"] = 2, + ["P21-P22"] = 2, + ["P22-P23"] = 2, + ["P23-P24"] = 2, + ["P24-P25"] = 2, + ["P25-P26"] = 2, + ["P17-P76"] = 2, + ["P76-P27"] = 2, + } + self.Overheating = {} + + for k,v in pairs(self.Resistors) do + self[k] = v + self.Overheating[k] = 0 + end +end + +function TRAIN_SYSTEM:Think(dT) + -- Temperature coefficient + local a = 0.0001 + + -- Update resistances + if self.Train.Electric then + for k,v in pairs(self.ResistorTemperatures) do + -- Get temperature + local T = self.Train.Electric["T"..v] or 25 + local O = self.Train.Electric["Overheat"..v] or 0 + + -- Calculate new resistance + self[k] = self.Resistors[k]*(1.0 + a*(T-25) - math.log(1-O)) + end + end +end \ No newline at end of file diff --git a/lua/metrostroi/systems/_obsolete/sys_kv_70_lite.lua b/lua/metrostroi/systems/_obsolete/sys_kv_70_lite.lua new file mode 100644 index 0000000..d4909be --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_kv_70_lite.lua @@ -0,0 +1,196 @@ +-------------------------------------------------------------------------------- +-- Кулачковый контроллер КВ-70 (урезанный) +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("KV_70_lite") + +function TRAIN_SYSTEM:Initialize() + self.Enabled = 1 + self.ControllerPosition = 0 + self.ReverserPosition = 0 + self.RealControllerPosition = 0 + self.Type = 1 + self.ChangeSpeed = 0.10 + + self.ReverserMatrix = { + {"D", "D1" }, + { 1, 0, 1 }, + {"10/4", "C3" }, + { 0, 0, 1 }, + {"10/4", "F1" }, + { 1, 1, 0 }, + {"D4", "15" }, + { 1, 0, 1 }, + {"D8", "15A" }, + { 0, 1, 0 }, + {"3M35", "4" }, + { 0, 0, 1 }, + {"10AK", "4" }, + { 1, 0, 0 }, + {"10AK", "5" }, + { 0, 0, 1 }, + {"FR1", "10" }, + { 1, 0, 1 }, + {"F7", "10" }, + { 1, 0, 1 }, + } + self.ControllerMatrix = { + {"10", "8" }, + { 1, 0, 0, 0, 0}, + {"U2", "10AS"}, + { 1, 1, 1, 0, 1}, + {"0", "0" }, + { 0, 0, 0, 1, 0}, + {"10AK", "2" }, + { 1, 1, 0, 0, 0}, + {"U2", "3" }, + { 0, 0, 0, 0, 0}, + {"0", "0" }, + { 0, 0, 0, 1, 1}, + {"10AS", "33"}, + { 0, 0, 0, 0, 1}, + {"10AS", "33D"}, + { 0, 0, 0, 1, 1}, + {"U2", "33G"}, + { 1, 1, 1, 0, 0}, + {"U2", "20a"}, + { 0, 0, 0, 0, 1}, + {"U2", "25"}, + { 0, 1, 0, 0, 0}, + {"10AS", "U4"}, + { 0, 0, 0, 1, 0}, + {"15A", "15B"}, + { 1, 1, 1, 1, 0}, + {"U2", "20b"}, + { 1, 1, 1, 0, 0}, + } + + -- Initialize contacts values + for i=1,#self.ReverserMatrix/2 do + local v = self.ReverserMatrix[i*2-1] + self[v[1].."-"..v[2]] = 0 + end + for i=1,#self.ControllerMatrix/2 do + local v = self.ControllerMatrix[i*2-1] + self[v[1].."-"..v[2]] = 0 + end +end + +function TRAIN_SYSTEM:Inputs() + return { "Enabled", "ControllerSet", "ReverserSet","Type", + "ControllerUp","ControllerDown","ReverserUp","ReverserDown", + "SetX1", "Set0", "Set0Fast", "SetT1", "SetT1A", "SetT2" } +end + +function TRAIN_SYSTEM:Outputs() + return { "ControllerPosition","RealControllerPosition", "ReverserPosition" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + local prevReverserPosition = self.ReverserPosition + -- Change position + if name == "Type" then + self.Type = math.floor(value) + elseif name == "Enabled" then + self.Enabled = math.floor(value) + elseif name == "ControllerSet" then + if (self.Enabled ~= 0) and (self.ReverserPosition ~= 0) and (math.floor(value) ~= self.ControllerPosition) then + local prevControllerPosition = self.ControllerPosition + self.ControllerPosition = math.floor(value) + + -- Limit motion + if self.ControllerPosition > 1 then self.ControllerPosition = 1 end + if self.ControllerPosition < -3 then self.ControllerPosition = -3 end + end + elseif name == "ReverserSet" then + if (self.Enabled ~= 0) and (math.floor(value) ~= self.ReverserPosition) and self.ControllerPosition == 0 then + local prevReverserPosition = self.ReverserPosition + self.ReverserPosition = math.floor(value) + if self.ReverserPosition > 1 then self.ReverserPosition = 1 end + if self.ReverserPosition < -1 then self.ReverserPosition = -1 end + if prevReverserPosition ~= self.ReverserPosition then + if self.ReverserPosition == -1 then self.Train:PlayOnce("revers_b","cabin",0.7) end + if self.ReverserPosition == 0 then self.Train:PlayOnce("revers_0","cabin",0.7) end + if self.ReverserPosition == 1 then self.Train:PlayOnce("revers_f","cabin",0.7) end + end + end + elseif (name == "ControllerUp") and (value > 0.5) then + self:TriggerInput("ControllerSet",self.ControllerPosition+1) + elseif (name == "ControllerDown") and (value > 0.5) then + self:TriggerInput("ControllerSet",self.ControllerPosition-1) + elseif (name == "ReverserUp") and (value > 0.5) then + self:TriggerInput("ReverserSet",self.ReverserPosition+1) + elseif (name == "ReverserDown") and (value > 0.5) then + self:TriggerInput("ReverserSet",self.ReverserPosition-1) + elseif (name == "SetX1") and (value > 0.5) then + self:TriggerInput("ControllerSet",1) + elseif (name == "Set0") and (value > 0.5) then + self:TriggerInput("ControllerSet",0) + elseif (name == "Set0Fast") and (value > 0.5) then + self:TriggerInput("ControllerSet",0) + self.ChangeSpeed = 0.05 + elseif (name == "SetT1") and (value > 0.5) then + self:TriggerInput("ControllerSet",-1) + elseif (name == "SetT1A") and (value > 0.5) then + self:TriggerInput("ControllerSet",-2) + elseif (name == "SetT2") and (value > 0.5) then + self:TriggerInput("ControllerSet",-3) + end +end + + +function TRAIN_SYSTEM:Think() + local Train = self.Train + + if (self.Enabled == 0) and (self.ReverserPosition ~= 0) then + self.ReverserPosition = 0 + self.ControllerPosition = 0 + end + if (self.ReverserPosition == 0) and (self.ControllerPosition ~= 0) then + self.ReverserPosition = 0 + self.ControllerPosition = 0 + end + + -- Move controller + self.Timer = self.Timer or CurTime() + if ((CurTime() - self.Timer > self.ChangeSpeed) and (self.ControllerPosition > self.RealControllerPosition)) then + local previousPosition = self.RealControllerPosition + self.Timer = CurTime() + self.RealControllerPosition = self.RealControllerPosition + 1 + + local A,B = previousPosition,self.RealControllerPosition + + if (A == -3) and (B == -2) then self.Train:PlayOnce((self.Type == 1 and "ezh_" or "").."kv_t2_t1a", "cabin",0.8) end + if (A == -2) and (B == -1) then self.Train:PlayOnce((self.Type == 1 and "ezh_" or "").."kv_t1a_t1", "cabin",0.8) end + if (A == -1) and (B == 0) then self.Train:PlayOnce((self.Type == 1 and "ezh_" or "").."kv_t1_0", "cabin",0.8) end + + if (A == 0) and (B == 1) then self.Train:PlayOnce((self.Type == 1 and "ezh_" or "").."kv_0_x1", "cabin",0.9) end + --if (A == 1) and (B == 2) then self.Train:PlayOnce((self.Type == 1 and "ezh_" or "").."kv_x1_x2", "cabin",0.9) end + --if (A == 2) and (B == 3) then self.Train:PlayOnce((self.Type == 1 and "ezh_" or "").."kv_x2_x3", "cabin",0.9) end + end + if ((CurTime() - self.Timer > self.ChangeSpeed) and (self.ControllerPosition < self.RealControllerPosition)) then + local previousPosition = self.RealControllerPosition + self.Timer = CurTime() + self.RealControllerPosition = self.RealControllerPosition - 1 + + local A,B = previousPosition,self.RealControllerPosition + --if (A == 3) and (B == 2) then self.Train:PlayOnce((self.Type == 1 and "ezh_" or "").."kv_x3_x2", "cabin",0.9) end + --if (A == 2) and (B == 1) then self.Train:PlayOnce((self.Type == 1 and "ezh_" or "").."kv_x2_x1", "cabin",0.9) end + if (A == 1) and (B == 0) then self.Train:PlayOnce((self.Type == 1 and "ezh_" or "").."kv_x1_0", "cabin",0.9) end + + if (A == 0) and (B == -1) then self.Train:PlayOnce((self.Type == 1 and "ezh_" or "").."kv_0_t1", "cabin",0.8) end + if (A == -1) and (B == -2) then self.Train:PlayOnce((self.Type == 1 and "ezh_" or "").."kv_t1_t1a", "cabin",0.8) end + if (A == -2) and (B == -3) then self.Train:PlayOnce((self.Type == 1 and "ezh_" or "").."kv_t1a_t2", "cabin",0.8) end + end + if self.RealControllerPosition == 0 then self.ChangeSpeed = 0.10 end + -- Update contacts + for i=1,#self.ReverserMatrix/2 do + local v = self.ReverserMatrix[i*2-1] + local d = self.ReverserMatrix[i*2] + self[v[1].."-"..v[2]] = d[self.ReverserPosition+2] + end + for i=1,#self.ControllerMatrix/2 do + local v = self.ControllerMatrix[i*2-1] + local d = self.ControllerMatrix[i*2] + self[v[1].."-"..v[2]] = d[(self.RealControllerPosition)+4] + end +end diff --git a/lua/metrostroi/systems/_obsolete/sys_motorola.lua b/lua/metrostroi/systems/_obsolete/sys_motorola.lua new file mode 100644 index 0000000..0890348 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_motorola.lua @@ -0,0 +1,516 @@ +-------------------------------------------------------------------------------- +-- РадиоÑÑ‚Ð°Ð½Ñ†Ð¸Ñ Ñ‚Ð¸Ð¿Ð° "Моторола" +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("Motorola") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("MotorolaF1","Relay","Switch",{bass = true}) + self.Train:LoadSystem("MotorolaMenu","Relay","Switch",{bass = true}) + self.Train:LoadSystem("MotorolaF2","Relay","Switch",{bass = true}) + + self.Train:LoadSystem("MotorolaOff","Relay","Switch",{bass = true}) + self.Train:LoadSystem("MotorolaUp","Relay","Switch",{bass = true}) + self.Train:LoadSystem("MotorolaDown","Relay","Switch",{bass = true}) + self.Train:LoadSystem("MotorolaLeft","Relay","Switch",{bass = true}) + self.Train:LoadSystem("MotorolaRight","Relay","Switch",{bass = true}) + self.Train:LoadSystem("MotorolaOn","Relay","Switch",{bass = true}) + + self.Train:LoadSystem("Motorola1","Relay","Switch",{bass = true}) + self.Train:LoadSystem("Motorola2","Relay","Switch",{bass = true}) + self.Train:LoadSystem("Motorola3","Relay","Switch",{bass = true}) + + self.Train:LoadSystem("Motorola4","Relay","Switch",{bass = true}) + self.Train:LoadSystem("Motorola5","Relay","Switch",{bass = true}) + self.Train:LoadSystem("Motorola6","Relay","Switch",{bass = true}) + + self.Train:LoadSystem("Motorola7","Relay","Switch",{bass = true}) + self.Train:LoadSystem("Motorola8","Relay","Switch",{bass = true}) + self.Train:LoadSystem("Motorola9","Relay","Switch",{bass = true}) + + self.Train:LoadSystem("Motorola*","Relay","Switch",{bass = true}) + self.Train:LoadSystem("Motorola0","Relay","Switch",{bass = true}) + self.Train:LoadSystem("Motorola#","Relay","Switch",{bass = true}) + + self.Train:LoadSystem("MotorolaF4","Relay","Switch",{bass = true}) + self.Train:LoadSystem("MotorolaF5","Relay","Switch",{bass = true}) + self.Train:LoadSystem("MotorolaF6","Relay","Switch",{bass = true}) + + self.TriggerNames = { + "MotorolaF1", + "MotorolaMenu", + "MotorolaF2", + + "MotorolaOff", + "MotorolaUp", + "MotorolaDown", + "MotorolaLeft", + "MotorolaRight", + "MotorolaOn", + + "Motorola1", + "Motorola2", + "Motorola3", + + "Motorola4", + "Motorola5", + "Motorola6", + + "Motorola7", + "Motorola8", + "Motorola9", + + "Motorola*", + "Motorola0", + "Motorola#", + + "MotorolaF4", + "MotorolaF5", + "MotorolaF6", + } + self.Enabled = true + self.Triggers = {} + self.Timer = CurTime() + self.State = 0 + self.RealState = 99 + self.RouteNumber = "" + self.FirstStation = "" + self.LastStation = "" + self.Bright = 1 + self.MenuChoosed = 0 + self.AnnMenuChoosed = 0 + self.Mode = 0 + self.Mode1 = 0 + +end +function TRAIN_SYSTEM:ClientInitialize() +end + +if TURBOSTROI then return end +function TRAIN_SYSTEM:Inputs() + return { "Press" } +end + +if CLIENT then + local gr_up = Material("vgui/gradient-d") + function TRAIN_SYSTEM:Motorola(train) + surface.SetAlphaMultiplier(1) + draw.NoTexture() + + if train:GetNW2Int("Motorola:State",-1) >= 0 then + surface.SetDrawColor(Color(20,20,20)) + surface.DrawRect(0,0,140,107) + else + surface.SetDrawColor(Color(0,0,0)) + surface.DrawRect(0,0,140,107) + end + --surface.SetAlphaMultiplier(train:GetNW2Int("Motorola:Bright",1)) + if train:GetNW2Int("Motorola:State",-1) == 1 then + surface.SetDrawColor(Color(255,255,255)) + surface.DrawRect(0,0,94,107) + surface.SetDrawColor(Color(139,200,235)) + surface.DrawRect(94,0,46,107) + Metrostroi.DrawLine(7, 2, 10, 5,Color(0,0,0),1) + Metrostroi.DrawLine(10, 1, 10, 9,Color(0,0,0),1) + Metrostroi.DrawLine(13, 2, 10, 5,Color(0,0,0),1) + + Metrostroi.DrawLine(16, 8, 16, 9,Color(060,240,106),1) + Metrostroi.DrawLine(18, 6, 18, 9,Color(060,240,106),1) + Metrostroi.DrawLine(20, 4, 20, 9,Color(060,240,106),1) + Metrostroi.DrawLine(22, 2, 22, 9,Color(060,240,106),1) + if not train:GetNW2Bool("Motorola:Menu",false) and train:GetNW2Int("Motorola:Mode",0) == 0 then + local RouteNumber = train:GetNW2Int("Motorola:RouteNumber",-1) > -1 and tostring(train:GetNW2Int("Motorola:RouteNumber")) or "N/A" + draw.SimpleText(train:GetWagonNumber().."/"..RouteNumber,"Metrostroi_PAM1_20",47, 30,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("Folder 1","Metrostroi_PAM1_20",47, 48,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("TRL "..(train:GetNW2Int("Motorola:Line",0) > 0 and train:GetNW2Int("Motorola:Line") or "N/A"),"Metrostroi_PAM1_20",47, 66,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(os.date("!%d-%m-%y %H.%M",os.time()),"Metrostroi_PAM15",47, 82,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("DURA","Metrostroi_PAM15",117, 23,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(94, 47, 140, 47,Color(89,150,175),1) + draw.SimpleText("Menu","Metrostroi_PAM15",117, 53,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + draw.SimpleText("Annou-","Metrostroi_PAM15",117, 77,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("nces ","Metrostroi_PAM15",117, 89,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(94, 61, 140, 61,Color(89,150,175),1) + elseif train:GetNW2Int("Motorola:Mode",0) == 0 then + Metrostroi.DrawRectOL(1,13*1, 93, 13,Color(89,150,175),1,Color(139,200,235)) + draw.SimpleText("Main Menu","Metrostroi_PAM15",46, 6+13*1,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --surface.DrawRect(0,13*1,94,13) + surface.SetDrawColor(Color(255,255,255)) + surface.DrawRect(94,47,46,14) + draw.SimpleText("Back","Metrostroi_PAM15",117, 23,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("Select","Metrostroi_PAM15",117, 83,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + surface.SetDrawColor(Color(103,178,209)) + surface.DrawRect(11,1+13*(2+train:GetNW2Int("Motorola:MenuChoosed",0)) , 83, 13) + + draw.SimpleText("UPO","Metrostroi_PAM15",13, 7+13*2,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("Route number","Metrostroi_PAM15",13, 7+13*3,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("Announces","Metrostroi_PAM15",13, 7+13*4,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("DURA","Metrostroi_PAM15",13, 7+13*5,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + surface.SetDrawColor(Color(255,255,255)) + if train:GetNW2Int("Motorola:Mode",0) == 2 then surface.DrawRect(94,47,46,60) else surface.DrawRect(94,47,46,14) end + draw.SimpleText("Back","Metrostroi_PAM15",117, 23,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + if train:GetNW2Int("Motorola:Mode",0) == 1 then draw.SimpleText("OK","Metrostroi_PAM15",117, 83,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + if train:GetNW2Int("Motorola:Mode",0) == 1 then + local Line = train:GetNW2Int("Motorola:Line",-1) > -1 and tostring(train:GetNW2Int("Motorola:Line")) or "" + local FirstStation = train:GetNW2Int("Motorola:FirstStation",-1) > -1 and tostring(train:GetNW2Int("Motorola:FirstStation")) or "" + local LastStation = train:GetNW2Int("Motorola:LastStation",-1) > -1 and tostring(train:GetNW2Int("Motorola:LastStation")) or "" + + Metrostroi.DrawRectOL(1,13 + 32*0, 93, 13,Color(89,150,175),1,Color(139,200,235)) + draw.SimpleText("Line","Metrostroi_PAM15",46, 19+32*0,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(Line,"Metrostroi_PAM1_20",5, 35 + 32*0,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if train:GetNW2Int("Motorola:Mode1",0) == 0 and CurTime()%0.5>0.25 then Metrostroi.DrawLine(5 +9*#Line, 40 + 32*0, 15+9*#Line, 40 + 32*0,Color(0,0,0),2) end + + Metrostroi.DrawRectOL(1,13 + 32*1, 93, 13,Color(89,150,175),1,Color(139,200,235)) + draw.SimpleText("First station","Metrostroi_PAM15",46, 19+32*1,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(FirstStation,"Metrostroi_PAM1_20",5, 35 + 32*1,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if train:GetNW2Int("Motorola:Mode1",0) == 1 and CurTime()%0.5>0.25 then Metrostroi.DrawLine(5 +9*#FirstStation, 40 + 32*1, 15+9*#FirstStation, 40 + 32*1,Color(0,0,0),2) end + + Metrostroi.DrawRectOL(1,13 + 32*2, 93, 13,Color(89,150,175),1,Color(139,200,235)) + draw.SimpleText("Last station","Metrostroi_PAM15",46, 19+32*2,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(LastStation,"Metrostroi_PAM1_20",5, 35 + 32*2,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if train:GetNW2Int("Motorola:Mode1",0) == 2 and CurTime()%0.5>0.25 then Metrostroi.DrawLine(5 +9*#LastStation, 40 + 32*2, 15+9*#LastStation, 40 + 32*2,Color(0,0,0),2) end + end + + if train:GetNW2Int("Motorola:Mode",0) == 2 then + Metrostroi.DrawRectOL(1,13*1, 93, 13,Color(89,150,175),1,Color(139,200,235)) + draw.SimpleText("Route number","Metrostroi_PAM15",46, 6+13*1,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + local RouteNumber = train:GetNW2Int("Motorola:RouteNumber",-1) > -1 and tostring(train:GetNW2Int("Motorola:RouteNumber")) or "" + draw.SimpleText(RouteNumber,"Metrostroi_PAM1_20",5, 35,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if CurTime()%0.5>0.25 then Metrostroi.DrawLine(5 +9*#RouteNumber, 40, 15+9*#RouteNumber, 40,Color(0,0,0),2) end + end + if train:GetNW2Int("Motorola:Mode",0) == 3 then + Metrostroi.DrawRectOL(1,13*1, 93, 13,Color(89,150,175),1,Color(139,200,235)) + draw.SimpleText("Announces","Metrostroi_PAM15",46, 6+13*1,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --surface.DrawRect(0,13*1,94,13) + surface.SetDrawColor(Color(255,255,255)) + surface.DrawRect(94,47,46,14) + draw.SimpleText("Back","Metrostroi_PAM15",117, 23,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("Play","Metrostroi_PAM15",117, 83,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + surface.SetDrawColor(Color(103,178,209)) + surface.DrawRect(3,1+13*(2+train:GetNW2Int("Motorola:AnnMenuChoosed",0)) , 88, 13) + + draw.SimpleText("Go out from tr..","Metrostroi_PAM15",5, 7+13*2,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("Go faster","Metrostroi_PAM15",5, 7+13*3,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("Release doors","Metrostroi_PAM15",5, 7+13*4,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("Train dep. soon","Metrostroi_PAM15",5, 7+13*5,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + if train:GetNW2Int("Motorola:Mode",0) == 4 then + Metrostroi.DrawRectOL(1,13*1, 93, 13,Color(89,150,175),1,Color(139,200,235)) + draw.SimpleText("Dura control","Metrostroi_PAM15",46, 6+13*1,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --surface.DrawRect(0,13*1,94,13) + surface.SetDrawColor(Color(255,255,255)) + surface.DrawRect(94,47,46,14) + draw.SimpleText("Back","Metrostroi_PAM15",117, 23,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("Send","Metrostroi_PAM15",117, 78,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + local Sel = train:GetNW2Bool("Motorola:DURAs", false) + local DURA1 = train:GetNW2Bool("Motorola:DURA1", false) + local DURA2 = train:GetNW2Bool("Motorola:DURA2", false) + + if not Sel and DURA1 or Sel and DURA2 then + draw.SimpleText("Main","Metrostroi_PAM15",117, 88,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText("Alter","Metrostroi_PAM15",117, 88,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + + draw.SimpleText("1","Metrostroi_PAM1_20",22, 40,Color(0,not Sel and 200 or 0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + if not Sel and CurTime()%0.5>0.25 then Metrostroi.DrawLine(18, 47, 28, 47,Color(0,0,0),2) end + Metrostroi.DrawLine(15,50, 15, 70,Color(DURA1 and 0 or 200,0,0),2) + Metrostroi.DrawLine(15,71, 29, 50,Color(DURA1 and 200 or 0,0,0),2) + Metrostroi.DrawLine(15,70, 15, 90,Color(200,0,0),2) + + draw.SimpleText("2","Metrostroi_PAM1_20",67, 40,Color(0,Sel and 200 or 0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + if Sel and CurTime()%0.5>0.25 then Metrostroi.DrawLine(63, 47, 73, 47,Color(0,0,0),2) end + Metrostroi.DrawLine(60,50, 60, 70,Color(DURA2 and 0 or 200,0,0),2) + Metrostroi.DrawLine(60,71, 74, 50,Color(DURA2 and 200 or 0,0,0),2) + Metrostroi.DrawLine(60,70, 60, 90,Color(200,0,0),2) + end + + end + end + surface.SetAlphaMultiplier(1-train:GetNW2Int("Motorola:Bright",1)) + surface.SetDrawColor(Color(20,20,20)) + surface.DrawRect(0,0,145,110) + surface.SetAlphaMultiplier(1) + end + function TRAIN_SYSTEM:ClientThink() + end +end + +function TRAIN_SYSTEM:UpdateUPO() + for k,v in pairs(self.Train.WagonList) do + if v.UPO then v.UPO:SetStations(self.Line,self.FirstStation,self.LastStation,v == self.Train) end + v:OnButtonPress("RouteNumberUpdate",self.RouteNumber) + end +end + +function TRAIN_SYSTEM:Trigger(name) + if self.Mode == 0 then + if self.Menu then + if name == "MotorolaF1" then + self.Menu = false + end + if name == "MotorolaUp" then + self.MenuChoosed = math.max(0,self.MenuChoosed - 1) + end + if name == "MotorolaDown" then + self.MenuChoosed = math.min(3,self.MenuChoosed + 1) + end + if name == "MotorolaF2" then + self.Mode = self.MenuChoosed + 1 + + if self.Mode == 3 then + self.AnnChoosed = 0 + end + end + local Char = tonumber(name:sub(9,9)) + if Char and Char > 0 and Char < 5 then + self.Mode = Char + end + else + if name == "MotorolaF2" then + self.Mode = 3 + self.AnnChoosed = 0 + end + if name == "MotorolaF1" then + self.Mode = 4 + end + if name == "MotorolaMenu" then + self.Menu = true + self.MenuChoosed = 0 + end + end + else + if self.Mode == 1 then + if name == "MotorolaUp" then + self.Mode1 = math.max(0,self.Mode1 - 1) + end + if name == "MotorolaDown" then + self.Mode1 = math.min(2,self.Mode1 + 1) + end + if name == "MotorolaLeft" then + if self.Mode1 == 1 then + self.FirstStation= self.FirstStation:sub(1,-2) + end + if self.Mode1 == 2 then + self.LastStation= self.LastStation:sub(1,-2) + end + self:UpdateUPO() + end + + local Char = tonumber(name:sub(9,9)) + if Char then + if self.Mode1 == 0 then + self.Line = Char + if Metrostroi.WorkingStations[self.Line] then + local Routelength = #Metrostroi.WorkingStations[self.Line] + self.FirstStation = tostring(Metrostroi.WorkingStations[self.Line][1]) + self.LastStation = tostring(Metrostroi.WorkingStations[self.Line][Routelength]) + end + end + if self.Mode1 == 1 and #self.FirstStation < 3 and (Char ~= 0 or #self.FirstStation > 0) then + self.FirstStation= self.FirstStation..tostring(Char) + end + if self.Mode1 == 2 and #self.LastStation < 3 and (Char ~= 0 or #self.LastStation > 0) then + self.LastStation= self.LastStation..tostring(Char) + end + self:UpdateUPO() + end + if name == "MotorolaF2" then + if not Metrostroi.WorkingStations[self.Line] or + not Metrostroi.WorkingStations[self.Line][tonumber(self.FirstStation)] or + not Metrostroi.AnnouncerData[tonumber(self.FirstStation)] or + not Metrostroi.WorkingStations[self.Line][tonumber(self.LastStation)] or + not Metrostroi.AnnouncerData[tonumber(self.LastStation)] then + self.Error = not self.Error + else + if not self.Error then self.Mode = 0 else self.Error = false end + end + end + --[[ + if name == "MotorolaLeft" then + self.RouteNumber= self.RouteNumber:sub(1,-2) + self.Train:OnButtonPress("RouteNumberUpdate",self.RouteNumber) + end + local Char = tonumber(name:sub(9,9)) + if Char and self.RouteNumber and #self.RouteNumber < 3 then + self.RouteNumber= self.RouteNumber..tostring(Char) + self.Train:OnButtonPress("RouteNumberUpdate",self.RouteNumber) + end]] + end + if self.Mode == 2 then + if name == "MotorolaLeft" then + self.RouteNumber= self.RouteNumber:sub(1,-2) + self.Train:OnButtonPress("RouteNumberUpdate",self.RouteNumber) + end + local Char = tonumber(name:sub(9,9)) + if Char and self.RouteNumber and #self.RouteNumber < 3 then + self.RouteNumber= self.RouteNumber..tostring(Char) + self.Train:OnButtonPress("RouteNumberUpdate",self.RouteNumber) + end + end + + if self.Mode == 3 then + if name == "MotorolaUp" then + self.AnnMenuChoosed = math.max(0,self.AnnMenuChoosed - 1) + end + if name == "MotorolaDown" then + self.AnnMenuChoosed = math.min(3,self.AnnMenuChoosed + 1) + end + if name == "MotorolaF2" then + self.Mode = 0 + + self.Train.UPO:II(self.AnnMenuChoosed+1) + end + local Char = tonumber(name:sub(9,9)) + if Char and Char > 0 and Char < 5 and self.Train.R_UPO.Value > 0 then + self.Mode = 0 + self.Train.UPO:II(Char) + self.AnnChoosed = 0 + end + end + + if self.Mode == 4 then + if name == "MotorolaLeft" then + self.Train.DURA:TriggerInput("SelectChannel",1) + end + if name == "MotorolaRight" then + self.Train.DURA:TriggerInput("SelectChannel",2) + end + local Char = tonumber(name:sub(9,9)) + if Char and Char > 0 and Char < 3 then + self.Train.DURA:TriggerInput("SelectChannel",Char) + if self.Train.DURA.Channel == 1 then if self.Train.DURA.Channel1Alternate then self.Train.DURA:TriggerInput("SelectMain",1) else self.Train.DURA:TriggerInput("SelectAlternate",1) end end + if self.Train.DURA.Channel == 2 then if self.Train.DURA.Channel2Alternate then self.Train.DURA:TriggerInput("SelectMain",1) else self.Train.DURA:TriggerInput("SelectAlternate",1) end end + end + if name == "MotorolaF2" then + if self.Train.DURA.Channel == 1 then if self.Train.DURA.Channel1Alternate then self.Train.DURA:TriggerInput("SelectMain",1) else self.Train.DURA:TriggerInput("SelectAlternate",1) end end + if self.Train.DURA.Channel == 2 then if self.Train.DURA.Channel2Alternate then self.Train.DURA:TriggerInput("SelectMain",1) else self.Train.DURA:TriggerInput("SelectAlternate",1) end end + + end + end + + if name == "MotorolaF1" then + if not self.Error then self.Mode = 0 else self.Error = false end + end + end + if name == "MotorolaF6" then + self.Bright = self.Bright + 0.25 + if self.Bright > 1 then self.Bright = 0 end + end +end +function TRAIN_SYSTEM:GetTimer(val) + return self.TimerMod and (CurTime() - self.Timer) > val +end +function TRAIN_SYSTEM:SetTimer(mod) + if mod then + if self.TimerMod == mod then return end + self.TimerMod = mod + else + self.TimerMod = nil + end + self.Timer = CurTime() +end + +function TRAIN_SYSTEM:SetState(state,add,state9) + local Train = self.Train + local ARS = Train.ALS_ARS + local Announcer = Train.Announcer + if state and self.State ~= state then + self.State = state + if state == 1 or state == 1.1 then + self.NextState = add + end + self:SetTimer() + elseif not state then + state = self.NextState + self.State = self.NextState + else + return + end + + if state == 1 then self.Bright = 1 end +end +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local ARS = Train.ALS_ARS + local Announcer = Train.Announcer + if Train.MotorolaOff.Value >0.5 and not self.OffTimer and not self.OnTimer then --self.VPA and + if self.Enabled then + self.OffTimer = CurTime() + 1 + else + self.Enabled = true + end + end + if self.OffTimer and (CurTime() - self.OffTimer) > 0 then + self.Enabled = false + end + if Train.MotorolaOff.Value <0.5 and self.OffTimer then + self.OffTimer = nil + end + if Train.Panel["V1"] < 0.5 or Train.VB.Value < 0.5 then self:SetState(-1) end + if not self.Enabled then self:SetState(-1) end + if self.Enabled and self.State == -1 and Train.Panel["V1"] > 0.5 and Train.VB.Value > 0.5 then self:SetState(0) end + + --self.Train.UPO.Station = self.Train:ReadCell(49160) > 0 and self.Train:ReadCell(49160) or self.Train:ReadCell(49161) + --self.Train.UPO.Path = self.Train:ReadCell(49170) + --self.Train.UPO.Distance = math.min(9999,self.Train:ReadCell(49165) + (Train.Autodrive.Corrections[self.Train.UPO.Station] or 0)) + if Train.VB.Value > 0.5 and Train.Battery.Voltage > 55 and self.State > 0 then + for k,v in pairs(self.TriggerNames) do + if Train[v] and (Train[v].Value > 0.5) ~= self.Triggers[v] then + if Train[v].Value > 0.5 then + self:Trigger(v) + end + --print(v,self.Train[v].Value > 0.5) + self.Triggers[v] = Train[v].Value > 0.5 + end + end + end + + if self.State == 0 then + self:SetTimer(1) + if self:GetTimer(3) then + self:SetState(1) + end + end + if self.State ~= self.RealState then + self.RealState = self.State + self.TimeOverride = true + end + self.Time = self.Time or CurTime() + if (CurTime() - self.Time) > 0.1 or self.TimeOverride then + self.TimeOverride = nil + --print(1) + self.Time = CurTime() + Train:SetNW2Int("Motorola:State",self.State) + Train:SetNW2Int("Motorola:Line",Train.UPO.Line) + Train:SetNW2Int("Motorola:RouteNumber",tonumber(self.RouteNumber ~= "" and self.RouteNumber or -1)) + Train:SetNW2Int("Motorola:Bright",self.Bright) + Train:SetNW2Bool("Motorola:Menu",self.Menu == true) + Train:SetNW2Int("Motorola:MenuChoosed",self.MenuChoosed) + Train:SetNW2Int("Motorola:Mode",self.Mode) + Train:SetNW2Bool("Motorola:Error",self.Error) + if self.Mode == 1 then + Train:SetNW2Int("Motorola:Mode1",self.Mode1) + Train:SetNW2Int("Motorola:FirstStation",tonumber(self.FirstStation ~= "" and self.FirstStation or -1)) + Train:SetNW2Int("Motorola:LastStation",tonumber(self.LastStation ~= "" and self.LastStation or -1)) + elseif self.Mode == 2 then + elseif self.Mode == 3 then + Train:SetNW2Int("Motorola:AnnMenuChoosed",self.AnnMenuChoosed) + elseif self.Mode == 4 then + Train:SetNW2Int("Motorola:DURAs",self.Train.DURA.Channel == 2) + Train:SetNW2Int("Motorola:DURA1",self.Train.DURA.Channel1Alternate) + Train:SetNW2Int("Motorola:DURA2",self.Train.DURA.Channel2Alternate) + + end + end + self.RouteNumber = string.gsub(Train.RouteNumber or "","^(0+)","") + self.Line = Train.UPO.Line + self.FirstStation = tostring(Train.UPO.FirstStation or "") + self.LastStation = tostring(Train.UPO.LastStation or "") + self.RealState = self.State +end diff --git a/lua/metrostroi/systems/_obsolete/sys_noars.lua b/lua/metrostroi/systems/_obsolete/sys_noars.lua new file mode 100644 index 0000000..747c8ea --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_noars.lua @@ -0,0 +1,108 @@ +-------------------------------------------------------------------------------- +-- ÐРС-ÐЛС +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("NoARS") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + + --self.Train:LoadSystem("UOS","Relay","Switch", {bass = true}) + --self.Train:LoadSystem("BPS","Relay","Switch",{ bass = true,normally_closed = true }) + -- ALS state + self.Signal80 = false + self.Signal70 = false + self.Signal60 = false + self.Signal40 = false + self.Signal0 = false + self.Special = false + self.NoFreq = true + self.RealNoFreq = true + + -- Internal state + self.Speed = 0 + self.SpeedLimit = 0 + self.NextLimit = 0 + self.Ring = false + self.Overspeed = false + + -- ARS wires + self["33D"] = 1 + self["33G"] = 0 + self["33Zh"] = 1--KAH + -- + self["2"] = 0 + self["20"] = 0 + self["29"] = 0 + -- + self["31"] = 0 + self["32"] = 0 + self["8"] =0 + + -- Lamps + ---self.LKT = false + self.LVD = false +end + +function TRAIN_SYSTEM:Outputs() + return { "2", "8", "20", "31", "32", "29", "33D", "33G", "33Zh", + "Speed", "Signal80","Signal70","Signal60","Signal40","Signal0","Special","NoFreq","RealNoFreq", + "SpeedLimit", "NextLimit","Ring","KVT","EnableARS","EnableALS","Signal", "UAVA"} +end + +function TRAIN_SYSTEM:Inputs() + return { "IgnoreThisARS","AttentionPedal","Ring" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + +function TRAIN_SYSTEM:Think() + + if self.Train.RV_2.Value < 1 then self.Train.RV_2:TriggerInput("Set",1) + end + + + local Train = self.Train + local tbl = Train.SubwayTrain and Train.SubwayTrain.ALS + local haveautostop = tbl and tbl.HaveAutostop + local autostop = haveautostop and Train.SpeedSign > 0 and Train.Speed > 0.1 + if autostop then + local ars,arsback + self.Timer = self.Timer or CurTime() + if CurTime() - self.Timer > 1.00 then + self.Timer = CurTime() + -- Get train position + local pos = Metrostroi.TrainPositions[Train] --Metrostroi.GetPositionOnTrack(Train:GetPos(),Train:GetAngles()) --(this metod laggy for dir checks) + if pos then pos = pos[1] end + -- Get previous ARS section + if pos then + ars,arsback = Metrostroi.GetARSJoint(pos.node1,pos.x,Metrostroi.TrainDirections[Train], Train) + end + + if autostop then + if IsValid(arsback) then + if arsback == self.AutostopSignal then + local ply,mode = Train:GetDriverPly() + local nomsg = hook.Run("MetrostroiPassedRed",Train,ply,mode,arsback) + Train.Pneumatic:TriggerInput("Autostop",nomsg and 0 or 1) + if not nomsg and (not IsValid(Train.FrontTrain) or not IsValid(Train.RearTrain)) then + RunConsoleCommand("say",Format("%s Passed stop %s signal [%s]",Train:GetDriverName(),arsback.InvationSignal and "InvationSignal" or "",arsback.Name)) + end + self.AutostopSignal = nil + end + end + if IsValid(ars) then + if ars.AutoEnabled then + self.AutostopSignal = ars + elseif self.AutostopSignal == ars then + self.AutostopSignal = nil + end + end + end + end + end + self["33D"] = ((Train.Pneumatic and Train.Pneumatic.EmergencyValve) or self.UAVAContacts) and 0 or 1 + if Train.UAVAContact and Train.UAVAContact.Value > 0.5 and not Train.Pneumatic.EmergencyValve then + self.UAVAContacts = nil + end +end diff --git a/lua/metrostroi/systems/_obsolete/sys_pa-ksd-m.lua b/lua/metrostroi/systems/_obsolete/sys_pa-ksd-m.lua new file mode 100644 index 0000000..a0835c6 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_pa-ksd-m.lua @@ -0,0 +1,2282 @@ +-------------------------------------------------------------------------------- +-- ПÐ-КСД-М ÐŸÐ¾ÐµÐ·Ð´Ð½Ð°Ñ Ðппаратура - КомплекÑÐ½Ð°Ñ Ð¡Ð¸Ñтема Ð”Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ - ÐœÐ¾Ð´Ð¸Ñ„Ð¸Ñ†Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ +-- PA-KSD-M Train Equipment - Integrated Traffic System - Modified +-------------------------------------------------------------------------------- +-- Коды ошибок: +-- 0x0000 - норма +-- 0x0001 - +-- Error codes: +-- 0x0000 - Normal +-- 0x0001 - Rear PA Unit Loading +-- 0x9999 - Rear PA Unit Not Present +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("PA-KSD-M") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.TriggerNames = { + "B7", + "B8", + "B9", + "BLeft", + "BRight", + "B4", + "B5", + "B6", + "BUp", + "B1", + "B2", + "B3", + "BDown", + "B0", + "BMinus", + "BPlus", + "BEnter", + "BEsc", + "BF", + "BM", + "BP", + } + self.Triggers = {} + self.Pass = "777" + self.EnteredPass = "" + self.Timer = CurTime() + self.Line = 1 + self.State = 0 + self.RealState = 99 + self.RouteNumber = "" + self.FirstStation = "" + self.LastStation = "" + self.AutodriveEnabled = false + self.KSZD = false + self.AutoTimer = false + self.MenuChoosed = 1 + self.State75 = 1 + self.Corrections = { + [110] = 1.50, + [111] = -0.10, + [113] = -0.05, + --[114] = -0.05, + [114] = -0.25, + [117] = -0.15, + [118] = 1.40, + [121] = -0.10, + [122] = -0.10, + [123] = 3.00, + [322] = 3.00, + } +end +function TRAIN_SYSTEM:ClientInitialize() + self.STR1r = {} + self.STR2r = {} + self.STR1x = 1 + self.STR2x = 1 + self.Positions = { + [-3] = "T2", + [-2] = "T1a", + [-1] = "T1", + [0] = "0", + [1] = "X1", + [2] = "X2", + [3] = "X3", + --[4] = "RR0", + [5] = "0ХТ", + [6] = "T2", + } + self.TypesRussian = { + [0] = "ЭП", + [1] = "КС", + [2] = "ОД", + [3] = "КВ", + [4] = "УÐ", + [5] = "ОС", + } + self.TypesEnglish = { + [0] = "EP", + [1] = "KS", + [2] = "OD", + [3] = "KV", + [4] = "UA", + [5] = "OS", + } + self.QuestionsRussian = { + [01] = "Подтверди проверку наката?", + [05] = "Подтверди движение Ñ VÑ„=0?", + [06] = {"Подтверди изменение","Ñтанции оборота"}, + [07] = {"Подтверди режим","фикÑации Ñтанции"}, + [08] = {"Следи за графиком","Ты будешь виноват в задержке"}, + [11] = "Перейти в режим ÐÐ’?", + [12] = "Перейти в режим КС?", + [13] = "Перейти в режим ОД?", + } + self.QuestionsEnglish = { + [01] = "Confirm overrun check?", + [05] = "Confirm drive if Vf=0?", + [06] = {"Confirm change", "station rotation"}, + [07] = {"Confirm lock", "station mode"}, + [08] = {"Mind the schedule", "Delays are your fault"}, + [11] = "Enter the AV mode?", + [12] = "Enter the KS mode?", + [13] = "Enter the OD mode?", + } + + local translate = file.Read("metrostroi_data/language/paksdm_en.json") + if translate then + self.i18n = util.JSONToTable(translate) + end + self.T = function (source) + if self.i18n and self.BlokEN and self.i18n[source] ~= nil then + return self.i18n[source] + else + if self.i18n and self.BlokEN then print("Need translation for \""..source.."\"") end + return source + end + end + self.BlokEN=false + self.Types=self.TypesRussian + self.Questions=self.QuestionsRussian + self.AutodriveEnabled = false + self.KSZD = false + self.AutoTimer = false +end + +if TURBOSTROI then return end +function TRAIN_SYSTEM:Inputs() + return { "Press" } +end + +if CLIENT then + local gr_up = Material("vgui/gradient-d") + function TRAIN_SYSTEM:PAKSDM(train) + local Announcer = self.Train.Announcer + surface.SetAlphaMultiplier(1) + draw.NoTexture() + + if self.BlokEN ~= train:GetNW2Bool("BlokEN") then + self.BlokEN = train:GetNW2Bool("BlokEN") + if self.BlokEN then + self.Types=self.TypesEnglish + self.Questions=self.QuestionsEnglish + else + self.Types=self.TypesRussian + self.Questions=self.QuestionsRussian + end + end + + if train:GetNW2Int("PAKSDM:State",-1) ~= -1 then + surface.SetDrawColor(Color(20,20,20)) + surface.DrawRect(0,0,512,425) + end + if train:GetNW2Int("PAKSDM:State",-1) == -2 then + if not self.BSODTimer then self.BSODTimer = CurTime() end + surface.SetDrawColor(Color(0,0,172)) + surface.DrawRect(0,0,512,425) + + if CurTime() - self.BSODTimer > 1/32*1 then draw.SimpleText("A problem has been detected and PA-KSD-M has been shut down to prevent damage","Metrostroi_PAMBSOD",5, 25,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + if CurTime() - self.BSODTimer > 2/32*1 then draw.SimpleText("to your train.","Metrostroi_PAMBSOD",5, 35,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + + if CurTime() - self.BSODTimer > 4/32*1 then draw.SimpleText("The problem seems to be caused by the following file: CORE.SYS","Metrostroi_PAMBSOD",5, 55,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + + if CurTime() - self.BSODTimer > 6/32*1 then draw.SimpleText("VISITED_BY_KEK_POLICE_ERROR","Metrostroi_PAMBSOD",5, 75,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + + if CurTime() - self.BSODTimer > 7/32*1 then draw.SimpleText("If this is the first time you've seen this Stop error screen","Metrostroi_PAMBSOD",5, 95,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + if CurTime() - self.BSODTimer > 8/32*1 then draw.SimpleText("restart your computer. If this screen appears again, follow","Metrostroi_PAMBSOD",5, 105,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + if CurTime() - self.BSODTimer > 9/32*1 then draw.SimpleText("these steps:","Metrostroi_PAMBSOD",5, 115,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + + if CurTime() - self.BSODTimer > 11/32*1 then draw.SimpleText("Check to make sure any new hardware or software is properly installed.","Metrostroi_PAMBSOD",5, 135,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + if CurTime() - self.BSODTimer > 12/32*1 then draw.SimpleText("If this is a new installation, ask your hardware or software manufacturer","Metrostroi_PAMBSOD",5, 145,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + if CurTime() - self.BSODTimer > 13/32*1 then draw.SimpleText("for any Windows updates you might need.","Metrostroi_PAMBSOD",5, 155,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + + if CurTime() - self.BSODTimer > 15/32*1 then draw.SimpleText("If problems continue, disable or remove any newly installed hardware","Metrostroi_PAMBSOD",5, 175,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + if CurTime() - self.BSODTimer > 16/32*1 then draw.SimpleText("or software. Disable BIOS memory options such as caching or shadowing.","Metrostroi_PAMBSOD",5, 185,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + if CurTime() - self.BSODTimer > 17/32*1 then draw.SimpleText("If you need to use Safe Mode to remove or disable components, restart","Metrostroi_PAMBSOD",5, 195,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + if CurTime() - self.BSODTimer > 18/32*1 then draw.SimpleText("your computer, press F8 to select Advanced Startup Options, and then","Metrostroi_PAMBSOD",5, 205,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + if CurTime() - self.BSODTimer > 19/32*1 then draw.SimpleText("select Safe Mode.","Metrostroi_PAMBSOD",5, 215,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + + if CurTime() - self.BSODTimer > 21/32*1 then draw.SimpleText("Technical information:","Metrostroi_PAMBSOD",5, 235,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + + if CurTime() - self.BSODTimer > 22/32*1 then draw.SimpleText("*** STOP: 0x0000000A (0x0000000C, 0x00000002, 0x00000000, 3311BACE)","Metrostroi_PAMBSOD",5, 255,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + + + if CurTime() - self.BSODTimer > 25/32*1 then draw.SimpleText("*** autodrive.sys - Address 3311BACE base at 5721DAC7, Date Stamp 533acb25","Metrostroi_PAMBSOD",5, 285,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + + if CurTime() - self.BSODTimer > 27/32*1 then draw.SimpleText("Beginning dump of physical memory.","Metrostroi_PAMBSOD",5, 305,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + if CurTime() - self.BSODTimer > 28/32*1 then draw.SimpleText("Physical memory dump complete.","Metrostroi_PAMBSOD",5, 315,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + if CurTime() - self.BSODTimer > 29/32*1 then draw.SimpleText("Contact your system administrator or technical support group for further","Metrostroi_PAMBSOD",5, 325,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + if CurTime() - self.BSODTimer > 30/32*1 then draw.SimpleText("assistance.","Metrostroi_PAMBSOD",5, 335,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + + else + if self.BSODTimer then self.BSODTimer = nil end + end + if train:GetNW2Int("PAKSDM:State",-1) == 0 then + if CurTime()%0.4 > 0.2 then draw.SimpleText("_","Metrostroi_PAM30",5, 0,Color(150,150,150,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_BOTTOM) end + end + if train:GetNW2Int("PAKSDM:State",-1) == 2 then + surface.SetDrawColor(Color(0,0,255)) + surface.SetMaterial( Material("vgui/gradient_down")) + surface.DrawTexturedRect(0,0,512,427) + + surface.SetDrawColor(Color(255,255,255)) + surface.SetMaterial( Material("vgui/gradient-d")) + surface.DrawTexturedRect(0,200,512,50) + surface.SetMaterial( Material("vgui/gradient-u")) + surface.DrawTexturedRect(0,250,512,50) + + surface.SetDrawColor(Color(0,255,0)) + surface.SetMaterial( Material("vgui/gradient-d")) + surface.DrawTexturedRect(0,200,512,227) + + draw.SimpleText(self.T("ÐИИ Фабрики SENT"),"Metrostroi_PAM30",256, 100,Color(0,155,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Терминал машиниÑта (ПÐ-КСД-М)"),"Metrostroi_PAM30",256, 130,Color(0,155,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + + if train:GetNW2Int("PAKSDM:State",-1) == 3 then + self.ErrorCodes = { + [0x9999] = {"",self.T("Терминал машиниÑта (ПÐ-КСД-М)")}, + [0x0001] = {"",self.T("ХвоÑÑ‚Ð¾Ð²Ð°Ñ ÐŸÐ Ð·Ð°Ð³Ñ€ÑƒÐ¶Ð°ÐµÑ‚ÑÑ")}, + [0x0002] = {"",self.T("ХвоÑÑ‚Ð¾Ð²Ð°Ñ ÐŸÐ Ð² режиме наÑтройки")}, + } + local ErrorCode = train:GetNW2Int("PAKSDM:ErrorCode",0) + local BackErrorCode = train:GetNW2Int("PAKSDM:BErrorCode",0) + + surface.SetDrawColor(Color(200,200,200)) + surface.DrawRect(0,0,512,425) + + draw.SimpleText(self.T("ÐÐЧÐЛЬÐЫЙ ТЕСТ ЗÐКОÐЧЕÐ"),"Metrostroi_PAM30",256, 30,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + Metrostroi.DrawRectOutline(10, 80, 492, 210,Color(20,20,20),3 ) + + surface.SetDrawColor(Color(200,200,200)) + surface.DrawRect(17,70,180,20) + draw.SimpleText(self.T("РЕЗУЛЬТÐТЫ"),"Metrostroi_PAM30",22, 80,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + + draw.SimpleText(self.T("Ðачальный теÑÑ‚"),"Metrostroi_PAM30",20, 125,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("норма"),"Metrostroi_PAM30",497, 125,Color(110,172,95),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("ÐÐ°Ñ‡Ð°Ð»ÑŒÐ½Ð°Ñ ÑƒÑтановка"),"Metrostroi_PAM30",20, 165,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("норма"),"Metrostroi_PAM30",497, 165,Color(110,172,95),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("СоÑтоÑние \"хвоÑтовой\" ПÐ"),"Metrostroi_PAM30",20, 205,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + + if not train:GetNW2Bool("PAKSDM:BackPA") or BackErrorCode == 0x9999 then + draw.SimpleText(self.T("не норма"),"Metrostroi_PAM30",497, 205,Color(200,0,0),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + elseif BackErrorCode == 0x0001 then + draw.SimpleText(self.T("загрузка"),"Metrostroi_PAM30",497, 205,Color(200,100,0),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + else + draw.SimpleText(self.T("норма"),"Metrostroi_PAM30",497, 205,Color(110,172,95),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + end + draw.SimpleText(self.T("ВерÑÐ¸Ñ ÐŸÐž БЦВМ = 0.8"),"Metrostroi_PAM30",80, 245,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if not train:GetNW2Bool("PAKSDM:BackPA") then + draw.SimpleText(self.T("Ðет ÑвÑзи Ñ Ñ…Ð²Ð¾Ñтовым БЦВМ"),"Metrostroi_PAM30",256, 350,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + elseif BackErrorCode > 0 then + draw.SimpleText(self.ErrorCodes[BackErrorCode] and self.ErrorCodes[BackErrorCode][2] or (self.T("Код ошибки:")..BackErrorCode),"Metrostroi_PAM30",256, 350,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + elseif not train:GetNW2Bool("PAKSDM:RR",false) then + draw.SimpleText(self.T("ВСТÐВЬТЕ РЕВЕРСИВÐУЮ РУКОЯТКУ"),"Metrostroi_PAM30",256, 350,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText(self.T("Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° в начальное меню нажмите \"Enter\""),"Metrostroi_PAM22",10, 320,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + --Metrostroi.DrawRectOL(100, 345, 75, 30,Color(20,20,20),3 ,Color(230,230,2300)) + --draw.SimpleText(self.T("нажми Enter"),"Metrostroi_PAM30",10, 360,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)T_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(216, 340, 80, 40,Color(200,200,200),gr_up,2,Color(110,110,110)) + draw.SimpleText(self.T("Enter"),"Metrostroi_PAM30",256, 360,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + if train:GetNW2Bool("PAKSDM:BackPAErrorNoAccepted") then + Metrostroi.DrawTextRectOL(102, 155, 308, 30,Color(42,58,148),gr_up,1,Color(110,110,110)) + Metrostroi.DrawRectOL(102, 175, 308, 86,Color(110,110,110),1,Color(200,200,200)) + draw.SimpleText(self.T("Ошибка задней ПÐ"),"Metrostroi_PAM25",256, 164,Color(255,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --Metrostroi.DrawRectOutline(106, 125, 300, 150,Color(20,20,20),3 ) + --surface.SetDrawColor(Color(200,200,200)) + --surface.DrawRect(108, 127, 295, 146 ) + draw.SimpleText(self.T("ЗаднÑÑ ÐŸÐ Ñообщила об ошибке"),"Metrostroi_PAM22",256, 190,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --draw.SimpleText(self.T("вводе данных"),"Metrostroi_PAM30",256, 190,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --Metrostroi.DrawRectOutline(190, 220, 132, 40,Color(20,20,20),3 ) + --draw.SimpleText(self.T("ENTER"),"Metrostroi_PAM30",256, 240,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(166, 210, 180, 40,train:GetNW2Bool("PAKSDM:NCCanc",false) and Color(42,58,148) or Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText(self.T("Подтвердить"),"Metrostroi_PAM30",256, 230,train:GetNW2Bool("PAKSDM:NCCanc") and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + --draw.SimpleText(self.Questions[train:GetNW2Int("PAKSDM:NeedConfirm",0)].."?","Metrostroi_PAM30",256, 180,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + + end + if train:GetNW2Int("PAKSDM:State",-1) == 4 then + surface.SetDrawColor(Color(200,200,200)) + surface.DrawRect(0,0,512,425) + --elf.Train:GetNW2Int("PAKSDM:Pass",0) ~= -1 and string.rep("*",self.Train:GetNW2Int("PAKSDM:Pass",0)) or "ACCESS ERROR" + Metrostroi.DrawRectOutline(10, 80, 492, 170,Color(20,20,20),3 ) + if train:GetNW2Int("PAKSDM:Pass",0) == -1 then + draw.SimpleText(self.T("ОШИБКРДОСТУПÐ"),"Metrostroi_PAM30",256, 160,Color(200,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText(self.T("Введи код доÑтупа в ÑиÑтему"),"Metrostroi_PAM30",256, 130,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + if train:GetNW2Int("PAKSDM:Pass",0) > 0 then + surface.SetDrawColor(Color(240,240,240)) + --surface.DrawTexturedRect(241 - train:GetNW2Int("PAKSDM:Pass",0)*12, 165, 30 + train:GetNW2Int("PAKSDM:Pass",0)*24, 40) + Metrostroi.DrawTextRectOL(241 - train:GetNW2Int("PAKSDM:Pass",0)*12, 165, 30 + train:GetNW2Int("PAKSDM:Pass",0)*24, 40,Color(200,200,200),gr_up,2,Color(110,110,110)) + --Metrostroi.DrawRectOL(241 - train:GetNW2Int("PAKSDM:Pass",0)*12, 165, 30 + train:GetNW2Int("PAKSDM:Pass",0)*24, 40,Color(20,20,20),3,Color(230,230,2300)) + draw.SimpleText(string.rep("*",train:GetNW2Int("PAKSDM:Pass",0)),"Metrostroi_PAM80",256, 200,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + + draw.SimpleText(self.T("Ð”Ð»Ñ Ð²Ð²Ð¾Ð´Ð° нажми \"Enter\""),"Metrostroi_PAM30",256, 300,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(216, 320, 80, 40,Color(200,200,200),gr_up,2,Color(110,110,110)) + draw.SimpleText(self.T("Enter"),"Metrostroi_PAM30",256, 340,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + end + if train:GetNW2Int("PAKSDM:State",-1) == 5 then + surface.SetDrawColor(Color(200,200,200)) + surface.DrawRect(0,0,512,425) + + Metrostroi.DrawRectOutline(10, 30, 492, 333,Color(20,20,20),3) + + surface.SetDrawColor(Color(200,200,200)) + surface.DrawRect(17,15,310,30) + draw.SimpleText(self.T("Депо. Ðачальное меню."),"Metrostroi_PAM30",20, 30,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + --elf.Train:GetNW2Int("PAKSDM:Pass",0) ~= -1 and string.rep("*",self.Train:GetNW2Int("PAKSDM:Pass",0)) or "ACCESS ERROR" + + Metrostroi.DrawTextRectOL(40, 140, 432, 40,train:GetNW2Int("PAKSDM:State5",1) == 1 and Color(42,58,148) or Color(230,230,230),gr_up,3,Color(110,110,110)) + draw.SimpleText("1","Metrostroi_PAM30",60, 160,train:GetNW2Int("PAKSDM:State5",1) == 1 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(60,173,75,173,train:GetNW2Int("PAKSDM:State5",1) == 1 and Color(255,255,255) or Color(0,0,0),3) + draw.SimpleText(self.T("Выход на линию"),"Metrostroi_PAM30",100, 160,train:GetNW2Int("PAKSDM:State5",1) == 1 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + + if train:GetNW2Bool("PAKSDM:Restart") then + Metrostroi.DrawTextRectOL(40, 190, 432, 40,train:GetNW2Int("PAKSDM:State5",1) == 2 and Color(42,58,148) or Color(230,230,230),gr_up,3,Color(110,110,110)) + draw.SimpleText("2","Metrostroi_PAM30",60, 210,train:GetNW2Int("PAKSDM:State5",1) == 2 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(60,222,75,222,train:GetNW2Int("PAKSDM:State5",1) == 2 and Color(255,255,255) or Color(0,0,0),3) + draw.SimpleText(self.T("ПерезапуÑк"),"Metrostroi_PAM30",100, 210,train:GetNW2Int("PAKSDM:State5",1) == 2 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + + Metrostroi.DrawTextRectOL(40, 240, 432, 40,train:GetNW2Int("PAKSDM:State5",1) == 3 and Color(42,58,148) or Color(230,230,230),gr_up,3,Color(110,110,110)) + --draw.SimpleText("1","Metrostroi_PAM30",60, 260,train:GetNW2Int("PAKSDM:State5",1) == 1 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + --Metrostroi.DrawLine(60,273,75,273,train:GetNW2Int("PAKSDM:State5",1) == 1 and Color(255,255,255) or Color(0,0,0),3) + draw.SimpleText(self.T("Ðазад"),"Metrostroi_PAM30",100, 260,train:GetNW2Int("PAKSDM:State5",1) == 3 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + if train:GetNW2Int("PAKSDM:State",-1) == 6 then + local Line = self.Train:GetNW2Int("PAKSDM:Line",0) + local FirstStation = self.Train:GetNW2Int("PAKSDM:FirstStation",-1) + local LastStation = self.Train:GetNW2Int("PAKSDM:LastStation",-1) + local RouteNumber = self.Train:GetNW2Int("PAKSDM:RouteNumber",-1) + local tbl = Metrostroi.WorkingStations + Metrostroi.DrawTextRectOL(40, 40, 432, 30,Color(42,58,148),gr_up,1,Color(110,110,110)) + Metrostroi.DrawRectOL(40, 70, 432, 315,Color(110,110,110),1,Color(200,200,200)) + Metrostroi.DrawRectOutline(50, 90, 412, 275,Color(110,110,110),2) + draw.SimpleText(self.T("Ðачальные данные"),"Metrostroi_PAM25",256, 53,Color(255,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + surface.SetDrawColor(Color(200,200,200)) + surface.DrawRect(170,80,172,20) + draw.SimpleText(self.T("Ввод данных"),"Metrostroi_PAM30",256, 90,Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("ЛиниÑ"),"Metrostroi_PAM22",60, 130,Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(310, 115, 140, 30,train:GetNW2Int("PAKSDM:State6",1) == 1 and Color(144,255,237) or Color(230,230,230),gr_up,1,Color(110,110,110)) + if Line > -1 then draw.SimpleText(Line,"Metrostroi_PAM30",380,130,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + + draw.SimpleText(self.T("ÐÐ°Ñ‡Ð°Ð»ÑŒÐ½Ð°Ñ ÑтанциÑ"),"Metrostroi_PAM22",60, 162,Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(310, 147, 140, 30,train:GetNW2Int("PAKSDM:State6",1) == 2 and Color(144,255,237) or Color(230,230,230),gr_up,1,Color(110,110,110)) + if FirstStation > -1 then draw.SimpleText(FirstStation,"Metrostroi_PAM30",380,163,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + + draw.SimpleText(self.T("ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ ÑтанциÑ"),"Metrostroi_PAM22",60, 194,Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(310, 179, 140, 30,train:GetNW2Int("PAKSDM:State6",1) == 3 and Color(144,255,237) or Color(230,230,230),gr_up,1,Color(110,110,110)) + if LastStation > -1 then draw.SimpleText(LastStation,"Metrostroi_PAM30",380,195,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + + draw.SimpleText(self.T("Маршрут"),"Metrostroi_PAM22",60, 226,Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(310, 211, 140, 30,train:GetNW2Int("PAKSDM:State6",1) == 4 and Color(144,255,237) or Color(230,230,230),gr_up,1,Color(110,110,110)) + if RouteNumber > -1 then draw.SimpleText(RouteNumber,"Metrostroi_PAM30",380,225,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + + + Metrostroi.DrawTextRectOL(150, 330, 100, 30,Color(230,230,230),gr_up,1,Color(110,110,110)) + draw.SimpleText(self.T("Ввод"),"Metrostroi_PAM30",200, 344,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(260, 330, 100, 30,Color(230,230,230),gr_up,1,Color(110,110,110)) + draw.SimpleText(self.T("Ðазад"),"Metrostroi_PAM30",310, 344,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + if train:GetNW2Int("PAKSDM:State6",1) == 2 and tbl[Line] then + local i = 1 + for k,v in pairs(tbl[Line]) do + if Metrostroi.AnnouncerData[v] and (tostring(v):find(FirstStation) or FirstStation == -1) then + i = i + 1 + if i > 10 then break end + end + end + if i > 1 then + Metrostroi.DrawRectOL(310, 177, 200, -18 + i*18,Color(110,110,110),1,Color(250,250,250) ) + local i = 1 + for k,v in pairs(tbl[Line]) do + if Metrostroi.AnnouncerData[v] and (tostring(v):find(FirstStation) or FirstStation == -1) then + if i > 10 then break end + draw.SimpleText(v,"Metrostroi_PAM1_20",311, 167+i*18,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Metrostroi.AnnouncerData[v][1]:sub(1,19),"Metrostroi_PAM1_20",345, 167+i*18,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + + i = i + 1 + end + end + --Metrostroi.DrawLine(140, 155, 140, 145 + i*22,Color(20,20,20),3 ) + end + end + if train:GetNW2Int("PAKSDM:State6",1) == 3 and tbl[Line] then + local i = 1 + for k,v in pairs(tbl[Line]) do + if Metrostroi.AnnouncerData[v] and (tostring(v):find(LastStation) or LastStation == -1) then + i = i + 1 + if i > 10 then break end + end + end + if i > 1 then + Metrostroi.DrawRectOL(310, 207, 200, -18 + i*18,Color(110,110,110),1,Color(250,250,250) ) + local i = 1 + for k,v in pairs(tbl[Line]) do + if Metrostroi.AnnouncerData[v] and (tostring(v):find(LastStation) or LastStation == -1) then + if i > 10 then break end + draw.SimpleText(v,"Metrostroi_PAM1_20",311, 197+i*18,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Metrostroi.AnnouncerData[v][1]:sub(1,19),"Metrostroi_PAM1_20",345, 197+i*18,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + + i = i + 1 + end + end + --Metrostroi.DrawLine(140, 155, 140, 145 + i*22,Color(20,20,20),3 ) + end + end + if train:GetNW2Bool("PAKSDM:State6Error",false) then + Metrostroi.DrawTextRectOL(106, 125, 300, 30,Color(42,58,148),gr_up,1,Color(110,110,110)) + Metrostroi.DrawRectOL(106, 145, 300, 136,Color(110,110,110),1,Color(200,200,200)) + draw.SimpleText(self.T("Ошибка"),"Metrostroi_PAM25",256, 135,Color(255,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --Metrostroi.DrawRectOutline(106, 125, 300, 150,Color(20,20,20),3 ) + --surface.SetDrawColor(Color(200,200,200)) + --surface.DrawRect(108, 127, 295, 146 ) + draw.SimpleText(self.T("Ошибка при"),"Metrostroi_PAM30",256, 160,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("вводе данных"),"Metrostroi_PAM30",256, 190,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --Metrostroi.DrawRectOutline(190, 220, 132, 40,Color(20,20,20),3 ) + --draw.SimpleText(self.T("ENTER"),"Metrostroi_PAM30",256, 240,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(216, 220, 80, 40,Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText(self.T("Enter"),"Metrostroi_PAM30",256, 240,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + if train:GetNW2Int("PAKSDM:State",-1) == 7 then + local Line = self.Train:GetNW2Int("PAKSDM:Line",0) + local FirstStation = self.Train:GetNW2Int("PAKSDM:FirstStation",-1) + local LastStation = self.Train:GetNW2Int("PAKSDM:LastStation",-1) + local RouteNumber = self.Train:GetNW2Int("PAKSDM:RouteNumber",-1) + local tbl = Metrostroi.WorkingStations + Metrostroi.DrawTextRectOL(40, 40, 432, 30,Color(42,58,148),gr_up,1,Color(110,110,110)) + Metrostroi.DrawRectOL(40, 70, 432, 315,Color(110,110,110),1,Color(200,200,200)) + Metrostroi.DrawRectOutline(50, 90, 412, 275,Color(110,110,110),2) + draw.SimpleText(self.T("Ðачальные данные"),"Metrostroi_PAM25",256, 53,Color(255,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + surface.SetDrawColor(Color(200,200,200)) + surface.DrawRect(170,80,172,20) + draw.SimpleText(self.T("Ввод данных"),"Metrostroi_PAM30",256, 90,Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("ЛиниÑ"),"Metrostroi_PAM22",60, 130,Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(310, 115, 140, 30,train:GetNW2Int("PAKSDM:State6",1) == 1 and Color(144,255,237) or Color(230,230,230),gr_up,1,Color(110,110,110)) + if Line > -1 then draw.SimpleText(Line,"Metrostroi_PAM30",380,130,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + + draw.SimpleText(self.T("ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ ÑтанциÑ"),"Metrostroi_PAM22",60, 162,Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(310, 147, 140, 30,train:GetNW2Int("PAKSDM:State6",1) == 2 and Color(144,255,237) or Color(230,230,230),gr_up,1,Color(110,110,110)) + if LastStation > -1 then draw.SimpleText(LastStation,"Metrostroi_PAM30",380,163,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + + draw.SimpleText(self.T("Маршрут"),"Metrostroi_PAM22",60, 194,Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(310, 179, 140, 30,train:GetNW2Int("PAKSDM:State6",1) == 3 and Color(144,255,237) or Color(230,230,230),gr_up,1,Color(110,110,110)) + if RouteNumber > -1 then draw.SimpleText(RouteNumber,"Metrostroi_PAM30",380,195,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + + + Metrostroi.DrawTextRectOL(150, 330, 100, 30,Color(230,230,230),gr_up,1,Color(110,110,110)) + draw.SimpleText(self.T("Ввод"),"Metrostroi_PAM30",200, 344,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(260, 330, 100, 30,Color(230,230,230),gr_up,1,Color(110,110,110)) + draw.SimpleText(self.T("Ðазад"),"Metrostroi_PAM30",310, 344,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + if train:GetNW2Int("PAKSDM:State6",1) == 2 and tbl[Line] then + local i = 1 + for k,v in pairs(tbl[Line]) do + if Metrostroi.AnnouncerData[v] and (tostring(v):find(LastStation) or LastStation == -1) then + i = i + 1 + if i > 10 then break end + end + end + if i > 1 then + Metrostroi.DrawRectOL(310, 177, 200, -18 + i*18,Color(110,110,110),1,Color(250,250,250) ) + local i = 1 + for k,v in pairs(tbl[Line]) do + if Metrostroi.AnnouncerData[v] and (tostring(v):find(LastStation) or LastStation == -1) then + if i > 10 then break end + draw.SimpleText(v,"Metrostroi_PAM1_20",311, 167+i*18,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Metrostroi.AnnouncerData[v][1]:sub(1,19),"Metrostroi_PAM1_20",345, 167+i*18,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + + i = i + 1 + end + end + --Metrostroi.DrawLine(140, 155, 140, 145 + i*22,Color(20,20,20),3 ) + end + end + if train:GetNW2Bool("PAKSDM:State6Error",false) then + Metrostroi.DrawTextRectOL(106, 125, 300, 30,Color(42,58,148),gr_up,1,Color(110,110,110)) + Metrostroi.DrawRectOL(106, 145, 300, 136,Color(110,110,110),1,Color(200,200,200)) + draw.SimpleText(self.T("Ошибка"),"Metrostroi_PAM25",256, 135,Color(255,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --Metrostroi.DrawRectOutline(106, 125, 300, 150,Color(20,20,20),3 ) + --surface.SetDrawColor(Color(200,200,200)) + --surface.DrawRect(108, 127, 295, 146 ) + draw.SimpleText(self.T("Ошибка при"),"Metrostroi_PAM30",256, 160,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("вводе данных"),"Metrostroi_PAM30",256, 190,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --Metrostroi.DrawRectOutline(190, 220, 132, 40,Color(20,20,20),3 ) + --draw.SimpleText(self.T("ENTER"),"Metrostroi_PAM30",256, 240,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(216, 220, 80, 40,Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText(self.T("Enter"),"Metrostroi_PAM30",256, 240,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + if train:GetNW2Int("PAKSDM:State",-1) == 8 then + surface.SetDrawColor(Color(200,200,200)) + surface.DrawRect(0,0,512,425) + draw.SimpleText(self.T("Проверка ÑоÑтава разрешена"),"Metrostroi_PAM1_25",256, 180,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° в рабочий режим нажмите"),"Metrostroi_PAM1_25",256, 210,Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(216, 230, 80, 40,Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText(self.T("Enter"),"Metrostroi_PAM30",256, 250,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + end + if train:GetNW2Int("PAKSDM:State",-1) == 9 then + local Line = train:GetNW2Int("PAKSDM:Line",0) + local Path = train:GetNW2Int("PAKSDM:Path",0) + local Station = tonumber(train:GetNW2Int("PAKSDM:Station",0)) + local LastStation = tonumber(train:GetNW2Int("PAKSDM:LastStation",-1)) + local S = Format("%.2f",train:GetNW2Float("PAKSDM:Distance",0)) + local speed = math.floor(self.Train:GetPackedRatio(3)*100.0) + local spd = self.Train:GetNW2Bool("PAKSDM:UOS", false) and 35 or self.Train:GetNW2Bool("PAKSDM:VRD",false) and 20 or self.Train:GetPackedBool(46) and 80 or self.Train:GetPackedBool(45) and 70 or self.Train:GetPackedBool(44) and 60 or self.Train:GetPackedBool(43) and 40 or self.Train:GetPackedBool(42) and 0 or "ÐЧ" + --Metrostroi.DrawRectOutline(10, 6, 100, 40,Color(110,172,95),3 ) + local date = os.date("!*t",os_time) + draw.SimpleText(Format("%02d.%02d.%04d",date.day,date.month,date.year),"Metrostroi_PAM25",59, 10,Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("%02d:%02d:%02d",date.hour,date.min,date.sec),"Metrostroi_PAM25",59, 30,Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Ð›Ð¸Ð½Ð¸Ñ ")..Line,"Metrostroi_PAM25",150, 15,Color(254,237,142),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if Station > 0 and Metrostroi.AnnouncerData[LastStation] then + draw.SimpleText(self.T("до ")..Metrostroi.AnnouncerData[LastStation][1],"Metrostroi_PAM20",508, 10,Color(212,212,212),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + if Metrostroi.AnnouncerData[Station] then draw.SimpleText(Metrostroi.AnnouncerData[Station][1],"Metrostroi_PAM20",508, 30,Color(212,212,212),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) end + elseif Metrostroi.AnnouncerData[LastStation] then + draw.SimpleText(self.T("выход на линию"),"Metrostroi_PAM20",508, 13,Color(212,212,212),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + draw.SimpleText(Metrostroi.AnnouncerData[LastStation][1],"Metrostroi_PAM20",508, 30,Color(212,212,212),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + else + draw.SimpleText(self.T("ошибка в ÑиÑтеме ПÐ"),"Metrostroi_PAM20",508, 13,Color(212,212,212),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Тек:")..Station..self.T(", Кон:")..LastStation,"Metrostroi_PAM20",508, 30,Color(212,212,212),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + end + if Path and Path > 0 then + draw.SimpleText(self.T("Путь ")..Path,"Metrostroi_PAM25",260, 15,Color(254,237,142),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + draw.SimpleText(self.T("Путь N/A"),"Metrostroi_PAM25",260, 15,Color(254,237,142),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + Metrostroi.DrawRectOutline(5, 95, 410, 30,Color(40,38,39), 5) + + surface.SetDrawColor(Color(5,30,17)) + surface.DrawRect(9,99,401,21) + + surface.SetDrawColor(Color(110,172,95)) + surface.DrawRect(9,99,401*self.Train:GetPackedRatio(3),21) + + Metrostroi.DrawLine(10 + (spd == "ÐЧ" and 20 or spd)*4-2, 93, 10 + (spd == "ÐЧ" and 20 or spd)*4-2, 125,(spd == "ÐЧ" and 20 or spd) > 20 and Color(254,237,142) or Color(200,0,0), 4) + surface.SetDrawColor((spd == "ÐЧ" and 20 or spd) > 20 and Color(254,237,142) or Color(200,0,0)) + + draw.SimpleText((spd == "ÐЧ" and 20 or spd),"Metrostroi_PAM30",10 + (spd == "ÐЧ" and 20 or spd)*4, 135,(spd == "ÐЧ" and 20 or spd) > 20 and Color(254,237,142) or Color(200,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + draw.SimpleText(speed,"Metrostroi_PAM50",480, 85,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(spd,"Metrostroi_PAM50",480, 120,(spd == "ÐЧ" and 20 or spd) > 20 and Color(254,237,142) or Color(200,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + --Metrostroi.DrawRectOutline(5, 155, 60, 30,Color(40,38,39), 1) + --Metrostroi.DrawRectOutline(5, 185, 60, 30,Color(40,38,39), 1) + --Metrostroi.DrawRectOutline(5, 215, 60, 30,Color(40,38,39), 1) + --RunConsoleCommand("say",tostring(train:GetPackedBool("PAKSDM:KS"))) + draw.SimpleText(self.T("1 ÐÐ’"),"Metrostroi_PAM30",6, 170,train:GetNW2Bool("PAKSDM:AV",false) and Color(38,81,109) or Color(200,200,200),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("2 КС"),"Metrostroi_PAM30",6, 200,train:GetNW2Bool("PAKSDM:KS",false) and Color(38,81,109) or Color(200,200,200),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("3 ОС"),"Metrostroi_PAM30",6, 230,train:GetNW2Bool("PAKSDM:OD",false) and Color(38,81,109) or Color(200,200,200),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + + --Metrostroi.DrawRectOutline(429, 155, 80, 30,Color(40,38,39), 1) + --Metrostroi.DrawRectOutline(429, 185, 80, 30,Color(40,38,39), 1) + --Metrostroi.DrawRectOutline(429, 215, 80, 30,Color(40,38,39), 1) + --Metrostroi.DrawRectOutline(429, 245, 80, 30,Color(40,38,39), 1) + --Metrostroi.DrawRectOutline(429, 275, 80, 30,Color(40,38,39), 1) + draw.SimpleText(self.T("4 СтП"),"Metrostroi_PAM30",430, 170,Color(200,200,200),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("6 Пож"),"Metrostroi_PAM30",430, 200,Color(200,200,200),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("7 Лин"),"Metrostroi_PAM30",430, 230,Color(200,200,200),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("8 Отм"),"Metrostroi_PAM30",430, 260,Color(200,200,200),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("9 ФСт"),"Metrostroi_PAM30",430, 290,Color(200,200,200),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + + Metrostroi.DrawLine(10 + (spd == "ÐЧ" and 20 or spd)*4, 93, 10 + (spd == "ÐЧ" and 20 or spd)*4, 125,(spd == "ÐЧ" and 20 or spd) > 20 and Color(254,237,142) or Color(200,0,0), 3) + if train:GetNW2Bool("PAKSDM:Arrived",false) then + draw.SimpleText(self.T("Tпр=00:00:00"),"Metrostroi_PAM28",6, 340,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Ðагон="),"Metrostroi_PAM28",170, 340,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("ТоÑÑ‚ = ")..math.max(-99,train:GetNW2Int("PAKSDM:BoardTime",0)),"Metrostroi_PAM28",290, 340,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("S= ")..S..self.T("м"),"Metrostroi_PAM28",506, 340,Color(110,172,95),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + else + draw.SimpleText(self.T("РЦ= ")..train:GetNW2String("PAKSDM:SName",""),"Metrostroi_PAM30",6, 340,Color(254,237,142),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format(self.T("Уклон= %.2f"),train:GetNW2Int("PAKSDM:Uklon",0)/100),"Metrostroi_PAM30",180, 340,Color(254,237,142),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("S= ")..S..self.T("м"),"Metrostroi_PAM30",506, 340,Color(110,172,95),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + end + + surface.SetDrawColor(Color(38,81,109)) + surface.DrawRect(0,360,120,52) + draw.SimpleText(self.T("F Меню"),"Metrostroi_PAM25",70, 375,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("машиниÑта"),"Metrostroi_PAM25",60, 395,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + surface.DrawRect(392,360,120,52) + draw.SimpleText(self.T("M Инж-ное"),"Metrostroi_PAM25",452, 375,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("меню"),"Metrostroi_PAM25",452, 395,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + surface.SetDrawColor(Color(180,180,180)) + surface.DrawRect(121,360,100,26) + surface.DrawRect(222,360,57,26) + surface.DrawRect(280,360,60,26) + surface.DrawRect(341,360,50,26) + draw.SimpleText(self.Types[train:GetNW2Int("PAKSDM:Type",1)].."="..self.Positions[train:GetNW2Int("PAKSDM:KV",1)],"Metrostroi_PAM30",171, 371,Color(20,20,20),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + if train:GetNW2Bool("PAKSDM:VZ1",false) or train:GetNW2Bool("PAKSDM:VZ2",false) then + draw.SimpleText(train:GetNW2Bool("PAKSDM:VZ1",false) and (train:GetNW2Bool("PAKSDM:VZ2",false) and self.T("Ð’1 2") or self.T("Ð’1")) or self.T("Ð’ 2"),"Metrostroi_PAM30",224, 371,Color(20,20,20),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + draw.SimpleText(self.T("ЛПТ"),"Metrostroi_PAM30",310, 371,train:GetPackedBool("PN") and Color(20,20,20) or Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + -- + draw.SimpleText(self.T("КД"),"Metrostroi_PAM30",366, 371,train:GetPackedBool(40) and Color(20,20,20) or Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + surface.DrawRect(121,387,80,26) + surface.DrawRect(321,387,70,26) + draw.SimpleText(self.T("ÐРС"),"Metrostroi_PAM30",161, 400,train:GetPackedBool(48) and Color(200,0,0) or Color(20,20,20) ,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --[[ + surface.SetDrawColor(Color(200,200,200)) + if not train:GetNW2Bool("PAKSDM:RR",false) then + surface.DrawRect(6,295,490,21) + draw.SimpleText(self.T("УÑтанови РР"),"Metrostroi_PAM30",251, 305,Color(20,20,20),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + surface.DrawRect(6,320,100,24) surface.DrawRect(171,320,36,24) surface.DrawRect(212,320,54,24) --surface.DrawRect(266,320,40,20) + draw.SimpleText(self.Types[train:GetNW2Bool("PAKSDM:Type",false)].."="..self.Positions[train:GetNW2Bool("PAKSDM:KV",false)],"Metrostroi_PAM30",56, 330,Color(20,20,20),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + if train:GetNW2Bool("PAKSDM:VZ1",false) or train:GetNW2Bool("PAKSDM:VZ2",false) then + surface.DrawRect(111,320,55,24) + draw.SimpleText(train:GetNW2Bool("PAKSDM:VZ1",false) and (train:GetNW2Bool("PAKSDM:VZ2",false) and "Ð’12" or "Ð’1") or "Ð’2","Metrostroi_PAM30",111 + 55/2, 330,Color(20,20,20),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + draw.SimpleText(self.T("КД"),"Metrostroi_PAM30",171+35/2, 330,train:GetPackedBool(40) and Color(20,20,20) or Color(200,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("ЛПТ"),"Metrostroi_PAM30",239, 330,train:GetPackedBool("PN") and Color(200,0,0) or Color(20,20,20),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + surface.DrawRect(6,355,100,21)-- surface.DrawRect(111,355,100,20) surface.DrawRect(215,355,50,20) + draw.SimpleText(self.T("КВ ÐРС"),"Metrostroi_PAM30",56, 365,train:GetPackedBool(48) and Color(200,0,0) or Color(20,20,20),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + ]] + --[[ + Metrostroi.DrawRectOutline(370, 320, 130, 60,Color(110,172,95),3 ) + draw.SimpleText(self.T("Тпр. ")..(self.Train:GetPackedRatio(3)*100.0 > 0.25 and math.min(999,math.floor(S/(speed*1000/3600))) or "inf"),"Metrostroi_PAM20",375, 330,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + --draw.SimpleText(self.T("Ðа ="),"Metrostroi_PAM20",375, 347.5,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("ТоÑÑ‚ = ")..train:GetNW2Int("PAKSDM:BoardTime",0),"Metrostroi_PAM20",375, 365,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + ]] + if train:GetNW2Bool("PAKSDM:Arrived",false) then + if Station > 0 then + if Metrostroi.AnnouncerData[Station] then + draw.SimpleText(Metrostroi.AnnouncerData[Station][1],"Metrostroi_PAM30",256, 200,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(Path .. self.T(" путь"),"Metrostroi_PAM30",256, 225,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + --draw.SimpleText(self.T("S= ")..S..self.T("м"),"Metrostroi_PAM30",256, 200,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --draw.SimpleText(self.T("S= ")..S..self.T("м"),"Metrostroi_PAM30",256, 250,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + if train:GetNW2Int("PAKSDM:Menu",0) > 0 then + Metrostroi.DrawRectOL(10, 140, 492, 180,Color(110,110,110),1,Color(200,200,200)) + Metrostroi.DrawTextRectOL(10, 140, 164, 45,train:GetNW2Int("PAKSDM:Menu",1) == 1 and Color(42,58,148) or Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText("1","Metrostroi_PAM30",30, 162,train:GetNW2Int("PAKSDM:Menu",1) == 1 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Проверка"),"Metrostroi_PAM22",92, 154,train:GetNW2Int("PAKSDM:Menu",1) == 1 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("наката"),"Metrostroi_PAM22",92, 170,train:GetNW2Int("PAKSDM:Menu",1) == 1 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(174, 140, 164, 45,train:GetNW2Int("PAKSDM:Menu",1) == 2 and Color(42,58,148) or Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText("2","Metrostroi_PAM30",194, 162,train:GetNW2Int("PAKSDM:Menu",1) == 2 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Движение"),"Metrostroi_PAM22",256, 154,train:GetNW2Int("PAKSDM:Menu",1) == 2 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(train:GetNW2Bool("PAKSDM:KD") and self.T("Ñ ÐšÐ”") or self.T("без КД"),"Metrostroi_PAM22",256, 170,train:GetNW2Int("PAKSDM:Menu",1) == 2 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(338, 140, 164, 45,train:GetNW2Int("PAKSDM:Menu",1) == 3 and Color(42,58,148) or Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText("3","Metrostroi_PAM30",358, 162,train:GetNW2Int("PAKSDM:Menu",1) == 3 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Смена"),"Metrostroi_PAM22",420, 154,train:GetNW2Int("PAKSDM:Menu",1) == 3 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("наÑтроек"),"Metrostroi_PAM22",420, 170,train:GetNW2Int("PAKSDM:Menu",1) == 3 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + Metrostroi.DrawTextRectOL(10, 185, 164, 45,train:GetNW2Int("PAKSDM:Menu",1) == 4 and Color(42,58,148) or Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText("4","Metrostroi_PAM30",30, 207,train:GetNW2Int("PAKSDM:Menu",1) == 4 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Движение"),"Metrostroi_PAM22",92, 199,train:GetNW2Int("PAKSDM:Menu",1) == 4 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("транзитом"),"Metrostroi_PAM22",92, 215,train:GetNW2Int("PAKSDM:Menu",1) == 4 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(174, 185, 164, 45,train:GetNW2Int("PAKSDM:Menu",1) == 5 and Color(42,58,148) or Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText("5","Metrostroi_PAM30",194, 207,train:GetNW2Int("PAKSDM:Menu",1) == 5 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Движение"),"Metrostroi_PAM22",256, 199,train:GetNW2Int("PAKSDM:Menu",1) == 5 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("при VÑ„=0"),"Metrostroi_PAM22",256, 215,train:GetNW2Int("PAKSDM:Menu",1) == 5 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(338, 185, 164, 45,train:GetNW2Int("PAKSDM:Menu",1) == 6 and Color(42,58,148) or Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText("6","Metrostroi_PAM30",358, 207,train:GetNW2Int("PAKSDM:Menu",1) == 6 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Зонный"),"Metrostroi_PAM22",420, 199,train:GetNW2Int("PAKSDM:Menu",1) == 6 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("оборот"),"Metrostroi_PAM22",420, 215,train:GetNW2Int("PAKSDM:Menu",1) == 6 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + Metrostroi.DrawTextRectOL(10, 230, 164, 45,train:GetNW2Int("PAKSDM:Menu",1) ==7 and Color(42,58,148) or Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText("7","Metrostroi_PAM30",30, 252,train:GetNW2Int("PAKSDM:Menu",1) == 7 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("ФикÑациÑ"),"Metrostroi_PAM22",92, 244,train:GetNW2Int("PAKSDM:Menu",1) == 7 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Ñтанции"),"Metrostroi_PAM22",92, 260,train:GetNW2Int("PAKSDM:Menu",1) == 7 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + Metrostroi.DrawTextRectOL(174, 230, 164, 45,train:GetNW2Int("PAKSDM:Menu",1) ==8 and Color(42,58,148) or Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText("8","Metrostroi_PAM30",194, 252,train:GetNW2Int("PAKSDM:Menu",1) == 8 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("ИГРУФКИ"),"Metrostroi_PAM22",256, 252,train:GetNW2Int("PAKSDM:Menu",1) == 8 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --draw.SimpleText(train:GetNW2Bool("PAKSDM:KD") and self.T("Ñ ÐšÐ”") or self.T("без КД"),"Metrostroi_PAM22",256, 170,train:GetNW2Int("PAKSDM:Menu",1) == 1 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --[[ + Metrostroi.DrawTextRectOL(338, 230, 164, 45,Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText("9","Metrostroi_PAM30",358, 162,train:GetNW2Int("PAKSDM:Menu",1) == 1 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Смена"),"Metrostroi_PAM22",420, 154,train:GetNW2Int("PAKSDM:Menu",1) == 1 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("наÑтроек"),"Metrostroi_PAM22",420, 170,train:GetNW2Int("PAKSDM:Menu",1) == 1 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + Metrostroi.DrawTextRectOL(10, 275, 164, 45,Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText("1","Metrostroi_PAM30",30, 162,train:GetNW2Int("PAKSDM:Menu",1) == 1 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Проверка"),"Metrostroi_PAM22",92, 154,train:GetNW2Int("PAKSDM:Menu",1) == 1 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("наката"),"Metrostroi_PAM22",92, 170,train:GetNW2Int("PAKSDM:Menu",1) == 1 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(174, 230, 164, 45,Color(230,230,230),gr_up,2,Color(110,110,110)) + ]] + Metrostroi.DrawTextRectOL(338, 275, 164, 45,train:GetNW2Int("PAKSDM:Menu",1) == 12 and Color(42,58,148) or Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText(self.T("Закрыть"),"Metrostroi_PAM22",420, 297,train:GetNW2Int("PAKSDM:Menu",1) == 12 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --[[ + Metrostroi.DrawRectOutline(50, 150, 385, 24*8,Color(160,160,160), 3) + surface.SetDrawColor(Color(200,200,200)) + surface.DrawRect(51,151,382,24*8-4) + surface.SetDrawColor(Color(200,200,200)) + surface.DrawRect(51,127 + train:GetNW2Int("PAKSDM:Menu",0)*24,382,23) + + for i = 1,7 do + Metrostroi.DrawLine(50,150+24*i,435,150+24*i,Color(160,160,160),3) + end + draw.SimpleText(self.T("Проверка наката"),"Metrostroi_PAM22",256, 162,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(train:GetNW2Bool("PAKSDM:KD") and self.T("Движение Ñ ÐšÐ”") or self.T("Движение без КД"),"Metrostroi_PAM22",256, 186,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Смена наÑтроек"),"Metrostroi_PAM22",256, 210,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Движение транзитом"),"Metrostroi_PAM22",256, 234,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Движение Ñ Vд = 0"),"Metrostroi_PAM22",256, 258,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Зонный оборот"),"Metrostroi_PAM22",256, 282,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("ФикÑÐ°Ñ†Ð¸Ñ Ñтанции"),"Metrostroi_PAM22",256, 306,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Station mode"),"Metrostroi_PAM22",256, 330,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + ]] + end + if train:GetNW2Int("PAKSDM:Ann",0) > 0 then + Metrostroi.DrawRectOL(10, 140, 492, 180,Color(110,110,110),1,Color(200,200,200)) + Metrostroi.DrawTextRectOL(10, 140, 164, 45,train:GetNW2Int("PAKSDM:Ann",1) == 1 and Color(42,58,148) or Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText("1","Metrostroi_PAM30",30, 162,train:GetNW2Int("PAKSDM:Ann",1) == 1 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("ПроÑьба"),"Metrostroi_PAM22",92, 150,train:GetNW2Int("PAKSDM:Ann",1) == 1 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("выйти"),"Metrostroi_PAM22",92, 162,train:GetNW2Int("PAKSDM:Ann",1) == 1 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("из вагонов"),"Metrostroi_PAM22",92, 174,train:GetNW2Int("PAKSDM:Ann",1) == 1 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(174, 140, 164, 45,train:GetNW2Int("PAKSDM:Ann",1) == 2 and Color(42,58,148) or Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText("2","Metrostroi_PAM30",194, 162,train:GetNW2Int("PAKSDM:Ann",1) == 2 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Заходите"),"Metrostroi_PAM22",266, 150,train:GetNW2Int("PAKSDM:Ann",1) == 2 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("и выходите"),"Metrostroi_PAM22",266, 162,train:GetNW2Int("PAKSDM:Ann",1) == 2 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("быÑтрее"),"Metrostroi_PAM22",266, 174,train:GetNW2Int("PAKSDM:Ann",1) == 2 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(338, 140, 164, 45,train:GetNW2Int("PAKSDM:Ann",1) == 3 and Color(42,58,148) or Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText("3","Metrostroi_PAM30",358, 162,train:GetNW2Int("PAKSDM:Ann",1) == 3 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("ОтпуÑтите"),"Metrostroi_PAM22",440, 150,train:GetNW2Int("PAKSDM:Ann",1) == 3 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("пожалуйÑта"),"Metrostroi_PAM22",440, 162,train:GetNW2Int("PAKSDM:Ann",1) == 3 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("двери"),"Metrostroi_PAM22",440, 174,train:GetNW2Int("PAKSDM:Ann",1) == 3 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + Metrostroi.DrawTextRectOL(10, 185, 164, 45,train:GetNW2Int("PAKSDM:Ann",1) == 4 and Color(42,58,148) or Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText("4","Metrostroi_PAM30",30, 207,train:GetNW2Int("PAKSDM:Ann",1) == 4 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Поезд"),"Metrostroi_PAM22",92, 195,train:GetNW2Int("PAKSDM:Ann",1) == 4 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Ñкоро"),"Metrostroi_PAM22",92, 207,train:GetNW2Int("PAKSDM:Ann",1) == 4 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("отправитÑÑ"),"Metrostroi_PAM22",92, 219,train:GetNW2Int("PAKSDM:Ann",1) == 4 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + Metrostroi.DrawTextRectOL(338, 275, 164, 45,train:GetNW2Int("PAKSDM:Ann",1) == 5 and Color(42,58,148) or Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText(self.T("Закрыть"),"Metrostroi_PAM22",420, 297,train:GetNW2Int("PAKSDM:Ann",1) == 5 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + if train:GetNW2Int("PAKSDM:NeedConfirm",0) > 0 then + Metrostroi.DrawTextRectOL(106, 155, 300, 30,Color(42,58,148),gr_up,1,Color(110,110,110)) + Metrostroi.DrawRectOL(106, 175, 300, 86,Color(110,110,110),1,Color(200,200,200)) + draw.SimpleText(self.T("Подтверждение"),"Metrostroi_PAM25",256, 164,Color(255,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --Metrostroi.DrawRectOutline(106, 125, 300, 150,Color(20,20,20),3 ) + --surface.SetDrawColor(Color(200,200,200)) + --surface.DrawRect(108, 127, 295, 146 ) + if type(self.Questions[train:GetNW2Int("PAKSDM:NeedConfirm",0)]) == "table" then + draw.SimpleText(self.Questions[train:GetNW2Int("PAKSDM:NeedConfirm",0)][1],"Metrostroi_PAM22",256, 182,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.Questions[train:GetNW2Int("PAKSDM:NeedConfirm",0)][2],"Metrostroi_PAM22",256, 198,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText(self.Questions[train:GetNW2Int("PAKSDM:NeedConfirm",0)],"Metrostroi_PAM22",256, 190,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + --draw.SimpleText(self.T("вводе данных"),"Metrostroi_PAM30",256, 190,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --Metrostroi.DrawRectOutline(190, 220, 132, 40,Color(20,20,20),3 ) + --draw.SimpleText(self.T("ENTER"),"Metrostroi_PAM30",256, 240,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(111, 210, 140, 40,train:GetNW2Bool("PAKSDM:NCOk",false) and Color(42,58,148) or Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText(self.T("Да - Enter"),"Metrostroi_PAM30",181, 230,train:GetNW2Bool("PAKSDM:NCOk",false) and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(261, 210, 140, 40,train:GetNW2Bool("PAKSDM:NCCanc",false) and Color(42,58,148) or Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText(self.T("Ðет - Esc"),"Metrostroi_PAM30",331, 230,train:GetNW2Bool("PAKSDM:NCCanc") and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + --draw.SimpleText(self.Questions[train:GetNW2Int("PAKSDM:NeedConfirm",0)].."?","Metrostroi_PAM30",256, 180,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + if train:GetNW2Bool("PAKSDM:Nakat") then + Metrostroi.DrawTextRectOL(106, 155, 300, 30,Color(42,58,148),gr_up,1,Color(110,110,110)) + Metrostroi.DrawRectOL(106, 175, 300, 100,Color(110,110,110),1,Color(200,200,200)) + draw.SimpleText(self.T("Проверка наката"),"Metrostroi_PAM25",256, 164,Color(255,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("РаÑÑтоÑние: "),"Metrostroi_PAM30",111, 195,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("%.2f",self.Train:GetNW2Float("PAKSDM:Meters",0)),"Metrostroi_PAM30",300, 195,Color(254,237,142),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Ðаправление: "),"Metrostroi_PAM30",111, 225,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.Train:GetNW2Bool("PAKSDM:Sign",false) and self.T("Ðазад") or self.T("Вперёд"),"Metrostroi_PAM30",300, 225,self.Train:GetNW2Bool("PAKSDM:Sign",false) and Color(200,0,0) or Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(190-20, 240, 132+40, 30,train:GetNW2Bool("PAKSDM:NCCanc",false) and Color(42,58,148) or Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText(self.T("Отмена - Esc"),"Metrostroi_PAM30",256, 255,train:GetNW2Bool("PAKSDM:NCCanc",false) and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + if train:GetNW2Bool("PAKSDM:SetupError",false) then + Metrostroi.DrawTextRectOL(106, 125, 300, 30,Color(42,58,148),gr_up,1,Color(110,110,110)) + Metrostroi.DrawRectOL(106, 145, 300, 136,Color(110,110,110),1,Color(200,200,200)) + draw.SimpleText(self.T("КритичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°"),"Metrostroi_PAM25",256, 135,Color(255,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --Metrostroi.DrawRectOutline(106, 125, 300, 150,Color(20,20,20),3 ) + --surface.SetDrawColor(Color(200,200,200)) + --surface.DrawRect(108, 127, 295, 146 ) + draw.SimpleText(self.T("Ðеообходимо"),"Metrostroi_PAM30",256, 160,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("уточнение"),"Metrostroi_PAM30",256, 180,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("данных"),"Metrostroi_PAM30",256, 200,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --Metrostroi.DrawRectOutline(190, 220, 132, 40,Color(20,20,20),3 ) + --draw.SimpleText(self.T("ENTER"),"Metrostroi_PAM30",256, 240,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(216, 220, 80, 40,Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText(self.T("Enter"),"Metrostroi_PAM30",256, 240,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + + if train:GetNW2Int("PAKSDM:Fix",-1) > -1 or train:GetNW2Int("PAKSDM:Zon",-1) > -1 then + local Line = train:GetNW2Int("PAKSDM:FLine",0) + local Station = train:GetNW2Int("PAKSDM:FStation",0) + local choosed = train:GetNW2Int("PAKSDM:Fix",-1) > -1 and train:GetNW2Int("PAKSDM:Fix",0) or train:GetNW2Int("PAKSDM:Zon",0) + Metrostroi.DrawTextRectOL(40, 140, 432, 30,Color(42,58,148),gr_up,1,Color(110,110,110)) + Metrostroi.DrawRectOL(40, 170, 432, 160,Color(110,110,110),1,Color(200,200,200)) + draw.SimpleText(train:GetNW2Int("PAKSDM:Fix",-1) > -1 and self.T("ФикÑÐ°Ñ†Ð¸Ñ Ñтанции") or self.T("Зонный оборот"),"Metrostroi_PAM25",256, 153,Color(255,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + surface.SetDrawColor(Color(200,200,200)) + surface.DrawRect(170,180,172,20) + draw.SimpleText(self.T("Ввод данных"),"Metrostroi_PAM30",256, 190,Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("ЛиниÑ"),"Metrostroi_PAM22",60, 220,Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(280, 215, 170, 20,choosed == 0 and Color(144,255,237) or Color(230,230,230),gr_up,1,Color(110,110,110)) + if Line > -1 then draw.SimpleText(Line,"Metrostroi_PAM1_25",365,225,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + + draw.SimpleText(self.T("Код Ñтанции"),"Metrostroi_PAM22",60, 243,Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(280, 237, 170, 20,choosed == 1 and Color(144,255,237) or Color(230,230,230),gr_up,1,Color(110,110,110)) + + local tbl = Metrostroi.WorkingStations + if Station > -1 then + draw.SimpleText(Station,"Metrostroi_PAM22",365,247,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + if tbl[Line] and tbl[Line][Station] and Metrostroi.AnnouncerData[Station] then + draw.SimpleText(Metrostroi.AnnouncerData[Station][1],"Metrostroi_PAM22",256,270,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + Metrostroi.DrawTextRectOL(100, 286, 100, 30,train:GetNW2Bool("PAKSDM:NCOk",false) and Color(42,58,148) or Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText(self.T("Ввод"),"Metrostroi_PAM30",150, 300,train:GetNW2Bool("PAKSDM:NCOk",false) and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(294, 286, 115, 30,train:GetNW2Bool("PAKSDM:NCCanc",false) and Color(42,58,148) or Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText(self.T("Закрыть"),"Metrostroi_PAM30",349, 300,train:GetNW2Bool("PAKSDM:NCCanc",false) and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + if choosed == 1 and tbl[Line] and not Metrostroi.AnnouncerData[Station] then + local i = 1 + for k,v in pairs(tbl[Line]) do + if Metrostroi.AnnouncerData[v] and (tostring(v):find(Station) or Station == -1) then + i = i + 1 + if i > 8 then break end + end + end + if i > 1 then + Metrostroi.DrawRectOL(280, 257, 200, -18 + i*18,Color(110,110,110),1,Color(250,250,250) ) + local i = 1 + for k,v in pairs(tbl[Line]) do + if Metrostroi.AnnouncerData[v] and (tostring(v):find(Station) or Station == -1) then + if i > 8 then break end + draw.SimpleText(v,"Metrostroi_PAM1_20",281, 247+i*18,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Metrostroi.AnnouncerData[v][1]:sub(1,19),"Metrostroi_PAM1_20",315, 247+i*18,Color(0,0,0,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + + i = i + 1 + end + end + --Metrostroi.DrawLine(140, 155, 140, 145 + i*22,Color(20,20,20),3 ) + end + end + if train:GetNW2Bool("PAKSDM:State6Error",false) then + Metrostroi.DrawTextRectOL(106, 125, 300, 30,Color(42,58,148),gr_up,1,Color(110,110,110)) + Metrostroi.DrawRectOL(106, 145, 300, 136,Color(110,110,110),1,Color(200,200,200)) + draw.SimpleText(self.T("Ошибка"),"Metrostroi_PAM25",256, 135,Color(255,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --Metrostroi.DrawRectOutline(106, 125, 300, 150,Color(20,20,20),3 ) + --surface.SetDrawColor(Color(200,200,200)) + --surface.DrawRect(108, 127, 295, 146 ) + draw.SimpleText(self.T("Ошибка при"),"Metrostroi_PAM30",256, 160,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("вводе данных"),"Metrostroi_PAM30",256, 190,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --Metrostroi.DrawRectOutline(190, 220, 132, 40,Color(20,20,20),3 ) + --draw.SimpleText(self.T("ENTER"),"Metrostroi_PAM30",256, 240,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawTextRectOL(216, 220, 80, 40,Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText(self.T("Enter"),"Metrostroi_PAM30",256, 240,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + end + if train:GetNW2Bool("PAKSDM:2048") then + Metrostroi.DrawTextRectOL(156, 100, 200, 30,Color(42,58,148),gr_up,1,Color(110,110,110)) + Metrostroi.DrawRectOL(156, 130, 200, 200,Color(110,110,110),1,Color(200,200,200)) + draw.SimpleText(self.T("2048 Счёт:")..train:GetNW2Int("PAKSDM:2048Score",0),"Metrostroi_PAM25",166, 113,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + self.g2048col = { + Color(238,228,218), + Color(236,224,200), + Color(242,177,121), + Color(245,149,99), + Color(245,124,95), + Color(246,93,59), + Color(237,206,113), + Color(237,204,97), + Color(236,200,80), + Color(237,197,63), + Color(238,194,46), + } + for i = 0,15 do + local val = train:GetNW2Int("PAKSDM:2048:"..math.floor(i/4+1)..":"..(i%4+1),0) + if val ~= 0 then + surface.SetDrawColor(self.g2048col[val] or Color(174,8,12)) + surface.DrawRect(156 + (i%4)*50,130 + math.floor(i/4)*50,50,50) + draw.SimpleText(2^val,val < 10 and "Metrostroi_PAM25" or i < 13 and "Metrostroi_PAM22" or "Metrostroi_PAM20",181 + (i%4)*50, 155 + math.floor(i/4)*50,val > 2 and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + Metrostroi.DrawLine(156,180,356,180,Color(110,110,110),2) + Metrostroi.DrawLine(156,230,356,230,Color(110,110,110),2) + Metrostroi.DrawLine(156,280,356,280,Color(110,110,110),2) + + Metrostroi.DrawLine(206,130,206,330,Color(110,110,110),2) + Metrostroi.DrawLine(256,130,256,330,Color(110,110,110),2) + Metrostroi.DrawLine(306,130,306,330,Color(110,110,110),2) + Metrostroi.DrawTextRectOL(156, 330, 200, 40,train:GetNW2Bool("PAKSDM:NCCanc") and Color(42,58,148) or Color(230,230,230),gr_up,2,Color(110,110,110)) + draw.SimpleText(self.T("Выход - Esc"),"Metrostroi_PAM30",256, 350,train:GetNW2Bool("PAKSDM:NCCanc") and Color(255,255,255) or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + surface.SetAlphaMultiplier(1-train:GetNW2Float("Motorola:Bright",1)*0.5) + surface.SetDrawColor(Color(20,20,20)) + surface.DrawRect(0,0,512,512) + surface.SetAlphaMultiplier(1) + end + function TRAIN_SYSTEM:ClientThink() + end +end + +function TRAIN_SYSTEM:FindAimButton(x,y,x1,y1,w,h) + if x < x1 or x > x1+w then return false end + if y < y1 or y > y1+h then return false end + return true +end +function TRAIN_SYSTEM:UpdateUPO() + for k,v in pairs(self.Train.WagonList) do + if v.UPO then v.UPO:SetStations(self.Line,self.FirstStation,self.LastStation,v == self.Train) end + v:OnButtonPress("RouteNumberUpdate",self.RouteNumber) + end +end +function TRAIN_SYSTEM:Touch(state,x,y) + local Announcer = self.Train.Announcer + if self.g2048 and self:FindAimButton(x,y,156, 330, 200, 40) then + self.NCCanc = state + if not state then + self.g2048 = nil + end + end + if self.State == 3 and self.BackPAEA and self:FindAimButton(x,y,166, 210, 180, 40) then + self.BackPAEA = nil + return + end + if self.State == 3 and not self.BackPAEA and self.Train.KV.ReverserPosition ~= 0 and self.BackPA and not self.BackErrorCode and not self.ErrorCode and self:FindAimButton(x,y,216, 340, 80, 40) then + self:SetState(1.1,(self.FirstStation ~= "" and self.LastStation ~= "") and 5 or 4) + return + end + if self.State == 4 and self:FindAimButton(x,y,216, 320, 80, 40) then + if self.EnteredPass == "31173" then + self:SetState(1.1,-2) + return + elseif self.Pass ~= self.EnteredPass then + self.EnteredPass = "/" + else + self:SetState(1.1,5) + return + end + end + if self.State == 5 and self:FindAimButton(x,y,40, 140, 432, 40) then + if state then + self.State5Choose = 1 + else + self:SetState(1.1,6) + end + end + if self.State == 5 and self.Train:GetNW2Bool("PAKSDM:Restart") and self:FindAimButton(x,y,40, 190, 432, 40) then + if state then + self.State5Choose = 2 + else + self:SetState(1.1,7) + end + end + if self.State == 5 and self:FindAimButton(x,y,40, 230, 432, 40) then + if state then + self.State5Choose = 3 + else + self:SetState(1.1,3) + end + end + if self.State == 6 and not self.State6Error and self:FindAimButton(x,y,150, 330, 100, 30) then + if not Metrostroi.WorkingStations[self.Line] or + not Metrostroi.WorkingStations[self.Line][tonumber(self.FirstStation)] or + not Metrostroi.AnnouncerData[tonumber(self.FirstStation)] or + not Metrostroi.WorkingStations[self.Line][tonumber(self.LastStation)] or + not Metrostroi.AnnouncerData[tonumber(self.LastStation)] or + #self.RouteNumber < 3 or self.LastStation == self.FirstStation then + self.State6Error = not self.State6Error + else + self:SetState(1.1,8) + end + end + if self.State == 6 and not self.State6Error and self:FindAimButton(x,y,260, 330, 100, 30) then + self:SetState(1.1,5) + end + if self.State == 6 and self.State6Error and self:FindAimButton(x,y,216, 220, 80, 40) then + self.State6Error = false + end + if self.State == 7 and not self.State6Error and self:FindAimButton(x,y,150, 330, 100, 30) then + if not Metrostroi.WorkingStations[self.Line] or + not Metrostroi.WorkingStations[self.Line][tonumber(self.FirstStation)] or + not Metrostroi.AnnouncerData[tonumber(self.FirstStation)] or + not Metrostroi.WorkingStations[self.Line][tonumber(self.LastStation)] or + not Metrostroi.AnnouncerData[tonumber(self.LastStation)] or + #self.RouteNumber < 3 or self.LastStation == self.FirstStation then + self.State6Error = not self.State6Error + else + self:SetState(1.1,9) + end + end + if self.State == 7 and not self.State6Error and self:FindAimButton(x,y,260, 330, 100, 30) then + self:SetState(1.1,5) + end + if self.State == 7 and self.State6Error and self:FindAimButton(x,y,216, 220, 80, 40) then + self.State6Error = false + end + if self.State == 8 and self.Check == false and self:FindAimButton(x,y,216, 240, 80, 40) then + self:SetState(1.1,9) + end + if self.State == 9 then + if self.Train:GetNW2Bool("PAKSDM:SetupError",false) then + if self:FindAimButton(x,y,216, 220, 80, 40) then + for k,v in pairs(self.Train.WagonList) do + v["PA-KSD-M"]:SetState(3) + end + end + return + end + if self.Nakat and self:FindAimButton(x,y,106, 175, 300, 100) then + self.NCCanc = state + if not state then + self.Nakat = false + if self.Train:ReadTrainWire(1) < 1 then + self.Train.ALS_ARS.Nakat = false + end + end + end + if not self.NeedConfirm or self.NeedConfirm == 0 then + if self.Zon or self.Fix then + if self.Fix then + if self:FindAimButton(x,y,294, 286, 115, 30) then + self.NCCanc = state + if not state then self.Fix = nil end + end + if self:FindAimButton(x,y,100, 286, 100, 30) then + self.NCOk = state + if not state then + if not Metrostroi.WorkingStations[self.FLine] or + not Metrostroi.WorkingStations[self.FLine][tonumber(self.EnteredStation)] or + not Metrostroi.AnnouncerData[tonumber(self.EnteredStation)] or tonumber(self.EnteredStation) == self.FirstStation then + self.State6Error = not self.State6Error + else + self.FirstStation = self.EnteredStation + self.Line = self.FLine + self.Fix = nil + self:UpdateUPO() + end + end + end + else + if self:FindAimButton(x,y,294, 286, 115, 30) then + self.NCCanc = state + if not state then self.Zon = nil end + end + if self:FindAimButton(x,y,100, 286, 100, 30) then + self.NCOk = state + if not state then + if not Metrostroi.WorkingStations[self.FLine] or + not Metrostroi.WorkingStations[self.FLine][tonumber(self.EnteredStation)] or + not Metrostroi.AnnouncerData[tonumber(self.EnteredStation)] then + self.State6Error = not self.State6Error + else + self.LastStation = self.EnteredStation + self:UpdateUPO() + self.Zon = nil + end + end + end + end + if self.State6Error and self:FindAimButton(x,y,216, 220, 80, 40) then + self.State6Error = false + end + return + elseif self.MenuChoosed == 0 and self.AnnChoosed == 0 then + if self:FindAimButton(x,y,0,360,120,52) then + self.MenuChoosed = 1 + end + if not self.AutodriveWorking and self.Train.ALS_ARS["33G"] < 0.5 and self:FindAimButton(x,y,5,155,60,30) then + self.NeedConfirm = 11 + end + if (self.AutodriveWorking or self.VRD or self.UOS) and not self.Trainsit and self:FindAimButton(x,y,5,185,60,30) then + self.NeedConfirm = 12 + end + if not self.UOS and not self.Train.ALS_ARS.EnableARS and self:FindAimButton(x,y,5,215,60,30) then + self.NeedConfirm = 13 + end + if self:FindAimButton(x,y,429, 275, 80, 30) then + self.NeedConfirm = 7 + end + elseif self.AnnChoosed == 0 then + if self:FindAimButton(x,y,10, 140, 164, 45) then + if state then + self.MenuChoosed = 1 + else + if self.MenuChoosed == 1 and self.Train.Speed < 0.5 then + self.NeedConfirm = 1 + else + self.MenuChoosed = 0 + end + end + end + if self:FindAimButton(x,y,174, 140, 164, 45) then + if state then + self.MenuChoosed = 2 + else + self.KD = not self.KD + self.MenuChoosed = 0 + end + end + if self:FindAimButton(x,y,338, 140, 164, 45) then + if state then + self.MenuChoosed = 3 + else + for k,v in pairs(self.Train.WagonList) do + v["PA-KSD-M"]:SetState(3) + end + self.MenuChoosed = 0 + end + end + + if self:FindAimButton(x,y,10, 185, 164, 45) then + if state then + self.MenuChoosed = 4 + else + self.Transit = not self.Transit + self.AutodriveWorking = false + self.MenuChoosed = 0 + end + end + if self:FindAimButton(x,y,174, 185, 164, 45) and not (self.VRD or not (self.Train.ALS_ARS.Signal0 and not self.Train.ALS_ARS.RealNoFreq and not self.Train.ALS_ARS.Signal40 and not self.Train.ALS_ARS.Signal60 and not self.Train.ALS_ARS.Signal70 and not self.Train.ALS_ARS.Signal80))then + if state then + self.MenuChoosed = 5 + else + self.NeedConfirm = 5 + --self.MenuChoosed = 0 + end + end + if self:FindAimButton(x,y,338, 185, 164, 45) then + if state then + self.MenuChoosed = 6 + else + self.NeedConfirm = 6 + --self.MenuChoosed = 0 + end + end + + if self:FindAimButton(x,y,10, 230, 164, 45) then + if state then + self.MenuChoosed = 7 + else + self.NeedConfirm = 7 + --self.MenuChoosed = 0 + end + end + if self:FindAimButton(x,y,174, 230, 164, 45) then + if state then + self.MenuChoosed = 8 + else + self.NeedConfirm = 8 + --self.MenuChoosed = 0 + end + end + + if self:FindAimButton(x,y,338, 275, 164, 45) then + if state then + self.MenuChoosed = 12 + else + self.MenuChoosed = 0 + end + end + else + if self:FindAimButton(x,y,10, 140, 164, 45) then + if state then + self.AnnChoosed = 1 + else + self.Train.UPO:II(self.AnnChoosed) + self.AnnChoosed = 0 + end + end + if self:FindAimButton(x,y,174, 140, 164, 45) then + if state then + self.AnnChoosed = 2 + else + self.Train.UPO:II(self.AnnChoosed) + self.AnnChoosed = 0 + end + end + if self:FindAimButton(x,y,338, 140, 164, 45) then + if state then + self.AnnChoosed = 3 + else + self.Train.UPO:II(self.AnnChoosed) + self.AnnChoosed = 0 + end + end + if self:FindAimButton(x,y,10, 185, 164, 45) then + if state then + self.AnnChoosed = 4 + else + self.Train.UPO:II(self.AnnChoosed) + self.AnnChoosed = 0 + end + end + if self:FindAimButton(x,y,338, 275, 164, 45) then + if state then + self.AnnChoosed = 5 + else + self.AnnChoosed = 0 + end + end + end + else + if self:FindAimButton(x,y,111, 210, 140, 40) then + self.NCOk = state + if not state then + if self.NeedConfirm == 1 and self.Train.Speed < 0.5 then + self.Nakat = true + end + if (self.Train.ALS_ARS.Signal0 and not self.Train.ALS_ARS.RealNoFreq and not self.Train.ALS_ARS.Signal40 and not self.Train.ALS_ARS.Signal60 and not self.Train.ALS_ARS.Signal70 and not self.Train.ALS_ARS.Signal80) then + self.VRD = true + end + if self.NeedConfirm == 6 then + self.Zon = 1 + self.EnteredStation = "" + self.FLine = self.Line + self.State6Error = false + end + if self.NeedConfirm == 7 then + self.Fix = 0 + self.EnteredStation = "" + self.FLine = nil + self.State6Error = false + end + if self.NeedConfirm == 8 then + self.g2048 = {} + self.g2048s = 0 + self.g2048go = false + self.g2048[math.random(0,15)] = 1 + end + if not self.AutodriveWorking and self.Train.ALS_ARS["33G"] < 0.5 and self.NeedConfirm == 11 then + self.AutodriveWorking = true + self.UOS = false + end + if (self.AutodriveWorking or self.VRD or self.UOS) and not self.Trainsit and self.NeedConfirm == 12 then + self.AutodriveWorking = false + self.UOS = false + end + if not self.UOS and not self.Train.ALS_ARS.EnableARS and self.NeedConfirm == 13 then + self.AutodriveWorking = false + self.UOS = true + end + self.NeedConfirm = 0 + self.MenuChoosed = 0 + end + end + if self:FindAimButton(x,y,261, 210, 140, 40) then + self.NCCanc = state + if not state then + self.NeedConfirm = 0 + end + end + end + --[[ + elseif self.State == 71 then + if name == "BEnter" then + self.AutodriveWorking = true + self.UOS = false + self:SetState(7,nil,true) + end + if name == "BLeft" then + self:SetState(7,nil,true) + end + elseif self.State == 72 then + if name == "BEnter" then + self.AutodriveWorking = false + self.UOS = false + self:SetState(7,nil,true) + end + if name == "BLeft" then + self:SetState(7,nil,true) + end + elseif self.State == 73 then + if name == "BEnter" then + self.AutodriveWorking = false + self.UOS = true + self:SetState(7,nil,true) + end + ]] + end + --print(x,y) +end +function TRAIN_SYSTEM:Trigger(name,nosnd) + --self.Pass = "A" + --self.State = 0 + local Announcer = self.Train.Announcer + self.Pitches = { + B1 = 166, + B2 = 155 , + B3 = 144, + B4 = 160, + B5 = 150, + B6 = 140, + B7 = 150, + B8 = 145, + B9 = 140, + BEsc = 140, + B0 = 135, + BEnter = 130, + BLeft = 125, + BDown = 120, + BRight = 115, + BF = 130, + BUp = 125, + BM = 120, + } + if not nosnd then self.Train:PlayOnce("paksd","cabin",0.75,self.Pitches[name] or 120.0) end + if self.State == 3 and name == "BEnter" and self.BackPAEA then + self.BackPAEA = nil + return + end + if self.State == 3 and name == "BEnter" and self.Train.KV.ReverserPosition ~= 0 and self.BackPA and not self.ErrorCode and not self.BackErrorCode and not self.BackPAEA then + self:SetState(1.1,(self.FirstStation ~= "" and self.LastStation ~= "") and 5 or 4) + elseif self.State == 4 then + if name == "BEnter" then + if self.EnteredPass == "31173" then + self:SetState(1.1,-2) + elseif self.Pass ~= self.EnteredPass then + self.EnteredPass = "/" + else + self:SetState(1.1,5) + end + else + if self.EnteredPass == "/" then self.EnteredPass = "" end + local Char = tonumber(name:sub(2,2)) + if Char and #self.EnteredPass < 11 then self.EnteredPass = self.EnteredPass..tonumber(name:sub(2,2)) end + end + elseif self.State == 5 then + if name == "BDown" then + self.State5Choose = math.min(3,(self.State5Choose or 1) + 1) + if self.State5Choose == 2 and not self.Train:GetNW2Bool("PAKSDM:Restart") then self.State5Choose = self.State5Choose + 1 end + end + if name == "BUp" then + self.State5Choose = math.max(1,(self.State5Choose or 1) - 1) + if self.State5Choose == 2 and not self.Train:GetNW2Bool("PAKSDM:Restart") then self.State5Choose = self.State5Choose - 1 end + end + if name == "BEnter" then + if self.State5Choose == 1 then + self:SetState(1.1,6) + elseif self.State5Choose == 2 then + self:SetState(1.1,7) + else + self:SetState(1.1,3) + end + end + if name == "B1" then + self:SetState(1.1,6) + end + if name == "B2" and self.Train:GetNW2Bool("PAKSDM:Restart") then + self:SetState(1.1,7) + end + elseif self.State == 6 then + if self.State6Error then if name == "BEnter" then self.State6Error = false end return end + if name == "BDown" then + self.State6Choose = math.min(4,(self.State6Choose or 1) + 1) + end + if name == "BUp" then + self.State6Error = false + self.State6Choose = math.max(1,(self.State6Choose or 1) - 1) + end + if name == "BLeft" then + if self.State6Choose == 2 then + self.FirstStation= self.FirstStation:sub(1,-2) + end + if self.State6Choose == 3 then + self.LastStation= self.LastStation:sub(1,-2) + end + if self.State6Choose == 4 then + self.RouteNumber= self.RouteNumber:sub(1,-2) + end + self:UpdateUPO() + end + if name == "BEsc" then + self:SetState(1.1,5) + end + if name == "BEnter" then + if not Metrostroi.WorkingStations[self.Line] or + not Metrostroi.WorkingStations[self.Line][tonumber(self.FirstStation)] or + not Metrostroi.AnnouncerData[tonumber(self.FirstStation)] or + not Metrostroi.WorkingStations[self.Line][tonumber(self.LastStation)] or + not Metrostroi.AnnouncerData[tonumber(self.LastStation)] or + #self.RouteNumber < 3 or self.LastStation == self.FirstStation then + self.State6Error = not self.State6Error + else + self:SetState(1.1,8) + end + end + local Char = tonumber(name:sub(2,2)) + if Char then + if self.State6Choose == 1 then + self.Line = Char + if Metrostroi.WorkingStations[self.Line] then + --local Routelength = #Metrostroi.WorkingStations[self.Line] + --self.FirstStation = tostring(Metrostroi.WorkingStations[self.Line][1]) + --self.LastStation = tostring(Metrostroi.WorkingStations[self.Line][Routelength]) + end + end + if self.State6Choose == 2 and #self.FirstStation < 3 and (Char ~= 0 or #self.FirstStation > 0) then + self.FirstStation= self.FirstStation..tostring(Char) + end + if self.State6Choose == 3 and #self.LastStation < 3 and (Char ~= 0 or #self.LastStation > 0) then + self.LastStation= self.LastStation..tostring(Char) + end + if self.State6Choose == 4 and #self.RouteNumber < 3 then + self.RouteNumber= self.RouteNumber..tostring(Char) + end + self:UpdateUPO() + end + elseif self.State == 7 then + if self.State6Error then if name == "BEnter" then self.State6Error = false end return end + if name == "BDown" then + self.State6Choose = math.min(3,(self.State6Choose or 1) + 1) + end + if name == "BUp" then + self.State6Error = false + self.State6Choose = math.max(1,(self.State6Choose or 1) - 1) + end + if name == "BLeft" then + if self.State6Choose == 2 then + self.LastStation= self.LastStation:sub(1,-2) + end + if self.State6Choose == 3 then + self.RouteNumber= self.RouteNumber:sub(1,-2) + end + self:UpdateUPO() + end + if name == "BEsc" then + self:SetState(1.1,5) + end + if name == "BEnter" and self.State6Choose == 4 then + if not Metrostroi.WorkingStations[self.Line] or + not Metrostroi.WorkingStations[self.Line][tonumber(self.FirstStation)] or + not Metrostroi.AnnouncerData[tonumber(self.FirstStation)] or + not Metrostroi.WorkingStations[self.Line][tonumber(self.LastStation)] or + not Metrostroi.AnnouncerData[tonumber(self.LastStation)] or + #self.RouteNumber < 3 or self.LastStation == self.FirstStation then + self.State6Error = not self.State6Error + else + self:SetState(1.1,9) + for k,v in pairs(self.Train.WagonList) do + if v ~= self.Train and v["PA-KSD-M"] then + v["PA-KSD-M"]:SetState(9) + end + --if v.UPO then v.UPO:SetStations(self.Line,self.FirstStation,self.LastStation,false) end + end + --self.Train.UPO:SetStations(self.Line,self.FirstStation,self.LastStation,true) + end + end + local Char = tonumber(name:sub(2,2)) + if Char then + if self.State6Choose == 1 then + self.Line = Char + if Metrostroi.WorkingStations[self.Line] then + local Routelength = #Metrostroi.WorkingStations[self.Line] + self.FirstStation = self.FirstStation ~= "" and self.FirstStation or tostring(Metrostroi.WorkingStations[self.Line][1]) + self.LastStation = tostring(Metrostroi.WorkingStations[self.Line][Routelength]) + if tonumber(self.LastStation) < tonumber(self.FirstStation) then + local temp = self.FirstStation + self.FirstStation = self.LastStation + self.LastStation = temp + end + end + end + if self.State6Choose == 2 and #self.LastStation < 3 and (Char ~= 0 or #self.LastStation > 0) then + self.LastStation= self.LastStation..tostring(Char) + end + if self.State6Choose == 3 and #self.RouteNumber < 3 then + self.RouteNumber= self.RouteNumber..tostring(Char) + end + self:UpdateUPO() + end + elseif self.State == 8 then + if name == "BEnter" and self.Check == false then + self:SetState(1.1,9) + end + elseif self.State == 9 then + if self.Train:GetNW2Bool("PAKSDM:SetupError",false) then + if name == "BEnter" then + for k,v in pairs(self.Train.WagonList) do + v["PA-KSD-M"]:SetState(3) + end + end + return + end + if self.g2048 then + if name == "BEsc" then + self.g2048 = nil + end + local spawn = false + if name == "BDown" then + for i = 11,0,-1 do + local add + for i1 = 0,2 do + add = 4*(3-math.floor(i/4)) - i1*4 + if not self.g2048[i+add] or self.g2048[i+add] == 0 or self.g2048[i+add] == self.g2048[i] then + break + end + if i1 == 2 then add = 0 end + end + if self.g2048[i] and self.g2048[i] > 0 and add > 0 then + if self.g2048[i+add] and self.g2048[i+add] > 0 then + if self.g2048[i+add] == self.g2048[i] then + self.g2048[i+add] = self.g2048[i] + 1 + self.g2048s = self.g2048s + 2^(self.g2048[i] + 1) + end + else + self.g2048[i+add] = self.g2048[i] + end + self.g2048[i] = 0 + spawn = true + end + end + end + if name == "BUp" then + for i = 3,15 do + local add + for i1 = 0,2 do + add = 4*(math.floor(i/4)) - i1*4 + if not self.g2048[i-add] or self.g2048[i-add] == 0 or self.g2048[i-add] == self.g2048[i] then + break + end + if i1 == 2 then add = 0 end + end + if self.g2048[i] and self.g2048[i] > 0 and add > 0 then + if self.g2048[i-add] and self.g2048[i-add] > 0 then + if self.g2048[i-add] == self.g2048[i] then + self.g2048[i-add] = self.g2048[i] + 1 + self.g2048s = self.g2048s + 2^(self.g2048[i] + 1) + end + else + self.g2048[i-add] = self.g2048[i] + end + self.g2048[i] = 0 + spawn = true + end + end + end + if name == "BLeft" then + for i = 0,15 do + if i%4 ~= 0 then + local add + for i1 = 0,2 do + add = math.floor(i%4) - i1 + if not self.g2048[i-add] or self.g2048[i-add] == 0 or self.g2048[i-add] == self.g2048[i] then + break + end + if i1 == 2 then add = 0 end + end + if self.g2048[i] and self.g2048[i] > 0 and add > 0 then-- and i-add > 0 then + if self.g2048[i-add] and self.g2048[i-add] > 0 then + if self.g2048[i-add] == self.g2048[i] then + self.g2048[i-add] = self.g2048[i] + 1 + self.g2048s = self.g2048s + 2^(self.g2048[i] + 1) + end + else + self.g2048[i-add] = self.g2048[i] + end + self.g2048[i] = 0 + spawn = true + end + end + end + end + if name == "BRight" then + for i = 15,0,-1 do + if i%4 ~= 3 then + local add + for i1 = 0,2 do + add = 3-math.floor(i%4) - i1 + if not self.g2048[i+add] or self.g2048[i+add] == 0 or self.g2048[i+add] == self.g2048[i] then + break + end + if i1 == 2 then add = 0 end + end + if self.g2048[i] and self.g2048[i] > 0 and add > 0 then-- and i-add > 0 then + if self.g2048[i+add] and self.g2048[i+add] > 0 then + if self.g2048[i+add] == self.g2048[i] then + self.g2048[i+add] = self.g2048[i] + 1 + self.g2048s = self.g2048s + 2^(self.g2048[i] + 1) + end + else + self.g2048[i+add] = self.g2048[i] + end + self.g2048[i] = 0 + spawn = true + end + end + end + end + local count = 0 + for i = 0,15 do + if self.g2048[i] and self.g2048[i] > 0 then + count = count + 1 + end + end + if (name == "BDown" or name == "BUp" or name == "BLeft" or name == "BRight") and count < 15 and spawn then + while true do + local choose = math.random(0,15) + if not self.g2048[choose] or self.g2048[choose] == 0 then + self.g2048[choose] = 1 + break + end + + --x = x +1 + end + end + if count >= 15 then self.g2048go = true end + return + end + if self.Fix then + if self.State6Error then if name == "BEnter" then self.State6Error = false end return end + if name == "BEsc" then + if self.Fix == 1 and #self.EnteredStation > 0 then + self.EnteredStation = "" + end + end + if name == "BEnter" then + if not Metrostroi.WorkingStations[self.FLine] or + not Metrostroi.WorkingStations[self.FLine][tonumber(self.EnteredStation)] or + not Metrostroi.AnnouncerData[tonumber(self.EnteredStation)] or tonumber(self.EnteredStation) == self.FirstStation then + self.State6Error = not self.State6Error + else + self.FirstStation = self.EnteredStation + self.Line = self.FLine + self:UpdateUPO() + self.Fix = nil + end + end + if name == "BDown" then + self.Fix = math.min(1,self.Fix + 1) + end + if name == "BUp" then + self.State6Error = false + self.Fix = math.max(0,self.Fix - 1) + end + local Char = tonumber(name:sub(2,2)) + if Char then + if self.Fix == 0 then + self.FLine = Char + end + if self.Fix == 1 and #self.EnteredStation < 3 and (Char ~= 0 or #self.EnteredStation > 0) then + self.EnteredStation= self.EnteredStation..tostring(Char) + end + end + return + end + if self.Zon then + if self.State6Error then if name == "BEnter" then self.State6Error = false end return end + if name == "BEsc" then + if self.Fix == 1 and #self.EnteredStation > 0 then + self.EnteredStation = "" + end + end + if name == "BEnter" then + if not Metrostroi.WorkingStations[self.FLine] or + not Metrostroi.WorkingStations[self.FLine][tonumber(self.EnteredStation)] or + not Metrostroi.AnnouncerData[tonumber(self.EnteredStation)] or tonumber(self.EnteredStation) == self.LastStation then + self.State6Error = not self.State6Error + else + self.LastStation = self.EnteredStation + self:UpdateUPO() + self.Zon = nil + end + end + --if name == "BDown" then + --self.Fix = math.min(1,self.Fix + 1) + --end + --if name == "BUp" then + --self.State6Error = false + --self.Fix = math.max(0,self.Fix - 1) + --end + local Char = tonumber(name:sub(2,2)) + if Char then + if self.Zon == 1 and #self.EnteredStation < 3 and (Char ~= 0 or #self.EnteredStation > 0) then + self.EnteredStation= self.EnteredStation..tostring(Char) + end + end + return + end + if name == "BF" then + if self.MenuChoosed == 0 and self.AnnChoosed == 0 and not self.Zon and not self.Fix then + self.MenuChoosed = 1 + end + end + if self.MenuChoosed == 0 and self.AnnChoosed == 0 then + if name == "B1" and not self.AutodriveWorking and self.Train.ALS_ARS["33G"] < 0.5 and (not self.NeedConfirm or self.NeedConfirm == 0) then + self.NeedConfirm = 11 + end + if name == "B2" and (self.AutodriveWorking or self.VRD or self.UOS) and not self.Trainsit and (not self.NeedConfirm or self.NeedConfirm == 0) then + self.NeedConfirm = 12 + end + if name == "B3" and not self.UOS and not self.Train.ALS_ARS.EnableARS and (not self.NeedConfirm or self.NeedConfirm == 0) then + self.NeedConfirm = 13 + end + elseif self.AnnChoosed == 0 then + local Char = tonumber(name:sub(2,2)) + if Char and Char < 8 and Char > 0 then + self.MenuChoosed = Char + if self.MenuChoosed == 1 and self.Train.Speed < 0.5 then + self.NeedConfirm = 1 + elseif self.MenuChoosed == 2 then + self.KD = not self.KD + elseif self.MenuChoosed == 3 then + for k,v in pairs(self.Train.WagonList) do + v["PA-KSD-M"]:SetState(3) + end + elseif self.MenuChoosed == 4 then + self.Transit = not self.Transit + self.AutodriveWorking = false + elseif self.MenuChoosed == 5 then + self.NeedConfirm = 5 + elseif self.MenuChoosed == 6 then + self.NeedConfirm = 6 + elseif self.MenuChoosed == 7 then + self.NeedConfirm = 7 + elseif self.MenuChoosed == 8 and not self.Arrived then + --self.Arrived = true + --if self.Train.R_UPO.Value > 0 then + -- local tbl = Metrostroi.WorkingStations[self.Line] + --self.UPO:PlayArriving(self.Train.UPO.Station,tbl[tbl[self.Train.UPO.Station] + (self.Train.UPO.Path == 1 and 1 or -1)],self.Train.UPO.Path) + --end + end + if self.NeedConfirm == 0 then self.MenuChoosed = 0 end + end + end + if name == "BDown" then + if self.MenuChoosed ~= 0 and (not self.NeedConfirm or self.NeedConfirm == 0) then + self.MenuChoosed = math.min(7,self.MenuChoosed + 1) + + if self.MenuChoosed == 5 and (self.VRD or not (self.Train.ALS_ARS.Signal0 and not self.Train.ALS_ARS.RealNoFreq and not self.Train.ALS_ARS.Signal40 and not self.Train.ALS_ARS.Signal60 and not self.Train.ALS_ARS.Signal70 and not self.Train.ALS_ARS.Signal80)) then + self:Trigger("BDown",true) + elseif self.MenuChoosed == 6 then + if self.LastStation == tostring(self.Train.UPO.Station) then + self:Trigger("BDown",true) + end + elseif self.MenuChoosed == 7 then + if self.FirstStation == tostring(self.Train.UPO.Station) then + self:Trigger("BDown",true) + end + end + end + if self.AnnChoosed ~= 0 and not self.Zon and not self.Fix then + self.AnnChoosed = math.min(4,self.AnnChoosed + 1) + end + end + if name == "BUp" then + if self.MenuChoosed ~= 0 and (not self.NeedConfirm or self.NeedConfirm == 0) then + self.MenuChoosed = math.max(1,self.MenuChoosed - 1) + if self.MenuChoosed == 5 and (self.VRD or not (self.Train.ALS_ARS.Signal0 and not self.Train.ALS_ARS.RealNoFreq and not self.Train.ALS_ARS.Signal40 and not self.Train.ALS_ARS.Signal60 and not self.Train.ALS_ARS.Signal70 and not self.Train.ALS_ARS.Signal80)) then + self:Trigger("BUp",true) + end + end + if self.MenuChoosed == 0 and self.AnnChoosed == 0 then + self.AnnChoosed = 1 + end + if self.AnnChoosed ~= 0 then + self.AnnChoosed = math.max(1,self.AnnChoosed - 1) + end + end + if name == "BEsc" then + --if self.MenuChoosed ~= 0 then + if (not self.NeedConfirm or self.NeedConfirm == 0) then self.MenuChoosed = 0 end + self.AnnChoosed = 0 + --end + end + if (self.NeedConfirm and self.NeedConfirm > 0) then + if name == "BEnter" then + if self.NeedConfirm == 1 and self.Train.Speed < 0.5 then + self.Nakat = true + end + if (self.Train.ALS_ARS.Signal0 and not self.Train.ALS_ARS.RealNoFreq and not self.Train.ALS_ARS.Signal40 and not self.Train.ALS_ARS.Signal60 and not self.Train.ALS_ARS.Signal70 and not self.Train.ALS_ARS.Signal80) then + self.VRD = true + end + if self.NeedConfirm == 6 then + self.Zon = 1 + self.EnteredStation = "" + self.FLine = self.Line + self.State6Error = false + end + if self.NeedConfirm == 7 then + self.Fix = 0 + self.EnteredStation = "" + self.FLine = nil + self.State6Error = false + end + if self.NeedConfirm == 8 then + self.g2048 = {} + self.g2048s = 0 + self.g2048go = false + self.g2048[math.random(0,15)] = 1 + end + if not self.AutodriveWorking and self.Train.ALS_ARS["33G"] < 0.5 and self.NeedConfirm == 11 then + self.AutodriveWorking = true + self.UOS = false + end + if (self.AutodriveWorking or self.VRD or self.UOS) and not self.Trainsit and self.NeedConfirm == 12 then + self.AutodriveWorking = false + self.UOS = false + end + if not self.UOS and not self.Train.ALS_ARS.EnableARS and self.NeedConfirm == 13 then + self.AutodriveWorking = false + self.UOS = true + end + self.NeedConfirm = 0 + self.MenuChoosed = 0 + end + if name == "BEsc" then + self.NeedConfirm = 0 + end + end + if self.MenuChoosed ~= 0 and not self.Nakat and not self.Fix and not self.Zon and not self.g2048 then + if name == "BEnter" and (not self.NeedConfirm or self.NeedConfirm == 0) then + if self.MenuChoosed == 1 and self.Train.Speed < 0.5 then + self.NeedConfirm = 1 + elseif self.MenuChoosed == 2 then + self.KD = not self.KD + elseif self.MenuChoosed == 3 then + for k,v in pairs(self.Train.WagonList) do + v["PA-KSD-M"]:SetState(3) + end + elseif self.MenuChoosed == 4 then + self.Transit = not self.Transit + self.AutodriveWorking = false + elseif self.MenuChoosed == 5 then + self.NeedConfirm = 5 + elseif self.MenuChoosed == 6 then + self.NeedConfirm = 6 + elseif self.MenuChoosed == 7 then + self.NeedConfirm = 7 + elseif self.MenuChoosed == 8 and not self.Arrived then + --self.Arrived = true + --if self.Train.R_UPO.Value > 0 then +-- local tbl = Metrostroi.WorkingStations[self.Line] + --self.UPO:PlayArriving(self.Train.UPO.Station,tbl[tbl[self.Train.UPO.Station] + (self.Train.UPO.Path == 1 and 1 or -1)],self.Train.UPO.Path) + --end + end + if self.NeedConfirm == 0 then self.MenuChoosed = 0 end + --if self.State > 6 and self.State ~= 76 and self.State ~= 77 then self.State = 7 end + end + end + if self.AnnChoosed ~= 0 and not self.Nakat and not self.Fix and not self.Zon and not self.g2048 then + if name == "BEnter" then + if self.Train.R_UPO.Value > 0 then self.Train.UPO:II(self.AnnChoosed) end + self.AnnChoosed = 0 + end + local Char = tonumber(name:sub(2,2)) + if Char and Char > 0 and Char < 5 and self.Train.R_UPO.Value > 0 then + self.Train.UPO:II(Char) + self.AnnChoosed = 0 + end + end + + if name == "BEsc" and self.Nakat then + self.Nakat = false + if self.Train:ReadTrainWire(1) < 1 then + self.Train.ALS_ARS.Nakat = false + end + end + end +end +function TRAIN_SYSTEM:GetTimer(val) + return self.TimerMod and (CurTime() - self.Timer) > val +end +function TRAIN_SYSTEM:SetTimer(mod) + if mod then + if self.TimerMod == mod then return end + self.TimerMod = mod + else + self.TimerMod = nil + end + self.Timer = CurTime() +end + +function TRAIN_SYSTEM:SetState(state,add,state9) + local Train = self.Train + local ARS = Train.ALS_ARS + local Announcer = Train.Announcer + if state and self.State ~= state then + self.State = state + if state == 1 or state == 1.1 then + self.NextState = add + end + self:SetTimer() + elseif not state then + state = self.NextState + self.State = self.NextState + else + return + end + if state == 0 then + self.LoadTimer = math.random(3,9) + end + if state == 2 then + self.LoadTimer = math.random(2,6) + end + if state == 3 then + self.ErrorCode = nil + self.BackErrorCode = nil + end + if state == 4 then + self.EnteredPass = "" + end + if state == 5 then + self.State5Choose = 1 + end + if state == 6 then + self.State6Choose = 1 + self.Line = self.Train.UPO.Line or 1 + if Metrostroi.WorkingStations[self.Line] then + local Routelength = #Metrostroi.WorkingStations[self.Line] + self.FirstStation = tostring(self.Train.UPO.FirstStation or self.FirstStation or "")--tostring(self.Train.UPO.Path == 2 and Metrostroi.WorkingStations[self.Line][Routelength] or Metrostroi.WorkingStations[self.Line][1]) + self.LastStation = tostring(self.Train.UPO.LastStation or self.LastStation or "")--tostring(self.Train.UPO.Path == 1 and Metrostroi.WorkingStations[self.Line][Routelength] or Metrostroi.WorkingStations[self.Line][1]) + else + self.FirstStation = "111" + self.LastStation = "123" + end + self:UpdateUPO() + self.State6Error = false + end + if state == 7 then + self.State6Choose = 1 + self.State6Error = false + end + if state == 8 then + self.Check = nil + ARS:TriggerInput("PA-Ring",1) + for k,v in pairs(self.Train.WagonList) do + v.ENDis:TriggerInput("Set",1) + end + if not state9 then + for k,v in pairs(self.Train.WagonList) do + if v ~= self.Train and v["PA-KSD-M"] then + v["PA-KSD-M"]:SetState(8,nil,true) + --v["PA-KSD-M"].Line = self.Line + --v["PA-KSD-M"].RouteNumber = self.RouteNumber + --v["PA-KSD-M"].FirstStation = self.FirstStation + --v["PA-KSD-M"].LastStation = self.LastStation + --v:OnButtonPress("RouteNumberUpdate",self.RouteNumber) + end + --if v.UPO then v.UPO:SetStations(self.Line,self.FirstStation,self.LastStation,false) end + end + end + self.Train.UPO:SetStations(self.Line,self.FirstStation,self.LastStation,true) + else + for k,v in pairs(self.Train.WagonList) do + v.ENDis:TriggerInput("Set",0) + if v.ALS_ARS then v.ALS_ARS:TriggerInput("PA-Ring",0) end + end + end + if state == 9 then + if not state9 then + for k,v in pairs(self.Train.WagonList) do + if v ~= self.Train and v["PA-KSD-M"] then + v["PA-KSD-M"]:SetState(9,nil,true) + v["PA-KSD-M"].Line = self.Line + v["PA-KSD-M"].RouteNumber = self.RouteNumber + v["PA-KSD-M"].FirstStation = self.FirstStation + v["PA-KSD-M"].LastStation = self.LastStation + v.UPO:SetStations(self.Line,self.FirstStation,self.LastStation,false) + end + end + self.Train.UPO:SetStations(self.Line,self.FirstStation,self.LastStation,true) + end + self.AnnChoosed = 0 + self.NeedConfirm = 0 + self.MenuChoosed = 0 + self.Fix = nil + self.Zon = nil + Train.UPO.BoardTime = nil + self.ODZ = nil + end + if state == 0 then + self.Train:PlayOnce("paksd","cabin",0.75,200.0) + self.Train.ALS_ARS:TriggerInput("PA-Ring",0) + self.EnteredPass = "" + end + if state == 3 then + if IsValid(self.Train.DriverSeat) then + self.Train.DriverSeat:EmitSound("subway_announcer/00_05.mp3", 73, 100) + end + end +end +function TRAIN_SYSTEM:Think(dT) + if self.Train.Blok ~= 4 then self:SetState(-1) return end + local Train = self.Train + local ARS = Train.ALS_ARS + local Announcer = Train.Announcer + if self.Train.VPA.Value < 1 and not self.OffTimer then --self.VPA and + self.OffTimer = CurTime() + 1 + self.OnTimer = nil + end + if self.Train.VPA.Value == 1 and self.OffTimer then + self.OffTimer = nil + self.OnTimer = nil + end + if self.Train.VPA.Value > 1 then --not self.VPA and + for k,v in pairs(self.Train.WagonList) do + if v["PA-KSD-M"] then v["PA-KSD-M"].VPA = true end + end + end + if self.OnTimer and (CurTime() - self.OnTimer) > 0 then + end + if self.OffTimer and (CurTime() - self.OffTimer) > 0 then + for k,v in pairs(self.Train.WagonList) do + if v["PA-KSD-M"] then v["PA-KSD-M"].VPA = false end + end + self.OffTimer = nil + end + if Train.Panel["V1"] < 0.5 or Train.VB.Value < 0.5 then self.VPA = false end + if not self.VPA then self:SetState(-1) end + if self.VPA and self.State == -1 and Train.Panel["V1"] > 0.5 then self:SetState(0) end + + --self.Train.UPO.Station = self.Train:ReadCell(49160) > 0 and self.Train:ReadCell(49160) or self.Train:ReadCell(49161) + --self.Train.UPO.Path = self.Train:ReadCell(49170) + --self.Train.UPO.Distance = math.min(9999,self.Train:ReadCell(49165) + (Train.Autodrive.Corrections[self.Train.UPO.Station] or 0)) + if Train.VB.Value > 0.5 and Train.Battery.Voltage > 55 and self.State > -1 then + for k,v in pairs(self.TriggerNames) do + if Train[v] and (Train[v].Value > 0.5) ~= self.Triggers[v] then + if Train[v].Value > 0.5 then + self:Trigger(v) + end + --print(v,self.Train[v].Value > 0.5) + self.Triggers[v] = Train[v].Value > 0.5 + end + end + end + if self.Train.KV.ReverserPosition == 0 and self.State > 3 and self.State < 8 and self.State ~= -9 then self:SetState(3) end + if self.State > 2 then + local Back = self.Train.WagonList[#self.Train.WagonList] + if #self.Train.WagonList > 1 and Back.SubwayTrain and Back.SubwayTrain.Type == "81" and Back.SubwayTrain.Manufacturer == "LVZ" then + self.BackPA = Back["PA-KSD-M"] + else + self.BackPA = nil + end + if self.BackPA then + if self.BackPA.State < 2 then + self.BackErrorCode = 0x9999 + elseif self.BackPA.State == 3 then + self.BackErrorCode = self.BackPA.ErrorCode + elseif self.BackPA.State < 3 then + self.BackErrorCode = 0x0001 + elseif self.BackPA.VPA then + self.BackErrorCode = 0x0002 + end + else + self.BackErrorCode = nil + end + if self.BackErrorCode and self.BackErrorCode ~= 0x0002 and self.State > 3 then + self:SetState(1,3) + self.BackPAEA = true + end + end + if self.State == 0 and self.RealState ~= 0 then + elseif self.State == 0 then + self:SetTimer(0.5) + if self:GetTimer(self.LoadTimer) then + self:SetState(1,2) + end + elseif self.State == 1 then + self:SetTimer(1) + if self:GetTimer(0.4) then + self:SetState() + end + elseif self.State == 1.1 then + self:SetTimer(1) + if self:GetTimer(0.1) then + self:SetState() + end + elseif self.State == 2 then + self:SetTimer(0.5) + if self:GetTimer(self.LoadTimer) then + self:SetState(1,3) + end + elseif self.State == 8 then + --print(ARS.KVT) + if ARS.KVT and self.Check == nil then + self.Check = true + self:SetTimer(4) + end + if not ARS.KVT and self.Check ~= false then + self.Check = nil + self:SetTimer() + end + if ARS.KVT and self:GetTimer(1) then + self.Check = false + ARS:TriggerInput("PA-Ring",0) + for k,v in pairs(self.Train.WagonList) do + if v ~= self.Train and v.ALS_ARS then + v.ALS_ARS:TriggerInput("PA-Ring",0) + end + end + self:SetTimer() + end + elseif self.State == 9 then + if (self.Train.UPO:GetSTNum(self.LastStation) > self.Train.UPO:GetSTNum(self.FirstStation) and self.Train.UPO.Path == 2) or (self.Train.UPO:GetSTNum(self.FirstStation) > self.Train.UPO:GetSTNum(self.LastStation) and self.Train.UPO.Path == 1) then + local old = self.LastStation + self.LastStation = self.FirstStation + self.FirstStation = old + end + if self.VRD and (not ARS.Signal0 or ARS.Signal0 and (ARS.Signal40 or ARS.Signal60 or ARS.Signal70 or ARS.Signal80)) then self.VRD = false end + self.State9 = (Train.UPO:End(self.Train.UPO.Station,self.Train.UPO.Path,true) or Train.UPO:GetSTNum(self.LastStation) > Train.UPO:GetSTNum(self.Train.UPO.Station) and self.Train.UPO.Path == 2 or Train.UPO:GetSTNum(self.Train.UPO.Station) < Train.UPO:GetSTNum(self.FirstStation) and self.Train.UPO.Path == 1) and 0 or 1--self.Arrived ~= nil and 1 or 2 + if self.State9 ~= 0 and self.Train.KV.ReverserPosition ~= 0 then + if not self.Trainsit then + if self.Train.UPO.Distance < 100 and self.Train.Speed > 55 then + self.StopTrain = true + end + if self.Train.UPO.Distance < 10 and self.Train.Speed > 20 then + self.StopTrain = true + end + if self.Train.Speed < 0.5 and self.StopTrain then + self.StopTrain = false + end + if self.StopTrain then + end + elseif self.StopTrain then + self.StopTrain = false + end + + if not self.Transit then + if self.Train.UPO.Distance < 75 and self.Arrived == nil and Metrostroi.WorkingStations[self.Line][self.Train.UPO.Station] and ARS.Speed <= 1 then + self.Arrived = true + end + end + --[[ + if not self.Transit and 45 < self.Train.UPO.Distance and self.Train.UPO.Distance < 75 and not self.Arrived and Metrostroi.WorkingStations[self.Line][self.Train.UPO.Station] then + self.Arrived = true + if self.Train.R_UPO.Value > 0 then + local tbl = Metrostroi.WorkingStations[self.Line] + self.UPO:PlayArriving(self.Train.UPO.Station,tbl[tbl[self.Train.UPO.Station] + (self.Train.UPO.Path == 1 and 1 or -1)],self.Train.UPO.Path) + end + end + ]] + if self.Transit then self.Arrived = nil end + if self.Train.UPO.Distance > 75 then + self.Arrived = nil + else + --if self.Train.Panel.SD < 0.5 then self.Arrived = true end + end + --if (self.Ring == nil or self.Ring == 0) and self.Train.Panel.SD < 0.5 then + --self.Ring = false + --end + if self.Arrived then + if Train.UPO.BoardTime and math.floor((Train.UPO.BoardTime or CurTime()) - CurTime()) < (self.Train.Horlift and 15 or 8) and self.Arrived then + self.Arrived = false + end + end + if (self.Train:ReadCell(1) > 0 or ARS.Speed > 1) and self.Arrived == false then self.Arrived = nil end + end + if self.Nakat then + if not self.Meters then self.Meters = 0 end + self.Meters = self.Meters + ARS.Speed*self.Train.SpeedSign/3600*1000*dT + if math.abs(self.Meters) > 2.5 then + self.Nakat = false + if self.Train:ReadTrainWire(1) < 1 then + ARS.Nakat = self.Meters < 0 + end + end + else + self.Meters = nil + end + end + if self.State ~= self.RealState then + self.RealState = self.State + self.TimeOverride = true + end + self.Time = self.Time or CurTime() + if (CurTime() - self.Time) > 0.1 or self.TimeOverride then + self.TimeOverride = nil + --print(1) + self.Time = CurTime() + Train:SetNW2Int("PAKSDM:State",self.State) + if self.State == 3 then + Train:SetNW2Bool("PAKSDM:BackPAErrorNoAccepted",self.BackPAEA == true) + Train:SetNW2Bool("PAKSDM:BackPA",self.BackPA ~= nil) + Train:SetNW2Bool("PAKSDM:RR",self.Train.KV.ReverserPosition ~= 0) + Train:SetNW2Int("PAKSDM:ErrorCode",self.ErrorCode or 0x0000) + Train:SetNW2Int("PAKSDM:BErrorCode",self.BackErrorCode or 0x0000) + elseif self.State == 4 then + Train:SetNW2Int("PAKSDM:Pass",self.EnteredPass ~= "/" and #self.EnteredPass or -1) + elseif self.State == 5 then + Train:SetNW2Bool("PAKSDM:Restart",self.FirstStation ~= "" and self.LastStation ~= "") + Train:SetNW2Int("PAKSDM:State5",self.State5Choose) + elseif self.State == 6 then + Train:SetNW2Int("PAKSDM:State6",self.State6Choose) + Train:SetNW2Bool("PAKSDM:State6Error",self.State6Error) + Train:SetNW2Int("PAKSDM:LastStation",tonumber(self.LastStation) or -1) + Train:SetNW2Int("PAKSDM:FirstStation",tonumber(self.FirstStation) or -1) + Train:SetNW2Int("PAKSDM:Line",self.Line) + Train:SetNW2Int("PAKSDM:RouteNumber",tonumber(self.RouteNumber ~= "" and self.RouteNumber or -1)) + elseif self.State == 7 then + Train:SetNW2Int("PAKSDM:State6",self.State6Choose) + Train:SetNW2Bool("PAKSDM:State6Error",self.State6Error) + Train:SetNW2Int("PAKSDM:LastStation",tonumber(self.LastStation) or -1) + Train:SetNW2Int("PAKSDM:Line",self.Line) + Train:SetNW2Int("PAKSDM:RouteNumber",tonumber(self.RouteNumber ~= "" and self.RouteNumber or -1)) + --Train:SetNW2Int("PAKSDM:LastStation",tonumber(self.LastStation) or -1) + --Train:SetNW2Int("PAKSDM:Line",self.Line) + --Train:SetNW2Int("PAKSDM:RouteNumber",tonumber(self.RouteNumber ~= "" and self.RouteNumber or -1)) + elseif self.State == 9 then + Train:SetNW2Bool("PAKSDM:AV", self.AutodriveWorking) + --print(not self.AutodriveWorking and not self.UOS) + Train:SetNW2Bool("PAKSDM:KS", not self.AutodriveWorking and not self.UOS) + Train:SetNW2Bool("PAKSDM:OD",self.UOS) + Train:SetNW2Int("PAKSDM:Line",self.Line) + Train:SetNW2Int("PAKSDM:Path",self.Train.UPO.Path) + Train:SetNW2Int("PAKSDM:Station",self.State9 == 0 and 0 or self.Train.UPO.Station) + Train:SetNW2Int("PAKSDM:LastStation",self.LastStation) + Train:SetNW2Float("PAKSDM:Distance",math.Round(self.Train.UPO.Distance,2)) + Train:SetNW2String("PAKSDM:SName",ARS.Signal and ARS.Signal.RealName or "ERR") + Train:SetNW2Bool("PAKSDM:RR",self.Train.KV.ReverserPosition ~= 0) + Train:SetNW2Int("PAKSDM:Type",(self.Train.Pneumatic.EmergencyValveEPK and 0 or self.Train.ALS_ARS.UAVAContacts and 4 or self.UOS and 5 or self.VRD and 2 or (self.Train.Autodrive.AutodriveEnabled or self.Train.UPO.StationAutodrive) and 1 or 3)) + Train:SetNW2Int("PAKSDM:KV",self.Train.Autodrive.AutodriveEnabled and (self.Rotating and -3 or self.Brake and -1 or self.Accelerate and 3 or 0) or (ARS["33G"] > 0 or (self.UOS and (ARS["8"] + (1-self.Train.RPB.Value)) > 0)) and 5 or self.Train.KV.RealControllerPosition) + Train:SetNW2Bool("PAKSDM:VZ1", self.Train:ReadTrainWire(29) > 0) + Train:SetNW2Bool("PAKSDM:VZ2", self.Train.PneumaticNo2.Value > 0) + Train:SetNW2Int("PAKSDM:Menu", self.MenuChoosed) + Train:SetNW2Int("PAKSDM:Ann",self.AnnChoosed) + Train:SetNW2Int("PAKSDM:NeedConfirm",self.NeedConfirm) + if self.NeedConfirm > 0 then + Train:SetNW2Bool("PAKSDM:NCOk",self.NCOk) + Train:SetNW2Bool("PAKSDM:NCCanc",self.NCCanc) + end + Train:SetNW2Bool("PAKSDM:Arrived", Train.UPO.Arrived ~= nil and Train.UPO.BoardTime ~= nil) + if Train.UPO.Arrived ~= nil and Train.UPO.BoardTime ~= nil then + Train:SetNW2Int("PAKSDM:BoardTime",math.floor((Train.UPO.BoardTime or CurTime()) - CurTime())) + end + Train:SetNW2Bool("PAKSDM:SetupError",Metrostroi.AnnouncerData[tonumber(self.FirstStation)] == nil or Metrostroi.AnnouncerData[tonumber(self.LastStation)] == nil) + Train:SetNW2Bool("PAKSDM:KD",self.KD) + Train:SetNW2Bool("PAKSDM:LPT",self.LPT) + Train:SetNW2Bool("PAKSDM:Nakat",self.Nakat) + Train:SetNW2Int("PAKSDM:Uklon",math.floor(Train:GetAngles().pitch*100)) + if self.Nakat then + Train:SetNW2Float("PAKSDM:Meters",math.Round(math.abs(self.Meters or 0),2)) + Train:SetNW2Bool("PAKSDM:Sign",ARS.Speed > 0.5 and self.Train.SpeedSign < 0) + Train:SetNW2Bool("PAKSDM:NCCanc",self.NCCanc) + end + Train:SetNW2Bool("PAKSDM:2048",self.g2048 ~= nil) + if self.g2048 then + Train:SetNW2Int("PAKSDM:2048Score",self.g2048s) + Train:SetNW2Bool("PAKSDM:2048GG",self.g2048go) + for i = 0,4*4-1 do + Train:SetNW2Int("PAKSDM:2048:"..math.floor(i/4+1)..":"..(i%4+1),self.g2048[i] or 0) + end + Train:SetNW2Bool("PAKSDM:NCCanc",self.NCCanc) + end + self.Train:SetNW2Int("PAKSDM:Fix",self.Fix or -1) + self.Train:SetNW2Int("PAKSDM:Zon",self.Zon or -1) + if self.Fix or self.Zon then + Train:SetNW2Bool("PAKSDM:NCOk",self.NCOk) + Train:SetNW2Bool("PAKSDM:NCCanc",self.NCCanc) + Train:SetNW2Int("PAKSDM:FLine",self.FLine or -1) + Train:SetNW2Int("PAKSDM:FStation",tonumber(self.EnteredStation) or -1) + --Train:SetNW2Int("PAKSDM:FAc",tonumber(self.FStation) or -1) + Train:SetNW2Bool("PAKSDM:State6Error",self.State6Error) + end + + else + end + end + if self.Train.VZP.Value > 0.5 and self.AutodriveWorking then + Train.Autodrive:Enable() + elseif not self.AutodriveWorking then + Train.Autodrive:Disable() + end + self.RouteNumber = string.gsub(self.Train.RouteNumber or "","^(0+)","") + if self.State > 7 then + self.Line = self.Train.UPO.Line + self.FirstStation = tostring(self.Train.UPO.FirstStation or "") + self.LastStation = tostring(self.Train.UPO.LastStation or "") + end +end diff --git a/lua/metrostroi/systems/_obsolete/sys_pa-ksd.lua b/lua/metrostroi/systems/_obsolete/sys_pa-ksd.lua new file mode 100644 index 0000000..47242d5 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_pa-ksd.lua @@ -0,0 +1,1214 @@ +-------------------------------------------------------------------------------- +-- ПÐ-КСД ÐŸÐ¾ÐµÐ·Ð´Ð½Ð°Ñ Ðппаратура-КомплекÑÐ½Ð°Ñ Ð¡Ð¸Ñтема Ð”Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("PA-KSD") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("Indicate","Relay","Switch",{bass = true,maxvalue = 3,defaultvalue = 1}) + self.Train:LoadSystem("VPA","Relay","Switch",{bass = true,defaultvalue = 1,maxvalue = 2}) + self.Train:LoadSystem("BCCD","Relay","Switch",{bass = true}) + self.Train:LoadSystem("VZP","Relay","Switch",{bass = true}) + self.Train:LoadSystem("B7","Relay","Switch",{bass = true}) + self.Train:LoadSystem("B8","Relay","Switch",{bass = true}) + self.Train:LoadSystem("B9","Relay","Switch",{bass = true}) + self.Train:LoadSystem("B4","Relay","Switch",{bass = true}) + self.Train:LoadSystem("B5","Relay","Switch",{bass = true}) + self.Train:LoadSystem("B6","Relay","Switch",{bass = true}) + self.Train:LoadSystem("BUp","Relay","Switch",{bass = true}) + self.Train:LoadSystem("B1","Relay","Switch",{bass = true}) + self.Train:LoadSystem("B2","Relay","Switch",{bass = true}) + self.Train:LoadSystem("B3","Relay","Switch",{bass = true}) + self.Train:LoadSystem("BDown","Relay","Switch",{bass = true}) + self.Train:LoadSystem("BLeft","Relay","Switch",{bass = true}) + self.Train:LoadSystem("B0","Relay","Switch",{bass = true}) + self.Train:LoadSystem("BMinus","Relay","Switch",{bass = true}) + self.Train:LoadSystem("BPlus","Relay","Switch",{bass = true}) + self.Train:LoadSystem("BEnter","Relay","Switch",{bass = true}) + + self.Train:LoadSystem("R25p","Relay","KPD-110E", { bass = true }) + + self.TriggerNames = { + "B7", + "B8", + "B9", + "BLeft", + "B4", + "B5", + "B6", + "BUp", + "B1", + "B2", + "B3", + "BDown", + "B0", + "BMinus", + "BPlus", + "BEnter", + } + self.Triggers = {} + self.Pass = "31173" + self.EnteredPass = "" + self.Timer = CurTime() + self.Line = 1 + self.State = 0 + self.RealState = 99 + self.RouteNumber = "" + self.State4Choosed = 1 + self.FirstStation = "" + self.LastStation = "" + self.KSZD = false + self.AutoTimer = false + self.State74 = 1 + self.State75 = 1 +end +function TRAIN_SYSTEM:ClientInitialize() + self.STR1r = {} + self.STR2r = {} + self.STR1x = 1 + self.STR2x = 1 + self.Positions = { + [-3] = "T2", + [-2] = "T1a", + [-1] = "T1", + [0] = "0", + [1] = "X1", + [2] = "X2", + [3] = "X3", + --[4] = "RR0", + [5] = "0XT", + [6] = "T2", + } + self.Positions2 = {"PS","PP","PT",} + self.Types = { + [0] = "EPV", + [1] = "AV", + [2] = "OD", + [3] = "KV", + [4] = "UA", + [5] = "SL", + } + self.StataionData = + { + [0] = "ERR", + [108] = "AV", + [109] = "IND", + [110] = "MOSK", + [111] = "OKT", + [112] = "PLMI", + [113] = "NOV", + [114] = "VOK", + [115] = "KOM", + [116] = "ELE", + [117] = "TEPL", + [118] = "PP", + [119] = "SINE", + [120] = "LES X", + [121] = "MNSK", + [122] = "TSVO", + [123] = "MZHD", + [321] = "MUSK", + [322] = "AVUZ", + [1215] = "LEN", + --ORANGE LINE + [401] = "SLS", + [402] = "LITE", + [403] = "PA", + [404] = "MAST", + [405] = "GFC", + [406] = "UB", + [407] = "VHE", + [408] = "TGM", + [501] = "AERO", + [502] = "SENT", + [503] = "LIT", + } + self.Train.Autodrive.AutodriveEnabled = false + self.KSZD = false + self.AutoTimer = false +end + +if TURBOSTROI then return end +CreateConVar("metrostroi_paksd_autoopen",0,{FCVAR_ARCHIVE},"PA-KSD:Auto open doors") +function TRAIN_SYSTEM:Inputs() + return { "Press" } +end + +function TRAIN_SYSTEM:PAKSD1(train) + --print(self,train,self==train) + if train:GetPackedBool("Indicate3") then return end + if train:GetPackedBool("Indicate2") then return end + for y = 0,#self.STR1r-1 do + local xmin = 0 + local blink = false + local checked = false + for x = 0,math.min(19,#self.STR1r[y+1]-1) do + local char = self.STR1r[y+1][x+1] + if char == "@" then + blink = true + xmin = xmin + 1 + elseif char == "$" then + checked = true + xmin = xmin + 1 + elseif blink then + if CurTime()%1<=0.5 then + surface.SetDrawColor(0,255,127) + surface.DrawRect((x-xmin)*16+1,y*28+5,14,20) + surface.SetDrawColor(0,0,0) + draw.DrawText(char,"MetrostroiSubway_IGLA",(x-xmin)*16,y*28, Color(0,0,0)) + --xmin = xmin + 1 + else + draw.DrawText(char,"MetrostroiSubway_IGLA",(x-xmin)*16,y*28, Color(0,255,127)) + --xmin = xmin + 1 + end + elseif checked then + surface.SetDrawColor(0,255,127) + surface.DrawRect((x-xmin)*16+1,y*28+5,14,20) + surface.SetDrawColor(0,0,0) + draw.DrawText(self.STR1r[y+1][x+1],"MetrostroiSubway_IGLA",(x-xmin)*16,y*28, Color(0,0,0)) + elseif char == "_" then + if CurTime()%0.65<=0.4 then + surface.SetDrawColor(0,255,127) + surface.DrawRect((x-xmin)*16,y*28+5,16,20) + end + elseif char == "#" then + surface.SetDrawColor(0,255,127) + surface.DrawRect(x*16+1,y*28+5,14,20) + elseif self.STR1r[y+1][x+2] == "%" then + if CurTime()%0.5<=0.25 then + surface.SetDrawColor(0,255,127) + surface.DrawRect((x-xmin)*16+1,y*28+5,14,20) + surface.SetDrawColor(0,0,0) + draw.DrawText(self.STR1r[y+1][x+1],"MetrostroiSubway_IGLA",(x-xmin)*16,y*28, Color(0,0,0)) + xmin = xmin + 1 + else + draw.DrawText(char,"MetrostroiSubway_IGLA",(x-xmin)*16,y*28, Color(0,255,127)) + xmin = xmin + 1 + end + elseif char ~= "%" then + draw.DrawText(char,"MetrostroiSubway_IGLA",(x-xmin)*16,y*28, Color(0,255,127)) + end + end + end + surface.SetAlphaMultiplier(1) +end +function TRAIN_SYSTEM:PAKSD2(train) + if train:GetPackedBool("Indicate3") then return end + if not train:GetPackedBool("Indicate1") and not train:GetPackedBool("Indicate2") then return end + for y = 0,#self.STR2r-1 do + for x = 0,math.min(19,#self.STR2r[y+1]-1) do + local char = self.STR2r[y+1][x+1] + if char == "_" then + if CurTime()%0.5>0.25 then + char = "" + else + surface.SetDrawColor(0,255,127) + surface.DrawRect(x*16-3,y*40 + 15,16,28) + end + end + draw.DrawText(char,"MetrostroiSubway_IGLA",x*16-3,y*40 + 15, Color(0,255,127)) + end + end + surface.SetAlphaMultiplier(1) +end + +function TRAIN_SYSTEM:STR1(str,notchange) + if SERVER then return end + if str == true then + for i = 1,4 do + self.STR1r[i] = "" + end + self.STR1x = 1 + else + if self.STR1x > 4 then print("STR1:ERR:MAX",str) return end + if notchange then + self.STR1r[self.STR1x-1] = self.STR1r[self.STR1x-1]..str + else + self.STR1r[self.STR1x] = str or "" + self.STR1x = self.STR1x + 1 + end + end +end +function TRAIN_SYSTEM:STR2(str,notchange) + if SERVER then return end + if str == true then + for i = 1,2 do + self.STR2r[i] = "" + end + self.STR2x = 1 + else + if self.STR2x > 2 then print("STR2:ERR:MAX",str) return end + if notchange then + self.STR2r[self.STR2x] = self.STR2r[self.STR2x]..(str or "") + else + self.STR2r[self.STR2x] = str or "" + self.STR2x = self.STR2x + 1 + end + end +end +function TRAIN_SYSTEM:ClientThink() + if not self.Train.Blok or self.Train.Blok ~= 2 then return end + self.Time = self.Time or CurTime() + if (CurTime() - self.Time) > 0.1 then + --print(1) + self.Time = CurTime() + --self.STR1 = string.Explode("\n",self.Train:GetNW2String("PAKSD1")) + --self.STR2 = string.Explode("\n",self.Train:GetNW2String("PAKSD2")) + self:STR1(true) + self:STR2(true) + local State = self.Train:GetNW2Int("PAKSD:State",0) + if State == -1 or State == -9 or State >= 1 and State < 6 then + self:STR2("<*>") + end + local Announcer = self.Train.Announcer + if State == 8 then + self:STR1("<*>") + self:STR2("<*>") + elseif State == -2 then + self:STR2("_") + elseif State == 1 then + self:STR1("+INITIAL TEST") + self:STR1("+INITIAL SETUP") + self:STR1("V 0.3") + self:STR1(" PRESS ENTER") + elseif State == 2 then + self:STR1("ENTER PASSWORD") + self:STR1("TO ENTER SYSTEM>") + self:STR1(self.Train:GetNW2Int("PAKSD:Pass",0) ~= -1 and string.rep("*",self.Train:GetNW2Int("PAKSD:Pass",0)) or "ACCESS ERROR") + elseif State == 3 then + self:STR1(" 1 GO TO LINE") + if self.Train:GetNW2Bool("PAKSD:Restart",false) then self:STR1(" 2 RESTART") end + --if self.FirstStation ~= "" and self.LastStation ~= "" then self:STR1("\n 2 RESTART" end + elseif State == 4 then + local State4Choosed = self.Train:GetNW2Int("PAKSD:State4",1) + if State4Choosed < 4 then + local Line = self.Train:GetNW2Int("PAKSD:Line",0) + local FirstStation = self.Train:GetNW2Int("PAKSD:FirstStation",-1) + local LastStation = self.Train:GetNW2Int("PAKSD:LastStation",-1) + local tbl = Metrostroi.EndStations + self:STR1("LINE "..Line..(State4Choosed == 1 and "_" or " ").." ") + if tbl[Line] then + local Routelength = #Metrostroi.EndStations[Line] + self:STR1("<"..tbl[Line][1].."->"..tbl[Line][Routelength]..">",true) + else + self:STR1("ERR>",true) + end + local st = "" + if tbl[Line] and tbl[Line][FirstStation] and Metrostroi.AnnouncerData[FirstStation] then + st = Metrostroi.AnnouncerData[FirstStation][1]:sub(1,10) + end + self:STR1("FIRST "..(FirstStation ~= -1 and FirstStation or "")..(State4Choosed == 2 and "_" or " ")..st:upper()) + st = "" + if tbl[Line] and tbl[Line][LastStation] and Metrostroi.AnnouncerData[LastStation] then + st = Metrostroi.AnnouncerData[LastStation][1]:sub(1,10) + end + self:STR1("LAST "..(LastStation ~= -1 and LastStation or "")..(State4Choosed == 3 and "_" or " ")..st:upper()) + self:STR1(" VVVV ") + else + local RouteNumber = self.Train:GetNW2Int("PAKSD:RouteNumber",-1) + self:STR1("ROUTEn "..(RouteNumber ~= -1 and RouteNumber or "").."_") + self:STR1("\"ENTER\" FOR CONFIRM") + end + elseif State == 49 then + local State4Choosed = self.Train:GetNW2Int("PAKSD:State4",1) + local Line = self.Train:GetNW2Int("PAKSD:Line",0) + local LastStation = self.Train:GetNW2Int("PAKSD:LastStation",-1) + local RouteNumber = self.Train:GetNW2Int("PAKSD:RouteNumber",-1) + local tbl = Metrostroi.EndStations + self:STR1("LINE "..Line..(State4Choosed == 1 and "_" or " ").." ") + if tbl[Line] then + local Routelength = #Metrostroi.EndStations[Line] + self:STR1("<"..tbl[Line][1].."->"..tbl[Line][Routelength]..">",true) + else + self:STR1("ERR>",true) + end + local st = "" + if tbl[Line] and tbl[Line][LastStation] and Metrostroi.AnnouncerData[LastStation] then + st = Metrostroi.AnnouncerData[LastStation][1]:sub(1,10) + end + self:STR1("LAST "..(LastStation ~= -1 and LastStation or "")..(State4Choosed == 2 and "_" or " ")..st:upper()) + self:STR1("ROUTEn "..(RouteNumber ~= -1 and RouteNumber or "")..(State4Choosed == 3 and "_" or " ")) + self:STR1("\"ENTER\" FOR CONFIRM") + elseif State == 48 or State == 45 then + self:STR1("ERROR WHEN ENTER") + self:STR1("SOURCE DATA") + self:STR1("FOR CONTINUE") + self:STR1("PRESS ENTER") + elseif State == 5 then + self:STR1(" TRAIN CHECK") + self:STR1(" APPROVED") + self:STR1(" WHEN CHECK") + self:STR1(" PRESS ENTER") + elseif State == 6 then + self:STR1("ENTER") + self:STR1("TO WORKING MODE?") + self:STR1("") + self:STR1("YES-\"ENTER\" NO-\"<-\"") + elseif State > 6 then + + local speed = math.floor(self.Train:GetPackedRatio(3)*100.0) + local station = self.Train:GetNW2Int("PAKSD:Station",0) + local spd = self.Train:GetNW2Bool("PAKSD:UOS", false) and 35 or self.Train:GetNW2Bool("PAKSD:VRD",false) and 20 or self.Train:GetPackedBool(46) and 80 or self.Train:GetPackedBool(45) and 70 or self.Train:GetPackedBool(44) and 60 or self.Train:GetPackedBool(43) and 40 or self.Train:GetPackedBool(42) and "00" or "H4" + local VZ = (self.Train:GetNW2Bool("PAKSD:VZ1",false) and "B1" or "").." "..(self.Train:GetNW2Bool("PAKSD:VZ2",false) and "B2" or "") + if self.OldVRD ~= self.Train:GetNW2Bool("PAKSD:VRD",false) then + self.OldVRD = self.Train:GetNW2Bool("PAKSD:VRD",false) + if self.OldVRD then + self.VRDTimer = CurTime() + 7 + end + end + local distance = self.Train:GetNW2Int("PAKSD:Distance",-99) + local pos =self.Positions[self.Train:GetNW2Int("PAKSD:KV",0)] + local typ = self.Types[self.Train:GetNW2Int("PAKSD:Type",0)] + local RK = (self.Positions2[self.Train:GetNW2Int("PAKSD:PPT",1)]).."="..tostring(self.Train:GetNW2Int("PAKSD:RK",0)) + if speed < 10 then + speed = "0"..speed + end + if State == 71 then + self:STR1("CONFIRM") + self:STR1("Autodrive MODE?") + self:STR1() + self:STR1("YES-\"ENTER\" NO-\"<-\"") + elseif State == 72 then + self:STR1("CONFIRM") + self:STR1("SC MODE? ") + self:STR1() + self:STR1("YES-\"ENTER\" NO-\"<-\"") + elseif State == 73 then + self:STR1("CONFIRM") + self:STR1("SL MODE? ") + self:STR1() + self:STR1("YES-\"ENTER\" NO-\"<-\"") + elseif State == 74 then + local State74 = self.Train:GetNW2Int("PAKSD:State74",1) + local SD = self.Train:GetNW2Bool("PAKSD:KD",false) + if State74 < 4 then + self:STR1("1"..(State74 == 1 and "%" or "")..":"..(State74 == 1 and "$" or "").."ROLLING CHECK") + self:STR1("2"..(State74 == 2 and "%" or "")..":"..(State74 == 2 and "$" or "").."DRIVE "..(SD and "WITH" or "WITHOUT").." SD") + self:STR1("3"..(State74 == 3 and "%" or "")..":"..(State74 == 3 and "$" or "").."SETTINGS CHANGE") + self:STR1(" VVVV ") + elseif State74 < 7 then + self:STR1("4"..(State74 == 4 and "%" or "")..":"..(State74 == 4 and "$" or "")..(self.Train:GetNW2Bool("PAKSD:Transit",false) and "DIS " or "").."TRANSIT MODE") + self:STR1("5"..(State74 == 5 and "%" or "")..":"..(State74 == 5 and "$" or "").."DRIVE WITH Vd=0") + self:STR1("6"..(State74 == 6 and "%" or "")..":"..(State74 == 6 and "$" or "").."ZONED TURN") + self:STR1(" VVVV ") + else + self:STR1("7"..(State74 == 7 and "%" or "")..":"..(State74 == 7 and "$" or "").."FIX STATION") + self:STR1("8"..(State74 == 8 and "%" or "")..":"..(State74 == 8 and "$" or "").."STATION MODE") + end + elseif State == 75 then + local State75 = self.Train:GetNW2Int("PAKSD:State75",1) + self:STR1("1"..(State75 == 1 and "%" or "")..":"..(State75 == 1 and "$" or "").."GO OUT FROM TRAIN") + self:STR1("2"..(State75 == 2 and "%" or "")..":"..(State75 == 2 and "$" or "").."ENTRY FASTER") + self:STR1("3"..(State75 == 3 and "%" or "")..":"..(State75 == 3 and "$" or "").."RELEASE DOORS") + self:STR1("4"..(State75 == 4 and "%" or "")..":"..(State75 == 4 and "$" or "").."TRAIN DEPEAT SOON") + elseif State == 76 then + self:STR1("CONTINUE MOVEMENT") + self:STR1("WITH VD=0? ") + self:STR1() + self:STR1("YES-\"ENTER\" NO-\"<-\"") + elseif State == 77 then + self:STR1("ACCEPT") + self:STR1("ROLLING CHECK?") + self:STR1() + self:STR1("YES-\"ENTER\" NO-\"<-\"") + --self:STR1("5:DRIVE WITH Vd = 0") + --self:STR1("6:ZONED TURN") + --[[ + elseif State == 79 then + self:STR1("FOR TRANSIT MODE") + self:STR1("PRESS ENTER") + self:STR1("FOR CANCEL") + self:STR1("PRESS \"-\"") + elseif State == 75 then + self:STR1("FOR ROLL MODE") + self:STR1("PRESS ENTER") + self:STR1("FOR CANCEL") + self:STR1("PRESS \"-\"") + elseif State == 77 then + self:STR1("FOR STATION GO MODE") + self:STR1("PRESS ENTER") + self:STR1("FOR CANCEL") + self:STR1("PRESS \"-\"") + ]] + elseif self.Train:GetNW2Bool("PAKSD:Nakat",false) then + self:STR1("ROLLING CHECK") + self:STR1("DISTANCE:"..Format("%.2f",self.Train:GetNW2Float("PAKSD:Meters",0))) + self:STR1("DIRECTION:"..(self.Train:GetNW2Bool("PAKSD:Sign",false) and "BACKWARD" or "FORWARD")) + self:STR1(typ.."="..pos..string.rep(" ",6-#typ-#pos)..VZ..string.rep(" ",20-5-#VZ-6-1).."Vf="..speed) + else + local State7 = self.Train:GetNW2Int("PAKSD:State7",0) + if State7 == 0 then + self:STR1(" EXIT TO THE LINE") + local date = os.date("!*t",os_time) + self:STR1(" Tm="..Format("%02d:%02d:%02d",date.hour,date.min,date.sec)) + self:STR1() + if self.VRDTimer and CurTime() - self.VRDTimer < 0 then + self:STR1("@ACC MOV WITH Vd=0") + elseif self.Train:GetNW2Bool("PAKSD:Transit",false) then + self:STR1("TRANSIT MODE") + else + self:STR1(typ.."="..pos..string.rep(" ",6-#typ-#pos)..VZ..string.rep(" ",20-5-#VZ-6-1).."Vd="..spd) + self.VRDTimer = nil + end + elseif State7 == 1 and Metrostroi.AnnouncerData then + local path = self.Train:GetNW2Int("PAKSD:Path",0) + local bt = tostring(self.Train:GetNW2Int("PAKSD:BoardTime",0)) + local date = os.date("!*t",os_time) + local tm = Format("%02d:%02d:%02d",date.hour,date.min,date.sec) + self:STR1((Metrostroi.AnnouncerData[station] and Metrostroi.AnnouncerData[station][1]) and Metrostroi.AnnouncerData[station][1]:upper() or "UNK") + self:STR1("TO "..Metrostroi.AnnouncerData[self.Train:GetNW2Int("PAKSD:LastStation",108)][1]:upper()) + self:STR1("ST "..bt..string.rep(" ",20-8-3-#bt)..tm) + if self.VRDTimer and CurTime() - self.VRDTimer < 0 then + self:STR1("@ACC MOV WITH Vd=0") + elseif self.Train:GetNW2Bool("PAKSD:Transit",false) then + self:STR1("TRANSIT MODE") + else + self:STR1(typ.."="..pos..string.rep(" ",6-#typ-#pos)..VZ..string.rep(" ",20-6-4-#VZ)..(path == 1 and "I " or "II" ).."P") + self.VRDTimer = nil + end + else + local name = self.Train:GetNW2String("PAKSD:SName","ERR") + local curr = string.rep("#",speed/4.7-1) + local max = string.rep("-",(spd ~= "H4" and spd or 0)/4.7-1) + self:STR1(curr.."<"..string.rep(" ",20-#curr-3)..speed) + self:STR1(max.."^"..string.rep(" ",20-#max-3)..spd) + self:STR1("TC="..name..string.rep(" ",20-9-#name)..math.min(9999,math.floor(distance)).." m") + if self.VRDTimer and CurTime() - self.VRDTimer < 0 then + self:STR1("@ACC MOV WITH Vd=0") + elseif self.Train:GetNW2Bool("PAKSD:Transit",false) then + self:STR1("TRANSIT MODE") + else + self:STR1(typ.."="..pos..string.rep(" ",6-#typ-#pos)..VZ..string.rep(" ",20-2-6-1-#VZ-math.max(4,#self.StataionData[station])).."<"..self.StataionData[station]..">") + self.VRDTimer = nil + end + end + end + self:STR2("V+= "..speed.." Vd= "..spd.." S= "..(station == 0 and "unk" or math.min(999,math.floor(distance)))) + self:STR2(typ.."= "..pos..string.rep(" ",6-#typ-#pos)..RK..string.rep(" ",20-7-4-3-#RK).."T= "..(self.Train:GetPackedRatio(3)*100.0 > 0.25 and math.min(999,math.floor(distance/(speed*1000/3600))) or "inf")) + end + end +end + +function TRAIN_SYSTEM:UpdateUPO() + for k,v in pairs(self.Train.WagonList) do + if v.UPO then v.UPO:SetStations(self.Line,self.FirstStation,self.LastStation,v == self.Train) end + v:OnButtonPress("RouteNumberUpdate",self.RouteNumber) + end +end + +function TRAIN_SYSTEM:Trigger(name,nosnd) + local Announcer = self.Train.Announcer + if self.State == 1 and name == "BEnter" then + self:SetState(2) + elseif self.State == 2 then + if name == "BEnter" then + if self.Pass ~= self.EnteredPass then + self.EnteredPass = "/" + else + self:SetState(3) + end + else + if self.EnteredPass == "/" then self.EnteredPass = "" end + local Char = tonumber(name:sub(2,2)) + if Char and #self.EnteredPass < 6 then self.EnteredPass = self.EnteredPass..tonumber(name:sub(2,2)) end + end + elseif self.State == 3 then + if name == "B1" then + self:SetState(4) + end + if name == "B2" and self.FirstStation ~= "" and self.LastStation ~= "" then + self:SetState(49) + end + elseif self.State == 4 then + --print(name) + if name == "BDown" then + self.State4Choosed = math.min(4,self.State4Choosed + 1) + end + if name == "BUp" then + self.State4Choosed = math.max(1,self.State4Choosed - 1) + end + if name == "BLeft" then + if self.State4Choosed == 2 then + self.FirstStation= self.FirstStation:sub(1,-2) + end + if self.State4Choosed == 3 then + self.LastStation= self.LastStation:sub(1,-2) + end + if self.State4Choosed == 4 then + self.RouteNumber= self.RouteNumber:sub(1,-2) + end + self:UpdateUPO() + end + if name == "BEnter" then + if not Metrostroi.EndStations[self.Line] or + not Metrostroi.EndStations[self.Line][tonumber(self.FirstStation)] or + not Metrostroi.AnnouncerData[tonumber(self.FirstStation)] or + not Metrostroi.EndStations[self.Line][tonumber(self.LastStation)] or + not Metrostroi.AnnouncerData[tonumber(self.LastStation)] or + #self.RouteNumber < 3 then + self:SetState(45) + else + self:SetState(5) + end + end + local Char = tonumber(name:sub(2,2)) + if Char then + if self.State4Choosed == 1 then + self.Line = Char + if Metrostroi.EndStations[self.Line] then + local Routelength = #Metrostroi.EndStations[self.Line] + self.FirstStation = tostring(Metrostroi.EndStations[self.Line][1]) + self.LastStation = tostring(Metrostroi.EndStations[self.Line][Routelength]) + end + end + if self.State4Choosed == 2 and #self.FirstStation < 3 then + self.FirstStation= self.FirstStation..tostring(Char) + end + if self.State4Choosed == 3 and #self.LastStation < 3 then + self.LastStation= self.LastStation..tostring(Char) + end + if self.State4Choosed == 4 and #self.RouteNumber < 3 then + self.RouteNumber= self.RouteNumber..tostring(Char) + end + self:UpdateUPO() + end + elseif self.State == 49 then + if name == "BDown" then + self.State4Choosed = math.min(3,self.State4Choosed + 1) + end + if name == "BUp" then + self.State4Choosed = math.max(1,self.State4Choosed - 1) + end + if name == "BLeft" then + if self.State4Choosed == 2 then + self.LastStation= self.LastStation:sub(1,-2) + end + if self.State4Choosed == 3 then + self.RouteNumber= self.RouteNumber:sub(1,-2) + end + self:UpdateUPO() + end + if name == "BEnter" then + if not Metrostroi.EndStations[self.Line] or + not Metrostroi.EndStations[self.Line][tonumber(self.LastStation)] or + not Metrostroi.AnnouncerData[tonumber(self.LastStation)] or + #self.RouteNumber < 3 then + self:SetState(48) + else + self:SetState(7) + end + end + local Char = tonumber(name:sub(2,2)) + if Char then + if self.State4Choosed == 1 then + self.Line = Char + if Metrostroi.EndStations[self.Line] then + local Routelength = #Metrostroi.EndStations[self.Line] + self.FirstStation = self.FirstStation ~= "" and self.FirstStation or tostring(Metrostroi.EndStations[self.Line][1]) + self.LastStation = tostring(Metrostroi.EndStations[self.Line][Routelength]) + if tonumber(self.LastStation) < tonumber(self.FirstStation) then + local temp = self.FirstStation + self.FirstStation = self.LastStation + self.LastStation = temp + end + end + end + if self.State4Choosed == 2 and #self.LastStation < 3 then + self.LastStation= self.LastStation..tostring(Char) + end + if self.State4Choosed == 3 and #self.RouteNumber < 3 then + self.RouteNumber= self.RouteNumber..tostring(Char) + end + self:UpdateUPO() + end + elseif self.State == 45 then + if name == "BEnter" then + self:SetState(4,nil,true) + end + elseif self.State == 48 then + if name == "BEnter" then + self:SetState(49,nil,true) + end + elseif self.State == 5 then + if name == "BEnter" and self.Check == false then + self:SetState(6) + end + elseif self.State == 6 then + if name == "BLeft" then + self:SetState(3) + end + if name == "BEnter" then + self:SetState(7) + end + elseif self.State == 7 and not self.Nakat then + if name == "B1" then + if not self.AutodriveWorking and self.Train.ALS_ARS["33G"] < 0.5 then + self:SetState(71) + end + elseif name == "B2" then + if (self.AutodriveWorking or self.VRD or self.UOS) and not self.Trainsit then + self:SetState(72) + end + elseif name == "B3" then + --print(self.Train.ALS_ARS.Signal0,self.Train.ALS_ARS.RealNoFreq) + if not self.UOS and not self.Train.ALS_ARS.EnableARS then + self:SetState(73) + end + elseif name == "BEnter" then + self:SetState(74) + elseif name == "BPlus" then + self:SetState(75) + end + --[[ + elseif name == "B5" then + if not self.Transit and not self.VRD then + self:SetState(74) + end + elseif name == "B6" then + if not self.Nakat and not self.VRD then + self:SetState(75) + end + elseif name == "B7" then + if not self.Stancionniy and not self.VRD then + self:SetState(77) + end + elseif name == "BUp" then + self:AnnII(4) + elseif name == "BDown" then + self:AnnII(3) + elseif name == "BPlus" then + self:AnnII(2) + elseif name == "BMinus" then + self:AnnII(1) + end + ]] + elseif self.State == 7 and self.Nakat then + self.Nakat = false + if self.Train:ReadTrainWire(1) < 1 then + self.Train.ALS_ARS.Nakat = false + end + elseif self.State == 71 then + if name == "BEnter" then + self.AutodriveWorking = true + self.UOS = false + self:SetState(7,nil,true) + end + if name == "BLeft" then + self:SetState(7,nil,true) + end + elseif self.State == 72 then + if name == "BEnter" then + self.AutodriveWorking = false + self.UOS = false + self:SetState(7,nil,true) + end + if name == "BLeft" then + self:SetState(7,nil,true) + end + elseif self.State == 73 then + if name == "BEnter" then + self.AutodriveWorking = false + self.UOS = true + self:SetState(7,nil,true) + end + if name == "BLeft" then + self:SetState(7,nil,true) + end + elseif self.State == 74 then + if name == "BUp" then + self.State74 = math.max(1,self.State74 - 1) + --if self.State74 == 4 and self.Transit then + --self:Trigger("BUp",true) + --else + if self.State74 == 5 and (self.VRD or not (self.Train.ALS_ARS.Signal0 and not self.Train.ALS_ARS.RealNoFreq and not self.Train.ALS_ARS.Signal40 and not self.Train.ALS_ARS.Signal60 and not self.Train.ALS_ARS.Signal70 and not self.Train.ALS_ARS.Signal80)) then + self:Trigger("BUp",true) + elseif self.State74 == 6 then + if self.LastStation == tostring(self.Train.UPO.Station) then + self:Trigger("BUp",true) + end + elseif self.State74 == 7 then + if self.FirstStation == tostring(self.Train.UPO.Station) then + self:Trigger("BUp",true) + end + end + end + if name == "BDown" then + self.State74 = math.min(8,self.State74 + 1) + --if self.State74 == 4 and self.Transit then + --self:Trigger("BDown",true) + --else + if self.State74 == 5 and (self.VRD or not (self.Train.ALS_ARS.Signal0 and not self.Train.ALS_ARS.RealNoFreq and not self.Train.ALS_ARS.Signal40 and not self.Train.ALS_ARS.Signal60 and not self.Train.ALS_ARS.Signal70 and not self.Train.ALS_ARS.Signal80)) then + self:Trigger("BDown",true) + elseif self.State74 == 6 then + if self.LastStation == tostring(self.Train.UPO.Station) then + self:Trigger("BDown",true) + end + elseif self.State74 == 7 then + if self.FirstStation == tostring(self.Train.UPO.Station) then + self:Trigger("BDown",true) + end + end + end + if name == "BLeft" then + self:SetState(7,nil,true) + end + if name == "BEnter" then + if self.State74 == 1 and self.Train.Speed < 0.5 and self.Train.ALS_ARS.SpeedLimit > 20 then + self:SetState(77) + elseif self.State74 == 2 then + self.KD = not self.KD + elseif self.State74 == 3 then + self:SetState(3) + elseif self.State74 == 4 then + self.Transit = not self.Transit + self.AutodriveWorking = false + elseif self.State74 == 5 then + self:SetState(76) + elseif self.State74 == 6 then + if Metrostroi.EndStations[self.Line][self.Train.UPO.Station] then + self.LastStation = tostring(self.Train.UPO.Station) + end + elseif self.State74 == 7 then + if Metrostroi.EndStations[self.Line][self.Train.UPO.Station] then + self.FirstStation = tostring(self.Train.UPO.Station) + end + elseif self.State74 == 8 and not self.Arrived then + self.Arrived = true + end + if self.State > 6 and self.State ~= 76 and self.State ~= 77 then self:SetState(7,nil,true) end + end + if self.State74 > 6 then + if name == "B7" then + if Metrostroi.EndStations[self.Line][self.Train.UPO.Station] then + self.FirstStation = tostring(self.Train.UPO.Station) + if self.State > 6 and self.State ~= 76 and self.State ~= 77 then self:SetState(7,nil,true) end + end + end + if name == "B8" and not self.Arrived == nil then + self.Arrived = true + if self.State > 6 and self.State ~= 76 and self.State ~= 77 then self:SetState(7,nil,true) end + end + elseif self.State74 > 3 then + if name == "B4" then + self.Transit = not self.Transit + self.AutodriveWorking = false + if self.State > 6 and self.State ~= 76 and self.State ~= 77 then self:SetState(7,nil,true) end + end + if name == "B5" then + self:SetState(76) + if self.State > 6 and self.State ~= 76 and self.State ~= 77 then self:SetState(7,nil,true) end + end + if name == "B6" then + if Metrostroi.EndStations[self.Line][self.Train.UPO.Station] then + self.LastStation = tostring(self.Train.UPO.Station) + if self.State > 6 and self.State ~= 76 and self.State ~= 77 then self:SetState(7,nil,true) end + end + end + else + if name == "B1" and self.Train.Speed < 0.5 and self.Train.ALS_ARS.SpeedLimit > 20 then + self:SetState(77) + if self.State > 6 and self.State ~= 76 and self.State ~= 77 then self:SetState(7,nil,true) end + end + if name == "B2" then + self.KD = not self.KD + if self.State > 6 and self.State ~= 76 and self.State ~= 77 then self:SetState(7,nil,true) end + end + if name == "B3" then + self:SetState(3) + if self.State > 6 and self.State ~= 76 and self.State ~= 77 then self:SetState(7,nil,true) end + end + end + elseif self.State == 75 then + if name == "BUp" then + self.State75 = math.max(1,self.State75 - 1) + end + if name == "BDown" then + self.State75 = math.min(4,self.State75 + 1) + end + if name == "BLeft" then + self:SetState(7,nil,true) + end + if name == "BEnter" then + self.Train.UPO:II(self.State75) + self:SetState(7,nil,true) + end + local Char = tonumber(name:sub(2,2)) + if Char and Char > 0 and Char < 5 then + self.Train.UPO:II(Char) + self:SetState(7,nil,true) + end + elseif self.State == 76 then + if name == "BEnter" then + self.AutodriveWorking = false + self.VRD = true + self:SetState(7,nil,true) + end + if name == "BLeft" then + self:SetState(7,nil,true) + end + elseif self.State == 77 then + if name == "BEnter" then + if self.Train.Speed < 0.5 and self.Train.ALS_ARS.SpeedLimit > 20 then + self.AutodriveWorking = false + self.VRD = false + self.Nakat = true + end + self:SetState(7,nil,true) + end + if name == "BLeft" then + self:SetState(7,nil,true) + end + + --[[ + elseif self.State == 74 then + if name == "BEnter" then + self.AutodriveWorking = false + self.UOS = false + self.VRD = false + self.Transit = true + self.Nakat = false + self.Stancionniy = false + self:SetState(7,nil,true) + end + if name == "BMinus" then + self:SetState(7,nil,true) + end + elseif self.State == 75 then + if name == "BEnter" then + self.AutodriveWorking = false + self.UOS = false + self.VRD = false + self.Transit = false + self.Nakat = true + self.Stancionniy = false + self:SetState(7,nil,true) + end + if name == "BMinus" then + self:SetState(7,nil,true) + end + elseif self.State == 77 then + if name == "BEnter" then + self.AutodriveWorking = false + self.UOS = false + self.VRD = false + self.Transit = false + self.Nakat = false + self.Stancionniy = true + self:SetState(7,nil,true) + end + if name == "BMinus" then + self:SetState(7,nil,true) + end + ]] + end +end +--[[ +function TRAIN_SYSTEM:PAKSD1() + surface.SetDrawColor(0,255,127) + for x = 1,20 do + for y = 0,3 do + for x1 = 1,5 do + for y1 = 1,7 do + self.Train:DrawCircle(5+x1*2 + x*12,5+y1*2 + y*16,1) + end + end + end + end +end +function TRAIN_SYSTEM:PAKSD2() + surface.SetDrawColor(0,255,127) + for i = 0,1 do + for x = 1,5 do + for y = 1,7 do + self.Train:DrawCircle(5+x*2,5+y*2 + i*16,1) + end + end + end +end +]] + +function TRAIN_SYSTEM:SetState(state,state7,noupd) + local Train = self.Train + local ARS = Train.ALS_ARS + local Announcer = Train.Announcer + if state and self.State ~= state then + self.State = state + if noupd then return end + self:SetTimer() + if state == -2 then + self.Train:PlayOnce("paksd","cabin",0.75,200.0) + end + if state == 2 then + self.EnteredPass = "" + end + if state == 4 then + self.Line = self.Train.UPO.Line or 1 + self.RouteNumber = "" + self.State4Choosed = 1 + if Metrostroi.EndStations[self.Line] then + self.FirstStation = self.Train.UPO.FirstStation or tostring(self.Train.UPO.Path == 2 and Metrostroi.EndStations[self.Line][#Metrostroi.EndStations[self.Line]] or Metrostroi.EndStations[self.Line][1]) + self.LastStation = self.Train.UPO.LastStation or tostring(self.Train.UPO.Path == 1 and Metrostroi.EndStations[self.Line][#Metrostroi.EndStations[self.Line]] or Metrostroi.EndStations[self.Line][1]) + else + self.FirstStation = "111" + self.LastStation = "123" + end + self:UpdateUPO() + end + if state == 49 then + self.State4Choosed = 1 + end + if state == 5 then + self.Check = nil + else + self.Train.ALS_ARS:TriggerInput("Ring",0) + end + if state == 7 then + if not state7 then + for k,v in pairs(self.Train.WagonList) do + if v ~= self.Train and v["PA-KSD"] then + v["PA-KSD"]:SetState(7,true) + end + end + end + end + if state == 74 then + self.State74 = 1 + end + if state == 75 then + self.State75 = 1 + end + end +end + +function TRAIN_SYSTEM:GetTimer(val) + return self.TimerMod and (CurTime() - self.Timer) > val +end +function TRAIN_SYSTEM:SetTimer(mod) + if mod then + if self.TimerMod == mod then return end + self.TimerMod = mod + else + self.TimerMod = nil + end + self.Timer = CurTime() +end + +function TRAIN_SYSTEM:Think(dT) + --print(self.Train.PAKSD_VUD.Value) + if self.Train.Blok ~= 2 then self:SetState(0) return end + if self.VPA and self.Train.VPA.Value < 1 and not self.OffTimer then + self.OffTimer = CurTime() + 1 + self.OnTimer = nil + end + if self.Train.VPA.Value == 1 and self.OffTimer then + self.OffTimer = nil + self.OnTimer = nil + end + if not self.VPA and self.Train.VPA.Value > 1 and not self.OnTimer then + self.OffTimer = nil + self.OnTimer = CurTime() + 1 + end + if self.OnTimer and (CurTime() - self.OnTimer) > 0 then + for k,v in pairs(self.Train.WagonList) do + if v["PA-KSD"] then v["PA-KSD"].VPA = true end + end + self.OnTimer = nil + end + if self.OffTimer and (CurTime() - self.OffTimer) > 0 then + for k,v in pairs(self.Train.WagonList) do + if v["PA-KSD"] then v["PA-KSD"].VPA = false end + end + self.OffTimer = nil + end + if self.Train.VB.Value > 0.5 and self.Train.Battery.Voltage > 55 and self.VPA and self.State >= -1 then + for k,v in pairs(self.TriggerNames) do + if self.Train[v] and (self.Train[v].Value > 0.5) ~= self.Triggers[v] then + if self.Train[v].Value > 0.5 then + self:Trigger(v) + self.Train:PlayOnce("paksd","cabin",0.75,160.0) + end + --print(v,self.Train[v].Value > 0.5) + self.Triggers[v] = self.Train[v].Value > 0.5 + end + end + end + --print(self.Train.Owner) + local ARS = self.Train.ALS_ARS + local Announcer = self.Train.Announcer + --self.Train.UPO.Station = self.Train:ReadCell(49160) > 0 and self.Train:ReadCell(49160) or self.Train:ReadCell(49161) + --self.Train.UPO.Path = Metrostroi.PathConverter[self.Train:ReadCell(65510)] or 0 + --self.Train.UPO.Distance = self.Train:ReadCell(49165) + (self.Train.Autodrive.Corrections[self.Train.UPO.Station] or 0) + --print(self.Train.VB.Value < 0.5 or self.Train.Battery.Voltage < 55) + if self.Train.VB.Value < 0.5 or self.Train.Battery.Voltage < 55 or not self.VPA then self:SetState(0) elseif self.State == 0 then self:SetState(-2) end + --if not ARS.EnableARS and self.State > 6 then self.State = -1 end + if self.Train.KV.ReverserPosition == 0 and self.State > 6 and self.State ~= 8 then self:SetState(8) end + if self.Train.KV.ReverserPosition == 0 and self.State > 0 and self.State < 6 and self.State ~= -9 then self:SetState(-9) end + if self.Train.KV.ReverserPosition ~= 0 and self.State == -9 then self:SetState(1) end + if self.Train.KV.ReverserPosition ~= 0 and self.State == 8 then + self:SetState(7,nil,true) + end + if self.State == -2 then + self:SetTimer(0.5) + if self:GetTimer(5) then + self.State = -1 + return + end + elseif self.State == -1 then + if self.Train.KV.ReverserPosition == 0 then + self:SetState(1) + else + self:SetState(-9) + end + elseif self.State == 5 then + if self.Check == nil then ARS:TriggerInput("Ring",1) end + --print(ARS.KVT) + if ARS.KVT and self.Check == nil then + self.Check = true + self:SetTimer(4) + end + if not ARS.KVT and self.Check ~= false then + self.Check = nil + self:SetTimer() + end + if ARS.KVT and self:GetTimer(1) then + self.Check = false + ARS:TriggerInput("Ring",0) + self:SetTimer() + end + elseif self.State > 6 and self.State ~= 8 and self.State ~= 49 and self.State ~= 45 and self.State ~= 48 then + if self.VRD and (not ARS.Signal0 or ARS.Signal0 and (ARS.Signal40 or ARS.Signal60 or ARS.Signal70 or ARS.Signal80)) then self.VRD = false end + if self.Train.UPO.Distance > 40 and (self.Train.UPO.Distance) < (160+35*self.Train.Autodrive.MU - (ARS.SpeedLimit == 40 and 30 or 0)) then + self.Train.UPO.StationAutodrive = true + end + if (self.Train.UPO:GetSTNum(self.LastStation) > self.Train.UPO:GetSTNum(self.FirstStation) and self.Train.UPO.Path == 2) or (self.Train.UPO:GetSTNum(self.FirstStation) > self.Train.UPO:GetSTNum(self.LastStation) and self.Train.UPO.Path == 1) then + local old = self.LastStation + self.LastStation = self.FirstStation + self.FirstStation = old + self:UpdateUPO() + end + self.State7 = (self.Train.UPO:End(self.Train.UPO.Station,self.Train.UPO.Path,true) or self.Train.UPO:GetSTNum(self.LastStation) > self.Train.UPO:GetSTNum(self.Train.UPO.Station) and self.Train.UPO.Path == 2 or self.Train.UPO:GetSTNum(self.Train.UPO.Station) < self.Train.UPO:GetSTNum(self.FirstStation) and self.Train.UPO.Path == 1) and 0 or self.Arrived ~= nil and 1 or 2 + if self.State7 ~= 0 then + if (self.RealState == 8 or self.RealState == 6 or self.RealState == 49) and not self.Transit then + if self.Train.UPO.Distance < 75 and not self.Arrived and Metrostroi.WorkingStations[self.Line][self.Train.UPO.Station] and ARS.Speed <= 1 then + self.Arrived = true + end + end + if not self.Transit and 45 < self.Train.UPO.Distance and self.Train.UPO.Distance < 75 and not self.Arrived and Metrostroi.WorkingStations[self.Line][self.Train.UPO.Station] then + self.Arrived = true + end + if self.Transit then self.Arrived = nil end + if self.Train.UPO.Distance > 75 then + self.Arrived = nil + else + --if self.Train.Panel.SD < 0.5 then self.Arrived = true end + end + if self.Arrived then + if self.Train.UPO.BoardTime and math.floor((self.Train.UPO.BoardTime or CurTime()) - CurTime()) < (self.Train.Horlift and 15 or 8) and self.Arrived then + self.Arrived = false + end + end + if self.Nakat then + if not self.Meters then self.Meters = 0 end + self.Meters = self.Meters + ARS.Speed*self.Train.SpeedSign/3600*1000*dT + if math.abs(self.Meters) > 2.5 then + self.Nakat = false + if self.Train:ReadTrainWire(1) < 1 then + ARS.Nakat = true + end + end + else + self.Meters = nil + end + end + end + if self.State ~= self.RealState then + self.RealState = self.State + self.TimeOverride = true + end + + self.Time = self.Time or CurTime() + if (CurTime() - self.Time) > 0.1 or self.TimeOverride then + self.TimeOverride = nil + --print(1) + self.Time = CurTime() + --if self.STR1 ~= self.STR1Real then + --self.Train:SetNW2String("PAKSD1",self.STR1) + --self.STR1 = self.STR1Real + --end + --if self.STR2 ~= self.STR2Real then + --self.Train:SetNW2String("PAKSD2",self.STR2) + --self.STR2 = self.STR2Real + --end + --self.Train:SetNW2String("PAKSD2","V+= 59 VD= 70 self.Train.UPO.Distance= 307\nKB=T1 Tx= -2c") + self.Train:SetNW2Int("PAKSD:State",self.State) + if self.State == 2 then self.Train:SetNW2Int("PAKSD:Pass",self.EnteredPass ~= "/" and #self.EnteredPass or -1) + elseif self.State == 3 then self.Train:SetNW2Bool("PAKSD:Restart",self.FirstStation ~= "" and self.LastStation ~= "") + elseif self.State == 4 then + self.Train:SetNW2Int("PAKSD:State4",self.State4Choosed) + if self.State4Choosed < 4 then + self.Train:SetNW2Int("PAKSD:FirstStation",tonumber(self.FirstStation) or -1) + self.Train:SetNW2Int("PAKSD:LastStation",tonumber(self.LastStation) or -1) + self.Train:SetNW2Int("PAKSD:Line",self.Line) + else + self.Train:SetNW2Int("PAKSD:RouteNumber",tonumber(self.RouteNumber ~= "" and self.RouteNumber or -1)) + end + elseif self.State == 49 then + self.Train:SetNW2Int("PAKSD:State4",self.State4Choosed) + self.Train:SetNW2Int("PAKSD:LastStation",tonumber(self.LastStation) or -1) + self.Train:SetNW2Int("PAKSD:Line",self.Line) + self.Train:SetNW2Int("PAKSD:RouteNumber",tonumber(self.RouteNumber ~= "" and self.RouteNumber or -1)) + elseif self.State == 7 then + self.Train:SetNW2Int("PAKSD:LastStation",tonumber(self.LastStation)) + self.Train:SetNW2Int("PAKSD:State7",self.State7) + self.Train:SetNW2Int("PAKSD:Nakat",self.Nakat) + self.Train:SetNW2Bool("PAKSD:VRD",self.VRD) + self.Train:SetNW2Bool("PAKSD:Transit",self.Transit) + self.Train:SetNW2Int("PAKSD:Station",self.Train.UPO.Station) + self.Train:SetNW2Int("PAKSD:Distance",self.Train.UPO.Distance) + self.Train:SetNW2Int("PAKSD:Type",(self.Train.Pneumatic.EmergencyValveEPK and 0 or self.Train.ALS_ARS.UAVAContacts and 4 or self.UOS and 5 or self.VRD and 2 or (self.Train.AutodriveEnabled or self.Train.UPO.StationAutodrive) and 1 or 3)) + self.Train:SetNW2Int("PAKSD:PPT",math.Clamp(math.floor(self.Train.PositionSwitch.Position + 0.5),1,3)) + self.Train:SetNW2Int("PAKSD:RK",math.floor(self.Train.RheostatController.Position+0.5)) + self.Train:SetNW2Int("PAKSD:KV",self.Train.Autodrive.AutodriveEnabled and (self.Rotating and -3 or self.Brake and -1 or self.Accelerate and 3 or 0) or (ARS["33G"] > 0 or (self.UOS and (ARS["8"] + (1-self.Train.RPB.Value)) > 0)) and 5 or self.Train.KV.RealControllerPosition) + self.Train:SetNW2Bool("PAKSD:VZ1", self.Train:ReadTrainWire(29) > 0) + self.Train:SetNW2Bool("PAKSD:VZ2", self.Train.PneumaticNo2.Value > 0) + self.Train:SetNW2Bool("PAKSD:UOS", self.UOS) + + --self.Train:SetNW2Int("PAKSD:ARS",ARS.Signal80 and 80 or ARS.Signal70 and 70 or ARS.Signal60 and 60 or ARS.Signal40 and 40 or ARS.Signal0 and 0 or -1) + --local speed = tostring(math.floor(ARS.Speed)) + + if self.State7 == 1 then + self.Train:SetNW2Int("PAKSD:BoardTime",math.floor((self.Train.UPO.BoardTime or CurTime()) - CurTime())) + self.Train:SetNW2Int("PAKSD:Path",self.Train.UPO.Path) + elseif self.State7 == 2 then + self.Train:SetNW2String("PAKSD:SName",ARS.Signal and ARS.Signal.RealName or "ERR") + end + if self.Nakat then + self.Train:SetNW2Float("PAKSD:Meters",math.Round(math.abs(self.Meters or 0),1)) + self.Train:SetNW2Bool("PAKSD:Sign",ARS.Speed > 0.5 and self.Train.SpeedSign < 0) + end + elseif self.State == 74 then + self.Train:SetNW2Int("PAKSD:State74",self.State74) + self.Train:SetNW2Bool("PAKSD:KD",self.KD) + self.Train:SetNW2Bool("PAKSD:Transit",self.Transit) + elseif self.State == 75 then + self.Train:SetNW2Int("PAKSD:State75",self.State75) + elseif self.State == 8 then + self.Train:SetNW2Bool("PAKSD:VRD",self.VRD) + self.AutodriveWorking = false + self.UOS = false + self.VRD = false + self.Transit = false + self.Nakat = false + self.Stancionniy = false + end + end + if self.Train.VZP.Value > 0.5 and self.AutodriveWorking then + self.Train.Autodrive:Enable() + end + self.RouteNumber = string.gsub(self.Train.RouteNumber or "","^(0+)","") + if self.State > 4 and self.State ~= 49 then + self.Line = self.Train.UPO.Line + self.FirstStation = tostring(self.Train.UPO.FirstStation or "") + self.LastStation = tostring(self.Train.UPO.LastStation or "") + end +end diff --git a/lua/metrostroi/systems/_obsolete/sys_pa-m.lua b/lua/metrostroi/systems/_obsolete/sys_pa-m.lua new file mode 100644 index 0000000..c25b76e --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_pa-m.lua @@ -0,0 +1,1550 @@ +-------------------------------------------------------------------------------- +-- ПÐ-М ÐŸÐ¾ÐµÐ·Ð´Ð½Ð°Ñ Ðппаратура ÐœÐ¾Ð´Ð¸Ñ„Ð¸Ñ†Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ +-- PA-M Modified Train Equipment +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("PA-M") +TRAIN_SYSTEM.DontAccelerateSimulation = true +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("BRight","Relay","Switch",{bass = true}) + self.Train:LoadSystem("BEsc","Relay","Switch",{bass = true}) + self.Train:LoadSystem("BF","Relay","Switch",{bass = true}) + self.Train:LoadSystem("BM","Relay","Switch",{bass = true}) + self.Train:LoadSystem("BP","Relay","Switch",{bass = true}) + + self.TriggerNames = { + "B7", + "B8", + "B9", + "BLeft", + "BRight", + "B4", + "B5", + "B6", + "BUp", + "B1", + "B2", + "B3", + "BDown", + "B0", + "BMinus", + "BPlus", + "BEnter", + "BEsc", + "BF", + "BM", + "BP", + } + self.Triggers = {} + self.Pass = "777" + self.EnteredPass = "" + self.Timer = CurTime() + self.Line = 1 + self.State = 0 + self.RealState = 99 + self.RouteNumber = "" + self.FirstStation = "" + self.LastStation = "" + self.AutoTimer = false + self.Corrections = { + [110] = 1.50, + [111] = -0.10, + [113] = -0.05, + --[114] = -0.05, + [114] = -0.25, + [117] = -0.15, + [118] = 1.40, + [121] = -0.10, + [122] = -0.10, + [123] = 3.00, + [322] = 3.00, + } + self.MenuChoosed = 1 + self.State75 = 1 +end +function TRAIN_SYSTEM:ClientInitialize() + self.STR1r = {} + self.STR2r = {} + self.STR1x = 1 + self.STR2x = 1 + self.Positions = { + [-3] = "T2", + [-2] = "T1a", + [-1] = "T1", + [0] = "0", + [1] = "X1", + [2] = "X2", + [3] = "X3", + --[4] = "RR0", + [5] = "0ХТ", + [6] = "T2", + } + self.TypesRussian = { + [0] = "ЭПВ", + [1] = "КС", + [2] = "ОД", + [3] = "КВ", + [4] = "УÐ", + [5] = "ОС", + } + self.TypesEnglish = { + [0] = "EPV", + [1] = "KS", + [2] = "OD", + [3] = "KV", + [4] = "UA", + [5] = "OS", + } + self.QuestionsRussian = { + [1] = "проверку наката", + [5] = "движение Ñ VÑ„=0", + [6] = "изменение Ñтанции оборота", + [7] = "режим фикÑации Ñтанции", + } + self.QuestionsEnglish = { + [1] = "overrun check", + [5] = "drive if Vf=0", + [6] = "change station rotation", + [7] = "lock station mode", + } + + local translate = file.Read("metrostroi_data/language/pam_en.json") + if translate then + self.i18n = util.JSONToTable(translate) + end + self.T = function (source) + if self.i18n and self.BlokEN and self.i18n[source] ~= nil then + return self.i18n[source] + else + if self.i18n and self.BlokEN then print("Need translation for \""..source.."\"") end + return source + end + end + self.BlokEN=false + self.Types=self.TypesRussian + self.Questions=self.QuestionsRussian + self.AutoTimer = false +end + +if TURBOSTROI then return end +function TRAIN_SYSTEM:Inputs() + return { "Press" } +end + +if CLIENT then + surface.CreateFont("Metrostroi_PAM30", { + font = "Arial", + size = 30, + weight = 700, + blursize = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + extended = true, + }) + surface.CreateFont("Metrostroi_PAM50", { + font = "Arial", + size = 50, + weight = 800, + blursize = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + }) + surface.CreateFont("Metrostroi_PAM60", { + font = "Arial", + size = 60, + weight = 800, + blursize = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + }) + + surface.CreateFont("Metrostroi_PAM25", { + font = "Arial", + size = 25, + weight = 400, + blursize = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + }) + surface.CreateFont("Metrostroi_PAM1_25", { + font = "Arial", + size = 25, + weight = 800, + blursize = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + }) + surface.CreateFont("Metrostroi_PAM20", { + font = "Arial", + size = 20, + weight = 400, + blursize = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + }) + surface.CreateFont("Metrostroi_PAM1_20", { + font = "Arial", + size = 20, + weight = 800, + blursize = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + }) + surface.CreateFont("Metrostroi_PAM15", { + font = "Arial", + size = 15, + weight = 800, + blursize = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + }) + surface.CreateFont("Metrostroi_PAM24", { + font = "Arial", + size = 24, + weight = 800, + blursize = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + }) + surface.CreateFont("Metrostroi_PAM22", { + font = "Arial", + size = 22, + weight = 800, + blursize = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + }) + surface.CreateFont("Metrostroi_PAM28", { + font = "Arial", + size = 28, + weight = 800, + blursize = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + }) + + surface.CreateFont("Metrostroi_PAM80", { + font = "Arial", + size = 80, + weight = 800, + blursize = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + }) + surface.CreateFont("Metrostroi_PAMBSOD", { + font = "Trebuchet", + size = 13, + weight = 800, + blursize = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + }) + + + function TRAIN_SYSTEM:PAM(train) + local Announcer = self.Train.Announcer + + if self.BlokEN ~= train:GetNW2Bool("BlokEN") then + self.BlokEN = train:GetNW2Bool("BlokEN") + if self.BlokEN then + self.Types=self.TypesEnglish + self.Questions=self.QuestionsEnglish + else + self.Types=self.TypesRussian + self.Questions=self.QuestionsRussian + end + end + + if train:GetNW2Int("PAM:State",-1) ~= -1 then + surface.SetDrawColor(Color(225,225,225,2)) + surface.DrawTexturedRect(0,0,512,427) + end + if train:GetNW2Int("PAM:State",-1) == -2 then + if not self.BSODTimer then self.BSODTimer = CurTime() end + surface.SetDrawColor(Color(0,0,172)) + surface.DrawTexturedRect(0,19,512,389) + + if CurTime() - self.BSODTimer > 1/32*1 then draw.SimpleText("A problem has been detected and PA-M has been shut down to prevent damage","Metrostroi_PAMBSOD",5, 25,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + if CurTime() - self.BSODTimer > 2/32*1 then draw.SimpleText("to your train.","Metrostroi_PAMBSOD",5, 35,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + + if CurTime() - self.BSODTimer > 4/32*1 then draw.SimpleText("The problem seems to be caused by the following file: CORE.SYS","Metrostroi_PAMBSOD",5, 55,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + + if CurTime() - self.BSODTimer > 6/32*1 then draw.SimpleText("VISITED_BY_KEK_POLICE_ERROR","Metrostroi_PAMBSOD",5, 75,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + + if CurTime() - self.BSODTimer > 7/32*1 then draw.SimpleText("If this is the first time you've seen this Stop error screen","Metrostroi_PAMBSOD",5, 95,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + if CurTime() - self.BSODTimer > 8/32*1 then draw.SimpleText("restart your computer. If this screen appears again, follow","Metrostroi_PAMBSOD",5, 105,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + if CurTime() - self.BSODTimer > 9/32*1 then draw.SimpleText("these steps:","Metrostroi_PAMBSOD",5, 115,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + + if CurTime() - self.BSODTimer > 11/32*1 then draw.SimpleText("Check to make sure any new hardware or software is properly installed.","Metrostroi_PAMBSOD",5, 135,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + if CurTime() - self.BSODTimer > 12/32*1 then draw.SimpleText("If this is a new installation, ask your hardware or software manufacturer","Metrostroi_PAMBSOD",5, 145,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + if CurTime() - self.BSODTimer > 13/32*1 then draw.SimpleText("for any Windows updates you might need.","Metrostroi_PAMBSOD",5, 155,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + + if CurTime() - self.BSODTimer > 15/32*1 then draw.SimpleText("If problems continue, disable or remove any newly installed hardware","Metrostroi_PAMBSOD",5, 175,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + if CurTime() - self.BSODTimer > 16/32*1 then draw.SimpleText("or software. Disable BIOS memory options such as caching or shadowing.","Metrostroi_PAMBSOD",5, 185,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + if CurTime() - self.BSODTimer > 17/32*1 then draw.SimpleText("If you need to use Safe Mode to remove or disable components, restart","Metrostroi_PAMBSOD",5, 195,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + if CurTime() - self.BSODTimer > 18/32*1 then draw.SimpleText("your computer, press F8 to select Advanced Startup Options, and then","Metrostroi_PAMBSOD",5, 205,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + if CurTime() - self.BSODTimer > 19/32*1 then draw.SimpleText("select Safe Mode.","Metrostroi_PAMBSOD",5, 215,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + + if CurTime() - self.BSODTimer > 21/32*1 then draw.SimpleText("Technical information:","Metrostroi_PAMBSOD",5, 235,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + + if CurTime() - self.BSODTimer > 22/32*1 then draw.SimpleText("*** STOP: 0x0000000A (0x0000000C, 0x00000002, 0x00000000, 3311BACE)","Metrostroi_PAMBSOD",5, 255,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + + + if CurTime() - self.BSODTimer > 25/32*1 then draw.SimpleText("*** autodrive.sys - Address 3311BACE base at 5721DAC7, Date Stamp 533acb25","Metrostroi_PAMBSOD",5, 285,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + + if CurTime() - self.BSODTimer > 27/32*1 then draw.SimpleText("Beginning dump of physical memory.","Metrostroi_PAMBSOD",5, 305,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + if CurTime() - self.BSODTimer > 28/32*1 then draw.SimpleText("Physical memory dump complete.","Metrostroi_PAMBSOD",5, 315,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + if CurTime() - self.BSODTimer > 29/32*1 then draw.SimpleText("Contact your system administrator or technical support group for further","Metrostroi_PAMBSOD",5, 325,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + if CurTime() - self.BSODTimer > 30/32*1 then draw.SimpleText("assistance.","Metrostroi_PAMBSOD",5, 335,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + + else + if self.BSODTimer then self.BSODTimer = nil end + end + if train:GetNW2Int("PAM:State",-1) == 0 then + if CurTime()%0.4 > 0.2 then draw.SimpleText("_","Metrostroi_PAM30",5, 0,Color(150,150,150,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_BOTTOM) end + end + if train:GetNW2Int("PAM:State",-1) == 2 then + surface.SetDrawColor(Color(0,0,255)) + surface.SetMaterial( Material("vgui/gradient_down")) + surface.DrawTexturedRect(0,0,512,427) + + surface.SetDrawColor(Color(255,255,255)) + surface.SetMaterial( Material("vgui/gradient-d")) + surface.DrawTexturedRect(0,200,512,50) + surface.SetMaterial( Material("vgui/gradient-u")) + surface.DrawTexturedRect(0,250,512,50) + + surface.SetDrawColor(Color(0,255,0)) + surface.SetMaterial( Material("vgui/gradient-d")) + surface.DrawTexturedRect(0,200,512,227) + + draw.SimpleText(self.T("ÐИИ Фабрики SENT"),"Metrostroi_PAM30",256, 100,Color(0,155,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Терминал машиниÑта (ПÐ-М)"),"Metrostroi_PAM30",256, 130,Color(0,155,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + + if train:GetNW2Int("PAM:State",-1) == 3 then + + draw.SimpleText(self.T("ÐÐЧÐЛЬÐЫЙ ТЕСТ ЗÐКОÐЧЕÐ"),"Metrostroi_PAM30",256, 30,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + Metrostroi.DrawRectOutline(10, 80, 492, 210,Color(110,172,95),3) + + surface.SetDrawColor(Color(2,2,2)) + surface.DrawRect(17,70,180,20) + draw.SimpleText(self.T("РЕЗУЛЬТÐТЫ"),"Metrostroi_PAM30",22, 80,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + + draw.SimpleText(self.T("Ðачальный теÑÑ‚"),"Metrostroi_PAM30",60, 125,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("норма"),"Metrostroi_PAM30",480, 125,Color(110,172,95),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("ÐÐ°Ñ‡Ð°Ð»ÑŒÐ½Ð°Ñ ÑƒÑтановка"),"Metrostroi_PAM30",60, 165,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("норма"),"Metrostroi_PAM30",480, 165,Color(110,172,95),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("ВерÑÐ¸Ñ ÐŸÐž БЦВМ = 0.6"),"Metrostroi_PAM30",80, 245,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + + if not train:GetNW2Bool("PAM:RR",false) then + draw.SimpleText(self.T("Ð’Ñтавьте реверÑивную рукоÑтку"),"Metrostroi_PAM30",10, 320,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + draw.SimpleText(self.T("Ð”Ð»Ñ Ð²Ð²Ð¾Ð´Ð° кода доÑтупа"),"Metrostroi_PAM30",10, 320,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawRectOutline(100, 345, 75, 30,Color(110,172,95),3 ,Color(230,230,230)) + draw.SimpleText(self.T("нажми Enter"),"Metrostroi_PAM30",10, 360,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + + end + if train:GetNW2Int("PAM:State",-1) == 4 then + --elf.Train:GetNW2Int("PAM:Pass",0) ~= -1 and string.rep("*",self.Train:GetNW2Int("PAM:Pass",0)) or "ACCESS ERROR" + Metrostroi.DrawRectOutline(10, 80, 492, 170,Color(110,172,95),3) + if train:GetNW2Int("PAM:Pass",0) == -1 then + draw.SimpleText(self.T("ОШИБКРДОСТУПÐ"),"Metrostroi_PAM30",256, 160,Color(200,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText(self.T("Введи код доÑтупа в ÑиÑтему"),"Metrostroi_PAM30",256, 130,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + if train:GetNW2Int("PAM:Pass",0) > 0 then + Metrostroi.DrawRectOutline(241 - train:GetNW2Int("PAM:Pass",0)*13, 165, 30 + train:GetNW2Int("PAM:Pass",0)*26, 40,Color(110,172,95),3,Color(230,230,230)) + draw.SimpleText(string.rep("*",train:GetNW2Int("PAM:Pass",0)),"Metrostroi_PAM80",256, 200,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + + Metrostroi.DrawRectOutline(190, 330, 135, 40,Color(110,172,95),3,Color(230,230,230) ) + draw.SimpleText(self.T("Ð”Ð»Ñ Ð²Ð²Ð¾Ð´Ð° нажми"),"Metrostroi_PAM30",256, 300,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("ENTER"),"Metrostroi_PAM30",256, 350,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + end + if train:GetNW2Int("PAM:State",-1) == 5 then + draw.SimpleText(self.T("Депо. Ðачальное меню."),"Metrostroi_PAM30",256, 30,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --elf.Train:GetNW2Int("PAM:Pass",0) ~= -1 and string.rep("*",self.Train:GetNW2Int("PAM:Pass",0)) or "ACCESS ERROR" + Metrostroi.DrawRectOutline(10, 80, 492, 333,Color(110,172,95),3) + + Metrostroi.DrawRectOL(40, 166 + (not train:GetNW2Bool("PAM:Restart") and 40 or 0), 432, 40,Color(110,172,95),3,train:GetNW2Int("PAM:State5",1) == 1 and Color(230,230,230) or Color(180,180,180)) + + draw.SimpleText(self.T("Выход на линию"),"Metrostroi_PAM30",60, 186 + (not train:GetNW2Bool("PAM:Restart") and 40 or 0),Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if train:GetNW2Bool("PAM:Restart") then + Metrostroi.DrawRectOL(40, 216, 432, 40,Color(110,172,95),3,train:GetNW2Int("PAM:State5",1) == 2 and Color(230,230,230) or Color(180,180,180)) + draw.SimpleText(self.T("ПерезапуÑк"),"Metrostroi_PAM30",60, 236,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + + end + if train:GetNW2Int("PAM:State",-1) == 6 then + local Line = self.Train:GetNW2Int("PAM:Line",0) + local FirstStation = self.Train:GetNW2Int("PAM:FirstStation",-1) + local LastStation = self.Train:GetNW2Int("PAM:LastStation",-1) + local RouteNumber = self.Train:GetNW2Int("PAM:RouteNumber",-1) + local tbl = Metrostroi.WorkingStations + draw.SimpleText(self.T("Ввод иÑходных данных"),"Metrostroi_PAM30",256, 30,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --elf.Train:GetNW2Int("PAM:Pass",0) ~= -1 and string.rep("*",self.Train:GetNW2Int("PAM:Pass",0)) or "ACCESS ERROR" + Metrostroi.DrawRectOutline(10, 50, 492, 367,Color(110,172,95),3) + + Metrostroi.DrawRectOL(40, 60, 432, 40,Color(110,172,95),3,train:GetNW2Int("PAM:State6",1) == 1 and Color(230,230,230) or Color(180,180,180)) + draw.SimpleText(self.T("ЛиниÑ"),"Metrostroi_PAM30",45, 80,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Line,"Metrostroi_PAM30",457, 80,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + + Metrostroi.DrawRectOL(40, 110, 432, 40,Color(110,172,95),3,train:GetNW2Int("PAM:State6",1) == 2 and Color(230,230,230) or Color(180,180,180)) + draw.SimpleText(self.T("Ðач. ÑÑ‚."),"Metrostroi_PAM30",45, 130,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if tbl and tbl[Line] and tbl[Line][FirstStation] and Metrostroi.AnnouncerData[FirstStation] then + draw.SimpleText(Metrostroi.AnnouncerData[FirstStation][1]:sub(1,10).." "..FirstStation,"Metrostroi_PAM30",457, 130,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + elseif FirstStation ~= -1 then + draw.SimpleText(FirstStation,"Metrostroi_PAM30",457, 130,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + end + + Metrostroi.DrawRectOL(40, 160, 432, 40,Color(110,172,95),3,train:GetNW2Int("PAM:State6",1) == 3 and Color(230,230,230) or Color(180,180,180)) + draw.SimpleText(self.T("Кон. ÑÑ‚."),"Metrostroi_PAM30",45, 180,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if tbl and tbl[Line] and tbl[Line][LastStation] and Metrostroi.AnnouncerData[LastStation] then + draw.SimpleText(Metrostroi.AnnouncerData[LastStation][1]:sub(1,10).." "..LastStation,"Metrostroi_PAM30",457, 180,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + elseif LastStation ~= -1 then + draw.SimpleText(LastStation,"Metrostroi_PAM30",457, 180,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + end + Metrostroi.DrawRectOL(40, 210, 432, 40,Color(110,172,95),3,train:GetNW2Int("PAM:State6",1) == 4 and Color(230,230,230) or Color(180,180,180)) + draw.SimpleText(self.T("Маршрут"),"Metrostroi_PAM30",45, 230,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if RouteNumber > -1 then draw.SimpleText(RouteNumber,"Metrostroi_PAM30",457, 230,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) end + + Metrostroi.DrawRectOL(40, 260, 432, 40,Color(110,172,95),3,train:GetNW2Int("PAM:State6",1) == 5 and Color(230,230,230) or Color(180,180,180)) + draw.SimpleText(self.T("Ввод данных"),"Metrostroi_PAM30",45, 280,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if train:GetNW2Bool("PAM:State6Error",false) then + Metrostroi.DrawRectOL(106, 125, 300, 150,Color(110,172,95),3,Color(180,180,180)) + draw.SimpleText(self.T("Ошибка при"),"Metrostroi_PAM30",256, 150,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("вводе данных"),"Metrostroi_PAM30",256, 180,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawRectOL(190, 220, 132, 40,Color(2,2,2),3,Color(220,220,220)) + draw.SimpleText(self.T("ENTER"),"Metrostroi_PAM30",256, 240,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + + + if train:GetNW2Int("PAM:State6",1) == 2 and tbl and tbl[Line] then + local i = 1 + for k,v in pairs(tbl[Line]) do + if Metrostroi.AnnouncerData[v] and (tostring(v):find(FirstStation) or FirstStation == -1) then + i = i + 1 + if i > 10 then break end + end + end + if i > 1 then + Metrostroi.DrawRectOL(80, 155, 391, -9 + i*22,Color(110,172,95),3,Color(230,230,230)) + local i = 1 + for k,v in pairs(tbl[Line]) do + if Metrostroi.AnnouncerData[v] and (tostring(v):find(FirstStation) or FirstStation == -1) then + if i < 10 then + draw.SimpleText(v,"Metrostroi_PAM30",86, 150+i*22,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Metrostroi.AnnouncerData[v][1],"Metrostroi_PAM30",465, 150+i*22,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + else + draw.SimpleText("...","Metrostroi_PAM30",86, 150+i*22,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("...","Metrostroi_PAM30",465, 150+i*22,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + end + + i = i + 1 + if i > 10 then break end + end + end + Metrostroi.DrawLine(140, 155, 140, 145 + i*22,Color(110,172,95),3) + end + end + if train:GetNW2Int("PAM:State6",1) == 3 and tbl and tbl[Line] then + local i = 1 + for k,v in pairs(tbl[Line]) do + if Metrostroi.AnnouncerData[v] and (tostring(v):find(LastStation) or LastStation == -1) then + i = i + 1 + if i > 9 then break end + end + end + if i > 1 then + Metrostroi.DrawRectOL(80, 205, 391, -9 + i*22,Color(110,172,95),3,Color(230,230,230)) + local i = 1 + for k,v in pairs(tbl[Line]) do + if Metrostroi.AnnouncerData[v] and (tostring(v):find(LastStation) or LastStation == -1) then + if i < 9 then + draw.SimpleText(v,"Metrostroi_PAM30",86, 200+i*22,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Metrostroi.AnnouncerData[v][1],"Metrostroi_PAM30",465, 200+i*22,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + else + draw.SimpleText("...","Metrostroi_PAM30",86, 200+i*22,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("...","Metrostroi_PAM30",465, 200+i*22,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + end + + i = i + 1 + if i > 9 then break end + end + end + Metrostroi.DrawLine(140, 205, 140, 195 + i*22,Color(110,172,95),3) + end + end + end + if train:GetNW2Int("PAM:State",-1) == 7 then + local Line = self.Train:GetNW2Int("PAM:Line",0) + local LastStation = self.Train:GetNW2Int("PAM:LastStation",-1) + local RouteNumber = self.Train:GetNW2Int("PAM:RouteNumber",-1) + local tbl = Metrostroi.WorkingStations + draw.SimpleText(self.T("ПерезапуÑк"),"Metrostroi_PAM30",110, 30,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + --elf.Train:GetNW2Int("PAM:Pass",0) ~= -1 and string.rep("*",self.Train:GetNW2Int("PAM:Pass",0)) or "ACCESS ERROR" + Metrostroi.DrawRectOutline(10, 50, 492, 367,Color(110,172,95),3) + + Metrostroi.DrawRectOL(40, 60, 432, 40,Color(110,172,95),3,train:GetNW2Int("PAM:State6",1) == 1 and Color(230,230,230) or Color(180,180,180)) + draw.SimpleText(self.T("ЛиниÑ"),"Metrostroi_PAM30",45, 80,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Line,"Metrostroi_PAM30",457, 80,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + + + Metrostroi.DrawRectOL(40, 110, 432, 40,Color(110,172,95),3,train:GetNW2Int("PAM:State6",1) == 2 and Color(230,230,230) or Color(180,180,180)) + draw.SimpleText(self.T("Кон. ÑÑ‚."),"Metrostroi_PAM30",45, 130,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if tbl[Line] and tbl[Line][LastStation] and Metrostroi.AnnouncerData[LastStation] then + draw.SimpleText(Metrostroi.AnnouncerData[LastStation][1]:sub(1,10).." "..LastStation,"Metrostroi_PAM30",457, 130,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + elseif LastStation ~= -1 then + draw.SimpleText(LastStation,"Metrostroi_PAM30",457, 130,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + end + + Metrostroi.DrawRectOL(40, 160, 432, 40,Color(110,172,95),3,train:GetNW2Int("PAM:State6",1) == 3 and Color(230,230,230) or Color(180,180,180)) + draw.SimpleText(self.T("Маршрут"),"Metrostroi_PAM30",45, 180,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if RouteNumber > -1 then draw.SimpleText(RouteNumber,"Metrostroi_PAM30",457, 180,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) end + + + Metrostroi.DrawRectOL(40, 210, 432, 40,Color(110,172,95),3,train:GetNW2Int("PAM:State6",1) == 4 and Color(230,230,230) or Color(180,180,180)) + draw.SimpleText(self.T("Ввод данных"),"Metrostroi_PAM30",45, 230,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if train:GetNW2Bool("PAM:State6Error",false) then + Metrostroi.DrawRectOL(106, 125, 300, 150,Color(110,172,95),3,Color(180,180,180)) + draw.SimpleText(self.T("Ошибка при"),"Metrostroi_PAM30",256, 150,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("вводе данных"),"Metrostroi_PAM30",256, 180,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawRectOL(190, 220, 132, 40,Color(2,2,2),3,Color(220,220,220)) + draw.SimpleText(self.T("ENTER"),"Metrostroi_PAM30",256, 240,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + + if train:GetNW2Int("PAM:State6",1) == 2 and tbl[Line] then + local i = 1 + for k,v in pairs(tbl[Line]) do + if Metrostroi.AnnouncerData[v] and (tostring(v):find(LastStation) or LastStation == -1) then + i = i + 1 + if i > 10 then break end + end + end + if i > 1 then + Metrostroi.DrawRectOL(80, 155, 391, -9 + i*22,Color(110,172,95),3,Color(230,230,230) ) + local i = 1 + for k,v in pairs(tbl[Line]) do + if Metrostroi.AnnouncerData[v] and (tostring(v):find(LastStation) or LastStation == -1) then + if i < 10 then + draw.SimpleText(v,"Metrostroi_PAM30",86, 150+i*22,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Metrostroi.AnnouncerData[v][1],"Metrostroi_PAM30",465, 150+i*22,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + else + draw.SimpleText("...","Metrostroi_PAM30",86, 150+i*22,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("...","Metrostroi_PAM30",465, 150+i*22,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + end + + i = i + 1 + if i > 10 then break end + end + end + Metrostroi.DrawLine(140, 155, 140, 145 + i*22,Color(110,172,95),3) + end + end + end + if train:GetNW2Int("PAM:State",-1) == 8 then + draw.SimpleText(self.T("Проверка ÑоÑтава"),"Metrostroi_PAM30",10, 30,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("перед выходом на линию"),"Metrostroi_PAM30",10, 70,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + --elf.Train:GetNW2Int("PAM:Pass",0) ~= -1 and string.rep("*",self.Train:GetNW2Int("PAM:Pass",0)) or "ACCESS ERROR" + Metrostroi.DrawRectOutline(10, 100, 492, 210,Color(110,172,95),3) + draw.SimpleText(self.T("Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° в рабочий режим"),"Metrostroi_PAM30",60, 170,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawRectOutline(240, 225, 100, 30,Color(110,172,95),3,Color(254,237,142)) + draw.SimpleText(self.T("нажми ENTER"),"Metrostroi_PAM30",60, 240,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Проверка ÑоÑтава разрешена"),"Metrostroi_PAM30",256, 365,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + end + if train:GetNW2Int("PAM:State",-1) == 9 then + local Line = train:GetNW2Int("PAM:Line",0) + local Path = train:GetNW2Int("PAM:Path",0) + local Station = tonumber(train:GetNW2Int("PAM:Station",0)) + local LastStation = tonumber(train:GetNW2Int("PAM:LastStation",-1)) + local S = Format("%.2f",train:GetNW2Float("PAM:Distance",0)) + local speed = math.floor(self.Train:GetPackedRatio(3)*100.0) + local spd = self.Train:GetNW2Bool("PAM:UOS", false) and 35 or self.Train:GetNW2Bool("PAM:VRD",false) and 20 or self.Train:GetPackedBool(46) and 80 or self.Train:GetPackedBool(45) and 70 or self.Train:GetPackedBool(44) and 60 or self.Train:GetPackedBool(43) and 40 or self.Train:GetPackedBool(42) and 0 or "ÐЧ" + Metrostroi.DrawRectOutline(10, 6, 100, 40,Color(110,172,95),3 ) + local date = os.date("!*t",os_time) + draw.SimpleText(Format("%02d:%02d:%02d",date.hour,date.min,date.sec),"Metrostroi_PAM25",59, 30,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Ð›Ð¸Ð½Ð¸Ñ ")..Line,"Metrostroi_PAM30",120, 30,Color(254,237,142),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if Station > 0 and Metrostroi.AnnouncerData[LastStation] then + draw.SimpleText(self.T("до ")..Metrostroi.AnnouncerData[LastStation][1],"Metrostroi_PAM25",508, 10,Color(212,212,212),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + draw.SimpleText(Metrostroi.AnnouncerData[Station] and Metrostroi.AnnouncerData[Station][1] or "unknown","Metrostroi_PAM25",508, 30,Color(212,212,212),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + elseif Metrostroi.AnnouncerData[LastStation] then + draw.SimpleText(self.T("выход на линию"),"Metrostroi_PAM25",508, 13,Color(212,212,212),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + draw.SimpleText(Metrostroi.AnnouncerData[LastStation][1],"Metrostroi_PAM25",508, 30,Color(212,212,212),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + else + draw.SimpleText(self.T("ошибка в ÑиÑтеме ПÐ"),"Metrostroi_PAM25",508, 10,Color(212,212,212),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Тек:")..Station..self.T(", Кон:")..LastStation,"Metrostroi_PAM25",508, 30,Color(212,212,212),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + end + if Path and Path > 0 then + draw.SimpleText(self.T("Путь ")..Path,"Metrostroi_PAM30",240, 30,Color(254,237,142),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + draw.SimpleText(self.T("Путь N/A"),"Metrostroi_PAM30",240, 30,Color(254,237,142),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + Metrostroi.DrawRectOutline(10, 100, 400, 20,Color(40,38,39), 2) + Metrostroi.DrawLine(10, 110, 410, 110,Color(40,38,39), 2) + + surface.SetDrawColor(Color(110,172,95)) + surface.DrawRect(11,101,398*self.Train:GetPackedRatio(3),7) + surface.SetDrawColor((spd == "ÐЧ" and 20 or spd) > 20 and Color(254,237,142) or Color(200,0,0)) + surface.DrawRect(11,111,398*(spd == "ÐЧ" and 20 or spd)/100,7) + for i = 0,10 do + if i > 0 and i < 10 then + Metrostroi.DrawLine(10 + i*40, 100, 10 + i*40, 120,Color(40,38,39), 2) + end + + if i%2 == 0 or (i == 7 and spd == 70) then + draw.SimpleText(i*10,"Metrostroi_PAM30",10 + i*40, 135,(spd == "ÐЧ" and 20 or spd) == i*10 and ((spd == "ÐЧ" and 20 or spd) > 20 and Color(254,237,142) or Color(200,0,0)) or Color(74,74,74),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + draw.SimpleText(speed,"Metrostroi_PAM50",480, 85,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(spd,"Metrostroi_PAM50",480, 120,(spd == "ÐЧ" and 20 or spd) > 20 and Color(254,237,142) or Color(200,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + draw.SimpleText(self.T("S = ")..S,"Metrostroi_PAM30",6, 401,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Рц = ")..train:GetNW2String("PAM:SName",""),"Metrostroi_PAM30",240, 401,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + + surface.SetDrawColor(Color(180,180,180)) + if not train:GetNW2Bool("PAM:RR",false) then + surface.DrawRect(6,295,490,21) + draw.SimpleText(self.T("УÑтанови реверÑивную рукоÑтку"),"Metrostroi_PAM30",10, 305,Color(20,20,20),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + surface.DrawRect(6,320,100,24) surface.DrawRect(171,320,36,24) surface.DrawRect(212,320,54,24) --surface.DrawRect(266,320,40,20) + draw.SimpleText(self.Types[train:GetNW2Int("PAM:Type",false)].."="..self.Positions[train:GetNW2Int("PAM:KV",false)],"Metrostroi_PAM30",10, 331,Color(20,20,20),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + surface.DrawRect(111,320,55,24) + if train:GetNW2Bool("PAM:VZ1",false) or train:GetNW2Bool("PAM:VZ2",false) then + draw.SimpleText(train:GetNW2Bool("PAM:VZ1",false) and (train:GetNW2Bool("PAM:VZ2",false) and self.T("Ð’1 2") or self.T("Ð’1")) or self.T("Ð’ 2"),"Metrostroi_PAM30",85 + 55/2, 331,Color(20,20,20),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + draw.SimpleText(self.T("КД"),"Metrostroi_PAM30",171+35/2, 331,train:GetPackedBool(40) and Color(20,20,20) or Color(200,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("ЛПТ"),"Metrostroi_PAM30",239, 331,train:GetPackedBool("PN") and Color(200,0,0) or Color(20,20,20),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + surface.DrawRect(6,355,100,21)-- surface.DrawRect(111,355,100,20) surface.DrawRect(215,355,50,20) + draw.SimpleText(self.T("КВ ÐРС"),"Metrostroi_PAM30",56, 365,train:GetPackedBool(48) and Color(200,0,0) or Color(20,20,20),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + Metrostroi.DrawRectOutline(370, 320, 130, 60,Color(110,172,95),3 ) + draw.SimpleText(self.T("Т. ")..Format("%02d:%02d:%02d",date.hour,date.min,date.sec),"Metrostroi_PAM20",375, 330,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Тпр. ")..(self.Train:GetPackedRatio(3)*100.0 > 0.25 and math.min(999,math.floor(S/(speed*1000/3600))) or "inf"),"Metrostroi_PAM20",375, 347.5,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + --draw.SimpleText(self.T("Ðа ="),"Metrostroi_PAM20",375, 347.5,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("ТоÑÑ‚ = ")..train:GetNW2Int("PAM:BoardTime",0),"Metrostroi_PAM20",375, 365,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + + if train:GetNW2Int("PAM:Menu",0) > 0 then + Metrostroi.DrawRectOL(50, 150, 385, 24*7+3,Color(160,160,160), 3,Color(180,180,180)) + --surface.SetDrawColor(Color(180,180,180)) + --surface.DrawRect(51,151,382,24*7-4) + surface.SetDrawColor(Color(200,200,200)) + surface.DrawRect(51,127 + train:GetNW2Int("PAM:Menu",0)*24,382,23) + for i = 1,6 do + Metrostroi.DrawLine(50,150+24*i,435,150+24*i,Color(160,160,160),3) + end + draw.SimpleText(self.T("Проверка наката"),"Metrostroi_PAM22",256, 162,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(train:GetNW2Bool("PAM:KD") and self.T("Движение Ñ ÐšÐ”") or self.T("Движение без КД"),"Metrostroi_PAM22",256, 186,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(train:GetNW2Bool("PAM:LPT") and self.T("Движение Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÐµÐ¼ ЛПТ") or self.T("Движение без ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð›ÐŸÐ¢"),"Metrostroi_PAM22",256, 210,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Движение транзитом"),"Metrostroi_PAM22",256, 234,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Движение Ñ Vд = 0"),"Metrostroi_PAM22",256, 258,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Зонный оборот"),"Metrostroi_PAM22",256, 282,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("ФикÑÐ°Ñ†Ð¸Ñ Ñтанции"),"Metrostroi_PAM22",256, 306,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --draw.SimpleText(self.T("Station mode"),"Metrostroi_PAM22",256, 330,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + if train:GetNW2Int("PAM:Ann",0) > 0 then + Metrostroi.DrawRectOutline(50, 150, 385, 24*4,Color(160,160,160), 3) + surface.SetDrawColor(Color(180,180,180)) + surface.DrawRect(51,151,382,24*4-4) + surface.SetDrawColor(Color(200,200,200)) + surface.DrawRect(51,127 + train:GetNW2Int("PAM:Ann",0)*24,382,23) + for i = 1,3 do + Metrostroi.DrawLine(50,150+24*i,435,150+24*i,Color(160,160,160),3) + end + draw.SimpleText(self.T("ПроÑьба выйти из вагонов"),"Metrostroi_PAM22",256, 162,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Заходите и выходите быÑтрее"),"Metrostroi_PAM22",256, 186,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("ОтпуÑтите двери"),"Metrostroi_PAM22",256, 210,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Поезд Ñкоро отправитÑÑ"),"Metrostroi_PAM22",256, 234,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + if train:GetNW2Int("PAM:NeedConfirm",0) > 0 then + Metrostroi.DrawRectOL(106-100, 150, 300+200, 100,Color(160,160,160),3,Color(180,180,180)) + draw.SimpleText(self.T("Подтверди ")..self.Questions[train:GetNW2Int("PAM:NeedConfirm",0)].."?","Metrostroi_PAM28",256, 175,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawRectOL(190-90, 195, 132, 40,Color(160,160,160),2,Color(230,230,230)) + draw.SimpleText(self.T("Да - Enter"),"Metrostroi_PAM30",256-90, 215,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawRectOL(190+90, 195, 132, 40,Color(160,160,160),2,Color(230,230,230)) + draw.SimpleText(self.T("Ðет - Esc"),"Metrostroi_PAM30",256+90, 215,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + if train:GetNW2Bool("PAM:Nakat") then + Metrostroi.DrawRectOL(106, 150, 300, 125,Color(20,20,20),3,Color(180,180,180)) + draw.SimpleText(self.T("Проверка наката"),"Metrostroi_PAM30",256, 165,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("РаÑÑтоÑние: "),"Metrostroi_PAM30",111, 195,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("%.2f",self.Train:GetNW2Float("PAM:Meters",0)),"Metrostroi_PAM30",300, 195,Color(254,237,142),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Ðаправление: "),"Metrostroi_PAM30",111, 225,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(self.Train:GetNW2Bool("PAM:Sign",false) and self.T("Ðазад") or self.T("Вперёд"),"Metrostroi_PAM30",300, 225,self.Train:GetNW2Bool("PAM:Sign",false) and Color(200,0,0) or Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawRectOL(190-20, 240, 132+40, 30,Color(160,160,160),2,Color(230,230,230)) + draw.SimpleText(self.T("Отмена - Esc"),"Metrostroi_PAM30",256, 255,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --draw.SimpleText(self.Questions[train:GetNW2Int("PAM:NeedConfirm",0)].."?","Metrostroi_PAM30",256, 180,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + if train:GetNW2Int("PAM:Fix",-1) > -1 or train:GetNW2Int("PAM:Zon",-1) > -1 then + local Line = train:GetNW2Int("PAM:FLine",0) + local StationAc = train:GetNW2Int("PAM:FAc",-1) + local Station = train:GetNW2Int("PAM:FStation",0) + local choosed = train:GetNW2Int("PAM:Fix",-1) > -1 and train:GetNW2Int("PAM:Fix",0) or train:GetNW2Int("PAM:Zon",0) + surface.SetDrawColor(Color(180,180,180)) + surface.DrawRect(10,151,512-20,24*6+3) + --Metrostroi.DrawRectOutline(12,153,512-24,24*8-8,Color(20,20,20), 2) + Metrostroi.DrawRectOL(12,153,512-24,24*1,Color(20,20,20), 2,choosed == 0 and Color(230,230,230) or Color(180,180,180)) + draw.SimpleText(self.T("ЛиниÑ"),"Metrostroi_PAM22",50, 164,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if Line > -1 then draw.SimpleText(Line,"Metrostroi_PAM22",350, 164,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + Metrostroi.DrawRectOL(12,153 + 24*1-1,512-24,24*1,Color(20,20,20), 2,choosed == 1 and Color(230,230,230) or Color(180,180,180)) + draw.SimpleText(self.T("Код Ñтанции"),"Metrostroi_PAM22",50, 187,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + local tbl = Metrostroi.WorkingStations + + if Station ~= -1 then + for i = 1,#tostring(Station) do + draw.SimpleText(tostring(Station)[i],"Metrostroi_PAM22",350 + (i-1)*20, 187,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + else + if tbl[Line] and tbl[Line][StationAc] and Metrostroi.AnnouncerData[StationAc] then + draw.SimpleText(Metrostroi.AnnouncerData[StationAc][1].."("..StationAc..")","Metrostroi_PAM22",350, 187,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + elseif StationAc ~= -1 then + draw.SimpleText(StationAc,"Metrostroi_PAM22",350, 187,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + Metrostroi.DrawRectOL(12,153 + 24*2-2,512-24,24*1,Color(20,20,20), 2,choosed == 2 and Color(230,230,230) or Color(180,180,180)) + draw.SimpleText(self.T("Ввод данных"),"Metrostroi_PAM22",50, 210,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawRectOL(12,153 + 24*3,512-24,24*3,Color(20,20,20), 2,Color(180,180,180)) + local i = 0 + local FLine = train:GetNW2Int("PAM:FLine",-1) + if Metrostroi.WorkingStations[FLine] then + for k,v in pairs(Metrostroi.WorkingStations[FLine]) do + if Metrostroi.AnnouncerData[v] and tostring(v):find(Station ~= -1 and Station or StationAc) then + local name = Metrostroi.AnnouncerData[v][1] + local tbl = string.Explode(" ",name) + if #tbl > 1 then + name = "" + for k,v in pairs(tbl) do + name = name..v[1] + end + end + draw.SimpleText(v .."-".. name:sub(1,2),"Metrostroi_PAM22",30 + math.floor(i/4)*110, 250-15 + i%4*15,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + i = i + 1 + end + end + end + if train:GetNW2Bool("PAM:State6Error",false) then + Metrostroi.DrawRectOL(106, 125, 300, 150,Color(20,20,20),3,Color(180,180,180)) + draw.SimpleText(self.T("Ошибка при"),"Metrostroi_PAM30",256, 150,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("вводе данных"),"Metrostroi_PAM30",256, 180,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawRectOL(190, 220, 132, 40,Color(20,20,20),3,Color(230,230,230)) + draw.SimpleText(self.T("ENTER"),"Metrostroi_PAM30",256, 240,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + + if train:GetNW2Bool("PAM:SetupError",false) then + Metrostroi.DrawRectOL(100, 125, 312, 150,Color(20,20,20),3,Color(180,180,180)) + draw.SimpleText(self.T("КритичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°"),"Metrostroi_PAM30",256, 150,Color(200,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("Ðеобходимо уточнение"),"Metrostroi_PAM30",256, 175,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(self.T("данных"),"Metrostroi_PAM30",256, 200,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawRectOL(190, 220, 132, 40,Color(20,20,20),3,Color(230,230,230)) + draw.SimpleText(self.T("ENTER"),"Metrostroi_PAM30",256, 240,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + surface.SetAlphaMultiplier(1) + end + function TRAIN_SYSTEM:ClientThink() + end +end + +function TRAIN_SYSTEM:UpdateUPO() + for k,v in pairs(self.Train.WagonList) do + if v.UPO then v.UPO:SetStations(self.Line,self.FirstStation,self.LastStation,v == self.Train) end + v:OnButtonPress("RouteNumberUpdate",self.RouteNumber) + end +end + +function TRAIN_SYSTEM:Trigger(name,nosnd) + --self.Pass = "A" + --self.State = 0 + local Announcer = self.Train.Announcer + self.Pitches = { + B1 = 166, + B2 = 155 , + B3 = 144, + B4 = 160, + B5 = 150, + B6 = 140, + B7 = 150, + B8 = 145, + B9 = 140, + BEsc = 140, + B0 = 135, + BEnter = 130, + BLeft = 125, + BDown = 120, + BRight = 115, + BF = 130, + BUp = 125, + BM = 120, + } + if not nosnd then self.Train:PlayOnce("paksd","cabin",0.75,self.Pitches[name] or 120.0) end + if self.State == 3 and name == "BEnter" then + self:SetState(4) + elseif self.State == 4 then + if name == "BEnter" then + if self.EnteredPass == "31173" then + self:SetState(-2) + elseif self.Pass ~= self.EnteredPass then + self.EnteredPass = "/" + else + self:SetState(5) + end + else + if self.EnteredPass == "/" then self.EnteredPass = "" end + local Char = tonumber(name:sub(2,2)) + if Char and #self.EnteredPass < 11 then self.EnteredPass = self.EnteredPass..tonumber(name:sub(2,2)) end + end + elseif self.State == 5 then + if name == "BDown" then + self.State5Choose = math.min(self.Train:GetNW2Bool("PAM:Restart") and 2 or 1,(self.State5Choose or 1) + 1) + end + if name == "BUp" then + self.State5Choose = math.max(1,(self.State5Choose or 1) - 1) + end + if name == "BEnter" then + if self.State5Choose == 1 then + self:SetState(6) + else + self:SetState(7) + end + end + elseif self.State == 6 then + if self.State6Error then if name == "BEnter" then self.State6Error = false end return end + if name == "BDown" then + self.State6Choose = math.min(5,(self.State6Choose or 1) + 1) + end + if name == "BUp" then + self.State6Error = false + self.State6Choose = math.max(1,(self.State6Choose or 1) - 1) + end + if name == "BEsc" then + if self.State6Choose == 2 then + self.FirstStation= self.FirstStation:sub(1,-2) + end + if self.State6Choose == 3 then + self.LastStation= self.LastStation:sub(1,-2) + end + if self.State6Choose == 4 then + self.RouteNumber= self.RouteNumber:sub(1,-2) + end + self:UpdateUPO() + end + if name == "BEnter" and self.State6Choose == 5 then + if not Metrostroi.WorkingStations[self.Line] or + not Metrostroi.WorkingStations[self.Line][tonumber(self.FirstStation)] or + not Metrostroi.AnnouncerData[tonumber(self.FirstStation)] or + not Metrostroi.WorkingStations[self.Line][tonumber(self.LastStation)] or + not Metrostroi.AnnouncerData[tonumber(self.LastStation)] or + #self.RouteNumber < 3 or self.LastStation == self.FirstStation then + self.State6Error = not self.State6Error + else + self:SetState(8) + end + end + local Char = tonumber(name:sub(2,2)) + if Char then + if self.State6Choose == 1 then + self.Line = Char + if Metrostroi.WorkingStations[self.Line] then + local Routelength = #Metrostroi.WorkingStations[self.Line] + self.FirstStation = tostring(Metrostroi.WorkingStations[self.Line][1]) + self.LastStation = tostring(Metrostroi.WorkingStations[self.Line][Routelength]) + end + end + if self.State6Choose == 2 and #self.FirstStation < 3 and (Char ~= 0 or #self.FirstStation > 0) then + self.FirstStation= self.FirstStation..tostring(Char) + end + if self.State6Choose == 3 and #self.LastStation < 3 and (Char ~= 0 or #self.LastStation > 0) then + self.LastStation= self.LastStation..tostring(Char) + end + if self.State6Choose == 4 and #self.RouteNumber < 3 then + self.RouteNumber= self.RouteNumber..tostring(Char) + end + self:UpdateUPO() + end + elseif self.State == 7 then + if self.State6Error then if name == "BEnter" then self.State6Error = false end return end + if name == "BDown" then + self.State6Choose = math.min(4,(self.State6Choose or 1) + 1) + end + if name == "BUp" then + self.State6Error = false + self.State6Choose = math.max(1,(self.State6Choose or 1) - 1) + end + if name == "BEsc" then + if self.State6Choose == 2 then + self.LastStation= self.LastStation:sub(1,-2) + end + if self.State6Choose == 3 then + self.RouteNumber= self.RouteNumber:sub(1,-2) + end + self:UpdateUPO() + end + if name == "BEnter" and self.State6Choose == 4 then + if not Metrostroi.EndStations[self.Line] or + not Metrostroi.EndStations[self.Line][tonumber(self.FirstStation)] or + not Metrostroi.AnnouncerData[tonumber(self.FirstStation)] or + not Metrostroi.EndStations[self.Line][tonumber(self.LastStation)] or + not Metrostroi.AnnouncerData[tonumber(self.LastStation)] or + #self.RouteNumber < 3 or self.LastStation == self.FirstStation then + self.State6Error = not self.State6Error + else + self:SetState(9) + for k,v in pairs(self.Train.WagonList) do + if v ~= self.Train and v["PA-M"] then + v["PA-M"]:SetState(9) + end + end + end + end + local Char = tonumber(name:sub(2,2)) + if Char then + if self.State6Choose == 1 then + self.Line = Char + if Metrostroi.WorkingStations[self.Line] then + local Routelength = #Metrostroi.WorkingStations[self.Line] + self.FirstStation = self.FirstStation ~= "" and self.FirstStation or tostring(Metrostroi.WorkingStations[self.Line][1]) + self.LastStation = tostring(Metrostroi.WorkingStations[self.Line][Routelength]) + if tonumber(self.LastStation) < tonumber(self.FirstStation) then + local temp = self.FirstStation + self.FirstStation = self.LastStation + self.LastStation = temp + end + end + end + if self.State6Choose == 2 and #self.LastStation < 3 and (Char ~= 0 or #self.LastStation > 0) then + self.LastStation= self.LastStation..tostring(Char) + end + if self.State6Choose == 3 and #self.RouteNumber < 3 then + self.RouteNumber= self.RouteNumber..tostring(Char) + end + self:UpdateUPO() + end + elseif self.State == 8 then + if name == "BEnter" and self.Check == false then + self:SetState(9) + end + elseif self.State == 9 then + if self.Train:GetNW2Bool("PAM:SetupError",false) then + if name == "BEnter" then self:SetState(5) end + return + end + if name == "BF" then + if self.MenuChoosed == 0 and self.AnnChoosed == 0 and not self.Zon and not self.Fix then + self.MenuChoosed = 1 + end + end + if name == "BDown" then + if self.MenuChoosed ~= 0 and (not self.NeedConfirm or self.NeedConfirm == 0) then + self.MenuChoosed = math.min(7,self.MenuChoosed + 1) + + if self.MenuChoosed == 5 and (self.VRD or not (self.Train.ALS_ARS.Signal0 and not self.Train.ALS_ARS.RealNoFreq and not self.Train.ALS_ARS.Signal40 and not self.Train.ALS_ARS.Signal60 and not self.Train.ALS_ARS.Signal70 and not self.Train.ALS_ARS.Signal80)) then + self:Trigger("BDown",true) + elseif self.MenuChoosed == 6 then + if self.LastStation == tostring(self.Train.UPO.Station) then + self:Trigger("BDown",true) + end + elseif self.MenuChoosed == 7 then + if self.FirstStation == tostring(self.Train.UPO.Station) then + self.MenuChoosed = 4 + end + end + end + if self.AnnChoosed ~= 0 and not self.Zon and not self.Fix then + self.AnnChoosed = math.min(4,self.AnnChoosed + 1) + end + end + if name == "BUp" then + if self.MenuChoosed ~= 0 and (not self.NeedConfirm or self.NeedConfirm == 0) then + self.MenuChoosed = math.max(1,self.MenuChoosed - 1) + if self.MenuChoosed == 5 and (self.VRD or not (self.Train.ALS_ARS.Signal0 and not self.Train.ALS_ARS.RealNoFreq and not self.Train.ALS_ARS.Signal40 and not self.Train.ALS_ARS.Signal60 and not self.Train.ALS_ARS.Signal70 and not self.Train.ALS_ARS.Signal80)) then + self:Trigger("BUp",true) + end + end + if self.MenuChoosed == 0 and self.AnnChoosed == 0 then + self.AnnChoosed = 1 + end + if self.AnnChoosed ~= 0 then + self.AnnChoosed = math.max(1,self.AnnChoosed - 1) + end + end + if name == "BEsc" then + --if self.MenuChoosed ~= 0 then + if (not self.NeedConfirm or self.NeedConfirm == 0) then self.MenuChoosed = 0 end + self.AnnChoosed = 0 + --end + end + if (self.NeedConfirm and self.NeedConfirm > 0) then + if name == "BEnter" then + if self.NeedConfirm == 1 and self.Train.Speed < 0.5 then + self.Nakat = true + end + if (self.Train.ALS_ARS.Signal0 and not self.Train.ALS_ARS.RealNoFreq and not self.Train.ALS_ARS.Signal40 and not self.Train.ALS_ARS.Signal60 and not self.Train.ALS_ARS.Signal70 and not self.Train.ALS_ARS.Signal80) then + self.VRD = true + end + if self.NeedConfirm == 6 then + self.Zon = 1 + self.FStation = "" + self.FLine = self.Line + self.State6Error = false + end + if self.NeedConfirm == 7 then + self.Fix = 0 + self.FStation = "" + self.FLine = nil + self.State6Error = false + end + self.NeedConfirm = 0 + self.MenuChoosed = 0 + end + if name == "BEsc" then + self.NeedConfirm = 0 + end + end + if self.MenuChoosed ~= 0 and not self.Nakat and not self.Fix and not self.Zon then + if name == "BEnter" and (not self.NeedConfirm or self.NeedConfirm == 0) then + if self.MenuChoosed == 1 and self.Train.Speed < 0.5 then + self.NeedConfirm = 1 + elseif self.MenuChoosed == 2 then + self.KD = not self.KD + elseif self.MenuChoosed == 3 then + self.LPT = not self.LPT + elseif self.MenuChoosed == 4 then + self.Transit = not self.Transit + self.AutodriveWorking = false + elseif self.MenuChoosed == 5 then + self.NeedConfirm = 5 + elseif self.MenuChoosed == 6 then + self.NeedConfirm = 6 + elseif self.MenuChoosed == 7 then + self.NeedConfirm = 7 + elseif self.MenuChoosed == 8 and not self.Arrived then + --self.Arrived = true + --if self.Train.R_UPO.Value > 0 then +-- local tbl = Metrostroi.WorkingStations[self.Line] + --self.UPO:PlayArriving(self.Train.UPO.Station,tbl[tbl[self.Train.UPO.Station] + (self.Train.UPO.Path == 1 and 1 or -1)],self.Train.UPO.Path) + --end + end + if self.NeedConfirm == 0 then self.MenuChoosed = 0 end + --if self.State > 6 and self.State ~= 76 and self.State ~= 77 then self.State = 7 end + end + end + if self.AnnChoosed ~= 0 and not self.Nakat and not self.Fix and not self.Zon then + if name == "BEnter" then + if self.Train.R_UPO.Value > 0 then self.Train.UPO:II(self.AnnChoosed) end + self.AnnChoosed = 0 + end + local Char = tonumber(name:sub(2,2)) + if Char and Char > 0 and Char < 5 and self.Train.R_UPO.Value > 0 then + self.Train.UPO:II(Char) + self.AnnChoosed = 0 + end + end + + if name == "BEsc" and self.Nakat then + self.Nakat = false + if self.Train:ReadTrainWire(1) < 1 then + self.Train.ALS_ARS.Nakat = false + end + end + if self.Fix then + if self.State6Error then if name == "BEnter" then self.State6Error = false end return end + if name == "BEsc" then + if self.Fix == 1 and self.EnteredStation then + self.EnteredStation = nil + end + end + if name == "BEnter" and self.Fix == 2 then + if not Metrostroi.WorkingStations[self.FLine] or + not Metrostroi.WorkingStations[self.FLine][tonumber(self.FStation)] or + not Metrostroi.AnnouncerData[tonumber(self.FStation)] or tonumber(self.FStation) == self.FirstStation then + self.State6Error = not self.State6Error + else + self.FirstStation = self.FStation + self.Line = self.FLine + self.Fix = nil + self:UpdateUPO() + end + end + if name == "BEnter" and self.Fix == 1 then + self.FStation = self.EnteredStation + self.EnteredStation = nil + end + if name == "BDown" and not self.EnteredStation then + self.Fix = math.min(2,self.Fix + 1) + end + if name == "BUp" and not self.EnteredStation then + self.State6Error = false + self.Fix = math.max(0,self.Fix - 1) + end + local Char = tonumber(name:sub(2,2)) + if Char then + if self.Fix == 0 then + self.FLine = Char + end + if self.Fix == 1 and not self.EnteredStation then + self.EnteredStation = "" + end + if self.Fix == 1 and #self.EnteredStation < 3 and (Char ~= 0 or #self.EnteredStation > 0) then + self.EnteredStation= self.EnteredStation..tostring(Char) + end + end + end + if self.Zon then + if self.State6Error then if name == "BEnter" then self.State6Error = false end return end + if name == "BEsc" then + if self.Zon == 1 and self.EnteredStation then + self.EnteredStation = nil + end + end + if name == "BEnter" and self.Zon == 2 then + if not Metrostroi.WorkingStations[self.FLine] or + not Metrostroi.WorkingStations[self.FLine][tonumber(self.FStation)] or + not Metrostroi.AnnouncerData[tonumber(self.FStation)] or tonumber(self.FStation) == self.LastStation then + self.State6Error = not self.State6Error + else + self.Zon = nil + self.LastStation = self.FStation + self:UpdateUPO() + end + end + if name == "BEnter" and self.Zon == 1 then + self.FStation = self.EnteredStation + self.EnteredStation = nil + end + if name == "BDown" and not self.EnteredStation then + self.Zon = math.min(2,self.Zon + 1) + end + if name == "BUp" and not self.EnteredStation then + self.State6Error = false + self.Zon = math.max(1,self.Zon - 1) + end + local Char = tonumber(name:sub(2,2)) + if Char then + if self.Zon == 0 then + self.FLine = Char + end + if self.Zon == 1 and not self.EnteredStation then + self.EnteredStation = "" + end + if self.Zon == 1 and #self.EnteredStation < 3 and (Char ~= 0 or #self.EnteredStation > 0) then + self.EnteredStation= self.EnteredStation..tostring(Char) + end + end + end + end +end +function TRAIN_SYSTEM:GetTimer(val) + return self.TimerMod and (CurTime() - self.Timer) > val +end +function TRAIN_SYSTEM:SetTimer(mod) + if mod then + if self.TimerMod == mod then return end + self.TimerMod = mod + else + self.TimerMod = nil + end + self.Timer = CurTime() +end + +function TRAIN_SYSTEM:SetState(state,add,state9) + local Train = self.Train + local ARS = Train.ALS_ARS + local Announcer = Train.Announcer + if state and self.State ~= state then + self.State = state + if state == 1 then + self.NextState = add + end + self:SetTimer() + elseif not state then + state = self.NextState + self.State = self.NextState + else return end + if state == 4 then + self.EnteredPass = "" + end + if state == 5 then + self.State5Choose = 1 + end + if state == 6 then + self.State6Choose = 1 + self.Line = self.Train.UPO.Line or 1 + if Metrostroi.WorkingStations[self.Line] then + local Routelength = #Metrostroi.WorkingStations[self.Line] + self.FirstStation = self.Train.UPO.FirstStation or self.FirstStation--tostring(self.Train.UPO.Path == 2 and Metrostroi.WorkingStations[self.Line][Routelength] or Metrostroi.WorkingStations[self.Line][1]) + self.LastStation = self.Train.UPO.LastStation or self.LastStation--tostring(self.Train.UPO.Path == 1 and Metrostroi.WorkingStations[self.Line][Routelength] or Metrostroi.WorkingStations[self.Line][1]) + else + --self.FirstStation = "111" + --self.LastStation = "123" + end + self:UpdateUPO() + self.FirstStation = "" + self.LastStation = "" + self.State6Error = false + end + if state == 7 then + self.State6Choose = 1 + self.State6Error = false + end + if state == 8 then + self.Check = nil + ARS:TriggerInput("PA-Ring",1) + for k,v in pairs(self.Train.WagonList) do + v.ENDis:TriggerInput("Set",1) + end + if not state9 then + for k,v in pairs(self.Train.WagonList) do + if v ~= self.Train and v["PA-M"] then + v["PA-M"]:SetState(8,nil,true) + end + end + end + else + for k,v in pairs(self.Train.WagonList) do + v.ENDis:TriggerInput("Set",0) + if v.ALS_ARS then v.ALS_ARS:TriggerInput("PA-Ring",0) end + end + end + if state == 9 then + if not state9 then + for k,v in pairs(self.Train.WagonList) do + if v ~= self.Train and v["PA-M"] then + v["PA-M"]:SetState(9,nil,true) + end + end + end + self.AnnChoosed = 0 + self.NeedConfirm = 0 + self.MenuChoosed = 0 + self.Fix = nil + self.Zon = nil + Train.UPO.BoardTime = nil + self.ODZ = nil + end + if state == 0 then + self.Train:PlayOnce("paksd","cabin",0.75,200.0) + self.Train.ALS_ARS:TriggerInput("PA-Ring",0) + self.EnteredPass = "" + end + if state == 3 then + if IsValid(self.Train.DriverSeat) then + self.Train.DriverSeat:EmitSound("subway_announcer/00_05.mp3", 73, 100) + end + end +end +function TRAIN_SYSTEM:Think(dT) + if self.Train.Blok ~= 3 then self:SetState(-1) return end + --print(self.Train.Owner) + local Train = self.Train + local ARS = Train.ALS_ARS + local Announcer = Train.Announcer +-- self.Train.UPO.Station = self.Train:ReadCell(49160) > 0 and self.Train:ReadCell(49160) or self.Train:ReadCell(49161) +-- self.Train.UPO.Path = Metrostroi.PathConverter[self.Train:ReadCell(65510)] or 0 +-- self.Train.UPO.Distance = math.min(9999,self.Train:ReadCell(49165) + (Train.Autodrive.Corrections[self.Train.UPO.Station] or 0)) + if Train.VAU.Value < 0.5 or Train.Panel["V1"] < 0.5 then self:SetState(-1) end + if Train.VAU.Value > 0.5 and self.State == -1 and Train.Panel["V1"] > 0.5 then self:SetState(0) end + if Train.VB.Value > 0.5 and Train.Battery.Voltage > 55 and self.State > -1 then + for k,v in pairs(self.TriggerNames) do + if Train[v] and (Train[v].Value > 0.5) ~= self.Triggers[v] then + if Train[v].Value > 0.5 then + self:Trigger(v) + end + --print(v,self.Train[v].Value > 0.5) + self.Triggers[v] = Train[v].Value > 0.5 + end + end + end + if self.Train.KV.ReverserPosition == 0 and self.State > 3 and self.State < 8 and self.State ~= -9 then self:SetState(3) end + if self.State == 0 and self.RealState ~= 0 then + elseif self.State == 0 then + self:SetTimer(0.5) + if self:GetTimer(4) then + self:SetState(1,2) + end + elseif self.State == 1 then + self:SetTimer(1) + if self:GetTimer(0.4) then + self:SetState() + end + elseif self.State == 2 then + self:SetTimer(0.5) + if self:GetTimer(6) then + self:SetState(1,3) + end + elseif self.State == 8 then + --print(ARS.KVT) + if ARS.KVT and self.Check == nil then + self.Check = true + self:SetTimer(4) + end + if not ARS.KVT and self.Check ~= false then + self.Check = nil + self:SetTimer() + end + if ARS.KVT and self:GetTimer(1) then + self.Check = false + ARS:TriggerInput("PA-Ring",0) + for k,v in pairs(self.Train.WagonList) do + if v ~= self.Train and v.ALS_ARS then + v.ALS_ARS:TriggerInput("PA-Ring",0) + end + end + self:SetTimer() + end + elseif self.State == 9 then + if (self.Train.UPO:GetSTNum(self.LastStation) > self.Train.UPO:GetSTNum(self.FirstStation) and self.Train.UPO.Path == 2) or (self.Train.UPO:GetSTNum(self.FirstStation) > self.Train.UPO:GetSTNum(self.LastStation) and self.Train.UPO.Path == 1) then + local old = self.LastStation + self.LastStation = self.FirstStation + self.FirstStation = old + end + if self.VRD and (not ARS.Signal0 or ARS.Signal0 and (ARS.Signal40 or ARS.Signal60 or ARS.Signal70 or ARS.Signal80)) then self.VRD = false end + self.State9 = (Train.UPO:End(self.Train.UPO.Station,self.Train.UPO.Path,true) or Train.UPO:GetSTNum(self.LastStation) > Train.UPO:GetSTNum(self.Train.UPO.Station) and self.Train.UPO.Path == 2 or Train.UPO:GetSTNum(self.Train.UPO.Station) < Train.UPO:GetSTNum(self.FirstStation) and self.Train.UPO.Path == 1) and 0 or 1--self.Arrived ~= nil and 1 or 2 + if self.State9 ~= 0 and self.Train.KV.ReverserPosition ~= 0 then + if not self.Trainsit then + if self.Train.UPO.Distance < 100 and self.Train.Speed > 55 then + self.StopTrain = true + end + if self.Train.UPO.Distance < 10 and self.Train.Speed > 20 then + self.StopTrain = true + end + if self.Train.Speed < 0.5 and self.StopTrain then + self.StopTrain = false + end + if self.StopTrain then + end + elseif self.StopTrain then + self.StopTrain = false + end + + if self.RealState == 8 and not self.Transit then + if self.Train.UPO.Distance < 75 and not self.Arrived and Metrostroi.WorkingStations[self.Line][self.Train.UPO.Station] and ARS.Speed <= 1 then + self.Arrived = true + end + end + --[[ + if not self.Transit and 45 < self.Train.UPO.Distance and self.Train.UPO.Distance < 75 and not self.Arrived and Metrostroi.WorkingStations[self.Line][self.Train.UPO.Station] then + self.Arrived = true + if self.Train.R_UPO.Value > 0 then + local tbl = Metrostroi.WorkingStations[self.Line] + self.UPO:PlayArriving(self.Train.UPO.Station,tbl[tbl[self.Train.UPO.Station] + (self.Train.UPO.Path == 1 and 1 or -1)],self.Train.UPO.Path) + end + end + ]] + if self.Transit then self.Arrived = nil end + if self.Train.UPO.Distance > 75 then + self.Arrived = nil + else + --if self.Train.Panel.SD < 0.5 then self.Arrived = true end + end + --if (self.Ring == nil or self.Ring == 0) and self.Train.Panel.SD < 0.5 then + --self.Ring = false + --end + if self.Arrived then + if Train.UPO.BoardTime and math.floor((Train.UPO.BoardTime or CurTime()) - CurTime()) < (self.Train.Horlift and 15 or 8) and self.Arrived then + self.Arrived = false + end + end + if (self.Train:ReadCell(1) > 0 or ARS.Speed > 1) and self.Arrived == false then self.Arrived = nil end + end + if self.Nakat then + if not self.Meters then self.Meters = 0 end + self.Meters = self.Meters + ARS.Speed*self.Train.SpeedSign/3600*1000*dT + if math.abs(self.Meters) > 2.5 then + self.Nakat = false + if self.Train:ReadTrainWire(1) < 1 then + ARS.Nakat = self.Meters < 0 + end + end + else + self.Meters = nil + end + end + if self.State ~= self.RealState then + self.RealState = self.State + self.TimeOverride = true + end + + self.Time = self.Time or CurTime() + if (CurTime() - self.Time) > 0.1 or self.TimeOverride then + self.TimeOverride = nil + --print(1) + self.Time = CurTime() + Train:SetNW2Int("PAM:State",self.State) + if self.State == 3 then + Train:SetNW2Bool("PAM:RR",self.Train.KV.ReverserPosition ~= 0) + elseif self.State == 4 then + Train:SetNW2Int("PAM:Pass",self.EnteredPass ~= "/" and #self.EnteredPass or -1) + elseif self.State == 5 then + Train:SetNW2Bool("PAM:Restart",self.FirstStation ~= "" and self.LastStation ~= "") + Train:SetNW2Int("PAM:State5",self.State5Choose) + elseif self.State == 6 then + Train:SetNW2Int("PAM:State6",self.State6Choose) + Train:SetNW2Bool("PAM:State6Error",self.State6Error) + Train:SetNW2Int("PAM:LastStation",tonumber(self.LastStation) or -1) + Train:SetNW2Int("PAM:FirstStation",tonumber(self.FirstStation) or -1) + Train:SetNW2Int("PAM:Line",self.Line) + Train:SetNW2Int("PAM:RouteNumber",tonumber(self.RouteNumber ~= "" and self.RouteNumber or -1)) + elseif self.State == 7 then + Train:SetNW2Int("PAM:State6",self.State6Choose) + Train:SetNW2Bool("PAM:State6Error",self.State6Error) + Train:SetNW2Int("PAM:LastStation",tonumber(self.LastStation) or -1) + Train:SetNW2Int("PAM:Line",self.Line) + Train:SetNW2Int("PAM:RouteNumber",tonumber(self.RouteNumber ~= "" and self.RouteNumber or -1)) + --Train:SetNW2Int("PAM:LastStation",tonumber(self.LastStation) or -1) + --Train:SetNW2Int("PAM:Line",self.Line) + --Train:SetNW2Int("PAM:RouteNumber",tonumber(self.RouteNumber ~= "" and self.RouteNumber or -1)) + elseif self.State == 9 then + Train:SetNW2Int("PAM:Line",self.Line) + Train:SetNW2Int("PAM:Path",self.Train.UPO.Path) + Train:SetNW2Int("PAM:Station",self.State9 == 0 and 0 or self.Train.UPO.Station) + Train:SetNW2Int("PAM:LastStation",self.LastStation) + Train:SetNW2Float("PAM:Distance",math.Round(self.Train.UPO.Distance,2)) + Train:SetNW2String("PAM:SName",ARS.Signal and ARS.Signal.RealName or "ERR") + Train:SetNW2Bool("PAM:RR",self.Train.KV.ReverserPosition ~= 0) + Train:SetNW2Int("PAM:Type",(self.Train.Pneumatic.EmergencyValveEPK and 0 or self.Train.ALS_ARS.UAVAContacts and 4 or self.UOS and 5 or self.VRD and 2 or (self.Train.Autodrive.AutodriveEnabled or self.Train.UPO.StationAutodrive) and 1 or 3)) + Train:SetNW2Int("PAM:KV",self.Train.Autodrive.AutodriveEnabled and (self.Rotating and -3 or self.Brake and -1 or self.Accelerate and 3 or 0) or (ARS["33G"] > 0 or (self.UOS and (ARS["8"] + (1-self.Train.RPB.Value)) > 0)) and 5 or self.Train.KV.RealControllerPosition) + Train:SetNW2Bool("PAM:VZ1", self.Train:ReadTrainWire(29) > 0) + Train:SetNW2Bool("PAM:VZ2", self.Train.PneumaticNo2.Value > 0) + Train:SetNW2Int("PAM:Menu", self.MenuChoosed or 0) + Train:SetNW2Int("PAM:Ann",self.AnnChoosed) + Train:SetNW2Int("PAM:NeedConfirm",self.NeedConfirm) + Train:SetNW2Int("PAM:BoardTime",math.floor((Train.UPO.BoardTime or CurTime()) - CurTime())) + Train:SetNW2Bool("PAM:KD",self.KD) + Train:SetNW2Bool("PAM:LPT",self.LPT) + Train:SetNW2Bool("PAM:SetupError",Metrostroi.AnnouncerData[tonumber(self.FirstStation)] == nil or Metrostroi.AnnouncerData[tonumber(self.LastStation)] == nil) + self.Train:SetNW2Bool("PAM:Nakat",self.Nakat) + if self.Nakat then + self.Train:SetNW2Float("PAM:Meters",math.Round(math.abs(self.Meters or 0),2)) + self.Train:SetNW2Bool("PAM:Sign",ARS.Speed > 0.5 and self.Train.SpeedSign < 0) + end + self.Train:SetNW2Int("PAM:Fix",self.Fix or -1) + self.Train:SetNW2Int("PAM:Zon",self.Zon or -1) + if self.Fix or self.Zon then + Train:SetNW2Int("PAM:FLine",self.FLine or -1) + Train:SetNW2Int("PAM:FStation",tonumber(self.EnteredStation) or -1) + Train:SetNW2Int("PAM:FAc",tonumber(self.FStation) or -1) + Train:SetNW2Bool("PAM:State6Error",self.State6Error) + end + + else + end + end + if Train.VZP.Value > 0.5 then + Train.Autodrive:Enable() + end + self.RouteNumber = string.gsub(self.Train.RouteNumber or "","^(0+)","") + if self.State > 7 then + self.Line = self.Train.UPO.Line + self.FirstStation = tostring(self.Train.UPO.FirstStation or "") + self.LastStation = tostring(self.Train.UPO.LastStation or "") + end +end diff --git a/lua/metrostroi/systems/_obsolete/sys_pmp.lua b/lua/metrostroi/systems/_obsolete/sys_pmp.lua new file mode 100644 index 0000000..12d1e21 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_pmp.lua @@ -0,0 +1,92 @@ +-------------------------------------------------------------------------------- +-- Пульт Ð´Ð»Ñ Ð¼Ð°Ð½Ð²ÐµÑ€Ð¾Ð²Ñ‹Ñ… передвижений вагонов +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("PMP") + +function TRAIN_SYSTEM:Initialize() + self.Position = 0 + self.RealPosition = 0 + + self.Matrix = { + {"3", "4" }, + { 1, 0, 1 }, + {"9", "10"}, + { 1, 0, 1 }, + {"5", "6" }, + { 1, 0, 0 }, + {"7", "8" }, + { 0, 0, 1 }, + } + + -- Initialize contacts values + for i=1,#self.Matrix/2 do + local v = self.Matrix[i*2-1] + self[v[1].."-"..v[2]] = 0 + end +end + +function TRAIN_SYSTEM:Inputs() + return { "Set", "Up", "Down" } +end + +function TRAIN_SYSTEM:Outputs() + return { "Position" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + -- Change position + if name == "Set" then + if (self.Enabled ~= 0) and (math.floor(value) ~= self.Position) then + local prevPosition = self.Position + self.Position = math.floor(value) + + -- Limit motion + if self.Position > 1 then self.Position = 1 end + if self.Position < -1 then self.Position = -1 end + + -- Play sounds + if prevPosition < self.Position then + local P,R = prevPosition,self.Position + if P == -1 and R == 0 then self.Train:PlayOnce("kru_0_1", "cabin",0.9) end + if P == 0 and R == 1 then self.Train:PlayOnce("kru_1_2", "cabin",0.9) end + end + + if prevPosition > self.Position then + local P,R = prevPosition,self.Position + if P == 0 and R == -1 then self.Train:PlayOnce("kru_1_0", "cabin",0.9) end + if P == 1 and R == 0 then self.Train:PlayOnce("kru_2_1", "cabin",0.9) end + end + end + elseif (name == "Up") and (value > 0.5) then + self:TriggerInput("Set",self.Position+1) + elseif (name == "Down") and (value > 0.5) then + self:TriggerInput("Set",self.Position-1) + end +end + + +function TRAIN_SYSTEM:Think() + local Train = self.Train + if (self.Enabled == 0) and (self.Position ~= 0) then + self.Position = 0 + self.Train:PlayOnce("kv1","cabin",0.6) + end + + -- Move controller + self.Timer = self.Timer or CurTime() + if ((CurTime() - self.Timer > 0.15) and (self.Position > self.RealPosition)) then + self.Timer = CurTime() + self.RealPosition = self.RealPosition + 1 + end + if ((CurTime() - self.Timer > 0.15) and (self.Position < self.RealPosition)) then + self.Timer = CurTime() + self.RealPosition = self.RealPosition - 1 + end + + -- Update contacts + for i=1,#self.Matrix/2 do + local v = self.Matrix[i*2-1] + local d = self.Matrix[i*2] + self[v[1].."-"..v[2]] = d[self.RealPosition+2] + end +end diff --git a/lua/metrostroi/systems/_obsolete/sys_puav.lu b/lua/metrostroi/systems/_obsolete/sys_puav.lu new file mode 100644 index 0000000..8764d3f --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_puav.lu @@ -0,0 +1,490 @@ +-------------------------------------------------------------------------------- +-- ПУÐÐ’ - Поездное УÑтройÑтво ÐÐ²Ñ‚Ð¾Ð’ÐµÐ´ÐµÐ½Ð¸Ñ +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("PUAV") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("IPAV") + + self.Train:LoadSystem("KH","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("VAV","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("KSZD","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("VZP","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("VAU","Relay","Switch",{ bass = true, normally_closed = true }) + self.Train:LoadSystem("RC2","Relay","Switch",{ bass = true, normally_closed = true }) + + self.Train:LoadSystem("P1","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("P2","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("P3","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("P4","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("P5","Relay","Switch",{ bass = true }) + + self.Selected = true + + + self.LK16 = false + self.LAVT = false + self.LOS = false + self.ARS = false + self.LKI1 = false + self.LKI2 = false + + self.LRSTimer = false + + self["2"] = 0 --Вращение РК + self["3"] = 0 --Ход 3 + self["8"] = 0 --Замещение ÑлектричеÑкого Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ + self["16"] = 0 --Закрытие дверей + self["17"] = 0 -- Разрешение воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€ÐµÐ»Ðµ перегрузки + self["19"] = 0 -- Разрешение Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÑлектричеÑкого Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ + self["20"] = 0 -- Включение двигателей + self["20X"] = 0 -- Разрешение Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹ в ходовые режимы + self["025"] = 0 -- Разрешение ручного Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ + self["25"] = 0 -- Ручное торможение + self["31"] = 0 --Разрешение Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð»ÐµÐ²Ñ‹Ñ… дверей + self["31O"] = 0 --Открытие левых дверей + self["32"] = 0 --Разрешение Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð¿Ñ€Ð°Ð²Ñ‹Ñ… дверей + self["32O"] = 0 --Открытие правых дверей + self["33"] = 0 --Включение ходового режима + self["033"] = 0 --Разрешение Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ…Ð¾Ð´Ð¾Ð²Ð¾Ð³Ð¾ режима + self["33G"] = 0 --Включение режима Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ + self["39"] = 0 --Включение Ð²ÐµÐ½Ñ‚Ð¸Ð»Ñ Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ â„– 2 + self["48"] = 0 --Включение Ð²ÐµÐ½Ñ‚Ð¸Ð»Ñ Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ â„– 1 + + + self.KRH = 0 + self.KRT = 0 + self.KGR = 0 + self.KRR1 = 0 + self.KRR2 = 0 + self.KRR3 = 0 + self.KD = 0 + self.KPRK = 0 + self.KOAT = 0 + self.KET = 0 + self.KSOT = 0 + self.KDL = 0 + self.KDP = 0 + self.RK1 = 0 + self.KRU = 0 + + self.KVARS = 0 + self.KTARS = 0 + self.VAB = 0 + self.KH3 = 0 + self.VZP = 0 + self.KSZD = 0 + self.KB = 0 + self.RD = 0 + + + self.Ring = false + + self.State = -1 + + self.Stopped = false + self.DoorsOpen = false + self.Drive = 0 +end + + +if TURBOSTROI then return end +function TRAIN_SYSTEM:Inputs() + return { "IPAVCommand" } +end +function TRAIN_SYSTEM:Outputs() + return { "31","32","31C","32C","16C"} +end + +if CLIENT then + local function createFont(name,font,size) + surface.CreateFont("Metrostroi_"..name, { + font = font, + size = size, + weight = 500, + blursize = false, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + scanlines = false, + }) + end + createFont("PUAV","Liquid Crystal Display",35,400) + function TRAIN_SYSTEM:ClientThink() + --RunConsoleCommand("say","президент!!!") + if not self.DrawTimer then + render.PushRenderTarget(self.Train.PUAV,0,0,512, 128) + render.Clear(0, 0, 0, 0) + render.PopRenderTarget() + end + if self.DrawTimer and CurTime()-self.DrawTimer < 0.1 then return end + self.DrawTimer = CurTime() + render.PushRenderTarget(self.Train.PUAV,0,0,512, 128) + --render.Clear(0, 0, 0, 0) + cam.Start2D() + self:PUAVScreen(self.Train) + cam.End2D() + render.PopRenderTarget() + end + function TRAIN_SYSTEM:PrintText(x,y,text,inverse) + local str = {utf8.codepoint(text,1,-1)} + for i=1,#str do + local char = utf8.char(str[i]) + if inverse then + draw.SimpleText(string.char(0x7f),"Metrostroi_PUAV",(x+i)*27+15,y*50+30,Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(char,"Metrostroi_PUAV",(x+i)*27+15,y*50+30,Color(140,190,0,150),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText(char,"Metrostroi_PUAV",(x+i)*27+15,y*50+30,Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + end + + function TRAIN_SYSTEM:PUAVScreen(Train) + local State = Train:GetNW2Int("PUAV:State",-1) + if State ~= 0 then + surface.SetDrawColor(140*0.7,190*0.7,0,self.Warm and 130 or 255) + self.Warm = true + else + surface.SetDrawColor(20,50,0,230) + self.Warm = false + end + surface.DrawRect(0,0,512,128) + if State == 0 then + return + end + for i=1,6 do + self:PrintText(-2+i*2,0,Format("%02d",i)) + self:PrintText(-2+i*2,1,Format("%02d",math.max(0,Train:GetNW2Int("PUAV:RK"..i,0)))) + end + --self:PrintText(0,0,"010101010101") + --self:PrintText(1,1,Format("РК:%02d",Train:GetNW2Int("PUAV:RK",0))) + --self:PrintText(1,1,"(точнее криво)") + end +end + +function TRAIN_SYSTEM:Trigger(name,nosnd) +end + +function TRAIN_SYSTEM:SetAVPosition(pos) + if self.Train.KV.AutodrivePosition ~= pos then + self.Train.KV:TriggerInput("SetAutodrive",pos) + end +end + +local IgnoreDoors = false +function TRAIN_SYSTEM:Think(dT) + if not self.Selected then return end + + local Train = self.Train + local ALS = Train.ALSCoil + local ARS = Train.ALS_ARS + local EnableARS = ARS.EnableARS + local UOS = not EnableARS and Train.RC1.Value == 0 + local LeftCoil,RightCoil = Train.LeftAutoCoil,Train.RightAutoCoil + + local power = Train.VB.Value > 0.5 and Train.VAU.Value > 0.5 and Train.Panel["V1"] > 0.5 + local KRUEnabled = Train.KRU and Train.KRU["14/1-B3"] > 0 + local RVForward = power and (Train.KV["D4-15"] > 0 or KRUEnabled) + local KVT = Train.PB.Value > 0 or Train.KVT and Train.KVT.Value > 0 + + local speed = math.Round(ALS.Speed or 0,1) + + + if not power and self.State > -1 then self.State = -1 self.State2Timer = nil end + if not RVForward and self.State > 0 then self.State = 0 end + if RVForward and self.State == 0 then self.State = 2 end + if RVForward and self.State == -1 and not self.State2Timer then self.State = 1 self.State2Timer = CurTime() end + if RVForward and self.State == 1 and self.State2Timer and CurTime()-self.State2Timer > 2 then self.State = 2 self.State2Timer = nil end + if self.State > 0 then + self.NoFreq = ALS.NoFreq + self.F1 = ALS.F1*(1-self.NoFreq) + self.F2 = ALS.F2*(1-self.NoFreq) + self.F3 = ALS.F3*(1-self.NoFreq) + self.F4 = ALS.F4*(1-self.NoFreq) + self.F5 = ALS.F5*(1-self.NoFreq) + self.F6 = ALS.F6*(1-self.NoFreq) + self.RealF5 = self.F5*(1-(self.F4+self.F3+self.F2+self.F1)) + self.NoFreq = self.NoFreq + (1-math.min(1,self.F5+self.F4+self.F3+self.F2+self.F1)) + else + self.NoFreq = 0 + self.F1 = 0 + self.F2 = 0 + self.F3 = 0 + self.F4 = 0 + self.F5 = 0 + self.F6 = 0 + self.NoFreq = 0 + end + if self.State == 2 then + --Speed limit + local speedLimit = 20 + if EnableARS and self.F4 > 0 then speedLimit = 40 end + if EnableARS and self.F3 > 0 then speedLimit = 60 end + if EnableARS and self.F2 > 0 then speedLimit = 70 end + if EnableARS and self.F1 > 0 then speedLimit = 80 end + + local ProgrammX = false + local ProgramDoorLeft = IgnoreDoors + local ProgramDoorRight = IgnoreDoors + local ProgrammSBrake = false + self.LastBrakeProgramTimer = self.LastBrakeProgramTimer or CurTime() + self.LastBrakeProgram = self.LastBrakeProgram or false + + local haveCommand = 0 + for k,v in ipairs(LeftCoil.Commands) do + v.Power = true + local command = v.PlateType + ProgramDoorLeft = ProgramDoorLeft or command == METROSTROI_ACOIL_DOOR + ProgrammX = ProgrammX or command == METROSTROI_ACOIL_DRIVE and v.Power and v.Mode + ProgrammSBrake = ProgrammSBrake or command == METROSTROI_ACOIL_SBRAKE and LeftCoil + haveCommand = haveCommand + 1 + end + for k,v in ipairs(RightCoil.Commands) do + v.Power = true + local command = v.PlateType + ProgramDoorRight = ProgramDoorRight or command == METROSTROI_ACOIL_DOOR + ProgrammX = ProgrammX or command == METROSTROI_ACOIL_DRIVE and v.Power and v.Mode + ProgrammSBrake = ProgrammSBrake or command == METROSTROI_ACOIL_SBRAKE and RightCoil + + haveCommand = haveCommand + 1 + end + if self.HaveCommand ~= haveCommand then + self.LRSTimer = CurTime() + self.HaveCommand = haveCommand + end + if self.DoorsOpen == true and (Train.Panel["SD"] <= 0 or Train:ReadTrainWire(16) > 0) then self.DoorsOpen = false end + if Train.VAV.Value > 0 and self.Stopped then + if Train.Panel["SD"] > 0 and not self.SDTimer then self.SDTimer = CurTime() end + if Train.Panel["SD"] <= 0 and self.SDTimer then + self.SDTimer = false + self.Autodrive = false + end + if self.SDTimer and (self.SDTimer == true or CurTime()-self.SDTimer > 0.2) then + self.SDTimer = true + self.Autodrive = self.Autodrive or Train.VZP.Value > 0 + end + else + self.Autodrive = false + self.Stopped = false + end + if Train.VAV.Value > 0 and Train.Panel["SD"] <= 0 and not self.Stopped then self.Stopped = CurTime() end + if Train.VAV.Value > 0 and Train.Panel["SD"] > 0 and (self.Stopped and self.Stopped ~= true and CurTime()-self.Stopped >= 2) then self.Stopped = true end + if self.Stopped and (Train.VAV.Value == 0 or Train.Panel["SD"] > 0 and (self.Stopped ~= true and CurTime()-self.Stopped < 2)) then self.Stopped = false end + if not self.Autodrive then + self.Drive = 0 + self.Brake = false + end + if ProgrammSBrake then + if self.RingArmed == nil then self.RingArmed = CurTime() + math.max(1,math.min(4,5-speed/15)) end + elseif not ProgrammSBrake and self.RingArmed ~= nil then self.RingArmed = nil end + if self.RingArmed and CurTime()-self.RingArmed <= 0 and Train:ReadTrainWire(6) > 0 then self.RingArmed = false end + if self.RingArmed and CurTime()-self.RingArmed > 4 then + self.RingArmed = false + end + local position = 0 + if self.Autodrive and ProgrammSBrake then + if not self.Brake and ProgrammSBrake then self.Brake = 0 end + if self.Brake then position = speed > 55 and -2 or -1 end + + local passed = ProgrammSBrake.BrakeProgrammPassed + local passednow = CurTime()-ProgrammSBrake.LastBrakeProgrammPassed + if self.Brake == 0 and passed < 1e9 then self.Brake = 1 end + if self.Brake == 1 and (passed < METROSTROI_ABRAKE_DIST or (passednow > self.Passed*4 and passednow > METROSTROI_ABRAKE_DIST*4)) then self.Brake = 2 end + if self.Brake == 2 and METROSTROI_ABRAKE_DIST*3 < passed and passed < 1e9 and speed<=25 then self.Brake = 3 end + if self.Brake == 3 and passed < METROSTROI_ABRAKE_DIST then self.Brake = 4 end + --if self.Brake == 2 and speed > 25 or self.Brake == 4 then position = -3 end + if self.Brake == 2 and Train.RheostatController.Position < 12 or self.Brake == 4 then position = -3 end + self.Passed = passed + elseif self.Autodrive then + --print(-1,Train,ProgrammSBrake) + if self.Brake then + position = -3 + elseif ProgrammX and ProgrammX then + --X3 + if ProgrammX == 2 or ProgrammX == 4 then self.Drive = 3 end --X3 + if ProgrammX == 1 or ProgrammX == 3 then self.Drive = 2 end --X2 + if ProgrammX == 5 or ProgrammX == 6 then self.Drive = 0 end --0 + if ProgrammX == 7 then self.Drive = -1 end --T1 + if ProgrammX == 8 then self.Drive = -2 end --T1a + end + if self.Brake and (self.Brake <= 1 or speed < 0.1) then + self.Brake = false + self.Stopped = false + if ProgramDoorLeft or ProgramDoorRight then + self.DoorsOpen = true + end + end + if position == 0 then position = self.Drive or 0 end + end + if position ~= 0 and not self.Starting then self.Starting = CurTime() end + if position == 0 and self.Starting then self.Starting = false end + if (position < -1 or position > 1) and self.Starting and CurTime()-self.Starting < 0.5 then + position = math.Clamp(position,-1,1) + end + if ARS["33D"]*self["33D"] == 0 and position > 0 then position = 0 end + --if Train.RheostatController.Position < 17.2 then print(Train.Electric.I13,Train.RheostatController.Position,speed,Train.Electric.ThyristorState,Train.Electric.ThyristorResistance,Train.ThyristorBU5_6.Value) end + + self:SetAVPosition(position) + + if ProgrammSBrake then ProgrammSBrake.BrakeProgrammPassed = 1e9 end + local zero = (self.NoFreq*(Train.ALS.Value+Train.VRD.Value)) > 0 + + --PUAV ARS logic + if not EnableARS then + self.Ringing = true + self.EBrake = true + end + if self.Ringing and KVT then self.Ringing = false end + if self.EBrake and KVT then self.EBrake = false end + if speed >= speedLimit and not ARS.ElectricBrake and not self.Pneumo then + self.Ringing = true + self.Pneumo = speed == speedLimit + self.EBrake = speed > speedLimit + end + if (speed < speedLimit or ARS.ElectricBrake) and EnableARS then + self.Pneumo = false + self.EBrake = false + end + + local CloseDoors = (not ProgramDoorLeft and not ProgramDoorRight and not zero) or speed > 0.2 or Train.VAV.Value > 0 and Train.KSZD.Value > 0 + local DoorLeftWork = Train:ReadTrainWire(16) == 0 and (ProgramDoorLeft or zero) + local DoorRightWork = Train:ReadTrainWire(16) == 0 and (ProgramDoorRight or zero) + self.LK16 = Train:ReadTrainWire(16) > 0 + self.LAVT = Train.VAV.Value > 0 + self.LOS = UOS + self.LRS = + not ProgramDoorLeft and not ProgramDoorRight and EnableARS + and Train.EK.Value > 0 and Train.EK1.Value > 0 and Train.SOT.Value > 0 and (not self.LRSTimer or CurTime()-self.LRSTimer > 0.2) + self.LKI1 = false + self.LKI2 = false + + self["31"] = DoorLeftWork and self.DoorsOpen and 1 or 0 + self["32"] = DoorRightWork and self.DoorsOpen and 1 or 0 + self["31C"] = DoorLeftWork and 1 or 0 + self["32C"] = DoorRightWork and 1 or 0 + self["16C"] = CloseDoors and 1 or 0 + + --local zbrake = speedLimit <= 20 and not KVT + self["33D"] = (self.EBrake or zbrake) and 0 or 1 + self["33G"] = (self.EBrake or zbrake) and 1 or 0 + self["2"] = self["33G"] + self["20"] = self["33G"] + self["48"] = self.Pneumo and 1 or 0 + self["8"] = self["33G"] + if Train.KV["U2-25"] > 0 or KVT and speedLimit == 20 then + self["8"] = -1 + end + if (Train.KV["7G-33Yu"] > 0 or Train.KSZD.Value > 0) and self.KSZDRing then self.KSZDRing = false end + for i,train in ipairs(Train.WagonList) do + if train.RheostatController then + Train:SetNW2Int("PUAV:RK"..i,math.floor(train.RheostatController.Position+0.5)) + end + end + self.Ring = (self.EBrake or self.Ringing) and CurTime()%2 > 1 or self.KSZDRing + elseif self.State == 1 then + self.LK16 = true + self.LAVT = true + self.LOS = true + self.LRS = true + self.LKI1 = true + self.LKI2 = true + self.Ring = CurTime()-self.State2Timer < 1 + + self.EBrake = true + self.Ringing = true + else + self.LK16 = false + self.LAVT = false + self.LOS = false + self.LRS = false + self.LKI1 = false + self.LKI2 = false + + self["31"] = 0 + self["32"] = 0 + self["31C"] = 1 + self["32C"] = 1 + self["16C"] = 0 + + self["33D"] = 1 + self["33G"] = 0 + self["2"] = 0 + self["20"] = 0 + self["48"] = 0 + self["8"] = 0 + + + self.LRSTimer = false + self.HaveCommand = false + + self.Ring = false + + self.EBrake = true + self.Ringing = true + self.Pneumo = false + self.RingArmed = nil + + self:SetAVPosition(0) + end + if EnableARS then + if (ARS.F5 > 0 or ARS.F6 > 0) then + if not self.ZeroTimer then + self.ZeroTimer = CurTime()+30 + self.ZeroTimerState = true + end + if self.ZeroTimerState and self.ZeroTimer and CurTime()-self.ZeroTimer > 7.5 and Train.ALSCoil.Speed < 0.25 then + self.ZeroTimerState = false + self.ZeroTimer = CurTime()+30 + end + elseif self.ZeroTimer ~= nil then + self.ZeroTimer = nil + end + else + self.ZeroTimer = nil + end + --[[ + if self.Train.VZP.Value > 0.5 then + Train.Autodrive:Enable() + end + if Train.VAV.Value < 0.5 then + Train.Autodrive:Disable() + end + if self.Timer and CurTime() - self.Timer > 0 then + self.Timer = nil + self.Choose = 0 + end + --self.FirstStation = Metrostroi.EndStations[Train.Announcer.AnnMap][self.Line] and Metrostroi.EndStations[Train.Announcer.AnnMap][self.Line][self.ChoosedFStation or 1] or 0 + --self.LastStation = Metrostroi.EndStations[Train.Announcer.AnnMap][self.Line] and Metrostroi.EndStations[Train.Announcer.AnnMap][self.Line][self.ChoosedLStation or 1] or 0 + if self.State ~= self.RealState then + self.RealState = self.State + self.TimeOverride = true + end + + self.Time = self.Time or CurTime() + if (CurTime() - self.Time) > 0.1 or self.TimeOverride then + self.TimeOverride = nil + --print(1) + self.Time = CurTime() + Train:SetNW2Int("PUAV:Choose",self.Choose) + Train:SetNW2Int("PUAV:LastStation",self.LastStation or 1) + Train:SetNW2Int("PUAV:FirstStation",self.FirstStation or 1) + Train:SetNW2Int("PUAV:Line",self.Line or 1) + end + self.RouteNumber = string.gsub(Train.RouteNumber or "","^(0+)","") + self.Line = Train.UPO.Line + self.FirstStation = tostring(Train.UPO.FirstStation or "") + self.LastStation = tostring(Train.UPO.LastStation or "") + local pathID + if (Metrostroi.TrainPositions[self.Train] and Metrostroi.TrainPositions[self.Train][1]) then + PathID = Metrostroi.TrainPositions[self.Train][1].path.id + end + Train:SetPackedBool("LKI",self.Train.Autodrive.Commands[PathID] and self.Train.Autodrive.Commands[PathID][self.Train.UPO.Station] ~= nil)]] +end diff --git a/lua/metrostroi/systems/_obsolete/sys_rri.lua b/lua/metrostroi/systems/_obsolete/sys_rri.lua new file mode 100644 index 0000000..e2b3c57 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_rri.lua @@ -0,0 +1,215 @@ +-------------------------------------------------------------------------------- +-- Радио-релейный информатор +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("RRI") +TRAIN_SYSTEM.DontAccelerateSimulation = true +if TURBOSTROI then return end +function TRAIN_SYSTEM:Inputs() + return {} +end + +function TRAIN_SYSTEM:Outputs() + return {} +end + +Metrostroi.RRIAnnouncments = { + ["arr_108"]={14.063,"subway_announcer_riu/arr_108.mp3"}, + ["arr_109"]={4.466,"subway_announcer_riu/arr_109.mp3"}, + ["arr_110"]={10.703,"subway_announcer_riu/arr_110.mp3"}, + ["arr_111"]={4.502,"subway_announcer_riu/arr_111.mp3"}, + ["arr_112"]={10.586,"subway_announcer_riu/arr_112.mp3"}, + ["arr_113"]={9.536,"subway_announcer_riu/arr_113.mp3"}, + ["arr_114"]={3.661,"subway_announcer_riu/arr_114.mp3"}, + ["arr_115"]={14.681,"subway_announcer_riu/arr_115.mp3"}, + ["arr_116"]={10.077,"subway_announcer_riu/arr_116.mp3"}, + ["arr_117"]={9.804,"subway_announcer_riu/arr_117.mp3"}, + ["arr_118"]={5.911,"subway_announcer_riu/arr_118.mp3"}, + ["arr_119"]={4.404,"subway_announcer_riu/arr_119.mp3"}, + ["arr_121"]={9.337,"subway_announcer_riu/arr_121.mp3"}, + ["arr_122"]={4.619,"subway_announcer_riu/arr_122.mp3"}, + ["arr_123"]={14.355,"subway_announcer_riu/arr_123.mp3"}, + ["arr_321_I"]={5.032,"subway_announcer_riu/arr_321_I.mp3"}, + ["arr_321_II"]={11.413,"subway_announcer_riu/arr_321_II.mp3"}, + ["arr_322"]={15.998,"subway_announcer_riu/arr_322.mp3"}, + ["end_111"]={13.759,"subway_announcer_riu/end_111.mp3"}, + ["end_114"]={13.395,"subway_announcer_riu/end_114.mp3"}, + ["end_121"]={13.973,"subway_announcer_riu/end_121.mp3"}, + ["leave"]={11.283,"subway_announcer_riu/leave.mp3"}, + ["next_108"]={7.334,"subway_announcer_riu/next_108.mp3"}, + ["next_109"]={7.297,"subway_announcer_riu/next_109.mp3"}, + ["next_110"]={18.623,"subway_announcer_riu/next_110.mp3"}, + ["next_111"]={7.221,"subway_announcer_riu/next_111.mp3"}, + ["next_112"]={7.495,"subway_announcer_riu/next_112.mp3"}, + ["next_113"]={17.520,"subway_announcer_riu/next_113.mp3"}, + ["next_113_s"]={23.703,"subway_announcer_riu/next_113_s.mp3"}, + ["next_114"]={7.163,"subway_announcer_riu/next_114.mp3"}, + ["next_115"]={9.323,"subway_announcer_riu/next_115.mp3"}, + ["next_115_s"]={15.323,"subway_announcer_riu/next_115_s.mp3"}, + ["next_116"]={7.476,"subway_announcer_riu/next_116.mp3"}, + ["next_117"]={17.763,"subway_announcer_riu/next_117.mp3"}, + ["next_118"]={9.138,"subway_announcer_riu/next_118.mp3"}, + ["next_119_I"]={7.554,"subway_announcer_riu/next_119_I.mp3"}, + ["next_119_II"]={14.088,"subway_announcer_riu/next_119_II.mp3"}, + ["next_121_I"]={12.953,"subway_announcer_riu/next_121_I.mp3"}, + ["next_121_II"]={6.726,"subway_announcer_riu/next_121_II.mp3"}, + ["next_122_II"]={8.051,"subway_announcer_riu/next_122_II.mp3"}, + ["next_122_I_1"]={14.029,"subway_announcer_riu/next_122_I_1.mp3"}, + ["next_122_I_2"]={15.045,"subway_announcer_riu/next_122_I_3.mp3"}, + ["next_123"]={13.935,"subway_announcer_riu/next_123.mp3"}, + ["next_321_I"]={14.661,"subway_announcer_riu/next_321_I.mp3"}, + ["next_321_II"]={8.509,"subway_announcer_riu/next_321_II.mp3"}, + ["next_322"]={8.929,"subway_announcer_riu/next_322.mp3"}, + ["to_111"]={6.881,"subway_announcer_riu/to_111.mp3"}, + ["to_114"]={6.224,"subway_announcer_riu/to_114.mp3"}, + ["to_121"]={6.698,"subway_announcer_riu/to_121.mp3"}, +} +for k,v in pairs(Metrostroi.RRIAnnouncments) do + v[3] = k +end + +--Ð¿ÐµÑ€Ð²Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° - прибытие, Ð²Ñ‚Ð¾Ñ€Ð°Ñ - ÑледующаÑ, еÑли ИД находитÑÑ Ð² оÑновной таблице - значит ÑÑ‚Ð°Ð½Ñ†Ð¸Ñ Ñ‚Ð¸Ð¿Ð° горлифт +--1 - разделение по пути +--2 - разделение по линии +--3 - разделение по пути и линии +TRAIN_SYSTEM.Setup = { + [114] = true, + { + [321] = 1, + }, + { + [119] = 1, + [121] = 1, + [122] = {3,1}, + [321] = 1, + } +} + +function TRAIN_SYSTEM:Initialize() + for _,v in pairs(Metrostroi.RRIAnnouncments) do + util.PrecacheSound(v[2]) + end + self.Path = 1 + self.Line = 1 + self.FirstStation = 1 + self.LastStation = #Metrostroi.WorkingStations[self.Line] + self.CurrentStation = self.FirstStation + self.Depeat = true + self.IgnoreHorlift = true + self.TriggerNames = { + "Custom1", + "Custom2", + "Custom3", + "CustomC", + "R_Program1", + "R_Program2", + } + self.Triggers = {} +end + + +function TRAIN_SYSTEM:Queue(id) + local ann = self.Train.Announcer + if (not Metrostroi.RRIAnnouncments[id]) then return end + if #ann.Schedule < 16 then + local tbl = Metrostroi.RRIAnnouncments[id] + table.insert(ann.Schedule, tbl) + end +end + +function TRAIN_SYSTEM:Inputs() + return {} +end +function TRAIN_SYSTEM:Outputs() + return {} +end + +function TRAIN_SYSTEM:PlaySound(station,arrive) + if arrive == nil then + else + local name = "" + if arrive then + name = name.."next_" + else + name = name.."arr_" + end + name = name..tostring(station) + local spec + local horlift = false + if self.Setup[station] then + spec = self.Setup[station] + horlift = true + else + if self.Setup[station + (self.Path and 1 or -1)] then + horlift = true + end + spec = self.Setup[arrive and 2 or 1][station] + end + if horlift and self.IgnoreHorlift and arrive then + name = name.."_s" + end + if spec then + if type(spec) == "table" then + spec = spec[self.Path and 2 or 1] + end + if spec == 1 then + name = name.."_"..(self.Path and "II" or "I") + elseif spec == 2 then + name = name.."_"..tostring(self.Line) + elseif spec == 3 then + name = name.."_"..(self.Path and "II" or "I").."_"..tostring(self.Line) + end + end + self:Queue(name) + end +end +function TRAIN_SYSTEM:Trigger(name) + --self.CurrentStation = 9 + if name == "Custom3" and #self.Train.Announcer.Schedule == 0 then + if self.Depeat then + if self.LastStation > self.FirstStation then + self.CurrentStation = math.min(self.LastStation+1,self.CurrentStation + 1 + (self.Setup[Metrostroi.WorkingStations[self.Line][self.CurrentStation]+1] and 1 or 0)) + else + self.CurrentStation = math.max(self.LastStation-1,self.CurrentStation - 1 - (self.Setup[Metrostroi.WorkingStations[self.Line][self.CurrentStation]-1] and 1 or 0)) + end + end + if (self.LastStation < self.FirstStation and self.CurrentStation < self.LastStation or self.LastStation > self.FirstStation and self.CurrentStation > self.LastStation) and self.Depeat then + self.Depeat = false + if Metrostroi.AnnouncerData[Metrostroi.WorkingStations[self.Line][self.CurrentStation]] and Metrostroi.AnnouncerData[Metrostroi.WorkingStations[self.Line][self.CurrentStation]][9] then + self.CurrentStation = self.LastStation + local tem = self.FirstStation + self.FirstStation = self.LastStation + self.LastStation = tem + self.Depeat = not self.Depeat + else + self.CurrentStation = self.FirstStation + end + else + self.Depeat = not self.Depeat + end + self:PlaySound(Metrostroi.WorkingStations[self.Line][self.CurrentStation],not self.Depeat) + end +end + +function TRAIN_SYSTEM:Think() + self.Train.R_G:TriggerInput("Set",1) + self.Train.R_ZS:TriggerInput("Set",1) + local Train = self.Train + if Train.VB.Value > 0.5 and Train.Battery.Voltage > 55 then + for k,v in pairs(self.TriggerNames) do + if Train[v] and (Train[v].Value > 0.5) ~= self.Triggers[v] then + if Train[v].Value > 0.5 then + self:Trigger(v) + end + self.Triggers[v] = Train[v].Value > 0.5 + end + end + end + self.Path = self.Train.CustomC.Value > 0 + if self.FirstStation > self.LastStation and not self.Path or self.FirstStation < self.LastStation and self.Path then + local temp = self.FirstStation + self.FirstStation = self.LastStation + self.LastStation = temp + self.CurrentStation = self.FirstStation + self.Depeat = true + end +end diff --git a/lua/metrostroi/systems/_obsolete/sys_tr_7b.lua b/lua/metrostroi/systems/_obsolete/sys_tr_7b.lua new file mode 100644 index 0000000..6450451 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_tr_7b.lua @@ -0,0 +1,50 @@ +-------------------------------------------------------------------------------- +-- Токоприёмник контактного рельÑа (ТР-7Б) +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("TR_7B") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + -- Output voltage from contact rail + self.Main750V = 0.0 + + self.ContactState1 = 0 + self.ContactState2 = 0 + self.ContactState3 = 0 + self.ContactState4 = 0 +end + +function TRAIN_SYSTEM:Inputs() + return { } +end + +function TRAIN_SYSTEM:Outputs() + return { "Main750V", "DropByPeople","ContactState1","ContactState2","ContactState3","ContactState4"} +end + + +function TRAIN_SYSTEM:Think(dT) + -- Don't do logic if train is broken + local fB,rB = self.Train.FrontBogey,self.Train.RearBogey + if (not IsValid(fB)) or (not IsValid(rB)) then + return + end + + self.Main750V = 0 + if IsValid(fB) then + self.Main750V = math.max(self.Main750V,fB.Voltage) + self.ContactState1 = fB.NextStates[1] and 1 or 0 + self.ContactState2 = fB.NextStates[2] and 1 or 0 + else + self.ContactState1 = 0 + self.ContactState2 = 0 + end + if IsValid(rB) then + self.Main750V = math.max(self.Main750V,rB.Voltage) + self.ContactState3 = rB.NextStates[1] and 1 or 0 + self.ContactState4 = rB.NextStates[2] and 1 or 0 + else + self.ContactState3 = 0 + self.ContactState4 = 0 + end +end diff --git a/lua/metrostroi/systems/_obsolete/sys_upo.lua b/lua/metrostroi/systems/_obsolete/sys_upo.lua new file mode 100644 index 0000000..c11a564 --- /dev/null +++ b/lua/metrostroi/systems/_obsolete/sys_upo.lua @@ -0,0 +1,256 @@ +-------------------------------------------------------------------------------- +-- ��� - �������������� +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("UPO") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.Bloks = { + "PUAV", + "PA-KSD", + "PA-M", + "PA-KSD-M", + } +end + +function TRAIN_SYSTEM:Outputs() + return {} +end + +function TRAIN_SYSTEM:Inputs() + return {} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + +function TRAIN_SYSTEM:NotLast(path) + local Announcer = self.Train.Announcer + return self:GetSTNum(self.Last) > 1 +end + +function TRAIN_SYSTEM:GetSTNum(station) + local Announcer = self.Train.Announcer + local station = tonumber(station) + if not Metrostroi.WorkingStations then return 0 end + if not Metrostroi.WorkingStations[self.Line] then return 0 end + if not Metrostroi.WorkingStations[self.Line][station] and station ~= 120 then return 0 end + return station == 120 and 12 or Metrostroi.WorkingStations[self.Line][station] +end + +function TRAIN_SYSTEM:End(station,path,next) + if not station or station == 0 or not Metrostroi.AnnouncerData[station] then return true end + if next then + return (not Metrostroi.AnnouncerData[station][9]) + and (((self:GetSTNum(self.LastStation) > self:GetSTNum(station) or self:GetSTNum(station) > self:GetSTNum(self.FirstStation)) and path == 2) + or ((self:GetSTNum(self.FirstStation) < self:GetSTNum(station) and self:GetSTNum(station) > self:GetSTNum(self.LastStation)) and path == 1)),Metrostroi.AnnouncerData[station][9] + else + return (not Metrostroi.AnnouncerData[station][9]) + and (((self:GetSTNum(self.LastStation) >= self:GetSTNum(station) or self:GetSTNum(station) > self:GetSTNum(self.FirstStation)) and path == 2) + or ((self:GetSTNum(self.FirstStation) < self:GetSTNum(station) and self:GetSTNum(station) >= self:GetSTNum(self.LastStation)) and path == 1)) + end +end + +function TRAIN_SYSTEM:PlayArriving(station,next,path) + local Announcer = self.Train.Announcer + Announcer:MultiQueue(0005,0003) + if self:End(station,path) then + Announcer:MultiQueue(0230,0222,0002,0221,station) + if Metrostroi.AnnouncerData[station][2] then + Announcer:MultiQueue(0215) + end + --Announcer:MultiQueue(0006) + self.AnnState = 7 + Announcer:MultiQueue(0006) + return + end + + Announcer:MultiQueue(Metrostroi.AnnouncerData[station][6] and 0220 or nil,station) + if Metrostroi.AnnouncerData[station][2] then + Announcer:MultiQueue(0215) + end + if type(Metrostroi.AnnouncerData[station][7]) == "table" then + Announcer:MultiQueue(0202,Metrostroi.AnnouncerData[Metrostroi.AnnouncerData[station][7][2]] and 0203 or nil,Metrostroi.AnnouncerData[station][7][2]) + elseif Metrostroi.AnnouncerData[station][7] > 0 then + Announcer:MultiQueue(0202,Metrostroi.AnnouncerData[Metrostroi.AnnouncerData[station][7]] and 0203 or nil,Metrostroi.AnnouncerData[station][7]) + end + + if Metrostroi.AnnouncerData[station][8] and path == Metrostroi.AnnouncerData[station][8] then + Announcer:MultiQueue(0230,0233,0210,path == 1 and self.LastStation or self.FirstStation) + end + + if nextNonWorkingStation then + Announcer:MultiQueue(0230,nextNonWorkingStation) + end + Announcer:MultiQueue(0002,0219,next) + if Metrostroi.AnnouncerData[next][2] then + Announcer:MultiQueue(0215) + end + + if type(Metrostroi.AnnouncerData[next][7]) == "table" then + Announcer:MultiQueue(0202,Metrostroi.AnnouncerData[Metrostroi.AnnouncerData[next][7][2]] and 0203 or nil,Metrostroi.AnnouncerData[next][7][2]) + elseif Metrostroi.AnnouncerData[next][7] > 0 then + Announcer:MultiQueue(0202,Metrostroi.AnnouncerData[Metrostroi.AnnouncerData[next][7]] and 0203 or nil,Metrostroi.AnnouncerData[next][7]) + end + + if Metrostroi.AnnouncerData[next][8] and path == Metrostroi.AnnouncerData[next][8] then + Announcer:MultiQueue(0230,0233,0210,path == 1 and self.LastStation or self.FirstStation) + end + Announcer:MultiQueue(0006) +end + +function TRAIN_SYSTEM:PlayDepeate(station,next,path) + local Announcer = self.Train.Announcer + Announcer:MultiQueue(0005,0003) + if self:NotLast(path) then + Announcer:MultiQueue(0210,path == 1 and self.LastStation or self.FirstStation,0002) + elseif Metrostroi.AnnouncerData[station][8] and path == Metrostroi.AnnouncerData[station][8] then + Announcer:MultiQueue(0230,0233,0210,path == 1 and self.LastStation or self.FirstStation,0002) + end + Announcer:MultiQueue(0218) + + if self.NextNonWorkingStation then + Announcer:MultiQueue(0230,self.NextNonWorkingStation) + end + Announcer:MultiQueue(0219,next) + if Metrostroi.AnnouncerData[next][2] then + Announcer:MultiQueue(0215) + end + + if type(Metrostroi.AnnouncerData[next][7]) == "table" then + Announcer:MultiQueue(0202,Metrostroi.AnnouncerData[Metrostroi.AnnouncerData[next][7][2]] and 0203 or nil,Metrostroi.AnnouncerData[next][7][2]) + elseif Metrostroi.AnnouncerData[next][7] > 0 then + Announcer:MultiQueue(0202,Metrostroi.AnnouncerData[Metrostroi.AnnouncerData[next][7]] and 0203 or nil,Metrostroi.AnnouncerData[next][7]) + end + + if Metrostroi.AnnouncerData[next][8] and path == Metrostroi.AnnouncerData[next][8] then + Announcer:MultiQueue(0230,0233,0210,path == 1 and self.LastStation or self.FirstStation) + end + Announcer:MultiQueue(0006) +end +function TRAIN_SYSTEM:II(ann) + if self.Train.R_UPO.Value < 0.5 then return end + local Announcer = self.Train.Announcer + Announcer:MultiQueue(0005,0003) + if ann == 1 then + Announcer:MultiQueue(math.random() > 0.5 and 0207 or 0206) + elseif ann == 2 then + Announcer:MultiQueue(math.random() > 0.5 and 0209 or 0208) + elseif ann == 3 then + Announcer:MultiQueue(math.random() > 0.5 and 0204 or 0205) + else + if not self.IIalr then + Announcer:MultiQueue(self.Type == 1 and 0229 or 0217) + self.IIalr = true + else + Announcer:MultiQueue(0228) + self.IIalr = false + end + end + Announcer:MultiQueue(0006) +end + +function TRAIN_SYSTEM:ReloadSigns() + self.Train:PrepareSigns() + if self.Train.SignsList[tonumber(self.LastStation)] then + self.Train.SignsIndex = self.Train.SignsList[tonumber(self.LastStation)] or 1 + if self.Train.SignsList[self.Train.SignsIndex] then self.Train:SetNW2String("FrontText",self.Train.SignsList[self.Train.SignsIndex][2]) end + end + if #self.Train.WagonList > 1 then + local LastTrain = self.Train.WagonList[#self.Train.WagonList] + LastTrain:PrepareSigns() + if LastTrain.SignsList[tonumber(self.FirstStation)] then + LastTrain.SignsIndex = self.Train.SignsList[tonumber(self.FirstStation)] or 1 + if self.Train.SignsList[self.Train.SignsIndex] then LastTrain:SetNW2String("FrontText",self.Train.SignsList[self.Train.SignsIndex][2]) end + end + end +end + +function TRAIN_SYSTEM:SetStations(line,first,last) + self.Line = tonumber(line) + self.FirstStation = tonumber(first) + self.LastStation = tonumber(last) + self:ReloadSigns() +end + +function TRAIN_SYSTEM:Think() + self.Path = self.Train:ReadCell(49170)--Metrostroi.PathConverter[self.Train:ReadCell(65510)] or 0 + self.Station = self.Train:ReadCell(49169) + if self.Train.Autodrive.Corrections[self.Path or 0] then + self.Distance = math.min(3072,self.Train:ReadCell(49165) + (self.Train.Autodrive.Corrections[self.Path or 0][self.Station] or -3.21)) + end + if not self.Train.R_UPO or self.Train.R_UPO.Value < 0.5 or self.Blocks == 2 and self["PA-KSD"].Trainsit or (self.Train.KV.ReverserPosition == 0 and self.Train.KRU.Position == 0) then return end + if (self:GetSTNum(self.LastStation) > self:GetSTNum(self.FirstStation) and self.Path == 2) or (self:GetSTNum(self.FirstStation) > self:GetSTNum(self.LastStation) and self.Path == 1) then + local old = self.LastStation + self.LastStation = self.FirstStation + self.FirstStation = old + self:ReloadSigns() + end + if not self.FirstStation or not self.LastStation or self.FirstStation == 0 or self.LastStation == 0 or self.Station == 0 then return end + if (self:End(self.Station,self.Path,true) or self:GetSTNum(self.LastStation) > self:GetSTNum(self.Station) and self.Path == 2 or self:GetSTNum(self.Station) < self:GetSTNum(self.FirstStation) and self.Path == 1) then return end + if self.Distance < 75 and self.Arrived == nil and Metrostroi.WorkingStations[self.Line][self.Station] then + self.Arrived = true + local tbl = Metrostroi.WorkingStations[self.Line] + self:PlayArriving(self.Station,tbl[tbl[self.Station] + (self.Path == 1 and 1 or -1)],self.Path) + end + if self.Arrived and self.Train.Panel.SD < 0.5 and not self.BoardTime then + self.BoardTime = CurTime() + (self.Train.BoardTime or 0) + (20-(#self.Train.WagonList)*4) + (self.Train.Horlift and 7 or 0) + self.Ring = false + end + if (self.Arrived == nil or self.Train.Panel.SD > 0.5) and self.BoardTime then + self.BoardTime = nil + --self.Ring = nil + end + if self.Arrived and self.BoardTime and math.floor((self.BoardTime or CurTime()) - CurTime()) < (self.Train.Horlift and 15 or 8) and self.Arrived then + if self:End(self.Station,self.Path) then + self.Ring = 2 + else + local tbl = Metrostroi.WorkingStations[self.Line] + self:PlayDepeate(self.Station,tbl[tbl[self.Station] + (self.Path == 1 and 1 or -1)],self.Path) + end + self.ODZ = true + self.Arrived = false + end + if self.Distance > 75 then self.Arrived = nil end + if self.Arrived == nil then + self.Ring = nil + end + if self.Ring == false and self.Train.Panel.SD > 0.5 and self.ODZ == nil then + self.Ring = 1 + end + if self.Ring == false and self.Train.Panel.SD > 0.5 and self.ODZ ~= nil then + self.Ring = 0 + end + if self.Train:ReadCell(48) == 218 then + --self.ODZ = true + end + if self.ODZ and self.BoardTime and self.BoardTime - CurTime() < 0 then + self.ODZ = false + self.Ring = 2 + end + if self.Ring == 2 and self.Train.Panel.SD > 0.5 then + self.Ring = 0 + end + if (self.Ring or self.Ring ~= 0) and self.Train.ALS_ARS.KVT then + self.Ring = 0 + end + if self.Ring == 0 and self.Arrived == nil then + self.Ring = nil + end + if (self.Ring and self.Ring > 0) and not self.Train.ALS_ARS.Ring then + self.Train.ALS_ARS:TriggerInput("Ring",1) + end + if (not self.Ring or self.Ring == 0) and self.Train.ALS_ARS.Ring then + if not self.Train["PA-KSD"].Check and not self.Train["PA-M"].Check and not self.Train["PA-KSD-M"].Check then self.Train.ALS_ARS:TriggerInput("Ring",0) end + end + --[[ + if self.FirstStation and self.LastStation then + if not self:End(self.Station,self.Path) then + if self.Train.R_UPO.Value > 0 then + local tbl = Metrostroi.WorkingStations[self.Line] + self:PlayDepeate(self.Station,tbl[tbl[self.Station] + (self.Path == 1 and 1 or -1)],self.Path) + end + end + end + ]] +end diff --git a/lua/metrostroi/systems/sys_81_501_electric.lua b/lua/metrostroi/systems/sys_81_501_electric.lua new file mode 100644 index 0000000..73390bc --- /dev/null +++ b/lua/metrostroi/systems/sys_81_501_electric.lua @@ -0,0 +1,436 @@ +-------------------------------------------------------------------------------- +-- 81-501 electric schemes +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_501_Electric") +TRAIN_SYSTEM.NVL = 1 +TRAIN_SYSTEM.KVL = 2 +function TRAIN_SYSTEM:Initialize(typ1,typ2) + self.Type = self.Type or self.NVL + -- Load all functions from base + Metrostroi.BaseSystems["Electric"].Initialize(self) + for k,v in pairs(Metrostroi.BaseSystems["Electric"]) do + if not self[k] and type(v) == "function" then + self[k] = v + end + end + + self.SolvePowerCircuits = Metrostroi.BaseSystems["81_703_Electric"].SolvePowerCircuits + self.SolvePS = Metrostroi.BaseSystems["81_703_Electric"].SolvePS + self.SolvePP = Metrostroi.BaseSystems["81_703_Electric"].SolvePP + self.SolvePT = Metrostroi.BaseSystems["81_703_Electric"].SolvePT +end + +if CLIENT then return end +function TRAIN_SYSTEM:Inputs(...) + return { "Type" } +end +function TRAIN_SYSTEM:Outputs(...) + return Metrostroi.BaseSystems["Electric"].Outputs(self,...) +end +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Type" then + self.Type = value + end +end + +-- Node values +local S = {} +-- Converts boolean expression to a number +local function C(x) return x and 1 or 0 end +local min = math.min +local max = math.max + +function TRAIN_SYSTEM:SolveAllInternalCircuits(Train, dT) + ---[[ + local RheostatController = Train.RheostatController + local P = Train.PositionSwitch.SelectedPosition + local RK = RheostatController.SelectedPosition + local B = (Train.Battery.Voltage > 55) and 1 or 0 + local T = Train.SolverTemporaryVariables + + local elType = self.Type + local KVL = elType == 2 + + local BO = min(1,B * Train.VB.Value+T[10]) + local KV = Train.KV + local Panel = Train.Panel + Panel.V1 = BO + + Train:WriteTrainWire(10,B*Train.VB.Value) + S["10AK"] = T[10]*Train.VU.Value + + S["U2"] = S["10AK"]*KV["U2-10AK"] + + Panel.S6 = T[6] + Panel.S1 = T[1] + Panel.S2 = T[2] + Panel.SSN = T[20]*T[18] + + if KVL then + S["DA"] = S["10AK"]*KV["10AK-DA"] + Train:WriteTrainWire(8,T[10]*KV["10-8"]) + Train:WriteTrainWire(4,S["10AK"]*KV["10AK-4"]) + Train:WriteTrainWire(5,S["10AK"]*KV["10AK-5"]*(Train.UAVAC.Value+KV["5-5a"])) + + Train:WriteTrainWire(1,S["10AK"]*KV["1-10AK"]*Train.RV2.Value+(BO*Train.RO1.Value)) + Train:WriteTrainWire(17,S["10AK"]*Train.VozvratRP.Value) + Train:WriteTrainWire(6,S["10AK"]*Train.RVT.Value) + Train:WriteTrainWire(2,S["U2"]*KV["U2-2a"]+(BO*Train.RO1.Value)) + Train:WriteTrainWire(20,S["U2"]*KV["U2-20"]+(BO*Train.RO2.Value)) + Train:WriteTrainWire(25,S["U2"]*KV["U2-25"]) + Train:WriteTrainWire(3,S["U2"]*KV["U2-3"]+(BO*Train.RO2.Value)) + + Train.RVT:TriggerInput("Set",S["U2"]*KV["U2-RVT"]) + Train.RV2:TriggerInput("Set",S["10AK"]*KV["33-10AK"]*(1-Train.RVT.Value)) + + else + S["DA"] = T[10]*KV["10AK-DA"] + Train:WriteTrainWire(8,BO*KV["10-8"]) + Train:WriteTrainWire(4,S["10AK"]*KV["10AK-4"]) + Train:WriteTrainWire(5,S["10AK"]*(KV["10AK-5"]*(Train.UAVAC.Value+KV["5-5a"]))) + + Train:WriteTrainWire(1,S["10AK"]*KV["1-10AK"]*Train.RV2.Value+(BO*Train.RO1.Value)) + Train:WriteTrainWire(6,S["10AK"]*Train.RVT.Value) + Train:WriteTrainWire(17,S["10AK"]*Train.VozvratRP.Value) + Train:WriteTrainWire(2,S["U2"]*KV["U2-2a"]+(BO*Train.RO1.Value)) + Train:WriteTrainWire(20,S["U2"]*KV["U2-20"]+(BO*Train.RO2.Value)) + Train:WriteTrainWire(25,S["U2"]*KV["U2-25"]) + Train:WriteTrainWire(3,S["U2"]*KV["U2-3"]+(BO*Train.RO2.Value)) + + Train.RVT:TriggerInput("Set",S["U2"]*KV["U2-RVT"]) + Train.RV2:TriggerInput("Set",S["10AK"]*KV["33-10AK"]*(1-Train.RVT.Value)) + end + Panel.UPOPower = BO*KV["10AK-DA"] + + local RUM = KV.RCU + + + local Reverser = Train.Reverser + S["4A"] = T[4]+T[29]-10*Train.RO2.Value*KV["0-4"] + S["5A"] = T[5]+T[30] + + Reverser:TriggerInput("NZ",min(1,S["4A"]*Reverser.VP)) + Reverser:TriggerInput("VP",min(1,S["5A"]*Reverser.NZ)) + Train.LK4:TriggerInput("Set",(S["4A"]*Reverser.NZ+S["5A"]*Reverser.VP)*(1-Train.RPvozvrat.Value)*Train.LK3.Value) + + S["2A"] = (T[2]+BO*Train.RO1.Value)*RUM + Train.PneumaticNo2:TriggerInput("Set",T[8]*(1-Train.LK4.Value)+T[39]) + + if KVL then + S["48A"] = C(P==4 and 1 <= RK and RK <= 5) + Train:WriteTrainWire(48,S["48A"]) + Train.PneumaticNo1:TriggerInput("Set",(S["2A"]*Train.PR.Value)*(T[48]*RUM+S["48A"])) + else + S["48A"] = C(P==4 and 1 <= RK and RK <= 5) + Train:WriteTrainWire(48,S["48A"]) + Train.PneumaticNo1:TriggerInput("Set",(S["2A"]*Train.PR.Value+T[44])*(T[48]*RUM+S["48A"])) + end + + Train.RZ_2:TriggerInput("Set",T[24]*RUM*(1-Train.LK4.Value)) --FIXME RDR + S["18A"] = RUM*(Train.RPvozvrat.Value*100+(1-Train.LK4.Value)) --FIXME RDR + Train:WriteTrainWire(18,S["18A"]) + Panel.TW18 = S["18A"] + + S["10A"] = BO*RUM + --РУТ + --СДРК + S["25B"] = Train.LK2.Value*(1-Train.TSH.Value) + S["25A"] = Train.KSH2.Value + Train["RUTreg"] = S["10A"]*(S["25B"]-S["25A"]) + S["10I"] = S["10A"]*RheostatController.RKM2 + Train["RUTpod"] = S["10I"]*Train.LK4.Value + + S["25A"] = T[25]*RUM + Train["RRTpod"] = S["25A"]*min(1,Train["RRTpod"]+S["10I"]) + Train.RRT:TriggerInput("Set",S["25A"]*Train["RRTpod"]) + + S["DT"] = BO*Train.BPT.Value + Panel.BrY = S["DT"] + Train:WriteTrainWire(34,S["DT"]) + + if KVL then + S["10B"] = S["10A"]*(Train.RV1.Value+Train.TSH.Value*(1-Train.KSH3.Value)) + else + S["10B"] = S["10A"]*(Train.RV1.Value+Train.TSH.Value) + end + RheostatController:TriggerInput("MotorCoilState",min(1,S["10A"]*(S["10B"]*Train.RR.Value - S["10B"]*(1-Train.RR.Value)))) + + S["10N"] = S["10A"]*(RheostatController.RKM1+Train.SR1.Value*(1-Train.RUT.Value)) + S["10T"] = --[[ S["10N"]*--]] ((1-Train.SR1.Value)+Train.RUT.Value)*RheostatController.RKP + RheostatController:TriggerInput("MotorState",S["10N"]+S["10T"]*(-10)) + --СДПП + S["10E"] = S["10A"]*((1-Train.LK3.Value)+Train.Rper.Value) + Train.SR2:TriggerInput("Set",S["10E"]*((C(P==3 or P==4)+Train.KSH2.Value*Train.LK5.Value))*(1-Train.LK4.Value)) + + S["10AD"] = (1-Train.LK1.Value)*Train.SR2.Value + + S["10AZh"] = S["10AD"]*Train.TSH.Value*C(P==1 or P==2 or P==4) + S["10AR"] = S["10AD"]*(1-Train.KSH3.Value)*(1-Train.TSH.Value)*C(2<=P and P<=4) + S["10Ya"] = Train.LK3.Value*C(RK==18 and (P==1 or P==3)) + + S["10AG"] = S["10E"]*(S["10AR"]+S["10AZh"]+S["10Ya"]) + Train.PositionSwitch:TriggerInput("MotorState",-1.0 + 2.0*math.max(0,S["10AG"])) + + if false and KVL then + S["2G"] = S["2A"]*(C(P==1 or P==3)*C(1<=RK and RK<=17)+C(P==2 or P==4)*(C(5<=RK and RK<=18)+C(2<=RK and RK<=4 and P==4))) --ВТФ КВЛ, почему нету ОП + else + S["2G"] = S["2A"]*(C(P==1 or P==3)*C(1<=RK and RK<=17)+C(P==2 or P==4)*(C(5<=RK and RK<=18)+C(2<=RK and RK<=4 and P==4)+Train.KSH1.Value*C(2<=RK and RK<=5 and P==2))) --ВТФ КВЛ, почему нету ОП + end + --S["2G"] = S["2A"]*(C(P==1 or P==3)*C(1<=RK and RK<=17)+C((P==2 or P==4) and 2 <= RK and RK <= 18)) + S["10AV"] = S["10A"]*(1-Train.LK3.Value)*C(2<=RK and RK<=18)*(1-Train.LK4.Value) + S["2E"] = S["2G"]*(1-Train.SR2.Value)*Train.LK4.Value+S["10AV"] + + Train.RV1:TriggerInput("Set",S["2E"]) + Train.SR1:TriggerInput("Set",S["2E"]*(1-Train.RRT.Value)) + + Train.Rper:TriggerInput("Set",(T[3]+BO*Train.RO2.Value)*RUM*C(17<=RK and RK<=18)) + + S["1P"] = (T[1]+BO*Train.RO1.Value)*RUM*C(P == 1 or P == 2)*Train.NR.Value + S["6A"] = T[6]*RUM--+S["1P"]*C(P==3 or P==4) + S["1G"] = (S["1P"]+S["6A"]*C(P==3 or P==4))*Train.AVT.Value*(1-Train.RPvozvrat.Value) + S["1Zh"] = S["1G"]*(Train.LK3.Value+Train.KSH2.Value*C(RK==1 and (P==1 or P==3))) + Train.LK3:TriggerInput("Set",S["1Zh"]) + Train.LK1:TriggerInput("Set",S["1Zh"]*C(P==1 or P==2)) + Train.RR:TriggerInput("Set",S["1Zh"]*C(P==1 or P==3)) + + Train.TSH:TriggerInput("Set",S["6A"]*Train.LK5.Value) + Train.PR:TriggerInput("Set",S["6A"]) + Train["RUTavt"] = S["6A"]*(1-Train.KSH2.Value) + + S["6K"] = S["6A"]*C(RK==1)*(1-Train.LK1.Value) + Train.KSH3:TriggerInput("Set",S["6K"]) + Train.KSH4:TriggerInput("Set",S["6K"]) + + S["20A"] = (T[20]+BO*Train.RO2.Value)*RUM + Train.LK2:TriggerInput("Set",S["20A"]*Train.LK1.Value*(1-Train.RPvozvrat.Value)) + Train.LK5:TriggerInput("Set",S["20A"]*(1-Train.RPvozvrat.Value)) + + Train.RPvozvrat:TriggerInput("Open",T[17]*RUM) --FIXME Mayve more right RP code + + Train.RO1:TriggerInput("Set",T[9]) + Train.RO2:TriggerInput("Set",T[9]*Train.RO1.Value) + S["20G"] = C(1<=RK and RK<=5 and (P==2 or P==3)) + S["20V"] = C((RK==1 or RK==18) and P==1)+S["20G"]*Train.KSH1.Value + S["20D"] = S["10A"]*(S["20G"]+S["20V"]*(1-Train.Rper.Value))*(Train.LK5.Value+Train.LK4.Value) + Train.KSH2:TriggerInput("Set",S["20D"]) + Train.KSH1:TriggerInput("Set",S["20D"])--+S["20V"]*(1-Train.Rper.Value)) + + --Ð’Ñпом цепи низкого напрÑÐ¶ÐµÐ½Ð¸Ñ + Train:WriteTrainWire(11,T[10]*Train.VU2.Value) + Train:WriteTrainWire(23,BO*Train.VMK.Value) + Train:WriteTrainWire(22,T[23]*Train.AK.Value) + + Train:WriteTrainWire(27,T[10]*Train.LOn.Value) + Train:WriteTrainWire(28,T[10]*Train.LOff.Value) + + S["F7"] = BO*KV["F-F7"] + Panel.Headlights1 = S["F7"] + Panel.Headlights2 = S["F7"]*Train.VUS.Value + + S["F1"] = BO*(1-Train.VKF.Value)*KV["B2-F1"] + Train:WriteTrainWire(42,T[11]*Train.BD2.Value) + if KVL then + Train:WriteTrainWire(44,S["F1"]*C(RK==1 and P==4)) + Train:WriteTrainWire(46,S["F1"]*C(1<=RK and RK<=17 and P==3)) + end + + S["D1"] = T[10]*KV["D-D1"] + S[31] = S["D1"]*(Train.KDL.Value) + S[32] = S["D1"]*(Train.KDP.Value) + Train:WriteTrainWire(31,S["D1"]*(Train.KDL.Value+Train.VDL.Value+Train.KRZD.Value)) + Train:WriteTrainWire(32,S["D1"]*(Train.KDP.Value+Train.KRZD.Value)) + Train:WriteTrainWire(16,S["D1"]*Train.VUD.Value) --FIXME AV + Panel.AnnouncerPlaying = T[13] + --Train:WriteTrainWire(45,S["D1"]*Train.KDPH.Value) + Train:WriteTrainWire(24,T[20]*Train.KSN.Value) + Train:WriteTrainWire(15,T[-15]*Train.RD.Value) + Panel.SSD = T[-15]*T[15] + + S["11A"] = T[11]*(1-Train.NR.Value) + Panel.EmergencyLights1 = T[10]*Train.VU3.Value+S["11A"]*(1-Train.VU3.Value) + Panel.EmergencyLights2 = S["11A"] + --Panel.Ring = S["11A"]*T[42] + Panel.MainLights1 = math.max(0,math.min(1, + ( + self.Aux750V-100 + -self.Itotal*0.25*C(Train.PositionSwitch.SelectedPosition >= 3) + -25*Train.KK.Value + )/750*(0.5+0.5*B*Train.VB.Value*Train.KZ1.Value) + )) + Panel.MainLights2 = Panel.MainLights1*Train.KO.Value + + Train.KK:TriggerInput("Set",T[22]*(1-Train.TRK.Value)) + Train.KO:TriggerInput("Close",T[27]) + Train.KO:TriggerInput("Open",T[28]) + + Train.RD:TriggerInput("Set",BO*Train.BD.Value) + if KVL then + Panel.DoorsWC = BO*(1-Train.RD.Value)*Train.KSD.Value + else + Panel.DoorsWC = T[10]*(1-Train.RD.Value)*Train.KSD.Value + end + Panel.DoorsW = BO*(1-Train.RD.Value) + + Panel.GreenRP = T[10]*Train.RPvozvrat.Value + + Train.VDZ:TriggerInput("Set",T[16]*(1-Train.RD.Value)) + Train.VDOL:TriggerInput("Set",T[31]) + Train.VDOP:TriggerInput("Set",T[32]) + Train.Scheme = S + return S +end + + +function TRAIN_SYSTEM:SolveRKInternalCircuits(Train, dT) + ---[[ + local RheostatController = Train.RheostatController + local P = Train.PositionSwitch.SelectedPosition + local RK = RheostatController.SelectedPosition + local B = (Train.Battery.Voltage > 55) and 1 or 0 + local T = Train.SolverTemporaryVariables + + local elType = self.Type + local KVL = elType == 2 + + local BO = min(1,B * Train.VB.Value+T[10]) + local RUM = Train.KV.RCU + + + S["10A"] = BO*RUM + S["25B"] = Train.LK2.Value*(1-Train.TSH.Value) + S["25A"] = Train.KSH2.Value + Train["RUTreg"] = S["10A"]*(S["25B"]-S["25A"]) + S["10I"] = S["10A"]*RheostatController.RKM2 + Train["RUTpod"] = S["10I"]*Train.LK4.Value + + S["25A"] = T[25]*RUM + Train["RRTpod"] = S["25A"]*min(1,Train["RRTpod"]+S["10I"]) + Train.RRT:TriggerInput("Set",S["25A"]*Train["RRTpod"]) + + if KVL then + S["10B"] = S["10A"]*(Train.RV1.Value+Train.TSH.Value*(1-Train.KSH3.Value)) + else + S["10B"] = S["10A"]*(Train.RV1.Value+Train.TSH.Value) + end + RheostatController:TriggerInput("MotorCoilState",min(1,S["10A"]*(S["10B"]*Train.RR.Value - S["10B"]*(1-Train.RR.Value)))) + + S["10N"] = S["10A"]*(RheostatController.RKM1+Train.SR1.Value*(1-Train.RUT.Value)) + S["10T"] = --[[ S["10N"]*--]] ((1-Train.SR1.Value)+Train.RUT.Value)*RheostatController.RKP + RheostatController:TriggerInput("MotorState",S["10N"]+S["10T"]*(-10)) + --СДПП + S["10E"] = S["10A"]*((1-Train.LK3.Value)+Train.Rper.Value) + Train.SR2:TriggerInput("Set",S["10E"]*((C(P==3 or P==4)+Train.KSH2.Value*Train.LK5.Value))*(1-Train.LK4.Value)) + + S["10AD"] = (1-Train.LK1.Value)*Train.SR2.Value + + S["10AZh"] = S["10AD"]*Train.TSH.Value*C(P==1 or P==2 or P==4) + S["10AR"] = S["10AD"]*(1-Train.KSH3.Value)*(1-Train.TSH.Value)*C(2<=P and P<=4) + S["10Ya"] = Train.LK3.Value*C(RK==18 and (P==1 or P==3)) + + S["10AG"] = S["10E"]*(S["10AR"]+S["10AZh"]+S["10Ya"]) + Train.PositionSwitch:TriggerInput("MotorState",-1.0 + 2.0*math.max(0,S["10AG"])) + + S["2A"] = (T[2]+BO*Train.RO1.Value)*RUM + if false and KVL then + S["2G"] = S["2A"]*(C(P==1 or P==3)*C(1<=RK and RK<=17)+C(P==2 or P==4)*(C(5<=RK and RK<=18)+C(2<=RK and RK<=4 and P==4))) --ВТФ КВЛ, почему нету ОП + else + S["2G"] = S["2A"]*(C(P==1 or P==3)*C(1<=RK and RK<=17)+C(P==2 or P==4)*(C(5<=RK and RK<=18)+C(2<=RK and RK<=4 and P==4)+Train.KSH1.Value*C(2<=RK and RK<=5 and P==2))) --ВТФ КВЛ, почему нету ОП + end + --S["2G"] = S["2A"]*(C(P==1 or P==3)*C(1<=RK and RK<=17)+C((P==2 or P==4) and 2 <= RK and RK <= 18)) + S["10AV"] = S["10A"]*(1-Train.LK3.Value)*C(2<=RK and RK<=18)*(1-Train.LK4.Value) + S["2E"] = S["2G"]*(1-Train.SR2.Value)*Train.LK4.Value+S["10AV"] + + Train.RV1:TriggerInput("Set",S["2E"]) + Train.SR1:TriggerInput("Set",S["2E"]*(1-Train.RRT.Value)) + + Train.Rper:TriggerInput("Set",(T[3]+BO*Train.RO2.Value)*RUM*C(17<=RK and RK<=18)) + + S["1P"] = (T[1]+BO*Train.RO1.Value)*RUM*C(P == 1 or P == 2)*Train.NR.Value + S["6A"] = T[6]*RUM--+S["1P"]*C(P==3 or P==4) + S["1G"] = (S["1P"]+S["6A"]*C(P==3 or P==4))*Train.AVT.Value*(1-Train.RPvozvrat.Value) + S["1Zh"] = S["1G"]*(Train.LK3.Value+Train.KSH2.Value*C(RK==1 and (P==1 or P==3))) + Train.RR:TriggerInput("Set",S["1Zh"]*C(P==1 or P==3)) + return S +end + +local wires = {1,2,3,4,5,6,8,9,10,11,13,-15,15,16,17,18,20,22,23,24,25,27,28,29,30,31,32,39,42,44,48,} +function TRAIN_SYSTEM:SolveInternalCircuits(Train,dT,firstIter) + local T = Train.SolverTemporaryVariables + if not T then + T = {} + for i,v in ipairs(wires) do T[v] = 0 end + Train.SolverTemporaryVariables = T + end + if firstIter then + for i,v in ipairs(wires) do T[v] = min(Train:ReadTrainWire(v),1) end + self:SolveAllInternalCircuits(Train,dT) + else + self:SolveRKInternalCircuits(Train,dT) + end +end + +local Cosumers = { + LK1 = 0.05, + LK2 = 0.05, + LK3 = 0.05, + LK4 = 0.05, + LK5 = 0.05, + KSH1 = 0.05, + KSH2 = 0.05, + KSH3 = 0.05, + KSH4 = 0.05, + TSH = 0.05, + PR = 0.02, + RV1 = 0.02, + SR1 = 0.02, + SR2 = 0.02, + PneumaticNo1 = 0.03, + PneumaticNo2 = 0.03, + Rper = 0.03, + RRT = 0.03, + VDOL = 0.03, + VDOP = 0.03, + VDZ = 0.03, +} +function TRAIN_SYSTEM:Think(dT,iter) + local Train = self.Train + if not self.ResistorBlocksInit then + self.ResistorBlocksInit = true + self.Train.YAR_13A.NoRRT = true + Train:LoadSystem("ResistorBlocks","Gen_Res_703") + end + if iter == 1 then Train.ResistorBlocks.InitializeResistances_81_703(Train) end + ---------------------------------------------------------------------------- + -- Voltages from the third rail + ---------------------------------------------------------------------------- + self.Main750V = Train.TR.Main750V + self.Aux750V = Train.TR.Main750V*Train.AV.Value + self.Power750V = self.Main750V * Train.GV.Value + + + ---------------------------------------------------------------------------- + -- Solve circuits + ---------------------------------------------------------------------------- + self:SolvePowerCircuits(Train,dT,iter==1) + self:SolveInternalCircuits(Train,dT,iter==1) + if iter==1 then + --local time = SysTime() + local count = 0 + for k,v in pairs(Cosumers) do + count = count + Train[k].Value*v + end + count = count + math.abs(Train.RheostatController.Velocity*0.015) + count = count + math.abs(Train.PositionSwitch.Velocity*0.02) + count = count + math.abs(Train.Reverser.Speed) + self.Cosume = count + end + + ---------------------------------------------------------------------------- + -- Calculate current flow out of the battery + ---------------------------------------------------------------------------- + --local totalCurrent = 5*A30 + 63*A24 + 16*A44 + 5*A39 + 10*A80 + --local totalCurrent = 20 + 60*DIP +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_81_501_panel.lua b/lua/metrostroi/systems/sys_81_501_panel.lua new file mode 100644 index 0000000..0a8e8ce --- /dev/null +++ b/lua/metrostroi/systems/sys_81_501_panel.lua @@ -0,0 +1,68 @@ +-------------------------------------------------------------------------------- +-- 81-501 controller panel +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_501_Panel") + +function TRAIN_SYSTEM:Initialize() + -- Выключатель батареи (ВБ) + self.Train:LoadSystem("VB","Relay","Switch", {bass = true}) + self.Train:LoadSystem("AV","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("KSD","Relay","Switch", {bass = true}) --??? + self.Train:LoadSystem("KPVU","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VKF","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("VU","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("VU1","Relay","Switch", {bass = true}) --Heater + self.Train:LoadSystem("VU2","Relay","Switch", {bass = true}) --EmergencyLights + self.Train:LoadSystem("VU3","Relay","Switch", {bass = true}) --CabLights + + self.Train:LoadSystem("KRZD","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KDL","Relay","Switch", {bass = true}) + self.Train:LoadSystem("LOn","Relay","Switch", {bass = true}) + self.Train:LoadSystem("LOff","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VozvratRP","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KSN","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KDP","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VMK","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VUS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VUD","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("VDL","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KDPH","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("PanelLamp","Relay","Switch", {bass = true, normally_closed=true}) + + self.V1 = 0 + + self.S6 = 0 + self.S1 = 0 + self.S2 = 0 + self.SSN = 0 + self.SSD = 0 + self.TW18 = 0 + + self.Headlights1 = 0 + self.Headlights2 = 0 + self.RedLights = 0 + self.EmergencyLights1 = 0 + self.EmergencyLights2 = 0 + self.MainLights1 = 0 + self.MainLights2 = 0 + + self.BrY = 0 + self.DoorsW = 0 + self.DoorsWC = 0 + self.GreenRP = 0 + + self.AnnouncerPlaying = 0 + self.UPOPower = 0 +end + +function TRAIN_SYSTEM:Outputs() + return { "V1","GreenRP","S6","S1","S2","SSN","SSD","TW18","Headlights1","Headlights2","RedLights","EmergencyLights1","EmergencyLights2","MainLights1","MainLights2","BrY","DoorsW","DoorsWC","AnnouncerPlaying","UPOPower"} +end diff --git a/lua/metrostroi/systems/sys_81_502_ars.lua b/lua/metrostroi/systems/sys_81_502_ars.lua new file mode 100644 index 0000000..6808b7f --- /dev/null +++ b/lua/metrostroi/systems/sys_81_502_ars.lua @@ -0,0 +1,189 @@ +-------------------------------------------------------------------------------- +-- 81-502 NVL-Type safety system +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_502_ARS") + +function TRAIN_SYSTEM:Initialize() + self.KVD = 0 + self.Power = 0 + + self.F6 = 0 + self.F5 = 0 + self.F4 = 0 + self.F3 = 0 + self.F2 = 0 + self.F1 = 0 + self.NoFreq = 0 + + self.RPB = 0 + --Inputs + self.F1 = 0 + + self["1"] = 0 + self["17"] = 0 + self["6"] = 0 + self["6R"] = 0 + self["2"] = 0 + self["20"] = 0 + self["25"] = 0 + self["3"] = 0 + + self[44] = 0 + self[48] = 0 + --Outputs + self[1] = 0 + self[2] = 0 + self[3] = 0 + self[6] = 0 + self[8] = 0 + self[17] = 0 + self[20] = 0 + self[25] = 0 + + self.Ring = 0 + self.BrakeT = 0 +end +function TRAIN_SYSTEM:ClientInitialize() +end + +function TRAIN_SYSTEM:Inputs() + return {} +end +function TRAIN_SYSTEM:Outputs() + return { "Power","Speed", "F6","F5","F4","F3","F2","F1","NoFreq","KVD" } +end + +if not math.Round then + function math.Round( num, idp ) + + local mult = 10 ^ ( idp or 0 ) + return math.floor( num * mult + 0.5 ) / mult + + end +end +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + if Train.Electric.Type ~= 1 then return end + local ALS = Train.ALSCoil + local speed = math.Round(ALS.Speed or 0,1) + + local Power = self.Power > 0 + local VRD = Train.VRD.Value > 0 + -- ALS, ARS state + --local EnableARS = power and RVForward and (not Train.A42 or Train.A42.Value > 0) and Train.ARS.Value > 0 + --local EnableALS = power and (not Train.A43 or Train.A43.Value > 0) and Train.ALS.Value > 0 + + if self.ALS ~= ALS.Enabled then + ALS:TriggerInput("Enable",self.ALS) + end + self.RPB = self.Power + self.F6 = ALS.F6 + self.F5 = ALS.F5 + self.F4 = ALS.F4 + self.F3 = ALS.F3 + self.F2 = ALS.F2 + self.F1 = ALS.F1 + self.NoFreq = (1-math.min(1,(self.F1+self.F2+self.F3+self.F4+self.F5+self.F6)))*math.min(1,self.ALS+self.Power) + + --ALS + if Power then + local Vlimit = -10 + if self.F4 > 0 then Vlimit = 40 end + if self.F3 > 0 then Vlimit = 60 end + if self.F2 > 0 then Vlimit = 70 end + if self.F1 > 0 then Vlimit = 80 end + if VRD and Vlimit > 20 then Vlimit = 20 end + -- Determine next limit and current limit + self.SpeedLimit = Vlimit + else + self.SpeedLimit = 0 + end + local KVT = Train.KB.Value+Train.PB.Value > 0 + if Power then + if self.NoFreq ~= self.PrevNoFreq then + self.IgnorePedal = CurTime() + self.PrevNoFreq = self.NoFreq + end + if not KVT and self.IgnorePedal then self.IgnorePedal = false end + if self.IgnorePedal and CurTime()-self.IgnorePedal > 2 then KVT = false end + + local zero = self.F5 > 0 and self.F6 == 0 + if not VRD or not zero then self.VRD = false end + if VRD and zero and speed == 0 then self.VRD = true end + + + local SpeedLimit = self.SpeedLimit + if (self.F6 > 0 or self.NoFreq > 0 or self.VRD) and KVT then SpeedLimit = 20 end + if self.Started and speed > 0.1 then SpeedLimit = 0 end + if self.Started and speed <= 0.1 then self.Started = false end + -- Enable PV1 and disassembly when we overspeed + SpeedLimit = SpeedLimit*1.03 + if speed > SpeedLimit+0.5 and not self.ElectricBrake then + self.ElectricBrake = true + self.ARSRing = speed > 0 + end + --We can disable brake, if speed < Vdop and electric brake + if self.ARSRing and KVT then self.ARSRing = false end + if speed <= SpeedLimit and self.ElectricBrake and not self.ARSRing then + self.ElectricBrake = false + end + if speed < 3 and self["1"] == 0 then self.RO = true end + if self["1"] > 0 then self.RO = false end + if self.NoFreq > 0 and KVT then self.RO = false end + + + local Brake = (self.ElectricBrake or (Power and self.ALS+self.NoFreq==0)) and 1 or 0 + local Drive = 1*(1-Brake) + if Drive == 0 then self.KVD = 1 + elseif self["6"] == 0 then self.KVD = 0 end + if Brake > 0 and self.BrakeT == 0 and not self.BrakeTTimer then self.BrakeTTimer= CurTime() end + if Brake <= 0 and self.BrakeTTimer then + self.BrakeTTimer = nil + end + if self["6R"] == 0 and SpeedLimit <= 20 or self.BrakeTTimer and CurTime()-self.BrakeTTimer > 3.5 then + self.BrakeT = 1 + elseif not self.BrakeTTimer then self.BrakeT = 0 end + if self.ElectricBrake and (self["6"] > 0 and not self.PN1Timer or self["6"] == 0) then + self.PN1Timer = CurTime() + self.PN1OffTimer = 3.5-math.max(0,(speed-20))/60*2.5 + end + if not self.ElectricBrake then self.PN1Timer = false end + self[1] = self["1"]*Drive*(1-self.KVD) + self[2] = self["2"]+Brake + self[3] = Brake + self[6] = Brake + self[8] = Brake*self.BrakeT + self[17] = self["17"]*(1-Brake) + self[20] = self["20"]+Brake + self[25] = self["25"]*(1-Brake) + self[44] = (self.RO or self.PN1Timer and CurTime()-self.PN1Timer < self.PN1OffTimer) and 1 or 0 + self[48] = self[44] + self.Ring = (self.ARSRing) and 1 or 0 + else + self.ElectricBrake = true + self.ARSRing = true + self.Started = true + self.RO = false + self.VRD = false + self.BrakeT = 0 + self.PN1Timer = false + + self[1] = 0 + self[2] = self["2"] + self[3] = 0 + self[6] = 0 + self[8] = 0 + self[17] = self["17"] + self[20] = self["20"] + self[25] = self["25"] + self[44] = 0 + self[48] = 0 + + self.KVD = 0 + self.Ring = 0 + end + +end diff --git a/lua/metrostroi/systems/sys_81_502_bps.lua b/lua/metrostroi/systems/sys_81_502_bps.lua new file mode 100644 index 0000000..29fb9c0 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_502_bps.lua @@ -0,0 +1,73 @@ +-------------------------------------------------------------------------------- +-- SPB Anti rolling unit +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_502_BPS") + +function TRAIN_SYSTEM:Initialize() + self.Power = 0 + + self.KRR = 0 + self.KRH = 0 + + self[8] = 0 + self[39] = 0 + + self.PowerLamp = 0 + self.ErrorLamp = 0 + self.FailLamp = 0 + self.Rolling = false + self.Rolled = false +end + +function TRAIN_SYSTEM:Inputs() + return {} +end +function TRAIN_SYSTEM:Outputs() + return { "PowerLamp","ErrorLamp","FailLamp" } +end + +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + if Train.Electric.Type ~= 1 then return end + local ALS = Train.ALSCoil + local speed = ALS.Speed*ALS.SpeedSign + + + local Work = self.Power*(1-self.KRR) + self.FailLamp = 0 + + if Work > 0 then + if speed < -0.05 and not self.Rolling then self.Rolling = 0 end + if self.Rolling and self.Rolling < 0 then self.Rolling = false end + if self.Rolling then + local rolled = -speed/3600*1000*dT + if math.abs(rolled) >0.001 then + self.Rolling = self.Rolling + rolled + end + end + + if not self.Rolled and self.Rolling and self.Rolling > 0.5+self.KRH*2.5 then + self.Rolled = self.KRH + end + if self.Rolled then + if self.Rolled == 0 and self.KRH > 0 then + self.Rolled = false + self.Rolling = false + end + if self.KRH == 0 then self.Rolled = 0 end + end + self.ErrorLamp = (self.Rolling and self.Rolling > 0.1 or self.KRH > 0 and speed <= 0.05) and 1 or 0 + self.PowerLamp = 1-self.ErrorLamp + else + self.PowerLamp = 0 + self.ErrorLamp = 0 + self.Rolling = false + self.Rolled = false + end + + self[8] = self.Rolled and 1 or 0 + self[39] = self.Rolled and 1 or 0 +end diff --git a/lua/metrostroi/systems/sys_81_502_electric.lua b/lua/metrostroi/systems/sys_81_502_electric.lua new file mode 100644 index 0000000..af779c1 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_502_electric.lua @@ -0,0 +1,807 @@ +-------------------------------------------------------------------------------- +-- 81-502 electric schemes +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_502_Electric") +TRAIN_SYSTEM.NVL = 1 +TRAIN_SYSTEM.KVL = 2 +function TRAIN_SYSTEM:Initialize(typ1,typ2) + self.Type = self.Type or self.NVL + -- Load all functions from base + Metrostroi.BaseSystems["Electric"].Initialize(self) + for k,v in pairs(Metrostroi.BaseSystems["Electric"]) do + if not self[k] and type(v) == "function" then + self[k] = v + end + end + self.SolvePowerCircuits = Metrostroi.BaseSystems["81_703_Electric"].SolvePowerCircuits + self.SolvePS = Metrostroi.BaseSystems["81_703_Electric"].SolvePS + self.SolvePP = Metrostroi.BaseSystems["81_703_Electric"].SolvePP + self.SolvePT = Metrostroi.BaseSystems["81_703_Electric"].SolvePT +end + +if CLIENT then return end +function TRAIN_SYSTEM:Inputs(...) + return { "Type" } +end +function TRAIN_SYSTEM:Outputs(...) + return Metrostroi.BaseSystems["Electric"].Outputs(self,...) +end +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Type" then + self.Type = value + end +end + +-- Node values +local S = {} +-- Converts boolean expression to a number +local function C(x) return x and 1 or 0 end +local min = math.min +local max = math.max +function TRAIN_SYSTEM:SolveAllInternalCircuits(Train, dT) + ---[[ + local RheostatController = Train.RheostatController + local P = Train.PositionSwitch.SelectedPosition + local RK = RheostatController.SelectedPosition + local B = (Train.Battery.Voltage > 55) and 1 or 0 + local T = Train.SolverTemporaryVariables + + local elType = self.Type + local KVL = elType == 2 + + local BO = min(1,B * Train.VB.Value+T[10]) + local KV = Train.KV + local Panel = Train.Panel + local ARS = KVL and Train.KSAUP or Train.MARS + local BPS = Train.BPS + Panel.V1 = BO + + Train:WriteTrainWire(10,B*Train.VB.Value) + S["10AK"] = BO*Train.VU.Value + + S["U2"] = S["10AK"]*KV["U2-10AK"] + + Panel.S4 = T[4] + Panel.S5 = T[5] + Panel.S20 = T[20] + Panel.S6 = T[6] + Panel.S1 = T[1] + Panel.S1P = T[44] + Panel.S3 = T[3] + Panel.S2 = T[2] + Panel.SSN = --[[ S["U2"]--]] T[20]*T[18] --FIXME + Panel.SDT = T[34] + + Panel.L16 = T[16] + Panel.LRU = T[9] + + if KVL then + local RCAV3 = Train.RCAV3.Value + local RCAV4 = Train.RCAV4.Value + local RCAV5 = Train.RCAV5.Value + S[8] = BO*(KV["10-8"]+KV["10-8a"]*Train.OVT.Value*(1-Train.RPB.Value)) + Train:WriteTrainWire(8,S[8]+ARS[8]*RCAV4) + ARS["8"] = S[8]*RCAV4 + S["8a"] = ARS["8a"]*RCAV3+BO*KV["10-8a"]*(1-RCAV3) + Train.RPB:TriggerInput("Set", S["8a"]*Train.PB.Value) + ARS["I8"] = S["8a"]*KV["8-8a"] --FIXME + Train:WriteTrainWire(4,S["10AK"]*KV["10AK-4"]) + + + S[5] = S["10AK"]*KV["10AK-5"] + S["9a"] = BO*KV["F-F7"]*Train.VRU.Value+(S[5])*Train.RO2.Value + S[30] = S["9a"]*Train.RO2.Value + Train:WriteTrainWire(9,S["9a"]*Train.VAK.Value) + Train:WriteTrainWire(5,S[5]+S[30]) + Train:WriteTrainWire(30,S[5]+S[30]) + ARS.VRD = S["10AK"]*KV["10AK-VRD"]*Train.VRD.Value + Panel.RD = ARS.RD + + S[17] = S["10AK"]*Train.VozvratRP.Value + S[2] = S["U2"]*KV["U2-2a"] + S[20] = S["U2"]*KV["U2-20"] + S[25] = S["U2"]*KV["U2-25"] + S[3] = S["U2"]*KV["U2-3"] + --print(self.Train,1,(ARS[1])) + Train:WriteTrainWire(1,S["10AK"]*KV["1-10AK"]*Train.RV2.Value+(BO*Train.RO1.Value)) + Train:WriteTrainWire(17,(ARS[17]*RCAV5+S[17]*(1-RCAV5))) --FIXME AV + Train:WriteTrainWire(6,S["10AK"]*Train.RVT.Value) --FIXME AV + Train:WriteTrainWire(2,S["U2"]*KV["U2-2"]+(ARS[2]*RCAV4+S[2]*(1-RCAV4))+(BO*Train.RO1.Value)) --FIXME AV + Train:WriteTrainWire(20,(ARS[20]*RCAV4+S[20]*(1-RCAV4))+(BO*Train.RO2.Value)) --FIXME AV + Train:WriteTrainWire(25,(ARS[25]*RCAV5+S[25]*(1-RCAV5))) --FIXME AV + Train:WriteTrainWire(3,S[3]+ARS[3]+(BO*Train.RO2.Value)) --FIXME AV + + S[1] =(T[-15]*T[15]+S["10AK"]*Train.KAD.Value)*KV["33-10AK"] + S[6] = S["U2"]*KV["U2-RVT"] + Train.RVT:TriggerInput("Set",S[6]+ARS[6]*RCAV5) --FIXME AV + Train.RV2:TriggerInput("Set",(ARS[1]*RCAV5+S[1]*(1-RCAV5))*KV["33-10AK"]*(Train.AVU.Value+Train.KPVU.Value)*(1-Train.RVT.Value)*Train.UAVAC.Value*(Train.RPB.Value+Train.KAH.Value)) --FIXME AV + + ARS["1"] = S[1]*RCAV5 + ARS["17"] = S[17]*RCAV5 + ARS["6"] = S[6]*RCAV5 + ARS["2"] = S[2]*RCAV4 + ARS["20"] = S[20]*RCAV4 + ARS["25"] = S[25]*RCAV5 + ARS["3"] = S[3]*RCAV5 + + S["DA"] = S["10AK"]*KV["10AK-DA"] + ARS.Power = BO*Train.VBA.Value*RCAV3 + ARS.KZP = S["DA"]*Train.VZP.Value*RCAV5 + ARS.KDZ = S["DA"]*Train.VDZ.Value*RCAV5 + ARS.KRR = S["DA"]*RCAV3 + ARS.KOS = S["DA"]*Train.KOS.Value + ARS.KRR2 = (T[4]+T[5])*RCAV3 + ARS.KGR = S["U2"]*KV["U2-FA"]*RCAV4 + + Panel.LMK = T[23] + else + S["DA"] = BO*KV["10AK-DA"] + local RCARS = Train.RCARS.Value + local RCBPS = Train.RCBPS.Value + Train:WriteTrainWire(8,BO*(KV["10-8"]+KV["10-8a"]*Train.OVT.Value*(1-Train.RPB.Value))+BPS[8]*RCBPS+ARS[8]*RCARS) + --S["8a"] = + Train.RPB:TriggerInput("Set", BO*KV["10-8a"]*Train.PB.Value+S["DA"]*Train.ARS.Value*RCARS) + Train:WriteTrainWire(4,S["10AK"]*KV["10AK-4"]) + --Train:WriteTrainWire(5,S["10AK"]*(KV["10AK-5"]*Train.UAVAC.Value+KV["5-5a"])) + S[5] = S["10AK"]*(KV["10AK-5"]*(Train.UAVAC.Value+KV["5-5a"])) + S["9a"] = BO*KV["F-F7"]*Train.VRU.Value+(S[5])*Train.RO2.Value + S[30] = S["9a"]*Train.RO2.Value + Train:WriteTrainWire(9,S["9a"]*Train.VAK.Value) + Train:WriteTrainWire(5,S[5]+S[30]) + Train:WriteTrainWire(30,S[5]+S[30]) + + S[17] = S["10AK"]*Train.VozvratRP.Value + S[2] = S["U2"]*KV["U2-2a"] + S[20] = S["U2"]*KV["U2-20"] + S[25] = S["U2"]*KV["U2-25"] + S[3] = S["U2"]*KV["U2-3"] + Train:WriteTrainWire(1,S["10AK"]*KV["1-10AK"]*Train.RV2.Value+(BO*Train.RO1.Value)) + Train:WriteTrainWire(6,S["10AK"]*Train.RVT.Value) --FIXME AV + Train:WriteTrainWire(17,S[17]) + Train:WriteTrainWire(2,S["U2"]*KV["U2-2"]+(ARS[2]*RCARS+S[2]*(1-RCARS))+(BO*Train.RO1.Value)) --FIXME AV + Train:WriteTrainWire(20,(ARS[20]*RCARS+S[20]*(1-RCARS))+(BO*Train.RO2.Value)) --FIXME AV + Train:WriteTrainWire(25,(ARS[25]*RCARS+S[25]*(1-RCARS))) --FIXME AV + Train:WriteTrainWire(3,S[3]+ARS[3]+(BO*Train.RO2.Value)) --FIXME AV + + S[1] =S["10AK"]*KV["33-10AK"] + S[6] = S["U2"]*KV["U2-RVT"] + Train.RVT:TriggerInput("Set",S[6]+ARS[6]*RCARS) --FIXME AV + Train.RV2:TriggerInput("Set",(ARS[1]*RCARS+S[1]*(1-RCARS))*(Train.KD.Value+Train.KAD.Value)*(Train.RPB.Value+Train.KAH.Value)*(Train.AVU.Value+Train.KPVU.Value)*(1-Train.RVT.Value)) --FIXME AV + + ARS["1"] = S[1] + ARS["17"] = S[17] + ARS["6R"] = S[6] + ARS["6"] = T[6] + ARS["2"] = S[2] + ARS["20"] = S[20] + ARS["25"] = S[25] + ARS["3"] = S[3] + + ARS.Power = S["DA"]*Train.ARS.Value + ARS.ALS = S["DA"]*Train.ALS.Value + ARS.ALSPower = Train.ALS.Value + Train:WriteTrainWire(44,ARS[44]*RCARS) + + BPS.Power = S["DA"] + BPS.KRR = T[4] + BPS.KRH = S[1] + Train:WriteTrainWire(39,BPS[39]*RCBPS) + + Panel.LMK = T[22] + Panel.NMLow = BO*C(Train.Pneumatic.TrainLinePressure < 5.8 or Train.Pneumatic.TrainLinePressure > 8.3) + Panel.UAVATriggered = BO*(1-Train.UAVAC.Value+Train.PneumaticNo1.Value*C(Train.Pneumatic.BrakeCylinderPressure < 0.6)) + end + Panel.UPOPower = BO*KV["10AK-DA"] + Train:WriteTrainWire(13,Panel.UPOPower*Train.R_UPO.Value--[[*KV["UPO-13"]]*Train.UPO.LineOut) + Train:WriteTrainWire(29,0) + + local RUM = KV.RCU + + + local Reverser = Train.Reverser + S["4A"] = T[4]+T[29]-10*Train.RO2.Value*KV["0-4"] + S["5A"] = T[5]+T[30] + + Reverser:TriggerInput("NZ",min(1,S["4A"]*Reverser.VP)) + Reverser:TriggerInput("VP",min(1,S["5A"]*Reverser.NZ)) + Train.LK4:TriggerInput("Set",(S["4A"]*Reverser.NZ+S["5A"]*Reverser.VP)*(1-Train.RPvozvrat.Value)*Train.LK3.Value) + + S["2A"] = (T[2]+BO*Train.RO1.Value)*RUM + Train.PneumaticNo2:TriggerInput("Set",T[8]*(1-Train.LK4.Value)+T[39]) + + if KVL then + S["48A"] = C(P==4 and 1 <= RK and RK <= 5) + Train:WriteTrainWire(48,S["48A"]) + Train.PneumaticNo1:TriggerInput("Set",(S["2A"]*Train.PR.Value)*(T[48]*RUM+S["48A"])) + else + S["48A"] = C(P==4 and 1 <= RK and RK <= 5)+ARS[48]*Train.RCARS.Value + Train:WriteTrainWire(48,S["48A"]) + Train.PneumaticNo1:TriggerInput("Set",(S["2A"]*Train.PR.Value+T[44])*(T[48]*RUM+S["48A"])) + end + + Train.RZ_2:TriggerInput("Set",T[24]*RUM*(1-Train.LK4.Value)) --FIXME RDR + S["18A"] = RUM*(Train.RPvozvrat.Value*100+(1-Train.LK4.Value)) --FIXME RDR + Train:WriteTrainWire(18,S["18A"]) + Panel.TW18 = S["18A"] + + S["10A"] = BO*RUM + --РУТ + --СДРК + S["25B"] = Train.LK2.Value*(1-Train.TSH.Value) + S["25A"] = Train.KSH2.Value + Train["RUTreg"] = S["10A"]*(S["25B"]-S["25A"]) + S["10I"] = S["10A"]*RheostatController.RKM2 + Train["RUTpod"] = S["10I"]*Train.LK4.Value + + S["25A"] = T[25]*RUM + Train["RRTpod"] = S["25A"]*min(1,Train["RRTpod"]+S["10I"]) + Train.RRT:TriggerInput("Set",S["25A"]*Train["RRTpod"]) + + S["DT"] = BO*Train.BPT.Value + Panel.BrY = S["DT"] + Train:WriteTrainWire(34,S["DT"]) + + if KVL then + ARS.DT = S["DT"] + S["10B"] = S["10A"]*(Train.RV1.Value+Train.TSH.Value*(1-Train.KSH3.Value)) + else + S["10B"] = S["10A"]*(Train.RV1.Value+Train.TSH.Value) + end + RheostatController:TriggerInput("MotorCoilState",min(1,S["10A"]*(S["10B"]*Train.RR.Value - S["10B"]*(1-Train.RR.Value)))) + + S["10N"] = S["10A"]*(RheostatController.RKM1+Train.SR1.Value*(1-Train.RUT.Value)) + S["10T"] = --[[ S["10N"]*--]] ((1-Train.SR1.Value)+Train.RUT.Value)*RheostatController.RKP + RheostatController:TriggerInput("MotorState",S["10N"]+S["10T"]*(-10)) + --СДПП + S["10E"] = S["10A"]*((1-Train.LK3.Value)+Train.Rper.Value) + Train.SR2:TriggerInput("Set",S["10E"]*((C(P==3 or P==4)+Train.KSH2.Value*Train.LK5.Value))*(1-Train.LK4.Value)) + + S["10AD"] = (1-Train.LK1.Value)*Train.SR2.Value + + S["10AZh"] = S["10AD"]*Train.TSH.Value*C(P==1 or P==2 or P==4) + S["10AR"] = S["10AD"]*(1-Train.KSH3.Value)*(1-Train.TSH.Value)*C(2<=P and P<=4) + S["10Ya"] = Train.LK3.Value*C(RK==18 and (P==1 or P==3)) + + S["10AG"] = S["10E"]*(S["10AR"]+S["10AZh"]+S["10Ya"]) + Train.PositionSwitch:TriggerInput("MotorState",-1.0 + 2.0*math.max(0,S["10AG"])) + + if false and KVL then + S["2G"] = S["2A"]*(C(P==1 or P==3)*C(1<=RK and RK<=17)+C(P==2 or P==4)*(C(5<=RK and RK<=18)+C(2<=RK and RK<=4 and P==4))) --ВТФ КВЛ, почему нету ОП + else + S["2G"] = S["2A"]*(C(P==1 or P==3)*C(1<=RK and RK<=17)+C(P==2 or P==4)*(C(5<=RK and RK<=18)+C(2<=RK and RK<=4 and P==4)+Train.KSH1.Value*C(2<=RK and RK<=5 and P==2))) --ВТФ КВЛ, почему нету ОП + end + --S["2G"] = S["2A"]*(C(P==1 or P==3)*C(1<=RK and RK<=17)+C((P==2 or P==4) and 2 <= RK and RK <= 18)) + S["10AV"] = S["10A"]*(1-Train.LK3.Value)*C(2<=RK and RK<=18)*(1-Train.LK4.Value) + S["2E"] = S["2G"]*(1-Train.SR2.Value)*Train.LK4.Value+S["10AV"] + + Train.RV1:TriggerInput("Set",S["2E"]) + Train.SR1:TriggerInput("Set",S["2E"]*(1-Train.RRT.Value)) + + Train.Rper:TriggerInput("Set",(T[3]+BO*Train.RO2.Value)*RUM*C(17<=RK and RK<=18)) + + S["1P"] = (T[1]+BO*Train.RO1.Value)*RUM*C(P == 1 or P == 2)*Train.NR.Value + S["6A"] = T[6]*RUM--+S["1P"]*C(P==3 or P==4) + S["1G"] = (S["1P"]+S["6A"]*C(P==3 or P==4))*Train.AVT.Value*(1-Train.RPvozvrat.Value) + S["1Zh"] = S["1G"]*(Train.LK3.Value+Train.KSH2.Value*C(RK==1 and (P==1 or P==3))) + Train.LK3:TriggerInput("Set",S["1Zh"]) + Train.LK1:TriggerInput("Set",S["1Zh"]*C(P==1 or P==2)) + Train.RR:TriggerInput("Set",S["1Zh"]*C(P==1 or P==3)) + + Train.TSH:TriggerInput("Set",S["6A"]*Train.LK5.Value) + Train.PR:TriggerInput("Set",S["6A"]) + Train["RUTavt"] = S["6A"]*(1-Train.KSH2.Value) + + S["6K"] = S["6A"]*C(RK==1)*(1-Train.LK1.Value) + Train.KSH3:TriggerInput("Set",S["6K"]) + Train.KSH4:TriggerInput("Set",S["6K"]) + + S["20A"] = (T[20]+BO*Train.RO2.Value)*RUM + Train.LK2:TriggerInput("Set",S["20A"]*Train.LK1.Value*(1-Train.RPvozvrat.Value)) + Train.LK5:TriggerInput("Set",S["20A"]*(1-Train.RPvozvrat.Value)) + + Train.RPvozvrat:TriggerInput("Open",T[17]*RUM) --FIXME Mayve more right RP code + + Train.RO1:TriggerInput("Set",T[9]) + Train.RO2:TriggerInput("Set",T[9]*Train.RO1.Value) + S["20G"] = C(1<=RK and RK<=5 and (P==2 or P==3)) + S["20V"] = C((RK==1 or RK==18) and P==1)+S["20G"]*Train.KSH1.Value + S["20D"] = S["10A"]*(S["20G"]+S["20V"]*(1-Train.Rper.Value))*(Train.LK5.Value+Train.LK4.Value) + Train.KSH2:TriggerInput("Set",S["20D"]) + Train.KSH1:TriggerInput("Set",S["20D"])--+S["20V"]*(1-Train.Rper.Value)) + + --Ð’Ñпом цепи низкого напрÑÐ¶ÐµÐ½Ð¸Ñ + Train:WriteTrainWire(11,BO*Train.VU2.Value) + Train:WriteTrainWire(23,BO*Train.VMK.Value) + Train:WriteTrainWire(22,T[23]*Train.AK.Value) + + Train:WriteTrainWire(27,BO*Train.LOn.Value) + Train:WriteTrainWire(28,BO*Train.LOff.Value) + + S["F7"] = BO*KV["F-F7"] + if KVL then + Panel.Headlights1 = S["F7"] + Panel.Headlights2 = S["F7"]*Train.VUS.Value + else + Panel.Headlights1 = S["F7"]*Train.Headlights.Value + Panel.Headlights2 = S["F7"]*Train.VUS.Value + end + + S["F1"] = (B*Train.VKF.Value+BO*(1-Train.VKF.Value))*KV["B2-F1"] + if KVL then + ARS.F1 = S["F1"] + Train:WriteTrainWire(42,BO*Train.Ring.Value+T[11]*Train.BD2.Value+ARS.Ring) + Train:WriteTrainWire(44,S["F1"]*C(RK==1 and P==4)) + Train:WriteTrainWire(46,S["F1"]*C(1<=RK and RK<=17 and P==3)) --FIXME RCA + ARS[44] = T[44] + ARS[46] = T[46] + --print(S["F1"]*C(RK==1 and P==4)) + Panel.RedLights = S["F1"]+T[44] + else + Train:WriteTrainWire(42,S["F1"]*Train.Ring.Value+T[11]*Train.BD2.Value+ARS.Ring*Train.RCARS.Value) + Panel.RedLights = S["F1"] + end + + S["D1"] = BO*KV["D-D1"] + if KVL then + S[31] = S["D1"]*(Train.KDL.Value) + S[32] = S["D1"]*(Train.KDP.Value) + local RCA = Train.RCAV3.Value + Train:WriteTrainWire(31,S["D1"]*(Train.VDL.Value+Train.KRZD.Value)+(ARS[31]*RCA+S[31]*(1-RCA))) --FIXME AV + Train:WriteTrainWire(32,S["D1"]*(Train.KRZD.Value)+(ARS[32]*RCA+S[32]*(1-RCA))) --FIXME AV + Train:WriteTrainWire(16,S["D1"]*Train.VUD.Value+ARS[16]) --FIXME AV + Train:WriteTrainWire(45,S["D1"]*Train.KDPH.Value) + ARS["31"] = S[31] + ARS["32"] = S[32] + ARS["16"] = T[16] + else + S[31] = S["D1"]*(Train.KDL.Value) + S[32] = S["D1"]*(Train.KDP.Value) + Train:WriteTrainWire(31,S["D1"]*(Train.KDL.Value+Train.VDL.Value+Train.KRZD.Value)) + Train:WriteTrainWire(32,S["D1"]*(Train.KDP.Value+Train.KRZD.Value)) + Train:WriteTrainWire(16,S["D1"]*Train.VUD.Value) --FIXME AV + Train:WriteTrainWire(45,S["D1"]*Train.KDPH.Value) + end + Panel.AnnouncerPlaying = T[13] + Train:WriteTrainWire(24,T[20]*Train.KSN.Value) + if KVL then + Train:WriteTrainWire(19,BO*KV["D4-19"]*Train.RD.Value) + S[15] = T[19]*Train.RD.Value*KV["D4-15"] + Train:WriteTrainWire(-15,S[15]) + Train:WriteTrainWire(15,Train.RD.Value) + else + Train:WriteTrainWire(19,T[16]*KV["D4-19"]*Train.RD.Value) + S[15] = T[19]*Train.RD.Value*KV["D4-15"] + Train:WriteTrainWire(-15,S[15]) + Train:WriteTrainWire(15,Train.RD.Value) + end + Panel.SSD = (S[15]+T[-15]*T[15]) + Train.KD:TriggerInput("Set",Panel.SSD) + + S["11A"] = T[11]*(1-Train.NR.Value) + Panel.EmergencyLights1 = BO*Train.VU3.Value+S["11A"]*(1-Train.VU3.Value) + Panel.EmergencyLights2 = S["11A"] + --Panel.Ring = S["11A"]*T[42] + Panel.MainLights1 = math.max(0,math.min(1, + ( + self.Aux750V-100 + -self.Itotal*0.25*C(Train.PositionSwitch.SelectedPosition >= 3) + -25*Train.KK.Value + )/750*(0.5+0.5*B*Train.VB.Value*Train.KZ1.Value) + )) + Panel.MainLights2 = Panel.MainLights1*Train.KO.Value + Panel.VPR = B*(1-Train.VR.Value)+T[10]*Train.VR.Value + + Panel.Ring = T[42] + Train.KK:TriggerInput("Set",T[22]*(1-Train.TRK.Value)) + Train.KO:TriggerInput("Close",T[27]) + Train.KO:TriggerInput("Open",T[28]) + + Train.RD:TriggerInput("Set",BO*Train.BD.Value) + if KVL then + Panel.DoorsWC = BO*(1-Train.RD.Value)*Train.KSD.Value + Panel.DoorsW = BO*(1-Train.RD.Value) + else + Panel.DoorsWC = BO*(1-Train.RD.Value)*Train.KSD.Value + Panel.DoorsW = BO*(1-Train.RD.Value) + end + Panel.GreenRP = BO*Train.RPvozvrat.Value + --Panel.SSD = (S["D1"]+T[10]*Train.KU11.Value)*(T[15]*(1-Train.KU11.Value)+BD) + Train.VDZ:TriggerInput("Set",T[16]*(1-Train.RD.Value)) + Train.VDOL:TriggerInput("Set",T[31]) + Train.VDOP:TriggerInput("Set",(T[32]+T[45])) + --Схема подзарÑда + Train:WriteTrainWire(40,BO*Train.VSOSD.Value) + Train:WriteTrainWire(12,T[40]*(1-Train.VSOSD.Value)) + Panel.SOSD = T[12]*(1-Train.KD.Value) + Train.Scheme = S + return S +end + +function TRAIN_SYSTEM:SolveRKInternalCircuits(Train, dT) + ---[[ + local RheostatController = Train.RheostatController + local P = Train.PositionSwitch.SelectedPosition + local RK = RheostatController.SelectedPosition + local B = (Train.Battery.Voltage > 55) and 1 or 0 + local T = Train.SolverTemporaryVariables + + local elType = self.Type + local KVL = elType == 2 + + local BO = min(1,B * Train.VB.Value+T[10]) + local RUM = Train.KV.RCU + + + S["10A"] = BO*RUM + S["25B"] = Train.LK2.Value*(1-Train.TSH.Value) + S["25A"] = Train.KSH2.Value + Train["RUTreg"] = S["10A"]*(S["25B"]-S["25A"]) + S["10I"] = S["10A"]*RheostatController.RKM2 + Train["RUTpod"] = S["10I"]*Train.LK4.Value + + S["25A"] = T[25]*RUM + Train["RRTpod"] = S["25A"]*min(1,Train["RRTpod"]+S["10I"]) + Train.RRT:TriggerInput("Set",S["25A"]*Train["RRTpod"]) + + if KVL then + S["10B"] = S["10A"]*(Train.RV1.Value+Train.TSH.Value*(1-Train.KSH3.Value)) + else + S["10B"] = S["10A"]*(Train.RV1.Value+Train.TSH.Value) + end + RheostatController:TriggerInput("MotorCoilState",min(1,S["10A"]*(S["10B"]*Train.RR.Value - S["10B"]*(1-Train.RR.Value)))) + + S["10N"] = S["10A"]*(RheostatController.RKM1+Train.SR1.Value*(1-Train.RUT.Value)) + S["10T"] = --[[ S["10N"]*--]] ((1-Train.SR1.Value)+Train.RUT.Value)*RheostatController.RKP + RheostatController:TriggerInput("MotorState",S["10N"]+S["10T"]*(-10)) + --СДПП + S["10E"] = S["10A"]*((1-Train.LK3.Value)+Train.Rper.Value) + Train.SR2:TriggerInput("Set",S["10E"]*((C(P==3 or P==4)+Train.KSH2.Value*Train.LK5.Value))*(1-Train.LK4.Value)) + + S["10AD"] = (1-Train.LK1.Value)*Train.SR2.Value + + S["10AZh"] = S["10AD"]*Train.TSH.Value*C(P==1 or P==2 or P==4) + S["10AR"] = S["10AD"]*(1-Train.KSH3.Value)*(1-Train.TSH.Value)*C(2<=P and P<=4) + S["10Ya"] = Train.LK3.Value*C(RK==18 and (P==1 or P==3)) + + S["10AG"] = S["10E"]*(S["10AR"]+S["10AZh"]+S["10Ya"]) + Train.PositionSwitch:TriggerInput("MotorState",-1.0 + 2.0*math.max(0,S["10AG"])) + + S["2A"] = (T[2]+BO*Train.RO1.Value)*RUM + if false and KVL then + S["2G"] = S["2A"]*(C(P==1 or P==3)*C(1<=RK and RK<=17)+C(P==2 or P==4)*(C(5<=RK and RK<=18)+C(2<=RK and RK<=4 and P==4))) --ВТФ КВЛ, почему нету ОП + else + S["2G"] = S["2A"]*(C(P==1 or P==3)*C(1<=RK and RK<=17)+C(P==2 or P==4)*(C(5<=RK and RK<=18)+C(2<=RK and RK<=4 and P==4)+Train.KSH1.Value*C(2<=RK and RK<=5 and P==2))) --ВТФ КВЛ, почему нету ОП + end + --S["2G"] = S["2A"]*(C(P==1 or P==3)*C(1<=RK and RK<=17)+C((P==2 or P==4) and 2 <= RK and RK <= 18)) + S["10AV"] = S["10A"]*(1-Train.LK3.Value)*C(2<=RK and RK<=18)*(1-Train.LK4.Value) + S["2E"] = S["2G"]*(1-Train.SR2.Value)*Train.LK4.Value+S["10AV"] + + Train.RV1:TriggerInput("Set",S["2E"]) + Train.SR1:TriggerInput("Set",S["2E"]*(1-Train.RRT.Value)) + + Train.Rper:TriggerInput("Set",(T[3]+BO*Train.RO2.Value)*RUM*C(17<=RK and RK<=18)) + + S["1P"] = (T[1]+BO*Train.RO1.Value)*RUM*C(P == 1 or P == 2)*Train.NR.Value + S["6A"] = T[6]*RUM--+S["1P"]*C(P==3 or P==4) + S["1G"] = (S["1P"]+S["6A"]*C(P==3 or P==4))*Train.AVT.Value*(1-Train.RPvozvrat.Value) + S["1Zh"] = S["1G"]*(Train.LK3.Value+Train.KSH2.Value*C(RK==1 and (P==1 or P==3))) + Train.RR:TriggerInput("Set",S["1Zh"]*C(P==1 or P==3)) + + return S +end +local wires = {1,2,3,4,5,6,8,9,10,11,12,13,-15,15,16,17,18,19,20,22,23,24,25,27,28,29,30,31,32,34,39,40,42,44,45,46,48,} +function TRAIN_SYSTEM:SolveInternalCircuits(Train,dT,firstIter) + local T = Train.SolverTemporaryVariables + if not T then + T = {} + for i,v in ipairs(wires) do T[v] = 0 end + Train.SolverTemporaryVariables = T + end + if firstIter then + for i,v in ipairs(wires) do T[v] = min(Train:ReadTrainWire(v),1) end + self:SolveAllInternalCircuits(Train,dT) + else + self:SolveRKInternalCircuits(Train,dT) + end +end +--[[ +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:SolvePowerCircuits(Train,dT,iter) + self.ExtraResistanceLK5 = Train.KF_47A["L4-L5"]*(1-Train.LK5.Value) + self.ExtraResistanceLK2 = Train.KF_47A["L1-L2"]*(1-Train.LK2.Value) + if Train.PositionSwitch.SelectedPosition == 1 then -- PP + self.R1 = Train.ResistorBlocks.R1C1(Train) + self.R2 = Train.ResistorBlocks.R2C1(Train) + self.R3 = 0.0 + elseif Train.PositionSwitch.SelectedPosition == 2 then -- PP + self.R1 = Train.ResistorBlocks.R1C2(Train) + self.R2 = Train.ResistorBlocks.R2C2(Train) + self.R3 = 0.0 + elseif Train.PositionSwitch.SelectedPosition >= 3 then -- PT + self.R1 = Train.ResistorBlocks.R1C3(Train) + self.R2 = Train.ResistorBlocks.R2C3(Train) + self.R3 = 0.0 + else + self.R1 = 1e9 + self.R2 = 1e9 + self.R3 = 1e9 + end + -- Apply LK3, LK4 contactors + self.R1 = self.R1 + 1e9*(1 - Train.LK3.Value) + self.R2 = self.R2 + 1e9*(1 - Train.LK4.Value) + + -- Shunt resistance + self.Rs1 = Train.ResistorBlocks.S1(Train) + 1e9*(1 - Train.KSH1.Value) + self.Rs2 = Train.ResistorBlocks.S2(Train) + 1e9*(1 - Train.KSH2.Value) + + -- Calculate total resistance of engines winding + local RwAnchor = Train.Engines.Rwa*2 -- Double because each set includes two engines + local RwStator = Train.Engines.Rws*2 + -- Total resistance of the stator + shunt + self.Rstator13 = (RwStator^(-1) + self.Rs1^(-1))^(-1) + self.Rstator24 = (RwStator^(-1) + self.Rs2^(-1))^(-1) + -- Total resistance of entire motor + self.Ranchor13 = RwAnchor + self.Ranchor24 = RwAnchor + + if Train.PositionSwitch.SelectedPosition == 1 then -- PS + self:SolvePS(Train) + elseif Train.PositionSwitch.SelectedPosition == 2 then -- PS + self:SolvePP(Train) + else + self:SolvePT(Train) + end + + -- Calculate current through rheostats 1, 2 + self.IR1 = self.I13 + self.IR2 = self.I24 + + -- Calculate induction properties of the motor + self.I13SH = self.I13SH or self.I13 + self.I24SH = self.I24SH or self.I24 + + -- Time constant + local T13const1 = math.max(16.00,math.min(28.0,(self.R13^2) * 2.0)) -- R * L + local T24const1 = math.max(16.00,math.min(28.0,(self.R24^2) * 2.0)) -- R * L + + -- Total change + local dI13dT = T13const1 * (self.I13 - self.I13SH) * dT + local dI24dT = T24const1 * (self.I24 - self.I24SH) * dT + + -- Limit change and apply it + if dI13dT > 0 then dI13dT = math.min(self.I13 - self.I13SH,dI13dT) end + if dI13dT < 0 then dI13dT = math.max(self.I13 - self.I13SH,dI13dT) end + if dI24dT > 0 then dI24dT = math.min(self.I24 - self.I24SH,dI24dT) end + if dI24dT < 0 then dI24dT = math.max(self.I24 - self.I24SH,dI24dT) end + self.I13SH = self.I13SH + dI13dT + self.I24SH = self.I24SH + dI24dT + self.I13 = self.I13SH + self.I24 = self.I24SH + + -- Re-calculate total current and simulate infinite resistance in circuit + if Train.PositionSwitch.SelectedPosition == 1 then -- PS + self.I13 = self.I13 * (Train.LK3.Value * Train.LK4.Value * Train.LK1.Value) + self.I24 = self.I24 * (Train.LK3.Value * Train.LK4.Value * Train.LK1.Value) + + self.I24 = (self.I24 + self.I13)*0.5 + self.I13 = self.I24 + self.Itotal = self.I24 + self.Magnetization = 0 + elseif Train.PositionSwitch.SelectedPosition == 2 then -- PS + self.I13 = self.I13 * Train.LK3.Value * Train.LK4.Value * Train.LK1.Value + self.I24 = self.I24 * Train.LK3.Value * Train.LK4.Value * Train.LK1.Value + + self.Itotal = self.I13 + self.I24 + self.Magnetization = 0 + else -- PT + self.I13 = self.I13 * Train.LK3.Value*Train.LK4.Value + self.I24 = self.I24 * Train.LK4.Value*Train.LK3.Value + + self.Itotal = self.I13 + self.I24 + self.Magnetization = self.Main750V*Train.TSH.Value/8*Train.AV.Value + end + + -- Calculate extra information + self.Uanchor13 = self.I13 * self.Ranchor13 + self.Uanchor24 = self.I24 * self.Ranchor24 + + + ---------------------------------------------------------------------------- + -- Calculate current through stator and shunt + self.Ustator13 = self.I13 * self.Rstator13 + self.Ustator24 = self.I24 * self.Rstator24 + self.Ishunt13 = (self.Ustator13) / self.Rs1 + self.Istator13 = (self.Ustator13) / RwStator + self.Ishunt24 = (self.Ustator24) / self.Rs2 + self.Istator24 = (self.Ustator24) / RwStator + + if Train.PositionSwitch.SelectedPosition >= 3 then + local I1,I2 = self.Ishunt13,self.Ishunt24 + self.Ishunt13 = -I2 + self.Ishunt24 = -I1 + + I1,I2 = self.Istator13,self.Istator24 + self.Istator13 = -I2 + self.Istator24 = -I1 + end + + -- Calculate current through RT2 relay + if Train.PositionSwitch.SelectedPosition >= 3 then + self.IRT2 = math.abs(self.Itotal) + else + self.IRT2 = 0 + end + + -- Sane checks + if self.R1 > 1e5 then self.IR1 = 0 end + if self.R2 > 1e5 then self.IR2 = 0 end + + -- Calculate power and heating + local K = 12.0*1e-5 + local H = (10.00+(15.00*Train.Engines.Speed/80.0))*1e-3 + self.P1 = (self.IR1^2)*self.R1 + self.P2 = (self.IR2^2)*self.R2 + --self.T1 = (self.T1 + self.P1*K*dT - (self.T1-25)*H*dT) + --self.T2 = (self.T2 + self.P2*K*dT - (self.T2-25)*H*dT) + self.Overheat1 = math.min(1-1e-12, + self.Overheat1 + math.max(0,(math.max(0,self.T1-750.0)/400.0)^2)*dT ) + self.Overheat2 = math.min(1-1e-12, + self.Overheat2 + math.max(0,(math.max(0,self.T2-750.0)/400.0)^2)*dT ) + + -- Energy consumption + self.ElectricEnergyUsed = self.ElectricEnergyUsed + math.max(0,self.EnergyChange)*dT + self.ElectricEnergyDissipated = self.ElectricEnergyDissipated + math.max(0,-self.EnergyChange)*dT +end +--]] +local Cosumers = { + LK1 = 0.05, + LK2 = 0.05, + LK3 = 0.05, + LK4 = 0.05, + LK5 = 0.05, + KSH1 = 0.05, + KSH2 = 0.05, + KSH3 = 0.05, + KSH4 = 0.05, + TSH = 0.05, + PR = 0.02, + RV1 = 0.02, + SR1 = 0.02, + SR2 = 0.02, + PneumaticNo1 = 0.03, + PneumaticNo2 = 0.03, + Rper = 0.03, + RRT = 0.03, + VDOL = 0.03, + VDOP = 0.03, + VDZ = 0.03, +} +function TRAIN_SYSTEM:Think(dT,iter) + local Train = self.Train + if not self.ResistorBlocksInit then + self.ResistorBlocksInit = true + self.Train.YAR_13A.NoRRT = true + Train:LoadSystem("ResistorBlocks","Gen_Res_703") + end + if iter == 1 then Train.ResistorBlocks.InitializeResistances_81_703(Train) end + ---------------------------------------------------------------------------- + -- Voltages from the third rail + ---------------------------------------------------------------------------- + self.Main750V = Train.TR.Main750V + self.Aux750V = Train.TR.Main750V*Train.AV.Value + self.Power750V = self.Main750V * Train.GV.Value + + + ---------------------------------------------------------------------------- + -- Solve circuits + ---------------------------------------------------------------------------- + self:SolvePowerCircuits(Train,dT,iter==1) + self:SolveInternalCircuits(Train,dT,iter==1) + if iter==1 then + --local time = SysTime() + local count = 0 + for k,v in pairs(Cosumers) do + count = count + Train[k].Value*v + end + count = count + math.abs(Train.RheostatController.Velocity*0.015) + count = count + math.abs(Train.PositionSwitch.Velocity*0.02) + count = count + math.abs(Train.Reverser.Speed) + self.Cosume = count + end + + ---------------------------------------------------------------------------- + -- Calculate current flow out of the battery + ---------------------------------------------------------------------------- + --local totalCurrent = 5*A30 + 63*A24 + 16*A44 + 5*A39 + 10*A80 + --local totalCurrent = 20 + 60*DIP +end +--[[ +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:SolvePS(Train) + -- Calculate total resistance of the entire series circuit + local Rtotal = self.Ranchor13 + self.Ranchor24 + self.Rstator13 + self.Rstator24 + + self.R1 + self.R2 + self.R3 + self.ExtraResistanceLK2 + local CircuitClosed = (self.Power750V*Train.LK1.Value > 0) and 1 or 0 + + -- Calculate total current + self.Utotal = (self.Power750V - Train.Engines.E13 - Train.Engines.E24)*Train.LK1.Value + self.Itotal = (self.Utotal / Rtotal)*CircuitClosed + + -- Total resistance (for induction RL circuit) + self.R13 = Rtotal + self.R24 = Rtotal + + -- Calculate everything else + self.I13 = self.Itotal + self.I24 = self.Itotal + self.U13 = self.Utotal*(1/2) + self.U24 = self.Utotal*(1/2) + + -- Energy consumption + self.EnergyChange = math.abs((self.Itotal^2)*Rtotal) +end + +function TRAIN_SYSTEM:SolvePP(Train) + -- Temporary hack for transition to parallel circuits + local extraR = 0.00 --inTransition and 0.909 or 0.00 + + -- Calculate total resistance of each branch + local R1 = self.Ranchor13 + self.Rstator13 + self.R1 + extraR + self.ExtraResistanceLK2 + local R2 = self.Ranchor24 + self.Rstator24 + self.R2 + extraR + self.ExtraResistanceLK2 + local R3 = 0 + local CircuitClosed = (self.Power750V*Train.LK1.Value > 0) and 1 or 0 + + -- Main circuit parameters + local V = self.Power750V*Train.LK1.Value + local E1 = Train.Engines.E13 + local E2 = Train.Engines.E24 + -- Calculate current through engines 13, 24 + self.I13 = -((E1*R2 + E1*R3 - E2*R3 - R2*V)/(R1*R2 + R1*R3 + R2*R3))*CircuitClosed + self.I24 = -((E2*R1 - E1*R3 + E2*R3 - R1*V)/(R1*R2 + R1*R3 + R2*R3))*CircuitClosed + + -- Total resistance (for induction RL circuit) + self.R13 = R1 + self.R24 = R2 + + -- Calculate everything else + self.U13 = self.I13*R1 + self.U24 = self.I24*R2 + self.Utotal = (self.U13 + self.U24)/2 + self.Itotal = self.I13 + self.I24 + + -- Energy consumption + self.EnergyChange = math.abs((self.I13^2)*R1) + math.abs((self.I24^2)*R2) +end + +function TRAIN_SYSTEM:SolvePT(Train) + -- Winding resistances + local R1 = self.Ranchor13 + self.Rstator13 + self.ExtraResistanceLK5 + local R2 = self.Ranchor24 + self.Rstator24 + self.ExtraResistanceLK5 + -- Total resistance of the entire braking rheostat + local R3 = self.R1 + self.R2 + self.R3 + + -- Main circuit parameters + local V = self.Power750V*Train.LK1.Value + local E1 = Train.Engines.E13 + local E2 = Train.Engines.E24 + + -- Calculate current through engines 13, 24 + self.I13 = -((E1*R2 + E1*R3 - E2*R3 - R2*V)/(R1*R2 + R1*R3 + R2*R3))*(Train.BV and Train.BV.State or 1) + self.I24 = -((E2*R1 - E1*R3 + E2*R3 - R1*V)/(R1*R2 + R1*R3 + R2*R3))*(Train.BV and Train.BV.State or 1) + + -- Total resistance (for induction RL circuit) + self.R13 = R3+((R1^(-1) + R2^(-1))^(-1)) + self.R24 = R3+((R1^(-1) + R2^(-1))^(-1)) + -- Calculate everything else + self.U13 = self.I13*R1 + self.U24 = self.I24*R2 + self.Utotal = (self.U13 + self.U24)/2 + self.Itotal = self.I13 + self.I24 + + -- Energy consumption + self.EnergyChange = -math.abs(((0.5*self.Itotal)^2)*self.R13) +end +--]] \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_81_502_ksaup.lua b/lua/metrostroi/systems/sys_81_502_ksaup.lua new file mode 100644 index 0000000..7dc8de9 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_502_ksaup.lua @@ -0,0 +1,212 @@ +-------------------------------------------------------------------------------- +-- "KSAUP" safety system for 81-502 +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_502_KSAUP") + +function TRAIN_SYSTEM:Initialize() + self.Power = 0 + + self.SpeedoTimer = 0--CurTime() + self.Speed = 0 + + --Inputs + self.KZP = 0 + self.KDZ = 0 + self.KRR = 0 + self.KRR2 = 0 + self.KOS = 0 + self.DT = 0 + self.VRD = 0 + + self.F1 = 0 + + self["1"] = 0 + self["17"] = 0 + self["6"] = 0 + self["2"] = 0 + self["20"] = 0 + self["25"] = 0 + self["3"] = 0 + self[44] = 0 + self[46] = 0 + self["31"] = 0 + self["32"] = 0 + self["16"] = 0 + --Outputs + self[1] = 0 + self[2] = 0 + self[3] = 0 + self[6] = 0 + self[8] = 0 + self["8a"] = 0 + self[17] = 0 + self[20] = 0 + self[25] = 0 + self[31] = 0 + self[32] = 0 + self[16] = 0 + + self.Ring = 0 + + self.RD = 0 + self.DoorsLeft = 0 + self.DoorsRight = 0 +end +function TRAIN_SYSTEM:ClientInitialize() +end + +function TRAIN_SYSTEM:Inputs() + return { + "CommandDoorsLeft","CommandDoorsRight", + "CommandDrive", "CommandBrake","CommandBrakeCount","CommandBrakeElapsed" + } +end +function TRAIN_SYSTEM:Outputs() + return { "Power","Speed" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "CommandDoorsLeft" then self.DoorsLeft = value end + if name == "CommandDoorsRight" then self.DoorsRight = value end +end + +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + if Train.Electric.Type ~= 2 then return end + local ALS = Train.ALSCoil + local speed = math.Round(ALS.Speed or 0,1) + + self.SpeedoTimer = self.SpeedoTimer or CurTime() + if CurTime()-self.SpeedoTimer > 0.4 then + local time = (CurTime()-self.SpeedoTimer) + self.Speed = math.max(0,self.Speed+(speed-self.Speed)*(0.4+math.max(0,math.min((self.Speed-5)*0.2,0.4)))) + self.SpeedoTimer = CurTime() + end + + local Power = self.Power > 0 + local RR = Power and self.KRR > 0 + -- ALS, ARS state + --local EnableARS = power and RVForward and (not Train.A42 or Train.A42.Value > 0) and Train.ARS.Value > 0 + --local EnableALS = power and (not Train.A43 or Train.A43.Value > 0) and Train.ALS.Value > 0 + local ALSCoils = (Power and(RR or self.KRR2==0)) and 1 or 0 + if ALSCoils ~= ALS.Enabled then + ALS:TriggerInput("Enable",ALSCoils) + end + --ALS + + self.KVT = self.KOS > 0 + local ring = false + local brake = false + if RR then + local Vlimit = 0 + if ALS.F4 > 0 then Vlimit = 40 end + if ALS.F3 > 0 then Vlimit = 60 end + if ALS.F2 > 0 then Vlimit = 70 end + if ALS.F1 > 0 then Vlimit = 80 end + if self.RD > 0 then Vlimit = 0 end + if self.KOS > 0 and (ALS.F5 == 0 or ALS.F6 > 0 or self.RD > 0) then Vlimit = 20 end + -- Determine next limit and current limit + + if ALS.F5 > 0 and self.F5Ring == nil then self.F5Ring = true end + if ALS.F5 <= 0 and self.F5Ring ~= nil then self.F5Ring = nil end + if self.F5Ring and speed < 0.1 then self.F5Ring = false end + + -- Enable PV1 and disassembly when we overspeed + if speed > Vlimit+0.5 and not self.ElectricBrake then + self.ElectricBrake = true + self.Alarm = true + end + if self.KVT then + self.Alarm = false + end + --We can disable brake, if speed < Vdop and electric brake + if speed <= Vlimit-2.5 and self.ElectricBrake and not self.Alarm then + self.ElectricBrake = false + self.Alarm = false + end + if speed < 1 then + if Vlimit >= 20 and self["1"] > 0 or self["6"] > 0 and self.KVT then + self.RollingBrake = false + elseif self["1"] == 0 then + self.RollingBrake = true + end + elseif self.KVT or self["1"] > 0 then + self.RollingBrake = false + elseif speed < 12 then + self.RollingBrake = true + end + + ring = self.Alarm or self.F5Ring or Vlimit == 20 and speed > Vlimit + + if speed > 0 or self.DT <= 0 then + self[16] = 1 + else + self[16] = 0 + end + else + self.SpeedLimit = 0 + self.ElectricBrake = false + self.RollingBrake = false + self.Alarm = false + self.F5Ring = nil + self[16] = 0 + end + if Power then + local NoFreq = math.max(0,1-(ALS.F5+ALS.F4+ALS.F3+ALS.F2+ALS.F1+ALS.F6)) + if self.VRD > 0 and ALS.F5 > 0 and ALS.F6 == 0 then self.RD = 1 end + if ALS.F5 == 0 or ALS.F6 > 0 then self.RD = 0 end + local Brake = (self.ElectricBrake or self.RollingBrake) and 1 or 0 + local Drive = 1*(1-Brake) + + if Brake > 0 and self.BrakeT == 0 and not self.BrakeTTimer then self.BrakeTTimer= CurTime() end + if Brake <= 0 and self.BrakeTTimer then + self.BrakeTTimer = nil + self.BrakeT = 0 + end + if self.BrakeTTimer and CurTime()-self.BrakeTTimer > 2 then self.BrakeT = 1 end + self.BrakeT = self.BrakeT or 0 + self[1] = self["1"]*Drive + self[2] = self["2"]+self.BrakeT + self[3] = Brake + if not RR then + self[8] = 0--self.KRR2 == 0 and 1 or 0 + self[6]= 0 + elseif Brake > 0 and speed < 1 then + if self[6] > 0 then + self.BrakeTTimer = CurTime()-1.6 + self.BrakeT = 0 + end + self[8] = self.BrakeT + self[6] = 0 + else + self[8] = Brake*self.BrakeT + self[6] = Brake + end + self[17] = self["17"]*(1-self[6]) + self[20] = self["20"]+Brake + self[25] = self["25"]*(1-Brake) + self[31] = self["31"]*(1-self["16"])*(self.DoorsLeft+NoFreq) + self[32] = self["32"]*(1-self["16"])*(self.DoorsRight+NoFreq) + + self.Ring = (ring) and 1 or 0 + + self["8a"] = self.KRR + else + self[1] = 0 + self[2] = 0--self["2"] + self[3] = 0 + self[8] = 0 + self["8a"] = 0 + self[6] = 0 + self[17] = 0--self["17"] + self[20] = 0--self["20"] + self[25] = 0--self["25"] + self[31] = self["31"] --0 + self[32] = self["32"] --0 + + self.Ring = 0 + end +end diff --git a/lua/metrostroi/systems/sys_81_502_panel.lua b/lua/metrostroi/systems/sys_81_502_panel.lua new file mode 100644 index 0000000..f5bbb0f --- /dev/null +++ b/lua/metrostroi/systems/sys_81_502_panel.lua @@ -0,0 +1,121 @@ +-------------------------------------------------------------------------------- +-- 81-502 controller panel +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_502_Panel") + +function TRAIN_SYSTEM:Initialize() + -- Выключатель батареи (ВБ) + self.Train:LoadSystem("VB","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VBA","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VR","Relay","Switch", {bass = true}) + self.Train:LoadSystem("AV","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VRD","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("VRU","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KAD","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KAH","Relay","Switch", {bass = true}) + self.Train:LoadSystem("OVT","Relay","Switch", {bass = true,normally_closed = true}) + self.Train:LoadSystem("KSD","Relay","Switch", {bass = true}) --??? + self.Train:LoadSystem("KPVU","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VKF","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("VU","Relay","Switch", {bass = true,normally_closed = true}) + + self.Train:LoadSystem("VU1","Relay","Switch", {bass = true}) --Heater + self.Train:LoadSystem("VU2","Relay","Switch", {bass = true}) --EmergencyLights + self.Train:LoadSystem("VU3","Relay","Switch", {bass = true}) --CabLights + + self.Train:LoadSystem("KOS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VZP","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VZD","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KRZD","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KDL","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KDLK","Relay","Switch", {bass = true}) + self.Train:LoadSystem("LOn","Relay","Switch", {bass = true}) + self.Train:LoadSystem("LOff","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VozvratRP","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KSN","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KDP","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KDPK","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VMK","Relay","Switch", {bass = true}) + self.Train:LoadSystem("Ring","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VUS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VAK","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VAKK","Relay","Switch", {bass = true}) + self.Train:LoadSystem("Autodrive","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VUD","Relay","Switch", {bass = true,normally_closed=true}) + -- Педаль бдительноÑти (ПБ) + self.Train:LoadSystem("PB","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("R_UPO","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("ALS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("ARS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("Headlights","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VSOSD","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KB","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("VDL","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KDPH","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("RCARS","Relay","Switch", {bass = true,normally_closed = true}) + self.Train:LoadSystem("RCBPS","Relay","Switch", {bass = true,normally_closed = true}) + + self.Train:LoadSystem("RCAV4","Relay","Switch", {bass = true,normally_closed = true}) + self.Train:LoadSystem("RCAV3","Relay","Switch", {bass = true,normally_closed = true}) + self.Train:LoadSystem("RCAV5","Relay","Switch", {bass = true,normally_closed = true}) + + self.Train:LoadSystem("PanelLamp","Relay","Switch", {bass = true, normally_closed=true}) + + self.V1 = 0 + + self.S4 = 0 + self.S5 = 0 + self.S20 = 0 + self.S6 = 0 + self.S1 = 0 + self.S1P = 0 + self.S3 = 0 + self.S2 = 0 + self.SSN = 0 + self.SSD = 0 + self.SDT = 0 + self.LMK = 0 + self.L16 = 0 + self.LRU = 0 + self.TW18 = 0 + self.RD = 0 + + self.Headlights1 = 0 + self.Headlights2 = 0 + self.RedLights = 0 + self.EmergencyLights1 = 0 + self.EmergencyLights2 = 0 + self.MainLights1 = 0 + self.MainLights2 = 0 + self.PanelLights = 0 + + self.SOSD = 0 + + self.Ring = 0 + + self.BrY = 0 + self.DoorsW = 0 + self.DoorsWC = 0 + self.GreenRP = 0 + + self.VPR = 0 + + self.NMLow = 0 + self.UAVATriggered = 0 + + self.AnnouncerPlaying = 0 + self.UPOPower = 0 +end + +function TRAIN_SYSTEM:Outputs() + return { "V1","GreenRP","S4","S5","S20","S6","S1","S1P","S3","S2","SSN","SSD","SDT","LMK","L16","LRU","TW18","Headlights1","Headlights2","RedLights","EmergencyLights1","EmergencyLights2","MainLights1","MainLights2","Ring","BrY","DoorsW","DoorsWC","SOSD","VRD","RD","NMLow","UAVATriggered","VPR","AnnouncerPlaying","UPOPower"} +end diff --git a/lua/metrostroi/systems/sys_81_508_panel.lua b/lua/metrostroi/systems/sys_81_508_panel.lua new file mode 100644 index 0000000..1e49550 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_508_panel.lua @@ -0,0 +1,87 @@ +-------------------------------------------------------------------------------- +-- 81-508 controller panel +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2019 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_508_Panel") + +function TRAIN_SYSTEM:Initialize() + -- Выключатель батареи (ВБ) + self.Train:LoadSystem("VB","Relay","Switch", {bass = true}) + self.Train:LoadSystem("AV","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("VU","Relay","Switch", {bass = true,normally_closed = true}) + + self.Train:LoadSystem("VU1","Relay","Switch", {bass = true}) --Heater + self.Train:LoadSystem("VU2","Relay","Switch", {bass = true}) --EmergencyLights + self.Train:LoadSystem("VU3","Relay","Switch", {bass = true}) --CabLights + + -- Buttons on the panel + self.Train:LoadSystem("DoorSelect","Relay","Switch", {bass = true, normally_closed = false }) + self.Train:LoadSystem("KU4","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU5","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU9","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU14","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU15","Relay","Switch", {bass = true}) + self.Train:LoadSystem("UV1","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU1","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU16","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU2","Relay","Switch", {bass = true }) + self.Train:LoadSystem("KU3","Relay","Switch", { normally_closed = true, bass = true }) -- Doors close + self.Train:LoadSystem("KU3L","Relay","Switch", { bass = true }) -- Doors close + self.Train:LoadSystem("KU13","Relay","Switch", {bass = true}) -- Doors left open + self.Train:LoadSystem("KU6","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU7","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU10","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU10R","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU8","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU11","Relay","Switch", {bass = true}) --Door sig + + self.Train:LoadSystem("KRR","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("OtklAVU","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("R_Program1","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_Program1H","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_Program2H","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("RST","Relay","Switch", {bass = true, normally_closed = true}) + self.Train:LoadSystem("50V","Relay","Switch", {bass = true, normally_closed = true}) + self.Train:LoadSystem("HPass","Relay","Switch", {bass = true}) --Door sig + + + + -- Педаль бдительноÑти (ПБ) + self.Train:LoadSystem("KU6K","Relay","Switch", {bass = true, normally_closed = true}) + + self.Train:LoadSystem("PanelLamp","Relay","Switch", {bass = true, normally_closed=true}) + + self.V1 = 0 + self.GRP = 0 + self.RRP = 0 + self.TW18 = 0 + self.SD = 0 + self.UKS = 0 + self.UKSb = 0 + self.Headlights1 = 0 + self.Headlights2 = 0 + self.RedLights = 0 + self.EmergencyLights2 = 0 + self.EmergencyLights1 = 0 + self.MainLights1 = 0 + self.MainLights2 = 0 + self.Ring = 0 + self.AVU = 0 + + self.VPR = 0 + + self.AnnouncerPlaying = 0 + + self.CBKIPower = 0 + self.PCBKPower = 0 +end + +function TRAIN_SYSTEM:Outputs() + return { "V1","GRP","RRP","TW18","SD","UKS","UKSb","Headlights1","Headlights2","RedLights","EmergencyLights2","EmergencyLights1","MainLights1","MainLights2","Ring","AVU","VPR","AnnouncerPlaying","CBKIPower","PCBKPower" } +end diff --git a/lua/metrostroi/systems/sys_81_508_uks.lua b/lua/metrostroi/systems/sys_81_508_uks.lua new file mode 100644 index 0000000..7a7f90d --- /dev/null +++ b/lua/metrostroi/systems/sys_81_508_uks.lua @@ -0,0 +1,41 @@ +-------------------------------------------------------------------------------- +-- 81-508 UKS system +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_508_UKS") + +function TRAIN_SYSTEM:Initialize(parameters) + self.UKSEngaged = 0 + self.UKSTriggered = 0 + self.UKSEmerTriggered = 0 + self.Train:LoadSystem("UKSDisconnect","Relay","Switch", {bass = true,normally_closed = true}) +end + +function TRAIN_SYSTEM:Outputs() + return { "UKSEngaged", "UKSTriggered", "UKSEmerTriggered" } +end + +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + self.UKSEngaged = Train.UAVA.Value*Train.UKSDisconnect.Value + if self.UKSEngaged > 0 then + local speed = Train.ALSCoil.Speed*Train.ALSCoil.SpeedSign + if speed > 34 then + self.UKSTriggered = 1 + if speed > 40 then + self.UKSEmerTriggered = 1 + end + elseif speed < 31 and self.UKSEmerTriggered == 0 then + self.UKSTriggered = 0 + self.UKSEmerTriggered = 0 + elseif speed < 1 then + self.UKSTriggered = 0 + self.UKSEmerTriggered = 0 + end + else + self.UKSTriggered = 0 + self.UKSEmerTriggered = 0 + end +end diff --git a/lua/metrostroi/systems/sys_81_508t_electric.lua b/lua/metrostroi/systems/sys_81_508t_electric.lua new file mode 100644 index 0000000..b54f57e --- /dev/null +++ b/lua/metrostroi/systems/sys_81_508t_electric.lua @@ -0,0 +1,298 @@ +-------------------------------------------------------------------------------- +-- 81-508t electric schemes +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_508T_Electric") +function TRAIN_SYSTEM:Initialize(typ1,typ2) + self.ThyristorController = true + + -- Load all functions from base + Metrostroi.BaseSystems["Electric"].Initialize(self) + for k,v in pairs(Metrostroi.BaseSystems["Electric"]) do + if not self[k] and type(v) == "function" then + self[k] = v + end + end + + self.RRI = 0 + self.SolvePowerCircuits = Metrostroi.BaseSystems["81_710_Electric"].SolvePowerCircuits + self.SolveThyristorController = Metrostroi.BaseSystems["81_710_Electric"].SolveThyristorController + self.Think = Metrostroi.BaseSystems["81_710_Electric"].Think +end + +if CLIENT then return end +function TRAIN_SYSTEM:Inputs(...) + return { "Type", "RRI" } +end +function TRAIN_SYSTEM:Outputs(...) + return Metrostroi.BaseSystems["Electric"].Outputs(self,...) +end + +-- Node values +local S = {} +-- Converts boolean expression to a number +local function C(x) return x and 1 or 0 end + +local min = math.min +local max = math.max + +function TRAIN_SYSTEM:SolveAllInternalCircuits(Train,dT,firstIter) + local RheostatController = Train.RheostatController + local P = Train.PositionSwitch.SelectedPosition + local RK = Train.RheostatController.SelectedPosition + local B = (Train.Battery.Voltage > 55) and 1 or 0 + local T = Train.SolverTemporaryVariables + if not T then + T = {} + for i=1,100 do T[i] = 0 end + Train.SolverTemporaryVariables = T + end + + local BO = min(1,B * Train.VB.Value+T[10])--B * Train.VB.Value + local KV = Train.KV + local KRU = Train.KRU + local Panel = Train.Panel + + + Panel.V1 = BO + Train:WriteTrainWire(10,B*Train.VB.Value) + + S["10AK"] = BO*Train.VU.Value + --10AK->AV --FIXME SAMM + S["U2"] = S["10AK"]*KV["U2-10AK"] + S["7G"] = BO*KV["7D-7G"] + Train:WriteTrainWire(1,S["10AK"]*KV["10AK-1"]*Train.R1_5.Value) + Train:WriteTrainWire(2,S["U2"]*KV["U2-2"]) + Train:WriteTrainWire(3,S["U2"]*KV["U2-3"]) + Train:WriteTrainWire(4,S["10AK"]*KV["U2-4"]) + Train:WriteTrainWire(5,S["10AK"]*KV["U2-5"]) + Train:WriteTrainWire(6,S["10AK"]*Train.RVT.Value) + Train:WriteTrainWire(8,BO*KV["10-8"]) + Train:WriteTrainWire(14,BO*KV["10-14A"]*KV["14A-14B"]) + Train:WriteTrainWire(17,S["10AK"]*KV["10AK-17"]*Train.KU9.Value) + Train:WriteTrainWire(20,S["U2"]*KV["U2-20"]) + Train:WriteTrainWire(24,S["U2"]*Train.KU8.Value) + Train:WriteTrainWire(25,S["U2"]*KV["U2-6"]*KV["6-25"]*Train.K25.Value) + + Train.RVT:TriggerInput("Set",S["U2"]*KV["U2-6"]) + Train.K25:TriggerInput("Set",S["U2"]*KV["U2-6"]) + Train.RV2:TriggerInput("Set",S["10AK"]*KV["33-10AK"]) + Train.R1_5:TriggerInput("Set",S["10AK"]*Train.RV2.Value) + Panel.AnnouncerPlaying = T[13] + + Train:WriteTrainWire(34,Train.RKTT.Value+Train.DKPT.Value) + Panel.RRP = S["U2"]*T[18] + + local RCU = KV.RCU + S["ZR"] = (1-Train.RRU.Value)+(B*Train.RRU.Value)*-1 + Train.RZ_2:TriggerInput("Set",T[24]*RCU*(1-Train.LK4.Value)) + S["18A"] = RCU*(Train.RPvozvrat.Value*100+(1-Train.LK4.Value)) + Train:WriteTrainWire(18,S["18A"]) + Panel.TW18 = S["18A"] + + local Reverser = Train.Reverser + S["4A"] = T[4]*RCU + S["5A"] = T[5]*RCU + Reverser:TriggerInput("NZ",S["4A"]*Reverser.VP) + Reverser:TriggerInput("VP",S["5A"]*Reverser.NZ) + Train.LK4:TriggerInput("Set",(S["4A"]*Reverser.NZ+S["5A"]*Reverser.VP)*(1-Train.RPvozvrat.Value)*Train.LK3.Value*S["ZR"]) + + Train.PneumaticNo1:TriggerInput("Set",T[8]*C(17 <= RK and RK <= 18)+T[9]) + --Train.PneumaticNo2:TriggerInput("Set",T[8]*(1-Train.RV3.Value)*(1-Train.RT2.Value)*((1-Train.LK4.Value)+C(RK==1))) + Train.PneumaticNo2:TriggerInput("Set",T[8]*(1-Train.RT2.Value)*((1-Train.LK4.Value)+C(RK==1))) + Train.RV3:TriggerInput("Set",T[14]) + + S["10A"] = BO*RCU + self.ThyristorControllerPower = S["10A"] + + S["10B"] = S["10A"]*(Train.RV1.Value+Train.TR1.Value) + + --Train["RUTreg"] = T[9] + S["10I"] = S["10A"]*RheostatController.RKM2 + Train["RUTpod"] = S["10I"]*Train.LK4.Value + Train["RRTpod"] = S["10I"]*(1-Train.LK1.Value) + Train.RRT:TriggerInput("Close",Train.RRTuderzh*Train.RRTpod) + Train.RRT:TriggerInput("Open",(1-Train.RRTuderzh)) + + local SDRKr = 1-Train.LK2.Value*(0.2+0.3*C(2 <=RK and RK <= 7 and P==1)) + RheostatController:TriggerInput("MotorCoilState",min(1,S["10A"]*(S["10B"]*Train.RR.Value - S["10B"]*(1-Train.RR.Value)))*SDRKr) + + S["10N"] = S["10A"]*(RheostatController.RKM1+Train.SR1.Value*(1-Train.RUT.Value)) + S["10T"] = ((1-Train.SR1.Value)+Train.RUT.Value)*(RheostatController.RKP) + + RheostatController:TriggerInput("MotorState",(S["10N"]+S["10T"]*(-10))) + + --СДПП + S["10AV"] = S["10A"]*(1-Train.LK3.Value)*C(2<=RK and RK<=18)*(1-Train.LK4.Value) + S["10E"] = S["10A"]*((1-Train.LK3.Value)+Train.Rper.Value+Train.PositionSwitch.PMPos) + Train.SR2:TriggerInput("Set",S["10E"]*((C(P==3 or P==4)+Train.LK2.Value))*(1-Train.LK4.Value)) + + S["10AD"] = (1-Train.LK1.Value)*Train.SR2.Value + S["10AYu"] = S["10AD"]*(1-Train.RPP.Value) + S["10AZh"] = S["10AD"]* Train.TR1.Value*C(P==1 or P==2 or P==4) + S["10AR"] = S["10AYu"]*(1-Train.TR1.Value)*C(2<=P and P<=4) + S["10Ya"] = Train.LK3.Value*C(RK==18 and (P==1)) + S["10AG"] = S["10E"]*(S["10AR"]+S["10AZh"]+S["10Ya"]) + Train.PositionSwitch:TriggerInput("MotorState",-1.0 + 2.0*math.max(0,S["10AG"])) + + S["2A"] = T[2]*RCU + S["2G"] = S["2A"]*((1-Train.TR1.Value)+(1-Train.KSB1.Value)+Train.ThyristorBU5_6.Value)*( + C(1<=RK and RK<=17 and (P==1 or P==3) + or (6<=RK and RK<=18 + or 2<=RK and RK<=5 and Train.KSH1.Value>0 + ) and (P==2 or P==4) + ) + ) + S["2E"] = S["2G"]*Train.LK4.Value+S["10AV"] + Train.RV1:TriggerInput("Set",S["2E"]*S["ZR"]) + Train.SR1:TriggerInput("Set",S["2E"]*(1-Train.RRT.Value)*S["ZR"]) + Train.Rper:TriggerInput("Set",T[3]*RCU*C(17<=RK and RK<=18)*S["ZR"]) + Train.RU:TriggerInput("Set",S["2A"]) + + Train.RRU:TriggerInput("Set",T[29]) + + S["6A"] = T[6]*RCU + Train.TR1:TriggerInput("Set",S["6A"]) + Train.RPP:TriggerInput("Set",S["6A"]) + S["6G"] = S["6A"]*C(P==3 or P==4) + S["6Yu"] = S["6G"]*C(1<=RK and RK<=2) + Train.KSB1:TriggerInput("Set",S["6Yu"]) + Train.KSB2:TriggerInput("Set",S["6Yu"]) + Train.RUP:TriggerInput("Set",S["6Yu"]) + self.ThyristorControllerWork = S["6Yu"]+S["6G"]*Train.RUP.Value + + S["1A"] = T[1]*RCU + S["1R"] = S["1A"]*((1-Train.RV1.Value)*C(P==1)+C(1<=RK and RK<=5 and P==2)) + Train.KSH2:TriggerInput("Set",S["1R"]*S["ZR"]) --Идет Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð°Ñ Ñ†ÐµÐ¿ÑŒ от ЛК к 1 проводу, но мне лень + Train.KSH1:TriggerInput("Set",S["1R"]*S["ZR"]) --Идет Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð°Ñ Ñ†ÐµÐ¿ÑŒ от ЛК к 1 проводу, но мне лень + + S["1P"] = S["1A"]*C(P == 1 or P == 2)*Train.NR.Value+S["6A"]*C(P==3 or P==4) + Train["RUTavt"] = S["1P"]*(Train.KSB1.Value+Train.KSH2.Value)*S["ZR"] --Идет Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð°Ñ Ñ†ÐµÐ¿ÑŒ от ЛК к 1 проводу, но мне лень + S["1G"] = S["1P"]*Train.AVT.Value*(1-Train.RPvozvrat.Value) + S["1Zh"] = S["1G"]*(Train.LK3.Value+C(RK==1)*(Train.KSH2.Value+Train.KSB1.Value*Train.KSB2.Value)*C(P==1 or P==3)*Train.LK5.Value) + Train.LK1:TriggerInput("Set",S["1Zh"]*C(P==1 or P==2)*S["ZR"]) + Train.LK3:TriggerInput("Set",S["1Zh"]*S["ZR"]) + Train.RR:TriggerInput("Set",S["1Zh"]*C(P==1 or P==3)*S["ZR"]) + Train.RPvozvrat:TriggerInput("Open",T[17]*RCU) --FIXME Mayve more right RP code + S["20A"] = T[20]*RCU + Train.LK2:TriggerInput("Set",S["20A"]*S["ZR"]) + Train.LK5:TriggerInput("Set",S["20A"]*(1-Train.RPvozvrat.Value)*S["ZR"]) + Train["RRTuderzh"] = T[25] + Train.RKTTsh = T[30] + + --Ð’Ñпом цепи низкого напрÑÐ¶ÐµÐ½Ð¸Ñ + Train:WriteTrainWire(11,BO*Train.VU2.Value) + Train:WriteTrainWire(22,BO*Train.V1.Value*Train.AK.Value) + Train:WriteTrainWire(23,BO*Train.KU15.Value) + Train:WriteTrainWire(27,BO*Train.V4.Value) + Train:WriteTrainWire(28,BO*Train.V5.Value) + Panel.GRP = BO*Train.RPvozvrat.Value + S["F7"] = BO*KV["F-F7"] + Panel.Headlights1 = S["F7"] + Panel.Headlights2 = S["F7"]*Train.VU14.Value + S["D1"] = BO*KV["D-D1"] + Train:WriteTrainWire(31,S["D1"]*(Train.V6.Value+Train.KU12.Value)) + Train:WriteTrainWire(32,S["D1"]*Train.KU7.Value) + Train:WriteTrainWire(12,S["D1"]*Train.V10.Value) + Train:WriteTrainWire(16,S["D1"]*Train.V2.Value*Train.V3.Value) + + S["11A"] = T[11]*(1-Train.NR.Value) + Panel.EmergencyLights1 = BO*Train.VU3.Value+S["11A"]*(1-Train.VU3.Value) + Panel.EmergencyLights2 = S["11A"] + Panel.MainLights1 = math.max(0,math.min(1, + ( + self.Aux750V-100 + -self.Itotal*0.25*C(Train.PositionSwitch.SelectedPosition >= 3) + -25*Train.KK.Value + )/750*(0.5+0.5*B*Train.VB.Value*Train.KZ1.Value) + )) + Panel.MainLights2 = Panel.MainLights1*Train.KO.Value + Train.KK:TriggerInput("Set",T[22]+T[23]) + Train.KO:TriggerInput("Close",T[27]) + Train.KO:TriggerInput("Open",T[28]) + + local BD = 1-Train.BD.Value + Train:WriteTrainWire(15,BD*(1-Train.KU11.Value))--Заземление 15 провода + Train.Panel.SD = (S["D1"]+BO*Train.KU11.Value)*(T[15]*(1-Train.KU11.Value)+BD) + + Train.VDZ:TriggerInput("Set",T[16]*BD) + Train.VDOL:TriggerInput("Set",T[31]+T[12]) + Train.VDOP:TriggerInput("Set",T[32]+T[12]) + + Panel.CBKIPower = T[10] +end +function TRAIN_SYSTEM:SolveRKInternalCircuits(Train,dT,firstIter) + local RheostatController = Train.RheostatController + local P = Train.PositionSwitch.SelectedPosition + local RK = Train.RheostatController.SelectedPosition + local B = (Train.Battery.Voltage > 55) and 1 or 0 + local T = Train.SolverTemporaryVariables + + local BO = min(1,B * Train.VB.Value+T[10])--B * Train.VB.Value + --local KV = Train.KV + --local Panel = Train.Panel + + local RCU = Train.KV.RCU + S["ZR"] = (1-Train.RRU.Value)+(B*Train.RRU.Value)*-1 + + S["10A"] = BO*RCU + S["10I"] = S["10A"]*RheostatController.RKM2 + Train.Panel.Sequence =S["10A"]*RheostatController.RKM1 + Train["RUTpod"] = S["10I"]*Train.LK4.Value + Train["RRTpod"] = S["10I"]*(1-Train.LK1.Value) + Train["RRTuderzh"] = T[25] + Train.RRT:TriggerInput("Close",Train.RRTuderzh*Train.RRTpod) + Train.RRT:TriggerInput("Open",(1-Train.RRTuderzh)) + + local SDRKr = 1-Train.LK2.Value*(0.2+0.3*C(2 <=RK and RK <= 7 and P==1)) + RheostatController:TriggerInput("MotorCoilState",min(1,S["10A"]*(S["10B"]*Train.RR.Value - S["10B"]*(1-Train.RR.Value)))*SDRKr) + + S["10N"] = S["10A"]*(RheostatController.RKM1+Train.SR1.Value*(1-Train.RUT.Value)) + S["10T"] = ((1-Train.SR1.Value)+Train.RUT.Value)*(RheostatController.RKP) + RheostatController:TriggerInput("MotorState",(S["10N"]+S["10T"]*(-10))) + + S["2A"] = T[2]*RCU + S["2G"] = S["2A"]*((1-Train.TR1.Value)+(1-Train.KSB1.Value)+Train.ThyristorBU5_6.Value)*( + C(1<=RK and RK<=17 and (P==1 or P==3) + or (6<=RK and RK<=18 + or 2<=RK and RK<=5 and Train.KSH1.Value>0 + ) and (P==2 or P==4) + ) + ) + S["2E"] = S["2G"]*Train.LK4.Value+S["10AV"] + Train.RV1:TriggerInput("Set",S["2E"]*S["ZR"]) + Train.SR1:TriggerInput("Set",S["2E"]*(1-Train.RRT.Value)*S["ZR"]) + Train.Rper:TriggerInput("Set",T[3]*RCU*C(17<=RK and RK<=18)*S["ZR"]) + + --[[ S["1A"] = T[1]*RCU + S["1R"] = S["1A"]*((1-Train.RV1.Value)*C(P==1)+C(1<=RK and RK<=5 and P==2)) + Train.KSH2:TriggerInput("Set",S["1R"]*S["ZR"]) --Идет Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð°Ñ Ñ†ÐµÐ¿ÑŒ от ЛК к 1 проводу, но мне лень + Train.KSH1:TriggerInput("Set",S["1R"]*S["ZR"]) --Идет Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð°Ñ Ñ†ÐµÐ¿ÑŒ от ЛК к 1 проводу, но мне лень + Train.NR:TriggerInput("Set",1) + S["1P"] = S["1A"]*C(P == 1 or P == 2)*Train.NR.Value+S["6A"]*C(P==3 or P==4) + Train["RUTavt"] = S["1P"]*(Train.KSB1.Value+Train.KSH2.Value)*S["ZR"] --Идет Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð°Ñ Ñ†ÐµÐ¿ÑŒ от ЛК к 1 проводу, но мне лень + S["1G"] = S["1P"]*Train.AVT.Value*(1-Train.RPvozvrat.Value) + S["1Zh"] = S["1G"]*(Train.LK3.Value+C(RK==1)+(Train.KSH2.Value+Train.KSB1.Value*Train.KSB2.Value+C(P==1 or P==3))*Train.LK5.Value) + Train.LK1:TriggerInput("Set",S["1Zh"]*C(P==1 or P==2)*S["ZR"]) + Train.LK3:TriggerInput("Set",S["1Zh"]*S["ZR"]) + Train.RR:TriggerInput("Set",S["1Zh"]*C(P==1 or P==3)*S["ZR"])--]] + return S +end + +local wires = {1,2,3,4,5,6,8,10,9,13,14,17,18,20,25,11,12,15,16,22,23,24,27,28,29,30,31,32} +function TRAIN_SYSTEM:SolveInternalCircuits(Train,dT,firstIter) + local T = Train.SolverTemporaryVariables + if not T then + T = {} + for i,v in ipairs(wires) do T[v] = 0 end + Train.SolverTemporaryVariables = T + end + if firstIter then + for i,v in ipairs(wires) do T[v] = min(Train:ReadTrainWire(v),1) end + self:SolveAllInternalCircuits(Train,dT) + else + self:SolveRKInternalCircuits(Train,dT) + end +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_81_508t_panel.lua b/lua/metrostroi/systems/sys_81_508t_panel.lua new file mode 100644 index 0000000..c50615e --- /dev/null +++ b/lua/metrostroi/systems/sys_81_508t_panel.lua @@ -0,0 +1,61 @@ +-------------------------------------------------------------------------------- +-- 81-508t controller panel +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_508T_Panel") + +function TRAIN_SYSTEM:Initialize() + -- Выключатель батареи (ВБ) + self.Train:LoadSystem("VB","Relay","VB-11", {bass = true}) + + -- Buttons on the panel + self.Train:LoadSystem("V4","Relay","Switch", {bass = true}) --LOn + self.Train:LoadSystem("V5","Relay","Switch", {bass = true}) --LOff + self.Train:LoadSystem("KU9","Relay","Switch", {bass = true}) --VRP + self.Train:LoadSystem("KU15","Relay","Switch", {bass = true}) --RezMK + self.Train:LoadSystem("V1","Relay","Switch", {bass = true}) --VMK + self.Train:LoadSystem("VU14","Relay","Switch", {bass = true}) --VUS + self.Train:LoadSystem("V2","Relay","Switch", {bass = true }) --VDL1 + self.Train:LoadSystem("V3","Relay","Switch", { normally_closed = true, bass = true }) --VDL2 + self.Train:LoadSystem("V6","Relay","Switch", {bass = true}) --VDL + self.Train:LoadSystem("KU12","Relay","Switch", {bass = true}) --KDL + self.Train:LoadSystem("KU7","Relay","Switch", {bass = true}) --KDP + self.Train:LoadSystem("V10","Relay","Switch", {bass = true}) --KRZD + self.Train:LoadSystem("KU8","Relay","Switch", {bass = true}) --KSN + self.Train:LoadSystem("KU11","Relay","Switch", {bass = true}) --KSD + + -- ÐвтоматичеÑкие выключатели (ÐÐ’) + self.Train:LoadSystem("VU1","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VU2","Relay","Switch", {bass = true, normally_closed = true}) + self.Train:LoadSystem("VU3","Relay","Switch", {bass = true}) + self.Train:LoadSystem("AV","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VU","Relay","Switch", {bass = true, normally_closed = false}) + + + self.V1 = 0 + self.GRP = 0 + self.RRP = 0 + self.TW18 = 0 + self.SD = 0 + self.Headlights1 = 0 + self.Headlights2 = 0 + self.RedLights = 0 + self.EmergencyLights2 = 0 + self.EmergencyLights1 = 0 + self.MainLights1 = 0 + self.MainLights2 = 0 + self.PanelLights = 0 + self.GaugeLights = 0 + + self.AnnouncerPlaying = 0 + + self.BatteryVoltmeter = 0 + + self.PCBKPower = 0 +end + +function TRAIN_SYSTEM:Outputs() + return {"V1","GRP","RRP","TW18","SD","Headlights1","Headlights2","RedLights","EmergencyLights2","EmergencyLights1","MainLights1","MainLights2","PanelLights","GaugeLights","AnnouncerPlaying","BatteryVoltmeter","PCBKPower"} +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_81_702_electric.lua b/lua/metrostroi/systems/sys_81_702_electric.lua new file mode 100644 index 0000000..a45db5d --- /dev/null +++ b/lua/metrostroi/systems/sys_81_702_electric.lua @@ -0,0 +1,515 @@ +---------------------------------------------------------------------------- +-- 81-702 electric schemes +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_702_Electric") +TRAIN_SYSTEM.Dc = 1 +TRAIN_SYSTEM.Do = 2 +TRAIN_SYSTEM.DcI = 3 +TRAIN_SYSTEM.DoI = 4 +function TRAIN_SYSTEM:Initialize(typ1,typ2) + self.Type = self.Type or self.Dc + -- Load all functions from base + Metrostroi.BaseSystems["Electric"].Initialize(self) + for k,v in pairs(Metrostroi.BaseSystems["Electric"]) do + if not self[k] and type(v) == "function" then + self[k] = v + end + end +end + +if CLIENT then return end +function TRAIN_SYSTEM:Inputs(...) + return { "Type" } +end +function TRAIN_SYSTEM:Outputs(...) + return Metrostroi.BaseSystems["Electric"].Outputs(self,...) +end +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Type" then + self.Type = value + end +end + +-- Node values +local S = {} +-- Converts boolean expression to a number +local function C(x) return x and 1 or 0 end +local min = math.min +local max = math.max +local wires = {1,2,3,4,5,6,7,8,11,10,12,13,15,16,17,18,20,22,23,24,27,28,31,32,} +function TRAIN_SYSTEM:SolveAllInternalCircuits(Train, dT) + ---[[ + local RheostatController = Train.RheostatController + local P = Train.PositionSwitch + local RK = RheostatController.SelectedPosition + local B = (Train.Battery.Voltage > 55) and 1 or 0 + local T = Train.SolverTemporaryVariables + + local BO = min(1,B * Train.VB.Value+T[10])--B * Train.VB.Value + local KV = Train.KV + local Panel = Train.Panel + local isInt = self.Type>2 + + Panel.V1 = BO + Train:WriteTrainWire(10,B*Train.VB.Value) + + + S["10AK"] = BO*Train.VU.Value + + S["U2"] = S["10AK"]*KV["U2-10AK"] + Train:WriteTrainWire(8,T[10]*KV["10-8"]) + Train:WriteTrainWire(1,S["U2"]*KV["U2-1"]) + Train:WriteTrainWire(2,S["U2"]*KV["U2-2"]) + Train:WriteTrainWire(3,S["U2"]*KV["U2-3"]) + Train:WriteTrainWire(6,S["U2"]*KV["U2-6"]) + Train:WriteTrainWire(7,S["U2"]*KV["U2-7"]) + Train:WriteTrainWire(17,S["10AK"]*KV["10AK-17"]*Train.VRP.Value) + Train:WriteTrainWire(12,-KV["0-12"]) + Train:WriteTrainWire(20,S["10AK"]*Train.VZ.Value) + Train:WriteTrainWire(24,S["U2"]*Train.SN.Value) + + Train:WriteTrainWire(4,S["U2"]*KV["U2-4"]) + Train:WriteTrainWire(5,(S["U2"]*KV["U2-5M"])*(Train.UAVAC.Value+KV["5M-5"])) + Panel.RRP = S["U2"]*T[18] + Panel.GRP = BO*Train.RPvozvrat.Value + + S["A2"] = math.max(0,math.min(1,(self.Aux750V-100)/670)) + S["D1"] = BO*KV["D-D1"] + S["D2"] = BO*KV["D-D2"] + Panel.Headlights1 = S["A2"]*KV["F-F7"] + Panel.Headlights2 = Panel.Headlights1 + if not isInt then + local RRI_VV = Train.RRI_VV + RRI_VV.Power = BO*Train.RRIEnable.Value + RRI_VV.AmplifierPower = BO*Train.RRIAmplifier.Value + Train:WriteTrainWire(13,RRI_VV.AmplifierPower*Train.RRI.LineOut) + end + Panel.AnnouncerPlaying = T[13] + + S["RA"] = -T[12] + local RUM = KV.RCU + + Train.RZ_2:TriggerInput("Set",T[24]*RUM*(1-Train.LK3.Value)) + S["18A"] = RUM*(Train.RPvozvrat.Value*100+(1-Train.LK3.Value)) + Train:WriteTrainWire(18,S["18A"]) + Panel.TW18 = S["18A"] + + Train.PneumaticNo2:TriggerInput("Set",T[8]*(1-Train.LK3.Value)) + Train.PneumaticNo1:TriggerInput("Set",T[8]*C(14<=RK and RK<=20)*S["RA"]+T[20]) + P:TriggerInput("VP",T[5]*RUM*P.NZ*S["RA"]) + P:TriggerInput("NZ",T[4]*RUM*P.VP*S["RA"]) + Train.LK2:TriggerInput("Set",(T[5]*RUM*P.VP+T[4]*RUM*P.NZ)*Train.AVT.Value*(1-Train.RPvozvrat.Value)*(Train.M.Value+Train.LK1.Value*Train.LK2.Value)*S["RA"]) + Train.RVuderzh = T[7]*RUM*S["RA"] + + Train.RPvozvrat:TriggerInput("Open",T[17]*RUM) + + P:TriggerInput("TPT",T[6]*RUM*(1-Train.LK1.Value)*S["RA"]) + P:TriggerInput("TPM",T[1]*RUM*(1-Train.M.Value)*S["RA"]) + + S["2G"]= (T[2]*RUM*((1-Train.RV.Value)*P.TPT*C(1<=RK and RK<=18)+P.TPM*(C(1<=RK and RK<=11 or 14<=RK and RK<=18)+Train.SH1.Value*C(12==RK or RK==19)))+T[3]*RUM*C(RK==13))*(1-Train.RU.Value) + S["2E"] = BO*RUM*(RheostatController.PV2+(C(2<=RK and RK<=20)*(1-Train.M.Value)*(1-Train.LK1.Value)+S["2G"]*Train.LK3.Value)*RheostatController.PV1) + + Train.RVpod = BO*RUM*RheostatController.PV2 + Train.RUpod = BO*RUM*RheostatController.PV2--+C(2<=RK and RK<=20)*(1-Train.M.Value)*(1-Train.LK1.Value)*RheostatController.PV1) + RheostatController:TriggerInput("RK2",S["2E"]*RheostatController.PV3) + RheostatController:TriggerInput("RK1",S["2E"]*(1-RheostatController.PV3)) + + Train.RV:TriggerInput("Close",Train.RVuderzh*Train.RVpod) + Train.RV:TriggerInput("Open",(1-Train.RVuderzh)) + + S["1B"] = T[6]*RUM*P.TPT+T[1]*RUM*P.TPM + Train.RUavt = S["1B"]*S["RA"] + + S["1D"] = S["1B"]*(1-Train.RPvozvrat.Value) + Train.LK3:TriggerInput("Set",S["1D"]*Train.LK2.Value*S["RA"]) + S["1V"] = S["1D"]*(Train.LK2.Value+C(RK==1)) + Train.M:TriggerInput("Set",S["1V"]*(P.TPT+Train.NR.Value*C(1<=RK and RK<=13))*S["RA"]) + Train.LK1:TriggerInput("Set",S["1V"]*(Train.NR.Value*P.TPM)*S["RA"]) + Train.RUreg = S["1V"]*C(2<=RK and RK<=10)*P.TPM*S["RA"]-BO*RUM*C(RK==3 or RK==18 or RK==19)*0.75 + + + S["1L"] = (C(RK==1)+C(RK==12 or RK==13 or RK==19 or RK==20)*P.TPM)*S["RA"] + Train.SH1:TriggerInput("Set",S["1B"]*S["1L"]) + Train.SH2:TriggerInput("Set",S["1B"]*S["1L"]) + + + Train:WriteTrainWire(11,BO*Train.VU2.Value) + Train:WriteTrainWire(23,BO*Train.KU3.Value) + Train:WriteTrainWire(22,T[23]*Train.AK.Value) + Train:WriteTrainWire(27,BO*Train.KU1.Value) + Train:WriteTrainWire(28,BO*Train.KU2.Value) + + Train:WriteTrainWire(16,S["D1"]*Train.KU7.Value*Train.KU8.Value) + Train:WriteTrainWire(31,S["D1"]*(Train.KU4.Value+Train.KU10.Value+Train.KU5.Value)) + Train:WriteTrainWire(32,S["D1"]*(Train.KU6.Value+Train.KU5.Value)) + + + S["11A"] = T[11]*(1-Train.NR.Value) + Panel.EmergencyLights1 = --[[ T[10]--]] BO*Train.VU3.Value+S["11A"]*(1-Train.VU3.Value) + Panel.EmergencyLights2 = S["11A"] + Panel.MainLights1 = math.max(0,math.min(1, + ( + self.Aux750V-100 + -self.Itotal*0.25*P.TPM + -25*Train.KK.Value + )/750*(0.5+0.5*B*Train.VB.Value*Train.KZ1.Value) + )) + Panel.MainLights2 = Panel.MainLights1*Train.KO.Value + + Panel.VPR = C(self.Aux750V>250) + + Train.KK:TriggerInput("Set",T[22]) + Train.KO:TriggerInput("Close",T[27]) + Train.KO:TriggerInput("Open",T[28]) + Panel.Ring = T[11]*(1-Train.KZ1.Value)+T[28] + + local BD = 1-Train.BD.Value + Train:WriteTrainWire(15,BD*(1-Train.KU9.Value))--Заземление 15 провода + Train.Panel.SD = (S["D1"]+ BO*Train.KU9.Value)*(T[15]*(1-Train.KU9.Value)+BD) + Train.VDZ:TriggerInput("Set",T[16]*BD) + Train.VDOL:TriggerInput("Set",T[31]) + Train.VDOP:TriggerInput("Set",T[32]) + + if not isInt then + Panel.RedLights = BO*KV["10-F1"] + end + Train.Scheme = S + return S +end +function TRAIN_SYSTEM:SolveRKInternalCircuits(Train, dT) + ---[[ + local RheostatController = Train.RheostatController + local P = Train.PositionSwitch + local RK = RheostatController.SelectedPosition + local B = (Train.Battery.Voltage > 55) and 1 or 0 + local T = Train.SolverTemporaryVariables + + local BO = min(1,B * Train.VB.Value+T[10])--B * Train.VB.Value + + local RUM = Train.KV.RCU + + S["RA"] = -T[12] + P:TriggerInput("VP",T[5]*RUM*P.NZ*S["RA"]) + P:TriggerInput("NZ",T[4]*RUM*P.VP*S["RA"]) + + P:TriggerInput("TPT",T[6]*RUM*(1-Train.LK1.Value)*S["RA"]) + P:TriggerInput("TPM",T[1]*RUM*(1-Train.M.Value)*S["RA"]) + + S["2G"]= (T[2]*RUM*((1-Train.RV.Value)*P.TPT*C(1<=RK and RK<=18)+P.TPM*(C(1<=RK and RK<=11 or 14<=RK and RK<=18)+Train.SH1.Value*C(12==RK or RK==19)))+T[3]*RUM*C(RK==13))*(1-Train.RU.Value) + S["2E"] = BO*RUM*(RheostatController.PV2+(C(2<=RK and RK<=20)*(1-Train.M.Value)*(1-Train.LK1.Value)+S["2G"]*Train.LK3.Value)*RheostatController.PV1) + + Train.RVpod = BO*RUM*RheostatController.PV2 + Train.RUpod = BO*RUM*RheostatController.PV2--+C(2<=RK and RK<=20)*(1-Train.M.Value)*(1-Train.LK1.Value)*RheostatController.PV1) + RheostatController:TriggerInput("RK2",S["2E"]*RheostatController.PV3) + RheostatController:TriggerInput("RK1",S["2E"]*(1-RheostatController.PV3)) + + Train.RV:TriggerInput("Close",Train.RVuderzh*Train.RVpod) + Train.RV:TriggerInput("Open",(1-Train.RVuderzh)) + return S +end +function TRAIN_SYSTEM:SolveInternalCircuits(Train,dT,firstIter) + local T = Train.SolverTemporaryVariables + if not T then + T = {} + for i,v in ipairs(wires) do T[v] = 0 end + Train.SolverTemporaryVariables = T + end + if firstIter then + for i,v in ipairs(wires) do T[v] = min(Train:ReadTrainWire(v),1) end + self:SolveAllInternalCircuits(Train,dT) + else + self:SolveRKInternalCircuits(Train,dT) + end +end +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:SolvePowerCircuits(Train,dT) + --self.ExtraResistanceLK5 = 0--Train.KF_47A["L2-L4" ]*(1-Train.LK5.Value) + --self.ExtraResistanceLK2 = Train.KF_47A["L1-L2"]*(1-Train.LK2.Value)*Train.LK1.Value + if Train.M.Value == 1 then -- PP + local res = Train.ResistorBlocks.R1(Train) + self.R1 = res/2 + self.R2 = res/2 + self.R3 = 0.0 + else + self.R1 = Train.ResistorBlocks.R2C2(Train) + self.R2 = Train.ResistorBlocks.R2C2(Train) + self.R3 = 0.0 + end + -- Apply LK3, LK4 contactors + self.R1 = self.R1 + 1e9*(1 - Train.LK2.Value)*(1 - Train.LK3.Value) + self.R2 = self.R2 + 1e9*(1 - Train.LK2.Value)*(1 - Train.LK3.Value) + + -- Shunt resistance + self.Rs1 = Train.ResistorBlocks.S1(Train) + 1e9*(1 - Train.SH1.Value) + self.Rs2 = Train.ResistorBlocks.S2(Train) + 1e9*(1 - Train.SH2.Value) + + -- Calculate total resistance of engines winding + local RwAnchor = Train.Engines.Rwa*2 -- Double because each set includes two engines + local RwStator = Train.Engines.Rws*2 + -- Total resistance of the stator + shunt + self.Rstator13 = (RwStator^(-1) + self.Rs1^(-1))^(-1) + self.Rstator24 = (RwStator^(-1) + self.Rs2^(-1))^(-1) + -- Total resistance of entire motor + self.Ranchor13 = RwAnchor + self.Ranchor24 = RwAnchor + + if Train.PositionSwitch.TPM > 0 then -- X + if Train.M.Value == 1 then -- PS + self:SolvePS(Train) + else --PP + self:SolvePP(Train,Train.RheostatController.SelectedPosition >= 17) + end + else -- T + self:SolvePT(Train) + end + + -- Calculate current through rheostats 1, 2 + self.IR1 = self.I13 + self.IR2 = self.I24 + + -- Calculate induction properties of the motor + self.I13SH = self.I13SH or self.I13 + self.I24SH = self.I24SH or self.I24 + + -- Time constant + local T13const1 = math.max(16.00,math.min(28.0,(self.R13^2) * 2.0)) -- R * L + local T24const1 = math.max(16.00,math.min(28.0,(self.R24^2) * 2.0)) -- R * L + + -- Total change + local dI13dT = T13const1 * (self.I13 - self.I13SH) * dT + local dI24dT = T24const1 * (self.I24 - self.I24SH) * dT + + -- Limit change and apply it + if dI13dT > 0 then dI13dT = math.min(self.I13 - self.I13SH,dI13dT) end + if dI13dT < 0 then dI13dT = math.max(self.I13 - self.I13SH,dI13dT) end + if dI24dT > 0 then dI24dT = math.min(self.I24 - self.I24SH,dI24dT) end + if dI24dT < 0 then dI24dT = math.max(self.I24 - self.I24SH,dI24dT) end + self.I13SH = self.I13SH + dI13dT + self.I24SH = self.I24SH + dI24dT + self.I13 = self.I13SH + self.I24 = self.I24SH + + -- Re-calculate total current and simulate infinite resistance in circuit + if Train.PositionSwitch.TPM > 0 then -- X + if Train.M.Value == 1 then -- PS + self.I13 = self.I13 * Train.LK1.Value * Train.LK2.Value * Train.LK3.Value + self.I24 = self.I24 * Train.LK1.Value * Train.LK2.Value * Train.LK3.Value + + self.I24 = (self.I24 + self.I13)*0.5 + self.I13 = self.I24 + self.Itotal = self.I24 + else + self.I13 = self.I13 * Train.LK1.Value * Train.LK2.Value * Train.LK3.Value + self.I24 = self.I24 * Train.LK1.Value * Train.LK2.Value * Train.LK3.Value + + self.Itotal = self.I13 + self.I24 + end + self.Magnetization = 0 + else -- PS -- PT + self.I13 = self.I13 * Train.LK2.Value * Train.LK3.Value + self.I24 = self.I24 * Train.LK2.Value * Train.LK3.Value + + self.Itotal = self.I13 + self.I24 + local Magnetization = self.Aux750V/750 + self.Magnetization = (self.Magnetization+(1-self.Magnetization)*dT*(0.5+Magnetization*1.5))*Train.LK2.Value*Train.LK3.Value + --print(self.Magnetization) + end + + -- Calculate extra information + self.Uanchor13 = self.I13 * self.Ranchor13 + self.Uanchor24 = self.I24 * self.Ranchor24 + + + ---------------------------------------------------------------------------- + -- Calculate current through stator and shunt + --print(250*Train.TSH.Value*Train.Electric.Main750V/750*self.Rstator13) + --local RR = math.max(0,(Train.Engines.RotationRate-1500)/1500) + --self.Magnetization = self.Main750V*Train.TSH.Value/8*Train.AV.Value + self.Ustator13 = self.I13 * self.Rstator13--+UshuntAdd*RR + self.Ustator24 = self.I24 * self.Rstator24--+UshuntAdd*RR + self.Ishunt13 = (self.Ustator13) / self.Rs1 + self.Istator13 = (self.Ustator13) / RwStator + self.Ishunt24 = (self.Ustator24) / self.Rs2 + self.Istator24 = (self.Ustator24) / RwStator + + if Train.PositionSwitch.TPT > 0 then + local I1,I2 = self.Ishunt13,self.Ishunt24 + self.Ishunt13 = -I2 + self.Ishunt24 = -I1 + + I1,I2 = self.Istator13,self.Istator24 + self.Istator13 = -I2 + self.Istator24 = -I1 + end + + -- Calculate current through RT2 relay + if Train.PositionSwitch.TPT > 0 then + self.IRT2 = math.abs(self.Itotal) + else + self.IRT2 = 0 + end + + -- Sane checks + if self.R1 > 1e5 then self.IR1 = 0 end + if self.R2 > 1e5 then self.IR2 = 0 end + + -- Calculate power and heating + local K = 12.0*1e-5 + local H = (10.00+(15.00*Train.Engines.Speed/80.0))*1e-3 + self.P1 = (self.IR1^2)*self.R1 + self.P2 = (self.IR2^2)*self.R2 + --self.T1 = (self.T1 + self.P1*K*dT - (self.T1-25)*H*dT) + --self.T2 = (self.T2 + self.P2*K*dT - (self.T2-25)*H*dT) + self.Overheat1 = math.min(1-1e-12, + self.Overheat1 + math.max(0,(math.max(0,self.T1-750.0)/400.0)^2)*dT ) + self.Overheat2 = math.min(1-1e-12, + self.Overheat2 + math.max(0,(math.max(0,self.T2-750.0)/400.0)^2)*dT ) + + -- Energy consumption + self.ElectricEnergyUsed = self.ElectricEnergyUsed + math.max(0,self.EnergyChange)*dT + self.ElectricEnergyDissipated = self.ElectricEnergyDissipated + math.max(0,-self.EnergyChange)*dT +end + +local Cosumers = { + LK1 = 0.05, + LK2 = 0.05, + LK3 = 0.05, + SH1 = 0.05, + SH2 = 0.05, + M = 0.05, + RV = 0.02, + PneumaticNo1 = 0.03, + PneumaticNo2 = 0.03, + VDOL = 0.03, + VDOP = 0.03, + VDZ = 0.03, +} +function TRAIN_SYSTEM:Think(dT,iter) + local Train = self.Train + if not self.ResistorBlocksInit then + self.ResistorBlocksInit = true + Train:LoadSystem("ResistorBlocks","Gen_Res_702c") + end + if iter == 1 then Train.ResistorBlocks.InitializeResistances_81_702(Train) end + ---------------------------------------------------------------------------- + -- Voltages from the third rail + ---------------------------------------------------------------------------- + self.Main750V = Train.TR.Main750V + self.Aux750V = Train.TR.Main750V*Train.AV.Value + self.Power750V = self.Main750V * Train.GV.Value + + + ---------------------------------------------------------------------------- + -- Solve circuits + ---------------------------------------------------------------------------- + self:SolvePowerCircuits(Train,dT) + self:SolveInternalCircuits(Train,dT,iter==1) + if iter==1 then + --local time = SysTime() + local count = 0 + for k,v in pairs(Cosumers) do + count = count + Train[k].Value*v + end + count = count + math.abs(Train.RheostatController.Velocity*0.015) + count = count + math.abs(Train.PositionSwitch.TPSpeed*0.02) + count = count + math.abs(Train.PositionSwitch.ReverserSpeed) + self.Cosume = count + end + + + ---------------------------------------------------------------------------- + -- Calculate current flow out of the battery + ---------------------------------------------------------------------------- + --local totalCurrent = 5*A30 + 63*A24 + 16*A44 + 5*A39 + 10*A80 + --local totalCurrent = 20 + 60*DIP +end + +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:SolvePS(Train) + -- Calculate total resistance of the entire series circuit + local Rtotal = self.Ranchor13 + self.Ranchor24 + self.Rstator13 + self.Rstator24 + + self.R1 + self.R2-- + self.R3 + self.ExtraResistanceLK2 + local CircuitClosed = (self.Power750V*Train.LK1.Value > 0) and 1 or 0 + + -- Calculate total current + self.Utotal = (self.Power750V - Train.Engines.E13 - Train.Engines.E24)*Train.LK1.Value + self.Itotal = (self.Utotal / Rtotal)*CircuitClosed + + -- Total resistance (for induction RL circuit) + self.R13 = Rtotal + self.R24 = Rtotal + + -- Calculate everything else + self.I13 = self.Itotal + self.I24 = self.Itotal + self.U13 = self.Utotal*(1/2) + self.U24 = self.Utotal*(1/2) + + -- Energy consumption + self.EnergyChange = math.abs((self.Itotal^2)*Rtotal) +end + +function TRAIN_SYSTEM:SolvePP(Train,inTransition) + -- Temporary hack for transition to parallel circuits + local extraR = 0.00 --inTransition and 0.909 or 0.00 + + -- Calculate total resistance of each branch + local R1 = self.Ranchor13 + self.Rstator13 + self.R1 + extraR-- + self.ExtraResistanceLK2 + local R2 = self.Ranchor24 + self.Rstator24 + self.R2 + extraR-- + self.ExtraResistanceLK2 + local R3 = 0 + local CircuitClosed = (self.Power750V*Train.LK1.Value > 0) and 1 or 0 + + -- Main circuit parameters + local V = self.Power750V*Train.LK1.Value + local E1 = Train.Engines.E13 + local E2 = Train.Engines.E24 + + -- Calculate current through engines 13, 24 + self.I13 = -((E1*R2 + E1*R3 - E2*R3 - R2*V)/(R1*R2 + R1*R3 + R2*R3))*CircuitClosed + self.I24 = -((E2*R1 - E1*R3 + E2*R3 - R1*V)/(R1*R2 + R1*R3 + R2*R3))*CircuitClosed + + -- Total resistance (for induction RL circuit) + self.R13 = R1 + self.R24 = R2 + + -- Calculate everything else + self.U13 = self.I13*R1 + self.U24 = self.I24*R2 + self.Utotal = (self.U13 + self.U24)/2 + self.Itotal = self.I13 + self.I24 + + -- Energy consumption + self.EnergyChange = math.abs((self.I13^2)*R1) + math.abs((self.I24^2)*R2) +end + +function TRAIN_SYSTEM:SolvePT(Train) + -- Winding resistances + local R1 = self.Ranchor13 + self.Rstator13 + local R2 = self.Ranchor24 + self.Rstator24 + -- Total resistance of the entire braking rheostat + local R3 = self.R1 + self.R2-- + self.R3 + + -- Main circuit parameters + local V = self.Power750V*Train.LK1.Value + local E1 = Train.Engines.E13 + local E2 = Train.Engines.E24 + + -- Calculate current through engines 13, 24 + self.I13 = -((E1*R2 + E1*R3 - E2*R3 - R2*V)/(R1*R2 + R1*R3 + R2*R3)) + self.I24 = -((E2*R1 - E1*R3 + E2*R3 - R1*V)/(R1*R2 + R1*R3 + R2*R3)) + + -- Total resistance (for induction RL circuit) + self.R13 = R3+((R1^(-1) + R2^(-1))^(-1)) + self.R24 = R3+((R1^(-1) + R2^(-1))^(-1)) + -- Calculate everything else + self.U13 = self.I13*R1 + self.U24 = self.I24*R2 + self.Utotal = (self.U13 + self.U24)/2 + self.Itotal = self.I13 + self.I24 + + -- Energy consumption + self.EnergyChange = -math.abs(((0.5*self.Itotal)^2)*self.R13) +end diff --git a/lua/metrostroi/systems/sys_81_702_panel.lua b/lua/metrostroi/systems/sys_81_702_panel.lua new file mode 100644 index 0000000..d9de1c2 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_702_panel.lua @@ -0,0 +1,72 @@ +-------------------------------------------------------------------------------- +-- 81-702 controller panel +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_702_Panel") + +function TRAIN_SYSTEM:Initialize() + -- Выключатель батареи (ВБ) + self.Train:LoadSystem("VB","Relay","Switch", {bass = true}) + self.Train:LoadSystem("AV","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("VU","Relay","Switch", {bass = true,normally_closed = true}) + + self.Train:LoadSystem("VU1","Relay","Switch", {bass = true}) --Heater + self.Train:LoadSystem("VU2","Relay","Switch", {bass = true}) --EmergencyLights + self.Train:LoadSystem("VU3","Relay","Switch", {bass = true}) --CabLights + -- Buttons on the panel + self.Train:LoadSystem("KU1","Relay","Switch", {bass = true}) --Lights on + self.Train:LoadSystem("KU2","Relay","Switch", {bass = true}) --Lights off + self.Train:LoadSystem("KU3","Relay","Switch", {bass = true}) --MK + self.Train:LoadSystem("KU4","Relay","Switch", {bass = true}) --KDL + self.Train:LoadSystem("KU5","Relay","Switch", {bass = true}) --KRZD + self.Train:LoadSystem("KU6","Relay","Switch", {bass = true}) --KDP + self.Train:LoadSystem("KU7","Relay","Switch", {bass = true}) --VUD1 + self.Train:LoadSystem("KU8","Relay","Switch", {bass = true,normally_closed = true}) --VUD2 + self.Train:LoadSystem("KU9","Relay","Switch", {bass = true}) --Door sig + self.Train:LoadSystem("KU10","Relay","Switch", {bass = true}) --Pass heater or second KDL + self.Train:LoadSystem("SN","Relay","Switch", {bass = true}) --KSN + self.Train:LoadSystem("VRP","Relay","Switch", {bass = true}) --Vozvrat RP + self.Train:LoadSystem("VZ","Relay","Switch", {bass = true}) --VZ + --self.Train:LoadSystem("KU12","Relay","Switch", {bass = true}) --Scepleniye + --self.Train:LoadSystem("KU13","Relay","Switch", {bass = true}) --Left doors2 + --self.Train:LoadSystem("KU15","Relay","Switch", {bass = true}) --RezMK + --self.Train:LoadSystem("KU16","Relay","Switch", {bass = true}) --Headlights + + self.Train:LoadSystem("RUM","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("R_UNch","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_G","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_Program1","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_Program2","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("PanelLamp","Relay","Switch", {bass = true, normally_closed=true}) + + self.V1 = 0 + self.GRP = 0 + self.RRP = 0 + self.TW18 = 0 + self.SD = 0 + self.Headlights1 = 0 + self.Headlights2 = 0 + self.RedLights = 0 + self.EmergencyLights2 = 0 + self.EmergencyLights1 = 0 + self.MainLights1 = 0 + self.MainLights2 = 0 + + self.Ring = 0 + + self.VPR = 0 + + self.AnnouncerPlaying = 0 +end + +function TRAIN_SYSTEM:ClientInitialize() +end + +function TRAIN_SYSTEM:Outputs() + return { "V1","GRP","RRP","TW18","SD","Headlights1","Headlights2","RedLights","EmergencyLights2","EmergencyLights1","MainLights1","MainLights2","AnnouncerPlaying","VPR","Ring","Radio"} +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_81_702_pneumatic.lua b/lua/metrostroi/systems/sys_81_702_pneumatic.lua new file mode 100644 index 0000000..dd75c8a --- /dev/null +++ b/lua/metrostroi/systems/sys_81_702_pneumatic.lua @@ -0,0 +1,605 @@ +-------------------------------------------------------------------------------- +-- 81-702 pneumatic system +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_702_Pneumatic") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize(parameters) + -- Position of the train drivers valve + -- Type 1 (334) + -- 1 Accelerated charge + -- 2 Normal charge (brake release) + -- 3 Closed + -- 4 Service application + -- 5 Emergency application + self.DriverValvePosition = 2 + self.RealDriverValvePosition = self.DriverValvePosition + + + -- Pressure in reservoir + self.ReservoirPressure = 0.0 -- atm + -- Pressure in trains feed line + self.TrainLinePressure = 8.0 -- atm + -- Pressure in trains brake line + self.BrakeLinePressure = 0.0 -- atm + -- Pressure in brake cylinder + self.BrakeCylinderPressure = 0.0 -- atm + -- Pressure in the door line + self.DoorLinePressure = 0.0 -- atm + self.OldBrakeLinePressure = 0.0 + self.BCPressure = 0 + + --DKPT + self.Train:LoadSystem("DKPT","Relay","R-52B") + -- Valve #1 + self.Train:LoadSystem("PneumaticNo1","Relay") + -- Valve #2 + self.Train:LoadSystem("PneumaticNo2","Relay") + -- ÐвтоматичеÑкий выключатель Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ (ÐВТ) + self.Train:LoadSystem("AVT","Relay","AVT-325") + -- РегулÑтор Ð´Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (ÐК) + self.Train:LoadSystem("AK","Relay","AK-11B") + -- ÐвтоматичеÑкий выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (ÐВУ) + self.Train:LoadSystem("AVU","Relay","AVU-045") + -- Блокировка тормозов + self.Train:LoadSystem("BPT","Relay","") + -- Блокировка дверей + self.Train:LoadSystem("BD","Relay","") + -- Вентили дверного воздухораÑÐ¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÐµÐ»Ñ (ВДОЛ, ВДОП, ВДЗ) + self.Train:LoadSystem("VDOL","Relay","", {bass = true}) + self.Train:LoadSystem("VDOP","Relay","", {bass = true}) + self.Train:LoadSystem("VDZ","Relay","", {bass = true}) + + -- Краны двойной Ñ‚Ñги + self.Train:LoadSystem("DriverValveTLDisconnect","Relay","Switch", {bass = true}) + self.Train:LoadSystem("DriverValveBLDisconnect","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("EmergencyBrakeValve","Relay","Switch") + -- ВоздухораÑпределитель + self.Train:LoadSystem("AirDistributorDisconnect","Relay","Switch") + --УÐÐ’Ð + self.Train:LoadSystem("UAVA","Relay","Switch",{ bass = true}) + self.Train:LoadSystem("UAVAC","Relay","",{normally_closed=true,bass=true}) + -- Isolation valves + self.Train:LoadSystem("FrontBrakeLineIsolation","Relay","Switch", { normally_closed = true, bass = true}) + self.Train:LoadSystem("RearBrakeLineIsolation","Relay","Switch", { normally_closed = true, bass = true}) + self.Train:LoadSystem("FrontTrainLineIsolation","Relay","Switch", { normally_closed = true, bass = true}) + self.Train:LoadSystem("RearTrainLineIsolation","Relay","Switch", { normally_closed = true, bass = true}) + + -- Brake cylinder atmospheric valve open + self.BrakeCylinderValve = 0 + + -- Overpressure protection valve open + self.TrainLineOverpressureValve = 0 + + -- Compressor simulation + self.Compressor = 0 --Simulate overheat with TRK FIXME + + -- Disconnect valve status + self.DriverValveDisconnectPrevious = 0 + + -- Doors state + if not TURBOSTROI then + self.LeftDoorState = { 0,0,0,0 } + self.RightDoorState = { 0,0,0,0 } + self.LeftDoorDir = { 0,0,0,0 } + self.RightDoorDir = { 0,0,0,0 } + self.LeftDoorSpeed = {0,0,0,0} + self.RightDoorSpeed = {0,0,0,0} + self.LeftDoorStuck = {false, false, false, false} + self.RightDoorStuck = {false, false, false, false} + local start = math.Rand(0.6,0.8) + -- 0.6-1 + self.DoorSpeedMain = -math.Rand(start,math.Rand(start+0.1,start+0.2)) + for i=1,#self.LeftDoorSpeed do + if math.random() > 0.7 then + self.LeftDoorSpeed[i] = math.Rand(self.DoorSpeedMain-0.1,self.DoorSpeedMain+0.2) + self.RightDoorSpeed[i] = math.Rand(self.DoorSpeedMain-0.1,self.DoorSpeedMain+0.2) + else + self.LeftDoorSpeed[i] = math.Rand(self.DoorSpeedMain-0.1,self.DoorSpeedMain+0.1) + self.RightDoorSpeed[i] = math.Rand(self.DoorSpeedMain-0.1,self.DoorSpeedMain+0.1) + end + end + end + self.TrainLineOpen = false + self.BrakeLineOpen = false + + self.EmergencyValve = false + self.OldValuePos = self.DriverValvePosition + + self.WeightLoadRatio = 0--math.max(0,math.min(1,(self.Train:GetNW2Float("PassengerCount",0)/200))) +end + +function TRAIN_SYSTEM:Inputs() + return { "BrakeUp", "BrakeDown", "BrakeSet", "ValveType", "Autostop" } +end + +function TRAIN_SYSTEM:Outputs() + return { "BrakeLinePressure", "BrakeCylinderPressure", "DriverValvePosition", + "ReservoirPressure", "TrainLinePressure", "DoorLinePressure", "WeightLoadRatio" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "BrakeSet" then + self.DriverValvePosition = math.floor(value) + if self.DriverValvePosition < 1 then self.DriverValvePosition = 1 end + if self.DriverValvePosition > 5 then self.DriverValvePosition = 5 end + elseif (name == "BrakeUp") and (value > 0.5) then + self:TriggerInput("BrakeSet",self.DriverValvePosition+1) + elseif (name == "BrakeDown") and (value > 0.5) then + self:TriggerInput("BrakeSet",self.DriverValvePosition-1) + elseif name == "ValveType" then + self.ValveType = math.floor(value) + elseif name == "Autostop" then + local HaveUAVA = not self.Train.SubwayTrain or not self.Train.SubwayTrain.ARS or not self.Train.SubwayTrain.ARS.NoUAVA + if HaveUAVA and self.Train.UAVA.Value == 0 then + self.EmergencyValve = true + self.Train.UAVAC:TriggerInput("Set",0) + if value > 0 then RunConsoleCommand("say","Autostop braking",self.Train:GetDriverName()) end + end + end +end + + +-- TODO: почиÑтить Ñто говно, Ñделать раздельные звуки пневмы +-- Calculate derivatives +function TRAIN_SYSTEM:equalizeCouplePressure(dT,pressure,train,valve_status,rate,close_rate) + if not valve_status then return 0 end + local other + if IsValid(train) then other = train.Pneumatic end + + -- Get second pressure + local P2 = 0 + if other then P2 = other[pressure] end + if (not other) and (valve_status) then + self.TrainLineOpen = (pressure == "TrainLinePressure") + rate = close_rate or rate + --self.TrainLinePressure_dPdT = 0.0 + end + + -- Calculate rate + local dPdT = rate * (P2 - self[pressure]) + -- Calculate delta + local dP = dPdT*dT + if other and other.ReadOnly then + dP = dP/250 + end + -- Equalized pressure + local P0 = (P2 + self[pressure]) / 2 + -- Update pressures + if dP > 0 then + self[pressure] = math.min(P0,self[pressure] + dP) + if other and not other.ReadOnly then + other[pressure] = math.max(P0,other[pressure] - dP) + end + else + self[pressure] = math.max(P0,self[pressure] + dP) + if other and not other.ReadOnly then + other[pressure] = math.min(P0,other[pressure] - dP) + end + end + -- Update delta if losing air + if self.TrainLineOpen and (pressure == "TrainLinePressure") then + self[pressure.."_dPdT"] = (self[pressure.."_dPdT"] or 0) + dPdT + end + return dP +end +------------------------------------------------------------------------------- +function TRAIN_SYSTEM:UpdatePressures(Train,dT) + local frontBrakeOpen = Train.FrontBrakeLineIsolation.Value == 0 + local rearBrakeOpen = Train.RearBrakeLineIsolation.Value == 0 + local frontTrainOpen = Train.FrontTrainLineIsolation.Value == 0 + local rearTrainOpen = Train.RearTrainLineIsolation.Value == 0 + + local Ft = IsValid(Train.FrontTrain) and Train.FrontTrain + local Rt = IsValid(Train.RearTrain) and Train.RearTrain + local Fc, Rc = Train.FrontCouple or Train.FrontBogey, Train.RearCouple or Train.RearBogey + local Fb,Rb + if IsValid(Fc) and Fc.DepotPneumo then Fb = Fc.DepotPneumo end + if IsValid(Rc) and Rc.DepotPneumo then Rb = Rc.DepotPneumo end + + local frontBrakeLeak = false + local rearBrakeLeak = false + local frontTrainLeak = false + local rearTrainLeak = false + + -- Check if both valve on this train and connected train are open + if Ft and Ft.FrontBrakeLineIsolation then + if Ft.FrontTrain == Train then -- Nose to nose + frontBrakeLeak = frontBrakeOpen and Ft.FrontBrakeLineIsolation.Value==1 and 0.08 + frontTrainLeak = frontTrainOpen and Ft.FrontTrainLineIsolation.Value==1 and 0.08 + else -- Rear to nose + frontBrakeLeak = frontBrakeOpen and Ft.RearBrakeLineIsolation.Value==1 and 0.08 + frontTrainLeak = frontTrainOpen and Ft.RearTrainLineIsolation.Value==1 and 0.08 + end + else + frontBrakeLeak = frontBrakeOpen and 0.7 + frontTrainLeak = frontTrainOpen and not Fb and 0.3 + end + if Rt and Rt.FrontBrakeLineIsolation then + if Rt.FrontTrain == Train then -- Nose to nose + rearBrakeLeak = rearBrakeOpen and Rt.FrontBrakeLineIsolation.Value==1 and 0.08 + rearTrainLeak = rearTrainOpen and Rt.FrontTrainLineIsolation.Value==1 and 0.08 + else -- Rear to nose + rearBrakeLeak = rearBrakeOpen and Rt.RearBrakeLineIsolation.Value==1 and 0.08 + rearTrainLeak = rearTrainOpen and Rt.RearTrainLineIsolation.Value==1 and 0.08 + end + else + rearBrakeLeak = rearBrakeOpen and 0.7 + rearTrainLeak = rearTrainOpen and not Rb and 0.3 + end + + -- Equalize pressure + local Fl=math.min(0,self:equalizeCouplePressure(dT,"BrakeLinePressure",frontBrakeLeak==false and Ft,frontBrakeOpen,100,frontBrakeLeak or 0.08)*3)*(frontBrakeLeak and 1 or 0) + local Rl=math.min(0,self:equalizeCouplePressure(dT,"BrakeLinePressure",rearBrakeLeak==false and Rt,rearBrakeOpen,100,rearBrakeLeak or 0.08)*3)*(rearBrakeLeak and 1 or 0) + + Fl=Fl+math.min(0,self:equalizeCouplePressure(dT,"TrainLinePressure",frontTrainLeak==false and Ft or Fb,frontTrainOpen,100,frontTrainLeak or 0.08)*10)*(frontTrainLeak and 1 or 0) + Rl=Rl+math.min(0,self:equalizeCouplePressure(dT,"TrainLinePressure",rearTrainLeak==false and Rt or Rb,rearTrainOpen,100,rearTrainLeak or 0.08)*10)*(rearTrainLeak and 1 or 0) + + self.TrainLineOpen=frontTrainLeak or rearTrainLeak + self.BraieLineOpen=frontBrakeLeak or rearBrakeLeak + Train:SetPackedRatio("FrontLeak",Fl) + Train:SetPackedRatio("RearLeak",Rl) +end + + + +function TRAIN_SYSTEM:equalizePressure(dT,pressure,target,rate,fill_rate,no_limit,smooth) + if fill_rate and (target > self[pressure]) then rate = fill_rate end + + -- Calculate derivative + local dPdT = rate + if target < self[pressure] then dPdT = -dPdT end + local dPdTramp = math.min(1.0,math.abs(target - self[pressure])*(smooth or 0.5)) + dPdT = dPdT*dPdTramp + + -- Update pressure + self[pressure] = self[pressure] + dT * dPdT + self[pressure] = math.max(0.0,math.min(16.0,self[pressure])) + self[pressure.."_dPdT"] = (self[pressure.."_dPdT"] or 0) + dPdT + if no_limit ~= true then + if self[pressure] == 0.0 then self[pressure.."_dPdT"] = 0 end + if self[pressure] == 16.0 then self[pressure.."_dPdT"] = 0 end + end + return dPdT +end +------------------------------------------------------------------------------- +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + self.WeightLoadRatio = math.max(0,math.min(1,(Train:GetNW2Float("PassengerCount")/200))) + + ---------------------------------------------------------------------------- + -- Accumulate derivatives + self.TrainLinePressure_dPdT = 0.0 + self.BrakeLinePressure_dPdT = 0.0 + self.ReservoirPressure_dPdT = 0.0 + self.BrakeCylinderPressure_dPdT = 0.0 + self.PneumaticNo1Pressure_dPdT = 0.0 + self.PneumaticNo2Pressure_dPdT = 0.0 + + -- Reduce pressure for brake line + self.TrainToBrakeReducedPressure = math.min(5.1,self.TrainLinePressure) -- * 0.725) + -- Feed pressure to door line + self.DoorLinePressure = self.TrainToBrakeReducedPressure * 0.90 + local trainLineConsumption_dPdT = 0.0 + local wagc = Train:GetWagonCount() + local BLDisconnect = Train.DriverValveBLDisconnect.Value > 0 + local TLDisconnect = Train.DriverValveTLDisconnect.Value > 0 + local pr_speed = 1*wagc--*((self.BrakeLinePressure-self.ReservoirPressure)/0.6) --2 + if self.Leak or self.BraieLineOpen then pr_speed = pr_speed*0.3 end + -- 334: 1 Fill reservoir from train line, fill brake line from train line + if (self.RealDriverValvePosition == 1) then + if TLDisconnect or self.ReservoirPressure > self.TrainLinePressure then + self:equalizePressure(dT,"ReservoirPressure", self.TrainLinePressure, 1,nil,nil,2) + if BLDisconnect then + self:equalizePressure(dT,"BrakeLinePressure", self.TrainLinePressure, pr_speed,nil,nil,2) + end + end + end + + -- 334: 2 Brake line, reservoir replenished from brake line reductor + if (self.RealDriverValvePosition == 2) then + if TLDisconnect or self.ReservoirPressure > self.TrainToBrakeReducedPressure*1.05 then + self:equalizePressure(dT,"ReservoirPressure", self.TrainToBrakeReducedPressure*1.05, 0.55,nil,nil,2) + end + end + + -- 334: 3 Close all valves + if (self.RealDriverValvePosition == 3) then + -- Typical leak + self:equalizePressure(dT,"ReservoirPressure", 0.00, 0.001) + end + + -- 334: 4 Reservoir open to atmosphere, brake line equalizes with reservoir + if (self.RealDriverValvePosition == 4) then + self:equalizePressure(dT,"ReservoirPressure", 0.0,0.55,nil,nil,2)--0.35)-0.55 + end + + -- 334: 5 Reservoir and brake line open to atmosphere + if (self.RealDriverValvePosition == 5) then + self:equalizePressure(dT,"ReservoirPressure", 0.0, 1.00)--,nil,nil,2)--1.70 + if BLDisconnect then + self:equalizePressure(dT,"BrakeLinePressure", 0.0, pr_speed,nil,nil,2) + end + end + if BLDisconnect and (TLDisconnect or self.ReservoirPressure < self.BrakeLinePressure) then + --local pr_speed = wagc*(1.375) --2 + local pr_speed = 1.25*wagc + if self.Leak or self.BraieLineOpen then pr_speed = pr_speed*0.3 end + Train:SetPackedRatio("ReservoirPressure_dPdT",self:equalizePressure(dT,"BrakeLinePressure", self.ReservoirPressure,pr_speed,pr_speed*3,nil)/wagc*2) + else + Train:SetPackedRatio("ReservoirPressure_dPdT",0) + end + trainLineConsumption_dPdT = trainLineConsumption_dPdT + math.max(0,self.BrakeLinePressure_dPdT) + trainLineConsumption_dPdT = trainLineConsumption_dPdT + math.max(0,self.ReservoirPressure_dPdT)*0.05 + + Train:SetPackedRatio("Crane_dPdT", self.ReservoirPressure_dPdT ) + + self.Leak = false + local leak = 0 + if self.EmergencyValveDisable and (self.BrakeLinePressure-self.OldBrakeLinePressure)>0.01 then + self.EmergencyValveDisable=false + self.EmergencyValve=false + end + self.OldBrakeLinePressure = self.BrakeLinePressure + if self.EmergencyValve then + --local leakst = math.max(0,(pr_speed*1.17*(self.BrakeLinePressure-math.min(2.5,self.TrainToBrakeReducedPressure))*0.9)) + local leakst = 1.1*(Train:GetWagonCount())*math.Clamp(self.BrakeLinePressure/4,0,1) + leak = self:equalizePressure(dT,"BrakeLinePressure", 0.0,leakst*2,false,false,0.4) + if (leak >= -0.2*(Train:GetWagonCount()) or Train.UAVA.Value > 0) then + self.EmergencyValveDisable = true + end + self.Leak = true + end + local UAVABlocked = (self.BrakeLinePressure>3.5 and Train.UAVA.Value==0) + if (Train.UAVA.Blocked>0) ~= UAVABlocked then + Train.UAVA:TriggerInput("Block",UAVABlocked and 1 or 0) + end + + local UAVACBlocked = self.EmergencyValve and not self.EmergencyValveDisable + if (Train.UAVAC.Blocked>0) ~= UAVACBlocked then + Train.UAVAC:TriggerInput("Block",UAVACBlocked and 1 or 0) + end + + Train:SetPackedRatio("EmergencyValve_dPdT", -leak/wagc) + + local leak = 0 + if Train.EmergencyBrakeValve and Train.EmergencyBrakeValve.Value > 0.5 then + --local leakst = (1.6*(Train:GetWagonCount())*(self.BrakeLinePressure-math.min(2.5,self.TrainToBrakeReducedPressure))*0.9) + leak = self:equalizePressure(dT,"BrakeLinePressure", 0.0,(1.1*wagc)*2,false,false,0.4) + self.Leak = true + end + Train:SetPackedRatio("EmergencyBrakeValve_dPdT", -leak/wagc) + ---------------------------------------------------------------------------- + -- Fill brake cylinders + if Train.AirDistributorDisconnect.Value == 0 then + -- Valve #1 + self.BrakeCylinderRegulationError = self.BrakeCylinderRegulationError or (math.random()*0.20 - 0.10) + local error = self.BrakeCylinderRegulationError + if (Train.PneumaticNo1.Value == 1.0) and (Train.PneumaticNo2.Value == 0.0) then + if self.PN1 == 0 then + --1,2 + self.PN1 = math.min(self.TrainLinePressure,(1.2 + error + self.WeightLoadRatio*0.6)) + if self.BePN1 == false and self.BrakeCylinderPressure > 0.2 then + Train:PlayOnce("PN1end","stop") + end + self.BePN1 = true + end + elseif self.PN1 ~= 0 then + self.PN1 = 0 + end + -- Valve #2 + if Train.PneumaticNo2.Value == 1.0 then + if self.PN2 == 0 then + self.PN2 = math.min(self.TrainLinePressure,(2.2 + error + self.WeightLoadRatio*1.2)) + if self.BePN2 == false and self.BrakeCylinderPressure > 1.6 then + Train:PlayOnce("PN2end","stop") + end + self.BePN2 = true + end + elseif self.PN2 ~= 0 then + self.PN2 = 0 + end + local targetPres = math.max(0,math.min(5.2,1.5*(math.min(5.1,self.TrainToBrakeReducedPressure) - self.BrakeLinePressure))) + if self.BCPressure < targetPres then + self.BCPressure = math.min(targetPres,self.BCPressure+(0.5+math.max(0,(targetPres-self.BCPressure)-0.2)*0.6)*dT) + elseif self.BCPressure > targetPres then + self.BCPressure = math.max(targetPres,self.BCPressure-2*dT) + end + local targetPressure = self.PN1+self.PN2+self.BCPressure + if math.abs(self.BrakeCylinderPressure - targetPressure) > 0.32 then + self.BrakeCylinderValve = 1 + end + if math.abs(self.BrakeCylinderPressure - targetPressure) < 0.025 then + self.BrakeCylinderValve = 0 + end + if self.BrakeCylinderValve == 1 then + self:equalizePressure(dT,"BrakeCylinderPressure", math.min(2.7 + self.WeightLoadRatio*1.3,targetPressure), 1+math.Clamp((self.BrakeCylinderPressure-0.5)/2.8,0,0.7), 2, nil, 0.8+math.Clamp((self.BrakeCylinderPressure-0.75)/0.6,0,1)) --0.75, 1.25) + end + trainLineConsumption_dPdT = trainLineConsumption_dPdT + math.max(0,self.BrakeCylinderPressure_dPdT*0.5)--]] + else + self:equalizePressure(dT,"BrakeCylinderPressure", 0.0, 2.00) + end + if (self.BrakeCylinderPressure > 0.2 and self.BrakeCylinderPressure_dPdT > 0.1 or self.BrakeCylinderPressure_dPdT > 1) and not self.BrakeEngaged then + self.BrakeEngaged = true + Train:PlayOnce("brake","bass",1,math.Clamp(self.BrakeCylinderPressure_dPdT,0.7,1.2)) + end + if self.BrakeCylinderPressure < 1 and self.BrakeCylinderPressure_dPdT < -0.1 and self.BrakeEngaged then + self.BrakeEngaged = false + end + Train:SetPackedRatio("BrakeCylinderPressure_dPdT", self.BrakeCylinderPressure_dPdT) + self.TrainLinePressure = self.TrainLinePressure-math.max(0,self.BrakeCylinderPressure_dPdT*0.002) + if Train.PneumaticNo2.Value == 0 then + if self.BePN2 == true then + self.BePN2 = CurTime() + elseif self.BePN2 and self.BrakeCylinderPressure_dPdT > -0.2 then + Train:PlayOnce("PN2end","bass",math.Clamp(math.min(1,(CurTime()-self.BePN2)/1.3)*((3.2-self.BrakeCylinderPressure)/1.2),0,1)) + self.BePN2 = false + end + end + if self.BePN2 == false and (self.BrakeCylinderPressure_dPdT >= 0.2) then + self.BePN2 = nil + Train:PlayOnce("PN2end","stop") + end + -- Simulate cross-feed between different wagons + self:UpdatePressures(Train,dT) + + ---------------------------------------------------------------------------- + -- Simulate compressor operation and train line depletion + self.Compressor = Train.KK.Value * (Train.Electric.Aux750V > 550 and 1 or 0) + + self.TrainLinePressure = self.TrainLinePressure - 0.07*trainLineConsumption_dPdT*dT -- 0.190 --0.170 + if self.Compressor == 1 then self:equalizePressure(dT,"TrainLinePressure", 10.0, 0.02) end + self:equalizePressure(dT,"TrainLinePressure", 0,0.001) + -- Overpressure + if self.TrainLinePressure > 9.2 then self.TrainLineOverpressureValve = 1 end + if self.TrainLineOverpressureValve == 1 then + self:equalizePressure(dT,"TrainLinePressure", 0.0, 0.2) + self.TrainLineOpen = true + if self.TrainLinePressure < 5.2 then self.TrainLineOverpressureValve = 0 end + end + + ---------------------------------------------------------------------------- + -- Pressure triggered relays + Train.AVT:TriggerInput("Open", self.BrakeCylinderPressure > 1.9) -- 1.8 - 2.0 + Train.AVT:TriggerInput("Close",self.BrakeCylinderPressure < 1.2) -- 0.9 - 1.5 + Train.AK:TriggerInput( "Open", self.TrainLinePressure > 8.2) + Train.AK:TriggerInput( "Close",self.TrainLinePressure < 6.3) + Train.AVU:TriggerInput("Open", self.BrakeLinePressure < 2.7) -- 2.7 - 2.9 + Train.AVU:TriggerInput("Close",self.BrakeLinePressure > 4.3) -- 3.5 - 3.7 + Train.BPT:TriggerInput("Set", self.BrakeCylinderPressure > 0.4) + Train.DKPT:TriggerInput("Set", self.BrakeCylinderPressure > 0.2) -- 1.8 - 2.0 + + ---------------------------------------------------------------------------- + -- Simulate doors opening, closing + if self.DoorLinePressure > 3.5 then + if (Train.VDOL.Value == 1.0) and (Train.VDOP.Value == 0.0) and not self.DoorLeft then + self.DoorLeft = true + end + if (Train.VDOL.Value == 0.0) and (Train.VDOP.Value == 1.0) and not self.DoorRight then + self.DoorRight = true + end + if (Train.VDZ.Value == 1.0 or Train.VDOL.Value == 1.0 and Train.VDOP.Value == 1.0 or self.RZDTimer) and (self.DoorLeft or self.DoorRight) then + if not self.OpenWaitL or CurTime()-self.OpenWaitL < 0.2 then + self.DoorLeft = false + end + if not self.OpenWaitR or CurTime()-self.OpenWaitR < 0.2 then + self.DoorRight = false + end + else + self.CloseValue = nil + end + if Train.VDOL.Value == 1.0 and Train.VDOP.Value == 1.0 then + self.RZDTimer = CurTime() + elseif self.RZDTimer and CurTime()-self.RZDTimer > 0.1 then + self.RZDTimer = nil + end + end + if self.VDOL ~= Train.VDOL.Value then + self.VDOL = Train.VDOL.Value + self:equalizePressure(dT,"TrainLinePressure", 0.0, 0.3) + end + if self.VDOP ~= Train.VDOP.Value then + self.VDOP = Train.VDOP.Value + self:equalizePressure(dT,"TrainLinePressure", 0.0, 0.3) + end + if self.VDZ ~= Train.VDZ.Value then + self.VDZ = Train.VDZ.Value + self:equalizePressure(dT,"TrainLinePressure", 0.0, 0.3) + end + if Train.CanStuckPassengerLeft then + for i in ipairs(self.LeftDoorStuck) do + self.LeftDoorStuck[i] = math.random() < (0.6+math.min(2,2-self.LeftDoorSpeed[i])*0.2)*Train.CanStuckPassengerLeft*0.6 and (math.random() > 0.7 and CurTime()+math.random()*15) + end + Train.CanStuckPassengerLeft = false + end + if Train.CanStuckPassengerRight then + for i in ipairs(self.RightDoorStuck) do + self.RightDoorStuck[i] = math.random() < (0.6+math.min(2,2-self.LeftDoorSpeed[i])*0.2)*Train.CanStuckPassengerRight*0.6 and (math.random() > 0.7 and CurTime()+math.random()*15) + end + Train.CanStuckPassengerRight = false + end + + + Train.LeftDoorsOpen = false + Train.RightDoorsOpen = false + local openL = true + local openR = true + for i=1,4 do + self.LeftDoorDir[i] = math.Clamp(self.LeftDoorDir[i]+dT/(self.DoorLeft and self.LeftDoorSpeed[i] or -self.LeftDoorSpeed[i]),-1,1) + self.RightDoorDir[i] = math.Clamp(self.RightDoorDir[i]+dT/(self.DoorRight and self.RightDoorSpeed[i] or -self.RightDoorSpeed[i]),-1,1) + self.LeftDoorState[i] = math.Clamp(self.LeftDoorState[i] + ((self.LeftDoorDir[i]/self.LeftDoorSpeed[i])*dT),self.LeftDoorStuck[i] and 0.3 or 0,1) + if self.LeftDoorState[i] == 0 or self.LeftDoorState[i] == 1 then self.LeftDoorDir[i] = 0 end + self.RightDoorState[i] = math.Clamp(self.RightDoorState[i] + ((self.RightDoorDir[i]/self.RightDoorSpeed[i])*dT),self.RightDoorStuck[i] and 0.3 or 0,1) + if self.RightDoorState[i] == 0 or self.RightDoorState[i] == 1 then self.RightDoorDir[i] = 0 end + if not Train.LeftDoorsOpen and self.LeftDoorState[i] > 0 then + Train.LeftDoorsOpen = true + end + if self.LeftDoorState[i] > self.LeftDoorSpeed[i]/20 then self.OpenWaitL = false end + if self.RightDoorState[i] > self.LeftDoorSpeed[i]/20 then self.OpenWaitR = false end + if self.LeftDoorState[i] > 0 then openL = false end + if self.RightDoorState[i] > 0 then openR = false end + if not Train.RightDoorsOpen and self.RightDoorState[i] > 0 then + Train.RightDoorsOpen = true + end + Train:SetPackedRatio("DoorL"..i,self.LeftDoorState[i]) + Train:SetPackedRatio("DoorR"..i,self.RightDoorState[i]) + if self.LeftDoorStuck[i] and (self.DoorLeft or type(self.LeftDoorStuck[i]) == "number" and CurTime()-self.LeftDoorStuck[i] > 0) then + self.LeftDoorStuck[i] = false + end + if self.RightDoorStuck[i] and (self.DoorRight or type(self.RightDoorStuck[i]) == "number" and CurTime()-self.RightDoorStuck[i] > 0) then + self.RightDoorStuck[i] = false + end + Train:SetPackedBool("DoorLS"..i,self.LeftDoorStuck[i]) + Train:SetPackedBool("DoorRS"..i,self.RightDoorStuck[i]) + end + if openL and not self.OpenWaitL then self.OpenWaitL = CurTime() end + if openR and not self.OpenWaitR then self.OpenWaitR = CurTime() end + Train:SetPackedBool("DoorL",self.DoorLeft) + Train:SetPackedBool("DoorR",self.DoorRight) + Train.BD:TriggerInput("Set",not Train.RightDoorsOpen and not Train.LeftDoorsOpen) + + ---------------------------------------------------------------------------- + -- FIXME + Train:SetNW2Bool("FbI",Train.FrontBrakeLineIsolation.Value ~= 0) + Train:SetNW2Bool("RbI",Train.RearBrakeLineIsolation.Value ~= 0) + Train:SetNW2Bool("FtI",Train.FrontTrainLineIsolation.Value ~= 0) + Train:SetNW2Bool("RtI",Train.RearTrainLineIsolation.Value ~= 0) + Train:SetNW2Bool("AD",Train.AirDistributorDisconnect.Value == 0) + + + self.Timer = self.Timer or CurTime() + if ((CurTime() - self.Timer > 0.10) and (self.DriverValvePosition > self.RealDriverValvePosition)) then + self.Timer = CurTime() + if self.RealDriverValvePosition ~= 3 then + Train:PlayOnce("br_334",self.RealDriverValvePosition.."-"..(self.RealDriverValvePosition+1)) + end + self.RealDriverValvePosition = self.RealDriverValvePosition + 1 + end + if ((CurTime() - self.Timer > 0.10) and (self.DriverValvePosition < self.RealDriverValvePosition)) then + self.Timer = CurTime() + if self.RealDriverValvePosition ~= 5 then + Train:PlayOnce("br_334",self.RealDriverValvePosition.."-"..(self.RealDriverValvePosition-1)) + end + self.RealDriverValvePosition = self.RealDriverValvePosition - 1 + end + --[=[ + --Pneumatic relays blocking + if Train.LK1 then + if self.TrainLinePressure < 3 and Train.LK1.Blocked < 1 then + for i = 1,5 do + --self.Train[Format("LK%d",i)]:TriggerInput("Open", 1) + self.Train[LKNames[i]]:TriggerInput("Block", 1) + end + Train.RKR:TriggerInput("Block", 1) + elseif self.TrainLinePressure > 3 and Train.LK1.Blocked > 0 then + for i = 1,5 do + self.Train[LKNames[i]]:TriggerInput("Block", 0) + end + Train.RKR:TriggerInput("Block", 0) + end + end--]=] +end diff --git a/lua/metrostroi/systems/sys_81_703_electric.lua b/lua/metrostroi/systems/sys_81_703_electric.lua new file mode 100644 index 0000000..a6551d0 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_703_electric.lua @@ -0,0 +1,842 @@ +---------------------------------------------------------------------------- +-- 81-703, 81-707 electric schemes +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_703_Electric") +TRAIN_SYSTEM.E = 1 +TRAIN_SYSTEM.Ezh = 2 +TRAIN_SYSTEM.Em = 3 +function TRAIN_SYSTEM:Initialize(typ1,typ2) + self.RRI = 0 + -- Load all functions from base + Metrostroi.BaseSystems["Electric"].Initialize(self) + for k,v in pairs(Metrostroi.BaseSystems["Electric"]) do + if not self[k] and type(v) == "function" then + self[k] = v + end + end +end + +if CLIENT then return end +function TRAIN_SYSTEM:Inputs(...) + return { "Type", "RRI" } +end +function TRAIN_SYSTEM:Outputs(...) + return Metrostroi.BaseSystems["Electric"].Outputs(self,...) +end +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Type" then + self.Type = value + end + if name == "RRI" then self.RRI = value end +end + +-- Node values +local S = {} +-- Converts boolean expression to a number +local function C(x) return x and 1 or 0 end +local min = math.min +local max = math.max + +function TRAIN_SYSTEM:SolveAllInternalCircuits(Train) + ---[[ + local RheostatController = Train.RheostatController + local P = Train.PositionSwitch.SelectedPosition + local RK = RheostatController.SelectedPosition + local B = (Train.Battery.Voltage > 55) and 1 or 0 + local T = Train.SolverTemporaryVariables + + local elType = self.Type + + local isE = elType == 1 + local isEzh = elType == 2 + local isEm = elType == 3 + + local BO = min(1,B * Train.VB.Value+T[10])--B * Train.VB.Value + local KV = Train.KV + local KRU = Train.KRU + local Panel = Train.Panel + local ARS = Train.ALS_ARS + local RC + if isEzh then RC = Train.RC1.Value end + + Panel.V1 = BO + + Train:WriteTrainWire(10,B*Train.VB.Value) + Panel.GRP = BO*Train.RPvozvrat.Value + S["10AK"] = BO*Train.VU.Value + + if isE then + S["U2"] = S["10AK"]*(KV["U2-10AK"]+Train.R1_5.Value) + else + S["U2"] = S["10AK"]*KV["U2-10AK"] + end + + if isEzh then + Train:WriteTrainWire(14,(BO*KRU["14/1-B3"]+T[5]*Train.KRR.Value)*(Train.ROT2.Value+Train.KAH.Value)*(Train.UOS.Value+Train.SOT.Value)*Train.KU14.Value) + elseif isEm then + Train:WriteTrainWire(14,(BO*KRU["14/1-B3"]+T[5]*Train.KRR.Value)*Train.KU14.Value) + end + Panel.RRP = S["U2"]*T[18] + if isEzh then + Train:WriteTrainWire(4,S["10AK"]*KV["U2-4"]) + Train:WriteTrainWire(5,S["10AK"]*KV["U2-5"]+KRU["5/3-ZM31"]*-10*(1-Train.KRR.Value)+BO*KRU["14/1-B3"]*Train.KRR.Value) + Panel.Sequence = T[2] + if self.RRI> 0 then + local RRI_VV = Train.RRI_VV + RRI_VV.Power = BO*Train.RRIEnable.Value + RRI_VV.AmplifierPower = BO*Train.RRIAmplifier.Value + Train:WriteTrainWire(13,RRI_VV.AmplifierPower*Train.RRI.LineOut) + --RRI_VV.CabinSpeakerPower = T[13] + else + local ASNP_VV = Train.ASNP_VV + ASNP_VV.Power = BO*Train.R_Radio.Value*Train.R_ASNPOn.Value + ASNP_VV.AmplifierPower = ASNP_VV.Power*Train.ASNP.LineOut + Train:WriteTrainWire(13,ASNP_VV.AmplifierPower) + Panel.CBKIPower = T[10] + --Train:WriteTrainWire(-13,ASNP_VV.AmplifierPower*Train.PowerSupply.X2_2) + --ASNP_VV.CabinSpeakerPower = ASNP_VV.Power*Train.ASNP.LineOut*Train.R_G.Value + end + elseif isEm then + Train:WriteTrainWire(4,S["10AK"]*KV["U2-4"]) + Train:WriteTrainWire(5,S["10AK"]*KV["U2-5"]+KRU["5/3-ZM31"]*-10*(1-Train.KRR.Value)+BO*KRU["14/1-B3"]*Train.KRR.Value) + --Panel.Sequence = T[2] + Panel.UKS = BO*Train.UKS.UKSEngaged + Panel.UKSb = BO*Train.UKS.UKSTriggered + if self.RRI> 0 then + local RRI_VV = Train.RRI_VV + RRI_VV.Power = BO*Train["50V"].Value*Train.RRIEnable.Value + RRI_VV.AmplifierPower = BO*Train.RRIAmplifier.Value + Train:WriteTrainWire(13,RRI_VV.AmplifierPower*Train.RRI.LineOut) + --RRI_VV.CabinSpeakerPower = T[13] + else + local ASNP_VV = Train.ASNP_VV + ASNP_VV.Power = BO*Train["50V"].Value*Train.R_ASNPOn.Value + ASNP_VV.AmplifierPower = ASNP_VV.Power*Train.ASNP.LineOut + Train:WriteTrainWire(13,ASNP_VV.AmplifierPower) + Panel.CBKIPower = T[10]*Train["50V"].Value + --Train:WriteTrainWire(-13,ASNP_VV.AmplifierPower*Train.PowerSupply.X2_2) + --ASNP_VV.CabinSpeakerPower = ASNP_VV.Power*Train.ASNP.LineOut*Train.R_G.Value + end + else + local RRI_VV = Train.RRI_VV + RRI_VV.Power = BO*Train.RRIEnable.Value + RRI_VV.AmplifierPower = BO*Train.RRIAmplifier.Value + Train:WriteTrainWire(13,RRI_VV.AmplifierPower*Train.RRI.LineOut) + + Train:WriteTrainWire(4,S["U2"]*KV["U2-4"]) + Train:WriteTrainWire(5,S["U2"]*KV["U2-5ZH"]*(Train.UAVAC.Value+KV["5ZH-5"])) + end + Panel.AnnouncerPlaying = T[13] + Train:WriteTrainWire(24,S["U2"]*Train.KU8.Value) + if isE then + Train:WriteTrainWire(14,BO*KV["10-14B"]*KV["14-14B"]) + Train:WriteTrainWire(1,S["10AK"]*Train.R1_5.Value) + Train:WriteTrainWire(2,S["U2"]*KV["U2-2"]) + Train:WriteTrainWire(3,S["U2"]*KV["U2-3"]) + Train:WriteTrainWire(25,S["U2"]*KV["U2-25"]) + Train:WriteTrainWire(20,S["U2"]*KV["U2-20"]) + Train:WriteTrainWire(6,S["U2"]*KV["U2-6"]) + Train.RV2:TriggerInput("Set",S["10AK"]*KV["10AK-7A"]) + Train.R1_5:TriggerInput("Set",S["10AK"]*Train.RV2.Value) + Train:WriteTrainWire(17,S["10AK"]*Train.KU9.Value) + + Train:WriteTrainWire(8,BO*KV["10-8"]) + elseif isEzh then + S["10a"] = BO*KV["10a-8"] + ARS.ALS = S["10a"]*Train.ALS.Value*RC + ARS.GE = S["10a"]*Train.ARS.Value*RC + + --Train:WriteTrainWire(-34,S["10AK"]*(1-ARS.GE)) + --Train:WriteTrainWire(34,Train.RKTT.Value+Train.DKPT.Value) + + ARS.KT = T[34]*T[-34]*ARS.GE + + ARS.KRT = max(0,T[6])*RC + ARS.KRH = (max(0,T[1])+T[14])*RC + ARS.KRO = S["10a"]*(1-Train.KU14.Value)*KV["U4-10AK"]*RC + --ARS.KRO = (T[87]+S["7Ga"]*KV["7GA-RC27"]+S["14a"]*Train.A42.Value*(1-Train.KRP.Value))*(1-Train.BSM_KRH.Value) + ARS.Freq = BO*KV["7D-7G"]*Train.ALSFreq.Value + + ARS.KB=ARS.GE*(Train.KVT.Value+Train.PB.Value)*RC + + Train:WriteTrainWire(-34,BO*(1-ARS.GE)) + Train:WriteTrainWire(34,Train.RKTT.Value+Train.DKPT.Value) + Panel.KT = T[-34]*T[34] + + Train.ROT1:TriggerInput("Set",ARS.GE*ARS["33"]+(1-RC)*Train.KAH.Value) + Train.ROT2:TriggerInput("Set",ARS.GE*ARS["33"]+(1-RC)*Train.KAH.Value) + Train:WriteTrainWire(1,S["10AK"]*Train.R1_5.Value+KRU["1/3-ZM31"]*-10) + Train:WriteTrainWire(2,S["U2"]*KV["U2-2"]+ARS["2"]*RC+KRU["2/3-ZM31"]*-10) + Train:WriteTrainWire(3,S["U2"]*KV["U2-3"]+ARS["2"]*RC+KRU["3/3-ZM31"]*-10) + --Train:WriteTrainWire(25,S["U2"]*KV["25-6"]*(ARS["25"]*RC+(1-RC))) + Train:WriteTrainWire(25,S["U2"]*KV["25-6"]*(Train.ROT1.Value+(1-RC)*Train.KAH.Value)) + Train:WriteTrainWire(20,S["U2"]*KV["U2-20"]+ARS["20"]*RC+KRU["20/3-ZM31"]*-10) + Train:WriteTrainWire(6,S["10AK"]*Train.RVT.Value) + + Train.RVT:TriggerInput("Set",S["10AK"]*KV["U2-6"]+ARS["33G"]*RC) + Train.RV2:TriggerInput("Set",S["10AK"]*KV["33-10AK"]*Train.ROT1.Value*(Train.AVU.Value+Train.OtklAVU.Value)*(1-Train.RVT.Value)*Train.UAVAC.Value*(Train.KAH.Value+Train.RPB.Value)*(Train.UOS.Value+Train.SOT.Value)) + Train.R1_5:TriggerInput("Set",S["10AK"]*Train.RV2.Value) + Train:WriteTrainWire(17,S["10AK"]*Train.KU9.Value*(ARS["17"]*RC+(1-RC))) + Train.RPB:TriggerInput("Set",S["10a"]*(Train.PB.Value+Train.ARS.Value*(1-Train.UOS.Value))) + Train:WriteTrainWire(8,BO*(KV["10-8"]+KV["10a-8"]*(1-Train.KAH.Value)*(1-Train.RPB.Value))+ARS["8"]*RC) + Train.RO:TriggerInput("Set",ARS["48"]) + Train:WriteTrainWire(44,BO*Train.RO.Value*RC) + else + S["10a"] = BO*KV["10a-8"] + + Train:WriteTrainWire(1,S["10AK"]*Train.R1_5.Value+KRU["1/3-ZM31"]*-10) + Train:WriteTrainWire(2,S["U2"]*KV["U2-2"]+KRU["2/3-ZM31"]*-10) + Train:WriteTrainWire(3,S["U2"]*KV["U2-3"]+KRU["3/3-ZM31"]*-10) + --Train:WriteTrainWire(25,S["U2"]*KV["25-6"]*(ARS["25"]*RC+(1-RC))) + Train:WriteTrainWire(25,S["U2"]*KV["25-6"]) + Train:WriteTrainWire(20,S["U2"]*KV["U2-20"]+KRU["20/3-ZM31"]*-10) + Train:WriteTrainWire(6,S["10AK"]*Train.RVT.Value) + + Train.RVT:TriggerInput("Set",S["10AK"]*KV["U2-6"]) + Train.RV2:TriggerInput("Set",S["10AK"]*KV["33-10AK"]*(Train.AVU.Value+Train.OtklAVU.Value)*Train.UAVAC.Value*(1-Train.UKS.UKSTriggered)) + Train.R1_5:TriggerInput("Set",S["10AK"]*Train.RV2.Value) + Train:WriteTrainWire(17,S["10AK"]*Train.KU9.Value) + Train:WriteTrainWire(8,BO*KV["10-8"]) + Train:WriteTrainWire(44,S["10AK"]*Train.UV1.Value) + end + + + + + + + local RUM = KV.RCU + if isE then + S["ZR"] = 1 + else + S["ZR"] = (1-Train.RRP.Value)+(B*Train.RRP.Value)*-1 + end + + Train.RZ_2:TriggerInput("Set",T[24]*RUM*(1-Train.LK4.Value)) + S["18A"] = RUM*(Train.RPvozvrat.Value*100+(1-Train.LK4.Value)) + Train:WriteTrainWire(18,S["18A"]) + Panel.TW18 = S["18A"] + + local Reverser = Train.Reverser + S["4A"] = T[4]*RUM + S["5A"] = T[5]*RUM + Reverser:TriggerInput("NZ",S["4A"]*Reverser.VP) + Reverser:TriggerInput("VP",S["5A"]*Reverser.NZ) + Train.LK4:TriggerInput("Set",(S["4A"]*Reverser.NZ+S["5A"]*Reverser.VP)*(1-Train.RPvozvrat.Value)*Train.LK3.Value*S["ZR"]) + + if isE then + Train.PneumaticNo1:TriggerInput("Set",T[8]*C(P == 4 and 1 <= RK and RK <= 5)) + Train.PneumaticNo2:TriggerInput("Set",T[8]*(1-Train.RV3.Value)*(1-Train.LK4.Value)) + Train.RS:TriggerInput("Set",T[12]*RUM) + Train.RV3:TriggerInput("Set",T[14]*RUM) + Train.Panel.PP1 = T[1] + Train.Panel.PP6 = T[6] + else + if isEzh then + Train:WriteTrainWire(48,BO*Train.RO.Value*RC+C(P == 4 and 1 <= RK and RK <= 5)) + else + Train:WriteTrainWire(48,C(P == 4 and 1 <= RK and RK <= 5)+BO*Train.UV1.Value) + end + Train.PneumaticNo1:TriggerInput("Set",(T[8]+T[44])*T[48]) + Train.PneumaticNo2:TriggerInput("Set",T[8]*(1-Train.LK4.Value)) + end + + S["10A"] = BO*RUM + + --РУТ + --СДРК + S["10B"] = S["10A"]*(Train.RV1.Value+Train.TSH.Value) + if isE then + S["25B"] = (1-Train.TSH.Value)*Train.LK2.Value + S["25A"] = (Train.KSH2.Value + Train.RS.Value) + Train["RUTreg"] = S["10A"]*(S["25B"]-S["25A"]) + S["10I"] = S["10A"]*RheostatController.RKM2 + Train["RUTpod"] = S["10I"]*Train.LK4.Value + Train["RRTpod"] = S["10I"]*(1-Train.LK2.Value) + else + S["25B"] = S["10B"]*(1-Train.TSH.Value)*Train.LK1.Value + S["25A"] = Train.KSH2.Value + Train["RUTreg"] = S["10A"]*(S["25B"]-S["25A"]) + S["10I"] = S["10A"]*RheostatController.RKM2 + Train["RUTpod"] = S["10I"]*Train.LK4.Value + Train["RRTpod"] = S["10I"]*(1-Train.LK1.Value) + end + Train.RRT:TriggerInput("Close",Train.RRTuderzh*Train.RRTpod) + Train.RRT:TriggerInput("Open",(1-Train.RRTuderzh)) + local SDRKr = 0 + if isE then + SDRKr = 1-Train.LK4.Value*(0.2+0.3*C(2 <=RK and RK <= 7 and (P==1 or P==3 or P==4))) + else + SDRKr = 1-Train.LK2.Value*(0.2+0.3*C(2 <=RK and RK <= 7 and (P==1 or P==3 or P==4))) + end + RheostatController:TriggerInput("MotorCoilState",min(1,S["10A"]*(S["10B"]*Train.RR.Value - S["10B"]*(1-Train.RR.Value)))*SDRKr) + + S["10N"] = S["10A"]*(RheostatController.RKM1+Train.SR1.Value*(1-Train.RUT.Value)) + S["10T"] = --[[ S["10N"]*--]] ((1-Train.SR1.Value)+Train.RUT.Value)*(RheostatController.RKP) + RheostatController:TriggerInput("MotorState",(S["10N"]+S["10T"]*(-10))) + --СДПП + S["10AV"] = S["10A"]*(1-Train.LK3.Value)*C(2<=RK and RK<=18)*(1-Train.LK4.Value) + S["10E"] = S["10A"]*((1-Train.LK3.Value)+Train.Rper.Value+Train.PositionSwitch.PMPos) + if isE then + Train.SR2:TriggerInput("Set",S["10E"]*((C(P==3 or P==4)+Train.KSH2.Value))*(1-Train.LK4.Value)) + + S["10AD"] = (1-Train.LK1.Value)*Train.SR2.Value + S["10AZh"] = S["10AD"]*Train.TSH.Value*C(P==1 or P==2 or P==4) + else + S["10AD"] = (1-Train.LK1.Value)*(C(P==3 or P==4)+Train.LK2.Value) + S["10AZh"] = S["10AD"]*Train.TSH.Value*Train.KSH2.Value*C(P==1 or P==2 or P==4) + end + S["10AR"] = S["10AD"]*(1-Train.KSH3.Value)*(1-Train.TSH.Value)*C(2<=P and P<=4) + S["10Ya"] = Train.LK3.Value*C(RK==18 and (P==1 or P==3)) + S["10AG"] = S["10E"]*(S["10AR"]+S["10AZh"]+S["10Ya"]) + Train.PositionSwitch:TriggerInput("MotorState",-1.0 + 2.0*math.max(0,S["10AG"])) + S["2A"] = T[2]*RUM + S["2G"] = S["2A"]*(C(P==1 or P==3)*C(1<=RK and RK<=17)+C(P==2 or P==4)*(C(5<=RK and RK<=18)+C(2<=RK and RK<=4)*Train.KSH1.Value)) + if isE then + S["2E"] = S["2G"]*(1-Train.SR2.Value)*Train.LK4.Value+S["10AV"] + else + S["2E"] = S["2G"]*Train.LK4.Value+S["10AV"] + end + Train.RV1:TriggerInput("Set",S["2E"]*S["ZR"]) + Train.SR1:TriggerInput("Set",S["2E"]*(1-Train.RRT.Value)*S["ZR"]) + + Train.Rper:TriggerInput("Set",T[3]*RUM*C(17<=RK and RK<=18)*S["ZR"]) + + S["1P"] = T[1]*RUM*C(P == 1 or P == 2)*Train.NR.Value + S["6A"] = T[6]*RUM + Train.TSH:TriggerInput("Set",S["6A"]) + S["1G"] = (S["1P"]+S["6A"]*C(P==3 or P==4))*Train.AVT.Value*(1-Train.RPvozvrat.Value) + S["1Zh"] = S["1G"]*(Train.LK3.Value+Train.KSH2.Value*C(RK==1 and (P==1 or P==3))) + Train.LK1:TriggerInput("Set",S["1Zh"]*C(P==1 or P==2)*S["ZR"]) + Train.LK3:TriggerInput("Set",S["1Zh"]*S["ZR"]) + Train.RR:TriggerInput("Set",S["1Zh"]*C(P==1 or P==3)*S["ZR"]) + + Train["RUTavt"] = S["6A"]*(1-Train.KSH2.Value) + if isE then + S["6K"] = S["6A"]*C(RK==1)*(1-Train.LK1.Value) + else + S["6K"] = S["6A"]*C(RK==1)*(1-Train.LK1.Value) + end + Train.KSH3:TriggerInput("Set",S["6K"]) + Train.KSH4:TriggerInput("Set",S["6K"]) + + Train.RPvozvrat:TriggerInput("Open",T[17]*RUM) --FIXME Mayve more right RP code + S["20A"] = T[20]*RUM + if isE then + Train.LK2:TriggerInput("Set",S["20A"]*Train.LK1.Value*S["ZR"]) + else + Train.LK2:TriggerInput("Set",S["20A"]*(1-Train.RPvozvrat.Value)*S["ZR"]) + end + S["20V"] = C((RK==1 or RK==18) and P==1) + S["20G"] = C(1<=RK and RK<=5 and (P==2 or P==3)) + if isE then + S["20D"] = S["20A"]*(S["20G"]+S["20V"]*((1-Train.Rper.Value)+Train.KSH1.Value)) + Train.KSH2:TriggerInput("Set",S["20D"]) + Train.KSH1:TriggerInput("Set",S["20D"])--+S["20V"]*(1-Train.Rper.Value)) + else + S["20D"] = S["10A"]*(S["20G"]+S["20V"]*((1-Train.Rper.Value)+Train.KSH1.Value)) + Train.KSH2:TriggerInput("Set",S["20D"]*(Train.LK2.Value+Train.LK4.Value)) + Train.KSH1:TriggerInput("Set",S["20D"]*(Train.LK2.Value+Train.LK4.Value))--+S["20V"]*(1-Train.Rper.Value)) + end + Train["RRTuderzh"] = T[25] + + --Ð’Ñпом цепи низкого напрÑÐ¶ÐµÐ½Ð¸Ñ + Train:WriteTrainWire(11,BO*Train.VU2.Value) + if isE then + S["23A"] = BO*Train.KU1.Value + Train:WriteTrainWire(22,(S["23A"]+T[23])*(Train.AK.Value)) + Train:WriteTrainWire(23,S["23A"]) + else + Train:WriteTrainWire(22,BO*Train.KU1.Value*(Train.AK.Value)) + Train:WriteTrainWire(23,BO*Train.KU15.Value) + end + Panel.AVU = BO*(1-Train.AVU.Value) + Train:WriteTrainWire(27,BO*Train.KU4.Value) + Train:WriteTrainWire(28,BO*Train.KU5.Value) + + if isE then + S["D1"] = BO*KV["D-D1"] + S["F7"] = BO*KV["F-F7"] + Train:WriteTrainWire(31,S["D1"]*(Train.KU10.Value+Train.KU6.Value+Train.KU13.Value)) + Train:WriteTrainWire(32,S["D1"]*(Train.KU10.Value+Train.KU7.Value)) + Train:WriteTrainWire(12,S["F7"]*Train.KU12.Value) + Panel.RedLights = BO*KV["10-F1"] + else + S["D1"] = BO*(KV["D-D1"]+KRU["11/3-D1/1"]) + S["F7"] = (BO*KV["F-F7"]+KRU["11/3-FR1"]) + Train.RRP:TriggerInput("Set",T[14]) + if isEm then + Train:WriteTrainWire(31,S["D1"]*(Train.KU6.Value+Train.KU13.Value)+T[12]+Train.KU10R.Value) + Train:WriteTrainWire(32,S["D1"]*Train.KU7.Value+T[12]+Train.KU10R.Value) + Train:WriteTrainWire(12,S["D1"]*Train.KU10.Value) + else + Train:WriteTrainWire(31,S["D1"]*(Train.KU6.Value+Train.KU13.Value)+T[12]) + Train:WriteTrainWire(32,S["D1"]*Train.KU7.Value+T[12]) + Train:WriteTrainWire(12,S["D1"]*Train.KU10.Value) + end + Panel.RedLights = BO*KV["B2-F1"] + end + Train:WriteTrainWire(16,S["D1"]*Train.KU2.Value*Train.KU3.Value) + Panel.Headlights1 = S["F7"] + Panel.Headlights2 = S["F7"]*Train.KU16.Value + + + if isE then + S["11A"] = T[11]*(1-Train.KZ1.Value) + Panel.Ring = S["11A"]+T[28] + elseif isEm then + S["11A"] = T[11]*(1-Train.NR.Value) + Panel.Ring = S["11A"]+T[28] + else + S["11A"] = T[11]*(1-Train.NR.Value) + Panel.Ring = ARS.Ring+S["11A"]+T[28] + end + Panel.EmergencyLights1 = BO*Train.VU3.Value+S["11A"]*(1-Train.VU3.Value) + Panel.EmergencyLights2 = S["11A"] + Panel.MainLights1 = math.max(0,math.min(1, + ( + self.Aux750V-100 + -self.Itotal*0.25*C(Train.PositionSwitch.SelectedPosition >= 3) + -25*Train.KK.Value + )/750*(0.5+0.5*B*Train.VB.Value*Train.KZ1.Value) + )) + Panel.MainLights2 = Panel.MainLights1*Train.KO.Value + + Panel.VPR = BO*Train.RST.Value + + if isE then + Train.KK:TriggerInput("Set",T[22]) + else + Train.KK:TriggerInput("Set",(T[22]+T[23])*(1-Train.TRK.Value)) + end + Train.KO:TriggerInput("Close",T[27]) + Train.KO:TriggerInput("Open",T[28]) + + local BD = 1-Train.BD.Value + Train:WriteTrainWire(15,BD*(1-Train.KU11.Value))--Заземление 15 провода + Train.Panel.SD = (S["D1"]+BO*Train.KU11.Value)*(T[15]*(1-Train.KU11.Value)+BD) + Train.Panel.SDW = BO*BD + + Train.VDZ:TriggerInput("Set",T[16]*BD) + if isE then + Train.VDOL:TriggerInput("Set",T[31]) + Train.VDOP:TriggerInput("Set",T[32]) + else + Train.VDOL:TriggerInput("Set",T[31]+T[12]) + Train.VDOP:TriggerInput("Set",T[32]+T[12]) + if isEm then + Panel.PCBKPower = T[10]*Train["50V"].Value + else + Panel.PCBKPower = T[10] + end + end + return S +end + +function TRAIN_SYSTEM:SolveRKInternalCircuits(Train) + ---[[ + local RheostatController = Train.RheostatController + local P = Train.PositionSwitch.SelectedPosition + local RK = RheostatController.SelectedPosition + local B = (Train.Battery.Voltage > 55) and 1 or 0 + local T = Train.SolverTemporaryVariables + + local isE = self.Type == 1 + + local BO = min(1,B * Train.VB.Value+T[10])--B * Train.VB.Value + + local RUM = Train.KV.RCU + if isE then + S["ZR"] = 1 + else + S["ZR"] = (1-Train.RRP.Value)+(B*Train.RRP.Value)*-1 + end + + S["10A"] = BO*RUM + --РУТ + --СДРК + S["10B"] = S["10A"]*(Train.RV1.Value+Train.TSH.Value) + if isE then + S["25B"] = (1-Train.TSH.Value)*Train.LK2.Value + S["25A"] = min(1,Train.KSH2.Value + Train.RS.Value) + Train["RUTreg"] = S["10A"]*(S["25B"]-S["25A"]) + S["10I"] = S["10A"]*RheostatController.RKM2 + Train["RUTpod"] = S["10I"]*Train.LK4.Value + Train["RRTpod"] = S["10I"]*(1-Train.LK2.Value) + else + S["25B"] = S["10B"]*(1-Train.TSH.Value)*Train.LK1.Value + S["25A"] = Train.KSH2.Value + Train["RUTreg"] = S["10A"]*(S["25B"]-S["25A"]) + S["10I"] = S["10A"]*RheostatController.RKM2 + Train["RUTpod"] = S["10I"]*Train.LK4.Value + Train["RRTpod"] = S["10I"]*(1-Train.LK1.Value) + end + Train.RRT:TriggerInput("Close",Train.RRTuderzh*Train.RRTpod) + Train.RRT:TriggerInput("Open",(1-Train.RRTuderzh)) + local SDRKr = 0 + if isE then + SDRKr = 1-Train.LK4.Value*(0.2+0.3*C(2 <=RK and RK <= 7 and (P==1 or P==3 or P==4))) + else + SDRKr = 1-Train.LK2.Value*(0.2+0.3*C(2 <=RK and RK <= 7 and (P==1 or P==3 or P==4))) + end + RheostatController:TriggerInput("MotorCoilState",min(1,S["10A"]*(S["10B"]*Train.RR.Value - S["10B"]*(1-Train.RR.Value)))*SDRKr) + + S["10N"] = S["10A"]*(RheostatController.RKM1+Train.SR1.Value*(1-Train.RUT.Value)) + S["10T"] = --[[ S["10N"]*--]] ((1-Train.SR1.Value)+Train.RUT.Value)*(RheostatController.RKP) + RheostatController:TriggerInput("MotorState",(S["10N"]+S["10T"]*(-10))) + --СДПП + S["10AV"] = S["10A"]*(1-Train.LK3.Value)*C(2<=RK and RK<=18)*(1-Train.LK4.Value) + S["10E"] = S["10A"]*((1-Train.LK3.Value)+Train.Rper.Value+Train.PositionSwitch.PMPos) + if isE then + Train.SR2:TriggerInput("Set",S["10E"]*((C(P==3 or P==4)+Train.KSH2.Value))*(1-Train.LK4.Value)) + + S["10AD"] = (1-Train.LK1.Value)*Train.SR2.Value + S["10AZh"] = S["10AD"]*Train.TSH.Value*C(P==1 or P==2 or P==4) + else + S["10AD"] = (1-Train.LK1.Value)*(C(P==3 or P==4)+Train.LK2.Value) + S["10AZh"] = S["10AD"]*Train.TSH.Value*Train.KSH2.Value*C(P==1 or P==2 or P==4) + end + S["10AR"] = S["10AD"]*(1-Train.KSH3.Value)*(1-Train.TSH.Value)*C(2<=P and P<=4) + S["10Ya"] = Train.LK3.Value*C(RK==18 and (P==1 or P==3)) + S["10AG"] = S["10E"]*(S["10AR"]+S["10AZh"]+S["10Ya"]) + Train.PositionSwitch:TriggerInput("MotorState",-1.0 + 2.0*math.max(0,S["10AG"])) + S["2A"] = T[2]*RUM + S["2G"] = S["2A"]*(C(P==1 or P==3)*C(1<=RK and RK<=17)+C(P==2 or P==4)*(C(5<=RK and RK<=18)+C(2<=RK and RK<=4)*Train.KSH1.Value)) + if isE then + S["2E"] = S["2G"]*(1-Train.SR2.Value)*Train.LK4.Value+S["10AV"] + else + S["2E"] = S["2G"]*Train.LK4.Value+S["10AV"] + end + Train.RV1:TriggerInput("Set",S["2E"]*S["ZR"]) + Train.SR1:TriggerInput("Set",S["2E"]*(1-Train.RRT.Value)*S["ZR"]) + + Train.Rper:TriggerInput("Set",T[3]*RUM*C(17<=RK and RK<=18)*S["ZR"]) + + S["6A"] = T[6]*RUM + Train["RUTavt"] = S["6A"]*(1-Train.KSH2.Value) + + return S +end + +local wires = {1,2,3,4,5,6,8,10,11,12,13,14,15,16,17,18,20,22,23,24,25,27,28,31,32,-34,34,44,48} +function TRAIN_SYSTEM:SolveInternalCircuits(Train,dT,firstIter) + local T = Train.SolverTemporaryVariables + if not T then + T = {} + for i,v in ipairs(wires) do T[v] = 0 end + Train.SolverTemporaryVariables = T + end + if firstIter then + for i,v in ipairs(wires) do T[v] = min(Train:ReadTrainWire(v),1) end + self:SolveAllInternalCircuits(Train,dT) + else + self:SolveRKInternalCircuits(Train,dT) + end +end + +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:SolvePowerCircuits(Train,dT) + self.ExtraResistanceLK5 = 0--Train.KF_47A["L2-L4" ]*(1-Train.LK5.Value) + self.ExtraResistanceLK2 = Train.KF_47A["L1-L2"]*(1-Train.LK2.Value)*Train.LK1.Value + if Train.PositionSwitch.SelectedPosition == 1 then -- PP + self.R1 = Train.ResistorBlocks.R1C1(Train) + self.R2 = Train.ResistorBlocks.R2C1(Train) + self.R3 = 0.0 + elseif Train.PositionSwitch.SelectedPosition == 2 then -- PP + self.R1 = Train.ResistorBlocks.R1C2(Train) + self.R2 = Train.ResistorBlocks.R2C2(Train) + self.R3 = 0.0 + elseif Train.PositionSwitch.SelectedPosition >= 3 then -- PT + self.R1 = Train.ResistorBlocks.R1C3(Train) + self.R2 = Train.ResistorBlocks.R2C3(Train) + self.R3 = 0.0 + else + self.R1 = 1e9 + self.R2 = 1e9 + self.R3 = 1e9 + end + -- Apply LK3, LK4 contactors + self.R1 = self.R1 + 1e9*(1 - Train.LK3.Value) + self.R2 = self.R2 + 1e9*(1 - Train.LK4.Value) + + -- Shunt resistance + local Brake = Train.TSH.Value*--[[ Train.KSH1.Value*--]] Train.LK3.Value*Train.LK4.Value*C(Train.PositionSwitch.SelectedPosition>=3) + local Magnetization = self.Aux750V/750 + self.Magnetization = (self.Magnetization+(1-self.Magnetization)*dT*(0.5+Magnetization*1.5))*Brake + self.Rs1 = Train.ResistorBlocks.S1(Train) + 1e9*(1 - Train.KSH1.Value) + self.Rs2 = Train.ResistorBlocks.S2(Train) + 1e9*(1 - Train.KSH2.Value) + --self.Rs1 = 0.09+Train.ResistorBlocks.S1(Train) + 1e9*(1 - Train.KSH1.Value) + --self.Rs2 = 0.09+Train.ResistorBlocks.S2(Train) + 1e9*(1 - Train.KSH2.Value) + --self.Rs1 = 0.392*0.17*Train.KSH1.Value+Train.ResistorBlocks.S1(Train)*0.83 + 1e9*(1 - Train.KSH1.Value) + --self.Rs2 = 0.392*0.17*Train.KSH2.Value+Train.ResistorBlocks.S2(Train)*0.83 + 1e9*(1 - Train.KSH2.Value) + + -- Calculate total resistance of engines winding + local RwAnchor = Train.Engines.Rwa*2 -- Double because each set includes two engines + local RwStator = Train.Engines.Rws*2 + -- Total resistance of the stator + shunt + self.Rstator13 = (RwStator^(-1) + self.Rs1^(-1))^(-1) + self.Rstator24 = (RwStator^(-1) + self.Rs2^(-1))^(-1) + -- Total resistance of entire motor + self.Ranchor13 = RwAnchor + self.Ranchor24 = RwAnchor + + if Train.PositionSwitch.SelectedPosition == 1 then -- PS + self:SolvePS(Train) + elseif Train.PositionSwitch.SelectedPosition == 2 then -- PS + self:SolvePP(Train,Train.RheostatController.SelectedPosition >= 17) + else + self:SolvePT(Train) + end + + -- Calculate current through rheostats 1, 2 + self.IR1 = self.I13 + self.IR2 = self.I24 + + -- Calculate induction properties of the motor + self.I13SH = self.I13SH or self.I13 + self.I24SH = self.I24SH or self.I24 + + -- Time constant + local T13const1 = math.max(14.00,math.min(280.0,(self.R13^2) * 2.0)) -- R * L + local T24const1 = math.max(14.00,math.min(280.0,(self.R24^2) * 2.0)) -- R * L + + -- Total change + local dI13dT = T13const1 * (self.I13 - self.I13SH) * dT + local dI24dT = T24const1 * (self.I24 - self.I24SH) * dT + + -- Limit change and apply it + if dI13dT > 0 then dI13dT = math.min(self.I13 - self.I13SH,dI13dT) end + if dI13dT < 0 then dI13dT = math.max(self.I13 - self.I13SH,dI13dT) end + if dI24dT > 0 then dI24dT = math.min(self.I24 - self.I24SH,dI24dT) end + if dI24dT < 0 then dI24dT = math.max(self.I24 - self.I24SH,dI24dT) end + self.I13SH = self.I13SH + dI13dT + self.I24SH = self.I24SH + dI24dT + self.I13 = self.I13SH + self.I24 = self.I24SH + + -- Re-calculate total current and simulate infinite resistance in circuit + if Train.PositionSwitch.SelectedPosition == 1 then -- PS + self.I13 = self.I13 * (Train.LK3.Value * Train.LK4.Value * Train.LK1.Value) + self.I24 = self.I24 * (Train.LK3.Value * Train.LK4.Value * Train.LK1.Value) + + self.I24 = (self.I24 + self.I13)*0.5 + self.I13 = self.I24 + self.Itotal = self.I24 + elseif Train.PositionSwitch.SelectedPosition == 2 then -- PS + self.I13 = self.I13 * Train.LK3.Value * Train.LK4.Value * Train.LK1.Value + self.I24 = self.I24 * Train.LK3.Value * Train.LK4.Value * Train.LK1.Value + + self.Itotal = self.I13 + self.I24 + else -- PT + self.I13 = self.I13 * Train.LK3.Value*Train.LK4.Value + self.I24 = self.I24 * Train.LK4.Value*Train.LK3.Value + + self.Itotal = self.I13 + self.I24 + end + + -- Calculate extra information + self.Uanchor13 = self.I13 * self.Ranchor13 + self.Uanchor24 = self.I24 * self.Ranchor24 + + + ---------------------------------------------------------------------------- + -- Calculate current through stator and shunt + --print(250*Train.TSH.Value*Train.Electric.Main750V/750*self.Rstator13) + --local RR = math.max(0,(Train.Engines.RotationRate-1500)/1500) + self.Ustator13 = (self.I13) * self.Rstator13--+UshuntAdd*RR + self.Ustator24 = (self.I24) * self.Rstator24--+UshuntAdd*RR + self.Ishunt13 = (self.Ustator13) / self.Rs1 + self.Istator13 = (self.Ustator13) / RwStator + self.Ishunt24 = (self.Ustator24) / self.Rs2 + self.Istator24 = (self.Ustator24) / RwStator + + if Train.PositionSwitch.SelectedPosition >= 3 then + local I1,I2 = self.Ishunt13,self.Ishunt24 + self.Ishunt13 = -I2 + self.Ishunt24 = -I1 + + I1,I2 = self.Istator13,self.Istator24 + self.Istator13 = -I2 + self.Istator24 = -I1 + end + + -- Calculate current through RT2 relay + if Train.PositionSwitch.SelectedPosition >= 3 then + self.IRT2 = math.abs(self.Itotal) + else + self.IRT2 = 0 + end + + -- Sane checks + if self.R1 > 1e5 then self.IR1 = 0 end + if self.R2 > 1e5 then self.IR2 = 0 end + + -- Calculate power and heating + local K = 12.0*1e-5 + local H = (10.00+(15.00*Train.Engines.Speed/80.0))*1e-3 + self.P1 = (self.IR1^2)*self.R1 + self.P2 = (self.IR2^2)*self.R2 + --self.T1 = (self.T1 + self.P1*K*dT - (self.T1-25)*H*dT) + --self.T2 = (self.T2 + self.P2*K*dT - (self.T2-25)*H*dT) + self.Overheat1 = math.min(1-1e-12, + self.Overheat1 + math.max(0,(math.max(0,self.T1-750.0)/400.0)^2)*dT ) + self.Overheat2 = math.min(1-1e-12, + self.Overheat2 + math.max(0,(math.max(0,self.T2-750.0)/400.0)^2)*dT ) + + -- Energy consumption + self.ElectricEnergyUsed = self.ElectricEnergyUsed + math.max(0,self.EnergyChange)*dT + self.ElectricEnergyDissipated = self.ElectricEnergyDissipated + math.max(0,-self.EnergyChange)*dT +end + +local Cosumers = { + LK1 = 0.05, + LK2 = 0.05, + LK3 = 0.05, + LK4 = 0.05, + LK5 = 0.05, + KSH1 = 0.05, + KSH2 = 0.05, + KSH3 = 0.05, + KSH4 = 0.05, + TSH = 0.05, + PR = 0.02, + RV1 = 0.02, + SR1 = 0.02, + SR2 = 0.02, + PneumaticNo1 = 0.03, + PneumaticNo2 = 0.03, + Rper = 0.03, + RRT = 0.03, + VDOL = 0.03, + VDOP = 0.03, + VDZ = 0.03, +} +function TRAIN_SYSTEM:Think(dT,iter) + local Train = self.Train + if not self.ResistorBlocksInit then + self.ResistorBlocksInit = true + Train:LoadSystem("ResistorBlocks","Gen_Res_703") + end + if iter == 1 then Train.ResistorBlocks.InitializeResistances_81_703(Train) end + ---------------------------------------------------------------------------- + -- Voltages from the third rail + ---------------------------------------------------------------------------- + self.Main750V = Train.TR.Main750V + self.Aux750V = Train.TR.Main750V*Train.AV.Value + self.Power750V = self.Main750V * Train.GV.Value + + + ---------------------------------------------------------------------------- + -- Solve circuits + ---------------------------------------------------------------------------- + self:SolvePowerCircuits(Train,dT) + self:SolveInternalCircuits(Train,dT,iter==1) + if iter==1 then + --local time = SysTime() + local count = 0 + for k,v in pairs(Cosumers) do + count = count + Train[k].Value*v + end + count = count + math.abs(Train.RheostatController.Velocity*0.015) + count = count + math.abs(Train.PositionSwitch.Velocity*0.02) + count = count + math.abs(Train.Reverser.Speed) + self.Cosume = count + end + + + ---------------------------------------------------------------------------- + -- Calculate current flow out of the battery + ---------------------------------------------------------------------------- + --local totalCurrent = 5*A30 + 63*A24 + 16*A44 + 5*A39 + 10*A80 + --local totalCurrent = 20 + 60*DIP +end + +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:SolvePS(Train) + -- Calculate total resistance of the entire series circuit + local Rtotal = self.Ranchor13 + self.Ranchor24 + self.Rstator13 + self.Rstator24 + + self.R1 + self.R2 + self.R3 + self.ExtraResistanceLK2 + local CircuitClosed = (self.Power750V*Train.LK1.Value > 0) and 1 or 0 + + -- Calculate total current + self.Utotal = (self.Power750V - Train.Engines.E13 - Train.Engines.E24)*Train.LK1.Value + self.Itotal = (self.Utotal / Rtotal)*CircuitClosed + + -- Total resistance (for induction RL circuit) + self.R13 = Rtotal + self.R24 = Rtotal + + -- Calculate everything else + self.I13 = self.Itotal + self.I24 = self.Itotal + self.U13 = self.Utotal*(1/2) + self.U24 = self.Utotal*(1/2) + + -- Energy consumption + self.EnergyChange = math.abs((self.Itotal^2)*Rtotal) +end + +function TRAIN_SYSTEM:SolvePP(Train,inTransition) + -- Temporary hack for transition to parallel circuits + local extraR = 0.00 --inTransition and 0.909 or 0.00 + + -- Calculate total resistance of each branch + local R1 = self.Ranchor13 + self.Rstator13 + self.R1 + extraR + self.ExtraResistanceLK2 + local R2 = self.Ranchor24 + self.Rstator24 + self.R2 + extraR + self.ExtraResistanceLK2 + local R3 = 0 + local CircuitClosed = (self.Power750V*Train.LK1.Value > 0) and 1 or 0 + + -- Main circuit parameters + local V = self.Power750V*Train.LK1.Value + local E1 = Train.Engines.E13 + local E2 = Train.Engines.E24 + + -- Calculate current through engines 13, 24 + self.I13 = -((E1*R2 + E1*R3 - E2*R3 - R2*V)/(R1*R2 + R1*R3 + R2*R3))*CircuitClosed + self.I24 = -((E2*R1 - E1*R3 + E2*R3 - R1*V)/(R1*R2 + R1*R3 + R2*R3))*CircuitClosed + + -- Total resistance (for induction RL circuit) + self.R13 = R1 + self.R24 = R2 + + -- Calculate everything else + self.U13 = self.I13*R1 + self.U24 = self.I24*R2 + self.Utotal = (self.U13 + self.U24)/2 + self.Itotal = self.I13 + self.I24 + + -- Energy consumption + self.EnergyChange = math.abs((self.I13^2)*R1) + math.abs((self.I24^2)*R2) +end + +function TRAIN_SYSTEM:SolvePT(Train) + -- Winding resistances + local R1 = self.Ranchor13 + self.Rstator13 + local R2 = self.Ranchor24 + self.Rstator24 + -- Total resistance of the entire braking rheostat + local R3 = self.R1 + self.R2 + self.R3 + + -- Main circuit parameters + local V = self.Power750V*Train.LK1.Value + local E1 = Train.Engines.E13 + local E2 = Train.Engines.E24 + + -- Calculate current through engines 13, 24 + self.I13 = -((E1*R2 + E1*R3 - E2*R3 - R2*V)/(R1*R2 + R1*R3 + R2*R3))*(Train.BV and Train.BV.State or 1) + self.I24 = -((E2*R1 - E1*R3 + E2*R3 - R1*V)/(R1*R2 + R1*R3 + R2*R3))*(Train.BV and Train.BV.State or 1) + + -- Total resistance (for induction RL circuit) + self.R13 = R3+((R1^(-1) + R2^(-1))^(-1)) + self.R24 = R3+((R1^(-1) + R2^(-1))^(-1)) + -- Calculate everything else + self.U13 = self.I13*R1 + self.U24 = self.I24*R2 + self.Utotal = (self.U13 + self.U24)/2 + self.Itotal = self.I13 + self.I24 + + -- Energy consumption + self.EnergyChange = -math.abs(((0.5*self.Itotal)^2)*self.R13) +end diff --git a/lua/metrostroi/systems/sys_81_703_kf_47a.lua b/lua/metrostroi/systems/sys_81_703_kf_47a.lua new file mode 100644 index 0000000..255c5f5 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_703_kf_47a.lua @@ -0,0 +1,91 @@ +-------------------------------------------------------------------------------- +-- HV rheostats case (KF-47a) for 81-703 +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_703_KF_47A") + +function TRAIN_SYSTEM:Initialize() + self.Resistors = { + ["L1-L2"] = 0.84, + ["L4-L5"] = 1.46, + ["P1-P3"] = 0.70+0.09, + ["P3-P4"] = 0.13, + ["P4-P5"] = 0.224, + ["P5-P6"] = 0.184, + ["P6-P7"] = 0.224, + ["P7-P8"] = 0.224, + ["P8-P9"] = 0.183, + ["P9-P10"] = 0.13, + ["P10-P11"] = 0.136, + ["P11-P12"] = 1.004, + ["P12-P13"] = 0.57, + ["P11-P14"] = 0.59, + + ["P15-P16"] = 0.31, + ["P16-P17"] = 1.15, + ["P17-P18"] = 0.13, + ["P18-P19"] = 0.224, + ["P19-P20"] = 0.184, + ["P20-P21"] = 0.224, + ["P21-P22"] = 0.224, + ["P22-P23"] = 0.184, + ["P23-P24"] = 0.13, + ["P24-P25"] = 0.13, + ["P25-P26"] = 0.79, + ["P25-P27"] = 0.59, + } + self.ResistorTemperatures = { + ["L1-L2"] = 1, + ["L4-L5"] = 1, + ["P1-P3"] = 1, + ["P3-P4"] = 1, + ["P4-P5"] = 1, + ["P5-P6"] = 1, + ["P6-P7"] = 1, + ["P7-P8"] = 1, + ["P8-P9"] = 1, + ["P9-P10"] = 1, + ["P10-P11"] = 1, + ["P11-P12"] = 1, + ["P12-P13"] = 1, + ["P11-P14"] = 1, + + ["P15-P16"] = 2, + ["P16-P17"] = 2, + ["P17-P18"] = 2, + ["P18-P19"] = 2, + ["P19-P20"] = 2, + ["P20-P21"] = 2, + ["P21-P22"] = 2, + ["P22-P23"] = 2, + ["P23-P24"] = 2, + ["P24-P25"] = 2, + ["P25-P26"] = 2, + ["P25-P27"] = 2, + } + self.Overheating = {} + + for k,v in pairs(self.Resistors) do + self[k] = v + self.Overheating[k] = 0 + end +end + +function TRAIN_SYSTEM:Think(dT) + -- Temperature coefficient + local a = 0.0001 + + -- Update resistances + if self.Train.Electric then + for k,v in pairs(self.ResistorTemperatures) do + -- Get temperature + local T = self.Train.Electric["T"..v] or 25 + local O = self.Train.Electric["Overheat"..v] or 0 + + -- Calculate new resistance + self[k] = self.Resistors[k]*(1.0 + a*(T-25) - math.log(1-O)) + end + end +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_81_703_panel.lua b/lua/metrostroi/systems/sys_81_703_panel.lua new file mode 100644 index 0000000..833fa61 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_703_panel.lua @@ -0,0 +1,85 @@ +-------------------------------------------------------------------------------- +-- 81-703 controller panel +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_703_Panel") + +function TRAIN_SYSTEM:Initialize() + -- Выключатель батареи (ВБ) + self.Train:LoadSystem("VB","Relay","Switch", {bass = true}) + self.Train:LoadSystem("AV","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("VU","Relay","Switch", {bass = true,normally_closed = true}) + + self.Train:LoadSystem("VU1","Relay","Switch", {bass = true}) --Heater + self.Train:LoadSystem("VU2","Relay","Switch", {bass = true}) --EmergencyLights + self.Train:LoadSystem("VU3","Relay","Switch", {bass = true}) --CabLights + -- Buttons on the panel + self.Train:LoadSystem("KU1","Relay","Switch", {bass = true}) --MK + self.Train:LoadSystem("KU2","Relay","Switch", {bass = true}) --VUD1 + self.Train:LoadSystem("KU3","Relay","Switch", {bass = true,normally_closed = true}) --VUD2 + self.Train:LoadSystem("KU4","Relay","Switch", {bass = true}) --Lights on + self.Train:LoadSystem("KU5","Relay","Switch", {bass = true}) --Lights off + self.Train:LoadSystem("KU6","Relay","Switch", {bass = true}) --KDL + self.Train:LoadSystem("KU7","Relay","Switch", {bass = true}) --KDP + self.Train:LoadSystem("KU6K","Relay","Switch", {bass = true}) --KDLK + self.Train:LoadSystem("KU7K","Relay","Switch", {bass = true}) --KDPK + self.Train:LoadSystem("KU8","Relay","Switch", {bass = true}) --KSN + self.Train:LoadSystem("KU9","Relay","Switch", {bass = true}) --Vozvrat RP + self.Train:LoadSystem("KU10","Relay","Switch", {bass = true}) --KRZD + self.Train:LoadSystem("KU11","Relay","Switch", {bass = true}) --Door sig + self.Train:LoadSystem("KU12","Relay","Switch", {bass = true}) --Scepleniye + self.Train:LoadSystem("KU13","Relay","Switch", {bass = true}) --Left doors2 + self.Train:LoadSystem("KU15","Relay","Switch", {bass = true}) --RezMK + self.Train:LoadSystem("KU16","Relay","Switch", {bass = true}) --Headlights + + self.Train:LoadSystem("RCU","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("R_UNch","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_ZS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_G","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_Radio","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_Program1","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_Program2","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("RST","Relay","Switch", {bass = true, normally_closed=true}) + + self.Train:LoadSystem("PanelLamp","Relay","Switch", {bass = true, normally_closed=true}) + + self.V1 = 0 + self.TW1 = 0 + self.GRP = 0 + self.RRP = 0 + self.TW18 = 0 + self.SD = 0 + self.PP1 = 0 + self.PP6 = 0 + self.SDW = 0 + self.Headlights1 = 0 + self.Headlights2 = 0 + self.RedLights = 0 + self.EmergencyLights2 = 0 + self.EmergencyLights1 = 0 + self.MainLights1 = 0 + self.MainLights2 = 0 + self.PanelLights = 0 + + self.Ring = 0 + + self.VPR = 0 + + self.AnnouncerPlaying = 0 + + self.PCBKPower = 0 + + self.BrY = 0 +end + +function TRAIN_SYSTEM:ClientInitialize() +end + +function TRAIN_SYSTEM:Outputs() + return { "V1","GRP","RRP","TW18","SD","PP1","PP6","SDW","BrY","Headlights1","Headlights2","RedLights","EmergencyLights2","EmergencyLights1","MainLights1","MainLights2","PanelLights","AnnouncerPlaying","VPR","Ring","CBKIPower","PCBKPower"} +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_81_703_pneumatic.lua b/lua/metrostroi/systems/sys_81_703_pneumatic.lua new file mode 100644 index 0000000..91cb5ec --- /dev/null +++ b/lua/metrostroi/systems/sys_81_703_pneumatic.lua @@ -0,0 +1,649 @@ +-------------------------------------------------------------------------------- +-- 81-703 pneumatic system +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_703_Pneumatic") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize(parameters) + -- Position of the train drivers valve + -- Type 1 (334) + -- 1 Accelerated charge + -- 2 Normal charge (brake release) + -- 3 Closed + -- 4 Service application + -- 5 Emergency application + self.DriverValvePosition = 2 + self.RealDriverValvePosition = self.DriverValvePosition + + + -- Pressure in reservoir + self.ReservoirPressure = 0.0 -- atm + -- Pressure in trains feed line + self.TrainLinePressure = 8.0 -- atm + -- Pressure in trains brake line + self.BrakeLinePressure = 0.0 -- atm + self.EPKPressure = 0.0 -- atm + -- Pressure in brake cylinder + self.BrakeCylinderPressure = 0.0 -- atm + -- Pressure in the door line + self.DoorLinePressure = 0.0 -- atm + self.OldBrakeLinePressure = 0.0 + self.BCPressure = 0 + + --DKPT + self.Train:LoadSystem("DKPT","Relay","R-52B") + -- Valve #1 + self.Train:LoadSystem("PneumaticNo1","Relay") + -- Valve #2 + self.Train:LoadSystem("PneumaticNo2","Relay") + -- ÐвтоматичеÑкий выключатель Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ (ÐВТ) + self.Train:LoadSystem("AVT","Relay","AVT-325") + -- РегулÑтор Ð´Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (ÐК) + self.Train:LoadSystem("AK","Relay","AK-11B") + -- ÐвтоматичеÑкий выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (ÐВУ) + self.Train:LoadSystem("AVU","Relay","AVU-045") + -- Блокировка тормозов + self.Train:LoadSystem("BPT","Relay","") + -- Блокировка дверей + self.Train:LoadSystem("BD","Relay","") + -- Вентили дверного воздухораÑÐ¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÐµÐ»Ñ (ВДОЛ, ВДОП, ВДЗ) + self.Train:LoadSystem("VDOL","Relay","", {bass = true}) + self.Train:LoadSystem("VDOP","Relay","", {bass = true}) + self.Train:LoadSystem("VDZ","Relay","", {bass = true}) + + -- Краны двойной Ñ‚Ñги + self.Train:LoadSystem("DriverValveTLDisconnect","Relay","Switch", {bass = true}) + self.Train:LoadSystem("DriverValveBLDisconnect","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("EmergencyBrakeValve","Relay","Switch") + -- ВоздухораÑпределитель + self.Train:LoadSystem("AirDistributorDisconnect","Relay","Switch") + --УÐÐ’Ð + self.Train:LoadSystem("UAVA","Relay","Switch",{ bass = true}) + self.Train:LoadSystem("UAVAC","Relay","",{normally_closed=true,bass=true}) + --ЭПК + self.Train:LoadSystem("EPK","Relay","Switch",{ bass = true}) + self.Train:LoadSystem("SOT","Relay") + -- Isolation valves + self.Train:LoadSystem("FrontBrakeLineIsolation","Relay","Switch", { normally_closed = true, bass = true}) + self.Train:LoadSystem("RearBrakeLineIsolation","Relay","Switch", { normally_closed = true, bass = true}) + self.Train:LoadSystem("FrontTrainLineIsolation","Relay","Switch", { normally_closed = true, bass = true}) + self.Train:LoadSystem("RearTrainLineIsolation","Relay","Switch", { normally_closed = true, bass = true}) + + -- Brake cylinder atmospheric valve open + self.BrakeCylinderValve = 0 + + -- Overpressure protection valve open + self.TrainLineOverpressureValve = 0 + + -- Compressor simulation + self.Compressor = 0 --Simulate overheat with TRK FIXME + + -- Disconnect valve status + self.DriverValveDisconnectPrevious = 0 + + -- Doors state + --[[self.Train:LoadSystem("LeftDoor1","Relay",{ open_time = 0.5, close_time = 0.5 }) + self.Train:LoadSystem("LeftDoor2","Relay",{ open_time = 0.5, close_time = 0.5 }) + self.Train:LoadSystem("LeftDoor3","Relay",{ open_time = 0.5, close_time = 0.5 }) + self.Train:LoadSystem("LeftDoor4","Relay",{ open_time = 0.5, close_time = 0.5 }) + self.Train:LoadSystem("RightDoor1","Relay",{ open_time = 0.5, close_time = 0.5 }) + self.Train:LoadSystem("RightDoor2","Relay",{ open_time = 0.5, close_time = 0.5 }) + self.Train:LoadSystem("RightDoor3","Relay",{ open_time = 0.5, close_time = 0.5 }) + self.Train:LoadSystem("RightDoor4","Relay",{ open_time = 0.5, close_time = 0.5 })]]-- + if not TURBOSTROI then + self.LeftDoorState = { 0,0,0,0 } + self.RightDoorState = { 0,0,0,0 } + self.LeftDoorDir = { 0,0,0,0 } + self.RightDoorDir = { 0,0,0,0 } + self.LeftDoorSpeed = {0,0,0,0} + self.RightDoorSpeed = {0,0,0,0} + self.LeftDoorStuck = {false, false, false, false} + self.RightDoorStuck = {false, false, false, false} + local start = math.Rand(0.6,0.8) + -- 0.6-1 + self.DoorSpeedMain = -math.Rand(start,math.Rand(start+0.1,start+0.2)) + for i=1,#self.LeftDoorSpeed do + if math.random() > 0.7 then + self.LeftDoorSpeed[i] = math.Rand(self.DoorSpeedMain-0.1,self.DoorSpeedMain+0.2) + self.RightDoorSpeed[i] = math.Rand(self.DoorSpeedMain-0.1,self.DoorSpeedMain+0.2) + else + self.LeftDoorSpeed[i] = math.Rand(self.DoorSpeedMain-0.1,self.DoorSpeedMain+0.1) + self.RightDoorSpeed[i] = math.Rand(self.DoorSpeedMain-0.1,self.DoorSpeedMain+0.1) + end + end + end + self.TrainLineOpen = false + self.BrakeLineOpen = false + + self.EmergencyValve = false + self.EmergencyValveEPK = false + self.OldValuePos = self.DriverValvePosition + + self.WeightLoadRatio = 0--math.max(0,math.min(1,(self.Train:GetNW2Float("PassengerCount",0)/200))) + + self.HaveUAVA = not self.Train.SubwayTrain or not self.Train.SubwayTrain.ARS or not self.Train.SubwayTrain.ARS.NoUAVA + self.HaveEPK = not self.Train.SubwayTrain or not self.Train.SubwayTrain.ARS or not self.Train.SubwayTrain.ARS.NoEPK +end + +function TRAIN_SYSTEM:Inputs() + return { "BrakeUp", "BrakeDown", "BrakeSet", "ValveType", "Autostop" } +end + +function TRAIN_SYSTEM:Outputs() + return { "BrakeLinePressure", "BrakeCylinderPressure", "DriverValvePosition", + "ReservoirPressure", "TrainLinePressure", "DoorLinePressure", "WeightLoadRatio" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "BrakeSet" then + self.DriverValvePosition = math.floor(value) + if self.DriverValvePosition < 1 then self.DriverValvePosition = 1 end + if self.DriverValvePosition > 5 then self.DriverValvePosition = 5 end + elseif (name == "BrakeUp") and (value > 0.5) then + self:TriggerInput("BrakeSet",self.DriverValvePosition+1) + elseif (name == "BrakeDown") and (value > 0.5) then + self:TriggerInput("BrakeSet",self.DriverValvePosition-1) + elseif name == "ValveType" then + self.ValveType = math.floor(value) + elseif name == "Autostop" then + if self.HaveUAVA and self.Train.UAVA.Value == 0 then + self.EmergencyValve = true + self.Train.UAVAC:TriggerInput("Set",0) + if value > 0 then RunConsoleCommand("say","Autostop braking",self.Train:GetDriverName()) end + end + end +end + + +-- TODO: почиÑтить Ñто говно, Ñделать раздельные звуки пневмы +-- Calculate derivatives +function TRAIN_SYSTEM:equalizeCouplePressure(dT,pressure,train,valve_status,rate,close_rate) + if not valve_status then return 0 end + local other + if IsValid(train) then other = train.Pneumatic end + + -- Get second pressure + local P2 = 0 + if other then P2 = other[pressure] end + if (not other) and (valve_status) then + self.TrainLineOpen = (pressure == "TrainLinePressure") + rate = close_rate or rate + --self.TrainLinePressure_dPdT = 0.0 + end + + -- Calculate rate + local dPdT = rate * (P2 - self[pressure]) + -- Calculate delta + local dP = dPdT*dT + if other and other.ReadOnly then + dP = dP/250 + end + -- Equalized pressure + local P0 = (P2 + self[pressure]) / 2 + -- Update pressures + if dP > 0 then + self[pressure] = math.min(P0,self[pressure] + dP) + if other and not other.ReadOnly then + other[pressure] = math.max(P0,other[pressure] - dP) + end + else + self[pressure] = math.max(P0,self[pressure] + dP) + if other and not other.ReadOnly then + other[pressure] = math.min(P0,other[pressure] - dP) + end + end + -- Update delta if losing air + if self.TrainLineOpen and (pressure == "TrainLinePressure") then + self[pressure.."_dPdT"] = (self[pressure.."_dPdT"] or 0) + dPdT + end + return dP +end +------------------------------------------------------------------------------- +function TRAIN_SYSTEM:UpdatePressures(Train,dT) + local frontBrakeOpen = Train.FrontBrakeLineIsolation.Value == 0 + local rearBrakeOpen = Train.RearBrakeLineIsolation.Value == 0 + local frontTrainOpen = Train.FrontTrainLineIsolation.Value == 0 + local rearTrainOpen = Train.RearTrainLineIsolation.Value == 0 + + local Ft = IsValid(Train.FrontTrain) and Train.FrontTrain + local Rt = IsValid(Train.RearTrain) and Train.RearTrain + local Fc, Rc = Train.FrontCouple or Train.FrontBogey, Train.RearCouple or Train.RearBogey + local Fb,Rb + if IsValid(Fc) and Fc.DepotPneumo then Fb = Fc.DepotPneumo end + if IsValid(Rc) and Rc.DepotPneumo then Rb = Rc.DepotPneumo end + + local frontBrakeLeak = false + local rearBrakeLeak = false + local frontTrainLeak = false + local rearTrainLeak = false + + -- Check if both valve on this train and connected train are open + if Ft and Ft.FrontBrakeLineIsolation then + if Ft.FrontTrain == Train then -- Nose to nose + frontBrakeLeak = frontBrakeOpen and Ft.FrontBrakeLineIsolation.Value==1 and 0.08 + frontTrainLeak = frontTrainOpen and Ft.FrontTrainLineIsolation.Value==1 and 0.08 + else -- Rear to nose + frontBrakeLeak = frontBrakeOpen and Ft.RearBrakeLineIsolation.Value==1 and 0.08 + frontTrainLeak = frontTrainOpen and Ft.RearTrainLineIsolation.Value==1 and 0.08 + end + else + frontBrakeLeak = frontBrakeOpen and 0.7 + frontTrainLeak = frontTrainOpen and not Fb and 0.3 + end + if Rt and Rt.FrontBrakeLineIsolation then + if Rt.FrontTrain == Train then -- Nose to nose + rearBrakeLeak = rearBrakeOpen and Rt.FrontBrakeLineIsolation.Value==1 and 0.08 + rearTrainLeak = rearTrainOpen and Rt.FrontTrainLineIsolation.Value==1 and 0.08 + else -- Rear to nose + rearBrakeLeak = rearBrakeOpen and Rt.RearBrakeLineIsolation.Value==1 and 0.08 + rearTrainLeak = rearTrainOpen and Rt.RearTrainLineIsolation.Value==1 and 0.08 + end + else + rearBrakeLeak = rearBrakeOpen and 0.7 + rearTrainLeak = rearTrainOpen and not Rb and 0.3 + end + + -- Equalize pressure + local Fl=math.min(0,self:equalizeCouplePressure(dT,"BrakeLinePressure",frontBrakeLeak==false and Ft,frontBrakeOpen,100,frontBrakeLeak or 0.08)*3)*(frontBrakeLeak and 1 or 0) + local Rl=math.min(0,self:equalizeCouplePressure(dT,"BrakeLinePressure",rearBrakeLeak==false and Rt,rearBrakeOpen,100,rearBrakeLeak or 0.08)*3)*(rearBrakeLeak and 1 or 0) + + Fl=Fl+math.min(0,self:equalizeCouplePressure(dT,"TrainLinePressure",frontTrainLeak==false and Ft or Fb,frontTrainOpen,100,frontTrainLeak or 0.08)*10)*(frontTrainLeak and 1 or 0) + Rl=Rl+math.min(0,self:equalizeCouplePressure(dT,"TrainLinePressure",rearTrainLeak==false and Rt or Rb,rearTrainOpen,100,rearTrainLeak or 0.08)*10)*(rearTrainLeak and 1 or 0) + + self.TrainLineOpen=frontTrainLeak or rearTrainLeak + self.BraieLineOpen=frontBrakeLeak or rearBrakeLeak + Train:SetPackedRatio("FrontLeak",Fl) + Train:SetPackedRatio("RearLeak",Rl) +end + + + +function TRAIN_SYSTEM:equalizePressure(dT,pressure,target,rate,fill_rate,no_limit,smooth) + if fill_rate and (target > self[pressure]) then rate = fill_rate end + + -- Calculate derivative + local dPdT = rate + if target < self[pressure] then dPdT = -dPdT end + local dPdTramp = math.min(1.0,math.abs(target - self[pressure])*(smooth or 0.5)) + dPdT = dPdT*dPdTramp + + -- Update pressure + self[pressure] = self[pressure] + dT * dPdT + self[pressure] = math.max(0.0,math.min(16.0,self[pressure])) + self[pressure.."_dPdT"] = (self[pressure.."_dPdT"] or 0) + dPdT + if no_limit ~= true then + if self[pressure] == 0.0 then self[pressure.."_dPdT"] = 0 end + if self[pressure] == 16.0 then self[pressure.."_dPdT"] = 0 end + end + return dPdT +end +------------------------------------------------------------------------------- +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + self.WeightLoadRatio = math.max(0,math.min(1,(Train:GetNW2Float("PassengerCount")/200))) + + -- Apply specific rate to equalize pressure + + + ---------------------------------------------------------------------------- + -- Accumulate derivatives + self.TrainLinePressure_dPdT = 0.0 + self.BrakeLinePressure_dPdT = 0.0 + self.EPKPressure_dPdT = 0.0 + self.ReservoirPressure_dPdT = 0.0 + self.BrakeCylinderPressure_dPdT = 0.0 + + -- Reduce pressure for brake line + self.TrainToBrakeReducedPressure = math.min(5.1,self.TrainLinePressure) -- * 0.725) + -- Feed pressure to door line + self.DoorLinePressure = self.TrainToBrakeReducedPressure * 0.90 + local trainLineConsumption_dPdT = 0.0 + local wagc = Train:GetWagonCount() + local BLDisconnect = Train.DriverValveBLDisconnect.Value > 0 + local TLDisconnect = Train.DriverValveTLDisconnect.Value > 0 + local pr_speed = 1*wagc--*((self.BrakeLinePressure-self.ReservoirPressure)/0.6) --2 + if self.Leak or self.BraieLineOpen then pr_speed = pr_speed*0.3 end + -- 334: 1 Fill reservoir from train line, fill brake line from train line + if (self.RealDriverValvePosition == 1) then + if TLDisconnect or self.ReservoirPressure > self.TrainLinePressure then + self:equalizePressure(dT,"ReservoirPressure", self.TrainLinePressure, 1,nil,nil,2) + if BLDisconnect then + self:equalizePressure(dT,"BrakeLinePressure", self.TrainLinePressure, pr_speed,nil,nil,2) + end + end + end + + -- 334: 2 Brake line, reservoir replenished from brake line reductor + if (self.RealDriverValvePosition == 2) then + if TLDisconnect or self.ReservoirPressure > self.TrainToBrakeReducedPressure*1.05 then + self:equalizePressure(dT,"ReservoirPressure", self.TrainToBrakeReducedPressure*1.05, 0.55,nil,nil,2) + end + end + + -- 334: 3 Close all valves + if (self.RealDriverValvePosition == 3) then + -- Typical leak + self:equalizePressure(dT,"ReservoirPressure", 0.00, 0.001) + end + + -- 334: 4 Reservoir open to atmosphere, brake line equalizes with reservoir + if (self.RealDriverValvePosition == 4) then + self:equalizePressure(dT,"ReservoirPressure", 0.0,0.55,nil,nil,2)--0.35)-0.55 + end + + -- 334: 5 Reservoir and brake line open to atmosphere + if (self.RealDriverValvePosition == 5) then + self:equalizePressure(dT,"ReservoirPressure", 0.0, 1.00)--,nil,nil,2)--1.70 + if BLDisconnect then + self:equalizePressure(dT,"BrakeLinePressure", 0.0, pr_speed,nil,nil,2) + end + end + if BLDisconnect and (TLDisconnect or self.ReservoirPressure < self.BrakeLinePressure) then + --local pr_speed = wagc*(1.375) --2 + local pr_speed = 1.25*wagc + if self.Leak or self.BraieLineOpen then pr_speed = pr_speed*0.3 end + Train:SetPackedRatio("ReservoirPressure_dPdT",self:equalizePressure(dT,"BrakeLinePressure", self.ReservoirPressure,pr_speed,pr_speed*3,nil)/wagc*2) + else + Train:SetPackedRatio("ReservoirPressure_dPdT",0) + end + trainLineConsumption_dPdT = trainLineConsumption_dPdT + math.max(0,self.BrakeLinePressure_dPdT) + trainLineConsumption_dPdT = trainLineConsumption_dPdT + math.max(0,self.ReservoirPressure_dPdT)*0.05 + if BLDisconnect then + --print(self.BrakeLinePressure_dPdT,self.ReservoirPressure_dPdT,self.TrainLinePressure) + end + + local leak + local pr_speed = 1.25*wagc + if self.HaveEPK and Train.EPKC then + local leak = 0 + local epkDiff = math.abs(self.EPKPressure-self.BrakeLinePressure) + if BLDisconnect and Train.EPK.Value>0 then + if Train.EPKC.Value>0 then + self:equalizePressure(dT,"EPKPressure", self.BrakeLinePressure,math.min(1,epkDiff)*6,false,false,4*epkDiff*2) + end + if self.EPKPressure0.3 then + leak = self:equalizePressure(dT,"BrakeLinePressure", self.EPKPressure,pr_speed*epkDiff/2,pr_speed*epkDiff/2) + end + self.Leak = self.Leak or leak<-0.1 + end + if Train.EPK.Value == 0 or Train.EPKC.Value == 0 then + leak = leak+self:equalizePressure(dT,"EPKPressure", 0,8,false,false,5) + end + Train:SetPackedRatio("EmergencyValveEPK_dPdT", -leak/wagc) + end + Train:SetPackedRatio("Crane_dPdT", self.ReservoirPressure_dPdT ) + + self.Leak = false + local leak = 0 + if self.EmergencyValveDisable and (self.BrakeLinePressure-self.OldBrakeLinePressure)>0.01 then + self.EmergencyValveDisable=false + self.EmergencyValve=false + end + if Train.UKS and Train.UKS.UKSEmerTriggered > 0 and Train.UKSDisconnect.Value > 0 then + self.EmergencyValve=true + end + + self.OldBrakeLinePressure = self.BrakeLinePressure + if self.EmergencyValve then + local leakst = 1.1*(Train:GetWagonCount())*math.Clamp(self.BrakeLinePressure/4,0,1) + leak = self:equalizePressure(dT,"BrakeLinePressure", 0.0,leakst*2,false,false,0.4) + if (leak >= -0.2*(Train:GetWagonCount()) or Train.UAVA.Value > 0) then + self.EmergencyValveDisable = true + end + self.Leak = true + end + local UAVABlocked = (self.BrakeLinePressure>3.5 and Train.UAVA.Value==0) + if (Train.UAVA.Blocked>0) ~= UAVABlocked then + Train.UAVA:TriggerInput("Block",UAVABlocked and 1 or 0) + end + + local UAVACBlocked = self.EmergencyValve and not self.EmergencyValveDisable + if (Train.UAVAC.Blocked>0) ~= UAVACBlocked then + Train.UAVAC:TriggerInput("Block",UAVACBlocked and 1 or 0) + end + + Train:SetPackedRatio("EmergencyValve_dPdT", -leak/wagc) + + local leak = 0 + if Train.EmergencyBrakeValve and Train.EmergencyBrakeValve.Value > 0.5 then + --local leakst = (1.6*(Train:GetWagonCount())*(self.BrakeLinePressure-math.min(2.5,self.TrainToBrakeReducedPressure))*0.9) + leak = self:equalizePressure(dT,"BrakeLinePressure", 0.0,(1.1*wagc)*2,false,false,0.4) + self.Leak = true + end + Train:SetPackedRatio("EmergencyBrakeValve_dPdT", -leak/wagc) + ---------------------------------------------------------------------------- + -- Fill brake cylinders + if Train.AirDistributorDisconnect.Value == 0 then + -- Valve #1 + self.BrakeCylinderRegulationError = self.BrakeCylinderRegulationError or (math.random()*0.20 - 0.10) + local error = self.BrakeCylinderRegulationError + if (Train.PneumaticNo1.Value == 1.0) and (Train.PneumaticNo2.Value == 0.0) then + if self.PN1 == 0 then + --1,2 + self.PN1 = math.min(self.TrainLinePressure,(1.1 + error + self.WeightLoadRatio*0.6)) + end + elseif self.PN1 ~= 0 then + self.PN1 = 0 + end + -- Valve #2 + if Train.PneumaticNo2.Value == 1.0 then + if self.PN2 == 0 then + self.PN2 = math.min(self.TrainLinePressure,(2.5 + error + self.WeightLoadRatio*1.2)) + if self.BePN2 == false and self.BrakeCylinderPressure > 1.6 then + Train:PlayOnce("PN2end","stop") + end + self.BePN2 = true + end + elseif self.PN2 ~= 0 then + self.PN2 = 0 + end + local targetPres = math.max(0,math.min(5.2,1.5*(math.min(5.1,self.TrainToBrakeReducedPressure) - self.BrakeLinePressure))) + if self.BCPressure < targetPres then + self.BCPressure = math.min(targetPres,self.BCPressure+(0.5+math.max(0,(targetPres-self.BCPressure)-0.2)*0.6)*dT) + elseif self.BCPressure > targetPres then + self.BCPressure = math.max(targetPres,self.BCPressure-2*dT) + end + local targetPressure = self.PN1+self.PN2+self.BCPressure + if math.abs(self.BrakeCylinderPressure - targetPressure) > 0.150 then + self.BrakeCylinderValve = 1 + end + if math.abs(self.BrakeCylinderPressure - targetPressure) < 0.025 then + self.BrakeCylinderValve = 0 + end + if self.BrakeCylinderValve == 1 then + self:equalizePressure(dT,"BrakeCylinderPressure", math.min(2.7 + self.WeightLoadRatio*1.3,targetPressure), 1+math.Clamp((self.BrakeCylinderPressure-0.5)/2.8,0,0.7), 3.50, nil, 0.8+math.Clamp((self.BrakeCylinderPressure-0.75)/0.6,0,1)) --0.75, 1.25) + end + trainLineConsumption_dPdT = trainLineConsumption_dPdT + math.max(0,self.BrakeCylinderPressure_dPdT*0.5)--]] + else + self:equalizePressure(dT,"BrakeCylinderPressure", 0.0, 2.00) + end + if (self.BrakeCylinderPressure > 0.2 and self.BrakeCylinderPressure_dPdT > 0.1 or self.BrakeCylinderPressure_dPdT > 1) and not self.BrakeEngaged then + self.BrakeEngaged = true + Train:PlayOnce("brake","bass",1,math.Clamp(self.BrakeCylinderPressure_dPdT,0.7,1.2)) + end + if self.BrakeCylinderPressure < 1 and self.BrakeCylinderPressure_dPdT < -0.1 and self.BrakeEngaged then + self.BrakeEngaged = false + end + Train:SetPackedRatio("BrakeCylinderPressure_dPdT", self.BrakeCylinderPressure_dPdT) + self.TrainLinePressure = self.TrainLinePressure-math.max(0,self.BrakeCylinderPressure_dPdT*0.002) + if Train.PneumaticNo2.Value == 0 then + if self.BePN2 == true then + self.BePN2 = CurTime() + elseif self.BePN2 and self.BrakeCylinderPressure_dPdT > -0.2 then + Train:PlayOnce("PN2end","bass",math.Clamp(math.min(1,(CurTime()-self.BePN2)/1.3)*((3.2-self.BrakeCylinderPressure)/1.2),0,1)) + self.BePN2 = false + end + end + if self.BePN2 == false and (self.BrakeCylinderPressure_dPdT >= 0.2) then + self.BePN2 = nil + Train:PlayOnce("PN2end","stop") + end + + -- Simulate cross-feed between different wagons + self:UpdatePressures(Train,dT) + + ---------------------------------------------------------------------------- + -- Simulate compressor operation and train line depletion + self.Compressor = Train.KK.Value * (Train.Electric.Aux750V > 550 and 1 or 0) + + self.TrainLinePressure = self.TrainLinePressure - 0.07*trainLineConsumption_dPdT*dT -- 0.190 --0.170 + if self.Compressor == 1 then self:equalizePressure(dT,"TrainLinePressure", 10.0, 0.02) end + self:equalizePressure(dT,"TrainLinePressure", 0,0.001) + -- Overpressure + if self.TrainLinePressure > 9.2 then self.TrainLineOverpressureValve = 1 end + if self.TrainLineOverpressureValve == 1 then + self:equalizePressure(dT,"TrainLinePressure", 0.0, 0.2) + self.TrainLineOpen = true + if self.TrainLinePressure < 5.2 then self.TrainLineOverpressureValve = 0 end + end + + ---------------------------------------------------------------------------- + -- Pressure triggered relays + Train.AVT:TriggerInput("Open", self.BrakeCylinderPressure > 1.9) -- 1.8 - 2.0 + Train.AVT:TriggerInput("Close",self.BrakeCylinderPressure < 1.2) -- 0.9 - 1.5 + Train.AK:TriggerInput( "Open", self.TrainLinePressure > 8.2) + Train.AK:TriggerInput( "Close",self.TrainLinePressure < 6.3) + Train.AVU:TriggerInput("Open", self.BrakeLinePressure < 2.7) -- 2.7 - 2.9 + Train.AVU:TriggerInput("Close",self.BrakeLinePressure > 4.3) -- 3.5 - 3.7 + Train.SOT:TriggerInput("Open", self.EPKPressure < 1.3) -- 2.7 - 2.9 + Train.SOT:TriggerInput("Close", self.EPKPressure > 1.5) -- 2.7 - 2.9 + Train.BPT:TriggerInput("Set", self.BrakeCylinderPressure > 0.4) + Train.DKPT:TriggerInput("Set", self.BrakeCylinderPressure > 0.2) -- 1.8 - 2.0 + + ---------------------------------------------------------------------------- + -- Simulate doors opening, closing + if self.DoorLinePressure > 3.5 then + if (Train.VDOL.Value == 1.0) and (Train.VDOP.Value == 0.0) and not self.DoorLeft then + self.DoorLeft = true + end + if (Train.VDOL.Value == 0.0) and (Train.VDOP.Value == 1.0) and not self.DoorRight then + self.DoorRight = true + end + if (Train.VDZ.Value == 1.0 or Train.VDOL.Value == 1.0 and Train.VDOP.Value == 1.0 or self.RZDTimer) and (self.DoorLeft or self.DoorRight) then + if not self.OpenWaitL or CurTime()-self.OpenWaitL < 0.2 then + self.DoorLeft = false + end + if not self.OpenWaitR or CurTime()-self.OpenWaitR < 0.2 then + self.DoorRight = false + end + else + self.CloseValue = nil + end + if Train.VDOL.Value == 1.0 and Train.VDOP.Value == 1.0 then + self.RZDTimer = CurTime() + elseif self.RZDTimer and CurTime()-self.RZDTimer > 0.1 then + self.RZDTimer = nil + end + end + if self.VDOL ~= Train.VDOL.Value then + self.VDOL = Train.VDOL.Value + self:equalizePressure(dT,"TrainLinePressure", 0.0, 0.3) + if self.VDLoud and self.VDOL > 0 and not Train.LeftDoorsOpen then Train:PlayOnce("vdol_loud"..self.VDLoudID,"bass",self.VDLoud) end + end + if self.VDOP ~= Train.VDOP.Value then + self.VDOP = Train.VDOP.Value + self:equalizePressure(dT,"TrainLinePressure", 0.0, 0.3) + if self.VDLoud and self.VDOP > 0 and not Train.RightDoorsOpen then Train:PlayOnce("vdop_loud"..self.VDLoudID,"bass",self.VDLoud) end + end + if self.VDZ ~= Train.VDZ.Value then + self.VDZ = Train.VDZ.Value + self:equalizePressure(dT,"TrainLinePressure", 0.0, 0.3) + if self.VDLoud and self.VDZ > 0 and (Train.RightDoorsOpen or Train.LeftDoorsOpen) then Train:PlayOnce("vzd_loud"..self.VDLoudID,"bass",self.VDLoud) end + end + if Train.CanStuckPassengerLeft then + for i in ipairs(self.LeftDoorStuck) do + self.LeftDoorStuck[i] = math.random() < (0.6+math.min(2,2-self.LeftDoorSpeed[i])*0.2)*Train.CanStuckPassengerLeft*0.6 and (math.random() > 0.7 and CurTime()+math.random()*15) + end + Train.CanStuckPassengerLeft = false + end + if Train.CanStuckPassengerRight then + for i in ipairs(self.RightDoorStuck) do + self.RightDoorStuck[i] = math.random() < (0.6+math.min(2,2-self.LeftDoorSpeed[i])*0.2)*Train.CanStuckPassengerRight*0.6 and (math.random() > 0.7 and CurTime()+math.random()*15) + end + Train.CanStuckPassengerRight = false + end + + + Train.LeftDoorsOpen = false + Train.RightDoorsOpen = false + local openL = true + local openR = true + for i=1,4 do + self.LeftDoorDir[i] = math.Clamp(self.LeftDoorDir[i]+dT/(self.DoorLeft and self.LeftDoorSpeed[i] or -self.LeftDoorSpeed[i]),-1,1) + self.RightDoorDir[i] = math.Clamp(self.RightDoorDir[i]+dT/(self.DoorRight and self.RightDoorSpeed[i] or -self.RightDoorSpeed[i]),-1,1) + self.LeftDoorState[i] = math.Clamp(self.LeftDoorState[i] + ((self.LeftDoorDir[i]/self.LeftDoorSpeed[i])*dT),self.LeftDoorStuck[i] and 0.3 or 0,1) + if self.LeftDoorState[i] == 0 or self.LeftDoorState[i] == 1 then self.LeftDoorDir[i] = 0 end + self.RightDoorState[i] = math.Clamp(self.RightDoorState[i] + ((self.RightDoorDir[i]/self.RightDoorSpeed[i])*dT),self.RightDoorStuck[i] and 0.3 or 0,1) + if self.RightDoorState[i] == 0 or self.RightDoorState[i] == 1 then self.RightDoorDir[i] = 0 end + if not Train.LeftDoorsOpen and self.LeftDoorState[i] > 0 then + Train.LeftDoorsOpen = true + end + if self.LeftDoorState[i] > self.LeftDoorSpeed[i]/20 then self.OpenWaitL = false end + if self.RightDoorState[i] > self.LeftDoorSpeed[i]/20 then self.OpenWaitR = false end + if self.LeftDoorState[i] > 0 then openL = false end + if self.RightDoorState[i] > 0 then openR = false end + if not Train.RightDoorsOpen and self.RightDoorState[i] > 0 then + Train.RightDoorsOpen = true + end + Train:SetPackedRatio("DoorL"..i,self.LeftDoorState[i]) + Train:SetPackedRatio("DoorR"..i,self.RightDoorState[i]) + if self.LeftDoorStuck[i] and (self.DoorLeft or type(self.LeftDoorStuck[i]) == "number" and CurTime()-self.LeftDoorStuck[i] > 0) then + self.LeftDoorStuck[i] = false + end + if self.RightDoorStuck[i] and (self.DoorRight or type(self.RightDoorStuck[i]) == "number" and CurTime()-self.RightDoorStuck[i] > 0) then + self.RightDoorStuck[i] = false + end + Train:SetPackedBool("DoorLS"..i,self.LeftDoorStuck[i]) + Train:SetPackedBool("DoorRS"..i,self.RightDoorStuck[i]) + end + if openL and not self.OpenWaitL then self.OpenWaitL = CurTime() end + if openR and not self.OpenWaitR then self.OpenWaitR = CurTime() end + Train:SetPackedBool("DoorL",self.DoorLeft) + Train:SetPackedBool("DoorR",self.DoorRight) + Train.BD:TriggerInput("Set",not Train.RightDoorsOpen and not Train.LeftDoorsOpen) + + ---------------------------------------------------------------------------- + -- FIXME + Train:SetNW2Bool("FbI",Train.FrontBrakeLineIsolation.Value ~= 0) + Train:SetNW2Bool("RbI",Train.RearBrakeLineIsolation.Value ~= 0) + Train:SetNW2Bool("FtI",Train.FrontTrainLineIsolation.Value ~= 0) + Train:SetNW2Bool("RtI",Train.RearTrainLineIsolation.Value ~= 0) + Train:SetNW2Bool("AD",Train.AirDistributorDisconnect.Value == 0) + + + self.Timer = self.Timer or CurTime() + if ((CurTime() - self.Timer > 0.10) and (self.DriverValvePosition > self.RealDriverValvePosition)) then + self.Timer = CurTime() + if self.RealDriverValvePosition ~= 3 then + Train:PlayOnce("br_334",self.RealDriverValvePosition.."-"..(self.RealDriverValvePosition+1)) + end + self.RealDriverValvePosition = self.RealDriverValvePosition + 1 + end + if ((CurTime() - self.Timer > 0.10) and (self.DriverValvePosition < self.RealDriverValvePosition)) then + self.Timer = CurTime() + if self.RealDriverValvePosition ~= 5 then + Train:PlayOnce("br_334",self.RealDriverValvePosition.."-"..(self.RealDriverValvePosition-1)) + end + self.RealDriverValvePosition = self.RealDriverValvePosition - 1 + end + --[=[ + --Pneumatic relays blocking + if Train.LK1 then + if self.TrainLinePressure < 3 and Train.LK1.Blocked < 1 then + for i = 1,5 do + --self.Train[Format("LK%d",i)]:TriggerInput("Open", 1) + self.Train[LKNames[i]]:TriggerInput("Block", 1) + end + Train.RKR:TriggerInput("Block", 1) + elseif self.TrainLinePressure > 3 and Train.LK1.Blocked > 0 then + for i = 1,5 do + self.Train[LKNames[i]]:TriggerInput("Block", 0) + end + Train.RKR:TriggerInput("Block", 0) + end + end--]=] +end diff --git a/lua/metrostroi/systems/sys_81_703i_electric.lua b/lua/metrostroi/systems/sys_81_703i_electric.lua new file mode 100644 index 0000000..069aa0f --- /dev/null +++ b/lua/metrostroi/systems/sys_81_703i_electric.lua @@ -0,0 +1,474 @@ +---------------------------------------------------------------------------- +-- 81-703, 81-707 intherim electric schemes +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_703I_Electric") +TRAIN_SYSTEM.E = 1 +TRAIN_SYSTEM.Ezh = 2 +TRAIN_SYSTEM.KVL = 3 +function TRAIN_SYSTEM:Initialize(typ1,typ2) + -- Load all functions from base + Metrostroi.BaseSystems["Electric"].Initialize(self) + for k,v in pairs(Metrostroi.BaseSystems["Electric"]) do + if not self[k] and type(v) == "function" then + self[k] = v + end + end + + self.SolvePowerCircuits = Metrostroi.BaseSystems["81_703_Electric"].SolvePowerCircuits + self.SolvePS = Metrostroi.BaseSystems["81_703_Electric"].SolvePS + self.SolvePP = Metrostroi.BaseSystems["81_703_Electric"].SolvePP + self.SolvePT = Metrostroi.BaseSystems["81_703_Electric"].SolvePT +end + +if CLIENT then return end +function TRAIN_SYSTEM:Inputs(...) + return { "Type"} +end +function TRAIN_SYSTEM:Outputs(...) + return Metrostroi.BaseSystems["Electric"].Outputs(self,...) +end +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Type" then + self.Type = value + end +end + +-- Node values +local S = {} +-- Converts boolean expression to a number +local function C(x) return x and 1 or 0 end +local min = math.min +local max = math.max + +function TRAIN_SYSTEM:SolveAllInternalCircuits(Train) + ---[[ + local RheostatController = Train.RheostatController + local P = Train.PositionSwitch.SelectedPosition + local RK = RheostatController.SelectedPosition + local B = (Train.Battery.Voltage > 55) and 1 or 0 + local T = Train.SolverTemporaryVariables + + local elType = self.Type + + local isE = elType == 1 + local isEzh = elType == 2 + local isKVL = elType == 3 + + local BO = min(1,B * Train.VB.Value+T[10])--B * Train.VB.Value + local KV = Train.KV + local Panel = Train.Panel + + + Panel.V1 = BO + + Train:WriteTrainWire(10,B*Train.VB.Value) + Panel.GRP = BO*Train.RPvozvrat.Value + S["10AK"] = BO*Train.VU.Value + + if isE then + S["U2"] = S["10AK"]*(KV["U2-10AK"]+Train.R1_5.Value) + else + S["U2"] = S["10AK"]*KV["U2-10AK"] + end + + Panel.RRP = S["U2"]*T[18] + Train:WriteTrainWire(4,S["U2"]*KV["U2-4"]) + Train:WriteTrainWire(5,S["U2"]*KV["U2-5ZH"]*(Train.UAVAC.Value+KV["5ZH-5"])) + Panel.AnnouncerPlaying = T[13] + Train:WriteTrainWire(24,S["U2"]*Train.KU8.Value) + if isKVL then + Train:WriteTrainWire(1,S["10AK"]*Train.R1_5.Value+(BO*Train.RO1.Value)) + Train:WriteTrainWire(2,S["U2"]*KV["U2-2"]+(BO*Train.RO1.Value)) + Train:WriteTrainWire(3,S["U2"]*KV["U2-3"]+(BO*Train.RO2.Value)) + Train:WriteTrainWire(20,S["U2"]*KV["U2-20"]+(BO*Train.RO2.Value)) + else + Train:WriteTrainWire(14,BO*KV["10-14B"]*KV["14-14B"]) + Train:WriteTrainWire(1,S["10AK"]*Train.R1_5.Value) + Train:WriteTrainWire(2,S["U2"]*KV["U2-2"]) + Train:WriteTrainWire(3,S["U2"]*KV["U2-3"]) + Train:WriteTrainWire(20,S["U2"]*KV["U2-20"]) + end + Train:WriteTrainWire(25,S["U2"]*KV["U2-25"]) + Train:WriteTrainWire(6,S["U2"]*KV["U2-6"]) + Train.RV2:TriggerInput("Set",S["10AK"]*KV["10AK-7A"]) + Train.R1_5:TriggerInput("Set",S["10AK"]*Train.RV2.Value) + Train:WriteTrainWire(17,S["10AK"]*Train.KU9.Value) + Train:WriteTrainWire(8,BO*KV["10-8"]) + + if isKVL then Panel.UPOPower = BO*KV["D-D1"] end + + local RUM = KV.RCU + if isE then + S["ZR"] = 1 + else + S["ZR"] = (1-Train.RRP.Value)+(B*Train.RRP.Value)*-1 + end + + Train.RZ_2:TriggerInput("Set",T[24]*RUM*(1-Train.LK4.Value)) + S["18A"] = RUM*(Train.RPvozvrat.Value*100+(1-Train.LK4.Value)) + Train:WriteTrainWire(18,S["18A"]) + Panel.TW18 = S["18A"] + + local Reverser = Train.Reverser + if isKVL then + S["4A"] = T[4]+T[29]-10*Train.RO2.Value*KV["U2-5ZH"] + S["5A"] = T[5]+T[30] + else + S["4A"] = T[4]*RUM + S["5A"] = T[5]*RUM + end + + Reverser:TriggerInput("NZ",S["4A"]*Reverser.VP) + Reverser:TriggerInput("VP",S["5A"]*Reverser.NZ) + Train.LK4:TriggerInput("Set",(S["4A"]*Reverser.NZ+S["5A"]*Reverser.VP)*(1-Train.RPvozvrat.Value)*Train.LK3.Value*S["ZR"]) + if isKVL then + S["2A"] = (T[2]+BO*Train.RO1.Value)*RUM + Train.PneumaticNo2:TriggerInput("Set",T[8]*(1-Train.LK4.Value)+T[39]) + S["48A"] = C(P==4 and 1 <= RK and RK <= 5) + Train:WriteTrainWire(48,S["48A"]) + Train.PneumaticNo1:TriggerInput("Set",(S["2A"]*Train.PR.Value)*(T[48]*RUM+S["48A"])) + + S["DT"] = BO*Train.BPT.Value + Panel.BrY = S["DT"] + Train:WriteTrainWire(34,S["DT"]) + elseif isE then + Train.PneumaticNo1:TriggerInput("Set",T[8]*C(P == 4 and 1 <= RK and RK <= 5)) + Train.PneumaticNo2:TriggerInput("Set",T[8]*(1-Train.RV3.Value)*(1-Train.LK4.Value)) + Train.RS:TriggerInput("Set",T[12]*RUM) + Train.RV3:TriggerInput("Set",T[14]*RUM) + else + Train:WriteTrainWire(48,C(P == 4 and 1 <= RK and RK <= 5)) + Train.PneumaticNo1:TriggerInput("Set",(T[8]+T[44])*T[48]) + Train.PneumaticNo2:TriggerInput("Set",T[8]*(1-Train.LK4.Value)) + end + + S["10A"] = BO*RUM + + --РУТ + --СДРК + if isKVL then + S["10B"] = S["10A"]*(Train.RV1.Value+Train.TSH.Value*(1-Train.KSH3.Value)) + else + S["10B"] = S["10A"]*(Train.RV1.Value+Train.TSH.Value) + end + if isE then + S["25B"] = (1-Train.TSH.Value)*Train.LK2.Value + S["25A"] = (Train.KSH2.Value + Train.RS.Value) + Train["RUTreg"] = S["10A"]*(S["25B"]-S["25A"]) + S["10I"] = S["10A"]*RheostatController.RKM2 + Train["RUTpod"] = S["10I"]*Train.LK4.Value + Train["RRTpod"] = S["10I"]*(1-Train.LK2.Value) + else + S["25B"] = S["10B"]*(1-Train.TSH.Value)*Train.LK1.Value + S["25A"] = Train.KSH2.Value + Train["RUTreg"] = S["10A"]*(S["25B"]-S["25A"]) + S["10I"] = S["10A"]*RheostatController.RKM2 + Train["RUTpod"] = S["10I"]*Train.LK4.Value + Train["RRTpod"] = S["10I"]*(1-Train.LK1.Value) + end + Train.RRT:TriggerInput("Close",Train.RRTuderzh*Train.RRTpod) + Train.RRT:TriggerInput("Open",(1-Train.RRTuderzh)) + local SDRKr = 0 + if isE then + SDRKr = 1-Train.LK4.Value*(0.2+0.3*C(2 <=RK and RK <= 7 and (P==1 or P==3 or P==4))) + else + SDRKr = 1-Train.LK2.Value*(0.2+0.3*C(2 <=RK and RK <= 7 and (P==1 or P==3 or P==4))) + end + RheostatController:TriggerInput("MotorCoilState",min(1,S["10A"]*(S["10B"]*Train.RR.Value - S["10B"]*(1-Train.RR.Value)))*SDRKr) + + S["10N"] = S["10A"]*(RheostatController.RKM1+Train.SR1.Value*(1-Train.RUT.Value)) + S["10T"] = --[[ S["10N"]*--]] ((1-Train.SR1.Value)+Train.RUT.Value)*(RheostatController.RKP) + RheostatController:TriggerInput("MotorState",(S["10N"]+S["10T"]*(-10))) + --СДПП + S["10AV"] = S["10A"]*(1-Train.LK3.Value)*C(2<=RK and RK<=18)*(1-Train.LK4.Value) + S["10E"] = S["10A"]*((1-Train.LK3.Value)+Train.Rper.Value+Train.PositionSwitch.PMPos) + if isE then + Train.SR2:TriggerInput("Set",S["10E"]*((C(P==3 or P==4)+Train.KSH2.Value))*(1-Train.LK4.Value)) + + S["10AD"] = (1-Train.LK1.Value)*Train.SR2.Value + S["10AZh"] = S["10AD"]*Train.TSH.Value*C(P==1 or P==2 or P==4) + else + S["10AD"] = (1-Train.LK1.Value)*(C(P==3 or P==4)+Train.LK2.Value) + S["10AZh"] = S["10AD"]*Train.TSH.Value*Train.KSH2.Value*C(P==1 or P==2 or P==4) + end + S["10AR"] = S["10AD"]*(1-Train.KSH3.Value)*(1-Train.TSH.Value)*C(2<=P and P<=4) + S["10Ya"] = Train.LK3.Value*C(RK==18 and (P==1 or P==3)) + S["10AG"] = S["10E"]*(S["10AR"]+S["10AZh"]+S["10Ya"]) + Train.PositionSwitch:TriggerInput("MotorState",-1.0 + 2.0*math.max(0,S["10AG"])) + if isKVL then + S["2A"] = (T[2]+BO*Train.RO1.Value)*RUM + else + S["2A"] = T[2]*RUM + end + S["2G"] = S["2A"]*(C(P==1 or P==3)*C(1<=RK and RK<=17)+C(P==2 or P==4)*(C(5<=RK and RK<=18)+C(2<=RK and RK<=4)*Train.KSH1.Value)) + if isE then + S["2E"] = S["2G"]*(1-Train.SR2.Value)*Train.LK4.Value+S["10AV"] + else + S["2E"] = S["2G"]*Train.LK4.Value+S["10AV"] + end + Train.RV1:TriggerInput("Set",S["2E"]*S["ZR"]) + Train.SR1:TriggerInput("Set",S["2E"]*(1-Train.RRT.Value)*S["ZR"]) + + if isKVL then + Train.Rper:TriggerInput("Set",(T[3]+BO*Train.RO2.Value)*RUM*C(17<=RK and RK<=18)) + else + Train.Rper:TriggerInput("Set",T[3]*RUM*C(17<=RK and RK<=18)*S["ZR"]) + end + + if isKVL then + S["1P"] = (T[1]+BO*Train.RO1.Value)*RUM*C(P == 1 or P == 2)*Train.NR.Value + else + S["1P"] = T[1]*RUM*C(P == 1 or P == 2)*Train.NR.Value + end + S["6A"] = T[6]*RUM + Train.TSH:TriggerInput("Set",S["6A"]) + if isKVL then Train.PR:TriggerInput("Set",S["6A"]) end + S["1G"] = (S["1P"]+S["6A"]*C(P==3 or P==4))*Train.AVT.Value*(1-Train.RPvozvrat.Value) + S["1Zh"] = S["1G"]*(Train.LK3.Value+Train.KSH2.Value*C(RK==1 and (P==1 or P==3))) + Train.LK1:TriggerInput("Set",S["1Zh"]*C(P==1 or P==2)*S["ZR"]) + Train.LK3:TriggerInput("Set",S["1Zh"]*S["ZR"]) + Train.RR:TriggerInput("Set",S["1Zh"]*C(P==1 or P==3)*S["ZR"]) + + Train["RUTavt"] = S["6A"]*(1-Train.KSH2.Value) + if isE then + S["6K"] = S["6A"]*C(RK==1)*(1-Train.LK1.Value) + else + S["6K"] = S["6A"]*C(RK==1)*(1-Train.LK1.Value) + end + Train.KSH3:TriggerInput("Set",S["6K"]) + Train.KSH4:TriggerInput("Set",S["6K"]) + + Train.RPvozvrat:TriggerInput("Open",T[17]*RUM) --FIXME Mayve more right RP code + + if isKVL then + Train.RO1:TriggerInput("Set",T[9]) + Train.RO2:TriggerInput("Set",T[9]*Train.RO1.Value) + end + S["20A"] = T[20]*RUM + if isE then + Train.LK2:TriggerInput("Set",S["20A"]*Train.LK1.Value*S["ZR"]) + else + Train.LK2:TriggerInput("Set",S["20A"]*(1-Train.RPvozvrat.Value)*S["ZR"]) + end + S["20V"] = C((RK==1 or RK==18) and P==1) + S["20G"] = C(1<=RK and RK<=5 and (P==2 or P==3)) + if isE then + S["20D"] = S["20A"]*(S["20G"]+S["20V"]*((1-Train.Rper.Value)+Train.KSH1.Value)) + Train.KSH2:TriggerInput("Set",S["20D"]) + Train.KSH1:TriggerInput("Set",S["20D"])--+S["20V"]*(1-Train.Rper.Value)) + else + S["20D"] = S["10A"]*(S["20G"]+S["20V"]*((1-Train.Rper.Value)+Train.KSH1.Value)) + Train.KSH2:TriggerInput("Set",S["20D"]*(Train.LK2.Value+Train.LK4.Value)) + Train.KSH1:TriggerInput("Set",S["20D"]*(Train.LK2.Value+Train.LK4.Value))--+S["20V"]*(1-Train.Rper.Value)) + end + Train["RRTuderzh"] = T[25] + + --Ð’Ñпом цепи низкого напрÑÐ¶ÐµÐ½Ð¸Ñ + Train:WriteTrainWire(11,BO*Train.VU2.Value) + if isKVL then + Train:WriteTrainWire(23,BO*Train.KU1.Value) + Train:WriteTrainWire(22,T[23]*Train.AK.Value) + else + S["23A"] = BO*Train.KU1.Value + Train:WriteTrainWire(22,(S["23A"]+T[23])*(Train.AK.Value)) + end + + Panel.AVU = BO*(1-Train.AVU.Value) + Train:WriteTrainWire(27,BO*Train.KU4.Value) + Train:WriteTrainWire(28,BO*Train.KU5.Value) + + S["D1"] = BO*KV["D-D1"] + S["F7"] = BO*KV["F-F7"] + if isE then + Train:WriteTrainWire(31,S["D1"]*(Train.KU10.Value+Train.KU6.Value+Train.KU13.Value)) + Train:WriteTrainWire(32,S["D1"]*(Train.KU10.Value+Train.KU7.Value)) + Train:WriteTrainWire(12,S["F7"]*Train.KU12.Value) + else + Train.RRP:TriggerInput("Set",T[14]) + if isKVL then + Train:WriteTrainWire(31,S["D1"]*(Train.KU6.Value+Train.KU13.Value)) + Train:WriteTrainWire(32,S["D1"]*Train.KU7.Value) + else + Train:WriteTrainWire(31,S["D1"]*(Train.KU6.Value+Train.KU13.Value)+T[12]) + Train:WriteTrainWire(32,S["D1"]*Train.KU7.Value+T[12]) + end + Train:WriteTrainWire(12,S["D1"]*Train.KU10.Value) + end + Train:WriteTrainWire(16,S["D1"]*Train.KU2.Value*Train.KU3.Value) + Panel.Headlights1 = S["F7"] + Panel.Headlights2 = S["F7"]*Train.KU16.Value + + if isKVL then + S["F1"] = BO*KV["10-F1"] + Train:WriteTrainWire(42,T[11]*Train.BD2.Value) + Train:WriteTrainWire(44,S["F1"]*C(RK==1 and P==4)) + Train:WriteTrainWire(46,S["F1"]*C(1<=RK and RK<=17 and P==3)) + end + + if isE then + S["11A"] = T[11]*(1-Train.KZ1.Value) + else + S["11A"] = T[11]*(1-Train.NR.Value) + end + Panel.EmergencyLights1 = BO*Train.VU3.Value+S["11A"]*(1-Train.VU3.Value) + Panel.EmergencyLights2 = S["11A"] + Panel.MainLights1 = math.max(0,math.min(1, + ( + self.Aux750V-100 + -self.Itotal*0.25*C(Train.PositionSwitch.SelectedPosition >= 3) + -25*Train.KK.Value + )/750*(0.5+0.5*B*Train.VB.Value*Train.KZ1.Value) + )) + Panel.MainLights2 = Panel.MainLights1*Train.KO.Value + + if isKVL or isE then + Train.KK:TriggerInput("Set",T[22]) + else + Train.KK:TriggerInput("Set",(T[22]+T[23])*(1-Train.TRK.Value)) + end + Train.KO:TriggerInput("Close",T[27]) + Train.KO:TriggerInput("Open",T[28]) + + local BD = 1-Train.BD.Value + if isKVL then + Train:WriteTrainWire(15,T[-15]*Train.RD.Value) + Panel.SD = T[-15]*T[15] + Train.RD:TriggerInput("Set",BO*Train.BD.Value) + else + Train:WriteTrainWire(15,BD*(1-Train.KU11.Value)) + Panel.SD = (S["D1"]+BO*Train.KU11.Value)*(T[15]*(1-Train.KU11.Value)+BD) + end + + Train.VDZ:TriggerInput("Set",T[16]*BD) + if isE or isKVL then + Train.VDOL:TriggerInput("Set",T[31]) + Train.VDOP:TriggerInput("Set",T[32]) + else + Train.VDOL:TriggerInput("Set",T[31]+T[12]) + Train.VDOP:TriggerInput("Set",T[32]+T[12]) + Panel.PCBKPower = T[10] + end + return S +end + +function TRAIN_SYSTEM:SolveRKInternalCircuits(Train) + ---[[ + local RheostatController = Train.RheostatController + local P = Train.PositionSwitch.SelectedPosition + local RK = RheostatController.SelectedPosition + local B = (Train.Battery.Voltage > 55) and 1 or 0 + local T = Train.SolverTemporaryVariables + + local isE = self.Type == 1 + local isEzh = self.Type == 2 + local isKVL = self.Type == 3 + + local BO = min(1,B * Train.VB.Value+T[10])--B * Train.VB.Value + + local RUM = Train.KV.RCU + if isE then + S["ZR"] = 1 + else + S["ZR"] = (1-Train.RRP.Value)+(B*Train.RRP.Value)*-1 + end + + S["10A"] = BO*RUM + --РУТ + --СДРК + if isKVL then + S["10B"] = S["10A"]*(Train.RV1.Value+Train.TSH.Value*(1-Train.KSH3.Value)) + else + S["10B"] = S["10A"]*(Train.RV1.Value+Train.TSH.Value) + end + if isE then + S["25B"] = (1-Train.TSH.Value)*Train.LK2.Value + S["25A"] = (Train.KSH2.Value + Train.RS.Value) + Train["RUTreg"] = S["10A"]*(S["25B"]-S["25A"]) + S["10I"] = S["10A"]*RheostatController.RKM2 + Train["RUTpod"] = S["10I"]*Train.LK4.Value + Train["RRTpod"] = S["10I"]*(1-Train.LK2.Value) + else + S["25B"] = S["10B"]*(1-Train.TSH.Value)*Train.LK1.Value + S["25A"] = Train.KSH2.Value + Train["RUTreg"] = S["10A"]*(S["25B"]-S["25A"]) + S["10I"] = S["10A"]*RheostatController.RKM2 + Train["RUTpod"] = S["10I"]*Train.LK4.Value + Train["RRTpod"] = S["10I"]*(1-Train.LK1.Value) + end + Train.RRT:TriggerInput("Close",Train.RRTuderzh*Train.RRTpod) + Train.RRT:TriggerInput("Open",(1-Train.RRTuderzh)) + local SDRKr = 0 + if isE then + SDRKr = 1-Train.LK4.Value*(0.2+0.3*C(2 <=RK and RK <= 7 and (P==1 or P==3 or P==4))) + else + SDRKr = 1-Train.LK2.Value*(0.2+0.3*C(2 <=RK and RK <= 7 and (P==1 or P==3 or P==4))) + end + RheostatController:TriggerInput("MotorCoilState",min(1,S["10A"]*(S["10B"]*Train.RR.Value - S["10B"]*(1-Train.RR.Value)))*SDRKr) + + S["10N"] = S["10A"]*(RheostatController.RKM1+Train.SR1.Value*(1-Train.RUT.Value)) + S["10T"] = --[[ S["10N"]*--]] ((1-Train.SR1.Value)+Train.RUT.Value)*(RheostatController.RKP) + RheostatController:TriggerInput("MotorState",(S["10N"]+S["10T"]*(-10))) + --СДПП + S["10AV"] = S["10A"]*(1-Train.LK3.Value)*C(2<=RK and RK<=18)*(1-Train.LK4.Value) + S["10E"] = S["10A"]*((1-Train.LK3.Value)+Train.Rper.Value+Train.PositionSwitch.PMPos) + if isE then + Train.SR2:TriggerInput("Set",S["10E"]*((C(P==3 or P==4)+Train.KSH2.Value))*(1-Train.LK4.Value)) + + S["10AD"] = (1-Train.LK1.Value)*Train.SR2.Value + S["10AZh"] = S["10AD"]*Train.TSH.Value*C(P==1 or P==2 or P==4) + else + S["10AD"] = (1-Train.LK1.Value)*(C(P==3 or P==4)+Train.LK2.Value) + S["10AZh"] = S["10AD"]*Train.TSH.Value*Train.KSH2.Value*C(P==1 or P==2 or P==4) + end + S["10AR"] = S["10AD"]*(1-Train.KSH3.Value)*(1-Train.TSH.Value)*C(2<=P and P<=4) + S["10Ya"] = Train.LK3.Value*C(RK==18 and (P==1 or P==3)) + S["10AG"] = S["10E"]*(S["10AR"]+S["10AZh"]+S["10Ya"]) + Train.PositionSwitch:TriggerInput("MotorState",-1.0 + 2.0*math.max(0,S["10AG"])) + if isKVL then + S["2A"] = (T[2]+BO*Train.RO1.Value)*RUM + else + S["2A"] = T[2]*RUM + end + S["2G"] = S["2A"]*(C(P==1 or P==3)*C(1<=RK and RK<=17)+C(P==2 or P==4)*(C(5<=RK and RK<=18)+C(2<=RK and RK<=4)*Train.KSH1.Value)) + if isE then + S["2E"] = S["2G"]*(1-Train.SR2.Value)*Train.LK4.Value+S["10AV"] + else + S["2E"] = S["2G"]*Train.LK4.Value+S["10AV"] + end + Train.RV1:TriggerInput("Set",S["2E"]*S["ZR"]) + Train.SR1:TriggerInput("Set",S["2E"]*(1-Train.RRT.Value)*S["ZR"]) + + if isKVL then + Train.Rper:TriggerInput("Set",(T[3]+BO*Train.RO2.Value)*RUM*C(17<=RK and RK<=18)) + else + Train.Rper:TriggerInput("Set",T[3]*RUM*C(17<=RK and RK<=18)*S["ZR"]) + end + + S["6A"] = T[6]*RUM + Train["RUTavt"] = S["6A"]*(1-Train.KSH2.Value) + + return S +end + +local wires = {1,2,3,4,5,6,8,9,10,11,12,13,14,-15,15,16,17,18,20,22,23,24,25,27,28,29,30,31,32,-34,34,39,44,48} +function TRAIN_SYSTEM:SolveInternalCircuits(Train,dT,firstIter) + local T = Train.SolverTemporaryVariables + if not T then + T = {} + for i,v in ipairs(wires) do T[v] = 0 end + Train.SolverTemporaryVariables = T + end + if firstIter then + for i,v in ipairs(wires) do T[v] = min(Train:ReadTrainWire(v),1) end + self:SolveAllInternalCircuits(Train,dT) + else + self:SolveRKInternalCircuits(Train,dT) + end +end + +function TRAIN_SYSTEM:Think(...) + return Metrostroi.BaseSystems["81_703_Electric"].Think(self,...) +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_81_707_panel.lua b/lua/metrostroi/systems/sys_81_707_panel.lua new file mode 100644 index 0000000..046e40c --- /dev/null +++ b/lua/metrostroi/systems/sys_81_707_panel.lua @@ -0,0 +1,104 @@ +-------------------------------------------------------------------------------- +-- 81-707 controller panel +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_707_Panel") + +function TRAIN_SYSTEM:Initialize() + -- Выключатель батареи (ВБ) + self.Train:LoadSystem("VB","Relay","Switch", {bass = true}) + self.Train:LoadSystem("AV","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("VU","Relay","Switch", {bass = true,normally_closed = true}) + + self.Train:LoadSystem("VU1","Relay","Switch", {bass = true}) --Heater + self.Train:LoadSystem("VU2","Relay","Switch", {bass = true}) --EmergencyLights + self.Train:LoadSystem("VU3","Relay","Switch", {bass = true}) --CabLights + + -- Buttons on the panel + self.Train:LoadSystem("DoorSelect","Relay","Switch", {bass = true, normally_closed = false }) + self.Train:LoadSystem("KU4","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU5","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU9","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU14","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU15","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU1","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VAH","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VAD","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU16","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU2","Relay","Switch", {bass = true }) + self.Train:LoadSystem("KU3","Relay","Switch", { normally_closed = true, bass = true }) -- Doors close + self.Train:LoadSystem("KU3L","Relay","Switch", { bass = true }) -- Doors close + self.Train:LoadSystem("KU13","Relay","Switch", {bass = true}) -- Doors left open + self.Train:LoadSystem("KU6","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU7","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU10","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU8","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU11","Relay","Switch", {bass = true}) --Door sig + + self.Train:LoadSystem("KRR","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("OtklAVU","Relay","Switch", {bass = true}) + self.Train:LoadSystem("ARS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("ALS","Relay","Switch", {bass = true, normally_closed = true }) + self.Train:LoadSystem("KVT","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KB","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("KAH","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("R_UNch","Relay","Switch", {bass = true, normally_closed = true}) + self.Train:LoadSystem("R_ZS","Relay","Switch", {bass = true, normally_closed = true}) + self.Train:LoadSystem("R_G","Relay","Switch", {bass = true, normally_closed = true}) + self.Train:LoadSystem("R_Radio","Relay","Switch", {bass = true, normally_closed = true}) + self.Train:LoadSystem("R_Program1","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_Program2","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_Program1H","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_Program2H","Relay","Switch", {bass = true}) + self.Train:LoadSystem("RC1","Relay","Switch",{bass = true, normally_closed = true }) + self.Train:LoadSystem("OVT","Relay","Switch",{bass = true, normally_closed = true }) + + self.Train:LoadSystem("RST","Relay","Switch", {bass = true, normally_closed = true}) + --self.Train:LoadSystem("ALSFreq","Relay","Switch", {bass = true}) + + + + -- Педаль бдительноÑти (ПБ) + self.Train:LoadSystem("PB","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("KU6K","Relay","Switch", {bass = true, normally_closed = true}) + --self.Train:LoadSystem("KU13K","Relay","Switch", {bass = true, normally_closed = true}) + --self.Train:LoadSystem("KU7K","Relay","Switch", {bass = true, normally_closed = true}) + --self.Train:LoadSystem("KAHK","Relay","Switch", {bass = true, normally_closed = true}) + + self.Train:LoadSystem("PanelLamp","Relay","Switch", {bass = true, normally_closed=true}) + + self.V1 = 0 + self.GRP = 0 + self.RRP = 0 + self.TW18 = 0 + self.SD = 0 + self.Sequence = 0 + self.Headlights1 = 0 + self.Headlights2 = 0 + self.RedLights = 0 + self.EmergencyLights2 = 0 + self.EmergencyLights1 = 0 + self.MainLights1 = 0 + self.MainLights2 = 0 + self.Ring = 0 + self.KT = 0 + self.AVU = 0 + + self.VPR = 0 + + self.AnnouncerPlaying = 0 + + self.CBKIPower = 0 + self.PCBKPower = 0 +end + +function TRAIN_SYSTEM:Outputs() + return { "V1","GRP","RRP","TW18","SD","Headlights1","Headlights2","RedLights","EmergencyLights2","EmergencyLights1","MainLights1","MainLights2","Ring","KT","Sequence","AnnouncerPlaying","AVU","VPR","CBKIPower","PCBKPower"} +end diff --git a/lua/metrostroi/systems/sys_81_710_electric.lua b/lua/metrostroi/systems/sys_81_710_electric.lua new file mode 100644 index 0000000..0b34d28 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_710_electric.lua @@ -0,0 +1,584 @@ +-------------------------------------------------------------------------------- +-- 81-710 electric schemes +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_710_Electric") +function TRAIN_SYSTEM:Initialize(typ1,typ2) + self.ThyristorController = true + + -- Load all functions from base + Metrostroi.BaseSystems["Electric"].Initialize(self) + for k,v in pairs(Metrostroi.BaseSystems["Electric"]) do + if not self[k] and type(v) == "function" then + self[k] = v + end + end + + self.RRI = 0 +end + +if CLIENT then return end +function TRAIN_SYSTEM:Inputs(...) + return { "Type", "RRI" } +end +function TRAIN_SYSTEM:Outputs(...) + return Metrostroi.BaseSystems["Electric"].Outputs(self,...) +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "RRI" then self.RRI = value end +end +-- Node values +local S = {} +-- Converts boolean expression to a number +local function C(x) return x and 1 or 0 end + +local min = math.min +local max = math.max + +function TRAIN_SYSTEM:SolveAllInternalCircuits(Train,dT,firstIter) + local RheostatController = Train.RheostatController + local P = Train.PositionSwitch.SelectedPosition + local RK = Train.RheostatController.SelectedPosition + local B = (Train.Battery.Voltage > 55) and 1 or 0 + local T = Train.SolverTemporaryVariables + + local BO = min(1,B * Train.VB.Value+T[10])--B * Train.VB.Value + local KV = Train.KV + local KRU = Train.KRU + local Panel = Train.Panel + local ARS = Train.ALS_ARS + local RUM = Train.RUM.Value + + + Panel.V1 = BO + Train:WriteTrainWire(10,B*Train.VB.Value) + + S["10AK"] = BO*Train.VU.Value + --10AK->AV --FIXME SAMM + S["U2"] = S["10AK"]*KV["U2-10AK"] + S["7G"] = BO*KV["7D-7G"] + Train:WriteTrainWire(1,S["10AK"]*KV["10AK-1"]*Train.R1_5.Value+KRU["1/3-ZM31"]*-10) --FIXME KRU + Train:WriteTrainWire(2,S["U2"]*KV["U2-2"]+KRU["2/3-ZM31"]*-10+ARS["2"]*RUM) --FIXME ARS SAMM KRU + Train:WriteTrainWire(3,S["U2"]*KV["U2-3"]+KRU["3/3-ZM31"]*-10) --FIXME SAMM KRU + Train:WriteTrainWire(4,S["10AK"]*KV["U2-4"]) + Train:WriteTrainWire(5,S["10AK"]*KV["U2-5"]+KRU["5/3-ZM31"]*-10*(1-Train.KRR.Value)+BO*KRU["14/1-B3"]*Train.KRR.Value) + Train:WriteTrainWire(6,S["10AK"]*Train.RVT.Value)--FIXME ARS SAMM + Train:WriteTrainWire(8,BO*KV["10-8"]+S["7G"]*(1-Train.RPB.Value)*(1-Train.VAH.Value)+ARS["8"]*RUM)--FIXME ARS + Train:WriteTrainWire(9,ARS["48"]*RUM) + Train:WriteTrainWire(14,BO*KV["10-14A"]*KV["14A-14B"]*(ARS["33D"]*RUM+(1-RUM)))--FIXME ARS SAMM + Train:WriteTrainWire(17,S["10AK"]*KV["10AK-17"]*Train.KU9.Value)--FIXME SAMM + Train:WriteTrainWire(20,S["U2"]*KV["U2-20"]+KRU["20/3-ZM31"]*-10+ARS["20"]*RUM) --FIXME ARS SAMM KRU + Train:WriteTrainWire(29,(BO*KRU["14/1-B3"]+T[5]*Train.KRR.Value)*Train.KU10.Value) + Train:WriteTrainWire(24,S["U2"]*Train.KU8.Value) + Train:WriteTrainWire(25,S["U2"]*KV["U2-6"]*KV["6-25"]*Train.K25.Value) --FIXME ARS SAMM KRU + Train:WriteTrainWire(30,BO*Train.BSM_RUT.Value) --FIXME ARS SAMM KRU + + Train.RVT:TriggerInput("Set",S["U2"]*KV["U2-6"]+ARS["33G"]*RUM) --FIXME ARS SAMM + Train.K25:TriggerInput("Set",S["U2"]*KV["U2-6"]*(ARS["33Zh"]*RUM+(1-RUM))) --FIXME ARS SAMM + Train.RV2:TriggerInput("Set",S["10AK"]*KV["33-10AK"]) --FIXME SAMM + Train.R1_5:TriggerInput("Set",S["10AK"]*Train.RV2.Value*Train.UAVAC.Value*(Train.RPB.Value+Train.VAH.Value)*((ARS["33D"]*Train.SOT.Value)*RUM+(1-RUM))) --FIXME SAMM + if self.RRI> 0 then + local RRI_VV = Train.RRI_VV + RRI_VV.Power = BO*Train.RRIEnable.Value + RRI_VV.AmplifierPower = BO*Train.RRIAmplifier.Value + RRI_VV.CabinSpeakerPower = RRI_VV.Power*Train.RRI.LineOut*Train.R_G.Value + Train:WriteTrainWire(13,RRI_VV.AmplifierPower*Train.RRI.LineOut) + --RRI_VV.CabinSpeakerPower = T[13] + else + local ASNP_VV = Train.ASNP_VV + ASNP_VV.Power = BO*Train.R_Radio.Value*Train.R_ASNPOn.Value + ASNP_VV.AmplifierPower = ASNP_VV.Power*Train.ASNP.LineOut*Train.R_UNch.Value + ASNP_VV.CabinSpeakerPower = ASNP_VV.Power*Train.ASNP.LineOut*Train.R_G.Value + Train:WriteTrainWire(13,ASNP_VV.AmplifierPower) + --Train:WriteTrainWire(-13,ASNP_VV.AmplifierPower*Train.PowerSupply.X2_2) + --ASNP_VV.CabinSpeakerPower = ASNP_VV.Power*Train.ASNP.LineOut*Train.R_G.Value + Panel.CBKIPower = T[10] + end + Panel.AnnouncerPlaying = T[13] + + ARS.ALS = S["7G"]*Train.ALS.Value*RUM + ARS.GE = S["7G"]*Train.ARS.Value*RUM + ARS.DAR = S["10AK"]*Train.BUM_RET.Value*RUM + ARS.DA = S["10AK"]*Train.BUM_RET.Value*RUM + Train.BLPM.Power = ARS.ALS + Train.BIS200.Power = ARS.ALS + Train:WriteTrainWire(-34,S["10AK"]*(1-Train.BSM_GE.Value)) + Train:WriteTrainWire(34,Train.RKTT.Value+Train.DKPT.Value) + ARS.KT = T[34]*T[-34]*Train.BSM_GE.Value + Train.BSM_KRT:TriggerInput("Set",max(0,T[6])*RUM) + + Train.BUM_KRD:TriggerInput("Set",(T[31]+T[32]+T[12])*RUM) + Train.BSM_KRH:TriggerInput("Set",S["10AK"]*KV["33-10AK"]*RUM) + Train.BSM_KRO:TriggerInput("Set",S["10AK"]*KV["10AK-1"]*RUM) + + Train.RPB:TriggerInput("Set",S["7G"]*(Train.PB.Value+ARS.GE*RUM)) + + Panel.RRP = S["U2"]*T[18] + + Train.Panel.Sequence = ARS.GE*Train.BSM_GE.Value*(1-Train.BSM_RNT.Value) + + local RCU = KV.RCU + + S["ZR"] = (1-Train.RRU.Value)+(B*Train.RRU.Value)*-1 + Train.RZ_2:TriggerInput("Set",T[24]*RCU*(1-Train.LK4.Value)) + S["18A"] = RCU*(Train.RPvozvrat.Value*100+(1-Train.LK4.Value)) + Train:WriteTrainWire(18,S["18A"]) + Panel.TW18 = S["18A"] + + local Reverser = Train.Reverser + S["4A"] = T[4]*RCU + S["5A"] = T[5]*RCU + Reverser:TriggerInput("NZ",S["4A"]*Reverser.VP) + Reverser:TriggerInput("VP",S["5A"]*Reverser.NZ) + Train.LK4:TriggerInput("Set",(S["4A"]*Reverser.NZ+S["5A"]*Reverser.VP)*(1-Train.RPvozvrat.Value)*Train.LK3.Value*S["ZR"]) + + Train.PneumaticNo1:TriggerInput("Set",T[8]*C(17 <= RK and RK <= 18)+T[9]) + --Train.PneumaticNo2:TriggerInput("Set",T[8]*(1-Train.RV3.Value)*(1-Train.RT2.Value)*((1-Train.LK4.Value)+C(RK==1))) + Train.PneumaticNo2:TriggerInput("Set",T[8]*(1-Train.RT2.Value)*((1-Train.LK4.Value)+C(RK==1))) + Train.RV3:TriggerInput("Set",T[14]) + + S["10A"] = BO*RCU + self.ThyristorControllerPower = S["10A"] + + S["10B"] = S["10A"]*(Train.RV1.Value+Train.TR1.Value) + + --Train["RUTreg"] = T[9] + S["10I"] = S["10A"]*RheostatController.RKM2 + --Train.Panel.Sequence =S["10A"]*RheostatController.RKM1 + Train["RUTpod"] = S["10I"]*Train.LK4.Value + Train["RRTpod"] = S["10I"]*(1-Train.LK1.Value) + Train.RRT:TriggerInput("Close",Train.RRTuderzh*Train.RRTpod) + Train.RRT:TriggerInput("Open",(1-Train.RRTuderzh)) + + local SDRKr = 1-Train.LK2.Value*(0.25*C(2 <=RK and RK <= 7 and P==1)) + RheostatController:TriggerInput("MotorCoilState",min(1,S["10A"]*(S["10B"]*Train.RR.Value - S["10B"]*(1-Train.RR.Value)))*SDRKr) + + S["10N"] = S["10A"]*(RheostatController.RKM1+Train.SR1.Value*(1-Train.RUT.Value)) + S["10T"] = ((1-Train.SR1.Value)+Train.RUT.Value)*(RheostatController.RKP) + + RheostatController:TriggerInput("MotorState",(S["10N"]+S["10T"]*(-10))) + + --СДПП + S["10AV"] = S["10A"]*(1-Train.LK3.Value)*C(2<=RK and RK<=18)*(1-Train.LK4.Value) + S["10E"] = S["10A"]*((1-Train.LK3.Value)+Train.Rper.Value+Train.PositionSwitch.PMPos) + Train.SR2:TriggerInput("Set",S["10E"]*((C(P==3 or P==4)+Train.LK2.Value))*(1-Train.LK4.Value)) + + S["10AD"] = (1-Train.LK1.Value)*Train.SR2.Value + S["10AYu"] = S["10AD"]*(1-Train.RPP.Value) + S["10AZh"] = S["10AD"]* Train.TR1.Value*C(P==1 or P==2 or P==4) + S["10AR"] = S["10AYu"]*(1-Train.TR1.Value)*C(2<=P and P<=4) + S["10Ya"] = Train.LK3.Value*C(RK==18 and (P==1)) + S["10AG"] = S["10E"]*(S["10AR"]+S["10AZh"]+S["10Ya"]) + Train.PositionSwitch:TriggerInput("MotorState",-1.0 + 2.0*math.max(0,S["10AG"])) + + S["2A"] = T[2]*RCU + S["2G"] = S["2A"]*((1-Train.TR1.Value)+(1-Train.KSB1.Value)+Train.ThyristorBU5_6.Value)*( + C(1<=RK and RK<=17 and (P==1 or P==3) + or (6<=RK and RK<=18 + or 2<=RK and RK<=5 and Train.KSH1.Value>0 + ) and (P==2 or P==4) + ) + ) + S["2E"] = S["2G"]*Train.LK4.Value+S["10AV"] + Train.RV1:TriggerInput("Set",S["2E"]*S["ZR"]) + Train.SR1:TriggerInput("Set",S["2E"]*(1-Train.RRT.Value)*S["ZR"]) + Train.Rper:TriggerInput("Set",T[3]*RCU*C(17<=RK and RK<=18)*S["ZR"]) + Train.RU:TriggerInput("Set",S["2A"]) + + Train.RRU:TriggerInput("Set",T[29]) + + S["6A"] = T[6]*RCU + Train.TR1:TriggerInput("Set",S["6A"]) + Train.RPP:TriggerInput("Set",S["6A"]) + S["6G"] = S["6A"]*C(P==3 or P==4) + S["6Yu"] = S["6G"]*C(1<=RK and RK<=2) + Train.KSB1:TriggerInput("Set",S["6Yu"]) + Train.KSB2:TriggerInput("Set",S["6Yu"]) + Train.RUP:TriggerInput("Set",S["6Yu"]) + self.ThyristorControllerWork = (S["6Yu"]+S["6G"]*Train.RUP.Value)*Train.LK4.Value + + S["1A"] = T[1]*RCU + S["1R"] = S["1A"]*((1-Train.RV1.Value)*C(P==1)+C(1<=RK and RK<=5 and P==2)) + Train.KSH2:TriggerInput("Set",S["1R"]*S["ZR"]) --Идет Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð°Ñ Ñ†ÐµÐ¿ÑŒ от ЛК к 1 проводу, но мне лень + Train.KSH1:TriggerInput("Set",S["1R"]*S["ZR"]) --Идет Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð°Ñ Ñ†ÐµÐ¿ÑŒ от ЛК к 1 проводу, но мне лень + + S["1P"] = S["1A"]*C(P == 1 or P == 2)*Train.NR.Value+S["6A"]*C(P==3 or P==4) + Train["RUTavt"] = S["1P"]*(Train.KSB1.Value+Train.KSH2.Value)*S["ZR"] --Идет Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð°Ñ Ñ†ÐµÐ¿ÑŒ от ЛК к 1 проводу, но мне лень + S["1G"] = S["1P"]*Train.AVT.Value*(1-Train.RPvozvrat.Value) + S["1Zh"] = S["1G"]*(Train.LK3.Value+C(RK==1)*(Train.KSH2.Value+Train.KSB1.Value*Train.KSB2.Value)*C(P==1 or P==3)*Train.LK5.Value) + Train.LK1:TriggerInput("Set",S["1Zh"]*C(P==1 or P==2)*S["ZR"]) + Train.LK3:TriggerInput("Set",S["1Zh"]*S["ZR"]) + Train.RR:TriggerInput("Set",S["1Zh"]*C(P==1 or P==3)*S["ZR"]) + Train.RPvozvrat:TriggerInput("Open",T[17]*RCU) --FIXME Mayve more right RP code + S["20A"] = T[20]*RCU + Train.LK2:TriggerInput("Set",S["20A"]*S["ZR"]) + Train.LK5:TriggerInput("Set",S["20A"]*(1-Train.RPvozvrat.Value)*S["ZR"]) + Train["RRTuderzh"] = T[25] + Train.RKTTsh = T[30] + + --Ð’Ñпом цепи низкого напрÑÐ¶ÐµÐ½Ð¸Ñ + Train:WriteTrainWire(7,BO*Train.Ring.Value) + Train:WriteTrainWire(11,BO*Train.VU2.Value) + Train:WriteTrainWire(22,BO*Train.V1.Value*Train.AK.Value) + Train:WriteTrainWire(23,BO*Train.KU15.Value) + Train:WriteTrainWire(27,BO*Train.V4.Value) + Train:WriteTrainWire(28,BO*Train.V5.Value) + Panel.GRP = BO*Train.RPvozvrat.Value + S["F7"] = BO*(KV["F-F7"]+KRU["11/3-FR1"]) + Panel.Headlights1 = S["F7"] + Panel.Headlights2 = S["F7"]*Train.VU14.Value + Panel.RedLights = BO*KV["B2-F1"] + S["D1"] = BO*(KV["D-D1"]+KRU["11/3-D1/1"]) + Train:WriteTrainWire(31,S["D1"]*(Train.V6.Value+Train.KU12.Value)+T[12]) + Train:WriteTrainWire(32,S["D1"]*Train.KU7.Value+T[12]) + Train:WriteTrainWire(12,S["D1"]*Train.V10.Value) + Train:WriteTrainWire(16,S["D1"]*Train.V2.Value*Train.V3.Value) + + Panel.PanelLights = BO*Train.PLights.Value + Panel.GaugeLights = BO*Train.GLights.Value + S["11A"] = T[11]*(1-Train.NR.Value) + Panel.Ring = ARS.Ring+S["11A"]+T[7] + Panel.EmergencyLights1 = BO*Train.VU3.Value+S["11A"]*(1-Train.VU3.Value) + Panel.EmergencyLights2 = S["11A"] + Panel.MainLights1 = math.max(0,math.min(1, + ( + self.Aux750V-100 + -self.Itotal*0.25*C(Train.PositionSwitch.SelectedPosition >= 3) + -25*Train.KK.Value + )/750*(0.5+0.5*B*Train.VB.Value*Train.KZ1.Value) + )) + Panel.MainLights2 = Panel.MainLights1*Train.KO.Value + + Panel.VPR = BO*Train.RST.Value + + Train.KK:TriggerInput("Set",T[22]+T[23]) + Train.KO:TriggerInput("Close",T[27]) + Train.KO:TriggerInput("Open",T[28]) + + local BD = 1-Train.BD.Value + Train:WriteTrainWire(15,BD*(1-Train.KU11.Value))--Заземление 15 провода + Train.Panel.SD = (S["D1"]+BO*Train.KU11.Value)*(T[15]*(1-Train.KU11.Value)+BD) + + Train.VDZ:TriggerInput("Set",T[16]*BD) + Train.VDOL:TriggerInput("Set",T[31]+T[12]) + Train.VDOP:TriggerInput("Set",T[32]+T[12]) + Panel.PCBKPower = T[10] +end +function TRAIN_SYSTEM:SolveRKInternalCircuits(Train,dT,firstIter) + local RheostatController = Train.RheostatController + local P = Train.PositionSwitch.SelectedPosition + local RK = Train.RheostatController.SelectedPosition + local B = (Train.Battery.Voltage > 55) and 1 or 0 + local T = Train.SolverTemporaryVariables + + local BO = min(1,B * Train.VB.Value+T[10])--B * Train.VB.Value + --local KV = Train.KV + --local Panel = Train.Panel + + local RCU = Train.KV.RCU + S["ZR"] = (1-Train.RRU.Value)+(B*Train.RRU.Value)*-1 + + S["10A"] = BO*RCU + S["10I"] = S["10A"]*RheostatController.RKM2 + Train["RUTpod"] = S["10I"]*Train.LK4.Value + Train["RRTpod"] = S["10I"]*(1-Train.LK1.Value) + Train["RRTuderzh"] = T[25] + Train.RRT:TriggerInput("Close",Train.RRTuderzh*Train.RRTpod) + Train.RRT:TriggerInput("Open",(1-Train.RRTuderzh)) + + local SDRKr = 1-Train.LK2.Value*(0.2+0.3*C(2 <=RK and RK <= 7 and P==1)) + RheostatController:TriggerInput("MotorCoilState",min(1,S["10A"]*(S["10B"]*Train.RR.Value - S["10B"]*(1-Train.RR.Value)))*SDRKr) + + S["10N"] = S["10A"]*(RheostatController.RKM1+Train.SR1.Value*(1-Train.RUT.Value)) + S["10T"] = ((1-Train.SR1.Value)+Train.RUT.Value)*(RheostatController.RKP) + RheostatController:TriggerInput("MotorState",(S["10N"]+S["10T"]*(-10))) + + S["2A"] = T[2]*RCU + S["2G"] = S["2A"]*((1-Train.TR1.Value)+(1-Train.KSB1.Value)+Train.ThyristorBU5_6.Value)*( + C(1<=RK and RK<=17 and (P==1 or P==3) + or (6<=RK and RK<=18 + or 2<=RK and RK<=5 and Train.KSH1.Value>0 + ) and (P==2 or P==4) + ) + ) + S["2E"] = S["2G"]*Train.LK4.Value+S["10AV"] + Train.RV1:TriggerInput("Set",S["2E"]*S["ZR"]) + Train.SR1:TriggerInput("Set",S["2E"]*(1-Train.RRT.Value)*S["ZR"]) + Train.Rper:TriggerInput("Set",T[3]*RCU*C(17<=RK and RK<=18)*S["ZR"]) + + --[[ S["1A"] = T[1]*RCU + S["1R"] = S["1A"]*((1-Train.RV1.Value)*C(P==1)+C(1<=RK and RK<=5 and P==2)) + Train.KSH2:TriggerInput("Set",S["1R"]*S["ZR"]) --Идет Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð°Ñ Ñ†ÐµÐ¿ÑŒ от ЛК к 1 проводу, но мне лень + Train.KSH1:TriggerInput("Set",S["1R"]*S["ZR"]) --Идет Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð°Ñ Ñ†ÐµÐ¿ÑŒ от ЛК к 1 проводу, но мне лень + Train.NR:TriggerInput("Set",1) + S["1P"] = S["1A"]*C(P == 1 or P == 2)*Train.NR.Value+S["6A"]*C(P==3 or P==4) + Train["RUTavt"] = S["1P"]*(Train.KSB1.Value+Train.KSH2.Value)*S["ZR"] --Идет Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð°Ñ Ñ†ÐµÐ¿ÑŒ от ЛК к 1 проводу, но мне лень + S["1G"] = S["1P"]*Train.AVT.Value*(1-Train.RPvozvrat.Value) + S["1Zh"] = S["1G"]*(Train.LK3.Value+C(RK==1)+(Train.KSH2.Value+Train.KSB1.Value*Train.KSB2.Value+C(P==1 or P==3))*Train.LK5.Value) + Train.LK1:TriggerInput("Set",S["1Zh"]*C(P==1 or P==2)*S["ZR"]) + Train.LK3:TriggerInput("Set",S["1Zh"]*S["ZR"]) + Train.RR:TriggerInput("Set",S["1Zh"]*C(P==1 or P==3)*S["ZR"])--]] + return S +end + +local wires = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,27,28,29,30,31,32,34,-34} + +function TRAIN_SYSTEM:SolveInternalCircuits(Train,dT,firstIter) + local T = Train.SolverTemporaryVariables + if not T then + T = {} + for i,v in ipairs(wires) do T[v] = 0 end + Train.SolverTemporaryVariables = T + end + if firstIter then + for i,v in ipairs(wires) do T[v] = min(Train:ReadTrainWire(v),1) end + self:SolveAllInternalCircuits(Train,dT) + else + self:SolveRKInternalCircuits(Train,dT) + end +end + + + +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:SolvePowerCircuits(Train,dT) + self.ExtraResistanceLK5 = Train.KF_47A["L2-L4" ]*(1-Train.LK5.Value) + self.ExtraResistanceLK2 = Train.KF_47A["L12-L13"]*(1-Train.LK2.Value) + if Train.PositionSwitch.SelectedPosition == 1 then -- PP + self.R1 = Train.ResistorBlocks.R1C1(Train) + self.R2 = Train.ResistorBlocks.R2C1(Train) + self.R3 = 0.0 + elseif Train.PositionSwitch.SelectedPosition == 2 then -- PP + self.R1 = Train.ResistorBlocks.R1C2(Train) + self.R2 = Train.ResistorBlocks.R2C2(Train) + self.R3 = 0.0 + elseif Train.PositionSwitch.SelectedPosition >= 3 then -- PT + self.R1 = Train.ResistorBlocks.R1C1(Train) + self.R2 = Train.ResistorBlocks.R2C1(Train) + self.R3 = Train.ResistorBlocks.R3(Train) + else + self.R1 = 1e9 + self.R2 = 1e9 + self.R3 = 1e9 + end + -- Apply LK3, LK4 contactors + self.R1 = self.R1 + 1e9*(1 - Train.LK3.Value) + self.R2 = self.R2 + 1e9*(1 - Train.LK4.Value) + + -- Shunt resistance + self.Rs1 = Train.ResistorBlocks.S1(Train) + 1e9*(1 - Train.KSH1.Value) + self.Rs2 = Train.ResistorBlocks.S2(Train) + 1e9*(1 - Train.KSH2.Value) + + -- Thyristor contrller + if self.ThyristorController then + self.Rs1 = ((self.ThyristorResistance^(-1)) + (self.Rs1^(-1)))^(-1) + self.Rs2 = ((self.ThyristorResistance^(-1)) + (self.Rs2^(-1)))^(-1) + end + + -- Calculate total resistance of engines winding + local RwAnchor = Train.Engines.Rwa*2 -- Double because each set includes two engines + local RwStator = Train.Engines.Rws*2 + -- Total resistance of the stator + shunt + self.Rstator13 = (RwStator^(-1) + self.Rs1^(-1))^(-1) + self.Rstator24 = (RwStator^(-1) + self.Rs2^(-1))^(-1) + -- Total resistance of entire motor + self.Ranchor13 = RwAnchor + self.Ranchor24 = RwAnchor + + if Train.PositionSwitch.SelectedPosition == 1 then -- PS + self:SolvePS(Train) + elseif Train.PositionSwitch.SelectedPosition == 2 then -- PS + self:SolvePP(Train,Train.RheostatController.SelectedPosition >= 17) + else + self:SolvePT(Train) + end + + -- Calculate current through rheostats 1, 2 + self.IR1 = self.I13 + self.IR2 = self.I24 + + -- Calculate induction properties of the motor + self.I13SH = self.I13SH or self.I13 + self.I24SH = self.I24SH or self.I24 + + -- Time constant + local T13const1 = math.max(16.00,math.min(28.0,(self.R13^2) * 2.0)) -- R * L + local T24const1 = math.max(16.00,math.min(28.0,(self.R24^2) * 2.0)) -- R * L + + -- Total change + local dI13dT = T13const1 * (self.I13 - self.I13SH) * dT + local dI24dT = T24const1 * (self.I24 - self.I24SH) * dT + + -- Limit change and apply it + if dI13dT > 0 then dI13dT = math.min(self.I13 - self.I13SH,dI13dT) end + if dI13dT < 0 then dI13dT = math.max(self.I13 - self.I13SH,dI13dT) end + if dI24dT > 0 then dI24dT = math.min(self.I24 - self.I24SH,dI24dT) end + if dI24dT < 0 then dI24dT = math.max(self.I24 - self.I24SH,dI24dT) end + self.I13SH = self.I13SH + dI13dT + self.I24SH = self.I24SH + dI24dT + self.I13 = self.I13SH + self.I24 = self.I24SH + + -- Re-calculate total current and simulate infinite resistance in circuit + if Train.PositionSwitch.SelectedPosition == 1 then -- PS + self.I13 = self.I13 * (Train.LK3.Value * Train.LK4.Value * Train.LK1.Value) + self.I24 = self.I24 * (Train.LK3.Value * Train.LK4.Value * Train.LK1.Value) + + self.I24 = (self.I24 + self.I13)*0.5 + self.I13 = self.I24 + self.Itotal = self.I24 + elseif Train.PositionSwitch.SelectedPosition == 2 then -- PS + self.I13 = self.I13 * Train.LK3.Value * Train.LK4.Value * Train.LK1.Value + self.I24 = self.I24 * Train.LK3.Value * Train.LK4.Value * Train.LK1.Value + + self.Itotal = self.I13 + self.I24 + else -- PT + self.I13 = self.I13 * Train.LK3.Value*Train.LK4.Value + self.I24 = self.I24 * Train.LK4.Value*Train.LK3.Value + + self.Itotal = self.I13 + self.I24 + end + + -- Calculate extra information + self.Uanchor13 = self.I13 * self.Ranchor13 + self.Uanchor24 = self.I24 * self.Ranchor24 + self.Ianchor13 = self.I13 + self.Ianchor24 = self.I24 + + + + ---------------------------------------------------------------------------- + -- Calculate current through stator and shunt + self.Ustator13 = self.I13 * self.Rstator13 + self.Ustator24 = self.I24 * self.Rstator24 + + self.Ishunt13 = self.Ustator13 / self.Rs1 + self.Istator13 = self.Ustator13 / RwStator + self.Ishunt24 = self.Ustator24 / self.Rs2 + self.Istator24 = self.Ustator24 / RwStator + + if Train.PositionSwitch.SelectedPosition >= 3 then + local I1,I2 = self.Ishunt13,self.Ishunt24 + self.Ishunt13 = -I2 + self.Ishunt24 = -I1 + + I1,I2 = self.Istator13,self.Istator24 + self.Istator13 = -I2 + self.Istator24 = -I1 + end + + -- Calculate current through RT2 relay + if Train.PositionSwitch.SelectedPosition >= 3 then + self.IRT2 = math.abs(self.Itotal) + else + self.IRT2 = 0 + end + + -- Sane checks + if self.R1 > 1e5 then self.IR1 = 0 end + if self.R2 > 1e5 then self.IR2 = 0 end + + -- Calculate power and heating + local K = 12.0*1e-5 + local H = (10.00+(15.00*Train.Engines.Speed/80.0))*1e-3 + self.P1 = (self.IR1^2)*self.R1 + self.P2 = (self.IR2^2)*self.R2 + self.T1 = (self.T1 + self.P1*K*dT - (self.T1-25)*H*dT) + self.T2 = (self.T2 + self.P2*K*dT - (self.T2-25)*H*dT) + self.Overheat1 = math.min(1-1e-12, + self.Overheat1 + math.max(0,(math.max(0,self.T1-750.0)/400.0)^2)*dT ) + self.Overheat2 = math.min(1-1e-12, + self.Overheat2 + math.max(0,(math.max(0,self.T2-750.0)/400.0)^2)*dT ) + + -- Energy consumption + self.ElectricEnergyUsed = self.ElectricEnergyUsed + math.max(0,self.EnergyChange)*dT + self.ElectricEnergyDissipated = self.ElectricEnergyDissipated + math.max(0,-self.EnergyChange)*dT +end +function TRAIN_SYSTEM:SolveThyristorController(Train, dT,iter) + -- General state + local Active = self.ThyristorControllerPower > 0 and self.ThyristorControllerWork > 0 and Train.KSB1.Value>0 + local I = (math.abs(self.I13) + math.abs(self.I24)) / 2 + + -- Controllers resistance + local Resistance = 0.036 + -- Update RV controller signal + -- Update thyristor controller signal + local done = true + if not Active then + self.ThyristorTimeout = CurTime() + self.PrepareElectric = CurTime() + self.ThyristorState = 0.00 + --[[elseif not Active then + if Train.LK2.Value == 0.0 then + self.ThyristorTimeout = CurTime() + self.PrepareElectric = CurTime() + self.ThyristorState = 0.00 + end--]] + else + local T = 150.0 + (110.0 - max(0,min(1,(Train.Engines.Speed-60)/15))*40) * Train.RU.Value + -- Generate control signal + local rnd = 1--T / 20 --+math.random()*(10) + local dC = math.min(math.max((T - I), -150), 150) + + if self.PrepareElectric then + self.ThyristorState = 0.92 + if I > 130 then--I > T * 0.9 then + self.PrepareElectric = false + self.ThyristorState = (1 - math.max(0, math.min(1, ((Train.Engines.Speed - 50) / 32)) ^ 0.5)) * 0.9 + end + else + self.ThyristorState = math.max(0, math.min(1, self.ThyristorState + dC / rnd * dT)) + end + -- Generate resistance + local keypoints = {0.10, 0.008, 0.20, 0.018, 0.30, 0.030, 0.40, 0.047, 0.50, 0.070, 0.60, 0.105, 0.70, 0.165, 0.80, 0.280, 0.90, 0.650, 1.00, 15.00} + local TargetField = 0.20 + 0.80 * self.ThyristorState + local Found = false + + for i = 1, #keypoints / 2 do + local X1, Y1 = keypoints[(i - 1) * 2 + 1], keypoints[(i - 1) * 2 + 2] + local X2, Y2 = keypoints[(i) * 2 + 1], keypoints[(i) * 2 + 2] + + if (not Found) and (not X2) then + Resistance = Y1 + Found = true + elseif (TargetField >= X1) and (TargetField < X2) then + local T = (TargetField - X1) / (X2 - X1) + Resistance = Y1 + (Y2 - Y1) * T + Found = true + end + end + done = --[[ Train.ThyristorBU5_6.Value > 0 or --]] self.PrepareElectric and (CurTime() - self.PrepareElectric) > 0.8 or not self.PrepareElectric and self.ThyristorState >= 1 + end + + -- Allow or deny using manual brakes + --Train.ThyristorBU5_6:TriggerInput("Set",not self.PrepareElectric and self.ThyristorState > 0.90) + Train.ThyristorBU5_6:TriggerInput("Set", Active and done) + -- Set resistance + self.ThyristorResistance = Resistance + 1e9 * (Active and 0 or 1) +end + +function TRAIN_SYSTEM:Think(dT,iter) + local Train = self.Train + if not self.ResistorBlocksInit then + self.ResistorBlocksInit = true + self.Train:LoadSystem("ResistorBlocks","Gen_Res_710") + end + if iter == 1 then Train.ResistorBlocks.InitializeResistances_81_710(Train) end + ---------------------------------------------------------------------------- + -- Voltages from the third rail + ---------------------------------------------------------------------------- + self.Main750V = Train.TR.Main750V + self.Aux750V = Train.TR.Main750V*Train.AV.Value + self.Power750V = self.Main750V * Train.GV.Value + + + ---------------------------------------------------------------------------- + -- Solve circuits + ---------------------------------------------------------------------------- + self:SolvePowerCircuits(Train,dT) + self:SolveInternalCircuits(Train,dT,iter==1) + self:SolveThyristorController(Train,dT,iter==1) +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_81_710_panel.lua b/lua/metrostroi/systems/sys_81_710_panel.lua new file mode 100644 index 0000000..eebe7cc --- /dev/null +++ b/lua/metrostroi/systems/sys_81_710_panel.lua @@ -0,0 +1,114 @@ +-------------------------------------------------------------------------------- +-- 81-710 controller panel +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_710_Panel") + +function TRAIN_SYSTEM:Initialize() + -- Выключатель батареи (ВБ) + self.Train:LoadSystem("VB","Relay","VB-11", {bass = true}) + + -- Buttons on the panel + self.Train:LoadSystem("DoorSelect","Relay","Switch", {bass = true, normally_closed = false }) + self.Train:LoadSystem("V4","Relay","Switch", {bass = true}) --LOn + self.Train:LoadSystem("V5","Relay","Switch", {bass = true}) --LOff + self.Train:LoadSystem("KU9","Relay","Switch", {bass = true}) --VRP + self.Train:LoadSystem("KU15","Relay","Switch", {bass = true}) --RezMK + self.Train:LoadSystem("V1","Relay","Switch", {bass = true}) --VMK + self.Train:LoadSystem("VU14","Relay","Switch", {bass = true}) --VUS + self.Train:LoadSystem("V2","Relay","Switch", {bass = true }) --VDL1 + self.Train:LoadSystem("V3","Relay","Switch", { normally_closed = true, bass = true }) --VDL2 + self.Train:LoadSystem("V6","Relay","Switch", {bass = true}) --VDL + self.Train:LoadSystem("KU12","Relay","Switch", {bass = true}) --KDL + self.Train:LoadSystem("KU7","Relay","Switch", {bass = true}) --KDP + self.Train:LoadSystem("V10","Relay","Switch", {bass = true}) --KRZD + self.Train:LoadSystem("KU8","Relay","Switch", {bass = true}) --KSN + self.Train:LoadSystem("OtklAVU","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KU10","Relay","Switch", {bass = true}) --KRP + self.Train:LoadSystem("KU11","Relay","Switch", {bass = true}) --KSD + self.Train:LoadSystem("KRR","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("R_UNch","Relay","Switch", {bass = true,}) + self.Train:LoadSystem("R_ZS","Relay","Switch", {bass = true, normally_closed = false}) + self.Train:LoadSystem("R_G","Relay","Switch", {bass = true,}) + self.Train:LoadSystem("R_Radio","Relay","Switch", {bass = true, normally_closed = false}) + self.Train:LoadSystem("R_Program1","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_Program2","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_Program1H","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_Program2H","Relay","Switch", {bass = true}) + self.Train:LoadSystem("Ring","Relay","Switch", {bass = true}) + + -- ÐРС + self.Train:LoadSystem("PB","Relay","Switch", {bass = true}) + self.Train:LoadSystem("RUM","Relay","Switch",{bass = true, normally_closed = true }) + self.Train:LoadSystem("VAH","Relay","Switch", {bass = true,}) + self.Train:LoadSystem("VAD","Relay","Switch", {bass = true}) + self.Train:LoadSystem("ARS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("ALS","Relay","Switch", {bass = true }) + self.Train:LoadSystem("KVT","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KB","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KAH","Relay","Switch", {bass = true}) + + --СÐММ + self.Train:LoadSystem("SAMMSchemeOff","Relay","Switch", {bass = true}) + self.Train:LoadSystem("SAMMStart","Relay","Switch", {bass = true}) + self.Train:LoadSystem("SAMMReset","Relay","Switch", {bass = true}) + self.Train:LoadSystem("SAMMOn","Relay","Switch", {bass = true}) + self.Train:LoadSystem("SAMMX2","Relay","Switch", {bass = true}) + self.Train:LoadSystem("SAMMAhead","Relay","Switch", {bass = true}) + self.Train:LoadSystem("SAMMAccept","Relay","Switch", {bass = true}) + self.Train:LoadSystem("SAMMUnit","Relay","Switch", {bass = true}) + + + -- ÐвтоматичеÑкие выключатели (ÐÐ’) + self.Train:LoadSystem("VU1","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VU2","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VU3","Relay","Switch", {bass = true}) + self.Train:LoadSystem("AV","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VU","Relay","Switch", {bass = true, normally_closed = true}) + self.Train:LoadSystem("PLights","Relay","Switch",{bass = true}) + self.Train:LoadSystem("GLights","Relay","Switch",{bass = true}) + + self.Train:LoadSystem("RST","Relay","Switch", {bass = true, normally_closed = true}) + + self.V1 = 0 + self.GRP = 0 + self.RRP = 0 + self.TW18 = 0 + self.SD = 0 + self.Sequence = 0 + self.Headlights1 = 0 + self.Headlights2 = 0 + self.RedLights = 0 + self.EmergencyLights2 = 0 + self.EmergencyLights1 = 0 + self.MainLights1 = 0 + self.MainLights2 = 0 + self.PanelLights = 0 + self.GaugeLights = 0 + self.Ring = 0 + self.KT = 0 + self.AVU = 0 + + self.VPR = 0 + + self.AR04 = 0 + self.AR0 = 0 + self.AR40 = 0 + self.AR60 = 0 + self.AR70 = 0 + self.AR80 = 0 + self.KT = 0 + self.KVD = 0 + + self.AnnouncerPlaying = 0 + + self.CBKIPower = 0 + self.PCBKPower = 0 +end + +function TRAIN_SYSTEM:Outputs() + return { "V1","GRP","RRP","TW18","SD","Sequence","Headlights1","Headlights2","RedLights","EmergencyLights2","EmergencyLights1","MainLights1","MainLights2","Ring","KT","AnnouncerPlaying","AVU","PanelLights","GaugeLights","VPR","AR04","AR0","AR40","AR60","AR70","AR80","KT","KVD","CBKIPower","PCBKPower"} +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_81_714_electric.lua b/lua/metrostroi/systems/sys_81_714_electric.lua new file mode 100644 index 0000000..6723fc7 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_714_electric.lua @@ -0,0 +1,403 @@ +-------------------------------------------------------------------------------- +-- 81-714 Moscow and SPB electric schemes +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_714_Electric") +TRAIN_SYSTEM.MVM = 1 +TRAIN_SYSTEM.LVZ_1 = 2 +TRAIN_SYSTEM.LVZ_2 = 3 +TRAIN_SYSTEM.LVZ_3 = 4 +TRAIN_SYSTEM.DOT_2 = 5 +function TRAIN_SYSTEM:Initialize(typ1,typ2) + self.TrainSolver = "81_717" + self.ThyristorController = true + self.Type = self.Type or self.MVM + + -- Load all functions from base + Metrostroi.BaseSystems["Electric"].Initialize(self) + for k,v in pairs(Metrostroi.BaseSystems["Electric"]) do + if not self[k] and type(v) == "function" then + self[k] = v + end + end + + self.SolvePowerCircuits = Metrostroi.BaseSystems["81_717_Electric"].SolvePowerCircuits + self.SolveThyristorController = Metrostroi.BaseSystems["81_717_Electric"].SolveThyristorController + self.Think = Metrostroi.BaseSystems["81_717_Electric"].Think +end + +if CLIENT then return end +function TRAIN_SYSTEM:Inputs(...) + return { "Type", "NoRT2", "HaveRO", "GreenRPRKR","X2PS", "HaveVentilation" } +end +function TRAIN_SYSTEM:Outputs(...) + return Metrostroi.BaseSystems["81_717_Electric"].Outputs(self,...) +end +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Type" then + self.Type = value + end + if name == "NoRT2" then self.NoRT2 = value > 0 end + if name == "HaveRO" then self.HaveRO = value > 0 end + if name == "GreenRPRKR" then self.GreenRPRKR = value > 0 end + if name == "X2PS" then self.X2PS = value > 0 end + if name == "HaveVentilation" then self.Vent = value > 0 end +end + +-- Node values +local S = {} +-- Converts boolean expression to a number +local function C(x) return x and 1 or 0 end + +local min = math.min +local max = math.max + +function TRAIN_SYSTEM:SolveAllInternalCircuits(Train,dT,firstIter) + local P = Train.PositionSwitch + local RheostatController = Train.RheostatController + local RK = RheostatController.SelectedPosition + local B = (Train.Battery.Voltage > 55) and 1 or 0 + local BO = B*Train.VB.Value + local T = Train.SolverTemporaryVariables + + local isMVM = self.Type == 1 + local isDot2 = self.Type == 5 + + local Panel = Train.Panel + Panel.V1 = BO + + --ÐŸÐ¾ÐµÐ·Ð´Ð½Ð°Ñ Ñ‡Ð°Ñть + S["33D"] = T[10]*Train.A54.Value*Train.A84.Value + Train:WriteTrainWire(1, S["33D"]*C(Train.RV.Value~=1)) + Train:WriteTrainWire(20,S["33D"]*C(Train.RV.Value~=1)) + Train:WriteTrainWire(4, S["33D"]*C(Train.RV.Value==2)*Train.Start.Value) + Train:WriteTrainWire(5, S["33D"]*C(Train.RV.Value==0)*Train.Start.Value) + Train:WriteTrainWire(17,S["33D"]*Train.VozvratRP.Value) + if isMVM then + Train:WriteTrainWire(71,S["33D"]*Train.OtklBV.Value) + end + --Ð’Ð°Ð³Ð¾Ð½Ð½Ð°Ñ Ñ‡Ð°Ñть + S["10A"] = BO*Train.A30.Value + S["ZR"] = (1-Train.RRP.Value)+(B*Train.A39.Value*(1-Train.RPvozvrat.Value)*Train.RRP.Value)*-1 + + S["1A"] = T[1]*Train.A1.Value*Train.IGLA_PCBK.KVC + S["6A"] = T[6]*Train.A6.Value + Train.TR1:TriggerInput("Set",S["6A"]) + --1A-PMU-1T-NR/RPU-1P(6^) + + S["1P"] = S["1A"]*P.PM*(Train.NR.Value+Train.RPU.Value)+S["6A"]*P.PT + + --1P-RK1-18-AVT-!RP-RKR-DR1-DR2-1G + S["1G"] = S["1P"]*C(1 <= RK and RK <= 18)*Train.AVT.Value*(1-Train.RPvozvrat.Value)*Train.RKR.Value--FIXME + S["1L"] = S["1G"]*C(RK==1)*(Train.KSB1.Value+Train.KSH1.Value)*Train.LK2.Value + S["1Zh"] = (S["1L"]+S["1G"]*Train.LK3.Value)*S["ZR"] + Train.LK1:TriggerInput("Set",S["1Zh"]*P.PM) + Train.LK3:TriggerInput("Set",S["1Zh"]) + Train.LK4:TriggerInput("Set",S["1Zh"]*Train.LK3.Value) + S["3A"] = T[3]*Train.A3.Value + S["6G1"] = S["6A"]*P.PT*C(RK==1) + self.ThyristorControllerWork = S["6G1"]*(Train.KSB1.Value+Train.KSB2.Value)*Train.LK2.Value + S["6G2"] = S["6G1"]*(1-Train.RSU.Value) + Train.KSB1:TriggerInput("Set",S["6G2"]) + Train.KSB2:TriggerInput("Set",S["6G2"]) + --20-A20-20A-Rp-20B + S["20A"] = T[20]*Train.A20.Value*Train.IGLA_PCBK.KVC + --Train.RPL:TriggerInput("Set",--[[ S["20A"]--]] BO*(1-Train.RPvozvrat.Value)*(Train.DR1.Value+Train.DR2.Value+(1-Train.BV.State))) + if not isDot2 then + Train.RPL:TriggerInput("Set",S["20A"]*(1-Train.RPvozvrat.Value)*(Train.DR1.Value+Train.DR2.Value+(1-Train.BV.State))) + end + S["20B"] = S["20A"]*(1-Train.RPvozvrat.Value) + S["20K"] = S["20B"]*P.PS + Train.LK2:TriggerInput("Set",S["20K"]*S["ZR"]) + Train.LK5:TriggerInput("Set",S["20B"]*Train.LK1.Value*S["ZR"]) + + if self.X2PS then + S["1M"] = C(1<=RK and RK<=5)*S["3A"]+S["20A"]*Train.KSH2.Value + S["1R"] = (S["1A"]*C(RK==1)+S["1M"]*P.PP)*S["ZR"] + Train.KSH1:TriggerInput("Set",S["1R"]) + Train.KSH2:TriggerInput("Set",S["1R"]) + P:TriggerInput("PP",S["3A"]*Train.LK5.Value*C(RK==18)*S["ZR"])--1A-1D + else + S["1M"] = C(1<=RK and RK<=5)*S["3A"]+T[10]*Train.KSH2.Value + S["1R"] = (S["1A"]*C(RK==1)*P.PS + S["1M"]*P.PP)*S["ZR"] + Train.KSH1:TriggerInput("Set",S["1R"]) + Train.KSH2:TriggerInput("Set",S["1R"]) + P:TriggerInput("PP",S["1A"]*C(RK==18)*S["ZR"])--1A-1D + end + + + local Reverser = Train.Reverser + S["4A"] = T[4]*Train.A4.Value + Reverser:TriggerInput("NZ",S["4A"]*Reverser.VP*(1-Train.LK1.Value)*S["ZR"]) + S["5A"] = T[5]*Train.A5.Value + Reverser:TriggerInput("VP",S["5A"]*Reverser.NZ*(1-Train.LK1.Value)*S["ZR"]) + --Train.RKR:TriggerInput("Set",(S["4A"]*Reverser.NZ+S["5A"]*Reverser.VP)) --81-717.5(м) МСК + if isDot2 then + Train.RKR:TriggerInput("Set",(S["4A"]*Reverser.NZ+S["5A"]*Reverser.VP)*S["ZR"]) --81-717.5 Харько*S["ZR"]в + else + Train.RKR:TriggerInput("Set",(S["4A"]*Reverser.NZ+S["5A"]*Reverser.VP)*Train.BV.State*S["ZR"]) --81-717.5 Харько*S["ZR"]в + end + --+B + S["1N"] = C(11<=RK and RK<=18)*(1-Train.LK4.Value) + Train.RR:TriggerInput("Set",S["10A"]*S["1N"] + P.PS*Train.LK4.Value) + + S["5Zh"] = S["10A"]*(1-Train.LK3.Value) + P:TriggerInput("PS",S["5Zh"]*(P.PP)) + P:TriggerInput("PM",S["5Zh"]*(1-Train.TR1.Value)*Train.KSH2.Value) + P:TriggerInput("PT",S["5Zh"]*(P.PM)*(1-Train.KSH2.Value)) + --P:TriggerInput("PP",S["5Zh"]*(P.PM)) + S["2A"] = (T[2]+T[-2])*Train.A2.Value + S["2T"] = S["2A"]*Train.TR1.Value + Train.RSU:TriggerInput("Set",S["2T"]*Train.ThyristorBU5_6.Value) + Train.RU:TriggerInput("Set",S["2T"]) + S["2B"] = S["2A"]*((1-Train.KSB1.Value)*(1-Train.KSB2.Value)+(1-Train.TR1.Value)) + + S["2Ca"] = P.PS*C(1<=RK and RK<=17)*Train.RR.Value --CHECK + S["2Cb"] = P.PP*(C(6<=RK and RK<=18)+C(2<=RK and RK<=5)*Train.KSH1.Value)*(1-Train.RR.Value) --CHECK + S["2C"] = S["2B"]*(S["2Ca"]+S["2Cb"])*Train.LK4.Value + S["10R"] = S["10A"]*(1-Train.LK3.Value)*C(2<=RK and RK<=18)*(1-Train.LK4.Value) + S["2U"] = S["10R"]+S["2C"]*S["ZR"] + Train.SR1:TriggerInput("Set",S["2U"]) + Train.RV1:TriggerInput("Set",S["2U"]) + S["2Zh"] = T[2]*Train.A2.Value*Train.TR1.Value*C(17<=RK and RK<=18) + if self.NoRT2 then + Train.PneumaticNo1:TriggerInput("Set",S["2Zh"]+T[48]*Train.A72.Value) + Train:WriteTrainWire(-2,Train.A2.Value*Train.TR1.Value*C(17<=RK and RK<=18)*T[48]*Train.A72.Value) + else + Train.PneumaticNo1:TriggerInput("Set",S["2Zh"]+T[48]*Train.A72.Value*(1-Train.RT2.Value)) + Train:WriteTrainWire(-2,Train.A2.Value*Train.TR1.Value*C(17<=RK and RK<=18)*T[48]*Train.A72.Value*(1-Train.RT2.Value)) + end + if isMVM then --UNREALISTIC + S["8A"] = T[8]*Train.A8.Value*(1-Train.RV1.Value)*(1-Train.RT2r.Value)*(1-Train.RV3.Value) + else + S["8A"] = T[8]*Train.A8.Value*(1-Train.RV1.Value)*(1-Train.RT2.Value)*(1-Train.RV3.Value) + end + Train.PneumaticNo2:TriggerInput("Set",S["8A"]+T[39]*Train.A52.Value) + Train.RV3:TriggerInput("Set",T[19]*Train.A19.Value) + S["25A"] = T[25]*Train.A25.Value + S["10X"] = (--[[ S["1N"]*P.PS+--]] Train.LK4.Value+C(RK==1)*Train.LK2.Value) + Train["RRTpod"] = S["10A"]*RheostatController.RKM2*S["10X"] + Train["RRTuderzh"] = S["25A"] + Train["RUTpod"] = S["10A"]*RheostatController.RKM1*S["10X"] + Train["RUTavt"] = Train.A70.Value*B + Train.RRT:TriggerInput("Close",Train.RRTuderzh*Train.RRTpod) + Train.RRT:TriggerInput("Open",(1-Train.RRTuderzh)) + + Train.RRP:TriggerInput("Set",T[14]*Train.A14.Value)--14A + --СДРК Б+ провод + S["10A3"] = BO*Train.A28.Value + S["10BG"] = S["10A3"]*(Train.TR1.Value + Train.RV1.Value) + RheostatController:TriggerInput("MotorCoilState",min(1,S["10A"]*(S["10BG"]*Train.RR.Value - S["10BG"]*(1-Train.RR.Value)))) + Train.RVO:TriggerInput("Set",S["10A3"]*Train.NR.Value) + self.ThyristorControllerPower = S["10A3"] + --[[ S["10Ra"] = T[10]*RheostatController.RKM1 + S["10Rb"] = T[10]*Train.SR1.Value + S["10RbA"] = S["10Rb"]*(1-Train.RRT.Value)*(1-Train.RUT.Value)+S["10Ra"] + S["10RbB"] = S["10Rb"]*Train.RUT.Value + S["10RB"] = S["10RbA"]+S["10RbB"]*Train.RRT.Value+S["10RbB"]*(1-Train.SR1.Value) + + S["10Rc"] = T[10]*Train.LK3.Value*C(RK>=18 or RK<=1) + S["10RS"] = S["10Ra"]+S["10RB"]*(1-RheostatController.RKP)*S["10Rc"]--]] + S["10Yu"] = S["10A"]*Train.SR1.Value + S["10M"] = S["10Yu"]*(1-Train.RRT.Value)*(1-Train.RUT.Value) + S["10N"] = S["10A"]*RheostatController.RKM1+S["10M"] + S["10T"] = (Train.RUT.Value+Train.RRT.Value+(1-Train.SR1.Value))*(RheostatController.RKP)+S["10A"]*Train.LK3.Value*C(RK>=18 and RK<=1) + RheostatController:TriggerInput("MotorState",S["10N"]+S["10T"]*(-10)) + + Train.RZ_2:TriggerInput("Set",T[24]*(1-Train.LK4.Value)) + S["17A"] = T[17]*Train.A18.Value + if not isDot2 then + Train.BV:TriggerInput("Power",BO*Train.A80.Value) + Train.BV:TriggerInput("Enable",S["17A"]) + end + if isMVM then + Train.BV:TriggerInput("Disable",T[71]*Train.A66.Value) + end + Train.RPvozvrat:TriggerInput("Open",S["17A"]) --FIXME Mayve more right RP code + -- + --Ð’Ñпом цепи + Train:WriteTrainWire(10,BO*Train.A56.Value) + + if self.NoRT2 then + Train:WriteTrainWire(48,Train.A72.Value*S["2Zh"]) --FIXME ARS + else + Train:WriteTrainWire(48,Train.A72.Value*S["2Zh"]*(1-Train.RT2.Value)) --FIXME ARS + end + + Train:WriteTrainWire(22,T[10]*Train.A10.Value*Train.AK.Value) + S["UO"] = T[10]*Train.A27.Value + Train:WriteTrainWire(27,S["UO"]*Train.L_1.Value) + S["36N"] = BO*Train.A45.Value + Train:WriteTrainWire(36,S["36N"]*Train.BPSNon.Value) + Train:WriteTrainWire(37,S["36N"]*Train.ConverterProtection.Value) + + if self.GreenRPRKR then + S["10AN"] = Train.RPvozvrat.Value+(1-Train.RKR.Value) --81-717 Харьков + else + S["10AN"] = Train.RPvozvrat.Value --81-717 МСК + end + S["18A"] = (S["10AN"]*100+(1-Train.LK4.Value))*Train.A38.Value + Train:WriteTrainWire(18,S["18A"]) + Panel.TW18 = S["18A"] + Panel.GreenRP = S["10AN"]*S["UO"] + + --S["36N"] = BO*Train.A45.Value + --Train:WriteTrainWire(37,Train.ConverterProtection.Value) + --Train:WriteTrainWire(36,S["36N"]*(1-Train.BPSNon.Value)) + --Train:WriteTrainWire(69,T[36]*Train.BPSNon.Value) + + S["B9"] = B*Train.A53.Value + S["B9a"] = S["B9"]*Train.VB.Value + Train.KVC:TriggerInput("Set",S["B9a"]) + --Train.KUP:TriggerInput("Set",S["B9a"]*Train.A75.Value) + S["D4"] = BO*Train.A13.Value + Panel.RZP = T[36]*T[61] + --[[S["14b"] = S["14a"]*Train.A17.Value + S["D1"] = ["10"]*Train.A21.Value*KV["D-D1"]+S["14b"]*KRU["11/3-D1/1"] + if isLVZ then + Train:WriteTrainWire(16,S["D1"]*(Train.VUD1.Value*Train.VUD2.Value+AVO["16"]*RC2)) + else + Train:WriteTrainWire(16,S["D1"]*(Train.VUD1.Value*Train.VUD2.Value)) + end + Train:WriteTrainWire(12,S["D1"]*Train.KRZD.Value) + S[31] = S["D1"]*(1-Train.DoorSelect.Value) + S[32] = S["D1"]*Train.DoorSelect.Value + Train:WriteTrainWire(31,S[31]*(Train.KDL.Value+Train.KDLR.Value+Train.VDL.Value)) + Train:WriteTrainWire(32,S[32]*Train.KDP.Value) + + S["F7"] = T[10]*Train.A29.Value*KV["F-F7"]+S["14b"]*KRU["11/3-FR1"] + S["F1"] = S["B9"]*KV["B9-F1"]--]] + + Train:WriteTrainWire(34,Train.RKTT.Value+Train.DKPT.Value) + Train:WriteTrainWire(28,T[-28]*Train.RD.Value) + + S[64] = S["UO"]*Train.BPT.Value + Train:WriteTrainWire(64,S[64]) + Panel.BrW = S[64] + + --Ð’Ñпом цепи приём + if isDot2 then + Panel.EmergencyLights = T[11]*Train.A15.Value*(1-Train.KPP.Value) + else + Panel.EmergencyLights = BO*Train.A49.Value*Train.A15.Value + end + Train.RPU:TriggerInput("Set",T[37]*Train.A37.Value) + + S["D6"] = S["D4"]*Train.BD.Value + Train.RD:TriggerInput("Set",S["D6"]) + Panel.DoorsW = S["D4"]*(1-Train.RD.Value) + Train.VDZ:TriggerInput("Set",T[16]*Train.A16.Value*(1-Train.RD.Value)) + S["12A"] = T[12]*Train.A12.Value + S["31A"] = T[31]*Train.A31.Value + S["32A"] = T[32]*Train.A32.Value + Train.VDOL:TriggerInput("Set",S["31A"]+S["12A"]) + Train.VDOP:TriggerInput("Set",S["32A"]+S["12A"]) + Train:WriteTrainWire(31,S["12A"]*Train.A31.Value) + Train:WriteTrainWire(32,S["12A"]*Train.A32.Value) + + S["36A"] = T[36]*Train.A51.Value*Train.RVO.Value--36 + Train.KVP:TriggerInput("Set",S["36A"]*Train.KPP.Value) + Train.KPP:TriggerInput("Set",S["36A"]*(1-Train.RZP.Value)*Train.KVC.Value) + S["27A"] = T[27]*Train.A50.Value + Train.KO:TriggerInput("Set",S["27A"]) + --S["22A"] = (T[23]*Train.A23.Value+T[22]*Train.A22.Value) --FIXME 714 + + Train.RV2:TriggerInput("Set",T[23]*Train.A23.Value) + Train.KK:TriggerInput("Set",( + T[22]*Train.A22.Value*(1-Train.RV2.Value)+ + T[23]*Train.A23.Value*Train.RV2.Value + )*(1-Train.TRK.Value)) + + --if isMVM then + Panel.AnnouncerPlaying = T[13] + Panel.AnnouncerBuzz = T[-13] + --end + + --BPSN + local BPSN = Train.PowerSupply + Train.Battery:TriggerInput("Charge",BPSN.X2_2*Train.A24.Value*BO) + BPSN:TriggerInput("5x2",BO*Train.A65.Value*Train.KVP.Value) + Panel.MainLights = BPSN.X6_2*Train.KO.Value + Train.RPU:TriggerInput("Set",T[37]*Train.A37.Value) + Train.RZP:TriggerInput("Open",T[37]*Train.A37.Value*Train.RPU.Value) + Train:WriteTrainWire(61,Train.RZP.Value) + + if self.Vent then + Train.KV1:TriggerInput("Set",T[59]*Train.AV4.Value*Train.RVO.Value) + Train.KV2:TriggerInput("Set",T[60]*Train.AV5.Value) + Train.KV3:TriggerInput("Set",T[58]*Train.AV6.Value) + S["AV2"] = T[10]*Train.AV2.Value + Panel.M1_3 = S["AV2"]*Train.KV1.Value + Panel.M4_7 = S["AV2"]*Train.KV2.Value+B*Train.AV3.Value*Train.KV3.Value + Train.R1:TriggerInput("Set",S["AV2"]*C(Panel.M1_3 > 0.5 and Panel.M4_7 > 0.5)) + Train:WriteTrainWire(57,T[59]*(1-Train.R1.Value)) + end + return S +end +function TRAIN_SYSTEM:SolveRKInternalCircuits(Train,dT,firstIter) + local P = Train.PositionSwitch + local RheostatController = Train.RheostatController + local RK = RheostatController.SelectedPosition + local B = (Train.Battery.Voltage > 55) and 1 or 0 + local BO = B*Train.VB.Value + local T = Train.SolverTemporaryVariables + + --Ð’Ð°Ð³Ð¾Ð½Ð½Ð°Ñ Ñ‡Ð°Ñть + S["10A"] = BO*Train.A30.Value + S["ZR"] = (1-Train.RRP.Value)+(B*Train.A39.Value*(1-Train.RPvozvrat.Value)*Train.RRP.Value)*-1 + + + S["1N"] = C(11<=RK and RK<=18)*(1-Train.LK4.Value) + Train.RR:TriggerInput("Set",S["10A"]*S["1N"] + P.PS*Train.LK4.Value) + + S["2A"] = (T[2]+T[-2])*Train.A2.Value + S["2B"] = S["2A"]*((1-Train.KSB1.Value)*(1-Train.KSB2.Value)+(1-Train.TR1.Value)) + + S["2Ca"] = P.PS*C(1<=RK and RK<=17)*Train.RR.Value --CHECK + S["2Cb"] = P.PP*(C(6<=RK and RK<=18)+C(2<=RK and RK<=5)*Train.KSH1.Value)*(1-Train.RR.Value) --CHECK + S["2C"] = S["2B"]*(S["2Ca"]+S["2Cb"])*Train.LK4.Value + S["10R"] = S["10A"]*(1-Train.LK3.Value)*C(2<=RK and RK<=18)*(1-Train.LK4.Value) + S["2U"] = (S["10R"]+S["2C"])*S["ZR"] + Train.SR1:TriggerInput("Set",S["2U"]) + Train.RV1:TriggerInput("Set",S["2U"]) + + + S["25A"] = T[25]*Train.A25.Value + S["10X"] = (Train.LK4.Value+C(RK==1)*Train.LK2.Value) + Train["RRTpod"] = S["10A"]*RheostatController.RKM2*S["10X"] + Train["RRTuderzh"] = S["25A"] + Train["RUTpod"] = S["10A"]*RheostatController.RKM1*S["10X"] + Train.RRT:TriggerInput("Close",Train.RRTuderzh*Train.RRTpod) + Train.RRT:TriggerInput("Open",(1-Train.RRTuderzh)) + + --СДРК Б+ провод + S["10A3"] = BO*Train.A28.Value + S["10BG"] = S["10A3"]*(Train.TR1.Value + Train.RV1.Value) + RheostatController:TriggerInput("MotorCoilState",min(1,S["10A"]*(S["10BG"]*Train.RR.Value - S["10BG"]*(1-Train.RR.Value)))) + + S["10Yu"] = S["10A"]*Train.SR1.Value + S["10M"] = S["10Yu"]*(1-Train.RRT.Value)*(1-Train.RUT.Value) + S["10N"] = S["10A"]*RheostatController.RKM1+S["10M"] + S["10T"] = (Train.RUT.Value+Train.RRT.Value+(1-Train.SR1.Value))*(RheostatController.RKP)+S["10A"]*Train.LK3.Value*C(RK>=18 and RK<=1) + RheostatController:TriggerInput("MotorState",S["10N"]+S["10T"]*(-10)) + + return S +end + +local wires = {10,11,1,6,3,20,4,5,-2,2,48,8,39,19,25,13,-13,14,24,17,71,36,-28,37,16,12,31,32,69,27,23,22,23,37,59,60,58,61} +function TRAIN_SYSTEM:SolveInternalCircuits(Train,dT,firstIter) + local T = Train.SolverTemporaryVariables + if not T then + T = {} + for i,v in ipairs(wires) do T[v] = 0 end + Train.SolverTemporaryVariables = T + end + if firstIter then + for i,v in ipairs(wires) do T[v] = min(Train:ReadTrainWire(v),1) end + self:SolveAllInternalCircuits(Train,dT) + else + self:SolveRKInternalCircuits(Train,dT) + end +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_81_714_panel.lua b/lua/metrostroi/systems/sys_81_714_panel.lua new file mode 100644 index 0000000..2ef0cff --- /dev/null +++ b/lua/metrostroi/systems/sys_81_714_panel.lua @@ -0,0 +1,115 @@ +-------------------------------------------------------------------------------- +-- 81-714 controller panel +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_714_Panel") + +function TRAIN_SYSTEM:Initialize() + -- Выключатель батареи (ВБ) + self.Train:LoadSystem("VB","Relay","VB-11", {bass = true}) + + -- Педаль бдительноÑти (ПБ) + self.Train:LoadSystem("PB","Relay","Switch", {bass = true}) + + -- ÐвтоматичеÑкие выключатели (ÐÐ’) + self.Train:LoadSystem("A18","Relay","VA21-29") + self.Train:LoadSystem("A49","Relay","VA21-29") + self.Train:LoadSystem("A27","Relay","VA21-29") + self.Train:LoadSystem("A10","Relay","VA21-29", { normally_closed = false }) + self.Train:LoadSystem("A53","Relay","VA21-29") + + self.Train:LoadSystem("A31","Relay","VA21-29") + self.Train:LoadSystem("A32","Relay","VA21-29") + self.Train:LoadSystem("A13","Relay","VA21-29") + self.Train:LoadSystem("A1","Relay","VA21-29") + self.Train:LoadSystem("A20","Relay","VA21-29") + self.Train:LoadSystem("A25","Relay","VA21-29") + self.Train:LoadSystem("A30","Relay","VA21-29") + self.Train:LoadSystem("A56","Relay","VA21-29") + self.Train:LoadSystem("A65","Relay","VA21-29") + + self.Train:LoadSystem("A2","Relay","VA21-29") + self.Train:LoadSystem("A3","Relay","VA21-29") + self.Train:LoadSystem("A4","Relay","VA21-29") + self.Train:LoadSystem("A5","Relay","VA21-29") + self.Train:LoadSystem("A6","Relay","VA21-29") + self.Train:LoadSystem("A70","Relay","VA21-29") + self.Train:LoadSystem("A14","Relay","VA21-29") + self.Train:LoadSystem("A39","Relay","VA21-29") + self.Train:LoadSystem("A28","Relay","VA21-29") + self.Train:LoadSystem("A38","Relay","VA21-29") + self.Train:LoadSystem("A22","Relay","VA21-29") + self.Train:LoadSystem("A8","Relay","VA21-29") + self.Train:LoadSystem("A12","Relay","VA21-29") + self.Train:LoadSystem("A16","Relay","VA21-29") + self.Train:LoadSystem("A37","Relay","VA21-29") + self.Train:LoadSystem("A51","Relay","VA21-29") + self.Train:LoadSystem("A24","Relay","VA21-29") + self.Train:LoadSystem("A19","Relay","VA21-29") + self.Train:LoadSystem("A50","Relay","VA21-29") + self.Train:LoadSystem("A52","Relay","VA21-29") + + self.Train:LoadSystem("AV2","Relay","VA21-29") + self.Train:LoadSystem("AV3","Relay","VA21-29") + self.Train:LoadSystem("AV4","Relay","VA21-29") + self.Train:LoadSystem("AV5","Relay","VA21-29") + self.Train:LoadSystem("AV6","Relay","VA21-29") + + self.Train:LoadSystem("A55","Relay","VA21-29") + self.Train:LoadSystem("A72","Relay","VA21-29") + + --Вагонные + self.Train:LoadSystem("A45","Relay","VA21-29") + self.Train:LoadSystem("A54","Relay","VA21-29", {normally_closed=false}) + self.Train:LoadSystem("A15","Relay","VA21-29") + self.Train:LoadSystem("A23","Relay","VA21-29") + + self.Train:LoadSystem("A66","Relay","VA21-29") + self.Train:LoadSystem("A80","Relay","VA21-29") + self.Train:LoadSystem("A81","Relay","VA21-29") + + self.Train:LoadSystem("KV1","Relay","Switch",{bass=true}) + self.Train:LoadSystem("KV2","Relay","Switch",{bass=true}) + self.Train:LoadSystem("KV3","Relay","Switch",{bass=true}) + self.Train:LoadSystem("R1","Relay","Switch",{bass=true,open_time=2.3}) + + --Shunt + self.Train:LoadSystem("A84","Relay","VA21-29", {normally_closed=false}) + self.Train:LoadSystem("BPSNon","Relay","Switch", { bass = true }) + self.Train:LoadSystem("L_1","Relay","Switch",{bass = true}) + self.Train:LoadSystem("VozvratRP","Relay","Switch", {bass = true}) + self.Train:LoadSystem("OtklBV","Relay","Switch", {bass = true}) + self.Train:LoadSystem("Start","Relay","Switch", {bass = true}) + self.Train:LoadSystem("RV","Relay","Switch", {bass = true,defaultvalue=1,maxvalue=2}) + + self.V1 = 0 + self.TW18 = 0 + self.GreenRP = 0 + self.BrW = 0 + self.EmergencyLights = 0 + self.DoorsW = 0 + self.MainLights = 0 + self.RZP = 0 + + self.M1_3 = 0 + self.M4_7 = 0 + self.M8 = 0 + + self.AnnouncerPlaying = 0 + self.AnnouncerBuzz = 0 + self.PCBKPower = 0 +end + +function TRAIN_SYSTEM:Outputs() + return { "V1", "EmergencyLights","MainLights","DoorsW","GreenRP","BrW","TW18","L1","M1_3","M4_7","M8","AnnouncerPlaying","AnnouncerBuzz","PCBKPower","RZP"} +end + +TRAIN_SYSTEM.AVMap = { + "A53","A56","A24","A39","A23","A14","A13","A31","A32", + "A16","A12","A49","A15","A27","A50","A8","A52","A19", + "A22","A30","A1","A2","A3","A4","A5","A6","A72","A38","A20", + "A25","A37","A55","A45","A66","A51","A65","A28","A70","AV2", + "AV3","AV4","AV5","A81","AV6","A80", +} \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_81_717_bars.lua b/lua/metrostroi/systems/sys_81_717_bars.lua new file mode 100644 index 0000000..274b9d2 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_717_bars.lua @@ -0,0 +1,256 @@ +-------------------------------------------------------------------------------- +-- 81-717 "BARS" safety system +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_717_BARS") +TRAIN_SYSTEM.DontAccelerateSimulation = false + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("ALSCoil") + self.Train:LoadSystem("EPKC","Relay") + self.Train:LoadSystem("ROT1","Relay","",{bass=true}) + self.Train:LoadSystem("ROT2","Relay","",{bass=true}) + + self.Power = 0 + self.ARSPower = 0 + self.ALSPower = 0 + self.Speed = 0 + self.SpeedLimit = 0 + self.NextLimit = 0 + + self.Enabled = false + + --Timers + self.DriveTimer = false + self.BrakeTimer = false + self.EKTimer = false + + + + self.ROCh = false + self.RSS = false + self.RSS = false + self.RO = false + self.EK = false + self.R2O = false + self.ROD = false + + self.KSR = false + self.BR1 = false + self.BR2 = false + self.RUVD = false + self.PTR = false + + self.RNT = false + + self.Rolling = false + self.Rolled = false + + self.NoFreq = 0 + self.F1 = 0 + self.F2 = 0 + self.F3 = 0 + self.F4 = 0 + self.F5 = 0 + self.F6 = 0 + + self.DA = 0 + self.KB = 0 + self.VRD = 0 + self.KRO = 0 + self.KRX = 0 + self.KRT = 0 + self.KT = 0 + --OUT + self["33G"] = 0 + self["33Zh"] = 0 + self["6"] = 0 + self["8"] = 0 + self.Ring = 0 + self.EPK = 0 + self["48"] = 0 + self.KVD = 0 + self.LKT = 0 +end + +function TRAIN_SYSTEM:Outputs() + return {"KVD","Ring","KVD","Speed","NoFreq","F1","F2","F3","F4","F5","F6"} +end + +function TRAIN_SYSTEM:Inputs() + return {} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local ALS = Train.ALSCoil + local speed = ALS.Speed + local speedS = speed*ALS.SpeedSign + self.SpeedoTimer = self.SpeedoTimer or CurTime() + if CurTime()-self.SpeedoTimer > 0.4 then + local time = (CurTime()-self.SpeedoTimer) + self.Speed = math.max(0,self.Speed+(speed-self.Speed)*(0.4+math.max(0,math.min((self.Speed-5)*0.2,0.4)))) + self.SpeedoTimer = CurTime() + end + if Train.Electric.Type > 4 then return end + local ARSPower = self.ARSPower + local ALSPower = self.ALSPower + if self.ALS ~= ALS.Enabled then + ALS:TriggerInput("Enable",self.ALS) + end + local FreqCode = bit.bor(ALS.F1*1,ALS.F2*2,ALS.F3*4,ALS.F4*8,ALS.F5*16,ALSPower*32,ARSPower*64) + if self.FreqCode ~= FreqCode then + if not self.FreqCodeTimer then self.FreqCodeTimer = CurTime() end + if self.FreqCodeTimer and CurTime()-self.FreqCodeTimer>0.8 then + self.FreqCode = FreqCode + self.FreqCodeTimer = nil + + self.F1 = ALS.F1*ALSPower + self.F2 = ALS.F2*ALSPower + self.F3 = ALS.F3*ALSPower + self.F4 = ALS.F4*ALSPower + self.F5 = ALS.F5*ALSPower + self.NoFreq = (1-math.min(1,(self.F1+self.F2+self.F3+self.F4+self.F5)))*(ALSPower+ARSPower) + end + elseif self.FreqCodeTimer then + self.FreqCodeTimer = nil + end + self.F6 = ALS.F6*ALSPower + if ARSPower>0 and not self.Enabled then + self.Enabled = speed < 0.1 + self.EK = self.Enabled + self.OnTimer = CurTime() + elseif ARSPower>0 then + + local Vzad = 20 + if self.F4 > 0 then Vzad = 40 end + if self.F3 > 0 then Vzad = 60 end + if self.F2 > 0 then Vzad = 70 end + if self.F1 > 0 then Vzad = 80 end + if Vzad ~= 20 and (self.VRD>0 or self.KB>0) then Vzad = 20 end + if self.F5 > 0 and self.F6 == 0 and self.VRD>0 and not self.AcceptF5 and speed < 0.1 then + self.AcceptF5 = true + elseif self.F5 == 0 or self.F6 > 0 or self.F5>0 and self.VRD==0 then + self.AcceptF5 = false + end + if speed>Vzad-1 then self.ROD = true elseif speed5 or not self.ROCh and self.KB>0 then self.RO = false elseif speed<3 then self.RO = true end + if speed>20 then self.R2O = false elseif speed<19 then self.R2O = true end + if Vzad<=20 or speed>Vzad then self.RSS = false elseif speed0 + KRT = self.KRT>0 + self.ROCh = self.NoFreq == 0 + + if self.RO and self.KRH>0 and self.ROCh then + if not self.DriveTimer then self.DriveTimer = CurTime() end + elseif self.DriveTimer then + self.DriveTimer = false + end + if self.ROCh and self.F5>0 and self.F6==0 and not self.AcceptF5 or self.DriveTimer and CurTime()-self.DriveTimer>7 then + self.RSS = false + self.R2O = false + end +--[[ + if speedS < -0.05 and not self.Rolling then self.Rolling = 0 end + if self.Rolling and self.Rolling < 0 then self.Rolling = false end + if self.Rolling then + local rolled = -speedS/3600*1000*dT + if math.abs(rolled) >0.001 then + self.Rolling = self.Rolling + rolled + end + end + + if not self.Rolled and self.Rolling and self.Rolling > 0.5+self.KRH*2.5 then + self.Rolled = self.KRH + end + if self.Rolled then + if self.Rolled == 0 and self.KRH > 0 then + self.Rolled = false + self.Rolling = false + end + if self.KRH == 0 then self.Rolled = 0 end + end +--]] + self.BR2 = self.KB>0 and not self.ROCh and (not self.BR1 or not self.OldF5) + self.BR1 = self.KB>0 and (self.BR1 or self.ROCh) and not self.BR2 + self.KSR = not self.OnTimer and ((self.KSR or self.RNT) and self.RSS or self.R2O and (self.BR1 and self.ROCh or self.BR2)) + self.OldF5 = self.F5>0 + + self.RNT = (self.BR1 or self.BR2) or self.RNT and (self.KSR or KRT and (not self.RUVD or self.R2O)) + self.RUVD = (self.RUVD or self.KRH==0) and self.KSR + if not self.RUVD--[[ and self.ROCh--]] then + if not self.BrakeTimer then self.BrakeTimer = CurTime() end + elseif self.BrakeTimer then + self.BrakeTimer = false + end + self.PTR = (self.BrakeTimer and (self.DA==0 --[[ or not self.ROCh--]] or CurTime()-self.BrakeTimer > 1.5)) + if not self.RNT or (not self.RUVD or self.RO and self.KRH==0) and self.KT==0 then + if not self.EKTimer then self.EKTimer = CurTime() end + elseif self.EKTimer then + self.EKTimer = false + end + if self.EKTimer and CurTime()-self.EKTimer > ((100.05 then self.OnTimer = false end + else + self.Enabled = false + + --Timers + self.DriveTimer = false + self.BrakeTimer = false + self.EKTimer = false + + self.AcceptF5 = false + + + self.ROCh = false + self.RSS = false + self.RSS = false + self.RO = false + self.EK = false + self.R2O = false + self.ROD = false + + self.KSR = false + self.BR1 = false + self.BR2 = false + self.RUVD = false + self.PTR = false + + self.RNT = false + + + self.KRO = 0 + self.KRX = 0 + self.KRT = 0 + + self["33G"] = 0 + self["33Zh"] = 0 + self.KVD = 0 + self["6"] = 0 + self["8"] = 0 + self.Ring = 0 + self.EPK = 0 + self["48"] = 0 + self.LKT = 0 + self.OnTimer = false + end +end diff --git a/lua/metrostroi/systems/sys_81_717_electric.lua b/lua/metrostroi/systems/sys_81_717_electric.lua new file mode 100644 index 0000000..9d76d4e --- /dev/null +++ b/lua/metrostroi/systems/sys_81_717_electric.lua @@ -0,0 +1,1175 @@ +-------------------------------------------------------------------------------- +-- 81-717 Moscow and SPB electric schemes +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_717_Electric") +TRAIN_SYSTEM.MVM = 1 +TRAIN_SYSTEM.LVZ_1 = 2 --BARS +TRAIN_SYSTEM.LVZ_2 = 3 --PUAV +TRAIN_SYSTEM.LVZ_3 = 4 --PAM +TRAIN_SYSTEM.LVZ_4 = 5 --PA-KSD +TRAIN_SYSTEM.DOT_2 = 6 --.2 +function TRAIN_SYSTEM:Initialize(typ1,typ2) + self.TrainSolver = "81_717" + self.ThyristorController = true + self.Type = self.Type or self.MVM + + -- Load all functions from base + Metrostroi.BaseSystems["Electric"].Initialize(self) + for k,v in pairs(Metrostroi.BaseSystems["Electric"]) do + if not self[k] and type(v) == "function" then + self[k] = v + end + end +end + +if CLIENT then return end +function TRAIN_SYSTEM:Inputs(...) + return { "Type", "NoRT2", "HaveRO", "GreenRPRKR","X2PS", "HaveVentilation","OldFLARS" } +end +function TRAIN_SYSTEM:Outputs(...) + return Metrostroi.BaseSystems["Electric"].Outputs(self,...) +end +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Type" then + self.Type = value + end + if name == "NoRT2" then self.NoRT2 = value > 0 end + if name == "HaveRO" then self.HaveRO = value > 0 end + if name == "GreenRPRKR" then self.GreenRPRKR = value > 0 end + if name == "X2PS" then self.X2PS = value > 0 end + if name == "HaveVentilation" then self.Vent = value > 0 end + if name == "OldFLARS" then self.OldFLARS = value > 0 end +end + +-- Node values +local S = {} +-- Converts boolean expression to a number +local function C(x) return x and 1 or 0 end + +local min = math.min +local max = math.max + +function TRAIN_SYSTEM:SolveAllInternalCircuits(Train,dT,firstIter) + local P = Train.PositionSwitch + local RheostatController = Train.RheostatController + local RK = RheostatController.SelectedPosition + local B = (Train.Battery.Voltage > 55) and 1 or 0 + local BO = B*Train.VB.Value + local T = Train.SolverTemporaryVariables + local elType = self.Type + local isMVM = elType == 1 + local isDot2 = elType == 6 + local isLVZ = 1 < elType and elType < 6 + local isPUAV = isLVZ and elType < 4 + local isPA = isLVZ and not isPUAV + local isKSD = isPA and elType==5 + + local KV = Train.KV + local KRU = Train.KRU + local Panel = Train.Panel + Panel.V1 = BO + local RC1 = Train.RC1.Value + local ARS = Train.ALS_ARS + local RC2,AVI,AVO + + S["10AK"] = T[10]*Train.A54.Value*Train.A84.Value + S["U2"] = S["10AK"]*KV["U2-10AK"] --10AK-KV-U2 + + --Reverser + S["7D"] = T[10]*Train.A48.Value + S["7G"] = S["7D"]*KV["10-7G"] --10-A48-RV-7G --FIXME 34w ARS + S["B3"] = B*Train.A44.Value + S["14a"] = S["B3"]*KRU["14/1-B3"] + S["14b"] = S["14a"]*Train.A17.Value + S["F"] = T[10]*Train.A29.Value + S["F7"] = S["F"]*KV["F-F7"]+S["14b"]*KRU["11/3-FR1"] + + Train:WriteTrainWire(5,S["10AK"]*KV["10AK-5"] + KRU["5/3-ZM31"]*-10) + Train:WriteTrainWire(4,S["10AK"]*KV["10AK-4"] + --[[max(0,min(1,T[4])*KV["4-0"]*-10)]]KV["4-0"]*-10) + --Train:WriteTrainWire(4,S["10AK"]*KV["10AK-4"]*(1-T[4]*KV["4-0"]*-10)) + + Panel.LST = T[6]*Train.A40.Value + Panel.LhRK = (T[2]+T[-2])*Train.A57.Value + Panel.LVD = T[1]*Train.A60.Value + if isDot2 then --717.2 wo ARS + Panel.LSN = S["U2"]*T[18] + + S["33Yu"] = S["7G"]*KV["7G-33Yu"] --7G-SOT/UOS-KV + S["33Yu0"] = (Train.KD.Value+Train.VAD.Value) --RVT-RPB/VAH-KD/VAD-0 + Train.RV2:TriggerInput("Set",S["33Yu"]*S["33Yu0"]) + Train:WriteTrainWire(1,S["10AK"]*Train.R1_5.Value + KRU["1/3-ZM31"]*-10) + Train:WriteTrainWire(2,S["U2"]*KV["U2-2"] + KRU["2/3-ZM31"]*-10) --U2-KV-2 FIXME ARS? + Train:WriteTrainWire(3,S["U2"]*KV["U2-3"]) + Train:WriteTrainWire(6,S["10AK"]*Train.K6.Value) + Train:WriteTrainWire(8,BO*KV["10-8"]*Train.A41.Value)--10-KV-8 FIXME ARS + Train:WriteTrainWire(20,S["U2"]*KV["U2-20a"]+S["U2"]*KV["U2-20b"]+KRU["20/3-ZM31"]*-10) + Train:WriteTrainWire(25,S["U2"]*KV["U2-25"]*Train.A55.Value*Train.K25.Value) + + S["U2a"] = S["U2"]*KV["U2-U2a"] --U2-KV-U2a + S["19B"] = S["10AK"]*KV["10AK-DA"] --DA-19B + Train:WriteTrainWire(19,S["19B"]*KV["19B-19"]*Train.A71.Value) --19B-KV/RO-A71-19 + Train.R1_5:TriggerInput("Set",S["19B"]*Train.RV2.Value*Train.UAVAC.Value*(Train.AVU.Value+Train.OtklAVU.Value)) + Train.RVT:TriggerInput("Set",S["U2a"]) + Train.K25:TriggerInput("Set",S["U2a"]) + Train.K6:TriggerInput("Set",S["10AK"]*Train.RVT.Value) --10AK-K6 + --Train.Rp8:TriggerInput("Set",T[8]) + + + S["U4"] = S["10AK"]*KV["10AK-U4"]*Train.A74.Value--10AK-KV-U4 + Train:WriteTrainWire(17,S["U4"]*Train.VozvratRP.Value) + Train:WriteTrainWire(24,S["U2"]*Train.A73.Value*Train.KSN.Value) + S["V2"] = T[10]*Train.AV1.Value + if self.Vent then + Train:WriteTrainWire(59,S["V2"]*Train.V11.Value) + Train:WriteTrainWire(60,S["V2"]*Train.V12.Value) + Train:WriteTrainWire(58,BO*Train.A49.Value*(1-Train.V11.Value)*(1-Train.V12.Value)*Train.V13.Value) + Panel.L1 = T[57] + end + Panel.M8 = S["V2"]*Train.PVK.Value + + local RRI_VV = Train.RRI_VV + RRI_VV.Power = BO*Train.AS1.Value--*Train.R_ASNPOn.Value + RRI_VV.AmplifierPower = RRI_VV.Power*Train.RRI.LineOut*Train.R_UNch.Value*Train.A26.Value + Train:WriteTrainWire(13,RRI_VV.AmplifierPower) + Train:WriteTrainWire(-13,RRI_VV.AmplifierPower*Train.PowerSupply.X2_2) + RRI_VV.CabinSpeakerPower = RRI_VV.Power*Train.RRI.LineOut*Train.R_G.Value + + Panel.AnnouncerPlaying = T[13] + Panel.AnnouncerBuzz = T[-13]+RRI_VV.CabinSpeakerPower*Train.PowerSupply.X2_2 + Train.Rp8:TriggerInput("Set",T[8]*Train.KRP.Value) + Train:WriteTrainWire(14,S["14a"]*(1-Train.Rp8.Value)*Train.KRP.Value) + elseif isLVZ then + RC2 = isKSD and RC1 or Train.RC2.Value + + Panel.LSN = (math.max(0,T[20])+S["14b"])*T[18] + --[[ S["7Ga"] = S["7G"]*Train.A79.Value + ARS.FMM1 = S["14a"]*Train.A42.Value+S["7Ga"] + ARS.FMM2 = S["F7"] + ARS.GE = (ARS.FMM1*Train.ARS.Value+T[87]*(1-Train.ARS.Value))*RC1 + Train:WriteTrainWire(87,S["B3"]*Train.ARSR.Value*(1-RC1)) + Train:WriteTrainWire(91,(S["B3"]*Train.ARSR.Value+T[87]+ARS.FMM1*Train.ARS.Value)*Train.PB.Value+T[87]*Train.ARSR.Value*Train.KVTR.Value) + ARS.VP = ARS.FMM1*Train.VP.Value + Train:WriteTrainWire(88,ARS.FMM1*Train.ALSFreq.Value*(1-Train.VP.Value)) + ARS.PD = T[88] + ARS.ALS = T[10]*Train.A43.Value*Train.ALS.Value + Train.BLPM.Power = ARS.ALS + ARS.NGPower = S["7D"]*RC1 + Train.BIS200.Power = T[10]*Train.A43.Value*(Train.ALS.Value+Train.ARS.Value) + ARS.KB=T[91]*RC1+(ARS.ALS*(1-Train.BSM_GE.Value)+ARS.GE*Train.BSM_GE.Value)*Train.KVT.Value +--]] + S["14bx"] = S["14b"]*Train.KRP.Value + S["KRH"] = max(0,T[1])+S["14bx"] + ARS.KRH = S["KRH"]*RC1 + ARS.KRO = S["7G"]*(1-Train.KRP.Value)*KV["7GA-RC27"]*RC1 + ARS.KRT = (max(0,Panel.LST)+max(0,T[8]))*RC1 + S["14G"] = S["7G"]*Train.A42.Value+S["14a"]*Train.A42.Value + ARS.ARSPower = S["14G"]*Train.ARS.Value*RC1 + ARS.ALS = S["14G"] + ARS.ALSPower = ARS.ALS*Train.ALS.Value*RC1 + ARS.VRD = S["14G"]*Train.VRD.Value*RC1 + ARS.KB=S["14G"]*(Train.PB.Value+Train.KVT.Value)*RC1 + if isPUAV then + Train:WriteTrainWire(53,S["14G"]*Train.A61.Value) + else + Train:WriteTrainWire(53,(S["10AK"]*KV["10AK-DA"]+S["14a"]*Train.A42.Value)*Train.A61.Value) + end + Train:WriteTrainWire(54,0) + --ARS.KRO = (T[87]+S["7Ga"]*KV["7GA-RC27"]+S["14a"]*Train.A42.Value*(1-Train.KRP.Value))*(1-Train.BSM_KRH.Value) + + --Train.ROT1:TriggerInput("Set",ARS["33G"]*RC1+(1-RC1)) + --Train.ROT2:TriggerInput("Set",ARS["33G"]*RC1+(1-RC1)) + --Panel.LKVD = ARS.GE*(1-Train.BUM_RVD2.Value)+T[87]*(1-Train.ROT2.Value) + + S["7Gv"] = S["14G"]*RC1*Train.ARS.Value*ARS.EPK*Train.A43.Value + + if isPUAV then + AVI = Train.PUAV + AVO = Train.PUAV + + --AVI.KRT = T[6]*RC2 + AVI.Power = T[10]*Train.VAU.Value*Train.A58.Value + AVI.ALSPower = S["14G"]*Train.A55.Value + AVI.KRT = (max(0,Panel.LST)+max(0,T[8]))*RC2 + AVI.KRH = S["KRH"]*RC2 + AVI.KGR = KV["15A-15B"] + AVI.KRR1 = BO*Train.VAU.Value*Train.A59.Value*KV["10-7G"]--T[53] + AVI.KRR2 = T[54] + AVI.KRR3 = T[4] + AVI.KPRK = RheostatController.Position + AVI.KOAT = T[64] + AVI.KET = T[34]*T[-34] + AVI.KSOT = Train.SOT.Value + AVI.RK1 = C(RK==1) + AVI.KRU = KRU["14/1-B3"] + AVI.K16 = T[16] + + AVI.KVARS = ARS.ARSPower + AVI.KTARS = ARS["6"] + AVI.VRD = S["14G"]*Train.VRD.Value*RC2 + AVI.VAV = Train.VAV.Value + AVI.KH3 = Train.KH.Value + AVI.VZP = Train.VZP.Value + AVI.KSZD = Train.KSZD.Value + AVI.KB=S["14G"]*(Train.PB.Value+Train.KVT.Value)*RC2 + Panel.BURPower = BO*Train.A66.Value + else + AVI = Train.PAM_VV + AVO = Train.PAM + + S["10-58"] = T[10]*Train.A58.Value + if isKSD then + Train:WriteTrainWire(99,S["10-58"]*(Train.VPAOn.Value+Train.KSD_VAU.Value)) + Train:WriteTrainWire(98,S["10-58"]*Train.VPAOff.Value) + Train.KSD_VAU:TriggerInput("Set",(T[99]+S["10-58"]*Train.KSD_VAU.Value)*max(0,1-T[98])*RC1) + AVI.Power = S["10-58"]*Train.KSD_VAU.Value*RC1 + RC2 = RC1 + else + AVI.Power = S["10-58"]*Train.VAU.Value*RC2 + AVI.KVARS = ARS.ARSPower*RC1 + AVI.KTARS = ARS["6"]*RC1 + end + AVI.KGR = KV["15A-15B"] + AVI.KRR = T[53]*RC2 + AVI.KRR1 = T[54]*RC2 + AVI.KRR2 = T[4]*RC2 + + --AVI.KRT = T[6]*RC2 + AVI.KRT = (max(0,Panel.LST)+max(0,T[8]))*RC2 + AVI.KRH = S["KRH"]*RC2 + AVI.KB=S["14G"]*(Train.PB.Value+Train.KVT.Value)*RC2 + + AVI.KZP = Train.VZP.Value + AVI.KET = T[34]*T[-34] + AVI.LPT = T[64] + + AVI.KSOT = Train.SOT.Value*RC2 + AVI.KSZD = Train.KSZD.Value*RC2 + + AVI.KPRK = RheostatController.Position*RC2 + --AVI.RK1 = C(RK==1) + AVI.K16 = T[16] + AVI.KRU = BO*KRU["14/1-B3"]*RC2 + + AVI.VRD = S["14G"]*Train.VRD.Value*RC2 + + AVI.V1 = T[48]*RC2 + AVI.V2 = T[39]*RC2 + end + ARS.DA = S["10AK"]*KV["10AK-DA"] + + Train:WriteTrainWire(39,S["14G"]*(1-Train.OVT.Value)*(1-Train.RPB.Value)+AVO["39"]*RC2) + + if isKSD then + S["7Ga"] = AVI.Power*AVO["7GA"]*RC1 + S["7Gb"] = (1-RC1)*Train.PB.Value + Train.RPB:TriggerInput("Set",S["14G"]*(S["7Ga"]+S["7Gb"])) + + S["33Yu"] = S["7G"]*KV["7G-33Yu"]*(AVO["033"]*RC1+(1-RC1)) --7G-SOT/UOS-KV + S["33Yu0"] = (Train.RPB.Value+Train.VAH.Value)*(Train.KD.Value+Train.VAD.Value) --RVT-RPB/VAH-KD/VAD-0 + Train.RV2:TriggerInput("Set",S["33Yu"]*S["33Yu0"]) + + Train:WriteTrainWire(1,S["10AK"]*Train.R1_5.Value+KRU["1/3-ZM31"]*-10) + Train:WriteTrainWire(2,S["U2"]*KV["U2-2"]+AVO["2"]*RC1+KRU["2/3-ZM31"]*-10) --U2-KV-2 FIXME ARS? + Train:WriteTrainWire(3,S["U2"]*KV["U2-3"]+AVO["3"]*RC1+T[2]*KRU["2/3-ZM31"]) + Train:WriteTrainWire(6,S["10AK"]*Train.K6.Value) + Train:WriteTrainWire(8,BO*(KV["10-8"]+AVO["8"]*RC1)*Train.A41.Value)--10-KV-8 FIXME ARS + --Train:WriteTrainWire(14,S["14bx"]*(AVO["033"]*RC1)) + Train:WriteTrainWire(14,S["14bx"]*(1-Train.Rp8.Value)) + Train:WriteTrainWire(20,S["U2"]*KV["U2-20a"]*(AVO["20X"]*RC1+(1-RC1))+(AVO["20"]*RC1+S["U2"]*KV["U2-20b"])+KRU["20/3-ZM31"]*-10) + Train:WriteTrainWire(25,(S["U2"]*KV["U2-25"]*Train.A55.Value+AVO["25"]*RC1)*Train.K25.Value) + Train.Rp8:TriggerInput("Set",T[8]) + + S["U2a"] = AVO["33G"]*RC1+S["U2"]*KV["U2-U2a"] --U2-KV-U2a + S["19B"] = S["10AK"]*KV["10AK-DA"]*(AVO["033"]*RC1+(1-RC1)) --DA-19B + Train:WriteTrainWire(19,(S["19B"]*(KV["19B-19"]+Train.RO.Value)*(AVO["19"]*RC1+(1-RC1))+S["10AK"]*KV["10AK-DA"]*KV["U2-25"]*Train.RO.Value)*Train.A71.Value) --19B-KV/RO-A71-19 + + S["33"] = (S["19B"]*Train.RV2.Value+AVO["33"]*RC1)*Train.UAVAC.Value*(Train.AVU.Value+Train.OtklAVU.Value) + Train.R1_5:TriggerInput("Set",S["33"]) + Train.RVT:TriggerInput("Set",S["U2a"]) + Train.K25:TriggerInput("Set",S["U2a"]*(AVO["025"]*RC1+(1-RC1))) + Train.K6:TriggerInput("Set",S["10AK"]*Train.RVT.Value) --10AK-K6 + + AVI["I2"] = S["U2"]*KV["U2-2"]*RC1 + AVI["I3"] = S["U2"]*KV["U2-3"]*RC1 + AVI["I25"] = S["U2"]*KV["U2-25"]*Train.A55.Value*RC1 + AVI["I33G"] = S["U2"]*KV["U2-U2a"]*RC1 + AVI["I33"] = min(1,S["33Yu"]*S["33Yu0"]*RC1) + Train.EPKC:TriggerInput("Set",AVO["EPK"]*Train.A43.Value) + Panel.LKVD = 0 + else + S["7Ga"] = Train.A42.Value*Train.ARS.Value*RC1 + S["7Gb"] = ((1-RC2) + AVI.Power)*(1-RC1)*Train.PB.Value + Train.RPB:TriggerInput("Set",S["14G"]*(S["7Ga"]+S["7Gb"])) + + if isPUAV then + Train.EPKC:TriggerInput("Set",S["7Gv"]) + else + Train.EPKC:TriggerInput("Set",ARS.ARSPower*S["7Gv"]+(1-ARS.ARSPower)*AVO["EPK"]*Train.A43.Value) + end + + S["33Yu"] = S["7G"]*(Train.SOT.Value*RC1+(1-RC1))*KV["7G-33Yu"]*(AVO["033"]*RC2+(1-RC2)) --7G-SOT/UOS-KV + S["33Yu0"] = (Train.RPB.Value+Train.VAH.Value)*(Train.KD.Value+Train.VAD.Value) --RVT-RPB/VAH-KD/VAD-0 + Train.RV2:TriggerInput("Set",S["33Yu"]*S["33Yu0"]) + + Train:WriteTrainWire(1,S["10AK"]*Train.R1_5.Value+KRU["1/3-ZM31"]*-10) + Train:WriteTrainWire(2,S["U2"]*KV["U2-2"]+ARS["6"]*RC1+AVO["2"]*RC2+KRU["2/3-ZM31"]*-10) --U2-KV-2 FIXME ARS? + Train:WriteTrainWire(3,S["U2"]*KV["U2-3"]+AVO["3"]*RC2+T[2]*KRU["2/3-ZM31"]) + Train:WriteTrainWire(6,S["10AK"]*Train.K6.Value) + Train:WriteTrainWire(8,BO*(KV["10-8"]+--[[ math.max(0,--]] ARS["8"]*RC1--[[ )--]] +AVO["8"]*RC2)*Train.A41.Value)--10-KV-8 FIXME ARS + Train:WriteTrainWire(14,S["14bx"]*(1-Train.Rp8.Value)) + Train:WriteTrainWire(20,S["U2"]*KV["U2-20a"]*(ARS["33G"]*RC1+(1-RC1))*(AVO["20X"]*RC2+(1-RC2))+(ARS["6"]*RC1+AVO["20"]*RC2+S["U2"]*KV["U2-20b"])+KRU["20/3-ZM31"]*-10) + Train:WriteTrainWire(25,(S["U2"]*KV["U2-25"]*Train.A55.Value+AVO["25"]*RC2)*Train.K25.Value) + Train.Rp8:TriggerInput("Set",T[8]) + + ARS.K25 = S["U2"]*KV["U2-25"]*Train.A55.Value + S["U2a"] = ARS["6"]*RC1+AVO["33G"]*RC2+S["U2"]*KV["U2-U2a"] --U2-KV-U2a + S["19B"] = S["10AK"]*KV["10AK-DA"]*(ARS["33G"]*RC1+(1-RC1))*(AVO["033"]*RC2+(1-RC2)) --DA-19B + Train:WriteTrainWire(19,(S["19B"]*(KV["19B-19"]+Train.RO.Value)*(AVO["19"]*RC2+(1-RC2))+S["10AK"]*KV["10AK-DA"]*KV["U2-25"]*Train.RO.Value)*Train.A71.Value) --19B-KV/RO-A71-19 + + S["33"] = (S["19B"]*Train.RV2.Value+AVO["33"]*RC2)*Train.UAVAC.Value*(Train.AVU.Value+Train.OtklAVU.Value) + Train.R1_5:TriggerInput("Set",S["33"]) + Train.RVT:TriggerInput("Set",S["U2a"]) + Train.K25:TriggerInput("Set",S["U2a"]*(ARS["33Zh"]*RC1+(1-RC1))*(AVO["025"]*RC2+(1-RC2))) + Train.K6:TriggerInput("Set",S["10AK"]*Train.RVT.Value) --10AK-K6 + + AVI["I2"] = S["U2"]*KV["U2-2"]*RC2 + AVI["I3"] = S["U2"]*KV["U2-3"]*RC2 + AVI["I25"] = S["U2"]*KV["U2-25"]*Train.A55.Value*RC2 + AVI["I33G"] = S["U2"]*KV["U2-U2a"]*RC2 + AVI["I33"] = min(1,S["33Yu"]*S["33Yu0"]*RC2) + + Panel.LKVD =ARS.KVD + end + + + S["U4"] = S["10AK"]*KV["10AK-U4"]*Train.A74.Value--10AK-KV-U4 + Train:WriteTrainWire(17,S["U4"]*Train.VozvratRP.Value*(AVO["17"]*RC2+(1-RC2))) + Train:WriteTrainWire(71,S["U4"]*Train.OtklBV.Value) + Train:WriteTrainWire(24,Panel.LSN*Train.KSN.Value) + Panel.M8 = T[10]*Train.AV1.Value*Train.PVK.Value + + Train:WriteTrainWire(66,S["F"]*(1-Train.VSOSD.Value)) + Train:WriteTrainWire(67,T[66]*Train.VSOSD.Value) + Panel.SOSD = T[67]*(1-Train.KD.Value) + + local ASNP_VV = Train.ASNP_VV + Panel.UPOPower = BO*(KV["10AK-DA"]+S["14a"]) + ASNP_VV.AmplifierPower = Panel.UPOPower*Train.R_UPO.Value*(max(0,min(1,1-T[1]))+S["14a"])*Train.UPO.LineOut + Train:WriteTrainWire(13,ASNP_VV.AmplifierPower) + Train:WriteTrainWire(-13,ASNP_VV.AmplifierPower*Train.PowerSupply.X2_2) + ASNP_VV.CabinSpeakerPower = ASNP_VV.AmplifierPower*Train.R_G.Value + + Train:WriteTrainWire(13,ASNP_VV.AmplifierPower) + + Panel.AnnouncerPlaying = T[13] + Panel.AnnouncerBuzz = T[-13] + + Panel.NMLow = BO*C(Train.Pneumatic.TrainLinePressure < 5.8 or Train.Pneumatic.TrainLinePressure > 8.3) + Panel.UAVATriggered = BO*(1-Train.UAVAC.Value+Train.PneumaticNo1.Value*C(Train.Pneumatic.BrakeCylinderPressure < 0.6)) + else + Panel.LSN = S["U2"]*T[18] + --ARSD + S["7Ga"] = S["7G"]*Train.A79.Value + ARS.FMM1 = S["14a"]*Train.A42.Value+S["7Ga"] + ARS.FMM2 = S["F7"] + ARS.GE = (ARS.FMM1*Train.ARS.Value+T[87]*(1-Train.ARS.Value))*RC1 + Train:WriteTrainWire(87,S["B3"]*Train.ARSR.Value*(1-RC1)) + Train:WriteTrainWire(91,(S["B3"]*Train.ARSR.Value+T[87]+ARS.FMM1*Train.ARS.Value)*Train.PB.Value+T[87]*Train.ARSR.Value*Train.KVTR.Value) + ARS.VP = ARS.FMM1*Train.VP.Value + Train:WriteTrainWire(88,ARS.FMM1*Train.ALSFreq.Value*(1-Train.VP.Value)) + ARS.PD = T[88] + ARS.ALS = T[10]*Train.A43.Value*Train.ALS.Value + Train.BLPM.Power = ARS.ALS + ARS.NGPower = S["7D"]*RC1 + Train.BIS200.Power = T[10]*Train.A43.Value*(Train.ALS.Value+Train.ARS.Value)*Train.AIS.Value + ARS.KB=T[91]*RC1+(ARS.ALS*(1-Train.BSM_GE.Value)+ARS.GE*Train.BSM_GE.Value)*Train.KVT.Value + + Train.BSM_KRT:TriggerInput("Set",(max(0,T[6])+max(0,T[8]))*RC1) + ARS.KRH = (max(0,T[1])+T[14])*RC1 + ARS.R11 = T[15] + ARS.R12 = (T[87]+S["7Ga"]*KV["7GA-RC27"]+S["14a"]*Train.A42.Value*(1-Train.KRP.Value)) + Train.BSM_KRO:TriggerInput("Set",ARS.R12*(1-Train.BSM_KRH.Value)) + + Panel.LKVD = ARS.GE*(1-Train.BUM_RVD2.Value)+T[87]*(1-Train.ROT2.Value) + + Train.ARS_RT:TriggerInput("Set",T[4]*RC1) + ARS.DA = S["10AK"]*(KV["10AK-DA"]+Train.ARS_RT.Value) + Train.UPPS_VV.Power = S["7G"]*Train.UPPS_On.Value + Train.UPPS_VV.KB = Train.UPPS_VV.Power*(Train.KVT.Value+Train.PB.Value) + + Train:WriteTrainWire(92,ARS.DA*RC1*Train.BUM_RVD1.Value+S["7D"]*(1-RC1)*Train.A58.Value*Train.KAH.Value) + Train:WriteTrainWire(93,ARS.GE*Train.BUM_RVD2.Value*RC1+S["B3"]*(1-RC1)*Train.A59.Value*Train.KAH.Value) + Train.ROT1:TriggerInput("Set",T[92]) + Train.ROT2:TriggerInput("Set",T[93]) + --ARSDEnd + + --Old logic + --Train:WriteTrainWire(39,S["7G"]*(1-Train.OVT.Value)*(1-Train.RPB.Value)) + --S["7Gb"] = S["7Ga"]*(Train.PB.Value+(Train.ARS.Value+T[91]+(T[87]+S["B3"]*Train.ARSR.Value)*(1-RC1))*(1-Train.UOS.Value)) + + Train:WriteTrainWire(39,(S["7G"]+S["B3"]*KRU["14/1-B3"])*(1-Train.OVT.Value)*(1-Train.RPB.Value)) + + S["7Gb"] = ARS.FMM1*(Train.PB.Value+(Train.ARS.Value+T[91]+(T[87]+S["B3"]*Train.ARSR.Value)*(1-RC1))*(1-Train.UOS.Value)) + Train.RPB:TriggerInput("Set",S["7Gb"]) + S["33Yu"] = S["7G"]*(Train.SOT.Value+Train.UOS.Value)*Train.ROT1.Value*KV["7G-33Yu"] --7G-SOT/UOS-KV + S["33Yu0"] = (Train.RPB.Value+Train.VAH.Value)*(Train.KD.Value+Train.VAD.Value) --RVT-RPB/VAH-KD/VAD-0 + Train.RV2:TriggerInput("Set",S["33Yu"]*S["33Yu0"]) + Train:WriteTrainWire(1,S["10AK"]*Train.R1_5.Value + KRU["1/3-ZM31"]*-10) + Train:WriteTrainWire(2,S["U2"]*KV["U2-2"]+ARS["2"]*RC1 + KRU["2/3-ZM31"]*-10) --U2-KV-2 FIXME ARS? + Train:WriteTrainWire(3,S["U2"]*KV["U2-3"]) + Train:WriteTrainWire(6,S["10AK"]*Train.K6.Value) + Train:WriteTrainWire(8,BO*(KV["10-8"]+ARS["8"]*RC1)*Train.A41.Value)--10-KV-8 FIXME ARS + Train:WriteTrainWire(20,S["U2"]*KV["U2-20a"]*Train.ROT1.Value+(ARS["33G"]*RC1+S["U2"]*KV["U2-20b"])+KRU["20/3-ZM31"]*-10) + Train:WriteTrainWire(25,S["U2"]*KV["U2-25"]*Train.A55.Value*Train.K25.Value) + + S["U2a"] = ARS["33G"]*RC1+S["U2"]*KV["U2-U2a"] --U2-KV-U2a + S["19B"] = S["10AK"]*KV["10AK-DA"]*Train.ROT1.Value --DA-19B + if self.HaveRO then + Train:WriteTrainWire(19,S["19B"]*(KV["19B-19"]+Train.RO.Value)*Train.A71.Value) --19B-KV/RO-A71-19 + else + Train:WriteTrainWire(19,S["19B"]*KV["19B-19"]*Train.A71.Value) --19B-KV/RO-A71-19 + end + Train.R1_5:TriggerInput("Set",S["19B"]*Train.RV2.Value*Train.UAVAC.Value*(Train.AVU.Value+Train.OtklAVU.Value)) + Train.RVT:TriggerInput("Set",S["U2a"]) + Train.K25:TriggerInput("Set",S["U2a"]*(Train.ROT1.Value+(1-RC1))) + Train.K6:TriggerInput("Set",S["10AK"]*Train.RVT.Value) --10AK-K6 + --Train.Rp8:TriggerInput("Set",T[8]) + + + S["U4"] = S["10AK"]*KV["10AK-U4"]*Train.A74.Value--10AK-KV-U4 + Train:WriteTrainWire(17,S["U4"]*Train.VozvratRP.Value) + Train:WriteTrainWire(71,S["U4"]*Train.OtklBV.Value) + Train:WriteTrainWire(24,S["U2"]*Train.A73.Value*Train.KSN.Value) + S["V2"] = T[10]*Train.AV1.Value + if self.Vent then + Train:WriteTrainWire(59,S["V2"]*Train.V11.Value) + Train:WriteTrainWire(60,S["V2"]*Train.V12.Value) + Train:WriteTrainWire(58,BO*Train.A49.Value*(1-Train.V11.Value)*(1-Train.V12.Value)*Train.V13.Value) + Panel.L1 = T[57] + end + Panel.M8 = S["V2"]*Train.PVK.Value + + local ASNP_VV = Train.ASNP_VV + ASNP_VV.Power = BO*Train.AS1.Value*Train.R_ASNPOn.Value + ASNP_VV.AmplifierPower = ASNP_VV.Power*Train.ASNP.LineOut*Train.R_UNch.Value*Train.A26.Value + Train:WriteTrainWire(13,ASNP_VV.AmplifierPower) + Train:WriteTrainWire(-13,ASNP_VV.AmplifierPower*Train.PowerSupply.X2_2) + ASNP_VV.CabinSpeakerPower = ASNP_VV.Power*Train.ASNP.LineOut*Train.R_G.Value + + Panel.AnnouncerPlaying = T[13] + Panel.AnnouncerBuzz = T[-13]+ASNP_VV.CabinSpeakerPower*Train.PowerSupply.X2_2 + Train:WriteTrainWire(14,S["14a"]*(Train.SOT.Value+Train.UOS.Value)*Train.KRP.Value*Train.ROT2.Value) + + Panel.CBKIPower = BO*Train.A76.Value + end + if self.OldFLARS then + Panel.LUDS = ARS.FMM1*Train.AIS.Value + else + Panel.LUDS = T[10]*Train.AIS.Value + end + + --Ð’Ð°Ð³Ð¾Ð½Ð½Ð°Ñ Ñ‡Ð°Ñть + S["10A"] = BO*Train.A30.Value + S["ZR"] = (1-Train.RRP.Value)+(B*Train.A39.Value*(1-Train.RPvozvrat.Value)*Train.RRP.Value)*-1 + + if isMVM then + S["1A"] = T[1]*Train.A1.Value*Train.IGLA_PCBK.KVC + else + S["1A"] = T[1]*Train.A1.Value + end + S["6A"] = T[6]*Train.A6.Value + Train.TR1:TriggerInput("Set",S["6A"]) + --1A-PMU-1T-NR/RPU-1P(6^) + + S["1P"] = S["1A"]*P.PM*(Train.NR.Value+Train.RPU.Value)+S["6A"]*P.PT + + --1P-RK1-18-AVT-!RP-RKR-DR1-DR2-1G + S["1G"] = S["1P"]*C(1 <= RK and RK <= 18)*Train.AVT.Value*(1-Train.RPvozvrat.Value)*Train.RKR.Value--FIXME + S["1L"] = S["1G"]*C(RK==1)*(Train.KSB1.Value+Train.KSH1.Value)*Train.LK2.Value + S["1Zh"] = (S["1L"]+S["1G"]*Train.LK3.Value)*S["ZR"] + Train.LK1:TriggerInput("Set",S["1Zh"]*P.PM) + Train.LK3:TriggerInput("Set",S["1Zh"]) + Train.LK4:TriggerInput("Set",S["1Zh"]*Train.LK3.Value) + S["3A"] = T[3]*Train.A3.Value + S["6G1"] = S["6A"]*P.PT*C(RK==1) + self.ThyristorControllerWork = S["6G1"]*(Train.KSB1.Value+Train.KSB2.Value)*Train.LK2.Value + S["6G2"] = S["6G1"]*(1-Train.RSU.Value) + Train.KSB1:TriggerInput("Set",S["6G2"]) + Train.KSB2:TriggerInput("Set",S["6G2"]) + --20-A20-20A-Rp-20B + if isMVM then + S["20A"] = T[20]*Train.A20.Value*Train.IGLA_PCBK.KVC + else + S["20A"] = T[20]*Train.A20.Value + end + --Train.RPL:TriggerInput("Set",--[[ S["20A"]--]] BO*(1-Train.RPvozvrat.Value)*(Train.DR1.Value+Train.DR2.Value+(1-Train.BV.State))) + if not isDot2 then + Train.RPL:TriggerInput("Set",S["20A"]*(1-Train.RPvozvrat.Value)*(Train.DR1.Value+Train.DR2.Value+(1-Train.BV.State))) + end + S["20B"] = S["20A"]*(1-Train.RPvozvrat.Value) + S["20K"] = S["20B"]*P.PS + Train.LK2:TriggerInput("Set",S["20K"]*S["ZR"]) + Train.LK5:TriggerInput("Set",S["20B"]*Train.LK1.Value*S["ZR"]) + + if self.X2PS then + S["1M"] = C(1<=RK and RK<=5)*S["3A"]+S["20A"]*Train.KSH2.Value + S["1R"] = (S["1A"]*C(RK==1)+S["1M"]*P.PP)*S["ZR"] + Train.KSH1:TriggerInput("Set",S["1R"]) + Train.KSH2:TriggerInput("Set",S["1R"]) + P:TriggerInput("PP",S["3A"]*Train.LK5.Value*C(RK==18)*S["ZR"])--1A-1D + else + S["1M"] = C(1<=RK and RK<=5)*S["3A"]+T[10]*Train.KSH2.Value + S["1R"] = (S["1A"]*C(RK==1)*P.PS + S["1M"]*P.PP)*S["ZR"] + Train.KSH1:TriggerInput("Set",S["1R"]) + Train.KSH2:TriggerInput("Set",S["1R"]) + P:TriggerInput("PP",S["1A"]*C(RK==18)*S["ZR"])--1A-1D + end + + + local Reverser = Train.Reverser + S["4A"] = T[4]*Train.A4.Value + Reverser:TriggerInput("NZ",S["4A"]*Reverser.VP*(1-Train.LK1.Value)*S["ZR"]) + S["5A"] = T[5]*Train.A5.Value + Reverser:TriggerInput("VP",S["5A"]*Reverser.NZ*(1-Train.LK1.Value)*S["ZR"]) + --Train.RKR:TriggerInput("Set",(S["4A"]*Reverser.NZ+S["5A"]*Reverser.VP)) --81-717.5(м) МСК + if isDot2 then + Train.RKR:TriggerInput("Set",(S["4A"]*Reverser.NZ+S["5A"]*Reverser.VP)*S["ZR"]) --81-717.2 + else + Train.RKR:TriggerInput("Set",(S["4A"]*Reverser.NZ+S["5A"]*Reverser.VP)*Train.BV.State*S["ZR"]) --81-717.5 Харьков*S["ZR"] + end + --+B + S["1N"] = C(11<=RK and RK<=18)*(1-Train.LK4.Value) + Train.RR:TriggerInput("Set",S["10A"]*S["1N"] + P.PS*Train.LK4.Value) + + S["5Zh"] = S["10A"]*(1-Train.LK3.Value) + P:TriggerInput("PS",S["5Zh"]*(P.PP)) + P:TriggerInput("PM",S["5Zh"]*(1-Train.TR1.Value)*Train.KSH2.Value) + P:TriggerInput("PT",S["5Zh"]*(P.PM)*(1-Train.KSH2.Value)) + --P:TriggerInput("PP",S["5Zh"]*(P.PM)) + S["2A"] = (T[2]+T[-2])*Train.A2.Value + S["2T"] = S["2A"]*Train.TR1.Value + Train.RSU:TriggerInput("Set",S["2T"]*Train.ThyristorBU5_6.Value) + Train.RU:TriggerInput("Set",S["2T"]) + S["2B"] = S["2A"]*((1-Train.KSB1.Value)*(1-Train.KSB2.Value)+(1-Train.TR1.Value)) + + S["2Ca"] = P.PS*C(1<=RK and RK<=17)*Train.RR.Value --CHECK + S["2Cb"] = P.PP*(C(6<=RK and RK<=18)+C(2<=RK and RK<=5)*Train.KSH1.Value)*(1-Train.RR.Value) --CHECK + S["2C"] = S["2B"]*(S["2Ca"]+S["2Cb"])*Train.LK4.Value + S["10R"] = S["10A"]*(1-Train.LK3.Value)*C(2<=RK and RK<=18)*(1-Train.LK4.Value) + S["2U"] = S["10R"]+S["2C"]*S["ZR"] + Train.SR1:TriggerInput("Set",S["2U"]) + Train.RV1:TriggerInput("Set",S["2U"]) + S["2Zh"] = T[2]*Train.A2.Value*Train.TR1.Value*C(17<=RK and RK<=18) + if self.NoRT2 then + Train.PneumaticNo1:TriggerInput("Set",S["2Zh"]+T[48]*Train.A72.Value) + Train:WriteTrainWire(-2,Train.A2.Value*Train.TR1.Value*C(17<=RK and RK<=18)*T[48]*Train.A72.Value) + else + Train.PneumaticNo1:TriggerInput("Set",S["2Zh"]+T[48]*Train.A72.Value*(1-Train.RT2.Value)) + Train:WriteTrainWire(-2,Train.A2.Value*Train.TR1.Value*C(17<=RK and RK<=18)*T[48]*Train.A72.Value*(1-Train.RT2.Value)) + end + if isMVM then --UNREALISTIC + S["8A"] = T[8]*Train.A8.Value*(1-Train.RV1.Value)*(1-Train.RT2r.Value)*(1-Train.RV3.Value) + else + S["8A"] = T[8]*Train.A8.Value*(1-Train.RV1.Value)*(1-Train.RT2.Value)*(1-Train.RV3.Value) + end + Train.PneumaticNo2:TriggerInput("Set",S["8A"]+T[39]*Train.A52.Value) + Train.RV3:TriggerInput("Set",T[19]*Train.A19.Value) + S["25A"] = T[25]*Train.A25.Value + S["10X"] = (--[[ S["1N"]*P.PS+--]] Train.LK4.Value+C(RK==1)*Train.LK2.Value) + Train["RRTpod"] = S["10A"]*RheostatController.RKM2*S["10X"] + Train["RRTuderzh"] = S["25A"] + Train["RUTpod"] = S["10A"]*RheostatController.RKM1*S["10X"] + Train["RUTavt"] = Train.A70.Value*B + Train.RRT:TriggerInput("Close",Train.RRTuderzh*Train.RRTpod) + Train.RRT:TriggerInput("Open",(1-Train.RRTuderzh)) + + Train.RRP:TriggerInput("Set",T[14]*Train.A14.Value)--14A + --СДРК Б+ провод + S["10A3"] = BO*Train.A28.Value + S["10BG"] = S["10A3"]*(Train.TR1.Value + Train.RV1.Value) + RheostatController:TriggerInput("MotorCoilState",min(1,S["10A"]*(S["10BG"]*Train.RR.Value - S["10BG"]*(1-Train.RR.Value)))) + Train.RVO:TriggerInput("Set",S["10A3"]*Train.NR.Value) + self.ThyristorControllerPower = S["10A3"] + --[[ S["10Ra"] = T[10]*RheostatController.RKM1 + S["10Rb"] = T[10]*Train.SR1.Value + S["10RbA"] = S["10Rb"]*(1-Train.RRT.Value)*(1-Train.RUT.Value)+S["10Ra"] + S["10RbB"] = S["10Rb"]*Train.RUT.Value + S["10RB"] = S["10RbA"]+S["10RbB"]*Train.RRT.Value+S["10RbB"]*(1-Train.SR1.Value) + + S["10Rc"] = T[10]*Train.LK3.Value*C(RK>=18 or RK<=1) + S["10RS"] = S["10Ra"]+S["10RB"]*(1-RheostatController.RKP)*S["10Rc"]--]] + S["10Yu"] = S["10A"]*Train.SR1.Value + S["10M"] = S["10Yu"]*(1-Train.RRT.Value)*(1-Train.RUT.Value) + S["10N"] = S["10A"]*RheostatController.RKM1+S["10M"] + S["10T"] = (Train.RUT.Value+Train.RRT.Value+(1-Train.SR1.Value))*(RheostatController.RKP)+S["10A"]*Train.LK3.Value*C(RK>=18 and RK<=1) + RheostatController:TriggerInput("MotorState",S["10N"]+S["10T"]*(-10)) + + Train.RZ_2:TriggerInput("Set",T[24]*(1-Train.LK4.Value)) + S["17A"] = T[17]*Train.A18.Value + if not isDot2 then + Train.BV:TriggerInput("Power",BO*Train.A80.Value) + Train.BV:TriggerInput("Enable",S["17A"]*Train.A81.Value) + end + if isMVM then + Train.BV:TriggerInput("Disable",T[71]*Train.A66.Value) + Panel.PCBKPower = T[10] + end + Train.RPvozvrat:TriggerInput("Open",S["17A"]) --FIXME Mayve more right RP code + -- + --Ð’Ñпом цепи + Train:WriteTrainWire(10,BO*Train.A56.Value) + --B->A44->KMMK->23 + Train:WriteTrainWire(23,S["B3"]*Train.RezMK.Value) + S["10AT"] = T[10]*Train.A29.Value*(1-Train.AVU.Value) + Panel.AVU = S["10AT"] + + if isKSD then + S["48A"] = S["10AT"]*(1-Train.OtklAVU.Value)+BO*Train.A49.Value*Train.VZ1.Value+AVO["48"]*RC2 + elseif isLVZ then + S["48A"] = S["10AT"]*(1-Train.OtklAVU.Value)+BO*Train.A49.Value*Train.VZ1.Value+ARS["48"]*RC1+AVO["48"]*RC2 + elseif not isDot2 then + S["48A"] = S["10AT"]*(1-Train.OtklAVU.Value)+T[10]*Train.AV1.Value*Train.VZ1.Value+ARS["48"]*RC1 + else + S["48A"] = S["10AT"]*(1-Train.OtklAVU.Value)+T[10]*Train.AV1.Value*Train.VZ1.Value + end + if self.NoRT2 then + Train:WriteTrainWire(48,S["48A"]+Train.A72.Value*S["2Zh"]) --FIXME ARS + else + Train:WriteTrainWire(48,S["48A"]+Train.A72.Value*S["2Zh"]*(1-Train.RT2.Value)) --FIXME ARS + end + if self.HaveRO then + if isKSD then + Train.RO:TriggerInput("Set",(T[48]+AVO["48"]+S["48A"])*RC1) + elseif isMVM then + Train.RO:TriggerInput("Set",(T[48]+ARS["48"]+S["48A"])*RC1) + else + Train.RO:TriggerInput("Set",(T[48]+ARS["48"]+S["48A"])*(RC1+RC2)) + end + end + + if isDot2 then Train:WriteTrainWire(11,B*Train.VA.Value) end + + S["B9"] = B*Train.A53.Value + S["22B"] = T[10]*Train.A10.Value*Train.VMK.Value + Train:WriteTrainWire(22,(S["22B"]+T[44])*Train.AK.Value) + Train:WriteTrainWire(44,S["22B"]) + S["UO"] = T[10]*Train.A27.Value + Train:WriteTrainWire(27,S["UO"]*Train.L_1.Value) + S["UO"] = S["UO"] + T[27]*Train.L_1.Value + S["F1"] = S["B9"]*KV["B9-F1"] + if isLVZ then + if isKSD then + S["TU"] = S["F1"]*Train.Ring.Value + Train:WriteTrainWire(7,S["TU"]+T[71]*Train.OhrSig.Value) + else + S["TU"] = S["F1"]*Train.A7.Value*Train.Ring.Value + Train:WriteTrainWire(7,S["TU"]+T[71]*Train.OhrSig.Value+ARS.Ring) + end + Panel.OhrSig = T[71] + Train:WriteTrainWire(71,S["UO"]*(1-Train.SQ3.Value)+S["TU"]*Train.OhrSig.Value) + else + if not isDot2 then + Train:WriteTrainWire(7,S["UO"]*Train.Ring.Value+ARS.Ring+Train.BZOS.VH2*0.4) + Train.BZOS.Power = T[10]*Train.A27.Value + Train.BZOS.Ring = T[7] + else + Train:WriteTrainWire(7,S["UO"]*Train.Ring.Value) --FIXME Ring buttons + end + Train:WriteTrainWire(72,S["F1"]) + Panel.LEKK = T[72] + end + --[[if isPA then + Panel.Ring = T[7]+AVO.Ring -- FIXME ARS + else + Panel.Ring = T[7] -- FIXME ARS + end]] + Panel.Ring = T[7] + + if self.GreenRPRKR then + S["10AN"] = Train.RPvozvrat.Value+(1-Train.RKR.Value) --81-717 Харьков + else + S["10AN"] = Train.RPvozvrat.Value --81-717 МСК + end + S["18A"] = (S["10AN"]*100+(1-Train.LK4.Value))*Train.A38.Value + Train:WriteTrainWire(18,S["18A"]) + Panel.TW18 = S["18A"] + Panel.GreenRP = S["10AN"]*S["UO"] + + S["36N"] = BO*Train.A45.Value + Train:WriteTrainWire(37,Train.ConverterProtection.Value) + Train:WriteTrainWire(69,S["36N"]*Train.BPSNon.Value) + Train:WriteTrainWire(36,T[69]*(1-Train.BPSNon.Value)) + Panel.LKVP = T[36] + Panel.RZP = T[36]*T[61] + + S["B9a"] = S["B9"]*Train.VB.Value + Train.KVC:TriggerInput("Set",S["B9a"]) + Train.KUP:TriggerInput("Set",S["B9a"]*Train.A75.Value) + Panel.KUP = S["B9a"]*Train.KUP.Value + + S["D4"] = BO*Train.A13.Value + S["D1"] = T[10]*Train.A21.Value*KV["D-D1"]+S["14b"]*KRU["11/3-D1/1"] + if isLVZ then + if isKSD then + S[16] = S["D1"]*Train.VUD1.Value + else + S[16] = S["D1"]*Train.VUD1.Value*Train.VUD2.Value + end + Train:WriteTrainWire(16,S[16]+AVO["16"]*RC2) + S[68] = S["D1"]*AVO["68"]*Train.VOPD.Value + AVI.OPD = S["D1"]*Train.VOPD.Value + Train:WriteTrainWire(68,AVI.OPD*AVO["68"]) + S[31] = S["D1"]*(1-Train.DoorSelect.Value)--*(1-Train.VUD1.Value) + S[32] = S["D1"]*Train.DoorSelect.Value--*(1-Train.VUD1.Value) + AVI.KDL = S[31]*(Train.KDL.Value+Train.KDLR.Value) + AVI.KDP = S[32]*Train.KDP.Value + S[31] = S[31]*(1-Train.VUD1.Value) + S[32] = S[32]*(1-Train.VUD1.Value) + else + Train:WriteTrainWire(16,S["D1"]*(Train.VUD1.Value*Train.VUD2.Value)) + S[31] = S["D1"]*(1-Train.DoorSelect.Value) + S[32] = S["D1"]*Train.DoorSelect.Value + end + Train:WriteTrainWire(12,S["D1"]*Train.KRZD.Value) + Panel.DoorsLeft = S[31] + Panel.DoorsRight = S[32] + + S["12A"] = T[12]*Train.A12.Value + if isLVZ then + if isPA then AVI.ZD = S[16] end + Train:WriteTrainWire(31,S[31]*(Train.KDL.Value*(1-RC2))+S["D1"]*Train.VDL.Value+AVO["31"]*RC2 + S["12A"]*Train.A31.Value) + Train:WriteTrainWire(32,S[32]*(Train.KDP.Value)*(1-RC2)+AVO["32"]*RC2 + S["12A"]*Train.A32.Value) + elseif not isDot2 then + Train:WriteTrainWire(31,S[31]*(Train.KDL.Value+Train.KDLR.Value+Train.VDL.Value)*(Train.ASNP.K1+(1-Train.VBD.Value)) + S["12A"]*Train.A31.Value) + Train:WriteTrainWire(32,S[32]*Train.KDP.Value*(Train.ASNP.K2+(1-Train.VBD.Value)) + S["12A"]*Train.A32.Value) + else + Train:WriteTrainWire(31,S[31]*(Train.KDL.Value+Train.KDLR.Value+Train.VDL.Value) + S["12A"]*Train.A31.Value) + Train:WriteTrainWire(32,S[32]*Train.KDP.Value + S["12A"]*Train.A32.Value) + end + + + if isMVM then + S["15B"] = T[15]*(KV["15A-15B"]+Train.KD.Value) + else + S["15B"] = T[15] + end + if isLVZ then AVI.KD = min(1,S["15B"]) end + Train.KD:TriggerInput("Set",S["15B"]) + Panel.SD = S["15B"] + --FIXME ARS FMM2 + --F1->F2->BPF + S["F8"] = S["F7"]*Train.L_4.Value + Train.Panel.Headlights1 = S["F8"]*Train.A46.Value + Train.Panel.Headlights2 = S["F8"]*Train.VUS.Value*Train.A47.Value + if isKSD then + S["F1"] = min(1,S["F1"]+T[71]*Train.OhrSig.Value*Train.Ring.Value) + Train.Panel.RedLight1 = S["F1"]*Train.A7.Value + elseif isLVZ then + Train.Panel.RedLight1 = (S["F1"]+T[71]*Train.OhrSig.Value*Train.Ring.Value)*Train.A7.Value + S["F1"] = min(1,S["F1"]+Train.Panel.RedLight1*Train.A9.Value) + else + Train.Panel.RedLight1 = S["F1"]*Train.A7.Value + end + Train.Panel.RedLight2 = S["F1"]*Train.A9.Value + + if isPUAV then + Train:WriteTrainWire(-34,S["F1"]) + Panel.KT = (S["F1"]+T[34]*T[-34])*ARS.LKT*RC1 + ARS.KT = T[34]*T[-34] + elseif isLVZ then + Train:WriteTrainWire(-34,S["F1"]) + Panel.KT = S["F1"]+T[34]*T[-34] + ARS.KT = T[34]*T[-34] + elseif not isDot2 then + --S["KT"] = ARS.FMM1*(1-Train.BSM_GE.Value) + S["KT"] = S["7D"]*(1-Train.BSM_GE.Value)+S["B3"]*(1-RC1) + Train:WriteTrainWire(-34,S["KT"]) + ARS.KT = T[34]*T[-34]*Train.BSM_GE.Value + Train.BUM_KPP:TriggerInput("Set",S["KT"]*(1-Train.BSM_GE.Value)+ARS.KT) + end + Train:WriteTrainWire(34,Train.RKTT.Value+Train.DKPT.Value) + + --[[ if isLVZ then + S[-28] = S["D4"]*KV["D4-15"]+S["14b"] + else + S[-28] = S["D4"]*KV["D4-15"] + end + Train:WriteTrainWire(-28,S[-28])--]] + Train:WriteTrainWire(-28,S["D4"]*KV["D4-15"]+S["14b"]) + Train:WriteTrainWire(28,T[-28]*Train.RD.Value) + S[15] = T[28]*KV["D8-15A"]*KRU["15/2-D8"] + Train:WriteTrainWire(15,S[15]) + + S[64] = S["UO"]*Train.BPT.Value + Train:WriteTrainWire(64,S[64]) + Panel.BrW = S[64] + Panel.BrT = T[64] + + Panel.KVC = S["UO"]*(1-Train.KVC.Value) + Panel.PanelLights = T[10]*Train.L_3.Value + + + --Ð’Ñпом цепи приём + if isDot2 then + S["11B"] = T[11]*Train.A15.Value*(1-Train.KPP.Value) + Panel.EmergencyLights = S["11B"] + Panel.CabLights = S["UO"]*Train.L_2.Value+S["11B"]*(1-Train.L_2.Value) + else + Panel.EmergencyLights = BO*Train.A49.Value*Train.A15.Value + Panel.CabLights = S["UO"]*Train.L_2.Value + end + Panel.EqLights = T[10]*Train.A11.Value + Train.RPU:TriggerInput("Set",T[37]*Train.A37.Value) + Train.Schemes = S + + S["D6"] = S["D4"]*Train.BD.Value + Train.RD:TriggerInput("Set",S["D6"]) + Panel.DoorsW = S["D4"]*(1-Train.RD.Value) + Train.VDZ:TriggerInput("Set",T[16]*Train.A16.Value*(1-Train.RD.Value)) + S["31A"] = T[31]*Train.A31.Value + S["32A"] = T[32]*Train.A32.Value + Train.VDOL:TriggerInput("Set",S["31A"]+S["12A"]) + Train.VDOP:TriggerInput("Set",S["32A"]+S["12A"]+T[68]*Train.A68.Value) + + S["36A"] = T[36]*Train.A51.Value*Train.RVO.Value--36 + Train.KVP:TriggerInput("Set",S["36A"]*Train.KPP.Value) + Train.KPP:TriggerInput("Set",S["36A"]*(1-Train.RZP.Value)*Train.KVC.Value) + S["27A"] = T[27]*Train.A50.Value + Train.KO:TriggerInput("Set",S["27A"]) + --S["22A"] = (T[23]*Train.A23.Value+T[22]*Train.A22.Value) --FIXME 714 + S["22A"] = T[22]*Train.A22.Value + Train.KK:TriggerInput("Set",S["22A"]*(1-Train.TRK.Value)) + + if isLVZ then + Panel.VPR = BO*Train.AR63.Value*Train.R_VPR.Value+B*Train.AV3.Value*Train.R_VPR.Value + else + Panel.VPR = BO*Train.AR63.Value*Train.R_VPR.Value + Panel.PCBKPower = BO + end + + --BPSN + local BPSN = Train.PowerSupply + Train.Battery:TriggerInput("Charge",BPSN.X2_2*Train.A24.Value*BO) + BPSN:TriggerInput("5x2",BO*Train.A65.Value*Train.KVP.Value) + Panel.MainLights = BPSN.X6_2*Train.KO.Value + Train.RPU:TriggerInput("Set",T[37]*Train.A37.Value) + Train.RZP:TriggerInput("Open",T[37]*Train.A37.Value*Train.RPU.Value) + Train:WriteTrainWire(61,Train.RZP.Value) + + if self.Vent then + Train.KV1:TriggerInput("Set",T[59]*Train.AV4.Value*Train.RVO.Value) + Train.KV2:TriggerInput("Set",T[60]*Train.AV5.Value) + Train.KV3:TriggerInput("Set",T[58]*Train.AV6.Value) + S["AV2"] = T[10]*Train.AV2.Value + Panel.M1_3 = S["AV2"]*Train.KV1.Value + Panel.M4_7 = S["AV2"]*Train.KV2.Value+B*Train.AV3.Value*Train.KV3.Value + Train.R1:TriggerInput("Set",S["AV2"]*C(Panel.M1_3 > 0.5 and Panel.M4_7 > 0.5)) + Train:WriteTrainWire(57,T[59]*(1-Train.R1.Value)) + end + return S +end +function TRAIN_SYSTEM:SolveRKInternalCircuits(Train,dT,firstIter) + local P = Train.PositionSwitch + local RheostatController = Train.RheostatController + local RK = RheostatController.SelectedPosition + local B = (Train.Battery.Voltage > 55) and 1 or 0 + local BO = B*Train.VB.Value + local T = Train.SolverTemporaryVariables + + --Ð’Ð°Ð³Ð¾Ð½Ð½Ð°Ñ Ñ‡Ð°Ñть + S["10A"] = BO*Train.A30.Value + S["ZR"] = (1-Train.RRP.Value)+(B*Train.A39.Value*(1-Train.RPvozvrat.Value)*Train.RRP.Value)*-1 + + + S["1N"] = C(11<=RK and RK<=18)*(1-Train.LK4.Value) + Train.RR:TriggerInput("Set",S["10A"]*S["1N"] + P.PS*Train.LK4.Value) + + S["2A"] = (T[2]+T[-2])*Train.A2.Value + S["2B"] = S["2A"]*((1-Train.KSB1.Value)*(1-Train.KSB2.Value)+(1-Train.TR1.Value)) + + S["2Ca"] = P.PS*C(1<=RK and RK<=17)*Train.RR.Value --CHECK + S["2Cb"] = P.PP*(C(6<=RK and RK<=18)+C(2<=RK and RK<=5)*Train.KSH1.Value)*(1-Train.RR.Value) --CHECK + S["2C"] = S["2B"]*(S["2Ca"]+S["2Cb"])*Train.LK4.Value + S["10R"] = S["10A"]*(1-Train.LK3.Value)*C(2<=RK and RK<=18)*(1-Train.LK4.Value) + S["2U"] = (S["10R"]+S["2C"])*S["ZR"] + Train.SR1:TriggerInput("Set",S["2U"]) + Train.RV1:TriggerInput("Set",S["2U"]) + + + S["25A"] = T[25]*Train.A25.Value + S["10X"] = (Train.LK4.Value+C(RK==1)*Train.LK2.Value) + Train["RRTpod"] = S["10A"]*RheostatController.RKM2*S["10X"] + Train["RRTuderzh"] = S["25A"] + Train["RUTpod"] = S["10A"]*RheostatController.RKM1*S["10X"] + Train.RRT:TriggerInput("Close",Train.RRTuderzh*Train.RRTpod) + Train.RRT:TriggerInput("Open",(1-Train.RRTuderzh)) + + --СДРК Б+ провод + S["10A3"] = BO*Train.A28.Value + S["10BG"] = S["10A3"]*(Train.TR1.Value + Train.RV1.Value) + RheostatController:TriggerInput("MotorCoilState",min(1,S["10A"]*(S["10BG"]*Train.RR.Value - S["10BG"]*(1-Train.RR.Value)))) + + S["10Yu"] = S["10A"]*Train.SR1.Value + S["10M"] = S["10Yu"]*(1-Train.RRT.Value)*(1-Train.RUT.Value) + S["10N"] = S["10A"]*RheostatController.RKM1+S["10M"] + S["10T"] = (Train.RUT.Value+Train.RRT.Value+(1-Train.SR1.Value))*(RheostatController.RKP)+S["10A"]*Train.LK3.Value*C(RK>=18 and RK<=1) + RheostatController:TriggerInput("MotorState",S["10N"]+S["10T"]*(-10)) + + return S +end + +local wires = {1,-2,2,3,4,5,6,7,8,10,11,12,14,15,16,17,18,19,20,22,23,24,27,-28,28,25,13,-13,31,32,36,37,39,44,48,53,54,57,59,60,58,57,64,34,36,-34,61,64,66,67,68,69,71,72,87,88,91,92,93,98,99} +function TRAIN_SYSTEM:SolveInternalCircuits(Train,dT,firstIter) + local T = Train.SolverTemporaryVariables + if not T then + T = {} + for i,v in ipairs(wires) do T[v] = 0 end + Train.SolverTemporaryVariables = T + end + if firstIter then + for i,v in ipairs(wires) do T[v] = min(Train:ReadTrainWire(v),1) end + self:SolveAllInternalCircuits(Train,dT) + else + self:SolveRKInternalCircuits(Train,dT) + end +end + + + +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:SolvePowerCircuits(Train,dT) + self.ExtraResistanceLK5 = 0--Train.KF_47A["L2-L4" ]*(1-Train.LK5.Value) + self.ExtraResistanceLK2 = Train.KF_47A["L12-L13"]*(1-Train.LK2.Value) + if Train.PositionSwitch.PT > 0 then -- PT + self.R1 = Train.ResistorBlocks.R1C1(Train) + self.R2 = Train.ResistorBlocks.R2C1(Train) + self.R3 = 0 + elseif Train.PositionSwitch.PS > 0 then -- PS + self.R1 = Train.ResistorBlocks.R1C1(Train) + self.R2 = Train.ResistorBlocks.R2C1(Train) + self.R3 = 0.0 + elseif Train.PositionSwitch.PP > 0 then --PP + self.R1 = Train.ResistorBlocks.R1C2(Train) + self.R2 = Train.ResistorBlocks.R2C2(Train) + self.R3 = 0.0 + else + self.R1 = 1e9 + self.R2 = 1e9 + self.R3 = 1e9 + end + -- Apply LK3, LK4 contactors + self.R1 = self.R1 + 1e9*(1 - Train.LK3.Value) + self.R2 = self.R2 + 1e9*(1 - Train.LK4.Value) + + -- Shunt resistance + self.Rs1 = Train.ResistorBlocks.S1(Train) + 1e9*(1 - Train.KSH1.Value) + self.Rs2 = Train.ResistorBlocks.S2(Train) + 1e9*(1 - Train.KSH2.Value) + + -- Thyristor contrller + if self.ThyristorController then + self.Rs1 = ((self.ThyristorResistance^(-1)) + (self.Rs1^(-1)))^(-1) + self.Rs2 = ((self.ThyristorResistance^(-1)) + (self.Rs2^(-1)))^(-1) + end + + -- Calculate total resistance of engines winding + local RwAnchor = Train.Engines.Rwa*2 -- Double because each set includes two engines + local RwStator = Train.Engines.Rws*2 + -- Total resistance of the stator + shunt + self.Rstator13 = (RwStator^(-1) + self.Rs1^(-1))^(-1) + self.Rstator24 = (RwStator^(-1) + self.Rs2^(-1))^(-1) + -- Total resistance of entire motor + self.Ranchor13 = RwAnchor + self.Ranchor24 = RwAnchor + + if Train.PositionSwitch.PT> 0 then -- PS + self:SolvePT(Train) + elseif Train.PositionSwitch.PS > 0 then -- PS + self:SolvePS(Train) + elseif Train.PositionSwitch.PP > 0 then + self:SolvePP(Train,Train.RheostatController.SelectedPosition >= 17) + else + self:SolvePT(Train) + end + + -- Calculate current through rheostats 1, 2 + self.IR1 = self.I13 + self.IR2 = self.I24 + + -- Calculate induction properties of the motor + self.I13SH = self.I13SH or self.I13 + self.I24SH = self.I24SH or self.I24 + + -- Time constant + --local T13const1 = math.max(16.00,math.min(28.0,(self.R13^2) * 2.0)) -- R * L + --local T24const1 = math.max(16.00,math.min(28.0,(self.R24^2) * 2.0)) -- R * L + local T13const1 = math.max(16.00,math.min(36.0,(self.R13^2) * 2.0)) -- R * L + local T24const1 = math.max(16.00,math.min(36.0,(self.R24^2) * 2.0)) -- R * L + + -- Total change + local dI13dT = T13const1 * (self.I13 - self.I13SH) * dT + local dI24dT = T24const1 * (self.I24 - self.I24SH) * dT + + -- Limit change and apply it + if dI13dT > 0 then dI13dT = math.min(self.I13 - self.I13SH,dI13dT) end + if dI13dT < 0 then dI13dT = math.max(self.I13 - self.I13SH,dI13dT) end + if dI24dT > 0 then dI24dT = math.min(self.I24 - self.I24SH,dI24dT) end + if dI24dT < 0 then dI24dT = math.max(self.I24 - self.I24SH,dI24dT) end + self.I13SH = self.I13SH + dI13dT + self.I24SH = self.I24SH + dI24dT + self.I13 = self.I13SH + self.I24 = self.I24SH + + -- Re-calculate total current and simulate infinite resistance in circuit + if Train.PositionSwitch.PT > 0 then + self.I13 = self.I13*Train.LK3.Value*Train.LK4.Value*Train.LK2.Value + self.I24 = self.I24*Train.LK4.Value*Train.LK3.Value*Train.LK2.Value + + self.Itotal = self.I13 + self.I24 + elseif Train.PositionSwitch.PS > 0 then -- PS + self.I13 = self.I13*Train.LK3.Value*Train.LK4.Value*Train.LK1.Value*Train.LK2.Value + self.I24 = self.I24*Train.LK3.Value*Train.LK4.Value*Train.LK1.Value*Train.LK2.Value + + self.I24 = (self.I24 + self.I13)*0.5 + self.I13 = self.I24 + self.Itotal = self.I24 + elseif Train.PositionSwitch.PP > 0 then -- PP + self.I13 = self.I13*Train.LK3.Value*Train.LK1.Value + self.I24 = self.I24*Train.LK4.Value*Train.LK1.Value + + self.Itotal = self.I13 + self.I24 + end + + -- Calculate extra information + self.Uanchor13 = self.I13 * self.Ranchor13 + self.Uanchor24 = self.I24 * self.Ranchor24 + self.Ianchor13 = self.I13 + self.Ianchor24 = self.I24 + + + + ---------------------------------------------------------------------------- + -- Calculate current through stator and shunt + self.Ustator13 = self.I13 * self.Rstator13 + self.Ustator24 = self.I24 * self.Rstator24 + + self.Ishunt13 = self.Ustator13 / self.Rs1 + self.Istator13 = self.Ustator13 / RwStator + self.Ishunt24 = self.Ustator24 / self.Rs2 + self.Istator24 = self.Ustator24 / RwStator + + if Train.PositionSwitch.PT > 0 then + local I1,I2 = self.Ishunt13,self.Ishunt24 + self.Ishunt13 = -I2 + self.Ishunt24 = -I1 + + I1,I2 = self.Istator13,self.Istator24 + self.Istator13 = -I2 + self.Istator24 = -I1 + end + + -- Calculate current through RT2 relay + self.IRT2 = math.abs(self.Itotal * Train.PositionSwitch.PT) + + -- Sane checks + if self.R1 > 1e5 then self.IR1 = 0 end + if self.R2 > 1e5 then self.IR2 = 0 end + + -- Calculate power and heating + local K = 12.0*1e-5 + local H = (10.00+(15.00*Train.Engines.Speed/80.0))*1e-3 + self.P1 = (self.IR1^2)*self.R1 + self.P2 = (self.IR2^2)*self.R2 + self.T1 = (self.T1 + self.P1*K*dT - (self.T1-25)*H*dT) + self.T2 = (self.T2 + self.P2*K*dT - (self.T2-25)*H*dT) + self.Overheat1 = math.min(1-1e-12, + self.Overheat1 + math.max(0,(math.max(0,self.T1-750.0)/400.0)^2)*dT ) + self.Overheat2 = math.min(1-1e-12, + self.Overheat2 + math.max(0,(math.max(0,self.T2-750.0)/400.0)^2)*dT ) + + -- Energy consumption + self.ElectricEnergyUsed = self.ElectricEnergyUsed + math.max(0,self.EnergyChange)*dT + self.ElectricEnergyDissipated = self.ElectricEnergyDissipated + math.max(0,-self.EnergyChange)*dT +end +function TRAIN_SYSTEM:SolveThyristorController(Train, dT) + -- General state + local Active = self.ThyristorControllerPower > 0 and self.ThyristorControllerWork > 0 and Train.KSB1.Value>0 + local I = (math.abs(self.I13) + math.abs(self.I24)) / 2 + --local I = math.abs(Train.Electric.I13 + Train.Electric.I24)/2 + --print(Train.RSU.Value,Active,Train.TR1.Value) + -- Controllers resistance + local Resistance = 0.036 + -- Update RV controller signal + -- Update thyristor controller signal + local done = true + if not Active then + self.ThyristorTimeout = CurTime() + self.PrepareElectric = CurTime() + self.ThyristorState = 0.00 + --[[elseif not Active then + if Train.LK2.Value == 0.0 then + self.ThyristorTimeout = CurTime() + self.PrepareElectric = CurTime() + self.ThyristorState = 0.00 + end--]] + else + local T = 180.0 + (100.0 * Train.Pneumatic.WeightLoadRatio + 80.0) * Train.RU.Value + -- Generate control signal + local rnd = T / 20 --+math.random()*(10) + local dC = math.min(math.max((T - I), -20), 20) + + if self.PrepareElectric then + self.ThyristorState = 0.92 + if I > 162 then--I > T * 0.9 then + self.PrepareElectric = false + self.ThyristorState = (1 - math.max(0, math.min(1, ((Train.Engines.Speed - 50) / 32)) ^ 0.5)) * 0.9 + end + else + self.ThyristorState = math.max(0, math.min(1, self.ThyristorState + dC / rnd * dT)) + end + --print(self.ThyristorState) + + --print(self.ThyristorState) + -- Generate resistance + local keypoints = {0.10, 0.008, 0.20, 0.018, 0.30, 0.030, 0.40, 0.047, 0.50, 0.070, 0.60, 0.105, 0.70, 0.165, 0.80, 0.280, 0.90, 0.650, 1.00, 15.00} + local TargetField = 0.48 + 0.52 * self.ThyristorState + local Found = false + + for i = 1, #keypoints / 2 do + local X1, Y1 = keypoints[(i - 1) * 2 + 1], keypoints[(i - 1) * 2 + 2] + local X2, Y2 = keypoints[(i) * 2 + 1], keypoints[(i) * 2 + 2] + + if (not Found) and (not X2) then + Resistance = Y1 + Found = true + elseif (TargetField >= X1) and (TargetField < X2) then + local T = (TargetField - X1) / (X2 - X1) + Resistance = Y1 + (Y2 - Y1) * T + Found = true + end + end + + done = self.PrepareElectric and (CurTime() - self.PrepareElectric) > 0.8 or not self.PrepareElectric and self.ThyristorState > 0.92 + end + + -- Allow or deny using manual brakes + --Train.ThyristorBU5_6:TriggerInput("Set",not self.PrepareElectric and self.ThyristorState > 0.90) + Train.ThyristorBU5_6:TriggerInput("Set", Active and done) + -- Set resistance + self.ThyristorResistance = Resistance + 1e9 * (Active and 0 or 1) +end + +function TRAIN_SYSTEM:Think(dT,iter) + if not self.ResistorBlocksInit then + self.ResistorBlocksInit = true + if false and self.Type ~= 1 then + self.Train:LoadSystem("ResistorBlocks","Gen_Res_717_SPB") + else + self.Train:LoadSystem("ResistorBlocks","Gen_Res_717") + end + end + if iter == 1 then self.Train.ResistorBlocks.InitializeResistances_81_717(self.Train) end + return Metrostroi.BaseSystems["Electric"].Think(self,dT,iter) +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_81_717_pam.lua b/lua/metrostroi/systems/sys_81_717_pam.lua new file mode 100644 index 0000000..0095010 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_717_pam.lua @@ -0,0 +1,3415 @@ +-------------------------------------------------------------------------------- +-- 81-717 "PA" safety system +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +--[[ +а) включение ПÐ-М и начальное теÑтирование: + V 1) включение ПÐ-М; + V 2) алгоритм Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ€ÐµÐ²ÐµÑ€Ñивной рукоÑтки (РР); + V 3) функции доÑтупа к ÑиÑтеме: + – вход в ÑиÑтему Ñ ÐºÐ¾Ð´Ð¾Ð¼ доÑтупа Ñлектромеханика, теÑтовый контроль аппаратуры; + – вход в ÑиÑтему Ñ ÐºÐ¾Ð´Ð¾Ð¼ доÑтупа машиниÑта и приемка ÑоÑтава; + 4) алгоритм взаимодейÑÑ‚Ð²Ð¸Ñ ÐŸÐ-М и БÐРС; + 5) выход из депо, переход в режим «Работа»; +б) алгоритмы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð¿Ð½ÐµÐ²Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑких ÑиÑтем поезда: + 1) алгоритм ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð¾Ñ‚Ð¿ÑƒÑка тормозов; + 2) алгоритм ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ воздухораÑпределителей; + 3) алгоритм ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð²ÐµÐ½Ñ‚Ð¸Ð»ÐµÐ¹ Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð’1 и Ð’2; + 4) алгоритм ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð²ÐµÐ½Ñ‚Ð¸Ð»ÐµÐ¹ Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð’1 и Ð’2; +в) алгоритмы Ñ€ÐµÐ³ÑƒÐ»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑкороÑти: + 1) алгоритм Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾Ð¿ÑƒÑтимой ÑкороÑти Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ перегону; + 2) регулирование ÑкороÑти в режиме КС и ОС; + V 3) регулирование ÑкороÑти в режиме КС при значении Vд = 0; + 4) алгоритм ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ ÑффективноÑти торможениÑ; +г) алгоритм ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ÐµÐ·Ð´Ð¾Ð¼ на Ñтанции в режимах КС и ОС: + 1) фикÑÐ°Ñ†Ð¸Ñ Ñтанции; + 2) оÑаживание поезда; + 3) процедура открытиÑ/Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ на Ñтанции; + 4) отправление Ñо Ñтанции; + 5) движение при переезде поездом зоны ОПВ на Ñтанции; + 6) оборот на промежуточной Ñтанции; +д) проезд Ñтанции без оÑтановки (транзитом); +е) алгоритм перехода на другую линию; +ж) управление поездом на перегоне: + 1) управление поездом при потере ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ на перегоне; + 2) Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ на перегоне по запроÑу машиниÑта; + +з) алгоритм коррекции пройденного пути; +и) алгоритм коррекции значений коÑффициентов (бандажа); +к) оÑаживание при пожаре; +л) алгоритм ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ ÑÐºÐ°Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ÐµÐ·Ð´Ð° (режим КС); +м) алгоритм проверки «противоÑкатываниÑ» поезда; +н) алгоритм Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ Ñтанционным путÑм; +о) алгоритм работы ПÐ-М в режиме резервного ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ÐµÐ·Ð´Ð¾Ð¼; +п) Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ терминала машиниÑта. + +2.1.5 При обнаружении ПÐ-М Ð¿Ñ€Ð¾Ð¿Ð°Ð´Ð°Ð½Ð¸Ñ Ñигнала КД она формирует команду ОХТ и ожидает Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° разрешение Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð±ÐµÐ· КД. +2.1.6 При пропадании Ñигнала КСОТ ПÐ-М автоматичеÑки переходит в режим ОС, дальнейшее движение поезда возможно при нажатой ПБ. При поÑвлении Ñигнала КСОТ проиÑходит автоматичеÑкий переход в КС. +2.1.7 ПÐ-М не позволÑет производить открытие дверей на перегоне, кроме ÑÐ»ÑƒÑ‡Ð°Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¼Ð°ÑˆÐ¸Ð½Ð¸Ñтом запроÑа на открытие дверей только поÑле полной оÑтановки поезда. +2.1.8 ПÐ-М блокирует возможноÑть Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÑоÑтава при Vд = 0. Движение при Vд = 0 возможно Ñо ÑкороÑтью не более 20 км/ч при нажатой ПБ и включенном тумблере ВРД или введенном запроÑе машиниÑта «Движение при Vд = 0». +2.1.9 ПÐ-М не производит автоматичеÑкого Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ на Ñтанции при отÑутÑтвии радиоÑвÑзи Ñ Ð¡Ð ÐšÐ¡Ð”. +2.1.10 ПÐ-М блокирует открытие дверей на Ñтанции Ñо Ñтороны, противоположной Ñтороне платформы. +2.1.11 ПÐ-М запрещает оÑаживание поезда на Ñтанции открытого типа при проезде зоны ОПВ и разрешает на Ñтанции закрытого типа при проезде зоны ОПВ не более 3 м. +2.1.12 ПÐ-М запрещает движение Ñо ÑкороÑтью более 20 км/ч при нажатой ПБ незавиÑимо от Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Vд. +2.1.13 ПÐ-М в режимах КС и ОС блокирует возможноÑть проÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтанции без оÑтановки, кроме ÑÐ»ÑƒÑ‡Ð°Ñ Ð²Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¼Ð°ÑˆÐ¸Ð½Ð¸Ñтом запроÑа на проÑледование Ñтанции транзитом. +2.2.3.2 Перед включением ПÐ-М проверить включенное ÑоÑтоÑние переключателей РЦ1, РЦ2, автоматичеÑких выключателей Ð58, Ð59, Ð61 и включенное ÑоÑтоÑние Ð²Ñ‹ÐºÐ»ÑŽÑ‡Ð°Ñ‚ÐµÐ»Ñ Ð’ÐУ (положение «ВКЛ»). + +2.3.3 Управление поездом при отÑутÑтвии ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ (ÐЧ) +2.3.3.1 Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾Ð¿ÑƒÑтимой ÑкороÑти движениÑ: + а) При наезде на Vд = ÐЧ выдаетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ предыдущей допуÑтимой ÑкороÑти, пока непройдет 0.8 Ñекунды Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ‚Ð° наезда на Vд = ÐЧ и поезд не проедет 12 – 20 м (в завиÑимоÑтиот ÑкороÑти Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ÐµÐ·Ð´Ð°); + б) При неÑовпадении данных полученных от двух плат ФФК или получении недоÑтовер-ных данных по одной из них (при получении чаÑтот вне диапазона значений или двойных чаÑ-тот и Ñ‚.д.) формируетÑÑ Vд = ÐЧ через 1,5 Ñекунды и поÑле Ð¿Ñ€Ð¾Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ð¾ÐµÐ·Ð´Ð¾Ð¼ 12 – 20 м(в завиÑимоÑти от ÑкороÑти Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ÐµÐ·Ð´Ð°); + в) Ðа ÑтоÑщем поезде (при ÑкороÑти менее 0.1 м/Ñ), при пропадании чаÑтоты Ñмена допуÑ-тимой ÑкороÑти производитÑÑ Ñ‡ÐµÑ€ÐµÐ· 2,5 Ñ, не дожидаÑÑÑŒ Ð¿Ñ€Ð¾Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ ÑоÑтавом 12 м.2.3.3.2 Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ÐµÐ·Ð´Ð¾Ð¼ при наезде на рельÑовую цепь Ñ Ð¾Ñ‚ÑутÑтвием коди-Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ (ÐЧ): + а) При наезде на рельÑовую цепь Ñ Ð¾Ñ‚ÑутÑтвием ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ (ÐЧ) выдаетÑÑ Ð·ÑƒÐ¼Ð¼ÐµÑ€; + б) ПРМ формирует поÑледовательноÑть команд ОХТ → Т2; + в) ПоÑле Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ ÐŸÐ‘ зуммер отключаетÑÑ; + г) Торможение (Т2) продолжаетÑÑ Ð´Ð¾ полной оÑтановки, а поÑле оÑтановки поезда ПÐ-М формирует команду Ð’1; + д) При отпущенной ПБ ПÐ-М формирует команду ОХТ + Ð’1; + е) При уÑтановленном в положение «0» КВ и нажатой ПБ ПÐ-М формирует команду ОД; + ж) ПоÑле перевода КВ в положение ХОД движение поезда возможно Ñо ÑкороÑтью не более 20 км/ч при нажатой ПБ. + 2.3.4 ВозможноÑть проÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð»Ð¾Ðº-учаÑтка Ñ Vд = 0 +2.3.4.1 При наезде на рельÑовую цепь Ñ Vд = 0 за 100 метров до Ñтанции Ñ Ð¿ÑƒÑ‚ÐµÐ²Ñ‹Ð¼ разви- тием, разрешаетÑÑ Ð´Ð°Ð»ÑŒÐ½ÐµÐ¹ÑˆÐµÐµ движение без оÑтановки Ñо ÑкороÑтью не более 20 км/ч при уÑ- ловии нажатой ПБ. +2.3.4.2 Ð’ оÑтальных ÑлучаÑÑ… при наезде на Vд = 0 проиÑходит торможение до полной оÑ- тановки. +2.3.4.3 При Ñмене допуÑтимой ÑкороÑти Ñ Vд ≠ 0 на Vд = 0 ПÐ-М должна Ñформировать поÑледовательноÑть команд ОХТ → Т2 до оÑтановки поезда, Ñ Ð²Ñ‹Ð´Ð°Ñ‡ÐµÐ¹ зуммера. +2.3.4.4 ПоÑле оÑтановки поезда и нажатии ПБ команда Т2 + Ð’1 менÑетÑÑ Ð½Ð° ОХТ + Ð’1. +2.3.4.5 При поÑледующем отпуÑке ПБ, зуммер отключаетÑÑ. +2.3.4.6 При переводе КВ в положение ХОД назначение ходового режима запрещаетÑÑ, и на диÑплее ТМ поÑвлÑетÑÑ Ð¿Ð¾Ð´Ñказка «Движение при Vд = 0». +2.3.4.7 ПоÑле оÑтановки поезда возобновление Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ñо ÑкороÑтью не более 20 км/ч возможно при уÑловии нажатой ПБ и Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ñ Ñигнала ВРД (включен выключатель ВРД). +2.3.4.8 ПоÑле оÑтановки поезда возобновление Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ñо ÑкороÑтью не более 20 км/ч возможно при уÑловии нажатой ПБ и Ð²Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð½Ð° блоке ТМ запроÑа «Движение при Vд = 0». +2.3.4.9 Ð”Ð»Ñ Ð²Ð²Ð¾Ð´Ð° запроÑа необходимо поÑледовательно нажать на ТМ клавишу «F», за- тем выбрать пункт меню, нажав клавишу «5». +2.3.4.10 Ðа диÑплее ТМ поÑвитÑÑ Â«Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° разрешение Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ Vд = 0» (риÑунок 11). +2.3.4.11 При нажатии клавиши «Esc» произойдет возврат к предыдущему кадру без раз- Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ (режим ОХТ + Ð’1). +2.3.4.12 При нажатии клавиши « â†â» ПРМ разрешит продолжение Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ Vд = 0, а на ТМ произойдет возврат к предыдущему кадру и на Ð²Ñ€ÐµÐ¼Ñ 7 Ñекунд поÑвитÑÑ Ð¿Ð¾Ð´- Ñказка «Разрешено движение при Vд = 0». +2.3.4.13 Режим ОХТ + Ð’1 ÑменитÑÑ на ОД + Ð’1 при нажатой ПБ. +2.3.4.14 При поÑвлении Vд ≠ 0 Ð·Ð°Ð¿Ñ€Ð¾Ñ Â«Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ðµ при Vд = 0» автоматичеÑки ÑнимаетÑÑ. +]] + +Metrostroi.DefineSystem("PAM") +TRAIN_SYSTEM.DontAccelerateSimulation = true +TRAIN_SYSTEM.TriggerNames = { + "PAM7", + "PAM8", + "PAM9", + "PAMLeft", + "PAMRight", + "PAM4", + "PAM5", + "PAM6", + "PAMUp", + "PAM1", + "PAM2", + "PAM3", + "PAMDown", + "PAM0", + "PAMEnter", + "PAMEsc", + "PAMF", + "PAMM", + "PAMP", + "PAMKeyB", +} + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("PAM_VV") + self.Train:LoadSystem("KSD_R","Relay") + self.Train:LoadSystem("KSD_VAU","Relay",nil,{close_time=0.1}) + --self.Train:LoadSystem("KSZD","Relay","Switch",{ bass = true }) + --self.Train:LoadSystem("VZP","Relay","Switch",{ bass = true }) + --self.Train:LoadSystem("VAU","Relay","Switch",{ bass = true, normally_closed = true }) + --self.Train:LoadSystem("RC2","Relay","Switch",{ bass = true, normally_closed = true }) + + + self.Triggers = {} + self.Touches = {} + for k,v in pairs(self.TriggerNames) do + self.Train:LoadSystem(v,"Relay","Switch",{ bass = true }) + self.Triggers[k] = false + self.Touches[k] = false + end + + self.NoFreq = 0 + self.F6 = 0 + self.F5 = 0 + self.F4 = 0 + self.F3 = 0 + self.F2 = 0 + self.F1 = 0 + + self["2"] = 0 --Вращение РК + self["3"] = 0 --Ход 3 + self["8"] = 0 --Замещение ÑлектричеÑкого Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ + self["16"] = 0 --Закрытие дверей + self["68"] = 0 --Открытие правых дверей хвоÑтового вагона + self["17"] = 0 -- Разрешение воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€ÐµÐ»Ðµ перегрузки + self["19"] = 0 -- Разрешение Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÑлектричеÑкого Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ + self["20"] = 0 -- Включение двигателей + self["20X"] = 0 -- Разрешение Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹ в ходовые режимы + self["025"] = 0 -- Разрешение ручного Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ + self["25"] = 0 -- Ручное торможение + self["31"] = 0 --Открытие Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð»ÐµÐ²Ñ‹Ñ… дверей + self["32"] = 0 --Открытие правых дверей + self["33"] = 0 --Включение ходового режима + self["033"] = 0 --Разрешение Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ…Ð¾Ð´Ð¾Ð²Ð¾Ð³Ð¾ режима + self["33G"] = 0 --Включение режима Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ + self["39"] = 0 --Включение Ð²ÐµÐ½Ñ‚Ð¸Ð»Ñ Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ â„– 2 + self["7GA"] = 0 --Включение Ð²ÐµÐ½Ñ‚Ð¸Ð»Ñ Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ â„– 2 + self["48"] = 0 --Включение Ð²ÐµÐ½Ñ‚Ð¸Ð»Ñ Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ â„– 1 + self.EPK = 0 + + + self.Ring = 0 + + self.State = 0 + self.Selected = 1 + + self.Keyboard = false + + self.Station = "" + self.Path = "" + self.RouteNumber = "" + self.DriverNumber = "" + --self:SetDriveMode = "Zero" + --self.CurrentDoorMode = "DO" + --self.CurrentPneumoMode = "NT" + self.Speed = 0 + self.SpeedLimit = 0 + self.Acceleration = 0 + self.Brightness = 0.6 + self.ErrorTimers = {} + self.Timers = {} +end + + +--if TURBOSTROI then return end +function TRAIN_SYSTEM:Inputs() + return { "KSDMode" } +end +function TRAIN_SYSTEM:Outputs() + return { + "2","3","8","16","68","17","19","20","20X","025","25","31","32","33","033","33G","39","7GA","48","EPK", + "Ring", "NoFreq", "F5", "F4", "F3", "F2", "F1" + } +end + +if CLIENT then + local function createFont(name,font,size) + surface.CreateFont("Metrostroi_"..name, { + font = font, + size = size, + weight = 800, + blursize = false, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + scanlines = false, + }) + end + createFont("PAM15","Arial",15) + createFont("PAM19","Arial",19) + createFont("PAM20","Arial",20) + createFont("PAM21","Arial",21) + createFont("PAM24","Arial",24) + createFont("PAM25","Arial",25) + createFont("PAM26","Arial",26) + createFont("PAM27","Arial",27) + createFont("PAM28","Arial",28) + createFont("PAM29","Arial",29) + createFont("PAM30","Arial",30) + createFont("PAM31","Arial",31) + createFont("PAM35","Arial",35) + createFont("PAM45","Arial",45) + createFont("PAM60","Arial",60) + function TRAIN_SYSTEM:ClientThink() + if not self.Train:ShouldDrawPanel("PAMScreen") then return end + if self.FilterMag then + render.PopFilterMag() + render.PopFilterMin() + end + + self.FilterMag = true + + render.PushRenderTarget(self.Train.PAM,0,0,1024, 512) + render.Clear(0, 0, 0, 0) + cam.Start2D() + render.SetScissorRect(0, 0, 640, 480, true) + render.PushFilterMag( TEXFILTER.POINT ) + render.PushFilterMin( TEXFILTER.POINT ) + surface.SetDrawColor(0,0,0) + surface.DrawRect(0,0,640,480) + if true then self:PAMScreen(self.Train) end + render.SetScissorRect(0, 0, 0, 0, false) + render.PopFilterMag() + render.PopFilterMin() + cam.End2D() + render.PopRenderTarget() + self.FilterMag = false + end + + local button = {"button_lt","button_lc","button_lb","button_ct","button_cc","button_cb"} + local button_p = {"button_p_lt","button_p_lc","button_p_lb","button_p_ct","button_p_cc","button_p_cb"} + local button_s = {"button_s_lt","button_s_lc","button_s_lb","button_s_ct","button_s_cc","button_s_cb"} + + local textbox = { + "textbox_corner_tl","textbox_corner_t","textbox_corner_tr", + "textbox_corner_l","textbox_corner_r", + "textbox_corner_bl","textbox_corner_b","textbox_corner_br", + } + local speed = { + "speed_tl","speed_t","speed_tr", + "speed_l","speed_c","speed_r", + "speed_bl","speed_b","speed_br", + } + local window = { + "window_tl","window_tc","window_tr", + "window_cl","window_cc","window_cr", + "window_bl","window_bc","window_br", + } + local function replaceNames(tbl,path) + for k,v in pairs(tbl) do tbl[k] = surface.GetTextureID((path or "models/metrostroi_train/81-717/screens/pa/buttons/")..v) end + end + replaceNames(button) + replaceNames(button_p) + replaceNames(button_s) + replaceNames(textbox) + replaceNames(speed) + replaceNames(window,"models/metrostroi_train/81-717/screens/pa/window/") + local function drawButton(x,y,w,h,button,color) + --[[ surface.SetDrawColor(255,0,0) + surface.DrawLine(x,y,x+w,y) + surface.DrawLine(x+w,y,x+w,y+h) + surface.DrawLine(x,y+h,x+w,y+h) + surface.DrawLine(x,y,x,y+h)--]] + if not button then return end + w = math.max(w-16,0) + h = math.max(h-16,0) + surface.SetDrawColor(color or Color(255,255,255)) + surface.SetTexture(button[1]) + surface.DrawTexturedRect(x,y,8,8) + surface.DrawTexturedRectUV(x+w+8,y,8,8,1,0,0,1) + if h > 0 then + surface.SetTexture(button[2]) + surface.DrawTexturedRect(x,y+8,8,h) + surface.SetTexture(button[2]) + surface.DrawTexturedRectUV(x+w+8,y+8,8,h,1,0,0,1) + --surface.DrawTexturedRectUV(x+8,y,w,h,0,0,1*(w/8),1) + end + if w > 0 then + surface.SetTexture(button[4]) + surface.DrawTexturedRectUV(x+8,y,w,8,0,0,1*(w/8),1) + surface.SetTexture(button[5]) + surface.DrawTexturedRect(x+8,y+8,w,h) + surface.SetTexture(button[6]) + surface.DrawTexturedRectUV(x+8,y+h+8,w,8,0,0,1*(w/8),1) + end + surface.SetTexture(button[3]) + surface.DrawTexturedRect(x,y+h+8,8,8) + surface.DrawTexturedRectUV(x+w+8,y+h+8,8,8,1,0,0,1) + --surface.SetTexture(button[3]) + --surface.DrawTexturedRect(x+w+8,y,8,h,0) + end + local function drawWindow(x,y,w,h,text) + w = math.max(w-16,0) + h = math.max(h-40,0) + --Color(74,95,148) + surface.SetDrawColor(color or Color(255,255,255)) + --surface.DrawRect(x+4,y+4,w,h) + surface.SetTexture(window[1]) + surface.DrawTexturedRect(x,y,8,32) + surface.SetTexture(window[2]) + surface.DrawTexturedRect(x+8,y,w,32) + surface.SetTexture(window[3]) + surface.DrawTexturedRect(x+w+8,y,8,32) + draw.SimpleText(text,"Metrostroi_PAM19",x+8+w/2,y+18, Color(28,35,53),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(text,"Metrostroi_PAM19",x+8+w/2,y+16, col or Color(255,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + surface.SetDrawColor(color or Color(255,255,255)) + surface.SetTexture(window[4]) + surface.DrawTexturedRect(x,y+32,8,h) + surface.SetTexture(window[5]) + surface.DrawTexturedRect(x+8,y+32,w,h) + surface.SetTexture(window[6]) + surface.DrawTexturedRect(x+w+8,y+32,8,h) + + surface.SetTexture(window[7]) + surface.DrawTexturedRect(x,y+h+32,8,4) + surface.SetTexture(window[8]) + surface.DrawTexturedRect(x+8,y+h+32,w,4) + surface.SetTexture(window[9]) + surface.DrawTexturedRect(x+w+8,y+h+32,8,4) + + --draw.SimpleText(text,font,x+w/2+4,y+h/2+4, Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --surface.SetTexture(button[3]) + --surface.DrawTexturedRect(x+w+8,y,8,h,0) + end + local function drawTextBox(x,y,w,h,text,font,color) + --[[ surface.SetDrawColor(255,0,0) + surface.DrawLine(x,y,x+w,y) + surface.DrawLine(x+w,y,x+w,y+h) + surface.DrawLine(x,y+h,x+w,y+h) + surface.DrawLine(x,y,x,y+h)--]] + + w = math.max(w-8,0) + h = math.max(h-8,0) + surface.SetDrawColor(color or Color(255,255,255)) + surface.DrawRect(x+4,y+4,w,h) + surface.SetTexture(textbox[1]) + surface.DrawTexturedRect(x,y,4,4) + surface.SetTexture(textbox[2]) + surface.DrawTexturedRect(x+4,y,w,4) + surface.SetTexture(textbox[3]) + surface.DrawTexturedRect(x+w+4,y,4,4) + + surface.SetTexture(textbox[4]) + surface.DrawTexturedRect(x,y+4,4,h) + surface.SetTexture(textbox[5]) + surface.DrawTexturedRect(x+w+4,y+4,4,h) + + surface.SetTexture(textbox[6]) + surface.DrawTexturedRect(x,y+h+4,4,4) + surface.SetTexture(textbox[7]) + surface.DrawTexturedRect(x+4,y+h+4,w,4) + surface.SetTexture(textbox[8]) + surface.DrawTexturedRect(x+w+4,y+h+4,4,4) + + draw.SimpleText(text,font,x+w/2+4,y+h/2+4, Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + local function drawSpeed(x,y,w,h,color) + --[[ + surface.SetDrawColor(255,0,0) + surface.DrawLine(x,y,x+w,y) + surface.DrawLine(x+w,y,x+w,y+h) + surface.DrawLine(x,y+h,x+w,y+h) + surface.DrawLine(x,y,x,y+h)--]] + --w = math.max(w-8,0) + h = math.max(h-8,0) + if w < -4 then return end + surface.SetDrawColor(color or Color(255,255,255)) + --surface.DrawRect(x+4,y+4,w,h) + surface.SetTexture(speed[1]) + surface.DrawTexturedRect(x,y,4,4) + surface.SetTexture(speed[2]) + surface.DrawTexturedRect(x+4,y,w,4) + surface.SetTexture(speed[3]) + surface.DrawTexturedRect(x+w+4,y,4,4) + + surface.SetTexture(speed[4]) + surface.DrawTexturedRect(x,y+4,4,h) + surface.SetTexture(speed[5]) + surface.DrawTexturedRectUV(x+4,y+4,w,h,0,0,1*(w/19),1) + surface.SetTexture(speed[6]) + surface.DrawTexturedRect(x+w+4,y+4,4,h) + + surface.SetTexture(speed[7]) + surface.DrawTexturedRect(x,y+h+4,4,4) + surface.SetTexture(speed[8]) + surface.DrawTexturedRect(x+4,y+h+4,w,4) + surface.SetTexture(speed[9]) + surface.DrawTexturedRect(x+w+4,y+h+4,4,4) + end + local function buttonWTextC(x,y,w,h,text,font,color,button,buttoncolor) + drawButton(x,y,w,h,button,buttoncolor) + draw.SimpleText(text,font,x+w/2,y+h/2, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + + function drawFrame(tex,x,y,w,h,alpha) + x,y,w,h = x or 0,y or 0,w or 1024,h or 512 + surface.SetTexture(tex) + surface.SetDrawColor(255,255,255,alpha) + surface.DrawTexturedRect(x,y,w,h) + --surface.DrawTexturedRectRotated(x+w/2,y+h/2,w,h,0) + end + + function stateDebug(Train) + draw.SimpleText(Format("St = %.02f",Train:GetNW2Float("PAM:TrackS",-1)),"Metrostroi_PAM30",5,20, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("S = %.02f",Train:GetNW2Float("PAM:S",-1)),"Metrostroi_PAM30",5,20+20*1, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("Sd = %.02f",Train:GetNW2Float("PAM:Sd",-1)),"Metrostroi_PAM30",5,20+20*2, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("S2 = %.02f",Train:GetNW2Float("PAM:S2",-1)),"Metrostroi_PAM30",5,20+20*3, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("S2d = %.02f",Train:GetNW2Float("PAM:S2d",-1)),"Metrostroi_PAM30",5,20+20*4, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("SSd = %.02f",Train:GetNW2Float("PAM:S",-1)-Train:GetNW2Float("PAM:S2",-1)),"Metrostroi_PAM30",5,20+20*5, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + + draw.SimpleText(Format("SensID = %0.1f",Train:GetNW2Float("PAM:LastSensorDist",-1)),"Metrostroi_PAM30",5,20+20*7, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("SensD = %0.1f",Train:GetNW2Float("PAM:SensorDist",-1)),"Metrostroi_PAM30",5,20+20*8, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("SensT = %0.1f",Train:GetNW2Float("PAM:LastSensorTime",-1)),"Metrostroi_PAM30",5,20+20*9, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("SensD1 = %0.3f",Train:GetNW2Float("PAM:LastSensorDiff",-1)),"Metrostroi_PAM30",5,20+20*10, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("SensD2 = %0.3f",Train:GetNW2Float("PAM:LastSensorDiff2",-1)),"Metrostroi_PAM30",5,20+20*11, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + + draw.SimpleText(Format("Sig = %s",Train:GetNW2String("PAM:Signal","n\\a")),"Metrostroi_PAM30",5,20+20*13, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + + draw.SimpleText(Format("ST = %d",Train:GetNW2Int("PAM:Station",-1)),"Metrostroi_PAM30",5,20+20*15, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("STd = %0.2f",Train:GetNW2Float("PAM:StationS",-1)),"Metrostroi_PAM30",5,20+20*16, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("STD = %0.1f",Train:GetNW2Float("PAM:StationD",-1)),"Metrostroi_PAM30",5,20+20*17, Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + + local state1_nkr = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state1_nkr") + local state1_kr = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state1_kr") + local function State1(Train) + local reverser = Train:GetNW2Bool("PAM:Reverser") + local xmin = reverser and 36 or 0 + drawFrame(reverser and state1_kr or state1_nkr) + local Stest,SSetup,SBack = Train:GetNW2Bool("PAM:GoodTest"),Train:GetNW2Bool("PAM:GoodSetup"),Train:GetNW2Int("PAM:GoodBack",0) + if Stest then + draw.SimpleText("ÐОРМÐ","Metrostroi_PAM28",431,163+38*0-xmin, Color(0,165,13),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + draw.SimpleText("ÐЕ ÐОРМÐ","Metrostroi_PAM28",431,163+38*0-xmin, Color(213,18,8),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + if SSetup then + draw.SimpleText("ÐОРМÐ","Metrostroi_PAM28",431,163+38*1-xmin, Color(0,165,13),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + draw.SimpleText("ÐЕ ÐОРМÐ","Metrostroi_PAM28",431,163+38*1-xmin, Color(213,18,8),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + if SBack==1 then + draw.SimpleText("ÐОРМÐ","Metrostroi_PAM28",431,163+38*2-xmin, Color(0,165,13),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + elseif SBack==-1 then + draw.SimpleText("ÐЕ ÐОРМÐ","Metrostroi_PAM28",431,163+38*2-xmin, Color(213,18,8),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + draw.SimpleText("ÐЕТ СВЯЗИ","Metrostroi_PAM28",431,163+38*2-xmin, Color(125,125,125),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + draw.SimpleText("2.2","Metrostroi_PAM28",431-5,163+38*3-xmin, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + + + draw.SimpleText("ПСР не подключен","Metrostroi_PAM27",315,318-xmin, Color(213,18,8),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + buttonWTextC(542,352-xmin,77,51,"Esc","Metrostroi_PAM30",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEsc") and button_p or button) + if reverser then + buttonWTextC(320-55,410,110,51,"Enter","Metrostroi_PAM30", Color(0,0,0), Train:GetNW2Bool("PAM:KeyEnter") and button_p or button) + --buttonWTextC(320-55,410,110,51,"Enter","Metrostroi_PAM30", SSetup and Color(0,0,0) or Color(124,124,124), (SSetup and Train:GetNW2Bool("PAM:KeyEnter")) and button_p or button) + end + end + local state1_errs = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state1_errs") + local function State1_5(Train) + drawFrame(state1_errs) + local backPA = Train:GetNW2Int("PAM:GoodBack",0) + for i=0,7 do + if i~=4 or Train:GetNW2Bool("PAM:GoodSetup") then + draw.SimpleText("ÐОРМÐ","Metrostroi_PAM28",302,164+31*i, Color(0,165,13),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText("ÐЕ ÐОРМÐ","Metrostroi_PAM28",302,164+31*i, Color(213,18,8),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + if backPA ==0 then + draw.SimpleText("ÐЕТ СВЯЗИ","Metrostroi_PAM28",471,164+31*i, Color(125,125,125),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + elseif i==4 and backPA == -1 then + draw.SimpleText("ÐЕ ÐОРМÐ","Metrostroi_PAM28",471,164+31*i, Color(213,18,8),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText("ÐОРМÐ","Metrostroi_PAM28",471,164+31*i, Color(0,165,13),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + buttonWTextC(320-82,408,164,51,"Закрыть","Metrostroi_PAM30",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEsc") and button_p or button) + end + local state2 = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state2") + local tbl = { + 1,"Выход на линию", + 2,"ПерезапуÑк", + false,"Ðазад", + "M","ТехнологичеÑкое меню", + } + local function State2(Train) + drawFrame(state2) + local sel = Train:GetNW2Int("PAM:Selected",1) + for i=1,#tbl/2 do + local color = i==sel and Color(255,255,255) or Color(0,0,0) + local y = 121+59*(i-1)+25 + if i~=2 or Train:GetNW2Bool("PAM:HaveRestart") then + if i==4 then y=y+69 end + drawButton(320-298,y-25,596,50, i==sel and button_s or button) + draw.SimpleText(tbl[i*2],"Metrostroi_PAM28",320-98,y, color,TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if tbl[i*2-1] then + draw.SimpleText(tbl[i*2-1],"Metrostroi_PAM28",320-292,y, color,TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if i==4 then + Metrostroi.DrawLine(320-290,y+13,320-272,y+13,color,3) + else + Metrostroi.DrawLine(320-290,y+13,320-277,y+13,color,3) + end + end + end + end + end + + local keyboard_na = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/keyboard_na") + local keyboard = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/keyboard") + local keys = { + "P", + "F" , "Up" , "M", + "Left","Down","Right", + "1" , "2" , "3", + "4" , "5" , "6", + "7" , "8" , "9", + "Esc" , "0" ,"Enter", + } + local keysConv = {Up="â–²",Left="â—„",Down="â–¼",Right="â–º",} + local function drawKeyboard(Train,x,y) + local selected = Train:GetNW2String("PAM:Touching","") ~= "" + drawFrame(selected and keyboard or keyboard_na,x,y,256,512) + local colors = Color(0,0,0,255*0.3) + for i,keyName in ipairs(keys) do + local touched = not selected and Train:GetNW2String("PAM:LastToucn") == keyName + local touching = Train:GetNW2String("PAM:Touching") == keyName + local col = Color(255,255,255,colors.a) + if touching then col = Color(245,46,18) end + if touched then + col = Color(255,255,255) + end + local key = i+1 + local xp = key%3 + local yp = math.floor(key/3) + buttonWTextC(x+5+60*xp,y+32+49*yp,60,49,keysConv[keyName] or keyName,"Metrostroi_PAM27",Color(0,0,0), Train:GetNW2Bool("PAM:Key"..keyName) and button_p or button,col) + end + end + local combobox = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/combobox") + local combobox_g = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/combobox_g") + local function comboBox(Train,x,y) + local count = Train:GetNW2Int("PAM:ElemCount",0) + if count <= 0 then return end + local w,h = 260,163 + drawFrame(combobox,x,y,256,256) + for i=1,Train:GetNW2String("PAM:ElemCount",0) do + local text = Train:GetNW2String("PAM:Elem"..i) + local tab = text:find("\t") + if tab then + draw.SimpleText(text:sub(1,tab-1),"Metrostroi_PAM20",x+13,y+27-10+18*(i-1), Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(text:sub(tab+1,-1),"Metrostroi_PAM20",x+13+35,y+27-10+18*(i-1), Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + draw.SimpleText(text,"Metrostroi_PAM20",x+13,y+27-5+18*(i-1), Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + --x+28+18*i Train:SetNW2String("PAM:Elem"..iS,id.."\t"..(name or id)) + end + --[[ surface.SetDrawColor(Color(255,0,0)) + surface.DrawLine(x+219,y+5,x+219+31,y+5) + surface.DrawLine(x+219,y+5,x+219,y+5+15) + surface.DrawLine(x+219,y+5+15,x+219+31,y+5+15) + surface.DrawLine(x+219+31,y+5,x+219+31,y+5+15) + + surface.SetDrawColor(Color(0,255,0)) + surface.DrawLine(x+219,y+128,x+219+31,y+128) + surface.DrawLine(x+219,y+128,x+219,y+128+14) + surface.DrawLine(x+219,y+128+14,x+219+31,y+128+14) + surface.DrawLine(x+219+31,y+128,x+219+31,y+128+14) + + surface.SetDrawColor(Color(0,0,255)) + surface.DrawLine(x+219,y+143,x+219+31,y+143) + surface.DrawLine(x+219,y+143,x+219,y+143+14) + surface.DrawLine(x+219,y+143+14,x+219+31,y+143+14) + surface.DrawLine(x+219+31,y+143,x+219+31,y+143+14)--]] + + end + local state3 = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state3") + local state3k = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state3k") + local keyb_icon = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/buttons/keyb_icon") + local function State3(Train) + local selected = Train:GetNW2String("PAM:Touching") ~= "" + local keyboard = Train:GetNW2Bool("PAM:Keyboard") + if keyboard then drawFrame(state3k,640-512,nil,512) else drawFrame(state3) end + local sel = Train:GetNW2Int("PAM:Selected",1) + local xadd = keyboard and 1 or 0 + drawTextBox(374,103+35*0,210,35,Train:GetNW2String("PAM:StationS",""),"Metrostroi_PAM30",not selected and sel == 1 and Color(79,252,246)) + drawTextBox(374,103+35*1,210,35,Train:GetNW2String("PAM:PathS",""),"Metrostroi_PAM30",not selected and sel == 2 and Color(79,252,246)) + drawTextBox(374,103+35*2,210,35,Train:GetNW2String("PAM:RouteNumber",""),"Metrostroi_PAM30",not selected and sel == 3 and Color(79,252,246)) + drawTextBox(374,103+35*3,210,35,Train:GetNW2String("PAM:DriverNumber",""),"Metrostroi_PAM30",not selected and sel == 4 and Color(79,252,246)) + drawTextBox(374,103+35*4,210,35,os.date("!%d.%m.%y %H:%M:%S",Metrostroi.GetSyncTime()),"Metrostroi_PAM30",sel == 5 and Color(79,252,246)) + if sel==1 then comboBox(Train,374,103+35*1) end + local err = Train:GetNW2String("PAM:EnterError","") + if err ~= "" then draw.SimpleText(err,"Metrostroi_PAM30",320+xadd*90,300, Color(213,18,8),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + local currStation = Train:GetNW2String("PAM:CurrentStationS") + if currStation ~= "" then draw.SimpleText(currStation,"Metrostroi_PAM30",320+xadd*90,330, Color(0,165,13),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + buttonWTextC(156+xadd*127,369,120,51,"Ввод","Metrostroi_PAM30",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEnter") and button_p or button) + buttonWTextC(286+xadd*127,369,120,51,"Ðазад","Metrostroi_PAM30",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEsc") and button_p or button) + if Train:GetNW2Bool("PAM:KeyKeyB") or keyboard then drawButton(443+xadd*100,369,40,51, keyboard and button_p or button) end + surface.SetDrawColor(255,255,255) + surface.SetTexture(keyb_icon) + surface.DrawTexturedRect(447+xadd*100,363,32,64) + if keyboard then drawKeyboard(Train,22,47) end + end + local state35 = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state35") + local state35k = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state35k") + local function State35(Train) + local selected = Train:GetNW2String("PAM:Touching") ~= "" + local keyboard = Train:GetNW2Bool("PAM:Keyboard") + + if keyboard then drawFrame(state35k,640-512,nil,512) else drawFrame(state35) end + local sel = Train:GetNW2Int("PAM:Selected",1) + local xadd = keyboard and 1 or 0 + drawTextBox(374,103+35*0,210,35,Train:GetNW2String("PAM:StationS",""),"Metrostroi_PAM30",not selected and sel == 1 and Color(79,252,246)) + drawTextBox(374,103+35*1,210,35,Train:GetNW2String("PAM:PathS",""),"Metrostroi_PAM30",not selected and sel == 2 and Color(79,252,246)) + if sel==1 then comboBox(Train,374,103+35*1) end + local err = Train:GetNW2String("PAM:EnterError","") + if err ~= "" then draw.SimpleText(err,"Metrostroi_PAM30",320+xadd*90,260, Color(213,18,8),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + local currStation = Train:GetNW2String("PAM:CurrentStationS") + if currStation ~= "" then draw.SimpleText(currStation,"Metrostroi_PAM30",320+xadd*90,330, Color(0,165,13),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + + buttonWTextC(156+xadd*127,369,120,51,"Ввод","Metrostroi_PAM30",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEnter") and button_p or button) + buttonWTextC(286+xadd*127,369,120,51,"Ðазад","Metrostroi_PAM30",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEsc") and button_p or button) + + if Train:GetNW2Bool("PAM:KeyKeyB") or keyboard then drawButton(443+xadd*100,369,40,51, keyboard and button_p or button) end + surface.SetDrawColor(255,255,255) + surface.SetTexture(keyb_icon) + surface.DrawTexturedRect(447+xadd*100,363,32,64) + + if keyboard then drawKeyboard(Train,22,47,selected) end + end + + local state4 = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state4") + local function State4(Train) + drawFrame(state4) + buttonWTextC(320-19,278,76,38,"Ввод","Metrostroi_PAM30",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEnter") and button_p or button) + end + + local function drawText2(x,y,text,state,col) + if state then + draw.SimpleText(text,"Metrostroi_PAM30",x,y, col or Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText(text,"Metrostroi_PAM30",x+1,y+1, Color(173,178,172),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(text,"Metrostroi_PAM30",x,y, col or Color(142,147,146),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + local driveModes = { + [0]="?", + "ОС", + "КС", + "ÐÐ’", + "ОР", + "КР", + } + + local KVModes = { + [-4]="Т2", + [-3]="Т1а", + [-2]="Т1", + [-1]="ОХТ", + [0]="ОД", + [1]="Ð¥1", + [2]="Ð¥2", + [3]="Ð¥3", + } + local menus = { + {"Проверка","ÑкатываниÑ"}, + {"Движение","без КД"}, + "Смена линии", + {"Движение","транзитом"}, + {"Движение"," при Vд=0"}, + {"Открытие дверей","на перегоне"}, + {"Движение","без ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð›ÐŸÐ¢"}, + {"Зонный","оборот"}, + {"ФикÑациÑ","Ñтанции"}, + [12]="Закрыть" + } + local acceptions = { + [-7] = "Подтверди переход на другую линию", + [-6] = "Подтверди оÑаживание при пожаре", + [-4] = {"Подтверди движение по Ñтанционным","путÑм"}, + [-3] = "Подтверди переход в ОС", + [-2] = "Подтверди переход в КС", + [-1] = "Подтверди переход в ÐÐ’", + "Подтвердите проверку ÑкатываниÑ", + "Подтвердите движение без КД", + "Подтвердите Ñмену линии", + "Подтвердите движение транзитом", + "Подтвердите движение при Vд = 0", + "Подтвердите открытие дверей на перегоне", + "Подтвердите движение без ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð›ÐŸÐ¢", + "Подтвердите зонный оборот", + [11]="Подтвердите отмену проверки ÑкатываниÑ", + [12]="Подтвердите отмену Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð±ÐµÐ· КД", + [13]="Подтвердите отмену Ñмены линии", + [14]="Подтвердите отмену Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ñ‚Ñ€Ð°Ð½Ð·Ð¸Ñ‚Ð¾Ð¼", + [15]="Подтвердите отмену Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ Vд = 0", + [16]={"Подтвердите отмену Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ на","перегоне"}, + [17]="Подтвердите воÑÑтановление ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð›ÐŸÐ¢", + [18]="Подтвердите отмену зонного оборота", + } + local menusReset = { + {"Проверка","ÑкатываниÑ"}, + {"Движение","без КД"}, + "Смена линии", + "Транзит", + {"Движение"," при Vд=0"}, + {"Открытие дверей","на перегоне"}, + {"Движение","без ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð›ÐŸÐ¢"}, + "Оборот", + [11]="Закрыть" + } + + local errors = { + "Открой правые двери", + "Открой левые двери", + "Переведи РР вперед", + "Ðет ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Ðет ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Ðет блокировки дверей", + "Разблокируй двери", + "Ðе открыл двери! ПодтвердиÑÑŒ ПБ", + "ÐеÑработка ДКП! ЗафикÑируйте Ñтанцию", + "ОтпуÑти пневмотормоз", + "Выключите тумблер ВЗП", + "Движение при Vд=0", + "Ðет набора ÑкороÑти", + "Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° ÑброÑьте Ñ Ñ…Ð¾Ð´Ð°", + "Доложи диÑпетчеру Vд=0", + "Выход на линию", + "УÑтанови реверÑивную рукоÑтку", + "Ðеобходимо дополнительное включение", + "РР в другой голове", + "Переход в ОС", + "Переход в КС", + "ПоÑтоÑнное Ñлектропитание на КДЛ/КДП", + "Введён транзит", + "ОтÑутÑтвует КСОТ", + "Оборот", + "Режим ОС", + "Открой двери Ñтанции", + "Перейди в КС", + "Ðет Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ñ Ð½Ð° 34 проводе(ЛКТ)", + "ЕÑть питание на 34 проводе", + + [51]={"Контроль дверей отменён"}, + [52]={"Контроль дверей воÑÑтановлен"}, + [53]={"Движение по Ñтанционным","путÑм запрещено",true}, + [54]={"Разрешено движение","при Vд = 0"}, + [55]={"Движение по Ñтанционным","путÑм разрешено"}, + [56]={"Открытие дверей на","перегоне разрешено"}, + [57]={"Открытие дверей на","перегоне запрещено",true}, + [58]={"Контроль ЛПТ отменён"}, + [59]={"Контроль ЛПТ","воÑÑтановлен"}, + [60]={"Движение под оборот","разрешено"}, + [61]={"Движение под оборот","запрещено",true}, + [62]={"Оборот отменён"}, + [63]={"Транзит разрешён"}, + [64]={"Транзит запрещён",true}, + [65]={"Транзит отменён"}, + [66]={"ОÑаживание при пожаре","разрешено"}, + [67]={"ОÑаживание при пожаре","запрещено",true}, + [68] = {"Режим КС разрешён"}, + [69] = {"Режим КС запрещён",true}, + [70] = {"Режим ОС разрешён"}, + [71] = {"Движение по Ñтанционным","путÑм",true}, + [72] = {"Проверка ÑкатываниÑ","запрещена",true} + } + local state5 = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state5_main") + local state5k = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state5k_main") + local state5b = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state5b_main") + local state5kb = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/state5kb_main") + local question = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/question") + local slider = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/buttons/slider") + local function State5(Train,isARS) + local speed = Train:GetNW2Int("PAM:Vf") + local mode = Train:GetNW2Int("PAM:Mode",0) + local currentStation = Train:GetNW2String("PAM:CurrentStation") + local targetStation = Train:GetNW2String("PAM:TargetStation") + local speedLimit = Train:GetNW2Int("PAM:SpeedLimit") + + local driveMode = Train:GetNW2Int("PAM:DriveMode",0) + local KVMode = Train:GetNW2Int("PAM:KVMode",0) + + local state = Train:GetNW2Int("PAM:State5",-100) + local stateAcc = Train:GetNW2Int("PAM:State5Accept",0) + local sel = Train:GetNW2Int("PAM:Selected",1) + local block = state~=-100 or stateAcc~=0 + + local ksd = Train:GetNW2Bool("PAM:KSD") + + surface.SetDrawColor(1,54,2) + surface.DrawRect(2,70,541,35) + if Train:GetNW2Bool("PAM:OXT") then + drawSpeed(3,71,542/100*speed-5,33,Color(240,240,40)) + else + drawSpeed(3,71,542/100*speed-5,33,Color(40,220,40)) + end + if block then + drawFrame(ksd and state5kb or state5b) + else + drawFrame(ksd and state5k or state5) + end + + + local date = Metrostroi.GetSyncTime() + draw.SimpleText(os.date("!%d.%m.%y",date),"Metrostroi_PAM24",57,11, Color(199,199,199),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(os.date("!%H:%M:%S",date),"Metrostroi_PAM28",59,32, Color(199,199,199),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + --Train:GetNW2Int("PAM:Vf") + --Train:GetNW2Int("PAM:Vd") + --Train:GetNW2String("PAM:RC") + --Train:GetNW2Float("PAM:S") + --Ð›Ð¸Ð½Ð¸Ñ + draw.SimpleText(isARS and "?" or Train:GetNW2String("PAM:Line"),"Metrostroi_PAM28",239,13, Color(222,234,58),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --Путь + draw.SimpleText(isARS and "?" or Train:GetNW2String("PAM:Path"),"Metrostroi_PAM28",371,13, Color(222,234,58),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + --Ð¢ÐµÐºÑƒÑ‰Ð°Ñ + draw.SimpleText(speed,"Metrostroi_PAM45",605,67, Color(20,239,32),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + --Ограничение + if speedLimit == -1 then + draw.SimpleText("ÐЧ","Metrostroi_PAM45",605,104, Color(232,13,12),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + elseif speedLimit <= 20 then + draw.SimpleText(speedLimit,"Metrostroi_PAM45",605,104, Color(232,13,12),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + else + draw.SimpleText(speedLimit,"Metrostroi_PAM45",605,104, Color(246,242,0),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + end + + if Train:GetNW2Bool("PAM:State5_5") then draw.SimpleText("Vд=0","Metrostroi_PAM28",145,70, Color(225,235,110),TEXT_ALIGN_CENTER,TEXT_ALIGN_BOTTOM) end + if Train:GetNW2Bool("PAM:State5_2") then draw.SimpleText("КД","Metrostroi_PAM28",195,70, Color(225,235,110),TEXT_ALIGN_CENTER,TEXT_ALIGN_BOTTOM) end + if Train:GetNW2Bool("PAM:State5_4") then draw.SimpleText("ТР","Metrostroi_PAM28",235,70, Color(225,235,110),TEXT_ALIGN_CENTER,TEXT_ALIGN_BOTTOM) end + if Train:GetNW2Bool("PAM:State5_8") then draw.SimpleText("ОБ","Metrostroi_PAM28",275,70, Color(225,235,110),TEXT_ALIGN_CENTER,TEXT_ALIGN_BOTTOM) end + if Train:GetNW2Bool("PAM:State5_3") then draw.SimpleText("СЛ","Metrostroi_PAM28",315,70, Color(225,235,110),TEXT_ALIGN_CENTER,TEXT_ALIGN_BOTTOM) end + if Train:GetNW2Bool("PAM:State5_7") then draw.SimpleText("ЛПТ","Metrostroi_PAM28",365,70, Color(225,235,110),TEXT_ALIGN_CENTER,TEXT_ALIGN_BOTTOM) end + if Train:GetNW2Bool("PAM:State5_6") then draw.SimpleText("ДП","Metrostroi_PAM28",420,70, Color(225,235,110),TEXT_ALIGN_CENTER,TEXT_ALIGN_BOTTOM) end + + if speedLimit == -1 then + draw.SimpleText("ÐЧ","Metrostroi_PAM24",5,122, Color(232,13,12),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(6,68,6,107,Color(246,242,0),3) + elseif speedLimit == 0 then + draw.SimpleText(0,"Metrostroi_PAM24",5,122, Color(232,13,12),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(6,68,6,107,Color(246,242,0),3) + elseif speedLimit <= 20 then + draw.SimpleText(0,"Metrostroi_PAM24",5+5.42*20,122, Color(232,13,12),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(6+5.42*20,68,6+5.42*20,107,Color(246,242,0),3) + else + draw.SimpleText(speedLimit,"Metrostroi_PAM24",5+5.42*speedLimit,122, Color(246,242,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(6+5.42*speedLimit,68,6+5.42*speedLimit,107,Color(246,242,0),3) + end + local mess = Train:GetNW2Int("PAM:CurrentMessage",0) + if mode == 6 then + if mess==0 then mess = 21 end + elseif mode == 3 then + draw.SimpleText("T = 00:00:00","Metrostroi_PAM31",0,412, Color(20,239,32),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("пр","Metrostroi_PAM15",20,416, Color(20,239,32),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("Ðагон= 0 Ñ"),"Metrostroi_PAM28",175,411, Color(20,239,32),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("T ="),"Metrostroi_PAM28",355,411, Color(20,239,32),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("оÑÑ‚","Metrostroi_PAM15",374,416, Color(20,239,32),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(math.Clamp(Train:GetNW2Int("PAM:BoardTime",0),-999,999),"Metrostroi_PAM28",443,411, Color(20,239,32),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("Ñ","Metrostroi_PAM28",470+3,411, Color(20,239,32),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("S=%.2fм",Train:GetNW2Float("PAM:S")),"Metrostroi_PAM31",639,412, Color(20,239,32),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + + if not Train:GetNW2Bool("PAM:Shunt") then + if mess == 0 then + draw.SimpleText(currentStation,"Metrostroi_PAM35",320,222, Color(20,239,32),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("%d путь",Train:GetNW2String("PAM:Path")),"Metrostroi_PAM35",320,258, Color(20,239,32),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + if targetStation=="оборот" then + draw.SimpleText("оборот","Metrostroi_PAM26",639,11, Color(154,154,154),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + else + draw.SimpleText(Format("до %s",targetStation),"Metrostroi_PAM26",639,11, Color(154,154,154),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + end + draw.SimpleText(currentStation,"Metrostroi_PAM25",639,34, Color(20,239,32),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + end + + elseif mode == 2 then + draw.SimpleText(Format("РЦ= %s",Train:GetNW2String("PAM:RC")),"Metrostroi_PAM31",0,412, Color(27,234,30),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + --draw.SimpleText(Format("Пикет="),"Metrostroi_PAM28",141,411, Color(27,234,30),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("Уклон= %d",Train:GetNW2Int("PAM:Slope",0)),"Metrostroi_PAM28",349,411, Color(27,234,30),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("S=%.2fм",Train:GetNW2Float("PAM:S")),"Metrostroi_PAM31",639,412, Color(27,234,30),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("до %s",targetStation),"Metrostroi_PAM26",639,11, Color(154,154,154),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + draw.SimpleText(currentStation,"Metrostroi_PAM25",639,34, Color(154,154,154),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + elseif mode == 4 or mode == 5 then + draw.SimpleText("РЦ= ","Metrostroi_PAM31",0,412, Color(27,234,30),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + --draw.SimpleText(Format("Пикет="),"Metrostroi_PAM28",141,411, Color(27,234,30),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("Уклон=","Metrostroi_PAM28",349,411, Color(27,234,30),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("S=%.2fм",Train:GetNW2Float("PAM:S")),"Metrostroi_PAM31",639,412, Color(27,234,30),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + draw.SimpleText(mode == 5 and "депо" or "оборот","Metrostroi_PAM26",639,11, Color(154,154,154),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + draw.SimpleText(currentStation,"Metrostroi_PAM25",639,34, Color(154,154,154),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + elseif not isARS then + draw.SimpleText("РЦ=","Metrostroi_PAM31",0,412, Color(27,234,30),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + --draw.SimpleText("Пикет=","Metrostroi_PAM28",141,411, Color(27,234,30),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("Уклон=","Metrostroi_PAM28",349,411, Color(27,234,30),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("S=%.2fм",Train:GetNW2Float("PAM:S")),"Metrostroi_PAM31",639,412, Color(27,234,30),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + draw.SimpleText("выход на линию","Metrostroi_PAM26",639,11, Color(154,154,154),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + draw.SimpleText(currentStation,"Metrostroi_PAM25",639,34, Color(154,154,154),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + else + draw.SimpleText("Режим ÐРС","Metrostroi_PAM60",320,200, Color(238,129,31),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + if mess>0 then + local mess = errors[50+mess] + if #mess == 1 or #mess==2 and mess[2]==true then + draw.SimpleText(mess[1],"Metrostroi_PAM35",320,isARS and 280 or 240, mess[2] and Color(238,129,31) or Color(20,239,32),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText(mess[1],"Metrostroi_PAM35",320,isARS and 262 or 222, mess[3] and Color(238,129,31) or Color(20,239,32),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(mess[2],"Metrostroi_PAM35",320,isARS and 298 or 258, mess[3] and Color(238,129,31) or Color(20,239,32),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + local err = Train:GetNW2Int("PAM:CurrentError",0) + if err>0 then + draw.SimpleText(errors[err],"Metrostroi_PAM31",10,385, Color(225,235,110),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + + --local function draw + draw.SimpleText("1 ÐÐ’","Metrostroi_PAM29",3,173, Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(4,173+14,16,173+14,Color(206,206,206),3) + draw.SimpleText("1 ÐÐ’","Metrostroi_PAM29",2,172, Color(140,140,140),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(3,172+14,15,172+14,Color(140,140,140),3) + draw.SimpleText("7 Лин","Metrostroi_PAM29",570+1,262+1, Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(571,262+14+1,584,262+14+1,Color(206,206,206),3) + draw.SimpleText("7 Лин","Metrostroi_PAM29",570,262, Color(140,140,140),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(570,262+14,583,262+14,Color(140,140,140),3) + if isARS then + draw.SimpleText("P Маш","Metrostroi_PAM29",3,306, Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(4,305+14,18,305+14,Color(206,206,206),3) + draw.SimpleText("P Маш","Metrostroi_PAM29",2,305, Color(140,140,140),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(3,304+14,17,304+14,Color(140,140,140),3) + + draw.SimpleText("4 СтП","Metrostroi_PAM29",571,171, Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(571,171+14,584,171+14,Color(206,206,206),3) + draw.SimpleText("4 СтП","Metrostroi_PAM29",570,170, Color(140,140,140),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(570,170+14,583,170+14,Color(140,140,140),3) + + draw.SimpleText("6 Пож","Metrostroi_PAM29",571,217, Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(571,216+15,584,216+15,Color(206,206,206),3) + draw.SimpleText("6 Пож","Metrostroi_PAM29",570,216, Color(140,140,140),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(570,216+14,583,216+14,Color(140,140,140),3) + draw.SimpleText("8 Отм","Metrostroi_PAM29",571,309, Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(571,308+15,584,308+15,Color(206,206,206),3) + draw.SimpleText("8 Отм","Metrostroi_PAM29",570,308, Color(140,140,140),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(570,308+14,583,308+14,Color(140,140,140),3) + draw.SimpleText("9 ФСт","Metrostroi_PAM29",571,355, Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(571,354+15,584,354+15,Color(206,206,206),3) + draw.SimpleText("9 ФСт","Metrostroi_PAM29",570,354, Color(140,140,140),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(570,354+14,583,354+14,Color(140,140,140),3) + for i=block and 1 or 0,0,-1 do + local blocked = i==0 and block + draw.SimpleText("2 КС","Metrostroi_PAM29",2+i,218+i, ((driveMode==2 or driveMode==4) and i==0) and Color(85,75,225) or blocked and Color(140,140,140) or Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(3+i,218+14+i,15+i,218+14+i,((driveMode==2 or driveMode==4) and i==0) and Color(85,75,225) or blocked and Color(140,140,140) or Color(206,206,206),3) + if ksd then + draw.SimpleText("3 ОС","Metrostroi_PAM29",2+i,264+i, ((driveMode==1 or driveMode==5) and i==0) and Color(85,75,225) or blocked and Color(140,140,140) or Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(3+i,264+14+i,15+i,264+14+i,((driveMode==1 or driveMode==5) and i==0) and Color(85,75,225) or blocked and Color(140,140,140) or Color(206,206,206),3) + end + draw.SimpleText("8 Отм","Metrostroi_PAM29",570+i,308+i, blocked and Color(140,140,140) or Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(570+i,308+14+i,583+i,308+14+i,blocked and Color(140,140,140) or Color(206,206,206),3) + end + else + for i=block and 1 or 0,0,-1 do + local blocked = i==0 and block + draw.SimpleText("2 КС","Metrostroi_PAM29",2+i,218+i, ((driveMode==2 or driveMode==4) and i==0) and Color(85,75,225) or blocked and Color(140,140,140) or Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(3+i,218+14+i,15+i,218+14+i,((driveMode==2 or driveMode==4) and i==0) and Color(85,75,225) or blocked and Color(140,140,140) or Color(206,206,206),3) + if ksd then + draw.SimpleText("3 ОС","Metrostroi_PAM29",2+i,264+i, ((driveMode==1 or driveMode==5) and i==0) and Color(85,75,225) or blocked and Color(140,140,140) or Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(3+i,264+14+i,15+i,264+14+i,((driveMode==1 or driveMode==5) and i==0) and Color(85,75,225) or blocked and Color(140,140,140) or Color(206,206,206),3) + end + draw.SimpleText("P Маш","Metrostroi_PAM29",2+i,305+i, blocked and Color(140,140,140) or Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(3+i,304+14+i,17+i,304+14+i,blocked and Color(140,140,140) or Color(206,206,206),3) + + + draw.SimpleText("4 СтП","Metrostroi_PAM29",570+i,170+i, blocked and Color(140,140,140) or Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(570+i,170+14+i,583+i,170+14+i,blocked and Color(140,140,140) or Color(206,206,206),3) + draw.SimpleText("6 Пож","Metrostroi_PAM29",570+i,216+i, (Train:GetNW2Bool("PAM:State5_-6") and i==0) and Color(85,75,225) or blocked and Color(140,140,140) or Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(570+i,216+14+i,583+i,216+14+i,(Train:GetNW2Bool("PAM:State5_-6") and i==0) and Color(85,75,225) or blocked and Color(140,140,140) or Color(206,206,206),3) + --draw.SimpleText("7 Лин","Metrostroi_PAM29",570+i,262+i, blocked and Color(140,140,140) or Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + --Metrostroi.DrawLine(570+i,262+14+i,583,262+14+i,blocked and Color(140,140,140) or Color(206,206,206),3) + draw.SimpleText("8 Отм","Metrostroi_PAM29",570+i,308+i, blocked and Color(140,140,140) or Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(570+i,308+14+i,583+i,308+14+i,blocked and Color(140,140,140) or Color(206,206,206),3) + draw.SimpleText("9 ФСт","Metrostroi_PAM29",570+i,354+i, (mode == 3 and i==0) and Color(85,75,225) or blocked and Color(140,140,140) or Color(206,206,206),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(570+i,354+14+i,583+i,354+14+i,(mode == 3 and i==0) and Color(85,75,225) or blocked and Color(140,140,140) or Color(206,206,206),3) + end + end + if state==0 then + surface.SetDrawColor(192,192,192,255) + surface.DrawRect(0,119,636,248,0) + for i,text in pairs(menus) do + local color = (i==3 or isARS and (i==3 or i==4 or i==8 or i==9)) and Color(113,113,113) or i==sel and Color(255,255,255) or Color(0,0,0) + + local x,y = 212*((i-1)%3),119+(math.ceil(i/3)-1)*62 + drawButton(x,y,212,62, i==sel and button_s or button) + if type(text)=="table" then + draw.SimpleText(text[1],"Metrostroi_PAM21",x+106+10,y+31-12, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(text[2],"Metrostroi_PAM21",x+106+10,y+31+12, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText(text,"Metrostroi_PAM21",x+106+10,y+31, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + if i<12 then + draw.SimpleText(i%10,"Metrostroi_PAM35",x+17,y+31, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(x+10,y+48,x+24,y+48,color,3) + end + end + elseif state==-1 then + drawWindow(146,146, 357,201,"Регулировка ÑркоÑти") + buttonWTextC(161,192,75,34,"<","Metrostroi_PAM25",Color(0,0,0),Train:GetNW2Bool("PAM:KeyLeft") and button_p or button) + buttonWTextC(413,192,75,34,">","Metrostroi_PAM25",Color(0,0,0),Train:GetNW2Bool("PAM:KeyRight") and button_p or button) + buttonWTextC(277,277,95,50,"Закрыть","Metrostroi_PAM25",Color(0,0,0),(Train:GetNW2Bool("PAM:KeyEsc") or Train:GetNW2Bool("PAM:KeyEnter")) and button_p or button) + Metrostroi.DrawRectOL(246,203,157,4,Color(113,113,113),1,Color(200,200,200)) + for i=0,10 do + Metrostroi.DrawLine(251+i*15,216,251+i*15,220,Color(113,113,113),2) + end + draw.SimpleText("ЯркоÑть:","Metrostroi_PAM25",246,251, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + drawTextBox(340,237,63,29,Format("%d%%",Train:GetNW2Float("PAM:Brightness",1)*100),"Metrostroi_PAM25") + surface.SetDrawColor(255,255,255) + surface.SetTexture(slider) + surface.DrawTexturedRect(251-5+Train:GetNW2Float("PAM:Brightness",1)*150,216-17,16,16) + + elseif state==8 then + drawWindow(0,120, 640,241,"Зонный оборот") + local count = Train:GetNW2Int("PAM:ElemCount",0) + for i=1,math.min(9,Train:GetNW2String("PAM:ElemCount",0)) do + local selected = i==sel + local color = selected and Color(255,255,255) or Color(0,0,0) + + local x,y = 4+210*((i-1)%3),152+(math.ceil(i/3)-1)*50 + drawButton(x,y,210,50, selected and button_s or button) + local text = Train:GetNW2String("PAM:Elem"..i) + draw.SimpleText(text:sub(1,-2),selected and "Metrostroi_PAM20" or "Metrostroi_PAM21",x+106+10,y+24-10, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + if text[#text]=="1" then + draw.SimpleText("(непр) оборот",selected and "Metrostroi_PAM20" or "Metrostroi_PAM21",x+106+10,y+24+10, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText("оборот",selected and "Metrostroi_PAM20" or "Metrostroi_PAM21",x+106+10,y+24+10, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + draw.SimpleText(i%10,"Metrostroi_PAM31",x+17,y+24, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(x+10,y+37,x+24,y+37,color,2) + --x+28+18*i Train:SetNW2String("PAM:Elem"..iS,id.."\t"..(name or id)) + end + buttonWTextC(4+210*1.5-145,152+3*50,140,50,"Да - Enter","Metrostroi_PAM25",Color(0,0,0),Train:GetNW2Bool("PAM:KeyEnter") and button_p or button) + buttonWTextC(4+210*1.5+5,152+3*50,140,50,"Ðет - Esc","Metrostroi_PAM25",Color(0,0,0),Train:GetNW2Bool("PAM:KeyEsc") and button_p or button) + if Train:GetNW2Bool("PAM:ElemCountStart") then + buttonWTextC(4+210*0,152+3*50,80,50,"â—„","Metrostroi_PAM25",Color(0,0,0),Train:GetNW2Bool("PAM:KeyLeft") and button_p or button) + end + if Train:GetNW2Bool("PAM:ElemCountEnd") then + buttonWTextC(4+210*3-80,152+3*50,80,50,"â–º","Metrostroi_PAM25",Color(0,0,0),Train:GetNW2Bool("PAM:KeyRight") and button_p or button) + end + elseif state==-8 then + drawWindow(0,120, 640,241,"Введенные запроÑÑ‹") + for i,text in pairs(menusReset) do + if Train:GetNW2Bool("PAM:State5_"..i) or i==11 then + local selected = i==sel + local disabled = i==5 or i==6 + local color = disabled and Color(113,113,113) or selected and Color(255,255,255) or Color(0,0,0) + + local x,y = 4+210*((i-1)%3),152+(math.ceil(i/3)-1)*50 + drawButton(x,y,209,49, selected and button_s or button) + if type(text)=="table" then + draw.SimpleText(text[1],selected and "Metrostroi_PAM20" or "Metrostroi_PAM21",x+106+10,y+24-10, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(text[2],selected and "Metrostroi_PAM20" or "Metrostroi_PAM21",x+106+10,y+24+10, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText(text,selected and "Metrostroi_PAM20" or "Metrostroi_PAM21",x+106+10,y+24, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + if i<11 and not disabled then + draw.SimpleText(i%10,"Metrostroi_PAM31",x+17,y+24, color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawLine(x+10,y+37,x+24,y+37,color,2) + end + end + end + Metrostroi.DrawLine(4,202,640-8,202,Color(113,113,113),2) + Metrostroi.DrawLine(4,252,640-8,252,Color(113,113,113),2) + Metrostroi.DrawLine(4,302,640-8,302,Color(113,113,113),2) + Metrostroi.DrawLine(214,154,214,351,Color(113,113,113),2) + Metrostroi.DrawLine(424,154,424,351,Color(113,113,113),2) + elseif state==1 then + drawWindow(82,160, 484,180,"Режим проверки ÑкатываниÑ") + buttonWTextC(139,270,370,50,"Завершить Ñкатывание (Esc)","Metrostroi_PAM30",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEsc") and button_p or button) + local dist = Train:GetNW2Float("PAM:RollDist",0) + draw.SimpleText("Скатывание на","Metrostroi_PAM30",110,225, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + + draw.SimpleText(Format("%.2f",dist),"Metrostroi_PAM35",380,225, Color(0,0,0),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + + draw.SimpleText("м","Metrostroi_PAM30",395,225, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if dist >= 0 then + draw.SimpleText("вперед","Metrostroi_PAM30",440,225, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + draw.SimpleText("назад","Metrostroi_PAM30",440,225, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + elseif state==-5 then + local selected = Train:GetNW2String("PAM:Touching") ~= "" + local keyboard = Train:GetNW2Bool("PAM:Keyboard") + + drawWindow(keyboard and 80+112 or 80,145,keyboard and 480-(112-79) or 480,261,"Смена машиниÑта") + local sel = Train:GetNW2Int("PAM:Selected",1) + local xadd = keyboard and 1 or 0 + if keyboard then + draw.SimpleText("Ðомер маршрута","Metrostroi_PAM27",99+112-10,201, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("Табельный номер","Metrostroi_PAM27",99+112-10,201+39, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + draw.SimpleText("Ðомер маршрута","Metrostroi_PAM27",99,201, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("Табельный номер","Metrostroi_PAM27",99,201+39, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + drawTextBox(320+102*xadd,190+39*0,225-15*xadd,31,Train:GetNW2String("PAM:RouteNumber",""),"Metrostroi_PAM30",not selected and sel == 1 and Color(79,252,246)) + drawTextBox(320+102*xadd,190+39*1,225-15*xadd,31,Train:GetNW2String("PAM:DriverNumber",""),"Metrostroi_PAM30",not selected and sel == 2 and Color(79,252,246)) + local err = Train:GetNW2String("PAM:EnterError","") + if err ~= "" then draw.SimpleText(err,"Metrostroi_PAM30",325+xadd*90,275, Color(213,18,8),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + + buttonWTextC(190+xadd*79,320,75+1*65,50,"Ввод","Metrostroi_PAM30",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEnter") and button_p or button) + buttonWTextC(288+42+10+xadd*79,320,120+1*20,50,"Закрыть","Metrostroi_PAM30",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEsc") and button_p or button) + + if Train:GetNW2Bool("PAM:KeyKeyB") or keyboard then drawButton(501+xadd*79,320,40,51, keyboard and button_p or button) end + surface.SetDrawColor(255,255,255) + surface.SetTexture(keyb_icon) + surface.DrawTexturedRect(505+xadd*79,314,32,64) + + if keyboard then drawKeyboard(Train,0,47,selected) end + elseif state==9 then + local selected = Train:GetNW2String("PAM:Touching") ~= "" + local keyboard = Train:GetNW2Bool("PAM:Keyboard") + + drawWindow(keyboard and 82+130 or 82,145,keyboard and 484-(130-40) or 484,261,"ФикÑÐ°Ñ†Ð¸Ñ Ñтанции") + local sel = Train:GetNW2Int("PAM:Selected",1) + local xadd = keyboard and 1 or 0 + if keyboard then + draw.SimpleText("СтанциÑ","Metrostroi_PAM27",99+130,201, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("Путь","Metrostroi_PAM27",99+130,201+39, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + draw.SimpleText("Код Ñтанции","Metrostroi_PAM27",99,201, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("Ðомер пути","Metrostroi_PAM27",99,201+39, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + drawTextBox(322+40*xadd,190+39*0,229,31,Train:GetNW2String("PAM:StationS",""),"Metrostroi_PAM30",not selected and sel == 1 and Color(79,252,246)) + drawTextBox(322+40*xadd,190+39*1,229,31,Train:GetNW2String("PAM:PathS",""),"Metrostroi_PAM30",not selected and sel == 2 and Color(79,252,246)) + local err = Train:GetNW2String("PAM:EnterError","") + if err ~= "" then draw.SimpleText(err,"Metrostroi_PAM30",325+xadd*90,275, Color(213,18,8),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + local currStation = Train:GetNW2String("PAM:CurrentStationS") + if currStation ~= "" then draw.SimpleText(currStation,"Metrostroi_PAM30",325+xadd*90,301, Color(0,165,13),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + + buttonWTextC(190+xadd*39,320,75+xadd*65,50,"Ввод","Metrostroi_PAM30",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEnter") and button_p or button) + buttonWTextC(288+xadd*(42+39+10),320,120+xadd*20,50,"Закрыть","Metrostroi_PAM30",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEsc") and button_p or button) + + if Train:GetNW2Bool("PAM:KeyKeyB") or keyboard then drawButton(501+xadd*40,320,40,51, keyboard and button_p or button) end + surface.SetDrawColor(255,255,255) + surface.SetTexture(keyb_icon) + surface.DrawTexturedRect(505+xadd*40,314,32,64) + + if sel==1 then comboBox(Train,320+40*xadd,200+29*1) end + if keyboard then drawKeyboard(Train,10,47,selected) end + end + if stateAcc ~= 0 then + local text = acceptions[stateAcc] + surface.SetFont("Metrostroi_PAM21") + local y,x=21 + if type(text) == "table" then + x = surface.GetTextSize(text[1]) + y=42 + else x = surface.GetTextSize(text) end + drawWindow(320-x/2-36,240-72-16,x+72,128+y+16,"Подтверждение") + surface.SetTexture(question) + surface.DrawTexturedRect(296-x/2,200,32,32) + if type(text) == "table" then + draw.SimpleText(text[1],"Metrostroi_PAM21",336-x/2,210, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(text[2],"Metrostroi_PAM21",336-x/2,210+21, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + draw.SimpleText(text,"Metrostroi_PAM21",336-x/2,210, Color(0,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + + buttonWTextC(194,219+y,120,50,"Да - Enter","Metrostroi_PAM21",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEnter") and button_p or button) + buttonWTextC(326,219+y,120,50,"Ðет - Esc","Metrostroi_PAM21",Color(0,0,0), Train:GetNW2Bool("PAM:KeyEsc") and button_p or button) + end + + + drawText2(201,441,Format("%s = %s",driveModes[driveMode],KVModes[KVMode]),true) + + local VZ = Train:GetNW2Int("PAM:V",0) + if VZ > 0 then + drawText2(307,441,"Ð’"..VZ,true) + elseif VZ==-1 then + drawText2(307,441,"ЭПК",true) + else + drawText2(307,441,"Ð’",false) + end + + drawText2(386,441,"ЛПТ",Train:GetNW2Bool("PAM:LPT")) + local KD = Train:GetNW2Int("PAM:KD",2) + if KD == 2 then + drawText2(465,441,"КД",true,Color(213,15,15)) + elseif KD==1 then + drawText2(465-1,441-1,"КД",false,Color(238,129,31)) + else + drawText2(465,441,"КД",true,Color(0,0,0)) + end + + if ksd then + drawText2(320,467,"Зона ОПВ",Train:GetNW2Bool("PAM:OPV")) + else + drawText2(181.5,467,"ÐРС",Train:GetNW2Bool("PAM:KVARS")) + drawText2(273.5,467,"ПСР",false) + drawText2(365.5,467,"ВРД",Train:GetNW2Bool("PAM:VRD")) + drawText2(458,467,"ОПВ",Train:GetNW2Bool("PAM:OPV")) + end + end + local function drawBlink_(x,y) if CurTime()%0.4 > 0.2 then draw.SimpleText("_","Metrostroi_PAM30",x, y,Color(150,150,150),TEXT_ALIGN_LEFT,TEXT_ALIGN_BOTTOM) end end + local bios_splash = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/bios_splash") + local splash = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/splash") + local splash_egg = surface.GetTextureID("models/metrostroi_train/81-717/screens/pa/splash_egg") + local snds = { + [-3] = "http://pollitto.ru/other/files/NEW/shit/apdisco.wav", + [-2] = "http://pollitto.ru/other/files/NEW/shit/master_warning.wav", + [-1] = "http://pollitto.ru/other/files/NEW/shit/terrain_n.wav", + [-0.01] = "http://pollitto.ru/other/files/NEW/shit/mini.wav", + [1.02] = "http://pollitto.ru/other/files/NEW/shit/5ft.wav", + [3.05] = "http://pollitto.ru/other/files/NEW/shit/10ft.wav", + [6.10] = "http://pollitto.ru/other/files/NEW/shit/20ft.wav", + [9.14] = "http://pollitto.ru/other/files/NEW/shit/30ft.wav", + [12.19] = "http://pollitto.ru/other/files/NEW/shit/40ft.wav", + [15.24] = "http://pollitto.ru/other/files/NEW/shit/50ft.wav", + [30.48] = "http://pollitto.ru/other/files/NEW/shit/100ft.wav", + [60.96] = "http://pollitto.ru/other/files/NEW/shit/200ft.wav", + [91.44] = "http://pollitto.ru/other/files/NEW/shit/300ft.wav", + [100] = "http://pollitto.ru/other/files/NEW/shit/alt_alert.wav", + [121.92] = "http://pollitto.ru/other/files/NEW/shit/400ft.wav", + [152.40] = "http://pollitto.ru/other/files/NEW/shit/500ft.wav", + [304.80] = "http://pollitto.ru/other/files/NEW/shit/1000ft.wav", + [762] = "http://pollitto.ru/other/files/NEW/shit/2500ft.wav", + ["caution"] = "http://pollitto.ru/other/files/NEW/shit/toconfigwarn.wav", + ["belts"] = "http://pollitto.ru/other/files/NEW/shit/belts.wav", + ["smoking"] = "http://pollitto.ru/other/files/NEW/shit/smoking.wav", + ["pullup"] = "http://pollitto.ru/other/files/NEW/shit/whoopwhoop.wav", + ["tl_flaps"] = "http://pollitto.ru/other/files/NEW/shit/too_low_flaps.wav", + ["tl_terrain"] = "http://pollitto.ru/other/files/NEW/shit/too_low_terrain.wav", + } + + local UPD = 10 + function TRAIN_SYSTEM:PAMScreen(Train) + --surface.SetTexture(splash_egg) + --surface.SetDrawColor(255,255,255) + --surface.DrawTexturedRectRotated(512,256,1024,512,0) + + local state = Train:GetNW2Float("PAM:State",0) + + if state ~= 0 and state ~= -1 and state ~= -0.5 then + surface.SetDrawColor(50,50,50,100) + surface.DrawRect(0,0,640,480,0) + if state == -100 then stateDebug(Train) end + if state < 0 then + local time = Train:GetNW2Float("PAM:StartTimer",0) + if state == -2 then + if time > 0.4 then drawBlink_(620,440) else drawBlink_(5,20) end + end + if state == -3 then drawFrame(bios_splash) end + if state == -4 then + if time > 0.5 then drawBlink_(5,40) else drawBlink_(5,20) end + end + if state == -5 then drawFrame(splash) end + end + + if state == 1 then State1(Train) end + if state == 1.5 then State1_5(Train) end + if state == 2 then State2(Train) end + if state == 3 then State3(Train) end + if state == 3.5 then State35(Train) end + if state == 4 then State4(Train) end + if state == 5 then + --[[ + if LocalPlayer():GetName() ~= "MrMeowpestMan" then + if not self.Sounds or self.SoundsTemp ~= UPD then + if self.Sounds then for i,snd in pairs(self.Sounds) do snd:Stop() end end + self.Sounds = {} + for i, sndU in pairs(snds) do + sound.PlayURL ( sndU, "3d noplay noblock", function( snd ) + if ( IsValid( snd ) ) then + self.Sounds[i] = snd + print(snd) + else + print("???") + end + end ) + end + self.SoundsTemp = UPD + end + for i,snd in pairs(self.Sounds) do + if IsValid(snd) then + snd:SetPos(self.Train:LocalToWorld(Vector(450,22,0))) + end + end + local sndId + local s = Train:GetNW2Float("PAM:S")--/0.3048 + for i,snd in pairs(self.Sounds) do + if type(i) == "number" and s <= i and (not sndId or sndId > i) then sndId = i end + end + if self.CurrentSound ~= sndId then + if sndId then + print(self.Sounds[sndId]) + self.Sounds[sndId]:SetTime(0) + self.Sounds[sndId]:Play() + end + self.CurrentSound = sndId + end + if self.Sounds.caution and not self.Caution and self.Train:GetNW2Bool("PAM:OXT") then + self.Sounds.caution:SetTime(0) + self.Sounds.caution:Play() + self.Caution = CurTime() + elseif self.Caution and CurTime()-self.Caution > 2 then + self.Caution = false + end + + if self.Sounds.pullup and not self.PullUp and Train:GetNW2Int("PAM:Vf") > 1 then + self.Sounds.pullup:SetTime(0) + self.Sounds.pullup:Play() + self.PullUp = true + elseif self.PullUp and Train:GetNW2Int("PAM:Vf") == 0 then + self.PullUp = false + end + self.SpeedLimitSmoking = self.SpeedLimitSmoking or Train:GetNW2Int("PAM:SpeedLimit") + if self.Sounds.smoking and Train:GetNW2Int("PAM:SpeedLimit") ~= self.SpeedLimitSmoking then + if Train:GetNW2Int("PAM:SpeedLimit") > self.SpeedLimitSmoking then + self.Sounds.smoking:SetTime(0) + self.Sounds.smoking:Play() + else + self.Sounds.belts:SetTime(0) + self.Sounds.belts:Play() + end + self.SpeedLimitSmoking = Train:GetNW2Int("PAM:SpeedLimit") + end + local canPlayTLFlaps = Train:GetNW2Int("PAM:KVMode") >= -1 and Train:GetNW2Int("PAM:Vf") > 0 and not Train:GetNW2Bool("PAM:LPT") + if self.Sounds.tl_flaps and not self.TLFlaps and (50 <= s and s <= 100) and canPlayTLFlaps then + self.Sounds.tl_flaps:SetTime(0) + self.Sounds.tl_flaps:Play() + self.TLFlaps = CurTime() + elseif self.Sounds.tl_terrain and not self.TLFlaps and s < 50 and canPlayTLFlaps then + self.Sounds.tl_terrain:SetTime(0) + self.Sounds.tl_terrain:Play() + self.TLFlaps = CurTime() + elseif self.TLFlaps and CurTime()-self.TLFlaps > 1.5 then + self.TLFlaps = false + end + end + --]] + + State5(Train) + end + if state == 6 then State5(Train,true) end + --surface.SetDrawColor(0,0,0,150) + surface.SetAlphaMultiplier(0.9-Train:GetNW2Float("PAM:Brightness",0)*0.5) + surface.SetDrawColor(Color(20,20,20)) + surface.DrawRect(0,0,640,480,0) + surface.SetAlphaMultiplier(1) + end + end + return +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "KSDMode" then + self.PAKSD = value>0 + self.Train:SetNW2Bool("PAM:KSD",self.PAKSD) + end +end + +function TRAIN_SYSTEM:UpdateStationList(entered,id) + local Train = self.Train + if not entered or #entered < 1 or #entered > 2 then + Train:SetNW2Int("PAM:ElemCount",0) + self.ScrollCount = 0 + self.Scroll = 0 + return + end + local iS = 0 + if #entered < 3 then + local line = tonumber(entered[1]) + local tbl = Metrostroi.PAMStations[line] + if id then + if tbl then + for k,station in ipairs(tbl) do + if string.find(tostring(station.id),"^"..entered) then + if iS < 8+self.Scroll and iS >= self.Scroll and (iS+1-self.Scroll)==id then + return station.id + end + iS = iS + 1 + end + end + end + return + else + self.LineS = line + if tbl then + for k,station in ipairs(tbl) do + if string.find(tostring(station.id),"^"..entered) then + if iS < 8+self.Scroll and iS >= self.Scroll then + local id,name = station.id,station.name + Train:SetNW2String("PAM:Elem"..(iS+1-self.Scroll),id.."\t"..(name or id)) + end + iS = iS + 1 + end + end + end + end + end + Train:SetNW2Int("PAM:ElemCount",math.min(8,iS)) + self.ScrollCount = iS + self.Scroll = math.Clamp(self.Scroll,0,math.max(0,self.ScrollCount-8)) + --end +end +function TRAIN_SYSTEM:UpdateLastStationList() + local Train = self.Train + local iS = 0 + local dist = self.Distance + local line = self.Line + local path = tonumber(self.Path) + local tbl = Metrostroi.PAMConfTest and Metrostroi.PAMConfTest[line] and Metrostroi.PAMConfTest[line][path] + if not tbl then return end + self.Scroll = math.Clamp(self.Scroll,0,math.max(0,math.ceil(((self.ScrollCount or 0)-9)/9)*9)) + self.DeadlockS = nil + local curr + if self.Mode==2 or self.Mode==3 and not self.Shunt then + for i,stat in ipairs(tbl[1].stations) do + if i<#tbl[1].stations then + if not curr and tostring(self.Station)==tostring(stat.id) then + curr=i + end + if curr and i>=curr and stat.isLast then + if iS < 9+self.Scroll and iS >= self.Scroll then + local id = (iS+1-self.Scroll) + Train:SetNW2String("PAM:Elem"..id,stat.name..(stat.isInWrong and 1 or 0)) + if self.Selected == id then self.DeadlockS = stat end + end + iS = iS + 1 + end + end + end + end + if self.Selected>0 and self.DeadlockS == nil then self.Selected = 0 end + Train:SetNW2Int("PAM:ElemCount",math.min(10,iS-self.Scroll)) + Train:SetNW2Bool("PAM:ElemCountStart",self.Scroll>=9) + Train:SetNW2Bool("PAM:ElemCountEnd",(iS-self.Scroll)>9) + self.ScrollCount = iS + self.Scroll = math.Clamp(self.Scroll,0,math.max(0,math.ceil((self.ScrollCount-9)/9)*9)) + --end +end +function TRAIN_SYSTEM:Trigger(name,value,press) + local Train = self.Train + Train:SetNW2Bool("PAM:Key"..name,value) + if name == "F" and value and not self.SoundTimer then self.SoundTimer = CurTime() end + if name == "F" and not value and self.SoundTimer ~= nil then + local oldST = self.SoundTimer + self.SoundTimer = nil + if not oldST then return end + end + if press and value and self.Sound then + self.Train:PlayOnce("pa_"..name:lower(),"bass",1) + end + if name == "KeyB" and not value then self.Keyboard = not self.Keyboard end + if self.State == 1 and not value then + if name == "Esc" then self:SetState(1.5,0.1) end + if name == "Enter" and self.ReverserWrench then + if self.GoodSetup then + self:SetState(2,0.1) + else + self:SetState(6,0.1) + end + end + elseif self.State == 1.5 and name == "Esc" and not value then + self:SetState(1,0.1) + elseif self.State == 2 then + if name == "Down" and value then + self.Selected = self.Selected < 4 and self.Selected+1 or 1 + if not self.HaveRestart and self.Selected == 2 then self.Selected = 3 end + end + if name == "Up" and value then + self.Selected = self.Selected > 1 and self.Selected-1 or 4 + if not self.HaveRestart and self.Selected == 2 then self.Selected = 1 end + end + if name == "1" and value then self.Selected = 1 end + if name == "2" and self.HaveRestart and value then self.Selected = 2 end + if name == "Esc" and value then self.Selected = 3 end + if name == "M" and value then self.Selected = 4 end + if (name == "Esc" or name == "Enter") and not value and self.Selected == 3 then self:SetState(1,0.1) end + if (name == "1" or name == "Enter") and not value and self.Selected == 1 then self:SetState(3,0.1) end + if self.HaveRestart and (name == "2" or name == "Enter") and not value and self.Selected == 2 then self:SetState(3.5,0.1) end + if (name == "M" or name == "Enter") and not value and self.Selected == 4 then self:SetState(2,0.1) end + elseif self.State == 3 then + if name == "Down" and value then self.Selected = self.Selected < 4 and self.Selected+1 or 1 end + if name == "Up" and value then self.Selected = self.Selected > 1 and self.Selected-1 or 4 end + local num = tonumber(name) + if num and value then + if self.Selected == 1 and #self.StationS < 3 then + self.StationS = self.StationS..num + self.Scroll = 0 + self:UpdateStationList(self.StationS) + end + if self.Selected == 2 and #self.PathS < #tostring(Metrostroi.LineCount) then self.PathS = self.PathS..num end + if self.Selected == 3 and #self.RouteNumberS < 3 then self.RouteNumberS = self.RouteNumberS..num end + if self.Selected == 4 and #self.DriverNumberS < 4 then self.DriverNumberS = self.DriverNumberS..num end + end + if name == "Left" and value then + if self.Selected == 1 then + self.StationS = self.StationS:sub(1,-2) + self.Scroll = 0 + self:UpdateStationList(self.StationS) + end + if self.Selected == 2 then self.PathS = self.PathS:sub(1,-2) end + if self.Selected == 3 then self.RouteNumberS = self.RouteNumberS:sub(1,-2) end + if self.Selected == 4 then self.DriverNumberS = self.DriverNumberS:sub(1,-2) end + end + if name == "Esc" and not value then self:SetState(2,0.1) end + if name == "Enter" and not value then + if #self.StationS < 3 or not Metrostroi.PAMStations[self.LineS] or not Metrostroi.PAMStations[self.LineS][tonumber(self.StationS)] then + Train:SetNW2String("PAM:EnterError","Ðеверный номер Ñтанции") + elseif #self.PathS < #tostring(Metrostroi.LineCount) or not Metrostroi.PAMConfTest[self.LineS][tonumber(self.PathS)] then + Train:SetNW2String("PAM:EnterError","Ðеверный номер пути") + elseif #self.RouteNumberS < 3 then + Train:SetNW2String("PAM:EnterError","Ðеверный номер маршрута") + elseif #self.DriverNumberS < 4 then + Train:SetNW2String("PAM:EnterError","Ðеверный табельный номер") + else + self:SetState(4,0.1) + end + end + elseif self.State == 3.5 then + if name == "Down" and value then self.Selected = self.Selected < 2 and self.Selected+1 or 1 end + if name == "Up" and value then self.Selected = self.Selected > 1 and self.Selected-1 or 2 end + local num = tonumber(name) + if num and value then + if self.Selected == 1 and #self.StationS < 3 then + self.StationS = self.StationS..num + self.Scroll = 0 + self:UpdateStationList(self.StationS) + end + if self.Selected == 2 and #self.PathS < 1 then self.PathS = self.PathS..num end + end + if name == "Left" and value then + if self.Selected == 1 then + self.StationS = self.StationS:sub(1,-2) + self.Scroll = 0 + self:UpdateStationList(self.StationS) + end + if self.Selected == 2 then self.PathS = self.PathS:sub(1,-2) end + end + if name == "Esc" and not value then self:SetState(2,0.1) end + if name == "Enter" and not value then + if #self.StationS < 3 or not Metrostroi.PAMStations[self.LineS] or not Metrostroi.PAMStations[self.LineS][tonumber(self.StationS)] then + Train:SetNW2String("PAM:EnterError","Ðеверный номер Ñтанции") + elseif #self.PathS < #tostring(Metrostroi.LineCount) or not Metrostroi.PAMConfTest[self.Line][tonumber(self.PathS)] then + Train:SetNW2String("PAM:EnterError","Ðеверный номер пути") + else + self:SetState(5,0.1) + end + end + elseif self.State == 4 and not self.Stopping and name == "Enter" and not value then + self:SetState(5,0.1) + elseif self.State >= 5 then + local char = tonumber(name) + --if char and not value and self.Selected == char then self.State5 = char+1 end + if self.State5Accept then + local PAM_VV = Train.PAM_VV + if name == "Enter" and not value then + if self.State5Accept == 1 then + if PAM_VV.KD < 1 and not self.NoKD and PAM_VV.KRU == 0 then + self:Message(22) + else + self.State5 = 1 + end + elseif self.State5Accept == 2 then + self.NoKD = true + self:Message(1) + elseif self.State5Accept == 4 then + if self.State == 5 and (self.Mode == 2 or self.Mode == 3) then + self.Transit = true + self:Message(13) + else + self:Message(14) + end + elseif self.State5Accept == 5 and self.ZeroStopped then + self.Vd0 = true + self:Message(4) + elseif self.State5Accept == 6 then + if self.Speed<2.5 and (PAM_VV.LPT>0 or self.NoLPT or PAM_VV.V1>0) then + self.OpenDoors = true + self:Message(6) + else + self.OpenDoors = false + self:Message(7) + end + elseif self.State5Accept == -6 then + local prev = self:FindPrevStation() + if self.State == 5 and (self.StationTable and (prev and self.Distance-prev.pos < 120 or self.Distance-self.StationTable.pos<120) and self.Speed<0.2) then + self.FireBack = prev + self:Message(16) + else + self.FireBack = false + self:Message(17) + end + elseif self.State5Accept == -1 then + --AV + elseif self.State5Accept == -2 then + if PAM_VV.KSOT == 0 or not self.ControlMode2 then + self:Error(24,true,7,true) + self:Message(19) + else + self.ControlMode=2 + self.ControlModeAuto = false + self:Message(18) + end + elseif self.State5Accept == -3 then + self.ControlMode=1 + self.ControlModeAuto = false + self:Message(20) + elseif self.State5Accept == -4 then + if self.State == 5 and (self.Speed<0.2 and (self.StationTable.isLast or self.StationTable.hasSwitches)) then + self:Message(5) + self.Shunt = true + else + self:Message(3) + end + elseif self.State5Accept == 7 then + self.NoLPT = true + self:Message(8) + elseif self.State5Accept == 12 then + self.NoKD = false + self:Message(2) + elseif self.State5Accept == 14 then + self.Transit = false + self:Message(15) + elseif self.State5Accept == 15 then self.Vd0 = false + elseif self.State5Accept == 16 then self.OpenDoors = false + elseif self.State5Accept == 17 then + self.NoLPT = false + self:Message(9) + elseif self.State5Accept == 18 then + self.Deadlock = nil + self:Message(12) + else + self.State5 = self.State5Accept + if self.State5 == 8 then + self.Selected = 0 + self.Scroll = 0 + self:UpdateLastStationList() + end + end + self.State5Accept = nil + end + if name == "Esc" and not value then self.State5 = nil self.State5Accept = nil end + elseif self.State5 == 0 then + if char and value and char ~= 3 and (self.State == 5 or (char==1 or char==2 or 5<=char and char<=7)) then self.Selected = char end + if char and not value and char==self.Selected then + self.State5 = nil + if char == 9 and self.State == 5 then + self:Trigger("9",true) + self:Trigger("9",false) + else + self.State5Accept = char + end + end + if name == "Esc" and value then self.Selected = 12 end + if name == "Esc" and not value and self.Selected == 12 then self.State5 = nil end + elseif self.State5 == 8 then + if name == "Esc" and not value then + self.State5 = nil + self.DeadlockS = nil + end + if name == "Enter" and not value then + self.State5 = nil + if true or not self.Transit then + self.Deadlock = self.DeadlockS + self:Message(10) + else + self:Message(11) + end + end + if (name == "Left" or name == "Right") and not value then + self.Scroll = name == "Right" and self.Scroll+9 or math.max(self.Scroll-9,0) + self.Selected = 0 + self:UpdateLastStationList() + end + if char and value then + self.Selected = char + self:UpdateLastStationList() + end + elseif self.State5 == -8 then + local charAccept = char and Train:GetNW2Bool("PAM:State5_"..char) + if charAccept and value and (char~=5 and char~=6) then self.Selected = char end + if charAccept and not value and char==self.Selected then + self.State5 = nil + self.State5Accept = 10+char + end + if name == "Esc" and value then self.Selected = 11 end + if name == "Esc" and not value and self.Selected == 11 then self.State5 = nil end + elseif self.State5 == -1 then + if name == "Left" and value then self.Brightness = math.max(0,self.Brightness-0.1) end + if name == "Right" and value then self.Brightness = math.min(1,self.Brightness+0.1) end + if (name == "Esc" or name == "Enter") and not value then self.State5 = nil end + elseif self.State5 == 1 then + if name == "Esc" and not value then + self.State5 = nil + Train:SetNW2Float("PAM:RollDist",0) + end + elseif self.State5 == -5 then + if name == "Down" and value then self.Selected = self.Selected < 2 and self.Selected+1 or 1 end + if name == "Up" and value then self.Selected = self.Selected > 1 and self.Selected-1 or 2 end + local num = tonumber(name) + if num and value then + if self.Selected == 1 and #self.RouteNumberS < 3 then self.RouteNumberS = self.RouteNumberS..num end + if self.Selected == 2 and #self.DriverNumberS < 4 then self.DriverNumberS = self.DriverNumberS..num end + end + if name == "Left" and value then + if self.Selected == 1 then self.RouteNumberS = self.RouteNumberS:sub(1,-2) end + if self.Selected == 2 then self.DriverNumberS = self.DriverNumberS:sub(1,-2) end + end + if name == "Esc" and not value then self.State5 = nil end + if name == "Enter" and not value then + if #self.RouteNumberS < 3 then + Train:SetNW2String("PAM:EnterError","Ðеверный номер маршрута") + elseif #self.DriverNumberS < 4 then + Train:SetNW2String("PAM:EnterError","Ðеверный табельный номер") + else + self.RouteNumber = self.RouteNumberS + self.DriverNumber = self.DriverNumberS + self.RouteNumberS = nil + self.DriverNumberS = nil + self.State5 = nil + end + end + elseif self.State5 == 9 then + if name == "Down" and value then self.Selected = self.Selected < 2 and self.Selected+1 or 1 end + if name == "Up" and value then self.Selected = self.Selected > 1 and self.Selected-1 or 2 end + local num = tonumber(name) + if num and value then + if self.Selected == 1 and #self.StationS < 3 then + self.StationS = self.StationS..num + self.Scroll = 0 + self:UpdateStationList(self.StationS) + end + if self.Selected == 2 and #self.PathS < 1 then self.PathS = self.PathS..num end + end + if name == "Left" and value then + if self.Selected == 1 then + self.StationS = self.StationS:sub(1,-2) + self.Scroll = 0 + self:UpdateStationList(self.StationS) + end + if self.Selected == 2 then self.PathS = self.PathS:sub(1,-2) end + end + if name == "Esc" and not value then + self.State5 = nil + end + if name == "Enter" and not value then + if #self.StationS < 3 or not Metrostroi.PAMStations[self.Line] or not Metrostroi.PAMStations[self.Line][tonumber(self.StationS)] then + Train:SetNW2String("PAM:EnterError","Ðеверный номер Ñтанции") + elseif #self.PathS < #tostring(Metrostroi.LineCount) or not Metrostroi.PAMConfTest[self.Line][tonumber(self.PathS)] then + Train:SetNW2String("PAM:EnterError","Ðеверный номер пути") + else + if self.Speed < 2.5 then + self.Station = self.StationS + self.Path = self.PathS + self:SetMode(1) + self.Distance = self.StationTable.pos+0.001 + self:SetMode(3) + self:FindSensor(self.Distance,true) + end + self.StationS = nil + self.PathS = nil + self.State5 = nil + end + end + else + if name == "F" and not value then + self.State5 = 0 + self.Selected = 1 + end + + --if name == "1" and value then self.State5Accept=-1 end + if name == "2" and value then self.State5Accept=-2 end + if name == "3" and self.PAKSD and value then self.State5Accept=-3 end + if name == "8" and value then self.State5=-8 self.Selected = 0 end + if name == "Left" or name == "Right" and value then + if name == "Right" then + self.Brightness = math.min(1,self.Brightness+0.1) + else + self.Brightness = math.max(0,self.Brightness-0.1) + end + self.State5 = -1 + end + if self.State==5 then + if name == "P" and value then + self.State5 = -5 + self.Selected = 1 + self.RouteNumberS = "" + self.DriverNumberS = "" + self.KeyboardX,self.KeyboardY = 0,47 + Train:SetNW2String("PAM:EnterError","") + end + if name == "4" and value then self.State5Accept=-4 end + if name == "6" and value then self.State5Accept=-6 end + --if name == "7" and value then self.State5Accept=-7 end + if name == "9" and value then + self.State5=9 + self.Selected = 1 + self.StationS = ""--tostring(self.Station) + self.PathS = ""--tostring(self.Path) + self.KeyboardX,self.KeyboardY = 10,47 + Train:SetNW2String("PAM:EnterError","") + self:UpdateStationList(self.StationS) + end + end + end + end +end +local keys = { + "P", + "F" , "Up" , "M", + "Left","Down","Right", + "1" , "2" , "3", + "4" , "5" , "6", + "7" , "8" , "9", + "Esc" , "0" ,"Enter", +} +local acceptions = { + [-7] = 1, + [-6] = 1, + [-4] = 2, + [-3] = 1, + [-2] = 1, + [-1] = 1, + 1,1,1,1,1,1,1,1, + [11]=1, + [12]=1, + [13]=1, + [14]=1, + [15]=1, + [16]=2, + [17]=1, + [18]=1, +} +local acceptionsReset = { + 1,1,1,1,1,2,1,1, +} +function TRAIN_SYSTEM:Touch(value,x,y) + local Train = self.Train + Train:SetNW2String("PAM:Touching","") + if self.Keyboard and (self.State==3 or self.State==3.5 or self.State==5 and self.State5==9) then + for i,keyName in ipairs(keys) do + local key = i+1 + local xp = key%3 + local yp = math.floor(key/3) + if math.InRangeXYR(x,y,self.KeyboardX+5+60*xp,self.KeyboardY+33+49*yp,60,49) then + self.Touches[keyName] = true + Train:SetNW2String("PAM:LastToucn",keyName) + if value then Train:SetNW2String("PAM:Touching",keyName) end + break + end + end + end + if not value then + for k in pairs(self.Touches) do self.Touches[k] = false end + return + end + if self.State == 1 then + if value and math.InRangeXYR(x,y,542,self.ReverserWrench and 316 or 352,77,51) then self.Touches["Esc"] = true return end + if value and math.InRangeXYR(x,y,265,410,110,51) then self.Touches["Enter"] = true return end + elseif self.State == 1.5 then + if value and math.InRangeXYR(x,y,238,408,164,51) then self.Touches["Esc"] = true return end + elseif self.State == 2 then + if math.InRangeXYR(x,y,320-298,121+59*0,596,50) then self.Touches["1"] = true return end + if math.InRangeXYR(x,y,320-298,121+59*1,596,50) then self.Touches["2"] = true return end + if math.InRangeXYR(x,y,320-298,121+59*2,596,50) then self.Touches["Esc"] = true return end + if math.InRangeXYR(x,y,320-298,121+59*4+10,596,50) then self.Touches["M"] = true return end + elseif self.State == 3 or self.State == 3.5 then + if self.Selected==1 and self.ScrollCount and self.ScrollCount > 0 then + local xa,ya = 374,103+35*1 + if math.InRangeXYR(x,y,xa+219,ya+5,31,15) or math.InRangeXYR(x,y,xa+219,ya+128,31,14) then + self.Scroll = math.max(self.Scroll-1,0) + self:UpdateStationList(self.StationS) + return + elseif math.InRangeXYR(x,y,xa+219,ya+143,31,14) then + self.Scroll = math.Clamp(self.Scroll+1,0,math.max(0,self.ScrollCount-8)) + self:UpdateStationList(self.StationS) + return + end + + for i=1,math.min(8,self.ScrollCount) do + if math.InRangeXYR(x,y,xa+13,ya+27-10+18*(i-1)-9,200,17) then + local st = self:UpdateStationList(self.StationS,i) + self.StationS = st and tostring(st) or self.StationS + self:UpdateStationList(self.StationS) + return + end + end + else + for i=0,self.State==3.5 and 1 or 3 do + if math.InRangeXYR(x,y,374,103+35*i,210,35) then self.Selected = i+1 return end + end + end + if self.Keyboard then + if math.InRangeXYR(x,y,156+127,369,120,51) then self.Touches["Enter"] = true return end + if math.InRangeXYR(x,y,286+127,369,120,51) then self.Touches["Esc"] = true return end + if math.InRangeXYR(x,y,443+100,369,40,51) then self.Touches["KeyB"] = true return end + else + if math.InRangeXYR(x,y,156,369,120,51) then self.Touches["Enter"] = true return end + if math.InRangeXYR(x,y,286,369,120,51) then self.Touches["Esc"] = true return end + if math.InRangeXYR(x,y,443,369,40,51) then self.Touches["KeyB"] = true return end + end + elseif self.State == 4 and math.InRangeXYR(x,y,320-19,278,76,38) then + self.Touches["Enter"] = true + return + elseif self.State >= 5 then + if self.State5Accept and self.State5Accept ~= 0 then + local ya = acceptions[self.State5Accept]*21 + if math.InRangeXYR(x,y,194,219+ya,120,50) then self.Touches["Enter"] = true return end + if math.InRangeXYR(x,y,326,219+ya,120,50) then self.Touches["Esc"] = true return end + elseif self.State5==0 then + for i=1,10 do + if i==10 then i=12 end + if math.InRangeXYR(x,y,212*((i-1)%3),119+(math.ceil(i/3)-1)*62,212,62) then + if i==12 then + self.Touches["Esc"] = true + return + else + self.Touches[tostring(i%10)] = true + return + end + end + end + elseif self.State5 == -1 then + if math.InRangeXYR(x,y,161,192,75,34) then self.Touches["Left"] = true return end + if math.InRangeXYR(x,y,413,192,75,34) then self.Touches["Right"] = true return end + if math.InRangeXYR(x,y,277,277,95,50) then self.Touches["Enter"] = true return end + if math.InRangeXYR(x,y,246,196,157,25) then self.Brightness = math.Clamp(math.Round((x-251)/147,2),0,1) return end + elseif self.State5==-8 then + for i=1,9 do + if i==9 then i=11 end + if math.InRangeXYR(x,y,4+210*((i-1)%3),152+(math.ceil(i/3)-1)*50,209,49) then + if i==11 then + self.Touches["Esc"] = true + return + else + self.Touches[tostring(i%10)] = true + return + end + end + end + elseif self.State5 == 1 then + if math.InRangeXYR(x,y,139,270,370,50) then self.Touches["Esc"] = true return end + elseif self.State5 == 8 then + if self.ScrollCount and self.ScrollCount > 0 then + for i=1,math.min(9,Train:GetNW2String("PAM:ElemCount",0)) do + if math.InRangeXYR(x,y,4+210*((i-1)%3),152+(math.ceil(i/3)-1)*50,210,50) then self.Touches[tostring(i)] = true return end + end + if math.InRangeXYR(x,y,4+210*0,152+3*50,80,50) then self.Touches["Left"] = true return end + if math.InRangeXYR(x,y,4+210*3-80,152+3*50,80,50) then self.Touches["Right"] = true return end + end + if math.InRangeXYR(x,y,4+210*1.5-145,152+3*50,140,50) then self.Touches["Enter"] = true return end + if math.InRangeXYR(x,y,4+210*1.5+5,152+3*50,140,50) then self.Touches["Esc"] = true return end + elseif self.State5 == -5 then + local xadd = (self.Keyboard and 1 or 0) + for i=0,1 do + if math.InRangeXYR(x,y,320+102*(self.Keyboard and 1 or 0),190+39*i,225-15*xadd,31) then self.Selected = i+1 return end + end + if math.InRangeXYR(x,y,190+xadd*79,320,140,50) then self.Touches["Enter"] = true return end + if math.InRangeXYR(x,y,340+xadd*79,320,140,50) then self.Touches["Esc"] = true return end + if math.InRangeXYR(x,y,501+xadd*79,320,40,51) then self.Touches["KeyB"] = true return end + elseif self.State5 == 9 then + if self.Selected==1 and self.ScrollCount and self.ScrollCount > 0 then + local xa,ya = 320+40*(self.Keyboard and 1 or 0),229 + if math.InRangeXYR(x,y,xa+219,ya+5,31,15) or math.InRangeXYR(x,y,xa+219,ya+128,31,14) then + self.Scroll = math.max(self.Scroll-1,0) + self:UpdateStationList(self.StationS) + return + elseif math.InRangeXYR(x,y,xa+219,ya+143,31,14) then + self.Scroll = math.Clamp(self.Scroll+1,0,self.ScrollCount-8) + self:UpdateStationList(self.StationS) + return + end + + for i=1,math.min(8,self.ScrollCount) do + if math.InRangeXYR(x,y,xa+13,ya+27-10+18*(i-1)-9,200,17) then + local st = self:UpdateStationList(self.StationS,i) + self.StationS = st and tostring(st) or self.StationS + self:UpdateStationList(self.StationS) + return + end + end + else + for i=0,1 do + if math.InRangeXYR(x,y,322+40*(self.Keyboard and 1 or 0),190+39*i,229,31) then self.Selected = i+1 return end + end + end + if self.Keyboard then + if math.InRangeXYR(x,y,190+1*39,320,75+1*65,50) then self.Touches["Enter"] = true return end + if math.InRangeXYR(x,y,288+1*(42+39+10),320,120+1*20,50) then self.Touches["Esc"] = true return end + if math.InRangeXYR(x,y,501+1*40,320,40,51) then self.Touches["KeyB"] = true return end + else + if math.InRangeXYR(x,y,190+0*39,320,75+0*65,50) then self.Touches["Enter"] = true return end + if math.InRangeXYR(x,y,288+0*(42+39+10),320,120+0*20,50) then self.Touches["Esc"] = true return end + if math.InRangeXYR(x,y,501+0*40,320,40,51) then self.Touches["KeyB"] = true return end + end + else + if math.InRangeXYR(x,y,0,429,136,51) then self.Touches["F"] = true return end + if math.InRangeXYR(x,y,3,289,80,35) then self.Touches["P"] = true return end + + for i=0,2 do + if math.InRangeXYR(x,y,2,157+i*46,70,35) then self.Touches[tostring(i+1)] = true end + end + for i=0,4 do + if math.InRangeXYR(x,y,570,155+i*46,70,35) then self.Touches[i==0 and "4" or tostring(i+5)] = true end + end + end + end +end + +TRAIN_SYSTEM.DriveModesConv = { + AT = -4, + AT1 = -4, + VPR = -3, + ST = -2, + OXT = -1, + OD = 0, + X1 = 1, + X2 = 2, + X3 = 3, +} +TRAIN_SYSTEM.DriveModes = { + --Priority 2 3 8 017 19 20 20X 25 025 33 033 33G + X3 = {1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0}, + X2 = {2, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0}, + X1 = {3, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0}, + OD = {4, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0}, + OXT = {5, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0}, + ST = {6, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1}, + VPR = {7, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1}, + AT1 = {8, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1}, + AT = {9, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1}, + Zero = {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +} +function TRAIN_SYSTEM:SetDriveMode(curMode,override) + local mode = self.DriveModes[curMode] + if mode and mode[1] > self.CurrentDriveModePriority then + self.CurrentDriveMode = mode + self.CurrentDriveModePriority = mode[1] + self.DriveMode = curMode + end +end +TRAIN_SYSTEM.PneumoModes = { + --Priority 39 48 + NT = {1, 0, 0,}, + V1 = {2, 0, 1,}, + V2 = {3, 1, 0,}, + V12 = {4, 1, 1,}, +} +function TRAIN_SYSTEM:SetDoorMode(curMode,override) + local mode = self.DoorModes[curMode] + self.CurrentDoorMode = mode + self.DoorMode = curMode +end +TRAIN_SYSTEM.DoorModes = { + -- 16 31 32 68 + ZD = {1, 0, 0, 0,}, + DL = {0, 1, 0, 0,}, + DP = {0, 0, 1, 0,}, + DB = {0, 0, 0, 1,}, + DO = {0, 0, 0, 0,}, +} +function TRAIN_SYSTEM:SetPneumoMode(curMode,override) + if self.CurrentPneumoModePriority==2 and curMode=="V2" then + curMode = "V12" + end + if self.CurrentPneumoModePriority==3 and curMode=="V1" then + curMode = "V12" + end + local mode = self.PneumoModes[curMode] + if mode and (override or mode[1] > self.CurrentPneumoModePriority) then + self.CurrentPneumoMode = mode + self.CurrentPneumoModePriority = mode[1] + self.PneumoMode = curMode + end +end + +function TRAIN_SYSTEM:TriggerSensor(coil,plate) + if self.SensorEnabled then + --self.Distance = plate.TrackX + local line = self.Line + local path = tonumber(self.Path) + local tbl = Metrostroi.PAMConfTest and Metrostroi.PAMConfTest[line] and Metrostroi.PAMConfTest[line][path] + if not tbl then return end + if self.Mode == 1 then + --Ищем позицию нашей Ñтанции + --[[ local pos + for i,stat in ipairs(tbl[1].stations) do + if stat.id == tonumber(self.Station) then + pos = stat.pos + break + end + end--]] + --Ищем ближайший датчик на Ñтанции в районе 200м + --[[ for i,sensor in ipairs(tbl[1].sensors) do + if pos-sensor<200 then + sensorDist = sensor + break + end + end--]] + self:FindSensor(self.StationTable.linkedSensor or false) + if self.NextSensorDist then + --print(Format("SENSOR: New pos: %.2fm",self.NextSensorDist)) + self.Distance = self.NextSensorDist + self.SensorError = false + self:SetMode(2) + self:FindSensor() + else + --print(Format("SENSOR: Error! Can't find good detector near station %s",self.Station)) + end + self.AlwaysSensor = false + else + --Ищем ближайший ÑенÑор от Ð½Ð°Ñ Ð´Ð»Ñ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ†Ð¸Ð¸ пути + --[[ local nearest,sensorDist + for i,sensor in ipairs(tbl[1].sensors) do + if not nearest or math.abs(sensor-self.Distance) dist then + self.NextSensor = i + break + end + end + elseif sens~=nil then + self.NextSensor = sens + else + self.NextSensor = self.NextSensor + 1 + end + self.NextSensorDist = tbl[1].sensors[self.NextSensor] +end + +function TRAIN_SYSTEM:FindNextSignal() + local dist = self.Distance + local line = self.Line + local path = tonumber(self.Path) + local tbl = Metrostroi.PAMConfTest and Metrostroi.PAMConfTest[line] and Metrostroi.PAMConfTest[line][path] + if not tbl then return end + for i,sig in ipairs(tbl[1].signals) do + if sig[2] > dist then + return sig[1] + end + end +end + +function TRAIN_SYSTEM:FindNextSlope() + local dist = self.Distance + local line = self.Line + local path = tonumber(self.Path) + local tbl = Metrostroi.PAMConfTest and Metrostroi.PAMConfTest[line] and Metrostroi.PAMConfTest[line][path] + if not tbl then return 0 end + local stbl = tbl[1].slopes + if not stbl then return 0 end + for i,slp in ipairs(stbl) do + if slp[2] > dist then + return stbl[i-1] and stbl[i-1][1] or 0 + end + end +end + +function TRAIN_SYSTEM:FindNextStation() + local dist = self.Distance + local line = self.Line + local path = tonumber(self.Path) + local tbl = Metrostroi.PAMConfTest and Metrostroi.PAMConfTest[line] and Metrostroi.PAMConfTest[line][path] + if not tbl then return end + for i,stat in ipairs(tbl[1].stations) do + if stat.pos-10 > dist then + return stat,tbl[1].stations[i-1] + end + end +end +function TRAIN_SYSTEM:FindPrevStation() + local dist = self.Distance + local line = self.Line + local path = tonumber(self.Path) + local tbl = Metrostroi.PAMConfTest and Metrostroi.PAMConfTest[line] and Metrostroi.PAMConfTest[line][path] + if not tbl then return end + for i,stat in ipairs(tbl[1].stations) do + if stat.pos+120 > dist then + return stat + end + end +end +function TRAIN_SYSTEM:FindStation(line,path,stationIndex) + local tbl = Metrostroi.PAMConfTest and Metrostroi.PAMConfTest[line] and Metrostroi.PAMConfTest[line][tonumber(path) or 1] + if not tbl then return end + for i,v in ipairs(tbl[1].stations) do + if v.id == tonumber(stationIndex) then return v,tbl[1].stations[i-1] end + end + return station and station.id +end +function TRAIN_SYSTEM:FindFirstStation() + local dist = self.Distance + local line = self.Line + local path = tonumber(self.Path) + local tbl = Metrostroi.PAMConfTest and Metrostroi.PAMConfTest[line] and Metrostroi.PAMConfTest[line][path] + if not tbl then return end + return tbl[1].stations[1].id +end +function TRAIN_SYSTEM:FindLastStation() + local dist = self.Distance + local line = self.Line + local path = tonumber(self.Path) + local tbl = Metrostroi.PAMConfTest and Metrostroi.PAMConfTest[line] and Metrostroi.PAMConfTest[line][path] + if not tbl then return end + return tbl[1].stations[#tbl[1].stations] +end +function TRAIN_SYSTEM:Message(id) + self.CurrentMessage = id + self.MessageTimer = CurTime() +end +local errorsRing = { + true ,true ,nil ,false,nil ,nil ,true ,true , + true ,nil ,nil ,nil ,false,nil ,false,nil , + nil ,nil ,nil ,nil ,nil ,true ,nil ,false, + nil ,nil ,false,nil ,nil ,false,nil ,nil , +} +function TRAIN_SYSTEM:Error(id,state,time,removeOnTimer) + if (state or removeOnTimer and self.ErrorTimers[id] and CurTime()-self.ErrorTimers[id]=2 then + self.Selected = 1 + end + if state == 2 then + self.LineS = self.Line or self.LineS + self.PathS = tostring(self.Path) or self.PathS + self.StationS = tostring(self.Station) or self.StationS + self.RouteNumberS = self.RouteNumber or self.RouteNumberS + self.DriverNumberS = self.DriverNumber or self.DriverNumberS + + self.HaveRestart = self.DriverNumber and #self.DriverNumber == 4 and self.RouteNumber and #self.RouteNumber == 3 + and Metrostroi.PAMConfTest[self.LineS] + and Metrostroi.PAMConfTest[self.LineS][tonumber(self.PathS)] + and Metrostroi.PAMStations[self.LineS][tonumber(self.StationS)] + self.Train:SetNW2Bool("PAM:HaveRestart",self.HaveRestart) + elseif state == 3 or state == 3.5 then + self.KeyboardX,self.KeyboardY = 22,47 + + if state == 3 then + self.StationS = "" + self.PathS = "" + self.RouteNumberS = "" + self.DriverNumberS = "" + end + + self:UpdateStationList(self.StationS) + self.Train:SetNW2String("PAM:EnterError","") + elseif (state == 4 or state == 5) and self.LineS then + if state == 4 then self.CheckRing = true end + --elseif state == 5 then + self.Line = tonumber(self.LineS) + self.Station = tonumber(self.StationS) + self.Path = tonumber(self.PathS) + self.RouteNumber = self.RouteNumberS + self.DriverNumber = self.DriverNumberS + self.LineS = nil + self.StationS = nil + self.PathS = nil + self.RouteNumberS = nil + self.DriverNumberS = nil + + self:SetMode(1) + self.EPKActive = true + self.ControlMode = 2 + self.State5 = nil + self.CloseDoors = true + elseif state == 6 then + self:SetMode(0) + self.EPKActive = true + self.ControlMode = 2 + self.State5 = nil + self.CloseDoors = true + end + self.State = state + if time then self.ChangeTimer = CurTime()+time end +end + +function TRAIN_SYSTEM:SetMode(mode) + self.Mode = mode + if mode==0 then + self.Transit = false + self.FireBack = false + self.Shunt = false + self.AntiMiss = false + elseif mode==1 then + self.Distance = 0 + self.StationTable,self.PrevStationTable = self:FindStation(self.Line,self.Path,self.Station) + self.LastStationTable = self:FindLastStation() + self.SensorError = false + self.Deadlock = nil + self.FireBack = false + self.Shunt = false + self.AntiMiss = false + elseif mode == 2 then + self.AntiMiss = false + self.FireBack = false + elseif mode == 3 then + self.Transit = false + self.FireBack = false + self.Shunt = false + self.AntiMiss = false + elseif mode == 6 then + self.Shunt = false + end +end + +function TRAIN_SYSTEM:CANReceive(source,sourceid,target,targetid,textdata,numdata) + if self.CANIgnore and CurTime()-self.CANIgnore < 2 then return end + if sourceid == self.Train:GetWagonNumber() then return end + if self.State == 0 then return end + if textdata == "Check" then + self:CANWrite("Answer",{ + Errors = not self.GoodSetup, + State=self.State, + Mode = self.Mode, + Line = self.Line, + Path = self.Path, + Station = self.Station, + RouteNumber = self.RouteNumber, + DriverNumber = self.DriverNumber, + Deadlock = self.Deadlock and self.Deadlock.id, + RR = self.ReverserWrench, + }) + elseif textdata == "Answer" then + if not self.BackPA then + self.BackPA = { + id=sourceid, + LastAnswer = CurTime(), + state = numdata + } + elseif self.BackPA.id ~= sourceid then + self.BackPA = nil + self.CANIgnore = CurTime() + else + self.BackPA.LastAnswer = CurTime() + self.BackPA.state = numdata + end + local back = self.BackPA and self.BackPA.state + if back and back.RR and self.State>0 then + local tbl = Metrostroi.PAMConfTest and Metrostroi.PAMConfTest[back.Line] and Metrostroi.PAMConfTest[back.Line][(back.Path=="2" or back.Path==2) and 1 or 2] + if not tbl then return end + if self.State<4 and back.State==4 then + self.LineS = back.Line + self.PathS = (back.Path=="2" or back.Path==2) and "1" or "2" + self.RouteNumberS = back.RouteNumber + self.DriverNumberS = back.DriverNumber + self.StationS = back.Station + + self:SetState(4) + end + if self.State<5 and back.State==5 then self.EPKActive = true self.State = 5 self.ControlMode = 2 end + if self.State==5 then + self.Line = back.Line + self.Path = (back.Path=="2" or back.Path==2) and "1" or "2" + self.RouteNumber = back.RouteNumber + self.DriverNumber = back.DriverNumber + self.Deadlock = self.Mode==4 and self.Deadlock or nil + self.Shunt = back.Shunt + if self.Station ~= back.Station or not self.BackRR or self.BackMode~=back.Mode then + local line = self.Line + local path = tonumber(self.Path) + for k,v in ipairs(tbl[1].stations) do + if v.id == tonumber(back.Station) then + self.Station = back.Station + self.StationTable = v + self.Distance = v.pos + self.PrevStationTable = tbl[1].stations[k-1] + self.LastStationTable = self:FindLastStation() + self.AlwaysSensor = true + self:FindSensor(self.StationTable.linkedSensor or false) + self.AddDistance = 100+math.random()*50 + end + end + self.BackMode = back.Mode + end + + local deadlock + if back.Deadlock and not self.Deadlock then + local line = self.Line + local path = tonumber(self.Path) + local tbl = Metrostroi.PAMConfTest and Metrostroi.PAMConfTest[line] and Metrostroi.PAMConfTest[line][path] + for k,v in ipairs(tbl[1].stations) do + if back.Deadlock and v.id == back.Deadlock and tonumber(back.Station) == back.Deadlock and not self.StationTable.isInWrong then + self.Deadlock = v + self.Mode = 4 + self.AddDistance = false + self.AntiMiss = false + deadlock = true + end + end + end + if back.Mode<=4 and (not self.Deadlock or self.StationTable.isInWrong) then + self.Mode = math.min(2,back.Mode) + self.AntiMiss = false + end + if (back.Mode==5 or back.Mode==1) and self.Mode~=1 then self:SetMode(1) end + if back.Mode==6 then + self:SetMode(1) + self:SetMode(6) + end + end + end + self.BackRR = back and back.RR + end + +end +function TRAIN_SYSTEM:CANWrite(name,value,number) + if self.State == 0 then return end + if self.CANIgnore and CurTime()-self.CANIgnore < 1 then return end + local source = self.Train:GetWagonNumber() + self.Train:CANWrite("PAM",source,"PAM",number,name,value) +end +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + if Train.Electric.Type < 4 then return end + self.OldDriveModePriority = self.CurrentDriveModePriority or 0 + self.CurrentDriveModePriority = 0 + self.CurrentPneumoModePriority = 0 + + local PAM_VV = Train.PAM_VV + local Power = PAM_VV.Power > 0 + local ALS = Train.ALSCoil + local BackReverser = PAM_VV.KRR2 > 0 + local BackActive = PAM_VV.KRR1 > 0 + local RR = (PAM_VV.KRR > 0 or PAM_VV.KRU > 0) and not BackActive + if RR and self.AddDistance then + if not self.Deadlock then self.Distance = self.Distance-self.AddDistance end + self.AddDistance = false + end + if Power and self.State == 0 then + self.State = -0.5 + self.StartTimer = CurTime() + end + if not Power and self.State ~= 0 then + self.State = 0 + for k,v in pairs(self.TriggerNames) do + self.Triggers[v] = false + self.Touches[v:sub(4,-1)] = false + end + self.BackCheckTimer = false + self.BackPA = nil + self.Brightness = 0.6 + self.Sound = true + self.SoundTimer = false + end + if self.State == -0.5 and CurTime()-self.StartTimer > 0.05 then self.State = -1 self.StartTimer = CurTime() end + if self.State == -1 and CurTime()-self.StartTimer > 5 then self.State = -2 self.StartTimer = CurTime() self:SetWaitTimer(0.2) end + if self.State == -2 and CurTime()-self.StartTimer > 0.8 then self.State = -3 self.StartTimer = CurTime() self:SetWaitTimer(1) end + if self.State == -3 and CurTime()-self.StartTimer > 3 then self.State = -4 self.StartTimer = CurTime() end + if self.State == -4 and CurTime()-self.StartTimer > 2 then self.State = -5 self.StartTimer = CurTime() self:SetWaitTimer(1) end + if self.State == -4 and CurTime()-self.StartTimer > 2 then self.State = -5 self.StartTimer = CurTime() self:SetWaitTimer(1) end + if self.State == -5 and CurTime()-self.StartTimer > 5 then self.State = 1 self.StartTimer = CurTime() self:SetWaitTimer(0.2) end + if self.State == -5 and PAM_VV.LPT > 0 then + if PAM_VV.KGR==0 and self.WaitingX==nil then + self.WaitingX = false + elseif PAM_VV.KGR>0 and self.WaitingX==false then + self.WaitingX = true + elseif PAM_VV.KGR==0 and self.WaitingX then + self:SetState(6,0.1) + end + else + self.WaitingX = nil + end + if self.ChangeTimer and CurTime()-self.ChangeTimer > 0 then self.ChangeTimer = nil end + + local ALSOn = (self.State>0) and 1 or 0 + if self.PAKSD and ALSOn ~= ALS.Enabled then + ALS:TriggerInput("Enable",ALSOn) + end + + self.Speed = ALS.Speed--math.Round(ALS.Speed or 0,1) + local speed = self.Speed + local speedMpS = speed/3600*1000 + local speedMpSSigned = speedMpS*ALS.SpeedSign + local accel = ALS.Acceleration + if ALSOn>0--[[self.State > 0 or self.State<-3]] then + for k,v in pairs(self.TriggerNames) do + local name = v:sub(4,-1) + local val = Train[v].Value > 0.5 + if (self.Touches[name] or val) ~= self.Triggers[v] then + self.Triggers[v] = self.Touches[name] or val + self:Trigger(name,self.Triggers[v],val == self.Triggers[v]) + end + + if self.SoundTimer and self.SoundTimer > 0 and CurTime()-self.SoundTimer > 0.5 then + self.SoundTimer = -CurTime() + self.Sound = not self.Sound + Train:PlayOnce("pa_f","bass",1) + end + if self.SoundTimer and self.SoundTimer < 0 and CurTime()+self.SoundTimer > 0.25 then + self.SoundTimer = false + Train:PlayOnce("pa_f","bass",1) + end + end + if (not self.BackCheckTimer or CurTime()-self.BackCheckTimer > 1) then + self:CANWrite("Check") + self.BackCheckTimer = CurTime() + end + if self.BackPA and CurTime()-self.BackPA.LastAnswer > 2 then + self.BackPA = nil + end + + local ALSSh = self.PAKSD and 0 or (1-Train.ALS.Value)*Train.VRD.Value --ALS Shunt + local Vd = -1 + if ALS.F5*(1-ALSSh) > 0 then Vd = 0 end + if ALS.F4*(1-ALSSh) > 0 then Vd = 40 end + if ALS.F3*(1-ALSSh) > 0 then Vd = 60 end + if ALS.F2*(1-ALSSh) > 0 then Vd = 70 end + if ALS.F1*(1-ALSSh) > 0 then Vd = 80 end + if Vd ~= self.SpeedLimit then + if Vd == -1 and not self.FQChagneTimer then + self.FQChagneTimer = CurTime() + end + if Vd ~= -1 or self.FQChagneTimer and (speedMpS <= 0.1 and CurTime()-self.FQChagneTimer > 2.5 or speedMpS >= 0.1 and CurTime()-self.FQChagneTimer > 0.8) then + self.SpeedLimit = Vd + self.FQChagneTimer = nil + end + end + if self.PAKSD then --ALS outputs for KSD + self.F5 = self.SpeedLimit==0 and 1 or 0 + self.F4 = self.SpeedLimit==40 and 1 or 0 + self.F3 = self.SpeedLimit==60 and 1 or 0 + self.F2 = self.SpeedLimit==70 and 1 or 0 + self.F1 = self.SpeedLimit==80 and 1 or 0 + self.F6 = self.SpeedLimit>-1 and ALS.F6 or 0 + end + self.NoFreq = self.SpeedLimit==-1 and 1 or 0 + elseif self.State==-0.5 then + self.NoFreq = 1 + self.F6 = 1 + self.F5 = 1 + self.F4 = 1 + self.F3 = 1 + self.F2 = 1 + self.F1 = 1 + else + self.NoFreq = 0 + self.F6 = 0 + self.F5 = 0 + self.F4 = 0 + self.F3 = 0 + self.F2 = 0 + self.F1 = 0 + end + Train:SetNW2Float("PAM:State",self.ChangeTimer and -10 or self.State) + Train:SetNW2Float("PAM:Brightness",self.Brightness) + if self.StartTimer then Train:SetNW2Float("PAM:StartTimer",CurTime()-self.StartTimer) end + + --if self.WorkTimer and CurTime()- self.WorkTimer < 0.1 then return end + --self.WorkTimer = CurTime() --CHECK + local Ring = false + if self.State <= 0 then + self["2"] = 0 + self["3"] = 0 + self["8"] = 0 + self["17"] = 0 + self["19"] = 0 + self["20"] = 0 + self["20X"] = 0 + self["25"] = 0 + self["025"] = 0 + self["33"] = 0 + self["033"] = 0 + self["33G"] = 0 + self["16"] = 0 + self["31"] = 0 + self["32"] = 0 + self["68"] = 0 + self["39"] = 0 + self["7GA"] = 0 + self["48"] = 0 + self.EPK = 0 + + self.Ring = self.State==-0.5 and 1 or 0 + self.Mode = 0 + self.SensorEnabled = false + return + end + self.GoodSetup = not not Metrostroi.PAMConfTest + self.ReverserWrench = PAM_VV.KRR > 0 + self.CurrentError = 0 + + if self.State == 1 or self.State == 1.5 then + Train:SetNW2Bool("PAM:GoodTest",true) + Train:SetNW2Bool("PAM:GoodSetup",self.GoodSetup) + Train:SetNW2Int("PAM:GoodBack",self.BackPA~=nil and (self.BackPA.state.Errors and -1 or 1) or 0 ) + + end + if self.State == 3 or self.State==5 and self.State5 == -5 then + Train:SetNW2String("PAM:RouteNumber",self.RouteNumberS) + Train:SetNW2String("PAM:DriverNumber",self.DriverNumberS) + end + if self.State == 3 or self.State == 3.5 or self.State==5 and self.State5 == 9 then + if self.StationS ~= "" then + local st = self:FindStation(self.LineS,self.PathS,self.StationS) + Train:SetNW2String("PAM:CurrentStationS",st and (st.name or st.id) or "") + else + Train:SetNW2String("PAM:CurrentStationS", "") + end + Train:SetNW2String("PAM:StationS",self.StationS) + Train:SetNW2String("PAM:LineS",self.LineS) + Train:SetNW2String("PAM:PathS",self.PathS) + end + if self.State < 4 then + self:SetDriveMode("OXT") + self:SetDoorMode("DO") + self:SetPneumoMode("NT") + self["7GA"] = 0 + --[[ if PAM_VV.KB==0 then + self:SetPneumoMode("V2") + else + self:SetPneumoMode("NT") + end--]] + self.SensorEnabled = false + if (not self.ReverserWrench or not self.GoodSetup) and self.State >= 2 then + self:SetState(1,0.1) + end + else + self["7GA"] = PAM_VV.KSOT+PAM_VV.KB + if self.CheckRing and PAM_VV.KB > 0 then self.CheckRing = false end + end + if self.State == 4 then + self.SensorEnabled = false + Ring = self.CheckRing + + self:SetDriveMode("OD") + self:SetPneumoMode("NT") + self:SetDoorMode("DO") + if RR then + self:SetDoorMode(PAM_VV.KDP>0 and "DP"or PAM_VV.KDL > 0 and "DL" or "DO") + if speed>0.2 then self.Stopping = true end + if speed<=0.2 and PAM_VV.KGR>0 and PAM_VV.KB>0 then self.Stopping = false end + if self.Stopping then + self:SetDriveMode("AT") + self:SetPneumoMode("V2") + end + end + else + self.Stopping = false + end + if self.State >= 5 then + self:Error(17,not RR and not BackActive) + self:Error(19,BackActive) + --Drive block after drive reset + if self.OldDriveModePriority>4 and PAM_VV.KGR==0 then + self:SetDriveMode("OXT") + else + self:SetDriveMode("OD") + end + self:SetDoorMode("DO") + + if not RR and not BackActive then + self:SetPneumoMode("V1") + else + self:SetPneumoMode("NT") + end + + + local stationLast = "" + local station = "" + local signal = "" + local slope = 0 + local dist = 1337 + local opv = false + --Distance count + if not self.Distance and self.State == 5 then self.Distance = self.StationTable and self.StationTable.pos or 0 end + + if self.Mode~=6 and self.Distance then + local pos = Metrostroi.TrainPositions[Train];pos = pos and pos[1] + local delta = speedMpS*dT + if pos and pos.path ~= self.OldPath then + self.OldPath = pos.path + self.OldPos = pos.x+Train.PosX + delta = speedMpS*dT + elseif pos then + local x = pos.x+Train.PosX + delta = (x-self.OldPos)*(Metrostroi.TrainDirections[Train] and 1 or -1) + self.OldPos = x + end + self.Distance = self.Distance + delta + end + if self.Mode == 1 or (0 < self.Mode and self.Mode < 6) and not self.StationTable then + stationLast = "выход на линию" + if self.StationTable then station = self.StationTable.name end + dist = 3072-self.Distance + elseif self.Mode == 2 or self.Mode == 3 then + local lasttbl = self.Deadlock or self.LastStationTable + if self.Mode == 3 and lasttbl and lasttbl.id==self.StationTable.id then + stationLast = "оборот" + else + stationLast = lasttbl and lasttbl.name_last or "?" + end + dist = self.StationTable.pos-self.Distance + station = self.StationTable.name + signal = self:FindNextSignal() + slope = self:FindNextSlope() + if self.PrevStationTable then + local dist = self.PrevStationTable.pos-self.Distance + local opvDist = self.PrevStationTable.isHorlift and 0.45 or 3 + opv = -opvDist < dist and dist < opvDist + end + if not opv then + local opvDist = self.StationTable.isHorlift and 0.45 or 3 + opv = -opvDist < dist and dist < opvDist + end + elseif self.Mode == 4 or self.Mode == 5 then + stationLast = "оборот" + station = self.StationTable.name + if self.Mode == 5 then + dist = 3072-self.Distance + opv = true + else + dist = self.StationTable.dist_last_end-self.Distance + local opvDist = self.StationTable.isHorlift and 0.45 or 3 + opv = self.Distance > self.StationTable.dist_last_start + if not opv then + local dist = self.StationTable.pos-self.Distance + local opvDist = self.StationTable.isHorlift and 0.45 or 3 + opv = -opvDist < dist and dist < opvDist + end + end + end + + local OXT = false + if RR then + if (self.Mode~=2 and self.Mode~=3) or self.NextSensorDist and math.abs(self.Distance-self.NextSensorDist)<=20 or self.AlwaysSensor then + self.SensorEnabled =true + elseif self.SensorEnabled then + if self.Mode==2 and self.SensorError==nil then + self.SensorError = true + end + self.SensorEnabled = nil + end + + if self.State~=6 and ((self.Mode==2 or self.Mode==3) and (dist < -3 and (self.Transit or not self.AntiMiss)) or self.OpenControl == false and speed > 0.2 or self.Mode == 4 and dist<0) then + local oldSt = self.StationTable + if not self.Shunt then self.StationTable,self.PrevStationTable = self:FindNextStation() end + + if self.Mode == 4 and dist<0 then + self.Mode = 5 + + self.StationTable = oldSt + elseif self.StationTable then + if self.Shunt then + self:SetMode(6) + elseif self.Deadlock and oldSt.id == self.Deadlock.id then + self.Mode=4 + + self.StationTable=self.Deadlock + self.Deadlock = nil + elseif self.Mode == 3 then + self:SetMode(2) + end + elseif oldSt and oldSt.isLast and oldSt.dist_last_end then + self.Mode = 4 + self.StationTable = oldSt + else + self.Station = self:FindFirstStation() + self:SetMode(1) + end + self.Station = self.StationTable.id + self.OpenControl = nil + end + + if self.Mode==2 and dist<=200 then + local line = self.Line + local path = tonumber(self.Path) + local tbl = Metrostroi.PAMConfTest and Metrostroi.PAMConfTest[line] and Metrostroi.PAMConfTest[line][path] + if self.StationBrakeRing==nil and tbl and tbl[1].sensors[self.StationTable.linkedSensor] and tbl[1].sensors[self.StationTable.linkedSensor]0.2 then self.StationBrakeRing = false end + elseif self.StationBrakeRing==false or self.StationBrakeRing and CurTime()-self.StationBrakeRing > 0.5 then + self.StationBrakeRing = nil + end + local CanOpen = not self.CloseDoors and PAM_VV.KRH==0 and (PAM_VV.LPT > 0 or self.NoLPT and PAM_VV.V1>0) + if ((opv or self.Mode==5) and speed < 0.5 or (self.OpenDoors and speed < 2.5 or not self.GoodSetup)) and CanOpen then + self:SetDoorMode((not self.OpenControl and (PAM_VV.ZD>0 or self.DoorMode=="ZD")) and "ZD" or "DO") + local err + if (self.Mode > 3 or self.OpenDoors or not self.GoodSetup) then + local Open = PAM_VV.KDL > 0 or PAM_VV.KDP > 0 + if Open and PAM_VV.ZD == 0 then + self:SetDoorMode(PAM_VV.KDP > 0 and "DP"or "DL") + if not self.OpenControl then self.OpenControl = CurTime() end + if not self.OpeningTimer and PAM_VV.KD>0 then self.OpeningTimer = CurTime() end + end + if Open and PAM_VV.ZD>0 and not self.OpenTimer then + self.OpenTimer = CurTime() + elseif (not Open or PAM_VV.ZD==0) and self.OpenTimer then + self.OpenTimer = nil + end + --TODO: При открытии контроль 16 провода, через 0.7Ñ Ð¿Ñ€Ð¸ наличии 16 провода Ñообщение "Разблокируйте двери" + --TODO: При нажатии на кнопку>2.5Ñ Ð¸ не пропадании КД подÑказка "Ðет ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ + elseif self.Mode<=3 then + local stationTable = dist>10 and self.PrevStationTable or self.StationTable + local Open = PAM_VV.KDL > 0 or PAM_VV.KDP > 0 or PAM_VV.OPD > 0 + local CanOpen = not self.Transit and (PAM_VV.KDL > 0 and not stationTable.rightDoors or (PAM_VV.KDP > 0 or PAM_VV.OPD > 0) and stationTable.rightDoors) + if PAM_VV.ZD==0 and CanOpen then + self:SetDoorMode(stationTable.rightDoors and (PAM_VV.OPD > 0 and "DB" or "DP")or "DL") + if opv and (stationTable==self.StationTable or self.FireBack) then + self:SetMode(3) + end + if not self.OpenControl then self.OpenControl = CurTime() end + if not self.OpeningTimer and PAM_VV.KD>0 then self.OpeningTimer = CurTime() end + else + self.OpeningTimer = false + self:Error(1,Open and not CanOpen and not self.Transit and stationTable.rightDoors and PAM_VV.OPD == 0) + self:Error(2,Open and not CanOpen and not self.Transit and not stationTable.rightDoors and PAM_VV.OPD == 0) + self:Error(23,Open and not CanOpen and self.Transit) + end + if CanOpen and PAM_VV.ZD>0 and not self.OpenTimer then + self.OpenTimer = CurTime() + elseif (not CanOpen or PAM_VV.ZD==0) and self.OpenTimer then + self.OpenTimer = nil + end + --TODO: При открытии контроль 16 провода, через 0.7Ñ Ð¿Ñ€Ð¸ наличии 16 провода Ñообщение "Разблокируйте двери" + --TODO: При нажатии на кнопку>2.5Ñ Ð¸ не пропадании КД подÑказка "Ðет ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ + end + if self.OpeningTimer and (CurTime()-self.OpeningTimer>2.7 and PAM_VV.KD==0 or not RR) then self.OpeningTimer = false end + self:Error(4,self.OpeningTimer and CurTime()-self.OpeningTimer>2.7) + --TODO: Ð”Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° "3" на Ñтанции закрытого типа Ñообщение "Откройте двери Ñтанции" при отÑутÑтвии КД(контроллируемом) и наличии чаÑтоты + -- Отмена ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð½Ð° КБ либо поÑвлении 0(Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¾Ð¹ ходового режима) + else + if not CanOpen or PAM_VV.ZD>0 or self.DoorMode=="ZD" then self:SetDoorMode("ZD") end + self.OpenDoors = false + self.OpenTimer = false + self.OpeningTimer = false + end + if self.CloseDoors then + if self.DoorMode=="ZD" then self.CloseDoors = false end + self:SetDoorMode("ZD") + end + + if self.OpenControl and self.Mode==3 and self.StationTable.isHorlift and self.SpeedLimit~=0 then + if not self.StationDoorsTimer then self.StationDoorsTimer = CurTime() end + if PAM_VV.KB>0 and self.StationDoorsTimer~=true and self.StationDoorsTimer>2.5 then self.StationDoorsTimer = true end + else + self.StationDoorsTimer = nil + end + --self:Error(10,self.KDTimer and not self.OpenControl,7,true) + self:Error(5,self.KDTimer and not self.OpenControl) + self:Error(27,self.StationDoorsTimer and self.StationDoorsTimer~=true and CurTime()-self.StationDoorsTimer>2.5) + + self:Error(7,self.OpenTimer and CurTime()-self.OpenTimer>0.7) + self:Error(9,self.SensorError and PAM_VV.ZD==0 and (PAM_VV.KDL>0 or PAM_VV.KDP>0)) + if PAM_VV.KDL>0 or PAM_VV.KDP>0 then + if not self.KDLPTimer then self.KDLPTimer = CurTime() end + elseif self.KDLPTimer then self.KDLPTimer = nil end + self:Error(22,self.KDLPTimer and CurTime()-self.KDLPTimer>10) + + --Disable NoKD if we got KD + if self.NoKD and PAM_VV.KD>0 and not self.KDOnTime then self.KDOnTime = CurTime() end + if self.NoKD or PAM_VV.KSZD>0 then self:SetDoorMode("ZD") end + if self.KDOnTime and PAM_VV.KD>0 and CurTime()-self.KDOnTime>5 then self.KDOnTime = false self.NoKD = false end + if self.KDOnTime and PAM_VV.KD==0 then self.KDOnTime = false end + if PAM_VV.KRU>0 and PAM_VV.ZD==0 then self:SetPneumoMode("V2") end + + --Movement block by 64tw + if PAM_VV.I33*PAM_VV.LPT>0 and not self.NoLPT then + if not self.LPTTimer then self.LPTTimer = CurTime() end + elseif self.LPTTimer and (PAM_VV.KGR>0 or self.NoLPT or CurTime()-self.LPTTimer<=6.5) then + self.LPTTimer = nil + end + self:Error(10,self.LPTTimer and CurTime()-self.LPTTimer > 6.5) + + + local speedLimit = math.max(21,self.SpeedLimit+1) + --[[if self.SpeedLimit == -1 and (self.Mode == 1 or self.Mode == 5) then + speedLimit = 16 + else]]if self.ControlMode == 1 then + speedLimit = (self.SpeedLimit > 40 and 36 or 21)*PAM_VV.KB + elseif PAM_VV.KB>0 then + speedLimit=21 + elseif self.Mode==6 then + speedLimit = math.min(41,speedLimit) + end + --KS Mode + if self.SpeedLimit <= 20 then + if not self.ZeroStopped and speed <= 0.2 then + self.ZeroStopped = true + end + local station = (self.Mode==1 or self.Mode==2) and dist<=100 + if self.ZeroStopped == nil and speed > 0.2 then + self.ZeroStopped = self.Mode>3 or station and not self.Transit + end + if self.ZeroStopped and PAM_VV.KB == 0 or self.SpeedLimit~=-1 and ((ALS.F6==0 and not station or self.Transit) and not self.Vd0) then + self:SetDriveMode("OXT") + OXT = true + speedLimit=0 + end + if not self.ZeroStopped or speed > 0.2 and PAM_VV.KB == 0 then speedLimit = 0 end + if self.SpeedLimit~=-1 then + if not self.ZeroTimer then self.ZeroTimer = CurTime() end + else + self.ZeroTimer = nil + end + self:Error(12,self.SpeedLimit==0 and PAM_VV.KGR==0 and OXT and PAM_VV.KB>0) + self:Error(15,self.ZeroTimer and CurTime()-self.ZeroTimer>30,7,true) + else + self.ZeroStopped = nil + self.ZeroTimer = nil + end + + self:Error(26,self.ControlMode==1 and PAM_VV.KB==0 and PAM_VV.KGR==0) + + if self.SpeedLimit>20 or self.SpeedLimit == -1 then self.Vd0 = false end + if not self.PAKSD and self.SpeedLimit==20 and PAM_VV.VRD>0 then self.Vd0 = true end + + local speedLimitMpS = speedLimit/3600*1000 + local timeAdd = (1-PAM_VV.I33G*1+PAM_VV.I33*1) + + self.Acceleration = self.Acceleration+(accel-self.Acceleration)*dT*1 + if speedMpS+self.Acceleration*timeAdd > speedLimitMpS and speed>0.2 or self.STTimer then + local ST,AT = false,false + if not self.OXTTimer then self.OXTTimer = CurTime() end + if speed > speedLimit or self.OXTTimer and CurTime()-self.OXTTimer > 1.5 then + ST = true + if not self.STTimer then + self.STTimer = CurTime() + self.RingArmed = PAM_VV.KRT==0 and CurTime() + self.STV1Timer = PAM_VV.KRT==0 and CurTime() + end + end + if speed > speedLimit or self.STTimer and CurTime()-self.STTimer > 1 then + AT = true + end + if self.STV1Timer and CurTime()-self.STV1Timer < 0.7 then self:SetPneumoMode("V1") end + if AT then + self:SetDriveMode("AT") + elseif ST then + self:SetDriveMode("ST") + else + self:SetDriveMode("OXT") + end + if speed < speedLimit-2 and not self.RingArmed then self.STTimer = false end + + if (AT or ST) and (accel>-0.7 and PAM_VV.KET == 0) then + if not self.EKTimer then self.EKTimer = CurTime() end + elseif self.EKTimer then + self.EKTimer = false + end + if self.EKTimer and CurTime()-self.EKTimer > ((100 and self.V1Stop then + if not self.V1StopTimer then self.V1StopTimer = CurTime() end + if self.V1StopTimer and CurTime()-self.V1StopTimer>1 then + self.V1StopTimer = nil + self.V1Stop = nil + end + end + if not self.Stopped then self.Stopped = true end + if self.Stopped and speed>5.5 then + self.Stopped = 1 + end + if self.Stopped==1 then self:SetPneumoMode("V2") end + self.Starting = (speed>0.2 or PAM_VV.KRH>0 or PAM_VV.KGR==0) and self.Starting + elseif not self.RollingCheckRolled then + if self.Stopped then + self.Stopped = false + self.Starting = self.NoFreq==0 and CurTime() + end + if self.Starting and CurTime()-self.Starting<4.5 and speed>0.5 then self.Starting = nil end + end + + if self.Starting and CurTime()-self.Starting>=4.5 then self:SetDriveMode("AT") end + if not self.Stopped then self.V1Stop = nil end + self:Error(13,self.Starting and CurTime()-self.Starting>=4.5) + + if speedMpSSigned < -0.01 and not self.Rolling and not self.FireBack and self.GoodSetup then self.Rolling = 0 end + if self.Rolling and self.Rolling < 0 then self.Rolling = false end + if self.Rolling then + local rolled = -speedMpSSigned*dT + if math.abs(rolled) >0.001 then + self.Rolling = self.Rolling + rolled + end + end + if not self.Rolled and self.Rolling and self.Rolling > 0.5+PAM_VV.KRH*2.5 then + self.Rolled = PAM_VV.KRH + end + if self.Rolled then + if self.Rolled>0 then + self:SetDriveMode("OXT") + end + if self.Rolled == 0 and PAM_VV.KRH > 0 then + self.Rolled = false + self.Rolling = false + end + if PAM_VV.KRH == 0 then self.Rolled = 0 end + self:SetPneumoMode("V2") + end + + if self.Transit and self.Mode == 2 then + local lasttbl = self.Deadlock or self.LastStationTable + local last = lasttbl and lasttbl.id==self.StationTable.id + if last and (dist-10) < (speedMpS^2-3.8*speedMpS)/2.2 and speed>14 or not last and (dist-10)<(speedMpS^2-8.3*speedMpS)/2.2 and speed>30 then + self.TransitBraking = last and 10 or 30 + end + if self.TransitBraking and speed>self.TransitBraking and dist<120 then + self:SetDriveMode("AT") + elseif self.TransitBraking then + self.TransitBraking = false + end + end + --[[ if (self.Mode==2 or self.Mode==3) then + if self.AntiMiss == nil then + local SchemeEngageDistance,_ACCEL,_ACCEL2 + local currA = -math.min(0,Train.Acceleration) + _ACCEL = 1.61 + _ACCEL2 = _ACCEL*2 + local _SCHTime + if PAM_VV.KRT>0 then + --local speed = 45 + --local speedMpS = speed/3600*1000 + _SCHTime = ( + ( + math.Clamp(((18-PAM_VV.KPRK)/17)^1.5*(55-(speed-5))/55,0,1)^1.1 +f )*2.2-math.Clamp(PAM_VV.KPRK-14,0,4)/4*3.3*math.Clamp((16-(speed-3))/16,0,1)^2.2 + )*math.Clamp((0.5-currA),0,1) + --_SCHTime = ((math.Clamp((PAM_VV.KPRK-1)/17*(55-(10-5))/55,0,1)^1.1)*2.2-math.Clamp(PAM_VV.KPRK-12,0,6)/6*3-3.5*math.Clamp((16-(10-3))/16,0,1)^2.2)*math.Clamp((0.8-currA)/0.8,0.2,1) + SchemeEngageDistance = speedMpS*_SCHTime+(_ACCEL*(_SCHTime^2))/2-(2.0)*math.Clamp((7-(speed-3))/7,0,1) + else + _SCHTime = ((math.Clamp((55-(speed-5))/55,0,1)^1.2)*1.85+1-3.5*math.Clamp((16-(speed-3))/16,0,1)^1.7)*math.Clamp((_ACCEL-currA)/_ACCEL,0,1) + SchemeEngageDistance = speedMpS*_SCHTime+(_ACCEL*(_SCHTime^2))/2 + end + --SchemeEngageDistance = speedMS*_SCHTime+(_ACCEL*(_SCHTime^2))/2 + if not self.Transit and speed>0.2 and (dist-SchemeEngageDistance) < (speedMpS^2)/_ACCEL2 and not self.AntiMiss then + self.AntiMiss = opv and 2 or 1 + print("ENGAGED "..dist) + elseif self.Transit then + local lasttbl = self.Deadlock or self.LastStationTable + local last = (lasttbl and lasttbl.id==self.StationTable.id) and 10 or 30 + if (dist-SchemeEngageDistance) < (speedMpS^2-(last/3600*1000)*speedMpS)/_ACCEL2 and not self.AntiMiss then + self.AntiMiss = opv and 2 or 1 + print("ENGAGED "..dist) + end + end + end--]] + if (opv or dist<0) and speed<=0.2 then + self.AntiMissStation = true + elseif dist>0 and not opv then + self.AntiMissStation = false + end + if not self.Transit and (self.Mode==2 or self.Mode==3) and not BackReverser then + if self.AntiMiss == nil or self.AntiMiss==1 then + local SchemeEngageDistance,_ACCEL,_ACCEL2 + local currA = -math.min(0,Train.Acceleration) + _ACCEL = 1.61 + _ACCEL2 = _ACCEL*2 + local _SCHTime + if PAM_VV.KRT>0 or PAM_VV.LPT>0 or speed<6 then + --local speed = 45 + --local speedMpS = speed/3600*1000 + _SCHTime = ( + ( + math.Clamp(((18-PAM_VV.KPRK)/17)^1.5*(55-(speed-5))/55,0,1)^1.1 + )*2.2-math.Clamp(PAM_VV.KPRK-14,0,4)/4*3.3*math.Clamp((16-(speed-3))/16,0,1)^2.2 + )*math.Clamp((0.5-currA),0,1) + --_SCHTime = ((math.Clamp((PAM_VV.KPRK-1)/17*(55-(10-5))/55,0,1)^1.1)*2.2-math.Clamp(PAM_VV.KPRK-12,0,6)/6*3-3.5*math.Clamp((16-(10-3))/16,0,1)^2.2)*math.Clamp((0.8-currA)/0.8,0.2,1) + SchemeEngageDistance = speedMpS*_SCHTime+(_ACCEL*(_SCHTime^2))/2-(2.0)*math.Clamp((7-(speed-3))/7,0,1) + + if dist<20 and speed<23 then + SchemeEngageDistance = SchemeEngageDistance-math.Clamp((dist-3)/17,0,1)*2 + end + else + _SCHTime = ((math.Clamp((55-(speed-5))/55,0,1)^1.2)*1.85+1-3.5*math.Clamp((16-(speed-3))/16,0,1)^1.7)*math.Clamp((_ACCEL-currA)/_ACCEL,0,1) + SchemeEngageDistance = speedMpS*_SCHTime+(_ACCEL*(_SCHTime^2))/2 + end + --SchemeEngageDistance = speedMS*_SCHTime+(_ACCEL*(_SCHTime^2))/2 + local badAccel = (dist-SchemeEngageDistance) < (speedMpS^2)/_ACCEL2 + if speed>0.2 and badAccel and self.AntiMiss==nil then + self.AntiMiss = self.AntiMissStation and 2 or 1 + self.AntiMissBlock = CurTime() + end + if self.AntiMiss and not badAccel and CurTime()-self.AntiMissBlock>0.8 and PAM_VV.KB>0 then + self.AntiMiss = nil + end + end + if self.AntiMiss then + self:SetDriveMode("AT") + self:SetPneumoMode("V1") + if speed<6 then + self:SetPneumoMode("V2") + end + if speed < 0.2 and ((self.AntiMiss==2 or -3<=dist) and PAM_VV.KB>0 or self.AntiMiss==1) then + self.AntiMiss = self.AntiMiss==1 and nil + end + end + if self.AntiMiss==false and self.Mode==2 and dist > 150 then self.AntiMiss = nil end + elseif self.AntiMiss then + self.AntiMiss = nil + end + else + self.LPTTimer = nil + + self.StationBrakeRing = nil + self.SensorEnabled = nil + + self.OpenTimer = false + self.OpeningTimer = false + + self.KDTimer = nil + self.OpenDoors = false + + self.StationDoorsTimer = nil + + self.ZeroStopped = nil + self.ZeroTimer = nil + + self.STTimer = false + self.OXTTimer = false + self.STV1Timer = nil + + self.Starting = nil + self.Stopped = false + self.Rolled = false + self.Rolling = false + if self.AntiMiss then self.AntiMiss = nil end + end + + if (self.OpenControl~=true or PAM_VV.K16>0) and PAM_VV.KD==0 then + if not self.KDTimer then self.KDTimer = CurTime() end + if self.KDTimer and CurTime()-self.KDTimer>5 then self.OpenControl = false end + else + self.KDTimer = nil + end + if self.OpenControl and self.OpenControl~=true and PAM_VV.KD > 0 then self.OpenControl = CurTime() end + if self.OpenControl==true and PAM_VV.KD > 0 then self.OpenControl = false end + if self.OpenControl and self.OpenControl ~= true and CurTime()-self.OpenControl > 1 then self.OpenControl = true end + + Train:SetNW2Int("PAM:Mode",self.Mode) + self:Error(8,self.State==5 and RR and (self.AntiMiss==2 or dist<-3 and self.AntiMiss)) + Train:SetNW2Bool("PAM:Shunt",self.Shunt) + -- DO: Движение по Ñтанционным путÑм + -- ВключаетÑÑ Ð½Ð° ÑтанциÑÑ… Ñ Ð¿ÑƒÑ‚ÐµÐ²Ñ‹Ð¼ развитием при фактичеÑкой ÑкороÑти 0 или нахождении в зоне ОПВ + -- ÐвтоматичеÑки вводитÑÑ Ð¿Ð¾Ñле передачи ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ отÑутÑтвии ÑвÑзи между головой и хвоÑтом + -- Ðе контролирует пройденный путь и отменÑетÑÑ Ð¿Ñ€Ð¸ фикÑации + -- Разрешает движение Ñо ÑкороÑтью не более 40, а при ограничении 20 не делает предварительную оÑтановку + + --TODO: Смена линии + -- Возможно назначить в любой момент до Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñо Ñтанции Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾Ð¹ ветвью + -- Видны вÑе Ñтанции по ходу движениÑ, имеющие передаточную ветвь + -- ÐвтмоатичеÑÐºÐ°Ñ Ñ„Ð¸ÐºÑÐ°Ñ†Ð¸Ñ Ñтанции + -- При ограничении 20 не делает предварительную оÑтановку + + -- DO: Транзит + -- Ограничение ÑкороÑти проезда ОПВ 29км\\ч и 10 на конечных + -- При запрещающем показании Ñветофора у выходных Ñветофоров торможенеи до полной оÑтановки + + --Block door open without all conditions + -- DO: При наличии 16 провода и отÑутвии 15го в течении 5 Ñекунд подÑказка "Ðет ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹" + + + --if PAM_VV.K16>0 and PAM_VV.KD==0 and not self.KDTimer then self.KDTimer = CurTime() end + --if (PAM_VV.K16==0 or PAM_VV.KD>0) and self.KDTimer then self.KDTimer = nil end + + --Get controller state + local driveModeKV = 0 + if PAM_VV.KGR == 0 then + driveModeKV = 1+PAM_VV.I2+PAM_VV.I3 + elseif PAM_VV.I33G > 0 then + driveModeKV = -2-PAM_VV.I2*2+PAM_VV.I25 + end + + --Fire rolling back logic + if self.FireBack then + local opvDist = self.FireBack.isHorlift and -0.45 or -1 + if self.FireBack.pos-self.Distance>opvDist then + self.StationTable=self.FireBack + self:SetDriveMode("OXT") + self:SetPneumoMode("V1") + if speed>5.4 then self:SetPneumoMode("V2") end + if speed<0.2 then self.FireBack = false end + end + end + + local No34 = self.V1Stop and CurTime()-self.V1Stop > 4 + self.ControlMode2 = (PAM_VV.KVARS > 0 or self.PAKSD) and not No34 and PAM_VV.KSOT > 0 + local mode = self.ControlMode2 and 2 or 1 + + if self.ControlMode~=mode and (mode==1 or self.ControlModeAuto) then + self.ControlMode = mode + self.ControlModeAuto = true + end + if RR then + self:Error(20,self.ControlModeAuto and self.ControlMode==1,No34 and 14 or 7,true) + self:Error(21,self.ControlModeAuto and self.ControlMode==2,7,true) + self:Error(29,No34,7,true) + self:Error(30,self.No34 and not No34,7,true) + self.No34 = No34 + end + + self:Error(24,false,7,true) + + local BlockBack = self.State==6 and self.GoodSetup or not self.FireBack and self.Mode>2 and (not self.StationTable.isHorlift or dist > -.45 or dist < -6 or speed>=3.6) + if (driveModeKV>=0 or PAM_VV.KRU > 0) and ( + --TODO аппаратура отменÑет ходвоой режим и назначает ВЗ№1 при подезде к рейке + not RR or + BackReverser and BlockBack + or self.FireBack and speed>10 + or self.LPTTimer and CurTime()-self.LPTTimer>6.5 + or self.ControlMode==1 and PAM_VV.KB==0 + or PAM_VV.KD < 1 and not self.NoKD and PAM_VV.KRU == 0 + or PAM_VV.KTARS > 0) then + self:SetDriveMode("OXT") + end + self:Error(3,BackReverser and BlockBack and not BackActive) + + --Rolling check + if self.State5==1 then + if not self.RollingCheckRolled then self.RollingCheckRolled = 0 end + local rolled = speedMpSSigned*dT + if math.abs(rolled) >0.001 then + self.RollingCheckRolled = self.RollingCheckRolled + rolled + Train:SetNW2Float("PAM:RollDist",self.RollingCheckRolled) + end + if self.RollingCheckRolled > 2.5 or self.RollingCheckRolled < -0.3 then + self.Stopped = true + self.RollingCheckRolled = false + self.State5 = nil + Train:SetNW2Float("PAM:RollDist",0) + end + if self.NoFreq>0 and PAM_VV.KB==0 then + self:SetPneumoMode("V2") + end + else + self.RollingCheckRolled = false + end + + --if RR and self.ControlMode==1 and PAM_VV.KB==0 then self:SetPneumoMode("V2") end + if self.PneumoMode == "V1" or self.PneumoMode == "V12" then + if PAM_VV.V1==0 and not self.V1Timer then self.V1Timer = CurTime() end + if PAM_VV.V1>0 then + if self.V1Timer then self.V1Timer = nil end + if PAM_VV.LPT==0 and not self.V1ETimer then self.V1ETimer = CurTime() end + if PAM_VV.LPT>0 and PAM_VV.V2==0 and self.V1ETimer then self.V1ETimer = nil end + end + else + self.V1Timer = nil + self.V1ETimer = nil + end + if self.V1Timer and CurTime()-self.V1Timer > 2 then self:SetPneumoMode("V2") end + if self.V1ETimer and CurTime()-self.V1ETimer > 2.5 then self:SetPneumoMode("V2") end + + if self.PneumoMode == "V2" or self.PneumoMode == "V12" then + if PAM_VV.V2==0 and not self.V2Timer then self.V2ETimer = CurTime() end + if PAM_VV.V2>0 then + if self.V2Timer then self.V2Timer = nil end + if PAM_VV.LPT==0 and not self.V2ETimer then self.V2ETimer = CurTime() end + if PAM_VV.LPT>0 and self.V2ETimer then self.V2ETimer = nil end + end + else + self.V2Timer = nil + self.V2ETimer = nil + end + if speed<2.5 and (PAM_VV.KB > 0 or not RR) then self.EPKActive = true end + if self.RingArmed and CurTime()-self.RingArmed>3 then self.EPKActive = false end + if self.V2ETimer and CurTime()-self.V2ETimer>2 then self.EPKActive = false end + + if self.Mode==3 then + if self.BoardRing==nil and Train.BoardTimer and Train.BoardTimer<-2 and PAM_VV.KD==0 then self.BoardRing = CurTime() end + if self.BoardRing and (PAM_VV.KB>0 or PAM_VV.KD>0 or CurTime()-self.BoardRing>2) then self.BoardRing = false end + else + self.BoardRing = nil + end + + if self.RingArmed and PAM_VV.KB > 0 then self.RingArmed = false end + if self.CurrentErrorR ~= self.CurrentError then + self.CurrentErrorR = self.CurrentError + self.CurrentErrorRing = errorsRing[self.CurrentError]==false and CurTime() + end + Ring = self.RingArmed or self.BoardRing or self.StationBrakeRing or errorsRing[self.CurrentError] or self.CurrentErrorRing and CurTime()-self.CurrentErrorRing<1.5 or self.CheckRing + Train:SetNW2Int("PAM:DriveMode",self.ControlMode+PAM_VV.KRU*3) + local driveMode = self.DriveModesConv[self.DriveMode] + Train:SetNW2Int("PAM:KVMode",driveMode>0 and math.max(driveMode,driveModeKV) or driveMode<0 and math.min(driveMode,driveModeKV) or driveModeKV) + Train:SetNW2String("PAM:CurrentStation",station) + Train:SetNW2String("PAM:TargetStation",stationLast) + Train:SetNW2Int("PAM:BoardTime",Train.BoardTimer or 0) + Train:SetNW2Int("PAM:CurrentError",self.CurrentError or 0) + + if self.MessageTimer and CurTime()-self.MessageTimer > 4 then + self.CurrentMessage = 0 + self.MessageTimer = false + end + Train:SetNW2Int("PAM:CurrentMessage",self.CurrentMessage or 0) + + Train:SetNW2Bool("PAM:OXT",OXT) + Train:SetNW2Int("PAM:Vf",speed) + Train:SetNW2Int("PAM:SpeedLimit",self.SpeedLimit) + Train:SetNW2String("PAM:RC",signal) + Train:SetNW2Int("PAM:Slope",slope) + Train:SetNW2Float("PAM:S",dist) + Train:SetNW2Int("PAM:V",not self.EPKActive and -1 or PAM_VV.V2 > 0 and 2 or PAM_VV.V1 > 0 and (false and 2 or 1) or 0) + Train:SetNW2Bool("PAM:LPT",PAM_VV.LPT > 0) + Train:SetNW2Bool("PAM:KD",self.OpenControl==true and 1 or PAM_VV.KD <= 0 and 2 or 0) + Train:SetNW2Bool("PAM:KVARS",PAM_VV.KVARS > 0) + Train:SetNW2Bool("PAM:VRD",PAM_VV.VRD > 0) + Train:SetNW2Bool("PAM:OPV",opv) + Train:SetNW2Bool("PAM:State5_-6",not not self.FireBack) --Vд=0 + Train:SetNW2Bool("PAM:State5_5",self.Vd0) --Vд=0 + Train:SetNW2Bool("PAM:State5_2",self.NoKD) --КД + Train:SetNW2Bool("PAM:State5_4",self.Transit) --ТР + Train:SetNW2Bool("PAM:State5_8",not not self.Deadlock) --ОБ + --Train:SetNW2Bool("PAM:State5_3") --СЛ + Train:SetNW2Bool("PAM:State5_7",self.NoLPT) --ЛПТ + Train:SetNW2Bool("PAM:State5_6",self.OpenDoors) --ОДП + end + if self.CurrentDriveMode then + self["2"] = self.CurrentDriveMode[2] + self["3"] = self.CurrentDriveMode[3] + local pr8 = self.CurrentDriveMode[4] + if pr8 ~= self.Target8 then + if pr8 == 0 or self.pr8Timer and CurTime()-self.pr8Timer > 1.5 then + self.Target8 = pr8 + self.pr8Timer = nil + end + if pr8 > 0 and not self.pr8Timer then self.pr8Timer = CurTime() end + end + if pr8 == 0 and self.pr8Timer then self.pr8Timer = CurTime() end + self["8"] = self.Target8+self.CurrentDriveMode[13]*(PAM_VV.KRU+self.NoFreq) + self["17"] = self.CurrentDriveMode[5] + self["19"] = self.CurrentDriveMode[6] + self["20"] = self.CurrentDriveMode[7] + self["20X"] = self.CurrentDriveMode[8] + self["25"] = self.CurrentDriveMode[9] + self["025"] = self.CurrentDriveMode[10] + self["33"] = self.CurrentDriveMode[11] + self["033"] = self.CurrentDriveMode[12] + self["33G"] = self.CurrentDriveMode[13]*(1-PAM_VV.KRU) + end + if self.CurrentDoorMode then + self["16"] = self.CurrentDoorMode[1] + self["31"] = self.CurrentDoorMode[2] + self["32"] = self.CurrentDoorMode[3] + self["68"] = self.CurrentDoorMode[4] + end + if self.CurrentPneumoMode then + self["39"] = self.CurrentPneumoMode[2] + self["48"] = self.CurrentPneumoMode[3] + end + self.EPK = (self.State==4 or (self.State==5 or self.State==6) and RR and self.EPKActive) and 1 or 0 + self.Ring = (Ring) and 1 or 0 + Train:SetNW2String("PAM:Station",self.Station) + Train:SetNW2String("PAM:Line",self.Line) + Train:SetNW2String("PAM:Path",self.Path) + Train:SetNW2Bool("PAM:Reverser",self.ReverserWrench) + Train:SetNW2Bool("PAM:Keyboard",self.Keyboard) + Train:SetNW2Bool("PAM:Selected",self.Selected) + Train:SetNW2Int("PAM:State5",self.State5) + Train:SetNW2Int("PAM:State5Accept",self.State5Accept) +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_81_717_pam_vv.lua b/lua/metrostroi/systems/sys_81_717_pam_vv.lua new file mode 100644 index 0000000..e14c272 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_717_pam_vv.lua @@ -0,0 +1,59 @@ +-------------------------------------------------------------------------------- +-- I/O module between PA and electric schemes +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("PAM_VV") +function TRAIN_SYSTEM:Initialize() + self.Power = 0 + self.KGR = 0 + self.KRR = 0 --Контроль нулевого Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ€ÐµÐ²ÐµÑ€Ñивной рукоÑтки головного вагона + self.KRR1 = 0 --Контроль нулевого Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ€ÐµÐ²ÐµÑ€Ñивной рукоÑтки хвоÑтового вагона + self.KRR2 = 0 --Контроль реверÑивной рукоÑтки, уÑтановленной в положение «Ðазад» + self.KRT = 0 + self.KRH = 0 + self.KB = 0 + self.KZP = 0 + self.KET = 0 + self.LPT = 0 + self.KSOT = 0 + self.KSZD = 0 + self.KPRK = 0 + self.KDL = 0 + self.KDP = 0 + self.OPD = 0 + + self.ZD = 0 + self.K16 = 0 + self.KD = 0 + self.KRU = 0 + + self.KVARS = 0 + self.KTARS = 0 + self.VRD = 0 + + self.V1 = 0 + self.V2 = 0 + + self.I2 = 0 + self.I3 = 0 + self.I25 = 0 + self.I33G = 0 + self.I33 = 0 +end + + +--if TURBOSTROI then return end +function TRAIN_SYSTEM:Inputs() + return { + } +end +function TRAIN_SYSTEM:Outputs() + return { + "Power", + "KGR","KRR","KRR1","KRR2","KRT","KRH","KB","KZP","KET","LPT","KSOT","KSZD","KPRK","KDL","KDP","OPD","ZD","K16","KD","KRU","KVARS","KTARS","VRD", + "V1","V2", + "I2","I3","I25","I33G","I33" + } +end diff --git a/lua/metrostroi/systems/sys_81_717_panel.lua b/lua/metrostroi/systems/sys_81_717_panel.lua new file mode 100644 index 0000000..736e55d --- /dev/null +++ b/lua/metrostroi/systems/sys_81_717_panel.lua @@ -0,0 +1,259 @@ +-------------------------------------------------------------------------------- +-- 81-717 Moscow controller panel +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_717_Panel") + +function TRAIN_SYSTEM:Initialize() + -- Выключатель батареи (ВБ) + self.Train:LoadSystem("VB","Relay","Switch",{bass = true}) + + -- Buttons on the panel + --self.Train:LoadSystem("DIPon","Relay","Switch", {bass = true}) + self.Train:LoadSystem("Ring","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VozvratRP","Relay","Switch", {bass = true}) + self.Train:LoadSystem("OtklBV","Relay","Switch", {bass = true}) + self.Train:LoadSystem("OtklBVK","Relay","Switch", {normally_closed=true,bass = true}) + self.Train:LoadSystem("RezMK","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VMK","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VA","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VAH","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VAD","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VUS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VUD1","Relay","Switch", {bass = true }) + self.Train:LoadSystem("VUD2","Relay","Switch", {normally_closed=true,bass = true }) -- Doors close + self.Train:LoadSystem("VDL","Relay","Switch", {bass = true}) -- Doors left open + self.Train:LoadSystem("KDL","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KDLR","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KDP","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KRZD","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KSN","Relay","Switch", {bass = true}) + self.Train:LoadSystem("OtklAVU","Relay","Switch", {bass = true}) + self.Train:LoadSystem("OVT","Relay","Switch", {bass = true}) + self.Train:LoadSystem("ARS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("ARSR","Relay","Switch", {bass = true}) + self.Train:LoadSystem("UOS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VP","Relay","Switch", {bass = true}) + self.Train:LoadSystem("ALSFreq","Relay","Switch",{bass=true}) + self.Train:LoadSystem("ALS","Relay","Switch", {bass = true,normally_closed=true}) + self.Train:LoadSystem("KVT","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KVTR","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KRP","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("R_UNch","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_ZS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_G","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_Radio","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_VPR","Relay","Switch", {bass = true,normally_closed = true}) + self.Train:LoadSystem("R_Program1","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_Program2","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_Program1H","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_Program2H","Relay","Switch", {bass = true}) + self.Train:LoadSystem("RC1","Relay","Switch",{ bass = true,normally_closed = true }) + + self.Train:LoadSystem("Radio13","Relay","Switch", {bass = true}) + self.Train:LoadSystem("ARS13","Relay","Switch", {bass = true}) + + -- Педаль бдительноÑти (ПБ) + self.Train:LoadSystem("PB","Relay","Switch", {bass = true}) + + ----------------- БЗОС ---------------- + self.Train:LoadSystem("SAB1","Relay","Switch",{normally_closed=true, bass=true}) --ÐžÑ…Ñ€Ð°Ð½Ð½Ð°Ñ ÑÐ¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ + + self.Train:LoadSystem("AIS","Relay","VA21-29") + -- ÐвтоматичеÑкие выключатели (ÐÐ’) + self.Train:LoadSystem("A11","Relay","VA21-29") + self.Train:LoadSystem("A17","Relay","VA21-29") + self.Train:LoadSystem("A44","Relay","VA21-29") + self.Train:LoadSystem("A26","Relay","VA21-29") + self.Train:LoadSystem("AR63","Relay","VA21-29") + self.Train:LoadSystem("AS1","Relay","VA21-29") + self.Train:LoadSystem("A21","Relay","VA21-29") + self.Train:LoadSystem("A49","Relay","VA21-29") + self.Train:LoadSystem("A27","Relay","VA21-29") + self.Train:LoadSystem("A10","Relay","VA21-29") + self.Train:LoadSystem("A53","Relay","VA21-29") + self.Train:LoadSystem("A54","Relay","VA21-29") + self.Train:LoadSystem("A84","Relay","VA21-29") + + self.Train:LoadSystem("A76","Relay","VA21-29") + self.Train:LoadSystem("A48","Relay","VA21-29") + self.Train:LoadSystem("A29","Relay","VA21-29") + self.Train:LoadSystem("A46","Relay","VA21-29") + self.Train:LoadSystem("A47","Relay","VA21-29") + self.Train:LoadSystem("A79","Relay","VA21-29") + self.Train:LoadSystem("A42","Relay","VA21-29") + self.Train:LoadSystem("A74","Relay","VA21-29") + self.Train:LoadSystem("A73","Relay","VA21-29") + self.Train:LoadSystem("A71","Relay","VA21-29") + self.Train:LoadSystem("A41","Relay","VA21-29") + self.Train:LoadSystem("A45","Relay","VA21-29") + self.Train:LoadSystem("A75","Relay","VA21-29") + self.Train:LoadSystem("A58","Relay","VA21-29") + self.Train:LoadSystem("A59","Relay","VA21-29") + self.Train:LoadSystem("A43","Relay","VA21-29") + self.Train:LoadSystem("A31","Relay","VA21-29") + self.Train:LoadSystem("A32","Relay","VA21-29") + self.Train:LoadSystem("A13","Relay","VA21-29") + self.Train:LoadSystem("A1","Relay","VA21-29") + self.Train:LoadSystem("A20","Relay","VA21-29") + self.Train:LoadSystem("A25","Relay","VA21-29") + self.Train:LoadSystem("A30","Relay","VA21-29") + self.Train:LoadSystem("A56","Relay","VA21-29") + self.Train:LoadSystem("A65","Relay","VA21-29") + + self.Train:LoadSystem("A2","Relay","VA21-29") + self.Train:LoadSystem("A3","Relay","VA21-29") + self.Train:LoadSystem("A4","Relay","VA21-29") + self.Train:LoadSystem("A5","Relay","VA21-29") + self.Train:LoadSystem("A6","Relay","VA21-29") + self.Train:LoadSystem("A70","Relay","VA21-29") + self.Train:LoadSystem("A14","Relay","VA21-29") + self.Train:LoadSystem("A39","Relay","VA21-29") + self.Train:LoadSystem("A28","Relay","VA21-29") + self.Train:LoadSystem("A38","Relay","VA21-29") + self.Train:LoadSystem("A22","Relay","VA21-29") + self.Train:LoadSystem("A8","Relay","VA21-29") + self.Train:LoadSystem("A12","Relay","VA21-29") + self.Train:LoadSystem("A16","Relay","VA21-29") + self.Train:LoadSystem("A37","Relay","VA21-29") + self.Train:LoadSystem("A51","Relay","VA21-29") + self.Train:LoadSystem("A24","Relay","VA21-29") + self.Train:LoadSystem("A19","Relay","VA21-29") + self.Train:LoadSystem("A66","Relay","VA21-29") + self.Train:LoadSystem("A18","Relay","VA21-29") + self.Train:LoadSystem("A40","Relay","VA21-29") + self.Train:LoadSystem("A80","Relay","VA21-29") + self.Train:LoadSystem("A50","Relay","VA21-29") + self.Train:LoadSystem("A52","Relay","VA21-29") + + self.Train:LoadSystem("AV2","Relay","VA21-29") + self.Train:LoadSystem("AV3","Relay","VA21-29") + self.Train:LoadSystem("AV4","Relay","VA21-29") + self.Train:LoadSystem("AV5","Relay","VA21-29") + self.Train:LoadSystem("AV6","Relay","VA21-29") + self.Train:LoadSystem("AV1","Relay","VA21-29") + + self.Train:LoadSystem("A55","Relay","VA21-29") + self.Train:LoadSystem("A57","Relay","VA21-29") + self.Train:LoadSystem("A60","Relay","VA21-29") + self.Train:LoadSystem("A81","Relay","VA21-29") + self.Train:LoadSystem("A7","Relay","VA21-29") + self.Train:LoadSystem("A9","Relay","VA21-29") + self.Train:LoadSystem("A68","Relay","VA21-29") + self.Train:LoadSystem("A72","Relay","VA21-29") + + --Вагонные + self.Train:LoadSystem("A15","Relay","VA21-29") + + self.Train:LoadSystem("KDLK","Relay","Switch", { bass = true,normally_closed = true }) + self.Train:LoadSystem("KDLRK","Relay","Switch", { bass = true,normally_closed = true }) + self.Train:LoadSystem("KDPK","Relay","Switch", { bass = true,normally_closed = true }) + self.Train:LoadSystem("KAHK","Relay","Switch", { bass = true,normally_closed = true }) + + -- 81-717 special + self.Train:LoadSystem("BPSNon","Relay","Switch", { bass = true }) + self.Train:LoadSystem("L_1","Relay","Switch",{bass = true}) + self.Train:LoadSystem("L_2","Relay","Switch",{bass = true}) + self.Train:LoadSystem("L_3","Relay","Switch",{bass = true}) + self.Train:LoadSystem("L_4","Relay","Switch",{bass = true}) + self.Train:LoadSystem("DoorSelect","Relay","Switch", { bass = true, normally_closed = false }) + self.Train:LoadSystem("VZ1","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KAH","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("VBD","Relay","Switch",{bass = true,normally_closed=true}) + + self.Train:LoadSystem("Wiper","Relay","Switch") + + self.Train:LoadSystem("PVK","Relay","Switch",{maxvalue=2,bass=true}) + self.Train:LoadSystem("V11","Relay","Switch",{bass=true}) + self.Train:LoadSystem("V12","Relay","Switch",{bass=true}) + self.Train:LoadSystem("V13","Relay","Switch",{bass=true}) + + self.Train:LoadSystem("KV1","Relay","Switch",{bass=true}) + self.Train:LoadSystem("KV2","Relay","Switch",{bass=true}) + self.Train:LoadSystem("KV3","Relay","Switch",{bass=true}) + self.Train:LoadSystem("R1","Relay","Switch",{bass=true,close_time=2.3}) + + self.V1 = 0 + self.LUDS = 0 + self.RedLight2 = 0 + self.RedLight1 = 0 + self.Headlights1 = 0 + self.Headlights2 = 0 + self.EqLights = 0 + self.CabLights = 0 + self.PanelLights = 0 + self.CabinLight = 0 + self.EmergencyLights = 0 + self.MainLights = 0 + self.DoorsLeft = 0 + self.DoorsRight = 0 + self.DoorsW = 0 + self.GreenRP = 0 + self.BrW = 0 + self.AVU = 0 + self.L1 = 0 + self.LKVP = 0 + self.RZP = 0 + self.KUP = 0 + self.BrT = 0 + self.LSN = 0 + self.Ring = 0 + self.SD = 0 + self.LST = 0 + self.LVD = 0 + self.LKVD = 0 + self.LhRK = 0 + self.KVC = 0 + self.SD = 0 + self.LEKK = 0 + self.TW18 = 0 + + self.KT = 0 + self.LN = 0 + self.RS = 0 + self.OneFreq = 0 + self.AR04 = 0 + self.AR0 = 0 + self.AR40 = 0 + self.AR60 = 0 + self.AR70 = 0 + self.AR80 = 0 + + self.M1_3 = 0 + self.M4_7 = 0 + self.M8 = 0 + + self.AnnouncerPlaying = 0 + self.AnnouncerBuzz = 0 + + self.VPR = 0 + + self.CBKIPower = 0 + self.PCBKPower = 0 +end + + +function TRAIN_SYSTEM:Outputs() + return { "V1","LUDS","RedLight2","RedLight1","Headlights1","Headlights2","EqLights","CabLights","EqLights","PanelLights","CabinLight","EmergencyLights","MainLights","DoorsLeft","DoorsRight","DoorsW","GreenRP","BrW","AVU","LKVP","RZP","KUP","BrT","LSN","Ring","SD","LST","LVD","LhRK","KVC","SD","TW18", "KT","LEKK", + "LKVD","LN","RS","OneFreq","AR04","AR0","AR40","AR60","AR70","AR80","L1","M1_3","M4_7","M8", + "AnnouncerPlaying","AnnouncerBuzz","VPR", + "CBKIPower","PCBKPower"} +end +TRAIN_SYSTEM.AVMap = { + "A11","A17","A44","A26","AR63","A61", + "A21","A49","A27","A10","A53","A54", + "A84","A76","A48","AV1","A29","A46", + "A47","A79","A42","A74","A73","A71", + "A41","A45","A75","A58","A59","A43", + "A31","A32","A13","A1","A20","A25", + "A30","A56","A65","A2","A3","A4","A5", + "A6","A70","A14","A39","A28","A38","A22", + "A8","A12","A16","A37","A51","A24","A19", + "A66","A18","A40","A80","A50","A52","AV2", + "AV3","AV4","AV5","AV6","A55","A57","A60", + "A81","A7","A9","A68","A72","A15", +} \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_81_717_pneumatic.lua b/lua/metrostroi/systems/sys_81_717_pneumatic.lua new file mode 100644 index 0000000..1ea60af --- /dev/null +++ b/lua/metrostroi/systems/sys_81_717_pneumatic.lua @@ -0,0 +1,728 @@ +-------------------------------------------------------------------------------- +-- 81-717 pneumatic system +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_717_Pneumatic") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize(parameters) + self.ValveType = 1 + self.DisconnectType = parameters and parameters.br013_1 + -- Position of the train drivers valve + -- Type 1 (334) + -- 1 Accelerated charge + -- 2 Normal charge (brake release) + -- 3 Closed + -- 4 Service application + -- 5 Emergency application + -- + -- Type 2 (013) + -- 1 Accelerated charge + -- 2 Normal charge (brake release) + -- 3 Closed + -- 4 Service application + -- 5 Emergency application + self.DriverValvePosition = 2 + self.RealDriverValvePosition = self.DriverValvePosition + + + -- Pressure in reservoir + self.ParkingBrakePressure = 0 + self.ReservoirPressure = 0.0 -- atm + -- Pressure in trains feed line + self.TrainLinePressure = 8.0 -- atm + -- Pressure in trains brake line + self.BrakeLinePressure = 0.0 -- atm + self.EPKPressure = 0.0 -- atm + -- Pressure in brake cylinder + self.BrakeCylinderPressure = 0.0 -- atm + -- Pressure in the door line + self.DoorLinePressure = 0.0 -- atm + self.OldBrakeLinePressure = 0.0 + self.BCPressure = 0 + + --DKPT + self.Train:LoadSystem("DKPT","Relay","R-52B") -- + -- Valve #1 + self.Train:LoadSystem("PneumaticNo1","Relay") + -- Valve #2 + self.Train:LoadSystem("PneumaticNo2","Relay") + -- ÐвтоматичеÑкий выключатель Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ (ÐВТ) + self.Train:LoadSystem("AVT","Relay","AVT-325") + -- РегулÑтор Ð´Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (ÐК) + self.Train:LoadSystem("AK","Relay","AK-11B") + -- ÐвтоматичеÑкий выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (ÐВУ) + self.Train:LoadSystem("AVU","Relay","AVU-045") + -- Блокировка тормозов + self.Train:LoadSystem("BPT","Relay","") + -- Блокировка дверей + self.Train:LoadSystem("BD","Relay","") + -- Вентили дверного воздухораÑÐ¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÐµÐ»Ñ (ВДОЛ, ВДОП, ВДЗ) + self.Train:LoadSystem("VDOL","Relay","", {bass = true}) + self.Train:LoadSystem("VDOP","Relay","", {bass = true}) + self.Train:LoadSystem("VDZ","Relay","", {bass = true}) + + -- Разобщение клапана машиниÑта + self.Train:LoadSystem("DriverValveDisconnect","Relay","Switch", {bass = true}) + -- Краны двойной Ñ‚Ñги + self.Train:LoadSystem("DriverValveTLDisconnect","Relay","Switch", {bass = true}) + self.Train:LoadSystem("DriverValveBLDisconnect","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("EmergencyBrakeValve","Relay","Switch") + -- ВоздухораÑпределитель + self.Train:LoadSystem("AirDistributorDisconnect","Relay","Switch") + --УÐÐ’Ð + self.Train:LoadSystem("UAVA","Relay","Switch",{ bass = true}) + self.Train:LoadSystem("UAVAC","Relay","",{normally_closed=true,bass=true}) + --СтоÑночный тормоз + self.Train:LoadSystem("ParkingBrake","Relay","Switch",{bass = true}) + --ЭПК + self.Train:LoadSystem("EPK","Relay","Switch",{ bass = true}) + self.Train:LoadSystem("SOT","Relay") + -- Isolation valves + self.Train:LoadSystem("FrontBrakeLineIsolation","Relay","Switch", { normally_closed = true, bass = true}) + self.Train:LoadSystem("RearBrakeLineIsolation","Relay","Switch", { normally_closed = true, bass = true}) + self.Train:LoadSystem("FrontTrainLineIsolation","Relay","Switch", { normally_closed = true, bass = true}) + self.Train:LoadSystem("RearTrainLineIsolation","Relay","Switch", { normally_closed = true, bass = true}) + + self.Train:LoadSystem("SQ3","Relay","") + + -- Brake cylinder atmospheric valve open + self.BrakeCylinderValve = 0 + + -- Overpressure protection valve open + self.TrainLineOverpressureValve = 0 + + -- Compressor simulation + self.Compressor = 0 --Simulate overheat with TRK FIXME + + -- Disconnect valve status + self.DriverValveDisconnectPrevious = 0 + + -- Doors state + if not TURBOSTROI then + self.LeftDoorState = { 0,0,0,0 } + self.RightDoorState = { 0,0,0,0 } + self.LeftDoorDir = { 0,0,0,0 } + self.RightDoorDir = { 0,0,0,0 } + self.LeftDoorSpeed = {0,0,0,0} + self.RightDoorSpeed = {0,0,0,0} + self.LeftDoorStuck = {false, false, false, false} + self.RightDoorStuck = {false, false, false, false} + local start = math.Rand(0.6,0.8) + -- 0.6-1 + self.DoorSpeedMain = -math.Rand(start,math.Rand(start+0.1,start+0.2)) + for i=1,#self.LeftDoorSpeed do + if math.random() > 0.7 then + self.LeftDoorSpeed[i] = math.Rand(self.DoorSpeedMain-0.1,self.DoorSpeedMain+0.2) + self.RightDoorSpeed[i] = math.Rand(self.DoorSpeedMain-0.1,self.DoorSpeedMain+0.2) + else + self.LeftDoorSpeed[i] = math.Rand(self.DoorSpeedMain-0.1,self.DoorSpeedMain+0.1) + self.RightDoorSpeed[i] = math.Rand(self.DoorSpeedMain-0.1,self.DoorSpeedMain+0.1) + end + end + end + self.TrainLineOpen = false + self.BrakeLineOpen = false + + self.EmergencyValve = false + self.EmergencyValveEPK = false + self.OldValuePos = self.DriverValvePosition + + self.WeightLoadRatio = 0 + self.PassengerDoor = 0 +end + +function TRAIN_SYSTEM:Inputs() + return { "BrakeUp", "BrakeDown", "BrakeSet", "ValveType", "Autostop" } +end + +function TRAIN_SYSTEM:Outputs() + return { "BrakeLinePressure", "BrakeCylinderPressure", "DriverValvePosition", + "ReservoirPressure", "TrainLinePressure", "DoorLinePressure", "WeightLoadRatio" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "BrakeSet" then + self.DriverValvePosition = math.floor(value) + if self.ValveType == 1 then + if self.DriverValvePosition < 1 then self.DriverValvePosition = 1 end + if self.DriverValvePosition > 5 then self.DriverValvePosition = 5 end + else + if self.DriverValvePosition < 1 then self.DriverValvePosition = 1 end + if self.DriverValvePosition > 7 then self.DriverValvePosition = 7 end + end + elseif (name == "BrakeUp") and (value > 0.5) then + self:TriggerInput("BrakeSet",self.DriverValvePosition+1) + elseif (name == "BrakeDown") and (value > 0.5) then + self:TriggerInput("BrakeSet",self.DriverValvePosition-1) + elseif name == "ValveType" then + self.ValveType = math.floor(value) + elseif name == "Autostop" then + local HaveUAVA = not self.Train.SubwayTrain or not self.Train.SubwayTrain.ARS or not self.Train.SubwayTrain.ARS.NoUAVA + if HaveUAVA and self.Train.UAVA.Value == 0 then + self.EmergencyValve = true + if value > 0 then RunConsoleCommand("say","Autostop braking",self.Train:GetDriverName()) end + end + end +end + + +-- TODO: почиÑтить Ñто говно, Ñделать раздельные звуки пневмы +-- Calculate derivatives +function TRAIN_SYSTEM:equalizeCouplePressure(dT,pressure,train,valve_status,rate,close_rate) + if not valve_status then return 0 end + local other + if IsValid(train) then other = train.Pneumatic end + + -- Get second pressure + local P2 = 0 + if other then P2 = other[pressure] end + if (not other) and (valve_status) then + self.TrainLineOpen = (pressure == "TrainLinePressure") + rate = close_rate or rate + --self.TrainLinePressure_dPdT = 0.0 + end + + -- Calculate rate + local dPdT = rate * (P2 - self[pressure]) + -- Calculate delta + local dP = dPdT*dT + if other and other.ReadOnly then + dP = dP/250 + end + -- Equalized pressure + local P0 = (P2 + self[pressure]) / 2 + -- Update pressures + if dP > 0 then + self[pressure] = math.min(P0,self[pressure] + dP) + if other and not other.ReadOnly then + other[pressure] = math.max(P0,other[pressure] - dP) + end + else + self[pressure] = math.max(P0,self[pressure] + dP) + if other and not other.ReadOnly then + other[pressure] = math.min(P0,other[pressure] - dP) + end + end + -- Update delta if losing air + if self.TrainLineOpen and (pressure == "TrainLinePressure") then + self[pressure.."_dPdT"] = (self[pressure.."_dPdT"] or 0) + dPdT + end + return dP +end +------------------------------------------------------------------------------- +function TRAIN_SYSTEM:UpdatePressures(Train,dT) + local frontBrakeOpen = Train.FrontBrakeLineIsolation.Value == 0 + local rearBrakeOpen = Train.RearBrakeLineIsolation.Value == 0 + local frontTrainOpen = Train.FrontTrainLineIsolation.Value == 0 + local rearTrainOpen = Train.RearTrainLineIsolation.Value == 0 + + local Ft = IsValid(Train.FrontTrain) and Train.FrontTrain + local Rt = IsValid(Train.RearTrain) and Train.RearTrain + local Fc, Rc = Train.FrontCouple or Train.FrontBogey, Train.RearCouple or Train.RearBogey + local Fb,Rb + if IsValid(Fc) and Fc.DepotPneumo then Fb = Fc.DepotPneumo end + if IsValid(Rc) and Rc.DepotPneumo then Rb = Rc.DepotPneumo end + + local frontBrakeLeak = false + local rearBrakeLeak = false + local frontTrainLeak = false + local rearTrainLeak = false + + -- Check if both valve on this train and connected train are open + if Ft and Ft.FrontBrakeLineIsolation then + if Ft.FrontTrain == Train then -- Nose to nose + frontBrakeLeak = frontBrakeOpen and Ft.FrontBrakeLineIsolation.Value==1 and 0.08 + frontTrainLeak = frontTrainOpen and Ft.FrontTrainLineIsolation.Value==1 and 0.08 + else -- Rear to nose + frontBrakeLeak = frontBrakeOpen and Ft.RearBrakeLineIsolation.Value==1 and 0.08 + frontTrainLeak = frontTrainOpen and Ft.RearTrainLineIsolation.Value==1 and 0.08 + end + else + frontBrakeLeak = frontBrakeOpen and 0.7 + frontTrainLeak = frontTrainOpen and not Fb and 0.3 + end + if Rt and Rt.FrontBrakeLineIsolation then + if Rt.FrontTrain == Train then -- Nose to nose + rearBrakeLeak = rearBrakeOpen and Rt.FrontBrakeLineIsolation.Value==1 and 0.08 + rearTrainLeak = rearTrainOpen and Rt.FrontTrainLineIsolation.Value==1 and 0.08 + else -- Rear to nose + rearBrakeLeak = rearBrakeOpen and Rt.RearBrakeLineIsolation.Value==1 and 0.08 + rearTrainLeak = rearTrainOpen and Rt.RearTrainLineIsolation.Value==1 and 0.08 + end + else + rearBrakeLeak = rearBrakeOpen and 0.7 + rearTrainLeak = rearTrainOpen and not Rb and 0.3 + end + + -- Equalize pressure + local Fl=math.min(0,self:equalizeCouplePressure(dT,"BrakeLinePressure",frontBrakeLeak==false and Ft,frontBrakeOpen,100,frontBrakeLeak or 0.08)*3)*(frontBrakeLeak and 1 or 0) + local Rl=math.min(0,self:equalizeCouplePressure(dT,"BrakeLinePressure",rearBrakeLeak==false and Rt,rearBrakeOpen,100,rearBrakeLeak or 0.08)*3)*(rearBrakeLeak and 1 or 0) + + Fl=Fl+math.min(0,self:equalizeCouplePressure(dT,"TrainLinePressure",frontTrainLeak==false and Ft or Fb,frontTrainOpen,100,frontTrainLeak or 0.08)*10)*(frontTrainLeak and 1 or 0) + Rl=Rl+math.min(0,self:equalizeCouplePressure(dT,"TrainLinePressure",rearTrainLeak==false and Rt or Rb,rearTrainOpen,100,rearTrainLeak or 0.08)*10)*(rearTrainLeak and 1 or 0) + + self.TrainLineOpen=frontTrainLeak or rearTrainLeak + self.BraieLineOpen=frontBrakeLeak or rearBrakeLeak + Train:SetPackedRatio("FrontLeak",Fl) + Train:SetPackedRatio("RearLeak",Rl) +end + +function TRAIN_SYSTEM:equalizePressure(dT,pressure,target,rate,fill_rate,no_limit,smooth) + if fill_rate and (target > self[pressure]) then rate = fill_rate end + + -- Calculate derivative + local dPdT = rate + if target < self[pressure] then dPdT = -dPdT end + local dPdTramp = math.min(1.0,math.abs(target - self[pressure])*(smooth or 0.5)) + dPdT = dPdT*dPdTramp + + -- Update pressure + self[pressure] = self[pressure] + dT * dPdT + self[pressure] = math.max(0.0,math.min(16.0,self[pressure])) + self[pressure.."_dPdT"] = (self[pressure.."_dPdT"] or 0) + dPdT + if no_limit ~= true then + if self[pressure] == 0.0 then self[pressure.."_dPdT"] = 0 end + if self[pressure] == 16.0 then self[pressure.."_dPdT"] = 0 end + end + return dPdT +end +------------------------------------------------------------------------------- +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + self.WeightLoadRatio = math.max(0,math.min(1,(Train:GetNW2Float("PassengerCount")/200))) + + ---------------------------------------------------------------------------- + -- Accumulate derivatives + self.TrainLinePressure_dPdT = 0.0 + self.BrakeLinePressure_dPdT = 0.0 + self.EPKPressure_dPdT = 0.0 + self.ReservoirPressure_dPdT = 0.0 + self.BrakeCylinderPressure_dPdT = 0.0 + self.ParkingBrakePressure_dPdT = 0.0 + + -- Reduce pressure for brake line + self.TrainToBrakeReducedPressure = math.min(5.1,self.TrainLinePressure) -- * 0.725) + -- Feed pressure to door line + self.DoorLinePressure = self.TrainToBrakeReducedPressure * 0.90 + local trainLineConsumption_dPdT = 0.0 + local wagc = Train:GetWagonCount() + local HaveEPK = not Train.SubwayTrain or not Train.SubwayTrain.ARS or not Train.SubwayTrain.ARS.NoEPK + + local BLDisconnect,pr_speed = true,1 + if self.ValveType == 1 then + BLDisconnect = Train.DriverValveBLDisconnect.Value > 0 + local TLDisconnect = Train.DriverValveTLDisconnect.Value > 0 + pr_speed = 1*wagc--*((self.BrakeLinePressure-self.ReservoirPressure)/0.6) --2 + if self.Leak or self.BraieLineOpen then pr_speed = pr_speed*0.3 end + -- 334: 1 Fill reservoir from train line, fill brake line from train line + if (self.RealDriverValvePosition == 1) then + if TLDisconnect or self.ReservoirPressure > self.TrainLinePressure then + self:equalizePressure(dT,"ReservoirPressure", self.TrainLinePressure, 1,nil,nil,2) + if BLDisconnect then + self:equalizePressure(dT,"BrakeLinePressure", self.TrainLinePressure, pr_speed,nil,nil,2) + end + end + end + + -- 334: 2 Brake line, reservoir replenished from brake line reductor + if (self.RealDriverValvePosition == 2) then + if TLDisconnect or self.ReservoirPressure > self.TrainToBrakeReducedPressure*1.05 then + self:equalizePressure(dT,"ReservoirPressure", self.TrainToBrakeReducedPressure*1.05, 0.55,nil,nil,2) + end + end + + -- 334: 3 Close all valves + if (self.RealDriverValvePosition == 3) then + -- Typical leak + self:equalizePressure(dT,"ReservoirPressure", 0.00, 0.001) + end + + -- 334: 4 Reservoir open to atmosphere, brake line equalizes with reservoir + if (self.RealDriverValvePosition == 4) then + self:equalizePressure(dT,"ReservoirPressure", 0.0,0.55,nil,nil,2)--0.35)-0.55 + end + + -- 334: 5 Reservoir and brake line open to atmosphere + if (self.RealDriverValvePosition == 5) then + self:equalizePressure(dT,"ReservoirPressure", 0.0, 1.00)--,nil,nil,2)--1.70 + if BLDisconnect then + self:equalizePressure(dT,"BrakeLinePressure", 0.0, pr_speed,nil,nil,2) + end + end + if BLDisconnect and (TLDisconnect or self.ReservoirPressure < self.BrakeLinePressure) then + --local pr_speed = wagc*(1.375) --2 + local pr_speed = 1.25*wagc + if self.Leak or self.BraieLineOpen then pr_speed = pr_speed*0.3 end + Train:SetPackedRatio("ReservoirPressure_dPdT",self:equalizePressure(dT,"BrakeLinePressure", self.ReservoirPressure,pr_speed,pr_speed*3,nil)/wagc*2) + else + Train:SetPackedRatio("ReservoirPressure_dPdT",0) + end + trainLineConsumption_dPdT = trainLineConsumption_dPdT + math.max(0,self.BrakeLinePressure_dPdT) + trainLineConsumption_dPdT = trainLineConsumption_dPdT + math.max(0,self.ReservoirPressure_dPdT)*0.05 + else + pr_speed = 1.25*wagc --2 + if self.Leak or self.BraieLineOpen then pr_speed = pr_speed*0.7 end + BLDisconnect = self.DisconnectType and Train.DriverValveBLDisconnect.Value > 0 or Train.DriverValveDisconnect.Value > 0 + local TLDisconnect = self.DisconnectType and Train.DriverValveTLDisconnect.Value > 0 or Train.DriverValveDisconnect.Value > 0 + -- 013: 1 Overcharge + if (self.RealDriverValvePosition == 1) and BLDisconnect and (TLDisconnect or self.BrakeLinePressure > self.TrainLinePressure) then + self:equalizePressure(dT,"BrakeLinePressure", self.TrainLinePressure, pr_speed) + end + + -- 013: 2 Normal pressure + if (self.RealDriverValvePosition == 2) and BLDisconnect and (TLDisconnect or self.BrakeLinePressure > 1.01*math.min(5.1,self.TrainToBrakeReducedPressure)) then + self:equalizePressure(dT,"BrakeLinePressure", 1.01*math.min(5.1,self.TrainToBrakeReducedPressure), pr_speed,nil, nil, 1.0)-- nil, 1.0) + end + + -- 013: 3 4.3 Atm + if (self.RealDriverValvePosition == 3) and BLDisconnect and (TLDisconnect or self.BrakeLinePressure > 1.01*math.min(4.3,self.TrainToBrakeReducedPressure)) then + self:equalizePressure(dT,"BrakeLinePressure", 1.01*math.min(4.3,self.TrainToBrakeReducedPressure), pr_speed,nil, nil, 1.0) + end + + -- 013: 4 4.0 Atm + if (self.RealDriverValvePosition == 4) and BLDisconnect and (TLDisconnect or self.BrakeLinePressure > 1.01*math.min(4.0,self.TrainToBrakeReducedPressure)) then + self:equalizePressure(dT,"BrakeLinePressure", 1.01*math.min(4.0,self.TrainToBrakeReducedPressure), pr_speed,nil, nil, 1.0) + end + + -- 013: 5 3.7 Atm + if (self.RealDriverValvePosition == 5) and BLDisconnect and (TLDisconnect or self.BrakeLinePressure > 1.01*math.min(3.7,self.TrainToBrakeReducedPressure)) then + self:equalizePressure(dT,"BrakeLinePressure", 1.01*math.min(3.7,self.TrainToBrakeReducedPressure), pr_speed,nil, nil, 1.0) + end + + -- 013: 6 3.0 Atm + if (self.RealDriverValvePosition == 6) and BLDisconnect and (TLDisconnect or self.BrakeLinePressure > 1.01*math.min(3.0,self.TrainToBrakeReducedPressure)) then + self:equalizePressure(dT,"BrakeLinePressure", 1.01*math.min(3.0,self.TrainToBrakeReducedPressure), pr_speed,nil, nil, 1.0) + end + + -- 013: 7 0.0 Atm + if (self.RealDriverValvePosition == 7) and BLDisconnect then + self:equalizePressure(dT,"BrakeLinePressure", 0.0, pr_speed) + end + trainLineConsumption_dPdT = trainLineConsumption_dPdT + math.max(0,self.BrakeLinePressure_dPdT) + end + local leak + self.Leak = false + local pr_speed = 1.25*wagc + if HaveEPK and Train.EPKC then + local leak = 0 + local epkDiff = math.abs(self.EPKPressure-self.BrakeLinePressure) + if BLDisconnect and Train.EPK.Value>0 then + if Train.EPKC.Value>0 then + self:equalizePressure(dT,"EPKPressure", self.BrakeLinePressure,math.min(1,epkDiff)*6--[[ pr_speed*math.min(1,epkDiff)*2--]] ,false,false,4*epkDiff*2) + end + if self.EPKPressure0.3 then + leak = self:equalizePressure(dT,"BrakeLinePressure", self.EPKPressure,pr_speed*epkDiff/2,pr_speed*epkDiff/2) + --[[ if self.ValveType==1 then + leak = self:equalizePressure(dT,"ReservoirPressure", self.EPKPressure,epkDiff/2,epkDiff/2) + end--]] + end + self.Leak = self.Leak or leak<-0.1 + end + if Train.EPK.Value == 0 or Train.EPKC.Value == 0 then + leak = leak+self:equalizePressure(dT,"EPKPressure", 0,16,false,false,5) + end + if self.ValveType==2 and not BLDisconnect then + self:equalizePressure(dT,"EPKPressure", 0,16,false,false,5) + end + Train:SetPackedRatio("EmergencyValveEPK_dPdT", -leak/wagc) + end + if self.ValveType == 1 then + Train:SetPackedRatio("Crane_dPdT", self.ReservoirPressure_dPdT ) + else + Train:SetPackedRatio("Crane_dPdT", self.BrakeLinePressure_dPdT/wagc*3 ) + end + if self.EmergencyValveDisable and (self.BrakeLinePressure-self.OldBrakeLinePressure)>0.01 then + self.EmergencyValveDisable=false + self.EmergencyValve=false + end + self.OldBrakeLinePressure = self.BrakeLinePressure + local leak = 0 + if self.EmergencyValve then + local leakst = 1.1*(Train:GetWagonCount())*math.Clamp(self.BrakeLinePressure/4,0,1) + leak = self:equalizePressure(dT,"BrakeLinePressure", 0.0,leakst*2,false,false,0.4) + if (leak >= -0.2*(Train:GetWagonCount()) or Train.UAVA.Value > 0) then + self.EmergencyValveDisable = true + end + self.Leak = true + end + + local UAVABlocked = (self.BrakeLinePressure>3.5 and Train.UAVA.Value==0) + if (Train.UAVA.Blocked>0) ~= UAVABlocked then + Train.UAVA:TriggerInput("Block",UAVABlocked and 1 or 0) + end + + local UAVACBlocked = self.EmergencyValve and not self.EmergencyValveDisable + if (Train.UAVAC.Blocked>0) ~= UAVACBlocked then + Train.UAVAC:TriggerInput("Block",UAVACBlocked and 1 or 0) + end + + Train:SetPackedRatio("EmergencyValve_dPdT", -leak/wagc) + + local leak = 0 + if Train.EmergencyBrakeValve and Train.EmergencyBrakeValve.Value > 0.5 then + --local leakst = (1.6*(Train:GetWagonCount())*(self.BrakeLinePressure-math.min(2.5,self.TrainToBrakeReducedPressure))*0.9) + leak = self:equalizePressure(dT,"BrakeLinePressure", 0.0,(1.1*wagc)*2,false,false,0.4) + self.Leak = true + end + Train:SetPackedRatio("EmergencyBrakeValve_dPdT", -leak/wagc) + ---------------------------------------------------------------------------- + -- Fill brake cylinders + if Train.AirDistributorDisconnect.Value == 0 then + -- Valve #1 + self.BrakeCylinderRegulationError = self.BrakeCylinderRegulationError or (math.random()*0.05 - 0.025) + local error = self.BrakeCylinderRegulationError + if (Train.PneumaticNo1.Value == 1.0) and (Train.PneumaticNo2.Value == 0.0) then + if self.PN1 == 0 then + --1,2 + self.PN1 = math.min(self.TrainLinePressure,(1.1 + error + self.WeightLoadRatio*0.6)) + end + elseif self.PN1 ~= 0 then + self.PN1 = 0 + end + -- Valve #2 + if Train.PneumaticNo2.Value == 1.0 then + if self.PN2 == 0 then + self.PN2 = math.min(self.TrainLinePressure,(2.7 + error + self.WeightLoadRatio*1.3)) + if self.BePN2 == false and self.BrakeCylinderPressure > 1.6 then + Train:PlayOnce("PN2end","stop") + end + self.BePN2 = true + end + elseif self.PN2 ~= 0 then + self.PN2 = 0 + end + local targetPres = math.max(0,math.min(5.2,--[[ 1.5--]] 1.35*(math.min(5.1,self.TrainToBrakeReducedPressure) - self.BrakeLinePressure))) + if self.BCPressure < targetPres then + self.BCPressure = math.min(targetPres,self.BCPressure+(0.5+math.max(0,(targetPres-self.BCPressure)-0.2)*0.6)*dT) + elseif self.BCPressure > targetPres then + self.BCPressure = math.max(targetPres,self.BCPressure-2*dT) + end + local targetPressure = self.PN1+self.PN2+self.BCPressure + if math.abs(self.BrakeCylinderPressure - targetPressure) > 0.150 then + self.BrakeCylinderValve = 1 + end + if math.abs(self.BrakeCylinderPressure - targetPressure) < 0.025 then + self.BrakeCylinderValve = 0 + end + if self.BrakeCylinderValve == 1 then + self:equalizePressure(dT,"BrakeCylinderPressure", math.min(2.7 + self.WeightLoadRatio*1.3,targetPressure), 1+math.Clamp((self.BrakeCylinderPressure-0.5)/2.8,0,0.7), 3.50, nil, 0.8+math.Clamp((self.BrakeCylinderPressure-0.75)/0.6,0,1)) --0.75, 1.25) + end + trainLineConsumption_dPdT = trainLineConsumption_dPdT + math.max(0,self.BrakeCylinderPressure_dPdT*0.5) + else + self:equalizePressure(dT,"BrakeCylinderPressure", 0.0, 2.00) + end + if (self.BrakeCylinderPressure > 0.2 and self.BrakeCylinderPressure_dPdT > 0.1 or self.BrakeCylinderPressure_dPdT > 1) and not self.BrakeEngaged then + self.BrakeEngaged = true + Train:PlayOnce("brake","bass",1,math.Clamp(self.BrakeCylinderPressure_dPdT,0.7,1.2)) + end + if self.BrakeCylinderPressure < 1 and self.BrakeCylinderPressure_dPdT < -0.1 and self.BrakeEngaged then + self.BrakeEngaged = false + end + Train:SetPackedRatio("BrakeCylinderPressure_dPdT", self.BrakeCylinderPressure_dPdT) + self.TrainLinePressure = self.TrainLinePressure-math.max(0,self.BrakeCylinderPressure_dPdT*0.002) + if Train.PneumaticNo2.Value == 0 then + if self.BePN2 == true then + self.BePN2 = CurTime() + elseif self.BePN2 and self.BrakeCylinderPressure_dPdT > -0.2 then + Train:PlayOnce("PN2end","bass",math.Clamp(math.min(1,(CurTime()-self.BePN2)/1.3)*((3.2-self.BrakeCylinderPressure)/1.2),0,1)) + self.BePN2 = false + end + end + if self.BePN2 == false and (self.BrakeCylinderPressure_dPdT >= 0.2) then + self.BePN2 = nil + Train:PlayOnce("PN2end","stop") + end + + --Parking brake simulation + local PBPressure = math.Clamp(self.TrainLinePressure/5,0,1)*2.7 + if Train.ParkingBrake.Value == 0 then + self:equalizePressure(dT,"ParkingBrakePressure", PBPressure, 10,10,nil,0.5) + else + self:equalizePressure(dT,"ParkingBrakePressure", 0, 3,10,nil,0.5) + end + Train:SetPackedRatio("ParkingBrakePressure_dPdT",self.ParkingBrakePressure_dPdT) + trainLineConsumption_dPdT = trainLineConsumption_dPdT + math.max(0,self.ParkingBrakePressure_dPdT*0.5) + + -- Simulate cross-feed between different wagons + self:UpdatePressures(Train,dT) + + ---------------------------------------------------------------------------- + -- Simulate compressor operation and train line depletion + self.Compressor = Train.KK.Value * (Train.Electric.Aux750V > 550 and 1 or 0) + self.TrainLinePressure = self.TrainLinePressure - 0.07*trainLineConsumption_dPdT*dT -- 0.190 --0.170 + if self.Compressor == 1 then self:equalizePressure(dT,"TrainLinePressure", 10.0, 0.04) end + self:equalizePressure(dT,"TrainLinePressure", 0,0.001) + -- Overpressure + if self.TrainLinePressure > 9.2 then self.TrainLineOverpressureValve = 1 end + if self.TrainLineOverpressureValve == 1 then + self:equalizePressure(dT,"TrainLinePressure", 0.0, 0.2) + self.TrainLineOpen = true + if self.TrainLinePressure < 5.2 then self.TrainLineOverpressureValve = 0 end + end + + ---------------------------------------------------------------------------- + -- Pressure triggered relays + Train.AVT:TriggerInput("Open", self.BrakeCylinderPressure > 1.9) -- 1.8 - 2.0 + Train.AVT:TriggerInput("Close",self.BrakeCylinderPressure < 0.9) -- 0.9 - 1.5 + Train.AK:TriggerInput( "Open", self.TrainLinePressure > 8.2) + Train.AK:TriggerInput( "Close",self.TrainLinePressure < 6.3) + Train.AVU:TriggerInput("Open", self.BrakeLinePressure < 2.7) -- 2.7 - 2.9 + Train.AVU:TriggerInput("Close",self.BrakeLinePressure > 3.5) -- 3.5 - 3.7 + Train.SOT:TriggerInput("Open", self.EPKPressure < 1.3) -- 2.7 - 2.9 + Train.SOT:TriggerInput("Close", self.EPKPressure > 1.5) -- 2.7 - 2.9 + Train.BPT:TriggerInput("Set", (IsValid(Train.FrontBogey) and Train.FrontBogey.BrakeCylinderPressure+(not Train.FrontBogey.DisableParking and Train.FrontBogey.ParkingBrakePressure or 0) or self.BrakeCylinderPressure)>0.3) + Train.DKPT:TriggerInput("Set", self.BrakeCylinderPressure > 0.3) -- 1.8 - 2.0 + Train.SQ3:TriggerInput("Set", Train.PassengerDoor and 0 or 1) + + ---------------------------------------------------------------------------- + -- Simulate doors opening, closing + if self.DoorLinePressure > 3.5 then + if (Train.VDOL.Value == 1.0) and (Train.VDOP.Value == 0.0) and not self.DoorLeft then + self.DoorLeft = true + end + if (Train.VDOL.Value == 0.0) and (Train.VDOP.Value == 1.0) and not self.DoorRight then + self.DoorRight = true + end + if (Train.VDZ.Value == 1.0 or Train.VDOL.Value == 1.0 and Train.VDOP.Value == 1.0 or self.RZDTimer) and (self.DoorLeft or self.DoorRight) then + if not self.OpenWaitL or CurTime()-self.OpenWaitL < 0.2 then + self.DoorLeft = false + end + if not self.OpenWaitR or CurTime()-self.OpenWaitR < 0.2 then + self.DoorRight = false + end + else + self.CloseValue = nil + end + if Train.VDOL.Value == 1.0 and Train.VDOP.Value == 1.0 then + self.RZDTimer = CurTime() + elseif self.RZDTimer and CurTime()-self.RZDTimer > 0.1 then + self.RZDTimer = nil + end + end + if self.VDOL ~= Train.VDOL.Value then + self.VDOL = Train.VDOL.Value + self:equalizePressure(dT,"TrainLinePressure", 0.0, 0.3) + if self.VDLoud and self.VDOL > 0 and not Train.LeftDoorsOpen then Train:PlayOnce("vdol_loud"..self.VDLoudID,"bass",self.VDLoud) end + end + if self.VDOP ~= Train.VDOP.Value then + self.VDOP = Train.VDOP.Value + self:equalizePressure(dT,"TrainLinePressure", 0.0, 0.3) + if self.VDLoud and self.VDOP > 0 and not Train.RightDoorsOpen then Train:PlayOnce("vdop_loud"..self.VDLoudID,"bass",self.VDLoud) end + end + if self.VDZ ~= Train.VDZ.Value then + self.VDZ = Train.VDZ.Value + self:equalizePressure(dT,"TrainLinePressure", 0.0, 0.3) + if self.VDLoud and self.VDZ > 0 and (Train.RightDoorsOpen or Train.LeftDoorsOpen) then Train:PlayOnce("vzd_loud"..self.VDLoudID,"bass",self.VDLoud) end + end + if Train.CanStuckPassengerLeft then + for i in ipairs(self.LeftDoorStuck) do + self.LeftDoorStuck[i] = math.random() < (0.6+math.min(2,2-self.LeftDoorSpeed[i])*0.2)*Train.CanStuckPassengerLeft*0.6 and (math.random() > 0.7 and CurTime()+math.random()*15) + end + Train.CanStuckPassengerLeft = false + end + if Train.CanStuckPassengerRight then + for i in ipairs(self.RightDoorStuck) do + self.RightDoorStuck[i] = math.random() < (0.6+math.min(2,2-self.LeftDoorSpeed[i])*0.2)*Train.CanStuckPassengerRight*0.6 and (math.random() > 0.7 and CurTime()+math.random()*15) + end + Train.CanStuckPassengerRight = false + end + + Train.LeftDoorsOpen = false + Train.RightDoorsOpen = false + local openL = true + local openR = true + for i=1,4 do + self.LeftDoorDir[i] = math.Clamp(self.LeftDoorDir[i]+dT/(self.DoorLeft and self.LeftDoorSpeed[i] or -self.LeftDoorSpeed[i]),-1,1) + self.RightDoorDir[i] = math.Clamp(self.RightDoorDir[i]+dT/(self.DoorRight and self.RightDoorSpeed[i] or -self.RightDoorSpeed[i]),-1,1) + self.LeftDoorState[i] = math.Clamp(self.LeftDoorState[i] + ((self.LeftDoorDir[i]/self.LeftDoorSpeed[i])*dT),self.LeftDoorStuck[i] and 0.3 or 0,1) + if self.LeftDoorState[i] == 0 or self.LeftDoorState[i] == 1 then self.LeftDoorDir[i] = 0 end + self.RightDoorState[i] = math.Clamp(self.RightDoorState[i] + ((self.RightDoorDir[i]/self.RightDoorSpeed[i])*dT),self.RightDoorStuck[i] and 0.3 or 0,1) + if self.RightDoorState[i] == 0 or self.RightDoorState[i] == 1 then self.RightDoorDir[i] = 0 end + if not Train.LeftDoorsOpen and self.LeftDoorState[i] > 0 then + Train.LeftDoorsOpen = true + end + if self.LeftDoorState[i] > self.LeftDoorSpeed[i]/20 then self.OpenWaitL = false end + if self.RightDoorState[i] > self.LeftDoorSpeed[i]/20 then self.OpenWaitR = false end + if self.LeftDoorState[i] > 0 then openL = false end + if self.RightDoorState[i] > 0 then openR = false end + if not Train.RightDoorsOpen and self.RightDoorState[i] > 0 then + Train.RightDoorsOpen = true + end + Train:SetPackedRatio("DoorL"..i,self.LeftDoorState[i]) + Train:SetPackedRatio("DoorR"..i,self.RightDoorState[i]) + if self.LeftDoorStuck[i] and (self.DoorLeft or type(self.LeftDoorStuck[i]) == "number" and CurTime()-self.LeftDoorStuck[i] > 0) then + self.LeftDoorStuck[i] = false + end + if self.RightDoorStuck[i] and (self.DoorRight or type(self.RightDoorStuck[i]) == "number" and CurTime()-self.RightDoorStuck[i] > 0) then + self.RightDoorStuck[i] = false + end + Train:SetPackedBool("DoorLS"..i,self.LeftDoorStuck[i]) + Train:SetPackedBool("DoorRS"..i,self.RightDoorStuck[i]) + end + if openL and not self.OpenWaitL then self.OpenWaitL = CurTime() end + if openR and not self.OpenWaitR then self.OpenWaitR = CurTime() end + Train:SetPackedBool("DoorL",self.DoorLeft) + Train:SetPackedBool("DoorR",self.DoorRight) + Train.BD:TriggerInput("Set",not Train.RightDoorsOpen and not Train.LeftDoorsOpen) + Train.LeftDoorsOpening = self.DoorLeft + Train.RightDoorsOpening = self.DoorRight + + ---------------------------------------------------------------------------- + if self.DriverValveDisconnectPrevious ~= Train.DriverValveDisconnect.Value then + self.DriverValveDisconnectPrevious = Train.DriverValveDisconnect.Value + if self.DriverValveDisconnectPrevious == 0 then + self.DVDOffTimer = CurTime() + Train:PlayOnce("pneumo_disconnect2","cabin",0.9) + else + self.DVDOffTimer = nil + Train:PlayOnce("pneumo_disconnect1","cabin",0.9) + end + end + if self.DVDOffTimer then + if CurTime()-self.DVDOffTimer < 0.45 then + local pr_speed = 1.3*(Train:GetWagonCount()) --2 + self:equalizePressure(dT,"BrakeLinePressure", 0,pr_speed) + else + self.DVDOffTimer = nil + end + end + + ---------------------------------------------------------------------------- + -- FIXME + Train:SetNW2Bool("FbI",Train.FrontBrakeLineIsolation.Value ~= 0) + Train:SetNW2Bool("RbI",Train.RearBrakeLineIsolation.Value ~= 0) + Train:SetNW2Bool("FtI",Train.FrontTrainLineIsolation.Value ~= 0) + Train:SetNW2Bool("RtI",Train.RearTrainLineIsolation.Value ~= 0) + Train:SetNW2Bool("AD",Train.AirDistributorDisconnect.Value == 0) + + + + local ValveType = self.ValveType > 1 + self.Timer = self.Timer or CurTime() + if ((CurTime() - self.Timer > 0.10) and (self.DriverValvePosition > self.RealDriverValvePosition)) then + self.Timer = CurTime() + if not ValveType then + if self.RealDriverValvePosition ~= 3 then + Train:PlayOnce("br_334",self.RealDriverValvePosition.."-"..(self.RealDriverValvePosition+1)) + end + else + Train:PlayOnce("br_013","cabin") + end + self.RealDriverValvePosition = self.RealDriverValvePosition + 1 + end + if ((CurTime() - self.Timer > 0.10) and (self.DriverValvePosition < self.RealDriverValvePosition)) then + self.Timer = CurTime() + if not ValveType then + if self.RealDriverValvePosition ~= 5 then + Train:PlayOnce("br_334",self.RealDriverValvePosition.."-"..(self.RealDriverValvePosition-1)) + end + else + Train:PlayOnce("br_013","cabin") + end + self.RealDriverValvePosition = self.RealDriverValvePosition - 1 + end +end diff --git a/lua/metrostroi/systems/sys_81_717_puav.lua b/lua/metrostroi/systems/sys_81_717_puav.lua new file mode 100644 index 0000000..67a28ee --- /dev/null +++ b/lua/metrostroi/systems/sys_81_717_puav.lua @@ -0,0 +1,765 @@ +-------------------------------------------------------------------------------- +-- 81-717 "PUAV" safety system +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("PUAV") +TRAIN_SYSTEM.DontAccelerateSimulation = false +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("KH","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("VAV","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("KSZD","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("VZP","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("VAU","Relay","Switch",{ bass = true, normally_closed = true }) + self.Train:LoadSystem("RC2","Relay","Switch",{ bass = true, normally_closed = true }) + + self.Train:LoadSystem("P1","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("P2","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("P3","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("P4","Relay","Switch",{ bass = true }) + self.Train:LoadSystem("P5","Relay","Switch",{ bass = true }) + + self.Selected = true + + self.KRRBrake = false + self.LK16 = 0 + self.LAVT = 0 + self.LOS = 0 + self.LRS = 0 + self.LKI1 = 0 + self.LKI2 = 0 + + self.NoFreq = 0 + self.F5 = 0 + self.F4 = 0 + self.F3 = 0 + self.F2 = 0 + self.F1 = 0 + self.LRSTimer = false + self.OldF5 = 0 + self.OldNF = 0 + + self["2"] = 0 --Вращение РК + self["3"] = 0 --Ход 3 + self["8"] = 0 --Замещение ÑлектричеÑкого Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ + self["16"] = 0 --Закрытие дверей + self["68"] = 1 --Открытие правых дверей хвоÑтового вагона (у ПУÐÐ’ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð½ÐµÑ‚) + self["17"] = 0 -- Разрешение воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€ÐµÐ»Ðµ перегрузки + self["19"] = 0 -- Разрешение Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÑлектричеÑкого Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ + self["20"] = 0 -- Включение двигателей + self["20X"] = 0 -- Разрешение Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹ в ходовые режимы + self["025"] = 0 -- Разрешение ручного Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ + self["25"] = 0 -- Ручное торможение + self["31"] = 0 --Открытие Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð»ÐµÐ²Ñ‹Ñ… дверей + self["32"] = 0 --Открытие правых дверей + self["33"] = 0 --Включение ходового режима + self["033"] = 0 --Разрешение Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ…Ð¾Ð´Ð¾Ð²Ð¾Ð³Ð¾ режима + self["33G"] = 0 --Включение режима Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ + self["39"] = 0 --Включение Ð²ÐµÐ½Ñ‚Ð¸Ð»Ñ Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ â„– 2 + self["48"] = 0 --Включение Ð²ÐµÐ½Ñ‚Ð¸Ð»Ñ Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ â„– 1 + + self.Power = 0 + self.ALSPower = 0 + self.KRH = 0 + self.KRT = 0 + self.KGR = 0 + self.KRR1 = 0 --Контроль нулевого Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ€ÐµÐ²ÐµÑ€Ñивной рукоÑтки головного вагона + self.KRR2 = 0 --Контроль нулевого Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ€ÐµÐ²ÐµÑ€Ñивной рукоÑтки хвоÑтового вагона + self.KRR3 = 0 --Контроль реверÑивной рукоÑтки, уÑтановленной в положение «Ðазад» + self.KD = 0 + self.KPRK = 0 + self.KOAT = 0 + self.KET = 0 + self.KSOT = 0 + self.KDL = 0 + self.KDP = 0 + self.RK1 = 0 + self.KRU = 0 + + self.KVARS = 0 + self.KTARS = 0 + self.VAV = 0 + self.KH3 = 0 + self.VZP = 0 + self.KSZD = 0 + self.KB = 0 + self.RD = 0 + + self.TargetKPRK = 1 + + self.Ring = 0 + self.RingZero = 0 + + self.State = -1 + + --self:SetDriveMode = "Zero" + --self.CurrentDoorMode = "DO" + --self.CurrentPneumoMode = "NT" +end + + +--if TURBOSTROI then return end +function TRAIN_SYSTEM:Inputs() + return { + --Autodrive commands + "CommandDoorsLeft","CommandDoorsRight", + "CommandDrive", "CommandBrake","CommandBrakeCount","CommandBrakeElapsed" + } +end +function TRAIN_SYSTEM:Outputs() + return { "Ring","RingZero","LK16" , "LAVT", "LOS", "LRS", "LKI1", "LKI2", "NoFreq", "F5", "F4", "F3", "F2", "F1", "TargetKPRK" } +end + +if CLIENT then + local function createFont(name,font,size) + surface.CreateFont("Metrostroi_"..name, { + font = font, + size = size, + weight = 500, + blursize = false, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + scanlines = false, + }) + end + createFont("PUAV","Liquid Crystal Display",38,400) + function TRAIN_SYSTEM:ClientThink() + if not self.Train:ShouldDrawPanel("PUAVOScreen") and not self.Train:ShouldDrawPanel("PUAVNScreen") then return end + --RunConsoleCommand("say","президент!!!") + if not self.DrawTimer then + render.PushRenderTarget(self.Train.PUAV,0,0,512, 128) + render.Clear(0, 0, 0, 0) + render.PopRenderTarget() + end + if self.DrawTimer and CurTime()-self.DrawTimer < 0.1 then return end + self.DrawTimer = CurTime() + render.PushRenderTarget(self.Train.PUAV,0,0,512, 128) + --render.Clear(0, 0, 0, 0) + cam.Start2D() + self:PUAVScreen(self.Train) + cam.End2D() + render.PopRenderTarget() + end + function TRAIN_SYSTEM:PrintText(x,y,text,inverse) + local str = {utf8.codepoint(text,1,-1)} + for i=1,#str do + local char = utf8.char(str[i]) + if inverse then + draw.SimpleText(string.char(0x7f),"Metrostroi_PUAV",(x+i)*27+15,y*50+30,Color(0,0,0,240),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(char,"Metrostroi_PUAV",(x+i)*27+15,y*50+30,Color(140,190,0,150),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText(char,"Metrostroi_PUAV",(x+i)*27+15,y*50+30,Color(0,0,0,240),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + end + + function TRAIN_SYSTEM:PUAVScreen(Train) + local State = Train:GetNW2Bool("BURPower",false) + if State then + surface.SetDrawColor(75*0.8,165*0.8,0,self.Warm and 130 or 0) + self.Warm = true + else + surface.SetDrawColor(20,50,0,150) + self.Warm = false + end + surface.DrawRect(0,0,512,128) + if not State then + return + end + surface.SetDrawColor(75*0.3,165*0.3,0,35) + for x=1,16 do + for y=0,1 do + surface.DrawRect(x*27+3,y*50+12,26,40) + end + end + if Train:GetNW2Bool("SBPP:Debug") then + self:PrintText(0,0,Train:GetNW2String("SBPP:Str1","Not available")) + self:PrintText(0,1,Train:GetNW2String("SBPP:Str2","Not available")) + + + --[[ if CurTime()%1>0.5 then + self:PrintText(0,0,"СКом П СТРРСТ") + self:PrintText(0,1,Train:GetNW2String("SBPP:DCMD","Ðет")) + else + self:PrintText(0,0,"ПКом П СТРРСТ") + self:PrintText(0,1,Train:GetNW2String("SBPP:PCMD","Ðет")) + end + self:PrintText(5,1,tostring(Train:GetNW2Int("SBPP:Path",0))) + self:PrintText(7,1,tostring(Train:GetNW2Int("SBPP:Station",0))) + self:PrintText(11,1,Format("%.1f",Train:GetNW2Int("SBPP:Distance",0)))--]] + + --self:PrintText(0,1,os.date("%H:%M:%S %d/%m",Metrostroi.GetSyncTime())) + else + self:PrintText(-2+9,0,"БУР") + + self:PrintText(0,1,os.date("!%H:%M:%S %d/%m",Metrostroi.GetSyncTime())) + end + --self:PrintText(0,0,"010101010101") + --self:PrintText(1,1,Format("РК:%02d",Train:GetNW2Int("PUAV:RK",0))) + --self:PrintText(1,1,"(точнее криво)") + end +end + +function TRAIN_SYSTEM:Trigger(name,nosnd) +end + +TRAIN_SYSTEM.DriveModes = { + --Priority 2 3 8 017 19 20 20X 25 025 33 033 33G + X3 = {1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0}, + X2 = {2, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0}, + X1 = {3, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0}, + OD = {4, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0}, + OXT = {5, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0}, + ST = {6, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1}, + VPR = {7, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1}, + AT1 = {8, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1}, + AT = {9, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1}, + Zero = {10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +} +function TRAIN_SYSTEM:SetDriveMode(curMode,override) + local mode = self.DriveModes[curMode] + if mode and mode[1] > self.CurrentDriveModePriority then + self.CurrentDriveMode = mode + self.CurrentDriveModePriority = mode[1] + self.DriveMode = curMode + end +end +TRAIN_SYSTEM.PneumoModes = { + --Priority 39 48 + NT = {1, 0, 0,}, + V1 = {2, 0, 1,}, + V2 = {3, 1, 0,}, +} +function TRAIN_SYSTEM:SetDoorMode(curMode,override) + local mode = self.DoorModes[curMode] + self.CurrentDoorMode = mode +end +TRAIN_SYSTEM.DoorModes = { + -- 16 31 32 + ZD = {1, 0, 0,}, + DL = {0, 1, 0,}, + DP = {0, 0, 1,}, + DO = {0, 0, 0,}, +} +function TRAIN_SYSTEM:SetPneumoMode(curMode,override) + if curMode == "V2" and self.Train.ALSCoil.Speed > 10 then self.SpeedError = true return end + local mode = self.PneumoModes[curMode] + if mode and (override or mode[1] > self.CurrentPneumoModePriority) then + self.CurrentPneumoMode = mode + self.CurrentPneumoModePriority = mode[1] + end +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "CommandBrakeElapsed" and self.KRR2 == 0 and self.KRR1 > 0 and value ~= -1 and self.CrossCount then + if self.Stage1 and value > 1 then self.Stage2Prepared = true end + + if self.CrossCount > 10 then self.Station = true end + self.CrossCount = self.CrossCount+1 + if value*1000 < 80+46+2*(8*1.5) then + if not self.Stage1 and self.BrakeProgramm then + self.Stage1 = true + self:SetTargetKPRK(14) + end + if self.Stage2Prepared then + self.Stage2 = true + end + end + --if self.VAV > 0 then print(self.Stage1,self.Stage2Prepared,self.Stage2,value*1000) end + end + if name == "CommandBrake" and self.KRR2 == 0 and self.KRR1 > 0 then + self.BrakeProgramm = self.LAVT > 0 + self.CommandDrive = false + self.DriveCommand = false + + if self.TargetKPRK and self.LastBrakeProgrammLoss and CurTime()-self.LastBrakeProgrammLoss > 0.3 then self:SetTargetKPRK(self.TargetKPRK+1) end + if value<0 then self:SetTargetKPRK(-value) end + self.LastBrakeProgrammLoss = value == 0 and CurTime() + if self.BrakeProgrammLossDistance and self.BrakeProgrammLossDistance>15 then + self.BrakeProgrammCurrentDistance=0 + elseif value == 0 then + self.BrakeProgrammLossDistance = 0 + end + if value ~= 0 then + self.CrossCount = 0 + else + self.CrossCount = nil + end + end + if name == "CommandDrive" then + if value < 0 then + self.CommandDrive = false + self.DriveCommand = false + self.BrakeProgramm = false + elseif value > 0 then + self.CommandDrive = value + else + self.CommandDrive = false + end + end + if name == "CommandDoorsLeft" then self.DoorsLeft = value > 0 end + if name == "CommandDoorsRight" then self.DoorsRight = value > 0 end +end + +function TRAIN_SYSTEM:SetTargetKPRK(val) + self.TargetKPRK = val + self.LastKRPK = self.KPRK +end + +local IgnoreDoors = false +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + if Train.Electric.Type > 3 then return end + self.CurrentDriveModePriority = 0 + self.CurrentPneumoModePriority = 0 + --if self.KB > 0 and not self.KBimer then self.KBimer = CurTime() end + --if self.KB == 0 and self.KBimer then self.KBimer = nil end + local ALS = Train.ALSCoil + + local Ring = false + local LKI = false + + local speed = math.Round(ALS.Speed or 0,1) + local speedMpS = speed*0.2778 + local speedMpSS = speedMpS*ALS.SpeedSign + + local Power = self.Power>0 + local Reverser = (self.KRR1 > 0 or self.KRU > 0) + local BackReverser = self.KRR2 > 0 + if Power and not BackReverser and self.Checked==true and Reverser then + --KPRK + if self.RK1 > 0 then self.RKPos = 1 end + + local OS = ((1-self.KVARS))+(1-self.KSOT)--0 + local RS = (1-OS)*self.KVARS*self.KSOT--1 + local AV = RS*self.VAV + local KB = self.KB > 0 + -- + local ALSSh = (1-Train.ALS.Value)*Train.VRD.Value + self.F1 = ALS.F1*(1-ALSSh)*self.ALSPower + self.F2 = ALS.F2*(1-ALSSh)*self.ALSPower + self.F3 = ALS.F3*(1-ALSSh)*self.ALSPower + self.F4 = ALS.F4*(1-ALSSh)*self.ALSPower + self.F5 = ALS.F5*(1-ALSSh)*self.ALSPower + self.F6 = ALS.F6*(1-ALSSh)*self.ALSPower + self.NoFreq = (1-math.min(1,self.F5+self.F4+self.F3+self.F2+self.F1))*self.ALSPower + local NoFreq = self.NoFreq+(1-self.ALSPower) + if self.ALSPower==0 then LKI=true end + --Find current speedlimit + local Vz = 0 + if self.F4 > 0 then Vz = 40 end + if self.F3 > 0 then Vz = 60 end + if self.F2 > 0 then Vz = 70 end + if self.F1 > 0 then Vz = 80 end + + local Station = self.Station and 1 or self.F6 + local Vno = -1 + + if self.IgnorePedal and not KB then self.IgnorePedal = false end + if (NoFreq > 0 and self.OldF5 > 0 or self.F5+self.F6 > 0 and self.OldNF > 0) and self.IgnorePedal then + KB = false + end + self.OldF5 = self.F5+self.F6 + self.OldNF = NoFreq + if OS > 0 then + if KB and Vz <= 40 then Vno = 20 end + if KB and Vz > 40 then Vno = 35 end + if self.F5 > 0 and self.IgnoreF6 == nil then self.IgnoreF6 = true end + if self.F5 > 0 and self.IgnoreF6 and speed < 0.1 and self.KGR > 0 then self.IgnoreF6 = false end + if self.F5 == 0 and self.IgnoreF6 ~= nil then self.IgnoreF6 = nil end + else + self.IgnoreF6 = nil + Vno = Vz + if self.VRD > 0 and Vno > 20 then Vno = -1 end + if KB and Vno < 40 or KB and Vno >= 40 then Vno = 20 end + if self.F5 > 0 and (Station+self.VRD) == 0 then Vno = -1 end + end + if self.F5 > 0 and (not KB or Station+self.VRD == 0 or self.VRD > 0 and self.IgnoreF6) then Vno = -1 end + if NoFreq > 0 and not KB then Vno = -1 end + if self.VRD > 0 and Vno > 20 then Vno = 20 end + if self.KVARS*self.KTARS > 0 then self:SetDriveMode("OXT") end + + local prior = self.CurrentDriveModePriority + local Vo = speed + math.max(0,ALS.Acceleration*(1+self.KRH-self.KRT)) + local Vko = Vno-4 + if Vo > Vno then + if not self.OXT then + self.OXT = true + self.OXTTimer = CurTime() + + if NoFreq > 0 or self.F5*self.KD > 0 then self.RingArmed = self.RingArmed or speed>0.1 and CurTime() end + end + if (self.OXTTimer and CurTime()-self.OXTTimer > 1.5 or speed > Vno) and not self.ST then + self.ST = true + self.RingArmed = self.RingArmed or speed>0.1 and CurTime() + --if Vz > 40 then self.RingArmed = true end + end + if self.ST and not self.STTimer and self.KRT==0 then + self.STTimer = CurTime() + end + if self.ST and (self.STTimer and CurTime()-self.STTimer > 1 and speed > Vno or not self.STTimer and self.KRT>0) then + self.AT = true + end + end + if Vo < Vno and self.OXT and not self.ST and self.KGR > 0 then + if not self.OXTTimer or CurTime()-self.OXTTimer > 1.5 then + self.OXTTimer = false + self.OXT = false + end + end + --if Vo < Vko and self.ST and not self.RingArmed then --KB then + if Vo < Vno and self.ST and not self.RingArmed then --KB then + self.ST = false + self.STTimer = false + self.AT = false + end + if KB and self.RingArmed then self.RingArmed = false end + + if self.AT then + self:SetDriveMode("AT") + elseif self.ST then + self:SetDriveMode("ST") + elseif self.OXT then + self:SetDriveMode("OXT") + end + local NoStation = (not self.BrakeProgramm or not self.DoorsLeft or not self.DoorRight) and self.NoStationTimer + if NoStation and not self.NoStationTimer then self.NoStationTimer = CurTime() end + if self.NoStationTimer and not NoStation then self.NoStationTimer = nil end + local ResetBrake = self.KGR==0 and speed>10 and self.NoStationTimer and CurTime()-self.NoStationTimer>1 + if not self.BrakeProgramm or ResetBrake then + --self.BrakeProgrammLossDistance = false + --self.BrakeProgrammCurrentDistance = false + self.Stage0 = false + self.Stage1 = false + self.Stage1Timer = false + self.Stage2Prepared = false + self.Stage2 = false + self.Stage3 = false + self.LastBrakeProgrammLoss = false + self.TargetKPRK = false + if ResetBrake then + self.Station = false + self.NoStationTimer = false + end + end + + if self.BrakeProgrammLossDistance then self.BrakeProgrammLossDistance = self.BrakeProgrammLossDistance+speedMpS*dT end + if self.BrakeProgrammLossDistance and self.BrakeProgrammLossDistance > 30 then self.BrakeProgrammLossDistance = false end + if self.BrakeProgrammCurrentDistance then + if self.StationBrakeRing == nil then + self.StationBrakeRing = self.KRT == 0 and CurTime() + end + self.BrakeProgrammCurrentDistance = self.BrakeProgrammCurrentDistance+speedMpS*dT + end + if self.StationBrakeRing and CurTime()-self.StationBrakeRing > 3 then self.StationBrakeRing = false end + if not self.BrakeProgrammCurrentDistance and self.StationBrakeRing == false then self.StationBrakeRing = nil end + if self.BrakeProgramm then + self:SetDriveMode("OXT") + if AV > 0 then + if self.KRH == 0 then + self:SetDriveMode("ST") + if not self.TargetKPRK then self.TargetKPRK = 1 end + end + if self.TargetKPRK and self.TargetKPRK > 1 and self.KPRK < self.TargetKPRK-0.5 then + local diff = self.TargetKPRK-self.KPRK + if diff <= 1.4 then + self.VPR = CurTime() + else + self:SetDriveMode("AT") + self.VPR = false --FIXME + end + elseif self.TargetKPRK == 5 and self.Stage0 then + self.Stage1Timer = CurTime() + end + if self.VPR then + if CurTime()-self.VPR < 0.5 then + self:SetDriveMode("VPR") + --print("VPR",self.TargetKPRK,self.KPRK) + else + self.VPR = false + end + end + if self.Stage2 then + self:SetDriveMode("AT1") + end + if self.Stage2 and not self.BrakeProgramm then + self:SetPneumoMode("V1") + end + if self.Stage1Timer and CurTime()-self.Stage1Timer > 5 then + self.Stage1 = true + self:SetTargetKPRK(15) + end + else + self.BrakeProgramm = false + end + if self.BrakeProgrammCurrentDistance then + if not self.BrakeProgrammTargetDistance and speed<36 then self.BrakeProgrammTargetDistance=(130-6*speedMpS-2*8) end + if self.BrakeProgrammTargetDistance and (self.BrakeProgrammTargetDistance) < self.BrakeProgrammCurrentDistance and self.TargetKPRK < 5 then + self:SetTargetKPRK(5) + self.Stage0 = true + end + end + end + if self.BrakeProgrammCurrentDistance and (not self.BrakeProgrammTargetDistance or self.BrakeProgrammCurrentDistance > self.BrakeProgrammTargetDistance) then + self.BrakeProgrammCurrentDistance = false + self.BrakeProgrammTargetDistance = false + end + --if self.KH3 > 0 then self.SpeedError = true end + if self.SpeedError and speed < 0.1 then self.SpeedError = false end + if self.SpeedError and not self.LoseVf then self.LoseVf = CurTime() end + if not self.SpeedError and self.LoseVf then self.LoseVf = false end + if self.LoseVf then + local LTimer = CurTime()-self.LoseVf + if LTimer >= 2.5 then + self:SetDriveMode("AT1") + elseif LTimer >= 1.5 then + self:SetDriveMode("ST") + else + self:SetDriveMode("OXT") + end + LKI = true + end + self:SetPneumoMode("NT") + local AntiRollingAccept = not self.Stage2 and (NoFreq==0 or self.KB==0) + if AntiRollingAccept and speed < 3.6 and self.KRH == 0 or self.KRT==0 and self.STTimer and CurTime()-self.STTimer < 0.8 then + self:SetPneumoMode("V1") + end + self.LRS = RS + self.LAVT = AV + self.LOS = OS + + if self.KGR == 0 and NoFreq == 0 then + if self.AntiRolling == nil then + self.AntiRolling = CurTime() + end + elseif self.AntiRolling == false then + self.AntiRolling = nil + self.AntiRollingCount = false + end + if self.AntiRolling and not self.AntiRollingCount then self.AntiRollingCount = 0 end + if self.AntiRollingCount then self.AntiRollingCount = self.AntiRollingCount+speedMpSS*dT end + if self.AntiRolling and (self.AntiRollingCount<-(AntiRollingAccept and 0.35 or 5) or CurTime()-self.AntiRolling > 6) then + local time = CurTime()-self.AntiRolling-6 + + if self.KGR == 1 and speed < 0.1 and self.KRR3 <= 0 then + self.AntiRolling = false + self.AntiRollingCount = false + end + self:SetDriveMode("OXT") + LKI = true + if time > 7 then + self:SetPneumoMode("V2") + else + self:SetPneumoMode("V1") + Ring = time > 5 or time%1 > 0.5 + end + elseif self.AntiRollingCount and self.AntiRollingCount > 0.5 and self.AntiRolling then + self.AntiRolling = false + self.AntiRollingCount = false + end + if self.F5 > 0 and self.F6 == 0 then + if self.F5Timer == nil then self.F5Timer = CurTime() end + else + self.F5Timer = nil + end + if self.F5Timer and CurTime()-self.F5Timer > 30 then + local time = CurTime()-self.F5Timer-30 + self.RingZero = time<8 and 1 or 0--time < 3 or time%1 > 0.5 + if time > 7 then self.F5Timer = false end + else self.RingZero = 0 end + + local KD = self.KD>0 + if KD and not self.KDTimer then self.KDTimer = CurTime() end + if not KD then self.KDTimer = false end + if KD and self.KDTimer and CurTime()-self.KDTimer < 0.3 then KD=false end + --print(self.KD)-- ,self.KD>0 , NoFreq == 0 , Vz > 20 , self.KSOT > 0 , self.VZP*self.VAV > 0 , self.KRT == 0 , self.KRR3 == 0) + --Autodrive drive commands control + local CanDrive = KD and NoFreq == 0 and Vz > 20 and self.KSOT > 0 and self.VZP*self.VAV > 0 and self.KRT == 0 and self.KRR3 <= 0 and self.KDCycle -- and self.KGR > 0 or speed > 0.1) + local commandDrive = math.max(self.CommandDrive or 0,self.KH3*3--[[ *(Vz > 40 and 3 or 2)--]] ,self.DriveCommand or 0) + if self.KH3*self.VAV>0 and self.KDOffTimer then + self.CommandDrive = 3--Vz > 40 and 3 or 2 + end + if CanDrive and commandDrive>0 then + self.DriveCommand = commandDrive + end + --[=[ if CanDrive and --[[ not self.DriveCommand and--]] self.KH3 > 0 then + self.DriveCommand = (Vz > 40 or self.DriveCommand and self.DriveCommand>2) and 3 or 2 + end--]=] + if (Vo > Vno or self.KTARS > 0 or self.VZP==0) then + self.DriveCommand = false + end + if not CanDrive then self.DriveCommand = false end + if self.DriveCommand then + if self.KRH > 0 and not self.KRHTimer then self.KRHTimer = CurTime() end + if self.KRHTimer and CurTime()-self.KRHTimer > 1 then + if self.DriveCommand == 3 then self:SetDriveMode("X3") + elseif self.DriveCommand > 0 then self:SetDriveMode("X2") end + elseif not self.CommandDrive and self.KH3==0 then self.DriveCommand = false + else self:SetDriveMode("X1") end + else + self:SetDriveMode("OD") + self.KRHTimer = false + end + + if self.KD == 0 and not self.KDOffTimer then self.KDOffTimer = CurTime() end + if self.KD > 0 and self.KDOffTimer then self.KDOffTimer = false end + if commandDrive>0 and self.KDOffTimer and CurTime()-self.KDOffTimer > 5 then + if self.KGR > 0 then self.BrakeProgramm = false end + if (self.KRT == 0 or AV==0) and self.StationRing == nil then self.StationRing = CurTime() end + self.KDCycle = true + end + if self.VAV==0 then self.KDCycle = nil end + if self.StationRing and (self.KRH > 0 or self.KSZD > 0) then self.StationRing = false end + if not self.KDOffTimer and self.StationRing ~= nil then self.StationRing = nil end + + --Doors control + local CanOpen = speed <= 0.1 and self.KOAT > 0 and self.KSZD*self.VAV < 1 + --and (not self.StationRing or CurTime()-self.StationRing<4) --KEK + local CanOpenLeft = CanOpen and (self.DoorsLeft or NoFreq > 0) + local CanOpenRight = CanOpen and (self.DoorsRight or NoFreq > 0) + + if self.BrakeProgramm and self.Station and CanOpen--[[ and self.K16 == 0--]] then + if self.OpenLeftTimer==nil and self.OpenRightTimer==nil then + self.OpenLeftTimer = CanOpenLeft and CurTime() + self.OpenRightTimer = CanOpenRight and CurTime() + end + else + self.OpenLeftTimer = nil + self.OpenRightTimer = nil + end + --if --[[ self.KH3 > 0 or--]] speed < 0.1 and (not self.OpenLeftTimer and not self.OpenLeftTimer) or self.KD < 1 then self.BrakeProgramm = false end + --if self.KH3 > 0 then self.Station = false end + if self.K16 > 0 or self.OpenLeftTimer and CurTime()-self.OpenLeftTimer > 1 then self.OpenLeftTimer = false end + if self.K16 > 0 or self.OpenRightTimer and CurTime()-self.OpenRightTimer > 1 then self.OpenRightTimer = false end + if CanOpenLeft or CanOpenRight then + self.CanOpen = true + end + if not CanOpen then self.CanOpen = false end + if self.CanOpen then self:SetDoorMode("DO") else self:SetDoorMode("ZD") end + if CanOpenLeft and (self.KDL > 0 or self.OpenLeftTimer) then + self:SetDoorMode("DL") + end + if CanOpenRight and (self.KDP > 0 or self.OpenRightTimer) then + self:SetDoorMode("DP") + end + + --if self.VAV==0 or self.KDCycle and (not CanOpen or self.KD>0) then self.KDCycle = nil end + --if self.KD == 0 and CanOpen and self.KDCycle==nil then self.KDCycle = CurTime() end + --if self.KDCycle and CurTime()-self.KDCycle>5 then self.KDCycle = false end) + self.LKI1 = LKI and CurTime()%0.5 > 0.25 and 1 or 0 + self.LKI2 = LKI and CurTime()%0.5 <= 0.25 and 1 or 0 + self.LK16 = self.K16 + self.KRR1Brake = true + else + if self.Checked and not Power then self.Checked = false end + self.OXTTimer = false + self.OXT = false + self.ST = false + self.STTimer = false + self.F5Timer = nil + self.AT = false + self.RingArmed = false + self.BrakeProgramm = false + self.LastBrakeProgrammLoss = false + self.BrakeProgrammLossDistance = false + self.BrakeProgrammTargetDistance = false + self.BrakeProgrammCurrentDistance = false + self.StationBrakeRing = false + self.SpeedError = false + self.LoseVf = false + self.AntiRolling = false + self.KRHTimer = false + self.StationRing = false + self.KDOffTimer = false + self.CommandDrive = false + --print(self.KRR1,self.KRR2) + if Power and Reverser and not BackReverser and not self.Checked then + self.Checked = CurTime() + elseif not BackReverser and Power then + if self.KRR1Brake then + self:SetDriveMode("OD") + self:SetPneumoMode("V1") + else + self:SetDriveMode("Zero") + self:SetPneumoMode("NT") + end + self:SetDoorMode("DO") + if speed > 1 then self.KRR1Brake = true end + if self.Checked and self.Checked ~= true and CurTime()-self.Checked < 0.2 then + Ring = true + end + if self.Checked and self.Checked ~= true and CurTime()-self.Checked > 1.5 then + self.Checked = true + self.RingArmed = CurTime() + end + else + self:SetDriveMode("Zero") + self:SetPneumoMode("NT") + end + + self.LK16 = (self.Checked and self.Checked ~= true) and 1 or 0 + self.LRS = self.LK16 + self.LAVT = self.LK16 + self.LOS = self.LK16 + self.LKI1 = self.LK16 + self.LKI2 = self.LK16 + + self.NoFreq = 0 + self.F1 = 0 + self.F2 = 0 + self.F3 = 0 + self.F4 = 0 + self.F5 = 0 + self.F6 = 0 + self.SpeedError = false + self.RingZero = 0 + end + if self.CurrentDriveMode then + self["2"] = self.CurrentDriveMode[2] + self["3"] = self.CurrentDriveMode[3] + local pr8 = self.CurrentDriveMode[4] + if pr8 ~= self.Target8 then + if pr8 == 0 or self.pr8Timer and CurTime()-self.pr8Timer > 1.5 then + self.Target8 = pr8 + self.pr8Timer = nil + end + if (--[[ (1-self.KOAT)*pr8 > 0 and--]] speed>0.1) and not self.pr8Timer then self.pr8Timer = CurTime() end + end + if pr8 == 0 and self.pr8Timer then self.pr8Timer = CurTime() end + self["8"] = (self.Target8+self.CurrentDriveMode[13]*self.KRU)*self.KRR1 + self["17"] = self.CurrentDriveMode[5] + self["19"] = self.CurrentDriveMode[6] + self["20"] = self.CurrentDriveMode[7] + self["20X"] = self.CurrentDriveMode[8] + self["25"] = self.CurrentDriveMode[9] + self["025"] = self.CurrentDriveMode[10] + self["33"] = self.CurrentDriveMode[11] + self["033"] = self.CurrentDriveMode[12] + self["33G"] = self.CurrentDriveMode[13]*(1-self.KRU) + end + if self.CurrentDoorMode then + self["16"] = self.CurrentDoorMode[1] + self["31"] = self.CurrentDoorMode[2] + self["32"] = self.CurrentDoorMode[3] + end + if self.CurrentPneumoMode then + self["39"] = self.CurrentPneumoMode[2]*self.KRR1 + self["48"] = self.CurrentPneumoMode[3]*self.Power + end + self.Ring = (Ring or self.RingArmed and (self.RingArmed-CurTime())%3 > 1.5 or self.StationRing or self.StationBrakeRing) and 1 or 0 + --[[ + for i,train in ipairs(Train.WagonList) do + if train.RheostatController then + Train:SetNW2Int("PUAV:RK"..i,math.floor(train.RheostatController.Position+0.5)) + end + end--]] +end diff --git a/lua/metrostroi/systems/sys_81_717lvz_panel.lua b/lua/metrostroi/systems/sys_81_717lvz_panel.lua new file mode 100644 index 0000000..fb85167 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_717lvz_panel.lua @@ -0,0 +1,232 @@ +-------------------------------------------------------------------------------- +-- 81-717 SPB controller panel +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_717LVZ_Panel") + +function TRAIN_SYSTEM:Initialize() + -- Выключатель батареи (ВБ) + self.Train:LoadSystem("VB","Relay","Switch",{bass = true}) + + -- Buttons on the panel + self.Train:LoadSystem("Ring","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VozvratRP","Relay","Switch", {bass = true}) + self.Train:LoadSystem("OtklBV","Relay","Switch", {bass = true}) + self.Train:LoadSystem("RezMK","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VMK","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VAH","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VAD","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VUS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VUD1","Relay","Switch", {bass = true }) + self.Train:LoadSystem("VUD2","Relay","Switch", { normally_closed = true, bass = true }) -- Doors close + self.Train:LoadSystem("VDL","Relay","Switch", {bass = true}) -- Doors left open + self.Train:LoadSystem("KDL","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KDLR","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KDP","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VOPD","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KRZD","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KSN","Relay","Switch", {bass = true}) + self.Train:LoadSystem("OtklAVU","Relay","Switch", {bass = true}) + self.Train:LoadSystem("OVT","Relay","Switch", {bass = true}) + self.Train:LoadSystem("OVTPl","Relay","Switch", {bass = true}) + self.Train:LoadSystem("ARS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("ALS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VPAOn","Relay","Switch", {bass = true}) + self.Train:LoadSystem("VPAOff","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KVT","Relay","Switch", {bass = true}) + self.Train:LoadSystem("KRP","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("R_UNch","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_ZS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_G","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_UPO","Relay","Switch", {bass = true}) + self.Train:LoadSystem("R_VPR","Relay","Switch", {bass = true, normally_closed = true}) + self.Train:LoadSystem("RC1","Relay","Switch",{ bass = true,normally_closed = true }) + self.Train:LoadSystem("VRD","Relay","Switch",{ bass = true}) + + self.Train:LoadSystem("Radio13","Relay","Switch", {bass = true}) + self.Train:LoadSystem("ARS13","Relay","Switch", {bass = true}) + + -- Педаль бдительноÑти (ПБ) + self.Train:LoadSystem("PB","Relay","Switch", {bass = true}) + + -- ÐвтоматичеÑкие выключатели (ÐÐ’) + self.Train:LoadSystem("A11","Relay","VA21-29") + self.Train:LoadSystem("A17","Relay","VA21-29") + self.Train:LoadSystem("A44","Relay","VA21-29") + self.Train:LoadSystem("A26","Relay","VA21-29") + self.Train:LoadSystem("AR63","Relay","VA21-29") + self.Train:LoadSystem("AS1","Relay","VA21-29") + self.Train:LoadSystem("A21","Relay","VA21-29") + self.Train:LoadSystem("A49","Relay","VA21-29") + self.Train:LoadSystem("A27","Relay","VA21-29") + self.Train:LoadSystem("A10","Relay","VA21-29") + self.Train:LoadSystem("A53","Relay","VA21-29") + self.Train:LoadSystem("A54","Relay","VA21-29") + self.Train:LoadSystem("A84","Relay","VA21-29") + + self.Train:LoadSystem("A76","Relay","VA21-29") + self.Train:LoadSystem("A48","Relay","VA21-29") + self.Train:LoadSystem("AV1","Relay","VA21-29") + self.Train:LoadSystem("A29","Relay","VA21-29") + self.Train:LoadSystem("A46","Relay","VA21-29") + self.Train:LoadSystem("A47","Relay","VA21-29") + self.Train:LoadSystem("A79","Relay","VA21-29") + self.Train:LoadSystem("A42","Relay","VA21-29") + self.Train:LoadSystem("A74","Relay","VA21-29") + self.Train:LoadSystem("A73","Relay","VA21-29") + self.Train:LoadSystem("A71","Relay","VA21-29") + self.Train:LoadSystem("A41","Relay","VA21-29") + self.Train:LoadSystem("A45","Relay","VA21-29") + self.Train:LoadSystem("A75","Relay","VA21-29") + self.Train:LoadSystem("A77","Relay","VA21-29") + self.Train:LoadSystem("A78","Relay","VA21-29") + self.Train:LoadSystem("A43","Relay","VA21-29") + self.Train:LoadSystem("A31","Relay","VA21-29") + self.Train:LoadSystem("A32","Relay","VA21-29") + self.Train:LoadSystem("A13","Relay","VA21-29") + self.Train:LoadSystem("A1","Relay","VA21-29") + self.Train:LoadSystem("A20","Relay","VA21-29") + self.Train:LoadSystem("A25","Relay","VA21-29") + self.Train:LoadSystem("A30","Relay","VA21-29") + self.Train:LoadSystem("A56","Relay","VA21-29") + self.Train:LoadSystem("A65","Relay","VA21-29") + + self.Train:LoadSystem("A2","Relay","VA21-29") + self.Train:LoadSystem("A3","Relay","VA21-29") + self.Train:LoadSystem("A4","Relay","VA21-29") + self.Train:LoadSystem("A5","Relay","VA21-29") + self.Train:LoadSystem("A6","Relay","VA21-29") + self.Train:LoadSystem("A70","Relay","VA21-29") + self.Train:LoadSystem("A14","Relay","VA21-29") + self.Train:LoadSystem("A39","Relay","VA21-29") + self.Train:LoadSystem("A28","Relay","VA21-29") + self.Train:LoadSystem("A38","Relay","VA21-29") + self.Train:LoadSystem("A22","Relay","VA21-29") + self.Train:LoadSystem("A8","Relay","VA21-29") + self.Train:LoadSystem("A12","Relay","VA21-29") + self.Train:LoadSystem("A16","Relay","VA21-29") + self.Train:LoadSystem("A37","Relay","VA21-29") + self.Train:LoadSystem("A51","Relay","VA21-29") + self.Train:LoadSystem("A24","Relay","VA21-29") + self.Train:LoadSystem("A19","Relay","VA21-29") + self.Train:LoadSystem("A66","Relay","VA21-29") + self.Train:LoadSystem("A18","Relay","VA21-29") + self.Train:LoadSystem("A40","Relay","VA21-29") + self.Train:LoadSystem("A80","Relay","VA21-29") + self.Train:LoadSystem("A50","Relay","VA21-29") + self.Train:LoadSystem("A52","Relay","VA21-29") + self.Train:LoadSystem("AV2","Relay","VA21-29") + self.Train:LoadSystem("AV3","Relay","VA21-29",{bass=true,normally_closed=false}) + self.Train:LoadSystem("AV4","Relay","VA21-29") + self.Train:LoadSystem("AV5","Relay","VA21-29") + self.Train:LoadSystem("AV6","Relay","VA21-29") + self.Train:LoadSystem("A55","Relay","VA21-29") + self.Train:LoadSystem("A57","Relay","VA21-29") + self.Train:LoadSystem("A60","Relay","VA21-29") + self.Train:LoadSystem("A81","Relay","VA21-29") + self.Train:LoadSystem("A7","Relay","VA21-29") + self.Train:LoadSystem("A9","Relay","VA21-29") + self.Train:LoadSystem("A68","Relay","VA21-29") + self.Train:LoadSystem("A72","Relay","VA21-29") + + self.Train:LoadSystem("AIS","Relay","VA21-29") + + --ПУÐÐ’ автоматы + self.Train:LoadSystem("A58","Relay","VA21-29") + self.Train:LoadSystem("A59","Relay","VA21-29") + self.Train:LoadSystem("A61","Relay","VA21-29") + + self.Train:LoadSystem("A15","Relay","VA21-29") + + self.Train:LoadSystem("KDLK","Relay","Switch", { bass = true,normally_closed = true }) + self.Train:LoadSystem("KDLRK","Relay","Switch", { bass = true,normally_closed = true }) + self.Train:LoadSystem("KDPK","Relay","Switch", { bass = true,normally_closed = true }) + self.Train:LoadSystem("KAHK","Relay","Switch", { bass = true,normally_closed = true }) + + -- 81-717 special + self.Train:LoadSystem("BPSNon","Relay","Switch", { bass = true }) + self.Train:LoadSystem("L_1","Relay","Switch",{bass = true}) + self.Train:LoadSystem("L_2","Relay","Switch",{bass = true}) + self.Train:LoadSystem("L_3","Relay","Switch",{bass = true}) + self.Train:LoadSystem("L_4","Relay","Switch",{bass = true}) + self.Train:LoadSystem("L_5","Relay","VA21-29",{bass = true}) + self.Train:LoadSystem("DoorSelect","Relay","Switch", { bass = true, normally_closed = false }) + self.Train:LoadSystem("VZ1","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("Wiper","Relay","Switch") + + self.Train:LoadSystem("OhrSig","Relay","Switch", {bass = true, normally_closed = true}) + self.Train:LoadSystem("VSOSD","Relay","Switch", {bass = true}) + + self.Train:LoadSystem("PVK","Relay","Switch",{maxvalue=2,bass=true}) + + -- Map of AV switches to indexes on panel + self:InitializeAVMap() + + self.V1 = 0 + self.LUDS = 0 + self.RedLight2 = 0 + self.RedLight1 = 0 + self.Headlights1 = 0 + self.Headlights2 = 0 + self.EqLights = 0 + self.CabLights = 0 + self.EqLights = 0 + self.PanelLights = 0 + self.CabinLight = 0 + self.EmergencyLights = 0 + self.MainLights = 0 + self.DoorsLeft = 0 + self.DoorsRight = 0 + self.DoorsW = 0 + self.GreenRP = 0 + self.BrW = 0 + self.AVU = 0 + self.LKVP = 0 + self.RZP = 0 + self.KUP = 0 + self.BrT = 0 + self.LSN = 0 + self.Ring = 0 + self.SD = 0 + self.LST = 0 + self.LKVD = 0 + self.LVD = 0 + self.LhRK = 0 + self.KVC = 0 + self.SD = 0 + self.TW18 = 0 + self.OhrSig = 0 + self.SOSD = 0 + self.KT = 0 + self.M8 = 0 + self.AnnouncerPlaying = 0 + self.AnnouncerBuzz = 0 + self.UPOPower = 0 + + self.VPR = 0 + self.BURPower = 0 + + self.NMLow = 0 + self.UAVATriggered = 0 +end + +function TRAIN_SYSTEM:ClientInitialize() + self:InitializeAVMap() +end + +function TRAIN_SYSTEM:Outputs() + return { "V1","LUDS","RedLight2","RedLight1","Headlights1","Headlights2","EqLights","CabLights","EqLights","PanelLights","CabinLight","EmergencyLights","MainLights","DoorsLeft","DoorsRight","DoorsW","GreenRP","BrW","AVU","LKVP","RZP","KUP","BrT","LSN","Ring","SD","LST","LKVD","LVD","LhRK","KVC","SD","TW18","KT","OhrSig","SOSD","AnnouncerPlaying","AnnouncerBuzz","UPOPower","M8","VPR","BURPower","NMLow","UAVATriggered" } +end + +function TRAIN_SYSTEM:InitializeAVMap() + self.AVMap = { + 61,55,54,56,27,21,10,53,43,45,42,41, + "VU",64,63,50,51,23,14,75, 1, 2, 3,17, + 62,29, 5, 6, 8,20,25,22,30,39,44,80, + 65,"L_5",24,32,31,16,13,12, 7, 9,46,47 + } +end diff --git a/lua/metrostroi/systems/sys_81_718_battery.lua b/lua/metrostroi/systems/sys_81_718_battery.lua new file mode 100644 index 0000000..03d3a85 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_718_battery.lua @@ -0,0 +1,35 @@ +-------------------------------------------------------------------------------- +-- 81-718 battery +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_718_Battery") + +function TRAIN_SYSTEM:Initialize() + -- Предохранители цепей (ПÐ1, ПÐ2) + self.Train:LoadSystem("FU1","Relay","PP-28", { trigger_level = 20 }) -- A + self.Train:LoadSystem("FU2","Relay","PP-28", { trigger_level = 20 }) -- A + + -- Battery parameters + self.ElementCapacity = 80 -- A*hour + self.ElementCount = 56 -- 52 on 81-717 + self.Capacity = self.ElementCapacity * self.ElementCount * 3600 + self.Charge = self.Capacity + self.Voltage = 65 + -- Current through battery in amperes + self.Current = 0 +end + +function TRAIN_SYSTEM:Outputs() + return { "Capacity", "Charge", "Voltage" } +end + +function TRAIN_SYSTEM:Think(dT) + -- Calculate discharge + self.Current = 0 + self.Charge = math.min(self.Capacity,self.Charge + self.Current * dT) + + -- Calculate battery voltage + self.Voltage = 65*(self.Charge/self.Capacity) + (self.Train.BBE.KM1 > 0 and 17 or 0) +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_81_718_bbe.lua b/lua/metrostroi/systems/sys_81_718_bbe.lua new file mode 100644 index 0000000..e57f176 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_718_bbe.lua @@ -0,0 +1,62 @@ +-------------------------------------------------------------------------------- +-- 81-718 power supply unit +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_718_BBE") + +function TRAIN_SYSTEM:Initialize() + self.Active = 0 + self.KM1 = 0 + self.KM2 = 0 + + self.KMPower = 0 + + self.Activate = 0 + self.Deactivate = 0 + self.Error = 0 +end + +function TRAIN_SYSTEM:Inputs() + return { "Enable" } +end + +function TRAIN_SYSTEM:Outputs() + return { "KM1","KM2" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Enable" then + self.Active = 1 + end +end + +function TRAIN_SYSTEM:Think() + local Train = self.Train + if self.Activate > 0 then self.Active = 1 end + if self.Deactivate > 0 then self.Active = 0 end + if self.Power == 0 or self.Active == 0 then + self.KM1 = 0 + self.KM2 = 0 + return + end + + + if Train.Electric.Main750V > 200 then + self.KM1 = self.Active*self.KMPower + self.KM2 = self.KMPower*self.KM2Power + else + self.KM1 = 0 + end + + if self.KM1 == 0 and self.KM2 > 0 and (not self.LightTimer) then + self.LightTimer = CurTime() + end + if (self.KM1 > 0 or self.KM2 == 0) and self.LightTimer then + self.LightTimer = nil + end + if self.LightTimer and CurTime()-self.LightTimer > 27 then + self.KM2 = 0 + end +end diff --git a/lua/metrostroi/systems/sys_81_718_bkbd.lua b/lua/metrostroi/systems/sys_81_718_bkbd.lua new file mode 100644 index 0000000..8bfd059 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_718_bkbd.lua @@ -0,0 +1,313 @@ +-------------------------------------------------------------------------------- +-- 81-718 "BKBD" safety system +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_718_BKBD") +function TRAIN_SYSTEM:Initialize() + self.FMM1 = 0 + self.FMM2 = 0 + self.PD = 0 + self.VP = 0 + self.ALS = 0 + self.KB = 0 + self.NGPower = 0 + self.DA = 0 + self.KT = 0 + + self.Train:LoadSystem("ALSCoil") + + self.Train:LoadSystem("BIS_R11","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BIS_R12","Relay","ARS",{bass=true,bass_separate=true,open_time=2.7}) + self.R11 = 0 + self.R12 = 0 + self.KRH = 0 + + self.Train:LoadSystem("BIS200","ALS_ARS_BIS200") + self.Train:LoadSystem("BLPM","ALS_ARS_BLPM") + + self.Train.BLPM.PKWire = 85 + self.Train:LoadSystem("BSM","ALS_ARS_BSM",2) + self.Train:LoadSystem("BUM","ALS_ARS_BUM",2) + + self.Train:LoadSystem("RPB","Relay","REV-813T", { bass = true, open_time = 2.5,}) + self.Train:LoadSystem("ROT1","Relay") + self.Train:LoadSystem("ROT2","Relay") + + self.Train:LoadSystem("EPKC","Relay") + + self.Train:LoadSystem("KPK1","Relay","",{bass=true,bass_separate=true}) --ÐšÐ¾Ð¼Ð¼ÑƒÑ‚Ð°Ñ†Ð¸Ñ ÐŸÐš + self.Train:LoadSystem("KPK2","Relay","",{bass=true,bass_separate=true}) --ÐšÐ¾Ð¼Ð¼ÑƒÑ‚Ð°Ñ†Ð¸Ñ ÐŸÐš + self.Train:LoadSystem("FMM1","Relay","",{bass=true,bass_separate=true}) --ФикÑÐ°Ñ†Ð¸Ñ Ð¼ÐµÑÑ‚Ð¾Ð½Ð°Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¼Ð°ÑˆÐ¸Ð½Ð¸Ñта + self.Train:LoadSystem("FMM2","Relay","",{bass=true,bass_separate=true}) --ФикÑÐ°Ñ†Ð¸Ñ Ð¼ÐµÑÑ‚Ð¾Ð½Ð°Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¼Ð°ÑˆÐ¸Ð½Ð¸Ñта + self.Train:LoadSystem("PD1","Relay","",{bass=true,bass_separate=true}) --Переключение дешифратора + self.Train:LoadSystem("PD2","Relay","",{bass=true,bass_separate=true}) --Переключение дешифратора + self.Train:LoadSystem("ARS_VP","Relay","",{bass=true,bass_separate=true}) --Режим ВП + self.Train:LoadSystem("ARS_RT","Relay","",{bass=true,bass_separate=true}) --Реле Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ‚ ÐРС-Р + self.Train:LoadSystem("NG","Relay","",{bass=true,bass_separate=true}) + self.Train:LoadSystem("NH","Relay","",{bass=true,bass_separate=true}) + + -- ARS wires + self["33D"] = 0 + self["33G"] = 0 + self["2"] = 0 + self["6"] = 0 + self["8"] = 0 + self["20"] = 0 + --self["21"] = 0 + self["48"] = 0 + self["31"] = 0 + self["32"] = 0 + self.Ring = 0 + self.LN = 0 + + self.EPK = 0 +end + +function TRAIN_SYSTEM:Outputs() + return { + "2", "8", "20", "48", "33D", "33G", "48", + "NoFreq","F1","F2","F3","F4","F5","F6","LN", + "EPK", + } +end + +function TRAIN_SYSTEM:Inputs() + return {} +end + +local S = {} +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local ALS = Train.ALSCoil + local BLPM = Train.BLPM + local Panel = Train.Panel + + Train.FMM1:TriggerInput("Set",self.FMM1) + Train.FMM2:TriggerInput("Set",self.FMM2) + + S["RVZ"] = self.GE*((Train.BSM_KRO.Value+Train.BSM_KRT.Value)*(1-Train.BSM_KRH.Value)+Train.BSM_BR2.Value)*(1-Train.BIS_R2.Value)*(1-Train.BIS_R3.Value)*(1-Train.BIS_R4.Value)*(1-Train.BIS_R5.Value)*(1-Train.BIS_R6.Value)*(1-Train.BIS_R7.Value)*(1-Train.BIS_R8.Value)*(1-Train.BIS_R10.Value) + --Train.BIS_R0:TriggerInput("NoOpenTime",Train.BIS_R1.Value+(1-Train.BIS_R0.Value)) + + Train.BIS_R0:TriggerInput("NoOpenTime",(1-Train.BIS_R0.Value)+Train.BIS_R1.Value) + --Train.BIS_R0:TriggerInput("Set",(self.GE*(1-Train.BSM_GE.Value)+S["RVZ"]*(Train.BIS_R1.Value+Train.BIS_R0.Value))*Train.BIS200.R0) + Train.BIS_R0:TriggerInput("Set",self.GE*(1-Train.BSM_GE.Value)+S["RVZ"]*(Train.BIS_R1.Value+Train.BIS_R0.Value)) + Train.BSM_PR1:TriggerInput("Set",self.GE*Train.BIS_R1.Value) + + S["RVZ1"] = S["RVZ"]*Train.BIS_R0.Value*(1-Train.BIS_R1.Value) + S["EK0"] = S["RVZ1"]*(1-Train.BSM_GE.Value) + + Train.ARS_VP:TriggerInput("Set",self.VP) + Train.PD1:TriggerInput("Set",self.PD) + Train.PD2:TriggerInput("Set",self.PD) + + Train.BSM_GE:TriggerInput("Set",self.GE) + + + -- LN 1/5 Light fix + --S["FMM_28"] = self.NGPower*Train.BLPM_5R3.Value*(1-Train.BLPM_4R3.Value)*(Train.PD2.Value*(1-Train.BLPM_6R3.Value) + (1-Train.PD2.Value)*Train.BLPM_6R3.Value)*Train.BLPM_3R3.Value*Train.BLPM_2R3.Value*Train.BLPM_1R3.Value + -- Original + S["FMM_28"] = self.NGPower*Train.BLPM_5R3.Value*(1-Train.BLPM_4R3.Value)*(Train.PD2.Value*(1-Train.BLPM_6R3.Value))*Train.BLPM_3R3.Value*Train.BLPM_2R3.Value*Train.BLPM_1R3.Value + Train.NG:TriggerInput("Set",S["FMM_28"]*Train.FMM1.Value+self.NGPower*Train.NG.Value*(1-Train.NH.Value)) + Train.NH:TriggerInput("Set",S["FMM_28"]*(1-Train.FMM1.Value)+self.NGPower*Train.NH.Value*(1-Train.NG.Value)) + + S["GE"]= self.GE*Train.BSM_GE.Value + local EnableALS = ((S["GE"]+self.ALS)--[[ *Train.KPK1.Value*Train.SA15.Value+(1-Train.KPK2.Value)--]] )*Train.FMM1.Value + if EnableALS ~= ALS.Enabled then + ALS:TriggerInput("Enable",EnableALS) + end + Train.BSM_KRH:TriggerInput("Set",self.KRH + self.R11*Train.BIS_R11.Value*Train.BIS_R12.Value) + Train.BIS_R11:TriggerInput("Set",self.R11) + Train.BIS_R12:TriggerInput("Set",self.R12*(1-Train.BIS_R11.Value)) + + --FreqProtect + --SR1,SR2 + S["FQCheckPower"] = S["GE"]+self.ALS + S["LUDS"] = (self.GE+self.ALS--[[ *Train.FMM1.Value--]] )*Train.BSM_SR1.Value + S["5P31F"] = BLPM.OneFreq*Train.BLPM_5R3.Value*(1-Train.ARS_VP.Value) + S["SRPower"] = S["FQCheckPower"]*(S["5P31F"]*(1-Train.PD1.Value)+BLPM.TwoFreq*(1-Train.ARS_VP.Value)*Train.PD1.Value) + S["NF"] = (S["FQCheckPower"]*(BLPM.TwoFreq*((1-Train.PD1.Value)+Train.ARS_VP.Value)+BLPM.NoneFreq+BLPM.BadFreq+BLPM.OneFreq*((1-Train.BLPM_5R3.Value)*(1-Train.BLPM_5R1.Value)*(1-Train.BLPM_5R2.Value)+Train.ARS_VP.Value))*(1-Train.BSM_SIR5.Value)*(1-Train.BSM_SIR4.Value)*(1-Train.BSM_SIR3.Value)*(1-Train.BSM_SIR2.Value)*(1-Train.BSM_SIR1.Value)) + S["1SIR"] = S["SRPower"]*(1-Train.BLPM_1R3.Value)*Train.BLPM_1R1.Value*Train.BLPM_1R2.Value + S["2SIR"] = S["SRPower"]*Train.BLPM_1R3.Value*(1-Train.BLPM_2R3.Value)*Train.BLPM_2R1.Value*Train.BLPM_2R2.Value + S["3SIR"] = S["SRPower"]*Train.BLPM_1R3.Value*Train.BLPM_2R3.Value*(1-Train.BLPM_3R3.Value)*Train.BLPM_3R1.Value*Train.BLPM_3R2.Value + S["4SIR"] = S["5P31F"]*(1-S["NF"])*Train.PD1.Value+(S["SRPower"]*Train.BLPM_1R3.Value*Train.BLPM_2R3.Value*Train.BLPM_3R3.Value)*(1-Train.BLPM_4R3.Value)*Train.BLPM_4R1.Value*Train.BLPM_4R2.Value + S["5SIR"] = S["FQCheckPower"]*BLPM.OneFreq*(1-Train.BLPM_5R3.Value)*Train.BLPM_5R1.Value*Train.BLPM_5R2.Value + + Train.BSM_SIR1:TriggerInput("Set", + S["FQCheckPower"]*Train.BSM_SR1.Value*Train.BSM_SIR1.Value+ + S["1SIR"]*(1-Train.BSM_SR1.Value)--*(1-Train.BSM_SR2.Value) + ) + Train.BSM_SIR2:TriggerInput("Set", + S["FQCheckPower"]*Train.BSM_SR1.Value*(Train.BSM_SIR1.Value+Train.BSM_SIR2.Value)+ + S["2SIR"]*(1-Train.BSM_SR1.Value)--*(1-Train.BSM_SR2.Value) + ) + Train.BSM_SIR3:TriggerInput("Set", + S["FQCheckPower"]*Train.BSM_SR1.Value*(Train.BSM_SIR2.Value+Train.BSM_SIR3.Value)+ + S["3SIR"]*(1-Train.BSM_SR1.Value)--*(1-Train.BSM_SR2.Value) + ) + Train.BSM_SIR4:TriggerInput("Set", + S["FQCheckPower"]*Train.BSM_SR1.Value*(Train.BSM_SIR3.Value+Train.BSM_SIR4.Value)+ + S["4SIR"]*(1-Train.BSM_SR1.Value)--*(1-Train.BSM_SR2.Value) + ) + Train.BSM_SIR5:TriggerInput("Set", + S["FQCheckPower"]*Train.BSM_SR1.Value*(Train.BSM_SIR1.Value+Train.BSM_SIR2.Value+Train.BSM_SIR3.Value+Train.BSM_SIR4.Value+Train.BSM_SIR5.Value)+ + S["5SIR"]*(1-Train.BSM_SR1.Value)--*(1-Train.BSM_SR2.Value) + ) + S["SRSIR5"] = (S["NF"]*(1-Train.BSM_SIR5.Value)+S["5SIR"]*Train.BSM_SIR5.Value) + S["SRSIR4"] = (S["4SIR"]*Train.BSM_SIR4.Value) + S["SRSIR3"] = (S["3SIR"]*Train.BSM_SIR3.Value) + S["SRSIR2"] = (S["2SIR"]*Train.BSM_SIR2.Value) + S["SRSIR1"] = (S["1SIR"]*Train.BSM_SIR1.Value) + ---[[ + S["SR"] = + S["SRSIR5"]*(1-Train.BSM_SIR4.Value)*(1-Train.BSM_SIR3.Value)*(1-Train.BSM_SIR2.Value)*(1-Train.BSM_SIR1.Value)+ + S["SRSIR4"]*(1-Train.BSM_SIR3.Value)*(1-Train.BSM_SIR2.Value)*(1-Train.BSM_SIR1.Value)+ + S["SRSIR3"]*(1-Train.BSM_SIR2.Value)*(1-Train.BSM_SIR1.Value)+ + S["SRSIR2"]*(1-Train.BSM_SIR1.Value)+ + S["SRSIR1"] + + Train.BSM_SR1:TriggerInput("Set",S["SR"]) + Train.BSM_SR2:TriggerInput("Set",S["SR"]) + + S["BSM_KSR1"] = S["GE"]*Train.BSM_SR1.Value + S["BIS1"] = S["BSM_KSR1"]*( + ((1-Train.BIS_R0.Value)*Train.BIS_R2.Value+Train.BIS_R0.Value*(1-Train.BIS_R2.Value))+ + ((1-Train.BIS_R6.Value)*Train.BIS_R8.Value+Train.BIS_R6.Value*(1-Train.BIS_R8.Value))+ + ((1-Train.BIS_R3.Value)*Train.BIS_R5.Value+Train.BIS_R3.Value*(1-Train.BIS_R5.Value))+ + ((1-Train.BIS_R10.Value)*Train.BIS_R7.Value+Train.BIS_R10.Value*(1-Train.BIS_R7.Value))+ + ((1-Train.BIS_R1.Value)*Train.BIS_R4.Value+Train.BIS_R1.Value*(1-Train.BIS_R4.Value)) + ) + S["R10"] = S["BIS1"]*(1-Train.BIS_R10.Value) + S["R8"] = S["R10"]*(1-Train.BIS_R8.Value) + S["R7"] = S["R8"]*(1-Train.BIS_R7.Value) + S["R5"] = S["R7"]*(1-Train.BIS_R6.Value)*(1-Train.BIS_R5.Value) + S["R3"] = S["R5"]*(1-Train.BIS_R4.Value)*(1-Train.BIS_R3.Value) + + S["BR1_14"] = + S["R10"]*Train.BSM_SIR1.Value+ + S["R8"]*Train.BSM_SIR2.Value*(1-Train.BSM_SIR1.Value)+ + S["R7"]*Train.BSM_SIR3.Value*(1-Train.BSM_SIR2.Value)*(1-Train.BSM_SIR1.Value)+ + S["R5"]*Train.BSM_SIR4.Value*(1-Train.BSM_SIR3.Value)*(1-Train.BSM_SIR2.Value)*(1-Train.BSM_SIR1.Value) + S["BR1_C"] = S["R3"]*Train.BSM_SIR5.Value + S["BR1_16"] = S["R5"]*Train.BSM_SIR3.Value+S["BR1_C"]*(1-Train.BSM_SIR3.Value) + S["BR2_16"] = S["R3"]*(1-Train.BSM_SIR5.Value) + S["BR1_C2"] = S["BR1_C"]*Train.BSM_BR1.Value + -- LN 1/5 Original without PD fix + --S["BR2_14"] = + -- (Train.BSM_BR1.Value*S["BR1_16"]+(1-Train.BSM_BR1.Value)*S["BR1_14"]) + -- *(Train.FMM2.Value*Train.NG.Value+(1-Train.FMM2.Value)*Train.NH.Value*(1-Train.NG.Value))+ + -- S["BR1_C2"]*((1-Train.NH.Value)*(1-Train.NG.Value)+Train.FMM2.Value*Train.NH.Value*(1-Train.NG.Value)+(1-Train.FMM2.Value)*Train.NG.Value) + -- LN 1/5 With PD fix + S["BR2_14"] = + (Train.BSM_BR1.Value*S["BR1_16"]+(1-Train.BSM_BR1.Value)*S["BR1_14"]) + *(Train.FMM2.Value*(Train.NG.Value+(1-Train.PD1.Value))+(1-Train.FMM2.Value)*(Train.NH.Value+(1-Train.PD2.Value))*(1-Train.NG.Value))+ + S["BR1_C2"]*((1-Train.NH.Value)*(1-Train.NG.Value)+Train.FMM2.Value*Train.NH.Value*(1-Train.NG.Value)+(1-Train.FMM2.Value)*Train.NG.Value) + + S["KSR2"] = S["BR2_16"]*Train.BSM_BR2.Value+S["BR2_14"]*(1-Train.BSM_BR2.Value) + + S["KSR"] = S["KSR2"]*(Train.BUM_PTR1.Value+Train.BSM_RNT.Value*Train.BSM_RNT1.Value) + Train.BSM_KSR1:TriggerInput("Set",S["KSR"]) + Train.BSM_KSR2:TriggerInput("Set",S["KSR"]) + + Train.BSM_BR1:TriggerInput("Set",self.KB*((Train.BSM_BR1.Value+Train.BSM_SIR5.Value)*(1-Train.BSM_BR2.Value))) + Train.BSM_BR2:TriggerInput("Set",self.KB*((1-Train.BSM_SIR5.Value)*(1-Train.BSM_BR1.Value))) + S["BR12"] = Train.BSM_BR1.Value+Train.BSM_BR2.Value + S["RNT"] = self.GE*(S["BR12"]+(Train.BSM_RNT.Value*Train.BSM_RNT1.Value)*(Train.BSM_KSR1.Value*Train.BSM_KSR2.Value+Train.BSM_KRT.Value)) + Train.BSM_RNT:TriggerInput("Set",S["RNT"]) + Train.BSM_RNT1:TriggerInput("Set",S["RNT"]) + self.Ring = self.GE*((1-Train.BSM_RNT.Value)+(1-Train.BSM_RNT1.Value)) + + --Train.BSM_BR1:TriggerInput("Set",) + S["LUDS70"] = S["LUDS"]*(Train.BLPM_5R3.Value*Train.BLPM_4R3.Value*Train.BLPM_3R3.Value*(1-Train.BLPM_2R3.Value)*Train.BLPM_2R1.Value*Train.BLPM_2R2.Value+(1-Train.BSM_SIR1.Value)) + S["LUDS60"] = S["LUDS"]*(Train.BLPM_5R3.Value*Train.BLPM_4R3.Value*(1-Train.BLPM_3R3.Value)*Train.BLPM_3R1.Value*Train.BLPM_3R2.Value+(1-Train.BSM_SIR2.Value)*(1-Train.BSM_SIR1.Value)) + S["LUDS40"] = S["LUDS"]*(Train.BLPM_5R3.Value*(1-Train.BLPM_4R3.Value)*Train.BLPM_4R1.Value*Train.BLPM_4R2.Value+(1-Train.BSM_SIR3.Value)*(1-Train.BSM_SIR2.Value)*(1-Train.BSM_SIR1.Value)) + S["LUDS0"] = S["LUDS"]*((1-Train.BLPM_5R3.Value)*Train.BLPM_5R1.Value*Train.BLPM_5R2.Value+(1-Train.BSM_SIR4.Value)*(1-Train.BSM_SIR3.Value)*(1-Train.BSM_SIR2.Value)*(1-Train.BSM_SIR1.Value)) + S["AR80"] = S["LUDS"]*Train.BSM_SIR1.Value + S["AR70"] = S["LUDS70"]*Train.BSM_SIR2.Value + S["AR60"] = S["LUDS60"]*Train.BSM_SIR3.Value + S["AR40"] = S["LUDS40"]*Train.BSM_SIR4.Value + S["AR0"] = S["LUDS0"]*Train.BSM_SIR5.Value + S["AR04"] = S["LUDS0"]*(1-Train.BSM_SIR5.Value) + + Train.KPK1:TriggerInput("Set",self.NGPower*((1-Train.ARS_VP.Value)*Train.FMM1.Value+Train.ARS_VP.Value*(1-Train.FMM1.Value))) + Train.KPK2:TriggerInput("Set",self.NGPower*((1-Train.ARS_VP.Value)*(1-Train.FMM2.Value)+Train.ARS_VP.Value*Train.FMM2.Value)) + + + S["GEKSR"] = --[[ S["FQCheckPower"]*--]]self.GE*Train.BSM_KSR1.Value*Train.BSM_KSR2.Value + Train.BUM_RUVD:TriggerInput("Set",S["GEKSR"]*(Train.BSM_KRO.Value+Train.BUM_RUVD.Value)) + S["RVD"] = S["GEKSR"]*(Train.BUM_RUVD.Value) + Train.BUM_RVD1:TriggerInput("Set",S["RVD"]) + Train.BUM_RVD2:TriggerInput("Set",S["RVD"]) + Train.BUM_TR:TriggerInput("Set",S["GEKSR"]) + --Train.BUM_PTR:TriggerInput("Set",self.GE*Train.BSM_RNT.Value*Train.BSM_RNT1.Value*Train.BUM_TR.Value) + Train.BUM_PTR:TriggerInput("Set",self.GE*Train.BUM_TR.Value) + Train.BUM_RVT5:TriggerInput("Set",self.GE*(1-Train.BUM_TR.Value)) + + S["RVT1"] = self.GE*((1-Train.BSM_SIR4.Value)*(1-Train.BUM_TR.Value)+(1-Train.BUM_PTR1.Value)) + Train.BUM_RVT1:TriggerInput("Set",S["RVT1"]) + Train.BUM_RVT2:TriggerInput("Set",S["RVT1"]) + Train.BUM_RVT4:TriggerInput("Set",S["RVT1"]) + Train.BUM_RET:TriggerInput("Set",self.GE*(1-Train.BUM_TR.Value)*Train.BUM_PTR1.Value) + Train.BUM_PTR1:TriggerInput("Set",self.GE*Train.BUM_TR.Value) + Train.BUM_RVZ1:TriggerInput("Set",S["RVZ1"]*(1-Train.BSM_BR2.Value)) + + + --EPK + -- + S["EKR0on"] = + self.GE*( + Train.BSM_KRH.Value*(1-Train.BSM_KRT.Value)*(1-Train.BSM_KRO.Value) + +(1-Train.BSM_KRH.Value)*( + Train.BSM_PR1.Value + +Train.BSM_BR2.Value) + ) + +self.KT*Train.BSM_KSR1.Value*Train.BSM_KSR2.Value + + + S["EKR0"] = ( + S["EKR0on"]*Train.BIS_R0.Value*(1-Train.BIS_R1.Value) + +self.GE*((1-Train.BIS_R0.Value)+Train.BIS_R1.Value) + --[[S["EKR0on"]*Train.BIS_R0.Value + +self.GE*(1-Train.BIS_R0.Value)]] + )*Train.BSM_KSR1.Value*Train.BSM_KSR2.Value*Train.BUM_PTR.Value + S["EK1"] = S["EKR0"]+self.KT*Train.BSM_GE.Value*(1-Train.BSM_KSR1.Value)*(1-Train.BSM_KSR2.Value)*(1-Train.BUM_PTR.Value)*(1-Train.BUM_PTR1.Value) + S["EK"] = S["EK0"]+S["EK1"]*Train.BUM_PEK.Value*Train.BUM_RIPP.Value + S["EKt"] = 3+3*math.max(0,Train.BUM_PEK.Value*(Train.BIS_R2.Value+Train.BIS_R3.Value)) + + Train.BUM_EK:TriggerInput("Set",S["EK"]) + Train.BUM_EK1:TriggerInput("Set",S["EK"]) + Train.BUM_EK:TriggerInput("OpenTime",S["EKt"]) + Train.BUM_EK1:TriggerInput("OpenTime",S["EKt"]) + + self.EPK = self.GE*Train.BUM_EK.Value*Train.BUM_EK1.Value + Train.BUM_PEK:TriggerInput("Set",self.EPK) + Train.BUM_RIPP:TriggerInput("Set",self.EPK) + self["48"] = self.GE*(Train.BUM_RET.Value+Train.BUM_RVZ1.Value) + self["8"] = self.GE*Train.BUM_RVT5.Value + self["20"] = self.DA*Train.BUM_RVT1.Value + self["33G"] = self.DA*Train.BUM_RVT2.Value + self["2"] = self.DA*Train.BUM_RVT4.Value + + Train:WriteTrainWire(85,(1-Train.KPK2.Value)*bit.bor(ALS.F1*1,ALS.F2*2,ALS.F3*4,ALS.F4*8,ALS.F5*16,ALS.F6*32)) + Train:WriteTrainWire(73,S["LUDS"]*(1-Train.BLPM_6R3.Value)*(Train.BLPM_6R2.Value)*(Train.BLPM_6R1.Value)) + Train:WriteTrainWire(80,S["AR80"]) + Train:WriteTrainWire(79,S["AR70"]) + Train:WriteTrainWire(78,S["AR60"]) + Train:WriteTrainWire(77,S["AR40"]) + Train:WriteTrainWire(76,S["AR0"]) + Train:WriteTrainWire(75,S["AR04"]) + Train:WriteTrainWire(81,self.GE*Train.BUM_KPP.Value) + Train:WriteTrainWire(82,S["GE"]*(Train.NG.Value*Train.FMM1.Value+Train.NH.Value*(1-Train.FMM1.Value))) + Panel.RS = Train:ReadTrainWire(73) + Panel.AR80 = Train:ReadTrainWire(80) + Panel.AR70 = Train:ReadTrainWire(79) + Panel.AR60 = Train:ReadTrainWire(78) + Panel.AR40 = Train:ReadTrainWire(77) + Panel.AR0 = Train:ReadTrainWire(76) + Panel.AR04 = Train:ReadTrainWire(75) + Panel.KT = Train:ReadTrainWire(81) + Panel.LN = S["GE"]*Train.NG.Value+Train:ReadTrainWire(82)*Train.FMM1.Value + --Train:WriteTrainWire(83,self.EPK*(1-Train.ARS.Value)) + --Train.EPKC:TriggerInput("Set",self.EPK+Train:ReadTrainWire(83)) +end diff --git a/lua/metrostroi/systems/sys_81_718_bkcu.lua b/lua/metrostroi/systems/sys_81_718_bkcu.lua new file mode 100644 index 0000000..df0722c --- /dev/null +++ b/lua/metrostroi/systems/sys_81_718_bkcu.lua @@ -0,0 +1,64 @@ +-------------------------------------------------------------------------------- +-- 81-718 control circuit switching unit +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_718_BKCU") + +function TRAIN_SYSTEM:Initialize() + self.KM1 = 0 --Контактор-повторитель КР "Ðазад" + self.KM2 = 0 --Контактор-повторитель КР "Вперёд" + self.KM3 = 0 --Контактор-повторитель КР "0" + self.KM4 = 0 --Реле блокировки поÑтов ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + self.KM5 = 0 --Контактор-повторитель КРУ "Ðазад" + self.KM6 = 0 --Контактор-повторитель КРУ "Вперёд" + self.KM7 = 0 --Контактор-повторитель КРУ "0" + self.KM8 = 0 --Реле блокировки поÑтов ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + + --Контроллер + self.Controller = 0 + self.TargetController = 0 +end + +function TRAIN_SYSTEM:Inputs() + return { "KVUp", "KVDown", "KV1", "KV2", "KV3", "KV4", "KV5", "KV6", "KV7", "ControllerUnlock"} +end + +function TRAIN_SYSTEM:Outputs() + return { "Controller" } +end +--if not TURBOSTROI then return end +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "KVUp" and value > 0 and self.Controller < 3 then + if self.TargetController+1 == 0 and not self.Locker then return end + self.TargetController = self.TargetController + 1 + end + if name == "KVDown" and value > 0 and self.TargetController > -3 then + self.TargetController = self.TargetController - 1 + end + if name == "KV3" and value > 0 then self.TargetController = 3 end + if name == "KV2" and value > 0 then self.TargetController = 2 end + if name == "KV1" and value > 0 then self.TargetController = 1 end + if name == "KV4" and value > 0 then self.TargetController = 0 end + if name == "KV5" and value > 0 then self.TargetController = -1 end + if name == "KV6" and value > 0 then self.TargetController = -2 end + if name == "KV7" and value > 0 then self.TargetController = -3 end + if name == "ControllerUnlock" then self.Locker = value > 0.5 end + self.ControllerTimer = CurTime()-1 +end +function TRAIN_SYSTEM:Think() + if self.ControllerTimer and CurTime() - self.ControllerTimer > 0.03 and self.Controller ~= self.TargetController then + local previousPosition = self.Controller + self.ControllerTimer = CurTime() + if self.TargetController > self.Controller then + self.Controller = self.Controller + 1 + else + self.Controller = self.Controller - 1 + end + self.Train:PlayOnce("KV_"..previousPosition.."_"..self.Controller, "cabin",0.5) + end + if self.Controller == self.TargetController then + self.ControllerTimer = nil + end +end diff --git a/lua/metrostroi/systems/sys_81_718_bkva.lua b/lua/metrostroi/systems/sys_81_718_bkva.lua new file mode 100644 index 0000000..689ff7c --- /dev/null +++ b/lua/metrostroi/systems/sys_81_718_bkva.lua @@ -0,0 +1,29 @@ +-------------------------------------------------------------------------------- +-- 81-718 additional switch equipment unit +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_718_BKVA") + +function TRAIN_SYSTEM:Initialize() + self.KM1 = 0 --Контактор Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñлектропечи + self.KM2 = 0 --Контактор Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÑлектрокомпреÑÑора + self.KM3 = 0 --Контактора Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ†ÐµÐ¿ÐµÐ¹ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð°Ð³Ð¾Ð½Ð¾Ð¼ + self.KM4 = 0 --Реле дверей + self.KM5 = 0 --Контактор Ð¿Ð¾Ð´Ð²Ð¾Ð·Ð±ÑƒÐ´Ð¸Ñ‚ÐµÐ»Ñ +end + +function TRAIN_SYSTEM:Inputs() + return { } +end + +function TRAIN_SYSTEM:Outputs() + return { } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + +function TRAIN_SYSTEM:Think() +end diff --git a/lua/metrostroi/systems/sys_81_718_bska.lua b/lua/metrostroi/systems/sys_81_718_bska.lua new file mode 100644 index 0000000..6dcf835 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_718_bska.lua @@ -0,0 +1,35 @@ +-------------------------------------------------------------------------------- +-- 81-718 HV switch equpment unit +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_718_BSKA") + +function TRAIN_SYSTEM:Initialize() + -- Линейный контактор К1 (КР) + self.Train:LoadSystem("K1","Relay","PK-162",{bass = true,close_time=0.1}) + -- Линейный контактор К2 (Ход) + self.Train:LoadSystem("K2","Relay","PK-162",{bass = true,close_time=0.1}) + -- Линейный контактор К3 (Тормоз) + self.Train:LoadSystem("K3","Relay","PK-162",{bass = true,close_time=0.1}) + + -- Контактор(Ñ‹) реверÑа "Вперёд" + self.Train:LoadSystem("KMR1","Relay","PK-162",{bass = true,close_time=0.1}) + -- Контактор(Ñ‹) реверÑа "Ðазад" + self.Train:LoadSystem("KMR2","Relay","PK-162",{bass = true,close_time=0.1}) +end + +function TRAIN_SYSTEM:Inputs() + return { } +end + +function TRAIN_SYSTEM:Outputs() + return { } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + +function TRAIN_SYSTEM:Think() +end diff --git a/lua/metrostroi/systems/sys_81_718_bup.lua b/lua/metrostroi/systems/sys_81_718_bup.lua new file mode 100644 index 0000000..483d346 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_718_bup.lua @@ -0,0 +1,236 @@ +-------------------------------------------------------------------------------- +-- 81-718 train control unit +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_718_BUP") + +function TRAIN_SYSTEM:Initialize() + self.Power = 0 + + + self.IV = 0 + self.IN = 0 + self.IX3 = 0 + self.IX2 = 0 + self.IX1 = 0 + self.I0 = 0 + self.IT1 = 0 + self.IT2 = 0 + self.IT3 = 0 + + self.IBX3 = 0 + self.IBX2 = 0 + self.IBX1 = 0 + self.IB0 = 0 + self.IBT1 = 0 + self.IBT2 = 0 + self.IBT3 = 0 + + self.IX = 0 + self.IT = 0 + + self.IKDV = 0 + self.INKDV = 0 + self.IBKDV = 0 + self.IBBUP = 0 + self.IPB = 0 + self.IARS = 0 + self.IAVT = 0 + self.IPVU = 0 + self.IRPB = 0 + self.IV = 0 + self.IN = 0 + self.IROT = 0 + self.ISOT = 0 + + self.BBUP = 0 + self.V0 = 0 + self.EKV = 0 + self.EBAV = 0 + self.EKR = 0 + self.EARS = 0 + + self.OX = 0 + self.OXp = 0 + self.OT = 0 + self.OU1 = 0 + self.OU2 = 0 + self.OV = 0 + self.ON = 0 + self.O0 = 0 + self.OZPT = 0 + + self.OBBAV = 0 + self.OBBUP = 0 + + self.BlockX = 1 +end + +function TRAIN_SYSTEM:Inputs() + return { } +end + +local outputs = { + "Power", + "IPB","IV","IN", + "IX3","IX2","IX1","I0","IT1","IT2","IT3", + "IBX3","IBX2","IBX1","IB0","IBT1","IBT2","IBT3", + "IX","IT","IKDV","INKDV","IBKDV","IPB","IARS", + "IAVT","IPVU","IRPB","IROT","ISOT", + "BBUP","V0","EKV","EBAV","EKR","EARS", + "OX","OT","OU1","OU2","OV","ON","O0","OZPT","OBBAV","OBBUP", + } + +function TRAIN_SYSTEM:Outputs() + return outputs +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + +function TRAIN_SYSTEM:Think() + self.CurTime = self.CurTime or CurTime() + if CurTime()-self.CurTime < 0.05 then return end + self.DeltaTime = CurTime()-self.CurTime + self.CurTime = CurTime() + local Train = self.Train + local BKBD = Train.BKBD + local BKCU = Train.BKCU + + if self.Power > 0 then + --Обработка Ñигналов контроллера + self.IX3 = Train.BKCU.Controller == 3 and 1 or 0 + self.IX2 = Train.BKCU.Controller == 2 and 1 or 0 + self.IX1 = Train.BKCU.Controller == 1 and 1 or 0 + self.I0 = Train.BKCU.Controller == 0 and 1 or 0 + self.IB0 = 1 + self.IT1 = Train.BKCU.Controller == -1 and 1 or 0 + self.IT2 = Train.BKCU.Controller == -2 and 1 or 0 + self.IT3 = Train.BKCU.Controller == -3 and 1 or 0 + + self.BBUP = math.min(1,self.IBBUP*(1-self.OBBUP)+self.BBUP+self.LastBlock) + if self.BBUP == 0 then + self.EKV = (self.IX3+self.IX2+self.IX1+self.I0+self.IT1+self.IT2+self.IT3)>1 and 1 or 0 + self.EKR = (self.IV+self.IN) > 1 and 1 or 0 + self.EARS = (self.IX+self.IT) > 1 and 1 or 0 + + if self.EKV > 0 or self.EKR>0 then + self.OX = 0 + self.OT = 0 + else + local CanDrive = (self.IKDV+self.IBKDV)--*self.IPB + if Train.BKCU.Controller > 0 then + self.OX = (1-self.EARS)*(1-self.EKV)*CanDrive*(1-self.BlockX)*self.IX*(1-self.IT)*(1-self.IAVT) --501Г + self.BlockX = self.BlockX+(1-CanDrive) + else + self.OX = 0 + self.BlockX = 0 + end + self.OT = Train.BKCU.Controller < 0 and 1 or 0 --502 + end + if self.EKR > 0 then + self.OV = 0 + self.ON = 0 + else + self.OV = self.IV--505 + self.ON = self.IN--506 + end + self.O0 = (1-self.OX)*(1-self.OT) --545 + if self.OX > 0 or self.OT > 0 then + self.OU1 = math.abs(Train.BKCU.Controller) > 1 and 1 or 0 --503 + self.OU2 = math.abs(Train.BKCU.Controller) > 2 and 1 or 0 --504 + else + self.OU1 = 0 + self.OU2 = 0 + end + if self.IT>0 or self.IAVT>0 or self.OT > 0 and self.V0 == 0 then + if not self.BrakeTimer then self.BrakeTimer = CurTime() end + elseif self.BrakeTimer then + self.BrakeTimer = false + end + if self.IT>0 then + self.OT = 1 + self.OU1=1 + self.OU2=1 + end + self.OZPT = self.BrakeTimer and CurTime()-self.BrakeTimer > 2.2 and math.min(1,self.OU2+self.IT) or 0 + + self.OBBAV = self.OX+self.OT + self.EBAV = (self.IBX3+self.IBX2+self.IBX1+self.IB0+self.IBT1+self.IBT2+self.IBT3)>1 and 1 or 0 + self.OBBUP = 1 + else + self.EKV = 0 + self.EKR = 0 + self.EARS = 0 + + self.OX = 0 + self.OT = 0 + self.OU1 = 0 + self.OU2 = 0 + self.OV = 0 + self.ON = 0 + self.O0 = 0 + self.OZPT = 0 + + self.OBBAV = 0 + self.EBAV = 0 + self.OBBUP = 1 + end + else + self.BlockX = 1 + + --self.IV = 0 + --self.IN = 0 + self.IX3 = 0 + self.IX2 = 0 + self.IX1 = 0 + self.I0 = 0 + self.IT1 = 0 + self.IT2 = 0 + self.IT3 = 0 + + self.IBX3 = 0 + self.IBX2 = 0 + self.IBX1 = 0 + self.IB0 = 0 + self.IBT1 = 0 + self.IBT2 = 0 + self.IBT3 = 0 + --self.IX = 0 + --self.IT = 0 + + --self.IKDV = 0 + --self.IBKDV = 0 + --self.IPB = 0 + self.IARS = 0 + --self.IAVT = 0 + self.IPVU = 0 + self.IRPB = 0 + self.IROT = 0 + self.ISOT = 0 + + + self.BBUP = 0 + self.LastBlock = self.IBBUP + --self.V0 = 0 + self.EKV = 0 + self.EBAV = 0 + self.EKR = 0 + self.EARS = 0 + + self.OX = 0 + self.OXp = 0 + self.OT = 0 + self.OU1 = 0 + self.OU2 = 0 + self.OV = 0 + self.ON = 0 + self.O0 = 0 + self.OZPT = 0 + + self.OBBAV = 0 + self.OBBUP = 0 + end +end diff --git a/lua/metrostroi/systems/sys_81_718_buv.lua b/lua/metrostroi/systems/sys_81_718_buv.lua new file mode 100644 index 0000000..1f6876e --- /dev/null +++ b/lua/metrostroi/systems/sys_81_718_buv.lua @@ -0,0 +1,289 @@ +-------------------------------------------------------------------------------- +-- 81-718 wagon control unit +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_718_BUV") + +function TRAIN_SYSTEM:Initialize() + self.Power = 0 + --Ð˜Ð½Ð´Ð¸ÐºÐ°Ñ†Ð¸Ñ + --Входные Ñигналы + self.IVP=0;self.INZ=0;self.IVR=0;self.INR=0 + self.IX=0;self.IT=0;self.IU1=0;self.IU2=0;self.IM=0;self.IXP=0;self.IU1R=0 + self.ITARS=0;self.ITEM=0;self.IAVR=0 + self.IPROV=0;self.IPROV0=0;self.IVZ=0 + self.ITP1=0; self.ITP2=0; self.ITP3=0; self.ITP4=0;self.IKX=0;self.IKT=0;self.ILT=0;self.IRV=0;self.IRN=0;self.IBV=0 + --МÐЛП 1,2 + self.FM=0;self.U400=0;self.E1350=0;self.DIF=0;self.E13650=0;self.E130=0 + --self.ARS=0;self.ITA=0;self.Tr=0;self.VN=0 + self.SN=0 + + self.U800=0;self.U975= 0;self.E2450=0;self.E24650=0;self.E240=0 + self.BV=0 + --self.ITV=0 + self.MSU=0;self.MZK=0 + + self.FreqBlock = 0 + --Выходные Ñигналы + self.OVP=0;self.ONZ=0;self.OLK=0;self.OKX=0;self.OKT=0;self.OPV=0;self.OSN=0;self.ORP=0 + self.OIZ=0 + self.OV1=0;self.ORKT=0;self.ORMT=0 + self.O75V=0 + --МИВ + self.ZZ=0;self.V1=0;self.SMA=0;self.SMB=0; + --МВД + self.OTK=0;self.RP=0;self.PROV=0 + --МЛУР+ self.SS = 0 + + self.ISet = 0 + self.PTTIState = 0 +end + +function TRAIN_SYSTEM:Inputs() + return { } +end + +local outputs = {"OTK","RP","FM","U400","E1350","DIF","E13650","E130","SN","U800","U975","E2450","E24650","E240","BV","MSU","MZK","ZZ","V1","SMA","SMB","IVP","INZ","IVR","INR","IX","IT","IU1","IU2","IM","IXP","IU1R","ITARS","ITEM","IAVR","IPROV","IPROV0","IVZ","ITP1","ITP2","ITP3","ITP4","IKX","IKT","ILT","IRV","IRN","IBV","OVP","ONZ","OLK","OKX","OKT","OPV","OSN","OIZ","ORP","OV1","ORKT","ORMT","O75V","SS" +} +function TRAIN_SYSTEM:Outputs() + return outputs +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + +function TRAIN_SYSTEM:Think() + self.CurTime = self.CurTime or CurTime() + if CurTime()-self.CurTime < 0.05 then return end + self.DeltaTime = CurTime()-self.CurTime + self.CurTime = CurTime() + + local Train = self.Train + if self.Power > 0 then + local I = math.abs(Train.Electric.I13 + Train.Electric.I24)/2 + --Управление + local ARSBrake = self.ITARS > 0 + local Brake = self.IT > 0 or ARSBrake + local Drive = (self.IX > 0 or self.IM > 0) and not ARSBrake and not Brake + local DriveEmer = self.IXP*(1-self.ITARS) > 0 and not ARSBrake + local Combination = (Brake and 1 or 0)+(DriveEmer and 1 or 0)+(Drive and 1 or 0) + local schemeCommands = Combination > 0 + + local I13,I24 = math.abs(Train.Electric.I13),math.abs(Train.Electric.I24) + local UHVp = Train.Electric.Power750V + local UHV = Train.Electric.Main750V + --self.MZK = 0 + if UHV > 1000 then self.FM = 1 end + self.U400 = UHVp >= 400 and 1 or 0 + self.E1350 = I13 >= 40 and 1 or 0 + --Дифф защита не подключена + --if math.abs(I13-I24) > 100 then self.DIF = 1 end + if I13>650 then self.E13650 = 1 end + if self.IPROV > 0 then self.E130 = 1-self.E1350 end + --self.ARS = 0 + --self.ITA = 0 + --self.Tr = 0 + self.SN = 1-(self.IKX*self.ILT+self.IKT)*(self.IRV+self.IRN) + --self.VN = 0 + + --self.MSU = 0 + self.U800 = 650 < UHV and UHV < 975 and 1 or 0 + self.U975= UHV > 975 and 1 or 0 + self.E2450 = I24 >= 40 and 1 or 0 + if I24>650 then self.E24650 = 1 end + if self.IPROV > 0 then self.E240 = 1-self.E2450 end + self.BV = 1-Train.QF1.Value + --self.ITV = 0 + + --МВД + self.OTK = (Train.PTTI.State == 0) and 1 or 1-self.E1350*self.E2450 + self.RP = self.FM+self.E13650+self.E130+self.E24650+self.E240+self.BV + if schemeCommands and self.IPROV0 > 0 and (--[[ self.RP > 0 or --]] Train.PTTI.State == 0) then self.PROV = 1 end + + local disableScheme = self.RP+self.PROV+((ARSBrake and Train.PTTI.State > 0) and 1 or 0)+((Combination ~= 1 and Train.PTTI.State == 0) and 1 or 0)+self.IAVR + self.MSU = disableScheme+((Drive or DriveEmer) and 1-self.U400 or 0) + self.MZK = self.MSU + + if self.IVZ > 0 then + self.PROV = 0 + self.FM = 0 + self.E13650 = 0 + self.E130 = 0 + self.E24650 = 0 + self.E240 = 0 + self.O75V = 0 + end + if self.RP > 0 then self.O75V = 1 end + --Управление ЛК и ПТТИ + if disableScheme>0 or Train.PTTI.Zero then + if (self.IKX+self.IKT) > 0 and not self.OffTimer then self.OffTimer = CurTime() end + if self.OffTimer and (self.IKX+self.IKT) == 0 and CurTime()-self.OffTimer > 0.3 then self.OffTimer = false end + self.OVP = self.OffTimer and 1 or 0 + self.ONZ = self.OffTimer and 1 or 0 + self.OLK = 0 + self.OKX = 0 + self.OKT = 0 + self.Shunt = false + elseif Drive and Train.PTTI.State >= 0 then + self.OVP = self.IVP*(1-self.INZ)*(self.IX+self.IM) + self.ONZ = self.INZ*(1-self.IVP)*(self.IX+self.IM) + --self.OLK = self.OVP+self.ONZ--(self.IRV+self.IRN) + self.OLK = (self.IRV+self.IRN) + self.OKX = self.OLK--self.ILT + self.OKT = 0 + self.Shunt = self.IM > 0--(self.Shunt or self.IM > 0) and self.IU1+self.IU2 == 0 + elseif DriveEmer and Train.PTTI.State >= 0 then + self.OVP = self.IVR*(1-self.INR)*self.IXP + self.ONZ = self.INR*(1-self.IVR)*self.IXP + --self.OLK = self.OVP+self.ONZ--(self.IRV+self.IRN) + self.OLK = (self.IRV+self.IRN) + self.OKX = self.ILT + self.OKT = 0 + elseif Brake and Train.PTTI.State <= 0 then + self.OVP = self.IVP*(1-self.INZ) + self.ONZ = self.INZ*(1-self.IVP) + self.OLK = 0 + self.OKX = 0 + --self.OKT = self.OVP+self.ONZ--(self.IRV+self.IRN) + self.OKT = (self.IRV+self.IRN) + elseif Train.PTTI.State ~= 0 then + self.Shunt = false + end + --Управление ПТТИ + --if Train.PTTI.Zero then print(Train.PTTI.State,self.PTTIState,Train.PTTI.Zero) end + + local loadR = Train.Pneumatic.WeightLoadRatio*50 + if self.MZK > 0 then + self.ISet = 0 + self.PTTIState = 0 + elseif self.IKX > 0 and Drive then + self.PTTIState = 1 + self.BlockRV = self.IU2 == 0 + self.FreqBlock = self.Shunt and 1 or 0--(((self.ITP1+self.ITP2+self.ITP3+self.ITP4) > 0 and not self.Shunt) and 0 or 1) + self.ISet = ((self.ITP1+self.ITP2+self.ITP3+self.ITP4) > 0 and self.IM == 0) and 150+self.IU1*(90+loadR/2)+self.IU2*(90+loadR/2) or 150 + elseif self.IKX > 0 and DriveEmer then + self.PTTIState = 1 + self.FreqBlock = 0 + self.ISet = 150+self.IU1R*280 + elseif self.IKT > 0 and Brake then + self.PTTIState = -1 + if ARSBrake then + self.ISet = -300 + else + self.ISet = -(150+loadR+self.IU1*(75+loadR)+self.IU2*(75-loadR)) + end + elseif Train.PTTI.Zero then + self.ISet = 0 + self.PTTIState = 0 + elseif Train.PTTI.State == 1 and not Drive and not DriveEmer or Train.PTTI.State == -1 and not Brake then + self.ISet = 0 + end + + --МЛУР+ self.SS = (self.IRV+self.IRN)*(Train.PTTI.State==1 and self.IKX or Train.PTTI.State==-1 and self.IKT or 0) + --МИВ + self.ZZ = math.floor(Train.PTTI.FreqState) + self.V1 = (math.floor(Train.PTTI.RNState+0.03)+self.MSU)*self.OKT*self.IU1 + self.SMA = (Train.PTTI.State==-1 and Train.PTTI.RNState<=0.04 or Train.PTTI.State==1 and Train.PTTI.RNState>=0.96) and 1 or 0 + --self.SMA = (self.ISet ~= 0 and I13-20 < self.ISet and self.ISet < I13+20) and 1 or 0 + self.SMB = self.SMA--Train.PTTI.State==-1 and Train.PTTI.RNState<=0.04 or Train.PTTI.State==1 and Train.PTTI.RNState>=0.96 + --self.SMB = (self.ISet ~= 0 and I24-20 < self.ISet and self.ISet < I24+20) and 1 or 0 + --Входные Ñигналы + --self.IVP = 0 --505 + --self.INZ = 0 --506 + --self.IVR = 0 --557 + --self.INR = 0 --558 + + --self.IX = 0 --501 + --self.IT = 0 --502 + --self.IU1 = 0 --503 + --self.IU2 = 0 --504 + --self.IM = 0 --513 + --self.IXP = 0 --555 + --self.IU1R = 0 --556 + + --self.ITARS = 0 --507 + --self.ITEM = 0 --514 + --self.IAVR = 0 --737 + + + --self.IPROV = 0 --527 + --self.IPROV0 = 0 --547 + --self.IVZ = 0 --526 + + self.ITP1 = Train.TR.ContactState1 + self.ITP2 = Train.TR.ContactState2 + self.ITP3 = Train.TR.ContactState4 + self.ITP4 = Train.TR.ContactState3 + --self.IKX = 0 --738-739 + --self.IKT = 0 --740-741 + --self.ILT = 0 --742 + --self.IRV = 0 --743 + --self.IRN = 0 --744 + self.IBV = Train.QF1.Value --802 провод + + + --Выходные Ñигналы + --self.OLK = 0 -- 790 + --self.OKX = 0 -- 791 + --self.OKT = 0 -- 792 + --self.OPV = 0 -- 797 + self.OSN = schemeCommands and self.SN or 0 + self.OIZ = schemeCommands and self.OTK or 0 + --Train.BVA.DiableScheme = self.IPROV*self.OIZ + self.IPROV0*self.OSN + self.ORP = (1-Train.QF1.Value)+self.E130+self.E240+self.PROV -- 528,725 + if ARSBrake then + self.OV1 = Train.PTTI.RNState > 0.97 and 1 or 0 + self.ORKT = (I > -self.ISet*0.8) and 1 or 0 + self.ORMT = I>50 and 1 or 0 + elseif Brake then + self.OV1 = Train.PTTI.RNState > 0.97 and self.IU1+self.IU2 or 0 + self.ORKT = (I > -self.ISet*0.8) and self.IU2 or 0 + self.ORMT = I>50 and 1 or 0 + else + self.OV1 = 0 --795 + self.ORKT = 0 --804 + self.ORMT = 0 --805 + end + else + self.ISet = 0 + self.PTTIState = 0 + --Входные Ñигналы + --self.IVP=0;self.INZ=0;self.IVR=0;self.INR=0 + + --self.IX=0;self.IT=0;self.IU1=0;self.IU2=0;self.IM=0;self.IXP=0;self.IU1R=0 + + --self.ITARS=0;self.ITEM=0;self.IAVR=0 + + --self.IPROV=0;self.IPROV0=0;self.IVZ=0 + + self.ITP1=0; self.ITP2=0; self.ITP3=0; self.ITP4=0; + --self.IKX=0;self.IKT=0;self.ILT=0;self.IRV=0;self.IRN=0; + self.IBV=0 + + --МÐЛП 1,2 + self.FM=0;self.U400=0;self.E1350=0;self.DIF=0;self.E13650=0;self.E130=0 + --self.ARS=0;self.ITA=0;self.Tr=0;self.VN=0 + self.SN=0 + + self.U800=0;self.U975= 0;self.E2450=0;self.E24650=0;self.E240=0 + self.BV=0 + --self.ITV=0 + self.MSU=0;self.MZK=0 + --Выходные Ñигналы + self.OVP=0;self.ONZ=0;self.OLK=0;self.OKX=0;self.OKT=0;self.OPV=0;self.OSN=0;self.ORP=0 + + self.OIZ=0 + self.OV1=0;self.ORKT=0;self.ORMT=0 + self.O75V=0 + --МИВ + self.ZZ=0;self.V1=0;self.SMA=0;self.SMB=0; + --МВД + self.OTK=0;self.RP=0;self.PROV=0 + --МЛУР+ self.SS = 0 + end +end diff --git a/lua/metrostroi/systems/sys_81_718_buvs.lua b/lua/metrostroi/systems/sys_81_718_buvs.lua new file mode 100644 index 0000000..22ef05b --- /dev/null +++ b/lua/metrostroi/systems/sys_81_718_buvs.lua @@ -0,0 +1,40 @@ +-------------------------------------------------------------------------------- +-- 81-717 ventilation switching unit +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_718_BUVS") + +function TRAIN_SYSTEM:Initialize() + self.KM1 = 0 --Контактор вентилÑции агрегатов 1 группы + self.KM2 = 0 --Контактор вентилÑции агрегатов 2 группы + self.KM3 = 0 --Реле Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ тока + self.KM4 = 0 --Реле ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ñ Ñ‚Ð¾Ñ€Ð¼Ð¾Ð·Ð½Ð¾Ð³Ð¾ тока + + self.KV1 = 0 + self.KV2 = 0 +end + +function TRAIN_SYSTEM:Inputs() + return { } +end + +function TRAIN_SYSTEM:Outputs() + return { "KV1","KV2" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + +function TRAIN_SYSTEM:Think() + local Train = self.Train + self.RKTTCurrent = math.abs(Train.Electric.I13) + math.abs(Train.Electric.I24) + self.RKTTClose = 275 + 100*self.Train.Pneumatic.WeightLoadRatio --125 + self.RKTTOpen = 370 + 130*self.Train.Pneumatic.WeightLoadRatio --130 + if self.RKTTCurrent < self.RKTTClose then + self.KM4 = 0 + else + self.KM4 = self.RKTTCurrent >= self.RKTTOpen + end +end diff --git a/lua/metrostroi/systems/sys_81_718_bva.lua b/lua/metrostroi/systems/sys_81_718_bva.lua new file mode 100644 index 0000000..a74776b --- /dev/null +++ b/lua/metrostroi/systems/sys_81_718_bva.lua @@ -0,0 +1,47 @@ +-------------------------------------------------------------------------------- +-- Automatic switches unit +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_718_BVA") + +function TRAIN_SYSTEM:Initialize() + self.Power = 0 + self.Train:LoadSystem("QF1","Relay","BV",{bass=true}) + self.DiableScheme = 0 + self.BVGood = 0 + self.Disable = 0 +end + +function TRAIN_SYSTEM:Inputs() + return { "Enable" } +end + +function TRAIN_SYSTEM:Outputs() + return { } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Enable" then + self.Power = 1 + self.Reset = 1 + self.Train.QF1:TriggerInput("Close",1) + end +end + +function TRAIN_SYSTEM:Think() + local Train = self.Train + local Electric = Train.Electric + self.BVGood = Train.QF1.Value --802 провод + if self.Disable == 0 and self.DiableScheme and self.Reset > 0 and Train.QF1.Value == 0 then + Train.QF1:TriggerInput("Close",1) + end + if ((self.Disable+self.DiableScheme) > 0 or self.Power == 0) and Train.QF1.Value > 0 then + Train.QF1:TriggerInput("Open",1) + end + local I13,I24 = math.abs(Electric.I13),math.abs(Electric.I24) + if I13 > 800 or I24 > 800 or I13+I24>1500 then + Train.QF1:TriggerInput("Open",1) + end +end diff --git a/lua/metrostroi/systems/sys_81_718_bzos.lua b/lua/metrostroi/systems/sys_81_718_bzos.lua new file mode 100644 index 0000000..0677f06 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_718_bzos.lua @@ -0,0 +1,33 @@ +-------------------------------------------------------------------------------- +-- Security alarm unit +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_718_BZOS") + +function TRAIN_SYSTEM:Initialize() + self.Power = 0 + self.VH1 = 0 + self.Ring = 0 + self.Ready = 0 + self.VH2 = 0 +end + +function TRAIN_SYSTEM:Inputs() + return { } +end + +function TRAIN_SYSTEM:Outputs() + return { "Ring","VH1","VH2" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + +function TRAIN_SYSTEM:Think() + local Train = self.Train + self.VH1 = self.Power*Train.SAB1.Value + self.Ready = self.VH1*(self.Ready*(1-Train.SQ3.Value)+Train.SQ3.Value) + self.VH2 = self.Ready*math.min(1,(self.Ring==1 and 0 or 1)*self.VH2+(1-Train.SQ3.Value)) +end diff --git a/lua/metrostroi/systems/sys_81_718_electric.lua b/lua/metrostroi/systems/sys_81_718_electric.lua new file mode 100644 index 0000000..74b238e --- /dev/null +++ b/lua/metrostroi/systems/sys_81_718_electric.lua @@ -0,0 +1,882 @@ +-------------------------------------------------------------------------------- +-- 81-718 electric schemes +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_718_Electric") +TRAIN_SYSTEM.DontAccelerateSimulation = false + + + +function TRAIN_SYSTEM:Initialize() + -- General power output + self.Main750V = 0.0 + self.Aux750V = 0.0 + self.Power750V = 0.0 + self.Aux80V = 0.0 + self.Lights80V = 0.0 + self.Battery80V = 0.0 + + -- Resistances + self.R1 = 1e9 + self.R2 = 1e9 + self.Rs1 = 1e9 + self.Rs2 = 1e9 + + self.Rstator13 = 1e9 + self.Rstator24 = 1e9 + self.Ranchor13 = 1e9 + self.Ranchor24 = 1e9 + + -- Electric network info + self.Itotal = 0.0 + self.I13 = 0.0 + self.I24 = 0.0 + self.Ustator13 = 0.0 + self.Ustator24 = 0.0 + self.Ishunt13 = 0.0 + self.Istator13 = 0.0 + self.Ishunt24 = 0.0 + self.Istator24 = 0.0 + self.Utotal = 0.0 + -- Calculate current through rheostats 1, 2 + self.IR1 = self.Itotal + self.IR2 = self.Itotal + self.IRT2 = self.Itotal + self.T1 = 25 + self.T2 = 25 + self.P1 = 0 + self.P2 = 0 + self.Overheat1 = 0 + self.Overheat2 = 0 + + -- Total energy used by train + self.ElectricEnergyUsed = 0 -- joules + self.ElectricEnergyDissipated = 0 -- joules + self.EnergyChange = 0 + + --Train wire outside power + -- Need many iterations for engine simulation to converge + self.SubIterations = 16 + + self.Train:LoadSystem("KK","Relay","KPP-110",{ bass = true }) + self.Train:LoadSystem("BV","Relay") + self.Train:LoadSystem("GV","Relay","GV_10ZH",{bass=true}) + + + --РегулÑтор Ð´Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + self.Train:LoadSystem("RD","Relay","AK-11B") + --self.Train:LoadSystem("Telemetry",nil,"",{"Electric","Panel","Engines"}) +end + + +function TRAIN_SYSTEM:Inputs() + return { } +end + +function TRAIN_SYSTEM:Outputs() + return { "I13","I24","Itotal", + "Main750V", "Power750V", + } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + + + +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:Think(dT,iter) + local Train = self.Train + -- local dT = dT/8 + ---------------------------------------------------------------------------- + -- Voltages from the third rail + ---------------------------------------------------------------------------- + self.Main750V = Train.TR.Main750V + self.Aux750V = Train.TR.Main750V + self.Power750V = self.Main750V*Train.GV.Value + + + ---------------------------------------------------------------------------- + -- Information only + ---------------------------------------------------------------------------- + self.Aux80V = BBE and 82 or 65 + self.Lights80V = BBE and 82 or 0 + self.Battery80V = 65--(Train.VB.Value > 0) and (BBE and 82 or 65) or 0 + + ---------------------------------------------------------------------------- + -- Some internal electric + ---------------------------------------------------------------------------- + local P = self.Battery80V > 62 and 1 or 0 + local HV = 550 < self.Main750V and self.Main750V < 975 and 1 or 0 + + + ---------------------------------------------------------------------------- + -- Solve circuits + ---------------------------------------------------------------------------- + self:SolvePowerCircuits(Train,dT) + if iter == 1 then + self:SolveControlCircuits(Train,dT) + end + + + ---------------------------------------------------------------------------- + -- Calculate current flow out of the battery + ---------------------------------------------------------------------------- + --local totalCurrent = 5*A30 + 63*A24 + 16*A44 + 5*A39 + 10*A80 + --local totalCurrent = 20 + 60*DIP +end + +local S = {} +local wires = {1,2,3,4,5,6,7,8,9,10,11,-11,12,13,14,15,16,17,18,19,20,22,23,24,26,27,28,29,30,31,32,33,34,35,36,37,38,40,41,42,44,45,47,48,49,50,51,-51,54,55,56,57,58,59,67,74,83,84,87,88,89,90,-34,} +local min = math.min +local max = math.max + +local function clamp(val) + return max(-1,min(1,val)) +end +function TRAIN_SYSTEM:SolveControlCircuits(Train,dT) + local B = (Train.Battery.Voltage > 62) and 1 or 0 + local T = Train.SolverTemporaryVariables + if not T then + T = {} + for i,v in ipairs(wires) do T[v] = 0 end + Train.SolverTemporaryVariables = T + end + for i,v in ipairs(wires) do T[v] = min(Train:ReadTrainWire(v),1) end + local BUP = Train.BUP + local BUV = Train.BUV + + local BKCU = Train.BKCU + local BKVA = Train.BKVA + local BUVS = Train.BUVS + local BBE = Train.BBE + local BKBD = Train.BKBD + local RC = Train.RC.Value + + local Panel = Train.Panel + + S[303] = B*Train.VB.Value + S[305] = clamp(B+T[50]*Train.SF2.Value)*Train.VB.Value + --S[305] = S[303] + S[315] = S[305]*Train.SF5.Value + --S[310] = B*Train.VB.Value + S[550] = S[305]*Train.SF2.Value --310 + Train:WriteTrainWire(50,S[550]) + S[316] = clamp(S[315]+T[50]) --+ДИОД + --S[311] = B*Train.VB.Value + S[334] = S[305]*Train.SF45.Value --311 + S[312] = S[305]*Train.SF3.Value --311 + BBE.KMPower = S[334] + BBE.Power = S[305] + Panel.V1 = S[312] + + --1.2. Цепи зарÑда аккумулÑторной батареи. Включение ББЭ. Страница 7 + S[318] = S[316]*Train.SF7.Value + S[518] = S[318]*Train.SB15.Value + Train:WriteTrainWire(18,S[518]) + --S[324] = T[18]*Train.SF12.Value + BBE.Activate = T[18]*Train.SF12.Value--S[324] --Включение ББЭ + + --1.4. Отключение ББЭ. Страница 8 + --S[519] = S[318]*Train.SB16.Value + Train:WriteTrainWire(19,S[318]*Train.SB16.Value) + --S[333] = T[19]*Train.SF13.Value + + --1.5. Ðварийное отключение ББЭ и Ñигнализации Страница 9 + Train:WriteTrainWire(20,BBE.Error) + Panel.HL7 = S[318]*T[20] + BBE.Deactivate = T[19]*Train.SF13.Value --Включение ББЭ + + --2.1. ОÑвещение вагонов оÑновное. Страница 9 + --S[544] = S[318]*Train.SAP8.Value + Train:WriteTrainWire(44,S[318]*Train.SAP8.Value) + --S[538] = (1-Train.SAP8.Value)*T[44] + Train:WriteTrainWire(38,(1-Train.SAP8.Value)*T[44]) + --S[340] = T[38]*Train.SF16.Value + BBE.KM2Power = T[38]*Train.SF16.Value + + --S[408] = S[305]*BBE.KM2 + --S[409] = S[408]*Train.SF44.Value --END + --305-BKM2-408-SF44-409 + Panel.EL7_30 = S[305]*BBE.KM2*Train.SF44.Value--S[409] + + --2.2. Ðварийное оÑвещение Ñалонов и кабины. Страница 10 + --S[407] = S[312]*Train.SF44.Value + Panel.EL3_6 = S[312]*Train.SF44.Value + S[322] = T[50]*Train.SF11.Value + Panel.EL1 = S[322] + S[321] = T[50]*Train.SF10.Value + --S[385] = S[321]*Train.SAP13.Value + Panel.EL2 = S[321]*Train.SAP13.Value--S[385] + --2.3. ОÑвещение аппаратных отÑеков. Страница 10 + --S[384] = S[322]*Train.SAP12.Value + Panel.EL31 = S[322]*Train.SAP12.Value--S[384] + --2.4. ПодÑветка прибора. Страница 10 + S[328] = T[50]*Train.SF72.Value + --S[131] = S[328]*Train["SA4/1"].Value + Panel.HL52 = S[328]*Train["SA4/1"].Value--S[131] + Panel.VD1 = Train["SA5/1"].Value--S[131] + Panel.RouteNumber = S[312] + + --3.1 ОÑновное управление ЭК. Страница 11 + --S[531] = S[318]*(1-Train.SA16.Value) + Train:WriteTrainWire(31,S[318]*(1-Train.SA16.Value)) --S[531] + --S[410] = Train.SA16.Value*T[31] + Train.SF56.Value*T[55] --3.3. ОÑобенноÑти ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð­Ðš в неполном ÑоÑтаве. Страница 12 + --S[529] = S[410]*Train.SP1.Value + --410-...-529 + Train:WriteTrainWire(29,clamp(Train.SA16.Value*T[31] + Train.SF56.Value*T[50])*Train.SP1.Value) --S[529] + + + --3.2. Резервное управление ЭК. Страница 10 + S[320] = S[316]*Train.SF9.Value + --S[530] = S[320]*Train.SB14.Value + Train:WriteTrainWire(30,S[320]*Train.SB14.Value)--S[530] + --S[348] = T[30]*Train.SF22.Value + + --S[347] = T[29] + --BKVA.KM2 = (S[347]+S[348])--[[*тепловое реле]] + BKVA.KM2 = clamp(T[29]+T[30]*Train.SF22.Value)--[[*тепловое реле]] + + --S[206] = self.Main750V > 200 and 1 or 0 + --S[208] = S[206]*BKVA.KM2 + --Train.KK:TriggerInput("Set",S[208]) + Train.KK:TriggerInput("Set",(self.Main750V > 200 and 1 or 0)*BKVA.KM2)--S[208] + + --4.1. Обогрев кабины. Страница 13 + --S[383] = S[321]*Train.SAP11.Value + BKVA.KM1 = S[321]*Train.SAP11.Value--S[383] + + --5.1. ВентилÑÑ†Ð¸Ñ Ñалонов. Страница 13 + --[[ S[540] = S[321]*Train.SAP9.Value --Включение + Train:WriteTrainWire(40,S[540]) + S[375] = T[40]*Train.SF23.Value + BUVS.KM1 = S[375] + S[307] = S[312]*Train.SF34.Value --Контроль + S[379] = S[307]*BUVS.KM1 + BUVS.KV1 = S[379] + S[542] = 1-BUVS.KV1 --Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ + Train:WriteTrainWire(42,S[542]) + Panel.VS1 = T[42]*S[321] + + S[541] = S[322]*Train.SAP10.Value --Включение + Train:WriteTrainWire(41,S[541]) + S[377] = T[41]*Train.SF23.Value + BUVS.KM2 = S[377] + S[381] = S[307]*BUVS.KM2 --Контроль + BUVS.KV2 = S[381] + S[549] = 1-BUVS.KV2 --Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ + Train:WriteTrainWire(49,S[549]) + Panel.VS2 = T[49]*S[322]--]] + S[307] = S[312]*Train.SF34.Value + + Train:WriteTrainWire(40,S[321]*Train.SAP9.Value)--Включение + BUVS.KM1 = T[40]*Train.SF23.Value + BUVS.KV1 = S[307]*BUVS.KM1 --Контроль + Train:WriteTrainWire(42,1-BUVS.KV1)--Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ + Panel.VS1 = T[42]*S[321] + + Train:WriteTrainWire(41,S[322]*Train.SAP10.Value) --Включение + BUVS.KM2 = T[41]*Train.SF23.Value + BUVS.KV2 = S[307]*BUVS.KM2 --Контроль + Train:WriteTrainWire(49,1-BUVS.KV2) --Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ + Panel.VS2 = T[49]*S[322] + + -- 5.2. Питание Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»Ñ Ð²ÐµÐ½Ñ‚Ð¸Ð»Ñтора кабины. Страница 13 + Panel.M1 = S[312]*Train.SF65.Value*Train.PVK.Value + + + --6.1. Ð—Ð²ÑƒÐºÐ¾Ð²Ð°Ñ ÑигнализациÑ. Страница 14 + --S[613] = B*(1-Train.VB.Value) + --S[675] = S[613]*Train.SF55.Value + --S[548] = S[318]*Train.SB5.Value + S[675]*Train.SP7.Value + Train:WriteTrainWire(48,min(1,S[318]*Train.SB5.Value + B*(1-Train.VB.Value)*Train.SF55.Value*Train.SP7.Value+BKBD.Ring+Train.BZOS.VH2*0.4)) + Train.BZOS.Ring = min(1,S[318]*Train.SB5.Value+T[48]) + + --6.3. ÐŸÐ¾Ð¶Ð°Ñ€Ð½Ð°Ñ ÑигнализациÑ. Страница 15 --TODO + S[326] = T[50]*Train.SF76.Value + --6.2. ÐžÑ…Ñ€Ð°Ð½Ð½Ð°Ñ ÑигнализациÑ. Страница 14 + Train.BZOS.Power = S[326] + + --7.2. Цепи "нулевого" Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÐšÐ  и КРУ. Цепи габаритных фонарей. Страница 16 + S[317] = S[316]*Train.SF6.Value + BKCU.KM3 = S[317]*Train.KRU["317-317A"]*Train.KR["317A-387"]*(1-BKCU.KM1)*(1-BKCU.KM2) + S[320] = S[316]*Train.SF9.Value + BKCU.KM7 = S[320]*Train.KRU["320A-393"]*(1-BKCU.KM5)*(1-BKCU.KM6) + --S[366] = S[316]*Train.SF41.Value + --Panel.H11 = S[366]*(1-BKCU.KM2) + Panel.H11 = S[316]*Train.SF41.Value*(1-BKCU.KM2) + + --7.3. Цепи Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ "ВПЕРЕД" КР. Страница 17 + S[3178] = S[317]*Train.KRU["317-317A"]*(1-BKCU.KM8)*(1-BKCU.KM4) --FIXME + S[3174] = S[317]*Train.KRU["317-317A"]*(BKCU.KM1+BKCU.KM2) + BKCU.KM2 = S[3178]*Train.KR["317B-388"] + S[673] = S[316]*Train.SF51.Value + --673-679 - ГребнеÑмазыватель + --S[369] = S[316]*Train.SF8.Value*Train.KR["673-679"] + + --7.4. Цепи Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ "ÐÐЗÐД" КР. Страница 17 + BKCU.KM1 = S[3178]*Train.KR["317B-386"] + + --7.5. Цепи Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ "ВПЕРЕД" КРУ. Страница 17 + S[3208] = S[320]*Train.KR["320-320A"]*(1-BKCU.KM8)*(1-BKCU.KM4) --FIXME + BKCU.KM6 = S[3208]*Train.KRU["320B-392"] + --S[319] = S[316]*Train.SF8.Value + --S[369] = S[319]*(Train.KR["319-369"]+Train.KRU["319-369"]) + S[369] = S[316]*Train.SF8.Value*clamp(Train.KR["319-369"]+Train.KRU["319-369"]) + + S[680] = S[316]*Train.SF52.Value + --S[620] = S[680]*Train.KRU["680-680A"] + S[673]*Train.KR["673-673A"] + --BKBD.FMM1 = S[620]*Train.SF61.Value + --611 + BKBD.FMM1 = (S[680]*Train.KRU["680-680A"] + S[673]*Train.KR["673-673A"])*Train.SF61.Value + BKBD.GE = (BKBD.FMM1*Train.SA13.Value+T[87]*(1-Train.SA13.Value))*RC + + BKCU.KM5 = S[3208]*Train.KRU["320B-394"] + + --8.1. Открытие дверей. Страница 18 + --S[536] = S[369]*(Train.SB1.Value*(1-Train.SA7.Value)+Train.SA24.Value+Train.SBP4.Value) + --Train:WriteTrainWire(36,S[536]) + Train:WriteTrainWire(36,S[369]*(Train.SB1.Value*(1-Train.SA7.Value)+Train.SA24.Value+Train.SBP4.Value)) + Panel.HL3 = S[369]*(1-Train.SA7.Value) + --S[357] = T[36]*Train.SF18.Value+S[358] + + --8.1.4 Открытие правых дверей Страница 19 + --S[537] = S[369]*(Train.SB2.Value*Train.SA7.Value+Train.SBP6.Value) + --Train:WriteTrainWire(37,S[537]) + Train:WriteTrainWire(37,S[369]*(Train.SB2.Value*Train.SA7.Value+Train.SBP6.Value)) + Panel.HL4 = S[369]*Train.SA7.Value + --S[359] = T[37]*Train.SF20.Value+S[358] + + --8.2. Закрытие дверей. Страница 19 + --S[532] = S[369]*Train.SA5.Value*Train.SA6.Value + --Train:WriteTrainWire(32,S[532]) + Train:WriteTrainWire(32,S[369]*Train.SA5.Value*Train.SA6.Value) + + --352-353-354 + S[354] =(1-BKVA.KM4) + Train.U1:TriggerInput("Set", T[32]*Train.SF17.Value*S[354]) + + --8.2.2 + --[[ S[533] = S[369]*Train.SB3.Value + Train:WriteTrainWire(33,S[533])--]] + Train:WriteTrainWire(33,S[369]*Train.SB3.Value) + + S[358] = T[33]*Train.SF19.Value + --[[ S[357] = T[36]*Train.SF18.Value+S[358] + S[359] = T[37]*Train.SF20.Value+S[358] + Train.U2:TriggerInput("Set",S[357]) + Train.U3:TriggerInput("Set",S[359])--]] + Train.U2:TriggerInput("Set",T[36]*Train.SF18.Value+S[358]) + Train.U3:TriggerInput("Set",T[37]*Train.SF20.Value+S[358]) + + --8.3. Контроль Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹. Страницы 19-20 + --312-SA15..SA22-351 + BKVA.KM4 = S[312]*Train.SAD.Value--S[351] + + --312-KM2/1-534(-34)-Концевые каждого вагона(34)-Замкнутый КМ3 БКЦУ-36 провод + --[[ S[534] = S[312]*(BKCU.KM1+BKCU.KM2)+S[320]*(BKCU.KM5+BKCU.KM6)*(1-BKCU.KM7) + Train:WriteTrainWire(-34,S[534]) --Подача Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ñ Ð½Ð° 34 провод + Train:WriteTrainWire(34,T[-34]*Train.SAD.Value) --Разрыв Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ñ Ð¾Ð½Ñ†ÐµÐ²Ñ‹Ñ… переключателей + S[535] = T[34]*BKCU.KM3*BKCU.KM7 + Train:WriteTrainWire(35,S[535])--]] + Train:WriteTrainWire(-34,clamp(S[312]*(BKCU.KM1+BKCU.KM2)+S[320]*(BKCU.KM5+BKCU.KM6)*(1-BKCU.KM7))) --Подача Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ñ Ð½Ð° 34 провод + Train:WriteTrainWire(34,T[-34]*Train.SAD.Value) --Разрыв Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ñ Ð¾Ð½Ñ†ÐµÐ²Ñ‹Ñ… переключателей + Train:WriteTrainWire(35,T[34]*BKCU.KM3*BKCU.KM7) + + Panel.SD = T[35] + Panel.HL13 = S[312]*S[354] + + --9. БЛОКИРОВКРПОСТОВ УПРÐВЛЕÐИЯ И ФОРМИРОВÐÐИЕ ЦЕПЕЙ УПРÐВЛЕÐИЯ ДВИЖЕÐИЕМ СОСТÐÐ’Ð + --Страница 20-21 + --317Г + S[515] = S[317]*(BKCU.KM1+BKCU.KM2)-->V + Train:WriteTrainWire(15,S[515])-->V + BKCU.KM4 = T[15]*min(1,BKCU.KM3+BKCU.KM4) + --320Г + S[516] = S[320]*(BKCU.KM5+BKCU.KM6)-->V + Train:WriteTrainWire(16,S[516])-->V + BKCU.KM8 = T[16]*min(1,BKCU.KM7+BKCU.KM8) + BUP.Power = S[3174] + BUP.IKDV = max(0,BUP.Power*T[35]) + BUP.INKDV = BUP.Power*(1-BUP.IKDV) + + BUP.IBBUP = T[67] + + --9.4 + --[[ S[335] = T[15]*Train.SF14.Value + S[337] = T[16]*Train.SF5.Value + BKVA.KM3 = S[335]+S[337]--]] + BKVA.KM3 = T[15]*Train.SF14.Value+T[16]*Train.SF5.Value + + --S[517] = (1-BKVA.KM3) + Train:WriteTrainWire(17,(1-BKVA.KM3))--S[517] + Panel.CUV = T[15]*T[17]--Питание Ñ 15 провода и Ð·ÐµÐ¼Ð»Ñ Ñ 17 + + --10. ЦЕПИ БЕЛЫХ ФÐР И ЛÐМП СИГÐÐЛИЗÐЦИИ СТОЯÐОЧÐОГО ТОРМОЗР+ --Страница 322 + + + --316-SF41-365-KM2/6-390 + S[390] = S[316]*Train.SF41.Value*(BKCU.KM2+BKCU.KM6) + --390-SA1/1(SA2/1)-367(368)-R9(R10)-HL17-19(HL20-22) + S[512] = S[328]*Train.SQ1.Value + Train:WriteTrainWire(12,S[512]) + Panel.HL46 = S[512] + Panel.ST = T[12] + + Panel.HL17 = S[390]*Train["SA1/1"].Value + Panel.HL20 = S[390]*Train["SA2/1"].Value + --11. ЗÐЩИТРСИЛОВЫХ ЦЕПЕЙ. ЦЕПИ КОÐТРОЛЯ СОСТОЯÐИЯ ЗÐЩИТЫ. + --11.1. Цепи быÑтродейÑтвующих автоматичеÑких выключателей. + --Страница 23 + S[306] = S[312]*Train.SF27.Value + Train.BVA.Power = S[306] + S[3061] = S[306]*Train.SF46.Value + Train.BVA.ControlPower = S[3061] + + --312=314 + S[314] = clamp(S[312]*Train.SF4.Value*BKVA.KM3+S[3061]*BUV.O75V) + BUV.Power = S[314] + Train.BSKA.Power = S[314] + Train.PTTI.Power = S[314] + + + --S[526] = T[45]*Train.SB12.Value + Train.BVA.Reset = T[26] + + --317Г + 320Г + --S[522] = S[515]*Train.SB13.Value + Train:WriteTrainWire(22,S[515]*Train.SB13.Value)--S[522] + + --11.4 + Train.BVA.Disable = T[22] + --360Ð-Лампа-БУВ-725 + Panel.HL25 = S[3061]*BUV.ORP + --Мы получаем землю + S[528] = Panel.HL25*100+BUV.OIZ + Train:WriteTrainWire(28,S[528]) + Panel.HL6 = T[28] + Panel.TW28= S[528] + + --11.1.5 + --S[526] = (T[45]+T[54])*Train.SB12.Value + Train:WriteTrainWire(26,(T[45]+T[54])*Train.SB12.Value) + + --12.2. Команды Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ. + BUP.IV = BUP.Power*S[317]*BKCU.KM2 + BUP.IN = BUP.Power*S[317]*BKCU.KM1 + + --13.1. Формирование Ñигналов безопаÑноÑти Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ð¾Ð¹ ÑиÑтемой ÐРС. + --626=363 + BKBD.FMM2 = S[390] + S[626] = (BKBD.FMM1*Train.SA13.Value+T[87]*(1-Train.SA13.Value))*RC + BKBD.Power = S[626] + S[610] = clamp(Train.PB.Value*BKBD.FMM1 + (1-Train.SAP26.Value)*(S[626]+S[680]*Train.SA14.Value*(1-RC))) + Train.RPB:TriggerInput("Set",S[610]) + BUP.IPB = BUP.Power*S[610] + BUP.IARS = BUP.Power*(1-S[610]) + + Train.ARS_RT:TriggerInput("Set",(T[6]+T[58])*RC) + BKBD.DA = S[317]*(BKCU.KM1+BKCU.KM2+Train.ARS_RT.Value)*Train.SF53.Value--S["10AK"]*(KV["10AK-DA"]+Train.ARS_RT.Value) + --13.2 + --[[ S[5908] = S[673]*(1-RC) + S[5901] = S[5908]*Train.SF77.Value + S[590] = BKBD.Drive*RC + S[5901]*Train.SBR16.Value--]] + Train:WriteTrainWire(90,BKBD.DA*RC*Train.BUM_RVD1.Value+S[673]*(1-RC)*Train.SF77.Value*Train.SB6.Value) + Train:WriteTrainWire(89,BKBD.GE*Train.BUM_RVD2.Value*RC+S[680]*(1-RC)*Train.SF78.Value*(Train.SB6.Value+Train.SBR16.Value)) + Train.ROT1:TriggerInput("Set",T[90]) + Train.ROT2:TriggerInput("Set",T[89]) + --13.1 + BUP.IX = BUP.Power*T[90] + BUP.IT = BUP.Power*T[07] + BUP.IAVT = BUP.Power*T[14] + Panel.KVD = T[87]*(1-Train.ROT2.Value)+BKBD.GE*(1-Train.BUM_RVD2.Value) + + --501Г-501Ð’ + S[5012] = Train.ROT1.Value*BUP.OX + S[5018] = S[5012]--*Train.UAVAContact.Value + --501Б-501Е + S[5016] = S[5018]*(Train.SP2.Value+Train.SA9.Value) + S[5011] = S[5016]*(Train.SP5.Value+Train.SAP26.Value) + S[501] = S[5011]*(Train.RPB.Value+Train.SA8.Value) + --BUP.IX = S[501] + BUP.IROT = BUP.Power*(1-S[5012]) + BUP.IPVU = BUP.Power*(1-S[5016]) + BUP.ISOT = BUP.Power*(1-S[5011]) + BUP.IRPB = BUP.Power*(1-S[501]) + Train:WriteTrainWire(1,S[501]) + + Train.BSM_KRT:TriggerInput("Set",(T[2]+T[12])*RC) + --Train.BSM_KRH:TriggerInput("Set",(T[1]+T[55])*RC) + BKBD.KRH = (T[1]+T[55])*RC + BKBD.R11 = T[35] + BKBD.R12 = (T[45]+T[54])*RC + Train.BSM_KRO:TriggerInput("Set",BKBD.R12)--(T[87]+S["7Ga"]*KV["7GA-RC27"]+S["14a"]*Train.A42.Value*(1-Train.KRP.Value))*(1-Train.BSM_KRH.Value)) + + --S[649] = S[326]*(1-Train.SP2.Value) + Panel.AVU = S[326]*(1-Train.SP2.Value)--S[649] + + --S[724] = S[515]*Train.SA2.Value + --BUP.IBKDV = S[515]*Train.SA2.Value--S[724] + BUP.IBKDV = BUP.Power*Train.SA2.Value + + + --13.2. Формирование Ñигналов безопаÑноÑти при отключении ÑиÑтемы ÐРС. Страница 30 + --РПБ- + --S[509] = BKBD.FMM1*(1-Train.RPB.Value)*(1-Train.SAP24.Value) + T[14]*Train.KRU["514-509"]--15.2 + Train:WriteTrainWire(09,BKBD.FMM1*(1-Train.RPB.Value)*(1-Train.SAP24.Value) + T[14]*Train.KRU["514-509"]) --S[509] --15.2 + --S[5091] = T[09]*Train.SF26.Value + + S[672] = S[316]*Train.SF60.Value + --S[615]= S[672]*(Train.SA13.Value+Train.SA15.Value) + --S[627] = S[672]*Train.SA15.Value + BKBD.ALS = min(1,S[672]*(Train.SA13.Value+Train.SA15.Value))--S[615] --SA13???(13V) + Train.BLPM.Power = BKBD.ALS*Train.SA15.Value + BKBD.NGPower = S[673]*RC + BKBD.Power75V = S[672]*Train.SA15.Value--S[627] --ALS???(75V) + Train.BIS200.Power = BKBD.ALS*Train.SF50.Value--T[10]*Train.A43.Value*(Train.ALS.Value+Train.ARS.Value) + Panel.Speedometer = S[316]*Train.SF50.Value + + + --S[584] = S[626]*Train.PB.Value + T[87]*Train.SA14.Value*Train.SB8.Value + Train:WriteTrainWire(84,(S[626]+T[87]+T[83])*Train.PB.Value + T[87]*Train.SA14.Value*Train.SB8.Value)--S[584] + BKBD.KB=T[84]*RC+(BKBD.ALS*(1-Train.BSM_GE.Value)+BKBD.GE*Train.BSM_GE.Value)*Train.SB9.Value + + --13.3 Формирование Ñигналов безопаÑноÑти в режиме ÐРС-Р. Страница 31 + --[[ S[5875] = S[680]*Train.SA14.Value + S[587] = S[5875]*(1-RC) + Train:WriteTrainWire(87,S[587])--]] + Train:WriteTrainWire(87,S[680]*Train.SA14.Value*(1-RC)) + + + --S[583] = S[606]*(1-Train.SA13.Value) + S[606] = BKBD.EPK*RC + Train:WriteTrainWire(83,S[606]*(1-Train.SA13.Value))--S[583] + Train.U4:TriggerInput("Set",T[83]+S[606]) + + --14.1. Ходовые режимы оÑновного управлениÑ. Страница 32-33 + Train.KMR1:TriggerInput("Set",BUV.OVP*(1-Train.KMR2.Value)*S[314]) + Train.KMR2:TriggerInput("Set",BUV.ONZ*(1-Train.KMR1.Value)*S[314]) + --BUV.IRV = S[314]*Train.KMR1.Value + --BUV.IRN = S[314]*Train.KMR2.Value + + BUV.IRV = S[314]*Train.KMR1.Value + BUV.IRN = S[314]*Train.KMR2.Value + Train.K1:TriggerInput("Set",S[314]*BUV.OLK) + Train.K2:TriggerInput("Set",S[314]*BUV.OKX) + Train.K3:TriggerInput("Set",S[314]*BUV.OKT) + + BUV.IKX = Train.K2.Value + BUV.IKT = Train.K3.Value + BUV.ILT = Train.K1.Value + + --14.2. Резервное управление ходовыми режимами. Страница 34 + --[[ S[557] = S[320]*BKCU.KM6 + Train:WriteTrainWire(57,S[557]) + S[558] = S[320]*BKCU.KM5 + Train:WriteTrainWire(58,S[558])--]] + Train:WriteTrainWire(57,S[320]*BKCU.KM6) + Train:WriteTrainWire(58,S[320]*BKCU.KM5) + + --S[3205] = S[516]*(Train.ROT2.Value+Train.ROT1.Value)*Train.SP5.Value + --S[555] = S[3205]*(Train.SBR14.Value+Train.SBR15.Value) + S[555] = S[516]*(Train.ROT2.Value+Train.ROT1.Value)*--[[ Train.SP5.Value*--]] (Train.SBR14.Value+Train.SBR15.Value) + Train:WriteTrainWire(55,S[555]) + --S[556] = S[555]*Train.SBR15.Value + Train:WriteTrainWire(56,S[555]*Train.SBR15.Value)--S[556] + --14.3. Режим "МÐÐЕВР". Страница 35 + --S[513] = S[515]*Train.SB7.Value + Train:WriteTrainWire(13,S[515]*Train.SB7.Value) + --15. УПРÐВЛЕÐИЕ СИЛОВЫМ ПРИВОДОМ Ð’ ТОРМОЗÐЫХ РЕЖИМÐÐ¥ Страница 36-37 + --КТ + --БКБД головного-511-К4БУВС-БКБД хвоÑтового + --S[5092] = S[5091]+T[08]*(1-BUVS.KM3) + --S[5092] = T[09]*Train.SF26.Value+T[08]*(1-BUVS.KM3) + BUVS.KM3 = S[314]*BUV.ORMT + BUVS.KM4 = S[314]*BUV.ORKT + Train.U6:TriggerInput("Set",T[09]*Train.SF26.Value+T[08]*(1-BUVS.KM3))--S[5092] + + S["KT"] = S[673]*(1-Train.BSM_GE.Value) + Train:WriteTrainWire(-11,S["KT"]) + BKBD.KT = T[11]*T[-11]*Train.BSM_GE.Value + Train.BUM_KPP:TriggerInput("Set",S["KT"]*(1-Train.BSM_GE.Value)+BKBD.KT) + Train:WriteTrainWire(11,BUVS.KM4+Train.SP4.Value) + --S[5102] = T[10]+Train.SF29.Value*BUV.OV1 + Train.U7:TriggerInput("Set",T[10]+Train.SF29.Value*BUV.OV1) + --15.2. Управление от ÐРС и контроль ÑффективноÑти торможениÑ. Страница 39 + --!!!7.5.4. замкнутыми контакта ми КРУ 514 КРУ → 509 КРУ объединÑÑŽÑ‚ÑÑ Ñ†ÐµÐ¿Ð¸ команд аварийного Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð’Ð— â„–2 от БКБД. + --S[507] = S[626]*BKBD.Brake + Train:WriteTrainWire(07,BKBD["20"]*RC) + Train:WriteTrainWire(14,BKBD["8"]*RC) + --16. ПЕРЕХОД Ð’ РЕЖИМ "ВЫБЕГ" + --320Г-SB14/15 + --S[554] = S[516]*(1-Train.SBR14.Value)*(1-Train.SBR15.Value) + Train:WriteTrainWire(54,S[516]*(1-Train.SBR14.Value)*(1-Train.SBR15.Value))--S[554] + --17. РЕЖИМЫ РÐБОТЫ ЭЛЕКТРИЧЕСКОЙ СХЕМЫ УПРÐВЛЕÐИЯ Ð’ÐГОÐРИ ЦЕПЕЙ КОÐТРОЛЯ + --[[ S[527] = S[318]*Train.SB4.Value + Train:WriteTrainWire(27,S[527]) + S[523] = BUV.Power*BUV.OSN + Train:WriteTrainWire(23,S[523]) + Panel.HL5 = S[318]*T[23] + S[547] = S[515]*Train.SBP22.Value + Train:WriteTrainWire(47,S[547])--]] + Train:WriteTrainWire(27,S[318]*Train.SB4.Value) + Train:WriteTrainWire(23,BUV.Power*BUV.OSN) + Train:WriteTrainWire(47,S[515]*Train.SBP22.Value) + Panel.HL5 = S[318]*T[23] + + --19. УПРÐВЛЕÐИЕ ОТЖÐТИЕМ ТОКОПРИЕМÐИКОВ + --[[ S[524] = T[50]*((Train.VTPR.Value == 1 or Train.VTPR.Value == 2) and 1 or 0) + S[525] = T[50]*((Train.VTPR.Value == 1 or Train.VTPR.Value == 3) and 1 or 0) + S[559] = Train.VTPR.Value > 0 and 1 or 0 + Train:WriteTrainWire(24,S[524]) + Train:WriteTrainWire(25,S[525]) + Train:WriteTrainWire(59,S[559])--]] + Train:WriteTrainWire(24,T[50]*((Train.VTPR.Value == 1 or Train.VTPR.Value == 2) and 1 or 0)) + Train:WriteTrainWire(25,T[50]*((Train.VTPR.Value == 1 or Train.VTPR.Value == 3) and 1 or 0)) + Train:WriteTrainWire(59,Train.VTPR.Value > 0 and 1 or 0) + Train.U5:TriggerInput("Set",T[24]*T[59]) + + --21 + local RRI_VV = Train.RRI_VV + RRI_VV.Power = S[390]*Train.SF54.Value--*Train.SAP3.Value + RRI_VV.AmplifierPower = RRI_VV.Power*Train.SAP3.Value + Train:WriteTrainWire(51,RRI_VV.AmplifierPower*Train.RRI.LineOut) + Train:WriteTrainWire(-51,RRI_VV.AmplifierPower*Train.BBE.KM1) + RRI_VV.CabinSpeakerPower = RRI_VV.Power*Train.SAP39.Value*Train.RRI.LineOut + Panel.AnnouncerPlaying = T[51] + Panel.AnnouncerBuzz = T[-51]+RRI_VV.CabinSpeakerPower*Train.BBE.KM1 + + Panel.KES = S[312]*Train.SAP36.Value + --24. УПРÐВЛЕÐИЕ ÐППÐРÐТУРОЙ ÐРС ПРИ ДВИЖЕÐИИ СОСТÐВРСО ВСПОМОГÐТЕЛЬÐЫМ ПОЕЗДОМ + --[[ S[574] = BKBD.FMM1*Train.SAP23.Value + Train:WriteTrainWire(74,S[574]) + S[588] = BKBD.FMM1*Train.SAP14.Value*(1-Train.SAP23.Value) + Train:WriteTrainWire(88,S[588])--]] + Train:WriteTrainWire(74,BKBD.FMM1*Train.SAP23.Value) + BKBD.VP = T[74] + Train:WriteTrainWire(88,BKBD.FMM1*Train.SAP14.Value*(1-Train.SAP23.Value)) + BKBD.PD = T[88] + --Выдача Ñигналов БУП на поездные провода + --Train:WriteTrainWire(01,BUP.OX) + BUP.V0 = BUP.Power*RC*BKBD["48"] + Train:WriteTrainWire(02,BUP.OT) + Train:WriteTrainWire(03,BUP.OU1) + Train:WriteTrainWire(04,BUP.OU2) + Train:WriteTrainWire(05,BUP.OV) + Train:WriteTrainWire(06,BUP.ON) + Train:WriteTrainWire(08,BUP.OZPT*Train.SF40.Value) + Train:WriteTrainWire(10,RC*BKBD["48"]) + Train:WriteTrainWire(45,BUP.O0) + Train:WriteTrainWire(67,BUP.OBBUP) + + Panel.BOX = T[01]--OX + Panel.BOT = T[02]--OT + Panel.BOU1 = T[03]--OU1 + Panel.BOU2 = T[04]--OU2 + Panel.BOV = T[05]--OV + Panel.BON = T[06]--ON + Panel.BO0 = T[45]+T[54]--O0 + Panel.BOZPT = T[08]--OZPT + --Panel.BOBBUP = T[67]--BOBBUP + + --Передача Ñигналов Ñ Ð¿Ð¾ÐµÐ·Ð´Ð½Ñ‹Ñ… проводов в БУВ + local BUVPower = BUV.Power + BUV.IX = --[[ BUVPower*--]] T[01] + BUV.IT = --[[ BUVPower*--]] T[02] + BUV.IU1 = --[[ BUVPower*--]] T[03] + BUV.IU2 = --[[ BUVPower*--]] T[04] + BUV.IVP = --[[ BUVPower*--]] T[05] + BUV.INZ = --[[ BUVPower*--]] T[06] + BUV.ITARS = --[[ BUVPower*--]] T[07] + BUV.ITEM = --[[ BUVPower*--]] T[14] + BUV.IM = --[[ BUVPower*--]] T[13] + BUV.IVZ = --[[ BUVPower*--]] T[26] + BUV.IPROV = --[[ BUVPower*--]] T[27] + BUV.IPROV0 = --[[ BUVPower*--]] T[47] + BUV.IXP = --[[ BUVPower*--]] T[55] + BUV.IU1R = --[[ BUVPower*--]] T[56] + BUV.IVR = --[[ BUVPower*--]] T[57] + BUV.INR = --[[ BUVPower*--]] T[58] + BUV.IAVR = BUVPower*(1-Train.SP3.Value) --737-700 14.3. Режим "МÐÐЕВР". + + + --25 Управление радиоÑтанцией + Panel.VPR = S[550]*Train.SF63.Value + + self.Schemes = S +end + +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:SolvePowerCircuits(Train,dT) + -- Apply K2, K3 contactors + self.R1 = self.R1 + 1e9*(1 - math.min(1,Train.K2.Value+Train.K3.Value)) + self.R2 = self.R2 + 1e9*(1 - math.min(1,Train.K2.Value+Train.K3.Value)) + + -- Thyristor contrller + self.Rs1 = Train.PTTI.RVResistance or 1e9 + self.Rs2 = Train.PTTI.RVResistance or 1e9 + + -- Calculate total resistance of engines winding + local RwAnchor = Train.Engines.Rwa*2 -- Double because each set includes two engines + local RwStator = Train.Engines.Rws*2 + -- Total resistance of the stator + shunt + self.Rstator13 = (RwStator^(-1) + self.Rs1^(-1))^(-1) + self.Rstator24 = (RwStator^(-1) + self.Rs2^(-1))^(-1) + -- Total resistance of entire motor + self.Ranchor13 = RwAnchor + self.Ranchor24 = RwAnchor + + -- Calculate electric power network + --FIXME + if Train.PTTI.State < 0 then + self:SolvePT(Train) + else + self:SolvePP(Train) + end + + -- Calculate current through rheostats 1, 2 + self.IR1 = self.I13 + self.IR2 = self.I24 + + -- Calculate induction properties of the motor + self.I13SH = self.I13SH or self.I13 + self.I24SH = self.I24SH or self.I24 + + -- Time constant + local T13const1 = math.max(16.00,math.min(28.0,(self.R13^2) * 2.0)) -- R * L + local T24const1 = math.max(16.00,math.min(28.0,(self.R24^2) * 2.0)) -- R * L + -- Total change + local dI13dT = T13const1 * (self.I13 - self.I13SH) * dT + local dI24dT = T24const1 * (self.I24 - self.I24SH) * dT + + -- Limit change and apply it + if dI13dT > 0 then dI13dT = math.min(self.I13 - self.I13SH,dI13dT) end + if dI13dT < 0 then dI13dT = math.max(self.I13 - self.I13SH,dI13dT) end + if dI24dT > 0 then dI24dT = math.min(self.I24 - self.I24SH,dI24dT) end + if dI24dT < 0 then dI24dT = math.max(self.I24 - self.I24SH,dI24dT) end + self.I13SH = self.I13SH + dI13dT + self.I24SH = self.I24SH + dI24dT + self.I13 = self.I13SH + self.I24 = self.I24SH + + --FIXME + if Train.PTTI.State > 0 then -- PS + self.I13 = self.I13 * Train.K2.Value * Train.K1.Value + self.I24 = self.I24 * Train.K2.Value * Train.K1.Value + + self.Itotal = Train.Electric.I13 + Train.Electric.I24 + else -- PT + self.I13 = self.I13 * Train.K3.Value + self.I24 = self.I24 * Train.K3.Value + + self.Itotal = Train.Electric.I13 + Train.Electric.I24 + end + + -- Calculate extra information + self.Uanchor13 = self.I13 * self.Ranchor13 + self.Uanchor24 = self.I24 * self.Ranchor24 + + + + ---------------------------------------------------------------------------- + -- Calculate current through stator and shunt + self.Ustator13 = self.I13 * self.Rstator13 + self.Ustator24 = self.I24 * self.Rstator24 + + self.Ishunt13 = self.Ustator13 / self.Rs1 + self.Istator13 = self.Ustator13 / RwStator + self.Ishunt24 = self.Ustator24 / self.Rs2 + self.Istator24 = self.Ustator24 / RwStator + + --FIXME + if Train.PTTI.State < 0 then + local I1,I2 = self.Ishunt13,self.Ishunt24 + self.Ishunt13 = -I2 + self.Ishunt24 = -I1 + + I1,I2 = self.Istator13,self.Istator24 + self.Istator13 = -I2 + self.Istator24 = -I1 + end + + + -- Sane checks + if self.R1 > 1e5 then self.IR1 = 0 end + if self.R2 > 1e5 then self.IR2 = 0 end +--[[ + -- Calculate power and heating --FIXME + local K = 12.0*1e-5 + local H = (10.00+(15.00*Train.Engines.Speed/80.0))*1e-3 + self.P1 = (self.IR1^2)*self.R1 + self.P2 = (self.IR2^2)*self.R2 + self.T1 = (self.T1 + self.P1*K*dT - (self.T1-25)*H*dT) + self.T2 = (self.T2 + self.P2*K*dT - (self.T2-25)*H*dT) + self.Overheat1 = math.min(1-1e-12, + self.Overheat1 + math.max(0,(math.max(0,self.T1-750.0)/400.0)^2)*dT ) + self.Overheat2 = math.min(1-1e-12, + self.Overheat2 + math.max(0,(math.max(0,self.T2-750.0)/400.0)^2)*dT )--]] + + -- Energy consumption + self.ElectricEnergyUsed = self.ElectricEnergyUsed + math.max(0,self.EnergyChange)*dT + self.ElectricEnergyDissipated = self.ElectricEnergyDissipated + math.max(0,-self.EnergyChange)*dT +end + +function TRAIN_SYSTEM:SolvePP(Train) + -- Calculate total resistance of each branch + local R1 = self.Ranchor13 + self.Rstator13 + local R2 = self.Ranchor13 + self.Rstator13 + local CircuitClosed = (self.Power750V*Train.K1.Value > 0) and 1 or 0 + + -- Main circuit parameters + local V = self.Power750V*Train.K1.Value*Train.PTTI.RNState + local E1 = Train.Engines.E13 + local E2 = Train.Engines.E24 + + -- Calculate current through engines 13, 24 + self.I13 = math.max(0,((V - E1)/R1)*CircuitClosed) + self.I24 = math.max(0,((V - E2)/R2)*CircuitClosed) + + -- Total resistance (for induction RL circuit) + self.R13 = R1 + self.R24 = R2 + + -- Calculate everything else + self.U13 = self.I13*R1 + self.U24 = self.I24*R2 + self.Utotal = (self.U13 + self.U24)/2 + self.Itotal = Train.Electric.I13 + Train.Electric.I24 + -- Energy consumption + self.EnergyChange = math.abs((self.I13^2)*R1) + math.abs((self.I24^2)*R2) +end + +function TRAIN_SYSTEM:SolvePT(Train) + -- Winding resistances + local R1 = self.Ranchor13 + self.Rstator13 + local R2 = self.Ranchor24 + self.Rstator24 + -- Total resistance of the entire braking rheostat + local R3 = --[[ (1.730+0.4)*--]] 2.8*(1-0.95*Train.PTTI.RNState)--0.84 + -- Main circuit parameters + local V = self.Power750V*Train.K1.Value + local E1 = Train.Engines.E13 + local E2 = Train.Engines.E24 + + -- Calculate current through engines 13, 24 + self.I13 = -((E1*R2 + E1*R3 - E2*R3 - R2*V)/(R1*R2 + R1*R3 + R2*R3)) + self.I24 = -((E2*R1 - E1*R3 + E2*R3 - R1*V)/(R1*R2 + R1*R3 + R2*R3)) + + -- Total resistance (for induction RL circuit) + self.R13 = R3+((R1^(-1) + R2^(-1))^(-1)) + self.R24 = R3+((R1^(-1) + R2^(-1))^(-1)) + + -- Calculate everything else + self.U13 = self.I13*R1 + self.U24 = self.I24*R2 + self.Utotal = (self.U13 + self.U24)/2 + self.Itotal = Train.Electric.I13 + Train.Electric.I24 + + -- Energy consumption + self.EnergyChange = -math.abs(((0.5*self.Itotal)^2)*self.R13) +end diff --git a/lua/metrostroi/systems/sys_81_718_kr.lua b/lua/metrostroi/systems/sys_81_718_kr.lua new file mode 100644 index 0000000..74cc41a --- /dev/null +++ b/lua/metrostroi/systems/sys_81_718_kr.lua @@ -0,0 +1,67 @@ +-------------------------------------------------------------------------------- +-- 81-718 controller reverser +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_718_KR") + +function TRAIN_SYSTEM:Initialize() + self.Position = 0 + + self.Matrix = { + {"317B" , "386"}, + { 1, 0, 0 }, + {"317B" , "388"}, + { 0, 0, 1 }, + {"317A" , "387"}, + { 0, 1, 0 }, + {"320" ,"320A"}, + { 0, 1, 0 }, + {"319" , "369"}, + { 1, 0, 1 }, + {"673" ,"673A"}, + { 1, 0, 1 }, + {"673" , "679"}, + { 1, 0, 1 }, + } + + -- Initialize contacts values + for i=1,#self.Matrix/2 do + local v = self.Matrix[i*2-1] + self[v[1].."-"..v[2]] = 0 + end +end + +function TRAIN_SYSTEM:Inputs() + return { "Set" } +end + +function TRAIN_SYSTEM:Outputs() + return { "Position" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + local prevPosition = self.Position + -- Change position + if name == "Set" then + if (math.floor(value) ~= self.Position) then + local prevPosition = self.Position + self.Position = math.floor(value) + if self.Position > 1 then self.Position = 1 end + if self.Position < -1 then self.Position = -1 end + if prevPosition ~= self.Position then + self.Train:PlayOnce("kr_"..prevPosition.."_"..self.Position,"cabin",1) + end + end + end +end + + +function TRAIN_SYSTEM:Think() + for i=1,#self.Matrix/2 do + local v = self.Matrix[i*2-1] + local d = self.Matrix[i*2] + self[v[1].."-"..v[2]] = d[self.Position+2] + end +end diff --git a/lua/metrostroi/systems/sys_81_718_kru.lua b/lua/metrostroi/systems/sys_81_718_kru.lua new file mode 100644 index 0000000..809f10c --- /dev/null +++ b/lua/metrostroi/systems/sys_81_718_kru.lua @@ -0,0 +1,67 @@ +-------------------------------------------------------------------------------- +-- 81-718 emergency controller reverser +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_718_KRU") + +function TRAIN_SYSTEM:Initialize() + self.Position = 0 + + self.Matrix = { + {"320B" , "394"}, + { 1, 0, 0 }, + {"320B" , "392"}, + { 0, 0, 1 }, + {"320A" , "393"}, + { 0, 1, 0 }, + {"317" ,"317A"}, + { 0, 1, 0 }, + {"319" , "369"}, + { 1, 0, 1 }, + {"680" ,"680A"}, + { 1, 0, 1 }, + {"514" , "509"}, + { 1, 0, 1 }, + } + + -- Initialize contacts values + for i=1,#self.Matrix/2 do + local v = self.Matrix[i*2-1] + self[v[1].."-"..v[2]] = 0 + end +end + +function TRAIN_SYSTEM:Inputs() + return { "Set" } +end + +function TRAIN_SYSTEM:Outputs() + return { "Position" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + local prevPosition = self.Position + -- Change position + if name == "Set" then + if (math.floor(value) ~= self.Position) then + local prevPosition = self.Position + self.Position = math.floor(value) + if self.Position > 1 then self.Position = 1 end + if self.Position < -1 then self.Position = -1 end + if prevPosition ~= self.Position then + self.Train:PlayOnce("kru_"..prevPosition.."_"..self.Position,"cabin",1) + end + end + end +end + + +function TRAIN_SYSTEM:Think() + for i=1,#self.Matrix/2 do + local v = self.Matrix[i*2-1] + local d = self.Matrix[i*2] + self[v[1].."-"..v[2]] = d[self.Position+2] + end +end diff --git a/lua/metrostroi/systems/sys_81_718_panel.lua b/lua/metrostroi/systems/sys_81_718_panel.lua new file mode 100644 index 0000000..016e6e3 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_718_panel.lua @@ -0,0 +1,240 @@ +-------------------------------------------------------------------------------- +-- 81-718 controller panel +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_718_Panel") + +function TRAIN_SYSTEM:Initialize() + -- Выключатель батареи (ВБ) + self.Train:LoadSystem("VB","Relay","Switch",{bass = true}) + self.Train:LoadSystem("RC","Relay","Switch",{bass = true, normally_closed=true}) + self.Train:LoadSystem("VTPR","Relay","Switch",{bass = true, maxvalue=3}) + self.Train:LoadSystem("PVK","Relay","Switch",{maxvalue=2,bass=true}) + + self.Train:LoadSystem("PB","Relay","Switch",{bass = true}) + + self.Train:LoadSystem("SF2" ,"Relay","Switch", {bass = true, normally_closed = true}) --Поездное питание + self.Train:LoadSystem("SF3" ,"Relay","Switch", {bass = true, normally_closed = true}) --Вагонное питание, ЦУВ + self.Train:LoadSystem("SF4" ,"Relay","Switch", {bass = true, normally_closed = true}) --Питание БУВ, ПТТИ, БСКÐ, ЦУВ + self.Train:LoadSystem("SF5" ,"Relay","Switch", {bass = true, normally_closed = true}) --Управление БКЦУ + self.Train:LoadSystem("SF6" ,"Relay","Switch", {bass = true, normally_closed = true}) --Управление поездом оÑновное + self.Train:LoadSystem("SF7" ,"Relay","Switch", {bass = true, normally_closed = true}) --ББЭ, Мотор-компреÑÑор + self.Train:LoadSystem("SF8" ,"Relay","Switch", {bass = true, normally_closed = true}) --Двери + self.Train:LoadSystem("SF9" ,"Relay","Switch", {bass = true, normally_closed = true}) --Управление поездом резервное + self.Train:LoadSystem("SF10","Relay","Switch", {bass = true, normally_closed = true}) --ВентилÑторы 1 группа + self.Train:LoadSystem("SF11","Relay","Switch", {bass = true, normally_closed = true}) --ВентилÑторы 2 группа + self.Train:LoadSystem("SF12","Relay","Switch", {bass = true, normally_closed = true}) --Включение ББЭ + self.Train:LoadSystem("SF13","Relay","Switch", {bass = true, normally_closed = true}) --Отключение ББЭ + self.Train:LoadSystem("SF14","Relay","Switch", {bass = true, normally_closed = true}) --Контактор ЦУВ + self.Train:LoadSystem("SF15","Relay","Switch", {bass = true, normally_closed = true}) --Резервное включение ЦУВ + self.Train:LoadSystem("SF16","Relay","Switch", {bass = true, normally_closed = true}) --Управление оÑвещением Ñалона + self.Train:LoadSystem("SF17","Relay","Switch", {bass = true, normally_closed = true}) --Закрытие дверей + self.Train:LoadSystem("SF18","Relay","Switch", {bass = true, normally_closed = true}) --Открытие левых дверей + self.Train:LoadSystem("SF19","Relay","Switch", {bass = true, normally_closed = true}) --Резервное закрытие дверей + self.Train:LoadSystem("SF20","Relay","Switch", {bass = true, normally_closed = true}) --Открытие правых дверей + self.Train:LoadSystem("SF21","Relay","Switch", {bass = true, normally_closed = true}) --ОÑновное управление МК + self.Train:LoadSystem("SF22","Relay","Switch", {bass = true, normally_closed = true}) --Резервное управление МК + self.Train:LoadSystem("SF23","Relay","Switch", {bass = true, normally_closed = true}) --Контактор 1 группы вентилÑторов + self.Train:LoadSystem("SF24","Relay","Switch", {bass = true, normally_closed = true}) --Контактор 2 группы вентилÑторов + self.Train:LoadSystem("SF25","Relay","Switch", {bass = true, normally_closed = true}) --Токоприемники 1 группы + self.Train:LoadSystem("SF26","Relay","Switch", {bass = true, normally_closed = true}) --ВЗ№1 + self.Train:LoadSystem("SF27","Relay","Switch", {bass = true, normally_closed = true}) --Питание БВÐ(Блока ÐвтоматичеÑких Выключателей) + + self.Train:LoadSystem("SF29","Relay","Switch", {bass = true, normally_closed = true}) --ВЗ№2 + + self.Train:LoadSystem("SF34","Relay","Switch", {bass = true, normally_closed = true}) --Питание 1 группы вентилÑторов + self.Train:LoadSystem("SF35","Relay","Switch", {bass = true, normally_closed = true}) --Питание 2 группы вентилÑторов + + self.Train:LoadSystem("SF40","Relay","Switch", {bass = true, normally_closed = true}) --ВЗ№2 + self.Train:LoadSystem("SF41","Relay","Switch", {bass = true, normally_closed = true}) --Фары + self.Train:LoadSystem("SF42","Relay","Switch", {bass = true, normally_closed = true}) --Подвозбуждение + self.Train:LoadSystem("SF43","Relay","Switch", {bass = true, normally_closed = true}) --Ðварийное оÑвещение Ñалона + self.Train:LoadSystem("SF44","Relay","Switch", {bass = true, normally_closed = true}) --Питание оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ Ñалона + self.Train:LoadSystem("SF45","Relay","Switch", {bass = true, normally_closed = true}) --Управление контакторами ББЭ, оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ Ñалона + self.Train:LoadSystem("SF46","Relay","Switch", {bass = true, normally_closed = true}) --Питание ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð‘Ð’Ð + + self.Train:LoadSystem("SF50","Relay","Switch", {bass = true, normally_closed = true}) --СкороÑтемер + self.Train:LoadSystem("SF51","Relay","Switch", {bass = true, normally_closed = true}) --ОÑновное питание ÐРС + self.Train:LoadSystem("SF52","Relay","Switch", {bass = true, normally_closed = true}) --Резервное питание ÐРС + self.Train:LoadSystem("SF53","Relay","Switch", {bass = true, normally_closed = true}) --Тормозные цепи ÐРС + self.Train:LoadSystem("SF54","Relay","Switch", {bass = true, normally_closed = true}) --Радиооповещение 50Ð + self.Train:LoadSystem("SF55","Relay","Switch", {bass = true}) --СОТ3 + self.Train:LoadSystem("SF56","Relay","Switch", {bass = true}) --Электро-компреÑÑор(промежуточный вагон) + + self.Train:LoadSystem("SF60","Relay","Switch", {bass = true, normally_closed = true}) --12V ÐРС + self.Train:LoadSystem("SF61","Relay","Switch", {bass = true, normally_closed = true}) --50V ÐРС(ФММ1) + + self.Train:LoadSystem("SF63","Relay","Switch", {bass = true, normally_closed = true}) --РадиоÑÑ‚Ð°Ð½Ñ†Ð¸Ñ + + self.Train:LoadSystem("SF65","Relay","Switch", {bass = true, normally_closed = true}) --ВентилÑÑ†Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹ + + self.Train:LoadSystem("SF71","Relay","Switch", {bass = true, normally_closed = true}) --ЭкÑÑ‚Ñ€ÐµÐ½Ð½Ð°Ñ ÑвÑзь + self.Train:LoadSystem("SF72","Relay","Switch", {bass = true, normally_closed = true}) --СтоÑночный тормоз + self.Train:LoadSystem("SF73","Relay","Switch", {bass = true, normally_closed = true}) --ГребнеÑмазыватель + + self.Train:LoadSystem("SF76","Relay","Switch", {bass = true, normally_closed = true}) --ÐŸÐ¾Ð¶Ð°Ñ€Ð½Ð°Ñ ÑÐ¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ + self.Train:LoadSystem("SF77","Relay","Switch", {bass = true, normally_closed = true}) --Ðварийный ход оÑновное управление + self.Train:LoadSystem("SF78","Relay","Switch", {bass = true, normally_closed = true}) --Ðварийный ход резервное управление + + + ----------------- ОПУ ----------------- + self.Train:LoadSystem("SA1/1","Relay","Switch", {bass = true}) --Фары + self.Train:LoadSystem("SA2/1","Relay","Switch", {bass = true}) --Фары + self.Train:LoadSystem("SA4/1","Relay","Switch", {bass = true}) --ПодÑвет приборов + self.Train:LoadSystem("SA5/1","Relay","Switch", {bass = true, normally_closed = true}) --ЯркоÑть табло + + self.Train:LoadSystem("SA2" ,"Relay","Switch", {bass = true}) --Двери аварийные + + self.Train:LoadSystem("SA5" ,"Relay","Switch", {bass = true}) --Закрытие дверей + + self.Train:LoadSystem("SA7" ,"Relay","Switch", {bass = true}) --Сторона дверей + self.Train:LoadSystem("SA8" ,"Relay","Switch", {bass = true}) --Ð’ÐÐ¥ + self.Train:LoadSystem("SA9" ,"Relay","Switch", {bass = true}) --Откл. ÐВУ + + self.Train:LoadSystem("SA13","Relay","Switch", {bass = true}) --ÐРС + self.Train:LoadSystem("SA14","Relay","Switch", {bass = true}) --ÐРС-Р + self.Train:LoadSystem("SA15","Relay","Switch", {bass = true, normally_closed = true}) --ÐЛС + self.Train:LoadSystem("SA16","Relay","Switch", {bass = true}) --Вкл. МК + + self.Train:LoadSystem("SB1" ,"Relay","Switch", {bass = true}) --Открытие левых дверей + self.HL3 = 0 --Лампа левых дверей + self.Train:LoadSystem("SB2" ,"Relay","Switch", {bass = true}) --Открытие правых дверей + self.HL4 = 0 --Лампа првых дверей + self.Train:LoadSystem("SB3" ,"Relay","Switch", {bass = true}) --Закрытие дверей резервное + self.Train:LoadSystem("SB4" ,"Relay","Switch", {bass = true}) --Проверка работы + self.HL5 = 0 --СР+ self.Train:LoadSystem("SB5" ,"Relay","Switch", {bass = true}) --Передача ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + self.Train:LoadSystem("SB6" ,"Relay","Switch", {bass = true}) --Ход аварийный + self.Train:LoadSystem("SB7" ,"Relay","Switch", {bass = true}) --Ход маневровый + self.Train:LoadSystem("SB6K" ,"Relay","Switch", {bass = true, normally_closed = true}) + self.Train:LoadSystem("SB7K" ,"Relay","Switch", {bass = true, normally_closed = true}) + self.Train:LoadSystem("SB8" ,"Relay","Switch", {bass = true}) --КБ1 + self.Train:LoadSystem("SB9" ,"Relay","Switch", {bass = true}) --КБ2 + self.Train:LoadSystem("SB10","Relay","Switch", {bass = true}) --Программа 1 + self.Train:LoadSystem("SB11","Relay","Switch", {bass = true}) --Программа 2 + self.Train:LoadSystem("SB12","Relay","Switch", {bass = true}) --Возврат защиты, вкл. БВР+ self.Train:LoadSystem("SB13","Relay","Switch", {bass = true}) --Откл. БВР+ self.HL6 = 6 --Защита + self.Train:LoadSystem("SB14","Relay","Switch", {bass = true}) --Рез. МК + self.Train:LoadSystem("SB15","Relay","Switch", {bass = true}) --Вкл. ББЭ + self.Train:LoadSystem("SB16","Relay","Switch", {bass = true}) --Откл. ББЭ + self.HL7 = 0 --Лампа неиÑправноÑти ББЭ + ----------------- ПЛД ----------------- + self.Train:LoadSystem("SA6" ,"Relay","Switch",{bass = true,normally_closed = true}) --Закрытие дверей + self.Train:LoadSystem("SA24","Relay","Switch", {bass = true}) --Открытие левых дверей + self.Train:LoadSystem("SB20","Relay","Switch", {bass = true}) --Программа 1 + self.Train:LoadSystem("SB21","Relay","Switch", {bass = true}) --Программа 2 + + ----------------- ВПУ ----------------- + self.Train:LoadSystem("SAP3" ,"Relay","Switch", {bass = true}) --УÐЧ + self.Train:LoadSystem("SAP8" ,"Relay","Switch", {bass = true}) --ОÑвещение Ñалона + self.Train:LoadSystem("SAP9" ,"Relay","Switch", {bass = true}) --ВентилÑÑ†Ð¸Ñ 1 группа + self.Train:LoadSystem("SAP10","Relay","Switch", {bass = true}) --ВентилÑÑ†Ð¸Ñ 2 группа + self.Train:LoadSystem("SAP11","Relay","Switch", {bass = true}) --Отопление + self.Train:LoadSystem("SAP12","Relay","Switch", {bass = true}) --ОÑвещение отÑека + self.Train:LoadSystem("SAP13","Relay","Switch", {bass = true}) --ОÑвещение кабины + self.Train:LoadSystem("SAP14","Relay","Switch", {bass = true}) --Дешифратор + self.Train:LoadSystem("SAP23","Relay","Switch", {bass = true}) --ВП + self.Train:LoadSystem("SAP24","Relay","Switch", {bass = true}) --ВОВТ + self.Train:LoadSystem("SAP26","Relay","Switch", {bass = true}) --УОС + self.Train:LoadSystem("SAP36","Relay","Switch", {bass = true}) --КЭС + self.Train:LoadSystem("SAP39","Relay","Switch", {bass = true}) --КР + + self.Train:LoadSystem("SBP4" ,"Relay","Switch", {bass = true}) --Резервное открытие левых дверей + self.Train:LoadSystem("SBP6" ,"Relay","Switch", {bass = true}) --Резервное открытие првых дверей + self.Train:LoadSystem("SBP22","Relay","Switch", {bass = true}) --Проверка работоÑпоÑобноÑти + ----------------- ПРУ ----------------- + self.Train:LoadSystem("SBR14","Relay","Switch", {bass = true}) --Рез. ход 1 + self.Train:LoadSystem("SBR15","Relay","Switch", {bass = true}) --Рез. ход 2 + self.Train:LoadSystem("SBR16","Relay","Switch", {bass = true}) --Ðвар. ход + + ----------------- БЗОС ---------------- + self.Train:LoadSystem("SAB1","Relay","Switch",{normally_closed=true,bass = true}) --ÐžÑ…Ñ€Ð°Ð½Ð½Ð°Ñ ÑÐ¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ + + --[[ ----------------- ППУ ----------------- + self.Train:LoadSystem("SBU1" ,"Relay","Switch") --ХОД 1 + self.Train:LoadSystem("SBU2" ,"Relay","Switch") --ВЗ + self.Train:LoadSystem("SAU2" ,"Relay","Switch") --КомпреÑÑор + self.Train:LoadSystem("SBU3" ,"Relay","Switch") --Откл. БВ + self.Train:LoadSystem("SBU4" ,"Relay","Switch") --Вкл. ББЭ--]] + self.H11 = 0 + self.HL17 = 0 + self.HL20 = 0 + self.EL2 = 0 + self.EL1 = 0 + self.EL3_6 = 0 + self.EL7_30 = 0 + self.EL31 = 0 + self.V1 = 0 + self.SD = 0 + self.KT = 0 + self.ST = 0 + self.KES = 0 + self.CUV = 0 + self.AVU = 0 + self.KVD = 0 + self.VS1 = 0 + self.VS2 = 0 + self.HL3 = 0 + self.HL4 = 0 + self.HL5 = 0 + self.HL7 = 0 + self.HL13 = 0 + self.HL46 = 0 + self.HL17 = 0 + self.HL20 = 0 + self.HL25 = 0 + self.HL6 = 0 + self.HL52 = 0 + + self.LN = 0 + self.RS = 0 + self.AR80 = 0 + self.AR70 = 0 + self.AR60 = 0 + self.AR40 = 0 + self.AR0 = 0 + self.AR04 = 0 + + self.TW28 = 0 + + self.RouteNumber = 0 + self.VD1 = 0 + + self.V1 = 0 + + --БУП Выходные Ñигналы + self.BOX = 0 + self.BOT = 0 + self.BOU1 = 0 + self.BOU2 = 0 + self.BOV = 0 + self.BON = 0 + self.BO0 = 0 + self.BOZPT = 0 + + self.VPR = 0 + --self.BOBBUP = 0 + + self.AnnouncerPlaying = 0 + self.AnnouncerBuzz = 0 + + self.Speedometer = 0 + + self.M1 = 0 +end + +local outputs = {"H11","HL17","HL20","EL2","EL1","EL3_6","EL7_30","EL31","V1","SD","KT","ST","KES","CUV","AVU","KVD","VS1","VS2","HL3","HL4","HL5","HL7","HL13","HL46","HL17","HL20","HL25","HL6","HL52","LN","RS","AR80","AR70","AR60","AR40","AR0","AR04","TW28","RouteNumber","VD1","V1", + "BOX","BOT","BOU1","BOU2","BOV","BON","BO0","BOZPT",--"BOBBUP", + "VPR","Speedometer","M1", + "AnnouncerPlaying","AnnouncerBuzz", +} +function TRAIN_SYSTEM:ClientInitialize() +end + +function TRAIN_SYSTEM:Outputs() + return outputs +end + diff --git a/lua/metrostroi/systems/sys_81_718_pneumatic.lua b/lua/metrostroi/systems/sys_81_718_pneumatic.lua new file mode 100644 index 0000000..e0df08f --- /dev/null +++ b/lua/metrostroi/systems/sys_81_718_pneumatic.lua @@ -0,0 +1,675 @@ +-------------------------------------------------------------------------------- +-- 81-718 pneumatic system +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_718_Pneumatic") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize(parameters) + self.DisconnectType = parameters and parameters.br013_1 + -- Type 2 (013) + -- 1 Accelerated charge + -- 2 Normal charge (brake release) + -- 3 Closed + -- 4 Service application + -- 5 Emergency application + self.DriverValvePosition = 2 + self.RealDriverValvePosition = self.DriverValvePosition + + + -- Pressure in reservoir + self.ParkingBrakePressure = 0 + self.ReservoirPressure = 0.0 -- atm + -- Pressure in trains feed line + self.TrainLinePressure = 8.0 -- atm + -- Pressure in trains brake line + self.BrakeLinePressure = 0.0 -- atm + self.EPKPressure = 0.0 -- atm + -- Pressure in brake cylinder + self.BrakeCylinderPressure = 0.0 -- atm + self.OldBrakeLinePressure = 0.0 + self.BCPressure = 0.0 + -- Pressure in the door line + self.DoorLinePressure = 0.0 -- atm + + -- Вентили дверного воздухораÑÐ¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÐµÐ»Ñ (ВДЗ, ВДОЛ, ВДОП) + self.Train:LoadSystem("U1","Relay","", {bass = true}) + self.Train:LoadSystem("U2","Relay","", {bass = true}) + self.Train:LoadSystem("U3","Relay","", {bass = true}) + + + self.Train:LoadSystem("EPK","Relay","Switch",{ bass = true}) + --self.Train:LoadSystem("EPKContacts","Relay","",{close_time = 3}) + --Вентиль ЭПВ + self.Train:LoadSystem("U4","Relay","") + --Вентиль ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´ÑŠÑ‘Ð¼Ð¾Ð¼ ТП + self.Train:LoadSystem("U5","Relay","") + -- Valve #2 + self.Train:LoadSystem("U6","Relay") + -- Valve #1 + self.Train:LoadSystem("U7","Relay") + + -- РегулÑтор Ð´Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (ÐК) + self.Train:LoadSystem("SP1","Relay","AK-11B") + -- ÐвтоматичеÑкий выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (ÐВУ) + self.Train:LoadSystem("SP2","Relay","AVU-045") + -- ÐвтоматичеÑкий выключатель Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ (ÐВТ) + self.Train:LoadSystem("SP3","Relay","AVT-325") + --ДКПТ + self.Train:LoadSystem("SP4","Relay") + --СОТ1 ЭПВ ОÑн + self.Train:LoadSystem("SP5","Relay") + --СОТ2 ЭПВ Рез + self.Train:LoadSystem("SP6","Relay") + --СОТ3 + self.Train:LoadSystem("SP7","Relay") + ---- Блокировка тормозов + --self.Train:LoadSystem("BPT","Relay","") + -- SA15-22 Концевые выключатели дверей + self.Train:LoadSystem("SAD","Relay","") + -- SQ1(2) - Датчики томроза + self.Train:LoadSystem("SQ1","Relay","") + --Концевой датчик + self.Train:LoadSystem("SQ3","Relay","") + + + if self.DisconnectType then + -- Краны двойной Ñ‚Ñги + self.Train:LoadSystem("DriverValveTLDisconnect","Relay","Switch", {bass = true}) + self.Train:LoadSystem("DriverValveBLDisconnect","Relay","Switch", {bass = true}) + else + -- Разобщение клапана машиниÑта + self.Train:LoadSystem("DriverValveDisconnect","Relay","Switch", {bass = true}) + end + + self.Train:LoadSystem("EmergencyBrakeValve","Relay","Switch") + + -- ВоздухораÑпределитель + self.Train:LoadSystem("AirDistributorDisconnect","Relay","Switch") + --УÐÐ’Ð + self.Train:LoadSystem("UAVA","Relay","Switch",{ bass = true}) + self.Train:LoadSystem("UAVAC","Relay","",{normally_closed=true,bass=true}) + + --СтоÑночный тормоз + self.Train:LoadSystem("ParkingBrake","Relay","Switch",{bass = true}) + + + -- Isolation valves + self.Train:LoadSystem("FrontBrakeLineIsolation","Relay","Switch", { normally_closed = true, bass = true}) + self.Train:LoadSystem("RearBrakeLineIsolation","Relay","Switch", { normally_closed = true, bass = true}) + self.Train:LoadSystem("FrontTrainLineIsolation","Relay","Switch", { normally_closed = true, bass = true}) + self.Train:LoadSystem("RearTrainLineIsolation","Relay","Switch", { normally_closed = true, bass = true}) + + -- Brake cylinder atmospheric valve open + self.BrakeCylinderValve = 0 + + -- Overpressure protection valve open + self.TrainLineOverpressureValve = 0 + + -- Compressor simulation + self.Compressor = 0 --Simulate overheat with TRK FIXME + + -- Disconnect valve status + self.DriverValveDisconnectPrevious = 0 + self.EPKPrevious = 0 + + + if not TURBOSTROI then + self.LeftDoorState = { 0,0,0,0 } + self.RightDoorState = { 0,0,0,0 } + self.LeftDoorDir = { 0,0,0,0 } + self.RightDoorDir = { 0,0,0,0 } + self.LeftDoorSpeed = {0,0,0,0} + self.RightDoorSpeed = {0,0,0,0} + self.LeftDoorStuck = {false, false, false, false} + self.RightDoorStuck = {false, false, false, false} + local start = math.Rand(0.6,0.8) + -- 0.6-1 + self.DoorSpeedMain = -math.Rand(start,math.Rand(start+0.1,start+0.2)) + for i=1,#self.LeftDoorSpeed do + if math.random() > 0.7 then + self.LeftDoorSpeed[i] = math.Rand(self.DoorSpeedMain-0.1,self.DoorSpeedMain+0.2) + self.RightDoorSpeed[i] = math.Rand(self.DoorSpeedMain-0.1,self.DoorSpeedMain+0.2) + else + self.LeftDoorSpeed[i] = math.Rand(self.DoorSpeedMain-0.1,self.DoorSpeedMain+0.1) + self.RightDoorSpeed[i] = math.Rand(self.DoorSpeedMain-0.1,self.DoorSpeedMain+0.1) + end + end + end + self.TrainLineOpen = false + self.BrakeLineOpen = false + + self.EmergencyValve = false + self.EmergencyValveEPK = false + self.OldValuePos = self.DriverValvePosition + + self.WeightLoadRatio = 0--math.max(0,math.min(1,(self.Train:GetNW2Float("PassengerCount",0)/200))) +end + +function TRAIN_SYSTEM:Inputs() + return { "BrakeUp", "BrakeDown", "BrakeSet", "ValveType", "Autostop" } +end + +function TRAIN_SYSTEM:Outputs() + return { "BrakeLinePressure", "BrakeCylinderPressure", "DriverValvePosition", + "ReservoirPressure", "TrainLinePressure", "DoorLinePressure", "WeightLoadRatio" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "BrakeSet" then + self.DriverValvePosition = math.floor(value) + if self.DriverValvePosition < 1 then self.DriverValvePosition = 1 end + if self.DriverValvePosition > 7 then self.DriverValvePosition = 7 end + elseif (name == "BrakeUp") and (value > 0.5) then + self:TriggerInput("BrakeSet",self.DriverValvePosition+1) + elseif (name == "BrakeDown") and (value > 0.5) then + self:TriggerInput("BrakeSet",self.DriverValvePosition-1) + elseif name == "ValveType" then + self.ValveType = math.floor(value) + elseif name == "Autostop" then + local HaveUAVA = not self.Train.SubwayTrain or not self.Train.SubwayTrain.ARS or not self.Train.SubwayTrain.ARS.NoUAVA + if HaveUAVA and self.Train.UAVA.Value == 0 then + self.EmergencyValve = true + --self.Train.ALS_ARS.UAVAContacts = true + if value > 0 then RunConsoleCommand("say","Autostop braking",self.Train:GetDriverName()) end + end + end +end + + +-- TODO: почиÑтить Ñто говно, Ñделать раздельные звуки пневмы +-- Calculate derivatives +function TRAIN_SYSTEM:equalizeCouplePressure(dT,pressure,train,valve_status,rate,close_rate) + if not valve_status then return 0 end + local other + if IsValid(train) then other = train.Pneumatic end + + -- Get second pressure + local P2 = 0 + if other then P2 = other[pressure] end + if (not other) and (valve_status) then + self.TrainLineOpen = (pressure == "TrainLinePressure") + rate = close_rate or rate + --self.TrainLinePressure_dPdT = 0.0 + end + + -- Calculate rate + local dPdT = rate * (P2 - self[pressure]) + -- Calculate delta + local dP = dPdT*dT + if other and other.ReadOnly then + dP = dP/250 + end + -- Equalized pressure + local P0 = (P2 + self[pressure]) / 2 + -- Update pressures + if dP > 0 then + self[pressure] = math.min(P0,self[pressure] + dP) + if other and not other.ReadOnly then + other[pressure] = math.max(P0,other[pressure] - dP) + end + else + self[pressure] = math.max(P0,self[pressure] + dP) + if other and not other.ReadOnly then + other[pressure] = math.min(P0,other[pressure] - dP) + end + end + -- Update delta if losing air + if self.TrainLineOpen and (pressure == "TrainLinePressure") then + self[pressure.."_dPdT"] = (self[pressure.."_dPdT"] or 0) + dPdT + end + return dP +end +function TRAIN_SYSTEM:UpdatePressures(Train,dT) + local frontBrakeOpen = Train.FrontBrakeLineIsolation.Value == 0 + local rearBrakeOpen = Train.RearBrakeLineIsolation.Value == 0 + local frontTrainOpen = Train.FrontTrainLineIsolation.Value == 0 + local rearTrainOpen = Train.RearTrainLineIsolation.Value == 0 + + local Ft = IsValid(Train.FrontTrain) and Train.FrontTrain + local Rt = IsValid(Train.RearTrain) and Train.RearTrain + local Fc, Rc = Train.FrontCouple or Train.FrontBogey, Train.RearCouple or Train.RearBogey + local Fb,Rb + if IsValid(Fc) and Fc.DepotPneumo then Fb = Fc.DepotPneumo end + if IsValid(Rc) and Rc.DepotPneumo then Rb = Rc.DepotPneumo end + + local frontBrakeLeak = false + local rearBrakeLeak = false + local frontTrainLeak = false + local rearTrainLeak = false + + -- Check if both valve on this train and connected train are open + if Ft and Ft.FrontBrakeLineIsolation then + if Ft.FrontTrain == Train then -- Nose to nose + frontBrakeLeak = frontBrakeOpen and Ft.FrontBrakeLineIsolation.Value==1 and 0.08 + frontTrainLeak = frontTrainOpen and Ft.FrontTrainLineIsolation.Value==1 and 0.08 + else -- Rear to nose + frontBrakeLeak = frontBrakeOpen and Ft.RearBrakeLineIsolation.Value==1 and 0.08 + frontTrainLeak = frontTrainOpen and Ft.RearTrainLineIsolation.Value==1 and 0.08 + end + else + frontBrakeLeak = frontBrakeOpen and 0.7 + frontTrainLeak = frontTrainOpen and not Fb and 0.3 + end + if Rt and Rt.FrontBrakeLineIsolation then + if Rt.FrontTrain == Train then -- Nose to nose + rearBrakeLeak = rearBrakeOpen and Rt.FrontBrakeLineIsolation.Value==1 and 0.08 + rearTrainLeak = rearTrainOpen and Rt.FrontTrainLineIsolation.Value==1 and 0.08 + else -- Rear to nose + rearBrakeLeak = rearBrakeOpen and Rt.RearBrakeLineIsolation.Value==1 and 0.08 + rearTrainLeak = rearTrainOpen and Rt.RearTrainLineIsolation.Value==1 and 0.08 + end + else + rearBrakeLeak = rearBrakeOpen and 0.7 + rearTrainLeak = rearTrainOpen and not Rb and 0.3 + end + + -- Equalize pressure + local Fl=math.min(0,self:equalizeCouplePressure(dT,"BrakeLinePressure",frontBrakeLeak==false and Ft,frontBrakeOpen,100,frontBrakeLeak or 0.08)*3)*(frontBrakeLeak and 1 or 0) + local Rl=math.min(0,self:equalizeCouplePressure(dT,"BrakeLinePressure",rearBrakeLeak==false and Rt,rearBrakeOpen,100,rearBrakeLeak or 0.08)*3)*(rearBrakeLeak and 1 or 0) + + Fl=Fl+math.min(0,self:equalizeCouplePressure(dT,"TrainLinePressure",frontTrainLeak==false and Ft or Fb,frontTrainOpen,100,frontTrainLeak or 0.08)*10)*(frontTrainLeak and 1 or 0) + Rl=Rl+math.min(0,self:equalizeCouplePressure(dT,"TrainLinePressure",rearTrainLeak==false and Rt or Rb,rearTrainOpen,100,rearTrainLeak or 0.08)*10)*(rearTrainLeak and 1 or 0) + + self.TrainLineOpen=frontTrainLeak or rearTrainLeak + self.BraieLineOpen=frontBrakeLeak or rearBrakeLeak + Train:SetPackedRatio("FrontLeak",Fl) + Train:SetPackedRatio("RearLeak",Rl) +end + +function TRAIN_SYSTEM:equalizePressure(dT,pressure,target,rate,fill_rate,no_limit,smooth) + if fill_rate and (target > self[pressure]) then rate = fill_rate end + + -- Calculate derivative + local dPdT = rate + if target < self[pressure] then dPdT = -dPdT end + local dPdTramp = math.min(1.0,math.abs(target - self[pressure])*(smooth or 0.5)) + dPdT = dPdT*dPdTramp + + -- Update pressure + self[pressure] = self[pressure] + dT * dPdT + self[pressure] = math.max(0.0,math.min(16.0,self[pressure])) + self[pressure.."_dPdT"] = (self[pressure.."_dPdT"] or 0) + dPdT + if no_limit ~= true then + if self[pressure] == 0.0 then self[pressure.."_dPdT"] = 0 end + if self[pressure] == 16.0 then self[pressure.."_dPdT"] = 0 end + end + return dPdT +end +------------------------------------------------------------------------------- +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + self.WeightLoadRatio = math.max(0,math.min(1,(Train:GetNW2Float("PassengerCount")/200))) + + ---------------------------------------------------------------------------- + -- Accumulate derivatives + self.TrainLinePressure_dPdT = 0.0 + self.BrakeLinePressure_dPdT = 0.0 + self.EPKPressure_dPdT = 0.0 + self.ReservoirPressure_dPdT = 0.0 + self.BrakeCylinderPressure_dPdT = 0.0 + self.ParkingBrakePressure_dPdT = 0.0 + + -- Reduce pressure for brake line + self.TrainToBrakeReducedPressure = math.min(5.1,self.TrainLinePressure) -- * 0.725) + -- Feed pressure to door line + self.DoorLinePressure = self.TrainToBrakeReducedPressure * 0.90 + + local trainLineConsumption_dPdT = 0.0 + local wagc = Train:GetWagonCount() + local pr_speed = 1.25*wagc --2 + if self.Leak or self.BraieLineOpen then pr_speed = pr_speed*0.7 end + local BLDisconnect = self.DisconnectType and Train.DriverValveBLDisconnect.Value > 0 or Train.DriverValveDisconnect.Value > 0 + local TLDisconnect = self.DisconnectType and Train.DriverValveTLDisconnect.Value > 0 or Train.DriverValveDisconnect.Value > 0 + -- 013: 1 Overcharge + if (self.RealDriverValvePosition == 1) and BLDisconnect and (TLDisconnect or self.BrakeLinePressure > self.TrainLinePressure) then + self:equalizePressure(dT,"BrakeLinePressure", self.TrainLinePressure, pr_speed) + end + + -- 013: 2 Normal pressure + if (self.RealDriverValvePosition == 2) and BLDisconnect and (TLDisconnect or self.BrakeLinePressure > 1.01*math.min(5.1,self.TrainToBrakeReducedPressure)) then + self:equalizePressure(dT,"BrakeLinePressure", 1.01*math.min(5.1,self.TrainToBrakeReducedPressure), pr_speed,nil, nil, 1.0)-- nil, 1.0) + end + + -- 013: 3 4.3 Atm + if (self.RealDriverValvePosition == 3) and BLDisconnect and (TLDisconnect or self.BrakeLinePressure > 1.01*math.min(4.3,self.TrainToBrakeReducedPressure)) then + self:equalizePressure(dT,"BrakeLinePressure", 1.01*math.min(4.3,self.TrainToBrakeReducedPressure), pr_speed,nil, nil, 1.0) + end + + -- 013: 4 4.0 Atm + if (self.RealDriverValvePosition == 4) and BLDisconnect and (TLDisconnect or self.BrakeLinePressure > 1.01*math.min(4.0,self.TrainToBrakeReducedPressure)) then + self:equalizePressure(dT,"BrakeLinePressure", 1.01*math.min(4.0,self.TrainToBrakeReducedPressure), pr_speed,nil, nil, 1.0) + end + + -- 013: 5 3.7 Atm + if (self.RealDriverValvePosition == 5) and BLDisconnect and (TLDisconnect or self.BrakeLinePressure > 1.01*math.min(3.7,self.TrainToBrakeReducedPressure)) then + self:equalizePressure(dT,"BrakeLinePressure", 1.01*math.min(3.7,self.TrainToBrakeReducedPressure), pr_speed,nil, nil, 1.0) + end + + -- 013: 6 3.0 Atm + if (self.RealDriverValvePosition == 6) and BLDisconnect and (TLDisconnect or self.BrakeLinePressure > 1.01*math.min(3.0,self.TrainToBrakeReducedPressure)) then + self:equalizePressure(dT,"BrakeLinePressure", 1.01*math.min(3.0,self.TrainToBrakeReducedPressure), pr_speed,nil, nil, 1.0) + end + + -- 013: 7 0.0 Atm + if (self.RealDriverValvePosition == 7) and BLDisconnect then + self:equalizePressure(dT,"BrakeLinePressure", 0.0, pr_speed) + end + trainLineConsumption_dPdT = trainLineConsumption_dPdT + math.max(0,self.BrakeLinePressure_dPdT) + local leak + local pr_speed = 1.25*wagc + self.Leak = false + if Train.U4 then + local leak = 0 + local epkDiff = math.abs(self.EPKPressure-self.BrakeLinePressure) + if BLDisconnect and Train.EPK.Value>0 then + if Train.U4.Value>0 then + self:equalizePressure(dT,"EPKPressure", self.BrakeLinePressure,math.min(1,epkDiff)*6,false,false,4*epkDiff*2) + end + if self.EPKPressure0.3 then + leak = self:equalizePressure(dT,"BrakeLinePressure", self.EPKPressure,pr_speed*epkDiff/2,pr_speed*epkDiff/2) + end + self.Leak = self.Leak or leak<-0.1 + end + if Train.EPK.Value == 0 or Train.U4.Value == 0 or self.ValveType==2 and not BLDisconnect then + leak = leak+self:equalizePressure(dT,"EPKPressure", 0,8,false,false,5) + end + Train:SetPackedRatio("EmergencyValveEPK_dPdT", -leak/wagc) + end + + Train:SetPackedRatio("Crane_dPdT", self.BrakeLinePressure_dPdT/wagc*3 ) + + if self.EmergencyValveDisable and (self.BrakeLinePressure-self.OldBrakeLinePressure)>0.01 then + self.EmergencyValveDisable=false + self.EmergencyValve=false + end + self.OldBrakeLinePressure = self.BrakeLinePressure + local leak = 0 + if self.EmergencyValve then + local leakst = 1.1*(Train:GetWagonCount())*math.Clamp(self.BrakeLinePressure/4,0,1) + leak = self:equalizePressure(dT,"BrakeLinePressure", 0.0,leakst*2,false,false,0.4) + if (leak >= -0.2*(Train:GetWagonCount()) or Train.UAVA.Value > 0) then + self.EmergencyValveDisable = true + end + self.Leak = true + end + local UAVABlocked = (self.BrakeLinePressure>3.5 and Train.UAVA.Value==0) + if (Train.UAVA.Blocked>0) ~= UAVABlocked then + Train.UAVA:TriggerInput("Block",UAVABlocked and 1 or 0) + end + + local UAVACBlocked = self.EmergencyValve and not self.EmergencyValveDisable + if (Train.UAVAC.Blocked>0) ~= UAVACBlocked then + Train.UAVAC:TriggerInput("Block",UAVACBlocked and 1 or 0) + end + + Train:SetPackedRatio("EmergencyValve_dPdT", -leak/wagc) + + local leak = 0 + if Train.EmergencyBrakeValve and Train.EmergencyBrakeValve.Value > 0.5 then + --local leakst = (1.6*(Train:GetWagonCount())*(self.BrakeLinePressure-math.min(2.5,self.TrainToBrakeReducedPressure))*0.9) + leak = self:equalizePressure(dT,"BrakeLinePressure", 0.0,(1.1*wagc)*2,false,false,0.4) + self.Leak = true + end + Train:SetPackedRatio("EmergencyBrakeValve_dPdT", -leak/wagc) + ---------------------------------------------------------------------------- + -- Fill brake cylinders + if Train.AirDistributorDisconnect.Value == 0 then + -- Valve #1 + self.BrakeCylinderRegulationError = self.BrakeCylinderRegulationError or (math.random()*0.20 - 0.10) + local error = self.BrakeCylinderRegulationError + if (Train.U7.Value == 1.0) and (Train.U6.Value == 0.0) then + if self.PN1 == 0 then + --1,2 + self.PN1 = math.min(self.TrainLinePressure,(1.1 + error + self.WeightLoadRatio*0.6)) + end + elseif self.PN1 ~= 0 then + self.PN1 = 0 + end + -- Valve #2 + if Train.U6.Value == 1.0 then + if self.PN2 == 0 then + self.PN2 = math.min(self.TrainLinePressure,(2.7 + error + self.WeightLoadRatio*1.2)) + if self.BePN2 == false and self.BrakeCylinderPressure > 1.6 then + Train:PlayOnce("PN2end","stop") + end + self.BePN2 = true + end + elseif self.PN2 ~= 0 then + self.PN2 = 0 + end + local targetPres = math.max(0,math.min(5.2,--[[ 1.5--]] 1.35*(math.min(5.1,self.TrainToBrakeReducedPressure) - self.BrakeLinePressure))) + if self.BCPressure < targetPres then + self.BCPressure = math.min(targetPres,self.BCPressure+(0.5+math.max(0,(targetPres-self.BCPressure)-0.2)*0.6)*dT) + elseif self.BCPressure > targetPres then + self.BCPressure = math.max(targetPres,self.BCPressure-2*dT) + end + local targetPressure = self.PN1+self.PN2+self.BCPressure + if math.abs(self.BrakeCylinderPressure - targetPressure) > 0.150 then + self.BrakeCylinderValve = 1 + end + if math.abs(self.BrakeCylinderPressure - targetPressure) < 0.025 then + self.BrakeCylinderValve = 0 + end + if self.BrakeCylinderValve == 1 then + self:equalizePressure(dT,"BrakeCylinderPressure", math.min(2.7 + self.WeightLoadRatio*1.3,targetPressure), 1+math.Clamp((self.BrakeCylinderPressure-0.5)/2.8,0,0.7), 3.50, nil, 0.8+math.Clamp((self.BrakeCylinderPressure-0.75)/0.6,0,1)) --0.75, 1.25) + end + trainLineConsumption_dPdT = trainLineConsumption_dPdT + math.max(0,self.BrakeCylinderPressure_dPdT*0.5) + else + self:equalizePressure(dT,"BrakeCylinderPressure", 0.0, 2.00) + end + if (self.BrakeCylinderPressure > 0.2 and self.BrakeCylinderPressure_dPdT > 0.1 or self.BrakeCylinderPressure_dPdT > 1) and not self.BrakeEngaged then + self.BrakeEngaged = true + Train:PlayOnce("brake","bass",1,math.Clamp(self.BrakeCylinderPressure_dPdT,0.7,1.2)) + end + if self.BrakeCylinderPressure < 1 and self.BrakeCylinderPressure_dPdT < -0.1 and self.BrakeEngaged then + self.BrakeEngaged = false + end + Train:SetPackedRatio("BrakeCylinderPressure_dPdT", self.BrakeCylinderPressure_dPdT) + self.TrainLinePressure = self.TrainLinePressure-math.max(0,self.BrakeCylinderPressure_dPdT*0.002) + if Train.U6.Value == 0 then + if self.BePN2 == true then + self.BePN2 = CurTime() + elseif self.BePN2 and self.BrakeCylinderPressure_dPdT > -0.2 then + Train:PlayOnce("PN2end","bass",math.Clamp(math.min(1,(CurTime()-self.BePN2)/1.3)*((3.2-self.BrakeCylinderPressure)/1.2),0,1)) + self.BePN2 = false + end + end + if self.BePN2 == false and (self.BrakeCylinderPressure_dPdT >= 0.2) then + self.BePN2 = nil + Train:PlayOnce("PN2end","stop") + end + + --Parking brake simulation + local PBPressure = math.Clamp(self.TrainLinePressure/5,0,1)*2.7 + if Train.ParkingBrake.Value == 0 then + self:equalizePressure(dT,"ParkingBrakePressure", PBPressure, 10,10,nil,0.5) + else + self:equalizePressure(dT,"ParkingBrakePressure", 0, 3,10,nil,0.5) + end + Train:SetPackedRatio("ParkingBrakePressure_dPdT",self.ParkingBrakePressure_dPdT) + trainLineConsumption_dPdT = trainLineConsumption_dPdT + math.max(0,self.ParkingBrakePressure_dPdT*0.5) + + -- Simulate cross-feed between different wagons + self:UpdatePressures(Train,dT) + + ---------------------------------------------------------------------------- + -- Simulate compressor operation and train line depletion + self.Compressor = Train.KK.Value * (Train.Electric.Aux750V and 1 or 0) + self.TrainLinePressure = self.TrainLinePressure - 0.07*trainLineConsumption_dPdT*dT -- 0.190 --0.170 + if self.Compressor == 1 then self:equalizePressure(dT,"TrainLinePressure", 10.0, 0.04) end + self:equalizePressure(dT,"TrainLinePressure", 0,0.001) + -- Overpressure + if self.TrainLinePressure > 9.2 then self.TrainLineOverpressureValve = 1 end + if self.TrainLineOverpressureValve == 1 then + self:equalizePressure(dT,"TrainLinePressure", 0.0, 0.2) + self.TrainLineOpen = true + if self.TrainLinePressure < 5.2 then self.TrainLineOverpressureValve = 0 end + end + + ---------------------------------------------------------------------------- + -- Pressure triggered relays + Train.SP3:TriggerInput("Open", self.BrakeCylinderPressure > 1.9) -- 1.8 - 2.0 + Train.SP3:TriggerInput("Close",self.BrakeCylinderPressure < 1.2) -- 0.9 - 1.5 + Train.SP1:TriggerInput( "Open", self.TrainLinePressure > 8.2) + Train.SP1:TriggerInput( "Close",self.TrainLinePressure < 6.3) + Train.SP2:TriggerInput("Open", self.BrakeLinePressure < 2.7) -- 2.7 - 2.9 + Train.SP2:TriggerInput("Close",self.BrakeLinePressure > 3.5) -- 3.5 - 4.5 + Train.SP5:TriggerInput("Set", self.EPKPressure > 1.5) -- 2.7 - 2.9 + Train.SQ1:TriggerInput("Set", (IsValid(Train.FrontBogey) and Train.FrontBogey.BrakeCylinderPressure+(not Train.FrontBogey.DisableParking and Train.FrontBogey.ParkingBrakePressure or 0) or self.BrakeCylinderPressure)>0.3) + Train.SQ3:TriggerInput("Set", Train.PassengerDoor and 0 or 1) + Train.SP4:TriggerInput("Set", self.BrakeCylinderPressure>0.3) -- 1.8 - 2.0 + Train.SP7:TriggerInput("Set", self.ParkingBrakePressure > 0.3) + + ---------------------------------------------------------------------------- + -- Simulate doors opening, closing + if self.DoorLinePressure > 3.5 then + if (Train.U2.Value == 1.0) and (Train.U3.Value == 0.0) and not self.DoorLeft then + self.DoorLeft = true + end + if (Train.U2.Value == 0.0) and (Train.U3.Value == 1.0) and not self.DoorRight then + self.DoorRight = true + end + if (Train.U1.Value == 1.0 or Train.U2.Value == 1.0 and Train.U3.Value == 1.0 or self.RZDTimer) and (self.DoorLeft or self.DoorRight) then + if not self.OpenWaitL or CurTime()-self.OpenWaitL < 0.2 then + self.DoorLeft = false + end + if not self.OpenWaitR or CurTime()-self.OpenWaitR < 0.2 then + self.DoorRight = false + end + --end + else + self.CloseValue = nil + end + if Train.U2.Value == 1.0 and Train.U3.Value == 1.0 then + self.RZDTimer = CurTime() + elseif self.RZDTimer and CurTime()-self.RZDTimer > 0.1 then + self.RZDTimer = nil + end + end + if self.U2 ~= Train.U2.Value then + self.U2 = Train.U2.Value + self:equalizePressure(dT,"TrainLinePressure", 0.0, 0.3) + if self.VDLoud and self.U2 > 0 and not Train.LeftDoorsOpen then Train:PlayOnce("vdol_loud"..self.VDLoudID,"bass",self.VDLoud) end + end + if self.U3 ~= Train.U3.Value then + self.U3 = Train.U3.Value + self:equalizePressure(dT,"TrainLinePressure", 0.0, 0.3) + if self.VDLoud and self.U3 > 0 and not Train.RightDoorsOpen then Train:PlayOnce("vdop_loud"..self.VDLoudID,"bass",self.VDLoud) end + end + if self.U1 ~= Train.U1.Value then + self.U1 = Train.U1.Value + self:equalizePressure(dT,"TrainLinePressure", 0.0, 0.3) + if self.VDLoud and self.U1 > 0 and (Train.RightDoorsOpen or Train.LeftDoorsOpen) then Train:PlayOnce("vzd_loud"..self.VDLoudID,"bass",self.VDLoud) end + end + if Train.CanStuckPassengerLeft then + for i in ipairs(self.LeftDoorStuck) do + self.LeftDoorStuck[i] = math.random() < (0.6+math.min(2,2-self.LeftDoorSpeed[i])*0.2)*Train.CanStuckPassengerLeft*0.6 and (math.random() > 0.7 and CurTime()+math.random()*15) + end + Train.CanStuckPassengerLeft = false + end + if Train.CanStuckPassengerRight then + for i in ipairs(self.RightDoorStuck) do + self.RightDoorStuck[i] = math.random() < (0.6+math.min(2,2-self.LeftDoorSpeed[i])*0.2)*Train.CanStuckPassengerRight*0.6 and (math.random() > 0.7 and CurTime()+math.random()*15) + end + Train.CanStuckPassengerRight = false + end + + + Train.LeftDoorsOpen = false + Train.RightDoorsOpen = false + local openL = true + local openR = true + for i=1,4 do + self.LeftDoorDir[i] = math.Clamp(self.LeftDoorDir[i]+dT/(self.DoorLeft and self.LeftDoorSpeed[i] or -self.LeftDoorSpeed[i]),-1,1) + self.RightDoorDir[i] = math.Clamp(self.RightDoorDir[i]+dT/(self.DoorRight and self.RightDoorSpeed[i] or -self.RightDoorSpeed[i]),-1,1) + self.LeftDoorState[i] = math.Clamp(self.LeftDoorState[i] + ((self.LeftDoorDir[i]/self.LeftDoorSpeed[i])*dT),self.LeftDoorStuck[i] and 0.3 or 0,1) + if self.LeftDoorState[i] == 0 or self.LeftDoorState[i] == 1 then self.LeftDoorDir[i] = 0 end + self.RightDoorState[i] = math.Clamp(self.RightDoorState[i] + ((self.RightDoorDir[i]/self.RightDoorSpeed[i])*dT),self.RightDoorStuck[i] and 0.3 or 0,1) + if self.RightDoorState[i] == 0 or self.RightDoorState[i] == 1 then self.RightDoorDir[i] = 0 end + if not Train.LeftDoorsOpen and self.LeftDoorState[i] > 0 then + Train.LeftDoorsOpen = true + end + if self.LeftDoorState[i] > self.LeftDoorSpeed[i]/20 then self.OpenWaitL = false end + if self.RightDoorState[i] > self.LeftDoorSpeed[i]/20 then self.OpenWaitR = false end + if self.LeftDoorState[i] > 0 then openL = false end + if self.RightDoorState[i] > 0 then openR = false end + if not Train.RightDoorsOpen and self.RightDoorState[i] > 0 then + Train.RightDoorsOpen = true + end + Train:SetPackedRatio("DoorL"..i,self.LeftDoorState[i]) + Train:SetPackedRatio("DoorR"..i,self.RightDoorState[i]) + if self.LeftDoorStuck[i] and (self.DoorLeft or type(self.LeftDoorStuck[i]) == "number" and CurTime()-self.LeftDoorStuck[i] > 0) then + self.LeftDoorStuck[i] = false + end + if self.RightDoorStuck[i] and (self.DoorRight or type(self.RightDoorStuck[i]) == "number" and CurTime()-self.RightDoorStuck[i] > 0) then + self.RightDoorStuck[i] = false + end + Train:SetPackedBool("DoorLS"..i,self.LeftDoorStuck[i]) + Train:SetPackedBool("DoorRS"..i,self.RightDoorStuck[i]) + end + if openL and not self.OpenWaitL then self.OpenWaitL = CurTime() end + if openR and not self.OpenWaitR then self.OpenWaitR = CurTime() end + Train:SetPackedBool("DoorL",self.DoorLeft) + Train:SetPackedBool("DoorR",self.DoorRight) + Train.SAD:TriggerInput("Set",not Train.RightDoorsOpen and not Train.LeftDoorsOpen) + + ---------------------------------------------------------------------------- + if self.DriverValveDisconnectPrevious ~= Train.DriverValveDisconnect.Value then + self.DriverValveDisconnectPrevious = Train.DriverValveDisconnect.Value + if self.DriverValveDisconnectPrevious == 0 then + self.DVDOffTimer = CurTime() + Train:PlayOnce("pneumo_disconnect2","cabin",0.9) + else + self.DVDOffTimer = nil + Train:PlayOnce("pneumo_disconnect1","cabin",0.9) + end + end + if self.DVDOffTimer then + if CurTime()-self.DVDOffTimer < 0.45 then + local pr_speed = 1.3*(Train:GetWagonCount()) --2 + self:equalizePressure(dT,"BrakeLinePressure", 0,pr_speed) + else + self.DVDOffTimer = nil + end + end + + + ---------------------------------------------------------------------------- + -- FIXME + Train:SetNW2Bool("FbI",Train.FrontBrakeLineIsolation.Value ~= 0) + Train:SetNW2Bool("RbI",Train.RearBrakeLineIsolation.Value ~= 0) + Train:SetNW2Bool("FtI",Train.FrontTrainLineIsolation.Value ~= 0) + Train:SetNW2Bool("RtI",Train.RearTrainLineIsolation.Value ~= 0) + Train:SetNW2Bool("AD",Train.AirDistributorDisconnect.Value == 0) + + + self.Timer = self.Timer or CurTime() + if ((CurTime() - self.Timer > 0.10) and (self.DriverValvePosition > self.RealDriverValvePosition)) then + self.Timer = CurTime() + Train:PlayOnce("br_013","cabin") + self.RealDriverValvePosition = self.RealDriverValvePosition + 1 + end + if ((CurTime() - self.Timer > 0.10) and (self.DriverValvePosition < self.RealDriverValvePosition)) then + self.Timer = CurTime() + Train:PlayOnce("br_013","cabin") + self.RealDriverValvePosition = self.RealDriverValvePosition - 1 + end + + --Pneumatic relays blocking + --[=[ if Train.LK1 then + if self.TrainLinePressure < 3 and Train.LK1.Blocked < 1 then + for i = 1,5 do + Train[LKNames[i]]:TriggerInput("Block", 1) + end + --Train.RKR:TriggerInput("Block", 1) + elseif self.TrainLinePressure > 3 and Train.LK1.Blocked > 0 then + for i = 1,5 do + Train[LKNames[i]]:TriggerInput("Block", 0) + end + --Train.RKR:TriggerInput("Block", 0) + end + end--]=] +end diff --git a/lua/metrostroi/systems/sys_81_718_ptti.lua b/lua/metrostroi/systems/sys_81_718_ptti.lua new file mode 100644 index 0000000..371726b --- /dev/null +++ b/lua/metrostroi/systems/sys_81_718_ptti.lua @@ -0,0 +1,251 @@ +-------------------------------------------------------------------------------- +-- 81-718 traction controller +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_718_PTTI") + +function TRAIN_SYSTEM:Initialize() + self.State = 0 + self.PTTIState = 0 + + + self.Zero = false + + self.FreqStart = nil + self.FreqState = 0 + self.FreqBlock = 0 + + self.T = 0 + + self.RN = 0 + self.RNState = 0 + self.RNResistance = 1e9 + self.RVState = 0.0 + self.BlockRV = false + self.RVResistance = 1e9 + self.SubIterations = 16 +end + +function TRAIN_SYSTEM:Inputs() + return { } +end + +function TRAIN_SYSTEM:Outputs() + return { "State","RN","RNState","RN","RNState","FreqState" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + +function TRAIN_SYSTEM:Think(dT,iter) + local Train = self.Train + local BUV = Train.BUV + local T = math.abs(BUV.ISet or 0) + local I = math.abs(Train.Electric.I13 + Train.Electric.I24)/2 + + if self.State ~= BUV.PTTIState then + --self.PTTIState = BUV.PTTIState or 0 + if self.State ~= 0 then + self.State = 0 + else + self.State = BUV.PTTIState or 0 + end + end + + if self.State ~= 0 and T == 0 and not self.Zero and math.abs(I) < 25 then + self.Zero = true + self.State = 0 + end + + if self.State == 0 then + self.Zero = false + self.RN = 0 + self.RV = false + self.RNState = 0 + self.RVState = 0 + self.FreqStart = nil + self.FreqState = 0 + self.RNBrakeReset = false + self.T = 0 + self.PrepareElectric = false + end + + if self.State == 1 then + if not self.RV and self.RN == 0 then + self.RN = 1 + self.RV = false + self.RNState = 0 + self.RVState = 0 + self.FreqState = 0 + self.FreqStart = nil + end + ---[[ + if BUV.FreqBlock == 0 and not self.FreqStart then self.FreqStart = CurTime() end + if BUV.FreqBlock > 0 and T > 0 then + self.FreqState = 1/3 + self.FreqStart = CurTime() + T = 100 + elseif T > 0 and self.FreqStart and self.FreqStart ~= true then + self.FreqState = 1/3+(math.max(0,math.floor((CurTime()-self.FreqStart)/2*12)/12))*(2/3) + --print(math.floor((CurTime()-self.FreqStart)/1.5*12)) + --self.FreqState = 1/3+math.max(0,(CurTime()-self.FreqStart)*1*(2/3))--math.max(0,math.floor((CurTime()-self.FreqStart)*1.5*8)/8)*(2/3) + T = self.FreqState*T + end + if self.FreqState > 1 and self.FreqStart then + self.FreqStart = true + self.FreqState = 1 + end--]] + end + + if self.State == -1 then + if self.PrepareElectric and (CurTime()-self.PrepareElectric > 0.8 or I > T*0.8) then + --self.RVState = 0.01 + self.RN = self.RVState == 1 and 1 or 0 + self.RV = self.RVState < 1 + if self.RN == 0 then + --self.RNBrakeReset = true + self.RNState = 0 + end + self.PrepareElectric = false + end + --[[ if self.RNState == 0 or self.RN > 0 then + self.RNBrakeReset = false + end + if self.RNBrakeReset then + self.RNState = math.max(0,math.min(1,self.RNState-0.3*dT)) + end--]] + --[[ if not self.RV and self.RN == 0 or self.PrepareElectric then + self.RN = 0 + self.RV = false + self.RNState = 0.93-(math.max(0,math.min(1,(Train.Engines.Speed-18)/60))^0.6)*0.85 + self.RVState = 1-math.max(0,math.min(1,((Train.Engines.Speed-50)/32))^0.8)*0.75 + + if not self.PrepareElectric then self.PrepareElectric = CurTime() end + end--]] + if not self.RV and self.RN == 0 and not self.PrepareElectric then + self.RN = 0 + self.RV = false + self.RNState = 0.93-(math.max(0,math.min(1,(Train.Engines.Speed-18)/60))^0.6)*0.85 + self.RVState = 1-(math.max(0,math.min(1,(Train.Engines.Speed-50)/32))^0.8)*0.75 + + self.PrepareElectric = CurTime() + end + end + if (self.RN > 0 or self.RV) and self.SpeedUp and I > T*0.8 then self.SpeedUp = false end + --if self.RN == 0 and not self.RV and not self.SpeedUp then self.SpeedUp = true end + + if T < self.T then + self.T = self.T+(T*(0.95+math.random()*0.1)-self.T)*dT*4--6 + else + self.T = self.T+(T*(0.95+math.random()*0.1)-self.T)*dT*1.5--3 + end + self:SolveRV(Train,self.T,dT,I,self.State < 0,self.State == 1 and Train.BUV.BlockRV) + self:SolveRN(Train,self.T,dT,I,self.State < 0,self.State == 1 and T <= 150) +end + +function TRAIN_SYSTEM:SolveRN(Train,T,dT,I,brake,start) + -- General state + local Active = self.RN > 0--and T > 0 + --local I = math.abs(Train.Electric.I13 + Train.Electric.I24)/2 + self.RNPrevCurrent = Current + local rnd = 30+math.random()*20 + if self.SpeedUp then + rnd = brake and 25+((Train.Engines.Speed/80)^4)*100 or 25 + --print(rnd) + end + -- Update RN controller signal + if Active then + local sign = brake and 1 or 1 + -- Generate control signal + local dC = math.min(math.abs(T-I),300) + + if T == 0 then + self.RNState = math.max(0,self.RNState-5*dT*sign) + elseif I > T then + self.RNState = math.max(0,math.min(start and 0.1 or 1,self.RNState-dC*1/rnd*dT*sign)) + else + self.RNState = math.max(0,math.min(start and 0.1 or 1,self.RNState+dC*1/rnd*dT*sign)) + end + if (not brake and self.RNState == 1 or brake and self.RNState == 0) and self.RN > 0 and not self.RV then + self.RV = true + self.RN = 0 + self.RVState = brake and 0.99 or 0.01 + end + end +end +function TRAIN_SYSTEM:SolveRV(Train,T,dT,I,brake,block) + -- General state + local Active = self.RV and (not block or self.RVState > 0) + --local I = math.abs(Train.Electric.I13 + Train.Electric.I24)/2 + self.RNPrevCurrent = Current + + -- Controllers resistance + local Resistance = 0.036 + + local speedMul = math.max(0,math.min(1,(Train.Engines.Speed-40)/40)) + local rnd = 30+math.random()*(20) + if self.SpeedUp then + rnd = brake and 25+((Train.Engines.Speed/80)^4)*100 or 25 + end + + -- Update RV controller signal + if Active then + local sign = brake and -1 or 1 + -- Generate control signal + local dC = math.min(math.max(math.abs(T-I),1, 300)) + if not self.PrepareElectric then + if T == 0 or block then + self.RVState = math.max(0,self.RVState-5*dT*sign) + elseif brake and I T then + self.RVState = math.max(0,math.min(1,self.RVState-dC*1/rnd*dT*sign)) + else + self.RVState = math.max(0,math.min(1,self.RVState+dC*1/rnd*dT*sign)) + end + end + + -- Generate resistance + local keypoints = { + 0.10,0.008, + 0.20,0.018, + 0.30,0.030, + 0.40,0.047, + 0.50,0.070, + 0.60,0.105, + 0.70,0.165, + 0.80,0.280, + 0.90,0.650, + 1.00,15.00, + } + local TargetField + if self.State < 0 then + TargetField = 0.4 + 0.6*self.RVState + else + TargetField = 0.4 + 0.6*(1-self.RVState) + end + --TargetField = 0.4 + 0.6*(1-self.RVState) + local Found = false + for i=1,#keypoints/2 do + local X1,Y1 = keypoints[(i-1)*2+1],keypoints[(i-1)*2+2] + local X2,Y2 = keypoints[(i)*2+1],keypoints[(i)*2+2] + + if (not Found) and (not X2) then + Resistance = Y1 + Found = true + elseif (TargetField >= X1) and (TargetField < X2) then + local T = (TargetField-X1)/(X2-X1) + Resistance = Y1 + (Y2-Y1)*T + Found = true + end + if (self.State > 0 and self.RVState == 0 or self.State < 0 and self.RVState == 1) and self.RV and self.RN == 0 then + self.RV = false + self.RN = 1 + self.RNState = brake and 0.01 or 0.99 + end + end + end + -- Set resistance + self.RVResistance = Resistance + 1e9 * (Active and 0 or 1) +end + diff --git a/lua/metrostroi/systems/sys_81_718_route_number.lua b/lua/metrostroi/systems/sys_81_718_route_number.lua new file mode 100644 index 0000000..7002644 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_718_route_number.lua @@ -0,0 +1,75 @@ +-------------------------------------------------------------------------------- +-- 81-718 Route number helper system +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_718_RouteNumber") +TRAIN_SYSTEM.DontAccelerateSimulation = true +if TURBOSTROI then return end + +function TRAIN_SYSTEM:Initialize(parameter) + self.Max = parameter or 2 + if not TURBOSTROI then + local num = IsValid(self.Train.Owner) and (tonumber(self.Train.Owner:GetInfo("metrostroi_route_number","61")) or 0) + self.RouteNumber = Format("%03d",num*(10^(3-self.Max))%1000) + self.Train:SetNW2String("RouteNumber",self.RouteNumber) + end +end + +function TRAIN_SYSTEM:Outputs() + return {} +end + +function TRAIN_SYSTEM:Inputs() + return {"1+","2+","1-","2-"} +end + +if SERVER then + function TRAIN_SYSTEM:TriggerInput(name,value) + local Train = self.Train + local id = tonumber(name[1]) + if name[2]=="+" and value>0 then + local num = tonumber(self.RouteNumber[id])+1 + if num > 9 then num = 0 end + self.RouteNumber = self.RouteNumber:SetChar(id,num) + Train:SetNW2String("RouteNumber",self.RouteNumber) + end + if name[2]=="-" and value>0 then + local num = tonumber(self.RouteNumber[id])-1 + if num < 0 then num = 9 end + self.RouteNumber = self.RouteNumber:SetChar(id,num) + Train:SetNW2String("RouteNumber",self.RouteNumber) + end + end +else + function TRAIN_SYSTEM:ClientInitialize(parameter) + self.Reloaded = false + end + + function TRAIN_SYSTEM:ClientThink() + local Train = self.Train + local scents = Train.ClientEnts + + if self.RouteNumber ~= Train:GetNW2String("RouteNumber","00") then + self.RouteNumber = Train:GetNW2String("RouteNumber","00") + self.Reloaded = false + end + if not scents["route1"] or self.Reloaded then return end + + self.Reloaded = true + local rn = Format("%03d",self.RouteNumber) + print(self.RouteNumber) + for i=1,2 do + if IsValid(scents["route"..i]) then + scents["route"..i]:SetSkin(rn[i]) + end + if IsValid(scents["route"..i.."_s"]) then + scents["route"..i.."_s"]:SetSkin(rn[i]) + end + if IsValid(scents["route"..i.."_r"]) then + scents["route"..i.."_r"]:SetSkin(rn[i]) + end + end + end +end diff --git a/lua/metrostroi/systems/sys_81_719_electric.lua b/lua/metrostroi/systems/sys_81_719_electric.lua new file mode 100644 index 0000000..d267c24 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_719_electric.lua @@ -0,0 +1,452 @@ +-------------------------------------------------------------------------------- +-- 81-719 electric schemes +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_719_Electric") +TRAIN_SYSTEM.DontAccelerateSimulation = false + +function TRAIN_SYSTEM:Initialize() + -- General power output + Metrostroi.BaseSystems["81_718_Electric"].Initialize(self) + for k,v in pairs(Metrostroi.BaseSystems["81_718_Electric"]) do + if not self[k] and type(v) == "function" then + self[k] = v + end + end +end + +function TRAIN_SYSTEM:Inputs() + return { } +end + +function TRAIN_SYSTEM:Outputs() + return { "I13","I24","Itotal", + "Main750V", "Power750V", + } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + + +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:Think(dT,iter) + local Train = self.Train + -- local dT = dT/8 + ---------------------------------------------------------------------------- + -- Voltages from the third rail + ---------------------------------------------------------------------------- + self.Main750V = Train.TR.Main750V + self.Aux750V = Train.TR.Main750V + self.Power750V = self.Main750V*Train.GV.Value + + + ---------------------------------------------------------------------------- + -- Information only + ---------------------------------------------------------------------------- + self.Aux80V = BBE and 82 or 65 + self.Lights80V = BBE and 82 or 0 + self.Battery80V = 65--(Train.VB.Value > 0) and (BBE and 82 or 65) or 0 + + ---------------------------------------------------------------------------- + -- Some internal electric + ---------------------------------------------------------------------------- + local P = self.Battery80V > 62 and 1 or 0 + local HV = 550 < self.Main750V and self.Main750V < 975 and 1 or 0 + + + ---------------------------------------------------------------------------- + -- Solve circuits + ---------------------------------------------------------------------------- + self:SolvePowerCircuits(Train,dT) + if iter == 1 then + self:SolveControlCircuits(Train,dT) + end + + + ---------------------------------------------------------------------------- + -- Calculate current flow out of the battery + ---------------------------------------------------------------------------- + --local totalCurrent = 5*A30 + 63*A24 + 16*A44 + 5*A39 + 10*A80 + --local totalCurrent = 20 + 60*DIP +end +local S = {} +local wires = {1,2,3,4,5,6,7,8,9,10,11,-11,12,13,14,15,16,17,18,19,20,22,23,24,26,27,28,29,30,31,32,33,34,35,36,37,38,40,41,42,44,45,47,48,49,50,51,-51,54,55,56,57,58,59,67,74,83,84,87,88,89,90,-34,} +local min = math.min +local max = math.max + +local function clamp(val) + return max(-1,min(1,val)) +end +function TRAIN_SYSTEM:SolveControlCircuits(Train,dT) + local B = (Train.Battery.Voltage > 62) and 1 or 0 + local T = Train.SolverTemporaryVariables + if not T then + T = {} + for i,v in ipairs(wires) do T[v] = 0 end + Train.SolverTemporaryVariables = T + end + for i,v in ipairs(wires) do T[v] = min(Train:ReadTrainWire(v),1) end + local BUP = Train.BUP + local BUV = Train.BUV + + local BKVA = Train.BKVA + local BUVS = Train.BUVS + local BBE = Train.BBE + + local Panel = Train.Panel + + --S[303] = B*Train.VB.Value + S[305] = clamp(B+T[50]*Train.SF2.Value)*Train.VB.Value + --S[305] = S[303] + --S[310] = B*Train.VB.Value + S[550] = S[305]*Train.SF2.Value --310 + Train:WriteTrainWire(50,S[550]) + --S[311] = B*Train.VB.Value + S[334] = S[305]*Train.SF45.Value --311 + S[312] = S[305]*Train.SF3.Value --311 + BBE.KMPower = S[334] + BBE.Power = S[305] + Panel.V1 = S[312] + + --1.2. Цепи зарÑда аккумулÑторной батареи. Включение ББЭ. Страница 7 + BBE.Activate = T[18]*Train.SF12.Value--S[324] --Включение ББЭ + + + --1.5. Ðварийное отключение ББЭ и Ñигнализации Страница 9 + Train:WriteTrainWire(20,BBE.Error) + BBE.Deactivate = T[19]*Train.SF13.Value --Включение ББЭ + + --2.1. ОÑвещение вагонов оÑновное. Страница 9 + BBE.KM2Power = T[38]*Train.SF16.Value + + Panel.EL7_30 = S[305]*BBE.KM2*Train.SF44.Value--S[409] + + + --2.2. Ðварийное оÑвещение Ñалонов и кабины. Страница 10 + --S[407] = S[312]*Train.SF44.Value + Panel.EL3_6 = S[312]*Train.SF44.Value + S[322] = T[50]*Train.SF11.Value + Panel.EL1 = S[322] + S[321] = T[50]*Train.SF10.Value + --2.4. ПодÑветка прибора. Страница 10 + S[328] = T[50]*Train.SF72.Value + + Train:WriteTrainWire(29,Train.SF56.Value*T[50]*Train.SP1.Value) --S[529] + + BKVA.KM2 = clamp(T[29]+T[30]*Train.SF22.Value)--[[*тепловое реле]] + Train.KK:TriggerInput("Set",(self.Main750V > 200 and 1 or 0)*BKVA.KM2)--S[208] + + --5.1. ВентилÑÑ†Ð¸Ñ Ñалонов. Страница 13 + S[307] = S[312]*Train.SF34.Value + + BUVS.KM1 = T[40]*Train.SF23.Value + BUVS.KV1 = S[307]*BUVS.KM1 --Контроль + Train:WriteTrainWire(42,1-BUVS.KV1)--Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ + + BUVS.KM2 = T[41]*Train.SF23.Value + BUVS.KV2 = S[307]*BUVS.KM2 --Контроль + Train:WriteTrainWire(49,1-BUVS.KV2) --Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ + + + --352-353-354 + S[354] =(1-BKVA.KM4) + Train.U1:TriggerInput("Set", T[32]*S[354]) + + S[358] = T[33]*Train.SF19.Value + --[[ S[357] = T[36]*Train.SF18.Value+S[358] + S[359] = T[37]*Train.SF20.Value+S[358] + Train.U2:TriggerInput("Set",S[357]) + Train.U3:TriggerInput("Set",S[359])--]] + Train.U2:TriggerInput("Set",T[36]*Train.SF18.Value+S[358]) + Train.U3:TriggerInput("Set",T[37]*Train.SF20.Value+S[358]) + + --8.3. Контроль Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹. Страницы 19-20 + --312-SA15..SA22-351 + BKVA.KM4 = S[312]*Train.SAD.Value--S[351] + Train:WriteTrainWire(34,T[-34]*Train.SAD.Value) --Разрыв Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ñ Ð¾Ð½Ñ†ÐµÐ²Ñ‹Ñ… переключателей + Panel.HL13 = S[312]*S[354] + + --9. БЛОКИРОВКРПОСТОВ УПРÐВЛЕÐИЯ И ФОРМИРОВÐÐИЕ ЦЕПЕЙ УПРÐВЛЕÐИЯ ДВИЖЕÐИЕМ СОСТÐÐ’Ð + --Страница 20-21 + --9.4 + --[[ S[335] = T[15]*Train.SF14.Value + S[337] = T[16]*Train.SF5.Value + BKVA.KM3 = S[335]+S[337]--]] + BKVA.KM3 = T[15]*Train.SF14.Value+T[16]*Train.SF5.Value + + --S[517] = (1-BKVA.KM3) + Train:WriteTrainWire(17,(1-BKVA.KM3))--S[517] + + --10. ЦЕПИ БЕЛЫХ ФÐР И ЛÐМП СИГÐÐЛИЗÐЦИИ СТОЯÐОЧÐОГО ТОРМОЗР+ --Страница 322 + + + --316-SF41-365-KM2/6-390 + --390-SA1/1(SA2/1)-367(368)-R9(R10)-HL17-19(HL20-22) + S[512] = S[328]*Train.SQ1.Value + Train:WriteTrainWire(12,S[512]) + Panel.HL46 = S[512] + + --11. ЗÐЩИТРСИЛОВЫХ ЦЕПЕЙ. ЦЕПИ КОÐТРОЛЯ СОСТОЯÐИЯ ЗÐЩИТЫ. + --11.1. Цепи быÑтродейÑтвующих автоматичеÑких выключателей. + --Страница 23 + S[306] = S[312]*Train.SF27.Value + Train.BVA.Power = S[306] + S[3061] = S[306]*Train.SF46.Value + Train.BVA.ControlPower = S[3061] + + --312=314 + S[314] = clamp(S[312]*Train.SF4.Value*BKVA.KM3+S[3061]*BUV.O75V) + BUV.Power = S[314] + Train.BSKA.Power = S[314] + Train.PTTI.Power = S[314] + + + --S[526] = T[45]*Train.SB12.Value + Train.BVA.Reset = T[26] + + --11.4 + Train.BVA.Disable = T[22] + Panel.HL25 = S[3061]*BUV.ORP + --Мы получаем землю + S[528] = Panel.HL25*100+BUV.OIZ + Train:WriteTrainWire(28,S[528]) + Panel.HL6 = T[28] + Panel.TW28= S[528] + + --14.1. Ходовые режимы оÑновного управлениÑ. Страница 32-33 + Train.KMR1:TriggerInput("Set",BUV.OVP*(1-Train.KMR2.Value)*S[314]) + Train.KMR2:TriggerInput("Set",BUV.ONZ*(1-Train.KMR1.Value)*S[314]) + BUV.IRV = S[314]*Train.KMR1.Value + BUV.IRN = S[314]*Train.KMR2.Value + + BUV.IRV = S[314]*Train.KMR1.Value + BUV.IRN = S[314]*Train.KMR2.Value + Train.K1:TriggerInput("Set",S[314]*BUV.OLK) + Train.K2:TriggerInput("Set",S[314]*BUV.OKX) + Train.K3:TriggerInput("Set",S[314]*BUV.OKT) + + BUV.IKX = Train.K2.Value + BUV.IKT = Train.K3.Value + BUV.ILT = Train.K1.Value + + --15. УПРÐВЛЕÐИЕ СИЛОВЫМ ПРИВОДОМ Ð’ ТОРМОЗÐЫХ РЕЖИМÐÐ¥ Страница 36-37 + --КТ + --БКБД головного-511-К4БУВС-БКБД хвоÑтового + --S[5092] = S[5091]+T[08]*(1-BUVS.KM3) + --S[5092] = T[09]*Train.SF26.Value+T[08]*(1-BUVS.KM3) + BUVS.KM3 = S[314]*BUV.ORMT + BUVS.KM4 = S[314]*BUV.ORKT + Train.U6:TriggerInput("Set",T[09]*Train.SF26.Value+T[08]*(1-BUVS.KM3))--S[5092] + + Train:WriteTrainWire(11,BUVS.KM4+Train.SP4.Value) + + Train.U7:TriggerInput("Set",T[10]+Train.SF29.Value*BUV.OV1) + + Train:WriteTrainWire(23,BUV.Power*BUV.OSN) + + --19. УПРÐВЛЕÐИЕ ОТЖÐТИЕМ ТОКОПРИЕМÐИКОВ + Train.U5:TriggerInput("Set",T[24]*T[59]) + + Panel.AnnouncerPlaying = T[51] + Panel.AnnouncerBuzz = T[-51] + + + --Передача Ñигналов Ñ Ð¿Ð¾ÐµÐ·Ð´Ð½Ñ‹Ñ… проводов в БУВ + local BUVPower = BUV.Power + BUV.IX = BUVPower*T[01] + BUV.IT = BUVPower*T[02] + BUV.IU1 = BUVPower*T[03] + BUV.IU2 = BUVPower*T[04] + BUV.IVP = BUVPower*T[05] + BUV.INZ = BUVPower*T[06] + BUV.ITARS = BUVPower*T[07] + BUV.ITEM = BUVPower*T[14] + BUV.IM = BUVPower*T[13] + BUV.IVZ = BUVPower*T[26] + BUV.IPROV = BUVPower*T[27] + BUV.IPROV0 = BUVPower*T[47] + BUV.IXP = BUVPower*T[55] + BUV.IU1R = BUVPower*T[56] + BUV.IVR = BUVPower*T[57] + BUV.INR = BUVPower*T[58] + BUV.IAVR = BUVPower*(1-Train.SP3.Value) --737-700 14.3. Режим "МÐÐЕВР". + --BUV. = BUVPower*Train:ReadTrainWire(45) + self.Schemes = S +end +--[=[ +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:SolvePowerCircuits(Train,dT) + -- Apply K2, K3 contactors + self.R1 = self.R1 + 1e9*(1 - math.min(1,Train.K2.Value+Train.K3.Value)) + self.R2 = self.R2 + 1e9*(1 - math.min(1,Train.K2.Value+Train.K3.Value)) + + -- Thyristor contrller + self.Rs1 = Train.PTTI.RVResistance or 1e9 + self.Rs2 = Train.PTTI.RVResistance or 1e9 + + -- Calculate total resistance of engines winding + local RwAnchor = Train.Engines.Rwa*2 -- Double because each set includes two engines + local RwStator = Train.Engines.Rws*2 + -- Total resistance of the stator + shunt + self.Rstator13 = (RwStator^(-1) + self.Rs1^(-1))^(-1) + self.Rstator24 = (RwStator^(-1) + self.Rs2^(-1))^(-1) + -- Total resistance of entire motor + self.Ranchor13 = RwAnchor + self.Ranchor24 = RwAnchor + + -- Calculate electric power network + --FIXME + if Train.PTTI.State < 0 then + self:SolvePT(Train) + else + self:SolvePP(Train) + end + + -- Calculate current through rheostats 1, 2 + self.IR1 = self.I13 + self.IR2 = self.I24 + + -- Calculate induction properties of the motor + self.I13SH = self.I13SH or self.I13 + self.I24SH = self.I24SH or self.I24 + + -- Time constant + local T13const1 = math.max(16.00,math.min(28.0,(self.R13^2) * 2.0)) -- R * L + local T24const1 = math.max(16.00,math.min(28.0,(self.R24^2) * 2.0)) -- R * L + -- Total change + local dI13dT = T13const1 * (self.I13 - self.I13SH) * dT + local dI24dT = T24const1 * (self.I24 - self.I24SH) * dT + + -- Limit change and apply it + if dI13dT > 0 then dI13dT = math.min(self.I13 - self.I13SH,dI13dT) end + if dI13dT < 0 then dI13dT = math.max(self.I13 - self.I13SH,dI13dT) end + if dI24dT > 0 then dI24dT = math.min(self.I24 - self.I24SH,dI24dT) end + if dI24dT < 0 then dI24dT = math.max(self.I24 - self.I24SH,dI24dT) end + self.I13SH = self.I13SH + dI13dT + self.I24SH = self.I24SH + dI24dT + self.I13 = self.I13SH + self.I24 = self.I24SH + + --FIXME + if Train.PTTI.State > 0 then -- PS + self.I13 = self.I13 * Train.K2.Value * Train.K1.Value + self.I24 = self.I24 * Train.K2.Value * Train.K1.Value + + self.Itotal = Train.Electric.I13 + Train.Electric.I24 + else -- PT + self.I13 = self.I13 * Train.K3.Value + self.I24 = self.I24 * Train.K3.Value + + self.Itotal = Train.Electric.I13 + Train.Electric.I24 + end + + -- Calculate extra information + self.Uanchor13 = self.I13 * self.Ranchor13 + self.Uanchor24 = self.I24 * self.Ranchor24 + + + + ---------------------------------------------------------------------------- + -- Calculate current through stator and shunt + self.Ustator13 = self.I13 * self.Rstator13 + self.Ustator24 = self.I24 * self.Rstator24 + + self.Ishunt13 = self.Ustator13 / self.Rs1 + self.Istator13 = self.Ustator13 / RwStator + self.Ishunt24 = self.Ustator24 / self.Rs2 + self.Istator24 = self.Ustator24 / RwStator + + --FIXME + if Train.PTTI.State < 0 then + local I1,I2 = self.Ishunt13,self.Ishunt24 + self.Ishunt13 = -I2 + self.Ishunt24 = -I1 + + I1,I2 = self.Istator13,self.Istator24 + self.Istator13 = -I2 + self.Istator24 = -I1 + end + + + -- Sane checks + if self.R1 > 1e5 then self.IR1 = 0 end + if self.R2 > 1e5 then self.IR2 = 0 end + + -- Calculate power and heating --FIXME + local K = 12.0*1e-5 + local H = (10.00+(15.00*Train.Engines.Speed/80.0))*1e-3 + self.P1 = (self.IR1^2)*self.R1 + self.P2 = (self.IR2^2)*self.R2 + self.T1 = (self.T1 + self.P1*K*dT - (self.T1-25)*H*dT) + self.T2 = (self.T2 + self.P2*K*dT - (self.T2-25)*H*dT) + self.Overheat1 = math.min(1-1e-12, + self.Overheat1 + math.max(0,(math.max(0,self.T1-750.0)/400.0)^2)*dT ) + self.Overheat2 = math.min(1-1e-12, + self.Overheat2 + math.max(0,(math.max(0,self.T2-750.0)/400.0)^2)*dT ) + + -- Energy consumption + self.ElectricEnergyUsed = self.ElectricEnergyUsed + math.max(0,self.EnergyChange)*dT + self.ElectricEnergyDissipated = self.ElectricEnergyDissipated + math.max(0,-self.EnergyChange)*dT +end + +function TRAIN_SYSTEM:SolvePP(Train) + -- Calculate total resistance of each branch + local R1 = self.Ranchor13 + self.Rstator13 + local R2 = self.Ranchor13 + self.Rstator13 + local CircuitClosed = (self.Power750V*Train.K1.Value > 0) and 1 or 0 + + -- Main circuit parameters + local V = self.Power750V*Train.K1.Value*Train.PTTI.RNState + local E1 = Train.Engines.E13 + local E2 = Train.Engines.E24 + + -- Calculate current through engines 13, 24 + self.I13 = math.max(0,((V - E1)/R1)*CircuitClosed) + self.I24 = math.max(0,((V - E2)/R2)*CircuitClosed) + + -- Total resistance (for induction RL circuit) + self.R13 = R1 + self.R24 = R2 + + -- Calculate everything else + self.U13 = self.I13*R1 + self.U24 = self.I24*R2 + self.Utotal = (self.U13 + self.U24)/2 + self.Itotal = Train.Electric.I13 + Train.Electric.I24 + -- Energy consumption + self.EnergyChange = math.abs((self.I13^2)*R1) + math.abs((self.I24^2)*R2) +end + +function TRAIN_SYSTEM:SolvePT(Train) + -- Winding resistances + local R1 = self.Ranchor13 + self.Rstator13 + local R2 = self.Ranchor24 + self.Rstator24 + -- Total resistance of the entire braking rheostat + local R3 = --[[ (1.730+0.4)*--]] 2.8*(1-0.95*Train.PTTI.RNState)--0.84 + -- Main circuit parameters + local V = self.Power750V*Train.K1.Value + local E1 = Train.Engines.E13 + local E2 = Train.Engines.E24 + + -- Calculate current through engines 13, 24 + self.I13 = -((E1*R2 + E1*R3 - E2*R3 - R2*V)/(R1*R2 + R1*R3 + R2*R3)) + self.I24 = -((E2*R1 - E1*R3 + E2*R3 - R1*V)/(R1*R2 + R1*R3 + R2*R3)) + + -- Total resistance (for induction RL circuit) + self.R13 = R3+((R1^(-1) + R2^(-1))^(-1)) + self.R24 = R3+((R1^(-1) + R2^(-1))^(-1)) + + -- Calculate everything else + self.U13 = self.I13*R1 + self.U24 = self.I24*R2 + self.Utotal = (self.U13 + self.U24)/2 + self.Itotal = Train.Electric.I13 + Train.Electric.I24 + + -- Energy consumption + self.EnergyChange = -math.abs(((0.5*self.Itotal)^2)*self.R13) +end +--]=] \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_81_719_panel.lua b/lua/metrostroi/systems/sys_81_719_panel.lua new file mode 100644 index 0000000..b99ce73 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_719_panel.lua @@ -0,0 +1,80 @@ +-------------------------------------------------------------------------------- +-- 81-719 controller panel +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_719_Panel") + +function TRAIN_SYSTEM:Initialize() + -- Выключатель батареи (ВБ) + self.Train:LoadSystem("VB","Relay","Switch",{bass = true}) + + self.Train:LoadSystem("SF2" ,"Relay","Switch", {bass = true, normally_closed = true}) --Поездное питание + self.Train:LoadSystem("SF3" ,"Relay","Switch", {bass = true, normally_closed = true}) --Вагонное питание, ЦУВ + self.Train:LoadSystem("SF4" ,"Relay","Switch", {bass = true, normally_closed = true}) --Питание БУВ, ПТТИ, БСКÐ, ЦУВ + self.Train:LoadSystem("SF5" ,"Relay","Switch", {bass = true, normally_closed = true}) --Управление БКЦУ + self.Train:LoadSystem("SF10","Relay","Switch", {bass = true, normally_closed = true}) --ВентилÑторы 1 группа + self.Train:LoadSystem("SF11","Relay","Switch", {bass = true, normally_closed = true}) --ВентилÑторы 2 группа + self.Train:LoadSystem("SF12","Relay","Switch", {bass = true, normally_closed = true}) --Включение ББЭ + self.Train:LoadSystem("SF13","Relay","Switch", {bass = true, normally_closed = true}) --Отключение ББЭ + self.Train:LoadSystem("SF14","Relay","Switch", {bass = true, normally_closed = true}) --Контактор ЦУВ + self.Train:LoadSystem("SF15","Relay","Switch", {bass = true, normally_closed = true}) --Резервное включение ЦУВ + self.Train:LoadSystem("SF16","Relay","Switch", {bass = true, normally_closed = true}) --Управление оÑвещением Ñалона + self.Train:LoadSystem("SF17","Relay","Switch", {bass = true, normally_closed = true}) --Закрытие дверей + self.Train:LoadSystem("SF18","Relay","Switch", {bass = true, normally_closed = true}) --Открытие левых дверей + self.Train:LoadSystem("SF19","Relay","Switch", {bass = true, normally_closed = true}) --Резервное закрытие дверей + self.Train:LoadSystem("SF20","Relay","Switch", {bass = true, normally_closed = true}) --Открытие правых дверей + self.Train:LoadSystem("SF21","Relay","Switch", {bass = true, normally_closed = true}) --ОÑновное управление МК + self.Train:LoadSystem("SF22","Relay","Switch", {bass = true, normally_closed = true}) --Резервное управление МК + self.Train:LoadSystem("SF23","Relay","Switch", {bass = true, normally_closed = true}) --Контактор 1 группы вентилÑторов + self.Train:LoadSystem("SF24","Relay","Switch", {bass = true, normally_closed = true}) --Контактор 2 группы вентилÑторов + self.Train:LoadSystem("SF25","Relay","Switch", {bass = true, normally_closed = true}) --Токоприемники 1 группы + self.Train:LoadSystem("SF26","Relay","Switch", {bass = true, normally_closed = true}) --ВЗ№1 + self.Train:LoadSystem("SF27","Relay","Switch", {bass = true, normally_closed = true}) --Питание БВÐ(Блока ÐвтоматичеÑких Выключателей) + + self.Train:LoadSystem("SF29","Relay","Switch", {bass = true, normally_closed = true}) --ВЗ№2 + + self.Train:LoadSystem("SF34","Relay","Switch", {bass = true, normally_closed = true}) --Питание 1 группы вентилÑторов + self.Train:LoadSystem("SF35","Relay","Switch", {bass = true, normally_closed = true}) --Питание 2 группы вентилÑторов + + self.Train:LoadSystem("SF42","Relay","Switch", {bass = true, normally_closed = true}) --Подвозбуждение + self.Train:LoadSystem("SF43","Relay","Switch", {bass = true, normally_closed = true}) --Ðварийное оÑвещение Ñалона + self.Train:LoadSystem("SF44","Relay","Switch", {bass = true, normally_closed = true}) --Питание оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ Ñалона + self.Train:LoadSystem("SF45","Relay","Switch", {bass = true, normally_closed = true}) --Управление контакторами ББЭ, оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ Ñалона + self.Train:LoadSystem("SF46","Relay","Switch", {bass = true, normally_closed = true}) --Питание ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð‘Ð’Ð + + self.Train:LoadSystem("SF56","Relay","Switch", {bass = true}) --Электро-компреÑÑор(промежуточный вагон) + + self.Train:LoadSystem("SF72","Relay","Switch", {bass = true, normally_closed = true}) --СтоÑночный тормоз + + + --[[ ----------------- ППУ ----------------- + self.Train:LoadSystem("SBU1" ,"Relay","Switch") --ХОД 1 + self.Train:LoadSystem("SBU2" ,"Relay","Switch") --ВЗ + self.Train:LoadSystem("SAU2" ,"Relay","Switch") --КомпреÑÑор + self.Train:LoadSystem("SBU3" ,"Relay","Switch") --Откл. БВ + self.Train:LoadSystem("SBU4" ,"Relay","Switch") --Вкл. ББЭ--]] + self.EL1 = 0 + self.EL3_6 = 0 + self.EL7_30 = 0 + self.HL13 = 0 + self.HL46 = 0 + self.HL25 = 0 + self.HL6 = 0 + self.TW28 = 0 + + self.AnnouncerPlaying = 0 + self.AnnouncerBuzz = 0 + + self.V1 = 0 +end + +local outputs = {"EL1","EL3_6","EL7_30","HL13","HL46","HL25","HL6","TW28","V1","AnnouncerPlaying","AnnouncerBuzz",} +function TRAIN_SYSTEM:ClientInitialize() +end + +function TRAIN_SYSTEM:Outputs() + return outputs +end + diff --git a/lua/metrostroi/systems/sys_81_71_announcer.lua b/lua/metrostroi/systems/sys_81_71_announcer.lua new file mode 100644 index 0000000..e189a0f --- /dev/null +++ b/lua/metrostroi/systems/sys_81_71_announcer.lua @@ -0,0 +1,163 @@ +-------------------------------------------------------------------------------- +-- Announcer and announcer-related code +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_71_Announcer") +TRAIN_SYSTEM.DontAccelerateSimulation = true +local ANNOUNCER_CACHE_LIMIT = 30 + +function TRAIN_SYSTEM:Outputs() + return {} +end + +function TRAIN_SYSTEM:Inputs() + return {"Reset"} +end + +if TURBOSTROI then return end + +-------------------------------------------------------------------------------- +if SERVER then + function TRAIN_SYSTEM:Initialize(tbl) + self.Schedule = {} + self.AnnTable = tbl + end + + util.AddNetworkString("metrostroi_announcer") + + function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Reset" then + self:Reset() + self.AnnTable = value + end + end + + function TRAIN_SYSTEM:Queue(tbl) + if not Metrostroi[self.AnnTable] then return end + + for k, v in pairs(tbl) do + local tbl = Metrostroi[self.AnnTable][self.Train:GetNW2Int("Announcer", 1)] or Metrostroi[self.AnnTable][1] + if v~=-2 then + table.insert(self.Schedule, tbl and tbl[v] or v) + else + self:Reset() + end + end + end + + function TRAIN_SYSTEM:Reset() + if #self.Schedule > 0 then + self.Schedule = {} + self.AnnounceTimer = nil + if self.BuzzWork then self:Queue{"buzz_end"} end + end + self:WriteMessage("_STOP") + end + function TRAIN_SYSTEM:WriteMessage(msg) + for i = 1, #self.Train.WagonList do + net.Start("metrostroi_announcer", true) + local train = self.Train.WagonList[i] + net.WriteEntity(train) + net.WriteString(msg) + net.Broadcast() + end + end + + --end + function TRAIN_SYSTEM:Think() + if #self.Schedule > 0 and not self.Playing then + for i = 1, #self.Train.WagonList do + self.Train.WagonList[i]:SetNW2Bool("AnnouncerPlaying", true) + end + self.Playing = true + elseif #self.Schedule == 0 and self.Playing and not self.AnnounceTimer then + for i = 1, #self.Train.WagonList do + self.Train.WagonList[i]:SetNW2Bool("AnnouncerPlaying", false) + end + self.Playing = false + end + + while #self.Schedule > 0 and (not self.AnnounceTimer or CurTime() - self.AnnounceTimer > 0) do + local tbl = table.remove(self.Schedule, 1) + if type(tbl) == "number" then + if tbl == -1 then + for i = 1, #self.Train.WagonList do + local train = self.Train.WagonList[i] + train.AnnouncementToLeaveWagon = true + --train.AnnouncementToLeaveWagonAcknowledged = false + end + elseif self.NoiseWork == true then + self.NoiseWork = tbl + for i = 1, #self.Train.WagonList do + self.Train.WagonList[i]:SetNW2Int("AnnouncerNoise", tbl) + end + elseif self.BuzzWork == 1 then + for i = 1, #self.Train.WagonList do + self.Train.WagonList[i]:SetNW2Int("AnnouncerBuzz", tbl) + end + self.BuzzWork = true + else + self.AnnounceTimer = CurTime() + tbl + end + elseif tbl == "noise_start" then + self.NoiseWork = true + elseif tbl == "noise_end" then + for i = 1, #self.Train.WagonList do + self.Train.WagonList[i]:SetNW2Int("AnnouncerNoise", -1) + end + self.NoiseWork = false + elseif tbl == "buzz_start_upo" then + self.BuzzWork = 1 + elseif tbl == "buzz_end_upo" then + for i = 1, #self.Train.WagonList do + self.Train.WagonList[i]:SetNW2Int("AnnouncerBuzz", -1) + end + elseif tbl == "buzz_start" then + local bpsn = self.Train:GetNW2Int("BPSNType",13) + for i = 1, #self.Train.WagonList do + self.Train.WagonList[i]:SetNW2Int("AnnouncerBuzz", (bpsn == 1 or bpsn == 2 or bpsn == 8) and 2 or 1) + end + self.BuzzWork = true + elseif tbl == "buzz_end" then + for i = 1, #self.Train.WagonList do + self.Train.WagonList[i]:SetNW2Int("AnnouncerBuzz", -1) + end + self.BuzzWork = false + elseif type(tbl) == "table" then + self:WriteMessage(tbl[1]) + self.AnnounceTimer = CurTime() + tbl[2] + else + ErrorNoHalt("Announcer error in message "..tbl.."\n") + end + end + if #self.Schedule == 0 and self.AnnounceTimer and CurTime() - self.AnnounceTimer > 0 then + self.AnnounceTimer = nil + if self.BuzzWork then self:Queue{"buzz_end"} end + end + if #self.Schedule > ANNOUNCER_CACHE_LIMIT then + self:Reset() + end + end +else + net.Receive("metrostroi_announcer", function(len, pl) + local train = net.ReadEntity() + if not IsValid(train) or not train.RenderClientEnts then return end + local snd = net.ReadString() + + if train.AnnouncerPositions then + for k, v in ipairs(train.AnnouncerPositions) do + train:PlayOnceFromPos("announcer" .. k, snd, train.OnAnnouncer and train:OnAnnouncer(v[3],k) or v[3] or 1, 1, v[2] or 400, 1e9, v[1]) + end + else + train:PlayOnceFromPos("announcer", snd, train.OnAnnouncer and train:OnAnnouncer(1) or 1, 1, 600, 1e9, Vector(0, 0, 0)) + end + end) + + function TRAIN_SYSTEM:ClientInitialize() + end + + function TRAIN_SYSTEM:ClientThink() + end +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_81_71_asnp.lua b/lua/metrostroi/systems/sys_81_71_asnp.lua new file mode 100644 index 0000000..d8cb07f --- /dev/null +++ b/lua/metrostroi/systems/sys_81_71_asnp.lua @@ -0,0 +1,844 @@ +-------------------------------------------------------------------------------- +-- ASNP announcer and announcer-related code for 81-70*/81-71* trains +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_71_ASNP") +TRAIN_SYSTEM.DontAccelerateSimulation = true +function TRAIN_SYSTEM:Initialize() + self.LineOut = 0 + + self.TriggerNames = { + "R_ASNPMenu", + "R_ASNPUp", + "R_ASNPDown", + "R_ASNPOn", + "R_Program1", + "R_Program2", + "R_Program1H", + "R_Program2H", + --R_Announcer + --R_Line + } + self.Triggers = {} + + self.State = 0 + + self.Line = 1 + self.Path = false + self.Station = 1 + self.Arrived = true + + self.RouteNumber = 0 + + self.Line = 1 + + if not self.Train.R_ASNPOn then + self.Train:LoadSystem("R_ASNPOn","Relay","Switch",{ normally_closed = true, bass = true }) + self.Train:LoadSystem("R_ASNPMenu","Relay","Switch",{bass = true }) + self.Train:LoadSystem("R_ASNPUp","Relay","Switch",{bass = true }) + self.Train:LoadSystem("R_ASNPDown","Relay","Switch",{bass = true }) + end + self.K1 = 0 + self.K2 = 0 + --self.Train:LoadSystem("R_Program1","Relay","Switch",{bass = true }) + --self.Train:LoadSystem("R_Program2","Relay","Switch",{bass = true }) +end + +if TURBOSTROI then return end + +function TRAIN_SYSTEM:Inputs() + return {"Disable"} +end + +function TRAIN_SYSTEM:Outputs() + return {"K1","K2","LineOut"} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Disable" then + self.Disable = value>0 + if self.Disable then self:Initialize() end + end +end +if CLIENT then + local function createFont(name,font,size) + surface.CreateFont("Metrostroi_"..name, { + font = font, + size = size, + weight = 500, + blursize = false, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + scanlines = false, + }) + end + createFont("ASNP","Liquid Crystal Display",30,400) + function TRAIN_SYSTEM:ClientThink() + if not self.Train:ShouldDrawPanel("ASNPScreen") then return end + --RunConsoleCommand("say","президент!!!") + if not self.DrawTimer then + render.PushRenderTarget(self.Train.ASNP,0,0,512, 128) + render.Clear(0, 0, 0, 0) + render.PopRenderTarget() + end + if self.DrawTimer and CurTime()-self.DrawTimer < 0.1 then return end + self.DrawTimer = CurTime() + render.PushRenderTarget(self.Train.ASNP,0,0,512, 128) + --render.Clear(0, 0, 0, 0) + cam.Start2D() + self:ASNPScreen(self.Train) + cam.End2D() + render.PopRenderTarget() + end + function TRAIN_SYSTEM:PrintText(x,y,text,inverse) + if text == "II" then + self:PrintText(x-0.2,y,"I",inverse) + self:PrintText(x+0.2,y,"I",inverse) + return + end + local str = {utf8.codepoint(text,1,-1)} + for i=1,#str do + local char = utf8.char(str[i]) + if inverse then + draw.SimpleText(string.char(0x7f),"Metrostroi_ASNP",(x+i)*20.5+5,y*40+40,Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(char,"Metrostroi_ASNP",(x+i)*20.5+5,y*40+40,Color(140,190,0,150),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText(char,"Metrostroi_ASNP",(x+i)*20.5+5,y*40+40,Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + end + + TRAIN_SYSTEM.LoadSeq = "/-\\|" + function TRAIN_SYSTEM:ASNPScreen(Train) + local State = self.Train:GetNW2Int("ASNP:State",-1) + if State ~= 0 then + surface.SetDrawColor(140,190,0,self.Warm and 130 or 255) + self.Warm = true + else + surface.SetDrawColor(20,50,0,230) + self.Warm = false + end + surface.DrawRect(0,0,512,128) + if State == 0 then + return + end + + + if State == -2 then + self:PrintText(0,0,"Map not supported") + self:PrintText(0,1,"Карта не поддерживаетÑÑ") + return + end + + if State == 1 then + self:PrintText(0,0,"Ðажмите \"MENU\"") + self:PrintText(0 ,1,"Ð´Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° наÑтройки") + end + if State > 1 and not Metrostroi.ASNPSetup then + self:PrintText(0,0,"Client error") + self:PrintText(0,1,"No announcer at client") + return + end + if State == 2 then + local RouteNumber = Format("%02d",Train:GetNW2Int("ASNP:RouteNumber",0)) + local sel = Train:GetNW2Int("ASNP:Selected",0) + self:PrintText(0,0,"Ðомер маршрута:") + if sel == 2 then + self:PrintText(4,1,"\"+-\" отм \"MENU\" ввод") + else + self:PrintText(4,1,"\"+-\" выб \"MENU\" Ñлед") + end + + if sel~=0 or RealTime()%1 > 0.5 then self:PrintText(0,1,RouteNumber[1]) end + if sel~=1 or RealTime()%1 > 0.5 then self:PrintText(1,1,RouteNumber[2]) end + end + + local stbl = Metrostroi.ASNPSetup and Metrostroi.ASNPSetup[Train:GetNW2Int("Announcer",1)] + if State > 2 and not stbl then + self:PrintText(0,0,"Client error") + self:PrintText(0,1,"No line at client") + return + end + + if State == 3 then + local Line = self.Train:GetNW2Int("ASNP:Line",1) + local ltbl = stbl[Line] + local St,En = ltbl[1],ltbl[#ltbl] + self:PrintText(0,0,ltbl.Loop and "Маршрут (кол)" or "Маршрут") + self:PrintText(20,0,"-") + if RealTime()%0.8 > 0.4 then + self:PrintText(17,0,Format("%03d",St[1])) + self:PrintText(21,0,Format("%03d",En[1])) + end + local timer = math.ceil(RealTime()%6/1.5) + if timer == 1 then self:PrintText(0,1,(ltbl.Name or "Ðет названиÑ")) + elseif timer == 2 then self:PrintText(0,1,"От:") self:PrintText(3,1,St[2]) + elseif timer == 3 then self:PrintText(0,1,"До:") self:PrintText(3,1,En[2]) + elseif timer == 4 then self:PrintText(0,1,"\"+-\" выбор \"MENU\" ввод") end + end + + if State == 4 then + local Line = Train:GetNW2Int("ASNP:Line",1) + local ltbl = stbl[Line] + if ltbl.Loop then + local Path = Train:GetNW2Bool("ASNP:Path") + self:PrintText(0,0,"Путь") + self:PrintText(0,1,Path and "II" or "I") + self:PrintText(2,1,Path and "(второй)" or "(первый)") + if RealTime()%0.8 > 0.4 then self:PrintText(18,0,Train:GetNW2Bool("ASNP:Path") and "II" or "I") end + self:PrintText(20,0,"-") + else + local St = ltbl[Train:GetNW2Int("ASNP:FirstStation",1)] + self:PrintText(0,0,"ÐÐ°Ñ‡Ð°Ð»ÑŒÐ½Ð°Ñ ÑÑ‚.") + self:PrintText(0,1,St[1]..":"..St[2]) + self:PrintText(20,0,"-") + if RealTime()%0.8 > 0.4 then + self:PrintText(17,0,Format("%03d",St[1])) + end + end + end + + if State == 5 then + local Line = Train:GetNW2Int("ASNP:Line",1) + local ltbl = stbl[Line] + if ltbl.Loop then + local station = Train:GetNW2Int("ASNP:LastStation",1) + local En = ltbl[station] + self:PrintText(0,0,"ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ ÑÑ‚.") + if station == 0 then + self:PrintText(0,1," ():".."Кольцевой") + else + self:PrintText(0,1,En[1]..":"..En[2]) + end + local Path = Train:GetNW2Bool("ASNP:Path") and "II" or "I" + self:PrintText(18,0,Path) + self:PrintText(20,0,"-") + if RealTime()%0.8 > 0.4 then + if En then + self:PrintText(21,0,Format("%03d",En[1])) + else + self:PrintText(22,0,Path) + end + end + else + local St = ltbl[Train:GetNW2Int("ASNP:FirstStation",1)] + local En = ltbl[Train:GetNW2Int("ASNP:LastStation",1)] + self:PrintText(0,0,"ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ ÑтанциÑ") + self:PrintText(0,1,En[1]..":"..En[2]) + self:PrintText(20,0,"-") + self:PrintText(17,0,Format("%03d",St[1])) + if RealTime()%0.8 > 0.4 then + self:PrintText(21,0,Format("%03d",En[1])) + end + end + end + + if State == 6 then + local Line = Train:GetNW2Int("ASNP:Line",1) + local ltbl = stbl[Line] + local Path = Train:GetNW2Bool("ASNP:Path") + self:PrintText(0,0,"Проверьте данные") + self:PrintText(17,0,Format("%02d",Line)) + self:PrintText(20,0,Format("%02d",Train:GetNW2Int("ASNP:RouteNumber",0))) + self:PrintText(23,0,Path and "II" or "I") + if ltbl.Loop then + local station = Train:GetNW2Int("ASNP:LastStation",1) + local En = ltbl[station] + --self:PrintText(20,0,"()") + local timer = math.ceil(RealTime()%4.5/1.5) + if timer == 1 then self:PrintText(0,1,"(кол) "..(ltbl.Name or "Ðет названиÑ")) + elseif timer == 2 and station > 0 then self:PrintText(0,1,"До:");self:PrintText(3,1,En[2]);self:PrintText(21,1,tostring(En[1])) + elseif timer == 2 and station == 0 then self:PrintText(0,1,"Без конечной") + elseif timer == 3 then self:PrintText(0,1,"\"+-\" отмена \"MENU\" ок") end + else + local St = ltbl[Train:GetNW2Int("ASNP:FirstStation",1)] + local En = ltbl[Train:GetNW2Int("ASNP:LastStation",1)] + if Path then + local StT = En;En=St;St=StT + end + local timer = math.ceil(RealTime()%6/1.5) + if timer == 1 then self:PrintText(0,1,(ltbl.Name or "Ðет названиÑ")) + elseif timer == 2 then self:PrintText(0,1,"От:");self:PrintText(3,1,St[2]);self:PrintText(21,1,tostring(St[1])) + elseif timer == 3 then self:PrintText(0,1,"До:");self:PrintText(3,1,En[2]);self:PrintText(21,1,tostring(En[1])) + elseif timer == 4 then self:PrintText(0,1,"\"+-\" выб \"MENU\" ввод") end + end + end + if State == 7 then + local Line = Train:GetNW2Int("ASNP:Line",1) + local ltbl = stbl[Line] + + local Path = Train:GetNW2Bool("ASNP:Path") + + local St = ltbl[Train:GetNW2Int("ASNP:FirstStation",1)] + local En + if Path and not ltbl.Loop then + En = ltbl[Train:GetNW2Int("ASNP:FirstStation",1)] + else + En = ltbl[Train:GetNW2Int("ASNP:LastStation",1)] + end + + local Station = ltbl[Train:GetNW2Int("ASNP:Station",1)] + if not Station then return end + local Dep = self.Train:GetNW2Bool("ASNP:Arrived",false) + + + if Dep then self:PrintText(0,0,"Отпр.") else self:PrintText(0,0,"Приб.") end + self:PrintText(6,0,Station[2]) + if Train:GetNW2Bool("ASNP:Playing",false) then + self:PrintText(0,1,"<<< ИДЕТ ОБЪЯВЛЕÐИЕ >>>") + --elseif Station == En then + -- self:PrintText(0,1,"<<< КОÐЕЧÐЯ >>>") + else + --self:PrintText(0,1,string.rep("I",Path and 2 or 1)) + if Path then + self:PrintText(-0.2,1,"I") + self:PrintText( 0.2,1,"I") + else + self:PrintText(0,1,"I") + end + self:PrintText(2,1,string.format("% 2d.",Train:GetNW2Int("ASNP:RouteNumber",0))) + if ltbl.Loop and Train:GetNW2Int("ASNP:LastStation",1) == 0 then + self:PrintText(6,1,"Кольцевой") + else + self:PrintText(6,1,En[2]:upper()) + end + if Train:GetNW2Bool("ASNP:CanLocked",false) then + if Train:GetNW2Bool("ASNP:LockedL",false) then self:PrintText(20,0,"Бл.Л") end + if Train:GetNW2Bool("ASNP:LockedR",false) then self:PrintText(20,1,"Бл.П") end + end + end + end + end + return +end + +function TRAIN_SYSTEM:Zero() + self.Station = self.Path and self.LastStation or self.FirstStation + self.Arrived = true + self:UpdateBoards() +end + +function TRAIN_SYSTEM:Next() + local tbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + if tbl.Loop then + if self.Arrived then + if self.Path then + self.Station = self.Station - 1 + else + self.Station = self.Station + 1 + end + if self.Station == 0 or self.Station > #tbl then + self.Station = self.Station == 0 and #tbl or 1 + end + if self.Station == 0 or self.Station > #tbl then + self.Station = self.Station == 0 and (self.LastStation > 0 and self.LastStation or #tbl) or 1 + end + self.Arrived = false + --self.Station = 1 + else + self.Arrived = true + end + else + if self.Arrived then + if self.Station ~= (self.Path and self.FirstStation or self.LastStation) then + if self.Path then + self.Station = math.max(self.FirstStation,self.Station - 1) + else + self.Station = math.min(self.LastStation,self.Station + 1) + end + self.Arrived = false + end + else + self.Arrived = true + end + end + self:UpdateBoards() +end +function TRAIN_SYSTEM:Prev() + local tbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + if tbl.Loop then + if not self.Arrived then + if self.Path then + self.Station = self.Station + 1 + else + self.Station = self.Station - 1 + end + if self.Station == 0 or self.Station > #tbl then + self.Station = self.Station == 0 and (self.LastStation > 0 and self.LastStation or #tbl) or 1 + end + --self.Station = 1 + self.Arrived = true + else + self.Arrived = false + end + else + if not self.Arrived then + if self.Path then + self.Station = math.min(self.LastStation,self.Station + 1) + else + self.Station = math.max(self.FirstStation,self.Station - 1) + end + self.Arrived = true + else + if self.Station ~= (self.Path and self.LastStation or self.FirstStation) then + self.Arrived = false + end + end + end + self:UpdateBoards() +end +function TRAIN_SYSTEM:AnnQueue(msg) + local Announcer = self.Train.Announcer + if msg and type(msg) ~= "table" then + Announcer:Queue{msg} + else + Announcer:Queue(msg) + end +end +function TRAIN_SYSTEM:Play(dep,not_last) + local message + local tbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + local stbl = tbl[self.Station] + local last,lastst + local path = self.Path and 2 or 1 + if tbl.Loop then + last = self.LastStation + lastst = not dep and self.LastStation > 0 and self.Station == last and tbl[last].arrlast + else + last = self.Path and self.FirstStation or self.LastStation + lastst = not dep and self.Station == last and tbl[last].arrlast + end + if dep then + message = stbl.dep[path] + else + if lastst then + message = stbl.arrlast[path] + else + message = stbl.arr[path] + end + end + self:AnnQueue{"click1","buzz_start"} + if lastst and not stbl.ignorelast then self:AnnQueue(-1) end + + + self:AnnQueue(message) + --local stbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line][self.Station] + if self.LastStation > 0 and not dep and self.Station ~= last and tbl[last].not_last and (stbl.have_inrerchange or math.abs(last-self.Station) <= 3) then + local ltbl = tbl[last] + if stbl.not_last_c then + local patt = stbl.not_last_c[path] + self:AnnQueue(ltbl[patt] or ltbl.not_last) + else + self:AnnQueue(ltbl.not_last) + end + end + self:AnnQueue{"buzz_end","click2"} + self:UpdateBoards() +end +function TRAIN_SYSTEM:CANReceive(source,sourceid,target,targetid,textdata,numdata) + if sourceid == self.Train:GetWagonNumber() then return end + if textdata == "RouteNumber" then self.RouteNumber = numdata end + if textdata == "Path" then self.Path = numdata > 0 end + if textdata == "Line" then self.Line = numdata end + if textdata == "FirstStation" then self.FirstStation = numdata end + if textdata == "LastStation" then self.LastStation = numdata end + if textdata == "Activate" then + local tbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + self.Station = tbl.Loop and 1 or self.Path and self.LastStation or self.FirstStation + self.Arrived = true + self.State = 7 + --[[local last = self.Path and not tbl.Loop and self.FirstStation or self.LastStation + local lastst = tbl[last] and tbl[last][1] + if lastst then self.Train:SetNW2Int("LastStation",lastst) end + self.Train:SetNW2Int("RouteNumber",self.RouteNumber)]] + end +end +function TRAIN_SYSTEM:SyncASNP() + --[[ local tbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + local last = self.Path and self.FirstStation or self.LastStation + local lastst = tbl[last] and tbl[last][1] + if lastst then self.Train:SetNW2Int("LastStation",lastst) end + self.Train:SetNW2Int("RouteNumber",self.RouteNumber)]] + self.Train:CANWrite("ASNP",self.Train:GetWagonNumber(),"ASNP",nil,"RouteNumber",self.RouteNumber) + self.Train:CANWrite("ASNP",self.Train:GetWagonNumber(),"ASNP",nil,"Path",self.Path and 0 or 1) + self.Train:CANWrite("ASNP",self.Train:GetWagonNumber(),"ASNP",nil,"Line",self.Line) + self.Train:CANWrite("ASNP",self.Train:GetWagonNumber(),"ASNP",nil,"FirstStation",self.FirstStation) + self.Train:CANWrite("ASNP",self.Train:GetWagonNumber(),"ASNP",nil,"LastStation",self.LastStation) + self.Train:CANWrite("ASNP",self.Train:GetWagonNumber(),"ASNP",nil,"Activate") +end +function TRAIN_SYSTEM:UpdateBoards() + if not self.PassSchemeWork then return end + local tbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + local stbl = tbl.LED + local last = self.Path and self.FirstStation or self.LastStation + + local curr = 0 + if self.Path then + for i=#stbl,self.Station+1,-1 do + if stbl[i] then + curr = curr + stbl[i] + end + end + else + for i=1,self.Station-1 do + if stbl[i] then + curr = curr + stbl[i] + end + end + end + local nxt = 0 + if self.Arrived then + curr = curr + stbl[self.Station] + else + nxt = stbl[self.Station] + end + self.Train:CANWrite("ASNP",self.Train:GetWagonNumber(),"PassSchemes",nil,"Current",curr) + self.Train:CANWrite("ASNP",self.Train:GetWagonNumber(),"PassSchemes",nil,"Arrival",nxt) + self.Train:CANWrite("ASNP",self.Train:GetWagonNumber(),"PassSchemes",nil,"Path",self.Path) + self.Train:CANWrite("ASNP",self.Train:GetWagonNumber(),"Tickers",nil,"Next",not self.Arrived) + self.Train:CANWrite("ASNP",self.Train:GetWagonNumber(),"Tickers",nil,"Curr",tbl[self.Station][2]) + self.Train:CANWrite("ASNP",self.Train:GetWagonNumber(),"Tickers",nil,"Last",tbl[last] and tbl[last].not_last and tbl[last][2]) +end + +function TRAIN_SYSTEM:Trigger(name,value) + local tbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)] + if (name == "R_Program2" or name == "R_Program2H") and value then + if self.State ~= 7 and tbl[self.Line] and tbl[self.Line].spec_last then + if self.LineOut>0 then self:AnnQueue{-2,"buzz_end","click2"} end + self:AnnQueue{"click1","buzz_start"} + self:AnnQueue(-1) + self:AnnQueue(tbl[self.Line].spec_last) + self:AnnQueue{"buzz_end","click2"} + elseif self.State == 7 then + local ltbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + local stbl = ltbl[self.Station] + local last,lastst + if self.Arrived then + if tbl.Loop then + ltbl = self.LastStation + lastst = self.LastStation > 0 and self.Station == last and ltbl[last].arrlast + else + last = self.Path and self.FirstStation or self.LastStation + lastst = self.Station == last and ltbl[last].arrlast + end + end + if self.LineOut>0 then self:AnnQueue{-2,"buzz_end","click2"} end + if lastst and not ltbl[last].ignorelast then + self:AnnQueue{"click1","buzz_start"} + self:AnnQueue(-1) + if stbl.spec_last_c then + local patt = stbl.spec_last_c[self.Path and 2 or 1] + self:AnnQueue(ltbl[patt] or ltbl.spec_last) + else + self:AnnQueue(ltbl.spec_last) + end + self:AnnQueue{"buzz_end","click2"} + else + self.StopMessage = not self.StopMessage + self:AnnQueue{"click1","buzz_start"} + if stbl.spec_wait_c then + local patt = stbl.spec_wait_c[self.Path and 2 or 1] + self:AnnQueue((ltbl[patt] or ltbl.spec_wait)[self.StopMessage and 1 or 2]) + else + self:AnnQueue(ltbl.spec_wait[self.StopMessage and 1 or 2]) + end + self:AnnQueue{"buzz_end","click2"} + end + end + end + if self.State == 1 and name == "R_ASNPMenu" and value then + self.State = 2 + self.Selected = 0 + elseif self.State == 2 and value then + if name == "R_ASNPMenu" then + self.Selected = self.Selected + 1 + if self.Selected > 2 then + self.State = 3 + end + end + if (name == "R_ASNPUp" or name == "R_ASNPDown") and self.Selected < 2 then + local sel = 1-self.Selected + local num = Format("%02d",self.RouteNumber)[self.Selected+1] + if name == "R_ASNPUp" then if num == "9" then self.RouteNumber = self.RouteNumber - 10^sel*9 else self.RouteNumber = self.RouteNumber + 10^sel end end + if name == "R_ASNPDown" then if num == "0" then self.RouteNumber = self.RouteNumber + 10^sel*9 else self.RouteNumber = self.RouteNumber - 10^sel end end + end + if (name == "R_ASNPUp" or name == "R_ASNPDown") and self.Selected == 2 then self.Selected = 0 end + elseif self.State == 3 and value then + local stbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)] + if name == "R_ASNPDown" and value then + self.Line =self.Line + 1 + if self.Line > #tbl then self.Line = 1 end + end + if name == "R_ASNPUp" and value then + self.Line = math.max(1,self.Line - 1) + if self.Line < 1 then self.Line = #tbl end + end + if name == "R_ASNPMenu" and value then + if not tbl[self.Line].Loop then + self.FirstStation = 1 + end + self.State = 4 + end + elseif self.State == 4 and value and not tbl[self.Line].Loop then --Ðе кольцевой + local stbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + if name == "R_ASNPDown" then + local found = false + for i=self.FirstStation+1,#stbl do + if stbl[i].arrlast then self.FirstStation = i;found=true;break end + end + if not found then + for i=1,#stbl do + if stbl[i].arrlast then self.FirstStation = i;break end + end + end + end + if name == "R_ASNPUp" then + local found = false + for i=self.FirstStation-1,1,-1 do + if stbl[i].arrlast then self.FirstStation = i;found=true;break end + end + if not found then + for i=#stbl,1,-1 do + if stbl[i].arrlast then self.FirstStation = i;break end + end + end + end + if name == "R_ASNPMenu" then + self.State = 5 + self.LastStation = 1 + while stbl[self.LastStation] and not stbl[self.LastStation].arrlast or self.LastStation == self.FirstStation do + self.LastStation = self.LastStation - 1 + if self.LastStation < 1 then self.LastStation = #stbl end + end + end + elseif self.State == 4 and value and tbl[self.Line].Loop then --Кольцевой + if name == "R_ASNPDown" or name == "R_ASNPUp" then + self.Path = not self.Path + end + if name == "R_ASNPMenu" then + self.LastStation = 0 + self.FirstStation = 0 + self.State = 5 + end + elseif self.State == 5 and value and not tbl[self.Line].Loop then --Ðе кольцевой + local stbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + if name == "R_ASNPDown" then + local found = false + for i=self.LastStation+1,#stbl do + if i ~= self.FirstStation and stbl[i].arrlast then self.LastStation = i;found=true;break end + end + if not found then + for i=1,#stbl do + if i ~= self.FirstStation and stbl[i].arrlast then self.LastStation = i;break end + end + end + end + if name == "R_ASNPUp" then + local found = false + for i=self.LastStation-1,1,-1 do + if i ~= self.FirstStation and stbl[i].arrlast then self.LastStation = i;found=true;break end + end + if not found then + for i=#stbl,1,-1 do + if i ~= self.FirstStation and stbl[i].arrlast then self.LastStation = i;break end + end + end + end + if name == "R_ASNPMenu" then + self.Path = self.FirstStation > self.LastStation + self.Station = self.FirstStation + if self.Path then + local first = self.LastStation + self.LastStation = self.FirstStation + self.FirstStation = first + end + self.Arrived = true + self.State = 6 + end + elseif self.State == 5 and value and tbl[self.Line].Loop then --Кольцевой + local stbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + if name == "R_ASNPDown" then + local found = false + for i=self.LastStation+1,#stbl do + if stbl[i].arrlast then self.LastStation = i;found=true;break end + end + if not found and self.LastStation ~= 0 then + self.LastStation = 0 + end + end + if name == "R_ASNPUp" then + local found = false + if self.LastStation == 1 then + self.LastStation = 0 + found = true + end + for i=self.LastStation-1,1,-1 do + if stbl[i].arrlast and stbl[i].arrlast[self.Path and 2 or 1] then self.LastStation = i;found=true;break end + end + if not found then + for i=#stbl,1,-1 do + if stbl[i].arrlast and stbl[i].arrlast[self.Path and 2 or 1] then self.LastStation = i;break end + end + end + end + if name == "R_ASNPMenu" then + self.State = 6 + self.Station = 1 + self.Arrived = true + end + elseif self.State == 6 and value then + local stbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + if name == "R_ASNPDown" or name == "R_ASNPUp" then + self.State = 2 + self.Selected = 0 + end + if name == "R_ASNPMenu" then + if self.FirstStation ~= 0 then + if self.LineOut>0 then self:AnnQueue{-2,"buzz_end","click2"} end + if self.Path then + self:AnnQueue{"click1","buzz_start","announcer_ready",stbl[self.LastStation].arrlast[3],stbl[self.FirstStation].arrlast[3],"buzz_end","click2"} + else + self:AnnQueue{"click1","buzz_start","announcer_ready",stbl[self.FirstStation].arrlast[3],stbl[self.LastStation].arrlast[3],"buzz_end","click2"} + end + end + self.State = 7 + self:UpdateBoards() + self:SyncASNP() + self.StopMessage = false + end + elseif self.State == 7 then + local stbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + if name == "R_ASNPMenu" and value then self.ReturnTimer = CurTime() end + if name == "R_ASNPMenu" and not value and self.ReturnTimer and self.ReturnTimer - CurTime() < 0.7 then + self.ReturnTimer = nil + end + if name == "R_ASNPDown" and value then self:Next() end + if name == "R_ASNPUp" and value then self:Prev() end + if (name == "R_Program1" or name == "R_Program1H") and value then + if self.LineOut>0 then self:AnnQueue{-2,"buzz_end","click2"} end + if self.Arrived and self.Station == (self.Path and self.FirstStation or self.LastStation) then + self:Zero() + end + self:Play(self.Arrived) + self:Next() + end + end +end + +--States: +-- -2 - Loaded in another cab +-- -1 - Starting up +--nil - First setUp and get settings from last +--1 - Welcome Screen +--2 - Route Choose +--3 - Choose start station +--4 - Choose end station +--5 - Choose path +--6 - Choose style of playing +--7 - Normal state +--8 - Confim a settings (on last stations) +function TRAIN_SYSTEM:Think() + if self.Disable then return end + local Train = self.Train + local VV = Train.ASNP_VV + local Power = VV.Power > 0.5 + if not Power and self.State ~= 0 then + self.State = 0 + self.ASNPTimer = nil + if self.LineOut>0 then self:AnnQueue{-2,"buzz_end","click2"} end + end + if Power and self.State == 0 then + self.State = -1 + self.ASNPTimer = CurTime()-math.Rand(-0.3,0.3) + end + if self.State == -1 and self.ASNPTimer and CurTime()-self.ASNPTimer > 1 then + self.State = Metrostroi.ASNPSetup and 1 or -2 + end + if Power and self.State > -1 then + for k,v in pairs(self.TriggerNames) do + if Train[v] and (Train[v].Value > 0.5) ~= self.Triggers[v] then + self:Trigger(v,Train[v].Value > 0.5) + self.Triggers[v] = Train[v].Value > 0.5 + end + end + end + if not Metrostroi.ASNPSetup and self.State > 0 then + self.State = -2 + end + local PSWork = Train.Panel.PassSchemeControl and Train.Panel.PassSchemeControl>0 and self.State==7 + if PSWork~=self.PassSchemeWork then + self.PassSchemeWork = PSWork + if self.PassSchemeWork then self:UpdateBoards() end + end + + if self.ReturnTimer and CurTime()-self.ReturnTimer > 0.7 then + if self.State == 7 then + self.State = 6 + if self.LineOut>0 then self:AnnQueue{-2,"buzz_end","click2"} end + end + self.ReturnTimer = nil + end + Train:SetNW2Int("ASNP:State",self.State) + Train:SetNW2Int("ASNP:RouteNumber",self.RouteNumber) + + Train:SetNW2Int("ASNP:Selected",self.Selected) + Train:SetNW2Int("ASNP:Line",self.Line) + Train:SetNW2Int("ASNP:FirstStation",self.FirstStation) + Train:SetNW2Int("ASNP:LastStation",self.LastStation) + Train:SetNW2Bool("ASNP:Path",self.Path) + + Train:SetNW2Bool("ASNP:Station",self.Station) + Train:SetNW2Bool("ASNP:Arrived",self.Arrived) + self.LineOut = #Train.Announcer.Schedule>0 and 1 or 0 + Train:SetNW2Bool("ASNP:Playing",self.LineOut>0) + if Train.VBD and self.State>0 then + Train:SetNW2Bool("ASNP:CanLocked",true) + if self.State<6 then + self.K1 = 1 + self.K2 = 1 + self.StopTimer = nil + elseif Train.ALSCoil.Speed>1 then + self.K1 = 0 + self.K2 = 0 + self.StopTimer = nil + else + if self.StopTimer==nil then self.StopTimer = CurTime() end + if self.StopTimer and CurTime()-self.StopTimer >= 10 then + self.StopTimer = false + end + local tbl = Metrostroi.ASNPSetup[self.Train:GetNW2Int("Announcer",1)] + local stbl = tbl[self.Line] and tbl[self.Line][self.Station] + if not stbl or not tbl[self.Line].BlockDoors or self.Arrived and self.Station == (self.Path and self.FirstStation or self.LastStation) then + self.K1 = 1 + self.K2 = 1 + elseif self.Arrived then + self.K1 = (stbl.both_doors or not stbl.right_doors) and 1 or 0 + self.K2 = (stbl.both_doors or stbl.right_doors) and 1 or 0 + elseif self.StopTimer~=false then + self.K1 = 0 + self.K2 = 0 + else + self.K1 = 1 + self.K2 = 1 + end + end + Train:SetNW2Bool("ASNP:LockedL",self.K1==0) + Train:SetNW2Bool("ASNP:LockedR",self.K2==0) + else + Train:SetNW2Bool("ASNP:CanLocked",false) + self.K1 = 0 + self.K2 = 0 + self.StopTimer = false + end + +end diff --git a/lua/metrostroi/systems/sys_81_71_asnp_vv.lua b/lua/metrostroi/systems/sys_81_71_asnp_vv.lua new file mode 100644 index 0000000..3ab0a46 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_71_asnp_vv.lua @@ -0,0 +1,22 @@ +-------------------------------------------------------------------------------- +-- I/O between ASNP and electric schemes +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_71_ASNP_VV") +TRAIN_SYSTEM.DontAccelerateSimulation = false + +function TRAIN_SYSTEM:Initialize() + self.Power = 0 + self.AmplifierPower = 0 + self.CabinSpeakerPower = 0 +end + +function TRAIN_SYSTEM:Outputs() + return {"Power","AmplifierPower","CabinSpeakerPower"} +end + +function TRAIN_SYSTEM:Inputs() + return {} +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_81_71_last_station.lua b/lua/metrostroi/systems/sys_81_71_last_station.lua new file mode 100644 index 0000000..5708ffc --- /dev/null +++ b/lua/metrostroi/systems/sys_81_71_last_station.lua @@ -0,0 +1,69 @@ +-------------------------------------------------------------------------------- +-- Last station sign helper system +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_71_LastStation") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize(texName) + self.ID = 0 + if texName then + self.TableName = texName.."_routes" + end + self.Texture = "" +end + +function TRAIN_SYSTEM:Outputs() + return {} +end + +function TRAIN_SYSTEM:Inputs() + return {"+","-"} +end +if TURBOSTROI then return end + +if SERVER then + function TRAIN_SYSTEM:TriggerInput(name,value) + if not self.TableName then return end + local tbl = Metrostroi.Skins[self.TableName] + if tbl and name=="+" and value>0 then + self.ID = self.ID+1 + if self.ID>#tbl then self.ID = 0 end + end + if tbl and name=="-" and value>0 then + self.ID = self.ID-1 + if self.ID<0 then self.ID = #tbl end + end + self.Train:SetNW2Int("LastStationID",self.ID) + end +else + function TRAIN_SYSTEM:ClientInitialize(texName,entName) + self.Reloaded = false + if texName then + self.TableName = texName.."_routes" + end + self.EntityName = entName + end + + function TRAIN_SYSTEM:ClientThink() + local Train = self.Train + local ent = Train.ClientEnts[self.EntityName] + + if self.Reloaded and self.ID ~= Train:GetNW2Int("LastStationID",-1) then + self.ID = Train:GetNW2Int("LastStationID",-1) + self.Reloaded = false + end + if not self.TableName or not Metrostroi.Skins[self.TableName] or not ent or self.Reloaded then return end + + self.Reloaded = true + local texTable = Metrostroi.Skins[self.TableName] + local tex = texTable[self.ID] + for id,texName in pairs(ent:GetMaterials()) do + if texName == texTable.default then + ent:SetSubMaterial(id-1,texTable[self.ID]) + end + end + end +end diff --git a/lua/metrostroi/systems/sys_81_71_route_number.lua b/lua/metrostroi/systems/sys_81_71_route_number.lua new file mode 100644 index 0000000..61e0681 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_71_route_number.lua @@ -0,0 +1,70 @@ +-------------------------------------------------------------------------------- +-- Route number helper system +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_71_RouteNumber") +TRAIN_SYSTEM.DontAccelerateSimulation = true +if TURBOSTROI then return end + +function TRAIN_SYSTEM:Initialize(parameter) + self.Max = parameter or 2 + if not TURBOSTROI then + local num = IsValid(self.Train.Owner) and (tonumber(self.Train.Owner:GetInfo("metrostroi_route_number","61")) or 0) + self.RouteNumber = Format("%03d",num*(10^(3-self.Max))%1000) + self.Train:SetNW2String("RouteNumber",self.RouteNumber) + end +end + +function TRAIN_SYSTEM:Outputs() + return {} +end + +function TRAIN_SYSTEM:Inputs() + return {"1+","2+","3+","1-","2-","3-"} +end + +if SERVER then + function TRAIN_SYSTEM:TriggerInput(name,value) + local Train = self.Train + local id = tonumber(name[1]) + if name[2]=="+" and value>0 then + local num = tonumber(self.RouteNumber[id])+1 + if num > 9 then num = 0 end + self.RouteNumber = self.RouteNumber:SetChar(id,num) + Train:SetNW2String("RouteNumber",self.RouteNumber) + end + if name[2]=="-" and value>0 then + local num = tonumber(self.RouteNumber[id])-1 + if num < 0 then num = 9 end + self.RouteNumber = self.RouteNumber:SetChar(id,num) + Train:SetNW2String("RouteNumber",self.RouteNumber) + end + end +else + function TRAIN_SYSTEM:ClientInitialize(parameter) + self.Max = parameter or 2 + self.Reloaded = false + end + + function TRAIN_SYSTEM:ClientThink() + local Train = self.Train + local scents = Train.ClientEnts + + if self.RouteNumber ~= Train:GetNW2String("RouteNumber","000") then + self.RouteNumber = Train:GetNW2String("RouteNumber","000") + self.Reloaded = false + end + if not scents["route1"] or self.Reloaded then return end + + self.Reloaded = true + + local rn = Format("%03d",self.RouteNumber) + for i=1,self.Max do + if IsValid(scents["route"..i]) then + scents["route"..i]:SetSkin(rn[i]) + end + end + end +end diff --git a/lua/metrostroi/systems/sys_81_71_rri.lua b/lua/metrostroi/systems/sys_81_71_rri.lua new file mode 100644 index 0000000..3d49b0b --- /dev/null +++ b/lua/metrostroi/systems/sys_81_71_rri.lua @@ -0,0 +1,535 @@ +-------------------------------------------------------------------------------- +-- RRI announcer and announcer-related code for 81-70*/81-71* trains +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_71_RRI") +TRAIN_SYSTEM.DontAccelerateSimulation = true +function TRAIN_SYSTEM:Initialize(tbl) + self.LineOut = 0 + + self.TriggerNames = { + "RRIAmplifier", + "R_Program1", + "R_Program2", + "R_Program1H", + "R_Program2H", + "SB10", + "SB11", + "SB20", + "SB21", + } + self.Triggers = {} + + self.State = 0 + + self.Selected = 0 + self.AnnTable = tbl + + self.Arrived = true + if not self.Train.RRIEnable then + self.Train:LoadSystem("RRIEnable","Relay","Switch",{bass = true}) + self.Train:LoadSystem("RRIRewind","Relay","Switch",{bass = true,maxvalue=2,defaultvalue=1}) + self.Train:LoadSystem("RRIAmplifier","Relay","Switch",{bass = true}) + end +end + +if TURBOSTROI then return end + +function TRAIN_SYSTEM:Inputs() + return {"Disable","Up","Down","Left","Right"} +end + +function TRAIN_SYSTEM:Outputs() + return {"LineOut"} +end + +if CLIENT then + local function createFont(name,font,size,weight) + surface.CreateFont("Metrostroi_"..name, { + font = font, + size = size, + weight = weight or 400, + blursize = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + }) + end + createFont("Arial10","Arial",10,400) + createFont("Arial11","Arial",11,400) + createFont("Arial13","Arial",13,400) + createFont("Arial15","Arial",15,400) + createFont("Arial15B","Arial",15,800) + createFont("Arial20","Arial",20,800) + function TRAIN_SYSTEM:Draw(Train) + local line = Train:GetNW2Int("RRI:Line",-1) + local rriL = self.CurrentTable and self.CurrentTable[line] + + if not rriL then + draw.DrawText("No cassete","Metrostroi_Arial13",10,0,Color(255,100,50)) + return + end + local firststation = rriL[Train:GetNW2Int("RRI:FirstStation",-1)] + local laststation = rriL[Train:GetNW2Int("RRI:LastStation",-1)] + local currstation = rriL[Train:GetNW2Int("RRI:Station",-1)] + local arrived = Train:GetNW2Bool("RRI:Arrived") + + local selected = Train:GetNW2Int("RRI:Selected",0) + draw.SimpleText("â–ª","Metrostroi_Arial20",5,5+selected*10,Color(100,200,50),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("Ln [%d] %s %s",line,rriL.NameEn or rriL.Name,rriL.Loop and "Loop" or ""),"Metrostroi_Arial13",10,5,Color(200,100,50),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if rriL.Loop then + draw.SimpleText(Format("Path: %s",Train:GetNW2Bool("RRI:Path",false) and "II" or "I"),"Metrostroi_Arial13",10,15,Color(200,100,50),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + elseif firststation then + draw.SimpleText(Format("FSt[%d] %s",firststation[1],firststation[3] or firststation[2]),"Metrostroi_Arial13",10,15,Color(200,100,50),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + draw.SimpleText("FSt ERR","Metrostroi_Arial13",10,15,Color(200,100,50),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + if Train:GetNW2Int("RRI:LastStation",-1) == 0 then + draw.SimpleText("LSt[()] Loop","Metrostroi_Arial13",10,25,Color(200,100,50),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + elseif laststation then + draw.SimpleText(Format("LSt[%d] %s",laststation[1],laststation[3] or laststation[2]),"Metrostroi_Arial13",10,25,Color(200,100,50),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + draw.SimpleText("LSt ERR","Metrostroi_Arial13",10,25,Color(200,100,50),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + if currstation then + draw.SimpleText(Format("CSt[%d] %s",currstation[1],currstation[3] or currstation[2]),"Metrostroi_Arial13",10,35,Color(200,100,50),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + draw.SimpleText("CSt ERR","Metrostroi_Arial13",10,35,Color(200,100,50),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + draw.SimpleText(arrived and "Depeating" or "Arriving","Metrostroi_Arial13",10,45,Color(200,100,50),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("Controls:","Metrostroi_Arial13",60,55,Color(200,100,50),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("â–²","Metrostroi_Arial13",30,60,Color(200,100,50),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("â–¼","Metrostroi_Arial13",30,80,Color(200,100,50),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("â—„","Metrostroi_Arial13",20,70,Color(200,100,50),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("â–º","Metrostroi_Arial13",40,70,Color(200,100,50),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + if not Train:GetPackedBool("RRIOn") then + draw.DrawText("Block is inactive","Metrostroi_Arial13",10,85,Color(255,50,50)) + end + end + function TRAIN_SYSTEM:ClientThink() + if not self.DrawTimer then + render.PushRenderTarget(self.Train.RRIScreen,0,0,128, 128) + render.Clear(0, 0, 0, 0) + render.PopRenderTarget() + end + if not self.Train:ShouldDrawPanel("RRIScreen") or self.DrawTimer and CurTime()-self.DrawTimer < 0.1 then return end + + if self.Announcer ~= self.Train:GetNW2Int("Announcer",-1) then + if self.AnnTable then + self.Announcer = self.Train:GetNW2Int("Announcer",-1) + self.CurrentTable = self.AnnTable[self.Announcer] + else + self.CurrentTable = Metrostroi.RRISetup + end + end + self.DrawTimer = CurTime() + render.PushRenderTarget(self.Train.RRIScreen,0,0,121, 103) + render.Clear(0, 0, 0, 0) + cam.Start2D() + self:Draw(self.Train) + cam.End2D() + render.PopRenderTarget() + end + + function TRAIN_SYSTEM:ClientInitialize(tbl) + self.AnnTable = tbl + end + return +end + +function TRAIN_SYSTEM:Zero() + self.Station = self.Path and self.LastStation or self.FirstStation + self.Arrived = true +end + +function TRAIN_SYSTEM:Next() + local tbl = self.CurrentTable[self.Train:GetNW2Int("Announcer",1)][self.Line] + if tbl.Loop then + if self.Arrived then + if self.Path then + self.Station = self.Station - 1 + else + self.Station = self.Station + 1 + end + if self.Station == 0 or self.Station > #tbl then + self.Station = self.Station == 0 and #tbl or 1 + end + if self.Station == 0 or self.Station > #tbl then + self.Station = self.Station == 0 and (self.LastStation > 0 and self.LastStation or #tbl) or 1 + end + self.Arrived = false + --self.Station = 1 + else + self.Arrived = true + end + else + if self.Arrived then + if self.Station ~= (self.Path and self.FirstStation or self.LastStation) then + if self.Path then + self.Station = math.max(self.FirstStation,self.Station - 1) + else + self.Station = math.min(self.LastStation,self.Station + 1) + end + self.Arrived = false + end + else + self.Arrived = true + end + end +end +function TRAIN_SYSTEM:Prev() + local tbl = self.CurrentTable[self.Train:GetNW2Int("Announcer",1)][self.Line] + if tbl.Loop then + if not self.Arrived then + if self.Path then + self.Station = self.Station + 1 + else + self.Station = self.Station - 1 + end + if self.Station == 0 or self.Station > #tbl then + self.Station = self.Station == 0 and (self.LastStation > 0 and self.LastStation or #tbl) or 1 + end + --self.Station = 1 + self.Arrived = true + else + self.Arrived = false + end + else + if not self.Arrived then + if self.Path then + self.Station = math.min(self.LastStation,self.Station + 1) + else + self.Station = math.max(self.FirstStation,self.Station - 1) + end + self.Arrived = true + else + if self.Station ~= (self.Path and self.LastStation or self.FirstStation) then + self.Arrived = false + end + end + end +end +function TRAIN_SYSTEM:AnnQueue(msg) + local Announcer = self.Train.Announcer + if msg and type(msg) ~= "table" then + Announcer:Queue{msg} + else + Announcer:Queue(msg) + end +end +function TRAIN_SYSTEM:Play() + local message + local tbl = self.CurrentTable[self.Line] + if not tbl then error(Format("Line %d not found in announcer %d",self.Line,self.Announcer)) end + local stbl = tbl[self.Station] + local last = self.LastStation + local lastst + + local path + if tbl.Loop then + path = self.Path + lastst = not self.Arrived and self.LastStation > 0 and self.Station == last and tbl[last].arrlast + else + path = self.FirstStation > self.LastStation + lastst = not self.Arrived and self.Station == last and tbl[last].arrlast + end + path = path and 2 or 1 + + if self.Arrived then + message = stbl.dep[path] + else + if lastst then + message = stbl.arrlast[path] + else + message = stbl.arr[path] + end + end + self:AnnQueue{0.5,"click_start","buzz_start",0.6} + if lastst and not stbl.ignorelast then self:AnnQueue(-1) end + self:AnnQueue(message) + --local stbl = self.CurrentTable[self.Train:GetNW2Int("Announcer",1)][self.Line][self.Station] + if self.LastStation > 0 and not self.Arrived and self.Station ~= last and tbl[last].not_last and (stbl.have_inrerchange or math.abs(last-self.Station) <= 3) then + local ltbl = tbl[last] + if stbl.not_last_c then + local patt = stbl.not_last_c[path] + self:AnnQueue(ltbl[patt] or ltbl.not_last) + else + self:AnnQueue(ltbl.not_last) + end + end + self:AnnQueue{2,"click_end","buzz_end",0.3} + --self:UpdateBoards() +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Disable" then + self.Disable = value>0 + if self.Disable then self:Initialize() end + end + if self.Disable or value~=1 then return end + local rri = self.CurrentTable + if name == "Down" and self.Selected < 3 then + self.Selected = self.Selected + 1 + self.Train:SetNW2Int("RRI:Selected",self.Selected) + end + if name == "Up" and self.Selected > 0 then + self.Selected = self.Selected - 1 + self.Train:SetNW2Int("RRI:Selected",self.Selected) + end + if name == "Left" or name == "Right" then + local rriL = rri[self.Line] + if self.Selected == 0 then + if name == "Right" then + self.Line = self.Line+1 + if self.Line > #rri then self.Line = 1 end + end + if name == "Left" then + self.Line = self.Line-1 + if self.Line < 1 then self.Line = #rri end + end + rriL = rri[self.Line] + self.FirstStation = -1 + if not rriL.Loop then + self.LastStation = #rri[self.Line]+1 + repeat + self.FirstStation = self.FirstStation + 1 + if self.FirstStation > #rriL then self.FirstStation = 1 end + until (not rriL[self.FirstStation] or (rriL[self.FirstStation].arrlast and rriL[self.FirstStation].arrlast[self.FirstStation > self.LastStation and 2 or 1]))-- and self.FirstStation ~= self.LastStation + repeat + self.LastStation = self.LastStation - 1 + if self.LastStation < (rriL.Loop and 0 or 1) then self.LastStation = #rriL end + until (not rriL[self.LastStation] or (rriL[self.LastStation].arrlast and rriL[self.LastStation].arrlast[self.FirstStation > self.LastStation]) or rriL.Loop and self.LastStation == 0) and self.LastStation ~= self.FirstStation + else + self.LastStation = 0 + end + + self.Arrived = true + end + + if self.Selected == 1 then + if name == "Right" then + if rriL.Loop then + self.Path = not self.Path + else + repeat + self.FirstStation = self.FirstStation + 1 + if self.FirstStation > #rriL then self.FirstStation = 1 end + until (not rriL[self.FirstStation] or rriL[self.FirstStation].arrlast)-- and self.FirstStation ~= self.LastStation + end + end + if name == "Left" then + if rriL.Loop then + self.Path = not self.Path + else + repeat + self.FirstStation = self.FirstStation - 1 + if self.FirstStation < 1 then self.FirstStation = #rriL end + until (not rriL[self.FirstStation] or rriL[self.FirstStation].arrlast)-- and self.FirstStation ~= self.LastStation + end + end + + self.LastStation = (rriL.Loop and 0 or 1) and 0 or #rri[self.Line]+1 + if rriL.Loop then + self.LastStation = 0 + else + repeat + self.LastStation = self.LastStation - 1 + if self.LastStation < 1 then self.LastStation = #rriL end + until (not rriL[self.LastStation] or (rriL[self.LastStation].arrlast and rriL[self.LastStation].arrlast[self.FirstStation > self.LastStation and 2 or 1]) or rriL.Loop and self.LastStation == 0) + if self.FirstStation==self.LastStation then + self.LastStation = 0 + repeat + self.LastStation = self.LastStation + 1 + if self.LastStation > #rriL then self.LastStation = (rriL.Loop and 0 or 1) end + until (not rriL[self.LastStation] or (rriL[self.LastStation].arrlast and rriL[self.LastStation].arrlast[self.FirstStation > self.LastStation and 2 or 1]) or rriL.Loop and self.LastStation == 0) and self.LastStation ~= self.FirstStation + end + end + if self.FirstStation > 0 then + self.Station = self.FirstStation + else + self.Station = 1 + end + end + if self.Selected == 2 then + if name == "Right" then + if rriL.Loop then + repeat + self.LastStation = self.LastStation + 1 + if self.LastStation > #rriL then self.LastStation = (rriL.Loop and 0 or 1) end + until (not rriL[self.LastStation] or (rriL[self.LastStation].arrlast and rriL[self.LastStation].arrlast[self.Path and 2 or 1]) or rriL.Loop and self.LastStation == 0) and self.LastStation ~= self.FirstStation + else + repeat + self.LastStation = self.LastStation + 1 + if self.LastStation > #rriL then self.LastStation = (rriL.Loop and 0 or 1) end + until (not rriL[self.LastStation] or (rriL[self.LastStation].arrlast and rriL[self.LastStation].arrlast[self.FirstStation > self.LastStation and 2 or 1]) or rriL.Loop and self.LastStation == 0) and self.LastStation ~= self.FirstStation + end + end + if name == "Left" then + if rriL.Loop then + repeat + self.LastStation = self.LastStation - 1 + if self.LastStation < (rriL.Loop and 0 or 1) then self.LastStation = #rriL end + until (not rriL[self.LastStation] or (rriL[self.LastStation].arrlast and rriL[self.LastStation].arrlast[self.Path and 2 or 1]) or rriL.Loop and self.LastStation == 0) and self.LastStation ~= self.FirstStation + else + repeat + self.LastStation = self.LastStation - 1 + if self.LastStation < (rriL.Loop and 0 or 1) then self.LastStation = #rriL end + until (not rriL[self.LastStation] or (rriL[self.LastStation].arrlast and rriL[self.LastStation].arrlast[self.FirstStation > self.LastStation and 2 or 1]) or rriL.Loop and self.LastStation == 0) and self.LastStation ~= self.FirstStation + end + end + if self.FirstStation > 0 then + self.Station = self.FirstStation + else + self.Station = 1 + end + end + if self.Selected == 3 then + if name == "Right" then + if rriL.Loop and (self.Arrived or self.Station == self.LastStation) and (self.Path and self.Station == 1 or not self.Path and self.Station == #rriL) then + self.Arrived = false + self.Station = self.Path and #rriL or 1 + elseif not rriL.Loop and self.Station == self.LastStation then + self.Arrived = true + self.Station = self.FirstStation + elseif not self.Arrived then + self.Arrived = true + elseif rriL.Loop then + if self.Path then + self.Station = self.Station - 1 + else + self.Station = self.Station + 1 + end + self.Arrived = false + else + if self.FirstStation > self.LastStation then + self.Station = self.Station - 1 + else + self.Station = self.Station + 1 + end + self.Arrived = false + end + end + if name == "Left" then + if rriL.Loop and (not self.Arrived) and (not self.Path and self.Station == 1 or self.Path and self.Station == #rriL) then + self.Arrived = true + self.Station = self.Path and 1 or #rriL + elseif not rriL.Loop and self.Station == self.FirstStation then + self.Arrived = true + self.Station = self.LastStation + elseif self.Arrived then + self.Arrived = false + elseif rriL.Loop then + if self.Path then + self.Station = self.Station + 1 + else + self.Station = self.Station - 1 + end + self.Arrived = true + else + if self.FirstStation > self.LastStation then + self.Station = self.Station + 1 + else + self.Station = self.Station - 1 + end + self.Arrived = true + end + end + end + end +end + +function TRAIN_SYSTEM:Trigger(name,value) + if self.Power and (name == "R_Program1" or name == "R_Program1H" or name == "SB10" or name == "SB20") and value > 0 then + if self.LineOut>0 then self:AnnQueue{-2,"buzz_end","click_end",0.5} end + self:Play() + local rriL = self.CurrentTable[self.Line] + if rriL.Loop and self.Arrived and (self.Path and self.Station == 1 or not self.Path and self.Station == #rriL) then + self.Arrived = false + self.Station = self.Path and #rriL or 1 + elseif not rriL.Loop and self.Station == self.LastStation then + self.Arrived = true + self.Station = self.FirstStation + elseif not self.Arrived then + self.Arrived = true + else + if self.FirstStation == -1 then + self.Station = self.Station + (self.Path and -1 or 1) + elseif self.FirstStation > self.LastStation then + self.Station = self.Station - 1 + else + self.Station = self.Station + 1 + end + self.Arrived = false + end + end +end +--States: +-- -2 - Loaded in another cab +-- -1 - Starting up +--nil - First setUp and get settings from last +--1 - Welcome Screen +--2 - Route Choose +--3 - Choose start station +--4 - Choose end station +--5 - Choose path +--6 - Choose style of playing +--7 - Normal state +--8 - Confim a settings (on last stations) +function TRAIN_SYSTEM:Think() + if self.Disable then return end + local Train = self.Train + local VV = Train.RRI_VV + self.Power = VV.Power > 0 + if not self.Power and self.LineOut>0 then self:AnnQueue{-2,"buzz_end","click_end"} end + + for k,v in pairs(self.TriggerNames) do + if Train[v] and Train[v].Value ~= self.Triggers[v] then + self:Trigger(v,Train[v].Value) + self.Triggers[v] = Train[v].Value + end + end + if self.Announcer ~= self.Train:GetNW2Int("Announcer",-1) then + self.Announcer = self.Train:GetNW2Int("Announcer",-1) + if self.AnnTable then + self.CurrentTable = self.AnnTable[self.Announcer] + else + self.CurrentTable = Metrostroi.RRISetup + end + if self.CurrentTable and self.CurrentTable[1] then + self.Line = 1 + if self.CurrentTable[self.Line].Loop then + self.FirstStation = -1 + self.LastStation = 0 + self.Path = faslse + self.Station = 1 + else + self.FirstStation = 1 + self.LastStation = #self.CurrentTable[self.Line] + self.Station = self.FirstStation + end + else + self.Line = -1 + + self.FirstStation = -1 + self.LastStation = -1 + self.Station = -1 + end + end + Train:SetNW2Int("RRI:Line",self.Line) + Train:SetNW2Int("RRI:FirstStation",self.FirstStation) + Train:SetNW2Int("RRI:LastStation",self.LastStation) + Train:SetNW2Int("RRI:Station",self.Station) + Train:SetNW2Bool("RRI:Path",self.Path) + Train:SetNW2Bool("RRI:Arrived",self.Arrived) + + self.LineOut = #Train.Announcer.Schedule>0 and 1 or 0 +end diff --git a/lua/metrostroi/systems/sys_81_71_rri_vv.lua b/lua/metrostroi/systems/sys_81_71_rri_vv.lua new file mode 100644 index 0000000..ffc0a3c --- /dev/null +++ b/lua/metrostroi/systems/sys_81_71_rri_vv.lua @@ -0,0 +1,22 @@ +-------------------------------------------------------------------------------- +-- I/O between RRI and electric schemes +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_71_RRI_VV") +TRAIN_SYSTEM.DontAccelerateSimulation = false + +function TRAIN_SYSTEM:Initialize() + self.Power = 0 + self.AmplifierPower = 0 + self.CabinSpeakerPower = 0 +end + +function TRAIN_SYSTEM:Outputs() + return {"Power","AmplifierPower","CabinSpeakerPower"} +end + +function TRAIN_SYSTEM:Inputs() + return {} +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_81_71_upo.lua b/lua/metrostroi/systems/sys_81_71_upo.lua new file mode 100644 index 0000000..a2fa32c --- /dev/null +++ b/lua/metrostroi/systems/sys_81_71_upo.lua @@ -0,0 +1,152 @@ +-------------------------------------------------------------------------------- +-- UPO annoncer system +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_71_UPO") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.Line = 1 + self.Path = false + self.Station = 1 + self.Arrived = true + self.Selected = 0 + self.LineEnabled = false + + self.LineOut = 0 +end + +function TRAIN_SYSTEM:Outputs() + return {"LineOut"} +end + +function TRAIN_SYSTEM:Inputs() + return {"ArriveRandom"} +end + +if TURBOSTROI then return end + +function TRAIN_SYSTEM:TriggerInput(name, value) + if name == "ArriveRandom" then self.ArriveRandom = value>0 end +end + +function TRAIN_SYSTEM:AnnQueue(msg) + local Announcer = self.Train.Announcer + if msg and type(msg) ~= "table" then + Announcer:Queue{msg} + else + Announcer:Queue(msg) + end +end + +function TRAIN_SYSTEM:Play(dep) + local tbl = Metrostroi.UPOSetup + if not tbl then return end + self.Train.Announcer:TriggerInput("Reset","AnnouncementsUPO") + local stbl = tbl[self.Station] + local path = self.Path and 2 or 1 + if not stbl or dep and not stbl.dep or not dep and not stbl.arr and not stbl.arrlast then return end + if dep and stbl.dep and stbl.dep[path] and (not self.Train.OnUPOArrived or self.Train:OnUPOArrived()) then + self:AnnQueue(-2) + self:AnnQueue{"noise_end","buzz_end_upo"} + if self.Buzz then self:AnnQueue{"buzz_start_upo",self.Buzz} else self:AnnQueue("buzz_end_upo") end + if self.Clicks then self:AnnQueue("click1") end + self:AnnQueue(math.Rand(0.0,0.2)) + if self.Noise then self:AnnQueue{"noise_start",self.Noise} else self:AnnQueue("noise_end") end + self:AnnQueue{math.Rand(0.0,0.2), stbl.tone or "tone"} + self:AnnQueue(stbl.dep[path]) + self:AnnQueue{math.Rand(0.1,0.4),"noise_end","buzz_end_upo"} + if self.Clicks then self:AnnQueue("click2") end + elseif not dep then + local msg,lastst + if stbl.arr then msg = stbl.arr[path] end + + if not msg and stbl.arrlast then + msg = stbl.arrlast[path] + lastst = true + end + if msg and (not self.Train.OnUPOArrived or self.Train:OnUPOArrived()) then + self:AnnQueue(-2) + self:AnnQueue{"noise_end","buzz_end_upo"} + if self.Buzz then self:AnnQueue{"buzz_start_upo",self.Buzz} else self:AnnQueue("buzz_end_upo") end + if self.Clicks then self:AnnQueue("click1") end + self:AnnQueue(math.Rand(0.0,0.2)) + if self.Noise then self:AnnQueue{"noise_start",self.Noise} else self:AnnQueue("noise_end") end + self:AnnQueue{math.Rand(0.0,0.2), stbl.tone or "tone"} + if lastst then self:AnnQueue{-1} end + self:AnnQueue(msg) + self:AnnQueue{math.Rand(0.1,0.4),"noise_end","buzz_end_upo"} + if self.Clicks then self:AnnQueue("click2") end + end + end +end + +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local tbl = Metrostroi.UPOSetup + if not tbl then + self.State = false + + return + end + --local KRUEnabled = Train.KRU and Train.KRU["14/1-B3"] > 0 + --local RVForward = (Train.KV["D4-15"] > 0 or KRUEnabled) + local UPOWork = Train.Panel.UPOPower>0 + + --self.LastStationName = stbl[self.Line][self.Path and self.StartStation or self.EndStation][2] + if UPOWork then + local path = Train:ReadCell(49170) --Metrostroi.PathConverter[self.Train:ReadCell(65510)] or 0 + self.Path = path == 2 + local station = Train:ReadCell(49169) + local stbl + local distance = math.min(3072, self.Train:ReadCell(49165)) + --Find my station + self.Station = nil + for i2, v in ipairs(tbl) do + if v[1] == station then + stbl = v + self.Station = i2 + break + end + end + --local stbl = tbl[self.Line] and tbl[self.Line][self.Station] + local dist = stbl and stbl.dist or 75 + --print(self.Path,stbl.arr[self.Path and 2 or 1][3],self.Path and 2 or 1) + if station ~= self.CurrentStation and distance < dist and self.UPOArrived == nil then + self.UPOArrived = true + self.CurrentStation = station + self.Noise = stbl and stbl.noise or 0 + if not self.AnnouncerPlay and stbl then + self.Clicks = math.random() > 0.4 + self:Play(false) + end + end + if self.UPOArrived and self.AnnouncerPlay then + self.UPOArrived = false + if stbl then + self.Clicks = math.random() > 0.4 + self:Play(true) + end + end + + if self.UPOArrived == false and Train.Speed > 0.1 then + self.UPOArrived = nil + end + if distance < 0 or distance > dist and self.CurrentStation then + if #Train.Announcer.Schedule > 0 then + Train.Announcer:Reset() + --Train.Announcer:Queue{"click2"} + --Train:WriteTrainWire(47, 0) + end + self.UPOArrived = nil + self.CurrentStation = nil + end + else + --self.UPOArrived = nil + --self.CurrentStation = nil + end + local Ann = Train.Announcer + self.LineOut = (Ann.AnnTable=="AnnouncementsUPO" and Ann.AnnounceTimer) and Train.Panel.UPOPower or 0 +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_81_720_bars.lua b/lua/metrostroi/systems/sys_81_720_bars.lua new file mode 100644 index 0000000..2404fb5 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_720_bars.lua @@ -0,0 +1,313 @@ +-------------------------------------------------------------------------------- +-- 81-720 "BARS" safety system +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_720_BARS") +TRAIN_SYSTEM.DontAccelerateSimulation = true + + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("ALSCoil") + + -- Internal state + self.Active = 0 + + self.SpeedLimit = 0 + self.NextLimit = 0 + self.Ring = 0 + self.Overspeed = false + + self.Brake = false + self.Brake2 = false + self.Drive = false + self.Braking = false + self.LN = false + self.PN1 = 0 + self.PN2 = 0 + self.BTB = 0 + self.BTBReady = 0 + self.BINoFreq = 0 + + self.BIAccel = 0 + self.BIDirection = 0 +end + +function TRAIN_SYSTEM:Outputs() + return {"Active","Ring","Brake","Brake2","Drive","PN1","PN2", "SpeedLimit", "BTB","BINoFreq","BIAccel","BIDirection"} +end + +function TRAIN_SYSTEM:Inputs() + return {} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local ALS = Train.ALSCoil + local Power = Train.Electric.Battery80V > 62 and (Train.SF7.Value > 0.5 and (Train.BARSBlock.Value == 0 or Train.BARSBlock.Value == 2) or Train.SF4.Value > 0.5 and Train.BARSBlock.Value <= 1) and (Train.RV["KRO5-6"] == 0 or Train.RV["KRR15-16"] > 0) and Train.ALS.Value == 0 + local UOS = (Train.BARSBlock.Value == 3 or Train.SF7.Value < 0.5 and Train.BARSBlock.Value == 1 or Train.SF4.Value < 0.5 and Train.BARSBlock.Value == 2) and (Train.RV["KRO5-6"] == 0 or Train.RV["KRR15-16"] > 0) and Train.ALS.Value == 0 + local EnableALS = Train.Electric.Battery80V > 62 and (1-Train.RV["KRO5-6"]) + Train.RV["KRR15-16"] > 0 + + local TwoToSix = Train.ALSFreq.Value > 0 + if EnableALS ~= (ALS.Enabled==1) then + ALS:TriggerInput("Enable",EnableALS and 1 or 0) + end + + self.NoFreq = ALS.NoFreq > 0 + self.BINoFreq = ALS.NoFreq + self.F1 = ALS.F1 > 0 and not self.NoFreq + self.F2 = ALS.F2 > 0 and not self.NoFreq + self.F3 = ALS.F3 > 0 and not self.NoFreq + self.F4 = ALS.F4 > 0 and not self.NoFreq + self.F5 = ALS.F5 > 0 and not self.NoFreq + self.F6 = ALS.F6 > 0 and not self.NoFreq + self.RealF5 = self.F5 and not self.F4 and not self.F3 and not self.F2 and not self.F1 + -- Speed check and update speed data + if CurTime() - (self.LastSpeedCheck or 0) > 0.5 then + self.LastSpeedCheck = CurTime() + self.Speed = math.Round(Train.Speed or 0,1) + end + -- ARS system placeholder logic + self.KB = (Train.PB.Value > 0.5 or Train.Attention.Value > 0.5) + self.KVT = (Train.AttentionBrake.Value > 0.5) + local Active = Power-- and Train.ALS.Value == 0-- and Train.BUKP.Active > 0 and Train.BUV.Reverser ~= 0 + if not self.Ready then Active = false end + local Emer = Active and Train.RV["KRR15-16"] > 0 + + local KMState = Train.Panel.Controller + local BUPKMState = Train.BUKP.ControllerState + if Emer then + KMState = (Train.EmerX1.Value > 0 or Train.EmerX2.Value > 0) and 1 or 0 + BUPKMState = (Train.EmerX1.Value > 0 or Train.EmerX2.Value > 0) and 1 or 0 + end + if EnableALS then + local V = math.floor(self.Speed +0.05) + local Vlimit = 20 + local VLimit2 + if self.F4 then Vlimit = 40 end + if self.F3 then Vlimit = 60 end + if self.F2 then Vlimit = 70 end + if self.F1 then Vlimit = 80 end + + --if ( self.KB) and (Vlimit ~= 0) and (V > Vlimit) then self.Overspeed = true end + --if ( self.KB) and (Vlimit == 0) and (V > 20) then self.Overspeed = true end + --if (not self.KB) and (V > Vlimit) and (V > (self.RealNoFreq and 0 or 3)) then self.Overspeed = true end + --if ( self.KB) and (Vlimit == 0) and self.Train.ARSType and self.Train.ARSType == 3 and not self.Train["PA-KSD"].VRD then self.Overspeed = true end + --self.Ring = self.Overspeed and (speed > 5) + + -- Determine next limit and current limit + self.SpeedLimit = VLimit2 or Vlimit+0.5 + self.NextLimit = VLimit2 or Vlimit + if self.F1 then self.NextLimit = 80 end + if self.F2 then self.NextLimit = 70 end + if self.F3 then self.NextLimit = 60 end + if self.F4 then self.NextLimit = 40 end + if self.F5 then self.NextLimit = 20 end + if not TwoToSix and (self.NextLimit ~= math.max(20,Vlimit) or self.F6) then + self.SpeedLimit = 0 + self.NextLimit = self.SpeedLimit + self.NoFreq = true + self.BINoFreq = 1 + end + if TwoToSix and self.F4 and self.F6 then + self.LN = true + end + if self.SpeedLimit < 20 and self.KB then + self.SpeedLimit = 20 + end + local PrepareAO = self.RealF5 and 2 or self.NoFreq and 1 or 0 + if not self.AOTimer and PrepareAO > 0 then + self.AOTimer = CurTime() + elseif PrepareAO <= 0 then + self.AOTimer = nil + end + if PrepareAO > 0 and (CurTime()-self.AOTimer < 2 or self.OldPrepareAO ~= PrepareAO) and (not self.AOState or self.AOState%2 ~= PrepareAO%2) then + self.AOTimer = CurTime() + self.AOState = (self.AOState or 0) + 1 + elseif PrepareAO == 0 or self.AOTimer and CurTime()-self.AOTimer >= 2 then + self.AOState = false + end + + self.OldPrepareAO = PrepareAO + --self.BIAccel = 0 + if self.AOState and self.AOState>2 then + self.SpeedLimit = 0 + self.NextLimit = 0 + self.BINoFreq = 0 + self.BIAccel = -10 + self.KB = false + else + if self.BIAccel == -10 then self.BIAccel = Train.Acceleration end + self.BIAccel = 0.8*self.BIAccel + 0.2*Train.Acceleration + end + else + self.AOState = false + self.AOTimer = false + self.BIAccel = 0 + self.SpeedLimit = 0 + self.NextLimit = 0 + end + + if Active then + if self.Speed <= 0.1 then + self.BTB = 1 + end + local speed = self.Speed*Train.SpeedSign + local Drive = self.Drive > 0 + local Brake = self.Brake > 0 + local SpeedLimit = self.SpeedLimit + if TwoToSix and (not self.LN or self.NextLimit == math.max(20,SpeedLimit) and self.F6 == 0) then + SpeedLimit = math.min(40,SpeedLimit) + end + if self.KB then SpeedLimit = 20 end + + if self.Speed > SpeedLimit + --or (self.F1 or self.F2 or self.F3 or self.F4) and self.KB and speed > 20 + or (self.NoFreq or self.RealF5) and not self.KB and self.Speed > 0.1 + or self.Braking and not Brake then + if not Brake and (SpeedLimit > 20 or self.Speed > 0) then + self.Braking = CurTime() + self.PN1Timer = CurTime() + end + if not Brake and (SpeedLimit > 20 or self.Speed > 0) then self.Ringing = true end + Brake = true + elseif self.Speed < SpeedLimit and not self.Braking and KMState <= 0 then + Brake = false + end + if (self.Ringing or self.Braking) and self.KVT then + self.Braking = false + self.Ringing = false + end + --Emer brake if we braking and speed < 4.5 + if Brake and self.Speed > 0.1 and self.Speed < 4.5 then self.BTB = 0 end + + --ПротивоÑкат + if self.Speed < 0.2 and self.PN2 == 0 and (BUPKMState <= 0 or self.Drive == 0) then + self.PN2 = 1 + self.Starting = nil + end + if (BUPKMState > 0 and self.Drive > 0) and self.PN2 > 0 then + if not self.Starting then + self.Starting = CurTime() + end + self.PN2 = 0 + end + if speed < -0.2 and not self.RollingTimer and not self.RollingBraking then self.RollingTimer = CurTime() end + if speed >= -0.2 and self.RollingTimer and (CurTime()-self.RollingTimer < 3 or not self.RollingBraking) then self.RollingTimer = nil end + if speed < -0.2 and self.RollingTimer and CurTime()-self.RollingTimer > 3 and not self.RollingBraking then + self.RollingBraking = CurTime() + self.RollingTimer = nil + end + if self.RollingBraking and KMState > 0 then self.RollingBraking = CurTime() end + if self.RollingBraking and CurTime()-self.RollingBraking > 1.5 then self.RollingBraking = nil end + if self.Starting and CurTime() - self.Starting > 6 then + if self.Speed < 1.5 and not self.KB then self.RollingBraking = CurTime() end + self.Starting = nil + end + if self.RollingBraking then self.BTB = 0 end + if self.PN2 > 0 and self.Speed > 0.1 then self.BTB = 0 end + --Brake efficiency check + if Brake and Train.Acceleration > -0.8 and self.Speed > 0 and not self.BrakeEfficiency then self.BrakeEfficiency = CurTime() end + local btbtimer = self.Speed > 43 and 3.8 or 3.5 + if (not Brake or Train.Acceleration <= -0.1 or self.Speed == 0) and self.BrakeEfficiency and CurTime()-self.BrakeEfficiency < btbtimer then self.BrakeEfficiency = nil end + --if self.BrakeEfficiency and KMState <= 0 and self.Speed < 0.1 then self.BrakeEfficiency = nil end + if self.BrakeEfficiency and CurTime()-self.BrakeEfficiency >= btbtimer then + self.BTB = 0 + self.BrakeEfficiency = nil + end + --Disable PN1 if not braking or passed 1.5s + if self.PN1Timer and (CurTime()-self.PN1Timer > 1--[[ 1.5--]] or not Brake) then self.PN1Timer = nil end + if self.Speed > SpeedLimit-1.1 and KMState > 0 then + self.DisableDrive = true + self.ControllerInDrive = KMState > 0 + end + if self.Speed < SpeedLimit-3 and KMState <= 0 then + self.DisableDrive = false + self.ControllerInDrive = false + end + if self.ControllerInDrive and (not self.DisableDrive or KMState <= 0) then self.ControllerInDrive = false end + if self.DisableDrive and not self.ControllerInDrive and KMState > 0 then + self.Braking = CurTime() + self.PN1Timer = CurTime() + self.Ringing = true + Brake = true + end + --[[ + Drive = not self.DisableDrive and ( + (self.NoFreq or self.RealF5) and self.KB + or not self.NoFreq and not self.RealF5 + ) and not Brake and not Brake2 + self.PN1 = self.PN1Timer and 1 or 0 + self.Ring = self.Ringing and 1 or 0 + self.Brake = Brake and 1 or 0 + self.Brake2 = Brake2 and 1 or 0 + self.Drive = Drive and 1 or 0]] + Drive = not self.DisableDrive and ( + (self.NoFreq or self.RealF5) and self.KB + or not self.NoFreq and not self.RealF5 + ) and not Brake and not Brake2 + self.PN1 = self.PN1Timer and 1 or 0 + self.Ring = self.Ringing and 1 or 0 + self.Brake = Brake and 1 or 0 + self.Brake2 = Brake2 and 1 or 0 + self.Drive = Drive and 1 or 0 + if Emer then + if self.PN2 > 0 or self.Brake > 0 and self.Drive == 0 then + self.BTB = 0 + end + end + self.BIDirection = speed > 0.2 and 1 or speed < -0.2 and -1 or 0 + else + if Train.ALS.Value > 0 then + --[[ УÑтройÑтва БÐРС, или при Ñледовании Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡Ñ‘Ð½Ð½Ñ‹Ð¼Ð¸ уÑтройÑтвами БÐРС, уÑтройÑтво Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ ÑкороÑти (УОС) передают информацию о допуÑтимой ÑкороÑти и фактичеÑкой ÑкороÑти Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ÐµÐ·Ð´Ð° в БУП. Ð’ завиÑимоÑти от информации БУП разрешает движение, отключает Ñ‚Ñговый режим, выдаёт команду на торможение.]] + self.PN1 = 0 + self.PN2 = 0 + self.Ring = 0 + self.Brake = 0 + self.Brake2 = 0 + self.Drive = 1 + + self.BTB = 1 + self.DisableDrive = false + elseif UOS then + self.BTB = (self.KB and not self.UOSBraking) and 1 or 0 + self.Brake = 0 + + if not Emer and self.Speed > 20.5 then self.UOSBraking = true end + if Emer or self.UOSBraking and self.Speed == 0 then self.UOSBraking = false end + + self.Drive = self.UOSBraking and 0 or Train.KAH.Value + self.Ring = 0 + self.PN1 = 0 + self.PN2 = (self.UOSBraking or BUPKMState <= 0 and self.Speed < 0.2) and 1 or 0 + self.DisableDrive = self.Speed > 18.9 or self.DisableDrive and KMState > 0 + else + self.BTB = 0 + self.Brake = 0 + self.Drive = 0 + self.Ring = 0 + self.PN1 = 0 + self.PN2 = 0 + end + self.Starting = nil + self.Braking = false + self.Ringing = false + self.LN = false + self.BIDirection = 0 + end + if Train.BUKP.State < 5 or not Power then + self.BTB = (not UOS and Train.ALS.Value == 0) and 0 or self.BTB + self.Ready = false + end + if Power and Train.BUKP.State == 5 and KMState <=0 and self.Speed < 1.8 and not self.Ready then + self.BTB = 1 + self.PN2 = 1 + self.Ready = true + end + self.Active = Active and 1 or 0 + --self.BIAccel = self.BIAccel + (ALS.Acceleration-self.BIAccel)*dT*2 +end diff --git a/lua/metrostroi/systems/sys_81_720_bpti.lua b/lua/metrostroi/systems/sys_81_720_bpti.lua new file mode 100644 index 0000000..a44951b --- /dev/null +++ b/lua/metrostroi/systems/sys_81_720_bpti.lua @@ -0,0 +1,223 @@ +-------------------------------------------------------------------------------- +-- 81-720 traction controller +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_720_BPTI") + +function TRAIN_SYSTEM:Initialize() + self.State = 0 + self.BPTIState = 0 + + + self.Zero = false + + self.T = 0 + + self.RN = 0 + self.RNState = 0 + self.RNResistance = 1e9 + self.RVState = 0.0 + self.RVResistance = 1e9 + self.SubIterations = 16 +end + +function TRAIN_SYSTEM:Inputs() + return {} +end + +function TRAIN_SYSTEM:Outputs() + return { "State","RN","RNState","RN","RNState" } +end + +function TRAIN_SYSTEM:TriggerInput() +end + +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local Electric = Train.Electric + local T = math.abs(Electric.ISet or 0) + local I = math.abs(Electric.I13 + Electric.I24)/2 + + if self.State ~= Electric.BPTIState then + --self.BPTIState = Electric.BPTIState or 0 + if self.State ~= 0 then + self.State = 0 + else + self.State = Electric.BPTIState or 0 + end + end + + if self.State == 0 then + self.Zero = false + self.RN = 0 + self.RV = false + self.RNState = 0 + self.RVState = 0 + self.T = 0 + self.PrepareElectric = false + end + + if self.State ~= 0 and T == 0 and not self.Zero and math.abs(I) < 25 then + self.Zero = true + self.State = 0 + end + + if self.State == 1 then + if not self.RV and self.RN == 0 then + self.RN = 1 + self.RV = false + self.RNState = 0 + self.RVState = 0 + end + end + + if self.State == -1 then + if self.PrepareElectric and (CurTime()-self.PrepareElectric > 0.8 or I > T*0.8) then + --self.RVState = 0.01 + self.RN = self.RVState == 1 and 1 or 0 + self.RV = self.RVState < 1 + if self.RN == 0 then + self.RNState = 0 + end + self.PrepareElectric = false + end + --[[ if not self.RV and self.RN == 0 or self.PrepareElectric then + self.RN = 0 + self.RV = false + self.RNState = 0.93-(math.max(0,math.min(1,(Train.Engines.Speed-18)/60))^0.6)*0.85 + self.RVState = 1-math.max(0,math.min(1,((Train.Engines.Speed-50)/32))^0.8)*0.75 + + if not self.PrepareElectric then self.PrepareElectric = CurTime() end + end--]] + if not self.RV and self.RN == 0 and not self.PrepareElectric then + self.RN = 0 + self.RV = false + self.RNState = 0.93-(math.max(0,math.min(1,(Train.Engines.Speed-18)/60))^0.6)*0.85 + self.RVState = 1-(math.max(0,math.min(1,(Train.Engines.Speed-50)/32))^0.8)*0.75 + + self.PrepareElectric = CurTime() + end + end + if (self.RN > 0 or self.RV) and self.SpeedUp and I > T*0.8 then self.SpeedUp = false end + --if self.RN == 0 and not self.RV and not self.SpeedUp then self.SpeedUp = true end + + if T < self.T then + self.T = self.T+(T*(0.95+math.random()*0.1)-self.T)*dT*4 + else + self.T = self.T+(T*(0.95+math.random()*0.1)-self.T)*dT*1.5 + end + + self:SolveRV(Train,self.T,dT,I,self.State < 0,self.State == 1 and Train.Electric.BlockRV) + self:SolveRN(Train,self.T,dT,I,self.State < 0,self.State == 1 and T <= 150) +end + + +--BPTI +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:SolveRN(Train,T,dT,I,brake,start) + -- General state + local Active = self.RN > 0--and T > 0 + --local I = math.abs(Electric.I13 + Electric.I24)/2 + self.RNPrevCurrent = Current + + local rnd = 30+math.random()*20 + if self.SpeedUp then + rnd = brake and 25+((Train.Engines.Speed/80)^4)*100 or 25 + --print(rnd) + end + -- Update RN controller signal + if Active then + local sign = brake and 1 or 1 + -- Generate control signal + local dC = math.min(math.abs(T-I),300) + + if T == 0 then + self.RNState = math.max(0,self.RNState-5*dT*sign) + elseif I > T then + self.RNState = math.max(0,math.min(start and 0.1 or 1,self.RNState-dC*1/rnd*dT*sign)) + else + self.RNState = math.max(0,math.min(start and 0.1 or 1,self.RNState+dC*1/rnd*dT*sign)) + end + if (not brake and self.RNState == 1 or brake and self.RNState == 0) and self.RN > 0 and not self.RV then + self.RV = true + self.RN = 0 + self.RVState = brake and 0.99 or 0.01 + end + end +end +function TRAIN_SYSTEM:SolveRV(Train,T,dT,I,brake,block) + -- General state + local Active = self.RV and (not block or self.RVState > 0) + --local I = math.abs(Electric.I13 + Electric.I24)/2 + self.RNPrevCurrent = Current + + -- Controllers resistance + local Resistance = 0.036 + + local speedMul = math.max(0,math.min(1,(Train.Engines.Speed-40)/40)) + local rnd = 30+math.random()*(20) + if self.SpeedUp then + rnd = brake and 25+((Train.Engines.Speed/80)^4)*100 or 25 + end + -- Update RV controller signal + if Active then + local sign = brake and -1 or 1 + -- Generate control signal + + local dC = math.min(math.abs(T-I), 300) + if not self.PrepareElectric then + if T == 0 or block then + self.RVState = math.max(0,self.RVState-5*dT*sign) + elseif brake and I T then + self.RVState = math.max(0,math.min(1,self.RVState-dC*1/rnd*dT*sign)) + else + self.RVState = math.max(0,math.min(1,self.RVState+dC*1/rnd*dT*sign)) + end + end + + -- Generate resistance + local keypoints = { + 0.10,0.008, + 0.20,0.018, + 0.30,0.030, + 0.40,0.047, + 0.50,0.070, + 0.60,0.105, + 0.70,0.165, + 0.80,0.280, + 0.90,0.650, + 1.00,15.00, + } + local TargetField + if self.State < 0 then + TargetField = 0.4 + 0.6*self.RVState + else + TargetField = 0.4 + 0.6*(1-self.RVState) + end + --TargetField = 0.4 + 0.6*(1-self.RVState) + local Found = false + for i=1,#keypoints/2 do + local X1,Y1 = keypoints[(i-1)*2+1],keypoints[(i-1)*2+2] + local X2,Y2 = keypoints[(i)*2+1],keypoints[(i)*2+2] + + if (not Found) and (not X2) then + Resistance = Y1 + Found = true + elseif (TargetField >= X1) and (TargetField < X2) then + local t = (TargetField-X1)/(X2-X1) + Resistance = Y1 + (Y2-Y1)*t + Found = true + end + if (self.State > 0 and self.RVState == 0 or self.State < 0 and self.RVState == 1) and self.RV and self.RN == 0 then + self.RV = false + self.RN = 1 + self.RNState = brake and 0.01 or 0.99 + end + end + end + -- Set resistance + self.RVResistance = Resistance + 1e9 * (Active and 0 or 1) +end + diff --git a/lua/metrostroi/systems/sys_81_720_bukp.lua b/lua/metrostroi/systems/sys_81_720_bukp.lua new file mode 100644 index 0000000..ac888fd --- /dev/null +++ b/lua/metrostroi/systems/sys_81_720_bukp.lua @@ -0,0 +1,1168 @@ +-------------------------------------------------------------------------------- +-- 81-720 train control unit +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_720_BUKP") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.PowerCommand = 0 + self.PowerTarget = 0 + + self.CurrentCab = false + self.Train:LoadSystem("VityazF1","Relay","Switch",{bass=true}) + self.Train:LoadSystem("VityazF2","Relay","Switch",{bass=true}) + self.Train:LoadSystem("VityazF3","Relay","Switch",{bass=true}) + self.Train:LoadSystem("VityazF4","Relay","Switch",{bass=true}) + self.Train:LoadSystem("Vityaz1","Relay","Switch",{bass=true}) + self.Train:LoadSystem("Vityaz4","Relay","Switch",{bass=true}) + self.Train:LoadSystem("Vityaz7","Relay","Switch",{bass=true}) + self.Train:LoadSystem("Vityaz2","Relay","Switch",{bass=true}) + self.Train:LoadSystem("Vityaz5","Relay","Switch",{bass=true}) + self.Train:LoadSystem("Vityaz8","Relay","Switch",{bass=true}) + self.Train:LoadSystem("Vityaz0","Relay","Switch",{bass=true}) + self.Train:LoadSystem("Vityaz3","Relay","Switch",{bass=true}) + self.Train:LoadSystem("Vityaz6","Relay","Switch",{bass=true}) + self.Train:LoadSystem("Vityaz9","Relay","Switch",{bass=true}) + self.Train:LoadSystem("VityazF5","Relay","Switch",{bass=true}) + self.Train:LoadSystem("VityazF6","Relay","Switch",{bass=true}) + self.Train:LoadSystem("VityazF7","Relay","Switch",{bass=true}) + self.Train:LoadSystem("VityazF8","Relay","Switch",{bass=true}) + self.Train:LoadSystem("VityazF9","Relay","Switch",{bass=true}) + self.TriggerNames = { + "VityazF1", + "VityazF2", + "VityazF3", + "VityazF4", + "Vityaz1", + "Vityaz2", + "Vityaz3", + "Vityaz4", + "Vityaz5", + "Vityaz6", + "Vityaz7", + "Vityaz8", + "Vityaz9", + "Vityaz0", + "VityazF5", + "VityazF6", + "VityazF7", + "VityazF8", + "VityazF9", + "AttentionMessage" + } + self.Triggers = {} + for k,v in pairs(self.TriggerNames) do + if self.Train[v] then self.Triggers[v] = self.Train[v].Value > 0.5 end + end + self.State = 0 + self.State2 = 0 + self.Trains = {} + self.Errors = {} + self.Error = 0 + self.Counter = 0 + + self.Password = "" + + self.Selected = 0 + + self.Date = "0" + self.Time = "0" + self.RouteNumber = "0" + self.WagNum = 0 + self.DepotCode = "0" + self.DepeatStation = "0" + self.Path = "0" + self.Dir = "0" + self.Deadlock = "0" + self.BTB = false + self.BRBK1 = true + self.Loop = true + + self.Compressor = false + + self.BlockLeft = true + self.BlockRight = true + self.States = {} + + self.PVU = {} + + self.EnginesStrength = 0 + self.ControllerState = 0 +end + +function TRAIN_SYSTEM:Outputs() + return {"State","ControllerState"} +end + +function TRAIN_SYSTEM:Inputs() + return {} +end +if TURBOSTROI then return end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end +if SERVER then + function TRAIN_SYSTEM:CANReceive(source,sourceid,target,targetid,textdata,numdata) + if not self.Trains[-sourceid] then return end + if textdata == "Get" then + self.Reset = 1 + else + self.Trains[-sourceid][textdata] = numdata + end + end + function TRAIN_SYSTEM:CState(name,value,target,bypass) + if self.Reset or self.States[name] ~= value or bypass then + self.States[name] = value + for i=1,self.WagNum do + self.Train:CANWrite("BUKP",self.Train:GetWagonNumber(),target or "BUV",self.Trains[i],name,value) + end + end + end + + function TRAIN_SYSTEM:CStateTarget(name,targetname,targetsys,targetid,value) + if self.Reset or self.States[name] ~= value or bypass then + self.States[name] = value + self.Train:CANWrite("BUKP",self.Train:GetWagonNumber(),targetsys,targetid,targetname,value) + end + end + + TRAIN_SYSTEM.VityazPass = "1234" + TRAIN_SYSTEM.Checks = { + KAH=false,ALS=false,Ring=false, + DoorSelectL=false,DoorSelectR=false, + DoorBlock=false, DoorClose=false,AttentionMessage=false,Attention=false,AttentionBrake=false, + DoorLeft=false, DoorRight=false, + Pant1=false,Pant2=false,Vent1=false,Vent2=false,PassLight=false, + TorecDoors=false,BBE=false,Compressor=false + } + + function TRAIN_SYSTEM:Trigger(name,value) + local Train = self.Train + local char = name:gsub("Vityaz","");char = tonumber(char) + if self.State == -3 then + for k,v in pairs(self.TriggerNames) do + if name == v then + Train:SetNW2Bool("VityazMNMM"..k,value) + end + end + elseif self.State == 1 then + if name == "VityazF5" and value then self.Password = self.Password:sub(1,-2) end + if name == "VityazF8" and value then + if self.Password == self.VityazPass then + self.State = 2 + self.State2 = 0 + self.Selected = 0 + else + self.Password = "" + end + end + if char and #self.Password < 4 and value then self.Password = self.Password..char end + Train:SetNW2String("VityazPass",self.Password) + elseif self.State == 2 then + if self.State2 == 0 then + if self.Entering then + local num = (self.Selected==2 or self.Selected==3) and 4 or (self.Selected==8 or self.Selected==9) and 1 or self.Selected==6 and 3 or 2 + if name == "VityazF8" and value and #self.Entering == num then + if self.Selected == 2 then self.Date = self.Entering end + if self.Selected == 3 then self.Time = self.Entering end + if self.Selected == 4 then self.RouteNumber = self.Entering end + if self.Selected == 5 and tonumber(self.Entering) < 10 then self.WagNum = tonumber(self.Entering) end + if self.Selected == 6 then self.DepotCode = self.Entering end + if self.Selected == 7 then self.DepeatStation = self.Entering end + if self.Selected == 8 then self.Path = self.Entering end + if self.Selected == 9 then self.Dir = self.Entering end + if self.Selected == 10 then self.Deadlock = self.Entering end + self.Entering = false + end + if name == "VityazF9" and value then + self.Entering = false + end + if char and value then + if char and #self.Entering < num and value then + self.Entering = self.Entering..char + end + end + if name == "VityazF5" and value then self.Entering = self.Entering:sub(1,-2) end + else + if name == "VityazF6" and value and self.Selected > 0 then + self.Selected = self.Selected - 1 + end + if name == "VityazF7" and value and self.Selected < 10 then + self.Selected = self.Selected + 1 + end + if name == "VityazF8" and value and self.WagNum > 0 then + self.State = 3 + for i=1,self.WagNum do + Train:CANWrite("BUKP",Train:GetWagonNumber(),"BUV",self.Trains[i],"Orientate",i%2 > 0) + end + end + if name == "VityazF9" and value then + if self.Selected == 0 then self.State2 = 1 self.Selected = 0 end + if self.Selected == 1 then self.State2 = 2 self.Selected = 0 end + if self.Selected > 1 then self.Entering = "" end + end + end + elseif self.State2 == 1 then + if name == "VityazF8" and value then + self.State2 = 0 + self.Selected = 0 + end + + elseif self.State2 == 2 then + if name == "VityazF8" and value then + if self.Entering and #self.Entering == 4 then + local wagnum = tonumber(self.Entering) + self.Trains[-wagnum] = {} + if not wagnum or wagnum == 0 then + self.Trains[-wagnum] = nil + wagnum = nil + end + self.Trains[self.Selected+1] = wagnum + self.Entering = false + elseif not self.Entering then + self.State2 = 0 + self.Selected = 1 + end + end + if name == "VityazF9" and value then + if self.Entering then + self.Entering = false + else + self.Entering = "" + end + end + if self.Entering then + if name == "VityazF5" and value then self.Entering = self.Entering:sub(1,-2) end + if char and #self.Entering < 4 and value then + self.Entering = self.Entering..char + end + Train:SetNW2String("VityazEnter",self.Entering) + else + if name == "VityazF6" and value and self.Selected > 0 then + self.Selected = self.Selected - 1 + end + if name == "VityazF7" and value and self.Selected < 8 then + self.Selected = self.Selected + 1 + end + end + + end + elseif self.State == 3 and name == "VityazF8" and value then + self.State = 2 + elseif self.State == 4 and name == "VityazF8" and value then + self.State = 5 + self.Errors = {} + elseif self.State == 5 and self.State2 == 0 and value then + if name == "VityazF2" then self.State2 = 4 end + if name == "Vityaz2" then self.State2 = 5 end + if name == "VityazF6" then self.State2 = 1 end + --[[ if (name == "VityazF1" or name == "VityazF9") and Train.VityazF9.Value*Train.VityazF1.Value > 0 then + self.State2 = 6 + self.Selected = 1 + end--]] + if name == "VityazF9" then + self.State2 = 6 + self.Selected = 1 + end + if name == "VityazF7" then + self.State2 = 2 + self.Selected = 0 + end + if name == "VityazF8" then + self.State2 = 3 + self.Selected = 0 + end + elseif self.State == 5 and self.State2 == 2 and value then + if name == "VityazF6" and self.Selected > 0 then + self.Selected = self.Selected - 1 + end + if name == "VityazF7" and self.Selected < 3 then + self.Selected = self.Selected + 1 + end + if name == "VityazF9" then + if self.Selected == 0 then self.State2 = 21 end + if self.Selected == 1 then self.State2 = 22 end + if self.Selected == 2 then self.State2 = 23 end + if self.Selected == 3 then self.State2 = 24 end + end + elseif self.State == 5 and self.State2 == 3 and value then + if name == "VityazF6" and self.Selected > 0 then + self.Selected = self.Selected - 1 + end + if name == "VityazF7" and self.Selected < 3 then + self.Selected = self.Selected + 1 + end + elseif self.State == 5 and self.State2 == 6 and value then + local train = self.Trains[self.Selected] + if not self.PVU[train] then self.PVU[train] = {} end + if char then self.PVU[train][char] = not self.PVU[train][char] end + if name == "VityazF6" and self.Selected > 1 then + self.Selected = self.Selected - 1 + end + if name == "VityazF7" and self.Selected < self.WagNum then + self.Selected = self.Selected + 1 + end + end + if self.State == 5 and self.State2 > 0 and value then + if name == "VityazF4" then + self.State2 = 0 + end + end + if self.State == 5 and name == "AttentionMessage" and value then + local currerr = 0 + for id,err in pairs(self.Errors) do + if err and (currerr == 0 or id < currerr) then + currerr = id + end + end + if (currerr == 10 or currerr > 11) and self.Errors[currerr] then + self.Errors[currerr] = false + end + end + end + function TRAIN_SYSTEM:CheckError(id,cond) + if cond then + if self.Errors[id] ~= false then self.Errors[id] = CurTime() end + elseif id < 12 and self.Errors[id] and self.Errors[id] ~= CurTime() or self.Errors[id] == false then + self.Errors[id] = nil + end + end + function TRAIN_SYSTEM:Think(dT) + if self.State > 0 and self.Reset and self.Reset ~= 1 then self.Reset = false end + local Train = self.Train + local Panel = Train.Panel + local Power = Train.BUV.Power > 0 + local VityazWork = Train.SF5.Value > 0 and Power + if not VityazWork and self.State ~= (Power and -2 or 0) and (not Power or self.State ~= -3) then + if self.State == 0 then + self.State = -3 + else + self.State = (Power and -2 or 0) + end + self.VityazTimer = nil + self.Reset = nil + self.Compressor = false + self.Ring = false + self.Error = 0 + self.ErrorRing = nil + end + if VityazWork and (self.State == 0 or self.State == -2 or Power and self.State == -3) then + self.State = Power and -1 or -3 + self.VityazTimer = CurTime() + end + if self.State == -1 and CurTime()-self.VityazTimer > 1 then + self.State = 1 + self.State2 = 0 + + self.VityazTimer = false + self.Counter = 0 + + self.Password = "" + Train:SetNW2String("VityazPass","") + + self.States = {} + self.PVU = {} + for k,v in ipairs(self.Trains) do + if self.Trains[-v] then self.Trains[-v] = {} end + end + + self.PTEnabled = nil + self.HVBad = false + end + if self.State == -3 or self.State > 0 then + for k,v in pairs(self.TriggerNames) do + if Train[v] and (Train[v].Value > 0.5) ~= self.Triggers[v] then + self:Trigger(v,Train[v].Value > 0.5) + self.Triggers[v] = Train[v].Value > 0.5 + end + end + self.Counter = self.Counter + math.random(3,4) + if self.Counter > 799 then + self.Counter = 0 + end + if Train.SF13.Value > 0 then Train:SetNW2Int("VityazCounter",self.Counter) end + end + if self.State > 0 then + if self.State == 2 then + Train:SetNW2String("VityazDate",self.Date) + Train:SetNW2String("VityazTime",self.Time) + Train:SetNW2String("VityazRouteNumber",self.RouteNumber) + Train:SetNW2Int("VityazWagNum",self.WagNum) + Train:SetNW2String("VityazDepotCode",self.DepotCode) + Train:SetNW2String("VityazDepeatStation",self.DepeatStation) + Train:SetNW2String("VityazPath",self.Path) + Train:SetNW2String("VityazDir",self.Dir) + Train:SetNW2String("VityazDeadlock",self.Deadlock) + Train:SetNW2String("VityazEnter",self.Entering or "-") + end + if self.State == 3 then + local initialized = true + for i=1,self.WagNum do + local train = self.Trains[-self.Trains[i]] + if train then + if not train.WagNOrientated and train.BUVWork and not train.BadCombination then--and train.PTEnabled then + Train:SetNW2Bool("VityazWagI"..i,true) + else + Train:SetNW2Bool("VityazWagI"..i,false) + initialized = false + end + else + initialized = false + end + end + if initialized then + self.State = 4 + local i = 1 + for k,v in pairs(self.Checks) do + self.Checks[k] = false + Train:SetPackedBool("VityazBTest"..k,false) + i = i + 1 + end + Train:SetNW2Int("VityazBTest",0) + end + end + if self.State == 4 then + local i = 1 + local num = 0 + for k,v in pairs(self.Checks) do + if Train[k].Value > 0 then + Train:SetNW2Bool("VityazBTest"..k,true) + self.Checks[k] = true + end + i = i + 1 + if v then num = num + 1 end + end + Train:SetNW2Int("VityazBTest",num) + end + + local stength = 0 + local EnginesStrength = 0 + local RV = (1-Train.RV["KRO5-6"]) + Train.RV["KRR15-16"] + (1-Train.SF2.Value) + local doorLeft,doorRight,doorClose = false,false,false + self.DoorClosed = false + if self.State == 5 then + local Back = false--Train:ReadTrainWire(4) > 0 and (Train.SF2.Value*(1-Train.RV["KRO5-6"]) or Train.SF3.Value*Train.RV["KRR15-16"]) > 0 + local err3,err4,err6,err7,err10,err11,err12,err17 + local HVBad = false + for i=1,self.WagNum do + local train = self.Trains[-self.Trains[i]] or {} + if train.DriveStrength then EnginesStrength = EnginesStrength + train.DriveStrength end + if train.BrakeStrength then EnginesStrength = EnginesStrength + train.BrakeStrength end + + if train.RV and self.Trains[i] ~= Train:GetWagonNumber() then + Back = true + end + if train.HVBad then HVBad = true end + end + if HVBad and not self.HVBad then self.HVBad = CurTime() end + if not HVBad and self.HVBad then self.HVBad = false end + self.SchemeEngaged = false + if RV > 0 and not Back then + for i=1,self.WagNum do + Train:CANWrite("BUKP",Train:GetWagonNumber(),"BUV",self.Trains[i],"Orientate",i%2 > 0) + end + if self.Reset == nil then + self.Reset = true + end + --Door controls + if Train.BARS.Speed <= 0.1 and Train.Panel.DoorLeft > 0 then + doorLeft = true + end + if Train.BARS.Speed <= 0.1 and Train.Panel.DoorRight > 0 then + doorRight = true + end + if Panel.DoorClose > 0 then + doorClose = true + end + local min,max + self.DoorClosed = true + for i=1,self.WagNum do + local trainid = self.Trains[i] + local train = self.Trains[-trainid] + if train then + if not min or train.BCPressure < min then min = train.BCPressure end + if not max or train.BCPressure > max then max = train.BCPressure end + end + local doorclose = true + for i=1,8 do + if not train["Door"..i.."Closed"] then + doorclose = false + break + end + end + if not doorclose then + self.DoorClosed = false + end + err3 = err3 or not train.BUVWork + err4 = err4 or train.WagNOrientated + err6 = err6 or train.EmergencyBrake + err7 = err7 or train.ParkingBrakeEnabled + --err7 = err7 or train.WagNOrientated + err10 = err10 or train.PTEnabled + err11 = err11 or not doorclose + err12 = err12 or train.DoorBack and trainid ~= Train:GetWagonNumber() + err17 = err17 or not train.PassLightEnabled + --Errors + --self:CheckError(15,not train.MainLights) + --self:CheckError(16,not train.Vent1 or not Train) + Train:SetNW2Bool("VityazDoors"..i,doorclose) + Train:SetNW2Bool("VityazBV"..i,train.BVEnabled) + Train:SetNW2Bool("VityazScheme"..i,not train.NoAssembly) + self.SchemeEngaged = self.SchemeEngaged or not train.NoAssembly + end + local BARS = Train.BARS + self:CheckError(1,false) + self:CheckError(2,Train.SF2.Value == 0) + self:CheckError(3,err3) + self:CheckError(4,err4) + self:CheckError(5,BARS.DisableDrive or self.Errors[5] and Train.Panel.Controller > 0) + self:CheckError(6,err6) + self:CheckError(7,err7) + --self:CheckError(7,train.WagNOrientated) + self:CheckError(11,err11 or self.Errors[11] and Train.Panel.Controller > 0) + self:CheckError(12,err12) + self:CheckError(17,err17) + if Train.RV["KRO5-6"] == 0 then + if (BARS.Brake == 0 and BARS.Drive > 0 and (self.Error == 0 or self.Error >= 9 and self.Error ~= 11 or self.Error == 11 and Train.Panel.DoorBlock > 0)) or Train.Panel.Controller <= 0 then + stength = Train.Panel.Controller + end + if BARS.Brake > 0 then stength = -3 end + end + if err10 and stength > 0 and not self.PTEnabled then self.PTEnabled = CurTime() end + if (not err10 or stength <= 0) and self.PTEnabled then self.PTEnabled = nil end + self:CheckError(9,self.PTEnabled and CurTime()-self.PTEnabled > 1.5) + self:CheckError(10,self.HVBad and CurTime()-self.HVBad > 10) + + Train:SetNW2Int("VityazType",stength ~= 0 and (stength < 0 and -1 or 1) or 0) + Train:SetNW2Int("VityazPMin",(min or 0)*10) + Train:SetNW2Int("VityazPMax",(max or 0)*10) + Train:SetNW2Int("VityazPNM",Train.Pneumatic.TrainLinePressure*10) + Train:SetNW2Int("VityazUbs",Train.Electric.Battery80V) + if self.State2 == 1 then + Train:SetNW2Int("VityazSpeed",Train.BARS.Speed) + Train:SetNW2Int("VityazSpeedLimit",Train.BARS.SpeedLimit) + if Train.BARS.BINoFreq > 0 then + Train:SetNW2Int("VityazSpeedLimitNext",-1) + else + Train:SetNW2Int("VityazSpeedLimitNext",Train.BARS.NextLimit) + end + elseif self.State2 == 21 then + for i=1,self.WagNum do + local train = self.Trains[-self.Trains[i]] + Train:SetNW2Int("VityazIMK"..i,train.MKVoltage*10) + end + elseif self.State2 == 22 then + for i=1,self.WagNum do + Train:SetNW2Int("VityazIVO"..i,self.Trains[-self.Trains[i]].VagEqConsumption*10) + end + elseif self.State2 == 23 then + for i=1,self.WagNum do + Train:SetNW2Int("VityazI13"..i,self.Trains[-self.Trains[i]].I13*10) + end + elseif self.State2 == 24 then + for i=1,self.WagNum do + Train:SetNW2Int("VityazI24"..i,self.Trains[-self.Trains[i]].I24*10) + end + elseif self.State2 == 3 then + if self.Selected == 0 then + for i=1,self.WagNum do + local train = self.Trains[-self.Trains[i]] + Train:SetNW2Bool("VityazBUVState"..i,train.BUVWork) --"БУВ" + Train:SetNW2Bool("VityazBTBReady"..i,train.BTBReady) --"БТБ ГОТ" + Train:SetNW2Bool("VityazPTGood"..i,train.PTEnabled) --"ПТ ЭФФ" + Train:SetNW2Bool("VityazEPTGood"..i,train.EmergencyBrakeGood) --"ЭТ ЭФФ" + Train:SetNW2Bool("VityazPTWork"..i,not train.PTBad) --"ТОРМ ОБ" ! + Train:SetNW2Bool("VityazEmerActive"..i, not train.EmergencyBrake) --"ЭКС ТОРМ" + Train:SetNW2Bool("VityazEmPT"..i,not train.EmPT) --"ТОРМ РК" + end + elseif self.Selected == 1 then + for i=1,self.WagNum do + local train = self.Trains[-self.Trains[i]] + Train:SetNW2Bool("VityazPTApply"..i,not train.PTEnabled) --"ПТ ВКЛ" + Train:SetNW2Bool("VityazEDTBroken"..i,not train.EnginesBrakeBroke) --"ОТКÐЗ ЭТ" FIXME + Train:SetNW2Bool("VityazEDTDone"..i,not train.EnginesDone) --"ИСТОЩ ЭТ" FIXME + Train:SetNW2Bool("VityazPBApply"..i,not train.ParkingBrakeEnabled) --"СТ ТОРМ" + --Train:SetNW2Bool("VityazEKKGood"..i,) --"МежВаг С" + Train:SetNW2Bool("VityazBBEProtection"..i,not train.BBEBroken) --"ЗÐЩ ББЭ" + Train:SetNW2Bool("VityazBBEEnabled"..i,train.BBEEnabled) --"ББЭ" + end + elseif self.Selected == 2 then + for i=1,self.WagNum do + local train = self.Trains[-self.Trains[i]] + Train:SetNW2Bool("VityazLVGood"..i,not train.LVBad) --"ÐÐПР БС" + Train:SetNW2Bool("VityazMKWork"..i,train.MKWork) --"МК" + Train:SetNW2Bool("VityazBVEnabled"..i,train.BVEnabled) --"ЗÐЩИТ ТП" + Train:SetNW2Bool("VityazTPEnabled"..i,true) --"ТЯГ ПРИВ" FIXME + Train:SetNW2Bool("VityazPantDisabled"..i,not train.PantDisabled) --"ТКПР ОТЖ" + Train:SetNW2Bool("VityazBadCombination"..i,not train.BadCombination) --"ЗÐПР КОМ" + Train:SetNW2Bool("VityazLightsWork"..i,train.PassLightEnabled) --"ОСВ ВКЛ" + end + elseif self.Selected == 3 then + for i=1,self.WagNum do + local train = self.Trains[-self.Trains[i]] + Train:SetNW2Bool("VityazVent1Work"..i,train.Vent1Enabled) --"ВЕÐТИЛ 1" + Train:SetNW2Bool("VityazVent2Work"..i,train.Vent2Enabled) --"ВЕÐТИЛ 2" + Train:SetNW2Bool("VityazHVGood"..i,not train.HVBad) --"ÐÐПР КС" + Train:SetNW2Bool("VityazDoorBlock"..i,not train.DoorTorec) --"ТОРЦ ДВ" FIXME + end + end + elseif self.State2 == 4 then + for i=1,self.WagNum do + local train = self.Trains[-self.Trains[i]] + Train:SetNW2Bool("VityazWagOr"..i,train.Orientation) + end + elseif self.State2 == 5 then + for i=1,self.WagNum do + local train = self.Trains[-self.Trains[i]] + local orientation = train.Orientation + Train:SetNW2Bool("VityazWagOr"..i,orientation) + for d=1,4 do + Train:SetNW2Bool("VityazDoor"..d.."L"..i,train["Door"..(orientation and d or d+4).."Closed"]) + Train:SetNW2Bool("VityazDoor"..d.."R"..i,train["Door"..(orientation and d+4 or d).."Closed"]) + end + end + elseif self.State2 == 6 then + local train = self.Trains[self.Selected] + for i=1,9 do Train:SetNW2Bool("VityazPVU"..i,self.PVU[train] and self.PVU[train][i]) end + end + if not self.Slope and Train.AccelRate.Value > 0 and Train.BARS.Speed <= 2 then self.Slope = true end + if self.Slope and (self.SchemeEngaged or Train.BARS.Speed > 2) then self.Slope = false end + else + self.Reset = nil + self.Slope = false + self.State2 = 0 + if self.PTEnabled then self.PTEnabled = nil end + self:CheckError(1,false) + self:CheckError(2,false) + self:CheckError(3,false) + self:CheckError(4,false) + self:CheckError(5,false) + self:CheckError(6,false) + self:CheckError(7,false) + self:CheckError(9,false) + self:CheckError(10,false) + + --self:CheckError(7,train.WagNOrientated) + self:CheckError(11,false) + self:CheckError(12,false) + self:CheckError(17,false) + if self.Error then self.Errors[self.Error] = false end + end + local currerr = 0 + for id,err in pairs(self.Errors) do + if err and (currerr == 0 or id < currerr) then + currerr = id + end + end + if self.Error ~= currerr then + if currerr > 0 and currerr < 11 then self.ErrorRing = CurTime() end + self.Error = currerr + end + if self.ErrorRing and (currerr == 0 or currerr > 11) then self.ErrorRing = nil end + Train:SetNW2Int("VityazError",currerr or 0) + Train:SetNW2Int("VityazMainMsg",Back and RV>0 and 3 or Back and 2 or RV==0 and 1 or 0) + end + for i=1,9 do + Train:SetNW2Int("VityazWagNum"..i,self.Trains[i] or 0) + end + self:CState("OpenLeft",doorLeft) + self:CState("OpenRight",doorRight) + self:CState("CloseDoors",doorClose) + self:CState("Slope",self.Slope) + if self.WagNum > 0 then + self.EnginesStrength = EnginesStrength/self.WagNum + else + self.EnginesStrength = 0 + end + self:CState("RV",RV*Train.SF2.Value > 0,"BUKP") + self:CState("RVPB",(1-Train.RV["KRO5-6"])*Train.SF2.Value > 0) + self:CState("Ring",Train.Ring.Value > 0,"BUKP") + self.ControllerState = stength + self:CState("DriveStrength",math.abs(stength)) + self:CState("Brake",stength < 0 and 1 or 0) + self:CState("PN1",Train.BARS.PN1) + self:CState("PN2",Train.BARS.PN2+(self.Slope and 1 or 0)) + for t=1,self.WagNum do + local train = self.Trains[t] + if train then + for i=1,9 do + self:CStateTarget("PVU"..train.."_"..i,"PVU"..i,"BUV",train,self.PVU[train] and self.PVU[train][i]) + end + end + end + local ring = false + for i=1,self.WagNum do + local train = self.Trains[-self.Trains[i]] + if train and train.Ring then + ring = true + end + end + self.Ring = Train.BARS.Ring > 0 or ring or self.ErrorRing and CurTime()-self.ErrorRing < 2 or self.Error > 11 + + if Train.Compressor.Value > 0 then + self.Compressor = Train.AK.Value > 0 + else + self.Compressor = false + end + self:CState("TP1",Train.Pant1.Value > 0) + self:CState("TP2",Train.Pant2.Value > 0) + self:CState("Vent1",Train.Vent1.Value > 0) + self:CState("Vent2",Train.Vent2.Value > 0) + self:CState("PassLight",Train.PassLight.Value > 0) + self:CState("ParkingBrake",Train.ParkingBrake.Value > 0) + + self:CState("DoorTorec",Train.TorecDoors.Value > 0) + self:CState("BBE",Train.BBE.Value > 0) + self:CState("BVOn",Train.Panel.Controller == 0 and Train.EnableBV.Value > 0) + self:CState("BVOff",Train.DisableBV.Value > 0) + + self:CState("Ticker",Train.Ticker.Value > 0) + self:CState("PassScheme",Train.PassScheme.Value > 0) + self:CState("Compressor", self.Compressor) + end + self:CState("BUPWork",self.State > 0) + Train:SetNW2Int("VityazSelected",self.Selected) + Train:SetNW2Int("VityazState2",self.State2) + Train:SetNW2Int("VityazState",Train.SF13.Value*self.State) + if self.State > 0 and self.Reset and self.Reset == 1 then self.Reset = false end + end +else + local function createFont(name,font,size,weight,blur,scanlines,underline) + surface.CreateFont("Metrostroi_"..name, { + font = font, + size = size, + weight = weight or 400, + blursize = blur or false, + antialias = true, + underline = underline, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = true, + additive = false, + outline = false, + extended = true, + scanlines = scanlines or false, + }) + end + function TRAIN_SYSTEM:DrawBox(x,y,w,h,col) + self:PrintText(x,y,"â•”",col) + self:PrintText(x,y+h+1,"╚",col) + self:PrintText(x+w+1,y,"â•—",col) + self:PrintText(x+w+1,y+h+1,"â•",col) + for i=1,h do + self:PrintText(x,y+i,"â•‘",col) + self:PrintText(x+w+1,y+i,"â•‘",col) + end + for i=1,w do + self:PrintText(x+i,y,"â•",col) + self:PrintText(x+i,y+h+1,"â•",col) + end + end + createFont("Vityaz","FreeSans",90,400,3,4,false) + createFont("VityazB","FreeSans",70,400,3,4,true) + + function TRAIN_SYSTEM:ClientThink() + if not self.Train:ShouldDrawPanel("Vityaz") then return end + local state = self.Train:GetNW2Int("VityazState",0) + local counter = self.Train:GetNW2Int("VityazCounter",0) + if self.Counter ~= counter or (state <= 0 and state ~= -2) and self.State ~= state then + self.Counter = counter + if state ~= -2 then + self.State = state + end + render.PushRenderTarget(self.Train.Vityaz,0,0,1024, 1024) + render.Clear(0, 0, 0, 0) + cam.Start2D() + self:VityazMonitor(self.Train) + cam.End2D() + render.PopRenderTarget() + end + end + function TRAIN_SYSTEM:PrintText(x,y,text,col) + local str = {utf8.codepoint(text,1,-1)} + for i=1,#str do + local char = utf8.char(str[i]) + if char == "â–ˆ" then + draw.SimpleText(char,"Metrostroi_VityazB",(x+i)*40-8,y*58+30,col,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText(char,"Metrostroi_Vityaz",(x+i)*40-8,y*58+30,col,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + end + + local VO = { + "БУВ","BUVState", + "БТБ ГОТ","BTBReady", + "ПТ ЭФФ","PTGood", + "ЭТ ЭФФ","EPTGood", + "ТОРМ ОБ","PTWork", + "ЭКС ТОРМ","EmerActive", + "ТОРМ РК","EmPT", + "ПТ ВКЛ","PTApply", + "ОТКÐЗ ЭТ","EDTBroken", + "ИСТОЩ ЭТ","EDTDone", + "СТ ТОРМ","PBApply", + "МежВаг С","EKKGood", + "ЗÐЩ ББЭ","BBEProtection", + "ББЭ","BBEEnabled", + "ÐÐПР БС","LVGood", + "МК","MKWork", + "ЗÐЩИТ ТП","BVEnabled", + "ТЯГ ПРИВ","TPEnabled", + "ТКПР ОТЖ","PantDisabled", + "ЗÐПР КОМ","BadCombination", + "ОСВ ВКЛ","LightsWork", + "ВЕÐТИЛ 1","Vent1Work", + "ВЕÐТИЛ 2","Vent2Work", + "ÐÐПР КС","HVGood", + "ТОРЦ ДВ","DoorBlock", + } + local Errors = { + "Сбой КМ", + "Сбой РВ", + "ÐеиÑпр. БУВ", + "Вагон не ориент.", + "Запрет ТР от БÐРС", + "ЭкÑтренный тормоз", + "СтоÑночный тормоз", + "Дверной проем", + "Пневмотормоз вкл.", + "UÐºÑ Ð½Ðµ в норме", + "ДВ не закрыты",--11 + "Открыта кабина ХВ", + "Кузов не в норме", + "Защита ББЭ", + "БукÑÑ‹ не в норме", + "ÐеиÑправноÑть МК", + "ОÑвещение не вкл.", + "СОВ неиÑправен", + } + local ErrorNums = { + 21,23,25,62,38,79,54,12,61,84,83,37,85,47,69,77,78,43,34 + } + local red = Color(200,130,200)--Color(200,100,150) + local green = Color(100*0.8,200*1.0,150*0.8)--Color(100,200,150) + local blue = Color(120*0.7,200*0.7,210*1.2)--Color(120,200,210) + local yellow = Color(100,200,200)--Color(200,200,130) + function TRAIN_SYSTEM:VityazMonitor(Train) + local state2 = Train:GetNW2Int("VityazState2",0) + local wagnum = Train:GetNW2Int("VityazWagNum",0) + local mainmsg = Train:GetNW2Int("VityazMainMsg",0) + local sel = Train:GetNW2Int("VityazSelected",0) + local err = Train:GetNW2Int("VityazError") + if self.State ~= 0 then + surface.SetDrawColor(16,29,38,180) + surface.DrawRect(0,0,1024,1024) + end + if self.State == -3 then + self:PrintText(6,0,"ТЕСТ ММÐМ",yellow) + for i=1,4 do + self:PrintText(4,0+i*2,"â–ˆ",Train:GetNW2Bool("VityazMNMM"..i) and green or red) + self:PrintText(16,0+i*2,"â–ˆ",Train:GetNW2Bool("VityazMNMM"..(i+15)) and green or red) + end + for i=0,11 do + if i~=9 then + self:PrintText(8+i%3*2,2+math.floor(i/3)*2,"â–ˆ",Train:GetNW2Bool("VityazMNMM"..(i<9 and i+5 or i+4)) and green or red) + end + end + elseif self.State == 1 then + self:PrintText(3,3,"Введите пароль",yellow) + local pass = Train:GetNW2String("VityazPass","") + self:PrintText(8,5,pass..string.rep("â–ˆ",4-#pass),yellow) + elseif self.State == 2 then + local enter = Train:GetNW2String("VityazEnter","-") + if enter == "-" then enter = false end + if state2 == 0 and sel < 6 then + --[[ + Train:GetNW2String("VityazDepotCode","") + Train:GetNW2String("VityazDepeatStation","") + Train:GetNW2String("VityazPath","") + Train:GetNW2String("VityazDir","") + Train:GetNW2String("VityazDeadlock","")]] + self:PrintText(5,0,"Режим депо",yellow) + self:PrintText(0,1,"1 Коды типов",yellow) + self:PrintText(10,2,"вагонов",yellow) + self:PrintText(18,2,">",yellow) + self:PrintText(0,3,"2 Ðомер вагонов",yellow) + self:PrintText(7,4,"в ÑоÑтаве",yellow) + self:PrintText(18,4,">",yellow) + self:PrintText(0,5,"3 Дата",yellow) + if sel==2 and enter then self:PrintText(15,5,enter..string.rep("â–ˆ",4-#enter),yellow) else self:PrintText(15,5,Format("%04d", Train:GetNW2String("VityazDate","0")),yellow) end + self:PrintText(0,6,"4 Ð’Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð´Ð°Ñ‡Ð¸",yellow) + self:PrintText(7,7,"ÑоÑтава",yellow) + if sel==3 and enter then self:PrintText(15,7,enter..string.rep("â–ˆ",4-#enter),yellow) else self:PrintText(15,7,Format("%04d", Train:GetNW2String("VityazTime","0")),yellow) end + self:PrintText(0,8,"5 Ðомер маршрута",yellow) + if sel==4 and enter then self:PrintText(17,8,enter..string.rep("â–ˆ",2-#enter),yellow) else self:PrintText(17,8,Format("%02d", Train:GetNW2String("VityazRouteNumber","0")),yellow) end + self:PrintText(0,9,"6 ЧиÑло вагонов",yellow) + if sel==5 and enter then self:PrintText(17,9,enter..string.rep("â–ˆ",2-#enter),yellow) else self:PrintText(17,9,Format("%02d", Train:GetNW2Int("VityazWagNum","0")),yellow) end + + if sel == 0 then self:PrintText(19,2,"<",yellow) end + if sel == 1 then self:PrintText(19,4,"<",yellow) end + if sel == 2 then self:PrintText(19,5,"<",yellow) end + if sel == 3 then self:PrintText(19,7,"<",yellow) end + if sel == 4 then self:PrintText(19,8,"<",yellow) end + if sel == 5 then self:PrintText(19,9,"<",yellow) end + elseif state2 == 0 then + self:PrintText(5,0,"Режим депо",yellow) + self:PrintText(0,1,"7 Диаметр бандажа",yellow) + self:PrintText(3,2,"КП",yellow) + self:PrintText(16,2,"860",yellow) + self:PrintText(0,3,"8 Код депо",yellow) + if sel==6 and enter then self:PrintText(16,3,enter..string.rep("â–ˆ",3-#enter),yellow) else self:PrintText(16,3,Format("%03d", Train:GetNW2String("VityazDepotCode","0")),yellow) end + self:PrintText(0,4,"9 Ðомер Ñтанции",yellow) + self:PrintText(4,5,"отправлениÑ",yellow) + if sel==7 and enter then self:PrintText(17,5,enter..string.rep("â–ˆ",2-#enter),yellow) else self:PrintText(17,5,Format("%02d", Train:GetNW2String("VityazDepeatStation","0")),yellow) end + self:PrintText(0,6,"10 Ðомер пути",yellow) + if sel==8 and enter then self:PrintText(18,6,enter..string.rep("â–ˆ",1-#enter),yellow) else self:PrintText(18,6,Format("%d", Train:GetNW2String("VityazPath","0")),yellow) end + self:PrintText(0,7,"11 Ðаправление",yellow) + self:PrintText(6,8,"движениÑ",yellow) + if sel==9 and enter then self:PrintText(18,8,enter..string.rep("â–ˆ",1-#enter),yellow) else self:PrintText(18,8,Format("%d", Train:GetNW2String("VityazDir","0")),yellow) end + self:PrintText(0,9,"12 Ðомер тупика",yellow) + if sel==10 and enter then self:PrintText(17,9,enter..string.rep("â–ˆ",2-#enter),yellow) else self:PrintText(17,9,Format("%02d", Train:GetNW2String("VityazDeadlock","0")),yellow) end + + if sel == 6 then self:PrintText(19,3,"<",yellow) end + if sel == 7 then self:PrintText(19,5,"<",yellow) end + if sel == 8 then self:PrintText(19,6,"<",yellow) end + if sel == 9 then self:PrintText(19,8,"<",yellow) end + if sel == 10 then self:PrintText(19,9,"<",yellow) end + elseif state2 == 1 then + elseif state2 == 2 then + self:PrintText(3,0,"Ðомера вагонов",yellow) + self:PrintText(1,1,"â„– тип",yellow) + self:PrintText(9,1,"заводÑкой â„–",yellow) + for i=1,9 do + self:PrintText(1,1+i,tostring(i),yellow) + self:PrintText(5,1+i,"1",yellow) + if not enter or sel ~= i-1 then + self:PrintText(13,1+i,Format("%04d",Train:GetNW2Int("VityazWagNum"..i)),yellow) + end + end + if enter then + self:PrintText(13,2+sel,enter..string.rep("â–ˆ",4-#enter),yellow) + end + self:PrintText(19,2+sel,"<",yellow) + end + elseif self.State == 3 then + self:PrintText(2,3,"Ðеиндентифиц ваг",yellow) + for i=1,wagnum do + self:PrintText(5+i+(9-wagnum)/2,5,"â–ˆ",Train:GetNW2Bool("VityazWagI"..i,false) and green or red) + end + elseif self.State == 4 then + self:PrintText(4,0,"ОÑновной ПУ",yellow) + self:PrintText(5,1,"â–ˆ",Train:GetNW2Bool("VityazBTestKAH") and green or red) + self:PrintText(7,1,"â–ˆ",Train:GetNW2Bool("VityazBTestALS") and green or red) + self:PrintText(11,1,"â–ˆ",Train:GetNW2Bool("VityazBTestRing") and green or red) + self:PrintText(2,2,"â–ˆ",Train:GetNW2Bool("VityazBTestDoorSelectL") and green or red) + self:PrintText(4,2,"â–ˆ",Train:GetNW2Bool("VityazBTestDoorSelectR") and green or red) + self:PrintText(3,3,"â–ˆ",Train:GetNW2Bool("VityazBTestDoorBlock") and green or red) + self:PrintText(10,3,"â–ˆ",Train:GetNW2Bool("VityazBTestDoorClose") and green or red) + self:PrintText(12,3,"â–ˆ",Train:GetNW2Bool("VityazBTestAttentionMessage") and green or red) + self:PrintText(14,3,"â–ˆ",Train:GetNW2Bool("VityazBTestAttention") and green or red) + self:PrintText(16,3,"â–ˆ",Train:GetNW2Bool("VityazBTestAttentionBrake") and green or red) + self:PrintText(2,4,"â–ˆ",Train:GetNW2Bool("VityazBTestDoorLeft") and green or red) + self:PrintText(17 ,4,"â–ˆ",Train:GetNW2Bool("VityazBTestDoorRight") and green or red) + self:PrintText(1,6,"Ð’Ñпомогательный ПУ",yellow) + self:PrintText(3,7,"â–ˆ",Train:GetNW2Bool("VityazBTestPant1") and green or red) + self:PrintText(5,7,"â–ˆ",Train:GetNW2Bool("VityazBTestPant2") and green or red) + self:PrintText(7,7,"â–ˆ",Train:GetNW2Bool("VityazBTestVent1") and green or red) + self:PrintText(9,7,"â–ˆ",Train:GetNW2Bool("VityazBTestVent2") and green or red) + self:PrintText(13,7,"â–ˆ",Train:GetNW2Bool("VityazBTestPassLight") and green or red) + self:PrintText(6,8,"â–ˆ",Train:GetNW2Bool("VityazBTestTorecDoors") and green or red) + self:PrintText(10,8,"â–ˆ",Train:GetNW2Bool("VityazBTestBBE") and green or red) + self:PrintText(12,8,"â–ˆ",Train:GetNW2Bool("VityazBTestCompressor") and green or red) + self:PrintText(1,10,"ИÑправных клавиш",yellow) + self:PrintText(18,10,tostring(Train:GetNW2Int("VityazBTest")),yellow) + elseif self.State == 5 and mainmsg > 0 then + if mainmsg == 3 then + self:PrintText(3,0,"ВКЛЮЧЕÐЫ 2 РВ",yellow) + elseif mainmsg == 2 then + self:PrintText(3,0,"ХВОСТОВОЙ ПУ",yellow) + else + self:PrintText(4,0,"РВ ВЫКЛЮЧЕÐЫ",yellow) + end + elseif self.State == 5 and state2 == 0 then + self:PrintText(3,0,"РЕЖИМ",yellow) + local typ = Train:GetNW2Int("VityazType",0) + if typ == 1 then self:PrintText(9,0,"ХОД",blue) + elseif typ == 0 then self:PrintText(9,0,"ВЫБЕГ",blue) + elseif typ == -1 then self:PrintText(9,0,"ТОРМОЗ",blue) end + self:PrintText(1,2,"â„– вагона:",yellow) + for i=1,wagnum do + self:PrintText(9+i,2,tostring(i),yellow) + end + self:PrintText(4,4,"Двери:",yellow) + for i=1,wagnum do + self:PrintText(9+i,4,"â–ˆ",Train:GetNW2Bool("VityazDoors"..i,false) and green or red) + end + self:PrintText(7,5,"БВ:",yellow) + for i=1,wagnum do + self:PrintText(9+i,5,"â–ˆ",Train:GetNW2Bool("VityazBV"..i,false) and green or red) + end + self:PrintText(2,6,"Сбор СХ:",yellow) + for i=1,wagnum do + self:PrintText(9+i,6,"â–ˆ",Train:GetNW2Bool("VityazScheme"..i,false) and green or red) + end + self:PrintText(1,8,"Pmin",yellow) + self:PrintText(1,9,Format("%.1f",Train:GetNW2Int("VityazPMin",0)/10),blue) + self:PrintText(6,8,"Pmax",yellow) + self:PrintText(6,9,Format("%.1f",Train:GetNW2Int("VityazPMax",0)/10),blue) + self:PrintText(11,8,"Pнм",yellow) + self:PrintText(11,9,Format("%.1f",Train:GetNW2Int("VityazPNM",0)/10),blue) + self:PrintText(16,8,"UбÑ",yellow) + self:PrintText(16,9,tostring(Train:GetNW2Int("VityazUbs",0)),blue) + if err > 0 then + self:PrintText(0,10,Errors[err],yellow) + end + elseif self.State == 5 and state2 == 1 then + local speed = Train:GetNW2Int("VityazSpeed",0) + local speedL = Train:GetNW2Int("VityazSpeedLimit",0) + local speedLN = Train:GetNW2Int("VityazSpeedLimitNext",-1) + self:PrintText(1,1,"СКОРОСТЬ",yellow) + self:PrintText(1,3,"ФÐКТИЧ",yellow) + self:PrintText(1,5,"РЕКОМ",yellow) + self:PrintText(1,7,"ДОПУСТ",yellow) + for i=0,2 do self:PrintText(11,3+i*2,"КМ\\Ч",yellow) end + self:PrintText(8,3,Format("%02d",speed),green) + if speedLN == -1 and speedL < 20 then + self:PrintText(8,5,"ОЧ",yellow) + self:PrintText(8,7,"ОЧ",red) + elseif speedLN == -1 and speedL >= 20 then + self:PrintText(8,5,Format("%02d",0),yellow) + self:PrintText(8,7,Format("%02d",speedL),red) + else + self:PrintText(8,5,Format("%02d",speedLN),yellow) + self:PrintText(8,7,Format("%02d",speedL),red) + end + elseif self.State == 5 and state2 == 2 then + self:PrintText(2,0,"ПОТРЕБЛЯЕМЫЙ ТОК",yellow) + self:PrintText(1,2,"МОТОР",yellow) + self:PrintText(3,3,"КОМПРЕССОРÐ",yellow) + self:PrintText(1,4,"Ð’ÐГОÐÐОГО",yellow) + self:PrintText(3,5,"ОБОРУДОВÐÐИЯ",yellow) + self:PrintText(1,6,"1-Й ГР ТЯГОВЫХ",yellow) + self:PrintText(3,7,"ДВИГÐТЕЛЕЙ",yellow) + self:PrintText(1,8,"2-Й ГР ТЯГОВЫХ",yellow) + self:PrintText(3,9,"ДВИГÐТЕЛЕЙ",yellow) + if sel == 0 then self:PrintText(16,3,"<",yellow) end + if sel == 1 then self:PrintText(16,5,"<",yellow) end + if sel == 2 then self:PrintText(16,7,"<",yellow) end + if sel == 3 then self:PrintText(16,9,"<",yellow) end + elseif self.State == 5 and state2 == 21 then + self:PrintText(2,0,"ПОТРЕБЛЯЕМЫЙ ТОК",yellow) + self:PrintText(1,1,"МОТОР",yellow) + self:PrintText(3,2,"КОМПРЕССОРÐ",yellow) + for i=1,wagnum do + self:PrintText(1,2+i,i.." Ð’ÐГОÐ",yellow) + self:PrintText(10 ,2+i,Format("%04.1f Ð",Train:GetNW2Int("VityazIMK"..i,0)/10),yellow) + end + elseif self.State == 5 and state2 == 22 then + self:PrintText(2,0,"ПОТРЕБЛЯЕМЫЙ ТОК",yellow) + self:PrintText(1,1,"Ð’ÐГОÐÐОГО",yellow) + self:PrintText(3,2,"ОБОРУДОВÐÐИЯ",yellow) + for i=1,wagnum do + self:PrintText(1,2+i,i.." Ð’ÐГОÐ",yellow) + self:PrintText(10, 2+i,Format("% 4.1f Ð",Train:GetNW2Int("VityazIVO"..i,0)/10),yellow) + end + elseif self.State == 5 and state2 == 23 then + self:PrintText(2,0,"ПОТРЕБЛЯЕМЫЙ ТОК",yellow) + self:PrintText(1,1,"1-Й ГР ТЯГОВЫХ",yellow) + self:PrintText(3,2,"ДВИГÐТЕЛЕЙ",yellow) + for i=1,wagnum do + self:PrintText(1,2+i,i.." Ð’ÐГОÐ",yellow) + self:PrintText(10 ,2+i,Format("% 4.1f Ð",Train:GetNW2Int("VityazI13"..i,0)/10),yellow) + end + elseif self.State == 5 and state2 == 24 then + self:PrintText(2,0,"ПОТРЕБЛЯЕМЫЙ ТОК",yellow) + self:PrintText(1,1,"2-Й ГР ТЯГОВЫХ",yellow) + self:PrintText(3,2,"ДВИГÐТЕЛЕЙ",yellow) + for i=1,wagnum do + self:PrintText(1,2+i,i.." Ð’ÐГОÐ",yellow) + self:PrintText(10 ,2+i,Format("% 4.1f Ð",Train:GetNW2Int("VityazI24"..i,0)/10),yellow) + end + elseif self.State == 5 and state2 == 3 then + self:PrintText(4 ,0,"СОСТОЯÐИЕ ВО",yellow) + self:PrintText(1,2,"â„– вагона:",yellow) + for i=1,wagnum do + self:PrintText(9+i,2,tostring(i),yellow) + end + for i=0,6 do + local text,var = VO[i*2+sel*14+1],VO[i*2+sel*14+2] + if text then + self:PrintText(1,4+i,text,yellow) + for w=1,wagnum do + self:PrintText(9+w,4+i,"â–ˆ",Train:GetNW2Bool("Vityaz"..var..w,false) and green or red) + end + end + end + elseif self.State == 5 and state2 == 4 then + self:PrintText(0,0,"ÐОМЕРРВÐГ Ð’ СОСТÐВЕ",yellow) + self:PrintText(1,2,"â„–",yellow) + self:PrintText(4,2,"зав â„–",yellow) + self:PrintText(11,2,"ориент",yellow) + for i=1,wagnum do + self:PrintText(1,2+i,tostring(i),yellow) + self:PrintText(4,2+i,Format("%04d",Train:GetNW2Int("VityazWagNum"..i)),yellow) + if Train:GetNW2Bool("VityazWagOr"..i) then + self:PrintText(11,2+i,"ОДИÐÐК",yellow) + else + self:PrintText(11,2+i,"ПРОТИВОП",yellow) + end + end + elseif self.State == 5 and state2 == 5 then + self:PrintText(2,0,"СОСТОЯÐИЕ ДВЕРЕЙ",yellow) + self:PrintText(1,2,"â„–",yellow) + self:PrintText(4,2,"ЛЕВЫЕ",yellow) + self:PrintText(10,2,"ПРÐВЫЕ",yellow) + self:PrintText(18,2,"Ор",yellow) + for i=1,wagnum do + self:PrintText(1,2+i,tostring(i),yellow) + for d=1,4 do + self:PrintText(3+d,2+i,"â–ˆ",Train:GetNW2Bool("VityazDoor"..d.."L"..i,false) and green or red) + self:PrintText(11+d,2+i,"â–ˆ",Train:GetNW2Bool("VityazDoor"..d.."R"..i,false) and green or red) + end + if Train:GetNW2Bool("VityazWagOr"..i) then + self:PrintText(18,2+i,"О",yellow) + else + self:PrintText(18,2+i,"П",yellow) + end + end + elseif self.State == 5 and state2 == 6 then + self:PrintText(0,0,"ПО Ð’ÐГОÐÐОЕ УПРÐВЛ-Е",yellow) + self:PrintText(2,1,"вагон",yellow) + self:PrintText(10,1,"â„–",yellow) + self:PrintText(14,1,tostring(sel),yellow) + self:PrintText(0,2,"1 БВ",yellow) + self:PrintText(14,2,Train:GetNW2Bool("VityazPVU1") and "ВЫКЛ" or "ВКЛ",yellow) + self:PrintText(0,3,"2 ДВЕРИ",yellow) + self:PrintText(14,3,Train:GetNW2Bool("VityazPVU2") and "БЛОК" or "ÐЕБЛ",yellow) + self:PrintText(0,4,"3 КОМПРЕССОР",yellow) + self:PrintText(14,4,Train:GetNW2Bool("VityazPVU3") and "ВЫКЛ" or "ВКЛ",yellow) + self:PrintText(0,5,"4 ТОКОПР",yellow) + self:PrintText(14,5,Train:GetNW2Bool("VityazPVU4") and "ОТЖ" or "ПРИЖ",yellow) + self:PrintText(0,6,"5 ОСВЕЩ",yellow) + self:PrintText(14,6,Train:GetNW2Bool("VityazPVU5") and "ВЫКЛ" or "ВКЛ",yellow) + self:PrintText(0,7,"6 БЛОКИР Т/ДВ",yellow) + self:PrintText(14,7,Train:GetNW2Bool("VityazPVU6") and "ВЫКЛ" or "ВКЛ",yellow) + self:PrintText(0,8,"7 ВЕÐТИЛ",yellow) + self:PrintText(14,8,Train:GetNW2Bool("VityazPVU7") and "ВЫКЛ" or "ВКЛ",yellow) + self:PrintText(0,9,"8 ББЭ",yellow) + self:PrintText(14,9,Train:GetNW2Bool("VityazPVU8") and "ВЫКЛ" or "ВКЛ",yellow) + self:PrintText(0,10,"9 ТЯГ ПРИВОД",yellow) + self:PrintText(14,10,Train:GetNW2Bool("VityazPVU9") and "ВЫКЛ" or "ВКЛ",yellow) + end + if self.State > 0 then + self:PrintText(0,11,Format("H%03d",self.Counter),red) + if mainmsg > 0 then + self:PrintText(5,11,Format("0000%02d",ErrorNums[mainmsg]),yellow) + else + self:PrintText(5,11,Format("0000%02d",err > 0 and ErrorNums[err+3] or 0),yellow) + end + self:PrintText(13,11,Format("%02d%02d%02d",self.State,state2,sel),yellow) + end + end +end diff --git a/lua/metrostroi/systems/sys_81_720_buv.lua b/lua/metrostroi/systems/sys_81_720_buv.lua new file mode 100644 index 0000000..e745dfa --- /dev/null +++ b/lua/metrostroi/systems/sys_81_720_buv.lua @@ -0,0 +1,282 @@ +-------------------------------------------------------------------------------- +-- 81-720 wagon control unit +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_720_BUV") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + if not TURBOSTROI then + self.TrainIndex = self.Train:GetWagonNumber() + end + self.Battery = false + self.Power = 0 + self.States = {} + self.Commands = {} + + self.Slope = false + + self.BBE = 0 + self.MK = 0 + + self.Reverser = 0 + self.PN2 = 0 + self.Brake = 0 + self.Drive = 0 + self.DriveStrength = 0 + self.Disassembly = 0 + + self.Vent1 = 0 + self.Vent2 = 0 + + self.CurTime = CurTime() + + self.FirstHalf = false +end + +function TRAIN_SYSTEM:Outputs() + return {"Brake", "Drive", "DriveStrength", "Disassembly" ,"BBE","MK","Vent1","Vent2"} +end + +function TRAIN_SYSTEM:Inputs() + return {} +end +function TRAIN_SYSTEM:CState(name,value) + if self.CurrentBUP and (self.Reset or self.States[name] ~= value) then + self.States[name] = value + self.Train:CANWrite("BUV",self.Train:GetWagonNumber(),"BUKP",self.CurrentBUP,name,value) + end +end +-- Door8Closed t/f +-- Door7Closed t/f +-- Door6Closed t/f +-- Door5Closed t/f +-- Door4Closed t/f +-- Door3Closed t/f +-- Door2Closed t/f +-- Door1Closed t/f +-- NoAssembly t/f +-- ParkingBrakeEnabled t/f +-- BEPPBroken t/f +-- EmergencyBrake t/f +-- ReserveChannelBraking t/f +-- PTEnabled t/f +-- PTBad t/f +-- PTReady t/f +-- PTReplace t/f +-- TLPressure 0-10 +-- BLPressure 0-10 +-- BCPressure 0-6 +-- HPPressure 0-6 +-- WeightLoad 0-1 +-- PantDisabled t/f +-- EnginesBroken t/f +-- BBEEnabled t/f +-- BBEBroken t/f +-- HVBad t/f +-- LVBad t/f +-- EnginesDone t/f +-- EnginesBrakeBroke t/f +-- PassLightEnabled t/f +-- BVEnabled t/f +-- DriveStrength ~ +-- BrakeStrength ~ +-- VagEqConsumption 0-60A +-- HVVoltage 0-1500A +-- LVVoltage 0-100A +-- MKVoltage 0-50A +-- VentEnabled t/f +-- HeatEnabled t/f +-- MKWork --ИÑправноÑть МК +-- BUVWork --ИÑправноÑть БУВ +-- WagNOrientated t/f +-- Orientation t/f +function TRAIN_SYSTEM:CANReceive(source,sourceid,target,targetid,textdata,numdata) + if textdata == "BUPWork" and not numdata then + self.Commands[sourceid] = {} + elseif textdata == "Orientate" then + self.OrientateBUP = sourceid + self.FirstHalf = numdata + self.Reset = CurTime() + elseif self.CurrentBUP then + if not self.Commands[sourceid] then self.Commands[sourceid] = {} end + self.Commands[sourceid][textdata] = numdata + end +end +function TRAIN_SYSTEM:Get(id) + local Commands = self.Commands[self.CurrentBUP] + if Commands then + return Commands[id] + end +end +function TRAIN_SYSTEM:TriggerInput(name,value) +end + +function TRAIN_SYSTEM:Think() + if CurTime()-self.CurTime < 0.1 then return end + self.DeltaTime = CurTime()-self.CurTime + self.CurTime = CurTime() + + local Train = self.Train + local wagcount = #Train.WagonList + + self.Power = Train.Electric.Battery80V > 62 and 1 or 0 + self.State = self.Power > 0 and Train.SFV2.Value > 0.5 + if self.State then + if not self.States.BUVWork then + self.Train:CANWrite("BUV",Train:GetWagonNumber(),"BUKP",nil,"Get",1) + end + for i=1,4 do + self:CState("Door"..i.."Closed", Train.Pneumatic.LeftDoorState[i] == 0) + self:CState("Door"..(i+4).."Closed", Train.Pneumatic.RightDoorState[i] == 0) + end + self:CState("DoorTorec", Train.RearDoor or Train.FrontDoor) + self:CState("DoorBack", Train.PassengerDoor or Train.CabinDoorLeft or Train.CabinDoorRight) + self:CState("EmPT",Train:ReadTrainWire(28) > 0) + self:CState("NoAssembly", Train.KMR1.Value == 0 and Train.KMR2.Value == 0 or Train.K2.Value == 0 and Train.K3.Value==0) + self:CState("ParkingBrakeEnabled", Train.Pneumatic.ParkingBrakePressure < 3) + self:CState("BEPPBroken", false) + self:CState("EmergencyBrakeGood", Train.Pneumatic.BrakeCylinderPressure >= (2.6+Train.Pneumatic.WeightLoadRatio*0.6)-0.1) + self:CState("EmergencyBrake", self.States.EmergencyBrakeGood--[[ and Train:ReadTrainWire(27) == 0--]] ) + self:CState("ReserveChannelBraking", Train:ReadTrainWire(28)>0) + self:CState("PTEnabled", Train.Pneumatic.BrakeCylinderPressure > 0.2) + self:CState("PTBad", false) + self:CState("PTReady", Train.Pneumatic.AirDistributorPressure >= (2.6+Train.Pneumatic.WeightLoadRatio*0.6)-0.1) + self:CState("PTReplace", self.PTReplace and CurTime()-self.PTReplace > 1.5) + self:CState("BTBReady", Train.Pneumatic.BTBReady) + self:CState("TLPressure", math.Round(Train.Pneumatic.TrainLinePressure,1)) + self:CState("BLPressure", math.Round(Train.Pneumatic.BrakeLinePressure,1)) + self:CState("BCPressure", math.Round(Train.Pneumatic.BrakeCylinderPressure,1)) + self:CState("HPPressure", math.Round(Train.Pneumatic.AirDistributorPressure,1)) + self:CState("WeightLoad", math.Round(Train.Pneumatic.WeightLoadRatio,2)) + self:CState("PantDisabled", self.Pant) + self:CState("EnginesBroken", false) + self:CState("BBEEnabled", self.BBE) + self:CState("BBEBroken", false) + self:CState("HVBad", Train.Electric.Power750V < 550) + self:CState("LVBad", Train.Electric.Battery80V < 62) + self:CState("EnginesDone", self.EnginesDone)-- and math.abs(Train.Speed) < 7.5) + --self:CState("EnginesBrakeBroke", (self:Get("Brake") or 0) > 0 and Train.BV.Value == 0 or Train.Electric.IT > 0 and Train.K3.Value == 0) + self:CState("EnginesBrakeBroke", (self:Get("Brake") or 0) > 0 and (Train.BV.Value == 0 or Train.K3.Value == 0)) + self:CState("PassLightEnabled", self.MainLights) + self:CState("BVEnabled", Train.BV.Value > 0) + self:CState("DriveStrength", math.min(0,Train.Engines.BogeyMoment*2)) + self:CState("BrakeStrength", math.max(0,Train.Engines.BogeyMoment*2)) + self:CState("VagEqConsumption", 15)--15-25 + self:CState("I13", math.Round(Train.Electric.I13,1)) + self:CState("I24", math.Round(Train.Electric.I24,1)) + self:CState("HVVoltage", math.floor(Train.Electric.Main750V)) + self:CState("LVVoltage", math.floor(Train.Electric.Battery80V)) + self:CState("MKVoltage", math.Round(Train.Electric.BVKA_KM1*math.Rand(9,13),1)) + self:CState("Vent1Enabled", Train.Electric.Vent1>0) + self:CState("Vent2Enabled", Train.Electric.Vent2>0) + self:CState("HeatEnabled", false) + self:CState("MKWork", Train.Pneumatic.Compressor) + self:CState("BUVWork", true) + self:CState("WagNOrientated", self.Orientation == self.RevOrientation) + self:CState("Orientation", self.Orientation) + self:CState("BadCombination", (Train:ReadTrainWire(3)*Train:ReadTrainWire(4)) > 0) + else + self:CState("BUVWork", false) + for k,v in pairs(self.Commands) do + self.Commands[k] = false + end + end + + if self.Reset and self.Reset ~= CurTime() then + self.Reset = nil + end + + local NoHV = Train.Electric.Main750V < 650 or Train.Electric.Main750V > 975 + + self.BBE = ((not self:Get("PVU8") and self:Get("BBE")) and 1 or (Train.BBER and Train.BBER.Value or 0))*Train.SFV7.Value + if NoHV then self.BBE = 0 end + if self.BBE == 0 and self.MainLights and not self.MainLightsTimer then self.MainLightsTimer = CurTime() end + if self.BBE > 0 or not self.MainLights or self.MainLightsTimer and CurTime()-self.MainLightsTimer > 27 then self.MainLightsTimer = nil end + if (self:Get("BVOn") or Train:ReadTrainWire(2) > 0) then + Train.BV:TriggerInput("Close",Train.SFV8.Value*Train.SFV9.Value) + end + if self:Get("BVOff") and Train.SFV8.Value > 0 or self:Get("PVU1") then + Train.BV:TriggerInput("Open",1) + end + self.MainLights = not self:Get("PVU5") and (self.BBE > 0 or self.MainLightsTimer) and Train.SFV19.Value > 0.5 and self:Get("PassLight") + if self:Get("Slope") then self.Slope = CurTime() end + if not self:Get("Slope") and self.Slope and Train.Pneumatic.BrakeCylinderPressure < 0.5 then self.Slope = false end + --self.Reverser = Train:ReadTrainWire(12) + local brake = self:Get("Brake") or 0 + local strength = not self:Get("PVU9") and (self.Slope or brake>0 and Train.Pneumatic.BrakeCylinderPressure < 1.5 or brake==0 and Train.Pneumatic.BrakeCylinderPressure < 0.5) and self:Get("DriveStrength") or 0 + local drive = math.min(1,(1-brake)*strength) + if strength == 0 then + brake=0 + drive=0 + end + if brake>0 and Train.BPTI.State~=-1 and math.abs(Train.Speed) < 10 then + self.Brake = 0 + else + self.Brake = brake + end + self.Drive = drive + self.BlockTorec = not self:Get("PVU6") and self:Get("DoorTorec") and Train.SFV15.Value > 0 + self.DriveStrength = strength + if brake == 0 then + self.EnginesDone = false + elseif Train.BPTI.State == -1 and (Train.BPTI.RNState == 1 and Train.Electric.I13>math.min(-130,-Train.Electric.ISet*0.75)) or Train.BPTI.State~=-1 and math.abs(Train.Speed) < 10 then + self.EnginesDone = true + end + + local PTReplace = self.States.EnginesBrakeBroke + if PTReplace and not self.PTReplace then + self.PTReplace = CurTime() + if Train.K3.Value*Train.BV.Value ~= 0 then + self.PTReplace = self.PTReplace + 1.3 + end + if Train.BV.Value == 0 or self:Get("PVU9") then + self.PTReplace = self.PTReplace - 1.2 + end + end + if not PTReplace and self.PTReplace then self.PTReplace = nil end + + local PN = self.PTReplace and CurTime()-self.PTReplace > 1.2 or self.States.EnginesDone + self.PN1 = (self:Get("PN1") and self:Get("PN1") > 0) or PN and (self:Get("DriveStrength") and self:Get("DriveStrength") > 0) + self.PN2 = (self:Get("PN2") and self:Get("PN2") > 0) or PN and (self:Get("DriveStrength") and self:Get("DriveStrength") > 2) + + self.MK = not self:Get("PVU3") and self:Get("Compressor") and 1 or 0 + + self.OpenLeft = not self:Get("PVU2") and self:Get("OpenLeft") and self.Orientation or self:Get("OpenRight") and not self.Orientation + self.OpenRight = not self:Get("PVU2") and self:Get("OpenRight") and self.Orientation or self:Get("OpenLeft") and not self.Orientation + self.CloseDoors = self:Get("PVU2") or self:Get("CloseDoors") + + self.Vent1 = not self:Get("PVU7") and self:Get("Vent1") and 1 or 0 + self.Vent2 = not self:Get("PVU7") and self:Get("Vent1") and self:Get("Vent2") and not NoHV and 1 or 0 + self.Orientation = Train:ReadTrainWire(3) > 0 + self.RevOrientation = Train:ReadTrainWire(4) > 0 + local BadOrientation = self.Orientation and self.Orientation == self.RevOrientation + if self.State and self.Orientation ~= self.RevOrientation then + if not self.BadOrientation and self.OrientateBUP and (not self.Commands[self.OrientateBUP] or self.Orientation and self.Commands.Forward ~= self.OrientateBUP or self.RevOrientation and self.Commands.Back ~= self.OrientateBUP) then + if self.Orientation then self.Commands.Forward = self.OrientateBUP else self.Commands.Back = self.OrientateBUP end + self.OrientateBUP = nil + end + end + + local ReOrientation = self.State and (self.Orientation or self.RevOrientation) and (self.Orientation ~= self.PrevOrientation or self.RevOrientation ~= self.PrevRevOrientation or self.CurrentBUP ~= (self.Orientation and self.Commands.Forward or self.Commands.Back)) + if ReOrientation then + self.CurrentBUP = self.Orientation and self.Commands.Forward or self.Commands.Back + self.Reset = CurTime() + if self.CurrentBUP then + self.Commands[self.CurrentBUP] = {} + Train:CANWrite("BUV",Train:GetWagonNumber(),"BUKP",self.CurrentBUP,"Get") + end + end + self.BadOrientation = BadOrientation + self.PrevOrientation = self.Train:ReadTrainWire(3) > 0 + self.PrevRevOrientation = self.Train:ReadTrainWire(4) > 0 + if Train.SFV29.Value > 0 then + if self:Get("PVU4") or --[[ Train.Electric.Main750V < 20 and --]] (self:Get("TP1") and self.FirstHalf or self:Get("TP2") and not self.FirstHalf) then + self.Pant = true + else + self.Pant = false + end + end +end diff --git a/lua/metrostroi/systems/sys_81_720_electric.lua b/lua/metrostroi/systems/sys_81_720_electric.lua new file mode 100644 index 0000000..526efc5 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_720_electric.lua @@ -0,0 +1,526 @@ +-------------------------------------------------------------------------------- +-- 81-720 electric schemes +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_720_Electric") +TRAIN_SYSTEM.DontAccelerateSimulation = false + + + +function TRAIN_SYSTEM:Initialize() + -- Линейный контактор К1 (КР) + self.Train:LoadSystem("K1","Relay","PK-162",{bass = true,close_time=0.1}) + -- Линейный контактор К2 (Ход) + self.Train:LoadSystem("K2","Relay","PK-162",{bass = true,close_time=0.1}) + -- Линейный контактор К3 (Тормоз) + self.Train:LoadSystem("K3","Relay","PK-162",{bass = true,close_time=0.1}) + + -- Контактор(Ñ‹) реверÑа "Вперёд" + self.Train:LoadSystem("KMR1","Relay","PK-162",{bass = true,close_time=0.1}) + -- Контактор(Ñ‹) реверÑа "Ðазад" + self.Train:LoadSystem("KMR2","Relay","PK-162",{bass = true,close_time=0.1}) + + -- General power output + self.Main750V = 0.0 + self.Aux750V = 0.0 + self.Power750V = 0.0 + self.Aux80V = 0.0 + self.Lights80V = 0.0 + self.Battery80V = 0.0 + + -- Resistances + self.R1 = 1e9 + self.R2 = 1e9 + self.R3 = 1e9 + self.Rs1 = 1e9 + self.Rs2 = 1e9 + + self.Rstator13 = 1e9 + self.Rstator24 = 1e9 + self.Ranchor13 = 1e9 + self.Ranchor24 = 1e9 + + -- Electric network info + self.Itotal = 0.0 + self.I13 = 0.0 + self.I24 = 0.0 + self.Ustator13 = 0.0 + self.Ustator24 = 0.0 + self.Ishunt13 = 0.0 + self.Istator13 = 0.0 + self.Ishunt24 = 0.0 + self.Istator24 = 0.0 + self.Utotal = 0.0 + -- Calculate current through rheostats 1, 2 + self.IR1 = self.Itotal + self.IR2 = self.Itotal + self.IRT2 = self.Itotal + self.T1 = 25 + self.T2 = 25 + self.P1 = 0 + self.P2 = 0 + self.Overheat1 = 0 + self.Overheat2 = 0 + + -- Total energy used by train + self.ElectricEnergyUsed = 0 -- joules + self.ElectricEnergyDissipated = 0 -- joules + self.EnergyChange = 0 + + --Train wire outside power + -- Need many iterations for engine simulation to converge + self.SubIterations = 16 + + self.Train:LoadSystem("BV","Relay") + self.Train:LoadSystem("GV","Relay","GV_10ZH",{bass=true}) + -- Thyristor contrller + self.IX = 0 + self.IT = 0 + + + self.BTB = 0 + self.KTR = 0 + self.V2 = 0 + self.V1 = 0 + self.BVKA_KM1 = 0 + self.BVKA_KM2 = 0 + self.BVKA_KM3 = 0 + self.BVKA_KM4 = 0 + self.BVKA_KM5 = 0 + self.Vent1 = 0 + self.Vent2 = 0 + self.BSKA = 0 + + self.BPTI_V = 0 + self.BPTI_ZKK = 0 + + self.BUTP = 0 + self.ISet = 0 + --self.Train:LoadSystem("Telemetry",nil,"",{"Electric","Panel","Engines"}) +end + + +function TRAIN_SYSTEM:Inputs() + return { } +end + +function TRAIN_SYSTEM:Outputs() + return { "I13","I24","Itotal", "IT", "IX", + --[[ + "Rs1","Rs2","Itotal","I13","I24","IRT2", + "Ustator13","Ustator24","Ishunt13","Istator13","Ishunt24","Istator24", + "Uanchor13","Uanchor24","U13","U24","Utotal","RVState",--]] + "Main750V", "Power750V", "Aux750V", "Aux80V", "Lights80V", "Battery80V", --[[ + "ElectricEnergyUsed", "ElectricEnergyDissipated", "EnergyChange", + "RPSignalResistor"]] + "RNState", "RN", + "BTB","V2","V1", + "BVKA_KM1","BVKA_KM2","BVKA_KM3","BVKA_KM4","BVKA_KM5", + "Vent1","Vent2", + "BSKA","BPTI_V","BPTI_ZKK","BUTP","ISet" + } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + + + +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:Think(dT,iter) + local Train = self.Train + -- local dT = dT/8 + ---------------------------------------------------------------------------- + -- Voltages from the third rail + ---------------------------------------------------------------------------- + self.Main750V = Train.TR.Main750V + self.Aux750V = Train.TR.Main750V + self.Power750V = self.Main750V*Train.GV.Value + + + ---------------------------------------------------------------------------- + -- Information only + ---------------------------------------------------------------------------- + local BBE = Train.BUV.BBE > 0 + self.Aux80V = BBE and 82 or 65 + self.Lights80V = BBE and 82 or 0--Train.PowerSupply.XT3_4 + + self.Battery80V = (Train.Battery.Value > 0) and (BBE and 82 or 65) or 0 + Train:WriteTrainWire(1,self.Battery80V > 62 and 1 or 0) + + ---------------------------------------------------------------------------- + -- Some internal electric + ---------------------------------------------------------------------------- + local P = self.Battery80V > 62 and 1 or 0 + local HV = 550 < self.Main750V and self.Main750V < 975 and 1 or 0 + --(RV) + local Panel = Train.Panel + if Train.RV then + local RV = Train.RV + Train:WriteTrainWire(2,P*Train.SF19.Value*Train.EnableBVEmer.Value) + Train:WriteTrainWire(34,P*(RV["KRO1-2"]*Train.SF2.Value + RV["KRR1-2"]*Train.SF3.Value)) + Train:WriteTrainWire(36,Train.SF3.Value*Train.EmergencyControls.Value) + + Train:WriteTrainWire(19,P*RV["KRR7-8"]*Train.SF10.Value*Train.BARS.BTB*Train.EmerX1.Value) + Train:WriteTrainWire(45,P*RV["KRR7-8"]*Train.SF10.Value*Train.BARS.BTB*Train.EmerX2.Value) + Train:WriteTrainWire(3,P*(RV["KRO9-10"]+RV["KRR7-8"])*Train.SF10.Value) + Train:WriteTrainWire(4,0) + local KM1 = P*Train.SF6.Value*RV["KRO11-12"] + local KM2 = P*Train.SF6.Value*RV["KRO15-16"] + Train:WriteTrainWire(11,P*Train.ParkingBrake.Value) + Train:WriteTrainWire(12,P*(RV["KRR3-4"]+KM1)*Train.SF11.Value) + Train:WriteTrainWire(13,P*(RV["KRR9-10"]+KM2)*Train.SF11.Value) + + self.V2 = P*(RV["KRO13-14"]*Train.SF19.Value + RV["KRR11-12"]*Train.SF20.Value) + self.V1 = P*(RV["KRO13-14"]*Train.SF19.Value + RV["KRR11-12"]*Train.SF20.Value)*Train.HornB.Value + + local BTBp = P*(RV["KRO13-14"]*Train.SF19.Value + RV["KRR11-12"]*Train.SF20.Value)*(1-Train.Pneumatic.SD2) + Train:WriteTrainWire(27,BTBp) + local BTBm = (Train.BARS.BTB+Train.ALS.Value*(Train.BARSBlock.Value==3 and 1 or 0)) + local BTB = math.min(1,BTBp*BTBm) + Panel.EmerBrakeWork = BTB*Train.EmerBrake.Value + Train:WriteTrainWire(28,Panel.EmerBrakeWork) + --BTB KT KO Logic + if Panel.EmerBrakeWork > 0 then + if Train.EmerBrakeAdd.Value > 0 and not self.KT then + self.KTR = math.min(3,self.KTR + 1) + self.KT = true + elseif Train.EmerBrakeAdd.Value == 0 then + self.KT = false + end + if Train.EmerBrakeRelease.Value > 0 and not self.KO then + self.KTR = math.max(0,self.KTR - 1) + self.KO = true + elseif Train.EmerBrakeRelease.Value == 0 then + self.KO = false + end + Train:WriteTrainWire(29,self.KTR>1 and 1 or 0) + Train:WriteTrainWire(30,self.KTR>0 and 1 or 0) + else + if self.KTR > 0 then self.KTR = 0 end + Train:WriteTrainWire(29,0) + Train:WriteTrainWire(30,0) + end + --[[ Train:WriteTrainWire(24,BTB*(1-Train.EmergencyBrake.Value)) + Train:WriteTrainWire(25,BTB == 0 and Train:ReadTrainWire(26) > 0 and Train:ReadTrainWire(24)*self.BTB or 0) + Train:WriteTrainWire(26,BTB*(Train.BARS.BTB)) + if Train:ReadTrainWire(26) > 0 and Train:ReadTrainWire(24) == 0 then self.BTB = 0 elseif Train:ReadTrainWire(26) == 0 then self.BTB = 1 end--]] + + if BTB > 0 then + if self.BTBTimer == nil then self.BTBTimer = CurTime() end + if self.BTBTimer and CurTime()-self.BTBTimer>0.3 then self.BTBTimer = false end + else + self.BTBTimer = nil + end + self.BTB = math.min(1,(self.BTBTimer~=false and 1 or 0)+self.BTB*Train:ReadTrainWire(26)) + Train:WriteTrainWire(26,(1-BTB)*Train:ReadTrainWire(24)*(1-Train.EmergencyBrake.Value)) + Train:WriteTrainWire(24,BTB*(1-Train.EmergencyBrake.Value)) + Train:WriteTrainWire(25,BTB*self.BTB*(self.KTR==3 and 0 or 1)) + Train:WriteTrainWire(10,P*Train.EmergencyCompressor.Value) + + Train:WriteTrainWire(40,P*Train.EmergencyDoors.Value) + Train:WriteTrainWire(39,P*Train.SF22.Value*Train.EmerCloseDoors.Value) + Train:WriteTrainWire(38,P*Train.SF21.Value*Train.DoorLeft.Value) + Train:WriteTrainWire(37,P*Train.SF21.Value*Train.DoorRight.Value) + + local ASNP_VV = Train.ASNP_VV + Panel.R_Announcer = P*Train.SF8.Value*Train.R_Announcer.Value + Panel.R_Line = P*Train.SF8.Value*Panel.R_Announcer*Train.R_Line.Value + ASNP_VV.Power = P*Train.SF8.Value*Train.R_ASNPOn.Value + ASNP_VV.AmplifierPower = ASNP_VV.Power*Train.ASNP.LineOut*Train.R_Announcer.Value*(1-Train.R_Line.Value) + Train:WriteTrainWire(20,ASNP_VV.AmplifierPower) + --ASNP_VV.CabinSpeakerPower = ASNP_VV.Power*Train.ASNP.LineOut*Train.R_G.Value + Panel.DoorLeft = P*Train.SF21.Value*Train.DoorSelectL.Value*(1-Train.DoorSelectR.Value) + Panel.DoorRight = P*Train.SF21.Value*Train.DoorSelectR.Value*(1-Train.DoorSelectL.Value) + Panel.DoorClose = P*Train.SF22.Value*Train.DoorClose.Value + Panel.DoorBlock = P*Train.DoorBlock.Value + Panel.Ticker = P*Train.SF8.Value*Train.Ticker.Value + Panel.PassScheme = P*Train.SF8.Value*Train.PassScheme.Value + Train:WriteTrainWire(15,Panel.Ticker) + Train:WriteTrainWire(16,Panel.PassScheme) + Panel.PassSchemeControl = Panel.PassScheme*(RV["KRO9-10"]+RV["KRR7-8"])*Train.SF10.Value + Panel.KAH = P*Train.KAH.Value + Panel.ALS = P*Train.ALS.Value + --Panel.AccelRate = P*Train.AccelRate.Value + Panel.EqLights = P*Train.SF15.Value*Train.AppLights1.Value + Panel.CabLights = P*Train.SF15.Value*Train.CabLight.Value*(0.5+Train.CabLightStrength.Value*0.5) + + Panel.Headlights1 = P*(RV["KRO3-4"]+RV["KRR5-6"])*Train.Headlights1.Value*Train.SF12.Value + Panel.Headlights2 = P*(RV["KRO3-4"]+RV["KRR5-6"])*Train.Headlights2.Value*Train.SF13.Value + Panel.RedLights = P*(RV["KRO7-8"]+RV["KRR9-10"])*Train.SF14.Value + Panel.CBKIPower = P*Train.SF7.Value + end + Panel.PCBKPower = P*Train.SFV10.Value + Panel.AnnouncerPlaying = Train:ReadTrainWire(20)*Train.SFV16.Value + Panel.TickerPower = P*Train.SFV30.Value + Panel.TickerWork = Panel.TickerPower*Train:ReadTrainWire(15) + Panel.PassSchemePower = P*Train.SFV16.Value + Panel.PassSchemeWork = Panel.PassSchemePower*Train:ReadTrainWire(16) + self.BVKA_KM1 = P*HV*Train.SFV11.Value*(Train.BUV.MK+Train:ReadTrainWire(10)) + local KM2 = P*(Train:ReadTrainWire(34)*Train.SFV4.Value + Train:ReadTrainWire(36)*Train.SFV5.Value)*Train.SFV1.Value + if self.BVKA_KM2 ~= KM2 then + if self.BVKA_KM2 == 0 then + Train:PlayOnce("batt_on","bass",1) + end + self.BVKA_KM2 = KM2 + end + self.BVKA_KM3 = P*Train.SFV23.Value*(Train.BUV.Vent1) + self.BVKA_KM4 = P*Train.SFV24.Value*(Train.BUV.Vent2) + self.BVKA_KM5 = P + self.BSKA = P*Train.SFV6.Value*self.BVKA_KM2 + + self.Vent1 = P*Train.SFV25.Value*self.BVKA_KM3 + self.Vent2 = P*Train.SFV26.Value*self.BVKA_KM4 + + self.BPTI_V = P*Train.SFV27.Value*self.BVKA_KM5 + self.BPTI_ZKK = P*Train.SFV28.Value + + local emer = Train:ReadTrainWire(45)+Train:ReadTrainWire(19) + self.BUTP = P*self.BVKA_KM2*Train.SFV3.Value*Train.SFV6.Value + + --Train:WriteTrainWire(12,RV["KRO9-10"]*Train.SF10.Value) + --Train:WriteTrainWire(13,RV["KRO9-10"]*Train.SF10.Value) + ---------------------------------------------------------------------------- + -- Solve circuits + ---------------------------------------------------------------------------- + local bv = Train.BV.Value + local strength,brake,drive = 0,0,0 + if emer > 0 then + strength = Train:ReadTrainWire(45) > 0 and 4 or Train:ReadTrainWire(19) > 0 and 1 or 0 + drive = strength*self.BUTP*bv + else + brake = Train.BUV.Brake*self.BUTP + drive = Train.BUV.Drive*self.BUTP*bv + strength = Train.BUV.DriveStrength + end + + self.VP = self.BSKA*(drive+brake)*Train:ReadTrainWire(12)*(1-Train:ReadTrainWire(13)) + self.NZ = self.BSKA*(drive+brake)*Train:ReadTrainWire(13)*(1-Train:ReadTrainWire(12)) + self.IX = drive*(1-brake)*(self.VP+self.NZ) + self.IT = brake*(1-drive)*(self.VP+self.NZ) + if bv==0 or Train.BPTI.Zero or self.IX==0 and self.IT==0 and self.BPTIState==0 then + Train.KMR1:TriggerInput("Set",0) + Train.KMR2:TriggerInput("Set",0) + + Train.K1:TriggerInput("Set",0) + Train.K2:TriggerInput("Set",0) + Train.K3:TriggerInput("Set",0) + self.Shunt = false + elseif self.IX>0 and Train.BPTI.State >= 0 then + Train.KMR1:TriggerInput("Set",self.VP) + Train.KMR2:TriggerInput("Set",self.NZ) + + Train.K1:TriggerInput("Set",self.IX) + Train.K2:TriggerInput("Set",self.IX) + Train.K3:TriggerInput("Set",0) + elseif self.IT>0 and Train.BPTI.State <= 0 then + Train.KMR1:TriggerInput("Set",self.VP) + Train.KMR2:TriggerInput("Set",self.NZ) + + Train.K1:TriggerInput("Set",0) + Train.K2:TriggerInput("Set",0) + Train.K3:TriggerInput("Set",self.IT) + end + if bv==0 or 550 >= self.Main750V or self.Main750V >= 975 then + self.ISet = 0 + self.BPTIState = 0 + elseif Train.K2.Value > 0 and self.IX > 0 then + self.BPTIState = 1 + if strength == 1 then + self.ISet = 150 + elseif strength == 2 then + self.ISet = 200 + 60*Train.Pneumatic.WeightLoadRatio + elseif strength == 3 then + self.ISet = 260 + 70*Train.Pneumatic.WeightLoadRatio + elseif strength == 4 then + self.ISet = 330 + 120*Train.Pneumatic.WeightLoadRatio + end + self.BlockRV = strength <= 2 + elseif Train.K3.Value > 0 and self.IT > 0 then + self.BPTIState = -1 + if strength == 1 then + self.ISet = 150 + 50*Train.Pneumatic.WeightLoadRatio + elseif strength == 2 then + self.ISet = 230 + 70*Train.Pneumatic.WeightLoadRatio + elseif strength == 3 then + self.ISet = 310 + 120*Train.Pneumatic.WeightLoadRatio + end + elseif Train.BPTI.Zero then + self.ISet = 0 + self.BPTIState = 0 + elseif Train.BPTI.State == 1 and drive == 0 or Train.BPTI.State == -1 and brake == 0 then + self.ISet = 0 + end + local Current = math.abs(self.I13 + self.I24)/2 + Train.BV:TriggerInput("Open",(Current > 1000) and 1 or 1-Train.SFV9.Value) + self:SolvePowerCircuits(Train,dT,iter) + + + ---------------------------------------------------------------------------- + -- Calculate current flow out of the battery + ---------------------------------------------------------------------------- + --local totalCurrent = 5*A30 + 63*A24 + 16*A44 + 5*A39 + 10*A80 + --local totalCurrent = 20 + 60*DIP +end + + +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:SolvePowerCircuits(Train,dT,iter) + self.Rs1 = Train.BPTI.RVResistance + self.Rs2 = Train.BPTI.RVResistance + + -- Calculate total resistance of engines winding + local RwAnchor = Train.Engines.Rwa*2 -- Double because each set includes two engines + local RwStator = Train.Engines.Rws*2 + -- Total resistance of the stator + shunt + self.Rstator13 = (RwStator^(-1) + self.Rs1^(-1))^(-1) + self.Rstator24 = (RwStator^(-1) + self.Rs2^(-1))^(-1) + -- Total resistance of entire motor + self.Ranchor13 = RwAnchor + self.Ranchor24 = RwAnchor + + if Train.BPTI.State < 0 then + self:SolvePT(Train) + else + self:SolvePP(Train) + end + -- Calculate current through rheostats 1, 2 + self.IR1 = self.I13 + self.IR2 = self.I24 + + -- Calculate induction properties of the motor + self.I13SH = self.I13SH or self.I13 + self.I24SH = self.I24SH or self.I24 + + -- Time constant + local T13const1 = math.max(16.00,math.min(28.0,(self.R13^2) * 2.0)) -- R * L + local T24const1 = math.max(16.00,math.min(28.0,(self.R24^2) * 2.0)) -- R * L + -- Total change + local dI13dT = T13const1 * (self.I13 - self.I13SH) * dT + local dI24dT = T24const1 * (self.I24 - self.I24SH) * dT + + -- Limit change and apply it + if dI13dT > 0 then dI13dT = math.min(self.I13 - self.I13SH,dI13dT) end + if dI13dT < 0 then dI13dT = math.max(self.I13 - self.I13SH,dI13dT) end + if dI24dT > 0 then dI24dT = math.min(self.I24 - self.I24SH,dI24dT) end + if dI24dT < 0 then dI24dT = math.max(self.I24 - self.I24SH,dI24dT) end + self.I13SH = self.I13SH + dI13dT + self.I24SH = self.I24SH + dI24dT + self.I13 = self.I13SH + self.I24 = self.I24SH + + if Train.BPTI.State > 0 then -- PS + self.I13 = self.I13 * Train.K2.Value * Train.K1.Value + self.I24 = self.I24 * Train.K2.Value * Train.K1.Value + + self.Itotal = Train.Electric.I13 + Train.Electric.I24 + else + self.I13 = self.I13 * Train.K3.Value + self.I24 = self.I24 * Train.K3.Value + + self.Itotal = Train.Electric.I13 + Train.Electric.I24 + end + -- Calculate extra information + self.Uanchor13 = self.I13 * self.Ranchor13 + self.Uanchor24 = self.I24 * self.Ranchor24 + + + + ---------------------------------------------------------------------------- + -- Calculate current through stator and shunt + self.Ustator13 = self.I13 * self.Rstator13 + self.Ustator24 = self.I24 * self.Rstator24 + + self.Ishunt13 = self.Ustator13 / self.Rs1 + self.Istator13 = self.Ustator13 / RwStator + self.Ishunt24 = self.Ustator24 / self.Rs2 + self.Istator24 = self.Ustator24 / RwStator + + if Train.BPTI.State < 0 then + local I1,I2 = self.Ishunt13,self.Ishunt24 + self.Ishunt13 = -I2 + self.Ishunt24 = -I1 + + I1,I2 = self.Istator13,self.Istator24 + self.Istator13 = -I2 + self.Istator24 = -I1 + end + + -- Calculate power and heating + local K = 12.0*1e-5 + local H = (10.00+(15.00*Train.Engines.Speed/80.0))*1e-3 + self.P1 = (self.IR1^2)*self.R1 + self.P2 = (self.IR2^2)*self.R2 + self.T1 = (self.T1 + self.P1*K*dT - (self.T1-25)*H*dT) + self.T2 = (self.T2 + self.P2*K*dT - (self.T2-25)*H*dT) + self.Overheat1 = math.min(1-1e-12, + self.Overheat1 + math.max(0,(math.max(0,self.T1-750.0)/400.0)^2)*dT ) + self.Overheat2 = math.min(1-1e-12, + self.Overheat2 + math.max(0,(math.max(0,self.T2-750.0)/400.0)^2)*dT ) + + -- Energy consumption + self.ElectricEnergyUsed = self.ElectricEnergyUsed + math.max(0,self.EnergyChange)*dT + self.ElectricEnergyDissipated = self.ElectricEnergyDissipated + math.max(0,-self.EnergyChange)*dT + --print(self.EnergyChange) +end + +function TRAIN_SYSTEM:SolvePP(Train,inTransition) + + -- Calculate total resistance of each branch + local R1 = self.Ranchor13 + self.Rstator13-- + self.ExtraResistanceK5 + local R2 = self.Ranchor13 + self.Rstator13-- + self.ExtraResistanceK5 + local CircuitClosed = (self.Power750V*Train.K1.Value > 0) and 1 or 0 + -- Main circuit parameters + local V = self.Power750V*Train.K1.Value*Train.BPTI.RNState + local E1 = Train.Engines.E13 + local E2 = Train.Engines.E24 + + -- Calculate current through engines 13, 24 + self.I13 = math.max(0,((V - E1)/R1)*CircuitClosed) + self.I24 = math.max(0,((V - E2)/R2)*CircuitClosed) + + -- Total resistance (for induction RL circuit) + self.R13 = R1 + self.R24 = R2 + + -- Calculate everything else + self.U13 = self.I13*R1 + self.U24 = self.I24*R2 + self.Utotal = (self.U13 + self.U24)/2 + self.Itotal = Train.Electric.I13 + Train.Electric.I24 + -- Energy consumption + self.EnergyChange = math.abs((self.I13^2)*R1) + math.abs((self.I24^2)*R2) +end + +function TRAIN_SYSTEM:SolvePT(Train,inTransition) + -- Winding resistances + local R1 = self.Ranchor13 + self.Rstator13-- + self.ExtraResistanceK5 + local R2 = self.Ranchor24 + self.Rstator24-- + self.ExtraResistanceK5 + -- Total resistance of the entire braking rheostat + --local R3 = 1.730*(1-0.860*Train.BPTI.RNState) + local R3 = --[[ (1.730+0.4)*--]] 2.8*(1-0.95*Train.BPTI.RNState)--0.84 + + -- Main circuit parameters + local V = self.Power750V*Train.K1.Value + local E1 = Train.Engines.E13 + local E2 = Train.Engines.E24 + + -- Calculate current through engines 13, 24 + self.I13 = -((E1*R2 + E1*R3 - E2*R3 - R2*V)/(R1*R2 + R1*R3 + R2*R3)) + self.I24 = -((E2*R1 - E1*R3 + E2*R3 - R1*V)/(R1*R2 + R1*R3 + R2*R3)) + + -- Total resistance (for induction RL circuit) + self.R13 = R3+((R1^(-1) + R2^(-1))^(-1)) + self.R24 = R3+((R1^(-1) + R2^(-1))^(-1)) + + -- Calculate everything else + self.U13 = self.I13*R1 + self.U24 = self.I24*R2 + self.Utotal = (self.U13 + self.U24)/2 + self.Itotal = Train.Electric.I13 + Train.Electric.I24 + + -- Energy consumption + self.EnergyChange = -math.abs(((0.5*self.Itotal)^2)*self.R13) +end diff --git a/lua/metrostroi/systems/sys_81_720_horn.lua b/lua/metrostroi/systems/sys_81_720_horn.lua new file mode 100644 index 0000000..2340301 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_720_horn.lua @@ -0,0 +1,53 @@ +-------------------------------------------------------------------------------- +-- 81-720 train horn +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_720_Horn") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.Active = false +end + +function TRAIN_SYSTEM:Outputs() --"21", + return { "Active" } +end + +function TRAIN_SYSTEM:Inputs() + return { "Engage"} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Engage" then + self.Active = value > 0.5 + end +end + +function TRAIN_SYSTEM:Think() + self.Train:SetNW2Bool("HornState",self.Active or self.Train.Electric.V1 > 0) +end + +function TRAIN_SYSTEM:ClientThink(dT) + local active = self.Train:GetNW2Bool("HornState",false) + self.Active = self.Active + + -- Calculate pitch + local absolutePitch = 1 - math.exp(-10*self.Train:GetPackedRatio("TL")) + local absoluteVolume = 1 - math.exp(-4*self.Train:GetPackedRatio("TL")) + local pitch = 1 + -- Play horn sound + self.Train:SetSoundState("horn",self.Active and absoluteVolume or 0,absolutePitch*pitch,nil,1.09) + --[[ + if (self.Active ~= active) and (not active) then + if absolutePitch > 0.2 then + self.Train:PlayOnce(self.Train:GetNW2Bool("HornType",false) and "horn3_end" or "horn3_end","cabin",1.09,101.5*absolutePitch*pitch) --0.85 + end + end]] + --[[ + if (self.Active ~= active) and (active) then + self.Train.Transient = -5.0 + end]] + self.Active = active +end diff --git a/lua/metrostroi/systems/sys_81_720_igla_cbki2.lua b/lua/metrostroi/systems/sys_81_720_igla_cbki2.lua new file mode 100644 index 0000000..20043f3 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_720_igla_cbki2.lua @@ -0,0 +1,426 @@ +-------------------------------------------------------------------------------- +-- ASOTP "IGLA" black indicator unit for 81-720 +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_720_IGLA_CBKI2") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.State = -2 + self.Log = {} + self.States = {} + self.Messages = {} + self.MessagesCount = 0 + self.Train:LoadSystem("IGLA1U","Relay","Switch",{bass = true}) + self.Train:LoadSystem("IGLA1","Relay","Switch",{bass = true}) + self.Train:LoadSystem("IGLA1D","Relay","Switch",{bass = true}) + self.Train:LoadSystem("IGLA2U","Relay","Switch",{bass = true}) + self.Train:LoadSystem("IGLA2","Relay","Switch",{bass = true}) + self.Train:LoadSystem("IGLA2D","Relay","Switch",{bass = true}) + + + self.TriggerNames = { + "IGLA1U", + "IGLA1", + "IGLA1D", + "IGLA2U", + "IGLA2", + "IGLA2D", + } + self.Triggers = {} +end +if TURBOSTROI then return end +function TRAIN_SYSTEM:Inputs() + return { "" } +end +if CLIENT then + local function FormatEnd1(num) + if num == 1 then return " " + elseif 1 < num and num < 5 then return "а" end + return "ов" + end + local function FormatEnd2(num) + if num == 1 then return "ка" + elseif 1 < num and num < 5 then return "ки" end + return "ок" + end + surface.CreateFont("Metrostroi_ILGAo", { + font = "Liquid Crystal Display", + size = 40, + weight = 800, + blursize = false, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + scanlines = false, + }) + function TRAIN_SYSTEM:PrintText(x,text,inverse) + local str = {utf8.codepoint(text,1,-1)} + for i=1,#str do + local char = utf8.char(str[i]) + if inverse then + draw.SimpleText(string.char(0x7f),"Metrostroi_ILGAo",(x+i)*30,42,Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(char,"Metrostroi_ILGAo",(x+i)*30,42,Color(140,190,0,150),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText(char,"Metrostroi_ILGAo",(x+i)*30,42,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + end + function TRAIN_SYSTEM:ClientThink() + if not self.Train:ShouldDrawPanel("IGLA") then return end + --RunConsoleCommand("say","президент!!!") + if not self.DrawTimer then + render.PushRenderTarget(self.Train.IGLA,0,0,512, 128) + render.Clear(0, 0, 0, 0) + render.PopRenderTarget() + if self.DrawTimer and CurTime()-self.DrawTimer < 0.1 then return end + end + self.DrawTimer = CurTime() + render.PushRenderTarget(self.Train.IGLA,0,0,512, 128) + --render.Clear(0, 0, 0, 0) + cam.Start2D() + self:IGLA(self.Train) + cam.End2D() + render.PopRenderTarget() + end + + local messages = { + START = "пит цбки вкл", + CONN = "подкл", + DISCONN = "пот ÑвÑз", + SCHEME = "неÑб ÑÑ…", + BV = "Ñраб бв", + DOORS = "откр дв", + BBE = "выкл ббÑ", + PARKING = "вкл ÑÑ‚ Ñ‚", + BRAKES = "вкл пн Ñ‚", + UAVA = "Ñраб СК", + UAVAK = "кон уава", + EPK = "Ñраб Ñпв", + ARS = "прев арÑ", + RU = "вкл рвр", + } + function TRAIN_SYSTEM:IGLA() + local Train = self.Train + local State = self.Train:GetNW2Int("IGLA:State",0) + if State > -2 then + surface.SetDrawColor(81,223,0,self.Warm and 100 or 255) + surface.DrawRect(0,0,512,80) + self.Warm = true + else + surface.SetDrawColor(81*0.2,223*0.2,0,230) + surface.DrawRect(0,0,512,80) + self.Warm = false + end + + if State == 0 then + self:PrintText(0,"Chip test Ok Ok") + elseif State == 1 then + self:PrintText(0,"ÐСОТП-\"ИГЛÐ\" V02") + elseif State == 2 then + local State2 = Train:GetNW2Int("IGLA:State2",0) + if State ~= self.OldState then + self.Timer = RealTime() + self.OldState = State + end + if State2 == 0 then + --self:PrintText(0,"") + self:PrintText(0,Format("[%03d]",Train:GetNW2Int("IGLA:Messages"))) + self:PrintText(7,"ПЦБК-"..Train:GetNW2Int("IGLA:Count",0)) + elseif State2 == 1 then + local w = Train:GetNW2Int("IGLA:WagNumber") + local m = Train:GetNW2String("IGLA:LogID") + local s = Train:GetNW2Int("IGLA:Selected") + if s ~= self.OldSel then + self.Timer = RealTime()-0.01 + self.OldSel = s + end + if messages[m] then m = messages[m] end + local timer = math.ceil((RealTime()-self.Timer)%3) + if w > 0 then self:PrintText(0,Format("[%05d]",w)) else self:PrintText(0,"[]") end + if timer == 1 then + if w > 0 then + self:PrintText(7,m) + else + self:PrintText(2,m) + end + elseif timer == 2 then + local d = Train:GetNW2Int("IGLA:LogDate") + self:PrintText(w > 0 and 7 or 2,os.date("!%H:%M:%S",d)) + else + local d = Train:GetNW2Int("IGLA:LogDate") + self:PrintText(w > 0 and 7 or 2,os.date("!%d-%m-%y",d)) + end + if Train:GetNW2Int("IGLA:Arrow") == -1 then + self:PrintText(15,"<") + elseif Train:GetNW2Int("IGLA:Arrow") == 1 then + self:PrintText(15,">") + else + self:PrintText(15,"<") + self:PrintText(15,">") + end + elseif State2 == 2 then + local w = Train:GetNW2Int("IGLA:WagNumber") + local m = Train:GetNW2String("IGLA:ErrorID") + local s = Train:GetNW2Int("IGLA:Selected") + if s ~= self.OldSel then + self.Timer = RealTime()-0.01 + self.OldSel = s + end + if messages[m] then m = messages[m] end + local timer = math.ceil((RealTime()-self.Timer)%3) + if w > 0 then self:PrintText(0,Format("[%05d]",w)) else self:PrintText(0,"[]") end + if timer == 1 then + if w > 0 then + self:PrintText(7,m) + else + self:PrintText(2,m) + end + elseif timer == 2 then + local d = Train:GetNW2Int("IGLA:LogDate") + self:PrintText(w > 0 and 7 or 2,os.date("!%H:%M:%S",d)) + else + local d = Train:GetNW2Int("IGLA:LogDate") + self:PrintText(w > 0 and 7 or 2,os.date("!%d-%m-%y",d)) + end + if Train:GetNW2Int("IGLA:Arrow") == -1 then + self:PrintText(15,"<") + elseif Train:GetNW2Int("IGLA:Arrow") == 1 then + self:PrintText(15,">") + else + self:PrintText(15,"<") + self:PrintText(15,">") + end + end + end + end +else + function TRAIN_SYSTEM:CANReceive(source,sourceid,target,targetid,textdata,numdata) + if self.State < 2 then return end + if not self.States[sourceid] then + self.States[sourceid] = {} + table.insert(self.Log,{"CONN",sourceid,Metrostroi.GetSyncTime()}) + end + self.States[sourceid][textdata] = numdata + end + function TRAIN_SYSTEM:CANWrite(name,value) + self.Train:CANWrite("IGLA_CBKI",self.Train:GetWagonNumber(),"IGLA_PCBK",nil,name,value) + end + function TRAIN_SYSTEM:Trigger(name,value) + if self.State == 2 then + if self.State2 == 0 then + if name == "IGLA2D" and value and #self.Log > 0 then + self.State2 = 1 + self.StandbyTimer = CurTime() + self.Selected = #self.Log + end + if name == "IGLA1D" and value and #self.Messages > 0 then + self.State2 = 2 + self.StandbyTimer = CurTime() + self.Selected = #self.Messages + end + elseif self.State2 == 1 then + self.StandbyTimer = CurTime() + if name == "IGLA2D" and value and self.Selected > 1 then + self.Selected = self.Selected - 1 + end + if name == "IGLA2" and value then + self.State2 = 0 + end + if name == "IGLA2U" and value and self.Selected < #self.Log then + self.Selected = self.Selected + 1 + end + elseif self.State2 == 2 then + self.StandbyTimer = CurTime() + if name == "IGLA1D" and value and self.Selected > 1 then + self.Selected = self.Selected - 1 + end + if name == "IGLA1" and value then + self.State2 = 0 + end + if name == "IGLA1U" and value and self.Selected < #self.Messages then + self.Selected = self.Selected + 1 + end + end + end + end + local Logging = { + SCHEME = false, + BV = true, + DOORS = true, + BBE = true, + PARKING = true, + BRAKES = true, + UAVA = true, + ARS = true, + RU = true, + } + function TRAIN_SYSTEM:CError(WagID,ErrID,status) + local ID = WagID..ErrID + if not self.Messages[ID] and status then + self.Messages[ID] = table.insert(self.Messages,{ErrID,WagID,Metrostroi.GetSyncTime(),ID}) + if Logging[ErrID] then + table.insert(self.Log,self.Messages[self.Messages[ID]]) + end + --print(Format("Message with ErrID '%s' have ID:%d",ID,self.Messages[ID])) + elseif self.Messages[ID] and not status then + --print(Format("Removed message with ErrID '%s' have ID:%d",ID,self.Messages[ID])) + table.remove(self.Messages,self.Messages[ID]) + self.Messages[ID] = nil + for k,v in ipairs(self.Messages) do + self.Messages[v[4]] = k + end + end + end + function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local power = Train.Panel.CBKIPower > 0 + if power and self.State ~= -2 then + for k,v in pairs(self.TriggerNames) do + if Train[v] and (Train[v].Value > 0.5) ~= self.Triggers[v] then + self:Trigger(v,Train[v].Value > 0.5) + self.Triggers[v] = Train[v].Value > 0.5 + end + end + end + if not power or self.Reset then + self.Reset = false + if self.State ~= -2 then + self.State = -2 + self.Timer = nil + self.Fire = false + self.Error = false + self.PCBKCount = 0 + self.States = {} + self.Messages = {} + end + end + if self.State == -2 and power then + self.State = -1 + self.Timer = CurTime()+math.random()*0.3 + self.StartError = false + end + if self.State == -1 and CurTime()-self.Timer > 0.3 then + self.State = 0 + Train:PlayOnce("igla_start1","cabin") + self.Timer = CurTime()+math.random()*0.6 + end + if self.State == 0 and CurTime()-self.Timer > 3.4 then + table.insert(self.Log,{"START",sourceid,Metrostroi.GetSyncTime()}) + self.State = 1 + Train:PlayOnce("igla_start2","cabin") + self.Timer = CurTime()+math.random()*0.4 + end + if self.State == 1 then + self.Fire = true + self.Error = true + if CurTime()-self.Timer > 4 then + self.State = 2 + self.State2 = 0 + self.StandbyTimer = CurTime() + self.ShowTimeTimer = nil + self.ShowTime = false + + self.PCBKTimer = nil + end + elseif self.State == 2 then + local Standby = CurTime()-self.StandbyTimer > 10 + if self.State2 > 0 and Standby then self.State2 = 0 end + if self.ShowTimeTimer and self.ShowTimeTimer ~= true and CurTime()-self.ShowTimeTimer > 1.5 then + self.ShowTime = not self.ShowTime + self.ShowTimeTimer = true + end + if not self.PCBKTimer or CurTime()-self.PCBKTimer > 1.4 then + self:CANWrite("Update",1) + self.PCBKTimer = CurTime()+math.random()*0.4 + end + + local count = 0 + for k,v in pairs(self.States) do + local timer = CurTime()-v.Timer + if timer <= 5 then + for id in pairs(Logging) do self:CError(k,id,v[id]) end + count = count + 1 + else + for k1,v1 in ipairs(self.Messages) do + if v1[2] == k then + --print(Format("Removed message with ErrID '%s' have ID:%d, PCBK discon",v1[4],self.Messages[v1[4]])) + self.Messages[v1[4]] = nil + table.remove(self.Messages,k1) + end + end + table.insert(self.Log,{"DISCONN",k,Metrostroi.GetSyncTime()}) + self.States[k] = nil + end + end + self.PCBKCount = count + if self.MessagesCount ~= #self.Messages then + local mess = #self.Messages + if self.MessagesCount < mess then + Train:PlayOnce("igla_start2","cabin",nil,1) + self.StandbyTimer = CurTime() + if self.State2 ~= 2 then + self.State2 = 2 + self.Selected = mess + end + if self.Selected >= self.MessagesCount then + self.Selected = mess + end + end + if self.State2 == 2 and self.Selected > mess then self.Selected = mess end + if self.State2 == 2 and mess == 0 then + self.State2 = 0 + end + self.MessagesCount = mess + end + + if self.State2 == 0 then + self.Fire = false + self.Error = self.MessagesCount > 0 + elseif self.State2 == 1 then + local log = self.Log[self.Selected] + Train:SetNW2Int("IGLA:Selected",self.Selected) + Train:SetNW2String("IGLA:LogID",log[1]) + Train:SetNW2Int("IGLA:WagNumber",log[2]) + Train:SetNW2Int("IGLA:LogDate",log[3]) + for i=4,#log do + Train:SetNW2Int("IGLA:Log"..i,log[i]) + end + if CurTime()-self.StandbyTimer > 10 then self.State2 = 0 end + Train:SetNW2Int("IGLA:Arrow",self.Selected == 1 and 1 or self.Selected == #self.Log and -1 or 0) + self.Error = false + elseif self.State2 == 2 then + local err = self.Messages[self.Selected] + Train:SetNW2Int("IGLA:Selected",self.Selected) + Train:SetNW2String("IGLA:ErrorID",err[1]) + Train:SetNW2Int("IGLA:WagNumber",err[2]) + Train:SetNW2Int("IGLA:Arrow",self.Selected == 1 and 1 or self.Selected == #self.Messages and -1 or 0) + + if CurTime()-self.StandbyTimer > 10 then self.State2 = 0 end + self.Fire = false + end + end + self.Error = self.MessagesCount > 0 + Train:SetNW2Int("IGLA:Count",self.PCBKCount) + Train:SetNW2Int("IGLA:State2",self.State2) + Train:SetNW2Bool("IGLA:Messages",#self.Log) + Train:SetNW2Bool("IGLASR",self.State > -2) + Train:SetNW2Bool("IGLARX",self.State > -2 and self.PCBKCount == 0) + Train:SetNW2Bool("IGLAErr",self.State > 0 and self.Error or self.State == 1) + Train:SetNW2Bool("IGLAOSP", self.State == 1) + Train:SetNW2Bool("IGLAPI", self.State == 1) + Train:SetNW2Bool("IGLAOff", self.State == 1) + + + Train:SetNW2Int("IGLA:State",self.State) + end +end diff --git a/lua/metrostroi/systems/sys_81_720_igla_pcbk.lua b/lua/metrostroi/systems/sys_81_720_igla_pcbk.lua new file mode 100644 index 0000000..123af41 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_720_igla_pcbk.lua @@ -0,0 +1,101 @@ +-------------------------------------------------------------------------------- +-- ASOTP "IGLA" black wagon controller unit for 81-720 +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_720_IGLA_PCBK") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.States = {} + self.State = -1 + self.Timer = 0 + self.Time = 0 + +end +if TURBOSTROI then return end +function TRAIN_SYSTEM:Inputs() + return { "" } +end +function TRAIN_SYSTEM:CANReceive(source,sourceid,target,targetid,textdata,numdata) + if textdata== "Update" then + self.Update = true + end +end +function TRAIN_SYSTEM:CANWrite(name,value) + self.Train:CANWrite("IGLA_PCBK",self.Train:GetWagonNumber(),"IGLA_CBKI",nil,name,value) +end +function TRAIN_SYSTEM:CState(name,value) + if self.Update or self.States[name] ~= value then + self.States[name] = value + self.Train:CANWrite("IGLA_PCBK",self.Train:GetWagonNumber(),"IGLA_CBKI",nil,name,value) + end +end +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local power = Train.Panel.PCBKPower > 0 + if not power or self.Reset then + self.Reset = false + if self.State ~= -1 then + self.State = -1 + self.Timer = nil + end + end + if self.State == -1 and power then + self.State = 0 + self.Timer = CurTime()+math.random()*0.3 + end + if self.State == 0 and CurTime()-self.Timer > 1.2 then + self.State = 1 + self.Time = CurTime() + self.EngageTimer = nil + end + if self.State == 1 and (CurTime() - self.Time) > 1.4 then + if self.Update then + self:CANWrite("Timer",CurTime()) + end + self.Time= CurTime()+math.random()*0.4 + local schengaged = Train.BUV.Brake > 0 or Train.BUV.Drive > 0 + local schengagedD = Train.BUV.Drive > 0 + local schengagedB = Train.BUV.Brake > 0 + local BV = Train.BV.Value < 0.5 + local DOORS = false + local BBE = Train.BUV.BBE == 0 + local PARKING = false + local BRAKES = false + local SCHEME = false + if schengaged then + for i=1,4 do + DOORS = Train.Pneumatic.LeftDoorState[i] > 0 or Train.Pneumatic.RightDoorState[i] > 0 + if DOORS then break end + end + --PARKING = Train.ParkingBrake.Value > 0.5 and not schengagedB + BRAKES = Train.Pneumatic.BrakeCylinderPressure > 0.5 and not schengagedB + SCHEME = Train.K2.Value+Train.K3.Value == 0 + if BBE and schengagedD and not self.BBETimer then self.BBETimer = CurTime() end + else + if (not BBE or not self.States.BBE) and self.BBETimer then self.BBETimer = nil end + end + if schengaged and SCHEME then + if not self.EngageTimer then self.EngageTimer = CurTime() end + if BRAKES and not self.BrakesTimer then self.BrakesTimer = CurTime() end + if not BRAKES and self.BrakesTimer then self.BrakesTimer = nil end + else + if self.EngageTimer then self.EngageTimer = nil end + if self.BrakesTimer then self.BrakesTimer = nil end + end + --[[ self:CState("SCHEME",self.EngageTimer and CurTime()-self.EngageTimer > 3) + self:CState("BV",BV) + self:CState("DOORS",DOORS) + self:CState("BBE",self.BBETimer and CurTime()-self.BBETimer > 7) + self:CState("PARKING",PARKING) + self:CState("BRAKES",self.BrakesTimer and CurTime()-self.BrakesTimer > 3) + self:CState("UAVA",Train.Pneumatic.EmergencyValve) + if Train.IGLA_CBKI then + self:CState("ARS",Train.BARS.Active > 0 and Train.BUKP.ControllerState > 0 and math.max(20,Train.BARS.SpeedLimit)+9 < Train.ALSCoil.Speed) + self:CState("RU",Train.RV["KRR15-16"] > 0) + end--]] + self.Update = false + end +end diff --git a/lua/metrostroi/systems/sys_81_720_panel.lua b/lua/metrostroi/systems/sys_81_720_panel.lua new file mode 100644 index 0000000..8d614e1 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_720_panel.lua @@ -0,0 +1,218 @@ +-------------------------------------------------------------------------------- +-- 81-720 controller panel +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_720_Panel") +TRAIN_SYSTEM.DontAccelerateSimulation = false + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("Stand","Relay","Switch",{bass=true}) + self.Train:LoadSystem("Ticker","Relay","Switch",{bass=true}) + self.Train:LoadSystem("KAH","Relay","Switch",{bass=true}) + self.Train:LoadSystem("KAHk","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("ALS","Relay","Switch",{bass=true}) + self.Train:LoadSystem("ALSk","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("FDepot","Relay","Switch",{bass=true}) + self.Train:LoadSystem("PassScheme","Relay","Switch",{bass=true}) + self.Train:LoadSystem("EmergencyCompressor","Relay","Switch",{bass=true})-- + self.Train:LoadSystem("EnableBV","Relay","Switch",{bass=true}) + self.Train:LoadSystem("EnableBVEmer","Relay","Switch",{bass=true}) + self.Train:LoadSystem("DisableBV","Relay","Switch",{bass=true}) + self.Train:LoadSystem("Ring","Relay","Switch",{bass=true}) + self.Train:LoadSystem("R_Program2","Relay","Switch",{bass=true}) + self.Train:LoadSystem("R_Announcer","Relay","Switch",{bass=true}) + self.Train:LoadSystem("R_Line","Relay","Switch",{bass=true}) + self.Train:LoadSystem("R_Emer","Relay","Switch",{bass=true}) + self.Train:LoadSystem("R_Program1","Relay","Switch",{bass=true}) + + self.Train:LoadSystem("EmergencyControls","Relay","Switch",{bass=true}) + self.Train:LoadSystem("Wiper","Relay","Switch",{bass=true}) + + + self.Train:LoadSystem("DoorSelectL","Relay","Switch",{bass=true}) + self.Train:LoadSystem("DoorSelectR","Relay","Switch",{bass=true}) + self.Train:LoadSystem("DoorBlock","Relay","Switch",{bass=true}) + self.Train:LoadSystem("DoorLeft","Relay","Switch",{bass=true}) + self.Train:LoadSystem("AccelRate","Relay","Switch",{bass=true}) + self.Train:LoadSystem("EmerBrakeAdd","Relay","Switch",{bass=true}) + self.Train:LoadSystem("EmerBrakeRelease","Relay","Switch",{bass=true}) + self.Train:LoadSystem("EmerBrake","Relay","Switch",{bass=true}) + self.Train:LoadSystem("EmergencyBrake","Relay","Switch",{bass=true}) + self.Train:LoadSystem("DoorRight","Relay","Switch",{bass=true}) + self.Train:LoadSystem("HornB","Relay","Switch",{bass=true}) + + self.Train:LoadSystem("DoorClose","Relay","Switch",{bass=true}) + self.Train:LoadSystem("AttentionMessage","Relay","Switch",{bass=true}) + self.Train:LoadSystem("Attention","Relay","Switch",{bass=true}) + self.Train:LoadSystem("AttentionBrake","Relay","Switch",{bass=true}) + + self.Train:LoadSystem("VentCondMode","Relay","Switch",{maxvalue=3,defaultvalue=2,bass=true}) + self.Train:LoadSystem("VentStrengthMode","Relay","Switch",{maxvalue=3,defaultvalue=2,bass=true}) + self.Train:LoadSystem("VentHeatMode","Relay","Switch",{maxvalue=1,defaultvalue=0,bass=true}) + + self.Train:LoadSystem("EmerX1","Relay","Switch",{bass=true}) + self.Train:LoadSystem("EmerX2","Relay","Switch",{bass=true}) + self.Train:LoadSystem("EmerCloseDoors","Relay","Switch",{bass=true}) + self.Train:LoadSystem("EmergencyDoors","Relay","Switch",{bass=true}) + + self.Train:LoadSystem("SF1","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF2","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF3","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF4","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF5","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF6","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF7","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF8","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF9","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF10","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF11","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF12","Relay","Switch",{normally_closed = true,bass=true}) + + self.Train:LoadSystem("SF13","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF14","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF15","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF16","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF17","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF18","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF19","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF20","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF21","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF22","Relay","Switch",{normally_closed = true,bass=true}) + + + self.Train:LoadSystem("SFV1","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV2","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV3","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV4","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV5","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV6","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV7","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV8","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV9","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV10","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV11","Relay","Switch",{normally_closed = true,bass=true}) + + self.Train:LoadSystem("SFV12","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV13","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV14","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV15","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV16","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV17","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV18","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV19","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV20","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV21","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV22","Relay","Switch",{normally_closed = true,bass=true}) + + self.Train:LoadSystem("SFV23","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV24","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV25","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV26","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV27","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV28","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV29","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV30","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV31","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV32","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV33","Relay","Switch",{normally_closed = true,bass=true}) + + self.Train:LoadSystem("Pant1","Relay","Switch",{bass=true}) + self.Train:LoadSystem("Pant2","Relay","Switch",{bass=true}) + self.Train:LoadSystem("Vent1","Relay","Switch",{bass=true}) + self.Train:LoadSystem("Vent2","Relay","Switch",{bass=true}) + self.Train:LoadSystem("Vent","Relay","Switch",{bass=true}) + self.Train:LoadSystem("PassLight","Relay","Switch",{bass=true}) + self.Train:LoadSystem("CabLight","Relay","Switch",{bass=true}) + self.Train:LoadSystem("Headlights1","Relay","Switch",{bass=true}) + self.Train:LoadSystem("Headlights2","Relay","Switch",{bass=true}) + self.Train:LoadSystem("ParkingBrake","Relay","Switch",{bass=true}) + self.Train:LoadSystem("TorecDoors","Relay","Switch",{bass=true}) + self.Train:LoadSystem("BBER","Relay","Switch",{bass=true}) + self.Train:LoadSystem("BBE","Relay","Switch",{bass=true}) + self.Train:LoadSystem("Compressor","Relay","Switch",{bass=true}) + self.Train:LoadSystem("CabLightStrength","Relay","Switch",{bass=true}) + self.Train:LoadSystem("AppLights1","Relay","Switch",{bass=true}) + self.Train:LoadSystem("AppLights2","Relay","Switch",{bass=true}) + + self.Train:LoadSystem("BARSBlock","Relay","Switch",{maxvalue=3,defaultvalue=0,bass=true}) + self.Train:LoadSystem("Battery","Relay","Switch",{bass=true}) + + self.Train:LoadSystem("ALSFreq","Relay","Switch",{bass=true}) + + self.Train:LoadSystem("PB","Relay","Switch",{bass=true}) + self.Controller = 0 + self.TargetController = 0 + + self.Headlights1 = 0 + self.Headlights2 = 0 + self.RedLights = 0 + self.DoorLeft = 0 + self.DoorRight = 0 + self.EmerBrakeWork = 0 + self.Ticker = 0 + self.KAH = 0 + self.ALS = 0 + self.PassScheme = 0 + self.R_Announcer = 0 + self.R_Line = 0 + self.AccelRate = 0 + self.DoorClose = 0 + self.DoorBlock = 0 + self.EqLights = 0 + self.CabLights = 0 + self.AnnouncerPlaying = 0 + + self.TickerPower = 0 + self.PassSchemePower = 0 + self.TickerWork = 0 + self.PassSchemeWork = 0 + self.PassSchemeControl = 0 + + self.CBKIPower = 0 + self.PCBKPower = 0 +end + +function TRAIN_SYSTEM:Inputs() + return { "KVUp", "KVDown", "KV1", "KV2", "KV3", "KV4", "KV5", "KV6", "KV7", "KV8", "ControllerUnlock"} +end + +function TRAIN_SYSTEM:Outputs() + return { "Controller","Headlights1","Headlights2","RedLights","DoorLeft","DoorRight","EmerBrakeWork","Ticker","KAH","ALS","PassScheme","R_Announcer","R_Line","AccelRate","DoorClose","DoorBlock","EqLights","CabLights","AnnouncerPlaying","TickerPower","PassSchemePower","TickerWork","PassSchemeWork","PassSchemeControl","CBKIPower","PCBKPower", } +end +--if not TURBOSTROI then return end +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "KVUp" and value > 0 and self.Controller < 4 then + if self.TargetController+1 == 0 and not self.Locker then return end + self.TargetController = self.TargetController + 1 + end + if name == "KVDown" and value > 0 and self.TargetController > -3 then + self.TargetController = self.TargetController - 1 + end + if name == "KV4" and value > 0 then self.TargetController = 4 end + if name == "KV3" and value > 0 then self.TargetController = 3 end + if name == "KV2" and value > 0 then self.TargetController = 2 end + if name == "KV1" and value > 0 then self.TargetController = 1 end + if name == "KV5" and value > 0 then self.TargetController = 0 end + if name == "KV6" and value > 0 then self.TargetController = -1 end + if name == "KV7" and value > 0 then self.TargetController = -2 end + if name == "KV8" and value > 0 then self.TargetController = -3 end + if name == "ControllerUnlock" then self.Locker = value > 0.5 end + self.ControllerTimer = CurTime()-1 +end +function TRAIN_SYSTEM:Think() + if self.ControllerTimer and CurTime() - self.ControllerTimer > 0.03 and self.Controller ~= self.TargetController then + local previousPosition = self.Controller + self.ControllerTimer = CurTime() + if self.TargetController > self.Controller then + self.Controller = self.Controller + 1 + else + self.Controller = self.Controller - 1 + end + self.Train:PlayOnce("KV_"..previousPosition.."_"..self.Controller, "cabin",0.5) + end + if self.Controller == self.TargetController then + self.ControllerTimer = nil + end +end diff --git a/lua/metrostroi/systems/sys_81_720_passscheme.lua b/lua/metrostroi/systems/sys_81_720_passscheme.lua new file mode 100644 index 0000000..577b4d5 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_720_passscheme.lua @@ -0,0 +1,41 @@ +-------------------------------------------------------------------------------- +-- 81-720 eletric pass schemes +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_720_PassScheme") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() +end + +if TURBOSTROI then return end + +function TRAIN_SYSTEM:Initialize() + self.PassSchemeCurr = -1 + self.PassSchemeNext = 0 + self.PassSchemePath = false +end +function TRAIN_SYSTEM:CANReceive(source,sourceid,target,targetid,textdata,numdata) + if textdata == "Current" then self.Curr = numdata end + if textdata == "Arrival" then self.Next = numdata end + if textdata == "Path" then self.Path = numdata end +end +function TRAIN_SYSTEM:Think() + local Train = self.Train + if Train.Panel.PassSchemeWork>0 then + self.PassSchemeCurr = self.Curr or -1 + self.PassSchemeNext = self.Next or 0 + self.PassSchemePath = self.Path--not Train.BUV.RevOrientation and self.Path or Train.BUV.RevOrientation and not self.Path + --if self.RevOrientation then self.PassSchemePath = not self.PassSchemePath end + elseif Train.Panel.PassSchemePower>0 then + self.PassSchemeCurr = -1 + self.PassSchemeNext = 0 + self.PassSchemePath = false--Train.BUV.RevOrientation + else + self.PassSchemeCurr = 0 + self.PassSchemeNext = 0 + self.PassSchemePath = false + end +end diff --git a/lua/metrostroi/systems/sys_81_720_pneumatic.lua b/lua/metrostroi/systems/sys_81_720_pneumatic.lua new file mode 100644 index 0000000..9ba8987 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_720_pneumatic.lua @@ -0,0 +1,562 @@ +-------------------------------------------------------------------------------- +-- 81-720 pneumatic system +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_720_Pneumatic") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + -- (013) + -- 1 Accelerated charge + -- 2 Normal charge (brake release) + -- 3 Closed + -- 4 Service application + -- 5 Emergency application + self.DriverValvePosition = 6 + self.RealDriverValvePosition = self.DriverValvePosition + + -- Pressure in parking brake + self.ParkingBrakePressure = 0 + self.AirDistributorPressure = 0 + -- Pressure in reservoir + self.ReservoirPressure = 0.0 -- atm + -- Pressure in trains feed line + self.TrainLinePressure = 8.0 -- atm + -- Pressure in trains brake line + self.BrakeLinePressure = 0.0 -- atm + -- Pressure in brake cylinder + self.BrakeCylinderPressure = 0.0 -- atm + -- Pressure in the door line + self.DoorLinePressure = 0.0 -- atm + + -- Блокировка дверей + self.Train:LoadSystem("BD","Relay","") + + -- РегулÑтор Ð´Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (ÐК) + self.Train:LoadSystem("AK","Relay","AK-11B") + + self.Train:LoadSystem("UAVA","Relay","Switch") + + self.Train:LoadSystem("K31","Relay","Switch", { normally_closed = true}) --KTO + self.Train:LoadSystem("K29","Relay","Switch") --КРМШ + + self.V2 = 0 --Включение РУ + self.V6 = false --Срыв от ÐРС(РВТБ) + + self.K1 = false + self.K2 = false + self.SD2 = 0 + self.SD3 = false + -- Isolation valves + self.Train:LoadSystem("FrontBrakeLineIsolation","Relay","Switch", { normally_closed = true, bass = true}) + self.Train:LoadSystem("RearBrakeLineIsolation","Relay","Switch", { normally_closed = true, bass = true}) + self.Train:LoadSystem("FrontTrainLineIsolation","Relay","Switch", { normally_closed = true, bass = true}) + self.Train:LoadSystem("RearTrainLineIsolation","Relay","Switch", { normally_closed = true, bass = true}) + + -- Brake cylinder atmospheric valve open + self.BrakeCylinderValve = 0 + + -- Overpressure protection valve open + self.TrainLineOverpressureValve = false + + -- Compressor simulation + self.Compressor = 0 --Simulate overheat with TRK FIXME + + -- Disconnect valve status + self.DriverValveDisconnectPrevious = 0 + self.EPKPrevious = 0 + + -- Doors state + --[[self.Train:LoadSystem("LeftDoor1","Relay",{ open_time = 0.5, close_time = 0.5 }) + self.Train:LoadSystem("LeftDoor2","Relay",{ open_time = 0.5, close_time = 0.5 }) + self.Train:LoadSystem("LeftDoor3","Relay",{ open_time = 0.5, close_time = 0.5 }) + self.Train:LoadSystem("LeftDoor4","Relay",{ open_time = 0.5, close_time = 0.5 }) + self.Train:LoadSystem("RightDoor1","Relay",{ open_time = 0.5, close_time = 0.5 }) + self.Train:LoadSystem("RightDoor2","Relay",{ open_time = 0.5, close_time = 0.5 }) + self.Train:LoadSystem("RightDoor3","Relay",{ open_time = 0.5, close_time = 0.5 }) + self.Train:LoadSystem("RightDoor4","Relay",{ open_time = 0.5, close_time = 0.5 })]]-- + self.DoorLeft = false + self.DoorRight = false + self.CloseDoors = false + if not TURBOSTROI then + self.LeftDoorState = { 0,0,0,0 } + self.RightDoorState = { 0,0,0,0 } + self.LeftDoorDir = { 0,0,0,0 } + self.RightDoorDir = { 0,0,0,0 } + self.LeftDoorSpeed = {0,0,0,0} + self.RightDoorSpeed = {0,0,0,0} + self.LeftDoorStuck = {false, false, false, false} + self.RightDoorStuck = {false, false, false, false} + local start = math.Rand(0.4,0.7) + self.DoorSpeedMain = math.Rand(start,math.Rand(start+0.1,start+0.3)) + for i=1,#self.LeftDoorSpeed do + if math.random() > 0.7 then + self.LeftDoorSpeed[i] = math.Rand(self.DoorSpeedMain-0.1,self.DoorSpeedMain+0.4) + self.RightDoorSpeed[i] = math.Rand(self.DoorSpeedMain-0.1,self.DoorSpeedMain+0.4) + else + self.LeftDoorSpeed[i] = math.Rand(self.DoorSpeedMain-0.15,self.DoorSpeedMain+0.2) + self.RightDoorSpeed[i] = math.Rand(self.DoorSpeedMain-0.15,self.DoorSpeedMain+0.2) + end + end + end + self.PlayOpen = 1e9 + self.PlayClosed = 1e9 + self.TrainLineOpen = false + self.BrakeLineOpen = false + + self.EmergencyValve = false + self.EmergencyValveEPK = false + self.OldValuePos = self.DriverValvePosition + + self.WeightLoadRatio = 0 +end + +function TRAIN_SYSTEM:Inputs() + return { "BrakeUp", "BrakeDown", "BrakeSet", "Autostop" } +end + +function TRAIN_SYSTEM:Outputs() + return { "BrakeLinePressure", "BrakeCylinderPressure", "DriverValvePosition", + "ReservoirPressure", "TrainLinePressure", "DoorLinePressure", "WeightLoadRatio","SD2" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "BrakeSet" then + self.DriverValvePosition = math.floor(value) + if self.DriverValvePosition < 1 then self.DriverValvePosition = 1 end + if self.DriverValvePosition > 6 then self.DriverValvePosition = 6 end + elseif (name == "BrakeUp") and (value > 0.5) then + self:TriggerInput("BrakeSet",self.DriverValvePosition+1) + elseif (name == "BrakeDown") and (value > 0.5) then + self:TriggerInput("BrakeSet",self.DriverValvePosition-1) + elseif name == "Autostop" then + self.EmergencyValve = self.Train.UAVA.Value == 0 + if self.EmergencyValve and value > 0 then RunConsoleCommand("say","Autostop braking",self.Train:GetDriverName()) end + end +end + + +-- Calculate derivatives +function TRAIN_SYSTEM:equalizeCouplePressure(dT,pressure,train,valve_status,rate,close_rate) + if not valve_status then return 0 end + local other + if IsValid(train) then other = train.Pneumatic end + + -- Get second pressure + local P2 = 0 + if other then P2 = other[pressure] end + if (not other) and (valve_status) then + self.TrainLineOpen = (pressure == "TrainLinePressure") + rate = close_rate or rate + --self.TrainLinePressure_dPdT = 0.0 + end + + -- Calculate rate + local dPdT = rate * (P2 - self[pressure]) + -- Calculate delta + local dP = dPdT*dT + if other and other.ReadOnly then + dP = dP/250 + end + -- Equalized pressure + local P0 = (P2 + self[pressure]) / 2 + -- Update pressures + if dP > 0 then + self[pressure] = math.min(P0,self[pressure] + dP) + if other and not other.ReadOnly then + other[pressure] = math.max(P0,other[pressure] - dP) + end + else + self[pressure] = math.max(P0,self[pressure] + dP) + if other and not other.ReadOnly then + other[pressure] = math.min(P0,other[pressure] - dP) + end + end + -- Update delta if losing air + if self.TrainLineOpen and (pressure == "TrainLinePressure") then + self[pressure.."_dPdT"] = (self[pressure.."_dPdT"] or 0) + dPdT + end + return dP +end +------------------------------------------------------------------------------- +function TRAIN_SYSTEM:UpdatePressures(Train,dT) + local frontBrakeOpen = Train.FrontBrakeLineIsolation.Value == 0 + local rearBrakeOpen = Train.RearBrakeLineIsolation.Value == 0 + local frontTrainOpen = Train.FrontTrainLineIsolation.Value == 0 + local rearTrainOpen = Train.RearTrainLineIsolation.Value == 0 + + local Ft = IsValid(Train.FrontTrain) and Train.FrontTrain + local Rt = IsValid(Train.RearTrain) and Train.RearTrain + local Fc, Rc = Train.FrontCouple or Train.FrontBogey, Train.RearCouple or Train.RearBogey + local Fb,Rb + if IsValid(Fc) and Fc.DepotPneumo then Fb = Fc.DepotPneumo end + if IsValid(Rc) and Rc.DepotPneumo then Rb = Rc.DepotPneumo end + + local frontBrakeLeak = false + local rearBrakeLeak = false + local frontTrainLeak = false + local rearTrainLeak = false + + -- Check if both valve on this train and connected train are open + if Ft and Ft.FrontBrakeLineIsolation then + if Ft.FrontTrain == Train then -- Nose to nose + frontBrakeLeak = frontBrakeOpen and Ft.FrontBrakeLineIsolation.Value==1 and 0.08 + frontTrainLeak = frontTrainOpen and Ft.FrontTrainLineIsolation.Value==1 and 0.08 + else -- Rear to nose + frontBrakeLeak = frontBrakeOpen and Ft.RearBrakeLineIsolation.Value==1 and 0.08 + frontTrainLeak = frontTrainOpen and Ft.RearTrainLineIsolation.Value==1 and 0.08 + end + else + frontBrakeLeak = frontBrakeOpen and 0.7 + frontTrainLeak = frontTrainOpen and not Fb and 0.3 + end + if Rt and Rt.FrontBrakeLineIsolation then + if Rt.FrontTrain == Train then -- Nose to nose + rearBrakeLeak = rearBrakeOpen and Rt.FrontBrakeLineIsolation.Value==1 and 0.08 + rearTrainLeak = rearTrainOpen and Rt.FrontTrainLineIsolation.Value==1 and 0.08 + else -- Rear to nose + rearBrakeLeak = rearBrakeOpen and Rt.RearBrakeLineIsolation.Value==1 and 0.08 + rearTrainLeak = rearTrainOpen and Rt.RearTrainLineIsolation.Value==1 and 0.08 + end + else + rearBrakeLeak = rearBrakeOpen and 0.7 + rearTrainLeak = rearTrainOpen and not Rb and 0.3 + end + + -- Equalize pressure + local Fl=math.min(0,self:equalizeCouplePressure(dT,"BrakeLinePressure",frontBrakeLeak==false and Ft,frontBrakeOpen,100,frontBrakeLeak or 0.08)*3)*(frontBrakeLeak and 1 or 0) + local Rl=math.min(0,self:equalizeCouplePressure(dT,"BrakeLinePressure",rearBrakeLeak==false and Rt,rearBrakeOpen,100,rearBrakeLeak or 0.08)*3)*(rearBrakeLeak and 1 or 0) + + Fl=Fl+math.min(0,self:equalizeCouplePressure(dT,"TrainLinePressure",frontTrainLeak==false and Ft or Fb,frontTrainOpen,100,frontTrainLeak or 0.08)*10)*(frontTrainLeak and 1 or 0) + Rl=Rl+math.min(0,self:equalizeCouplePressure(dT,"TrainLinePressure",rearTrainLeak==false and Rt or Rb,rearTrainOpen,100,rearTrainLeak or 0.08)*10)*(rearTrainLeak and 1 or 0) + + self.TrainLineOpen=frontTrainLeak or rearTrainLeak + self.BraieLineOpen=frontBrakeLeak or rearBrakeLeak + Train:SetPackedRatio("FrontLeak",Fl) + Train:SetPackedRatio("RearLeak",Rl) +end + + + +function TRAIN_SYSTEM:equalizePressure(dT,pressure,target,rate,fill_rate,no_limit,smooth) + if fill_rate and (target > self[pressure]) then rate = fill_rate end + + -- Calculate derivative + local dPdT = rate + if target < self[pressure] then dPdT = -dPdT end + local dPdTramp = math.min(1.0,math.abs(target - self[pressure])*(smooth or 0.5)) + dPdT = dPdT*dPdTramp + + -- Update pressure + self[pressure] = self[pressure] + dT * dPdT + self[pressure] = math.max(0.0,math.min(16.0,self[pressure])) + self[pressure.."_dPdT"] = (self[pressure.."_dPdT"] or 0) + dPdT + if no_limit ~= true then + if self[pressure] == 0.0 then self[pressure.."_dPdT"] = 0 end + if self[pressure] == 16.0 then self[pressure.."_dPdT"] = 0 end + end + return dPdT +end +------------------------------------------------------------------------------- +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + self.WeightLoadRatio = math.max(0,math.min(1,(Train:GetNW2Float("PassengerCount")/200))) + + -- Apply specific rate to equalize pressure + local V2 = Train.K29.Value == 1 or Train.Electric.V2 > 0 + ---------------------------------------------------------------------------- + -- Accumulate derivatives + self.TrainLinePressure_dPdT = 0.0 + self.BrakeLinePressure_dPdT = 0.0 + self.ReservoirPressure_dPdT = 0.0 + self.BrakeCylinderPressure_dPdT = 0.0 + self.AirDistributorPressure_dPdT = 0.0 + self.ParkingBrakePressure_dPdT = 0.0 + -- Reduce pressure for brake line + self.TrainToBrakeReducedPressure = math.min(5.1,self.TrainLinePressure) -- * 0.725) + -- Feed pressure to door line + self.DoorLinePressure = self.TrainToBrakeReducedPressure * 0.90 + local trainLineConsumption_dPdT = 0.0 + local wagc = Train:GetWagonCount() + local pr_speed = 1.25*wagc --2 + if self.Leak or self.BraieLineOpen then pr_speed = pr_speed*0.7 end + -- 013: 1 Overcharge + if (self.RealDriverValvePosition == 1) and V2 then + self:equalizePressure(dT,"BrakeLinePressure", self.TrainLinePressure, pr_speed) + end + + -- 013: 2 Normal pressure + if (self.RealDriverValvePosition == 2) and V2 then + self:equalizePressure(dT,"BrakeLinePressure", 1.01*math.min(5.1,self.TrainToBrakeReducedPressure), pr_speed,nil, nil, 1.0)-- nil, 1.0) + end + + -- 013: 3 4.3 Atm + if (self.RealDriverValvePosition == 3) and V2 then + self:equalizePressure(dT,"BrakeLinePressure", 1.01*math.min(4.3,self.TrainToBrakeReducedPressure), pr_speed,nil, nil, 1.0) + end + + -- 013: 4 4.0 Atm + if (self.RealDriverValvePosition == 4) and V2 then + self:equalizePressure(dT,"BrakeLinePressure", 1.01*math.min(4.0,self.TrainToBrakeReducedPressure), pr_speed,nil, nil, 1.0) + end + + -- 013: 5 3.7 Atm + if (self.RealDriverValvePosition == 5) and V2 then + self:equalizePressure(dT,"BrakeLinePressure", 1.01*math.min(3.7,self.TrainToBrakeReducedPressure), pr_speed,nil, nil, 1.0) + end + + -- 013: 6 3.0 Atm + if (self.RealDriverValvePosition == 6) and V2 then + self:equalizePressure(dT,"BrakeLinePressure", 1.01*math.min(3.0,self.TrainToBrakeReducedPressure), pr_speed,nil, nil, 1.0) + end + + + if Train.BARS then + local leak = 0 + if self.EmergencyValve then + local leakst = 1.1*(Train:GetWagonCount()) + leak = self:equalizePressure(dT,"BrakeLinePressure", 0.0,pr_speed,false,false,0.4) + if (leak >= -0.2*(Train:GetWagonCount()) or Train.UAVA.Value > 0) then + self.EmergencyValve = false + end + self.Leak = true + end + self.Train:SetPackedRatio("EmergencyValve_dPdT", -leak) + end + self.Train:SetPackedRatio("Crane_dPdT", self.BrakeLinePressure_dPdT ) + trainLineConsumption_dPdT = trainLineConsumption_dPdT + math.max(0,self.BrakeLinePressure_dPdT) +--[[ + local leak = 0 + if self.EmergencyValve then + leak = self:equalizePressure(dT,"BrakeLinePressure", 0.0,2 + 1.375*(Train:GetWagonCount() - 1),false,false,0.4) + end + self.Train:SetPackedRatio("EmergencyValve_dPdT", -leak) + local leak = 0 + if self.EmergencyValveEPK then + leak = self:equalizePressure(dT,"BrakeLinePressure", 0.0,2 + 1.375*(Train:GetWagonCount() - 1),false,false,0.4) + end + self.Train:SetPackedRatio("EmergencyValveEPK_dPdT", -leak) + local leak = 0 + if self.Train.EmergencyBrakeValve and self.Train.EmergencyBrakeValve.Value > 0.5 then + leak = self:equalizePressure(dT,"BrakeLinePressure", 0.0,2 + 1.375*(Train:GetWagonCount() - 1),false,false,0.4) + end + self.Train:SetPackedRatio("EmergencyBrakeValve_dPdT", -leak)]] + local count = 0 + local command = 0 + --[[ + for i=1,#Train.WagonList do + local train = Train.WagonList[i] + if train.BUKP then + if train.BUKP.Loop == 0 then + count = -99 + end + if train.BUKP.BTB then + count = count + 1 + end + end + end + if Train.BUV.PN2 > 0 then + command = 2 + elseif Train.BUV.PN1 > 0 then + command = 1 + end]] + local targetPressure = 0--math.max(0,math.min(5.2,1.5*(math.min(5.1,self.TrainToBrakeReducedPressure) - self.BrakeLinePressure))) + --if self.BrakeLinePressure <= 3.3 then + local PMPressure = 0 + local EPMPressure = 0 + local from = self.TrainToBrakeReducedPressure + self:equalizePressure(dT,"AirDistributorPressure", math.Clamp(((from-self.BrakeLinePressure)/(from-3.2)),0,1)*(2.6+self.WeightLoadRatio*0.6)+0.01, 2.50, 2.50, nil, 1.3) + + self.EmergencyBrakeActive = (1-Train:ReadTrainWire(26))+(1-Train:ReadTrainWire(25)) > 0 + self.BTBReady = self.AirDistributorPressure >= (2.6+self.WeightLoadRatio*0.6)-0.1 + if self.EmergencyBrakeActive then + PMPressure = self.AirDistributorPressure + if self.BrakeCylinderPressure < self.AirDistributorPressure and self.AirDistributorPressure-self.BrakeCylinderPressure > 0.1 then + self:equalizePressure(dT,"AirDistributorPressure",0, math.min(self.TrainLinePressure,self.AirDistributorPressure-self.BrakeCylinderPressure)*1, (self.AirDistributorPressure-self.BrakeCylinderPressure)*1, nil, 2) + end + end + if Train:ReadTrainWire(28) > 0 then + if Train:ReadTrainWire(27)*Train:ReadTrainWire(29) > 0 then + EPMPressure = 1.7+self.WeightLoadRatio*0.7 --2 уÑтавка + elseif Train:ReadTrainWire(27)*Train:ReadTrainWire(30) > 0 then + EPMPressure = 1 --1 уÑтавка + end + else + if Train.BUV.PN2 then + EPMPressure = 1.7+self.WeightLoadRatio*0.7 --2 уÑтавка + elseif Train.BUV.PN1 then + EPMPressure = 1 --1 уÑтавка + end + end + if EPMPressure > PMPressure then --Работа П1 + targetPressure = EPMPressure + else + targetPressure = PMPressure + end + self.DisableScheme = not Train.BUV:Get("Slope") and self.BrakeCylinderPressure > 0.6 or self.BrakeCylinderPressure > 1.8 + --end + ---------------------------------------------------------------------------- + -- Fill brake cylinders + if Train.K31.Value == 1 then + if math.abs(self.BrakeCylinderPressure - targetPressure) > 0.150 then + self.BrakeCylinderValve = 1 + end + if math.abs(self.BrakeCylinderPressure - targetPressure) < 0.025 then + self.BrakeCylinderValve = 0 + end + local pneumaticValveConsumption_dPdT = 0 + trainLineConsumption_dPdT = trainLineConsumption_dPdT + math.max(0,pneumaticValveConsumption_dPdT) + if self.BrakeCylinderValve == 1 then + self:equalizePressure(dT,"BrakeCylinderPressure", math.min(3.3,self.TrainLinePressure,targetPressure), 2.50, 2.50, nil, self.BrakeCylinderPressure > targetPressure and 0.3+math.Clamp((self.BrakeCylinderPressure-0.4)/3.3,0,0.6) or 0.9) + end + else + self:equalizePressure(dT,"BrakeCylinderPressure", 0.0, 2.00) + end + + if (Train.BUV:Get("RVPB") or Train:ReadTrainWire(11) > 0) and Train.SFV22.Value > 0 and Train.Electric.Battery80V > 62 then + self:equalizePressure(dT,"ParkingBrakePressure", self.TrainLinePressure, 0.4,1,nil,0.5) + else + self:equalizePressure(dT,"ParkingBrakePressure", 0, 0.4,1,nil,0.5) + end + Train:SetPackedRatio("ParkingBrakePressure_dPdT",self.ParkingBrakePressure_dPdT+0.02) + trainLineConsumption_dPdT = trainLineConsumption_dPdT + math.max(0,self.BrakeCylinderPressure_dPdT + self.ParkingBrakePressure_dPdT) + self.Train:SetPackedRatio("BrakeCylinderPressure_dPdT", self.BrakeCylinderPressure_dPdT) + + -- Simulate cross-feed between different wagons + self:UpdatePressures(Train,dT) + + ---------------------------------------------------------------------------- + -- Simulate compressor operation and train line depletion + self.Compressor = Train.BUV.BBE and Train.Electric.BVKA_KM1 > 0--Train.KK.Value * ((not Train.Electric or Train.Electric.Power750V > 550) and 1 or 0) + self.CompressorOver = self.CompressorOver or 0 + if self.Compressor then + self.CompressorOver = self.CompressorOver + math.random(0.0215,0.0235)*dT + if self.CompressorOver >= 1 then --Train.SF54.Value > 0.5 and self.CompressorOver >= 1 then + self.CompressorOver = 0 + Train:PlayOnce("compressor_pn","cabin",1,1) + end + end + local Ratio = 29/400 + self.TrainLinePressure = self.TrainLinePressure - 0.07*trainLineConsumption_dPdT*dT -- 0.190 --0.170 + if self.Compressor then self:equalizePressure(dT,"TrainLinePressure", 10.0, 0.039) end + --self:equalizePressure(dT,"TrainLinePressure", 8.0, 0.4) --TEMP + self:equalizePressure(dT,"TrainLinePressure", 0,0.001) + -- Overpressure + if self.TrainLinePressure > 9 then self.TrainLineOverpressureValve = true end + if self.TrainLineOverpressureValve then + --self:equalizePressure(dT,"TrainLinePressure", 0.0, 0.2) + self:equalizePressure(dT,"TrainLinePressure", 0.0, 0.05) + self.TrainLineOpen = true + if self.TrainLinePressure < 6 then self.TrainLineOverpressureValve = false end + end + if self.BrakeLinePressure <= 2.6 and self.SD2~=1 then self.SD2 = 1 end + if self.BrakeLinePressure >= 2.8 and self.SD2~=0 then self.SD2 = 0 end + Train.AK:TriggerInput( "Open", self.TrainLinePressure > 8.2) + Train.AK:TriggerInput( "Close",self.TrainLinePressure < 6.3) + ---------------------------------------------------------------------------- + -- FIXME + Train:SetNW2Bool("FbI",Train.FrontBrakeLineIsolation.Value ~= 0) + Train:SetNW2Bool("RbI",Train.RearBrakeLineIsolation.Value ~= 0) + Train:SetNW2Bool("FtI",Train.FrontTrainLineIsolation.Value ~= 0) + Train:SetNW2Bool("RtI",Train.RearTrainLineIsolation.Value ~= 0) + Train:SetNW2Bool("AD",Train.K31.Value == 0) + + self.Timer = self.Timer or CurTime() + if ((CurTime() - self.Timer > 0.10) and (self.DriverValvePosition > self.RealDriverValvePosition)) then + self.Timer = CurTime() + self.Train:PlayOnce("br_013","cabin") + self.RealDriverValvePosition = self.RealDriverValvePosition + 1 + end + if ((CurTime() - self.Timer > 0.10) and (self.DriverValvePosition < self.RealDriverValvePosition)) then + self.Timer = CurTime() + self.Train:PlayOnce("br_013","cabin") + self.RealDriverValvePosition = self.RealDriverValvePosition - 1 + end + + + if self.V2Previous ~= V2 then + self.V2Previous = V2 + if not V2 then + self.V2OffTimer = CurTime() + self.Train:PlayOnce("pneumo_disconnect_close","cabin") + else + self.V2OffTimer = nil + self.Train:PlayOnce("pneumo_disconnect_open","cabin") + end + end + if self.V2OffTimer then + if CurTime()-self.V2OffTimer < 0.45 then + local pr_speed = 2.2*(Train:GetWagonCount()) --2 + self:equalizePressure(dT,"BrakeLinePressure", 0,pr_speed) + else + self.V2OffTimer = nil + end + end + + + local commandLeft = (Train:ReadTrainWire(40) > 0 or Train.BUV.OpenLeft) and (Train:ReadTrainWire(38) > 0 or Train:ReadTrainWire(39) > 0) and Train.SFV13.Value > 0 + local commandRight = (Train:ReadTrainWire(40) > 0 or Train.BUV.OpenRight) and (Train:ReadTrainWire(37) > 0 or Train:ReadTrainWire(39) > 0) and Train.SFV14.Value > 0 + local commandClose = Train.BUV.CloseDoors and Train.SFV12.Value > 0 + if commandClose or commandLeft and commandRight then + self.DoorLeft = false + self.DoorRight = false + elseif commandLeft then self.DoorLeft = true + elseif commandRight then self.DoorRight = true end + + if Train.CanStuckPassengerLeft then + for i in ipairs(self.LeftDoorStuck) do + self.LeftDoorStuck[i] = math.random() < (0.6+math.min(2,2-self.LeftDoorSpeed[i])*0.2)*Train.CanStuckPassengerLeft*0.6 and (math.random() > 0.7 and CurTime()+math.random()*15) + end + Train.CanStuckPassengerLeft = false + end + if Train.CanStuckPassengerRight then + for i in ipairs(self.RightDoorStuck) do + self.RightDoorStuck[i] = math.random() < (0.6+math.min(2,2-self.LeftDoorSpeed[i])*0.2)*Train.CanStuckPassengerRight*0.6 and (math.random() > 0.7 and CurTime()+math.random()*15) + end + Train.CanStuckPassengerRight = false + end + + Train.LeftDoorsOpen = false + Train.RightDoorsOpen = false + for i=1,4 do + self.LeftDoorDir[i] = math.Clamp(self.LeftDoorDir[i]+dT/(self.DoorLeft and 2*self.LeftDoorSpeed[i] or -self.LeftDoorSpeed[i]),-1.5,1) + self.RightDoorDir[i] = math.Clamp(self.RightDoorDir[i]+dT/(self.DoorRight and 2*self.RightDoorSpeed[i] or -self.RightDoorSpeed[i]),-1.5,1) + self.LeftDoorState[i] = math.Clamp(self.LeftDoorState[i] + (self.LeftDoorDir[i]/self.LeftDoorSpeed[i]*dT),self.LeftDoorStuck[i] and 0.3 or 0,1) + if self.LeftDoorState[i] == 0 or self.LeftDoorState[i] == 1 then self.LeftDoorDir[i] = 0 end + self.RightDoorState[i] = math.Clamp(self.RightDoorState[i] + (self.RightDoorDir[i]/self.RightDoorSpeed[i]*dT),self.RightDoorStuck[i] and 0.3 or 0,1) + if self.RightDoorState[i] == 0 or self.RightDoorState[i] == 1 then self.RightDoorDir[i] = 0 end + if not Train.BUV.LeftDoorsOpen and self.LeftDoorState[i] > 0 then + Train.LeftDoorsOpen = true + end + if not Train.BUV.LeftDoorsOpen and self.RightDoorState[i] > 0 then + Train.RightDoorsOpen = true + end + Train.BUV.DoorsOpened = Train.LeftDoorsOpen or Train.RightDoorsOpen + Train:SetPackedRatio("DoorL"..i,self.LeftDoorState[i]) + Train:SetPackedRatio("DoorR"..i,self.RightDoorState[i]) + if self.LeftDoorStuck[i] and (self.DoorLeft or type(self.LeftDoorStuck[i]) == "number" and CurTime()-self.LeftDoorStuck[i] > 0) then + self.LeftDoorStuck[i] = false + end + if self.RightDoorStuck[i] and (self.DoorRight or type(self.RightDoorStuck[i]) == "number" and CurTime()-self.RightDoorStuck[i] > 0) then + self.RightDoorStuck[i] = false + end + Train:SetPackedBool("DoorLS"..i,self.LeftDoorStuck[i]) + Train:SetPackedBool("DoorRS"..i,self.RightDoorStuck[i]) + end + Train:SetPackedBool("DoorL",self.DoorLeft) + Train:SetPackedBool("DoorR",self.DoorRight) + --[[ + self.DoorLeft = false + self.DoorRight = false + self.CloseDoors = false + self.LeftDoorState = { 0,0,0,0 } + self.RightDoorState = { 0,0,0,0 } + self.LeftDoorSpeed = {0,0,0,0} + self.RightDoorSpeed = {0,0,0,0} + for i=1,#self.LeftDoorSpeed do + self.LeftDoorSpeed = math.random(2.8,3.2) + self.RightDoorSpeed = math.random(2.8,3.2) + end]] +end diff --git a/lua/metrostroi/systems/sys_81_720_rv.lua b/lua/metrostroi/systems/sys_81_720_rv.lua new file mode 100644 index 0000000..c34237d --- /dev/null +++ b/lua/metrostroi/systems/sys_81_720_rv.lua @@ -0,0 +1,120 @@ +-------------------------------------------------------------------------------- +-- 81-720 reverser +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_720_RV") + +TRAIN_SYSTEM.KROMatrix = { + {"KRO9", "10"}, + { 1 , 0, 1 }, + {"KRO11", "12"}, + { 0, 0, 1 }, + {"KRO15", "16"}, + { 1, 0, 0 }, + {"KRO13", "14"}, + { 1, 0, 1 }, + {"KRO1", "2" }, + { 1, 0, 1 }, + {"KRO5", "6" }, + { 0, 1, 0 }, + {"KRO3", "4" }, + { 0, 0, 1 }, + {"KRO7", "8" }, + { 1, 1, 0 }, +} +TRAIN_SYSTEM.KRRMatrix = { + {"KRR7", "8" }, + { 1, 0, 1 }, + {"KRR3", "4" }, + { 0, 0, 1 }, + {"KRR13", "14"}, + { 1, 0, 0 }, + {"KRR11", "12"}, + { 1, 0, 1 }, + {"KRR1", "2" }, + { 1, 0, 1 }, + {"KRR15", "16"}, + { 1, 0, 1 }, + {"KRR5", "6" }, + { 0, 0, 1 }, + {"KRR9", "10"}, + { 1 , 0, 0 }, +} +function TRAIN_SYSTEM:Initialize() + self.KROPosition = 0 + self.KRRPosition = 0 + self.ChangeSpeed = 0.10 + + -- Initialize contacts values + for i=1,#self.KROMatrix/2 do + local v = self.KROMatrix[i*2-1] + self[v[1].."-"..v[2]] = 0 + end + for i=1,#self.KRRMatrix/2 do + local v = self.KRRMatrix[i*2-1] + self[v[1].."-"..v[2]] = 0 + end +end + +function TRAIN_SYSTEM:Inputs() + return { "KROSet", "KRRSet", } +end +local outputs = { "KROPosition","KRRPosition"} +for i=1,#TRAIN_SYSTEM.KROMatrix/2 do + local v = TRAIN_SYSTEM.KROMatrix[i*2-1] + table.insert(outputs,v[1].."-"..v[2]) +end +for i=1,#TRAIN_SYSTEM.KRRMatrix/2 do + local v = TRAIN_SYSTEM.KRRMatrix[i*2-1] + table.insert(outputs,v[1].."-"..v[2]) +end +function TRAIN_SYSTEM:Outputs() + return outputs +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + local prevKROPosition = self.KROPosition + -- Change position + if name == "KROSet" then + if (self.Enabled ~= 0) and (math.floor(value) ~= self.KROPosition) then + local prevKROPosition = self.KROPosition + self.KROPosition = math.floor(value) + if self.KROPosition > 1 then self.KROPosition = 1 end + if self.KROPosition < -1 then self.KROPosition = -1 end + if prevKROPosition ~= self.KROPosition then + self.Train:PlayOnce("kro_"..prevKROPosition.."_"..self.KROPosition,"cabin",1) + end + end + end + if name == "KRRSet" then + if (self.Enabled ~= 0) and (math.floor(value) ~= self.KRRPosition) then + local prevKRRPosition = self.KRRPosition + self.KRRPosition = math.floor(value) + if self.KRRPosition > 1 then self.KRRPosition = 1 end + if self.KRRPosition < -1 then self.KRRPosition = -1 end + if prevKRRPosition ~= self.KRRPosition then + self.Train:PlayOnce("krr_"..prevKRRPosition.."_"..self.KRRPosition,"cabin",1) + end + end + end +end + + +function TRAIN_SYSTEM:Think() + local Train = self.Train + -- Move controller + self.Timer = self.Timer or CurTime() + -- Update contacts + for i=1,#self.KROMatrix/2 do + local v = self.KROMatrix[i*2-1] + local d = self.KROMatrix[i*2] + self[v[1].."-"..v[2]] = d[self.KROPosition+2] + end + for i=1,#self.KRRMatrix/2 do + local v = self.KRRMatrix[i*2-1] + local d = self.KRRMatrix[i*2] + self[v[1].."-"..v[2]] = d[self.KRRPosition+2] + end +end diff --git a/lua/metrostroi/systems/sys_81_720_ticker.lua b/lua/metrostroi/systems/sys_81_720_ticker.lua new file mode 100644 index 0000000..ceaa5dd --- /dev/null +++ b/lua/metrostroi/systems/sys_81_720_ticker.lua @@ -0,0 +1,172 @@ +-------------------------------------------------------------------------------- +-- 81-720 tickers +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_720_Ticker") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() +end + +if TURBOSTROI then return end + +function TRAIN_SYSTEM:Inputs() + return {} +end + +function TRAIN_SYSTEM:Outputs() + return {} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end +if CLIENT then + function TRAIN_SYSTEM:ClientInitialize() + end + local function createFont(name,font,size) + surface.CreateFont("Metrostroi_"..name, { + font = font, + size = size, + weight = 400, + blursize = false, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + scanlines = false, + }) + end + createFont("Tickers","Advanced LED Board-7",49,400) + local aaaa = surface.GetTextureID("models/metrostroi_train/81-720/a") + function TRAIN_SYSTEM:ClientThink(dT) + if not self.Train:ShouldDrawPanel("Tickers") then return end + local str = self.Train:GetNW2String("TickerMessage","") + local pos = self.Train:GetNW2Float("TickerState",0) + local spd = self.Train:GetNW2Float("TickersSpeed",0) + self.TargetPosition = self.TargetPosition or 0 + if self.Text ~= str or math.abs(self.Position-pos) > 50 then + self.Position = pos + else + self.Position = self.Position - 150*dT + end + self.Text = str + render.PushRenderTarget(self.Train.Tickers,0,0,852, 64) + render.Clear(0, 0, 0, 0) + cam.Start2D() + self:Tickers(self.Train) + cam.End2D() + render.PopRenderTarget() + end + function TRAIN_SYSTEM:PrintText(x, text, inverse) + local str = {utf8.codepoint(text, 1, -1)} + + for i = 0, #str - 1 do + local xpos = i * 26.5 + x * 3.005 + + --if i*26.5+x*3.005+20 < 0 then continue end + --if (i-33)*26.5+x*3.005+20 > 0 then continue end + if -26.5 < xpos and xpos < 26.5 * 32 then + local char = utf8.char(str[i + 1]) + if char == "@" then + surface.SetDrawColor(Color(255,255,255)) + surface.SetTexture(aaaa) + surface.DrawTexturedRectRotated(xpos + 20, 24,24,32,0) + + else + draw.SimpleText(char, "Metrostroi_Tickers", xpos + 20, 24, Color(50, 160, 150), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER) + end + end + end + end + --draw.SimpleText(char,"Metrostroi_Tickers",(x+i)*20.5+8,34,Color(0,255,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + function TRAIN_SYSTEM:Tickers(Train) + if self.Text ~= "" then + self:PrintText(math.floor(self.Position/1),self.Text) + end + end + return +end +function TRAIN_SYSTEM:Initialize() + self.Advert = -1 + self.AdvertSymbol = 0 + self.CurrentAdvert = "" +end +function TRAIN_SYSTEM:CANReceive(source,sourceid,target,targetid,textdata,numdata) + if textdata == "Curr" then + self.TickerCurr = numdata + end + if textdata == "Next" then + self.TickerNext = numdata + end + if textdata == "Last" then + self.TickerLast = numdata + end + self.NextAdvertStation = true + self.BeStation=false + --if textdata == "Arrival" then self.Path = numdata > 0 end + --if textdata == "Path" then self.Line = numdata end +end +function TRAIN_SYSTEM:Think() + local Train = self.Train + local Power = Train.Panel.TickerPower>0 + local Work = Train.Panel.TickerWork>0 and Metrostroi.TickerAdverts + if Power and (Work or self.Advert ~= -1) then + self.AdvertSymbol = self.AdvertSymbol - 150*Train.DeltaTime + + if self.AdvertSymbol < -utf8.len(self.CurrentAdvert)*10-20 then + self.AdvertSymbol = 40*(7+math.random(0,3))--40*7 + if Work then + if self.NextAdvertStation then + self.Advert = 0 + self.NextAdvertStation = false + elseif #Metrostroi.TickerAdverts > 0 then + local rnd + repeat rnd = math.random(0,#Metrostroi.TickerAdverts) until rnd ~= self.Advert + self.Advert = rnd + end + if self.BeStation then + self.CurrentAdvert = Format("ПОЕЗД СЛЕДУЕТ ДО СТÐÐЦИИ %s",self.TickerLast):gsub("Й","й") + self.BeStation=false + elseif self.Advert == 0 then + if not self.TickerCurr then + self.CurrentAdvert = ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,," + elseif self.TickerNext then + self.CurrentAdvert = Format("СЛЕДУЮЩÐЯ СТÐÐЦИЯ %s",self.TickerCurr):gsub("Й","й") + self.BeStation=self.TickerLast + else + self.CurrentAdvert = Format("СТÐÐЦИЯ %s",self.TickerCurr):gsub("Й","й") + self.BeStation=self.TickerLast + end + else + self.CurrentAdvert = Metrostroi.TickerAdverts[self.Advert]:gsub("Й","й") + end + else + self.CurrentAdvert = "ÐИИ Фабрики SENT БЕГУЩÐЯ СТРОКРv1.1 0123456789" + self.Advert = -1 + self.AdvertSymbol = 40*8 + end + end + else + self.AdvertSymbol = 40*8 + self.CurrentAdvert = "" + self.Advert = -1 + end + --[[ + local str = "" + for p, c in utf8.codes(self.CurrentAdvert) do + str = str..utf8.char(c+10) + end]] + Train:SetNW2String("TickerMessage",self.CurrentAdvert) + --Train:SetNW2Int("TickerState",math.ceil(math.min(0,self.AdvertSymbol))) + Train:SetNW2Float("TickerState",math.ceil(self.AdvertSymbol)) + Train:SetNW2Float("TickersSpeed",150*Train.DeltaTime) +end diff --git a/lua/metrostroi/systems/sys_81_721_panel.lua b/lua/metrostroi/systems/sys_81_721_panel.lua new file mode 100644 index 0000000..cef4ed7 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_721_panel.lua @@ -0,0 +1,68 @@ +-------------------------------------------------------------------------------- +-- 81-721 controller panel +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_721_Panel") + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("Battery","Relay","Switch",{normally_closed = true,bass=true}) + --Ðвтоматы ВЗ + self.Train:LoadSystem("SFV1","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV2","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV3","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV4","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV5","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV6","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV7","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV8","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV9","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV10","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV11","Relay","Switch",{normally_closed = true,bass=true}) + + self.Train:LoadSystem("SFV12","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV13","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV14","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV15","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV16","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV17","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV18","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV19","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV20","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV21","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV22","Relay","Switch",{normally_closed = true,bass=true}) + + self.Train:LoadSystem("SFV23","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV24","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV25","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV26","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV27","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV28","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV29","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV30","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV31","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV32","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SFV33","Relay","Switch",{normally_closed = true,bass=true}) + + self.AnnouncerPlaying = 0 + + self.TickerPower = 0 + self.PassSchemePower = 0 + self.TickerWork = 0 + self.PassSchemeWork = 0 + + self.PCBKPower = 0 +end + +function TRAIN_SYSTEM:Inputs() + return { } +end + +function TRAIN_SYSTEM:Outputs() + return { "AnnouncerPlaying","TickerPower","PassSchemePower","TickerWork","PassSchemeWork","PCBKPower", } +end +function TRAIN_SYSTEM:TriggerInput(name,value) +end +function TRAIN_SYSTEM:Think() +end diff --git a/lua/metrostroi/systems/sys_81_722_asyncinverter.lua b/lua/metrostroi/systems/sys_81_722_asyncinverter.lua new file mode 100644 index 0000000..4854226 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_722_asyncinverter.lua @@ -0,0 +1,305 @@ +-------------------------------------------------------------------------------- +-- 81-722 async inverter and motors +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_722_AsyncInverter") +TRAIN_SYSTEM.DontAccelerateSimulation = false + +function TRAIN_SYSTEM:Initialize() + -- Train state/sensors + self.Voltage = 750 -- External voltage + self.Speed = 0 -- Speed of train in km/h + + -- Physics state + self.RotationRate = 0.0 -- Rate of engine rotation, rpm + self.Torque = 0.0 -- Relative units of torque + self.TargetTorque = 0.0 -- Target torque, that inverter will hold + + -- Inverter state + self.Mode = 0 -- 0: coast, 1: drive, -1: brake + self.Power = 0 + self.EDone = 0 + self.State = 0.0 -- Inverter on/off + self.InverterFrequency = 0.0 -- Output per-phase frequency, Hz + self.InverterVoltage = 0.0 -- Output per-phase voltage, V + --self.InverterGenFrequency = 0.0 -- Invertors generator frequency, Hz + self.Current = 0.0 -- Total electric current, A + + -- Inverter input signals + self.Voltage = 750 -- Third rail voltage + self.Drive = 0 -- Drive mode signal + self.Brake = 0 -- Brake model signal + self.State = 0 -- Power level (PWM) + self.Power1 = 0 + self.Power2 = 0 + self.Power3 = 0 +end + +function TRAIN_SYSTEM:Inputs() + return { "Voltage", "Speed", + "Drive", "Brake", "Power",} +end + +function TRAIN_SYSTEM:Outputs() + return { "Drive","Brake","Mode","Torque", "Current", "State", "InverterFrequency","EDone","Power" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if self[name] then self[name] = value end +end + +local function lerp(min,max, alpha) + return min + math.min(1,math.max(0,alpha))*(max-min) +end +local function interpolate(tbl, num) + for i=1,#tbl do + local curr,next = tbl[i],tbl[i+1] + if not next then + return curr[2] + elseif curr[1] <= num and num <= next[1] then + return curr[2] + (next[2]-curr[2])*((num-curr[1])/(next[1]-curr[1])) + end + end +end +TRAIN_SYSTEM.xF = { + { + { + {0, 0.80}, + {1, 1.57}, + {2, 2.90}, + {3, 4.25}, + {5, 7.01}, + {7, 9.83}, + {10, 14.19}, + {12, 17.20}, + {13, 18.70}, + {15, 21.80}, + {17, 24.25}, + {18, 25.45}, + {19, 26.70}, + {20, 27.90}, + {27, 36.55}, + {30, 40.60}, + {40, 54.15}, + {60, 81.20}, + {80, 108.30}, + {100*1.2, 120*1.5}, + },{ + {0, 0.35}, + {1, 1.43}, + {2, 2.598}, + {3, 3.86}, + {5, 6.38}, + {7, 8.95}, + {10, 12.865}, + {12, 15.50}, + {13, 16.83}, + {15, 19.49}, + {17, 21.92}, + {18, 23.12}, + {19, 24.34}, + {20, 25.625}, + {30, 38.44}, + {40, 51.25}, + {60, 76.87}, + {80, 102.50}, + {100*1.2, 115*1.5}, + },{ + {300.374, 0}, {308.958, 0.05}, {318.122, 0.1}, {327.922, 0.15}, + {338.424, 0.2}, {349.703, 0.25}, {361.842, 0.3}, {374.937, 0.35}, + {389.096, 0.4}, {404.442, 0.45}, {421.117, 0.5}, {439.278, 0.55}, + {459.104, 0.6}, {480.793, 0.65}, {504.563, 0.7}, {530.643, 0.75}, + {559.258, 0.8}, {590.6, 0.85}, {624.772, 0.9}, {661.668, 0.95}, + {700.77, 1} + } + },{ + { + {0, 3.5*0.05}, + {1.5, 1.5}, + {4.5, 4.5*1.1}, + {5.0, 4.73*1.1}, + {7.5, 7.5}, + {10, 10.3}, + {15, 15.95}, + {20, 21.55}, + {23, 25.25}, + {25, 27.7}, + {30, 33.9}, + {35, 40.1}, + {40, 46.3}, + {50, 57.87}, + {60, 69.45}, + {70, 81.0}, + {80, 92.6}, + {100, 115.8} + },{ + {0, 4.5*0.05}, + {1.5, 1.7}, + {4.5, 5*1.1}, + {5.0, 5.625*1.1}, + {7.5, 8.66}, + {10, 11.71}, + {15, 17.80}, + {20, 23.88}, + {23, 27.68}, + {25, 30.22}, + {30, 36.34}, + {35, 42.4}, + {40, 48.46}, + {45, 54.51}, + {50, 60.57}, + {60, 72.68}, + {70, 84.8}, + {80, 96.91}, + {100, 121.13} + },{ + {-699.034, 0}, {-663.137, 0.05}, {-629.719, 0.1}, {-598.679, 0.15}, + {-569.872, 0.2}, {-543.14, 0.25}, {-518.319, 0.3}, {-495.252,0.35}, + {-473.788, 0.4}, {-453.789, 0.45}, {-435.127, 0.5}, {-417.686, 0.55}, + {-401.36, 0.6}, {-386.056, 0.65}, {-371.685,0.7}, {-358.172, 0.75}, {-345.446, 0.8}, + {-333.444, 0.85}, {-322.109, 0.9}, {-311.39, 0.95}, {-301.239, 1} + } + } +} +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local V = self.Speed + + self.Voltage = Train.TR.Main750V + + -- Generate on/off signal + local TargetMode = 0 + if self.Brake*self.Power > 0.5 and (self.Mode<0 or self.Voltage>550) then + TargetMode = -1 + elseif self.Drive*self.Power > 0.5 then + TargetMode = 1 + end + self.EDone = self.Brake*((self.Speed<=4 or self.Speed<=10 and (self.Mode>=0 or self.EDone > 0) or self.Mode>=0 and self.Voltage<550) and 1 or 0) + -- Check correct mode + if TargetMode ~= self.Mode then + if self.State < 0.01 then + if (TargetMode == 0 or self.Timer and CurTime()-self.Timer>0.6) then + self.Mode = TargetMode + self.Timer = nil + if TargetMode then self.BrakeTimer = CurTime() end + elseif not self.Timer then + self.Timer = CurTime() + end + end + else + if self.Mode ~= -1 then self.BrakeTimer = nil end + self.Timer = false + end + if self.Power == 0 or (self.Voltage < 550 and self.Mode > 0) then + self.Mode = 0 + end + + local Inverter_PWM0 = self.Mode == -1 and math.max(0.02,math.min(1,(CurTime()-self.BrakeTimer)/0.1))*1 or 1.5 -- PWM On + local Inverter_PWM1 = 2--TargetMode==0 and 0.5 or 1.5 -- PWM Off + -- PWM target command + -- Adjust state as defined by mode + if self.Mode == TargetMode and TargetMode ~= 0 and self.EDone ==0 then + local torque = math.abs(self.Torque) + self.State = math.max(0, math.min(1, self.State + (self.TargetTorque-torque)*Inverter_PWM0*dT)) + --[[ if torque < self.TargetTorque then + self.State = math.max(0, math.min(1, self.State + (self.TargetTorque-torque)*Inverter_PWM0*dT)) + elseif torque > self.TargetTorque then + self.State = math.max(0, math.min(1, self.State + (self.TargetTorque-torque)*Inverter_PWM1*dT)) + --self.State = math.max(0, math.min(1, self.State - Inverter_PWM1*dT*(self.TargetTorque-torque))) + end--]] + else + self.State = math.max(0, self.State - Inverter_PWM1*dT) + end + -- Generate voltage/frequency + local V = self.Speed + if self.Mode == 1 then -- Drive mode + local Power = lerp(0.0, 1.0, self.State)--- + 0.80*self.Power1 + 0.90*self.Power2 + 1.00*self.Power3) + local f1 = interpolate(self.xF[1][1], V) + local f2 = interpolate(self.xF[1][2], V) + local w = interpolate(self.xF[1][3], 700)--200+Train.Pneumatic.WeightLoadRatio*600) + self.InverterFrequency = f1*(1-w) + f2*w + local Vmin = 200 + local Vtrans = 20 + self.InverterVoltage = math.min(self.Voltage,lerp(Vmin, 750, V/Vtrans)*Power) + + elseif self.Mode == -1 then -- Brake mode + local Power = lerp(0.0, 1.0, self.State)--- + 0.80*self.Power1 + 0.90*self.Power2 + 1.00*self.Power3) + local f1 = interpolate(self.xF[2][1], V) + local f2 = interpolate(self.xF[2][2], V) + local w = interpolate(self.xF[2][3], 700)--200+Train.Pneumatic.WeightLoadRatio*600) + self.InverterFrequency = f1*(1-w) + f2*w + + local Vmin = 600 + local Vtrans = 20 + self.InverterVoltage = lerp(Vmin, 925*2, V/Vtrans)*Power + else -- Coast mode + self.InverterVoltage = 0 + self.InverterFrequency = 0.1 + end + + + -------------------------------------------------------------------------------------------------------------------- + -- PWM generator model + -------------------------------------------------------------------------------------------------------------------- + -- Voltage set by inverter + local V = self.InverterVoltage * self.State -- V + -- Frequency set by inverter + local f = self.InverterFrequency -- Hz +--[[ + -- PWM pulses per sync period + local PWMn = 1 + if self.Speed < 60 then PWMn = 2 end + if self.Speed < 40 then PWMn = 4 end + if self.Speed < 29 then PWMn = 6 end + if self.Speed < 23 then PWMn = 8 end + + -- Get frequency of the generator + self.InverterGenFrequency = self.InverterFrequency*PWMn + self.InverterGenFrequency2 = self.InverterFrequency*PWMn]] + + + -------------------------------------------------------------------------------------------------------------------- + -- Asynchronous inverter physics model/engine model + -------------------------------------------------------------------------------------------------------------------- + -- Physical parameters for the engine + local P = 4 -- No of poles Poles in the engine + local Rs = 0.04 -- Ohm Active stator resistance + local Rr = 0.04 -- Ohm Active rotor resistance + local Xs = 1.4 -- Ohm reactive Reactive stator resistance + local Xr = 1.4 -- Ohm reactive Reactive rotor resistance + local Xm = 30 -- Ohm reactive Air gap reactive resistance + -- Get rate of engine rotation + local n = 3000 * (self.Speed/80) + self.RotationRate = self.RotationRate + 5.0 * (n - self.RotationRate) * dT + + -- Synchronous RPM, synchronous rate and slip + local ns = 120*(f/P) -- rpm + local ws = (2*math.pi*ns)/60 -- rad/sec + local s = (ns - n)/ns -- slip + + -- Asynchronous engine physics model + local K = 2*Rr*Rs*s*Xm^2 + Rr^2 * (Rs^2 + (Xm + Xs)^2) + s^2 * (Rs^2 * (Xm + Xr)^2 + (Xr*Xs + Xm*(Xr + Xs))^2) + local Is_real = ( V*(Rr^2 * Rs + Rr * s * Xm^2 + Rs * s^2 * (Xm + Xr)^2) ) / ( K ) + local Is_imag = -( V*(Rr^2 * (Xm + Xs) + s^2 * (Xm + Xr) * (Xr*Xs + Xm*(Xr + Xs))) ) / ( K ) + local Ir_real = ( s*V*Xm*(Rs*s*(Xm + Xr) + Rr*(Xm + Xs)) ) / ( K ) + local Ir_imag = -( s*V*Xm*(-Rr*Rs + s*(Xr*Xs + Xm*(Xr + Xs))) ) / ( K ) + + -- Convert to real/phase shift + local Is_abs = math.sqrt(Is_real^2 + Is_imag^2) + local Ir_abs = math.sqrt(Ir_real^2 + Ir_imag^2) + local Is_arg = math.atan2(Is_imag, Is_real) + local Ir_arg = math.atan2(Ir_imag, Ir_real) + + -- Get total current through stator, rotor + local Is_total = 2*3*Is_abs*(Is_arg + math.pi/2) + local Ir_total = 2*3*Ir_abs*(Ir_arg + math.pi/2) + + -- Calculate total torque + local T_total = ( ( 2*3*((Ir_abs^2)*Rr)/(math.max(1e-5,ws)) )*(Ir_arg + math.pi/2) )/14.1 + + -- Output torque + self.Current = Is_total + self.Torque = T_total +end diff --git a/lua/metrostroi/systems/sys_81_722_bars.lua b/lua/metrostroi/systems/sys_81_722_bars.lua new file mode 100644 index 0000000..751fdb7 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_722_bars.lua @@ -0,0 +1,209 @@ +-------------------------------------------------------------------------------- +-- 81-722 "BARS" safety system +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_722_BARS") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +local function C(x) return x and 1 or 0 end +local min = math.min + +function TRAIN_SYSTEM:Initialize() + self.Power = 0 + self.ARSPower = 0 + self.ALSPower = 0 + + self.SpeedLimit = 0 + self.NextLimit = 0 + + self.Enabled = 0 + + --Timers + self.DriveTimer = false + self.BrakeTimer = false + self.EKTimer = false + + + + self.ROCh = false + self.RSS = false + self.RSS = false + self.RO = false + self.EK = false + self.R2O = false + self.ROD = false + + self.KSR = false + self.KMO = false + self.KRT = false + self.BR1 = false + self.BR2 = false + self.RUVD = false + self.PTR = false + + self.RNT = false + + self.NoFreq = 0 + self.F1 = 0 + self.F2 = 0 + self.F3 = 0 + self.F4 = 0 + self.F5 = 0 + self.F6 = 0 + + --OUT + self.MOT = 0 + self.T1 = 0 + self.T2 = 0 + self.Ring = 0 + self.EPK = 0 + self.V1 = 0 + self.V2 = 0 +end + +function TRAIN_SYSTEM:Outputs() + return {"MOT","T1","T2","Ring","EPK","V1","ALSPower","Enabled"} +end + +function TRAIN_SYSTEM:Inputs() + return {"NoFreq","F1","F2","F3","F4","F5","F6"} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local ALS = Train.ALSCoil + local speed = ALS.Speed + local ARSPower = Train.Panel.ARSPower>0 + local ALSPower = Train.Panel.ALSPower + if ALSPower ~= ALS.Enabled then + ALS:TriggerInput("Enable",ALSPower) + end + ALSPower = ALSPower*Train.Panel.BARSPower + local FreqCode = bit.bor(ALS.F1*1,ALS.F2*2,ALS.F3*4,ALS.F4*8,ALS.F5*16,ALS.F6*32,ALSPower*64) + if self.FreqCode ~= FreqCode then + if not self.FreqCodeTimer then self.FreqCodeTimer = CurTime() end + if self.FreqCodeTimer and CurTime()-self.FreqCodeTimer>0.2 then + self.FreqCode = FreqCode + self.FreqCodeTimer = nil + + self.F1 = ALS.F1*ALSPower + self.F2 = ALS.F2*ALSPower + self.F3 = ALS.F3*ALSPower + self.F4 = ALS.F4*ALSPower + self.F5 = ALS.F5*ALSPower + self.F6 = ALS.F6*ALSPower + self.NoFreq = (1-math.min(1,(self.F1+self.F2+self.F3+self.F4+self.F5+self.F6)))*ALSPower + end + elseif self.FreqCodeTimer then + self.FreqCodeTimer = nil + end + if ARSPower and self.Enabled==0 then + self.EK = speed < 0.5 + self.Enabled = self.EK and 1 or 0 + elseif ARSPower then + local States = Train.BUKP.States + self.KB = (Train.Vigilance.Value+Train.PB.Value) > 0 + self.VRD = Train.VRD.Value > 0 + local pos = (Train.BUKP.Active>0 or Train.Electric.CabActive > 0) and (States.Brake and -States.DriveStrength or States.DriveStrength) or -1 + local Vzad = 20 + if self.F4 > 0 then Vzad = 40 end + if self.F3 > 0 then Vzad = 60 end + if self.F2 > 0 then Vzad = 70 end + if self.F1 > 0 then Vzad = 80 end + if Vzad ~= 20 and (self.VRD or self.KB) then Vzad = 20 end + if self.F5 > 0 and self.F6 == 0 and self.VRD and not self.AcceptF5 and speed < 0.1 then + self.AcceptF5 = true + elseif self.F5 == 0 or self.F6 > 0 or self.F5>0 and not self.VRD then + self.AcceptF5 = false + end + + if speed>Vzad-1.5 then self.ROD = true elseif speed5 or not self.ROCh and self.KB then self.RO = false elseif speed<3 then self.RO = true end + if speed>20 then self.R2O = false elseif speed<19 then self.R2O = true end + if Vzad<=20 or speed>Vzad then self.RSS = false elseif speed0 and self.F6==0 and not self.AcceptF5 or self.DriveTimer and CurTime()-self.DriveTimer>7 then + self.RSS = false + self.R2O = false + end + + self.BR2 = self.KB and not self.ROCh and not self.BR1 + self.BR1 = self.KB and (self.BR1 or self.ROCh) and not self.BR2 + self.KSR = (self.KSR or self.RNT) and self.RSS or self.R2O and (self.BR1 and self.ROCh or self.BR2) + + self.RNT = (self.BR1 or self.BR2) or self.RNT and (self.KSR or self.KRT) + self.RUVD = (self.RUVD or self.KMO) and self.KSR + --print(self.BrakeTimer) + if not self.RUVD--[[ and self.ROCh--]] then + if not self.BrakeTimer then self.BrakeTimer = CurTime() end + elseif self.BrakeTimer then + self.BrakeTimer = false + end + self.PTR = (self.BrakeTimer and CurTime()-self.BrakeTimer > 1.5) + if (not self.RNT or not self.RUVD) and (Train.Acceleration > -0.8 and speed>3) then + if not self.EKTimer then self.EKTimer = CurTime() end + elseif self.EKTimer then + self.EKTimer = false + end + if self.EKTimer and CurTime()-self.EKTimer > 3 then self.EK=false end + --print(Format("RNT:%s BR1:%s BR2:%s KSR:%s KRT:%s",self.RNT,self.BR1,self.BR2,self.KSR,self.KRT)) + --print(Format("RNT:%s KMO:%s KSR:%s RUVD:%s PTR:%s",self.RNT and 1 or 0,self.KMO and 1 or 0,self.KSR and 1 or 0,self.RUVD and 1 or 0,self.PTR and 1 or 0)) + self.MOT = (self.RUVD and not self.ROD) and 1 or 0 + self.T1 = self.RUVD and 0 or 1 + self.T2 = self.PTR and 1 or 0 + self.Ring = self.RNT and 0 or 1 + self.EPK = self.EK and 1 or 0 + self.V1 = (self.RO and self.KMO) and 1 or 0 + self.V2 = speed<0.5 and self.V1 or 0 + else + self.Enabled = 0 + + --Timers + self.DriveTimer = false + self.BrakeTimer = false + self.EKTimer = false + + self.AcceptF5 = false + + + self.ROCh = false + self.RSS = false + self.RSS = false + self.RO = false + self.EK = false + self.R2O = false + self.ROD = false + + self.KSR = false + self.KMO = false + self.KRT = false + self.BR1 = false + self.BR2 = false + self.RUVD = false + self.PTR = false + + self.RNT = false + + self.VRD = false + + self.MOT = 0 + self.T1 = 0 + self.T2 = 0 + self.Ring = 0 + self.EPK = 0 + self.V1 = 0 + self.V2 = 0 + end +end diff --git a/lua/metrostroi/systems/sys_81_722_bukp.lua b/lua/metrostroi/systems/sys_81_722_bukp.lua new file mode 100644 index 0000000..02ce486 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_722_bukp.lua @@ -0,0 +1,449 @@ +-------------------------------------------------------------------------------- +-- 81-722 train control unit +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_722_BUKP") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.CurrentCab = false + self.Trains = {} + + self.PVU = {} + + self.Power = 0 + self.Active = 0 + self.Back = 0 + + self.SOSD = 0 + self.LPT = false + + self.Speed = 0 + + self.PowerCommand = 0 + self.PowerPrecent = 0 + + self.DoorLeft = 0 + self.DoorRight = 0 +end + +function TRAIN_SYSTEM:Outputs() + return {"Active","Back","SOSD","PowerPrecent","DoorRight","DoorLeft"} +end + +function TRAIN_SYSTEM:Inputs() + return {} +end +if TURBOSTROI or CLIENT then return end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + +function TRAIN_SYSTEM:CANReceive(source,sourceid,target,targetid,textdata,data) + if textdata == "Init" then + self.UnInitialized[sourceid] = data + return + end + if not self.Trains[sourceid] then return end + if textdata == "Get" then + self.Reset = CurTime() + elseif self.Trains[sourceid] then + self.Trains[self.Trains[sourceid]][textdata] = data + end +end +function TRAIN_SYSTEM:CState(name,value,target,bypass) + local BUKV = self.Train.BUKV + if self.Reset or self.States[name] ~= value or bypass then + for i,t in ipairs(self.Trains) do + self.Train:CANWrite("BUKP",BUKV.TrainIndex,target or "BUKV",t.ID,name,value) + end + self.States[name] = value + end +end + +function TRAIN_SYSTEM:CStateTarget(name,targetname,targetsys,targetid,value) + local BUKV = self.Train.BUKV + if self.Reset or self.States[name] ~= value or bypass then + self.States[name] = value + self.Train:CANWrite("BUKP",BUKV.TrainIndex,targetsys,targetid,targetname,value) + end +end +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local Electric = Train.Electric + local BUKV = Train.BUKV + self.Power = Train.SF19.Value*Train.Electric.Power + local Power = self.Power>0 + if self.State ~= Power then + if Power then + self.States = {} + self.Trains = {} + self.Prepared = CurTime()-9.5 + self.CheckTrain = nil + else + self.Prepared = false + self.CheckTrain = false + end + self.State = Power + end + + if self.State and self.Prepared and self.Prepared ~= true and CurTime()-self.Prepared > 10 then + self.Prepared = CurTime() + self.CheckTrain = CurTime()-0.8 + self.UnInitialized = {} + self.BackCab = nil + self.Trains = {} + self.Strength = 0 + self.Train:CANWrite("BUKP",BUKV.TrainIndex,"BUKV",false,"Init") + end + if self.CheckTrain and CurTime()-self.CheckTrain > 1 then + + local builded = false + local curr,new = BUKV.TrainIndex + for i=1,8 do + for k,t in pairs(self.UnInitialized) do + if k == curr then + self.Trains[curr] = table.insert(self.Trains,{Type=t.type,ID=curr}) + if i>1 and t.type==0 and (#self.Trains==3 or #self.Trains==6 or #self.Trains==8) then + builded = true + break + end + if not t.front and not t.rear then + break + end + if t.front and not self.Trains[t.front] then + new = t.front + elseif t.rear and not self.Trains[t.rear] then + new = t.rear + end + self.UnInitialized[k] = nil + break + end + end + if not new or curr==new then + break + end + curr=new + end + self.CheckTrain = false + if builded then + self.Prepared = true + for i,t in ipairs(self.Trains) do + self.Train:CANWrite("BUKP",BUKV.TrainIndex,"BUKV",t.ID,"Get") + if t.Type == 0 and t.ID ~= BUKV.TrainIndex then + self.BackCab = t.ID + end + self.PVU[i] = {} + end + else + self.Trains = {} + end + end + + self.LSD = true + local back + if self.Prepared==true then + self.LPT = false + local sosd,ring + for i,train in ipairs(self.Trains) do + for iD=1,8 do + if not train["Door"..iD.."Closed"] then + self.LSD = false + break + end + end + if train.DPBD1 then + self.LPT = true + end + if train.OldBUKVTimer ~= train.BUKVTimer then + train.BUKVWork = CurTime() + train.OldBUKVTimer = train.BUKVTimer + end + if train.BUKVWork and CurTime()-train.BUKVWork>3 then + train.BUKVWork = false + end + if not train.AsyncAssembly and not train.NoAssembly and self.PowerCommand ~= 0 then train.NoAssembly=CurTime() end + if train.NoAssembly and (train.AsyncAssembly or self.PowerCommand==0) then train.NoAssembly=CurTime() end + if train.NoAssembly and train.NoAssembly~=true and CurTime()-train.NoAssembly > 2 then train.NoAssembly=true end + + if train.Type == 0 and train.ID ~= BUKV.TrainIndex and train.CabActive then + back = true + end + if train.SOSD then sosd = not sosd end + if train.Ring then ring = true end + end + if back or Electric.CabActiveVRU>0 then self.Active = 0 end + self.Back = (back and Electric.CabActive==0) and 1 or 0 + self.SOSD = sosd and 1 or 0 + self.Ring = ring or Train:GetNW2Int("MFDUError") == 11 or (Train:GetNW2Int("MFDUError") == 3 and self.Speed<3) + + self:CState("CabActive",Electric.CabActive>0,"BUKP") + self:CState("SOSD",Train.SF24.Value>0 and Train.SOSDEnable.Value>0,"BUKP") + self:CState("Ring",Train.Ring.Value > 0 and Electric.CabActive == 0,"BUKP") + self.Speed = Train.Speed + else + self.LPT = false + self.SOSD = 0 + self.Ring = 0 + self.Active = 0 + self.Speed = 0 + self.Back = 0 + end + local RR = Train.KRO.Value~=1 + if self.Prepared==true and Electric.CabActive>0 and Electric.Emer == 0 then + local MFDU = Train.MFDU + local TrainCount = #self.Trains + local TrainCHalf = TrainCount/2 + if not self.PVU.Sync then + for i,t in ipairs(self.Trains) do + for p=1,7 do + self.PVU[i][p] = t["PVU"..p] + end + Train:CANWrite("BUKP",Train:GetWagonNumber(),"BUKV",t.ID,"Orientate",i < #self.Trains/2) + end + self.PVU.Sync = true + end + local MK2c = 0 + local MK2m = 0 + local DriveCommand = self.PowerCommand>0 + local HVCount,NoHV = 0,0 + local pos = Train.BKCU.ControllerPosition + + local BARSPower = Train.BARS.Enabled>0 + --local block = + MFDU:Error(3,1,(MFDU:ErrorGet("3_1") or pos>0 and not self.LastDrive) and BARSPower and Train.BARS.MOT==0) + self.LastDrive = pos>0 + MFDU:Error(13,1,RR and (Train.Electric.BTBPower>0 and Train.Electric.BTB==0),0) + MFDU:Error(14,1,Train.Pneumatic.TrainLinePressure<6.4) + MFDU:Error(15,1,(MFDU:ErrorGet("15_1") or DriveCommand) and Train.Compressor.Value==0) + MFDU:Error(38,1,back) + --MFDU:Error(39,1,Train.VAD.Value>0) + MFDU:Error(40,1,Train.VAD.Value>0) + MFDU:Error(41,1,self.Speed>3 and Train.VAD.Value>0) + MFDU:Error(43,1,BARSPower and Train.BARS.EPK==0,0) + --MFDU:Error(16,1,DriveCommand and Train.Compressor.Value==0) + MFDU:Error(55,1,NoHV>0 and NoHV==HVCount) + MFDU:Error(59,1,(MFDU:ErrorGet("59_1") or DriveCommand) and Train.KRO.Value==0) + MFDU:Error(60,1,(DriveCommand or MFDU:ErrorGet("60_1")) and Train.PassLight.Value==0) + + MFDU:Error(58,1,pos>0 and not RR) + + local errors = {[4]={},[7]={}} + for i,t in ipairs(self.Trains) do + for p=1,7 do + self:CStateTarget("PVU"..i.."_"..p,"PVU"..p,"BUKV",t.ID,self.PVU[i][p]) + end + if t.Type<=1 and Train.Compressor.Value == 1 then + if i>TrainCHalf then--TrainCount<=3 and i>TrainCHalf or TrainCount>3 and i%2==0 then + MK2m = MK2m+1 + if not t.MKWork and not t.MKTimeOut then t.MKTimeOut = CurTime() end + if t.MKWork and t.MKTimeOut then t.MKTimeOut = false end + if t.MKTimeOut~=true or t.MKWork then MK2c = MK2c+1 end + if t.MKTimeOut and t.MKTimeOut ~= true and CurTime()-t.MKTimeOut>(t.PantDisabled and 2 or 0.5) then t.MKTimeOut = true end + end + HVCount = HVCount + 1 + if t.NoHV then NoHV = NoHV+1 end + else t.MKTimeOut = false end + --MFDU:Error(4,i,DriveCommand and not t.DoorsClosed) + --MFDU:Error(7,i,DriveCommand and t.EmergencyBrake) + errors[4][i]=(MFDU:ErrorGet("4_"..i) or DriveCommand) and not t.DoorsClosed + errors[7][i]=(MFDU:ErrorGet("7_"..i) or DriveCommand) and t.EmergencyBrake + + MFDU:Error(8,i,(MFDU:ErrorGet("8_"..i) or DriveCommand) and t.BCPressure>0.3,4) + MFDU:Error(9,i,(MFDU:ErrorGet("9_"..i) or DriveCommand) and t.PBPressure<3) + MFDU:Error(12,i,t.WagNOrientated,0.3) + MFDU:Error(17,i,(MFDU:ErrorGet("17_"..i) or DriveCommand) and not t.LightsEnabled and Train.PassLight.Value>0) + MFDU:Error(29,i,t.TFront or t.TRear or t.TLeft or t.TRight) + if t.Type==0 then + MFDU:Error(11,i,not t.CabActive and (t.TLeft or t.TRight or t.TFront),0.2) + end + + MFDU:Error(37,i,not t.BUKVWork or CurTime()-t.BUKVWork > 3,0.5) + MFDU:Error(42,i,t.DisablePant) + if t.Orientation then + MFDU:Error(56,i,not self.PVU[i][1] and self.States.OpenLeft and (t.Door1Closed or t.Door2Closed or t.Door3Closed or t.Door4Closed),1) + MFDU:Error(57,i,not self.PVU[i][1] and self.States.OpenRight and (t.Door5Closed or t.Door6Closed or t.Door7Closed or t.Door8Closed),1) + else + MFDU:Error(56,i,not self.PVU[i][1] and self.States.OpenLeft and (t.Door5Closed or t.Door6Closed or t.Door7Closed or t.Door8Closed),1) + MFDU:Error(57,i,not self.PVU[i][1] and self.States.OpenRight and (t.Door1Closed or t.Door2Closed or t.Door3Closed or t.Door4Closed),1) + end + end + if #errors[4]0 then + if self.PowerDec then + self.PowerCommand = math.max(self.PowerCommand-diff,self.PowerCommand-dT*0.5) + else + self.PowerCommand = math.min(self.PowerCommand+(0.1-diff),self.PowerCommand+dT*0.5) + end + --else + --self.PowerCommand = math.max(self.PowerCommand+diff,self.PowerCommand+dT*0.5) + end + end + elseif pos < -1 then + self.PowerDec = true + self.PowerCommand = math.max(-1,self.PowerCommand-dT*0.5) + elseif pos < 0 then + if self.PowerCommand > 0 then self.PowerCommand = 0 end + if self.PowerCommand > -0.2 then + self.PowerCommand = math.max(-0.2,self.PowerCommand-dT*0.5) + self.PowerDec = true + else + local diff = math.Round((math.abs(self.PowerCommand*10)%1)/10,2) + if diff>0 then + if self.PowerDec then + self.PowerCommand = math.max(self.PowerCommand-(0.1-diff),self.PowerCommand-dT*0.5) + else + self.PowerCommand = math.min(self.PowerCommand+diff,self.PowerCommand+dT*0.5) + end + --else + --self.PowerCommand = math.max(self.PowerCommand+diff,self.PowerCommand+dT*0.5) + end + end + elseif -0.1 > self.PowerCommand or self.PowerCommand > 0.1 then + local sign = self.PowerCommand > 0 and -1 or 1 + if self.PowerCommand > 0 then + self.PowerDec = true + self.PowerCommand = math.max(0,self.PowerCommand-dT*0.5) + else + self.PowerDec = false + self.PowerCommand = math.min(0,self.PowerCommand+dT*0.5) + end + else + self.PowerCommand = 0 + end + self.DoorsClosed = Train.Electric.LSD>0 and self.LSD and (self.DoorsClosed or pos<=0) + MFDU:Error(64,1,Train.Electric.LSD==0 and (pos>0 or MFDU:ErrorGet("64_1"))) + --MFDU:Error(64,1,Train.Electric.LSD==0 and self.States.CloseDoors,4) + MFDU:Error(5,1,not self.LSD and self.States.CloseDoors and (pos>0 or MFDU:ErrorGet("5_1"))) + local fault = false + for k,v in pairs(MFDU.Errors) do + if type(k) == "string" and MFDU.ErrorNames[MFDU.Log[v[1]][1]][2] == 1 then + fault = true + break + end + end + if not RR or back or Train.BKCU.Emergency>0 then + self.PowerCommand = 0 + elseif self.PowerCommand>0 and (not self.DoorsClosed and Train.VAD.Value==0 or Train.BARS.MOT==0 and Train.RCARS.Value>0 or Train.RCARS.Value==0 and Train.PB.Value==0 and Train.VAH.Value==0 or self.Blocked) --[[or fault]] then + self.PowerCommand = 0 + self.Blocked = true + else + self.Blocked = false + --[[ elseif Train.BKCU.Emergency >0 then + self.PowerCommand = -1--]] + end + local Command + if Train.Pneumatic.EPKLeaking then + Command = 1 + elseif Train.BARS.T1 > 0 then + Command = (Train.BARS.T1*0.5+Train.BARS.T2*0.4) + end + self.Braking = Command~=nil + self:CState("DriveStrength",Command or math.abs(self.PowerCommand)) + self:CState("BrakeTPlus",pos < -1) + self:CState("Brake",self.PowerCommand < 0 or Command~=nil) + self:CState("ARSBrake",Train.BARS.T1 > 0) + --Door controls + self.DoorLeft = (RR and Train.DoorSelect.Value==0 and Train.DoorClose.Value==1 and self.Speed<3) and 1 or 0 + self.DoorRight = (RR and Train.DoorSelect.Value==1 and Train.DoorClose.Value==1 and self.Speed<3) and 1 or 0 + MFDU:Error(61,1,(Train.DoorLeft1.Value > 0 or Train.DoorLeft2.Value > 0) and self.DoorLeft == 0 or Train.DoorRight.Value > 0 and self.DoorRight == 0) + self.OpenLeft = not self.States.CloseDoors and (Train.DoorLeft1.Value > 0 or Train.DoorLeft2.Value > 0) and self.DoorLeft > 0 + self.OpenRight = not self.States.CloseDoors and Train.DoorRight.Value > 0 and self.DoorRight > 0 + self:CState("OpenLeft",not self.States.CloseDoors and (self.States.OpenLeft or self.OpenLeft)) + self:CState("OpenRight",not self.States.CloseDoors and (self.States.OpenRight or self.OpenRight)) + if MFDU:ErrorGet("49_1") and MFDU:ErrorGet("49_1")[4] then + if not self.BackDoors then + self.BackDoors = CurTime() + elseif self.BackDoors and CurTime()-self.BackDoors > 1 then + self.BackDoors = nil + end + else + self.BackDoors = nil + end + MFDU:Error(49,1,(Train.DoorBack.Value>0 and Train.DoorSelect.Value==1 or MFDU:ErrorGet("49_1") and self.BackDoors~=nil) and not self.States.CloseDoors) + Train:CANWrite("BUKP",Train:GetWagonNumber(),"BUKV",self.Trains[#self.Trains].ID,"OpenRightBack",self.BackDoors and self.BackDoors~=true) + + if self.CloseRing and (Train.DoorLeft1.Value > 0 or Train.DoorLeft2.Value > 0 or Train.DoorRight.Value > 0 or self.LSD) then self.CloseRing = false end + if (not self.CloseRing or self.CloseRing and CurTime()-self.CloseRing<0) and Train.DoorClose.Value==2 and not self.LSD then self.CloseRing = CurTime() end + self:CState("CloseDoors",RR and Train.SF7.Value>0 and (Train.DoorClose.Value == 0 or (not self.CloseRing and Train.DoorClose.Value==2 or self.CloseRing and CurTime()-self.CloseRing>4))) + self:CState("PassLight",Train.PassLight.Value>0) + self:CState("PassVent",Train.PassVent.Value-1) + self:CState("ParkingBrake",Train.ParkingBrake.Value) + if BARSPower and Train.BARS.V2 > 0 or not BARSPower and math.abs(self.Speed) < 0.5 and self.PowerCommand < 0 then + self.StopV2 = true + elseif self.PowerCommand > 0 then + if self.StopV2 == true then + self.StopV2 = CurTime() + elseif self.StopV2 and CurTime()-self.StopV2 > 1 then + self.StopV2 = false + end + end + if BARSPower and Electric.Emer == 0 then + self:CState("PN1",Train.BARS.V1 > 0) + self:CState("PN2",self.StopV2) + elseif Electric.Emer == 0 then + self:CState("PN1",not not self.StopV2) + self:CState("PN2",not not self.StopV2) + else + self:CState("PN1",false) + self:CState("PN2",false) + end + self:CState("CloseRing",self.CloseRing and (CurTime()-self.CloseRing)%1<=0.5) + --[[ + self:CState("RVPB",(1-Train.RV["KRO5-6"])*Train.SF2.Value > 0) + self.ControllerState = stength + self:CState("DriveStrength",math.abs(stength)) + self:CState("Brake",stength < 0 and 1 or 0)--]] + local TL = self.Trains[1] and self.Trains[1].TLPressure or 0 + self.Compressor = self.Compressor and TL<8.2 or TL<6.5 + local DisableTP = Train.PantSC.Value*Train.SF13.Value+(1-Train.SF13.Value) + for i,t in ipairs(self.Trains) do + if self.Compressor then + local compressor = Train.Compressor.Value==1 and (i>TrainCHalf--[[ TrainCount<=3 and i>TrainCHalf or TrainCount>3 and i%2==0--]] ) or Train.Compressor.Value==2 and i<=TrainCHalf or (Train.Compressor.Value==3) and i>TrainCHalf or Train.Compressor.Value==4 + if Train.Compressor.Value == 1 and MK2cTrainCHalf or DisableTP==3 and i<=TrainCHalf or DisableTP==4) + --self:CStateTarget("Compressor","Compressor","BUV",t.id,false) + end + self.PowerPrecent = self.PowerCommand*100 + else + if self.PVU and self.PVU.Sync then + for i,t in ipairs(self.Trains) do + Train:CANWrite("BUKP",Train:GetWagonNumber(),"BUKV",t.ID,"Compressor",false) + --self:CStateTarget("Compressor","Compressor","BUV",t.id,false) + end + self.PVU.Sync = false + end + self.PowerCommand = 0 + self.PowerPrecent = 0 + self.DoorLeft = 0 + self.DoorRight = 0 + self.CloseRing = false + Train.MFDU:ErrorsReset() + end + if self.Reset and self.Reset ~= CurTime() then + if self.PVU then self.PVU.Sync = false end + self.Reset = nil + end +end diff --git a/lua/metrostroi/systems/sys_81_722_bukv.lua b/lua/metrostroi/systems/sys_81_722_bukv.lua new file mode 100644 index 0000000..753225d --- /dev/null +++ b/lua/metrostroi/systems/sys_81_722_bukv.lua @@ -0,0 +1,317 @@ +-------------------------------------------------------------------------------- +-- 81-722 wagon control unit +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_722_BUKV") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.Power = 0 + self.Commands = {} + self.States = {} + + self.Drive = 0 + self.Brake = 0 + self.Strength = 0 + self.CurTime = CurTime() + + self.DisableLights = 0 + self.EnableLights = 0 + self.VentMode = 0 + self.DisablePSN = 0 + self.DisableTP = 0 + self.EnableMK = 0 + self.DisablePant = 0 +end + +function TRAIN_SYSTEM:Outputs() + return {"Power","Drive","Brake","Strength","DisableLights","EnableLights","DisablePSN","EnableMK","DisableTP","DisablePant","VentMode"} +end + +function TRAIN_SYSTEM:CState(name,value) + if self.CurrentBUP and (self.Reset or self.States[name] ~= value) then + self.States[name] = value + self.Train:CANWrite("BUKV",self.TrainIndex,"BUKP",self.CurrentBUP or false,name,value) + end +end +function TRAIN_SYSTEM:CANReceive(source,sourceid,target,targetid,textdata,numdata) + if textdata == "Init" and not numdata then + local Train = self.Train + self.Commands[sourceid] = {} + Train:CANWrite("BUKV",self.TrainIndex,"BUKP",sourceid,"Init",{ + front=Train.FrontTrain and Train.FrontTrain.BUKV and Train.FrontTrain.BUKV.TrainIndex, + rear=Train.RearTrain and Train.RearTrain.BUKV and Train.RearTrain.BUKV.TrainIndex, + type=Train.Electric.Type + }) + elseif textdata == "Get" then + self.Reset = CurTime() + elseif textdata == "Orientate" then + self.OrientateBUP = sourceid + self.FirstHalf = numdata + self.FirstGroup = numdata + self.Reset = CurTime() + elseif self.CurrentBUP then + if not self.Commands[sourceid] then self.Commands[sourceid] = {} end + self.Commands[sourceid][textdata] = numdata + end +end +function TRAIN_SYSTEM:Get(id) + local Commands = self.Commands[self.CurrentBUP] + if Commands then + return Commands[id] + end +end + +function TRAIN_SYSTEM:Inputs() + return {} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end +function TRAIN_SYSTEM:Think() + if CurTime()-self.CurTime < 0.1 then return end + self.CurTime = CurTime() + + local Train = self.Train + local wagcount = #Train.WagonList + self.Power = Train.Electric.Power + self.State = self.Power > 0 and Train.SF51.Value > 0.5 + self.TrainIndex = Train:GetWagonNumber() + if self.State then + if not self.States.BUKVTimer then + self.Train:CANWrite("BUKV",Train:GetWagonNumber(),"BUKP",nil,"Get",1) + end + --[[ for i=1,4 do + self:CState("Door"..i.."Closed", Train.Pneumatic.LeftDoorState[i] == 0) + self:CState("Door"..(i+4).."Closed", Train.Pneumatic.RightDoorState[i] == 0) + end--]] + --self:CState("DoorTorec", Train.RearDoor or Train.FrontDoor) + --self:CState("DoorBack", Train.PassengerDoor or Train.CabinDoorLeft or Train.CabinDoorRight) + --self:CState("EmPT",Train:ReadTrainWire(28) > 0) + --self:CState("NoAssembly", Train.K3_4.Value == 0) + --self:CState("ParkingBrakeEnabled", Train.Pneumatic.ParkingBrakePressure < 2.95) + --self:CState("BEPPBroken", false) + -- self:CState("EmergencyBrakeGood", Train.Pneumatic.BrakeCylinderPressure >= (2.4+Train.Pneumatic.WeightLoadRatio*0.9)-0.1) + -- self:CState("ReserveChannelBraking", Train:ReadTrainWire(28)>0) + -- self:CState("PTEnabled", Train.Pneumatic.BrakeCylinderPressure > 0.2) + -- self:CState("PTBad", false) + -- self:CState("PTReady", Train.Pneumatic.AirDistributorPressure >= (2.4+Train.Pneumatic.WeightLoadRatio*0.9)-0.1) + -- self:CState("PTReplace", self.PTReplace and CurTime()-self.PTReplace > 1.5) + -- self:CState("BTBReady", Train.Pneumatic.BTBReady) + --self:CState("TLPressure", math.Round(Train.Pneumatic.TrainLinePressure,1)) + --self:CState("BLPressure", math.Round(Train.Pneumatic.BrakeLinePressure,1)) + --self:CState("BCPressure", math.Round(Train.Pneumatic.BrakeCylinderPressure,1)) + --self:CState("HPPressure", math.Round(Train.Pneumatic.AirDistributorPressure,1)) + --self:CState("WeightLoad", math.Round(Train.Pneumatic.WeightLoadRatio,2)) + -- self:CState("PantDisabled", self.Pant) + -- self:CState("EnginesBroken", false) + -- self:CState("BBEEnabled", self.BBE) + -- self:CState("BBEBroken", false) + -- self:CState("HVBad", Train.Electric.Power750V < 550) + -- self:CState("LVBad", Train.Electric.Battery80V < 62) + -- self:CState("EnginesDone", self.EnginesDone)-- and math.abs(Train.Speed) < 7.5) + -- self:CState("EnginesBrakeBroke", (self:Get("Brake") or 0) > 0 and Train.BV.Value == 0 or Train.Electric.Brake > 0 and (Train.K3_4.Value*Train.K5_6.Value == 0)) + -- self:CState("PassLightEnabled", self.MainLights) + -- self:CState("BVEnabled", Train.BV.Value > 0) + -- self:CState("DriveStrength", math.min(0,Train.Engines.BogeyMoment*2)) + -- self:CState("BrakeStrength", math.max(0,Train.Engines.BogeyMoment*2)) + -- self:CState("VagEqConsumption", 15)--15-25 + --self:CState("LVVoltage", math.floor(Train.Electric.Battery80V)) + --self:CState("MKVoltage", math.Round(Train.Electric.BVKA_KM1*math.Rand(9,13),1)) + -- self:CState("Vent1Enabled", Train.Electric.Vent1>0) + -- self:CState("Vent2Enabled", Train.Electric.Vent2>0) + -- self:CState("HeatEnabled", false) + self:CState("WagNOrientated", self.Orientation == self.RevOrientation) + self:CState("Orientation", self.Orientation) + self:CState("BadCombination", (Train:ReadTrainWire(3)*Train:ReadTrainWire(4)) > 0) + + local BUFTPower = Train.Electric.BUFT > 0 + local Pneumatic = Train.Pneumatic + self:CState("BLPressure", BUFTPower and math.Round(Pneumatic.BrakeLinePressure,1) or 0) + self:CState("TLPressure", BUFTPower and math.Round(Pneumatic.TrainLinePressure,1) or 0) + self:CState("BCPressure", BUFTPower and math.Round(Pneumatic.BrakeCylinderPressure,1) or 0) + self:CState("SKPressure", BUFTPower and math.Round(Pneumatic.AirDistributorPressure,1) or 0) + self:CState("PBPressure", BUFTPower and math.Round(Pneumatic.ParkingBrakePressure,1) or 0) + self:CState("WeightLoad", BUFTPower and math.Round(Pneumatic.WeightLoadRatio,2) or 0) + self:CState("EmergencyBrake",BUFTPower and Pneumatic.EmergencyBrakeActive) + local closed = true + for i=1,4 do + self:CState("Door"..i.."Closed", Train.Pneumatic.LeftDoorState[i] == 0) + self:CState("Door"..(i+4).."Closed", Train.Pneumatic.RightDoorState[i] == 0) + if Train.Pneumatic.LeftDoorState[i] > 0 or Train.Pneumatic.RightDoorState[i] > 0 then closed = false end + end + self:CState("DoorsClosed", closed) + self:CState("TPEnabled", true)--FIXME + self:CState("TRear", Train.RearDoor) + if Train.Electric.HaveBUKP==0 then + self:CState("TFront", Train.FrontDoor) + else + self:CState("TFront", Train.PassengerDoor) + self:CState("TLeft", Train.CabinDoorLeft) + self:CState("TRight", Train.CabinDoorRight) + end + self:CState("DPBD1", Train.Panel.BrW>0) + self:CState("LVVoltage", Train.Electric.Power*65) + if Train.Electric.HaveAsyncInverter>0 then + self:CState("MKWork", Train.Pneumatic.Compressor) + self:CState("PSNWork", Train.Electric.PSN>0) + + local Electric = Train.Electric + local AsyncInverter = Train.AsyncInverter + self:CState("HVVoltage", math.floor(Electric.Main750V)) + self:CState("Current", math.Round(AsyncInverter.Current,1)) + self:CState("DTorque", math.max(0,math.Round(AsyncInverter.Torque,1))) + self:CState("BTorque", math.max(0,-math.Round(AsyncInverter.Torque,1))) + + self:CState("AsyncOverheat", false) --FIXME + self:CState("AsyncAssembly", AsyncInverter.Mode~=0 and (AsyncInverter.Mode==self.Drive*(1-self.Brake) or AsyncInverter.Mode*(-1)==self.Brake*(1-self.Drive))) + self:CState("AsyncFail", AsyncInverter.Mode==0 and (self.Drive>0 and self.Brake>0) or AsyncInverter.Power == 0) + self:CState("AsyncEFail", (AsyncInverter.Mode==0 or AsyncInverter.EDone > 0) and self.Brake>0) --FIXME + --self:CState("AsyncBroken", AsyncInverter.Power == 0) --FIXME + self:CState("AsyncProtection", AsyncInverter.Power == 0) --FIXME + self:CState("BVState", not self:Get("PVU5")) --FIXME + self:CState("AsyncEDone", AsyncInverter.EDone>0 or AsyncInverter.Mode==-1 and Train.Speed < 3.5) --FIXME + + self:CState("NoHV", Electric.Main750V < 550) + + local TR = Train.TR + self:CState("PantDisabled", TR.ContactState1==0 and TR.ContactState2==0 and TR.ContactState3==0 and TR.ContactState4==0) + self:CState("DisablePant", self.DisablePant>0) + else + local speed = Train.Speed + self.EDone = self.Brake*((speed<=5 or speed<=10 and (self.Mode==0 or self.EDone > 0)) and 1 or 0) + self.Mode = self.Brake + self:CState("AsyncEDone", self.EDone>0) --FIXME + end + self:CState("LightsEnabled", Train.Panel.MainLights>0) --FIXME + self:CState("Vent1Enabled", Train.Electric.Vent1>0) + self:CState("Vent2Enabled", Train.Electric.Vent2>0) + --? Сигнал датчика Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ð·Ð°Ð¶Ð°Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ + --! Сигнал датчика Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ‚Ð¾ÐºÐ¾Ð¿Ñ€Ð¸Ñ‘Ð¼Ð½Ð¸ÐºÐ¾Ð² + --? Сигнал датчика ÑоÑтоÑÐ½Ð¸Ñ Ð·Ð°Ð¼ÐºÐ° торцевой двери + --? Сигнал датчика иÑправноÑти мотор-компреÑÑора + --! Сигнал датчика Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð±Ð»Ð¾Ðº-тормоза 5 – 8 + --? Сигнал датчика перегрева Ð±ÑƒÐºÑ 1 – 4 + --? Сигнал датчика перегрева Ð±ÑƒÐºÑ 5 – 8 + --? Ток Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð»ÐµÐ½Ð¸Ñ ÐœÐš + --? Ток Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð»ÐµÐ½Ð¸Ñ Ð’Ðž + --? Сигнал датчика Ð·Ð°Ð¼Ñ‹ÐºÐ°Ð½Ð¸Ñ 75 Ð’ на ÐºÐ¾Ñ€Ð¿ÑƒÑ + --? СоÑтоÑние петли безопаÑноÑти + --? ÐеиÑправноÑть вентилÑтора тормозного реоÑтата + + for i=1,5 do + self:CState("PVU"..i, self:Get("PVU"..i)) + end + if self:Get("PVU6") then + self.AsyncDisabled = true + elseif self.AsyncDisabled == true then + self.AsyncDisabled = CurTime() + elseif self.AsyncDisabled and CurTime()-self.AsyncDisabled > 1.5 then + self.AsyncDisabled = false + end + self:CState("PVU6", not not self.AsyncDisabled) + self:CState("PVU7", self:Get("PVU7")) + self:CState("BUKVTimer", math.floor((CurTime()*2)%10)) + elseif self.States.BUKVTimer then + for k,v in pairs(self.Commands) do + self.Commands[k] = false + end + for k,v in pairs(self.States) do + self.States[k] = false + end + end + + if self.Reset and self.Reset ~= CurTime() then + self.Reset = nil + end + + if self.Emer ~= Train.Electric.Emer then + self.Emer = Train.Electric.Emer + if self.Emer > 0 then + for i=1,7 do + self.States["PVU"..i] = false + end + end + end + + local PTReplace = self.States.AsyncEFail + if PTReplace and not self.PTReplace and Train.Electric.HaveAsyncInverter>0 then + self.PTReplace = CurTime() + if self.States.AsyncProtection == 0 or self:Get("PVU5") or self:Get("PVU6") then + self.PTReplace = self.PTReplace - 1.2 + elseif self.States.AsyncAssembly then + self.PTReplace = self.PTReplace + 1.3 + end + end + if not PTReplace and self.PTReplace then self.PTReplace = nil end + local PN = self.PTReplace and CurTime()-self.PTReplace > 1.2 or self.States.AsyncEDone + self.PN1 = self:Get("PN1") or PN and (self:Get("DriveStrength") and self:Get("DriveStrength") > 0) or self:Get("ARSBrake") and (Train.Electric.Type>1 or not self.States.AsyncAssembly) + self.PN2 = self:Get("PN2") or PN and (self:Get("DriveStrength") and (not self.States.AsyncEDone and not PTReplace and self:Get("DriveStrength") > 0.2 or (PTReplace or self.States.AsyncEDone) and self:Get("DriveStrength") > 0.7 or self:Get("BrakeTPlus"))) + + --self.MK = (not self:Get("PVU3") and self:Get("Compressor"))and 1 or 0 + + self.OpenLeft = not self:Get("PVU1") and (self:Get("OpenLeft") and self.Orientation or self:Get("OpenRight") and not self.Orientation) + self.OpenRight = not self:Get("PVU1") and (self:Get("OpenRight") and self.Orientation or self:Get("OpenLeft") and not self.Orientation) + self.OpenRightBack = self:Get("OpenRightBack") and Train.Electric.HaveBUKP>0 + self.CloseDoors = self:Get("PVU1") or self:Get("CloseDoors") + local strength,brake = self:Get("DriveStrength") or 0,self:Get("Brake") and 1 or 0 + self.Drive = (1-brake)*(strength>0 and 1 or 0) + self.Brake = brake*(strength>0 and 1 or 0) + local BCPressure = self.States.BCPressure or 0 + if self.Brake>0 and BCPressure < 1.5 or self.Drive>0--[[ and BCPressure < 0.5]] then + self.Strength = strength*100 + else + self.Strength = 0 + end + local clRing = self:Get("CloseRing") + if self.CloseRing ~= clRing then + self.CloseRing = clRing + if clRing then Train:PlayOnce("door_alarm",1,1) end + end + self.DisableLights = self:Get("PVU2") and 1 or 0 + self.EnableLights = self:Get("PassLight") and 1 or 0 + self.DisablePSN = self:Get("PVU3") and 1 or 0 + self.EnableMK = (not self:Get("PVU4") and self:Get("Compressor")) and 1 or 0 + self.DisableTP = (self:Get("PVU5") or self:Get("PVU6")) and 1 or 0 + self.DisablePant = (self:Get("DisablePant") or self:Get("PVU7")) and 1 or 0 + self.ParkingBrake = self:Get("ParkingBrake") + local vent = self:Get("PassVent") or 0 + if vent==1 then + self.VentMode = Train.Pneumatic.WeightLoadRatio>0.6 and 2 or Train.Pneumatic.WeightLoadRatio>0.1 and 1 or 0 + elseif vent>1 then + self.VentMode = vent-1 + else + self.VentMode = vent + end + + self.Orientation = Train:ReadTrainWire(4) > 0 + self.RevOrientation = Train:ReadTrainWire(3) > 0 + local BadOrientation = false + if self.Orientation and self.Orientation == self.RevOrientation then + self.Orientation = false + self.RevOrientation = false + BadOrientation = true + end + if self.State and self.Orientation ~= self.RevOrientation then + if not self.BadOrientation and self.OrientateBUP and (not self.Commands[self.OrientateBUP] or self.Orientation and self.Commands.Forward ~= self.OrientateBUP or self.RevOrientation and self.Commands.Back ~= self.OrientateBUP) then + if self.Orientation then self.Commands.Forward = self.OrientateBUP else self.Commands.Back = self.OrientateBUP end + self.OrientateBUP = nil + elseif BadOrientation then + self.OrientateBUP = nil + end + elseif not self.State then self.OrientateBUP = nil end + local ReOrientation = self.State and (self.Orientation or self.RevOrientation) and (self.Orientation ~= self.PrevOrientation or self.RevOrientation ~= self.PrevRevOrientation or self.CurrentBUP ~= (self.Orientation and self.Commands.Forward or self.Commands.Back)) + if ReOrientation then + self.CurrentBUP = self.Orientation and self.Commands.Forward or self.Commands.Back + self.Reset = CurTime() + if self.CurrentBUP then + self.Commands[self.CurrentBUP] = {} + Train:CANWrite("BUKV",Train:GetWagonNumber(),"BUKP",self.CurrentBUP,"Get") + end + end + self.BadOrientation = BadOrientation + self.PrevOrientation = self.State and self.Train:ReadTrainWire(4) > 0 + self.PrevRevOrientation = self.State and self.Train:ReadTrainWire(3) > 0 +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_81_722_electric.lua b/lua/metrostroi/systems/sys_81_722_electric.lua new file mode 100644 index 0000000..7976900 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_722_electric.lua @@ -0,0 +1,328 @@ +-------------------------------------------------------------------------------- +-- 81-722 electric schemes +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_722_Electric") +TRAIN_SYSTEM.DontAccelerateSimulation = false + +local function Clamp(val,min,max) + return math.max(min,math.min(max,val)) +end + +TRAIN_SYSTEM.T722 = 0 +TRAIN_SYSTEM.T723 = 1 +TRAIN_SYSTEM.T724 = 2 +function TRAIN_SYSTEM:Initialize() + self.Type = self.Type or self.T722 + self.HaveBUKP = 0--self.HaveBUKP or self.Type==self.T722 and 1 or 0 + self.HaveAsyncInverter = 0--self.HaveAsyncInverter or self.Type 0 then + Train:WriteTrainWire(5,Train.SF1.Value*(Train.BattOn.Value+BO*(1-Train.Battery.Value))) + Train:WriteTrainWire(6,BO*Train.SF1.Value*(Train.BattOff.Value+Train.BatteryOff.Value)) + S["RU"] = BO*Train.SF4.Value*C(Train.VRU.Value==0) + self.CabActiveVRU = BO*C(Train.VRU.Value==2)*Train.SF2.Value + self.CabActive = BO*C(Train.VRU.Value>0)*((self.CabActiveVRU+Train.BUKP.Active)*Train.SF3.Value+S["RU"])*Train.SF2.Value + Panel.LRU = BO*(1-self.CabActive) + Panel.AVS = BO*Train.Pneumatic.SD2 + Panel.EmergencyDriveL = S["RU"] + Panel.EmergencyBrakeTPlusL = S["RU"] + + S["RV"] = BO*self.CabActive*Train.SF2.Value + Train:WriteTrainWire(4,S["RV"]*Train.SF21.Value) + Train:WriteTrainWire(3,0) + S["RVnE"] = BO*self.CabActive*Train.SF2.Value + Train:WriteTrainWire(12,math.max(S["RV"]*C(Train.KRO.Value==2)+S["RU"])) + Train:WriteTrainWire(13,S["RVnE"]*C(Train.KRO.Value==0)) + Train:WriteTrainWire(36,BO*Train.SF3.Value*C(Train.VRU.Value >0)*self.CabActive) + Train:WriteTrainWire(34,S["RU"]) + Train:WriteTrainWire(19,S["RU"]*Train.EmergencyDrive.Value) + + Train:WriteTrainWire(27,BO*S["RU"]) + Train:WriteTrainWire(29,self.BTB*S["RU"]*(C(Panel.Controller<=-2)+Train.EmergencyBrakeTPlus.Value)) + Train:WriteTrainWire(30,self.BTB*S["RU"]*C(Panel.Controller<=-1)) + + Panel.V4 = (S["RVnE"]*C(Train.KRO.Value~=1)+S["RU"])*Train.SF6.Value + + Train:WriteTrainWire(-8,BO*min(1,(S["RV"]+S["RU"]))*Train.SF7.Value) + Train:WriteTrainWire(9,W[8]*(1-self.CabActive)*C(Train.VRU.Value==1)*Train.SF7.Value) + self.LSD = W[9]*Train.SF7.Value + + S["V6m"] = min(1,Train.BARS.EPK*Train.RCARS.Value+(1-Train.RCARS.Value)*(Train.PB.Value+Train.VAH.Value)) + local BTB = Panel.V4*(1-Train.Pneumatic.SD2)*S["V6m"] + --Train:WriteTrainWire(24,BTB*(1-Train.EmergencyBrake.Value)) + --Train:WriteTrainWire(25,BTB == 0 and W[26] > 0 and W[24]*self.BTB or 0) + + self.V6Power = BO*Train.SF5.Value*S["V6m"] + + if BTB > 0 then + if self.BTBTimer == nil then self.BTBTimer = CurTime() end + if self.BTBTimer and CurTime()-self.BTBTimer>0.3 then self.BTBTimer = false end + else + self.BTBTimer = nil + end + self.BTBPower = BTB + self.BTB = min(1,(self.BTBTimer~=false and 1 or 0)+self.BTB*W[26]) + if BTB > 0 and W[26]==0 and not self.TestTimer then + self.TestTimer = CurTime() + elseif W[26]>0 and self.TestTimer then + self.TestTimer = nil + end + S["NEmergencyBrake"] = (1-Train.EmergencyBrake.Value)*C(Panel.Controller~=-3) + Train:WriteTrainWire(26,(1-BTB)*W[24]*S["NEmergencyBrake"]) + Train:WriteTrainWire(24,BTB*S["NEmergencyBrake"]) + Train:WriteTrainWire(25,BTB*self.BTB*(self.KTR==3 and 0 or 1)) + + Train:WriteTrainWire(37,(S["RU"]+Train.BUKP.DoorRight)*Train.SF7.Value*Train.DoorRight.Value) + Train:WriteTrainWire(38,(S["RU"]+Train.BUKP.DoorLeft)*Train.SF7.Value*(Train.DoorLeft1.Value+Train.DoorLeft2.Value)) + Train:WriteTrainWire(39,S["RU"]*Train.SF7.Value*C(Train.DoorClose.Value==0)) + + + Panel.BattOn = BO + Panel.BattOff = BO*Train.BatteryOff.Value + + Panel.RC = Train.EmergencyRadioPower.Value + Panel.CabLights = (BO*Train.CabinLight.Value/2+Panel.RC*0.5--[[ *(0.5-Train.PanelLight.Value/4)--]] )*Train.SF25.Value + Panel.VPR1 = (BO+Panel.RC)*Train.SF14.Value + Panel.VPR2 = (BO+Panel.RC)*Train.SF15.Value + Panel.PanelLights = BO*Train.PanelLight.Value*Train.SF25.Value + + + Panel.Headlights1 = (S["RV"]+S["RU"])*C(Train.KRO.Value==2)*Train.SF22.Value*C(Train.Headlights.Value==1) + Panel.Headlights2 = (S["RV"]+S["RU"])*C(Train.KRO.Value==2)*Train.SF22.Value*C(Train.Headlights.Value==2) + Panel.RedLights = (BO*Train.SF22.Value+Train.VKF.Value*Train.SF23.Value)*(1-S["RVnE"]+C(Train.KRO.Value<2)) + Panel.SOSD = S["RV"]*Train.SF7.Value*Train.SF24.Value*Train.BUKP.SOSD*(1-self.LSD) + Panel.BARSPower = BO*min(1,(Train.SF8.Value*C(Train.BARSMode.Value > 0)+Train.SF9.Value*C(Train.BARSMode.Value < 2))*Train.RCARS.Value) + Panel.ARSPower = Panel.BARSPower*(1-Train.BUKP.Back)*Train.ARS.Value + Panel.ALSPower = BO*(1-Train.BUKP.Back)*Train.ALS.Value + + Panel.UPOPower = BO*S["RV"]*Train.R_UPO.Value + Train:WriteTrainWire(15,BO*(Train.UPO.LineOut*Train.SarmatUPO.UPOActive+Train.SarmatUPO.LineOut)) + --print(W[15],Train.UPO.LineOut*Train.SarmatUPO.UPOActive,Train.SarmatUPO.LineOut) + + self.Emer = S["RU"] + end + S["DoorsP"] = BO*Train.SF36.Value + Train:WriteTrainWire(8,W[-8]*S["DoorsP"]*Train.S1.Value) + + Panel.DoorsW = S["DoorsP"]*(1-Train.S1.Value) + Panel.BrW = BO*Train.SF36.Value*Train.Pneumatic.SD3 + Panel.AnnouncerPlaying = W[15] + S["WagP"] = Train.Battery.Value*Train.SF33.Value + if self.HaveAsyncInverter > 0 then + local Async = Train.AsyncInverter + local HV = BO*C(550 < self.Aux750V and self.Aux750V < 975) + self.AsyncEmer = W[34]*Train.SF59.Value + self.AsyncActive = min(1,W[36]*Train.SF58.Value+self.AsyncEmer) + self.Reverser = self.AsyncActive*(W[12]-W[13]) + Panel.GRP = BO*((1-Train.SF56.Value)+BUKV.DisableTP) + + + Async:TriggerInput("Power",BO*Train.SF56.Value*(1-BUKV.DisableTP)) + + local speed = math.abs(Async.Speed) + if self.AsyncEmer > 0 then + Async:TriggerInput("Drive",W[19]) + Async:TriggerInput("Brake",0) + if W[19] > 0 then + Async:TriggerInput("TargetTorque",(1.0+Clamp(speed/15,0,1)-Clamp((speed-30)/38,0,2))*(3)) + else + Async:TriggerInput("TargetTorque",0) + end + else + Async:TriggerInput("Drive",BUKV.Drive) + Async:TriggerInput("Brake",BUKV.Brake) + local command = (BUKV.Strength/100)*(BUKV.Drive-BUKV.Brake) + if command > 0 then + Async:TriggerInput("TargetTorque",(math.abs(command)^0.5)*(1.0+Clamp(speed/15,0,1)-Clamp((speed-30)/38,0,2))*(1+Train.Pneumatic.WeightLoadRatio*0.3)) + elseif command < 0 then + Async:TriggerInput("TargetTorque",Clamp((speed-1)/4,0,1)*math.abs(command)*2.4*(1+Train.Pneumatic.WeightLoadRatio*0.3)) + else + Async:TriggerInput("TargetTorque",0) + end + end + + self.PSN = HV*(1-BUKV.DisablePSN) + self.LightsHV = min(1,self.PSN+self.LightsHV)*BUKV.EnableLights + if self.PSN == 0 then + if not self.PassLightsTimer then self.PassLightsTimer = CurTime() end + if self.PassLightsTimer and CurTime()-self.PassLightsTimer > 20 then self.LightsHV = 0 end + elseif self.PassLightsTimer then + self.PassLightsTimer = nil + end + Train:WriteTrainWire(32,self.LightsHV) + Train:WriteTrainWire(33,self.PSN) + self.MK = self.PSN*BUKV.EnableMK + + self.DisablePant = BO*BUKV.DisablePant*Train.SF37.Value + + self.EnergyChange = Async.Mode>0 and (Async.Current^2)*2.8 or 0 + self.Itotal = Async.Current + --[[ if self.Main750V > 900 or Async.Mode>0 then + self.Recurperation = false + elseif self.Main750V < 875 and Async.Mode<0 then + end--]] + if Async.Mode<0 and Async.State>0 then + self.Recurperation = self.Main750V < 940 and 1 or 0 + self.Iexit = self.Iexit+(-Async.Current*2*self.Recurperation-self.Iexit)*dT*2 + --[[ if self.Main750V>550 then + self.Iexit = self.Iexit+(-Async.Current*2*self.Recurperation-self.Iexit)*dT*2 + else + self.Iexit = 0 + end--]] + self.Chopper = (self.Main750V>910 or self.Main750V<550) and 1 or 0 + else + self.Recurperation = 0 + self.Iexit = 0 + self.Chopper = 0 + end + --print(self.Recurperation,self.Iexit,self.Main750V) + self.ElectricEnergyUsed = self.ElectricEnergyUsed + math.max(0,self.EnergyChange)*dT + self.ElectricEnergyDissipated = self.ElectricEnergyDissipated + math.max(0,-self.EnergyChange)*dT + end + local vent = Train.BUKV.VentMode + self.Vent1 = (BO*C(vent==-1)+W[33]*C(vent>0))*Train.SF47.Value + self.Vent2 =W[33]*C(vent>1)*Train.SF48.Value + Panel.MainLights = W[32]*Train.SF45.Value*(1-BUKV.DisableLights) + Panel.EmergencyLights = S["WagP"]*Train.SF45.Value*Train.SF46.Value + self.BUFT = BO*Train.SF55.Value + Train.BatteryOn:TriggerInput("Set",W[5]*Train.SF32.Value) + Train.BatteryOff:TriggerInput("Set",W[6]*Train.SF32.Value) + local BatterySound = (1-Train.Battery.Value)*Train.BatteryOn.TargetValue+Train.Battery.Value*Train.BatteryOff.TargetValue + if BatterySound~=self.BatterySound then + self.BatterySound = BatterySound + if BatterySound>0 then Train:PlayOnce("battery_pneumo","bass",1) end + end + Train.Battery:TriggerInput("Close",Train.BatteryOn.Value) + Train.Battery:TriggerInput("Open",Train.BatteryOff.Value) + Train:WriteTrainWire(50,Train.Battery.Value) + + + Panel.PassSchemePowerL = BO*Train.SF34.Value + Panel.PassSchemePowerR = BO*Train.SF35.Value + --self.Train:LoadSystem("BatteryOn","Relay",nil,{open_time=0.6,close_time=8}) + --self.Train:LoadSystem("BatteryOff","Relay",nil,{open_time=0.6,close_time=8}) + --[[ --OU + Train:WriteTrainWire(34,P*(Train.RV["KRO1-2"]*Train.SF2.Value + Train.RV["KRR1-2"]*Train.SF3.Value)) + --RU + Train:WriteTrainWire(36,Train.SF3.Value*Train.EmergencyControls.Value) + + --XOD1 + Train:WriteTrainWire(19,P*Train.RV["KRR7-8"]*Train.SF10.Value*Train.BARS.BTB*Train.EmerX1.Value) + --XOD2 + Train:WriteTrainWire(45,P*Train.RV["KRR7-8"]*Train.SF10.Value*Train.BARS.BTB*Train.EmerX2.Value) + + --ORIENTATION + + --PARKING + Train:WriteTrainWire(11,P*Train.ParkingBrake.Value) + local KM1 = P*Train.SF6.Value*Train.RV["KRO11-12"] + local KM2 = P*Train.SF6.Value*Train.RV["KRO15-16"] + --REVERSER + Train:WriteTrainWire(12,P*(Train.RV["KRR3-4"]+KM1)*Train.SF11.Value) + Train:WriteTrainWire(13,P*(Train.RV["KRR9-10"]+KM2)*Train.SF11.Value) + + --EMER BRAKE + --BTB + Train:WriteTrainWire(10,P*Train.EmergencyCompressor.Value) + + Train:WriteTrainWire(40,P*Train.EmergencyDoors.Value) + Train:WriteTrainWire(39,P*Train.SF22.Value*Train.EmerCloseDoors.Value) + Train:WriteTrainWire(38,P*Train.SF21.Value*Train.DoorLeft.Value) + Train:WriteTrainWire(37,P*Train.SF21.Value*Train.DoorRight.Value) + --]] +end diff --git a/lua/metrostroi/systems/sys_81_722_horn.lua b/lua/metrostroi/systems/sys_81_722_horn.lua new file mode 100644 index 0000000..8f4de2c --- /dev/null +++ b/lua/metrostroi/systems/sys_81_722_horn.lua @@ -0,0 +1,53 @@ +-------------------------------------------------------------------------------- +-- 81-722 horn +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_722_Horn") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.Active = false +end + +function TRAIN_SYSTEM:Outputs() --"21", + return { "Active" } +end + +function TRAIN_SYSTEM:Inputs() + return { "Engage"} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Engage" then + self.Active = value > 0.5 + self.Train:SetNW2Bool("HornState",self.Active) + end +end + +function TRAIN_SYSTEM:Think() +end + +function TRAIN_SYSTEM:ClientThink(dT) + local active = self.Train:GetNW2Bool("HornState",false) + self.Active = self.Active or false + + -- Calculate pitch + local absolutePitch = 1 - math.exp(-10*self.Train:GetPackedRatio("TLPressure")) + local absoluteVolume = 1 - math.exp(-4*self.Train:GetPackedRatio("TLPressure")) + local pitch = 1 + -- Play horn sound + self.Train:SetSoundState("horn",self.Active and absoluteVolume or 0,absolutePitch*pitch,nil,1.09) + --[[ + if (self.Active ~= active) and (not active) then + if absolutePitch > 0.2 then + self.Train:PlayOnce(self.Train:GetNW2Bool("HornType",false) and "horn3_end" or "horn3_end","cabin",1.09,101.5*absolutePitch*pitch) --0.85 + end + end]] + --[[ + if (self.Active ~= active) and (active) then + self.Train.Transient = -5.0 + end]] + self.Active = active +end diff --git a/lua/metrostroi/systems/sys_81_722_mfdu.lua b/lua/metrostroi/systems/sys_81_722_mfdu.lua new file mode 100644 index 0000000..ad69c78 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_722_mfdu.lua @@ -0,0 +1,1662 @@ +-------------------------------------------------------------------------------- +-- 81-722 multifunctional display +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_722_MFDU") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.Power = 0 + + self.RouteNumber = 0 + self.StationNumber = 0 + self.DriverNumber = 0 + + self.CurTime = CurTime() + + self.State = 0 + self.MFDUL2State = 0 + self.MFDUL3State = 0 + self.MFDUL4State = 0 + self.Errors = {} + self.ErrorTimers = {} + self.Log = {} +end + +function TRAIN_SYSTEM:Outputs() + return {"Power"} +end + +function TRAIN_SYSTEM:Inputs() + return {} +end +if TURBOSTROI then return end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end +TRAIN_SYSTEM.ErrorNames = { + [1] = {"Ñбой РВ",1}, + [2] = {"Ñбой КУ",1}, + [3] = {"Блокировка режима «Ход» ÑиÑтемой БÐРС",1}, -- + [4] = {"Двери не закрыты на %d вагоне",1}, -- + [5] = {"Двери не закрыты",1}, -- + --[5] = {"Ðе закрыта Ð¥ Ð»ÐµÐ²Ð°Ñ Ð´Ð²ÐµÑ€ÑŒ на вагоне",1}, + --[6] = {"Ðе закрыта Ð¥ Ð¿Ñ€Ð°Ð²Ð°Ñ Ð´Ð²ÐµÑ€ÑŒ на вагоне",1}, + [7] = {"Приведение в дейÑтвие ÑкÑтренного Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° %d вагоне",1}, -- + [8] = {"Ðе отпущен пневматичеÑкий тормоз на %d вагоне",1}, + [9] = {"ИÑпользование ÑтоÑночного тормоза на %d вагоне",1},-- + --[10] = {"Перегрев Ð±ÑƒÐºÑ Ð½Ð° %d вагоне",1}, + [11] = {"Сработала Ð¾Ñ…Ñ€Ð°Ð½Ð½Ð°Ñ ÑигнализациÑ",2}, + [12] = {"%d вагон не ориентирован",1}, + [13] = {"Обрыв петли безопаÑноÑти",1}, + [14] = {"Ðизкое давление в напорной магиÑтрали",2}, + [15] = {"Включи МК",3}, + [16] = {"Ðет ÑвÑзи Ñ Ñ…Ð²Ð¾Ñтовым БУКП",2}, + [17] = {"Ðет оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ Ð½Ð° %d вагоне ",3}, + --[18] = {"Пожар в вагоне",1}, + --[19] = {"Срыв муфты на %d вагоне",1}, + --[20] = {"ÐеиÑправноÑть в пневматичеÑком подвешивании на вагоне",1}, + --[21] = {"Ðизкое напрÑжение бортÑети на вагоне",2}, + [22] = {"Отказ 1 канала ÑиÑтемы БÐРС",1}, + [23] = {"Отказ 2 канала ÑиÑтемы БÐРС",1}, + --[24] = {"Отказ МК на %d вагоне",2}, + [25] = {"Отказ вентилÑции на вагоне",3}, + --[26] = {"Ðет ÑвÑзи Ñ ÐŸÐ¡Ð Ð½Ð° вагоне",2}, + --[27] = {"Ðет ÑвÑзи Ñ Ð‘Ð£Ð¢ÐŸ на вагоне",2}, + --[28] = {"Ðет ÑвÑзи Ñ ÐДУТ на %d вагоне",2}, + [29] = {"Открыта Ñ‚Ð¾Ñ€Ñ†ÐµÐ²Ð°Ñ Ð´Ð²ÐµÑ€ÑŒ на %d вагоне",3}, + --[30] = {"Отключение БВ на %d вагоне",2}, + --[31] = {"нет ÑвÑзи Ñ Ð¡Ð ÐŸÐ˜",3}, + [32] = {"нет ÑвÑзи Ñ Ð¡Ð‘Ð£Ð¦Ð˜Ðš",3}, + --[33] = {"Отказ инвертора на вагоне",2}, + --[34] = {"Срабатывание защиты инвертора на вагоне",2}, + --[35] = {"Перегрев инвертора на %d вагоне",2}, + --[36] = {"Ðет Ñинхронизации времени Ñ Ð¡Ð ÐŸÐ˜",3}, + [37] = {"Ðет ÑвÑзи Ñ Ð‘Ð£Ð’ %d вагона",1}, + [38] = {"Ðктивны 2 кабины",1}, + [39] = {"Тормоз ÑƒÐ´ÐµÑ€Ð¶Ð°Ð½Ð¸Ñ Ð¾Ñ‚ БÐРС",3}, + [40] = {"Выбран режим «Движение без ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð²ÐµÑ€ÐµÐ¹Â»",3}, + [41] = {"Разгон в режиме «Движение без ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð²ÐµÑ€ÐµÐ¹Â»",3}, + [42] = {"Токоприемники на %d вагоне отключены",3}, + [43] = {"ЭкÑтренное торможение БÐРС",1}, + --[44] = {"Ðет ÑвÑзи Ñ ÐšÐŸÐ”",1}, + --[45] = {"нет ÑвÑзи Ñ Ð£ÐŸÐ˜-2",1}, + --[46] = {"нет ÑвÑзи Ñ Ð‘Ð¢Ð‘Ð£",1}, + --[47] = {"Ðе открываетÑÑ Ð¥ Ð»ÐµÐ²Ð°Ñ Ð´Ð²ÐµÑ€ÑŒ на %d вагоне",2}, + --[48] = {"Ðе открываетÑÑ Ð¥ Ð¿Ñ€Ð°Ð²Ð°Ñ Ð´Ð²ÐµÑ€ÑŒ на %d вагоне",2}, + [49] = {"Открытие левых дверей на хвоÑтовом вагоне",3}, + --[50] = {"Отказ ÑиÑтемы внутреннего Ð²Ð¸Ð´ÐµÐ¾Ð½Ð°Ð±Ð»ÑŽÐ´ÐµÐ½Ð¸Ñ Ð½Ð° вагоне",3}, + --[51] = {"Вызов ÑвÑзи «ПаÑÑажир-МашиниÑт» на вагоне",3}, + --[52] = {"ÐеиÑправноÑть ключей КПД",1}, + [53] = {"Срабатывание Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ñлектротормоза на %d вагоне",3}, + [54] = {"ÐедопуÑтимый ввод в ÑкÑплуатацию кабины хвоÑтового вагона",1}, + [55] = {"ОтÑутÑтвие напрÑÐ¶ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð½Ð¾Ð³Ð¾ рельÑа на вÑех вагонах",1}, + [56] = {"Ðе открываютÑÑ Ð»ÐµÐ²Ñ‹Ðµ двери на %d вагоне",2}, + [57] = {"Ðе открываютÑÑ Ð¿Ñ€Ð°Ð²Ñ‹Ðµ двери на %d вагоне",2}, + [58] = {"Ðе выбрано направление движениÑ",2}, + [59] = {"Выбрано направление Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Â«Ðазад»",3}, + [60] = {"ОÑвещение Ñалона выключено",3}, + [61] = {"Ðе выполнены вÑе уÑÐ»Ð¾Ð²Ð¸Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹",2}, + --[62] = {"ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð¼Ð°ÑˆÐ¸Ð½Ð¸Ñта",1}, + [63] = {"Падение Ð´Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² тормозной магиÑтрали на %d вагоне",2}, + [64] = {"Ðет ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð²ÐµÑ€ÐµÐ¹",1}, + [65] = {"Ðеполный ÑоÑтав",1}, +} +if SERVER then + function TRAIN_SYSTEM:ErrorRemove(ID,full) + local err = self.Errors[ID] + if err then + if err[2] then + table.remove(self.Errors,err[2]) + err[2] = nil + for k,v in ipairs(self.Errors) do self.Errors[v][2] = k end + --print(Format("Removed conf message with ErrID '%s'",ID)) + end + if full then + --print(Format("Removed message with ErrID '%s'",ID)) + self.Errors[ID] = nil + end + end + end + function TRAIN_SYSTEM:ErrorsReset() + if not self.ErrorsCleaned then + self.Errors = {} + self.ErrorsCleaned = true + end + end + function TRAIN_SYSTEM:ErrorCount() + local errors = 0 + for i,err in pairs(self.Errors) do + if type(i) == "string" and not err[5] then errors = errors + 1 end + end + return errors + end + function TRAIN_SYSTEM:ErrorGet(ID) + if not ID then return false end + local err = self.Errors[ID] + if not err then return false end + local logerr = self.Log[err[1]] + if not logerr then return false end + return logerr + end + function TRAIN_SYSTEM:Error(ErrID,WagID,status,time) + local ID = ErrID.."_"..WagID + local err = self.Errors[ID] + if not err and status and time and (not self.ErrorTimers[ID] or CurTime()-self.ErrorTimers[ID]<0) then + if not self.ErrorTimers[ID] then self.ErrorTimers[ID]=CurTime()+time end + return + elseif time then self.ErrorTimers[ID] = nil end + + if not err and status then + if time then self.ErrorTimers[ID] = nil end + self.ErrorsCleaned = false + local logID = table.insert(self.Log,{ErrID,WagID,Metrostroi.GetSyncTime()}) + local index + for i,v in ipairs(self.Errors) do + local ErrIDT = self.Log[self.Errors[v][1]][1] + if (not index or i self.ErrorNames[ErrID][2] then + index = i + end + end + if index then + self.Errors[ID] = {logID,table.insert(self.Errors,index,ID)} + else + self.Errors[ID] = {logID,table.insert(self.Errors,ID)} + end + for k,v in ipairs(self.Errors) do self.Errors[v][2] = k end + --print(Format("Message with ErrID '%s' have ID:%d",ID,logID)) + elseif err and not status then + local logerr = self.Log[err[1]] + if not logerr[5] then logerr[5] = true end + if logerr[4] then + self:ErrorRemove(ID,true) + end + end + end + function TRAIN_SYSTEM:ErrorConfirm(ID) + local err = self.Errors[ID] + local logerr = err and self.Log[err[1]] + if logerr and (not logerr[4] or self.Errors[err[2]]) then + --print(Format("Confirmed message with ErrID '%s' have ID:%d",ID,err[2])) + self:ErrorRemove(ID) + logerr[4] = Metrostroi.GetSyncTime() + end + end + + function TRAIN_SYSTEM:Touch(value,x,y) + local Train = self.Train + if self.State <= 0 or Train.BUKP.Back>0 or math.random() < 0.06 and value then return end + local Active = Train.Electric.CabActive>0 + local lineSel = 0 + if self.MFDUL2State == 0 then --Мы на оÑновном Ñкране + for i=2,Active and 9 or 2 do + local px,py = 1+(i-1)*80,537 + if px < x and x < px+78 and py < y and y < py+62 and i~=6 then + if not value then --FIXME + self.MFDUL2State = i + + if i==2 then --Ðомер маршрута и Ñ‚.д + self.RouteN = self.RouteNumber + self.StationN = self.StationNumber + self.DriverN = self.DriverNumber + self.Selected = 0 + self.NewActive = false + end + if i==3 then self.Selected = 0 self.LogSelected = 0 end + if i==4 or i==5 or i>=7 then --ПневмоÑиÑтема + self.Selected = 0 + self.Page = 0 + end + x = 0 + y = 0 + selected = i + else + lineSel = i + end + end + end + --отбитие ошибок + if self.Errors[1] and 84 < x and x < 84+601 and 60 < y and y < 60+319 and value then + self:ErrorConfirm(self.Errors[1]) + end + end + if self.MFDUL2State == 2 then --Ðомер маршрута и Ñ‚.д + local br = false + for i=0,9 do + local px,py = 416 + ((i-1)%3)*115,124+90*(math.ceil(i/3)-1) + if i==0 then px,py=531,394 end + if px < x and x < px+88 and py < y and y < py+73 then --Ввод циферок Ñ Ñ‚Ð°Ñ‡Ð° + if not value then + if self.Selected == 1 and (not self.RouteN or self.RouteN < 99) then self.RouteN = tonumber((self.RouteN or "")..i) end + if self.Selected == 2 and (not self.StationN or self.StationN < 99) then self.StationN = tonumber((self.StationN or "")..i) end + if self.Selected == 3 and (not self.DriverN or self.DriverN < 9999) then self.DriverN = tonumber((self.DriverN or "")..i) end + else + lineSel = 11+i + end + end + end + --Выбираем окошко и ÑбраÑываем ввод + if Active and 141 < x and x < 141+148 and 151 < y and y < 151+38 and self.Selected == 0 and not self.NewActive then + self.Selected = 1 + self.RouteN = false + end + if Active and 141 < x and x < 141+148 and 257 < y and y < 257+38 and self.Selected == 0 and not self.NewActive then + self.Selected = 2 + self.StationN = false + end + if Active and 98 < x and x < 98+248 and 363 < y and y < 363+38 and self.Selected == 0 and not self.NewActive then + self.Selected = 3 + self.DriverN = false + end + if 98 < x and x < 98+248 and 438 < y and y < 438+86 then --Ð Ñто у Ð½Ð°Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ðµ кабины + self.NewActive = true + end + --Ð¡Ð±Ñ€Ð¾Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð¾ + if 721 < x and x < 721+78 and 537 < y and y < 537+62 then + if value then + lineSel = 1 + elseif (self.Selected > 0 or self.NewActive) then + if self.Selected == 1 then self.RouteN = self.RouteNumber end + if self.Selected == 2 then self.StationN = self.StationNumber end + if self.Selected == 3 then self.DriverN = self.DriverNumber end + self.Selected = 0 + self.NewActive = false + --br = true + end + end + --Подтверждение Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ + if 561 < x and x < 561+78 and 537 < y and y < 537+62 then + if value then + lineSel = 2 + else + if self.Selected == 1 then self.RouteNumber = self.RouteN end + if self.Selected == 2 then self.StationNumber = self.StationN end + if self.Selected == 3 then self.DriverNumber = self.DriverN end + if self.NewActive then + if Train.BUKP.Prepared == true then + Train.BUKP.Active = 1-Train.BUKP.Active + end + end + self.Selected = 0 + self.NewActive = false + if Train.BUKP.Active==0 then self.MFDUL2State = 0 end + end + end + if 391 < x and x < 391+78 and 537 < y and y < 537+62 then + if value then + lineSel = 3 + elseif (self.Selected > 0 or self.NewActive) then + if self.Selected == 1 then self.RouteN = false end + if self.Selected == 2 then self.StationN = false end + if self.Selected == 3 then self.DriverN = false end + if self.NewActive then self.NewActive = false end + end + end + Train:SetNW2Int("MFDUERouteNumber",self.RouteN or -1) + Train:SetNW2Int("MFDUEStationNumber",self.StationN or -1) + Train:SetNW2Int("MFDUEDriverNumber",self.DriverN or -1) + Train:SetNW2Int("MFDUSelected",self.Selected) + --if br then return end --Хак Ð´Ð»Ñ Ð±Ð»Ð¾ÐºÐ° кнопки Обратно + end + if self.MFDUL2State == 3 then + for i=0,6 do + if 1+80*i < x and x < 1+80*i+78 and 537 < y and y < 537+62 then + if value and i~=4 then + lineSel = i+1 + if i<2 then + self.LogSelected = i==0 and 0 or (self.Selected==1 and self:ErrorCount() or #self.Log)-1 + elseif i==2 then + self.LogSelected = math.max(self.LogSelected-1,0) + elseif i==3 then + self.LogSelected = math.min(self.LogSelected+1,(self.Selected==1 and self:ErrorCount() or #self.Log)-1) + end + else + if i>=5 then + self.Selected = i-5 + self.LogSelected = 0 + end + end + end + end + Train:SetNW2Int("MFDUSelected",self.Selected) + end + if (self.MFDUL2State == 4 or self.MFDUL2State == 8 or self.MFDUL2State == 9) then --Ðомер маршрута и Ñ‚.д + local max = self.MFDUL2State == 8 and 4 or 2 + for i=0,max do + if 1+80*i < x and x < 1+80*i+78 and 537 < y and y < 537+62 then + if value then + lineSel = i+1 + else + self.Selected = i + end + end + end + Train:SetNW2Int("MFDUSelected",self.Selected) + end + if self.MFDUL2State == 5 and value then + local BUKP = Train.BUKP + for i=1,#BUKP.Trains do + if i>6+self.Page then break end + local i = i-self.Page-1 + local pvu = BUKP.PVU[i+1] + + if 13+i*131 < x and x < 130+i*131 and 110+61*0 < y and y < 160+61*0 then + pvu[1] = not pvu[1] + end + if 13+i*131 < x and x < 130+i*131 and 110+61*1 < y and y < 160+61*1 then + pvu[2] = not pvu[2] + end + if BUKP.Trains[i+1].Type < 2 then + if 13+i*131 < x and x < 130+i*131 and 110+61*2 < y and y < 160+61*2 then + pvu[3] = not pvu[3] + end + if 13+i*131 < x and x < 130+i*131 and 110+61*3 < y and y < 160+61*3 then + pvu[4] = not pvu[4] + end + --[[ if 13+i*131 < x and x < 130+i*131 and 110+61*4 < y and y < 160+61*4 then + pvu[5] = not pvu[5] + end--]] + if 13+i*131 < x and x < 130+i*131 and 110+61*5 < y and y < 160+61*5 then + pvu[6] = not pvu[6] + end + if 13+i*131 < x and x < 130+i*131 and 110+61*6 < y and y < 160+61*6 then + pvu[7] = not pvu[7] + end + end + end + end + if (self.MFDUL2State == 4 or self.MFDUL2State == 5 or self.MFDUL2State == 7 or self.MFDUL2State == 8 or self.MFDUL2State == 9) then + if 561 < x and x < 561+78 and 537 < y and y < 537+62 then + if value then + lineSel=8 + else + self.Page = math.max(self.Page - 1,0) + end + end + if 641 < x and x < 641+78 and 537 < y and y < 537+62 then + if value then + lineSel=9 + else + self.Page = math.max(0,math.min(self.Page + 1,#Train.BUKP.Trains-6)) + end + end + Train:SetNW2Int("MFDUPage",self.Page) + end + local back = 721 < x and x < 721+78 and 537 < y and y < 537+62 + if self.MFDUL4State > 0 and back then + if value then lineSel = 10 else self.MFDUL4State = 0 end + elseif self.MFDUL3State > 0 and back then + if value then lineSel = 10 else self.MFDUL3State = 0 end + elseif self.MFDUL2State > 0 and back then + if value then lineSel = 10 else self.MFDUL2State = 0 end + end + Train:SetNW2Int("MFDULineSel",lineSel) + end + + function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local BUKP = Train.BUKP + self.Power = Train.SF20.Value*Train.Electric.Power + + local Power = self.Power>0 + if not Power and self.State ~= 0 then + self.State = 0 + self.MFDUTimer = nil + end + if Power and self.State == 0 then + self.State = -1 + self.MFDUTimer = CurTime()-math.Rand(-0.5,1) + end + + if self.State == -1 and self.MFDUTimer and CurTime()-self.MFDUTimer > 7 then + self.State = -2 + self.MFDUTimer = CurTime()-math.Rand(-0.5,1) + end + if self.State == -2 then + if self.MFDUTimer and CurTime()-self.MFDUTimer > 4 then + self.State = -3 + self.MFDUTimer = CurTime()-math.Rand(-0.3,0.5) + self.Windows95 = math.random() >= 0.98 + Train:SetNW2Bool("MFDUWin95Egg",self.Windows95) + end + end + if self.State == -3 and self.Windows95 and self.MFDUTimer and CurTime()-self.MFDUTimer > 6 then + self.State = -4 + self.MFDUTimer = CurTime()-math.Rand(-0.3,0.5) + end + if self.State == -3 and not self.Windows95 and self.MFDUTimer and CurTime()-self.MFDUTimer > 3 or self.State == -4 and self.Windows95 and self.MFDUTimer and CurTime()-self.MFDUTimer > 0.5 then + self.State = 1 + self.MFDUL2State = 0 + self.MFDUL3State = 0 + self.MFDUL4State = 0 + end + + local Active = Train.Electric.CabActive>0 + local trains = BUKP.Trains + if self.State > 0 then + if (BUKP.Power == 0 or Train.Electric.Emer > 0) and not self.BUKPTimeout then self.BUKPTimeout = CurTime()-Train.Electric.Emer*2 end + if BUKP.Power > 0 and Train.Electric.Emer == 0 and self.BUKPTimeout then self.BUKPTimeout = false end + + if Active and BUKP.Power then + if BUKP.States.Brake then + Train:SetPackedRatio("MFDUPowerCommand",-BUKP.States.DriveStrength or 0) + else + Train:SetPackedRatio("MFDUPowerCommand",BUKP.States.DriveStrength or 0) + end + Train:SetNW2Bool("MFDUARSBrake",BUKP.Braking) + Train:SetNW2Int("MFDUSpeed",BUKP.Speed) + Train:SetNW2Bool("MFDUBARSActive",Train.Panel.ARSPower>0) + + if self.MFDUL2State == 0 then + local BARS = Train.BARS + Train:SetNW2Int("MFDUSpeedLimit",BARS.F1>0 and 80 or BARS.F2>0 and 70 or BARS.F3>0 and 60 or BARS.F4>0 and 40 or BARS.F5>0 and 0 or -1) + Train:SetNW2Bool("MFDUALSActive",Train.Panel.ARSPower>0) + + end + elseif not Active then + if self.MFDUL2State > 2 then + self.MFDUL2State = 0 + end + Train:SetNW2Int("MFDUSpeed",0) + self.MFDUL3State = 0 + self.MFDUL4State = 0 + end + end + if self.State==-10 then + Train:SetNW2Int("MFDUSpeed",BUKP.Speed) + end + Train:SetNW2Int("MFDUState",self.State) + if self.BUKPTimeout and CurTime()-self.BUKPTimeout > 0.2 then + if self.State == -10 and BUKP.Power > 0 and Train.Electric.Emer==0 then + self.State = 1 + elseif self.State > 0 then + self.State = -10 + self.MFDUL2State = 0 + self.MFDUL3State = 0 + self.MFDUL4State = 0 + end + Train:SetPackedBool("MFDUEmer",Train.Electric.Emer>0) + self.BUKPTimeout = CurTime() + end + if CurTime()-self.CurTime < 0.1 then return end + self.CurTime = CurTime() + if self.State > 0 --[[ and #trains>0 --]] then + Train:SetNW2Int("MFDUDriverNumber",self.DriverNumber) + if self.MFDUL2State == 2 then + Train:SetPackedBool("MFDUNewActive",self.NewActive) + end + + if Active and BUKP.Power then + for i,train in ipairs(trains) do + Train:SetNW2Int("MFDUWagNum"..i,train.ID) + Train:SetNW2Bool("MFDUWagHead"..i,train.Type==0) + Train:SetNW2Bool("MFDUWagTyp"..i,train.Type<=1) + end + + if self.MFDUL2State == 0 then + Train:SetNW2Int("MFDUL2TL1",(trains[1].TLPressure or 0)*10) + Train:SetNW2Int("MFDUL2BL1",(trains[1].BLPressure or 0)*10) + local hv = 0 + for i,train in ipairs(trains) do + if train.HVVoltage and train.HVVoltage > hv then + hv = train.HVVoltage + end + if train.HVVoltage then + Train:SetNW2Int("MFDUTrainErr"..i,not train.BUKVWork and 1 or train.PVU6 and 4 or train.AsyncFail and 2 or (BUKP.Speed>0.1 and train.NoHV) and 3 or train.NoAssembly==true and 6 or 0) + else + Train:SetNW2Int("MFDUTrainErr"..i,not train.BUKVWork and 1 or 0) + end + end + Train:SetNW2Int("MFDUTrainVoltage",hv) + local errors = self:ErrorCount() + Train:SetNW2Int("MFDUErrors",errors) + local err = self:ErrorGet(self.Errors[1]) + Train:SetNW2Int("MFDUError",err and err[1] or 0) + Train:SetNW2Int("MFDUErrorWag",err and err[2] or 0) + Train:SetNW2Int("MFDUErrorTime",err and err[3] or 0) + elseif self.MFDUL2State == 3 then + local errors = self:ErrorCount() + Train:SetNW2Int("MFDUErrorsA",#self.Log) + Train:SetNW2Int("MFDUErrorsB",errors) + local cerr = 1 + if self.Selected == 0 then + for i=#self.Log-self.LogSelected,1,-1 do + local err = self.Log[i] + if err then + Train:SetNW2Int("MFDUErrorType"..cerr,err[1]) + Train:SetNW2Int("MFDUErrorWag"..cerr,err[2]) + Train:SetNW2Int("MFDUErrorTime"..cerr,err[3]) + if cerr==1 then + Train:SetNW2Bool("MFDUErrorSolved",err[5]) + Train:SetNW2Int("MFDUErrorConfirmT",err[4] or -1) + end + cerr = cerr+1 + end + if cerr>18 then break end + end + else + local selskip = 0 + for i=#self.Log,1,-1 do + local err = self.Log[i] + if err and not err[5] then + if selskip>=self.LogSelected then + Train:SetNW2Int("MFDUErrorType"..cerr,err[1]) + Train:SetNW2Int("MFDUErrorWag"..cerr,err[2]) + Train:SetNW2Int("MFDUErrorTime"..cerr,err[3]) + if cerr==1 then + Train:SetNW2Bool("MFDUErrorSolved",err[5]) + Train:SetNW2Int("MFDUErrorConfirmT",err[4] or -1) + end + cerr = cerr+1 + end + selskip = selskip+1 + end + if cerr>18 then break end + end + end + Train:SetNW2Int("MFDULogSelected",self.LogSelected) + Train:SetNW2Int("MFDUErrorCount",math.min(18,(self.Selected==0 and #self.Log or errors)-self.LogSelected)) + elseif self.MFDUL2State == 4 then + if self.Selected == 0 then + for i,train in ipairs(trains) do + Train:SetNW2Int("MFDUL2BC"..i,train.BCPressure*10) + end + Train:SetNW2Int("MFDUL2TL1",trains[1].TLPressure*10) + Train:SetNW2Int("MFDUL2TL"..#trains,trains[#trains].TLPressure*10) + else + for i,train in ipairs(trains) do + Train:SetNW2Int("MFDUL2TL"..i,train.TLPressure*10) + Train:SetNW2Int("MFDUL2SK"..i,train.SKPressure*10) + Train:SetNW2Int("MFDUL2PB"..i,train.PBPressure*10) + Train:SetNW2Int("MFDUL2BL"..i,train.BLPressure*10) + end + end + elseif self.MFDUL2State == 5 then + for i,train in ipairs(trains) do + for p=1,train.Type<2 and 7 or 2 do + Train:SetPackedBool("MFDUDPVUC"..i.."_"..p,BUKP.PVU[i][p]) + Train:SetPackedBool("MFDUDPVUB"..i.."_"..p,train["PVU"..p]) + end + end + elseif self.MFDUL2State == 7 then + for i,train in ipairs(trains) do + if train.Orientation then + if train.Type==0 then + Train:SetPackedBool("MFDUDCabL"..i,train.TLeft) + Train:SetPackedBool("MFDUDCabR"..i,train.TRight) + end + Train:SetPackedBool("MFDUDF"..i,train.TFront) + Train:SetPackedBool("MFDUDB"..i,train.TRear) + for i2=0,3 do + Train:SetPackedBool("MFDUDL"..i2.."_"..i,not train["Door"..(i2+1).."Closed"]) + Train:SetPackedBool("MFDUDR"..i2.."_"..i,not train["Door"..(i2+5).."Closed"]) + end + else + if train.Type==0 then + Train:SetPackedBool("MFDUDCabL"..i,train.TRight) + Train:SetPackedBool("MFDUDCabR"..i,train.TLeft) + end + Train:SetPackedBool("MFDUDF"..i,train.TRear) + Train:SetPackedBool("MFDUDB"..i,train.TFront) + for i2=0,3 do + Train:SetPackedBool("MFDUDL"..i2.."_"..i,not train["Door"..(i2+5).."Closed"]) + Train:SetPackedBool("MFDUDR"..i2.."_"..i,not train["Door"..(i2+1).."Closed"]) + end + end + end + elseif self.MFDUL2State == 8 then + if self.Selected == 0 then + for i,train in ipairs(trains) do + Train:SetPackedBool("MFDUPassLights"..i,train.LightsEnabled) + if train.DTorque then + Train:SetPackedBool("MFDUPSN"..i,train.PSNWork) + Train:SetPackedBool("MFDUMK"..i,train.MKWork) + Train:SetPackedBool("MFDUTP"..i,not train.PantDisabled) + end + end + elseif self.Selected == 2 then + for i,train in ipairs(trains) do + Train:SetPackedBool("MFDUDPBD1"..i,not train.DPBD1) + end + elseif self.Selected == 3 then + for i,train in ipairs(trains) do + Train:SetPackedBool("MFDUVentEnabled1"..i,train.Vent1Enabled) + Train:SetPackedBool("MFDUVentEnabled2"..i,train.Vent2Enabled) + end + end + elseif self.MFDUL2State == 9 then + if self.Selected == 0 then + for i,train in ipairs(trains) do + if train.DTorque then + Train:SetNW2Int("MFDUTHD"..i,train.DTorque*10) + Train:SetNW2Int("MFDUTHB"..i,train.BTorque*10) + Train:SetNW2Int("MFDUTA"..i,train.Current*10) + end + end + else + for i,train in ipairs(trains) do + Train:SetPackedBool("MFDUScheme"..i,train.AsyncAssembly) + Train:SetPackedBool("MFDUInv"..i,not train.AsyncFail) + Train:SetPackedBool("MFDUAProt"..i,train.AsyncProtection) + Train:SetPackedBool("MFDUBadT"..i,train.AsyncEFail) + Train:SetPackedBool("MFDUBV"..i,train.BVState) + Train:SetPackedBool("MFDUKS"..i,not train.NoHV) + end + end + end + end + + --ErrorConfirm + Train:SetNW2Bool("MFDUIdent",BUKP.Prepared ~= true or not Active) + Train:SetPackedBool("MFDUActive",Active) + Train:SetPackedBool("MFDUBackCab",BUKP.Back>0) + + Train:SetPackedBool("MFDUTrainSD",BUKP.LSD) + Train:SetPackedBool("MFDUEmer",false) + + Train:SetNW2Int("MFDUL2State",self.MFDUL2State) + Train:SetNW2Int("MFDUWagNum",#trains) + end + end +else + local function createFont(name,font,size,weight) + surface.CreateFont("Metrostroi_"..name, { + font = font, + size = size, + weight = weight or 400, + blursize = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + }) + end + createFont("BUKPSpeed","Eurostar Metrostroi",80) + createFont("Calibri80","Calibri",80) + createFont("Calibri40","Calibri",40) + createFont("Calibri40B","Calibri",40,800) + createFont("Calibri60","Calibri",60) + createFont("Calibri30","Calibri",30) + createFont("Calibri35","Calibri",35) + createFont("Calibri25","Calibri",25,400) + createFont("Calibri26","Calibri",26,800) + createFont("Calibri23l","Calibri",23,400) + createFont("Calibri23","Calibri",23,800) + createFont("FixedSys35","FixedsysTTF",35) + createFont("722LastStation","soviet font",59,800) + local kontron_logo = surface.GetTextureID("models/metrostroi_train/81-722/screens/kontron_logo") + + local win95_splash = surface.GetTextureID("models/metrostroi_train/81-722/screens/windows95_splash") + local windows95_load = surface.GetTextureID("models/metrostroi_train/81-722/screens/windows95_load") + + local emer_drive = surface.GetTextureID("models/metrostroi_train/81-722/screens/emer_drive") + local comm_err = surface.GetTextureID("models/metrostroi_train/81-722/screens/commerr") + local main_screen = surface.GetTextureID("models/metrostroi_train/81-722/screens/main_screen") + + local route_num = surface.GetTextureID("models/metrostroi_train/81-722/screens/route_num") + + local failures = surface.GetTextureID("models/metrostroi_train/81-722/screens/failures") + + local pneumo_system = surface.GetTextureID("models/metrostroi_train/81-722/screens/pneumo_system") + local pneumo_system2 = surface.GetTextureID("models/metrostroi_train/81-722/screens/pneumo_system2") + local pneumo_arrow = surface.GetTextureID("models/metrostroi_train/81-722/screens/pneumo_arrow") + + local pvu = surface.GetTextureID("models/metrostroi_train/81-722/screens/pvu") + + local common = surface.GetTextureID("models/metrostroi_train/81-722/screens/common") + + local diag = surface.GetTextureID("models/metrostroi_train/81-722/screens/diag") + local ver = surface.GetTextureID("models/metrostroi_train/81-722/screens/ver") + local amp = surface.GetTextureID("models/metrostroi_train/81-722/screens/amp") + local volt = surface.GetTextureID("models/metrostroi_train/81-722/screens/volt") + + local doors = surface.GetTextureID("models/metrostroi_train/81-722/screens/doors") + + local vo = surface.GetTextureID("models/metrostroi_train/81-722/screens/vo") + + local tp1 = surface.GetTextureID("models/metrostroi_train/81-722/screens/tp2") + local tp2 = surface.GetTextureID("models/metrostroi_train/81-722/screens/tp1") + + local box = surface.GetTextureID("models/metrostroi_train/81-722/screens/box") + function TRAIN_SYSTEM:ClientThink(dT) + if not self.Train:ShouldDrawPanel("Vityaz") then return end + render.PushRenderTarget(self.Train.Vityaz,0,0,1024, 1024) + if self.PrepareLoad then + render.Clear(0, 0, 0, 0) + end + cam.Start2D() + if self.Train:GetNW2Int("MFDUState",0) ~= -1 then + surface.SetDrawColor(0,0,0) + surface.DrawRect(0,0,800,600) + self.PrepareLoad = true + elseif self.PrepareLoad then + surface.SetDrawColor(200,200,200) + surface.DrawRect(1,0,799,600) + self.PrepareLoad = false + end + self:BUKPMonitor(self.Train,dT) + cam.End2D() + render.PopRenderTarget() + end + local buttons = { + "ÐаÑтр.\nÑкрана", + "â„– марш.\nÑтан.\nмаш.", + "Отказы\n(%d)", + "Пнев.\nÑиÑтема", + "ПВУ", + "Диагн", + "Двери", + "Вагон.\nоборуд.", + "ТÑговый\nпривод.", + --"Теневой" + } + for i=1,#buttons do + local x = {} + for w in string.gmatch(buttons[i],"([^\n]+)") do + table.insert(x,w) + end + buttons[i] = x + end + + local mainerrs = { + "K ÐЕТ", + "П ÐЕТ", + "U ÐЕТ", + "П ОТКЛ", + "УПР", + true, + } + for i,str in ipairs(mainerrs) do + if str~=true and str:find(" ") then + mainerrs[i] = string.Explode(" ",mainerrs[i]) + end + end + + local errorstates = { + {"Ð",Color(255,0,0)}, + {"Б",Color(255,255,0)}, + {"Ð’",Color(0,255,255)}, + } + + function TRAIN_SYSTEM:ClientInitialize() + self.PowerCommand = 0 + self.PowerCommandSmooth = 0 + end + + local function drawButton(i,text,state,format,color) + if state then + if color then + surface.SetDrawColor(color) + else + surface.SetDrawColor(0,220,0) + end + else + surface.SetDrawColor(38,38,38) + end + surface.DrawRect(1+i*80,538,78,61) + Metrostroi.DrawRectOutline(1+i*80,538,78,61,Color(129,129,129),1) + if type(text)=="table" then + if #text > 1 then + for i1=1,#text do + local h = 40/(#text-#text%2) + draw.SimpleText(format and Format(text[i1],format) or text[i1],"Metrostroi_Calibri23",40+i*80,568-h+h*(i1-1)+(#text == 2 and h/2 or 0), state and Color(32,32,32) or Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + else + draw.SimpleText(format and Format(text[1],format) or text[1],"Metrostroi_Calibri23",40+i*80,568, state and Color(32,32,32) or Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + else + draw.SimpleText(format and Format(text,format) or text,"Metrostroi_Calibri23",40+i*80,568, state and Color(32,32,32) or Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + function TRAIN_SYSTEM:BUKPMonitor(Train,dT) + local state = Train:GetNW2Int("MFDUState",0) + local state2 = Train:GetNW2Int("MFDUL2State",0) + local state3 = Train:GetNW2Int("MFDUL3State",0) + local state4 = Train:GetNW2Int("MFDUL4State",0) + local help = Train:GetPackedBool("MFDUHelp") + local Active = Train:GetPackedBool("MFDUActive") + local Back = Train:GetPackedBool("MFDUBackCab") + local WagNum = Train:GetNW2Int("MFDUWagNum",0) + if state == -1 then + surface.SetDrawColor(255,0,0) + surface.DrawRect(200,0,1,600) + surface.SetDrawColor(0,0,20,15) + surface.DrawRect(201,0,599,600) + elseif state == -2 then + surface.SetTexture(kontron_logo) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(238,122,296,64,0) + + draw.SimpleText("Version 2.13.1215. Copyright (c) 2011 American Megatrends Inc.","Metrostroi_Calibri26",80, 196,Color(123,123,123),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("Kontron version NTC1R111, 01/31/2012 10:47:49","Metrostroi_Calibri26",80, 216,Color(123,123,123),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText("Press or to enter Setup. for Boot menu","Metrostroi_Calibri26",80, 236,Color(123,123,123),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + elseif state == -3 and Train:GetPackedBool("MFDUWin95Egg") then + render.SetScissorRect(2, 0, 800, 600, true) + surface.SetTexture(win95_splash) + surface.SetDrawColor(180,180,180) + surface.DrawTexturedRectRotated(512,512,1024,1024,0) + surface.SetTexture(windows95_load) + surface.SetDrawColor(180,180,180) + surface.DrawTexturedRectRotated(800+(RealTime()%4*200-400),591,800,14,0) + surface.DrawTexturedRectRotated(800+(RealTime()%4*200-400)-800,591,800,14,0) + render.SetScissorRect( 0, 0, 0, 0, false ) + elseif state == -10 then + if Train:GetPackedBool("MFDUEmer") then + surface.SetDrawColor(255,255,255) + surface.SetTexture(emer_drive) + surface.DrawTexturedRectRotated(512,512,1024,1024,0) + draw.SimpleText(math.floor(Train:GetNW2Int("MFDUSpeed",0)),"Metrostroi_BUKPSpeed",400, 303,Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(os.date("!%H:%M:%S",Metrostroi.GetSyncTime()),"Metrostroi_Calibri35",400, 485,Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + surface.SetDrawColor(255,255,255) + surface.SetTexture(comm_err) + surface.DrawTexturedRectRotated(512,512,1024,1024,0) + end + elseif state == 1 then + local PCmd = Train:GetPackedRatio("MFDUPowerCommand",0) + local lineSel = Train:GetNW2Int("MFDULineSel") + local dPCmd = math.abs(PCmd-self.PowerCommand)/0.8 + if dPCmd > 0.14 then + self.PowerCommand = PCmd + elseif self.PowerCommand < PCmd then + self.PowerCommand = math.min(self.PowerCommand+dT*0.8,PCmd) + elseif self.PowerCommand > PCmd then + self.PowerCommand = math.max(self.PowerCommand-dT*0.8,PCmd) + end + if self.PowerCommandSmooth < PCmd and dPCmd > 0.14 and PCmd <= 0 then + self.PowerCommandSmooth = PCmd + else + self.PowerCommandSmooth = self.PowerCommandSmooth+(self.PowerCommand-self.PowerCommandSmooth)*dT*20 + end + if state2 == 0 then + if Back then + draw.SimpleText("ЗаднÑÑ ÐºÐ°Ð±Ð¸Ð½Ð°","Metrostroi_Calibri35",400, 22,Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText("ОÑновной Ñкран","Metrostroi_Calibri35",400, 22,Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + + if Active then + if Train:GetNW2Bool("MFDUALSActive") then + local speedLimit = Train:GetNW2Int("MFDUSpeedLimit",-1) + if speedLimit == -1 then + draw.SimpleText("ÐЧ","Metrostroi_Calibri60",180, 80,Color(220,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("БÐРС","Metrostroi_Calibri30",180, 110,Color(220,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + elseif speedLimit >= 0 then + local color = Color(speedLimit < 60 and 255 or 0,speedLimit > 20 and 255 or 0,0) + draw.SimpleText(speedLimit,"Metrostroi_Calibri60",180, 80,color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("БÐРС","Metrostroi_Calibri30",180, 110,color,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + + local err = Train:GetNW2Int("MFDUError",0) + local errtbl = self.ErrorNames[err] + if err > 0 and errtbl then + local stbl = errorstates[errtbl[2]] + Metrostroi.DrawRectOutline(84,60,601,319,stbl[2],8 ) + draw.SimpleText(stbl[1],"Metrostroi_Calibri60",687-30,57+40, Color(127,127,127),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(Format(errtbl[1],Train:GetNW2Int("MFDUErrorWag")),"Metrostroi_Calibri30",384,300, Color(255,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(os.date("!%H:%M:%S",Train:GetNW2Int("MFDUErrorTime",0)),"Metrostroi_Calibri35",630, 92,Color(255,255,255),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + else + draw.SimpleText(os.date("!%H:%M:%S",Metrostroi.GetSyncTime()),"Metrostroi_Calibri30",384, 352,Color(255,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + if Train:GetNW2Bool("MFDUBARSActive") then + draw.SimpleText(math.floor(Train:GetNW2Int("MFDUSpeed",0)),"Metrostroi_BUKPSpeed",384, 220,Color(255,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("км/ч","Metrostroi_Calibri30",384, 260,Color(255,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText(math.floor(Train:GetNW2Int("MFDUSpeed",0)),"Metrostroi_BUKPSpeed",384, 220,Color(255,255,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("км/ч","Metrostroi_Calibri30",384, 260,Color(255,255,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + + else + if Back then + draw.SimpleText(os.date("!%H:%M:%S",Metrostroi.GetSyncTime()),"Metrostroi_Calibri30",384, 352,Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(math.floor(Train:GetNW2Int("MFDUSpeed",0)),"Metrostroi_BUKPSpeed",384, 220,Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("км/ч","Metrostroi_Calibri30",384, 260,Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText(os.date("!%H:%M:%S",Metrostroi.GetSyncTime()),"Metrostroi_Calibri40",384, 220,Color(255,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + + --draw.SimpleText(math.floor(Train:GetPackedRatio("FREQ",99)),"Metrostroi_BUKPSpeed",384, 150,Color(220,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + surface.SetDrawColor(38,38,38) + surface.DrawRect(24,476,751,34) + if Active and -0.01 > self.PowerCommandSmooth or self.PowerCommandSmooth > 0.01 then + surface.SetDrawColor(self.PowerCommandSmooth < 0 and 255 or 0,Train:GetNW2Bool("MFDUARSBrake",false) and 0 or 255,0) + surface.DrawRect(400,477,math.Clamp(self.PowerCommandSmooth*377,-375,375),32) + end + + for i=1,WagNum>6 and 8 or 6 do + i = i-1 + local w = WagNum > 6 and 40 or 52 + Metrostroi.DrawRectOutline(9,57+i*(w+3),62,w,Color(129,129,129),1) + if Active then + local err = Train:GetNW2Int("MFDUTrainErr"..(i+1),0) + if err > 0 and mainerrs[err] then + local err = mainerrs[err] + + if err==true then + surface.SetDrawColor(220,220,0) + surface.DrawRect(10,58+i*(w+3),59,(w-3)) + draw.SimpleText(i+1,"Metrostroi_Calibri60",40,56+w/2+i*(w+3), Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + elseif type(err) == "table" then + surface.SetDrawColor(220,0,0) + surface.DrawRect(10,58+i*(w+3),59,(w-3)) + draw.SimpleText(err[1],"Metrostroi_Calibri26",40,56+w/2+i*(w+3)-11, Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(err[2],"Metrostroi_Calibri26",40,56+w/2+i*(w+3)+11, Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + surface.SetDrawColor(220,0,0) + surface.DrawRect(10,58+i*(w+3),59,(w-3)) + draw.SimpleText(err,"Metrostroi_Calibri26",40,56+w/2+i*(w+3), Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + elseif i 0 then + surface.DrawRect(148,151+(sel-1)*106,148,38) + end + if Active then + draw.SimpleText("â„– МÐРШРУТÐ","Metrostroi_Calibri35",220,136, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawRectOutline(148,151,148,38,Color(129,129,129),2) + if sel == 1 then + if routen > -1 then draw.SimpleText(Format("%d",routen),"Metrostroi_Calibri35",222,169, sel == 1 and Color(0,0,0) or Color(0,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + else + draw.SimpleText(Format("%03d",routen),"Metrostroi_Calibri35",222,169, sel == 1 and Color(0,0,0) or Color(0,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + draw.SimpleText("â„– СТÐÐЦИИ","Metrostroi_Calibri35",220,237, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawRectOutline(148,257,148,38,Color(129,129,129),2) + if sel == 2 then + if stnum > -1 then draw.SimpleText(Format("%d",stnum),"Metrostroi_Calibri35",222,275, sel == 2 and Color(0,0,0) or Color(0,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + else + draw.SimpleText(Format("%03d",stnum),"Metrostroi_Calibri35",222,275, sel == 2 and Color(0,0,0) or Color(0,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + draw.SimpleText("â„– МÐШИÐИСТÐ","Metrostroi_Calibri35",220,342, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawRectOutline(98,363,248,38,Color(129,129,129),2) + if sel == 3 then + if drvnum > -1 then draw.SimpleText(Format("%d",drvnum),"Metrostroi_Calibri35",222,381, sel == 3 and Color(0,0,0) or Color(0,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end + else + draw.SimpleText(Format("%010d",drvnum),"Metrostroi_Calibri35",222,381, sel == 3 and Color(0,0,0) or Color(0,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + surface.SetDrawColor(255,255,255) + surface.SetTexture(route_num) + surface.DrawTexturedRectRotated(512,512,1024,1024,0) + + if newAct then + surface.SetDrawColor(0,255,255) + surface.DrawRect(98,438,248,86) + end + for i=0,9 do + local px,py = 416 + ((i-1)%3)*115,124+90*(math.ceil(i/3)-1) + if i==0 then px,py=531,394 end + if lineSel == (i+11) then + surface.SetDrawColor(0,255,255) + surface.DrawRect(px+3,py+3,82,67) + draw.SimpleText(i,"Metrostroi_Calibri60",px+88/2,py+72/2, Color(32,32,32),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText(i,"Metrostroi_Calibri60",px+88/2,py+72/2, Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + draw.SimpleText(Active and "ДЕÐКТИВИРОВÐТЬ" or "ÐКТИВИРОВÐТЬ","Metrostroi_Calibri35",222,481-16, newAct and Color(0,0,0) or Color(128,128,128),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("КÐБИÐУ","Metrostroi_Calibri35",222,481+16, newAct and Color(0,0,0) or Color(128,128,128),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + if lineSel == 3 then + surface.SetDrawColor(0,255,255) + surface.DrawRect(391,539,76,59) + elseif lineSel == 2 then + surface.SetDrawColor(0,255,255) + surface.DrawRect(561,539,76,59) + end + + + draw.SimpleText("ИÑправ.","Metrostroi_Calibri23",30+5*80,568, lineSel==3 and Color(32,32,32) or Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + draw.SimpleText("ОК","Metrostroi_Calibri23",40+7*80,568, lineSel==2 and Color(32,32,32) or Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("Помощь","Metrostroi_Calibri23",40+8*80,568, Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + elseif state2 == 3 then + local sel = Train:GetNW2Int("MFDUSelected",0) + surface.SetDrawColor(127,127,127) + surface.DrawRect(2,76,796,22,0) + + surface.SetDrawColor(255,255,255) + surface.SetTexture(failures) + surface.DrawTexturedRectRotated(512,512,1024,1024,0) + + drawButton(0,"Ðачало",lineSel==1,nil,Color(0,255,255)) + drawButton(1,"Конец",lineSel==2,nil,Color(0,255,255)) + drawButton(2,"↑",lineSel==3,nil,Color(0,255,255)) + drawButton(3,"↓",lineSel==4,nil,Color(0,255,255)) + + drawButton(5,{"Ð’Ñе","(%d)"},sel == 0 or lineSel==6,Train:GetNW2Int("MFDUErrorsA",0),sel~=0 and Color(0,255,255)) + drawButton(6,{"ÐеуÑтр.","(%d)"},sel == 1 or lineSel==7,Train:GetNW2Int("MFDUErrorsB",0),sel~=1 and Color(0,255,255)) + + for i=1,Train:GetNW2Int("MFDUErrorCount",-1) do + local errID = Train:GetNW2Int("MFDUErrorType"..i,-1) + if errID>-1 then + local err = self.ErrorNames[errID] + draw.SimpleText(os.date("!%H:%M:%S",Train:GetNW2Int("MFDUErrorTime"..i,0)),"Metrostroi_Calibri23l",40,85+(i-1)*21.5, i==1 and Color(0,0,0) or Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(errorstates[err[2]][1],"Metrostroi_Calibri23l",115,85+(i-1)*21.5, i==1 and Color(0,0,0) or Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(Format(err[1],Train:GetNW2Int("MFDUErrorWag"..i,0)),"Metrostroi_Calibri23l",155,85+(i-1)*21.5, i==1 and Color(0,0,0) or Color(123,123,123),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + --[[ if not err or self.Selected == 0 or err[5] then + Train:SetNW2Int("MFDUErrorWag"..i,err and err[1] or -1) + Train:SetNW2Int("MFDUErrorDate"..i,err and err[3] or -1) + --cerr = cerr+1 + end--]] + end + end + if Train:GetNW2Int("MFDUErrorCount",-1) > 0 then + draw.SimpleText(os.date("!%H:%M:%S",Train:GetNW2Int("MFDUErrorTime1",0)),"Metrostroi_Calibri23l",128,496, Color(0,232,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if Train:GetNW2Bool("MFDUErrorSolved") then + draw.SimpleText("УСТРÐÐÐÐÐЫЙ","Metrostroi_Calibri23l",387,496, Color(0,232,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + draw.SimpleText("ÐЕУСТРÐÐÐÐÐЫЙ","Metrostroi_Calibri23l",387,496, Color(232,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + + local time = Train:GetNW2Int("MFDUErrorConfirmT",-1) + if time > -1 then + draw.SimpleText(os.date("!%H:%M:%S",Train:GetNW2Int("MFDUErrorConfirmT",0)),"Metrostroi_Calibri23l",680,496, Color(0,232,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + draw.SimpleText("ÐЕТ","Metrostroi_Calibri23l",680,496, Color(232,0,0),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + + + end + elseif state2 == 4 then + local sel = Train:GetNW2Int("MFDUSelected",0) + local page = Train:GetNW2Int("MFDUPage",0) + for i=1+page,math.min(6+page,WagNum) do + if i>6+page then break end + local ix = i-page-1 + Metrostroi.DrawRectOutline(13+ix*131,59,117,38,Color(129,129,129),1) + draw.SimpleText(Format("%05d",Train:GetNW2Int("MFDUWagNum"..i,0)),"Metrostroi_Calibri40",71+ix*131,78, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + if sel == 0 then + Metrostroi.DrawRectOutline(13+ix*131,149,117,38,Color(129,129,129),1) + draw.SimpleText(Format("%.1f",Train:GetNW2Int("MFDUL2BC"..i,0)/10),"Metrostroi_Calibri40",71+ix*131,168, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + Metrostroi.DrawRectOutline(13+ix*131,149,117,38,Color(129,129,129),1) + draw.SimpleText(Format("%.1f",Train:GetNW2Int("MFDUL2TL"..i,0)/10),"Metrostroi_Calibri40",71+ix*131,168, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + Metrostroi.DrawRectOutline(13+ix*131,244,117,38,Color(129,129,129),1) + draw.SimpleText(Format("%.1f",Train:GetNW2Int("MFDUL2SK"..i,0)/10),"Metrostroi_Calibri40",71+ix*131,263, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + Metrostroi.DrawRectOutline(13+ix*131,339,117,38,Color(129,129,129),1) + draw.SimpleText(Format("%.1f",Train:GetNW2Int("MFDUL2PB"..i,0)/10),"Metrostroi_Calibri40",71+ix*131,358, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + Metrostroi.DrawRectOutline(13+ix*131,434,117,38,Color(129,129,129),1) + draw.SimpleText(Format("%.1f",Train:GetNW2Int("MFDUL2BL"..i,0)/10),"Metrostroi_Calibri40",71+ix*131,453, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + + drawButton(0,"ПС1",sel == 0 or lineSel==1,nil,sel~=0 and Color(0,255,255)) + drawButton(1,"ПС2",sel == 1 or lineSel==2,nil,sel~=1 and Color(0,255,255)) + + if sel == 0 then + surface.SetDrawColor(255,255,255) + surface.SetTexture(pneumo_system) + surface.DrawTexturedRectRotated(512,512,1024,1024,0) + surface.SetTexture(pneumo_arrow) + local value = Train:GetNW2Int("MFDUL2TL1")/10 + local mat1 = Matrix() + mat1:Translate(Vector(249,391,0)) + --mat1:Rotate(Angle(0,-136.5+value/12*272.5,0)) + mat1:Rotate(Angle(0,-135+value/12*270,0)) + mat1:Translate(Vector(0,-95,0)) + if 7.5 < value and value < 9 then + surface.SetDrawColor(40,160,40) + else + surface.SetDrawColor(245,0,0) + end + cam.PushModelMatrix(mat1) + surface.DrawTexturedRectRotated(0,0,64,256,0) + cam.PopModelMatrix() + draw.SimpleText(Format("%.1f",value),"Metrostroi_Calibri40",249,391, Color(215,215,215),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + value = Train:GetNW2Int("MFDUL2TL"..WagNum)/10 + mat1 = Matrix() + mat1:Translate(Vector(546,391,0)) + mat1:Rotate(Angle(0,-135+value/12*270,0)) + mat1:Translate(Vector(0,-95,0)) + if 7.5 < value and value < 9 then + surface.SetDrawColor(40,160,40) + else + surface.SetDrawColor(245,0,0) + end + cam.PushModelMatrix(mat1) + surface.DrawTexturedRectRotated(0,0,64,256,0) + cam.PopModelMatrix() + draw.SimpleText(Format("%.1f",value),"Metrostroi_Calibri40",546,391, Color(215,215,215),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + draw.SimpleText(WagNum,"Metrostroi_Calibri25",508,505.5, Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + if sel == 1 then + surface.SetDrawColor(255,255,255) + surface.SetTexture(pneumo_system2) + surface.DrawTexturedRectRotated(512,512,1024,1024,0) + end + if page ~= 0 then drawButton(7,"â†") end + if 6+page < WagNum then drawButton(8,"→") end + elseif state2 == 5 then + local page = Train:GetNW2Int("MFDUPage",0) + for i=1+page,math.min(6+page,WagNum) do + if i>6+page then break end + local ix = i-page-1 + Metrostroi.DrawRectOutline(13+ix*131,59,117,38,Color(129,129,129),1) + draw.SimpleText(Format("%05d",Train:GetNW2Int("MFDUWagNum"..i,0)),"Metrostroi_Calibri40",71+ix*131,78, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawRectOutline(13+ix*131,110,117,50,Train:GetNW2Bool("MFDUDPVUC"..i.."_1") and Color(220,0,0) or Color(129,129,129),Train:GetNW2Bool("MFDUDPVUC"..i.."_1") and 6 or 1) + draw.SimpleText("Двери","Metrostroi_Calibri35",71+ix*131,132,Train:GetNW2Bool("MFDUDPVUB"..i.."_1") and Color(220,0,0) or Color(255,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawRectOutline(13+ix*131,171,117,50,Train:GetNW2Bool("MFDUDPVUC"..i.."_2") and Color(220,0,0) or Color(129,129,129),Train:GetNW2Bool("MFDUDPVUC"..i.."_2") and 6 or 1) + draw.SimpleText("Свет","Metrostroi_Calibri35",71+ix*131,193, Train:GetNW2Bool("MFDUDPVUB"..i.."_2") and Color(220,0,0) or Color(0,220,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + if Train:GetNW2Bool("MFDUWagTyp"..i,false) then + Metrostroi.DrawRectOutline(13+ix*131,232,117,50,Train:GetNW2Bool("MFDUDPVUC"..i.."_3") and Color(220,0,0) or Color(129,129,129),Train:GetNW2Bool("MFDUDPVUC"..i.."_3") and 6 or 1) + draw.SimpleText("ПСÐ","Metrostroi_Calibri35",71+ix*131,254, Train:GetNW2Bool("MFDUDPVUB"..i.."_3") and Color(220,0,0) or Color(0,220,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawRectOutline(13+ix*131,293,117,50,Train:GetNW2Bool("MFDUDPVUC"..i.."_4") and Color(220,0,0) or Color(129,129,129),Train:GetNW2Bool("MFDUDPVUC"..i.."_4") and 6 or 1) + draw.SimpleText("МК","Metrostroi_Calibri35",71+ix*131,315, Train:GetNW2Bool("MFDUDPVUB"..i.."_4") and Color(220,0,0) or Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawRectOutline(13+ix*131,354,117,50,Train:GetNW2Bool("MFDUDPVUC"..i.."_5") and Color(220,0,0) or Color(129,129,129),Train:GetNW2Bool("MFDUDPVUC"..i.."_5") and 6 or 1) + draw.SimpleText("БВ","Metrostroi_Calibri35",71+ix*131,376, Train:GetNW2Bool("MFDUDPVUB"..i.."_5") and Color(220,0,0) or Color(0,220,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawRectOutline(13+ix*131,415,117,50,Train:GetNW2Bool("MFDUDPVUC"..i.."_6") and Color(220,0,0) or Color(129,129,129),Train:GetNW2Bool("MFDUDPVUC"..i.."_6") and 6 or 1) + draw.SimpleText("ТП","Metrostroi_Calibri35",71+ix*131,437, Train:GetNW2Bool("MFDUDPVUB"..i.."_6") and Color(220,0,0) or Color(0,220,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawRectOutline(13+ix*131,476,117,50,Train:GetNW2Bool("MFDUDPVUC"..i.."_7") and Color(220,0,0) or Color(129,129,129),Train:GetNW2Bool("MFDUDPVUC"..i.."_7") and 6 or 1) + draw.SimpleText("ТкПр","Metrostroi_Calibri35",71+ix*131,498, Train:GetNW2Bool("MFDUDPVUB"..i.."_7") and Color(220,0,0) or Color(0,220,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + + + --[[ + surface.SetDrawColor(38,38,38) + surface.DrawRect(11,58+ix*54,59,49) + Metrostroi.DrawRectOutline(10,57+ix*54,62,52,Color(129,129,129),1) + draw.SimpleText(Format("%05d",Train:GetNW2Int("MFDUWagNum"..i,0)),"Metrostroi_Calibri26",40,83+ix*54, Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + if Train:GetPackedBool("MFDUDisableDoors"..i) then + surface.SetDrawColor(220,0,0) + surface.DrawRect(92,64+ix*53,85,45) + Metrostroi.DrawRectOutline(91,63+ix*53,88,48,Color(129,129,129),1) + draw.SimpleText("Двери","Metrostroi_Calibri35",135,84+ix*53, Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + surface.SetDrawColor(38,38,38) + surface.DrawRect(92,64+ix*53,85,45) + Metrostroi.DrawRectOutline(91,63+ix*53,88,48,Color(129,129,129),1) + draw.SimpleText("Двери","Metrostroi_Calibri35",135,84+ix*53, Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + + if Train:GetPackedBool("MFDUDisableLights"..i) then + surface.SetDrawColor(220,0,0) + surface.DrawRect(192,64+ix*53,85,45) + Metrostroi.DrawRectOutline(191,63+ix*53,88,48,Color(129,129,129),1) + draw.SimpleText("Свет","Metrostroi_Calibri35",235,84+ix*53, Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + surface.SetDrawColor(38,38,38) + surface.DrawRect(192,64+ix*53,85,45) + Metrostroi.DrawRectOutline(191,63+ix*53,88,48,Color(129,129,129),1) + draw.SimpleText("Свет","Metrostroi_Calibri35",235,84+ix*53, Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + if Train:GetNW2Bool("MFDUWagTyp"..i,false) then + if Train:GetPackedBool("MFDUDisablePSN"..i) then + surface.SetDrawColor(220,0,0) + surface.DrawRect(292,64+ix*53,85,45) + Metrostroi.DrawRectOutline(291,63+ix*53,88,48,Color(129,129,129),1) + draw.SimpleText("ПСÐ","Metrostroi_Calibri35",335,84+ix*53, Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + surface.SetDrawColor(38,38,38) + surface.DrawRect(292,64+ix*53,85,45) + Metrostroi.DrawRectOutline(291,63+ix*53,88,48,Color(129,129,129),1) + draw.SimpleText("ПСÐ","Metrostroi_Calibri35",335,84+ix*53, Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + + if Train:GetPackedBool("MFDUDisableMK"..i) then + surface.SetDrawColor(220,0,0) + surface.DrawRect(392,64+ix*53,85,45) + Metrostroi.DrawRectOutline(391,63+ix*53,88,48,Color(129,129,129),1) + draw.SimpleText("МК","Metrostroi_Calibri35",435,84+ix*53, Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + surface.SetDrawColor(38,38,38) + surface.DrawRect(392,64+ix*53,85,45) + Metrostroi.DrawRectOutline(391,63+ix*53,88,48,Color(129,129,129),1) + draw.SimpleText("МК","Metrostroi_Calibri35",435,84+ix*53, Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + + if Train:GetPackedBool("MFDUBV"..i) then + surface.SetDrawColor(220,0,0) + surface.DrawRect(492,64+ix*53,85,45) + Metrostroi.DrawRectOutline(491,63+ix*53,88,48,Color(129,129,129),1) + draw.SimpleText("БВ","Metrostroi_Calibri35",535,84+ix*53, Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + surface.SetDrawColor(38,38,38) + surface.DrawRect(492,64+ix*53,85,45) + Metrostroi.DrawRectOutline(491,63+ix*53,88,48,Color(129,129,129),1) + draw.SimpleText("БВ","Metrostroi_Calibri35",535,84+ix*53, Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + + if Train:GetPackedBool("MFDUDisableTP"..i) then + surface.SetDrawColor(220,0,0) + surface.DrawRect(592,64+ix*53,85,45) + Metrostroi.DrawRectOutline(591,63+ix*53,88,48,Color(129,129,129),1) + draw.SimpleText("ТП","Metrostroi_Calibri35",635,84+ix*53, Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + surface.SetDrawColor(38,38,38) + surface.DrawRect(592,64+ix*53,85,45) + Metrostroi.DrawRectOutline(591,63+ix*53,88,48,Color(129,129,129),1) + draw.SimpleText("ТП","Metrostroi_Calibri35",635,84+ix*53, Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end--]] + end + + surface.SetDrawColor(255,255,255) + surface.SetTexture(pvu) + surface.DrawTexturedRectRotated(512,512,1024,1024,0) + + if page ~= 0 then drawButton(7,"â†") end + if 6+page < WagNum then drawButton(8,"→") end + elseif state2 == 6 then + surface.SetDrawColor(255,255,255) + surface.SetTexture(diag) + surface.DrawTexturedRectRotated(512,512,1024,1024,0) + elseif state2 == 7 then + local page = Train:GetNW2Int("MFDUPage",0) + for i=1+page,math.min(6+page,WagNum) do + if i>6+page then break end + local ix = i-page-1 + surface.SetDrawColor(38,38,38) + surface.DrawRect(11,58+ix*54,59,49) + Metrostroi.DrawRectOutline(10,57+ix*54,62,52,Color(129,129,129),1) + draw.SimpleText(Format("%05d",Train:GetNW2Int("MFDUWagNum"..i,0)),"Metrostroi_Calibri26",40,83+ix*54, Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + if Train:GetNW2Bool("MFDUWagHead"..i) then + if Train:GetNW2Bool("MFDUDCabL"..i) then surface.SetDrawColor(220,0,0) else surface.SetDrawColor(0,220,0) end + surface.DrawRect(168,62+ix*54,17,44) + + if Train:GetNW2Bool("MFDUDCabR"..i) then surface.SetDrawColor(220,0,0) else surface.SetDrawColor(0,220,0) end + surface.DrawRect(613,62+ix*54,17,44) + + --if Train:GetNW2Bool("MFDUDF"..i) then surface.SetDrawColor(220,0,0) else surface.SetDrawColor(0,220,0) end + --surface.DrawRect(380,(i~=1 and 87 or 62)+ix*54,36,21) + --if Train:GetNW2Bool("MFDUDB"..i) then surface.SetDrawColor(220,0,0) else surface.SetDrawColor(0,220,0) end + --surface.DrawRect(380,(i==1 and 87 or 62)+ix*54,36,21) + --else + end + if Train:GetNW2Bool("MFDUDF"..i) then surface.SetDrawColor(220,0,0) else surface.SetDrawColor(0,220,0) end + surface.DrawRect(380,62+ix*54,36,21) + if Train:GetNW2Bool("MFDUDB"..i) then surface.SetDrawColor(220,0,0) else surface.SetDrawColor(0,220,0) end + surface.DrawRect(380,87+ix*54,36,21) + + for i2=0,3 do + if Train:GetNW2Bool("MFDUDL"..i2.."_"..i) then surface.SetDrawColor(220,0,0) else surface.SetDrawColor(0,220,0) end + surface.DrawRect(211+i2*24,63+ix*54,17,44) + if Train:GetNW2Bool("MFDUDR"..i2.."_"..i) then surface.SetDrawColor(220,0,0) else surface.SetDrawColor(0,220,0) end + surface.DrawRect(501+i2*24,63+ix*54,17,44) + end + end + surface.SetDrawColor(38,38,38) + surface.DrawRect(24,476,751,34) + if -0.01 > self.PowerCommandSmooth or self.PowerCommandSmooth > 0.01 then + surface.SetDrawColor(self.PowerCommandSmooth < 0 and 255 or 0,Train:GetPackedBool("ARSComm",false) and 0 or 255,0) + surface.DrawRect(400,477,math.Clamp(self.PowerCommandSmooth*377,-375,375),32) + end + + surface.SetDrawColor(255,255,255) + surface.SetTexture(doors) + surface.DrawTexturedRectRotated(512,512,1024,1024,0) + + local voltage = Train:GetNW2Int("MFDUTrainVoltage",0) + if 550 <= voltage and voltage <= 975 then + surface.SetDrawColor(0,220,0) + else + surface.SetDrawColor(220,0,0) + end + surface.DrawRect(698,58,92,71) + draw.SimpleText("ÐапрÑж.","Metrostroi_Calibri26",744,93.50-23, Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("К.Р.","Metrostroi_Calibri26",744,93.50, Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("%d Ð’",voltage),"Metrostroi_Calibri26",744,93.50+23, Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + if Train:GetNW2Bool("MFDUTrainSD") then + surface.SetDrawColor(200,200,200) + else + surface.SetDrawColor(220,0,0) + end + surface.DrawRect(698,141,92,71) + draw.SimpleText("Контроль","Metrostroi_Calibri26",744,176.50-11, Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("дверей","Metrostroi_Calibri26",744,176.50+11, Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + local NMPress = Train:GetNW2Int("MFDUL2TL1",0)/10 + if 6.4 <= NMPress and NMPress <= 8.1 then + surface.SetDrawColor(0,220,0) + else + surface.SetDrawColor(220,0,0) + end + surface.DrawRect(698,224,92,71) + draw.SimpleText("Давл. ÐМ.","Metrostroi_Calibri26",744,259.50-23, Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("%.1f",NMPress),"Metrostroi_Calibri26",744,259.50, Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("кгÑ/Ñм²","Metrostroi_Calibri26",744,259.50+23, Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + local TMPress = Train:GetNW2Int("MFDUL2BL1",0)/10 + if 2.8 <= TMPress and TMPress <= 5.4 then + surface.SetDrawColor(0,220,0) + else + surface.SetDrawColor(220,0,0) + end + surface.DrawRect(698,307,92,71) + draw.SimpleText("Давл. ТМ.","Metrostroi_Calibri26",744,342.50-23, Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("%.1f",TMPress),"Metrostroi_Calibri26",744,342.50, Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("кгÑ/Ñм²","Metrostroi_Calibri26",744,342.50+23, Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + if page ~= 0 then drawButton(7,"â†") end + if 6+page < WagNum then drawButton(8,"→") end + elseif state2 == 8 then + local sel = Train:GetNW2Int("MFDUSelected",0) + local page = Train:GetNW2Int("MFDUPage",0) + if sel == 0 then + surface.SetDrawColor(255,255,255) + surface.SetTexture(vo) + surface.DrawTexturedRectRotated(512,512,1024,1024,0) + + draw.SimpleText("ОÑвещение","Metrostroi_Calibri25",96,135+41*0, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("ПСÐ","Metrostroi_Calibri25",96,135+41*1, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("ЗУ ÐКБ","Metrostroi_Calibri25",96,135+41*2, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("МК","Metrostroi_Calibri25",96,135+41*3, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("Токоприёмники","Metrostroi_Calibri25",96,135+41*4, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + for i=1+page,math.min(6+page,WagNum) do + if i>6+page then break end + local ix = i-page-1 + draw.SimpleText(i,"Metrostroi_Calibri25",242 +ix*101,97, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + surface.SetTexture(box) + if Train:GetPackedBool("MFDUPassLights"..i) then surface.SetDrawColor(0,220,0) else surface.SetDrawColor(220,0,0) end + surface.DrawTexturedRectRotated(242 +ix*101,135+41*0,32,62,0) + if Train:GetNW2Bool("MFDUWagTyp"..i,false) then + if Train:GetPackedBool("MFDUPSN"..i) then surface.SetDrawColor(0,220,0) else surface.SetDrawColor(220,0,0) end + surface.DrawTexturedRectRotated(242 +ix*101,135+41*1,32,62,0) + surface.SetDrawColor(220,0,0) + surface.DrawTexturedRectRotated(242 +ix*101,135+41*2,32,62,0) + if Train:GetPackedBool("MFDUMK"..i) then surface.SetDrawColor(0,220,0) else surface.SetDrawColor(220,0,0) end + surface.DrawTexturedRectRotated(242 +ix*101,135+41*3,32,62,0) + if Train:GetPackedBool("MFDUTP"..i) then surface.SetDrawColor(0,220,0) else surface.SetDrawColor(220,0,0) end + surface.DrawTexturedRectRotated(242 +ix*101,135+41*4,32,62,0) + end + end + elseif sel == 1 then + surface.SetDrawColor(255,255,255) + surface.SetTexture(common) + surface.DrawTexturedRectRotated(512,512,1024,1024,0) + + draw.SimpleText("БукÑÑ‹","Metrostroi_Calibri35",400,24, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + surface.SetTexture(box) + for i=1+page,math.min(6+page,WagNum) do + if i>6+page then break end + local ix = i-page-1 + Metrostroi.DrawRectOutline(13+ix*131,59,117,38,Color(129,129,129),1) + draw.SimpleText(Format("%05d",Train:GetNW2Int("MFDUWagNum"..i,0)),"Metrostroi_Calibri40",71+ix*131,78, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + for i2=1,8 do + surface.SetDrawColor(0,220,0) + surface.DrawTexturedRectRotated(71.5+ix*131,90+i2*41,75,62,0) + draw.SimpleText(i2,"Metrostroi_Calibri40",71.5+ix*131,90+i2*41, Color(32,32,32),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + --[[ + local state = Train:GetPackedBool("MFDUVentEnabled"..(2-i2%2)..i) + for i2=1,8 do + if state then surface.SetDrawColor(0,220,0) else surface.SetDrawColor(220,0,0) end + surface.DrawTexturedRectRotated(71.5+ix*131,90+i2*41,75,62,0) + draw.SimpleText(i2,"Metrostroi_Calibri40",71.5+ix*131,90+i2*41, Color(32,32,32),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + --]] + end + elseif sel == 2 then + surface.SetDrawColor(255,255,255) + surface.SetTexture(common) + surface.DrawTexturedRectRotated(512,512,1024,1024,0) + + draw.SimpleText("ДПБТ","Metrostroi_Calibri35",400,24, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + surface.SetTexture(box) + for i=1+page,math.min(6+page,WagNum) do + if i>6+page then break end + local ix = i-page-1 + Metrostroi.DrawRectOutline(13+ix*131,59,117,38,Color(129,129,129),1) + draw.SimpleText(Format("%05d",Train:GetNW2Int("MFDUWagNum"..i,0)),"Metrostroi_Calibri40",71+ix*131,78, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + local state = Train:GetPackedBool("MFDUDPBD1"..i) + for i2=1,8 do + if state then surface.SetDrawColor(0,220,0) else surface.SetDrawColor(220,0,0) end + surface.DrawTexturedRectRotated(71.5+ix*131,90+i2*41,75,62,0) + draw.SimpleText(i2,"Metrostroi_Calibri40",71.5+ix*131,90+i2*41, Color(32,32,32),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + elseif sel == 3 then + surface.SetDrawColor(255,255,255) + surface.SetTexture(common) + surface.DrawTexturedRectRotated(512,512,1024,1024,0) + + draw.SimpleText("ВентилÑциÑ","Metrostroi_Calibri35",400,24, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + surface.SetTexture(box) + for i=1+page,math.min(6+page,WagNum) do + if i>6+page then break end + local ix = i-page-1 + Metrostroi.DrawRectOutline(13+ix*131,59,117,38,Color(129,129,129),1) + draw.SimpleText(Format("%05d",Train:GetNW2Int("MFDUWagNum"..i,0)),"Metrostroi_Calibri40",71+ix*131,78, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + for i2=Train:GetNW2Bool("MFDUWagHead"..i) and 2 or 1,8 do + local state = Train:GetPackedBool("MFDUVentEnabled"..(2-i2%2)..i) + if state then surface.SetDrawColor(0,220,0) else surface.SetDrawColor(38,38,38) end + surface.DrawTexturedRectRotated(71.5+ix*131,90+i2*41,75,62,0) + draw.SimpleText(i2,"Metrostroi_Calibri40",71.5+ix*131,90+i2*41, state and Color(32,32,32) or Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + end + drawButton(0,"ВО", sel == 0 or lineSel==1,nil,sel~=0 and Color(0,255,255)) + drawButton(1,"БукÑÑ‹", sel == 1 or lineSel==2,nil,sel~=1 and Color(0,255,255)) + drawButton(2,"ДПБТ", sel == 2 or lineSel==3,nil,sel~=2 and Color(0,255,255)) + drawButton(3,{"Венти-","лÑциÑ"},sel == 3 or lineSel==4,nil,sel~=3 and Color(0,255,255)) + + if page ~= 0 then drawButton(7,"â†") end + if 6+page < WagNum then drawButton(8,"→") end + elseif state2 == 9 then + local page = Train:GetNW2Int("MFDUPage",0) + local sel = Train:GetNW2Int("MFDUSelected",0) + if sel == 0 then + for i=1+page,math.min(6+page,WagNum) do + if i>6+page then break end + local ix = i-page-1 + Metrostroi.DrawRectOutline(13+ix*131,59,117,38,Color(129,129,129),1) + draw.SimpleText(Format("%05d",Train:GetNW2Int("MFDUWagNum"..i,0)),"Metrostroi_Calibri40",71+ix*131,78, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + Metrostroi.DrawRectOutline(13+ix*131,149,117,38,Color(129,129,129),1) + Metrostroi.DrawRectOutline(13+ix*131,234,117,38,Color(129,129,129),1) + Metrostroi.DrawRectOutline(13+ix*131,359,117,38,Color(129,129,129),1) + if Train:GetNW2Bool("MFDUWagTyp"..i,false) then + draw.SimpleText(Format("%.1f",Train:GetNW2Int("MFDUTHD"..i,0)/10),"Metrostroi_Calibri40",71+ix*131,168, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("%.1f",Train:GetNW2Int("MFDUTHB"..i,0)/10),"Metrostroi_Calibri40",71+ix*131,253, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("%.1f",Train:GetNW2Int("MFDUTA"..i,0)/10),"Metrostroi_Calibri40",71+ix*131,378, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + end + + drawButton(0,"ТП1",sel == 0 or lineSel==1,nil,sel~=0 and Color(0,255,255)) + drawButton(1,"ТП2",sel == 1 or lineSel==2,nil,sel~=1 and Color(0,255,255)) + + if sel == 0 then + surface.SetDrawColor(255,255,255) + surface.SetTexture(tp1) + surface.DrawTexturedRectRotated(512,512,1024,1024,0) + end + if sel == 1 then + surface.SetDrawColor(255,255,255) + surface.SetTexture(tp2) + surface.DrawTexturedRectRotated(512,512,1024,1024,0) + end + if sel == 1 then + draw.SimpleText("Сбор Ñхемы","Metrostroi_Calibri25",96,135+41*0, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("Отказ инвертора","Metrostroi_Calibri25",96,135+41*1, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("Защита инвертора","Metrostroi_Calibri25",96,135+41*2, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("Перегрев инвертора","Metrostroi_Calibri25",96,135+41*3, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("Отказ ЭТ","Metrostroi_Calibri25",96,135+41*4, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("БВ","Metrostroi_Calibri25",96,135+41*5, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("КС","Metrostroi_Calibri25",96,135+41*6, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + surface.SetTexture(box) + local sel = Train:GetNW2Int("MFDUSelected",0) + local page = Train:GetNW2Int("MFDUPage",0) + for i=1+page,math.min(6+page,WagNum) do + if i>6+page then break end + local ix = i-page-1 + draw.SimpleText(i,"Metrostroi_Calibri25",242 +ix*101,97, Color(129,129,129),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + if Train:GetNW2Bool("MFDUWagTyp"..i,false) then + if Train:GetPackedBool("MFDUScheme"..i) then surface.SetDrawColor(0,220,0) else surface.SetDrawColor(220,0,0) end + surface.DrawTexturedRectRotated(242 +ix*101,135+41*0,32,62,0) + if Train:GetPackedBool("MFDUInv"..i) then surface.SetDrawColor(0,220,0) else surface.SetDrawColor(220,0,0) end + surface.DrawTexturedRectRotated(242 +ix*101,135+41*1,32,62,0) + surface.DrawTexturedRectRotated(242 +ix*101,135+41*3,32,62,0) + if Train:GetPackedBool("MFDUAProt"..i) then surface.SetDrawColor(220,0,0) else surface.SetDrawColor(0,220,0) end + surface.DrawTexturedRectRotated(242 +ix*101,135+41*2,32,62,0) + if Train:GetPackedBool("MFDUBadT"..i) then surface.SetDrawColor(220,0,0) else surface.SetDrawColor(0,220,0) end + surface.DrawTexturedRectRotated(242 +ix*101,135+41*4,32,62,0) + if Train:GetPackedBool("MFDUBV"..i) then surface.SetDrawColor(0,220,0) else surface.SetDrawColor(220,0,0) end + surface.DrawTexturedRectRotated(242 +ix*101,135+41*5,32,62,0) + if Train:GetPackedBool("MFDUKS"..i) then surface.SetDrawColor(0,220,0) else surface.SetDrawColor(220,0,0) end + surface.DrawTexturedRectRotated(242 +ix*101,135+41*6,32,62,0) + end + end + end + + if page ~= 0 then drawButton(7,"â†") end + if 6+page < WagNum then drawButton(8,"→") end + end + if not Train:GetPackedBool("MFDUEmer") then + if state > 0 then + draw.SimpleText(os.date("!%d.%m.%Y",Metrostroi.GetSyncTime()),"Metrostroi_Calibri26",101, 12,Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(os.date("!%H:%M:%S",Metrostroi.GetSyncTime()),"Metrostroi_Calibri26",101, 36,Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + if Train:GetNW2Bool("MFDUIdent") then + draw.SimpleText("ИдентификациÑ","Metrostroi_Calibri26",701, 22,Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + elseif state2 > 1 and state2 ~= 2 then + if Train:GetNW2Bool("MFDUBARSActive") then + draw.SimpleText(math.floor(Train:GetNW2Int("MFDUSpeed",0)),"Metrostroi_Calibri60",650, 22,Color(255,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("км/ч","Metrostroi_Calibri30",720, 22,Color(255,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText(math.floor(Train:GetNW2Int("MFDUSpeed",0)),"Metrostroi_Calibri60",650, 22,Color(255,255,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("км/ч","Metrostroi_Calibri30",720, 22,Color(255,255,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + else--if Active then + local drvnum = Train:GetNW2Int("MFDUDriverNumber",-1) + draw.SimpleText(Format("%010d",drvnum > -1 and drvnum or 0),"Metrostroi_Calibri26",701, 22,Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --else + --draw.SimpleText("ИдентификациÑ","Metrostroi_Calibri26",701, 22,Color(123,123,123),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + if state2 > 0 then + drawButton(9,"Обратно",lineSel==10,nil,Color(0,255,255)) + end + end + end + if state ~= 0 and state ~= -1 then + surface.SetDrawColor(0,0,20,100) + surface.DrawRect(0,0,800,600) + end + end +end diff --git a/lua/metrostroi/systems/sys_81_722_panel.lua b/lua/metrostroi/systems/sys_81_722_panel.lua new file mode 100644 index 0000000..05c9378 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_722_panel.lua @@ -0,0 +1,265 @@ +-------------------------------------------------------------------------------- +-- 81-722 controller panel +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_722_Panel") +TRAIN_SYSTEM.DontAccelerateSimulation = false +function TRAIN_SYSTEM:Initialize() + --Ðвтоматы ПЗ + self.Train:LoadSystem("SF1","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF2","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF3","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF4","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF5","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF6","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF7","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF8","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF9","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("R_UPO","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF01","Relay","Switch",{bass=true}) + self.Train:LoadSystem("SF10","Relay","Switch",{bass=true}) + self.Train:LoadSystem("SF11","Relay","Switch",{bass=true}) + self.Train:LoadSystem("SF12","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF13","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF02","Relay","Switch",{bass=true}) + self.Train:LoadSystem("SF14","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF15","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF16","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF17","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF18","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF19","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF20","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF21","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF22","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF23","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF24","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF25","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF26","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF27","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF03","Relay","Switch",{bass=true}) + self.Train:LoadSystem("SF04","Relay","Switch",{bass=true}) + + --Ðвтоматы ВЗ + self.Train:LoadSystem("SF31","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF32","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF33","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF34","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF35","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF36","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF37","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF38","Relay","Switch",{bass=true}) + self.Train:LoadSystem("SF41","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF42","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF43","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF44","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF45","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF46","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF47","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF48","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF49","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF51","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF52","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF53","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF54","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF55","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF56","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF57","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF58","Relay","Switch",{normally_closed = true,bass=true}) + self.Train:LoadSystem("SF59","Relay","Switch",{normally_closed = true,bass=true}) + --ЗаднÑÑ Ð¿Ð°Ð½ÐµÐ»ÑŒ кнопок + self.Train:LoadSystem("PSNToggle","Relay","Switch",{bass=true}) + self.Train:LoadSystem("BattOn","Relay","Switch",{bass=true}) + self.Train:LoadSystem("BattOff","Relay","Switch",{bass=true}) + self.Train:LoadSystem("TorecDoorUnlock","Relay","Switch",{bass=true}) + + -- + self.Train:LoadSystem("PassLight","Relay","Switch",{bass=true}) + self.Train:LoadSystem("PassVent","Relay","Switch",{maxvalue=4,defaultvalue=1,bass=true}) + self.Train:LoadSystem("VKF","Relay","Switch",{bass=true}) + self.Train:LoadSystem("ParkingBrake","Relay","Switch",{bass=true}) + self.Train:LoadSystem("VRD","Relay","Switch",{bass=true}) + self.Train:LoadSystem("SOSDEnable","Relay","Switch",{bass=true}) + -- + self.Train:LoadSystem("VRU","Relay","Switch",{maxvalue=2,defaultvalue=1,bass=true}) + self.Train:LoadSystem("VAD","Relay","Switch",{bass=true}) + self.Train:LoadSystem("VAH","Relay","Switch",{bass=true}) + self.Train:LoadSystem("EmergencyRadioPower","Relay","Switch",{bass=true}) + self.Train:LoadSystem("BARSMode","Relay","Switch",{maxvalue=2,defaultvalue=1,bass=true}) + self.Train:LoadSystem("PantSC","Relay","Switch",{maxvalue=4,defaultvalue=1,bass=true}) + self.Train:LoadSystem("RCARS","Relay","Switch",{defaultvalue=1,bass=true}) + + --Пульт ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ 1 + self.Train:LoadSystem("MirrorHeating","Relay","Switch",{bass=true}) + self.Train:LoadSystem("DoorLeft2","Relay","Switch",{bass=true}) + -- + self.Train:LoadSystem("DoorBack","Relay","Switch",{bass=true}) + self.Train:LoadSystem("EmergencyDrive","Relay","Switch",{bass=true}) + self.Train:LoadSystem("Microphone","Relay","Switch",{bass=true}) + self.Train:LoadSystem("DoorLeft1","Relay","Switch",{bass=true}) + + self.Train:LoadSystem("ARS","Relay","Switch",{bass=true}) + self.Train:LoadSystem("ALS","Relay","Switch",{bass=true}) + self.Train:LoadSystem("GlassWasher","Relay","Switch",{bass=true}) + self.Train:LoadSystem("GlassCleaner","Relay","Switch",{maxvalue = 2,bass=true}) + self.Train:LoadSystem("EmergencyBrakeTPlus","Relay","Switch",{bass=true}) + self.Train:LoadSystem("EmergencyBrakeTPlusK","Relay","Switch",{defaultvalue=1}) + self.Train:LoadSystem("EmergencyBrake","Relay","Switch",{bass=true}) + self.Train:LoadSystem("Vigilance","Relay","Switch",{bass=true}) + self.Train:LoadSystem("Headlights","Relay","Switch",{maxvalue = 2,bass=true}) + self.Train:LoadSystem("DoorSelect","Relay","Switch",{bass=true}) + self.Train:LoadSystem("DoorClose","Relay","Switch",{maxvalue = 2,defaultvalue=1,bass=true}) + self.Train:LoadSystem("DoorRight","Relay","Switch",{bass=true}) + + self.Train:LoadSystem("KRO","Relay","Switch",{maxvalue = 2,defaultvalue=1,bass=true}) + self.Train:LoadSystem("Compressor","Relay","Switch",{maxvalue=4,defaultvalue=0,bass=true}) + self.Train:LoadSystem("Ring","Relay","Switch",{bass=true}) + --ОÑвещение + self.Train:LoadSystem("CabinLight","Relay","Switch",{maxvalue=2,defaultvalue=0,bass=true}) + self.Train:LoadSystem("PanelLight","Relay","Switch",{bass=true}) + + self.Train:LoadSystem("PB","Relay","Switch",{bass=true}) + self.Controller = 0 + self.TargetController = 0 + + + self.BattOn = 0 + self.BattOff = 0 + self.SOSDL = 0 + + self.RS = 0 + self.AVS = 0 + self.LRU = 0 + + self.EmergencyDriveL = 0 + self.EmergencyBrakeTPlusL = 0 + + self.DoorLeftL = 0 + self.DoorRightL = 0 + self.MFDUPowerL = 0 + + self.CabLights = 0 + self.PanelLights = 0 + + self.Headlights1 = 0 + self.Headlights2 = 0 + self.RedLights = 0 + + self.EmergencyLights = 0 + self.MainLights = 0 + + self.V4 = 0 + + self.UPOPower = 0 + self.AnnouncerPlaying = 0 + + self.SOSD = 0 + + self.PassSchemePowerL = 0 + self.PassSchemePowerR = 0 + + self.DoorsW = 0 + self.BrW = 0 + self.GRP = 0 + + self.RC = 0 + self.VPR1 = 0 + self.VPR2 = 0 + + self.BARSPower = 0 + self.ARSPower = 0 + self.ALSPower = 0 +end + +function TRAIN_SYSTEM:Inputs() + return { "KVUp", "KVDown", "KV1", "KV2", "KV4", "KV5", "KV6", "KV7", } +end + +function TRAIN_SYSTEM:Outputs() + return { "Controller","BattOn","BattOff","SOSDL","RS","AVS","LRU","EmergencyDriveL","EmergencyBrakeTPlusL","DoorLeftL","DoorRightL","MFDUPowerL","CabLights","PanelLights","Headlights1","Headlights2","RedLights","EmergencyLights","MainLights", "V4","SOSD","UPOPower","AnnouncerPlaying", "PassSchemePowerL", "PassSchemePowerR","DoorsW","BrW","GRP","RC","VPR1","VPR2","BARSPower","ARSPower","ALSPower"} +end +--if not TURBOSTROI then return end +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "KVUp" and value > 0 and self.Controller < 2 then + self.TargetController = self.TargetController + 1 + if self.TargetController <= -2 then + self.TargetController = -1 + end + end + if name == "KVUp" and value == 0 and self.TargetController == 2 then + self.TargetController = self.TargetController - 1 + end + if name == "KVDown" and value > 0 and self.TargetController > -2 then + self.TargetController = self.TargetController - 1 + end + if name == "KVDown" and value == 0 and self.TargetController == -2 then + self.TargetController = self.TargetController + 1 + end + if name == "KV1" then + self.KV1Pressed = value > 0 + if value then + self.TargetController = 1 + end + end + if name == "KV2" then + if value > 0 then + self.TargetController = 2 + elseif self.TargetController == 2 then + self.TargetController = 1 + end + end + if name == "KV4" and value > 0 then + self.TargetController = 0 + end + if name == "KV5" then + self.KV5Pressed = value > 0 + if value then + self.TargetController = -1 + end + end + if name == "KV6" then + if value > 0 then + self.TargetController = -2 + elseif self.TargetController == -2 then + self.TargetController = -1 + end + end + if name == "KV7" then + self.TargetController = -3 + end + self.ControllerTimer = CurTime()-1 +end +function TRAIN_SYSTEM:Think() + if self.Controller ~= self.TargetController and not self.ControllerTimer then + self.ControllerTimer = CurTime()-1 + end + if self.KV1Pressed then + if self.Train.BUKP.PowerPrecent > 25 then + self.TargetController = 0 + else + self.TargetController = 1 + end + end + if self.KV5Pressed then + if self.Train.BUKP.PowerPrecent < -25 then + self.TargetController = 0 + else + self.TargetController = -1 + end + end + if self.ControllerTimer and CurTime() - self.ControllerTimer > 0.1 and self.Controller ~= self.TargetController then + local previousPosition = self.Controller + self.ControllerTimer = CurTime() + if self.TargetController > self.Controller then + self.Controller = self.Controller + 1 + else + self.Controller = self.Controller - 1 + end + self.Train:PlayOnce("KU_"..previousPosition.."_"..self.Controller, "cabin",0.5) + end + + if self.Controller == self.TargetController then + self.ControllerTimer = nil + end +end diff --git a/lua/metrostroi/systems/sys_81_722_passscheme.lua b/lua/metrostroi/systems/sys_81_722_passscheme.lua new file mode 100644 index 0000000..2e836b8 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_722_passscheme.lua @@ -0,0 +1,37 @@ +-------------------------------------------------------------------------------- +-- 81-722 pass schemes +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_722_PassScheme") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() +end + +if TURBOSTROI then return end + +function TRAIN_SYSTEM:Initialize() + self.PassSchemeCurr = -1 + self.PassSchemeNext = 0 + self.PassSchemePath = false +end +function TRAIN_SYSTEM:CANReceive(source,sourceid,target,targetid,textdata,numdata) + if textdata == "Current" then self.Curr = numdata end + if textdata == "Arrival" then self.Next = numdata end + if textdata == "Path" then self.Path = numdata end +end +function TRAIN_SYSTEM:Think() + local Train = self.Train + if Train.Panel.PassSchemePowerL>0 and Train.Panel.PassSchemePowerR>0 then + self.PassSchemeCurr = self.Curr or -1 + self.PassSchemeNext = self.Next or 0 + self.PassSchemePath = self.Path--not Train.BUV.RevOrientation and self.Path or Train.BUV.RevOrientation and not self.Path + --if self.RevOrientation then self.PassSchemePath = not self.PassSchemePath end + else + self.PassSchemeCurr = 0 + self.PassSchemeNext = 0 + self.PassSchemePath = false + end +end diff --git a/lua/metrostroi/systems/sys_81_722_pneumatic.lua b/lua/metrostroi/systems/sys_81_722_pneumatic.lua new file mode 100644 index 0000000..6ef560c --- /dev/null +++ b/lua/metrostroi/systems/sys_81_722_pneumatic.lua @@ -0,0 +1,581 @@ +-------------------------------------------------------------------------------- +-- 81-722 pneumatic +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_722_Pneumatic") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + -- (013) + -- 1 Accelerated charge + -- 2 Normal charge (brake release) + -- 3 Closed + -- 4 Service application + -- 5 Emergency application + self.DriverValvePosition = 6 + self.RealDriverValvePosition = self.DriverValvePosition + + -- Pressure in parking brake + self.ParkingBrakePressure = 0 + self.AirDistributorPressure = 0 + self.PMPressure = 0 + -- Pressure in reservoir + self.ReservoirPressure = 0.0 -- atm + -- Pressure in trains feed line + self.TrainLinePressure = 8.0 -- atm + -- Pressure in trains brake line + self.BrakeLinePressure = 0.0 -- atm + -- Pressure in brake cylinder + self.BrakeCylinderPressure = 0.0 -- atm + -- Pressure in the door line + self.DoorLinePressure = 0.0 -- atm + + + self.Train:LoadSystem("UAVA","Relay","Switch") + self.Train:LoadSystem("EmergencyBrakeValve","Relay","Switch") + + self.Train:LoadSystem("K31","Relay","Switch", { normally_closed = true}) --KTO + self.Train:LoadSystem("K9","Relay","Switch", { normally_closed = true}) --РВТБ + self.Train:LoadSystem("K29","Relay","Switch") --КРМШ + self.Train:LoadSystem("S1","Relay","") --Двери + + self.V4 = false --Включение РУ + + self.K1 = false + self.K2 = false + self.SD2 = 0 + self.SD3 = 0 + -- Isolation valves + self.Train:LoadSystem("FrontBrakeLineIsolation","Relay","Switch", { normally_closed = true, bass = true}) + self.Train:LoadSystem("RearBrakeLineIsolation","Relay","Switch", { normally_closed = true, bass = true}) + self.Train:LoadSystem("FrontTrainLineIsolation","Relay","Switch", { normally_closed = true, bass = true}) + self.Train:LoadSystem("RearTrainLineIsolation","Relay","Switch", { normally_closed = true, bass = true}) + + -- Brake cylinder atmospheric valve open + self.BrakeCylinderValve = 0 + + -- Overpressure protection valve open + self.TrainLineOverpressureValve = false + + -- Compressor simulation + self.Compressor = 0 --Simulate overheat with TRK FIXME + + -- Disconnect valve status + self.DriverValveDisconnectPrevious = 0 + self.EPKPrevious = 0 + + -- Doors state + --[[self.Train:LoadSystem("LeftDoor1","Relay",{ open_time = 0.5, close_time = 0.5 }) + self.Train:LoadSystem("LeftDoor2","Relay",{ open_time = 0.5, close_time = 0.5 }) + self.Train:LoadSystem("LeftDoor3","Relay",{ open_time = 0.5, close_time = 0.5 }) + self.Train:LoadSystem("LeftDoor4","Relay",{ open_time = 0.5, close_time = 0.5 }) + self.Train:LoadSystem("RightDoor1","Relay",{ open_time = 0.5, close_time = 0.5 }) + self.Train:LoadSystem("RightDoor2","Relay",{ open_time = 0.5, close_time = 0.5 }) + self.Train:LoadSystem("RightDoor3","Relay",{ open_time = 0.5, close_time = 0.5 }) + self.Train:LoadSystem("RightDoor4","Relay",{ open_time = 0.5, close_time = 0.5 })]]-- + self.DoorLeft = false + self.DoorRight = false + self.CloseDoors = false + if not TURBOSTROI then + self.LeftDoorState = { 0,0,0,0 } + self.RightDoorState = { 0,0,0,0 } + self.LeftDoorDir = { 0,0,0,0 } + self.RightDoorDir = { 0,0,0,0 } + self.LeftDoorSpeed = {0,0,0,0} + self.RightDoorSpeed = {0,0,0,0} + self.LeftDoorStuck = {false, false, false, false} + self.RightDoorStuck = {false, false, false, false} + self.DoorSpeedMain = math.Rand(1.9,2.1) + for i=1,#self.LeftDoorSpeed do + self.LeftDoorSpeed[i] = math.Rand(self.DoorSpeedMain-0.3,self.DoorSpeedMain+0.3) + self.RightDoorSpeed[i] = math.Rand(self.DoorSpeedMain-0.3,self.DoorSpeedMain+0.3) + end + end + self.PlayOpen = 1e9 + self.PlayClosed = 1e9 + self.TrainLineOpen = false + self.BrakeLineOpen = false + + self.EmergencyValve = false + self.EmergencyValveEPK = false + self.OldValuePos = self.DriverValvePosition + + self.WeightLoadRatio = 0 + + self.EPKLeaking = false +end + +function TRAIN_SYSTEM:Inputs() + return { "BrakeUp", "BrakeDown", "BrakeSet", "Autostop" } +end + +function TRAIN_SYSTEM:Outputs() + return { "BrakeLinePressure", "BrakeCylinderPressure", "DriverValvePosition", + "ReservoirPressure", "TrainLinePressure", "DoorLinePressure", "WeightLoadRatio", "SD2","SD3" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "BrakeSet" then + self.DriverValvePosition = math.floor(value) + if self.DriverValvePosition < 1 then self.DriverValvePosition = 1 end + if self.DriverValvePosition > 6 then self.DriverValvePosition = 6 end + elseif (name == "BrakeUp") and (value > 0.5) then + self:TriggerInput("BrakeSet",self.DriverValvePosition+1) + elseif (name == "BrakeDown") and (value > 0.5) then + self:TriggerInput("BrakeSet",self.DriverValvePosition-1) + elseif name == "Autostop" then + self.EmergencyValve = self.Train.UAVA.Value == 0 + if self.EmergencyValve and value > 0 then RunConsoleCommand("say","Autostop braking",self.Train:GetDriverName()) end + end +end + + +-- Calculate derivatives +function TRAIN_SYSTEM:equalizeCouplePressure(dT,pressure,train,valve_status,rate,close_rate) + if not valve_status then return 0 end + local other + if IsValid(train) then other = train.Pneumatic end + + -- Get second pressure + local P2 = 0 + if other then P2 = other[pressure] end + if (not other) and (valve_status) then + self.TrainLineOpen = (pressure == "TrainLinePressure") + rate = close_rate or rate + --self.TrainLinePressure_dPdT = 0.0 + end + + -- Calculate rate + local dPdT = rate * (P2 - self[pressure]) + -- Calculate delta + local dP = dPdT*dT + if other and other.ReadOnly then + dP = dP/250 + end + -- Equalized pressure + local P0 = (P2 + self[pressure]) / 2 + -- Update pressures + if dP > 0 then + self[pressure] = math.min(P0,self[pressure] + dP) + if other and not other.ReadOnly then + other[pressure] = math.max(P0,other[pressure] - dP) + end + else + self[pressure] = math.max(P0,self[pressure] + dP) + if other and not other.ReadOnly then + other[pressure] = math.min(P0,other[pressure] - dP) + end + end + -- Update delta if losing air + if self.TrainLineOpen and (pressure == "TrainLinePressure") then + self[pressure.."_dPdT"] = (self[pressure.."_dPdT"] or 0) + dPdT + end + return dP +end +------------------------------------------------------------------------------- +function TRAIN_SYSTEM:UpdatePressures(Train,dT) + local frontBrakeOpen = Train.FrontBrakeLineIsolation.Value == 0 + local rearBrakeOpen = Train.RearBrakeLineIsolation.Value == 0 + local frontTrainOpen = Train.FrontTrainLineIsolation.Value == 0 + local rearTrainOpen = Train.RearTrainLineIsolation.Value == 0 + + local Ft = IsValid(Train.FrontTrain) and Train.FrontTrain + local Rt = IsValid(Train.RearTrain) and Train.RearTrain + local Fc, Rc = Train.FrontCouple or Train.FrontBogey, Train.RearCouple or Train.RearBogey + local Fb,Rb + if IsValid(Fc) and Fc.DepotPneumo then Fb = Fc.DepotPneumo end + if IsValid(Rc) and Rc.DepotPneumo then Rb = Rc.DepotPneumo end + + local frontBrakeLeak = false + local rearBrakeLeak = false + local frontTrainLeak = false + local rearTrainLeak = false + + -- Check if both valve on this train and connected train are open + if Ft and Ft.FrontBrakeLineIsolation then + if Ft.FrontTrain == Train then -- Nose to nose + frontBrakeLeak = frontBrakeOpen and Ft.FrontBrakeLineIsolation.Value==1 and 0.08 + frontTrainLeak = frontTrainOpen and Ft.FrontTrainLineIsolation.Value==1 and 0.08 + else -- Rear to nose + frontBrakeLeak = frontBrakeOpen and Ft.RearBrakeLineIsolation.Value==1 and 0.08 + frontTrainLeak = frontTrainOpen and Ft.RearTrainLineIsolation.Value==1 and 0.08 + end + else + frontBrakeLeak = frontBrakeOpen and 0.7 + frontTrainLeak = frontTrainOpen and not Fb and 0.3 + end + if Rt and Rt.FrontBrakeLineIsolation then + if Rt.FrontTrain == Train then -- Nose to nose + rearBrakeLeak = rearBrakeOpen and Rt.FrontBrakeLineIsolation.Value==1 and 0.08 + rearTrainLeak = rearTrainOpen and Rt.FrontTrainLineIsolation.Value==1 and 0.08 + else -- Rear to nose + rearBrakeLeak = rearBrakeOpen and Rt.RearBrakeLineIsolation.Value==1 and 0.08 + rearTrainLeak = rearTrainOpen and Rt.RearTrainLineIsolation.Value==1 and 0.08 + end + else + rearBrakeLeak = rearBrakeOpen and 0.7 + rearTrainLeak = rearTrainOpen and not Rb and 0.3 + end + + -- Equalize pressure + local Fl=math.min(0,self:equalizeCouplePressure(dT,"BrakeLinePressure",frontBrakeLeak==false and Ft,frontBrakeOpen,100,frontBrakeLeak or 0.08)*3)*(frontBrakeLeak and 1 or 0) + local Rl=math.min(0,self:equalizeCouplePressure(dT,"BrakeLinePressure",rearBrakeLeak==false and Rt,rearBrakeOpen,100,rearBrakeLeak or 0.08)*3)*(rearBrakeLeak and 1 or 0) + + Fl=Fl+math.min(0,self:equalizeCouplePressure(dT,"TrainLinePressure",frontTrainLeak==false and Ft or Fb,frontTrainOpen,100,frontTrainLeak or 0.08)*10)*(frontTrainLeak and 1 or 0) + Rl=Rl+math.min(0,self:equalizeCouplePressure(dT,"TrainLinePressure",rearTrainLeak==false and Rt or Rb,rearTrainOpen,100,rearTrainLeak or 0.08)*10)*(rearTrainLeak and 1 or 0) + + self.TrainLineOpen=frontTrainLeak or rearTrainLeak + self.BraieLineOpen=frontBrakeLeak or rearBrakeLeak + Train:SetPackedRatio("FrontLeak",Fl) + Train:SetPackedRatio("RearLeak",Rl) +end + + + +function TRAIN_SYSTEM:equalizePressure(dT,pressure,target,rate,fill_rate,no_limit,smooth) + if fill_rate and (target > self[pressure]) then rate = fill_rate end + + -- Calculate derivative + local dPdT = rate + if target < self[pressure] then dPdT = -dPdT end + local dPdTramp = math.min(1.0,math.abs(target - self[pressure])*(smooth or 0.5)) + dPdT = dPdT*dPdTramp + + -- Update pressure + self[pressure] = self[pressure] + dT * dPdT + self[pressure] = math.max(0.0,math.min(16.0,self[pressure])) + self[pressure.."_dPdT"] = (self[pressure.."_dPdT"] or 0) + dPdT + if no_limit ~= true then + if self[pressure] == 0.0 then self[pressure.."_dPdT"] = 0 end + if self[pressure] == 16.0 then self[pressure.."_dPdT"] = 0 end + end + return dPdT +end +------------------------------------------------------------------------------- +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + self.WeightLoadRatio = math.max(0,math.min(1,(Train:GetNW2Float("PassengerCount")/200))) + + -- Apply specific rate to equalize pressure + + local V4 = (Train.K29.Value == 1 or Train.Panel.V4>0) + ---------------------------------------------------------------------------- + -- Accumulate derivatives + self.TrainLinePressure_dPdT = 0.0 + self.BrakeLinePressure_dPdT = 0.0 + self.ReservoirPressure_dPdT = 0.0 + self.BrakeCylinderPressure_dPdT = 0.0 + self.AirDistributorPressure_dPdT = 0.0 + self.ParkingBrakePressure_dPdT = 0.0 + -- Reduce pressure for brake line + self.TrainToBrakeReducedPressure = math.min(5.1,self.TrainLinePressure) -- * 0.725) + -- Feed pressure to door line + self.DoorLinePressure = self.TrainToBrakeReducedPressure * 0.90 + local trainLineConsumption_dPdT = 0.0 + local wagc = Train:GetWagonCount() + local pr_speed = 1.25*wagc --2 + if self.Leak or self.BraieLineOpen then pr_speed = pr_speed*0.7 end + -- 013: 1 Overcharge + if (self.RealDriverValvePosition == 1) and V4 then + self:equalizePressure(dT,"BrakeLinePressure", self.TrainLinePressure, pr_speed) + end + + -- 013: 2 Normal pressure + if (self.RealDriverValvePosition == 2) and V4 then + self:equalizePressure(dT,"BrakeLinePressure", 1.01*math.min(5.1,self.TrainToBrakeReducedPressure), pr_speed,nil, nil, 1.0)-- nil, 1.0) + end + + -- 013: 3 4.3 Atm + if (self.RealDriverValvePosition == 3) and V4 then + self:equalizePressure(dT,"BrakeLinePressure", 1.01*math.min(4.3,self.TrainToBrakeReducedPressure), pr_speed,nil, nil, 1.0) + end + + -- 013: 4 4.0 Atm + if (self.RealDriverValvePosition == 4) and V4 then + self:equalizePressure(dT,"BrakeLinePressure", 1.01*math.min(4.0,self.TrainToBrakeReducedPressure), pr_speed,nil, nil, 1.0) + end + + -- 013: 5 3.7 Atm + if (self.RealDriverValvePosition == 5) and V4 then + self:equalizePressure(dT,"BrakeLinePressure", 1.01*math.min(3.7,self.TrainToBrakeReducedPressure), pr_speed,nil, nil, 1.0) + end + + -- 013: 6 3.0 Atm + if (self.RealDriverValvePosition == 6) and V4 then + self:equalizePressure(dT,"BrakeLinePressure", 1.01*math.min(3.0,self.TrainToBrakeReducedPressure), pr_speed,nil, nil, 1.0) + end + local pr_speed = 1.25*wagc + self.Leak = false + if Train.BARS then + local leak = 0 + if self.EmergencyValve then + local leakst = 1.1*(Train:GetWagonCount()) + leak = self:equalizePressure(dT,"BrakeLinePressure", 0.0,pr_speed,false,false,0.4) + if (leak >= -0.2*(Train:GetWagonCount()) or Train.UAVA.Value > 0) then + self.EmergencyValve = false + end + self.Leak = true + end + self.Train:SetPackedRatio("EmergencyValve_dPdT", -leak) + local leak = 0 + if Train.K9.Value == 1 and V4 and Train.Electric.V6Power==0 then + leak = self:equalizePressure(dT,"BrakeLinePressure", 0.0,pr_speed,pr_speed) + self.Leak = true + end + self.EPKLeaking = self.Leak + self.Train:SetPackedRatio("EmergencyValveEPK_dPdT", -leak*2) + end + local leak = 0 + if self.Train.EmergencyBrakeValve and self.Train.EmergencyBrakeValve.Value > 0.5 then + leak = self:equalizePressure(dT,"BrakeLinePressure", 0.0,pr_speed,false,false,0.4) + self.Leak = true + end + self.Train:SetPackedRatio("EmergencyBrakeValve_dPdT", -leak) + self.Train:SetPackedRatio("Crane_dPdT", self.BrakeLinePressure_dPdT ) + trainLineConsumption_dPdT = trainLineConsumption_dPdT + math.max(0,self.BrakeLinePressure_dPdT) +--[[ + local leak = 0 + if self.EmergencyValve then + leak = self:equalizePressure(dT,"BrakeLinePressure", 0.0,2 + 1.375*(Train:GetWagonCount() - 1),false,false,0.4) + end + self.Train:SetPackedRatio("EmergencyValve_dPdT", -leak) + local leak = 0 + if self.EmergencyValveEPK then + leak = self:equalizePressure(dT,"BrakeLinePressure", 0.0,2 + 1.375*(Train:GetWagonCount() - 1),false,false,0.4) + end + self.Train:SetPackedRatio("EmergencyValveEPK_dPdT", -leak) + local leak = 0]]--[[ + local count = 0 + local command = 0 + for i=1,#Train.WagonList do + local train = Train.WagonList[i] + if train.BUKP then + if train.BUKP.Loop == 0 then + count = -99 + end + if train.BUKP.BTB then + count = count + 1 + end + end + end + if Train.BUV.PN2 > 0 then + command = 2 + elseif Train.BUV.PN1 > 0 then + command = 1 + end--]] + + local Power = Train.Electric.BUFT > 0 + local targetPressure = 0--math.max(0,math.min(5.2,1.5*(math.min(5.1,self.TrainToBrakeReducedPressure) - self.BrakeLinePressure))) + --if self.BrakeLinePressure <= 3.3 then + local PMPressure = 0 + local EPMPressure = 0 + local from = self.TrainToBrakeReducedPressure + local targetPM = math.Clamp(((from-self.BrakeLinePressure)/(from-3.2)),0,1)*(2.7+self.WeightLoadRatio*0.7) + if self.PMPressure < targetPM then + self.PMPressure = math.min(targetPM,self.PMPressure+(0.5+math.max(0,(targetPM-self.PMPressure)-0.2)*0.6)*dT) + elseif self.PMPressure > targetPM then + self.PMPressure = math.max(targetPM,self.PMPressure-2*dT) + end + self:equalizePressure(dT,"AirDistributorPressure", targetPM, 2.50, 2.50, nil, 1.3) + --[[--]] + self.EmergencyBrakeActive = (1-Train:ReadTrainWire(26))+(1-Train:ReadTrainWire(25)) > 0 + self.BTBReady = self.AirDistributorPressure >= (2.4+self.WeightLoadRatio*0.9)-0.1 + if self.EmergencyBrakeActive then + PMPressure = self.AirDistributorPressure + if self.BrakeCylinderPressure < self.AirDistributorPressure and self.AirDistributorPressure-self.BrakeCylinderPressure > 0.1 then + self:equalizePressure(dT,"AirDistributorPressure",0, math.min(self.TrainLinePressure,self.AirDistributorPressure-self.BrakeCylinderPressure)*1, (self.AirDistributorPressure-self.BrakeCylinderPressure)*1, nil, 2) + end + end + if Power then + if Train:ReadTrainWire(27) > 0 then + if Train:ReadTrainWire(29) > 0 then + EPMPressure = 1.7+self.WeightLoadRatio*0.7 --2 уÑтавка + elseif Train:ReadTrainWire(30) > 0 then + EPMPressure = 0.75+self.WeightLoadRatio*0.5 --1 уÑтавка + end + else + if Train.BUKV.PN2 then + EPMPressure = 1.7+self.WeightLoadRatio*0.7 --2 уÑтавка + elseif Train.BUKV.PN1 then + EPMPressure = 0.75+self.WeightLoadRatio*0.5 --1 уÑтавка + end + end + end + if EPMPressure > PMPressure then --Работа П1 + targetPressure = EPMPressure + else + targetPressure = PMPressure + end + self.DisableScheme = self.BrakeCylinderPressure > 0.6 + --end + ---------------------------------------------------------------------------- + -- Fill brake cylinders + if Train.K31.Value == 1 then + if math.abs(self.BrakeCylinderPressure - targetPressure) > 0.150 then + self.BrakeCylinderValve = 1 + end + if math.abs(self.BrakeCylinderPressure - targetPressure) < 0.025 then + self.BrakeCylinderValve = 0 + end + local pneumaticValveConsumption_dPdT = 0 + trainLineConsumption_dPdT = trainLineConsumption_dPdT + math.max(0,pneumaticValveConsumption_dPdT) + if self.BrakeCylinderValve == 1 then + self:equalizePressure(dT,"BrakeCylinderPressure", math.min(3.3,self.TrainLinePressure,targetPressure), 2.50, 2.50, nil, self.BrakeCylinderPressure > targetPressure and 0.3+math.Clamp((self.BrakeCylinderPressure-0.4)/3.3,0,0.6) or 0.9) + --if self.DriversValve == 1 then + --self:equalizePressure(dT,"BrakeCylinderPressure", targetPressure, 2.00, 3.50, nil, 1.0) --0.75, 1.25) + --else + + --self:equalizePressure(dT,"BrakeCylinderPressure", math.min(2.7,targetPressure+PN1+PN2), self.TrainToBrakeReducedPressure*0.2, 5.50, nil, 0.6+math.Clamp((self.BrakeCylinderPressure-0.75)/2.1,0,1.3)) --0.75, 1.25) + --print(self.TEMP-self.BrakeCylinderPressure) + --equalizePressure(dT, pressure, target,rate,fill_rate,no_limit,smooth) + --end + end + else + self:equalizePressure(dT,"BrakeCylinderPressure", 0.0, 2.00) + end + if Train.BUKV.ParkingBrake==0 then + self:equalizePressure(dT,"ParkingBrakePressure", self.TrainLinePressure, 0.4,1,nil,0.5) + else + self:equalizePressure(dT,"ParkingBrakePressure", 0, 0.4,1,nil,0.5) + end + Train:SetPackedRatio("ParkingBrakePressure_dPdT",self.ParkingBrakePressure_dPdT+0.02) + trainLineConsumption_dPdT = trainLineConsumption_dPdT + math.max(0,self.BrakeCylinderPressure_dPdT + self.ParkingBrakePressure_dPdT) + self.Train:SetPackedRatio("BrakeCylinderPressure_dPdT", self.BrakeCylinderPressure_dPdT) + + -- Simulate cross-feed between different wagons + self:UpdatePressures(Train,dT) + ---------------------------------------------------------------------------- + -- Simulate compressor operation and train line depletion + self.Compressor = Train.Electric.MK and Train.Electric.MK>0--Train.KK.Value * ((not Train.Electric or Train.Electric.Power750V > 550) and 1 or 0) + self.CompressorOver = self.CompressorOver or 0 + if self.Compressor then + self.CompressorOver = self.CompressorOver + math.random(0.0215,0.0235)*dT + if Train.SF54.Value > 0.5 and self.CompressorOver >= 1 then + self.CompressorOver = 0 + Train:PlayOnce("compressor_pn","cabin",1,1) + end + end + local Ratio = 29/400 + self.TrainLinePressure = self.TrainLinePressure - 0.07*trainLineConsumption_dPdT*dT -- 0.190 --0.170 + if self.Compressor then self:equalizePressure(dT,"TrainLinePressure", 10.0, 0.039) end + --self:equalizePressure(dT,"TrainLinePressure", 8.0, 0.4) --TEMP + self:equalizePressure(dT,"TrainLinePressure", 0,0.001) + -- Overpressure + if self.TrainLinePressure > 9 then self.TrainLineOverpressureValve = true end + if self.TrainLineOverpressureValve then + self:equalizePressure(dT,"TrainLinePressure", 0.0, 0.2) + self.TrainLineOpen = true + if self.TrainLinePressure < 6 then self.TrainLineOverpressureValve = false end + end + + if self.BrakeLinePressure <= 2.6 and self.SD2~=1 then self.SD2 = 1 end + if self.BrakeLinePressure >= 2.8 and self.SD2~=0 then self.SD2 = 0 end + self.SD3 = (IsValid(Train.FrontBogey) and Train.FrontBogey.BrakeCylinderPressure+(not Train.FrontBogey.DisableParking and Train.FrontBogey.ParkingBrakePressure or 0) or self.BrakeCylinderPressure)>0.1 and 1 or 0 + ---------------------------------------------------------------------------- + -- FIXME + Train:SetNW2Bool("FbI",Train.FrontBrakeLineIsolation.Value ~= 0) + Train:SetNW2Bool("RbI",Train.RearBrakeLineIsolation.Value ~= 0) + Train:SetNW2Bool("FtI",Train.FrontTrainLineIsolation.Value ~= 0) + Train:SetNW2Bool("RtI",Train.RearTrainLineIsolation.Value ~= 0) + Train:SetNW2Bool("AD",Train.K31.Value == 0) + + self.Timer = self.Timer or CurTime() + if ((CurTime() - self.Timer > 0.10) and (self.DriverValvePosition > self.RealDriverValvePosition)) then + self.Timer = CurTime() + self.Train:PlayOnce("br_013","cabin") + self.RealDriverValvePosition = self.RealDriverValvePosition + 1 + end + if ((CurTime() - self.Timer > 0.10) and (self.DriverValvePosition < self.RealDriverValvePosition)) then + self.Timer = CurTime() + self.Train:PlayOnce("br_013","cabin") + self.RealDriverValvePosition = self.RealDriverValvePosition - 1 + end + if self.V4Previous ~= V4 then + self.V4Previous = V4 + if not V4 then + self.V4OffTimer = CurTime() + self.Train:PlayOnce("pneumo_disconnect_close","cabin") + else + self.V4OffTimer = nil + self.Train:PlayOnce("pneumo_disconnect_open","cabin") + end + end + if self.V4OffTimer then + if CurTime()-self.V4OffTimer < 0.45 then + local pr_speed = 2.2*(Train:GetWagonCount()) --2 + self:equalizePressure(dT,"BrakeLinePressure", 0,pr_speed) + else + self.V4OffTimer = nil + end + end + +--[[ + if Train.BUV.OpenLeft then + self.DoorLeft = true + end + if Train.BUV.OpenRight then + self.DoorRight = true + end + if Train.BUV.CloseDoors then + self.DoorLeft = false + self.DoorRight = false + end--]] + local commandLeft = (Train:ReadTrainWire(34) > 0 or Train.BUKV.OpenLeft) and (Train:ReadTrainWire(38) > 0 or Train:ReadTrainWire(39) > 0) and Train.SF41.Value > 0 + local commandRight = (Train.BUKV.OpenRightBack or (Train:ReadTrainWire(34) > 0 or Train.BUKV.OpenRight) and (Train:ReadTrainWire(37) > 0 or Train:ReadTrainWire(39) > 0)) and Train.SF42.Value > 0 + local commandClose = Train.BUKV.CloseDoors and Train.SF43.Value > 0 + if commandClose or commandLeft and commandRight then + self.DoorLeft = false + self.DoorRight = false + elseif commandLeft then self.DoorLeft = true + elseif commandRight then self.DoorRight = true end + if Train.CanStuckPassengerLeft then + for i in ipairs(self.LeftDoorStuck) do + self.LeftDoorStuck[i] = math.random() < (0.6+math.min(2,2-self.LeftDoorSpeed[i])*0.2)*Train.CanStuckPassengerLeft*0.6 and (math.random() > 0.7 and CurTime()+math.random()*15) + end + Train.CanStuckPassengerLeft = false + end + if Train.CanStuckPassengerRight then + for i in ipairs(self.RightDoorStuck) do + self.RightDoorStuck[i] = math.random() < (0.6+math.min(2,2-self.LeftDoorSpeed[i])*0.2)*Train.CanStuckPassengerRight*0.6 and (math.random() > 0.7 and CurTime()+math.random()*15) + end + Train.CanStuckPassengerRight = false + end + + Train.LeftDoorsOpen = false + Train.RightDoorsOpen = false + for i=1,4 do + self.LeftDoorDir[i] = math.Clamp(self.LeftDoorDir[i]+dT*(self.DoorLeft and self.LeftDoorSpeed[i] or -self.LeftDoorSpeed[i]),-1,1) + self.RightDoorDir[i] = math.Clamp(self.RightDoorDir[i]+dT*(self.DoorRight and self.RightDoorSpeed[i] or -self.RightDoorSpeed[i]),-1,1) + self.LeftDoorState[i] = math.Clamp(self.LeftDoorState[i] + (1/self.LeftDoorSpeed[i]*dT*self.LeftDoorDir[i]),self.LeftDoorStuck[i] and 0.3 or 0,1) + if self.LeftDoorState[i] == 0 or self.LeftDoorState[i] == 1 then self.LeftDoorDir[i] = 0 end + self.RightDoorState[i] = math.Clamp(self.RightDoorState[i] + (1/self.RightDoorSpeed[i]*dT*self.RightDoorDir[i]),self.RightDoorStuck[i] and 0.3 or 0,1) + if self.RightDoorState[i] == 0 or self.RightDoorState[i] == 1 then self.RightDoorDir[i] = 0 end + ---[[ + if self.LeftDoorState[i] > 0 then + Train.LeftDoorsOpen = true + end + if self.RightDoorState[i] > 0 then + Train.RightDoorsOpen = true + end + --Train.BUV.DoorsOpened = Train.LeftDoorsOpen or Train.RightDoorsOpen--]] + Train:SetPackedRatio("DoorL"..i,self.LeftDoorState[i]) + Train:SetPackedRatio("DoorR"..i,self.RightDoorState[i]) + Train.S1:TriggerInput("Set",not Train.RightDoorsOpen and not Train.LeftDoorsOpen) + end + Train:SetPackedBool("DoorL",self.DoorLeft) + Train:SetPackedBool("DoorR",self.DoorRight) + --[[ + self.DoorLeft = false + self.DoorRight = false + self.CloseDoors = false + self.LeftDoorState = { 0,0,0,0 } + self.RightDoorState = { 0,0,0,0 } + self.LeftDoorSpeed = {0,0,0,0} + self.RightDoorSpeed = {0,0,0,0} + for i=1,#self.LeftDoorSpeed do + self.LeftDoorSpeed = math.random(2.8,3.2) + self.RightDoorSpeed = math.random(2.8,3.2) + end]] +end diff --git a/lua/metrostroi/systems/sys_81_722_routenumber.lua b/lua/metrostroi/systems/sys_81_722_routenumber.lua new file mode 100644 index 0000000..63ab6d0 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_722_routenumber.lua @@ -0,0 +1,231 @@ +-------------------------------------------------------------------------------- +-- 81-722 route number +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_722_RouteNumber") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("RouteNumber1","Relay") + self.Train:LoadSystem("RouteNumber2","Relay") + self.Train:LoadSystem("RouteNumber3","Relay") + self.TriggerNames = { + "RouteNumber1", + "RouteNumber2", + "RouteNumber3", + } + self.Triggers = {} + for k,v in pairs(self.TriggerNames) do + if self.Train[v] then self.Triggers[v] = self.Train[v].Value > 0.5 end + end + + if not TURBOSTROI then + self.RouteNumber = IsValid(self.Train.Owner) and Format("%03d",tonumber(self.Train.Owner:GetInfo("metrostroi_route_number","61")) or 0) or "000" + self.CurrentRouteNumber = self.RouteNumber + self.RouteNumberState = 42 + end +end + +function TRAIN_SYSTEM:Outputs() + return {} +end + +function TRAIN_SYSTEM:Inputs() + return {} +end +if TURBOSTROI then return end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end +if SERVER then + function TRAIN_SYSTEM:Trigger(name,value) + local Train = self.Train + if value then + if not self.NextRouteNumberTimer then + self.NextRouteNumber = Format("%03d",self.CurrentRouteNumber) + end + self.NextRouteNumberTimer = CurTime() + end + if name == "RouteNumber1" and value then + local num = tonumber(self.NextRouteNumber[1]+1) + if num > 9 then num = 0 end + self.NextRouteNumber = self.NextRouteNumber:SetChar(1,num) + end + if name == "RouteNumber2" and value then + local num = tonumber(self.NextRouteNumber[2]+1) + if num > 9 then num = 0 end + self.NextRouteNumber = self.NextRouteNumber:SetChar(2,num) + end + if name == "RouteNumber3" and value then + local num = tonumber(self.NextRouteNumber[3]+1) + if num > 9 then num = 0 end + self.NextRouteNumber = self.NextRouteNumber:SetChar(3,num) + end + end + function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local Panel = Train.Panel + local Work = Train.Electric.Power --and Train.SF19.Value > 0 + if Work then + for k,v in pairs(self.TriggerNames) do + if Train[v] and (Train[v].Value > 0.5) ~= self.Triggers[v] then + self:Trigger(v,Train[v].Value > 0.5) + self.Triggers[v] = Train[v].Value > 0.5 + end + end + if self.NextRouteNumberTimer and CurTime()-self.NextRouteNumberTimer > 5 and self.RouteNumberState == 42 then + self.NextRouteNumberTimer = nil + self.CurrentRouteNumber = tonumber(self.NextRouteNumber) + end + if not self.RouteNumberUpdateDelay or self.RouteNumberUpdateDelay and CurTime()-self.RouteNumberUpdateDelay > 0.1 then + if self.RouteNumberState >= 0 and self.RouteNumber ~= self.CurrentRouteNumber then + self.RouteNumberState = self.RouteNumberState-1 + Train:PlayOnce("blinker_off"..(self.RouteNumberState%2+1),"bass",0.6+math.random()*0.3,1) + + end + if self.RouteNumberState < 42 and self.RouteNumber == self.CurrentRouteNumber then + self.RouteNumberState = self.RouteNumberState+1 + Train:PlayOnce("blinker_on"..(self.RouteNumberState%2+1),"bass",0.6+math.random()*0.3,1) + end + if self.RouteNumberState < 0 and self.RouteNumber ~= self.CurrentRouteNumber then + self.RouteNumber = self.CurrentRouteNumber + self.RouteNumberState = self.RouteNumberState+1 + Train:PlayOnce("blinker_on"..(self.RouteNumberState%2+1),"bass",0.6+math.random()*0.3,1) + end + self.RouteNumberUpdateDelay = CurTime() + end + end + + Train:SetNW2Bool("RouteNumberWork",Work) + Train:SetNW2Int("RouteNumberBright",10) + Train:SetNW2Int("RouteNumberState",self.RouteNumberState) + Train:SetNW2String("RouteNumberLastStation",Train.SarmatUPO.LastStationName) + Train:SetNW2Bool("RouteNumberLastStationWork",Work and Train.SF18.Value > 0 and Train.SarmatUPO.SarmatState > 0) + Train:SetNW2Int("RouteNumber",self.RouteNumber) + Train:SetNW2Int("RouteNumberSet",self.NextRouteNumber or self.RouteNumber) + end +else + function TRAIN_SYSTEM:ClientInitialize() + self.CurrentRouteNumber = 0 + self.RouteNumberState = 42 + self.RouteNumberNeedUpdate = true + self.Work = false + self.RouteNumberBright = 0 + end + function TRAIN_SYSTEM:ClientThink() + if self.Train:ShouldDrawPanel("RouteNumber") and self.RouteNumberNeedUpdate then + render.PushRenderTarget(self.Train.RouteNumber,0,0,256, 128) + render.Clear(0, 0, 0, 0) + cam.Start2D() + surface.SetDrawColor(0,0,0) + --surface.DrawRect(0,0,54,32) + self:RouteNumber(self.Train) + cam.End2D() + render.PopRenderTarget() + self.RouteNumberNeedUpdate = false + end + if self.LastStationNeedUpdate then + render.PushRenderTarget(self.Train.LastStation,0,0,512, 64) + render.Clear(0, 0, 0, 0) + cam.Start2D() + surface.SetDrawColor(0,0,0) + --surface.DrawRect(0,0,54,32) + self:LastStation(self.Train) + cam.End2D() + render.PopRenderTarget() + self.LastStationNeedUpdate = false + end + local number = self.Train:GetNW2Int("RouteNumber",0) + local work = self.Train:GetNW2Bool("RouteNumberWork",false) + if not work and self.CurrentRouteNumber == number then + if work ~= self.Work then + self.RouteNumberBright = 0 + self.Work = false + self.RouteNumberNeedUpdate = true + end + else + local state = self.Train:GetNW2Int("RouteNumberState",0) + local bright = self.Train:GetNW2Int("RouteNumberBright",0) + if self.RouteNumberState ~= state or self.CurrentRouteNumber ~= number or work ~= self.Work or bright ~= self.RouteNumberBright then + self.RouteNumberNeedUpdate = true + self.Work = work + self.RouteNumberBright = bright + self.RouteNumberState = state + self.CurrentRouteNumber = number + end + end + local lswork = self.Train:GetNW2Bool("RouteNumberLastStationWork") + if not lswork then + if lswork ~= self.LastStationWork then + self.LastStationWork = false + self.LastStationNeedUpdate = true + end + else + local laststation = self.Train:GetNW2String("RouteNumberLastStation","") + if self.LastStationName ~= laststation or self.LastStationWork ~= lswork then + self.LastStationWork = lswork + self.LastStationName = laststation + self.LastStationNeedUpdate = true + end + end + end + + local numbers = { + ["0"] = {"0111110","1111111","1100011","1100011","1100011","1100011","1100011","1100011","1100011","1100011","1100011","1100011","1111111","0111110",}, + ["1"] = {"0001100","0011100","0111100","0001100","0001100","0001100","0001100","0001100","0001100","0001100","0001100","0001100","0111111","0111111",}, + ["2"] = {"0222220","2222222","2200022","0000022","0000022","0000022","0000220","0002200","0022000","0220000","2200000","2200000","2222222","2222222",}, + ["3"] = {"0333330","3333333","3300033","0000033","0000033","0000033","0033330","0033330","0000033","0000033","0000033","3300033","3333333","0333330",}, + ["4"] = {"4400044","4400044","4400044","4400044","4400044","4400044","4400044","4444444","4444444","0000044","0000044","0000044","0000044","0000044",}, + ["5"] = {"5555555","5555555","5500000","5500000","5500000","5500000","5555550","5555555","0000055","0000055","0000055","5500055","5555555","0555550",}, + ["6"] = {"0666660","6666666","6600066","6600000","6600000","6600000","6666660","6666666","6600066","6600066","6600066","6600066","6666666","0666660",}, + ["7"] = {"7777777","7777777","7700077","0000077","0000770","0007700","0077000","0770000","7700000","7700000","7700000","7700000","7700000","7700000",}, + ["8"] = {"0888880","8888888","8800088","8800088","8800088","8800088","0888880","0888888","8800088","8800088","8800088","8800088","8888888","0888880",}, + ["9"] = {"0999990","9999999","9900099","9900099","9900099","9900099","9999999","0999999","0000099","0000099","0000099","9900099","9999999","0999990",}, + } + TRAIN_SYSTEM.RouteNumberFont = {} + for i,num in pairs(numbers) do + if not TRAIN_SYSTEM.RouteNumberFont[i] then TRAIN_SYSTEM.RouteNumberFont[i] = {} end + local numtbl = TRAIN_SYSTEM.RouteNumberFont[i] + for ir,row in pairs(num) do + if not numtbl[ir] then numtbl[ir] = {} end + local rowtbl = numtbl[ir] + for ic=1,#row do + rowtbl[ic] = (row[ic] ~= "0") + end + end + end + function TRAIN_SYSTEM:LastStation(Train) + if self.LastStationWork then + draw.SimpleText(self.LastStationName,"Metrostroi_722LastStation",256, 24,Color(255,100,60),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + function TRAIN_SYSTEM:RouteNumber(Train) + local bright = (5-self.RouteNumberBright*0.4) + if self.RouteNumberState < 42 or not self.Work then bright = 5 end + surface.SetDrawColor(150,255,50,255) + surface.SetDrawColor(150/bright,255/bright,50/bright,255) + --surface.SetDrawColor(150,220,50,255) + local num = Format("%03d",self.CurrentRouteNumber) + --print(self.RouteNumberState,math.ceil(self.RouteNumberState/2),self.CurrentRouteNumber,num,type(num),bright) + local rnstate = math.ceil(self.RouteNumberState/2)*2 + local rnstate2 = math.floor(self.RouteNumberState/2)*2 + local half = self.RouteNumberState ~= rnstate + for i=1,3 do + local rnstate = math.ceil((self.RouteNumberState-(i-1)*14)/2)*2 + local rnstate2 = math.floor((self.RouteNumberState-(i-1)*14)/2)*2 + local number = self.RouteNumberFont[num[i]] + if number then + --print(number) + for x=0,6 do + for y=0,13 do + if number[y+1][x+1] and ((14-rnstate2) <= y or ((14-rnstate) <= y and (x%2 > 0 and y%2 == 0 or x%2 == 0 and y%2 > 0))) then + surface.DrawRect((i-1)*64+x*8,1+y*8,7,7) + end + end + end + end + end + end +end diff --git a/lua/metrostroi/systems/sys_81_722_sarmat_upo.lua b/lua/metrostroi/systems/sys_81_722_sarmat_upo.lua new file mode 100644 index 0000000..30b5357 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_722_sarmat_upo.lua @@ -0,0 +1,1092 @@ +-------------------------------------------------------------------------------- +-- 81-722 "Sarmat-UPO" announcer system +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_722_sarmat") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("SarmatUp","Relay","Switch") + self.Train:LoadSystem("SarmatDown","Relay","Switch") + self.Train:LoadSystem("SarmatEnter","Relay","Switch") + self.Train:LoadSystem("SarmatEsc","Relay","Switch") + self.Train:LoadSystem("SarmatF1","Relay","Switch") + self.Train:LoadSystem("SarmatF2","Relay","Switch") + self.Train:LoadSystem("SarmatF3","Relay","Switch") + self.Train:LoadSystem("SarmatF4","Relay","Switch") + self.Train:LoadSystem("SarmatPath","Relay","Switch") + self.Train:LoadSystem("SarmatLine","Relay","Switch") + self.Train:LoadSystem("SarmatZero","Relay","Switch") + self.Train:LoadSystem("SarmatStart","Relay","Switch") + self.TriggerNames = { + "SarmatUp", + "SarmatDown", + "SarmatEnter", + "SarmatEsc", + "SarmatF1", + "SarmatF2", + "SarmatF3", + "SarmatF4", + "SarmatPath", + "SarmatLine", + "SarmatZero", + "SarmatStart", + } + self.Triggers = {} + for k,v in pairs(self.TriggerNames) do + if self.Train[v] then self.Triggers[v] = self.Train[v].Value > 0.5 end + end + self.SarmatState = 0 + self.SarmatAnnState = 1 + self.SarmatCamState = 1 + + self.Line = 1 + self.Path = false + self.Station = 1 + self.Arrived = true + + self.Selected = 0 + + self.LineEnabled = false + + self.UPOActive = 0 + self.LineOut = 0 +end + +function TRAIN_SYSTEM:Outputs() + return {"UPOActive","LineOut"} +end + +function TRAIN_SYSTEM:Inputs() + return {"CheckUPO"} +end +if TURBOSTROI then return end +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "CheckUPO" then + local UPOActive = (math.random()>0.05 and not self.Arrived or self.Arrived and not self.Depeating) and self.LineOut==0 + if UPOActive then + if self.Arrived and not self.Depeating then + --self.Train.BUKP.CloseRing = self.Train.BUKP.CloseRing or CurTime()+3 + self.Depeating = true + elseif not self.Arrived then + self.Arrived = true + + local stbl = Metrostroi.SarmatUPOSetup[self.Train:GetNW2Int("Announcer",1)] + local stbll = stbl[self.Line] + local last = (self.Path and not stbll.Loop) and self.StartStation or self.EndStation + self.Last = self.Station == last + end + self:UpdateSarmat() + end + self.UPOActive = UPOActive and 1 or 0 + self.UPOLock = UPOActive and CurTime() + return UPOActive + end +end +TRAIN_SYSTEM.Specials = {[-4]="Еду на море",[-3]="Ðа порезку",[-2]="Обкатка",[-1]="Перегонка",[0]="Ð’ депо"} +if SERVER then + local function InRange(x,y,px,py,pw,ph) + local hpw,hph = pw/2,ph/2 + return (px-hpw < x and x < px+hpw) and (py-hph < y and y < py+hph) + end + function TRAIN_SYSTEM:Touch(value,x,y) + local Train = self.Train + if self.SarmatCamState == 1 and value then + local WagNum = #Train.WagonList + if InRange(x,y,124,140,113,40,"Левые") then + self.Cam1,self.Cam1E = CurTime()+math.Rand(0.4,4),Train + self.Cam2,self.Cam2E = CurTime()+math.Rand(0.4,4),Train.WagonList[WagNum] + self.Cam3,self.Cam4 = false,false + self.SarmatCamState,self.SarmatCamCount,self.SarmatCamType = 2,2,1 + end + if InRange(x,y,242,140,113,40,"Передние") then + self.Cam1,self.Cam1E = CurTime()+math.Rand(0.4,4),Train + self.Cam2,self.Cam2E = CurTime()+math.Rand(0.4,4),Train + self.Cam3,self.Cam4 = false,false + self.SarmatCamState,self.SarmatCamCount,self.SarmatCamType = 2,2,2 + end + if InRange(x,y,360,140,113,40,"Вокруг") then + self.Cam1,self.Cam1E = CurTime()+math.Rand(0.4,4),Train + self.Cam2,self.Cam2E = CurTime()+math.Rand(0.4,4),Train + self.Cam3,self.Cam3E = CurTime()+math.Rand(0.4,4),Train.WagonList[WagNum] + self.Cam4,self.Cam4E = CurTime()+math.Rand(0.4,4),Train.WagonList[WagNum] + self.SarmatCamState,self.SarmatCamCount,self.SarmatCamType = 4,4,3 + end + if InRange(x,y,478,140,113,40,"Задние") then + self.Cam1,self.Cam1E = CurTime()+math.Rand(0.4,4),Train.WagonList[WagNum] + self.Cam2,self.Cam2E = CurTime()+math.Rand(0.4,4),Train.WagonList[WagNum] + self.Cam3,self.Cam4 = false,false + self.SarmatCamState,self.SarmatCamCount,self.SarmatCamType = 3,2,4 + end + if InRange(x,y,596,140,113,40,"Правые") then + self.Cam1,self.Cam1E = CurTime()+math.Rand(0.4,4),Train + self.Cam2,self.Cam2E = CurTime()+math.Rand(0.4,4),Train.WagonList[WagNum] + self.Cam3,self.Cam4 = false,false + self.SarmatCamState,self.SarmatCamCount,self.SarmatCamType = 3,2,5 + end + + for i=1+self.Selected,math.min(WagNum,6+self.Selected) do + if InRange(x,y,65+(i-1-self.Selected)*118+118*math.max(0,6-WagNum)/2 ,235,113,40,"Вагон "..i) then + self.Cam1,self.Cam1E = CurTime()+math.Rand(0.4,4),Train.WagonList[i] + self.Cam2,self.Cam2E = CurTime()+math.Rand(0.4,4),Train.WagonList[i] + self.Cam3,self.Cam3E = CurTime()+math.Rand(0.4,4),Train.WagonList[i] + self.Cam4,self.Cam4E = CurTime()+math.Rand(0.4,4),Train.WagonList[i] + self.SarmatCamState,self.SarmatCamCount,self.SarmatCamType = 5,4,6 + end + end + + if InRange(x,y,220,350,113,40,"Вагон 1") then + self.Cam1,self.Cam1E = CurTime()+math.Rand(0.4,4),Train + self.Cam2,self.Cam3,self.Cam4 = false,false + self.SarmatCamState,self.SarmatCamCount,self.SarmatCamType = 6,1,7 + end + if InRange(x,y,500,350,113,40,"Вагон "..WagNum) then + self.Cam1,self.Cam1E = CurTime()+math.Rand(0.4,4),Train.WagonList[WagNum] + self.Cam2,self.Cam3,self.Cam4 = false,false + self.SarmatCamState,self.SarmatCamCount,self.SarmatCamType = 6,1,8 + end + + if InRange(x,y,220,465,113,40,"Вагон 1") then + self.Cam1,self.Cam1E = CurTime()+math.Rand(0.4,4),Train + self.Cam2,self.Cam3,self.Cam4 = false,false + self.SarmatCamState,self.SarmatCamCount,self.SarmatCamType = 7,1,9 + end + if InRange(x,y,500,465,113,40,"Вагон "..WagNum) then + self.Cam1,self.Cam1E = CurTime()+math.Rand(0.4,4),Train.WagonList[WagNum] + self.Cam2,self.Cam3,self.Cam4 = false,false + self.SarmatCamState,self.SarmatCamCount,self.SarmatCamType = 7,1,10 + end + --surface.DrawTexturedRectRotated(110,590,200,40,0) + --draw.SimpleText("Esc","Metrostroi_Arial20",110,590, Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + + if InRange(x,y,320,590,200,40,"<-") then + self.Selected = math.max(self.Selected - 1,0) + end + if InRange(x,y,530,590,200,40,"->") then + self.Selected = math.Clamp(self.Selected + 1,0,#Train.WagonList-6) + end + end + if self.SarmatCamState > 1 and value then + if InRange(x,y,110,590,200,40,"Esc") then + self.SarmatCamState = 1 + self.Cam1 = false + self.Cam2 = false + self.Cam3 = false + self.Cam4 = false + self.Selected = 0 + end + end + Train:SetNW2Int("SarmatCamSelected",self.Selected) + end + + function TRAIN_SYSTEM:Zero() + local stbl = Metrostroi.SarmatUPOSetup[self.Train:GetNW2Int("Announcer",1)] + local stbll = stbl[self.Line] + if not stbll then + self:UpdateSarmat() + return + end + if stbll.Loop then + self.Station = self.Path and #stbll or 1 + else + self.Station = self.Path and self.EndStation or self.StartStation + end + self.Arrived = true + self.Depeating = false + self:UpdateSarmat() + end + + function TRAIN_SYSTEM:Next() + local stbl = Metrostroi.SarmatUPOSetup[self.Train:GetNW2Int("Announcer",1)] + local stbll = stbl[self.Line] + if not stbll then return end + local last = (self.Path and not stbll.Loop) and self.StartStation or self.EndStation + if stbll.Loop then + if self.Arrived then + if self.Path then + self.Station = math.max(0,self.Station - 1) + if self.Station <= 0 then self.Station = #stbll end + else + local max = #stbll + if self.Station >= max then self.Station = 0 end + self.Station = math.min(max,self.Station + 1) + end + self.Arrived = false + else + if self.Station ~= (self.EndStation > 0 and self.EndStation or -1) then + self.Arrived = true + end + end + else + if self.Last then + self.Station = self.Path and self.EndStation or self.StartStation + self.Arrived = true + elseif self.Arrived then + if self.Path then + self.Station = math.max(self.StartStation,self.Station - 1) + else + self.Station = math.min(self.EndStation,self.Station + 1) + end + self.Arrived = false + else + if self.Station ~= (self.Path and self.StartStation or self.EndStation) then + self.Arrived = true + end + end + end + self.Last = self.Station == last + self.Depeating = false + self:UpdateSarmat() + end + function TRAIN_SYSTEM:Prev() + local stbl = Metrostroi.SarmatUPOSetup[self.Train:GetNW2Int("Announcer",1)] + local stbll = stbl[self.Line] + if not stbll then return end + if stbll.Loop then + if not self.Arrived then + if self.Path then + if self.Station >= #stbll then self.Station = 0 end + self.Station = math.min(#stbll,self.Station + 1) + else + self.Station = math.max(0,self.Station - 1) + if self.Station <= 0 then self.Station = #stbll end + if self.Station == self.EndStation then + self:Prev() + end + end + self.Arrived = true + else + self.Arrived = false + end + else + if not self.Arrived then + if self.Path then + self.Station = math.min(self.EndStation,self.Station + 1) + else + self.Station = math.max(self.StartStation,self.Station - 1) + end + self.Arrived = true + else + if self.Station ~= (self.Path and self.EndStation or self.StartStation) then + self.Arrived = false + end + end + end + self.Last = self.Station == last + self.Depeating = false + self:UpdateSarmat() + end + + function TRAIN_SYSTEM:AnnQueue(msg) + local Announcer = self.Train.Announcer + if msg and type(msg) ~= "table" then + Announcer:Queue{msg} + else + Announcer:Queue(msg) + end + end + + function TRAIN_SYSTEM:Play(dep) + local ltbl = Metrostroi.SarmatUPOSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + if not ltbl then return end + local stbl = ltbl[self.Station] + local last = (self.Path and not ltbl.Loop) and self.StartStation or self.EndStation + local lastst = self.Station == last + if dep then + local message = stbl.dep[self.Path and 2 or 1] + if message and not lastst then + self.Train.Announcer:TriggerInput("Reset","AnnouncementsSarmatUPO") + self:AnnQueue("tone") + if stbl.odz then self:AnnQueue(stbl.odz) end + self:AnnQueue(message) + end + else + local message + if lastst then + message = stbl.arrlast[self.Path and 2 or 1] + else + message = stbl.arr[self.Path and 2 or 1] + end + if message then + self.Train.Announcer:TriggerInput("Reset","AnnouncementsSarmatUPO") + self:AnnQueue("tone") + if lastst and not stbl.ignorelast then self:AnnQueue(-1) end + self:AnnQueue(message) + end + end + self.Last = lastst + self:UpdateSarmat() + end + + function TRAIN_SYSTEM:UpdateSarmat() + if not self.Active then return end + local tbl = Metrostroi.SarmatUPOSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + if not tbl then + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"PassSchemes",nil,"Current",0) + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"PassSchemes",nil,"Arrival",32) + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"PassSchemes",nil,"Path",self.Path) + + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"Tickers",nil,"Prev",self.Specials[self.Line]) + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"Tickers",nil,"PrevEn",false) + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"Tickers",nil,"Next",self.Specials[self.Line]) + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"Tickers",nil,"NextEn",false) + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"Tickers",nil,"NextRight",false) + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"Tickers",nil,"Curr",self.Specials[self.Line]) + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"Tickers",nil,"CurrEn",false) + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"Tickers",nil,"CurrRight",false) + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"Tickers",nil,"Arrived",true) + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"Tickers",nil,"Last",false) + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"Tickers",nil,"Closing",false) + if self.Specials[self.Line] then + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"Tickers",nil,"Special","%g"..self.Specials[self.Line].."\n%r"..self.Specials[self.Line]) + end + return + end + local stbl = tbl.LED + local last = self.Path and self.FirstStation or self.LastStation + + local curr=0 + if self.Path then + for i=#stbl,self.Station+(self.Depeating and 0 or 1),-1 do curr = curr + stbl[i] end + else + for i=1,self.Station-(self.Depeating and 0 or 1) do curr = curr + stbl[i] end + end + local nxt = 0 + if self.Arrived and not self.Depeating then + curr = curr + stbl[self.Station] + else + nxt = stbl[self.Station] + end + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"PassSchemes",nil,"Current",curr) + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"PassSchemes",nil,"Arrival",nxt) + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"PassSchemes",nil,"Path",self.Path) + + local curr,prev,nxt = tbl[self.Station],tbl[self.Station-(self.Path and -1 or 1)],tbl[self.Station-(self.Path and 1 or -1)] + if not self.Arrived then prev = curr nxt = curr end + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"Tickers",nil,"Prev",prev and prev[2]) + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"Tickers",nil,"PrevEn",prev and prev[3]) + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"Tickers",nil,"Next",nxt and nxt[2]) + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"Tickers",nil,"NextEn",nxt and nxt[3]) + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"Tickers",nil,"NextRight",nxt and nxt.right_doors) + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"Tickers",nil,"Curr",curr and curr[2]) + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"Tickers",nil,"CurrEn",curr and curr[3]) + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"Tickers",nil,"CurrRight",curr and curr.right_doors) + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"Tickers",nil,"Arrived",self.Arrived and not self.Depeating) + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"Tickers",nil,"Last",self.Last) + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"Tickers",nil,"Closing",self.Depeating) + self.Train:CANWrite("Sarmat",self.Train:GetWagonNumber(),"Tickers",nil,"Special",not self.Last and (self.Arrived and (self.Depeating and curr.messagedep or not self.Depeating and curr.messagearr) or not self.Arrived and prev.messagedep)) + end + + function TRAIN_SYSTEM:Trigger(name,value) + local Train = self.Train + if self.SarmatAnnState == 1 then + if name == "SarmatZero" and value then + self:Zero() + if self.ZeroTimer then + if CurTime()-self.ZeroTimer < 0.3 then self.SarmatAnnState = 2 end + self.ZeroTimer = nil + end + if not self.ZeroTimer then self.ZeroTimer = CurTime() end + end + if name == "SarmatLine" and value then + self.LineEnabled = not self.LineEnabled + end + if name == "SarmatStart" and value and self.LineOut==0 then + if not self.Arrived then + self:Play(false) + elseif self.Arrived then + self:Play(true) + end + end + local stbl = Metrostroi.SarmatUPOSetup[self.Train:GetNW2Int("Announcer",1)] + if name == "SarmatPath" and value then + self.Path = not self.Path + if not stbl[self.Line] then + self.LastStationName = self.Specials[self.Line] + elseif self.EndStation == 0 then + self.LastStationName = "Кольцевой" + else + self.LastStationName = stbl[self.Line][self.Path and not stbl[self.Line].Loop and self.StartStation or self.EndStation][2] + end + self:Zero() + end + if name == "SarmatF1" and value and stbl[self.Line] then + self.SarmatAnnState = 3 + self.Select = 1 + end + if name == "SarmatF2" and value and stbl[self.Line] then + self.SarmatAnnState = 4 + self.Select = 1 + end + if name == "SarmatF3" and value and stbl[self.Line] then + self.SarmatAnnState = 5 + self.Select = 1 + end + if name == "SarmatF4" and value then + self.SarmatAnnState = 6 + self.Select = 1 + end + if name == "SarmatDown" and value then + self:Next() + end + if name == "SarmatUp" and value then + self:Prev() + end + end + if self.SarmatAnnState == 2 then + local stbl = Metrostroi.SarmatUPOSetup[self.Train:GetNW2Int("Announcer",1)] + if name == "SarmatDown" and value then + self.Line = math.min(#stbl,self.Line + 1) + end + if name == "SarmatUp" and value then + self.Line = math.max(-4,self.Line - 1) + end + if name == "SarmatEnter" and value then + self.SarmatAnnState = 1 + self.StartStation = 1 + if stbl[self.Line] then + if stbl[self.Line].Loop then + self.EndStation = 0 + else + self.EndStation = #stbl[self.Line] + end + if self.EndStation == 0 then + self.LastStationName = "Кольцевой" + else + self.LastStationName = stbl[self.Line][self.Path and not stbl[self.Line].Loop and self.StartStation or self.EndStation][2] + end + else + self.EndStation = 0 + self.LastStationName = self.Specials[self.Line] + end + self:Zero() + end + end + if self.SarmatAnnState == 3 then + local stbl = Metrostroi.SarmatUPOSetup[self.Train:GetNW2Int("Announcer",1)] + local stbll = stbl[self.Line] + if name == "SarmatDown" and value then + for i=self.Select+1,#stbll do + if i==1 or i==#stbll or stbll[i].arrlast then + self.Select = i + break + end + end + end + if name == "SarmatUp" and value then + local selected = false + for i=self.Select-1,1,-1 do + if i==1 or i==#stbll or stbll[i].arrlast then + self.Select = i + selected = true + break + end + end + if stbll.Loop and not selected then + self.Select = 0 + end + end + if name == "SarmatF1" and value and not stbll.Loop then + if self.Select < self.EndStation then + self.StartStation = self.Select + self.LastStationName = stbl[self.Line][self.Path and not stbl[self.Line].Loop and self.StartStation or self.EndStation][2] + self:Zero() + end + end + if name == "SarmatF2" and value then + if self.Select > self.StartStation or stbll.Loop then + self.EndStation = self.Select + if self.EndStation == 0 then + self.LastStationName = "Кольцевой" + else + self.LastStationName = stbl[self.Line][self.Path and not stbl[self.Line].Loop and self.StartStation or self.EndStation][2] + end + self:Zero() + end + end + if (name == "SarmatEnter" or name == "SarmatEsc") and value then + self.SarmatAnnState = 1 + self:Zero() + end + end + if self.SarmatAnnState == 4 then + if (name == "SarmatEnter" or name == "SarmatEsc") and value then + self.SarmatAnnState = 1 + end + end + if self.SarmatAnnState == 5 then + if (name == "SarmatEnter" or name == "SarmatEsc") and value then + self.SarmatAnnState = 1 + end + end + if self.SarmatAnnState == 6 then + if (name == "SarmatEnter" or name == "SarmatEsc") and value then + self.SarmatAnnState = 1 + end + end + Train:SetNW2Int("SarmatSelect",self.Select) + end + function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local Power = Train.Electric.Power > 0 and Train.SF17.Value > 0 + + if not Power and self.SarmatState ~= 0 then + self.SarmatState = 0 + self.SarmatTimer = nil + if self.LineOut>0 then self:AnnQueue(-2) end + end + if Power and self.SarmatState == 0 then + self.SarmatState = -1 + self.SarmatTimer = CurTime()-math.Rand(-0.5,1) + self.SarmatAnnState = 1 + self.SarmatCamState = 1 + self.Cam1,self.Cam1E = false,NULL + self.Cam2,self.Cam2E = false,NULL + self.Cam3,self.Cam3E = false,NULL + self.Cam4,self.Cam4E = false,NULL + self.Selected = 0 + Train:SetNW2Int("SarmatCamSelected",self.Selected) + end + if self.SarmatState == -1 and self.SarmatTimer and CurTime()-self.SarmatTimer > 2 then + self.SarmatState = -2 + self.SarmatTimer = CurTime()-math.Rand(-0.5,1.5) + end + if self.SarmatState == -2 and self.SarmatTimer and CurTime()-self.SarmatTimer > 14 then + self.SarmatState = -3 + self.SarmatTimer = CurTime()-math.Rand(-0.3,0.5) + end + if self.SarmatState == -3 and self.SarmatTimer and CurTime()-self.SarmatTimer > 1 then + if Metrostroi.SarmatUPOSetup and Metrostroi.SarmatUPOSetup[self.Train:GetNW2Int("Announcer",1)] then + self.SarmatState = 1 + else + self.SarmatState = -4 + return + end + + local stbl = Metrostroi.SarmatUPOSetup[self.Train:GetNW2Int("Announcer",1)] + self.StartStation = self.StartStation or 1 + if stbl[self.Line].Loop then + self.EndStation = self.EndStation or 0 + else + self.EndStation = self.EndStation or #stbl[self.Line] + end + if self.EndStation == 0 then + self.LastStationName = "Кольцевой" + else + self.LastStationName = stbl[self.Line][self.Path and not stbl[self.Line].Loop and self.StartStation or self.EndStation][2] + end + self:Zero() + end + if self.SarmatState > 0 and Train.BUKP.Active > 0 then + if self.SarmatCamState > 1 then + Train:SetNW2Int("SarmatCamType",self.SarmatCamType) + local cam1,cam2,cam3,cam4 = false,false,false,false + for i=1,#Train.WagonList do + local train = Train.WagonList[i] + if self.Cam1 and self.Cam1E == train then cam1 = true end + if self.Cam2 and self.Cam2E == train then cam2 = true end + if self.Cam3 and self.Cam3E == train then cam3 = true end + if self.Cam4 and self.Cam4E == train then cam4 = true end + end + if self.Cam1 == true and (not IsValid(self.Cam1E) or not cam1) then self.Cam1 = false end + if self.Cam2 == true and (not IsValid(self.Cam2E) or not cam2) then self.Cam2 = false end + if self.Cam3 == true and (not IsValid(self.Cam3E) or not cam3) then self.Cam3 = false end + if self.Cam4 == true and (not IsValid(self.Cam4E) or not cam4) then self.Cam4 = false end + if self.Cam1 == true then + Train:SetNW2Bool("SarmatCam1C",true) + Train:SetNW2Entity("SarmatCam1E",self.Cam1E) + else + if self.Cam1 and self.Cam1 ~= true and CurTime()-self.Cam1 > 0 then self.Cam1 = true end + Train:SetNW2Bool("SarmatCam1C",false) + end + if IsValid(self.Cam1E) then Train:SetNW2Int("SarmatCam1EN",self.Cam1E:GetWagonNumber()) end + if self.Cam2 == true then + Train:SetNW2Bool("SarmatCam2C",true) + Train:SetNW2Entity("SarmatCam2E",self.Cam2E) + else + if self.Cam2 and self.Cam2 ~= true and CurTime()-self.Cam2 > 0 then self.Cam2 = true end + Train:SetNW2Bool("SarmatCam2C",false) + end + if IsValid(self.Cam2E) then Train:SetNW2Int("SarmatCam2EN",self.Cam2E:GetWagonNumber()) end + if self.Cam3 == true then + Train:SetNW2Bool("SarmatCam3C",true) + Train:SetNW2Entity("SarmatCam3E",self.Cam3E) + else + if self.Cam3 and self.Cam3 ~= true and CurTime()-self.Cam3 > 0 then self.Cam3 = true end + Train:SetNW2Bool("SarmatCam3C",false) + end + if IsValid(self.Cam3E) then Train:SetNW2Int("SarmatCam3EN",self.Cam3E:GetWagonNumber()) end + if self.Cam4 == true then + Train:SetNW2Bool("SarmatCam4C",true) + Train:SetNW2Entity("SarmatCam4E",self.Cam4E) + else + if self.Cam4 and self.Cam4 ~= true and CurTime()-self.Cam4 > 0 then self.Cam4 = true end + Train:SetNW2Bool("SarmatCam4C",false) + end + if IsValid(self.Cam4E) then Train:SetNW2Int("SarmatCam4EN",self.Cam4E:GetWagonNumber()) end + Train:SetNW2Int("SarmatCamC",self.SarmatCamCount) + end + + + Train:SetNW2Int("SarmatCamState",self.SarmatCamState) + else + Train:SetNW2Int("SarmatCamState",0) + Train:SetNW2Bool("SarmatCam1C",false) + Train:SetNW2Bool("SarmatCam2C",false) + Train:SetNW2Bool("SarmatCam3C",false) + Train:SetNW2Bool("SarmatCam4C",false) + end + if self.SarmatState > 0 and Train.BUKP.Active > 0 then + if not self.Active then self.Active = true self:UpdateSarmat() end + for k,v in pairs(self.TriggerNames) do + if Train[v] and (Train[v].Value > 0.5) ~= self.Triggers[v] then + self:Trigger(v,Train[v].Value > 0.5) + --print(v,self.Train[v].Value > 0.5) + self.Triggers[v] = Train[v].Value > 0.5 + end + end + local OpenDoors = Train.BUKP.OpenLeft or Train.BUKP.OpenRight + local CloseDoors = not not Train.BUKP.CloseRing + local UPOPlaying = self.UPOActive>0 and Train.UPO.LineOut>0 + if not self.Depeating and (OpenDoors or UPOPlaying) and not self.Arrived then + self.Arrived = true + if self.UPOActive==0 then self:Play(false) end + end + if OpenDoors and self.Depeating then + self.Depeating = false + self:UpdateSarmat() + end + if self.Arrived and (CloseDoors~=self.CloseDoors and CloseDoors or UPOPlaying) then + --local ltbl = Metrostroi.SarmatUPOSetup[self.Train:GetNW2Int("Announcer",1)][self.Line] + if self.UPOActive==0 and not self.Depeating then + self.Depeating = true + self:Play(true) + end + --self:UpdateSarmat() + end + self.CloseDoors = CloseDoors + if self.UPOActive>0 and not UPOPlaying and (not self.UPOLock or CurTime()-self.UPOLock)>0.5 then + self.UPOActive = 0 + self.UPOLock = false + end + if self.Depeating and Train.BUKP.Speed>3 then + self:Next() + end + else + if self.Depeating then + self:Next() + end + self.UPOActive = 0 + self.UPOLock = false + self.CloseDoors = false + self.Active = false + --self.CloseTimer = CurTime() + end + Train:SetNW2Bool("SarmatMonitor",Train.Electric.Power>0 and Train.SF16.Value > 0) + Train:SetNW2Int("SarmatState",self.SarmatState) + Train:SetNW2Int("WagNum",#Train.WagonList) + + Train:SetNW2Int("SarmatAnnState",self.SarmatAnnState) + + Train:SetNW2Int("SarmatLine",self.Line) + Train:SetNW2Bool("SarmatPath",self.Path) + Train:SetNW2Int("SarmatStation",self.Station) + Train:SetNW2Bool("SarmatStationArr",self.Arrived) + + Train:SetNW2Bool("SarmatLineEnabled",self.LineEnabled) + + Train:SetNW2Int("SarmatStartStation",self.StartStation) + Train:SetNW2Int("SarmatEndStation",self.EndStation) + + local Ann = Train.Announcer + self.LineOut = (Ann.AnnTable=="AnnouncementsSarmatUPO" and Ann.AnnounceTimer) and 1 or 0 + end +else + local function createFont(name,font,size,weight) + surface.CreateFont("Metrostroi_"..name, { + font = font, + size = size, + weight = weight or 400, + blursize = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + }) + end + --createFont("BUKPSpeed","Eurostar Metrostroi",80) + createFont("Arial15","Arial",15,800) + createFont("Arial20","Arial",20,800) + createFont("Arial22","Arial",22,400) + createFont("Arial25","Arial",25,400) + createFont("Arial30","Arial",30,400) + local ubuntu_load = surface.GetTextureID("models/metrostroi_train/81-722/screens/sarmat_upo/ubuntu_load") + local button = surface.GetTextureID("models/metrostroi_train/81-722/screens/sarmat_upo/button") + + + + function TRAIN_SYSTEM:ClientInitialize() + self.Cam1 = self.Train:CreateRT("720SarmatC1",256,256,true) + self.Cam2 = self.Train:CreateRT("720SarmatC2",256,256,true) + self.Cam3 = self.Train:CreateRT("720SarmatC3",256,256,true) + self.Cam4 = self.Train:CreateRT("720SarmatC4",256,256,true) + end + local CamRT = surface.GetTextureID( "pp/rt" ) + local CamRTM = Material( "pp/rt" ) + local SarPos = Vector(470,41,-6) + function TRAIN_SYSTEM:ClientThink() + if not self.Train:ShouldDrawPanel("Sarmat") then return end + local train = self.Train + local state = train:GetNW2Int("SarmatState",0) + local camstate = train:GetNW2Int("SarmatCamState",1) + local Cam1,Cam1E = train:GetNW2Bool("SarmatCam1C"),train:GetNW2Entity("SarmatCam1E") + local Cam2,Cam2E = train:GetNW2Bool("SarmatCam2C"),train:GetNW2Entity("SarmatCam2E") + local Cam3,Cam3E = train:GetNW2Bool("SarmatCam3C"),train:GetNW2Entity("SarmatCam3E") + local Cam4,Cam4E = train:GetNW2Bool("SarmatCam4C"),train:GetNW2Entity("SarmatCam4E") + if state > 0 then + if camstate == 2 then + if Cam1 then Metrostroi.RenderCamOnRT(train,SarPos,"Cam1",math.Rand(0.2,0.5),self.Cam1,Cam1E,Vector(425,65,40),Angle(5,180-5,0),256,256,2,64,64) end + if Cam2 then Metrostroi.RenderCamOnRT(train,SarPos,"Cam2",math.Rand(0.2,0.5),self.Cam2,Cam2E,Vector(425,-65,40),Angle(5,180+5,0),256,256,2,64,64) end + end + if camstate == 3 then + if Cam1 then Metrostroi.RenderCamOnRT(train,SarPos,"Cam1",math.Rand(0.2,0.5),self.Cam1,Cam1E,Vector(425,-65,40),Angle(5,180+5,0),256,256,2,64,64) end + if Cam2 then Metrostroi.RenderCamOnRT(train,SarPos,"Cam2",math.Rand(0.2,0.5),self.Cam2,Cam2E,Vector(425,65,40),Angle(5,180-5,0),256,256,2,64,64) end + end + if camstate == 4 then + if Cam1 then Metrostroi.RenderCamOnRT(train,SarPos,"Cam1",math.Rand(0.2,0.5),self.Cam1,Cam1E,Vector(425,65,40),Angle(5,180-5,0),256,256,2,64,64) end + if Cam2 then Metrostroi.RenderCamOnRT(train,SarPos,"Cam2",math.Rand(0.2,0.5),self.Cam2,Cam2E,Vector(425,-65,40),Angle(5,180+5,0),256,256,2,64,64) end + if Cam3 then Metrostroi.RenderCamOnRT(train,SarPos,"Cam3",math.Rand(0.2,0.5),self.Cam3,Cam3E,Vector(425,-65,40),Angle(5,180+5,0),256,256,2,64,64) end + if Cam4 then Metrostroi.RenderCamOnRT(train,SarPos,"Cam4",math.Rand(0.2,0.5),self.Cam4,Cam4E,Vector(425,65,40),Angle(5,180-5,0),256,256,2,64,64) end + end + if camstate == 5 then + if Cam1 then Metrostroi.RenderCamOnRT(train,SarPos,"Cam1",math.Rand(0.2,0.5),self.Cam1,Cam1E,Vector(360,-45,30),Angle(15,180-15,0),256,256,1) end + if Cam2 then Metrostroi.RenderCamOnRT(train,SarPos,"Cam2",math.Rand(0.2,0.5),self.Cam2,Cam2E,Vector(360,45,30),Angle(15,180+15,0),256,256,1) end + if Cam3 then Metrostroi.RenderCamOnRT(train,SarPos,"Cam3",math.Rand(0.2,0.5),self.Cam3,Cam3E,Vector(-360,-45,30),Angle(15,15,0),256,256) end + if Cam4 then Metrostroi.RenderCamOnRT(train,SarPos,"Cam4",math.Rand(0.2,0.5),self.Cam4,Cam4E,Vector(-360,45,30),Angle(15,-15,0),256,256) end + end + if camstate == 6 then + if Cam1 then Metrostroi.RenderCamOnRT(train,SarPos,"Cam1",math.Rand(0.2,0.5),self.Cam1,Cam1E,Vector(408,35,37),Angle(25,-15,0),256,256,1) end + end + if camstate == 7 then + if Cam1 then Metrostroi.RenderCamOnRT(train,SarPos,"Cam1",math.Rand(0.2,0.5),self.Cam1,Cam1E,Vector(490,6,-7),Angle(0,0,0),256,256,1) end + end + end + --debugoverlay.Sphere(self.Train:LocalToWorld(Vector(425,-65,46)),2,1,Color( 255, 255, 255 ),true) + render.PushRenderTarget(self.Train.Sarmat,0,0,1024, 1024) + render.Clear(0, 0, 0, 0) + cam.Start2D() + surface.SetDrawColor(0,0,0) + surface.DrawRect(0,0,1024,640) + self:SarmatMonitor(self.Train) + cam.End2D() + render.PopRenderTarget() + end + + local function drawButton(x,y,w,h,text) + surface.DrawTexturedRectRotated(x,y,w,h,0) + draw.SimpleText(text,"Metrostroi_Arial20",x,y, Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + local names = { + "Левые камеры", + "Передние камеры", + "Ð’Ñе левые/правые камеры", + "Задние камеры", + "Правые камеры", + "Салонные камеры", + "Камера на поÑте машиниÑта", + "Камера на поÑте машиниÑта", + "ÐŸÑƒÑ‚ÐµÐ²Ð°Ñ ÐºÐ°Ð¼ÐµÑ€Ð°", + "ÐŸÑƒÑ‚ÐµÐ²Ð°Ñ ÐºÐ°Ð¼ÐµÑ€Ð°", + } + local types = { + {"Ð›ÐµÐ²Ð°Ñ ÐºÐ°Ð¼ÐµÑ€Ð° 1 вагона","Ð›ÐµÐ²Ð°Ñ ÐºÐ°Ð¼ÐµÑ€Ð° %d вагона"}, + {"Ð›ÐµÐ²Ð°Ñ ÐºÐ°Ð¼ÐµÑ€Ð° 1 вагона","ÐŸÑ€Ð°Ð²Ð°Ñ ÐºÐ°Ð¼ÐµÑ€Ð° 1 вагона"}, + {"Ð›ÐµÐ²Ð°Ñ ÐºÐ°Ð¼ÐµÑ€Ð° 1 вагона","ÐŸÑ€Ð°Ð²Ð°Ñ ÐºÐ°Ð¼ÐµÑ€Ð° 1 вагона","Ð›ÐµÐ²Ð°Ñ ÐºÐ°Ð¼ÐµÑ€Ð° %d вагона","ÐŸÑ€Ð°Ð²Ð°Ñ ÐºÐ°Ð¼ÐµÑ€Ð° %d вагона"}, + {"Ð›ÐµÐ²Ð°Ñ ÐºÐ°Ð¼ÐµÑ€Ð° %d вагона","ÐŸÑ€Ð°Ð²Ð°Ñ ÐºÐ°Ð¼ÐµÑ€Ð° %d вагона"}, + {"ÐŸÑ€Ð°Ð²Ð°Ñ ÐºÐ°Ð¼ÐµÑ€Ð° 1 вагона","ÐŸÑ€Ð°Ð²Ð°Ñ ÐºÐ°Ð¼ÐµÑ€Ð° %d вагона"}, + {"ПереднÑÑ Ð¿Ñ€Ð°Ð²Ð°Ñ ÐºÐ°Ð¼ÐµÑ€Ð° Ñалона","ПереднÑÑ Ð»ÐµÐ²Ð°Ñ ÐºÐ°Ð¼ÐµÑ€Ð° Ñалона","ЗаднÑÑ Ð¿Ñ€Ð°Ð²Ð°Ñ ÐºÐ°Ð¼ÐµÑ€Ð° Ñалона","ЗаднÑÑ Ð»ÐµÐ²Ð°Ñ ÐºÐ°Ð¼ÐµÑ€Ð° Ñалона"}, + {"Камера кабины 1 вагона"}, + {"Камера кабины %d вагона"}, + {"ÐŸÑƒÑ‚ÐµÐ²Ð°Ñ ÐºÐ°Ð¼ÐµÑ€Ð° 1 вагона"}, + {"ÐŸÑƒÑ‚ÐµÐ²Ð°Ñ ÐºÐ°Ð¼ÐµÑ€Ð° %d вагона"}, + } + local inverts = { + {true,false}, + {true,true}, + {true,true,false,false}, + {false,false}, + {true,false}, + {true,true,false,false}, + {false}, + {false}, + {false}, + {false}, + } + --SarmatCam2T + function TRAIN_SYSTEM:SarmatMonitor(Train) + local state = Train:GetNW2Int("SarmatState",0) + local annstate = Train:GetNW2Int("SarmatAnnState",1) + local camstate = Train:GetNW2Int("SarmatCamState",1) + local WagNum = Train:GetNW2Int("WagNum",0) + if not Train:GetNW2Bool("SarmatMonitor") then return end + if state == -2 then + surface.SetDrawColor(255,255,255) + surface.DrawRect(0,0,1024,640) + surface.SetDrawColor(220,83,13) + surface.DrawRect(450+math.ceil(CurTime()%4-1)*32,341,6,6) + surface.SetTexture(ubuntu_load) + surface.SetDrawColor(255,255,255) + surface.DrawTexturedRectRotated(512,512,1024,1024,0) + elseif state == 1 then + surface.SetDrawColor(15,15,15) + surface.DrawRect(0,0,1024,640) + + local line = Train:GetNW2Int("SarmatLine") + local path = Train:GetNW2Bool("SarmatPath") + local station = Train:GetNW2Int("SarmatStation",1) + local stationarr = Train:GetNW2Bool("SarmatStationArr") + + local st = Train:GetNW2Int("SarmatStartStation") + local en = Train:GetNW2Int("SarmatEndStation") + + local lineenabled = Train:GetNW2Bool("SarmatLineEnabled") + local sel = Train:GetNW2Int("SarmatSelect",1) + local stbl = Metrostroi.SarmatUPOSetup[Train:GetNW2Int("Announcer",1)] + Metrostroi.DrawRectOutline(820,5,96,26,lineenabled and Color(0,200,0) or Color(50,50,50),3) + draw.SimpleText("ЛИÐИЯ","Metrostroi_Arial15",868,17, lineenabled and Color(0,200,0) or Color(50,50,50),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + Metrostroi.DrawRectOutline(916,5,96,26,Color(200,200,200),3) + draw.SimpleText("ПУТЬ "..(path and 2 or 1),"Metrostroi_Arial15",964,17, Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + if annstate == 1 then + local ann = stbl[line] + + + --render.DrawTextureToScreenRect(self.Cam3,0,260,260,260) + --render.DrawTextureToScreenRect(self.Cam4,260,260,260,260) + if not ann then + draw.SimpleText(Format("ЛиниÑ: -%s-",self.Specials[line]),"Metrostroi_Arial20",870,60, Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText(Format("ЛиниÑ: %s-%s%s",ann[1][2],ann[#ann][2],ann.Loop and "[кол]" or ""),"Metrostroi_Arial20",870,60, Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + local count = stationarr and 0.5 or 1 + local last + if ann.Loop then + last = path and station-16 or 16+station + else + last = (path and st or en) + end + for i=station,last,path and -1 or 1 do + i = (i-1)%(#ann)+1 + local stat = ann[i] + if ann.Loop and en > 0 and count > 1 and i == en+(path and -1 or 1) then + break + end + if ann.Loop or (path and i < station or i > station) or not stationarr then + if count > 9 and stationarr then + draw.SimpleText("...","Metrostroi_Arial22",760,30+count*54, Color(200,200,200),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + break + elseif count >= 1 then + draw.SimpleText(stat[2],"Metrostroi_Arial22",760,30+count*54, Color(200,200,200),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + end + if count > 8 and not stationarr then + draw.SimpleText("...","Metrostroi_Arial22",760,57+count*54, Color(200,200,200),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + break + end + if (path and not ann.Loop and i~=st or (not path or ann.Loop and en > 0) and i~=en or ann.Loop and en == 0) then + draw.SimpleText(stat[2].." отпр.","Metrostroi_Arial22",760,57+count*54, Color(200,200,200),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + draw.SimpleText(stat[2].." кон.","Metrostroi_Arial22",760,57+count*54, Color(200,200,200),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + count = count + 1 + end + end + end + if annstate == 2 then + draw.SimpleText("Выбор линии:","Metrostroi_Arial20",870,60, Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + for cline=-4,#stbl do + if cline>0 then + local ann = stbl[cline] + draw.SimpleText(Format("%s-%s%s",ann[1][2],ann[#ann][2],ann.Loop and "[кол]" or ""),"Metrostroi_Arial22",760,60+(cline+5)*30, cline == line and Color(80,120,150) or Color(200,200,200),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + else + draw.SimpleText(Format("-%s-",self.Specials[cline]),"Metrostroi_Arial22",760,60+(cline+5)*30, cline == line and Color(80,120,150) or Color(200,200,200),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end + end + end + if annstate == 3 then + draw.SimpleText("Выбор начальной и конечной:","Metrostroi_Arial20",870,60, Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + local count = stbl[line].Loop and 2 or 1 + if stbl[line].Loop then + draw.SimpleText("Кольцевой","Metrostroi_Arial22",760,60+30, 0 == sel and Color(80,120,150) or Color(200,200,200),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if en == 0 then + draw.SimpleText("К","Metrostroi_Arial22",750,60+30, Color(200,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + for i=1,#stbl[line] do + local ann = stbl[line][i] + if i==1 or i==#stbl[line] or ann.arrlast then + draw.SimpleText(ann[2],"Metrostroi_Arial22",760,60+count*30, i == sel and Color(80,120,150) or Color(200,200,200),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + if not stbl[line].Loop and st==i then + draw.SimpleText("Ð","Metrostroi_Arial22",750,60+count*30, Color(0,200,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + elseif en == i then + draw.SimpleText("К","Metrostroi_Arial22",750,60+count*30, Color(200,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + count = count + 1 + end + end + end + + surface.SetDrawColor(127,127,127) + surface.SetTexture(button) + if camstate == 0 then + draw.SimpleText("СиÑтема видеонаблюдениÑ","Metrostroi_Arial25",360 ,25, Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("Ðе активна","Metrostroi_Arial20",360,85, Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + if camstate == 1 then + local selected = Train:GetNW2Int("SarmatCamSelected",0) + draw.SimpleText("СиÑтема видеонаблюдениÑ","Metrostroi_Arial25",360 ,25, Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("Ðаружные камеры","Metrostroi_Arial20",360,85, Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + drawButton(124,140,113,40,"Левые") + draw.SimpleText("Вагон 1","Metrostroi_Arial20",235,106, Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + drawButton(242,140,113,40,"Передние") + draw.SimpleText("Ð’Ñе вагоны","Metrostroi_Arial20",360,106, Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + drawButton(360,140,113,40,"Вокруг") + draw.SimpleText("Вагон "..WagNum,"Metrostroi_Arial20",485,106, Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + drawButton(478,140,113,40,"Задние") + drawButton(596,140,113,40,"Правые") + + draw.SimpleText("Камеры в Ñалоне","Metrostroi_Arial20",360,200, Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + for i=1+selected,math.min(WagNum,6+selected) do + drawButton(65+(i-1-selected)*118+118*math.max(0,6-WagNum)/2 ,235,113,40,"Вагон "..i) + end + + draw.SimpleText("Камеры на поÑтах машиниÑта","Metrostroi_Arial20",360,315, Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + drawButton(220,350,113,40,"Вагон 1") + drawButton(500,350,113,40,"Вагон "..WagNum) + + draw.SimpleText("Путевые камеры","Metrostroi_Arial20",360,430, Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + drawButton(220,465,113,40,"Вагон 1") + drawButton(500,465,113,40,"Вагон "..WagNum) + --surface.DrawTexturedRectRotated(110,590,200,40,0) + --draw.SimpleText("Esc","Metrostroi_Arial20",110,590, Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + + if selected ~= 0 then drawButton(320,590,200,40,"<-") end + if 6+selected < WagNum then drawButton(530,590,200,40,"->") end + --render.DrawTextureToScreenRect(self.Cam1,15,50,690,510) + end + if camstate > 1 then + local camtype = Train:GetNW2Int("SarmatCamType") + draw.SimpleText(names[camtype] or "СиÑтема видеонаблюдениÑ","Metrostroi_Arial25",15 ,25, Color(200,200,200),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + local CamCount = Train:GetNW2Int("SarmatCamC") + local Cam1 = Train:GetNW2Bool("SarmatCam1C") + local Cam2 = Train:GetNW2Bool("SarmatCam2C") + local Cam3 = Train:GetNW2Bool("SarmatCam3C") + local Cam4 = Train:GetNW2Bool("SarmatCam4C") + if CamCount > 0 then + local invert = inverts[camtype][1] + local w,h = 340,250 + if CamCount < 2 then w = 690 end + if CamCount < 3 then h = 510 end + if Cam1 then + surface.SetDrawColor(255,255,255,255) + if invert then render.DrawTextureToScreenRect(self.Cam1,15+w,50,-w,h) else render.DrawTextureToScreenRect(self.Cam1,15,50,w,h) end + draw.SimpleText("ÑвÑзь","Metrostroi_Arial20",15+w-5,50+h-10, Color(50,200,50),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + else + surface.SetDrawColor(0,0,0,255) + surface.DrawRect(15,50,w,h) + draw.SimpleText("Подключение к камере...","Metrostroi_Arial30",15+w/2,50+h/2, Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("нет ÑвÑзи","Metrostroi_Arial20",15+w-5,50+h-10, Color(200,50,50),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + end + draw.SimpleText("[1]"..Format(types[camtype][1],WagNum),"Metrostroi_Arial20",15+5,50+10, Color(200,150,50),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("Вагон â„–%d",Train:GetNW2Int("SarmatCam1EN")),"Metrostroi_Arial20",15+5,50+30, Color(200,150,50),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawRectOutline(15,50,w,h,Color(40,40,40),2) + end + if CamCount > 1 then + local h = 250 + if CamCount < 3 then h = 510 end + if Cam2 then + local invert = inverts[camtype][2] + surface.SetDrawColor(255,255,255,255) + if invert then render.DrawTextureToScreenRect(self.Cam2,340+15+10+340,50,-340,h) else render.DrawTextureToScreenRect(self.Cam2,340+15+10,50,340,h) end + draw.SimpleText("ÑвÑзь","Metrostroi_Arial20",365+340-5,50+h-10, Color(50,200,50),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + else + surface.SetDrawColor(0,0,0,255) + surface.DrawRect(340+15+10,50,340,h) + draw.SimpleText("Подключение к камере...","Metrostroi_Arial30",365+340/2,50+h/2, Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("нет ÑвÑзи","Metrostroi_Arial20",365+340-5,50+h-10, Color(200,50,50),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + end + draw.SimpleText("[2]"..Format(types[camtype][2],WagNum),"Metrostroi_Arial20",365+5,50+10, Color(200,150,50),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("Вагон â„–%d",Train:GetNW2Int("SarmatCam2EN")),"Metrostroi_Arial20",365+5,50+30, Color(200,150,50),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawRectOutline(340+15+10,50,340,h,Color(40,40,40),2) + end + if CamCount > 2 then + if Cam3 then + local invert = inverts[camtype][3] + surface.SetDrawColor(255,255,255,255) + if invert then render.DrawTextureToScreenRect(self.Cam3,15+340,50+250+10,-340,250) else render.DrawTextureToScreenRect(self.Cam3,15,50+250+10,340,250) end + draw.SimpleText("ÑвÑзь","Metrostroi_Arial20",15+340-5,300+250, Color(50,200,50),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + else + surface.SetDrawColor(0,0,0,255) + surface.DrawRect(15,50+250+10,340,250) + draw.SimpleText("Подключение к камере...","Metrostroi_Arial30",15+340/2,310+250/2, Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("нет ÑвÑзи","Metrostroi_Arial20",15+340-5,300+250, Color(200,50,50),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + end + draw.SimpleText("[3]"..Format(types[camtype][3],WagNum),"Metrostroi_Arial20",15+5,310+10, Color(200,150,50),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("Вагон â„–%d",Train:GetNW2Int("SarmatCam3EN")),"Metrostroi_Arial20",15+5,310+30, Color(200,150,50),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawRectOutline(15,50+250+10,340,250,Color(40,40,40),2) + end + if CamCount > 3 then + local invert = inverts[camtype][4] + if Cam4 then + surface.SetDrawColor(255,255,255,255) + if invert then render.DrawTextureToScreenRect(self.Cam4,340+15+10+340,50+250+10,-340,250) else render.DrawTextureToScreenRect(self.Cam4,340+15+10,50+250+10,340,250) end + draw.SimpleText("ÑвÑзь","Metrostroi_Arial20",365+340-5,300+250, Color(50,200,50),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + else + surface.SetDrawColor(0,0,0,255) + surface.DrawRect(340+15+10,50+250+10,340,250) + draw.SimpleText("Подключение к камере...","Metrostroi_Arial30",365+340/2,310+250/2, Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText("нет ÑвÑзи","Metrostroi_Arial20",365+340-5,300+250, Color(200,50,50),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) + end + draw.SimpleText("[4]"..Format(types[camtype][4],WagNum),"Metrostroi_Arial20",365+5,310+10, Color(200,150,50),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + draw.SimpleText(Format("Вагон â„–%d",Train:GetNW2Int("SarmatCam4EN")),"Metrostroi_Arial20",365+5,310+30, Color(200,150,50),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + Metrostroi.DrawRectOutline(340+15+10,50+250+10,340,250,Color(40,40,40),2) + end + surface.SetDrawColor(127,127,127) + surface.SetTexture(button) + drawButton(110,590,200,40,"Esc") + --drawButton(320,590,200,40,"<-") + --drawButton(530,590,200,40,"->") + end + --surface.SetTexture( self.Cam1 ) + --surface.SetDrawColor( 255, 0, 0, 255 ) + --[[ + + + + --] + --[[ + render.DrawTextureToScreenRect(self.Cam1,15,50,340,510) + render.DrawTextureToScreenRect(self.Cam2,340+15+10,50,340,510)--]] + --[[ + for i=1,#Metrostroi.WorkingStations[line] do + local st = Metrostroi.WorkingStations[line][i] + draw.SimpleText(Metrostroi.AnnouncerTranslate[st],"Metrostroi_Arial25",760,80+i*30, Color(200,200,200),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) + end]] + --draw.SimpleText("Блок неактивен","Metrostroi_Arial25",870,100, Color(200,200,200),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + if state ~= 0 then + surface.SetDrawColor(0,0,20,100) + surface.DrawRect(0,0,1024,640) + end + end +end diff --git a/lua/metrostroi/systems/sys_81_722_tickers.lua b/lua/metrostroi/systems/sys_81_722_tickers.lua new file mode 100644 index 0000000..96eda8e --- /dev/null +++ b/lua/metrostroi/systems/sys_81_722_tickers.lua @@ -0,0 +1,176 @@ +-------------------------------------------------------------------------------- +-- 81-722 tickers +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_722_Tickers") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() +end + +function TRAIN_SYSTEM:Outputs() + return {} +end + +function TRAIN_SYSTEM:Inputs() + return {} +end +if TURBOSTROI then return end +function TRAIN_SYSTEM:TriggerInput(name,value) +end +if SERVER then + function TRAIN_SYSTEM:CANReceive(source,sourceid,target,targetid,textdata,numdata) + if textdata=="Arrived" then + if self.Arrived ~= numdata then + self.TimerRand = math.Rand(-10,10) + self.Arrived = numdata + end + else + self[textdata]=numdata + end + end + function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local Power = Train.Panel.PassSchemePowerL>0 and Train.Panel.PassSchemePowerR>0 + if Power then + if not self.TimerRand then self.TimerRand = math.Rand(-10,10) end + Train:SetNW2Int("TickersRandom",self.TimerRand*10) + Train:SetNW2String("TickersPrev",self.Prev or "") + Train:SetNW2String("TickersPrevEn",self.PrevEn or "") + Train:SetNW2String("TickersNext",self.Next or "") + Train:SetNW2Bool("TickersNextRight",self.NextRight) + Train:SetNW2String("TickersNextEn",self.NextEn or "") + Train:SetNW2String("TickersCurr",self.Curr or "") + Train:SetNW2String("TickersCurrEn",self.CurrEn or "") + Train:SetNW2Bool("TickersCurrRight",self.CurrRight) + Train:SetNW2Bool("TickersArrived",self.Arrived or "") + Train:SetNW2Bool("TickersLast",self.Last) + Train:SetNW2Bool("TickersClosing",self.Closing) + Train:SetNW2String("TickersSpecial",self.Special or "") + elseif self.TimerRand then + self.TimerRand = nil + end + Train:SetNW2Bool("TickersPower",Power) + end +else + local function createFont(name,font,size,weight) + surface.CreateFont("Metrostroi_"..name, { + font = font, + size = size, + weight = weight or 400, + blursize = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + }) + end + --createFont("BUKPSpeed","Eurostar Metrostroi",80) + --createFont("Arial15","Arial",15,800) + --createFont("Arial20","Arial",20,800) + --createFont("Arial22","Arial",22,400) + --createFont("Arial40","Arial",30,400) + createFont("TNR30","Times new roman",30,400) + createFont("TNR60","Times new roman",60,400) + + function TRAIN_SYSTEM:ClientInitialize() + self.TimerCorrection = 0 + end + function TRAIN_SYSTEM:ClientThink() + if not self.Train:ShouldDrawPanel("Tickers") then return end + local train = self.Train + render.PushRenderTarget(self.Train.Tickers,0,0,1024, 128) + render.Clear(0, 0, 0, 0) + cam.Start2D() + surface.SetDrawColor(0,0,0) + surface.DrawRect(0,0,600,128) + self:Tickers(self.Train) + cam.End2D() + render.PopRenderTarget() + end + + --SarmatCam2T + function TRAIN_SYSTEM:Tickers(Train) + surface.SetDrawColor(0,0,0,80) + surface.DrawRect(0,0,600,128) + local state = Train:GetNW2Bool("TickersPower",false) + if state then + local arr = Train:GetNW2Bool("TickersArrived") + local last = Train:GetNW2Bool("TickersLast") + local closing = Train:GetNW2Bool("TickersClosing") + local nxt,nxtEn,nxtR = Train:GetNW2String("TickersNext",""),Train:GetNW2String("TickersNextEn",""),Train:GetNW2Bool("TickersNextRight") + local prev = Train:GetNW2String("TickersPrev",""),Train:GetNW2String("TickersPrevEn","") + local curr,currEn,currR = Train:GetNW2String("TickersCurr",""),Train:GetNW2String("TickersCurrEn",""),Train:GetNW2Bool("TickersCurrRight") + local special = Train:GetNW2String("TickersSpecial","") + local str = "" + if (arr or closing) and last then + str = Format("Поезд прибыл\nна конечную Ñтанцию\n%s",curr or "...") + if currR then str = str..",\nвыход на правую Ñторону" end + if currEn~="" then + str=str..Format("\nTrain arrived\nto last station\n%s",currEn) + if currR then str = str..",\nexit to the right side" end + end + elseif arr then + str = curr or "..." + if currR then str = str..",\nвыход на правую Ñторону" end + if currEn~="" then + str = str.."\n%y"..currEn.." station" + if currR then str = str..",\nexit to the right side" end + end + + str = str..Format("\nÐ¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ ÑтанциÑ\n%s",nxt) + if nxtR then str = str..",\nвыход на правую Ñторону" end + if special~="" then + if special:sub(1,2) == "%c" then str = str.."," end + str = str.."\n"..special + end + if nxtEn~="" then + str = str..Format("\n%%yNext station is\n%s",nxtEn) + if nxtR then str = str..",\nexit to the right side" end + end + elseif not arr and (self.Closing or closing) then + str = Format("%%rДвери закрываютÑÑ\n%%yÐ¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ ÑтанциÑ\n%s",nxt) + if nxtR then str = str..",\nвыход на правую Ñторону" end + if nxtEn~="" then + str = str..Format("\nNext station is\n%s",nxtEn) + if nxtR then str = str..",\nexit to the right side" end + end + if special~="" then + str = str.."\n"..special + end + else + str = "." + end + local tbl = string.Explode("\n",str) + + local otime = CurTime()+Train:GetNW2Int("TickersRandom",0)/10 + if self.OldArr ~= arr then + self.OldArr = arr + self.TimerCorrection = -otime + end + local ctime = otime+self.TimerCorrection + local time = math.floor(ctime%(#tbl*3)/3)+1 + if not self.Closing and closing and time>1 then self.Closing = true end + if time==1 and not closing and self.Closing then + self.Closing = false + end + local message = tbl[time] + if message:find("%%y") or time==1 then self.Color = nil end + if message:find("%%r") then self.Color = Color(220,65,85) end + if message:find("%%g") then self.Color = Color(50,120,80) end + draw.SimpleText(message:gsub("%%[rgyc]",""),"Metrostroi_TNR60",300,64, self.Color or Color(245,235,170),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + --local prevStation = stbl[line][path and st+1 or st-1] + if arr and prev~="" then draw.SimpleText("< "..prev,"Metrostroi_TNR30",10,16, Color(200,200,200),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end + --local nextStation = stbl[line][path and st-1 or st+1] + if nxt~="" then draw.SimpleText(nxt.." >","Metrostroi_TNR30",586,16, Color(200,200,200),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) end + end + end +end diff --git a/lua/metrostroi/systems/sys_81_722_upi.lua b/lua/metrostroi/systems/sys_81_722_upi.lua new file mode 100644 index 0000000..032dfde --- /dev/null +++ b/lua/metrostroi/systems/sys_81_722_upi.lua @@ -0,0 +1,46 @@ +-------------------------------------------------------------------------------- +-- 81-722 I/O module +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_722_UPI") +TRAIN_SYSTEM.DontAccelerateSimulation = false +function TRAIN_SYSTEM:Initialize() + self.ChangeTimer = CurTime() + self.ControllerPosition = 0 + self.TControllerPosition = 0 + + self.Emergency = 0 + + self.Cache = {} + self.OldTime = 0 +end + +function TRAIN_SYSTEM:Inputs() + return { } +end + +function TRAIN_SYSTEM:Outputs() + return { "Emergency", "ControllerPosition" } +end +--if not TURBOSTROI then return end +function TRAIN_SYSTEM:TriggerInput(name,value) +end +function TRAIN_SYSTEM:Think() + local Train = self.Train + local CPos = Train.Panel.Controller + if self.TControllerPosition ~= CPos then + if self.TControllerPosition0 or self.TControllerPosition>CPos and CPos<0 or CPos==0 then + table.insert(self.Cache,{CPos,CurTime()+0.2}) + else + table.insert(self.Cache,{CPos,CurTime()+0.05}) + end + self.TControllerPosition = CPos + end + if #self.Cache>0 and CurTime()-self.Cache[1][2] > 0 then + self.ControllerPosition = self.Cache[1][1] or 0 + table.remove(self.Cache,1) + end + self.Emergency = CPos == -3 and 1 or 0 +end diff --git a/lua/metrostroi/systems/sys_81_723_panel.lua b/lua/metrostroi/systems/sys_81_723_panel.lua new file mode 100644 index 0000000..c03b0a7 --- /dev/null +++ b/lua/metrostroi/systems/sys_81_723_panel.lua @@ -0,0 +1,61 @@ +-------------------------------------------------------------------------------- +-- 81-723 controller panel +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_723_Panel") + +function TRAIN_SYSTEM:Initialize() + --Ðвтоматы ВЗ + self.Train:LoadSystem("SF31","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF32","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF33","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF34","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF35","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF36","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF37","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF38","Relay","Switch",{bass=true}) + self.Train:LoadSystem("SF41","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF42","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF43","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF44","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF45","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF46","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF47","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF48","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF49","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF51","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF52","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF53","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF54","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF55","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF56","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF57","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF58","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF59","Relay","Switch",{bass=true,normally_closed = true}) + + self.V4 = 0 + self.AnnouncerPlaying = 0 + self.PassSchemePowerL = 0 + self.PassSchemePowerR = 0 + + self.EmergencyLights = 0 + self.MainLights = 0 + + self.DoorsW = 0 + self.BrW = 0 + self.GRP = 0 +end + +function TRAIN_SYSTEM:Inputs() + return { } +end + +function TRAIN_SYSTEM:Outputs() + return { "EmergencyLights","MainLights","V4","AnnouncerPlaying","PassSchemePowerL", "PassSchemePowerR","DoorsW","BrW","GRP"} +end +function TRAIN_SYSTEM:TriggerInput(name,value) +end +function TRAIN_SYSTEM:Think() +end diff --git a/lua/metrostroi/systems/sys_81_724_panel.lua b/lua/metrostroi/systems/sys_81_724_panel.lua new file mode 100644 index 0000000..b4d843e --- /dev/null +++ b/lua/metrostroi/systems/sys_81_724_panel.lua @@ -0,0 +1,60 @@ +-------------------------------------------------------------------------------- +-- 81-724 controller panel +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("81_724_Panel") + +function TRAIN_SYSTEM:Initialize() + --Ðвтоматы ВЗ + self.Train:LoadSystem("SF31","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF32","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF33","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF34","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF35","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF36","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF37","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF38","Relay","Switch",{bass=true}) + self.Train:LoadSystem("SF41","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF42","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF43","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF44","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF45","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF46","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF47","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF48","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF49","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF51","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF52","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF53","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF54","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF55","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF56","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF57","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF58","Relay","Switch",{bass=true,normally_closed = true}) + self.Train:LoadSystem("SF59","Relay","Switch",{bass=true,normally_closed = true}) + + self.V4 = 0 + self.AnnouncerPlaying = 0 + self.PassSchemePowerL = 0 + self.PassSchemePowerR = 0 + + self.EmergencyLights = 0 + self.MainLights = 0 + + self.DoorsW = 0 + self.BrW = 0 +end + +function TRAIN_SYSTEM:Inputs() + return { } +end + +function TRAIN_SYSTEM:Outputs() + return { "EmergencyLights","MainLights","V4","AnnouncerPlaying","PassSchemePowerL", "PassSchemePowerR","DoorsW","BrW"} +end +function TRAIN_SYSTEM:TriggerInput(name,value) +end +function TRAIN_SYSTEM:Think() +end diff --git a/lua/metrostroi/systems/sys_81_740_electric.lua b/lua/metrostroi/systems/sys_81_740_electric.lua new file mode 100644 index 0000000..e4c99bb --- /dev/null +++ b/lua/metrostroi/systems/sys_81_740_electric.lua @@ -0,0 +1,60 @@ +--[[ + + + +@@@@@. + .@; @ @@ + @@ @ .@ + @: ;; +; + ;: @ @ + @ @ ;: + @ @ .+ + @ @ @ + @ @ @ + @ @ @ + @ @ + @ @ + @ @.@ + @. .@@ + @@@. +@+@ + @ @@@@@@@@@: @ + @ @ + @ @ + @ :; + :: @ + @ @ + @ @ + @ @ + @ :: + + @ + .+ @ + :: @ + @ + + @ :; + @ +. + @ + + @ @ + @ @ + @ @ + .; .@ .@ + :: @ .. @@ + @. :: @ .@@+@@. .@. + @+ :: @ @ @@@@ + :@@@@@@@.:: ;.@. +@ + . .@@: ;+ @:: @@. @+; @@@@ + @@@ @@ @ :@: @. @ @ .@ @@ + .@@. . @ .@@@@+. + + @@ .@: + + .@ @.@ .@@ + @@@@+ :; @.@+ + @: @@@: +@@ + @ ;@@@; @@@: @ + @ :@@@@@@@@: + .@ @ + @+;@;;. @. + .@ @ .@ ++: @+@@. + @ .@ .@ .:@@ @; + .@.@@ @ :@+@ +@ + ;@@. : .@ @@ .. ;+ + .@@: @@@@@: .@@@@@@@@@@@. @ + ; +]] diff --git a/lua/metrostroi/systems/sys_81_740_panel.lua b/lua/metrostroi/systems/sys_81_740_panel.lua new file mode 100644 index 0000000..e4c99bb --- /dev/null +++ b/lua/metrostroi/systems/sys_81_740_panel.lua @@ -0,0 +1,60 @@ +--[[ + + + +@@@@@. + .@; @ @@ + @@ @ .@ + @: ;; +; + ;: @ @ + @ @ ;: + @ @ .+ + @ @ @ + @ @ @ + @ @ @ + @ @ + @ @ + @ @.@ + @. .@@ + @@@. +@+@ + @ @@@@@@@@@: @ + @ @ + @ @ + @ :; + :: @ + @ @ + @ @ + @ @ + @ :: + + @ + .+ @ + :: @ + @ + + @ :; + @ +. + @ + + @ @ + @ @ + @ @ + .; .@ .@ + :: @ .. @@ + @. :: @ .@@+@@. .@. + @+ :: @ @ @@@@ + :@@@@@@@.:: ;.@. +@ + . .@@: ;+ @:: @@. @+; @@@@ + @@@ @@ @ :@: @. @ @ .@ @@ + .@@. . @ .@@@@+. + + @@ .@: + + .@ @.@ .@@ + @@@@+ :; @.@+ + @: @@@: +@@ + @ ;@@@; @@@: @ + @ :@@@@@@@@: + .@ @ + @+;@;;. @. + .@ @ .@ ++: @+@@. + @ .@ .@ .:@@ @; + .@.@@ @ :@+@ +@ + ;@@. : .@ @@ .. ;+ + .@@: @@@@@: .@@@@@@@@@@@. @ + ; +]] diff --git a/lua/metrostroi/systems/sys_als_ars_bis200a.lua b/lua/metrostroi/systems/sys_als_ars_bis200a.lua new file mode 100644 index 0000000..92a36bb --- /dev/null +++ b/lua/metrostroi/systems/sys_als_ars_bis200a.lua @@ -0,0 +1,106 @@ +-------------------------------------------------------------------------------- +-- ARS-D/ARS-Ezh3/BKBD safety system BIS-200 unit +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("ALS_ARS_BIS200") +TRAIN_SYSTEM.DontAccelerateSimulation = false + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("BIS_R0","Relay","ARS",{open_time=7,bass=true,bass_separate=true}) + self.Train:LoadSystem("BIS_PR0","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BIS_R1","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BIS_R2","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BIS_R3","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BIS_R4","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BIS_R5","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BIS_R6","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BIS_R7","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BIS_R8","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BIS_R10","Relay","ARS",{bass=true,bass_separate=true}) + + self.Power = 0 + self.R0 = 0 + self.Speed = 0 + + self.SAdd = 0 +end + +function TRAIN_SYSTEM:Outputs() + return {} +end + +function TRAIN_SYSTEM:Inputs() + return {"SpeedDec"} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "SpeedDec" then self.SpeedDec = value > 0 end +end + +local function C(val) + return val and 1 or 0 +end +--[[local function inrange(val,min,max) + return C(min < val and val < max) +end]] + +local function inrange(val,min,max,min2,max2,state) + if state then + return C(min2 < val and val < max2) + else + return C(min < val and val < max) + end +end + +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local speed = Train.ALSCoil.Speed + + --vv При торможении Ñмещение на 2км\ч vv + ----[[ + if true or self.SpeedDec then + Train.BIS_R1:TriggerInput("Set", self.Power*inrange(speed,5.5,11.5 ,3.5 ,14.0 ,Train.BIS_R1.Value > 0)) + Train.BIS_R2:TriggerInput("Set", self.Power*inrange(speed,10 ,21.5 ,8.2 ,25.7 ,Train.BIS_R2.Value > 0)) + Train.BIS_R3:TriggerInput("Set", self.Power*inrange(speed,20 ,31.5 ,17.6,35.7 ,Train.BIS_R3.Value > 0)) + Train.BIS_R4:TriggerInput("Set", self.Power*inrange(speed,30 ,41.5 ,27.6,45.7 ,Train.BIS_R4.Value > 0)) + Train.BIS_R5:TriggerInput("Set", self.Power*inrange(speed,40 ,51.5 ,37.6,55.7 ,Train.BIS_R5.Value > 0)) + Train.BIS_R6:TriggerInput("Set", self.Power*inrange(speed,50 ,61.5 ,47.3,65.7 ,Train.BIS_R6.Value > 0)) + Train.BIS_R7:TriggerInput("Set", self.Power*inrange(speed,60 ,71.5 ,56.7,75.6 ,Train.BIS_R7.Value > 0)) + Train.BIS_R8:TriggerInput("Set", self.Power*inrange(speed,70 ,81.5 ,66.7,85.7 ,Train.BIS_R8.Value > 0)) + Train.BIS_R10:TriggerInput("Set",self.Power*inrange(speed,80 ,101.5,74.5,108.4,Train.BIS_R10.Value > 0)) + + --[[ + if speed > self.Speed then + self.SAdd = math.min(1,math.max(-0.3,self.SAdd-(speed-self.Speed)*0.6)) + else + self.SAdd = math.min(1,math.max(-0.3,self.SAdd-(speed-self.Speed)*0.3)) + end + local add = math.max(0,self.SAdd) + --self.R0 = self.Power*C(speed<7)--11.5) + Train.BIS_R1:TriggerInput("Set", self.Power*inrange(speed,5.5-add*2 ,11.5 +add*2.5)) + Train.BIS_R2:TriggerInput("Set", self.Power*inrange(speed,10 -add*1.8,21.5 +add*4.2)) + Train.BIS_R3:TriggerInput("Set", self.Power*inrange(speed,20 -add*2.4,31.5 +add*4.2)) + Train.BIS_R4:TriggerInput("Set", self.Power*inrange(speed,30 -add*2.4,41.5 +add*4.2)) + Train.BIS_R5:TriggerInput("Set", self.Power*inrange(speed,40 -add*2.4,51.5 +add*4.2)) + Train.BIS_R6:TriggerInput("Set", self.Power*inrange(speed,50 -add*2.7,61.5 +add*4.2)) + Train.BIS_R7:TriggerInput("Set", self.Power*inrange(speed,60 -add*3.3,71.5 +add*4.1)) + Train.BIS_R8:TriggerInput("Set", self.Power*inrange(speed,70 -add*3.3,81.5 +add*4.2)) + Train.BIS_R10:TriggerInput("Set",self.Power*inrange(speed,80 -add*5.5,101.5+add*6.9))]] + else + --self.R0 = self.Power*C(speed<7)--11.5) + Train.BIS_R1:TriggerInput("Set",self.Power*inrange(speed,5.5,11.5)) + Train.BIS_R2:TriggerInput("Set",self.Power*inrange(speed,10,21.5)) + Train.BIS_R3:TriggerInput("Set",self.Power*inrange(speed,20,31.5)) + Train.BIS_R4:TriggerInput("Set",self.Power*inrange(speed,30,41.5)) + Train.BIS_R5:TriggerInput("Set",self.Power*inrange(speed,40,51.5)) + Train.BIS_R6:TriggerInput("Set",self.Power*inrange(speed,50,61.5)) + Train.BIS_R7:TriggerInput("Set",self.Power*inrange(speed,60,71.5)) + Train.BIS_R8:TriggerInput("Set",self.Power*inrange(speed,70,81.5)) + Train.BIS_R10:TriggerInput("Set",self.Power*inrange(speed,80,101.5)) + --Train.BIS_R10:TriggerInput("Set",self.Power*C(speed>80)) + end--]] + --^^ При торможении Ñмещение на 2км\ч ^^ + self.Speed = speed +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_als_ars_blpm.lua b/lua/metrostroi/systems/sys_als_ars_blpm.lua new file mode 100644 index 0000000..c0c61fc --- /dev/null +++ b/lua/metrostroi/systems/sys_als_ars_blpm.lua @@ -0,0 +1,132 @@ +-------------------------------------------------------------------------------- +-- ARS-D/ARS-Ezh3/BKBD safety system BLPM unit +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("ALS_ARS_BLPM") +TRAIN_SYSTEM.DontAccelerateSimulation = false + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("BLPM_1R1","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BLPM_1R2","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BLPM_1R3","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BLPM_2R1","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BLPM_2R2","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BLPM_2R3","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BLPM_3R1","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BLPM_3R2","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BLPM_3R3","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BLPM_4R1","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BLPM_4R2","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BLPM_4R3","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BLPM_5R1","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BLPM_5R2","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BLPM_5R3","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BLPM_6R1","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BLPM_6R2","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BLPM_6R3","Relay","ARS",{bass=true,bass_separate=true}) + + self.Power = 0 + self.NoneFreq = 0 + self.OneFreq = 0 + self.TwoFreq = 0 + self.BadFreq = 0 +end + +function TRAIN_SYSTEM:Outputs() + return {} +end + +function TRAIN_SYSTEM:Inputs() + return {} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + +local S = {} +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local ALS = Train.ALSCoil + --[[if Train.KPK2 and Train.KPK2.Value > 0 then + S["TW94"] = Train:ReadTrainWire(self.PKWire or 94) + S["F6"] = bit.band(S["TW94"],32)/32 + S["F5"] = bit.band(S["TW94"],16)/16 + S["F4"] = bit.band(S["TW94"],8)/8 + S["F3"] = bit.band(S["TW94"],4)/4 + S["F2"] = bit.band(S["TW94"],2)/2 + S["F1"] = bit.band(S["TW94"],1)/1 + else + S["F6"] = ALS.F6 + S["F5"] = ALS.F5 + S["F4"] = ALS.F4 + S["F3"] = ALS.F3 + S["F2"] = ALS.F2 + S["F1"] = ALS.F1 + end]] + S["F6"] = ALS.F6 + S["F5"] = ALS.F5 + S["F4"] = ALS.F4 + S["F3"] = ALS.F3 + S["F2"] = ALS.F2 + S["F1"] = ALS.F1 + if Train.KPK2 and Train.KPK2.Value > 0 then + S["TW94"] = Train:ReadTrainWire(self.PKWire or 94) + S["F6"] = math.max(S["F6"],bit.band(S["TW94"],32)/32) + S["F5"] = math.max(S["F5"],bit.band(S["TW94"],16)/16) + S["F4"] = math.max(S["F4"],bit.band(S["TW94"],8)/8) + S["F3"] = math.max(S["F3"],bit.band(S["TW94"],4)/4) + S["F2"] = math.max(S["F2"],bit.band(S["TW94"],2)/2) + S["F1"] = math.max(S["F1"],bit.band(S["TW94"],1)/1) + end + local freqCount = self.Power*(S["F6"]+S["F5"]+S["F4"]+S["F3"]+S["F2"]+S["F1"]) + self.NoneFreq =freqCount==0 and 1 or 0 + self.OneFreq = freqCount==1 and 1 or 0 + self.TwoFreq = freqCount==2 and 1 or 0 + self.BadFreq = freqCount>2 and 1 or 0 + + + Train.BLPM_1R1:TriggerInput("Set",self.Power*S["F1"]) + Train.BLPM_1R2:TriggerInput("Set",self.Power*S["F1"]) + Train.BLPM_1R3:TriggerInput("Set",(1-Train.BLPM_1R1.Value)*(1-Train.BLPM_1R2.Value)) + + Train.BLPM_2R1:TriggerInput("Set",self.Power*S["F2"]) + Train.BLPM_2R2:TriggerInput("Set",self.Power*S["F2"]) + Train.BLPM_2R3:TriggerInput("Set",(1-Train.BLPM_2R1.Value)*(1-Train.BLPM_2R2.Value)) + + Train.BLPM_3R1:TriggerInput("Set",self.Power*S["F3"]) + Train.BLPM_3R2:TriggerInput("Set",self.Power*S["F3"]) + Train.BLPM_3R3:TriggerInput("Set",(1-Train.BLPM_3R1.Value)*(1-Train.BLPM_3R2.Value)) + + Train.BLPM_4R1:TriggerInput("Set",self.Power*S["F4"]) + Train.BLPM_4R2:TriggerInput("Set",self.Power*S["F4"]) + Train.BLPM_4R3:TriggerInput("Set",(1-Train.BLPM_4R1.Value)*(1-Train.BLPM_4R2.Value)) + + Train.BLPM_5R1:TriggerInput("Set",self.Power*S["F5"]) + Train.BLPM_5R2:TriggerInput("Set",self.Power*S["F5"]) + Train.BLPM_5R3:TriggerInput("Set",(1-Train.BLPM_5R1.Value)*(1-Train.BLPM_5R2.Value)) + + if Train.PD1 then + Train.BLPM_6R1:TriggerInput("Set",self.Power*S["F6"]*Train.PD1.Value) + Train.BLPM_6R2:TriggerInput("Set",self.Power*S["F6"]*Train.PD2.Value) + Train.BLPM_6R3:TriggerInput("Set",(1-Train.BLPM_6R1.Value)*(1-Train.BLPM_6R2.Value)) + else + Train.BLPM_6R1:TriggerInput("Set",self.Power*S["F6"]) + Train.BLPM_6R2:TriggerInput("Set",self.Power*S["F6"]) + Train.BLPM_6R3:TriggerInput("Set",(1-Train.BLPM_6R1.Value)*(1-Train.BLPM_6R2.Value)) + end + + if Train.GetDriver and Train:GetDriver() then + --print(123,Train.KPK2.Value,Train:ReadTrainWire(94)) + --print("\nBLPM") + --print("1 2 3 4 5 6") + --print("123123123123123123") + --print(Train.BLPM_1R1.Value..Train.BLPM_1R2.Value..Train.BLPM_1R3.Value..Train.BLPM_2R1.Value..Train.BLPM_2R2.Value..Train.BLPM_2R3.Value..Train.BLPM_3R1.Value..Train.BLPM_3R2.Value..Train.BLPM_3R3.Value..Train.BLPM_4R1.Value..Train.BLPM_4R2.Value..Train.BLPM_4R3.Value..Train.BLPM_5R1.Value..Train.BLPM_5R2.Value..Train.BLPM_5R3.Value..Train.BLPM_6R1.Value..Train.BLPM_6R2.Value..Train.BLPM_6R3.Value,Train.KPK2.Value) + + + --print("\nSIR") + --print("54321 12") + --print(Train.BSM_SIR5.Value..Train.BSM_SIR4.Value..Train.BSM_SIR3.Value..Train.BSM_SIR2.Value..Train.BSM_SIR1.Value.." "..Train.BSM_SR1.Value..Train.BSM_SR2.Value) + end +end diff --git a/lua/metrostroi/systems/sys_als_ars_bsm.lua b/lua/metrostroi/systems/sys_als_ars_bsm.lua new file mode 100644 index 0000000..7468ba7 --- /dev/null +++ b/lua/metrostroi/systems/sys_als_ars_bsm.lua @@ -0,0 +1,63 @@ +-------------------------------------------------------------------------------- +-- ARS-D/ARS-Ezh3/BKBD safety system BSM unit +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("ALS_ARS_BSM") +TRAIN_SYSTEM.DontAccelerateSimulation = false + +function TRAIN_SYSTEM:Initialize(typ) + self.Train:LoadSystem("BSM_GE","Relay","ARS",{close_time=0.5,open_time=1,bass=true,bass_separate=true}) + self.Train:LoadSystem("BSM_SIR1","Relay","ARS",{close_time=0,open_time=0.05, bass=true,bass_separate=true}) + self.Train:LoadSystem("BSM_SIR2","Relay","ARS",{close_time=0,open_time=0.05, bass=true,bass_separate=true}) + self.Train:LoadSystem("BSM_SIR3","Relay","ARS",{close_time=0,open_time=0.05, bass=true,bass_separate=true}) + self.Train:LoadSystem("BSM_SIR4","Relay","ARS",{close_time=0,open_time=0.05, bass=true,bass_separate=true}) + self.Train:LoadSystem("BSM_SIR5","Relay","ARS",{close_time=0,open_time=0.05, bass=true,bass_separate=true}) + if typ==1 then + self.Train:LoadSystem("BSM_SR1","Relay","ARS",{close_time=0.04,open_time=0.5, bass=true,bass_separate=true}) + self.Train:LoadSystem("BSM_SR2","Relay","ARS",{close_time=0.04,open_time=0.5, bass=true,bass_separate=true}) + self.Train:LoadSystem("BSM_KSR1","Relay","ARS",{open_time=0.25, bass=true,bass_separate=true}) + self.Train:LoadSystem("BSM_KSR2","Relay","ARS",{open_time=0.25, bass=true,bass_separate=true}) + else + self.Train:LoadSystem("BSM_SR1","Relay","ARS",{close_time=0.04,open_time=0.6, bass=true,bass_separate=true}) + self.Train:LoadSystem("BSM_SR2","Relay","ARS",{close_time=0.04,open_time=0.6, bass=true,bass_separate=true}) + self.Train:LoadSystem("BSM_KSR1","Relay","ARS",{open_time=0.25, bass=true,bass_separate=true}) + self.Train:LoadSystem("BSM_KSR2","Relay","ARS",{open_time=0.25, bass=true,bass_separate=true}) + end + + + self.Train:LoadSystem("BSM_KRO","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BSM_KRH","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BSM_KRT","Relay","ARS",{bass=true,bass_separate=true}) + + self.Train:LoadSystem("BSM_BR1","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BSM_BR2","Relay","ARS",{bass=true,bass_separate=true}) + if typ==1 then + self.Train:LoadSystem("BSM_RVV","Relay","ARS",{open_time=9,bass=true,bass_separate=true}) + self.Train:LoadSystem("BSM_RUT","Relay","ARS",{bass=true,bass_separate=true}) + else + self.Train:LoadSystem("BSM_PR1","Relay","ARS",{bass=true,bass_separate=true}) + + self.Train:LoadSystem("BSM_RNT1","Relay","ARS",{--[[ open_time=0.1,--]] bass=true,bass_separate=true}) + end + self.Train:LoadSystem("BSM_RNT","Relay","ARS",{--[[ open_time=0.1,--]] bass=true,bass_separate=true}) +end + +function TRAIN_SYSTEM:Outputs() + return {} +end + +function TRAIN_SYSTEM:Inputs() + return {} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + + +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local ALS = Train.ALSCoil + local ARS = Train.ALS_ARS +end diff --git a/lua/metrostroi/systems/sys_als_ars_bum.lua b/lua/metrostroi/systems/sys_als_ars_bum.lua new file mode 100644 index 0000000..e699c8d --- /dev/null +++ b/lua/metrostroi/systems/sys_als_ars_bum.lua @@ -0,0 +1,60 @@ +-------------------------------------------------------------------------------- +-- ÐРС-ÐЛС +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("ALS_ARS_BUM") +TRAIN_SYSTEM.DontAccelerateSimulation = false + +function TRAIN_SYSTEM:Initialize(typ) + self.Train:LoadSystem("BUM_RVD1","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BUM_RVD2","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BUM_RUVD","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BUM_RB","Relay","ARS",{bass=true,bass_separate=true}) + if typ==1 then + self.Train:LoadSystem("BUM_TR","Relay","ARS",{close_time=0.15, bass=true,bass_separate=true}) + self.Train:LoadSystem("BUM_PTR","Relay","ARS",{open_time=2.3, bass=true,bass_separate=true}) + self.Train:LoadSystem("BUM_KRD","Relay","ARS",{bass=true,bass_separate=true}) + + self.Train:LoadSystem("BUM_RVEK1","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BUM_RVEK2","Relay","ARS",{bass=true,bass_separate=true}) + + --self.Train:LoadSystem("BUM_KPP","Relay","ARS",{bass=true,bass_separate=true}) + else + self.Train:LoadSystem("BUM_TR","Relay","ARS",{close_time=typ==2 and 0.02 or 0.15, bass=true,bass_separate=true}) + --self.Train:LoadSystem("BUM_PTR","Relay","ARS",{open_time=0.15, bass=true,bass_separate=true}) + --self.Train:LoadSystem("BUM_PTR1","Relay","ARS",{open_time=1.4, bass=true,bass_separate=true}) + self.Train:LoadSystem("BUM_PTR","Relay","ARS",{open_time=1.25, bass=true,bass_separate=true}) + self.Train:LoadSystem("BUM_PTR1","Relay","ARS",{open_time=0.9, bass=true,bass_separate=true}) + + self.Train:LoadSystem("BUM_RIPP","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BUM_PEK","Relay","ARS",{bass=true,bass_separate=true}) + + self.Train:LoadSystem("BUM_KPP","Relay","ARS",{bass=true,bass_separate=true}) + end + self.Train:LoadSystem("BUM_EK","Relay","ARS",{open_time=3.3, bass=true,bass_separate=true}) + self.Train:LoadSystem("BUM_EK1","Relay","ARS",{open_time=3.3, bass=true,bass_separate=true}) + self.Train:LoadSystem("BUM_RVZ1","Relay","ARS",{bass=true,bass_separate=true}) + + + self.Train:LoadSystem("BUM_RET","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BUM_LTR1","Relay","ARS",{open_time=1, bass=true,bass_separate=true}) + + self.Train:LoadSystem("BUM_RVT1","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BUM_RVT2","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BUM_RVT4","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BUM_RVT5","Relay","ARS",{bass=true,bass_separate=true}) +end + +function TRAIN_SYSTEM:Outputs() + return {} +end + +function TRAIN_SYSTEM:Inputs() + return {} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + + +function TRAIN_SYSTEM:Think(dT) +end diff --git a/lua/metrostroi/systems/sys_als_ars_dnepr.lua b/lua/metrostroi/systems/sys_als_ars_dnepr.lua new file mode 100644 index 0000000..14ccb51 --- /dev/null +++ b/lua/metrostroi/systems/sys_als_ars_dnepr.lua @@ -0,0 +1,325 @@ +-------------------------------------------------------------------------------- +-- ARS-D safety system +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("ALS_ARS_D") +function TRAIN_SYSTEM:Initialize() + self.FMM1 = 0 + self.FMM2 = 0 + self.PD = 0 + self.VP = 0 + self.ALS = 0 + self.KB = 0 + self.NGPower = 0 + self.DA = 0 + self.KT = 0 + + self.Train:LoadSystem("ALSCoil") + + self.Train:LoadSystem("BIS_R11","Relay","ARS",{bass=true,bass_separate=true}) + self.Train:LoadSystem("BIS_R12","Relay","ARS",{bass=true,bass_separate=true,open_time=2.7}) + self.R11 = 0 + self.R12 = 0 + self.KRH = 0 + + self.Train:LoadSystem("BIS200","ALS_ARS_BIS200") + self.Train:LoadSystem("BLPM","ALS_ARS_BLPM") + self.Train:LoadSystem("BSM","ALS_ARS_BSM") + self.Train:LoadSystem("BUM","ALS_ARS_BUM") + + self.Train:LoadSystem("ROT1","Relay","",{bass=true}) + self.Train:LoadSystem("ROT2","Relay","",{bass=true}) + + self.Train:LoadSystem("EPKC","Relay") + + self.Train:LoadSystem("KPK1","Relay","",{bass=true,bass_separate=true}) --ÐšÐ¾Ð¼Ð¼ÑƒÑ‚Ð°Ñ†Ð¸Ñ ÐŸÐš + self.Train:LoadSystem("KPK2","Relay","",{bass=true,bass_separate=true}) --ÐšÐ¾Ð¼Ð¼ÑƒÑ‚Ð°Ñ†Ð¸Ñ ÐŸÐš + self.Train:LoadSystem("FMM1","Relay","",{bass=true,bass_separate=true}) --ФикÑÐ°Ñ†Ð¸Ñ Ð¼ÐµÑÑ‚Ð¾Ð½Ð°Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¼Ð°ÑˆÐ¸Ð½Ð¸Ñта + self.Train:LoadSystem("FMM2","Relay","",{bass=true,bass_separate=true}) --ФикÑÐ°Ñ†Ð¸Ñ Ð¼ÐµÑÑ‚Ð¾Ð½Ð°Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¼Ð°ÑˆÐ¸Ð½Ð¸Ñта + self.Train:LoadSystem("PD1","Relay","",{bass=true,bass_separate=true}) --Переключение дешифратора + self.Train:LoadSystem("PD2","Relay","",{bass=true,bass_separate=true}) --Переключение дешифратора + self.Train:LoadSystem("ARS_VP","Relay","",{bass=true,bass_separate=true}) --Режим ВП + self.Train:LoadSystem("ARS_RT","Relay","",{bass=true,bass_separate=true}) --Реле Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ‚ ÐРС-Р + self.Train:LoadSystem("NG","Relay","",{bass=true,bass_separate=true}) + self.Train:LoadSystem("NH","Relay","",{bass=true,bass_separate=true}) + + -- ARS wires + self["33D"] = 0 + self["33G"] = 0 + self["2"] = 0 + self["6"] = 0 + self["8"] = 0 + self["20"] = 0 + --self["21"] = 0 + self["48"] = 0 + self["31"] = 0 + self["32"] = 0 + self.Ring = 0 + self.LN = 0 + + self.EPK = 0 +end + +function TRAIN_SYSTEM:Outputs() + return { + "2", "8", "20", "48", "33D", "33G", "48", + "NoFreq","F1","F2","F3","F4","F5","F6","LN","PD", + "EPK", + } +end + +function TRAIN_SYSTEM:Inputs() + return {"KiyvKRH"} +end +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "KiyvKRH" then self.KiyvKRH = value > 0 end +end + +local S = {} +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local ALS = Train.ALSCoil + local BLPM = Train.BLPM + local Panel = Train.Panel + + if self.KiyvKRH then + Train.BSM_KRH:TriggerInput("Set",self.KRH + self.R11*Train.BIS_R11.Value*Train.BIS_R12.Value) + Train.BIS_R11:TriggerInput("Set",self.R11) + Train.BIS_R12:TriggerInput("Set",self.R12*(1-Train.BIS_R11.Value)) + else + Train.BSM_KRH:TriggerInput("Set",self.KRH) + end + + Train.FMM1:TriggerInput("Set",self.FMM1) + Train.FMM2:TriggerInput("Set",self.FMM2) + + S["RVZ"] = self.GE*((Train.BSM_KRO.Value+Train.BSM_KRT.Value)*(1-Train.BSM_KRH.Value)+Train.BSM_BR2.Value)*(1-Train.BIS_R2.Value)*(1-Train.BIS_R3.Value)*(1-Train.BIS_R4.Value)*(1-Train.BIS_R5.Value)*(1-Train.BIS_R6.Value)*(1-Train.BIS_R7.Value)*(1-Train.BIS_R8.Value)*(1-Train.BIS_R10.Value) + --Train.BIS_R0:TriggerInput("NoOpenTime",Train.BIS_R1.Value+(1-Train.BIS_R0.Value)) + + Train.BIS_R0:TriggerInput("NoOpenTime",(1-Train.BIS_R0.Value)+Train.BIS_R1.Value) + --Train.BIS_R0:TriggerInput("Set",(self.GE*(1-Train.BSM_GE.Value)+S["RVZ"]*(Train.BIS_R1.Value+Train.BIS_R0.Value))*Train.BIS200.R0) + Train.BIS_R0:TriggerInput("Set",self.GE*(1-Train.BSM_GE.Value)+S["RVZ"]*(Train.BIS_R1.Value+Train.BIS_R0.Value)) + Train.BSM_PR1:TriggerInput("Set",self.GE*Train.BIS_R1.Value) + + S["RVZ1"] = S["RVZ"]*Train.BIS_R0.Value*(1-Train.BIS_R1.Value) + S["EK0"] = S["RVZ1"]*(1-Train.BSM_GE.Value) + + Train.ARS_VP:TriggerInput("Set",self.VP) + Train.PD1:TriggerInput("Set",self.PD) + Train.PD2:TriggerInput("Set",self.PD) + + Train.BSM_GE:TriggerInput("Set",self.GE) + + + -- LN 1/5 Light fix + --S["FMM_28"] = self.NGPower*Train.BLPM_5R3.Value*(1-Train.BLPM_4R3.Value)*(Train.PD2.Value*(1-Train.BLPM_6R3.Value) + (1-Train.PD2.Value)*Train.BLPM_6R3.Value)*Train.BLPM_3R3.Value*Train.BLPM_2R3.Value*Train.BLPM_1R3.Value + -- Original + S["FMM_28"] = self.NGPower*Train.BLPM_5R3.Value*(1-Train.BLPM_4R3.Value)*(Train.PD2.Value*(1-Train.BLPM_6R3.Value))*Train.BLPM_3R3.Value*Train.BLPM_2R3.Value*Train.BLPM_1R3.Value + Train.NG:TriggerInput("Set",S["FMM_28"]*Train.FMM1.Value+self.NGPower*Train.NG.Value*(1-Train.NH.Value)) + Train.NH:TriggerInput("Set",S["FMM_28"]*(1-Train.FMM1.Value)+self.NGPower*Train.NH.Value*(1-Train.NG.Value)) + + S["GE"]= self.GE*Train.BSM_GE.Value + local EnableALS = ((S["GE"]+self.ALS)--[[ *Train.KPK1.Value*Train.ALS.Value+(1-Train.KPK2.Value)--]] )*Train.FMM1.Value*(1-Train.UPPS_K1.Value) + if EnableALS ~= ALS.Enabled then + ALS:TriggerInput("Enable",EnableALS) + end + + --FreqProtect + --SR1,SR2 + S["FQCheckPower"] = S["GE"]+self.ALS + S["LUDS"] = (self.GE+self.ALS--[[ *Train.FMM1.Value--]] )*Train.BSM_SR1.Value + S["5P31F"] = BLPM.OneFreq*Train.BLPM_5R3.Value*(1-Train.ARS_VP.Value) + S["SRPower"] = S["FQCheckPower"]*(S["5P31F"]*(1-Train.PD1.Value)+BLPM.TwoFreq*(1-Train.ARS_VP.Value)*Train.PD1.Value) + S["NF"] = (S["FQCheckPower"]*(BLPM.TwoFreq*((1-Train.PD1.Value)+Train.ARS_VP.Value)+BLPM.NoneFreq+BLPM.BadFreq+BLPM.OneFreq*((1-Train.BLPM_5R3.Value)*(1-Train.BLPM_5R1.Value)*(1-Train.BLPM_5R2.Value)+Train.ARS_VP.Value))*(1-Train.BSM_SIR5.Value)*(1-Train.BSM_SIR4.Value)*(1-Train.BSM_SIR3.Value)*(1-Train.BSM_SIR2.Value)*(1-Train.BSM_SIR1.Value)) + S["1SIR"] = S["SRPower"]*(1-Train.BLPM_1R3.Value)*Train.BLPM_1R1.Value*Train.BLPM_1R2.Value + S["2SIR"] = S["SRPower"]*Train.BLPM_1R3.Value*(1-Train.BLPM_2R3.Value)*Train.BLPM_2R1.Value*Train.BLPM_2R2.Value + S["3SIR"] = S["SRPower"]*Train.BLPM_1R3.Value*Train.BLPM_2R3.Value*(1-Train.BLPM_3R3.Value)*Train.BLPM_3R1.Value*Train.BLPM_3R2.Value + S["4SIR"] = S["5P31F"]*(1-S["NF"])*Train.PD1.Value+(S["SRPower"]*Train.BLPM_1R3.Value*Train.BLPM_2R3.Value*Train.BLPM_3R3.Value)*(1-Train.BLPM_4R3.Value)*Train.BLPM_4R1.Value*Train.BLPM_4R2.Value + S["5SIR"] = S["FQCheckPower"]*BLPM.OneFreq*(1-Train.BLPM_5R3.Value)*Train.BLPM_5R1.Value*Train.BLPM_5R2.Value + + Train.BSM_SIR1:TriggerInput("Set", + S["FQCheckPower"]*Train.BSM_SR1.Value*Train.BSM_SIR1.Value+ + S["1SIR"]*(1-Train.BSM_SR1.Value)--*(1-Train.BSM_SR2.Value) + ) + Train.BSM_SIR2:TriggerInput("Set", + S["FQCheckPower"]*Train.BSM_SR1.Value*(Train.BSM_SIR1.Value+Train.BSM_SIR2.Value)+ + S["2SIR"]*(1-Train.BSM_SR1.Value)--*(1-Train.BSM_SR2.Value) + ) + Train.BSM_SIR3:TriggerInput("Set", + S["FQCheckPower"]*Train.BSM_SR1.Value*(Train.BSM_SIR2.Value+Train.BSM_SIR3.Value)+ + S["3SIR"]*(1-Train.BSM_SR1.Value)--*(1-Train.BSM_SR2.Value) + ) + Train.BSM_SIR4:TriggerInput("Set", + S["FQCheckPower"]*Train.BSM_SR1.Value*(Train.BSM_SIR3.Value+Train.BSM_SIR4.Value)+ + S["4SIR"]*(1-Train.BSM_SR1.Value)--*(1-Train.BSM_SR2.Value) + ) + Train.BSM_SIR5:TriggerInput("Set", + S["FQCheckPower"]*Train.BSM_SR1.Value*(Train.BSM_SIR1.Value+Train.BSM_SIR2.Value+Train.BSM_SIR3.Value+Train.BSM_SIR4.Value+Train.BSM_SIR5.Value)+ + S["5SIR"]*(1-Train.BSM_SR1.Value)--*(1-Train.BSM_SR2.Value) + ) + S["SRSIR5"] = (S["NF"]*(1-Train.BSM_SIR5.Value)+S["5SIR"]*Train.BSM_SIR5.Value) + S["SRSIR4"] = (S["4SIR"]*Train.BSM_SIR4.Value) + S["SRSIR3"] = (S["3SIR"]*Train.BSM_SIR3.Value) + S["SRSIR2"] = (S["2SIR"]*Train.BSM_SIR2.Value) + S["SRSIR1"] = (S["1SIR"]*Train.BSM_SIR1.Value) + ---[[ + S["SR"] = + S["SRSIR5"]*(1-Train.BSM_SIR4.Value)*(1-Train.BSM_SIR3.Value)*(1-Train.BSM_SIR2.Value)*(1-Train.BSM_SIR1.Value)+ + S["SRSIR4"]*(1-Train.BSM_SIR3.Value)*(1-Train.BSM_SIR2.Value)*(1-Train.BSM_SIR1.Value)+ + S["SRSIR3"]*(1-Train.BSM_SIR2.Value)*(1-Train.BSM_SIR1.Value)+ + S["SRSIR2"]*(1-Train.BSM_SIR1.Value)+ + S["SRSIR1"] + + Train.BSM_SR1:TriggerInput("Set",S["SR"]) + Train.BSM_SR2:TriggerInput("Set",S["SR"]) + + S["BSM_KSR1"] = S["GE"]*Train.BSM_SR1.Value + S["BIS1"] = S["BSM_KSR1"]*( + ((1-Train.BIS_R0.Value)*Train.BIS_R2.Value+Train.BIS_R0.Value*(1-Train.BIS_R2.Value))+ + ((1-Train.BIS_R6.Value)*Train.BIS_R8.Value+Train.BIS_R6.Value*(1-Train.BIS_R8.Value))+ + ((1-Train.BIS_R3.Value)*Train.BIS_R5.Value+Train.BIS_R3.Value*(1-Train.BIS_R5.Value))+ + ((1-Train.BIS_R10.Value)*Train.BIS_R7.Value+Train.BIS_R10.Value*(1-Train.BIS_R7.Value))+ + ((1-Train.BIS_R1.Value)*Train.BIS_R4.Value+Train.BIS_R1.Value*(1-Train.BIS_R4.Value)) + ) + S["R10"] = S["BIS1"]*(1-Train.BIS_R10.Value) + S["R8"] = S["R10"]*(1-Train.BIS_R8.Value) + S["R7"] = S["R8"]*(1-Train.BIS_R7.Value) + S["R5"] = S["R7"]*(1-Train.BIS_R6.Value)*(1-Train.BIS_R5.Value) + S["R3"] = S["R5"]*(1-Train.BIS_R4.Value)*(1-Train.BIS_R3.Value) + + S["BR1_14"] = + S["R10"]*Train.BSM_SIR1.Value+ + S["R8"]*Train.BSM_SIR2.Value*(1-Train.BSM_SIR1.Value)+ + S["R7"]*Train.BSM_SIR3.Value*(1-Train.BSM_SIR2.Value)*(1-Train.BSM_SIR1.Value)+ + S["R5"]*Train.BSM_SIR4.Value*(1-Train.BSM_SIR3.Value)*(1-Train.BSM_SIR2.Value)*(1-Train.BSM_SIR1.Value) + S["BR1_C"] = S["R3"]*Train.BSM_SIR5.Value + S["BR1_16"] = S["R5"]*Train.BSM_SIR3.Value+S["BR1_C"]*(1-Train.BSM_SIR3.Value) + S["BR2_16"] = S["R3"]*(1-Train.BSM_SIR5.Value) + S["BR1_C2"] = S["BR1_C"]*Train.BSM_BR1.Value + -- LN 1/5 Original without PD fix + --S["BR2_14"] = + -- (Train.BSM_BR1.Value*S["BR1_16"]+(1-Train.BSM_BR1.Value)*S["BR1_14"]) + -- *(Train.FMM2.Value*Train.NG.Value+(1-Train.FMM2.Value)*Train.NH.Value*(1-Train.NG.Value))+ + -- S["BR1_C2"]*((1-Train.NH.Value)*(1-Train.NG.Value)+Train.FMM2.Value*Train.NH.Value*(1-Train.NG.Value)+(1-Train.FMM2.Value)*Train.NG.Value) + -- LN 1/5 With PD fix + S["BR2_14"] = + (Train.BSM_BR1.Value*S["BR1_16"]+(1-Train.BSM_BR1.Value)*S["BR1_14"]) + *(Train.FMM2.Value*(Train.NG.Value+(1-Train.PD1.Value))+(1-Train.FMM2.Value)*(Train.NH.Value+(1-Train.PD2.Value))*(1-Train.NG.Value))+ + S["BR1_C2"]*((1-Train.NH.Value)*(1-Train.NG.Value)+Train.FMM2.Value*Train.NH.Value*(1-Train.NG.Value)+(1-Train.FMM2.Value)*Train.NG.Value) + + S["KSR2"] = S["BR2_16"]*Train.BSM_BR2.Value+S["BR2_14"]*(1-Train.BSM_BR2.Value) + + S["KSR"] = S["KSR2"]*(Train.BUM_PTR1.Value+Train.BSM_RNT.Value*Train.BSM_RNT1.Value) + Train.BSM_KSR1:TriggerInput("Set",S["KSR"]) + Train.BSM_KSR2:TriggerInput("Set",S["KSR"]) + + Train.BSM_BR1:TriggerInput("Set",self.KB*((Train.BSM_BR1.Value+Train.BSM_SIR5.Value)*(1-Train.BSM_BR2.Value))) + Train.BSM_BR2:TriggerInput("Set",self.KB*((1-Train.BSM_SIR5.Value)*(1-Train.BSM_BR1.Value))) + S["BR12"] = Train.BSM_BR1.Value+Train.BSM_BR2.Value + S["RNT"] = self.GE*(S["BR12"]+(Train.BSM_RNT.Value*Train.BSM_RNT1.Value)*(Train.BSM_KSR1.Value*Train.BSM_KSR2.Value+Train.BSM_KRT.Value)) + Train.BSM_RNT:TriggerInput("Set",S["RNT"]) + Train.BSM_RNT1:TriggerInput("Set",S["RNT"]) + self.Ring = self.GE*((1-Train.BSM_RNT.Value)+(1-Train.BSM_RNT1.Value)) + + --Train.BSM_BR1:TriggerInput("Set",) + S["LUDS70"] = S["LUDS"]*(Train.BLPM_5R3.Value*Train.BLPM_4R3.Value*Train.BLPM_3R3.Value*(1-Train.BLPM_2R3.Value)*Train.BLPM_2R1.Value*Train.BLPM_2R2.Value+(1-Train.BSM_SIR1.Value)) + S["LUDS60"] = S["LUDS"]*(Train.BLPM_5R3.Value*Train.BLPM_4R3.Value*(1-Train.BLPM_3R3.Value)*Train.BLPM_3R1.Value*Train.BLPM_3R2.Value+(1-Train.BSM_SIR2.Value)*(1-Train.BSM_SIR1.Value)) + S["LUDS40"] = S["LUDS"]*(Train.BLPM_5R3.Value*(1-Train.BLPM_4R3.Value)*Train.BLPM_4R1.Value*Train.BLPM_4R2.Value+(1-Train.BSM_SIR3.Value)*(1-Train.BSM_SIR2.Value)*(1-Train.BSM_SIR1.Value)) + S["LUDS0"] = S["LUDS"]*((1-Train.BLPM_5R3.Value)*Train.BLPM_5R1.Value*Train.BLPM_5R2.Value+(1-Train.BSM_SIR4.Value)*(1-Train.BSM_SIR3.Value)*(1-Train.BSM_SIR2.Value)*(1-Train.BSM_SIR1.Value)) + S["AR80"] = S["LUDS"]*Train.BSM_SIR1.Value + S["AR70"] = S["LUDS70"]*Train.BSM_SIR2.Value + S["AR60"] = S["LUDS60"]*Train.BSM_SIR3.Value + S["AR40"] = S["LUDS40"]*Train.BSM_SIR4.Value + S["AR0"] = S["LUDS0"]*Train.BSM_SIR5.Value + S["AR04"] = S["LUDS0"]*(1-Train.BSM_SIR5.Value) + + Train.KPK1:TriggerInput("Set",self.NGPower*((1-Train.ARS_VP.Value)*Train.FMM1.Value+Train.ARS_VP.Value*(1-Train.FMM1.Value))) + Train.KPK2:TriggerInput("Set",self.NGPower*((1-Train.ARS_VP.Value)*(1-Train.FMM2.Value)+Train.ARS_VP.Value*Train.FMM2.Value)) + + + S["GEKSR"] = --[[ S["FQCheckPower"]*--]]self.GE*Train.BSM_KSR1.Value*Train.BSM_KSR2.Value + Train.BUM_RUVD:TriggerInput("Set",S["GEKSR"]*(Train.BSM_KRO.Value+Train.BUM_RUVD.Value)) + S["RVD"] = S["GEKSR"]*(Train.BUM_RUVD.Value) + Train.BUM_RVD1:TriggerInput("Set",S["RVD"]) + Train.BUM_RVD2:TriggerInput("Set",S["RVD"]) + Train.BUM_TR:TriggerInput("Set",S["GEKSR"]) + --Train.BUM_PTR:TriggerInput("Set",self.GE*Train.BSM_RNT.Value*Train.BSM_RNT1.Value*Train.BUM_TR.Value) + Train.BUM_PTR:TriggerInput("Set",self.GE*Train.BUM_TR.Value) + Train.BUM_RVT5:TriggerInput("Set",self.GE*(1-Train.BUM_TR.Value)) + + S["RVT1"] = self.GE*((1-Train.BSM_SIR4.Value)*(1-Train.BUM_TR.Value)+(1-Train.BUM_PTR1.Value)) + Train.BUM_RVT1:TriggerInput("Set",S["RVT1"]) + Train.BUM_RVT2:TriggerInput("Set",S["RVT1"]) + Train.BUM_RVT4:TriggerInput("Set",S["RVT1"]) + Train.BUM_RET:TriggerInput("Set",self.GE*(1-Train.BUM_TR.Value)*Train.BUM_PTR1.Value) + Train.BUM_PTR1:TriggerInput("Set",self.GE*Train.BUM_TR.Value) + Train.BUM_RVZ1:TriggerInput("Set",S["RVZ1"]*(1-Train.BSM_BR2.Value)) + --EPK + -- + S["EKR0on"] = + self.GE*( + Train.BSM_KRH.Value*(1-Train.BSM_KRT.Value)*(1-Train.BSM_KRO.Value) + +(1-Train.BSM_KRH.Value)*( + Train.BSM_PR1.Value + +Train.BSM_BR2.Value) + ) + +self.KT*Train.BSM_KSR1.Value*Train.BSM_KSR2.Value + + + S["EKR0"] = ( + S["EKR0on"]*Train.BIS_R0.Value*(1-Train.BIS_R1.Value) + +self.GE*((1-Train.BIS_R0.Value)+Train.BIS_R1.Value) + --[[S["EKR0on"]*Train.BIS_R0.Value + +self.GE*(1-Train.BIS_R0.Value)]] + )*Train.BSM_KSR1.Value*Train.BSM_KSR2.Value*Train.BUM_PTR.Value + S["EK1"] = S["EKR0"]+self.KT*Train.BSM_GE.Value*(1-Train.BSM_KSR1.Value)*(1-Train.BSM_KSR2.Value)*(1-Train.BUM_PTR.Value)*(1-Train.BUM_PTR1.Value) + S["EK"] = S["EK0"]+S["EK1"]*Train.BUM_PEK.Value*Train.BUM_RIPP.Value + S["EKt"] = 3+3*math.max(0,Train.BUM_PEK.Value*(Train.BIS_R2.Value+Train.BIS_R3.Value)) + + Train.BUM_EK:TriggerInput("Set",S["EK"]) + Train.BUM_EK1:TriggerInput("Set",S["EK"]) + Train.BUM_EK:TriggerInput("OpenTime",S["EKt"]) + Train.BUM_EK1:TriggerInput("OpenTime",S["EKt"]) + + self.EPK = self.GE*Train.BUM_EK.Value*Train.BUM_EK1.Value + Train.BUM_PEK:TriggerInput("Set",self.EPK) + Train.BUM_RIPP:TriggerInput("Set",self.EPK) + self["48"] = self.GE*(Train.BUM_RET.Value+Train.BUM_RVZ1.Value) + self["8"] = self.GE*Train.BUM_RVT5.Value + self["20"] = self.DA*Train.BUM_RVT1.Value + self["33G"] = self.DA*Train.BUM_RVT2.Value + self["2"] = self.DA*Train.BUM_RVT4.Value + + Train:WriteTrainWire(94,(1-Train.KPK2.Value)*bit.bor(ALS.F1*1,ALS.F2*2,ALS.F3*4,ALS.F4*8,ALS.F5*16,ALS.F6*32)) + Train:WriteTrainWire(78,S["LUDS"]*Train.BLPM_6R3.Value) + Train:WriteTrainWire(79,S["LUDS"]*(1-Train.BLPM_6R3.Value)*(Train.BLPM_6R2.Value)*(Train.BLPM_6R1.Value)) + Train:WriteTrainWire(85,S["AR80"]) + Train:WriteTrainWire(84,S["AR70"]) + Train:WriteTrainWire(83,S["AR60"]) + Train:WriteTrainWire(82,S["AR40"]) + Train:WriteTrainWire(81,S["AR0"]) + Train:WriteTrainWire(80,S["AR04"]) + Train:WriteTrainWire(86,self.GE*Train.BUM_KPP.Value) + --LN 1/5 Original + --Train:WriteTrainWire(89,S["GE"]*(Train.NG.Value*Train.FMM1.Value+Train.NH.Value*(1-Train.FMM1.Value))) + --LN 1/5 Fix + Train:WriteTrainWire(89,S["GE"]*(Train.NG.Value*Train.FMM1.Value+Train.NH.Value*(1-Train.FMM1.Value))*Train.PD2.Value) + Panel.OneFreq = Train:ReadTrainWire(78) + Panel.RS = Train:ReadTrainWire(79) + Panel.AR80 = Train:ReadTrainWire(85) + Panel.AR70 = Train:ReadTrainWire(84) + Panel.AR60 = Train:ReadTrainWire(83) + Panel.AR40 = Train:ReadTrainWire(82) + Panel.AR0 = Train:ReadTrainWire(81) + Panel.AR04 = Train:ReadTrainWire(80) + Panel.KT = Train:ReadTrainWire(86) + --LN 1/5 Original + --Panel.LN = S["GE"]*Train.NG.Value+Train:ReadTrainWire(89)*Train.FMM1.Value + --LN 1/5 Fix + Panel.LN = S["GE"]*Train.NG.Value*Train.PD1.Value+Train:ReadTrainWire(89)*Train.FMM1.Value + + Train:WriteTrainWire(90,self.EPK*(1-Train.ARS.Value)) + Train.EPKC:TriggerInput("Set",self.EPK+Train:ReadTrainWire(90)) +end diff --git a/lua/metrostroi/systems/sys_als_ars_ezh3.lua b/lua/metrostroi/systems/sys_als_ars_ezh3.lua new file mode 100644 index 0000000..050b936 --- /dev/null +++ b/lua/metrostroi/systems/sys_als_ars_ezh3.lua @@ -0,0 +1,285 @@ +-------------------------------------------------------------------------------- +-- ARS-Ezh3 safety system +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("ALS_ARS_Ezh3") +TRAIN_SYSTEM.DontAccelerateSimulation = false + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("ALSCoil") + + self.Train:LoadSystem("BIS200","ALS_ARS_BIS200") + self.Train:LoadSystem("BLPM","ALS_ARS_BLPM") + self.Train:LoadSystem("BSM","ALS_ARS_BSM",1) + self.Train:LoadSystem("BUM","ALS_ARS_BUM",1) + + self.Train:LoadSystem("ROT1","Relay") + self.Train:LoadSystem("ROT2","Relay") + + self.Train:LoadSystem("EPKC","Relay") + + -- ARS wires + self["33D"] = 0 + self["33G"] = 0 + self["33Zh"] = 0 + self["2"] = 0 + self["6"] = 0 + self["8"] = 0 + self["20"] = 0 + --self["21"] = 0 + self["48"] = 0 + self.Ring = 0 + self.LN = 0 + + self.EPK = 0 +end + +function TRAIN_SYSTEM:Outputs() + return { + "2", "8", "20", "48", "33Zh","33D", "33G", "48", + "NoFreq","F1","F2","F3","F4","F5","F6","LN", + "EPK", + } +end + +function TRAIN_SYSTEM:Inputs() + return { "IgnoreThisARS","AttentionPedal","Ring" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + local Train = self.Train + if name == "AttentionPedal" then + self.AttentionPedal = value > 0.5 + if Train and Train.PB then + Train.PB:TriggerInput("Set",value) + end + end + if name == "IgnoreThisARS" then + self.IgnoreThisARS = value > 0.5 + end +end + +local S = {} +function TRAIN_SYSTEM:Think(dT) + --self.CurTime = self.CurTime or CurTime() + --if CurTime()-self.CurTime < 0.05 then return end + --self.DeltaTime = CurTime()-self.CurTime + --self.CurTime = CurTime() + local Train = self.Train + local ALS = Train.ALSCoil + local BLPM = Train.BLPM + local Panel = Train.Panel +---[[ + S["R0"] = ((self.GE*Train.BSM_BR2.Value + +self.KT*Train.BSM_GE.Value*( + Train.BSM_KSR1.Value*Train.BSM_KSR2.Value + *(1-Train.BSM_KRH.Value) + *(Train.BSM_KRO.Value+Train.BSM_KRT.Value) + ) + )*Train.BIS_R0.Value + +self.GE*( + (1-Train.BSM_GE.Value) + +Train.BUM_KRD.Value + +Train.BSM_KRO.Value*Train.BSM_KRH.Value + ) + )*(1-Train.BIS_R2.Value)*(1-Train.BIS_R3.Value)*(1-Train.BIS_R4.Value)*(1-Train.BIS_R5.Value)*(1-Train.BIS_R6.Value)*(1-Train.BIS_R7.Value)*(1-Train.BIS_R8.Value)*(1-Train.BIS_R10.Value) + --[[ ( + Train.BSM_KSR1.Value*Train.BSM_KSR2.Value + *(1-Train.BSM_KRH.Value) + *(Train.BSM_KRO.Value+Train.BSM_KRT.Value) + *(1-Train.BIS_R2.Value)*(1-Train.BIS_R3.Value)*(1-Train.BIS_R4.Value)*(1-Train.BIS_R5.Value)*(1-Train.BIS_R6.Value)*(1-Train.BIS_R7.Value)*(1-Train.BIS_R8.Value)*(1-Train.BIS_R10.Value) + )--]] + --Train.BIS_R0:TriggerInput("NoOpenTime",Train.BIS_R1.Value+(1-Train.BIS_R0.Value)) + + Train.BIS_R0:TriggerInput("NoOpenTime",(1-Train.BIS_R0.Value)+Train.BIS_R1.Value) + Train.BIS_R0:TriggerInput("Set",S["R0"]) + + --[[ S["RVZ1"] = S["RVZ"]*Train.BIS_R0.Value*(1-Train.BIS_R1.Value) + S["EK0"] = S["RVZ1"]*(1-Train.BSM_GE.Value)--]] +--]] + self.ARS = self.ARS or 0 + self.ALS = self.ALS or 0 + self.KB = self.KB or 0 + -- self.NGPower = self.NGPower or 0 + -- self.DA = self.DA or 0 + -- self.KT = self.KT or 0 + Train.BSM_GE:TriggerInput("Set",self.GE) + + S["GE"]= self.GE*Train.BSM_GE.Value + local EnableALS = self.ALS + if EnableALS ~= ALS.Enabled then + ALS:TriggerInput("Enable",EnableALS) + end + + --SR1,SR2 + S["SRPower"] = self.ALS*(1-Train.BSM_GE.Value)+S["GE"] + S["1SIR"] = S["SRPower"]*(1-Train.BLPM_1R3.Value)*Train.BLPM_1R1.Value*Train.BLPM_1R2.Value + S["2SIR"] = S["SRPower"]*Train.BLPM_1R3.Value*(1-Train.BLPM_2R3.Value)*Train.BLPM_2R1.Value*Train.BLPM_2R2.Value + S["3SIR"] = S["SRPower"]*Train.BLPM_1R3.Value*Train.BLPM_2R3.Value*(1-Train.BLPM_3R3.Value)*Train.BLPM_3R1.Value*Train.BLPM_3R2.Value + S["4SIR"] = S["SRPower"]*Train.BLPM_1R3.Value*Train.BLPM_2R3.Value*Train.BLPM_3R3.Value*(1-Train.BLPM_4R3.Value)*Train.BLPM_4R1.Value*Train.BLPM_4R2.Value + S["5SIR"] = S["SRPower"]*Train.BLPM_1R3.Value*Train.BLPM_2R3.Value*Train.BLPM_3R3.Value*Train.BLPM_4R3.Value*(1-Train.BLPM_5R3.Value)*Train.BLPM_5R1.Value*Train.BLPM_5R2.Value + S["NF"] = S["SRPower"]*Train.BLPM_1R3.Value*Train.BLPM_2R3.Value*Train.BLPM_3R3.Value*Train.BLPM_4R3.Value*Train.BLPM_5R3.Value + + Train.BSM_SIR1:TriggerInput("Set", + S["SRPower"]*Train.BSM_SR1.Value*Train.BSM_SIR1.Value+ + S["1SIR"]*(1-Train.BSM_SR1.Value)--*(1-Train.BSM_SR2.Value) + ) + Train.BSM_SIR2:TriggerInput("Set", + S["SRPower"]*Train.BSM_SR1.Value*(Train.BSM_SIR1.Value+Train.BSM_SIR2.Value)+ + S["2SIR"]*(1-Train.BSM_SR1.Value)--*(1-Train.BSM_SR2.Value) + ) + Train.BSM_SIR3:TriggerInput("Set", + S["SRPower"]*Train.BSM_SR1.Value*(Train.BSM_SIR2.Value+Train.BSM_SIR3.Value)+ + S["3SIR"]*(1-Train.BSM_SR1.Value)--*(1-Train.BSM_SR2.Value) + ) + Train.BSM_SIR4:TriggerInput("Set", + S["SRPower"]*Train.BSM_SR1.Value*(Train.BSM_SIR3.Value+Train.BSM_SIR4.Value)+ + S["4SIR"]*(1-Train.BSM_SR1.Value)--*(1-Train.BSM_SR2.Value) + ) + Train.BSM_SIR5:TriggerInput("Set", + S["SRPower"]*Train.BSM_SR1.Value*(Train.BSM_SIR1.Value+Train.BSM_SIR2.Value+Train.BSM_SIR3.Value+Train.BSM_SIR4.Value+Train.BSM_SIR5.Value)+ + S["5SIR"]*(1-Train.BSM_SR1.Value)--*(1-Train.BSM_SR2.Value) + ) + S["SRSIR5"] = (S["5SIR"]*Train.BSM_SIR5.Value) + S["SRSIR4"] = (S["4SIR"]*Train.BSM_SIR4.Value) + S["SRSIR3"] = (S["3SIR"]*Train.BSM_SIR3.Value) + S["SRSIR2"] = (S["2SIR"]*Train.BSM_SIR2.Value) + S["SRSIR1"] = (S["1SIR"]*Train.BSM_SIR1.Value) + ---[[ + S["SR"] = + S["NF"]*(1-Train.BSM_SIR5.Value)*(1-Train.BSM_SIR4.Value)*(1-Train.BSM_SIR3.Value)*(1-Train.BSM_SIR2.Value)*(1-Train.BSM_SIR1.Value)+ + S["SRSIR5"]*(1-Train.BSM_SIR4.Value)*(1-Train.BSM_SIR3.Value)*(1-Train.BSM_SIR2.Value)*(1-Train.BSM_SIR1.Value)+ + S["SRSIR4"]*(1-Train.BSM_SIR3.Value)*(1-Train.BSM_SIR2.Value)*(1-Train.BSM_SIR1.Value)+ + S["SRSIR3"]*(1-Train.BSM_SIR2.Value)*(1-Train.BSM_SIR1.Value)+ + S["SRSIR2"]*(1-Train.BSM_SIR1.Value)+ + S["SRSIR1"] + + Train.BSM_SR1:TriggerInput("Set",S["SR"]) + Train.BSM_SR2:TriggerInput("Set",S["SR"]) + + S["BSM_KSR1"] = S["GE"]*Train.BSM_SR1.Value + S["BIS1"] = S["BSM_KSR1"]*( + ((1-Train.BIS_R0.Value)*Train.BIS_R2.Value+Train.BIS_R0.Value*(1-Train.BIS_R2.Value))+ + ((1-Train.BIS_R6.Value)*Train.BIS_R8.Value+Train.BIS_R6.Value*(1-Train.BIS_R8.Value))+ + ((1-Train.BIS_R3.Value)*Train.BIS_R5.Value+Train.BIS_R3.Value*(1-Train.BIS_R5.Value))+ + ((1-Train.BIS_R10.Value)*Train.BIS_R7.Value+Train.BIS_R10.Value*(1-Train.BIS_R7.Value))+ + ((1-Train.BIS_R1.Value)*Train.BIS_R4.Value+Train.BIS_R1.Value*(1-Train.BIS_R4.Value)) + ) + S["R10"] = S["BIS1"]*(1-Train.BIS_R10.Value) + S["R8"] = S["R10"]*(1-Train.BIS_R8.Value) + S["R7"] = S["R8"]*(1-Train.BIS_R7.Value) + S["R5"] = S["R7"]*(1-Train.BIS_R6.Value)*(1-Train.BIS_R5.Value) + S["R3"] = S["R5"]*(1-Train.BIS_R4.Value)*(1-Train.BIS_R3.Value) + + S["BR1_14"] = + S["R10"]*Train.BSM_SIR1.Value+ + S["R8"]*Train.BSM_SIR2.Value+ + S["R7"]*Train.BSM_SIR3.Value+ + S["R5"]*Train.BSM_SIR4.Value + + S["BR1_16"] = S["R3"]*Train.BSM_SIR5.Value*(1-Train.BLPM_5R3.Value) + S["BR2_16"] = S["R3"]*(1-Train.BSM_SIR5.Value) + + --S["KSR"] = (S["BR1_14"]*(1-Train.BSM_BR1.Value)+S["BR1_16"]*Train.BSM_BR1.Value)*(1-Train.BSM_BR2.Value)+S["BR2_16"]*Train.BSM_BR2.Value + S["KSR"] = S["BR1_14"]+S["BR1_16"]*Train.BSM_BR1.Value+S["BR2_16"]*Train.BSM_BR2.Value + Train.BSM_KSR1:TriggerInput("Set",S["KSR"]) + Train.BSM_KSR2:TriggerInput("Set",S["KSR"]) + + Train.BSM_BR1:TriggerInput("Set",S["SRPower"]*Train.PB.Value*((Train.BSM_BR1.Value+Train.BSM_SIR5.Value)*(1-Train.BSM_BR2.Value))) + Train.BSM_BR2:TriggerInput("Set",S["SRPower"]*Train.PB.Value*((Train.BSM_BR2.Value+(1-Train.BSM_SIR5.Value))*(1-Train.BSM_BR1.Value))) + + + Train.BSM_RNT:TriggerInput("Set",self.ALS*(Train.BSM_BR1.Value+Train.BSM_BR2.Value+Train.KVT.Value+Train.BSM_RNT.Value*(Train.BSM_KSR1.Value*Train.BSM_KSR2.Value+Train.BSM_KRT.Value))) + self.Ring = self.GE*(1-Train.BSM_RNT.Value)*(1-Train.BSM_RVV.Value) + + --Train.BSM_BR1:TriggerInput("Set",) + S["LUDS"] = S["SRPower"]*Train.BSM_SR1.Value + S["LUDS70"] = S["LUDS"]*(Train.BLPM_5R3.Value*Train.BLPM_4R3.Value*Train.BLPM_3R3.Value*(1-Train.BLPM_2R3.Value)*Train.BLPM_2R1.Value*Train.BLPM_2R2.Value)--+(1-Train.BSM_SIR1.Value)) + S["LUDS60"] = S["LUDS"]*(Train.BLPM_5R3.Value*Train.BLPM_4R3.Value*(1-Train.BLPM_3R3.Value)*Train.BLPM_3R1.Value*Train.BLPM_3R2.Value)--+(1-Train.BSM_SIR2.Value)*(1-Train.BSM_SIR1.Value)) + S["LUDS40"] = S["LUDS"]*(Train.BLPM_5R3.Value*(1-Train.BLPM_4R3.Value)*Train.BLPM_4R1.Value*Train.BLPM_4R2.Value)--+(1-Train.BSM_SIR3.Value)*(1-Train.BSM_SIR2.Value)*(1-Train.BSM_SIR1.Value)) + S["LUDS0"] = S["LUDS"]*((1-Train.BLPM_5R3.Value)*Train.BLPM_5R1.Value*Train.BLPM_5R2.Value)--+(1-Train.BSM_SIR4.Value)*(1-Train.BSM_SIR3.Value)*(1-Train.BSM_SIR2.Value)*(1-Train.BSM_SIR1.Value)) + S["AR80"] = S["LUDS"]*Train.BSM_SIR1.Value + S["AR70"] = S["LUDS70"]*Train.BSM_SIR2.Value + S["AR60"] = S["LUDS60"]*Train.BSM_SIR3.Value + S["AR40"] = S["LUDS40"]*Train.BSM_SIR4.Value + S["AR0"] = S["LUDS0"]*Train.BSM_SIR5.Value + S["AR04"] = S["LUDS"]*(1-Train.BSM_SIR5.Value) + + Train.BSM_RVV:TriggerInput("Set",Train.ARS.Value*(1-Train.KVT.Value)*Train.BSM_RNT.Value) + + S["GEKSR"] = S["GE"]*Train.BSM_RVV.Value*Train.BSM_KSR1.Value*Train.BSM_KSR2.Value + Train.BUM_RB:TriggerInput("Set",S["GEKSR"]) + Train.BUM_RUVD:TriggerInput("Set",S["GEKSR"]*(Train.BSM_KRO.Value+Train.BUM_RUVD.Value)) + S["RVD"] = S["GEKSR"]*(1-Train.BSM_KRT.Value)*Train.BUM_RUVD.Value + Train.BUM_RVD1:TriggerInput("Set",S["RVD"]) + Train.BUM_RVD2:TriggerInput("Set",S["RVD"]) + Train.BUM_TR:TriggerInput("Set",self.ALS*Train.BSM_RVV.Value*Train.BSM_KSR1.Value*Train.BSM_KSR2.Value) + --Train.BUM_PTR:TriggerInput("Set",self.GE*Train.BUM_TR.Value) + --Train.BUM_RVT5:TriggerInput("Set",self.GE*(1-Train.BUM_TR.Value)) + S["RVT1"] = self.GE*(1-Train.BUM_TR.Value) + Train.BUM_RVT1:TriggerInput("Set",S["RVT1"]) + Train.BUM_RVT2:TriggerInput("Set",S["RVT1"]) + Train.BUM_RVT4:TriggerInput("Set",S["RVT1"]) + Train.BUM_RET:TriggerInput("Set",S["RVT1"]) + Train.BUM_RVT5:TriggerInput("Set",S["RVT1"]*(1-Train.BUM_PTR.Value)) + + Train.BUM_PTR:TriggerInput("Set",self.GE*Train.BUM_TR.Value) + Train.BUM_RVZ1:TriggerInput("Set",self.GE*(1-Train.BSM_BR2.Value)*(1-Train.BSM_KRH.Value)*(1-Train.BSM_BR1.Value)*Train.BIS_R0.Value) + Train.BSM_RUT:TriggerInput("Set",self.DA*(Train.BIS_R6.Value+Train.BIS_R7.Value+Train.BIS_R8.Value+Train.BIS_R10.Value)) + --EPK + -- + --[=[ S["EKR0on"] = + self.GE*( + Train.BSM_KRH.Value*(1-Train.BSM_KRT.Value)*(1-Train.BSM_KRO.Value) + +(1-Train.BSM_KRH.Value)*( + Train.BSM_PR1.Value + +Train.BSM_BR2.Value) + ) + +self.KT*Train.BSM_KSR1.Value*Train.BSM_KSR2.Value + + + S["EKR0"] = ( + S["EKR0on"]*Train.BIS_R0.Value*(1-Train.BIS_R1.Value) + +self.GE*((1-Train.BIS_R0.Value)+Train.BIS_R1.Value) + --[[S["EKR0on"]*Train.BIS_R0.Value + +self.GE*(1-Train.BIS_R0.Value)]] + )*Train.BSM_KSR1.Value*Train.BSM_KSR2.Value*Train.BUM_PTR.Value + S["EK1"] = S["EKR0"]+self.KT*Train.BSM_GE.Value*(1-Train.BSM_KSR1.Value)*(1-Train.BSM_KSR2.Value)*(1-Train.BUM_PTR.Value)*(1-Train.BUM_PTR1.Value) + S["EK"] = S["EK0"]+S["EK1"]*Train.BUM_PEK.Value*Train.BUM_RIPP.Value +--]=] + S["AntiRol"] = (1-Train.BIS_R0.Value)*(1-Train.BIS_R1.Value)*(1-Train.BIS_R2.Value)*(1-Train.BIS_R3.Value)*(1-Train.BIS_R4.Value)*(1-Train.BIS_R5.Value)*(1-Train.BIS_R6.Value)*(1-Train.BIS_R7.Value)*(1-Train.BIS_R8.Value)*(1-Train.BIS_R10.Value)*Train.BSM_KRH.Value*Train.BSM_SIR5.Value + S["EKt60"] = (1-Train.BIS_R10.Value)*(1-Train.BIS_R8.Value)*(1-Train.BIS_R7.Value) + S["EKt50"] = S["EKt60"]*(1-Train.BIS_R6.Value) + S["EKt30"] = S["EKt50"]*(1-Train.BIS_R5.Value)*(1-Train.BIS_R4.Value) + S["EKt"] = (3.2+S["EKt60"]*0.7+S["EKt50"]*1.3+S["EKt30"]*2.7)--*(Train.BIS_R0.Value+Train.BIS_R1.Value+) + S["EK"] = (self.KT*((1-Train.BSM_KSR1.Value)*(1-Train.BSM_KSR2.Value)+Train.BIS_R0.Value)+S["GE"]*(Train.BUM_KRD.Value+Train.BSM_KSR1.Value*Train.BSM_KSR2.Value)*((1-Train.BIS_R0.Value*Train.BSM_SIR5.Value)))*Train.BUM_RVEK1.Value*Train.BUM_RVEK2.Value+S["R0"]*(1-Train.BSM_GE.Value) + Train.BUM_EK:TriggerInput("Set",S["EK"]) + --Train.BUM_EK1:TriggerInput("Set",S["EK"]) + Train.BUM_EK:TriggerInput("OpenTime",S["EKt"]) + Train.BUM_EK:TriggerInput("NoOpenTime",S["AntiRol"]) + + --Train.BUM_EK:TriggerInput("OpenTime",S["EKt"]) + + self.EPK = self.GE*Train.BUM_EK.Value + Train.BUM_RVEK1:TriggerInput("Set",self.EPK) + Train.BUM_RVEK2:TriggerInput("Set",self.EPK) + self["48"] = self.GE*Train.BUM_RVZ1.Value + self["8"] = self.GE*Train.BUM_RVT5.Value + self["20"] = self.DAR*Train.BUM_RVT1.Value + self["33D"] = Train.BUM_RVD1.Value + self["33G"] = self.DAR*Train.BUM_RVT2.Value + self["33Zh"] = Train.BUM_RB.Value + self["2"] = self.DA*Train.BUM_RVT4.Value + Panel.AR80 = S["AR80"] + Panel.AR70 = S["AR70"] + Panel.AR60 = S["AR60"] + Panel.AR40 = S["AR40"] + Panel.AR0 = S["AR0"] + Panel.AR04 = S["AR04"] + Panel.KT = self.KT*Train.BSM_GE.Value + Panel.KVD = self.GE*(1-Train.BUM_RUVD.Value) + --Train:WriteTrainWire(90,self.EPK*(1-Train.ARS.Value)) + Train.EPKC:TriggerInput("Set",self.EPK) +end diff --git a/lua/metrostroi/systems/sys_alscoil.lua b/lua/metrostroi/systems/sys_alscoil.lua new file mode 100644 index 0000000..f5d16ae --- /dev/null +++ b/lua/metrostroi/systems/sys_alscoil.lua @@ -0,0 +1,171 @@ +-------------------------------------------------------------------------------- +-- ALS coils helper +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("ALSCoil") +TRAIN_SYSTEM.DontAccelerateSimulation = true + + +function TRAIN_SYSTEM:Initialize() + self.Enabled = 0 + self.Speed = 0 + self.Acceleration = 0 + -- ALS state + self.NoneFreq = 0 + self.OneFreq = 0 + self.TwoFreq = 0 + self.BadFreq = 0 + self.F1 = 0 + self.F2 = 0 + self.F3 = 0 + self.F4 = 0 + self.F5 = 0 + self.F6 = 0 + self.NoFreq = 1 + --self.NoFreqTimer = nil + self.RealF5 = 1 + self.Speed = 0 + self.SpeedSign = 0 + +end + +function TRAIN_SYSTEM:Outputs() + return { + "Enabled", "Speed", "SpeedSign", "Acceleration", + "F1", "F2", "F3", "F4", "F5", "F6", + "NoFreq", "RealF5", "OneFreq", "TwoFreq", "BadFreq" + } +end + +function TRAIN_SYSTEM:Inputs() + return {"Enable"} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Enable" then + self.Enabled = value + end +end + +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local tbl = Train.SubwayTrain and Train.SubwayTrain.ALS + + local force1_5 = not tbl or not tbl.TwoToSix + local HaveRS = not force1_5 and tbl and tbl.RSAs325Hz + local Aproove0 = tbl and tbl.Aproove0As325Hz + local haveautostop = tbl and tbl.HaveAutostop + if self.Enabled == 0 then + self.F1 = 0 + self.F2 = 0 + self.F3 = 0 + self.F4 = 0 + self.F5 = 0 + self.F6 = 0 + self.AO = false + self.RealF5 = 0 + self.NoFreq = 0 + self.NoFreqTimer = 0 + end + self.Speed = (Train.Speed or 0) + self.Acceleration = math.Round(Train.Acceleration or 0,1) + self.SpeedSign = Train.SpeedSign or 1 + + local autostop = haveautostop and Train.SpeedSign > 0 and Train.Speed > 0.1 + if autostop or self.Enabled > 0 then + local ars,arsback + self.Timer = self.Timer or CurTime() + if CurTime() - self.Timer > 1.00 then + self.Timer = CurTime() + -- Get train position + local pos = Metrostroi.TrainPositions[Train] + if pos then pos = pos[1] end + -- Get previous ARS section + if pos then + ars,arsback = Metrostroi.GetARSJoint(pos.node1,pos.x,Metrostroi.TrainDirections[Train], Train) + end + if autostop then + if IsValid(arsback) then + if arsback == self.AutostopSignal then + local ply,mode = Train:GetDriverPly() + local nomsg = IsValid(Train.FrontTrain) and IsValid(Train.RearTrain) or hook.Run("MetrostroiPassedRed",Train,ply,mode,arsback) + if self.AutostropEnabled then + Train.Pneumatic:TriggerInput("Autostop",nomsg and 0 or 1) + end + if not nomsg then + RunConsoleCommand("say",Format("%s Passed prohibited %s signal [%s]",Train:GetDriverName(),arsback.InvationSignal and "InvationSignal" or "",arsback.Name)) + end + self.AutostopSignal = nil + end + end + if IsValid(ars) then + if ars.Red then + self.AutostopSignal = ars + self.AutostropEnabled = ars.AutoEnabled + elseif self.AutostopSignal == ars then + self.AutostopSignal = nil + end + end + end + + self.Signal = ars + + if self.Enabled > 0 and IsValid(ars) then + if not ars:GetARS(1,Train) then + self.F1 = ars:GetARS(8,force1_5,force2_6) and 1 or 0 + self.F2 = ars:GetARS(7,force1_5,force2_6) and 1 or 0 + self.F3 = ars:GetARS(6,force1_5,force2_6) and 1 or 0 + self.F4 = ars:GetARS(4,force1_5,force2_6) and 1 or 0 + self.F5 = ars:GetARS(0,force1_5,force2_6) and 1 or 0 + self.AO = ars:GetARS(2,true) + if HaveRS then + self.F6 = ars:GetRS() and 1 or 0 + elseif Aproove0 then + self.F6 = ars:Get325HzAproove0() and 1 or 0 + else + self.F6 = 0 + end + end + local NoFreq = ars:GetARS(1,Train) or (self.F1+self.F2+self.F3+self.F4+self.F5) == 0 and not self.AO + --if not NoFreq then self.NoFreq = 0 end + --if NoFreq and self.NoFreqTimer == nil then self.NoFreqTimer = CurTime() - (ars:GetARS(1,Train) and 2 or 0) end + --if not NoFreq and self.NoFreqTimer ~= nil then self.NoFreqTimer = nil end + --if self.NoFreqTimer and CurTime()-self.NoFreqTimer > 2 then self.NoFreqTimer = false end + --self.NoFreq = (NoFreq and self.NoFreqTimer == false) and 1 or 0 + self.NoFreq = NoFreq and 1 or 0 + if GetConVarNumber("metrostroi_ars_printnext") == Train:GetWagonNumber() then RunConsoleCommand("say",ars.Name,tostring(arsback and arsback.Name),tostring(ars.NextSignalLink and ars.NextSignalLink.Name or "unknown"),tostring(pos.node1.path.id),tostring(Metrostroi.TrainDirections[Train])) end + elseif self.Enabled > 0 then + if self.NoFreqTimer == nil then self.NoFreqTimer = CurTime() end + + if self.NoFreqTimer and CurTime()-self.NoFreqTimer > 2 then self.NoFreqTimer = false end + self.NoFreq = (self.NoFreqTimer == false) and 1 or 0 + end + self.F1 = self.F1*(1-self.NoFreq) + self.F2 = self.F2*(1-self.NoFreq) + self.F3 = self.F3*(1-self.NoFreq) + self.F4 = self.F4*(1-self.NoFreq) + self.F5 = self.F5*(1-self.NoFreq) + self.F6 = self.F6*(1-self.NoFreq) + self.AO = self.AO and self.NoFreq==0 + self.RealF5 = self.F5*(1-self.F4*self.F3*self.F2*self.F1) + end + if self.AO then + if Aproove0 then + self.F5 = 1 + self.F6 = 0 + else + self.F5 = CurTime()%2 < 1 and 1 or 0 + end + end + else + self.Signal = nil + end + local freqCount = self.F6+self.F5+self.F4+self.F3+self.F2+self.F1 + self.NoneFreq =freqCount==0 and 1 or 0 + self.OneFreq = freqCount==1 and 1 or 0 + self.TwoFreq = freqCount==2 and 1 or 0 + self.BadFreq = freqCount>2 and 1 or 0 + self.NoFreq = math.min(1,self.NoFreq+self.NoneFreq*self.Enabled) +end diff --git a/lua/metrostroi/systems/sys_ars_mp.lua b/lua/metrostroi/systems/sys_ars_mp.lua new file mode 100644 index 0000000..3267c32 --- /dev/null +++ b/lua/metrostroi/systems/sys_ars_mp.lua @@ -0,0 +1,300 @@ +-------------------------------------------------------------------------------- +-- ARS-MP safety system +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("ARS_MP") +TRAIN_SYSTEM.DontAccelerateSimulation = false + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("UOS","Relay","Switch", {bass = true}) + self.Train:LoadSystem("ALSFreq","Relay","Switch",{bass=true}) + self.Train:LoadSystem("AB1","Relay","Switch",{bass=true}) + self.Train:LoadSystem("AB2","Relay","Switch",{bass=true}) + self.Train:LoadSystem("EPKContacts","Relay","",{close_time = 3}) + self.Train:LoadSystem("ROT1","Relay","", { bass = true}) + self.Train:LoadSystem("ROT2","Relay","", { bass = true}) + + self.Train:LoadSystem("EPKC","Relay") + -- Internal state + self.SpeedLimit = 0 + self.NextLimit = 0 + self.AB = 0 + self.AV = 0 + self.AV1 = 0 + self.ARSRing = 0 + self.KRT = 0 + self.KRO = 0 + self.KRH = 0 + --[[ self.Overspeed = false + self.RUVD = false + self.PneumaticBrake1 = false + self.PneumaticBrake2 = true + self.AttentionPedal = false--]] + + self.KVT = false + self.LN = 0 + self["2"] = 0 + self["25"] = 0 + self["20"] = 0 + self["33G"] = 0 + self["33"] = 0 + self["17"] = 0 + self["8"] = 0 + self["44"] = 0 + self["48"] = 0 + + self.EK = 1 + + self.F6 = 0 + self.F5 = 0 + self.PrevF5 = 0 + self.F4 = 0 + self.F3 = 0 + self.F2 = 0 + self.F1 = 0 + self.NoFreq = 0 + self.PrevNoFreq = 0 + + self.ARS = 0 + self.AB = 0 + self.AV = 0 + self.AV1 = 0 + + self.ABReady = 0 + + -- Lamps + ---self.LKT = false + self.LVD = 0 + self.Ring = 0 +end + +function TRAIN_SYSTEM:Outputs() + return { + --"2","25","20","33G","33","17","8","44","48", + "NoFreq","F1","F2","F3","F4","F5","F6","LN","ARS","AB","KT","LVD","ABReady" + } +end + +function TRAIN_SYSTEM:Inputs() + return { "IgnoreThisARS","AttentionPedal","Ring" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + + +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local ALS = Train.ALSCoil + local speed = math.Round(ALS.Speed or 0,1) + + local power = self.GE > 0 + local TwoToSix = self.Freq > 0 + -- ALS, ARS state + + if power and not self.EnableARSTimer then + self.EnableARSTimer = CurTime()+1+math.random()*9 + elseif not power and self.EnableARSTimer then + self.EnableARSTimer = nil + end + + if ALS.Enabled~=self.ALS then + ALS:TriggerInput("Enable",self.ALS) + end + local Power = self.EnableARSTimer and CurTime()-self.EnableARSTimer > 0 + + local KVT = self.KB > 0 + + local F1 = ALS.F1*self.ALS + local F2 = ALS.F2*self.ALS + local F3 = ALS.F3*self.ALS + local F4 = ALS.F4*self.ALS + local F5 = ALS.F5*self.ALS + local F6 = ALS.F6*self.ALS + local FreqCount = F1+F2+F3+F4+F5+F6 + local TwoFreq = FreqCount==2 + if self.AB > 0 then + if FreqCount>0 then self.AB = 0 end + F1 = 1 + F2 = 0 + F3 = 0 + F4 = 0 + F5 = 0 + F6 = 0 + elseif TwoToSix and not TwoFreq then + F1 = 0 + F2 = 0 + F3 = 0 + F4 = math.min(1,F1+F2+F3+F4) + elseif not TwoToSix and TwoFreq then + F1 = 0 + F2 = 0 + F3 = 0 + F4 = 0 + F5 = 0 + F6 = 0 + end + local FreqCode = bit.bor(F1*1,F2*2,F3*4,F4*8,F5*16,F6*32,self.ALS*64,self.GE*128) + if self.FreqCode ~= FreqCode then + if not self.FreqCodeTimer then self.FreqCodeTimer = CurTime() end + if self.FreqCodeTimer and CurTime()-self.FreqCodeTimer>0.8 then + self.FreqCode = FreqCode + self.FreqCodeTimer = nil + + self.F1 = F1 + self.F2 = F2 + self.F3 = F3 + self.F4 = F4 + self.F5 = F5 + self.F6 = F6 + self.NoFreq = (1-math.min(1,(self.F1+self.F2+self.F3+self.F4+self.F5+self.F6)))*math.min(1,self.ALS+self.GE) + end + elseif self.FreqCodeTimer then + self.FreqCodeTimer = nil + end + if power or self.ALS > 0 --[[ or self.AB > 0--]] then + local Vlimit = 20 + if self.F4 > 0 then Vlimit = 40 end + if self.F3 > 0 then Vlimit = 60 end + if self.F2 > 0 then Vlimit = 70 end + if self.F1 > 0 then Vlimit = 80 end + -- Determine next limit and current limit + self.SpeedLimit = Vlimit + + self.NextLimit = Vlimit + if self.F1 > 0 then self.NextLimit = 80 end + if self.F2 > 0 then self.NextLimit = 70 end + if self.F3 > 0 then self.NextLimit = 60 end + if self.F4 > 0 then self.NextLimit = 40 end + if self.F5 > 0 then self.NextLimit = 20 end + + if self.F4 > 0 and self.F6 > 0 then + self.NG = true + end + if TwoToSix and self.LN==0 and self.AB==0 then self.SpeedLimit=20 end + if KVT and self.SpeedLimit <= 40 then self.SpeedLimit = 20 end + if KVT and self.SpeedLimit > 40 then self.SpeedLimit = 40 end + else + self.F1 = 0 + self.F2 = 0 + self.F3 = 0 + self.F4 = 0 + self.F5 = 0 + self.F6 = 0 + self.SpeedLimit = 0 + self.NextLimit = 0 + self.NoFreq = 0 + self.FreqCodeTimer = nil + self.FreqCode = 0 + end + if Power then + self.ABReady = (1-self.AB)*(FreqCount*self.ALS == 0 and 1 or 0) + local ABAccept = self.ABReady > 0 --self.NoFreq--[[ *ALS.Enabled--]] > 0 + if ABAccept and not self.ABPressed1 and Train.AB1.Value > 0 then self.ABPressed1 = CurTime() end + if ABAccept and not self.ABPressed2 and Train.AB2.Value > 0 then self.ABPressed2 = CurTime() end + if not ABAccept or Train.AB1.Value == 0 then self.ABPressed1 = nil end + if not ABAccept or Train.AB2.Value == 0 then self.ABPressed2 = nil end + if self.ABPressed1 and self.ABPressed2 and math.abs(self.ABPressed1-self.ABPressed2) < 1 then + self.AB = 1 + end + self.ARS = 1-self.AB + local NoFreq = (self.Freq>0 and self.LN==0) or self.NoFreq>0 + self.BR2 = KVT and NoFreq and not self.BR1 + self.BR1 = KVT and (self.BR1 or not NoFreq) and not self.BR2 + + + local SpeedLimit = self.SpeedLimit + if (speed > SpeedLimit) and not self.RUVD or SpeedLimit<=20 and not (self.BR1 or self.BR2) then + self.RUVD = true + self.RNT = self.RNT or self.KRT==0 + elseif speed < SpeedLimit-0.5 and self.RUVD and not self.RNT then + self.RUVD = false + end + if (self.BR1 or self.BR2) and self.RNT then + self.RNT = false + end + if self.RO==true and self.KRH > 0 then + self.RO = CurTime() + end + if self.RO and self.RO~=true and CurTime()-self.RO >7 then + self.RO = false + if speed<5 and not NoFreq then self.ROBrake = true end + end + if self.RO and speed > 5 then self.RO = false end + if self.RO~=true and speed <= 5 and self.KRH == 0 then self.RO = true end + if self.RO and self.BR2 then self.RO = false end + + if self.RUVD then + if not self.PN1Timer then self.PN1Timer = CurTime()+3.5-math.max(0,(speed-20))/60*2.5 end + if not self.TW8Timer then self.TW8Timer = self.SpeedLimit<=20 and CurTime()-3 or CurTime() end + end + if not self.RUVD then + if self.PN1Timer then self.PN1Timer = false end + if self.TW8Timer then self.TW8Timer = false end + end + + local brake = (self.RUVD or self.ROBrake) and 1 or 0 + local pn1 = (self.RO == true or (self.PN1Timer and CurTime()-self.PN1Timer < 0)) and 1 or 0 + local pn2 = (self.TW8Timer and CurTime()-self.TW8Timer > 2.7) and 1 or 0 + + self["33"] = (1-self.LVD) + self["33G"] = brake + self["17"] = (1-self.LVD) + self["2"] = brake*self.KRT + self["20"] = brake + self["25"] = (1-self.LVD) + self["44"] = pn1 + self["48"] = pn1 + self["8"] = brake*pn2 + self.Ring = self.RNT and 1 or 0 + + local delay = 3.5 + if 10 < speed and speed < 30 then delay = 5.5 end + if speed < 3 then delay = 10 end + if (self.RUVD or speed<5 and not NoFreq) and self.KT == 0 then + if not self.EPKTimer then self.EPKTimer = CurTime() end + else + self.EPKTimer = nil + end + if self.EPKTimer and CurTime()-self.EPKTimer > delay then + self.EK = 0 + end + self.LVD = math.min(1-self.KRO,self.LVD+brake) + self.LN = self.NG and self.Freq or 0 + else + self.BR1 = 0 + self.BR2 = 0 + self.EK = 1 + self.AB = 0 + self.ARS = 0 + self.LN = 0 + self.NG = false + self.ABPressed1 = nil + self.ABPressed2 = nil + self.Ring = 0 + self.ROBrake = false + self.LVD = 0 + self.ABReady = 0 + + self.RUVD = true + self.RNT = true + + self["33"] = 0 + self["33G"] = 0 + self["17"] = 0 + self["2"] = 0 + self["20"] = 0 + self["25"] = 0 + self["44"] = 0 + self["48"] = 0 + self["8"] = 0 + end + + + self.EPK = self.GE*self.EK + --Train:WriteTrainWire(90,self.EPK*(1-Train.ARS.Value)) + --Train.EPKC:TriggerInput("Set",self.EPK+Train:ReadTrainWire(90)) + Train.EPKC:TriggerInput("Set",self.EPK) +end diff --git a/lua/metrostroi/systems/sys_battery.lua b/lua/metrostroi/systems/sys_battery.lua new file mode 100644 index 0000000..841e36c --- /dev/null +++ b/lua/metrostroi/systems/sys_battery.lua @@ -0,0 +1,46 @@ +-------------------------------------------------------------------------------- +-- Battery +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("Battery") + +function TRAIN_SYSTEM:Initialize() + -- Предохранители цепей (ПÐ1, ПÐ2) + self.Train:LoadSystem("PA1","Relay","PP-28", { trigger_level = 31.5 }) -- A + self.Train:LoadSystem("PA2","Relay","PP-28", { trigger_level = 31.5 }) -- A + + -- Battery parameters + self.ElementCapacity = 80 -- A*hour + self.ElementCount = 56 -- 52 on 81-717 + self.Capacity = self.ElementCapacity * self.ElementCount * 3600 + self.Charge = self.Capacity + self.Voltage = 65 + -- Current through battery in amperes + self.Current = 0 + self.Charging = 0 +end + +function TRAIN_SYSTEM:Inputs() + return { "Charge" } +end +function TRAIN_SYSTEM:Outputs() + return { "Capacity", "Charge", "Voltage" } +end +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Charge" then self.Charging = value end +end +function TRAIN_SYSTEM:Think(dT) + -- Calculate discharge + self.Current = 0--self.Train.KVC.Value*90*(self.Train.PowerSupply.XT3_1 > 0 and 3 or -1 + 4*self.Train:ReadTrainWire(27))*50*self.Train.Panel["V1"] + --print(self.Train.Panel["V1"]) + self.Charge = math.min(self.Capacity,self.Charge + self.Current * dT) + + -- Calculate battery voltage + if self.Train.PowerSupply then + self.Voltage = 65*(self.Charge/self.Capacity) + ((self.Train.PowerSupply.XT3_1 or self.Charging) > 0 and 17 or 0) + else + self.Voltage = 65*(self.Charge/self.Capacity) + (self.Charging > 0 and 17 or 0) + end +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_bpsn.lua b/lua/metrostroi/systems/sys_bpsn.lua new file mode 100644 index 0000000..a3227be --- /dev/null +++ b/lua/metrostroi/systems/sys_bpsn.lua @@ -0,0 +1,58 @@ +-------------------------------------------------------------------------------- +-- "BPSN" Power supply +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("BPSN") + +function TRAIN_SYSTEM:Initialize() + self.X2 = { + [2] = 0, + [3] = 0, + [4] = 0, + [5] = 0, -- Out only + [6] = 0, + [7] = 0, + } + self.X2_2 = 0 + self.X6_2 = 0 + self.X2_1 = 0 + + self.Active = 0 + self.Train:LoadSystem("ConverterProtection","Relay","Switch", {bass = true}) +end + +function TRAIN_SYSTEM:Inputs() + return { "5x2", "6x2", "7x2", "2x2" } +end + +function TRAIN_SYSTEM:Outputs() + return { "X2_2", "X6_2" } +end + + +function TRAIN_SYSTEM:TriggerInput(name,value) + local idx = tonumber(name:sub(1,1)) or 0 + if self.X2[idx] then + self.X2[idx] = value > 0.5 and 1.0 or 0 + end +end + +function TRAIN_SYSTEM:Think() + local Train = self.Train + -- Get high-voltage input + self.X2_1 = Train.KPP.Value * (1-Train.RZP.Value) -- P4 + -- Get battery input + local XT3_1 = self.X2[5]*self.X2_1 + if Train.Electric.Aux750V*self.X2_1 > 975 then + Train.RZP:TriggerInput("Close",1) + self.X2_1 = 0 + XT3_1 = 0 + end + + -- Check if enable signal is present + self.Active = XT3_1>0 and 1 or 0 + self.X2_2 = Train.Electric.Aux750V*self.Active + self.X6_2 = self.Active +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_bv_630.lua b/lua/metrostroi/systems/sys_bv_630.lua new file mode 100644 index 0000000..e27b3fc --- /dev/null +++ b/lua/metrostroi/systems/sys_bv_630.lua @@ -0,0 +1,36 @@ +-------------------------------------------------------------------------------- +-- Fast-switch BV-630 +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("BV_630") + +function TRAIN_SYSTEM:Initialize() + self.State = 0 + self.Power = 0 +end + +function TRAIN_SYSTEM:Inputs() + return { "Enable", "Disable", "Power" } +end +function TRAIN_SYSTEM:Outputs() + return { "State" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Enable" and value > 0 then + self.State = 1 + end + if name == "Disable" and value > 0 then self.State = 0 end + if name == "Power" then self.Power = value end +end + +function TRAIN_SYSTEM:Think() + if self.Power > 0 then + local Train = self.Train + if math.abs(Train.Electric.I24) > 800 then self.State = 0 end + if math.abs(Train.Electric.I13) > 800 then self.State = 0 end + if math.abs(Train.Electric.Itotal) > 1500 then self.State = 0 end + else self.State = 0 end +end diff --git a/lua/metrostroi/systems/sys_dk_104g.lua b/lua/metrostroi/systems/sys_dk_104g.lua new file mode 100644 index 0000000..9967f33 --- /dev/null +++ b/lua/metrostroi/systems/sys_dk_104g.lua @@ -0,0 +1,118 @@ +-------------------------------------------------------------------------------- +-- DK-104G DC engine +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("DK_104G") + +function TRAIN_SYSTEM:Initialize() + -- Speed of train in km/h + self.Speed = 0 + + -- Winding resistance + self.Rwa = 0.0859 -- Ohms, anchor + self.Rws = 0.0350 -- Ohms, stator + + -- Voltage generated by engine + self.E13 = 0.0 -- Volts + self.E24 = 0.0 -- Volts + + -- Rotation rate + self.RotationRate = 0.0 + + -- Magnetic flux in the engine + self.MagneticFlux13 = 0.0 + self.MagneticFlux24 = 0.0 + + -- Field reduction (how much current goes through stator) + self.FieldReduction13 = 0.0 + self.FieldReduction24 = 0.0 + + -- Moment generated by the engine + self.Moment13 = 0.0 + self.Moment24 = 0.0 + self.BogeyMoment = 0.0 -- Moment on front and rear bogey is equal + + -- Need many iterations for engine simulation to converge + self.SubIterations = 16 +end + +function TRAIN_SYSTEM:Inputs() + return { "Speed" } +end + +function TRAIN_SYSTEM:Outputs() + return { "BogeyMoment", "E24" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Speed" then + self.Speed = value + end +end + +function TRAIN_SYSTEM:Think(dT,iter) + local Train = self.Train + + -- Get rate of engine rotation + local currentRotationRate = 3000 * (self.Speed/80) + self.RotationRate = self.RotationRate + 5.0 * (currentRotationRate - self.RotationRate) * dT + + --self.Rws = 0.0356 -- Ohms, stator + self.Rws = 0.0396 -- Ohms, stator + self.Rwa = 0.2215-self.Rws -- Ohms, anchor + + -- Calculate magnetic flux in the engine + local a = 0.1204 + local b = 1.2075 + local c = 0.3461 + local RotRate = math.max(0,(Train.Engines.RotationRate-750)/2250) + local RotRateMF = 0.2+math.max(0,math.min(1,(Train.Engines.RotationRate-675)/2000))*0.8 + local Is13 = math.abs(Train.Electric.Istator13)--) + local Is24 = math.abs(Train.Electric.Istator24)--+self.Magnetic) + --print(Is13,Is24) + local X1 = (Train.Electric.I13 > 0 and 1 or 0) + local X2 = (Train.Electric.I24 > 0 and 1 or 0) + --self.MagneticFlux13 = (Is13/(204.7+(1-self.Speed/80)*30))*math.min(1.0,a+b*math.exp(-c*Is13/(98.56))) + --self.MagneticFlux24 = (Is24/(204.7+(1-self.Speed/80)*30))*math.min(1.0,a+b*math.exp(-c*Is24/(98.56))) + self.MagneticFlux13 = (Is13/((204.7)))*math.min(1.0,a+b*math.exp(-c*Is13/(98.56))) + self.MagneticFlux24 = (Is24/((204.7)))*math.min(1.0,a+b*math.exp(-c*Is24/(98.56))) + self.Magnetic = self.Magnetic or 0 + local MG = Train.Electric.Magnetization*RotRate + if self.Magnetic > MG then + self.Magnetic = self.Magnetic-dT*100 + else + self.Magnetic = self.Magnetic+dT*50 + end + self.MagneticFlux13 = math.min(8.0,math.max(0.01,self.MagneticFlux13+RotRateMF*Train.Electric.Magnetization*math.max(0,20*0.07*(60-Is13)/60))) + self.MagneticFlux24 = math.min(8.0,math.max(0.01,self.MagneticFlux24+RotRateMF*Train.Electric.Magnetization*math.max(0,20*0.07*(60-Is13)/60))) + + -- Calculate voltage generated by engines from magnetic flux + self.E13 = self.RotationRate * self.MagneticFlux13 + self.E24 = self.RotationRate * self.MagneticFlux24 + + self.E13 = math.max(-4000,math.min(4000,self.E13)) + self.E24 = math.max(-4000,math.min(4000,self.E24)) + + -- Calculate engine force (moment) + local b = 3.4539 --1.4539 + local c = 16.1975e-3 + local I13 = math.abs(Train.Electric.I13) + local I24 = math.abs(Train.Electric.I24) + local S13 = (Train.Electric.I13 > 0) and 1 or -1 + local S24 = (Train.Electric.I24 > 0) and 1 or -1 + self.Moment13 = S13*(b*I13 + c*(I13^2))*(1/850.0)*self.MagneticFlux13 + self.Moment24 = S24*(b*I24 + c*(I24^2))*(1/850.0)*self.MagneticFlux24 --1/800 + + -- Apply moment to bogeys + if (math.abs(Train.Electric.I13) > 1.0) or (math.abs(Train.Electric.I24) > 1.0) then + self.BogeyMoment = (self.Moment13 + self.Moment24) / 2 + else + self.BogeyMoment = 0.0 + end + + -- Calculate reduction in magnetic field + self.FieldReduction13 = math.abs(100 * Is13 / (I13+1e-9)) + self.FieldReduction24 = math.abs(100 * Is24 / (I24+1e-9)) +end diff --git a/lua/metrostroi/systems/sys_dk_108d.lua b/lua/metrostroi/systems/sys_dk_108d.lua new file mode 100644 index 0000000..41a1a7c --- /dev/null +++ b/lua/metrostroi/systems/sys_dk_108d.lua @@ -0,0 +1,119 @@ +-------------------------------------------------------------------------------- +-- DK-108D DC engine +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("DK_108D") + +function TRAIN_SYSTEM:Initialize() + -- Speed of train in km/h + self.Speed = 0 + + -- Winding resistance + self.Rwa = 0.0859 -- Ohms, anchor + self.Rws = 0.0350 -- Ohms, stator + + -- Voltage generated by engine + self.E13 = 0.0 -- Volts + self.E24 = 0.0 -- Volts + + -- Rotation rate + self.RotationRate = 0.0 + + -- Magnetic flux in the engine + self.MagneticFlux13 = 0.0 + self.MagneticFlux24 = 0.0 + + -- Field reduction (how much current goes through stator) + self.FieldReduction13 = 0.0 + self.FieldReduction24 = 0.0 + + -- Moment generated by the engine + self.Moment13 = 0.0 + self.Moment24 = 0.0 + self.BogeyMoment = 0.0 -- Moment on front and rear bogey is equal + + -- Need many iterations for engine simulation to converge + self.SubIterations = 16 +end + +function TRAIN_SYSTEM:Inputs() + return { "Speed" } +end + +function TRAIN_SYSTEM:Outputs() + return { "BogeyMoment", "E24" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Speed" then + self.Speed = value + end +end + +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + + -- Get rate of engine rotation + local currentRotationRate = 3000 * (self.Speed/80) + self.RotationRate = self.RotationRate + 5.0 * (currentRotationRate - self.RotationRate) * dT + + --self.Rws = 0.0356 -- Ohms, stator + self.Rws = 0.0396 -- Ohms, stator + self.Rwa = 0.2215-self.Rws -- Ohms, anchor + + -- Calculate magnetic flux in the engine + local a = 0.1204 + local b = 1.2075 + local c = 0.3461 + local RotRate = math.max(0,(Train.Engines.RotationRate-500)/2500) + local RotRateMF = 0.2+math.max(0,math.min(1,(Train.Engines.RotationRate-375)/1700))*0.8 + local Is13 = math.abs(Train.Electric.Istator13)--) + local Is24 = math.abs(Train.Electric.Istator24)--+self.Magnetic) + --print(Is13,Is24) + local X1 = (Train.Electric.I13 > 0 and 1 or 0) + local X2 = (Train.Electric.I24 > 0 and 1 or 0) + self.MagneticFlux13 = (Is13/(204.7+(1-math.min(1,self.RotationRate/375))*30))*math.min(1.0,a+b*math.exp(-c*Is13/(98.56))) + self.MagneticFlux24 = (Is24/(204.7+(1-math.min(1,self.RotationRate/375))*30))*math.min(1.0,a+b*math.exp(-c*Is24/(98.56))) + self.Magnetic = self.Magnetic or 0 + local MG = Train.Electric.Aux750V/16*Train.Electric.Magnetization*RotRate + if MG==0 then + self.Magnetic = self.Magnetic+(MG-self.Magnetic)*dT*100 + elseif self.Magnetic > MG then + self.Magnetic = self.Magnetic-dT*100 + else + self.Magnetic = self.Magnetic+dT*50 + end + --print(math.max(0,(40+self.Magnetic/5)*0.007*(150-Is13)/150),Train.Electric.Magnetization) + self.MagneticFlux13 = math.min(8.0,math.max(0.01,self.MagneticFlux13+RotRateMF*Train.Electric.Magnetization*math.max(0,(40+self.Magnetic/5)*0.007*(150-Is13)/150))) + self.MagneticFlux24 = math.min(8.0,math.max(0.01,self.MagneticFlux24+RotRateMF*Train.Electric.Magnetization*math.max(0,(40+self.Magnetic/5)*0.007*(150-Is13)/150))) + + -- Calculate voltage generated by engines from magnetic flux + self.E13 = self.RotationRate * self.MagneticFlux13 + self.E24 = self.RotationRate * self.MagneticFlux24 + + self.E13 = math.max(-4000,math.min(4000,self.E13)) + self.E24 = math.max(-4000,math.min(4000,self.E24)) + + -- Calculate engine force (moment) + local b = 3.4539 --1.4539 + local c = 16.1975e-3 + local I13 = math.abs(Train.Electric.I13) + local I24 = math.abs(Train.Electric.I24) + local S13 = (Train.Electric.I13 > 0) and 1 or -1 + local S24 = (Train.Electric.I24 > 0) and 1 or -1 + self.Moment13 = S13*(b*I13 + c*(I13^2))*(1/850.0)*self.MagneticFlux13 + self.Moment24 = S24*(b*I24 + c*(I24^2))*(1/850.0)*self.MagneticFlux24 --1/800 + + -- Apply moment to bogeys + if (math.abs(Train.Electric.I13) > 1.0) or (math.abs(Train.Electric.I24) > 1.0) then + self.BogeyMoment = (self.Moment13 + self.Moment24) / 2 + else + self.BogeyMoment = 0.0 + end + + -- Calculate reduction in magnetic field + self.FieldReduction13 = math.abs(100 * Is13 / (I13+1e-9)) + self.FieldReduction24 = math.abs(100 * Is24 / (I24+1e-9)) +end diff --git a/lua/metrostroi/systems/sys_dk_116a.lua b/lua/metrostroi/systems/sys_dk_116a.lua new file mode 100644 index 0000000..d9d1ada --- /dev/null +++ b/lua/metrostroi/systems/sys_dk_116a.lua @@ -0,0 +1,105 @@ +-------------------------------------------------------------------------------- +-- DK-116A DC engine +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("DK_116A") + +function TRAIN_SYSTEM:Initialize() + -- Speed of train in km/h + self.Speed = 0 + + -- Winding resistance + self.Rwa = 0.0859 -- Ohms, anchor + self.Rws = 0.0350 -- Ohms, stator + + -- Voltage generated by engine + self.E13 = 0.0 -- Volts + self.E24 = 0.0 -- Volts + + -- Rotation rate + self.RotationRate = 0.0 + + -- Magnetic flux in the engine + self.MagneticFlux13 = 0.0 + self.MagneticFlux24 = 0.0 + + -- Field reduction (how much current goes through stator) + self.FieldReduction13 = 0.0 + self.FieldReduction24 = 0.0 + + -- Moment generated by the engine + self.Moment13 = 0.0 + self.Moment24 = 0.0 + self.BogeyMoment = 0.0 -- Moment on front and rear bogey is equal + + -- Need many iterations for engine simulation to converge + self.SubIterations = 16 +end + +function TRAIN_SYSTEM:Inputs() + return { "Speed" } +end + +function TRAIN_SYSTEM:Outputs() + return { "BogeyMoment" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Speed" then + self.Speed = value + end +end + +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + + -- Get rate of engine rotation + local currentRotationRate = 3000 * (self.Speed/80) + self.RotationRate = self.RotationRate + 5.0 * (currentRotationRate - self.RotationRate) * dT + + self.Rws = 0.0356 -- Ohms, stator + self.Rwa = 0.1215-self.Rws -- Ohms, anchor + + -- Calculate magnetic flux in the engine + local a = 0.1204 + local b = 1.0475 + local c = 0.3861 + local Is13 = math.abs(Train.Electric.Istator13) + local Is24 = math.abs(Train.Electric.Istator24) + local X1 = (Train.Electric.I13 > 0 and 1 or 0) + local X2 = (Train.Electric.I24 > 0 and 1 or 0) + self.MagneticFlux13 = (Is13/204.7)*math.min(1.0,a+b*math.exp(-c*Is13/112.6)) + self.MagneticFlux24 = (Is24/204.7)*math.min(1.0,a+b*math.exp(-c*Is24/112.6)) + self.MagneticFlux13 = math.min(8.0,math.max(0.01,self.MagneticFlux13)) + self.MagneticFlux24 = math.min(8.0,math.max(0.01,self.MagneticFlux24)) + + -- Calculate voltage generated by engines from magnetic flux + self.E13 = self.RotationRate * self.MagneticFlux13 + self.E24 = self.RotationRate * self.MagneticFlux24 + + self.E13 = math.max(-4000,math.min(4000,self.E13)) + self.E24 = math.max(-4000,math.min(4000,self.E24)) + + -- Calculate engine force (moment) + local b = 2.4539 --1.4539 + local c = 16.1975e-3 + local I13 = math.abs(Train.Electric.I13) + local I24 = math.abs(Train.Electric.I24) + local S13 = (Train.Electric.I13 > 0) and 1 or -1 + local S24 = (Train.Electric.I24 > 0) and 1 or -1 + self.Moment13 = S13*(b*I13 + c*(I13^2))*(1/725.0)*self.MagneticFlux13 + self.Moment24 = S24*(b*I24 + c*(I24^2))*(1/725.0)*self.MagneticFlux24 --1/800 + + -- Apply moment to bogeys + if (math.abs(Train.Electric.I13) > 1.0) or (math.abs(Train.Electric.I24) > 1.0) then + self.BogeyMoment = (self.Moment13 + self.Moment24) / 2 + else + self.BogeyMoment = 0.0 + end + + -- Calculate reduction in magnetic field + self.FieldReduction13 = math.abs(100 * Is13 / (I13+1e-9)) + self.FieldReduction24 = math.abs(100 * Is24 / (I24+1e-9)) +end diff --git a/lua/metrostroi/systems/sys_dk_117dm.lua b/lua/metrostroi/systems/sys_dk_117dm.lua new file mode 100644 index 0000000..faafe4d --- /dev/null +++ b/lua/metrostroi/systems/sys_dk_117dm.lua @@ -0,0 +1,107 @@ +-------------------------------------------------------------------------------- +-- DK-117DM DC engine +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("DK_117DM") +function TRAIN_SYSTEM:Initialize() + -- Speed of train in km/h + self.Speed = 0 + + -- Winding resistance + self.Rwa = 0.0819 -- Ohms, anchor + self.Rws = 0.0396 -- Ohms, stator + + -- Voltage generated by engine + self.E13 = 0.0 -- Volts + self.E24 = 0.0 -- Volts + + -- Rotation rate + self.RotationRate = 0.0 + + -- Magnetic flux in the engine + self.MagneticFlux13 = 0.0 + self.MagneticFlux24 = 0.0 + + -- Field reduction (how much current goes through stator) + self.FieldReduction13 = 0.0 + self.FieldReduction24 = 0.0 + + -- Moment generated by the engine + self.Moment13 = 0.0 + self.Moment24 = 0.0 + self.BogeyMoment = 0.0 -- Moment on front and rear bogey is equal + + -- Need many iterations for engine simulation to converge + self.SubIterations = 16 +end + +function TRAIN_SYSTEM:Inputs() + return { "Speed" } +end + +function TRAIN_SYSTEM:Outputs() + return { "BogeyMoment", } + --"Speed","Rwa","Rws","E13","E24","RotationRate","MagneticFlux13","MagneticFlux24","FieldReduction13","FieldReduction24","Moment13","Moment24","BogeyMoment"} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Speed" then + self.Speed = value + end +end + +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + + -- Get rate of engine rotation + local currentRotationRate = 3000 * (self.Speed/80) + self.RotationRate = self.RotationRate + 5.0 * (currentRotationRate - self.RotationRate) * dT + + self.Rws = 0.0396 -- Ohms, stator + self.Rwa = 0.1215-self.Rws -- Ohms, anchor + + -- Calculate magnetic flux in the engine + local a = 0.1204 + local b = 1.3075 + local c = 0.3461 + local Is13 = math.abs(Train.Electric.Istator13) + local Is24 = math.abs(Train.Electric.Istator24) + local X1 = (Train.Electric.I13 < 0 and 1 or 0) + local X2 = (Train.Electric.I24 < 0 and 1 or 0) + --self.MagneticFlux13 = (Is13/255)*math.min(1.0,a+b*math.exp(-c*Is13/74)) + --self.MagneticFlux24 = (Is24/255)*math.min(1.0,a+b*math.exp(-c*Is24/74)) + self.MagneticFlux13 = (Is13/(255+X1*(1-math.min(1,self.RotationRate/1125))*40))*math.min(1.0,a+b*math.exp(-c*Is13/74)) + self.MagneticFlux24 = (Is24/(255+X2*(1-math.min(1,self.RotationRate/1125))*40))*math.min(1.0,a+b*math.exp(-c*Is24/74)) + self.MagneticFlux13 = math.min(8.0,math.max(0.01,self.MagneticFlux13)) + self.MagneticFlux24 = math.min(8.0,math.max(0.01,self.MagneticFlux24)) + + -- Calculate voltage generated by engines from magnetic flux + self.E13 = self.RotationRate * self.MagneticFlux13 + self.E24 = self.RotationRate * self.MagneticFlux24 + + self.E13 = math.max(-4000,math.min(4000,self.E13)) + self.E24 = math.max(-4000,math.min(4000,self.E24)) + + -- Calculate engine force (moment) + local b = 3.5539 + local c = 0.0042 + local I13 = math.abs(Train.Electric.I13) + local I24 = math.abs(Train.Electric.I24) + local S13 = (Train.Electric.I13 > 0) and 1 or -1 + local S24 = (Train.Electric.I24 > 0) and 1 or -1 + self.Moment13 = S13*(b*I13 + c*(I13^2))*(1/720.0)*self.MagneticFlux13 + self.Moment24 = S24*(b*I24 + c*(I24^2))*(1/720.0)*self.MagneticFlux24 --1/800 + + -- Apply moment to bogeys + if (math.abs(Train.Electric.I13) > 1.0) or (math.abs(Train.Electric.I24) > 1.0) then + self.BogeyMoment = (self.Moment13 + self.Moment24) / 2 + else + self.BogeyMoment = 0.0 + end + + -- Calculate reduction in magnetic field + self.FieldReduction13 = math.abs(100 * Is13 / (I13+1e-9)) + self.FieldReduction24 = math.abs(100 * Is24 / (I24+1e-9)) +end diff --git a/lua/metrostroi/systems/sys_dk_120am.lua b/lua/metrostroi/systems/sys_dk_120am.lua new file mode 100644 index 0000000..517b1df --- /dev/null +++ b/lua/metrostroi/systems/sys_dk_120am.lua @@ -0,0 +1,111 @@ +-------------------------------------------------------------------------------- +-- DK-120AM DC engine +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("DK_120AM") +TRAIN_SYSTEM.DontAccelerateSimulation = false + +function TRAIN_SYSTEM:Initialize() + -- Speed of train in km/h + self.Speed = 0 + + -- Winding resistance + self.Rwa = 0.0819 -- Ohms, anchor + self.Rws = 0.0396 -- Ohms, stator + + -- Voltage generated by engine + self.E13 = 0.0 -- Volts + self.E24 = 0.0 -- Volts + + -- Rotation rate + self.RotationRate = 0.0 + + -- Magnetic flux in the engine + self.MagneticFlux13 = 0.0 + self.MagneticFlux24 = 0.0 + + -- Field reduction (how much current goes through stator) + self.FieldReduction13 = 0.0 + self.FieldReduction24 = 0.0 + + -- Moment generated by the engine + self.Moment13 = 0.0 + self.Moment24 = 0.0 + self.BogeyMoment = 0.0 -- Moment on front and rear bogey is equal + + -- Need many iterations for engine simulation to converge + self.SubIterations = 16 +end + +function TRAIN_SYSTEM:Inputs() + return { "Speed" } +end + +function TRAIN_SYSTEM:Outputs() + return { "BogeyMoment" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Speed" then + self.Speed = value + end +end + +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + -- Get rate of engine rotation + local currentRotationRate = 3000 * (self.Speed/80) + self.RotationRate = self.RotationRate + 5.0 * (currentRotationRate - self.RotationRate) * dT + + self.Rws = 0.0396 -- Ohms, stator + self.Rwa = 0.1215-self.Rws -- Ohms, anchor + + -- Calculate magnetic flux in the engine + local a = 0.1204 + local b = 1.2075 + local c = 0.3461--0.3461 + local Is13 = math.abs(Train.Electric.Istator13) + local Is24 = math.abs(Train.Electric.Istator24) + local X1 = (Train.Electric.I13 > 0 and 1 or 0) + local X2 = (Train.Electric.I24 > 0 and 1 or 0) + --self.MagneticFlux13 = (Is13/450)*math.min(1.0,a+b*math.exp(-c*Is13/(100+20*X1)))--395 + --self.MagneticFlux24 = (Is24/450)*math.min(1.0,a+b*math.exp(-c*Is24/(100+20*X2)))--395 + self.MagneticFlux13 = (Is13/255)*math.min(1.0,a+b*math.exp(-c*Is13/74)) + self.MagneticFlux24 = (Is24/255)*math.min(1.0,a+b*math.exp(-c*Is24/74)) + self.MagneticFlux13 = math.min(8.0,math.max(0.01,self.MagneticFlux13)) + self.MagneticFlux24 = math.min(8.0,math.max(0.01,self.MagneticFlux24)) + + -- Calculate voltage generated by engines from magnetic flux + self.E13 = self.RotationRate * self.MagneticFlux13 + self.E24 = self.RotationRate * self.MagneticFlux24 + + self.E13 = math.max(-4000,math.min(4000,self.E13)) + self.E24 = math.max(-4000,math.min(4000,self.E24)) + + -- Calculate engine force (moment) + --local b = 1.4539 + --local c = 8.1975e-3*(1.3-0.5*X1) + local b = 1.4539 + local c = 12.1975e-3 + --local b = 1.4539 + --local c = 8.7975e-3 + local I13 = math.abs(Train.Electric.I13) + local I24 = math.abs(Train.Electric.I24) + local S13 = (Train.Electric.I13 > 0) and 1 or -1 + local S24 = (Train.Electric.I24 > 0) and 1 or -1 + self.Moment13 = S13*(b*I13 + c*(I13^2))*(1/720.0)*self.MagneticFlux13 + self.Moment24 = S24*(b*I24 + c*(I24^2))*(1/720.0)*self.MagneticFlux24 --1/800 + + -- Apply moment to bogeys + if (math.abs(Train.Electric.I13) > 1.0) or (math.abs(Train.Electric.I24) > 1.0) then + self.BogeyMoment = (self.Moment13 + self.Moment24) / 2 + else + self.BogeyMoment = 0.0 + end + + -- Calculate reduction in magnetic field + self.FieldReduction13 = math.abs(100 * Is13 / (I13+1e-9)) + self.FieldReduction24 = math.abs(100 * Is24 / (I24+1e-9)) +end diff --git a/lua/metrostroi/systems/sys_ekg.lua b/lua/metrostroi/systems/sys_ekg.lua new file mode 100644 index 0000000..c88cf47 --- /dev/null +++ b/lua/metrostroi/systems/sys_ekg.lua @@ -0,0 +1,136 @@ +-------------------------------------------------------------------------------- +-- Contactors switch (EKG) base +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("EKG") + +function TRAIN_SYSTEM:Initialize() + -- Controller configuration + self.Configuration = self.Configuration or { + [ 1] = { 0, 0 }, + [ 2] = { 1, 1 }, + } + + -- Resistance value of all contactors + for k,v in ipairs(self.Configuration[1]) do self[k] = 1e15 end + for k,v in ipairs(self.Configuration[1]) do self[k.."_v"] = 0 end + for k,v in ipairs(self.Configuration[1]) do self[k.."_contactor"] = 0 end + -- Rate of rotation (positions per second + self.RotationRate = self.RotationRate or 1.0/0.12 + self.OverrideRate = self.OverrideRate or {} + + -- Initialize motor state and position + self.Position = 1 -- Current literal position + self.Velocity = 0 -- Current velocity + self.SelectedPosition = 1 -- Currently selected set of contactors + self.MotorState = 0 -- State of motor (1 go, -1 brake) + self.MotorCoilState = 1 -- State of the motor coil (selects direction) + self.RKM1 = 0 -- Intermediate position contactor + self.RKM2 = 0 -- Intermediate position contactor + self.RKP = 0 -- Final position contactor + + -- Max position + self.MaxPosition = #self.Configuration + + -- Use more iterations to make sure rotation of the rotor passes through all positions + self.SubIterations = 16 +end + +function TRAIN_SYSTEM:Inputs() + return { "MotorState", "MotorCoilState" } +end + +function TRAIN_SYSTEM:Outputs() + return { "Position", "Velocity", "MotorState", "MotorCoilState", "RKM1", "RKM2", "RKP","SelectedPosition" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "MotorState" then + self.MotorState = value + elseif name == "MotorCoilState" then + self.MotorCoilState = value + end +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "MotorState" then + if value > 0.5 then + self.MotorState = 1.0 + elseif value < -0.5 then + self.MotorState = -1.0 + else + self.MotorState = 0.0 + end + elseif name == "MotorCoilState" then + self.MotorCoilState = value + end +end + +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + + -- Get currently selected position + local position = math.floor(self.Position+0.5) + if position < 1 then position = 1 end + if position > self.MaxPosition then position = self.MaxPosition end + + -- Lock contacts as defined in the configuration + for k,v in ipairs(self.Configuration[position]) do + self[k] = 1e-15 + 1e15 * (1-v) + self[k.."_v"] = v + self[k.."_contactor"] = v + end + + -- Start or stop motor rotation + --[[ local rate = self.OverrideRate[position] or self.RotationRate + if self.MotorState > 0 then + self.Velocity = rate*math.max(-1,math.min(1,self.MotorCoilState)) + end + if self.MotorState < 0 and self.Velocity ~= 0 then + self.Velocity = 0 + local pos = (position-self.Position) + self.Position = position--math.max(position-0.02,math.min(self.Position,position+0.02)) + --self.StopTimer = CurTime() + end--]] + + -- Move motor + local threshold = self.RotationRate*dT -- Maximum single step of motor per frame + --print(self.Name,self.Velocity,math.min(threshold,self.Velocity * dT),threshold) + + local rate = self.OverrideRate[position] or self.RotationRate + if self.MotorState == 1.0 then + self.Velocity = rate*math.max(-1,math.min(1,self.MotorCoilState)) + end + if self.MotorState == -1.0 then + self.Velocity = 0 + end + self.Position = self.Position + math.min(threshold,self.Velocity * dT) + -- Limit motor from moving too far + --self.WrapsAround = false + if not self.WrapsAround then + if self.Position > self.MaxPosition+0.1 then + self.Position = self.MaxPosition+0.1 + self.Velocity = 0.0 + self.MotorState = 0.0 + end + if self.Position < 0.9 then + self.Position = 0.9 + self.Velocity = 0.0 + self.MotorState = 0.0 + end + else + if self.Position > self.MaxPosition+1.0 then self.Position = -1.0 end + if self.Position < -1.0 then self.Position = self.MaxPosition+1.0 end + end + + local BadValues = self.Position < 0.9 or self.Position > self.MaxPosition+0.1 + -- Update position contactors + local f = self.Position - position + self.RKM1 = ((f < -0.30) or (f > 0.30)) and 1 or 0 + self.RKM2 = not BadValues and ((f < -0.40) or (f > 0.40)) and 1 or 0 + self.RKP = ((f > -0.10) and (f < 0.10)) and 1 or 0 + -- Update position readout + if ((f > -0.40) and (f < 0.40)) then self.SelectedPosition = position end +end diff --git a/lua/metrostroi/systems/sys_ekg_17a.lua b/lua/metrostroi/systems/sys_ekg_17a.lua new file mode 100644 index 0000000..63a0ee0 --- /dev/null +++ b/lua/metrostroi/systems/sys_ekg_17a.lua @@ -0,0 +1,47 @@ +-------------------------------------------------------------------------------- +-- Rheostat controller for 81-502/81-703/81-707 (ЕКГ-17A) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("EKG_17A") + +function TRAIN_SYSTEM:Initialize() + -- Rheostat configuration + self.Configuration = { + -- ## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 + [ 1] = { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0 }, + [ 2] = { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0 }, + [ 3] = { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0 }, + [ 4] = { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0 }, + [ 5] = { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [ 6] = { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [ 7] = { 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [ 8] = { 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [ 9] = { 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [10] = { 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [11] = { 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [12] = { 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [13] = { 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [14] = { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [15] = { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [16] = { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [17] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [18] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0 }, + } + self.WrapsAround = true + Metrostroi.BaseSystems["EKG"].Initialize(self) +end + +function TRAIN_SYSTEM:Inputs(...) + return Metrostroi.BaseSystems["EKG"].Inputs(self,...) +end +function TRAIN_SYSTEM:Outputs(...) + return Metrostroi.BaseSystems["EKG"].Outputs(self,...) +end +function TRAIN_SYSTEM:TriggerInput(...) + return Metrostroi.BaseSystems["EKG"].TriggerInput(self,...) +end +function TRAIN_SYSTEM:Think(...) + return Metrostroi.BaseSystems["EKG"].Think(self,...) +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_ekg_17b.lua b/lua/metrostroi/systems/sys_ekg_17b.lua new file mode 100644 index 0000000..53ff80b --- /dev/null +++ b/lua/metrostroi/systems/sys_ekg_17b.lua @@ -0,0 +1,48 @@ +-------------------------------------------------------------------------------- +-- Rheostat controller for 81-710/81-717 (ЕКГ-17B) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("EKG_17B") + +function TRAIN_SYSTEM:Initialize() + -- Rheostat configuration + self.Configuration = { + -- ## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 + [ 1] = { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0 }, + [ 2] = { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0 }, + [ 3] = { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0 }, + [ 4] = { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0 }, + [ 5] = { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [ 6] = { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [ 7] = { 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [ 8] = { 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [ 9] = { 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [10] = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [11] = { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [12] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [13] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [14] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [15] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [16] = { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [17] = { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [18] = { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1 }, + } + self.WrapsAround = true + self.RotationRate = 1.0/0.14 + Metrostroi.BaseSystems["EKG"].Initialize(self) +end + +function TRAIN_SYSTEM:Inputs(...) + return Metrostroi.BaseSystems["EKG"].Inputs(self,...) +end +function TRAIN_SYSTEM:Outputs(...) + return Metrostroi.BaseSystems["EKG"].Outputs(self,...) +end +function TRAIN_SYSTEM:TriggerInput(...) + return Metrostroi.BaseSystems["EKG"].TriggerInput(self,...) +end +function TRAIN_SYSTEM:Think(...) + return Metrostroi.BaseSystems["EKG"].Think(self,...) +end diff --git a/lua/metrostroi/systems/sys_ekg_18a.lua b/lua/metrostroi/systems/sys_ekg_18a.lua new file mode 100644 index 0000000..af082b6 --- /dev/null +++ b/lua/metrostroi/systems/sys_ekg_18a.lua @@ -0,0 +1,46 @@ +-------------------------------------------------------------------------------- +-- Position switch for 81-502/81-703/81-707 (ЕКГ-18A) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("EKG_18A") + +function TRAIN_SYSTEM:Initialize() + -- Rheostat configuration + self.Configuration = { + -- ## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 + [ 1] = { 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1 },-- PS + [ 2] = { 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0 },-- PP + [ 3] = { 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1 },-- PT1 + [ 4] = { 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0 },-- PT2 + } + self.WrapsAround = true + Metrostroi.BaseSystems["EKG"].Initialize(self) + + -- Rate of rotation (positions per second + self.RotationRate = 1.0/0.30 + + -- Реле РПУ + self.Train:LoadSystem("RPU","Relay","RPU-3",{normal_level = 2}) + + self.PMPos = 0 +end + +function TRAIN_SYSTEM:Inputs(...) + return Metrostroi.BaseSystems["EKG"].Inputs(self,...) +end +function TRAIN_SYSTEM:Outputs(...) + return Metrostroi.BaseSystems["EKG"].Outputs(self,...) +end +function TRAIN_SYSTEM:TriggerInput(...) + return Metrostroi.BaseSystems["EKG"].TriggerInput(self,...) +end +function TRAIN_SYSTEM:Think(...) + if self.OldSelectedPosition ~= self.SelectedPosition then + self.Train:PlayOnce("pkg",tostring(self.SelectedPosition),1) + self.OldSelectedPosition = self.SelectedPosition + end + self.PMPos = (1.25 < self.Position and self.Position < 1.75 or 3.25 < self.Position and self.Position < 3.75) and 1 or 0 + return Metrostroi.BaseSystems["EKG"].Think(self,...) +end diff --git a/lua/metrostroi/systems/sys_ekg_18b.lua b/lua/metrostroi/systems/sys_ekg_18b.lua new file mode 100644 index 0000000..a9b8157 --- /dev/null +++ b/lua/metrostroi/systems/sys_ekg_18b.lua @@ -0,0 +1,46 @@ +-------------------------------------------------------------------------------- +-- Rheostat controller for 81-502/81-703/81-707 (ЕКГ-17A) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("EKG_18B") + +function TRAIN_SYSTEM:Initialize() + -- Rheostat configuration + self.Configuration = { + -- ## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 + [ 1] = { 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1 },-- PS + [ 2] = { 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0 },-- PP + [ 3] = { 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0 },-- PT1 + [ 4] = { 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0 },-- PT2 (not used) + } + self.WrapsAround = true + Metrostroi.BaseSystems["EKG"].Initialize(self) + + -- Rate of rotation (positions per second + self.RotationRate = 1.0/0.30 + + -- Реле РПУ + self.Train:LoadSystem("RPU","Relay","RPU-3",{normal_level = 2}) + + self.PMPos = 0 +end + +function TRAIN_SYSTEM:Inputs(...) + return Metrostroi.BaseSystems["EKG"].Inputs(self,...) +end +function TRAIN_SYSTEM:Outputs(...) + return Metrostroi.BaseSystems["EKG"].Outputs(self,...) +end +function TRAIN_SYSTEM:TriggerInput(...) + return Metrostroi.BaseSystems["EKG"].TriggerInput(self,...) +end +function TRAIN_SYSTEM:Think(...) + if self.OldSelectedPosition ~= self.SelectedPosition then + self.Train:PlayOnce("pkg",tostring(self.SelectedPosition),1) + self.OldSelectedPosition = self.SelectedPosition + end + self.PMPos = (1.25 < self.Position and self.Position < 1.75 or 3.25 < self.Position and self.Position < 3.75) and 1 or 0 + return Metrostroi.BaseSystems["EKG"].Think(self,...) +end diff --git a/lua/metrostroi/systems/sys_electric.lua b/lua/metrostroi/systems/sys_electric.lua new file mode 100644 index 0000000..0e896a0 --- /dev/null +++ b/lua/metrostroi/systems/sys_electric.lua @@ -0,0 +1,510 @@ +-------------------------------------------------------------------------------- +-- Train electric base +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("Electric") +function TRAIN_SYSTEM:Initialize() + -- General power output + self.Main750V = 0.0 + self.Aux750V = 0.0 + self.Power750V = 0.0 + self.Aux80V = 0.0 + self.Lights80V = 0.0 + + -- Resistances + self.R1 = 1e9 + self.R2 = 1e9 + self.R3 = 1e9 + self.Rs1 = 1e9 + self.Rs2 = 1e9 + + self.Rstator13 = 1e9 + self.Rstator24 = 1e9 + self.Ranchor13 = 1e9 + self.Ranchor24 = 1e9 + + -- Load internal circuits + --self.Train:LoadSystem("InternalCircuits","Gen_Int") + + -- Electric network info + self.Itotal = 0.0 + self.I13 = 0.0 + self.I24 = 0.0 + self.Ustator13 = 0.0 + self.Ustator24 = 0.0 + self.Ishunt13 = 0.0 + self.Istator13 = 0.0 + self.Ishunt24 = 0.0 + self.Istator24 = 0.0 + + self.Magnetization = 0 + + -- Calculate current through rheostats 1, 2 + self.IR1 = self.Itotal + self.IR2 = self.Itotal + self.IRT2 = self.Itotal + self.T1 = 25 + self.T2 = 25 + self.P1 = 0 + self.P2 = 0 + self.Overheat1 = 0 + self.Overheat2 = 0 + + -- Total energy used by train + self.ElectricEnergyUsed = 0 -- joules + self.ElectricEnergyDissipated = 0 -- joules + self.EnergyChange = 0 + + -- Signal resistor + self.RPSignalResistor = FailSim.AddParameter(self,"SignalResistor", { value = 1.0, precision = 0.20 }) + + --Train wire outside power + -- Need many iterations for engine simulation to converge + self.SubIterations = 16 + + self.Train:LoadSystem("GV","Relay","GV_10ZH",{bass=true}) + + -- Thyristor contrller + if self.ThyristorController then + self.Train:LoadSystem("ThyristorBU5_6","Relay") + self.ThyristorResistance = 1e9 + self.ThyristorState = 0.0 + self.ThyristorControllerPower = 0 + self.ThyristorControllerWork = 0 + end + + self.Cosume = 0 +end + + +function TRAIN_SYSTEM:Inputs() + return { "Type" } +end + +function TRAIN_SYSTEM:Outputs() + return { --[[ "R1","R2","R3","Rs1","Rs2",--]] "Itotal","I13","I24","IRT2", + --[[ "Ustator13","Ustator24","Ishunt13","Istator13","Ishunt24","Istator24", + "Uanchor13","Uanchor24",--]] "U13","U24","Utotal", + "T1", "T2", "P1", "P2", + "Overheat1","Overheat2", + "Main750V", "Power750V", "Aux750V", "Aux80V", "Lights80V", + --[[ "ThyristorResistance", "ThyristorState", + "ElectricEnergyUsed", "ElectricEnergyDissipated", "EnergyChange", + "RPSignalResistor", --]] "Cosume","Type", + "ElectricEnergyUsed", "ElectricEnergyDissipated","ThyristorControllerPower","ThyristorControllerWork", + + --"Main750V","Aux750V","Power750V","Aux80V","Lights80V","R1","R2","R3","Rs1","Rs2","Rstator13","Rstator24","Ranchor13","Ranchor24","Itotal","I13","I24","Ustator13","Ustator24","Ishunt13","Istator13","Ishunt24","Istator24","Magnetization","IR1","IR2","IRT2","T1","T2","P1","P2","Overheat1","Overheat2","ElectricEnergyUsed","ThyristorResistance","ThyristorState","ThyristorControllerPower","ThyristorControllerWork", + } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Type" then + self.Type = value + end +end + +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:Think(dT,iter) + local Train = self.Train + ---------------------------------------------------------------------------- + -- Voltages from the third rail + ---------------------------------------------------------------------------- + self.Main750V = Train.TR.Main750V * Train.PNB_1250_1.Value + self.Aux750V = Train.TR.Main750V * Train.PNB_1250_2.Value * Train.KVC.Value + self.Power750V = self.Main750V * Train.GV.Value + + + ---------------------------------------------------------------------------- + -- Information only + ---------------------------------------------------------------------------- + if Train.PowerSupply then + self.Aux80V = Train.PowerSupply.XT3_1 + self.Lights80V = Train.PowerSupply.XT3_4 + end + + + ---------------------------------------------------------------------------- + -- Solve circuits + ---------------------------------------------------------------------------- + if self.ThyristorController then + self:SolveThyristorController(Train,dT) + end + self:SolvePowerCircuits(Train,dT,iter==1) + self:SolveInternalCircuits(Train,dT,iter==1) + + + ---------------------------------------------------------------------------- + -- Calculate current flow out of the battery + ---------------------------------------------------------------------------- + --local totalCurrent = 5*A30 + 63*A24 + 16*A44 + 5*A39 + 10*A80 + --local totalCurrent = 20 + 60*DIP +end + + +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:SolveInternalCircuits(Train,dT) + if (self.TrainSolver == "Ezh3") or (self.TrainSolver == "Ema508") then + local KSH1,KSH2 = 0,0 + local SDRK_Shunt = 1.0 + self.Triggers = { -- FIXME + --["KSH1"] = function(V) KSH1 = KSH1 + V end, + --["KSH2"] = function(V) KSH2 = KSH2 + V end, + --["KSB1"] = function(V) Train.KSB1:TriggerInput("Set",V) KSH1 = KSH1 + V end, + --["KSB2"] = function(V) Train.KSB2:TriggerInput("Set",V) KSH2 = KSH2 + V end, + ["KPP"] = function(V) Train.KPP:TriggerInput("Close",V) end, + + ["RPvozvrat"] = function(V) Train.RPvozvrat:TriggerInput("Open",V) end, + ["RRTuderzh"] = function(V) Train.RRTuderzh = V end, + ["RRTpod"] = function(V) Train.RRTpod = V end, + ["RUTpod"] = function(V) Train.RUTpod = V end, + + ["SDPP"] = function(V) Train.PositionSwitch:TriggerInput("MotorState",-1.0 + 2.0*math.max(0,V)) end, + ["SDRK_Shunt"] = function(V) SDRK_Shunt = V end, + ["SDRK_Coil"] = function(V) Train.RheostatController:TriggerInput("MotorCoilState",SDRK_Shunt*math.min(1,math.max(0,V))*(-1.0 + 2.0*Train.RR.Value)) end, + ["SDRK"] = function(V) Train.RheostatController:TriggerInput("MotorState",V) end, + + ["XR3.2"] = function(V) Train.PowerSupply:TriggerInput("XR3.2",V) end, + ["XR3.3"] = function(V) Train.PowerSupply:TriggerInput("XR3.3",V) end, + ["XR3.4"] = function(V) end, --Train.PowerSupply:TriggerInput("XR3.4",V) end, + ["XR3.6"] = function(V) end, --Train.PowerSupply:TriggerInput("XR3.6",V) end, + ["XR3.7"] = function(V) end, --Train.PowerSupply:TriggerInput("XR3.7",V) end, + ["XT3.1"] = function(V) Train.PowerSupply:TriggerInput("XT3.1",Train.Battery.Voltage*V) end, + + ["ReverserForward"] = function(V) Train.RKR:TriggerInput("Open",V) end, + ["ReverserBackward"] = function(V) Train.RKR:TriggerInput("Close",V) end, + } + --local S = Train.InternalCircuits.SolveEzh3(Train,self.Triggers) + --Train.KSH1:TriggerInput("Set",KSH1) + --Train.KSH2:TriggerInput("Set",KSH2) + + if self.TrainSolver == "Ezh3" then + Train.InternalCircuits.SolveEzh3(Train,self.Triggers) + else + Train.InternalCircuits.SolveEma508(Train,self.Triggers) + end + end +end + +function TRAIN_SYSTEM:SolveThyristorController(Train,dT) + -- General state + local Active = ((Train.KSB1.Value > 0) or (Train.KSB2.Value > 0)) and (Train.LK2.Value == 1.0)-- and Train.RSU.Value == 0 + local I = (math.abs(Train.Electric.I13) + math.abs(Train.Electric.I24))/2 + --local I = math.abs(Train.Electric.I13 + Train.Electric.I24)/2 + --print(Train.RSU.Value,Active,Train.TR1.Value) + -- Controllers resistance + local Resistance = 0.036 + + local rnd = 70+math.random()*(10) + -- Update RV controller signal + -- Update thyristor controller signal + if self.ThyristorControllerPower == 0 then + self.ThyristorTimeout = CurTime() + self.PrepareElectric = CurTime() + self.ThyristorState = 0.00 + elseif not Active then + if Train.LK2.Value == 0.0 then + self.ThyristorTimeout = CurTime() + self.PrepareElectric = CurTime() + self.ThyristorState = 0.00 + end + else + local T = 180.0 + + --80.0*self.ThyristorState*(1-Train:ReadTrainWire(2)) + + (100.0*Train.Pneumatic.WeightLoadRatio+80.0)*Train:ReadTrainWire(2) + -- Generate control signal + local dC = math.min(math.abs(T-I),50) + if self.PrepareElectric then + self.ThyristorState = 1 + if I > T*0.2 then + self.PrepareElectric = false + self.ThyristorState = 1-math.max(0,math.min(1,((Train.Engines.Speed-50)/32))^0.8)*0.75 + end + elseif not self.ThyristorDone then + if I= X1) and (TargetField < X2) then + local T = (TargetField-X1)/(X2-X1) + Resistance = Y1 + (Y2-Y1)*T + Found = true + end + end + end + -- Allow or deny using manual brakes + --Train.ThyristorBU5_6:TriggerInput("Set",not self.PrepareElectric and self.ThyristorState > 0.90) + Train.ThyristorBU5_6:TriggerInput("Set",(not self.PrepareElectric or CurTime()-self.PrepareElectric > 0.8) and self.ThyristorState > 0.95 and self.ThyristorControllerPower > 0) + -- Set resistance + self.ThyristorResistance = Resistance + 1e9 * (Active and 0 or 1) +end + + + +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:SolvePowerCircuits(Train,dT,firstIter) + if not self.ResistorBlocksInit then + self.ResistorBlocksInit = true + -- Load resistor blocks + self.Train:LoadSystem("ResistorBlocks","Gen_Res_710") + end + if firstIter then Train.ResistorBlocks.InitializeResistances_81_710(Train) end + self.ExtraResistanceLK5 = Train.KF_47A["L2-L4" ]*(1-Train.LK5.Value) + self.ExtraResistanceLK2 = Train.KF_47A["L12-L13"]*(1-Train.LK2.Value) + + if Train.PositionSwitch.SelectedPosition == 1 then -- PS + self.R1 = Train.ResistorBlocks.R1C1(Train) + self.R2 = Train.ResistorBlocks.R2C1(Train) + self.R3 = 0.0 + elseif Train.PositionSwitch.SelectedPosition == 2 then -- PP + self.R1 = Train.ResistorBlocks.R1C2(Train) + self.R2 = Train.ResistorBlocks.R2C2(Train) + self.R3 = 0.0 + elseif Train.PositionSwitch.SelectedPosition >= 3 then -- PT + self.R1 = Train.ResistorBlocks.R1C1(Train) + self.R2 = Train.ResistorBlocks.R2C1(Train) + self.R3 = Train.ResistorBlocks.R3(Train) + end + -- Apply LK3, LK4 contactors + self.R1 = self.R1 + 1e9*(1 - Train.LK3.Value) + self.R2 = self.R2 + 1e9*(1 - Train.LK4.Value) + + -- Shunt resistance + self.Rs1 = Train.ResistorBlocks.S1(Train) + 1e9*(1 - Train.KSH1.Value) + self.Rs2 = Train.ResistorBlocks.S2(Train) + 1e9*(1 - Train.KSH2.Value) + + -- Thyristor contrller + if self.ThyristorController then + self.Rs1 = ((self.ThyristorResistance^-1) + (self.Rs1^-1))^-1 + self.Rs2 = ((self.ThyristorResistance^-1) + (self.Rs2^-1))^-1 + end + + -- Calculate total resistance of engines winding + local RwAnchor = Train.Engines.Rwa*2 -- Double because each set includes two engines + local RwStator = Train.Engines.Rws*2 + -- Total resistance of the stator + shunt + self.Rstator13 = (RwStator^-1 + self.Rs1^-1)^-1 + self.Rstator24 = (RwStator^-1 + self.Rs2^-1)^-1 + -- Total resistance of entire motor + self.Ranchor13 = RwAnchor + self.Ranchor24 = RwAnchor + + if Train.PositionSwitch.SelectedPosition == 1 then -- PS + self:SolvePS(Train) + elseif Train.PositionSwitch.SelectedPosition == 2 then -- PS + self:SolvePP(Train,Train.RheostatController.SelectedPosition >= 17) + else + self:SolvePT(Train) + end + + -- Calculate current through rheostats 1, 2 + self.IR1 = self.I13 + self.IR2 = self.I24 + + -- Calculate induction properties of the motor + self.I13SH = self.I13SH or self.I13 + self.I24SH = self.I24SH or self.I24 + + -- Time constant + local T13const1 = math.max(16.00,math.min(28.0,(self.R13^2) * 2.0)) -- R * L + local T24const1 = math.max(16.00,math.min(28.0,(self.R24^2) * 2.0)) -- R * L + + -- Total change + local dI13dT = T13const1 * (self.I13 - self.I13SH) * dT + local dI24dT = T24const1 * (self.I24 - self.I24SH) * dT + + -- Limit change and apply it + if dI13dT > 0 then dI13dT = math.min(self.I13 - self.I13SH,dI13dT) end + if dI13dT < 0 then dI13dT = math.max(self.I13 - self.I13SH,dI13dT) end + if dI24dT > 0 then dI24dT = math.min(self.I24 - self.I24SH,dI24dT) end + if dI24dT < 0 then dI24dT = math.max(self.I24 - self.I24SH,dI24dT) end + self.I13SH = self.I13SH + dI13dT + self.I24SH = self.I24SH + dI24dT + self.I13 = self.I13SH + self.I24 = self.I24SH + + -- Re-calculate total current and simulate infinite resistance in circuit + if Train.PositionSwitch.SelectedPosition == 1 then -- PS + self.I13 = self.I13 * (Train.LK3.Value * Train.LK4.Value * Train.LK1.Value) + self.I24 = self.I24 * (Train.LK3.Value * Train.LK4.Value * Train.LK1.Value) + + self.I24 = (self.I24 + self.I13)*0.5 + self.I13 = self.I24 + self.Itotal = self.I24 + elseif Train.PositionSwitch.SelectedPosition == 2 then -- PS + self.I13 = self.I13 * Train.LK3.Value * Train.LK1.Value + self.I24 = self.I24 * Train.LK4.Value * Train.LK1.Value + + self.Itotal = self.I13 + self.I24 + else -- PT + self.I13 = self.I13 * Train.LK3.Value*Train.LK4.Value + self.I24 = self.I24 * Train.LK4.Value*Train.LK3.Value + + self.Itotal = self.I13 + self.I24 + end + + -- Calculate extra information + self.Uanchor13 = self.I13 * self.Ranchor13 + self.Uanchor24 = self.I24 * self.Ranchor24 + + + + ---------------------------------------------------------------------------- + -- Calculate current through stator and shunt + self.Ustator13 = self.I13 * self.Rstator13 + self.Ustator24 = self.I24 * self.Rstator24 + + self.Ishunt13 = self.Ustator13 / self.Rs1 + self.Istator13 = self.Ustator13 / RwStator + self.Ishunt24 = self.Ustator24 / self.Rs2 + self.Istator24 = self.Ustator24 / RwStator + + if Train.PositionSwitch.SelectedPosition >= 3 then + local I1,I2 = self.Ishunt13,self.Ishunt24 + self.Ishunt13 = -I2 + self.Ishunt24 = -I1 + + I1,I2 = self.Istator13,self.Istator24 + self.Istator13 = -I2 + self.Istator24 = -I1 + end + + -- Calculate current through RT2 relay + self.IRT2 = math.abs(self.Itotal * Train.PositionSwitch["10_contactor"]) + + -- Sane checks + if self.R1 > 1e5 then self.IR1 = 0 end + if self.R2 > 1e5 then self.IR2 = 0 end + + -- Calculate power and heating + local K = 12.0*1e-5 + local H = (10.00+(15.00*Train.Engines.Speed/80.0))*1e-3 + self.P1 = (self.IR1^2)*self.R1 + self.P2 = (self.IR2^2)*self.R2 + self.T1 = (self.T1 + self.P1*K*dT - (self.T1-25)*H*dT) + self.T2 = (self.T2 + self.P2*K*dT - (self.T2-25)*H*dT) + self.Overheat1 = math.min(1-1e-12, + self.Overheat1 + math.max(0,(math.max(0,self.T1-750.0)/400.0)^2)*dT ) + self.Overheat2 = math.min(1-1e-12, + self.Overheat2 + math.max(0,(math.max(0,self.T2-750.0)/400.0)^2)*dT ) + + -- Energy consumption + self.ElectricEnergyUsed = self.ElectricEnergyUsed + math.max(0,self.EnergyChange)*dT + self.ElectricEnergyDissipated = self.ElectricEnergyDissipated + math.max(0,-self.EnergyChange)*dT + --print(self.EnergyChange) +end + + + + +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:SolvePS(Train) + -- Calculate total resistance of the entire series circuit + local Rtotal = self.Ranchor13 + self.Ranchor24 + self.Rstator13 + self.Rstator24 + + self.R1 + self.R2 + self.R3 + self.ExtraResistanceLK5 + local CircuitClosed = (self.Power750V*Train.LK1.Value > 0) and 1 or 0 + + -- Calculate total current + self.Utotal = (self.Power750V - Train.Engines.E13 - Train.Engines.E24)*Train.LK1.Value + self.Itotal = (self.Utotal / Rtotal)*CircuitClosed*(Train.BV and Train.BV.State or 1) + + -- Total resistance (for induction RL circuit) + self.R13 = Rtotal + self.R24 = Rtotal + + -- Calculate everything else + self.I13 = self.Itotal + self.I24 = self.Itotal + self.U13 = self.Utotal*(1/2) + self.U24 = self.Utotal*(1/2) + + -- Energy consumption + self.EnergyChange = math.abs((self.Itotal^2)*Rtotal) +end + +function TRAIN_SYSTEM:SolvePP(Train,inTransition) + -- Temporary hack for transition to parallel circuits + local extraR = 0.00 --inTransition and 0.909 or 0.00 + + -- Calculate total resistance of each branch + local R1 = self.Ranchor13 + self.Rstator13 + self.R1 + extraR + self.ExtraResistanceLK5 + local R2 = self.Ranchor24 + self.Rstator24 + self.R2 + extraR + self.ExtraResistanceLK5 + local R3 = 0 + local CircuitClosed = (self.Power750V*Train.LK1.Value > 0) and 1 or 0 + + -- Main circuit parameters + local V = self.Power750V*Train.LK1.Value + local E1 = Train.Engines.E13 + local E2 = Train.Engines.E24 + + -- Calculate current through engines 13, 24 + self.I13 = -((E1*R2 + E1*R3 - E2*R3 - R2*V)/(R1*R2 + R1*R3 + R2*R3))*CircuitClosed*(Train.BV and Train.BV.State or 1) + self.I24 = -((E2*R1 - E1*R3 + E2*R3 - R1*V)/(R1*R2 + R1*R3 + R2*R3))*CircuitClosed*(Train.BV and Train.BV.State or 1) + + -- Total resistance (for induction RL circuit) + self.R13 = R1 + self.R24 = R2 + + -- Calculate everything else + self.U13 = self.I13*R1 + self.U24 = self.I24*R2 + self.Utotal = (self.U13 + self.U24)/2 + self.Itotal = self.I13 + self.I24 + + -- Energy consumption + self.EnergyChange = math.abs((self.I13^2)*R1) + math.abs((self.I24^2)*R2) +end + +function TRAIN_SYSTEM:SolvePT(Train) + -- Winding resistances + local R1 = self.Ranchor13 + self.Rstator13 + local R2 = self.Ranchor24 + self.Rstator24 + -- Total resistance of the entire braking rheostat + local R3 = self.R1 + self.R2 + self.R3 + self.ExtraResistanceLK2 + + -- Main circuit parameters + local V = self.Power750V*Train.LK1.Value + local E1 = Train.Engines.E13 + local E2 = Train.Engines.E24 + + -- Calculate current through engines 13, 24 + self.I13 = -((E1*R2 + E1*R3 - E2*R3 - R2*V)/(R1*R2 + R1*R3 + R2*R3))*(Train.BV and Train.BV.State or 1) + self.I24 = -((E2*R1 - E1*R3 + E2*R3 - R1*V)/(R1*R2 + R1*R3 + R2*R3))*(Train.BV and Train.BV.State or 1) + -- Total resistance (for induction RL circuit) + self.R13 = R3+((R1^-1 + R2^-1)^-1) + self.R24 = R3+((R1^-1 + R2^-1)^-1) + -- Calculate everything else + self.U13 = self.I13*R1 + self.U24 = self.I24*R2 + self.Utotal = (self.U13 + self.U24)/2 + self.Itotal = self.I13 + self.I24 + + -- Energy consumption + self.EnergyChange = -math.abs(((0.5*self.Itotal)^2)*self.R13) +end diff --git a/lua/metrostroi/systems/sys_failsim.lua b/lua/metrostroi/systems/sys_failsim.lua new file mode 100644 index 0000000..203657c --- /dev/null +++ b/lua/metrostroi/systems/sys_failsim.lua @@ -0,0 +1,41 @@ +-------------------------------------------------------------------------------- +-- Failure simulator interface +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("FailSim") +TRAIN_SYSTEM.RunEverywhere = true + +function TRAIN_SYSTEM:Initialize() + +end + +function TRAIN_SYSTEM:Outputs() + return {"TrainWireFail"} +end + +function TRAIN_SYSTEM:Inputs() + return { "Status", "Fail", "Reset", "TrainWires","ResetTW" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Status" then + if TURBOSTROI then FailSim.Report(nil,"failures") end + elseif name == "Reset" then + if TURBOSTROI then FailSim.Reset() end + elseif name == "Fail" then + if TURBOSTROI then + if math.random() > 0.95 then + local TW = math.floor(math.random(1,self.TrainWires)) + print("Generated random train line failure:") + print("[!FAIL!] Outside power in train wire "..TW) + self.TrainWireFail = TW + else FailSim.RandomFailure() end + end + elseif name == "TrainWires" then + self.TrainWires = value + elseif name == "ResetTW" then + self.TrainWireFail = 0 + end +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_gen_res_702c.lua b/lua/metrostroi/systems/sys_gen_res_702c.lua new file mode 100644 index 0000000..46df687 --- /dev/null +++ b/lua/metrostroi/systems/sys_gen_res_702c.lua @@ -0,0 +1,206 @@ +-------------------------------------------------------------------------------- +-- Resistor arrays calculations +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +--[[ +Rxx S P T P1 P2 S1 S2 S(XT) P(T) M(X) +R01 = 4.639 0.000 4.639 0.000 0.000 0.188 0.188 1.000 1.000 0.000 +R02 = 4.639 0.000 4.639 0.000 0.000 0.188 0.188 0.000 1.000 0.000 +R03 = 2.434 0.000 3.205 0.000 0.000 0.188 0.188 0.000 1.000 0.000 +R04 = 1.662 0.000 2.433 0.000 0.000 0.188 0.188 0.000 1.000 0.000 +R05 = 1.329 0.000 2.100 0.000 0.000 0.188 0.188 0.000 1.000 0.000 +R06 = 1.066 0.000 1.837 0.000 0.000 0.188 0.188 0.000 1.000 0.000 +R07 = 0.816 0.000 1.587 0.000 0.000 0.188 0.188 0.000 1.000 0.000 +R08 = 0.608 0.000 1.379 0.000 0.000 0.188 0.188 0.000 1.000 0.000 +R09 = 0.387 0.000 1.158 0.000 0.000 0.188 0.188 0.000 1.000 0.000 +R10 = 0.190 0.000 0.961 0.000 0.000 0.188 0.188 0.000 1.000 0.000 +R11 = 0.000 0.000 0.771 0.000 0.000 0.188 0.188 0.000 1.000 0.000 +R12 = 0.000 0.000 0.771 0.000 0.000 0.188 0.188 1.000 1.000 0.000 +R13 = 0.000 0.000 0.771 0.000 0.000 0.019 0.019 1.000 0.000 0.000 + +R14 = 0.000 1.993 0.593 0.994 0.999 0.019 0.019 0.000 0.000 0.000 +R15 = 0.000 1.329 0.548 0.661 0.668 0.188 0.188 0.000 0.000 0.000 +R16 = 0.000 0.816 0.495 0.411 0.405 0.188 0.188 0.000 0.000 0.000 +R17 = 0.000 0.387 0.427 0.190 0.197 0.188 0.188 0.000 0.000 0.000 +R18 = 0.000 0.000 0.328 0.000 0.000 0.188 0.188 0.000 0.000 0.000 +R19 = 0.000 0.000 0.328 0.000 0.000 0.188 0.188 1.000 0.000 0.000 +R20 = 0.000 0.000 0.328 0.000 0.000 0.019 0.019 1.000 0.000 0.000 +]]-- + +-------------------------------------------------------------------------------- +-- Resistor arrays calculations - auto-generated by gen.lua +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("Gen_Res_702c") + +local R = {} + +local P14_1 +local P1_2 +local P2_3 +local P3_4 +local P4_11 +local P13_11 +local P12_11 +local P9_10 +local P8_9 +local P7_8 +local P6_7 +local P10_13 + +local P20_21 +local P21_22 +local P23_24 +local P24_25 + +function TRAIN_SYSTEM.InitializeResistances_81_702(Train) + P14_1 = Train.KF_6A["P14-P1"] + P1_2 = Train.KF_6A["P1-P2"] + P2_3 = Train.KF_6A["P2-P3"] + P3_4 = Train.KF_6A["P3-P4"] + P4_11 = Train.KF_6A["P4-P11"] + P13_11 = Train.KF_6A["P13-P11"] + P10_13 = Train.KF_6A["P10-P13"] + P12_11 = Train.KF_6A["P12-P11"] + P9_10 = Train.KF_6A["P9-P10"] + P8_9 = Train.KF_6A["P8-P9"] + P7_8 = Train.KF_6A["P7-P8"] + P6_7 = Train.KF_6A["P6-P7"] + + P20_21 = Train.KF_7A["P20-P21"] + P21_22 = Train.KF_7A["P21-P22"] + P23_24 = Train.KF_7A["P23-P24"] + P24_25 = Train.KF_7A["P24-P25"] +end + + +function TRAIN_SYSTEM.R1(Train) + local RK = Train.RheostatController + local T = Train.PositionSwitch + local Poff = 1e-9+1e9*(1-RK.P1) + local Moff = 1e-9+1e9*(1-Train.M.Value) + local Pon = 1e-9+1e9*(RK.P1) + local Sh = 1e-9+1e9*(1-Train.SH1.Value) + + R[1] = ((RK[2])^-1 + (P1_2)^-1)^-1 + R[2] = ((RK[4])^-1 + (P2_3+R[1])^-1)^-1 + R[3] = ((RK[6])^-1 + (P3_4+R[2])^-1)^-1 + R[4] = ((RK[10]+Pon+Moff)^-1 + (RK[8])^-1)^-1 + R[5] = ((P12_11)^-1 + (T[12])^-1)^-1 + R[6] = ((P13_11)^-1 + (RK[11]+R[5])^-1)^-1 + R[7] = ((RK[13])^-1 + (P10_13)^-1)^-1 + R[8] = ((RK[7])^-1 + (RK[9]+Pon+Moff)^-1)^-1 + R[9] = ((RK[1])^-1 + (P6_7)^-1)^-1 + R[10] = ((RK[3])^-1 + (P7_8+R[9])^-1)^-1 + R[11] = ((P8_9+R[10])^-1 + (RK[5])^-1)^-1 + R[12] = ((P9_10+R[11])^-1 + (R[8])^-1)^-1 + R[13] = ((P4_11+R[3])^-1 + (R[4])^-1)^-1 + R[14] = ((Pon)*(R[13])+(Pon)*(Poff+T[10]+P14_1)+(R[13])*(Poff+T[10]+P14_1))/(Pon) + R[15] = ((Pon)*(R[13])+(Pon)*(Poff+T[10]+P14_1)+(R[13])*(Poff+T[10]+P14_1))/(R[13]) + R[16] = ((Pon)*(R[13])+(Pon)*(Poff+T[10]+P14_1)+(R[13])*(Poff+T[10]+P14_1))/(Poff+T[10]+P14_1) + R[17] = ((Poff)^-1 + (R[16])^-1)^-1 + R[18] = ((R[12])*(Poff)+(R[12])*(R[7]+R[6])+(Poff)*(R[7]+R[6]))/(R[12]) + R[19] = ((R[12])*(Poff)+(R[12])*(R[7]+R[6])+(Poff)*(R[7]+R[6]))/(Poff) + R[20] = ((R[12])*(Poff)+(R[12])*(R[7]+R[6])+(Poff)*(R[7]+R[6]))/(R[7]+R[6]) + R[21] = ((R[20])^-1 + (Pon)^-1)^-1 + R[22] = ((R[19])^-1 + (R[14])^-1)^-1 + R[23] = ((R[21])*(R[22])+(R[21])*(R[15])+(R[22])*(R[15]))/(R[21]) + R[24] = ((R[21])*(R[22])+(R[21])*(R[15])+(R[22])*(R[15]))/(R[22]) + R[25] = ((R[21])*(R[22])+(R[21])*(R[15])+(R[22])*(R[15]))/(R[15]) + R[26] = ((R[17])^-1 + (R[23])^-1)^-1 + R[27] = ((R[25])^-1 + (R[18])^-1)^-1 + R[28] = ((R[27])*(R[26])+(R[27])*(Moff)+(R[26])*(Moff))/(R[27]) + R[29] = ((R[27])*(R[26])+(R[27])*(Moff)+(R[26])*(Moff))/(R[26]) + R[30] = ((R[27])*(R[26])+(R[27])*(Moff)+(R[26])*(Moff))/(Moff) + R[31] = ((R[30])^-1 + (R[24])^-1)^-1 + R[32] = ((R[31])^-1 + (R[29]+R[28])^-1)^-1 + return R[32] +end + +function TRAIN_SYSTEM.R2C1(Train) + local RK = Train.RheostatController + local T = Train.PositionSwitch + local Poff = 1e-9+1e9*(1-RK.P1) + local Moff = 1e-9+1e9*(1-Train.M.Value) + local Pon = 1e-9+1e9*(RK.P1) + local Sh = 1e-9+1e9*(1-Train.SH1.Value) + + R[1] = ((RK[2])^-1 + (P1_2)^-1)^-1 + R[2] = ((RK[4])^-1 + (P2_3+R[1])^-1)^-1 + R[3] = ((RK[6])^-1 + (P3_4+R[2])^-1)^-1 + R[4] = ((RK[10]+Pon+Moff)^-1 + (RK[8])^-1)^-1 + R[5] = ((P12_11)^-1 + (T[12])^-1)^-1 + R[6] = ((P13_11)^-1 + (RK[11]+R[5])^-1)^-1 + R[7] = ((RK[13])^-1 + (P10_13)^-1)^-1 + R[8] = ((RK[7])^-1 + (RK[9]+Pon+Moff)^-1)^-1 + R[9] = ((RK[1])^-1 + (P6_7)^-1)^-1 + R[10] = ((Poff+Pon)^-1 + (P4_11+R[3])^-1)^-1 + R[11] = ((R[10])^-1 + (R[4])^-1)^-1 + R[12] = ((Pon+Poff)^-1 + (R[8])^-1)^-1 + R[13] = ((R[9]+P7_8)^-1 + (RK[3])^-1)^-1 + R[14] = ((P8_9+R[13])^-1 + (RK[5])^-1)^-1 + R[15] = ((R[12])^-1 + (R[14]+P9_10)^-1)^-1 + R[16] = ((R[11])*(R[6])+(R[11])*(Moff)+(R[6])*(Moff))/(R[11]) + R[17] = ((R[11])*(R[6])+(R[11])*(Moff)+(R[6])*(Moff))/(R[6]) + R[18] = ((R[11])*(R[6])+(R[11])*(Moff)+(R[6])*(Moff))/(Moff) + R[19] = ((R[18])^-1 + (R[7]+R[15]+Poff+T[10]+P14_1)^-1)^-1 + R[20] = ((R[19])^-1 + (R[17]+R[16])^-1)^-1 + return R[20] +end + +function TRAIN_SYSTEM.R2C2(Train) + local RK = Train.RheostatController + local T = Train.PositionSwitch + local Poff = 1e-9+1e9*(1-RK.P1) + local Moff = 1e-9+1e9*(1-Train.M.Value) + local Pon = 1e-9+1e9*(RK.P1) + local Sh = 1e-9+1e9*(1-Train.SH1.Value) + + R[1] = ((RK[2])^-1 + (P1_2)^-1)^-1 + R[2] = ((RK[4])^-1 + (P2_3+R[1])^-1)^-1 + R[3] = ((RK[6])^-1 + (P3_4+R[2])^-1)^-1 + R[4] = ((RK[10]+Pon+Moff)^-1 + (RK[8])^-1)^-1 + R[5] = ((P12_11)^-1 + (T[12])^-1)^-1 + R[6] = ((P13_11)^-1 + (RK[11]+R[5])^-1)^-1 + R[7] = ((RK[13])^-1 + (P10_13)^-1)^-1 + R[8] = ((R[4])^-1 + (P4_11+R[3])^-1)^-1 + R[9] = ((RK[7])^-1 + (Pon+Poff)^-1)^-1 + R[10] = ((R[9])^-1 + (RK[9]+Pon+Moff)^-1)^-1 + R[11] = ((RK[1])^-1 + (P6_7)^-1)^-1 + R[12] = ((R[11]+P7_8)^-1 + (RK[3])^-1)^-1 + R[13] = ((R[12]+P8_9)^-1 + (RK[5])^-1)^-1 + R[14] = ((R[10])^-1 + (R[13]+P9_10)^-1)^-1 + R[15] = ((R[8])^-1 + (Poff+Pon)^-1)^-1 + R[16] = ((Poff+T[10]+P14_1+R[15])*(Moff)+(Poff+T[10]+P14_1+R[15])*(R[6]+R[7])+(Moff)*(R[6]+R[7]))/(Poff+T[10]+P14_1+R[15]) + R[17] = ((Poff+T[10]+P14_1+R[15])*(Moff)+(Poff+T[10]+P14_1+R[15])*(R[6]+R[7])+(Moff)*(R[6]+R[7]))/(Moff) + R[18] = ((Poff+T[10]+P14_1+R[15])*(Moff)+(Poff+T[10]+P14_1+R[15])*(R[6]+R[7])+(Moff)*(R[6]+R[7]))/(R[6]+R[7]) + R[19] = ((R[17])^-1 + (R[16]+R[18])^-1)^-1 + R[20] = ((R[19])^-1 + (R[14])^-1)^-1 + return R[20] +end + +function TRAIN_SYSTEM.S1(Train) + local RK = Train.RheostatController + local T = Train.PositionSwitch + local Poff = 1e-9+1e9*(1-RK.P1) + local Moff = 1e-9+1e9*(1-Train.M.Value) + local Pon = 1e-9+1e9*(RK.P1) + local Sh = 1e-9+1e9*(1-Train.SH1.Value) + + R[1] = ((P21_22)^-1 + (RK[12])^-1)^-1 + return R[1]+Sh+P20_21 +end + +function TRAIN_SYSTEM.S2(Train) + local RK = Train.RheostatController + local T = Train.PositionSwitch + local Poff = 1e-9+1e9*(1-RK.P1) + local Moff = 1e-9+1e9*(1-Train.M.Value) + local Pon = 1e-9+1e9*(RK.P1) + local Sh = 1e-9+1e9*(1-Train.SH1.Value) + + R[1] = ((P24_25)^-1 + (RK[12])^-1)^-1 + return R[1]+Sh+P23_24 +end + diff --git a/lua/metrostroi/systems/sys_gen_res_702o.lua b/lua/metrostroi/systems/sys_gen_res_702o.lua new file mode 100644 index 0000000..44cfd94 --- /dev/null +++ b/lua/metrostroi/systems/sys_gen_res_702o.lua @@ -0,0 +1,203 @@ +-------------------------------------------------------------------------------- +-- Resistor arrays calculations +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +--[[ +Rxx S P T P1 P2 S1 S2 S(XT) P(T) M(X) +R01 = 3.851 0.000 3.851 0.000 0.000 0.188 0.188 1.000 1.000 0.000 +R02 = 3.091 0.000 3.851 0.000 0.000 0.188 0.188 0.000 1.000 0.000 +R03 = 2.211 0.000 2.971 0.000 0.000 0.188 0.188 0.000 1.000 0.000 +R04 = 1.770 0.000 2.530 0.000 0.000 0.188 0.188 0.000 1.000 0.000 +R05 = 1.329 0.000 2.089 0.000 0.000 0.188 0.188 0.000 1.000 0.000 +R06 = 1.066 0.000 1.826 0.000 0.000 0.188 0.188 0.000 1.000 0.000 +R07 = 0.816 0.000 1.576 0.000 0.000 0.188 0.188 0.000 1.000 0.000 +R08 = 0.608 0.000 1.368 0.000 0.000 0.188 0.188 0.000 1.000 0.000 +R09 = 0.387 0.000 1.147 0.000 0.000 0.188 0.188 0.000 1.000 0.000 +R10 = 0.190 0.000 0.950 0.000 0.000 0.188 0.188 0.000 1.000 0.000 +R11 = 0.000 0.000 0.760 0.000 0.000 0.188 0.188 0.000 1.000 0.000 +R12 = 0.000 0.000 0.760 0.000 0.000 0.188 0.188 1.000 1.000 0.000 +R13 = 0.000 0.000 0.760 0.000 0.000 0.019 0.019 1.000 0.000 0.000 + +R14 = 0.000 2.211 0.597 1.102 1.109 0.019 0.019 0.000 0.000 0.000 +R15 = 0.000 1.329 0.543 0.661 0.668 0.188 0.188 0.000 0.000 0.000 +R16 = 0.000 0.816 0.491 0.411 0.405 0.188 0.188 0.000 0.000 0.000 +R17 = 0.000 0.387 0.424 0.190 0.197 0.188 0.188 0.000 0.000 0.000 +R18 = 0.000 0.000 0.326 0.000 0.000 0.188 0.188 0.000 0.000 0.000 +R19 = 0.000 0.000 0.326 0.000 0.000 0.188 0.188 1.000 0.000 0.000 +R20 = 0.000 0.000 0.326 0.000 0.000 0.019 0.019 1.000 0.000 0.000 +]]-- + +-------------------------------------------------------------------------------- +-- Resistor arrays calculations - auto-generated by gen.lua +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("Gen_Res_702o") + +local R = {} + +local P14_1 +local P1_2 +local P2_3 +local P3_4 +local P4_11 +local P13_11 +local P12_11 +local P9_10 +local P8_9 +local P7_8 +local P6_7 +local P10_13 + +local P20_21 +local P21_22 +local P23_24 +local P24_25 + +function TRAIN_SYSTEM.InitializeResistances_81_702(Train) + P14_1 = Train.KF_6A["P14-P1"] + P1_2 = Train.KF_6A["P1-P2"] + P2_3 = Train.KF_6A["P2-P3"] + P3_4 = Train.KF_6A["P3-P4"] + P4_11 = Train.KF_6A["P4-P11"] + P13_11 = Train.KF_6A["P13-P11"] + P10_13 = Train.KF_6A["P10-P13"] + P12_11 = Train.KF_6A["P12-P11"] + P9_10 = Train.KF_6A["P9-P10"] + P8_9 = Train.KF_6A["P8-P9"] + P7_8 = Train.KF_6A["P7-P8"] + P6_7 = Train.KF_6A["P6-P7"] + + P20_21 = Train.KF_7A["P20-P21"] + P21_22 = Train.KF_7A["P21-P22"] + P23_24 = Train.KF_7A["P23-P24"] + P24_25 = Train.KF_7A["P24-P25"] +end + + +function TRAIN_SYSTEM.R1(Train) + local RK = Train.RheostatController + local T = Train.PositionSwitch + local Poff = 1e-9+1e9*(1-RK.P1) + local Moff = 1e-9+1e9*(1-Train.M.Value) + local Pon = 1e-9+1e9*(RK.P1) + local Sh = 1e-9+1e9*(1-Train.SH1.Value) + + R[1] = ((RK[2])^-1 + (P1_2)^-1)^-1 + R[2] = ((RK[4])^-1 + (P2_3+R[1])^-1)^-1 + R[3] = ((RK[6])^-1 + (P3_4+R[2])^-1)^-1 + R[4] = ((RK[10]+Pon+Moff)^-1 + (RK[8])^-1)^-1 + R[5] = ((P13_11)^-1 + (RK[11]+T[12])^-1)^-1 + R[6] = ((RK[13])^-1 + (P10_13)^-1)^-1 + R[7] = ((P4_11+R[3])^-1 + (R[4])^-1)^-1 + R[8] = ((RK[7])^-1 + (RK[9]+Pon+Moff)^-1)^-1 + R[9] = ((RK[1])^-1 + (P6_7)^-1)^-1 + R[10] = ((R[9]+P7_8)^-1 + (RK[3])^-1)^-1 + R[11] = ((P8_9+R[10])^-1 + (RK[5])^-1)^-1 + R[12] = ((R[8])^-1 + (P9_10+R[11])^-1)^-1 + R[13] = ((Pon)*(Poff+T[10]+P14_1)+(Pon)*(R[7])+(Poff+T[10]+P14_1)*(R[7]))/(Pon) + R[14] = ((Pon)*(Poff+T[10]+P14_1)+(Pon)*(R[7])+(Poff+T[10]+P14_1)*(R[7]))/(Poff+T[10]+P14_1) + R[15] = ((Pon)*(Poff+T[10]+P14_1)+(Pon)*(R[7])+(Poff+T[10]+P14_1)*(R[7]))/(R[7]) + R[16] = ((Poff)^-1 + (R[14])^-1)^-1 + R[17] = ((R[5]+R[6])*(Poff)+(R[5]+R[6])*(R[12])+(Poff)*(R[12]))/(R[5]+R[6]) + R[18] = ((R[5]+R[6])*(Poff)+(R[5]+R[6])*(R[12])+(Poff)*(R[12]))/(Poff) + R[19] = ((R[5]+R[6])*(Poff)+(R[5]+R[6])*(R[12])+(Poff)*(R[12]))/(R[12]) + R[20] = ((R[17])^-1 + (Pon)^-1)^-1 + R[21] = ((R[13])^-1 + (R[18])^-1)^-1 + R[22] = ((R[15])*(R[20])+(R[15])*(R[21])+(R[20])*(R[21]))/(R[15]) + R[23] = ((R[15])*(R[20])+(R[15])*(R[21])+(R[20])*(R[21]))/(R[20]) + R[24] = ((R[15])*(R[20])+(R[15])*(R[21])+(R[20])*(R[21]))/(R[21]) + R[25] = ((R[23])^-1 + (R[16])^-1)^-1 + R[26] = ((R[19])^-1 + (R[22])^-1)^-1 + R[27] = ((R[25])*(R[26])+(R[25])*(Moff)+(R[26])*(Moff))/(R[25]) + R[28] = ((R[25])*(R[26])+(R[25])*(Moff)+(R[26])*(Moff))/(R[26]) + R[29] = ((R[25])*(R[26])+(R[25])*(Moff)+(R[26])*(Moff))/(Moff) + R[30] = ((R[24])^-1 + (R[29])^-1)^-1 + R[31] = ((R[30])^-1 + (R[28]+R[27])^-1)^-1 + return R[31] +end + +function TRAIN_SYSTEM.R2C1(Train) + local RK = Train.RheostatController + local T = Train.PositionSwitch + local Poff = 1e-9+1e9*(1-RK.P1) + local Moff = 1e-9+1e9*(1-Train.M.Value) + local Pon = 1e-9+1e9*(RK.P1) + local Sh = 1e-9+1e9*(1-Train.SH1.Value) + + R[1] = ((RK[2])^-1 + (P1_2)^-1)^-1 + R[2] = ((RK[4])^-1 + (P2_3+R[1])^-1)^-1 + R[3] = ((RK[6])^-1 + (P3_4+R[2])^-1)^-1 + R[4] = ((RK[10]+Pon+Moff)^-1 + (RK[8])^-1)^-1 + R[5] = ((P13_11)^-1 + (RK[11]+T[12])^-1)^-1 + R[6] = ((RK[13])^-1 + (P10_13)^-1)^-1 + R[7] = ((Poff+Pon)^-1 + (R[4])^-1)^-1 + R[8] = ((RK[7])^-1 + (Pon+Poff)^-1)^-1 + R[9] = ((R[8])^-1 + (RK[9]+Pon+Moff)^-1)^-1 + R[10] = ((RK[1])^-1 + (P6_7)^-1)^-1 + R[11] = ((R[10]+P7_8)^-1 + (RK[3])^-1)^-1 + R[12] = ((R[11]+P8_9)^-1 + (RK[5])^-1)^-1 + R[13] = ((R[9])^-1 + (R[12]+P9_10)^-1)^-1 + R[14] = ((R[7])^-1 + (P4_11+R[3])^-1)^-1 + R[15] = ((Moff)*(R[5])+(Moff)*(R[14])+(R[5])*(R[14]))/(Moff) + R[16] = ((Moff)*(R[5])+(Moff)*(R[14])+(R[5])*(R[14]))/(R[5]) + R[17] = ((Moff)*(R[5])+(Moff)*(R[14])+(R[5])*(R[14]))/(R[14]) + R[18] = ((R[15])^-1 + (R[16]+R[17])^-1)^-1 + R[19] = ((R[18])^-1 + (Poff+T[10]+P14_1+R[13]+R[6])^-1)^-1 + return R[19] +end + +function TRAIN_SYSTEM.R2C2(Train) + local RK = Train.RheostatController + local T = Train.PositionSwitch + local Poff = 1e-9+1e9*(1-RK.P1) + local Moff = 1e-9+1e9*(1-Train.M.Value) + local Pon = 1e-9+1e9*(RK.P1) + local Sh = 1e-9+1e9*(1-Train.SH1.Value) + + R[1] = ((RK[2])^-1 + (P1_2)^-1)^-1 + R[2] = ((RK[4])^-1 + (P2_3+R[1])^-1)^-1 + R[3] = ((RK[6])^-1 + (P3_4+R[2])^-1)^-1 + R[4] = ((RK[10]+Pon+Moff)^-1 + (RK[8])^-1)^-1 + R[5] = ((P13_11)^-1 + (RK[11]+T[12])^-1)^-1 + R[6] = ((RK[13])^-1 + (P10_13)^-1)^-1 + R[7] = ((Poff+Pon)^-1 + (R[4])^-1)^-1 + R[8] = ((RK[7])^-1 + (Pon+Poff)^-1)^-1 + R[9] = ((R[8])^-1 + (RK[9]+Pon+Moff)^-1)^-1 + R[10] = ((R[7])^-1 + (P4_11+R[3])^-1)^-1 + R[11] = ((RK[1])^-1 + (P6_7)^-1)^-1 + R[12] = ((R[11]+P7_8)^-1 + (RK[3])^-1)^-1 + R[13] = ((R[12]+P8_9)^-1 + (RK[5])^-1)^-1 + R[14] = ((R[9])^-1 + (R[13]+P9_10)^-1)^-1 + R[15] = ((Moff)*(Poff+T[10]+P14_1+R[10])+(Moff)*(R[5]+R[6])+(Poff+T[10]+P14_1+R[10])*(R[5]+R[6]))/(Moff) + R[16] = ((Moff)*(Poff+T[10]+P14_1+R[10])+(Moff)*(R[5]+R[6])+(Poff+T[10]+P14_1+R[10])*(R[5]+R[6]))/(Poff+T[10]+P14_1+R[10]) + R[17] = ((Moff)*(Poff+T[10]+P14_1+R[10])+(Moff)*(R[5]+R[6])+(Poff+T[10]+P14_1+R[10])*(R[5]+R[6]))/(R[5]+R[6]) + R[18] = ((R[15])^-1 + (R[16]+R[17])^-1)^-1 + R[19] = ((R[18])^-1 + (R[14])^-1)^-1 + return R[19] +end + +function TRAIN_SYSTEM.S1(Train) + local RK = Train.RheostatController + local T = Train.PositionSwitch + local Poff = 1e-9+1e9*(1-RK.P1) + local Moff = 1e-9+1e9*(1-Train.M.Value) + local Pon = 1e-9+1e9*(RK.P1) + local Sh = 1e-9+1e9*(1-Train.SH1.Value) + + R[1] = ((P21_22)^-1 + (RK[12])^-1)^-1 + return R[1]+Sh+P20_21 +end + +function TRAIN_SYSTEM.S2(Train) + local RK = Train.RheostatController + local T = Train.PositionSwitch + local Poff = 1e-9+1e9*(1-RK.P1) + local Moff = 1e-9+1e9*(1-Train.M.Value) + local Pon = 1e-9+1e9*(RK.P1) + local Sh = 1e-9+1e9*(1-Train.SH1.Value) + + R[1] = ((P24_25)^-1 + (RK[12])^-1)^-1 + return R[1]+Sh+P23_24 +end + diff --git a/lua/metrostroi/systems/sys_gen_res_703.lua b/lua/metrostroi/systems/sys_gen_res_703.lua new file mode 100644 index 0000000..6f34883 --- /dev/null +++ b/lua/metrostroi/systems/sys_gen_res_703.lua @@ -0,0 +1,390 @@ +-------------------------------------------------------------------------------- +-- Resistor arrays calculations +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +--[[ +Rxx PS PP1 PP2 PT1 PT2 PS1 PPS2 PT1-1 PT1-2 PT2-1 PT2-2 S1 S2 +R01 = 4.963 0.000 0.000 3.331 0.203 2.873 2.090 1.665 1.666 0.000 0.203 0.000 0.000 +R02 = 4.963 0.000 0.000 3.331 0.203 2.873 2.090 1.665 1.666 0.000 0.203 0.011 0.011 +R03 = 3.959 0.000 0.000 3.331 0.203 1.869 2.090 1.665 1.666 0.000 0.203 0.046 0.046 +R04 = 3.169 0.000 0.000 3.331 0.203 1.869 1.300 1.665 1.666 0.000 0.203 0.110 0.110 +R05 = 2.599 0.000 0.000 3.331 0.203 1.299 1.300 1.665 1.666 0.000 0.203 0.392 0.392 +R06 = 2.245 0.000 0.000 3.201 0.203 0.945 1.300 1.535 1.666 0.000 0.203 0.392 0.392 +R07 = 1.891 0.130 0.000 3.071 0.310 0.945 0.946 1.535 1.536 0.107 0.203 0.392 0.392 +R08 = 1.707 0.130 0.130 2.887 0.359 0.945 0.762 1.535 1.352 0.107 0.252 0.392 0.392 +R09 = 1.523 0.130 0.314 2.703 0.410 0.761 0.762 1.351 1.352 0.107 0.303 0.392 0.392 +R10 = 1.299 0.314 0.314 2.479 0.508 0.537 0.762 1.127 1.352 0.205 0.303 0.392 0.392 +R11 = 1.075 0.538 0.314 2.255 0.585 0.537 0.538 1.127 1.128 0.281 0.303 0.392 0.392 +R12 = 0.851 0.538 0.538 2.031 0.629 0.537 0.314 1.127 0.904 0.281 0.348 0.392 0.392 +R13 = 0.627 0.538 0.762 1.807 0.662 0.313 0.314 0.903 0.904 0.281 0.381 0.392 0.392 +R14 = 0.444 0.762 0.762 1.624 0.713 0.130 0.314 0.720 0.904 0.333 0.381 0.392 0.392 +R15 = 0.260 0.945 0.762 1.440 0.744 0.130 0.130 0.720 0.720 0.363 0.381 0.392 0.392 +R16 = 0.130 0.945 0.946 1.310 0.837 0.130 0.000 0.720 0.590 0.363 0.474 0.392 0.392 +R17 = 0.000 0.945 1.206 1.180 0.923 0.000 0.000 0.590 0.590 0.440 0.483 0.392 0.392 +R18 = 0.000 1.211 1.206 1.180 1.046 0.000 0.000 0.590 0.590 0.456 0.590 0.110 0.110 +]]-- + +-------------------------------------------------------------------------------- +-- Resistor arrays calculations - auto-generated by gen.lua +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("Gen_Res_703") + +local R = {} + +local P1_3 +local P3_4 +local P4_5 +local P5_6 +local P6_7 +local P7_8 +local P8_9 +local P9_10 +local P10_11 +local P11_12 +local P12_13 +local P11_14 + +local P15_16 +local P16_17 +local P17_18 +local P18_19 +local P19_20 +local P20_21 +local P21_22 +local P22_23 +local P23_24 +local P24_25 +local P25_26 +local P25_27 + +local L26_31 +local P31_30 +local P30_29 +local P29_28 + +local L25_37 +local P37_36 +local P36_35 +local P35_K2 + +function TRAIN_SYSTEM.InitializeResistances_81_703(Train) + P12_13 = Train.KF_47A["P12-P13"] + P11_12 = Train.KF_47A["P11-P12"] + P10_11 = Train.KF_47A["P10-P11"] + P9_10 = Train.KF_47A["P9-P10"] + P8_9 = Train.KF_47A["P8-P9"] + P7_8 = Train.KF_47A["P7-P8"] + P6_7 = Train.KF_47A["P6-P7"] + P5_6 = Train.KF_47A["P5-P6"] + P4_5 = Train.KF_47A["P4-P5"] + P3_4 = Train.KF_47A["P3-P4"] + P1_3 = Train.KF_47A["P1-P3"] + + P11_14 = Train.KF_47A["P11-P14"] + + P25_26 = Train.KF_47A["P25-P26"] + P24_25 = Train.KF_47A["P24-P25"] + P23_24 = Train.KF_47A["P23-P24"] + P22_23 = Train.KF_47A["P22-P23"] + P21_22 = Train.KF_47A["P21-P22"] + P20_21 = Train.KF_47A["P20-P21"] + P19_20 = Train.KF_47A["P19-P20"] + P18_19 = Train.KF_47A["P18-P19"] + P17_18 = Train.KF_47A["P17-P18"] + P16_17 = Train.KF_47A["P16-P17"] + P15_16 = Train.KF_47A["P15-P16"] + + P25_27 = Train.KF_47A["P25-P27"] + + P29_P28 = Train.KF_50A["P29-P28"] + P30_P29 = Train.KF_50A["P30-P29"] + P31_P30 = Train.KF_50A["P31-P30"] + L26_P31 = Train.KF_50A["L26-P31"] + + P35_K2 = Train.KF_50A["P35-K2"] + P36_P35 = Train.KF_50A["P36-P35"] + P37_P36 = Train.KF_50A["P37-P36"] + L25_P37 = Train.KF_50A["L25-P37"] + + P33_P42 = Train.YAS_44V["P33-P42"] + P13_P33 = Train.YAS_44V["P13-P33"] + P13_P42 = Train.KF_47A["P13-P42"] +end + +function TRAIN_SYSTEM.R1C1(Train) + local RK = Train.RheostatController + local T = Train.PositionSwitch + R[1] = ((RK[15])^-1 + (T[20])^-1)^-1 + R[2] = ((RK[17])^-1 + (P11_12)^-1)^-1 + R[3] = ((RK[19])^-1 + (P12_13+R[2])^-1)^-1 + R[4] = ((T[22])^-1 + (P10_11)^-1)^-1 + R[5] = ((T[1])^-1 + (P4_5)^-1)^-1 + R[6] = ((RK[1])^-1 + (P1_3)^-1)^-1 + R[7] = ((RK[9])*(P7_8)+(RK[9])*(P6_7)+(P7_8)*(P6_7))/(RK[9]) + R[8] = ((RK[9])*(P7_8)+(RK[9])*(P6_7)+(P7_8)*(P6_7))/(P7_8) + R[9] = ((RK[9])*(P7_8)+(RK[9])*(P6_7)+(P7_8)*(P6_7))/(P6_7) + R[10] = ((RK[11])^-1 + (R[9])^-1)^-1 + R[11] = ((RK[7])^-1 + (R[8])^-1)^-1 + R[12] = ((P5_6)*(R[7])+(P5_6)*(R[11])+(R[7])*(R[11]))/(P5_6) + R[13] = ((P5_6)*(R[7])+(P5_6)*(R[11])+(R[7])*(R[11]))/(R[7]) + R[14] = ((P5_6)*(R[7])+(P5_6)*(R[11])+(R[7])*(R[11]))/(R[11]) + R[15] = ((RK[5])^-1 + (R[13])^-1)^-1 + R[16] = ((R[12])^-1 + (R[10])^-1)^-1 + R[17] = ((R[14])*(R[15])+(R[14])*(R[5]+P3_4)+(R[15])*(R[5]+P3_4))/(R[14]) + R[18] = ((R[14])*(R[15])+(R[14])*(R[5]+P3_4)+(R[15])*(R[5]+P3_4))/(R[15]) + R[19] = ((R[14])*(R[15])+(R[14])*(R[5]+P3_4)+(R[15])*(R[5]+P3_4))/(R[5]+P3_4) + R[20] = ((RK[3])^-1 + (R[17])^-1)^-1 + R[21] = ((R[19])^-1 + (R[16])^-1)^-1 + R[22] = ((RK[13])*(R[4]+P9_10)+(RK[13])*(P8_9)+(R[4]+P9_10)*(P8_9))/(RK[13]) + R[23] = ((RK[13])*(R[4]+P9_10)+(RK[13])*(P8_9)+(R[4]+P9_10)*(P8_9))/(R[4]+P9_10) + R[24] = ((RK[13])*(R[4]+P9_10)+(RK[13])*(P8_9)+(R[4]+P9_10)*(P8_9))/(P8_9) + R[25] = ((R[24])^-1 + (R[1])^-1)^-1 + R[26] = ((R[23])^-1 + (R[21])^-1)^-1 + R[27] = ((R[22])*(R[26])+(R[22])*(R[18])+(R[26])*(R[18]))/(R[22]) + R[28] = ((R[22])*(R[26])+(R[22])*(R[18])+(R[26])*(R[18]))/(R[26]) + R[29] = ((R[22])*(R[26])+(R[22])*(R[18])+(R[26])*(R[18]))/(R[18]) + R[30] = ((R[25])^-1 + (R[29])^-1)^-1 + R[31] = ((R[28])^-1 + (R[6]+T[19]+P11_14)^-1)^-1 + R[32] = ((R[27])^-1 + (R[20])^-1)^-1 + R[33] = ((R[30])^-1 + (R[31]+R[32])^-1)^-1 + return R[33]+R[3] +end + +function TRAIN_SYSTEM.R1C2(Train) + local RK = Train.RheostatController + local T = Train.PositionSwitch + R[1] = ((RK[15])^-1 + (T[20])^-1)^-1 + R[2] = ((RK[17])^-1 + (P11_12)^-1)^-1 + R[3] = ((T[22])^-1 + (P10_11)^-1)^-1 + R[4] = ((T[1])^-1 + (P4_5)^-1)^-1 + R[5] = ((RK[1])^-1 + (P1_3)^-1)^-1 + R[6] = ((R[2])^-1 + (RK[19]+P12_13)^-1)^-1 + R[7] = ((RK[9])*(P7_8)+(RK[9])*(P6_7)+(P7_8)*(P6_7))/(RK[9]) + R[8] = ((RK[9])*(P7_8)+(RK[9])*(P6_7)+(P7_8)*(P6_7))/(P7_8) + R[9] = ((RK[9])*(P7_8)+(RK[9])*(P6_7)+(P7_8)*(P6_7))/(P6_7) + R[10] = ((R[9])^-1 + (RK[11])^-1)^-1 + R[11] = ((R[8])^-1 + (RK[7])^-1)^-1 + R[12] = ((R[7])*(R[11])+(R[7])*(P5_6)+(R[11])*(P5_6))/(R[7]) + R[13] = ((R[7])*(R[11])+(R[7])*(P5_6)+(R[11])*(P5_6))/(R[11]) + R[14] = ((R[7])*(R[11])+(R[7])*(P5_6)+(R[11])*(P5_6))/(P5_6) + R[15] = ((R[10])^-1 + (R[14])^-1)^-1 + R[16] = ((RK[5])^-1 + (R[12])^-1)^-1 + R[17] = ((RK[13])*(P8_9)+(RK[13])*(R[3]+P9_10)+(P8_9)*(R[3]+P9_10))/(RK[13]) + R[18] = ((RK[13])*(P8_9)+(RK[13])*(R[3]+P9_10)+(P8_9)*(R[3]+P9_10))/(P8_9) + R[19] = ((RK[13])*(P8_9)+(RK[13])*(R[3]+P9_10)+(P8_9)*(R[3]+P9_10))/(R[3]+P9_10) + R[20] = ((R[1])^-1 + (R[18])^-1)^-1 + R[21] = ((R[15])^-1 + (R[19])^-1)^-1 + R[22] = ((R[13])*(R[17])+(R[13])*(R[21])+(R[17])*(R[21]))/(R[13]) + R[23] = ((R[13])*(R[17])+(R[13])*(R[21])+(R[17])*(R[21]))/(R[17]) + R[24] = ((R[13])*(R[17])+(R[13])*(R[21])+(R[17])*(R[21]))/(R[21]) + R[25] = ((R[16])^-1 + (R[23])^-1)^-1 + R[26] = ((R[22])^-1 + (R[20])^-1)^-1 + R[27] = ((R[25])*(R[4]+P3_4)+(R[25])*(R[24])+(R[4]+P3_4)*(R[24]))/(R[25]) + R[28] = ((R[25])*(R[4]+P3_4)+(R[25])*(R[24])+(R[4]+P3_4)*(R[24]))/(R[4]+P3_4) + R[29] = ((R[25])*(R[4]+P3_4)+(R[25])*(R[24])+(R[4]+P3_4)*(R[24]))/(R[24]) + R[30] = ((R[26])^-1 + (R[28])^-1)^-1 + R[31] = ((R[29])^-1 + (RK[3])^-1)^-1 + R[32] = ((R[27])^-1 + (R[5]+T[19]+P11_14)^-1)^-1 + R[33] = ((R[30])*(R[32])+(R[30])*(R[6])+(R[32])*(R[6]))/(R[30]) + R[34] = ((R[30])*(R[32])+(R[30])*(R[6])+(R[32])*(R[6]))/(R[32]) + R[35] = ((R[30])*(R[32])+(R[30])*(R[6])+(R[32])*(R[6]))/(R[6]) + R[36] = ((R[31])^-1 + (R[35])^-1)^-1 + R[37] = ((R[36])^-1 + (R[34]+R[33])^-1)^-1 + return R[37] +end + +function TRAIN_SYSTEM.R1C3(Train) + local RK = Train.RheostatController + local T = Train.PositionSwitch + R[1] = ((RK[15])^-1 + (T[20])^-1)^-1 + R[2] = ((RK[17])^-1 + (P11_12)^-1)^-1 + R[3] = ((T[22])^-1 + (P10_11)^-1)^-1 + R[4] = ((T[1])^-1 + (P4_5)^-1)^-1 + R[5] = ((RK[1])^-1 + (P1_3)^-1)^-1 + R[6] = ((RK[19]+P12_13)^-1 + (R[2])^-1)^-1 + R[7] = ((RK[9])*(P7_8)+(RK[9])*(P6_7)+(P7_8)*(P6_7))/(RK[9]) + R[8] = ((RK[9])*(P7_8)+(RK[9])*(P6_7)+(P7_8)*(P6_7))/(P7_8) + R[9] = ((RK[9])*(P7_8)+(RK[9])*(P6_7)+(P7_8)*(P6_7))/(P6_7) + R[10] = ((R[9])^-1 + (RK[11])^-1)^-1 + R[11] = ((R[8])^-1 + (RK[7])^-1)^-1 + R[12] = ((P5_6)*(R[11])+(P5_6)*(R[7])+(R[11])*(R[7]))/(P5_6) + R[13] = ((P5_6)*(R[11])+(P5_6)*(R[7])+(R[11])*(R[7]))/(R[11]) + R[14] = ((P5_6)*(R[11])+(P5_6)*(R[7])+(R[11])*(R[7]))/(R[7]) + R[15] = ((R[10])^-1 + (R[12])^-1)^-1 + R[16] = ((R[14])^-1 + (RK[5])^-1)^-1 + R[17] = ((RK[13])*(P9_10+R[3])+(RK[13])*(P8_9)+(P9_10+R[3])*(P8_9))/(RK[13]) + R[18] = ((RK[13])*(P9_10+R[3])+(RK[13])*(P8_9)+(P9_10+R[3])*(P8_9))/(P9_10+R[3]) + R[19] = ((RK[13])*(P9_10+R[3])+(RK[13])*(P8_9)+(P9_10+R[3])*(P8_9))/(P8_9) + R[20] = ((R[15])^-1 + (R[18])^-1)^-1 + R[21] = ((R[19])^-1 + (R[1])^-1)^-1 + R[22] = ((R[20])*(R[17])+(R[20])*(R[13])+(R[17])*(R[13]))/(R[20]) + R[23] = ((R[20])*(R[17])+(R[20])*(R[13])+(R[17])*(R[13]))/(R[17]) + R[24] = ((R[20])*(R[17])+(R[20])*(R[13])+(R[17])*(R[13]))/(R[13]) + R[25] = ((R[24])^-1 + (R[21])^-1)^-1 + R[26] = ((R[16])^-1 + (R[23])^-1)^-1 + R[27] = ((R[22])*(R[26])+(R[22])*(R[4]+P3_4)+(R[26])*(R[4]+P3_4))/(R[22]) + R[28] = ((R[22])*(R[26])+(R[22])*(R[4]+P3_4)+(R[26])*(R[4]+P3_4))/(R[26]) + R[29] = ((R[22])*(R[26])+(R[22])*(R[4]+P3_4)+(R[26])*(R[4]+P3_4))/(R[4]+P3_4) + R[30] = ((R[25])^-1 + (R[29])^-1)^-1 + R[31] = ((R[27])^-1 + (RK[3])^-1)^-1 + R[32] = ((T[19]+R[5])*(R[31])+(T[19]+R[5])*(R[28])+(R[31])*(R[28]))/(T[19]+R[5]) + R[33] = ((T[19]+R[5])*(R[31])+(T[19]+R[5])*(R[28])+(R[31])*(R[28]))/(R[31]) + R[34] = ((T[19]+R[5])*(R[31])+(T[19]+R[5])*(R[28])+(R[31])*(R[28]))/(R[28]) + R[35] = ((R[30])^-1 + (R[32])^-1)^-1 + R[36] = ((R[33])^-1 + (P11_14)^-1)^-1 + R[37] = ((R[35])*(R[36])+(R[35])*(R[6])+(R[36])*(R[6]))/(R[35]) + R[38] = ((R[35])*(R[36])+(R[35])*(R[6])+(R[36])*(R[6]))/(R[36]) + R[39] = ((R[35])*(R[36])+(R[35])*(R[6])+(R[36])*(R[6]))/(R[6]) + R[40] = ((R[39])^-1 + (R[34])^-1)^-1 + R[41] = ((R[40])^-1 + (R[37]+R[38])^-1)^-1 + return R[41] +end + +function TRAIN_SYSTEM.R2C1(Train) + local RK = Train.RheostatController + local T = Train.PositionSwitch + R[1] = ((RK[16])^-1 + (T[17])^-1)^-1 + R[2] = ((T[16])^-1 + (P24_25)^-1)^-1 + R[3] = ((RK[18])^-1 + (P25_26)^-1)^-1 + R[4] = ((T[15])^-1 + (P18_19)^-1)^-1 + R[5] = ((RK[2])^-1 + (P16_17)^-1)^-1 + R[6] = ((RK[8])*(P20_21)+(RK[8])*(P19_20)+(P20_21)*(P19_20))/(RK[8]) + R[7] = ((RK[8])*(P20_21)+(RK[8])*(P19_20)+(P20_21)*(P19_20))/(P20_21) + R[8] = ((RK[8])*(P20_21)+(RK[8])*(P19_20)+(P20_21)*(P19_20))/(P19_20) + R[9] = ((R[8])^-1 + (RK[10])^-1)^-1 + R[10] = ((R[7])^-1 + (RK[6])^-1)^-1 + R[11] = ((R[6])*(R[10])+(R[6])*(R[4]+P17_18)+(R[10])*(R[4]+P17_18))/(R[6]) + R[12] = ((R[6])*(R[10])+(R[6])*(R[4]+P17_18)+(R[10])*(R[4]+P17_18))/(R[10]) + R[13] = ((R[6])*(R[10])+(R[6])*(R[4]+P17_18)+(R[10])*(R[4]+P17_18))/(R[4]+P17_18) + R[14] = ((R[9])^-1 + (R[13])^-1)^-1 + R[15] = ((RK[4])^-1 + (R[11])^-1)^-1 + R[16] = ((R[12])*(R[5]+P25_27+P15_16+RK[20]+T[21])+(R[12])*(R[15])+(R[5]+P25_27+P15_16+RK[20]+T[21])*(R[15]))/(R[12]) + R[17] = ((R[12])*(R[5]+P25_27+P15_16+RK[20]+T[21])+(R[12])*(R[15])+(R[5]+P25_27+P15_16+RK[20]+T[21])*(R[15]))/(R[5]+P25_27+P15_16+RK[20]+T[21]) + R[18] = ((R[12])*(R[5]+P25_27+P15_16+RK[20]+T[21])+(R[12])*(R[15])+(R[5]+P25_27+P15_16+RK[20]+T[21])*(R[15]))/(R[15]) + R[19] = ((R[17])^-1 + (R[14])^-1)^-1 + R[20] = ((R[16])^-1 + (R[1])^-1)^-1 + R[21] = ((RK[12])*(P22_23)+(RK[12])*(P21_22)+(P22_23)*(P21_22))/(RK[12]) + R[22] = ((RK[12])*(P22_23)+(RK[12])*(P21_22)+(P22_23)*(P21_22))/(P22_23) + R[23] = ((RK[12])*(P22_23)+(RK[12])*(P21_22)+(P22_23)*(P21_22))/(P21_22) + R[24] = ((R[19])^-1 + (R[22])^-1)^-1 + R[25] = ((R[23])^-1 + (RK[14])^-1)^-1 + R[26] = ((R[18])*(R[24])+(R[18])*(R[21])+(R[24])*(R[21]))/(R[18]) + R[27] = ((R[18])*(R[24])+(R[18])*(R[21])+(R[24])*(R[21]))/(R[24]) + R[28] = ((R[18])*(R[24])+(R[18])*(R[21])+(R[24])*(R[21]))/(R[21]) + R[29] = ((R[25])^-1 + (R[26])^-1)^-1 + R[30] = ((R[20])^-1 + (R[28])^-1)^-1 + R[31] = ((R[27])^-1 + (P23_24+R[2])^-1)^-1 + R[32] = ((R[30])^-1 + (R[31]+R[29])^-1)^-1 + return R[32]+R[3] +end + +function TRAIN_SYSTEM.R2C2(Train) + local RK = Train.RheostatController + local T = Train.PositionSwitch + R[1] = ((RK[16])^-1 + (T[17])^-1)^-1 + R[2] = ((T[16])^-1 + (P24_25)^-1)^-1 + R[3] = ((RK[18])^-1 + (P25_26)^-1)^-1 + R[4] = ((T[15])^-1 + (P18_19)^-1)^-1 + R[5] = ((RK[2])^-1 + (P16_17)^-1)^-1 + R[6] = ((RK[8])*(P20_21)+(RK[8])*(P19_20)+(P20_21)*(P19_20))/(RK[8]) + R[7] = ((RK[8])*(P20_21)+(RK[8])*(P19_20)+(P20_21)*(P19_20))/(P20_21) + R[8] = ((RK[8])*(P20_21)+(RK[8])*(P19_20)+(P20_21)*(P19_20))/(P19_20) + R[9] = ((R[8])^-1 + (RK[10])^-1)^-1 + R[10] = ((R[7])^-1 + (RK[6])^-1)^-1 + R[11] = ((R[6])*(R[10])+(R[6])*(R[4]+P17_18)+(R[10])*(R[4]+P17_18))/(R[6]) + R[12] = ((R[6])*(R[10])+(R[6])*(R[4]+P17_18)+(R[10])*(R[4]+P17_18))/(R[10]) + R[13] = ((R[6])*(R[10])+(R[6])*(R[4]+P17_18)+(R[10])*(R[4]+P17_18))/(R[4]+P17_18) + R[14] = ((R[9])^-1 + (R[13])^-1)^-1 + R[15] = ((RK[4])^-1 + (R[11])^-1)^-1 + R[16] = ((R[12])*(R[14])+(R[12])*(P21_22)+(R[14])*(P21_22))/(R[12]) + R[17] = ((R[12])*(R[14])+(R[12])*(P21_22)+(R[14])*(P21_22))/(R[14]) + R[18] = ((R[12])*(R[14])+(R[12])*(P21_22)+(R[14])*(P21_22))/(P21_22) + R[19] = ((R[18])^-1 + (R[15])^-1)^-1 + R[20] = ((R[16])^-1 + (RK[12])^-1)^-1 + R[21] = ((R[17])*(R[20])+(R[17])*(P22_23)+(R[20])*(P22_23))/(R[17]) + R[22] = ((R[17])*(R[20])+(R[17])*(P22_23)+(R[20])*(P22_23))/(R[20]) + R[23] = ((R[17])*(R[20])+(R[17])*(P22_23)+(R[20])*(P22_23))/(P22_23) + R[24] = ((R[19])^-1 + (R[23])^-1)^-1 + R[25] = ((RK[14])^-1 + (R[21])^-1)^-1 + R[26] = ((R[25])*(R[22])+(R[25])*(P23_24+R[2])+(R[22])*(P23_24+R[2]))/(R[25]) + R[27] = ((R[25])*(R[22])+(R[25])*(P23_24+R[2])+(R[22])*(P23_24+R[2]))/(R[22]) + R[28] = ((R[25])*(R[22])+(R[25])*(P23_24+R[2])+(R[22])*(P23_24+R[2]))/(P23_24+R[2]) + R[29] = ((R[28])^-1 + (R[24])^-1)^-1 + R[30] = ((R[27])^-1 + (R[1])^-1)^-1 + R[31] = ((R[26])^-1 + (R[5]+P25_27+P15_16+RK[20]+T[21])^-1)^-1 + R[32] = ((R[30])*(R[31])+(R[30])*(R[3])+(R[31])*(R[3]))/(R[30]) + R[33] = ((R[30])*(R[31])+(R[30])*(R[3])+(R[31])*(R[3]))/(R[31]) + R[34] = ((R[30])*(R[31])+(R[30])*(R[3])+(R[31])*(R[3]))/(R[3]) + R[35] = ((R[29])^-1 + (R[34])^-1)^-1 + R[36] = ((R[33]+R[32])^-1 + (R[35])^-1)^-1 + return R[36] +end + +function TRAIN_SYSTEM.R2C3(Train) + local RK = Train.RheostatController + local T = Train.PositionSwitch + R[1] = ((RK[16])^-1 + (T[17])^-1)^-1 + R[2] = ((T[16])^-1 + (P24_25)^-1)^-1 + R[3] = ((RK[18])^-1 + (P25_26)^-1)^-1 + R[4] = ((T[15])^-1 + (P18_19)^-1)^-1 + R[5] = ((RK[2])^-1 + (P16_17)^-1)^-1 + R[6] = ((RK[8])*(P20_21)+(RK[8])*(P19_20)+(P20_21)*(P19_20))/(RK[8]) + R[7] = ((RK[8])*(P20_21)+(RK[8])*(P19_20)+(P20_21)*(P19_20))/(P20_21) + R[8] = ((RK[8])*(P20_21)+(RK[8])*(P19_20)+(P20_21)*(P19_20))/(P19_20) + R[9] = ((RK[10])^-1 + (R[8])^-1)^-1 + R[10] = ((RK[6])^-1 + (R[7])^-1)^-1 + R[11] = ((RK[12])*(P22_23)+(RK[12])*(P21_22)+(P22_23)*(P21_22))/(RK[12]) + R[12] = ((RK[12])*(P22_23)+(RK[12])*(P21_22)+(P22_23)*(P21_22))/(P22_23) + R[13] = ((RK[12])*(P22_23)+(RK[12])*(P21_22)+(P22_23)*(P21_22))/(P21_22) + R[14] = ((R[9])^-1 + (R[12])^-1)^-1 + R[15] = ((RK[14])^-1 + (R[13])^-1)^-1 + R[16] = ((R[6])*(R[4]+P17_18)+(R[6])*(R[10])+(R[4]+P17_18)*(R[10]))/(R[6]) + R[17] = ((R[6])*(R[4]+P17_18)+(R[6])*(R[10])+(R[4]+P17_18)*(R[10]))/(R[4]+P17_18) + R[18] = ((R[6])*(R[4]+P17_18)+(R[6])*(R[10])+(R[4]+P17_18)*(R[10]))/(R[10]) + R[19] = ((R[16])^-1 + (RK[4])^-1)^-1 + R[20] = ((R[14])^-1 + (R[17])^-1)^-1 + R[21] = ((R[18])*(R[11])+(R[18])*(R[20])+(R[11])*(R[20]))/(R[18]) + R[22] = ((R[18])*(R[11])+(R[18])*(R[20])+(R[11])*(R[20]))/(R[11]) + R[23] = ((R[18])*(R[11])+(R[18])*(R[20])+(R[11])*(R[20]))/(R[20]) + R[24] = ((R[15])^-1 + (R[21])^-1)^-1 + R[25] = ((R[22])^-1 + (R[19])^-1)^-1 + R[26] = ((R[5]+P15_16+RK[20]+T[21])*(R[23])+(R[5]+P15_16+RK[20]+T[21])*(R[25])+(R[23])*(R[25]))/(R[5]+P15_16+RK[20]+T[21]) + R[27] = ((R[5]+P15_16+RK[20]+T[21])*(R[23])+(R[5]+P15_16+RK[20]+T[21])*(R[25])+(R[23])*(R[25]))/(R[23]) + R[28] = ((R[5]+P15_16+RK[20]+T[21])*(R[23])+(R[5]+P15_16+RK[20]+T[21])*(R[25])+(R[23])*(R[25]))/(R[25]) + R[29] = ((R[24])^-1 + (R[26])^-1)^-1 + R[30] = ((P23_24+R[2])*(R[29])+(P23_24+R[2])*(R[28])+(R[29])*(R[28]))/(P23_24+R[2]) + R[31] = ((P23_24+R[2])*(R[29])+(P23_24+R[2])*(R[28])+(R[29])*(R[28]))/(R[29]) + R[32] = ((P23_24+R[2])*(R[29])+(P23_24+R[2])*(R[28])+(R[29])*(R[28]))/(R[28]) + R[33] = ((R[31])^-1 + (P25_27)^-1)^-1 + R[34] = ((R[32])^-1 + (R[1])^-1)^-1 + R[35] = ((R[27])^-1 + (R[30])^-1)^-1 + R[36] = ((R[3])*(R[34])+(R[3])*(R[33])+(R[34])*(R[33]))/(R[3]) + R[37] = ((R[3])*(R[34])+(R[3])*(R[33])+(R[34])*(R[33]))/(R[34]) + R[38] = ((R[3])*(R[34])+(R[3])*(R[33])+(R[34])*(R[33]))/(R[33]) + R[39] = ((R[36])^-1 + (R[37]+R[38])^-1)^-1 + R[40] = ((R[39])^-1 + (R[35])^-1)^-1 + return R[40] +end + +function TRAIN_SYSTEM.S1(Train) + local RK = Train.RheostatController + local T = Train.PositionSwitch + R[1] = ((P29_P28)^-1 + (1e-9+1e9*(1.0-Train.KSH3.Value))^-1)^-1 + R[2] = ((L26_P31)^-1 + (RK[21])^-1)^-1 + R[3] = ((RK[23])^-1 + (P31_P30+R[2])^-1)^-1 + R[4] = ((P30_P29+R[3])^-1 + (RK[25])^-1)^-1 + return R[4]+R[1] +end + +function TRAIN_SYSTEM.S2(Train) + local RK = Train.RheostatController + local T = Train.PositionSwitch + R[1] = ((P35_K2)^-1 + (1e-9+1e9*(1.0-Train.KSH4.Value))^-1)^-1 + R[2] = ((L25_P37)^-1 + (RK[22])^-1)^-1 + R[3] = ((RK[24])^-1 + (P37_P36+R[2])^-1)^-1 + R[4] = ((P36_P35+R[3])^-1 + (RK[26])^-1)^-1 + return R[4]+R[1] +end + diff --git a/lua/metrostroi/systems/sys_gen_res_710.lua b/lua/metrostroi/systems/sys_gen_res_710.lua new file mode 100644 index 0000000..788ebe0 --- /dev/null +++ b/lua/metrostroi/systems/sys_gen_res_710.lua @@ -0,0 +1,325 @@ +-------------------------------------------------------------------------------- +-- Resistor arrays calculations +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +--[[ +Rxx PS1 PS2 PP1 PP2 PT1 PT2 T3 PS PT S1 S2 +R01 = 2.892 2.029 0.000 0.000 1.056 1.029 0.285 4.921 2.371 0.042 0.042 +R02 = 2.892 2.029 0.000 0.000 1.056 1.029 0.000 4.921 2.086 0.042 0.042 +R03 = 1.822 2.029 0.000 0.000 0.888 1.029 0.000 3.851 1.918 0.070 0.070 +R04 = 1.822 1.313 0.000 0.000 0.888 0.835 0.000 3.135 1.723 0.133 0.133 +R05 = 1.337 1.313 0.000 0.000 0.774 0.835 0.000 2.650 1.609 0.429 0.429 +R06 = 0.970 1.313 0.000 0.000 0.660 0.835 0.000 2.283 1.495 0.429 0.429 +R07 = 0.970 0.970 0.144 0.000 0.660 0.710 0.000 1.940 1.370 0.429 0.429 +R08 = 0.970 0.780 0.144 0.120 0.660 0.628 0.000 1.750 1.288 0.429 0.429 +R09 = 0.780 0.780 0.144 0.533 0.588 0.628 0.000 1.560 1.216 0.429 0.429 +R10 = 0.557 0.780 0.557 0.533 0.489 0.628 0.000 1.337 1.117 0.429 0.429 +R11 = 0.557 0.557 0.780 0.533 0.489 0.516 0.000 1.114 1.005 0.429 0.429 +R12 = 0.557 0.334 0.780 0.756 0.489 0.384 0.000 0.891 0.873 0.429 0.429 +R13 = 0.334 0.334 0.780 0.979 0.369 0.384 0.000 0.668 0.753 0.429 0.429 +R14 = 0.144 0.334 1.003 0.979 0.245 0.384 0.000 0.478 0.629 0.429 0.429 +R15 = 0.144 0.144 1.193 0.979 0.245 0.251 0.000 0.288 0.496 0.429 0.429 +R16 = 0.144 0.000 1.193 1.169 0.245 0.165 0.000 0.144 0.410 0.429 0.429 +R17 = 0.000 0.000 1.193 1.169 0.182 0.165 0.000 0.000 0.348 0.429 0.429 +R18 = 0.000 0.000 1.193 1.169 0.182 0.104 0.000 0.000 0.286 0.429 0.429 +]]-- + +-------------------------------------------------------------------------------- +-- Resistor arrays calculations - auto-generated by gen.lua +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("Gen_Res_710") + +local R = {} + +local P12_13 +local P11_12 +local P10_11 +local P9_10 +local P8_9 +local P7_8 +local P6_7 +local P5_6 +local P4_5 +local P3_4 +local P1_3 + +local P25_26 +local P24_25 +local P23_24 +local P22_23 +local P21_22 +local P20_21 +local P19_20 +local P18_19 +local P17_18 +local P16_17 + +local P3_P14 +local P17_P76 +local P76_P27 + +local P29_P28 +local P30_P29 +local P31_P30 +local L76_P31 + +local P35_K2 +local P36_P35 +local P37_P36 +local L74_P37 + +local P33_P42 +local P13_P33 +local P13_P42 + +function TRAIN_SYSTEM.InitializeResistances_81_710(Train) + P12_13 = Train.KF_47A["P12-P13"] + P11_12 = Train.KF_47A["P11-P12"] + P10_11 = Train.KF_47A["P10-P11"] + P9_10 = Train.KF_47A["P9-P10"] + P8_9 = Train.KF_47A["P8-P9"] + P7_8 = Train.KF_47A["P7-P8"] + P6_7 = Train.KF_47A["P6-P7"] + P5_6 = Train.KF_47A["P5-P6"] + P4_5 = Train.KF_47A["P4-P5"] + P3_4 = Train.KF_47A["P3-P4"] + P1_3 = Train.KF_47A["P1-P3"] + + P25_26 = Train.KF_47A["P25-P26"] + P24_25 = Train.KF_47A["P24-P25"] + P23_24 = Train.KF_47A["P23-P24"] + P22_23 = Train.KF_47A["P22-P23"] + P21_22 = Train.KF_47A["P21-P22"] + P20_21 = Train.KF_47A["P20-P21"] + P19_20 = Train.KF_47A["P19-P20"] + P18_19 = Train.KF_47A["P18-P19"] + P17_18 = Train.KF_47A["P17-P18"] + P16_17 = Train.KF_47A["P16-P17"] + + P3_P14 = Train.KF_47A["P3-P14"] + P17_P76 = Train.KF_47A["P17-P76"] + P76_P27 = Train.KF_47A["P76-P27"] + + P29_P28 = Train.KF_50A["P29-P28"] + P30_P29 = Train.KF_50A["P30-P29"] + P31_P30 = Train.KF_50A["P31-P30"] + L76_P31 = Train.KF_50A["L76-P31"] + + P35_K2 = Train.KF_50A["P35-K2"] + P36_P35 = Train.KF_50A["P36-P35"] + P37_P36 = Train.KF_50A["P37-P36"] + L74_P37 = Train.KF_50A["L74-P37"] + + P33_P42 = Train.YAS_44V["P33-P42"] + P13_P33 = Train.YAS_44V["P13-P33"] + P13_P42 = Train.KF_47A["P13-P42"] +end + +function TRAIN_SYSTEM.R1C1(Train) + local RK = Train.RheostatController + local T = Train.PositionSwitch + R[1] = ((RK[17])^-1 + (P11_12)^-1)^-1 + R[2] = ((RK[19])^-1 + (P12_13+R[1])^-1)^-1 + R[3] = ((T[22])^-1 + (P10_11)^-1)^-1 + R[4] = ((RK[3])^-1 + (1e-9+1e9*(1.0-Train.TR1.Value))^-1)^-1 + R[5] = ((P3_P14)^-1 + (RK[1]+P1_3)^-1)^-1 + R[6] = ((RK[7])*(P6_7)+(RK[7])*(P5_6)+(P6_7)*(P5_6))/(RK[7]) + R[7] = ((RK[7])*(P6_7)+(RK[7])*(P5_6)+(P6_7)*(P5_6))/(P6_7) + R[8] = ((RK[7])*(P6_7)+(RK[7])*(P5_6)+(P6_7)*(P5_6))/(P5_6) + R[9] = ((RK[9])^-1 + (R[8])^-1)^-1 + R[10] = ((RK[5])^-1 + (R[7])^-1)^-1 + R[11] = ((R[9])*(R[6])+(R[9])*(P7_8)+(R[6])*(P7_8))/(R[9]) + R[12] = ((R[9])*(R[6])+(R[9])*(P7_8)+(R[6])*(P7_8))/(R[6]) + R[13] = ((R[9])*(R[6])+(R[9])*(P7_8)+(R[6])*(P7_8))/(P7_8) + R[14] = ((R[13])^-1 + (R[10])^-1)^-1 + R[15] = ((RK[11])^-1 + (R[12])^-1)^-1 + R[16] = ((T[19]+R[5])*(P3_4)+(T[19]+R[5])*(R[4])+(P3_4)*(R[4]))/(T[19]+R[5]) + R[17] = ((T[19]+R[5])*(P3_4)+(T[19]+R[5])*(R[4])+(P3_4)*(R[4]))/(P3_4) + R[18] = ((T[19]+R[5])*(P3_4)+(T[19]+R[5])*(R[4])+(P3_4)*(R[4]))/(R[4]) + R[19] = ((R[16])^-1 + (RK[5]+T[1])^-1)^-1 + R[20] = ((RK[15]+T[20])*(P9_10+R[3])+(RK[15]+T[20])*(R[2])+(P9_10+R[3])*(R[2]))/(RK[15]+T[20]) + R[21] = ((RK[15]+T[20])*(P9_10+R[3])+(RK[15]+T[20])*(R[2])+(P9_10+R[3])*(R[2]))/(P9_10+R[3]) + R[22] = ((RK[15]+T[20])*(P9_10+R[3])+(RK[15]+T[20])*(R[2])+(P9_10+R[3])*(R[2]))/(R[2]) + R[23] = ((R[22])^-1 + (RK[13])^-1)^-1 + R[24] = ((R[21])^-1 + (R[17])^-1)^-1 + R[25] = ((P4_5)*(R[19])+(P4_5)*(R[18])+(R[19])*(R[18]))/(P4_5) + R[26] = ((P4_5)*(R[19])+(P4_5)*(R[18])+(R[19])*(R[18]))/(R[19]) + R[27] = ((P4_5)*(R[19])+(P4_5)*(R[18])+(R[19])*(R[18]))/(R[18]) + R[28] = ((R[24])^-1 + (R[25])^-1)^-1 + R[29] = ((R[27])^-1 + (R[14])^-1)^-1 + R[30] = ((R[29])*(R[11])+(R[29])*(R[26])+(R[11])*(R[26]))/(R[29]) + R[31] = ((R[29])*(R[11])+(R[29])*(R[26])+(R[11])*(R[26]))/(R[11]) + R[32] = ((R[29])*(R[11])+(R[29])*(R[26])+(R[11])*(R[26]))/(R[26]) + R[33] = ((R[32])^-1 + (R[15])^-1)^-1 + R[34] = ((R[31])^-1 + (R[28])^-1)^-1 + R[35] = ((R[33])*(R[30])+(R[33])*(P8_9)+(R[30])*(P8_9))/(R[33]) + R[36] = ((R[33])*(R[30])+(R[33])*(P8_9)+(R[30])*(P8_9))/(R[30]) + R[37] = ((R[33])*(R[30])+(R[33])*(P8_9)+(R[30])*(P8_9))/(P8_9) + R[38] = ((R[23])^-1 + (R[36])^-1)^-1 + R[39] = ((R[20])^-1 + (R[35])^-1)^-1 + R[40] = ((R[39]+R[38])^-1 + (R[37])^-1)^-1 + R[41] = ((R[40])^-1 + (R[34])^-1)^-1 + return R[41] +end + +function TRAIN_SYSTEM.R1C2(Train) + local RK = Train.RheostatController + local T = Train.PositionSwitch + R[1] = ((RK[17])^-1 + (P11_12)^-1)^-1 + R[2] = ((RK[19])^-1 + (P12_13+R[1])^-1)^-1 + R[3] = ((T[22])^-1 + (P10_11)^-1)^-1 + R[4] = ((RK[3])^-1 + (1e-9+1e9*(1.0-Train.TR1.Value))^-1)^-1 + R[5] = ((P3_P14)^-1 + (RK[1]+P1_3)^-1)^-1 + R[6] = ((RK[7])*(P6_7)+(RK[7])*(P5_6)+(P6_7)*(P5_6))/(RK[7]) + R[7] = ((RK[7])*(P6_7)+(RK[7])*(P5_6)+(P6_7)*(P5_6))/(P6_7) + R[8] = ((RK[7])*(P6_7)+(RK[7])*(P5_6)+(P6_7)*(P5_6))/(P5_6) + R[9] = ((RK[9])^-1 + (R[8])^-1)^-1 + R[10] = ((RK[5])^-1 + (R[7])^-1)^-1 + R[11] = ((R[9])*(R[6])+(R[9])*(P7_8)+(R[6])*(P7_8))/(R[9]) + R[12] = ((R[9])*(R[6])+(R[9])*(P7_8)+(R[6])*(P7_8))/(R[6]) + R[13] = ((R[9])*(R[6])+(R[9])*(P7_8)+(R[6])*(P7_8))/(P7_8) + R[14] = ((R[13])^-1 + (R[10])^-1)^-1 + R[15] = ((R[12])^-1 + (RK[11])^-1)^-1 + R[16] = ((RK[15]+T[20])*(T[19]+R[2]+R[5])+(RK[15]+T[20])*(R[3]+P9_10)+(T[19]+R[2]+R[5])*(R[3]+P9_10))/(RK[15]+T[20]) + R[17] = ((RK[15]+T[20])*(T[19]+R[2]+R[5])+(RK[15]+T[20])*(R[3]+P9_10)+(T[19]+R[2]+R[5])*(R[3]+P9_10))/(T[19]+R[2]+R[5]) + R[18] = ((RK[15]+T[20])*(T[19]+R[2]+R[5])+(RK[15]+T[20])*(R[3]+P9_10)+(T[19]+R[2]+R[5])*(R[3]+P9_10))/(R[3]+P9_10) + R[19] = ((RK[13])^-1 + (R[17])^-1)^-1 + R[20] = ((R[18])^-1 + (R[4])^-1)^-1 + R[21] = ((P4_5)*(P3_4)+(P4_5)*(RK[5]+T[1])+(P3_4)*(RK[5]+T[1]))/(P4_5) + R[22] = ((P4_5)*(P3_4)+(P4_5)*(RK[5]+T[1])+(P3_4)*(RK[5]+T[1]))/(P3_4) + R[23] = ((P4_5)*(P3_4)+(P4_5)*(RK[5]+T[1])+(P3_4)*(RK[5]+T[1]))/(RK[5]+T[1]) + R[24] = ((R[14])^-1 + (R[22])^-1)^-1 + R[25] = ((R[20])^-1 + (R[21])^-1)^-1 + R[26] = ((R[24])*(R[11])+(R[24])*(R[23])+(R[11])*(R[23]))/(R[24]) + R[27] = ((R[24])*(R[11])+(R[24])*(R[23])+(R[11])*(R[23]))/(R[11]) + R[28] = ((R[24])*(R[11])+(R[24])*(R[23])+(R[11])*(R[23]))/(R[23]) + R[29] = ((R[25])^-1 + (R[27])^-1)^-1 + R[30] = ((R[28])^-1 + (R[15])^-1)^-1 + R[31] = ((R[16])*(R[19])+(R[16])*(P8_9)+(R[19])*(P8_9))/(R[16]) + R[32] = ((R[16])*(R[19])+(R[16])*(P8_9)+(R[19])*(P8_9))/(R[19]) + R[33] = ((R[16])*(R[19])+(R[16])*(P8_9)+(R[19])*(P8_9))/(P8_9) + R[34] = ((R[29])^-1 + (R[33])^-1)^-1 + R[35] = ((R[30])^-1 + (R[31])^-1)^-1 + R[36] = ((R[32])^-1 + (R[26])^-1)^-1 + R[37] = ((R[36]+R[35])^-1 + (R[34])^-1)^-1 + return R[37] +end + +function TRAIN_SYSTEM.R2C1(Train) + local RK = Train.RheostatController + local T = Train.PositionSwitch + R[1] = ((T[16])^-1 + (P24_25)^-1)^-1 + R[2] = ((RK[18])^-1 + (P25_26)^-1)^-1 + R[3] = ((RK[4])^-1 + (1e-9+1e9*(1.0-Train.TR2.Value))^-1)^-1 + R[4] = ((P76_P27)^-1 + (RK[27])^-1)^-1 + R[5] = ((P17_P76+R[4])^-1 + (RK[2]+P16_17)^-1)^-1 + R[6] = ((RK[8])*(P20_21)+(RK[8])*(P19_20)+(P20_21)*(P19_20))/(RK[8]) + R[7] = ((RK[8])*(P20_21)+(RK[8])*(P19_20)+(P20_21)*(P19_20))/(P20_21) + R[8] = ((RK[8])*(P20_21)+(RK[8])*(P19_20)+(P20_21)*(P19_20))/(P19_20) + R[9] = ((RK[10])^-1 + (R[8])^-1)^-1 + R[10] = ((RK[6])^-1 + (R[7])^-1)^-1 + R[11] = ((RK[12])*(P22_23)+(RK[12])*(P21_22)+(P22_23)*(P21_22))/(RK[12]) + R[12] = ((RK[12])*(P22_23)+(RK[12])*(P21_22)+(P22_23)*(P21_22))/(P22_23) + R[13] = ((RK[12])*(P22_23)+(RK[12])*(P21_22)+(P22_23)*(P21_22))/(P21_22) + R[14] = ((RK[14])^-1 + (R[13])^-1)^-1 + R[15] = ((R[12])^-1 + (R[9])^-1)^-1 + R[16] = ((R[15])*(R[11])+(R[15])*(R[6])+(R[11])*(R[6]))/(R[15]) + R[17] = ((R[15])*(R[11])+(R[15])*(R[6])+(R[11])*(R[6]))/(R[11]) + R[18] = ((R[15])*(R[11])+(R[15])*(R[6])+(R[11])*(R[6]))/(R[6]) + R[19] = ((R[18])^-1 + (R[14])^-1)^-1 + R[20] = ((R[17])^-1 + (R[10])^-1)^-1 + R[21] = ((RK[6]+T[15])*(P18_19)+(RK[6]+T[15])*(P17_18)+(P18_19)*(P17_18))/(RK[6]+T[15]) + R[22] = ((RK[6]+T[15])*(P18_19)+(RK[6]+T[15])*(P17_18)+(P18_19)*(P17_18))/(P18_19) + R[23] = ((RK[6]+T[15])*(P18_19)+(RK[6]+T[15])*(P17_18)+(P18_19)*(P17_18))/(P17_18) + R[24] = ((R[20])^-1 + (R[23])^-1)^-1 + R[25] = ((R[22])^-1 + (R[3])^-1)^-1 + R[26] = ((R[16])*(R[19])+(R[16])*(P23_24+R[1])+(R[19])*(P23_24+R[1]))/(R[16]) + R[27] = ((R[16])*(R[19])+(R[16])*(P23_24+R[1])+(R[19])*(P23_24+R[1]))/(R[19]) + R[28] = ((R[16])*(R[19])+(R[16])*(P23_24+R[1])+(R[19])*(P23_24+R[1]))/(P23_24+R[1]) + R[29] = ((RK[16]+T[14])^-1 + (R[26])^-1)^-1 + R[30] = ((R[28])^-1 + (R[24])^-1)^-1 + R[31] = ((R[27])*(R[30])+(R[27])*(R[21])+(R[30])*(R[21]))/(R[27]) + R[32] = ((R[27])*(R[30])+(R[27])*(R[21])+(R[30])*(R[21]))/(R[30]) + R[33] = ((R[27])*(R[30])+(R[27])*(R[21])+(R[30])*(R[21]))/(R[21]) + R[34] = ((R[29])^-1 + (R[33])^-1)^-1 + R[35] = ((R[25])^-1 + (R[31])^-1)^-1 + R[36] = ((R[32])*(R[34])+(R[32])*(R[2])+(R[34])*(R[2]))/(R[32]) + R[37] = ((R[32])*(R[34])+(R[32])*(R[2])+(R[34])*(R[2]))/(R[34]) + R[38] = ((R[32])*(R[34])+(R[32])*(R[2])+(R[34])*(R[2]))/(R[2]) + R[39] = ((R[35])^-1 + (R[38])^-1)^-1 + R[40] = ((R[37])^-1 + (R[5]+T[21])^-1)^-1 + R[41] = ((R[36])^-1 + (R[39]+R[40])^-1)^-1 + return R[41] +end + +function TRAIN_SYSTEM.R2C2(Train) + local RK = Train.RheostatController + local T = Train.PositionSwitch + R[1] = ((T[16])^-1 + (P24_25)^-1)^-1 + R[2] = ((RK[18])^-1 + (P25_26)^-1)^-1 + R[3] = ((RK[4])^-1 + (1e-9+1e9*(1.0-Train.TR2.Value))^-1)^-1 + R[4] = ((P76_P27)^-1 + (RK[27])^-1)^-1 + R[5] = ((P17_P76+R[4])^-1 + (RK[2]+P16_17)^-1)^-1 + R[6] = ((RK[8])*(P20_21)+(RK[8])*(P19_20)+(P20_21)*(P19_20))/(RK[8]) + R[7] = ((RK[8])*(P20_21)+(RK[8])*(P19_20)+(P20_21)*(P19_20))/(P20_21) + R[8] = ((RK[8])*(P20_21)+(RK[8])*(P19_20)+(P20_21)*(P19_20))/(P19_20) + R[9] = ((RK[10])^-1 + (R[8])^-1)^-1 + R[10] = ((RK[6])^-1 + (R[7])^-1)^-1 + R[11] = ((R[6])*(R[9])+(R[6])*(P21_22)+(R[9])*(P21_22))/(R[6]) + R[12] = ((R[6])*(R[9])+(R[6])*(P21_22)+(R[9])*(P21_22))/(R[9]) + R[13] = ((R[6])*(R[9])+(R[6])*(P21_22)+(R[9])*(P21_22))/(P21_22) + R[14] = ((RK[12])^-1 + (R[11])^-1)^-1 + R[15] = ((R[10])^-1 + (R[13])^-1)^-1 + R[16] = ((RK[14])*(P22_23)+(RK[14])*(P23_24+R[1])+(P22_23)*(P23_24+R[1]))/(RK[14]) + R[17] = ((RK[14])*(P22_23)+(RK[14])*(P23_24+R[1])+(P22_23)*(P23_24+R[1]))/(P22_23) + R[18] = ((RK[14])*(P22_23)+(RK[14])*(P23_24+R[1])+(P22_23)*(P23_24+R[1]))/(P23_24+R[1]) + R[19] = ((RK[16]+T[14])^-1 + (R[17])^-1)^-1 + R[20] = ((R[14])^-1 + (R[18])^-1)^-1 + R[21] = ((RK[6]+T[15])*(P18_19)+(RK[6]+T[15])*(P17_18)+(P18_19)*(P17_18))/(RK[6]+T[15]) + R[22] = ((RK[6]+T[15])*(P18_19)+(RK[6]+T[15])*(P17_18)+(P18_19)*(P17_18))/(P18_19) + R[23] = ((RK[6]+T[15])*(P18_19)+(RK[6]+T[15])*(P17_18)+(P18_19)*(P17_18))/(P17_18) + R[24] = ((R[15])^-1 + (R[23])^-1)^-1 + R[25] = ((R[22])^-1 + (R[3])^-1)^-1 + R[26] = ((R[12])*(R[21])+(R[12])*(R[24])+(R[21])*(R[24]))/(R[12]) + R[27] = ((R[12])*(R[21])+(R[12])*(R[24])+(R[21])*(R[24]))/(R[21]) + R[28] = ((R[12])*(R[21])+(R[12])*(R[24])+(R[21])*(R[24]))/(R[24]) + R[29] = ((R[20])^-1 + (R[27])^-1)^-1 + R[30] = ((R[26])^-1 + (R[25])^-1)^-1 + R[31] = ((R[5]+T[21]+R[2])*(R[19])+(R[5]+T[21]+R[2])*(R[16])+(R[19])*(R[16]))/(R[5]+T[21]+R[2]) + R[32] = ((R[5]+T[21]+R[2])*(R[19])+(R[5]+T[21]+R[2])*(R[16])+(R[19])*(R[16]))/(R[19]) + R[33] = ((R[5]+T[21]+R[2])*(R[19])+(R[5]+T[21]+R[2])*(R[16])+(R[19])*(R[16]))/(R[16]) + R[34] = ((R[29])^-1 + (R[31])^-1)^-1 + R[35] = ((R[30])^-1 + (R[33])^-1)^-1 + R[36] = ((R[32])^-1 + (R[28])^-1)^-1 + R[37] = ((R[36]+R[34])^-1 + (R[35])^-1)^-1 + return R[37] +end + +function TRAIN_SYSTEM.R3(Train) + local RK = Train.RheostatController + local T = Train.PositionSwitch + R[1] = ((P13_P42)^-1 + (RK[20])^-1)^-1 + R[2] = ((R[1])^-1 + (P13_P33+P33_P42)^-1)^-1 + return R[2] +end + +function TRAIN_SYSTEM.S1(Train) + local RK = Train.RheostatController + local T = Train.PositionSwitch + R[1] = ((L76_P31)^-1 + (RK[21])^-1)^-1 + R[2] = ((RK[23])^-1 + (P31_P30+R[1])^-1)^-1 + R[3] = ((P30_P29+R[2])^-1 + (RK[25])^-1)^-1 + return P29_P28+R[3] +end + +function TRAIN_SYSTEM.S2(Train) + local RK = Train.RheostatController + local T = Train.PositionSwitch + R[1] = ((L74_P37)^-1 + (RK[22])^-1)^-1 + R[2] = ((RK[24])^-1 + (P37_P36+R[1])^-1)^-1 + R[3] = ((P36_P35+R[2])^-1 + (RK[26])^-1)^-1 + return P35_K2+R[3] +end + diff --git a/lua/metrostroi/systems/sys_gen_res_717.lua b/lua/metrostroi/systems/sys_gen_res_717.lua new file mode 100644 index 0000000..d0ce3ec --- /dev/null +++ b/lua/metrostroi/systems/sys_gen_res_717.lua @@ -0,0 +1,217 @@ +-------------------------------------------------------------------------------- +-- Resistor arrays calculations +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +--[[ +Rxx PS PP1 PP2 PT PS1 PS2 PT1 PT2 S1 S2 +R01 = 4.263 0.000 0.000 2.270 2.468 1.795 1.100 1.170 0.007 0.007 +R02 = 4.263 0.000 0.000 2.270 2.468 1.795 1.100 1.170 0.007 0.007 +R03 = 3.318 0.000 0.000 2.058 1.523 1.795 0.888 1.170 0.021 0.021 +R04 = 2.607 0.000 0.000 1.755 1.523 1.084 0.888 0.867 0.049 0.049 +R05 = 2.122 0.000 0.000 1.596 1.038 1.084 0.729 0.867 0.112 0.112 +R06 = 1.978 0.000 0.000 1.538 0.894 1.084 0.671 0.867 0.112 0.112 +R07 = 1.858 0.144 0.000 1.477 0.894 0.964 0.671 0.805 0.112 0.112 +R08 = 1.668 0.144 0.120 1.371 0.894 0.774 0.671 0.700 0.112 0.112 +R09 = 1.548 0.144 0.310 1.319 0.774 0.774 0.619 0.700 0.112 0.112 +R10 = 1.328 0.264 0.310 1.211 0.554 0.774 0.510 0.700 0.112 0.112 +R11 = 1.108 0.484 0.310 1.075 0.554 0.554 0.510 0.564 0.112 0.112 +R12 = 0.888 0.484 0.530 0.922 0.554 0.334 0.510 0.411 0.112 0.112 +R13 = 0.668 0.484 0.750 0.793 0.334 0.334 0.382 0.411 0.112 0.112 +R14 = 0.478 0.704 0.750 0.661 0.144 0.334 0.250 0.411 0.112 0.112 +R15 = 0.288 0.894 0.750 0.512 0.144 0.144 0.250 0.262 0.112 0.112 +R16 = 0.144 0.894 0.940 0.420 0.144 0.000 0.250 0.170 0.112 0.112 +R17 = 0.000 0.894 0.940 0.335 0.000 0.000 0.165 0.170 0.112 0.112 +R18 = 0.000 0.894 0.940 0.335 0.000 0.000 0.165 0.170 0.112 0.112 +]]-- + +-------------------------------------------------------------------------------- +-- Resistor arrays calculations - auto-generated by gen.lua +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("Gen_Res_717") + +local R = {} + +local P13_12 +local P12_11 + +local P10_9 +local P9_8 +local P8_7 + +local L8_P1 +local L8_6 +local P11_10 + +local P27 +local L12_P76 +local P24_25 + +local P4_6 +local P6_7 + +local P3_4 + +local P17_18 +local P18_20 + +local P20_21 +local P21_22 + +local P22_23 +local P23_24 +local P25_26 + +local P29_P28 +local P30_P29 +local P31_P30 +local L76_P31 + +local P35_L18 +local P36_P35 +local P37_P36 +local L74_P37 +-- + +function TRAIN_SYSTEM.InitializeResistances_81_717(Train) + P13_12 = Train.KF_47A["P13_12"] + P12_11 = Train.KF_47A["P12_11"] + + P10_9 = Train.KF_47A["P10_9"] + P9_8 = Train.KF_47A["P9_8"] + P8_7 = Train.KF_47A["P8_7"] + + L8_P1 = Train.KF_47A["L8_P1"] + L8_6 = Train.KF_47A["L8_6"] + P11_10 = Train.KF_47A["P11_10"] + + P27 = Train.KF_47A["P27"] + L12_P76 = Train.KF_47A["L12_P76"] + P24_25 = Train.KF_47A["P24_25"] + + P4_6 = Train.KF_47A["P4_6"] + P6_7 = Train.KF_47A["P6_7"] + + P3_4 = Train.KF_47A["P3_4"] + + P17_18 = Train.KF_47A["P17_18"] + P18_20 = Train.KF_47A["P18_20"] + + P20_21 = Train.KF_47A["P20_21"] + P21_22 = Train.KF_47A["P21_22"] + + P22_23 = Train.KF_47A["P22_23"] + P23_24 = Train.KF_47A["P23_24"] + P25_26 = Train.KF_47A["P25_26"] + + P29_P28 = Train.KF_50A["P29-P28"] + P30_P29 = Train.KF_50A["P30-P29"] + P31_P30 = Train.KF_50A["P31-P30"] + L76_P31 = Train.KF_50A["L76-P31"] + + P35_L18 = Train.KF_50A["P35-L18"] + P36_P35 = Train.KF_50A["P36-P35"] + P37_P36 = Train.KF_50A["P37-P36"] + L74_P37 = Train.KF_50A["L74-P37"] +end + +function TRAIN_SYSTEM.R1C1(Train) + local RK = Train.RheostatController + local PM = Train.PositionSwitch.RPM + local PT = Train.PositionSwitch.RPT + R[1] = ((PM)^-1 + (P11_10)^-1)^-1 + R[2] = ((RK[17])^-1 + (P12_11)^-1)^-1 + R[3] = ((RK[19])^-1 + (R[2]+P13_12)^-1)^-1 + R[4] = ((RK[5])^-1 + (RK[3]+P3_4)^-1)^-1 + R[5] = ((RK[7])^-1 + (R[4]+P4_6)^-1)^-1 + R[6] = ((R[5]+P6_7)^-1 + (RK[9])^-1)^-1 + R[7] = ((R[6]+P8_7)^-1 + (RK[11])^-1)^-1 + R[8] = ((R[7]+P9_8)^-1 + (RK[13])^-1)^-1 + R[9] = ((RK[15] + PM)^-1 + (R[8]+P10_9+R[1])^-1)^-1 + R[10] = ((L8_P1)^-1 + (L8_6+RK[1])^-1)^-1 + R[11] = ((R[9]+R[3])^-1 + (R[10]+PT)^-1)^-1 + return R[11] +end + +function TRAIN_SYSTEM.R1C2(Train) + local RK = Train.RheostatController + local PM = Train.PositionSwitch.RPM + local PT = Train.PositionSwitch.RPT + R[1] = ((PM)^-1 + (P11_10)^-1)^-1 + R[2] = ((RK[17])^-1 + (P12_11)^-1)^-1 + R[3] = ((RK[19])^-1 + (R[2]+P13_12)^-1)^-1 + R[4] = ((L8_P1)^-1 + (L8_6+RK[1])^-1)^-1 + R[5] = ((RK[15] + PM)^-1 + (R[3]+PT+R[4])^-1)^-1 + R[6] = ((RK[13])^-1 + (R[5]+P10_9+R[1])^-1)^-1 + R[7] = ((RK[11])^-1 + (R[6]+P9_8)^-1)^-1 + R[8] = ((RK[9])^-1 + (R[7]+P8_7)^-1)^-1 + R[9] = ((RK[7])^-1 + (R[8]+P6_7)^-1)^-1 + R[10] = ((R[9]+P4_6)^-1 + (RK[5])^-1)^-1 + R[11] = ((R[10]+P3_4)^-1 + (RK[3])^-1)^-1 + return R[11] +end + +function TRAIN_SYSTEM.R2C1(Train) + local RK = Train.RheostatController + local PM = Train.PositionSwitch.RPM + local PT = Train.PositionSwitch.RPT + R[1] = ((PM)^-1 + (P24_25)^-1)^-1 + R[2] = ((RK[18])^-1 + (P25_26)^-1)^-1 + R[3] = ((RK[6])^-1 + (RK[4]+P17_18)^-1)^-1 + R[4] = ((RK[8])^-1 + (R[3]+P18_20)^-1)^-1 + R[5] = ((RK[10])^-1 + (R[4]+P20_21)^-1)^-1 + R[6] = ((RK[12])^-1 + (R[5]+P21_22)^-1)^-1 + R[7] = ((RK[14])^-1 + (R[6]+P22_23)^-1)^-1 + R[8] = ((RK[16]+PM)^-1 + (R[7]+P23_24+R[1])^-1)^-1 + R[9] = ((P27)^-1 + (L12_P76+RK[2])^-1)^-1 + R[10] = ((R[8]+R[2])^-1 + (R[9]+PT)^-1)^-1 + return R[10] +end + +function TRAIN_SYSTEM.R2C2(Train) + local RK = Train.RheostatController + local PM = Train.PositionSwitch.RPM + local PT = Train.PositionSwitch.RPT + R[1] = ((PM)^-1 + (P24_25)^-1)^-1 + R[2] = ((RK[18])^-1 + (P25_26)^-1)^-1 + R[3] = ((P27)^-1 + (L12_P76+RK[2])^-1)^-1 + R[4] = ((RK[16]+PM)^-1 + (R[3]+PT+R[2])^-1)^-1 + R[5] = ((RK[14])^-1 + (R[4]+P23_24+R[1])^-1)^-1 + R[6] = ((RK[12])^-1 + (R[5]+P22_23)^-1)^-1 + R[7] = ((RK[10])^-1 + (R[6]+P21_22)^-1)^-1 + R[8] = ((RK[8])^-1 + (R[7]+P20_21)^-1)^-1 + R[9] = ((RK[6])^-1 + (R[8]+P18_20)^-1)^-1 + R[10] = ((R[9]+P17_18)^-1 + (RK[4])^-1)^-1 + return R[10] +end + +function TRAIN_SYSTEM.R3(Train) + local RK = Train.RheostatController + local PM = Train.PositionSwitch.RPM + local PT = Train.PositionSwitch.RPT + R[1] = ((P13_P42)^-1 + (RK[20])^-1)^-1 + R[2] = ((R[1])^-1 + (P13_P33+P33_P42)^-1)^-1 + return R[2] +end + +function TRAIN_SYSTEM.S1(Train) + local RK = Train.RheostatController + local PM = Train.PositionSwitch.RPM + local PT = Train.PositionSwitch.RPT + R[1] = ((L76_P31)^-1 + (RK[21])^-1)^-1 + R[2] = ((RK[23])^-1 + (P31_P30+R[1])^-1)^-1 + R[3] = ((P30_P29+R[2])^-1 + (RK[25])^-1)^-1 + return P29_P28+R[3] +end + +function TRAIN_SYSTEM.S2(Train) + local RK = Train.RheostatController + local PM = Train.PositionSwitch.RPM + local PT = Train.PositionSwitch.RPT + R[1] = ((L74_P37)^-1 + (RK[22])^-1)^-1 + R[2] = ((RK[24])^-1 + (P37_P36+R[1])^-1)^-1 + R[3] = ((P36_P35+R[2])^-1 + (RK[26])^-1)^-1 + return P35_L18+R[3] +end + diff --git a/lua/metrostroi/systems/sys_gen_res_717_s.lua b/lua/metrostroi/systems/sys_gen_res_717_s.lua new file mode 100644 index 0000000..79d3298 --- /dev/null +++ b/lua/metrostroi/systems/sys_gen_res_717_s.lua @@ -0,0 +1,213 @@ +-------------------------------------------------------------------------------- +-- Resistor arrays calculations +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +--[[ +Rxx PS PP1 PP2 PT PS1 PS2 PT1 PT2 S1 S2 +R01 = 4.263 0.000 0.000 2.261 2.468 1.795 1.159 1.102 0.049 0.049 +R02 = 4.263 0.000 0.000 2.261 2.468 1.795 1.159 1.102 0.049 0.049 +R03 = 3.318 0.000 0.000 2.028 1.523 1.795 0.926 1.102 0.049 0.049 +R04 = 2.607 0.000 0.000 1.739 1.523 1.084 0.926 0.813 0.049 0.049 +R05 = 2.122 0.000 0.000 1.567 1.038 1.084 0.754 0.813 0.112 0.112 +R06 = 1.978 0.000 0.000 1.506 0.894 1.084 0.693 0.813 0.112 0.112 +R07 = 1.858 0.144 0.000 1.446 0.894 0.964 0.693 0.753 0.112 0.112 +R08 = 1.668 0.144 0.120 1.343 0.894 0.774 0.693 0.650 0.112 0.112 +R09 = 1.548 0.144 0.310 1.288 0.774 0.774 0.637 0.650 0.112 0.112 +R10 = 1.328 0.264 0.310 1.173 0.554 0.774 0.523 0.650 0.112 0.112 +R11 = 1.108 0.484 0.310 1.039 0.554 0.554 0.523 0.517 0.112 0.112 +R12 = 0.888 0.484 0.530 0.886 0.554 0.334 0.523 0.363 0.112 0.112 +R13 = 0.668 0.484 0.750 0.752 0.334 0.334 0.389 0.363 0.112 0.112 +R14 = 0.478 0.704 0.750 0.616 0.144 0.334 0.253 0.363 0.112 0.112 +R15 = 0.288 0.894 0.750 0.466 0.144 0.144 0.253 0.213 0.112 0.112 +R16 = 0.144 0.894 0.940 0.361 0.144 0.000 0.253 0.108 0.112 0.112 +R17 = 0.000 0.894 0.940 0.275 0.000 0.000 0.167 0.108 0.112 0.112 +R18 = 0.000 0.894 0.940 0.275 0.000 0.000 0.167 0.108 0.112 0.112 +]]-- + +-------------------------------------------------------------------------------- +-- Resistor arrays calculations - auto-generated by gen.lua +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("Gen_Res_717_SPB") + +local R = {} + +local P13_12 +local P12_11 + +local P10_9 +local P9_8 +local P8_7 + +local L8_P1 +local L8_6 +local P11_10 + +local P27 +local L12_P76 +local P24_25 + +local P4_6 +local P6_7 + +local P3_4 + +local P17_18 +local P18_20 + +local P20_21 +local P21_22 + +local P22_23 +local P23_24 +local P25_26 + +local P29_P28 +local P30_P29 +local P31_P30 +local L76_P31 + +local P35_L18 +local P36_P35 +local P37_P36 +local L74_P37 +-- + +function TRAIN_SYSTEM.InitializeResistances_81_717(Train) + P13_12 = Train.KF_47A["P13_12"] + P12_11 = Train.KF_47A["P12_11"] + + P10_9 = Train.KF_47A["P10_9"] + P9_8 = Train.KF_47A["P9_8"] + P8_7 = Train.KF_47A["P8_7"] + + L8_P1 = Train.KF_47A["L8_P1"] + L8_6 = Train.KF_47A["L8_6"] + P11_10 = Train.KF_47A["P11_10"] + + P27 = Train.KF_47A["P27"] + L12_P76 = Train.KF_47A["L12_P76"] + P24_25 = Train.KF_47A["P24_25"] + + P4_6 = Train.KF_47A["P4_6"] + P6_7 = Train.KF_47A["P6_7"] + + P3_4 = Train.KF_47A["P3_4"] + + P17_18 = Train.KF_47A["P17_18"] + P18_20 = Train.KF_47A["P18_20"] + + P20_21 = Train.KF_47A["P20_21"] + P21_22 = Train.KF_47A["P21_22"] + + P22_23 = Train.KF_47A["P22_23"] + P23_24 = Train.KF_47A["P23_24"] + P25_26 = Train.KF_47A["P25_26"] + + P29_P28 = Train.KF_50A["P29-P28"] + P30_P29 = Train.KF_50A["P30-P29"] + P31_P30 = Train.KF_50A["P31-P30"] + L76_P31 = Train.KF_50A["L76-P31"] + + P35_L18 = Train.KF_50A["P35-L18"] + P36_P35 = Train.KF_50A["P36-P35"] + P37_P36 = Train.KF_50A["P37-P36"] + L74_P37 = Train.KF_50A["L74-P37"] +end + +function TRAIN_SYSTEM.R1C1(Train) + local RK = Train.RheostatController + local PM = Train.PositionSwitch.RPM + local PT = Train.PositionSwitch.RPT + R[1] = ((PM)^-1 + (P11_10)^-1)^-1 + R[2] = ((RK[17])^-1 + (P12_11)^-1)^-1 + R[3] = ((RK[19])^-1 + (R[2]+P13_12)^-1)^-1 + R[4] = ((RK[5])^-1 + (RK[3]+P3_4)^-1)^-1 + R[5] = ((RK[7])^-1 + (R[4]+P4_6)^-1)^-1 + R[6] = ((R[5]+P6_7)^-1 + (RK[9])^-1)^-1 + R[7] = ((R[6]+P8_7)^-1 + (RK[11])^-1)^-1 + R[8] = ((R[7]+P9_8)^-1 + (RK[13])^-1)^-1 + R[9] = ((RK[15] + PM)^-1 + (R[8]+P10_9+R[1])^-1)^-1 + R[10] = ((L8_P1)^-1 + (L8_6+RK[1])^-1)^-1 + R[11] = ((R[9]+R[3])^-1 + (R[10]+PT)^-1)^-1 + return R[11] +end + +function TRAIN_SYSTEM.R1C2(Train) + local RK = Train.RheostatController + local PM = Train.PositionSwitch.RPM + local PT = Train.PositionSwitch.RPT + R[1] = ((PM)^-1 + (P11_10)^-1)^-1 + R[2] = ((RK[17])^-1 + (P12_11)^-1)^-1 + R[3] = ((RK[19])^-1 + (R[2]+P13_12)^-1)^-1 + R[4] = ((L8_P1)^-1 + (L8_6+RK[1])^-1)^-1 + R[5] = ((RK[15] + PM)^-1 + (R[3]+PT+R[4])^-1)^-1 + R[6] = ((RK[13])^-1 + (R[5]+P10_9+R[1])^-1)^-1 + R[7] = ((RK[11])^-1 + (R[6]+P9_8)^-1)^-1 + R[8] = ((RK[9])^-1 + (R[7]+P8_7)^-1)^-1 + R[9] = ((RK[7])^-1 + (R[8]+P6_7)^-1)^-1 + R[10] = ((R[9]+P4_6)^-1 + (RK[5])^-1)^-1 + R[11] = ((R[10]+P3_4)^-1 + (RK[3])^-1)^-1 + return R[11] +end + +function TRAIN_SYSTEM.R2C1(Train) + local RK = Train.RheostatController + local PM = Train.PositionSwitch.RPM + local PT = Train.PositionSwitch.RPT + R[1] = ((PM)^-1 + (P24_25)^-1)^-1 + R[2] = ((RK[18])^-1 + (P25_26)^-1)^-1 + R[3] = ((RK[6])^-1 + (RK[4]+P17_18)^-1)^-1 + R[4] = ((RK[8])^-1 + (R[3]+P18_20)^-1)^-1 + R[5] = ((RK[10])^-1 + (R[4]+P20_21)^-1)^-1 + R[6] = ((RK[12])^-1 + (R[5]+P21_22)^-1)^-1 + R[7] = ((RK[14])^-1 + (R[6]+P22_23)^-1)^-1 + R[8] = ((RK[16]+PM)^-1 + (R[7]+P23_24+R[1])^-1)^-1 + R[9] = ((P27)^-1 + (L12_P76+RK[2])^-1)^-1 + R[10] = ((R[8]+R[2])^-1 + (R[9]+PT)^-1)^-1 + return R[10] +end + +function TRAIN_SYSTEM.R2C2(Train) + local RK = Train.RheostatController + local PM = Train.PositionSwitch.RPM + local PT = Train.PositionSwitch.RPT + R[1] = ((PM)^-1 + (P24_25)^-1)^-1 + R[2] = ((RK[18])^-1 + (P25_26)^-1)^-1 + R[3] = ((P27)^-1 + (L12_P76+RK[2])^-1)^-1 + R[4] = ((RK[16]+PM)^-1 + (R[3]+PT+R[2])^-1)^-1 + R[5] = ((RK[14])^-1 + (R[4]+P23_24+R[1])^-1)^-1 + R[6] = ((RK[12])^-1 + (R[5]+P22_23)^-1)^-1 + R[7] = ((RK[10])^-1 + (R[6]+P21_22)^-1)^-1 + R[8] = ((RK[8])^-1 + (R[7]+P20_21)^-1)^-1 + R[9] = ((RK[6])^-1 + (R[8]+P18_20)^-1)^-1 + R[10] = ((R[9]+P17_18)^-1 + (RK[4])^-1)^-1 + return R[10] +end + +function TRAIN_SYSTEM.R3(Train) + local RK = Train.RheostatController + local PM = Train.PositionSwitch.RPM + local PT = Train.PositionSwitch.RPT + R[1] = ((P13_P42)^-1 + (RK[20])^-1)^-1 + R[2] = ((R[1])^-1 + (P13_P33+P33_P42)^-1)^-1 + return R[2] +end + +function TRAIN_SYSTEM.S1(Train) + local RK = Train.RheostatController + local PM = Train.PositionSwitch.RPM + local PT = Train.PositionSwitch.RPT + R[1] = ((L76_P31)^-1 + (RK[21])^-1)^-1 + return R[1]+P29_P28+P30_P29+P31_P30 +end + +function TRAIN_SYSTEM.S2(Train) + local RK = Train.RheostatController + local PM = Train.PositionSwitch.RPM + local PT = Train.PositionSwitch.RPT + R[1] = ((L74_P37)^-1 + (RK[22])^-1)^-1 + return R[1]+P37_P36+P35_L18+P36_P35 +end + diff --git a/lua/metrostroi/systems/sys_horn.lua b/lua/metrostroi/systems/sys_horn.lua new file mode 100644 index 0000000..4b29cea --- /dev/null +++ b/lua/metrostroi/systems/sys_horn.lua @@ -0,0 +1,51 @@ +-------------------------------------------------------------------------------- +-- Train horn +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("Horn") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.Active = false +end + +function TRAIN_SYSTEM:Outputs() --"21", + return { "Active" } +end + +function TRAIN_SYSTEM:Inputs() + return { "Engage","NewType" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Engage" then + self.Active = value > 0.5 + self.Train:SetNW2Bool("HornState",self.Active) + end +end + +function TRAIN_SYSTEM:Think() +end +function TRAIN_SYSTEM:ClientThink(dT) + local active = self.Train:GetNW2Bool("HornState",false) + self.Active = self.Active or false + + -- Calculate pitch + local absolutePitch = 1 - math.exp(-10*self.Train:GetPackedRatio("TLPressure")) + local absoluteVolume = 1 - math.exp(-4*self.Train:GetPackedRatio("TLPressure")) + local pitch = 1 + -- Play horn sound + self.Train:SetSoundState("horn",self.Active and absoluteVolume or 0,absolutePitch*pitch) + --[[ + if (self.Active ~= active) and (not active) then + if absolutePitch > 0.2 then + self.Train:PlayOnce(self.Train:GetNW2Bool("HornType",false) and "horn3_end" or "horn3_end","cabin",1.09,101.5*absolutePitch*pitch) --0.85 + end + end]] + if (self.Active ~= active) and (active) then + self.Train.Transient = -5.0 + end + self.Active = active +end diff --git a/lua/metrostroi/systems/sys_igla_cbki1.lua b/lua/metrostroi/systems/sys_igla_cbki1.lua new file mode 100644 index 0000000..bca7559 --- /dev/null +++ b/lua/metrostroi/systems/sys_igla_cbki1.lua @@ -0,0 +1,562 @@ +-------------------------------------------------------------------------------- +-- ASOTP "IGLA" white indicator unit for 81-720 +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("IGLA_CBKI1") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.Log = {} + self.States = {} + self.Messages = {} + self.MessagesCount = 0 + if not self.Train.IGLA1 then + self.Train:LoadSystem("IGLA1","Relay","Switch",{bass = true}) + self.Train:LoadSystem("IGLA2","Relay","Switch",{bass = true}) + self.Train:LoadSystem("IGLA3","Relay","Switch",{bass = true}) + self.Train:LoadSystem("IGLA4","Relay","Switch",{bass = true}) + end + self.TriggerNames = { + "IGLA1", + "IGLA2", + "IGLA3", + "IGLA4", + } + self.Triggers = {} + self.State = 0 + self.Timer = 0 + if not TURBOSTROI then + self.BVolt = 3.0+math.random()*0.4 + self.Train:SetNW2Int("IGLA:BVolt",self.BVolt*10) + end +end +if TURBOSTROI then return end +function TRAIN_SYSTEM:Inputs() + return { "" } +end +if CLIENT then + local Chars = { + full = utf8.char(0x2588), + lhalf = utf8.char(0x258C), + rhalf = utf8.char(0x2590), + shade = utf8.char(0x2592), + [1] = utf8.char(0x2776), + [2] = utf8.char(0x2777), + [3] = utf8.char(0x2778), + [4] = utf8.char(0x2779), + [5] = utf8.char(0x277A), + [6] = utf8.char(0x277B), + [7] = utf8.char(0x277C), + [8] = utf8.char(0x277D), + [9] = utf8.char(0x277E), + [0] = utf8.char(0x24FF), + } + local Converter = { + ["\1"] = Chars[1], + ["\2"] = Chars[2], + ["\3"] = Chars[3], + ["\4"] = Chars[4], + ["\5"] = Chars[5], + ["\6"] = Chars[6], + ["\7"] = Chars[7], + ["\8"] = Chars[8], + ["\9"] = Chars[9], + ["\0"] = Chars[0], + } + local function FormatEnd1(num) + if num == 1 then return " " + elseif 1 < num and num < 5 then return "а" end + return "ов" + end + local function FormatEnd2(num) + if num == 1 then return "ка" + elseif 1 < num and num < 5 then return "ки" end + return "ок" + end + function TRAIN_SYSTEM:PrintText(x,y,text,col) + local str = {utf8.codepoint(text,1,-1)} + for i=1,#str do + local char = utf8.char(str[i]) + local alpha = col.a + if alpha > 1 then + draw.SimpleText(char,"MetrostroiSubway_IGLAb",-8+(x+i)*25,30+y*43+1,ColorAlpha(col,alpha*0.08),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + draw.SimpleText(char,"MetrostroiSubway_IGLA",-8+(x+i)*25,30+y*43,col,TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + function TRAIN_SYSTEM:ClientThink() + if not self.Train:ShouldDrawPanel("IGLA") then return end + if not self.DrawTimer then + render.PushRenderTarget(self.Train.IGLA,0,0,512, 128) + render.Clear(0, 0, 0, 0) + render.PopRenderTarget() + end + self.DrawTimer = self.DrawTimer or CurTime() + if CurTime()-self.DrawTimer < 0.1 then return end + self.DrawTimer = CurTime() + render.PushRenderTarget(self.Train.IGLA,0,0,512, 128) + render.Clear(0, 0, 0, 0) + cam.Start2D() + self:IGLA(self.Train) + cam.End2D() + render.PopRenderTarget() + end + + local messages = { + START = "питание цбки включ", + CONN = "подключен", + DISCONN = "Ð¿Ð¾Ñ‚ÐµÑ€Ñ ÑвÑзи", + SCHEME = "неÑбор ÑÑ… ваг", + RP = "Ñработка рп", + DOORS = "открытые двери", + BPSN = "выкл бпÑн", + PARKING = "вкл ÑтоÑн торм", + MANUAL = "вкл ручн торм", + BRAKES = "вкл пневм торм", + UAVA = "Ñраб Ñрыв клап", + UAVAK = "контакты уава", + EPK = "Ñработка Ñпв", + ARS = "прев Ð°Ñ€Ñ 9км\\ч", + RU = "резерв котнрол", + } + local colorb = Color(60,160,140,1) + local colorf = Color(60,160,140,255) + local colorh = Color(60,160,140,75) + function TRAIN_SYSTEM:IGLA() + local Train = self.Train + surface.SetDrawColor(60*0.075,160*0.075,140*0.075) + surface.DrawRect(0,0,512,107) + self:PrintText(0,0,string.rep(Chars.full,20),colorb) + self:PrintText(0,1,string.rep(Chars.full,20),colorb) + local State = self.Train:GetNW2Int("IGLA:State",0) + if State == -3 then + self:PrintText(0,0,"обратитеÑÑŒ в Ñлужбу",colorf) + self:PrintText(0,1,"ремонта чайников",colorf) + elseif State == 0 then + if RealTime()%0.6 > 0.3 then + self:PrintText(0,0,Chars.full,colorf) + end + elseif State == 1 then + self.VoltRandom = self.VoltRandom or RealTime() + if not self.Volt1 or CurTime()-self.VoltRandom > 0 then + self.VoltRandom = CurTime()+0.2+math.random()*0.6 + self.Volt1 = 4.9+math.random()*0.2 + self.Volt2 = 3.0+math.random()*0.2 + end + self:PrintText(0,0,"к 15в 5в 3.3в бт пчм",colorf) + if not Train:GetNW2Bool("IGLA:E") or RealTime()%0.5 > 0.25 then + self:PrintText(0,1,Format("%X",Train:GetNW2Int("IGLA:B")),colorf) + end + self:PrintText(2,1,"15",colorf) + self:PrintText(5,1,Format("%.1f",self.Volt1 or 5),colorf) + self:PrintText(9,1,Format("%.1f",self.Volt2 or 3.2),colorf) + self:PrintText(13,1,Format("%.1f",Train:GetNW2Int("IGLA:BVolt",0)/10),colorf) + if Train:GetNW2Bool("IGLA:P") then self:PrintText(17,1,".",colorf) end + if Train:GetNW2Bool("IGLA:C") then self:PrintText(18,1,".",colorf) end + self:PrintText(19,1,".",colorf) + elseif State == 2 then + local State2 = Train:GetNW2Int("IGLA:State2",0) + --[[ for i=1,6 do + self:PrintText((i-1)*3,0,Format("%02d",i),colorf) + self:PrintText((i-1)*3,1,Format("%02d",Train:GetNW2Int("PUAV:RK" .. i,0)),colorf) + end--]] + if State2 == 0 then + local Standby = Train:GetNW2Bool("IGLA:Standby") + local ShowTime = Train:GetNW2Bool("IGLA:ShowTime") + if not Standby then + local count = Train:GetNW2Int("IGLA:Count") + self:PrintText(0,0,"аÑотп",colorf) + self:PrintText(6,0,Format("%2d",count),colorf) + self:PrintText(9,0,"комплект",colorf) + self:PrintText(17,0,FormatEnd1(count),colorf) + + local d = Metrostroi.GetSyncTime() + self:PrintText(0,1,os.date("!%d-%m-%y",d),colorf) + self:PrintText(12,1,os.date("!%H:%M:%S",d),colorf) + elseif ShowTime then + local d = Metrostroi.GetSyncTime() + self:PrintText(0,1,os.date("!%d-%m-%y",d),colorh) + self:PrintText(12,1,os.date("!%H:%M:%S",d),colorh) + end + elseif State2 == 1 then + local w = Train:GetNW2Int("IGLA:WagNumber") + local m = Train:GetNW2String("IGLA:ErrorID") + if messages[m] then m = messages[m] end + if m == "PTROverheat" then + if CurTime()%2 > 1 then + self:PrintText(1,0,"!! PIZDA POEZDU !!",colorf) + else + self:PrintText(0,0,Format("%05d",w),colorf) + self:PrintText(6,0,"ПТР",colorf) + self:PrintText(10,0,Format ("% 3dC",Train:GetNW2Int("IGLA:Temp",0)),colorf) + self:PrintText(15,0,"пожар",colorf) + end + elseif m == "PTROverheating" then + self:PrintText(0,0,Format("%05d",w),colorf) + self:PrintText(6,0,"ПТР",colorf) + self:PrintText(9,0,Format ("% 3dC",Train:GetNW2Int("IGLA:Temp",0)),colorf) + self:PrintText(15,0,"перег",colorf) + else + self:PrintText(0,0,Format("%05d",w),colorf) + self:PrintText(6,0,m,colorf) + end + self:PrintText(0,1,"^",colorf) + if Train:GetNW2Bool("IGLA:ButtonL2") then self:PrintText(6,1,"<-",colorf) end + if Train:GetNW2Bool("IGLA:ButtonL3") then self:PrintText(11,1,"->",colorf) end + self:PrintText(15,1,Format("[%03d]",Train:GetNW2Int("IGLA:MessagesCount")),colorf) + elseif State2 == 2 then + self:PrintText(0,0,"введите код:",colorf) + elseif State2 == 3 then + local w = Train:GetNW2Int("IGLA:WagNumber") + local m = Train:GetNW2String("IGLA:LogID") + if messages[m] then m = messages[m] end + if w > 0 then + self:PrintText(0,0,Format("%05d",w),colorf) + if m == "PTROverheat" then + if CurTime()%2 > 1 then + self:PrintText(6,0,"PIZDA POEZDU",colorf) + else + self:PrintText(6,0,"ПТР",colorf) + self:PrintText(10,0,"пожар",colorf) + end + elseif m == "PTROverheating" then + self:PrintText(6,0,"ПТР",colorf) + self:PrintText(10,0,"перегрев",colorf) + else + self:PrintText(6,0,m,colorf) + end + else + self:PrintText(0,0,m,colorf) + end + self:PrintText(0,1,"^",colorf) + local d = Train:GetNW2Int("IGLA:LogDate") + self:PrintText(3,1,os.date("!%d-%m-%y",d),colorf) + self:PrintText(12,1,os.date("!%H:%M:%S",d),colorf) + end + end + end +else + function TRAIN_SYSTEM:CANReceive(source,sourceid,target,targetid,textdata,numdata) + if self.State < 2 then return end + if not self.States[sourceid] then + self.States[sourceid] = {} + table.insert(self.Log,{"CONN",sourceid,Metrostroi.GetSyncTime()}) + end + self.States[sourceid][textdata] = numdata + end + function TRAIN_SYSTEM:CANWrite(name,value) + self.Train:CANWrite("IGLA_CBKI",self.Train:GetWagonNumber(),"IGLA_PCBK",nil,name,value) + end + function TRAIN_SYSTEM:Trigger(name,value) + if self.State == -3 then + local ID = tonumber(name[5]) + if ID and bit.band(self.StartError,2^(ID-1)) == 0 then + self.Reset = true + end + elseif self.State == 2 then + local ID = tonumber(name[5]) + if self.State2 == 0 then + if ID == 1 and self.MessagesCount > 0 and value then + self.State2 = 1 + self.StandbyTimer = CurTime() + self.Selected = #self.Messages + elseif ID == 4 and CurTime()-self.StandbyTimer > 10 and value then + self.ShowTimeTimer = CurTime() + elseif ID==4 and not value and self.ShowTimeTimer then + if self.ShowTimeTimer ~= true then self.StandbyTimer = CurTime() end + self.ShowTimeTimer = nil + end + elseif self.State2 == 1 then + self.StandbyTimer = CurTime() + if ID==1 and value then + self.State2 = 0 + elseif ID==2 and value and self.Selected > 1 then + self.Selected = self.Selected - 1 + end + if ID==3 and value and self.Selected < #self.Messages then + self.Selected = self.Selected + 1 + end + elseif self.State2 == 2 and ID and value then + self.Password = self.Password..ID + if #self.Password > 3 then + if self.Password == "3241" then + self.State2 = 3 + self.StandbyTimer = CurTime() + self.Selected = #self.Log + else + self.State2 = 0 + end + self.Password = nil + end + elseif self.State2 == 3 then + self.StandbyTimer = CurTime() + if ID==1 and value then + self.State2 = 0 + elseif ID==2 and value and self.Selected > 1 then + self.Selected = self.Selected - 1 + end + if ID==3 and value and self.Selected < #self.Log then + self.Selected = self.Selected + 1 + end + end + end + end + local Logging = { + PTROverheat = true, + PTROverheating = true, + SCHEME = false, + RP = true, + DOORS = true, + BPSN = true, + PARKING = true, + MANUAL = true, + BRAKES = true, + UAVA = true, + UAVAK = true, + EPK = true, + ARS = true, + RU = true, + } + + function TRAIN_SYSTEM:CError(WagID,ErrID,status) + local ID = WagID..ErrID + if not self.Messages[ID] and status then + self.Messages[ID] = table.insert(self.Messages,{ErrID,WagID,Metrostroi.GetSyncTime(),ID,status}) + if Logging[ErrID] then + table.insert(self.Log,self.Messages[self.Messages[ID]]) + end + --print(Format("Message with ErrID '%s' have ID:%d",ID,self.Messages[ID])) + elseif self.Messages[ID] and not status then + --print(Format("Removed message with ErrID '%s' have ID:%d",ID,self.Messages[ID])) + table.remove(self.Messages,self.Messages[ID]) + self.Messages[ID] = nil + for k,v in ipairs(self.Messages) do + self.Messages[v[4]] = k + end + end + end + function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local Power = Train.Panel.CBKIPower > 0 + if Power and --[[ Train.A63.Value > 0.5 and--]] self.State ~= -2 then + for k,v in pairs(self.TriggerNames) do + if Train[v] and (Train[v].Value > 0.5) ~= self.Triggers[v] then + self:Trigger(v,Train[v].Value > 0.5) + self.Triggers[v] = Train[v].Value > 0.5 + end + end + end + if not Power or --[[ Train.A63.Value < 0.5 or--]] self.Reset then + self.Reset = false + if self.State ~= -2 then + self.State = -2 + self.Timer = nil + self.Timer1 = nil + self.Timer2 = nil + self.ButtonL1 = false + self.ButtonL2 = false + self.ButtonL3 = false + self.ButtonL4 = false + self.Fire = 0 + self.Error = 0 + self.States = {} + self.Messages = {} + end + end + if self.State == -2 and Power --[[ and Train.A63.Value > 0.5--]] then + self.State = -1 + self.Timer = CurTime()+math.random()*0.3 + self.StartError = false + end + if self.State == -1 and CurTime()-self.Timer > 0.3 then + self.State = 0 + Train:PlayOnce("igla_start2","cabin",nil,2) + self.Timer = CurTime()+math.random()*0.4 + end + if self.State == 0 and CurTime()-self.Timer > 0.6 then + table.insert(self.Log,{"START",sourceid,Metrostroi.GetSyncTime()}) + self.State = 1 + Train:PlayOnce("igla_start1","cabin") + self.Timer = CurTime()+math.random()*0.4 + self.Timer1 = 0.9+CurTime()+math.random()*0.2 + self.Timer2 = 1.0+CurTime()+math.random()*1.2 + self.StartError = Train.IGLA1.Value+Train.IGLA2.Value*2+Train.IGLA3.Value*4+Train.IGLA4.Value*8 + Train:SetNW2Bool("IGLA:E",self.StartError > 0) + end + if self.State == 1 then + Train:SetNW2Bool("IGLA:P",CurTime()-self.Timer1 > 0) + Train:SetNW2Bool("IGLA:C",CurTime()-self.Timer2 > 0) + Train:SetNW2Int("IGLA:B",Train.IGLA1.Value+Train.IGLA2.Value*2+Train.IGLA3.Value*4+Train.IGLA4.Value*8) + self.ButtonL1 = self.StartError > 0 or CurTime()-self.Timer < 3 + self.ButtonL2 = self.ButtonL1 + self.ButtonL3 = self.ButtonL1 + self.ButtonL4 = self.ButtonL1 + self.Fire = true + self.Error = true + --Train:SetNW2Bool("IGLA:M",CurTime()-self.Timer3 > 0) + if CurTime()-self.Timer > 5 then + self.State = self.StartError > 0 and -3 or 2 + self.State2 = 0 + self.StandbyTimer = CurTime() + self.ShowTimeTimer = nil + self.ShowTime = false + self.FireAlarm = false + self.OverhAlarm = false + self.FireState = false + self.OverhState = false + + Train:PlayOnce("igla_start2","cabin",nil,1) + + self.PCBKTimer = nil + end + elseif self.State == -3 then + self.ButtonL1 = bit.band(self.StartError,1) == 0 + self.ButtonL2 = bit.band(self.StartError,2) == 0 + self.ButtonL3 = bit.band(self.StartError,4) == 0 + self.ButtonL4 = bit.band(self.StartError,8) == 0 + self.Fire = false + self.Error = CurTime()%0.5 > 0.25 + elseif self.State == 2 then + if #self.Log > 100 then table.remove(self.Log,1) end + local Standby = CurTime()-self.StandbyTimer > 10 + if self.State2 > 0 and Standby then self.State2 = 0 end + if self.ShowTimeTimer and self.ShowTimeTimer ~= true and CurTime()-self.ShowTimeTimer > 1.5 then + self.ShowTime = not self.ShowTime + self.ShowTimeTimer = true + end + if not self.PCBKTimer or CurTime()-self.PCBKTimer > 1.4 then + self:CANWrite("Update",1) + self.PCBKTimer = CurTime()+math.random()*0.4 + end + + local count = 0 + for k,v in pairs(self.States) do + local timer = v.Timer and CurTime()-v.Timer or 10 + if timer <= 5 then + for id in pairs(Logging) do self:CError(k,id,v[id]) end + count = count + 1 + else + for k1,v1 in ipairs(self.Messages) do + if v1[2] == k then + --print(Format("Removed message with ErrID '%s' have ID:%d, PCBK discon",v1[4],self.Messages[v1[4]])) + self.Messages[v1[4]] = nil + table.remove(self.Messages,k1) + end + end + table.insert(self.Log,{"DISCONN",k,Metrostroi.GetSyncTime()}) + self.States[k] = nil + end + end + self.PCBKCount = count + if self.MessagesCount ~= #self.Messages then + local mess = #self.Messages + if self.MessagesCount < mess then + --Train:PlayOnce("igla_alarm3","cabin",nil,1) + self.StandbyTimer = CurTime() + if self.State2 ~= 1 then + self.State2 = 1 + self.Selected = mess + end + if self.Selected >= self.MessagesCount then + self.Selected = mess + end + end + if self.State2 == 1 and self.Selected > mess then self.Selected = mess end + if self.State2 == 1 and mess == 0 then + self.State2 = 0 + end + self.MessagesCount = mess + end + + if self.State2 == 0 then + if self.Triggers.IGLA2 and self.Triggers.IGLA3 then + self.Password = "" + self.State2 = 2 + self.StandbyTimer = CurTime() + end + + + self.ButtonL1 = self.MessagesCount > 0 + self.ButtonL2 = false + self.ButtonL3 = false + self.ButtonL4 = Standby + elseif self.State2 == 1 then + local err = self.Messages[self.Selected] + Train:SetNW2String("IGLA:ErrorID",err[1]) + Train:SetNW2Int("IGLA:WagNumber",err[2]) + if err[1] == "PTROverheating" or err[1] == "PTROverheat" then + Train:SetNW2Int("IGLA:Temp",math.floor(self.States[err[2]][err[1]])) + end + + + self.ButtonL1 = true + self.ButtonL2 = self.Selected > 1 + self.ButtonL3 = self.Selected < #self.Messages + Train:SetNW2Int("IGLA:MessagesCount",self.MessagesCount) + self.ButtonL4 = false + elseif self.State2 == 2 then + self.ButtonL1 = true + self.ButtonL2 = true + self.ButtonL3 = true + self.ButtonL4 = true + elseif self.State2 == 3 then + if self.Selected >= #self.Log then self.Selected = #self.Log end + local log = self.Log[self.Selected] + Train:SetNW2String("IGLA:LogID",log[1]) + Train:SetNW2Int("IGLA:WagNumber",log[2]) + Train:SetNW2Int("IGLA:LogDate",log[3]) + for i=4,#log do + Train:SetNW2Int("IGLA:Log"..i,log[i]) + end + + + self.ButtonL1 = true + self.ButtonL2 = self.Selected > 1 + self.ButtonL3 = self.Selected < #self.Log + self.ButtonL4 = false + end + Train:SetNW2Int("IGLA:Count",self.PCBKCount) + Train:SetNW2Int("IGLA:State2",self.State2) + Train:SetNW2Bool("IGLA:Standby",Standby) + Train:SetNW2Bool("IGLA:ShowTime",self.ShowTime) + self.Fire = false + local overh = false + for i,v in ipairs(self.Messages) do + if v[1] == "PTROverheat" then + if not self.FireAlarm then self.FireAlarm = CurTime() end + self.Fire = CurTime()%0.5>0.25 + self.OverhAlarm = true + elseif v[1] == "PTROverheating" and self.OverhAlarm ~= true then + overh = true + end + end + if overh and not self.OverhAlarm then + self.OverhAlarm = CurTime() + elseif not overh and self.OverhAlarm then + self.OverhAlarm = false + self.OverhState = false + end + + if self.OverhAlarm and self.OverhAlarm ~= true and self.OverhState ~= math.floor((CurTime()-self.OverhAlarm)*2) and (not self.OverhState or self.OverhState < 5) then + Train:PlayOnce("igla_alarm2","cabin",nil,1) + self.OverhState = math.floor((CurTime()-self.OverhAlarm)*2) + end + if self.FireAlarm and self.FireState ~= math.floor((CurTime()-self.FireAlarm)*1.5) and (not self.FireState or self.FireState < 10) then + Train:PlayOnce("igla_alarm3","cabin",nil,1) + self.FireState = math.floor((CurTime()-self.FireAlarm)*1.5) + end + self.Error = false + end + Train:SetNW2Bool("IGLA:Messages",self.MessagesCount) + Train:SetNW2Bool("IGLA:ButtonL1",self.ButtonL1) + Train:SetNW2Bool("IGLA:ButtonL2",self.ButtonL2) + Train:SetNW2Bool("IGLA:ButtonL3",self.ButtonL3) + Train:SetNW2Bool("IGLA:ButtonL4",self.ButtonL4) + Train:SetNW2Bool("IGLA:Fire",self.Fire) + Train:SetNW2Bool("IGLA:Error",self.Error) + + Train:SetNW2Int("IGLA:State",self.State) + end +end diff --git a/lua/metrostroi/systems/sys_igla_cbki2.lua b/lua/metrostroi/systems/sys_igla_cbki2.lua new file mode 100644 index 0000000..d94626d --- /dev/null +++ b/lua/metrostroi/systems/sys_igla_cbki2.lua @@ -0,0 +1,491 @@ +-------------------------------------------------------------------------------- +-- ASOTP "IGLA" black indicator unit for 81-720 +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("IGLA_CBKI2") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.Log = {} + self.States = {} + self.Messages = {} + self.MessagesCount = 0 + if not self.Train.IGLA1U then + self.Train:LoadSystem("IGLA1U","Relay","Switch",{bass = true}) + self.Train:LoadSystem("IGLA1","Relay","Switch",{bass = true}) + self.Train:LoadSystem("IGLA1D","Relay","Switch",{bass = true}) + self.Train:LoadSystem("IGLA2U","Relay","Switch",{bass = true}) + self.Train:LoadSystem("IGLA2","Relay","Switch",{bass = true}) + self.Train:LoadSystem("IGLA2D","Relay","Switch",{bass = true}) + end + + self.TriggerNames = { + "IGLA1U", + "IGLA1", + "IGLA1D", + "IGLA2U", + "IGLA2", + "IGLA2D", + } + self.Triggers = {} + self.State = -2 +end +if TURBOSTROI then return end +function TRAIN_SYSTEM:Inputs() + return { "Disable" } +end +if CLIENT then + local function FormatEnd1(num) + if num == 1 then return " " + elseif 1 < num and num < 5 then return "а" end + return "ов" + end + local function FormatEnd2(num) + if num == 1 then return "ка" + elseif 1 < num and num < 5 then return "ки" end + return "ок" + end + surface.CreateFont("Metrostroi_ILGAo", { + font = "Liquid Crystal Display", + size = 40, + weight = 800, + blursize = false, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + extended = true, + scanlines = false, + }) + function TRAIN_SYSTEM:PrintText(x,text,inverse) + local str = {utf8.codepoint(text,1,-1)} + for i=1,#str do + local char = utf8.char(str[i]) + if inverse then + draw.SimpleText(string.char(0x7f),"Metrostroi_ILGAo",(x+i)*30,42,Color(0,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + draw.SimpleText(char,"Metrostroi_ILGAo",(x+i)*30,42,Color(140,190,0,150),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + else + draw.SimpleText(char,"Metrostroi_ILGAo",(x+i)*30,42,Color(0,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) + end + end + end + function TRAIN_SYSTEM:ClientThink() + if not self.Train:ShouldDrawPanel("IGLA") then return end + --RunConsoleCommand("say","президент!!!") + if not self.DrawTimer then + render.PushRenderTarget(self.Train.IGLA,0,0,512, 128) + render.Clear(0, 0, 0, 0) + render.PopRenderTarget() + end + if self.DrawTimer and CurTime()-self.DrawTimer < 0.1 then return end + self.DrawTimer = CurTime() + render.PushRenderTarget(self.Train.IGLA,0,0,512, 128) + --render.Clear(0, 0, 0, 0) + cam.Start2D() + self:IGLA(self.Train) + cam.End2D() + render.PopRenderTarget() + end + + local messages = { + START = "пит цбки вкл", + CONN = "подкл", + DISCONN = "отк пцбк", + SCHEME = "неÑб ÑÑ…", + RP = "Ñраб рп", + DOORS = "откр дв", + BPSN = "выкл дип", + PARKING = "вкл ÑÑ‚ Ñ‚", + MANUAL = "вкл рч Ñ‚", + BRAKES = "вкл пн Ñ‚", + UAVA = "Ñраб СК", + UAVAK = "кон уава", + EPK = "Ñраб Ñпв", + ARS = "прев арÑ", + RU = "вкл ру", + } + function TRAIN_SYSTEM:IGLA() + local Train = self.Train + local State = self.Train:GetNW2Int("IGLA:State",0) + if State > -2 then + surface.SetDrawColor(81,223,0,self.Warm and 100 or 255) + surface.DrawRect(0,0,512,80) + self.Warm = true + else + surface.SetDrawColor(81*0.2,223*0.2,0,230) + surface.DrawRect(0,0,512,80) + self.Warm = false + end + + if State == 0 then + self:PrintText(0,"Chip test Ok Ok") + elseif State == 1 then + self:PrintText(0,"ÐСОТП-\"ИГЛÐ\" V02") + elseif State == 2 then + local State2 = Train:GetNW2Int("IGLA:State2",0) + if State ~= self.OldState then + self.Timer = RealTime() + self.OldState = State + end + if State2 == 0 then + --self:PrintText(0,"") + self:PrintText(0,Format("[%03d]",Train:GetNW2Int("IGLA:Messages"))) + self:PrintText(7,"ПЦБК-"..Train:GetNW2Int("IGLA:Count",0)) + elseif State2 == 1 then + local w = Train:GetNW2Int("IGLA:WagNumber") + local m = Train:GetNW2String("IGLA:LogID") + local s = Train:GetNW2Int("IGLA:Selected") + if s ~= self.OldSel then + self.Timer = RealTime()-0.01 + self.OldSel = s + end + if messages[m] then m = messages[m] end + local timer = math.ceil((RealTime()-self.Timer)%3) + if m ~= "PTROverheat" or timer == 1 then + if w > 0 then self:PrintText(0,Format("[%05d]",w)) else self:PrintText(0,"[]") end + end + if timer == 1 then + if w > 0 then + if m == "PTROverheating" then + self:PrintText(7,"перегрев") + elseif m == "PTROverheat" then + self:PrintText(7,"пожар") + else + self:PrintText(7,m) + end + else + self:PrintText(2,m) + end + elseif m == "PTROverheat" then + self:PrintText(0,"!PIZDA POEZDU!") + elseif timer == 2 then + local d = Train:GetNW2Int("IGLA:LogDate") + self:PrintText(w > 0 and 7 or 2,os.date("!%H:%M:%S",d)) + else + local d = Train:GetNW2Int("IGLA:LogDate") + self:PrintText(w > 0 and 7 or 2,os.date("!%d-%m-%y",d)) + end + if Train:GetNW2Int("IGLA:Arrow") == -1 then + self:PrintText(15,"<") + elseif Train:GetNW2Int("IGLA:Arrow") == 1 then + self:PrintText(15,">") + else + self:PrintText(15,"<") + self:PrintText(15,">") + end + elseif State2 == 2 then + local w = Train:GetNW2Int("IGLA:WagNumber") + local m = Train:GetNW2String("IGLA:ErrorID") + local s = Train:GetNW2Int("IGLA:Selected") + if s ~= self.OldSel then + self.Timer = RealTime()-0.01 + self.OldSel = s + end + if messages[m] then m = messages[m] end + local timer = math.ceil((RealTime()-self.Timer)%3) + if m ~= "PTROverheat" or timer == 1 then + if w > 0 then self:PrintText(0,Format("[%05d]",w)) else self:PrintText(0,"[]") end + end + if timer == 1 then + if w > 0 then + if m == "PTROverheating" then + self:PrintText(7,Format("пер % 3d",Train:GetNW2Int("IGLA:Temp",0))) + elseif m == "PTROverheat" then + self:PrintText(7,Format("пож % 3d",Train:GetNW2Int("IGLA:Temp",0))) + else + self:PrintText(7,m) + end + else + self:PrintText(2,m) + end + elseif m == "PTROverheat" then + self:PrintText(0,"!PIZDA POEZDU!") + elseif timer == 2 then + local d = Train:GetNW2Int("IGLA:LogDate") + self:PrintText(w > 0 and 7 or 2,os.date("!%H:%M:%S",d)) + else + local d = Train:GetNW2Int("IGLA:LogDate") + self:PrintText(w > 0 and 7 or 2,os.date("!%d-%m-%y",d)) + end + if Train:GetNW2Int("IGLA:Arrow") == -1 then + self:PrintText(15,"<") + elseif Train:GetNW2Int("IGLA:Arrow") == 1 then + self:PrintText(15,">") + else + self:PrintText(15,"<") + self:PrintText(15,">") + end + end + end + end +else + function TRAIN_SYSTEM:CANReceive(source,sourceid,target,targetid,textdata,numdata) + if self.State < 2 then return end + if not self.States[sourceid] then + self.States[sourceid] = {} + table.insert(self.Log,{"CONN",sourceid,Metrostroi.GetSyncTime()}) + end + self.States[sourceid][textdata] = numdata + end + function TRAIN_SYSTEM:CANWrite(name,value) + self.Train:CANWrite("IGLA_CBKI",self.Train:GetWagonNumber(),"IGLA_PCBK",nil,name,value) + end + function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Disable" then + self.Disable = value>0 + if self.Disable then self:Initialize() end + end + end + function TRAIN_SYSTEM:Trigger(name,value) + if self.State == 2 then + if self.State2 == 0 then + if name == "IGLA2D" and value and #self.Log > 0 then + self.State2 = 1 + self.StandbyTimer = CurTime() + self.Selected = #self.Log + end + if name == "IGLA1D" and value and #self.Messages > 0 then + self.State2 = 2 + self.StandbyTimer = CurTime() + self.Selected = #self.Messages + end + elseif self.State2 == 1 then + self.StandbyTimer = CurTime() + if name == "IGLA2D" and value and self.Selected > 1 then + self.Selected = self.Selected - 1 + end + if name == "IGLA2" and value then + self.State2 = 0 + end + if name == "IGLA2U" and value and self.Selected < #self.Log then + self.Selected = self.Selected + 1 + end + elseif self.State2 == 2 then + self.StandbyTimer = CurTime() + if name == "IGLA1D" and value and self.Selected > 1 then + self.Selected = self.Selected - 1 + end + if name == "IGLA1" and value then + self.State2 = 0 + end + if name == "IGLA1U" and value and self.Selected < #self.Messages then + self.Selected = self.Selected + 1 + end + end + end + end + local Logging = { + PTROverheat = true, + PTROverheating = true, + SCHEME = false, + RP = true, + DOORS = true, + BPSN = true, + PARKING = true, + MANUAL = true, + BRAKES = true, + UAVA = true, + UAVAK = true, + EPK = true, + ARS = true, + RU = true, + } + function TRAIN_SYSTEM:CError(WagID,ErrID,status) + local ID = WagID..ErrID + if not self.Messages[ID] and status then + self.Messages[ID] = table.insert(self.Messages,{ErrID,WagID,Metrostroi.GetSyncTime(),ID}) + if Logging[ErrID] then + table.insert(self.Log,self.Messages[self.Messages[ID]]) + end + --print(Format("Message with ErrID '%s' have ID:%d",ID,self.Messages[ID])) + elseif self.Messages[ID] and not status then + --print(Format("Removed message with ErrID '%s' have ID:%d",ID,self.Messages[ID])) + table.remove(self.Messages,self.Messages[ID]) + self.Messages[ID] = nil + for k,v in ipairs(self.Messages) do + self.Messages[v[4]] = k + end + end + end + function TRAIN_SYSTEM:Think(dT) + if self.Disable then return end + local Train = self.Train + local Power = Train.Panel.CBKIPower > 0 + if Power and self.State ~= -2 then + for k,v in pairs(self.TriggerNames) do + if Train[v] and (Train[v].Value > 0.5) ~= self.Triggers[v] then + self:Trigger(v,Train[v].Value > 0.5) + self.Triggers[v] = Train[v].Value > 0.5 + end + end + end + if not Power or self.Reset then + self.Reset = false + if self.State ~= -2 then + self.State = -2 + self.Timer = nil + self.Fire = false + self.Error = false + self.OverhAlarm = false + self.OverhState = false + self.FireAlarm = false + self.FireState = false + self.PCBKCount = 0 + self.States = {} + self.Messages = {} + end + end + if self.State == -2 and Power then + self.State = -1 + self.Timer = CurTime()+math.random()*0.3 + self.StartError = false + end + if self.State == -1 and CurTime()-self.Timer > 0.3 then + self.State = 0 + Train:PlayOnce("igla_start1","cabin") + self.Timer = CurTime()+math.random()*0.6 + end + if self.State == 0 and CurTime()-self.Timer > 3.4 then + table.insert(self.Log,{"START",sourceid,Metrostroi.GetSyncTime()}) + self.State = 1 + Train:PlayOnce("igla_start2","cabin") + self.Timer = CurTime()+math.random()*0.4 + end + if self.State == 1 then + self.Error = true + if CurTime()-self.Timer > 4 then + self.State = 2 + self.State2 = 0 + self.StandbyTimer = CurTime() + self.ShowTimeTimer = nil + self.ShowTime = false + + self.PCBKTimer = nil + end + elseif self.State == 2 then + if #self.Log > 100 then table.remove(self.Log,1) end + local Standby = CurTime()-self.StandbyTimer > 10 + if self.State2 > 0 and Standby then self.State2 = 0 end + if self.ShowTimeTimer and self.ShowTimeTimer ~= true and CurTime()-self.ShowTimeTimer > 1.5 then + self.ShowTime = not self.ShowTime + self.ShowTimeTimer = true + end + if not self.PCBKTimer or CurTime()-self.PCBKTimer > 1.4 then + self:CANWrite("Update",1) + self.PCBKTimer = CurTime()+math.random()*0.4 + end + + local count = 0 + for k,v in pairs(self.States) do + local timer = v.Timer and CurTime()-v.Timer or 100 + if timer <= 5 then + for id in pairs(Logging) do self:CError(k,id,v[id]) end + count = count + 1 + else + for k1,v1 in ipairs(self.Messages) do + if v1[2] == k then + --print(Format("Removed message with ErrID '%s' have ID:%d, PCBK discon",v1[4],self.Messages[v1[4]])) + self.Messages[v1[4]] = nil + table.remove(self.Messages,k1) + end + end + table.insert(self.Log,{"DISCONN",k,Metrostroi.GetSyncTime()}) + self.States[k] = nil + end + end + self.PCBKCount = count + if self.MessagesCount ~= #self.Messages then + local mess = #self.Messages + if self.MessagesCount < mess then + Train:PlayOnce("igla_start2","cabin",nil,1) + self.StandbyTimer = CurTime() + if self.State2 ~= 2 then + self.State2 = 2 + self.Selected = mess + end + if self.Selected >= self.MessagesCount then + self.Selected = mess + end + end + if self.State2 == 2 and self.Selected > mess then self.Selected = mess end + if self.State2 == 2 and mess == 0 then + self.State2 = 0 + end + self.MessagesCount = mess + end + + if self.State2 == 0 then + self.Error = self.MessagesCount > 0 + elseif self.State2 == 1 then + if self.Selected >= #self.Log then self.Selected = #self.Log end + local log = self.Log[self.Selected] + Train:SetNW2Int("IGLA:Selected",self.Selected) + Train:SetNW2String("IGLA:LogID",log[1]) + Train:SetNW2Int("IGLA:WagNumber",log[2]) + Train:SetNW2Int("IGLA:LogDate",log[3]) + for i=4,#log do + Train:SetNW2Int("IGLA:Log"..i,log[i]) + end + if CurTime()-self.StandbyTimer > 10 then self.State2 = 0 end + Train:SetNW2Int("IGLA:Arrow",self.Selected == 1 and 1 or self.Selected == #self.Log and -1 or 0) + self.Error = false + elseif self.State2 == 2 then + local err = self.Messages[self.Selected] + if err[1] == "PTROverheating" or err[1] == "PTROverheat" then + Train:SetNW2Int("IGLA:Temp",math.floor(self.States[err[2]][err[1]])) + end + Train:SetNW2Int("IGLA:Selected",self.Selected) + Train:SetNW2String("IGLA:ErrorID",err[1]) + Train:SetNW2Int("IGLA:WagNumber",err[2]) + Train:SetNW2Int("IGLA:Arrow",self.Selected == 1 and 1 or self.Selected == #self.Messages and -1 or 0) + + if CurTime()-self.StandbyTimer > 10 then self.State2 = 0 end + end + + local overh = false + for i,v in ipairs(self.Messages) do + if v[1] == "PTROverheat" then + if not self.FireAlarm then self.FireAlarm = CurTime() end + self.Fire = true + self.OverhAlarm = true + elseif v[1] == "PTROverheating" and self.OverhAlarm ~= true then + overh = true + end + end + if overh and not self.OverhAlarm then + self.OverhAlarm = CurTime() + elseif not overh and self.OverhAlarm then + self.OverhAlarm = false + self.OverhState = false + end + + if self.OverhAlarm and self.OverhAlarm ~= true and self.OverhState ~= math.floor((CurTime()-self.OverhAlarm)*2) and (not self.OverhState or self.OverhState < 5) then + Train:PlayOnce("igla_start1","cabin",nil,1) + self.OverhState = math.floor((CurTime()-self.OverhAlarm)*2) + end + if self.FireAlarm and self.FireState ~= math.floor((CurTime()-self.FireAlarm)*1.5) and (not self.FireState or self.FireState < 10) then + Train:PlayOnce("igla_start2","cabin",nil,1) + self.FireState = math.floor((CurTime()-self.FireAlarm)*1.5) + end + end + self.Error = self.MessagesCount > 0 + Train:SetNW2Int("IGLA:Count",self.PCBKCount) + Train:SetNW2Int("IGLA:State2",self.State2) + Train:SetNW2Bool("IGLA:Messages",#self.Log) + Train:SetNW2Bool("IGLASR",self.State > -2) + Train:SetNW2Bool("IGLARX",self.State > -2 and self.PCBKCount == 0) + Train:SetNW2Bool("IGLAErr",self.State > 0 and self.Error or self.State == 1) + Train:SetNW2Bool("IGLAOSP", self.State == 1) + Train:SetNW2Bool("IGLAPI", self.Fire or self.State == 1) + Train:SetNW2Bool("IGLAOff", self.State == 1) + + Train:SetNW2Int("IGLA:State",self.State) + end +end diff --git a/lua/metrostroi/systems/sys_igla_pcbk.lua b/lua/metrostroi/systems/sys_igla_pcbk.lua new file mode 100644 index 0000000..37f01cf --- /dev/null +++ b/lua/metrostroi/systems/sys_igla_pcbk.lua @@ -0,0 +1,108 @@ +-------------------------------------------------------------------------------- +-- ASOTP "IGLA" wagon controller unit +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("IGLA_PCBK") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.States = {} + self.State = -1 + self.Timer = 0 + self.Time = 0 + + self.KVC = 1 + +end +if TURBOSTROI then return end +function TRAIN_SYSTEM:Inputs() + return { "" } +end +function TRAIN_SYSTEM:CANReceive(source,sourceid,target,targetid,textdata,numdata) + if textdata== "Update" then + self.Update = true + end +end +function TRAIN_SYSTEM:CANWrite(name,value) + self.Train:CANWrite("IGLA_PCBK",self.Train:GetWagonNumber(),"IGLA_CBKI",nil,name,value) +end +function TRAIN_SYSTEM:CState(name,value) + if self.Update or self.States[name] ~= value then + self.States[name] = value + self.Train:CANWrite("IGLA_PCBK",self.Train:GetWagonNumber(),"IGLA_CBKI",nil,name,value) + end +end +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + if Train.VB.Value < 0.5 or self.Reset then + self.Reset = false + if self.State ~= -1 then + self.State = -1 + self.Timer = nil + end + end + if self.State == -1 and (Train.VB.Value > 0.5 and (not Train.A63 or Train.A63.Value > 0.5)) then + self.State = 0 + self.Timer = CurTime()+math.random()*0.3 + end + if self.State == 0 and CurTime()-self.Timer > 1.2 then + self.State = 1 + self.Time = CurTime() + self.EngageTimer = nil + end + if self.State == 1 and (CurTime() - self.Time) > 1.4 then + if self.Update then + self:CANWrite("Timer",CurTime()) + end + local electric = self.Train.Electric + self.Time= CurTime()+math.random()*0.4 + self:CState("PTROverheat",(electric.Overheat1 > 0 or electric.Overheat2 > 0) and math.max(electric.T1,electric.T2)) + self:CState("PTROverheating",(electric.T1 > 500 or electric.T2 > 500) and math.min(999,math.max(electric.T1,electric.T2))) + --[[ local schengaged = Train:ReadTrainWire(20)>0 + local schengagedD = schengaged and Train:ReadTrainWire(1)>0 + local schengagedB = schengaged and Train:ReadTrainWire(6)>0 + local RP = Train.RPvozvrat.Value > 0.5 + local DOORS = false + local BPSN = false--Train.PowerSupply.XT3_1 <= 50 + local PARKING = false + local MANUAL = false + local BRAKES = false + local SCHEME = false + if schengaged then + DOORS = Train.RD.Value < 0.5 and not schengagedB + PARKING = Train.ParkingBrake and Train.ParkingBrake.Value > 0.5 and not schengagedB + MANUAL = Train.ManualBrake and Train.ManualBrake > 0 and not schengagedB + BRAKES = Train.Pneumatic.BrakeCylinderPressure > 0.5 and not schengagedB + SCHEME = Train.LK4.Value == 0 + if BPSN and schengagedD and not self.BPSNTimer then self.BPSNTimer = CurTime() end + else + if (not BPSN or not self.States.BPSN) and self.BPSNTimer then self.BPSNTimer = nil end + end + if schengaged and SCHEME then + if not self.EngageTimer then self.EngageTimer = CurTime() end + if BRAKES and not self.BrakesTimer then self.BrakesTimer = CurTime() end + if not BRAKES and self.BrakesTimer then self.BrakesTimer = nil end + else + if self.EngageTimer then self.EngageTimer = nil end + if self.BrakesTimer then self.BrakesTimer = nil end + end + self:CState("SCHEME",self.EngageTimer and CurTime()-self.EngageTimer > 3) + self:CState("RP",RP) + self:CState("DOORS",DOORS) + self:CState("BPSN",self.BPSNTimer and CurTime()-self.BPSNTimer > 7) + self:CState("PARKING",PARKING) + self:CState("MANUAL",MANUAL) + self:CState("BRAKES",self.BrakesTimer and CurTime()-self.BrakesTimer > 3) + self:CState("UAVA",Train.Pneumatic.EmergencyValve) + if Train.IGLA_CBKI then + --self:CState("EPK",Train.Pneumatic.EPKEnabled and Train.EPKContacts.Value == 0) + --self:CState("UAVAK",Train.KV["10AS-33"] > 0 and Train.ALS_ARS.UAVAContacts) + + if Train.ALS_ARS then self:CState("ARS",Train.ALS_ARS.EnableARS and Train.KV["D4-15"] > 0 and math.max(20,Train.ALS_ARS.SpeedLimit)+9 < Train.ALSCoil.Speed) end + self:CState("RU",Train.KRU and Train.KRU["14/1-B3"] > 0) + end--]] + self.Update = false + end +end diff --git a/lua/metrostroi/systems/sys_ipav.lua b/lua/metrostroi/systems/sys_ipav.lua new file mode 100644 index 0000000..957728a --- /dev/null +++ b/lua/metrostroi/systems/sys_ipav.lua @@ -0,0 +1,111 @@ +-------------------------------------------------------------------------------- +-- "IPAV" autodrive commands receiver +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("IPAV") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + + self.Count = 0 +end + +function TRAIN_SYSTEM:Outputs() + return {} +end + +function TRAIN_SYSTEM:Inputs() + return {} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "Enable" then + self.Enabled = value + end +end + +function TRAIN_SYSTEM:SetCommand(name,command) + local Train = self.Train + local IPAVConfig = Train.SubwayTrain.IPAV + for _,sys_name in ipairs(IPAVConfig.Systems) do + if command then + Train[sys_name]:TriggerInput(name,command) + else + Train[sys_name]:TriggerInput(name,0) + end + end +end + +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local IPAVConfig = Train.SubwayTrain.IPAV + if not IPAVConfig then return end + local LeftCoil,RightCoil = Train.LeftAutoCoil,Train.RightAutoCoil + if not IsValid(LeftCoil) or not IsValid(RightCoil) then return end + + local ProgrammX = false + local ProgramDoorLeft = IgnoreDoors + local ProgramDoorRight = IgnoreDoors + local ProgrammBrake = false + self.LastBrakeProgramTimer = self.LastBrakeProgramTimer or CurTime() + self.LastBrakeProgram = self.LastBrakeProgram or false + + local haveCommand = 0 + for k,v in ipairs(LeftCoil.Commands) do + local command = v.PlateType + ProgramDoorLeft = ProgramDoorLeft or command == METROSTROI_ACOIL_DOOR + ProgrammX = ProgrammX or command == METROSTROI_ACOIL_DRIVE and v.Power and v.Mode + ProgrammBrake = ProgrammBrake or command == METROSTROI_ACOIL_SBRAKE and LeftCoil + haveCommand = haveCommand + 1 + end + for k,v in ipairs(RightCoil.Commands) do + local command = v.PlateType + ProgramDoorRight = ProgramDoorRight or command == METROSTROI_ACOIL_DOOR + ProgrammX = ProgrammX or command == METROSTROI_ACOIL_DRIVE and v.Power and v.Mode + ProgrammBrake = ProgrammBrake or command == METROSTROI_ACOIL_SBRAKE and RightCoil + + haveCommand = haveCommand + 1 + end + if self.ProgramDoorLeft ~= ProgramDoorLeft then + self:SetCommand("CommandDoorsLeft",ProgramDoorLeft and 1) + self.ProgramDoorLeft = ProgramDoorLeft + end + if self.ProgramDoorRight ~= ProgramDoorRight then + self:SetCommand("CommandDoorsRight",ProgramDoorRight and 1) + self.ProgramDoorRight = ProgramDoorRight + end + if self.ProgrammX ~= ProgrammX then + local type = 0 + if ProgrammX == 2 or ProgrammX == 4 then self:SetCommand("CommandDrive",3) --X3 + elseif ProgrammX == 1 or ProgrammX == 3 then self:SetCommand("CommandDrive",2) --X2 + elseif ProgrammX == 7 then self:SetCommand("CommandBrake",ProgrammBrake and 1 or 0) + elseif ProgrammX then self:SetCommand("CommandDrive",-1) + else self:SetCommand("CommandDrive",0) end + self.ProgrammX = ProgrammX + end + if ProgrammBrake and not ProgrammBrake.BrakeCommandFounded then ProgrammBrake = nil end + if self.ProgrammBrake ~= ProgrammBrake then + self:SetCommand("CommandBrake",ProgrammBrake and 1 or 0) + self.ProgrammBrake = ProgrammBrake + end + if ProgrammBrake then + local passed = ProgrammBrake.BrakeProgrammPassed + local passednow = CurTime()-ProgrammBrake.LastBrakeProgrammPassed + --print("IPAV",passed,passednow) + if passed ~= self.Passed then + self.Count = self.Count + 1 + self:SetCommand("CommandBrakeElapsed",passed) + self:SetCommand("CommandBrakeCount",self.Count) + self.Passed = passed + end + else + self.Count = 0 + if self.Passed then + self:SetCommand("CommandBrakeElapsed",-1) + self:SetCommand("CommandBrakeCount",0) + self.Passed = nil + end + end +end diff --git a/lua/metrostroi/systems/sys_kf_47a.lua b/lua/metrostroi/systems/sys_kf_47a.lua new file mode 100644 index 0000000..69c943d --- /dev/null +++ b/lua/metrostroi/systems/sys_kf_47a.lua @@ -0,0 +1,95 @@ +-------------------------------------------------------------------------------- +-- HV Rheostats (KF-47A) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("KF_47A") + +function TRAIN_SYSTEM:Initialize() + self.Resistors = { + ["L12-L13"] = 1.730, + + ["P3-P4"] = 0.144, + ["P4-P5"] = 0.223, + ["P5-P6"] = 0.190, + ["P6-P7"] = 0.223, + ["P7-P8"] = 0.223, + ["P8-P9"] = 0.190, + ["P9-P10"] = 0.144, + ["P10-P11"] = 0.144, + ["P11-P12"] = 1.070, + ["P12-P13"] = 0.485, + ["P1-P3"] = 0.715, + ["P3-P14"] = 1.622, + ["P13-P42"] = 0.285, + + ["P16-P17"] = 0.485, + ["P17-P18"] = 0.120, + ["P18-P19"] = 0.223, + ["P19-P20"] = 0.190, + ["P20-P21"] = 0.223, + ["P21-P22"] = 0.223, + ["P22-P23"] = 0.190, + ["P23-P24"] = 0.144, + ["P24-P25"] = 0.144, + ["P25-P26"] = 0.714, + ["P17-P76"] = 0.244, + ["P76-P27"] = 1.710, + + ["L2-L4"] = 1.140, + ["L24-L39"] = 1.000, + ["L40-L63"] = 1.000, + } + self.ResistorTemperatures = { + ["P3-P4"] = 1, + ["P4-P5"] = 1, + ["P5-P6"] = 1, + ["P6-P7"] = 1, + ["P7-P8"] = 1, + ["P8-P9"] = 1, + ["P9-P10"] = 1, + ["P10-P11"] = 1, + ["P11-P12"] = 1, + ["P12-P13"] = 1, + ["P1-P3"] = 1, + ["P3-P14"] = 1, + ["P13-P42"] = 1, + + ["P16-P17"] = 2, + ["P17-P18"] = 2, + ["P18-P19"] = 2, + ["P19-P20"] = 2, + ["P20-P21"] = 2, + ["P21-P22"] = 2, + ["P22-P23"] = 2, + ["P23-P24"] = 2, + ["P24-P25"] = 2, + ["P25-P26"] = 2, + ["P17-P76"] = 2, + ["P76-P27"] = 2, + } + self.Overheating = {} + + for k,v in pairs(self.Resistors) do + self[k] = v + self.Overheating[k] = 0 + end +end + +function TRAIN_SYSTEM:Think(dT) + -- Temperature coefficient + local a = 0.0001 + + -- Update resistances + if self.Train.Electric then + for k,v in pairs(self.ResistorTemperatures) do + -- Get temperature + local T = self.Train.Electric["T"..v] or 25 + local O = self.Train.Electric["Overheat"..v] or 0 + + -- Calculate new resistance + self[k] = self.Resistors[k]*(1.0 + a*(T-25) - math.log(1-O)) + end + end +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_kf_47a1.lua b/lua/metrostroi/systems/sys_kf_47a1.lua new file mode 100644 index 0000000..de8584f --- /dev/null +++ b/lua/metrostroi/systems/sys_kf_47a1.lua @@ -0,0 +1,103 @@ +-------------------------------------------------------------------------------- +-- HV Rheostats (KF-47A1) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("KF_47A1") + +function TRAIN_SYSTEM:Initialize() + self.Resistors = { + ["L12-L13"] = 1.730, + ["P13_12"] = 0.485, + ["P12_11"] = 0.945, + ["P10_9"] = 0.144, + ["P9_8"] = 0.19, + ["P8_7"] = 0.22, + ["L8_P1"] = 2.0835,--2.016,--1.9 + ["L8_6"] = 0.49,--0.485 + ["P11_10"] = 0.144,--0.123-0.05, --P11-10 + ["P27"] = 2.66,--2.95 + ["L12_P76"] = 0.367*0.6,--0.367,--0.485 + ["P24_25"] = 0.145*0.6,--0.145,--0.144 + ["P4_6"] = 0.12, + ["P6_7"] = 0.22, + ["P3_4"] = 0.144, + ["P17_18"] = 0.12, + ["P18_20"] = 0.19, + ["P20_21"] = 0.22, + ["P21_22"] = 0.22, + ["P22_23"] = 0.19, + ["P23_24"] = 0.144, + ["P25_26"] = 0.711, + } + self.ResistorTemperatures = { + ["L12-L13"] = 1, + ["P13_12"] = 1, + ["P12_11"] = 1, + ["P10_9"] = 1, + ["P9_8"] = 1, + ["P8_7"] = 1, + ["L8_P1"] = 1, + ["L8_6"] = 1, + ["P11_10"] = 1, + ["P27"] = 1, + ["L12_P76"] = 1, + ["P24_25"] = 1, + ["P4_6"] = 1, + ["P6_7"] = 1, + ["P3_4"] = 1, + ["P17_18"] = 1, + ["P18_20"] = 1, + ["P20_21"] = 1, + ["P21_22"] = 1, + ["P22_23"] = 1, + ["P23_24"] = 1, + ["P25_26"] = 1, + + ["P13_12"] = 1, + ["P12_11"] = 1, + ["P10_9"] = 1, + ["P9_8"] = 1, + ["P8_7"] = 1, + ["L8_P1"] = 1, + ["L8_6"] = 1, + ["P11_10"] = 1, + ["P27"] = 1, + ["L12_P76"] = 1, + ["P24_25"] = 1, + ["P4_6"] = 1, + ["P6_7"] = 1, + ["P3_4"] = 1, + ["P17_18"] = 1, + ["P18_20"] = 1, + ["P20_21"] = 1, + ["P21_22"] = 1, + ["P22_23"] = 1, + ["P23_24"] = 1, + ["P25_26"] = 1, + } + self.Overheating = {} + + for k,v in pairs(self.Resistors) do + self[k] = v + self.Overheating[k] = 0 + end +end + +function TRAIN_SYSTEM:Think(dT) + -- Temperature coefficient + local a = 0.0001 + + -- Update resistances + if self.Train.Electric then + for k,v in pairs(self.ResistorTemperatures) do + -- Get temperature + local T = self.Train.Electric["T"..v] or 25 + local O = self.Train.Electric["Overheat"..v] or 0 + + -- Calculate new resistance + self[k] = self.Resistors[k]*(1.0 + a*(T-25) - math.log(1-O)) + end + end +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_kf_50a.lua b/lua/metrostroi/systems/sys_kf_50a.lua new file mode 100644 index 0000000..76b2efc --- /dev/null +++ b/lua/metrostroi/systems/sys_kf_50a.lua @@ -0,0 +1,28 @@ +-------------------------------------------------------------------------------- +-- HV Rheostats (KF-50A) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("KF_50A") + +function TRAIN_SYSTEM:Initialize() + self.Resistors = { + ["L25-P37"] = 0.282, --703 + ["P35-K2"] = 0.042, + ["L26-P31"] = 0.282, --703 + + --[[ Train.KF_50A--]] ["P29-P28"] = 0.052, + --[[ Train.KF_50A--]] ["P30-P29"] = 0.01125, + --[[ Train.KF_50A--]] ["P31-P30"] = 0.01625, + --[[ Train.KF_50A--]] ["L76-P31"] = 0.0325, + --[[ Train.KF_50A--]] ["P35-L18"] = 0.052, + --[[ Train.KF_50A--]] ["P36-P35"] = 0.01125, + --[[ Train.KF_50A--]] ["P37-P36"] = 0.01625, + --[[ Train.KF_50A--]] ["L74-P37"] = 0.0325, + } + + for k,v in pairs(self.Resistors) do + self[k] = v + end +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_kf_6a.lua b/lua/metrostroi/systems/sys_kf_6a.lua new file mode 100644 index 0000000..7d3cda7 --- /dev/null +++ b/lua/metrostroi/systems/sys_kf_6a.lua @@ -0,0 +1,58 @@ +-------------------------------------------------------------------------------- +-- HV Rheostats (KF-6A) for 81-702, used on underground subway lines +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("KF_6A") + +function TRAIN_SYSTEM:Initialize() + self.Resistors = { + ["P1-P2"] = 0.333, + ["P2-P3"] = 0.25, + ["P3-P4"] = 0.221, + ["P4-P11"] = 0.19, + ["P10-P13"] = 0.441, + ["P13-P11"] = 2.205, + ["P12-P11"] = 1.185, + ["P9-P10"] = 0.197, + ["P8-P9"] = 0.208, + ["P7-P8"] = 0.263, + ["P6-P7"] = 0.331, + ["P14-P1"] = 0.5+0.07, + } + self.ResistorTemperatures = { + ["P1-P2"] = 1, + ["P2-P3"] = 1, + ["P3-P4"] = 1, + ["P4-P11"] = 1, + + ["P9-P10"] = 2, + ["P8-P9"] = 2, + ["P7-P8"] = 2, + ["P6-P7"] = 2, + } + self.Overheating = {} + + for k,v in pairs(self.Resistors) do + self[k] = v + self.Overheating[k] = 0 + end +end + +function TRAIN_SYSTEM:Think(dT) + -- Temperature coefficient + local a = 0.0001 + + -- Update resistances + if self.Train.Electric then + for k,v in pairs(self.ResistorTemperatures) do + -- Get temperature + local T = self.Train.Electric["T"..v] or 25 + local O = self.Train.Electric["Overheat"..v] or 0 + + -- Calculate new resistance + self[k] = self.Resistors[k]*(1.0 + a*(T-25) - math.log(1-O)) + end + end +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_kf_6b.lua b/lua/metrostroi/systems/sys_kf_6b.lua new file mode 100644 index 0000000..8210567 --- /dev/null +++ b/lua/metrostroi/systems/sys_kf_6b.lua @@ -0,0 +1,59 @@ +-------------------------------------------------------------------------------- +-- HV Rheostats (KF-6B) for 81-702, used on ground subway lines +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("KF_6B") + +function TRAIN_SYSTEM:Initialize() + self.Resistors = { + ["P1-P2"] = 0.441, + ["P2-P3"] = 0.25, + ["P3-P4"] = 0.221, + ["P4-P11"] = 0.19, + ["P10-P13"] = 0.88, + ["P13-P11"] = 0.76, + --["P12-P11"] = 1.185, + ["P9-P10"] = 0.197, + ["P8-P9"] = 0.208, + ["P7-P8"] = 0.263, + ["P6-P7"] = 0.441, + ["P14-P1"] = 0.5+0.07, + + } + self.ResistorTemperatures = { + ["P1-P2"] = 1, + ["P2-P3"] = 1, + ["P3-P4"] = 1, + ["P4-P11"] = 1, + + ["P9-P10"] = 2, + ["P8-P9"] = 2, + ["P7-P8"] = 2, + ["P6-P7"] = 2, + } + self.Overheating = {} + + for k,v in pairs(self.Resistors) do + self[k] = v + self.Overheating[k] = 0 + end +end + +function TRAIN_SYSTEM:Think(dT) + -- Temperature coefficient + local a = 0.0001 + + -- Update resistances + if self.Train.Electric then + for k,v in pairs(self.ResistorTemperatures) do + -- Get temperature + local T = self.Train.Electric["T"..v] or 25 + local O = self.Train.Electric["Overheat"..v] or 0 + + -- Calculate new resistance + self[k] = self.Resistors[k]*(1.0 + a*(T-25) - math.log(1-O)) + end + end +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_kf_7a.lua b/lua/metrostroi/systems/sys_kf_7a.lua new file mode 100644 index 0000000..b443fce --- /dev/null +++ b/lua/metrostroi/systems/sys_kf_7a.lua @@ -0,0 +1,20 @@ +-------------------------------------------------------------------------------- +-- HV Rheostats (KF-7A) for 81-702 +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("KF_7A") + +function TRAIN_SYSTEM:Initialize() + self.Resistors = { + ["P20-P21"] = 0.169, + ["P21-P22"] = 0.019, + ["P23-P24"] = 0.169, + ["P24-P25"] = 0.019, + } + + for k,v in pairs(self.Resistors) do + self[k] = v + end +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_kru.lua b/lua/metrostroi/systems/sys_kru.lua new file mode 100644 index 0000000..10bd31b --- /dev/null +++ b/lua/metrostroi/systems/sys_kru.lua @@ -0,0 +1,133 @@ +-------------------------------------------------------------------------------- +-- Emergency controller +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("KRU") + +function TRAIN_SYSTEM:Initialize() + self.Enabled = 0 + self.LockX3 = 0 + self.Position = 0 + self.RealPosition = 0 + + self.Matrix = { + {"14/1", "B3" }, + { 0, 1, 1, 1 }, + {"1/3", "ZM31" }, + { 0, 1, 1, 1 }, + {"2/3", "ZM31" }, + { 0, 0, 1, 1 }, + {"5/3", "ZM31" }, + { 0, 1, 1, 1 }, + {"3/3", "ZM31" }, + { 0, 0, 0, 1 }, + {"20/3", "ZM31" }, + { 0, 1, 1, 1 }, + {"11/3", "FR1" }, + { 0, 1, 1, 1 }, + {"11/3", "D1/1" }, + { 0, 1, 1, 1 }, + {"15/2", "D8" }, + { 1, 0, 0, 0 }, + } + + -- Initialize contacts values + for i=1,#self.Matrix/2 do + local v = self.Matrix[i*2-1] + self[v[1].."-"..v[2]] = 0 + end +end + +function TRAIN_SYSTEM:Inputs() + return { "LockX3", "Enabled", "Set", "Up", "Down", "SetX1", "SetX2", "SetX3", "Set0","14/1-B3" } +end + +function TRAIN_SYSTEM:Outputs() + return { "Position","14/1-B3" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + local prevReverserPosition = self.ReverserPosition + -- Change position + if name == "Enabled" then + self.Enabled = math.floor(value) + elseif name == "LockX3" then + self.LockX3 = math.floor(value) + elseif name == "Set" then + if (self.Enabled ~= 0) and (math.floor(value) ~= self.Position) then + local prevPosition = self.Position + self.Position = math.floor(value) + + -- Limit motion + if self.LockX3 == 0 then + if self.Position > 3 then self.Position = 3 end + else + if self.Position > 2 then self.Position = 2 end + end + if self.Position < 0 then self.Position = 0 end + --[[ + -- Play sounds + if prevPosition < self.Position then + local P,R = prevPosition,self.Position + if P == 0 and R == 1 then self.Train:PlayOnce("kru_0_1", "cabin",0.9) end + if P == 1 and R == 2 then self.Train:PlayOnce("kru_1_2", "cabin",0.9) end + end + + if prevPosition > self.Position then + local P,R = prevPosition,self.Position + if P == 1 and R == 0 then self.Train:PlayOnce("kru_1_0", "cabin",0.9) end + if P == 2 and R == 1 then self.Train:PlayOnce("kru_2_1", "cabin",0.9) end + end + ]] + end + elseif (name == "Up") and (value > 0.5) then + self:TriggerInput("Set",self.Position+1) + elseif (name == "Down") and (value > 0.5) then + self:TriggerInput("Set",self.Position-1) + elseif (name == "SetX1") and (value > 0.5) then + self:TriggerInput("Set",1) + elseif (name == "SetX2") and (value > 0.5) then + self:TriggerInput("Set",2) + elseif (name == "SetX3") and (value > 0.5) then + self:TriggerInput("Set",3) + elseif (name == "Set0") and (value > 0.5) then + self:TriggerInput("Set",0) + end +end + + +function TRAIN_SYSTEM:Think() + local Train = self.Train + if (self.Enabled == 0) and (self.Position ~= 0) then + self.Position = 0 + end + + -- Move controller + self.Timer = self.Timer or CurTime() + if ((CurTime() - self.Timer > 0.15) and (self.Position > self.RealPosition)) then + local P,R = self.RealPosition,self.Position + if P == 0 and R == 1 then self.Train:PlayOnce("kru_0_1", "cabin",0.9) end + if P == 1 and R == 2 then self.Train:PlayOnce("kru_1_2", "cabin",0.9) end + if P == 2 and R == 3 then self.Train:PlayOnce("kru_2_3", "cabin",0.9) end + self.Timer = CurTime() + self.RealPosition = self.RealPosition + 1 + -- Play sounds + end + if ((CurTime() - self.Timer > 0.15) and (self.Position < self.RealPosition)) then + local P,R = self.RealPosition,self.Position + if P == 1 and R == 0 then self.Train:PlayOnce("kru_1_0", "cabin",0.9) end + if P == 2 and R == 1 then self.Train:PlayOnce("kru_2_1", "cabin",0.9) end + if P == 3 and R == 2 then self.Train:PlayOnce("kru_3_2", "cabin",0.9) end + self.Timer = CurTime() + self.RealPosition = self.RealPosition - 1 + end + + -- Update contacts + for i=1,#self.Matrix/2 do + local v = self.Matrix[i*2-1] + local d = self.Matrix[i*2] + self[v[1].."-"..v[2]] = d[self.RealPosition+1] + end +end diff --git a/lua/metrostroi/systems/sys_kv_20.lua b/lua/metrostroi/systems/sys_kv_20.lua new file mode 100644 index 0000000..eb6c15b --- /dev/null +++ b/lua/metrostroi/systems/sys_kv_20.lua @@ -0,0 +1,207 @@ +-------------------------------------------------------------------------------- +-- KV-20 controller +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("KV_20") + +function TRAIN_SYSTEM:Initialize() + self.Enabled = 1 + self.RCU = 1 + self.ControllerPosition = 0 + self.ReverserPosition = 0 + self.RealControllerPosition = 0 + self.ChangeSpeed = 0.10 + + self.ReverserMatrix = { + { "U2" , "4" }, + { 1, 0, 0 }, + { "U2" , "5M" }, + { 0, 0, 1 }, + { "10" , "F1" }, + { 1, 1, 0 }, + { "D" , "D2" }, + { 1, 0, 1 }, + { "D" , "D1" }, + { 1, 0, 1 }, + { "F" , "F7" }, + { 0, 0, 1 }, + } + self.ControllerMatrix = { + {"U2", "10AK"}, + { 1, 1, 1, 0, 1, 1, 1 }, + {"10", "8" }, + { 1, 0, 0, 0, 0, 0, 0 }, + {"U2", "1" }, + { 0, 0, 0, 0, 1, 1, 1 }, + {"U2", "2" }, + { 1, 1, 0, 0, 0, 1, 1 }, + {"U2", "3" }, + { 0, 0, 0, 0, 0, 0, 1 }, + {"U2", "6" }, + { 1, 1, 1, 0, 0, 0, 0 }, + {"U2", "7" }, + { 0, 1, 0, 0, 0, 0, 0 }, + {"0", "12"}, + { 1, 1, 1, 0, 1, 1, 1 }, + {"10AK", "17"}, + { 0, 0, 0, 1, 0, 0, 0 }, + {"5M", "5" }, + { 1, 1, 1, 0, 0, 0, 0 }, + } + + -- Initialize contacts values + for i=1,#self.ReverserMatrix/2 do + local v = self.ReverserMatrix[i*2-1] + self[v[1].."-"..v[2]] = 0 + end + for i=1,#self.ControllerMatrix/2 do + local v = self.ControllerMatrix[i*2-1] + self[v[1].."-"..v[2]] = 0 + end +end + +function TRAIN_SYSTEM:Inputs() + return { "Enabled", "RCU", "ControllerSet", "ReverserSet", + "ControllerUp","ControllerDown","ReverserUp","ReverserDown", + "SetX1", "SetX2", "SetX3", "Set0", "Set0Fast", "SetT1", "SetT1A", "SetT2", } +end + +function TRAIN_SYSTEM:Outputs() + return { "ControllerPosition","RealControllerPosition", "ReverserPosition", "RCU"} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + local prevReverserPosition = self.ReverserPosition + -- Change position + if name == "Type" then + self.Type = math.floor(value) + elseif name == "Enabled" then + self.Enabled = math.floor(value) + elseif name == "RCU" then + if self.RCU ~= math.floor(value) then + self.RCU = math.floor(value) + self.Train:PlayOnce(self.RCU==1 and "rcu_on" or "rcu_off", "cabin",0.9) + end + elseif name == "ControllerSet" then + if self.Enabled ~= 0 and (self.ReverserPosition ~= 0) and (math.floor(value) ~= self.ControllerPosition) then + local prevControllerPosition = self.ControllerPosition + self.ControllerPosition = math.floor(value) + + -- Limit motion + if self.ControllerPosition > 3 then self.ControllerPosition = 3 end + if self.ControllerPosition < -3 then self.ControllerPosition = -3 end + end + elseif name == "ReverserSet" then + if self.Enabled ~= 0 and (math.floor(value) ~= self.ReverserPosition) and self.ControllerPosition == 0 then + local prevReverserPosition = self.ReverserPosition + self.ReverserPosition = math.floor(value) + if self.ReverserPosition > 1 then self.ReverserPosition = 1 end + if self.ReverserPosition < -1 then self.ReverserPosition = -1 end + if prevReverserPosition ~= self.ReverserPosition then + if self.ReverserPosition == -1 then self.Train:PlayOnce("ezh3_revers_0-b","cabin",1) end + if self.ReverserPosition == 0 then + if prevReverserPosition == -1 then + self.Train:PlayOnce("ezh3_revers_b-0","cabin",1) + else + self.Train:PlayOnce("ezh3_revers_f-0","cabin",1) + end + end + if self.ReverserPosition == 1 then self.Train:PlayOnce("ezh3_revers_0-f","cabin",1) end + end + end + elseif (name == "ControllerUp") and (value > 0.5) then + self:TriggerInput("ControllerSet",self.ControllerPosition+1) + self.Timer = CurTime()-self.ChangeSpeed + self.SecondSound = true + elseif (name == "ControllerDown") and (value > 0.5) then + self:TriggerInput("ControllerSet",self.ControllerPosition-1) + self.Timer = CurTime()-self.ChangeSpeed + self.SecondSound = true + elseif (name == "ReverserUp") and (value > 0.5) then + self:TriggerInput("ReverserSet",self.ReverserPosition+1) + elseif (name == "ReverserDown") and (value > 0.5) then + self:TriggerInput("ReverserSet",self.ReverserPosition-1) + elseif (name == "SetX1") and (value > 0.5) then + self:TriggerInput("ControllerSet",1) + elseif (name == "SetX2") and (value > 0.5) then + self:TriggerInput("ControllerSet",2) + elseif (name == "SetX3") and (value > 0.5) then + self:TriggerInput("ControllerSet",3) + elseif (name == "Set0") and (value > 0.5) then + self:TriggerInput("ControllerSet",0) + elseif (name == "Set0Fast") and (value > 0.5) then + self:TriggerInput("ControllerSet",0) + self.ChangeSpeed = 0.05 + elseif (name == "SetT1") and (value > 0.5) then + self:TriggerInput("ControllerSet",-1) + elseif (name == "SetT1A") and (value > 0.5) then + self:TriggerInput("ControllerSet",-2) + elseif (name == "SetT2") and (value > 0.5) then + self:TriggerInput("ControllerSet",-3) + end +end + + +function TRAIN_SYSTEM:Think() + --self:Initialize() + local Train = self.Train + + if (self.Enabled == 0) and (self.ReverserPosition ~= 0) then + self.ReverserPosition = 0 + self.ControllerPosition = 0 + end + if (self.ReverserPosition == 0) and (self.ControllerPosition ~= 0) then + self.ReverserPosition = 0 + self.ControllerPosition = 0 + end + + -- Move controller + self.Timer = self.Timer or CurTime() + if ((CurTime() - self.Timer > self.ChangeSpeed) and (self.ControllerPosition > self.RealControllerPosition)) then + local previousPosition = self.RealControllerPosition + self.Timer = CurTime() + self.RealControllerPosition = self.RealControllerPosition + 1 + + local A,B = previousPosition,self.RealControllerPosition + + if (A == -3) and (B == -2) then self.Train:PlayOnce("kv40_t2_t1a", "cabin",1) end + if (A == -2) and (B == -1) then self.Train:PlayOnce("kv40_t1a_t1", "cabin",1) end + if self.SecondSound and (A == -1) and (B == 0) then self.Train:PlayOnce("kv40_t1_0", "cabin",1) end + if not self.SecondSound and (A == -1) and (B == 0) then self.Train:PlayOnce("kv40_t1_0", "cabin",1) end + + if (A == 0) and (B == 1) then self.Train:PlayOnce("kv40_0_x1", "cabin",1) end + if (A == 1) and (B == 2) then self.Train:PlayOnce("kv40_x1_x2", "cabin",1) end + if (A == 2) and (B == 3) then self.Train:PlayOnce("kv40_x2_x3", "cabin",1) end + self.SecondSound = nil + end + if ((CurTime() - self.Timer > self.ChangeSpeed) and (self.ControllerPosition < self.RealControllerPosition)) then + local previousPosition = self.RealControllerPosition + self.Timer = CurTime() + self.RealControllerPosition = self.RealControllerPosition - 1 + + local A,B = previousPosition,self.RealControllerPosition + if (A == 3) and (B == 2) then self.Train:PlayOnce("kv40_x3_x2", "cabin",0.9) end + if (A == 2) and (B == 1) then self.Train:PlayOnce("kv40_x2_x1", "cabin",0.9) end + if (A == 1) and (B == 0) then self.Train:PlayOnce("kv40_x1_0", "cabin",0.9) end + + if (A == 0) and (B == -1) then self.Train:PlayOnce("kv40_0_t1", "cabin",0.8) end + if (A == -1) and (B == -2) then self.Train:PlayOnce("kv40_t1_t1a", "cabin",0.8) end + if (A == -2) and (B == -3) then self.Train:PlayOnce("kv40_t1a_t2", "cabin",0.8) end + self.SecondSound = nil + end + if self.RealControllerPosition == 0 then self.ChangeSpeed = 0.10 end + local position = self.RealControllerPosition + -- Update contacts + for i=1,#self.ReverserMatrix/2 do + local v = self.ReverserMatrix[i*2-1] + local d = self.ReverserMatrix[i*2] + self[v[1].."-"..v[2]] = d[self.ReverserPosition+2] + end + for i=1,#self.ControllerMatrix/2 do + local v = self.ControllerMatrix[i*2-1] + local d = self.ControllerMatrix[i*2] + self[v[1].."-"..v[2]] = d[(position)+4] + end +end diff --git a/lua/metrostroi/systems/sys_kv_35.lua b/lua/metrostroi/systems/sys_kv_35.lua new file mode 100644 index 0000000..1979eb1 --- /dev/null +++ b/lua/metrostroi/systems/sys_kv_35.lua @@ -0,0 +1,210 @@ +-------------------------------------------------------------------------------- +-- KV-35 controller +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("KV_35") + +function TRAIN_SYSTEM:Initialize() + self.Enabled = 1 + self.RCU = 1 + self.ControllerPosition = 0 + self.ReverserPosition = 0 + self.RealControllerPosition = 0 + self.ChangeSpeed = 0.10 + + self.ReverserMatrix = { + { "F" , "F7" }, + { 0, 0, 1 }, + { "10" , "14B" }, + { 1, 0, 1 }, + { "D" , "D1" }, + { 1, 0, 1 }, + { "10" , "F1" }, + { 1, 1, 0 }, + { "U2" , "4" }, + { 1, 0, 0 }, + { "U2" , "5ZH" }, + { 0, 0, 1 }, + } + self.ControllerMatrix = { + {"10", "8"}, + { 1, 0, 0, 0, 0, 0, 0 }, + {"U2", "10AK"}, + { 1, 1, 1, 0, 1, 1, 1 }, + {"U2", "2" }, + { 1, 1, 0, 0, 0, 1, 1 }, + {"U2", "3" }, + { 1, 0, 0, 0, 0, 0, 1 }, + {"U2", "20"}, + { 1, 1, 1, 0, 1, 1, 1 }, + {"U2", "25"}, + { 0, 1, 0, 0, 0, 0, 0 }, + {"5ZH", "5"}, + { 1, 1, 1, 0, 0, 0, 0 }, + {"14", "14B"}, + { 0, 0, 0, 1, 1, 1, 1 }, + {"10AK", "17"}, + { 0, 0, 0, 1, 0, 0, 0 }, + {"U2", "6"}, + { 1, 1, 1, 0, 0, 0, 0 }, + {"10AK", "7A"}, + { 0, 0, 0, 0, 1, 1, 1 }, + } + --25–6 25-й провод??? + + -- Initialize contacts values + for i=1,#self.ReverserMatrix/2 do + local v = self.ReverserMatrix[i*2-1] + self[v[1].."-"..v[2]] = 0 + end + for i=1,#self.ControllerMatrix/2 do + local v = self.ControllerMatrix[i*2-1] + self[v[1].."-"..v[2]] = 0 + end +end + +function TRAIN_SYSTEM:Inputs() + return { "Enabled", "RCU", "ControllerSet", "ReverserSet", + "ControllerUp","ControllerDown","ReverserUp","ReverserDown", + "SetX1", "SetX2", "SetX3", "Set0", "Set0Fast", "SetT1", "SetT1A", "SetT2", } +end + +function TRAIN_SYSTEM:Outputs() + return { "ControllerPosition","RealControllerPosition", "ReverserPosition", "RCU"} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + local prevReverserPosition = self.ReverserPosition + -- Change position + if name == "Type" then + self.Type = math.floor(value) + elseif name == "Enabled" then + self.Enabled = math.floor(value) + elseif name == "RCU" then + if self.RCU ~= math.floor(value) then + self.RCU = math.floor(value) + self.Train:PlayOnce(self.RCU==1 and "rcu_on" or "rcu_off", "cabin",0.9) + end + elseif name == "ControllerSet" then + if self.Enabled ~= 0 and (self.ReverserPosition ~= 0) and (math.floor(value) ~= self.ControllerPosition) then + local prevControllerPosition = self.ControllerPosition + self.ControllerPosition = math.floor(value) + + -- Limit motion + if self.ControllerPosition > 3 then self.ControllerPosition = 3 end + if self.ControllerPosition < -3 then self.ControllerPosition = -3 end + end + elseif name == "ReverserSet" then + if self.Enabled ~= 0 and (math.floor(value) ~= self.ReverserPosition) and self.ControllerPosition == 0 then + local prevReverserPosition = self.ReverserPosition + self.ReverserPosition = math.floor(value) + if self.ReverserPosition > 1 then self.ReverserPosition = 1 end + if self.ReverserPosition < -1 then self.ReverserPosition = -1 end + if prevReverserPosition ~= self.ReverserPosition then + if self.ReverserPosition == -1 then self.Train:PlayOnce("ezh3_revers_0-b","cabin",1) end + if self.ReverserPosition == 0 then + if prevReverserPosition == -1 then + self.Train:PlayOnce("ezh3_revers_b-0","cabin",1) + else + self.Train:PlayOnce("ezh3_revers_f-0","cabin",1) + end + end + if self.ReverserPosition == 1 then self.Train:PlayOnce("ezh3_revers_0-f","cabin",1) end + end + end + elseif (name == "ControllerUp") and (value > 0.5) then + self:TriggerInput("ControllerSet",self.ControllerPosition+1) + self.Timer = CurTime()-self.ChangeSpeed + self.SecondSound = true + elseif (name == "ControllerDown") and (value > 0.5) then + self:TriggerInput("ControllerSet",self.ControllerPosition-1) + self.Timer = CurTime()-self.ChangeSpeed + self.SecondSound = true + elseif (name == "ReverserUp") and (value > 0.5) then + self:TriggerInput("ReverserSet",self.ReverserPosition+1) + elseif (name == "ReverserDown") and (value > 0.5) then + self:TriggerInput("ReverserSet",self.ReverserPosition-1) + elseif (name == "SetX1") and (value > 0.5) then + self:TriggerInput("ControllerSet",1) + elseif (name == "SetX2") and (value > 0.5) then + self:TriggerInput("ControllerSet",2) + elseif (name == "SetX3") and (value > 0.5) then + self:TriggerInput("ControllerSet",3) + elseif (name == "Set0") and (value > 0.5) then + self:TriggerInput("ControllerSet",0) + elseif (name == "Set0Fast") and (value > 0.5) then + self:TriggerInput("ControllerSet",0) + self.ChangeSpeed = 0.05 + elseif (name == "SetT1") and (value > 0.5) then + self:TriggerInput("ControllerSet",-1) + elseif (name == "SetT1A") and (value > 0.5) then + self:TriggerInput("ControllerSet",-2) + elseif (name == "SetT2") and (value > 0.5) then + self:TriggerInput("ControllerSet",-3) + end +end + + +function TRAIN_SYSTEM:Think() + --self:Initialize() + local Train = self.Train + + if (self.Enabled == 0) and (self.ReverserPosition ~= 0) then + self.ReverserPosition = 0 + self.ControllerPosition = 0 + end + if (self.ReverserPosition == 0) and (self.ControllerPosition ~= 0) then + self.ReverserPosition = 0 + self.ControllerPosition = 0 + end + + -- Move controller + self.Timer = self.Timer or CurTime() + if ((CurTime() - self.Timer > self.ChangeSpeed) and (self.ControllerPosition > self.RealControllerPosition)) then + local previousPosition = self.RealControllerPosition + self.Timer = CurTime() + self.RealControllerPosition = self.RealControllerPosition + 1 + + local A,B = previousPosition,self.RealControllerPosition + + if (A == -3) and (B == -2) then self.Train:PlayOnce("kv40_t2_t1a", "cabin",1) end + if (A == -2) and (B == -1) then self.Train:PlayOnce("kv40_t1a_t1", "cabin",1) end + if self.SecondSound and (A == -1) and (B == 0) then self.Train:PlayOnce("kv40_t1_0", "cabin",1) end + if not self.SecondSound and (A == -1) and (B == 0) then self.Train:PlayOnce("kv40_t1_0", "cabin",1) end + + if (A == 0) and (B == 1) then self.Train:PlayOnce("kv40_0_x1", "cabin",1) end + if (A == 1) and (B == 2) then self.Train:PlayOnce("kv40_x1_x2", "cabin",1) end + if (A == 2) and (B == 3) then self.Train:PlayOnce("kv40_x2_x3", "cabin",1) end + self.SecondSound = nil + end + if ((CurTime() - self.Timer > self.ChangeSpeed) and (self.ControllerPosition < self.RealControllerPosition)) then + local previousPosition = self.RealControllerPosition + self.Timer = CurTime() + self.RealControllerPosition = self.RealControllerPosition - 1 + + local A,B = previousPosition,self.RealControllerPosition + if (A == 3) and (B == 2) then self.Train:PlayOnce("kv40_x3_x2", "cabin",0.9) end + if (A == 2) and (B == 1) then self.Train:PlayOnce("kv40_x2_x1", "cabin",0.9) end + if (A == 1) and (B == 0) then self.Train:PlayOnce("kv40_x1_0", "cabin",0.9) end + + if (A == 0) and (B == -1) then self.Train:PlayOnce("kv40_0_t1", "cabin",0.8) end + if (A == -1) and (B == -2) then self.Train:PlayOnce("kv40_t1_t1a", "cabin",0.8) end + if (A == -2) and (B == -3) then self.Train:PlayOnce("kv40_t1a_t2", "cabin",0.8) end + self.SecondSound = nil + end + if self.RealControllerPosition == 0 then self.ChangeSpeed = 0.10 end + local position = self.RealControllerPosition + -- Update contacts + for i=1,#self.ReverserMatrix/2 do + local v = self.ReverserMatrix[i*2-1] + local d = self.ReverserMatrix[i*2] + self[v[1].."-"..v[2]] = d[self.ReverserPosition+2] + end + for i=1,#self.ControllerMatrix/2 do + local v = self.ControllerMatrix[i*2-1] + local d = self.ControllerMatrix[i*2] + self[v[1].."-"..v[2]] = d[(position)+4] + end +end diff --git a/lua/metrostroi/systems/sys_kv_40.lua b/lua/metrostroi/systems/sys_kv_40.lua new file mode 100644 index 0000000..96ea960 --- /dev/null +++ b/lua/metrostroi/systems/sys_kv_40.lua @@ -0,0 +1,216 @@ +-------------------------------------------------------------------------------- +-- KV-40 controller +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("KV_40") + +function TRAIN_SYSTEM:Initialize() + self.Enabled = 1 + self.RCU = 1 + self.ControllerPosition = 0 + self.ReverserPosition = 0 + self.RealControllerPosition = 0 + self.ChangeSpeed = 0.10 + + self.ReverserMatrix = { + { "U2" , "4" }, + { 1, 0, 0 }, + { "U2" , "5" }, + { 0, 0, 1 }, + { "D" , "D1" }, + { 1, 0, 1 }, + { "B2" , "F1" }, + { 1, 1, 0 }, + { "0" , "4" }, + { 0, 0, 1 }, + { "F" , "F7" }, + { 0, 0, 1 }, + { "7D" , "7G" }, + { 1, 0, 1 }, + { "10AK", "VRD" }, --Ema + { 0, 1, 0 }, + { "10a" , "8" }, --Ema + { 1, 0, 1 }, + } + self.ControllerMatrix = { + {"10", "8" }, + { 1, 0, 0, 0, 0, 0, 0 }, + {"U2", "10AK"}, + { 1, 1, 1, 0, 1, 1, 1 }, + {"33", "10AK"}, + { 0, 0, 0, 0, 1, 1, 1 }, + {"3", "2" }, + { 1, 0, 0, 0, 0, 0, 1 }, + {"U2", "2" }, + { 1, 1, 0, 0, 0, 1, 1 }, + {"U2", "3" }, + { 1, 0, 0, 0, 0, 0, 1 }, + {"1B", "10AK"}, + { 0, 0, 0, 1, 1, 1, 1 }, + {"U2", "6" }, + { 1, 1, 1, 0, 0, 0, 0 }, + {"25", "6" }, + { 0, 1, 0, 0, 0, 0, 0 }, + {"U2", "20" }, + { 1, 1, 1, 0, 1, 1, 1 }, + {"U4", "10AK"}, + { 0, 0, 0, 1, 0, 0, 0 }, + } + --25–6 25-й провод??? + + -- Initialize contacts values + for i=1,#self.ReverserMatrix/2 do + local v = self.ReverserMatrix[i*2-1] + self[v[1].."-"..v[2]] = 0 + end + for i=1,#self.ControllerMatrix/2 do + local v = self.ControllerMatrix[i*2-1] + self[v[1].."-"..v[2]] = 0 + end +end + +function TRAIN_SYSTEM:Inputs() + return { "Enabled", "RCU", "ControllerSet", "ReverserSet", + "ControllerUp","ControllerDown","ReverserUp","ReverserDown", + "SetX1", "SetX2", "SetX3", "Set0", "Set0Fast", "SetT1", "SetT1A", "SetT2", } +end + +function TRAIN_SYSTEM:Outputs() + return { "ControllerPosition","RealControllerPosition", "ReverserPosition", "RCU"} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + local prevReverserPosition = self.ReverserPosition + -- Change position + if name == "Type" then + self.Type = math.floor(value) + elseif name == "Enabled" then + self.Enabled = math.floor(value) + elseif name == "RCU" then + if self.RCU ~= math.floor(value) then + self.RCU = math.floor(value) + self.Train:PlayOnce(self.RCU==1 and "rcu_on" or "rcu_off", "cabin",0.9) + end + elseif name == "ControllerSet" then + if self.Enabled ~= 0 and (self.ReverserPosition ~= 0) and (math.floor(value) ~= self.ControllerPosition) then + local prevControllerPosition = self.ControllerPosition + self.ControllerPosition = math.floor(value) + + -- Limit motion + if self.ControllerPosition > 3 then self.ControllerPosition = 3 end + if self.ControllerPosition < -3 then self.ControllerPosition = -3 end + end + elseif name == "ReverserSet" then + if self.Enabled ~= 0 and (math.floor(value) ~= self.ReverserPosition) and self.ControllerPosition == 0 then + local prevReverserPosition = self.ReverserPosition + self.ReverserPosition = math.floor(value) + if self.ReverserPosition > 1 then self.ReverserPosition = 1 end + if self.ReverserPosition < -1 then self.ReverserPosition = -1 end + if prevReverserPosition ~= self.ReverserPosition then + if self.ReverserPosition == -1 then self.Train:PlayOnce("ezh3_revers_0-b","cabin",1) end + if self.ReverserPosition == 0 then + if prevReverserPosition == -1 then + self.Train:PlayOnce("ezh3_revers_b-0","cabin",1) + else + self.Train:PlayOnce("ezh3_revers_f-0","cabin",1) + end + end + if self.ReverserPosition == 1 then self.Train:PlayOnce("ezh3_revers_0-f","cabin",1) end + end + end + elseif (name == "ControllerUp") and (value > 0.5) then + self:TriggerInput("ControllerSet",self.ControllerPosition+1) + self.Timer = CurTime()-self.ChangeSpeed + self.SecondSound = true + elseif (name == "ControllerDown") and (value > 0.5) then + self:TriggerInput("ControllerSet",self.ControllerPosition-1) + self.Timer = CurTime()-self.ChangeSpeed + self.SecondSound = true + elseif (name == "ReverserUp") and (value > 0.5) then + self:TriggerInput("ReverserSet",self.ReverserPosition+1) + elseif (name == "ReverserDown") and (value > 0.5) then + self:TriggerInput("ReverserSet",self.ReverserPosition-1) + elseif (name == "SetX1") and (value > 0.5) then + self:TriggerInput("ControllerSet",1) + elseif (name == "SetX2") and (value > 0.5) then + self:TriggerInput("ControllerSet",2) + elseif (name == "SetX3") and (value > 0.5) then + self:TriggerInput("ControllerSet",3) + elseif (name == "Set0") and (value > 0.5) then + self:TriggerInput("ControllerSet",0) + elseif (name == "Set0Fast") and (value > 0.5) then + self:TriggerInput("ControllerSet",0) + self.ChangeSpeed = 0.05 + elseif (name == "SetT1") and (value > 0.5) then + self:TriggerInput("ControllerSet",-1) + elseif (name == "SetT1A") and (value > 0.5) then + self:TriggerInput("ControllerSet",-2) + elseif (name == "SetT2") and (value > 0.5) then + self:TriggerInput("ControllerSet",-3) + end +end + + +function TRAIN_SYSTEM:Think() + --self:Initialize() + local Train = self.Train + + if (self.Enabled == 0) and (self.ReverserPosition ~= 0) then + self.ReverserPosition = 0 + self.ControllerPosition = 0 + end + if (self.ReverserPosition == 0) and (self.ControllerPosition ~= 0) then + self.ReverserPosition = 0 + self.ControllerPosition = 0 + end + + -- Move controller + self.Timer = self.Timer or CurTime() + if ((CurTime() - self.Timer > self.ChangeSpeed) and (self.ControllerPosition > self.RealControllerPosition)) then + local previousPosition = self.RealControllerPosition + self.Timer = CurTime() + self.RealControllerPosition = self.RealControllerPosition + 1 + + local A,B = previousPosition,self.RealControllerPosition + + if (A == -3) and (B == -2) then self.Train:PlayOnce("kv40_t2_t1a", "cabin",1) end + if (A == -2) and (B == -1) then self.Train:PlayOnce("kv40_t1a_t1", "cabin",1) end + if self.SecondSound and (A == -1) and (B == 0) then self.Train:PlayOnce("kv40_t1_0", "cabin",1) end + if not self.SecondSound and (A == -1) and (B == 0) then self.Train:PlayOnce("kv40_t1_0", "cabin",1) end + + if (A == 0) and (B == 1) then self.Train:PlayOnce("kv40_0_x1", "cabin",1) end + if (A == 1) and (B == 2) then self.Train:PlayOnce("kv40_x1_x2", "cabin",1) end + if (A == 2) and (B == 3) then self.Train:PlayOnce("kv40_x2_x3", "cabin",1) end + self.SecondSound = nil + end + if ((CurTime() - self.Timer > self.ChangeSpeed) and (self.ControllerPosition < self.RealControllerPosition)) then + local previousPosition = self.RealControllerPosition + self.Timer = CurTime() + self.RealControllerPosition = self.RealControllerPosition - 1 + + local A,B = previousPosition,self.RealControllerPosition + if (A == 3) and (B == 2) then self.Train:PlayOnce("kv40_x3_x2", "cabin",0.9) end + if (A == 2) and (B == 1) then self.Train:PlayOnce("kv40_x2_x1", "cabin",0.9) end + if (A == 1) and (B == 0) then self.Train:PlayOnce("kv40_x1_0", "cabin",0.9) end + + if (A == 0) and (B == -1) then self.Train:PlayOnce("kv40_0_t1", "cabin",0.8) end + if (A == -1) and (B == -2) then self.Train:PlayOnce("kv40_t1_t1a", "cabin",0.8) end + if (A == -2) and (B == -3) then self.Train:PlayOnce("kv40_t1a_t2", "cabin",0.8) end + self.SecondSound = nil + end + if self.RealControllerPosition == 0 then self.ChangeSpeed = 0.10 end + local position = self.RealControllerPosition + -- Update contacts + for i=1,#self.ReverserMatrix/2 do + local v = self.ReverserMatrix[i*2-1] + local d = self.ReverserMatrix[i*2] + self[v[1].."-"..v[2]] = d[self.ReverserPosition+2] + end + for i=1,#self.ControllerMatrix/2 do + local v = self.ControllerMatrix[i*2-1] + local d = self.ControllerMatrix[i*2] + self[v[1].."-"..v[2]] = d[(position)+4] + end +end diff --git a/lua/metrostroi/systems/sys_kv_55.lua b/lua/metrostroi/systems/sys_kv_55.lua new file mode 100644 index 0000000..fc63166 --- /dev/null +++ b/lua/metrostroi/systems/sys_kv_55.lua @@ -0,0 +1,229 @@ +-------------------------------------------------------------------------------- +-- KV-55 controller +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("KV_55") + +function TRAIN_SYSTEM:Initialize() + self.Enabled = 1 + self.RCU = 1 + self.ControllerPosition = 0 + self.ReverserPosition = 0 + self.RealControllerPosition = 0 + self.ChangeSpeed = 0.10 + + self.ReverserMatrix = { + { "0" , "4" }, + { 0, 0, 1 }, + { "10" , "8a" }, + { 1, 0, 1 }, + { "8" , "8a" }, + { 1, 0, 1 }, + { "10AK", "4" }, + { 1, 0, 0 }, + { "F" , "F7" }, + { 0, 0, 1 }, + { "10AK", "DA" }, + { 1, 0, 1 }, + { "10AK", "5" }, + { 0, 0, 1 }, + { "10AK", "VRD"}, + { 0, 1, 0 }, + + { "B2" , "F1" }, + { 1, 1, 0 }, + { "D" , "D1" }, + { 1, 0, 1 }, + { "D4" , "19" }, + { 1, 0, 1 }, + { "D4" , "15" }, + { 0, 1, 0 } + } + self.ControllerMatrix = { + {"5", "5a" }, + { 1, 1, 1, 0, 0, 0, 0 }, + {"10", "8" }, + { 1, 0, 0, 0, 0, 0, 0 }, + {"U2", "10AK"}, + { 1, 1, 1, 0, 1, 1, 1 }, + {"33", "10AK"}, + { 0, 0, 0, 0, 1, 1, 1 }, + {"1", "10AK"}, + { 0, 0, 0, 1, 1, 1, 1 }, + {"17", "10AK"}, + { 0, 0, 0, 1, 0, 0, 0 }, + + {"U2", "RVT" }, + { 1, 1, 1, 0, 0, 0, 0 }, + {"U2", "2" }, + { 1, 1, 0, 0, 0, 0, 0 }, + {"U2", "2a" }, + { 1, 1, 0, 0, 0, 1, 1 }, + {"U2", "20" }, + { 1, 1, 1, 0, 1, 1, 1 }, + {"U2", "25" }, + { 0, 1, 0, 0, 0, 0, 0 }, + {"U2", "3" }, + { 1, 0, 0, 0, 0, 0, 1 }, + {"U2", "FA" }, + { 1, 1, 1, 0, 1, 1, 1 }, + {"UPO", "13" }, + { 1, 1, 1, 1, 0, 0, 0 }, + } + + -- Initialize contacts values + for i=1,#self.ReverserMatrix/2 do + local v = self.ReverserMatrix[i*2-1] + self[v[1].."-"..v[2]] = 0 + end + for i=1,#self.ControllerMatrix/2 do + local v = self.ControllerMatrix[i*2-1] + self[v[1].."-"..v[2]] = 0 + end +end + +function TRAIN_SYSTEM:Inputs() + return { "Enabled", "RCU", "ControllerSet", "ReverserSet", + "ControllerUp","ControllerDown","ReverserUp","ReverserDown", + "SetX1", "SetX2", "SetX3", "Set0", "Set0Fast", "SetT1", "SetT1A", "SetT2", } +end + +function TRAIN_SYSTEM:Outputs() + return { "ControllerPosition","RealControllerPosition", "ReverserPosition", "10AK-DA", "RCU" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + local prevReverserPosition = self.ReverserPosition + -- Change position + if name == "Type" then + self.Type = math.floor(value) + elseif name == "Enabled" then + self.Enabled = math.floor(value) + elseif name == "RCU" then + if self.RCU ~= math.floor(value) then + self.RCU = math.floor(value) + self.Train:PlayOnce(self.RCU==1 and "rcu_on" or "rcu_off", "cabin",0.9) + end + elseif name == "ControllerSet" then + if self.Enabled ~= 0 and (self.ReverserPosition ~= 0) and (math.floor(value) ~= self.ControllerPosition) then + local prevControllerPosition = self.ControllerPosition + self.ControllerPosition = math.floor(value) + + -- Limit motion + if self.ControllerPosition > 3 then self.ControllerPosition = 3 end + if self.ControllerPosition < -3 then self.ControllerPosition = -3 end + end + elseif name == "ReverserSet" then + if self.Enabled ~= 0 and (math.floor(value) ~= self.ReverserPosition) and self.ControllerPosition == 0 then + local prevReverserPosition = self.ReverserPosition + self.ReverserPosition = math.floor(value) + if self.ReverserPosition > 1 then self.ReverserPosition = 1 end + if self.ReverserPosition < -1 then self.ReverserPosition = -1 end + if prevReverserPosition ~= self.ReverserPosition then + if self.ReverserPosition == -1 then self.Train:PlayOnce("ezh3_revers_0-b","cabin",1) end + if self.ReverserPosition == 0 then + if prevReverserPosition == -1 then + self.Train:PlayOnce("ezh3_revers_b-0","cabin",1) + else + self.Train:PlayOnce("ezh3_revers_f-0","cabin",1) + end + end + if self.ReverserPosition == 1 then self.Train:PlayOnce("ezh3_revers_0-f","cabin",1) end + end + end + elseif (name == "ControllerUp") and (value > 0.5) then + self:TriggerInput("ControllerSet",self.ControllerPosition+1) + self.Timer = CurTime()-self.ChangeSpeed + self.SecondSound = true + elseif (name == "ControllerDown") and (value > 0.5) then + self:TriggerInput("ControllerSet",self.ControllerPosition-1) + self.Timer = CurTime()-self.ChangeSpeed + self.SecondSound = true + elseif (name == "ReverserUp") and (value > 0.5) then + self:TriggerInput("ReverserSet",self.ReverserPosition+1) + elseif (name == "ReverserDown") and (value > 0.5) then + self:TriggerInput("ReverserSet",self.ReverserPosition-1) + elseif (name == "SetX1") and (value > 0.5) then + self:TriggerInput("ControllerSet",1) + elseif (name == "SetX2") and (value > 0.5) then + self:TriggerInput("ControllerSet",2) + elseif (name == "SetX3") and (value > 0.5) then + self:TriggerInput("ControllerSet",3) + elseif (name == "Set0") and (value > 0.5) then + self:TriggerInput("ControllerSet",0) + elseif (name == "Set0Fast") and (value > 0.5) then + self:TriggerInput("ControllerSet",0) + self.ChangeSpeed = 0.05 + elseif (name == "SetT1") and (value > 0.5) then + self:TriggerInput("ControllerSet",-1) + elseif (name == "SetT1A") and (value > 0.5) then + self:TriggerInput("ControllerSet",-2) + elseif (name == "SetT2") and (value > 0.5) then + self:TriggerInput("ControllerSet",-3) + end +end + + +function TRAIN_SYSTEM:Think() + --self:Initialize() + local Train = self.Train + + if (self.Enabled == 0) and (self.ReverserPosition ~= 0) then + self.ReverserPosition = 0 + self.ControllerPosition = 0 + end + if (self.ReverserPosition == 0) and (self.ControllerPosition ~= 0) then + self.ReverserPosition = 0 + self.ControllerPosition = 0 + end + + -- Move controller + self.Timer = self.Timer or CurTime() + if ((CurTime() - self.Timer > self.ChangeSpeed) and (self.ControllerPosition > self.RealControllerPosition)) then + local previousPosition = self.RealControllerPosition + self.Timer = CurTime() + self.RealControllerPosition = self.RealControllerPosition + 1 + + local A,B = previousPosition,self.RealControllerPosition + + if (A == -3) and (B == -2) then self.Train:PlayOnce("kv40_t2_t1a", "cabin",1) end + if (A == -2) and (B == -1) then self.Train:PlayOnce("kv40_t1a_t1", "cabin",1) end + if self.SecondSound and (A == -1) and (B == 0) then self.Train:PlayOnce("kv40_t1_0", "cabin",1) end + if not self.SecondSound and (A == -1) and (B == 0) then self.Train:PlayOnce("kv40_t1_0", "cabin",1) end + + if (A == 0) and (B == 1) then self.Train:PlayOnce("kv40_0_x1", "cabin",1) end + if (A == 1) and (B == 2) then self.Train:PlayOnce("kv40_x1_x2", "cabin",1) end + if (A == 2) and (B == 3) then self.Train:PlayOnce("kv40_x2_x3", "cabin",1) end + self.SecondSound = nil + end + if ((CurTime() - self.Timer > self.ChangeSpeed) and (self.ControllerPosition < self.RealControllerPosition)) then + local previousPosition = self.RealControllerPosition + self.Timer = CurTime() + self.RealControllerPosition = self.RealControllerPosition - 1 + + local A,B = previousPosition,self.RealControllerPosition + if (A == 3) and (B == 2) then self.Train:PlayOnce("kv40_x3_x2", "cabin",0.9) end + if (A == 2) and (B == 1) then self.Train:PlayOnce("kv40_x2_x1", "cabin",0.9) end + if (A == 1) and (B == 0) then self.Train:PlayOnce("kv40_x1_0", "cabin",0.9) end + + if (A == 0) and (B == -1) then self.Train:PlayOnce("kv40_0_t1", "cabin",0.8) end + if (A == -1) and (B == -2) then self.Train:PlayOnce("kv40_t1_t1a", "cabin",0.8) end + if (A == -2) and (B == -3) then self.Train:PlayOnce("kv40_t1a_t2", "cabin",0.8) end + self.SecondSound = nil + end + if self.RealControllerPosition == 0 then self.ChangeSpeed = 0.10 end + local position = self.RealControllerPosition + -- Update contacts + for i=1,#self.ReverserMatrix/2 do + local v = self.ReverserMatrix[i*2-1] + local d = self.ReverserMatrix[i*2] + self[v[1].."-"..v[2]] = d[self.ReverserPosition+2] + end + for i=1,#self.ControllerMatrix/2 do + local v = self.ControllerMatrix[i*2-1] + local d = self.ControllerMatrix[i*2] + self[v[1].."-"..v[2]] = d[(position)+4] + end +end diff --git a/lua/metrostroi/systems/sys_kv_66.lua b/lua/metrostroi/systems/sys_kv_66.lua new file mode 100644 index 0000000..c2bcc70 --- /dev/null +++ b/lua/metrostroi/systems/sys_kv_66.lua @@ -0,0 +1,214 @@ +-------------------------------------------------------------------------------- +-- KV-66 controller +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("KV_66") + +function TRAIN_SYSTEM:Initialize() + self.Enabled = 1 + self.RCU = 1 + self.ControllerPosition = 0 + self.ReverserPosition = 0 + self.RealControllerPosition = 0 + self.ChangeSpeed = 0.10 + + self.ReverserMatrix = { + { "U2" , "4" }, + { 1, 0, 0 }, + { "U2" , "5" }, + { 0, 0, 1 }, + { "D" , "D1" }, + { 1, 0, 1 }, + { "B2" , "F1" }, + { 1, 1, 0 }, + { "10" , "14A"}, + { 1, 1, 0 }, + { "0" , "4" }, + { 0, 0, 1 }, + { "F" , "F7" }, + { 0, 0, 1 }, + { "7D" , "7G" }, + { 1, 0, 1 }, + } + self.ControllerMatrix = { + {"10", "8" }, + { 1, 0, 0, 0, 0, 0, 0 }, + {"U2", "10AK"}, + { 1, 1, 1, 0, 1, 1, 1 }, + {"U2", "2" }, + { 1, 1, 0, 0, 0, 1, 1 }, + {"U2", "3" }, + { 0, 0, 0, 0, 0, 0, 1 }, + {"33", "10AK"}, + { 0, 0, 0, 0, 1, 1, 1 }, + {"10AK", "1"}, + { 0, 0, 0, 1, 1, 1, 1 }, + {"U2", "6" }, + { 1, 1, 1, 0, 0, 0, 0 }, + {"U2", "20"}, + { 1, 1, 1, 0, 1, 1, 1 }, + {"6", "25"}, + { 0, 1, 0, 0, 0, 0, 0 }, + {"10AK", "17"}, + { 0, 0, 0, 1, 0, 0, 0 }, + {"15A", "15B"}, + { 1, 1, 1, 1, 0, 0, 0 }, + {"14A", "14B"}, + { 0, 0, 0, 1, 1, 1, 1 }, + } + + -- Initialize contacts values + for i=1,#self.ReverserMatrix/2 do + local v = self.ReverserMatrix[i*2-1] + self[v[1].."-"..v[2]] = 0 + end + for i=1,#self.ControllerMatrix/2 do + local v = self.ControllerMatrix[i*2-1] + self[v[1].."-"..v[2]] = 0 + end +end + +function TRAIN_SYSTEM:Inputs() + return { "Enabled", "RCU","ControllerSet", "ReverserSet", + "ControllerUp","ControllerDown","ReverserUp","ReverserDown", + "SetX1", "SetX2", "SetX3", "Set0", "Set0Fast", "SetT1", "SetT1A", "SetT2",} +end + +function TRAIN_SYSTEM:Outputs() + return { "ControllerPosition","RealControllerPosition", "ReverserPosition", "10AS-33","D4-15","RCU" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + local prevReverserPosition = self.ReverserPosition + -- Change position + if name == "Type" then + self.Type = math.floor(value) + elseif name == "Enabled" then + self.Enabled = math.floor(value) + elseif name == "RCU" then + if self.RCU ~= math.floor(value) then + self.RCU = math.floor(value) + self.Train:PlayOnce(self.RCU==1 and "rcu_on" or "rcu_off", "cabin",0.9) + end + elseif name == "ControllerSet" then + if (self.Enabled ~= 0) and (self.ReverserPosition ~= 0) and (math.floor(value) ~= self.ControllerPosition) then + local prevControllerPosition = self.ControllerPosition + self.ControllerPosition = math.floor(value) + + -- Limit motion + if self.ControllerPosition > 3 then self.ControllerPosition = 3 end + if self.ControllerPosition < -3 then self.ControllerPosition = -3 end + end + elseif name == "ReverserSet" then + if (self.Enabled ~= 0) and (math.floor(value) ~= self.ReverserPosition) and self.ControllerPosition == 0 then + local prevReverserPosition = self.ReverserPosition + self.ReverserPosition = math.floor(value) + if self.ReverserPosition > 1 then self.ReverserPosition = 1 end + if self.ReverserPosition < -1 then self.ReverserPosition = -1 end + if prevReverserPosition ~= self.ReverserPosition then + if self.ReverserPosition == -1 then self.Train:PlayOnce("ezh3_revers_0-b","cabin",1) end + if self.ReverserPosition == 0 then + if prevReverserPosition == -1 then + self.Train:PlayOnce("ezh3_revers_b-0","cabin",1) + else + self.Train:PlayOnce("ezh3_revers_f-0","cabin",1) + end + end + if self.ReverserPosition == 1 then self.Train:PlayOnce("ezh3_revers_0-f","cabin",1) end + end + end + elseif (name == "ControllerUp") and (value > 0.5) then + self:TriggerInput("ControllerSet",self.ControllerPosition+1) + self.Timer = CurTime()-self.ChangeSpeed + self.SecondSound = true + elseif (name == "ControllerDown") and (value > 0.5) then + self:TriggerInput("ControllerSet",self.ControllerPosition-1) + self.Timer = CurTime()-self.ChangeSpeed + self.SecondSound = true + elseif (name == "ReverserUp") and (value > 0.5) then + self:TriggerInput("ReverserSet",self.ReverserPosition+1) + elseif (name == "ReverserDown") and (value > 0.5) then + self:TriggerInput("ReverserSet",self.ReverserPosition-1) + elseif (name == "SetX1") and (value > 0.5) then + self:TriggerInput("ControllerSet",1) + elseif (name == "SetX2") and (value > 0.5) then + self:TriggerInput("ControllerSet",2) + elseif (name == "SetX3") and (value > 0.5) then + self:TriggerInput("ControllerSet",3) + elseif (name == "Set0") and (value > 0.5) then + self:TriggerInput("ControllerSet",0) + elseif (name == "Set0Fast") and (value > 0.5) then + self:TriggerInput("ControllerSet",0) + self.ChangeSpeed = 0.05 + elseif (name == "SetT1") and (value > 0.5) then + self:TriggerInput("ControllerSet",-1) + elseif (name == "SetT1A") and (value > 0.5) then + self:TriggerInput("ControllerSet",-2) + elseif (name == "SetT2") and (value > 0.5) then + self:TriggerInput("ControllerSet",-3) + end +end + + +function TRAIN_SYSTEM:Think() + local Train = self.Train + + if (self.Enabled == 0) and (self.ReverserPosition ~= 0) then + self.ReverserPosition = 0 + self.ControllerPosition = 0 + end + if (self.ReverserPosition == 0) and (self.ControllerPosition ~= 0) then + self.ReverserPosition = 0 + self.ControllerPosition = 0 + end + + -- Move controller + self.Timer = self.Timer or CurTime() + if ((CurTime() - self.Timer > self.ChangeSpeed) and (self.ControllerPosition > self.RealControllerPosition)) then + local previousPosition = self.RealControllerPosition + self.Timer = CurTime() + self.RealControllerPosition = self.RealControllerPosition + 1 + + local A,B = previousPosition,self.RealControllerPosition + + if (A == -3) and (B == -2) then self.Train:PlayOnce("kv66_t2_t1a", "cabin",1) end + if (A == -2) and (B == -1) then self.Train:PlayOnce("kv66_t1a_t1", "cabin",1) end + if self.SecondSound and (A == -1) and (B == 0) then self.Train:PlayOnce("kv66_t1_0", "cabin",1) end + if not self.SecondSound and (A == -1) and (B == 0) then self.Train:PlayOnce("kv66_t1_0", "cabin",1) end + + if (A == 0) and (B == 1) then self.Train:PlayOnce("kv66_0_x1", "cabin",1) end + if (A == 1) and (B == 2) then self.Train:PlayOnce("kv66_x1_x2", "cabin",1) end + if (A == 2) and (B == 3) then self.Train:PlayOnce("kv66_x2_x3", "cabin",1) end + self.SecondSound = nil + end + if ((CurTime() - self.Timer > self.ChangeSpeed) and (self.ControllerPosition < self.RealControllerPosition)) then + local previousPosition = self.RealControllerPosition + self.Timer = CurTime() + self.RealControllerPosition = self.RealControllerPosition - 1 + + local A,B = previousPosition,self.RealControllerPosition + if (A == 3) and (B == 2) then self.Train:PlayOnce("kv66_x3_x2", "cabin",0.9) end + if (A == 2) and (B == 1) then self.Train:PlayOnce("kv66_x2_x1", "cabin",0.9) end + if (A == 1) and (B == 0) then self.Train:PlayOnce("kv66_x1_0", "cabin",0.9) end + + if (A == 0) and (B == -1) then self.Train:PlayOnce("kv66_0_t1", "cabin",0.8) end + if (A == -1) and (B == -2) then self.Train:PlayOnce("kv66_t1_t1a", "cabin",0.8) end + if (A == -2) and (B == -3) then self.Train:PlayOnce("kv66_t1a_t2", "cabin",0.8) end + self.SecondSound = nil + end + if self.RealControllerPosition == 0 then self.ChangeSpeed = 0.10 end + local position = self.RealControllerPosition + -- Update contacts + for i=1,#self.ReverserMatrix/2 do + local v = self.ReverserMatrix[i*2-1] + local d = self.ReverserMatrix[i*2] + self[v[1].."-"..v[2]] = d[self.ReverserPosition+2] + end + for i=1,#self.ControllerMatrix/2 do + local v = self.ControllerMatrix[i*2-1] + local d = self.ControllerMatrix[i*2] + self[v[1].."-"..v[2]] = d[(position)+4] + end +end diff --git a/lua/metrostroi/systems/sys_kv_70.lua b/lua/metrostroi/systems/sys_kv_70.lua new file mode 100644 index 0000000..4238b1b --- /dev/null +++ b/lua/metrostroi/systems/sys_kv_70.lua @@ -0,0 +1,237 @@ +-------------------------------------------------------------------------------- +-- KV-70 controller +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("KV_70") + +function TRAIN_SYSTEM:Initialize() + self.Enabled = 1 + self.ControllerPosition = 0 + self.ReverserPosition = 0 + self.RealControllerPosition = 0 + self.ChangeSpeed = 0.10 + + self.ReverserMatrix = { + { "4" , "0" }, + { 0, 0, 1 }, + {"10AK" , "4" }, + { 1, 0, 0 }, + {"10AK" , "5" }, + { 0, 0, 1 }, + {"10" , "7G"}, + { 1, 0, 1 }, + {"10AK" , "DA"}, + { 1, 0, 1 }, + + {"D" , "D1"}, + { 1, 0, 1 }, + {"F" , "F7"}, + { 0, 0, 1 }, + {"B9" , "F1"}, + { 1, 1, 0 }, + {"D4" , "15"}, + { 1, 0, 1 }, + {"D8" ,"15A"}, + { 0, 1, 0 }, + } + self.ControllerMatrix = { + {"10", "8" }, + { 1, 0, 0, 0, 0, 0, 0 }, + {"U2", "10AK"}, + { 1, 1, 1, 0, 1, 1, 1 }, + --{"0", "0" }, + --{ 0, 0, 0, 1, 0, 0, 0 }, + {"U2", "2" }, + { 1, 1, 0, 0, 0, 1, 1 }, + {"U2", "3" }, + { 0, 0, 0, 0, 0, 0, 1 }, + {"19B", "19" }, + { 0, 0, 0, 1, 1, 1, 1 }, + {"7G", "33Yu"}, + { 0, 0, 0, 0, 1, 1, 1 }, + {"10AK", "1"}, + { 0, 0, 0, 1, 1, 1, 1 }, + {"U2", "U2a"}, + { 1, 1, 1, 0, 0, 0, 0 }, + {"U2", "20a"}, + { 0, 0, 0, 0, 1, 1, 1 }, + {"U2", "25"}, + { 0, 1, 0, 0, 0, 0, 0 }, + {"10AK", "U4"}, + { 0, 0, 0, 1, 0, 0, 0 }, + {"7GA", "RC27"}, + { 0, 0, 0, 1, 0, 0, 0 }, + {"15A", "15B"}, + { 1, 1, 1, 1, 0, 0, 0 }, + {"U2", "20b"}, + { 1, 1, 1, 0, 0, 0, 0 }, + {"UPO", "13" }, + { 1, 1, 1, 1, 0, 0, 0 }, + } + + -- Initialize contacts values + for i=1,#self.ReverserMatrix/2 do + local v = self.ReverserMatrix[i*2-1] + self[v[1].."-"..v[2]] = 0 + end + for i=1,#self.ControllerMatrix/2 do + local v = self.ControllerMatrix[i*2-1] + self[v[1].."-"..v[2]] = 0 + end +end + +function TRAIN_SYSTEM:Inputs() + return { "Enabled", "ControllerSet", "ReverserSet", + "ControllerUp","ControllerDown","ReverserUp","ReverserDown", + "SetX1", "SetX2", "SetX3", "Set0", "Set0Fast", "SetT1", "SetT1A", "SetT2", "ControllerUnlock" } +end + +function TRAIN_SYSTEM:Outputs() + return { "ControllerPosition","RealControllerPosition", "ReverserPosition", "10AS-33","10-8","D4-15","10AK-4","U2-25","7G-33Yu"} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + local prevReverserPosition = self.ReverserPosition + -- Change position + if name == "Type" then + self.Type = math.floor(value) + elseif name == "Enabled" then + self.Enabled = math.floor(value) + elseif name == "ControllerSet" then + if (self.Enabled ~= 0) and (self.ReverserPosition ~= 0) and (math.floor(value) ~= self.ControllerPosition) then + local prevControllerPosition = self.ControllerPosition + self.ControllerPosition = math.floor(value) + + -- Limit motion + if self.ControllerPosition > 3 then self.ControllerPosition = 3 end + if self.ControllerPosition < -3 then self.ControllerPosition = -3 end + --if prevControllerPosition <= -1 and self.ControllerPosition>-1 and not self.FixatorTimer then self.Train:PlayOnce("kv70_fix_on", "cabin",1) end + end + elseif name == "ReverserSet" then + if (self.Enabled ~= 0) and (math.floor(value) ~= self.ReverserPosition) and self.ControllerPosition == 0 then + local prevReverserPosition = self.ReverserPosition + self.ReverserPosition = math.floor(value) + if self.ReverserPosition > 1 then self.ReverserPosition = 1 end + if self.ReverserPosition < -1 then self.ReverserPosition = -1 end + if prevReverserPosition ~= self.ReverserPosition then + if self.ReverserPosition == -1 then self.Train:PlayOnce("revers_0-b","cabin",1) end + if self.ReverserPosition == 0 then + if prevReverserPosition == -1 then + self.Train:PlayOnce("revers_b-0","cabin",1) + else + self.Train:PlayOnce("revers_f-0","cabin",1) + end + end + if self.ReverserPosition == 1 then self.Train:PlayOnce("revers_0-f","cabin",1) end + end + end + elseif (name == "ControllerUp") and (value > 0.5) then + if self.ControllerPosition+1 == 0 and not self.Locker then return end + self:TriggerInput("ControllerSet",self.ControllerPosition+1) + self.Timer = CurTime()-self.ChangeSpeed + self.SecondSound = true + elseif (name == "ControllerDown") and (value > 0.5) then + self:TriggerInput("ControllerSet",self.ControllerPosition-1) + self.Timer = CurTime()-self.ChangeSpeed + self.SecondSound = true + elseif (name == "ReverserUp") and (value > 0.5) then + self:TriggerInput("ReverserSet",self.ReverserPosition+1) + elseif (name == "ReverserDown") and (value > 0.5) then + self:TriggerInput("ReverserSet",self.ReverserPosition-1) + elseif (name == "SetX1") and (value > 0.5) then + self:TriggerInput("ControllerSet",1) + elseif (name == "SetX2") and (value > 0.5) then + self:TriggerInput("ControllerSet",2) + elseif (name == "SetX3") and (value > 0.5) then + self:TriggerInput("ControllerSet",3) + elseif (name == "Set0") and (value > 0.5) then + self:TriggerInput("ControllerSet",0) + elseif (name == "Set0Fast") and (value > 0.5) then + self:TriggerInput("ControllerSet",0) + self.ChangeSpeed = 0.05 + elseif (name == "SetT1") and (value > 0.5) then + self:TriggerInput("ControllerSet",-1) + elseif (name == "SetT1A") and (value > 0.5) then + self:TriggerInput("ControllerSet",-2) + elseif (name == "SetT2") and (value > 0.5) then + self:TriggerInput("ControllerSet",-3) + elseif (name == "ControllerUnlock") then + self.Locker = value > 0.5 + --[[ if self.Locker then + self.Train:PlayOnce("kv70_fix_on", "cabin",1) + else + self.Train:PlayOnce("kv70_fix_off", "cabin",1) + end--]] + end +end + + +function TRAIN_SYSTEM:Think() + local Train = self.Train + + if (self.Enabled == 0) and (self.ReverserPosition ~= 0) then + self.ReverserPosition = 0 + self.ControllerPosition = 0 + end + if (self.ReverserPosition == 0) and (self.ControllerPosition ~= 0) then + self.ReverserPosition = 0 + self.ControllerPosition = 0 + end + + -- Move controller + self.Timer = self.Timer or CurTime() + if ((CurTime() - self.Timer > self.ChangeSpeed) and (self.ControllerPosition > self.RealControllerPosition)) then + local previousPosition = self.RealControllerPosition + self.Timer = CurTime() + self.RealControllerPosition = self.RealControllerPosition + 1 + + local A,B = previousPosition,self.RealControllerPosition + + if (A == -3) and (B == -2) then self.Train:PlayOnce("kv70_t2_t1a", "cabin",1) end + if (A == -2) and (B == -1) then + self.Train:PlayOnce("kv70_t1a_t1", "cabin",1) + end + --if self.SecondSound and (A == -1) and (B == 0) then self.Train:PlayOnce("kv70_t1_0", "cabin",1) end + --if not self.SecondSound and (A == -1) and (B == 0) then self.Train:PlayOnce("kv70_t1_0_fix", "cabin",1) end + if (A == -1) and (B == 0) then self.Train:PlayOnce("kv70_t1_0", "cabin",1) end-- self.FixatorTimer=CurTime() end + + if (A == 0) and (B == 1) then self.Train:PlayOnce("kv70_0_x1", "cabin",1) end + if (A == 1) and (B == 2) then self.Train:PlayOnce("kv70_x1_x2", "cabin",1) end + if (A == 2) and (B == 3) then self.Train:PlayOnce("kv70_x2_x3", "cabin",1) end + self.SecondSound = nil + end + if ((CurTime() - self.Timer > self.ChangeSpeed) and (self.ControllerPosition < self.RealControllerPosition)) then + local previousPosition = self.RealControllerPosition + self.Timer = CurTime() + self.RealControllerPosition = self.RealControllerPosition - 1 + + local A,B = previousPosition,self.RealControllerPosition + if (A == 3) and (B == 2) then self.Train:PlayOnce("kv70_x3_x2", "cabin",1) end + if (A == 2) and (B == 1) then self.Train:PlayOnce("kv70_x2_x1", "cabin",1) end + if (A == 1) and (B == 0) then self.Train:PlayOnce("kv70_x1_0", "cabin",1) end + + if (A == 0) and (B == -1) then self.Train:PlayOnce("kv70_0_t1", "cabin",1) end + if (A == -1) and (B == -2) then self.Train:PlayOnce("kv70_t1_t1a", "cabin",1) end + if (A == -2) and (B == -3) then self.Train:PlayOnce("kv70_t1a_t2", "cabin",1) end + self.SecondSound = nil + end + --[[ if self.FixatorTimer and CurTime()-self.FixatorTimer > 0.1 then + self.Train:PlayOnce("kv70_fix_off", "cabin",1) + self.FixatorTimer = nil + end--]] + if self.RealControllerPosition == 0 then self.ChangeSpeed = 0.10 end + local position = self.RealControllerPosition + -- Update contacts + for i=1,#self.ReverserMatrix/2 do + local v = self.ReverserMatrix[i*2-1] + local d = self.ReverserMatrix[i*2] + self[v[1].."-"..v[2]] = d[self.ReverserPosition+2] + end + for i=1,#self.ControllerMatrix/2 do + local v = self.ControllerMatrix[i*2-1] + local d = self.ControllerMatrix[i*2] + self[v[1].."-"..v[2]] = d[(position)+4] + end +end diff --git a/lua/metrostroi/systems/sys_lk_753b.lua b/lua/metrostroi/systems/sys_lk_753b.lua new file mode 100644 index 0000000..e2f90d0 --- /dev/null +++ b/lua/metrostroi/systems/sys_lk_753b.lua @@ -0,0 +1,16 @@ +-------------------------------------------------------------------------------- +-- HC switches case (LK-753B) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("LK_753B") + +function TRAIN_SYSTEM:Initialize() + -- Линейный контактор (ЛК1) + self.Train:LoadSystem("LK1","Relay","PK-162",{bass = true,close_time=0.1}) + -- Линейный контактор (ЛК2) + self.Train:LoadSystem("LK2","Relay","PK-162",{bass = true,close_time=0.1}) + -- Линейный контактор (ЛК3) + self.Train:LoadSystem("LK3","Relay","PK-162",{bass = true,close_time=0.1}) +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_lk_753v.lua b/lua/metrostroi/systems/sys_lk_753v.lua new file mode 100644 index 0000000..bcddd52 --- /dev/null +++ b/lua/metrostroi/systems/sys_lk_753v.lua @@ -0,0 +1,16 @@ +-------------------------------------------------------------------------------- +-- HC switches case (LK-753V) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("LK_753V") + +function TRAIN_SYSTEM:Initialize() + -- Контактор шунтировкти (Ш1) + self.Train:LoadSystem("SH1","Relay","PK-162",{bass = true,close_time=0.1}) + -- Контактор шунтировкти (Ш2) + self.Train:LoadSystem("SH2","Relay","PK-162",{bass = true,close_time=0.1}) + -- МоÑтовой контактор (М) + self.Train:LoadSystem("M","Relay","PK-162",{bass = true,close_time=0.1}) +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_lk_755a.lua b/lua/metrostroi/systems/sys_lk_755a.lua new file mode 100644 index 0000000..5f63453 --- /dev/null +++ b/lua/metrostroi/systems/sys_lk_755a.lua @@ -0,0 +1,20 @@ +-------------------------------------------------------------------------------- +-- HC switches case (LK-755A) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("LK_755A") + +function TRAIN_SYSTEM:Initialize() + -- Линейный контактор (ЛК1) + self.Train:LoadSystem("LK1","Relay","PK-162",{bass = true,close_time=0.1}) + -- Линейный контактор (ЛК2) + self.Train:LoadSystem("LK2","Relay","PK-162",{bass = true,close_time=0.1}) + -- Линейный контактор (ЛК3) + self.Train:LoadSystem("LK3","Relay","PK-162",{bass = true,close_time=0.1}) + -- Линейный контактор (ЛК4) + self.Train:LoadSystem("LK4","Relay","PK-162",{bass = true,close_time=0.1}) + -- Линейный контактор (ЛК5) + self.Train:LoadSystem("LK5","Relay","PK-162",{bass = true,close_time=0.1}) +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_pkg_17b.lua b/lua/metrostroi/systems/sys_pkg_17b.lua new file mode 100644 index 0000000..68537ee --- /dev/null +++ b/lua/metrostroi/systems/sys_pkg_17b.lua @@ -0,0 +1,52 @@ +-------------------------------------------------------------------------------- +-- РеоÑтатный контроллер (ЕКГ-17Б) +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("PKG_17B") + +function TRAIN_SYSTEM:Initialize() + -- Rheostat configuration + self.Configuration = { + -- ## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 + [ 1] = { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0 }, + [ 2] = { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0 }, + [ 3] = { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0 }, + [ 4] = { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0 }, + [ 5] = { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [ 6] = { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [ 7] = { 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [ 8] = { 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [ 9] = { 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [10] = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [11] = { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [12] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [13] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [14] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [15] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [16] = { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [17] = { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, + [18] = { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1 }, + } + self.WrapsAround = true + Metrostroi.BaseSystems["EKG"].Initialize(self) + + self.OldPosition = self.Position +end + +function TRAIN_SYSTEM:Inputs(...) + return Metrostroi.BaseSystems["EKG"].Inputs(self,...) +end +function TRAIN_SYSTEM:Outputs(...) + return Metrostroi.BaseSystems["EKG"].Outputs(self,...) +end +function TRAIN_SYSTEM:TriggerInput(...) + return Metrostroi.BaseSystems["EKG"].TriggerInput(self,...) +end +function TRAIN_SYSTEM:Think(...) + local retval = Metrostroi.BaseSystems["EKG"].Think(self,...) + + if self.OldPosition ~= math.floor(self.Position+0.5) then + self.OldPosition = math.floor(self.Position+0.5) + self.Train:PlayOnce(self.OldPosition%2 > 0 and "prk2" or "prk1","cabin",math.floor(self.Position+0.5)) + end + return retval +end diff --git a/lua/metrostroi/systems/sys_pkg_758b.lua b/lua/metrostroi/systems/sys_pkg_758b.lua new file mode 100644 index 0000000..8d0c1fa --- /dev/null +++ b/lua/metrostroi/systems/sys_pkg_758b.lua @@ -0,0 +1,133 @@ +-------------------------------------------------------------------------------- +-- Pneumatic rheostat controller (PKG-758B) for 81-702, +-- used on underground subway lines +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("PKG_758B") + +function TRAIN_SYSTEM:Initialize() + -- Controller configuration + self.Configuration = self.Configuration or { + -- ## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 + [ 1] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [ 2] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [ 3] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, + [ 4] = { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0}, + [ 5] = { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0}, + [ 6] = { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0}, + [ 7] = { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0}, + [ 8] = { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0}, + [ 9] = { 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0}, + [10] = { 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0}, + [11] = { 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0}, + [12] = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0}, + [13] = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0}, + + [14] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1}, + [15] = { 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1}, + [16] = { 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1}, + [17] = { 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1}, + [18] = { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1}, + [19] = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1}, + [20] = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + } + + -- Resistance value of all contactors + for k,v in ipairs(self.Configuration[1]) do self[k] = 1e15 end + --Contacts + self.PV1 = 0 + self.PV2 = 0 + self.PV3 = 0 + self.PV4 = 0 + + self.P1 = 0 + + self.RK1 = false + self.RK2 = false + + self.CylinderPosition = 0 + + self.Position = 1 -- Current literal position + self.Velocity = 0 -- Current velocity + self.SelectedPosition = 1 -- Currently selected set of contactors + + self.RotationRate = 1.0/0.30*2 + + self.MaxPosition = #self.Configuration + self.SubIterations = 4 +end + +function TRAIN_SYSTEM:Inputs() + return {"RK1","RK2"} +end +function TRAIN_SYSTEM:Outputs() + return {"Position","SelectedPosition","PV1","PV2","PV3","PV4","CylinderVelocity"} +end +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "RK1" then + self.RK1 = value>0 + end + if name == "RK2" then + self.RK2 = value>0 + end +end +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local position = math.floor(self.Position+0.5) + local rate = self.RotationRate + local threshold = self.RotationRate*dT + local f = self.Position - position + if position < 1 then position = 1 end + if position > self.MaxPosition then position = self.MaxPosition end + + -- Lock contacts as defined in the configuration + for k,v in ipairs(self.Configuration[position]) do + self[k] = 1e-15 + 1e15 * (1-v) + end + + if self.RK1 and self.CylinderPosition > 0 and self.CylinderVelocity==0 then + self.CylinderVelocity = -threshold + self.Train:PlayOnce("prk1","bass",1) + --prk1 + elseif self.RK2 and self.CylinderPosition < 1 and self.CylinderVelocity==0 then + self.CylinderVelocity = threshold + self.Train:PlayOnce("prk1","bass",1) + elseif (self.CylinderPosition==0 or self.CylinderPosition==1) and self.CylinderVelocity~=0 then + self.CylinderVelocity = 0 + self.Train:PlayOnce("prk2","bass",1) + end + self.CylinderPosition = math.max(0,math.min(1,self.CylinderPosition + self.CylinderVelocity)) + + if 0 < self.CylinderPosition and self.CylinderPosition < 1 then + if self.CylinderVelocity > 0 then + self.Position = self.Position + (1-self.CylinderPosition)/rate + else + self.Position = self.Position + (self.CylinderPosition)/rate + end + elseif self.Position%2 == self.CylinderPosition then + self.CylinderPosition = (1-self.CylinderPosition) + else + self.Position = self.Position-f + end + -- Limit motor from moving too far + --self.WrapsAround = false + if self.Position > self.MaxPosition+0.5 then self.Position = 0.5 end + if self.Position < 0 then self.Position = self.MaxPosition end + + --local BadValues = self.Position < 0.9 or self.Position > self.MaxPosition+0.1 + -- Update position contactors + --self.RKM1 = ((f < -0.30) or (f > 0.30)) and 1 or 0 + --self.RKM2 = not BadValues and ((f < -0.40) or (f > 0.40)) and 1 or 0 + --self.RKP = ((f > -0.10) and (f < 0.10)) and 1 or 0 + -- Update position readout + if -0.15 < f and f < 0.40 then self.SelectedPosition = position end + + self.PV1 = (-0.15 < f and f < 0.22) and 1 or 0 + self.PV2 = (-0.15 > f or f > 0.22) and 1 or 0 + self.PV3 = self.SelectedPosition%2 + self.PV4 = 1-self.PV3 + + self.P1 = self.Configuration[position][15] +end diff --git a/lua/metrostroi/systems/sys_pkg_758v.lua b/lua/metrostroi/systems/sys_pkg_758v.lua new file mode 100644 index 0000000..32efe41 --- /dev/null +++ b/lua/metrostroi/systems/sys_pkg_758v.lua @@ -0,0 +1,50 @@ +-------------------------------------------------------------------------------- +-- Pneumatic rheostat controller (PKG-758V) for 81-702, +-- used on ground subway lines +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("PKG_758V") + +function TRAIN_SYSTEM:Initialize() + -- Controller configuration + self.Configuration = { + -- ## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 П1 + [ 1] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [ 2] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, + [ 3] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0}, + [ 4] = { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0}, + [ 5] = { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0}, + [ 6] = { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0}, + [ 7] = { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0}, + [ 8] = { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0}, + [ 9] = { 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0}, + [10] = { 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0}, + [11] = { 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0}, + [12] = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0}, + [13] = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0}, + + [14] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1}, + [15] = { 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1}, + [16] = { 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1}, + [17] = { 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1}, + [18] = { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1}, + [19] = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1}, + [20] = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + } + Metrostroi.BaseSystems["PKG_758B"].Initialize(self) +end + +function TRAIN_SYSTEM:Inputs(...) + return Metrostroi.BaseSystems["PKG_758B"].Inputs(self,...) +end +function TRAIN_SYSTEM:Outputs(...) + return Metrostroi.BaseSystems["PKG_758B"].Outputs(self,...) +end +function TRAIN_SYSTEM:TriggerInput(...) + return Metrostroi.BaseSystems["PKG_758B"].TriggerInput(self,...) +end +function TRAIN_SYSTEM:Think(...) + return Metrostroi.BaseSystems["PKG_758B"].Think(self,...) +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_pkg_759b.lua b/lua/metrostroi/systems/sys_pkg_759b.lua new file mode 100644 index 0000000..8c36d12 --- /dev/null +++ b/lua/metrostroi/systems/sys_pkg_759b.lua @@ -0,0 +1,106 @@ +-------------------------------------------------------------------------------- +-- Reverser and relays panel (PKG-759B) for 81-702, +-- used on underground subway lines +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("PKG_759B") + +function TRAIN_SYSTEM:Initialize() + --Brake selector configuration + self.Configuration = self.Configuration or { + -- ## 1 2 3 4 5 6 7 8 9 10 11 12 + [ 1] = { 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1},-- X + [ 2] = { 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0},-- T + } + -- Resistance value of all contactors + for k,v in ipairs(self.Configuration[1]) do self[k] = 1e15 end + --Brake selector + self.TPPosition = 0 --Position + self.TPM = 0 --Contatcts + self.TPT = 0 + self.TPMS = 0 --Setters + self.TPTS = 0 + self.TPSpeed = 0 --Parameter + + + --Reverser + self.ReverserPosition = 0 --Position + self.VP = 0 --Contacts + self.NZ = 0 + self.VPS = 0 --Setters + self.NZS = 0 + self.ReverserSpeed = 0 --Parameter + + self.RotationRate = 2 + + -- Реле времени РВ + self.Train:LoadSystem("RV","Relay","",{ open_time = 0.3 }) + -- Реле уÑкорениÑ, Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ (РУТ) + self.Train:LoadSystem("RU","Relay","R-52B") + -- Extra coils for some relays + self.Train.RUpod = 0 + self.Train.RUreg = 0 + self.Train.RUavt = 1 + self.Train.RVuderzh = 0 + self.Train.RVpod = 0 +end + +function TRAIN_SYSTEM:Inputs() + return {"VP","NZ","TPM","TPT"} +end +function TRAIN_SYSTEM:Outputs() + return {"VP","NZ","TPM","TPT"} +end +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "VP" then self.VPS = value end + if name == "NZ" then self.NZS = value end + if name == "TPM" then self.TPMS = value end + if name == "TPT" then self.TPTS = value end +end +function TRAIN_SYSTEM:Think(dT) + -- Move reversor + if self.VPS == 0 and self.NZS == 0 then + self.ReverserSpeed = 0 + else + self.ReverserSpeed = math.max(-1,math.min(1,self.ReverserSpeed+dT*(self.VPS-self.NZS)*0.9)) + end + self.ReverserPosition = math.max(0,math.min(1,self.ReverserPosition + self.RotationRate*self.ReverserSpeed)) + + if self.TPMS == 0 and self.TPTS == 0 then + self.TPSpeed = 0 + else + self.TPSpeed = math.max(-1,math.min(1,self.TPSpeed+dT*(self.TPTS-self.TPMS)*0.9)) + end + self.TPPosition = math.max(0,math.min(1,self.TPPosition + self.RotationRate*self.TPSpeed)) + self.NZ = self.ReverserPosition < 0.2 and 1 or 0 + self.VP = self.ReverserPosition > 0.2 and 1 or 0 + self.TPM = self.TPPosition < 0.2 and 1 or 0 + self.TPT = self.TPPosition > 0.2 and 1 or 0 + if self.ReverserPosition < 0.1 and self.RKRSmd or self.ReverserPosition > 0.9 and not self.RKRSmd then + self.RKRSmd = self.ReverserPosition > 0.9 + self.Train:PlayOnce("RKR","bass",1,1) + end + if self.TPPosition < 0.1 and self.TPMSnd or self.TPPosition > 0.9 and not self.TPMSnd then + self.TPMSnd = self.TPPosition > 0.9 + self.Train:PlayOnce("T","bass",1,1) + end + + + -- Lock contacts as defined in the configuration + for k,v in ipairs(self.Configuration[math.floor(self.TPPosition+1.5)]) do + self[k] = 1e-15 + 1e15 * (1-v) + end + + local Train = self.Train + + -- RU operation + self.RUCurrent = (math.abs(Train.Electric.I13) + math.abs(Train.Electric.I24))/2 + self.RUTarget = 280 + 70*Train.RUavt*self.Train.Pneumatic.WeightLoadRatio+80*Train.RUreg--+30 + + if Train.RUpod > 0.5 + then Train.RU:TriggerInput("Close",1.0) + else Train.RU:TriggerInput("Set",self.RUCurrent > self.RUTarget) + end +end diff --git a/lua/metrostroi/systems/sys_pkg_759v.lua b/lua/metrostroi/systems/sys_pkg_759v.lua new file mode 100644 index 0000000..fe5fc89 --- /dev/null +++ b/lua/metrostroi/systems/sys_pkg_759v.lua @@ -0,0 +1,30 @@ +-------------------------------------------------------------------------------- +-- Reverser and relays panel (PKG-759V) for 81-702, +-- used on round subway lines +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("PKG_759V") + +function TRAIN_SYSTEM:Initialize() + self.Configuration = { + -- ## 1 2 3 4 5 6 7 8 9 10 11 12 + [ 1] = { 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1},-- X + [ 2] = { 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0},-- T + } + Metrostroi.BaseSystems["PKG_759B"].Initialize(self) +end + +function TRAIN_SYSTEM:Inputs(...) + return Metrostroi.BaseSystems["PKG_759B"].Inputs(self,...) +end +function TRAIN_SYSTEM:Outputs(...) + return Metrostroi.BaseSystems["PKG_759B"].Outputs(self,...) +end +function TRAIN_SYSTEM:TriggerInput(...) + return Metrostroi.BaseSystems["PKG_759B"].TriggerInput(self,...) +end +function TRAIN_SYSTEM:Think(...) + return Metrostroi.BaseSystems["PKG_759B"].Think(self,...) +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_pkg_761.lua b/lua/metrostroi/systems/sys_pkg_761.lua new file mode 100644 index 0000000..b284d3c --- /dev/null +++ b/lua/metrostroi/systems/sys_pkg_761.lua @@ -0,0 +1,83 @@ +-------------------------------------------------------------------------------- +-- Position switch (PKG-761) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("PKG_761") + +function TRAIN_SYSTEM:Initialize() + --Positions + self.PPS = 0 + self.PMT = 0 + --Contacts + self.PS = 0 + self.PP = 0 + self.PM = 0 + self.PT = 0 + + --Resistors + self.RPS = 1e-15 + self.RPP = 1e-15 + self.RPM = 1e-15 + self.RPT = 1e-15 + + --States + self.PPSState = 0 + self.PMTState = 0 + self.RotationRate = 1.0/0.30 + --[[ self.Configuration = {} + self.WrapsAround = true +--]] + -- Rate of rotation (positions per second + --self.RotationRate = 1.0/0.30 + + -- Реле РПУ + self.Train:LoadSystem("RPU","Relay","RPU-3",{normal_level = 2}) +end + +function TRAIN_SYSTEM:Inputs() + return {"PS","PP","PM","PT"} +end +function TRAIN_SYSTEM:Outputs() + return {"PS","PP","PM","PT"} +end +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "PS" and value > 0 then + self.PPSState = -1 + end + + if name == "PP" and value > 0 then + self.PPSState = 1 + end + + if name == "PM" and value > 0 then + self.PMTState = -1 + end + + if name == "PT" and value > 0 then + self.PMTState = 1 + end +end +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + + -- Get currently selected position + local PPSPos = math.floor(self.PPS+0.5) + local PMTPos = math.floor(self.PMT+0.5) + + -- Move motor + --local threshold = self.RotationRate -- Maximum single step of motor per frame + self.PPS = math.max(0,math.min(1,self.PPS + self.RotationRate*dT*self.PPSState)) + self.PMT = math.max(0,math.min(1,self.PMT + self.RotationRate*dT*self.PMTState)) + + + self.PS = self.PPS <= 0.5 and 1 or 0 + self.PP = self.PPS > 0.5 and 1 or 0 + self.PM = self.PMT <= 0.5 and 1 or 0 + self.PT = self.PMT > 0.5 and 1 or 0 + self.RPS = 1e-15 + 1e15 * (1-self.PS) + self.RPP = 1e-15 + 1e15 * (1-self.PP) + self.RPM = 1e-15 + 1e15 * (1-self.PM) + self.RPT = 1e-15 + 1e15 * (1-self.PT) +end diff --git a/lua/metrostroi/systems/sys_pr_109a.lua b/lua/metrostroi/systems/sys_pr_109a.lua new file mode 100644 index 0000000..0e91c48 --- /dev/null +++ b/lua/metrostroi/systems/sys_pr_109a.lua @@ -0,0 +1,42 @@ +-------------------------------------------------------------------------------- +-- Relays and switches panel (PR-109A) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("PR_109A") + +function TRAIN_SYSTEM:Initialize() + -- Реле +-- self.Train:LoadSystem("PRV","Relay","REV-813T", { bass = true, open_time = 2.5,}) + -- Реле педали бдительноÑти (РПБ) + self.Train:LoadSystem("RPB","Relay","REV-813T", { bass = true, open_time = 2.5,}) + -- Реле + self.Train:LoadSystem("RNVT","Relay","REV-813T", { bass = true, open_time = 2.5,}) + + -- Контактор Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð²Ð¾Ð´Ð° 1 и 5 (Р1-Р5) + self.Train:LoadSystem("R1_5","Relay","KPD-110E",{ bass = true }) + + -- Реле зарÑда + self.Train:LoadSystem("RZ","Relay","REV-811T",{bass = true }) + self.Train:LoadSystem("PRV","Relay","REV-811T",{close_time=0.6,bass = true }) + -- Контактор дверей (КД) + self.Train:LoadSystem("RD","Relay","REV-811T",{ bass = true }) + self.Train:LoadSystem("RV3","Relay","REV-813T",{ open_time = 2.3 }) + self.Train:LoadSystem("KD","Relay","REV-811T",{ bass = true }) + self.Train:LoadSystem("RKTT","Relay","R-52B") + -- Реле оÑтановки (РО) + self.Train:LoadSystem("RO","Relay","KPD-110E",{ bass = true }) +end + +function TRAIN_SYSTEM:Think() + local Train = self.Train + self.RKTTCurrent = Train.Electric.IRT2 + self.RKTTClose = 440 - 120*(1-self.Train.Pneumatic.WeightLoadRatio)*Train.RUTavt-230*math.max(0,1-Train.RUTreg) --125 + self.RKTTOpen = 520 - 120*(1-self.Train.Pneumatic.WeightLoadRatio)*Train.RUTavt-230*math.max(0,1-Train.RUTreg) --130 + if self.RKTTCurrent < self.RKTTClose then + Train.RKTT:TriggerInput("Set",false) + else + Train.RKTT:TriggerInput("Set",self.RKTTCurrent >= self.RKTTOpen) + end +end diff --git a/lua/metrostroi/systems/sys_pr_124b.lua b/lua/metrostroi/systems/sys_pr_124b.lua new file mode 100644 index 0000000..d706011 --- /dev/null +++ b/lua/metrostroi/systems/sys_pr_124b.lua @@ -0,0 +1,45 @@ +-------------------------------------------------------------------------------- +-- Relays and switches panel (PR-124B) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("PR_124B") + +function TRAIN_SYSTEM:Initialize() + -- Контактор Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð²Ð¾Ð´Ð° 1 (Р1-Р5) + self.Train:LoadSystem("R1_5","Relay","KPD-110E",{ bass = true }) + -- Контактор 6-ого провода (К6) + self.Train:LoadSystem("K6","Relay","KPD-110E",{ bass = true, close_time = 0.12}) + -- Реле времени Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ (РВТ) + self.Train:LoadSystem("RVT","Relay","REV-811T", { bass = true, open_time = 0.5, close_time = 0.12})--(self.Train.Electric.TrainSolver:find("81-") and 0.3 or 0.7) + -- Реле педали бдительноÑти (РПБ) + self.Train:LoadSystem("RPB","Relay","REV-813T", { bass = true, open_time = 2.5,}) + -- РВ-2 + self.Train:LoadSystem("RV_2","Relay","REV-813T",{ close_time = 2.5}) + + -- Реле зарÑда + self.Train:LoadSystem("RZ","Relay","REV-811T",{bass = true }) + self.Train:LoadSystem("PRV","Relay","REV-811T",{close_time=0.6,bass = true }) + -- Контактор 25ого провода (К25) + self.Train:LoadSystem("K25","Relay","PR-143",{bass = true}) + -- Контактор дверей (КД) + --self.Train:LoadSystem("RD","Relay","REV-811T",{ bass = true }) + --self.Train:LoadSystem("RV3","Relay","REV-813T",{ open_time = 2.3 }) + --self.Train:LoadSystem("KD","Relay","REV-811T",{ bass = true }) + --self.Train:LoadSystem("RKTT","Relay","R-52B") + --[[ -- Реле оÑтановки (РО) + self.Train:LoadSystem("RO","Relay","KPD-110E",{ bass = true, close_time = 0.1})--]] +end + +function TRAIN_SYSTEM:Think() + local Train = self.Train + self.RKTTCurrent = Train.Electric.IRT2 + self.RKTTClose = 370 - 80*(1-self.Train.Pneumatic.WeightLoadRatio)*Train.RUTavt --125 + self.RKTTOpen = 450 - 80*(1-self.Train.Pneumatic.WeightLoadRatio)*Train.RUTavt --130 + if self.RKTTCurrent < self.RKTTClose then + Train.RKTT:TriggerInput("Set",false) + else + Train.RKTT:TriggerInput("Set",self.RKTTCurrent >= self.RKTTOpen) + end +end diff --git a/lua/metrostroi/systems/sys_pr_14x_panels.lua b/lua/metrostroi/systems/sys_pr_14x_panels.lua new file mode 100644 index 0000000..9ed0e8e --- /dev/null +++ b/lua/metrostroi/systems/sys_pr_14x_panels.lua @@ -0,0 +1,40 @@ +-------------------------------------------------------------------------------- +-- Relays panel (PR-143, PR=144) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("PR_14X_Panels") + +function TRAIN_SYSTEM:Initialize() + ---------------------------------------------------------------------------- + -- ПР-143 + ---------------------------------------------------------------------------- + -- Контактор Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð²Ð¾Ð´Ð° 1 (Р1-Р5) + self.Train:LoadSystem("R1_5","Relay","KPD-110E",{ bass = true }) + -- Контактор 6-ого провода (К6) + self.Train:LoadSystem("K6","Relay","KPD-110E",{ bass = true, close_time = 0.12}) + -- Реле времени Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ (РВТ) + self.Train:LoadSystem("RVT","Relay","REV-811T", { bass = true, open_time = 0.5, close_time = 0.12})--(self.Train.Electric.TrainSolver:find("81-") and 0.3 or 0.7) + -- Реле педали бдительноÑти (РПБ) + self.Train:LoadSystem("RPB","Relay","REV-813T", { bass = true, open_time = 2.5,}) + -- РВ-2 + self.Train:LoadSystem("RV_2","Relay","REV-813T",{ open_time = 0.2, close_time = 0.6 }) + + + + ---------------------------------------------------------------------------- + -- ПР-144 + ---------------------------------------------------------------------------- + -- Контактор 25ого провода (К25) + self.Train:LoadSystem("K25","Relay","PR-143",{bass = true}) + -- Реле-повторитель провода 8 (РП8) + self.Train:LoadSystem("Rp8","Relay","REV-811T",{open_time = 0.2,bass = true }) + -- Контактор дверей (КД) + self.Train:LoadSystem("KD","Relay","REV-811T",{ bass = true }) + -- Реле оÑтановки (РО) + self.Train:LoadSystem("RO","Relay","KPD-110E",{ bass = true, close_time = 0--[[ , close_time = 0.1--]] }) +end + +function TRAIN_SYSTEM:Think() +end diff --git a/lua/metrostroi/systems/sys_pr_722d.lua b/lua/metrostroi/systems/sys_pr_722d.lua new file mode 100644 index 0000000..54c4fc9 --- /dev/null +++ b/lua/metrostroi/systems/sys_pr_722d.lua @@ -0,0 +1,50 @@ +-------------------------------------------------------------------------------- +-- Reverser (PR-722D) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("PR_722D") + +function TRAIN_SYSTEM:Initialize() + self.Position = 0 + --Contacts + self.VP = 0 + self.NZ = 0 + + --Setters + self.VPS = 0 + self.NZS = 0 + + --Parameters + self.Speed = 0 + self.RotationRate = 2 +end + +function TRAIN_SYSTEM:Inputs() + return {"VP","NZ"} +end +function TRAIN_SYSTEM:Outputs() + return {"VP","NZ","VPS","NZS","Speed","Position"} +end +local min = math.min +local max = math.max +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "VP" then self.VPS = max(0,min(1,value)) end + if name == "NZ" then self.NZS = max(0,min(1,value)) end +end +function TRAIN_SYSTEM:Think(dT) + -- Move reversor + if self.VPS == 0 and self.NZS == 0 then + self.Speed = 0 + else + self.Speed = math.max(-1,math.min(1,self.Speed+dT*(self.VPS-self.NZS)*0.9)) + end + self.Position = math.max(0,math.min(1,self.Position + self.RotationRate*self.Speed)) + if self.Position < 0.1 and self.RKRS or self.Position > 0.9 and not self.RKRS then + self.RKRS = self.Position > 0.9 + self.Train:PlayOnce("RKR","bass",1,1) + end + self.NZ = self.Position < 0.2 and 1 or 0 + self.VP = self.Position > 0.2 and 1 or 0 +end diff --git a/lua/metrostroi/systems/sys_pru_502.lua b/lua/metrostroi/systems/sys_pru_502.lua new file mode 100644 index 0000000..1570d39 --- /dev/null +++ b/lua/metrostroi/systems/sys_pru_502.lua @@ -0,0 +1,24 @@ +-------------------------------------------------------------------------------- +-- Emergency control panel for 81-502 +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("PRU_502") + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("RO1","Relay","KPD-110E",{ bass = true }) --KPD-110E??? + self.Train:LoadSystem("RO2","Relay","KPD-110E",{ bass = true }) --KPD-110E??? +end + +function TRAIN_SYSTEM:Inputs() + return {} +end + +function TRAIN_SYSTEM:Outputs() + return {} +end + + +function TRAIN_SYSTEM:Think() +end diff --git a/lua/metrostroi/systems/sys_relay.lua b/lua/metrostroi/systems/sys_relay.lua new file mode 100644 index 0000000..62d1f95 --- /dev/null +++ b/lua/metrostroi/systems/sys_relay.lua @@ -0,0 +1,348 @@ +-------------------------------------------------------------------------------- +-- Generic relay with configureable parameters +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("Relay") + +local relay_types = { + ["PK-162"] = { + pneumatic = true, + contactor = true, + }, + ["Switch"] = { + contactor = true, + }, + ["GV_10ZH"] = { + contactor = true, + normally_closed = true, + }, + ["VA21-29"] = { + contactor = true, + normally_closed = true, + bass = true, + }, + ["AVU-045"] = { + bass = true, + }, + ["Switch"] = { + close_time = 0, + open_time = 0, + }, + ["ARS"] = { + close_time = 0, + open_time = 0, + } +} + +function TRAIN_SYSTEM:Initialize(parameters,extra_parameters) + ---------------------------------------------------------------------------- + -- Initialize parameters + if not parameters then parameters = {} end + if type(parameters) ~= "table" then + relay_type = parameters + if relay_types[relay_type] then + parameters = relay_types[relay_type] + else + --print("[sys_relay.lua] Unknown relay type: "..parameters) + parameters = {} + end + parameters.relay_type = relay_type + end + + -- Create new table + local old_param = parameters + parameters = {} for k,v in pairs(old_param) do parameters[k] = v end + + -- Add extra parameters + if type(extra_parameters) == "table" then + for k,v in pairs(extra_parameters) do + parameters[k] = v + end + end + + -- Contactors have different failure modes + parameters.contactor = parameters.contactor or false + -- Should the relay be initialized in 'closed' state + parameters.normally_closed = parameters.normally_closed or false + -- Time in which relay will close (seconds) + parameters.close_time = parameters.close_time or 0.050 + -- Time in which relay will open (seconds) + parameters.open_time = parameters.open_time or 0.050 + -- Is relay latched (stays in its position even without voltage) + parameters.latched = parameters.latched or false + -- Should relay be spring-returned to initial position + parameters.returns = parameters.returns or (not parameters.latched) + -- Trigger level for the relay + parameters.trigger_level = parameters.trigger_level or 0.5 + for k,v in pairs(parameters) do + self[k] = v + end + + + + ---------------------------------------------------------------------------- + -- Relay parameters + if self.close_time == 0 then + FailSim.AddParameter(self,"CloseTime", { value = parameters.close_time}) + else + FailSim.AddParameter(self,"CloseTime", { value = parameters.close_time, precision = self.contactor and 0.35 or 0.10, min = 0.010, varies = true }) + end + if self.open_time == 0 then + FailSim.AddParameter(self,"OpenTime", { value = parameters.open_time}) + else + FailSim.AddParameter(self,"OpenTime", { value = parameters.open_time, precision = self.contactor and 0.35 or 0.10, min = 0.010, varies = true }) + end + -- Did relay short-circuit? + FailSim.AddParameter(self,"ShortCircuit", { value = 0.000, precision = 0.00 }) + -- Was there a spurious trip? + FailSim.AddParameter(self,"SpuriousTrip", { value = 0.000, precision = 0.00 }) + + -- Calculate failure parameters + local MTBF = parameters.MTBF or 1000000 -- cycles, mean time between failures + local MFR = 1/MTBF -- cycles^-1, total failure rate + local openWeight,closeWeight + -- FIXME + openWeight = self.open_weight or 0.25 + closeWeight = self.close_weight or 0.25 + --[[if self.Contactor then + openWeight = 0.25 + closeWeight = 0.25 + elseif self.NormallyOpen then + openWeight = 0.4 + closeWeight = 0.1 + else + openWeight = 0.1 + closeWeight = 0.4 + end]]-- + + -- Add failure points + FailSim.AddFailurePoint(self, "CloseTime", "Mechanical problem (close time not nominal)", + { type = "precision", value = 0.5, mfr = MFR*0.65*openWeight, recurring = true } ) + FailSim.AddFailurePoint(self, "OpenTime", "Mechanical problem (open time not nominal)", + { type = "precision", value = 0.5, mfr = MFR*0.65*closeWeight , recurring = true } ) + FailSim.AddFailurePoint(self, "CloseTime", "Stuck closed", + { type = "value", value = 1e9, mfr = MFR*0.65*openWeight, dmtbf = 0.2 } ) + FailSim.AddFailurePoint(self, "OpenTime", "Stuck open", + { type = "value", value = 1e9, mfr = MFR*0.65*closeWeight , dmtbf = 0.4 } ) + FailSim.AddFailurePoint(self, "SpuriousTrip", "Spurious trip", + { type = "on", mfr = MFR*0.20, dmtbf = 0.4 } ) + --FailSim.AddFailurePoint(self, "ShortCircuit", "Short-circuit", + --{ type = "on", mfr = MFR*0.15, dmtbf = 0.2 } ) + + + + ---------------------------------------------------------------------------- + -- Initial relay state + if self.normally_closed then + self.TargetValue = 1.0 + self.Value = 1.0 + else + self.TargetValue = self.defaultvalue or 0.0 + self.Value = self.defaultvalue or 0.0 + end + -- Time when relay should change its value + self.Time = 0 + self.ChangeTime = nil + self.Blocked = 0 + -- This increases precision at cost of perfomance + self.SubIterations = parameters.iterations or 1--relay +end + +function TRAIN_SYSTEM:Inputs() + return { "Open","Close","+","-","Set","Toggle","Block","OpenBypass","Check","OpenTime","CloseTime"} +end + +function TRAIN_SYSTEM:Outputs() + return { "Value" , "Blocked","TargetValue"} +end + + +function TRAIN_SYSTEM:TriggerInput(name,value) + -- Boolean values accepted + if type(value) == "boolean" then value = value and 1 or 0 end + if name == "OpenTime" then + self.open_time = value + FailSim.AddParameter(self,"OpenTime", { value = self.open_time}) + end + if name == "CloseTime" then + self.close_time = value + FailSim.AddParameter(self,"CloseTime", { value = self.close_time}) + end + if name == "Reset" then + if self.normally_closed then + self:TriggerInput("Set",1) + else + self:TriggerInput("Set",self.defaultvalue or 0.0) + end + end + --print(name) + if name == "Check" then + if value < 0 and self.Value == 1 then + self:TriggerInput("Set",0) + --self:TriggerInput("Set",0) + self.Train:PlayOnce("av_off","cabin",0.7,70) + end + return + end + if value == -1 and self.relay_type == "VA21-29" then + self:TriggerInput("Set",0) + return + end + if name == "OpenBypass" then + if (not self.ChangeTime) and (self.TargetValue ~= 0.0) then + self.ChangeTime = self.Time + FailSim.Value(self,"OpenTime") + end + self.TargetValue = 0.0 + if self.ChangeTime==self.Time and self.Train.DeltaTime then self:Think(self.Train.DeltaTime) end + + return + end + + if self.Blocked > 0 and name ~= "Block" and (name == "Close" and self.relay_type == "PK-162" or self.relay_type ~= "PK-162") then return end + + -- Open/close coils of the relay + if (name == "Block") then + self.Blocked = value + elseif (name == "Close") and (value > self.trigger_level) and (self.Value ~= 1.0 or self.TargetValue ~= 1.0) then --(self.TargetValue ~= 1.0 and self.rpb)) + if self.pneumatic and self.Train.Pneumatic.TrainLinePressure < 3 then return end + if (not self.ChangeTime) or (self.TargetValue ~= 1.0) then + self.ChangeTime = self.Time + FailSim.Value(self,"CloseTime") + end + if self.Value == 1.0 then self.ChangeTime = nil end + self.TargetValue = 1.0 + if self.ChangeTime==self.Time and self.Train.DeltaTime then self:Think(self.Train.DeltaTime) end + + elseif (name == "Open") and (value > self.trigger_level) and (self.Value ~= 0.0 or self.TargetValue ~= 0.0) then + if (not self.ChangeTime) or (self.TargetValue ~= 0.0) then + self.ChangeTime = self.Time + FailSim.Value(self,"OpenTime") + end + self.TargetValue = 0.0 + if self.ChangeTime==self.Time and self.Train.DeltaTime then self:Think(self.Train.DeltaTime) end + + elseif name == "NoOpenTime" and value > 0 then + self.ChangeTime = self.Time + elseif (name == "+") and (self.Value < (self.maxvalue or self.three_position and 2 or 1)) and value > 0 then + self.ChangeTime = self.Time + FailSim.Value(self,"CloseTime") + self.TargetValue = math.min(self.maxvalue or self.three_position and 2 or 1,self.Value+1) + if self.ChangeTime==self.Time and self.Train.DeltaTime then self:Think(self.Train.DeltaTime) end + + elseif (name == "-") and (self.Value > 0) and value > 0 then + self.ChangeTime = self.Time + FailSim.Value(self,"OpenTime") + self.TargetValue = math.max(0.0,self.Value-1) + if self.ChangeTime==self.Time and self.Train.DeltaTime then self:Think(self.Train.DeltaTime) end + + elseif name == "Set" then + if self.pneumatic and value > 0 and self.Train.Pneumatic.TrainLinePressure < 3 then return end + if self.maxvalue then + if not self.ChangeTime then + self.ChangeTime = self.Time + FailSim.Value(self,"OpenTime") + end + self.TargetValue = math.max(0.0,math.min(self.maxvalue,math.floor(value))) + if self.ChangeTime==self.Time and self.Train.DeltaTime then self:Think(self.Train.DeltaTime) end + + elseif self.three_position then + if not self.ChangeTime then + self.ChangeTime = self.Time + FailSim.Value(self,"OpenTime") + end + self.TargetValue = math.max(0.0,math.min(2.0,math.floor(value))) + if self.ChangeTime==self.Time and self.Train.DeltaTime then self:Think(self.Train.DeltaTime) end + + else + if value > self.trigger_level + then self:TriggerInput("Close",self.trigger_level+1) + else self:TriggerInput("Open",self.trigger_level+1) + end + end + elseif (name == "Toggle") and (value > 0.5) then + if self.maxvalue then + self:TriggerInput("Set",self.Value > self.maxvalue-1 and 0 or self.Value+1) + elseif self.three_position then + self:TriggerInput("Set",self.Value > 1 and 0 or self.Value+1) + else + self:TriggerInput("Set",(1.0 - self.Value)*(self.trigger_level+1)) + end + end +end + +function TRAIN_SYSTEM:Think(dT) + --print(self.relay_type) + self.Time = self.Time + dT + -- Short-circuited relay + if FailSim.Value(self,"ShortCircuit") > 0.5 then + self.Value = 1.0 + return + end + -- Spurious trip + if FailSim.Value(self,"SpuriousTrip") > 0.5 then + self.SpuriousTripTimer = self.Time + (0.5 + 2.5*math.random()) + FailSim.ResetParameter(self,"SpuriousTrip",0.0) + FailSim.Age(self,1) + + -- Simulate switch right away + self.Value = 1.0 - self.Value + self.TargetValue = self.Value + self.ChangeTime = nil + end + if self.SpuriousTripTimer and (self.Time > self.SpuriousTripTimer) then + self.Value = self.TargetValue + self.SpuriousTripTimer = nil + end + -- Switch relay + if self.ChangeTime and (self.Time > self.ChangeTime) and not self.SpuriousTripTimer then + -- Electropneumatic relays make this sound + if self.bass and self.Value ~= self.TargetValue then + --[[ + if self.Value ~= 0.0 and self.maxvalue ~= 2 or self.Value ~= 1.0 and self.maxvalue == 2 then + if self.av3 then self.Train:PlayOnce("vu22b_on","cabin") end + if self.igla then self.Train:PlayOnce("igla_on","cabin") end + if self.button then self.Train:PlayOnce("button_press","cabin",0.51) end + if self.vud then self.Train:PlayOnce("vu22_on","cabin") end + if self.uava then self.Train:PlayOnce("uava_on","cabin") end + if self.pb then self.Train:PlayOnce("switch6","cabin") end + if self.programm then self.Train:PlayOnce("inf_on","cabin") end + if self.programm1 then self.Train:PlayOnce("triple_up-0","cabin") end + if self.programm2 then self.Train:PlayOnce("triple_down-0","cabin") end + if self.av then self.Train:PlayOnce("auto_on","cabin") end + if self.mainav then self.Train:PlayOnce("mainauto_on","cabin") end + if self.krishka then self.Train:PlayOnce("kr_close","cabin") end + if self.paketnik then self.Train:PlayOnce("pak_on","cabin") end + if self.switch then self.Train:PlayOnce("switch_on","cabin") end + if self.rcr then self.Train:PlayOnce("rcr_on","cabin") end + end + if self.Value == 0.0 and self.maxvalue ~= 2 or self.Value == 1.0 and self.maxvalue == 2 then + if self.av3 then self.Train:PlayOnce("vu22b_off","cabin") end + if self.igla then self.Train:PlayOnce("igla_off","cabin") end + if self.button then self.Train:PlayOnce("button_release","cabin",0.56) end + if self.vud then self.Train:PlayOnce("vu22_off","cabin") end + if self.uava then self.Train:PlayOnce("uava_off","cabin") end + if self.pb then self.Train:PlayOnce("switch6_off","cabin") end + if self.programm then self.Train:PlayOnce("inf_off","cabin") end + if self.programm1 then self.Train:PlayOnce("triple_0-up","cabin") end + if self.programm2 then self.Train:PlayOnce("triple_0-down","cabin") end + if self.av then self.Train:PlayOnce("auto_off","cabin") end + if self.mainav then self.Train:PlayOnce("mainauto_off","cabin") end + if self.krishka then self.Train:PlayOnce("kr_open","cabin") end + if self.paketnik then self.Train:PlayOnce("pak_off","cabin") end + if self.switch then self.Train:PlayOnce("switch_off","cabin") end + if self.rcr then self.Train:PlayOnce("rcr_off","cabin") end + end + ]] + if self.bass_separate then + if self.TargetValue > 0 then + self.Train:PlayOnce(self.Name.."_on","bass",1) + else + self.Train:PlayOnce(self.Name.."_off","bass",1) + end + else + self.Train:PlayOnce(self.Name,"bass",self.TargetValue) + end + end + self.Value = self.TargetValue + self.ChangeTime = nil + + -- Age relay a little + FailSim.Age(self,1) + end +end diff --git a/lua/metrostroi/systems/sys_sbpp.lua b/lua/metrostroi/systems/sys_sbpp.lua new file mode 100644 index 0000000..d08bb06 --- /dev/null +++ b/lua/metrostroi/systems/sys_sbpp.lua @@ -0,0 +1,361 @@ +-------------------------------------------------------------------------------- +-- SBPP autodrive receiver +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("SBPP") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + + self.Count = 0 + self.ProgrammX = 0 + self.ProgrammBrake = 0 + self.Path = 0 + self.Station = 0 +end + +function TRAIN_SYSTEM:Outputs() + return {} +end + +function TRAIN_SYSTEM:Inputs() + return {} +end + + +local DrawDebug +if SERVER then + CreateConVar("metrostroi_sbppdebug",0) + DrawDebug = GetConVar("metrostroi_sbppdebug") +end +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + function self:SetCommand(name,command) + if command then + Train.PUAV:TriggerInput(name,command) + if name == "CommandDrive" then + self.LastDrive = self.Drive + self.Drive = command + if command==-1 then self.LastBrake = false end + end + if name == "CommandBrake" then + self.LastBrake = self.Brake + self.Brake = command + if command and command~=0 and self.Drive and self.Drive>0 then self.LastDrive = self.Drive self.Drive = 0 end + end + else + Train.PUAV:TriggerInput(name,0) + end + end + + local Sensor = Train.SBPPSensor + if not IsValid(Sensor) then return end + + local ProgrammType + local Programm + + for k,v in ipairs(Sensor.Commands) do + local isSBPP = v.PlateType==METROSTROI_SBPPSENSOR + local command = v.SBPPType + if isSBPP and Train:GetRight():Dot(v:GetUp())>0 then + if not ProgrammType then + Programm = v.Linked or v + ProgrammType = command + elseif ProgrammType ~= command then + Programm = false + end + end + end + if self.Programm ~= Programm then + self.Programm = Programm + self.LastProgramm = Programm or self.LastProgramm + end + local ProgramDoorLeft + local ProgramDoorRight + local ProgrammX + local ProgrammBrake = 0 + + local CurrProgramm = Programm and Programm.SBPPType + if CurrProgramm == 1 then + if self.StationState~=1 then + self.StationState = 1 + self.Distance = Programm.DistanceToOPV+1.40 + self.SensorDistance = self.Distance + end + elseif CurrProgramm == 2 then + if self.StationState~=4 then + self.StationState = 4 + self.Distance = Programm.DistanceToOPV+1.40 + self.SensorDistance = self.Distance + end + elseif CurrProgramm == 3 then + self.Path = Programm.StationPath or 0 + self.Station = Programm.StationID or 0 + local btime = Train.BoardTimer or 0 + local wtime = Programm.WTime or 0 + if not Programm.IsDeadlock and btime<8 or wtime==0 and Train.ALSCoil.Speed<0.2 and Programm.IsDeadlock then + ProgrammX = Programm.DriveMode or 0 + if wtime>0 then self.DrivingTimer = CurTime()+wtime end + self.StationState = nil + end + ProgramDoorRight = Programm.RightDoors + ProgramDoorLeft = not ProgramDoorRight + elseif CurrProgramm == 5 then + local wtime = Programm.WTime or 0 + if wtime>0 then self.DrivingTimer = CurTime()+wtime end + ProgrammX = 2 + elseif CurrProgramm == 6 then + local wtime = Programm.WTime or 0 + if wtime>0 then self.DrivingTimer = CurTime()+wtime end + ProgrammX = 3 + elseif CurrProgramm == 7 then + local time = Programm.WTime or 0 + local RK = Programm.RKPos or 1 + if not self.BrakingRimer and time>0 then + self.BrakingTimer = CurTime()+time + else + self.BrakingTimer = true + end + self.BrakingPos = RK + end + local PUAV = Train.PUAV + if self.BrakingTimer then + if self.BrakingPos > 1 and (not PUAV.TargetKPRK or PUAV.TargetKPRK 0.4 then self.LastBrakeTime = CurTime() end--]] + else + ProgrammBrake = 1 + end + if self.BrakingTimer~=true and CurTime()-self.BrakingTimer>0 then + CurrProgramm = 4 + end + end + local pos = Metrostroi.TrainPositions[Train] pos = pos and pos[1] + local speedMpS = Train.ALSCoil.Speed/3600*1000 + local delta = speedMpS*dT + if pos and pos.path ~= self.OldPath then + self.OldPath = pos.path + self.OldPos = pos.x+Train.PosX + delta = speedMpS*dT + elseif pos then + local x = pos.x+Train.PosX + delta = (x-self.OldPos)*(Metrostroi.TrainDirections[Train] and 1 or -1) + self.OldPos = x + end + if self.Distance then + self.Distance = self.Distance-delta + if self.Distance-self.SensorDistance>5 or self.Distance < -5 then + self.Distance = false + self.StationState = false + end + end + if self.StationState then + ProgrammBrake = 1 + if self.StationState==1 then + if self.LossDistance then ProgrammBrake = 0 end + if not self.LossDistance then + self.LossDistance = self.Distance + elseif self.LossDistance-self.Distance>20 then + self.LossDistance = false + self.StationState = 2 + end + elseif self.StationState == 2 then + if math.min(((self.Distance-32)/66)^0.6*66-1,66) < Train.ALSCoil.Speed then + self:SetCommand("CommandBrakeElapsed",0) + self.StationState = 3 + end + elseif self.StationState == 4 then + if math.min(((self.Distance-2)/12)^0.5*25-3,22) < Train.ALSCoil.Speed then + self:SetCommand("CommandBrakeElapsed",0) + self.StationState = 5 + end + end + if self.StationState>=2 then + if not self.CrossTimer then self.CrossTimer = CurTime() end + if self.CrossTimer and CurTime()-self.CrossTimer>0.15 then + self.CrossTimer = CurTime() + self:SetCommand("CommandBrakeElapsed",self.StationState==3 and 3 or 1) + end + end + else + self.CrossTimer = false + self.LossDistance = false + end + if self.DrivingTimer and CurTime()-self.DrivingTimer > 0 then + CurrProgramm = 4 + end + if CurrProgramm == 4 then + ProgrammX = -1 + ProgrammBrake = 0 + self.BrakingTimer = false + self.DrivingTimer = false + elseif not CurrProgramm and not self.BrakingTimer and not self.DrivingTimer then + ProgrammX = 0 + end + if self.ProgrammX and self.ProgrammX>0 and ProgrammX==0 and not self.DriveTimer then self.DriveTimer = CurTime() end + if self.DriveTimer and not CurrProgramm and CurTime()-self.DriveTimer > 1.5 then self.DriveTimer = nil end + + if self.ProgramDoorLeft ~= ProgramDoorLeft then + self:SetCommand("CommandDoorsLeft",ProgramDoorLeft and 1) + self.ProgramDoorLeft = ProgramDoorLeft + end + if self.ProgramDoorRight ~= ProgramDoorRight then + self:SetCommand("CommandDoorsRight",ProgramDoorRight and 1) + self.ProgramDoorRight = ProgramDoorRight + end + --if ProgrammBrake and not ProgrammBrake.BrakeCommandFounded then ProgrammBrake = nil end + if self.ProgrammBrake ~= ProgrammBrake then + self:SetCommand("CommandBrake",ProgrammBrake) + self.ProgrammBrake = ProgrammBrake + end + if self.ProgrammX ~= ProgrammX and(ProgrammX ~= 0 or not self.DriveTimer) then + if ProgrammX == 3 then self:SetCommand("CommandDrive",3) --X3 + elseif ProgrammX == 2 then self:SetCommand("CommandDrive",2) --X2 + elseif ProgrammX == -1 then self:SetCommand("CommandDrive",-1) --X2 + elseif ProgrammX == 0 then self:SetCommand("CommandDrive",0) end + self.ProgrammX = ProgrammX + end + + if DrawDebug:GetBool() then + Train:SetNW2Bool("SBPP:Debug",true) + local str1 = "" + local str2 = "" + local page = math.floor(CurTime()%1.25/1.25*2) + local cp = CurrProgramm or self.LastProgramm and self.LastProgramm.SBPPType + if page==0 and cp then + if CurrProgramm then + str1 = str1.."СБПП" + else + str1 = str1.."Ñбпп" + end + if cp == 1 then str2 = str2.."СТ1 " + elseif cp == 2 then str2 = str2.."СТ2 " + elseif cp == 3 then str2 = str2.."ОПВ " + elseif cp == 4 then str2 = str2.."ОД " + elseif cp == 5 then str2 = str2.."Ð¥2 " + elseif cp == 6 then str2 = str2.."Ð¥3 " + elseif cp == 7 then str2 = str2.."ТР " end + else + str1 = str1.."ПУÐÐ’" + end + if CurrProgramm == 3 then + local btime = Train.BoardTimer or 0 + local wtime = Programm.WTime or 0 + ProgramDoorRight = Programm.RightDoors + ProgramDoorLeft = not ProgramDoorRight + if page==0 then + str1 = str1.." П" + str2 = str2.." "..self.Path + str1 = str1.." СТ " + str2 = str2..Format(" %03d",self.Station) + str1 = str1.." РСТ" + str2 = str2..Format(" %05.1f",(self.Distance or -1)) + else + str1 = str1.." ОТП" + str2 = str2..Format(" %+03d",math.Clamp(btime,-99,99)) + str1 = str1.." РЖ" + if Programm.DriveMode == 3 then + str2 = str2.." Ð¥3" + elseif Programm.DriveMode == 2 then + str2 = str2.." Ð¥2" + end + str1 = str1.." ВР" + if Programm.WTime and Programm.WTime ~= 0 then + str2 = str2..Format(" %04.1f",math.Clamp(wtime,0,120)) + else + str2 = str2.." МÐРК" + end + end + end + local PUAV = Train.PUAV + if self.BrakingTimer then + str1 = str1.." РК" + str2 = str2..Format(" %02d",self.BrakingPos) + if self.BrakingPos > Train.RheostatController.SelectedPosition then + str1 = str1.."<" + elseif self.BrakingPos < Train.RheostatController.SelectedPosition then + str1 = str1..">" + else + str1 = str1.."=" + end + if page==0 then + str1 = str1.."кп" + str2 = str2..Format(" %02d",PUAV.TargetKPRK or -1) + else + str1 = str1.."рк" + str2 = str2..Format(" %02d",Train.RheostatController.SelectedPosition) + end + str1 = str1.." ВР" + if self.BrakingTimer~=true then + str2 = str2..Format(" %04.1f",math.Clamp(self.BrakingTimer-CurTime(),0,120)) + else + str2 = str2.." МÐРК" + end + end + if self.StationState then + str1 = str1.." РСТ" + str2 = str2..Format(" %05.1f",(self.Distance or -1)) + if self.StationState == 2 then + str1 = str1.." РСК" + str2 = str2..Format(" %04.1f",math.min(((self.Distance-32)/66)^0.6*66-1,66)) + elseif self.StationState == 4 then + if page==0 then + str1 = str1.." П" + str2 = str2.." "..self.Path + str1 = str1.." СТ " + str2 = str2..Format(" %03d",self.Station) + else + str1 = str1.." РСК" + str2 = str2..Format(" %04.1f",math.min(((self.Distance-2)/12)^0.5*20-3,22)) + end + end + end + if self.DrivingTimer and not CurrProgramm then + str1 = str1.." ВР" + if self.DrivingTimer~=true then + str2 = str2..Format(" %04.1f",math.Clamp(self.DrivingTimer-CurTime(),0,120)) + else + str2 = str2.." МÐРК" + end + end + if self.DriveTimer and not CurrProgramm then + str1 = str1.." ХВР" + str2 = str2..Format(" %04.1f",math.Clamp(1.5-(CurTime()-self.DriveTimer),0,120)) + end + + str1 = str1..string.rep(" ",15-#{utf8.codepoint(str1,1,-1)})..page + + if not cp or page==1 then + if ProgramDoorLeft and ProgramDoorRight then str2 = "ЛП"..str2 + elseif ProgramDoorLeft then str2 = "Л-"..str2 + elseif ProgramDoorRight then str2 = "-П"..str2 + else str2 = "--"..str2 end + if self.Brake==1 then str2 = "КП"..str2 + elseif self.Brake and self.Brake<0 then str2 = "Ð¥3"..str2 + elseif self.Drive==3 then str2 = "Ð¥3"..str2 + elseif self.Drive==2 then str2 = "Ð¥2"..str2 + elseif self.Drive==-1 then str2 = "ОД"..str2 + elseif self.LastBrake==1 then str2 = "тп"..str2 + elseif self.LastBrake and self.LastBrake<0 then str2 = "кп"..str2 + elseif self.LastDrive==3 then str2 = "Ñ…3"..str2 + elseif self.LastDrive==2 then str2 = "Ñ…2"..str2 + elseif self.LastDrive==-1 then str2 = "од"..str2 + else str2 = "--"..str2 end + end + Train:SetNW2String("SBPP:Str1",str1~="" and str1 or "No data") + Train:SetNW2String("SBPP:Str2",str2~="" and str2 or "No data") + else + Train:SetNW2Bool("SBPP:Debug",false) + end +end diff --git a/lua/metrostroi/systems/sys_tatra_systems.lua b/lua/metrostroi/systems/sys_tatra_systems.lua new file mode 100644 index 0000000..5256ab2 --- /dev/null +++ b/lua/metrostroi/systems/sys_tatra_systems.lua @@ -0,0 +1,33 @@ +-------------------------------------------------------------------------------- +-- Placeholder for Tatra-T3 systems +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("Tatra_Systems") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.Drive = 0 + self.Brake = 0 + self.Reverse = 0 +end + + +function TRAIN_SYSTEM:Inputs() + return { "Drive", "Brake","Reverse" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if self[name] then self[name] = value end +end + + + +-------------------------------------------------------------------------------- +function TRAIN_SYSTEM:Think() + --print("DRIVE",self.Drive) + self.Train.FrontBogey.MotorForce = 20000 + self.Train.FrontBogey.MotorPower = self.Drive - self.Brake + self.Train.FrontBogey.Reversed = (self.Reverse > 0.5) + self.Train.RearBogey.MotorForce = 20000 + self.Train.RearBogey.MotorPower = self.Drive - self.Brake + self.Train.RearBogey.Reversed = not (self.Reverse > 0.5) +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_telemetry.lua b/lua/metrostroi/systems/sys_telemetry.lua new file mode 100644 index 0000000..69c1061 --- /dev/null +++ b/lua/metrostroi/systems/sys_telemetry.lua @@ -0,0 +1,86 @@ +-------------------------------------------------------------------------------- +-- Telemetry writer +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("Telemetry") + +function TRAIN_SYSTEM:Initialize(parameters,extra_parameters) + local extra_parameters = {"Electric","Engines","RheostatController","PositionSwitch"} + if extra_parameters then + self.SystemsList = extra_parameters + table.sort(self.SystemsList) + end + self.SubIterations = 1 -- Use many sub-iterations to record all transients +end + +function TRAIN_SYSTEM:Inputs() + return { } +end + +function TRAIN_SYSTEM:Outputs() + return { } +end + +function TRAIN_SYSTEM:Think(dT) + -- Generate file name + if not self.DataName then + self.DataName = "D:\\metrostroi_telemetry\\telemetry_"..os.date("%Y%m%d_%H%M%S").."_"..string.format("%04d",1000*math.random())..".txt" + self.Time = 0 + + if not self.SystemsList then + self.SystemsList = {} + for k,v in pairs(self.Train.Systems) do + table.insert(self.SystemsList,k) + end + table.sort(self.SystemsList) + end + end + + -- Write header for the telemetry file + if (not self.WroteHeader) and (self.DataName) then + local header = "Time\tSpeed\tAcceleration\t" + for i=1,32 do + header = header.."TW"..i.."\t" + end + for _,d in ipairs(self.SystemsList) do + local k = d + local v = self.Train.Systems[d] + if v.OutputsList then + for i=1,#v.OutputsList do + header = header..k.."."..v.OutputsList[i].."\t" + end + end + end + header = header.."\n" + + local f = io.open(self.DataName,"w+") + if not f then return end + f:write(header) + f:close() + self.WroteHeader = true + end + + -- Write actual telemetry + if self.WroteHeader then + local f = io.open(self.DataName,"a+") + if not f then return end + f:write((self.Time or 0).."\t") + f:write((self.Train.Engines.Speed or 0).."\t") + f:write((0 or 0).."\t") + + for i=1,32 do + f:write((self.Train:ReadTrainWire(i) or 0).."\t") + end + for _,d in ipairs(self.SystemsList) do + local k = d + local v = self.Train.Systems[d] + if v.OutputsList then + for i=1,#v.OutputsList do + f:write(tostring(v[ v.OutputsList[i] ] or 0).."\t") + end + end + end + f:write("\n") + f:close() + self.Time = self.Time + dT + end +end diff --git a/lua/metrostroi/systems/sys_tr_3b.lua b/lua/metrostroi/systems/sys_tr_3b.lua new file mode 100644 index 0000000..85d9f3f --- /dev/null +++ b/lua/metrostroi/systems/sys_tr_3b.lua @@ -0,0 +1,49 @@ +-------------------------------------------------------------------------------- +-- TR-3B +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("TR_3B") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + -- Output voltage from contact rail + self.Main750V = 0.0 + self.ContactState1 = 0 + self.ContactState2 = 0 + self.ContactState3 = 0 + self.ContactState4 = 0 +end + +function TRAIN_SYSTEM:Inputs() + return { } +end + +function TRAIN_SYSTEM:Outputs() + return { "Main750V", "DropByPeople","ContactState1","ContactState2","ContactState3","ContactState4"} +end + + +function TRAIN_SYSTEM:Think(dT) + -- Don't do logic if train is broken + local fB,rB = self.Train.FrontBogey,self.Train.RearBogey + + self.Main750V = 0 + if IsValid(fB) then + self.Main750V = math.max(self.Main750V,fB.Voltage) + self.ContactState1 = fB.NextStates[1] and 1 or 0 + self.ContactState2 = fB.NextStates[2] and 1 or 0 + else + self.ContactState1 = 0 + self.ContactState2 = 0 + end + if IsValid(rB) then + self.Main750V = math.max(self.Main750V,rB.Voltage) + self.ContactState3 = rB.NextStates[1] and 1 or 0 + self.ContactState4 = rB.NextStates[2] and 1 or 0 + else + self.ContactState3 = 0 + self.ContactState4 = 0 + end +end diff --git a/lua/metrostroi/systems/sys_upps.lua b/lua/metrostroi/systems/sys_upps.lua new file mode 100644 index 0000000..eab20c3 --- /dev/null +++ b/lua/metrostroi/systems/sys_upps.lua @@ -0,0 +1,96 @@ +-------------------------------------------------------------------------------- +-- UPPS safety system +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("UPPS") +TRAIN_SYSTEM.DontAccelerateSimulation = true + +function TRAIN_SYSTEM:Initialize() + self.Train:LoadSystem("UPPS_VV") + self.Train:LoadSystem("UPPS_On","Relay","Switch", {bass = true,normally_closed = true}) + self.Train:LoadSystem("UPPS_K1","Relay","Switch") + + self.Power = false + + self.Controlling = false +end + +function TRAIN_SYSTEM:Outputs() + return {} +end + +function TRAIN_SYSTEM:Inputs() + return {} +end + +function TRAIN_SYSTEM:TriggerSensor(coil,plate) + if self.Power == true and not self.Controlling and plate.DistanceToOPV and plate.PlateType==METROSTROI_UPPSSENSOR then + self.Controlling = plate.DistanceToOPV + self.Train:PlayOnce("upps","cabin",1) + self.KBTimer = CurTime() + end +end +function TRAIN_SYSTEM:Think(dT) + local Train = self.Train + local ALS = Train.ALSCoil + local speed = ALS.Speed*ALS.SpeedSign + local VV = Train.UPPS_VV + + if VV.Power > 0 and not self.Power then self.Power = CurTime() end + if VV.Power == 0 and self.Power then + self.Power = false + self.Controlling = false + self.Stopping = false + self.KBTimer = false + Train:PlayOnce("upps","stop",1) + end + if self.Power and self.Power~=true and CurTime()-self.Power > 6 then + Train:PlayOnce("upps","cabin",1) + self.Power = true + end + if self.KBTimer and CurTime()-self.KBTimer > 3 then + self.KBTimer = false + --RunConsoleCommand("say","NO CANCEL") + --print("NO CANCEL") + end + if self.Controlling and (Train.ALSCoil.Speed < 5.5 or self.KBTimer and VV.KB > 0) then + --print("END. ",self.Controlling) + --RunConsoleCommand("say","END. "..self.Controlling) + self.Controlling = false + self.Stopping = false + self.KBTimer = false + end + if self.Controlling then + local SchemeEngageDistance,_ACCEL,_ACCEL2 + local speedMS = speed/3600*1000 + local currA = -math.min(0,Train.Acceleration) + if Train:ReadTrainWire(6) == 0 then + _ACCEL = 1.2 + _ACCEL2 = _ACCEL*2 + + local _SCHTime = (math.Clamp((45-(speed-10))/45,0,1)*2.5+1)*math.Clamp((_ACCEL-currA)/_ACCEL,0,1) + + SchemeEngageDistance = speedMS*_SCHTime+(_ACCEL*(_SCHTime^2))/2 + --print(Format("%.1f %.1f %.1f %.2f %.2f",(self.Controlling-SchemeEngageDistance),SchemeEngageDistance,(speedMS^2)/_ACCEL2,_SCHTime,currA,math.Clamp((0.7-(currA-0.7))/0.7,0,1))) + else + _ACCEL = 1.2 --1.45 + _ACCEL2 = _ACCEL*2 + + local _SCHTime = (math.Clamp((50-(speed-10))/50,0,1)*1.3+0.7)*math.min((1-Train:ReadTrainWire(2)),1)*math.Clamp((1.2-currA)/1.2,0.2,1) + --SchemeEngageDistance = speedMS*_SCHTime+(_ACCEL*(_SCHTime^2))/2-math.Clamp(3-(self.Controlling-10)/20,0,3)-3.5 + SchemeEngageDistance = speedMS*_SCHTime+(_ACCEL*(_SCHTime^2))/2-math.Clamp(5-(self.Controlling-10)/6,0,5)-3.5 + --local _SCHTime = (math.Clamp((45-(speed-10))/45,0,1)*2.5*(1-Train:ReadTrainWire(6))+1)*math.min((1-Train:ReadTrainWire(2))+Train:ReadTrainWire(25),1)*math.Clamp((1.4-currA)/1.4,0,1) + --print(Format("%.1f %.1f %.1f %.2f %.2f",(self.Controlling-SchemeEngageDistance),SchemeEngageDistance,(speedMS^2)/_ACCEL2,_SCHTime,math.min(0,-Train.Acceleration),math.Clamp((0.7-(currA-0.7))/0.7,0,1))) + end + --local SchemeEngageDistance = speedMS*_SCHTime+(_ACCEL*(_SCHTime^2))/2-Train:ReadTrainWire(6) + self.Controlling = self.Controlling + (-speedMS)*dT + if (self.Controlling-SchemeEngageDistance) < (speedMS^2)/_ACCEL2 and not self.Stopping then + self.Stopping = true + Train:PlayOnce("upps","cabin",1) + --print("!!!") + end + end + Train.UPPS_K1:TriggerInput("Set",(self.Power and self.Controlling and self.Stopping) and 1 or 0) +end diff --git a/lua/metrostroi/systems/sys_upps_vv.lua b/lua/metrostroi/systems/sys_upps_vv.lua new file mode 100644 index 0000000..fff2bbb --- /dev/null +++ b/lua/metrostroi/systems/sys_upps_vv.lua @@ -0,0 +1,21 @@ +-------------------------------------------------------------------------------- +-- I/O between UPPS and electric schemes +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("UPPS_VV") +TRAIN_SYSTEM.DontAccelerateSimulation = false + +function TRAIN_SYSTEM:Initialize() + self.Power = 0 + self.KB = 0 +end + +function TRAIN_SYSTEM:Outputs() + return {"Power","KB"} +end + +function TRAIN_SYSTEM:Inputs() + return {} +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_yak_31a.lua b/lua/metrostroi/systems/sys_yak_31a.lua new file mode 100644 index 0000000..bb12e2c --- /dev/null +++ b/lua/metrostroi/systems/sys_yak_31a.lua @@ -0,0 +1,30 @@ +-------------------------------------------------------------------------------- +-- Box with switches (YaK-31A) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("YAK_31A") + +function TRAIN_SYSTEM:Initialize() + -- КШ1, КШ2 (оÑлабление Ð²Ð¾Ð·Ð±ÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ Ñ‚Ñговых Ñлектродвигателей) + self.Train:LoadSystem("KSH1","Relay","KPP-113") + self.Train:LoadSystem("KSH2","Relay","KPP-113") + self.Train:LoadSystem("KSH3","Relay","KPP-113") + self.Train:LoadSystem("KSH4","Relay","KPP-113") + + -- Контактор оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ (КО) + self.Train:LoadSystem("KO","Relay","KPP-110") + + self.Train:LoadSystem("KZ1","Relay","DB-982ZH-12") + self.Train:LoadSystem("KZ2","Relay","DB-982ZH-17") + + -- ТШ (переключение в цепÑÑ… ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° на тормозной режим) + self.Train:LoadSystem("TSH","Relay","KPP-113") + + self.Train:LoadSystem("RVT","Relay","REV-811T", { bass = true, open_time = 0.7, close_time = 0.1 }) + self.Train:LoadSystem("PR" ,"Relay","REV-811T", { bass = true }) +end +function TRAIN_SYSTEM:Think() + self.Train.KZ1:TriggerInput("Set",self.Train.Electric.Aux750V > 200 and 1 or 0) +end diff --git a/lua/metrostroi/systems/sys_yak_36.lua b/lua/metrostroi/systems/sys_yak_36.lua new file mode 100644 index 0000000..8cb0a7c --- /dev/null +++ b/lua/metrostroi/systems/sys_yak_36.lua @@ -0,0 +1,18 @@ +-------------------------------------------------------------------------------- +-- Box with switches (YaK-36) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("YAK_36") + +function TRAIN_SYSTEM:Initialize() + -- КВЦ (контактор выÑоковольтных цепей) + self.Train:LoadSystem("KVC","Relay","KPP-110","750V") + -- КК (контактор мотор-компреÑÑора) + self.Train:LoadSystem("KK","Relay","KPP-110",{ bass = true }) + -- КУП (включение прогрева кабины машиниÑта) + self.Train:LoadSystem("KUP","Relay","KPP-110") + -- ТРК (защита мотор-компреÑÑора от перегрузки) + self.Train:LoadSystem("TRK","Relay","TRTP-115") +end diff --git a/lua/metrostroi/systems/sys_yak_37a.lua b/lua/metrostroi/systems/sys_yak_37a.lua new file mode 100644 index 0000000..ac6c72a --- /dev/null +++ b/lua/metrostroi/systems/sys_yak_37a.lua @@ -0,0 +1,31 @@ +-------------------------------------------------------------------------------- +-- Box with switches (YaK-37A) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("YAK_37A") + +function TRAIN_SYSTEM:Initialize() + -- КШ1, КШ2 (оÑлабление Ð²Ð¾Ð·Ð±ÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ Ñ‚Ñговых Ñлектродвигателей) + self.Train:LoadSystem("KSH1","Relay","KPP-113",{bass=true}) + self.Train:LoadSystem("KSH2","Relay","KPP-113") + + -- Контактор оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ (КО) + self.Train:LoadSystem("KO","Relay","KPP-110") + + -- КСБ1, КСБ2 (включение тириÑторных ключей Ñ€ÐµÐ³ÑƒÐ»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»Ñ Ð´Ð»Ñ Ñ‚Ð¾Ñ€Ð¼Ð¾Ð·Ð½Ñ‹Ñ… режимов) + self.Train:LoadSystem("KSB1","Relay","KPP-113") + self.Train:LoadSystem("KSB2","Relay","KPP-113") + + -- РРП2 (подача напрÑÐ¶ÐµÐ½Ð¸Ñ Ð² цепь ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ резервном пуÑке) + self.Train:LoadSystem("RRU","Relay","KPD-110") + -- ТР1,ТР2 (переключение в цепÑÑ… ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° на тормозной режим) + self.Train:LoadSystem("TR1","Relay","RPUZ-114-T-UHLZA") + self.Train:LoadSystem("TR2","Relay","RPUZ-114-T-UHLZA") + + self.Train:LoadSystem("KZ1","Relay","DB-982ZH-12") +end +function TRAIN_SYSTEM:Think() + self.Train.KZ1:TriggerInput("Set",self.Train.Electric.Aux750V > 200 and 1 or 0) +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_yak_37e.lua b/lua/metrostroi/systems/sys_yak_37e.lua new file mode 100644 index 0000000..3ec6a5d --- /dev/null +++ b/lua/metrostroi/systems/sys_yak_37e.lua @@ -0,0 +1,32 @@ +-------------------------------------------------------------------------------- +-- Box with switches (YaK-37E) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("YAK_37E") + +function TRAIN_SYSTEM:Initialize() + -- КШ1, КШ2 (оÑлабление Ð²Ð¾Ð·Ð±ÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ Ñ‚Ñговых Ñлектродвигателей) + self.Train:LoadSystem("KSH1","Relay","KPP-113",{bass=true}) + self.Train:LoadSystem("KSH2","Relay","KPP-113") + + -- КПП (ÐºÐ¾Ð¼ÑƒÑ‚Ð°Ñ†Ð¸Ñ Ð¿ÐµÑ€Ð²Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ инвертора БПСÐ) + self.Train:LoadSystem("KPP","Relay","KPP-113") + -- КВП (ÐºÐ¾Ð¼ÑƒÑ‚Ð°Ñ†Ð¸Ñ Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ инвертора БПСÐ) + self.Train:LoadSystem("KVP","Relay","KPD-110","KPP") + -- Контактор оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ (КО) + self.Train:LoadSystem("KO","Relay","KPP-110") + + -- КСБ1, КСБ2 (включение тириÑторных ключей Ñ€ÐµÐ³ÑƒÐ»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»Ñ Ð´Ð»Ñ Ñ‚Ð¾Ñ€Ð¼Ð¾Ð·Ð½Ñ‹Ñ… режимов) + self.Train:LoadSystem("KSB1","Relay","KPP-113") + self.Train:LoadSystem("KSB2","Relay","KPP-113") + + -- РРП2 (подача напрÑÐ¶ÐµÐ½Ð¸Ñ Ð² цепь ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ резервном пуÑке) + self.Train:LoadSystem("RRP2","Relay","KPD-110") + -- РЗП (защита первичного инвертора БПСÐ) + self.Train:LoadSystem("RZP","Relay","REM-651D") + -- ТР1,ТР2 (переключение в цепÑÑ… ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° на тормозной режим) + self.Train:LoadSystem("TR1","Relay","RPUZ-114-T-UHLZA") + self.Train:LoadSystem("TR2","Relay","RPUZ-114-T-UHLZA") +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_yak_4k.lua b/lua/metrostroi/systems/sys_yak_4k.lua new file mode 100644 index 0000000..93c5fcf --- /dev/null +++ b/lua/metrostroi/systems/sys_yak_4k.lua @@ -0,0 +1,20 @@ +-------------------------------------------------------------------------------- +-- Box with switches (YaK-4K) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("YAK_4K") + +function TRAIN_SYSTEM:Initialize() + -- КК (контактор мотор-компреÑÑора) + self.Train:LoadSystem("KK","Relay","KPP-110",{ bass = true }) + -- Контактор оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ (КО) + self.Train:LoadSystem("KO","Relay","KPP-110") + self.Train:LoadSystem("KZ1","Relay","DB-982ZH-12") + self.Train:LoadSystem("KZ2","Relay","DB-982ZH-17") +end + +function TRAIN_SYSTEM:Think() + self.Train.KZ1:TriggerInput("Set",self.Train.Electric.Aux750V > 200 and 1 or 0) +end diff --git a/lua/metrostroi/systems/sys_yap_57.lua b/lua/metrostroi/systems/sys_yap_57.lua new file mode 100644 index 0000000..9306d06 --- /dev/null +++ b/lua/metrostroi/systems/sys_yap_57.lua @@ -0,0 +1,16 @@ +-------------------------------------------------------------------------------- +-- Box with fuses (YAP-57) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("YAP_57") + +function TRAIN_SYSTEM:Initialize() + -- Предохранитель главной ÑлектричеÑкой цепи + self.Train:LoadSystem("PNB_1250_1","Relay","PNB_1250_630_0", { normally_closed = true }) + self.Train:LoadSystem("PNB_1250_2","Relay","PNB_1250_630_0", { normally_closed = true }) + + -- Предохранитель вÑпомагательных ÑлектричеÑких цепей + self.Train:LoadSystem("PP_28","Relay","PP-28", { normally_closed = true }) +end \ No newline at end of file diff --git a/lua/metrostroi/systems/sys_yar_10a.lua b/lua/metrostroi/systems/sys_yar_10a.lua new file mode 100644 index 0000000..39056ea --- /dev/null +++ b/lua/metrostroi/systems/sys_yar_10a.lua @@ -0,0 +1,71 @@ +-------------------------------------------------------------------------------- +-- Box with relays (YaR-10A) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("YAR_10A") + +function TRAIN_SYSTEM:Initialize() + -- Реле перегрузки (РПЛ) + self.Train:LoadSystem("RPL","Relay","RM3001", { trigger_level = 1400 }) + -- Групповое реле перегрузки 1-3 (РП1-3) + self.Train:LoadSystem("RP1_3","Relay","RM3001",{ trigger_level = 760 }) --630 }) + -- Групповое реле перегрузки 2-4 (РП2-4) + self.Train:LoadSystem("RP2_4","Relay","RM3001",{ trigger_level = 760 }) --630 }) + + -- Ðулевое реле (ÐР) + self.Train:LoadSystem("NR","Relay","R3150", { power_source = "None" }) + -- Реле ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + --self.Train:LoadSystem("RSU","Relay","R3100") + + -- Реле Ð·Ð°Ð·ÐµÐ¼Ð»ÐµÐ½Ð¸Ñ (РЗ-1, РЗ-2, РЗ-3) + self.Train:LoadSystem("RZ_1","Relay","RM3001") + self.Train:LoadSystem("RZ_2","Relay","RM3001") + self.Train:LoadSystem("RZ_3","Relay","RM3001") + -- Возврат реле перегрузки (РПвозврат) + self.Train:LoadSystem("RPvozvrat","Relay","RM3001",{ + latched = true, -- RPvozvrat latches into place + power_open = "None", -- Power source for the open signal + power_close = "Mechanical", -- Power source for the close signal + }) + + -- Реле ручного тормоза (РРТ) + self.Train:LoadSystem("RRT","Relay") + self.Train:LoadSystem("RS","Relay") + + -- Need many iterations for engine simulation to converge + self.SubIterations = 4 +end + +function TRAIN_SYSTEM:Inputs() + return { } +end +function TRAIN_SYSTEM:Outputs() + return { } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + +function TRAIN_SYSTEM:Think() + local Train = self.Train + -- Zero relay operation + Train.NR:TriggerInput("Close",Train.Electric.Aux750V > 360) -- 360 - 380 V + Train.NR:TriggerInput("Open", Train.Electric.Aux750V < 150) -- 120 - 190 V + -- Overload relays operation + Train.RP1_3:TriggerInput("Set",math.abs(Train.Electric.I13)) + Train.RP2_4:TriggerInput("Set",math.abs(Train.Electric.I24)) + Train.RPL:TriggerInput("Set",Train.Electric.Itotal) + + -- RPvozvrat operation + Train.RPvozvrat:TriggerInput("Close", + --(Train.DR1.Value == 1.0) or + --(Train.DR2.Value == 1.0) or + (Train.RPL.Value == 1.0) or + (Train.RP1_3.Value == 1.0) or + (Train.RP2_4.Value == 1.0) or + (Train.RZ_1.Value == 1.0) or + (Train.RZ_2.Value == 1.0) or + (Train.RZ_3.Value == 1.0)) +end diff --git a/lua/metrostroi/systems/sys_yar_13a.lua b/lua/metrostroi/systems/sys_yar_13a.lua new file mode 100644 index 0000000..372476a --- /dev/null +++ b/lua/metrostroi/systems/sys_yar_13a.lua @@ -0,0 +1,107 @@ +-------------------------------------------------------------------------------- +-- Box with relays (YaR-13A) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("YAR_13A") + +function TRAIN_SYSTEM:Initialize() + -- Реле перегрузки (РПЛ) + self.Train:LoadSystem("RPL","Relay","RM3001" , { trigger_level = 1400 } ) + -- Групповое реле перегрузки 1-3 (РП1-3) + self.Train:LoadSystem("RP1_3","Relay","RM3001",{ trigger_level = 760 }) --630 }) + -- Групповое реле перегрузки 2-4 (РП2-4) + self.Train:LoadSystem("RP2_4","Relay","RM3001",{ trigger_level = 760 }) --630 }) + + -- Ðулевое реле (ÐР) + -- Does not use any power source defined, as the operation is calculated from bus voltage + self.Train:LoadSystem("NR","Relay","R3150", { power_source = "None" }) + -- Реле ÑиÑтемы ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + --self.Train:LoadSystem("RSU","Relay","R3100") + + -- Реле Ð·Ð°Ð·ÐµÐ¼Ð»ÐµÐ½Ð¸Ñ (РЗ-1, РЗ-2, РЗ-3) + self.Train:LoadSystem("RZ_1","Relay","RM3001") + self.Train:LoadSystem("RZ_2","Relay","RM3001") + self.Train:LoadSystem("RZ_3","Relay","RM3001") + -- Возврат реле перегрузки (РПвозврат) + self.Train:LoadSystem("RPvozvrat","Relay","RM3001",{ + latched = true, -- RPvozvrat latches into place + power_open = "None", -- Power source for the open signal + power_close = "Mechanical", -- Power source for the close signal + }) + + -- Реле времени РВ1 + self.Train:LoadSystem("RV1","Relay","RM3100",{ open_time = 0.7 }) + -- Реле времени РВ2 (задерживает отключение ЛК2) + self.Train:LoadSystem("RV2","Relay","RM3100",{ open_time = 1,bass=true }) + self.Train:LoadSystem("RR","Relay","RPU-116T") + + -- Реле ручного тормоза (РРТ) + self.Train:LoadSystem("RRT","Relay") + -- Реле резервного пуÑка (РРП) + self.Train:LoadSystem("RRP","Relay") + -- Стоп-реле (СР1) + self.Train:LoadSystem("SR1","Relay","RM3000",{ iterations=16,open_time=0 }) + -- Стоп-реле (СР2) + self.Train:LoadSystem("SR2","Relay","RM3000",{ open_time = 0.5 }) + -- Реле ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ñ€ÐµÐ²ÐµÑ€Ñоров + self.Train:LoadSystem("RKR","Relay","RM3000") + -- Реле уÑкорениÑ, Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ (РУТ) + self.Train:LoadSystem("RUT","Relay","R-52B") + self.Train:LoadSystem("RS","Relay") + + + -- Only in Ezh + -- Реле перехода (Рпер) + self.Train:LoadSystem("Rper","Relay") + self.Train:LoadSystem("RUP","Relay") + + -- Extra coils for some relays + self.Train.RUTpod = 0 + self.Train.RUTreg = 0 + self.Train.RUTavt = 1 + self.Train.RRTuderzh = 0 + self.Train.RRTpod = 0 + + -- Need many iterations for engine simulation to converge + self.SubIterations = 4 +end + +function TRAIN_SYSTEM:Inputs() + return { } +end +function TRAIN_SYSTEM:Outputs() + return { } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + +function TRAIN_SYSTEM:Think() + local Train = self.Train + -- Zero relay operation + Train.NR:TriggerInput("Close",Train.Electric.Aux750V > 360) -- 360 - 380 V + Train.NR:TriggerInput("Open", Train.Electric.Aux750V < 150) -- 120 - 190 V + -- Overload relays operation + Train.RP1_3:TriggerInput("Set",math.abs(Train.Electric.I13)) + Train.RP2_4:TriggerInput("Set",math.abs(Train.Electric.I24)) + Train.RPL:TriggerInput("Set",Train.Electric.Itotal) + -- RUT operation + self.RUTCurrent = (math.abs(Train.Electric.I13) + math.abs(Train.Electric.I24))/2 + self.RUTTarget = 250 + 100*Train.RUTavt*self.Train.Pneumatic.WeightLoadRatio+70*Train.RUTreg + if Train.RUTpod > 0.5 + then Train.RUT:TriggerInput("Close",1.0) + else Train.RUT:TriggerInput("Set",self.RUTCurrent > self.RUTTarget) + end + -- RPvozvrat operation + Train.RPvozvrat:TriggerInput("Close", + --(Train.DR1.Value == 1.0) or + --(Train.DR2.Value == 1.0) or + (Train.RPL.Value == 1.0) or + (Train.RP1_3.Value == 1.0) or + (Train.RP2_4.Value == 1.0) or + (Train.RZ_1.Value == 1.0) or + (Train.RZ_2.Value == 1.0) or + (Train.RZ_3.Value == 1.0)) +end diff --git a/lua/metrostroi/systems/sys_yar_13b.lua b/lua/metrostroi/systems/sys_yar_13b.lua new file mode 100644 index 0000000..d209f6e --- /dev/null +++ b/lua/metrostroi/systems/sys_yar_13b.lua @@ -0,0 +1,105 @@ +-------------------------------------------------------------------------------- +-- Box with relays (YaR-13B) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("YAR_13B") + +function TRAIN_SYSTEM:Initialize() + -- Реле перегрузки (РПЛ) + self.Train:LoadSystem("RPL","Relay","RM3001")--, { trigger_level = 1300 }) + -- Групповое реле перегрузки 1-3 (РП1-3) + self.Train:LoadSystem("RP1_3","Relay","RM3001",{ trigger_level = 760 }) --630 }) + -- Групповое реле перегрузки 2-4 (РП2-4) + self.Train:LoadSystem("RP2_4","Relay","RM3001",{ trigger_level = 760 }) --630 }) + + -- Ðулевое реле (ÐР) + -- Does not use any power source defined, as the operation is calculated from bus voltage + self.Train:LoadSystem("NR","Relay","R3150", { power_source = "None" }) + -- Реле ÑиÑтемы ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + self.Train:LoadSystem("RSU","Relay","R3100") + self.Train:LoadSystem("RU","Relay","R3100") + + -- Реле Ð·Ð°Ð·ÐµÐ¼Ð»ÐµÐ½Ð¸Ñ (РЗ-1, РЗ-2, РЗ-3) + self.Train:LoadSystem("RZ_1","Relay","RM3001") + self.Train:LoadSystem("RZ_2","Relay","RM3001") + self.Train:LoadSystem("RZ_3","Relay","RM3001") + -- Возврат реле перегрузки (РПвозврат) + self.Train:LoadSystem("RPvozvrat","Relay","RM3001",{ + latched = true, -- RPvozvrat latches into place + power_open = "None", -- Power source for the open signal + power_close = "Mechanical", -- Power source for the close signal + }) + + -- Реле времени РВ1 + self.Train:LoadSystem("RV1","Relay","RM3100",{ open_time = 0.7 }) + -- Реле времени РВ2 (задерживает отключение ЛК2) + self.Train:LoadSystem("RV2","Relay","RM3100",{ open_time = 0.7 }) + self.Train:LoadSystem("RR","Relay","RPU-116T") + + -- Реле ручного тормоза (РРТ) + self.Train:LoadSystem("RRT","Relay") + -- Реле резервного пуÑка (РРП) + self.Train:LoadSystem("RRP","Relay") + -- Стоп-реле (СР1) + self.Train:LoadSystem("SR1","Relay","RM3000",{ iterations=16,open_time=0 }) + -- Реле ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ñ€ÐµÐ²ÐµÑ€Ñоров + self.Train:LoadSystem("RKR","Relay","RM3000") + -- Реле уÑкорениÑ, Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ (РУТ) + self.Train:LoadSystem("RUT","Relay","R-52B") + + + -- Only in Ezh + -- Реле перехода (Рпер) + self.Train:LoadSystem("Rper","Relay") + self.Train:LoadSystem("RUP","Relay") + + -- Extra coils for some relays + self.Train.RUTpod = 0 + self.Train.RRTuderzh = 0 + self.Train.RRTpod = 0 + self.Train.RUTavt = 1 + + -- Need many iterations for engine simulation to converge + self.SubIterations = 4 +end + +function TRAIN_SYSTEM:Inputs() + return { } +end +function TRAIN_SYSTEM:Outputs() + return { "RRTuderzh","RRTpod","RUTTarget" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + +function TRAIN_SYSTEM:Think() + local Train = self.Train + -- Zero relay operation + Train.NR:TriggerInput("Close",Train.Electric.Aux750V > 360) -- 360 - 380 V + Train.NR:TriggerInput("Open", Train.Electric.Aux750V < 150) -- 120 - 190 V + -- Overload relays operation + Train.RP1_3:TriggerInput("Set",math.abs(Train.Electric.I13)) + Train.RP2_4:TriggerInput("Set",math.abs(Train.Electric.I24)) + --Train.RPL:TriggerInput("Set",Train.Electric.Itotal) + -- RUT operation + self.RUTCurrent = (math.abs(Train.Electric.I13) + math.abs(Train.Electric.I24))/2 + self.RUTTarget = 310 + 85*Train.Pneumatic.WeightLoadRatio*Train.RUTavt--(Train.RUTreg or 0)*40 + if Train.RUTpod > 0.5 + then Train.RUT:TriggerInput("Close",1.0) + else Train.RUT:TriggerInput("Set",self.RUTCurrent > self.RUTTarget) + end + --self.RUTTarget = 250 + 150*self.Train.Pneumatic.WeightLoadRatio + -- RPvozvrat operation + Train.RPvozvrat:TriggerInput("Close", + (Train.DR1.Value == 1.0) or + (Train.DR2.Value == 1.0) or + (Train.RPL.Value == 1.0) or + (Train.RP1_3.Value == 1.0) or + (Train.RP2_4.Value == 1.0) or + (Train.RZ_1.Value == 1.0) or + (Train.RZ_2.Value == 1.0) or + (Train.RZ_3.Value == 1.0)) +end diff --git a/lua/metrostroi/systems/sys_yar_13b_spb.lua b/lua/metrostroi/systems/sys_yar_13b_spb.lua new file mode 100644 index 0000000..22100f0 --- /dev/null +++ b/lua/metrostroi/systems/sys_yar_13b_spb.lua @@ -0,0 +1,105 @@ +-------------------------------------------------------------------------------- +-- Box with relays (YaR-13B) for SPB trains +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("YAR_13B_SPB") + +function TRAIN_SYSTEM:Initialize() + -- Реле перегрузки (РПЛ) + self.Train:LoadSystem("RPL","Relay","RM3001")--, { trigger_level = 1300 }) + -- Групповое реле перегрузки 1-3 (РП1-3) + self.Train:LoadSystem("RP1_3","Relay","RM3001",{ trigger_level = 760 }) --630 }) + -- Групповое реле перегрузки 2-4 (РП2-4) + self.Train:LoadSystem("RP2_4","Relay","RM3001",{ trigger_level = 760 }) --630 }) + + -- Ðулевое реле (ÐР) + -- Does not use any power source defined, as the operation is calculated from bus voltage + self.Train:LoadSystem("NR","Relay","R3150", { power_source = "None" }) + -- Реле ÑиÑтемы ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + self.Train:LoadSystem("RSU","Relay","R3100") + self.Train:LoadSystem("RU","Relay","R3100") + + -- Реле Ð·Ð°Ð·ÐµÐ¼Ð»ÐµÐ½Ð¸Ñ (РЗ-1, РЗ-2, РЗ-3) + self.Train:LoadSystem("RZ_1","Relay","RM3001") + self.Train:LoadSystem("RZ_2","Relay","RM3001") + self.Train:LoadSystem("RZ_3","Relay","RM3001") + -- Возврат реле перегрузки (РПвозврат) + self.Train:LoadSystem("RPvozvrat","Relay","RM3001",{ + latched = true, -- RPvozvrat latches into place + power_open = "None", -- Power source for the open signal + power_close = "Mechanical", -- Power source for the close signal + }) + + -- Реле времени РВ1 + self.Train:LoadSystem("RV1","Relay","RM3100",{ open_time = 0.7 }) + -- Реле времени РВ2 (задерживает отключение ЛК2) + self.Train:LoadSystem("RV2","Relay","RM3100",{ open_time = 0.7 }) + self.Train:LoadSystem("RR","Relay","RPU-116T") + + -- Реле ручного тормоза (РРТ) + self.Train:LoadSystem("RRT","Relay") + -- Реле резервного пуÑка (РРП) + self.Train:LoadSystem("RRP","Relay") + -- Стоп-реле (СР1) + self.Train:LoadSystem("SR1","Relay","RM3000",{ iterations=16,open_time=0 }) + -- Реле ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ñ€ÐµÐ²ÐµÑ€Ñоров + self.Train:LoadSystem("RKR","Relay","RM3000") + -- Реле уÑкорениÑ, Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ (РУТ) + self.Train:LoadSystem("RUT","Relay","R-52B") + + + -- Only in Ezh + -- Реле перехода (Рпер) + self.Train:LoadSystem("Rper","Relay") + self.Train:LoadSystem("RUP","Relay") + + -- Extra coils for some relays + self.Train.RUTpod = 0 + self.Train.RRTuderzh = 0 + self.Train.RRTpod = 0 + self.Train.RUTavt = 1 + + -- Need many iterations for engine simulation to converge + self.SubIterations = 4 +end + +function TRAIN_SYSTEM:Inputs() + return { } +end +function TRAIN_SYSTEM:Outputs() + return { "RRTuderzh","RRTpod","RUTTarget" } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + +function TRAIN_SYSTEM:Think() + local Train = self.Train + -- Zero relay operation + Train.NR:TriggerInput("Close",Train.Electric.Aux750V > 360) -- 360 - 380 V + Train.NR:TriggerInput("Open", Train.Electric.Aux750V < 150) -- 120 - 190 V + -- Overload relays operation + Train.RP1_3:TriggerInput("Set",math.abs(Train.Electric.I13)) + Train.RP2_4:TriggerInput("Set",math.abs(Train.Electric.I24)) + --Train.RPL:TriggerInput("Set",Train.Electric.Itotal) + -- RUT operation + self.RUTCurrent = (math.abs(Train.Electric.I13) + math.abs(Train.Electric.I24))/2 + self.RUTTarget = 340 + 85*Train.Pneumatic.WeightLoadRatio*Train.RUTavt--(Train.RUTreg or 0)*40 + if Train.RUTpod > 0.5 + then Train.RUT:TriggerInput("Close",1.0) + else Train.RUT:TriggerInput("Set",self.RUTCurrent > self.RUTTarget) + end + --self.RUTTarget = 250 + 150*self.Train.Pneumatic.WeightLoadRatio + -- RPvozvrat operation + Train.RPvozvrat:TriggerInput("Close", + (Train.DR1.Value == 1.0) or + (Train.DR2.Value == 1.0) or + (Train.RPL.Value == 1.0) or + (Train.RP1_3.Value == 1.0) or + (Train.RP2_4.Value == 1.0) or + (Train.RZ_1.Value == 1.0) or + (Train.RZ_2.Value == 1.0) or + (Train.RZ_3.Value == 1.0)) +end diff --git a/lua/metrostroi/systems/sys_yar_15a.lua b/lua/metrostroi/systems/sys_yar_15a.lua new file mode 100644 index 0000000..370b709 --- /dev/null +++ b/lua/metrostroi/systems/sys_yar_15a.lua @@ -0,0 +1,110 @@ +-------------------------------------------------------------------------------- +-- Box with relays (YaR-15A) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("YAR_15A") + +function TRAIN_SYSTEM:Initialize() + -- Реле перегрузки (РПЛ) + self.Train:LoadSystem("RPL","Relay","RM3001", { trigger_level = 1300 }) + -- Групповое реле перегрузки 1-3 (РП1-3) + self.Train:LoadSystem("RP1_3","Relay","RM3001",{ trigger_level = 760 }) --630 }) + -- Групповое реле перегрузки 2-4 (РП2-4) + self.Train:LoadSystem("RP2_4","Relay","RM3001",{ trigger_level = 760 }) --630 }) + + -- Ðулевое реле (ÐР) + -- Does not use any power source defined, as the operation is calculated from bus voltage + self.Train:LoadSystem("NR","Relay","R3150", { power_source = "None" }) + -- Реле ÑиÑтемы ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + self.Train:LoadSystem("RSU","Relay","R3100") + self.Train:LoadSystem("RU","Relay","R3100") + + -- Реле Ð·Ð°Ð·ÐµÐ¼Ð»ÐµÐ½Ð¸Ñ (РЗ-1, РЗ-2, РЗ-3) + self.Train:LoadSystem("RZ_1","Relay","RM3001") + self.Train:LoadSystem("RZ_2","Relay","RM3001") + self.Train:LoadSystem("RZ_3","Relay","RM3001") + -- Возврат реле перегрузки (РПвозврат) + self.Train:LoadSystem("RPvozvrat","Relay","RM3001",{ + latched = true, -- RPvozvrat latches into place + power_open = "None", -- Power source for the open signal + power_close = "Mechanical", -- Power source for the close signal + }) + + -- Реле времени РВ1 + self.Train:LoadSystem("RV1","Relay","RM3100",{ open_time = 0.7 }) + -- Реле времени РВ2 (задерживает отключение ЛК2) + self.Train:LoadSystem("RV2","Relay","RM3100",{ open_time = 0.9 }) + self.Train:LoadSystem("RR","Relay","RPU-116T") + + -- Реле ручного тормоза (РРТ) + self.Train:LoadSystem("RRT","Relay") + -- Реле резервного пуÑка (РРП) + self.Train:LoadSystem("RRP","Relay") + -- Реле резервного пуÑка (РРП) + self.Train:LoadSystem("RPP","Relay") + -- Стоп-реле (СР1) + self.Train:LoadSystem("SR1","Relay","RM3000",{ iterations=16,open_time=0 }) + -- Стоп-реле (СР2) + self.Train:LoadSystem("SR2","Relay","RM3000",{ open_time = 0.5 }) + -- Реле ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ñ€ÐµÐ²ÐµÑ€Ñоров + self.Train:LoadSystem("RKR","Relay","RM3000",{ bass = true }) + -- Реле уÑкорениÑ, Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ (РУТ) + self.Train:LoadSystem("RUT","Relay","R-52B") + + + -- Only in Ezh + -- Реле перехода (Рпер) + self.Train:LoadSystem("Rper","Relay") + self.Train:LoadSystem("RUP","Relay",{open_time=0.6}) + + -- Extra coils for some relays + self.Train.RUTpod = 0 + self.Train.RRTuderzh = 0 + self.Train.RRTpod = 0 + self.WeightLoadRatio = 0 + + -- Need many iterations for engine simulation to converge + self.SubIterations = 4 +end + +function TRAIN_SYSTEM:Inputs() + return { } +end +function TRAIN_SYSTEM:Outputs() + return { } +end + +function TRAIN_SYSTEM:TriggerInput(name,value) +end + +function TRAIN_SYSTEM:Think() + local Train = self.Train + -- Zero relay operation + Train.NR:TriggerInput("Close",Train.Electric.Aux750V > 360) -- 360 - 380 V + Train.NR:TriggerInput("Open", Train.Electric.Aux750V < 150) -- 120 - 190 V + -- Overload relays operation + Train.RP1_3:TriggerInput("Set",math.abs(Train.Electric.I13)) + Train.RP2_4:TriggerInput("Set",math.abs(Train.Electric.I24)) + Train.RPL:TriggerInput("Set",Train.Electric.Itotal) + -- RUT operation + self.RUTCurrent = (math.abs(Train.Electric.I13) + math.abs(Train.Electric.I24))/2 + self.RUTTarget = 260 + 60*self.Train.Pneumatic.WeightLoadRatio + + if Train.RUTpod > 0.5 + then Train.RUT:TriggerInput("Close",1.0) + else Train.RUT:TriggerInput("Set",self.RUTCurrent > self.RUTTarget) + end + + -- RPvozvrat operation + Train.RPvozvrat:TriggerInput("Close", + (Train.DR1.Value == 1.0) or + (Train.DR2.Value == 1.0) or + (Train.RPL.Value == 1.0) or + (Train.RP1_3.Value == 1.0) or + (Train.RP2_4.Value == 1.0) or + (Train.RZ_1.Value == 1.0) or + (Train.RZ_2.Value == 1.0) or + (Train.RZ_3.Value == 1.0)) +end diff --git a/lua/metrostroi/systems/sys_yar_27.lua b/lua/metrostroi/systems/sys_yar_27.lua new file mode 100644 index 0000000..7cf39fe --- /dev/null +++ b/lua/metrostroi/systems/sys_yar_27.lua @@ -0,0 +1,59 @@ +-------------------------------------------------------------------------------- +-- Box with relays (YaR-27) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("YAR_27") + +function TRAIN_SYSTEM:Initialize(parameters) + -- Реле дверей (РД) + self.Train:LoadSystem("RD","Relay","REV-821",{ close_time = 0.1 }) + -- Реле Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¾ÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ (РВО) + self.Train:LoadSystem("RVO","Relay","REV-814T",{ open_time = 4.0 }) + -- Реле времени Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ (РВ3) + self.Train:LoadSystem("RV3","Relay","REV-813T",{ open_time = 2.3 }) + -- Реле тока (РТ2) + self.Train:LoadSystem("RT2","Relay","REV-830",{ trigger_level = 130 }) -- A + self.Train:LoadSystem("RT2r","Relay","REV-830",{ close_time = 0, open_time = 0.2 }) --UNREALISTIC Repeater for RT2 for MSK trains + -- Реле ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ñ‚Ð¾Ñ€Ð¼Ð¾Ð·Ð½Ð¾Ð³Ð¾ тока (РКТТ) + self.Train:LoadSystem("RKTT","Relay","R-52B") + self.Train.RKTTsh = 1 +end + +function TRAIN_SYSTEM:Inputs() + return { "NoRKTT" } +end +function TRAIN_SYSTEM:Outputs() + --return { "RKTTClose" , "RKTTOpen", "RKTTCurrent"} +end + +function TRAIN_SYSTEM:TriggerInput(name,value) + if name == "NoRKTT" then + self.NoRKTT = value > 0 + end +end + +function TRAIN_SYSTEM:Think() + local Train = self.Train + -- RT2 relay operation + Train.RT2:TriggerInput("Set",Train.Electric.IRT2) + if self.NoRKTT then return end + Train.RT2r:TriggerInput("Set",Train.RT2.Value) + --self.RUTTarget = 250 + 150*self.WeightLoadRatio + self.RKTTCurrent = Train.Electric.IRT2*Train.RKTTsh--(math.abs(Train.Electric.I13) + math.abs(Train.Electric.I24))*Train:ReadTrainWire(6) + --self.RKTTClose = 275 + 50*self.WeightLoadRatio --125 + --self.RKTTOpen = 370 + 52*self.WeightLoadRatio --130 + --self.RKTTClose = 240 + 100*self.Train.Pneumatic.WeightLoadRatio --125 + --self.RKTTOpen = 335 + 130*self.Train.Pneumatic.WeightLoadRatio --130 + + --self.RKTTClose = 380 + 120*self.Train.Pneumatic.WeightLoadRatio*Train.RUTavt --125 + --self.RKTTOpen = 460 + 120*self.Train.Pneumatic.WeightLoadRatio*Train.RUTavt --130 + self.RKTTClose = 500 - 120*(1-self.Train.Pneumatic.WeightLoadRatio)*Train.RUTavt --125 + self.RKTTOpen = 580 - 120*(1-self.Train.Pneumatic.WeightLoadRatio)*Train.RUTavt --130 + if self.RKTTCurrent < self.RKTTClose then + Train.RKTT:TriggerInput("Set",false) + else + Train.RKTT:TriggerInput("Set",self.RKTTCurrent >= self.RKTTOpen) + end +end diff --git a/lua/metrostroi/systems/sys_yard_2.lua b/lua/metrostroi/systems/sys_yard_2.lua new file mode 100644 index 0000000..afa0d45 --- /dev/null +++ b/lua/metrostroi/systems/sys_yard_2.lua @@ -0,0 +1,25 @@ +-------------------------------------------------------------------------------- +-- Box with diff relays (YaRD-2) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("YARD_2") + +function TRAIN_SYSTEM:Initialize() + -- Контактор диффиренциальной защиты (ДР1, ДР2) + self.Train:LoadSystem("DR1","Relay","KMG13_19", { trigger_level = 120 }) + self.Train:LoadSystem("DR2","Relay","KMG13_19", { trigger_level = 120 }) + + -- Ðоминальное значение ÑÑ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ + self.DeltaCurrent = 120 -- A +end + +function TRAIN_SYSTEM:Think() + local Train = self.Train + + --print("D",Train.Electric.I13,Train.Electric.I13 - Train.Electric.I24) + --Train.DR1:TriggerInput("Set",Train.Electric.I13 - Train.Electric.I24) + --Train.DR2:TriggerInput("Set",Train.Electric.I24 - Train.Electric.I13) + --Train.RPL:TriggerInput("Set",Train.Electric.I13) +end diff --git a/lua/metrostroi/systems/sys_yas_44v.lua b/lua/metrostroi/systems/sys_yas_44v.lua new file mode 100644 index 0000000..3d1034a --- /dev/null +++ b/lua/metrostroi/systems/sys_yas_44v.lua @@ -0,0 +1,19 @@ +-------------------------------------------------------------------------------- +-- Box with rheostats (YaS-44V) +-------------------------------------------------------------------------------- +-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o. +-- Contains proprietary code. See license.txt for additional information. +-------------------------------------------------------------------------------- +Metrostroi.DefineSystem("YAS_44V") + +function TRAIN_SYSTEM:Initialize() + self.Resistors = { + ["P13-P33"] = 51, + ["MK1-MK2"] = 18.75, + ["P33-P42"] = 300, + } + + for k,v in pairs(self.Resistors) do + self[k] = v + end +end \ No newline at end of file diff --git a/lua/metrostroi_data/auto_gm_metro_crossline_c4.lua b/lua/metrostroi_data/auto_gm_metro_crossline_c4.lua new file mode 100644 index 0000000..fd34c66 --- /dev/null +++ b/lua/metrostroi_data/auto_gm_metro_crossline_c4.lua @@ -0,0 +1,479 @@ +[ + { + "SBPPType": "anim", + "Type": 3.0, + "Angles": "{-0 -135.999 0}", + "Pos": "[-2908.613 -2372.1917 -14580.8057]", + "Model": "models/metrostroi/signals/autodrive/doska5.mdl" + }, + { + "SBPPType": "anim", + "Type": 3.0, + "Angles": "{-0 44.001 0}", + "Pos": "[-7279.7476 -5379.209 -14581.2061]", + "Model": "models/metrostroi/signals/autodrive/doska5.mdl" + }, + { + "SBPPType": "anim", + "Type": 3.0, + "Angles": "{-0 -136.0001 0}", + "Pos": "[-2444.8315 -9608.3711 -12010.1055]", + "Model": "models/metrostroi/signals/autodrive/doska5.mdl" + }, + { + "SBPPType": "anim", + "Type": 3.0, + "Angles": "{-0 43.9998 0}", + "Pos": "[-6816.4604 -12615.709 -12009.7061]", + "Model": "models/metrostroi/signals/autodrive/doska5.mdl" + }, + { + "SBPPType": "anim", + "Type": 3.0, + "Angles": "{-0 180 0}", + "Pos": "[-832.5907 -10019 -12620.6055]", + "Model": "models/metrostroi/signals/autodrive/doska5.mdl" + }, + { + "SBPPType": "anim", + "Type": 3.0, + "Angles": "{0 0 0}", + "Pos": "[-6384.7339 -9456 -12621.9063]", + "Model": "models/metrostroi/signals/autodrive/doska5.mdl" + }, + { + "SBPPType": "anim", + "Type": 3.0, + "Angles": "{-0 10.0003 0}", + "Pos": "[-8819.9893 13579.5625 -13209.7061]", + "Model": "models/metrostroi/signals/autodrive/doska5.mdl" + }, + { + "SBPPType": "anim", + "Type": 3.0, + "Angles": "{-0 -170 0}", + "Pos": "[-3118.4131 13571.5117 -13209.7061]", + "Model": "models/metrostroi/signals/autodrive/doska5.mdl" + }, + { + "SBPPType": "anim", + "Type": 3.0, + "Angles": "{-0 -90 0}", + "Pos": "[15651 2093.1453 -14276.0684]", + "Model": "models/metrostroi/signals/autodrive/doska5.mdl" + }, + { + "SBPPType": "anim", + "Type": 3.0, + "Angles": "{-0 90 0}", + "Pos": "[15037.5 -3647.4907 -14267.4063]", + "Model": "models/metrostroi/signals/autodrive/doska5.mdl" + }, + { + "SBPPType": "anim", + "Type": 3.0, + "Right": true, + "Angles": "{-0 90 0}", + "Pos": "[14569 -4708.5713 -10846.7061]", + "Model": "models/metrostroi/signals/autodrive/doska5.mdl" + }, + { + "SBPPType": "anim", + "Type": 3.0, + "Right": true, + "Angles": "{-0 -90 0}", + "Pos": "[14964.5 734.0165 -10846.4063]", + "Model": "models/metrostroi/signals/autodrive/doska5.mdl" + }, + { + "SBPPType": "anim", + "Type": 3.0, + "Right": false, + "Angles": "{-0 90 0}", + "Pos": "[-15482.75 -5348.7261 -9942.8662]", + "Model": "models/metrostroi/signals/autodrive/doska5.mdl" + }, + { + "SBPPType": "anim", + "Type": 3.0, + "Right": false, + "Angles": "{0 -90 0}", + "Pos": "[-14919.3926 558.3647 -9941.6055]", + "Model": "models/metrostroi/signals/autodrive/doska5.mdl" + }, + { + "SBPPType": "anim", + "Type": 3.0, + "Angles": "{0 0 0}", + "Pos": "[-2745.4548 -14557 -13666.5059]", + "Model": "models/metrostroi/signals/autodrive/doska5.mdl" + }, + { + "SBPPType": "anim", + "Type": 3.0, + "Angles": "{-0 180 0}", + "Pos": "[2562.9155 -15148 -13675.1699]", + "Model": "models/metrostroi/signals/autodrive/doska5.mdl" + }, + { + "SBPPType": "anim", + "Angles": "{0 0 0}", + "Pos": "[0 0 0]" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{-0 134.001 0}", + "Pos": "[-6912.3257 -4751.9043 -14456.2061]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{-0 134.001 0}", + "Pos": "[-3312.4329 -1275.4023 -14456.2061]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{-0 -45.999 0}", + "Pos": "[-3278.7183 -3002.0867 -14455.8057]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{-0 -45.999 0}", + "Pos": "[-6919.8076 -6518.3647 -14455.8057]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{0 0 0}", + "Pos": "[15830.7012 1375.7087 -14151.0684]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{0 0 0}", + "Pos": "[15830.7012 -3999.7305 -14151.0684]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{-0 180 0}", + "Pos": "[14864.4854 -2938.6455 -14142.4063]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{-0 180 0}", + "Pos": "[14864.4854 2437.6401 -14142.4063]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{-0 -90 0}", + "Pos": "[1851.9646 -15329.1338 -13550.1699]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{-0 -90 0}", + "Pos": "[-3279.3767 -15329.1338 -13550.1699]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{-0 -80 0}", + "Pos": "[-3788.3589 13266.4941 -13084.7061]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{-0 -80 0}", + "Pos": "[-8886.4443 12367.5674 -13084.7061]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{-0 100.0003 0}", + "Pos": "[-8153.8828 13883.9082 -13084.7061]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{-0 100.0003 0}", + "Pos": "[-2825.5718 14823.4639 -13084.7061]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{-0 90 0}", + "Pos": "[-5677.3936 -9266.8594 -12496.9063]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{-0 90 0}", + "Pos": "[-496.1499 -9266.8594 -12496.9063]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{-0 -90 0}", + "Pos": "[-1544.9653 -10208.1406 -12495.6055]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{-0 -90 0}", + "Pos": "[-6890.3496 -10208.1406 -12495.6055]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{-0 -46.0001 0}", + "Pos": "[-2816.6929 -10239.1787 -11885.1055]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{-0 -46.0001 0}", + "Pos": "[-6409.9795 -13709.1689 -11885.1055]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{-0 133.9998 0}", + "Pos": "[-2809.3218 -8474.3809 -11884.7061]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{-0 133.9998 0}", + "Pos": "[-6443.043 -11983.4033 -11884.7061]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{-0 180 0}", + "Pos": "[14521.2988 1080.6318 -10721.7061]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{0 0 0}", + "Pos": "[15016.4004 -5150.8604 -10721.4063]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{0 0 0}", + "Pos": "[-14710.9277 -155.3726 -9806.1064]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{0 0 0}", + "Pos": "[-14710.9277 -5569.8008 -9806.1064]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{-0 180 0}", + "Pos": "[-15682.1357 -4638.3936 -9807.3672]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{-0 180 0}", + "Pos": "[-15682.1357 789.1333 -9807.3672]", + "Model": "models/mus/metro/station_marker_4.mdl" + }, + { + "SBPPType": "anim", + "Type": 6.0, + "DistanceToOPV": 117.0, + "Angles": "{-0 -90 0}", + "UPPS": true, + "Pos": "[15829.8613 -3972.0234 -14239.0732]", + "Model": "models/metrostroi/upps.mdl" + }, + { + "SBPPType": "anim", + "Type": 6.0, + "DistanceToOPV": 117.4, + "Angles": "{-0 90 0}", + "UPPS": true, + "Pos": "[14864.9385 2435.3542 -14230.4111]", + "Model": "models/metrostroi/upps.mdl" + }, + { + "SBPPType": "anim", + "Type": 6.0, + "DistanceToOPV": 120.0, + "Angles": "{0 0 0}", + "UPPS": true, + "Pos": "[3480.1733 -14396.5117 -13629.5107]", + "Model": "models/metrostroi/upps.mdl" + }, + { + "SBPPType": "anim", + "Type": 6.0, + "DistanceToOPV": 113.0, + "Angles": "{-0 -180 0}", + "UPPS": true, + "Pos": "[-3276.2124 -15327.9111 -13638.1748]", + "Model": "models/metrostroi/upps.mdl" + }, + { + "SBPPType": "anim", + "Type": 6.0, + "DistanceToOPV": 121.1, + "Angles": "{-0 -170 0}", + "UPPS": true, + "Pos": "[-9276.9033 12310.3848 -13172.7109]", + "Model": "models/metrostroi/upps.mdl" + }, + { + "SBPPType": "anim", + "Type": 6.0, + "DistanceToOPV": 121.0, + "Angles": "{-0 9.9998 0}", + "UPPS": true, + "Pos": "[-2668.6997 14850.2539 -13180.2734]", + "Model": "models/metrostroi/upps.mdl" + }, + { + "SBPPType": "anim", + "Type": 6.0, + "DistanceToOPV": 121.0, + "Angles": "{-0 10.0003 0}", + "UPPS": true, + "Pos": "[-2673.0967 14848.8125 -13172.7109]", + "Model": "models/metrostroi/upps.mdl" + }, + { + "SBPPType": "anim", + "Type": 6.0, + "DistanceToOPV": 116.7, + "Angles": "{-0 -180 0}", + "UPPS": true, + "Pos": "[-6884.8633 -10207.3096 -12583.6104]", + "Model": "models/metrostroi/upps.mdl" + }, + { + "SBPPType": "anim", + "Type": 6.0, + "DistanceToOPV": 114.3, + "Angles": "{0 0 0}", + "UPPS": true, + "Pos": "[-469.8931 -9269.2646 -12584.9111]", + "Model": "models/metrostroi/upps.mdl" + }, + { + "SBPPType": "anim", + "Type": 6.0, + "DistanceToOPV": 111.9, + "Angles": "{-0 43.9997 0}", + "UPPS": true, + "Pos": "[-2783.4712 -8463.7295 -11972.7109]", + "Model": "models/metrostroi/upps.mdl" + }, + { + "SBPPType": "anim", + "Type": 6.0, + "DistanceToOPV": 112.0, + "Angles": "{-0 -136.0001 0}", + "UPPS": true, + "Pos": "[-6484.2109 -13767.2803 -11973.1104]", + "Model": "models/metrostroi/upps.mdl" + }, + { + "SBPPType": "anim", + "Type": 6.0, + "DistanceToOPV": 120.0, + "Angles": "{-0 -90 0}", + "UPPS": true, + "Pos": "[15018.1846 -5484.104 -10809.4111]", + "Model": "models/metrostroi/upps.mdl" + }, + { + "SBPPType": "anim", + "Type": 6.0, + "DistanceToOPV": 118.7, + "Angles": "{-0 90 0}", + "UPPS": true, + "Pos": "[14516.627 1428.8608 -10809.7109]", + "Model": "models/metrostroi/upps.mdl" + }, + { + "SBPPType": "anim", + "Type": 6.0, + "DistanceToOPV": 120.0, + "Angles": "{-0 -90 0}", + "UPPS": true, + "Pos": "[-14727.5156 -5665.2437 -9904.6104]", + "Model": "models/metrostroi/upps.mdl" + }, + { + "SBPPType": "anim", + "Type": 6.0, + "DistanceToOPV": 120.0, + "Angles": "{-0 90 0}", + "UPPS": true, + "Pos": "[-15669.4854 877.7695 -9905.8711]", + "Model": "models/metrostroi/upps.mdl" + }, + { + "SBPPType": "anim", + "Type": 6.0, + "DistanceToOPV": 120.0, + "Angles": "{-0 44.001 0}", + "UPPS": true, + "Pos": "[-2941.4429 -932.1968 -14544.2109]", + "Model": "models/metrostroi/upps.mdl" + }, + { + "SBPPType": "anim", + "Type": 6.0, + "DistanceToOPV": 120.0, + "Angles": "{-0 -135.999 0}", + "UPPS": true, + "Pos": "[-7250.9565 -6823.0938 -14543.8105]", + "Model": "models/metrostroi/upps.mdl" + }, + { + "SBPPType": "anim", + "Type": 4.0, + "Angles": "{-0 90 0}", + "Pos": "[3429.4004 -14394.6221 -13541.5059]", + "Model": "models/mus/metro/station_marker_4.mdl" + } +] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/cz_502.lua b/lua/metrostroi_data/languages/cz_502.lua new file mode 100644 index 0000000..cf46788 --- /dev/null +++ b/lua/metrostroi_data/languages/cz_502.lua @@ -0,0 +1,274 @@ +return [[ +#81-502 + +[cz] + +#######Buttons########### +#Common +Common.502.KS = Kontrolka KSAUP (Autovedení) +Common.502.AV = Režim RAV zapnut +Common.502.SD = SD: Signalizace stavu dveří +Common.502.SDW = SD: Signalizace stavu dveří +Common.502.L3w = Kontrolka 3. vodiÄe (režim chodu J3) +Common.502.L4w = Kontrolka 4. vodiÄe (režim jízdy vzad) +Common.502.L5w = Kontrolka 5. vodiÄe (režim jízdy vpÅ™ed) +Common.502.L16w = Kontrolka 16. vodiÄe (zavÅ™ení dveří) +Common.502.L20w = Kontrolka 20. vodiÄe (uzamÄení LK2 a LK5, plynulé uvolnÄ›ní) +Common.502.L23w = Kontrolka 23. vodiÄe (kompresor) +Common.502.RK1 = Kontrolka první pozice RK (reostatu kontroléru) +Common.502.BRD = Kontrolka: Porucha dveří +Common.502.KOS = KB: TlaÄítko bdÄ›losti +Common.502.VAK = AK: TlaÄítko zkompletování obvodů v režimu nouzové jízdy +Common.502.LRU = Kontrolka: JistiÄe pro režim nouzové jízdy jsou zapojeny + +#Spawner +Spawner.502.TypeNVL = Klasická souprava (linka NVL) +Spawner.502.TypeKVLO = Stará souprava (linka KVL) +Spawner.502.TypeKVLN = Nová souprava (linka KVL) +Spawner.502.EWagons = Vložit vozy typu E do soupravy + +#gmod_subway_81-502 +Entities.gmod_subway_81-502.Buttons.VBA.VBAToggle = PÅ™epínaÄ baterie autovedení + +Entities.gmod_subway_81-502.Buttons.AV.VRUToggle = VRU: PÅ™epínaÄ rezervního řízení +Entities.gmod_subway_81-502.Buttons.AV.KPVUToggle = KPVU: Vypnutí pneumatického vypínaÄe řízení +Entities.gmod_subway_81-502.Buttons.AV.KSDToggle = KSD: TlaÄítko kontroly blokování dveří +Entities.gmod_subway_81-502.Buttons.AV.KAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-502.Buttons.AV.KADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-502.Buttons.AV.OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-502.Buttons.AV.VKFToggle = @[Common.ALL.VKF] + + +Entities.gmod_subway_81-502.Buttons.RCAV3.RCAV3Toggle = OdpojovaÄ Å™Ã­dících obvodů KSAUP (AV3) +Entities.gmod_subway_81-502.Buttons.RCAV4.RCAV4Toggle = OdpojovaÄ Å™Ã­dících obvodů KSAUP (AV4) +Entities.gmod_subway_81-502.Buttons.RCAV5.RCAV5Toggle = OdpojovaÄ Å™Ã­dících obvodů KSAUP (AV5) +Entities.gmod_subway_81-502.Buttons.RCARS.RCARSToggle = @[Common.ALL.RCARS] +Entities.gmod_subway_81-502.Buttons.RCBPS.RCBPSToggle = @[Common.ALL.RCBPS] + +Entities.gmod_subway_81-502.Buttons.VRD2.2:VRDSet = @[Common.ARS.VRD] +Entities.gmod_subway_81-502.Buttons.VRD2.!LVRD = @[Common.ARS.LRD] + +Entities.gmod_subway_81-502.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-502.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-502.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-502.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-502.Buttons.AV1.VU3Toggle = @[Common.703.VU3] +Entities.gmod_subway_81-502.Buttons.UPO.R_UPOToggle = @[Common.ALL.UPO] + +Entities.gmod_subway_81-502.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_81-502.Buttons.VRD.VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-502.Buttons.HelperPanel.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.HelperPanel.KDPHSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-502.Buttons.AV2.VSOSDToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-502.Buttons.AV2.VRToggle = @[Common.ALL.VPR] + +Entities.gmod_subway_81-502.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLampAutodrive = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LDoorsWag = @[Common.502.SDW] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LDoors = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LGreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LRedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLampAutodrive = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RDoorsWag = @[Common.502.SDW] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RDoors = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RGreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RRedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_80 = @[Common.ARS.80] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_70 = @[Common.ARS.70] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_60 = @[Common.ARS.60] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_40 = @[Common.ARS.40] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_00 = @[Common.ARS.0] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_04 = @[Common.ARS.N4] + +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_KS = @[Common.502.KS] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_AV = @[Common.502.AV] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_4 = @[Common.502.L4w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_5 = @[Common.502.L5w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_DT = @[Common.ALL.BrT] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_20 = @[Common.502.L20w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_1P = @[Common.502.RK1] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SN1 = @[Common.ALL.RP] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SN2 = @[Common.ALL.SN] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_3 = @[Common.502.L3w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SD1 = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SD2 = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_RP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_DV = @[Common.502.BRD] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!CPS_Pd = @[Common.ARS.LRD] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_04 = @[Common.ARS.04] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_00 = @[Common.ARS.0] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_40 = @[Common.ARS.40] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_60 = @[Common.ARS.60] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_70 = @[Common.ARS.70] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_80 = @[Common.ARS.80] + +Entities.gmod_subway_81-502.Buttons.Main1.2:VUSToggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-502.Buttons.Main1.2:HeadlightsToggle = @[Common.ALL.VF1] +Entities.gmod_subway_81-502.Buttons.Main1.!LKTLight = @[Common.ARS.KT] +Entities.gmod_subway_81-502.Buttons.Main1.!LKVDLight = @[Common.ARS.VD] +Entities.gmod_subway_81-502.Buttons.Main1.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-502.Buttons.Main1.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-502.Buttons.Main1.2:KBSet = @[Common.ARS.KB] +Entities.gmod_subway_81-502.Buttons.Main1.2:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.Main1.2:LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-502.Buttons.Main1.2:LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-502.Buttons.Main1.2:VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-502.Buttons.Main1.2:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-502.Buttons.Main1.2:KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-502.Buttons.Main1.2:VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-502.Buttons.Main1.2:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-502.Buttons.Main1.2:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-502.Buttons.Main1.2:VAKSet = @[Common.502.VAK] +Entities.gmod_subway_81-502.Buttons.Main1.2:VUDToggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-502.Buttons.Main1_2.!LMK2 = @[Common.502.L23w] +Entities.gmod_subway_81-502.Buttons.Main1_2.!LVRD2 = @[Common.ARS.LRD] + +Entities.gmod_subway_81-502.Buttons.Main2.KOSSet = @[Common.502.KOS] +Entities.gmod_subway_81-502.Buttons.Main2.!LMK = @[Common.502.L23w] +Entities.gmod_subway_81-502.Buttons.Main2.VZPToggle = @[Common.ALL.VZP] +Entities.gmod_subway_81-502.Buttons.Main2.VZDSet = @[Common.ALL.VZD] +Entities.gmod_subway_81-502.Buttons.Main2.!L16 = @[Common.502.L16w] +Entities.gmod_subway_81-502.Buttons.Main2.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-502.Buttons.Main2.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.Main2.LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-502.Buttons.Main2.LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-502.Buttons.Main2.VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-502.Buttons.Main2.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-502.Buttons.Main2.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-502.Buttons.Main2.KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-502.Buttons.Main2.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-502.Buttons.Main2.!RU = @[Common.502.LRU] +Entities.gmod_subway_81-502.Buttons.Main2.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-502.Buttons.Main2.VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-502.Buttons.Main2.VAKSet = @[Common.502.VAK] +Entities.gmod_subway_81-502.Buttons.Main2.AutodriveToggle = @[Common.ALL.VAV] +Entities.gmod_subway_81-502.Buttons.Main2.VUDToggle = @[Common.ALL.VUD] + +Entities.gmod_subway_81-502.Buttons.BPS.!BPSon = @[Common.BPS.On] +Entities.gmod_subway_81-502.Buttons.BPS.!BPSErr = @[Common.BPS.Err] +Entities.gmod_subway_81-502.Buttons.BPS.!BPSFail = @[Common.BPS.Fail] +Entities.gmod_subway_81-502.Buttons.NMnUAVA.!NMPressureLow = @[Commom.NMnUAVA.NMPressureLow] +Entities.gmod_subway_81-502.Buttons.NMnUAVA.!UAVATriggered = @[Commom.NMnUAVA.UAVATriggered] + +Entities.gmod_subway_81-502.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-502.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-502.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-502.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-502.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-502.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-502.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-502.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-502.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-502.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-502.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-502.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-502.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-502.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber3+ = @[Common.ALL.RouteNumber3+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber3- = @[Common.ALL.RouteNumber3-] + +Entities.gmod_subway_81-502.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-502.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-502.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-502.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-502.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-502.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-501 +Entities.gmod_subway_81-501.Buttons.AV.KPVUToggle = @[Entities.gmod_subway_81-502.Buttons.AV.KPVUToggle] +Entities.gmod_subway_81-501.Buttons.AV.KSDToggle = @[Entities.gmod_subway_81-502.Buttons.AV.KSDToggle] + +Entities.gmod_subway_81-501.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-501.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-501.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-501.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-501.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-501.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_81-501.Buttons.Main.!GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-501.Buttons.Main.!RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-501.Buttons.Main.!SD = @[Common.703.SD] +Entities.gmod_subway_81-501.Buttons.Main.LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-501.Buttons.Main.LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-501.Buttons.Main.VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-501.Buttons.Main.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-501.Buttons.Main.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-501.Buttons.Main.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-501.Buttons.Main.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-501.Buttons.Main.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-501.Buttons.Main.VUDToggle = @[Common.ALL.VUD] + +Entities.gmod_subway_81-501.Buttons.HelperPanel.VDLSet = @[Common.ALL.KDL] + +Entities.gmod_subway_81-501.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-501.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-501.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-501.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-501.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-501.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-501.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-501.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-501.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-501.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-501.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-501.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-501.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-501.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-501.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-501.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] + +Entities.gmod_subway_81-501.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#Cameras: +Train.502.AV = Elektrické jistiÄe +Train.502.VBA = @[Entities.gmod_subway_81-502.Buttons.VBA.VBAToggle] +Train.502.VRD = VRD +Train.502.RCARS = RC-ARS +Train.502.RCAV5 = RC-AV5 +Train.502.RCBPS = RC-BPS +Train.502.RCAV3 = RC-AV3 +Train.502.RCAV4 = RC-AV4 + +#Spawner: +Entities.gmod_subway_81-502.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-502.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-502.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-502.Spawner.EMAType.Name = @[Spawner.Common.EType] +Entities.gmod_subway_81-502.Spawner.EMAType.1 = @[Spawner.502.TypeNVL] +Entities.gmod_subway_81-502.Spawner.EMAType.2 = @[Spawner.502.TypeKVLO] +Entities.gmod_subway_81-502.Spawner.EMAType.3 = @[Spawner.502.TypeKVLN] +Entities.gmod_subway_81-502.Spawner.EWagons.Name = @[Spawner.502.EWagons] +Entities.gmod_subway_81-502.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-502.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-502.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-502.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-502.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/cz_702.lua b/lua/metrostroi_data/languages/cz_702.lua new file mode 100644 index 0000000..f054290 --- /dev/null +++ b/lua/metrostroi_data/languages/cz_702.lua @@ -0,0 +1,760 @@ +return [[ +#D/E-based types + +[cz] + +#Cameras: +Train.702.Breakers1 = Baterie +Train.702.Breakers2 = OsvÄ›tlení +Train.702.Breakers3 = Hlavní jistiÄ +Train.703.Breakers1 = Baterie +Train.703.Breakers2 = Hlavní jistiÄ, osvÄ›tlení +Train.703.Parking = Parkovací brzda, Autostop (UAVA) +Train.703.RCARS = RC-1: OdpojovaÄ Å™Ã­dících obvodů ARS +Train.703.AVU = Pult AVU + +#Spawner +Spawner.707.Type = Typ pultu +Spawner.707.Type1 = Starý + RRI +Spawner.707.Type2 = Nový + ASNP +Spawner.710.RRI = Radioreléový hlásiÄ + +#######Buttons########### +Train.Buttons.ParkingBrake = %d%% #NEW +Train.Buttons.EnginesVoltage = %d V #NEW +Train.Buttons.CanAB = AB mode is available #NEW +Train.Buttons.InAB = In AB mode #NEW + +#Common +Common.702.VZ1 = Pneumatický ventil Ä. 1 +Common.703.ParkingBrakeLeft = Odbrzdit ruÄní brzdu +Common.703.ParkingBrakeRight = Zabrzdit ruÄní brzdu +Common.703.KSD = KSD: TlaÄítko kontroly blokování dveří +Common.703.SD = @[Common.502.SDW] +Common.703.VU1 = VytápÄ›ní kabiny +Common.703.VU2 = OsvÄ›tlení nouze +Common.703.VU3 = OsvÄ›tlení kabiny +Common.703.AV = Hlavní jistiÄ (vysokonapěťový obvod) +Common.703.LOn = Zapnout osvÄ›tlení +Common.703.LOff = Vypnout osvÄ›tlení +Common.703.KRR = KRR: TlaÄítko obracení reversů do první pozice +Common.703.RUT = Regulace RUT (pomalejší akcelerace) +Common.707.SEQ = Kontrolka rotování reostatu kontroléru +Common.707.TAH = TAH: Nouzová jízda bez ARS +Common.710.RK = Reostat kontroléru je ve stÅ™ední poloze + +Common.710.SAMMSchemeOff = SAMM: TlaÄítko vypnutí trakce RAV +Common.710.SAMMStart = SAMM: TlaÄítko aktivace RAV +Common.710.SAMMReset = SAMM: Resetovat +Common.710.SAMMXTLamp = SAMM: Zkompletovat řídící/brzdové obvody RAV +Common.710.SAMMSignal1 = SAMM: @[Common.ALL.Unsused1] +Common.710.SAMMSignal2 = SAMM: @[Common.ALL.Unsused1] +Common.710.SAMMOn = SAMM: Zapnutí systému RAV +Common.710.SAMMUnit = SAMM: Zapnutí jednotky RAV +Common.710.SAMMX2 = SAMM: Režim chodu J2 +Common.710.SAMMAhead = SAMM: Režim dohánÄ›ní +Common.710.SAMMAccept = SAMM: Souhlas + +#gmod_subway_81-702 +Entities.gmod_subway_81-702.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-702.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-702.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-702.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-702.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-702.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-702.Buttons.VU.KU1Set = @[Common.703.LOn] +Entities.gmod_subway_81-702.Buttons.VU.KU2Set = @[Common.703.LOff] +Entities.gmod_subway_81-702.Buttons.MainB.KU7Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-702.Buttons.MainB.KU6Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-702.Buttons.MainB.VRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-702.Buttons.MainB.KU3Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-702.Buttons.MainP.VZSet = @[Common.702.VZ1] +Entities.gmod_subway_81-702.Buttons.KU9.KU9Set = @[Common.703.KSD] +Entities.gmod_subway_81-702.Buttons.KU5.KU5Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-702.Buttons.MainL.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-702.Buttons.MainL.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-702.Buttons.MainL.!Blue = @[Common.703.SD] +Entities.gmod_subway_81-702.Buttons.VU.SNSet = @[Common.ALL.KSN] + +Entities.gmod_subway_81-702.Buttons.HelperPanel.KU10Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-702.Buttons.HelperPanel.KU8Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-702.Buttons.HelperPanel.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-702.Buttons.HelperPanel.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_81-702.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_81-702.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_81-702.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_81-702.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_81-702.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] + +Entities.gmod_subway_81-702.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-702.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-702.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-702.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-702.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-702.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-702.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-702.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-702.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-702.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-702.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-702.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-702.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-702.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-702.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-702.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-702.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-702.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-702.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-702.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-702_int +Entities.gmod_subway_81-702_int.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-702_int.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-702_int.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-702_int.Buttons.VU.KU1Set = @[Common.703.LOn] +Entities.gmod_subway_81-702_int.Buttons.VU.KU2Set = @[Common.703.LOff] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU7Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU6Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-702_int.Buttons.MainB.VRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU3Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-702_int.Buttons.KU9.KU9Set = @[Common.703.KSD] +Entities.gmod_subway_81-702_int.Buttons.KU5.KU5Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-702_int.Buttons.MainL.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-702_int.Buttons.MainL.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-702_int.Buttons.MainL.!Blue = @[Common.703.SD] +Entities.gmod_subway_81-702_int.Buttons.VU.SNSet = @[Common.ALL.KSN] + +Entities.gmod_subway_81-702_int.Buttons.HelperPanel.KU10Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-702_int.Buttons.HelperPanel.KU8Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_81-702_int.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-702_int.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-702_int.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-702_int.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-702_int.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-702_int.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-702_int.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-702_int.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-702_int.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-702_int.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702_int.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702_int.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-702_int.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-702_int.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-702_int.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-702_int.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-702_int.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-702_int.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-702_int.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-702_int.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-703 +Entities.gmod_subway_81-703.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-703.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-703.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-703.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-703.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-703.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-703.Buttons.AV2.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-703.Buttons.Main.RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-703.Buttons.Main.GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-703.Buttons.Main.SD = @[Common.703.SD] +Entities.gmod_subway_81-703.Buttons.Main.SDW = @[Common.502.SDW] #NEW +Entities.gmod_subway_81-703.Buttons.Main.PP1 = @[Common.ALL.L1w] #NEW +Entities.gmod_subway_81-703.Buttons.Main.PP6 = @[Common.ALL.L6w] #NEW +Entities.gmod_subway_81-703.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_81-703.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_81-703.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_81-703.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_81-703.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-703.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_81-703.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-703.Buttons.Main.KU7KToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-703.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703.Buttons.Main.KU6KToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-703.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-703.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-703.Buttons.Main.KU12Toggle = @[Common.703.RUT] +Entities.gmod_subway_81-703.Buttons.VU4.KU16Toggle = @[Common.ALL.VF2] + +Entities.gmod_subway_81-703.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-703.Buttons.HelperPanel.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-703.Buttons.HelperPanel.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_81-703.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_81-703.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_81-703.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_81-703.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_81-703.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] + +Entities.gmod_subway_81-703.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-703.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-703.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-703.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-703.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-703.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-703.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-703.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-703.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-703.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-703.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-703.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-703.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-703.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-703.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-703.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-703.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-703.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-703.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-703.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-703.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-703_int +Entities.gmod_subway_81-703_int.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-703_int.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-703_int.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-703_int.Buttons.Main.RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-703_int.Buttons.Main.GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-703_int.Buttons.Main.SD = @[Common.703.SD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_81-703_int.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_81-703_int.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_81-703_int.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_81-703_int.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-703_int.Buttons.Main.KU7KToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703_int.Buttons.Main.KU6KToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU12Toggle = @[Common.703.RUT] +Entities.gmod_subway_81-703_int.Buttons.VU4.KU16Toggle = @[Common.ALL.VF2] + +Entities.gmod_subway_81-703_int.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703_int.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_81-703_int.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-703_int.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-703_int.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-703_int.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-703_int.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-703_int.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-703_int.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-703_int.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-703_int.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-703_int.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703_int.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703_int.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-703_int.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-703_int.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-703_int.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-703_int.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-703_int.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-703_int.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-703_int.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-703_int.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-703_int.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_ezh +Entities.gmod_subway_ezh.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_ezh.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_ezh.Buttons.VU.KU14Set = @[Common.ALL.KRP] +Entities.gmod_subway_ezh.Buttons.VU.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_ezh.Buttons.KRR.KRRSet = @[Common.703.KRR] + +Entities.gmod_subway_ezh.Buttons.AVU.OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_ezh.Buttons.AVU.!AVULight = @[Common.ALL.LAVU] + +Entities.gmod_subway_ezh.Buttons.AV2.R_RadioToggle = @[Common.ALL.VASNP] +Entities.gmod_subway_ezh.Buttons.AV2.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_ezh.Buttons.AV2.UOSToggle = @[Common.ALL.UOS] + +Entities.gmod_subway_ezh.Buttons.LampsALS1.!LNF = @[Common.ARS.04] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L0 = @[Common.ARS.0] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L40 = @[Common.ARS.40] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L60 = @[Common.ARS.60] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L70 = @[Common.ARS.70] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L80 = @[Common.ARS.80] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!LNF_2 = @[Common.ARS.04] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L0_2 = @[Common.ARS.0] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L40_2 = @[Common.ARS.40] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L60_2 = @[Common.ARS.60] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L70_2 = @[Common.ARS.70] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L80_2 = @[Common.ARS.80] + +Entities.gmod_subway_ezh.Buttons.AB1.AB1Set = @[Common.ARS.ABButton]@[Common.ARS.ABDriver] +Entities.gmod_subway_ezh.Buttons.AB2.AB2Set = @[Common.ARS.ABButton]@[Common.ARS.ABHelper] +Entities.gmod_subway_ezh.Buttons.KAH.KAHToggle = @[Common.707.TAH] +Entities.gmod_subway_ezh.Buttons.RC1.RC1Toggle = @[Common.ALL.RCARS] + +Entities.gmod_subway_ezh.Buttons.Lamps1.!AV = @[Common.ARS.AV] +Entities.gmod_subway_ezh.Buttons.Lamps1.!SEQ = @[Common.707.SEQ] +Entities.gmod_subway_ezh.Buttons.Lamps1.!ARS = @[Common.ARS.ARS] +Entities.gmod_subway_ezh.Buttons.Lamps1.!AB = @[Common.ARS.AB] +Entities.gmod_subway_ezh.Buttons.Lamps1.!SD = @[Common.703.SD] +Entities.gmod_subway_ezh.Buttons.Lamps1.!LSN = @[Common.ALL.SN] +Entities.gmod_subway_ezh.Buttons.Lamps1.!AV1 = @[Common.ARS.AV1] +Entities.gmod_subway_ezh.Buttons.Lamps1.!RRP = @[Common.ALL.RP] +Entities.gmod_subway_ezh.Buttons.Lamps1.!KT = @[Common.ARS.KT] +Entities.gmod_subway_ezh.Buttons.Lamps1.!VD = @[Common.ARS.VD] +Entities.gmod_subway_ezh.Buttons.Lamps1.!RS = @[Common.ARS.RS] +Entities.gmod_subway_ezh.Buttons.Lamps1.!LN = @[Common.ARS.LN] +Entities.gmod_subway_ezh.Buttons.Lamps2.!RRP2 = @[Common.ALL.RP] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LPU2 = @[Common.707.SEQ] +Entities.gmod_subway_ezh.Buttons.Lamps2.!VD2 = @[Common.ARS.VD] +Entities.gmod_subway_ezh.Buttons.Lamps2.!KT2 = @[Common.ARS.KT] +Entities.gmod_subway_ezh.Buttons.Lamps2.!AB2 = @[Common.ARS.AB] +Entities.gmod_subway_ezh.Buttons.Lamps2.!SD2 = @[Common.703.SD] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LN2 = @[Common.ARS.LN] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LSN2 = @[Common.ALL.SN] + +Entities.gmod_subway_ezh.Buttons.Main1.1:KU16Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_ezh.Buttons.Main1.1:ALSFreqToggle = @[Common.ARS.Freq]@[Common.ARS.FreqD] +Entities.gmod_subway_ezh.Buttons.Main1.1:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU6KToggle = @[Common.ALL.KDLPK] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh.Buttons.Main1.1:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh.Buttons.Main1.1:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh.Buttons.Main1.1:R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU16Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_ezh.Buttons.Main2.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh.Buttons.Main2.2:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU6KToggle = @[Common.ALL.KDLPK] +Entities.gmod_subway_ezh.Buttons.Main2.2:ALSFreqToggle = @[Common.ARS.Freq]@[Common.ARS.FreqD] +Entities.gmod_subway_ezh.Buttons.Main2.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh.Buttons.Main2.2:R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU10Set = @[Common.ALL.KRZD] + +Entities.gmod_subway_ezh.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_ezh.Buttons.HelperPanel.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.HelperPanel.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_ezh.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_ezh.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_ezh.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_ezh.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_ezh.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] + +Entities.gmod_subway_ezh.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_ezh.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_ezh.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_ezh.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_ezh.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_ezh.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_ezh.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + + +Entities.gmod_subway_ezh.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_ezh.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_ezh.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_ezh.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_ezh1 +Entities.gmod_subway_ezh1.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh1.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh1.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh1.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh1.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh1.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh1.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh1.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh1.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] + + +Entities.gmod_subway_ezh1.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh1.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh1.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh1.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh1.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +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.!SD = @[Common.703.SD] + +Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh1.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh1.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh1.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh1.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh1.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh1.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh1.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh1.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh1.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_ezh1.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh1.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh1.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_ezh1.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh1.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_ezh1.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_ez3 +Entities.gmod_subway_ezh3.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh3.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh3.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh3.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh3.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_ezh3.Buttons.RUM.RUMToggle = @[Common.ALL.RCARS] +Entities.gmod_subway_ezh3.Buttons.KRR.KRRSet = @[Common.703.KRR] + +Entities.gmod_subway_ezh3.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_ezh3.Buttons.VUHelper.VUToggle = @[Common.ALL.VU] + + +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSchemeOffSet = @[Common.710.SAMMSchemeOff] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMStartSet = @[Common.710.SAMMStart] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMResetSet = @[Common.710.SAMMReset] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMXTLamp = @[Common.710.SAMMXTLamp] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal1 = @[Common.ALL.Unsused1] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal2 = @[Common.ALL.Unsused1] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMOnToggle = @[Common.710.SAMMOn] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMUnitToggle = @[Common.710.SAMMUnit] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMX2Toggle = @[Common.710.SAMMX2] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMAheadToggle = @[Common.710.SAMMAhead] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMAcceptToggle = @[Common.710.SAMMAccept] +Entities.gmod_subway_ezh3.Buttons.Main.V1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh3.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh3.Buttons.Main.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh3.Buttons.Main.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_ezh3.Buttons.Main.VU14Toggle = @[Common.ALL.VUS] +Entities.gmod_subway_ezh3.Buttons.Main.GLightsToggle = @[Common.ALL.GaugeLights] +Entities.gmod_subway_ezh3.Buttons.Main.VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_ezh3.Buttons.Main.V4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh3.Buttons.Main.V5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh3.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_ezh3.Buttons.Main.KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh3.Buttons.Main.KBSet = @[Common.ARS.KB] +Entities.gmod_subway_ezh3.Buttons.Main.RKLamp = @[Common.710.RK] +Entities.gmod_subway_ezh3.Buttons.Main.ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh3.Buttons.Main.R_UNchToggle = @[Common.ALL.UNCh] +Entities.gmod_subway_ezh3.Buttons.Main.V2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh3.Buttons.Main.R_RadioToggle = @[Common.ALL.R_Radio] +Entities.gmod_subway_ezh3.Buttons.Main.ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh3.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh3.Buttons.Main.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_ezh3.Buttons.Main.PLightsToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_ezh3.Buttons.Main.V10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh3.Buttons.Main.PLightsToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_ezh3.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh3.Buttons.Main.KU12Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh3.Buttons.Main.KAHSet = @[Common.ALL.KAH] +Entities.gmod_subway_ezh3.Buttons.Main.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_ezh3.Buttons.Main.KU10Set = @[Common.ALL.KRP] +Entities.gmod_subway_ezh3.Buttons.Main.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_ezh3.Buttons.Main.R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_ezh3.Buttons.Main.!AnnPlay = @[Common.ALL.AnnPlay] + +Entities.gmod_subway_ezh3.Buttons.HelperPanel.V6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.V3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_ezh3.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] + +Entities.gmod_subway_ezh3.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh3.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh3.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh3.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh3.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh3.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh3.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh3.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_ezh3.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_ezh3.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_ezh3.Buttons.Panel.!L04 = @[Common.ARS.04] +Entities.gmod_subway_ezh3.Buttons.Panel.!L0 = @[Common.ARS.0] +Entities.gmod_subway_ezh3.Buttons.Panel.!L40 = @[Common.ARS.40] +Entities.gmod_subway_ezh3.Buttons.Panel.!L60 = @[Common.ARS.60] +Entities.gmod_subway_ezh3.Buttons.Panel.!L70 = @[Common.ARS.70] +Entities.gmod_subway_ezh3.Buttons.Panel.!L80 = @[Common.ARS.80] + +Entities.gmod_subway_ezh3.Buttons.Panel.!LKT = @[Common.ARS.KT] +Entities.gmod_subway_ezh3.Buttons.Panel.!LSN = @[Common.ALL.SN] +Entities.gmod_subway_ezh3.Buttons.Panel.!LKVD = @[Common.ARS.VD] +Entities.gmod_subway_ezh3.Buttons.Panel.!LRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh3.Buttons.Panel.!LPU = @[Common.ALL.PU] +Entities.gmod_subway_ezh3.Buttons.Panel.!LSD = @[Common.703.SD] + +Entities.gmod_subway_ezh3.Buttons.Panel.!Speedometer = @[Common.ALL.Speedometer] +Entities.gmod_subway_ezh3.Buttons.Panel.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh3.Buttons.Panel.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh3.Buttons.Panel.!HighVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_ezh3.Buttons.Panel.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh3.Buttons.Panel.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +#gmod_subway_em508t +Entities.gmod_subway_em508t.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_em508t.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_em508t.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_em508t.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_em508t.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_em508t.Buttons.VU14.VU14Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_em508t.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_em508t.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_em508t.Buttons.Main.KU12Set = @[Common.ALL.KDL] +Entities.gmod_subway_em508t.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_em508t.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_em508t.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_em508t.Buttons.Main.V2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_em508t.Buttons.Main.V1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_em508t.Buttons.Main.V4Set = @[Common.703.LOn] +Entities.gmod_subway_em508t.Buttons.Main.V5Set = @[Common.703.LOff] +Entities.gmod_subway_em508t.Buttons.Main.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_em508t.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_em508t.Buttons.Main.V10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_em508t.Buttons.Main.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_em508t.Buttons.Main.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_em508t.Buttons.Main.!SD = @[Common.703.SD] + +Entities.gmod_subway_em508t.Buttons.HelperPanel.V6Set = @[Common.ALL.KDL] +Entities.gmod_subway_em508t.Buttons.HelperPanel.V3Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_em508t.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_em508t.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_em508t.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_em508t.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_em508t.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_em508t.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_em508t.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_em508t.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_em508t.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_em508t.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_em508t.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_em508t.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_em508t.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +#Spawner: +Entities.gmod_subway_81-702.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-702.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-702.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-702.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-702.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_81-702.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-702.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-702.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] + +Entities.gmod_subway_81-703.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-703.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-703.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-703.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-703.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_81-703.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-703.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-703.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] + +Entities.gmod_subway_ezh.Spawner.TrainType.Name = @[Spawner.707.Type] +Entities.gmod_subway_ezh.Spawner.TrainType.1 = @[Spawner.707.Type1] +Entities.gmod_subway_ezh.Spawner.TrainType.2 = @[Spawner.707.Type2] +Entities.gmod_subway_ezh.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_ezh.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_ezh.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_ezh.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_ezh.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_ezh.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_ezh.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_ezh.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_ezh.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_ezh.Spawner.EWagons.Name = @[Spawner.502.EWagons] + +Entities.gmod_subway_ezh3.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_ezh3.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_ezh3.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_ezh3.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_ezh3.Spawner.Announcer.1 = @[Spawner.710.RRI] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/cz_717.lua b/lua/metrostroi_data/languages/cz_717.lua new file mode 100644 index 0000000..d77e3ef --- /dev/null +++ b/lua/metrostroi_data/languages/cz_717.lua @@ -0,0 +1,1218 @@ +return [[ +#81-717 + +[cz] +#Cameras: +Train.717.Breakers = JistiÄe +Train.717.VB = Baterie a OŘO +Train.717.VBD = VBD a UPPS + +Train.717.VRD = VRD +Train.717.SOSD = SOSD +Train.717.PUAV = PUAV (RAV) +Train.717.PA = PA (Vlaková aparatura) +Train.717.PAScreen = Obrazovka PA + +Train.714.Shunt = Ovládací panel (posun), ventil brzdiÄe +#Spawner +Spawner.717.Line2 = Souprava z linky MPL +Spawner.717.Line4 = Souprava z linky PBL +Spawner.717.Line5 = Souprava z linky FPL + +Spawner.717.Type = Typ soupravy +Spawner.717.BodyType = Plášť vozu +Spawner.717.MVM = MVM (Moskevský) +Spawner.717.LVZ = LVZ (Petrohradský) +Spawner.717.MaskType = Maska Äela +Spawner.717.CranType = BrzdiÄ +Spawner.717.LampType = Typ osvÄ›tlení +Spawner.717.Lamp1 = LPV-02 +Spawner.717.Lamp2 = LLV-01 +Spawner.717.SeatType = Typ sedadel +Spawner.717.ARS = Panel ARS +Spawner.717.RingType = Zvonek ARS +Spawner.717.BPSNType = Typ mÄ›niÄe (BPSN) + +#######Buttons########### +Train.Buttons.RZP = BPSN converter protection engaged + +#Common +Common.717.VBD = VypínaÄ blokování dveří pomocí ASNP +Common.717.UPPS = VypínaÄ systému UPPS +Common.717.BPSN = BPSN: MÄ›niÄ +Common.717.ARS13V = Ověření napÄ›tí ARS 13V +Common.717.Radio13V = Ověření napÄ›tí Rádio 13V +Common.717.LVD = LVD: Kontrolka 1. vodiÄe (trakÄní motory v chodu) +Common.717.LHRK = LHRK: Kontrolka 2. vodiÄe (rotace reostatu kontroléru) +Common.717.LST = LST: Kontrolka 6. vodiÄe (Brzda) +Common.717.KVC = LKVC: Kontrolka pomocných elektrických stykaÄů (vysoké napÄ›tí není k dispozici) +Common.717.GLEB = GLEB: Kontrolka aktualizace +Common.717.KVP = LKVP: Kontrolka regulace vysokonapěťového mÄ›niÄe (BPSN) +Common.717.LSP = LSP: Požár +Common.717.LEKK = LEKK: Indikátor kontaktní svorkovnice +Common.717.LPU = LPU: Indikátor redukce parametru RUT +Common.717.OtklBV = Vypnutí BV +Common.717.OtklBVK = Krytka BV +Common.717.ConverterProtection = TlaÄítko obnovy chrániÄe mÄ›niÄe +Common.717.VZ1 = VZ1: Pneumatický ventil Ä. 1 +Common.717.VL1 = Kontrolka zapnutí ventilace +Common.717.V13 = Ventilace nouze +Common.717.V11 = Ventilace 1. skupiny +Common.717.V12 = Ventilace 2. skupiny +Common.717.RZPL = RZP: Vybavení RZP (ochrana BPSN) +Common.717.VPAOn = VPA: Zapnout vlakovou aparaturu +Common.717.VPAOff = VPA: Vypnout vlakovou aparaturu +Common.717.VZD = VZD: ZavÅ™ení dveří + +Common.717.A53 = A53: Vlakové obvody +Common.717.A56 = A56: Baterie +Common.717.A54 = A54: VypínaÄ Å™Ã­zení +Common.717.A17 = A17: Reflektory, dveÅ™e +Common.717.A44 = A44: Nouzové řízení (kompresory NŘ) +Common.717.A39 = A39: Nouzové řízení vozidel +Common.717.A70 = A70: Korekce zátěže relé (automaticky) +Common.717.A14 = A14: Relé nouzového řízení +Common.717.A74 = A74: Vybavení MR +Common.717.A26 = A26: Zdroj VKV +Common.717.AR63 = AР63: Napájení radiostanice (VR) +Common.717.AS1 = AС1: Intercom, ASNP +Common.717.A13 = A13: Signalizace dveří +Common.717.A21 = A21: Ovládání dveří +Common.717.A31 = A31: Otevřít levé dveÅ™e +Common.717.A32 = A32: Otevřít pravé dveÅ™e +Common.717.A16 = A16: ZavÅ™ení dveří +Common.717.A12 = A12: DveÅ™e nouze + +Common.717.A24 = A24: Dobíjení baterie +Common.717.A49 = A49: OsvÄ›tlení nouze +Common.717.A27 = A27: Osv. kabiny, interiéru, kontr. MR, park. brzda +Common.717.A72 = A72: Pneumatický ventil Ä. 1 +Common.717.A50 = A50: Přídrž PBO +Common.717.AV3 = AÐ’3: Nouzové napájení ventilace +Common.717.AV3S = AÐ’3: Nouzové napájení radiostanice +Common.717.AV2 = AÐ’2: Ventilace (napájení) +Common.717.AV4 = AÐ’4: Ovládání ventilace 1. skupiny +Common.717.AV5 = AÐ’5: Ovládání ventilace 2. skupiny +Common.717.AV6 = AÐ’6: Ventilace nouze +Common.717.AV1 = AÐ’1: Ventilace +Common.717.A29 = A29: Bílá svÄ›tla (napájení) +Common.717.A46 = A46: Bílá svÄ›tla (klopená) +Common.717.A47 = A47: Bílá svÄ›tla (dálková) +Common.717.A71 = A71: Napájení ÄŒR-3, Äervená svÄ›tla +Common.717.A7 = A7: ÄŒervené svÄ›tlo pravé +Common.717.A9 = A9: ÄŒervené svÄ›tlo levé + +Common.717.A84 = @[Common.ALL.VU] +Common.717.A8 = A8: Pneumatický ventil Ä. 2 +Common.717.A52 = A52: Pedál, ventil Ä. 2 +Common.717.A19 = A19: ÄŒR-3 +Common.717.A48 = A48: Pedál bdÄ›losti +Common.717.A10 = A10: Ovládání kompresoru +Common.717.A22 = A22: StykaÄ kompresoru +Common.717.A30 = A30: Motor HK (SDRK) +Common.717.A1 = A1: Jízda (J-1) +Common.717.A2 = A2: Ovládání HRK (Jízda II/J-2) +Common.717.A3 = A3: Jízda III (J-3) +Common.717.A4 = A4: Jízda vzad +Common.717.A5 = A5: Jízda vpÅ™ed +Common.717.A6 = A6: Elektrická brzda +Common.717.A18 = A18: VÅ¡eobecná porucha +Common.717.A73 = A73: Napáj. obv. kontroly TO +Common.717.A20 = A20: LS-2, LS-5 +Common.717.A25 = A25: RuÄní brzdÄ›ní + +Common.717.A11 = A11: OsvÄ›tlení kabiny +Common.717.A37 = A37: Vybavení RZP +Common.717.A45 = A45: Ovládání mÄ›niÄe +Common.717.A38 = A38: RZP +Common.717.A51 = A51: StykaÄ mÄ›niÄe +Common.717.A65 = A65: MÄ›niÄ +Common.717.A66 = A66: Bezp. signal. VN (BV) +Common.717.A42 = A42: Napájení ARS (75V) +Common.717.A43 = A43: Baterie ARS (12V) +Common.717.A432 = A43: Ovládání EPK/EPV +Common.717.A41 = A41: Pneumatický ventil Ä. 2 (ARS) +Common.717.A40 = A40: BrzdÄ›ní ARS +Common.717.A75 = A75: VytápÄ›ní kabiny +Common.717.A76 = A76: Protipožární ochrana (ASOTP) +Common.717.A60 = A60: Elektromotory (kontrolka) +Common.717.A58 = A58: Jízda nouze (KAH-1) +Common.717.A57 = A57: Reostat kontroléru (HRK) +Common.717.A59 = A59: Jízda nouze (KAH-2) +Common.717.A28 = A28: Napájení jednotky tyristor. reg. výkonu +Common.717.A55 = A55: SbÄ›raÄe proudu +Common.717.A68 = A68: SbÄ›raÄe +Common.717.A80 = A80: Zapnutí BV +Common.717.A81 = A81: Ovládání BV + +Common.717.A58PU = A58: Napájení PUAV +Common.717.A59PU = A59: Ovládání PUAV +Common.717.A61PU = A61: Kontrola klíÄe reversu PUAV +Common.717.A58PA = A58: Napájení PA +Common.717.A59PA = Ð59: @[Common.ALL.Unsused1] +Common.717.A61PA = A61: Kontrola klíÄe reversu PA + +Common.717.A78 = A78: PÅ™ední dveÅ™e +Common.717.ABK = A-ВК: Klimatizace kabiny + +Common.717.A81 = A81: Ovládání BV +Common.717.A23 = A23: Zapnutí kompresoru +Common.717.A15 = A15: OsvÄ›tlení nouze +Common.717.AIS = AIS: Tachograf + +Common.717.RC2 = RC-2: OdpojovaÄ Å™Ã­dících obvodů autovedení +Common.717.VAU = VAU: Systém autovedení (RAV) + +Common.717.LampDV = DV: Porucha rotaÄního snímaÄe +Common.717.ARSL20 = Rychlost 20 km/h +Common.717.ARSL40 = @[Common.ARS.40] +Common.717.ARSL60 = @[Common.ARS.60] +Common.717.ARSL70 = @[Common.ARS.70] +Common.717.ARSL80 = @[Common.ARS.80] + +Common.PUAV.K16 = LK16: Kontrolka napájení 16. vodiÄe (zavÅ™ení dveří) +Common.PUAV.OS = LOS: Režim omezení rychlosti (PUAV) +Common.PUAV.AVT = LAVT: Režim autovedení (PUAV) +Common.PUAV.RS = LRS: Režim regulace rychlosti (PUAV) +Common.PUAV.KI1 = LKI1: Indikátor závady 1. kompletu PUAV +Common.PUAV.KI2 = LKI2: Indikátor závady 2. kompletu PUAV +Common.717.KH = KHZ: Povolit J-3 v režimu RAV +Common.717.KSZD = KSZD: ZavÅ™ení dveří (Souhlas) +Common.717.VAV = @[Common.ALL.VAV] + +Common.717.PAM = PA-M +Common.717.PAKSDM = PA-KSD-M + +Common.PA.P = P +Common.PA.F = F +Common.PA.Up = Nahoru +Common.PA.M = M +Common.PA.Left = Doleva +Common.PA.Down = Dolů +Common.PA.Right = Doprava +Common.PA.Esc = ZruÅ¡it +Common.PA.Enter = Zadat + +Common.714.Start = Zapnout trakÄní motory +Common.714.RV = PÅ™epínaÄ smÄ›ru jízdy + +#gmod_subway_81-717 +Entities.gmod_subway_81-717_mvm.Buttons.Battery_C.1:UOSToggle = @[Common.ALL.UOS] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_R.2:UOSToggle = @[Common.ALL.UOS] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_C.1:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_R.2:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_C.1:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_R.2:RC1Toggle = @[Common.ALL.RC1] + +Entities.gmod_subway_81-717_mvm.Buttons.VBD_C.1:VBDToggle = @[Common.717.VBD] +Entities.gmod_subway_81-717_mvm.Buttons.VBD_R.2:VBDToggle = @[Common.717.VBD] +Entities.gmod_subway_81-717_mvm.Buttons.VBD_C.1:UPPS_OnToggle = @[Common.717.UPPS] +Entities.gmod_subway_81-717_mvm.Buttons.VBD_R.2:UPPS_OnToggle = @[Common.717.UPPS] + +Entities.gmod_subway_81-717_mvm.Buttons.Block1.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.RezMKSet = @[Common.ALL.RMK] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.ARS13Set = @[Common.717.ARS13V] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARSOch = @[Common.ARS.04] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLSD1 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLSD2 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLHRK = @[Common.717.LHRK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampRP = @[Common.ALL.RP] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLSN = @[Common.ALL.SN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLN = @[Common.ARS.LN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLKVC = @[Common.717.KVC] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLRS = @[Common.ARS.RS] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLVD = @[Common.717.LVD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLST = @[Common.717.LST] + +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARSOch = @[Common.ARS.04] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLSD1 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLSD2 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLVD = @[Common.717.LVD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLHRK = @[Common.717.LHRK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLST = @[Common.717.LST] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampRP = @[Common.ALL.RP] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLSN = @[Common.ALL.SN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLKVC = @[Common.717.KVC] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLEKK = @[Common.717.GLEB] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLN = @[Common.ARS.LN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLRS = @[Common.ARS.RS] + +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LSD = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LOch = @[Common.ARS.0]\n@[Common.ARS.04] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LN = @[Common.ARS.LN]\n@[Common.ARS.40] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!60 = @[Common.ARS.60]\n@[Common.ARS.80] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!70 = @[Common.ARS.70]\n@[Common.717.LHRK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LEKK = @[Common.717.LEKK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LPU = @[Common.717.LPU] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LKVC = @[Common.717.KVC] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LVD = @[Common.717.LVD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LST = @[Common.717.LST] + +Entities.gmod_subway_81-717_mvm.Buttons.Block3.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-717_mvm.Buttons.Block3.!BCPressure = @[Common.ALL.BCPressure] + +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] + +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_UNchToggle = @[Common.ALL.UNCh] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_ZSToggle = @[Common.ALL.ES] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_RadioToggle = @[Common.ALL.R_Radio] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.1:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.1:KVTRSet = @[Common.ARS.KVTR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.2:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.2:KVTRSet = @[Common.ARS.KVTR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!L1Light = @[Common.717.VL1] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.V13Toggle = @[Common.717.V13] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VUD1Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!GreenRPLight = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!AVULight = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!LKVPLight = @[Common.717.KVP] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!SPLight = @[Common.717.LSP] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OtklBVSet = @[Common.717.OtklBV] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OtklBVKToggle = @[Common.717.OtklBVK] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.V11Toggle = @[Common.717.V11] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.V12Toggle = @[Common.717.V12] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ARSRToggle = @[Common.ALL.ARSR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ALSFreqToggle = @[Common.ARS.Freq] @[Common.ARS.FreqU] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.L_3Toggle = @[Common.ALL.PanelLights] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VPToggle = @[Common.ARS.VP] + +Entities.gmod_subway_81-717_mvm.Buttons.Block7.L_4Toggle = @[Common.ALL.VF] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.VADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KRPSet = @[Common.ALL.KRP] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KAHSet = @[Common.ALL.KAH] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KAHKToggle = @[Common.ALL.KAHK] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.!PNT = @[Common.ALL.BrT] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.!PNW = @[Common.ALL.BrW] + +Entities.gmod_subway_81-717_mvm.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-717_mvm.Buttons.HVMeters.!HighVoltage = @[Common.ALL.HighVoltage] + +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:R_Program2HSet = @[Common.ALL.Program2] + +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_C.SAB1Toggle = @[Common.BZOS.On] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_C.!VH1 = @[Common.BZOS.VH1] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_C.!VH2 = @[Common.BZOS.VH2] + +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_R.1:SAB1Toggle = @[Common.BZOS.On] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_R.1:!VH1 = @[Common.BZOS.VH1] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_R.1:!VH2 = @[Common.BZOS.VH2] + + +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_C.PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_C.PVK+ = @[Common.CabVent.PVK+] +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_R.1:PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_R.1:PVK+ = @[Common.CabVent.PVK+] + +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA23 = @[Common.IGLA.Button23] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA3Set = @[Common.IGLA.Button3] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA4Set = @[Common.IGLA.Button4] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.!IGLAFire = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA23 = @[Common.IGLA.Button23] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA3Set = @[Common.IGLA.Button3] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA4Set = @[Common.IGLA.Button4] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:!IGLAFire = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:!IGLAErr = @[Common.IGLA.IGLAErr] + +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A26Toggle = @[Common.717.A26] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AR63Toggle = @[Common.717.AR63] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AS1Toggle = @[Common.717.AS1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV3Toggle = @[Common.717.AV3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV2Toggle = @[Common.717.AV2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV4Toggle = @[Common.717.AV4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV5Toggle = @[Common.717.AV5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV6Toggle = @[Common.717.AV6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A9Toggle = @[Common.717.A9] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A43Toggle = @[Common.717.A43] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A76Toggle = @[Common.717.A76] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A60Toggle = @[Common.717.A60] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A58Toggle = @[Common.717.A58] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A59Toggle = @[Common.717.A59] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A26Toggle = @[Common.717.A26] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:AR63Toggle = @[Common.717.AR63] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:AS1Toggle = @[Common.717.AS1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A76Toggle = @[Common.717.A76] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A43Toggle = @[Common.717.A43] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A28Toggle = @[Common.717.A28] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AISToggle = @[Common.717.AIS] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A80Toggle = @[Common.717.A80] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV2Toggle = @[Common.717.AV2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV3Toggle = @[Common.717.AV3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV4Toggle = @[Common.717.AV4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV5Toggle = @[Common.717.AV5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV6Toggle = @[Common.717.AV6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A81Toggle = @[Common.717.A81] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A9Toggle = @[Common.717.A9] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A68Toggle = @[Common.717.A68] + +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-717_mvm.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-717_mvm.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle = @[Common.ALL.DriverValveDisconnect] +Entities.gmod_subway_81-717_mvm.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-717_mvm.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-717_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] + +Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-717_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_mvm.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-717_mvm.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-717_mvm.Buttons.OtsekDoor1.OtsekDoor1 = @[Common.ALL.OtsekDoor1] +Entities.gmod_subway_81-717_mvm.Buttons.OtsekDoor2.OtsekDoor2 = @[Common.ALL.OtsekDoor2] +Entities.gmod_subway_81-717_mvm.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_81-717_mvm.Buttons.EPVDisconnect.EPKToggle = @[Common.ALL.EPV] +Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] + + +#gmod_subway_81-717_lvz +#Buttons: +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:RC2Toggle = @[Common.717.RC2] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:RC2Toggle = @[Common.717.RC2] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:VAUToggle = @[Common.717.VAU] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:VAUToggle = @[Common.717.VAU] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:VRDToggle = @[Common.ARS.VRD] + +Entities.gmod_subway_81-717_lvz.Buttons.VRD_C.1:VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-717_lvz.Buttons.SOSD_C.1:VSOSDToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-717_lvz.Buttons.SOSD_R.2:VSOSDToggle = @[Common.ALL.VSOSD] + +Entities.gmod_subway_81-717_lvz.Buttons.Block1.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.ARS13Set = @[Common.717.ARS13V] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.Radio13Set = @[Common.717.Radio13V] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSOch = @[Common.ARS.N4] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLSD1 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLSD2 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLVD = @[Common.ALL.L1w] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLHRK = @[Common.ALL.L2w] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLST = @[Common.ALL.L6w] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLRD = @[Common.ARS.LRD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampRP = @[Common.ALL.RP] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLSN = @[Common.ALL.SN] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampDV = @[Common.717.LampDV] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!SpeedFact1 = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!SpeedFact2 = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL20 = @[Common.717.ARSL20] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL40 = @[Common.717.ARSL40] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL60 = @[Common.717.ARSL60] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL70 = @[Common.717.ARSL70] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL80 = @[Common.717.ARSL80] + +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!NMPressureLow2 = @[Commom.NMnUAVA.NMPressureLow] +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!UAVATriggered2 = @[Commom.NMnUAVA.UAVATriggered] + +Entities.gmod_subway_81-717_lvz.Buttons.USS1.!NMPressureLow = @[Commom.NMnUAVA.NMPressureLow] +Entities.gmod_subway_81-717_lvz.Buttons.USS1.!UAVATriggered = @[Commom.NMnUAVA.UAVATriggered] + +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OK16 = @[Common.PUAV.K16] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OLRS = @[Common.PUAV.RS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OKI1 = @[Common.PUAV.KI1] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OKI2 = @[Common.PUAV.KI2] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OOS = @[Common.PUAV.OS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OAVT = @[Common.PUAV.AVT] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:KHSet = @[Common.717.KH] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:KSZDSet = @[Common.717.KSZD] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:VAVToggle = @[Common.717.VAV] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:VZPToggle = @[Common.ALL.VZP] + +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!K16 = @[Common.PUAV.K16] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!OS = @[Common.PUAV.OS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!AVT = @[Common.PUAV.AVT] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!LRS = @[Common.PUAV.RS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!KI1 = @[Common.PUAV.KI1] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!KI2 = @[Common.PUAV.KI2] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARSOch = @[Common.ARS.N4] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.KHSet = @[Common.717.KH] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.KSZDSet = @[Common.717.KSZD] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.VAVToggle = @[Common.717.VAV] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.VZPToggle = @[Common.ALL.VZP] + +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMPSet = @[Common.717.PAM]: @[Common.PA.P] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMFSet = @[Common.717.PAM]: @[Common.PA.F] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMUpSet = @[Common.717.PAM]: @[Common.PA.Up] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMMSet = @[Common.717.PAM]: @[Common.PA.M] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMLeftSet = @[Common.717.PAM]: @[Common.PA.Left] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMDownSet = @[Common.717.PAM]: @[Common.PA.Down] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMRightSet = @[Common.717.PAM]: @[Common.PA.Right] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM1Set = @[Common.717.PAM]: 1 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM2Set = @[Common.717.PAM]: 2 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM3Set = @[Common.717.PAM]: 3 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM4Set = @[Common.717.PAM]: 4 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM5Set = @[Common.717.PAM]: 5 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM6Set = @[Common.717.PAM]: 6 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM7Set = @[Common.717.PAM]: 7 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM8Set = @[Common.717.PAM]: 8 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM9Set = @[Common.717.PAM]: 9 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMEscSet = @[Common.717.PAM]: @[Common.PA.Esc] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM0Set = @[Common.717.PAM]: 0 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMEnterSet = @[Common.717.PAM]: @[Common.PA.Enter] +Entities.gmod_subway_81-717_lvz.Buttons.PAM.2:KSZDSet = @[Common.717.KSZD] +Entities.gmod_subway_81-717_lvz.Buttons.PAM.2:VZPToggle = @[Common.ALL.VZP] + +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:R_UPOToggle = @[Common.ALL.UPO] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!OhSigLamp1 = @[Common.BZOS.Engaged] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:VUD1Toggle = @[Common.717.VZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!GreenRPLight1 = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!AVULight1 = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!LKVPLight1 = @[Common.717.KVP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!SPLight1 = @[Common.717.LSP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:L_3Toggle = @[Common.ALL.PanelLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:OhrSigToggle = @[Common.BZOS.On] + +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:R_UPOToggle = @[Common.ALL.UPO] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!OhSigLamp2 = @[Common.BZOS.Engaged] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VUD1Toggle = @[Common.717.VZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!KDLLight2 = @[Common.ALL.KDLL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!KDLRLight2 = @[Common.ALL.KDLL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!GreenRPLight2 = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!RZPLight2 = @[Common.717.RZPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!LKVPLight2 = @[Common.717.KVP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:OhrSigToggle = @[Common.BZOS.On] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VPAOnSet = @[Common.717.VPAOn] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VPAOffSet = @[Common.717.VPAOff] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!AVULight2 = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:L_3Toggle = @[Common.ALL.PanelLights] + +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!RZPLight1 = @[Common.717.RZPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:R_UPOToggle = @[Common.ALL.UPO] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!SPLight3 = @[Common.717.LSP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!AVULight3 = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:VUD1Toggle = @[Common.717.VZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!GreenRPLight3 = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!RZPLight3 = @[Common.717.RZPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!LKVPLight3 = @[Common.717.KVP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.1:VPAOnSet = @[Common.717.VPAOn] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.1:VPAOffSet = @[Common.717.VPAOff] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:OVTToggle = @[Common.ALL.VOVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:L_3Toggle = @[Common.ALL.PanelLights] + +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:L_4Toggle = @[Common.ALL.VF] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:VADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:KRPSet = @[Common.ALL.KRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:RezMKSet = @[Common.ALL.RMK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.!1:PNT = @[Common.ALL.BrT] + +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:L_4Toggle = @[Common.ALL.VF] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:VADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:KRPSet = @[Common.ALL.KRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:RezMKSet = @[Common.ALL.RMK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.!KDPLight2 = @[Common.ALL.KDPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.!2:PNT = @[Common.ALL.BrT] + +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_C.VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_C.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_C.VOPDSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_R.1:VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_R.1:VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_R.1:VOPDSet = @[Common.ALL.KDPH] + +Entities.gmod_subway_81-717_lvz.Buttons.CabVent_C.PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-717_lvz.Buttons.CabVent_C.PVK+ = @[Common.CabVent.PVK+] + +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_N.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_N.!HighVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_O.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_O.!HighVoltage = @[Common.ALL.HighVoltage] + +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A26Toggle = @[Common.717.A26] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AR63Toggle = @[Common.717.AR63] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AS1Toggle = @[Common.717.AS1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AISToggle = @[Common.717.AIS] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AV3Toggle = @[Common.717.AV3S] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A58Toggle = @[Common.717.A58PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A59Toggle = @[Common.717.A59PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A61Toggle = @[Common.717.A61PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:P:A58Toggle = @[Common.717.A58PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:P:A59Toggle = @[Common.717.A59PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:P:A61Toggle = @[Common.717.A61PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A9Toggle = @[Common.717.A9] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A06Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A43Toggle = @[Common.717.A432] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A76Toggle = @[Common.717.A76] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A60Toggle = @[Common.717.A60] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A58Toggle = @[Common.717.A58PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A59Toggle = @[Common.717.A59PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A61Toggle = @[Common.717.A61PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.P:A58Toggle = @[Common.717.A58PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.P:A59Toggle = @[Common.717.A59PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.P:A61Toggle = @[Common.717.A61PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A78Toggle = @[Common.717.A78]@[Common.ALL.Unsused2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.ABKToggle = @[Common.717.ABK]@[Common.ALL.Unsused2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A43Toggle = @[Common.717.A432] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A65Toggle = @[Common.717.A65] + +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A28Toggle = @[Common.717.A28] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.AISToggle = @[Common.717.AIS] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.AV3Toggle = @[Common.717.AV3S] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A60Toggle = @[Common.717.A60] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A9Toggle = @[Common.717.A9] + +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber3+ = @[Common.ALL.RouteNumber3+] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber3- = @[Common.ALL.RouteNumber3-] + +Entities.gmod_subway_81-717_lvz.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle = @[Common.ALL.DriverValveDisconnect] +Entities.gmod_subway_81-717_lvz.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-717_lvz.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-717_lvz.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-717_lvz.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-717_lvz.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] + +Entities.gmod_subway_81-717_lvz.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-717_lvz.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-717_lvz.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_lvz.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_lvz.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-717_lvz.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-717_lvz.Buttons.OtsekDoor1.OtsekDoor1 = @[Common.ALL.OtsekDoor1] +Entities.gmod_subway_81-717_lvz.Buttons.OtsekDoor2.OtsekDoor2 = @[Common.ALL.OtsekDoor2] +Entities.gmod_subway_81-717_lvz.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_81-717_lvz.Buttons.EPVDisconnect.EPKToggle = @[Common.ALL.EPV] +Entities.gmod_subway_81-717_lvz.Buttons.ParkingBrake.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] + +#gmod_subway_81-714_mvm +Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-714_mvm.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-714_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-714_mvm.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-714_mvm.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-714_mvm.Buttons.couch_cap_o.CouchCap = @[Common.ALL.CouchCap] +Entities.gmod_subway_81-714_mvm.Buttons.couch_cap.CouchCap = @[Common.ALL.CouchCap] + +Entities.gmod_subway_81-714_mvm.Buttons.Battery.VBToggle = @[Common.ALL.VB] + +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV2Toggle = @[Common.717.AV2] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV3Toggle = @[Common.717.AV3] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV4Toggle = @[Common.717.AV4] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV5Toggle = @[Common.717.AV5] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A81Toggle = @[Common.717.A81] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV6Toggle = @[Common.717.AV6] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A80Toggle = @[Common.717.A80] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A18Toggle = @[Common.717.A18] + +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A23Toggle = @[Common.717.A23] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-714_mvm.Buttons.VU.A84Toggle = @[Common.ALL.VU] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.!RZPLight = @[Common.717.RZPL] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.OtklBVSet = @[Common.717.OtklBV] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.StartSet = @[Common.714.Start] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.RV- = @[Common.714.RV] @[Common.ALL.CCW] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.RV+ = @[Common.714.RV] @[Common.ALL.CW] +Entities.gmod_subway_81-714_mvm.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-714_mvm.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-714_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] + +Entities.gmod_subway_81-714_mvm.Buttons.Voltages.!BatteryVoltage = @[Common.ALL.BatteryVoltage] #NEW +Entities.gmod_subway_81-714_mvm.Buttons.Voltages.!BatteryCurrent = @[Common.ALL.BatteryCurrent] #NEW +Entities.gmod_subway_81-714_mvm.Buttons.Pressures.!BCPressure = @[Common.ALL.BLTLPressure] #NEW +Entities.gmod_subway_81-714_mvm.Buttons.Pressures.!BLTLPressure = @[Common.ALL.BCPressure] #NEW + +#gmod_subway_81-714_lvz +Entities.gmod_subway_81-714_lvz.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-714_lvz.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-714_lvz.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-714_lvz.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-714_lvz.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-714_lvz.Buttons.couch_cap_o.CouchCap = @[Common.ALL.CouchCap] +Entities.gmod_subway_81-714_lvz.Buttons.couch_cap.CouchCap = @[Common.ALL.CouchCap] + +Entities.gmod_subway_81-714_lvz.Buttons.Battery.VBToggle = @[Common.ALL.VB] + +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A81Toggle = @[Common.717.A81] +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A80Toggle = @[Common.717.A80] +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A18Toggle = @[Common.717.A18] + +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A23Toggle = @[Common.717.A23] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-714_lvz.Buttons.VU.A84Toggle = @[Common.ALL.VU] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.!RZPLight = @[Common.717.RZPL] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.StartSet = @[Common.714.Start] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.RV- = @[Common.714.RV] @[Common.ALL.CCW] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.RV+ = @[Common.714.RV] @[Common.ALL.CW] +Entities.gmod_subway_81-714_lvz.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-714_lvz.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-714_lvz.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] + +Entities.gmod_subway_81-714_lvz.Buttons.Voltages.!BatteryVoltage = @[Common.ALL.BatteryVoltage] #NEW +Entities.gmod_subway_81-714_lvz.Buttons.Voltages.!BatteryCurrent = @[Common.ALL.BatteryCurrent] #NEW +Entities.gmod_subway_81-714_lvz.Buttons.Pressures.!BCPressure = @[Common.ALL.BLTLPressure] #NEW +Entities.gmod_subway_81-714_lvz.Buttons.Pressures.!BLTLPressure = @[Common.ALL.BCPressure] #NEW + +#Spawner: +Entities.gmod_subway_81-717_mvm.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-717_mvm.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] + + +Entities.gmod_subway_81-717_mvm_custom.Spawner.Type.Name = @[Spawner.717.Type] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BodyType.Name = @[Spawner.717.BodyType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BodyType.1 = @[Spawner.717.MVM] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BodyType.2 = @[Spawner.717.LVZ] +Entities.gmod_subway_81-717_mvm_custom.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-717_mvm_custom.Spawner.MaskType.Name = @[Spawner.717.MaskType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.Cran.Name = @[Spawner.717.CranType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.Name = @[Spawner.717.LampType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.2 = @[Spawner.717.Lamp1] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.3 = @[Spawner.717.Lamp2] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.Name = @[Spawner.717.SeatType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.2 = @[Common.Spawner.Old] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.3 = @[Common.Spawner.New] +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.Name = @[Spawner.717.ARS] +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.2 = @[Common.Spawner.Type] 1 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.3 = @[Common.Spawner.Type] 2 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.4 = @[Common.Spawner.Type] 3 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.5 = @[Common.Spawner.Type] 4 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.6 = @[Common.Spawner.Type] 5 +Entities.gmod_subway_81-717_mvm_custom.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-717_mvm_custom.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-717_mvm_custom.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.Name = @[Spawner.717.RingType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.2 = @[Common.Spawner.Type] 1 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.3 = @[Common.Spawner.Type] 2 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.4 = @[Common.Spawner.Type] 3 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.5 = @[Common.Spawner.Type] 4 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.6 = @[Common.Spawner.Type] 5 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.7 = @[Common.Spawner.Type] 6 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.8 = @[Common.Spawner.Type] 7 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.9 = @[Common.Spawner.Type] 8 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.Name = @[Spawner.717.BPSNType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.2 = @[Common.Spawner.Type] 1 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.3 = @[Common.Spawner.Type] 2 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.4 = @[Common.Spawner.Type] 3 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.5 = @[Common.Spawner.Type] 4 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.6 = @[Common.Spawner.Type] 5 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.7 = @[Common.Spawner.Type] 6 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.8 = @[Common.Spawner.Type] 7 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.9 = @[Common.Spawner.Type] 8 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.10 = @[Common.Spawner.Type] 9 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.11 = @[Common.Spawner.Type] 10 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.12 = @[Common.Spawner.Type] 11 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.13 = @[Common.Spawner.Type] 12 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.14 = @[Common.Spawner.Type] 13 +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] + +#Spawner: +Entities.gmod_subway_81-717_lvz.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-717_lvz.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-717_lvz.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-717_lvz.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-717_lvz.Spawner.Type.Name = @[Spawner.Common.EType] +Entities.gmod_subway_81-717_lvz.Spawner.Type.1 = @[Spawner.717.Line2] +Entities.gmod_subway_81-717_lvz.Spawner.Type.2 = @[Spawner.717.Line4] +Entities.gmod_subway_81-717_lvz.Spawner.Type.3 = @[Spawner.717.Line5] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] diff --git a/lua/metrostroi_data/languages/cz_718.lua b/lua/metrostroi_data/languages/cz_718.lua new file mode 100644 index 0000000..7fb679e --- /dev/null +++ b/lua/metrostroi_data/languages/cz_718.lua @@ -0,0 +1,708 @@ +return [[ +#81-718 + +[cz] + +#######Buttons########### +#Cameras +Train.718.BUP = BUP +Train.718.PPZ = PPZ +Train.718.VPU = VPU + +Train.Buttons.LHalf = Dim #NEW (panel lighting) +Train.Buttons.LFull = Bright #NEW (panel lighting) +Train.Buttons.HL5 = Control circuits are not engaged #NEW +Train.Buttons.HL6 = Protection has tripped or low current #NEW +Train.Buttons.HL7 = BBE protection has tripped #NEW +#Common +Common.718.SB4 = Kontrola zkompletování obvodů +Common.718.SB5 = PÅ™edání řízení (zvonek) +Common.718.SB7K = Režim posunu (krytka) +Common.718.SB7 = Režim posunu +Common.718.SB12 = Zapnout jednotku automatických vypínáÄů +Common.718.SB13 = Vypnout jednotku automatických vypínáÄů +Common.718.SB15 = Zapnout jednotku dodávky el. energie +Common.718.SB16 = Vypnout jednotku dodávky el. energie + +Common.718.VTPR = PÅ™epínaÄ odpojení sbÄ›raÄů proudu +Common.718.RX1 = Jízda nouze (J-1) +Common.718.KAH2 = KAH: TlaÄítko nouzové jízdy bez ARS +Common.718.RX2 = Jízda nouze (J-2) + +Common.718.SPULightStrength = OsvÄ›tlení přístrojové desky (jas) + +Common.718.Heat = VytápÄ›ní kabiny +Common.718.SBP22 = Test zkompletování obvodů +Common.718.KDPR = DveÅ™e nouze (otevřít levé) +Common.718.KDLR = DveÅ™e nouze (otevřít pravé) +Common.718.UOS = UOS: OdpojovaÄ obvodů omezovaÄe rychlosti (jízda bez EPV/EPK) + +Common.718.KES = KES: Nouzové komunikaÄní zařízení je zapnuto +Common.718.CUV = CUV: Kontrolka zapnutí CUV ve voze +Common.718.AIP = AIP: Nouzový indikátor požáru (požár ve vlaku) +Common.718.RIP = RIP: Požár +Common.718.VS1 = VS1: Ventilace 1. skupiny je vypnuta +Common.718.VS2 = VS2: Ventilace 2. skupiny je vypnuta + +#Autobreakers +Common.718.SF51 = SF51: Napájení ARS +Common.718.SF52 = SF52: Nouzové napájení ARS +Common.718.SF53 = SF53: BrzdÄ›ní ARS +Common.718.SF60 = SF60: Baterie ARS (12V) +Common.718.SF61 = SF61: Relé FMM1 ARS (50V) +Common.718.SF77 = SF77: Jízda nouze +Common.718.SF78 = SF78: Jízda nouze (nouzové řízení) +Common.718.SF40 = SF40: Pneumatický ventil Ä. 2 (ZPT) +Common.718.SF41 = SF41: SvÄ›tla +Common.718.SF8 = SF8: Ovládání dveří +Common.718.SF11 = SF11: Ovládání ventilace 2. skupiny +Common.718.SF10 = SF10: Ovládání ventilace 1. skupiny +Common.718.SF7 = SF7: BBE, kompresor +Common.718.SF50 = SF50: RychlomÄ›r +Common.718.SF76 = SF76: Protipožární ochrana +Common.718.SF73 = SF73: Mazání okolků +Common.718.SF3 = SF3: Napájení vozu, CUV +Common.718.SF71 = SF71: Nouzové spojení +Common.718.SF63 = SF63: Radiostanice +Common.718.SF54 = SF54: Vlakový rozhlas (50A) +Common.718.SF65 = SF65: Ventilace kabiny +Common.718.SF55 = SF55: SOT-3 +Common.718.SF9 = SF9: Nouzové řízení +Common.718.SF6 = SF6: Hlavní vypínaÄ Å™Ã­zení +Common.718.SF5 = SF5: Ovládání BKCU +Common.718.SF2 = SF2: MÄ›niÄ +Common.718.SF4 = SF4: Napájení BUV, PTTI, BCKA +Common.718.SF27 = SF27: Nápajení BVA +Common.718.SF46 = SF46: Ovládání BVA +Common.718.SF12 = SF12: Zapnutí BBE +Common.718.SF13 = SF13: Vypnutí BBE +Common.718.SF45 = SF45: BBE, osvÄ›tlení přídrže PBO +Common.718.SF16 = SF16: Ovládání osvÄ›tlení interiéru +Common.718.SF44 = SF44: Napájení osvÄ›tlení interiéru +Common.718.SF43 = SF43: OsvÄ›tlení nouze +Common.718.SF14 = SF14: Napájení stykaÄe obvodů řízení +Common.718.SF15 = SF15: Nouzové napájení stykaÄe obvodů řízení +Common.718.SF25 = SF25: Ovládání odpojení sbÄ›raÄů proudu +Common.718.SF72 = SF72: Indikátor parkovací brzdy +Common.718.SF56 = SF56: Ovládání kompresoru +Common.718.SF29 = SF29: Pneumatický ventil Ä. 1 +Common.718.SF26 = SF26: Pneumatický ventil Ä. 2 +Common.718.SF42 = SF42: BudiÄ +Common.718.SF18 = SF18: Otevřít levé dveÅ™e +Common.718.SF20 = SF20: Otevřít pravé dveÅ™e +Common.718.SF17 = SF17: ZavÅ™ení dveří +Common.718.SF19 = SF19: DveÅ™e nouze +Common.718.SF21 = SF21: Ovládání kompresoru +Common.718.SF22 = SF22: Kompresor nouze +Common.718.SF34 = SF34: Napájení ventilace 1. skupiny +Common.718.SF35 = SF35: Napájení ventilace 2. skupiny +Common.718.SF23 = SF23: StykaÄ ventilace 1. skupiny +Common.718.SF24 = SF24: StykaÄ ventilace 2. skupiny + +#Names +Common.718.MVSU = BUP MVSU +Common.718.MLUP = BUP MLUP +Common.718.MUVS1 = BUP MUVS1 +Common.718.MUVS2 = BUP MUVS2 +Common.718.MP = BUP MP +Common.718.MS = BUP MS + +#A lot of indicators +Common.718.MVSUARSX = @[Common.718.MVSU]: Souhlas v režimu Jízda (BKBD) +Common.718.MVSUARST = @[Common.718.MVSU]: Režim Brzda (BKBD) +Common.718.MVSUARSX3 = @[Common.718.MVSU]: Režim J-3 (RAV) +Common.718.MVSUARSX2 = @[Common.718.MVSU]: Režim J-2 (RAV) +Common.718.MVSUARSX1 = @[Common.718.MVSU]: Režim J-1 (RAV) +Common.718.MVSUARS0 = @[Common.718.MVSU]: Režim 0 (RAV) +Common.718.MVSUARST1 = @[Common.718.MVSU]: Režim B-1 (RAV) +Common.718.MVSUARST2 = @[Common.718.MVSU]: Režim B-2 (RAV) +Common.718.MVSUARST3 = @[Common.718.MVSU]: Režim B-3 (RAV) +Common.718.MVSUKVX3 = @[Common.718.MVSU]: Režim J-3 (jízdní kontrolér) +Common.718.MVSUKVX2 = @[Common.718.MVSU]: Režim J-2 (jízdní kontrolér) +Common.718.MVSUKVX1 = @[Common.718.MVSU]: Režim J-1 (jízdní kontrolér) +Common.718.MVSUKV0 = @[Common.718.MVSU]: Režim 0 (jízdní kontrolér) +Common.718.MVSUKVT1 = @[Common.718.MVSU]: Režim B-1 (jízdní kontrolér) +Common.718.MVSUKVT2 = @[Common.718.MVSU]: Režim B-2 (jízdní kontrolér) +Common.718.MVSUKVT3 = @[Common.718.MVSU]: Režim B-3 (jízdní kontrolér) +Common.718.MVSUKDV = @[Common.718.MVSU]: Signalizace dveří +Common.718.MVSUBDV = @[Common.718.MVSU]: Blokování dveří +Common.718.MVSUPB = @[Common.718.MVSU]: PB nebo ARS jsou zapnuty +Common.718.MVSUARS = @[Common.718.MVSU]: PB nebo ARS jsou vypnuty +Common.718.MVSUAVT = @[Common.718.MVSU]: Rychlobrzda (BKBD) +Common.718.MVSUKVV = @[Common.718.MVSU]: Vstupní režim "Jízda VpÅ™ed" +Common.718.MVSUKVN = @[Common.718.MVSU]: Vstupní režim "Jízda Vzad" +Common.718.MVSUPVU = @[Common.718.MVSU]: Nelze zkompletovat obvody pomocí PVU (UAVA) +Common.718.MVSURPB = @[Common.718.MVSU]: Nelze zkompletovat obvody pomocí relé pedálu bdÄ›losti (PB) +Common.718.MVSUROT = @[Common.718.MVSU]: Nelze zkompletovat obvody pomocí relé odpojení trakce (ARS) +Common.718.MVSUSOT = @[Common.718.MVSU]: Nelze zkompletovat obvody pomocí brzdového zařízení (EPV) +Common.718.MLUPVP = @[Common.718.MLUP]: Režim "Jízda VpÅ™ed" +Common.718.MLUPNZ = @[Common.718.MLUP]: Režim "Jízda Vzad" +Common.718.MLUPBUP = @[Common.718.MLUP]: Blokování BUP +Common.718.MLUPV0 = @[Common.718.MLUP]: Nulová rychlost (pneumatický ventil Ä. 1) +Common.718.MLUPKU = @[Common.718.MLUP]: Závada jízdního kontroléru +Common.718.MLUPBAV = @[Common.718.MLUP]: Závada jednotky RAV +Common.718.MLUPKR = @[Common.718.MLUP]: Závada kontroléru reversu +Common.718.MLUPARS = @[Common.718.MLUP]: Závada ARS +Common.718.MUVS1VP = @[Common.718.MUVS1]: Výstupní režim "Jízda VpÅ™ed" +Common.718.MUVS1NZ = @[Common.718.MUVS1]: Výstupní režim "Jízda Vzad" +Common.718.MUVS1X = @[Common.718.MUVS1]: Výstupní režim "Jízda" +Common.718.MUVS1T = @[Common.718.MUVS1]: Výstupní režim "Brzda" +Common.718.MUVS1U1 = @[Common.718.MUVS1]: Výstupní režim "Požadovaná hodnota 1" +Common.718.MUVS1U2 = @[Common.718.MUVS1]: Výstupní režim "Požadovaná hodnota 2" +Common.718.MUVS1BAV = @[Common.718.MUVS1]: Výstupní režim blokace BAV +Common.718.MUVS1BUP = @[Common.718.MUVS1]: Výstupní režim blokace BUV +Common.718.MUVS20 = @[Common.718.MUVS2]: Výstupní režim "VýbÄ›h" +Common.718.MUVS2ZPT = @[Common.718.MUVS2]: Pneumatický ventil Ä. 2 +Common.718.MPMP = @[Common.718.MP]: Běžný provoz +Common.718.MSMS = @[Common.718.MS]: Běžný provoz + +Common.718.MPS = BUV MPS +Common.718.MALP1 = BUV MALP1 +Common.718.MVD = BUV MVD +Common.718.MALP2 = BUV MALP2 +Common.718.MGR = BUV MGR +Common.718.MLU = BUV MLU +Common.718.MUVK = BUV MUVK +Common.718.MIV = BUV MIV +Common.718.MUVK2 = BUV MUVK2 +Common.718.MPSPROV = @[Common.718.MPS]: Kontrola chodu +Common.718.MPSAVR = @[Common.718.MPS]: Režimy "Jízda/Brzda" vypnuty pomocí AVT +Common.718.MPSTARS = @[Common.718.MPS]: BrzdÄ›ní BKBD ARS +Common.718.MPSX = @[Common.718.MPS]: Indikátor režimu "Jízda" +Common.718.MPSNZ = @[Common.718.MPS]: Jízda Vzad +Common.718.MPSNZR = @[Common.718.MPS]: Nouzová jízda Vzad +Common.718.MPSVPR = @[Common.718.MPS]: Nouzová jízda VpÅ™ed +Common.718.MPSPROV0 = @[Common.718.MPS]: Kontrola provozuschopnosti +Common.718.MPSSK = @[Common.718.MPS]: Rychlost +Common.718.MPST = @[Common.718.MPS]: Indikátor režimu "Brzda" +Common.718.MPSXR = @[Common.718.MPS]: Nouzová jízda J-1 +Common.718.MPSU1 = @[Common.718.MPS]: Požadovaná hodnota 1 +Common.718.MPSU2 = @[Common.718.MPS]: Požadovaná hodnota 2 +Common.718.MPSVP = @[Common.718.MPS]: Jízda VpÅ™ed +Common.718.MPSVZ = @[Common.718.MPS]: Obnova ochrany +Common.718.MPSXM = @[Common.718.MPS]: @[Common.718.SB7] +Common.718.MPSU1R = @[Common.718.MPS]: Nouzová jízda J-2 + +Common.718.MALP1MZK = @[Common.718.MALP1]: Okamžitá blokace tyristoru +Common.718.MALP1FM = @[Common.718.MALP1]: PÅ™epÄ›tí pÅ™epěťové ochrany (napÄ›tí vyšší než 1000V) +Common.718.MALP1400 = @[Common.718.MALP1]: 400V dostupno v přívodní kolejnici +Common.718.MALP150 = @[Common.718.MALP1]: Přítomnost proudu v 1. skupinÄ› armatury +Common.718.MALP1DIF = @[Common.718.MALP1]: Proud v 1. a 2. skupinÄ› se liší +Common.718.MALP1650 = @[Common.718.MALP1]: Proud 1. skupiny armatury je vyšší než 650A +Common.718.MALP10 = @[Common.718.MALP1]: 1. skupina armatury bez proudu +Common.718.MALP1ARS = @[Common.718.MALP1]: Porucha startu kmitoÄtu +Common.718.MALP1ITA = @[Common.718.MALP1]: El. probití brzdového reostatu 1. skupiny > 100A +Common.718.MALP1TR = @[Common.718.MALP1]: Proud reostatu > 100A v 1. skupinÄ› +Common.718.MALP1SN = @[Common.718.MALP1]: Elektrické obvody nezkompletovány +Common.718.MALP1VN = @[Common.718.MALP1]: Závada ventilace + + +Common.718.MVDOTK = @[Common.718.MALP1]: Porucha režimů Jízda/Brzda +Common.718.MVDRP = @[Common.718.MALP1]: Vybavení RP + +Common.718.MALP2MSU = @[Common.718.MALP1]: Okamžité vynulování požadované hodnoty +Common.718.MALP2800 = @[Common.718.MALP1]: 800V dostupno v přívodní kolejnici +Common.718.MALP2975 = @[Common.718.MALP1]: Maximální napÄ›tí přívodní kolejnice +Common.718.MALP250 = @[Common.718.MALP1]: Přítomnost proudu v 2. skupinÄ› armatury +Common.718.MALP2650 = @[Common.718.MALP1]: Proud 2. skupiny armatury je vyšší než 650A +Common.718.MALP20 = @[Common.718.MALP1]: 2. skupina armatury bez proudu +Common.718.MALP2BV = @[Common.718.MALP1]: Vybavení BV +Common.718.MALP2ITB = @[Common.718.MALP1]: El. probití brzdového reostatu 2. skupiny > 100A + +Common.718.MGRTP1 = @[Common.718.MGR]: PÅ™ipojení 1. sbÄ›raÄe proudu +Common.718.MGRTP3 = @[Common.718.MGR]: PÅ™ipojení 3. sbÄ›raÄe proudu +Common.718.MGRKHA = @[Common.718.MGR]: 1. skupina stykaÄů jízdy je zapnuta +Common.718.MGRKTA = @[Common.718.MGR]: 1. skupina stykaÄů brzdy je zapnuta +Common.718.MGRTP2 = @[Common.718.MGR]: PÅ™ipojení 2. sbÄ›raÄe proudu +Common.718.MGRTP4 = @[Common.718.MGR]: PÅ™ipojení 4. sbÄ›raÄe proudu +Common.718.MGRKHB = @[Common.718.MGR]: 2. skupina stykaÄů jízdy je zapnuta +Common.718.MGRKTB = @[Common.718.MGR]: 2. skupina stykaÄů brzdy je zapnuta +Common.718.MGRKRV = @[Common.718.MGR]: Zapnutí stykaÄů reversu VpÅ™ed +Common.718.MGRNV = @[Common.718.MGR]: Závada ventilátoru PTTI +Common.718.MGRBV = @[Common.718.MGR]: BV aktivovano +Common.718.MGRLK = @[Common.718.MGR]: Síťový stykaÄ zapnut +Common.718.MGRKRN = @[Common.718.MGR]: Zapnutí stykaÄů reversu Vzad + +Common.718.MLUAKT = @[Common.718.MLU]: Brzda (příkaz) +Common.718.MLUAXH = @[Common.718.MLU]: Jízda (příkaz) +Common.718.MLUAVP = @[Common.718.MLU]: PÅ™epnutí reversu VpÅ™ed (příkaz) +Common.718.MLUANZ = @[Common.718.MLU]: PÅ™epnutí reversu Vzad (příkaz) +Common.718.MLUASS = @[Common.718.MLU]: Obvod zkompletován +Common.718.MLUAPV = @[Common.718.MLU]: Zapnutí budiÄe (příkaz) +Common.718.MLUALK = @[Common.718.MLU]: Zapnutí síťového stykaÄe (příkaz) + +Common.718.MUVK1V1 = @[Common.718.MUVK]: Ovládání cívky pneumatického ventilu Ä. 1 +Common.718.MUVK1KT = @[Common.718.MUVK]: Ovládání stykaÄů brzdy +Common.718.MUVK1KH = @[Common.718.MUVK]: Ovládání stykaÄů jízdy +Common.718.MUVK1LK = @[Common.718.MUVK]: Ovládání síťového stykaÄe +Common.718.MUVK1PV = @[Common.718.MUVK]: Ovládání budiÄe +Common.718.MUVK1NZ = @[Common.718.MUVK]: Ovládání reversu Vzad +Common.718.MUVK1SN = @[Common.718.MUVK]: El. obvody vozu nezkompletovány + +Common.718.MIV33 = @[Common.718.MIV]: Start kmitoÄtu dokonÄen +Common.718.MIVV1 = @[Common.718.MIV]: Pneumatický ventil Ä. 1 +Common.718.MIVSMA = @[Common.718.MIV]: Indikátor max. požadované hodnoty proudu 1. skupiny +Common.718.MIVSMB = @[Common.718.MIV]: Indikátor max. požadované hodnoty proudu 2. skupiny + +Common.718.MUVK2RTM = @[Common.718.MUVK2]: Ovládání relé minimálního proudu +Common.718.MUVK2RKT = @[Common.718.MUVK2]: Ovládání relé kontroly brzdy +Common.718.MUVK2RP = @[Common.718.MUVK2]: Vybavení ochrany +Common.718.MUVK2OTK = @[Common.718.MUVK2]: Závada vozu +Common.718.MUVK275 = @[Common.718.MUVK2]: Nouzové napájení BUV +Common.718.MUVK2VP = @[Common.718.MUVK2]: Ovládání reversu VpÅ™ed + + +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF51Toggle = @[Common.718.SF51] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF52Toggle = @[Common.718.SF52] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF53Toggle = @[Common.718.SF53] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF60Toggle = @[Common.718.SF60] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF61Toggle = @[Common.718.SF61] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF77Toggle = @[Common.718.SF77] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF78Toggle = @[Common.718.SF78] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF40Toggle = @[Common.718.SF40] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF41Toggle = @[Common.718.SF41] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF8Toggle = @[Common.718.SF8] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF11Toggle = @[Common.718.SF11] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF10Toggle = @[Common.718.SF10] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF7Toggle = @[Common.718.SF7] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF50Toggle = @[Common.718.SF50] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF76Toggle = @[Common.718.SF76] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF73Toggle = @[Common.718.SF73] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF3Toggle = @[Common.718.SF3] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF71Toggle = @[Common.718.SF71] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF63Toggle = @[Common.718.SF63] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF54Toggle = @[Common.718.SF54] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF65Toggle = @[Common.718.SF65] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF55Toggle = @[Common.718.SF55] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF9Toggle = @[Common.718.SF9] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF6Toggle = @[Common.718.SF6] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF5Toggle = @[Common.718.SF5] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF2Toggle = @[Common.718.SF2] + +Entities.gmod_subway_81-718.Buttons.Main.SA5Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-718.Buttons.Main.SB3Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-718.Buttons.Main.SA7Toggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-718.Buttons.Main.SB1Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-718.Buttons.Main.SB2Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-718.Buttons.Main.SA8Toggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-718.Buttons.Main.SB4Set = @[Common.718.SB4] +Entities.gmod_subway_81-718.Buttons.Main.SB5Set = @[Common.718.SB5] +Entities.gmod_subway_81-718.Buttons.Main.SA9Toggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-718.Buttons.Main.SA13Toggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-718.Buttons.Main.SA14Toggle = @[Common.ALL.ARSR] +Entities.gmod_subway_81-718.Buttons.Main.SA15Toggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-718.Buttons.Main.SA2Toggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-718.Buttons.Main.SB6KToggle = @[Common.ALL.KAHK] +Entities.gmod_subway_81-718.Buttons.Main.SB6Set = @[Common.ALL.KAH] +Entities.gmod_subway_81-718.Buttons.Main.SB7KToggle = @[Common.718.SB7K] +Entities.gmod_subway_81-718.Buttons.Main.SB7Set = @[Common.718.SB7] +Entities.gmod_subway_81-718.Buttons.Main.SB8Set = @[Common.ARS.KVTR] +Entities.gmod_subway_81-718.Buttons.Main.SB10Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-718.Buttons.Main.SB9Set = @[Common.ARS.KVT] +Entities.gmod_subway_81-718.Buttons.Main.SB11Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-718.Buttons.Main.SA16Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-718.Buttons.Main.SB12Set = @[Common.718.SB12] +Entities.gmod_subway_81-718.Buttons.Main.SB13Set = @[Common.718.SB13] +Entities.gmod_subway_81-718.Buttons.Main.SB14Set = @[Common.ALL.RMK] +Entities.gmod_subway_81-718.Buttons.Main.SB15Set = @[Common.718.SB15] +Entities.gmod_subway_81-718.Buttons.Main.SB16Set = @[Common.718.SB16] + + +Entities.gmod_subway_81-718.Buttons.Battery.RCToggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-718.Buttons.Battery.VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-718.Buttons.Battery.VTPR- = @[Common.718.VTPR] @[Common.ALL.CCW] +Entities.gmod_subway_81-718.Buttons.Battery.VTPR+ = @[Common.718.VTPR] @[Common.ALL.CW] + + +Entities.gmod_subway_81-718.Buttons.KR.SBR14Set = @[Common.718.RX1] +Entities.gmod_subway_81-718.Buttons.KR.SBR16Set = @[Common.718.KAH2] +Entities.gmod_subway_81-718.Buttons.KR.SBR15Set = @[Common.718.RX2] + + +Entities.gmod_subway_81-718.Buttons.VPU.SAP8Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-718.Buttons.VPU.SAP13Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-718.Buttons.VPU.SAP36Toggle = @[Common.ALL.ES] +Entities.gmod_subway_81-718.Buttons.VPU.SAP12Toggle = @[Common.720.AppLights] +Entities.gmod_subway_81-718.Buttons.VPU.SAP11Toggle = @[Common.718.Heat] +Entities.gmod_subway_81-718.Buttons.VPU.SAP23Toggle = @[Common.ARS.VP] +Entities.gmod_subway_81-718.Buttons.VPU.SAP9Toggle = @[Common.720.Vent1] +Entities.gmod_subway_81-718.Buttons.VPU.SAP10Toggle = @[Common.720.Vent2] +Entities.gmod_subway_81-718.Buttons.VPU.SAP3Toggle = @[Common.ALL.UNCh] +Entities.gmod_subway_81-718.Buttons.VPU.SAP39Toggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-718.Buttons.VPU.SBP22Set = @[Common.718.SBP22] +Entities.gmod_subway_81-718.Buttons.VPU.SBP6Set = @[Common.718.KDPR] +Entities.gmod_subway_81-718.Buttons.VPU.SBP4Set = @[Common.718.KDLR] +Entities.gmod_subway_81-718.Buttons.VPU.SAP14Toggle = @[Common.ARS.Freq] @[Common.ARS.FreqU] +Entities.gmod_subway_81-718.Buttons.VPU.SAP26Toggle = @[Common.718.UOS] +Entities.gmod_subway_81-718.Buttons.VPU.SAP24Toggle = @[Common.ALL.VOVT] + +Entities.gmod_subway_81-718.Buttons.ARS.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-718.Buttons.ARS.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-718.Buttons.ARS.!SD = @[Common.ALL.LSD] +Entities.gmod_subway_81-718.Buttons.ARS.!KT = @[Common.ARS.KT] +Entities.gmod_subway_81-718.Buttons.ARS.!RS = @[Common.ARS.RS] +Entities.gmod_subway_81-718.Buttons.ARS.!SK = @[Common.ARS.LN] +Entities.gmod_subway_81-718.Buttons.ARS.!04 = @[Common.ARS.04] +Entities.gmod_subway_81-718.Buttons.ARS.!0 = @[Common.ARS.0] +Entities.gmod_subway_81-718.Buttons.ARS.!40 = @[Common.ARS.40] +Entities.gmod_subway_81-718.Buttons.ARS.!60 = @[Common.ARS.60] +Entities.gmod_subway_81-718.Buttons.ARS.!70 = @[Common.ARS.70] +Entities.gmod_subway_81-718.Buttons.ARS.!80 = @[Common.ARS.80] +Entities.gmod_subway_81-718.Buttons.ARS.!KES = @[Common.718.KES] +Entities.gmod_subway_81-718.Buttons.ARS.!ST = @[Common.ALL.BrT] +Entities.gmod_subway_81-718.Buttons.ARS.!CUV = @[Common.718.CUV] +Entities.gmod_subway_81-718.Buttons.ARS.!AVU = @[Common.ALL.LAVU] +Entities.gmod_subway_81-718.Buttons.ARS.!AIP = @[Common.718.AIP] +Entities.gmod_subway_81-718.Buttons.ARS.!RIP = @[Common.718.RIP] +Entities.gmod_subway_81-718.Buttons.ARS.!KVD = @[Common.ARS.VD] +Entities.gmod_subway_81-718.Buttons.ARS.!VS1 = @[Common.718.VS1] +Entities.gmod_subway_81-718.Buttons.ARS.!VS2 = @[Common.718.VS2] + +Entities.gmod_subway_81-718.Buttons.Right.SA1/1Toggle = @[Common.ALL.VF1] +Entities.gmod_subway_81-718.Buttons.Right.SA2/1Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-718.Buttons.Right.SA5/1Toggle = @[Common.718.SPULightStrength] +Entities.gmod_subway_81-718.Buttons.Right.SA4/1Toggle = @[Common.ALL.GaugeLights] + +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKDV = @[Common.718.MVSUKDV] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUBDV = @[Common.718.MVSUBDV] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUPB = @[Common.718.MVSUPB] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARS = @[Common.718.MVSUARS] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUAVT = @[Common.718.MVSUAVT] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVV = @[Common.718.MVSUKVV] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVN = @[Common.718.MVSUKVN] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVX3 = @[Common.718.MVSUKVX3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVX2 = @[Common.718.MVSUKVX2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVX1 = @[Common.718.MVSUKVX1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKV0 = @[Common.718.MVSUKV0] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVT1 = @[Common.718.MVSUKVT1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVT2 = @[Common.718.MVSUKVT2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVT3 = @[Common.718.MVSUKVT3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUPVU = @[Common.718.MVSUPVU] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSURPB = @[Common.718.MVSURPB] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX = @[Common.718.MVSUARSX] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST = @[Common.718.MVSUARST] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX3 = @[Common.718.MVSUARSX3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX2 = @[Common.718.MVSUARSX2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX1 = @[Common.718.MVSUARSX1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARS0 = @[Common.718.MVSUARS0] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST1 = @[Common.718.MVSUARST1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST2 = @[Common.718.MVSUARST2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST3 = @[Common.718.MVSUARST3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUROT = @[Common.718.MVSUROT] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUSOT = @[Common.718.MVSUSOT] + +Entities.gmod_subway_81-718.Buttons.BUP_MUVS2.MUVS20 = @[Common.718.MUVS20] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS2.MUVS2ZPT = @[Common.718.MUVS2ZPT] + +Entities.gmod_subway_81-718.Buttons.BUP_MP.MPMP = @[Common.718.MPMP] +Entities.gmod_subway_81-718.Buttons.BUP_MS.MSMS = @[Common.718.MSMS] + +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1VP = @[Common.718.MUVS1VP] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1NZ = @[Common.718.MUVS1NZ] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1X = @[Common.718.MUVS1X] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1T = @[Common.718.MUVS1T] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1U1 = @[Common.718.MUVS1U1] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1U2 = @[Common.718.MUVS1U2] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1BAV = @[Common.718.MUVS1BAV] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1BUP = @[Common.718.MUVS1BUP] + +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPVP = @[Common.718.MLUPVP] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPNZ = @[Common.718.MLUPNZ] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPBUP = @[Common.718.MLUPBUP] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPV0 = @[Common.718.MLUPV0] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPKU = @[Common.718.MLUPKU] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPBAV = @[Common.718.MLUPBAV] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPKR = @[Common.718.MLUPKR] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPARS = @[Common.718.MLUPARS] + +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSPROV = @[Common.718.MPSPROV] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSAVR = @[Common.718.MPSAVR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSTARS = @[Common.718.MPSTARS] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSX = @[Common.718.MPSX] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSNZ = @[Common.718.MPSNZ] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSNZR = @[Common.718.MPSNZR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSPROV0 = @[Common.718.MPSPROV0] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSSK = @[Common.718.MPSSK] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPST = @[Common.718.MPST] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSXR = @[Common.718.MPSXR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSU1 = @[Common.718.MPSU1] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSU2 = @[Common.718.MPSU2] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSVP = @[Common.718.MPSVP] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSVPR = @[Common.718.MPSVPR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSVZ = @[Common.718.MPSVZ] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSXM = @[Common.718.MPSXM] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSU1R = @[Common.718.MPSU1R] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1MZK = @[Common.718.MALP1MZK] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1FM = @[Common.718.MALP1FM] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1400 = @[Common.718.MALP1400] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP150 = @[Common.718.MALP150] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1DIF = @[Common.718.MALP1DIF] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1650 = @[Common.718.MALP1650] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP10 = @[Common.718.MALP10] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1ARS = @[Common.718.MALP1ARS] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1ITA = @[Common.718.MALP1ITA] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1TR = @[Common.718.MALP1TR] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1SN = @[Common.718.MALP1SN] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1VN = @[Common.718.MALP1VN] +Entities.gmod_subway_81-718.Buttons.BUV_MVD.MVDOTK = @[Common.718.MVDOTK] +Entities.gmod_subway_81-718.Buttons.BUV_MVD.MVDRP = @[Common.718.MVDRP] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2MSU = @[Common.718.MALP2MSU] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2800 = @[Common.718.MALP2800] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2975 = @[Common.718.MALP2975] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP250 = @[Common.718.MALP250] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2650 = @[Common.718.MALP2650] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP20 = @[Common.718.MALP20] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2BV = @[Common.718.MALP2BV] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2ITB = @[Common.718.MALP2ITB] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP1 = @[Common.718.MGRTP1] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP3 = @[Common.718.MGRTP3] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKHA = @[Common.718.MGRKHA] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKTA = @[Common.718.MGRKTA] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP2 = @[Common.718.MGRTP2] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP4 = @[Common.718.MGRTP4] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKHB = @[Common.718.MGRKHB] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKTB = @[Common.718.MGRKTB] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKRV = @[Common.718.MGRKRV] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRNV = @[Common.718.MGRNV] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRBV = @[Common.718.MGRBV] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRLK = @[Common.718.MGRLK] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKRN = @[Common.718.MGRKRN] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAKT = @[Common.718.MLUAKT] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAXH = @[Common.718.MLUAXH] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAVP = @[Common.718.MLUAVP] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUANZ = @[Common.718.MLUANZ] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUASS = @[Common.718.MLUASS] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAPV = @[Common.718.MLUAPV] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUALK = @[Common.718.MLUALK] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1V1 = @[Common.718.MUVK1V1] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1KT = @[Common.718.MUVK1KT] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1KH = @[Common.718.MUVK1KH] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1LK = @[Common.718.MUVK1LK] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1PV = @[Common.718.MUVK1PV] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1NZ = @[Common.718.MUVK1NZ] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1SN = @[Common.718.MUVK1SN] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIV33 = @[Common.718.MIV33] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIVV1 = @[Common.718.MIVV1] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIVSMA = @[Common.718.MIVSMA] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIVSMB = @[Common.718.MIVSMB] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2RTM = @[Common.718.MUVK2RTM] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2RKT = @[Common.718.MUVK2RKT] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2RP = @[Common.718.MUVK2RP] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2OTK = @[Common.718.MUVK2OTK] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK275 = @[Common.718.MUVK275] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2VP = @[Common.718.MUVK2VP] + +Entities.gmod_subway_81-718.Buttons.PVZ.SF4Toggle = @[Common.718.SF4] +Entities.gmod_subway_81-718.Buttons.PVZ.SF27Toggle = @[Common.718.SF27] +Entities.gmod_subway_81-718.Buttons.PVZ.SF46Toggle = @[Common.718.SF46] +Entities.gmod_subway_81-718.Buttons.PVZ.SF12Toggle = @[Common.718.SF12] +Entities.gmod_subway_81-718.Buttons.PVZ.SF13Toggle = @[Common.718.SF13] +Entities.gmod_subway_81-718.Buttons.PVZ.SF45Toggle = @[Common.718.SF45] +Entities.gmod_subway_81-718.Buttons.PVZ.SF16Toggle = @[Common.718.SF16] +Entities.gmod_subway_81-718.Buttons.PVZ.SF44Toggle = @[Common.718.SF44] +Entities.gmod_subway_81-718.Buttons.PVZ.SF43Toggle = @[Common.718.SF43] +Entities.gmod_subway_81-718.Buttons.PVZ.SF14Toggle = @[Common.718.SF14] +Entities.gmod_subway_81-718.Buttons.PVZ.SF15Toggle = @[Common.718.SF15] +Entities.gmod_subway_81-718.Buttons.PVZ.SF25Toggle = @[Common.718.SF25] +Entities.gmod_subway_81-718.Buttons.PVZ.SF72Toggle = @[Common.718.SF72] +Entities.gmod_subway_81-718.Buttons.PVZ.SF29Toggle = @[Common.718.SF29] +Entities.gmod_subway_81-718.Buttons.PVZ.SF26Toggle = @[Common.718.SF26] +Entities.gmod_subway_81-718.Buttons.PVZ.SF42Toggle = @[Common.718.SF42] +Entities.gmod_subway_81-718.Buttons.PVZ.SF18Toggle = @[Common.718.SF18] +Entities.gmod_subway_81-718.Buttons.PVZ.SF20Toggle = @[Common.718.SF20] +Entities.gmod_subway_81-718.Buttons.PVZ.SF17Toggle = @[Common.718.SF17] +Entities.gmod_subway_81-718.Buttons.PVZ.SF19Toggle = @[Common.718.SF19] +Entities.gmod_subway_81-718.Buttons.PVZ.SF21Toggle = @[Common.718.SF21] +Entities.gmod_subway_81-718.Buttons.PVZ.SF22Toggle = @[Common.718.SF22] +Entities.gmod_subway_81-718.Buttons.PVZ.SF34Toggle = @[Common.718.SF34] +Entities.gmod_subway_81-718.Buttons.PVZ.SF35Toggle = @[Common.718.SF35] +Entities.gmod_subway_81-718.Buttons.PVZ.SF23Toggle = @[Common.718.SF23] +Entities.gmod_subway_81-718.Buttons.PVZ.SF24Toggle = @[Common.718.SF24] + +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-718.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-718.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-718.Buttons.HelperPanel.SA6Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-718.Buttons.HelperPanel.SA24Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-718.Buttons.HelperPanel.SB20Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-718.Buttons.HelperPanel.SB21Set = @[Common.ALL.Program2] + +Entities.gmod_subway_81-718.Buttons.BZOS.SAB1Toggle = @[Common.BZOS.On] +Entities.gmod_subway_81-718.Buttons.BZOS.!VH1 = @[Common.BZOS.VH1] +Entities.gmod_subway_81-718.Buttons.BZOS.!VH2 = @[Common.BZOS.VH2] + +Entities.gmod_subway_81-718.Buttons.CabVent.PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-718.Buttons.CabVent.PVK+ = @[Common.CabVent.PVK+] + +Entities.gmod_subway_81-718.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-718.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-718.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-718.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-718.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-718.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-718.Buttons.OtsekDoor1.OtsekDoor1 = @[Common.ALL.OtsekDoor1] +Entities.gmod_subway_81-718.Buttons.OtsekDoor2.OtsekDoor2 = @[Common.ALL.OtsekDoor2] +Entities.gmod_subway_81-718.Buttons.DriverValveDisconnect.EPKToggle = @[Common.ALL.EPV] +Entities.gmod_subway_81-718.Buttons.DriverValveDisconnect.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-718.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle = @[Common.ALL.DriverValveDisconnect] + +Entities.gmod_subway_81-718.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-718.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-718.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] + +Entities.gmod_subway_81-718.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] + +Entities.gmod_subway_81-718.Buttons.HVMeters.!I13 = @[Common.ALL.EnginesCurrent1] +Entities.gmod_subway_81-718.Buttons.HVMeters.!I24 = @[Common.ALL.EnginesCurrent2] +Entities.gmod_subway_81-718.Buttons.HVMeters.!HVVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_81-718.Buttons.HVMeters.!BatteryCurrent = @[Common.ALL.BatteryCurrent] +Entities.gmod_subway_81-718.Buttons.PneumaticPanels.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-718.Buttons.PneumaticPanels.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-718.Buttons.Left.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSPROV = @[Common.718.MPSPROV] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSAVR = @[Common.718.MPSAVR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSTARS = @[Common.718.MPSTARS] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSX = @[Common.718.MPSX] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSNZ = @[Common.718.MPSNZ] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSNZR = @[Common.718.MPSNZR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSPROV0 = @[Common.718.MPSPROV0] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSSK = @[Common.718.MPSSK] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPST = @[Common.718.MPST] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSXR = @[Common.718.MPSXR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSU1 = @[Common.718.MPSU1] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSU2 = @[Common.718.MPSU2] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSVP = @[Common.718.MPSVP] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSVPR = @[Common.718.MPSVPR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSVZ = @[Common.718.MPSVZ] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSXM = @[Common.718.MPSXM] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSU1R = @[Common.718.MPSU1R] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1MZK = @[Common.718.MALP1MZK] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1FM = @[Common.718.MALP1FM] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1400 = @[Common.718.MALP1400] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP150 = @[Common.718.MALP150] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1DIF = @[Common.718.MALP1DIF] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1650 = @[Common.718.MALP1650] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP10 = @[Common.718.MALP10] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1ARS = @[Common.718.MALP1ARS] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1ITA = @[Common.718.MALP1ITA] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1TR = @[Common.718.MALP1TR] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1SN = @[Common.718.MALP1SN] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1VN = @[Common.718.MALP1VN] +Entities.gmod_subway_81-719.Buttons.BUV_MVD.MVDOTK = @[Common.718.MVDOTK] +Entities.gmod_subway_81-719.Buttons.BUV_MVD.MVDRP = @[Common.718.MVDRP] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2MSU = @[Common.718.MALP2MSU] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2800 = @[Common.718.MALP2800] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2975 = @[Common.718.MALP2975] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP250 = @[Common.718.MALP250] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2650 = @[Common.718.MALP2650] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP20 = @[Common.718.MALP20] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2BV = @[Common.718.MALP2BV] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2ITB = @[Common.718.MALP2ITB] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP1 = @[Common.718.MGRTP1] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP3 = @[Common.718.MGRTP3] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKHA = @[Common.718.MGRKHA] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKTA = @[Common.718.MGRKTA] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP2 = @[Common.718.MGRTP2] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP4 = @[Common.718.MGRTP4] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKHB = @[Common.718.MGRKHB] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKTB = @[Common.718.MGRKTB] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKRV = @[Common.718.MGRKRV] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRNV = @[Common.718.MGRNV] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRBV = @[Common.718.MGRBV] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRLK = @[Common.718.MGRLK] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKRN = @[Common.718.MGRKRN] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAKT = @[Common.718.MLUAKT] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAXH = @[Common.718.MLUAXH] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAVP = @[Common.718.MLUAVP] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUANZ = @[Common.718.MLUANZ] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUASS = @[Common.718.MLUASS] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAPV = @[Common.718.MLUAPV] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUALK = @[Common.718.MLUALK] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1V1 = @[Common.718.MUVK1V1] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1KT = @[Common.718.MUVK1KT] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1KH = @[Common.718.MUVK1KH] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1LK = @[Common.718.MUVK1LK] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1PV = @[Common.718.MUVK1PV] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1NZ = @[Common.718.MUVK1NZ] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1SN = @[Common.718.MUVK1SN] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIV33 = @[Common.718.MIV33] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIVV1 = @[Common.718.MIVV1] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIVSMA = @[Common.718.MIVSMA] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIVSMB = @[Common.718.MIVSMB] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2RTM = @[Common.718.MUVK2RTM] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2RKT = @[Common.718.MUVK2RKT] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2RP = @[Common.718.MUVK2RP] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2OTK = @[Common.718.MUVK2OTK] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK275 = @[Common.718.MUVK275] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2VP = @[Common.718.MUVK2VP] +Entities.gmod_subway_81-719.Buttons.PVZ.SF4Toggle = @[Common.718.SF4] +Entities.gmod_subway_81-719.Buttons.PVZ.SF27Toggle = @[Common.718.SF27] +Entities.gmod_subway_81-719.Buttons.PVZ.SF46Toggle = @[Common.718.SF46] +Entities.gmod_subway_81-719.Buttons.PVZ.SF12Toggle = @[Common.718.SF12] +Entities.gmod_subway_81-719.Buttons.PVZ.SF13Toggle = @[Common.718.SF13] +Entities.gmod_subway_81-719.Buttons.PVZ.SF45Toggle = @[Common.718.SF45] +Entities.gmod_subway_81-719.Buttons.PVZ.SF16Toggle = @[Common.718.SF16] +Entities.gmod_subway_81-719.Buttons.PVZ.SF44Toggle = @[Common.718.SF44] +Entities.gmod_subway_81-719.Buttons.PVZ.SF43Toggle = @[Common.718.SF43] +Entities.gmod_subway_81-719.Buttons.PVZ.SF14Toggle = @[Common.718.SF14] +Entities.gmod_subway_81-719.Buttons.PVZ.SF15Toggle = @[Common.718.SF15] +Entities.gmod_subway_81-719.Buttons.PVZ.SF25Toggle = @[Common.718.SF25] +Entities.gmod_subway_81-719.Buttons.PVZ.SF72Toggle = @[Common.718.SF72] +Entities.gmod_subway_81-719.Buttons.PVZ.SF56Toggle = @[Common.718.SF56] +Entities.gmod_subway_81-719.Buttons.PVZ.SF29Toggle = @[Common.718.SF29] +Entities.gmod_subway_81-719.Buttons.PVZ.SF26Toggle = @[Common.718.SF26] +Entities.gmod_subway_81-719.Buttons.PVZ.SF42Toggle = @[Common.718.SF42] +Entities.gmod_subway_81-719.Buttons.PVZ.SF18Toggle = @[Common.718.SF18] +Entities.gmod_subway_81-719.Buttons.PVZ.SF20Toggle = @[Common.718.SF20] +Entities.gmod_subway_81-719.Buttons.PVZ.SF17Toggle = @[Common.718.SF17] +Entities.gmod_subway_81-719.Buttons.PVZ.SF19Toggle = @[Common.718.SF19] +Entities.gmod_subway_81-719.Buttons.PVZ.SF21Toggle = @[Common.718.SF21] +Entities.gmod_subway_81-719.Buttons.PVZ.SF22Toggle = @[Common.718.SF22] +Entities.gmod_subway_81-719.Buttons.PVZ.SF34Toggle = @[Common.718.SF34] +Entities.gmod_subway_81-719.Buttons.PVZ.SF35Toggle = @[Common.718.SF35] +Entities.gmod_subway_81-719.Buttons.PVZ.SF23Toggle = @[Common.718.SF23] +Entities.gmod_subway_81-719.Buttons.PVZ.SF24Toggle = @[Common.718.SF24] + +Entities.gmod_subway_81-719.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.RearPneumatic.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-719.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-719.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-719.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-719.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-719.Buttons.couch_cap_o.CouchCap = @[Common.ALL.CouchCap] +Entities.gmod_subway_81-719.Buttons.couch_cap.CouchCap = @[Common.ALL.CouchCap] + +Entities.gmod_subway_81-719.Buttons.Battery.VBToggle = @[Common.ALL.VB] + +Entities.gmod_subway_81-719.Buttons.Voltages.!BatteryVoltage = @[Common.ALL.BatteryVoltage] #NEW +Entities.gmod_subway_81-719.Buttons.Voltages.!BatteryCurrent = @[Common.ALL.BatteryCurrent] #NEW +Entities.gmod_subway_81-719.Buttons.Pressures.!BCPressure = @[Common.ALL.BLTLPressure] #NEW +Entities.gmod_subway_81-719.Buttons.Pressures.!BLTLPressure = @[Common.ALL.BCPressure] #NEW +#Spawner: +Entities.gmod_subway_81-718.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-718.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-718.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-718.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-718.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-718.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-718.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-718.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-718.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-718.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] diff --git a/lua/metrostroi_data/languages/cz_720.lua b/lua/metrostroi_data/languages/cz_720.lua new file mode 100644 index 0000000..893cbc4 --- /dev/null +++ b/lua/metrostroi_data/languages/cz_720.lua @@ -0,0 +1,428 @@ +return [[ +#81-720 + +[cz] + +#######Buttons########### +#Cameras +Train.720.CameraCond = Klimatizace, IGLA +Train.720.CameraPPZ = PPZ +Train.720.CameraPV = VPU +Train.720.CameraVityaz = SAU "Vityaz" +Train.720.CameraKRMH = Ventily KRMSH a UAVA +Train.720.CameraPVZ = PVZ + +Train.Buttons.Heating = Heating #NEW +Train.Buttons.Vent = Ventilation #NEW +Train.Buttons.Cooling = Cooling #NEW +Train.Buttons.BARS1 = BARS1 #NEW +Train.Buttons.BARS2 = BARS2 #NEW +Train.Buttons.BARS12 = BARS1 and BARS2 #NEW + +#Common +Common.720.SF1 = SF1: Hlavní napájení +Common.720.SF2 = SF2: Hlavní řízení +Common.720.SF3 = SF3: Nouzové řízení +Common.720.SF4 = SF4: BARS +Common.720.SF5 = SF5: BUP (Jednotka řízení vlaku) +Common.720.SF6 = SF6: BKCU (Jednotka pÅ™epínání obvodů řízení) +Common.720.SF7 = SF7: PPO (ASOTP) +Common.720.SF8 = SF8: Vlakový rozhlas +Common.720.SF9 = SF9: Radiostanice +Common.720.SF10 = SF10: Orientace vozu +Common.720.SF11 = SF11: SmÄ›r jízdy +Common.720.SF12 = SF12: SvÄ›tla 1. skupiny +Common.720.SF13 = SF13: SvÄ›tla 2. skupiny +Common.720.SF14 = SF14: ÄŒervená svÄ›tla +Common.720.SF15 = SF15: @[Common.703.VU3] +Common.720.SF16 = SF16: @[Common.703.VU1] +Common.720.SF17 = SF17: Klimatizace kabiny +Common.720.SF18 = SF18: Mazání okolků +Common.720.SF19 = SF19: Napájení brzdiÄe +Common.720.SF20 = SF20: Nouzové napájení brzdiÄe +Common.720.SF21 = SF21: Otevírání dveří +Common.720.SF22 = SF22: Zavírání dveří + +Common.720.SFV1 = SF1: Napájení obvodů řízení vozu +Common.720.SFV2 = SF2: Napájení řídící jednotky vozu +Common.720.SFV3 = SF3: Napájení řídící jednotky trakÄních motorů +Common.720.SFV4 = SF4: Ovládání řídící jednotky trakÄních motorů +Common.720.SFV5 = SF5: Nouzové ovládání řídící jednotky trakÄních motorů +Common.720.SFV6 = SF6: Napájení BUTP +Common.720.SFV7 = SF7: Jednotka dodávky el. energie +Common.720.SFV8 = SF8: Ovládání BV +Common.720.SFV9 = SF9: Napájení BV +Common.720.SFV10 = SF10: PPO (ASOTP PCBK) +Common.720.SFV11 = SF11: Kompresor +Common.720.SFV12 = SF12: Zavírání dveří +Common.720.SFV13 = SF13: Otevírání levých dveří +Common.720.SFV14 = SF14: Otevírání pravých dveří +Common.720.SFV15 = SF15: Zadní dveÅ™e +Common.720.SFV16 = SF16: Vlakový rozhlas +Common.720.SFV17 = SF17: Nouzové spojení +Common.720.SFV18 = SF18: @[Common.ALL.Unsused1] +Common.720.SFV19 = SF19: Napájení osvÄ›tlení interiéru +Common.720.SFV20 = SF20: OsvÄ›tlení nouze +Common.720.SFV21 = SF21: Senzor rychlosti +Common.720.SFV22 = SF22: Parkovací brzda +Common.720.SFV23 = SF23: Ovládání ventilace 1. skupiny +Common.720.SFV24 = SF24: Ovládání ventilace 2. skupiny +Common.720.SFV25 = SF25: Napájení ventilace 1. skupiny +Common.720.SFV26 = SF26: Napájení ventilace 2. skupiny +Common.720.SFV27 = SF27: Napájení budiÄe +Common.720.SFV28 = SF28: Napájení kondenzátoru +Common.720.SFV29 = SF29: SbÄ›raÄe proudu +Common.720.SFV30 = SF30: SmÄ›rové tabule +Common.720.SFV31 = SF31: @[Common.ALL.Unsused1] +Common.720.SFV32 = SF32: @[Common.ALL.Unsused1] +Common.720.SFV33 = SF33: @[Common.ALL.Unsused1] + +Common.720.VentCMode = Režim ventilace +Common.720.VentHMode+ = Zvýšit výkon topení +Common.720.VentHMode- = Snížit výkon topení +Common.720.VentSMode- = Zvýšit chod ventilace +Common.720.VentSMode+ = Snížit chod ventilace + +Common.720.Pant1 = Odpojení sbÄ›raÄů proudu 1. skupiny +Common.720.Pant2 = Odpojení sbÄ›raÄů proudu 2. skupiny +Common.720.Vent1 = Ventilace 1. skupiny +Common.720.Vent2 = Ventilace 2. skupiny +Common.720.TorecDoors = Zadní dveÅ™e +Common.720.BBER = Nouzové zapnutí BBE +Common.720.BBE = Zapnutí BBE +Common.720.CabLightStrength = Jas osvÄ›tlení kabiny +Common.720.AppLights = OsvÄ›tlení vybavení vozu +Common.720.BARSBlock = Blokování nefunkÄních jednotek BARS + +Common.720.Accel = Akcelerace +Common.720.Forward = Jízda vpÅ™ed +Common.720.Backward = Jízda vzad +Common.720.Stand = Zastavení +Common.720.Ticker = Tachograf +Common.720.KAH = KAH: TlaÄítko jízdy nouze BARS +Common.720.KAHK = @[Common.ALL.KAHK] +Common.720.ALS = ALS: PÅ™echod na režim ALS (vypnutí ARS) +Common.720.ALSK = Krytka ALS +Common.720.FDepot = Odjezd z depa +Common.720.HVoltage = Nedostatek napÄ›tí v přívodní kolejnici +Common.720.PassScheme = Schémata nad dveÅ™mi +Common.720.EmergencyCompressor = Kompresor nouze +Common.720.EnableBV = Zapnutí BV +Common.720.DisableBV = Vypnutí BV +Common.720.Ring = PÅ™edání řízení (zvonek) +Common.720.R_Announcer = Vlakový rozhlas v interiéru +Common.720.R_Line = Zapnutí mikrofónu strojvedoucího +Common.720.R_Emer = Nouzové spojení +Common.720.R_Program1 = Start hlášení (Program 1) +Common.720.EnableBVEmer = Nouzové zapnutí BV +Common.720.EmergencyControls = Vypnout nouzové zapnutí BV +Common.720.Wiper = StÄ›raÄ + +Common.720.AccelRate = Zapnout režim "Stoupání" +Common.720.EBrakeAdd = Zvýšit úÄinek rezervní brzdy +Common.720.EBrakeRelease = Snížit úÄinek rezervní brzdy +Common.720.EBrakeToggle = Zapnout rezervní brzdu +Common.720.EmergencyBrake = Záchranná brzda +Common.720.DoorClose = ZavÅ™ení dveří +Common.720.AttentionMessage = Potvrzovací tlaÄítko ARS + + +Common.720.DoorSelectL = Zvolit levé dveÅ™e +Common.720.DoorSelectR = Zvolit pravé dveÅ™e +Common.720.DoorBlock = Jízda bez ovládání dveří +Common.720.KDL = Otevřít levé dveÅ™e +Common.720.KDP = Otevřít pravé dveÅ™e + +Common.Vityaz.F1 = Vityaz: F1 +Common.Vityaz.F2 = Vityaz: Následující strana +Common.Vityaz.F3 = Vityaz: PÅ™edeÅ¡lá strana +Common.Vityaz.F4 = Vityaz: Hlavní strana +Common.Vityaz.1 = Vityaz: 1 +Common.Vityaz.4 = Vityaz: 4 +Common.Vityaz.7 = Vityaz: 7 +Common.Vityaz.2 = Vityaz: 2 +Common.Vityaz.5 = Vityaz: 5 +Common.Vityaz.8 = Vityaz: 8 +Common.Vityaz.0 = Vityaz: 0 +Common.Vityaz.3 = Vityaz: 3 +Common.Vityaz.6 = Vityaz: 6 +Common.Vityaz.9 = Vityaz: 9 +Common.Vityaz.F5 = Vityaz: Smazat +Common.Vityaz.F6 = Vityaz: Nahoru\Rychlost +Common.Vityaz.F7 = Vityaz: Dolů\Tok proudů +Common.Vityaz.F8 = Vityaz: Zadat\Vybavení vozu +Common.Vityaz.F9 = Vityaz: Zvolit\Správa vybavení vozu + +Common.720.EmerX1 = Jízda nouze (režim chodu J1) +Common.720.EmerX2 = Jízda nouze (režim chodu J2) +Common.720.EmerCloseDoors = DveÅ™e nouze +Common.720.EmergencyDoors = Zapnout nouzové ovládání dveří +Common.720.BRU = OdpojovaÄ BRU (vysokého napÄ›tí) + +#gmod_subway_81-720 +#Buttons: + +Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode- = @[Common.720.VentCMode] @[Common.ALL.CCW] +Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode+ = @[Common.720.VentCMode] @[Common.ALL.CW] +Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode+ = @[Common.720.VentHMode+] +Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode- = @[Common.720.VentHMode-] +Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode- = @[Common.720.VentSMode-] +Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode+ = @[Common.720.VentSMode+] + +Entities.gmod_subway_81-720.Buttons.RV.EmerX1Set = @[Common.720.EmerX1] +Entities.gmod_subway_81-720.Buttons.RV.EmerX2Set = @[Common.720.EmerX2] +Entities.gmod_subway_81-720.Buttons.RV.EmerCloseDoorsSet = @[Common.720.EmerCloseDoors] +Entities.gmod_subway_81-720.Buttons.RV.EmergencyDoorsToggle = @[Common.720.EmergencyDoors] + +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF1Set = @[Common.Vityaz.F1] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF2Set = @[Common.Vityaz.F2] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF3Set = @[Common.Vityaz.F3] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF4Set = @[Common.Vityaz.F4] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz1Set = @[Common.Vityaz.1] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz4Set = @[Common.Vityaz.4] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz7Set = @[Common.Vityaz.7] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz2Set = @[Common.Vityaz.2] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz5Set = @[Common.Vityaz.5] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz8Set = @[Common.Vityaz.8] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz0Set = @[Common.Vityaz.0] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz3Set = @[Common.Vityaz.3] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz6Set = @[Common.Vityaz.6] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz9Set = @[Common.Vityaz.9] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF5Set = @[Common.Vityaz.F5] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF6Set = @[Common.Vityaz.F6] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF7Set = @[Common.Vityaz.F7] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF8Set = @[Common.Vityaz.F8] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF9Set = @[Common.Vityaz.F9] + +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF1Toggle = @[Common.720.SF1] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF2Toggle = @[Common.720.SF2] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF3Toggle = @[Common.720.SF3] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF4Toggle = @[Common.720.SF4] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF5Toggle = @[Common.720.SF5] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF6Toggle = @[Common.720.SF6] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF7Toggle = @[Common.720.SF7] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF8Toggle = @[Common.720.SF8] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF9Toggle = @[Common.720.SF9] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF10Toggle = @[Common.720.SF10] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF11Toggle = @[Common.720.SF11] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF12Toggle = @[Common.720.SF12] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF13Toggle = @[Common.720.SF13] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF14Toggle = @[Common.720.SF14] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF15Toggle = @[Common.720.SF15] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF16Toggle = @[Common.720.SF16] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF17Toggle = @[Common.720.SF17] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF18Toggle = @[Common.720.SF18] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF19Toggle = @[Common.720.SF19] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF20Toggle = @[Common.720.SF20] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF21Toggle = @[Common.720.SF21] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF22Toggle = @[Common.720.SF22] + +Entities.gmod_subway_81-720.Buttons.BackDown.Pant1Toggle = @[Common.720.Pant1] +Entities.gmod_subway_81-720.Buttons.BackDown.Pant2Toggle = @[Common.720.Pant2] +Entities.gmod_subway_81-720.Buttons.BackDown.Vent1Toggle = @[Common.720.Vent1] +Entities.gmod_subway_81-720.Buttons.BackDown.Vent2Toggle = @[Common.720.Vent2] +Entities.gmod_subway_81-720.Buttons.BackDown.PassLightToggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-720.Buttons.BackDown.CabLightToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-720.Buttons.BackDown.Headlights1Toggle = @[Common.ALL.VF1] +Entities.gmod_subway_81-720.Buttons.BackDown.Headlights2Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-720.Buttons.BackDown.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-720.Buttons.BackDown.TorecDoorsToggle = @[Common.720.TorecDoors] +Entities.gmod_subway_81-720.Buttons.BackDown.BBERToggle = @[Common.720.BBER] +Entities.gmod_subway_81-720.Buttons.BackDown.BBEToggle = @[Common.720.BBE] +Entities.gmod_subway_81-720.Buttons.BackDown.CompressorToggle = @[Common.ALL.MK] +Entities.gmod_subway_81-720.Buttons.BackDown.CabLightStrengthToggle = @[Common.720.CabLightStrength] +Entities.gmod_subway_81-720.Buttons.BackDown.AppLights1Toggle = @[Common.720.AppLights] +Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock- = @[Common.720.BARSBlock] @[Common.ALL.CCW] +Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock+ = @[Common.720.BARSBlock] @[Common.ALL.CW] +Entities.gmod_subway_81-720.Buttons.BackDown.BatteryToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-720.Buttons.BackDown.ALSFreqToggle = @[Common.ARS.Freq] + +Entities.gmod_subway_81-720.Buttons.PUU.!DoorsClosed = @[Common.ALL.LSD] +Entities.gmod_subway_81-720.Buttons.PUU.StandToggle = @[Common.720.Stand] @[Common.ALL.Unsused2] +Entities.gmod_subway_81-720.Buttons.PUU.TickerToggle = @[Common.720.Ticker] +Entities.gmod_subway_81-720.Buttons.PUU.KAHToggle = @[Common.720.KAH] +Entities.gmod_subway_81-720.Buttons.PUU.KAHkToggle = @[Common.720.KAHK] +Entities.gmod_subway_81-720.Buttons.PUU.ALSToggle = @[Common.720.ALS] +Entities.gmod_subway_81-720.Buttons.PUU.ALSkToggle = @[Common.720.ALSK] +Entities.gmod_subway_81-720.Buttons.PUU.FDepotToggle = @[Common.720.FDepot] @[Common.ALL.Unsused2] +Entities.gmod_subway_81-720.Buttons.PUU.!HVoltage = @[Common.720.HVoltage] +Entities.gmod_subway_81-720.Buttons.PUU.PassSchemeToggle = @[Common.720.PassScheme] +Entities.gmod_subway_81-720.Buttons.PUU.EmergencyCompressorSet = @[Common.720.EmergencyCompressor] +Entities.gmod_subway_81-720.Buttons.PUU.EnableBVSet = @[Common.720.EnableBV] +Entities.gmod_subway_81-720.Buttons.PUU.DisableBVSet = @[Common.720.DisableBV] +Entities.gmod_subway_81-720.Buttons.PUU.RingSet = @[Common.720.Ring] +Entities.gmod_subway_81-720.Buttons.PUU.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-720.Buttons.PUU.R_AnnouncerToggle = @[Common.720.R_Announcer] +Entities.gmod_subway_81-720.Buttons.PUU.R_LineToggle = @[Common.720.R_Line] +Entities.gmod_subway_81-720.Buttons.PUU.R_EmerSet = @[Common.720.R_Emer] +Entities.gmod_subway_81-720.Buttons.PUU.R_Program1Set = @[Common.720.R_Program1] +Entities.gmod_subway_81-720.Buttons.PUU.EnableBVEmerSet = @[Common.720.EnableBVEmer] +Entities.gmod_subway_81-720.Buttons.PUU.EmergencyControlsToggle = @[Common.720.EmergencyControls] +Entities.gmod_subway_81-720.Buttons.PUU.WiperToggle = @[Common.720.Wiper] +Entities.gmod_subway_81-720.Buttons.PUU.!VDop = @[Common.ALL.SpeedAccept] +Entities.gmod_subway_81-720.Buttons.PUU.!VFact = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-720.Buttons.PUU.!VPred = @[Common.ALL.SpeedAttent] +Entities.gmod_subway_81-720.Buttons.PUU.!VDop2 = @[Common.ALL.SpeedAccept] +Entities.gmod_subway_81-720.Buttons.PUU.!Acc = @[Common.720.Accel] +Entities.gmod_subway_81-720.Buttons.PUU.!Forw = @[Common.720.Forward] +Entities.gmod_subway_81-720.Buttons.PUU.!Back = @[Common.720.Backward] + +Entities.gmod_subway_81-720.Buttons.PUR.AccelRateSet = @[Common.720.AccelRate] +Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeAddSet = @[Common.720.EBrakeAdd] +Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeReleaseSet = @[Common.720.EBrakeRelease] +Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeToggle = @[Common.720.EBrakeToggle] +Entities.gmod_subway_81-720.Buttons.PUR.EmergencyBrakeToggle = @[Common.720.EmergencyBrake] +Entities.gmod_subway_81-720.Buttons.PUR.DoorCloseToggle = @[Common.720.DoorClose] +Entities.gmod_subway_81-720.Buttons.PUR.AttentionMessageSet = @[Common.720.AttentionMessage] +Entities.gmod_subway_81-720.Buttons.PUR.AttentionSet = @[Common.ARS.KB] +Entities.gmod_subway_81-720.Buttons.PUR.AttentionBrakeSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-720.Buttons.PUR.HornBSet = @[Common.ALL.Horn] +Entities.gmod_subway_81-720.Buttons.PUR.DoorRightSet = @[Common.720.KDP] +Entities.gmod_subway_81-720.Buttons.PUR.!DoorRightLamp = @[Common.ALL.KDPL] + +Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectLToggle = @[Common.720.DoorSelectL] +Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectRToggle = @[Common.720.DoorSelectR] +Entities.gmod_subway_81-720.Buttons.PUL.DoorBlockToggle = @[Common.720.DoorBlock] +Entities.gmod_subway_81-720.Buttons.PUL.!DoorLeftLamp = @[Common.ALL.KDLL] +Entities.gmod_subway_81-720.Buttons.PUL.DoorLeftSet = @[Common.720.KDL] + +Entities.gmod_subway_81-720.Buttons.PVZ.SFV1Toggle = @[Common.720.SFV1] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV2Toggle = @[Common.720.SFV2] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV3Toggle = @[Common.720.SFV3] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV4Toggle = @[Common.720.SFV4] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV5Toggle = @[Common.720.SFV5] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV6Toggle = @[Common.720.SFV6] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV7Toggle = @[Common.720.SFV7] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV8Toggle = @[Common.720.SFV8] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV9Toggle = @[Common.720.SFV9] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV10Toggle = @[Common.720.SFV10] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV11Toggle = @[Common.720.SFV11] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV12Toggle = @[Common.720.SFV12] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV13Toggle = @[Common.720.SFV13] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV14Toggle = @[Common.720.SFV14] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV15Toggle = @[Common.720.SFV15] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV16Toggle = @[Common.720.SFV16] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV17Toggle = @[Common.720.SFV17] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV18Toggle = @[Common.720.SFV18] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV19Toggle = @[Common.720.SFV19] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV20Toggle = @[Common.720.SFV20] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV21Toggle = @[Common.720.SFV21] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV22Toggle = @[Common.720.SFV22] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV23Toggle = @[Common.720.SFV23] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV24Toggle = @[Common.720.SFV24] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV25Toggle = @[Common.720.SFV25] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV26Toggle = @[Common.720.SFV26] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV27Toggle = @[Common.720.SFV27] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV28Toggle = @[Common.720.SFV28] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV29Toggle = @[Common.720.SFV29] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV30Toggle = @[Common.720.SFV30] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV31Toggle = @[Common.720.SFV31] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV32Toggle = @[Common.720.SFV32] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV33Toggle = @[Common.720.SFV33] + +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] + +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] + +Entities.gmod_subway_81-720.Buttons.BTO.K29Toggle = @[Common.ALL.KRMH] +Entities.gmod_subway_81-720.Buttons.BTO.UAVAToggle = @[Common.ALL.UAVA2] + +Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +Entities.gmod_subway_81-720.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-720.Buttons.RearDoor1.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-720.Buttons.CabinDoorR.CabinDoorRight = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-720.Buttons.CabinDoorL.CabinDoorLeft = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-720.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-720.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] + +Entities.gmod_subway_81-720.Buttons.VoltHelper2.!HV = @[Common.ALL.HighVoltage] +Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I1_3 = @[Common.ALL.EnginesCurrent1] +Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I2_4 = @[Common.ALL.EnginesCurrent2] +Entities.gmod_subway_81-720.Buttons.PneumoHelper2.!BrakeTrainLine = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-720.Buttons.PneumoHelper1.!BrakeCylinder = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-720.Buttons.VoltHelper1.!Battery = @[Common.ALL.BatteryVoltage] +Entities.gmod_subway_81-720.Buttons.GV.GVToggle = @[Common.720.BRU] + +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-720.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-720.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +#gmod_subway_81-721 +Entities.gmod_subway_81-721.Buttons.Battery.BatteryToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-721.Buttons.GV.GVToggle = @[Common.720.BRU] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV1Toggle = @[Common.720.SFV1] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV2Toggle = @[Common.720.SFV2] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV3Toggle = @[Common.720.SFV3] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV4Toggle = @[Common.720.SFV4] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV5Toggle = @[Common.720.SFV5] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV6Toggle = @[Common.720.SFV6] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV7Toggle = @[Common.720.SFV7] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV8Toggle = @[Common.720.SFV8] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV9Toggle = @[Common.720.SFV9] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV10Toggle = @[Common.720.SFV10] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV11Toggle = @[Common.720.SFV11] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV12Toggle = @[Common.720.SFV12] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV13Toggle = @[Common.720.SFV13] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV14Toggle = @[Common.720.SFV14] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV15Toggle = @[Common.720.SFV15] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV16Toggle = @[Common.720.SFV16] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV17Toggle = @[Common.720.SFV17] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV18Toggle = @[Common.720.SFV18] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV19Toggle = @[Common.720.SFV19] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV20Toggle = @[Common.720.SFV20] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV21Toggle = @[Common.720.SFV21] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV22Toggle = @[Common.720.SFV22] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV23Toggle = @[Common.720.SFV23] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV24Toggle = @[Common.720.SFV24] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV25Toggle = @[Common.720.SFV25] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV26Toggle = @[Common.720.SFV26] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV27Toggle = @[Common.720.SFV27] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV28Toggle = @[Common.720.SFV28] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV29Toggle = @[Common.720.SFV29] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV30Toggle = @[Common.720.SFV30] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV31Toggle = @[Common.720.SFV31] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV32Toggle = @[Common.720.SFV32] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV33Toggle = @[Common.720.SFV33] + +Entities.gmod_subway_81-721.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-721.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +#Spawner: + +Entities.gmod_subway_81-720.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-720.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-720.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-720.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-720.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-720.Spawner.PassSchemesInvert.Name = @[Common.Spawner.SchemeInvert] +Entities.gmod_subway_81-720.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-720.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-720.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-720.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-720.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] diff --git a/lua/metrostroi_data/languages/cz_722.lua b/lua/metrostroi_data/languages/cz_722.lua new file mode 100644 index 0000000..5c47ab3 --- /dev/null +++ b/lua/metrostroi_data/languages/cz_722.lua @@ -0,0 +1,374 @@ +return [[ +#81-722 + +[cz] + +#Cameras: +Train.722.Breakers = JistiÄe +Train.722.PU2_1 = Panel tlaÄítek +Train.722.PU2_2 = Pomocný panel +Train.722.Vityaz = Monitor systému RAV "VITYAZ-SP" +Train.722.SARMAT = Monitor systému CIS +Train.722.CabLights = Panel osvÄ›tlení kabiny +Train.722.Disconnects = Ventily hlavního a brzdového potrubí +Train.722.KRMH = Ventily KRMSH a RVTB + +Train.Buttons.BattOn = Battery enabled #NEW +Train.Buttons.BattOff = Battery disabling #NEW +Train.Buttons.VentEmer = Emergency #NEW +Train.Buttons.VentAuto = Auto #New +Train.Buttons.Vent1/2 = Half of ventilation #NEW +Train.Buttons.VentAll = All ventilation fans #NEW + +Train.Buttons.VRUAH = Emergency control #NEW +Train.Buttons.VRUOn = Manual activation #NEW +Train.Buttons.PantSC = Enable shorting device #NEW +Train.Buttons.DoorCloseA = Auto closing (with buzzer) #NEW +Train.Buttons.DoorCloseM = Manual closing (without buzzer) #NEW +Train.Buttons.AHActive = Emergency control active #NEW + +#######Buttons########### +Common.722.MirrorHeating = Vyhřívání zrcátek +Common.722.EmergencyDrive = Jízda nouze +Common.722.Microphone = Zapnout mikrofón +Common.722.LRS = Kontrolka nouzového napájení radiostanice bateriemi +Common.722.LAVS = Kontrolka nízkého tlaku vzduchu v brzdovém potrubí +Common.722.LRU = Kontrolka: Ovládání relé je vypnuto +Common.722.GlassWasher = OstÅ™ikovaÄ +Common.722.GlassCleaner = StÄ›raÄ +Common.722.EmergencyBrakeTPlus = Brzda nouze (režim T+) +Common.722.EmergencyBrakeTPlusK = Krytka tlaÄítka „Brzda nouze“ +Common.722.KRO = SmÄ›r jízdy + +Common.722.PSNToggle = Zapnutí nápájení baterie z vnÄ›jšího zdroje +Common.722.BattOn = Zapnutí dodávky el. energie +Common.722.BattOff = Vypnutí dodávky el. energie +Common.722.TorecDoorUnlock = Odblokovat zadní dveÅ™e +Common.722.SCEnabled = Zkratovací zařízení zapnuto +Common.722.LSOSD = Indikátor otevÅ™ení dveří ve stanici + +Common.722.PassVent = Ventilace interiéru +Common.722.VRU = PÅ™epínaÄ režimů jízdy +Common.722.VADToggle = Jízda bez kontroly zavÅ™ení dveří +Common.722.VAHToggle = Jízda nouze (bez pedálu bdÄ›losti) +Common.722.EmergencyRadioPowerToggle = Nouzové napájení radiostanice +Common.722.BARSMode = PÅ™epínaÄ režimů BARS +Common.722.PantSC = SbÄ›raÄe proudu a zkratovací zařízení + +Common.SARMAT.Up = SARMAT: Nahoru +Common.SARMAT.Down = SARMAT: Dolů +Common.SARMAT.Enter = SARMAT: Zadat +Common.SARMAT.Esc = SARMAT: Esc +Common.SARMAT.F1 = SARMAT: F1 +Common.SARMAT.F2 = SARMAT: F2 +Common.SARMAT.F3 = SARMAT: F3 +Common.SARMAT.F4 = SARMAT: F4 +Common.SARMAT.Path = SARMAT: Kolej +Common.SARMAT.Line = SARMAT: Linka +Common.SARMAT.Zero = SARMAT: Obnovit +Common.SARMAT.Start = SARMAT: Start + +#Autobreakers +Common.722.SF1 = SF1: Napájení (ovládání) +Common.722.SF2 = SF2: Aktivní kabina +Common.722.SF3 = SF3: VypínaÄ Å™Ã­zení +Common.722.SF4 = SF4: Nouzové řízení +Common.722.SF5 = SF5: Ovládání RVTB +Common.722.SF6 = SF6: Napájení brzdiÄe +Common.722.SF7 = SF7: Ovládání dveří +Common.722.SF8 = SF8: BARS 1 (blok ARS) +Common.722.SF9 = SF9: BARS 2 (blok ARS) +Common.722.UPO = SF: UPO1 +Common.722.SF10 = SF10: BRPI-M1 +Common.722.SF11 = SF11: BRPI-M2 +Common.722.SF12 = SF12: Protipožární ochrana +Common.722.SF13 = SF13: @[Common.722.PantSC] +Common.722.SF14 = SF14: Rádiové spojení 1 +Common.722.SF15 = SF15: Rádiové spojení 2 +Common.722.SF16 = SF16: CIS 1 (monitor) +Common.722.SF17 = SF17: CIS 2 (centrální informaÄní systém) +Common.722.SF18 = SF18: CIS 3 +Common.722.SF19 = SF19: BUKP, UPI +Common.722.SF20 = SF20: Monitor +Common.722.SF21 = SF21: Orientace +Common.722.SF22 = SF22: ÄŒervená svÄ›tla (napájení bateriemi) +Common.722.SF23 = SF23: SvÄ›tla, Äervená svÄ›tla +Common.722.SF24 = SF24: Indikátor otevÅ™ení dveří ve stanici (SOSD) +Common.722.SF25 = SF25: OsvÄ›tlení kabiny +Common.722.SF26 = SF26: Klimatizace kabiny +Common.722.SF27 = SF27: StÄ›raÄ, ostÅ™ikovaÄ, houkaÄka + +Common.722.SF31 = SF31: Vlakové obvody +Common.722.SF32 = SF32: Elektrické obvody (ovládání) +Common.722.SF33 = SF33: Napájení obvodů řízení +Common.722.SF34 = SF34: CIS (levá strana) +Common.722.SF35 = SF35: CIS (pravá strana) +Common.722.SF36 = SF36: BoÄní signalizace (LED diody) +Common.722.SF37 = SF37: Odpojení sbÄ›raÄů proudu +Common.722.SF38 = SF38: Rezerva +Common.722.SF41 = SF41: Otevírání levých dveří +Common.722.SF42 = SF42: Otevírání pravých dveří +Common.722.SF43 = SF43: ZavÅ™ení dveří +Common.722.SF44 = SF44: Zadní dveÅ™e +Common.722.SF45 = SF45: Napájení osvÄ›tlení interiéru +Common.722.SF46 = SF46: OsvÄ›tlení nouze +Common.722.SF47 = SF47: Ventilace 1. skupiny +Common.722.SF48 = SF48: Ventilace 2. skupiny +Common.722.SF49 = SF49: PoÄítadlo +Common.722.SF51 = SF51: Řídící jednotka vozu +Common.722.SF52 = SF52: BODV +Common.722.SF53 = SF53: MÄ›niÄ +Common.722.SF54 = SF54: VysouÅ¡eÄ vzduchu +Common.722.SF55 = SF55: BUFT (Jednotka ovládání tÅ™ecích brzd) +Common.722.SF56 = SF56: StřídaÄ +Common.722.SF57 = SF57: OhÅ™ev střídaÄe +Common.722.SF58 = SF58: Napájení obvodů řízení vozu +Common.722.SF59 = SF59: Nouzové napájení obvodů řízení vozu + +#gmod_subway_81-722 +#Buttons: +Entities.gmod_subway_81-722.Buttons.PU1.MirrorHeatingSet = @[Common.722.MirrorHeating] +Entities.gmod_subway_81-722.Buttons.PU1.DoorLeft2Set = @[Common.720.KDL] +Entities.gmod_subway_81-722.Buttons.PU1.DoorBackSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-722.Buttons.PU1.EmergencyDriveSet = @[Common.722.EmergencyDrive] +Entities.gmod_subway_81-722.Buttons.PU1.MicrophoneSet = @[Common.722.Microphone] +Entities.gmod_subway_81-722.Buttons.PU1.DoorLeft1Set = @[Common.720.KDL] + +Entities.gmod_subway_81-722.Buttons.PU2.ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-722.Buttons.PU2.ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-722.Buttons.PU2.GlassWasherSet = @[Common.722.GlassWasher] +Entities.gmod_subway_81-722.Buttons.PU2.GlassCleaner+ = @[Common.722.GlassCleaner] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.PU2.GlassCleaner- = @[Common.722.GlassCleaner] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeTPlusKToggle = @[Common.722.EmergencyBrakeTPlusK] +Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeTPlusSet = @[Common.722.EmergencyBrakeTPlus] +Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeToggle = @[Common.720.EmergencyBrake] +Entities.gmod_subway_81-722.Buttons.PU2.VigilanceSet = @[Common.ARS.KB] +Entities.gmod_subway_81-722.Buttons.PU2.Headlights+ = @[Common.ALL.VF] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.PU2.Headlights- = @[Common.ALL.VF] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.PU2.DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-722.Buttons.PU2.DoorClose+ = @[Common.720.DoorClose] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.PU2.DoorClose- = @[Common.720.DoorClose] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.PU2.DoorRightSet = @[Common.720.KDP] + +Entities.gmod_subway_81-722.Buttons.BI3.KRO+ = @[Common.722.KRO] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.BI3.KRO- = @[Common.722.KRO] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.BI3.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-722.Buttons.BI3.Compressor- = @[Common.ALL.MK] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.BI3.Compressor+ = @[Common.ALL.MK] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.BI3.!BrakeTrainLine = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-722.Buttons.BI3.!BrakeCylinder = @[Common.ALL.BCPressure] + +Entities.gmod_subway_81-722.Buttons.PPZB.PSNToggleSet = @[Common.722.PSNToggle] +Entities.gmod_subway_81-722.Buttons.PPZB.BattOnSet = @[Common.722.BattOn] +Entities.gmod_subway_81-722.Buttons.PPZB.BattOffSet = @[Common.722.BattOff] +Entities.gmod_subway_81-722.Buttons.PPZB.TorecDoorUnlockSet = @[Common.722.TorecDoorUnlock] +Entities.gmod_subway_81-722.Buttons.PPZB.SCEnable = @[Common.722.SCEnabled] +Entities.gmod_subway_81-722.Buttons.PPZB.SOSD = @[Common.722.LSOSD] + +Entities.gmod_subway_81-722.Buttons.PVM.PassLightToggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-722.Buttons.PVM.PassVent- = @[Common.722.PassVent] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.PassVent+ = @[Common.722.PassVent] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.VKFToggle = @[Common.ALL.VKF] +Entities.gmod_subway_81-722.Buttons.PVM.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-722.Buttons.PVM.VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-722.Buttons.PVM.SOSDEnableToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-722.Buttons.PVM.VRU- = @[Common.722.VRU] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.VRU+ = @[Common.722.VRU] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.VADToggle = @[Common.722.VADToggle] +Entities.gmod_subway_81-722.Buttons.PVM.VAHToggle = @[Common.722.VAHToggle] +Entities.gmod_subway_81-722.Buttons.PVM.EmergencyRadioPowerToggle = @[Common.722.EmergencyRadioPowerToggle] +Entities.gmod_subway_81-722.Buttons.PVM.BARSMode- = @[Common.722.BARSMode] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.BARSMode+ = @[Common.722.BARSMode] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.PantSC- = @[Common.722.PantSC] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.PantSC+ = @[Common.722.PantSC] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.RCARSToggle = @[Common.ALL.RCARS] + +Entities.gmod_subway_81-722.Buttons.HelperLamps.!LRD = @[Common.ARS.LRD] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!LPT = @[Common.ALL.BrT] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!RS = @[Common.722.LRS] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!AVS = @[Common.722.LAVS] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!LSD = @[Common.ALL.LSD] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!RU = @[Common.722.LRU] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!04 = @[Common.ARS.N4] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!00 = @[Common.ARS.0] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!40 = @[Common.ARS.40] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!60 = @[Common.ARS.60] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!70 = @[Common.ARS.70] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!80 = @[Common.ARS.80] + +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatUpSet = @[Common.SARMAT.Up] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatDownSet = @[Common.SARMAT.Down] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatEnterSet = @[Common.SARMAT.Enter] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatEscSet = @[Common.SARMAT.Esc] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF1Set = @[Common.SARMAT.F1] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF2Set = @[Common.SARMAT.F2] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF3Set = @[Common.SARMAT.F3] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF4Set = @[Common.SARMAT.F4] + +Entities.gmod_subway_81-722.Buttons.BMP.SarmatPathSet = @[Common.SARMAT.Path] +Entities.gmod_subway_81-722.Buttons.BMP.SarmatLineSet = @[Common.SARMAT.Line] +Entities.gmod_subway_81-722.Buttons.BMP.SarmatZeroSet = @[Common.SARMAT.Zero] +Entities.gmod_subway_81-722.Buttons.BMP.SarmatStartSet = @[Common.SARMAT.Start] + +Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber1Set = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber2Set = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber3Set = @[Common.ALL.RouteNumber3+] + +Entities.gmod_subway_81-722.Buttons.Lighting.CabinLight- = @[Common.ALL.CabLights] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.Lighting.CabinLight+ = @[Common.ALL.CabLights] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.Lighting.PanelLightToggle = @[Common.ALL.PanelLights] + +Entities.gmod_subway_81-722.Buttons.PPZ.SF1Toggle = @[Common.722.SF1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF2Toggle = @[Common.722.SF2] +Entities.gmod_subway_81-722.Buttons.PPZ.SF3Toggle = @[Common.722.SF3] +Entities.gmod_subway_81-722.Buttons.PPZ.SF4Toggle = @[Common.722.SF4] +Entities.gmod_subway_81-722.Buttons.PPZ.SF5Toggle = @[Common.722.SF5] +Entities.gmod_subway_81-722.Buttons.PPZ.SF6Toggle = @[Common.722.SF6] +Entities.gmod_subway_81-722.Buttons.PPZ.SF7Toggle = @[Common.722.SF7] +Entities.gmod_subway_81-722.Buttons.PPZ.SF8Toggle = @[Common.722.SF8] +Entities.gmod_subway_81-722.Buttons.PPZ.SF9Toggle = @[Common.722.SF9] +Entities.gmod_subway_81-722.Buttons.PPZ.R_UPOToggle = @[Common.722.UPO] +Entities.gmod_subway_81-722.Buttons.PPZ.SF01Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF10Toggle = @[Common.722.SF10] +Entities.gmod_subway_81-722.Buttons.PPZ.SF11Toggle = @[Common.722.SF11] +Entities.gmod_subway_81-722.Buttons.PPZ.SF12Toggle = @[Common.722.SF12] +Entities.gmod_subway_81-722.Buttons.PPZ.SF13Toggle = @[Common.722.SF13] +Entities.gmod_subway_81-722.Buttons.PPZ.SF02Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF14Toggle = @[Common.722.SF14] +Entities.gmod_subway_81-722.Buttons.PPZ.SF15Toggle = @[Common.722.SF15] +Entities.gmod_subway_81-722.Buttons.PPZ.SF16Toggle = @[Common.722.SF16] +Entities.gmod_subway_81-722.Buttons.PPZ.SF17Toggle = @[Common.722.SF17] +Entities.gmod_subway_81-722.Buttons.PPZ.SF18Toggle = @[Common.722.SF18] +Entities.gmod_subway_81-722.Buttons.PPZ.SF19Toggle = @[Common.722.SF19] +Entities.gmod_subway_81-722.Buttons.PPZ.SF20Toggle = @[Common.722.SF20] +Entities.gmod_subway_81-722.Buttons.PPZ.SF21Toggle = @[Common.722.SF21] +Entities.gmod_subway_81-722.Buttons.PPZ.SF22Toggle = @[Common.722.SF22] +Entities.gmod_subway_81-722.Buttons.PPZ.SF23Toggle = @[Common.722.SF23] +Entities.gmod_subway_81-722.Buttons.PPZ.SF24Toggle = @[Common.722.SF24] +Entities.gmod_subway_81-722.Buttons.PPZ.SF25Toggle = @[Common.722.SF25] +Entities.gmod_subway_81-722.Buttons.PPZ.SF26Toggle = @[Common.722.SF26] +Entities.gmod_subway_81-722.Buttons.PPZ.SF27Toggle = @[Common.722.SF27] +Entities.gmod_subway_81-722.Buttons.PPZ.SF03Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF04Toggle = @[Common.ALL.Unsused1] + +Entities.gmod_subway_81-722.Buttons.PVZ.SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-722.Buttons.PVZ.1:SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-722.Buttons.PVZ.SF32Toggle = @[Common.722.SF32] +Entities.gmod_subway_81-722.Buttons.PVZ.SF33Toggle = @[Common.722.SF33] +Entities.gmod_subway_81-722.Buttons.PVZ.SF34Toggle = @[Common.722.SF34] +Entities.gmod_subway_81-722.Buttons.PVZ.SF35Toggle = @[Common.722.SF35] +Entities.gmod_subway_81-722.Buttons.PVZ.SF36Toggle = @[Common.722.SF36] +Entities.gmod_subway_81-722.Buttons.PVZ.SF37Toggle = @[Common.722.SF37] +Entities.gmod_subway_81-722.Buttons.PVZ.SF38Toggle = @[Common.722.SF38] +Entities.gmod_subway_81-722.Buttons.PVZ.SF41Toggle = @[Common.722.SF41] +Entities.gmod_subway_81-722.Buttons.PVZ.SF42Toggle = @[Common.722.SF42] +Entities.gmod_subway_81-722.Buttons.PVZ.SF43Toggle = @[Common.722.SF43] +Entities.gmod_subway_81-722.Buttons.PVZ.SF44Toggle = @[Common.722.SF44] +Entities.gmod_subway_81-722.Buttons.PVZ.SF45Toggle = @[Common.722.SF45] +Entities.gmod_subway_81-722.Buttons.PVZ.SF46Toggle = @[Common.722.SF46] +Entities.gmod_subway_81-722.Buttons.PVZ.SF47Toggle = @[Common.722.SF47] +Entities.gmod_subway_81-722.Buttons.PVZ.SF48Toggle = @[Common.722.SF48] +Entities.gmod_subway_81-722.Buttons.PVZ.SF49Toggle = @[Common.722.SF49] +Entities.gmod_subway_81-722.Buttons.PVZ.SF51Toggle = @[Common.722.SF51] +Entities.gmod_subway_81-722.Buttons.PVZ.SF52Toggle = @[Common.722.SF52] +Entities.gmod_subway_81-722.Buttons.PVZ.SF53Toggle = @[Common.722.SF53] +Entities.gmod_subway_81-722.Buttons.PVZ.SF54Toggle = @[Common.722.SF54] +Entities.gmod_subway_81-722.Buttons.PVZ.SF55Toggle = @[Common.722.SF55] +Entities.gmod_subway_81-722.Buttons.PVZ.SF56Toggle = @[Common.722.SF56] +Entities.gmod_subway_81-722.Buttons.PVZ.SF57Toggle = @[Common.722.SF57] +Entities.gmod_subway_81-722.Buttons.PVZ.SF58Toggle = @[Common.722.SF58] +Entities.gmod_subway_81-722.Buttons.PVZ.SF59Toggle = @[Common.722.SF59] + +Entities.gmod_subway_81-722.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-722.Buttons.CabinDoorL.CabinDoorLeft = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-722.Buttons.CabinDoorR.CabinDoorRight = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-722.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-722.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-722.Buttons.Isolations.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.Isolations.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.StopKran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-722.Buttons.StopKran.UAVAToggle = @[Common.ALL.UAVA2] +Entities.gmod_subway_81-722.Buttons.BTO.K29Toggle = @[Common.ALL.KRMH] +Entities.gmod_subway_81-722.Buttons.BTO.K9Toggle = @[Common.ALL.RVTB] + +#gmod_subway_81-723 +Entities.gmod_subway_81-723.Buttons.PVZ.SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-723.Buttons.PVZ.1:SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-723.Buttons.PVZ.SF32Toggle = @[Common.722.SF32] +Entities.gmod_subway_81-723.Buttons.PVZ.SF33Toggle = @[Common.722.SF33] +Entities.gmod_subway_81-723.Buttons.PVZ.SF34Toggle = @[Common.722.SF34] +Entities.gmod_subway_81-723.Buttons.PVZ.SF35Toggle = @[Common.722.SF35] +Entities.gmod_subway_81-723.Buttons.PVZ.SF36Toggle = @[Common.722.SF36] +Entities.gmod_subway_81-723.Buttons.PVZ.SF37Toggle = @[Common.722.SF37] +Entities.gmod_subway_81-723.Buttons.PVZ.SF38Toggle = @[Common.722.SF38] +Entities.gmod_subway_81-723.Buttons.PVZ.SF41Toggle = @[Common.722.SF41] +Entities.gmod_subway_81-723.Buttons.PVZ.SF42Toggle = @[Common.722.SF42] +Entities.gmod_subway_81-723.Buttons.PVZ.SF43Toggle = @[Common.722.SF43] +Entities.gmod_subway_81-723.Buttons.PVZ.SF44Toggle = @[Common.722.SF44] +Entities.gmod_subway_81-723.Buttons.PVZ.SF45Toggle = @[Common.722.SF45] +Entities.gmod_subway_81-723.Buttons.PVZ.SF46Toggle = @[Common.722.SF46] +Entities.gmod_subway_81-723.Buttons.PVZ.SF47Toggle = @[Common.722.SF47] +Entities.gmod_subway_81-723.Buttons.PVZ.SF48Toggle = @[Common.722.SF48] +Entities.gmod_subway_81-723.Buttons.PVZ.SF49Toggle = @[Common.722.SF49] +Entities.gmod_subway_81-723.Buttons.PVZ.SF51Toggle = @[Common.722.SF51] +Entities.gmod_subway_81-723.Buttons.PVZ.SF52Toggle = @[Common.722.SF52] +Entities.gmod_subway_81-723.Buttons.PVZ.SF53Toggle = @[Common.722.SF53] +Entities.gmod_subway_81-723.Buttons.PVZ.SF54Toggle = @[Common.722.SF54] +Entities.gmod_subway_81-723.Buttons.PVZ.SF55Toggle = @[Common.722.SF55] +Entities.gmod_subway_81-723.Buttons.PVZ.SF56Toggle = @[Common.722.SF56] +Entities.gmod_subway_81-723.Buttons.PVZ.SF57Toggle = @[Common.722.SF57] +Entities.gmod_subway_81-723.Buttons.PVZ.SF58Toggle = @[Common.722.SF58] +Entities.gmod_subway_81-723.Buttons.PVZ.SF59Toggle = @[Common.722.SF59] + +Entities.gmod_subway_81-723.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-723.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-723.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-723.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +Entities.gmod_subway_81-723.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-723.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] + + +#gmod_subway_81-724 +#Buttons: +Entities.gmod_subway_81-724.Buttons.PVZ.SF34Toggle = @[Common.722.SF34] +Entities.gmod_subway_81-724.Buttons.PVZ.SF35Toggle = @[Common.722.SF35] +Entities.gmod_subway_81-724.Buttons.PVZ.SF36Toggle = @[Common.722.SF36] +Entities.gmod_subway_81-724.Buttons.PVZ.SF41Toggle = @[Common.722.SF41] +Entities.gmod_subway_81-724.Buttons.PVZ.SF42Toggle = @[Common.722.SF42] +Entities.gmod_subway_81-724.Buttons.PVZ.SF43Toggle = @[Common.722.SF43] +Entities.gmod_subway_81-724.Buttons.PVZ.SF44Toggle = @[Common.722.SF44] +Entities.gmod_subway_81-724.Buttons.PVZ.SF45Toggle = @[Common.722.SF45] +Entities.gmod_subway_81-724.Buttons.PVZ.SF46Toggle = @[Common.722.SF46] +Entities.gmod_subway_81-724.Buttons.PVZ.SF47Toggle = @[Common.722.SF47] +Entities.gmod_subway_81-724.Buttons.PVZ.SF48Toggle = @[Common.722.SF48] +Entities.gmod_subway_81-724.Buttons.PVZ.SF51Toggle = @[Common.722.SF51] +Entities.gmod_subway_81-724.Buttons.PVZ.SF52Toggle = @[Common.722.SF52] +Entities.gmod_subway_81-724.Buttons.PVZ.SF53Toggle = @[Common.722.SF53] +Entities.gmod_subway_81-724.Buttons.PVZ.SF54Toggle = @[Common.722.SF54] +Entities.gmod_subway_81-724.Buttons.PVZ.SF55Toggle = @[Common.722.SF55] + +Entities.gmod_subway_81-724.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-724.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-724.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-724.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +Entities.gmod_subway_81-724.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-724.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] + +#Spawner: +Entities.gmod_subway_81-722.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-722.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-722.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-722.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-722.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-722.Spawner.SarmatInvert.Name = @[Common.Spawner.SchemeInvert] +Entities.gmod_subway_81-722.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-722.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-722.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-722.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-722.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] + +]] diff --git a/lua/metrostroi_data/languages/cz_base.lua b/lua/metrostroi_data/languages/cz_base.lua new file mode 100644 index 0000000..92ed75f --- /dev/null +++ b/lua/metrostroi_data/languages/cz_base.lua @@ -0,0 +1,446 @@ +return [[ +#Base text for Czech language + +[cz] +lang = ÄŒeÅ¡tina #Full language name +AuthorText = Autor pÅ™ekladu: Silverpilen_CZ |СПЕЦÐÐЗ| #Author text + +#Workshop errors +Workshop.Title = Manažér souÄástí +Workshop.FilesMissing = ChybÄ›jící souÄásti nebo chybný addon.\nPokud jste nainstalovali addon z Workshopu, zkuste smazat soubor:\nGarrysMod/garrysmod/%s. +Workshop.FilesMissingLocaly = ChybÄ›jící souÄásti nebo chybný addon. +Workshop.InstalledLocaly = Nainstalováno (místní soubory) +Workshop.NotInstalledE = Nenainstalováno.\nPotvrÄte odbÄ›r addonu a zkontrolujte to v menu "Addony". +Workshop.NotInstalled = Nenainstalováno. +Workshop.Disabled = Vypnout.\nZapnout v menu "Addony". +Workshop.Installed = Nainstalováno +Workshop.Open = Workshop +Workshop.ErrorGithub = ZjiÅ¡tÄ›na GitHub verze módu Metrostroi. SouÄasná verze módu Metrostroi není kompatibilní a nebude fungovat s GitHub verzí módu Metrostroi. +Workshop.ErrorLegacy = ŽjiÅ¡tÄ›na Legacy verze módu Metrostroi. SouÄasná verze módu Metrostroi není kompatibilní a nebude fungovat s Legacy verzí módu Metrostroi. +Workshop.ErrorEnhancers = Tento addon obsahuje vylepÅ¡ení grafiky, které může naruÅ¡it plynulost hry. +Workshop.Error1 = Tento addon obsahuje starý script kód módu Metrostroi, který není kompatibilní se souÄasnou verzí. Může se zobrazit hláška "Scrips errors", a může se projevit nestabilita addonu. +Workshop.ErrorOld = Nalezeny staré modely (81-702 a 81-717). Odstraňte původní herní obsah hry Metrostroi (složka garrysmod/addons), a odstraňte složky "cache", "download" a "downloads" ze složky "garrysmod". + +#Client settings +Panel.Admin = Admin +Panel.RequireThirdRail = Zapnout nutnost přítomnosti přívodní kolejnice + +Panel.Client = Klient +Panel.Language = Zvolit jazyk +Panel.DrawCams = Renderovací kamery +Panel.DisableHUD = Vypnout HUD v pozici strojvedoucího +Panel.DisableCamAccel = Vypnout akceleraci pohledu +Panel.DisableHoverText = Vypnout vysvÄ›tlivky +Panel.DisableHoverTextP = Disable additional information\nin tooltips #NEW +Panel.ScreenshotMode = Mód snímku obrazovky (NÃZKÉ FPS) +Panel.RedLights = Zapnout dynamická Äervená svÄ›tla +Panel.ShadowsHeadlight = Zapnout odrazy reflektorů +Panel.ShadowsOther = Zapnout odrazy ostatních\nzdrojů svÄ›tla +Panel.MinimizedShow = NenaÄítat znovu souÄásti\npÅ™i minimalizování +Panel.PanelLights = Enable dynamic lights\nfrom panel lamps #NEW +Panel.RouteNumber = Route number #NEW +Panel.FOV = FOV +Panel.Z = Výška kamery +Panel.RenderDistance = Vykreslovací\nvzdálenost +Panel.ReloadClient = Znovu naÄíst klienta + +Panel.ClientAdvanced = Klient (pokroÄilý) +Panel.DrawDebugInfo = Zobrazit informace pro vývojáře +Panel.DrawSignalDebugInfo = Informace pro vývojáře (Signalizace) +Panel.CheckAddons = Zkontrolovat addony +Panel.ReloadLang = Znovu naÄíst jazyky +Panel.SoftDraw = Doba naÄítání prvků vlaku +Panel.SoftReloadLang = Znovu nenahrávat spawnovací menu + + + +#Common train +Train.Common.Camera0 = Sedadlo strojvedoucího +Train.Common.RouteNumber = Číslo turnusu +Train.Common.LastStation = KoneÄná stanice +Train.Common.HelpersPanel = Pomocný panel +Train.Common.UAVA = Autostop (UAVA) +Train.Common.PneumoPanels = Pneumatické ventily +Train.Common.Voltmeters = Voltmetry a ampérmetry +Train.Common.CouplerCamera = Spřáhlo/Spřáhla +Common.ARM.Monitor1 = Monitor 1 ARM + +Train.Buttons.Sealed = Sealed +Train.Buttons.Active = Active #NEW +Train.Buttons.Auto = Auto #NEW +Train.Buttons.On = On #NEW +Train.Buttons.Off = Off #NEW +Train.Buttons.Closed = Closed #NEW +Train.Buttons.Opened = Opened #NEW +Train.Buttons.Disconnected = Disconnected #NEW +Train.Buttons.Connected = Connected #NEW +Train.Buttons.UAVAOff = Control circuits isolated #NEW +Train.Buttons.UAVAOn = Control circuits active #NEW +Train.Buttons.Freq1/5 = 1/5 AB #NEW +Train.Buttons.Freq2/6 = 2/6 ALS-ARS #NEW +Train.Buttons.Left = Left #NEW +Train.Buttons.Right = Right #NEW +Train.Buttons.Low = Low #NEW +Train.Buttons.High = High #NEW +Train.Buttons.LFar = Distant light #NEW #FIXME +Train.Buttons.LNear = Near light #NEW #FIXME +Train.Buttons.0 = 0 #NEW +Train.Buttons.1 = 1 #NEW +Train.Buttons.2 = 2 #NEW +Train.Buttons.3 = 3 #NEW +Train.Buttons.4 = 4 #NEW +Train.Buttons.Forward = Forward #NEW +Train.Buttons.Back = Backward #NEW #FIXME +Train.Buttons.VentHalf = 1/2 of speed #NEW +Train.Buttons.VentFull = Full speed #NEW +Train.Buttons.VTRF = Forward oriented wagons #NEW +Train.Buttons.VTRB = Back oriented wagons #NEW +Train.Buttons.VTR1 = Even wagons #NEW +Train.Buttons.VTR2 = Odd wagons #NEW +Train.Buttons.VTRH1 = First half of train #NEW +Train.Buttons.VTRH2 = Second half of train #NEW #FIXME +Train.Buttons.VTRAll = All wagons #NEW + +Train.Buttons.BatteryVoltage = %d V #NEW +Train.Buttons.HighVoltage = %d V #NEW +Train.Buttons.BatteryCurrent = %d A #NEW +Train.Buttons.EnginesCurrent = %d A #NEW +Train.Buttons.Speed = %d km/h #NEW +Train.Buttons.SpeedAll = %d km/h Speed limit:%s km/h #NEW +Train.Buttons.SpeedLimit = %s km/h #NEW +Train.Buttons.SpeedLimitNext = %s km/h #NEW +Train.Buttons.04 = NF #NEW +Train.Buttons.BCPressure = %.1f kgf/cm² #NEW #FIXME bar? +Train.Buttons.BLTLPressure = TL: %.1f BL:%.1f kgf/cm² #NEW #FIXME bar? + +#Train entities +Entities.gmod_subway_base.Name = Vozová základna +Entities.gmod_subway_81-502.Name = 81-502 (Ema-502 Äelní) +Entities.gmod_subway_81-501.Name = 81-501 (Em-501 vložený) +Entities.gmod_subway_81-702.Name = 81-702 (D Äelní) +Entities.gmod_subway_81-702_int.Name = 81-702 (D vložený) +Entities.gmod_subway_81-703.Name = 81-703 (E Äelní) +Entities.gmod_subway_81-703_int.Name = 81-703 (E vložený) +Entities.gmod_subway_ezh.Name = 81-707 (Ež Äelní) +Entities.gmod_subway_ezh1.Name = 81-708 (Ež1 vložený) +Entities.gmod_subway_ezh3.Name = 81-710 (Ež3 Äelní) +Entities.gmod_subway_em508t.Name = 81-508T (Em-508T vložený) +Entities.gmod_subway_81-717_mvm.Name = 81-717 (Moskevský Äelní) +Entities.gmod_subway_81-717_mvm_custom.Name = 81-717 (Moskevský uživatelský) +Entities.gmod_subway_81-714_mvm.Name = 81-714 (Moskevský vložený) +Entities.gmod_subway_81-717_lvz.Name = 81-717 (Petrohradský Äelní) +Entities.gmod_subway_81-714_lvz.Name = 81-714 (Petrohradský vložený) +Entities.gmod_subway_81-718.Name = 81-718 (TISU Äelní) +Entities.gmod_subway_81-719.Name = 81-719 (TISU vložený) +Entities.gmod_subway_81-720.Name = 81-720 (Jauza Äelní) +Entities.gmod_subway_81-721.Name = 81-721 (Jauza vložený) +Entities.gmod_subway_81-722.Name = 81-722 (Jubilejnij Äelní) +Entities.gmod_subway_81-723.Name = 81-723 (Jubilejnij vložený) +Entities.gmod_subway_81-724.Name = 81-724 (Jubilejnij vložený - bez pohonu) +Entities.gmod_subway_81-7036.Name = 81-7036 (nefunguje) +Entities.gmod_subway_81-7037.Name = 81-7037 (nefunguje) +Entities.gmod_subway_tatra_t3.Name = Tatra T3 + +#Train util entities +Entities.gmod_train_bogey.Name = Podvozek +Entities.gmod_train_couple.Name = Spřáhlo + +#Other entities +Entities.gmod_track_pui.Name = PUI (Programovatelné zobrazovací zařízení) +Entities.gmod_track_mus_elektronika7.Name = Digitální hodiny +Entities.gmod_mus_clock_analog.Name = Analogové hodiny +Entities.gmod_track_clock_time.Name = Velké intervalové hodiny(Äas) +Entities.gmod_track_clock_small.Name = Malé intervalové hodiny +Entities.gmod_track_clock_interval.Name = Velké intervalové hodiny(interval) +Entities.gmod_track_switch.Name = Výhybka +Entities.gmod_track_powermeter.Name = MÄ›Å™Ã­Ä výkonu +Entities.gmod_track_arm.Name = ARM DSCP +Entities.gmod_track_udochka.Name = Napájecí kabel +Entities.gmod_train_spawner.Name = Spawner vozů metra +Entities.gmod_train_special_box.Name = Speciální zásilka + +#Weapons +Weapons.button_presser.Name = SpínaÄ tlaÄítek +Weapons.button_presser.Purpose = UrÄen pro pohodlné stisknutí tlaÄítek na mapách. +Weapons.button_presser.Instructions = NajeÄte na tlaÄítko a stisknÄ›te tlaÄítko "Útok". +Weapons.train_key.Name = KlÃ­Ä správce +Weapons.train_key.Purpose = UrÄen pro použití na zablokovaná tlaÄítka (pouze pro správce). +Weapons.train_key.Instructions = NajeÄte na tlaÄítko pro správce a stisknÄ›te tlaÄítko "Útok". +Weapons.train_kv_wrench.Name = KlÃ­Ä reversu +Weapons.train_kv_wrench.Purpose = UrÄen pro používání ve vozech metra a stisknutí různých tlaÄítek v nich. +Weapons.train_kv_wrench.Instructions = NajeÄte na tlaÄítko ve vlaku a stisknÄ›te tlaÄítko "Útok". +Weapons.train_kv_wrench_gold.Name = Zlatý klÃ­Ä reversu + +Weapons.train_kv_wrench_gold.Purpose = @[Weapons.train_kv_wrench.Purpose] +Weapons.train_kv_wrench_gold.Instructions = @[Weapons.train_kv_wrench.Instructions] + +#Spawner common +Spawner.Title = Spawner vozů metra +Spawner.Spawn = Spawnout +Spawner.Close = Zavřít +Spawner.Trains1 = Max. poÄet vozů v soupravÄ› +Spawner.Trains2 = Na hráÄe +Spawner.WagNum = PoÄet vozů +Common.Spawner.Texture = Textura vozu +Common.Spawner.PassTexture = Textura interiéru +Common.Spawner.CabTexture = Textura kabiny +Common.Spawner.Announcer = Vlakový rozhlas +Common.Spawner.Type1 = Typ 1 +Common.Spawner.Type2 = Typ 2 +Common.Spawner.Type3 = Typ 3 +Common.Spawner.Type4 = Typ 4 +Common.Spawner.SpawnMode = Stav vlaku +Common.Spawner.SpawnMode.Deadlock = Odstaven +Common.Spawner.SpawnMode.Full = Uveden do provoz. stavu +Common.Spawner.SpawnMode.NightDeadlock = NoÄní odstavení +Common.Spawner.SpawnMode.Depot = Depo +Spawner.Common.EType = Typ elektrických obvodů +Common.Spawner.Scheme = Schéma metra nad dveÅ™mi +Common.Spawner.Random = Náhodný +Common.Spawner.Old = Starý +Common.Spawner.New = Nový +Common.Spawner.Type = Typ +Common.Spawner.SchemeInvert = Obrátit schéma metra + +#Coupler common +Common.Couple.Title = Menu spřáhla +Common.Couple.CoupleState = Poloha spřáhla +Common.Couple.Coupled = SpÅ™aženo +Common.Couple.Uncoupled = NespÅ™aženo +Common.Couple.Uncouple = Odpřáhnout +Common.Couple.IsolState = Poloha izolaÄních ventilů +Common.Couple.Isolated = ZavÅ™eny +Common.Couple.Opened = OtevÅ™eny +Common.Couple.Open = Otevřít +Common.Couple.Isolate = Zavřít +Common.Couple.EKKState = Poloha EKK (Kontaktní svorkovnice spřáhla vozu) +Common.Couple.Disconnected = Odpojena +Common.Couple.Connected = PÅ™ipojena +Common.Couple.Connect = PÅ™ipojit +Common.Couple.Disconnect = Odpojit + +#Bogey common +Common.Bogey.Title = Menu podvozku +Common.Bogey.ContactState = Poloha sbÄ›raÄů +Common.Bogey.CReleased = Odpojeny +Common.Bogey.CPressed = PÅ™ipojeny +Common.Bogey.CPress = PÅ™ipojit +Common.Bogey.CRelease = Odpojit +Common.Bogey.ParkingBrakeState = Poloha parkovací brzy +Common.Bogey.PBDisabled = RuÄnÄ› vypnuta +Common.Bogey.PBEnabled = Zapnuta +Common.Bogey.PBEnable = Zapnout +Common.Bogey.PBDisable = RuÄnÄ› vypnout + +#Trains common +Common.ALL.Unsused1 = Nevyužito +Common.ALL.Unsused2 = (nevyužito) +Common.ALL.Up = (nahoru) +Common.ALL.Down = (dolů) +Common.ALL.Left = (doleva) +Common.ALL.Right = (doprava) +Common.ALL.CW = (ve smÄ›ru hodinových ruÄiÄek) +Common.ALL.CCW = (proti smÄ›ru hodinových ruÄiÄek) +Common.ALL.VB = VB: Baterie zapnuto/vypnuto +Common.ALL.VSOSD = SOSD: Kontrolka otevÅ™ení dveří ve stanici +Common.ALL.VKF = VKF: Napájení baterie (Äervená svÄ›tla) +Common.ALL.VB2 = (Nízkonapěťové jistiÄe) +Common.ALL.VPR = VPR: Radiostanice +Common.ALL.VASNP = Napájení ASNP +Common.ALL.UOS = RC-UOS: OdpojovaÄ obvodů omezovaÄe rychlosti (jízda bez EPV/EPK) +Common.ALL.VAH = VAH: Nouzová jízda +Common.ALL.KAH = KAH: TlaÄítko nouzové jízdy bez ARS +Common.ALL.KAHK = Krytka tlaÄítka KAH +Common.ALL.VAD = VAD: Jízda bez kontroly zavÅ™ení dveří +Common.ALL.OVT = OVT: Odpojení vzduchových brzd +Common.ALL.VOVT = VOVT: Vypnout odpojovaÄ vzduchových brzd +Common.ALL.EmergencyBrakeValve = Záchranná brzda +Common.ALL.ParkingBrake = Parkovací brzda +Common.ALL.VU = VU: Řízení +Common.ALL.KDP = KDP: Otevřít pravé dveÅ™e +Common.ALL.KDPL = Kontrolka: Pravé dveÅ™e jsou zvoleny +Common.ALL.KDPK = Krytka tlaÄítka pravých dveří +Common.ALL.KDL = KDL: Otevřít levé dveÅ™e +Common.ALL.KDLL = Kontrolka: Levé dveÅ™e jsou zvoleny +Common.ALL.KDLK = Krytka tlaÄítka levých dveří +Common.ALL.KDLPK = Krytka tlaÄítek dveří +Common.ALL.KRZD = KRZD: DveÅ™e nouze +Common.ALL.VSD = Kontrola dveří: Levé/pravé +Common.ALL.Ring = Zvonek +Common.ALL.VUD = VUD: ZavÅ™ení dveří +Common.ALL.KDPH = Otevřít pravé dveÅ™e posledního vozu +Common.ALL.VUD2 = VUD2: ZavÅ™ení dveří z místa pomocníka strojvedoucího +Common.ALL.Program1 = Start hlášení (Program 1) +Common.ALL.Program2 = Start hlášení (Program 2) +Common.ALL.VRP = VRP: Resetovat pÅ™etížené relé +Common.ALL.VRPBV = VRP: Resetovat pÅ™etížené relé, zapnout BV +Common.ALL.KSN = KSN: Porucha řízení +Common.ALL.VMK = VMK: Kompresor +Common.ALL.MK = Kompresor +Common.ALL.VF1 = SvÄ›tla 1. skupiny +Common.ALL.VF2 = SvÄ›tla 2. skupiny +Common.ALL.VF = PÅ™epínaÄ svÄ›tel +Common.ALL.VUS = VUS: SvÄ›tla/SvÄ›tla dálková +Common.ALL.GaugeLights = OsvÄ›tlení přístojů +Common.ALL.CabLights = OsvÄ›tlení kabiny +Common.ALL.PassLights = OsvÄ›ltení interiéru +Common.ALL.PanelLights = OsvÄ›tlení pultu +Common.ALL.RMK = RMK: Kompresor nouze +Common.ALL.KRP = KRP: Nouzové řízení +Common.ALL.VZP = VZP: TlaÄítko pozastavení odjezdu soupravy (režim RAV) +Common.ALL.VZD = VZD: TlaÄítko pozastavení zavÅ™ení dveří (režim RAV) +Common.ALL.VAV = VAV: Režim automatického vedení (RAV) +Common.ALL.RouteNumber1+ = Turnus: Zvýšit 1. Äíslo +Common.ALL.RouteNumber1- = Turnus: Snížit 1. Äíslo +Common.ALL.RouteNumber2+ = Turnus: Zvýšit 2. Äíslo +Common.ALL.RouteNumber2- = Turnus: Snížit 2. Äíslo +Common.ALL.RouteNumber3+ = Turnus: Zvýšit 1. Äíslo +Common.ALL.RouteNumber3- = Turnus: Snížit 3. Äíslo +Common.ALL.LastStation+ = Další koneÄná stanice +Common.ALL.LastStation- = PÅ™edeÅ¡lá koneÄná stanice +Common.ALL.RRP = RP: ÄŒervené svÄ›tlo pÅ™etížení relé (nelze zkompletovat elektrické obvody) +Common.ALL.GRP = RP: Zelené svÄ›tlo pÅ™ehřátí relé (zabraňuje nadproudu trakÄních motorů) +Common.ALL.RP = RP: ÄŒervené svÄ›tlo pÅ™etížení relé (nelze zkompletovat elektrické obvody, nebo pÅ™ehřátí relé) +Common.ALL.SN = LSN: PÅ™etížení relé (nelze zkompletovat elektrické obvody) +Common.ALL.PU = Režim sníženého výkonu zapnut +Common.ALL.BrT = Pneumatické brzdy (souprava) +Common.ALL.BrW = Pneumatické brzdy (vůz) +Common.ALL.ARS = ARS: Automatická regulace rychlosti +Common.ALL.ARSR = ARS-R: Automatická regulace rychlosti (rezervní systém) +Common.ALL.ALS = ALS: Automatická lokomotivní signalizace +Common.ALL.RCARS = RC-ARS: OdpojovaÄ Å™Ã­dicích obvodů ARS +Common.ALL.RC1 = RC-1: OdpojovaÄ Å™Ã­dicích obvodů ARS +Common.ALL.EPK = Elektropneumatický ventil ARS (EPK) +Common.ALL.EPV = Elektropneumatický ventil ARS (EPV) +Common.ARS.LN = LN: Kontrolka smÄ›ru jízdy +Common.ARS.KT = KT: Indikátor brzdÄ›ní +Common.ARS.VD = VD: Řízení vypnuto systémem ARS +Common.ARS.Freq = Dekodér: PÅ™epínaÄ kódování frekvencí ALS +Common.ARS.FreqD = (nahoru - 1/5, dolů - 2/6) +Common.ARS.FreqU = (nahoru - 2/6, dolů - 1/5) +Common.ARS.VP = Režim "Pomocná souprava" +Common.ARS.RS = RS: PÅ™edvÄ›st (rychlost v dalším oddílu je stejná nebo vyšší) +Common.ARS.AB = Provoz v režimu automatického bloku +Common.ARS.ABButton = Provoz v režimu automatického bloku +Common.ARS.ABDriver = (tlaÄítko strojvedoucího) +Common.ARS.ABHelper = (tlaÄítko pomocníka strojvedoucího) +Common.ARS.AV = Závada hlavní jednotky ARS-MP +Common.ARS.AV1 = Závada záložní jednotky ARS-MP +Common.ARS.AB2 = ZmÄ›na systému ARS do režimu AB +Common.ARS.ARS = Režim ARS +Common.ARS.LRD = LRD: Kontrolka, povolující jízdu proti návÄ›sti Stůj! (ALS - Kód 0) +Common.ARS.VRD = VRD: Jízda proti návÄ›sti Stůj! (ALS - Kód 0) +Common.ARS.KB = KB: TlaÄítko bdÄ›losti +Common.ARS.KVT = KVT: TlaÄítko bdÄ›losti +Common.ARS.KVTR = KVT: TlaÄítko bdÄ›losti (režim ARS-R) +Common.ARS.04 = OÄŒ: Bez kódu +Common.ARS.N4 = NÄŒ: Bez kódu +Common.ARS.0 = 0: Kód 0 (NávÄ›st zastavení) +Common.ARS.40 = Rychlost 40 km/h +Common.ARS.60 = Rychlost 60 km/h +Common.ARS.70 = Rychlost 70 km/h +Common.ARS.80 = Rychlost 80 km/h +Common.ALL.RCBPS = RC-BPS: OdpojovaÄ protiskluzového bloku +Common.BPS.On = Protiskluzový blok zapnut +Common.BPS.Err = Chyba protiskluzového bloku +Common.BPS.Fail = Závada protiskluzového bloku +Commom.NMnUAVA.NMPressureLow = Kontrolka: Nízký tlaku vzduchu (brzdy) +Commom.NMnUAVA.UAVATriggered = Kontrolka: Kontakty Autostopu (UAVA) jsou rozpojeny +Common.ALL.LSD = Signalizace zavÅ™ení dveří +Common.ALL.L1w = Kontrolka 1. vodiÄe (řídící režím zapojen) +Common.ALL.L2w = Kontrolka 2. vodiÄe (rotace reostatu) +Common.ALL.L6w = Kontrolka 6. vodiÄe (brzdový režim zapojen) +Common.ALL.Horn = HoukaÄka +Common.ALL.DriverValveBLDisconnect = Ventil brzdového potrubí +Common.ALL.DriverValveTLDisconnect = Ventil hlavního potrubí +Common.ALL.DriverValveDisconnect = Ventil brzdiÄe +Common.ALL.KRMH = KRMSH: Nouzové zprovoznÄ›ní brzdiÄe +Common.ALL.RVTB = RVTB: Rezervní ventil bezpeÄnostní brzdy +Common.ALL.FrontBrakeLineIsolationToggle = IzolaÄní ventil brzdového potrubí +Common.ALL.FrontTrainLineIsolationToggle = IzolaÄní ventil hlavního potrubí +Common.ALL.RearTrainLineIsolationToggle = IzolaÄní ventil hlavního potrubí +Common.ALL.RearBrakeLineIsolationToggle = IzolaÄní ventil brzdového potrubí +Common.ALL.UAVA = UAVA: Autostop\n(lze zapnout po snížení tlaku v hlavním potrubí) +Common.ALL.UAVA2 = UAVA: Autostop +Common.ALL.UAVAContact = UAVA: Autostop (obnovení kontaktů) +Common.ALL.OAVU = OAVU: TlaÄitko vypnutí AVU (Automatický odpojovaÄ Å™Ã­zení) +Common.ALL.LAVU = AVU (Automatický odpojovaÄ Å™Ã­zení) je aktivován +Common.ALL.GV = Hlavní vypínaÄ +Common.ALL.AirDistributor = VRN: VypínaÄ rozdÄ›lovaÄe vzduchu +Common.ALL.CabinDoor = DveÅ™e kabiny +Common.ALL.PassDoor = DveÅ™e z kabiny do interiéru +Common.ALL.FrontDoor = PÅ™ední dveÅ™e +Common.ALL.RearDoor = Zadní dveÅ™e +Common.ALL.OtsekDoor1 = Klika: Otevřít 1. přístrojovou komoru +Common.ALL.OtsekDoor2 = Klika: Otevřít 2. přístrojovou komoru +Common.ALL.CouchCap = Sklopení sedadla + +Common.ALL.UNCh = UNCh: ZesilovaÄ nízkích frekvencí +Common.ALL.ES = ES: Nouzové komunikaÄní zařízení +Common.ALL.GCab = Vlakový rozhlas v kabinÄ› +Common.ALL.UPO = UPO: Vlakový rozhlas +Common.ALL.R_Radio = Vlakový rozhlas +Common.ALL.AnnPlay = Kontrolka pÅ™ehrávání vlakového rozhlasu + +#RRI +Train.Common.RRI = RRI: Radioreléový rozhlas +Common.RRI.RRIUp = RRI: Nastavení (nahoru) +Common.RRI.RRIDown = RRI: Nastavení (dolů) +Common.RRI.RRILeft = RRI: Nastavení (doleva) +Common.RRI.RRIRight = RRI: Nastavení (doprava) +Common.RRI.RRIEnableToggle = RRI: Napájení +Common.RRI.RRIRewindSet2 = RRI: PÅ™etoÄit dopÅ™edu +Common.RRI.RRIRewindSet0 = RRI: PÅ™etoÄit dozadu +Common.RRI.RRIAmplifierToggle = RRI: ZesilovaÄ +Common.RRI.RRIOn = Kontrolka chodu RRI + +#ASNP +Train.Common.ASNP = ASNP +Common.ASNP.ASNPMenu = ASNP: Menu +Common.ASNP.ASNPUp = ASNP: Nahoru +Common.ASNP.ASNPDown = ASNP: Dolů +Common.ASNP.ASNPOn = ASNP: Napájení + +#PVK +Common.CabVent.PVK- = Snížit výkon ventilace v kabinÄ› +Common.CabVent.PVK+ = Zvýšit výkon ventilace v kabinÄ› + +#IGLA +Train.Common.IGLA = IGLA +Common.IGLA.Button1Up = IGLA: První tlaÄítko (nahoru) +Common.IGLA.Button1 = IGLA: První tlaÄítko +Common.IGLA.Button1Down = IGLA: První tlaÄítko (dolů) +Common.IGLA.Button2Up = IGLA: Druhé tlaÄítko (nahoru) +Common.IGLA.Button2 = IGLA: Druhé tlaÄítko +Common.IGLA.Button2Down = IGLA: Druhé tlaÄítko (dolů) +Common.IGLA.Button23 = IGLA: Druhé a tÅ™etí tlaÄítko +Common.IGLA.Button3 = IGLA: TÅ™etí tlaÄítko +Common.IGLA.Button4 = IGLA: ÄŒtvrté tlaÄítko +Common.IGLA.IGLASR = IGLA: Napájení +Common.IGLA.IGLARX = IGLA: Bez pÅ™ipojení +Common.IGLA.IGLAErr = IGLA: Chyba +Common.IGLA.IGLAOSP = IGLA: Protipožární systém aktivován +Common.IGLA.IGLAPI = IGLA: Požár +Common.IGLA.IGLAOff = IGLA: Obvody hlavního vypínaÄe odpojeny + +#BZOS +Common.BZOS.On = VypínaÄ poplaÅ¡ného zařízení +Common.BZOS.VH1 = PoplaÅ¡né zařízení zapnuto +Common.BZOS.VH2 = PoplaÅ¡né zařízení aktivováno +Common.BZOS.Engaged = PoplaÅ¡né zařízení aktivováno + +#Train helpers common +Common.ALL.SpeedCurr = SkuteÄná rychlost +Common.ALL.SpeedAccept = Povolená rychlost +Common.ALL.SpeedAttent = PÅ™edvÄ›st (povolená rychlost v příštím kolej. obvodu) +Common.ALL.Speedometer = RychlomÄ›r +Common.ALL.BLTLPressure = Napájecí-brzdové potrubí (Äervená: brzdové potrubí, Äerná: hlavní potrubí) +Common.ALL.BCPressure = Tlak v brzdovém válci +Common.ALL.EnginesCurrent = Výkon trakÄních motorů (A) +Common.ALL.EnginesCurrent1 = Výkon 1. skupiny trakÄních motorů (A) +Common.ALL.EnginesCurrent2 = Výkon 2. skupiny trakÄních motorů (A) +Common.ALL.EnginesVoltage = NapÄ›tí trakÄních motorů (kV) +Common.ALL.BatteryVoltage = NapÄ›tí baterie (V) +Common.ALL.BatteryCurrent = Proud baterie (A) +Common.ALL.HighVoltage = Vysoké napÄ›tí (kV) +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/de_502.lua b/lua/metrostroi_data/languages/de_502.lua new file mode 100644 index 0000000..ab2040f --- /dev/null +++ b/lua/metrostroi_data/languages/de_502.lua @@ -0,0 +1,244 @@ +return [[ +#81-502 +[de] +#######Buttons########### +#Common +Common.502.KS = KSAUP im Betrieb +Common.502.AV = Autonomes fahren ist aktiv +Common.502.SD = SD: Türfreigabe (Türen sind geschlossen) +Common.502.SDW = SD: Türfreigabe (Türen sind geöffnet) +Common.502.L3w = 3. Lampe (X3 Modus) +Common.502.L4w = 4. Lampe (Rückwärts) +Common.502.L5w = 5. Lampe(Vorwärts) +Common.502.L16w = 16. (Türverriegelung) +Common.502.L20w = 20. (LK2 und LK5 schließung) +Common.502.L23w = 23r. (Steuerung des Luftpressers) +Common.502.RK1 = Steuerung der ersten Schaltwerkposition +Common.502.BRD = Türstörung +Common.502.KOS = KB: Wachsamkeitstaste +Common.502.VAK = AK: Stromkreise für Notfahrmodus schließen +Common.502.LRU = Notfahrmodus aktiv +#Spawner +Spawner.502.TypeNVL = Zugtyp NVL +Spawner.502.TypeKVLO = altes KVL Triebfahrzeug +Spawner.502.TypeKVLN = neues KVL Triebfahrzeug +Spawner.502.EWagons = "E" Wagen einsetzen +#gmod_subway_81-502 +Entities.gmod_subway_81-502.Buttons.VBA.VBAToggle = Batterie für autonomes Fahren an/aus +Entities.gmod_subway_81-502.Buttons.AV.VRUToggle = VRU: Sperrfahrt +Entities.gmod_subway_81-502.Buttons.AV.KPVUToggle = KPVU: Deaktiviren von pneumatischer Steuerungs Überbrückung +Entities.gmod_subway_81-502.Buttons.AV.KSDToggle = KSD: Türverriegelung ausschalten +Entities.gmod_subway_81-502.Buttons.AV.KAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-502.Buttons.AV.KADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-502.Buttons.AV.OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-502.Buttons.AV.VKFToggle = @[Common.ALL.VKF] +Entities.gmod_subway_81-502.Buttons.RCAV3.RCAV3Toggle = KSAUP Lasttrennschalter (AV3) +Entities.gmod_subway_81-502.Buttons.RCAV4.RCAV4Toggle = KSAUP Lasttrennschalter (AV4) +Entities.gmod_subway_81-502.Buttons.RCAV5.RCAV5Toggle = KSAUP Lasttrennschalter (AV5) +Entities.gmod_subway_81-502.Buttons.RCARS.RCARSToggle = @[Common.ALL.RCARS] +Entities.gmod_subway_81-502.Buttons.RCBPS.RCBPSToggle = @[Common.ALL.RCBPS] +Entities.gmod_subway_81-502.Buttons.VRD2.2:VRDSet = @[Common.ARS.VRD] +Entities.gmod_subway_81-502.Buttons.VRD2.!LVRD = @[Common.ARS.LRD] +Entities.gmod_subway_81-502.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-502.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-502.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-502.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-502.Buttons.AV1.VU3Toggle = @[Common.703.VU3] +Entities.gmod_subway_81-502.Buttons.UPO.R_UPOToggle = @[Common.ALL.UPO] +Entities.gmod_subway_81-502.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-502.Buttons.VRD.VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-502.Buttons.HelperPanel.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.HelperPanel.KDPHSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-502.Buttons.AV2.VSOSDToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-502.Buttons.AV2.VRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-502.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLampAutodrive = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LDoorsWag = @[Common.502.SDW] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LDoors = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LGreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LRedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLampAutodrive = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RDoorsWag = @[Common.502.SDW] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RDoors = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RGreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RRedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_80 = @[Common.ARS.80] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_70 = @[Common.ARS.70] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_60 = @[Common.ARS.60] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_40 = @[Common.ARS.40] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_00 = @[Common.ARS.0] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_04 = @[Common.ARS.N4] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_KS = @[Common.502.KS] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_AV = @[Common.502.AV] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_4 = @[Common.502.L4w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_5 = @[Common.502.L5w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_DT = @[Common.ALL.BrT] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_20 = @[Common.502.L20w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_1P = @[Common.502.RK1] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SN1 = @[Common.ALL.RP] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SN2 = @[Common.ALL.SN] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_3 = @[Common.502.L3w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SD1 = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SD2 = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_RP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_DV = @[Common.502.BRD] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!CPS_Pd = @[Common.ARS.LRD] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_04 = @[Common.ARS.04] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_00 = @[Common.ARS.0] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_40 = @[Common.ARS.40] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_60 = @[Common.ARS.60] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_70 = @[Common.ARS.70] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_80 = @[Common.ARS.80] +Entities.gmod_subway_81-502.Buttons.Main1.2:VUSToggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-502.Buttons.Main1.2:HeadlightsToggle = @[Common.ALL.VF1] +Entities.gmod_subway_81-502.Buttons.Main1.!LKTLight = @[Common.ARS.KT] +Entities.gmod_subway_81-502.Buttons.Main1.!LKVDLight = @[Common.ARS.VD] +Entities.gmod_subway_81-502.Buttons.Main1.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-502.Buttons.Main1.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-502.Buttons.Main1.2:KBSet = @[Common.ARS.KB] +Entities.gmod_subway_81-502.Buttons.Main1.2:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.Main1.2:LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-502.Buttons.Main1.2:LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-502.Buttons.Main1.2:VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-502.Buttons.Main1.2:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-502.Buttons.Main1.2:KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-502.Buttons.Main1.2:VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-502.Buttons.Main1.2:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-502.Buttons.Main1.2:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-502.Buttons.Main1.2:VAKSet = @[Common.502.VAK] +Entities.gmod_subway_81-502.Buttons.Main1.2:VUDToggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-502.Buttons.Main1_2.!LMK2 = @[Common.502.L23w] +Entities.gmod_subway_81-502.Buttons.Main1_2.!LVRD2 = @[Common.ARS.LRD] +Entities.gmod_subway_81-502.Buttons.Main2.KOSSet = @[Common.502.KOS] +Entities.gmod_subway_81-502.Buttons.Main2.!LMK = @[Common.502.L23w] +Entities.gmod_subway_81-502.Buttons.Main2.VZPToggle = @[Common.ALL.VZP] +Entities.gmod_subway_81-502.Buttons.Main2.VZDSet = @[Common.ALL.VZD] +Entities.gmod_subway_81-502.Buttons.Main2.!L16 = @[Common.502.L16w] +Entities.gmod_subway_81-502.Buttons.Main2.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-502.Buttons.Main2.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.Main2.LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-502.Buttons.Main2.LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-502.Buttons.Main2.VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-502.Buttons.Main2.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-502.Buttons.Main2.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-502.Buttons.Main2.KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-502.Buttons.Main2.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-502.Buttons.Main2.!RU = @[Common.502.LRU] +Entities.gmod_subway_81-502.Buttons.Main2.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-502.Buttons.Main2.VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-502.Buttons.Main2.VAKSet = @[Common.502.VAK] +Entities.gmod_subway_81-502.Buttons.Main2.AutodriveToggle = @[Common.ALL.VAV] +Entities.gmod_subway_81-502.Buttons.Main2.VUDToggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-502.Buttons.BPS.!BPSon = @[Common.BPS.On] +Entities.gmod_subway_81-502.Buttons.BPS.!BPSErr = @[Common.BPS.Err] +Entities.gmod_subway_81-502.Buttons.BPS.!BPSFail = @[Common.BPS.Fail] +Entities.gmod_subway_81-502.Buttons.NMnUAVA.!NMPressureLow = @[Commom.NMnUAVA.NMPressureLow] +Entities.gmod_subway_81-502.Buttons.NMnUAVA.!UAVATriggered = @[Commom.NMnUAVA.UAVATriggered] +Entities.gmod_subway_81-502.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-502.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-502.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-502.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-502.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-502.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-502.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-502.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-502.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-502.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-502.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-502.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-502.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-502.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber3+ = @[Common.ALL.RouteNumber3+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber3- = @[Common.ALL.RouteNumber3-] +Entities.gmod_subway_81-502.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-502.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-502.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-502.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-502.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] +Entities.gmod_subway_81-502.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] +#gmod_subway_81-501 +Entities.gmod_subway_81-501.Buttons.AV.KPVUToggle = @[Entities.gmod_subway_81-502.Buttons.AV.KPVUToggle] +Entities.gmod_subway_81-501.Buttons.AV.KSDToggle = @[Entities.gmod_subway_81-502.Buttons.AV.KSDToggle] +Entities.gmod_subway_81-501.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-501.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-501.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-501.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-501.Buttons.AV1.VU3Toggle = @[Common.703.VU3] +Entities.gmod_subway_81-501.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-501.Buttons.Main.!GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-501.Buttons.Main.!RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-501.Buttons.Main.!SD = @[Common.703.SD] +Entities.gmod_subway_81-501.Buttons.Main.LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-501.Buttons.Main.LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-501.Buttons.Main.VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-501.Buttons.Main.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-501.Buttons.Main.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-501.Buttons.Main.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-501.Buttons.Main.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-501.Buttons.Main.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-501.Buttons.Main.VUDToggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-501.Buttons.HelperPanel.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-501.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-501.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-501.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-501.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-501.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-501.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-501.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-501.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-501.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-501.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-501.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-501.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-501.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-501.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-501.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-501.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-501.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] +#Cameras: +Train.502.AV = Switches +Train.502.VBA = @[Entities.gmod_subway_81-502.Buttons.VBA.VBAToggle] +Train.502.VRD = VRD +Train.502.RCARS = RC-ARS +Train.502.RCAV5 = RC-AV5 +Train.502.RCBPS = RC-BPS +Train.502.RCAV3 = RC-AV3 +Train.502.RCAV4 = RC-AV4 +#Spawner: +Entities.gmod_subway_81-502.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-502.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-502.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-502.Spawner.EMAType.Name = @[Spawner.Common.EType] +Entities.gmod_subway_81-502.Spawner.EMAType.1 = @[Spawner.502.TypeNVL] +Entities.gmod_subway_81-502.Spawner.EMAType.2 = @[Spawner.502.TypeKVLO] +Entities.gmod_subway_81-502.Spawner.EMAType.3 = @[Spawner.502.TypeKVLN] +Entities.gmod_subway_81-502.Spawner.EWagons.Name = @[Spawner.502.EWagons] +Entities.gmod_subway_81-502.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-502.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-502.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-502.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-502.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/de_702.lua b/lua/metrostroi_data/languages/de_702.lua new file mode 100644 index 0000000..3ae2aba --- /dev/null +++ b/lua/metrostroi_data/languages/de_702.lua @@ -0,0 +1,671 @@ +return [[ +#D/E-based types +[de] +#Cameras: +Train.702.Breakers1 = Batteriehauptschalter +Train.702.Breakers2 = Innenbeleuchtung +Train.702.Breakers3 = Hauptsicherung +Train.703.Breakers1 = Batteriehauptschalter +Train.703.Breakers2 = Hauptschalter und Innenbeleuchtung +Train.703.Parking = Handbremse, UAVA +Train.703.RCARS = RC-1: ARS Trennschalter +Train.703.AVU = AVU block +#Spawner +Spawner.707.Type = Führerstand +Spawner.707.Type1 = Alt + RRI +Spawner.707.Type2 = Neu + ASNP +Spawner.710.RRI = Radio-Relais-Ansager +#######Buttons########### +#Common +Common.702.VZ1 = Pneumatsches Ventil Nr.1 +Common.703.ParkingBrakeLeft = Handbremse lösen +Common.703.ParkingBrakeRight = Handbremse anlegen +Common.703.KSD = KSD: Steuerung der Türverriegelung +Common.703.SD = @[Common.502.SDW] +Common.703.VU1 = Heizung +Common.703.VU2 = Notbeleuchtung +Common.703.VU3 = Licht im Führerstand +Common.703.AV = Hauptsicherung (Hochspannungskreise) +Common.703.LOn = Beleuchtung an +Common.703.LOff = Beleuchtung aus +Common.703.KRR = KRR: Schaltwerk in erste Position drehen +Common.703.RUT = RUT anpassen (reduziert Beschleunigung) +Common.707.SEQ = Schaltwerk ist in Bewegung +Common.707.TAH = TAH: Fahren ohne Zugsicherung +Common.710.RK = Schaltwerk in Zwischenposition +Common.710.SAMMSchemeOff = SAMM Anhalten +Common.710.SAMMStart = SAMM Start +Common.710.SAMMReset = SAMM: Reset +Common.710.SAMMXTLamp = SAMM: fahr-/bremssteurung anpassen mit ATO +Common.710.SAMMSignal1 = SAMM: @[Common.ALL.Unsused1] +Common.710.SAMMSignal2 = SAMM: @[Common.ALL.Unsused1] +Common.710.SAMMOn = SAMM: Schalter für autonomes fahren +Common.710.SAMMUnit = SAMM: Ausfürhungseinheit +Common.710.SAMMX2 = SAMM: X2 modus +Common.710.SAMMAhead = SAMM: Aufholmodus +Common.710.SAMMAccept = SAMM: Erlaubnis +#gmod_subway_81-702 +Entities.gmod_subway_81-702.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-702.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-702.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-702.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-702.Buttons.AV1.VU3Toggle = @[Common.703.VU3] +Entities.gmod_subway_81-702.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-702.Buttons.VU.KU1Set = @[Common.703.LOn] +Entities.gmod_subway_81-702.Buttons.VU.KU2Set = @[Common.703.LOff] +Entities.gmod_subway_81-702.Buttons.MainB.KU7Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-702.Buttons.MainB.KU6Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-702.Buttons.MainB.VRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-702.Buttons.MainB.KU3Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-702.Buttons.MainP.VZSet = @[Common.702.VZ1] +Entities.gmod_subway_81-702.Buttons.KU9.KU9Set = @[Common.703.KSD] +Entities.gmod_subway_81-702.Buttons.KU5.KU5Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-702.Buttons.MainL.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-702.Buttons.MainL.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-702.Buttons.MainL.!Blue = @[Common.703.SD] +Entities.gmod_subway_81-702.Buttons.VU.SNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-702.Buttons.HelperPanel.KU10Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-702.Buttons.HelperPanel.KU8Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-702.Buttons.HelperPanel.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-702.Buttons.HelperPanel.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_81-702.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_81-702.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_81-702.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_81-702.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_81-702.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_81-702.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-702.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-702.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-702.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-702.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-702.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-702.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-702.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-702.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-702.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-702.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-702.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-702.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-702.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] +Entities.gmod_subway_81-702.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-702.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-702.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-702.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-702.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] +Entities.gmod_subway_81-702.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] +#gmod_subway_81-702_int +Entities.gmod_subway_81-702_int.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-702_int.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU3Toggle = @[Common.703.VU3] +Entities.gmod_subway_81-702_int.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-702_int.Buttons.VU.KU1Set = @[Common.703.LOn] +Entities.gmod_subway_81-702_int.Buttons.VU.KU2Set = @[Common.703.LOff] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU7Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU6Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-702_int.Buttons.MainB.VRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU3Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-702_int.Buttons.KU9.KU9Set = @[Common.703.KSD] +Entities.gmod_subway_81-702_int.Buttons.KU5.KU5Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-702_int.Buttons.MainL.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-702_int.Buttons.MainL.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-702_int.Buttons.MainL.!Blue = @[Common.703.SD] +Entities.gmod_subway_81-702_int.Buttons.VU.SNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-702_int.Buttons.HelperPanel.KU10Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-702_int.Buttons.HelperPanel.KU8Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-702_int.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-702_int.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-702_int.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-702_int.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-702_int.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-702_int.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-702_int.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-702_int.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-702_int.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-702_int.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702_int.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702_int.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-702_int.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-702_int.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-702_int.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-702_int.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-702_int.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-702_int.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-702_int.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] +Entities.gmod_subway_81-702_int.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] +#gmod_subway_81-703 +Entities.gmod_subway_81-703.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-703.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-703.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-703.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-703.Buttons.AV1.VU3Toggle = @[Common.703.VU3] +Entities.gmod_subway_81-703.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-703.Buttons.AV2.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-703.Buttons.Main.RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-703.Buttons.Main.GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-703.Buttons.Main.SD = @[Common.703.SD] +Entities.gmod_subway_81-703.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_81-703.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_81-703.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_81-703.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_81-703.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-703.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_81-703.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-703.Buttons.Main.KU7KToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-703.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703.Buttons.Main.KU6KToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-703.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-703.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-703.Buttons.Main.KU12Toggle = @[Common.703.RUT] +Entities.gmod_subway_81-703.Buttons.VU4.KU16Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-703.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-703.Buttons.HelperPanel.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-703.Buttons.HelperPanel.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_81-703.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_81-703.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_81-703.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_81-703.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_81-703.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_81-703.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-703.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-703.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-703.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-703.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-703.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-703.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-703.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-703.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-703.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-703.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-703.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-703.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-703.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] +Entities.gmod_subway_81-703.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-703.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-703.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-703.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-703.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-703.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] +Entities.gmod_subway_81-703.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] +#gmod_subway_81-703_int +Entities.gmod_subway_81-703_int.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-703_int.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU3Toggle = @[Common.703.VU3] +Entities.gmod_subway_81-703_int.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-703_int.Buttons.Main.RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-703_int.Buttons.Main.GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-703_int.Buttons.Main.SD = @[Common.703.SD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_81-703_int.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_81-703_int.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_81-703_int.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_81-703_int.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-703_int.Buttons.Main.KU7KToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703_int.Buttons.Main.KU6KToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU12Toggle = @[Common.703.RUT] +Entities.gmod_subway_81-703_int.Buttons.VU4.KU16Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-703_int.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703_int.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-703_int.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-703_int.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-703_int.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-703_int.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-703_int.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-703_int.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-703_int.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-703_int.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-703_int.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-703_int.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703_int.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703_int.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-703_int.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-703_int.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] = @[Common.ALL.LastStation-] +Entities.gmod_subway_81-703_int.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-703_int.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-703_int.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-703_int.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-703_int.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-703_int.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] +Entities.gmod_subway_81-703_int.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] +#gmod_subway_ezh +Entities.gmod_subway_ezh.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh.Buttons.AV1.VU3Toggle = @[Common.703.VU3] +Entities.gmod_subway_ezh.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_ezh.Buttons.VU.KU14Set = @[Common.ALL.KRP] +Entities.gmod_subway_ezh.Buttons.VU.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_ezh.Buttons.KRR.KRRSet = @[Common.703.KRR] +Entities.gmod_subway_ezh.Buttons.AVU.OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_ezh.Buttons.AVU.!AVULight = @[Common.ALL.LAVU] +Entities.gmod_subway_ezh.Buttons.AV2.R_RadioToggle = @[Common.ALL.VASNP] +Entities.gmod_subway_ezh.Buttons.AV2.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_ezh.Buttons.AV2.UOSToggle = @[Common.ALL.UOS] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!LNF = @[Common.ARS.04] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L0 = @[Common.ARS.0] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L40 = @[Common.ARS.40] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L60 = @[Common.ARS.60] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L70 = @[Common.ARS.70] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L80 = @[Common.ARS.80] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!LNF_2 = @[Common.ARS.04] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L0_2 = @[Common.ARS.0] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L40_2 = @[Common.ARS.40] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L60_2 = @[Common.ARS.60] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L70_2 = @[Common.ARS.70] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L80_2 = @[Common.ARS.80] +Entities.gmod_subway_ezh.Buttons.AB1.AB1Set = @[Common.ARS.ABButton]@[Common.ARS.ABDriver] +Entities.gmod_subway_ezh.Buttons.AB2.AB2Set = @[Common.ARS.ABButton]@[Common.ARS.ABHelper] +Entities.gmod_subway_ezh.Buttons.KAH.KAHToggle = @[Common.707.TAH] +Entities.gmod_subway_ezh.Buttons.RC1.RC1Toggle = @[Common.ALL.RCARS] +Entities.gmod_subway_ezh.Buttons.Lamps1.!AV = @[Common.ARS.AV] +Entities.gmod_subway_ezh.Buttons.Lamps1.!SEQ = @[Common.707.SEQ] +Entities.gmod_subway_ezh.Buttons.Lamps1.!ARS = @[Common.ARS.ARS] +Entities.gmod_subway_ezh.Buttons.Lamps1.!AB = @[Common.ARS.AB] +Entities.gmod_subway_ezh.Buttons.Lamps1.!SD = @[Common.703.SD] +Entities.gmod_subway_ezh.Buttons.Lamps1.!LSN = @[Common.ALL.SN] +Entities.gmod_subway_ezh.Buttons.Lamps1.!AV1 = @[Common.ARS.AV1] +Entities.gmod_subway_ezh.Buttons.Lamps1.!RRP = @[Common.ALL.RP] +Entities.gmod_subway_ezh.Buttons.Lamps1.!KT = @[Common.ARS.KT] +Entities.gmod_subway_ezh.Buttons.Lamps1.!VD = @[Common.ARS.VD] +Entities.gmod_subway_ezh.Buttons.Lamps1.!RS = @[Common.ARS.RS] +Entities.gmod_subway_ezh.Buttons.Lamps1.!LN = @[Common.ARS.LN] +Entities.gmod_subway_ezh.Buttons.Lamps2.!RRP2 = @[Common.ALL.RP] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LPU2 = @[Common.707.SEQ] +Entities.gmod_subway_ezh.Buttons.Lamps2.!VD2 = @[Common.ARS.VD] +Entities.gmod_subway_ezh.Buttons.Lamps2.!KT2 = @[Common.ARS.KT] +Entities.gmod_subway_ezh.Buttons.Lamps2.!AB2 = @[Common.ARS.AB] +Entities.gmod_subway_ezh.Buttons.Lamps2.!SD2 = @[Common.703.SD] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LN2 = @[Common.ARS.LN] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LSN2 = @[Common.ALL.SN] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU16Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_ezh.Buttons.Main1.1:ALSFreqToggle = @[Common.ARS.Freq]@[Common.ARS.FreqD] +Entities.gmod_subway_ezh.Buttons.Main1.1:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU6KToggle = @[Common.ALL.KDLPK] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh.Buttons.Main1.1:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh.Buttons.Main1.1:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh.Buttons.Main1.1:R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU16Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_ezh.Buttons.Main2.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh.Buttons.Main2.2:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU6KToggle = @[Common.ALL.KDLPK] +Entities.gmod_subway_ezh.Buttons.Main2.2:ALSFreqToggle = @[Common.ARS.Freq]@[Common.ARS.FreqD] +Entities.gmod_subway_ezh.Buttons.Main2.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh.Buttons.Main2.2:R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_ezh.Buttons.HelperPanel.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.HelperPanel.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_ezh.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_ezh.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_ezh.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_ezh.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_ezh.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] +Entities.gmod_subway_ezh.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_ezh.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_ezh.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] +Entities.gmod_subway_ezh.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_ezh.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_ezh.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_ezh.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] +Entities.gmod_subway_ezh.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] +Entities.gmod_subway_ezh.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_ezh.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] +Entities.gmod_subway_ezh.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] +#gmod_subway_ezh1 +Entities.gmod_subway_ezh1.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh1.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh1.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh1.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh1.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh1.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh1.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh1.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh1.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh1.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh1.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh1.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh1.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh1.Buttons.AV1.VU3Toggle = @[Common.703.VU3] +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.!SD = @[Common.703.SD] +Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh1.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh1.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh1.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh1.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh1.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh1.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh1.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh1.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh1.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_ezh1.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh1.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh1.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_ezh1.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh1.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] +Entities.gmod_subway_ezh1.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] +#gmod_subway_ez3 +Entities.gmod_subway_ezh3.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh3.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh3.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh3.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh3.Buttons.AV1.VU3Toggle = @[Common.703.VU3] +Entities.gmod_subway_ezh3.Buttons.RUM.RUMToggle = @[Common.ALL.RCARS] +Entities.gmod_subway_ezh3.Buttons.KRR.KRRSet = @[Common.703.KRR] +Entities.gmod_subway_ezh3.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_ezh3.Buttons.VUHelper.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSchemeOffSet = @[Common.710.SAMMSchemeOff] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMStartSet = @[Common.710.SAMMStart] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMResetSet = @[Common.710.SAMMReset] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMXTLamp = @[Common.710.SAMMXTLamp] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal1 = @[Common.ALL.Unsused1] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal2 = @[Common.ALL.Unsused1] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMOnToggle = @[Common.710.SAMMOn] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMUnitToggle = @[Common.710.SAMMUnit] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMX2Toggle = @[Common.710.SAMMX2] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMAheadToggle = @[Common.710.SAMMAhead] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMAcceptToggle = @[Common.710.SAMMAccept] +Entities.gmod_subway_ezh3.Buttons.Main.V1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh3.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh3.Buttons.Main.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh3.Buttons.Main.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_ezh3.Buttons.Main.VU14Toggle = @[Common.ALL.VUS] +Entities.gmod_subway_ezh3.Buttons.Main.GLightsToggle = @[Common.ALL.GaugeLights] +Entities.gmod_subway_ezh3.Buttons.Main.VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_ezh3.Buttons.Main.V4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh3.Buttons.Main.V5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh3.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_ezh3.Buttons.Main.KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh3.Buttons.Main.KBSet = @[Common.ARS.KB] +Entities.gmod_subway_ezh3.Buttons.Main.RKLamp = @[Common.710.RK] +Entities.gmod_subway_ezh3.Buttons.Main.ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh3.Buttons.Main.R_UNchToggle = @[Common.ALL.UNCh] +Entities.gmod_subway_ezh3.Buttons.Main.V2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh3.Buttons.Main.R_RadioToggle = @[Common.ALL.R_Radio] +Entities.gmod_subway_ezh3.Buttons.Main.ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh3.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh3.Buttons.Main.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_ezh3.Buttons.Main.PLightsToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_ezh3.Buttons.Main.V10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh3.Buttons.Main.PLightsToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_ezh3.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh3.Buttons.Main.KU12Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh3.Buttons.Main.KAHSet = @[Common.ALL.KAH] +Entities.gmod_subway_ezh3.Buttons.Main.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_ezh3.Buttons.Main.KU10Set = @[Common.ALL.KRP] +Entities.gmod_subway_ezh3.Buttons.Main.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_ezh3.Buttons.Main.R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_ezh3.Buttons.Main.!AnnPlay = @[Common.ALL.AnnPlay] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.V6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.V3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_ezh3.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] +Entities.gmod_subway_ezh3.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] +Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh3.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh3.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh3.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh3.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh3.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh3.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh3.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_ezh3.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_ezh3.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] +Entities.gmod_subway_ezh3.Buttons.Panel.!L04 = @[Common.ARS.04] +Entities.gmod_subway_ezh3.Buttons.Panel.!L0 = @[Common.ARS.0] +Entities.gmod_subway_ezh3.Buttons.Panel.!L40 = @[Common.ARS.40] +Entities.gmod_subway_ezh3.Buttons.Panel.!L60 = @[Common.ARS.60] +Entities.gmod_subway_ezh3.Buttons.Panel.!L70 = @[Common.ARS.70] +Entities.gmod_subway_ezh3.Buttons.Panel.!L80 = @[Common.ARS.80] +Entities.gmod_subway_ezh3.Buttons.Panel.!LKT = @[Common.ARS.KT] +Entities.gmod_subway_ezh3.Buttons.Panel.!LSN = @[Common.ALL.SN] +Entities.gmod_subway_ezh3.Buttons.Panel.!LKVD = @[Common.ARS.VD] +Entities.gmod_subway_ezh3.Buttons.Panel.!LRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh3.Buttons.Panel.!LPU = @[Common.ALL.PU] +Entities.gmod_subway_ezh3.Buttons.Panel.!LSD = @[Common.703.SD] +Entities.gmod_subway_ezh3.Buttons.Panel.!Speedometer = @[Common.ALL.Speedometer] +Entities.gmod_subway_ezh3.Buttons.Panel.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh3.Buttons.Panel.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh3.Buttons.Panel.!HighVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_ezh3.Buttons.Panel.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh3.Buttons.Panel.!BatteryVoltage = @[Common.ALL.BatteryVoltage] +#gmod_subway_em508t +Entities.gmod_subway_em508t.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_em508t.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_em508t.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_em508t.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_em508t.Buttons.AV1.VU3Toggle = @[Common.703.VU3] +Entities.gmod_subway_em508t.Buttons.VU14.VU14Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_em508t.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_em508t.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_em508t.Buttons.Main.KU12Set = @[Common.ALL.KDL] +Entities.gmod_subway_em508t.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_em508t.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_em508t.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_em508t.Buttons.Main.V2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_em508t.Buttons.Main.V1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_em508t.Buttons.Main.V4Set = @[Common.703.LOn] +Entities.gmod_subway_em508t.Buttons.Main.V5Set = @[Common.703.LOff] +Entities.gmod_subway_em508t.Buttons.Main.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_em508t.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_em508t.Buttons.Main.V10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_em508t.Buttons.Main.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_em508t.Buttons.Main.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_em508t.Buttons.Main.!SD = @[Common.703.SD] +Entities.gmod_subway_em508t.Buttons.HelperPanel.V6Set = @[Common.ALL.KDL] +Entities.gmod_subway_em508t.Buttons.HelperPanel.V3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_em508t.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_em508t.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_em508t.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_em508t.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_em508t.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_em508t.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_em508t.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_em508t.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_em508t.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_em508t.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_em508t.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_em508t.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_em508t.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] +#Spawner: +Entities.gmod_subway_81-702.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-702.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-702.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-702.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-702.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_81-702.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-702.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-702.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-703.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-703.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-703.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-703.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-703.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_81-703.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-703.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-703.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_ezh.Spawner.TrainType.Name = @[Spawner.707.Type] +Entities.gmod_subway_ezh.Spawner.TrainType.1 = @[Spawner.707.Type1] +Entities.gmod_subway_ezh.Spawner.TrainType.2 = @[Spawner.707.Type2] +Entities.gmod_subway_ezh.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_ezh.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_ezh.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_ezh.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_ezh.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_ezh.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_ezh.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_ezh.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_ezh.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_ezh.Spawner.EWagons.Name = @[Spawner.502.EWagons] +Entities.gmod_subway_ezh3.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_ezh3.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_ezh3.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_ezh3.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_ezh3.Spawner.Announcer.1 = @[Spawner.710.RRI] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/de_717.lua b/lua/metrostroi_data/languages/de_717.lua new file mode 100644 index 0000000..db30417 --- /dev/null +++ b/lua/metrostroi_data/languages/de_717.lua @@ -0,0 +1,1137 @@ +return [[ +#81-717 +[de] +#Cameras: +Train.717.Breakers = Automatischer Trennschalter +Train.717.VB = Batterie und RC +Train.717.VBD = VBD und UPPS +Train.717.VRD = VRD +Train.717.SOSD = SOSD +Train.717.PUAV = PUAV +Train.717.PA = PA +Train.717.PAScreen = PA Bildschirm +Train.714.Shunt = Rangiersteuerung und Führerbremsventil +#Spawner +Spawner.717.Line2 = MPL Triebfahrzeug +Spawner.717.Line4 = PBL Triebfahrzeug +Spawner.717.Line5 = FPL Triebfahrzeug +Spawner.717.Type = Triebfahrzeugtyp +Spawner.717.BodyType = Wagenkasten +Spawner.717.MVM = MVM +Spawner.717.LVZ = LVZ +Spawner.717.MaskType = Maske +Spawner.717.CranType = Führerbremsventil +Spawner.717.LampType = Lampen +Spawner.717.Lamp1 = LPV-02 +Spawner.717.Lamp2 = LLV-01 +Spawner.717.SeatType = Sitze +Spawner.717.ARS = ARS Anzeigetyp +Spawner.717.RingType = ARS Warnton +Spawner.717.BPSNType = BPSN +#######Buttons########### +Train.Buttons.RZP = BPSN Sicherung des Umformers +#Common +Common.717.VBD = ASNP Türblockierung +Common.717.UPPS = UPPS Systemschalter +Common.717.BPSN = BPSN: Zentrale Energieversorgung +Common.717.ARS13V = ARS 13V: ARS prüfung der stabilisierten Spannung +Common.717.Radio13V = Funkstabilisierte 13V Spannungsprüfung +Common.717.LVD = LVD: 1. Lampe Motoren aktiv +Common.717.LHRK = LHRK: 2. Lampe Schaltwerk dreht sich +Common.717.LST = LST: 6. Lampe Bremslicht +Common.717.KVC = LKVC: Hilfsstromkreise Schützlampe (Hochspannung ist nicht vorhanden) +Common.717.GLEB = GLEB: Störung! +Common.717.KVP = LKVP: Hochspannungsumformer +Common.717.LSP = LSP: Feueralarm +Common.717.LEKK = LEKK: Schaltkastenanzeige +Common.717.LPU = LPU: Anzeige für reduzierte RUT-Einstellungen +Common.717.OtklBV = Schnellschalter deaktivieren (BV) +Common.717.OtklBVK = Schnellschalterabdeckung +Common.717.ConverterProtection = Netztschutztaste +Common.717.VZ1 = VZ1: Pneumatisches Ventil â„–1 +Common.717.VL1 = Kontrollleuchte für Lüftung ohne Einschluss +Common.717.V13 = Notbelüftung +Common.717.V11 = 1. Lüftungsgruppenschalter +Common.717.V12 = 2. Lüftungsgruppenschalter +Common.717.RZPL = RZP: Power supply protection relay +Common.717.VPAOn = VPA: Netztschutzrelais +Common.717.VPAOff = VPA: Triebfahrzeug abschalten +Common.717.VZD = VZD: Türsteuerung (Türen schließen) +Common.717.A53 = A53: Hilfsschütz +Common.717.A56 = A56: Batterie +Common.717.A54 = A54: Traktionssteuerung +Common.717.A17 = A17: Türen, weiße Notscheinwerfer +Common.717.A44 = A44: Notsteuerung, Notkompressor, ARS-Notstromversorgung +Common.717.A39 = A39: Zugstart über Notsteuerung +Common.717.A70 = A70: RKTT Automatikmodus +Common.717.A14 = A14: Notstartrelais +Common.717.A74 = A74: Zugsicherung zurücksetzen +Common.717.A26 = A26: Niederfrequenzverstärker +Common.717.AR63 = AР63: Radiosender +Common.717.AS1 = AС1: Gegensprechanlage, ASNP +Common.717.A13 = A13: Türstatus +Common.717.A21 = A21: Türsteuerung +Common.717.A31 = A31: Linke Türen öffnen +Common.717.A32 = A32: Rechte Türen öffnen +Common.717.A16 = A16: Türen Schließen +Common.717.A12 = A12: Zwangsschließen +Common.717.A24 = A24: Ladekontrolle +Common.717.A49 = A49: Notbeleuchtung +Common.717.A27 = A27: Innenraumbeleuchtung, Kabinenbeleuchtung, Bremssignalisierung, grüne RP-Lampe +Common.717.A72 = A72: Pneumatikventil â„–1 synchronisieren +Common.717.A50 = A50: Lichtschütz +Common.717.AV3 = AÐ’3: Notbelüftungsleistung +Common.717.AV3S = AÐ’3: Notstromversorgung der Funkstation +Common.717.AV2 = AÐ’2: Hauptlüftungsleistung +Common.717.AV4 = AÐ’4: 1. Lüftungsgruppensteuerung +Common.717.AV5 = AÐ’5: 2. Lüftungsgruppensteuerung +Common.717.AV6 = AÐ’6: Notlüftungsgruppensteuerung +Common.717.AV1 = AÐ’1: Lüftungssteuerung, Lüftungssignalisierung, Kabinenbelüftung +Common.717.A29 = A29: Zugspitzenlicht +Common.717.A46 = A46: Abgedunkelte Scheinwerfer (1. Gruppe) +Common.717.A47 = A47: Fernlicht (2. Gruppe) +Common.717.A71 = A71: RV-3-Stromversorgung von Steuerung und ARS +Common.717.A7 = A7: rechtes Schlusslicht +Common.717.A9 = A9: linkes Schlusslicht +Common.717.A84 = @[Common.ALL.VU] +Common.717.A8 = A8: Pneumatikventil â„–2 +Common.717.A52 = A52: Pneumatisches Ventil durch das Aufmerksamkeitspedal +Common.717.A19 = A19: Wagen RV-3 +Common.717.A48 = A48: Aufmerksamkeitspedal, RPB, Haupt-ARS-Leistung +Common.717.A10 = A10: Luftpressersteuerung +Common.717.A22 = A22: Kompressorschütz +Common.717.A30 = A30: Servomotorleistung des Rheostat-Reglers (SDRK) +Common.717.A1 = A1: Fahrmodus +Common.717.A2 = A2: Rheostat-Reglersteuerung +Common.717.A3 = A3: X-3 +Common.717.A4 = A4: Rückwärts fahren +Common.717.A5 = A5: Vorwärts fahren +Common.717.A6 = A6: Bremse +Common.717.A18 = A18: Schutz zurückgesetzt +Common.717.A73 = A73: Störung +Common.717.A20 = A20: LK-2, LK-5 +Common.717.A25 = A25: Manuelles Bremsen +Common.717.A11 = A11: Geräteraum und Kabinenbeleuchtung +Common.717.A37 = A37: Netzschutzrelais zurückgesetzt +Common.717.A45 = A45: BPSN Steuerung +Common.717.A38 = A38: Wagenstromkreis-Störmeldeleuchte +Common.717.A51 = A51: KPP- und KVP-Schütze +Common.717.A65 = A65: Sekundärer BPSN-Umformer +Common.717.A66 = A66: BV deaktivieren +Common.717.A42 = A42: 75V ARS +Common.717.A43 = A43: 12V ARS +Common.717.A432 = A43: EPK Steuerung +Common.717.A41 = A41: Pneumatikventil â„–2 durch ARS +Common.717.A40 = A40: Bremslicht +Common.717.A75 = A75: Führerstandsheizung +Common.717.A76 = A76: Feueralarm +Common.717.A60 = A60: Motor im Betrieb +Common.717.A58 = A58: KAH-1 +Common.717.A57 = A57: Rotationslampe für Rheostat-Regler +Common.717.A59 = A59: KAH-2 +Common.717.A28 = A28: Thyristorregler Steuergerät +Common.717.A55 = A55: Rheostat-Regler synchron +Common.717.A68 = A68: Stromabnehmersteuerung +Common.717.A80 = A80: BV aktiv +Common.717.A81 = A81: BV Steuerung +Common.717.A58PU = A58: PUAV Leistung +Common.717.A59PU = A59: PUAV Steuerung +Common.717.A61PU = A61: PUAV Wendeschlüsselsteuerung +Common.717.A58PA = A58: PA Strom +Common.717.A59PA = Ð59: @[Common.ALL.Unsused1] +Common.717.A61PA = A61: PA Wendeschlüsselsteuerung +Common.717.A78 = A78: Vordertüren steuern +Common.717.ABK = A-VK: Steuerung der Kabinenklimaanlage +Common.717.A81 = A81: BV Steuerung +Common.717.A23 = A23: Start des Kompressors +Common.717.A15 = A15: Notfallbeleuchtung +Common.717.AIS = AIS: Leistungsschalter für Geschwindigkeitssensor +Common.717.RC2 = RC-2: Lasttrennschalter für Autodrive-System +Common.717.VAU = VAU: Autodrive-Systemschalter +Common.717.LampDV = DV: Störung des Rotationssensors +Common.717.ARSL20 = Geschwindigkeitsüberwachung 20 km/h +Common.717.ARSL40 = @[Common.ARS.40] +Common.717.ARSL60 = @[Common.ARS.60] +Common.717.ARSL70 = @[Common.ARS.70] +Common.717.ARSL80 = @[Common.ARS.80] +Common.PUAV.K16 = LK16: Stromverfügbarkeit am 16. Draht (Türen schließen) +Common.PUAV.OS = LOS: PUAV-Geschwindigkeitsbegrenzungsmodus +Common.PUAV.AVT = LAVT: PUAV-Autofahrmodus +Common.PUAV.RS = LRS: PUAV-Geschwindigkeitsregelungsmodus +Common.PUAV.KI1 = LKI1: 1. PUAV-Subset-Störungsanzeige +Common.PUAV.KI2 = LKI2: 2. PUAV-Subset-Störungsanzeige +Common.717.KH = KH3: Aktivieren Sie den X-3-Modus über das Autodrive-System +Common.717.KSZD = KSZD: Das Schließen der Türen genehmigen +Common.717.VAV = @[Common.ALL.VAV] +Common.717.PAM = PA-M +Common.717.PAKSDM = PA-KSD-M +Common.PA.P = P +Common.PA.F = F +Common.PA.Up = Hoch +Common.PA.M = M +Common.PA.Left = links +Common.PA.Down = runter +Common.PA.Right = rechts +Common.PA.Esc = Abbruch +Common.PA.Enter = Enter +Common.714.Start = Starten der Fahrmotoren +Common.714.RV = Richtungsschalter +#gmod_subway_81-717 +Entities.gmod_subway_81-717_mvm.Buttons.Battery_C.1:UOSToggle = @[Common.ALL.UOS] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_R.2:UOSToggle = @[Common.ALL.UOS] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_C.1:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_R.2:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_C.1:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_R.2:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_mvm.Buttons.VBD_C.1:VBDToggle = @[Common.717.VBD] +Entities.gmod_subway_81-717_mvm.Buttons.VBD_R.2:VBDToggle = @[Common.717.VBD] +Entities.gmod_subway_81-717_mvm.Buttons.VBD_C.1:UPPS_OnToggle = @[Common.717.UPPS] +Entities.gmod_subway_81-717_mvm.Buttons.VBD_R.2:UPPS_OnToggle = @[Common.717.UPPS] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.RezMKSet = @[Common.ALL.RMK] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.ARS13Set = @[Common.717.ARS13V] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.!BatteryVoltage = @[Common.ALL.BatteryVoltage] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARSOch = @[Common.ARS.04] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLSD1 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLSD2 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLHRK = @[Common.717.LHRK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampRP = @[Common.ALL.RP] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLSN = @[Common.ALL.SN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLN = @[Common.ARS.LN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLKVC = @[Common.717.KVC] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLRS = @[Common.ARS.RS] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLVD = @[Common.717.LVD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLST = @[Common.717.LST] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARSOch = @[Common.ARS.04] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLSD1 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLSD2 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLVD = @[Common.717.LVD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLHRK = @[Common.717.LHRK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLST = @[Common.717.LST] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampRP = @[Common.ALL.RP] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLSN = @[Common.ALL.SN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLKVC = @[Common.717.KVC] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLEKK = @[Common.717.GLEB] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLN = @[Common.ARS.LN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLRS = @[Common.ARS.RS] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LSD = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LOch = @[Common.ARS.0]\n@[Common.ARS.04] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LN = @[Common.ARS.LN]\n@[Common.ARS.40] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!60 = @[Common.ARS.60]\n@[Common.ARS.80] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!70 = @[Common.ARS.70]\n@[Common.717.LHRK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LEKK = @[Common.717.LEKK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LPU = @[Common.717.LPU] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LKVC = @[Common.717.KVC] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LVD = @[Common.717.LVD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LST = @[Common.717.LST] +Entities.gmod_subway_81-717_mvm.Buttons.Block3.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-717_mvm.Buttons.Block3.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_UNchToggle = @[Common.ALL.UNCh] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_ZSToggle = @[Common.ALL.ES] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_RadioToggle = @[Common.ALL.R_Radio] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.1:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.1:KVTRSet = @[Common.ARS.KVTR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.2:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.2:KVTRSet = @[Common.ARS.KVTR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!L1Light = @[Common.717.VL1] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.V13Toggle = @[Common.717.V13] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VUD1Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!GreenRPLight = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!AVULight = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!LKVPLight = @[Common.717.KVP] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!SPLight = @[Common.717.LSP] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OtklBVSet = @[Common.717.OtklBV] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OtklBVKToggle = @[Common.717.OtklBVK] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.V11Toggle = @[Common.717.V11] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.V12Toggle = @[Common.717.V12] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ARSRToggle = @[Common.ALL.ARSR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ALSFreqToggle = @[Common.ARS.Freq] @[Common.ARS.FreqU] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.L_3Toggle = @[Common.ALL.PanelLights] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VPToggle = @[Common.ARS.VP] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.L_4Toggle = @[Common.ALL.VF] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.VADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KRPSet = @[Common.ALL.KRP] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KAHSet = @[Common.ALL.KAH] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KAHKToggle = @[Common.ALL.KAHK] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.!PNT = @[Common.ALL.BrT] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.!PNW = @[Common.ALL.BrW] +Entities.gmod_subway_81-717_mvm.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-717_mvm.Buttons.HVMeters.!HighVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_C.SAB1Toggle = @[Common.BZOS.On] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_C.!VH1 = @[Common.BZOS.VH1] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_C.!VH2 = @[Common.BZOS.VH2] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_R.1:SAB1Toggle = @[Common.BZOS.On] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_R.1:!VH1 = @[Common.BZOS.VH1] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_R.1:!VH2 = @[Common.BZOS.VH2] +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_C.PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_C.PVK+ = @[Common.CabVent.PVK+] +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_R.1:PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_R.1:PVK+ = @[Common.CabVent.PVK+] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA23 = @[Common.IGLA.Button23] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA3Set = @[Common.IGLA.Button3] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA4Set = @[Common.IGLA.Button4] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.!IGLAFire = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA23 = @[Common.IGLA.Button23] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA3Set = @[Common.IGLA.Button3] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA4Set = @[Common.IGLA.Button4] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:!IGLAFire = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A26Toggle = @[Common.717.A26] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AR63Toggle = @[Common.717.AR63] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AS1Toggle = @[Common.717.AS1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV3Toggle = @[Common.717.AV3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV2Toggle = @[Common.717.AV2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV4Toggle = @[Common.717.AV4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV5Toggle = @[Common.717.AV5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV6Toggle = @[Common.717.AV6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A9Toggle = @[Common.717.A9] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A43Toggle = @[Common.717.A43] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A76Toggle = @[Common.717.A76] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A60Toggle = @[Common.717.A60] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A58Toggle = @[Common.717.A58] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A59Toggle = @[Common.717.A59] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A28Toggle = @[Common.717.A28] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A26Toggle = @[Common.717.A26] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:AR63Toggle = @[Common.717.AR63] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:AS1Toggle = @[Common.717.AS1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A76Toggle = @[Common.717.A76] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A43Toggle = @[Common.717.A43] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A28Toggle = @[Common.717.A28] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AISToggle = @[Common.717.AIS] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A80Toggle = @[Common.717.A80] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV2Toggle = @[Common.717.AV2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV3Toggle = @[Common.717.AV3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV4Toggle = @[Common.717.AV4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV5Toggle = @[Common.717.AV5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV6Toggle = @[Common.717.AV6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A81Toggle = @[Common.717.A81] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A9Toggle = @[Common.717.A9] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A68Toggle = @[Common.717.A68] +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-717_mvm.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-717_mvm.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] +Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle = @[Common.ALL.DriverValveDisconnect] +Entities.gmod_subway_81-717_mvm.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-717_mvm.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-717_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-717_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_mvm.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-717_mvm.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-717_mvm.Buttons.OtsekDoor1.OtsekDoor1 = @[Common.ALL.OtsekDoor1] +Entities.gmod_subway_81-717_mvm.Buttons.OtsekDoor2.OtsekDoor2 = @[Common.ALL.OtsekDoor2] +Entities.gmod_subway_81-717_mvm.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_81-717_mvm.Buttons.EPVDisconnect.EPKToggle = @[Common.ALL.EPV] +Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +#gmod_subway_81-717_lvz +#Buttons: +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:RC2Toggle = @[Common.717.RC2] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:RC2Toggle = @[Common.717.RC2] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:VAUToggle = @[Common.717.VAU] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:VAUToggle = @[Common.717.VAU] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-717_lvz.Buttons.VRD_C.1:VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-717_lvz.Buttons.SOSD_C.1:VSOSDToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-717_lvz.Buttons.SOSD_R.2:VSOSDToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.ARS13Set = @[Common.717.ARS13V] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.Radio13Set = @[Common.717.Radio13V] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.!BatteryVoltage = @[Common.ALL.BatteryVoltage] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSOch = @[Common.ARS.N4] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLSD1 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLSD2 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLVD = @[Common.ALL.L1w] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLHRK = @[Common.ALL.L2w] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLST = @[Common.ALL.L6w] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLRD = @[Common.ARS.LRD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampRP = @[Common.ALL.RP] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLSN = @[Common.ALL.SN] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampDV = @[Common.717.LampDV] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!SpeedFact1 = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!SpeedFact2 = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL20 = @[Common.717.ARSL20] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL40 = @[Common.717.ARSL40] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL60 = @[Common.717.ARSL60] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL70 = @[Common.717.ARSL70] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL80 = @[Common.717.ARSL80] +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!NMPressureLow2 = @[Commom.NMnUAVA.NMPressureLow] +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!UAVATriggered2 = @[Commom.NMnUAVA.UAVATriggered] +Entities.gmod_subway_81-717_lvz.Buttons.USS1.!NMPressureLow = @[Commom.NMnUAVA.NMPressureLow] +Entities.gmod_subway_81-717_lvz.Buttons.USS1.!UAVATriggered = @[Commom.NMnUAVA.UAVATriggered] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OK16 = @[Common.PUAV.K16] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OLRS = @[Common.PUAV.RS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OKI1 = @[Common.PUAV.KI1] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OKI2 = @[Common.PUAV.KI2] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OOS = @[Common.PUAV.OS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OAVT = @[Common.PUAV.AVT] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:KHSet = @[Common.717.KH] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:KSZDSet = @[Common.717.KSZD] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:VAVToggle = @[Common.717.VAV] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:VZPToggle = @[Common.ALL.VZP] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!K16 = @[Common.PUAV.K16] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!OS = @[Common.PUAV.OS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!AVT = @[Common.PUAV.AVT] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!LRS = @[Common.PUAV.RS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!KI1 = @[Common.PUAV.KI1] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!KI2 = @[Common.PUAV.KI2] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARSOch = @[Common.ARS.N4] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.KHSet = @[Common.717.KH] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.KSZDSet = @[Common.717.KSZD] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.VAVToggle = @[Common.717.VAV] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.VZPToggle = @[Common.ALL.VZP] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMPSet = @[Common.717.PAM]: @[Common.PA.P] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMFSet = @[Common.717.PAM]: @[Common.PA.F] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMUpSet = @[Common.717.PAM]: @[Common.PA.Up] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMMSet = @[Common.717.PAM]: @[Common.PA.M] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMLeftSet = @[Common.717.PAM]: @[Common.PA.Left] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMDownSet = @[Common.717.PAM]: @[Common.PA.Down] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMRightSet = @[Common.717.PAM]: @[Common.PA.Right] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM1Set = @[Common.717.PAM]: 1 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM2Set = @[Common.717.PAM]: 2 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM3Set = @[Common.717.PAM]: 3 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM4Set = @[Common.717.PAM]: 4 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM5Set = @[Common.717.PAM]: 5 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM6Set = @[Common.717.PAM]: 6 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM7Set = @[Common.717.PAM]: 7 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM8Set = @[Common.717.PAM]: 8 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM9Set = @[Common.717.PAM]: 9 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMEscSet = @[Common.717.PAM]: @[Common.PA.Esc] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM0Set = @[Common.717.PAM]: 0 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMEnterSet = @[Common.717.PAM]: @[Common.PA.Enter] +Entities.gmod_subway_81-717_lvz.Buttons.PAM.2:KSZDSet = @[Common.717.KSZD] +Entities.gmod_subway_81-717_lvz.Buttons.PAM.2:VZPToggle = @[Common.ALL.VZP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:R_UPOToggle = @[Common.ALL.UPO] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!OhSigLamp1 = @[Common.BZOS.Engaged] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:VUD1Toggle = @[Common.717.VZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!GreenRPLight1 = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!AVULight1 = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!LKVPLight1 = @[Common.717.KVP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!SPLight1 = @[Common.717.LSP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:L_3Toggle = @[Common.ALL.PanelLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:OhrSigToggle = @[Common.BZOS.On] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:R_UPOToggle = @[Common.ALL.UPO] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!OhSigLamp2 = @[Common.BZOS.Engaged] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VUD1Toggle = @[Common.717.VZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!KDLLight2 = @[Common.ALL.KDLL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!KDLRLight2 = @[Common.ALL.KDLL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!GreenRPLight2 = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!RZPLight2 = @[Common.717.RZPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!LKVPLight2 = @[Common.717.KVP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:OhrSigToggle = @[Common.BZOS.On] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VPAOnSet = @[Common.717.VPAOn] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VPAOffSet = @[Common.717.VPAOff] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!AVULight2 = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:L_3Toggle = @[Common.ALL.PanelLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!RZPLight1 = @[Common.717.RZPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:R_UPOToggle = @[Common.ALL.UPO] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!SPLight3 = @[Common.717.LSP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!AVULight3 = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:VUD1Toggle = @[Common.717.VZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!GreenRPLight3 = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!RZPLight3 = @[Common.717.RZPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!LKVPLight3 = @[Common.717.KVP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.1:VPAOnSet = @[Common.717.VPAOn] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.1:VPAOffSet = @[Common.717.VPAOff] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:OVTToggle = @[Common.ALL.VOVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:L_3Toggle = @[Common.ALL.PanelLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:L_4Toggle = @[Common.ALL.VF] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:VADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:KRPSet = @[Common.ALL.KRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:RezMKSet = @[Common.ALL.RMK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.!1:PNT = @[Common.ALL.BrT] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:L_4Toggle = @[Common.ALL.VF] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:VADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:KRPSet = @[Common.ALL.KRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:RezMKSet = @[Common.ALL.RMK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.!KDPLight2 = @[Common.ALL.KDPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.!2:PNT = @[Common.ALL.BrT] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_C.VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_C.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_C.VOPDSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_R.1:VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_R.1:VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_R.1:VOPDSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-717_lvz.Buttons.CabVent_C.PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-717_lvz.Buttons.CabVent_C.PVK+ = @[Common.CabVent.PVK+] +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_N.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_N.!HighVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_O.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_O.!HighVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A26Toggle = @[Common.717.A26] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AR63Toggle = @[Common.717.AR63] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AS1Toggle = @[Common.717.AS1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AISToggle = @[Common.717.AIS] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AV3Toggle = @[Common.717.AV3S] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A58Toggle = @[Common.717.A58PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A59Toggle = @[Common.717.A59PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A61Toggle = @[Common.717.A61PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:P:A58Toggle = @[Common.717.A58PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:P:A59Toggle = @[Common.717.A59PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:P:A61Toggle = @[Common.717.A61PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A9Toggle = @[Common.717.A9] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A06Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A43Toggle = @[Common.717.A432] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A76Toggle = @[Common.717.A76] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A60Toggle = @[Common.717.A60] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A28Toggle = @[Common.717.A28] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A58Toggle = @[Common.717.A58PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A59Toggle = @[Common.717.A59PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A61Toggle = @[Common.717.A61PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.P:A58Toggle = @[Common.717.A58PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.P:A59Toggle = @[Common.717.A59PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.P:A61Toggle = @[Common.717.A61PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A78Toggle = @[Common.717.A78]@[Common.ALL.Unsused2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.ABKToggle = @[Common.717.ABK]@[Common.ALL.Unsused2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A43Toggle = @[Common.717.A432] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A28Toggle = @[Common.717.A28] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.AISToggle = @[Common.717.AIS] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.AV3Toggle = @[Common.717.AV3S] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A60Toggle = @[Common.717.A60] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A9Toggle = @[Common.717.A9] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber3+ = @[Common.ALL.RouteNumber3+] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber3- = @[Common.ALL.RouteNumber3-] +Entities.gmod_subway_81-717_lvz.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle = @[Common.ALL.DriverValveDisconnect] +Entities.gmod_subway_81-717_lvz.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-717_lvz.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-717_lvz.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-717_lvz.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-717_lvz.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-717_lvz.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-717_lvz.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-717_lvz.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_lvz.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_lvz.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-717_lvz.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-717_lvz.Buttons.OtsekDoor1.OtsekDoor1 = @[Common.ALL.OtsekDoor1] +Entities.gmod_subway_81-717_lvz.Buttons.OtsekDoor2.OtsekDoor2 = @[Common.ALL.OtsekDoor2] +Entities.gmod_subway_81-717_lvz.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_81-717_lvz.Buttons.EPVDisconnect.EPKToggle = @[Common.ALL.EPV] +Entities.gmod_subway_81-717_lvz.Buttons.ParkingBrake.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +#gmod_subway_81-714_mvm +Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-714_mvm.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-714_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-714_mvm.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-714_mvm.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-714_mvm.Buttons.couch_cap_o.CouchCap = @[Common.ALL.CouchCap] +Entities.gmod_subway_81-714_mvm.Buttons.couch_cap.CouchCap = @[Common.ALL.CouchCap] +Entities.gmod_subway_81-714_mvm.Buttons.Battery.VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV2Toggle = @[Common.717.AV2] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV3Toggle = @[Common.717.AV3] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV4Toggle = @[Common.717.AV4] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV5Toggle = @[Common.717.AV5] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A81Toggle = @[Common.717.A81] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV6Toggle = @[Common.717.AV6] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A80Toggle = @[Common.717.A80] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A23Toggle = @[Common.717.A23] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A28Toggle = @[Common.717.A28] +Entities.gmod_subway_81-714_mvm.Buttons.VU.A84Toggle = @[Common.ALL.VU] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.!RZPLight = @[Common.717.RZPL] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.OtklBVSet = @[Common.717.OtklBV] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.StartSet = @[Common.714.Start] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.RV- = @[Common.714.RV] @[Common.ALL.CCW] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.RV+ = @[Common.714.RV] @[Common.ALL.CW] +Entities.gmod_subway_81-714_mvm.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-714_mvm.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-714_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-714_mvm.Buttons.Voltages.!BatteryVoltage = @[Common.ALL.BatteryVoltage] #NEW +Entities.gmod_subway_81-714_mvm.Buttons.Voltages.!BatteryCurrent = @[Common.ALL.BatteryCurrent] #NEW +Entities.gmod_subway_81-714_mvm.Buttons.Pressures.!BCPressure = @[Common.ALL.BLTLPressure] #NEW +Entities.gmod_subway_81-714_mvm.Buttons.Pressures.!BLTLPressure = @[Common.ALL.BCPressure] #NEW +#gmod_subway_81-714_lvz +Entities.gmod_subway_81-714_lvz.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-714_lvz.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-714_lvz.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-714_lvz.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-714_lvz.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-714_lvz.Buttons.couch_cap_o.CouchCap = @[Common.ALL.CouchCap] +Entities.gmod_subway_81-714_lvz.Buttons.couch_cap.CouchCap = @[Common.ALL.CouchCap] +Entities.gmod_subway_81-714_lvz.Buttons.Battery.VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A81Toggle = @[Common.717.A81] +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A80Toggle = @[Common.717.A80] +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A23Toggle = @[Common.717.A23] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A28Toggle = @[Common.717.A28] +Entities.gmod_subway_81-714_lvz.Buttons.VU.A84Toggle = @[Common.ALL.VU] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.!RZPLight = @[Common.717.RZPL] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.StartSet = @[Common.714.Start] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.RV- = @[Common.714.RV] @[Common.ALL.CCW] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.RV+ = @[Common.714.RV] @[Common.ALL.CW] +Entities.gmod_subway_81-714_lvz.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-714_lvz.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-714_lvz.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-714_lvz.Buttons.Voltages.!BatteryVoltage = @[Common.ALL.BatteryVoltage] #NEW +Entities.gmod_subway_81-714_lvz.Buttons.Voltages.!BatteryCurrent = @[Common.ALL.BatteryCurrent] #NEW +Entities.gmod_subway_81-714_lvz.Buttons.Pressures.!BCPressure = @[Common.ALL.BLTLPressure] #NEW +Entities.gmod_subway_81-714_lvz.Buttons.Pressures.!BLTLPressure = @[Common.ALL.BCPressure] #NEW +#Spawner: +Entities.gmod_subway_81-717_mvm.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-717_mvm.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_81-717_mvm_custom.Spawner.Type.Name = @[Spawner.717.Type] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BodyType.Name = @[Spawner.717.BodyType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BodyType.1 = @[Spawner.717.MVM] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BodyType.2 = @[Spawner.717.LVZ] +Entities.gmod_subway_81-717_mvm_custom.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-717_mvm_custom.Spawner.MaskType.Name = @[Spawner.717.MaskType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.Cran.Name = @[Spawner.717.CranType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.Name = @[Spawner.717.LampType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.2 = @[Spawner.717.Lamp1] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.3 = @[Spawner.717.Lamp2] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.Name = @[Spawner.717.SeatType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.2 = @[Common.Spawner.Old] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.3 = @[Common.Spawner.New] +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.Name = @[Spawner.717.ARS] +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.2 = @[Common.Spawner.Type] 1 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.3 = @[Common.Spawner.Type] 2 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.4 = @[Common.Spawner.Type] 3 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.5 = @[Common.Spawner.Type] 4 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.6 = @[Common.Spawner.Type] 5 +Entities.gmod_subway_81-717_mvm_custom.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-717_mvm_custom.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-717_mvm_custom.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.Name = @[Spawner.717.RingType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.2 = @[Common.Spawner.Type] 1 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.3 = @[Common.Spawner.Type] 2 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.4 = @[Common.Spawner.Type] 3 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.5 = @[Common.Spawner.Type] 4 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.6 = @[Common.Spawner.Type] 5 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.7 = @[Common.Spawner.Type] 6 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.8 = @[Common.Spawner.Type] 7 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.9 = @[Common.Spawner.Type] 8 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.Name = @[Spawner.717.BPSNType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.2 = @[Common.Spawner.Type] 1 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.3 = @[Common.Spawner.Type] 2 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.4 = @[Common.Spawner.Type] 3 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.5 = @[Common.Spawner.Type] 4 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.6 = @[Common.Spawner.Type] 5 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.7 = @[Common.Spawner.Type] 6 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.8 = @[Common.Spawner.Type] 7 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.9 = @[Common.Spawner.Type] 8 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.10 = @[Common.Spawner.Type] 9 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.11 = @[Common.Spawner.Type] 10 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.12 = @[Common.Spawner.Type] 11 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.13 = @[Common.Spawner.Type] 12 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.14 = @[Common.Spawner.Type] 13 +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +#Spawner: +Entities.gmod_subway_81-717_lvz.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-717_lvz.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-717_lvz.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-717_lvz.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-717_lvz.Spawner.Type.Name = @[Spawner.Common.EType] +Entities.gmod_subway_81-717_lvz.Spawner.Type.1 = @[Spawner.717.Line2] +Entities.gmod_subway_81-717_lvz.Spawner.Type.2 = @[Spawner.717.Line4] +Entities.gmod_subway_81-717_lvz.Spawner.Type.3 = @[Spawner.717.Line5] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/de_718.lua b/lua/metrostroi_data/languages/de_718.lua new file mode 100644 index 0000000000000000000000000000000000000000..cae3c119c6a002dab2ce9bc3506925fee31b41ff GIT binary patch literal 100184 zcmdsATW=h>a_;8gpN%N6% zx}x{%_Pe9@^Lt9UzAAIQSu`)21H$z0^p8ISgX@|I~Ew)=p-4OGaZMmmZ;#G4>INlTTYx>m*J)hD0C;G(= zy`QzUIiVVzktQfyA^uS6J^DRrcF>l0Lphwb{6JgQh%0Eq8hwL$f2J3ga7oYL^RoGk z-hu6kUcdo7!hcNp_v!b{?1E&rMkS!$u{iXS?lfTTBfWqfW$VvMf0v}Sn^Y2BDEYsd z*M$74E%^`9CDdZAZBeM>l4=JQE(p_ywvO+Kk+VSlkfohJIE0LTq5RLa5_Vg>BJT^z z8+v<4d@CL8ugU#p_qL=hstGK?DIt|o-ZpOdV8uRCP4KJhRx)5qm(dyh7M{&6A#9MB?JzTEOq+y1f+o0rrdN=ef0o>3V$ zt=20|U!&jk=d(*vc(T$*rRV(ZpDBON@h#=~j_@FFNCX=AHuzS_3;zc zisfBCQnMq3r&=V6hLV{)z!0)LT90 zz|z3~{dw&+JBD5|E@tw7$ojt}EMhxhORuOT=p}jq$QpgaQEOB2*|(&q53 zX=%X6x1|5@9gsi#^NY5Z7g?QA`Cx;+S$E%k=q!)Fb(OayKDoTt%@-zI5V#4$;|Yp3~JpqSApV~u=Lcwrd(z$#qRKS-K=PgqcvHQHv1yitm>A7CEx z=5JBVHFW;C|#=;s}-*OfXCR zn#MVE%~j6xR?8l>+5`^*w(OK7t$M1@B=O(qd!H6_-pYrPXP_3O+_Hfbeto*<@|gUV z?TLOmr^wKfm8Tq+;Wa&qg zB*BNYo)`(dtqlSNu<{`3{J?AMje zd_})M@>oEyxM@iR&nRh0+79m>{>LZETdb~M#>|k?6K06}>QugG7BV~onQ0}^I&|xV z9wAMxGmC3Hqa4!`jxUF`RdK`Gx}bjLQS)z9-X6&nHW#CBcnlcfhFiYbF42~N{fO)p zdP%f)#IV9S-Pgt@+`8_yIjJ57qX0xbJ_a=EzBZ!coHp8=piziXU<8kT?Qc{=VEjnB z1$;4WknNn}kaK1~0eY%z92jMv!LPB1;+d_QwT#;>P`xFa41Y{A>~r@p(2m8iaBvrWC#)|ktOCj#kj1@gMr#<&!Ncm@)4RDiMHh2aB) z5UNo$WPW#*>ymuqBjRr(fa+l@1BL2gi-~1`u?dg6Q!FTAYPwumo0at+ma869;(CI+ z1+fQRgVjv4J>m_CWZ5TJkWOLLsRa*5H9Zcd-LxzTo>kg(j`ZjhYKLdekE4~g2kIXaat@}ygcy{bqsy-i=elXNEIg}R z*}_XN%9igB(iT|3G@a3-NL(A{x2t<9g8G!SiO2h}z3?Bng`-9BXe!3~Zd!H-�k9 zTo5&4o%NN0o=rSazZPyWs(6rJ=v3 zt;DmcmEy(~UsNMM9TB{Rv8d)2Dm-(|MOKI!L5I*|qrYBj`#nej<8xO8{Vn|pV`lw^h?zb9tnH%=!=m*G#H3@toM=F2=&KzEgOYrld>3V24&OR^A<@$bYk#sgtb60@Ru&x>c~ zRw8S9^lq(@h+o*k&Mi+J&&c_ZP_Y$597{z8Q}Ui!JszHsx1JkYZH$G^n*XMMzStvM zW>XJlD?NBcqk8y`@M==?oLl}Xo`F+&Hi(6F#}Vl|%)W`zVb%w>y?M&mu&gbfQ5SRM z#XXZ5gM#0k5`EdQtQ($Dk~x;lQPSM%v+x{SC)Ne-W&AdCZZU`F*!tL|pd`%U^11_G zglxZ!)xpnYPhD0a$oKu2_sO#IiUm6*fA32PFP3AL&_z|Id>>8=O?IXA*~ERa);xl+ z(;j&GvwcG9PPJ@PG1pu48_e4yUVce!6+R2ctxrh`m|yirDur*3n7zC$k&*s|)}pxW zyrlc7)s-D81@pYHnLPi6Pv}uG#z$lm@pO*9BLdCioCVDn_!x(*UQpkSxwfN$$T-rD zIW8U9FbpqO?NM|#mK{!~c;V9F*Xr}%r-Tsx(Mc;oNR#*-7x6CjiMnM=L+rL~r>(8$(H^f0@kO7-W-$^a>r^C2X>&IQiLykgNL;pPI1=5$ zq#<$HnBh2d%aMk|Z9B#w8LB02n=l56YU!z*AZ0Fn-Jw=2-eRg{-=WsZe&QPWX;>+M zu{qX(!ef(G9QM@U&*ed3mb^w$1NgXD2MO;Mt1X4MFscLc^L1v@q{OMgj?5~n^|~0f zBa(&jzX!FZhsPoyv707OdzSip90k01-39&!IV~{xvNBaLxIeVos0{A|Y2K ziLVKP=m(F7Fk2YoH3P@9!K{2unufX34;hePWfqT)MMf#QvQ7G6t}(|dN6hQ5Ee)OLRw zF86p9FCSL!t5(LaIXut8RtUR!%r!`-^ow7qonEYBNq_pvzjjMvfxDKiOw)&L!_R>w zgg#r*N?3cQK8|Oca4?Jka3DuVa`Nm7`uMsSU%atDZNX> zCaKeGNpuC=OO!V73{vQ9L5(&aU`+_9d+%SF>^PWiJ!T_LYC&ES53kArpUhnNSH66nT3)2&X6A!m`EucM zLLAGld^th8umkkDg$sCmvvf!&*66uoPLo$$A!_oqw+gz5*QIx6?asK!%W$}nP_0Fq!d$n zEKMJ|hcVdRYAS}Vw;IwPvB!~M@Q7H`UuYi& zMy9U=@g}rL-RF_=Q|h9|7sK1q%Z^5+SreCLzaa}Kt9CH52`U}%Gh_1YfK#Jx6FW2|4L{-+Xg{zH zX<8D)Zu(e7w20dopZ4>gq@65Ntnp>*hLd&HNZ#DWSf^tUJte;jtDDs;jW1zJX(L8( zYRu=dxA;4s@bHG%{;joG|3L`YYQ@R+zh{6bE<9UpcW zQr&MYgA}@$9#>PkC~c^Oyn$_Vgf4E9TyYL&32e~C#RzP|TOD1@fwa6XVl^5(E%O!M zzRlPwubFkNPcz%Pt9|3_YxtRZ>T4PoBF4h=mauWWn%bP93E9_YjvA)eFgb^ZN7jg} zrH>oXdb|C0nuU^n8!?s8E(nyj=NLbw)O(M($C^>JX4_)RSTof|A9hB+DTwS@%3AvN zy6vmfUIS>HPwTL5VXN(t%yt#7D^jw@v7puuoxctl=DbiBy9Vjt+#Ag zA6M5j>ajxkoJIsk)+&XNtR*Gu;r>d$B-(AWh|wGG{7knnKxg+&Y3N*i6I&DZ zB*!4L=X=tSxz_`w#a~4d-C40TEV|uGAH@m^d)6duH6$f#l52&Wtcq9GI7X+tv zV&fO8Uji!p!&n99x8om9@?56~Ca-P&nV#V5Vg>1!=4U!bQQbR-JK(Sn4PzP1lHwVf z@PXoPxbbbBJb%8w;D~;4PA}dq9=6Pqj_B^(Sy)#45AzgWN4;|QI zTI|CL*j#ov23rj~?2>5=wi+^ZjbLN2$p|**C>AkH%tT@AzvXNR5;b#g>6B0bV;!etS#@p{MfM0E~scn~h*@hooCls`F9U4hmx1 za*nBEWr`cAOY*jv%p3fx2W>lFWbgHLE3zOflG;*rY`HD4j%|xp-FN%?IGH{t`v@yn zPO4iZA(xlQ`21Fc_jQ%U=JGM)v0*iHsonw1xqE!z3o*Ax`dSj3yT6ZN4rj8K?Hlg3 zGhcQ*Jq8lU9M=q{l2jqo%9)p73A9Q z8@sWY%$4+w!CZfT8-q^bI`HyxdU{x;z~{bS(VB*Jvj5voFW!w&Nq3uSn73Wn$c|}6 zg=>7_M}}0Taba)OA)OD(o}K*f#w9w3z80x|qEy{eeT3I-lE#mf@c(NO{DMBW-XiXV zxY~l=b*toO{g7^H%B`m+64lE6NZ5zY-IthHls)ug0V{$ex16w!>qRT6E&Ak|ad%^r z7H~lJ38!6P^)=2yx}nc`+p~$#6(#T^+$MyttKr*lcvgOVkEoTDWvn{}cO$}0(%+LV zY|$x9pQ|zET1nA|kE3``C>D-hu_SA_ht}@R+^A%10X;2=$Q8YFBN90t6HizxncJe; zEwZ~}A`X|>v|M8x6IWM$p=j6(+9SD5Hmsx+Hylw|H(O$1e;`b-V5LwkNN?x#vd3I* zRN^0@XXkV!ajD)~ytY0W3a(v>8M5D&(+gLcg<8ADSbnyEYOnPs%b-Hv4KFLrV#)rN zpL%>;jyuV(a!3Car$CRhYvRz0q+ifURb_il+!7v#N!sdhdvf^Es;%afwe&JyQJv+~ zVC+rCtT4_bliiPQJrsQIw0T=_2&tUF@%M#v#~NKJd(®j39*`#7NNLvnf^@Tm7NGKs|GI88l-m}yQ$h%~hjqBl;}LQYc?;j=^zfiU-IzrQ7;w3jra#Bz?)LrGJUMa(m& zW6a$fhIkYoEQQD1euN*R8ui9w%stxmBRsnGWaAMcO-*e)8la6xQx{`;t3D!2PzxhY zu~TXPF*BdfM=?_yd*6a@jCHrS-C~Ipa`ZsuyX(;QpaNO@L zmNFJ4r>SLwmIDxS8b(+qf`a%z;*5x)$Y*KWVIEbAQY=adI=)xrU9hY}+9;_xMM)kH zS_Th@Mc2$g2q&j2#UXZ@?UR)8Pofg)J%o+ZmE?}4G}CktXMYQiA$*b=DM~RYWhgD2 zQKUg`HjYJz6g3fwcN^P|XB5w3;*T(S}8%7u(~%qR>DY8lff6!qiLxhQq)Aa zXy;;MJO@F@De7W;v9dO?a^^S;V=U7z*<&~3Fd}sgCe_$*2$N;T ziCr$$_;47?5@W?KN^@+ZBaLZ0W#T?=l*6qiP}b4RDQjZIodssQip5&uwgbfUFotuFZ| zbG6bEcta@7lr^zpZ>?$jW3h6|nphvw{Q`FlJ&481DQjZ2d;WMGDDP33+B(!r!8t9p zv6`Bi(y~f>DJG{2vaV@%N-O|U*3?sY8Vdt!Y@6bgrLg`${s?+0yyN^$+3AtSs!Cl8 zr|bb3hO@-VNAC4?K6mNFdebizv?19e7fxM+Pn>u&1}9S2zzO}F8*M0sPflG6=jJG! zn^pLPhM6`gg-=dhgHPz^7@SC52j^j@KVnAX+B;I$!1=5PW!QIuT|(*_D7$@oiguRl z-*p?mXGL@cV;q-AU4u)kZL!D5X_{GXM2~eiTdfbmpWNrKg<6nGTZ&H`=S#AlO4{-% z4kyyq!s(vBi^ExR_Ri+hy*eWfXUVl0HqIqQ9YosdJq{<*){;B+lq!7kDGn#n*23ww zpm8`$+E2trcULob^7*(kJ__N~Q>%D^~IK6kBXEK;Pbi`2HG@kq;AQQ=YNw5zGH zNNek9x9!IwE!py2oOZ2#EYgxT--R@NK16aUIUn+rtQ2$U8>#d zD7!XPaK@lS>KZ7quWndO1a;-qwQvp_8w<{IV`J8Tj@Zg)L>bMsMIou1DNAuGr6_wp zZ)0%gn#_2t<$F<^S9|6z9&5Q-I~S|nxzJdooU*0{*z;iFQN7d{DQhC_j`CtzRb#xI zd*$FqyrQ0INvnvuXZnYDmsh0wSa;hiNnUJ_cs#UO`N_+tEBfG)8jy zZ-mrk7k?j>oFxgKkgBBYy7xhc^=UJ^jWBsiz2Ad*DydJK4qFhzQ||c?ou^IGjC37G zs&e`if3u9K<0W}=-FY6C9a5F!X->JP%MPi^VZvQt>6nnJ9Hx2n9ay?PAyr9CL+le) z!<56cIY@R$RSpww;7ivhq$-CAw-%;jLaK6@W`le>q$-K2dxv0*%`DsQ>@(qGe7bq| zxQpHg<2Jk@`c$&rZ4B~NkgA+MZ4Bz~kg6P}_1=S?p3$f-8^S?8AW;oN^) z9sN8TdgPRs`#rjE;+pgx_hR7g;P<5apGb4v-zy#R>wRD9DY2`2?uTF(-gDX<+}C{3 z-dcG@YbH;KcRcg0FkP=(=3l~^kCUx;vU|Hew6Ns%J-G_6pKrbcHm_#%V_gt0-w(!m zKzGMn((No)B(0CxeJwxgStiutjpfwj1x1l@>n!W;f|#-WM5PVpC%0~>{GL;*$g3MF z@2@EO{e-ZZi29#GSUI<{Xx%HTU6^Cgme2*hm0RvuUnk3k6*|iLy0G^7QGI#k<=9<{ z>g&cM7LO@so5TIn=&NstVe}mERJjK~rFN+PirWuQnh*4gJ?h=@%cs=iUs6w_`umvH z>eeUmbcdIhSC$HgpOvGQ74T7qmDKX`vT{gLKcO1CIFY}lB6PP3{?@N6LrbjBNv^g7 zR^m8GEio@AKaj0nr(I^aM+<(=Ia!Ib=>E~C5$?bFIRTEm_1hu~ctyVP`*zH8MencM zQU4`K`v1ylPFsr$8+uB1H_Va0e!lYZ)*GXXYkKj$hlpnEP))ej{eN@IEaqE( zy`@CKP^+#u=SRx!G7(cR*Kek*t5{ND644*F^zw}h@$m2bb+yaRD_8c?&|^#8)|>8k z!|P_J^w+gpa^BiLC;Ni-`r)>=&|cTKHtu21{@S|AEnQ!%oa>ewKmPIakXm0EDdjpV zXNPR?`{q}Y@D=rPC)Cg4v#Xa`r#smXXap7RZG1KM*B2$^?rT$O2&;TWx{lU;PWwP* z#FA2He+~Oe$g9OEb&mgSKMVdk$Ctn?DUHNWkEqxsLbwNt5SI6y<7Ry!FxH@jPUOMJ8 z;HBr+?L+dio{~m?Meq287-c+KNv+c6l?ms&q`F^GOG8_OR|uRhs68s2ZZ1u9NKp$N zyt?0RnT$avDQY3yBR1cXMlpvm2qi@=gzElzV2nYiQZUAxeZUj4fBVE4X4S9An?;Lx zO7V90sW3`2<&zt~L>%FXowpvt8RflAr6U=%ER{#6(n&kF7T{XdX z$JF{Rh`E!tf9|i1za~#e9_P(FE4RGb@2bIqaNn%-?2Dxfc3u26@a2@Z9^F{1@)WqO zEGRa8ME@}B2pzv}bzI_cp?bK})~~~M4}QocREKWby!gdF!!ntYk82Mh{JK_}IdVOQ zTHA+YOBZeA5?=PF*0!p1LUGRkcF5`Xwb-qok9%2ZWu_j^dOXr;Z+nTyDfhJuV^mVt zV060MUgFv8?kpEx-EGU%&vCoU(@@$c0yEB7l!qhy=y;s!z7}Co-eYj8)HSqo%G+Mz z88vqn3!8Y4Vf3hq)Tg}dC7#JCZ+l5W*%x7sk@vWpLE}+&_YsR`#-LPtiHAh9(@+k# znm}2{YEF6EOFWxX-u4oYlJ9E~ZPedmG;{22FMgbSs_@^-Z7=Cqr@HMW9qDwpy`*Cu zdNw)s%#PV9myUG0+g{SK4n0SGHu@a(bgVtxZO|+M!Ld8`XZ~Qyib;cIc$xbX(9koF(lipWDqdc=EY>Q$Yx) zp0bo>k}}ju^|RLN5t;LQEYgxT)QxnS+g|)y>O$Jp)L2ey>uI;`$09A+@?D&Et$r-h zk~ZIkG<`lqaw$0P2rd-3CB z{pTpSd`A3jn%iE6V7130Aq`cvEZ>XTyiRl5OFFCFxzJcv$KLjmj&-WrUeb|vM|rWV z<{#t1hnViB7Z-OrqA6~A31OPzrk4<=DQ{o7|kn5MXWCX8u_Uoh_WnGmKaZl4Kb>fU%79wXq)7w&^|p4||8YPC8U zug^`dFQcyL=Ry)bjGOBB!i&&yP{3zosITXus>-&x)W)EwMf) zsk-dqLcWXRB(=nPob;WBY4`b3-;)Id5%oqW&**R^_|qXZrty&YS$1zQM`f z@;y%4*3YdB)yMyLe{JnjOV_nrJ;B0|y5{t1%@ftuX$ET18C8aHA{EOaCpPmmHaTyv z|GYNQDnF-YjmJXp^jkOemLTBnwK*8EOqY~q|%+>-i? zO2UcWp&Iz}8E#=+7~y5&oXmc#ZkBC~?tJoM=gyyhyi5pFXwyG0ts= zX4%q@W3`)4UYt1d`W@keR@w-CmcnLK&nGuRX`lPV=NkvkI3^Wh$)`L{^Pa?^I1xwr zg-#m27%`LOYWZD8*6F5CWt(DKlPjMclG6!E>w;um4E literal 0 HcmV?d00001 diff --git a/lua/metrostroi_data/languages/de_720.lua b/lua/metrostroi_data/languages/de_720.lua new file mode 100644 index 0000000..1afe2f2 --- /dev/null +++ b/lua/metrostroi_data/languages/de_720.lua @@ -0,0 +1,388 @@ +return [[ +#81-720 +[de] +#######Buttons########### +#Cameras +Train.720.CameraCond = Klimaanlage, Störungsanzeige +Train.720.CameraPPZ = PPZ +Train.720.CameraPV = VPU +Train.720.CameraVityaz = SAU "Vityaz" +Train.720.CameraKRMH = KRMSH- und UAVA-Ventile +Train.720.CameraPVZ = PVZ +#Common +Common.720.SF1 = SF1: Hauptstrom +Common.720.SF2 = SF2: Hauptsteuerung +Common.720.SF3 = SF3: Notsteuerung +Common.720.SF4 = SF4: BARS +Common.720.SF5 = SF5: BUP (Zugsteuergerät) +Common.720.SF6 = SF6: BKCU (Steuerkreiskommutierungseinheit) +Common.720.SF7 = SF7: PPO (ASOTP) +Common.720.SF8 = SF8: Ansager +Common.720.SF9 = SF9: Funk +Common.720.SF10 = SF10: Wagenorientierung +Common.720.SF11 = SF11: Bewegungsrichtung +Common.720.SF12 = SF12: 1. Scheinwerfergruppe +Common.720.SF13 = SF13: 2. Scheinwerfergruppe +Common.720.SF14 = SF14: Schlusslicht +Common.720.SF15 = SF15: @[Common.703.VU3] +Common.720.SF16 = SF16: @[Common.703.VU1] +Common.720.SF17 = SF17: Klimaanlage in der Kabine +Common.720.SF18 = SF18: Spurkranzschmierung +Common.720.SF19 = SF19: Hauptbremshebel +Common.720.SF20 = SF20: Bremshebel Notstrom +Common.720.SF21 = SF21: Türen öffnen +Common.720.SF22 = SF22: Türen schließen +Common.720.SFV1 = SF1: Spannung der Wagensteuerkreise +Common.720.SFV2 = SF2: Spannung der Wagensteuerung +Common.720.SFV3 = SF3: Spannung Traktionsmotoren-Steuergerät +Common.720.SFV4 = SF4: Steuergerät für Fahrmotoren +Common.720.SFV5 = SF5: Steuergerät für Notfahrmotoren +Common.720.SFV6 = SF6: BUTP +Common.720.SFV7 = SF7: Stromversorgung +Common.720.SFV8 = SF8: BV Steuerung +Common.720.SFV9 = SF9: BV Spannung +Common.720.SFV10 = SF10: PPO (ASOTP PCBK) +Common.720.SFV11 = SF11: Luftpresser +Common.720.SFV12 = SF12: Türen schließen +Common.720.SFV13 = SF13: Linke Türen öffnen +Common.720.SFV14 = SF14: Rechte Türen öffnen +Common.720.SFV15 = SF15: letzte Türen +Common.720.SFV16 = SF16: Ansager +Common.720.SFV17 = SF17: Notruf-Gegensprechanlage +Common.720.SFV18 = SF18: @[Common.ALL.Unsused1] +Common.720.SFV19 = SF19: Spannung Innenbeleuchtung +Common.720.SFV20 = SF20: Innenbeleuchtung für Notfälle +Common.720.SFV21 = SF21: Geschwindigkeitsmesser +Common.720.SFV22 = SF22: Federspeicherbremse +Common.720.SFV23 = SF23: 1. Lüftungsgruppensteuerung +Common.720.SFV24 = SF24: 2. Lüftungsgruppensteuerung +Common.720.SFV25 = SF25: 1. Lüftungsgruppenspannung +Common.720.SFV26 = SF26: 2. Lüftungsgruppenspannung +Common.720.SFV27 = SF27: Erregerleistung +Common.720.SFV28 = SF28: Ladekondensatorleistung +Common.720.SFV29 = SF29: Spannungssammler +Common.720.SFV30 = SF30: Linienschema & Innenanzeige +Common.720.SFV31 = SF31: @[Common.ALL.Unsused1] +Common.720.SFV32 = SF32: @[Common.ALL.Unsused1] +Common.720.SFV33 = SF33: @[Common.ALL.Unsused1] +Common.720.VentCMode = Lüftungsmodus +Common.720.VentHMode+ = Heizleistung erhöhen +Common.720.VentHMode- = Heizleistung verringern +Common.720.VentSMode- = Lüftungsleistung erhöhen +Common.720.VentSMode+ = Lüftungsleistung verringern +Common.720.Pant1 = Freigabe der ersten Sammlergruppe +Common.720.Pant2 = Freigabe der zweiten Sammlergruppe +Common.720.Vent1 = 1. Lüftungsgruppe +Common.720.Vent2 = 2. Lüftungsgruppe +Common.720.TorecDoors = letzte Türen +Common.720.BBER = Notfall BBE +Common.720.BBE = BBE: Stromversorgung +Common.720.CabLightStrength = Helligkeit der Kabinenbeleuchtung +Common.720.AppLights = Beleuchtung der Wagenausstattung +Common.720.BARSBlock = Störung Blockierung der BARS (ARS-Einheit) +Common.720.Accel = Beschleunigung +Common.720.Forward = Vorwärtsbewegung +Common.720.Backward = Rückwärtsbewegung +Common.720.Stand = Steht +Common.720.Ticker = Innenanzeige +Common.720.KAH = KAH: Notfall-BARS-Fahrmodus +Common.720.KAHK = @[Common.ALL.KAHK] +Common.720.ALS = ALS: ARS in den Signalisierungsmodus schalten (ARS deaktivieren) +Common.720.ALSK = ALS-Tastenabdeckung +Common.720.FDepot = Abfahrt vom Depot +Common.720.HVoltage = keine Hochspannung +Common.720.PassScheme = Informationsanzeige +Common.720.EmergencyCompressor = Notstarttaste für Kompressor +Common.720.EnableBV = aktiviere BV +Common.720.DisableBV = deaktiviere BV +Common.720.Ring = Übertragung der Kontrolle (Alarm) +Common.720.R_Announcer = Aktivieren des Ansagetons im Fahrgastraum +Common.720.R_Line = Fahrermikrofon aktivieren +Common.720.R_Emer = Notruf-Gegensprechanlage +Common.720.R_Program1 = Ansage starten (Programm 1) +Common.720.EnableBVEmer = Notfall BV aktivieren +Common.720.EmergencyControls = Disable emergency enable of circuit control +Common.720.Wiper = Scheibenwischer einschalten (Platzhalter) +Common.720.AccelRate = Aktivieren des "Steigungsmodus" +Common.720.EBrakeAdd = Hilfsbremskraft erhöhen +Common.720.EBrakeRelease = Hilfsbremskraft verringern +Common.720.EBrakeToggle = Hilfsbremse aktivieren +Common.720.EmergencyBrake = Hilfsbremse deaktivieren +Common.720.DoorClose = Türen schließen +Common.720.AttentionMessage = Nachrichtenwahrnehmungstaster +Common.720.DoorSelectL = linke Türen vorwählen +Common.720.DoorSelectR = rechte Türen vorwählen +Common.720.DoorBlock = Fahren ohne Grünschleife +Common.720.KDL = öffne rechte Türen +Common.720.KDP = öffne rechte Türen +Common.Vityaz.F1 = Vityaz: F1 +Common.Vityaz.F2 = Vityaz: nächste Seite +Common.Vityaz.F3 = Vityaz: vorherige Seite +Common.Vityaz.F4 = Vityaz: Hauptmodus +Common.Vityaz.1 = Vityaz: 1 +Common.Vityaz.4 = Vityaz: 4 +Common.Vityaz.7 = Vityaz: 7 +Common.Vityaz.2 = Vityaz: 2 +Common.Vityaz.5 = Vityaz: 5 +Common.Vityaz.8 = Vityaz: 8 +Common.Vityaz.0 = Vityaz: 0 +Common.Vityaz.3 = Vityaz: 3 +Common.Vityaz.6 = Vityaz: 6 +Common.Vityaz.9 = Vityaz: 9 +Common.Vityaz.F5 = Vityaz: ZV +Common.Vityaz.F6 = Vityaz: Hoch/Geschwindigkeit +Common.Vityaz.F7 = Vityaz: Runter/Spannung +Common.Vityaz.F8 = Vityaz: Enter\Wagenausstattung +Common.Vityaz.F9 = Vityaz: Select\Wagenausstattungssteuerung +Common.720.EmerX1 = Notfall X1 Fahrmodus +Common.720.EmerX2 = Notfall X2 Fahrmodus +Common.720.EmerCloseDoors = Zwangsschließen +Common.720.EmergencyDoors = Aktivieren Sie die Nottürsteuerung +Common.720.BRU = BRU: Hochspannungstrennschalter +#gmod_subway_81-720 +#Buttons: +Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode- = @[Common.720.VentCMode] @[Common.ALL.CCW] +Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode+ = @[Common.720.VentCMode] @[Common.ALL.CW] +Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode+ = @[Common.720.VentHMode+] +Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode- = @[Common.720.VentHMode-] +Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode- = @[Common.720.VentSMode-] +Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode+ = @[Common.720.VentSMode+] +Entities.gmod_subway_81-720.Buttons.RV.EmerX1Set = @[Common.720.EmerX1] +Entities.gmod_subway_81-720.Buttons.RV.EmerX2Set = @[Common.720.EmerX2] +Entities.gmod_subway_81-720.Buttons.RV.EmerCloseDoorsSet = @[Common.720.EmerCloseDoors] +Entities.gmod_subway_81-720.Buttons.RV.EmergencyDoorsToggle = @[Common.720.EmergencyDoors] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF1Set = @[Common.Vityaz.F1] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF2Set = @[Common.Vityaz.F2] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF3Set = @[Common.Vityaz.F3] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF4Set = @[Common.Vityaz.F4] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz1Set = @[Common.Vityaz.1] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz4Set = @[Common.Vityaz.4] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz7Set = @[Common.Vityaz.7] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz2Set = @[Common.Vityaz.2] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz5Set = @[Common.Vityaz.5] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz8Set = @[Common.Vityaz.8] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz0Set = @[Common.Vityaz.0] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz3Set = @[Common.Vityaz.3] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz6Set = @[Common.Vityaz.6] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz9Set = @[Common.Vityaz.9] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF5Set = @[Common.Vityaz.F5] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF6Set = @[Common.Vityaz.F6] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF7Set = @[Common.Vityaz.F7] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF8Set = @[Common.Vityaz.F8] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF9Set = @[Common.Vityaz.F9] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF1Toggle = @[Common.720.SF1] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF2Toggle = @[Common.720.SF2] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF3Toggle = @[Common.720.SF3] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF4Toggle = @[Common.720.SF4] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF5Toggle = @[Common.720.SF5] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF6Toggle = @[Common.720.SF6] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF7Toggle = @[Common.720.SF7] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF8Toggle = @[Common.720.SF8] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF9Toggle = @[Common.720.SF9] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF10Toggle = @[Common.720.SF10] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF11Toggle = @[Common.720.SF11] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF12Toggle = @[Common.720.SF12] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF13Toggle = @[Common.720.SF13] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF14Toggle = @[Common.720.SF14] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF15Toggle = @[Common.720.SF15] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF16Toggle = @[Common.720.SF16] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF17Toggle = @[Common.720.SF17] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF18Toggle = @[Common.720.SF18] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF19Toggle = @[Common.720.SF19] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF20Toggle = @[Common.720.SF20] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF21Toggle = @[Common.720.SF21] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF22Toggle = @[Common.720.SF22] +Entities.gmod_subway_81-720.Buttons.BackDown.Pant1Toggle = @[Common.720.Pant1] +Entities.gmod_subway_81-720.Buttons.BackDown.Pant2Toggle = @[Common.720.Pant2] +Entities.gmod_subway_81-720.Buttons.BackDown.Vent1Toggle = @[Common.720.Vent1] +Entities.gmod_subway_81-720.Buttons.BackDown.Vent2Toggle = @[Common.720.Vent2] +Entities.gmod_subway_81-720.Buttons.BackDown.PassLightToggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-720.Buttons.BackDown.CabLightToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-720.Buttons.BackDown.Headlights1Toggle = @[Common.ALL.VF1] +Entities.gmod_subway_81-720.Buttons.BackDown.Headlights2Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-720.Buttons.BackDown.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-720.Buttons.BackDown.TorecDoorsToggle = @[Common.720.TorecDoors] +Entities.gmod_subway_81-720.Buttons.BackDown.BBERToggle = @[Common.720.BBER] +Entities.gmod_subway_81-720.Buttons.BackDown.BBEToggle = @[Common.720.BBE] +Entities.gmod_subway_81-720.Buttons.BackDown.CompressorToggle = @[Common.ALL.MK] +Entities.gmod_subway_81-720.Buttons.BackDown.CabLightStrengthToggle = @[Common.720.CabLightStrength] +Entities.gmod_subway_81-720.Buttons.BackDown.AppLights1Toggle = @[Common.720.AppLights] +Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock- = @[Common.720.BARSBlock] @[Common.ALL.CCW] +Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock+ = @[Common.720.BARSBlock] @[Common.ALL.CW] +Entities.gmod_subway_81-720.Buttons.BackDown.BatteryToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-720.Buttons.BackDown.ALSFreqToggle = @[Common.ARS.Freq] +Entities.gmod_subway_81-720.Buttons.PUU.!DoorsClosed = @[Common.ALL.LSD] +Entities.gmod_subway_81-720.Buttons.PUU.StandToggle = @[Common.720.Stand] @[Common.ALL.Unsused2] +Entities.gmod_subway_81-720.Buttons.PUU.TickerToggle = @[Common.720.Ticker] +Entities.gmod_subway_81-720.Buttons.PUU.KAHToggle = @[Common.720.KAH] +Entities.gmod_subway_81-720.Buttons.PUU.KAHkToggle = @[Common.720.KAHK] +Entities.gmod_subway_81-720.Buttons.PUU.ALSToggle = @[Common.720.ALS] +Entities.gmod_subway_81-720.Buttons.PUU.ALSkToggle = @[Common.720.ALSK] +Entities.gmod_subway_81-720.Buttons.PUU.FDepotToggle = @[Common.720.FDepot] @[Common.ALL.Unsused2] +Entities.gmod_subway_81-720.Buttons.PUU.!HVoltage = @[Common.720.HVoltage] +Entities.gmod_subway_81-720.Buttons.PUU.PassSchemeToggle = @[Common.720.PassScheme] +Entities.gmod_subway_81-720.Buttons.PUU.EmergencyCompressorSet = @[Common.720.EmergencyCompressor] +Entities.gmod_subway_81-720.Buttons.PUU.EnableBVSet = @[Common.720.EnableBV] +Entities.gmod_subway_81-720.Buttons.PUU.DisableBVSet = @[Common.720.DisableBV] +Entities.gmod_subway_81-720.Buttons.PUU.RingSet = @[Common.720.Ring] +Entities.gmod_subway_81-720.Buttons.PUU.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-720.Buttons.PUU.R_AnnouncerToggle = @[Common.720.R_Announcer] +Entities.gmod_subway_81-720.Buttons.PUU.R_LineToggle = @[Common.720.R_Line] +Entities.gmod_subway_81-720.Buttons.PUU.R_EmerSet = @[Common.720.R_Emer] +Entities.gmod_subway_81-720.Buttons.PUU.R_Program1Set = @[Common.720.R_Program1] +Entities.gmod_subway_81-720.Buttons.PUU.EnableBVEmerSet = @[Common.720.EnableBVEmer] +Entities.gmod_subway_81-720.Buttons.PUU.EmergencyControlsToggle = @[Common.720.EmergencyControls] +Entities.gmod_subway_81-720.Buttons.PUU.WiperToggle = @[Common.720.Wiper] +Entities.gmod_subway_81-720.Buttons.PUU.!VDop = @[Common.ALL.SpeedAccept] +Entities.gmod_subway_81-720.Buttons.PUU.!VFact = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-720.Buttons.PUU.!VPred = @[Common.ALL.SpeedAttent] +Entities.gmod_subway_81-720.Buttons.PUU.!VDop2 = @[Common.ALL.SpeedAccept] +Entities.gmod_subway_81-720.Buttons.PUU.!Acc = @[Common.720.Accel] +Entities.gmod_subway_81-720.Buttons.PUU.!Forw = @[Common.720.Forward] +Entities.gmod_subway_81-720.Buttons.PUU.!Back = @[Common.720.Backward] +Entities.gmod_subway_81-720.Buttons.PUR.AccelRateSet = @[Common.720.AccelRate] +Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeAddSet = @[Common.720.EBrakeAdd] +Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeReleaseSet = @[Common.720.EBrakeRelease] +Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeToggle = @[Common.720.EBrakeToggle] +Entities.gmod_subway_81-720.Buttons.PUR.EmergencyBrakeToggle = @[Common.720.EmergencyBrake] +Entities.gmod_subway_81-720.Buttons.PUR.DoorCloseToggle = @[Common.720.DoorClose] +Entities.gmod_subway_81-720.Buttons.PUR.AttentionMessageSet = @[Common.720.AttentionMessage] +Entities.gmod_subway_81-720.Buttons.PUR.AttentionSet = @[Common.ARS.KB] +Entities.gmod_subway_81-720.Buttons.PUR.AttentionBrakeSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-720.Buttons.PUR.HornBSet = @[Common.ALL.Horn] +Entities.gmod_subway_81-720.Buttons.PUR.DoorRightSet = @[Common.720.KDP] +Entities.gmod_subway_81-720.Buttons.PUR.!DoorRightLamp = @[Common.ALL.KDPL] +Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectLToggle = @[Common.720.DoorSelectL] +Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectRToggle = @[Common.720.DoorSelectR] +Entities.gmod_subway_81-720.Buttons.PUL.DoorBlockToggle = @[Common.720.DoorBlock] +Entities.gmod_subway_81-720.Buttons.PUL.!DoorLeftLamp = @[Common.ALL.KDLL] +Entities.gmod_subway_81-720.Buttons.PUL.DoorLeftSet = @[Common.720.KDL] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV1Toggle = @[Common.720.SFV1] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV2Toggle = @[Common.720.SFV2] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV3Toggle = @[Common.720.SFV3] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV4Toggle = @[Common.720.SFV4] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV5Toggle = @[Common.720.SFV5] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV6Toggle = @[Common.720.SFV6] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV7Toggle = @[Common.720.SFV7] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV8Toggle = @[Common.720.SFV8] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV9Toggle = @[Common.720.SFV9] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV10Toggle = @[Common.720.SFV10] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV11Toggle = @[Common.720.SFV11] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV12Toggle = @[Common.720.SFV12] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV13Toggle = @[Common.720.SFV13] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV14Toggle = @[Common.720.SFV14] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV15Toggle = @[Common.720.SFV15] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV16Toggle = @[Common.720.SFV16] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV17Toggle = @[Common.720.SFV17] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV18Toggle = @[Common.720.SFV18] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV19Toggle = @[Common.720.SFV19] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV20Toggle = @[Common.720.SFV20] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV21Toggle = @[Common.720.SFV21] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV22Toggle = @[Common.720.SFV22] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV23Toggle = @[Common.720.SFV23] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV24Toggle = @[Common.720.SFV24] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV25Toggle = @[Common.720.SFV25] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV26Toggle = @[Common.720.SFV26] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV27Toggle = @[Common.720.SFV27] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV28Toggle = @[Common.720.SFV28] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV29Toggle = @[Common.720.SFV29] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV30Toggle = @[Common.720.SFV30] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV31Toggle = @[Common.720.SFV31] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV32Toggle = @[Common.720.SFV32] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV33Toggle = @[Common.720.SFV33] +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] +Entities.gmod_subway_81-720.Buttons.BTO.K29Toggle = @[Common.ALL.KRMH] +Entities.gmod_subway_81-720.Buttons.BTO.UAVAToggle = @[Common.ALL.UAVA2] +Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-720.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-720.Buttons.RearDoor1.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-720.Buttons.CabinDoorR.CabinDoorRight = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-720.Buttons.CabinDoorL.CabinDoorLeft = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-720.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-720.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-720.Buttons.VoltHelper2.!HV = @[Common.ALL.HighVoltage] +Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I1_3 = @[Common.ALL.EnginesCurrent1] +Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I2_4 = @[Common.ALL.EnginesCurrent2] +Entities.gmod_subway_81-720.Buttons.PneumoHelper2.!BrakeTrainLine = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-720.Buttons.PneumoHelper1.!BrakeCylinder = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-720.Buttons.VoltHelper1.!Battery = @[Common.ALL.BatteryVoltage] +Entities.gmod_subway_81-720.Buttons.GV.GVToggle = @[Common.720.BRU] +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-720.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-720.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] +#gmod_subway_81-721 +Entities.gmod_subway_81-721.Buttons.Battery.BatteryToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-721.Buttons.GV.GVToggle = @[Common.720.BRU] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV1Toggle = @[Common.720.SFV1] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV2Toggle = @[Common.720.SFV2] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV3Toggle = @[Common.720.SFV3] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV4Toggle = @[Common.720.SFV4] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV5Toggle = @[Common.720.SFV5] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV6Toggle = @[Common.720.SFV6] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV7Toggle = @[Common.720.SFV7] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV8Toggle = @[Common.720.SFV8] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV9Toggle = @[Common.720.SFV9] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV10Toggle = @[Common.720.SFV10] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV11Toggle = @[Common.720.SFV11] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV12Toggle = @[Common.720.SFV12] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV13Toggle = @[Common.720.SFV13] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV14Toggle = @[Common.720.SFV14] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV15Toggle = @[Common.720.SFV15] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV16Toggle = @[Common.720.SFV16] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV17Toggle = @[Common.720.SFV17] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV18Toggle = @[Common.720.SFV18] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV19Toggle = @[Common.720.SFV19] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV20Toggle = @[Common.720.SFV20] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV21Toggle = @[Common.720.SFV21] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV22Toggle = @[Common.720.SFV22] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV23Toggle = @[Common.720.SFV23] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV24Toggle = @[Common.720.SFV24] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV25Toggle = @[Common.720.SFV25] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV26Toggle = @[Common.720.SFV26] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV27Toggle = @[Common.720.SFV27] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV28Toggle = @[Common.720.SFV28] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV29Toggle = @[Common.720.SFV29] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV30Toggle = @[Common.720.SFV30] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV31Toggle = @[Common.720.SFV31] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV32Toggle = @[Common.720.SFV32] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV33Toggle = @[Common.720.SFV33] +Entities.gmod_subway_81-721.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-721.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +#Spawner: +Entities.gmod_subway_81-720.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-720.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-720.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-720.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-720.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-720.Spawner.PassSchemesInvert.Name = @[Common.Spawner.SchemeInvert] +Entities.gmod_subway_81-720.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-720.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-720.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-720.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-720.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/de_722.lua b/lua/metrostroi_data/languages/de_722.lua new file mode 100644 index 0000000..d70feea --- /dev/null +++ b/lua/metrostroi_data/languages/de_722.lua @@ -0,0 +1,330 @@ +return [[ +#81-722 +[de] +#Cameras: +Train.722.Breakers = Autosicherung +Train.722.PU2_1 = Schaltflächenbedienfeld +Train.722.PU2_2 = Hilfsbedienfeld +Train.722.Vityaz = SAU "VITYAZ-SP" monitor +Train.722.SARMAT = CIS Bildschirm +Train.722.CabLights = Kabinenbeleuchtung +Train.722.Disconnects = Luftabsperrhähne +Train.722.KRMH = KRMSH- und RVTB Ventile +#######Buttons########### +Common.722.MirrorHeating = Spiegelheizung +Common.722.EmergencyDrive = Notstart im Notfahrmodus +Common.722.Microphone = Mikrofon aktivieren +Common.722.LRS = Notstrom des Radiosenders aus Batterien #indicator +Common.722.LAVS = Niedriger Druck in Hauptluftleitung #indicator +Common.722.LRU = Steuerrelais ist ausgeschaltet #indicator +Common.722.GlassWasher = Scheibenwaschanlage +Common.722.GlassCleaner = Scheibenwischer +Common.722.EmergencyBrakeTPlus = Notbremse (T + Modus) +Common.722.EmergencyBrakeTPlusK = Tastenabdeckung "Notbremse" +Common.722.KRO = Bewegungsrichtung +Common.722.PSNToggle = Fremdeinspeisung aktivieren +Common.722.BattOn = Aktivieren der Zugstromversorgung +Common.722.BattOff = Deaktivieren der Zugstromversorgung +Common.722.TorecDoorUnlock = Endtüren entriegeln +Common.722.SCEnabled = Kurzschlussgerät ist eingeschaltet +Common.722.LSOSD = Lampe für Stationstüren leuchtet #indicator +Common.722.PassVent = Innenbelüftung +Common.722.VRU = Steuermodus-Schalter +Common.722.VADToggle = Fahren ohne Grünschleife +Common.722.VAHToggle = Fahren ohne Aufmerksamkeitspedal +Common.722.EmergencyRadioPowerToggle = Notstromversorgung des Funks +Common.722.BARSMode = BARS Modus +Common.722.PantSC = Stromabnehmer und Kurzschlussgerät +Common.SARMAT.Up = SARMAT: Hoch +Common.SARMAT.Down = SARMAT: Runter +Common.SARMAT.Enter = SARMAT: Enter +Common.SARMAT.Esc = SARMAT: Esc +Common.SARMAT.F1 = SARMAT: F1 +Common.SARMAT.F2 = SARMAT: F2 +Common.SARMAT.F3 = SARMAT: F3 +Common.SARMAT.F4 = SARMAT: F4 +Common.SARMAT.Path = SARMAT: Gleis +Common.SARMAT.Line = SARMAT: Linie +Common.SARMAT.Zero = SARMAT: Zu Start springen +Common.SARMAT.Start = SARMAT: Start +#Autobreakers +Common.722.SF1 = SF1: Zugstrom (Steuerung) +Common.722.SF2 = SF2: Aktiver Führerstand +Common.722.SF3 = SF3: Hauptsteuerung +Common.722.SF4 = SF4: Notsteuerung +Common.722.SF5 = SF5: RVTB Steuerung +Common.722.SF6 = SF6: Bremshebelspannung +Common.722.SF7 = SF7: Türsteuerung +Common.722.SF8 = SF8: BARS 1 +Common.722.SF9 = SF9: BARS 2 +Common.722.UPO = SF: UPO1 +Common.722.SF10 = SF10: BRPI-M1 +Common.722.SF11 = SF11: BRPI-M2 +Common.722.SF12 = SF12: Feueralarm +Common.722.SF13 = SF13: @[Common.722.PantSC] +Common.722.SF14 = SF14: Funkverbindung 1 +Common.722.SF15 = SF15: Funkverbindung 2 +Common.722.SF16 = SF16: CIS 1 (monitor) +Common.722.SF17 = SF17: CIS 2 (zentrales Informationssystem) +Common.722.SF18 = SF18: CIS 3 +Common.722.SF19 = SF19: BUKP, UPI +Common.722.SF20 = SF20: Monitor +Common.722.SF21 = SF21: Orientierung +Common.722.SF22 = SF22: Schlusslicht über Batterien +Common.722.SF23 = SF23: Spitzen- und Schlusslicht +Common.722.SF24 = SF24: Station Türen öffnende Lampe +Common.722.SF25 = SF25: Kabinenbeleuchtung +Common.722.SF26 = SF26: Klimaanlage in der Kabine +Common.722.SF27 = SF27: Scheibenwischer, Scheibenwaschanlage, Pfeife +Common.722.SF31 = SF31: Kabel zur Stromversorgung +Common.722.SF32 = SF32: Zugstromleitung (Steuerung) +Common.722.SF33 = SF33: Steuerstromkreise +Common.722.SF34 = SF34: ZIS links +Common.722.SF35 = SF35: ZIS rechts +Common.722.SF36 = SF36: Bort Signalleuchten +Common.722.SF37 = SF37: Freigabe der Spannungssammler +Common.722.SF38 = SF38: Reserve +Common.722.SF41 = SF41: Türen links +Common.722.SF42 = SF42: Türen rechts +Common.722.SF43 = SF43: Türen schließen +Common.722.SF44 = SF44: Türen am Zugschluss +Common.722.SF45 = SF45: Spannung der Innenbeleuchtung +Common.722.SF46 = SF46: Innenbeleuchtung für Notfälle +Common.722.SF47 = SF47: 1. Lüftungsgruppe +Common.722.SF48 = SF48: 2. Lüftungsgruppe +Common.722.SF49 = SF49: Zähler +Common.722.SF51 = SF51: Wagensteuerung +Common.722.SF52 = SF52: BODV +Common.722.SF53 = SF53: PSN (Stromversorgung) +Common.722.SF54 = SF54: Drucklufttrockner +Common.722.SF55 = SF55: BUFT (Steuergerät für Reibungsbremse) +Common.722.SF56 = SF56: Umformer +Common.722.SF57 = SF57: Umformerheizung +Common.722.SF58 = SF58: Hauptstromkreis der Wagensteuerung +Common.722.SF59 = SF59: Notstromversorgung der Wagensteuerkreise +#gmod_subway_81-722 +#Buttons: +Entities.gmod_subway_81-722.Buttons.PU1.MirrorHeatingSet = @[Common.722.MirrorHeating] +Entities.gmod_subway_81-722.Buttons.PU1.DoorLeft2Set = @[Common.720.KDL] +Entities.gmod_subway_81-722.Buttons.PU1.DoorBackSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-722.Buttons.PU1.EmergencyDriveSet = @[Common.722.EmergencyDrive] +Entities.gmod_subway_81-722.Buttons.PU1.MicrophoneSet = @[Common.722.Microphone] +Entities.gmod_subway_81-722.Buttons.PU1.DoorLeft1Set = @[Common.720.KDL] +Entities.gmod_subway_81-722.Buttons.PU2.ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-722.Buttons.PU2.ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-722.Buttons.PU2.GlassWasherSet = @[Common.722.GlassWasher] +Entities.gmod_subway_81-722.Buttons.PU2.GlassCleaner+ = @[Common.722.GlassCleaner] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.PU2.GlassCleaner- = @[Common.722.GlassCleaner] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeTPlusKToggle = @[Common.722.EmergencyBrakeTPlusK] +Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeTPlusSet = @[Common.722.EmergencyBrakeTPlus] +Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeToggle = @[Common.720.EmergencyBrake] +Entities.gmod_subway_81-722.Buttons.PU2.VigilanceSet = @[Common.ARS.KB] +Entities.gmod_subway_81-722.Buttons.PU2.Headlights+ = @[Common.ALL.VF] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.PU2.Headlights- = @[Common.ALL.VF] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.PU2.DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-722.Buttons.PU2.DoorClose+ = @[Common.720.DoorClose] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.PU2.DoorClose- = @[Common.720.DoorClose] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.PU2.DoorRightSet = @[Common.720.KDP] +Entities.gmod_subway_81-722.Buttons.BI3.KRO+ = @[Common.722.KRO] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.BI3.KRO- = @[Common.722.KRO] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.BI3.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-722.Buttons.BI3.Compressor- = @[Common.ALL.MK] @[Common.ALL.CCW]\n[Off, Auto, 2, 5, 2/5] +Entities.gmod_subway_81-722.Buttons.BI3.Compressor+ = @[Common.ALL.MK] @[Common.ALL.CW]\n[Off, Auto, 2, 5, 2/5] +Entities.gmod_subway_81-722.Buttons.BI3.!BrakeTrainLine = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-722.Buttons.BI3.!BrakeCylinder = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-722.Buttons.PPZB.PSNToggleSet = @[Common.722.PSNToggle] +Entities.gmod_subway_81-722.Buttons.PPZB.BattOnSet = @[Common.722.BattOn] +Entities.gmod_subway_81-722.Buttons.PPZB.BattOffSet = @[Common.722.BattOff] +Entities.gmod_subway_81-722.Buttons.PPZB.TorecDoorUnlockSet = @[Common.722.TorecDoorUnlock] +Entities.gmod_subway_81-722.Buttons.PPZB.SCEnable = @[Common.722.SCEnabled] +Entities.gmod_subway_81-722.Buttons.PPZB.SOSD = @[Common.722.LSOSD] +Entities.gmod_subway_81-722.Buttons.PVM.PassLightToggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-722.Buttons.PVM.PassVent- = @[Common.722.PassVent] @[Common.ALL.CCW]\n[Emerg, Off, Auto, 1/2, 1] +Entities.gmod_subway_81-722.Buttons.PVM.PassVent+ = @[Common.722.PassVent] @[Common.ALL.CW]\n[Emerg, Off, Auto, 1/2, 1] +Entities.gmod_subway_81-722.Buttons.PVM.VKFToggle = @[Common.ALL.VKF] +Entities.gmod_subway_81-722.Buttons.PVM.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-722.Buttons.PVM.VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-722.Buttons.PVM.SOSDEnableToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-722.Buttons.PVM.VRU- = @[Common.722.VRU] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.VRU+ = @[Common.722.VRU] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.VADToggle = @[Common.722.VADToggle] +Entities.gmod_subway_81-722.Buttons.PVM.VAHToggle = @[Common.722.VAHToggle] +Entities.gmod_subway_81-722.Buttons.PVM.EmergencyRadioPowerToggle = @[Common.722.EmergencyRadioPowerToggle] +Entities.gmod_subway_81-722.Buttons.PVM.BARSMode- = @[Common.722.BARSMode] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.BARSMode+ = @[Common.722.BARSMode] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.PantSC- = @[Common.722.PantSC] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.PantSC+ = @[Common.722.PantSC] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.RCARSToggle = @[Common.ALL.RCARS] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!LRD = @[Common.ARS.LRD] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!LPT = @[Common.ALL.BrT] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!RS = @[Common.722.LRS] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!AVS = @[Common.722.LAVS] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!LSD = @[Common.ALL.LSD] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!RU = @[Common.722.LRU] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!04 = @[Common.ARS.N4] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!00 = @[Common.ARS.0] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!40 = @[Common.ARS.40] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!60 = @[Common.ARS.60] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!70 = @[Common.ARS.70] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!80 = @[Common.ARS.80] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatUpSet = @[Common.SARMAT.Up] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatDownSet = @[Common.SARMAT.Down] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatEnterSet = @[Common.SARMAT.Enter] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatEscSet = @[Common.SARMAT.Esc] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF1Set = @[Common.SARMAT.F1] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF2Set = @[Common.SARMAT.F2] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF3Set = @[Common.SARMAT.F3] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF4Set = @[Common.SARMAT.F4] +Entities.gmod_subway_81-722.Buttons.BMP.SarmatPathSet = @[Common.SARMAT.Path] +Entities.gmod_subway_81-722.Buttons.BMP.SarmatLineSet = @[Common.SARMAT.Line] +Entities.gmod_subway_81-722.Buttons.BMP.SarmatZeroSet = @[Common.SARMAT.Zero] +Entities.gmod_subway_81-722.Buttons.BMP.SarmatStartSet = @[Common.SARMAT.Start] +Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber1Set = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber2Set = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber3Set = @[Common.ALL.RouteNumber3+] +Entities.gmod_subway_81-722.Buttons.Lighting.CabinLight- = @[Common.ALL.CabLights] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.Lighting.CabinLight+ = @[Common.ALL.CabLights] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.Lighting.PanelLightToggle = @[Common.ALL.PanelLights] +Entities.gmod_subway_81-722.Buttons.PPZ.SF1Toggle = @[Common.722.SF1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF2Toggle = @[Common.722.SF2] +Entities.gmod_subway_81-722.Buttons.PPZ.SF3Toggle = @[Common.722.SF3] +Entities.gmod_subway_81-722.Buttons.PPZ.SF4Toggle = @[Common.722.SF4] +Entities.gmod_subway_81-722.Buttons.PPZ.SF5Toggle = @[Common.722.SF5] +Entities.gmod_subway_81-722.Buttons.PPZ.SF6Toggle = @[Common.722.SF6] +Entities.gmod_subway_81-722.Buttons.PPZ.SF7Toggle = @[Common.722.SF7] +Entities.gmod_subway_81-722.Buttons.PPZ.SF8Toggle = @[Common.722.SF8] +Entities.gmod_subway_81-722.Buttons.PPZ.SF9Toggle = @[Common.722.SF9] +Entities.gmod_subway_81-722.Buttons.PPZ.R_UPOToggle = @[Common.722.UPO] +Entities.gmod_subway_81-722.Buttons.PPZ.SF01Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF10Toggle = @[Common.722.SF10] +Entities.gmod_subway_81-722.Buttons.PPZ.SF11Toggle = @[Common.722.SF11] +Entities.gmod_subway_81-722.Buttons.PPZ.SF12Toggle = @[Common.722.SF12] +Entities.gmod_subway_81-722.Buttons.PPZ.SF13Toggle = @[Common.722.SF13] +Entities.gmod_subway_81-722.Buttons.PPZ.SF02Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF14Toggle = @[Common.722.SF14] +Entities.gmod_subway_81-722.Buttons.PPZ.SF15Toggle = @[Common.722.SF15] +Entities.gmod_subway_81-722.Buttons.PPZ.SF16Toggle = @[Common.722.SF16] +Entities.gmod_subway_81-722.Buttons.PPZ.SF17Toggle = @[Common.722.SF17] +Entities.gmod_subway_81-722.Buttons.PPZ.SF18Toggle = @[Common.722.SF18] +Entities.gmod_subway_81-722.Buttons.PPZ.SF19Toggle = @[Common.722.SF19] +Entities.gmod_subway_81-722.Buttons.PPZ.SF20Toggle = @[Common.722.SF20] +Entities.gmod_subway_81-722.Buttons.PPZ.SF21Toggle = @[Common.722.SF21] +Entities.gmod_subway_81-722.Buttons.PPZ.SF22Toggle = @[Common.722.SF22] +Entities.gmod_subway_81-722.Buttons.PPZ.SF23Toggle = @[Common.722.SF23] +Entities.gmod_subway_81-722.Buttons.PPZ.SF24Toggle = @[Common.722.SF24] +Entities.gmod_subway_81-722.Buttons.PPZ.SF25Toggle = @[Common.722.SF25] +Entities.gmod_subway_81-722.Buttons.PPZ.SF26Toggle = @[Common.722.SF26] +Entities.gmod_subway_81-722.Buttons.PPZ.SF27Toggle = @[Common.722.SF27] +Entities.gmod_subway_81-722.Buttons.PPZ.SF03Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF04Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-722.Buttons.PVZ.SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-722.Buttons.PVZ.1:SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-722.Buttons.PVZ.SF32Toggle = @[Common.722.SF32] +Entities.gmod_subway_81-722.Buttons.PVZ.SF33Toggle = @[Common.722.SF33] +Entities.gmod_subway_81-722.Buttons.PVZ.SF34Toggle = @[Common.722.SF34] +Entities.gmod_subway_81-722.Buttons.PVZ.SF35Toggle = @[Common.722.SF35] +Entities.gmod_subway_81-722.Buttons.PVZ.SF36Toggle = @[Common.722.SF36] +Entities.gmod_subway_81-722.Buttons.PVZ.SF37Toggle = @[Common.722.SF37] +Entities.gmod_subway_81-722.Buttons.PVZ.SF38Toggle = @[Common.722.SF38] +Entities.gmod_subway_81-722.Buttons.PVZ.SF41Toggle = @[Common.722.SF41] +Entities.gmod_subway_81-722.Buttons.PVZ.SF42Toggle = @[Common.722.SF42] +Entities.gmod_subway_81-722.Buttons.PVZ.SF43Toggle = @[Common.722.SF43] +Entities.gmod_subway_81-722.Buttons.PVZ.SF44Toggle = @[Common.722.SF44] +Entities.gmod_subway_81-722.Buttons.PVZ.SF45Toggle = @[Common.722.SF45] +Entities.gmod_subway_81-722.Buttons.PVZ.SF46Toggle = @[Common.722.SF46] +Entities.gmod_subway_81-722.Buttons.PVZ.SF47Toggle = @[Common.722.SF47] +Entities.gmod_subway_81-722.Buttons.PVZ.SF48Toggle = @[Common.722.SF48] +Entities.gmod_subway_81-722.Buttons.PVZ.SF49Toggle = @[Common.722.SF49] +Entities.gmod_subway_81-722.Buttons.PVZ.SF51Toggle = @[Common.722.SF51] +Entities.gmod_subway_81-722.Buttons.PVZ.SF52Toggle = @[Common.722.SF52] +Entities.gmod_subway_81-722.Buttons.PVZ.SF53Toggle = @[Common.722.SF53] +Entities.gmod_subway_81-722.Buttons.PVZ.SF54Toggle = @[Common.722.SF54] +Entities.gmod_subway_81-722.Buttons.PVZ.SF55Toggle = @[Common.722.SF55] +Entities.gmod_subway_81-722.Buttons.PVZ.SF56Toggle = @[Common.722.SF56] +Entities.gmod_subway_81-722.Buttons.PVZ.SF57Toggle = @[Common.722.SF57] +Entities.gmod_subway_81-722.Buttons.PVZ.SF58Toggle = @[Common.722.SF58] +Entities.gmod_subway_81-722.Buttons.PVZ.SF59Toggle = @[Common.722.SF59] +Entities.gmod_subway_81-722.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-722.Buttons.CabinDoorL.CabinDoorLeft = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-722.Buttons.CabinDoorR.CabinDoorRight = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-722.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-722.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-722.Buttons.Isolations.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.Isolations.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.StopKran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-722.Buttons.StopKran.UAVAToggle = @[Common.ALL.UAVA2] +Entities.gmod_subway_81-722.Buttons.BTO.K29Toggle = @[Common.ALL.KRMH] +Entities.gmod_subway_81-722.Buttons.BTO.K9Toggle = @[Common.ALL.RVTB] +#gmod_subway_81-723 +Entities.gmod_subway_81-723.Buttons.PVZ.SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-723.Buttons.PVZ.1:SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-723.Buttons.PVZ.SF32Toggle = @[Common.722.SF32] +Entities.gmod_subway_81-723.Buttons.PVZ.SF33Toggle = @[Common.722.SF33] +Entities.gmod_subway_81-723.Buttons.PVZ.SF34Toggle = @[Common.722.SF34] +Entities.gmod_subway_81-723.Buttons.PVZ.SF35Toggle = @[Common.722.SF35] +Entities.gmod_subway_81-723.Buttons.PVZ.SF36Toggle = @[Common.722.SF36] +Entities.gmod_subway_81-723.Buttons.PVZ.SF37Toggle = @[Common.722.SF37] +Entities.gmod_subway_81-723.Buttons.PVZ.SF38Toggle = @[Common.722.SF38] +Entities.gmod_subway_81-723.Buttons.PVZ.SF41Toggle = @[Common.722.SF41] +Entities.gmod_subway_81-723.Buttons.PVZ.SF42Toggle = @[Common.722.SF42] +Entities.gmod_subway_81-723.Buttons.PVZ.SF43Toggle = @[Common.722.SF43] +Entities.gmod_subway_81-723.Buttons.PVZ.SF44Toggle = @[Common.722.SF44] +Entities.gmod_subway_81-723.Buttons.PVZ.SF45Toggle = @[Common.722.SF45] +Entities.gmod_subway_81-723.Buttons.PVZ.SF46Toggle = @[Common.722.SF46] +Entities.gmod_subway_81-723.Buttons.PVZ.SF47Toggle = @[Common.722.SF47] +Entities.gmod_subway_81-723.Buttons.PVZ.SF48Toggle = @[Common.722.SF48] +Entities.gmod_subway_81-723.Buttons.PVZ.SF49Toggle = @[Common.722.SF49] +Entities.gmod_subway_81-723.Buttons.PVZ.SF51Toggle = @[Common.722.SF51] +Entities.gmod_subway_81-723.Buttons.PVZ.SF52Toggle = @[Common.722.SF52] +Entities.gmod_subway_81-723.Buttons.PVZ.SF53Toggle = @[Common.722.SF53] +Entities.gmod_subway_81-723.Buttons.PVZ.SF54Toggle = @[Common.722.SF54] +Entities.gmod_subway_81-723.Buttons.PVZ.SF55Toggle = @[Common.722.SF55] +Entities.gmod_subway_81-723.Buttons.PVZ.SF56Toggle = @[Common.722.SF56] +Entities.gmod_subway_81-723.Buttons.PVZ.SF57Toggle = @[Common.722.SF57] +Entities.gmod_subway_81-723.Buttons.PVZ.SF58Toggle = @[Common.722.SF58] +Entities.gmod_subway_81-723.Buttons.PVZ.SF59Toggle = @[Common.722.SF59] +Entities.gmod_subway_81-723.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-723.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-723.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-723.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-723.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-723.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +#gmod_subway_81-724 +#Buttons: +Entities.gmod_subway_81-724.Buttons.PVZ.SF34Toggle = @[Common.722.SF34] +Entities.gmod_subway_81-724.Buttons.PVZ.SF35Toggle = @[Common.722.SF35] +Entities.gmod_subway_81-724.Buttons.PVZ.SF36Toggle = @[Common.722.SF36] +Entities.gmod_subway_81-724.Buttons.PVZ.SF41Toggle = @[Common.722.SF41] +Entities.gmod_subway_81-724.Buttons.PVZ.SF42Toggle = @[Common.722.SF42] +Entities.gmod_subway_81-724.Buttons.PVZ.SF43Toggle = @[Common.722.SF43] +Entities.gmod_subway_81-724.Buttons.PVZ.SF44Toggle = @[Common.722.SF44] +Entities.gmod_subway_81-724.Buttons.PVZ.SF45Toggle = @[Common.722.SF45] +Entities.gmod_subway_81-724.Buttons.PVZ.SF46Toggle = @[Common.722.SF46] +Entities.gmod_subway_81-724.Buttons.PVZ.SF47Toggle = @[Common.722.SF47] +Entities.gmod_subway_81-724.Buttons.PVZ.SF48Toggle = @[Common.722.SF48] +Entities.gmod_subway_81-724.Buttons.PVZ.SF51Toggle = @[Common.722.SF51] +Entities.gmod_subway_81-724.Buttons.PVZ.SF52Toggle = @[Common.722.SF52] +Entities.gmod_subway_81-724.Buttons.PVZ.SF53Toggle = @[Common.722.SF53] +Entities.gmod_subway_81-724.Buttons.PVZ.SF54Toggle = @[Common.722.SF54] +Entities.gmod_subway_81-724.Buttons.PVZ.SF55Toggle = @[Common.722.SF55] +Entities.gmod_subway_81-724.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-724.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-724.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-724.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-724.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-724.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +#Spawner: +Entities.gmod_subway_81-722.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-722.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-722.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-722.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-722.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-722.Spawner.SarmatInvert.Name = @[Common.Spawner.SchemeInvert] +Entities.gmod_subway_81-722.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-722.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-722.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-722.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-722.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/de_base.lua b/lua/metrostroi_data/languages/de_base.lua new file mode 100644 index 0000000..254e3c0 --- /dev/null +++ b/lua/metrostroi_data/languages/de_base.lua @@ -0,0 +1,446 @@ +return [[ +#Base text for German language + +[de] +lang = Deutsch #Full language name +AuthorText = Translation Author: Davids_Trains #Author text + +#Workshop errors +Workshop.Title = Content manager +Workshop.FilesMissing = Einige Addons fehlen oder sind beschaedigt!.\nIf addons wurden installiert. Versuche Datei zu loeschen:\nGarrysMod/garrysmod/%s. +Workshop.FilesMissingLocaly = Einige Addons fehlen oder sind beschaedigt. +Workshop.InstalledLocaly = Installiert (lokal) +Workshop.NotInstalledE = Nicht installiert.Abboniere das Addon und ueberpruefe es im "Addons" menue. +Workshop.NotInstalled = Nicht installiert. +Workshop.Disabled = Deaktiviert. Aktiviere es im "Addons" menue. +Workshop.Installed = Installiert +Workshop.Open = Workshop +Workshop.ErrorGithub = Es wurde die GitHub Version von Metrostroi erkannt. Diese Version von Metrostroiw wird nicht mit der GitHub Version funtkionieren. +Workshop.ErrorLegacy = Es wurde die Legacy Version von Metrostroi erkannt. Diese Version von Metrostroiw wird nicht mit der Legacy Version funtkionieren. +Workshop.ErrorEnhancers = Dieses Addon enthält Grafikverbesserer, die das komfortable Spiel beeinträchtigen können. +Workshop.Error1 = Es werden veraltete Scripts von Metrostroi verwendet. Dies kann zu Problemen fuehren! +Workshop.ErrorOld = Veraltete Modelle entdeckt! Bitte veralteten Content löschen, Cache leeren und neu installieren! + +#Client settings +Panel.Admin = Admin +Panel.RequireThirdRail = Stromschiene wird gebraucht + +Panel.Client = Client +Panel.Language = Sprache waehlen +Panel.DrawCams = Kameras rendern +Panel.DisableHUD = HUD im Zug deaktivieren +Panel.DisableCamAccel = Deaktivieren der Kamerabewegung +Panel.DisableHoverText = Hilfetext ausblenden +Panel.DisableHoverTextP = Disable additional information\nin tooltips #NEW +Panel.ScreenshotMode = Screenshot modus (NIEDRIGE FPS) +Panel.ShadowsHeadlight = Schatten der Scheinwerfer aktivieren +Panel.RedLights = Enable dynamic light\nof red lights +Panel.ShadowsOther = Schatten von anderen\nLichtquellen +Panel.MinimizedShow = Elemente beibehalten\nwenn minimiert +Panel.PanelLights = Enable dynamic lights\nfrom panel lamps #NEW +Panel.RouteNumber = Route number #NEW +Panel.FOV = Sichtfeld +Panel.Z = Camera height #NEW +Panel.RenderDistance = Render distanz +Panel.ReloadClient = Clientseitig neuladen + +Panel.ClientAdvanced = Client (Fortgeschritten) +Panel.DrawDebugInfo = Debuginformationen zeigen +Panel.DrawSignalDebugInfo = Signalling debug info +Panel.CheckAddons = Addons ueberpruefen +Panel.ReloadLang = Sprachen laden +Panel.SoftDraw = Element "weiches Laden" in Prozent +Panel.SoftReloadLang = Spawnmenue nicht neuladen + + + +#Common train +Train.Common.Camera0 = Fahrersitz +Train.Common.RouteNumber = Umlauf +Train.Common.LastStation = Letzte Station +Train.Common.HelpersPanel = Bedienung fuer Zugbegleiter +Train.Common.UAVA = UAVA +Train.Common.PneumoPanels = Ventile +Train.Common.Voltmeters = Voltmeter and amperemeter +Train.Common.CouplerCamera = Kupplung +Common.ARM.Monitor1 = Monitor 1 ARM + +Train.Buttons.Sealed = Versiegelt +Train.Buttons.Active = Active #NEW +Train.Buttons.Auto = Auto #NEW +Train.Buttons.On = On #NEW +Train.Buttons.Off = Off #NEW +Train.Buttons.Closed = Closed #NEW +Train.Buttons.Opened = Opened #NEW +Train.Buttons.Disconnected = Disconnected #NEW +Train.Buttons.Connected = Connected #NEW +Train.Buttons.UAVAOff = Control circuits isolated #NEW +Train.Buttons.UAVAOn = Control circuits active #NEW +Train.Buttons.Freq1/5 = 1/5 AB #NEW +Train.Buttons.Freq2/6 = 2/6 ALS-ARS #NEW +Train.Buttons.Left = Left #NEW +Train.Buttons.Right = Right #NEW +Train.Buttons.Low = Low #NEW +Train.Buttons.High = High #NEW +Train.Buttons.LFar = Distant light #NEW #FIXME +Train.Buttons.LNear = Near light #NEW #FIXME +Train.Buttons.0 = 0 #NEW +Train.Buttons.1 = 1 #NEW +Train.Buttons.2 = 2 #NEW +Train.Buttons.3 = 3 #NEW +Train.Buttons.4 = 4 #NEW +Train.Buttons.Forward = Forward #NEW +Train.Buttons.Back = Backward #NEW #FIXME +Train.Buttons.VentHalf = 1/2 of speed #NEW +Train.Buttons.VentFull = Full speed #NEW +Train.Buttons.VTRF = Forward oriented wagons #NEW +Train.Buttons.VTRB = Back oriented wagons #NEW +Train.Buttons.VTR1 = Even wagons #NEW +Train.Buttons.VTR2 = Odd wagons #NEW +Train.Buttons.VTRH1 = First half of train #NEW +Train.Buttons.VTRH2 = Second half of train #NEW +Train.Buttons.VTRAll = All wagons #NEW + +Train.Buttons.BatteryVoltage = %d V #NEW +Train.Buttons.HighVoltage = %d V #NEW +Train.Buttons.BatteryCurrent = %d A #NEW +Train.Buttons.EnginesCurrent = %d A #NEW +Train.Buttons.Speed = %d km/h #NEW +Train.Buttons.SpeedAll = %d km/h Speed limit:%s km/h #NEW +Train.Buttons.SpeedLimit = %s km/h #NEW +Train.Buttons.SpeedLimitNext = %s km/h #NEW +Train.Buttons.04 = NF #NEW +Train.Buttons.BCPressure = %.1f bar #NEW +Train.Buttons.BLTLPressure = TL: %.1f BL:%.1f bar #NEW + +#Train entities +Entities.gmod_subway_base.Name = Zugbasis +Entities.gmod_subway_81-502.Name = 81-502 (Ema-502 Kopf) +Entities.gmod_subway_81-501.Name = 81-501 (Em-501 Beiwagen) +Entities.gmod_subway_81-702.Name = 81-702 (D Kopf) +Entities.gmod_subway_81-702_int.Name = 81-702 (D Beiwagen) +Entities.gmod_subway_81-703.Name = 81-703 (E Kopf) +Entities.gmod_subway_81-703_int.Name = 81-703 (E Beiwagen) +Entities.gmod_subway_ezh.Name = 81-707 (Ezh Kopf) +Entities.gmod_subway_ezh1.Name = 81-708 (Ezh1 Beiwagen) +Entities.gmod_subway_ezh3.Name = 81-710 (Ezh3 Kopf) +Entities.gmod_subway_em508t.Name = 81-508T (Em-508T Beiwagen) +Entities.gmod_subway_81-717_mvm.Name = 81-717 (Moscow Kopf) +Entities.gmod_subway_81-717_mvm_custom.Name = 81-717 (Moscow Benutzerdefiniert) +Entities.gmod_subway_81-714_mvm.Name = 81-714 (Moscow Beiwagen) +Entities.gmod_subway_81-717_lvz.Name = 81-717 (St. Petersburg Kopf) +Entities.gmod_subway_81-714_lvz.Name = 81-714 (St. Petersburg Beiwagen) +Entities.gmod_subway_81-718.Name = 81-718 (TISU Kopf) +Entities.gmod_subway_81-719.Name = 81-719 (TISU Beiwagen) +Entities.gmod_subway_81-720.Name = 81-720 (Yauza Kopf) +Entities.gmod_subway_81-721.Name = 81-721 (Yauza Beiwagen) +Entities.gmod_subway_81-722.Name = 81-722 (Yubileyniy Kopf) +Entities.gmod_subway_81-723.Name = 81-723 (Yubileyniy Beiwagen mit Motor) +Entities.gmod_subway_81-724.Name = 81-724 (Yubileyniy Beiwagen ohne Antrieb) +Entities.gmod_subway_81-7036.Name = 81-7036 (Nicht funktionsfaehig) +Entities.gmod_subway_81-7037.Name = 81-7037 (Nicht funktionsfaehig) +Entities.gmod_subway_tatra_t3.Name = Tatra T3 + +#Train util entities +Entities.gmod_train_bogey.Name = Drehgestell +Entities.gmod_train_couple.Name = Kupplung + +#Other entities +Entities.gmod_track_pui.Name = PUI +Entities.gmod_track_mus_elektronika7.Name = Elektronische Uhr +Entities.gmod_mus_clock_analog.Name = Analoge Uhr +Entities.gmod_track_clock_time.Name = Grosse Uhr mit Intervall +Entities.gmod_track_clock_small.Name = kleine Uhr mit Intervall +Entities.gmod_track_clock_interval.Name = grosse Uhr mit Intervall (Intervall) +Entities.gmod_track_switch.Name = Weicheantrieb +Entities.gmod_track_powermeter.Name = Stromzaehler +Entities.gmod_track_arm.Name = ARM DSCP +Entities.gmod_track_udochka.Name = Stromzufuhr fuer Depots +Entities.gmod_train_spawner.Name = Zug spawner +Entities.gmod_train_special_box.Name = Speziallieferung + +#Weapons +Weapons.button_presser.Name = Knopfdrücker +Weapons.button_presser.Purpose = Wird zum Bedienen von Knöpfen auf Maps genutzt. +Weapons.button_presser.Instructions = Zum bedienen linke Maustaste drücken. +Weapons.train_key.Name = Administratorschlüssel +Weapons.train_key.Purpose = Wird zum bedienen von Adminknöpfen benutzt. +Weapons.train_key.Instructions = Zum bedienen linke Maustaste drücken. +Weapons.train_kv_wrench.Name = Richtungswender +Weapons.train_kv_wrench.Purpose = Wird zum bedienen von Knöpfen in Zügen verwendet. +Weapons.train_kv_wrench.Instructions = Zum bedienen linke Maustaste verwenden. +Weapons.train_kv_wrench_gold.Name = goldener Richtungswender + +Weapons.train_kv_wrench_gold.Purpose = @[Weapons.train_kv_wrench.Purpose] +Weapons.train_kv_wrench_gold.Instructions = @[Weapons.train_kv_wrench.Instructions] + +#Spawner common +Spawner.Title = Zugspawner +Spawner.Spawn = Spawnen +Spawner.Close = Schließen +Spawner.Trains1 = erlaubte Wagen +Spawner.Trains2 = pro Spieler +Spawner.WagNum = Anzahl der Wagen +Common.Spawner.Texture = Aussehen (aussen) +Common.Spawner.PassTexture = Aussehen (innen) +Common.Spawner.CabTexture = Aussehen (Fuehrerstand) +Common.Spawner.Announcer = Ansagen Typ +Common.Spawner.Type1 = Typ 1 +Common.Spawner.Type2 = Typ 2 +Common.Spawner.Type3 = Typ 3 +Common.Spawner.Type4 = Typ 4 +Common.Spawner.SpawnMode = Zugstatus +Common.Spawner.SpawnMode.Deadlock = kalt +Common.Spawner.SpawnMode.Full = voll gestartet +Common.Spawner.SpawnMode.NightDeadlock = kalt über Nacht +Common.Spawner.SpawnMode.Depot = Depot +Spawner.Common.EType = Art der Stromkreise +Common.Spawner.Scheme = Linienplan +Common.Spawner.Random = züfällig +Common.Spawner.Old = alt +Common.Spawner.New = neu +Common.Spawner.Type = Typ +Common.Spawner.SchemeInvert = Linienplan umdrehen + +#Coupler common +Common.Couple.Title = Kupplungsmenü +Common.Couple.CoupleState = Kupplungsstatus +Common.Couple.Coupled = gekuppelt +Common.Couple.Uncoupled = nicht gekuppelt +Common.Couple.Uncouple = entkuppeln +Common.Couple.IsolState = Absperrhähne +Common.Couple.Isolated = geschlossen +Common.Couple.Opened = offen +Common.Couple.Open = öffnen +Common.Couple.Isolate = schließen +Common.Couple.EKKState = EKK Status +Common.Couple.Disconnected = getrennt +Common.Couple.Connected = verbunden +Common.Couple.Connect = verbinden +Common.Couple.Disconnect = trennen + +#Bogey common +Common.Bogey.Title = Drehgestellmenü +Common.Bogey.ContactState = Status der Stromabnehmer +Common.Bogey.CReleased = gelöst +Common.Bogey.CPressed = angelegt +Common.Bogey.CPress = anlegen +Common.Bogey.CRelease = lösen +Common.Bogey.ParkingBrakeState = Handbremsstatus +Common.Bogey.PBDisabled = manuell ausgeschalten +Common.Bogey.PBEnabled = An +Common.Bogey.PBEnable = Aus #FIXME +Common.Bogey.PBDisable = Manuell Aus #FIXME + +#Trains common +Common.ALL.Unsused1 = Nicht im Gebrauch +Common.ALL.Unsused2 = (nicht im Gebrauch) +Common.ALL.Up = (hoch) +Common.ALL.Down = (runter) +Common.ALL.Left = (links) +Common.ALL.Right = (rechts) +Common.ALL.CW = (im Uhrzeigersinn) +Common.ALL.CCW = (gegen den Uhrzeigersinn +Common.ALL.VB = VB: Battery an/aus +Common.ALL.VSOSD = SOSD: Leuchtmelder fuer Stationtueren +Common.ALL.VKF = VKF: Batteriespannung fuer Schlusslichter +Common.ALL.VB2 = (Stromkreise mit niedriger Spannung) +Common.ALL.VPR = VPR: Zugfunk +Common.ALL.VASNP = ASNP Strom +Common.ALL.UOS = RC-UOS: Geschwindigkeitsbegrenzer (Fahren ohne EPV/EPK) +Common.ALL.VAH = VAH: Fahrmodus fuer Notfaelle (Stoerung des RPB relais) +Common.ALL.KAH = KAH: Zwangsbeschleunigung bei der Fahrt ohne ARS +Common.ALL.KAHK = KAH Verdeckung +Common.ALL.VAD = VAD: Zwangsschliessen der Tueren ueberbruecken (Stoerung des KD relais) +Common.ALL.OVT = OVT: Druckluftbremsen deaktivieren +Common.ALL.VOVT = VOVT: ueberbruecken der deaktivierten Druckluftbremsen +Common.ALL.EmergencyBrakeValve = Notbremse +Common.ALL.ParkingBrake = Handbremse +Common.ALL.VU = VU: Zugsteuerung +Common.ALL.KDP = KDP: Tueren rechts oeffnen +Common.ALL.KDPL = Türen rechts freigegeben +Common.ALL.KDPK = Verdeckung fuer Tueren Rechts +Common.ALL.KDL = KDL: Tueren links oeffnen +Common.ALL.KDLL = Türen links sind freigegeben +Common.ALL.KDLK = Verdeckung fuer Tueren links +Common.ALL.KDLPK = Verdeckung der Tuerknoepfe +Common.ALL.KRZD = KRZD: Zwangsschliessen +Common.ALL.VSD = Seitenvorwahl für Türen +Common.ALL.Ring = Klingeln +Common.ALL.VUD = VUD: Tueren Freigeben bzw. Verriegeln (Tueren schliessen) +Common.ALL.KDPH = Im letzten Wagon Tueren rechts oeffnen +Common.ALL.VUD2 = VUD2: Tueren schliessen fuer den Zugbegleiter +Common.ALL.Program1 = Program I +Common.ALL.Program2 = Program II +Common.ALL.VRP = VRP: Uberspannungsschutz zuruecksetzen +Common.ALL.VRPBV = VRP: Überspannungsschutz zurrücksetzten, BV anschalten +Common.ALL.KSN = KSN: Störungsmelder +Common.ALL.VMK = VMK: Luftpresser +Common.ALL.MK = Luftpresser +Common.ALL.VF1 = 1. Scheinwerfergruppe +Common.ALL.VF2 = 2. Scheinwerfergruppe +Common.ALL.VF = Spitzenlicht ein/aus +Common.ALL.VUS = VUS: Fernlicht +Common.ALL.GaugeLights = Beleuchtung fuer Armaturen +Common.ALL.CabLights = Licht im Fuehrerstand +Common.ALL.PassLights = Licht im Fahrgastraum +Common.ALL.PanelLights = Fahrpultbeleuchtung +Common.ALL.RMK = RMK: Notfall Luftpresser +Common.ALL.KRP = KRP: Zwangsstart +Common.ALL.VZP = VZP: Relais fuer das Fahren deaktivieren +Common.ALL.VZD = VZD: Schliessverzoegerung deaktivieren +Common.ALL.VAV = VAV: Autonomes Fahren aktivieren +Common.ALL.RouteNumber1+ = 1. Umlaufnummer hoch +Common.ALL.RouteNumber1- = 1. Umlaufnummer runter +Common.ALL.RouteNumber2+ = 2. Umlaufnummer hoch +Common.ALL.RouteNumber2- = 2. Umlaufnummer runter +Common.ALL.RouteNumber3+ = 3. Umlaufnummer hoch +Common.ALL.RouteNumber3- = 3. Umlaufnummer runter +Common.ALL.LastStation+ = Naechste letzte Station +Common.ALL.LastStation- = Vorherige letzte Station +Common.ALL.RRP = RP: Leuchtmelder fuer ueberspannungsschutz (rot) (Stromkreise konnten nicht geschlossen werden) +Common.ALL.GRP = RP: Ueberpannungsschutz aktiv (Schuetzt die Fahrmotoren vor ueberspannung) +Common.ALL.RP = RP: Leuchtmelder fuer ueberspannungsschutz (rot) (Stromkreise konnten nicht geschlossen werden oder RP aktiv) +Common.ALL.SN = LSN: Stoerungsmelder (Stromkreise konnten nicht geschlossen werden) +Common.ALL.PU = Leuchtmelder fuer Stromsparmodus +Common.ALL.BrT = Druckluftbremsen angelegt +Common.ALL.BrW = Druckluftbremsen an den Wagen liegen an +Common.ALL.ARS = ARS: Automatische Geschwindigkeitsregelung +Common.ALL.ARSR = ARS-R: Automatische Geschwindigkeitsregelung im ARS-R modus +Common.ALL.ALS = ALS: Automatische Anzeige der Signalgeschwindigkeiten +Common.ALL.RCARS = RC-ARS: ARS Kreise trennen +Common.ALL.RC1 = RC-1: ARS deaktivieren +Common.ALL.EPK = ARS Elektropneumatisches Ventil (EPK) +Common.ALL.EPV = ARS Elektropneumatisches Ventil (EPV) +Common.ARS.LN = LN: Richtungssignal +Common.ARS.KT = KT: Leuchtmelder der Bremsen +Common.ARS.VD = VD: Beschleunigung vom ARS unterbrochen +Common.ARS.Freq = ALS decoder +Common.ARS.FreqD = (hoch 1/5, runter 2/6) +Common.ARS.FreqU = (hoch 2/6, runter 1/5) +Common.ARS.VP = Hilfstriebfahrzeug +Common.ARS.RS = RS: Naechste Begrenzung ist groesser oder gleich zu der jetzigen +Common.ARS.AB = Autoblockieren ARS modus +Common.ARS.ABButton = Autoblockieren ARS modus Schalter +Common.ARS.ABDriver = (Fahrer) +Common.ARS.ABHelper = (Zugbegleiter) +Common.ARS.AV = Stoerung ARS-MP +Common.ARS.AV1 = Stoerung bei ersatz ARS-MP +Common.ARS.AB2 = Autoblockieren ARS modus Schalter +Common.ARS.ARS = ARS modus +Common.ARS.LRD = LRD: Erlaubnis zum Bewegen (wenn 0 auf ALS) +Common.ARS.VRD = VRD: Bewegen erlauben(wenn 0 auf ALS) +Common.ARS.KB = KB: Wachsam-Knopf +Common.ARS.KVT = KVT: Bremsempfehlung wahrgenommen +Common.ARS.KVTR = KVT: ARS-R Bremsempfehlung wahrgenommen +Common.ARS.04 = OCh: Keine ARS Frequenz +Common.ARS.N4 = NCh: Keine ARS Frequenz +Common.ARS.0 = 0: ARS Zwangshalt +Common.ARS.40 = Tempolimit 40 kmh +Common.ARS.60 = Tempolimit 60 kmh +Common.ARS.70 = Tempolimit 70 kmh +Common.ARS.80 = Tempolimit 80 kmh +Common.ALL.RCBPS = RC-BPS: Rollschutz +Common.BPS.On = Rollschutz aktiv +Common.BPS.Err = Rollschutz Stoerung +Common.BPS.Fail = Rollschutz fehlfunktion +Commom.NMnUAVA.NMPressureLow = Bremsdruck in Hauptluftleitung zu gering +Commom.NMnUAVA.UAVATriggered = UAVA Kontakte offen +Common.ALL.LSD = Türmelder (Türen sind geschlossen und verriegelt) +Common.ALL.L1w = 1. Leuchtmelder (Fahrmotoren aktiv) +Common.ALL.L2w = 2. Leuchtmelder (Schaltwerk ist in Bewegung) +Common.ALL.L6w = 6. Leuchtmelder (Bremse aktiv) +Common.ALL.Horn = Signalhorn +Common.ALL.DriverValveBLDisconnect = Absperrhahn fuer Hauptluftleitung +Common.ALL.DriverValveTLDisconnect = Absperrhahn fuer Hauptluftbehälter +Common.ALL.DriverValveDisconnect = Absperrhahn für Druckluftbremsen +Common.ALL.KRMH = KRMSH: Nothahn für Fahrer +Common.ALL.RVTB = RVTB: Reserved valve of safety brake #FIXME +Common.ALL.FrontBrakeLineIsolationToggle = Absperrhahn fuer Hauptluftleitung +Common.ALL.FrontTrainLineIsolationToggle = Absperrhahn fuer Hauptluftbehälter +Common.ALL.RearTrainLineIsolationToggle = Absperrhahn fuer Hauptluftbehälter +Common.ALL.RearBrakeLineIsolationToggle = Absperrhahn fuer Hauptluftleitung +Common.ALL.UAVA = UAVA: Uberbrueckung von Zwangsbremsungen von Signalen(kann reaktiviert werden wenn der Druck der Hauptluftleitung abfaellt) +Common.ALL.UAVA2 = UAVA: Überbrückung Autostop +Common.ALL.UAVAContact = UAVA reset der Kontakte +Common.ALL.OAVU = OAVU: AVU Schalter deaktivieren +Common.ALL.LAVU = AVU ist aktiv +Common.ALL.GV = Hauptschalter +Common.ALL.AirDistributor = VRN: Luftverteiler deaktivieren +Common.ALL.CabinDoor = Kabinentuer +Common.ALL.PassDoor = Tür in den Fahrgastraum +Common.ALL.FrontDoor = Vordertuer +Common.ALL.RearDoor = Hintertuer +Common.ALL.OtsekDoor1 = 1. Griff für Ablage +Common.ALL.OtsekDoor2 = 2. Griff für Ablage +Common.ALL.CouchCap = Sitz ausklappen + +Common.ALL.UNCh = UNCh: Verstaerker fuer niedrige Frequenzen +Common.ALL.ES = ES: Schalter fuer Notfall Kommunikation +Common.ALL.GCab = Lautsprecher: Sound im Fuehrerstand +Common.ALL.UPO = UPO: Ansager +Common.ALL.R_Radio = Ansager +Common.ALL.AnnPlay = Leuchtmelder: Ansagen-playback + +#RRI +Train.Common.RRI = RRI: Radio-relais Ansager +Common.RRI.RRIUp = RRI: Einstellung hoch +Common.RRI.RRIDown = RRI: Einstellung runter +Common.RRI.RRILeft = RRI: Einstellung links +Common.RRI.RRIRight = RRI: Einstellung rechts +Common.RRI.RRIEnableToggle = RRI: Strom +Common.RRI.RRIRewindSet2 = RRI: Vorspulen +Common.RRI.RRIRewindSet0 = RRI: zurueck +Common.RRI.RRIAmplifierToggle = RRI: Verstaerker +Common.RRI.RRIOn = RRI Leuchtmelder + +#ASNP +Train.Common.ASNP = ASNP +Common.ASNP.ASNPMenu = ASNP: Menue +Common.ASNP.ASNPUp = ASNP: Hoch +Common.ASNP.ASNPDown = ASNP: Runter +Common.ASNP.ASNPOn = ASNP: Strom + +#PVK +Common.CabVent.PVK- = Lüftung verringern +Common.CabVent.PVK+ = Lüftung erhöhen + +#IGLA +Train.Common.IGLA = IGLA +Common.IGLA.Button1Up = IGLA: Erster Knopf hoch +Common.IGLA.Button1 = IGLA: Erster Knopf +Common.IGLA.Button1Down = IGLA: Erster Knopf runter +Common.IGLA.Button2Up = IGLA: Zweiter Knopf hoch +Common.IGLA.Button2 = IGLA: Zweiter Knopf +Common.IGLA.Button2Down = IGLA: Zweiter Knopf runter +Common.IGLA.Button23 = IGLA: Zweiter und Dritter Knopf +Common.IGLA.Button3 = IGLA: Dritter Knopf +Common.IGLA.Button4 = IGLA: Vierter Knopf +Common.IGLA.IGLASR = IGLA: Strom +Common.IGLA.IGLARX = IGLA: Keine Verbindung +Common.IGLA.IGLAErr = IGLA: Stoerung +Common.IGLA.IGLAOSP = IGLA: Feuerloeschsystem aktiv +Common.IGLA.IGLAPI = IGLA: Feuer +Common.IGLA.IGLAOff = IGLA: Hochspannung nicht aktiv + +#BZOS +Common.BZOS.On = Sicherheitsalarm Schalter +Common.BZOS.VH1 = Sicherheitsalarm aktiviert +Common.BZOS.VH2 = Sicherheitsalarm ausgelöst +Common.BZOS.Engaged = Sicherheitsalarm ausgelöst + +#Train helpers common +Common.ALL.SpeedCurr = Geschwindigkeit +Common.ALL.SpeedAccept = Erlaubte Geschwindigkeit +Common.ALL.SpeedAttent = Erlaubte Geschwindigkeit ab dem Nächsten Signal +Common.ALL.Speedometer = Geschwindigkeit +Common.ALL.BLTLPressure = Druck in den Leitungen (rot: Hauptluftleitung, schwarz: Hauptluftleitung) +Common.ALL.BCPressure = Druck in den Bremszylindern +Common.ALL.EnginesCurrent = Spannung auf Fahrmotoren (A) +Common.ALL.EnginesCurrent1 = Spannung auf ersten Fahrmotoren (A) +Common.ALL.EnginesCurrent2 = Spannung auf zweiten Fahrmotoren (A) +Common.ALL.EnginesVoltage = Spannung auf Fahrmotoren in Volt (kV) +Common.ALL.BatteryVoltage = Battriespannung (V) +Common.ALL.BatteryCurrent = Battery current (A) #FIXME +Common.ALL.HighVoltage = Hochspannung (kV) +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/en_502.lua b/lua/metrostroi_data/languages/en_502.lua new file mode 100644 index 0000000..d37cb1b --- /dev/null +++ b/lua/metrostroi_data/languages/en_502.lua @@ -0,0 +1,274 @@ +return [[ +#81-502 + +[en] + +#######Buttons########### +#Common +Common.502.KS = KSAUP operating indicator +Common.502.AV = ATO is engaged +Common.502.SD = SD: Door state light (doors are closed) +Common.502.SDW = SD: Door state light (doors are opened) +Common.502.L3w = 3rd wire lamp (X3 mode) +Common.502.L4w = 4th wire lamp (backward movement direction) +Common.502.L5w = 5th wire lamp (forward movement direction) +Common.502.L16w = 16th wire lamp (doors interlock) +Common.502.L20w = 20th wire lamp (LK2 and LK5 closure) +Common.502.L23w = 23rd wire lamp (compressor control) +Common.502.RK1 = Control of the first RK position +Common.502.BRD = Doors failure lamp +Common.502.KOS = KB: Speed limit button (attention button) +Common.502.VAK = AK: Assembly emergency drive mode circuits +Common.502.LRU = Emergency drive mode circuits are engaged + +#Spawner +Spawner.502.TypeNVL = Train from NVL +Spawner.502.TypeKVLO = Old train from KVL +Spawner.502.TypeKVLN = New train from KVL +Spawner.502.EWagons = Add "E" type wagons + +#gmod_subway_81-502 +Entities.gmod_subway_81-502.Buttons.VBA.VBAToggle = ATO battery on/off + +Entities.gmod_subway_81-502.Buttons.AV.VRUToggle = VRU: Emergency driving mode +Entities.gmod_subway_81-502.Buttons.AV.KPVUToggle = KPVU: Turn off the pneumatic control disabler +Entities.gmod_subway_81-502.Buttons.AV.KSDToggle = KSD: Disable door interlock control +Entities.gmod_subway_81-502.Buttons.AV.KAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-502.Buttons.AV.KADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-502.Buttons.AV.OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-502.Buttons.AV.VKFToggle = @[Common.ALL.VKF] + + +Entities.gmod_subway_81-502.Buttons.RCAV3.RCAV3Toggle = KSAUP circuits disconnector (AV3) +Entities.gmod_subway_81-502.Buttons.RCAV4.RCAV4Toggle = KSAUP circuits disconnector (AV4) +Entities.gmod_subway_81-502.Buttons.RCAV5.RCAV5Toggle = KSAUP circuits disconnector (AV5) +Entities.gmod_subway_81-502.Buttons.RCARS.RCARSToggle = @[Common.ALL.RCARS] +Entities.gmod_subway_81-502.Buttons.RCBPS.RCBPSToggle = @[Common.ALL.RCBPS] + +Entities.gmod_subway_81-502.Buttons.VRD2.2:VRDSet = @[Common.ARS.VRD] +Entities.gmod_subway_81-502.Buttons.VRD2.!LVRD = @[Common.ARS.LRD] + +Entities.gmod_subway_81-502.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-502.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-502.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-502.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-502.Buttons.AV1.VU3Toggle = @[Common.703.VU3] +Entities.gmod_subway_81-502.Buttons.UPO.R_UPOToggle = @[Common.ALL.UPO] + +Entities.gmod_subway_81-502.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_81-502.Buttons.VRD.VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-502.Buttons.HelperPanel.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.HelperPanel.KDPHSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-502.Buttons.AV2.VSOSDToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-502.Buttons.AV2.VRToggle = @[Common.ALL.VPR] + +Entities.gmod_subway_81-502.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLampAutodrive = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LDoorsWag = @[Common.502.SDW] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LDoors = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LGreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LRedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLampAutodrive = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RDoorsWag = @[Common.502.SDW] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RDoors = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RGreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RRedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_80 = @[Common.ARS.80] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_70 = @[Common.ARS.70] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_60 = @[Common.ARS.60] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_40 = @[Common.ARS.40] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_00 = @[Common.ARS.0] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_04 = @[Common.ARS.N4] + +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_KS = @[Common.502.KS] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_AV = @[Common.502.AV] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_4 = @[Common.502.L4w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_5 = @[Common.502.L5w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_DT = @[Common.ALL.BrT] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_20 = @[Common.502.L20w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_1P = @[Common.502.RK1] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SN1 = @[Common.ALL.RP] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SN2 = @[Common.ALL.SN] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_3 = @[Common.502.L3w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SD1 = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SD2 = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_RP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_DV = @[Common.502.BRD] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!CPS_Pd = @[Common.ARS.LRD] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_04 = @[Common.ARS.04] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_00 = @[Common.ARS.0] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_40 = @[Common.ARS.40] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_60 = @[Common.ARS.60] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_70 = @[Common.ARS.70] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_80 = @[Common.ARS.80] + +Entities.gmod_subway_81-502.Buttons.Main1.2:VUSToggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-502.Buttons.Main1.2:HeadlightsToggle = @[Common.ALL.VF1] +Entities.gmod_subway_81-502.Buttons.Main1.!LKTLight = @[Common.ARS.KT] +Entities.gmod_subway_81-502.Buttons.Main1.!LKVDLight = @[Common.ARS.VD] +Entities.gmod_subway_81-502.Buttons.Main1.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-502.Buttons.Main1.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-502.Buttons.Main1.2:KBSet = @[Common.ARS.KB] +Entities.gmod_subway_81-502.Buttons.Main1.2:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.Main1.2:LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-502.Buttons.Main1.2:LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-502.Buttons.Main1.2:VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-502.Buttons.Main1.2:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-502.Buttons.Main1.2:KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-502.Buttons.Main1.2:VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-502.Buttons.Main1.2:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-502.Buttons.Main1.2:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-502.Buttons.Main1.2:VAKSet = @[Common.502.VAK] +Entities.gmod_subway_81-502.Buttons.Main1.2:VUDToggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-502.Buttons.Main1_2.!LMK2 = @[Common.502.L23w] +Entities.gmod_subway_81-502.Buttons.Main1_2.!LVRD2 = @[Common.ARS.LRD] + +Entities.gmod_subway_81-502.Buttons.Main2.KOSSet = @[Common.502.KOS] +Entities.gmod_subway_81-502.Buttons.Main2.!LMK = @[Common.502.L23w] +Entities.gmod_subway_81-502.Buttons.Main2.VZPToggle = @[Common.ALL.VZP] +Entities.gmod_subway_81-502.Buttons.Main2.VZDSet = @[Common.ALL.VZD] +Entities.gmod_subway_81-502.Buttons.Main2.!L16 = @[Common.502.L16w] +Entities.gmod_subway_81-502.Buttons.Main2.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-502.Buttons.Main2.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.Main2.LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-502.Buttons.Main2.LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-502.Buttons.Main2.VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-502.Buttons.Main2.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-502.Buttons.Main2.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-502.Buttons.Main2.KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-502.Buttons.Main2.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-502.Buttons.Main2.!RU = @[Common.502.LRU] +Entities.gmod_subway_81-502.Buttons.Main2.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-502.Buttons.Main2.VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-502.Buttons.Main2.VAKSet = @[Common.502.VAK] +Entities.gmod_subway_81-502.Buttons.Main2.AutodriveToggle = @[Common.ALL.VAV] +Entities.gmod_subway_81-502.Buttons.Main2.VUDToggle = @[Common.ALL.VUD] + +Entities.gmod_subway_81-502.Buttons.BPS.!BPSon = @[Common.BPS.On] +Entities.gmod_subway_81-502.Buttons.BPS.!BPSErr = @[Common.BPS.Err] +Entities.gmod_subway_81-502.Buttons.BPS.!BPSFail = @[Common.BPS.Fail] +Entities.gmod_subway_81-502.Buttons.NMnUAVA.!NMPressureLow = @[Commom.NMnUAVA.NMPressureLow] +Entities.gmod_subway_81-502.Buttons.NMnUAVA.!UAVATriggered = @[Commom.NMnUAVA.UAVATriggered] + +Entities.gmod_subway_81-502.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-502.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-502.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-502.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-502.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-502.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-502.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-502.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-502.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-502.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-502.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-502.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-502.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-502.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber3+ = @[Common.ALL.RouteNumber3+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber3- = @[Common.ALL.RouteNumber3-] + +Entities.gmod_subway_81-502.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-502.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-502.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-502.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-502.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-502.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-501 +Entities.gmod_subway_81-501.Buttons.AV.KPVUToggle = @[Entities.gmod_subway_81-502.Buttons.AV.KPVUToggle] +Entities.gmod_subway_81-501.Buttons.AV.KSDToggle = @[Entities.gmod_subway_81-502.Buttons.AV.KSDToggle] + +Entities.gmod_subway_81-501.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-501.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-501.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-501.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-501.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-501.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_81-501.Buttons.Main.!GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-501.Buttons.Main.!RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-501.Buttons.Main.!SD = @[Common.703.SD] +Entities.gmod_subway_81-501.Buttons.Main.LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-501.Buttons.Main.LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-501.Buttons.Main.VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-501.Buttons.Main.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-501.Buttons.Main.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-501.Buttons.Main.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-501.Buttons.Main.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-501.Buttons.Main.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-501.Buttons.Main.VUDToggle = @[Common.ALL.VUD] + +Entities.gmod_subway_81-501.Buttons.HelperPanel.VDLSet = @[Common.ALL.KDL] + +Entities.gmod_subway_81-501.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-501.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-501.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-501.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-501.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-501.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-501.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-501.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-501.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-501.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-501.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-501.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-501.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-501.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-501.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-501.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] + +Entities.gmod_subway_81-501.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#Cameras: +Train.502.AV = Switches +Train.502.VBA = @[Entities.gmod_subway_81-502.Buttons.VBA.VBAToggle] +Train.502.VRD = VRD +Train.502.RCARS = RC-ARS +Train.502.RCAV5 = RC-AV5 +Train.502.RCBPS = RC-BPS +Train.502.RCAV3 = RC-AV3 +Train.502.RCAV4 = RC-AV4 + +#Spawner: +Entities.gmod_subway_81-502.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-502.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-502.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-502.Spawner.EMAType.Name = @[Spawner.Common.EType] +Entities.gmod_subway_81-502.Spawner.EMAType.1 = @[Spawner.502.TypeNVL] +Entities.gmod_subway_81-502.Spawner.EMAType.2 = @[Spawner.502.TypeKVLO] +Entities.gmod_subway_81-502.Spawner.EMAType.3 = @[Spawner.502.TypeKVLN] +Entities.gmod_subway_81-502.Spawner.EWagons.Name = @[Spawner.502.EWagons] +Entities.gmod_subway_81-502.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-502.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-502.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-502.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-502.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/en_508.lua b/lua/metrostroi_data/languages/en_508.lua new file mode 100644 index 0000000..8fbe97f --- /dev/null +++ b/lua/metrostroi_data/languages/en_508.lua @@ -0,0 +1,132 @@ +return [[ +#81-508/509 + +[en] + +#######Buttons########### +#Common +Common.508.50V = +50V: Additional consumers +Common.508.UKS = Speed limiter active +Common.508.UKSDisconnect = Speed limiter disable valve +Common.508.Heaters = Passenger compartment heater + + +#gmod_subway_em508 +Entities.gmod_subway_em508.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_em508.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_em508.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_em508.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_em508.Spawner.Announcer.1 = @[Spawner.710.RRI] +Entities.gmod_subway_em508.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_em508.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_em508.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_em508.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_em508.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] + +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.AV2.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_em508.Buttons.50V.50VToggle = @[Common.508.50V] +Entities.gmod_subway_em508.Buttons.PassHeaters.HPassToggle = @[Common.508.Heaters] + +Entities.gmod_subway_em508.Buttons.Lamps.!GRP = @[Common.ALL.GRP] +Entities.gmod_subway_em508.Buttons.Lamps.!LSN = @[Common.ALL.SN] +Entities.gmod_subway_em508.Buttons.Lamps.!RRP = @[Common.ALL.RRP] +Entities.gmod_subway_em508.Buttons.Lamps.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_em508.Buttons.Lamps.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_em508.Buttons.Lamps.!SD = @[Common.703.SD] +Entities.gmod_subway_em508.Buttons.Lamps.!UKS = @[Common.508.UKS] +Entities.gmod_subway_em508.Buttons.Lamps.KU16Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_em508.Buttons.Main1.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_em508.Buttons.Main1.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_em508.Buttons.Main1.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_em508.Buttons.Main1.KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_em508.Buttons.Main1.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_em508.Buttons.Main1.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_em508.Buttons.Main1.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_em508.Buttons.Main1.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_em508.Buttons.Main1.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_em508.Buttons.Main1.UV1Set = @[Common.702.VZ1] +Entities.gmod_subway_em508.Buttons.Main1.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_em508.Buttons.Main1.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_em508.Buttons.Main1.KU6KToggle = @[Common.ALL.KDLPK] + +Entities.gmod_subway_em508.Buttons.KU14.KU14Set = @[Common.ALL.KRP] +Entities.gmod_subway_em508.Buttons.KU10R.KU10RSet = @[Common.ALL.KRZD] +Entities.gmod_subway_em508.Buttons.AVU.OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_em508.Buttons.AVU.!AVULight = @[Common.ALL.LAVU] +Entities.gmod_subway_em508.Buttons.KRR.KRRSet = @[Common.703.KRR] +Entities.gmod_subway_em508.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_em508.Buttons.DriverMicrophone.R_Program1Set = @[Common.ALL.Program1] + +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.HelperPanel.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_em508.Buttons.HelperPanel.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_em508.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_em508.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_em508.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_em508.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_em508.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_em508.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_em508.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_em508.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_em508.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_em508.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_em508.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_em508.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_em508.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] +Entities.gmod_subway_em508.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_em508.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_em508.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_em508.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_em508.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_em508.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_em508.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_em508.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_em508.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_em508.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_em508.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_em508.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] + + +Entities.gmod_subway_em508.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +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.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_em508.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_em508.Buttons.UAVAPanel.UKSDisconnectToggle = @[Common.508.UKSDisconnect] +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.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +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] + +Entities.gmod_subway_em508.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_em508.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_em508.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_em508.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_em508.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_em508.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/en_702.lua b/lua/metrostroi_data/languages/en_702.lua new file mode 100644 index 0000000..f81e3de --- /dev/null +++ b/lua/metrostroi_data/languages/en_702.lua @@ -0,0 +1,761 @@ +return [[ +#D/E-based types + +[en] + +#Cameras: +Train.702.Breakers1 = Battery switch +Train.702.Breakers2 = Lighting switches +Train.702.Breakers3 = Main breaker +Train.703.Breakers1 = Battery switch +Train.703.Breakers2 = Main switch and lighting switches +Train.703.Parking = Parking brake, UAVA +Train.703.RCARS = RC-1: ARS circuits disconnector +Train.703.AVU = AVU block + +#Spawner +Spawner.707.Type = Panel type +Spawner.707.Type1 = Old + RRI +Spawner.707.Type2 = New + ASNP +Spawner.710.RRI = Radio-relay announcer + +#######Buttons########### +Train.Buttons.ParkingBrake = %d%% +Train.Buttons.EnginesVoltage = %d V #NEW (volts) +Train.Buttons.CanAB = Autoblocking mode is available #NEW (automatic block signals (without ARS)) +Train.Buttons.InAB = In autoblocking mode #NEW (automatic block signals (without ARS)) + +#Common +Common.702.VZ1 = Pneumatic valve â„–1 +Common.703.ParkingBrakeLeft = Release the parking brake +Common.703.ParkingBrakeRight = Apply the parking brake +Common.703.KSD = KSD: Doors interlock control button +Common.703.SD = @[Common.502.SDW] +Common.703.VU1 = Driver's cab heater +Common.703.VU2 = Emergency lighting +Common.703.VU3 = Driver's cab lighting +Common.703.AV = Main breaker (high voltage circuits) +Common.703.LOn = Enable lighting +Common.703.LOff = Disable lighting +Common.703.KRR = KRR: Rotate RK to the first position #FIXME +Common.703.RUT = RUT adjustment (reduced acceleration) +Common.707.SEQ = Rheostat controller motion lamp +Common.707.TAH = TAH: Emergency drive mode for driving without ARS +Common.710.RK = Rheostat controller is in intermediate position +Common.710.LKVT = Attention light #NEW #FIXME + +Common.710.SAMMSchemeOff = SAMM stop button +Common.710.SAMMStart = SAMM start button +Common.710.SAMMReset = SAMM: Reset button +Common.710.SAMMXTLamp = SAMM: Assemble drive/brake circuits by ATO +Common.710.SAMMSignal1 = SAMM: @[Common.ALL.Unsused1] +Common.710.SAMMSignal2 = SAMM: @[Common.ALL.Unsused1] +Common.710.SAMMOn = SAMM: Switch (automatic train operation) +Common.710.SAMMUnit = SAMM: Execution unit +Common.710.SAMMX2 = SAMM: X2 mode +Common.710.SAMMAhead = SAMM: Catch-up mode +Common.710.SAMMAccept = SAMM: Permission + +#gmod_subway_81-702 +Entities.gmod_subway_81-702.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-702.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-702.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-702.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-702.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-702.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-702.Buttons.VU.KU1Set = @[Common.703.LOn] +Entities.gmod_subway_81-702.Buttons.VU.KU2Set = @[Common.703.LOff] +Entities.gmod_subway_81-702.Buttons.MainB.KU7Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-702.Buttons.MainB.KU6Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-702.Buttons.MainB.VRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-702.Buttons.MainB.KU3Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-702.Buttons.MainP.VZSet = @[Common.702.VZ1] +Entities.gmod_subway_81-702.Buttons.KU9.KU9Set = @[Common.703.KSD] +Entities.gmod_subway_81-702.Buttons.KU5.KU5Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-702.Buttons.MainL.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-702.Buttons.MainL.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-702.Buttons.MainL.!Blue = @[Common.703.SD] +Entities.gmod_subway_81-702.Buttons.VU.SNSet = @[Common.ALL.KSN] + +Entities.gmod_subway_81-702.Buttons.HelperPanel.KU10Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-702.Buttons.HelperPanel.KU8Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-702.Buttons.HelperPanel.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-702.Buttons.HelperPanel.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_81-702.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_81-702.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_81-702.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_81-702.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_81-702.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] + +Entities.gmod_subway_81-702.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-702.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-702.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-702.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-702.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-702.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-702.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-702.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-702.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-702.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-702.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-702.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-702.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-702.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-702.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-702.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-702.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-702.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-702.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-702.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-702_int +Entities.gmod_subway_81-702_int.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-702_int.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-702_int.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-702_int.Buttons.VU.KU1Set = @[Common.703.LOn] +Entities.gmod_subway_81-702_int.Buttons.VU.KU2Set = @[Common.703.LOff] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU7Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU6Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-702_int.Buttons.MainB.VRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU3Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-702_int.Buttons.KU9.KU9Set = @[Common.703.KSD] +Entities.gmod_subway_81-702_int.Buttons.KU5.KU5Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-702_int.Buttons.MainL.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-702_int.Buttons.MainL.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-702_int.Buttons.MainL.!Blue = @[Common.703.SD] +Entities.gmod_subway_81-702_int.Buttons.VU.SNSet = @[Common.ALL.KSN] + +Entities.gmod_subway_81-702_int.Buttons.HelperPanel.KU10Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-702_int.Buttons.HelperPanel.KU8Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_81-702_int.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-702_int.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-702_int.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-702_int.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-702_int.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-702_int.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-702_int.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-702_int.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-702_int.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-702_int.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702_int.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702_int.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-702_int.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-702_int.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-702_int.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-702_int.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-702_int.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-702_int.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-702_int.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-702_int.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-703 +Entities.gmod_subway_81-703.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-703.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-703.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-703.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-703.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-703.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-703.Buttons.AV2.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-703.Buttons.Main.RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-703.Buttons.Main.GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-703.Buttons.Main.SD = @[Common.703.SD] +Entities.gmod_subway_81-703.Buttons.Main.SDW = @[Common.502.SDW] +Entities.gmod_subway_81-703.Buttons.Main.PP1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-703.Buttons.Main.PP6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-703.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_81-703.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_81-703.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_81-703.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_81-703.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-703.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_81-703.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-703.Buttons.Main.KU7KToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-703.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703.Buttons.Main.KU6KToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-703.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-703.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-703.Buttons.Main.KU12Toggle = @[Common.703.RUT] +Entities.gmod_subway_81-703.Buttons.VU4.KU16Toggle = @[Common.ALL.VF2] + +Entities.gmod_subway_81-703.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-703.Buttons.HelperPanel.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-703.Buttons.HelperPanel.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_81-703.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_81-703.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_81-703.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_81-703.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_81-703.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] + +Entities.gmod_subway_81-703.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-703.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-703.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-703.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-703.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-703.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-703.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-703.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-703.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-703.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-703.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-703.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-703.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-703.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-703.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-703.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-703.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-703.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-703.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-703.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-703.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-703_int +Entities.gmod_subway_81-703_int.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-703_int.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-703_int.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-703_int.Buttons.Main.RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-703_int.Buttons.Main.GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-703_int.Buttons.Main.SD = @[Common.703.SD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_81-703_int.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_81-703_int.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_81-703_int.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_81-703_int.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-703_int.Buttons.Main.KU7KToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703_int.Buttons.Main.KU6KToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU12Toggle = @[Common.703.RUT] +Entities.gmod_subway_81-703_int.Buttons.VU4.KU16Toggle = @[Common.ALL.VF2] + +Entities.gmod_subway_81-703_int.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703_int.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_81-703_int.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-703_int.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-703_int.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-703_int.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-703_int.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-703_int.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-703_int.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-703_int.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-703_int.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-703_int.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703_int.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703_int.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-703_int.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-703_int.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-703_int.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-703_int.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-703_int.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-703_int.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-703_int.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-703_int.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-703_int.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_ezh +Entities.gmod_subway_ezh.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_ezh.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_ezh.Buttons.VU.KU14Set = @[Common.ALL.KRP] +Entities.gmod_subway_ezh.Buttons.VU.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_ezh.Buttons.KRR.KRRSet = @[Common.703.KRR] + +Entities.gmod_subway_ezh.Buttons.AVU.OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_ezh.Buttons.AVU.!AVULight = @[Common.ALL.LAVU] + +Entities.gmod_subway_ezh.Buttons.AV2.R_RadioToggle = @[Common.ALL.VASNP] +Entities.gmod_subway_ezh.Buttons.AV2.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_ezh.Buttons.AV2.UOSToggle = @[Common.ALL.UOS] + +Entities.gmod_subway_ezh.Buttons.LampsALS1.!LNF = @[Common.ARS.04] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L0 = @[Common.ARS.0] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L40 = @[Common.ARS.40] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L60 = @[Common.ARS.60] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L70 = @[Common.ARS.70] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L80 = @[Common.ARS.80] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!LNF_2 = @[Common.ARS.04] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L0_2 = @[Common.ARS.0] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L40_2 = @[Common.ARS.40] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L60_2 = @[Common.ARS.60] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L70_2 = @[Common.ARS.70] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L80_2 = @[Common.ARS.80] + +Entities.gmod_subway_ezh.Buttons.AB1.AB1Set = @[Common.ARS.ABButton]@[Common.ARS.ABDriver] +Entities.gmod_subway_ezh.Buttons.AB2.AB2Set = @[Common.ARS.ABButton]@[Common.ARS.ABHelper] +Entities.gmod_subway_ezh.Buttons.KAH.KAHToggle = @[Common.707.TAH] +Entities.gmod_subway_ezh.Buttons.RC1.RC1Toggle = @[Common.ALL.RCARS] + +Entities.gmod_subway_ezh.Buttons.Lamps1.!AV = @[Common.ARS.AV] +Entities.gmod_subway_ezh.Buttons.Lamps1.!SEQ = @[Common.707.SEQ] +Entities.gmod_subway_ezh.Buttons.Lamps1.!ARS = @[Common.ARS.ARS] +Entities.gmod_subway_ezh.Buttons.Lamps1.!AB = @[Common.ARS.AB] +Entities.gmod_subway_ezh.Buttons.Lamps1.!SD = @[Common.703.SD] +Entities.gmod_subway_ezh.Buttons.Lamps1.!LSN = @[Common.ALL.SN] +Entities.gmod_subway_ezh.Buttons.Lamps1.!AV1 = @[Common.ARS.AV1] +Entities.gmod_subway_ezh.Buttons.Lamps1.!RRP = @[Common.ALL.RP] +Entities.gmod_subway_ezh.Buttons.Lamps1.!KT = @[Common.ARS.KT] +Entities.gmod_subway_ezh.Buttons.Lamps1.!VD = @[Common.ARS.VD] +Entities.gmod_subway_ezh.Buttons.Lamps1.!RS = @[Common.ARS.RS] +Entities.gmod_subway_ezh.Buttons.Lamps1.!LN = @[Common.ARS.LN] +Entities.gmod_subway_ezh.Buttons.Lamps2.!RRP2 = @[Common.ALL.RP] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LPU2 = @[Common.707.SEQ] +Entities.gmod_subway_ezh.Buttons.Lamps2.!VD2 = @[Common.ARS.VD] +Entities.gmod_subway_ezh.Buttons.Lamps2.!KT2 = @[Common.ARS.KT] +Entities.gmod_subway_ezh.Buttons.Lamps2.!AB2 = @[Common.ARS.AB] +Entities.gmod_subway_ezh.Buttons.Lamps2.!SD2 = @[Common.703.SD] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LN2 = @[Common.ARS.LN] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LSN2 = @[Common.ALL.SN] + +Entities.gmod_subway_ezh.Buttons.Main1.1:KU16Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_ezh.Buttons.Main1.1:ALSFreqToggle = @[Common.ARS.Freq]@[Common.ARS.FreqD] +Entities.gmod_subway_ezh.Buttons.Main1.1:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU6KToggle = @[Common.ALL.KDLPK] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh.Buttons.Main1.1:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh.Buttons.Main1.1:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh.Buttons.Main1.1:R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU16Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_ezh.Buttons.Main2.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh.Buttons.Main2.2:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU6KToggle = @[Common.ALL.KDLPK] +Entities.gmod_subway_ezh.Buttons.Main2.2:ALSFreqToggle = @[Common.ARS.Freq]@[Common.ARS.FreqD] +Entities.gmod_subway_ezh.Buttons.Main2.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh.Buttons.Main2.2:R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU10Set = @[Common.ALL.KRZD] + +Entities.gmod_subway_ezh.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_ezh.Buttons.HelperPanel.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.HelperPanel.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_ezh.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_ezh.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_ezh.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_ezh.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_ezh.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] + +Entities.gmod_subway_ezh.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_ezh.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_ezh.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_ezh.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_ezh.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_ezh.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_ezh.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + + +Entities.gmod_subway_ezh.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_ezh.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_ezh.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_ezh.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_ezh1 +Entities.gmod_subway_ezh1.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh1.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh1.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh1.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh1.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh1.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh1.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh1.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh1.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] + + +Entities.gmod_subway_ezh1.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh1.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh1.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh1.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh1.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +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.!SD = @[Common.703.SD] + +Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh1.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh1.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh1.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh1.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh1.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh1.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh1.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh1.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh1.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_ezh1.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh1.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh1.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_ezh1.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh1.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_ezh1.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_ez3 +Entities.gmod_subway_ezh3.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh3.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh3.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh3.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh3.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_ezh3.Buttons.RUM.RUMToggle = @[Common.ALL.RCARS] +Entities.gmod_subway_ezh3.Buttons.KRR.KRRSet = @[Common.703.KRR] + +Entities.gmod_subway_ezh3.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_ezh3.Buttons.VUHelper.VUToggle = @[Common.ALL.VU] + + +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSchemeOffSet = @[Common.710.SAMMSchemeOff] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMStartSet = @[Common.710.SAMMStart] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMResetSet = @[Common.710.SAMMReset] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMXTLamp = @[Common.710.SAMMXTLamp] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal1 = @[Common.ALL.Unsused1] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal2 = @[Common.ALL.Unsused1] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMOnToggle = @[Common.710.SAMMOn] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMUnitToggle = @[Common.710.SAMMUnit] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMX2Toggle = @[Common.710.SAMMX2] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMAheadToggle = @[Common.710.SAMMAhead] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMAcceptToggle = @[Common.710.SAMMAccept] +Entities.gmod_subway_ezh3.Buttons.Main.V1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh3.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh3.Buttons.Main.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh3.Buttons.Main.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_ezh3.Buttons.Main.VU14Toggle = @[Common.ALL.VUS] +Entities.gmod_subway_ezh3.Buttons.Main.GLightsToggle = @[Common.ALL.GaugeLights] +Entities.gmod_subway_ezh3.Buttons.Main.VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_ezh3.Buttons.Main.V4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh3.Buttons.Main.V5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh3.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_ezh3.Buttons.Main.KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh3.Buttons.Main.KBSet = @[Common.ARS.KB] +Entities.gmod_subway_ezh3.Buttons.Main.RKLamp = @[Common.710.RK] +Entities.gmod_subway_ezh3.Buttons.Main.ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh3.Buttons.Main.R_UNchToggle = @[Common.ALL.UNCh] +Entities.gmod_subway_ezh3.Buttons.Main.V2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh3.Buttons.Main.R_RadioToggle = @[Common.ALL.R_Radio] +Entities.gmod_subway_ezh3.Buttons.Main.ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh3.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh3.Buttons.Main.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_ezh3.Buttons.Main.PLightsToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_ezh3.Buttons.Main.V10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh3.Buttons.Main.PLightsToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_ezh3.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh3.Buttons.Main.KU12Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh3.Buttons.Main.KAHSet = @[Common.ALL.KAH] +Entities.gmod_subway_ezh3.Buttons.Main.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_ezh3.Buttons.Main.KU10Set = @[Common.ALL.KRP] +Entities.gmod_subway_ezh3.Buttons.Main.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_ezh3.Buttons.Main.R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_ezh3.Buttons.Main.!AnnPlay = @[Common.ALL.AnnPlay] + +Entities.gmod_subway_ezh3.Buttons.HelperPanel.V6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.V3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_ezh3.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] + +Entities.gmod_subway_ezh3.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh3.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh3.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh3.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh3.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh3.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh3.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh3.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_ezh3.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_ezh3.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_ezh3.Buttons.Panel.!L04 = @[Common.ARS.04] +Entities.gmod_subway_ezh3.Buttons.Panel.!L0 = @[Common.ARS.0] +Entities.gmod_subway_ezh3.Buttons.Panel.!L40 = @[Common.ARS.40] +Entities.gmod_subway_ezh3.Buttons.Panel.!L60 = @[Common.ARS.60] +Entities.gmod_subway_ezh3.Buttons.Panel.!L70 = @[Common.ARS.70] +Entities.gmod_subway_ezh3.Buttons.Panel.!L80 = @[Common.ARS.80] + +Entities.gmod_subway_ezh3.Buttons.Panel.!LKT = @[Common.ARS.KT] +Entities.gmod_subway_ezh3.Buttons.Panel.!LSN = @[Common.ALL.SN] +Entities.gmod_subway_ezh3.Buttons.Panel.!LKVD = @[Common.ARS.VD] +Entities.gmod_subway_ezh3.Buttons.Panel.!LRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh3.Buttons.Panel.!LPU = @[Common.ALL.PU] +Entities.gmod_subway_ezh3.Buttons.Panel.!LSD = @[Common.703.SD] + +Entities.gmod_subway_ezh3.Buttons.Panel.!Speedometer = @[Common.ALL.Speedometer] +Entities.gmod_subway_ezh3.Buttons.Panel.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh3.Buttons.Panel.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh3.Buttons.Panel.!HighVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_ezh3.Buttons.Panel.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh3.Buttons.Panel.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +#gmod_subway_em508t +Entities.gmod_subway_em508t.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_em508t.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_em508t.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_em508t.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_em508t.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_em508t.Buttons.VU14.VU14Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_em508t.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_em508t.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_em508t.Buttons.Main.KU12Set = @[Common.ALL.KDL] +Entities.gmod_subway_em508t.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_em508t.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_em508t.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_em508t.Buttons.Main.V2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_em508t.Buttons.Main.V1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_em508t.Buttons.Main.V4Set = @[Common.703.LOn] +Entities.gmod_subway_em508t.Buttons.Main.V5Set = @[Common.703.LOff] +Entities.gmod_subway_em508t.Buttons.Main.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_em508t.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_em508t.Buttons.Main.V10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_em508t.Buttons.Main.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_em508t.Buttons.Main.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_em508t.Buttons.Main.!SD = @[Common.703.SD] + +Entities.gmod_subway_em508t.Buttons.HelperPanel.V6Set = @[Common.ALL.KDL] +Entities.gmod_subway_em508t.Buttons.HelperPanel.V3Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_em508t.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_em508t.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_em508t.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_em508t.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_em508t.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_em508t.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_em508t.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_em508t.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_em508t.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_em508t.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_em508t.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_em508t.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_em508t.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +#Spawner: +Entities.gmod_subway_81-702.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-702.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-702.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-702.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-702.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_81-702.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-702.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-702.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] + +Entities.gmod_subway_81-703.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-703.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-703.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-703.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-703.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_81-703.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-703.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-703.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] + +Entities.gmod_subway_ezh.Spawner.TrainType.Name = @[Spawner.707.Type] +Entities.gmod_subway_ezh.Spawner.TrainType.1 = @[Spawner.707.Type1] +Entities.gmod_subway_ezh.Spawner.TrainType.2 = @[Spawner.707.Type2] +Entities.gmod_subway_ezh.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_ezh.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_ezh.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_ezh.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_ezh.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_ezh.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_ezh.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_ezh.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_ezh.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_ezh.Spawner.EWagons.Name = @[Spawner.502.EWagons] + +Entities.gmod_subway_ezh3.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_ezh3.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_ezh3.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_ezh3.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_ezh3.Spawner.Announcer.1 = @[Spawner.710.RRI] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/en_717.lua b/lua/metrostroi_data/languages/en_717.lua new file mode 100644 index 0000000..ff4316e --- /dev/null +++ b/lua/metrostroi_data/languages/en_717.lua @@ -0,0 +1,1221 @@ +return [[ +#81-717 + +[en] +#Cameras: +Train.717.Breakers = Autobreakers +Train.717.VB = Battery and RC +Train.717.VBD = VBD and UPPS + +Train.717.VRD = VRD +Train.717.SOSD = SOSD +Train.717.PUAV = PUAV +Train.717.PA = PA +Train.717.PAScreen = PA screen + +Train.714.Shunt = Shunting control panel, driver's valve +#Spawner +Spawner.717.Line2 = Train from MPL +Spawner.717.Line4 = Train from PBL +Spawner.717.Line5 = Train from FPL + +Spawner.717.Type = Train type +Spawner.717.BodyType = Body type +Spawner.717.MVM = MVM +Spawner.717.LVZ = LVZ +Spawner.717.MaskType = Mask type +Spawner.717.CranType = Driver's valve type +Spawner.717.LampType = Lamps type +Spawner.717.Lamp1 = LPV-02 +Spawner.717.Lamp2 = LLV-01 +Spawner.717.SeatType = Seats type +Spawner.717.ARS = ARS panel type +Spawner.717.RingType = ARS beeper type +Spawner.717.BPSNType = BPSN type + +#######Buttons########### +Train.Buttons.RZP = BPSN converter protection engaged #NEW + +#Common +Common.717.VBD = ASNP doors blocking switch +Common.717.UPPS = UPPS system switch +Common.717.BPSN = BPSN: Train power supply +Common.717.ARS13V = ARS 13V: ARS stabilized voltage check +Common.717.Radio13V = Radio stabilized 13V voltage check +Common.717.LVD = LVD: 1st wire lamp (motors enabled) +Common.717.LHRK = LHRK: 2nd wire lamp (RK is rotating) +Common.717.LST = LST: 6th wire lamp (braking light) +Common.717.KVC = LKVC: Auxiliary circuits contactor lamp (high voltage is not available) +Common.717.GLEB = GLEB: Update indicator +Common.717.KVP = LKVP: High-voltage converter control (BPSN) +Common.717.LSP = LSP: Fire emergency +Common.717.LEKK = LEKK: Electric box indicator +Common.717.LPU = LPU: Reduced RUT setting indicator +Common.717.OtklBV = Disable fast-acting switch (BV) +Common.717.OtklBVK = Fast-acting switch cover +Common.717.ConverterProtection = Power supply protection button +Common.717.VZ1 = VZ1: Pneumatic valve â„–1 +Common.717.VL1 = Ventilation non-inclusion control lamp +Common.717.V13 = Emergency ventilation switch +Common.717.V11 = 1st ventilation group switch +Common.717.V12 = 2nd ventilation group switch +Common.717.RZPL = RZP: Power supply protection relay +Common.717.VPAOn = VPA: Enable train unit +Common.717.VPAOff = VPA: Disable train unit +Common.717.VZD = VZD: Door control toggle (close doors) + +Common.717.A53 = A53: Auxiliary circuits contactor +Common.717.A56 = A56: Battery +Common.717.A54 = A54: Train control +Common.717.A17 = A17: Doors, emergency white headlights +Common.717.A44 = A44: Emergency controller, emergency compressor, emergency ARS power +Common.717.A39 = A39: Train start via emergency controller +Common.717.A70 = A70: RKTT auto mode +Common.717.A14 = A14: Emergency start relay +Common.717.A74 = A74: Reset train protection +Common.717.A26 = A26: Low frequency amplifier +Common.717.AR63 = AР63: Radiostation +Common.717.AS1 = AС1: Intercom, ASNP +Common.717.A13 = A13: Doors state +Common.717.A21 = A21: Doors control +Common.717.A31 = A31: Left doors opening +Common.717.A32 = A32: Right doors opening +Common.717.A16 = A16: Doors closing +Common.717.A12 = A12: Emergency doors closing + +Common.717.A24 = A24: Charge control +Common.717.A49 = A49: Emergency lighting +Common.717.A27 = A27: Passenger compartment lighting, cabin lighting, brake signaling, green RP lamp +Common.717.A72 = A72: Pneumatic valve â„–1 sync +Common.717.A50 = A50: Lighting contactor +Common.717.AV3 = AÐ’3: Emergency ventilation power +Common.717.AV3S = AÐ’3: Emergency radiostation power +Common.717.AV2 = AÐ’2: Main ventilation power +Common.717.AV4 = AÐ’4: 1st ventilation group control +Common.717.AV5 = AÐ’5: 2nd ventilation group control +Common.717.AV6 = AÐ’6: Emergency ventilation group control +Common.717.AV1 = AÐ’1: Ventilation control, ventilation signaling, cabin ventilation +Common.717.A29 = A29: Headlights power +Common.717.A46 = A46: Dim headlights (1st group) +Common.717.A47 = A47: Bright headlights (2nd group) +Common.717.A71 = A71: RV-3 power from controller and ARS +Common.717.A7 = A7: Right red light +Common.717.A9 = A9: Left red light + +Common.717.A84 = @[Common.ALL.VU] +Common.717.A8 = A8: Pneumatic valve â„–2 +Common.717.A52 = A52: Pneumatic valve by attention pedal +Common.717.A19 = A19: Wagon RV-3 power +Common.717.A48 = A48: Attention pedal, RPB, main ARS power +Common.717.A10 = A10: Compressor control +Common.717.A22 = A22: Compressor contactor +Common.717.A30 = A30: Rheostat controller servomotor power (SDRK) +Common.717.A1 = A1: Drive mode +Common.717.A2 = A2: Rheostat controller control +Common.717.A3 = A3: X-3 +Common.717.A4 = A4: Drive backward +Common.717.A5 = A5: Drive forward +Common.717.A6 = A6: Brake +Common.717.A18 = A18: Protection reset +Common.717.A73 = A73: Failure signalling +Common.717.A20 = A20: LK-2, LK-5 +Common.717.A25 = A25: Manual braking + +Common.717.A11 = A11: Equipment compartment and cabin lighting +Common.717.A37 = A37: Power supply protection relay reset +Common.717.A45 = A45: BPSN control +Common.717.A38 = A38: Wagon circuits failure signalling lamp +Common.717.A51 = A51: KPP and KVP contactors +Common.717.A65 = A65: Secondary BPSN converter +Common.717.A66 = A66: BV disabling +Common.717.A42 = A42: 75V ARS +Common.717.A43 = A43: 12V ARS +Common.717.A432 = A43: EPK control +Common.717.A41 = A41: Pneumatic valve â„–2 by ARS +Common.717.A40 = A40: Braking light +Common.717.A75 = A75: Cabin heater +Common.717.A76 = A76: Fire alarm (ASOTP) +Common.717.A60 = A60: Motors enabled lamp +Common.717.A58 = A58: KAH-1 +Common.717.A57 = A57: Rheostat controller rotation lamp +Common.717.A59 = A59: KAH-2 +Common.717.A28 = A28: Thyristor regulator control unit power +Common.717.A55 = A55: Rheostat controller sync +Common.717.A68 = A68: Contact shoes control +Common.717.A80 = A80: BV enabling +Common.717.A81 = A81: BV control + +Common.717.A58PU = A58: PUAV power +Common.717.A59PU = A59: PUAV control +Common.717.A61PU = A61: PUAV reverser key control +Common.717.A58PA = A58: PA power +Common.717.A59PA = Ð59: @[Common.ALL.Unsused1] +Common.717.A61PA = A61: PA reverser key control + +Common.717.A78 = A78: Front doors control +Common.717.ABK = A-VK: Cabin air conditioner control + +Common.717.A81 = A81: BV control +Common.717.A23 = A23: Compressor startup +Common.717.A15 = A15: Emergency lighting +Common.717.AIS = AIS: Speed sensor circuit-breaker + +Common.717.RC2 = RC-2: Autodrive system circuits disconnector +Common.717.VAU = VAU: Autodrive system switch + +Common.717.LampDV = DV: Rotation sensor malfunction +Common.717.ARSL20 = Speed limit 20 km/h +Common.717.ARSL40 = @[Common.ARS.40] +Common.717.ARSL60 = @[Common.ARS.60] +Common.717.ARSL70 = @[Common.ARS.70] +Common.717.ARSL80 = @[Common.ARS.80] + +Common.PUAV.K16 = LK16: Power availability on 16th wire (doors closing) +Common.PUAV.OS = LOS: PUAV speed limitation mode +Common.PUAV.AVT = LAVT: PUAV autodrive mode +Common.PUAV.RS = LRS: PUAV speed regulation mode +Common.PUAV.KI1 = LKI1: 1st PUAV subset malfunction indicator +Common.PUAV.KI2 = LKI2: 2nd PUAV subset malfunction indicator +Common.717.KH = KH3: Enable X-3 mode by autodrive system +Common.717.KSZD = KSZD: Approve doors closing +Common.717.VAV = @[Common.ALL.VAV] + +Common.717.PAM = PA-M +Common.717.PAKSDM = PA-KSD-M + +Common.PA.P = P +Common.PA.F = F +Common.PA.Up = Up +Common.PA.M = M +Common.PA.Left = Left +Common.PA.Down = Down +Common.PA.Right = Right +Common.PA.Esc = Cancel +Common.PA.Enter = Enter + +Common.714.Start = Start traction-motors #FIXME +Common.714.RV = Direction switch #FIXME + +#gmod_subway_81-717 +Entities.gmod_subway_81-717_mvm.Buttons.Battery_C.1:UOSToggle = @[Common.ALL.UOS] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_R.2:UOSToggle = @[Common.ALL.UOS] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_C.1:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_R.2:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_C.1:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_R.2:RC1Toggle = @[Common.ALL.RC1] + +Entities.gmod_subway_81-717_mvm.Buttons.VBD_C.1:VBDToggle = @[Common.717.VBD] +Entities.gmod_subway_81-717_mvm.Buttons.VBD_R.2:VBDToggle = @[Common.717.VBD] +Entities.gmod_subway_81-717_mvm.Buttons.VBD_C.1:UPPS_OnToggle = @[Common.717.UPPS] +Entities.gmod_subway_81-717_mvm.Buttons.VBD_R.2:UPPS_OnToggle = @[Common.717.UPPS] + +Entities.gmod_subway_81-717_mvm.Buttons.Block1.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.RezMKSet = @[Common.ALL.RMK] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.ARS13Set = @[Common.717.ARS13V] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARSOch = @[Common.ARS.04] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLSD1 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLSD2 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLHRK = @[Common.717.LHRK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampRP = @[Common.ALL.RP] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLSN = @[Common.ALL.SN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLN = @[Common.ARS.LN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLKVC = @[Common.717.KVC] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLRS = @[Common.ARS.RS] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLVD = @[Common.717.LVD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLST = @[Common.717.LST] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLEKK = @[Common.717.LEKK] + +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARSOch = @[Common.ARS.04] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLSD1 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLSD2 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLVD = @[Common.717.LVD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLHRK = @[Common.717.LHRK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLST = @[Common.717.LST] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampRP = @[Common.ALL.RP] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLSN = @[Common.ALL.SN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLKVC = @[Common.717.KVC] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLEKK = @[Common.717.GLEB] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLN = @[Common.ARS.LN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLRS = @[Common.ARS.RS] + +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!Speedometer = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LSD = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LOch = @[Common.ARS.0]\n@[Common.ARS.04] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LN = @[Common.ARS.LN]\n@[Common.ARS.40] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!60 = @[Common.ARS.60]\n@[Common.ARS.80] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!70 = @[Common.ARS.70]\n@[Common.717.LHRK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LEKK = @[Common.717.LEKK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LPU = @[Common.717.LPU] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LKVC = @[Common.717.KVC] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LVD = @[Common.717.LVD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LST = @[Common.717.LST] + +Entities.gmod_subway_81-717_mvm.Buttons.Block3.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-717_mvm.Buttons.Block3.!BCPressure = @[Common.ALL.BCPressure] + +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] + +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_UNchToggle = @[Common.ALL.UNCh] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_ZSToggle = @[Common.ALL.ES] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_RadioToggle = @[Common.ALL.R_Radio] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.1:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.1:KVTRSet = @[Common.ARS.KVTR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.2:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.2:KVTRSet = @[Common.ARS.KVTR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!L1Light = @[Common.717.VL1] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.V13Toggle = @[Common.717.V13] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VUD1Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!GreenRPLight = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!AVULight = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!LKVPLight = @[Common.717.KVP] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!SPLight = @[Common.717.LSP] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OtklBVSet = @[Common.717.OtklBV] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OtklBVKToggle = @[Common.717.OtklBVK] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.V11Toggle = @[Common.717.V11] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.V12Toggle = @[Common.717.V12] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ARSRToggle = @[Common.ALL.ARSR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ALSFreqToggle = @[Common.ARS.Freq] @[Common.ARS.FreqU] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.L_3Toggle = @[Common.ALL.PanelLights] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VPToggle = @[Common.ARS.VP] + +Entities.gmod_subway_81-717_mvm.Buttons.Block7.L_4Toggle = @[Common.ALL.VF] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.VADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KRPSet = @[Common.ALL.KRP] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KAHSet = @[Common.ALL.KAH] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KAHKToggle = @[Common.ALL.KAHK] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.!PNT = @[Common.ALL.BrT] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.!PNW = @[Common.ALL.BrW] + +Entities.gmod_subway_81-717_mvm.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-717_mvm.Buttons.HVMeters.!HighVoltage = @[Common.ALL.HighVoltage] + +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:R_Program2HSet = @[Common.ALL.Program2] + +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_C.SAB1Toggle = @[Common.BZOS.On] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_C.!VH1 = @[Common.BZOS.VH1] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_C.!VH2 = @[Common.BZOS.VH2] + +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_R.1:SAB1Toggle = @[Common.BZOS.On] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_R.1:!VH1 = @[Common.BZOS.VH1] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_R.1:!VH2 = @[Common.BZOS.VH2] + + +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_C.PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_C.PVK+ = @[Common.CabVent.PVK+] +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_R.1:PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_R.1:PVK+ = @[Common.CabVent.PVK+] + +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA23 = @[Common.IGLA.Button23] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA3Set = @[Common.IGLA.Button3] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA4Set = @[Common.IGLA.Button4] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.!IGLAFire = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA23 = @[Common.IGLA.Button23] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA3Set = @[Common.IGLA.Button3] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA4Set = @[Common.IGLA.Button4] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:!IGLAFire = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:!IGLAErr = @[Common.IGLA.IGLAErr] + +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A26Toggle = @[Common.717.A26] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AR63Toggle = @[Common.717.AR63] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AS1Toggle = @[Common.717.AS1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV3Toggle = @[Common.717.AV3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV2Toggle = @[Common.717.AV2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV4Toggle = @[Common.717.AV4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV5Toggle = @[Common.717.AV5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV6Toggle = @[Common.717.AV6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A9Toggle = @[Common.717.A9] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A43Toggle = @[Common.717.A43] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A76Toggle = @[Common.717.A76] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A60Toggle = @[Common.717.A60] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A58Toggle = @[Common.717.A58] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A59Toggle = @[Common.717.A59] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A26Toggle = @[Common.717.A26] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:AR63Toggle = @[Common.717.AR63] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:AS1Toggle = @[Common.717.AS1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A76Toggle = @[Common.717.A76] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A43Toggle = @[Common.717.A43] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A28Toggle = @[Common.717.A28] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AISToggle = @[Common.717.AIS] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A80Toggle = @[Common.717.A80] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV2Toggle = @[Common.717.AV2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV3Toggle = @[Common.717.AV3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV4Toggle = @[Common.717.AV4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV5Toggle = @[Common.717.AV5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV6Toggle = @[Common.717.AV6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A81Toggle = @[Common.717.A81] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A9Toggle = @[Common.717.A9] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A68Toggle = @[Common.717.A68] + +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-717_mvm.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-717_mvm.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle = @[Common.ALL.DriverValveDisconnect] +Entities.gmod_subway_81-717_mvm.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-717_mvm.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-717_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] + +Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-717_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_mvm.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-717_mvm.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-717_mvm.Buttons.OtsekDoor1.OtsekDoor1 = @[Common.ALL.OtsekDoor1] +Entities.gmod_subway_81-717_mvm.Buttons.OtsekDoor2.OtsekDoor2 = @[Common.ALL.OtsekDoor2] +Entities.gmod_subway_81-717_mvm.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_81-717_mvm.Buttons.EPVDisconnect.EPKToggle = @[Common.ALL.EPV] +Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] + + +#gmod_subway_81-717_lvz +#Buttons: +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1P:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2P:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:RC2Toggle = @[Common.717.RC2] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:RC2Toggle = @[Common.717.RC2] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:VAUToggle = @[Common.717.VAU] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:VAUToggle = @[Common.717.VAU] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:VRDToggle = @[Common.ARS.VRD] + +Entities.gmod_subway_81-717_lvz.Buttons.VRD_C.1:VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-717_lvz.Buttons.SOSD_C.1:VSOSDToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-717_lvz.Buttons.SOSD_R.2:VSOSDToggle = @[Common.ALL.VSOSD] + +Entities.gmod_subway_81-717_lvz.Buttons.Block1.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.ARS13Set = @[Common.717.ARS13V] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.Radio13Set = @[Common.717.Radio13V] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSOch = @[Common.ARS.N4] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLSD1 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLSD2 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLVD = @[Common.ALL.L1w] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLHRK = @[Common.ALL.L2w] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLST = @[Common.ALL.L6w] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLRD = @[Common.ARS.LRD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampRP = @[Common.ALL.RP] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLSN = @[Common.ALL.SN] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampDV = @[Common.717.LampDV] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!SpeedFact1 = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!SpeedFact2 = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL20 = @[Common.717.ARSL20] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL40 = @[Common.717.ARSL40] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL60 = @[Common.717.ARSL60] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL70 = @[Common.717.ARSL70] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL80 = @[Common.717.ARSL80] + +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!NMPressureLow2 = @[Commom.NMnUAVA.NMPressureLow] +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!UAVATriggered2 = @[Commom.NMnUAVA.UAVATriggered] + +Entities.gmod_subway_81-717_lvz.Buttons.USS1.!NMPressureLow = @[Commom.NMnUAVA.NMPressureLow] +Entities.gmod_subway_81-717_lvz.Buttons.USS1.!UAVATriggered = @[Commom.NMnUAVA.UAVATriggered] + +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OK16 = @[Common.PUAV.K16] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OLRS = @[Common.PUAV.RS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OKI1 = @[Common.PUAV.KI1] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OKI2 = @[Common.PUAV.KI2] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OOS = @[Common.PUAV.OS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OAVT = @[Common.PUAV.AVT] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:KHSet = @[Common.717.KH] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:KSZDSet = @[Common.717.KSZD] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:VAVToggle = @[Common.717.VAV] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:VZPToggle = @[Common.ALL.VZP] + +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!K16 = @[Common.PUAV.K16] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!OS = @[Common.PUAV.OS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!AVT = @[Common.PUAV.AVT] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!LRS = @[Common.PUAV.RS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!KI1 = @[Common.PUAV.KI1] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!KI2 = @[Common.PUAV.KI2] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARSOch = @[Common.ARS.N4] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.KHSet = @[Common.717.KH] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.KSZDSet = @[Common.717.KSZD] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.VAVToggle = @[Common.717.VAV] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.VZPToggle = @[Common.ALL.VZP] + +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMPSet = @[Common.717.PAM]: @[Common.PA.P] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMFSet = @[Common.717.PAM]: @[Common.PA.F] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMUpSet = @[Common.717.PAM]: @[Common.PA.Up] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMMSet = @[Common.717.PAM]: @[Common.PA.M] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMLeftSet = @[Common.717.PAM]: @[Common.PA.Left] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMDownSet = @[Common.717.PAM]: @[Common.PA.Down] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMRightSet = @[Common.717.PAM]: @[Common.PA.Right] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM1Set = @[Common.717.PAM]: 1 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM2Set = @[Common.717.PAM]: 2 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM3Set = @[Common.717.PAM]: 3 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM4Set = @[Common.717.PAM]: 4 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM5Set = @[Common.717.PAM]: 5 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM6Set = @[Common.717.PAM]: 6 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM7Set = @[Common.717.PAM]: 7 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM8Set = @[Common.717.PAM]: 8 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM9Set = @[Common.717.PAM]: 9 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMEscSet = @[Common.717.PAM]: @[Common.PA.Esc] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM0Set = @[Common.717.PAM]: 0 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMEnterSet = @[Common.717.PAM]: @[Common.PA.Enter] +Entities.gmod_subway_81-717_lvz.Buttons.PAM.2:KSZDSet = @[Common.717.KSZD] +Entities.gmod_subway_81-717_lvz.Buttons.PAM.2:VZPToggle = @[Common.ALL.VZP] + +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:R_UPOToggle = @[Common.ALL.UPO] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!OhSigLamp1 = @[Common.BZOS.Engaged] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:VUD1Toggle = @[Common.717.VZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!GreenRPLight1 = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!AVULight1 = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!LKVPLight1 = @[Common.717.KVP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!SPLight1 = @[Common.717.LSP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:L_3Toggle = @[Common.ALL.PanelLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:OhrSigToggle = @[Common.BZOS.On] + +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:R_UPOToggle = @[Common.ALL.UPO] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!OhSigLamp2 = @[Common.BZOS.Engaged] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VUD1Toggle = @[Common.717.VZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!KDLLight2 = @[Common.ALL.KDLL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!KDLRLight2 = @[Common.ALL.KDLL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!GreenRPLight2 = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!RZPLight2 = @[Common.717.RZPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!LKVPLight2 = @[Common.717.KVP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:OhrSigToggle = @[Common.BZOS.On] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VPAOnSet = @[Common.717.VPAOn] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VPAOffSet = @[Common.717.VPAOff] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!AVULight2 = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:L_3Toggle = @[Common.ALL.PanelLights] + +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!RZPLight1 = @[Common.717.RZPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:R_UPOToggle = @[Common.ALL.UPO] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!SPLight3 = @[Common.717.LSP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!AVULight3 = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:VUD1Toggle = @[Common.717.VZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!GreenRPLight3 = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!RZPLight3 = @[Common.717.RZPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!LKVPLight3 = @[Common.717.KVP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.1:VPAOnSet = @[Common.717.VPAOn] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.1:VPAOffSet = @[Common.717.VPAOff] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:OVTToggle = @[Common.ALL.VOVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:L_3Toggle = @[Common.ALL.PanelLights] + +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:L_4Toggle = @[Common.ALL.VF] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:VADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:KRPSet = @[Common.ALL.KRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:RezMKSet = @[Common.ALL.RMK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.!1:PNT = @[Common.ALL.BrT] + +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:L_4Toggle = @[Common.ALL.VF] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:VADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:KRPSet = @[Common.ALL.KRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:RezMKSet = @[Common.ALL.RMK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.!KDPLight2 = @[Common.ALL.KDPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.!2:PNT = @[Common.ALL.BrT] + +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_C.VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_C.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_C.VOPDSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_R.1:VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_R.1:VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_R.1:VOPDSet = @[Common.ALL.KDPH] + +Entities.gmod_subway_81-717_lvz.Buttons.CabVent_C.PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-717_lvz.Buttons.CabVent_C.PVK+ = @[Common.CabVent.PVK+] + +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_N.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_N.!HighVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_O.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_O.!HighVoltage = @[Common.ALL.HighVoltage] + +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A26Toggle = @[Common.717.A26] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AR63Toggle = @[Common.717.AR63] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AS1Toggle = @[Common.717.AS1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AISToggle = @[Common.717.AIS] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AV3Toggle = @[Common.717.AV3S] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A58Toggle = @[Common.717.A58PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A59Toggle = @[Common.717.A59PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A61Toggle = @[Common.717.A61PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:P:A58Toggle = @[Common.717.A58PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:P:A59Toggle = @[Common.717.A59PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:P:A61Toggle = @[Common.717.A61PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A9Toggle = @[Common.717.A9] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A06Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A43Toggle = @[Common.717.A432] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A76Toggle = @[Common.717.A76] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A60Toggle = @[Common.717.A60] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A58Toggle = @[Common.717.A58PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A59Toggle = @[Common.717.A59PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A61Toggle = @[Common.717.A61PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.P:A58Toggle = @[Common.717.A58PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.P:A59Toggle = @[Common.717.A59PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.P:A61Toggle = @[Common.717.A61PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A78Toggle = @[Common.717.A78]@[Common.ALL.Unsused2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.ABKToggle = @[Common.717.ABK]@[Common.ALL.Unsused2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A43Toggle = @[Common.717.A432] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A65Toggle = @[Common.717.A65] + +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A28Toggle = @[Common.717.A28] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.AISToggle = @[Common.717.AIS] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.AV3Toggle = @[Common.717.AV3S] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A60Toggle = @[Common.717.A60] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A9Toggle = @[Common.717.A9] + +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber3+ = @[Common.ALL.RouteNumber3+] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber3- = @[Common.ALL.RouteNumber3-] + +Entities.gmod_subway_81-717_lvz.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle = @[Common.ALL.DriverValveDisconnect] +Entities.gmod_subway_81-717_lvz.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-717_lvz.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-717_lvz.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-717_lvz.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-717_lvz.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] + +Entities.gmod_subway_81-717_lvz.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-717_lvz.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-717_lvz.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_lvz.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_lvz.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-717_lvz.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-717_lvz.Buttons.OtsekDoor1.OtsekDoor1 = @[Common.ALL.OtsekDoor1] +Entities.gmod_subway_81-717_lvz.Buttons.OtsekDoor2.OtsekDoor2 = @[Common.ALL.OtsekDoor2] +Entities.gmod_subway_81-717_lvz.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_81-717_lvz.Buttons.EPVDisconnect.EPKToggle = @[Common.ALL.EPV] +Entities.gmod_subway_81-717_lvz.Buttons.ParkingBrake.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] + +#gmod_subway_81-714_mvm +Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-714_mvm.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-714_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-714_mvm.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-714_mvm.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-714_mvm.Buttons.couch_cap_o.CouchCap = @[Common.ALL.CouchCap] +Entities.gmod_subway_81-714_mvm.Buttons.couch_cap.CouchCap = @[Common.ALL.CouchCap] + +Entities.gmod_subway_81-714_mvm.Buttons.Battery.VBToggle = @[Common.ALL.VB] + +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV2Toggle = @[Common.717.AV2] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV3Toggle = @[Common.717.AV3] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV4Toggle = @[Common.717.AV4] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV5Toggle = @[Common.717.AV5] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A81Toggle = @[Common.717.A81] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV6Toggle = @[Common.717.AV6] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A80Toggle = @[Common.717.A80] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A18Toggle = @[Common.717.A18] + +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A23Toggle = @[Common.717.A23] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-714_mvm.Buttons.VU.A84Toggle = @[Common.ALL.VU] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.!RZPLight = @[Common.717.RZPL] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.OtklBVSet = @[Common.717.OtklBV] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.StartSet = @[Common.714.Start] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.RV- = @[Common.714.RV] @[Common.ALL.CCW] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.RV+ = @[Common.714.RV] @[Common.ALL.CW] +Entities.gmod_subway_81-714_mvm.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-714_mvm.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-714_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] + +Entities.gmod_subway_81-714_mvm.Buttons.Voltages.!BatteryVoltage = @[Common.ALL.BatteryVoltage] +Entities.gmod_subway_81-714_mvm.Buttons.Voltages.!BatteryCurrent = @[Common.ALL.BatteryCurrent] +Entities.gmod_subway_81-714_mvm.Buttons.Pressures.!BCPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-714_mvm.Buttons.Pressures.!BLTLPressure = @[Common.ALL.BCPressure] + +#gmod_subway_81-714_lvz +Entities.gmod_subway_81-714_lvz.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-714_lvz.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-714_lvz.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-714_lvz.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-714_lvz.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-714_lvz.Buttons.couch_cap_o.CouchCap = @[Common.ALL.CouchCap] +Entities.gmod_subway_81-714_lvz.Buttons.couch_cap.CouchCap = @[Common.ALL.CouchCap] + +Entities.gmod_subway_81-714_lvz.Buttons.Battery.VBToggle = @[Common.ALL.VB] + +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A81Toggle = @[Common.717.A81] +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A80Toggle = @[Common.717.A80] +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A18Toggle = @[Common.717.A18] + +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A23Toggle = @[Common.717.A23] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-714_lvz.Buttons.VU.A84Toggle = @[Common.ALL.VU] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.!RZPLight = @[Common.717.RZPL] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.StartSet = @[Common.714.Start] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.RV- = @[Common.714.RV] @[Common.ALL.CCW] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.RV+ = @[Common.714.RV] @[Common.ALL.CW] +Entities.gmod_subway_81-714_lvz.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-714_lvz.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-714_lvz.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] + +Entities.gmod_subway_81-714_lvz.Buttons.Voltages.!BatteryVoltage = @[Common.ALL.BatteryVoltage] +Entities.gmod_subway_81-714_lvz.Buttons.Voltages.!BatteryCurrent = @[Common.ALL.BatteryCurrent] +Entities.gmod_subway_81-714_lvz.Buttons.Pressures.!BCPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-714_lvz.Buttons.Pressures.!BLTLPressure = @[Common.ALL.BCPressure] + +#Spawner: +Entities.gmod_subway_81-717_mvm.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-717_mvm.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] + + +Entities.gmod_subway_81-717_mvm_custom.Spawner.Type.Name = @[Spawner.717.Type] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BodyType.Name = @[Spawner.717.BodyType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BodyType.1 = @[Spawner.717.MVM] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BodyType.2 = @[Spawner.717.LVZ] +Entities.gmod_subway_81-717_mvm_custom.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-717_mvm_custom.Spawner.MaskType.Name = @[Spawner.717.MaskType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.Cran.Name = @[Spawner.717.CranType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.Name = @[Spawner.717.LampType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.2 = @[Spawner.717.Lamp1] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.3 = @[Spawner.717.Lamp2] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.Name = @[Spawner.717.SeatType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.2 = @[Common.Spawner.Old] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.3 = @[Common.Spawner.New] +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.Name = @[Spawner.717.ARS] +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.2 = @[Common.Spawner.Type] 1 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.3 = @[Common.Spawner.Type] 2 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.4 = @[Common.Spawner.Type] 3 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.5 = @[Common.Spawner.Type] 4 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.6 = @[Common.Spawner.Type] 5 +Entities.gmod_subway_81-717_mvm_custom.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-717_mvm_custom.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-717_mvm_custom.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.Name = @[Spawner.717.RingType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.2 = @[Common.Spawner.Type] 1 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.3 = @[Common.Spawner.Type] 2 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.4 = @[Common.Spawner.Type] 3 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.5 = @[Common.Spawner.Type] 4 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.6 = @[Common.Spawner.Type] 5 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.7 = @[Common.Spawner.Type] 6 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.8 = @[Common.Spawner.Type] 7 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.9 = @[Common.Spawner.Type] 8 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.Name = @[Spawner.717.BPSNType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.2 = @[Common.Spawner.Type] 1 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.3 = @[Common.Spawner.Type] 2 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.4 = @[Common.Spawner.Type] 3 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.5 = @[Common.Spawner.Type] 4 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.6 = @[Common.Spawner.Type] 5 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.7 = @[Common.Spawner.Type] 6 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.8 = @[Common.Spawner.Type] 7 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.9 = @[Common.Spawner.Type] 8 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.10 = @[Common.Spawner.Type] 9 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.11 = @[Common.Spawner.Type] 10 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.12 = @[Common.Spawner.Type] 11 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.13 = @[Common.Spawner.Type] 12 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.14 = @[Common.Spawner.Type] 13 +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] + +#Spawner: +Entities.gmod_subway_81-717_lvz.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-717_lvz.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-717_lvz.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-717_lvz.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-717_lvz.Spawner.Type.Name = @[Spawner.Common.EType] +Entities.gmod_subway_81-717_lvz.Spawner.Type.1 = @[Spawner.717.Line2] +Entities.gmod_subway_81-717_lvz.Spawner.Type.2 = @[Spawner.717.Line4] +Entities.gmod_subway_81-717_lvz.Spawner.Type.3 = @[Spawner.717.Line5] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] diff --git a/lua/metrostroi_data/languages/en_718.lua b/lua/metrostroi_data/languages/en_718.lua new file mode 100644 index 0000000..e072f3c --- /dev/null +++ b/lua/metrostroi_data/languages/en_718.lua @@ -0,0 +1,708 @@ +return [[ +#81-718 + +[en] + +#######Buttons########### +#Cameras +Train.718.BUP = BUP +Train.718.PPZ = PPZ +Train.718.VPU = VPU + +Train.Buttons.LHalf = Dim #NEW (panel lighting) +Train.Buttons.LFull = Bright #NEW (panel lighting) +Train.Buttons.HL5 = Control circuits are not engaged #NEW +Train.Buttons.HL6 = Protection has tripped or low current #NEW +Train.Buttons.HL7 = BBE protection has tripped #NEW +#Common +Common.718.SB4 = Check circuits assembly +Common.718.SB5 = Transfer of the controls (ring) +Common.718.SB7K = Shunting drive mode cover +Common.718.SB7 = Shunting drive mode +Common.718.SB12 = Enable automatic switches unit +Common.718.SB13 = Disable automatic switches unit +Common.718.SB15 = Enable train power supply +Common.718.SB16 = Disable train power supply + +Common.718.VTPR = Current collectors release mode switch +Common.718.RX1 = Emergency drive 1 +Common.718.KAH2 = KAH: Emergency drive button for driving w/o ARS in emergency drive mode +Common.718.RX2 = Emergency drive 2 + +Common.718.SPULightStrength = Dashboard indication brightness + +Common.718.Heat = Cabin heater +Common.718.SBP22 = Circuit assembly test +Common.718.KDPR = Emergency right doors opening +Common.718.KDLR = Emergency left doors opening +Common.718.UOS = UOS: Speed Limitation Device (driving w/o EPV/EPK) + +Common.718.KES = KES: Emergency communication control is enabled +Common.718.CUV = CUV: Wagon CUV non-inclusion indicator +Common.718.AIP = AIP: Emergency fire indicator (fire) +Common.718.RIP = RIP: Fire emergency standby mode +Common.718.VS1 = VS1: 1st ventilation group is disabled +Common.718.VS2 = VS2: 2nd ventilation group is disabled + +#Autobreakers +Common.718.SF51 = SF51: Main ARS power +Common.718.SF52 = SF52: Emergency ARS power +Common.718.SF53 = SF53: ARS brake circuits +Common.718.SF60 = SF60: 12V ARS +Common.718.SF61 = SF61: 50V ARS(FMM1) +Common.718.SF77 = SF77: Emergency drive of the main control +Common.718.SF78 = SF78: Emergency drive of the emergency control +Common.718.SF40 = SF40: Pneumatic valve â„–2 by ZPT +Common.718.SF41 = SF41: Headlights +Common.718.SF8 = SF8: Doors control +Common.718.SF11 = SF11: 2nd fan group control +Common.718.SF10 = SF10: 1st fan group control +Common.718.SF7 = SF7: BBE, compressor +Common.718.SF50 = SF50: Speedometer +Common.718.SF76 = SF76: Fire alarm +Common.718.SF73 = SF73: Flange lubrication +Common.718.SF3 = SF3: Wagon power, CUV +Common.718.SF71 = SF71: Emergency intercom +Common.718.SF63 = SF63: Radiostation +Common.718.SF54 = SF54: Announcer 50A +Common.718.SF65 = SF65: Cabin ventilation +Common.718.SF55 = SF55: SOT-3 +Common.718.SF9 = SF9: Emergency train control +Common.718.SF6 = SF6: Main train control +Common.718.SF5 = SF5: BKCU control +Common.718.SF2 = SF2: Train power +Common.718.SF4 = SF4: BUV, PTTI, BCKA power +Common.718.SF27 = SF27: BVA power +Common.718.SF46 = SF46: BVA control +Common.718.SF12 = SF12: BBE enabling +Common.718.SF13 = SF13: BBE disabling +Common.718.SF45 = SF45: BBE, lighting contactor control +Common.718.SF16 = SF16: Passenger compartment lighting control +Common.718.SF44 = SF44: Passenger compartment lighting power +Common.718.SF43 = SF43: Emergency passenger compartment lighting +Common.718.SF14 = SF14: Control circuits contactor power +Common.718.SF15 = SF15: Control circuits contactor emergency power +Common.718.SF25 = SF25: Current collectors release control +Common.718.SF72 = SF72: Parking brake indicator +Common.718.SF56 = SF56: Compressor control +Common.718.SF29 = SF29: Pneumatic valve â„–1 +Common.718.SF26 = SF26: Pneumatic valve â„–2 +Common.718.SF42 = SF42: Subexciter +Common.718.SF18 = SF18: Left doors opening +Common.718.SF20 = SF20: Right doors opening +Common.718.SF17 = SF17: Doors closing +Common.718.SF19 = SF19: Emergency doors closing +Common.718.SF21 = SF21: Main compressor control +Common.718.SF22 = SF22: Emergency compressor control +Common.718.SF34 = SF34: 1st ventilation group power +Common.718.SF35 = SF35: 2nd ventilation group power +Common.718.SF23 = SF23: 1st ventilation group contactor +Common.718.SF24 = SF24: 2nd ventilation group contactor + +#Names +Common.718.MVSU = BUP MVSU +Common.718.MLUP = BUP MLUP +Common.718.MUVS1 = BUP MUVS1 +Common.718.MUVS2 = BUP MUVS2 +Common.718.MP = BUP MP +Common.718.MS = BUP MS + +#A lot of indicators +Common.718.MVSUARSX = @[Common.718.MVSU]: Drive mode permission by BKBD +Common.718.MVSUARST = @[Common.718.MVSU]: Brake mode by BKBD +Common.718.MVSUARSX3 = @[Common.718.MVSU]: X3 mode by automatic train operation unit +Common.718.MVSUARSX2 = @[Common.718.MVSU]: X2 mode by automatic train operation unit +Common.718.MVSUARSX1 = @[Common.718.MVSU]: X1 mode by automatic train operation unit +Common.718.MVSUARS0 = @[Common.718.MVSU]: 0 mode by automatic train operation unit +Common.718.MVSUARST1 = @[Common.718.MVSU]: T1 mode by automatic train operation unit +Common.718.MVSUARST2 = @[Common.718.MVSU]: T2 mode by automatic train operation unit +Common.718.MVSUARST3 = @[Common.718.MVSU]: T3 mode by automatic train operation unit +Common.718.MVSUKVX3 = @[Common.718.MVSU]: X3 mode by controller +Common.718.MVSUKVX2 = @[Common.718.MVSU]: X2 mode by controller +Common.718.MVSUKVX1 = @[Common.718.MVSU]: X1 mode by controller +Common.718.MVSUKV0 = @[Common.718.MVSU]: 0 mode by controller +Common.718.MVSUKVT1 = @[Common.718.MVSU]: T1 mode by controller +Common.718.MVSUKVT2 = @[Common.718.MVSU]: T2 mode by controller +Common.718.MVSUKVT3 = @[Common.718.MVSU]: T3 mode by controller +Common.718.MVSUKDV = @[Common.718.MVSU]: Doors state control +Common.718.MVSUBDV = @[Common.718.MVSU]: Doors control blocking mode +Common.718.MVSUPB = @[Common.718.MVSU]: PB or ARS are enabled +Common.718.MVSUARS = @[Common.718.MVSU]: PB or ARS are disabled +Common.718.MVSUAVT = @[Common.718.MVSU]: Emergency brake by BKBD +Common.718.MVSUKVV = @[Common.718.MVSU]: "Forward" mode input +Common.718.MVSUKVN = @[Common.718.MVSU]: "Backward" mode input +Common.718.MVSUPVU = @[Common.718.MVSU]: Circuits failed to assemble by PVU (UAVA) +Common.718.MVSURPB = @[Common.718.MVSU]: Circuits failed to assemble by attention pedal relay +Common.718.MVSUROT = @[Common.718.MVSU]: Circuits failed to assemble by traction disable relay (ARS) +Common.718.MVSUSOT = @[Common.718.MVSU]: Circuits failed to assemble by braking signalizer (EPV) +Common.718.MLUPVP = @[Common.718.MLUP]: "Forward" mode +Common.718.MLUPNZ = @[Common.718.MLUP]: "Backward" mode +Common.718.MLUPBUP = @[Common.718.MLUP]: BUP blocking +Common.718.MLUPV0 = @[Common.718.MLUP]: Zero speed (pneumatic valve â„–1) +Common.718.MLUPKU = @[Common.718.MLUP]: Controller malfunction +Common.718.MLUPBAV = @[Common.718.MLUP]: Automatic train operation unit malfunction +Common.718.MLUPKR = @[Common.718.MLUP]: Reverse controller malfunction +Common.718.MLUPARS = @[Common.718.MLUP]: ARS malfunction +Common.718.MUVS1VP = @[Common.718.MUVS1]: "Forward" mode output +Common.718.MUVS1NZ = @[Common.718.MUVS1]: "Backward" mode output +Common.718.MUVS1X = @[Common.718.MUVS1]: "Drive" mode output +Common.718.MUVS1T = @[Common.718.MUVS1]: "Brake" mode output +Common.718.MUVS1U1 = @[Common.718.MUVS1]: "Current setpoint 1" mode output +Common.718.MUVS1U2 = @[Common.718.MUVS1]: "Current setpoint 2" mode output +Common.718.MUVS1BAV = @[Common.718.MUVS1]: BAV blocking output +Common.718.MUVS1BUP = @[Common.718.MUVS1]: BUV blocking output +Common.718.MUVS20 = @[Common.718.MUVS2]: "Run-out" mode output +Common.718.MUVS2ZPT = @[Common.718.MUVS2]: Pneumatic valve â„–2 +Common.718.MPMP = @[Common.718.MP]: Normal operation +Common.718.MSMS = @[Common.718.MS]: Normal operation + +Common.718.MPS = BUV MPS +Common.718.MALP1 = BUV MALP1 +Common.718.MVD = BUV MVD +Common.718.MALP2 = BUV MALP2 +Common.718.MGR = BUV MGR +Common.718.MLU = BUV MLU +Common.718.MUVK = BUV MUVK +Common.718.MIV = BUV MIV +Common.718.MUVK2 = BUV MUVK2 +Common.718.MPSPROV = @[Common.718.MPS]: "Operation check" +Common.718.MPSAVR = @[Common.718.MPS]: "Drive/brake modes are disabled by AVT" +Common.718.MPSTARS = @[Common.718.MPS]: "BKBD ARS brake" +Common.718.MPSX = @[Common.718.MPS]: "Drive mode signal" +Common.718.MPSNZ = @[Common.718.MPS]: "Backward" +Common.718.MPSNZR = @[Common.718.MPS]: "Emergency backward" +Common.718.MPSVPR = @[Common.718.MPS]: "Emergency forward" +Common.718.MPSPROV0 = @[Common.718.MPS]: "Operation check" +Common.718.MPSSK = @[Common.718.MPS]: "Speed" #IDK what is this, no info (@Gleb) +Common.718.MPST = @[Common.718.MPS]: "Brake mode signal" +Common.718.MPSXR = @[Common.718.MPS]: "Emergency drive 1" +Common.718.MPSU1 = @[Common.718.MPS]: "Current setpoint 1" +Common.718.MPSU2 = @[Common.718.MPS]: "Current setpoint 2" +Common.718.MPSVP = @[Common.718.MPS]: "Forward" +Common.718.MPSVZ = @[Common.718.MPS]: "Protection reset" +Common.718.MPSXM = @[Common.718.MPS]: "@[Common.718.SB7]" +Common.718.MPSU1R = @[Common.718.MPS]: "Emergency drive 2" + +Common.718.MALP1MZK = @[Common.718.MALP1]: Instant thyristor gate blocking +Common.718.MALP1FM = @[Common.718.MALP1]: Surge protection overvoltage (higher than 1000V) +Common.718.MALP1400 = @[Common.718.MALP1]: 400V on the third rail is available +Common.718.MALP150 = @[Common.718.MALP1]: 1st armature group current availability +Common.718.MALP1DIF = @[Common.718.MALP1]: 1st and 2nd groups current difference +Common.718.MALP1650 = @[Common.718.MALP1]: 1st armature group current is higher than 650A +Common.718.MALP10 = @[Common.718.MALP1]: No 1st armature group current +Common.718.MALP1ARS = @[Common.718.MALP1]: Frequency start failure +Common.718.MALP1ITA = @[Common.718.MALP1]: 1st group brake thyristor breakdown > 100A +Common.718.MALP1TR = @[Common.718.MALP1]: Rheostat current > 100A in the 1st group +Common.718.MALP1SN = @[Common.718.MALP1]: Power circuit is not assembled +Common.718.MALP1VN = @[Common.718.MALP1]: Fans malfunction + + +Common.718.MVDOTK = @[Common.718.MVD]: Drive/brake modes malfunction +Common.718.MVDRP = @[Common.718.MVD]: RP actuation + +Common.718.MALP2MSU = @[Common.718.MALP1]: Instant current setpoint reset +Common.718.MALP2800 = @[Common.718.MALP1]: 800V on the third rail is available +Common.718.MALP2975 = @[Common.718.MALP1]: Maximum voltage on the third rail +Common.718.MALP250 = @[Common.718.MALP1]: 2nd armature group current availability +Common.718.MALP2650 = @[Common.718.MALP1]: 2nd armature group current is higher than 650A +Common.718.MALP20 = @[Common.718.MALP1]: No 2nd armature group current +Common.718.MALP2BV = @[Common.718.MALP1]: BV actuation +Common.718.MALP2ITB = @[Common.718.MALP1]: 2nd group brake thyristor breakdown > 100A + +Common.718.MGRTP1 = @[Common.718.MGR]: 1st current collector pressing +Common.718.MGRTP3 = @[Common.718.MGR]: 3rd current collector pressing +Common.718.MGRKHA = @[Common.718.MGR]: 1st drive contactors group is enabled +Common.718.MGRKTA = @[Common.718.MGR]: 1st brake contactors group is enabled +Common.718.MGRTP2 = @[Common.718.MGR]: 2nd current collector pressing +Common.718.MGRTP4 = @[Common.718.MGR]: 4th current collector pressing +Common.718.MGRKHB = @[Common.718.MGR]: 2nd drive contactors group is enabled +Common.718.MGRKTB = @[Common.718.MGR]: 2nd brake contactors group is enabled +Common.718.MGRKRV = @[Common.718.MGR]: Forward reverse contactors is enabled #reverse switched to forward +Common.718.MGRNV = @[Common.718.MGR]: PTTI fan malfunction +Common.718.MGRBV = @[Common.718.MGR]: BV armed +Common.718.MGRLK = @[Common.718.MGR]: Line contactor is enabled +Common.718.MGRKRN = @[Common.718.MGR]: Backward reverse contactors is enabled #reverse switched to backward + +Common.718.MLUAKT = @[Common.718.MLU]: Brake command +Common.718.MLUAXH = @[Common.718.MLU]: Drive command +Common.718.MLUAVP = @[Common.718.MLU]: Enable reverse to forward command +Common.718.MLUANZ = @[Common.718.MLU]: Enable reverse to backward command +Common.718.MLUASS = @[Common.718.MLU]: Circuit is assembled +Common.718.MLUAPV = @[Common.718.MLU]: Enable subexciter command +Common.718.MLUALK = @[Common.718.MLU]: Enable line contactor command + +Common.718.MUVK1V1 = @[Common.718.MUVK]: Pneumatic valve â„–1 coil control +Common.718.MUVK1KT = @[Common.718.MUVK]: Brake contactors control +Common.718.MUVK1KH = @[Common.718.MUVK]: Drive contactors control +Common.718.MUVK1LK = @[Common.718.MUVK]: Line contactor control +Common.718.MUVK1PV = @[Common.718.MUVK]: Subexciter control +Common.718.MUVK1NZ = @[Common.718.MUVK]: Backward reverse control +Common.718.MUVK1SN = @[Common.718.MUVK]: Wagon power circuit is not assembled + +Common.718.MIV33 = @[Common.718.MIV]: Frequency start has finished +Common.718.MIVV1 = @[Common.718.MIV]: Pneumatic valve â„–1 +Common.718.MIVSMA = @[Common.718.MIV]: Maximum 1st setpoint group current signal +Common.718.MIVSMB = @[Common.718.MIV]: Maximum 2nd setpoint group current signal + +Common.718.MUVK2RTM = @[Common.718.MUVK2]: Minimum current relay control +Common.718.MUVK2RKT = @[Common.718.MUVK2]: Brake control relay control +Common.718.MUVK2RP = @[Common.718.MUVK2]: Protection actuation +Common.718.MUVK2OTK = @[Common.718.MUVK2]: Wagon malfunction +Common.718.MUVK275 = @[Common.718.MUVK2]: Emergency BUV power +Common.718.MUVK2VP = @[Common.718.MUVK2]: Forward reverse control + + +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF51Toggle = @[Common.718.SF51] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF52Toggle = @[Common.718.SF52] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF53Toggle = @[Common.718.SF53] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF60Toggle = @[Common.718.SF60] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF61Toggle = @[Common.718.SF61] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF77Toggle = @[Common.718.SF77] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF78Toggle = @[Common.718.SF78] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF40Toggle = @[Common.718.SF40] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF41Toggle = @[Common.718.SF41] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF8Toggle = @[Common.718.SF8] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF11Toggle = @[Common.718.SF11] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF10Toggle = @[Common.718.SF10] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF7Toggle = @[Common.718.SF7] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF50Toggle = @[Common.718.SF50] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF76Toggle = @[Common.718.SF76] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF73Toggle = @[Common.718.SF73] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF3Toggle = @[Common.718.SF3] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF71Toggle = @[Common.718.SF71] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF63Toggle = @[Common.718.SF63] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF54Toggle = @[Common.718.SF54] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF65Toggle = @[Common.718.SF65] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF55Toggle = @[Common.718.SF55] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF9Toggle = @[Common.718.SF9] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF6Toggle = @[Common.718.SF6] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF5Toggle = @[Common.718.SF5] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF2Toggle = @[Common.718.SF2] + +Entities.gmod_subway_81-718.Buttons.Main.SA5Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-718.Buttons.Main.SB3Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-718.Buttons.Main.SA7Toggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-718.Buttons.Main.SB1Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-718.Buttons.Main.SB2Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-718.Buttons.Main.SA8Toggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-718.Buttons.Main.SB4Set = @[Common.718.SB4] +Entities.gmod_subway_81-718.Buttons.Main.SB5Set = @[Common.718.SB5] +Entities.gmod_subway_81-718.Buttons.Main.SA9Toggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-718.Buttons.Main.SA13Toggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-718.Buttons.Main.SA14Toggle = @[Common.ALL.ARSR] +Entities.gmod_subway_81-718.Buttons.Main.SA15Toggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-718.Buttons.Main.SA2Toggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-718.Buttons.Main.SB6KToggle = @[Common.ALL.KAHK] +Entities.gmod_subway_81-718.Buttons.Main.SB6Set = @[Common.ALL.KAH] +Entities.gmod_subway_81-718.Buttons.Main.SB7KToggle = @[Common.718.SB7K] +Entities.gmod_subway_81-718.Buttons.Main.SB7Set = @[Common.718.SB7] +Entities.gmod_subway_81-718.Buttons.Main.SB8Set = @[Common.ARS.KVTR] +Entities.gmod_subway_81-718.Buttons.Main.SB10Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-718.Buttons.Main.SB9Set = @[Common.ARS.KVT] +Entities.gmod_subway_81-718.Buttons.Main.SB11Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-718.Buttons.Main.SA16Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-718.Buttons.Main.SB12Set = @[Common.718.SB12] +Entities.gmod_subway_81-718.Buttons.Main.SB13Set = @[Common.718.SB13] +Entities.gmod_subway_81-718.Buttons.Main.SB14Set = @[Common.ALL.RMK] +Entities.gmod_subway_81-718.Buttons.Main.SB15Set = @[Common.718.SB15] +Entities.gmod_subway_81-718.Buttons.Main.SB16Set = @[Common.718.SB16] + + +Entities.gmod_subway_81-718.Buttons.Battery.RCToggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-718.Buttons.Battery.VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-718.Buttons.Battery.VTPR- = @[Common.718.VTPR] @[Common.ALL.CCW] +Entities.gmod_subway_81-718.Buttons.Battery.VTPR+ = @[Common.718.VTPR] @[Common.ALL.CW] + + +Entities.gmod_subway_81-718.Buttons.KR.SBR14Set = @[Common.718.RX1] +Entities.gmod_subway_81-718.Buttons.KR.SBR16Set = @[Common.718.KAH2] +Entities.gmod_subway_81-718.Buttons.KR.SBR15Set = @[Common.718.RX2] + + +Entities.gmod_subway_81-718.Buttons.VPU.SAP8Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-718.Buttons.VPU.SAP13Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-718.Buttons.VPU.SAP36Toggle = @[Common.ALL.ES] +Entities.gmod_subway_81-718.Buttons.VPU.SAP12Toggle = @[Common.720.AppLights] +Entities.gmod_subway_81-718.Buttons.VPU.SAP11Toggle = @[Common.718.Heat] +Entities.gmod_subway_81-718.Buttons.VPU.SAP23Toggle = @[Common.ARS.VP] +Entities.gmod_subway_81-718.Buttons.VPU.SAP9Toggle = @[Common.720.Vent1] +Entities.gmod_subway_81-718.Buttons.VPU.SAP10Toggle = @[Common.720.Vent2] +Entities.gmod_subway_81-718.Buttons.VPU.SAP3Toggle = @[Common.ALL.UNCh] +Entities.gmod_subway_81-718.Buttons.VPU.SAP39Toggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-718.Buttons.VPU.SBP22Set = @[Common.718.SBP22] +Entities.gmod_subway_81-718.Buttons.VPU.SBP6Set = @[Common.718.KDPR] +Entities.gmod_subway_81-718.Buttons.VPU.SBP4Set = @[Common.718.KDLR] +Entities.gmod_subway_81-718.Buttons.VPU.SAP14Toggle = @[Common.ARS.Freq] @[Common.ARS.FreqU] +Entities.gmod_subway_81-718.Buttons.VPU.SAP26Toggle = @[Common.718.UOS] +Entities.gmod_subway_81-718.Buttons.VPU.SAP24Toggle = @[Common.ALL.VOVT] + +Entities.gmod_subway_81-718.Buttons.ARS.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-718.Buttons.ARS.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-718.Buttons.ARS.!SD = @[Common.ALL.LSD] +Entities.gmod_subway_81-718.Buttons.ARS.!KT = @[Common.ARS.KT] +Entities.gmod_subway_81-718.Buttons.ARS.!RS = @[Common.ARS.RS] +Entities.gmod_subway_81-718.Buttons.ARS.!SK = @[Common.ARS.LN] +Entities.gmod_subway_81-718.Buttons.ARS.!04 = @[Common.ARS.04] +Entities.gmod_subway_81-718.Buttons.ARS.!0 = @[Common.ARS.0] +Entities.gmod_subway_81-718.Buttons.ARS.!40 = @[Common.ARS.40] +Entities.gmod_subway_81-718.Buttons.ARS.!60 = @[Common.ARS.60] +Entities.gmod_subway_81-718.Buttons.ARS.!70 = @[Common.ARS.70] +Entities.gmod_subway_81-718.Buttons.ARS.!80 = @[Common.ARS.80] +Entities.gmod_subway_81-718.Buttons.ARS.!KES = @[Common.718.KES] +Entities.gmod_subway_81-718.Buttons.ARS.!ST = @[Common.ALL.BrT] +Entities.gmod_subway_81-718.Buttons.ARS.!CUV = @[Common.718.CUV] +Entities.gmod_subway_81-718.Buttons.ARS.!AVU = @[Common.ALL.LAVU] +Entities.gmod_subway_81-718.Buttons.ARS.!AIP = @[Common.718.AIP] +Entities.gmod_subway_81-718.Buttons.ARS.!RIP = @[Common.718.RIP] +Entities.gmod_subway_81-718.Buttons.ARS.!KVD = @[Common.ARS.VD] +Entities.gmod_subway_81-718.Buttons.ARS.!VS1 = @[Common.718.VS1] +Entities.gmod_subway_81-718.Buttons.ARS.!VS2 = @[Common.718.VS2] + +Entities.gmod_subway_81-718.Buttons.Right.SA1/1Toggle = @[Common.ALL.VF1] +Entities.gmod_subway_81-718.Buttons.Right.SA2/1Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-718.Buttons.Right.SA5/1Toggle = @[Common.718.SPULightStrength] +Entities.gmod_subway_81-718.Buttons.Right.SA4/1Toggle = @[Common.ALL.GaugeLights] + +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKDV = @[Common.718.MVSUKDV] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUBDV = @[Common.718.MVSUBDV] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUPB = @[Common.718.MVSUPB] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARS = @[Common.718.MVSUARS] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUAVT = @[Common.718.MVSUAVT] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVV = @[Common.718.MVSUKVV] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVN = @[Common.718.MVSUKVN] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVX3 = @[Common.718.MVSUKVX3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVX2 = @[Common.718.MVSUKVX2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVX1 = @[Common.718.MVSUKVX1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKV0 = @[Common.718.MVSUKV0] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVT1 = @[Common.718.MVSUKVT1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVT2 = @[Common.718.MVSUKVT2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVT3 = @[Common.718.MVSUKVT3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUPVU = @[Common.718.MVSUPVU] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSURPB = @[Common.718.MVSURPB] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX = @[Common.718.MVSUARSX] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST = @[Common.718.MVSUARST] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX3 = @[Common.718.MVSUARSX3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX2 = @[Common.718.MVSUARSX2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX1 = @[Common.718.MVSUARSX1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARS0 = @[Common.718.MVSUARS0] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST1 = @[Common.718.MVSUARST1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST2 = @[Common.718.MVSUARST2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST3 = @[Common.718.MVSUARST3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUROT = @[Common.718.MVSUROT] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUSOT = @[Common.718.MVSUSOT] + +Entities.gmod_subway_81-718.Buttons.BUP_MUVS2.MUVS20 = @[Common.718.MUVS20] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS2.MUVS2ZPT = @[Common.718.MUVS2ZPT] + +Entities.gmod_subway_81-718.Buttons.BUP_MP.MPMP = @[Common.718.MPMP] +Entities.gmod_subway_81-718.Buttons.BUP_MS.MSMS = @[Common.718.MSMS] + +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1VP = @[Common.718.MUVS1VP] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1NZ = @[Common.718.MUVS1NZ] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1X = @[Common.718.MUVS1X] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1T = @[Common.718.MUVS1T] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1U1 = @[Common.718.MUVS1U1] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1U2 = @[Common.718.MUVS1U2] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1BAV = @[Common.718.MUVS1BAV] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1BUP = @[Common.718.MUVS1BUP] + +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPVP = @[Common.718.MLUPVP] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPNZ = @[Common.718.MLUPNZ] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPBUP = @[Common.718.MLUPBUP] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPV0 = @[Common.718.MLUPV0] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPKU = @[Common.718.MLUPKU] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPBAV = @[Common.718.MLUPBAV] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPKR = @[Common.718.MLUPKR] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPARS = @[Common.718.MLUPARS] + +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSPROV = @[Common.718.MPSPROV] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSAVR = @[Common.718.MPSAVR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSTARS = @[Common.718.MPSTARS] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSX = @[Common.718.MPSX] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSNZ = @[Common.718.MPSNZ] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSNZR = @[Common.718.MPSNZR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSPROV0 = @[Common.718.MPSPROV0] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSSK = @[Common.718.MPSSK] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPST = @[Common.718.MPST] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSXR = @[Common.718.MPSXR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSU1 = @[Common.718.MPSU1] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSU2 = @[Common.718.MPSU2] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSVP = @[Common.718.MPSVP] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSVPR = @[Common.718.MPSVPR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSVZ = @[Common.718.MPSVZ] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSXM = @[Common.718.MPSXM] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSU1R = @[Common.718.MPSU1R] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1MZK = @[Common.718.MALP1MZK] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1FM = @[Common.718.MALP1FM] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1400 = @[Common.718.MALP1400] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP150 = @[Common.718.MALP150] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1DIF = @[Common.718.MALP1DIF] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1650 = @[Common.718.MALP1650] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP10 = @[Common.718.MALP10] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1ARS = @[Common.718.MALP1ARS] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1ITA = @[Common.718.MALP1ITA] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1TR = @[Common.718.MALP1TR] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1SN = @[Common.718.MALP1SN] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1VN = @[Common.718.MALP1VN] +Entities.gmod_subway_81-718.Buttons.BUV_MVD.MVDOTK = @[Common.718.MVDOTK] +Entities.gmod_subway_81-718.Buttons.BUV_MVD.MVDRP = @[Common.718.MVDRP] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2MSU = @[Common.718.MALP2MSU] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2800 = @[Common.718.MALP2800] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2975 = @[Common.718.MALP2975] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP250 = @[Common.718.MALP250] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2650 = @[Common.718.MALP2650] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP20 = @[Common.718.MALP20] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2BV = @[Common.718.MALP2BV] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2ITB = @[Common.718.MALP2ITB] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP1 = @[Common.718.MGRTP1] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP3 = @[Common.718.MGRTP3] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKHA = @[Common.718.MGRKHA] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKTA = @[Common.718.MGRKTA] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP2 = @[Common.718.MGRTP2] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP4 = @[Common.718.MGRTP4] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKHB = @[Common.718.MGRKHB] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKTB = @[Common.718.MGRKTB] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKRV = @[Common.718.MGRKRV] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRNV = @[Common.718.MGRNV] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRBV = @[Common.718.MGRBV] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRLK = @[Common.718.MGRLK] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKRN = @[Common.718.MGRKRN] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAKT = @[Common.718.MLUAKT] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAXH = @[Common.718.MLUAXH] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAVP = @[Common.718.MLUAVP] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUANZ = @[Common.718.MLUANZ] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUASS = @[Common.718.MLUASS] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAPV = @[Common.718.MLUAPV] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUALK = @[Common.718.MLUALK] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1V1 = @[Common.718.MUVK1V1] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1KT = @[Common.718.MUVK1KT] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1KH = @[Common.718.MUVK1KH] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1LK = @[Common.718.MUVK1LK] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1PV = @[Common.718.MUVK1PV] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1NZ = @[Common.718.MUVK1NZ] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1SN = @[Common.718.MUVK1SN] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIV33 = @[Common.718.MIV33] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIVV1 = @[Common.718.MIVV1] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIVSMA = @[Common.718.MIVSMA] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIVSMB = @[Common.718.MIVSMB] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2RTM = @[Common.718.MUVK2RTM] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2RKT = @[Common.718.MUVK2RKT] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2RP = @[Common.718.MUVK2RP] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2OTK = @[Common.718.MUVK2OTK] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK275 = @[Common.718.MUVK275] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2VP = @[Common.718.MUVK2VP] + +Entities.gmod_subway_81-718.Buttons.PVZ.SF4Toggle = @[Common.718.SF4] +Entities.gmod_subway_81-718.Buttons.PVZ.SF27Toggle = @[Common.718.SF27] +Entities.gmod_subway_81-718.Buttons.PVZ.SF46Toggle = @[Common.718.SF46] +Entities.gmod_subway_81-718.Buttons.PVZ.SF12Toggle = @[Common.718.SF12] +Entities.gmod_subway_81-718.Buttons.PVZ.SF13Toggle = @[Common.718.SF13] +Entities.gmod_subway_81-718.Buttons.PVZ.SF45Toggle = @[Common.718.SF45] +Entities.gmod_subway_81-718.Buttons.PVZ.SF16Toggle = @[Common.718.SF16] +Entities.gmod_subway_81-718.Buttons.PVZ.SF44Toggle = @[Common.718.SF44] +Entities.gmod_subway_81-718.Buttons.PVZ.SF43Toggle = @[Common.718.SF43] +Entities.gmod_subway_81-718.Buttons.PVZ.SF14Toggle = @[Common.718.SF14] +Entities.gmod_subway_81-718.Buttons.PVZ.SF15Toggle = @[Common.718.SF15] +Entities.gmod_subway_81-718.Buttons.PVZ.SF25Toggle = @[Common.718.SF25] +Entities.gmod_subway_81-718.Buttons.PVZ.SF72Toggle = @[Common.718.SF72] +Entities.gmod_subway_81-718.Buttons.PVZ.SF29Toggle = @[Common.718.SF29] +Entities.gmod_subway_81-718.Buttons.PVZ.SF26Toggle = @[Common.718.SF26] +Entities.gmod_subway_81-718.Buttons.PVZ.SF42Toggle = @[Common.718.SF42] +Entities.gmod_subway_81-718.Buttons.PVZ.SF18Toggle = @[Common.718.SF18] +Entities.gmod_subway_81-718.Buttons.PVZ.SF20Toggle = @[Common.718.SF20] +Entities.gmod_subway_81-718.Buttons.PVZ.SF17Toggle = @[Common.718.SF17] +Entities.gmod_subway_81-718.Buttons.PVZ.SF19Toggle = @[Common.718.SF19] +Entities.gmod_subway_81-718.Buttons.PVZ.SF21Toggle = @[Common.718.SF21] +Entities.gmod_subway_81-718.Buttons.PVZ.SF22Toggle = @[Common.718.SF22] +Entities.gmod_subway_81-718.Buttons.PVZ.SF34Toggle = @[Common.718.SF34] +Entities.gmod_subway_81-718.Buttons.PVZ.SF35Toggle = @[Common.718.SF35] +Entities.gmod_subway_81-718.Buttons.PVZ.SF23Toggle = @[Common.718.SF23] +Entities.gmod_subway_81-718.Buttons.PVZ.SF24Toggle = @[Common.718.SF24] + +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-718.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-718.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-718.Buttons.HelperPanel.SA6Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-718.Buttons.HelperPanel.SA24Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-718.Buttons.HelperPanel.SB20Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-718.Buttons.HelperPanel.SB21Set = @[Common.ALL.Program2] + +Entities.gmod_subway_81-718.Buttons.BZOS.SAB1Toggle = @[Common.BZOS.On] +Entities.gmod_subway_81-718.Buttons.BZOS.!VH1 = @[Common.BZOS.VH1] +Entities.gmod_subway_81-718.Buttons.BZOS.!VH2 = @[Common.BZOS.VH2] + +Entities.gmod_subway_81-718.Buttons.CabVent.PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-718.Buttons.CabVent.PVK+ = @[Common.CabVent.PVK+] + +Entities.gmod_subway_81-718.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-718.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-718.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-718.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-718.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-718.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-718.Buttons.OtsekDoor1.OtsekDoor1 = @[Common.ALL.OtsekDoor1] +Entities.gmod_subway_81-718.Buttons.OtsekDoor2.OtsekDoor2 = @[Common.ALL.OtsekDoor2] +Entities.gmod_subway_81-718.Buttons.DriverValveDisconnect.EPKToggle = @[Common.ALL.EPV] +Entities.gmod_subway_81-718.Buttons.DriverValveDisconnect.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-718.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle = @[Common.ALL.DriverValveDisconnect] + +Entities.gmod_subway_81-718.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-718.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-718.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] + +Entities.gmod_subway_81-718.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] + +Entities.gmod_subway_81-718.Buttons.HVMeters.!I13 = @[Common.ALL.EnginesCurrent1] +Entities.gmod_subway_81-718.Buttons.HVMeters.!I24 = @[Common.ALL.EnginesCurrent2] +Entities.gmod_subway_81-718.Buttons.HVMeters.!HVVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_81-718.Buttons.HVMeters.!BatteryCurrent = @[Common.ALL.BatteryCurrent] +Entities.gmod_subway_81-718.Buttons.PneumaticPanels.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-718.Buttons.PneumaticPanels.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-718.Buttons.Left.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSPROV = @[Common.718.MPSPROV] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSAVR = @[Common.718.MPSAVR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSTARS = @[Common.718.MPSTARS] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSX = @[Common.718.MPSX] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSNZ = @[Common.718.MPSNZ] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSNZR = @[Common.718.MPSNZR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSPROV0 = @[Common.718.MPSPROV0] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSSK = @[Common.718.MPSSK] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPST = @[Common.718.MPST] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSXR = @[Common.718.MPSXR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSU1 = @[Common.718.MPSU1] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSU2 = @[Common.718.MPSU2] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSVP = @[Common.718.MPSVP] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSVPR = @[Common.718.MPSVPR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSVZ = @[Common.718.MPSVZ] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSXM = @[Common.718.MPSXM] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSU1R = @[Common.718.MPSU1R] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1MZK = @[Common.718.MALP1MZK] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1FM = @[Common.718.MALP1FM] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1400 = @[Common.718.MALP1400] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP150 = @[Common.718.MALP150] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1DIF = @[Common.718.MALP1DIF] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1650 = @[Common.718.MALP1650] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP10 = @[Common.718.MALP10] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1ARS = @[Common.718.MALP1ARS] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1ITA = @[Common.718.MALP1ITA] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1TR = @[Common.718.MALP1TR] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1SN = @[Common.718.MALP1SN] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1VN = @[Common.718.MALP1VN] +Entities.gmod_subway_81-719.Buttons.BUV_MVD.MVDOTK = @[Common.718.MVDOTK] +Entities.gmod_subway_81-719.Buttons.BUV_MVD.MVDRP = @[Common.718.MVDRP] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2MSU = @[Common.718.MALP2MSU] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2800 = @[Common.718.MALP2800] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2975 = @[Common.718.MALP2975] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP250 = @[Common.718.MALP250] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2650 = @[Common.718.MALP2650] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP20 = @[Common.718.MALP20] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2BV = @[Common.718.MALP2BV] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2ITB = @[Common.718.MALP2ITB] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP1 = @[Common.718.MGRTP1] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP3 = @[Common.718.MGRTP3] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKHA = @[Common.718.MGRKHA] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKTA = @[Common.718.MGRKTA] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP2 = @[Common.718.MGRTP2] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP4 = @[Common.718.MGRTP4] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKHB = @[Common.718.MGRKHB] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKTB = @[Common.718.MGRKTB] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKRV = @[Common.718.MGRKRV] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRNV = @[Common.718.MGRNV] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRBV = @[Common.718.MGRBV] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRLK = @[Common.718.MGRLK] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKRN = @[Common.718.MGRKRN] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAKT = @[Common.718.MLUAKT] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAXH = @[Common.718.MLUAXH] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAVP = @[Common.718.MLUAVP] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUANZ = @[Common.718.MLUANZ] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUASS = @[Common.718.MLUASS] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAPV = @[Common.718.MLUAPV] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUALK = @[Common.718.MLUALK] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1V1 = @[Common.718.MUVK1V1] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1KT = @[Common.718.MUVK1KT] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1KH = @[Common.718.MUVK1KH] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1LK = @[Common.718.MUVK1LK] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1PV = @[Common.718.MUVK1PV] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1NZ = @[Common.718.MUVK1NZ] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1SN = @[Common.718.MUVK1SN] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIV33 = @[Common.718.MIV33] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIVV1 = @[Common.718.MIVV1] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIVSMA = @[Common.718.MIVSMA] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIVSMB = @[Common.718.MIVSMB] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2RTM = @[Common.718.MUVK2RTM] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2RKT = @[Common.718.MUVK2RKT] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2RP = @[Common.718.MUVK2RP] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2OTK = @[Common.718.MUVK2OTK] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK275 = @[Common.718.MUVK275] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2VP = @[Common.718.MUVK2VP] +Entities.gmod_subway_81-719.Buttons.PVZ.SF4Toggle = @[Common.718.SF4] +Entities.gmod_subway_81-719.Buttons.PVZ.SF27Toggle = @[Common.718.SF27] +Entities.gmod_subway_81-719.Buttons.PVZ.SF46Toggle = @[Common.718.SF46] +Entities.gmod_subway_81-719.Buttons.PVZ.SF12Toggle = @[Common.718.SF12] +Entities.gmod_subway_81-719.Buttons.PVZ.SF13Toggle = @[Common.718.SF13] +Entities.gmod_subway_81-719.Buttons.PVZ.SF45Toggle = @[Common.718.SF45] +Entities.gmod_subway_81-719.Buttons.PVZ.SF16Toggle = @[Common.718.SF16] +Entities.gmod_subway_81-719.Buttons.PVZ.SF44Toggle = @[Common.718.SF44] +Entities.gmod_subway_81-719.Buttons.PVZ.SF43Toggle = @[Common.718.SF43] +Entities.gmod_subway_81-719.Buttons.PVZ.SF14Toggle = @[Common.718.SF14] +Entities.gmod_subway_81-719.Buttons.PVZ.SF15Toggle = @[Common.718.SF15] +Entities.gmod_subway_81-719.Buttons.PVZ.SF25Toggle = @[Common.718.SF25] +Entities.gmod_subway_81-719.Buttons.PVZ.SF72Toggle = @[Common.718.SF72] +Entities.gmod_subway_81-719.Buttons.PVZ.SF56Toggle = @[Common.718.SF56] +Entities.gmod_subway_81-719.Buttons.PVZ.SF29Toggle = @[Common.718.SF29] +Entities.gmod_subway_81-719.Buttons.PVZ.SF26Toggle = @[Common.718.SF26] +Entities.gmod_subway_81-719.Buttons.PVZ.SF42Toggle = @[Common.718.SF42] +Entities.gmod_subway_81-719.Buttons.PVZ.SF18Toggle = @[Common.718.SF18] +Entities.gmod_subway_81-719.Buttons.PVZ.SF20Toggle = @[Common.718.SF20] +Entities.gmod_subway_81-719.Buttons.PVZ.SF17Toggle = @[Common.718.SF17] +Entities.gmod_subway_81-719.Buttons.PVZ.SF19Toggle = @[Common.718.SF19] +Entities.gmod_subway_81-719.Buttons.PVZ.SF21Toggle = @[Common.718.SF21] +Entities.gmod_subway_81-719.Buttons.PVZ.SF22Toggle = @[Common.718.SF22] +Entities.gmod_subway_81-719.Buttons.PVZ.SF34Toggle = @[Common.718.SF34] +Entities.gmod_subway_81-719.Buttons.PVZ.SF35Toggle = @[Common.718.SF35] +Entities.gmod_subway_81-719.Buttons.PVZ.SF23Toggle = @[Common.718.SF23] +Entities.gmod_subway_81-719.Buttons.PVZ.SF24Toggle = @[Common.718.SF24] + +Entities.gmod_subway_81-719.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.RearPneumatic.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-719.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-719.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-719.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-719.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-719.Buttons.couch_cap_o.CouchCap = @[Common.ALL.CouchCap] +Entities.gmod_subway_81-719.Buttons.couch_cap.CouchCap = @[Common.ALL.CouchCap] + +Entities.gmod_subway_81-719.Buttons.Battery.VBToggle = @[Common.ALL.VB] + +Entities.gmod_subway_81-719.Buttons.Voltages.!BatteryVoltage = @[Common.ALL.BatteryVoltage] +Entities.gmod_subway_81-719.Buttons.Voltages.!BatteryCurrent = @[Common.ALL.BatteryCurrent] +Entities.gmod_subway_81-719.Buttons.Pressures.!BCPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-719.Buttons.Pressures.!BLTLPressure = @[Common.ALL.BCPressure] +#Spawner: +Entities.gmod_subway_81-718.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-718.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-718.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-718.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-718.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-718.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-718.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-718.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-718.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-718.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] diff --git a/lua/metrostroi_data/languages/en_720.lua b/lua/metrostroi_data/languages/en_720.lua new file mode 100644 index 0000000..ebed0f7 --- /dev/null +++ b/lua/metrostroi_data/languages/en_720.lua @@ -0,0 +1,428 @@ +return [[ +#81-720 + +[en] + +#######Buttons########### +#Cameras +Train.720.CameraCond = Air-conditioner, IGLA +Train.720.CameraPPZ = PPZ #FIXME +Train.720.CameraPV = VPU #FIXME +Train.720.CameraVityaz = SAU "Vityaz" +Train.720.CameraKRMH = KRMSH and UAVA valves +Train.720.CameraPVZ = PVZ + +Train.Buttons.Heating = Heating #NEW (air-conditioner mode) +Train.Buttons.Vent = Ventilation #NEW (air-conditioner mode) +Train.Buttons.Cooling = Cooling #NEW (air-conditione mode) +Train.Buttons.BARS1 = BARS1 #NEW +Train.Buttons.BARS2 = BARS2 #NEW +Train.Buttons.BARS12 = BARS1 and BARS2 #NEW + +#Common +Common.720.SF1 = SF1: Main power +Common.720.SF2 = SF2: Main control +Common.720.SF3 = SF3: Emergency control +Common.720.SF4 = SF4: BARS +Common.720.SF5 = SF5: BUP (train control unit) +Common.720.SF6 = SF6: BKCU (control circuits commutation unit) +Common.720.SF7 = SF7: PPO (ASOTP) +Common.720.SF8 = SF8: Announcer +Common.720.SF9 = SF9: Radiostation +Common.720.SF10 = SF10: Wagon orientation +Common.720.SF11 = SF11: Movement direction +Common.720.SF12 = SF12: 1st headlights group +Common.720.SF13 = SF13: 2nd headlights group +Common.720.SF14 = SF14: Red lights +Common.720.SF15 = SF15: @[Common.703.VU3] +Common.720.SF16 = SF16: @[Common.703.VU1] +Common.720.SF17 = SF17: Cabin air conditioner +Common.720.SF18 = SF18: Flange lubrication +Common.720.SF19 = SF19: Brake lever main power +Common.720.SF20 = SF20: Brake lever emergency power +Common.720.SF21 = SF21: Doors opening +Common.720.SF22 = SF22: Doors closing + +Common.720.SFV1 = SF1: Wagon control circuits power +Common.720.SFV2 = SF2: Wagon control unit power +Common.720.SFV3 = SF3: Traction motors control unit power +Common.720.SFV4 = SF4: Traction motors control unit control +Common.720.SFV5 = SF5: Emergency traction motors control unit control +Common.720.SFV6 = SF6: BUTP power +Common.720.SFV7 = SF7: Power supply +Common.720.SFV8 = SF8: BV control +Common.720.SFV9 = SF9: BV power +Common.720.SFV10 = SF10: PPO (ASOTP PCBK) +Common.720.SFV11 = SF11: Compressor +Common.720.SFV12 = SF12: Doors closing +Common.720.SFV13 = SF13: Left doors opening +Common.720.SFV14 = SF14: Right doors opening +Common.720.SFV15 = SF15: End doors +Common.720.SFV16 = SF16: Announcer +Common.720.SFV17 = SF17: Emergency intercom +Common.720.SFV18 = SF18: @[Common.ALL.Unsused1] +Common.720.SFV19 = SF19: Interior lighting power +Common.720.SFV20 = SF20: Emergency interior lighting +Common.720.SFV21 = SF21: Speed sensor +Common.720.SFV22 = SF22: Parking brake +Common.720.SFV23 = SF23: 1st ventilation group control +Common.720.SFV24 = SF24: 2nd ventilation group control +Common.720.SFV25 = SF25: 1st ventilation group power +Common.720.SFV26 = SF26: 2nd ventilation group power +Common.720.SFV27 = SF27: Exciter power +Common.720.SFV28 = SF28: Charging capacitor power +Common.720.SFV29 = SF29: Current collectors +Common.720.SFV30 = SF30: Line schemes & ticker +Common.720.SFV31 = SF31: @[Common.ALL.Unsused1] +Common.720.SFV32 = SF32: @[Common.ALL.Unsused1] +Common.720.SFV33 = SF33: @[Common.ALL.Unsused1] + +Common.720.VentCMode = Ventilation mode +Common.720.VentHMode+ = Increase heater power +Common.720.VentHMode- = Decrease heater power +Common.720.VentSMode- = Increase ventilation power +Common.720.VentSMode+ = Decrease ventilation power + +Common.720.Pant1 = Release 1st current collectors group +Common.720.Pant2 = Release 2nd current collectors group +Common.720.Vent1 = 1st ventilation group +Common.720.Vent2 = 2nd ventilation group +Common.720.TorecDoors = End doors +Common.720.BBER = Emergency BBE +Common.720.BBE = BBE: Power supply +Common.720.CabLightStrength = Cabin lighting brightness +Common.720.AppLights = Wagon equipment lighting +Common.720.BARSBlock = Faulty BARS (ARS unit) blocking + +Common.720.Accel = Acceleration +Common.720.Forward = Moving forward +Common.720.Backward = Moving backward +Common.720.Stand = Stay +Common.720.Ticker = Ticker +Common.720.KAH = KAH: Emergency BARS drive mode +Common.720.KAHK = @[Common.ALL.KAHK] +Common.720.ALS = ALS: Switch ARS to signalling mode (disable ARS) +Common.720.ALSK = ALS button cover +Common.720.FDepot = Departure from depot +Common.720.HVoltage = No high voltage +Common.720.PassScheme = Information panel #old translation: "Line schemes" +Common.720.EmergencyCompressor = Emergency compressor start-up button +Common.720.EnableBV = Enable BV +Common.720.DisableBV = Disable BV +Common.720.Ring = Transfer of the controls (ring) +Common.720.R_Announcer = Enable announcer sound in the passenger compartment +Common.720.R_Line = Enable driver's microphone +Common.720.R_Emer = Emergency intercom +Common.720.R_Program1 = Start announcing (program 1) +Common.720.EnableBVEmer = Emergency BV enable +Common.720.EmergencyControls = Disable emergency enable of circuit control +Common.720.Wiper = Enable wiper + +Common.720.AccelRate = Enable "Slope" mode +Common.720.EBrakeAdd = Increase auxiliary brake force +Common.720.EBrakeRelease = Decrease auxiliary brake force +Common.720.EBrakeToggle = Enable auxiliary brake +Common.720.EmergencyBrake = Enable emergency brake +Common.720.DoorClose = Close doors +Common.720.AttentionMessage = Message perception button + + +Common.720.DoorSelectL = Select left doors +Common.720.DoorSelectR = Select right doors +Common.720.DoorBlock = Driving without doors control +Common.720.KDL = Open left doors +Common.720.KDP = Open right doors + +Common.Vityaz.F1 = Vityaz: F1 +Common.Vityaz.F2 = Vityaz: Next page +Common.Vityaz.F3 = Vityaz: Previous page +Common.Vityaz.F4 = Vityaz: Main mode +Common.Vityaz.1 = Vityaz: 1 +Common.Vityaz.4 = Vityaz: 4 +Common.Vityaz.7 = Vityaz: 7 +Common.Vityaz.2 = Vityaz: 2 +Common.Vityaz.5 = Vityaz: 5 +Common.Vityaz.8 = Vityaz: 8 +Common.Vityaz.0 = Vityaz: 0 +Common.Vityaz.3 = Vityaz: 3 +Common.Vityaz.6 = Vityaz: 6 +Common.Vityaz.9 = Vityaz: 9 +Common.Vityaz.F5 = Vityaz: ZV +Common.Vityaz.F6 = Vityaz: Up\Speed +Common.Vityaz.F7 = Vityaz: Down\Currents +Common.Vityaz.F8 = Vityaz: Enter\Wagon equipment +Common.Vityaz.F9 = Vityaz: Select\Wagon equipment controlling + +Common.720.EmerX1 = Emergency X1 drive mode +Common.720.EmerX2 = Emergency X2 drive mode +Common.720.EmerCloseDoors = Emergency doors closing +Common.720.EmergencyDoors = Enable emergency doors control +Common.720.BRU = BRU: High voltage disconnector + +#gmod_subway_81-720 +#Buttons: + +Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode- = @[Common.720.VentCMode] @[Common.ALL.CCW] +Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode+ = @[Common.720.VentCMode] @[Common.ALL.CW] +Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode+ = @[Common.720.VentHMode+] +Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode- = @[Common.720.VentHMode-] +Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode- = @[Common.720.VentSMode-] +Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode+ = @[Common.720.VentSMode+] + +Entities.gmod_subway_81-720.Buttons.RV.EmerX1Set = @[Common.720.EmerX1] +Entities.gmod_subway_81-720.Buttons.RV.EmerX2Set = @[Common.720.EmerX2] +Entities.gmod_subway_81-720.Buttons.RV.EmerCloseDoorsSet = @[Common.720.EmerCloseDoors] +Entities.gmod_subway_81-720.Buttons.RV.EmergencyDoorsToggle = @[Common.720.EmergencyDoors] + +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF1Set = @[Common.Vityaz.F1] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF2Set = @[Common.Vityaz.F2] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF3Set = @[Common.Vityaz.F3] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF4Set = @[Common.Vityaz.F4] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz1Set = @[Common.Vityaz.1] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz4Set = @[Common.Vityaz.4] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz7Set = @[Common.Vityaz.7] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz2Set = @[Common.Vityaz.2] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz5Set = @[Common.Vityaz.5] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz8Set = @[Common.Vityaz.8] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz0Set = @[Common.Vityaz.0] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz3Set = @[Common.Vityaz.3] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz6Set = @[Common.Vityaz.6] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz9Set = @[Common.Vityaz.9] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF5Set = @[Common.Vityaz.F5] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF6Set = @[Common.Vityaz.F6] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF7Set = @[Common.Vityaz.F7] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF8Set = @[Common.Vityaz.F8] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF9Set = @[Common.Vityaz.F9] + +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF1Toggle = @[Common.720.SF1] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF2Toggle = @[Common.720.SF2] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF3Toggle = @[Common.720.SF3] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF4Toggle = @[Common.720.SF4] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF5Toggle = @[Common.720.SF5] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF6Toggle = @[Common.720.SF6] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF7Toggle = @[Common.720.SF7] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF8Toggle = @[Common.720.SF8] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF9Toggle = @[Common.720.SF9] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF10Toggle = @[Common.720.SF10] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF11Toggle = @[Common.720.SF11] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF12Toggle = @[Common.720.SF12] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF13Toggle = @[Common.720.SF13] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF14Toggle = @[Common.720.SF14] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF15Toggle = @[Common.720.SF15] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF16Toggle = @[Common.720.SF16] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF17Toggle = @[Common.720.SF17] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF18Toggle = @[Common.720.SF18] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF19Toggle = @[Common.720.SF19] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF20Toggle = @[Common.720.SF20] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF21Toggle = @[Common.720.SF21] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF22Toggle = @[Common.720.SF22] + +Entities.gmod_subway_81-720.Buttons.BackDown.Pant1Toggle = @[Common.720.Pant1] +Entities.gmod_subway_81-720.Buttons.BackDown.Pant2Toggle = @[Common.720.Pant2] +Entities.gmod_subway_81-720.Buttons.BackDown.Vent1Toggle = @[Common.720.Vent1] +Entities.gmod_subway_81-720.Buttons.BackDown.Vent2Toggle = @[Common.720.Vent2] +Entities.gmod_subway_81-720.Buttons.BackDown.PassLightToggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-720.Buttons.BackDown.CabLightToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-720.Buttons.BackDown.Headlights1Toggle = @[Common.ALL.VF1] +Entities.gmod_subway_81-720.Buttons.BackDown.Headlights2Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-720.Buttons.BackDown.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-720.Buttons.BackDown.TorecDoorsToggle = @[Common.720.TorecDoors] +Entities.gmod_subway_81-720.Buttons.BackDown.BBERToggle = @[Common.720.BBER] +Entities.gmod_subway_81-720.Buttons.BackDown.BBEToggle = @[Common.720.BBE] +Entities.gmod_subway_81-720.Buttons.BackDown.CompressorToggle = @[Common.ALL.MK] +Entities.gmod_subway_81-720.Buttons.BackDown.CabLightStrengthToggle = @[Common.720.CabLightStrength] +Entities.gmod_subway_81-720.Buttons.BackDown.AppLights1Toggle = @[Common.720.AppLights] +Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock- = @[Common.720.BARSBlock] @[Common.ALL.CCW] +Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock+ = @[Common.720.BARSBlock] @[Common.ALL.CW] +Entities.gmod_subway_81-720.Buttons.BackDown.BatteryToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-720.Buttons.BackDown.ALSFreqToggle = @[Common.ARS.Freq] + +Entities.gmod_subway_81-720.Buttons.PUU.!DoorsClosed = @[Common.ALL.LSD] +Entities.gmod_subway_81-720.Buttons.PUU.StandToggle = @[Common.720.Stand] @[Common.ALL.Unsused2] +Entities.gmod_subway_81-720.Buttons.PUU.TickerToggle = @[Common.720.Ticker] +Entities.gmod_subway_81-720.Buttons.PUU.KAHToggle = @[Common.720.KAH] +Entities.gmod_subway_81-720.Buttons.PUU.KAHkToggle = @[Common.720.KAHK] +Entities.gmod_subway_81-720.Buttons.PUU.ALSToggle = @[Common.720.ALS] +Entities.gmod_subway_81-720.Buttons.PUU.ALSkToggle = @[Common.720.ALSK] +Entities.gmod_subway_81-720.Buttons.PUU.FDepotToggle = @[Common.720.FDepot] @[Common.ALL.Unsused2] +Entities.gmod_subway_81-720.Buttons.PUU.!HVoltage = @[Common.720.HVoltage] +Entities.gmod_subway_81-720.Buttons.PUU.PassSchemeToggle = @[Common.720.PassScheme] +Entities.gmod_subway_81-720.Buttons.PUU.EmergencyCompressorSet = @[Common.720.EmergencyCompressor] +Entities.gmod_subway_81-720.Buttons.PUU.EnableBVSet = @[Common.720.EnableBV] +Entities.gmod_subway_81-720.Buttons.PUU.DisableBVSet = @[Common.720.DisableBV] +Entities.gmod_subway_81-720.Buttons.PUU.RingSet = @[Common.720.Ring] +Entities.gmod_subway_81-720.Buttons.PUU.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-720.Buttons.PUU.R_AnnouncerToggle = @[Common.720.R_Announcer] +Entities.gmod_subway_81-720.Buttons.PUU.R_LineToggle = @[Common.720.R_Line] +Entities.gmod_subway_81-720.Buttons.PUU.R_EmerSet = @[Common.720.R_Emer] +Entities.gmod_subway_81-720.Buttons.PUU.R_Program1Set = @[Common.720.R_Program1] +Entities.gmod_subway_81-720.Buttons.PUU.EnableBVEmerSet = @[Common.720.EnableBVEmer] +Entities.gmod_subway_81-720.Buttons.PUU.EmergencyControlsToggle = @[Common.720.EmergencyControls] +Entities.gmod_subway_81-720.Buttons.PUU.WiperToggle = @[Common.720.Wiper] +Entities.gmod_subway_81-720.Buttons.PUU.!VDop = @[Common.ALL.SpeedAccept] +Entities.gmod_subway_81-720.Buttons.PUU.!VFact = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-720.Buttons.PUU.!VPred = @[Common.ALL.SpeedAttent] +Entities.gmod_subway_81-720.Buttons.PUU.!VFact2 = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-720.Buttons.PUU.!Acc = @[Common.720.Accel] +Entities.gmod_subway_81-720.Buttons.PUU.!Forw = @[Common.720.Forward] +Entities.gmod_subway_81-720.Buttons.PUU.!Back = @[Common.720.Backward] + +Entities.gmod_subway_81-720.Buttons.PUR.AccelRateSet = @[Common.720.AccelRate] +Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeAddSet = @[Common.720.EBrakeAdd] +Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeReleaseSet = @[Common.720.EBrakeRelease] +Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeToggle = @[Common.720.EBrakeToggle] +Entities.gmod_subway_81-720.Buttons.PUR.EmergencyBrakeToggle = @[Common.720.EmergencyBrake] +Entities.gmod_subway_81-720.Buttons.PUR.DoorCloseToggle = @[Common.720.DoorClose] +Entities.gmod_subway_81-720.Buttons.PUR.AttentionMessageSet = @[Common.720.AttentionMessage] +Entities.gmod_subway_81-720.Buttons.PUR.AttentionSet = @[Common.ARS.KB] +Entities.gmod_subway_81-720.Buttons.PUR.AttentionBrakeSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-720.Buttons.PUR.HornBSet = @[Common.ALL.Horn] +Entities.gmod_subway_81-720.Buttons.PUR.DoorRightSet = @[Common.720.KDP] +Entities.gmod_subway_81-720.Buttons.PUR.!DoorRightLamp = @[Common.ALL.KDPL] + +Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectLToggle = @[Common.720.DoorSelectL] +Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectRToggle = @[Common.720.DoorSelectR] +Entities.gmod_subway_81-720.Buttons.PUL.DoorBlockToggle = @[Common.720.DoorBlock] +Entities.gmod_subway_81-720.Buttons.PUL.!DoorLeftLamp = @[Common.ALL.KDLL] +Entities.gmod_subway_81-720.Buttons.PUL.DoorLeftSet = @[Common.720.KDL] + +Entities.gmod_subway_81-720.Buttons.PVZ.SFV1Toggle = @[Common.720.SFV1] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV2Toggle = @[Common.720.SFV2] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV3Toggle = @[Common.720.SFV3] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV4Toggle = @[Common.720.SFV4] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV5Toggle = @[Common.720.SFV5] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV6Toggle = @[Common.720.SFV6] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV7Toggle = @[Common.720.SFV7] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV8Toggle = @[Common.720.SFV8] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV9Toggle = @[Common.720.SFV9] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV10Toggle = @[Common.720.SFV10] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV11Toggle = @[Common.720.SFV11] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV12Toggle = @[Common.720.SFV12] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV13Toggle = @[Common.720.SFV13] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV14Toggle = @[Common.720.SFV14] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV15Toggle = @[Common.720.SFV15] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV16Toggle = @[Common.720.SFV16] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV17Toggle = @[Common.720.SFV17] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV18Toggle = @[Common.720.SFV18] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV19Toggle = @[Common.720.SFV19] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV20Toggle = @[Common.720.SFV20] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV21Toggle = @[Common.720.SFV21] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV22Toggle = @[Common.720.SFV22] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV23Toggle = @[Common.720.SFV23] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV24Toggle = @[Common.720.SFV24] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV25Toggle = @[Common.720.SFV25] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV26Toggle = @[Common.720.SFV26] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV27Toggle = @[Common.720.SFV27] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV28Toggle = @[Common.720.SFV28] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV29Toggle = @[Common.720.SFV29] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV30Toggle = @[Common.720.SFV30] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV31Toggle = @[Common.720.SFV31] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV32Toggle = @[Common.720.SFV32] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV33Toggle = @[Common.720.SFV33] + +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] + +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] + +Entities.gmod_subway_81-720.Buttons.BTO.K29Toggle = @[Common.ALL.KRMH] +Entities.gmod_subway_81-720.Buttons.BTO.UAVAToggle = @[Common.ALL.UAVA2] + +Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +Entities.gmod_subway_81-720.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-720.Buttons.RearDoor1.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-720.Buttons.CabinDoorR.CabinDoorRight = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-720.Buttons.CabinDoorL.CabinDoorLeft = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-720.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-720.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] + +Entities.gmod_subway_81-720.Buttons.VoltHelper2.!HV = @[Common.ALL.HighVoltage] +Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I1_3 = @[Common.ALL.EnginesCurrent1] +Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I2_4 = @[Common.ALL.EnginesCurrent2] +Entities.gmod_subway_81-720.Buttons.PneumoHelper2.!BrakeTrainLine = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-720.Buttons.PneumoHelper1.!BrakeCylinder = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-720.Buttons.VoltHelper1.!Battery = @[Common.ALL.BatteryVoltage] +Entities.gmod_subway_81-720.Buttons.GV.GVToggle = @[Common.720.BRU] + +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-720.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-720.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +#gmod_subway_81-721 +Entities.gmod_subway_81-721.Buttons.Battery.BatteryToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-721.Buttons.GV.GVToggle = @[Common.720.BRU] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV1Toggle = @[Common.720.SFV1] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV2Toggle = @[Common.720.SFV2] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV3Toggle = @[Common.720.SFV3] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV4Toggle = @[Common.720.SFV4] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV5Toggle = @[Common.720.SFV5] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV6Toggle = @[Common.720.SFV6] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV7Toggle = @[Common.720.SFV7] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV8Toggle = @[Common.720.SFV8] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV9Toggle = @[Common.720.SFV9] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV10Toggle = @[Common.720.SFV10] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV11Toggle = @[Common.720.SFV11] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV12Toggle = @[Common.720.SFV12] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV13Toggle = @[Common.720.SFV13] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV14Toggle = @[Common.720.SFV14] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV15Toggle = @[Common.720.SFV15] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV16Toggle = @[Common.720.SFV16] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV17Toggle = @[Common.720.SFV17] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV18Toggle = @[Common.720.SFV18] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV19Toggle = @[Common.720.SFV19] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV20Toggle = @[Common.720.SFV20] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV21Toggle = @[Common.720.SFV21] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV22Toggle = @[Common.720.SFV22] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV23Toggle = @[Common.720.SFV23] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV24Toggle = @[Common.720.SFV24] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV25Toggle = @[Common.720.SFV25] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV26Toggle = @[Common.720.SFV26] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV27Toggle = @[Common.720.SFV27] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV28Toggle = @[Common.720.SFV28] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV29Toggle = @[Common.720.SFV29] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV30Toggle = @[Common.720.SFV30] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV31Toggle = @[Common.720.SFV31] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV32Toggle = @[Common.720.SFV32] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV33Toggle = @[Common.720.SFV33] + +Entities.gmod_subway_81-721.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-721.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +#Spawner: + +Entities.gmod_subway_81-720.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-720.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-720.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-720.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-720.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-720.Spawner.PassSchemesInvert.Name = @[Common.Spawner.SchemeInvert] +Entities.gmod_subway_81-720.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-720.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-720.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-720.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-720.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] diff --git a/lua/metrostroi_data/languages/en_722.lua b/lua/metrostroi_data/languages/en_722.lua new file mode 100644 index 0000000..b4ac5d4 --- /dev/null +++ b/lua/metrostroi_data/languages/en_722.lua @@ -0,0 +1,374 @@ +return [[ +#81-722 + +[en] + +#Cameras: +Train.722.Breakers = Autobreakers +Train.722.PU2_1 = Buttons panel +Train.722.PU2_2 = Auxiliary panel +Train.722.Vityaz = SAU "VITYAZ-SP" monitor +Train.722.SARMAT = CIS system monitor +Train.722.CabLights = Cabin lighting panel +Train.722.Disconnects = Disconnect valves +Train.722.KRMH = KRMSH and RVTB valves + +Train.Buttons.BattOn = Battery is enabled #NEW (indicator) +Train.Buttons.BattOff = Battery is disabling #NEW (indicator) +Train.Buttons.VentEmer = Emergency #NEW (passenger ventilation) +Train.Buttons.VentAuto = Auto #NEW (passenger ventilation) +Train.Buttons.Vent1/2 = Half of ventilation fans #NEW (passenger ventilation) +Train.Buttons.VentAll = All ventilation fans #NEW (passenger ventilation) + +Train.Buttons.VRUAH = Emergency control #NEW +Train.Buttons.VRUOn = Manual activation #NEW (manual cab activation) +Train.Buttons.PantSC = Enable shorting device #NEW +Train.Buttons.DoorCloseA = Auto closing (with buzzer) #NEW +Train.Buttons.DoorCloseM = Manual closing (without buzzer) #NEW +Train.Buttons.AHActive = Emergency control is active #NEW + +#######Buttons########### +Common.722.MirrorHeating = Mirrors heater +Common.722.EmergencyDrive = Emergency start in the emergency drive mode +Common.722.Microphone = Enable the microphone +Common.722.LRS = Radiostation emergency power from batteries #indicator +Common.722.LAVS = Brake line low pressure #indicator +Common.722.LRU = Control relay is off #indicator +Common.722.GlassWasher = Windshield washer +Common.722.GlassCleaner = Windshield wiper +Common.722.EmergencyBrakeTPlus = Emergency brake (T+ mode) +Common.722.EmergencyBrakeTPlusK = "Emergency brake" button cover +Common.722.KRO = Movement direction + +Common.722.PSNToggle = Enable battery charge from outside source +Common.722.BattOn = Enable train power supply +Common.722.BattOff = Disable train power supply +Common.722.TorecDoorUnlock = Unlock end doors +Common.722.SCEnabled = Shorting device is on +Common.722.LSOSD = Station doors lamp is on #indicator + +Common.722.PassVent = Interior ventilation +Common.722.VRU = Control mode switch +Common.722.VADToggle = Driving without doors interlock +Common.722.VAHToggle = Driving without attention pedal +Common.722.EmergencyRadioPowerToggle = Emergency radiostation power +Common.722.BARSMode = BARS mode switch +Common.722.PantSC = Current collectors and shorting device + +Common.SARMAT.Up = SARMAT: Up +Common.SARMAT.Down = SARMAT: Down +Common.SARMAT.Enter = SARMAT: Enter +Common.SARMAT.Esc = SARMAT: Esc +Common.SARMAT.F1 = SARMAT: F1 +Common.SARMAT.F2 = SARMAT: F2 +Common.SARMAT.F3 = SARMAT: F3 +Common.SARMAT.F4 = SARMAT: F4 +Common.SARMAT.Path = SARMAT: Track +Common.SARMAT.Line = SARMAT: Line +Common.SARMAT.Zero = SARMAT: Set to the start +Common.SARMAT.Start = SARMAT: Start + +#Autobreakers +Common.722.SF1 = SF1: Train power line (control) +Common.722.SF2 = SF2: Active cabin +Common.722.SF3 = SF3: Main control +Common.722.SF4 = SF4: Emergency control +Common.722.SF5 = SF5: RVTB control +Common.722.SF6 = SF6: brake lever power +Common.722.SF7 = SF7: Doors control +Common.722.SF8 = SF8: BARS 1 +Common.722.SF9 = SF9: BARS 2 +Common.722.UPO = SF: UPO1 +Common.722.SF10 = SF10: BRPI-M1 +Common.722.SF11 = SF11: BRPI-M2 +Common.722.SF12 = SF12: Fire alarm +Common.722.SF13 = SF13: @[Common.722.PantSC] +Common.722.SF14 = SF14: Radio communication 1 +Common.722.SF15 = SF15: Radio communication 2 +Common.722.SF16 = SF16: CIS 1 (monitor) +Common.722.SF17 = SF17: CIS 2 (central informing system) +Common.722.SF18 = SF18: CIS 3 +Common.722.SF19 = SF19: BUKP, UPI +Common.722.SF20 = SF20: Monitor +Common.722.SF21 = SF21: Orientation +Common.722.SF22 = SF22: Red lights power by batteries +Common.722.SF23 = SF23: Headlights, red lights +Common.722.SF24 = SF24: Station doors opening lamp +Common.722.SF25 = SF25: Cabin lighting +Common.722.SF26 = SF26: Cabin air conditioner +Common.722.SF27 = SF27: Windshield wiper, windshield washer, horn + +Common.722.SF31 = SF31: Train power wire +Common.722.SF32 = SF32: Train power line (control) +Common.722.SF33 = SF33: Control circuits power +Common.722.SF34 = SF34: Left side CIS +Common.722.SF35 = SF35: Right side CIS +Common.722.SF36 = SF36: Bort signalling lamps +Common.722.SF37 = SF37: Current collectors release +Common.722.SF38 = SF38: Reserve +Common.722.SF41 = SF41: Left doors opening +Common.722.SF42 = SF42: Right doors opening +Common.722.SF43 = SF43: Doors closing +Common.722.SF44 = SF44: End doors +Common.722.SF45 = SF45: Interior lighting power +Common.722.SF46 = SF46: Emergency interior lighting +Common.722.SF47 = SF47: 1st ventilation group +Common.722.SF48 = SF48: 2nd ventilation group +Common.722.SF49 = SF49: Counter +Common.722.SF51 = SF51: Wagon control unit +Common.722.SF52 = SF52: BODV +Common.722.SF53 = SF53: PSN (power supply) +Common.722.SF54 = SF54: Compressed air dryer +Common.722.SF55 = SF55: BUFT (friction brake control unit) +Common.722.SF56 = SF56: Inverter +Common.722.SF57 = SF57: Inverter heater +Common.722.SF58 = SF58: Wagon control circuits main power +Common.722.SF59 = SF59: Wagon control circuits emergency power + +#gmod_subway_81-722 +#Buttons: +Entities.gmod_subway_81-722.Buttons.PU1.MirrorHeatingSet = @[Common.722.MirrorHeating] +Entities.gmod_subway_81-722.Buttons.PU1.DoorLeft2Set = @[Common.720.KDL] +Entities.gmod_subway_81-722.Buttons.PU1.DoorBackSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-722.Buttons.PU1.EmergencyDriveSet = @[Common.722.EmergencyDrive] +Entities.gmod_subway_81-722.Buttons.PU1.MicrophoneSet = @[Common.722.Microphone] +Entities.gmod_subway_81-722.Buttons.PU1.DoorLeft1Set = @[Common.720.KDL] + +Entities.gmod_subway_81-722.Buttons.PU2.ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-722.Buttons.PU2.ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-722.Buttons.PU2.GlassWasherSet = @[Common.722.GlassWasher] +Entities.gmod_subway_81-722.Buttons.PU2.GlassCleaner+ = @[Common.722.GlassCleaner] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.PU2.GlassCleaner- = @[Common.722.GlassCleaner] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeTPlusKToggle = @[Common.722.EmergencyBrakeTPlusK] +Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeTPlusSet = @[Common.722.EmergencyBrakeTPlus] +Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeToggle = @[Common.720.EmergencyBrake] +Entities.gmod_subway_81-722.Buttons.PU2.VigilanceSet = @[Common.ARS.KB] +Entities.gmod_subway_81-722.Buttons.PU2.Headlights+ = @[Common.ALL.VF] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.PU2.Headlights- = @[Common.ALL.VF] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.PU2.DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-722.Buttons.PU2.DoorClose+ = @[Common.720.DoorClose] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.PU2.DoorClose- = @[Common.720.DoorClose] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.PU2.DoorRightSet = @[Common.720.KDP] + +Entities.gmod_subway_81-722.Buttons.BI3.KRO+ = @[Common.722.KRO] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.BI3.KRO- = @[Common.722.KRO] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.BI3.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-722.Buttons.BI3.Compressor- = @[Common.ALL.MK] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.BI3.Compressor+ = @[Common.ALL.MK] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.BI3.!BrakeTrainLine = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-722.Buttons.BI3.!BrakeCylinder = @[Common.ALL.BCPressure] + +Entities.gmod_subway_81-722.Buttons.PPZB.PSNToggleSet = @[Common.722.PSNToggle] +Entities.gmod_subway_81-722.Buttons.PPZB.BattOnSet = @[Common.722.BattOn] +Entities.gmod_subway_81-722.Buttons.PPZB.BattOffSet = @[Common.722.BattOff] +Entities.gmod_subway_81-722.Buttons.PPZB.TorecDoorUnlockSet = @[Common.722.TorecDoorUnlock] +Entities.gmod_subway_81-722.Buttons.PPZB.SCEnable = @[Common.722.SCEnabled] +Entities.gmod_subway_81-722.Buttons.PPZB.SOSD = @[Common.722.LSOSD] + +Entities.gmod_subway_81-722.Buttons.PVM.PassLightToggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-722.Buttons.PVM.PassVent- = @[Common.722.PassVent] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.PassVent+ = @[Common.722.PassVent] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.VKFToggle = @[Common.ALL.VKF] +Entities.gmod_subway_81-722.Buttons.PVM.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-722.Buttons.PVM.VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-722.Buttons.PVM.SOSDEnableToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-722.Buttons.PVM.VRU- = @[Common.722.VRU] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.VRU+ = @[Common.722.VRU] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.VADToggle = @[Common.722.VADToggle] +Entities.gmod_subway_81-722.Buttons.PVM.VAHToggle = @[Common.722.VAHToggle] +Entities.gmod_subway_81-722.Buttons.PVM.EmergencyRadioPowerToggle = @[Common.722.EmergencyRadioPowerToggle] +Entities.gmod_subway_81-722.Buttons.PVM.BARSMode- = @[Common.722.BARSMode] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.BARSMode+ = @[Common.722.BARSMode] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.PantSC- = @[Common.722.PantSC] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.PantSC+ = @[Common.722.PantSC] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.RCARSToggle = @[Common.ALL.RCARS] + +Entities.gmod_subway_81-722.Buttons.HelperLamps.!LRD = @[Common.ARS.LRD] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!LPT = @[Common.ALL.BrT] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!RS = @[Common.722.LRS] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!AVS = @[Common.722.LAVS] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!LSD = @[Common.ALL.LSD] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!RU = @[Common.722.LRU] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!04 = @[Common.ARS.N4] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!00 = @[Common.ARS.0] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!40 = @[Common.ARS.40] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!60 = @[Common.ARS.60] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!70 = @[Common.ARS.70] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!80 = @[Common.ARS.80] + +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatUpSet = @[Common.SARMAT.Up] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatDownSet = @[Common.SARMAT.Down] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatEnterSet = @[Common.SARMAT.Enter] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatEscSet = @[Common.SARMAT.Esc] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF1Set = @[Common.SARMAT.F1] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF2Set = @[Common.SARMAT.F2] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF3Set = @[Common.SARMAT.F3] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF4Set = @[Common.SARMAT.F4] + +Entities.gmod_subway_81-722.Buttons.BMP.SarmatPathSet = @[Common.SARMAT.Path] +Entities.gmod_subway_81-722.Buttons.BMP.SarmatLineSet = @[Common.SARMAT.Line] +Entities.gmod_subway_81-722.Buttons.BMP.SarmatZeroSet = @[Common.SARMAT.Zero] +Entities.gmod_subway_81-722.Buttons.BMP.SarmatStartSet = @[Common.SARMAT.Start] + +Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber1Set = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber2Set = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber3Set = @[Common.ALL.RouteNumber3+] + +Entities.gmod_subway_81-722.Buttons.Lighting.CabinLight- = @[Common.ALL.CabLights] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.Lighting.CabinLight+ = @[Common.ALL.CabLights] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.Lighting.PanelLightToggle = @[Common.ALL.PanelLights] + +Entities.gmod_subway_81-722.Buttons.PPZ.SF1Toggle = @[Common.722.SF1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF2Toggle = @[Common.722.SF2] +Entities.gmod_subway_81-722.Buttons.PPZ.SF3Toggle = @[Common.722.SF3] +Entities.gmod_subway_81-722.Buttons.PPZ.SF4Toggle = @[Common.722.SF4] +Entities.gmod_subway_81-722.Buttons.PPZ.SF5Toggle = @[Common.722.SF5] +Entities.gmod_subway_81-722.Buttons.PPZ.SF6Toggle = @[Common.722.SF6] +Entities.gmod_subway_81-722.Buttons.PPZ.SF7Toggle = @[Common.722.SF7] +Entities.gmod_subway_81-722.Buttons.PPZ.SF8Toggle = @[Common.722.SF8] +Entities.gmod_subway_81-722.Buttons.PPZ.SF9Toggle = @[Common.722.SF9] +Entities.gmod_subway_81-722.Buttons.PPZ.R_UPOToggle = @[Common.722.UPO] +Entities.gmod_subway_81-722.Buttons.PPZ.SF01Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF10Toggle = @[Common.722.SF10] +Entities.gmod_subway_81-722.Buttons.PPZ.SF11Toggle = @[Common.722.SF11] +Entities.gmod_subway_81-722.Buttons.PPZ.SF12Toggle = @[Common.722.SF12] +Entities.gmod_subway_81-722.Buttons.PPZ.SF13Toggle = @[Common.722.SF13] +Entities.gmod_subway_81-722.Buttons.PPZ.SF02Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF14Toggle = @[Common.722.SF14] +Entities.gmod_subway_81-722.Buttons.PPZ.SF15Toggle = @[Common.722.SF15] +Entities.gmod_subway_81-722.Buttons.PPZ.SF16Toggle = @[Common.722.SF16] +Entities.gmod_subway_81-722.Buttons.PPZ.SF17Toggle = @[Common.722.SF17] +Entities.gmod_subway_81-722.Buttons.PPZ.SF18Toggle = @[Common.722.SF18] +Entities.gmod_subway_81-722.Buttons.PPZ.SF19Toggle = @[Common.722.SF19] +Entities.gmod_subway_81-722.Buttons.PPZ.SF20Toggle = @[Common.722.SF20] +Entities.gmod_subway_81-722.Buttons.PPZ.SF21Toggle = @[Common.722.SF21] +Entities.gmod_subway_81-722.Buttons.PPZ.SF22Toggle = @[Common.722.SF22] +Entities.gmod_subway_81-722.Buttons.PPZ.SF23Toggle = @[Common.722.SF23] +Entities.gmod_subway_81-722.Buttons.PPZ.SF24Toggle = @[Common.722.SF24] +Entities.gmod_subway_81-722.Buttons.PPZ.SF25Toggle = @[Common.722.SF25] +Entities.gmod_subway_81-722.Buttons.PPZ.SF26Toggle = @[Common.722.SF26] +Entities.gmod_subway_81-722.Buttons.PPZ.SF27Toggle = @[Common.722.SF27] +Entities.gmod_subway_81-722.Buttons.PPZ.SF03Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF04Toggle = @[Common.ALL.Unsused1] + +Entities.gmod_subway_81-722.Buttons.PVZ.SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-722.Buttons.PVZ.1:SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-722.Buttons.PVZ.SF32Toggle = @[Common.722.SF32] +Entities.gmod_subway_81-722.Buttons.PVZ.SF33Toggle = @[Common.722.SF33] +Entities.gmod_subway_81-722.Buttons.PVZ.SF34Toggle = @[Common.722.SF34] +Entities.gmod_subway_81-722.Buttons.PVZ.SF35Toggle = @[Common.722.SF35] +Entities.gmod_subway_81-722.Buttons.PVZ.SF36Toggle = @[Common.722.SF36] +Entities.gmod_subway_81-722.Buttons.PVZ.SF37Toggle = @[Common.722.SF37] +Entities.gmod_subway_81-722.Buttons.PVZ.SF38Toggle = @[Common.722.SF38] +Entities.gmod_subway_81-722.Buttons.PVZ.SF41Toggle = @[Common.722.SF41] +Entities.gmod_subway_81-722.Buttons.PVZ.SF42Toggle = @[Common.722.SF42] +Entities.gmod_subway_81-722.Buttons.PVZ.SF43Toggle = @[Common.722.SF43] +Entities.gmod_subway_81-722.Buttons.PVZ.SF44Toggle = @[Common.722.SF44] +Entities.gmod_subway_81-722.Buttons.PVZ.SF45Toggle = @[Common.722.SF45] +Entities.gmod_subway_81-722.Buttons.PVZ.SF46Toggle = @[Common.722.SF46] +Entities.gmod_subway_81-722.Buttons.PVZ.SF47Toggle = @[Common.722.SF47] +Entities.gmod_subway_81-722.Buttons.PVZ.SF48Toggle = @[Common.722.SF48] +Entities.gmod_subway_81-722.Buttons.PVZ.SF49Toggle = @[Common.722.SF49] +Entities.gmod_subway_81-722.Buttons.PVZ.SF51Toggle = @[Common.722.SF51] +Entities.gmod_subway_81-722.Buttons.PVZ.SF52Toggle = @[Common.722.SF52] +Entities.gmod_subway_81-722.Buttons.PVZ.SF53Toggle = @[Common.722.SF53] +Entities.gmod_subway_81-722.Buttons.PVZ.SF54Toggle = @[Common.722.SF54] +Entities.gmod_subway_81-722.Buttons.PVZ.SF55Toggle = @[Common.722.SF55] +Entities.gmod_subway_81-722.Buttons.PVZ.SF56Toggle = @[Common.722.SF56] +Entities.gmod_subway_81-722.Buttons.PVZ.SF57Toggle = @[Common.722.SF57] +Entities.gmod_subway_81-722.Buttons.PVZ.SF58Toggle = @[Common.722.SF58] +Entities.gmod_subway_81-722.Buttons.PVZ.SF59Toggle = @[Common.722.SF59] + +Entities.gmod_subway_81-722.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-722.Buttons.CabinDoorL.CabinDoorLeft = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-722.Buttons.CabinDoorR.CabinDoorRight = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-722.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-722.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-722.Buttons.Isolations.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.Isolations.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.StopKran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-722.Buttons.StopKran.UAVAToggle = @[Common.ALL.UAVA2] +Entities.gmod_subway_81-722.Buttons.BTO.K29Toggle = @[Common.ALL.KRMH] +Entities.gmod_subway_81-722.Buttons.BTO.K9Toggle = @[Common.ALL.RVTB] + +#gmod_subway_81-723 +Entities.gmod_subway_81-723.Buttons.PVZ.SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-723.Buttons.PVZ.1:SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-723.Buttons.PVZ.SF32Toggle = @[Common.722.SF32] +Entities.gmod_subway_81-723.Buttons.PVZ.SF33Toggle = @[Common.722.SF33] +Entities.gmod_subway_81-723.Buttons.PVZ.SF34Toggle = @[Common.722.SF34] +Entities.gmod_subway_81-723.Buttons.PVZ.SF35Toggle = @[Common.722.SF35] +Entities.gmod_subway_81-723.Buttons.PVZ.SF36Toggle = @[Common.722.SF36] +Entities.gmod_subway_81-723.Buttons.PVZ.SF37Toggle = @[Common.722.SF37] +Entities.gmod_subway_81-723.Buttons.PVZ.SF38Toggle = @[Common.722.SF38] +Entities.gmod_subway_81-723.Buttons.PVZ.SF41Toggle = @[Common.722.SF41] +Entities.gmod_subway_81-723.Buttons.PVZ.SF42Toggle = @[Common.722.SF42] +Entities.gmod_subway_81-723.Buttons.PVZ.SF43Toggle = @[Common.722.SF43] +Entities.gmod_subway_81-723.Buttons.PVZ.SF44Toggle = @[Common.722.SF44] +Entities.gmod_subway_81-723.Buttons.PVZ.SF45Toggle = @[Common.722.SF45] +Entities.gmod_subway_81-723.Buttons.PVZ.SF46Toggle = @[Common.722.SF46] +Entities.gmod_subway_81-723.Buttons.PVZ.SF47Toggle = @[Common.722.SF47] +Entities.gmod_subway_81-723.Buttons.PVZ.SF48Toggle = @[Common.722.SF48] +Entities.gmod_subway_81-723.Buttons.PVZ.SF49Toggle = @[Common.722.SF49] +Entities.gmod_subway_81-723.Buttons.PVZ.SF51Toggle = @[Common.722.SF51] +Entities.gmod_subway_81-723.Buttons.PVZ.SF52Toggle = @[Common.722.SF52] +Entities.gmod_subway_81-723.Buttons.PVZ.SF53Toggle = @[Common.722.SF53] +Entities.gmod_subway_81-723.Buttons.PVZ.SF54Toggle = @[Common.722.SF54] +Entities.gmod_subway_81-723.Buttons.PVZ.SF55Toggle = @[Common.722.SF55] +Entities.gmod_subway_81-723.Buttons.PVZ.SF56Toggle = @[Common.722.SF56] +Entities.gmod_subway_81-723.Buttons.PVZ.SF57Toggle = @[Common.722.SF57] +Entities.gmod_subway_81-723.Buttons.PVZ.SF58Toggle = @[Common.722.SF58] +Entities.gmod_subway_81-723.Buttons.PVZ.SF59Toggle = @[Common.722.SF59] + +Entities.gmod_subway_81-723.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-723.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-723.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-723.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +Entities.gmod_subway_81-723.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-723.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] + + +#gmod_subway_81-724 +#Buttons: +Entities.gmod_subway_81-724.Buttons.PVZ.SF34Toggle = @[Common.722.SF34] +Entities.gmod_subway_81-724.Buttons.PVZ.SF35Toggle = @[Common.722.SF35] +Entities.gmod_subway_81-724.Buttons.PVZ.SF36Toggle = @[Common.722.SF36] +Entities.gmod_subway_81-724.Buttons.PVZ.SF41Toggle = @[Common.722.SF41] +Entities.gmod_subway_81-724.Buttons.PVZ.SF42Toggle = @[Common.722.SF42] +Entities.gmod_subway_81-724.Buttons.PVZ.SF43Toggle = @[Common.722.SF43] +Entities.gmod_subway_81-724.Buttons.PVZ.SF44Toggle = @[Common.722.SF44] +Entities.gmod_subway_81-724.Buttons.PVZ.SF45Toggle = @[Common.722.SF45] +Entities.gmod_subway_81-724.Buttons.PVZ.SF46Toggle = @[Common.722.SF46] +Entities.gmod_subway_81-724.Buttons.PVZ.SF47Toggle = @[Common.722.SF47] +Entities.gmod_subway_81-724.Buttons.PVZ.SF48Toggle = @[Common.722.SF48] +Entities.gmod_subway_81-724.Buttons.PVZ.SF51Toggle = @[Common.722.SF51] +Entities.gmod_subway_81-724.Buttons.PVZ.SF52Toggle = @[Common.722.SF52] +Entities.gmod_subway_81-724.Buttons.PVZ.SF53Toggle = @[Common.722.SF53] +Entities.gmod_subway_81-724.Buttons.PVZ.SF54Toggle = @[Common.722.SF54] +Entities.gmod_subway_81-724.Buttons.PVZ.SF55Toggle = @[Common.722.SF55] + +Entities.gmod_subway_81-724.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-724.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-724.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-724.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +Entities.gmod_subway_81-724.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-724.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] + +#Spawner: +Entities.gmod_subway_81-722.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-722.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-722.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-722.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-722.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-722.Spawner.SarmatInvert.Name = @[Common.Spawner.SchemeInvert] +Entities.gmod_subway_81-722.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-722.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-722.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-722.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-722.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] + +]] diff --git a/lua/metrostroi_data/languages/en_base.lua b/lua/metrostroi_data/languages/en_base.lua new file mode 100644 index 0000000..a3f3b4c --- /dev/null +++ b/lua/metrostroi_data/languages/en_base.lua @@ -0,0 +1,453 @@ +return [[ +#Base text for English language + +[en] +lang = English #Full language name +AuthorText = Translation Author: Pollitto #Author text + +#Workshop errors +Workshop.Title = Content manager +Workshop.FilesMissing = Missing some addon files or addon is corrupted.\nIf addons has installed from Workshop, try to delete a file:\nGarrysMod/garrysmod/%s. +Workshop.FilesMissingLocaly = Missing some addon files or addon is corrupted. +Workshop.InstalledLocaly = Installed (local) +Workshop.NotInstalledE = Not installed.\nSubscribe to the addon and check it in the "Addons" menu. +Workshop.NotInstalled = Not installed. +Workshop.Disabled = Disabled.\nEnable it in the "Addons" menu. +Workshop.Installed = Installed +Workshop.Open = Workshop +Workshop.ErrorGithub = Detected GitHub version of the Metrostroi. Current Metrostroi version is not compatible and cannot work with GitHub version of Metrostroi. +Workshop.ErrorLegacy = Detected Legacy version of the Metrostroi. Current Metrostroi version is not compatible and cannot work with Legacy version of Metrostroi. +Workshop.ErrorEnhancers = This addon contains a graphic enhancers that may interfere with the game experience. +Workshop.Error1 = This addon contain an old script code of the Metrostroi that conflicts with current. May be "Scripts errors" and unstable work of the addon. +Workshop.ErrorOld = Old models detected (81-702 and 81-717 old models). Check and remove old metrostroi content files, remove "cache", "download" and "downloads" folders from "garrysmod" folder. + +#Client settings +Panel.Admin = Admin +Panel.RequireThirdRail = Require third rail + +Panel.Client = Client +Panel.Language = Select language +Panel.DrawCams = Render cameras +Panel.DisableHUD = Disable HUD in the driver seat +Panel.DisableCamAccel = Disable camera acceleration +Panel.DisableHoverText = Disable tooltips +Panel.DisableHoverTextP = Disable additional information\nin tooltips #NEW #FIXME +Panel.ScreenshotMode = Screenshot mode (LOW FPS) +Panel.ShadowsHeadlight = Enable headlight shadows +Panel.RedLights = Enable dynamic light\nof red lights +Panel.ShadowsOther = Enable shadows from other\nlight sources +Panel.PanelSprites = Enable sprites from control\npanel lamps +Panel.MinimizedShow = Don't unload an elements\nwhen minimized +Panel.PanelLights = Enable dynamic lights\nfrom control panel lamps #NEW +Panel.RouteNumber = Route number #NEW +Panel.FOV = FOV +Panel.Z = Camera height #NEW +Panel.RenderDistance = Render distance +Panel.ReloadClient = Reload client side + +Panel.ClientAdvanced = Client (advanced) +Panel.DrawDebugInfo = Draw debug information +Panel.DrawSignalDebugInfo = Signalling debug info +Panel.CheckAddons = Scan addons +Panel.ReloadLang = Reload languages +Panel.SoftDraw = Train elements loading time +Panel.SoftReloadLang = Don't reload a spawnmenu + + + +#Common train + +#Cameras +Train.Common.Camera0 = Driver's seat +Train.Common.RouteNumber = Route number +Train.Common.LastStation = Last station +Train.Common.HelpersPanel = Helper's panel +Train.Common.UAVA = UAVA +Train.Common.PneumoPanels = Pneumatic valves +Train.Common.Voltmeters = Voltmeters and amperemeters +Train.Common.CouplerCamera = Coupler +Common.ARM.Monitor1 = Monitor 1 ARM + +Train.Buttons.Sealed = Sealed +Train.Buttons.Active = Active #NEW +Train.Buttons.Auto = Auto #NEW +Train.Buttons.On = On #NEW +Train.Buttons.Off = Off #NEW +Train.Buttons.Closed = Closed #NEW +Train.Buttons.Opened = Opened #NEW +Train.Buttons.Disconnected = Disconnected #NEW +Train.Buttons.Connected = Connected #NEW +Train.Buttons.UAVAOff = Control circuits is open #NEW (OFF) +Train.Buttons.UAVAOn = Control circuits is closed #NEW (ON) +Train.Buttons.Freq1/5 = 1/5 autoblocking #NEW +Train.Buttons.Freq2/6 = 2/6 ALS-ARS #NEW +Train.Buttons.Left = Left #NEW +Train.Buttons.Right = Right #NEW +Train.Buttons.Low = Low #NEW +Train.Buttons.High = High #NEW #FIXME +Train.Buttons.LFar = Bright #NEW #FIXME (headlights) +Train.Buttons.LNear = Dim #NEW #FIXME (headlights) +Train.Buttons.0 = 0 #NEW +Train.Buttons.1 = 1 #NEW +Train.Buttons.2 = 2 #NEW +Train.Buttons.3 = 3 #NEW +Train.Buttons.4 = 4 #NEW +Train.Buttons.Forward = Forward #NEW +Train.Buttons.Back = Backward #NEW +Train.Buttons.VentHalf = 1/2 of speed #NEW (of ventilation) +Train.Buttons.VentFull = Full speed #NEW (of ventilation) +Train.Buttons.VTRF = Forward oriented wagons #NEW +Train.Buttons.VTRB = Back oriented wagons #NEW +Train.Buttons.VTR1 = Even wagons #NEW +Train.Buttons.VTR2 = Odd wagons #NEW +Train.Buttons.VTRH1 = First half of train #NEW +Train.Buttons.VTRH2 = Second half of train #NEW +Train.Buttons.VTRAll = All wagons #NEW + +Train.Buttons.BatteryVoltage = %d V #NEW +Train.Buttons.HighVoltage = %d V #NEW +Train.Buttons.BatteryCurrent = %d A #NEW +Train.Buttons.EnginesCurrent = %d A #NEW +Train.Buttons.Speed = %d km/h #NEW +Train.Buttons.SpeedAll = %d km/h\nSpeed limit: %s km/h #NEW #FIXME +Train.Buttons.SpeedLimit = %s km/h #NEW +Train.Buttons.SpeedLimitNext = %s km/h #NEW +Train.Buttons.Acceleration = % 4.2f m/s #NEW +Train.Buttons.04 = NF #NEW (no frequency) +Train.Buttons.BCPressure = %.1f bar +Train.Buttons.BLTLPressure = TL: %.1f\nBL: %.1f bar #NEW (TL: Train line, BL: Brake line acronyms) +Train.Buttons.Locked = Locked #NEW +Train.Buttons.Unlocked = Unlocked #NEW + +#Train entities +Entities.gmod_subway_base.Name = Subway base +Entities.gmod_subway_81-502.Name = 81-502 (Ema-502 head) +Entities.gmod_subway_81-501.Name = 81-501 (Em-501 intermediate) +Entities.gmod_subway_81-702.Name = 81-702 (D head) +Entities.gmod_subway_81-702_int.Name = 81-702 (D intermediate) +Entities.gmod_subway_81-703.Name = 81-703 (E head) +Entities.gmod_subway_81-703_int.Name = 81-703 (E intermediate) +Entities.gmod_subway_ezh.Name = 81-707 (Ezh head) +Entities.gmod_subway_ezh1.Name = 81-708 (Ezh1 intermediate) +Entities.gmod_subway_ezh3.Name = 81-710 (Ezh3 head) +Entities.gmod_subway_em508t.Name = 81-508T (Em-508T intermediate) +Entities.gmod_subway_81-717_mvm.Name = 81-717 (Moscow head) +Entities.gmod_subway_81-717_mvm_custom.Name = 81-717 (Moscow custom) +Entities.gmod_subway_81-714_mvm.Name = 81-714 (Moscow intermediate) +Entities.gmod_subway_81-717_lvz.Name = 81-717 (St. Petersburg head) +Entities.gmod_subway_81-714_lvz.Name = 81-714 (St. Petersburg intermediate) +Entities.gmod_subway_81-718.Name = 81-718 (TISU head) +Entities.gmod_subway_81-719.Name = 81-719 (TISU intermediate) +Entities.gmod_subway_81-720.Name = 81-720 (Yauza head) +Entities.gmod_subway_81-721.Name = 81-721 (Yauza intermediate) +Entities.gmod_subway_81-722.Name = 81-722 (Yubileyniy head) +Entities.gmod_subway_81-723.Name = 81-723 (Yubileyniy intermediate motor) +Entities.gmod_subway_81-724.Name = 81-724 (Yubileyniy intermediate trailer) +Entities.gmod_subway_81-7036.Name = 81-7036 (doesn't work) +Entities.gmod_subway_81-7037.Name = 81-7037 (doesn't work) +Entities.gmod_subway_tatra_t3.Name = Tatra T3 + +#Train util entities +Entities.gmod_train_bogey.Name = Bogey +Entities.gmod_train_couple.Name = Coupler + +#Other entities +Entities.gmod_track_pui.Name = PUI +Entities.gmod_track_mus_elektronika7.Name = "Electronika" clock +Entities.gmod_mus_clock_analog.Name = Analog clock +Entities.gmod_track_clock_time.Name = Big interval clock (time) +Entities.gmod_track_clock_small.Name = Small interval clock +Entities.gmod_track_clock_interval.Name = Big interval clock (interval) +Entities.gmod_track_switch.Name = Track switch +Entities.gmod_track_powermeter.Name = Power meter +Entities.gmod_track_arm.Name = ARM DSCP +Entities.gmod_track_udochka.Name = Power connector +Entities.gmod_train_spawner.Name = Train spawner +Entities.gmod_train_special_box.Name = Special delivery + +#Weapons +Weapons.button_presser.Name = Button presser +Weapons.button_presser.Purpose = Used to press buttons on the maps. +Weapons.button_presser.Instructions = Aim to a button and click "Attack" button. +Weapons.train_key.Name = Administrator key +Weapons.train_key.Purpose = Used to activate the administrators buttons. +Weapons.train_key.Instructions = Aim to the administrator button and press "Attack" button. +Weapons.train_kv_wrench.Name = Reverser wrench +Weapons.train_kv_wrench.Purpose = Used in metro train and for pressing buttons in them. +Weapons.train_kv_wrench.Instructions = Aim to a button in the train and press "Attack" button. +Weapons.train_kv_wrench_gold.Name = The golden reverser wrench + +Weapons.train_kv_wrench_gold.Purpose = @[Weapons.train_kv_wrench.Purpose] +Weapons.train_kv_wrench_gold.Instructions = @[Weapons.train_kv_wrench.Instructions] + +#Spawner common +Spawner.Title = Train spawner +Spawner.Spawn = Spawn +Spawner.Close = Close +Spawner.Trains1 = Wags. allowed +Spawner.Trains2 = Per player +Spawner.WagNum = Wagons amount +Common.Spawner.Texture = Body skin +Common.Spawner.PassTexture = Interior skin +Common.Spawner.CabTexture = Driver's cab skin +Common.Spawner.Announcer = Announcer type +Common.Spawner.Type1 = Type 1 +Common.Spawner.Type2 = Type 2 +Common.Spawner.Type3 = Type 3 +Common.Spawner.Type4 = Type 4 +Common.Spawner.SpawnMode = Train state +Common.Spawner.SpawnMode.Deadlock = Dead-end +Common.Spawner.SpawnMode.Full = Fully started +Common.Spawner.SpawnMode.NightDeadlock = Dead-end after night +Common.Spawner.SpawnMode.Depot = Cold and dark +Spawner.Common.EType = Electric circuits type #FIXME +Common.Spawner.Scheme = Line schemes +Common.Spawner.Random = Random +Common.Spawner.Old = Old +Common.Spawner.New = New +Common.Spawner.Type = Type +Common.Spawner.SchemeInvert = Invert line schemes + +#Coupler common +Common.Couple.Title = Coupler menu +Common.Couple.CoupleState = Coupler state +Common.Couple.Coupled = Coupled +Common.Couple.Uncoupled = Not coupled +Common.Couple.Uncouple = Uncouple +Common.Couple.IsolState = Isolation valves state +Common.Couple.Isolated = Closed +Common.Couple.Opened = Opened +Common.Couple.Open = Open +Common.Couple.Isolate = Close +Common.Couple.EKKState = EKK state (electrical box connection) +Common.Couple.Disconnected = Disconnected +Common.Couple.Connected = Connected +Common.Couple.Connect = Connect +Common.Couple.Disconnect = Disconnect + +#Bogey common +Common.Bogey.Title = Bogie menu +Common.Bogey.ContactState = Current collectors state +Common.Bogey.CReleased = Released +Common.Bogey.CPressed = Pressed +Common.Bogey.CPress = Press +Common.Bogey.CRelease = Release +Common.Bogey.ParkingBrakeState = Parking brake state +Common.Bogey.PBDisabled = Manually disabled +Common.Bogey.PBEnabled = Enabled +Common.Bogey.PBEnable = Enable +Common.Bogey.PBDisable = Manual disable + +#Trains common +Common.ALL.Unsused1 = Unused +Common.ALL.Unsused2 = (unused) +Common.ALL.Up = (up) +Common.ALL.Down = (down) +Common.ALL.Left = (left) +Common.ALL.Right = (right) +Common.ALL.CW = (clockwise) +Common.ALL.CCW = (counter-clockwise) +Common.ALL.VB = VB: Battery on/off +Common.ALL.VSOSD = SOSD: Station doors opening lamp +Common.ALL.VKF = VKF: Battery power for red lights +Common.ALL.VB2 = (Low voltage circuits) +Common.ALL.VPR = VPR: Train radiostation +Common.ALL.VASNP = ASNP power +Common.ALL.UOS = RC-UOS: Speed Limitation Device (driving w/o EPV/EPK) +Common.ALL.VAH = VAH: Emergency driving mode (failure of RPB relay) +Common.ALL.KAH = KAH: Emergency drive button for driving w/o ARS +Common.ALL.KAHK = KAH button cover +Common.ALL.VAD = VAD: Emergency door close override (failure of KD relay) +Common.ALL.OVT = OVT: Disable pneumatic valves brake +Common.ALL.VOVT = VOVT: Turn off pneumatic valve brakes disabler +Common.ALL.EmergencyBrakeValve = Emergency brake +Common.ALL.ParkingBrake = Parking brake +Common.ALL.VU = VU: Train control switch +Common.ALL.KDP = KDP: Open right doors +Common.ALL.KDPL = Right doors side is selected +Common.ALL.KDPK = Right doors button cover +Common.ALL.KDL = KDL: Open left doors +Common.ALL.KDLL = Left doors side is selected +Common.ALL.KDLK = Left doors button cover +Common.ALL.KDLPK = Door buttons cover +Common.ALL.KRZD = KRZD: Emergency door closing +Common.ALL.VSD = Doors side selector +Common.ALL.Ring = Ring +Common.ALL.VUD = VUD: Door control toggle (close doors) +Common.ALL.KDPH = Open right doors of the last car +Common.ALL.VUD2 = VUD2: Close doors from the helper's side +Common.ALL.Program1 = Program I +Common.ALL.Program2 = Program II +Common.ALL.VRP = VRP: Reset overload relay +Common.ALL.VRPBV = VRP: Reset overload relay, enable BV +Common.ALL.KSN = KSN: Malfunction signalling +Common.ALL.VMK = VMK: Compressor +Common.ALL.MK = Compressor # (without acronym) +Common.ALL.VF1 = 1st headlight group +Common.ALL.VF2 = 2nd headlight group +Common.ALL.VF = Headlights switch +Common.ALL.VUS = VUS: Head lights bright/dim +Common.ALL.GaugeLights = Gauges lighting +Common.ALL.CabLights = Driver's cab lighting +Common.ALL.PassLights = Passenger compartment lighting +Common.ALL.PanelLights = Control panel lighting +Common.ALL.RMK = RMK: Emergency compressor +Common.ALL.KRP = KRP: Emergency start button +Common.ALL.VZP = VZP: Disable drive delay +Common.ALL.VZD = VZD: Disable doors delay +Common.ALL.VAV = VAV: Autodrive switch +Common.ALL.RouteNumber1+ = Increase first digit of the route number +Common.ALL.RouteNumber1- = Decrease first digit of the route number +Common.ALL.RouteNumber2+ = Increase second digit of the route number +Common.ALL.RouteNumber2- = Decrease first digit of the route number +Common.ALL.RouteNumber3+ = Increase third digit of the route number +Common.ALL.RouteNumber3- = Decrease first digit of the route number +Common.ALL.LastStation+ = Next last station +Common.ALL.LastStation- = Previous last station +Common.ALL.RRP = RP: Red overload relay lamp (power circuits failed to assemble) +Common.ALL.GRP = RP: Green overload relay lamp (prevents overcurrent of engines) +Common.ALL.RP = RP: Red overload relay lamp (power circuits failed to assemble or RP activated) +Common.ALL.SN = LSN: Failure indicator light (power circuits failed to assemble) +Common.ALL.PU = Reduced power mode indicator +Common.ALL.BrT = Train pneumobrakes are engaged +Common.ALL.BrW = Wagon pneumobrakes are engaged +Common.ALL.ARS = ARS: Automatic speed regulation +Common.ALL.ARSR = ARS-R: Automatic speed regulation in ARS-R mode +Common.ALL.ALS = ALS: Automatic locomotive signalling +Common.ALL.RCARS = RC-ARS: ARS circuits disconnect # (same as RC-1) +Common.ALL.RC1 = RC-1: ARS circuits disconnect +Common.ALL.EPK = ARS electropneumatic valve (EPK) +Common.ALL.EPV = ARS electropneumatic valve (EPV) +Common.ARS.LN = LN: Direction signal +Common.ARS.KT = KT: Braking control lamp +Common.ARS.VD = VD: Drive mode has turned off by ARS +Common.ARS.Freq = ALS decoder switch +Common.ARS.FreqD = (up 1/5, down 2/6) +Common.ARS.FreqU = (up 2/6, down 1/5) +Common.ARS.VP = "Auxiliary train" mode #FIXME +Common.ARS.RS = RS: Speed equality light (next segment speed limit equal or greater to current) +Common.ARS.AB = Autoblocking ARS mode +Common.ARS.ABButton = Autoblocking ARS mode button +Common.ARS.ABDriver = (driver's) +Common.ARS.ABHelper = (helper's) +Common.ARS.AV = Main ARS-MP unit malfunction +Common.ARS.AV1 = Spare ARS-MP unit malfunction +Common.ARS.AB2 = Autoblocking ARS mode button +Common.ARS.ARS = ARS mode +Common.ARS.LRD = LRD: Move permission (when 0 on ALS) +Common.ARS.VRD = VRD: Allow movement(when 0 on ALS) +Common.ARS.KB = KB: Attention button +Common.ARS.KVT = KVT: Brake perception button +Common.ARS.KVTR = KVT: ARS-R brake perception button +Common.ARS.AO = AO: Absolute stop signal +Common.ARS.04 = OCh: No ARS frequency +Common.ARS.N4 = NCh: No ARS frequency # (same as OCh but NCh) +Common.ARS.0 = 0: ARS stop signal +Common.ARS.40 = Speed limit 40 km/h +Common.ARS.60 = Speed limit 60 km/h +Common.ARS.70 = Speed limit 70 km/h +Common.ARS.80 = Speed limit 80 km/h +Common.ALL.RCBPS = RC-BPS: Anti-Rollback unit +Common.BPS.On = Anti-Rollback unit operation +Common.BPS.Err = Anti-Rollback unit error +Common.BPS.Fail = Anti-Rollback unit malfunction +Commom.NMnUAVA.NMPressureLow = Low train line pressure lamp +Commom.NMnUAVA.UAVATriggered = UAVA contacts are open +Common.ALL.LSD = Train doors state light (doors are closed) +Common.ALL.L1w = 1st wire lamp (drive mode engaged) +Common.ALL.L2w = 2nd wire lamp (rheostat controller motion) +Common.ALL.L6w = 6th wire lamp (brake mode engaged) +Common.ALL.Horn = Horn +Common.ALL.DriverValveBLDisconnect = Brake line disconnect valve +Common.ALL.DriverValveTLDisconnect = Train line disconnect valve +Common.ALL.DriverValveDisconnect = Driver's valve disconnect valve +Common.ALL.KRMH = KRMSH: Driver's valve emergency enable #FIXME +Common.ALL.RVTB = RVTB: Reserved valve of safety brake #FIXME +Common.ALL.FrontBrakeLineIsolationToggle = Brake line isolation valve +Common.ALL.FrontTrainLineIsolationToggle = Train line isolation valve +Common.ALL.RearTrainLineIsolationToggle = Train line isolation valve +Common.ALL.RearBrakeLineIsolationToggle = Brake line isolation valve +Common.ALL.UAVA = UAVA: Enable automatic autostop disabler\n(may be enabled after brake line pressure drop) +Common.ALL.UAVA2 = UAVA: Enable automatic autostop disabler +Common.ALL.UAVAContact = UAVA contacts reset +Common.ALL.OAVU = OAVU: Disable AVU +Common.ALL.LAVU = AVU is activated +Common.ALL.GV = Main switch +Common.ALL.AirDistributor = VRN: Air distributor disabler +Common.ALL.CabinDoor = Door to the driver's cab +Common.ALL.PassDoor = Door to the passenger compartment +Common.ALL.FrontDoor = Front door +Common.ALL.RearDoor = Rear door +Common.ALL.OtsekDoor1 = 1st equipment cupboard handle +Common.ALL.OtsekDoor2 = 2nd equipment cupboard handle +Common.ALL.CouchCap = Pull out the seat + +Common.ALL.UNCh = UNCh: Low frequency amplifier +Common.ALL.ES = ES: Emergency communication control +Common.ALL.GCab = Loudspeaker: Sound in the driver's cab +Common.ALL.UPO = UPO: Announcer +Common.ALL.R_Radio = Announcer +Common.ALL.AnnPlay = Announcer playback lamp + +#RRI +Train.Common.RRI = RRI: Radio-relay announcer +Common.RRI.RRIUp = RRI: Setup up +Common.RRI.RRIDown = RRI: Setup down +Common.RRI.RRILeft = RRI: Setup left +Common.RRI.RRIRight = RRI: Setup right +Common.RRI.RRIEnableToggle = RRI: Power +Common.RRI.RRIRewindSet2 = RRI: Fast forward +Common.RRI.RRIRewindSet0 = RRI: Rewind +Common.RRI.RRIAmplifierToggle = RRI: Amplifier +Common.RRI.RRIOn = RRI operation lamp + +#ASNP +Train.Common.ASNP = ASNP +Common.ASNP.ASNPMenu = ASNP: Menu +Common.ASNP.ASNPUp = ASNP: Up +Common.ASNP.ASNPDown = ASNP: Down +Common.ASNP.ASNPOn = ASNP: Power + +#PVK +Common.CabVent.PVK- = Decrease driver's cab ventilation power +Common.CabVent.PVK+ = Increase driver's cab ventilation power + +#IGLA +Train.Common.IGLA = IGLA +Common.IGLA.Button1Up = IGLA: First button up +Common.IGLA.Button1 = IGLA: First button +Common.IGLA.Button1Down = IGLA: First button down +Common.IGLA.Button2Up = IGLA: Second button up +Common.IGLA.Button2 = IGLA: Second button +Common.IGLA.Button2Down = IGLA: Second button down +Common.IGLA.Button23 = IGLA: Second and third buttons +Common.IGLA.Button3 = IGLA: Third button +Common.IGLA.Button4 = IGLA: Fourth button +Common.IGLA.IGLASR = IGLA: Power +Common.IGLA.IGLARX = IGLA: No connection +Common.IGLA.IGLAErr = IGLA: Error +Common.IGLA.IGLAOSP = IGLA: Fire-extinguishing system is activated +Common.IGLA.IGLAPI = IGLA: Fire +Common.IGLA.IGLAOff = IGLA: HV circuits off + +#BZOS +Common.BZOS.On = Security alarm switch +Common.BZOS.VH1 = Security alarm is enabled +Common.BZOS.VH2 = Security alarm is triggered +Common.BZOS.Engaged = Security alarm is triggered + +#Train helpers common +Common.ALL.SpeedCurr = Actual speed #FIXME +Common.ALL.SpeedAccept = Allowed speed +Common.ALL.SpeedAttent = Allowed speed on the next block +Common.ALL.Speedometer = Speedometer +Common.ALL.BLTLPressure = Pressure in pneumatic lines (red: brake line, black: train line) +Common.ALL.BCPressure = Brake cylinder pressure +Common.ALL.EnginesCurrent = Engines current (A) +Common.ALL.EnginesCurrent1 = 1st traction motors current (A) +Common.ALL.EnginesCurrent2 = 2nd traction motors current (A) +Common.ALL.EnginesVoltage = Engines voltage (kV) +Common.ALL.BatteryVoltage = Battery voltage (V) +Common.ALL.BatteryCurrent = Battery current (A) +Common.ALL.HighVoltage = High voltage (kV) +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/fr_502.lua b/lua/metrostroi_data/languages/fr_502.lua new file mode 100644 index 0000000..167dd67 --- /dev/null +++ b/lua/metrostroi_data/languages/fr_502.lua @@ -0,0 +1,274 @@ +return [[ +#81-502 + +[fr] + +#######Buttons########### +#Common +Common.502.KS = Indicateur d'opération KSAUP +Common.502.AV = La conduite automatique est engagée +Common.502.SD = SD: Etat des portes (les portes sont ouvertes) +Common.502.SDW = SD: Etat des portes (les portes sont fermées) +Common.502.L3w = Lampe du 3ème câble (mode X3) +Common.502.L4w = Lampe du 4ème câble (direction : marche avant) +Common.502.L5w = Lampe du 5ème câble (direction : marche arrière) +Common.502.L16w = Lampe du 16ème câble (verrouillage des portes) +Common.502.L20w = Lampe du 20ème câble (fermeture du LK2 et LK5, retombée progressive du courant) +Common.502.L23w = Lampe du 23ème câble (contrôle du compresseur) +Common.502.RK1 = Contrôle de la première position du RK +Common.502.BRD = Lampe d'échec de manoeuvre des portes +Common.502.KOS = KB: Limitation de vitesse (bouton d'avertissement) +Common.502.VAK = AK: Asssemblage des circuits du mode de conduite d'urgence +Common.502.LRU = Les circuits du mode de conduite d'urgence sont enclenchés + +#Spawner +Spawner.502.TypeNVL = Train de NVL (ligne Nevsko-Vasileostrovskaya) +Spawner.502.TypeKVLO = Ancien train de KVL (ligne Kirovsko-Vyborskaya) +Spawner.502.TypeKVLN = Nouveau train de KVL (ligne Kirovsko-Vyborskaya) +Spawner.502.EWagons = Ajouter des voitures de type "E" + +#gmod_subway_81-502 +Entities.gmod_subway_81-502.Buttons.VBA.VBAToggle = Batterie de conduite automatique on/off + +Entities.gmod_subway_81-502.Buttons.AV.VRUToggle = VRU: Mode de conduite d'urgence +Entities.gmod_subway_81-502.Buttons.AV.KPVUToggle = KPVU: Coupe le désactivateur de contrôle pneumatique +Entities.gmod_subway_81-502.Buttons.AV.KSDToggle = KSD: Contrôle du verrouillage des portes +Entities.gmod_subway_81-502.Buttons.AV.KAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-502.Buttons.AV.KADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-502.Buttons.AV.OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-502.Buttons.AV.VKFToggle = @[Common.ALL.VKF] + + +Entities.gmod_subway_81-502.Buttons.RCAV3.RCAV3Toggle = Déconnecteur des circuits KSAUP (AV3) +Entities.gmod_subway_81-502.Buttons.RCAV4.RCAV4Toggle = Déconnecteur des circuits KSAUP (AV4) +Entities.gmod_subway_81-502.Buttons.RCAV5.RCAV5Toggle = Déconnecteur des circuits KSAUP(AV5) +Entities.gmod_subway_81-502.Buttons.RCARS.RCARSToggle = @[Common.ALL.RCARS] +Entities.gmod_subway_81-502.Buttons.RCBPS.RCBPSToggle = @[Common.ALL.RCBPS] + +Entities.gmod_subway_81-502.Buttons.VRD2.2:VRDSet = @[Common.ARS.VRD] +Entities.gmod_subway_81-502.Buttons.VRD2.!LVRD = @[Common.ARS.LRD] + +Entities.gmod_subway_81-502.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-502.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-502.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-502.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-502.Buttons.AV1.VU3Toggle = @[Common.703.VU3] +Entities.gmod_subway_81-502.Buttons.UPO.R_UPOToggle = @[Common.ALL.UPO] + +Entities.gmod_subway_81-502.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_81-502.Buttons.VRD.VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-502.Buttons.HelperPanel.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.HelperPanel.KDPHSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-502.Buttons.AV2.VSOSDToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-502.Buttons.AV2.VRToggle = @[Common.ALL.VPR] + +Entities.gmod_subway_81-502.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLampAutodrive = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LDoorsWag = @[Common.502.SDW] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LDoors = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LGreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LRedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLampAutodrive = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RDoorsWag = @[Common.502.SDW] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RDoors = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RGreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RRedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_80 = @[Common.ARS.80] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_70 = @[Common.ARS.70] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_60 = @[Common.ARS.60] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_40 = @[Common.ARS.40] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_00 = @[Common.ARS.0] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_04 = @[Common.ARS.N4] + +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_KS = @[Common.502.KS] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_AV = @[Common.502.AV] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_4 = @[Common.502.L4w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_5 = @[Common.502.L5w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_DT = @[Common.ALL.BrT] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_20 = @[Common.502.L20w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_1P = @[Common.502.RK1] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SN1 = @[Common.ALL.RP] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SN2 = @[Common.ALL.SN] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_3 = @[Common.502.L3w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SD1 = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SD2 = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_RP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_DV = @[Common.502.BRD] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!CPS_Pd = @[Common.ARS.LRD] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_04 = @[Common.ARS.04] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_00 = @[Common.ARS.0] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_40 = @[Common.ARS.40] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_60 = @[Common.ARS.60] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_70 = @[Common.ARS.70] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_80 = @[Common.ARS.80] + +Entities.gmod_subway_81-502.Buttons.Main1.2:VUSToggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-502.Buttons.Main1.2:HeadlightsToggle = @[Common.ALL.VF1] +Entities.gmod_subway_81-502.Buttons.Main1.!LKTLight = @[Common.ARS.KT] +Entities.gmod_subway_81-502.Buttons.Main1.!LKVDLight = @[Common.ARS.VD] +Entities.gmod_subway_81-502.Buttons.Main1.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-502.Buttons.Main1.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-502.Buttons.Main1.2:KBSet = @[Common.ARS.KB] +Entities.gmod_subway_81-502.Buttons.Main1.2:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.Main1.2:LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-502.Buttons.Main1.2:LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-502.Buttons.Main1.2:VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-502.Buttons.Main1.2:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-502.Buttons.Main1.2:KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-502.Buttons.Main1.2:VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-502.Buttons.Main1.2:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-502.Buttons.Main1.2:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-502.Buttons.Main1.2:VAKSet = @[Common.502.VAK] +Entities.gmod_subway_81-502.Buttons.Main1.2:VUDToggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-502.Buttons.Main1_2.!LMK2 = @[Common.502.L23w] +Entities.gmod_subway_81-502.Buttons.Main1_2.!LVRD2 = @[Common.ARS.LRD] + +Entities.gmod_subway_81-502.Buttons.Main2.KOSSet = @[Common.502.KOS] +Entities.gmod_subway_81-502.Buttons.Main2.!LMK = @[Common.502.L23w] +Entities.gmod_subway_81-502.Buttons.Main2.VZPToggle = @[Common.ALL.VZP] +Entities.gmod_subway_81-502.Buttons.Main2.VZDSet = @[Common.ALL.VZD] +Entities.gmod_subway_81-502.Buttons.Main2.!L16 = @[Common.502.L16w] +Entities.gmod_subway_81-502.Buttons.Main2.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-502.Buttons.Main2.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.Main2.LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-502.Buttons.Main2.LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-502.Buttons.Main2.VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-502.Buttons.Main2.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-502.Buttons.Main2.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-502.Buttons.Main2.KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-502.Buttons.Main2.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-502.Buttons.Main2.!RU = @[Common.502.LRU] +Entities.gmod_subway_81-502.Buttons.Main2.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-502.Buttons.Main2.VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-502.Buttons.Main2.VAKSet = @[Common.502.VAK] +Entities.gmod_subway_81-502.Buttons.Main2.AutodriveToggle = @[Common.ALL.VAV] +Entities.gmod_subway_81-502.Buttons.Main2.VUDToggle = @[Common.ALL.VUD] + +Entities.gmod_subway_81-502.Buttons.BPS.!BPSon = @[Common.BPS.On] +Entities.gmod_subway_81-502.Buttons.BPS.!BPSErr = @[Common.BPS.Err] +Entities.gmod_subway_81-502.Buttons.BPS.!BPSFail = @[Common.BPS.Fail] +Entities.gmod_subway_81-502.Buttons.NMnUAVA.!NMPressureLow = @[Commom.NMnUAVA.NMPressureLow] +Entities.gmod_subway_81-502.Buttons.NMnUAVA.!UAVATriggered = @[Commom.NMnUAVA.UAVATriggered] + +Entities.gmod_subway_81-502.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-502.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-502.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-502.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-502.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-502.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-502.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-502.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-502.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-502.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-502.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-502.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-502.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-502.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber3+ = @[Common.ALL.RouteNumber3+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber3- = @[Common.ALL.RouteNumber3-] + +Entities.gmod_subway_81-502.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-502.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-502.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-502.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-502.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-502.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-501 +Entities.gmod_subway_81-501.Buttons.AV.KPVUToggle = @[Entities.gmod_subway_81-502.Buttons.AV.KPVUToggle] +Entities.gmod_subway_81-501.Buttons.AV.KSDToggle = @[Entities.gmod_subway_81-502.Buttons.AV.KSDToggle] + +Entities.gmod_subway_81-501.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-501.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-501.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-501.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-501.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-501.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_81-501.Buttons.Main.!GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-501.Buttons.Main.!RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-501.Buttons.Main.!SD = @[Common.703.SD] +Entities.gmod_subway_81-501.Buttons.Main.LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-501.Buttons.Main.LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-501.Buttons.Main.VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-501.Buttons.Main.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-501.Buttons.Main.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-501.Buttons.Main.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-501.Buttons.Main.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-501.Buttons.Main.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-501.Buttons.Main.VUDToggle = @[Common.ALL.VUD] + +Entities.gmod_subway_81-501.Buttons.HelperPanel.VDLSet = @[Common.ALL.KDL] + +Entities.gmod_subway_81-501.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-501.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-501.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-501.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-501.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-501.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-501.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-501.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-501.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-501.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-501.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-501.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-501.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-501.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-501.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-501.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] + +Entities.gmod_subway_81-501.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#Cameras: +Train.502.AV = Interrupteurs +Train.502.VBA = @[Entities.gmod_subway_81-502.Buttons.VBA.VBAToggle] +Train.502.VRD = VRD +Train.502.RCARS = RC-ARS +Train.502.RCAV5 = RC-AV5 +Train.502.RCBPS = RC-BPS +Train.502.RCAV3 = RC-AV3 +Train.502.RCAV4 = RC-AV4 + +#Spawner: +Entities.gmod_subway_81-502.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-502.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-502.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-502.Spawner.EMAType.Name = @[Spawner.Common.EType] +Entities.gmod_subway_81-502.Spawner.EMAType.1 = @[Spawner.502.TypeNVL] +Entities.gmod_subway_81-502.Spawner.EMAType.2 = @[Spawner.502.TypeKVLO] +Entities.gmod_subway_81-502.Spawner.EMAType.3 = @[Spawner.502.TypeKVLN] +Entities.gmod_subway_81-502.Spawner.EWagons.Name = @[Spawner.502.EWagons] +Entities.gmod_subway_81-502.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-502.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-502.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-502.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-502.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/fr_702.lua b/lua/metrostroi_data/languages/fr_702.lua new file mode 100644 index 0000000..0205cb7 --- /dev/null +++ b/lua/metrostroi_data/languages/fr_702.lua @@ -0,0 +1,760 @@ +return [[ +#D/E-based types + +[fr] + +#Cameras: +Train.702.Breakers1 = Interrupteur de batterie +Train.702.Breakers2 = Interrupteurs d'éclairage +Train.702.Breakers3 = Disjoncteur principal +Train.703.Breakers1 = Interrupteur de batterie +Train.703.Breakers2 = Main switch and lighting switches +Train.703.Parking = Frein de parking, UAVA +Train.703.RCARS = RC-1: Déconncteur des circuits ARS +Train.703.AVU = Bloc AVU + +#Spawner +Spawner.707.Type = Type de tableau de bord +Spawner.707.Type1 = Ancien + RRI +Spawner.707.Type2 = Nouveau + ASNP +Spawner.710.RRI = Annonceur radio-relai + +#######Buttons########### +Train.Buttons.ParkingBrake = %d%% #NEW +Train.Buttons.EnginesVoltage = %d V #NEW +Train.Buttons.CanAB = AB mode is available #NEW +Train.Buttons.InAB = In AB mode #NEW + +#Common +Common.702.VZ1 = Valve pneumatique â„–1 +Common.703.ParkingBrakeLeft = Relâcher le frein de parking +Common.703.ParkingBrakeRight = Appliquer le frein de parking +Common.703.KSD = KSD: Contrôle du verouillage des portes +Common.703.SD = @[Common.502.SDW] +Common.703.VU1 = Chauffage cabine +Common.703.VU2 = Eclairage d'urgence +Common.703.VU3 = Eclairage cabine +Common.703.AV = Disjoncteur principal (circuits haute tension) +Common.703.LOn = Activer l'éclairage +Common.703.LOff = Désactiver l'éclairage +Common.703.KRR = KRR: Tourner le RK à la première position +Common.703.RUT = Ajustement RUT (accéleration réduite) +Common.707.SEQ = Lampe de mouvement de la manette rhéostat +Common.707.TAH = TAH: Mode de conduite d'urgence sans ARS +Common.710.RK = La manette rhéostat est en position intermédiaire + +Common.710.SAMMSchemeOff = Bouton stop SAMM +Common.710.SAMMStart = Bouton start SAMM +Common.710.SAMMReset = Bouton reset SAMM +Common.710.SAMMXTLamp = SAMM: Circuits conduite/frein connectés par l'ATO +Common.710.SAMMSignal1 = SAMM: @[Common.ALL.Unsused1] +Common.710.SAMMSignal2 = SAMM: @[Common.ALL.Unsused1] +Common.710.SAMMOn = SAMM: Interrupteur (ATO : conduite automatique) +Common.710.SAMMUnit = SAMM: Unité d'éxecution +Common.710.SAMMX2 = SAMM: Mode X2 +Common.710.SAMMAhead = SAMM: Mode rattrapage +Common.710.SAMMAccept = SAMM: Permission + +#gmod_subway_81-702 +Entities.gmod_subway_81-702.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-702.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-702.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-702.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-702.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-702.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-702.Buttons.VU.KU1Set = @[Common.703.LOn] +Entities.gmod_subway_81-702.Buttons.VU.KU2Set = @[Common.703.LOff] +Entities.gmod_subway_81-702.Buttons.MainB.KU7Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-702.Buttons.MainB.KU6Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-702.Buttons.MainB.VRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-702.Buttons.MainB.KU3Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-702.Buttons.MainP.VZSet = @[Common.702.VZ1] +Entities.gmod_subway_81-702.Buttons.KU9.KU9Set = @[Common.703.KSD] +Entities.gmod_subway_81-702.Buttons.KU5.KU5Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-702.Buttons.MainL.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-702.Buttons.MainL.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-702.Buttons.MainL.!Blue = @[Common.703.SD] +Entities.gmod_subway_81-702.Buttons.VU.SNSet = @[Common.ALL.KSN] + +Entities.gmod_subway_81-702.Buttons.HelperPanel.KU10Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-702.Buttons.HelperPanel.KU8Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-702.Buttons.HelperPanel.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-702.Buttons.HelperPanel.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_81-702.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_81-702.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_81-702.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_81-702.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_81-702.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] + +Entities.gmod_subway_81-702.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-702.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-702.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-702.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-702.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-702.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-702.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-702.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-702.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-702.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-702.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-702.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-702.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-702.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-702.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-702.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-702.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-702.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-702.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-702.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-702_int +Entities.gmod_subway_81-702_int.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-702_int.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-702_int.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-702_int.Buttons.VU.KU1Set = @[Common.703.LOn] +Entities.gmod_subway_81-702_int.Buttons.VU.KU2Set = @[Common.703.LOff] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU7Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU6Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-702_int.Buttons.MainB.VRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU3Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-702_int.Buttons.KU9.KU9Set = @[Common.703.KSD] +Entities.gmod_subway_81-702_int.Buttons.KU5.KU5Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-702_int.Buttons.MainL.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-702_int.Buttons.MainL.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-702_int.Buttons.MainL.!Blue = @[Common.703.SD] +Entities.gmod_subway_81-702_int.Buttons.VU.SNSet = @[Common.ALL.KSN] + +Entities.gmod_subway_81-702_int.Buttons.HelperPanel.KU10Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-702_int.Buttons.HelperPanel.KU8Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_81-702_int.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-702_int.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-702_int.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-702_int.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-702_int.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-702_int.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-702_int.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-702_int.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-702_int.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-702_int.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702_int.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702_int.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-702_int.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-702_int.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-702_int.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-702_int.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-702_int.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-702_int.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-702_int.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-702_int.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-703 +Entities.gmod_subway_81-703.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-703.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-703.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-703.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-703.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-703.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-703.Buttons.AV2.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-703.Buttons.Main.RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-703.Buttons.Main.GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-703.Buttons.Main.SD = @[Common.703.SD] +Entities.gmod_subway_81-703.Buttons.Main.SDW = @[Common.502.SDW] #NEW +Entities.gmod_subway_81-703.Buttons.Main.PP1 = @[Common.ALL.L1w] #NEW +Entities.gmod_subway_81-703.Buttons.Main.PP6 = @[Common.ALL.L6w] #NEW +Entities.gmod_subway_81-703.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_81-703.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_81-703.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_81-703.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_81-703.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-703.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_81-703.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-703.Buttons.Main.KU7KToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-703.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703.Buttons.Main.KU6KToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-703.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-703.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-703.Buttons.Main.KU12Toggle = @[Common.703.RUT] +Entities.gmod_subway_81-703.Buttons.VU4.KU16Toggle = @[Common.ALL.VF2] + +Entities.gmod_subway_81-703.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-703.Buttons.HelperPanel.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-703.Buttons.HelperPanel.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_81-703.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_81-703.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_81-703.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_81-703.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_81-703.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] + +Entities.gmod_subway_81-703.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-703.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-703.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-703.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-703.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-703.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-703.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-703.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-703.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-703.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-703.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-703.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-703.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-703.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-703.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-703.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-703.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-703.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-703.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-703.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-703.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-703_int +Entities.gmod_subway_81-703_int.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-703_int.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-703_int.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-703_int.Buttons.Main.RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-703_int.Buttons.Main.GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-703_int.Buttons.Main.SD = @[Common.703.SD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_81-703_int.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_81-703_int.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_81-703_int.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_81-703_int.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-703_int.Buttons.Main.KU7KToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703_int.Buttons.Main.KU6KToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU12Toggle = @[Common.703.RUT] +Entities.gmod_subway_81-703_int.Buttons.VU4.KU16Toggle = @[Common.ALL.VF2] + +Entities.gmod_subway_81-703_int.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703_int.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_81-703_int.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-703_int.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-703_int.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-703_int.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-703_int.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-703_int.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-703_int.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-703_int.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-703_int.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-703_int.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703_int.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703_int.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-703_int.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-703_int.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-703_int.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-703_int.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-703_int.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-703_int.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-703_int.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-703_int.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-703_int.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_ezh +Entities.gmod_subway_ezh.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_ezh.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_ezh.Buttons.VU.KU14Set = @[Common.ALL.KRP] +Entities.gmod_subway_ezh.Buttons.VU.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_ezh.Buttons.KRR.KRRSet = @[Common.703.KRR] + +Entities.gmod_subway_ezh.Buttons.AVU.OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_ezh.Buttons.AVU.!AVULight = @[Common.ALL.LAVU] + +Entities.gmod_subway_ezh.Buttons.AV2.R_RadioToggle = @[Common.ALL.VASNP] +Entities.gmod_subway_ezh.Buttons.AV2.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_ezh.Buttons.AV2.UOSToggle = @[Common.ALL.UOS] + +Entities.gmod_subway_ezh.Buttons.LampsALS1.!LNF = @[Common.ARS.04] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L0 = @[Common.ARS.0] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L40 = @[Common.ARS.40] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L60 = @[Common.ARS.60] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L70 = @[Common.ARS.70] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L80 = @[Common.ARS.80] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!LNF_2 = @[Common.ARS.04] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L0_2 = @[Common.ARS.0] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L40_2 = @[Common.ARS.40] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L60_2 = @[Common.ARS.60] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L70_2 = @[Common.ARS.70] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L80_2 = @[Common.ARS.80] + +Entities.gmod_subway_ezh.Buttons.AB1.AB1Set = @[Common.ARS.ABButton]@[Common.ARS.ABDriver] +Entities.gmod_subway_ezh.Buttons.AB2.AB2Set = @[Common.ARS.ABButton]@[Common.ARS.ABHelper] +Entities.gmod_subway_ezh.Buttons.KAH.KAHToggle = @[Common.707.TAH] +Entities.gmod_subway_ezh.Buttons.RC1.RC1Toggle = @[Common.ALL.RCARS] + +Entities.gmod_subway_ezh.Buttons.Lamps1.!AV = @[Common.ARS.AV] +Entities.gmod_subway_ezh.Buttons.Lamps1.!SEQ = @[Common.707.SEQ] +Entities.gmod_subway_ezh.Buttons.Lamps1.!ARS = @[Common.ARS.ARS] +Entities.gmod_subway_ezh.Buttons.Lamps1.!AB = @[Common.ARS.AB] +Entities.gmod_subway_ezh.Buttons.Lamps1.!SD = @[Common.703.SD] +Entities.gmod_subway_ezh.Buttons.Lamps1.!LSN = @[Common.ALL.SN] +Entities.gmod_subway_ezh.Buttons.Lamps1.!AV1 = @[Common.ARS.AV1] +Entities.gmod_subway_ezh.Buttons.Lamps1.!RRP = @[Common.ALL.RP] +Entities.gmod_subway_ezh.Buttons.Lamps1.!KT = @[Common.ARS.KT] +Entities.gmod_subway_ezh.Buttons.Lamps1.!VD = @[Common.ARS.VD] +Entities.gmod_subway_ezh.Buttons.Lamps1.!RS = @[Common.ARS.RS] +Entities.gmod_subway_ezh.Buttons.Lamps1.!LN = @[Common.ARS.LN] +Entities.gmod_subway_ezh.Buttons.Lamps2.!RRP2 = @[Common.ALL.RP] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LPU2 = @[Common.707.SEQ] +Entities.gmod_subway_ezh.Buttons.Lamps2.!VD2 = @[Common.ARS.VD] +Entities.gmod_subway_ezh.Buttons.Lamps2.!KT2 = @[Common.ARS.KT] +Entities.gmod_subway_ezh.Buttons.Lamps2.!AB2 = @[Common.ARS.AB] +Entities.gmod_subway_ezh.Buttons.Lamps2.!SD2 = @[Common.703.SD] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LN2 = @[Common.ARS.LN] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LSN2 = @[Common.ALL.SN] + +Entities.gmod_subway_ezh.Buttons.Main1.1:KU16Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_ezh.Buttons.Main1.1:ALSFreqToggle = @[Common.ARS.Freq]@[Common.ARS.FreqD] +Entities.gmod_subway_ezh.Buttons.Main1.1:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU6KToggle = @[Common.ALL.KDLPK] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh.Buttons.Main1.1:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh.Buttons.Main1.1:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh.Buttons.Main1.1:R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU16Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_ezh.Buttons.Main2.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh.Buttons.Main2.2:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU6KToggle = @[Common.ALL.KDLPK] +Entities.gmod_subway_ezh.Buttons.Main2.2:ALSFreqToggle = @[Common.ARS.Freq]@[Common.ARS.FreqD] +Entities.gmod_subway_ezh.Buttons.Main2.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh.Buttons.Main2.2:R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU10Set = @[Common.ALL.KRZD] + +Entities.gmod_subway_ezh.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_ezh.Buttons.HelperPanel.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.HelperPanel.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_ezh.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_ezh.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_ezh.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_ezh.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_ezh.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] + +Entities.gmod_subway_ezh.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_ezh.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_ezh.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_ezh.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_ezh.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_ezh.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_ezh.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + + +Entities.gmod_subway_ezh.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_ezh.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_ezh.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_ezh.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_ezh1 +Entities.gmod_subway_ezh1.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh1.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh1.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh1.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh1.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh1.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh1.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh1.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh1.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] + + +Entities.gmod_subway_ezh1.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh1.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh1.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh1.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh1.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +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.!SD = @[Common.703.SD] + +Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh1.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh1.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh1.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh1.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh1.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh1.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh1.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh1.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh1.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_ezh1.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh1.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh1.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_ezh1.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh1.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_ezh1.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_ez3 +Entities.gmod_subway_ezh3.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh3.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh3.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh3.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh3.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_ezh3.Buttons.RUM.RUMToggle = @[Common.ALL.RCARS] +Entities.gmod_subway_ezh3.Buttons.KRR.KRRSet = @[Common.703.KRR] + +Entities.gmod_subway_ezh3.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_ezh3.Buttons.VUHelper.VUToggle = @[Common.ALL.VU] + + +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSchemeOffSet = @[Common.710.SAMMSchemeOff] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMStartSet = @[Common.710.SAMMStart] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMResetSet = @[Common.710.SAMMReset] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMXTLamp = @[Common.710.SAMMXTLamp] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal1 = @[Common.ALL.Unsused1] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal2 = @[Common.ALL.Unsused1] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMOnToggle = @[Common.710.SAMMOn] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMUnitToggle = @[Common.710.SAMMUnit] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMX2Toggle = @[Common.710.SAMMX2] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMAheadToggle = @[Common.710.SAMMAhead] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMAcceptToggle = @[Common.710.SAMMAccept] +Entities.gmod_subway_ezh3.Buttons.Main.V1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh3.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh3.Buttons.Main.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh3.Buttons.Main.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_ezh3.Buttons.Main.VU14Toggle = @[Common.ALL.VUS] +Entities.gmod_subway_ezh3.Buttons.Main.GLightsToggle = @[Common.ALL.GaugeLights] +Entities.gmod_subway_ezh3.Buttons.Main.VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_ezh3.Buttons.Main.V4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh3.Buttons.Main.V5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh3.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_ezh3.Buttons.Main.KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh3.Buttons.Main.KBSet = @[Common.ARS.KB] +Entities.gmod_subway_ezh3.Buttons.Main.RKLamp = @[Common.710.RK] +Entities.gmod_subway_ezh3.Buttons.Main.ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh3.Buttons.Main.R_UNchToggle = @[Common.ALL.UNCh] +Entities.gmod_subway_ezh3.Buttons.Main.V2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh3.Buttons.Main.R_RadioToggle = @[Common.ALL.R_Radio] +Entities.gmod_subway_ezh3.Buttons.Main.ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh3.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh3.Buttons.Main.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_ezh3.Buttons.Main.PLightsToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_ezh3.Buttons.Main.V10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh3.Buttons.Main.PLightsToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_ezh3.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh3.Buttons.Main.KU12Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh3.Buttons.Main.KAHSet = @[Common.ALL.KAH] +Entities.gmod_subway_ezh3.Buttons.Main.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_ezh3.Buttons.Main.KU10Set = @[Common.ALL.KRP] +Entities.gmod_subway_ezh3.Buttons.Main.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_ezh3.Buttons.Main.R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_ezh3.Buttons.Main.!AnnPlay = @[Common.ALL.AnnPlay] + +Entities.gmod_subway_ezh3.Buttons.HelperPanel.V6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.V3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_ezh3.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] + +Entities.gmod_subway_ezh3.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh3.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh3.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh3.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh3.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh3.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh3.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh3.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_ezh3.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_ezh3.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_ezh3.Buttons.Panel.!L04 = @[Common.ARS.04] +Entities.gmod_subway_ezh3.Buttons.Panel.!L0 = @[Common.ARS.0] +Entities.gmod_subway_ezh3.Buttons.Panel.!L40 = @[Common.ARS.40] +Entities.gmod_subway_ezh3.Buttons.Panel.!L60 = @[Common.ARS.60] +Entities.gmod_subway_ezh3.Buttons.Panel.!L70 = @[Common.ARS.70] +Entities.gmod_subway_ezh3.Buttons.Panel.!L80 = @[Common.ARS.80] + +Entities.gmod_subway_ezh3.Buttons.Panel.!LKT = @[Common.ARS.KT] +Entities.gmod_subway_ezh3.Buttons.Panel.!LSN = @[Common.ALL.SN] +Entities.gmod_subway_ezh3.Buttons.Panel.!LKVD = @[Common.ARS.VD] +Entities.gmod_subway_ezh3.Buttons.Panel.!LRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh3.Buttons.Panel.!LPU = @[Common.ALL.PU] +Entities.gmod_subway_ezh3.Buttons.Panel.!LSD = @[Common.703.SD] + +Entities.gmod_subway_ezh3.Buttons.Panel.!Speedometer = @[Common.ALL.Speedometer] +Entities.gmod_subway_ezh3.Buttons.Panel.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh3.Buttons.Panel.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh3.Buttons.Panel.!HighVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_ezh3.Buttons.Panel.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh3.Buttons.Panel.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +#gmod_subway_em508t +Entities.gmod_subway_em508t.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_em508t.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_em508t.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_em508t.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_em508t.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_em508t.Buttons.VU14.VU14Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_em508t.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_em508t.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_em508t.Buttons.Main.KU12Set = @[Common.ALL.KDL] +Entities.gmod_subway_em508t.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_em508t.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_em508t.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_em508t.Buttons.Main.V2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_em508t.Buttons.Main.V1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_em508t.Buttons.Main.V4Set = @[Common.703.LOn] +Entities.gmod_subway_em508t.Buttons.Main.V5Set = @[Common.703.LOff] +Entities.gmod_subway_em508t.Buttons.Main.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_em508t.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_em508t.Buttons.Main.V10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_em508t.Buttons.Main.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_em508t.Buttons.Main.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_em508t.Buttons.Main.!SD = @[Common.703.SD] + +Entities.gmod_subway_em508t.Buttons.HelperPanel.V6Set = @[Common.ALL.KDL] +Entities.gmod_subway_em508t.Buttons.HelperPanel.V3Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_em508t.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_em508t.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_em508t.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_em508t.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_em508t.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_em508t.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_em508t.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_em508t.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_em508t.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_em508t.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_em508t.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_em508t.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_em508t.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +#Spawner: +Entities.gmod_subway_81-702.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-702.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-702.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-702.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-702.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_81-702.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-702.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-702.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] + +Entities.gmod_subway_81-703.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-703.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-703.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-703.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-703.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_81-703.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-703.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-703.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] + +Entities.gmod_subway_ezh.Spawner.TrainType.Name = @[Spawner.707.Type] +Entities.gmod_subway_ezh.Spawner.TrainType.1 = @[Spawner.707.Type1] +Entities.gmod_subway_ezh.Spawner.TrainType.2 = @[Spawner.707.Type2] +Entities.gmod_subway_ezh.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_ezh.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_ezh.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_ezh.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_ezh.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_ezh.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_ezh.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_ezh.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_ezh.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_ezh.Spawner.EWagons.Name = @[Spawner.502.EWagons] + +Entities.gmod_subway_ezh3.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_ezh3.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_ezh3.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_ezh3.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_ezh3.Spawner.Announcer.1 = @[Spawner.710.RRI] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/fr_717.lua b/lua/metrostroi_data/languages/fr_717.lua new file mode 100644 index 0000000..4f9a9f4 --- /dev/null +++ b/lua/metrostroi_data/languages/fr_717.lua @@ -0,0 +1,1218 @@ +return [[ +#81-717 + +[fr] +#Cameras: +Train.717.Breakers = Freins automatiques +Train.717.VB = Batterie et RC +Train.717.VBD = VBD et UPPS + +Train.717.VRD = VRD +Train.717.SOSD = SOSD +Train.717.PUAV = PUAV +Train.717.PA = PA +Train.717.PAScreen = Ecran PA + +Train.714.Shunt = Panneau de contrôle en mannoeuvre, valve du conducteur +#Spawner +Spawner.717.Line2 = Train de MPL (ligne Moskovsko-Petrogradskaya) +Spawner.717.Line4 = Train de PBL (ligne Frunzensko-Primorskaya) +Spawner.717.Line5 = Train de FPL (ligne Pravoberezhnaya) + +Spawner.717.Type = Type de train +Spawner.717.BodyType = Type de carrosserie +Spawner.717.MVM = MVM +Spawner.717.LVZ = LVZ +Spawner.717.MaskType = Type de masque +Spawner.717.CranType = Type de valve de conducteur +Spawner.717.LampType = Type de lampes +Spawner.717.Lamp1 = LPV-02 +Spawner.717.Lamp2 = LLV-01 +Spawner.717.SeatType = Type de sièges +Spawner.717.ARS = Type de panneau ARS +Spawner.717.RingType = Type de bipper ARS +Spawner.717.BPSNType = Type de BPSN + +#######Buttons########### +Train.Buttons.RZP = BPSN converter protection engaged + +#Common +Common.717.VBD = Blocage des portes ASNP +Common.717.UPPS = Système UPPS +Common.717.BPSN = BPSN: Alimentation électrique du train +Common.717.ARS13V = ARS 13V: Vérification de la tension stabilisée de l'ARS +Common.717.Radio13V = Vérificateur de tension en radio stabilisée 13V +Common.717.LVD = LVD: Lampe de 1er câble (moteurs allumés) +Common.717.LHRK = LHRK: Lampe du 2ème câble (le RK tourne) +Common.717.LST = LST: Lampe du 6ème câble (frein) +Common.717.KVC = LKVC: Lampe de contacteur des circuits auxiliaires (la haute tension est indisponible) +Common.717.GLEB = GLEB: Indicateur de mise à jour +Common.717.KVP = LKVP: Contrôle de conversion de haute tension (BPSN) +Common.717.LSP = LSP: Urgence incendie +Common.717.LEKK = LEKK: Indicator de tableau électrique +Common.717.LPU = LPU: Indicateur de paramètre RUT réduit +Common.717.OtklBV = Désactiver l'action rapide (BV) +Common.717.OtklBVK = Couvercle de l'interrupteur d'action rapide +Common.717.ConverterProtection = Protection d'alimentation +Common.717.VZ1 = VZ1: Valve pneumatique â„–1 +Common.717.VL1 = Contrôle de la ventilation de non-inclusion +Common.717.V13 = Ventilation d'urgence +Common.717.V11 = 1er groupe de ventilation +Common.717.V12 = 2ème groupe de ventilation +Common.717.RZPL = RZP: Relai de protection d'alimentation +Common.717.VPAOn = VPA: Activer l'unité de train +Common.717.VPAOff = VPA: Désactiver l'unité de train +Common.717.VZD = VZD: Interrupteur de contrôle des portes (fermer les portes) + +Common.717.A53 = A53: Contacteur des circuits auxiliaires +Common.717.A56 = A56: Batterie +Common.717.A54 = A54: Contrôle du train +Common.717.A17 = A17: Portes, phares d'urgence blancs +Common.717.A44 = A44: Manette d'urgence, compresseur d'urgence, alimentation d'urgence ARS +Common.717.A39 = A39: Démarrage du train par manette d'urgence +Common.717.A70 = A70: Mode automatique RKTT +Common.717.A14 = A14: Relai de démarrage d'urgence +Common.717.A74 = A74: Redémarrer la protection du train +Common.717.A26 = A26: Amplificateur basse fréquence +Common.717.AR63 = AР63: Station radio +Common.717.AS1 = AС1: Interphone, ASNP +Common.717.A13 = A13: Etat des portes +Common.717.A21 = A21: Contrôle des portes +Common.717.A31 = A31: Ouverture des portes à gauche +Common.717.A32 = A32: Ouvertures des portes à droite +Common.717.A16 = A16: Fermeture des portes +Common.717.A12 = A12: Fermeture d'urgence des portes + +Common.717.A24 = A24: Contrôle de charge +Common.717.A49 = A49: Eclairage d'urgence +Common.717.A27 = A27: Eclairage du compartiment des passagers, éclairage cabine, signalisation de freinage, lampe RP verte +Common.717.A72 = A72: Synchroniseur valve pneumatique â„–1 +Common.717.A50 = A50: Contacteur d'éclairage +Common.717.AV3 = AÐ’3: Alimentation d'urgence de la ventilation +Common.717.AV3S = AÐ’3: rAlimentation de la station radio d'urgence +Common.717.AV2 = AÐ’2: Alimentation de la ventilation principale +Common.717.AV4 = AÐ’4: Contrôle du 1er groupe de ventilation +Common.717.AV5 = AÐ’5: Contrôle du 2ème groupe de ventilation +Common.717.AV6 = AÐ’6: Contrôle du groupe de ventilation d'urgence +Common.717.AV1 = AÐ’1: Contrôle de ventilation, signalisation de ventilation, ventilation cabine +Common.717.A29 = A29: Alimentation des phares +Common.717.A46 = A46: Feux de croisement (1er groupe) +Common.717.A47 = A47: Plein phares (2ème groupe) +Common.717.A71 = A71: Alimentation RV-3 par manette et ARS +Common.717.A7 = A7: Lumière rouge de droite +Common.717.A9 = A9: Lumière rouge de gauche + +Common.717.A84 = @[Common.ALL.VU] +Common.717.A8 = A8: Valve pneumatique â„–2 +Common.717.A52 = A52: Valve pneumatique par pédale de vigilance +Common.717.A19 = A19: Alimentation du RV-3 de voiture +Common.717.A48 = A48: Pédale de vigilance, RPB, alimentation principale ARS +Common.717.A10 = A10: Contrôle du compresseur +Common.717.A22 = A22: Contacteur du compresseur +Common.717.A30 = A30: Alimentation servomoteur de la manette rhéostat (SDRK) +Common.717.A1 = A1: Mode de conduite +Common.717.A2 = A2: Contrôle de la manette rhéostat +Common.717.A3 = A3: X-3 +Common.717.A4 = A4: Conduite en marche arrière +Common.717.A5 = A5: Conduite en marche avant +Common.717.A6 = A6: Frein +Common.717.A18 = A18: Redémarrage de la protection +Common.717.A73 = A73: Erreur de la signalisation +Common.717.A20 = A20: LK-2, LK-5 +Common.717.A25 = A25: Freinage manuel + +Common.717.A11 = A11: Compartiment d'équipement et éclairage cabine +Common.717.A37 = A37: Redémarrage du relai de protection d'alimentation +Common.717.A45 = A45: Contrôle BPSN +Common.717.A38 = A38: Lampe d'erreur de signalisation des circuits électriques de voiture +Common.717.A51 = A51: Contacteurs KPP et KVP +Common.717.A65 = A65: Convertisseur BPSN secondaire +Common.717.A66 = A66: Désactivateur BV +Common.717.A42 = A42: ARS 75V +Common.717.A43 = A43: ARS 12V +Common.717.A432 = A43: Contrôle EPK +Common.717.A41 = A41: Valve pneumatique â„–2 par ARS +Common.717.A40 = A40: Lampe de freinage +Common.717.A75 = A75: Radiateur cabine +Common.717.A76 = A76: Alarme incendie (ASOTP) +Common.717.A60 = A60: Moteurs allumés +Common.717.A58 = A58: KAH-1 +Common.717.A57 = A57: Lampe de rotation de la manette rhéostat +Common.717.A59 = A59: KAH-2 +Common.717.A28 = A28: Alimentation de l'unité de contrôle du régulateur thyristor +Common.717.A55 = A55: Synchroniseur de la manette rhéostat +Common.717.A68 = A68: Contrôle de la chaussure de contact +Common.717.A80 = A80: Activation BV +Common.717.A81 = A81: Contrôle BV + +Common.717.A58PU = A58: Alimentation PUAV +Common.717.A59PU = A59: Contrôle PUAV +Common.717.A61PU = A61: Contrôle de la clé de l'inverseur PUAV +Common.717.A58PA = A58: Alimentation PA +Common.717.A59PA = Ð59: @[Common.ALL.Unsused1] +Common.717.A61PA = A61: Contrôle de la clé de l'inverseur PA + +Common.717.A78 = A78: Contrôle des portes avant +Common.717.ABK = A-VK: Contrôle de la climatisation cabine + +Common.717.A81 = A81: Contrôle BV +Common.717.A23 = A23: Démarrage du compresseur +Common.717.A15 = A15: Eclairage d'urgence +Common.717.AIS = AIS: Disjoncteur du capteur de vitesse + +Common.717.RC2 = RC-2: Déconnecteur des circuits de la conduite automatique +Common.717.VAU = VAU: Système de conduite automatique + +Common.717.LampDV = DV: Mauvais fonctionnement du capteur de rotatiob +Common.717.ARSL20 = Limite de vitesse : 20 km/h +Common.717.ARSL40 = @[Common.ARS.40] +Common.717.ARSL60 = @[Common.ARS.60] +Common.717.ARSL70 = @[Common.ARS.70] +Common.717.ARSL80 = @[Common.ARS.80] + +Common.PUAV.K16 = LK16: Disponibilité de l'alimentation du 16ème câble (fermeture des portes) +Common.PUAV.OS = LOS: Mode de limitation de vitesse PUAV +Common.PUAV.AVT = LAVT: Mode de conduite automatique PUAV +Common.PUAV.RS = LRS: Mode de régulation de vitesse PUAV +Common.PUAV.KI1 = LKI1: 1er indicateur de mauvais fonctionnement de sous-catégorie PUAV +Common.PUAV.KI2 = LKI2: 2ème indicateur de mauvais fonctionnement de sous-catégorie PUAV +Common.717.KH = KH3: Activer le mode X-3 par système de conduite automatique +Common.717.KSZD = KSZD: Approuver la fermeture des portes +Common.717.VAV = @[Common.ALL.VAV] + +Common.717.PAM = PA-M +Common.717.PAKSDM = PA-KSD-M + +Common.PA.P = P +Common.PA.F = F +Common.PA.Up = Haut +Common.PA.M = M +Common.PA.Left = Gauche +Common.PA.Down = Bas +Common.PA.Right = Droite +Common.PA.Esc = Annuler +Common.PA.Enter = Entrer + +Common.714.Start = Démarrage des moteurs de traction +Common.714.RV = Interrupteur de direction + +#gmod_subway_81-717 +Entities.gmod_subway_81-717_mvm.Buttons.Battery_C.1:UOSToggle = @[Common.ALL.UOS] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_R.2:UOSToggle = @[Common.ALL.UOS] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_C.1:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_R.2:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_C.1:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_R.2:RC1Toggle = @[Common.ALL.RC1] + +Entities.gmod_subway_81-717_mvm.Buttons.VBD_C.1:VBDToggle = @[Common.717.VBD] +Entities.gmod_subway_81-717_mvm.Buttons.VBD_R.2:VBDToggle = @[Common.717.VBD] +Entities.gmod_subway_81-717_mvm.Buttons.VBD_C.1:UPPS_OnToggle = @[Common.717.UPPS] +Entities.gmod_subway_81-717_mvm.Buttons.VBD_R.2:UPPS_OnToggle = @[Common.717.UPPS] + +Entities.gmod_subway_81-717_mvm.Buttons.Block1.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.RezMKSet = @[Common.ALL.RMK] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.ARS13Set = @[Common.717.ARS13V] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARSOch = @[Common.ARS.04] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLSD1 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLSD2 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLHRK = @[Common.717.LHRK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampRP = @[Common.ALL.RP] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLSN = @[Common.ALL.SN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLN = @[Common.ARS.LN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLKVC = @[Common.717.KVC] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLRS = @[Common.ARS.RS] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLVD = @[Common.717.LVD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLST = @[Common.717.LST] + +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARSOch = @[Common.ARS.04] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLSD1 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLSD2 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLVD = @[Common.717.LVD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLHRK = @[Common.717.LHRK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLST = @[Common.717.LST] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampRP = @[Common.ALL.RP] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLSN = @[Common.ALL.SN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLKVC = @[Common.717.KVC] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLEKK = @[Common.717.GLEB] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLN = @[Common.ARS.LN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLRS = @[Common.ARS.RS] + +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LSD = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LOch = @[Common.ARS.0]\n@[Common.ARS.04] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LN = @[Common.ARS.LN]\n@[Common.ARS.40] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!60 = @[Common.ARS.60]\n@[Common.ARS.80] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!70 = @[Common.ARS.70]\n@[Common.717.LHRK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LEKK = @[Common.717.LEKK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LPU = @[Common.717.LPU] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LKVC = @[Common.717.KVC] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LVD = @[Common.717.LVD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LST = @[Common.717.LST] + +Entities.gmod_subway_81-717_mvm.Buttons.Block3.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-717_mvm.Buttons.Block3.!BCPressure = @[Common.ALL.BCPressure] + +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] + +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_UNchToggle = @[Common.ALL.UNCh] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_ZSToggle = @[Common.ALL.ES] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_RadioToggle = @[Common.ALL.R_Radio] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.1:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.1:KVTRSet = @[Common.ARS.KVTR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.2:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.2:KVTRSet = @[Common.ARS.KVTR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!L1Light = @[Common.717.VL1] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.V13Toggle = @[Common.717.V13] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VUD1Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!GreenRPLight = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!AVULight = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!LKVPLight = @[Common.717.KVP] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!SPLight = @[Common.717.LSP] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OtklBVSet = @[Common.717.OtklBV] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OtklBVKToggle = @[Common.717.OtklBVK] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.V11Toggle = @[Common.717.V11] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.V12Toggle = @[Common.717.V12] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ARSRToggle = @[Common.ALL.ARSR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ALSFreqToggle = @[Common.ARS.Freq] @[Common.ARS.FreqU] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.L_3Toggle = @[Common.ALL.PanelLights] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VPToggle = @[Common.ARS.VP] + +Entities.gmod_subway_81-717_mvm.Buttons.Block7.L_4Toggle = @[Common.ALL.VF] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.VADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KRPSet = @[Common.ALL.KRP] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KAHSet = @[Common.ALL.KAH] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KAHKToggle = @[Common.ALL.KAHK] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.!PNT = @[Common.ALL.BrT] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.!PNW = @[Common.ALL.BrW] + +Entities.gmod_subway_81-717_mvm.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-717_mvm.Buttons.HVMeters.!HighVoltage = @[Common.ALL.HighVoltage] + +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:R_Program2HSet = @[Common.ALL.Program2] + +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_C.SAB1Toggle = @[Common.BZOS.On] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_C.!VH1 = @[Common.BZOS.VH1] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_C.!VH2 = @[Common.BZOS.VH2] + +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_R.1:SAB1Toggle = @[Common.BZOS.On] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_R.1:!VH1 = @[Common.BZOS.VH1] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_R.1:!VH2 = @[Common.BZOS.VH2] + + +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_C.PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_C.PVK+ = @[Common.CabVent.PVK+] +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_R.1:PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_R.1:PVK+ = @[Common.CabVent.PVK+] + +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA23 = @[Common.IGLA.Button23] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA3Set = @[Common.IGLA.Button3] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA4Set = @[Common.IGLA.Button4] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.!IGLAFire = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA23 = @[Common.IGLA.Button23] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA3Set = @[Common.IGLA.Button3] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA4Set = @[Common.IGLA.Button4] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:!IGLAFire = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:!IGLAErr = @[Common.IGLA.IGLAErr] + +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A26Toggle = @[Common.717.A26] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AR63Toggle = @[Common.717.AR63] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AS1Toggle = @[Common.717.AS1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV3Toggle = @[Common.717.AV3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV2Toggle = @[Common.717.AV2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV4Toggle = @[Common.717.AV4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV5Toggle = @[Common.717.AV5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV6Toggle = @[Common.717.AV6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A9Toggle = @[Common.717.A9] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A43Toggle = @[Common.717.A43] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A76Toggle = @[Common.717.A76] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A60Toggle = @[Common.717.A60] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A58Toggle = @[Common.717.A58] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A59Toggle = @[Common.717.A59] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A26Toggle = @[Common.717.A26] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:AR63Toggle = @[Common.717.AR63] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:AS1Toggle = @[Common.717.AS1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A76Toggle = @[Common.717.A76] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A43Toggle = @[Common.717.A43] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A28Toggle = @[Common.717.A28] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AISToggle = @[Common.717.AIS] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A80Toggle = @[Common.717.A80] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV2Toggle = @[Common.717.AV2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV3Toggle = @[Common.717.AV3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV4Toggle = @[Common.717.AV4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV5Toggle = @[Common.717.AV5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV6Toggle = @[Common.717.AV6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A81Toggle = @[Common.717.A81] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A9Toggle = @[Common.717.A9] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A68Toggle = @[Common.717.A68] + +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-717_mvm.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-717_mvm.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle = @[Common.ALL.DriverValveDisconnect] +Entities.gmod_subway_81-717_mvm.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-717_mvm.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-717_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] + +Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-717_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_mvm.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-717_mvm.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-717_mvm.Buttons.OtsekDoor1.OtsekDoor1 = @[Common.ALL.OtsekDoor1] +Entities.gmod_subway_81-717_mvm.Buttons.OtsekDoor2.OtsekDoor2 = @[Common.ALL.OtsekDoor2] +Entities.gmod_subway_81-717_mvm.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_81-717_mvm.Buttons.EPVDisconnect.EPKToggle = @[Common.ALL.EPV] +Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] + + +#gmod_subway_81-717_lvz +#Buttons: +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:RC2Toggle = @[Common.717.RC2] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:RC2Toggle = @[Common.717.RC2] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:VAUToggle = @[Common.717.VAU] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:VAUToggle = @[Common.717.VAU] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:VRDToggle = @[Common.ARS.VRD] + +Entities.gmod_subway_81-717_lvz.Buttons.VRD_C.1:VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-717_lvz.Buttons.SOSD_C.1:VSOSDToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-717_lvz.Buttons.SOSD_R.2:VSOSDToggle = @[Common.ALL.VSOSD] + +Entities.gmod_subway_81-717_lvz.Buttons.Block1.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.ARS13Set = @[Common.717.ARS13V] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.Radio13Set = @[Common.717.Radio13V] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSOch = @[Common.ARS.N4] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLSD1 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLSD2 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLVD = @[Common.ALL.L1w] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLHRK = @[Common.ALL.L2w] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLST = @[Common.ALL.L6w] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLRD = @[Common.ARS.LRD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampRP = @[Common.ALL.RP] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLSN = @[Common.ALL.SN] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampDV = @[Common.717.LampDV] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!SpeedFact1 = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!SpeedFact2 = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL20 = @[Common.717.ARSL20] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL40 = @[Common.717.ARSL40] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL60 = @[Common.717.ARSL60] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL70 = @[Common.717.ARSL70] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL80 = @[Common.717.ARSL80] + +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!NMPressureLow2 = @[Commom.NMnUAVA.NMPressureLow] +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!UAVATriggered2 = @[Commom.NMnUAVA.UAVATriggered] + +Entities.gmod_subway_81-717_lvz.Buttons.USS1.!NMPressureLow = @[Commom.NMnUAVA.NMPressureLow] +Entities.gmod_subway_81-717_lvz.Buttons.USS1.!UAVATriggered = @[Commom.NMnUAVA.UAVATriggered] + +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OK16 = @[Common.PUAV.K16] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OLRS = @[Common.PUAV.RS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OKI1 = @[Common.PUAV.KI1] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OKI2 = @[Common.PUAV.KI2] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OOS = @[Common.PUAV.OS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OAVT = @[Common.PUAV.AVT] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:KHSet = @[Common.717.KH] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:KSZDSet = @[Common.717.KSZD] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:VAVToggle = @[Common.717.VAV] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:VZPToggle = @[Common.ALL.VZP] + +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!K16 = @[Common.PUAV.K16] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!OS = @[Common.PUAV.OS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!AVT = @[Common.PUAV.AVT] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!LRS = @[Common.PUAV.RS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!KI1 = @[Common.PUAV.KI1] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!KI2 = @[Common.PUAV.KI2] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARSOch = @[Common.ARS.N4] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.KHSet = @[Common.717.KH] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.KSZDSet = @[Common.717.KSZD] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.VAVToggle = @[Common.717.VAV] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.VZPToggle = @[Common.ALL.VZP] + +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMPSet = @[Common.717.PAM]: @[Common.PA.P] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMFSet = @[Common.717.PAM]: @[Common.PA.F] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMUpSet = @[Common.717.PAM]: @[Common.PA.Up] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMMSet = @[Common.717.PAM]: @[Common.PA.M] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMLeftSet = @[Common.717.PAM]: @[Common.PA.Left] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMDownSet = @[Common.717.PAM]: @[Common.PA.Down] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMRightSet = @[Common.717.PAM]: @[Common.PA.Right] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM1Set = @[Common.717.PAM]: 1 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM2Set = @[Common.717.PAM]: 2 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM3Set = @[Common.717.PAM]: 3 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM4Set = @[Common.717.PAM]: 4 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM5Set = @[Common.717.PAM]: 5 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM6Set = @[Common.717.PAM]: 6 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM7Set = @[Common.717.PAM]: 7 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM8Set = @[Common.717.PAM]: 8 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM9Set = @[Common.717.PAM]: 9 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMEscSet = @[Common.717.PAM]: @[Common.PA.Esc] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM0Set = @[Common.717.PAM]: 0 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMEnterSet = @[Common.717.PAM]: @[Common.PA.Enter] +Entities.gmod_subway_81-717_lvz.Buttons.PAM.2:KSZDSet = @[Common.717.KSZD] +Entities.gmod_subway_81-717_lvz.Buttons.PAM.2:VZPToggle = @[Common.ALL.VZP] + +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:R_UPOToggle = @[Common.ALL.UPO] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!OhSigLamp1 = @[Common.BZOS.Engaged] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:VUD1Toggle = @[Common.717.VZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!GreenRPLight1 = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!AVULight1 = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!LKVPLight1 = @[Common.717.KVP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!SPLight1 = @[Common.717.LSP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:L_3Toggle = @[Common.ALL.PanelLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:OhrSigToggle = @[Common.BZOS.On] + +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:R_UPOToggle = @[Common.ALL.UPO] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!OhSigLamp2 = @[Common.BZOS.Engaged] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VUD1Toggle = @[Common.717.VZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!KDLLight2 = @[Common.ALL.KDLL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!KDLRLight2 = @[Common.ALL.KDLL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!GreenRPLight2 = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!RZPLight2 = @[Common.717.RZPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!LKVPLight2 = @[Common.717.KVP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:OhrSigToggle = @[Common.BZOS.On] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VPAOnSet = @[Common.717.VPAOn] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VPAOffSet = @[Common.717.VPAOff] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!AVULight2 = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:L_3Toggle = @[Common.ALL.PanelLights] + +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!RZPLight1 = @[Common.717.RZPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:R_UPOToggle = @[Common.ALL.UPO] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!SPLight3 = @[Common.717.LSP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!AVULight3 = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:VUD1Toggle = @[Common.717.VZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!GreenRPLight3 = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!RZPLight3 = @[Common.717.RZPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!LKVPLight3 = @[Common.717.KVP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.1:VPAOnSet = @[Common.717.VPAOn] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.1:VPAOffSet = @[Common.717.VPAOff] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:OVTToggle = @[Common.ALL.VOVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:L_3Toggle = @[Common.ALL.PanelLights] + +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:L_4Toggle = @[Common.ALL.VF] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:VADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:KRPSet = @[Common.ALL.KRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:RezMKSet = @[Common.ALL.RMK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.!1:PNT = @[Common.ALL.BrT] + +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:L_4Toggle = @[Common.ALL.VF] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:VADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:KRPSet = @[Common.ALL.KRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:RezMKSet = @[Common.ALL.RMK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.!KDPLight2 = @[Common.ALL.KDPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.!2:PNT = @[Common.ALL.BrT] + +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_C.VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_C.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_C.VOPDSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_R.1:VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_R.1:VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_R.1:VOPDSet = @[Common.ALL.KDPH] + +Entities.gmod_subway_81-717_lvz.Buttons.CabVent_C.PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-717_lvz.Buttons.CabVent_C.PVK+ = @[Common.CabVent.PVK+] + +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_N.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_N.!HighVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_O.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_O.!HighVoltage = @[Common.ALL.HighVoltage] + +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A26Toggle = @[Common.717.A26] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AR63Toggle = @[Common.717.AR63] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AS1Toggle = @[Common.717.AS1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AISToggle = @[Common.717.AIS] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AV3Toggle = @[Common.717.AV3S] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A58Toggle = @[Common.717.A58PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A59Toggle = @[Common.717.A59PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A61Toggle = @[Common.717.A61PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:P:A58Toggle = @[Common.717.A58PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:P:A59Toggle = @[Common.717.A59PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:P:A61Toggle = @[Common.717.A61PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A9Toggle = @[Common.717.A9] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A06Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A43Toggle = @[Common.717.A432] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A76Toggle = @[Common.717.A76] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A60Toggle = @[Common.717.A60] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A58Toggle = @[Common.717.A58PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A59Toggle = @[Common.717.A59PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A61Toggle = @[Common.717.A61PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.P:A58Toggle = @[Common.717.A58PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.P:A59Toggle = @[Common.717.A59PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.P:A61Toggle = @[Common.717.A61PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A78Toggle = @[Common.717.A78]@[Common.ALL.Unsused2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.ABKToggle = @[Common.717.ABK]@[Common.ALL.Unsused2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A43Toggle = @[Common.717.A432] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A65Toggle = @[Common.717.A65] + +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A28Toggle = @[Common.717.A28] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.AISToggle = @[Common.717.AIS] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.AV3Toggle = @[Common.717.AV3S] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A60Toggle = @[Common.717.A60] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A9Toggle = @[Common.717.A9] + +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber3+ = @[Common.ALL.RouteNumber3+] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber3- = @[Common.ALL.RouteNumber3-] + +Entities.gmod_subway_81-717_lvz.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle = @[Common.ALL.DriverValveDisconnect] +Entities.gmod_subway_81-717_lvz.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-717_lvz.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-717_lvz.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-717_lvz.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-717_lvz.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] + +Entities.gmod_subway_81-717_lvz.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-717_lvz.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-717_lvz.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_lvz.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_lvz.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-717_lvz.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-717_lvz.Buttons.OtsekDoor1.OtsekDoor1 = @[Common.ALL.OtsekDoor1] +Entities.gmod_subway_81-717_lvz.Buttons.OtsekDoor2.OtsekDoor2 = @[Common.ALL.OtsekDoor2] +Entities.gmod_subway_81-717_lvz.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_81-717_lvz.Buttons.EPVDisconnect.EPKToggle = @[Common.ALL.EPV] +Entities.gmod_subway_81-717_lvz.Buttons.ParkingBrake.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] + +#gmod_subway_81-714_mvm +Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-714_mvm.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-714_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-714_mvm.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-714_mvm.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-714_mvm.Buttons.couch_cap_o.CouchCap = @[Common.ALL.CouchCap] +Entities.gmod_subway_81-714_mvm.Buttons.couch_cap.CouchCap = @[Common.ALL.CouchCap] + +Entities.gmod_subway_81-714_mvm.Buttons.Battery.VBToggle = @[Common.ALL.VB] + +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV2Toggle = @[Common.717.AV2] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV3Toggle = @[Common.717.AV3] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV4Toggle = @[Common.717.AV4] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV5Toggle = @[Common.717.AV5] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A81Toggle = @[Common.717.A81] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV6Toggle = @[Common.717.AV6] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A80Toggle = @[Common.717.A80] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A18Toggle = @[Common.717.A18] + +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A23Toggle = @[Common.717.A23] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-714_mvm.Buttons.VU.A84Toggle = @[Common.ALL.VU] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.!RZPLight = @[Common.717.RZPL] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.OtklBVSet = @[Common.717.OtklBV] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.StartSet = @[Common.714.Start] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.RV- = @[Common.714.RV] @[Common.ALL.CCW] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.RV+ = @[Common.714.RV] @[Common.ALL.CW] +Entities.gmod_subway_81-714_mvm.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-714_mvm.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-714_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] + +Entities.gmod_subway_81-714_mvm.Buttons.Voltages.!BatteryVoltage = @[Common.ALL.BatteryVoltage] #NEW +Entities.gmod_subway_81-714_mvm.Buttons.Voltages.!BatteryCurrent = @[Common.ALL.BatteryCurrent] #NEW +Entities.gmod_subway_81-714_mvm.Buttons.Pressures.!BCPressure = @[Common.ALL.BLTLPressure] #NEW +Entities.gmod_subway_81-714_mvm.Buttons.Pressures.!BLTLPressure = @[Common.ALL.BCPressure] #NEW + +#gmod_subway_81-714_lvz +Entities.gmod_subway_81-714_lvz.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-714_lvz.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-714_lvz.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-714_lvz.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-714_lvz.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-714_lvz.Buttons.couch_cap_o.CouchCap = @[Common.ALL.CouchCap] +Entities.gmod_subway_81-714_lvz.Buttons.couch_cap.CouchCap = @[Common.ALL.CouchCap] + +Entities.gmod_subway_81-714_lvz.Buttons.Battery.VBToggle = @[Common.ALL.VB] + +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A81Toggle = @[Common.717.A81] +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A80Toggle = @[Common.717.A80] +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A18Toggle = @[Common.717.A18] + +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A23Toggle = @[Common.717.A23] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-714_lvz.Buttons.VU.A84Toggle = @[Common.ALL.VU] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.!RZPLight = @[Common.717.RZPL] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.StartSet = @[Common.714.Start] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.RV- = @[Common.714.RV] @[Common.ALL.CCW] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.RV+ = @[Common.714.RV] @[Common.ALL.CW] +Entities.gmod_subway_81-714_lvz.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-714_lvz.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-714_lvz.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] + +Entities.gmod_subway_81-714_lvz.Buttons.Voltages.!BatteryVoltage = @[Common.ALL.BatteryVoltage] #NEW +Entities.gmod_subway_81-714_lvz.Buttons.Voltages.!BatteryCurrent = @[Common.ALL.BatteryCurrent] #NEW +Entities.gmod_subway_81-714_lvz.Buttons.Pressures.!BCPressure = @[Common.ALL.BLTLPressure] #NEW +Entities.gmod_subway_81-714_lvz.Buttons.Pressures.!BLTLPressure = @[Common.ALL.BCPressure] #NEW + +#Spawner: +Entities.gmod_subway_81-717_mvm.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-717_mvm.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] + + +Entities.gmod_subway_81-717_mvm_custom.Spawner.Type.Name = @[Spawner.717.Type] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BodyType.Name = @[Spawner.717.BodyType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BodyType.1 = @[Spawner.717.MVM] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BodyType.2 = @[Spawner.717.LVZ] +Entities.gmod_subway_81-717_mvm_custom.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-717_mvm_custom.Spawner.MaskType.Name = @[Spawner.717.MaskType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.Cran.Name = @[Spawner.717.CranType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.Name = @[Spawner.717.LampType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.2 = @[Spawner.717.Lamp1] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.3 = @[Spawner.717.Lamp2] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.Name = @[Spawner.717.SeatType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.2 = @[Common.Spawner.Old] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.3 = @[Common.Spawner.New] +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.Name = @[Spawner.717.ARS] +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.2 = @[Common.Spawner.Type] 1 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.3 = @[Common.Spawner.Type] 2 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.4 = @[Common.Spawner.Type] 3 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.5 = @[Common.Spawner.Type] 4 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.6 = @[Common.Spawner.Type] 5 +Entities.gmod_subway_81-717_mvm_custom.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-717_mvm_custom.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-717_mvm_custom.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.Name = @[Spawner.717.RingType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.2 = @[Common.Spawner.Type] 1 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.3 = @[Common.Spawner.Type] 2 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.4 = @[Common.Spawner.Type] 3 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.5 = @[Common.Spawner.Type] 4 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.6 = @[Common.Spawner.Type] 5 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.7 = @[Common.Spawner.Type] 6 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.8 = @[Common.Spawner.Type] 7 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.9 = @[Common.Spawner.Type] 8 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.Name = @[Spawner.717.BPSNType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.2 = @[Common.Spawner.Type] 1 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.3 = @[Common.Spawner.Type] 2 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.4 = @[Common.Spawner.Type] 3 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.5 = @[Common.Spawner.Type] 4 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.6 = @[Common.Spawner.Type] 5 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.7 = @[Common.Spawner.Type] 6 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.8 = @[Common.Spawner.Type] 7 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.9 = @[Common.Spawner.Type] 8 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.10 = @[Common.Spawner.Type] 9 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.11 = @[Common.Spawner.Type] 10 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.12 = @[Common.Spawner.Type] 11 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.13 = @[Common.Spawner.Type] 12 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.14 = @[Common.Spawner.Type] 13 +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] + +#Spawner: +Entities.gmod_subway_81-717_lvz.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-717_lvz.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-717_lvz.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-717_lvz.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-717_lvz.Spawner.Type.Name = @[Spawner.Common.EType] +Entities.gmod_subway_81-717_lvz.Spawner.Type.1 = @[Spawner.717.Line2] +Entities.gmod_subway_81-717_lvz.Spawner.Type.2 = @[Spawner.717.Line4] +Entities.gmod_subway_81-717_lvz.Spawner.Type.3 = @[Spawner.717.Line5] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] diff --git a/lua/metrostroi_data/languages/fr_718.lua b/lua/metrostroi_data/languages/fr_718.lua new file mode 100644 index 0000000..136f161 --- /dev/null +++ b/lua/metrostroi_data/languages/fr_718.lua @@ -0,0 +1,708 @@ +return [[ +#81-718 + +[fr] + +#######Buttons########### +#Cameras +Train.718.BUP = BUP +Train.718.PPZ = PPZ +Train.718.VPU = VPU + +Train.Buttons.LHalf = Dim #NEW (panel lighting) +Train.Buttons.LFull = Bright #NEW (panel lighting) +Train.Buttons.HL5 = Control circuits are not engaged #NEW +Train.Buttons.HL6 = Protection has tripped or low current #NEW +Train.Buttons.HL7 = BBE protection has tripped #NEW +#Common +Common.718.SB4 = Vérifier l'assemblage des circuits +Common.718.SB5 = Transfère des contrôles (bip) +Common.718.SB7K = Couverture du mode de marche en manÅ“uvre +Common.718.SB7 = Mode de marche en manÅ“uvre +Common.718.SB12 = Activer les unités d'interrupteurs automatiques +Common.718.SB13 = Désactiver les unités d'interrupteurs automatiques +Common.718.SB15 = Activer l'alimentation du train +Common.718.SB16 = Désactiver l'alimentation du train + +Common.718.VTPR = Interrupteur de relâchement des collecteurs de courant +Common.718.RX1 = Conduite d'urgence 1 +Common.718.KAH2 = KAH: Bouton de conduite d'urgence pour conduire avec/sans ARS en mode de conduite d'urgence +Common.718.RX2 = Conduite d'urgence 2 + +Common.718.SPULightStrength = Indicateur de luminosité du panneau de commande + +Common.718.Heat = Chauffage cabine +Common.718.SBP22 = Test d'assemblage des circuits +Common.718.KDPR = Ouverture d'urgence des portes de droite +Common.718.KDLR = Ouverture d'urgence des portes de gauche +Common.718.UOS = UOS: Appareil de limitation de vitesse (conduite avec/sans EPV/EPK) + +Common.718.KES = KES: Le contrôle des communications d'urgence est activé +Common.718.CUV = CUV: Indicateur de non-inclusion de voiture CUV +Common.718.AIP = AIP: Avertisseur d'urgence incendie (incendie) +Common.718.RIP = RIP: Mode réserve d'urgence incendie +Common.718.VS1 = VS1: Le 1er groupe de ventilation est désactivé +Common.718.VS2 = VS2: Le 2ème groupe de ventilation est désactivé + +#Autobreakers +Common.718.SF51 = SF51: Alimentation principale ARS +Common.718.SF52 = SF52: Alimentation d'urgence ARS +Common.718.SF53 = SF53: Circuits de freinage ARS +Common.718.SF60 = SF60: 12V ARS +Common.718.SF61 = SF61: 50V ARS(FMM1) +Common.718.SF77 = SF77: Conduite d'urgence du contrôle principal +Common.718.SF78 = SF78: Conduite d'urgence du contrôle d'urgence +Common.718.SF40 = SF40: Valve pneumatique â„–2 du ZPT +Common.718.SF41 = SF41: Phares +Common.718.SF8 = SF8: Contrôle des portes +Common.718.SF11 = SF11: Contrôle du 2ème groupe de ventilateurs +Common.718.SF10 = SF10: Contrôle du 1er groupe de ventilateurs +Common.718.SF7 = SF7: BBE, compresseur +Common.718.SF50 = SF50: Indicateur de vitesse +Common.718.SF76 = SF76: Alarme incendie +Common.718.SF73 = SF73: Lubrification de boudin +Common.718.SF3 = SF3: Alimentation de voiture, CUV +Common.718.SF71 = SF71: Interphone d'urgence +Common.718.SF63 = SF63: Station de radio +Common.718.SF54 = SF54: Annonceur 50A +Common.718.SF65 = SF65: Ventilation de cabine +Common.718.SF55 = SF55: SOT-3 +Common.718.SF9 = SF9: Contrôle d'urgence du train +Common.718.SF6 = SF6: Contrôle principal du train +Common.718.SF5 = SF5: Contrôle BKCU +Common.718.SF2 = SF2: Alimentation du train +Common.718.SF4 = SF4: Alimentation BUV, PTTI, BCKA +Common.718.SF27 = SF27: Alimentation BVA +Common.718.SF46 = SF46: Contrôle du BVA +Common.718.SF12 = SF12: Activation du BBE +Common.718.SF13 = SF13: Désactivation du BBE +Common.718.SF45 = SF45: BBE, Contrôle du contacteur d'éclairage +Common.718.SF16 = SF16: Contrôle de l'éclairage du compartiment passager +Common.718.SF44 = SF44: Alimentation de l'éclairage du compartiment passager +Common.718.SF43 = SF43: Eclairage d'urgence du compartiment passager +Common.718.SF14 = SF14: Alimentation du contacteur de contrôle des circuits +Common.718.SF15 = SF15: Alimentation d'urgence du contacteur de contrôle des circuits +Common.718.SF25 = SF25: Contrôle du relâchement des collecteurs de courant +Common.718.SF72 = SF72: Parking brake indicator +Common.718.SF56 = SF56: Contrôle du compresseur +Common.718.SF29 = SF29: Valve pneumatique â„–1 +Common.718.SF26 = SF26: Valve pneumatique â„–2 +Common.718.SF42 = SF42: Sous-excitateur +Common.718.SF18 = SF18: Ouverture des portes à gauche +Common.718.SF20 = SF20: Ouverture des portes à droite +Common.718.SF17 = SF17: Fermeture des portes +Common.718.SF19 = SF19: Fermeture d'urgence des portes +Common.718.SF21 = SF21: Contrôle du compresseur principal +Common.718.SF22 = SF22: Contrôle du compresseur d'urgence +Common.718.SF34 = SF34: Alimentation du 1er groupe de ventilation +Common.718.SF35 = SF35: Alimentation du 2ème groupe de ventilation +Common.718.SF23 = SF23: Contacteur du 1er groupe de ventilation +Common.718.SF24 = SF24: Contacteur du 2ème groupe de ventilation + +#Names +Common.718.MVSU = BUP MVSU +Common.718.MLUP = BUP MLUP +Common.718.MUVS1 = BUP MUVS1 +Common.718.MUVS2 = BUP MUVS2 +Common.718.MP = BUP MP +Common.718.MS = BUP MS + +#A lot of indicators +Common.718.MVSUARSX = @[Common.718.MVSU]: Permission du mode de conduite par BKBD +Common.718.MVSUARST = @[Common.718.MVSU]: Mode de freinage par BKBD +Common.718.MVSUARSX3 = @[Common.718.MVSU]: Mode X3 par unité d'opération automatique du train +Common.718.MVSUARSX2 = @[Common.718.MVSU]: Mode X2 par unité d'opération automatique du train +Common.718.MVSUARSX1 = @[Common.718.MVSU]: Mode X1 par unité d'opération automatique du train +Common.718.MVSUARS0 = @[Common.718.MVSU]: Mode 0 par unité d'opération automatique du train +Common.718.MVSUARST1 = @[Common.718.MVSU]: Mode T1 par unité d'opération automatique du train +Common.718.MVSUARST2 = @[Common.718.MVSU]: Mode T2 par unité d'opération automatique du train +Common.718.MVSUARST3 = @[Common.718.MVSU]: Mode T3 par unité d'opération automatique du train +Common.718.MVSUKVX3 = @[Common.718.MVSU]: Mode X3 par manette +Common.718.MVSUKVX2 = @[Common.718.MVSU]: Mode X2 par manette +Common.718.MVSUKVX1 = @[Common.718.MVSU]: Mode X1 par manette +Common.718.MVSUKV0 = @[Common.718.MVSU]: Mode 0 par manette +Common.718.MVSUKVT1 = @[Common.718.MVSU]: Mode T1 par manette +Common.718.MVSUKVT2 = @[Common.718.MVSU]: Mode T2 par manette +Common.718.MVSUKVT3 = @[Common.718.MVSU]: Mode T3 par manette +Common.718.MVSUKDV = @[Common.718.MVSU]: Contrôle de l'état des portes +Common.718.MVSUBDV = @[Common.718.MVSU]: Mode de blocage du contrôle des portes +Common.718.MVSUPB = @[Common.718.MVSU]: Le PB ou l'ARS sont activés +Common.718.MVSUARS = @[Common.718.MVSU]: Le PB ou l'ARS sont désactivés +Common.718.MVSUAVT = @[Common.718.MVSU]: Freinage d'urgence par BKBD +Common.718.MVSUKVV = @[Common.718.MVSU]: Mode d'entrée "Marche avant" +Common.718.MVSUKVN = @[Common.718.MVSU]: Mode d'entrée "Marche arrière" +Common.718.MVSUPVU = @[Common.718.MVSU]: Non-assemblage des circuits par PVU (UAVA) +Common.718.MVSURPB = @[Common.718.MVSU]: Non-assemblage des circuits par relai de pédale d'attention +Common.718.MVSUROT = @[Common.718.MVSU]: Non-assemblage des circuits par relai de désactivateur de traction (ARS) +Common.718.MVSUSOT = @[Common.718.MVSU]: Non-assemblage des circuits par signaleur de frein (EPV) +Common.718.MLUPVP = @[Common.718.MLUP]: Mode "Marche avant" +Common.718.MLUPNZ = @[Common.718.MLUP]: Mode "Marche arrière" +Common.718.MLUPBUP = @[Common.718.MLUP]: Blocage BUP +Common.718.MLUPV0 = @[Common.718.MLUP]: Vitesse zéro (Valve pneumatique â„–1) +Common.718.MLUPKU = @[Common.718.MLUP]: Malfonction de la manette +Common.718.MLUPBAV = @[Common.718.MLUP]: Malfonction de l'unité d'opération automatique du train +Common.718.MLUPKR = @[Common.718.MLUP]: Malfonction de la manette d'inverseur +Common.718.MLUPARS = @[Common.718.MLUP]: Malfonction de l'ARS +Common.718.MUVS1VP = @[Common.718.MUVS1]: Mode de sortie "Marche avant" +Common.718.MUVS1NZ = @[Common.718.MUVS1]: Mode de sortie "Marche arrière" +Common.718.MUVS1X = @[Common.718.MUVS1]: Mode de sortie "Conduire" +Common.718.MUVS1T = @[Common.718.MUVS1]: Mode de sortie "Freiner" +Common.718.MUVS1U1 = @[Common.718.MUVS1]: Mode de sortie "Point de consigne actuel 1" +Common.718.MUVS1U2 = @[Common.718.MUVS1]: Mode de sortie "Point de consigne actuel 2" +Common.718.MUVS1BAV = @[Common.718.MUVS1]: Mode de sortie blocage du BAV +Common.718.MUVS1BUP = @[Common.718.MUVS1]: Mode de sortie blocage du BUV +Common.718.MUVS20 = @[Common.718.MUVS2]: Mode de sortie "Epuisement" +Common.718.MUVS2ZPT = @[Common.718.MUVS2]: Valve pneumatique â„–2 +Common.718.MPMP = @[Common.718.MP]: Opération normale +Common.718.MSMS = @[Common.718.MS]: Opération normale + +Common.718.MPS = BUV MPS +Common.718.MALP1 = BUV MALP1 +Common.718.MVD = BUV MVD +Common.718.MALP2 = BUV MALP2 +Common.718.MGR = BUV MGR +Common.718.MLU = BUV MLU +Common.718.MUVK = BUV MUVK +Common.718.MIV = BUV MIV +Common.718.MUVK2 = BUV MUVK2 +Common.718.MPSPROV = @[Common.718.MPS]: "Vérification d'opération" +Common.718.MPSAVR = @[Common.718.MPS]: "Les modes de conduite/freinage sont désactivés par l'AVT" +Common.718.MPSTARS = @[Common.718.MPS]: "Frein BKBD ARS" +Common.718.MPSX = @[Common.718.MPS]: "Signal du mode de conduite" +Common.718.MPSNZ = @[Common.718.MPS]: "Marche arrière" +Common.718.MPSNZR = @[Common.718.MPS]: "Marche avant d'urgence" +Common.718.MPSVPR = @[Common.718.MPS]: "Marche arrière d'urgence" +Common.718.MPSPROV0 = @[Common.718.MPS]: "Vérification d'opération" +Common.718.MPSSK = @[Common.718.MPS]: "Vitesse" #IDK what is this, no info (@Gleb) +Common.718.MPST = @[Common.718.MPS]: "Brake mode signal" +Common.718.MPSXR = @[Common.718.MPS]: "Conduite d'urgence 1" +Common.718.MPSU1 = @[Common.718.MPS]: "Point de consigne actuel 1" +Common.718.MPSU2 = @[Common.718.MPS]: "Point de consigne actuel 2" +Common.718.MPSVP = @[Common.718.MPS]: "Marche avant" +Common.718.MPSVZ = @[Common.718.MPS]: "Réinitialisation de la protection" +Common.718.MPSXM = @[Common.718.MPS]: "@[Common.718.SB7]" +Common.718.MPSU1R = @[Common.718.MPS]: "Conduite d'urgence 2" + +Common.718.MALP1MZK = @[Common.718.MALP1]: Blocage de porte thyristor instantané +Common.718.MALP1FM = @[Common.718.MALP1]: Surtension de la protection de surtension (supérieur à 1000V) +Common.718.MALP1400 = @[Common.718.MALP1]: 400V par troisième rail disponible +Common.718.MALP150 = @[Common.718.MALP1]: Disponibilité du courant du 1er groupe d'armature +Common.718.MALP1DIF = @[Common.718.MALP1]: Différence du courant des 1ers et 2nds groupes +Common.718.MALP1650 = @[Common.718.MALP1]: Le courant 1er groupe d'armature est supérieure à 650A +Common.718.MALP10 = @[Common.718.MALP1]: Pas de courant du 1er groupe d'armature +Common.718.MALP1ARS = @[Common.718.MALP1]: Echec du démarrage de fréquence +Common.718.MALP1ITA = @[Common.718.MALP1]: Rupture de thyristor du 1er groupe de frein > 100A +Common.718.MALP1TR = @[Common.718.MALP1]: Courant du rhéostat > 100A dans le premier groupe +Common.718.MALP1SN = @[Common.718.MALP1]: Les circuits de courant ne sont pas assemblés +Common.718.MALP1VN = @[Common.718.MALP1]: Malfonction des ventilateurs + + +Common.718.MVDOTK = @[Common.718.MVD]: Malfonction des modes de conduite/freinage +Common.718.MVDRP = @[Common.718.MVD]: Actionnement du RP + +Common.718.MALP2MSU = @[Common.718.MALP1]: Réinitialisation instantanée du point de consigne actuel +Common.718.MALP2800 = @[Common.718.MALP1]: 800V par troisième rail disponible +Common.718.MALP2975 = @[Common.718.MALP1]: Tension maximale par troisième rail +Common.718.MALP250 = @[Common.718.MALP1]: Disponibilité du courant du 2ème groupe d'armature +Common.718.MALP2650 = @[Common.718.MALP1]: Le courant 2ème groupe d'armature est supérieure à 650A +Common.718.MALP20 = @[Common.718.MALP1]: Pas de courant du 2ème groupe d'armature +Common.718.MALP2BV = @[Common.718.MALP1]: Actionnement du BV +Common.718.MALP2ITB = @[Common.718.MALP1]: Rupture de thyristor du 2ème groupe de frein > 100A + +Common.718.MGRTP1 = @[Common.718.MGR]: Pressage du 1er collecteur de courant +Common.718.MGRTP3 = @[Common.718.MGR]: Pressage du 3ème collecteur de courant +Common.718.MGRKHA = @[Common.718.MGR]: Le 1er groupe de contacteurs de conduite est activé +Common.718.MGRKTA = @[Common.718.MGR]: Le 1er groupe de contacteurs de frein est activé +Common.718.MGRTP2 = @[Common.718.MGR]: Pressage du 2ème collecteur de courant +Common.718.MGRTP4 = @[Common.718.MGR]: Pressage du 4ème collecteur de courant +Common.718.MGRKHB = @[Common.718.MGR]: Le 2ème groupe de contacteurs de conduite est activé +Common.718.MGRKTB = @[Common.718.MGR]: Le 2ème groupe de contacteurs de frein est activé +Common.718.MGRKRV = @[Common.718.MGR]: Les contacteurs d'inversion marche avant sont activés #reverse switched to forward +Common.718.MGRNV = @[Common.718.MGR]: Malfonction du ventilateur PTTI +Common.718.MGRBV = @[Common.718.MGR]: BV armé +Common.718.MGRLK = @[Common.718.MGR]: Le contacteur de ligne est activé +Common.718.MGRKRN = @[Common.718.MGR]: Les contacteurs d'inversion marche arrière sont activés #reverse switched to backward + +Common.718.MLUAKT = @[Common.718.MLU]: Commande de freinage +Common.718.MLUAXH = @[Common.718.MLU]: Commande de conduite +Common.718.MLUAVP = @[Common.718.MLU]: Activer l'inversion vers la commande marche avant +Common.718.MLUANZ = @[Common.718.MLU]: Activer l'inversion vers la commande marche arrière +Common.718.MLUASS = @[Common.718.MLU]: Le circuit est assemblé +Common.718.MLUAPV = @[Common.718.MLU]: Activer la commande de sous-excitant +Common.718.MLUALK = @[Common.718.MLU]: Activer la commande du contacteur de ligne + +Common.718.MUVK1V1 = @[Common.718.MUVK]: Contrôle de bobine de la valve pneumatique â„–1 +Common.718.MUVK1KT = @[Common.718.MUVK]: Contrôle du contacteur de freinage +Common.718.MUVK1KH = @[Common.718.MUVK]: Contrôle du contacteur de conduite +Common.718.MUVK1LK = @[Common.718.MUVK]: Contrôle du contacteur de ligne +Common.718.MUVK1PV = @[Common.718.MUVK]: Contrôle du sous-excitant +Common.718.MUVK1NZ = @[Common.718.MUVK]: Contrôle d'inversion marche arrière +Common.718.MUVK1SN = @[Common.718.MUVK]: Le circuit d'alimentation de voiture n'est pas assemblé + +Common.718.MIV33 = @[Common.718.MIV]: Le démarrage de fréquence n'est pas terminé +Common.718.MIVV1 = @[Common.718.MIV]: Valve pneumatique â„–1 +Common.718.MIVSMA = @[Common.718.MIV]: Signal du courant maximal du 1er groupe de point de consigne +Common.718.MIVSMB = @[Common.718.MIV]: Signal du courant maximal du 2ème groupe de point de consigne + +Common.718.MUVK2RTM = @[Common.718.MUVK2]: Contrôle du relai de courant maximal +Common.718.MUVK2RKT = @[Common.718.MUVK2]: Contrôle du relai de contrôle de frein +Common.718.MUVK2RP = @[Common.718.MUVK2]: Actionnement de protection +Common.718.MUVK2OTK = @[Common.718.MUVK2]: Malfonction de voiture +Common.718.MUVK275 = @[Common.718.MUVK2]: Alimentation d'urgence BUV +Common.718.MUVK2VP = @[Common.718.MUVK2]: Contrôle d'inversion en marche avant + + +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF51Toggle = @[Common.718.SF51] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF52Toggle = @[Common.718.SF52] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF53Toggle = @[Common.718.SF53] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF60Toggle = @[Common.718.SF60] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF61Toggle = @[Common.718.SF61] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF77Toggle = @[Common.718.SF77] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF78Toggle = @[Common.718.SF78] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF40Toggle = @[Common.718.SF40] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF41Toggle = @[Common.718.SF41] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF8Toggle = @[Common.718.SF8] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF11Toggle = @[Common.718.SF11] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF10Toggle = @[Common.718.SF10] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF7Toggle = @[Common.718.SF7] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF50Toggle = @[Common.718.SF50] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF76Toggle = @[Common.718.SF76] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF73Toggle = @[Common.718.SF73] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF3Toggle = @[Common.718.SF3] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF71Toggle = @[Common.718.SF71] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF63Toggle = @[Common.718.SF63] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF54Toggle = @[Common.718.SF54] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF65Toggle = @[Common.718.SF65] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF55Toggle = @[Common.718.SF55] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF9Toggle = @[Common.718.SF9] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF6Toggle = @[Common.718.SF6] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF5Toggle = @[Common.718.SF5] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF2Toggle = @[Common.718.SF2] + +Entities.gmod_subway_81-718.Buttons.Main.SA5Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-718.Buttons.Main.SB3Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-718.Buttons.Main.SA7Toggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-718.Buttons.Main.SB1Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-718.Buttons.Main.SB2Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-718.Buttons.Main.SA8Toggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-718.Buttons.Main.SB4Set = @[Common.718.SB4] +Entities.gmod_subway_81-718.Buttons.Main.SB5Set = @[Common.718.SB5] +Entities.gmod_subway_81-718.Buttons.Main.SA9Toggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-718.Buttons.Main.SA13Toggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-718.Buttons.Main.SA14Toggle = @[Common.ALL.ARSR] +Entities.gmod_subway_81-718.Buttons.Main.SA15Toggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-718.Buttons.Main.SA2Toggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-718.Buttons.Main.SB6KToggle = @[Common.ALL.KAHK] +Entities.gmod_subway_81-718.Buttons.Main.SB6Set = @[Common.ALL.KAH] +Entities.gmod_subway_81-718.Buttons.Main.SB7KToggle = @[Common.718.SB7K] +Entities.gmod_subway_81-718.Buttons.Main.SB7Set = @[Common.718.SB7] +Entities.gmod_subway_81-718.Buttons.Main.SB8Set = @[Common.ARS.KVTR] +Entities.gmod_subway_81-718.Buttons.Main.SB10Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-718.Buttons.Main.SB9Set = @[Common.ARS.KVT] +Entities.gmod_subway_81-718.Buttons.Main.SB11Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-718.Buttons.Main.SA16Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-718.Buttons.Main.SB12Set = @[Common.718.SB12] +Entities.gmod_subway_81-718.Buttons.Main.SB13Set = @[Common.718.SB13] +Entities.gmod_subway_81-718.Buttons.Main.SB14Set = @[Common.ALL.RMK] +Entities.gmod_subway_81-718.Buttons.Main.SB15Set = @[Common.718.SB15] +Entities.gmod_subway_81-718.Buttons.Main.SB16Set = @[Common.718.SB16] + + +Entities.gmod_subway_81-718.Buttons.Battery.RCToggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-718.Buttons.Battery.VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-718.Buttons.Battery.VTPR- = @[Common.718.VTPR] @[Common.ALL.CCW] +Entities.gmod_subway_81-718.Buttons.Battery.VTPR+ = @[Common.718.VTPR] @[Common.ALL.CW] + + +Entities.gmod_subway_81-718.Buttons.KR.SBR14Set = @[Common.718.RX1] +Entities.gmod_subway_81-718.Buttons.KR.SBR16Set = @[Common.718.KAH2] +Entities.gmod_subway_81-718.Buttons.KR.SBR15Set = @[Common.718.RX2] + + +Entities.gmod_subway_81-718.Buttons.VPU.SAP8Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-718.Buttons.VPU.SAP13Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-718.Buttons.VPU.SAP36Toggle = @[Common.ALL.ES] +Entities.gmod_subway_81-718.Buttons.VPU.SAP12Toggle = @[Common.720.AppLights] +Entities.gmod_subway_81-718.Buttons.VPU.SAP11Toggle = @[Common.718.Heat] +Entities.gmod_subway_81-718.Buttons.VPU.SAP23Toggle = @[Common.ARS.VP] +Entities.gmod_subway_81-718.Buttons.VPU.SAP9Toggle = @[Common.720.Vent1] +Entities.gmod_subway_81-718.Buttons.VPU.SAP10Toggle = @[Common.720.Vent2] +Entities.gmod_subway_81-718.Buttons.VPU.SAP3Toggle = @[Common.ALL.UNCh] +Entities.gmod_subway_81-718.Buttons.VPU.SAP39Toggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-718.Buttons.VPU.SBP22Set = @[Common.718.SBP22] +Entities.gmod_subway_81-718.Buttons.VPU.SBP6Set = @[Common.718.KDPR] +Entities.gmod_subway_81-718.Buttons.VPU.SBP4Set = @[Common.718.KDLR] +Entities.gmod_subway_81-718.Buttons.VPU.SAP14Toggle = @[Common.ARS.Freq] @[Common.ARS.FreqU] +Entities.gmod_subway_81-718.Buttons.VPU.SAP26Toggle = @[Common.718.UOS] +Entities.gmod_subway_81-718.Buttons.VPU.SAP24Toggle = @[Common.ALL.VOVT] + +Entities.gmod_subway_81-718.Buttons.ARS.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-718.Buttons.ARS.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-718.Buttons.ARS.!SD = @[Common.ALL.LSD] +Entities.gmod_subway_81-718.Buttons.ARS.!KT = @[Common.ARS.KT] +Entities.gmod_subway_81-718.Buttons.ARS.!RS = @[Common.ARS.RS] +Entities.gmod_subway_81-718.Buttons.ARS.!SK = @[Common.ARS.LN] +Entities.gmod_subway_81-718.Buttons.ARS.!04 = @[Common.ARS.04] +Entities.gmod_subway_81-718.Buttons.ARS.!0 = @[Common.ARS.0] +Entities.gmod_subway_81-718.Buttons.ARS.!40 = @[Common.ARS.40] +Entities.gmod_subway_81-718.Buttons.ARS.!60 = @[Common.ARS.60] +Entities.gmod_subway_81-718.Buttons.ARS.!70 = @[Common.ARS.70] +Entities.gmod_subway_81-718.Buttons.ARS.!80 = @[Common.ARS.80] +Entities.gmod_subway_81-718.Buttons.ARS.!KES = @[Common.718.KES] +Entities.gmod_subway_81-718.Buttons.ARS.!ST = @[Common.ALL.BrT] +Entities.gmod_subway_81-718.Buttons.ARS.!CUV = @[Common.718.CUV] +Entities.gmod_subway_81-718.Buttons.ARS.!AVU = @[Common.ALL.LAVU] +Entities.gmod_subway_81-718.Buttons.ARS.!AIP = @[Common.718.AIP] +Entities.gmod_subway_81-718.Buttons.ARS.!RIP = @[Common.718.RIP] +Entities.gmod_subway_81-718.Buttons.ARS.!KVD = @[Common.ARS.VD] +Entities.gmod_subway_81-718.Buttons.ARS.!VS1 = @[Common.718.VS1] +Entities.gmod_subway_81-718.Buttons.ARS.!VS2 = @[Common.718.VS2] + +Entities.gmod_subway_81-718.Buttons.Right.SA1/1Toggle = @[Common.ALL.VF1] +Entities.gmod_subway_81-718.Buttons.Right.SA2/1Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-718.Buttons.Right.SA5/1Toggle = @[Common.718.SPULightStrength] +Entities.gmod_subway_81-718.Buttons.Right.SA4/1Toggle = @[Common.ALL.GaugeLights] + +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKDV = @[Common.718.MVSUKDV] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUBDV = @[Common.718.MVSUBDV] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUPB = @[Common.718.MVSUPB] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARS = @[Common.718.MVSUARS] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUAVT = @[Common.718.MVSUAVT] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVV = @[Common.718.MVSUKVV] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVN = @[Common.718.MVSUKVN] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVX3 = @[Common.718.MVSUKVX3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVX2 = @[Common.718.MVSUKVX2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVX1 = @[Common.718.MVSUKVX1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKV0 = @[Common.718.MVSUKV0] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVT1 = @[Common.718.MVSUKVT1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVT2 = @[Common.718.MVSUKVT2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVT3 = @[Common.718.MVSUKVT3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUPVU = @[Common.718.MVSUPVU] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSURPB = @[Common.718.MVSURPB] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX = @[Common.718.MVSUARSX] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST = @[Common.718.MVSUARST] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX3 = @[Common.718.MVSUARSX3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX2 = @[Common.718.MVSUARSX2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX1 = @[Common.718.MVSUARSX1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARS0 = @[Common.718.MVSUARS0] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST1 = @[Common.718.MVSUARST1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST2 = @[Common.718.MVSUARST2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST3 = @[Common.718.MVSUARST3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUROT = @[Common.718.MVSUROT] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUSOT = @[Common.718.MVSUSOT] + +Entities.gmod_subway_81-718.Buttons.BUP_MUVS2.MUVS20 = @[Common.718.MUVS20] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS2.MUVS2ZPT = @[Common.718.MUVS2ZPT] + +Entities.gmod_subway_81-718.Buttons.BUP_MP.MPMP = @[Common.718.MPMP] +Entities.gmod_subway_81-718.Buttons.BUP_MS.MSMS = @[Common.718.MSMS] + +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1VP = @[Common.718.MUVS1VP] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1NZ = @[Common.718.MUVS1NZ] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1X = @[Common.718.MUVS1X] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1T = @[Common.718.MUVS1T] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1U1 = @[Common.718.MUVS1U1] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1U2 = @[Common.718.MUVS1U2] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1BAV = @[Common.718.MUVS1BAV] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1BUP = @[Common.718.MUVS1BUP] + +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPVP = @[Common.718.MLUPVP] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPNZ = @[Common.718.MLUPNZ] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPBUP = @[Common.718.MLUPBUP] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPV0 = @[Common.718.MLUPV0] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPKU = @[Common.718.MLUPKU] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPBAV = @[Common.718.MLUPBAV] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPKR = @[Common.718.MLUPKR] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPARS = @[Common.718.MLUPARS] + +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSPROV = @[Common.718.MPSPROV] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSAVR = @[Common.718.MPSAVR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSTARS = @[Common.718.MPSTARS] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSX = @[Common.718.MPSX] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSNZ = @[Common.718.MPSNZ] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSNZR = @[Common.718.MPSNZR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSPROV0 = @[Common.718.MPSPROV0] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSSK = @[Common.718.MPSSK] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPST = @[Common.718.MPST] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSXR = @[Common.718.MPSXR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSU1 = @[Common.718.MPSU1] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSU2 = @[Common.718.MPSU2] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSVP = @[Common.718.MPSVP] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSVPR = @[Common.718.MPSVPR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSVZ = @[Common.718.MPSVZ] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSXM = @[Common.718.MPSXM] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSU1R = @[Common.718.MPSU1R] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1MZK = @[Common.718.MALP1MZK] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1FM = @[Common.718.MALP1FM] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1400 = @[Common.718.MALP1400] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP150 = @[Common.718.MALP150] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1DIF = @[Common.718.MALP1DIF] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1650 = @[Common.718.MALP1650] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP10 = @[Common.718.MALP10] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1ARS = @[Common.718.MALP1ARS] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1ITA = @[Common.718.MALP1ITA] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1TR = @[Common.718.MALP1TR] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1SN = @[Common.718.MALP1SN] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1VN = @[Common.718.MALP1VN] +Entities.gmod_subway_81-718.Buttons.BUV_MVD.MVDOTK = @[Common.718.MVDOTK] +Entities.gmod_subway_81-718.Buttons.BUV_MVD.MVDRP = @[Common.718.MVDRP] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2MSU = @[Common.718.MALP2MSU] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2800 = @[Common.718.MALP2800] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2975 = @[Common.718.MALP2975] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP250 = @[Common.718.MALP250] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2650 = @[Common.718.MALP2650] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP20 = @[Common.718.MALP20] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2BV = @[Common.718.MALP2BV] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2ITB = @[Common.718.MALP2ITB] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP1 = @[Common.718.MGRTP1] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP3 = @[Common.718.MGRTP3] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKHA = @[Common.718.MGRKHA] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKTA = @[Common.718.MGRKTA] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP2 = @[Common.718.MGRTP2] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP4 = @[Common.718.MGRTP4] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKHB = @[Common.718.MGRKHB] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKTB = @[Common.718.MGRKTB] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKRV = @[Common.718.MGRKRV] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRNV = @[Common.718.MGRNV] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRBV = @[Common.718.MGRBV] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRLK = @[Common.718.MGRLK] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKRN = @[Common.718.MGRKRN] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAKT = @[Common.718.MLUAKT] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAXH = @[Common.718.MLUAXH] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAVP = @[Common.718.MLUAVP] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUANZ = @[Common.718.MLUANZ] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUASS = @[Common.718.MLUASS] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAPV = @[Common.718.MLUAPV] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUALK = @[Common.718.MLUALK] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1V1 = @[Common.718.MUVK1V1] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1KT = @[Common.718.MUVK1KT] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1KH = @[Common.718.MUVK1KH] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1LK = @[Common.718.MUVK1LK] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1PV = @[Common.718.MUVK1PV] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1NZ = @[Common.718.MUVK1NZ] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1SN = @[Common.718.MUVK1SN] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIV33 = @[Common.718.MIV33] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIVV1 = @[Common.718.MIVV1] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIVSMA = @[Common.718.MIVSMA] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIVSMB = @[Common.718.MIVSMB] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2RTM = @[Common.718.MUVK2RTM] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2RKT = @[Common.718.MUVK2RKT] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2RP = @[Common.718.MUVK2RP] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2OTK = @[Common.718.MUVK2OTK] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK275 = @[Common.718.MUVK275] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2VP = @[Common.718.MUVK2VP] + +Entities.gmod_subway_81-718.Buttons.PVZ.SF4Toggle = @[Common.718.SF4] +Entities.gmod_subway_81-718.Buttons.PVZ.SF27Toggle = @[Common.718.SF27] +Entities.gmod_subway_81-718.Buttons.PVZ.SF46Toggle = @[Common.718.SF46] +Entities.gmod_subway_81-718.Buttons.PVZ.SF12Toggle = @[Common.718.SF12] +Entities.gmod_subway_81-718.Buttons.PVZ.SF13Toggle = @[Common.718.SF13] +Entities.gmod_subway_81-718.Buttons.PVZ.SF45Toggle = @[Common.718.SF45] +Entities.gmod_subway_81-718.Buttons.PVZ.SF16Toggle = @[Common.718.SF16] +Entities.gmod_subway_81-718.Buttons.PVZ.SF44Toggle = @[Common.718.SF44] +Entities.gmod_subway_81-718.Buttons.PVZ.SF43Toggle = @[Common.718.SF43] +Entities.gmod_subway_81-718.Buttons.PVZ.SF14Toggle = @[Common.718.SF14] +Entities.gmod_subway_81-718.Buttons.PVZ.SF15Toggle = @[Common.718.SF15] +Entities.gmod_subway_81-718.Buttons.PVZ.SF25Toggle = @[Common.718.SF25] +Entities.gmod_subway_81-718.Buttons.PVZ.SF72Toggle = @[Common.718.SF72] +Entities.gmod_subway_81-718.Buttons.PVZ.SF29Toggle = @[Common.718.SF29] +Entities.gmod_subway_81-718.Buttons.PVZ.SF26Toggle = @[Common.718.SF26] +Entities.gmod_subway_81-718.Buttons.PVZ.SF42Toggle = @[Common.718.SF42] +Entities.gmod_subway_81-718.Buttons.PVZ.SF18Toggle = @[Common.718.SF18] +Entities.gmod_subway_81-718.Buttons.PVZ.SF20Toggle = @[Common.718.SF20] +Entities.gmod_subway_81-718.Buttons.PVZ.SF17Toggle = @[Common.718.SF17] +Entities.gmod_subway_81-718.Buttons.PVZ.SF19Toggle = @[Common.718.SF19] +Entities.gmod_subway_81-718.Buttons.PVZ.SF21Toggle = @[Common.718.SF21] +Entities.gmod_subway_81-718.Buttons.PVZ.SF22Toggle = @[Common.718.SF22] +Entities.gmod_subway_81-718.Buttons.PVZ.SF34Toggle = @[Common.718.SF34] +Entities.gmod_subway_81-718.Buttons.PVZ.SF35Toggle = @[Common.718.SF35] +Entities.gmod_subway_81-718.Buttons.PVZ.SF23Toggle = @[Common.718.SF23] +Entities.gmod_subway_81-718.Buttons.PVZ.SF24Toggle = @[Common.718.SF24] + +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-718.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-718.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-718.Buttons.HelperPanel.SA6Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-718.Buttons.HelperPanel.SA24Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-718.Buttons.HelperPanel.SB20Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-718.Buttons.HelperPanel.SB21Set = @[Common.ALL.Program2] + +Entities.gmod_subway_81-718.Buttons.BZOS.SAB1Toggle = @[Common.BZOS.On] +Entities.gmod_subway_81-718.Buttons.BZOS.!VH1 = @[Common.BZOS.VH1] +Entities.gmod_subway_81-718.Buttons.BZOS.!VH2 = @[Common.BZOS.VH2] + +Entities.gmod_subway_81-718.Buttons.CabVent.PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-718.Buttons.CabVent.PVK+ = @[Common.CabVent.PVK+] + +Entities.gmod_subway_81-718.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-718.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-718.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-718.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-718.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-718.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-718.Buttons.OtsekDoor1.OtsekDoor1 = @[Common.ALL.OtsekDoor1] +Entities.gmod_subway_81-718.Buttons.OtsekDoor2.OtsekDoor2 = @[Common.ALL.OtsekDoor2] +Entities.gmod_subway_81-718.Buttons.DriverValveDisconnect.EPKToggle = @[Common.ALL.EPV] +Entities.gmod_subway_81-718.Buttons.DriverValveDisconnect.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-718.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle = @[Common.ALL.DriverValveDisconnect] + +Entities.gmod_subway_81-718.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-718.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-718.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] + +Entities.gmod_subway_81-718.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] + +Entities.gmod_subway_81-718.Buttons.HVMeters.!I13 = @[Common.ALL.EnginesCurrent1] +Entities.gmod_subway_81-718.Buttons.HVMeters.!I24 = @[Common.ALL.EnginesCurrent2] +Entities.gmod_subway_81-718.Buttons.HVMeters.!HVVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_81-718.Buttons.HVMeters.!BatteryCurrent = @[Common.ALL.BatteryCurrent] +Entities.gmod_subway_81-718.Buttons.PneumaticPanels.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-718.Buttons.PneumaticPanels.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-718.Buttons.Left.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSPROV = @[Common.718.MPSPROV] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSAVR = @[Common.718.MPSAVR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSTARS = @[Common.718.MPSTARS] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSX = @[Common.718.MPSX] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSNZ = @[Common.718.MPSNZ] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSNZR = @[Common.718.MPSNZR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSPROV0 = @[Common.718.MPSPROV0] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSSK = @[Common.718.MPSSK] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPST = @[Common.718.MPST] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSXR = @[Common.718.MPSXR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSU1 = @[Common.718.MPSU1] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSU2 = @[Common.718.MPSU2] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSVP = @[Common.718.MPSVP] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSVPR = @[Common.718.MPSVPR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSVZ = @[Common.718.MPSVZ] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSXM = @[Common.718.MPSXM] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSU1R = @[Common.718.MPSU1R] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1MZK = @[Common.718.MALP1MZK] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1FM = @[Common.718.MALP1FM] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1400 = @[Common.718.MALP1400] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP150 = @[Common.718.MALP150] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1DIF = @[Common.718.MALP1DIF] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1650 = @[Common.718.MALP1650] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP10 = @[Common.718.MALP10] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1ARS = @[Common.718.MALP1ARS] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1ITA = @[Common.718.MALP1ITA] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1TR = @[Common.718.MALP1TR] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1SN = @[Common.718.MALP1SN] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1VN = @[Common.718.MALP1VN] +Entities.gmod_subway_81-719.Buttons.BUV_MVD.MVDOTK = @[Common.718.MVDOTK] +Entities.gmod_subway_81-719.Buttons.BUV_MVD.MVDRP = @[Common.718.MVDRP] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2MSU = @[Common.718.MALP2MSU] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2800 = @[Common.718.MALP2800] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2975 = @[Common.718.MALP2975] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP250 = @[Common.718.MALP250] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2650 = @[Common.718.MALP2650] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP20 = @[Common.718.MALP20] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2BV = @[Common.718.MALP2BV] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2ITB = @[Common.718.MALP2ITB] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP1 = @[Common.718.MGRTP1] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP3 = @[Common.718.MGRTP3] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKHA = @[Common.718.MGRKHA] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKTA = @[Common.718.MGRKTA] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP2 = @[Common.718.MGRTP2] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP4 = @[Common.718.MGRTP4] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKHB = @[Common.718.MGRKHB] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKTB = @[Common.718.MGRKTB] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKRV = @[Common.718.MGRKRV] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRNV = @[Common.718.MGRNV] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRBV = @[Common.718.MGRBV] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRLK = @[Common.718.MGRLK] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKRN = @[Common.718.MGRKRN] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAKT = @[Common.718.MLUAKT] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAXH = @[Common.718.MLUAXH] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAVP = @[Common.718.MLUAVP] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUANZ = @[Common.718.MLUANZ] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUASS = @[Common.718.MLUASS] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAPV = @[Common.718.MLUAPV] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUALK = @[Common.718.MLUALK] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1V1 = @[Common.718.MUVK1V1] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1KT = @[Common.718.MUVK1KT] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1KH = @[Common.718.MUVK1KH] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1LK = @[Common.718.MUVK1LK] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1PV = @[Common.718.MUVK1PV] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1NZ = @[Common.718.MUVK1NZ] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1SN = @[Common.718.MUVK1SN] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIV33 = @[Common.718.MIV33] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIVV1 = @[Common.718.MIVV1] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIVSMA = @[Common.718.MIVSMA] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIVSMB = @[Common.718.MIVSMB] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2RTM = @[Common.718.MUVK2RTM] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2RKT = @[Common.718.MUVK2RKT] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2RP = @[Common.718.MUVK2RP] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2OTK = @[Common.718.MUVK2OTK] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK275 = @[Common.718.MUVK275] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2VP = @[Common.718.MUVK2VP] +Entities.gmod_subway_81-719.Buttons.PVZ.SF4Toggle = @[Common.718.SF4] +Entities.gmod_subway_81-719.Buttons.PVZ.SF27Toggle = @[Common.718.SF27] +Entities.gmod_subway_81-719.Buttons.PVZ.SF46Toggle = @[Common.718.SF46] +Entities.gmod_subway_81-719.Buttons.PVZ.SF12Toggle = @[Common.718.SF12] +Entities.gmod_subway_81-719.Buttons.PVZ.SF13Toggle = @[Common.718.SF13] +Entities.gmod_subway_81-719.Buttons.PVZ.SF45Toggle = @[Common.718.SF45] +Entities.gmod_subway_81-719.Buttons.PVZ.SF16Toggle = @[Common.718.SF16] +Entities.gmod_subway_81-719.Buttons.PVZ.SF44Toggle = @[Common.718.SF44] +Entities.gmod_subway_81-719.Buttons.PVZ.SF43Toggle = @[Common.718.SF43] +Entities.gmod_subway_81-719.Buttons.PVZ.SF14Toggle = @[Common.718.SF14] +Entities.gmod_subway_81-719.Buttons.PVZ.SF15Toggle = @[Common.718.SF15] +Entities.gmod_subway_81-719.Buttons.PVZ.SF25Toggle = @[Common.718.SF25] +Entities.gmod_subway_81-719.Buttons.PVZ.SF72Toggle = @[Common.718.SF72] +Entities.gmod_subway_81-719.Buttons.PVZ.SF56Toggle = @[Common.718.SF56] +Entities.gmod_subway_81-719.Buttons.PVZ.SF29Toggle = @[Common.718.SF29] +Entities.gmod_subway_81-719.Buttons.PVZ.SF26Toggle = @[Common.718.SF26] +Entities.gmod_subway_81-719.Buttons.PVZ.SF42Toggle = @[Common.718.SF42] +Entities.gmod_subway_81-719.Buttons.PVZ.SF18Toggle = @[Common.718.SF18] +Entities.gmod_subway_81-719.Buttons.PVZ.SF20Toggle = @[Common.718.SF20] +Entities.gmod_subway_81-719.Buttons.PVZ.SF17Toggle = @[Common.718.SF17] +Entities.gmod_subway_81-719.Buttons.PVZ.SF19Toggle = @[Common.718.SF19] +Entities.gmod_subway_81-719.Buttons.PVZ.SF21Toggle = @[Common.718.SF21] +Entities.gmod_subway_81-719.Buttons.PVZ.SF22Toggle = @[Common.718.SF22] +Entities.gmod_subway_81-719.Buttons.PVZ.SF34Toggle = @[Common.718.SF34] +Entities.gmod_subway_81-719.Buttons.PVZ.SF35Toggle = @[Common.718.SF35] +Entities.gmod_subway_81-719.Buttons.PVZ.SF23Toggle = @[Common.718.SF23] +Entities.gmod_subway_81-719.Buttons.PVZ.SF24Toggle = @[Common.718.SF24] + +Entities.gmod_subway_81-719.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.RearPneumatic.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-719.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-719.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-719.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-719.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-719.Buttons.couch_cap_o.CouchCap = @[Common.ALL.CouchCap] +Entities.gmod_subway_81-719.Buttons.couch_cap.CouchCap = @[Common.ALL.CouchCap] + +Entities.gmod_subway_81-719.Buttons.Battery.VBToggle = @[Common.ALL.VB] + +Entities.gmod_subway_81-719.Buttons.Voltages.!BatteryVoltage = @[Common.ALL.BatteryVoltage] #NEW +Entities.gmod_subway_81-719.Buttons.Voltages.!BatteryCurrent = @[Common.ALL.BatteryCurrent] #NEW +Entities.gmod_subway_81-719.Buttons.Pressures.!BCPressure = @[Common.ALL.BLTLPressure] #NEW +Entities.gmod_subway_81-719.Buttons.Pressures.!BLTLPressure = @[Common.ALL.BCPressure] #NEW +#Spawner: +Entities.gmod_subway_81-718.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-718.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-718.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-718.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-718.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-718.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-718.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-718.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-718.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-718.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] diff --git a/lua/metrostroi_data/languages/fr_720.lua b/lua/metrostroi_data/languages/fr_720.lua new file mode 100644 index 0000000..e34fbca --- /dev/null +++ b/lua/metrostroi_data/languages/fr_720.lua @@ -0,0 +1,428 @@ +return [[ +#81-720 + +[fr] + +#######Buttons########### +#Cameras +Train.720.CameraCond = Climatisation, IGLA +Train.720.CameraPPZ = PPZ +Train.720.CameraPV = VPU +Train.720.CameraVityaz = SAU "Vityaz" +Train.720.CameraKRMH = Valves KRMSH et UAVA +Train.720.CameraPVZ = PVZ + +Train.Buttons.Heating = Heating #NEW +Train.Buttons.Vent = Ventilation #NEW +Train.Buttons.Cooling = Cooling #NEW +Train.Buttons.BARS1 = BARS1 #NEW +Train.Buttons.BARS2 = BARS2 #NEW +Train.Buttons.BARS12 = BARS1 and BARS2 #NEW + +#Common +Common.720.SF1 = SF1: Alimentation principale +Common.720.SF2 = SF2: Contrôle principal +Common.720.SF3 = SF3: Contrôle d'urgence +Common.720.SF4 = SF4: BARS +Common.720.SF5 = SF5: BUP (unité de contrôle du train) +Common.720.SF6 = SF6: BKCU (control circuits commutation unit) +Common.720.SF7 = SF7: PPO (ASOTP) +Common.720.SF8 = SF8: Annonceur +Common.720.SF9 = SF9: Station radio du train +Common.720.SF10 = SF10: Orientation des voitures +Common.720.SF11 = SF11: Direction du mouvement +Common.720.SF12 = SF12: 1er groupe de phares +Common.720.SF13 = SF13: 2ème groupe de phares +Common.720.SF14 = SF14: Lumières rouges +Common.720.SF15 = SF15: @[Common.703.VU3] +Common.720.SF16 = SF16: @[Common.703.VU1] +Common.720.SF17 = SF17: Climatisation cabine +Common.720.SF18 = SF18: Flange lubrication +Common.720.SF19 = SF19: Levier de frein principal +Common.720.SF20 = SF20: Levier de frein d'urgence +Common.720.SF21 = SF21: Ouverture des portes +Common.720.SF22 = SF22: Fermeture des portes + +Common.720.SFV1 = SF1: Contrôle des circuits d'alimentation de voiture +Common.720.SFV2 = SF2: Unité de contrôle d'alimentation de voiture +Common.720.SFV3 = SF3: Unité de contrôle d'alimentation des moteurs de traction +Common.720.SFV4 = SF4: Unité de contrôle des moteurs de traction +Common.720.SFV5 = SF5: Unité de contrôle des moteurs de traction d'urgence +Common.720.SFV6 = SF6: Alimentation BUTP +Common.720.SFV7 = SF7: Alimentation +Common.720.SFV8 = SF8: Contrôle BV +Common.720.SFV9 = SF9: Alimentation BV +Common.720.SFV10 = SF10: PPO (ASOTP PCBK) +Common.720.SFV11 = SF11: Compresseur +Common.720.SFV12 = SF12: Fermeture des portes +Common.720.SFV13 = SF13: Ouverture des portes à gauche +Common.720.SFV14 = SF14: Ouverture des portes à droite +Common.720.SFV15 = SF15: Portes d'extrémités +Common.720.SFV16 = SF16: Annonceur +Common.720.SFV17 = SF17: Interphone d'urgence +Common.720.SFV18 = SF18: @[Common.ALL.Unsused1] +Common.720.SFV19 = SF19: Alimentation de l'éclairage intérieur +Common.720.SFV20 = SF20: Eclairage intérieur d'urgence +Common.720.SFV21 = SF21: Capteur de vitesse +Common.720.SFV22 = SF22: Frein de parking +Common.720.SFV23 = SF23: 1er groupe de ventilation +Common.720.SFV24 = SF24: 2ème groupe de ventilation +Common.720.SFV25 = SF25: Alimentation du 1er groupe de ventilation +Common.720.SFV26 = SF26: Alimentation du 2ème groupe de ventilation +Common.720.SFV27 = SF27: Alimentation de l'excitateur +Common.720.SFV28 = SF28: Alimentation des condensateurs de charge +Common.720.SFV29 = SF29: Collecteurs de courant +Common.720.SFV30 = SF30: Plans de ligne & téléscripteur +Common.720.SFV31 = SF31: @[Common.ALL.Unsused1] +Common.720.SFV32 = SF32: @[Common.ALL.Unsused1] +Common.720.SFV33 = SF33: @[Common.ALL.Unsused1] + +Common.720.VentCMode = Mode de ventilation +Common.720.VentHMode+ = Augmenter la puissance du chauffage +Common.720.VentHMode- = Diminuer la puissance du chauffage +Common.720.VentSMode- = Augmenter la puissance de la ventilation +Common.720.VentSMode+ = Diminuer la puissance de la ventilation + +Common.720.Pant1 = Désactiver le 1er groupe de collecteurs de courant +Common.720.Pant2 = Désactiver le 2ème groupe de collecteurs de courant +Common.720.Vent1 = 1er groupe de ventilation +Common.720.Vent2 = 2ème groupe de ventilation +Common.720.TorecDoors = Portes d'extrémités +Common.720.BBER = BBE d'urgence +Common.720.BBE = BBE: Alimentation +Common.720.CabLightStrength = Luminosité de l'éclairage cabine +Common.720.AppLights = Equipement d'éclairage de voiture +Common.720.BARSBlock = Blocage du BARS défectueux (ARS unit) + +Common.720.Accel = Accélération +Common.720.Forward = Marche avant +Common.720.Backward = Marche arrière +Common.720.Stand = Stationnaire +Common.720.Ticker = Tableau d'information dynamique +Common.720.KAH = KAH: Mode de conduite d'urgence BARS +Common.720.KAHK = @[Common.ALL.KAHK] +Common.720.ALS = ALS: Passer l'ARS en mode signalisation (désactive l'ARS) +Common.720.ALSK = Couvercle du bouton ALS +Common.720.FDepot = Departure from depot +Common.720.HVoltage = Pas de haute tension +Common.720.PassScheme = Plan de ligne dynamique #vieille traduction : "Schéma de ligne" +Common.720.EmergencyCompressor = Démarrage du compresseur d'urgence +Common.720.EnableBV = Activer le BV +Common.720.DisableBV = Désactiver le BV +Common.720.Ring = Transfert des contrôles (bip) +Common.720.R_Announcer = Activer le son des annonces dans les voitures passagers +Common.720.R_Line = Activer le microphone du conducteur +Common.720.R_Emer = Interphone d'urgence +Common.720.R_Program1 = Annonce de départ (programme 1) +Common.720.EnableBVEmer = Activer le BV d'urgence +Common.720.EmergencyControls = Désactivation d'urgence des circuits +Common.720.Wiper = Activer l'essuie-glace + +Common.720.AccelRate = Activer le mode "pente" +Common.720.EBrakeAdd = Augmenter la puissance du frein auxiliaire +Common.720.EBrakeRelease = Réduire la puissance du frein auxiliaire +Common.720.EBrakeToggle = Activer le frein auxiliaire +Common.720.EmergencyBrake = Activer le frein d'urgence +Common.720.DoorClose = Fermer les portes +Common.720.AttentionMessage = Confirmation du message + + +Common.720.DoorSelectL = Sélectionner les portes de gauche +Common.720.DoorSelectR = Sélectionner les portes de droite +Common.720.DoorBlock = Conduite sans le contrôle des portes +Common.720.KDL = Ouvrir les portes à gauche +Common.720.KDP = Ouvrir les portes à droite + +Common.Vityaz.F1 = Vityaz: F1 +Common.Vityaz.F2 = Vityaz: Page suivate +Common.Vityaz.F3 = Vityaz: Page précédente +Common.Vityaz.F4 = Vityaz: Mode principal +Common.Vityaz.1 = Vityaz: 1 +Common.Vityaz.4 = Vityaz: 4 +Common.Vityaz.7 = Vityaz: 7 +Common.Vityaz.2 = Vityaz: 2 +Common.Vityaz.5 = Vityaz: 5 +Common.Vityaz.8 = Vityaz: 8 +Common.Vityaz.0 = Vityaz: 0 +Common.Vityaz.3 = Vityaz: 3 +Common.Vityaz.6 = Vityaz: 6 +Common.Vityaz.9 = Vityaz: 9 +Common.Vityaz.F5 = Vityaz: ZV +Common.Vityaz.F6 = Vityaz: Haut\Vitesse +Common.Vityaz.F7 = Vityaz: Bas\Courants +Common.Vityaz.F8 = Vityaz: Entrer\Equipement de voiture +Common.Vityaz.F9 = Vityaz: Select\Contrôles d'équipement de voiture + +Common.720.EmerX1 = Mode de conduite d'urgence X1 +Common.720.EmerX2 = Mode de conduite d'urgence X2 +Common.720.EmerCloseDoors = Fermeture d'urgence des portes +Common.720.EmergencyDoors = Activer le contrôle d'urgence des portes +Common.720.BRU = BRU: Déconnecteur de haute tension + +#gmod_subway_81-720 +#Buttons: + +Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode- = @[Common.720.VentCMode] @[Common.ALL.CCW] +Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode+ = @[Common.720.VentCMode] @[Common.ALL.CW] +Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode+ = @[Common.720.VentHMode+] +Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode- = @[Common.720.VentHMode-] +Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode- = @[Common.720.VentSMode-] +Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode+ = @[Common.720.VentSMode+] + +Entities.gmod_subway_81-720.Buttons.RV.EmerX1Set = @[Common.720.EmerX1] +Entities.gmod_subway_81-720.Buttons.RV.EmerX2Set = @[Common.720.EmerX2] +Entities.gmod_subway_81-720.Buttons.RV.EmerCloseDoorsSet = @[Common.720.EmerCloseDoors] +Entities.gmod_subway_81-720.Buttons.RV.EmergencyDoorsToggle = @[Common.720.EmergencyDoors] + +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF1Set = @[Common.Vityaz.F1] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF2Set = @[Common.Vityaz.F2] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF3Set = @[Common.Vityaz.F3] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF4Set = @[Common.Vityaz.F4] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz1Set = @[Common.Vityaz.1] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz4Set = @[Common.Vityaz.4] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz7Set = @[Common.Vityaz.7] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz2Set = @[Common.Vityaz.2] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz5Set = @[Common.Vityaz.5] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz8Set = @[Common.Vityaz.8] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz0Set = @[Common.Vityaz.0] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz3Set = @[Common.Vityaz.3] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz6Set = @[Common.Vityaz.6] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz9Set = @[Common.Vityaz.9] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF5Set = @[Common.Vityaz.F5] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF6Set = @[Common.Vityaz.F6] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF7Set = @[Common.Vityaz.F7] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF8Set = @[Common.Vityaz.F8] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF9Set = @[Common.Vityaz.F9] + +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF1Toggle = @[Common.720.SF1] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF2Toggle = @[Common.720.SF2] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF3Toggle = @[Common.720.SF3] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF4Toggle = @[Common.720.SF4] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF5Toggle = @[Common.720.SF5] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF6Toggle = @[Common.720.SF6] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF7Toggle = @[Common.720.SF7] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF8Toggle = @[Common.720.SF8] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF9Toggle = @[Common.720.SF9] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF10Toggle = @[Common.720.SF10] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF11Toggle = @[Common.720.SF11] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF12Toggle = @[Common.720.SF12] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF13Toggle = @[Common.720.SF13] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF14Toggle = @[Common.720.SF14] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF15Toggle = @[Common.720.SF15] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF16Toggle = @[Common.720.SF16] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF17Toggle = @[Common.720.SF17] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF18Toggle = @[Common.720.SF18] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF19Toggle = @[Common.720.SF19] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF20Toggle = @[Common.720.SF20] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF21Toggle = @[Common.720.SF21] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF22Toggle = @[Common.720.SF22] + +Entities.gmod_subway_81-720.Buttons.BackDown.Pant1Toggle = @[Common.720.Pant1] +Entities.gmod_subway_81-720.Buttons.BackDown.Pant2Toggle = @[Common.720.Pant2] +Entities.gmod_subway_81-720.Buttons.BackDown.Vent1Toggle = @[Common.720.Vent1] +Entities.gmod_subway_81-720.Buttons.BackDown.Vent2Toggle = @[Common.720.Vent2] +Entities.gmod_subway_81-720.Buttons.BackDown.PassLightToggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-720.Buttons.BackDown.CabLightToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-720.Buttons.BackDown.Headlights1Toggle = @[Common.ALL.VF1] +Entities.gmod_subway_81-720.Buttons.BackDown.Headlights2Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-720.Buttons.BackDown.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-720.Buttons.BackDown.TorecDoorsToggle = @[Common.720.TorecDoors] +Entities.gmod_subway_81-720.Buttons.BackDown.BBERToggle = @[Common.720.BBER] +Entities.gmod_subway_81-720.Buttons.BackDown.BBEToggle = @[Common.720.BBE] +Entities.gmod_subway_81-720.Buttons.BackDown.CompressorToggle = @[Common.ALL.MK] +Entities.gmod_subway_81-720.Buttons.BackDown.CabLightStrengthToggle = @[Common.720.CabLightStrength] +Entities.gmod_subway_81-720.Buttons.BackDown.AppLights1Toggle = @[Common.720.AppLights] +Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock- = @[Common.720.BARSBlock] @[Common.ALL.CCW] +Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock+ = @[Common.720.BARSBlock] @[Common.ALL.CW] +Entities.gmod_subway_81-720.Buttons.BackDown.BatteryToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-720.Buttons.BackDown.ALSFreqToggle = @[Common.ARS.Freq] + +Entities.gmod_subway_81-720.Buttons.PUU.!DoorsClosed = @[Common.ALL.LSD] +Entities.gmod_subway_81-720.Buttons.PUU.StandToggle = @[Common.720.Stand] @[Common.ALL.Unsused2] +Entities.gmod_subway_81-720.Buttons.PUU.TickerToggle = @[Common.720.Ticker] +Entities.gmod_subway_81-720.Buttons.PUU.KAHToggle = @[Common.720.KAH] +Entities.gmod_subway_81-720.Buttons.PUU.KAHkToggle = @[Common.720.KAHK] +Entities.gmod_subway_81-720.Buttons.PUU.ALSToggle = @[Common.720.ALS] +Entities.gmod_subway_81-720.Buttons.PUU.ALSkToggle = @[Common.720.ALSK] +Entities.gmod_subway_81-720.Buttons.PUU.FDepotToggle = @[Common.720.FDepot] @[Common.ALL.Unsused2] +Entities.gmod_subway_81-720.Buttons.PUU.!HVoltage = @[Common.720.HVoltage] +Entities.gmod_subway_81-720.Buttons.PUU.PassSchemeToggle = @[Common.720.PassScheme] +Entities.gmod_subway_81-720.Buttons.PUU.EmergencyCompressorSet = @[Common.720.EmergencyCompressor] +Entities.gmod_subway_81-720.Buttons.PUU.EnableBVSet = @[Common.720.EnableBV] +Entities.gmod_subway_81-720.Buttons.PUU.DisableBVSet = @[Common.720.DisableBV] +Entities.gmod_subway_81-720.Buttons.PUU.RingSet = @[Common.720.Ring] +Entities.gmod_subway_81-720.Buttons.PUU.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-720.Buttons.PUU.R_AnnouncerToggle = @[Common.720.R_Announcer] +Entities.gmod_subway_81-720.Buttons.PUU.R_LineToggle = @[Common.720.R_Line] +Entities.gmod_subway_81-720.Buttons.PUU.R_EmerSet = @[Common.720.R_Emer] +Entities.gmod_subway_81-720.Buttons.PUU.R_Program1Set = @[Common.720.R_Program1] +Entities.gmod_subway_81-720.Buttons.PUU.EnableBVEmerSet = @[Common.720.EnableBVEmer] +Entities.gmod_subway_81-720.Buttons.PUU.EmergencyControlsToggle = @[Common.720.EmergencyControls] +Entities.gmod_subway_81-720.Buttons.PUU.WiperToggle = @[Common.720.Wiper] +Entities.gmod_subway_81-720.Buttons.PUU.!VDop = @[Common.ALL.SpeedAccept] +Entities.gmod_subway_81-720.Buttons.PUU.!VFact = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-720.Buttons.PUU.!VPred = @[Common.ALL.SpeedAttent] +Entities.gmod_subway_81-720.Buttons.PUU.!VDop2 = @[Common.ALL.SpeedAccept] +Entities.gmod_subway_81-720.Buttons.PUU.!Acc = @[Common.720.Accel] +Entities.gmod_subway_81-720.Buttons.PUU.!Forw = @[Common.720.Forward] +Entities.gmod_subway_81-720.Buttons.PUU.!Back = @[Common.720.Backward] + +Entities.gmod_subway_81-720.Buttons.PUR.AccelRateSet = @[Common.720.AccelRate] +Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeAddSet = @[Common.720.EBrakeAdd] +Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeReleaseSet = @[Common.720.EBrakeRelease] +Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeToggle = @[Common.720.EBrakeToggle] +Entities.gmod_subway_81-720.Buttons.PUR.EmergencyBrakeToggle = @[Common.720.EmergencyBrake] +Entities.gmod_subway_81-720.Buttons.PUR.DoorCloseToggle = @[Common.720.DoorClose] +Entities.gmod_subway_81-720.Buttons.PUR.AttentionMessageSet = @[Common.720.AttentionMessage] +Entities.gmod_subway_81-720.Buttons.PUR.AttentionSet = @[Common.ARS.KB] +Entities.gmod_subway_81-720.Buttons.PUR.AttentionBrakeSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-720.Buttons.PUR.HornBSet = @[Common.ALL.Horn] +Entities.gmod_subway_81-720.Buttons.PUR.DoorRightSet = @[Common.720.KDP] +Entities.gmod_subway_81-720.Buttons.PUR.!DoorRightLamp = @[Common.ALL.KDPL] + +Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectLToggle = @[Common.720.DoorSelectL] +Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectRToggle = @[Common.720.DoorSelectR] +Entities.gmod_subway_81-720.Buttons.PUL.DoorBlockToggle = @[Common.720.DoorBlock] +Entities.gmod_subway_81-720.Buttons.PUL.!DoorLeftLamp = @[Common.ALL.KDLL] +Entities.gmod_subway_81-720.Buttons.PUL.DoorLeftSet = @[Common.720.KDL] + +Entities.gmod_subway_81-720.Buttons.PVZ.SFV1Toggle = @[Common.720.SFV1] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV2Toggle = @[Common.720.SFV2] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV3Toggle = @[Common.720.SFV3] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV4Toggle = @[Common.720.SFV4] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV5Toggle = @[Common.720.SFV5] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV6Toggle = @[Common.720.SFV6] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV7Toggle = @[Common.720.SFV7] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV8Toggle = @[Common.720.SFV8] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV9Toggle = @[Common.720.SFV9] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV10Toggle = @[Common.720.SFV10] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV11Toggle = @[Common.720.SFV11] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV12Toggle = @[Common.720.SFV12] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV13Toggle = @[Common.720.SFV13] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV14Toggle = @[Common.720.SFV14] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV15Toggle = @[Common.720.SFV15] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV16Toggle = @[Common.720.SFV16] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV17Toggle = @[Common.720.SFV17] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV18Toggle = @[Common.720.SFV18] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV19Toggle = @[Common.720.SFV19] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV20Toggle = @[Common.720.SFV20] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV21Toggle = @[Common.720.SFV21] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV22Toggle = @[Common.720.SFV22] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV23Toggle = @[Common.720.SFV23] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV24Toggle = @[Common.720.SFV24] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV25Toggle = @[Common.720.SFV25] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV26Toggle = @[Common.720.SFV26] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV27Toggle = @[Common.720.SFV27] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV28Toggle = @[Common.720.SFV28] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV29Toggle = @[Common.720.SFV29] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV30Toggle = @[Common.720.SFV30] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV31Toggle = @[Common.720.SFV31] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV32Toggle = @[Common.720.SFV32] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV33Toggle = @[Common.720.SFV33] + +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] + +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] + +Entities.gmod_subway_81-720.Buttons.BTO.K29Toggle = @[Common.ALL.KRMH] +Entities.gmod_subway_81-720.Buttons.BTO.UAVAToggle = @[Common.ALL.UAVA2] + +Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +Entities.gmod_subway_81-720.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-720.Buttons.RearDoor1.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-720.Buttons.CabinDoorR.CabinDoorRight = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-720.Buttons.CabinDoorL.CabinDoorLeft = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-720.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-720.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] + +Entities.gmod_subway_81-720.Buttons.VoltHelper2.!HV = @[Common.ALL.HighVoltage] +Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I1_3 = @[Common.ALL.EnginesCurrent1] +Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I2_4 = @[Common.ALL.EnginesCurrent2] +Entities.gmod_subway_81-720.Buttons.PneumoHelper2.!BrakeTrainLine = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-720.Buttons.PneumoHelper1.!BrakeCylinder = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-720.Buttons.VoltHelper1.!Battery = @[Common.ALL.BatteryVoltage] +Entities.gmod_subway_81-720.Buttons.GV.GVToggle = @[Common.720.BRU] + +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-720.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-720.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +#gmod_subway_81-721 +Entities.gmod_subway_81-721.Buttons.Battery.BatteryToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-721.Buttons.GV.GVToggle = @[Common.720.BRU] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV1Toggle = @[Common.720.SFV1] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV2Toggle = @[Common.720.SFV2] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV3Toggle = @[Common.720.SFV3] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV4Toggle = @[Common.720.SFV4] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV5Toggle = @[Common.720.SFV5] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV6Toggle = @[Common.720.SFV6] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV7Toggle = @[Common.720.SFV7] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV8Toggle = @[Common.720.SFV8] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV9Toggle = @[Common.720.SFV9] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV10Toggle = @[Common.720.SFV10] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV11Toggle = @[Common.720.SFV11] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV12Toggle = @[Common.720.SFV12] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV13Toggle = @[Common.720.SFV13] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV14Toggle = @[Common.720.SFV14] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV15Toggle = @[Common.720.SFV15] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV16Toggle = @[Common.720.SFV16] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV17Toggle = @[Common.720.SFV17] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV18Toggle = @[Common.720.SFV18] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV19Toggle = @[Common.720.SFV19] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV20Toggle = @[Common.720.SFV20] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV21Toggle = @[Common.720.SFV21] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV22Toggle = @[Common.720.SFV22] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV23Toggle = @[Common.720.SFV23] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV24Toggle = @[Common.720.SFV24] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV25Toggle = @[Common.720.SFV25] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV26Toggle = @[Common.720.SFV26] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV27Toggle = @[Common.720.SFV27] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV28Toggle = @[Common.720.SFV28] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV29Toggle = @[Common.720.SFV29] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV30Toggle = @[Common.720.SFV30] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV31Toggle = @[Common.720.SFV31] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV32Toggle = @[Common.720.SFV32] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV33Toggle = @[Common.720.SFV33] + +Entities.gmod_subway_81-721.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-721.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +#Spawner: + +Entities.gmod_subway_81-720.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-720.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-720.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-720.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-720.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-720.Spawner.PassSchemesInvert.Name = @[Common.Spawner.SchemeInvert] +Entities.gmod_subway_81-720.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-720.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-720.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-720.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-720.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] diff --git a/lua/metrostroi_data/languages/fr_722.lua b/lua/metrostroi_data/languages/fr_722.lua new file mode 100644 index 0000000..f0417fc --- /dev/null +++ b/lua/metrostroi_data/languages/fr_722.lua @@ -0,0 +1,374 @@ +return [[ +#81-722 + +[fr] + +#Cameras: +Train.722.Breakers = Disjoncteurs automatiques +Train.722.PU2_1 = Panneau de boutons +Train.722.PU2_2 = Panneau auxililaire +Train.722.Vityaz = Moniteur SAU "VITYAZ-SP" +Train.722.SARMAT = Moniteur du système CIS +Train.722.CabLights = Panneau de l'éclairage cabine +Train.722.Disconnects = Déconnecter les valves +Train.722.KRMH = Valves KRMSH et RVTB + +Train.Buttons.BattOn = Battery enabled #NEW +Train.Buttons.BattOff = Battery disabling #NEW +Train.Buttons.VentEmer = Emergency #NEW +Train.Buttons.VentAuto = Auto #New +Train.Buttons.Vent1/2 = Half of ventilation #NEW +Train.Buttons.VentAll = All ventilation fans #NEW + +Train.Buttons.VRUAH = Emergency control #NEW +Train.Buttons.VRUOn = Manual activation #NEW +Train.Buttons.PantSC = Enable shorting device #NEW +Train.Buttons.DoorCloseA = Auto closing (with buzzer) #NEW +Train.Buttons.DoorCloseM = Manual closing (without buzzer) #NEW +Train.Buttons.AHActive = Emergency control active #NEW + +#######Buttons########### +Common.722.MirrorHeating = Chauffage des mirroirs +Common.722.EmergencyDrive = Démarrage d'urgence en mode conduite d'urgence +Common.722.Microphone = Activer le microphone +Common.722.LRS = Station de radio d'alimentation d'urgence par batteries #indicator +Common.722.LAVS = Faible pression dans la conduite principale #indicator +Common.722.LRU = Le relai de contrôle est désactivé #indicator +Common.722.GlassWasher = Nettoyeur de pare-brise +Common.722.GlassCleaner = Essuie-glace de pare-brise +Common.722.EmergencyBrakeTPlus = Freinage d'urgence (mode T+) +Common.722.EmergencyBrakeTPlusK = Couvercle du bouton "Freinage d'urgence" +Common.722.KRO = Direction du mouvement + +Common.722.PSNToggle = Activer le chargement de la batterie depuis une source extérieure +Common.722.BattOn = Activer le courant du train +Common.722.BattOff = Désactiver le courant du train +Common.722.TorecDoorUnlock = Déverouiller les portes d'extrémité +Common.722.SCEnabled = Le court-circuiteur est allumé +Common.722.LSOSD = La lampe des portes en station est allumée #indicator + +Common.722.PassVent = Ventilation intérieure +Common.722.VRU = Mode de contrôle +Common.722.VADToggle = Conduite sans verouillage des portes +Common.722.VAHToggle = Conduite sans pédale d'attention +Common.722.EmergencyRadioPowerToggle = Station de radio d'alimentation d'urgence +Common.722.BARSMode = Interrupteur du mode BARS +Common.722.PantSC = Collecteurs de courant et court-circuiteur + +Common.SARMAT.Up = SARMAT: Haut +Common.SARMAT.Down = SARMAT: Bas +Common.SARMAT.Enter = SARMAT: Entrer +Common.SARMAT.Esc = SARMAT: Echap +Common.SARMAT.F1 = SARMAT: F1 +Common.SARMAT.F2 = SARMAT: F2 +Common.SARMAT.F3 = SARMAT: F3 +Common.SARMAT.F4 = SARMAT: F4 +Common.SARMAT.Path = SARMAT: Voie +Common.SARMAT.Line = SARMAT: Ligne +Common.SARMAT.Zero = SARMAT: Début +Common.SARMAT.Start = SARMAT: Start + +#Autobreakers +Common.722.SF1 = SF1: Alimentation du train (contrôle) +Common.722.SF2 = SF2: Cabine active +Common.722.SF3 = SF3: Contrôle principal +Common.722.SF4 = SF4: Contrôle d'urgence +Common.722.SF5 = SF5: Contrôle RVTB +Common.722.SF6 = SF6: Alimentation du levier de frein +Common.722.SF7 = SF7: Contrôle des portes +Common.722.SF8 = SF8: BARS 1 +Common.722.SF9 = SF9: BARS 2 +Common.722.UPO = SF: UPO1 +Common.722.SF10 = SF10: BRPI-M1 +Common.722.SF11 = SF11: BRPI-M2 +Common.722.SF12 = SF12: Alarme incendie +Common.722.SF13 = SF13: @[Common.722.PantSC] +Common.722.SF14 = SF14: Communication radio 1 +Common.722.SF15 = SF15: Communication radio 2 +Common.722.SF16 = SF16: CIS 1 (moniteur) +Common.722.SF17 = SF17: CIS 2 (Système d'information central) +Common.722.SF18 = SF18: CIS 3 +Common.722.SF19 = SF19: BUKP, UPI +Common.722.SF20 = SF20: Moniteur +Common.722.SF21 = SF21: Orientation +Common.722.SF22 = SF22: Alimentation des lumières rouges par batterie +Common.722.SF23 = SF23: Phares, lumières rouges +Common.722.SF24 = SF24: Lampe d'ouverture des portes en station +Common.722.SF25 = SF25: Eclairage cabine +Common.722.SF26 = SF26: Climatisation cabine +Common.722.SF27 = SF27: Essuie-glace de pare-brise, nettoyeur de pare-brise, klaxon + +Common.722.SF31 = SF31: Câble d'alimentation du train +Common.722.SF32 = SF32: Câble d'alimentation du train (contrôle) +Common.722.SF33 = SF33: Contrôle des circuits d'alimentation +Common.722.SF34 = SF34: CIS gauche +Common.722.SF35 = SF35: CIS droit +Common.722.SF36 = SF36: Lumières relai de voiture en station (extérieures) +Common.722.SF37 = SF37: Relâcher les collecteurs de courant +Common.722.SF38 = SF38: Réserve +Common.722.SF41 = SF41: Ouverture des portes à gauche +Common.722.SF42 = SF42: Ouverture des portes à droite +Common.722.SF43 = SF43: Fermeture des portes +Common.722.SF44 = SF44: Portes d'extrémité +Common.722.SF45 = SF45: Alimentation de l'éclairage intérieur +Common.722.SF46 = SF46: Eclaire intérieur d'urgence +Common.722.SF47 = SF47: 1er groupe de ventilation +Common.722.SF48 = SF48: 2ème groupe de ventilation +Common.722.SF49 = SF49: Counter +Common.722.SF51 = SF51: Unité de contrôle de voiture +Common.722.SF52 = SF52: BODV +Common.722.SF53 = SF53: PSN (Alimentation) +Common.722.SF54 = SF54: Sécheur d'air comprimé +Common.722.SF55 = SF55: BUFT (Unité de contrôle de friction de frein) +Common.722.SF56 = SF56: Inverseur +Common.722.SF57 = SF57: Inverseur de chauffage +Common.722.SF58 = SF58: Alimentation principale des contrôles de circuit de wagon +Common.722.SF59 = SF59: Alimentation d'urgence des contrôles de circuit de wagon + +#gmod_subway_81-722 +#Buttons: +Entities.gmod_subway_81-722.Buttons.PU1.MirrorHeatingSet = @[Common.722.MirrorHeating] +Entities.gmod_subway_81-722.Buttons.PU1.DoorLeft2Set = @[Common.720.KDL] +Entities.gmod_subway_81-722.Buttons.PU1.DoorBackSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-722.Buttons.PU1.EmergencyDriveSet = @[Common.722.EmergencyDrive] +Entities.gmod_subway_81-722.Buttons.PU1.MicrophoneSet = @[Common.722.Microphone] +Entities.gmod_subway_81-722.Buttons.PU1.DoorLeft1Set = @[Common.720.KDL] + +Entities.gmod_subway_81-722.Buttons.PU2.ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-722.Buttons.PU2.ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-722.Buttons.PU2.GlassWasherSet = @[Common.722.GlassWasher] +Entities.gmod_subway_81-722.Buttons.PU2.GlassCleaner+ = @[Common.722.GlassCleaner] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.PU2.GlassCleaner- = @[Common.722.GlassCleaner] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeTPlusKToggle = @[Common.722.EmergencyBrakeTPlusK] +Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeTPlusSet = @[Common.722.EmergencyBrakeTPlus] +Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeToggle = @[Common.720.EmergencyBrake] +Entities.gmod_subway_81-722.Buttons.PU2.VigilanceSet = @[Common.ARS.KB] +Entities.gmod_subway_81-722.Buttons.PU2.Headlights+ = @[Common.ALL.VF] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.PU2.Headlights- = @[Common.ALL.VF] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.PU2.DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-722.Buttons.PU2.DoorClose+ = @[Common.720.DoorClose] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.PU2.DoorClose- = @[Common.720.DoorClose] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.PU2.DoorRightSet = @[Common.720.KDP] + +Entities.gmod_subway_81-722.Buttons.BI3.KRO+ = @[Common.722.KRO] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.BI3.KRO- = @[Common.722.KRO] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.BI3.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-722.Buttons.BI3.Compressor- = @[Common.ALL.MK] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.BI3.Compressor+ = @[Common.ALL.MK] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.BI3.!BrakeTrainLine = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-722.Buttons.BI3.!BrakeCylinder = @[Common.ALL.BCPressure] + +Entities.gmod_subway_81-722.Buttons.PPZB.PSNToggleSet = @[Common.722.PSNToggle] +Entities.gmod_subway_81-722.Buttons.PPZB.BattOnSet = @[Common.722.BattOn] +Entities.gmod_subway_81-722.Buttons.PPZB.BattOffSet = @[Common.722.BattOff] +Entities.gmod_subway_81-722.Buttons.PPZB.TorecDoorUnlockSet = @[Common.722.TorecDoorUnlock] +Entities.gmod_subway_81-722.Buttons.PPZB.SCEnable = @[Common.722.SCEnabled] +Entities.gmod_subway_81-722.Buttons.PPZB.SOSD = @[Common.722.LSOSD] + +Entities.gmod_subway_81-722.Buttons.PVM.PassLightToggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-722.Buttons.PVM.PassVent- = @[Common.722.PassVent] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.PassVent+ = @[Common.722.PassVent] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.VKFToggle = @[Common.ALL.VKF] +Entities.gmod_subway_81-722.Buttons.PVM.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-722.Buttons.PVM.VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-722.Buttons.PVM.SOSDEnableToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-722.Buttons.PVM.VRU- = @[Common.722.VRU] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.VRU+ = @[Common.722.VRU] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.VADToggle = @[Common.722.VADToggle] +Entities.gmod_subway_81-722.Buttons.PVM.VAHToggle = @[Common.722.VAHToggle] +Entities.gmod_subway_81-722.Buttons.PVM.EmergencyRadioPowerToggle = @[Common.722.EmergencyRadioPowerToggle] +Entities.gmod_subway_81-722.Buttons.PVM.BARSMode- = @[Common.722.BARSMode] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.BARSMode+ = @[Common.722.BARSMode] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.PantSC- = @[Common.722.PantSC] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.PantSC+ = @[Common.722.PantSC] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.RCARSToggle = @[Common.ALL.RCARS] + +Entities.gmod_subway_81-722.Buttons.HelperLamps.!LRD = @[Common.ARS.LRD] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!LPT = @[Common.ALL.BrT] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!RS = @[Common.722.LRS] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!AVS = @[Common.722.LAVS] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!LSD = @[Common.ALL.LSD] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!RU = @[Common.722.LRU] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!04 = @[Common.ARS.N4] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!00 = @[Common.ARS.0] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!40 = @[Common.ARS.40] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!60 = @[Common.ARS.60] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!70 = @[Common.ARS.70] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!80 = @[Common.ARS.80] + +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatUpSet = @[Common.SARMAT.Up] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatDownSet = @[Common.SARMAT.Down] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatEnterSet = @[Common.SARMAT.Enter] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatEscSet = @[Common.SARMAT.Esc] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF1Set = @[Common.SARMAT.F1] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF2Set = @[Common.SARMAT.F2] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF3Set = @[Common.SARMAT.F3] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF4Set = @[Common.SARMAT.F4] + +Entities.gmod_subway_81-722.Buttons.BMP.SarmatPathSet = @[Common.SARMAT.Path] +Entities.gmod_subway_81-722.Buttons.BMP.SarmatLineSet = @[Common.SARMAT.Line] +Entities.gmod_subway_81-722.Buttons.BMP.SarmatZeroSet = @[Common.SARMAT.Zero] +Entities.gmod_subway_81-722.Buttons.BMP.SarmatStartSet = @[Common.SARMAT.Start] + +Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber1Set = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber2Set = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber3Set = @[Common.ALL.RouteNumber3+] + +Entities.gmod_subway_81-722.Buttons.Lighting.CabinLight- = @[Common.ALL.CabLights] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.Lighting.CabinLight+ = @[Common.ALL.CabLights] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.Lighting.PanelLightToggle = @[Common.ALL.PanelLights] + +Entities.gmod_subway_81-722.Buttons.PPZ.SF1Toggle = @[Common.722.SF1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF2Toggle = @[Common.722.SF2] +Entities.gmod_subway_81-722.Buttons.PPZ.SF3Toggle = @[Common.722.SF3] +Entities.gmod_subway_81-722.Buttons.PPZ.SF4Toggle = @[Common.722.SF4] +Entities.gmod_subway_81-722.Buttons.PPZ.SF5Toggle = @[Common.722.SF5] +Entities.gmod_subway_81-722.Buttons.PPZ.SF6Toggle = @[Common.722.SF6] +Entities.gmod_subway_81-722.Buttons.PPZ.SF7Toggle = @[Common.722.SF7] +Entities.gmod_subway_81-722.Buttons.PPZ.SF8Toggle = @[Common.722.SF8] +Entities.gmod_subway_81-722.Buttons.PPZ.SF9Toggle = @[Common.722.SF9] +Entities.gmod_subway_81-722.Buttons.PPZ.R_UPOToggle = @[Common.722.UPO] +Entities.gmod_subway_81-722.Buttons.PPZ.SF01Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF10Toggle = @[Common.722.SF10] +Entities.gmod_subway_81-722.Buttons.PPZ.SF11Toggle = @[Common.722.SF11] +Entities.gmod_subway_81-722.Buttons.PPZ.SF12Toggle = @[Common.722.SF12] +Entities.gmod_subway_81-722.Buttons.PPZ.SF13Toggle = @[Common.722.SF13] +Entities.gmod_subway_81-722.Buttons.PPZ.SF02Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF14Toggle = @[Common.722.SF14] +Entities.gmod_subway_81-722.Buttons.PPZ.SF15Toggle = @[Common.722.SF15] +Entities.gmod_subway_81-722.Buttons.PPZ.SF16Toggle = @[Common.722.SF16] +Entities.gmod_subway_81-722.Buttons.PPZ.SF17Toggle = @[Common.722.SF17] +Entities.gmod_subway_81-722.Buttons.PPZ.SF18Toggle = @[Common.722.SF18] +Entities.gmod_subway_81-722.Buttons.PPZ.SF19Toggle = @[Common.722.SF19] +Entities.gmod_subway_81-722.Buttons.PPZ.SF20Toggle = @[Common.722.SF20] +Entities.gmod_subway_81-722.Buttons.PPZ.SF21Toggle = @[Common.722.SF21] +Entities.gmod_subway_81-722.Buttons.PPZ.SF22Toggle = @[Common.722.SF22] +Entities.gmod_subway_81-722.Buttons.PPZ.SF23Toggle = @[Common.722.SF23] +Entities.gmod_subway_81-722.Buttons.PPZ.SF24Toggle = @[Common.722.SF24] +Entities.gmod_subway_81-722.Buttons.PPZ.SF25Toggle = @[Common.722.SF25] +Entities.gmod_subway_81-722.Buttons.PPZ.SF26Toggle = @[Common.722.SF26] +Entities.gmod_subway_81-722.Buttons.PPZ.SF27Toggle = @[Common.722.SF27] +Entities.gmod_subway_81-722.Buttons.PPZ.SF03Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF04Toggle = @[Common.ALL.Unsused1] + +Entities.gmod_subway_81-722.Buttons.PVZ.SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-722.Buttons.PVZ.1:SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-722.Buttons.PVZ.SF32Toggle = @[Common.722.SF32] +Entities.gmod_subway_81-722.Buttons.PVZ.SF33Toggle = @[Common.722.SF33] +Entities.gmod_subway_81-722.Buttons.PVZ.SF34Toggle = @[Common.722.SF34] +Entities.gmod_subway_81-722.Buttons.PVZ.SF35Toggle = @[Common.722.SF35] +Entities.gmod_subway_81-722.Buttons.PVZ.SF36Toggle = @[Common.722.SF36] +Entities.gmod_subway_81-722.Buttons.PVZ.SF37Toggle = @[Common.722.SF37] +Entities.gmod_subway_81-722.Buttons.PVZ.SF38Toggle = @[Common.722.SF38] +Entities.gmod_subway_81-722.Buttons.PVZ.SF41Toggle = @[Common.722.SF41] +Entities.gmod_subway_81-722.Buttons.PVZ.SF42Toggle = @[Common.722.SF42] +Entities.gmod_subway_81-722.Buttons.PVZ.SF43Toggle = @[Common.722.SF43] +Entities.gmod_subway_81-722.Buttons.PVZ.SF44Toggle = @[Common.722.SF44] +Entities.gmod_subway_81-722.Buttons.PVZ.SF45Toggle = @[Common.722.SF45] +Entities.gmod_subway_81-722.Buttons.PVZ.SF46Toggle = @[Common.722.SF46] +Entities.gmod_subway_81-722.Buttons.PVZ.SF47Toggle = @[Common.722.SF47] +Entities.gmod_subway_81-722.Buttons.PVZ.SF48Toggle = @[Common.722.SF48] +Entities.gmod_subway_81-722.Buttons.PVZ.SF49Toggle = @[Common.722.SF49] +Entities.gmod_subway_81-722.Buttons.PVZ.SF51Toggle = @[Common.722.SF51] +Entities.gmod_subway_81-722.Buttons.PVZ.SF52Toggle = @[Common.722.SF52] +Entities.gmod_subway_81-722.Buttons.PVZ.SF53Toggle = @[Common.722.SF53] +Entities.gmod_subway_81-722.Buttons.PVZ.SF54Toggle = @[Common.722.SF54] +Entities.gmod_subway_81-722.Buttons.PVZ.SF55Toggle = @[Common.722.SF55] +Entities.gmod_subway_81-722.Buttons.PVZ.SF56Toggle = @[Common.722.SF56] +Entities.gmod_subway_81-722.Buttons.PVZ.SF57Toggle = @[Common.722.SF57] +Entities.gmod_subway_81-722.Buttons.PVZ.SF58Toggle = @[Common.722.SF58] +Entities.gmod_subway_81-722.Buttons.PVZ.SF59Toggle = @[Common.722.SF59] + +Entities.gmod_subway_81-722.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-722.Buttons.CabinDoorL.CabinDoorLeft = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-722.Buttons.CabinDoorR.CabinDoorRight = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-722.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-722.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-722.Buttons.Isolations.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.Isolations.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.StopKran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-722.Buttons.StopKran.UAVAToggle = @[Common.ALL.UAVA2] +Entities.gmod_subway_81-722.Buttons.BTO.K29Toggle = @[Common.ALL.KRMH] +Entities.gmod_subway_81-722.Buttons.BTO.K9Toggle = @[Common.ALL.RVTB] + +#gmod_subway_81-723 +Entities.gmod_subway_81-723.Buttons.PVZ.SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-723.Buttons.PVZ.1:SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-723.Buttons.PVZ.SF32Toggle = @[Common.722.SF32] +Entities.gmod_subway_81-723.Buttons.PVZ.SF33Toggle = @[Common.722.SF33] +Entities.gmod_subway_81-723.Buttons.PVZ.SF34Toggle = @[Common.722.SF34] +Entities.gmod_subway_81-723.Buttons.PVZ.SF35Toggle = @[Common.722.SF35] +Entities.gmod_subway_81-723.Buttons.PVZ.SF36Toggle = @[Common.722.SF36] +Entities.gmod_subway_81-723.Buttons.PVZ.SF37Toggle = @[Common.722.SF37] +Entities.gmod_subway_81-723.Buttons.PVZ.SF38Toggle = @[Common.722.SF38] +Entities.gmod_subway_81-723.Buttons.PVZ.SF41Toggle = @[Common.722.SF41] +Entities.gmod_subway_81-723.Buttons.PVZ.SF42Toggle = @[Common.722.SF42] +Entities.gmod_subway_81-723.Buttons.PVZ.SF43Toggle = @[Common.722.SF43] +Entities.gmod_subway_81-723.Buttons.PVZ.SF44Toggle = @[Common.722.SF44] +Entities.gmod_subway_81-723.Buttons.PVZ.SF45Toggle = @[Common.722.SF45] +Entities.gmod_subway_81-723.Buttons.PVZ.SF46Toggle = @[Common.722.SF46] +Entities.gmod_subway_81-723.Buttons.PVZ.SF47Toggle = @[Common.722.SF47] +Entities.gmod_subway_81-723.Buttons.PVZ.SF48Toggle = @[Common.722.SF48] +Entities.gmod_subway_81-723.Buttons.PVZ.SF49Toggle = @[Common.722.SF49] +Entities.gmod_subway_81-723.Buttons.PVZ.SF51Toggle = @[Common.722.SF51] +Entities.gmod_subway_81-723.Buttons.PVZ.SF52Toggle = @[Common.722.SF52] +Entities.gmod_subway_81-723.Buttons.PVZ.SF53Toggle = @[Common.722.SF53] +Entities.gmod_subway_81-723.Buttons.PVZ.SF54Toggle = @[Common.722.SF54] +Entities.gmod_subway_81-723.Buttons.PVZ.SF55Toggle = @[Common.722.SF55] +Entities.gmod_subway_81-723.Buttons.PVZ.SF56Toggle = @[Common.722.SF56] +Entities.gmod_subway_81-723.Buttons.PVZ.SF57Toggle = @[Common.722.SF57] +Entities.gmod_subway_81-723.Buttons.PVZ.SF58Toggle = @[Common.722.SF58] +Entities.gmod_subway_81-723.Buttons.PVZ.SF59Toggle = @[Common.722.SF59] + +Entities.gmod_subway_81-723.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-723.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-723.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-723.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +Entities.gmod_subway_81-723.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-723.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] + + +#gmod_subway_81-724 +#Buttons: +Entities.gmod_subway_81-724.Buttons.PVZ.SF34Toggle = @[Common.722.SF34] +Entities.gmod_subway_81-724.Buttons.PVZ.SF35Toggle = @[Common.722.SF35] +Entities.gmod_subway_81-724.Buttons.PVZ.SF36Toggle = @[Common.722.SF36] +Entities.gmod_subway_81-724.Buttons.PVZ.SF41Toggle = @[Common.722.SF41] +Entities.gmod_subway_81-724.Buttons.PVZ.SF42Toggle = @[Common.722.SF42] +Entities.gmod_subway_81-724.Buttons.PVZ.SF43Toggle = @[Common.722.SF43] +Entities.gmod_subway_81-724.Buttons.PVZ.SF44Toggle = @[Common.722.SF44] +Entities.gmod_subway_81-724.Buttons.PVZ.SF45Toggle = @[Common.722.SF45] +Entities.gmod_subway_81-724.Buttons.PVZ.SF46Toggle = @[Common.722.SF46] +Entities.gmod_subway_81-724.Buttons.PVZ.SF47Toggle = @[Common.722.SF47] +Entities.gmod_subway_81-724.Buttons.PVZ.SF48Toggle = @[Common.722.SF48] +Entities.gmod_subway_81-724.Buttons.PVZ.SF51Toggle = @[Common.722.SF51] +Entities.gmod_subway_81-724.Buttons.PVZ.SF52Toggle = @[Common.722.SF52] +Entities.gmod_subway_81-724.Buttons.PVZ.SF53Toggle = @[Common.722.SF53] +Entities.gmod_subway_81-724.Buttons.PVZ.SF54Toggle = @[Common.722.SF54] +Entities.gmod_subway_81-724.Buttons.PVZ.SF55Toggle = @[Common.722.SF55] + +Entities.gmod_subway_81-724.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-724.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-724.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-724.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +Entities.gmod_subway_81-724.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-724.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] + +#Spawner: +Entities.gmod_subway_81-722.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-722.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-722.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-722.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-722.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-722.Spawner.SarmatInvert.Name = @[Common.Spawner.SchemeInvert] +Entities.gmod_subway_81-722.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-722.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-722.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-722.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-722.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] + +]] diff --git a/lua/metrostroi_data/languages/fr_base.lua b/lua/metrostroi_data/languages/fr_base.lua new file mode 100644 index 0000000..4947b88 --- /dev/null +++ b/lua/metrostroi_data/languages/fr_base.lua @@ -0,0 +1,446 @@ +return [[ +#Base text for French language + +[fr] +lang = Français #Full language name +AuthorText = Traducteur: Link-Skywalker #Author text + +#Workshop errors +Workshop.Title = Gestionnaire de contenu +Workshop.FilesMissing = Certains fichiers d'extension sont manquants ou corrompus.\nSi l'extension a été installée via le Workshop, supprimez ce fichier :\nGarrysMod/garrysmod/%s. +Workshop.FilesMissingLocaly = Certains fichiers d'extension sont manquants ou corrompus. +Workshop.InstalledLocaly = Installé (local) +Workshop.NotInstalledE = Non installé.\nAbonnez vous à l'extension et vérifier le menu "Addons". +Workshop.NotInstalled = Non installé. +Workshop.Disabled = Désactivé.\nActivez-le dans le menu "Addons" +Workshop.Installed = Installé +Workshop.Open = Workshop +Workshop.ErrorGithub = Version GitHub de Metrostroi détectée. La version actuelle de Metrostroi n'est pas pas compatible et ne fonctionne pas en version GitHub. +Workshop.ErrorLegacy = Version Legacy (alpha) de Metrostroi détectée. La version actuelle de Metrostroi n'est pas pas compatible et ne fonctionne pas en version Legacy (alpha). +Workshop.ErrorEnhancers = Cet addon contient un mod graphique susceptible d'interférer avec l'expérience de jeu. +Workshop.Error1 = Cette extension contient un ancien code de script de Metrostroi qui crée un conflit avec l'actuel. Cela peut créer des "Scripts errors" et une instabilité de l'extension. +Workshop.ErrorOld = Anciens modèles détectés (ancien modèles des 81-702 et 81-717). Supprimez les anciens fichiers de contenu de Metrostroi du dossier "Addons", supprimez les fichiers "Cache", "Download" et "Downloads", du dossier principal Garry's Mod. + +#Client settings +Panel.Admin = Administrateur +Panel.RequireThirdRail = Requiert un troisième rail + +Panel.Client = Client +Panel.Language = Sélectionner la langue +Panel.DrawCams = Rendu des caméras +Panel.DisableHUD = Désactive le HUD sur le siège du conducteur +Panel.DisableCamAccel = Désactive l'accéleration de caméra +Panel.DisableHoverText = Désactive le texte de légende +Panel.DisableHoverTextP = Disable additional information\nin tooltips #NEW +Panel.ScreenshotMode = Mode screenshot (IPS bas) +Panel.ShadowsHeadlight = Active les ombres des phares +Panel.RedLights = Activer la lumière dynamique\ndes feux rouges +Panel.ShadowsOther = Active les ombres d'autres\nsources de lumière +Panel.MinimizedShow = Empêche la \ndisparition d'éléments +Panel.PanelLights = Enable dynamic lights\nfrom panel lamps #NEW +Panel.RouteNumber = Route number #NEW +Panel.FOV = Champ de vision (FOV) +Panel.Z = Hauteur de caméra +Panel.RenderDistance = Rendu à distance +Panel.ReloadClient = Redémarrer le client + +Panel.ClientAdvanced = Client (avancé) +Panel.DrawDebugInfo = Afficher les informations de debug +Panel.DrawSignalDebugInfo = Infos de débogage de signalisation +Panel.CheckAddons = Rechercher les extensions +Panel.ReloadLang = Recharger les langues +Panel.SoftDraw = Temps de chargement des éléments de train +Panel.SoftReloadLang = Désactive la recharge du spawnmenu + + + +#Common train +Train.Common.Camera0 = Siège du conducteur +Train.Common.RouteNumber = Numéro de route +Train.Common.LastStation = Dernière station +Train.Common.HelpersPanel = Tableau de bord de l'assistant +Train.Common.UAVA = UAVA +Train.Common.PneumoPanels = Valves pneumatiques +Train.Common.Voltmeters = Voltmètres et ampèremètres +Train.Common.CouplerCamera = Atteleur +Common.ARM.Monitor1 = Moniteur ARM 1 + +Train.Buttons.Sealed = Scellé +Train.Buttons.Active = Active #NEW +Train.Buttons.Auto = Auto #NEW +Train.Buttons.On = On #NEW +Train.Buttons.Off = Off #NEW +Train.Buttons.Closed = Closed #NEW +Train.Buttons.Opened = Opened #NEW +Train.Buttons.Disconnected = Disconnected #NEW +Train.Buttons.Connected = Connected #NEW +Train.Buttons.UAVAOff = Control circuits isolated #NEW +Train.Buttons.UAVAOn = Control circuits active #NEW +Train.Buttons.Freq1/5 = 1/5 AB #NEW +Train.Buttons.Freq2/6 = 2/6 ALS-ARS #NEW +Train.Buttons.Left = Left #NEW +Train.Buttons.Right = Right #NEW +Train.Buttons.Low = Low #NEW +Train.Buttons.High = High #NEW +Train.Buttons.LFar = Distant light #NEW #FIXME +Train.Buttons.LNear = Near light #NEW #FIXME +Train.Buttons.0 = 0 #NEW +Train.Buttons.1 = 1 #NEW +Train.Buttons.2 = 2 #NEW +Train.Buttons.3 = 3 #NEW +Train.Buttons.4 = 4 #NEW +Train.Buttons.Forward = Forward #NEW +Train.Buttons.Back = Backward #NEW #FIXME +Train.Buttons.VentHalf = 1/2 of speed #NEW +Train.Buttons.VentFull = Full speed #NEW +Train.Buttons.VTRF = Forward oriented wagons #NEW +Train.Buttons.VTRB = Back oriented wagons #NEW +Train.Buttons.VTR1 = Even wagons #NEW +Train.Buttons.VTR2 = Odd wagons #NEW +Train.Buttons.VTRH1 = First half of train #NEW +Train.Buttons.VTRH2 = Second half of train #NEW +Train.Buttons.VTRAll = All wagons #NEW + +Train.Buttons.BatteryVoltage = %d V #NEW +Train.Buttons.HighVoltage = %d V #NEW +Train.Buttons.BatteryCurrent = %d A #NEW +Train.Buttons.EnginesCurrent = %d A #NEW +Train.Buttons.Speed = %d km/h #NEW +Train.Buttons.SpeedAll = %d km/h Speed limit:%s km/h #NEW +Train.Buttons.SpeedLimit = %s km/h #NEW +Train.Buttons.SpeedLimitNext = %s km/h #NEW +Train.Buttons.04 = NF #NEW +Train.Buttons.BCPressure = %.1f bar #NEW +Train.Buttons.BLTLPressure = TL: %.1f BL:%.1f bar #NEW + +#Train entities +Entities.gmod_subway_base.Name = Base de métro +Entities.gmod_subway_81-502.Name = 81-502 (Ema-502, tête) +Entities.gmod_subway_81-501.Name = 81-501 (Em-501, intermédiaire) +Entities.gmod_subway_81-702.Name = 81-702 (D, tête) +Entities.gmod_subway_81-702_int.Name = 81-702 (D, intermédiaire) +Entities.gmod_subway_81-703.Name = 81-703 (E, tête) +Entities.gmod_subway_81-703_int.Name = 81-703 (E, intermédiaire) +Entities.gmod_subway_ezh.Name = 81-707 (Ezh, tête) +Entities.gmod_subway_ezh1.Name = 81-708 (Ezh1, intermédiaire) +Entities.gmod_subway_ezh3.Name = 81-710 (Ezh3, tête) +Entities.gmod_subway_em508t.Name = 81-508T (Em-508T intermédiaire) +Entities.gmod_subway_81-717_mvm.Name = 81-717 (Moscou, tête) +Entities.gmod_subway_81-717_mvm_custom.Name = 81-717 (Moscou, customisé) +Entities.gmod_subway_81-714_mvm.Name = 81-714 (Moscou, intermédiaire) +Entities.gmod_subway_81-717_lvz.Name = 81-717 (St. Petersbourg, tête) +Entities.gmod_subway_81-714_lvz.Name = 81-714 (St. Petersbourg, intermédiaire) +Entities.gmod_subway_81-718.Name = 81-718 (TISU, tête) +Entities.gmod_subway_81-719.Name = 81-719 (TISU, intermédiaire) +Entities.gmod_subway_81-720.Name = 81-720 (Yauza, tête) +Entities.gmod_subway_81-721.Name = 81-721 (Yauza, intermédiaire) +Entities.gmod_subway_81-722.Name = 81-722 (Yubileyniy, tête) +Entities.gmod_subway_81-723.Name = 81-723 (Yubileyniy, intermédiaire automoteur) +Entities.gmod_subway_81-724.Name = 81-724 (Yubileyniy, intermédiaire non moteur) +Entities.gmod_subway_81-7036.Name = 81-7036 (Ne fonctionne pas) +Entities.gmod_subway_81-7037.Name = 81-7037 (Ne fonctionne pas) +Entities.gmod_subway_tatra_t3.Name = Tatra T3 + +#Train util entities +Entities.gmod_train_bogey.Name = Bogie +Entities.gmod_train_couple.Name = Coupleur + +#Other entities +Entities.gmod_track_pui.Name = PUI +Entities.gmod_track_mus_elektronika7.Name = Horloge "Electronika" +Entities.gmod_mus_clock_analog.Name = Horloge analogique +Entities.gmod_track_clock_time.Name = Grande horloge digitale (heure) +Entities.gmod_track_clock_small.Name = Petite horloge digitale +Entities.gmod_track_clock_interval.Name = Grande horloge digitale (interval) +Entities.gmod_track_switch.Name = Aiguillage +Entities.gmod_track_powermeter.Name = Capteur de puissance +Entities.gmod_track_arm.Name = ARM DSCP +Entities.gmod_track_udochka.Name = Connecteur d'alimentation +Entities.gmod_train_spawner.Name = Train spawneur +Entities.gmod_train_special_box.Name = Livrée spéciale + +#Weapons +Weapons.button_presser.Name = Appuyeur de bouton +Weapons.button_presser.Purpose = Utilisé pour appuyer sur les boutons des maps. +Weapons.button_presser.Instructions = Maintenez le bouton et appuyez sur le bouton "Attaquer". +Weapons.train_key.Name = Clé d'administrateur +Weapons.train_key.Purpose = UUtilisé pour activer les boutons réservés aux administrateurs. +Weapons.train_key.Instructions = Maintenez le bouton et appuyez sur le bouton "Attaquer". +Weapons.train_kv_wrench.Name = Clé d'inverseur +Weapons.train_kv_wrench.Purpose = Utilisé dans le train pour appuyer sur les boutons à l'intérieur. +Weapons.train_kv_wrench.Instructions = Maintenez le bouton dans le train et appuyez sur le bouton "Attaquer". +Weapons.train_kv_wrench_gold.Name = La clé d'inverseur en or + +Weapons.train_kv_wrench_gold.Purpose = @[Weapons.train_kv_wrench.Purpose] +Weapons.train_kv_wrench_gold.Instructions = @[Weapons.train_kv_wrench.Instructions] + +#Spawner common +Spawner.Title = Train spawneur +Spawner.Spawn = Spawn +Spawner.Close = Fermer +Spawner.Trains1 = Voit. autorisées +Spawner.Trains2 = Par joueur +Spawner.WagNum = Nombre de voitures +Common.Spawner.Texture = Skin d'extérieur +Common.Spawner.PassTexture = Skin d'intérieur +Common.Spawner.CabTexture = Skin de cabine +Common.Spawner.Announcer = Type d'annonceur +Common.Spawner.Type1 = Type 1 +Common.Spawner.Type2 = Type 2 +Common.Spawner.Type3 = Type 3 +Common.Spawner.Type4 = Type 4 +Common.Spawner.SpawnMode = Etat du train +Common.Spawner.SpawnMode.Deadlock = Heurtoir +Common.Spawner.SpawnMode.Full = Complètement démarré +Common.Spawner.SpawnMode.NightDeadlock = Heurtoir de nuit +Common.Spawner.SpawnMode.Depot = Dépot +Spawner.Common.EType = Type de circuits électriques +Common.Spawner.Scheme = Schémas de ligne +Common.Spawner.Random = Aléatoire +Common.Spawner.Old = Ancien +Common.Spawner.New = Neuf +Common.Spawner.Type = Type +Common.Spawner.SchemeInvert = Inverser les schémas de ligne + +#Coupler common +Common.Couple.Title = Menu d'attelage +Common.Couple.CoupleState = Etat des atteleurs +Common.Couple.Coupled = Attelé +Common.Couple.Uncoupled = Non attelé +Common.Couple.Uncouple = Dételer +Common.Couple.IsolState = Etat de l'isolation des valves +Common.Couple.Isolated = Fermé +Common.Couple.Opened = Ouvert +Common.Couple.Open = Ouvrir +Common.Couple.Isolate = Fermer +Common.Couple.EKKState = Etat de l'EKK (connexion électrique) +Common.Couple.Disconnected = Déconnecté +Common.Couple.Connected = Connecté +Common.Couple.Connect = Connecter +Common.Couple.Disconnect = Déconnecter + +#Bogey common +Common.Bogey.Title = Menu des bogies +Common.Bogey.ContactState = Etat des collecteurs de courant +Common.Bogey.CReleased = Relâché +Common.Bogey.CPressed = Appuyé +Common.Bogey.CPress = Appuyer +Common.Bogey.CRelease = Relâcher +Common.Bogey.ParkingBrakeState = Etat du frein de parking +Common.Bogey.PBDisabled = Manuellement désactivé +Common.Bogey.PBEnabled = Activé +Common.Bogey.PBEnable = Activer +Common.Bogey.PBDisable = Désactiver manuellement + +#Trains common +Common.ALL.Unsused1 = Inutilisé +Common.ALL.Unsused2 = (inutilisé) +Common.ALL.Up = (haut) +Common.ALL.Down = (bas) +Common.ALL.Left = (gauche) +Common.ALL.Right = (droite) +Common.ALL.CW = (Sens horaire) +Common.ALL.CCW = (Sens contre horaire) +Common.ALL.VB = VB: Batterie on/off +Common.ALL.VSOSD = SOSD: Lampe d'ouverture des portes en station +Common.ALL.VKF = VKF: Batterie d'alimentation pour lumières rouges +Common.ALL.VB2 = (Circuits basse tension) +Common.ALL.VPR = VPR: Station radio du train +Common.ALL.VASNP = Alimentation ASNP +Common.ALL.UOS = RC-UOS: Limiteur de vitesse (conduite avec/sans EPV/EPK) +Common.ALL.VAH = VAH: Mode de conduite d'urgence (échec du relai RPB) +Common.ALL.KAH = KAH: Bouton de conduite d'urgence pour conduire avec/sans ARS +Common.ALL.KAHK = Couvercle du bouton KAH +Common.ALL.VAD = VAD: Outrepasseur de fermeture d'urgence des portes (échec du relai KD) +Common.ALL.OVT = OVT: Désactiver les valves de freins pneumatiques +Common.ALL.VOVT = VOVT: Eteindre le désactivateur des valves des freins pneumatiques +Common.ALL.EmergencyBrakeValve = Freinage d'urgence +Common.ALL.ParkingBrake = Frein de parking +Common.ALL.VU = VU: Contrôle du train +Common.ALL.KDP = KDP: Ouvrir les portes à droite +Common.ALL.KDPL = Les portes du côté droit sont sélectionnées +Common.ALL.KDPK = Couvercle du bouton des portes de droite +Common.ALL.KDL = KDL: Ouvrir les portes à gauche +Common.ALL.KDLL = Les portes du côté gauche sont sélectionnées +Common.ALL.KDLK = Couvercle du bouton des portes de gauche +Common.ALL.KDLPK = Couvercles des boutons des portes +Common.ALL.KRZD = KRZD: Fermeture d'urgence des portes +Common.ALL.VSD = Sélecteur du côté des portes +Common.ALL.Ring = Alarme +Common.ALL.VUD = VUD: Contrôle des portes (fermer les portes) +Common.ALL.KDPH = Ouvrir les portes à droite dans la dernière voiture +Common.ALL.VUD2 = VUD2: Fermer les portes du côté de l'assistant +Common.ALL.Program1 = Programme I +Common.ALL.Program2 = Programme II +Common.ALL.VRP = VRP: Recharger le relai de surcharge +Common.ALL.VRPBV = VRP: Redémarrer le relai de surcharge, activer le BV +Common.ALL.KSN = KSN: Malfonction de signalisation +Common.ALL.VMK = VMK: Compresseur +Common.ALL.MK = Compresseur +Common.ALL.VF1 = 1er groupe de phares +Common.ALL.VF2 = 2ème groupe de phares +Common.ALL.VF = Phares +Common.ALL.VUS = VUS: Phares lumineux/diminués +Common.ALL.GaugeLights = Eclairage des instruments +Common.ALL.CabLights = Eclairage de cabine +Common.ALL.PassLights = Eclairage du compatiment passager +Common.ALL.PanelLights = Eclairage du tableau de bord +Common.ALL.RMK = RMK: Compresseur d'urgence +Common.ALL.KRP = KRP: Bouton de démarrage d'urgence +Common.ALL.VZP = VZP: Départ automatique +Common.ALL.VZD = VZD: Ouverture/fermture automatique des portes +Common.ALL.VAV = VAV: Conduite automatique +Common.ALL.RouteNumber1+ = Augmenter le premier chiffre du numéro de route +Common.ALL.RouteNumber1- = Diminuer le premier chiffre du numéro de route +Common.ALL.RouteNumber2+ = Augmenter le deuxième chiffre du numéro de route +Common.ALL.RouteNumber2- = Diminuer le deuxième chiffre du numéro de route +Common.ALL.RouteNumber3+ = Augmenter le troisième chiffre du numéro de route +Common.ALL.RouteNumber3- = Diminuer le troisième chiffre du numéro de route +Common.ALL.LastStation+ = Terminus suivant +Common.ALL.LastStation- = Terminus précédent +Common.ALL.RRP = RP: Lampe relai de surcharge rouge (les circuits d'alimentation n'ont pas pu s'activer) +Common.ALL.GRP = RP: Lampe relai de surcharge verte (empêche la surintensité des moteurs) +Common.ALL.RP = RP: Lampe relai de surcharge rouge (les circuits d'alimentation n'ont pas pu s'activer ou RP activé) +Common.ALL.SN = LSN: Lampe d'indication d'échec (les circuits d'alimentation n'ont pas pu s'activer) +Common.ALL.PU = Le paramètre réduit est activé +Common.ALL.BrT = Les freins pneumatiques du train sont activés +Common.ALL.BrW = Les freins pneumatiques de voiture sont engagés +Common.ALL.ARS = ARS: Régulateur automatique de vitesse +Common.ALL.ARSR = ARS-R: Limiteur de vitesse en mode ARS-R +Common.ALL.ALS = ALS: Signallisation automatique de locomotive +Common.ALL.RCARS = RC-ARS: Déconnexion des circuits de l'ARS +Common.ALL.RC1 = RC-1: Déconnexion des circuits de l'ARS +Common.ALL.EPK = ARS Valve électro-pneumatique (EPK) +Common.ALL.EPV = ARS Valve électro-pneumatique (EPV) +Common.ARS.LN = LN: Signal de direction +Common.ARS.KT = KT: Lampe de contrôle de frein +Common.ARS.VD = VD: Le mode de conduite est désactivé par l'ARS +Common.ARS.Freq = Décodeur de l'ALS +Common.ARS.FreqD = (haut 1/5, bas 2/6) +Common.ARS.FreqU = (haut 2/6, bas 1/5) +Common.ARS.VP = Mode "train auxiliaire" +Common.ARS.RS = RS: Lampe de vitesse positive (le prochain segment a une limite de vitesse supérieure ou égale à l'actuelle) +Common.ARS.AB = Mode d'autoblocage de l'ARS +Common.ARS.ABButton = Bouton du mode d'autoblocage de l'ARS +Common.ARS.ABDriver = (conducteur) +Common.ARS.ABHelper = (assistant) +Common.ARS.AV = Malfonction de l'unité ARS-MP principale +Common.ARS.AV1 = Malfonction de l'unité ARS-MP auxiliaire +Common.ARS.AB2 = Bouton du mode d'autoblocage de l'ARS +Common.ARS.ARS = Mode d'ARS +Common.ARS.LRD = LRD: Permission d'avancer (si 0 sur l'ALS) +Common.ARS.VRD = VRD: Autoriser le mouvement(si 0 sur l'ALS) +Common.ARS.KB = KB: Bouton d'avertissement +Common.ARS.KVT = KVT: Bouton de confirmation de freinage +Common.ARS.KVTR = KVT: Bouton de confirmation d'ARS-R +Common.ARS.04 = OCh: Absence de fréquence ARS +Common.ARS.0 = 0 : Signal d'arrêt ARS +Common.ARS.N4 = NCh: Absence de fréquence ARS +Common.ARS.40 = Limitation de vitesse : 40 km/h +Common.ARS.60 = Limitation de vitesse : 60 km/h +Common.ARS.70 = Limitation de vitesse : 70 km/h +Common.ARS.80 = Limitation de vitesse : 80 km/h +Common.ALL.RCBPS = RC-BPS: Unité d'anti roulement +Common.BPS.On = Unité d'antiroulement activée +Common.BPS.Err = Erreur de l'unité d'anti roulement +Common.BPS.Fail = Malfonction de l'unité d'anti roulement +Commom.NMnUAVA.NMPressureLow = Lampe de basse pression dans la conduite principale +Commom.NMnUAVA.UAVATriggered = Les contacts de l'UAVA sont ouverts +Common.ALL.LSD = Lampe d'état des portes (Les portes sont fermées) +Common.ALL.L1w = Lampe du 1er câble (mode de conduite engagé) +Common.ALL.L2w = Lampe du 2ème câble (manette rhéostat en mouvement) +Common.ALL.L6w = Lampe du 6ème câble (mode frein engagé) +Common.ALL.Horn = Sifflet +Common.ALL.DriverValveBLDisconnect = Déconnecter la valve de conduite générale +Common.ALL.DriverValveTLDisconnect = Déconnecter la valve de conduite principale +Common.ALL.DriverValveDisconnect = Valve de déconnexion de la valve du conducteur +Common.ALL.KRMH = Activer la valve d'urgence du conducteur +Common.ALL.RVTB = RVTB: Valve dédiée au frein de sécurité +Common.ALL.FrontBrakeLineIsolationToggle = Robinet d'arrêt de la conduite générale +Common.ALL.FrontTrainLineIsolationToggle = Robinet d'arrêt de la conduite principale +Common.ALL.RearTrainLineIsolationToggle = Robinet d'arrêt de la conduite générale +Common.ALL.RearBrakeLineIsolationToggle = Robinet d'arrêt de la conduite principale +Common.ALL.UAVA = UAVA: Désactiver l'autostop\n(peut être activé après que la pression de la conduite générale soit tombée) +Common.ALL.UAVA2 = UAVA: Désactiver l'autostop +Common.ALL.UAVAContact = Réinitialiser les contacts de l'UAVA +Common.ALL.OAVU = OAVU: Désactiver l'AVU +Common.ALL.LAVU = L'AVU est activé +Common.ALL.GV = Interrupteur principal +Common.ALL.AirDistributor = VRN: Désactivateur du distributeur d'air +Common.ALL.CabinDoor = Porte de cabine +Common.ALL.PassDoor = Porte du compartiment passager +Common.ALL.FrontDoor = Porte avant +Common.ALL.RearDoor = Porte arrière +Common.ALL.OtsekDoor1 = Poignée du 1er compartiment d'équipement +Common.ALL.OtsekDoor2 = Poignée du 2ème compartiment d'équipement +Common.ALL.CouchCap = Extraire le siège + +Common.ALL.UNCh = UNCh: Amplificateur de basse fréquence +Common.ALL.ES = ES: Contrôle des communications d'urgence +Common.ALL.GCab = Haut-parleur: Son en cabine +Common.ALL.UPO = UPO: Annonceur +Common.ALL.R_Radio = Annonceur +Common.ALL.AnnPlay = Lampe d'annonceur en playback + +#RRI +Train.Common.RRI = RRI: Relai radio de l'annonceur +Common.RRI.RRIUp = RRI: Configuration haut +Common.RRI.RRIDown = RRI: Configuration bas +Common.RRI.RRILeft = RRI: Configuration gauche +Common.RRI.RRIRight = RRI: Configuration droite +Common.RRI.RRIEnableToggle = RRI: Alimentation +Common.RRI.RRIRewindSet2 = RRI: Accélérer +Common.RRI.RRIRewindSet0 = RRI: Rembobiner +Common.RRI.RRIAmplifierToggle = RRI: Amplifier +Common.RRI.RRIOn = Lampe d'opération RRI + +#ASNP +Train.Common.ASNP = ASNP +Common.ASNP.ASNPMenu = ASNP: Menu +Common.ASNP.ASNPUp = ASNP: Haut +Common.ASNP.ASNPDown = ASNP: Bas +Common.ASNP.ASNPOn = ASNP: Alimentation + +#PVK +Common.CabVent.PVK- = Réduit l'alimentation de la ventilation en cabine +Common.CabVent.PVK+ = Augmente l'alimentation de la ventilation en cabine + +#IGLA +Train.Common.IGLA = IGLA +Common.IGLA.Button1Up = IGLA: Premier bouton haut +Common.IGLA.Button1 = IGLA: Premier bouton +Common.IGLA.Button1Down = IGLA: Premier bouton bas +Common.IGLA.Button2Up = IGLA: Deuxième bouton haut +Common.IGLA.Button2 = IGLA: Deuxième bouton +Common.IGLA.Button2Down = IGLA: Deuxième bouton bas +Common.IGLA.Button23 = IGLA: Deuxième et troisième boutons +Common.IGLA.Button3 = IGLA: Troisième bouton +Common.IGLA.Button4 = IGLA: Quatrième bouton +Common.IGLA.IGLASR = IGLA: Alimentation +Common.IGLA.IGLARX = IGLA: Pas de connexion +Common.IGLA.IGLAErr = IGLA: Erreur +Common.IGLA.IGLAOSP = IGLA: Les sytèmes d'extinction des feux sont activés +Common.IGLA.IGLAPI = IGLA: Feu +Common.IGLA.IGLAOff = IGLA: Circuits haute tension désactivés + +#BZOS +Common.BZOS.On = Interrupteur d'alarme de sécurité +Common.BZOS.VH1 = L'alarme de sécurité est activée +Common.BZOS.VH2 = L'alarme de sécurité est déclenchée +Common.BZOS.Engaged = L'alarme de sécurité est déclenchée + +#Train helpers common +Common.ALL.SpeedCurr = Vitesse actuelle +Common.ALL.SpeedAccept = Vitesse autorisée +Common.ALL.SpeedAttent = Vitesse autorisée sur la prochaine section +Common.ALL.Speedometer = Speedomètre +Common.ALL.BLTLPressure = Pression dans les tyuaux pneumatiques (rouge: conduite générale, noir: conduite principale) +Common.ALL.BCPressure = Pression des cylindres de frein +Common.ALL.EnginesCurrent = Courant des moteurs (A) +Common.ALL.EnginesCurrent1 = Courant des 1ers moteurs de traction (A) +Common.ALL.EnginesCurrent2 = Courant des 2èmes moteurs de traction (A) +Common.ALL.EnginesVoltage = Tension des moteurs (kV) +Common.ALL.BatteryVoltage = Tension de batterie (V) +Common.ALL.BatteryCurrent = Courant de batterie (A) +Common.ALL.HighVoltage = Haute tension (kV) +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/hu_502.lua b/lua/metrostroi_data/languages/hu_502.lua new file mode 100644 index 0000000..a16e552 --- /dev/null +++ b/lua/metrostroi_data/languages/hu_502.lua @@ -0,0 +1,274 @@ +return [[ +#81-502 + +[hu] + +#######Buttons########### +#Common +Common.502.KS = KSAUP üzem visszajelzÅ‘ +Common.502.AV = Automatikus vonatvezérlés üzemben +Common.502.SD = SD: Ajtó állapot (Ajtók zárva) +Common.502.SDW = SD: Ajtó állapot (Ajtók nyitva) +Common.502.L3w = Harmadik visszajelzÅ‘ lámpa (X3 mód) +Common.502.L4w = Negyedik visszajelzÅ‘ lámpa (hátramenet) +Common.502.L5w = Ötödik visszajelzÅ‘ lámpa (elÅ‘remenet) +Common.502.L16w = Hatodik visszajelzÅ‘ lámpa (ajtó retesz) +Common.502.L20w = Huszadik visszajelzÅ‘ lámpa (LK2 és LK5 zárt) +Common.502.L23w = Huszonharmadik visszajelzÅ‘ lámpa (kompresszor vezérlés) +Common.502.RK1 = ElsÅ‘ RK pozíció vezérlése +Common.502.BRD = Ajtóhiba visszajelzÅ‘ +Common.502.KOS = KB: Sebességhatár gomb (éberségi gomb) +Common.502.VAK = AK: Szükségmenet áramkörei gomb +Common.502.LRU = Szükségmenet áramkörei üzemben + +#Spawner +Spawner.502.TypeNVL = Vonat az NVL-bÅ‘l +Spawner.502.TypeKVLO = Régi vonat a KVL-bÅ‘l +Spawner.502.TypeKVLN = Új vonat a KVL-bÅ‘l +Spawner.502.EWagons = "E" típusú közbensÅ‘ kocsik hozzáadása + +#gmod_subway_81-502 +Entities.gmod_subway_81-502.Buttons.VBA.VBAToggle = Automatikus vonatvezérlés akkumulátor(be/ki) + +Entities.gmod_subway_81-502.Buttons.AV.VRUToggle = VRU: Szükségmenet +Entities.gmod_subway_81-502.Buttons.AV.KPVUToggle = KPVU: Pneumatikus vezérlés kikapcsoló +Entities.gmod_subway_81-502.Buttons.AV.KSDToggle = KSD: Ajtó reteszelÅ‘ egység vezérlés kikapcsoló +Entities.gmod_subway_81-502.Buttons.AV.KAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-502.Buttons.AV.KADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-502.Buttons.AV.OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-502.Buttons.AV.VKFToggle = @[Common.ALL.VKF] + + +Entities.gmod_subway_81-502.Buttons.RCAV3.RCAV3Toggle = KSAUP áramkör szakaszoló (AV3) +Entities.gmod_subway_81-502.Buttons.RCAV4.RCAV4Toggle = KSAUP áramkör szakaszoló (AV4) +Entities.gmod_subway_81-502.Buttons.RCAV5.RCAV5Toggle = KSAUP áramkör szakaszoló (AV5) +Entities.gmod_subway_81-502.Buttons.RCARS.RCARSToggle = @[Common.ALL.RCARS] +Entities.gmod_subway_81-502.Buttons.RCBPS.RCBPSToggle = @[Common.ALL.RCBPS] + +Entities.gmod_subway_81-502.Buttons.VRD2.2:VRDSet = @[Common.ARS.VRD] +Entities.gmod_subway_81-502.Buttons.VRD2.!LVRD = @[Common.ARS.LRD] + +Entities.gmod_subway_81-502.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-502.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-502.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-502.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-502.Buttons.AV1.VU3Toggle = @[Common.703.VU3] +Entities.gmod_subway_81-502.Buttons.UPO.R_UPOToggle = @[Common.ALL.UPO] + +Entities.gmod_subway_81-502.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_81-502.Buttons.VRD.VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-502.Buttons.HelperPanel.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.HelperPanel.KDPHSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-502.Buttons.AV2.VSOSDToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-502.Buttons.AV2.VRToggle = @[Common.ALL.VPR] + +Entities.gmod_subway_81-502.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLampAutodrive = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LDoorsWag = @[Common.502.SDW] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LDoors = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LGreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LRedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLampAutodrive = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RDoorsWag = @[Common.502.SDW] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RDoors = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RGreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RRedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_80 = @[Common.ARS.80] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_70 = @[Common.ARS.70] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_60 = @[Common.ARS.60] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_40 = @[Common.ARS.40] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_00 = @[Common.ARS.0] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_04 = @[Common.ARS.N4] + +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_KS = @[Common.502.KS] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_AV = @[Common.502.AV] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_4 = @[Common.502.L4w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_5 = @[Common.502.L5w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_DT = @[Common.ALL.BrT] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_20 = @[Common.502.L20w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_1P = @[Common.502.RK1] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SN1 = @[Common.ALL.RP] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SN2 = @[Common.ALL.SN] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_3 = @[Common.502.L3w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SD1 = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SD2 = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_RP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_DV = @[Common.502.BRD] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!CPS_Pd = @[Common.ARS.LRD] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_04 = @[Common.ARS.04] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_00 = @[Common.ARS.0] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_40 = @[Common.ARS.40] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_60 = @[Common.ARS.60] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_70 = @[Common.ARS.70] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_80 = @[Common.ARS.80] + +Entities.gmod_subway_81-502.Buttons.Main1.2:VUSToggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-502.Buttons.Main1.2:HeadlightsToggle = @[Common.ALL.VF1] +Entities.gmod_subway_81-502.Buttons.Main1.!LKTLight = @[Common.ARS.KT] +Entities.gmod_subway_81-502.Buttons.Main1.!LKVDLight = @[Common.ARS.VD] +Entities.gmod_subway_81-502.Buttons.Main1.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-502.Buttons.Main1.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-502.Buttons.Main1.2:KBSet = @[Common.ARS.KB] +Entities.gmod_subway_81-502.Buttons.Main1.2:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.Main1.2:LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-502.Buttons.Main1.2:LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-502.Buttons.Main1.2:VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-502.Buttons.Main1.2:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-502.Buttons.Main1.2:KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-502.Buttons.Main1.2:VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-502.Buttons.Main1.2:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-502.Buttons.Main1.2:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-502.Buttons.Main1.2:VAKSet = @[Common.502.VAK] +Entities.gmod_subway_81-502.Buttons.Main1.2:VUDToggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-502.Buttons.Main1_2.!LMK2 = @[Common.502.L23w] +Entities.gmod_subway_81-502.Buttons.Main1_2.!LVRD2 = @[Common.ARS.LRD] + +Entities.gmod_subway_81-502.Buttons.Main2.KOSSet = @[Common.502.KOS] +Entities.gmod_subway_81-502.Buttons.Main2.!LMK = @[Common.502.L23w] +Entities.gmod_subway_81-502.Buttons.Main2.VZPToggle = @[Common.ALL.VZP] +Entities.gmod_subway_81-502.Buttons.Main2.VZDSet = @[Common.ALL.VZD] +Entities.gmod_subway_81-502.Buttons.Main2.!L16 = @[Common.502.L16w] +Entities.gmod_subway_81-502.Buttons.Main2.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-502.Buttons.Main2.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.Main2.LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-502.Buttons.Main2.LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-502.Buttons.Main2.VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-502.Buttons.Main2.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-502.Buttons.Main2.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-502.Buttons.Main2.KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-502.Buttons.Main2.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-502.Buttons.Main2.!RU = @[Common.502.LRU] +Entities.gmod_subway_81-502.Buttons.Main2.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-502.Buttons.Main2.VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-502.Buttons.Main2.VAKSet = @[Common.502.VAK] +Entities.gmod_subway_81-502.Buttons.Main2.AutodriveToggle = @[Common.ALL.VAV] +Entities.gmod_subway_81-502.Buttons.Main2.VUDToggle = @[Common.ALL.VUD] + +Entities.gmod_subway_81-502.Buttons.BPS.!BPSon = @[Common.BPS.On] +Entities.gmod_subway_81-502.Buttons.BPS.!BPSErr = @[Common.BPS.Err] +Entities.gmod_subway_81-502.Buttons.BPS.!BPSFail = @[Common.BPS.Fail] +Entities.gmod_subway_81-502.Buttons.NMnUAVA.!NMPressureLow = @[Commom.NMnUAVA.NMPressureLow] +Entities.gmod_subway_81-502.Buttons.NMnUAVA.!UAVATriggered = @[Commom.NMnUAVA.UAVATriggered] + +Entities.gmod_subway_81-502.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-502.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-502.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-502.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-502.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-502.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-502.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-502.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-502.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-502.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-502.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-502.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-502.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-502.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber3+ = @[Common.ALL.RouteNumber3+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber3- = @[Common.ALL.RouteNumber3-] + +Entities.gmod_subway_81-502.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-502.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-502.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-502.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-502.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-502.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-501 +Entities.gmod_subway_81-501.Buttons.AV.KPVUToggle = @[Entities.gmod_subway_81-502.Buttons.AV.KPVUToggle] +Entities.gmod_subway_81-501.Buttons.AV.KSDToggle = @[Entities.gmod_subway_81-502.Buttons.AV.KSDToggle] + +Entities.gmod_subway_81-501.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-501.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-501.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-501.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-501.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-501.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_81-501.Buttons.Main.!GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-501.Buttons.Main.!RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-501.Buttons.Main.!SD = @[Common.703.SD] +Entities.gmod_subway_81-501.Buttons.Main.LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-501.Buttons.Main.LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-501.Buttons.Main.VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-501.Buttons.Main.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-501.Buttons.Main.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-501.Buttons.Main.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-501.Buttons.Main.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-501.Buttons.Main.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-501.Buttons.Main.VUDToggle = @[Common.ALL.VUD] + +Entities.gmod_subway_81-501.Buttons.HelperPanel.VDLSet = @[Common.ALL.KDL] + +Entities.gmod_subway_81-501.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-501.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-501.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-501.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-501.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-501.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-501.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-501.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-501.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-501.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-501.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-501.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-501.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-501.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-501.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-501.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] + +Entities.gmod_subway_81-501.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#Cameras: +Train.502.AV = Kapcsolók +Train.502.VBA = @[Entities.gmod_subway_81-502.Buttons.VBA.VBAToggle] +Train.502.VRD = VRD +Train.502.RCARS = RC-ARS +Train.502.RCAV5 = RC-AV5 +Train.502.RCBPS = RC-BPS +Train.502.RCAV3 = RC-AV3 +Train.502.RCAV4 = RC-AV4 + +#Spawner: +Entities.gmod_subway_81-502.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-502.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-502.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-502.Spawner.EMAType.Name = @[Spawner.Common.EType] +Entities.gmod_subway_81-502.Spawner.EMAType.1 = @[Spawner.502.TypeNVL] +Entities.gmod_subway_81-502.Spawner.EMAType.2 = @[Spawner.502.TypeKVLO] +Entities.gmod_subway_81-502.Spawner.EMAType.3 = @[Spawner.502.TypeKVLN] +Entities.gmod_subway_81-502.Spawner.EWagons.Name = @[Spawner.502.EWagons] +Entities.gmod_subway_81-502.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-502.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-502.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-502.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-502.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/hu_702.lua b/lua/metrostroi_data/languages/hu_702.lua new file mode 100644 index 0000000..f0cb0b1 --- /dev/null +++ b/lua/metrostroi_data/languages/hu_702.lua @@ -0,0 +1,760 @@ +return [[ +#D/E-based types + +[hu] + +#Cameras: +Train.702.Breakers1 = Akkumulátor kapcsoló +Train.702.Breakers2 = Világítás kapcsolók +Train.702.Breakers3 = FÅ‘megszakító +Train.703.Breakers1 = Akkumulátor kapcsoló +Train.703.Breakers2 = FÅ‘kapcsoló, és világítás kapcsolók +Train.703.Parking = RögzítÅ‘fék, UAVA +Train.703.RCARS = RC-1: ARS áramköri megszakító +Train.703.AVU = AVU blokk + +#Spawner +Spawner.707.Type = Panel típus +Spawner.707.Type1 = Régi + RRI +Spawner.707.Type2 = Új + ASNP +Spawner.710.RRI = Rádió-relé utastájékoztató + +#######Buttons########### +Train.Buttons.ParkingBrake = %d%% #NEW +Train.Buttons.EnginesVoltage = %d V #NEW +Train.Buttons.CanAB = AB mode is available #NEW +Train.Buttons.InAB = In AB mode #NEW + +#Common +Common.702.VZ1 = â„–1 pneumatikus szelep +Common.703.ParkingBrakeLeft = RögzítÅ‘fék kiengedés +Common.703.ParkingBrakeRight = RögzítÅ‘fék behúzás +Common.703.KSD = KSD: Ajtó reteszelÅ‘ egység gomb +Common.703.SD = @[Common.502.SDW] +Common.703.VU1 = Fülkefűtés +Common.703.VU2 = Szükségvilágítás +Common.703.VU3 = Fülkevilágítás +Common.703.AV = FÅ‘megszakító (nagyfeszültségű áramkörök) +Common.703.LOn = Világítás felkapcsolás +Common.703.LOff = Világítás lekapcsolás +Common.703.KRR = KRR: RK elfordítása az elsÅ‘ pozícióba +Common.703.RUT = RUT beállítása (gyengített gyorsulás) +Common.707.SEQ = Reosztát vezérlÅ‘ mozgás visszajelzÅ‘ +Common.707.TAH = TAH: Szükségmenet, ARS nélküli vezetéshez +Common.710.RK = Reosztát vezérlÅ‘ középállásban + +Common.710.SAMMSchemeOff = SAMM Leállító gomb +Common.710.SAMMStart = SAMM Indító gomb +Common.710.SAMMReset = SAMM: Visszaállító gomb +Common.710.SAMMXTLamp = SAMM: Menet-/fékáramkörök kialakulása ATO által +Common.710.SAMMSignal1 = SAMM: @[Common.ALL.Unsused1] +Common.710.SAMMSignal2 = SAMM: @[Common.ALL.Unsused1] +Common.710.SAMMOn = SAMM: Kapcsoló (automatikus vonatvezérlés) +Common.710.SAMMUnit = SAMM: VezetÅ‘ egység +Common.710.SAMMX2 = SAMM: X2 mód +Common.710.SAMMAhead = SAMM: Felzárkóztató mód +Common.710.SAMMAccept = SAMM: Engedély + +#gmod_subway_81-702 +Entities.gmod_subway_81-702.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-702.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-702.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-702.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-702.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-702.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-702.Buttons.VU.KU1Set = @[Common.703.LOn] +Entities.gmod_subway_81-702.Buttons.VU.KU2Set = @[Common.703.LOff] +Entities.gmod_subway_81-702.Buttons.MainB.KU7Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-702.Buttons.MainB.KU6Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-702.Buttons.MainB.VRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-702.Buttons.MainB.KU3Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-702.Buttons.MainP.VZSet = @[Common.702.VZ1] +Entities.gmod_subway_81-702.Buttons.KU9.KU9Set = @[Common.703.KSD] +Entities.gmod_subway_81-702.Buttons.KU5.KU5Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-702.Buttons.MainL.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-702.Buttons.MainL.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-702.Buttons.MainL.!Blue = @[Common.703.SD] +Entities.gmod_subway_81-702.Buttons.VU.SNSet = @[Common.ALL.KSN] + +Entities.gmod_subway_81-702.Buttons.HelperPanel.KU10Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-702.Buttons.HelperPanel.KU8Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-702.Buttons.HelperPanel.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-702.Buttons.HelperPanel.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_81-702.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_81-702.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_81-702.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_81-702.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_81-702.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] + +Entities.gmod_subway_81-702.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-702.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-702.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-702.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-702.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-702.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-702.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-702.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-702.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-702.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-702.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-702.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-702.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-702.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-702.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-702.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-702.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-702.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-702.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-702.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-702_int +Entities.gmod_subway_81-702_int.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-702_int.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-702_int.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-702_int.Buttons.VU.KU1Set = @[Common.703.LOn] +Entities.gmod_subway_81-702_int.Buttons.VU.KU2Set = @[Common.703.LOff] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU7Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU6Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-702_int.Buttons.MainB.VRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU3Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-702_int.Buttons.KU9.KU9Set = @[Common.703.KSD] +Entities.gmod_subway_81-702_int.Buttons.KU5.KU5Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-702_int.Buttons.MainL.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-702_int.Buttons.MainL.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-702_int.Buttons.MainL.!Blue = @[Common.703.SD] +Entities.gmod_subway_81-702_int.Buttons.VU.SNSet = @[Common.ALL.KSN] + +Entities.gmod_subway_81-702_int.Buttons.HelperPanel.KU10Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-702_int.Buttons.HelperPanel.KU8Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_81-702_int.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-702_int.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-702_int.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-702_int.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-702_int.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-702_int.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-702_int.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-702_int.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-702_int.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-702_int.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702_int.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702_int.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-702_int.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-702_int.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-702_int.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-702_int.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-702_int.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-702_int.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-702_int.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-702_int.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-703 +Entities.gmod_subway_81-703.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-703.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-703.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-703.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-703.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-703.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-703.Buttons.AV2.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-703.Buttons.Main.RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-703.Buttons.Main.GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-703.Buttons.Main.SD = @[Common.703.SD] +Entities.gmod_subway_81-703.Buttons.Main.SDW = @[Common.502.SDW] #NEW +Entities.gmod_subway_81-703.Buttons.Main.PP1 = @[Common.ALL.L1w] #NEW +Entities.gmod_subway_81-703.Buttons.Main.PP6 = @[Common.ALL.L6w] #NEW +Entities.gmod_subway_81-703.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_81-703.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_81-703.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_81-703.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_81-703.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-703.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_81-703.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-703.Buttons.Main.KU7KToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-703.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703.Buttons.Main.KU6KToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-703.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-703.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-703.Buttons.Main.KU12Toggle = @[Common.703.RUT] +Entities.gmod_subway_81-703.Buttons.VU4.KU16Toggle = @[Common.ALL.VF2] + +Entities.gmod_subway_81-703.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-703.Buttons.HelperPanel.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-703.Buttons.HelperPanel.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_81-703.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_81-703.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_81-703.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_81-703.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_81-703.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] + +Entities.gmod_subway_81-703.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-703.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-703.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-703.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-703.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-703.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-703.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-703.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-703.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-703.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-703.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-703.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-703.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-703.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-703.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-703.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-703.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-703.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-703.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-703.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-703.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-703_int +Entities.gmod_subway_81-703_int.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-703_int.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-703_int.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-703_int.Buttons.Main.RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-703_int.Buttons.Main.GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-703_int.Buttons.Main.SD = @[Common.703.SD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_81-703_int.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_81-703_int.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_81-703_int.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_81-703_int.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-703_int.Buttons.Main.KU7KToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703_int.Buttons.Main.KU6KToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU12Toggle = @[Common.703.RUT] +Entities.gmod_subway_81-703_int.Buttons.VU4.KU16Toggle = @[Common.ALL.VF2] + +Entities.gmod_subway_81-703_int.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703_int.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_81-703_int.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-703_int.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-703_int.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-703_int.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-703_int.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-703_int.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-703_int.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-703_int.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-703_int.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-703_int.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703_int.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703_int.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-703_int.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-703_int.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-703_int.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-703_int.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-703_int.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-703_int.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-703_int.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-703_int.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-703_int.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_ezh +Entities.gmod_subway_ezh.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_ezh.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_ezh.Buttons.VU.KU14Set = @[Common.ALL.KRP] +Entities.gmod_subway_ezh.Buttons.VU.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_ezh.Buttons.KRR.KRRSet = @[Common.703.KRR] + +Entities.gmod_subway_ezh.Buttons.AVU.OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_ezh.Buttons.AVU.!AVULight = @[Common.ALL.LAVU] + +Entities.gmod_subway_ezh.Buttons.AV2.R_RadioToggle = @[Common.ALL.VASNP] +Entities.gmod_subway_ezh.Buttons.AV2.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_ezh.Buttons.AV2.UOSToggle = @[Common.ALL.UOS] + +Entities.gmod_subway_ezh.Buttons.LampsALS1.!LNF = @[Common.ARS.04] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L0 = @[Common.ARS.0] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L40 = @[Common.ARS.40] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L60 = @[Common.ARS.60] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L70 = @[Common.ARS.70] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L80 = @[Common.ARS.80] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!LNF_2 = @[Common.ARS.04] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L0_2 = @[Common.ARS.0] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L40_2 = @[Common.ARS.40] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L60_2 = @[Common.ARS.60] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L70_2 = @[Common.ARS.70] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L80_2 = @[Common.ARS.80] + +Entities.gmod_subway_ezh.Buttons.AB1.AB1Set = @[Common.ARS.ABButton]@[Common.ARS.ABDriver] +Entities.gmod_subway_ezh.Buttons.AB2.AB2Set = @[Common.ARS.ABButton]@[Common.ARS.ABHelper] +Entities.gmod_subway_ezh.Buttons.KAH.KAHToggle = @[Common.707.TAH] +Entities.gmod_subway_ezh.Buttons.RC1.RC1Toggle = @[Common.ALL.RCARS] + +Entities.gmod_subway_ezh.Buttons.Lamps1.!AV = @[Common.ARS.AV] +Entities.gmod_subway_ezh.Buttons.Lamps1.!SEQ = @[Common.707.SEQ] +Entities.gmod_subway_ezh.Buttons.Lamps1.!ARS = @[Common.ARS.ARS] +Entities.gmod_subway_ezh.Buttons.Lamps1.!AB = @[Common.ARS.AB] +Entities.gmod_subway_ezh.Buttons.Lamps1.!SD = @[Common.703.SD] +Entities.gmod_subway_ezh.Buttons.Lamps1.!LSN = @[Common.ALL.SN] +Entities.gmod_subway_ezh.Buttons.Lamps1.!AV1 = @[Common.ARS.AV1] +Entities.gmod_subway_ezh.Buttons.Lamps1.!RRP = @[Common.ALL.RP] +Entities.gmod_subway_ezh.Buttons.Lamps1.!KT = @[Common.ARS.KT] +Entities.gmod_subway_ezh.Buttons.Lamps1.!VD = @[Common.ARS.VD] +Entities.gmod_subway_ezh.Buttons.Lamps1.!RS = @[Common.ARS.RS] +Entities.gmod_subway_ezh.Buttons.Lamps1.!LN = @[Common.ARS.LN] +Entities.gmod_subway_ezh.Buttons.Lamps2.!RRP2 = @[Common.ALL.RP] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LPU2 = @[Common.707.SEQ] +Entities.gmod_subway_ezh.Buttons.Lamps2.!VD2 = @[Common.ARS.VD] +Entities.gmod_subway_ezh.Buttons.Lamps2.!KT2 = @[Common.ARS.KT] +Entities.gmod_subway_ezh.Buttons.Lamps2.!AB2 = @[Common.ARS.AB] +Entities.gmod_subway_ezh.Buttons.Lamps2.!SD2 = @[Common.703.SD] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LN2 = @[Common.ARS.LN] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LSN2 = @[Common.ALL.SN] + +Entities.gmod_subway_ezh.Buttons.Main1.1:KU16Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_ezh.Buttons.Main1.1:ALSFreqToggle = @[Common.ARS.Freq]@[Common.ARS.FreqD] +Entities.gmod_subway_ezh.Buttons.Main1.1:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU6KToggle = @[Common.ALL.KDLPK] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh.Buttons.Main1.1:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh.Buttons.Main1.1:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh.Buttons.Main1.1:R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU16Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_ezh.Buttons.Main2.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh.Buttons.Main2.2:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU6KToggle = @[Common.ALL.KDLPK] +Entities.gmod_subway_ezh.Buttons.Main2.2:ALSFreqToggle = @[Common.ARS.Freq]@[Common.ARS.FreqD] +Entities.gmod_subway_ezh.Buttons.Main2.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh.Buttons.Main2.2:R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU10Set = @[Common.ALL.KRZD] + +Entities.gmod_subway_ezh.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_ezh.Buttons.HelperPanel.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.HelperPanel.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_ezh.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_ezh.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_ezh.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_ezh.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_ezh.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] + +Entities.gmod_subway_ezh.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_ezh.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_ezh.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_ezh.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_ezh.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_ezh.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_ezh.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + + +Entities.gmod_subway_ezh.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_ezh.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_ezh.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_ezh.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_ezh1 +Entities.gmod_subway_ezh1.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh1.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh1.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh1.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh1.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh1.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh1.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh1.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh1.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] + + +Entities.gmod_subway_ezh1.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh1.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh1.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh1.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh1.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +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.!SD = @[Common.703.SD] + +Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh1.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh1.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh1.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh1.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh1.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh1.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh1.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh1.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh1.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_ezh1.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh1.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh1.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_ezh1.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh1.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_ezh1.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_ez3 +Entities.gmod_subway_ezh3.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh3.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh3.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh3.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh3.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_ezh3.Buttons.RUM.RUMToggle = @[Common.ALL.RCARS] +Entities.gmod_subway_ezh3.Buttons.KRR.KRRSet = @[Common.703.KRR] + +Entities.gmod_subway_ezh3.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_ezh3.Buttons.VUHelper.VUToggle = @[Common.ALL.VU] + + +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSchemeOffSet = @[Common.710.SAMMSchemeOff] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMStartSet = @[Common.710.SAMMStart] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMResetSet = @[Common.710.SAMMReset] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMXTLamp = @[Common.710.SAMMXTLamp] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal1 = @[Common.ALL.Unsused1] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal2 = @[Common.ALL.Unsused1] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMOnToggle = @[Common.710.SAMMOn] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMUnitToggle = @[Common.710.SAMMUnit] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMX2Toggle = @[Common.710.SAMMX2] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMAheadToggle = @[Common.710.SAMMAhead] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMAcceptToggle = @[Common.710.SAMMAccept] +Entities.gmod_subway_ezh3.Buttons.Main.V1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh3.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh3.Buttons.Main.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh3.Buttons.Main.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_ezh3.Buttons.Main.VU14Toggle = @[Common.ALL.VUS] +Entities.gmod_subway_ezh3.Buttons.Main.GLightsToggle = @[Common.ALL.GaugeLights] +Entities.gmod_subway_ezh3.Buttons.Main.VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_ezh3.Buttons.Main.V4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh3.Buttons.Main.V5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh3.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_ezh3.Buttons.Main.KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh3.Buttons.Main.KBSet = @[Common.ARS.KB] +Entities.gmod_subway_ezh3.Buttons.Main.RKLamp = @[Common.710.RK] +Entities.gmod_subway_ezh3.Buttons.Main.ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh3.Buttons.Main.R_UNchToggle = @[Common.ALL.UNCh] +Entities.gmod_subway_ezh3.Buttons.Main.V2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh3.Buttons.Main.R_RadioToggle = @[Common.ALL.R_Radio] +Entities.gmod_subway_ezh3.Buttons.Main.ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh3.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh3.Buttons.Main.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_ezh3.Buttons.Main.PLightsToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_ezh3.Buttons.Main.V10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh3.Buttons.Main.PLightsToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_ezh3.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh3.Buttons.Main.KU12Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh3.Buttons.Main.KAHSet = @[Common.ALL.KAH] +Entities.gmod_subway_ezh3.Buttons.Main.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_ezh3.Buttons.Main.KU10Set = @[Common.ALL.KRP] +Entities.gmod_subway_ezh3.Buttons.Main.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_ezh3.Buttons.Main.R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_ezh3.Buttons.Main.!AnnPlay = @[Common.ALL.AnnPlay] + +Entities.gmod_subway_ezh3.Buttons.HelperPanel.V6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.V3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_ezh3.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] + +Entities.gmod_subway_ezh3.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh3.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh3.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh3.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh3.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh3.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh3.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh3.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_ezh3.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_ezh3.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_ezh3.Buttons.Panel.!L04 = @[Common.ARS.04] +Entities.gmod_subway_ezh3.Buttons.Panel.!L0 = @[Common.ARS.0] +Entities.gmod_subway_ezh3.Buttons.Panel.!L40 = @[Common.ARS.40] +Entities.gmod_subway_ezh3.Buttons.Panel.!L60 = @[Common.ARS.60] +Entities.gmod_subway_ezh3.Buttons.Panel.!L70 = @[Common.ARS.70] +Entities.gmod_subway_ezh3.Buttons.Panel.!L80 = @[Common.ARS.80] + +Entities.gmod_subway_ezh3.Buttons.Panel.!LKT = @[Common.ARS.KT] +Entities.gmod_subway_ezh3.Buttons.Panel.!LSN = @[Common.ALL.SN] +Entities.gmod_subway_ezh3.Buttons.Panel.!LKVD = @[Common.ARS.VD] +Entities.gmod_subway_ezh3.Buttons.Panel.!LRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh3.Buttons.Panel.!LPU = @[Common.ALL.PU] +Entities.gmod_subway_ezh3.Buttons.Panel.!LSD = @[Common.703.SD] + +Entities.gmod_subway_ezh3.Buttons.Panel.!Speedometer = @[Common.ALL.Speedometer] +Entities.gmod_subway_ezh3.Buttons.Panel.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh3.Buttons.Panel.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh3.Buttons.Panel.!HighVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_ezh3.Buttons.Panel.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh3.Buttons.Panel.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +#gmod_subway_em508t +Entities.gmod_subway_em508t.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_em508t.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_em508t.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_em508t.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_em508t.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_em508t.Buttons.VU14.VU14Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_em508t.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_em508t.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_em508t.Buttons.Main.KU12Set = @[Common.ALL.KDL] +Entities.gmod_subway_em508t.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_em508t.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_em508t.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_em508t.Buttons.Main.V2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_em508t.Buttons.Main.V1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_em508t.Buttons.Main.V4Set = @[Common.703.LOn] +Entities.gmod_subway_em508t.Buttons.Main.V5Set = @[Common.703.LOff] +Entities.gmod_subway_em508t.Buttons.Main.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_em508t.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_em508t.Buttons.Main.V10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_em508t.Buttons.Main.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_em508t.Buttons.Main.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_em508t.Buttons.Main.!SD = @[Common.703.SD] + +Entities.gmod_subway_em508t.Buttons.HelperPanel.V6Set = @[Common.ALL.KDL] +Entities.gmod_subway_em508t.Buttons.HelperPanel.V3Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_em508t.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_em508t.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_em508t.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_em508t.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_em508t.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_em508t.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_em508t.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_em508t.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_em508t.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_em508t.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_em508t.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_em508t.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_em508t.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +#Spawner: +Entities.gmod_subway_81-702.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-702.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-702.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-702.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-702.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_81-702.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-702.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-702.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] + +Entities.gmod_subway_81-703.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-703.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-703.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-703.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-703.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_81-703.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-703.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-703.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] + +Entities.gmod_subway_ezh.Spawner.TrainType.Name = @[Spawner.707.Type] +Entities.gmod_subway_ezh.Spawner.TrainType.1 = @[Spawner.707.Type1] +Entities.gmod_subway_ezh.Spawner.TrainType.2 = @[Spawner.707.Type2] +Entities.gmod_subway_ezh.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_ezh.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_ezh.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_ezh.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_ezh.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_ezh.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_ezh.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_ezh.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_ezh.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_ezh.Spawner.EWagons.Name = @[Spawner.502.EWagons] + +Entities.gmod_subway_ezh3.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_ezh3.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_ezh3.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_ezh3.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_ezh3.Spawner.Announcer.1 = @[Spawner.710.RRI] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/hu_717.lua b/lua/metrostroi_data/languages/hu_717.lua new file mode 100644 index 0000000..1308aec --- /dev/null +++ b/lua/metrostroi_data/languages/hu_717.lua @@ -0,0 +1,1218 @@ +return [[ +#81-717 + +[hu] +#Cameras: +Train.717.Breakers = Automaták +Train.717.VB = Akkumulátor és RC +Train.717.VBD = VBD és UPPS + +Train.717.VRD = VRD +Train.717.SOSD = SOSD +Train.717.PUAV = PUAV +Train.717.PA = PA +Train.717.PAScreen = PA képernyÅ‘ + +Train.714.Shunt = Tolatási vezérlÅ‘panel, töltÅ‘vezeték +#Spawner +Spawner.717.Line2 = Vonat az MPL-bÅ‘l +Spawner.717.Line4 = Vonat a PBL-bÅ‘l +Spawner.717.Line5 = Vonat a FPL-bÅ‘l + +Spawner.717.Type = Vonat típus +Spawner.717.BodyType = Kocsiszekrény típus +Spawner.717.MVM = MVM +Spawner.717.LVZ = LVZ +Spawner.717.MaskType = Maszk típus +Spawner.717.CranType = Légfékkar típus +Spawner.717.LampType = Lámpa típus +Spawner.717.Lamp1 = LPV-02 +Spawner.717.Lamp2 = LLV-01 +Spawner.717.SeatType = Ülés típus +Spawner.717.ARS = ARS panel típus +Spawner.717.RingType = ARS csipogó típus +Spawner.717.BPSNType = BPSN típus + +#######Buttons########### +Train.Buttons.RZP = BPSN converter protection engaged + +#Common +Common.717.VBD = ASNP ajtó blokkoló kapcsoló +Common.717.UPPS = UPPS rendszer kapcsoló +Common.717.BPSN = BPSN: Vonat áramellátás +Common.717.ARS13V = ARS 13V: ARS stabilizált feszültségmérés +Common.717.Radio13V = Rádió stabilizált 13V feszültségmérés +Common.717.LVD = LVD: ElsÅ‘ visszajelzÅ‘ lámpa (motorok üzemben) +Common.717.LHRK = LHRK: Második visszajelzÅ‘ lámpa (RK mozgásban) +Common.717.LST = LST: Hatodik visszajelzÅ‘ lámpa (braking light) +Common.717.KVC = LKVC: Tartalék áramkörök kontaktor visszajelzÅ‘ (nagyfeszültség nem elérhetÅ‘) +Common.717.GLEB = GLEB: Frissítés elérhetÅ‘ jelzÅ‘ +Common.717.KVP = LKVP: Nagyfeszülségű átalakító vezérlés (BPSN) +Common.717.LSP = LSP: Tűz +Common.717.LEKK = LEKK: Elektromos doboz visszajelzÅ‘ +Common.717.LPU = LPU: Csökkentett RUT beállítás jelszó +Common.717.OtklBV = Gyors kapcsoló kikapcsolása (BV) +Common.717.OtklBVK = Gyors kapcsoló fedÅ‘ +Common.717.ConverterProtection = Ãramellátás védelem gomb +Common.717.VZ1 = VZ1: â„–1 szelep nyomásérték +Common.717.VL1 = SzellÅ‘ztetés nélkül visszajelzÅ‘ +Common.717.V13 = Tartalék szellÅ‘ztetés kapcsoló +Common.717.V11 = ElsÅ‘ szellÅ‘ztetÅ‘ egység kapcsoló +Common.717.V12 = Második szellÅ‘ztetÅ‘ egység kapcsoló +Common.717.RZPL = RZP: Ãramaellátás védelem relé +Common.717.VPAOn = VPA: Vonategység bekapcsolása +Common.717.VPAOff = VPA: Vonategység kikapcsolása +Common.717.VZD = VZD: Ajtó engedélyezÅ‘ (ajtózárás) + +Common.717.A53 = A53: Tartalék áramkörök kontaktora +Common.717.A56 = A56: Akkumulátor +Common.717.A54 = A54: Vonat vezérlés +Common.717.A17 = A17: Ajtók, tartalék fényszóró +Common.717.A44 = A44: Tartalék kontroller, tartalék kompresszor, tartalék ARS ellátás +Common.717.A39 = A39: Vonat indítása a tartalék kontrollerrel +Common.717.A70 = A70: RKTT auto mód +Common.717.A14 = A14: Tartalék indítás relé +Common.717.A74 = A74: Vonat védelem visszaállítás +Common.717.A26 = A26: Alacsony frekvenciájú erÅ‘sítÅ‘ +Common.717.AR63 = AР63: Rádióállomás +Common.717.AS1 = AС1: Vészhívó, ASNP +Common.717.A13 = A13: Ajtók állapota +Common.717.A21 = A21: Ajtók vezérlése +Common.717.A31 = A31: Bal oldali ajtók nyitása +Common.717.A32 = A32: Jobb oldali ajtók nyitása +Common.717.A16 = A16: Ajtók zárása +Common.717.A12 = A12: Tartalék ajtózárás + +Common.717.A24 = A24: Töltés vezérlés +Common.717.A49 = A49: Tartalék világítás +Common.717.A27 = A27: Utastér világítás, fülke világítás, fék visszajelzés, zöld RP lámpa +Common.717.A72 = A72: â„–1 szelep nyomásérték szinkronizálás +Common.717.A50 = A50: Világítás kontaktor +Common.717.AV3 = AÐ’3: Tartalék szellÅ‘tetés áramellátás +Common.717.AV3S = AÐ’3: Tartalék rádióállomás áramellátás +Common.717.AV2 = AÐ’2: FÅ‘ szellÅ‘ztetés áramellátás +Common.717.AV4 = AÐ’4: ElsÅ‘ szellÅ‘ztetÅ‘ egység vezérlés +Common.717.AV5 = AÐ’5: Második szellÅ‘ztetÅ‘ egység vezérlés +Common.717.AV6 = AÐ’6: Tartalék szellÅ‘tetés csoport vezérlés +Common.717.AV1 = AÐ’1: SzellÅ‘ztetés vezérlés, szellÅ‘ztetés visszajelzés, fülke szellÅ‘ztetés +Common.717.A29 = A29: Fényszórók áramellátása +Common.717.A46 = A46: Tompított fényszóró +Common.717.A47 = A47: Távolsági fényszóró +Common.717.A71 = A71: RV-3 teljesítmény a kontrollerbÅ‘l és az ARS-bÅ‘l +Common.717.A7 = A7: Jobb oldali zárjelzÅ‘ lámpa +Common.717.A9 = A9: Bal oldali zárjelzÅ‘ lámpa + +Common.717.A84 = @[Common.ALL.VU] +Common.717.A8 = A8: â„–2 pneumatikus szelep +Common.717.A52 = A52: Pneumatikus szelep az éberségi lenyomásával +Common.717.A19 = A19: Kocsi RV-3 áramellátás +Common.717.A48 = A48: Éberségi pedál, RPB, elsÅ‘dleges ARS áramellátás +Common.717.A10 = A10: Kompresszor vezérlés +Common.717.A22 = A22: Kompresszor kontaktor +Common.717.A30 = A30: Reosztát kontroller szervómotor ellátás (SDRK) +Common.717.A1 = A1: Vezetés mód +Common.717.A2 = A2: Reosztát kontroller vezérlés +Common.717.A3 = A3: X-3 +Common.717.A4 = A4: Hátramenet +Common.717.A5 = A5: ElÅ‘remenet +Common.717.A6 = A6: Fék +Common.717.A18 = A18: Védelem visszaállító +Common.717.A73 = A73: Hibajelzés +Common.717.A20 = A20: LK-2, LK-5 +Common.717.A25 = A25: Manuális fék + +Common.717.A11 = A11: Hátfalszekrény-, és fülke világítás +Common.717.A37 = A37: Ãramellátás védelem visszaállítás +Common.717.A45 = A45: BPSN vezérlés +Common.717.A38 = A38: Kocsi áramkörök hiba visszajelzÅ‘ lámpa +Common.717.A51 = A51: KPP és KVP kontaktorok +Common.717.A65 = A65: Másodlagos BPSN átalakító +Common.717.A66 = A66: BV kikapcsolás +Common.717.A42 = A42: 75V ARS +Common.717.A43 = A43: 12V ARS +Common.717.A432 = A43: EPK vezéslés +Common.717.A41 = A41: â„–2 pneumatikus szelep ARS által +Common.717.A40 = A40: Féklámpa +Common.717.A75 = A75: Fülkefűtés +Common.717.A76 = A76: TűzjelzÅ‘ (ASOTP) +Common.717.A60 = A60: Motorok üzemben visszajelzÅ‘ +Common.717.A58 = A58: KAH-1 +Common.717.A57 = A57: Reosztát kontroller forgási visszajelzÅ‘ +Common.717.A59 = A59: KAH-2 +Common.717.A28 = A28: Tirisztor szabályozó egység áramellátás +Common.717.A55 = A55: Reosztát kontroller szinkronizáló +Common.717.A68 = A68: ÃramszedÅ‘ papucs vezérlés +Common.717.A80 = A80: BV bekapcsolás +Common.717.A81 = A81: BV vezérlés + +Common.717.A58PU = A58: PUAV áramellátás +Common.717.A59PU = A59: PUAV vezérlés +Common.717.A61PU = A61: PUAV irányváltó kar vezérlés +Common.717.A58PA = A58: PA áramellátás +Common.717.A59PA = Ð59: @[Common.ALL.Unsused1] +Common.717.A61PA = A61: PA irányváltó kar vezérlés + +Common.717.A78 = A78: ElsÅ‘ ajtók vezérlése +Common.717.ABK = A-VK: Fülke szellÅ‘ztetés vezérlés + +Common.717.A81 = A81: BV vezérlés +Common.717.A23 = A23: Kompresszor indítás +Common.717.A15 = A15: Tartalék világítás +Common.717.AIS = AIS: SebességérzékelÅ‘ biztosíték + +Common.717.RC2 = RC-2: Automatikus vonatvezérlés áramkör leválasztó +Common.717.VAU = VAU: Automatikus vonatvezérlés kapcsoló + +Common.717.LampDV = DV: ForgásérzékelÅ‘ hiba +Common.717.ARSL20 = Maximum megengedett sebesség 20 km/h +Common.717.ARSL40 = @[Common.ARS.40] +Common.717.ARSL60 = @[Common.ARS.60] +Common.717.ARSL70 = @[Common.ARS.70] +Common.717.ARSL80 = @[Common.ARS.80] + +Common.PUAV.K16 = LK16: Ãramellátás lámpa (ajtó zárás) +Common.PUAV.OS = LOS: PUAV sebességkorlátozó mód +Common.PUAV.AVT = LAVT: PUAV automatikus vezérlés mód +Common.PUAV.RS = LRS: PUAV sebességszabályzó mód +Common.PUAV.KI1 = LKI1: ElsÅ‘ PUAV alcsoport hibejelzÅ‘ +Common.PUAV.KI2 = LKI2: Második PUAV alcsoport hibejelzÅ‘ +Common.717.KH = KH3: Automatikus vezérlés X-3 mód +Common.717.KSZD = KSZD: Ajtózárás engedélyezés +Common.717.VAV = @[Common.ALL.VAV] + +Common.717.PAM = PA-M +Common.717.PAKSDM = PA-KSD-M + +Common.PA.P = P +Common.PA.F = F +Common.PA.Up = Fel +Common.PA.M = M +Common.PA.Left = Bal +Common.PA.Down = Le +Common.PA.Right = Jobb +Common.PA.Esc = Mégse +Common.PA.Enter = Enter + +Common.714.Start = Vontatómotorok indítása +Common.714.RV = Menetirány kapcsoló + +#gmod_subway_81-717 +Entities.gmod_subway_81-717_mvm.Buttons.Battery_C.1:UOSToggle = @[Common.ALL.UOS] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_R.2:UOSToggle = @[Common.ALL.UOS] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_C.1:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_R.2:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_C.1:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_R.2:RC1Toggle = @[Common.ALL.RC1] + +Entities.gmod_subway_81-717_mvm.Buttons.VBD_C.1:VBDToggle = @[Common.717.VBD] +Entities.gmod_subway_81-717_mvm.Buttons.VBD_R.2:VBDToggle = @[Common.717.VBD] +Entities.gmod_subway_81-717_mvm.Buttons.VBD_C.1:UPPS_OnToggle = @[Common.717.UPPS] +Entities.gmod_subway_81-717_mvm.Buttons.VBD_R.2:UPPS_OnToggle = @[Common.717.UPPS] + +Entities.gmod_subway_81-717_mvm.Buttons.Block1.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.RezMKSet = @[Common.ALL.RMK] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.ARS13Set = @[Common.717.ARS13V] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARSOch = @[Common.ARS.04] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLSD1 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLSD2 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLHRK = @[Common.717.LHRK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampRP = @[Common.ALL.RP] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLSN = @[Common.ALL.SN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLN = @[Common.ARS.LN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLKVC = @[Common.717.KVC] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLRS = @[Common.ARS.RS] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLVD = @[Common.717.LVD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLST = @[Common.717.LST] + +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARSOch = @[Common.ARS.04] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLSD1 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLSD2 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLVD = @[Common.717.LVD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLHRK = @[Common.717.LHRK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLST = @[Common.717.LST] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampRP = @[Common.ALL.RP] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLSN = @[Common.ALL.SN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLKVC = @[Common.717.KVC] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLEKK = @[Common.717.GLEB] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLN = @[Common.ARS.LN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLRS = @[Common.ARS.RS] + +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LSD = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LOch = @[Common.ARS.0]\n@[Common.ARS.04] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LN = @[Common.ARS.LN]\n@[Common.ARS.40] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!60 = @[Common.ARS.60]\n@[Common.ARS.80] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!70 = @[Common.ARS.70]\n@[Common.717.LHRK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LEKK = @[Common.717.LEKK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LPU = @[Common.717.LPU] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LKVC = @[Common.717.KVC] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LVD = @[Common.717.LVD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LST = @[Common.717.LST] + +Entities.gmod_subway_81-717_mvm.Buttons.Block3.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-717_mvm.Buttons.Block3.!BCPressure = @[Common.ALL.BCPressure] + +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] + +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_UNchToggle = @[Common.ALL.UNCh] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_ZSToggle = @[Common.ALL.ES] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_RadioToggle = @[Common.ALL.R_Radio] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.1:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.1:KVTRSet = @[Common.ARS.KVTR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.2:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.2:KVTRSet = @[Common.ARS.KVTR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!L1Light = @[Common.717.VL1] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.V13Toggle = @[Common.717.V13] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VUD1Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!GreenRPLight = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!AVULight = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!LKVPLight = @[Common.717.KVP] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!SPLight = @[Common.717.LSP] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OtklBVSet = @[Common.717.OtklBV] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OtklBVKToggle = @[Common.717.OtklBVK] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.V11Toggle = @[Common.717.V11] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.V12Toggle = @[Common.717.V12] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ARSRToggle = @[Common.ALL.ARSR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ALSFreqToggle = @[Common.ARS.Freq] @[Common.ARS.FreqU] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.L_3Toggle = @[Common.ALL.PanelLights] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VPToggle = @[Common.ARS.VP] + +Entities.gmod_subway_81-717_mvm.Buttons.Block7.L_4Toggle = @[Common.ALL.VF] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.VADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KRPSet = @[Common.ALL.KRP] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KAHSet = @[Common.ALL.KAH] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KAHKToggle = @[Common.ALL.KAHK] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.!PNT = @[Common.ALL.BrT] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.!PNW = @[Common.ALL.BrW] + +Entities.gmod_subway_81-717_mvm.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-717_mvm.Buttons.HVMeters.!HighVoltage = @[Common.ALL.HighVoltage] + +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:R_Program2HSet = @[Common.ALL.Program2] + +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_C.SAB1Toggle = @[Common.BZOS.On] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_C.!VH1 = @[Common.BZOS.VH1] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_C.!VH2 = @[Common.BZOS.VH2] + +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_R.1:SAB1Toggle = @[Common.BZOS.On] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_R.1:!VH1 = @[Common.BZOS.VH1] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_R.1:!VH2 = @[Common.BZOS.VH2] + + +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_C.PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_C.PVK+ = @[Common.CabVent.PVK+] +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_R.1:PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_R.1:PVK+ = @[Common.CabVent.PVK+] + +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA23 = @[Common.IGLA.Button23] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA3Set = @[Common.IGLA.Button3] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA4Set = @[Common.IGLA.Button4] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.!IGLAFire = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA23 = @[Common.IGLA.Button23] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA3Set = @[Common.IGLA.Button3] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA4Set = @[Common.IGLA.Button4] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:!IGLAFire = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:!IGLAErr = @[Common.IGLA.IGLAErr] + +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A26Toggle = @[Common.717.A26] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AR63Toggle = @[Common.717.AR63] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AS1Toggle = @[Common.717.AS1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV3Toggle = @[Common.717.AV3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV2Toggle = @[Common.717.AV2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV4Toggle = @[Common.717.AV4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV5Toggle = @[Common.717.AV5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV6Toggle = @[Common.717.AV6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A9Toggle = @[Common.717.A9] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A43Toggle = @[Common.717.A43] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A76Toggle = @[Common.717.A76] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A60Toggle = @[Common.717.A60] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A58Toggle = @[Common.717.A58] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A59Toggle = @[Common.717.A59] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A26Toggle = @[Common.717.A26] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:AR63Toggle = @[Common.717.AR63] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:AS1Toggle = @[Common.717.AS1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A76Toggle = @[Common.717.A76] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A43Toggle = @[Common.717.A43] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A28Toggle = @[Common.717.A28] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AISToggle = @[Common.717.AIS] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A80Toggle = @[Common.717.A80] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV2Toggle = @[Common.717.AV2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV3Toggle = @[Common.717.AV3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV4Toggle = @[Common.717.AV4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV5Toggle = @[Common.717.AV5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV6Toggle = @[Common.717.AV6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A81Toggle = @[Common.717.A81] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A9Toggle = @[Common.717.A9] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A68Toggle = @[Common.717.A68] + +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-717_mvm.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-717_mvm.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle = @[Common.ALL.DriverValveDisconnect] +Entities.gmod_subway_81-717_mvm.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-717_mvm.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-717_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] + +Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-717_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_mvm.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-717_mvm.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-717_mvm.Buttons.OtsekDoor1.OtsekDoor1 = @[Common.ALL.OtsekDoor1] +Entities.gmod_subway_81-717_mvm.Buttons.OtsekDoor2.OtsekDoor2 = @[Common.ALL.OtsekDoor2] +Entities.gmod_subway_81-717_mvm.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_81-717_mvm.Buttons.EPVDisconnect.EPKToggle = @[Common.ALL.EPV] +Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] + + +#gmod_subway_81-717_lvz +#Buttons: +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:RC2Toggle = @[Common.717.RC2] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:RC2Toggle = @[Common.717.RC2] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:VAUToggle = @[Common.717.VAU] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:VAUToggle = @[Common.717.VAU] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:VRDToggle = @[Common.ARS.VRD] + +Entities.gmod_subway_81-717_lvz.Buttons.VRD_C.1:VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-717_lvz.Buttons.SOSD_C.1:VSOSDToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-717_lvz.Buttons.SOSD_R.2:VSOSDToggle = @[Common.ALL.VSOSD] + +Entities.gmod_subway_81-717_lvz.Buttons.Block1.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.ARS13Set = @[Common.717.ARS13V] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.Radio13Set = @[Common.717.Radio13V] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSOch = @[Common.ARS.N4] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLSD1 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLSD2 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLVD = @[Common.ALL.L1w] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLHRK = @[Common.ALL.L2w] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLST = @[Common.ALL.L6w] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLRD = @[Common.ARS.LRD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampRP = @[Common.ALL.RP] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLSN = @[Common.ALL.SN] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampDV = @[Common.717.LampDV] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!SpeedFact1 = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!SpeedFact2 = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL20 = @[Common.717.ARSL20] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL40 = @[Common.717.ARSL40] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL60 = @[Common.717.ARSL60] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL70 = @[Common.717.ARSL70] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL80 = @[Common.717.ARSL80] + +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!NMPressureLow2 = @[Commom.NMnUAVA.NMPressureLow] +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!UAVATriggered2 = @[Commom.NMnUAVA.UAVATriggered] + +Entities.gmod_subway_81-717_lvz.Buttons.USS1.!NMPressureLow = @[Commom.NMnUAVA.NMPressureLow] +Entities.gmod_subway_81-717_lvz.Buttons.USS1.!UAVATriggered = @[Commom.NMnUAVA.UAVATriggered] + +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OK16 = @[Common.PUAV.K16] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OLRS = @[Common.PUAV.RS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OKI1 = @[Common.PUAV.KI1] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OKI2 = @[Common.PUAV.KI2] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OOS = @[Common.PUAV.OS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OAVT = @[Common.PUAV.AVT] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:KHSet = @[Common.717.KH] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:KSZDSet = @[Common.717.KSZD] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:VAVToggle = @[Common.717.VAV] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:VZPToggle = @[Common.ALL.VZP] + +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!K16 = @[Common.PUAV.K16] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!OS = @[Common.PUAV.OS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!AVT = @[Common.PUAV.AVT] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!LRS = @[Common.PUAV.RS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!KI1 = @[Common.PUAV.KI1] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!KI2 = @[Common.PUAV.KI2] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARSOch = @[Common.ARS.N4] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.KHSet = @[Common.717.KH] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.KSZDSet = @[Common.717.KSZD] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.VAVToggle = @[Common.717.VAV] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.VZPToggle = @[Common.ALL.VZP] + +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMPSet = @[Common.717.PAM]: @[Common.PA.P] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMFSet = @[Common.717.PAM]: @[Common.PA.F] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMUpSet = @[Common.717.PAM]: @[Common.PA.Up] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMMSet = @[Common.717.PAM]: @[Common.PA.M] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMLeftSet = @[Common.717.PAM]: @[Common.PA.Left] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMDownSet = @[Common.717.PAM]: @[Common.PA.Down] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMRightSet = @[Common.717.PAM]: @[Common.PA.Right] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM1Set = @[Common.717.PAM]: 1 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM2Set = @[Common.717.PAM]: 2 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM3Set = @[Common.717.PAM]: 3 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM4Set = @[Common.717.PAM]: 4 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM5Set = @[Common.717.PAM]: 5 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM6Set = @[Common.717.PAM]: 6 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM7Set = @[Common.717.PAM]: 7 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM8Set = @[Common.717.PAM]: 8 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM9Set = @[Common.717.PAM]: 9 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMEscSet = @[Common.717.PAM]: @[Common.PA.Esc] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM0Set = @[Common.717.PAM]: 0 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMEnterSet = @[Common.717.PAM]: @[Common.PA.Enter] +Entities.gmod_subway_81-717_lvz.Buttons.PAM.2:KSZDSet = @[Common.717.KSZD] +Entities.gmod_subway_81-717_lvz.Buttons.PAM.2:VZPToggle = @[Common.ALL.VZP] + +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:R_UPOToggle = @[Common.ALL.UPO] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!OhSigLamp1 = @[Common.BZOS.Engaged] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:VUD1Toggle = @[Common.717.VZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!GreenRPLight1 = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!AVULight1 = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!LKVPLight1 = @[Common.717.KVP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!SPLight1 = @[Common.717.LSP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:L_3Toggle = @[Common.ALL.PanelLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:OhrSigToggle = @[Common.BZOS.On] + +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:R_UPOToggle = @[Common.ALL.UPO] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!OhSigLamp2 = @[Common.BZOS.Engaged] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VUD1Toggle = @[Common.717.VZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!KDLLight2 = @[Common.ALL.KDLL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!KDLRLight2 = @[Common.ALL.KDLL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!GreenRPLight2 = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!RZPLight2 = @[Common.717.RZPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!LKVPLight2 = @[Common.717.KVP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:OhrSigToggle = @[Common.BZOS.On] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VPAOnSet = @[Common.717.VPAOn] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VPAOffSet = @[Common.717.VPAOff] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!AVULight2 = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:L_3Toggle = @[Common.ALL.PanelLights] + +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!RZPLight1 = @[Common.717.RZPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:R_UPOToggle = @[Common.ALL.UPO] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!SPLight3 = @[Common.717.LSP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!AVULight3 = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:VUD1Toggle = @[Common.717.VZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!GreenRPLight3 = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!RZPLight3 = @[Common.717.RZPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!LKVPLight3 = @[Common.717.KVP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.1:VPAOnSet = @[Common.717.VPAOn] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.1:VPAOffSet = @[Common.717.VPAOff] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:OVTToggle = @[Common.ALL.VOVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:L_3Toggle = @[Common.ALL.PanelLights] + +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:L_4Toggle = @[Common.ALL.VF] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:VADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:KRPSet = @[Common.ALL.KRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:RezMKSet = @[Common.ALL.RMK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.!1:PNT = @[Common.ALL.BrT] + +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:L_4Toggle = @[Common.ALL.VF] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:VADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:KRPSet = @[Common.ALL.KRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:RezMKSet = @[Common.ALL.RMK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.!KDPLight2 = @[Common.ALL.KDPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.!2:PNT = @[Common.ALL.BrT] + +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_C.VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_C.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_C.VOPDSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_R.1:VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_R.1:VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_R.1:VOPDSet = @[Common.ALL.KDPH] + +Entities.gmod_subway_81-717_lvz.Buttons.CabVent_C.PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-717_lvz.Buttons.CabVent_C.PVK+ = @[Common.CabVent.PVK+] + +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_N.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_N.!HighVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_O.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_O.!HighVoltage = @[Common.ALL.HighVoltage] + +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A26Toggle = @[Common.717.A26] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AR63Toggle = @[Common.717.AR63] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AS1Toggle = @[Common.717.AS1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AISToggle = @[Common.717.AIS] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AV3Toggle = @[Common.717.AV3S] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A58Toggle = @[Common.717.A58PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A59Toggle = @[Common.717.A59PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A61Toggle = @[Common.717.A61PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:P:A58Toggle = @[Common.717.A58PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:P:A59Toggle = @[Common.717.A59PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:P:A61Toggle = @[Common.717.A61PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A9Toggle = @[Common.717.A9] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A06Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A43Toggle = @[Common.717.A432] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A76Toggle = @[Common.717.A76] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A60Toggle = @[Common.717.A60] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A58Toggle = @[Common.717.A58PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A59Toggle = @[Common.717.A59PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A61Toggle = @[Common.717.A61PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.P:A58Toggle = @[Common.717.A58PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.P:A59Toggle = @[Common.717.A59PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.P:A61Toggle = @[Common.717.A61PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A78Toggle = @[Common.717.A78]@[Common.ALL.Unsused2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.ABKToggle = @[Common.717.ABK]@[Common.ALL.Unsused2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A43Toggle = @[Common.717.A432] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A65Toggle = @[Common.717.A65] + +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A28Toggle = @[Common.717.A28] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.AISToggle = @[Common.717.AIS] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.AV3Toggle = @[Common.717.AV3S] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A60Toggle = @[Common.717.A60] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A9Toggle = @[Common.717.A9] + +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber3+ = @[Common.ALL.RouteNumber3+] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber3- = @[Common.ALL.RouteNumber3-] + +Entities.gmod_subway_81-717_lvz.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle = @[Common.ALL.DriverValveDisconnect] +Entities.gmod_subway_81-717_lvz.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-717_lvz.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-717_lvz.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-717_lvz.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-717_lvz.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] + +Entities.gmod_subway_81-717_lvz.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-717_lvz.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-717_lvz.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_lvz.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_lvz.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-717_lvz.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-717_lvz.Buttons.OtsekDoor1.OtsekDoor1 = @[Common.ALL.OtsekDoor1] +Entities.gmod_subway_81-717_lvz.Buttons.OtsekDoor2.OtsekDoor2 = @[Common.ALL.OtsekDoor2] +Entities.gmod_subway_81-717_lvz.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_81-717_lvz.Buttons.EPVDisconnect.EPKToggle = @[Common.ALL.EPV] +Entities.gmod_subway_81-717_lvz.Buttons.ParkingBrake.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] + +#gmod_subway_81-714_mvm +Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-714_mvm.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-714_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-714_mvm.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-714_mvm.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-714_mvm.Buttons.couch_cap_o.CouchCap = @[Common.ALL.CouchCap] +Entities.gmod_subway_81-714_mvm.Buttons.couch_cap.CouchCap = @[Common.ALL.CouchCap] + +Entities.gmod_subway_81-714_mvm.Buttons.Battery.VBToggle = @[Common.ALL.VB] + +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV2Toggle = @[Common.717.AV2] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV3Toggle = @[Common.717.AV3] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV4Toggle = @[Common.717.AV4] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV5Toggle = @[Common.717.AV5] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A81Toggle = @[Common.717.A81] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV6Toggle = @[Common.717.AV6] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A80Toggle = @[Common.717.A80] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A18Toggle = @[Common.717.A18] + +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A23Toggle = @[Common.717.A23] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-714_mvm.Buttons.VU.A84Toggle = @[Common.ALL.VU] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.!RZPLight = @[Common.717.RZPL] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.OtklBVSet = @[Common.717.OtklBV] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.StartSet = @[Common.714.Start] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.RV- = @[Common.714.RV] @[Common.ALL.CCW] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.RV+ = @[Common.714.RV] @[Common.ALL.CW] +Entities.gmod_subway_81-714_mvm.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-714_mvm.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-714_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] + +Entities.gmod_subway_81-714_mvm.Buttons.Voltages.!BatteryVoltage = @[Common.ALL.BatteryVoltage] #NEW +Entities.gmod_subway_81-714_mvm.Buttons.Voltages.!BatteryCurrent = @[Common.ALL.BatteryCurrent] #NEW +Entities.gmod_subway_81-714_mvm.Buttons.Pressures.!BCPressure = @[Common.ALL.BLTLPressure] #NEW +Entities.gmod_subway_81-714_mvm.Buttons.Pressures.!BLTLPressure = @[Common.ALL.BCPressure] #NEW + +#gmod_subway_81-714_lvz +Entities.gmod_subway_81-714_lvz.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-714_lvz.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-714_lvz.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-714_lvz.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-714_lvz.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-714_lvz.Buttons.couch_cap_o.CouchCap = @[Common.ALL.CouchCap] +Entities.gmod_subway_81-714_lvz.Buttons.couch_cap.CouchCap = @[Common.ALL.CouchCap] + +Entities.gmod_subway_81-714_lvz.Buttons.Battery.VBToggle = @[Common.ALL.VB] + +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A81Toggle = @[Common.717.A81] +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A80Toggle = @[Common.717.A80] +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A18Toggle = @[Common.717.A18] + +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A23Toggle = @[Common.717.A23] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-714_lvz.Buttons.VU.A84Toggle = @[Common.ALL.VU] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.!RZPLight = @[Common.717.RZPL] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.StartSet = @[Common.714.Start] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.RV- = @[Common.714.RV] @[Common.ALL.CCW] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.RV+ = @[Common.714.RV] @[Common.ALL.CW] +Entities.gmod_subway_81-714_lvz.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-714_lvz.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-714_lvz.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] + +Entities.gmod_subway_81-714_lvz.Buttons.Voltages.!BatteryVoltage = @[Common.ALL.BatteryVoltage] #NEW +Entities.gmod_subway_81-714_lvz.Buttons.Voltages.!BatteryCurrent = @[Common.ALL.BatteryCurrent] #NEW +Entities.gmod_subway_81-714_lvz.Buttons.Pressures.!BCPressure = @[Common.ALL.BLTLPressure] #NEW +Entities.gmod_subway_81-714_lvz.Buttons.Pressures.!BLTLPressure = @[Common.ALL.BCPressure] #NEW + +#Spawner: +Entities.gmod_subway_81-717_mvm.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-717_mvm.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] + + +Entities.gmod_subway_81-717_mvm_custom.Spawner.Type.Name = @[Spawner.717.Type] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BodyType.Name = @[Spawner.717.BodyType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BodyType.1 = @[Spawner.717.MVM] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BodyType.2 = @[Spawner.717.LVZ] +Entities.gmod_subway_81-717_mvm_custom.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-717_mvm_custom.Spawner.MaskType.Name = @[Spawner.717.MaskType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.Cran.Name = @[Spawner.717.CranType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.Name = @[Spawner.717.LampType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.2 = @[Spawner.717.Lamp1] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.3 = @[Spawner.717.Lamp2] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.Name = @[Spawner.717.SeatType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.2 = @[Common.Spawner.Old] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.3 = @[Common.Spawner.New] +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.Name = @[Spawner.717.ARS] +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.2 = @[Common.Spawner.Type] 1 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.3 = @[Common.Spawner.Type] 2 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.4 = @[Common.Spawner.Type] 3 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.5 = @[Common.Spawner.Type] 4 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.6 = @[Common.Spawner.Type] 5 +Entities.gmod_subway_81-717_mvm_custom.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-717_mvm_custom.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-717_mvm_custom.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.Name = @[Spawner.717.RingType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.2 = @[Common.Spawner.Type] 1 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.3 = @[Common.Spawner.Type] 2 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.4 = @[Common.Spawner.Type] 3 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.5 = @[Common.Spawner.Type] 4 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.6 = @[Common.Spawner.Type] 5 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.7 = @[Common.Spawner.Type] 6 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.8 = @[Common.Spawner.Type] 7 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.9 = @[Common.Spawner.Type] 8 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.Name = @[Spawner.717.BPSNType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.2 = @[Common.Spawner.Type] 1 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.3 = @[Common.Spawner.Type] 2 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.4 = @[Common.Spawner.Type] 3 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.5 = @[Common.Spawner.Type] 4 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.6 = @[Common.Spawner.Type] 5 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.7 = @[Common.Spawner.Type] 6 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.8 = @[Common.Spawner.Type] 7 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.9 = @[Common.Spawner.Type] 8 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.10 = @[Common.Spawner.Type] 9 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.11 = @[Common.Spawner.Type] 10 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.12 = @[Common.Spawner.Type] 11 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.13 = @[Common.Spawner.Type] 12 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.14 = @[Common.Spawner.Type] 13 +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] + +#Spawner: +Entities.gmod_subway_81-717_lvz.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-717_lvz.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-717_lvz.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-717_lvz.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-717_lvz.Spawner.Type.Name = @[Spawner.Common.EType] +Entities.gmod_subway_81-717_lvz.Spawner.Type.1 = @[Spawner.717.Line2] +Entities.gmod_subway_81-717_lvz.Spawner.Type.2 = @[Spawner.717.Line4] +Entities.gmod_subway_81-717_lvz.Spawner.Type.3 = @[Spawner.717.Line5] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] diff --git a/lua/metrostroi_data/languages/hu_718.lua b/lua/metrostroi_data/languages/hu_718.lua new file mode 100644 index 0000000..5d3cdf3 --- /dev/null +++ b/lua/metrostroi_data/languages/hu_718.lua @@ -0,0 +1,708 @@ +return [[ +#81-718 + +[hu] + +#######Buttons########### +#Cameras +Train.718.BUP = BUP +Train.718.PPZ = PPZ +Train.718.VPU = VPU + +Train.Buttons.LHalf = Dim #NEW (panel lighting) +Train.Buttons.LFull = Bright #NEW (panel lighting) +Train.Buttons.HL5 = Control circuits are not engaged #NEW +Train.Buttons.HL6 = Protection has tripped or low current #NEW +Train.Buttons.HL7 = BBE protection has tripped #NEW +#Common +Common.718.SB4 = Ãramkörök kapcsolásának ellenÅ‘rzése +Common.718.SB5 = Vezérlés átadása (csengÅ‘) +Common.718.SB7K = Tolatási mód fedele +Common.718.SB7 = Tolatási mód +Common.718.SB12 = Automatikus kapcsolóegység engedélyezése +Common.718.SB13 = Automatikus kapcsolóegység letiltása +Common.718.SB15 = Vonat áramellátásának felkapcsolása +Common.718.SB16 = Vonat áramellátásának lekapcsolása + +Common.718.VTPR = ÃramszedÅ‘ papucs elengedÅ‘ kapcsoló +Common.718.RX1 = Szükségmenet 1 +Common.718.KAH2 = KAH: Szükségmenet gombja az ARS nélküli vezetéshez +Common.718.RX2 = Szükségmenet 2 + +Common.718.SPULightStrength = Műszerfal visszajelzÅ‘inek fényessége + +Common.718.Heat = Fülke fűtés +Common.718.SBP22 = Ãramkörök kapcsolásának ellenÅ‘rzése +Common.718.KDPR = Jobb ajtók szükségnyitása +Common.718.KDLR = Bal ajtók szükségnyitása +Common.718.UOS = UOS: Sebességkorlátozó egység (EPV/EPK nélküli vezetéshez) + +Common.718.KES = KES: Szükség kommunikációs vezérlés aktiválva +Common.718.CUV = CUV: Kocsi CUV nem működés visszajelzÅ‘ +Common.718.AIP = AIP: TűzjelzÅ‘ +Common.718.RIP = RIP: TűzjelzÅ‘ készenléti mód +Common.718.VS1 = VS1: ElsÅ‘ szellÅ‘ztetÅ‘ egység kikapcsolva +Common.718.VS2 = VS2: Második szellÅ‘ztetÅ‘ egység kikapcsolva + +#Autobreakers +Common.718.SF51 = SF51: ElsÅ‘dleges ARS áramellátás +Common.718.SF52 = SF52: Tartalék ARS áramellátás +Common.718.SF53 = SF53: ARS fékáramkörök +Common.718.SF60 = SF60: 12V ARS +Common.718.SF61 = SF61: 50V ARS(FMM1) +Common.718.SF77 = SF77: FÅ‘vezérlés szükségvezérlése +Common.718.SF78 = SF78: Szükségvezérlés tartalék vezérlése +Common.718.SF40 = SF40: â„–2 pneumatikus szelep ZPT által +Common.718.SF41 = SF41: Fényszórók +Common.718.SF8 = SF8: Ajtók vezérlése +Common.718.SF11 = SF11: Második szellÅ‘ztetÅ‘ egység vezérlés +Common.718.SF10 = SF10: ElsÅ‘ szellÅ‘ztetÅ‘ egység vezérlés +Common.718.SF7 = SF7: BBE, kompresszor +Common.718.SF50 = SF50: SebességmérÅ‘ +Common.718.SF76 = SF76: TűzjelzÅ‘ +Common.718.SF73 = SF73: Nyomkarima kenés +Common.718.SF3 = SF3: Kocsi áramellátás, CUV +Common.718.SF71 = SF71: Vészhívó +Common.718.SF63 = SF63: Rádióállomás +Common.718.SF54 = SF54: 50A-es utastájékoztató +Common.718.SF65 = SF65: Fülke szellÅ‘ztetés +Common.718.SF55 = SF55: SOT-3 +Common.718.SF9 = SF9: Szükség vonat vezérlés +Common.718.SF6 = SF6: ElsÅ‘dleges vonat vezérlés +Common.718.SF5 = SF5: BKCU vezérlés +Common.718.SF2 = SF2: Vonat áramellátás +Common.718.SF4 = SF4: BUV, PTTI, BCKA áramellátás +Common.718.SF27 = SF27: BVA áramellátás +Common.718.SF46 = SF46: BVA vezérlés +Common.718.SF12 = SF12: BBE bekapcsolás +Common.718.SF13 = SF13: BBE kikapcsolás +Common.718.SF45 = SF45: BBE, világítás kontaktor vezérlés +Common.718.SF16 = SF16: Utastéri világítás vezérlés +Common.718.SF44 = SF44: Utastéri világítás vezérlés áramellátás +Common.718.SF43 = SF43: Tartalék utastéri világítás +Common.718.SF14 = SF14: Vezérlőáramkörök kontaktorának áramellátása +Common.718.SF15 = SF15: Vezérlőáramkörök kontaktorának tartalék áramellátása +Common.718.SF25 = SF25: ÃramszedÅ‘ papucs elengedÅ‘ vezérlés +Common.718.SF72 = SF72: RögzítÅ‘fék vezérlés visszajelzÅ‘ +Common.718.SF56 = SF56: Kompresszor vezérlés +Common.718.SF29 = SF29: â„–1 pneumatikus szelep +Common.718.SF26 = SF26: â„–2 pneumatikus szelep +Common.718.SF42 = SF42: AlgerjesztÅ‘ +Common.718.SF18 = SF18: Bal oldali ajtók nyitása +Common.718.SF20 = SF20: Jobb oldali ajtók nyitása +Common.718.SF17 = SF17: Ajtózárás +Common.718.SF19 = SF19: Tartalék ajtózárás +Common.718.SF21 = SF21: ElsÅ‘dleges kompresszor vezérlés +Common.718.SF22 = SF22: Tartalék kompresszor vezérlés +Common.718.SF34 = SF34: ElsÅ‘ szellÅ‘ztetÅ‘ egység áramellátás +Common.718.SF35 = SF35: Második szellÅ‘ztetÅ‘ egység áramellátás +Common.718.SF23 = SF23: ElsÅ‘ szellÅ‘ztetÅ‘ egység kontaktor +Common.718.SF24 = SF24: Második szellÅ‘ztetÅ‘ egység kontaktor + +#Names +Common.718.MVSU = BUP MVSU +Common.718.MLUP = BUP MLUP +Common.718.MUVS1 = BUP MUVS1 +Common.718.MUVS2 = BUP MUVS2 +Common.718.MP = BUP MP +Common.718.MS = BUP MS + +#A lot of indicators +Common.718.MVSUARSX = @[Common.718.MVSU]: Menet mód engedély a BKBD által +Common.718.MVSUARST = @[Common.718.MVSU]: Fék mód a BKBD által +Common.718.MVSUARSX3 = @[Common.718.MVSU]: X3 mód automatikus vonatvezérlÅ‘ egység által +Common.718.MVSUARSX2 = @[Common.718.MVSU]: X2 mód automatikus vonatvezérlÅ‘ egység által +Common.718.MVSUARSX1 = @[Common.718.MVSU]: X1 mód automatikus vonatvezérlÅ‘ egység által +Common.718.MVSUARS0 = @[Common.718.MVSU]: 0 mód automatikus vonatvezérlÅ‘ egység által +Common.718.MVSUARST1 = @[Common.718.MVSU]: T1 mód automatikus vonatvezérlÅ‘ egység által +Common.718.MVSUARST2 = @[Common.718.MVSU]: T2 mód automatikus vonatvezérlÅ‘ egység által +Common.718.MVSUARST3 = @[Common.718.MVSU]: T3 mód automatikus vonatvezérlÅ‘ egység által +Common.718.MVSUKVX3 = @[Common.718.MVSU]: X3 mód kontroller által +Common.718.MVSUKVX2 = @[Common.718.MVSU]: X2 mód kontroller által +Common.718.MVSUKVX1 = @[Common.718.MVSU]: X1 mód kontroller által +Common.718.MVSUKV0 = @[Common.718.MVSU]: 0 mód kontroller által +Common.718.MVSUKVT1 = @[Common.718.MVSU]: T1 mód kontroller által +Common.718.MVSUKVT2 = @[Common.718.MVSU]: T2 mód kontroller által +Common.718.MVSUKVT3 = @[Common.718.MVSU]: T3 mód kontroller által +Common.718.MVSUKDV = @[Common.718.MVSU]: Ajtó állapot vezérlés +Common.718.MVSUBDV = @[Common.718.MVSU]: Ajtó vezérlés tiltó mód +Common.718.MVSUPB = @[Common.718.MVSU]: PB vagy ARS engedélyezve +Common.718.MVSUARS = @[Common.718.MVSU]: PB vagy ARS letiltva +Common.718.MVSUAVT = @[Common.718.MVSU]: Vészfék a BKBD által +Common.718.MVSUKVV = @[Common.718.MVSU]: "ElÅ‘re" mód bemenet +Common.718.MVSUKVN = @[Common.718.MVSU]: "Hátra" mód bemenet +Common.718.MVSUPVU = @[Common.718.MVSU]: Menet-/fékáram nem alakult ki PVU által (UAVA) +Common.718.MVSURPB = @[Common.718.MVSU]: Menet-/fékáram nem alakult ki éberségi pedál relé által +Common.718.MVSUROT = @[Common.718.MVSU]: Menet-/fékáram nem alakult ki vontatás kikapcsol relé (ARS) által +Common.718.MVSUSOT = @[Common.718.MVSU]: Menet-/fékáram nem alakult ki fék visszajelzÅ‘ (EPV) által +Common.718.MLUPVP = @[Common.718.MLUP]: "ElÅ‘re" mód +Common.718.MLUPNZ = @[Common.718.MLUP]: "Hátra" mód +Common.718.MLUPBUP = @[Common.718.MLUP]: BUP blokkolás +Common.718.MLUPV0 = @[Common.718.MLUP]: Ãllóhelyzet (â„–1 pneumatikus szelep) +Common.718.MLUPKU = @[Common.718.MLUP]: Kontroller hiba +Common.718.MLUPBAV = @[Common.718.MLUP]: Automatikus vonatvezérlÅ‘ egység hiba +Common.718.MLUPKR = @[Common.718.MLUP]: Fordított kontroller hiba !!! +Common.718.MLUPARS = @[Common.718.MLUP]: ARS hiba +Common.718.MUVS1VP = @[Common.718.MUVS1]: "ElÅ‘re" mód kimenet +Common.718.MUVS1NZ = @[Common.718.MUVS1]: "Hátra" mód kimenet +Common.718.MUVS1X = @[Common.718.MUVS1]: "Menet" mód kimenet +Common.718.MUVS1T = @[Common.718.MUVS1]: "Fék" mód kimenet +Common.718.MUVS1U1 = @[Common.718.MUVS1]: "Jelenlegi alapérték 1" mód kimenet +Common.718.MUVS1U2 = @[Common.718.MUVS1]: "Jelenlegi alapérték 2" mód kimenet +Common.718.MUVS1BAV = @[Common.718.MUVS1]: BAV blokkolás kimenet +Common.718.MUVS1BUP = @[Common.718.MUVS1]: BUV blokkolás kimenet +Common.718.MUVS20 = @[Common.718.MUVS2]: "Kifutás" mód kimenet +Common.718.MUVS2ZPT = @[Common.718.MUVS2]: â„–2 pneumatikus szelep +Common.718.MPMP = @[Common.718.MP]: Normál üzem +Common.718.MSMS = @[Common.718.MS]: Normál üzem + +Common.718.MPS = BUV MPS +Common.718.MALP1 = BUV MALP1 +Common.718.MVD = BUV MVD +Common.718.MALP2 = BUV MALP2 +Common.718.MGR = BUV MGR +Common.718.MLU = BUV MLU +Common.718.MUVK = BUV MUVK +Common.718.MIV = BUV MIV +Common.718.MUVK2 = BUV MUVK2 +Common.718.MPSPROV = @[Common.718.MPS]: "Üzem ellenÅ‘rzés" +Common.718.MPSAVR = @[Common.718.MPS]: "Menet/fék mód letiltva AVT által" +Common.718.MPSTARS = @[Common.718.MPS]: "BKBD ARS fék" +Common.718.MPSX = @[Common.718.MPS]: "Menet mód jelzés" +Common.718.MPSNZ = @[Common.718.MPS]: "Hátramenet" +Common.718.MPSNZR = @[Common.718.MPS]: "Szükség hátramenet" +Common.718.MPSVPR = @[Common.718.MPS]: "Szükség elÅ‘remenet" +Common.718.MPSPROV0 = @[Common.718.MPS]: "Üzem ellenÅ‘rzés" +Common.718.MPSSK = @[Common.718.MPS]: "Sebesség" +Common.718.MPST = @[Common.718.MPS]: "Fék mód jelzés" +Common.718.MPSXR = @[Common.718.MPS]: "Szükségmenet 1" +Common.718.MPSU1 = @[Common.718.MPS]: "Jelenlegi alapérték 1" +Common.718.MPSU2 = @[Common.718.MPS]: "Jelenlegi alapérték 2" +Common.718.MPSVP = @[Common.718.MPS]: "ElÅ‘re" +Common.718.MPSVZ = @[Common.718.MPS]: "Védelem visszaállító" +Common.718.MPSXM = @[Common.718.MPS]: "@[Common.718.SB7]" +Common.718.MPSU1R = @[Common.718.MPS]: "Szükségmenet 2" + +Common.718.MALP1MZK = @[Common.718.MALP1]: Azonnali tirisztor kapu blokkolás +Common.718.MALP1FM = @[Common.718.MALP1]: Túlfeszültség-védelem (magasabb, mint 1000V) +Common.718.MALP1400 = @[Common.718.MALP1]: 400V a harmadik sínben elérhetÅ‘ +Common.718.MALP150 = @[Common.718.MALP1]: ElsÅ‘ armatúra egység áremerÅ‘sség elérhetÅ‘ +Common.718.MALP1DIF = @[Common.718.MALP1]: ElsÅ‘ és második egység áramerÅ‘sség különbség +Common.718.MALP1650 = @[Common.718.MALP1]: ElsÅ‘ armatúra egység áremerÅ‘ssége magasabb, mint 650A +Common.718.MALP10 = @[Common.718.MALP1]: Nincs elsÅ‘ armatúra egység áremerÅ‘sség +Common.718.MALP1ARS = @[Common.718.MALP1]: Frekvencia indító hiba +Common.718.MALP1ITA = @[Common.718.MALP1]: ElsÅ‘ egység fék tirisztor üzemzavar > 100A +Common.718.MALP1TR = @[Common.718.MALP1]: Reosztát áremerÅ‘sség > 100A az elsÅ‘ egységben +Common.718.MALP1SN = @[Common.718.MALP1]: Elektromos áramkörök nem alakultak ki +Common.718.MALP1VN = @[Common.718.MALP1]: Ventillátor hiba + + +Common.718.MVDOTK = @[Common.718.MVD]: Menet/fék mód hiba +Common.718.MVDRP = @[Common.718.MVD]: RP működés + +Common.718.MALP2MSU = @[Common.718.MALP1]: Azonnali jelenlegi alapérték visszaállító +Common.718.MALP2800 = @[Common.718.MALP1]: 800V a harmadik sínben elérhetÅ‘ +Common.718.MALP2975 = @[Common.718.MALP1]: Maximális feszültség a harmadik sínben +Common.718.MALP250 = @[Common.718.MALP1]: Második armatúra egység áremerÅ‘sség elérhetÅ‘ +Common.718.MALP2650 = @[Common.718.MALP1]: Második armatúra egység áremerÅ‘sség magasabb, mint 650A +Common.718.MALP20 = @[Common.718.MALP1]: Nincs második armatúra egység áremerÅ‘sség +Common.718.MALP2BV = @[Common.718.MALP1]: BV működtetés +Common.718.MALP2ITB = @[Common.718.MALP1]: Második egység fék tirisztor üzemzavar > 100A + +Common.718.MGRTP1 = @[Common.718.MGR]: ElsÅ‘ áramszedÅ‘ papucs nyomva +Common.718.MGRTP3 = @[Common.718.MGR]: Harmadik áramszedÅ‘ papucs nyomva +Common.718.MGRKHA = @[Common.718.MGR]: ElsÅ‘ menetkontaktor egység üzemben +Common.718.MGRKTA = @[Common.718.MGR]: ElsÅ‘ menetkontaktor egység üzemben +Common.718.MGRTP2 = @[Common.718.MGR]: Második áramszedÅ‘ papucs nyomva +Common.718.MGRTP4 = @[Common.718.MGR]: Negyedik áramszedÅ‘ papucs nyomva +Common.718.MGRKHB = @[Common.718.MGR]: Második menetkontaktor egység üzemben +Common.718.MGRKTB = @[Common.718.MGR]: Második menetkontaktor egység üzemben +Common.718.MGRKRV = @[Common.718.MGR]: ElÅ‘remeneti irányváltó kontaktorok üzemben #reverse elÅ‘refele váltva +Common.718.MGRNV = @[Common.718.MGR]: PTTI ventillátor hiba +Common.718.MGRBV = @[Common.718.MGR]: BV üzemben +Common.718.MGRLK = @[Common.718.MGR]: Vonalkontaktor üzemben +Common.718.MGRKRN = @[Common.718.MGR]: Hátrameneti irányváltó kontaktorok üzemben #reverse hátrafele váltva + +Common.718.MLUAKT = @[Common.718.MLU]: Fék parancs +Common.718.MLUAXH = @[Common.718.MLU]: Menet parancs +Common.718.MLUAVP = @[Common.718.MLU]: Irányváltó elÅ‘remenetben parancs engedélyezve +Common.718.MLUANZ = @[Common.718.MLU]: Irányváltó hátramenetben parancs engedélyezve +Common.718.MLUASS = @[Common.718.MLU]: Ãramkör kialakult +Common.718.MLUAPV = @[Common.718.MLU]: AlgerjesztÅ‘ engedélyezÅ‘ parancs +Common.718.MLUALK = @[Common.718.MLU]: Vonalkontaktor engedélyezÅ‘ parancs + +Common.718.MUVK1V1 = @[Common.718.MUVK]: â„–1 pneumatikus szelep tekercs vezérlés +Common.718.MUVK1KT = @[Common.718.MUVK]: Fék kontaktor vezérlés +Common.718.MUVK1KH = @[Common.718.MUVK]: Menet kontaktor vezérlés +Common.718.MUVK1LK = @[Common.718.MUVK]: Vonalkontaktor vezérlés +Common.718.MUVK1PV = @[Common.718.MUVK]: AlgerjesztÅ‘ vezérlés +Common.718.MUVK1NZ = @[Common.718.MUVK]: Irányváltó hátramenetben vezérlés +Common.718.MUVK1SN = @[Common.718.MUVK]: Kocsi áramellátás áramkör nem alakult ki + +Common.718.MIV33 = @[Common.718.MIV]: Frekvencia indítás befejezÅ‘dött +Common.718.MIVV1 = @[Common.718.MIV]: â„–1 pneumatikus szelep +Common.718.MIVSMA = @[Common.718.MIV]: Maximális elsÅ‘ alapérték egység áremerÅ‘sség jelzés +Common.718.MIVSMB = @[Common.718.MIV]: Maximális második alapérték egység áremerÅ‘sség jelzés + +Common.718.MUVK2RTM = @[Common.718.MUVK2]: Minimális áramerÅ‘sség relé vezérlés +Common.718.MUVK2RKT = @[Common.718.MUVK2]: Fék vezérlÅ‘ relé vezérlés +Common.718.MUVK2RP = @[Common.718.MUVK2]: Védelem működtetés +Common.718.MUVK2OTK = @[Common.718.MUVK2]: Kocsi hiba +Common.718.MUVK275 = @[Common.718.MUVK2]: Tartalék BUV áramellátás +Common.718.MUVK2VP = @[Common.718.MUVK2]: Irányváltó elÅ‘remenetben vezérlés + + +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF51Toggle = @[Common.718.SF51] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF52Toggle = @[Common.718.SF52] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF53Toggle = @[Common.718.SF53] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF60Toggle = @[Common.718.SF60] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF61Toggle = @[Common.718.SF61] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF77Toggle = @[Common.718.SF77] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF78Toggle = @[Common.718.SF78] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF40Toggle = @[Common.718.SF40] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF41Toggle = @[Common.718.SF41] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF8Toggle = @[Common.718.SF8] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF11Toggle = @[Common.718.SF11] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF10Toggle = @[Common.718.SF10] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF7Toggle = @[Common.718.SF7] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF50Toggle = @[Common.718.SF50] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF76Toggle = @[Common.718.SF76] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF73Toggle = @[Common.718.SF73] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF3Toggle = @[Common.718.SF3] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF71Toggle = @[Common.718.SF71] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF63Toggle = @[Common.718.SF63] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF54Toggle = @[Common.718.SF54] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF65Toggle = @[Common.718.SF65] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF55Toggle = @[Common.718.SF55] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF9Toggle = @[Common.718.SF9] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF6Toggle = @[Common.718.SF6] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF5Toggle = @[Common.718.SF5] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF2Toggle = @[Common.718.SF2] + +Entities.gmod_subway_81-718.Buttons.Main.SA5Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-718.Buttons.Main.SB3Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-718.Buttons.Main.SA7Toggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-718.Buttons.Main.SB1Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-718.Buttons.Main.SB2Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-718.Buttons.Main.SA8Toggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-718.Buttons.Main.SB4Set = @[Common.718.SB4] +Entities.gmod_subway_81-718.Buttons.Main.SB5Set = @[Common.718.SB5] +Entities.gmod_subway_81-718.Buttons.Main.SA9Toggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-718.Buttons.Main.SA13Toggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-718.Buttons.Main.SA14Toggle = @[Common.ALL.ARSR] +Entities.gmod_subway_81-718.Buttons.Main.SA15Toggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-718.Buttons.Main.SA2Toggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-718.Buttons.Main.SB6KToggle = @[Common.ALL.KAHK] +Entities.gmod_subway_81-718.Buttons.Main.SB6Set = @[Common.ALL.KAH] +Entities.gmod_subway_81-718.Buttons.Main.SB7KToggle = @[Common.718.SB7K] +Entities.gmod_subway_81-718.Buttons.Main.SB7Set = @[Common.718.SB7] +Entities.gmod_subway_81-718.Buttons.Main.SB8Set = @[Common.ARS.KVTR] +Entities.gmod_subway_81-718.Buttons.Main.SB10Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-718.Buttons.Main.SB9Set = @[Common.ARS.KVT] +Entities.gmod_subway_81-718.Buttons.Main.SB11Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-718.Buttons.Main.SA16Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-718.Buttons.Main.SB12Set = @[Common.718.SB12] +Entities.gmod_subway_81-718.Buttons.Main.SB13Set = @[Common.718.SB13] +Entities.gmod_subway_81-718.Buttons.Main.SB14Set = @[Common.ALL.RMK] +Entities.gmod_subway_81-718.Buttons.Main.SB15Set = @[Common.718.SB15] +Entities.gmod_subway_81-718.Buttons.Main.SB16Set = @[Common.718.SB16] + + +Entities.gmod_subway_81-718.Buttons.Battery.RCToggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-718.Buttons.Battery.VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-718.Buttons.Battery.VTPR- = @[Common.718.VTPR] @[Common.ALL.CCW] +Entities.gmod_subway_81-718.Buttons.Battery.VTPR+ = @[Common.718.VTPR] @[Common.ALL.CW] + + +Entities.gmod_subway_81-718.Buttons.KR.SBR14Set = @[Common.718.RX1] +Entities.gmod_subway_81-718.Buttons.KR.SBR16Set = @[Common.718.KAH2] +Entities.gmod_subway_81-718.Buttons.KR.SBR15Set = @[Common.718.RX2] + + +Entities.gmod_subway_81-718.Buttons.VPU.SAP8Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-718.Buttons.VPU.SAP13Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-718.Buttons.VPU.SAP36Toggle = @[Common.ALL.ES] +Entities.gmod_subway_81-718.Buttons.VPU.SAP12Toggle = @[Common.720.AppLights] +Entities.gmod_subway_81-718.Buttons.VPU.SAP11Toggle = @[Common.718.Heat] +Entities.gmod_subway_81-718.Buttons.VPU.SAP23Toggle = @[Common.ARS.VP] +Entities.gmod_subway_81-718.Buttons.VPU.SAP9Toggle = @[Common.720.Vent1] +Entities.gmod_subway_81-718.Buttons.VPU.SAP10Toggle = @[Common.720.Vent2] +Entities.gmod_subway_81-718.Buttons.VPU.SAP3Toggle = @[Common.ALL.UNCh] +Entities.gmod_subway_81-718.Buttons.VPU.SAP39Toggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-718.Buttons.VPU.SBP22Set = @[Common.718.SBP22] +Entities.gmod_subway_81-718.Buttons.VPU.SBP6Set = @[Common.718.KDPR] +Entities.gmod_subway_81-718.Buttons.VPU.SBP4Set = @[Common.718.KDLR] +Entities.gmod_subway_81-718.Buttons.VPU.SAP14Toggle = @[Common.ARS.Freq] @[Common.ARS.FreqU] +Entities.gmod_subway_81-718.Buttons.VPU.SAP26Toggle = @[Common.718.UOS] +Entities.gmod_subway_81-718.Buttons.VPU.SAP24Toggle = @[Common.ALL.VOVT] + +Entities.gmod_subway_81-718.Buttons.ARS.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-718.Buttons.ARS.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-718.Buttons.ARS.!SD = @[Common.ALL.LSD] +Entities.gmod_subway_81-718.Buttons.ARS.!KT = @[Common.ARS.KT] +Entities.gmod_subway_81-718.Buttons.ARS.!RS = @[Common.ARS.RS] +Entities.gmod_subway_81-718.Buttons.ARS.!SK = @[Common.ARS.LN] +Entities.gmod_subway_81-718.Buttons.ARS.!04 = @[Common.ARS.04] +Entities.gmod_subway_81-718.Buttons.ARS.!0 = @[Common.ARS.0] +Entities.gmod_subway_81-718.Buttons.ARS.!40 = @[Common.ARS.40] +Entities.gmod_subway_81-718.Buttons.ARS.!60 = @[Common.ARS.60] +Entities.gmod_subway_81-718.Buttons.ARS.!70 = @[Common.ARS.70] +Entities.gmod_subway_81-718.Buttons.ARS.!80 = @[Common.ARS.80] +Entities.gmod_subway_81-718.Buttons.ARS.!KES = @[Common.718.KES] +Entities.gmod_subway_81-718.Buttons.ARS.!ST = @[Common.ALL.BrT] +Entities.gmod_subway_81-718.Buttons.ARS.!CUV = @[Common.718.CUV] +Entities.gmod_subway_81-718.Buttons.ARS.!AVU = @[Common.ALL.LAVU] +Entities.gmod_subway_81-718.Buttons.ARS.!AIP = @[Common.718.AIP] +Entities.gmod_subway_81-718.Buttons.ARS.!RIP = @[Common.718.RIP] +Entities.gmod_subway_81-718.Buttons.ARS.!KVD = @[Common.ARS.VD] +Entities.gmod_subway_81-718.Buttons.ARS.!VS1 = @[Common.718.VS1] +Entities.gmod_subway_81-718.Buttons.ARS.!VS2 = @[Common.718.VS2] + +Entities.gmod_subway_81-718.Buttons.Right.SA1/1Toggle = @[Common.ALL.VF1] +Entities.gmod_subway_81-718.Buttons.Right.SA2/1Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-718.Buttons.Right.SA5/1Toggle = @[Common.718.SPULightStrength] +Entities.gmod_subway_81-718.Buttons.Right.SA4/1Toggle = @[Common.ALL.GaugeLights] + +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKDV = @[Common.718.MVSUKDV] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUBDV = @[Common.718.MVSUBDV] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUPB = @[Common.718.MVSUPB] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARS = @[Common.718.MVSUARS] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUAVT = @[Common.718.MVSUAVT] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVV = @[Common.718.MVSUKVV] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVN = @[Common.718.MVSUKVN] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVX3 = @[Common.718.MVSUKVX3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVX2 = @[Common.718.MVSUKVX2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVX1 = @[Common.718.MVSUKVX1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKV0 = @[Common.718.MVSUKV0] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVT1 = @[Common.718.MVSUKVT1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVT2 = @[Common.718.MVSUKVT2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVT3 = @[Common.718.MVSUKVT3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUPVU = @[Common.718.MVSUPVU] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSURPB = @[Common.718.MVSURPB] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX = @[Common.718.MVSUARSX] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST = @[Common.718.MVSUARST] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX3 = @[Common.718.MVSUARSX3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX2 = @[Common.718.MVSUARSX2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX1 = @[Common.718.MVSUARSX1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARS0 = @[Common.718.MVSUARS0] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST1 = @[Common.718.MVSUARST1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST2 = @[Common.718.MVSUARST2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST3 = @[Common.718.MVSUARST3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUROT = @[Common.718.MVSUROT] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUSOT = @[Common.718.MVSUSOT] + +Entities.gmod_subway_81-718.Buttons.BUP_MUVS2.MUVS20 = @[Common.718.MUVS20] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS2.MUVS2ZPT = @[Common.718.MUVS2ZPT] + +Entities.gmod_subway_81-718.Buttons.BUP_MP.MPMP = @[Common.718.MPMP] +Entities.gmod_subway_81-718.Buttons.BUP_MS.MSMS = @[Common.718.MSMS] + +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1VP = @[Common.718.MUVS1VP] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1NZ = @[Common.718.MUVS1NZ] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1X = @[Common.718.MUVS1X] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1T = @[Common.718.MUVS1T] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1U1 = @[Common.718.MUVS1U1] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1U2 = @[Common.718.MUVS1U2] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1BAV = @[Common.718.MUVS1BAV] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1BUP = @[Common.718.MUVS1BUP] + +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPVP = @[Common.718.MLUPVP] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPNZ = @[Common.718.MLUPNZ] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPBUP = @[Common.718.MLUPBUP] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPV0 = @[Common.718.MLUPV0] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPKU = @[Common.718.MLUPKU] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPBAV = @[Common.718.MLUPBAV] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPKR = @[Common.718.MLUPKR] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPARS = @[Common.718.MLUPARS] + +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSPROV = @[Common.718.MPSPROV] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSAVR = @[Common.718.MPSAVR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSTARS = @[Common.718.MPSTARS] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSX = @[Common.718.MPSX] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSNZ = @[Common.718.MPSNZ] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSNZR = @[Common.718.MPSNZR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSPROV0 = @[Common.718.MPSPROV0] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSSK = @[Common.718.MPSSK] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPST = @[Common.718.MPST] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSXR = @[Common.718.MPSXR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSU1 = @[Common.718.MPSU1] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSU2 = @[Common.718.MPSU2] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSVP = @[Common.718.MPSVP] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSVPR = @[Common.718.MPSVPR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSVZ = @[Common.718.MPSVZ] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSXM = @[Common.718.MPSXM] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSU1R = @[Common.718.MPSU1R] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1MZK = @[Common.718.MALP1MZK] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1FM = @[Common.718.MALP1FM] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1400 = @[Common.718.MALP1400] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP150 = @[Common.718.MALP150] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1DIF = @[Common.718.MALP1DIF] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1650 = @[Common.718.MALP1650] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP10 = @[Common.718.MALP10] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1ARS = @[Common.718.MALP1ARS] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1ITA = @[Common.718.MALP1ITA] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1TR = @[Common.718.MALP1TR] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1SN = @[Common.718.MALP1SN] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1VN = @[Common.718.MALP1VN] +Entities.gmod_subway_81-718.Buttons.BUV_MVD.MVDOTK = @[Common.718.MVDOTK] +Entities.gmod_subway_81-718.Buttons.BUV_MVD.MVDRP = @[Common.718.MVDRP] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2MSU = @[Common.718.MALP2MSU] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2800 = @[Common.718.MALP2800] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2975 = @[Common.718.MALP2975] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP250 = @[Common.718.MALP250] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2650 = @[Common.718.MALP2650] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP20 = @[Common.718.MALP20] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2BV = @[Common.718.MALP2BV] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2ITB = @[Common.718.MALP2ITB] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP1 = @[Common.718.MGRTP1] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP3 = @[Common.718.MGRTP3] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKHA = @[Common.718.MGRKHA] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKTA = @[Common.718.MGRKTA] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP2 = @[Common.718.MGRTP2] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP4 = @[Common.718.MGRTP4] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKHB = @[Common.718.MGRKHB] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKTB = @[Common.718.MGRKTB] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKRV = @[Common.718.MGRKRV] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRNV = @[Common.718.MGRNV] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRBV = @[Common.718.MGRBV] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRLK = @[Common.718.MGRLK] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKRN = @[Common.718.MGRKRN] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAKT = @[Common.718.MLUAKT] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAXH = @[Common.718.MLUAXH] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAVP = @[Common.718.MLUAVP] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUANZ = @[Common.718.MLUANZ] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUASS = @[Common.718.MLUASS] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAPV = @[Common.718.MLUAPV] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUALK = @[Common.718.MLUALK] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1V1 = @[Common.718.MUVK1V1] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1KT = @[Common.718.MUVK1KT] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1KH = @[Common.718.MUVK1KH] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1LK = @[Common.718.MUVK1LK] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1PV = @[Common.718.MUVK1PV] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1NZ = @[Common.718.MUVK1NZ] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1SN = @[Common.718.MUVK1SN] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIV33 = @[Common.718.MIV33] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIVV1 = @[Common.718.MIVV1] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIVSMA = @[Common.718.MIVSMA] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIVSMB = @[Common.718.MIVSMB] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2RTM = @[Common.718.MUVK2RTM] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2RKT = @[Common.718.MUVK2RKT] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2RP = @[Common.718.MUVK2RP] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2OTK = @[Common.718.MUVK2OTK] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK275 = @[Common.718.MUVK275] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2VP = @[Common.718.MUVK2VP] + +Entities.gmod_subway_81-718.Buttons.PVZ.SF4Toggle = @[Common.718.SF4] +Entities.gmod_subway_81-718.Buttons.PVZ.SF27Toggle = @[Common.718.SF27] +Entities.gmod_subway_81-718.Buttons.PVZ.SF46Toggle = @[Common.718.SF46] +Entities.gmod_subway_81-718.Buttons.PVZ.SF12Toggle = @[Common.718.SF12] +Entities.gmod_subway_81-718.Buttons.PVZ.SF13Toggle = @[Common.718.SF13] +Entities.gmod_subway_81-718.Buttons.PVZ.SF45Toggle = @[Common.718.SF45] +Entities.gmod_subway_81-718.Buttons.PVZ.SF16Toggle = @[Common.718.SF16] +Entities.gmod_subway_81-718.Buttons.PVZ.SF44Toggle = @[Common.718.SF44] +Entities.gmod_subway_81-718.Buttons.PVZ.SF43Toggle = @[Common.718.SF43] +Entities.gmod_subway_81-718.Buttons.PVZ.SF14Toggle = @[Common.718.SF14] +Entities.gmod_subway_81-718.Buttons.PVZ.SF15Toggle = @[Common.718.SF15] +Entities.gmod_subway_81-718.Buttons.PVZ.SF25Toggle = @[Common.718.SF25] +Entities.gmod_subway_81-718.Buttons.PVZ.SF72Toggle = @[Common.718.SF72] +Entities.gmod_subway_81-718.Buttons.PVZ.SF29Toggle = @[Common.718.SF29] +Entities.gmod_subway_81-718.Buttons.PVZ.SF26Toggle = @[Common.718.SF26] +Entities.gmod_subway_81-718.Buttons.PVZ.SF42Toggle = @[Common.718.SF42] +Entities.gmod_subway_81-718.Buttons.PVZ.SF18Toggle = @[Common.718.SF18] +Entities.gmod_subway_81-718.Buttons.PVZ.SF20Toggle = @[Common.718.SF20] +Entities.gmod_subway_81-718.Buttons.PVZ.SF17Toggle = @[Common.718.SF17] +Entities.gmod_subway_81-718.Buttons.PVZ.SF19Toggle = @[Common.718.SF19] +Entities.gmod_subway_81-718.Buttons.PVZ.SF21Toggle = @[Common.718.SF21] +Entities.gmod_subway_81-718.Buttons.PVZ.SF22Toggle = @[Common.718.SF22] +Entities.gmod_subway_81-718.Buttons.PVZ.SF34Toggle = @[Common.718.SF34] +Entities.gmod_subway_81-718.Buttons.PVZ.SF35Toggle = @[Common.718.SF35] +Entities.gmod_subway_81-718.Buttons.PVZ.SF23Toggle = @[Common.718.SF23] +Entities.gmod_subway_81-718.Buttons.PVZ.SF24Toggle = @[Common.718.SF24] + +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-718.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-718.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-718.Buttons.HelperPanel.SA6Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-718.Buttons.HelperPanel.SA24Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-718.Buttons.HelperPanel.SB20Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-718.Buttons.HelperPanel.SB21Set = @[Common.ALL.Program2] + +Entities.gmod_subway_81-718.Buttons.BZOS.SAB1Toggle = @[Common.BZOS.On] +Entities.gmod_subway_81-718.Buttons.BZOS.!VH1 = @[Common.BZOS.VH1] +Entities.gmod_subway_81-718.Buttons.BZOS.!VH2 = @[Common.BZOS.VH2] + +Entities.gmod_subway_81-718.Buttons.CabVent.PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-718.Buttons.CabVent.PVK+ = @[Common.CabVent.PVK+] + +Entities.gmod_subway_81-718.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-718.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-718.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-718.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-718.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-718.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-718.Buttons.OtsekDoor1.OtsekDoor1 = @[Common.ALL.OtsekDoor1] +Entities.gmod_subway_81-718.Buttons.OtsekDoor2.OtsekDoor2 = @[Common.ALL.OtsekDoor2] +Entities.gmod_subway_81-718.Buttons.DriverValveDisconnect.EPKToggle = @[Common.ALL.EPV] +Entities.gmod_subway_81-718.Buttons.DriverValveDisconnect.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-718.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle = @[Common.ALL.DriverValveDisconnect] + +Entities.gmod_subway_81-718.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-718.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-718.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] + +Entities.gmod_subway_81-718.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] + +Entities.gmod_subway_81-718.Buttons.HVMeters.!I13 = @[Common.ALL.EnginesCurrent1] +Entities.gmod_subway_81-718.Buttons.HVMeters.!I24 = @[Common.ALL.EnginesCurrent2] +Entities.gmod_subway_81-718.Buttons.HVMeters.!HVVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_81-718.Buttons.HVMeters.!BatteryCurrent = @[Common.ALL.BatteryCurrent] +Entities.gmod_subway_81-718.Buttons.PneumaticPanels.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-718.Buttons.PneumaticPanels.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-718.Buttons.Left.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSPROV = @[Common.718.MPSPROV] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSAVR = @[Common.718.MPSAVR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSTARS = @[Common.718.MPSTARS] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSX = @[Common.718.MPSX] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSNZ = @[Common.718.MPSNZ] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSNZR = @[Common.718.MPSNZR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSPROV0 = @[Common.718.MPSPROV0] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSSK = @[Common.718.MPSSK] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPST = @[Common.718.MPST] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSXR = @[Common.718.MPSXR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSU1 = @[Common.718.MPSU1] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSU2 = @[Common.718.MPSU2] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSVP = @[Common.718.MPSVP] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSVPR = @[Common.718.MPSVPR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSVZ = @[Common.718.MPSVZ] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSXM = @[Common.718.MPSXM] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSU1R = @[Common.718.MPSU1R] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1MZK = @[Common.718.MALP1MZK] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1FM = @[Common.718.MALP1FM] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1400 = @[Common.718.MALP1400] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP150 = @[Common.718.MALP150] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1DIF = @[Common.718.MALP1DIF] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1650 = @[Common.718.MALP1650] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP10 = @[Common.718.MALP10] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1ARS = @[Common.718.MALP1ARS] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1ITA = @[Common.718.MALP1ITA] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1TR = @[Common.718.MALP1TR] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1SN = @[Common.718.MALP1SN] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1VN = @[Common.718.MALP1VN] +Entities.gmod_subway_81-719.Buttons.BUV_MVD.MVDOTK = @[Common.718.MVDOTK] +Entities.gmod_subway_81-719.Buttons.BUV_MVD.MVDRP = @[Common.718.MVDRP] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2MSU = @[Common.718.MALP2MSU] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2800 = @[Common.718.MALP2800] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2975 = @[Common.718.MALP2975] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP250 = @[Common.718.MALP250] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2650 = @[Common.718.MALP2650] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP20 = @[Common.718.MALP20] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2BV = @[Common.718.MALP2BV] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2ITB = @[Common.718.MALP2ITB] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP1 = @[Common.718.MGRTP1] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP3 = @[Common.718.MGRTP3] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKHA = @[Common.718.MGRKHA] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKTA = @[Common.718.MGRKTA] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP2 = @[Common.718.MGRTP2] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP4 = @[Common.718.MGRTP4] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKHB = @[Common.718.MGRKHB] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKTB = @[Common.718.MGRKTB] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKRV = @[Common.718.MGRKRV] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRNV = @[Common.718.MGRNV] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRBV = @[Common.718.MGRBV] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRLK = @[Common.718.MGRLK] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKRN = @[Common.718.MGRKRN] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAKT = @[Common.718.MLUAKT] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAXH = @[Common.718.MLUAXH] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAVP = @[Common.718.MLUAVP] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUANZ = @[Common.718.MLUANZ] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUASS = @[Common.718.MLUASS] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAPV = @[Common.718.MLUAPV] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUALK = @[Common.718.MLUALK] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1V1 = @[Common.718.MUVK1V1] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1KT = @[Common.718.MUVK1KT] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1KH = @[Common.718.MUVK1KH] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1LK = @[Common.718.MUVK1LK] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1PV = @[Common.718.MUVK1PV] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1NZ = @[Common.718.MUVK1NZ] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1SN = @[Common.718.MUVK1SN] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIV33 = @[Common.718.MIV33] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIVV1 = @[Common.718.MIVV1] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIVSMA = @[Common.718.MIVSMA] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIVSMB = @[Common.718.MIVSMB] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2RTM = @[Common.718.MUVK2RTM] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2RKT = @[Common.718.MUVK2RKT] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2RP = @[Common.718.MUVK2RP] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2OTK = @[Common.718.MUVK2OTK] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK275 = @[Common.718.MUVK275] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2VP = @[Common.718.MUVK2VP] +Entities.gmod_subway_81-719.Buttons.PVZ.SF4Toggle = @[Common.718.SF4] +Entities.gmod_subway_81-719.Buttons.PVZ.SF27Toggle = @[Common.718.SF27] +Entities.gmod_subway_81-719.Buttons.PVZ.SF46Toggle = @[Common.718.SF46] +Entities.gmod_subway_81-719.Buttons.PVZ.SF12Toggle = @[Common.718.SF12] +Entities.gmod_subway_81-719.Buttons.PVZ.SF13Toggle = @[Common.718.SF13] +Entities.gmod_subway_81-719.Buttons.PVZ.SF45Toggle = @[Common.718.SF45] +Entities.gmod_subway_81-719.Buttons.PVZ.SF16Toggle = @[Common.718.SF16] +Entities.gmod_subway_81-719.Buttons.PVZ.SF44Toggle = @[Common.718.SF44] +Entities.gmod_subway_81-719.Buttons.PVZ.SF43Toggle = @[Common.718.SF43] +Entities.gmod_subway_81-719.Buttons.PVZ.SF14Toggle = @[Common.718.SF14] +Entities.gmod_subway_81-719.Buttons.PVZ.SF15Toggle = @[Common.718.SF15] +Entities.gmod_subway_81-719.Buttons.PVZ.SF25Toggle = @[Common.718.SF25] +Entities.gmod_subway_81-719.Buttons.PVZ.SF72Toggle = @[Common.718.SF72] +Entities.gmod_subway_81-719.Buttons.PVZ.SF56Toggle = @[Common.718.SF56] +Entities.gmod_subway_81-719.Buttons.PVZ.SF29Toggle = @[Common.718.SF29] +Entities.gmod_subway_81-719.Buttons.PVZ.SF26Toggle = @[Common.718.SF26] +Entities.gmod_subway_81-719.Buttons.PVZ.SF42Toggle = @[Common.718.SF42] +Entities.gmod_subway_81-719.Buttons.PVZ.SF18Toggle = @[Common.718.SF18] +Entities.gmod_subway_81-719.Buttons.PVZ.SF20Toggle = @[Common.718.SF20] +Entities.gmod_subway_81-719.Buttons.PVZ.SF17Toggle = @[Common.718.SF17] +Entities.gmod_subway_81-719.Buttons.PVZ.SF19Toggle = @[Common.718.SF19] +Entities.gmod_subway_81-719.Buttons.PVZ.SF21Toggle = @[Common.718.SF21] +Entities.gmod_subway_81-719.Buttons.PVZ.SF22Toggle = @[Common.718.SF22] +Entities.gmod_subway_81-719.Buttons.PVZ.SF34Toggle = @[Common.718.SF34] +Entities.gmod_subway_81-719.Buttons.PVZ.SF35Toggle = @[Common.718.SF35] +Entities.gmod_subway_81-719.Buttons.PVZ.SF23Toggle = @[Common.718.SF23] +Entities.gmod_subway_81-719.Buttons.PVZ.SF24Toggle = @[Common.718.SF24] + +Entities.gmod_subway_81-719.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.RearPneumatic.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-719.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-719.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-719.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-719.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-719.Buttons.couch_cap_o.CouchCap = @[Common.ALL.CouchCap] +Entities.gmod_subway_81-719.Buttons.couch_cap.CouchCap = @[Common.ALL.CouchCap] + +Entities.gmod_subway_81-719.Buttons.Battery.VBToggle = @[Common.ALL.VB] + +Entities.gmod_subway_81-719.Buttons.Voltages.!BatteryVoltage = @[Common.ALL.BatteryVoltage] #NEW +Entities.gmod_subway_81-719.Buttons.Voltages.!BatteryCurrent = @[Common.ALL.BatteryCurrent] #NEW +Entities.gmod_subway_81-719.Buttons.Pressures.!BCPressure = @[Common.ALL.BLTLPressure] #NEW +Entities.gmod_subway_81-719.Buttons.Pressures.!BLTLPressure = @[Common.ALL.BCPressure] #NEW +#Spawner: +Entities.gmod_subway_81-718.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-718.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-718.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-718.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-718.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-718.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-718.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-718.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-718.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-718.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] diff --git a/lua/metrostroi_data/languages/hu_720.lua b/lua/metrostroi_data/languages/hu_720.lua new file mode 100644 index 0000000..5a3963c --- /dev/null +++ b/lua/metrostroi_data/languages/hu_720.lua @@ -0,0 +1,421 @@ +return [[ +#81-720 + +[hu] + +#######Buttons########### +#Cameras +Train.720.CameraCond = LégkeverÅ‘, IGLA +Train.720.CameraPPZ = PPZ +Train.720.CameraPV = VPU +Train.720.CameraVityaz = SAU "Vityaz" +Train.720.CameraKRMH = KRMSH és UAVA csapok +Train.720.CameraPVZ = PVZ + +#Common +Common.720.SF1 = SF1: FÅ‘ áramellátás +Common.720.SF2 = SF2: FÅ‘vezérlés +Common.720.SF3 = SF3: Szükségirányítás +Common.720.SF4 = SF4: BARS +Common.720.SF5 = SF5: BUP (vonatvezérlÅ‘ egység) +Common.720.SF6 = SF6: BKCU (vezéráramkör kommutátor egység) +Common.720.SF7 = SF7: PPO (ASOTP) +Common.720.SF8 = SF8: Utastájékoztató +Common.720.SF9 = SF9: Rádióállomás +Common.720.SF10 = SF10: Kocsi irány +Common.720.SF11 = SF11: Mozgás irány +Common.720.SF12 = SF12: Tompított fényszóró +Common.720.SF13 = SF13: Távolsági fényszóró +Common.720.SF14 = SF14: ZárjelzÅ‘ lámpák +Common.720.SF15 = SF15: @[Common.703.VU3] +Common.720.SF16 = SF16: @[Common.703.VU1] +Common.720.SF17 = SF17: Fülke légkondícionáló +Common.720.SF18 = SF18: Nyomkarima kenés +Common.720.SF19 = SF19: Légfékkar fÅ‘ áramellátás +Common.720.SF20 = SF20: Légfékkar tartalék áramellátás +Common.720.SF21 = SF21: Ajtó nyitás +Common.720.SF22 = SF22: Ajtó zárás + +Common.720.SFV1 = SF1: Kocsi vezérlÅ‘ áramkör áramellátás +Common.720.SFV2 = SF2: Kocsi vezérlÅ‘egység áramellátás +Common.720.SFV3 = SF3: Vontatómotor vezérlÅ‘egység áramellátás +Common.720.SFV4 = SF4: Vontatómotor vezérlÅ‘egység vezérlés +Common.720.SFV5 = SF5: Szükség vontatómotor vezérlÅ‘egység vezérlés +Common.720.SFV6 = SF6: BUTP áramellátás +Common.720.SFV7 = SF7: Ãramellátás +Common.720.SFV8 = SF8: BV vezérlés +Common.720.SFV9 = SF9: BV áramellátás +Common.720.SFV10 = SF10: PPO (ASOTP PCBK) +Common.720.SFV11 = SF11: Kompresszor +Common.720.SFV12 = SF12: Ajtó zárás +Common.720.SFV13 = SF13: Jobb oldali ajtók nyitása +Common.720.SFV14 = SF14: Bal oldali ajtók nyitása +Common.720.SFV15 = SF15: Ãtjáróajtók +Common.720.SFV16 = SF16: Utastájékoztató +Common.720.SFV17 = SF17: Vészhívó +Common.720.SFV18 = SF18: @[Common.ALL.Unsused1] +Common.720.SFV19 = SF19: Utastéri világítás áramellátás +Common.720.SFV20 = SF20: Tartalék utastéri világítás +Common.720.SFV21 = SF21: SebességérzékelÅ‘ +Common.720.SFV22 = SF22: RögzítÅ‘fék +Common.720.SFV23 = SF23: ElsÅ‘ szellÅ‘ztetÅ‘ egység vezérlés +Common.720.SFV24 = SF24: Második szellÅ‘ztetÅ‘ egység vezérlés +Common.720.SFV25 = SF25: ElsÅ‘ szellÅ‘ztetÅ‘ egység áramellátás +Common.720.SFV26 = SF26: Második szellÅ‘ztetÅ‘ egység áramellátás +Common.720.SFV27 = SF27: GerjesztÅ‘ áramellátás +Common.720.SFV28 = SF28: TöltÅ‘ kondenzátor áramellátás +Common.720.SFV29 = SF29: ÃramszedÅ‘ papucsok +Common.720.SFV30 = SF30: Vonal sémák és csipogó +Common.720.SFV31 = SF31: @[Common.ALL.Unsused1] +Common.720.SFV32 = SF32: @[Common.ALL.Unsused1] +Common.720.SFV33 = SF33: @[Common.ALL.Unsused1] + +Common.720.VentCMode = SzellÅ‘ztetés mód +Common.720.VentHMode+ = Fűtés erejének növelése +Common.720.VentHMode- = Fűtés erejének csökkentése +Common.720.VentSMode- = Fülke szellÅ‘ztetÅ‘ erejének növelése +Common.720.VentSMode+ = Fülke szellÅ‘ztetÅ‘ erejének csökkentése + +Common.720.Pant1 = ElsÅ‘ áramszedÅ‘ papucs egység elengedés +Common.720.Pant2 = Második áramszedÅ‘ papucs egység elengedés +Common.720.Vent1 = ElsÅ‘ szellÅ‘ztetÅ‘ egység +Common.720.Vent2 = Második szellÅ‘ztetÅ‘ egység +Common.720.TorecDoors = Ãtjáróajtók +Common.720.BBER = Tartalék BBE +Common.720.BBE = BBE: Ãramellátás +Common.720.CabLightStrength = Fülkevilágítás fényerÅ‘sség +Common.720.AppLights = Hátfalszekrény világítás +Common.720.BARSBlock = Hibás BARS (ARS egység) blokkoló + +Common.720.Accel = Gyorsítás +Common.720.Forward = ElÅ‘remenet +Common.720.Backward = Hátramenet +Common.720.Stand = Ãlló pozíció +Common.720.Ticker = Csipogó +Common.720.KAH = KAH: Tartalék BARS menet mód +Common.720.KAHK = @[Common.ALL.KAHK] +Common.720.ALS = ALS: ARS jelzÅ‘ üzemmód kapcsoló (ARS kikapcsolás) +Common.720.ALSK = ALS fedél +Common.720.FDepot = KocsiszínbÅ‘l indulás +Common.720.HVoltage = Nincs nagyfeszültség +Common.720.PassScheme = Információs panel #old translation: "Vonal sémák" +Common.720.EmergencyCompressor = Tartalék kompresszor indítás gomb +Common.720.EnableBV = BV bekapcsolása +Common.720.DisableBV = BV kikapcsolása +Common.720.Ring = Vezérlés átvitele (csengÅ‘) +Common.720.R_Announcer = Utastájékoztató kihangosítása az utastérben +Common.720.R_Line = VezetÅ‘ mikrofonjának engedélyezése +Common.720.R_Emer = Vészhívó +Common.720.R_Program1 = Utastájékoztatás lejátszása (program 1) +Common.720.EnableBVEmer = Tartalék BV engedélyezése +Common.720.EmergencyControls = VezérlÅ‘ áramkör megszakító kapcsoló +Common.720.Wiper = AblaktörlÅ‘k bekapcsolása + +Common.720.AccelRate = "LejtÅ‘" mód engedélyezése +Common.720.EBrakeAdd = Segéd fék erejének növelése +Common.720.EBrakeRelease = Segéd fék erejének csökkentése +Common.720.EBrakeToggle = Segéd fék engedélyezése +Common.720.EmergencyBrake = Vészfék engedélyezése +Common.720.DoorClose = Ajtók zárása +Common.720.AttentionMessage = Üzenetnyugtázó gomb + + +Common.720.DoorSelectL = Bal oldali ajtók kiválasztása +Common.720.DoorSelectR = Jobb oldali ajtók kiválasztása +Common.720.DoorBlock = Ajtó vezérlés nélküli vezetés +Common.720.KDL = Bal oldali ajtók nyitása +Common.720.KDP = Jobb oldali ajtók nyitása + +Common.Vityaz.F1 = Vityaz: F1 +Common.Vityaz.F2 = Vityaz: KövezkezÅ‘ oldal +Common.Vityaz.F3 = Vityaz: ElÅ‘zÅ‘ oldal +Common.Vityaz.F4 = Vityaz: ElsÅ‘dleges mód +Common.Vityaz.1 = Vityaz: 1 +Common.Vityaz.4 = Vityaz: 4 +Common.Vityaz.7 = Vityaz: 7 +Common.Vityaz.2 = Vityaz: 2 +Common.Vityaz.5 = Vityaz: 5 +Common.Vityaz.8 = Vityaz: 8 +Common.Vityaz.0 = Vityaz: 0 +Common.Vityaz.3 = Vityaz: 3 +Common.Vityaz.6 = Vityaz: 6 +Common.Vityaz.9 = Vityaz: 9 +Common.Vityaz.F5 = Vityaz: ZV +Common.Vityaz.F6 = Vityaz: Fel\Sebesség +Common.Vityaz.F7 = Vityaz: Le\Ãramkörök +Common.Vityaz.F8 = Vityaz: Enter\Kocsi berendezés +Common.Vityaz.F9 = Vityaz: Kiválaszt\Kocsi berendezés irányító + +Common.720.EmerX1 = Tartalék X1 menet mód +Common.720.EmerX2 = Tartalék X2 menet mód +Common.720.EmerCloseDoors = Szükség ajtózárás +Common.720.EmergencyDoors = Szükség ajtó vezérlés engedélyezése +Common.720.BRU = BRU: Nagyfeszültségű leválasztó + +#gmod_subway_81-720 +#Buttons: + +Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode- = @[Common.720.VentCMode] @[Common.ALL.CCW] +Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode+ = @[Common.720.VentCMode] @[Common.ALL.CW] +Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode+ = @[Common.720.VentHMode+] +Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode- = @[Common.720.VentHMode-] +Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode- = @[Common.720.VentSMode-] +Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode+ = @[Common.720.VentSMode+] + +Entities.gmod_subway_81-720.Buttons.RV.EmerX1Set = @[Common.720.EmerX1] +Entities.gmod_subway_81-720.Buttons.RV.EmerX2Set = @[Common.720.EmerX2] +Entities.gmod_subway_81-720.Buttons.RV.EmerCloseDoorsSet = @[Common.720.EmerCloseDoors] +Entities.gmod_subway_81-720.Buttons.RV.EmergencyDoorsToggle = @[Common.720.EmergencyDoors] + +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF1Set = @[Common.Vityaz.F1] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF2Set = @[Common.Vityaz.F2] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF3Set = @[Common.Vityaz.F3] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF4Set = @[Common.Vityaz.F4] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz1Set = @[Common.Vityaz.1] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz4Set = @[Common.Vityaz.4] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz7Set = @[Common.Vityaz.7] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz2Set = @[Common.Vityaz.2] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz5Set = @[Common.Vityaz.5] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz8Set = @[Common.Vityaz.8] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz0Set = @[Common.Vityaz.0] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz3Set = @[Common.Vityaz.3] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz6Set = @[Common.Vityaz.6] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz9Set = @[Common.Vityaz.9] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF5Set = @[Common.Vityaz.F5] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF6Set = @[Common.Vityaz.F6] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF7Set = @[Common.Vityaz.F7] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF8Set = @[Common.Vityaz.F8] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF9Set = @[Common.Vityaz.F9] + +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF1Toggle = @[Common.720.SF1] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF2Toggle = @[Common.720.SF2] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF3Toggle = @[Common.720.SF3] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF4Toggle = @[Common.720.SF4] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF5Toggle = @[Common.720.SF5] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF6Toggle = @[Common.720.SF6] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF7Toggle = @[Common.720.SF7] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF8Toggle = @[Common.720.SF8] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF9Toggle = @[Common.720.SF9] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF10Toggle = @[Common.720.SF10] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF11Toggle = @[Common.720.SF11] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF12Toggle = @[Common.720.SF12] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF13Toggle = @[Common.720.SF13] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF14Toggle = @[Common.720.SF14] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF15Toggle = @[Common.720.SF15] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF16Toggle = @[Common.720.SF16] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF17Toggle = @[Common.720.SF17] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF18Toggle = @[Common.720.SF18] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF19Toggle = @[Common.720.SF19] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF20Toggle = @[Common.720.SF20] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF21Toggle = @[Common.720.SF21] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF22Toggle = @[Common.720.SF22] + +Entities.gmod_subway_81-720.Buttons.BackDown.Pant1Toggle = @[Common.720.Pant1] +Entities.gmod_subway_81-720.Buttons.BackDown.Pant2Toggle = @[Common.720.Pant2] +Entities.gmod_subway_81-720.Buttons.BackDown.Vent1Toggle = @[Common.720.Vent1] +Entities.gmod_subway_81-720.Buttons.BackDown.Vent2Toggle = @[Common.720.Vent2] +Entities.gmod_subway_81-720.Buttons.BackDown.PassLightToggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-720.Buttons.BackDown.CabLightToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-720.Buttons.BackDown.Headlights1Toggle = @[Common.ALL.VF1] +Entities.gmod_subway_81-720.Buttons.BackDown.Headlights2Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-720.Buttons.BackDown.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-720.Buttons.BackDown.TorecDoorsToggle = @[Common.720.TorecDoors] +Entities.gmod_subway_81-720.Buttons.BackDown.BBERToggle = @[Common.720.BBER] +Entities.gmod_subway_81-720.Buttons.BackDown.BBEToggle = @[Common.720.BBE] +Entities.gmod_subway_81-720.Buttons.BackDown.CompressorToggle = @[Common.ALL.MK] +Entities.gmod_subway_81-720.Buttons.BackDown.CabLightStrengthToggle = @[Common.720.CabLightStrength] +Entities.gmod_subway_81-720.Buttons.BackDown.AppLights1Toggle = @[Common.720.AppLights] +Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock- = @[Common.720.BARSBlock] @[Common.ALL.CCW] +Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock+ = @[Common.720.BARSBlock] @[Common.ALL.CW] +Entities.gmod_subway_81-720.Buttons.BackDown.BatteryToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-720.Buttons.BackDown.ALSFreqToggle = @[Common.ARS.Freq] + +Entities.gmod_subway_81-720.Buttons.PUU.!DoorsClosed = @[Common.ALL.LSD] +Entities.gmod_subway_81-720.Buttons.PUU.StandToggle = @[Common.720.Stand] @[Common.ALL.Unsused2] +Entities.gmod_subway_81-720.Buttons.PUU.TickerToggle = @[Common.720.Ticker] +Entities.gmod_subway_81-720.Buttons.PUU.KAHToggle = @[Common.720.KAH] +Entities.gmod_subway_81-720.Buttons.PUU.KAHkToggle = @[Common.720.KAHK] +Entities.gmod_subway_81-720.Buttons.PUU.ALSToggle = @[Common.720.ALS] +Entities.gmod_subway_81-720.Buttons.PUU.ALSkToggle = @[Common.720.ALSK] +Entities.gmod_subway_81-720.Buttons.PUU.FDepotToggle = @[Common.720.FDepot] @[Common.ALL.Unsused2] +Entities.gmod_subway_81-720.Buttons.PUU.!HVoltage = @[Common.720.HVoltage] +Entities.gmod_subway_81-720.Buttons.PUU.PassSchemeToggle = @[Common.720.PassScheme] +Entities.gmod_subway_81-720.Buttons.PUU.EmergencyCompressorSet = @[Common.720.EmergencyCompressor] +Entities.gmod_subway_81-720.Buttons.PUU.EnableBVSet = @[Common.720.EnableBV] +Entities.gmod_subway_81-720.Buttons.PUU.DisableBVSet = @[Common.720.DisableBV] +Entities.gmod_subway_81-720.Buttons.PUU.RingSet = @[Common.720.Ring] +Entities.gmod_subway_81-720.Buttons.PUU.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-720.Buttons.PUU.R_AnnouncerToggle = @[Common.720.R_Announcer] +Entities.gmod_subway_81-720.Buttons.PUU.R_LineToggle = @[Common.720.R_Line] +Entities.gmod_subway_81-720.Buttons.PUU.R_EmerSet = @[Common.720.R_Emer] +Entities.gmod_subway_81-720.Buttons.PUU.R_Program1Set = @[Common.720.R_Program1] +Entities.gmod_subway_81-720.Buttons.PUU.EnableBVEmerSet = @[Common.720.EnableBVEmer] +Entities.gmod_subway_81-720.Buttons.PUU.EmergencyControlsToggle = @[Common.720.EmergencyControls] +Entities.gmod_subway_81-720.Buttons.PUU.WiperToggle = @[Common.720.Wiper] +Entities.gmod_subway_81-720.Buttons.PUU.!VDop = @[Common.ALL.SpeedAccept] +Entities.gmod_subway_81-720.Buttons.PUU.!VFact = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-720.Buttons.PUU.!VPred = @[Common.ALL.SpeedAttent] +Entities.gmod_subway_81-720.Buttons.PUU.!VDop2 = @[Common.ALL.SpeedAccept] +Entities.gmod_subway_81-720.Buttons.PUU.!Acc = @[Common.720.Accel] +Entities.gmod_subway_81-720.Buttons.PUU.!Forw = @[Common.720.Forward] +Entities.gmod_subway_81-720.Buttons.PUU.!Back = @[Common.720.Backward] + +Entities.gmod_subway_81-720.Buttons.PUR.AccelRateSet = @[Common.720.AccelRate] +Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeAddSet = @[Common.720.EBrakeAdd] +Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeReleaseSet = @[Common.720.EBrakeRelease] +Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeToggle = @[Common.720.EBrakeToggle] +Entities.gmod_subway_81-720.Buttons.PUR.EmergencyBrakeToggle = @[Common.720.EmergencyBrake] +Entities.gmod_subway_81-720.Buttons.PUR.DoorCloseToggle = @[Common.720.DoorClose] +Entities.gmod_subway_81-720.Buttons.PUR.AttentionMessageSet = @[Common.720.AttentionMessage] +Entities.gmod_subway_81-720.Buttons.PUR.AttentionSet = @[Common.ARS.KB] +Entities.gmod_subway_81-720.Buttons.PUR.AttentionBrakeSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-720.Buttons.PUR.HornBSet = @[Common.ALL.Horn] +Entities.gmod_subway_81-720.Buttons.PUR.DoorRightSet = @[Common.720.KDP] +Entities.gmod_subway_81-720.Buttons.PUR.!DoorRightLamp = @[Common.ALL.KDPL] + +Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectLToggle = @[Common.720.DoorSelectL] +Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectRToggle = @[Common.720.DoorSelectR] +Entities.gmod_subway_81-720.Buttons.PUL.DoorBlockToggle = @[Common.720.DoorBlock] +Entities.gmod_subway_81-720.Buttons.PUL.!DoorLeftLamp = @[Common.ALL.KDLL] +Entities.gmod_subway_81-720.Buttons.PUL.DoorLeftSet = @[Common.720.KDL] + +Entities.gmod_subway_81-720.Buttons.PVZ.SFV1Toggle = @[Common.720.SFV1] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV2Toggle = @[Common.720.SFV2] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV3Toggle = @[Common.720.SFV3] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV4Toggle = @[Common.720.SFV4] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV5Toggle = @[Common.720.SFV5] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV6Toggle = @[Common.720.SFV6] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV7Toggle = @[Common.720.SFV7] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV8Toggle = @[Common.720.SFV8] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV9Toggle = @[Common.720.SFV9] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV10Toggle = @[Common.720.SFV10] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV11Toggle = @[Common.720.SFV11] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV12Toggle = @[Common.720.SFV12] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV13Toggle = @[Common.720.SFV13] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV14Toggle = @[Common.720.SFV14] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV15Toggle = @[Common.720.SFV15] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV16Toggle = @[Common.720.SFV16] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV17Toggle = @[Common.720.SFV17] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV18Toggle = @[Common.720.SFV18] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV19Toggle = @[Common.720.SFV19] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV20Toggle = @[Common.720.SFV20] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV21Toggle = @[Common.720.SFV21] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV22Toggle = @[Common.720.SFV22] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV23Toggle = @[Common.720.SFV23] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV24Toggle = @[Common.720.SFV24] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV25Toggle = @[Common.720.SFV25] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV26Toggle = @[Common.720.SFV26] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV27Toggle = @[Common.720.SFV27] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV28Toggle = @[Common.720.SFV28] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV29Toggle = @[Common.720.SFV29] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV30Toggle = @[Common.720.SFV30] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV31Toggle = @[Common.720.SFV31] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV32Toggle = @[Common.720.SFV32] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV33Toggle = @[Common.720.SFV33] + +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] + +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] + +Entities.gmod_subway_81-720.Buttons.BTO.K29Toggle = @[Common.ALL.KRMH] +Entities.gmod_subway_81-720.Buttons.BTO.UAVAToggle = @[Common.ALL.UAVA2] + +Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +Entities.gmod_subway_81-720.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-720.Buttons.RearDoor1.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-720.Buttons.CabinDoorR.CabinDoorRight = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-720.Buttons.CabinDoorL.CabinDoorLeft = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-720.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-720.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] + +Entities.gmod_subway_81-720.Buttons.VoltHelper2.!HV = @[Common.ALL.HighVoltage] +Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I1_3 = @[Common.ALL.EnginesCurrent1] +Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I2_4 = @[Common.ALL.EnginesCurrent2] +Entities.gmod_subway_81-720.Buttons.PneumoHelper2.!BrakeTrainLine = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-720.Buttons.PneumoHelper1.!BrakeCylinder = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-720.Buttons.VoltHelper1.!Battery = @[Common.ALL.BatteryVoltage] +Entities.gmod_subway_81-720.Buttons.GV.GVToggle = @[Common.720.BRU] + +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-720.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-720.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +#gmod_subway_81-721 +Entities.gmod_subway_81-721.Buttons.Battery.BatteryToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-721.Buttons.GV.GVToggle = @[Common.720.BRU] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV1Toggle = @[Common.720.SFV1] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV2Toggle = @[Common.720.SFV2] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV3Toggle = @[Common.720.SFV3] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV4Toggle = @[Common.720.SFV4] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV5Toggle = @[Common.720.SFV5] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV6Toggle = @[Common.720.SFV6] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV7Toggle = @[Common.720.SFV7] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV8Toggle = @[Common.720.SFV8] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV9Toggle = @[Common.720.SFV9] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV10Toggle = @[Common.720.SFV10] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV11Toggle = @[Common.720.SFV11] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV12Toggle = @[Common.720.SFV12] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV13Toggle = @[Common.720.SFV13] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV14Toggle = @[Common.720.SFV14] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV15Toggle = @[Common.720.SFV15] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV16Toggle = @[Common.720.SFV16] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV17Toggle = @[Common.720.SFV17] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV18Toggle = @[Common.720.SFV18] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV19Toggle = @[Common.720.SFV19] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV20Toggle = @[Common.720.SFV20] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV21Toggle = @[Common.720.SFV21] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV22Toggle = @[Common.720.SFV22] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV23Toggle = @[Common.720.SFV23] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV24Toggle = @[Common.720.SFV24] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV25Toggle = @[Common.720.SFV25] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV26Toggle = @[Common.720.SFV26] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV27Toggle = @[Common.720.SFV27] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV28Toggle = @[Common.720.SFV28] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV29Toggle = @[Common.720.SFV29] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV30Toggle = @[Common.720.SFV30] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV31Toggle = @[Common.720.SFV31] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV32Toggle = @[Common.720.SFV32] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV33Toggle = @[Common.720.SFV33] + +Entities.gmod_subway_81-721.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-721.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +#Spawner: + +Entities.gmod_subway_81-720.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-720.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-720.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-720.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-720.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-720.Spawner.PassSchemesInvert.Name = @[Common.Spawner.SchemeInvert] +Entities.gmod_subway_81-720.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-720.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-720.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-720.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-720.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] diff --git a/lua/metrostroi_data/languages/hu_722.lua b/lua/metrostroi_data/languages/hu_722.lua new file mode 100644 index 0000000..2c83173 --- /dev/null +++ b/lua/metrostroi_data/languages/hu_722.lua @@ -0,0 +1,360 @@ +return [[ +#81-722 + +[hu] + +#Cameras: +Train.722.Breakers = Automaták +Train.722.PU2_1 = VezérlÅ‘pult +Train.722.PU2_2 = Tartalék panel +Train.722.Vityaz = SAU "VITYAZ-SP" monitor +Train.722.SARMAT = CIS rendszer monitor +Train.722.CabLights = Fülke világítás panel +Train.722.Disconnects = Leválasztó csapok +Train.722.KRMH = KRMSH és RVTB csapok + +#######Buttons########### +Common.722.MirrorHeating = Tükör fűtés +Common.722.EmergencyDrive = Szükségindítás, szükségvezérlés módban +Common.722.Microphone = Mikrofon bekapcsolása +Common.722.LRS = Rádióállomás szükségellátás az akkumulátorról +Common.722.LAVS = Alacsony fékvezetéki nyomás +Common.722.LRU = VezérlÅ‘ relé le van tiltva +Common.722.GlassWasher = SzélvédÅ‘ mosó +Common.722.GlassCleaner = AblaktörlÅ‘ +Common.722.EmergencyBrakeTPlus = Vészfék (T+ mód) +Common.722.EmergencyBrakeTPlusK = "Vészfék" gomb fedél +Common.722.KRO = Menetirány + +Common.722.PSNToggle = "Akkumulátor töltése külsÅ‘ forrásból" engedélyezése +Common.722.BattOn = Vonat áramellátásának felkapcsolása +Common.722.BattOff = Vonat áramellátásának lekapcsolása +Common.722.TorecDoorUnlock = Ãtjáróajtók nyitása +Common.722.SCEnabled = Rövidzár be van kapcsolva +Common.722.LSOSD = Peronajtó nyitás lámpa + +Common.722.PassVent = Utastér szellÅ‘ztetés +Common.722.VRU = Irányítás mód kapcsoló +Common.722.VADToggle = Ajtó reteszelés nélküli vezetés +Common.722.VAHToggle = Éberségi pedál nélküli vezetés +Common.722.EmergencyRadioPowerToggle = Tartalék rádióállomás áramellátás +Common.722.BARSMode = BARS mód kapcsoló +Common.722.PantSC = ÃramszedÅ‘ papucsok és rövidzáró eszköz + +Common.SARMAT.Up = SARMAT: Fel +Common.SARMAT.Down = SARMAT: Le +Common.SARMAT.Enter = SARMAT: Enter +Common.SARMAT.Esc = SARMAT: Esc +Common.SARMAT.F1 = SARMAT: F1 +Common.SARMAT.F2 = SARMAT: F2 +Common.SARMAT.F3 = SARMAT: F3 +Common.SARMAT.F4 = SARMAT: F4 +Common.SARMAT.Path = SARMAT: Irány +Common.SARMAT.Line = SARMAT: Vonal +Common.SARMAT.Zero = SARMAT: Kezdés az elejétÅ‘l +Common.SARMAT.Start = SARMAT: Start + +#Autobreakers +Common.722.SF1 = SF1: Vonatvezeték (irányítás) +Common.722.SF2 = SF2: Aktív fülke +Common.722.SF3 = SF3: FÅ‘vezérlés +Common.722.SF4 = SF4: Szükségvezérlés +Common.722.SF5 = SF5: RVTB vezérlés +Common.722.SF6 = SF6: Fékkar áramellátás +Common.722.SF7 = SF7: Ajtó vezérlés +Common.722.SF8 = SF8: BARS 1 +Common.722.SF9 = SF9: BARS 2 +Common.722.UPO = SF: UPO1 +Common.722.SF10 = SF10: BRPI-M1 +Common.722.SF11 = SF11: BRPI-M2 +Common.722.SF12 = SF12: TűzjelzÅ‘ +Common.722.SF13 = SF13: @[Common.722.PantSC] +Common.722.SF14 = SF14: Rádió kommunikáció 1 +Common.722.SF15 = SF15: Ráció kommunikáció 2 +Common.722.SF16 = SF16: CIS 1 (monitor) +Common.722.SF17 = SF17: CIS 2 (központi információs rendszer) +Common.722.SF18 = SF18: CIS 3 +Common.722.SF19 = SF19: BUKP, UPI +Common.722.SF20 = SF20: Monitor +Common.722.SF21 = SF21: Irány +Common.722.SF22 = SF22: ZárjelzÅ‘ lámpák áramellátása akkumulátorról +Common.722.SF23 = SF23: Fényszórók, zárjelzÅ‘ lámpák +Common.722.SF24 = SF24: Peronajtó lámpa kapcsoló +Common.722.SF25 = SF25: Fülke világítás +Common.722.SF26 = SF26: Fülke légkondícionáló +Common.722.SF27 = SF27: AblaktörlÅ‘, szélvédÅ‘ mosó, kürt + +Common.722.SF31 = SF31: Vonatvezeték +Common.722.SF32 = SF32: Vonatvezeték (irányítás) +Common.722.SF33 = SF33: VezérlÅ‘ áramkörök áramellátása +Common.722.SF34 = SF34: Bal oldal CIS +Common.722.SF35 = SF35: Jobb oldal CIS +Common.722.SF36 = SF36: Oldal visszajelzÅ‘ lámpák +Common.722.SF37 = SF37: ÃremszedÅ‘ papucs elengedés +Common.722.SF38 = SF38: Foglalt +Common.722.SF41 = SF41: Bal oldali ajtók nyitása +Common.722.SF42 = SF42: Jobb oldali ajtók nyitása +Common.722.SF43 = SF43: Ajtózáró +Common.722.SF44 = SF44: Ãtjáróajtók +Common.722.SF45 = SF45: Utastéri világítás áramellátás +Common.722.SF46 = SF46: Tartalék utastéri világítás +Common.722.SF47 = SF47: ElsÅ‘ szellÅ‘ztetÅ‘ egység +Common.722.SF48 = SF48: Második szellÅ‘ztetÅ‘ egység +Common.722.SF49 = SF49: Számoló +Common.722.SF51 = SF51: Kocsi vezérlÅ‘ egység +Common.722.SF52 = SF52: BODV +Common.722.SF53 = SF53: PSN (áramellátás) +Common.722.SF54 = SF54: Sűrített levegÅ‘s szárító +Common.722.SF55 = SF55: BUFT (súrlódó fékvezérlÅ‘ egység) +Common.722.SF56 = SF56: Inverter +Common.722.SF57 = SF57: Inverter fűtés +Common.722.SF58 = SF58: Kocsi vezérlÅ‘ áramkör fÅ‘ áramellátás +Common.722.SF59 = SF59: Kocsi vezérlÅ‘ áramkör tartalék áramellátás + +#gmod_subway_81-722 +#Buttons: +Entities.gmod_subway_81-722.Buttons.PU1.MirrorHeatingSet = @[Common.722.MirrorHeating] +Entities.gmod_subway_81-722.Buttons.PU1.DoorLeft2Set = @[Common.720.KDL] +Entities.gmod_subway_81-722.Buttons.PU1.DoorBackSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-722.Buttons.PU1.EmergencyDriveSet = @[Common.722.EmergencyDrive] +Entities.gmod_subway_81-722.Buttons.PU1.MicrophoneSet = @[Common.722.Microphone] +Entities.gmod_subway_81-722.Buttons.PU1.DoorLeft1Set = @[Common.720.KDL] + +Entities.gmod_subway_81-722.Buttons.PU2.ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-722.Buttons.PU2.ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-722.Buttons.PU2.GlassWasherSet = @[Common.722.GlassWasher] +Entities.gmod_subway_81-722.Buttons.PU2.GlassCleaner+ = @[Common.722.GlassCleaner] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.PU2.GlassCleaner- = @[Common.722.GlassCleaner] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeTPlusKToggle = @[Common.722.EmergencyBrakeTPlusK] +Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeTPlusSet = @[Common.722.EmergencyBrakeTPlus] +Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeToggle = @[Common.720.EmergencyBrake] +Entities.gmod_subway_81-722.Buttons.PU2.VigilanceSet = @[Common.ARS.KB] +Entities.gmod_subway_81-722.Buttons.PU2.Headlights+ = @[Common.ALL.VF] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.PU2.Headlights- = @[Common.ALL.VF] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.PU2.DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-722.Buttons.PU2.DoorClose+ = @[Common.720.DoorClose] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.PU2.DoorClose- = @[Common.720.DoorClose] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.PU2.DoorRightSet = @[Common.720.KDP] + +Entities.gmod_subway_81-722.Buttons.BI3.KRO+ = @[Common.722.KRO] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.BI3.KRO- = @[Common.722.KRO] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.BI3.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-722.Buttons.BI3.Compressor- = @[Common.ALL.MK] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.BI3.Compressor+ = @[Common.ALL.MK] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.BI3.!BrakeTrainLine = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-722.Buttons.BI3.!BrakeCylinder = @[Common.ALL.BCPressure] + +Entities.gmod_subway_81-722.Buttons.PPZB.PSNToggleSet = @[Common.722.PSNToggle] +Entities.gmod_subway_81-722.Buttons.PPZB.BattOnSet = @[Common.722.BattOn] +Entities.gmod_subway_81-722.Buttons.PPZB.BattOffSet = @[Common.722.BattOff] +Entities.gmod_subway_81-722.Buttons.PPZB.TorecDoorUnlockSet = @[Common.722.TorecDoorUnlock] +Entities.gmod_subway_81-722.Buttons.PPZB.SCEnable = @[Common.722.SCEnabled] +Entities.gmod_subway_81-722.Buttons.PPZB.SOSD = @[Common.722.LSOSD] + +Entities.gmod_subway_81-722.Buttons.PVM.PassLightToggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-722.Buttons.PVM.PassVent- = @[Common.722.PassVent] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.PassVent+ = @[Common.722.PassVent] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.VKFToggle = @[Common.ALL.VKF] +Entities.gmod_subway_81-722.Buttons.PVM.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-722.Buttons.PVM.VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-722.Buttons.PVM.SOSDEnableToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-722.Buttons.PVM.VRU- = @[Common.722.VRU] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.VRU+ = @[Common.722.VRU] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.VADToggle = @[Common.722.VADToggle] +Entities.gmod_subway_81-722.Buttons.PVM.VAHToggle = @[Common.722.VAHToggle] +Entities.gmod_subway_81-722.Buttons.PVM.EmergencyRadioPowerToggle = @[Common.722.EmergencyRadioPowerToggle] +Entities.gmod_subway_81-722.Buttons.PVM.BARSMode- = @[Common.722.BARSMode] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.BARSMode+ = @[Common.722.BARSMode] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.PantSC- = @[Common.722.PantSC] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.PantSC+ = @[Common.722.PantSC] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.RCARSToggle = @[Common.ALL.RCARS] + +Entities.gmod_subway_81-722.Buttons.HelperLamps.!LRD = @[Common.ARS.LRD] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!LPT = @[Common.ALL.BrT] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!RS = @[Common.722.LRS] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!AVS = @[Common.722.LAVS] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!LSD = @[Common.ALL.LSD] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!RU = @[Common.722.LRU] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!04 = @[Common.ARS.N4] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!00 = @[Common.ARS.0] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!40 = @[Common.ARS.40] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!60 = @[Common.ARS.60] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!70 = @[Common.ARS.70] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!80 = @[Common.ARS.80] + +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatUpSet = @[Common.SARMAT.Up] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatDownSet = @[Common.SARMAT.Down] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatEnterSet = @[Common.SARMAT.Enter] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatEscSet = @[Common.SARMAT.Esc] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF1Set = @[Common.SARMAT.F1] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF2Set = @[Common.SARMAT.F2] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF3Set = @[Common.SARMAT.F3] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF4Set = @[Common.SARMAT.F4] + +Entities.gmod_subway_81-722.Buttons.BMP.SarmatPathSet = @[Common.SARMAT.Path] +Entities.gmod_subway_81-722.Buttons.BMP.SarmatLineSet = @[Common.SARMAT.Line] +Entities.gmod_subway_81-722.Buttons.BMP.SarmatZeroSet = @[Common.SARMAT.Zero] +Entities.gmod_subway_81-722.Buttons.BMP.SarmatStartSet = @[Common.SARMAT.Start] + +Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber1Set = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber2Set = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber3Set = @[Common.ALL.RouteNumber3+] + +Entities.gmod_subway_81-722.Buttons.Lighting.CabinLight- = @[Common.ALL.CabLights] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.Lighting.CabinLight+ = @[Common.ALL.CabLights] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.Lighting.PanelLightToggle = @[Common.ALL.PanelLights] + +Entities.gmod_subway_81-722.Buttons.PPZ.SF1Toggle = @[Common.722.SF1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF2Toggle = @[Common.722.SF2] +Entities.gmod_subway_81-722.Buttons.PPZ.SF3Toggle = @[Common.722.SF3] +Entities.gmod_subway_81-722.Buttons.PPZ.SF4Toggle = @[Common.722.SF4] +Entities.gmod_subway_81-722.Buttons.PPZ.SF5Toggle = @[Common.722.SF5] +Entities.gmod_subway_81-722.Buttons.PPZ.SF6Toggle = @[Common.722.SF6] +Entities.gmod_subway_81-722.Buttons.PPZ.SF7Toggle = @[Common.722.SF7] +Entities.gmod_subway_81-722.Buttons.PPZ.SF8Toggle = @[Common.722.SF8] +Entities.gmod_subway_81-722.Buttons.PPZ.SF9Toggle = @[Common.722.SF9] +Entities.gmod_subway_81-722.Buttons.PPZ.R_UPOToggle = @[Common.722.UPO] +Entities.gmod_subway_81-722.Buttons.PPZ.SF01Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF10Toggle = @[Common.722.SF10] +Entities.gmod_subway_81-722.Buttons.PPZ.SF11Toggle = @[Common.722.SF11] +Entities.gmod_subway_81-722.Buttons.PPZ.SF12Toggle = @[Common.722.SF12] +Entities.gmod_subway_81-722.Buttons.PPZ.SF13Toggle = @[Common.722.SF13] +Entities.gmod_subway_81-722.Buttons.PPZ.SF02Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF14Toggle = @[Common.722.SF14] +Entities.gmod_subway_81-722.Buttons.PPZ.SF15Toggle = @[Common.722.SF15] +Entities.gmod_subway_81-722.Buttons.PPZ.SF16Toggle = @[Common.722.SF16] +Entities.gmod_subway_81-722.Buttons.PPZ.SF17Toggle = @[Common.722.SF17] +Entities.gmod_subway_81-722.Buttons.PPZ.SF18Toggle = @[Common.722.SF18] +Entities.gmod_subway_81-722.Buttons.PPZ.SF19Toggle = @[Common.722.SF19] +Entities.gmod_subway_81-722.Buttons.PPZ.SF20Toggle = @[Common.722.SF20] +Entities.gmod_subway_81-722.Buttons.PPZ.SF21Toggle = @[Common.722.SF21] +Entities.gmod_subway_81-722.Buttons.PPZ.SF22Toggle = @[Common.722.SF22] +Entities.gmod_subway_81-722.Buttons.PPZ.SF23Toggle = @[Common.722.SF23] +Entities.gmod_subway_81-722.Buttons.PPZ.SF24Toggle = @[Common.722.SF24] +Entities.gmod_subway_81-722.Buttons.PPZ.SF25Toggle = @[Common.722.SF25] +Entities.gmod_subway_81-722.Buttons.PPZ.SF26Toggle = @[Common.722.SF26] +Entities.gmod_subway_81-722.Buttons.PPZ.SF27Toggle = @[Common.722.SF27] +Entities.gmod_subway_81-722.Buttons.PPZ.SF03Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF04Toggle = @[Common.ALL.Unsused1] + +Entities.gmod_subway_81-722.Buttons.PVZ.SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-722.Buttons.PVZ.1:SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-722.Buttons.PVZ.SF32Toggle = @[Common.722.SF32] +Entities.gmod_subway_81-722.Buttons.PVZ.SF33Toggle = @[Common.722.SF33] +Entities.gmod_subway_81-722.Buttons.PVZ.SF34Toggle = @[Common.722.SF34] +Entities.gmod_subway_81-722.Buttons.PVZ.SF35Toggle = @[Common.722.SF35] +Entities.gmod_subway_81-722.Buttons.PVZ.SF36Toggle = @[Common.722.SF36] +Entities.gmod_subway_81-722.Buttons.PVZ.SF37Toggle = @[Common.722.SF37] +Entities.gmod_subway_81-722.Buttons.PVZ.SF38Toggle = @[Common.722.SF38] +Entities.gmod_subway_81-722.Buttons.PVZ.SF41Toggle = @[Common.722.SF41] +Entities.gmod_subway_81-722.Buttons.PVZ.SF42Toggle = @[Common.722.SF42] +Entities.gmod_subway_81-722.Buttons.PVZ.SF43Toggle = @[Common.722.SF43] +Entities.gmod_subway_81-722.Buttons.PVZ.SF44Toggle = @[Common.722.SF44] +Entities.gmod_subway_81-722.Buttons.PVZ.SF45Toggle = @[Common.722.SF45] +Entities.gmod_subway_81-722.Buttons.PVZ.SF46Toggle = @[Common.722.SF46] +Entities.gmod_subway_81-722.Buttons.PVZ.SF47Toggle = @[Common.722.SF47] +Entities.gmod_subway_81-722.Buttons.PVZ.SF48Toggle = @[Common.722.SF48] +Entities.gmod_subway_81-722.Buttons.PVZ.SF49Toggle = @[Common.722.SF49] +Entities.gmod_subway_81-722.Buttons.PVZ.SF51Toggle = @[Common.722.SF51] +Entities.gmod_subway_81-722.Buttons.PVZ.SF52Toggle = @[Common.722.SF52] +Entities.gmod_subway_81-722.Buttons.PVZ.SF53Toggle = @[Common.722.SF53] +Entities.gmod_subway_81-722.Buttons.PVZ.SF54Toggle = @[Common.722.SF54] +Entities.gmod_subway_81-722.Buttons.PVZ.SF55Toggle = @[Common.722.SF55] +Entities.gmod_subway_81-722.Buttons.PVZ.SF56Toggle = @[Common.722.SF56] +Entities.gmod_subway_81-722.Buttons.PVZ.SF57Toggle = @[Common.722.SF57] +Entities.gmod_subway_81-722.Buttons.PVZ.SF58Toggle = @[Common.722.SF58] +Entities.gmod_subway_81-722.Buttons.PVZ.SF59Toggle = @[Common.722.SF59] + +Entities.gmod_subway_81-722.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-722.Buttons.CabinDoorL.CabinDoorLeft = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-722.Buttons.CabinDoorR.CabinDoorRight = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-722.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-722.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-722.Buttons.Isolations.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.Isolations.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.StopKran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-722.Buttons.StopKran.UAVAToggle = @[Common.ALL.UAVA2] +Entities.gmod_subway_81-722.Buttons.BTO.K29Toggle = @[Common.ALL.KRMH] +Entities.gmod_subway_81-722.Buttons.BTO.K9Toggle = @[Common.ALL.RVTB] + +#gmod_subway_81-723 +Entities.gmod_subway_81-723.Buttons.PVZ.SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-723.Buttons.PVZ.1:SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-723.Buttons.PVZ.SF32Toggle = @[Common.722.SF32] +Entities.gmod_subway_81-723.Buttons.PVZ.SF33Toggle = @[Common.722.SF33] +Entities.gmod_subway_81-723.Buttons.PVZ.SF34Toggle = @[Common.722.SF34] +Entities.gmod_subway_81-723.Buttons.PVZ.SF35Toggle = @[Common.722.SF35] +Entities.gmod_subway_81-723.Buttons.PVZ.SF36Toggle = @[Common.722.SF36] +Entities.gmod_subway_81-723.Buttons.PVZ.SF37Toggle = @[Common.722.SF37] +Entities.gmod_subway_81-723.Buttons.PVZ.SF38Toggle = @[Common.722.SF38] +Entities.gmod_subway_81-723.Buttons.PVZ.SF41Toggle = @[Common.722.SF41] +Entities.gmod_subway_81-723.Buttons.PVZ.SF42Toggle = @[Common.722.SF42] +Entities.gmod_subway_81-723.Buttons.PVZ.SF43Toggle = @[Common.722.SF43] +Entities.gmod_subway_81-723.Buttons.PVZ.SF44Toggle = @[Common.722.SF44] +Entities.gmod_subway_81-723.Buttons.PVZ.SF45Toggle = @[Common.722.SF45] +Entities.gmod_subway_81-723.Buttons.PVZ.SF46Toggle = @[Common.722.SF46] +Entities.gmod_subway_81-723.Buttons.PVZ.SF47Toggle = @[Common.722.SF47] +Entities.gmod_subway_81-723.Buttons.PVZ.SF48Toggle = @[Common.722.SF48] +Entities.gmod_subway_81-723.Buttons.PVZ.SF49Toggle = @[Common.722.SF49] +Entities.gmod_subway_81-723.Buttons.PVZ.SF51Toggle = @[Common.722.SF51] +Entities.gmod_subway_81-723.Buttons.PVZ.SF52Toggle = @[Common.722.SF52] +Entities.gmod_subway_81-723.Buttons.PVZ.SF53Toggle = @[Common.722.SF53] +Entities.gmod_subway_81-723.Buttons.PVZ.SF54Toggle = @[Common.722.SF54] +Entities.gmod_subway_81-723.Buttons.PVZ.SF55Toggle = @[Common.722.SF55] +Entities.gmod_subway_81-723.Buttons.PVZ.SF56Toggle = @[Common.722.SF56] +Entities.gmod_subway_81-723.Buttons.PVZ.SF57Toggle = @[Common.722.SF57] +Entities.gmod_subway_81-723.Buttons.PVZ.SF58Toggle = @[Common.722.SF58] +Entities.gmod_subway_81-723.Buttons.PVZ.SF59Toggle = @[Common.722.SF59] + +Entities.gmod_subway_81-723.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-723.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-723.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-723.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +Entities.gmod_subway_81-723.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-723.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] + + +#gmod_subway_81-724 +#Buttons: +Entities.gmod_subway_81-724.Buttons.PVZ.SF34Toggle = @[Common.722.SF34] +Entities.gmod_subway_81-724.Buttons.PVZ.SF35Toggle = @[Common.722.SF35] +Entities.gmod_subway_81-724.Buttons.PVZ.SF36Toggle = @[Common.722.SF36] +Entities.gmod_subway_81-724.Buttons.PVZ.SF41Toggle = @[Common.722.SF41] +Entities.gmod_subway_81-724.Buttons.PVZ.SF42Toggle = @[Common.722.SF42] +Entities.gmod_subway_81-724.Buttons.PVZ.SF43Toggle = @[Common.722.SF43] +Entities.gmod_subway_81-724.Buttons.PVZ.SF44Toggle = @[Common.722.SF44] +Entities.gmod_subway_81-724.Buttons.PVZ.SF45Toggle = @[Common.722.SF45] +Entities.gmod_subway_81-724.Buttons.PVZ.SF46Toggle = @[Common.722.SF46] +Entities.gmod_subway_81-724.Buttons.PVZ.SF47Toggle = @[Common.722.SF47] +Entities.gmod_subway_81-724.Buttons.PVZ.SF48Toggle = @[Common.722.SF48] +Entities.gmod_subway_81-724.Buttons.PVZ.SF51Toggle = @[Common.722.SF51] +Entities.gmod_subway_81-724.Buttons.PVZ.SF52Toggle = @[Common.722.SF52] +Entities.gmod_subway_81-724.Buttons.PVZ.SF53Toggle = @[Common.722.SF53] +Entities.gmod_subway_81-724.Buttons.PVZ.SF54Toggle = @[Common.722.SF54] +Entities.gmod_subway_81-724.Buttons.PVZ.SF55Toggle = @[Common.722.SF55] + +Entities.gmod_subway_81-724.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-724.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-724.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-724.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +Entities.gmod_subway_81-724.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-724.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] + +#Spawner: +Entities.gmod_subway_81-722.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-722.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-722.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-722.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-722.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-722.Spawner.SarmatInvert.Name = @[Common.Spawner.SchemeInvert] +Entities.gmod_subway_81-722.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-722.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-722.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-722.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-722.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] + +]] diff --git a/lua/metrostroi_data/languages/hu_base.lua b/lua/metrostroi_data/languages/hu_base.lua new file mode 100644 index 0000000..ad1d2b4 --- /dev/null +++ b/lua/metrostroi_data/languages/hu_base.lua @@ -0,0 +1,396 @@ +return [[ +#Base text for Hungarian language + +[hu] +lang = Magyar #Full language name +AuthorText = Fordítók: Xenox, Lackó #Author text + +#Workshop errors +Workshop.Title = Tartalom kezelÅ‘ +Workshop.FilesMissing = Néhány kiegészítÅ‘ fájl hiányzik, vagy hibás.\nHa a MűhelybÅ‘l lett(ek) telepítve, próbáld meg kitörölni ezt a fájlt:\nGarrysMod/garrysmod/%s. +Workshop.FilesMissingLocaly = Néhány kiegészítÅ‘ fájl hiányzik, vagy hibás. +Workshop.InstalledLocaly = Telepített (helyi) +Workshop.NotInstalledE = Nem telepített.\nIratkozz fel a kiegészítÅ‘re, és ellenÅ‘rizd a "BÅ‘vítmények" menüben. +Workshop.NotInstalled = Nem telepített. +Workshop.Disabled = Kikapcsolt.\nKapcsold be az "BÅ‘vítmények" menüben. +Workshop.Installed = Telepített +Workshop.Open = Műhely +Workshop.ErrorGithub = A Metrostroi GitHub verziója észlelhetÅ‘. A jelenlegi Metrostroi verzió nem kompatibilis és nem működik a GitHub-os verzióval. +Workshop.ErrorLegacy = A Metrostroi egyik régi verziója észlelhetÅ‘. A jelenlegi Metrostroi verzió nem kompatibilis és nem működik a régi verzióval. +Workshop.ErrorEnhancers = Ez a kiegészítÅ‘ grafikus javításokat tartalmaz, amelyek esetleg ronthatják a játékélményt. +Workshop.Error1 = Ez a kiegészítÅ‘ a Metrostroi régi szkriptjeit tartalmazza, amelyek zavarhatják a jelenlegieket. "Szkript hiba" és instabil működés léphet föl. +Workshop.ErrorOld = Régi modellek észlelhetÅ‘k (81-702 és 81-717 régi modelljei). EllenÅ‘rizd és töröld a régi Metrostroi fájlokat, távolítsd el a "cache", "download" és "downloads" mappákat a "garrysmod" könyvtárból. + +#Client settings +Panel.Admin = Admin +Panel.RequireThirdRail = Harmadik sín szükséges + +Panel.Client = Kliens +Panel.Language = Nyelv választás +Panel.DrawCams = Kamerák renderelése +Panel.DisableHUD = HUD kikapcsolása a vezetÅ‘ ülésben +Panel.DisableCamAccel = Kamera gyorsítás kikapcsolása +Panel.DisableHoverText = Felvillanó szövegek kikapcsolása +Panel.ScreenshotMode = KépernyÅ‘mentés mód (ALACSONY FPS) +Panel.ShadowsHeadlight = Fényszóró árnyékok bekapcsolása +Panel.RedLights = \nZárjelzÅ‘ lámpák dinamikus fényének bekapcsolása +Panel.ShadowsOther = \nEgyéb forrásokból származó árnyékok bekapcsolása +Panel.MinimizedShow = Ne töltse be az elemeket, \nha a program tálcán van +Panel.FOV = FOV +Panel.Z = Kamera magassága +Panel.RenderDistance = Renderelési távolság +Panel.ReloadClient = Kliens oldal újraindítása + +Panel.ClientAdvanced = Kliens (haladó) +Panel.DrawDebugInfo = Debug információk megjelenítése +Panel.DrawSignalDebugInfo = JelzÅ‘k debug információi +Panel.CheckAddons = KiegészítÅ‘k keresése +Panel.ReloadLang = Nyelvek újratöltése +Panel.SoftDraw = Vonatelemek betöltési ideje +Panel.SoftReloadLang = Ne töltsön be új spawnmenü-t + + + +#Common train +Train.Common.Camera0 = VezetÅ‘ ülés +Train.Common.RouteNumber = Forgalmi szám +Train.Common.LastStation = Végállomás +Train.Common.HelpersPanel = SegédvezetÅ‘i panel +Train.Common.UAVA = UAVA +Train.Common.PneumoPanels = Pneumatikus szelepek +Train.Common.Voltmeters = Volt- és ampermérÅ‘k +Train.Common.CouplerCamera = Csatlás +Common.ARM.Monitor1 = Monitor 1 ARM +Train.Buttons.Sealed = Leplombált + +#Train entities +Entities.gmod_subway_base.Name = Metrókocsi alap +Entities.gmod_subway_81-502.Name = 81-502 (Ema-502 vezér) +Entities.gmod_subway_81-501.Name = 81-501 (Em-501 közbensÅ‘) +Entities.gmod_subway_81-702.Name = 81-702 (D vezér) +Entities.gmod_subway_81-702_int.Name = 81-702 (D közbensÅ‘) +Entities.gmod_subway_81-703.Name = 81-703 (E vezér) +Entities.gmod_subway_81-703_int.Name = 81-703 (E közbensÅ‘) +Entities.gmod_subway_ezh.Name = 81-707 (Ezh vezér) +Entities.gmod_subway_ezh1.Name = 81-708 (Ezh1 közbensÅ‘) +Entities.gmod_subway_ezh3.Name = 81-710 (Ezh3 vezér) +Entities.gmod_subway_em508t.Name = 81-508T (Em-508T közbensÅ‘) +Entities.gmod_subway_81-717_mvm.Name = 81-717 (Moszkvai vezér) +Entities.gmod_subway_81-717_mvm_custom.Name = 81-717 (Moszkvai egyedi) +Entities.gmod_subway_81-714_mvm.Name = 81-714 (Moszkvai közbensÅ‘) +Entities.gmod_subway_81-717_lvz.Name = 81-717 (Szentpétervári vezér) +Entities.gmod_subway_81-714_lvz.Name = 81-714 (Szentpétervári közbensÅ‘) +Entities.gmod_subway_81-718.Name = 81-718 (TISU vezér) +Entities.gmod_subway_81-719.Name = 81-719 (TISU közbensÅ‘) +Entities.gmod_subway_81-720.Name = 81-720 (Yauza vezér) +Entities.gmod_subway_81-721.Name = 81-721 (Yauza közbensÅ‘) +Entities.gmod_subway_81-722.Name = 81-722 (Yubileyniy vezér) +Entities.gmod_subway_81-723.Name = 81-723 (Yubileyniy közbensÅ‘) +Entities.gmod_subway_81-724.Name = 81-724 (Yubileyniy szabadonfutó) +Entities.gmod_subway_81-7036.Name = 81-7036 (nem működik) +Entities.gmod_subway_81-7037.Name = 81-7037 (nem működik) +Entities.gmod_subway_tatra_t3.Name = Tátra T3 + +#Train util entities +Entities.gmod_train_bogey.Name = Forgóváz +Entities.gmod_train_couple.Name = Csatlás + +#Other entities +Entities.gmod_track_pui.Name = PUI +Entities.gmod_track_mus_elektronika7.Name = "Electronika" óra +Entities.gmod_mus_clock_analog.Name = Analóg óra +Entities.gmod_track_clock_time.Name = Nagy térköz óra (idÅ‘) +Entities.gmod_track_clock_small.Name = Kicsi térköz óra +Entities.gmod_track_clock_interval.Name = Nagy térköz óra (térköz) +Entities.gmod_track_switch.Name = Váltó +Entities.gmod_track_powermeter.Name = FeszültségmérÅ‘ +Entities.gmod_track_arm.Name = ARM DSCP +Entities.gmod_track_udochka.Name = Ãram csatlakozó +Entities.gmod_train_spawner.Name = Vonat lehelyezÅ‘ +Entities.gmod_train_special_box.Name = Speciális csomag + +#Weapons +Weapons.button_presser.Name = Gombnyomó +Weapons.button_presser.Purpose = Pályákon lévÅ‘ gombok megnyomására. +Weapons.button_presser.Instructions = Mutass a megnyomandó gombra, majd kattints az "Támadás" gombra. +Weapons.train_key.Name = Adminisztrátori kulcs +Weapons.train_key.Purpose = Pályákon levÅ‘ adminisztrátori gombok megnyomására. +Weapons.train_key.Instructions = Mutass az adminisztrátori gombra, majd kattints az "Támadás" gombra. +Weapons.train_kv_wrench.Name = Irányváltó kulcs +Weapons.train_kv_wrench.Purpose = Metrókocsikban található gombok megnyomására való. +Weapons.train_kv_wrench.Instructions = Mutass a megnyomandó gombra a vonatban, majd kattints az "Támadás" gombra. +Weapons.train_kv_wrench_gold.Name = Az arany irányváltó kulcs + +Weapons.train_kv_wrench_gold.Purpose = @[Weapons.train_kv_wrench.Purpose] +Weapons.train_kv_wrench_gold.Instructions = @[Weapons.train_kv_wrench.Instructions] + +#Spawner common +Spawner.Title = Vonat lehelyezÅ‘ +Spawner.Spawn = Lehelyezés +Spawner.Close = Bezárás +Spawner.Trains1 = Megengedett kocsik száma +Spawner.Trains2 = Játékosonként +Spawner.WagNum = Kocsik száma +Common.Spawner.Texture = KülsÅ‘ festés +Common.Spawner.PassTexture = BelsÅ‘ festés +Common.Spawner.CabTexture = Fülke festés +Common.Spawner.Announcer = Utastájékoztató típusa +Common.Spawner.Type1 = 1-es típus +Common.Spawner.Type2 = 2-es típus +Common.Spawner.Type3 = 3-es típus +Common.Spawner.Type4 = 4-es típus +Common.Spawner.SpawnMode = Lehelyezési állapot +Common.Spawner.SpawnMode.Deadlock = Kihúzó +Common.Spawner.SpawnMode.Full = Üzemkész +Common.Spawner.SpawnMode.NightDeadlock = Kihúzó, éjszaka után +Common.Spawner.SpawnMode.Depot = Kikapcsolt +Spawner.Common.EType = Elektromos áramkörök típusa +Common.Spawner.Scheme = Vonal sémák +Common.Spawner.Random = Random +Common.Spawner.Old = Régi +Common.Spawner.New = Új +Common.Spawner.Type = Típus +Common.Spawner.SchemeInvert = Fordított vonal sémák + +#Coupler common +Common.Couple.Title = Csatlás menü +Common.Couple.CoupleState = Csatlás állapota +Common.Couple.Coupled = Csatolva +Common.Couple.Uncoupled = Nem csatolt +Common.Couple.Uncouple = Szétcsatol +Common.Couple.IsolState = Végelzáró csapok állapota +Common.Couple.Isolated = Zárt +Common.Couple.Opened = Nyitott +Common.Couple.Open = Nyitva +Common.Couple.Isolate = Zárva +Common.Couple.EKKState = EKK állapota (elektromos csatlás) +Common.Couple.Disconnected = Lecsatlakozva +Common.Couple.Connected = Csatlakozva +Common.Couple.Connect = Összeköt +Common.Couple.Disconnect = Szétkapcsol + +#Bogey common +Common.Bogey.Title = Forgóváz menü +Common.Bogey.ContactState = ÃremszedÅ‘k állapota +Common.Bogey.CReleased = Kiengedve +Common.Bogey.CPressed = Lenyomva +Common.Bogey.CPress = Lenyomás +Common.Bogey.CRelease = Elengedés +Common.Bogey.ParkingBrakeState = RögzítÅ‘fék állapota +Common.Bogey.PBDisabled = Manuálisan kikapcsolva +Common.Bogey.PBEnabled = Bekapcsolt +Common.Bogey.PBEnable = Bekapcsol +Common.Bogey.PBDisable = Manuális kikapcsolás + +#Trains common +Common.ALL.Unsused1 = Nem használt +Common.ALL.Unsused2 = (Nem használt) +Common.ALL.Up = (fel) +Common.ALL.Down = (le) +Common.ALL.Left = (bal) +Common.ALL.Right = (jobb) +Common.ALL.CW = (óramutató járásával megegyezÅ‘en) +Common.ALL.CCW = (óramutató járásával ellentétesen) +Common.ALL.VB = VB: Akkumulátor be/ki +Common.ALL.VSOSD = SOSD: Peronajtó nyitás lámpa +Common.ALL.VKF = VKF: ZárjelzÅ‘ lámpák áramellátása +Common.ALL.VB2 = (Alacsony feszültségű áramkörök) +Common.ALL.VPR = VPR: Fedélzeti rádióállomás +Common.ALL.VASNP = ASNP áramellátása +Common.ALL.UOS = RC-UOS: Sebességkorlátozó eszköz (EPV/EPK nélküli vezetéshez) +Common.ALL.VAH = VAH: Szükségmenet(RPB relé hiba) +Common.ALL.KAH = KAH: Szükségmenet gombja ARS nélküli vezetéshez +Common.ALL.KAHK = KAH fedél +Common.ALL.VAD = VAD: Tartalék ajtózárás felülírása (KD relé meghibásodása esetén) +Common.ALL.OVT = OVT: Pneumatikus fékek kikapcsolása +Common.ALL.VOVT = VOVT: Pneumatikus szelepfék kikapcsolása +Common.ALL.EmergencyBrakeValve = Vészfék +Common.ALL.ParkingBrake = RögzítÅ‘fék +Common.ALL.VU = VU: Vonatvezérlés kapcsoló +Common.ALL.KDP = KDP: Jobb oldali ajtók nyitása +Common.ALL.KDPL = Jobb oldali ajtók kiválasztva +Common.ALL.KDPK = Jobb oldali ajtók gombfedele +Common.ALL.KDL = KDL: Bal oldali ajtók nyitása +Common.ALL.KDLL = Bal oldali ajtók kiválasztva +Common.ALL.KDLK = Bal oldali ajtók gombfedele +Common.ALL.KDLPK = Ajtó gombok fedele +Common.ALL.KRZD = KRZD: Tartalék ajtózáró +Common.ALL.VSD = Ajtó oldal választó +Common.ALL.Ring = CsengÅ‘ +Common.ALL.VUD = VUD: Ajtónyitás engedélyezÅ‘ (Ajtózáró) +Common.ALL.KDPH = Utolsó kocsi jobb oldali ajtajainak nyitása +Common.ALL.VUD2 = VUD2: SegédvezetÅ‘i ajtónyitás engedélyezÅ‘ +Common.ALL.Program1 = Program I +Common.ALL.Program2 = Program II +Common.ALL.VRP = VRP: Túlfeszültség relé visszaállítása +Common.ALL.VRPBV = VRP: Túlfeszültség relé visszaállítása, BV bekapcsolása +Common.ALL.KSN = KSN: Hibajelzés +Common.ALL.VMK = VMK: Kompresszor +Common.ALL.MK = Kompresszor +Common.ALL.VF1 = Tompított fényszóró +Common.ALL.VF2 = Távolsági fényszóró +Common.ALL.VF = Fényszóró kapcsoló +Common.ALL.VUS = VUS: Fényszórók (távolsági/tompított) +Common.ALL.GaugeLights = Műszerek világítása +Common.ALL.CabLights = Fülkevilágítás +Common.ALL.PassLights = Utastér világítás +Common.ALL.PanelLights = Műszerfal világítása +Common.ALL.RMK = RMK: Tartalék kompresszor +Common.ALL.KRP = KRP: Szükségindító +Common.ALL.VZP = VZP: Menet késleltetés kikapcsolása +Common.ALL.VZD = VZD: Ajtó késleltetés kikapcsolása +Common.ALL.VAV = VAV: Automatikus vonatvezérlés kapcsoló +Common.ALL.RouteNumber1+ = Forgalmi szám elsÅ‘ karakterének növelése +Common.ALL.RouteNumber1- = Forgalmi szám elsÅ‘ karakterének csökkentése +Common.ALL.RouteNumber2+ = Forgalmi szám második karakterének növelése +Common.ALL.RouteNumber2- = Forgalmi szám második karakterének csökkentése +Common.ALL.RouteNumber3+ = Forgalmi szám harmadik karakterének növelése +Common.ALL.RouteNumber3- = Forgalmi szám harmadik karakterének csökkentése +Common.ALL.LastStation+ = KövetkezÅ‘ végállomás +Common.ALL.LastStation- = ElÅ‘zÅ‘ végállomás +Common.ALL.RRP = RP: Vörös túlfeszültség relé visszajelzÅ‘ (menet-/fékáram nem alakult ki) +Common.ALL.GRP = RP: Zöld túlfeszültség relé visszajelzÅ‘ (megakadályozza a motorok túláramát) +Common.ALL.RP = RP: Vörös túlfeszültség relé visszajelzÅ‘ (menet-/fékáram nem alakult ki vagy RP-s) +Common.ALL.SN = LSN: Hiba visszajelzÅ‘ lámpa (áramkörök nem működnek) +Common.ALL.PU = Csökkentett feszültségű mód visszajelzÅ‘ +Common.ALL.BrT = Vonat légfék üzemben +Common.ALL.BrW = Kocsi légfék üzemben +Common.ALL.ARS = ARS: Automatikus sebességszabályozó rendszer kapcsoló +Common.ALL.ARSR = ARS-R: Automatikus sebességszabályozó rendszer ARS-R mód kapcsoló +Common.ALL.ALS = ALS: Automatikus vonat jeladás +Common.ALL.RCARS = RC-ARS: ARS áramköreinek lekapcsolása +Common.ALL.RC1 = RC-1: ARS áramköreinek lekapcsolása +Common.ALL.EPK = ARS elektropneumatikus szelep (EPK) +Common.ALL.EPV = ARS elektropneumatikus szelep (EPV) +Common.ARS.LN = LN: IrányjelzÅ‘ +Common.ARS.KT = KT: Fék visszajelzÅ‘ lámpa +Common.ARS.VD = VD: Vezérlés kikapcsolva ARS által +Common.ARS.Freq = ALS dekóder kapcsoló +Common.ARS.FreqD = (fel 1/5, le 2/6) +Common.ARS.FreqU = (fel 2/6, le 1/5) +Common.ARS.VP = "Tartalék vonat" mód +Common.ARS.RS = RS: Sebesség egyenlÅ‘ség (a következÅ‘ szakasz sebességkorlátozása egyenlÅ‘ vagy gyorsabb az aktuális értéknél) +Common.ARS.AB = ARS Automatikus blokkolás mód +Common.ARS.ABButton = ARS Automatikus blokkolás mód gomb +Common.ARS.ABDriver = (vezetÅ‘i) +Common.ARS.ABHelper = (segédvezetÅ‘i) +Common.ARS.AV = ElsÅ‘dleges ARS-MP egység hiba +Common.ARS.AV1 = Tartalék ARS-MP egység hiba +Common.ARS.AB2 = Automatikus blokkolás mód gomb +Common.ARS.ARS = ARS mód +Common.ARS.LRD = LRD: Mozgatás engedély (ALS 0-ás jelzés esetén) +Common.ARS.VRD = VRD: Mozgatás engedély(ALS 0-ás jelzés esetén) +Common.ARS.KB = KB: Éberségi gomb/pedál +Common.ARS.KVT = KVT: Féknyugtázó gomb +Common.ARS.KVTR = KVT: ARS-R féknyugtázó gomb +Common.ARS.04 = OCh: Nincs ARS frekvencia +Common.ARS.N4 = NCh: Nincs ARS frekvencia +Common.ARS.0 = 0: ARS stop jelzés +Common.ARS.40 = Maximum megengedett sebesség 40 km/h +Common.ARS.60 = Maximum megengedett sebesség 60 km/h +Common.ARS.70 = Maximum megengedett sebesség 70 km/h +Common.ARS.80 = Maximum megengedett sebesség 80 km/h +Common.ALL.RCBPS = RC-BPS: Megfutamodás elleni egység kapcsoló +Common.BPS.On = Megfutamodás elleni egység üzem +Common.BPS.Err = Megfutamodás elleni egység hiba +Common.BPS.Fail = Megfutamodás elleni egység meghibásodás +Commom.NMnUAVA.NMPressureLow = Alacsony légvezetéki nyomás visszajelzÅ‘ +Commom.NMnUAVA.UAVATriggered = UAVA kiiktatva +Common.ALL.LSD = Vonat ajtó állapot visszajelzÅ‘ (ajtók zárva) +Common.ALL.L1w = ElsÅ‘ vezeték visszajelzÅ‘ (menet mód) +Common.ALL.L2w = Második vezeték visszajelzÅ‘ (reosztát kontroller mozgás) +Common.ALL.L6w = Hatodik vezeték visszajelzÅ‘ (fék mód) +Common.ALL.Horn = Kürt +Common.ALL.DriverValveBLDisconnect = Fékvezeték elzáró csap +Common.ALL.DriverValveTLDisconnect = TöltÅ‘vezeték elzáró csap +Common.ALL.DriverValveDisconnect = Légfék elzáró csap +Common.ALL.KRMH = KRMSH: Légfék vészeseti bekapcsoló +Common.ALL.RVTB = RVTB: Biztonsági fék szelep +Common.ALL.FrontBrakeLineIsolationToggle = Fékvezeték elzáró csap +Common.ALL.FrontTrainLineIsolationToggle = TöltÅ‘vezeték elzáró csap +Common.ALL.RearTrainLineIsolationToggle = TöltÅ‘vezeték elzáró csap +Common.ALL.RearBrakeLineIsolationToggle = Fékvezeték elzáró csap +Common.ALL.UAVA = UAVA: Automatikus autostop kikapcsoló\n(légvezetéki nyomás csökkentése esetén) +Common.ALL.UAVA2 = UAVA: Automatikus autostop kikapcsoló +Common.ALL.UAVAContact = UAVA kontakt reset +Common.ALL.OAVU = OAVU: AVU kikapcsolása +Common.ALL.LAVU = AVU bekapcsolva +Common.ALL.GV = FÅ‘kapcsoló +Common.ALL.AirDistributor = VRN: LevegÅ‘elosztó megszakító +Common.ALL.CabinDoor = Fülkeajtó +Common.ALL.PassDoor = Ajtó az utastérbe +Common.ALL.FrontDoor = Ãtjáróajtó +Common.ALL.RearDoor = Ãtjáróajtó +Common.ALL.OtsekDoor1 = ElsÅ‘ hátfalszekrény nyitó fogantyú +Common.ALL.OtsekDoor2 = Második hátfalszekrény nyitó fogantyú +Common.ALL.CouchCap = Ülés kiemelése + +Common.ALL.UNCh = UNCh: Alacsony frekvenciás erÅ‘sítÅ‘ kapcsoló +Common.ALL.ES = ES: Vészhelyzeti kommunikációs kapcsoló +Common.ALL.GCab = Hangszóró: Kabinhangszóró kapcsoló +Common.ALL.UPO = UPO: Utastájékoztató +Common.ALL.R_Radio = Utastájékoztató +Common.ALL.AnnPlay = Utastájékoztató visszajelzÅ‘ lámpa + +#RRI +Train.Common.RRI = RRI: Rádió-relé utastájékoztató +Common.RRI.RRIUp = RRI: Fel +Common.RRI.RRIDown = RRI: Le +Common.RRI.RRILeft = RRI: Balra +Common.RRI.RRIRight = RRI: Jobbra +Common.RRI.RRIEnableToggle = RRI: Ãramellátás +Common.RRI.RRIRewindSet2 = RRI: ElÅ‘retekerés +Common.RRI.RRIRewindSet0 = RRI: Visszatekerés +Common.RRI.RRIAmplifierToggle = RRI: ErÅ‘sítÅ‘ +Common.RRI.RRIOn = RRI üzem visszajelzÅ‘ + +#ASNP +Train.Common.ASNP = ASNP +Common.ASNP.ASNPMenu = ASNP: Menü +Common.ASNP.ASNPUp = ASNP: Fel +Common.ASNP.ASNPDown = ASNP: Le +Common.ASNP.ASNPOn = ASNP: Ãramellátás + +#PVK +Common.CabVent.PVK- = FülkeszellÅ‘ztetés erejének csökkentése +Common.CabVent.PVK+ = FülkeszellÅ‘ztetés erejének növelése + +#IGLA +Train.Common.IGLA = IGLA +Common.IGLA.Button1Up = IGLA: ElsÅ‘ gomb fel +Common.IGLA.Button1 = IGLA: ElsÅ‘ gomb +Common.IGLA.Button1Down = IGLA: ElsÅ‘ gomb le +Common.IGLA.Button2Up = IGLA: Második gomb fel +Common.IGLA.Button2 = IGLA: Második gomb +Common.IGLA.Button2Down = IGLA: Második gomb le +Common.IGLA.Button23 = IGLA: Második és Harmadik gomb +Common.IGLA.Button3 = IGLA: Harmadik gomb +Common.IGLA.Button4 = IGLA: Negyedik gomb +Common.IGLA.IGLASR = IGLA: Ãramellátás +Common.IGLA.IGLARX = IGLA: Nincs kapcsolat +Common.IGLA.IGLAErr = IGLA: Hiba +Common.IGLA.IGLAOSP = IGLA: Tűzoltó rendszer üzemben +Common.IGLA.IGLAPI = IGLA: Tűz +Common.IGLA.IGLAOff = IGLA: Nagyfeszültségű áramkörök ki + +#BZOS +Common.BZOS.On = Riasztó kapcsoló +Common.BZOS.VH1 = Riasztó bekapcsolva +Common.BZOS.VH2 = Riasztó kioldva +Common.BZOS.Engaged = Riasztó kioldva + +#Train helpers common +Common.ALL.SpeedCurr = Jelenlegi sebesség +Common.ALL.SpeedAccept = Megengedett sebesség +Common.ALL.SpeedAttent = KövetkezÅ‘ szakasz megengedett sebesség +Common.ALL.Speedometer = SebességmérÅ‘ +Common.ALL.BLTLPressure = Nyomás a légvezetékekben (piros: fékvezeték, fekete: töltÅ‘vezeték) +Common.ALL.BCPressure = Fékhenger nyomás +Common.ALL.EnginesCurrent = Motor áramerÅ‘sség (A) +Common.ALL.EnginesCurrent1 = ElsÅ‘ vontatómotorok áramerÅ‘ssége (A) +Common.ALL.EnginesCurrent2 = Második vontatómotorok áramerÅ‘ssége (A) +Common.ALL.EnginesVoltage = Motor feszültség (kV) +Common.ALL.BatteryVoltage = Akkumulátor feszültség (V) +Common.ALL.BatteryCurrent = Akkumulátor áramerÅ‘sség (A) +Common.ALL.HighVoltage = Magasfeszültség (kV) +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/it_502.lua b/lua/metrostroi_data/languages/it_502.lua new file mode 100644 index 0000000..cb7019e --- /dev/null +++ b/lua/metrostroi_data/languages/it_502.lua @@ -0,0 +1,274 @@ +return [[ +#81-502 + +[it] + +#######Buttons########### +#Common +Common.502.KS = Indicatore di funzionamento KSAUP +Common.502.AV = L'autodrive è in funzione +Common.502.SD = SD: indicatore stato porte (le porte sono chiuse) +Common.502.SDW = SD: indicatore stato porte (le porte sono aperte) +Common.502.L3w = Terzo indicatore (modalità X3 ) +Common.502.L4w = Quarto indicatore (direzione del movimento all'indietro) +Common.502.L5w = Quinto indicatore (direzione del movimento in avanti +Common.502.L16w = Sedicesimo indicatore (porte interbloccate) +Common.502.L20w = Ventesimo indicatore (LK2 e LK5 chiusura) +Common.502.L23w = Ventitresimo indicatore (Controllo del compressore) +Common.502.RK1 = Controllo della prima posizione RK +Common.502.BRD = Indicatore guasto porte +Common.502.KOS = KB: Pulsante del limite di velocità (pulsante di attenzione) +Common.502.VAK = AK: Circuiti modalità d'emergenza +Common.502.LRU = I circuiti di modalità di guida d'emergenza sono in funzione + +#Spawner +Spawner.502.TypeNVL = Treno da NVL +Spawner.502.TypeKVLO = Veccio treno da KVL +Spawner.502.TypeKVLN = Nuovo treno da KVL +Spawner.502.EWagons = Aggiungi carri di tipo "E" + +#gmod_subway_81-502 +Entities.gmod_subway_81-502.Buttons.VBA.VBAToggle = Accensione / spegnimento della batteria dell'autodrive + +Entities.gmod_subway_81-502.Buttons.AV.VRUToggle = VRU: Modalità di guida di emergenza +Entities.gmod_subway_81-502.Buttons.AV.KPVUToggle = KPVU: Disattivare il dispositivo di controllo pneumatico +Entities.gmod_subway_81-502.Buttons.AV.KSDToggle = KSD: Disabilitare il controllo dell'interblocco della porta +Entities.gmod_subway_81-502.Buttons.AV.KAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-502.Buttons.AV.KADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-502.Buttons.AV.OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-502.Buttons.AV.VKFToggle = @[Common.ALL.VKF] + + +Entities.gmod_subway_81-502.Buttons.RCAV3.RCAV3Toggle = KSAUP sezionatore di circuiti (AV3) +Entities.gmod_subway_81-502.Buttons.RCAV4.RCAV4Toggle = KSAUP sezionatore di circuiti (AV4) +Entities.gmod_subway_81-502.Buttons.RCAV5.RCAV5Toggle = KSAUP sezionatore di circuiti (AV5) +Entities.gmod_subway_81-502.Buttons.RCARS.RCARSToggle = @[Common.ALL.RCARS] +Entities.gmod_subway_81-502.Buttons.RCBPS.RCBPSToggle = @[Common.ALL.RCBPS] + +Entities.gmod_subway_81-502.Buttons.VRD2.2:VRDSet = @[Common.ARS.VRD] +Entities.gmod_subway_81-502.Buttons.VRD2.!LVRD = @[Common.ARS.LRD] + +Entities.gmod_subway_81-502.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-502.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-502.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-502.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-502.Buttons.AV1.VU3Toggle = @[Common.703.VU3] +Entities.gmod_subway_81-502.Buttons.UPO.R_UPOToggle = @[Common.ALL.UPO] + +Entities.gmod_subway_81-502.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_81-502.Buttons.VRD.VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-502.Buttons.HelperPanel.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.HelperPanel.KDPHSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-502.Buttons.AV2.VSOSDToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-502.Buttons.AV2.VRToggle = @[Common.ALL.VPR] + +Entities.gmod_subway_81-502.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLampAutodrive = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LDoorsWag = @[Common.502.SDW] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LDoors = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LGreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LRedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLampAutodrive = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RDoorsWag = @[Common.502.SDW] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RDoors = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RGreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RRedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_80 = @[Common.ARS.80] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_70 = @[Common.ARS.70] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_60 = @[Common.ARS.60] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_40 = @[Common.ARS.40] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_00 = @[Common.ARS.0] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_04 = @[Common.ARS.N4] + +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_KS = @[Common.502.KS] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_AV = @[Common.502.AV] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_4 = @[Common.502.L4w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_5 = @[Common.502.L5w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_DT = @[Common.ALL.BrT] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_20 = @[Common.502.L20w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_1P = @[Common.502.RK1] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SN1 = @[Common.ALL.RP] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SN2 = @[Common.ALL.SN] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_3 = @[Common.502.L3w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SD1 = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SD2 = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_RP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_DV = @[Common.502.BRD] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!CPS_Pd = @[Common.ARS.LRD] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_04 = @[Common.ARS.04] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_00 = @[Common.ARS.0] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_40 = @[Common.ARS.40] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_60 = @[Common.ARS.60] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_70 = @[Common.ARS.70] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_80 = @[Common.ARS.80] + +Entities.gmod_subway_81-502.Buttons.Main1.2:VUSToggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-502.Buttons.Main1.2:HeadlightsToggle = @[Common.ALL.VF1] +Entities.gmod_subway_81-502.Buttons.Main1.!LKTLight = @[Common.ARS.KT] +Entities.gmod_subway_81-502.Buttons.Main1.!LKVDLight = @[Common.ARS.VD] +Entities.gmod_subway_81-502.Buttons.Main1.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-502.Buttons.Main1.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-502.Buttons.Main1.2:KBSet = @[Common.ARS.KB] +Entities.gmod_subway_81-502.Buttons.Main1.2:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.Main1.2:LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-502.Buttons.Main1.2:LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-502.Buttons.Main1.2:VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-502.Buttons.Main1.2:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-502.Buttons.Main1.2:KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-502.Buttons.Main1.2:VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-502.Buttons.Main1.2:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-502.Buttons.Main1.2:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-502.Buttons.Main1.2:VAKSet = @[Common.502.VAK] +Entities.gmod_subway_81-502.Buttons.Main1.2:VUDToggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-502.Buttons.Main1_2.!LMK2 = @[Common.502.L23w] +Entities.gmod_subway_81-502.Buttons.Main1_2.!LVRD2 = @[Common.ARS.LRD] + +Entities.gmod_subway_81-502.Buttons.Main2.KOSSet = @[Common.502.KOS] +Entities.gmod_subway_81-502.Buttons.Main2.!LMK = @[Common.502.L23w] +Entities.gmod_subway_81-502.Buttons.Main2.VZPToggle = @[Common.ALL.VZP] +Entities.gmod_subway_81-502.Buttons.Main2.VZDSet = @[Common.ALL.VZD] +Entities.gmod_subway_81-502.Buttons.Main2.!L16 = @[Common.502.L16w] +Entities.gmod_subway_81-502.Buttons.Main2.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-502.Buttons.Main2.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.Main2.LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-502.Buttons.Main2.LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-502.Buttons.Main2.VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-502.Buttons.Main2.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-502.Buttons.Main2.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-502.Buttons.Main2.KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-502.Buttons.Main2.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-502.Buttons.Main2.!RU = @[Common.502.LRU] +Entities.gmod_subway_81-502.Buttons.Main2.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-502.Buttons.Main2.VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-502.Buttons.Main2.VAKSet = @[Common.502.VAK] +Entities.gmod_subway_81-502.Buttons.Main2.AutodriveToggle = @[Common.ALL.VAV] +Entities.gmod_subway_81-502.Buttons.Main2.VUDToggle = @[Common.ALL.VUD] + +Entities.gmod_subway_81-502.Buttons.BPS.!BPSon = @[Common.BPS.On] +Entities.gmod_subway_81-502.Buttons.BPS.!BPSErr = @[Common.BPS.Err] +Entities.gmod_subway_81-502.Buttons.BPS.!BPSFail = @[Common.BPS.Fail] +Entities.gmod_subway_81-502.Buttons.NMnUAVA.!NMPressureLow = @[Commom.NMnUAVA.NMPressureLow] +Entities.gmod_subway_81-502.Buttons.NMnUAVA.!UAVATriggered = @[Commom.NMnUAVA.UAVATriggered] + +Entities.gmod_subway_81-502.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-502.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-502.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-502.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-502.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-502.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-502.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-502.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-502.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-502.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-502.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-502.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-502.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-502.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber3+ = @[Common.ALL.RouteNumber3+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber3- = @[Common.ALL.RouteNumber3-] + +Entities.gmod_subway_81-502.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-502.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-502.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-502.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-502.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-502.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-501 +Entities.gmod_subway_81-501.Buttons.AV.KPVUToggle = @[Entities.gmod_subway_81-502.Buttons.AV.KPVUToggle] +Entities.gmod_subway_81-501.Buttons.AV.KSDToggle = @[Entities.gmod_subway_81-502.Buttons.AV.KSDToggle] + +Entities.gmod_subway_81-501.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-501.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-501.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-501.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-501.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-501.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_81-501.Buttons.Main.!GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-501.Buttons.Main.!RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-501.Buttons.Main.!SD = @[Common.703.SD] +Entities.gmod_subway_81-501.Buttons.Main.LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-501.Buttons.Main.LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-501.Buttons.Main.VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-501.Buttons.Main.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-501.Buttons.Main.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-501.Buttons.Main.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-501.Buttons.Main.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-501.Buttons.Main.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-501.Buttons.Main.VUDToggle = @[Common.ALL.VUD] + +Entities.gmod_subway_81-501.Buttons.HelperPanel.VDLSet = @[Common.ALL.KDL] + +Entities.gmod_subway_81-501.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-501.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-501.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-501.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-501.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-501.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-501.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-501.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-501.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-501.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-501.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-501.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-501.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-501.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-501.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-501.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] + +Entities.gmod_subway_81-501.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#Cameras: +Train.502.AV = Switches +Train.502.VBA = @[Entities.gmod_subway_81-502.Buttons.VBA.VBAToggle] +Train.502.VRD = VRD +Train.502.RCARS = RC-ARS +Train.502.RCAV5 = RC-AV5 +Train.502.RCBPS = RC-BPS +Train.502.RCAV3 = RC-AV3 +Train.502.RCAV4 = RC-AV4 + +#Spawner: +Entities.gmod_subway_81-502.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-502.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-502.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-502.Spawner.EMAType.Name = @[Spawner.Common.EType] +Entities.gmod_subway_81-502.Spawner.EMAType.1 = @[Spawner.502.TypeNVL] +Entities.gmod_subway_81-502.Spawner.EMAType.2 = @[Spawner.502.TypeKVLO] +Entities.gmod_subway_81-502.Spawner.EMAType.3 = @[Spawner.502.TypeKVLN] +Entities.gmod_subway_81-502.Spawner.EWagons.Name = @[Spawner.502.EWagons] +Entities.gmod_subway_81-502.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-502.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-502.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-502.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-502.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/it_702.lua b/lua/metrostroi_data/languages/it_702.lua new file mode 100644 index 0000000..1c9bb6d --- /dev/null +++ b/lua/metrostroi_data/languages/it_702.lua @@ -0,0 +1,742 @@ +return [[ +#D/E-based types + +[it] + +#Cameras: +Train.702.Breakers1 = Interruttore batteria +Train.702.Breakers2 = Interruttore illuminazione +Train.702.Breakers3 = Interruttore principale +Train.703.Breakers1 = Interruttore batteria +Train.703.Breakers2 = Interruttore principale e interruttori di illuminazione +Train.703.Parking = Freno di stazionamento, UAVA +Train.703.RCARS = RC-1: selezionatore circuiti ARS +Train.703.AVU = Blocca AVU + +#Spawner +Spawner.707.Type = Tipo di pannello +Spawner.707.Type1 = Vecchio + RRI +Spawner.707.Type2 = Nuovo + ASNP +Spawner.710.RRI = Radio-relè annunciatore + +#######Buttons########### +#Common +Common.702.VZ1 = Valvola pneumatica â„–1 +Common.703.ParkingBrakeLeft = Rilascia freno di parcheggio +Common.703.ParkingBrakeRight = Imposta freno di parcheggio +Common.703.KSD = KSD: Pulsante di controllo interblocco porte +Common.703.SD = @[Common.502.SDW] +Common.703.VU1 = Riscaldamento cabina +Common.703.VU2 = Illuminazione d'emergenza +Common.703.VU3 = Luci Cabina +Common.703.AV = Interruttore principale (circuiti ad alta tensione) +Common.703.LOn = Abilita illuminazione +Common.703.LOff = Disabilita l'illuminazione +Common.703.KRR = KRR: Ruota RK nella prima posizione +Common.703.RUT = RUT regolazione (accelerazione ridotta) +Common.707.SEQ = Spia di controllo del controller reostato +Common.707.TAH = TAH: Modalità di guida d'emergenza per la guida senza ARS +Common.710.RK = Il controller del reostato è in posizione intermedia + +Common.710.SAMMSchemeOff = SAMM: bottone stop +Common.710.SAMMStart = SAMM: bottone start +Common.710.SAMMReset = SAMM: bottone Reset +Common.710.SAMMXTLamp = SAMM: Preparare i circuiti di azionamento / freno con ATO +Common.710.SAMMSignal1 = SAMM: @[Common.ALL.Unsused1] +Common.710.SAMMSignal2 = SAMM: @[Common.ALL.Unsused1] +Common.710.SAMMOn = SAMM: Interruttore (funzionamento automatico del treno) +Common.710.SAMMUnit = SAMM: Unita di esecuzione +Common.710.SAMMX2 = SAMM: Modalità X2 +Common.710.SAMMAhead = SAMM: Modalità di recupero +Common.710.SAMMAccept = SAMM: Permesso + +#gmod_subway_81-702 +Entities.gmod_subway_81-702.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-702.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-702.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-702.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-702.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-702.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-702.Buttons.VU.KU1Set = @[Common.703.LOn] +Entities.gmod_subway_81-702.Buttons.VU.KU2Set = @[Common.703.LOff] +Entities.gmod_subway_81-702.Buttons.MainB.KU7Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-702.Buttons.MainB.KU6Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-702.Buttons.MainB.VRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-702.Buttons.MainB.KU3Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-702.Buttons.MainP.VZSet = @[Common.702.VZ1] +Entities.gmod_subway_81-702.Buttons.KU9.KU9Set = @[Common.703.KSD] +Entities.gmod_subway_81-702.Buttons.KU5.KU5Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-702.Buttons.MainL.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-702.Buttons.MainL.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-702.Buttons.MainL.!Blue = @[Common.703.SD] +Entities.gmod_subway_81-702.Buttons.VU.SNSet = @[Common.ALL.KSN] + +Entities.gmod_subway_81-702.Buttons.HelperPanel.KU10Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-702.Buttons.HelperPanel.KU8Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-702.Buttons.HelperPanel.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-702.Buttons.HelperPanel.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_81-702.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_81-702.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_81-702.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_81-702.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_81-702.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] + +Entities.gmod_subway_81-702.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-702.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-702.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-702.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-702.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-702.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-702.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-702.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-702.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-702.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-702.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-702.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-702.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-702.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-702.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-702.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-702.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-702.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-702.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +#gmod_subway_81-702_int +Entities.gmod_subway_81-702_int.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-702_int.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-702_int.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-702_int.Buttons.VU.KU1Set = @[Common.703.LOn] +Entities.gmod_subway_81-702_int.Buttons.VU.KU2Set = @[Common.703.LOff] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU7Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU6Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-702_int.Buttons.MainB.VRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU3Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-702_int.Buttons.KU9.KU9Set = @[Common.703.KSD] +Entities.gmod_subway_81-702_int.Buttons.KU5.KU5Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-702_int.Buttons.MainL.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-702_int.Buttons.MainL.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-702_int.Buttons.MainL.!Blue = @[Common.703.SD] +Entities.gmod_subway_81-702_int.Buttons.VU.SNSet = @[Common.ALL.KSN] + +Entities.gmod_subway_81-702_int.Buttons.HelperPanel.KU10Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-702_int.Buttons.HelperPanel.KU8Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_81-702_int.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-702_int.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-702_int.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-702_int.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-702_int.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-702_int.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-702_int.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-702_int.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-702_int.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-702_int.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702_int.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702_int.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-702_int.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-702_int.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-702_int.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-702_int.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-702_int.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-702_int.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-702_int.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +#gmod_subway_81-703 +Entities.gmod_subway_81-703.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-703.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-703.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-703.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-703.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-703.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-703.Buttons.AV2.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-703.Buttons.Main.RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-703.Buttons.Main.GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-703.Buttons.Main.SD = @[Common.703.SD] +Entities.gmod_subway_81-703.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_81-703.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_81-703.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_81-703.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_81-703.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-703.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_81-703.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-703.Buttons.Main.KU7KToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-703.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703.Buttons.Main.KU6KToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-703.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-703.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-703.Buttons.Main.KU12Toggle = @[Common.703.RUT] +Entities.gmod_subway_81-703.Buttons.VU4.KU16Toggle = @[Common.ALL.VF2] + +Entities.gmod_subway_81-703.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-703.Buttons.HelperPanel.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-703.Buttons.HelperPanel.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_81-703.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_81-703.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_81-703.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_81-703.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_81-703.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] + +Entities.gmod_subway_81-703.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-703.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-703.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-703.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-703.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-703.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-703.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-703.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-703.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-703.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-703.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-703.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-703.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-703.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-703.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-703.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-703.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-703.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-703.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-703.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +#gmod_subway_81-703_int +Entities.gmod_subway_81-703_int.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-703_int.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-703_int.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-703_int.Buttons.Main.RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-703_int.Buttons.Main.GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-703_int.Buttons.Main.SD = @[Common.703.SD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_81-703_int.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_81-703_int.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_81-703_int.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_81-703_int.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-703_int.Buttons.Main.KU7KToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703_int.Buttons.Main.KU6KToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU12Toggle = @[Common.703.RUT] +Entities.gmod_subway_81-703_int.Buttons.VU4.KU16Toggle = @[Common.ALL.VF2] + +Entities.gmod_subway_81-703_int.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703_int.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_81-703_int.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-703_int.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-703_int.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-703_int.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-703_int.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-703_int.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-703_int.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-703_int.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-703_int.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-703_int.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703_int.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703_int.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-703_int.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-703_int.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-703_int.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-703_int.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-703_int.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-703_int.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-703_int.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-703_int.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + + +#gmod_subway_ezh +Entities.gmod_subway_ezh.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_ezh.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_ezh.Buttons.VU.KU14Set = @[Common.ALL.KRP] +Entities.gmod_subway_ezh.Buttons.VU.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_ezh.Buttons.KRR.KRRSet = @[Common.703.KRR] + +Entities.gmod_subway_ezh.Buttons.AVU.OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_ezh.Buttons.AVU.!AVULight = @[Common.ALL.LAVU] + +Entities.gmod_subway_ezh.Buttons.AV2.R_RadioToggle = @[Common.ALL.VASNP] +Entities.gmod_subway_ezh.Buttons.AV2.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_ezh.Buttons.AV2.UOSToggle = @[Common.ALL.UOS] + +Entities.gmod_subway_ezh.Buttons.LampsALS1.!LNF = @[Common.ARS.04] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L0 = @[Common.ARS.0] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L40 = @[Common.ARS.40] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L60 = @[Common.ARS.60] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L70 = @[Common.ARS.70] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L80 = @[Common.ARS.80] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!LNF_2 = @[Common.ARS.04] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L0_2 = @[Common.ARS.0] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L40_2 = @[Common.ARS.40] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L60_2 = @[Common.ARS.60] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L70_2 = @[Common.ARS.70] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L80_2 = @[Common.ARS.80] + +Entities.gmod_subway_ezh.Buttons.AB1.AB1Set = @[Common.ARS.ABButton]@[Common.ARS.ABDriver] +Entities.gmod_subway_ezh.Buttons.AB2.AB2Set = @[Common.ARS.ABButton]@[Common.ARS.ABHelper] +Entities.gmod_subway_ezh.Buttons.KAH.KAHToggle = @[Common.707.TAH] +Entities.gmod_subway_ezh.Buttons.RC1.RC1Toggle = @[Common.ALL.RCARS] + +Entities.gmod_subway_ezh.Buttons.Lamps1.!AV = @[Common.ARS.AV] +Entities.gmod_subway_ezh.Buttons.Lamps1.!SEQ = @[Common.707.SEQ] +Entities.gmod_subway_ezh.Buttons.Lamps1.!ARS = @[Common.ARS.ARS] +Entities.gmod_subway_ezh.Buttons.Lamps1.!AB = @[Common.ARS.AB] +Entities.gmod_subway_ezh.Buttons.Lamps1.!SD = @[Common.703.SD] +Entities.gmod_subway_ezh.Buttons.Lamps1.!LSN = @[Common.ALL.SN] +Entities.gmod_subway_ezh.Buttons.Lamps1.!AV1 = @[Common.ARS.AV1] +Entities.gmod_subway_ezh.Buttons.Lamps1.!RRP = @[Common.ALL.RP] +Entities.gmod_subway_ezh.Buttons.Lamps1.!KT = @[Common.ARS.KT] +Entities.gmod_subway_ezh.Buttons.Lamps1.!VD = @[Common.ARS.VD] +Entities.gmod_subway_ezh.Buttons.Lamps1.!RS = @[Common.ARS.RS] +Entities.gmod_subway_ezh.Buttons.Lamps1.!LN = @[Common.ARS.LN] +Entities.gmod_subway_ezh.Buttons.Lamps2.!RRP2 = @[Common.ALL.RP] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LPU2 = @[Common.707.SEQ] +Entities.gmod_subway_ezh.Buttons.Lamps2.!VD2 = @[Common.ARS.VD] +Entities.gmod_subway_ezh.Buttons.Lamps2.!KT2 = @[Common.ARS.KT] +Entities.gmod_subway_ezh.Buttons.Lamps2.!AB2 = @[Common.ARS.AB] +Entities.gmod_subway_ezh.Buttons.Lamps2.!SD2 = @[Common.703.SD] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LN2 = @[Common.ARS.LN] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LSN2 = @[Common.ALL.SN] + +Entities.gmod_subway_ezh.Buttons.Main1.1:KU16Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_ezh.Buttons.Main1.1:ALSFreqToggle = @[Common.ARS.Freq]@[Common.ARS.FreqD] +Entities.gmod_subway_ezh.Buttons.Main1.1:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU6KToggle = @[Common.ALL.KDLPK] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh.Buttons.Main1.1:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh.Buttons.Main1.1:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh.Buttons.Main1.1:R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU16Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_ezh.Buttons.Main2.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh.Buttons.Main2.2:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU6KToggle = @[Common.ALL.KDLPK] +Entities.gmod_subway_ezh.Buttons.Main2.2:ALSFreqToggle = @[Common.ARS.Freq]@[Common.ARS.FreqD] +Entities.gmod_subway_ezh.Buttons.Main2.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh.Buttons.Main2.2:R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU10Set = @[Common.ALL.KRZD] + +Entities.gmod_subway_ezh.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_ezh.Buttons.HelperPanel.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.HelperPanel.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_ezh.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_ezh.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_ezh.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_ezh.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_ezh.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] + +Entities.gmod_subway_ezh.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_ezh.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_ezh.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] +Entities.gmod_subway_ezh.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_ezh.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_ezh.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_ezh.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + + +Entities.gmod_subway_ezh.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_ezh.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_ezh.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +#gmod_subway_ezh1 +Entities.gmod_subway_ezh1.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh1.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh1.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh1.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh1.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh1.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh1.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh1.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh1.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] + + +Entities.gmod_subway_ezh1.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh1.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh1.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh1.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh1.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +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.!SD = @[Common.703.SD] + +Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh1.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh1.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh1.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh1.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh1.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh1.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh1.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh1.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh1.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_ezh1.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh1.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh1.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_ezh1.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh1.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + + +#gmod_subway_ez3 +Entities.gmod_subway_ezh3.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh3.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh3.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh3.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh3.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_ezh3.Buttons.RUM.RUMToggle = @[Common.ALL.RCARS] +Entities.gmod_subway_ezh3.Buttons.KRR.KRRSet = @[Common.703.KRR] + +Entities.gmod_subway_ezh3.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_ezh3.Buttons.VUHelper.VUToggle = @[Common.ALL.VU] + + +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSchemeOffSet = @[Common.710.SAMMSchemeOff] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMStartSet = @[Common.710.SAMMStart] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMResetSet = @[Common.710.SAMMReset] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMXTLamp = @[Common.710.SAMMXTLamp] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal1 = @[Common.ALL.Unsused1] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal2 = @[Common.ALL.Unsused1] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMOnToggle = @[Common.710.SAMMOn] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMUnitToggle = @[Common.710.SAMMUnit] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMX2Toggle = @[Common.710.SAMMX2] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMAheadToggle = @[Common.710.SAMMAhead] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMAcceptToggle = @[Common.710.SAMMAccept] +Entities.gmod_subway_ezh3.Buttons.Main.V1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh3.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh3.Buttons.Main.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh3.Buttons.Main.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_ezh3.Buttons.Main.VU14Toggle = @[Common.ALL.VUS] +Entities.gmod_subway_ezh3.Buttons.Main.GLightsToggle = @[Common.ALL.GaugeLights] +Entities.gmod_subway_ezh3.Buttons.Main.VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_ezh3.Buttons.Main.V4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh3.Buttons.Main.V5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh3.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_ezh3.Buttons.Main.KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh3.Buttons.Main.KBSet = @[Common.ARS.KB] +Entities.gmod_subway_ezh3.Buttons.Main.RKLamp = @[Common.710.RK] +Entities.gmod_subway_ezh3.Buttons.Main.ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh3.Buttons.Main.R_UNchToggle = @[Common.ALL.UNCh] +Entities.gmod_subway_ezh3.Buttons.Main.V2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh3.Buttons.Main.R_RadioToggle = @[Common.ALL.R_Radio] +Entities.gmod_subway_ezh3.Buttons.Main.ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh3.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh3.Buttons.Main.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_ezh3.Buttons.Main.PLightsToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_ezh3.Buttons.Main.V10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh3.Buttons.Main.PLightsToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_ezh3.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh3.Buttons.Main.KU12Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh3.Buttons.Main.KAHSet = @[Common.ALL.KAH] +Entities.gmod_subway_ezh3.Buttons.Main.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_ezh3.Buttons.Main.KU10Set = @[Common.ALL.KRP] +Entities.gmod_subway_ezh3.Buttons.Main.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_ezh3.Buttons.Main.R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_ezh3.Buttons.Main.!AnnPlay = @[Common.ALL.AnnPlay] + +Entities.gmod_subway_ezh3.Buttons.HelperPanel.V6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.V3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_ezh3.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] + +Entities.gmod_subway_ezh3.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] +Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh3.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh3.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh3.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh3.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh3.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh3.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh3.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_ezh3.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_ezh3.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_ezh3.Buttons.Panel.!L04 = @[Common.ARS.04] +Entities.gmod_subway_ezh3.Buttons.Panel.!L0 = @[Common.ARS.0] +Entities.gmod_subway_ezh3.Buttons.Panel.!L40 = @[Common.ARS.40] +Entities.gmod_subway_ezh3.Buttons.Panel.!L60 = @[Common.ARS.60] +Entities.gmod_subway_ezh3.Buttons.Panel.!L70 = @[Common.ARS.70] +Entities.gmod_subway_ezh3.Buttons.Panel.!L80 = @[Common.ARS.80] + +Entities.gmod_subway_ezh3.Buttons.Panel.!LKT = @[Common.ARS.KT] +Entities.gmod_subway_ezh3.Buttons.Panel.!LSN = @[Common.ALL.SN] +Entities.gmod_subway_ezh3.Buttons.Panel.!LKVD = @[Common.ARS.VD] +Entities.gmod_subway_ezh3.Buttons.Panel.!LRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh3.Buttons.Panel.!LPU = @[Common.ALL.PU] +Entities.gmod_subway_ezh3.Buttons.Panel.!LSD = @[Common.703.SD] + +Entities.gmod_subway_ezh3.Buttons.Panel.!Speedometer = @[Common.ALL.Speedometer] +Entities.gmod_subway_ezh3.Buttons.Panel.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh3.Buttons.Panel.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh3.Buttons.Panel.!HighVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_ezh3.Buttons.Panel.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh3.Buttons.Panel.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +#gmod_subway_em508t +Entities.gmod_subway_em508t.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_em508t.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_em508t.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_em508t.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_em508t.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_em508t.Buttons.VU14.VU14Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_em508t.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_em508t.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_em508t.Buttons.Main.KU12Set = @[Common.ALL.KDL] +Entities.gmod_subway_em508t.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_em508t.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_em508t.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_em508t.Buttons.Main.V2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_em508t.Buttons.Main.V1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_em508t.Buttons.Main.V4Set = @[Common.703.LOn] +Entities.gmod_subway_em508t.Buttons.Main.V5Set = @[Common.703.LOff] +Entities.gmod_subway_em508t.Buttons.Main.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_em508t.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_em508t.Buttons.Main.V10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_em508t.Buttons.Main.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_em508t.Buttons.Main.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_em508t.Buttons.Main.!SD = @[Common.703.SD] + +Entities.gmod_subway_em508t.Buttons.HelperPanel.V6Set = @[Common.ALL.KDL] +Entities.gmod_subway_em508t.Buttons.HelperPanel.V3Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_em508t.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_em508t.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_em508t.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_em508t.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_em508t.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_em508t.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_em508t.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_em508t.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_em508t.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_em508t.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_em508t.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_em508t.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_em508t.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +#Spawner: +Entities.gmod_subway_81-702.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-702.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-702.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-702.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-702.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_81-702.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-702.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-702.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] + +Entities.gmod_subway_81-703.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-703.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-703.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-703.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-703.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_81-703.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-703.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-703.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] + +Entities.gmod_subway_ezh.Spawner.TrainType.Name = @[Spawner.707.Type] +Entities.gmod_subway_ezh.Spawner.TrainType.1 = @[Spawner.707.Type1] +Entities.gmod_subway_ezh.Spawner.TrainType.2 = @[Spawner.707.Type2] +Entities.gmod_subway_ezh.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_ezh.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_ezh.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_ezh.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_ezh.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_ezh.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_ezh.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_ezh.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_ezh.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_ezh.Spawner.EWagons.Name = @[Spawner.502.EWagons] + +Entities.gmod_subway_ezh3.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_ezh3.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_ezh3.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_ezh3.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_ezh3.Spawner.Announcer.1 = @[Spawner.710.RRI] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/it_717.lua b/lua/metrostroi_data/languages/it_717.lua new file mode 100644 index 0000000..05cb8b2 --- /dev/null +++ b/lua/metrostroi_data/languages/it_717.lua @@ -0,0 +1,1206 @@ +return [[ +#81-717 + +[it] +#Cameras: +Train.717.Breakers = Freni automatici +Train.717.VB = Batteria e RC +Train.717.VBD = VBD e UPPS + +Train.717.VRD = VRD +Train.717.SOSD = SOSD +Train.717.PUAV = PUAV +Train.717.PA = PA +Train.717.PAScreen = Schermo PA + +Train.714.Shunt = Quadro comandi di manovra, valvola del guidatore +#Spawner +Spawner.717.Line2 = Train da MPL +Spawner.717.Line4 = Train da PBL +Spawner.717.Line5 = Train da FPL + +Spawner.717.Type = Tipo di treno +Spawner.717.BodyType = Tipo di struttura +Spawner.717.MVM = MVM +Spawner.717.LVZ = LVZ +Spawner.717.MaskType = Tipo di maschera +Spawner.717.CranType = Tipo di valvola del guidatore +Spawner.717.LampType = Tipo di lampade +Spawner.717.Lamp1 = LPV-02 +Spawner.717.Lamp2 = LLV-01 +Spawner.717.SeatType = Tipo di sedie +Spawner.717.ARS = Tipo di pannello ARS +Spawner.717.RingType = Tipo di segnale acustico ARS +Spawner.717.BPSNType = Tipo di BPSN + +#######Buttons########### +#Common +Common.717.VBD = ASNP Interruttore di blocco delle porte +Common.717.UPPS = UPPS interruttore di sistema +Common.717.BPSN = BPSN: Alimentare il treno +Common.717.ARS13V = ARS 13V: ARS controllo della tensione stabilizzata +Common.717.Radio13V = Controllo della tensione 13 V stabilizzato radio +Common.717.LVD = LVD: Primo indicatore (motori abilitati) +Common.717.LHRK = LHRK: Secondo indicatore (RK sta girando) +Common.717.LST = LST: Sesto indicatore (luce di frenata) +Common.717.KVC = LKVC: Indicatore contatto circuiti ausiliari (alta tensione non disponibile) +Common.717.GLEB = GLEB: Indicatore di aggiornamento +Common.717.KVP = LKVP: Controllo del convertitore ad alta tensione (BPSN) +Common.717.LSP = LSP: Emergenza incendio +Common.717.LEKK = LEKK: Electric box indicator +Common.717.LPU = LPU: Reduced RUT setting indicator +Common.717.OtklBV = Disabilitare l'interruttore ad azione rapida(BV) +Common.717.OtklBVK = Coperchio dell'interruttore ad azione rapida +Common.717.ConverterProtection = Pulsante di protezione dell'alimentazione +Common.717.VZ1 = VZ1: Valvola pneumatica â„–1 +Common.717.VL1 = Indicatore di controllo della non inclusione di ventilazione +Common.717.V13 = Interruttore di ventilazione di emergenza +Common.717.V11 = Primo gruppo di ventilazione +Common.717.V12 = Secondo gruppo di ventilazione +Common.717.RZPL = RZP: Relè di protezione dell'alimentazione +Common.717.VPAOn = VPA: Abilita unità treno +Common.717.VPAOff = VPA: Disabilita l'unità del treno +Common.717.VZD = VZD: Attiva / disattiva il controllo della porta (chiudi le porte) + +Common.717.A53 = A53: Contatto ausiliario dei circuiti +Common.717.A56 = A56: Batteria +Common.717.A54 = A54: Controllo treno +Common.717.A17 = A17: Porte, fari di emergenza +Common.717.A44 = A44: Regolatore di emergenza, compressore di emergenza, alimentazione ARS di emergenza +Common.717.A39 = A39: Partenza del treno tramite il controller di emergenza +Common.717.A70 = A70: Modalità automatica RKTT +Common.717.A14 = A14: Relè di avvio di emergenza +Common.717.A74 = A74: Resetta protezione del treno +Common.717.A26 = A26: Amplificatore di bassa frequenza +Common.717.AR63 = AР63: Radiostazione +Common.717.AS1 = AС1: Citofono, ASNP +Common.717.A13 = A13: Stato porte +Common.717.A21 = A21: Controllo porte +Common.717.A31 = A31: Apertura delle porte a sinistra +Common.717.A32 = A32: Apertura delle porte a destra +Common.717.A16 = A16: Chiusura delle porte +Common.717.A12 = A12: Chiusura delle porte di emergenza + +Common.717.A24 = A24: Controllo carica +Common.717.A49 = A49: Luci d'emergenza +Common.717.A27 = A27: Illuminazione abitacolo, illuminazione cabina, segnalazione freno, Indicatore RP verde +Common.717.A72 = A72: Sincronizzazione valvola pneumatica â„–1 +Common.717.A50 = A50: Contatto luci +Common.717.AV3 = AÐ’3: Alimentazione ventilazione d'emergenza +Common.717.AV3S = AÐ’3: Alimentazione d'emergenza radiostazione +Common.717.AV2 = AÐ’2: Alimentazione ventilazione prncipale +Common.717.AV4 = AÐ’4: Controllo primo gruppo di ventilazione +Common.717.AV5 = AÐ’5: Controllo secondo gruppo di ventilazione +Common.717.AV6 = AÐ’6: Controllo del gruppo di ventilazione di emergenza +Common.717.AV1 = AÐ’1: Controllo della ventilazione, segnalazione della ventilazione, ventilazione della cabina +Common.717.A29 = A29: Alimentazione fari +Common.717.A46 = A46: Fari anabbaglianti (Primo gruppo) +Common.717.A47 = A47: Luminosità fari frontali (secondo gruppo) +Common.717.A71 = A71: Alimentazione RV-3 dal controller e ARS +Common.717.A7 = A7: Luce rossa destra +Common.717.A9 = A9: Luce rossa sinistra + +Common.717.A84 = @[Common.ALL.VU] +Common.717.A8 = A8: Valvola pneumatica â„–2 +Common.717.A52 = A52: Valvola pneumatica a pedale +Common.717.A19 = A19: Alimentazion RV-3 vagoni +Common.717.A48 = A48: Pedale di attenzione, RPB, alimentazione ARS principale +Common.717.A10 = A10: Controllo del compressore +Common.717.A22 = A22: Contatto compressore +Common.717.A30 = A30: Alimentazione del servomotore e del regolatore reostato (SDRK) +Common.717.A1 = A1: Modalità di guida +Common.717.A2 = A2: Controllo del controller reostato +Common.717.A3 = A3: X-3 +Common.717.A4 = A4: Guida indietro +Common.717.A5 = A5: Guida avanti +Common.717.A6 = A6: Freno +Common.717.A18 = A18: Ripristino protezione +Common.717.A73 = A73: Segnalazione guasto +Common.717.A20 = A20: LK-2, LK-5 +Common.717.A25 = A25: Freno manuale + +Common.717.A11 = A11: Scompartimento dell'attrezzatura e illuminazione della cabina +Common.717.A37 = A37: Ripristino relè protezione alimentazione +Common.717.A45 = A45: Controllo BPSN +Common.717.A38 = A38: Indicatore segnalazione guasti al circuito dei vagoni +Common.717.A51 = A51: Contatti KPP e KVP +Common.717.A65 = A65: Convertitore BPSN secondario +Common.717.A66 = A66: disabilitazione BV +Common.717.A42 = A42: 75V ARS +Common.717.A43 = A43: 12V ARS +Common.717.A432 = A43: Controllo EPK +Common.717.A41 = A41: Valvola pneumatica â„–2 da ARS +Common.717.A40 = A40: Indicatore di frenata +Common.717.A75 = A75: Riscaldamento della cabina +Common.717.A76 = A76: Allarme incendio (ASOTP) +Common.717.A60 = A60: Indicatore motori abilitati +Common.717.A58 = A58: KAH-1 +Common.717.A57 = A57: Indicatore di controllo del regolatore di reostato +Common.717.A59 = A59: KAH-2 +Common.717.A28 = A28: Potenza dell'unità di controllo del regolatore a tiristori +Common.717.A55 = A55: Sincronizzazione del controller reostato +Common.717.A68 = A68: Contatto controllo scarpe +Common.717.A80 = A80: Abilitazione BV +Common.717.A81 = A81: Controllo BV + +Common.717.A58PU = A58: PUAV Alimentazione +Common.717.A59PU = A59: PUAV Controllo +Common.717.A61PU = A61: PUAV Chiave di controllo dell'invertitore +Common.717.A58PA = A58: Alimentazione PA +Common.717.A59PA = Ð59: @[Common.ALL.Unsused1] +Common.717.A61PA = A61: Chiave di controllo dell'invertitore PA + +Common.717.A78 = A78: Controllo delle porte anteriori +Common.717.ABK = A-VK: Controllo del condizionatore d'aria della cabina + +Common.717.A81 = A81: Controllo BV +Common.717.A23 = A23: Avvio del compressore +Common.717.A15 = A15: Luce d'emergenza +Common.717.AIS = AIS: Interruttore del sensore di velocità + +Common.717.RC2 = RC-2: Sezionatore di circuiti del sistema di guida automatica +Common.717.VAU = VAU: Interruttore del sistema di guida automatica + +Common.717.LampDV = DV: Malfunzionamento del sensore di rotazione +Common.717.ARSL20 = Limite di velocità 20 km/h +Common.717.ARSL40 = @[Common.ARS.40] +Common.717.ARSL60 = @[Common.ARS.60] +Common.717.ARSL70 = @[Common.ARS.70] +Common.717.ARSL80 = @[Common.ARS.80] + +Common.PUAV.K16 = LK16: Potenza disponibile sul sedicesimo filo (chiusura delle porte) +Common.PUAV.OS = LOS: PUAV modalità limitazione di velocità +Common.PUAV.AVT = LAVT: PUAV modalità guida automatica +Common.PUAV.RS = LRS: PUAV modalità regolazione della velocità +Common.PUAV.KI1 = LKI1: Primo indicatore di malfunzionamento sottoinsieme PUAV +Common.PUAV.KI2 = LKI2: Secondo indicatore di malfunzionamento sottoinsieme PUAV +Common.717.KH = KH3: Abilita la modalità X-3 dal sistema di guida automatica +Common.717.KSZD = KSZD: Approvare la chiusura delle porte +Common.717.VAV = @[Common.ALL.VAV] + +Common.717.PAM = PA-M +Common.717.PAKSDM = PA-KSD-M + +Common.PA.P = P +Common.PA.F = F +Common.PA.Up = Su +Common.PA.M = M +Common.PA.Left = Sinistra +Common.PA.Down = Giù +Common.PA.Right = Destra +Common.PA.Esc = Annulla +Common.PA.Enter = Enter + +Common.714.Start = Avvia i motori di trazione +Common.714.RV = Interruttore di direzione + +#gmod_subway_81-717 +Entities.gmod_subway_81-717_mvm.Buttons.Battery_C.1:UOSToggle = @[Common.ALL.UOS] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_R.2:UOSToggle = @[Common.ALL.UOS] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_C.1:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_R.2:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_C.1:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_R.2:RC1Toggle = @[Common.ALL.RC1] + +Entities.gmod_subway_81-717_mvm.Buttons.VBD_C.1:VBDToggle = @[Common.717.VBD] +Entities.gmod_subway_81-717_mvm.Buttons.VBD_R.2:VBDToggle = @[Common.717.VBD] +Entities.gmod_subway_81-717_mvm.Buttons.VBD_C.1:UPPS_OnToggle = @[Common.717.UPPS] +Entities.gmod_subway_81-717_mvm.Buttons.VBD_R.2:UPPS_OnToggle = @[Common.717.UPPS] + +Entities.gmod_subway_81-717_mvm.Buttons.Block1.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.RezMKSet = @[Common.ALL.RMK] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.ARS13Set = @[Common.717.ARS13V] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARSOch = @[Common.ARS.04] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLSD1 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLSD2 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLHRK = @[Common.717.LHRK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampRP = @[Common.ALL.RP] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLSN = @[Common.ALL.SN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLN = @[Common.ARS.LN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLKVC = @[Common.717.KVC] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLRS = @[Common.ARS.RS] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLVD = @[Common.717.LVD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLST = @[Common.717.LST] + +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARSOch = @[Common.ARS.04] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLSD1 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLSD2 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLVD = @[Common.717.LVD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLHRK = @[Common.717.LHRK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLST = @[Common.717.LST] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampRP = @[Common.ALL.RP] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLSN = @[Common.ALL.SN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLKVC = @[Common.717.KVC] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLEKK = @[Common.717.GLEB] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLN = @[Common.ARS.LN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLRS = @[Common.ARS.RS] + +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LSD = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LOch = @[Common.ARS.0]\n@[Common.ARS.04] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LN = @[Common.ARS.LN]\n@[Common.ARS.40] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!60 = @[Common.ARS.60]\n@[Common.ARS.80] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!70 = @[Common.ARS.70]\n@[Common.717.LHRK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LEKK = @[Common.717.LEKK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LPU = @[Common.717.LPU] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LKVC = @[Common.717.KVC] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LVD = @[Common.717.LVD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LST = @[Common.717.LST] + +Entities.gmod_subway_81-717_mvm.Buttons.Block3.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-717_mvm.Buttons.Block3.!BCPressure = @[Common.ALL.BCPressure] + +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] + +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_UNchToggle = @[Common.ALL.UNCh] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_ZSToggle = @[Common.ALL.ES] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_RadioToggle = @[Common.ALL.R_Radio] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.1:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.1:KVTRSet = @[Common.ARS.KVTR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.2:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.2:KVTRSet = @[Common.ARS.KVTR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!L1Light = @[Common.717.VL1] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.V13Toggle = @[Common.717.V13] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VUD1Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!GreenRPLight = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!AVULight = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!LKVPLight = @[Common.717.KVP] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!SPLight = @[Common.717.LSP] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OtklBVSet = @[Common.717.OtklBV] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OtklBVKToggle = @[Common.717.OtklBVK] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.V11Toggle = @[Common.717.V11] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.V12Toggle = @[Common.717.V12] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ARSRToggle = @[Common.ALL.ARSR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ALSFreqToggle = @[Common.ARS.Freq] @[Common.ARS.FreqU] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.L_3Toggle = @[Common.ALL.PanelLights] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VPToggle = @[Common.ARS.VP] + +Entities.gmod_subway_81-717_mvm.Buttons.Block7.L_4Toggle = @[Common.ALL.VF] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.VADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KRPSet = @[Common.ALL.KRP] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KAHSet = @[Common.ALL.KAH] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KAHKToggle = @[Common.ALL.KAHK] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.!PNT = @[Common.ALL.BrT] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.!PNW = @[Common.ALL.BrW] + +Entities.gmod_subway_81-717_mvm.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-717_mvm.Buttons.HVMeters.!HighVoltage = @[Common.ALL.HighVoltage] + +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:R_Program2HSet = @[Common.ALL.Program2] + +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_C.SAB1Toggle = @[Common.BZOS.On] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_C.!VH1 = @[Common.BZOS.VH1] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_C.!VH2 = @[Common.BZOS.VH2] + +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_R.1:SAB1Toggle = @[Common.BZOS.On] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_R.1:!VH1 = @[Common.BZOS.VH1] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_R.1:!VH2 = @[Common.BZOS.VH2] + + +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_C.PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_C.PVK+ = @[Common.CabVent.PVK+] +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_R.1:PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_R.1:PVK+ = @[Common.CabVent.PVK+] + +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA23 = @[Common.IGLA.Button23] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA3Set = @[Common.IGLA.Button3] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA4Set = @[Common.IGLA.Button4] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.!IGLAFire = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA23 = @[Common.IGLA.Button23] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA3Set = @[Common.IGLA.Button3] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA4Set = @[Common.IGLA.Button4] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:!IGLAFire = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:!IGLAErr = @[Common.IGLA.IGLAErr] + +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A26Toggle = @[Common.717.A26] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AR63Toggle = @[Common.717.AR63] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AS1Toggle = @[Common.717.AS1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV3Toggle = @[Common.717.AV3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV2Toggle = @[Common.717.AV2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV4Toggle = @[Common.717.AV4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV5Toggle = @[Common.717.AV5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV6Toggle = @[Common.717.AV6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A9Toggle = @[Common.717.A9] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A43Toggle = @[Common.717.A43] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A76Toggle = @[Common.717.A76] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A60Toggle = @[Common.717.A60] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A58Toggle = @[Common.717.A58] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A59Toggle = @[Common.717.A59] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A26Toggle = @[Common.717.A26] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:AR63Toggle = @[Common.717.AR63] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:AS1Toggle = @[Common.717.AS1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A76Toggle = @[Common.717.A76] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A43Toggle = @[Common.717.A43] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A28Toggle = @[Common.717.A28] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AISToggle = @[Common.717.AIS] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A80Toggle = @[Common.717.A80] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV2Toggle = @[Common.717.AV2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV3Toggle = @[Common.717.AV3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV4Toggle = @[Common.717.AV4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV5Toggle = @[Common.717.AV5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV6Toggle = @[Common.717.AV6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A81Toggle = @[Common.717.A81] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A9Toggle = @[Common.717.A9] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A68Toggle = @[Common.717.A68] + +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-717_mvm.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-717_mvm.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle = @[Common.ALL.DriverValveDisconnect] +Entities.gmod_subway_81-717_mvm.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-717_mvm.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-717_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] + +Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-717_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_mvm.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-717_mvm.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-717_mvm.Buttons.OtsekDoor1.OtsekDoor1 = @[Common.ALL.OtsekDoor1] +Entities.gmod_subway_81-717_mvm.Buttons.OtsekDoor2.OtsekDoor2 = @[Common.ALL.OtsekDoor2] +Entities.gmod_subway_81-717_mvm.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_81-717_mvm.Buttons.EPVDisconnect.EPKToggle = @[Common.ALL.EPV] +Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] + + +#gmod_subway_81-717_lvz +#Buttons: +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:RC2Toggle = @[Common.717.RC2] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:RC2Toggle = @[Common.717.RC2] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:VAUToggle = @[Common.717.VAU] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:VAUToggle = @[Common.717.VAU] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:VRDToggle = @[Common.ARS.VRD] + +Entities.gmod_subway_81-717_lvz.Buttons.VRD_C.1:VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-717_lvz.Buttons.SOSD_C.1:VSOSDToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-717_lvz.Buttons.SOSD_R.2:VSOSDToggle = @[Common.ALL.VSOSD] + +Entities.gmod_subway_81-717_lvz.Buttons.Block1.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.ARS13Set = @[Common.717.ARS13V] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.Radio13Set = @[Common.717.Radio13V] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSOch = @[Common.ARS.N4] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLSD1 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLSD2 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLVD = @[Common.ALL.L1w] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLHRK = @[Common.ALL.L2w] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLST = @[Common.ALL.L6w] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLRD = @[Common.ARS.LRD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampRP = @[Common.ALL.RP] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLSN = @[Common.ALL.SN] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampDV = @[Common.717.LampDV] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!SpeedFact1 = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!SpeedFact2 = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL20 = @[Common.717.ARSL20] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL40 = @[Common.717.ARSL40] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL60 = @[Common.717.ARSL60] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL70 = @[Common.717.ARSL70] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL80 = @[Common.717.ARSL80] + +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!NMPressureLow2 = @[Commom.NMnUAVA.NMPressureLow] +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!UAVATriggered2 = @[Commom.NMnUAVA.UAVATriggered] + +Entities.gmod_subway_81-717_lvz.Buttons.USS1.!NMPressureLow = @[Commom.NMnUAVA.NMPressureLow] +Entities.gmod_subway_81-717_lvz.Buttons.USS1.!UAVATriggered = @[Commom.NMnUAVA.UAVATriggered] + +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OK16 = @[Common.PUAV.K16] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OLRS = @[Common.PUAV.RS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OKI1 = @[Common.PUAV.KI1] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OKI2 = @[Common.PUAV.KI2] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OOS = @[Common.PUAV.OS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OAVT = @[Common.PUAV.AVT] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:KHSet = @[Common.717.KH] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:KSZDSet = @[Common.717.KSZD] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:VAVToggle = @[Common.717.VAV] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:VZPToggle = @[Common.ALL.VZP] + +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!K16 = @[Common.PUAV.K16] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!OS = @[Common.PUAV.OS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!AVT = @[Common.PUAV.AVT] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!LRS = @[Common.PUAV.RS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!KI1 = @[Common.PUAV.KI1] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!KI2 = @[Common.PUAV.KI2] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARSOch = @[Common.ARS.N4] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.KHSet = @[Common.717.KH] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.KSZDSet = @[Common.717.KSZD] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.VAVToggle = @[Common.717.VAV] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.VZPToggle = @[Common.ALL.VZP] + +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMPSet = @[Common.717.PAM]: @[Common.PA.P] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMFSet = @[Common.717.PAM]: @[Common.PA.F] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMUpSet = @[Common.717.PAM]: @[Common.PA.Up] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMMSet = @[Common.717.PAM]: @[Common.PA.M] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMLeftSet = @[Common.717.PAM]: @[Common.PA.Left] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMDownSet = @[Common.717.PAM]: @[Common.PA.Down] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMRightSet = @[Common.717.PAM]: @[Common.PA.Right] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM1Set = @[Common.717.PAM]: 1 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM2Set = @[Common.717.PAM]: 2 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM3Set = @[Common.717.PAM]: 3 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM4Set = @[Common.717.PAM]: 4 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM5Set = @[Common.717.PAM]: 5 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM6Set = @[Common.717.PAM]: 6 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM7Set = @[Common.717.PAM]: 7 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM8Set = @[Common.717.PAM]: 8 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM9Set = @[Common.717.PAM]: 9 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMEscSet = @[Common.717.PAM]: @[Common.PA.Esc] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM0Set = @[Common.717.PAM]: 0 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMEnterSet = @[Common.717.PAM]: @[Common.PA.Enter] +Entities.gmod_subway_81-717_lvz.Buttons.PAM.2:KSZDSet = @[Common.717.KSZD] +Entities.gmod_subway_81-717_lvz.Buttons.PAM.2:VZPToggle = @[Common.ALL.VZP] + +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:R_UPOToggle = @[Common.ALL.UPO] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!OhSigLamp1 = @[Common.BZOS.Engaged] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:VUD1Toggle = @[Common.717.VZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!GreenRPLight1 = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!AVULight1 = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!LKVPLight1 = @[Common.717.KVP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!SPLight1 = @[Common.717.LSP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:L_3Toggle = @[Common.ALL.PanelLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:OhrSigToggle = @[Common.BZOS.On] + +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:R_UPOToggle = @[Common.ALL.UPO] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!OhSigLamp2 = @[Common.BZOS.Engaged] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VUD1Toggle = @[Common.717.VZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!KDLLight2 = @[Common.ALL.KDLL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!KDLRLight2 = @[Common.ALL.KDLL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!GreenRPLight2 = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!RZPLight2 = @[Common.717.RZPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!LKVPLight2 = @[Common.717.KVP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:OhrSigToggle = @[Common.BZOS.On] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VPAOnSet = @[Common.717.VPAOn] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VPAOffSet = @[Common.717.VPAOff] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!AVULight2 = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:L_3Toggle = @[Common.ALL.PanelLights] + +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!RZPLight1 = @[Common.717.RZPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:R_UPOToggle = @[Common.ALL.UPO] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!SPLight3 = @[Common.717.LSP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!AVULight3 = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:VUD1Toggle = @[Common.717.VZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!GreenRPLight3 = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!RZPLight3 = @[Common.717.RZPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!LKVPLight3 = @[Common.717.KVP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.1:VPAOnSet = @[Common.717.VPAOn] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.1:VPAOffSet = @[Common.717.VPAOff] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:OVTToggle = @[Common.ALL.VOVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:L_3Toggle = @[Common.ALL.PanelLights] + +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:L_4Toggle = @[Common.ALL.VF] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:VADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:KRPSet = @[Common.ALL.KRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:RezMKSet = @[Common.ALL.RMK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.!1:PNT = @[Common.ALL.BrT] + +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:L_4Toggle = @[Common.ALL.VF] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:VADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:KRPSet = @[Common.ALL.KRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:RezMKSet = @[Common.ALL.RMK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.!KDPLight2 = @[Common.ALL.KDPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.!2:PNT = @[Common.ALL.BrT] + +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_C.VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_C.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_C.VOPDSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_R.1:VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_R.1:VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_R.1:VOPDSet = @[Common.ALL.KDPH] + +Entities.gmod_subway_81-717_lvz.Buttons.CabVent_C.PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-717_lvz.Buttons.CabVent_C.PVK+ = @[Common.CabVent.PVK+] + +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_N.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_N.!HighVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_O.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_O.!HighVoltage = @[Common.ALL.HighVoltage] + +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A26Toggle = @[Common.717.A26] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AR63Toggle = @[Common.717.AR63] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AS1Toggle = @[Common.717.AS1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AISToggle = @[Common.717.AIS] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AV3Toggle = @[Common.717.AV3S] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A58Toggle = @[Common.717.A58PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A59Toggle = @[Common.717.A59PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A61Toggle = @[Common.717.A61PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:P:A58Toggle = @[Common.717.A58PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:P:A59Toggle = @[Common.717.A59PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:P:A61Toggle = @[Common.717.A61PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A9Toggle = @[Common.717.A9] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A06Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A43Toggle = @[Common.717.A432] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A76Toggle = @[Common.717.A76] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A60Toggle = @[Common.717.A60] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A58Toggle = @[Common.717.A58PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A59Toggle = @[Common.717.A59PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A61Toggle = @[Common.717.A61PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.P:A58Toggle = @[Common.717.A58PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.P:A59Toggle = @[Common.717.A59PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.P:A61Toggle = @[Common.717.A61PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A78Toggle = @[Common.717.A78]@[Common.ALL.Unsused2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.ABKToggle = @[Common.717.ABK]@[Common.ALL.Unsused2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A43Toggle = @[Common.717.A432] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A65Toggle = @[Common.717.A65] + +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A28Toggle = @[Common.717.A28] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.AISToggle = @[Common.717.AIS] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.AV3Toggle = @[Common.717.AV3S] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A60Toggle = @[Common.717.A60] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A9Toggle = @[Common.717.A9] + +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber3+ = @[Common.ALL.RouteNumber3+] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber3- = @[Common.ALL.RouteNumber3-] + +Entities.gmod_subway_81-717_lvz.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle = @[Common.ALL.DriverValveDisconnect] +Entities.gmod_subway_81-717_lvz.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-717_lvz.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-717_lvz.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-717_lvz.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-717_lvz.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] + +Entities.gmod_subway_81-717_lvz.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-717_lvz.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-717_lvz.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_lvz.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_lvz.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-717_lvz.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-717_lvz.Buttons.OtsekDoor1.OtsekDoor1 = @[Common.ALL.OtsekDoor1] +Entities.gmod_subway_81-717_lvz.Buttons.OtsekDoor2.OtsekDoor2 = @[Common.ALL.OtsekDoor2] +Entities.gmod_subway_81-717_lvz.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_81-717_lvz.Buttons.EPVDisconnect.EPKToggle = @[Common.ALL.EPV] +Entities.gmod_subway_81-717_lvz.Buttons.ParkingBrake.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] + +#gmod_subway_81-714_mvm +Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-714_mvm.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-714_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-714_mvm.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-714_mvm.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-714_mvm.Buttons.couch_cap_o.CouchCap = @[Common.ALL.CouchCap] +Entities.gmod_subway_81-714_mvm.Buttons.couch_cap.CouchCap = @[Common.ALL.CouchCap] + +Entities.gmod_subway_81-714_mvm.Buttons.Battery.VBToggle = @[Common.ALL.VB] + +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV2Toggle = @[Common.717.AV2] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV3Toggle = @[Common.717.AV3] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV4Toggle = @[Common.717.AV4] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV5Toggle = @[Common.717.AV5] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A81Toggle = @[Common.717.A81] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV6Toggle = @[Common.717.AV6] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A80Toggle = @[Common.717.A80] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A18Toggle = @[Common.717.A18] + +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A23Toggle = @[Common.717.A23] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-714_mvm.Buttons.VU.A84Toggle = @[Common.ALL.VU] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.!RZPLight = @[Common.717.RZPL] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.OtklBVSet = @[Common.717.OtklBV] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.StartSet = @[Common.714.Start] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.RV- = @[Common.714.RV] @[Common.ALL.CCW] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.RV+ = @[Common.714.RV] @[Common.ALL.CW] +Entities.gmod_subway_81-714_mvm.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-714_mvm.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-714_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] + + +#gmod_subway_81-714_lvz +Entities.gmod_subway_81-714_lvz.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-714_lvz.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-714_lvz.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-714_lvz.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-714_lvz.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-714_lvz.Buttons.couch_cap_o.CouchCap = @[Common.ALL.CouchCap] +Entities.gmod_subway_81-714_lvz.Buttons.couch_cap.CouchCap = @[Common.ALL.CouchCap] + +Entities.gmod_subway_81-714_lvz.Buttons.Battery.VBToggle = @[Common.ALL.VB] + +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A81Toggle = @[Common.717.A81] +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A80Toggle = @[Common.717.A80] +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A18Toggle = @[Common.717.A18] + +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A23Toggle = @[Common.717.A23] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-714_lvz.Buttons.VU.A84Toggle = @[Common.ALL.VU] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.!RZPLight = @[Common.717.RZPL] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.StartSet = @[Common.714.Start] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.RV- = @[Common.714.RV] @[Common.ALL.CCW] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.RV+ = @[Common.714.RV] @[Common.ALL.CW] +Entities.gmod_subway_81-714_lvz.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-714_lvz.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-714_lvz.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] + +#Spawner: +Entities.gmod_subway_81-717_mvm.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-717_mvm.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] + + +Entities.gmod_subway_81-717_mvm_custom.Spawner.Type.Name = @[Spawner.717.Type] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BodyType.Name = @[Spawner.717.BodyType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BodyType.1 = @[Spawner.717.MVM] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BodyType.2 = @[Spawner.717.LVZ] +Entities.gmod_subway_81-717_mvm_custom.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-717_mvm_custom.Spawner.MaskType.Name = @[Spawner.717.MaskType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.Cran.Name = @[Spawner.717.CranType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.Name = @[Spawner.717.LampType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.2 = @[Spawner.717.Lamp1] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.3 = @[Spawner.717.Lamp2] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.Name = @[Spawner.717.SeatType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.2 = @[Common.Spawner.Old] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.3 = @[Common.Spawner.New] +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.Name = @[Spawner.717.ARS] +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.2 = @[Common.Spawner.Type] 1 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.3 = @[Common.Spawner.Type] 2 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.4 = @[Common.Spawner.Type] 3 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.5 = @[Common.Spawner.Type] 4 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.6 = @[Common.Spawner.Type] 5 +Entities.gmod_subway_81-717_mvm_custom.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-717_mvm_custom.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-717_mvm_custom.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.Name = @[Spawner.717.RingType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.2 = @[Common.Spawner.Type] 1 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.3 = @[Common.Spawner.Type] 2 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.4 = @[Common.Spawner.Type] 3 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.5 = @[Common.Spawner.Type] 4 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.6 = @[Common.Spawner.Type] 5 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.7 = @[Common.Spawner.Type] 6 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.8 = @[Common.Spawner.Type] 7 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.9 = @[Common.Spawner.Type] 8 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.Name = @[Spawner.717.BPSNType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.2 = @[Common.Spawner.Type] 1 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.3 = @[Common.Spawner.Type] 2 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.4 = @[Common.Spawner.Type] 3 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.5 = @[Common.Spawner.Type] 4 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.6 = @[Common.Spawner.Type] 5 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.7 = @[Common.Spawner.Type] 6 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.8 = @[Common.Spawner.Type] 7 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.9 = @[Common.Spawner.Type] 8 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.10 = @[Common.Spawner.Type] 9 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.11 = @[Common.Spawner.Type] 10 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.12 = @[Common.Spawner.Type] 11 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.13 = @[Common.Spawner.Type] 12 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.14 = @[Common.Spawner.Type] 13 +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] + +#Spawner: +Entities.gmod_subway_81-717_lvz.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-717_lvz.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-717_lvz.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-717_lvz.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-717_lvz.Spawner.Type.Name = @[Spawner.Common.EType] +Entities.gmod_subway_81-717_lvz.Spawner.Type.1 = @[Spawner.717.Line2] +Entities.gmod_subway_81-717_lvz.Spawner.Type.2 = @[Spawner.717.Line4] +Entities.gmod_subway_81-717_lvz.Spawner.Type.3 = @[Spawner.717.Line5] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] diff --git a/lua/metrostroi_data/languages/it_718.lua b/lua/metrostroi_data/languages/it_718.lua new file mode 100644 index 0000000..a213aa2 --- /dev/null +++ b/lua/metrostroi_data/languages/it_718.lua @@ -0,0 +1,699 @@ +return [[ +#81-718 + +[it] + +#######Buttons########### +#Cameras +Train.718.BUP = BUP +Train.718.PPZ = PPZ +Train.718.VPU = VPU + +#Common +Common.718.SB4 = Verifica integrità dei circuiti +Common.718.SB5 = Trasferimento dei controlli (Emettitore sonoro) +Common.718.SB7K = copertura modalità di guida +Common.718.SB7 = Modalità di guida +Common.718.SB12 = Abilita unità interruttori automatici +Common.718.SB13 = Disabilita unità interruttori automatici +Common.718.SB15 = Abilita l'alimentazione del treno +Common.718.SB16 = Disabilita l'alimentazione del treno + +Common.718.VTPR = Interuttore modalità di rilascio corrente dai collettori +Common.718.RX1 = Guida d'emergenza 1 +Common.718.KAH2 = KAH: Pulsante di guida di emergenza per la guida senza ARS in modalità di guida d'emergenza +Common.718.RX2 = Guida d'emergenza 2 + +Common.718.SPULightStrength = Luminosità indicatori del cruscotto + +Common.718.Heat = Riscaldamento Cabina +Common.718.SBP22 = Test funzionamento dei circuiti +Common.718.KDPR = Apertura d'emergenza porte destra +Common.718.KDLR = Apertura d'emergenza porte sinistra +Common.718.UOS = UOS: Limitatore di velocità (guida senza EPV / EPK) + +Common.718.KES = KES: Controllo delle comunicazioni d'emergenza abilitato +Common.718.CUV = CUV: Indicatore di non inclusione del vagone CUV +Common.718.AIP = AIP: Indicatore d'emergenza incendio (fuoco) +Common.718.RIP = RIP: Modalità standby emergenza incendio +Common.718.VS1 = VS1: Primo gruppo di ventilazione disabilitato +Common.718.VS2 = VS2: Secondo gruppo di ventilazione disabilitato + +#Autobreakers +Common.718.SF51 = SF51: Alimentazione principale ARS +Common.718.SF52 = SF52: Alimentazione d'emergenza ARS +Common.718.SF53 = SF53: Circuiti frenanti ARS +Common.718.SF60 = SF60: 12V ARS +Common.718.SF61 = SF61: 50V ARS(FMM1) +Common.718.SF77 = SF77: Guida di emergenza dal controllo principale +Common.718.SF78 = SF78: Controllo guida di emergenza +Common.718.SF40 = SF40: Valvola pneumatica â„–2 da ZPT +Common.718.SF41 = SF41: Fari frontali +Common.718.SF8 = SF8: Controllo dell porte +Common.718.SF11 = SF11: Controllo del secondo gruppo di ventilazione +Common.718.SF10 = SF10: Controllo del primo gruppo di ventilazione +Common.718.SF7 = SF7: BBE, compressore +Common.718.SF50 = SF50: Tachimetro +Common.718.SF76 = SF76: Alarme incendio +Common.718.SF73 = SF73: Lubrificazione flangia +Common.718.SF3 = SF3: Alimentazione vagoni, CUV +Common.718.SF71 = SF71: Citofono di emergenza +Common.718.SF63 = SF63: Radiostatione +Common.718.SF54 = SF54: Annunciatore 50A +Common.718.SF65 = SF65: Ventilazione cabina +Common.718.SF55 = SF55: SOT-3 +Common.718.SF9 = SF9: Controllo d'emergenza del treno +Common.718.SF6 = SF6: Controllo principale del treno +Common.718.SF5 = SF5: Controllo del BKCU +Common.718.SF2 = SF2: Alimentazione treno +Common.718.SF4 = SF4: Alimentazioni BUV, PTTI, BCKA +Common.718.SF27 = SF27: Alimentazione BVA +Common.718.SF46 = SF46: Controllo BVA +Common.718.SF12 = SF12: Abilitazione BBE +Common.718.SF13 = SF13: Disabilitazione BBE +Common.718.SF45 = SF45: Controllo contatto illuminazione BBE +Common.718.SF16 = SF16: Controllo dell'illuminazione del vagone +Common.718.SF44 = SF44: Alimentazione illuminazione del vagone +Common.718.SF43 = SF43: Illuminazione del vagone di emergenza +Common.718.SF14 = SF14: Alimentazione del contatto dei circuiti di controllo +Common.718.SF15 = SF15: Circuito di controllo contatto di emergenza +Common.718.SF25 = SF25: Controllo di rilascio corrente dei collettori +Common.718.SF72 = SF72: Indicatore freno di parcheggio +Common.718.SF56 = SF56: Controllo compressore +Common.718.SF29 = SF29: Valvola pneumatica â„–1 +Common.718.SF26 = SF26: Valvola pneumatica â„–2 +Common.718.SF42 = SF42: Subexciter +Common.718.SF18 = SF18: Apertura delle porte a sinistra +Common.718.SF20 = SF20: Apertura delle porte a destra +Common.718.SF17 = SF17: Chiusura porte +Common.718.SF19 = SF19: Chiusura porte d'emergenza +Common.718.SF21 = SF21: Controllo compressore principale +Common.718.SF22 = SF22: Controllo d'emergenza del compressore +Common.718.SF34 = SF34: Alimentazione primo gruppo di ventilazione +Common.718.SF35 = SF35: Alimentazione secondo gruppo di ventilazione +Common.718.SF23 = SF23: Contatto primo gruppo di ventilazione +Common.718.SF24 = SF24: Contatto secondo gruppo di ventilazione + +#Names +Common.718.MVSU = BUP MVSU +Common.718.MLUP = BUP MLUP +Common.718.MUVS1 = BUP MUVS1 +Common.718.MUVS2 = BUP MUVS2 +Common.718.MP = BUP MP +Common.718.MS = BUP MS + +#A lot of indicators +Common.718.MVSUARSX = @[Common.718.MVSU]: Modalità di guida permessa da BKBD +Common.718.MVSUARST = @[Common.718.MVSU]: Modalità freno da BKBD +Common.718.MVSUARSX3 = @[Common.718.MVSU]: Modalità X3 tramite unità di controllo automatico del treno +Common.718.MVSUARSX2 = @[Common.718.MVSU]: Modalità X2 tramite unità di controllo automatico del treno +Common.718.MVSUARSX1 = @[Common.718.MVSU]: Modalità X1 tramite unità di controllo automatico del treno +Common.718.MVSUARS0 = @[Common.718.MVSU]: Modalità 0 tramite unità di controllo automatico del treno +Common.718.MVSUARST1 = @[Common.718.MVSU]: Modalità T1 tramite unità di controllo automatico del treno +Common.718.MVSUARST2 = @[Common.718.MVSU]: Modalità T2 tramite unità di controllo automatico del treno +Common.718.MVSUARST3 = @[Common.718.MVSU]: Modalità T3 tramite unità di controllo automatico del treno +Common.718.MVSUKVX3 = @[Common.718.MVSU]: Modalità X3 da controller +Common.718.MVSUKVX2 = @[Common.718.MVSU]: Modalità X2 da controller +Common.718.MVSUKVX1 = @[Common.718.MVSU]: Modalità X1 da controller +Common.718.MVSUKV0 = @[Common.718.MVSU]: Modalità 0 da controller +Common.718.MVSUKVT1 = @[Common.718.MVSU]: Modalità T1 da controller +Common.718.MVSUKVT2 = @[Common.718.MVSU]: Modalità T2 da controller +Common.718.MVSUKVT3 = @[Common.718.MVSU]: Modalità T3 da controller +Common.718.MVSUKDV = @[Common.718.MVSU]: Controllo stato delle porte +Common.718.MVSUBDV = @[Common.718.MVSU]: Modalità di blocco controllo delle porte +Common.718.MVSUPB = @[Common.718.MVSU]: PB o ARS è abilitato +Common.718.MVSUARS = @[Common.718.MVSU]: PB o ARS è disabilitato +Common.718.MVSUAVT = @[Common.718.MVSU]: Freno di emergenza by BKBD +Common.718.MVSUKVV = @[Common.718.MVSU]: Entra modalità "Avanti" +Common.718.MVSUKVN = @[Common.718.MVSU]: Entra modalità "Indietro" +Common.718.MVSUPVU = @[Common.718.MVSU]: I circuiti sono disattivati da PVU (UAVA) +Common.718.MVSURPB = @[Common.718.MVSU]: I circuiti sono disattivati dal relè del pedale di attenzione +Common.718.MVSUROT = @[Common.718.MVSU]: I circuiti sono disattivati dal relè di disabilitazione della trazione (ARS) +Common.718.MVSUSOT = @[Common.718.MVSU]: I circuiti sono disattivati tramite il segnale di frenata (EPV) +Common.718.MLUPVP = @[Common.718.MLUP]: Modalità "Avanti" +Common.718.MLUPNZ = @[Common.718.MLUP]: Modalità "Indietro" +Common.718.MLUPBUP = @[Common.718.MLUP]: Blocco BUP +Common.718.MLUPV0 = @[Common.718.MLUP]: Velocità zero (valvola pneumatica â„–1) +Common.718.MLUPKU = @[Common.718.MLUP]: Malfunzionamento del controller +Common.718.MLUPBAV = @[Common.718.MLUP]: Malfunzionamento della centralina automatica +Common.718.MLUPKR = @[Common.718.MLUP]: Malfunzionamento del controller invertitore +Common.718.MLUPARS = @[Common.718.MLUP]: Malfunzionamento ARS +Common.718.MUVS1VP = @[Common.718.MUVS1]: Uscita modalità "Avanti" +Common.718.MUVS1NZ = @[Common.718.MUVS1]: Uscita modalità "Indietro" +Common.718.MUVS1X = @[Common.718.MUVS1]: Uscita modalità "Guida" +Common.718.MUVS1T = @[Common.718.MUVS1]: Uscita modalità "Freno" +Common.718.MUVS1U1 = @[Common.718.MUVS1]: Uscita in modalità "corrente nominale 1" +Common.718.MUVS1U2 = @[Common.718.MUVS1]: Uscita in modalità "corrente nominale 2" +Common.718.MUVS1BAV = @[Common.718.MUVS1]: Uscita blocco BAV +Common.718.MUVS1BUP = @[Common.718.MUVS1]: Uscita di blocco BUV +Common.718.MUVS20 = @[Common.718.MUVS2]: Uscita modalità "run-out" +Common.718.MUVS2ZPT = @[Common.718.MUVS2]: Valvola pneumatica â„–2 +Common.718.MPMP = @[Common.718.MP]: Operazione normale +Common.718.MSMS = @[Common.718.MS]: Operazione normale + +Common.718.MPS = BUV MPS +Common.718.MALP1 = BUV MALP1 +Common.718.MVD = BUV MVD +Common.718.MALP2 = BUV MALP2 +Common.718.MGR = BUV MGR +Common.718.MLU = BUV MLU +Common.718.MUVK = BUV MUVK +Common.718.MIV = BUV MIV +Common.718.MUVK2 = BUV MUVK2 +Common.718.MPSPROV = @[Common.718.MPS]: "Controllo dell'operazione" +Common.718.MPSAVR = @[Common.718.MPS]: "Le modalità guida e freno sono disabilitate da AVT" +Common.718.MPSTARS = @[Common.718.MPS]: "BKBD freno ARS " +Common.718.MPSX = @[Common.718.MPS]: "Segnale modalità di guida" +Common.718.MPSNZ = @[Common.718.MPS]: "Indietro" +Common.718.MPSNZR = @[Common.718.MPS]: "Emergenza indietro" +Common.718.MPSVPR = @[Common.718.MPS]: "Emergenza avanti" +Common.718.MPSPROV0 = @[Common.718.MPS]: "Controllo dell'operazione" +Common.718.MPSSK = @[Common.718.MPS]: "Velocità" #IDK what is this, no info (@Gleb) +Common.718.MPST = @[Common.718.MPS]: ""Segnale modalità freno" +Common.718.MPSXR = @[Common.718.MPS]: "Guida d'emergenza 1" +Common.718.MPSU1 = @[Common.718.MPS]: "Setpoint corrente 1" +Common.718.MPSU2 = @[Common.718.MPS]: "Setpoint corrente 2" +Common.718.MPSVP = @[Common.718.MPS]: "Avanti" +Common.718.MPSVZ = @[Common.718.MPS]: "Resetta protezione" +Common.718.MPSXM = @[Common.718.MPS]: "@[Common.718.SB7]" +Common.718.MPSU1R = @[Common.718.MPS]: "Guida d'emergenza 2" + +Common.718.MALP1MZK = @[Common.718.MALP1]: Blocco a tiristore istantaneo +Common.718.MALP1FM = @[Common.718.MALP1]: Protezione sovratensioni (superiore a 1000 V) +Common.718.MALP1400 = @[Common.718.MALP1]: 400V sul terzo binario, guida disponibile +Common.718.MALP150 = @[Common.718.MALP1]: Disponibilità corrente del primo gruppo di armature +Common.718.MALP1DIF = @[Common.718.MALP1]: Differenza di corrente gruppo primario e secondario +Common.718.MALP1650 = @[Common.718.MALP1]: La corrente del primo gruppo di armature è superiore a 650A +Common.718.MALP10 = @[Common.718.MALP1]: Nessuna corrente del primo gruppo di armature +Common.718.MALP1ARS = @[Common.718.MALP1]: Errore avvio frequenza +Common.718.MALP1ITA = @[Common.718.MALP1]: Rottura del tiristore del freno di gruppo primario > 100A +Common.718.MALP1TR = @[Common.718.MALP1]: Corrente del reostato> 100 A nel primo gruppo +Common.718.MALP1SN = @[Common.718.MALP1]: Alimentazione circuiti non disponibile +Common.718.MALP1VN = @[Common.718.MALP1]: Malfunzionamento ventole + + +Common.718.MVDOTK = @[Common.718.MVD]: Malfunzionamento della modalità guida / freno +Common.718.MVDRP = @[Common.718.MVD]: Azionamento RP + +Common.718.MALP2MSU = @[Common.718.MALP1]: Ripristino del setpoint corrente istantaneo +Common.718.MALP2800 = @[Common.718.MALP1]: Sono disponibili 800 V sul terzo binario +Common.718.MALP2975 = @[Common.718.MALP1]: Tensione massima sul terzo binario +Common.718.MALP250 = @[Common.718.MALP1]: Disponibilità corrente nel secondo gruppo di armature +Common.718.MALP2650 = @[Common.718.MALP1]: La corrente del secondo gruppo di armatura è superiore a 650A +Common.718.MALP20 = @[Common.718.MALP1]: Nessuna corrente dal gruppo della seconda armatura +Common.718.MALP2BV = @[Common.718.MALP1]: Azionamento BV +Common.718.MALP2ITB = @[Common.718.MALP1]: Rottura del tiristore del freno di gruppo secondario > 100A + +Common.718.MGRTP1 = @[Common.718.MGR]: Premendo corrente dei collettore gruppo primario +Common.718.MGRTP3 = @[Common.718.MGR]: Premendo corrente dei collettore gruppo terzo +Common.718.MGRKHA = @[Common.718.MGR]: Contatti di guida gruppo primario abilitati +Common.718.MGRKTA = @[Common.718.MGR]: Contatti del freno gruppo primario abilitati +Common.718.MGRTP2 = @[Common.718.MGR]: Premendo corrente dei collettore gruppo secondo +Common.718.MGRTP4 = @[Common.718.MGR]: Premendo corrente dei collettore gruppo quarto +Common.718.MGRKHB = @[Common.718.MGR]: Contatti giuda secondo gruppo abilitati +Common.718.MGRKTB = @[Common.718.MGR]: Contatti freno secondo gruppo abilitati +Common.718.MGRKRV = @[Common.718.MGR]: Invertitore impostato avanti #reverse switched to forward +Common.718.MGRNV = @[Common.718.MGR]: Malfunzionamento ventole PTTI +Common.718.MGRBV = @[Common.718.MGR]: Armato BV +Common.718.MGRLK = @[Common.718.MGR]: Contatti linea sono abilitati +Common.718.MGRKRN = @[Common.718.MGR]: Invertitore impostato all'indietro #reverse switched to backward + +Common.718.MLUAKT = @[Common.718.MLU]: Comando freno +Common.718.MLUAXH = @[Common.718.MLU]: Comando guida +Common.718.MLUAVP = @[Common.718.MLU]: Abilita comando invertitore su avanti +Common.718.MLUANZ = @[Common.718.MLU]: Abilita comando invertitore su retromarcia +Common.718.MLUASS = @[Common.718.MLU]: Circuit is assembled +Common.718.MLUAPV = @[Common.718.MLU]: Abilita comando del subexciter +Common.718.MLUALK = @[Common.718.MLU]: Abilita contatto linea di comando + +Common.718.MUVK1V1 = @[Common.718.MUVK]: Contollo bobina valvola pneumatica â„–1 +Common.718.MUVK1KT = @[Common.718.MUVK]: Controllo contatti freno +Common.718.MUVK1KH = @[Common.718.MUVK]: Controllo dei contatti di guida +Common.718.MUVK1LK = @[Common.718.MUVK]: Controllo contatto di linea +Common.718.MUVK1PV = @[Common.718.MUVK]: Controllo di Subexciter +Common.718.MUVK1NZ = @[Common.718.MUVK]: Controllo invertitore retromarcia +Common.718.MUVK1SN = @[Common.718.MUVK]: Il circuito di alimentazione del vagone non è funzionante + +Common.718.MIV33 = @[Common.718.MIV]: L'avvio della frequenza è terminato +Common.718.MIVV1 = @[Common.718.MIV]: Valvola pneumatica â„–1 +Common.718.MIVSMA = @[Common.718.MIV]: Massimo primo segnale di corrente del gruppo di setpoint +Common.718.MIVSMB = @[Common.718.MIV]: Massimo secondo segnale di corrente del gruppo di setpoint + +Common.718.MUVK2RTM = @[Common.718.MUVK2]: Controllo del relè di corrente minima +Common.718.MUVK2RKT = @[Common.718.MUVK2]: Controllo del relè di controllo del freno +Common.718.MUVK2RP = @[Common.718.MUVK2]: Attuazione protezione +Common.718.MUVK2OTK = @[Common.718.MUVK2]: Malfunzionamento del vagone +Common.718.MUVK275 = @[Common.718.MUVK2]: Alimentazione BUV d'emergenza +Common.718.MUVK2VP = @[Common.718.MUVK2]: Controllo invertitore avanti + + +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF51Toggle = @[Common.718.SF51] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF52Toggle = @[Common.718.SF52] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF53Toggle = @[Common.718.SF53] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF60Toggle = @[Common.718.SF60] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF61Toggle = @[Common.718.SF61] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF77Toggle = @[Common.718.SF77] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF78Toggle = @[Common.718.SF78] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF40Toggle = @[Common.718.SF40] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF41Toggle = @[Common.718.SF41] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF8Toggle = @[Common.718.SF8] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF11Toggle = @[Common.718.SF11] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF10Toggle = @[Common.718.SF10] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF7Toggle = @[Common.718.SF7] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF50Toggle = @[Common.718.SF50] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF76Toggle = @[Common.718.SF76] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF73Toggle = @[Common.718.SF73] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF3Toggle = @[Common.718.SF3] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF71Toggle = @[Common.718.SF71] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF63Toggle = @[Common.718.SF63] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF54Toggle = @[Common.718.SF54] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF65Toggle = @[Common.718.SF65] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF55Toggle = @[Common.718.SF55] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF9Toggle = @[Common.718.SF9] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF6Toggle = @[Common.718.SF6] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF5Toggle = @[Common.718.SF5] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF2Toggle = @[Common.718.SF2] + +Entities.gmod_subway_81-718.Buttons.Main.SA5Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-718.Buttons.Main.SB3Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-718.Buttons.Main.SA7Toggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-718.Buttons.Main.SB1Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-718.Buttons.Main.SB2Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-718.Buttons.Main.SA8Toggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-718.Buttons.Main.SB4Set = @[Common.718.SB4] +Entities.gmod_subway_81-718.Buttons.Main.SB5Set = @[Common.718.SB5] +Entities.gmod_subway_81-718.Buttons.Main.SA9Toggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-718.Buttons.Main.SA13Toggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-718.Buttons.Main.SA14Toggle = @[Common.ALL.ARSR] +Entities.gmod_subway_81-718.Buttons.Main.SA15Toggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-718.Buttons.Main.SA2Toggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-718.Buttons.Main.SB6KToggle = @[Common.ALL.KAHK] +Entities.gmod_subway_81-718.Buttons.Main.SB6Set = @[Common.ALL.KAH] +Entities.gmod_subway_81-718.Buttons.Main.SB7KToggle = @[Common.718.SB7K] +Entities.gmod_subway_81-718.Buttons.Main.SB7Set = @[Common.718.SB7] +Entities.gmod_subway_81-718.Buttons.Main.SB8Set = @[Common.ARS.KVTR] +Entities.gmod_subway_81-718.Buttons.Main.SB10Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-718.Buttons.Main.SB9Set = @[Common.ARS.KVT] +Entities.gmod_subway_81-718.Buttons.Main.SB11Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-718.Buttons.Main.SA16Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-718.Buttons.Main.SB12Set = @[Common.718.SB12] +Entities.gmod_subway_81-718.Buttons.Main.SB13Set = @[Common.718.SB13] +Entities.gmod_subway_81-718.Buttons.Main.SB14Set = @[Common.ALL.RMK] +Entities.gmod_subway_81-718.Buttons.Main.SB15Set = @[Common.718.SB15] +Entities.gmod_subway_81-718.Buttons.Main.SB16Set = @[Common.718.SB16] + + +Entities.gmod_subway_81-718.Buttons.Battery.RCToggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-718.Buttons.Battery.VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-718.Buttons.Battery.VTPR- = @[Common.718.VTPR] @[Common.ALL.CCW] +Entities.gmod_subway_81-718.Buttons.Battery.VTPR+ = @[Common.718.VTPR] @[Common.ALL.CW] + + +Entities.gmod_subway_81-718.Buttons.KR.SBR14Set = @[Common.718.RX1] +Entities.gmod_subway_81-718.Buttons.KR.SBR16Set = @[Common.718.KAH2] +Entities.gmod_subway_81-718.Buttons.KR.SBR15Set = @[Common.718.RX2] + + +Entities.gmod_subway_81-718.Buttons.VPU.SAP8Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-718.Buttons.VPU.SAP13Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-718.Buttons.VPU.SAP36Toggle = @[Common.ALL.ES] +Entities.gmod_subway_81-718.Buttons.VPU.SAP12Toggle = @[Common.720.AppLights] +Entities.gmod_subway_81-718.Buttons.VPU.SAP11Toggle = @[Common.718.Heat] +Entities.gmod_subway_81-718.Buttons.VPU.SAP23Toggle = @[Common.ARS.VP] +Entities.gmod_subway_81-718.Buttons.VPU.SAP9Toggle = @[Common.720.Vent1] +Entities.gmod_subway_81-718.Buttons.VPU.SAP10Toggle = @[Common.720.Vent2] +Entities.gmod_subway_81-718.Buttons.VPU.SAP3Toggle = @[Common.ALL.UNCh] +Entities.gmod_subway_81-718.Buttons.VPU.SAP39Toggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-718.Buttons.VPU.SBP22Set = @[Common.718.SBP22] +Entities.gmod_subway_81-718.Buttons.VPU.SBP6Set = @[Common.718.KDPR] +Entities.gmod_subway_81-718.Buttons.VPU.SBP4Set = @[Common.718.KDLR] +Entities.gmod_subway_81-718.Buttons.VPU.SAP14Toggle = @[Common.ARS.Freq] @[Common.ARS.FreqU] +Entities.gmod_subway_81-718.Buttons.VPU.SAP26Toggle = @[Common.718.UOS] +Entities.gmod_subway_81-718.Buttons.VPU.SAP24Toggle = @[Common.ALL.VOVT] + +Entities.gmod_subway_81-718.Buttons.ARS.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-718.Buttons.ARS.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-718.Buttons.ARS.!SD = @[Common.ALL.LSD] +Entities.gmod_subway_81-718.Buttons.ARS.!KT = @[Common.ARS.KT] +Entities.gmod_subway_81-718.Buttons.ARS.!RS = @[Common.ARS.RS] +Entities.gmod_subway_81-718.Buttons.ARS.!SK = @[Common.ARS.LN] +Entities.gmod_subway_81-718.Buttons.ARS.!04 = @[Common.ARS.04] +Entities.gmod_subway_81-718.Buttons.ARS.!0 = @[Common.ARS.0] +Entities.gmod_subway_81-718.Buttons.ARS.!40 = @[Common.ARS.40] +Entities.gmod_subway_81-718.Buttons.ARS.!60 = @[Common.ARS.60] +Entities.gmod_subway_81-718.Buttons.ARS.!70 = @[Common.ARS.70] +Entities.gmod_subway_81-718.Buttons.ARS.!80 = @[Common.ARS.80] +Entities.gmod_subway_81-718.Buttons.ARS.!KES = @[Common.718.KES] +Entities.gmod_subway_81-718.Buttons.ARS.!ST = @[Common.ALL.BrT] +Entities.gmod_subway_81-718.Buttons.ARS.!CUV = @[Common.718.CUV] +Entities.gmod_subway_81-718.Buttons.ARS.!AVU = @[Common.ALL.LAVU] +Entities.gmod_subway_81-718.Buttons.ARS.!AIP = @[Common.718.AIP] +Entities.gmod_subway_81-718.Buttons.ARS.!RIP = @[Common.718.RIP] +Entities.gmod_subway_81-718.Buttons.ARS.!KVD = @[Common.ARS.VD] +Entities.gmod_subway_81-718.Buttons.ARS.!VS1 = @[Common.718.VS1] +Entities.gmod_subway_81-718.Buttons.ARS.!VS2 = @[Common.718.VS2] + +Entities.gmod_subway_81-718.Buttons.Right.SA1/1Toggle = @[Common.ALL.VF1] +Entities.gmod_subway_81-718.Buttons.Right.SA2/1Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-718.Buttons.Right.SA5/1Toggle = @[Common.718.SPULightStrength] +Entities.gmod_subway_81-718.Buttons.Right.SA4/1Toggle = @[Common.ALL.GaugeLights] + +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKDV = @[Common.718.MVSUKDV] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUBDV = @[Common.718.MVSUBDV] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUPB = @[Common.718.MVSUPB] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARS = @[Common.718.MVSUARS] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUAVT = @[Common.718.MVSUAVT] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVV = @[Common.718.MVSUKVV] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVN = @[Common.718.MVSUKVN] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVX3 = @[Common.718.MVSUKVX3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVX2 = @[Common.718.MVSUKVX2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVX1 = @[Common.718.MVSUKVX1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKV0 = @[Common.718.MVSUKV0] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVT1 = @[Common.718.MVSUKVT1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVT2 = @[Common.718.MVSUKVT2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVT3 = @[Common.718.MVSUKVT3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUPVU = @[Common.718.MVSUPVU] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSURPB = @[Common.718.MVSURPB] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX = @[Common.718.MVSUARSX] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST = @[Common.718.MVSUARST] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX3 = @[Common.718.MVSUARSX3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX2 = @[Common.718.MVSUARSX2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX1 = @[Common.718.MVSUARSX1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARS0 = @[Common.718.MVSUARS0] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST1 = @[Common.718.MVSUARST1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST2 = @[Common.718.MVSUARST2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST3 = @[Common.718.MVSUARST3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUROT = @[Common.718.MVSUROT] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUSOT = @[Common.718.MVSUSOT] + +Entities.gmod_subway_81-718.Buttons.BUP_MUVS2.MUVS20 = @[Common.718.MUVS20] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS2.MUVS2ZPT = @[Common.718.MUVS2ZPT] + +Entities.gmod_subway_81-718.Buttons.BUP_MP.MPMP = @[Common.718.MPMP] +Entities.gmod_subway_81-718.Buttons.BUP_MS.MSMS = @[Common.718.MSMS] + +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1VP = @[Common.718.MUVS1VP] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1NZ = @[Common.718.MUVS1NZ] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1X = @[Common.718.MUVS1X] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1T = @[Common.718.MUVS1T] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1U1 = @[Common.718.MUVS1U1] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1U2 = @[Common.718.MUVS1U2] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1BAV = @[Common.718.MUVS1BAV] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1BUP = @[Common.718.MUVS1BUP] + +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPVP = @[Common.718.MLUPVP] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPNZ = @[Common.718.MLUPNZ] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPBUP = @[Common.718.MLUPBUP] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPV0 = @[Common.718.MLUPV0] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPKU = @[Common.718.MLUPKU] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPBAV = @[Common.718.MLUPBAV] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPKR = @[Common.718.MLUPKR] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPARS = @[Common.718.MLUPARS] + +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSPROV = @[Common.718.MPSPROV] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSAVR = @[Common.718.MPSAVR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSTARS = @[Common.718.MPSTARS] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSX = @[Common.718.MPSX] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSNZ = @[Common.718.MPSNZ] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSNZR = @[Common.718.MPSNZR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSPROV0 = @[Common.718.MPSPROV0] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSSK = @[Common.718.MPSSK] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPST = @[Common.718.MPST] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSXR = @[Common.718.MPSXR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSU1 = @[Common.718.MPSU1] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSU2 = @[Common.718.MPSU2] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSVP = @[Common.718.MPSVP] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSVPR = @[Common.718.MPSVPR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSVZ = @[Common.718.MPSVZ] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSXM = @[Common.718.MPSXM] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSU1R = @[Common.718.MPSU1R] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1MZK = @[Common.718.MALP1MZK] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1FM = @[Common.718.MALP1FM] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1400 = @[Common.718.MALP1400] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP150 = @[Common.718.MALP150] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1DIF = @[Common.718.MALP1DIF] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1650 = @[Common.718.MALP1650] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP10 = @[Common.718.MALP10] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1ARS = @[Common.718.MALP1ARS] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1ITA = @[Common.718.MALP1ITA] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1TR = @[Common.718.MALP1TR] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1SN = @[Common.718.MALP1SN] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1VN = @[Common.718.MALP1VN] +Entities.gmod_subway_81-718.Buttons.BUV_MVD.MVDOTK = @[Common.718.MVDOTK] +Entities.gmod_subway_81-718.Buttons.BUV_MVD.MVDRP = @[Common.718.MVDRP] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2MSU = @[Common.718.MALP2MSU] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2800 = @[Common.718.MALP2800] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2975 = @[Common.718.MALP2975] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP250 = @[Common.718.MALP250] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2650 = @[Common.718.MALP2650] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP20 = @[Common.718.MALP20] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2BV = @[Common.718.MALP2BV] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2ITB = @[Common.718.MALP2ITB] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP1 = @[Common.718.MGRTP1] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP3 = @[Common.718.MGRTP3] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKHA = @[Common.718.MGRKHA] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKTA = @[Common.718.MGRKTA] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP2 = @[Common.718.MGRTP2] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP4 = @[Common.718.MGRTP4] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKHB = @[Common.718.MGRKHB] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKTB = @[Common.718.MGRKTB] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKRV = @[Common.718.MGRKRV] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRNV = @[Common.718.MGRNV] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRBV = @[Common.718.MGRBV] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRLK = @[Common.718.MGRLK] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKRN = @[Common.718.MGRKRN] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAKT = @[Common.718.MLUAKT] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAXH = @[Common.718.MLUAXH] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAVP = @[Common.718.MLUAVP] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUANZ = @[Common.718.MLUANZ] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUASS = @[Common.718.MLUASS] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAPV = @[Common.718.MLUAPV] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUALK = @[Common.718.MLUALK] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1V1 = @[Common.718.MUVK1V1] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1KT = @[Common.718.MUVK1KT] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1KH = @[Common.718.MUVK1KH] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1LK = @[Common.718.MUVK1LK] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1PV = @[Common.718.MUVK1PV] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1NZ = @[Common.718.MUVK1NZ] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1SN = @[Common.718.MUVK1SN] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIV33 = @[Common.718.MIV33] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIVV1 = @[Common.718.MIVV1] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIVSMA = @[Common.718.MIVSMA] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIVSMB = @[Common.718.MIVSMB] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2RTM = @[Common.718.MUVK2RTM] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2RKT = @[Common.718.MUVK2RKT] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2RP = @[Common.718.MUVK2RP] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2OTK = @[Common.718.MUVK2OTK] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK275 = @[Common.718.MUVK275] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2VP = @[Common.718.MUVK2VP] + +Entities.gmod_subway_81-718.Buttons.PVZ.SF4Toggle = @[Common.718.SF4] +Entities.gmod_subway_81-718.Buttons.PVZ.SF27Toggle = @[Common.718.SF27] +Entities.gmod_subway_81-718.Buttons.PVZ.SF46Toggle = @[Common.718.SF46] +Entities.gmod_subway_81-718.Buttons.PVZ.SF12Toggle = @[Common.718.SF12] +Entities.gmod_subway_81-718.Buttons.PVZ.SF13Toggle = @[Common.718.SF13] +Entities.gmod_subway_81-718.Buttons.PVZ.SF45Toggle = @[Common.718.SF45] +Entities.gmod_subway_81-718.Buttons.PVZ.SF16Toggle = @[Common.718.SF16] +Entities.gmod_subway_81-718.Buttons.PVZ.SF44Toggle = @[Common.718.SF44] +Entities.gmod_subway_81-718.Buttons.PVZ.SF43Toggle = @[Common.718.SF43] +Entities.gmod_subway_81-718.Buttons.PVZ.SF14Toggle = @[Common.718.SF14] +Entities.gmod_subway_81-718.Buttons.PVZ.SF15Toggle = @[Common.718.SF15] +Entities.gmod_subway_81-718.Buttons.PVZ.SF25Toggle = @[Common.718.SF25] +Entities.gmod_subway_81-718.Buttons.PVZ.SF72Toggle = @[Common.718.SF72] +Entities.gmod_subway_81-718.Buttons.PVZ.SF29Toggle = @[Common.718.SF29] +Entities.gmod_subway_81-718.Buttons.PVZ.SF26Toggle = @[Common.718.SF26] +Entities.gmod_subway_81-718.Buttons.PVZ.SF42Toggle = @[Common.718.SF42] +Entities.gmod_subway_81-718.Buttons.PVZ.SF18Toggle = @[Common.718.SF18] +Entities.gmod_subway_81-718.Buttons.PVZ.SF20Toggle = @[Common.718.SF20] +Entities.gmod_subway_81-718.Buttons.PVZ.SF17Toggle = @[Common.718.SF17] +Entities.gmod_subway_81-718.Buttons.PVZ.SF19Toggle = @[Common.718.SF19] +Entities.gmod_subway_81-718.Buttons.PVZ.SF21Toggle = @[Common.718.SF21] +Entities.gmod_subway_81-718.Buttons.PVZ.SF22Toggle = @[Common.718.SF22] +Entities.gmod_subway_81-718.Buttons.PVZ.SF34Toggle = @[Common.718.SF34] +Entities.gmod_subway_81-718.Buttons.PVZ.SF35Toggle = @[Common.718.SF35] +Entities.gmod_subway_81-718.Buttons.PVZ.SF23Toggle = @[Common.718.SF23] +Entities.gmod_subway_81-718.Buttons.PVZ.SF24Toggle = @[Common.718.SF24] + +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-718.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-718.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-718.Buttons.HelperPanel.SA6Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-718.Buttons.HelperPanel.SA24Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-718.Buttons.HelperPanel.SB20Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-718.Buttons.HelperPanel.SB21Set = @[Common.ALL.Program2] + +Entities.gmod_subway_81-718.Buttons.BZOS.SAB1Toggle = @[Common.BZOS.On] +Entities.gmod_subway_81-718.Buttons.BZOS.!VH1 = @[Common.BZOS.VH1] +Entities.gmod_subway_81-718.Buttons.BZOS.!VH2 = @[Common.BZOS.VH2] + +Entities.gmod_subway_81-718.Buttons.CabVent.PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-718.Buttons.CabVent.PVK+ = @[Common.CabVent.PVK+] + +Entities.gmod_subway_81-718.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-718.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-718.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-718.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-718.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-718.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-718.Buttons.OtsekDoor1.OtsekDoor1 = @[Common.ALL.OtsekDoor1] +Entities.gmod_subway_81-718.Buttons.OtsekDoor2.OtsekDoor2 = @[Common.ALL.OtsekDoor2] +Entities.gmod_subway_81-718.Buttons.DriverValveDisconnect.EPKToggle = @[Common.ALL.EPV] +Entities.gmod_subway_81-718.Buttons.DriverValveDisconnect.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-718.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle = @[Common.ALL.DriverValveDisconnect] + +Entities.gmod_subway_81-718.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-718.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-718.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] + +Entities.gmod_subway_81-718.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] + +Entities.gmod_subway_81-718.Buttons.HVMeters.!I13 = @[Common.ALL.EnginesCurrent1] +Entities.gmod_subway_81-718.Buttons.HVMeters.!I24 = @[Common.ALL.EnginesCurrent2] +Entities.gmod_subway_81-718.Buttons.HVMeters.!HVVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_81-718.Buttons.HVMeters.!BatteryCurrent = @[Common.ALL.BatteryCurrent] +Entities.gmod_subway_81-718.Buttons.PneumaticPanels.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-718.Buttons.PneumaticPanels.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-718.Buttons.Left.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSPROV = @[Common.718.MPSPROV] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSAVR = @[Common.718.MPSAVR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSTARS = @[Common.718.MPSTARS] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSX = @[Common.718.MPSX] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSNZ = @[Common.718.MPSNZ] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSNZR = @[Common.718.MPSNZR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSPROV0 = @[Common.718.MPSPROV0] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSSK = @[Common.718.MPSSK] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPST = @[Common.718.MPST] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSXR = @[Common.718.MPSXR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSU1 = @[Common.718.MPSU1] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSU2 = @[Common.718.MPSU2] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSVP = @[Common.718.MPSVP] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSVPR = @[Common.718.MPSVPR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSVZ = @[Common.718.MPSVZ] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSXM = @[Common.718.MPSXM] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSU1R = @[Common.718.MPSU1R] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1MZK = @[Common.718.MALP1MZK] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1FM = @[Common.718.MALP1FM] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1400 = @[Common.718.MALP1400] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP150 = @[Common.718.MALP150] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1DIF = @[Common.718.MALP1DIF] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1650 = @[Common.718.MALP1650] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP10 = @[Common.718.MALP10] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1ARS = @[Common.718.MALP1ARS] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1ITA = @[Common.718.MALP1ITA] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1TR = @[Common.718.MALP1TR] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1SN = @[Common.718.MALP1SN] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1VN = @[Common.718.MALP1VN] +Entities.gmod_subway_81-719.Buttons.BUV_MVD.MVDOTK = @[Common.718.MVDOTK] +Entities.gmod_subway_81-719.Buttons.BUV_MVD.MVDRP = @[Common.718.MVDRP] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2MSU = @[Common.718.MALP2MSU] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2800 = @[Common.718.MALP2800] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2975 = @[Common.718.MALP2975] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP250 = @[Common.718.MALP250] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2650 = @[Common.718.MALP2650] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP20 = @[Common.718.MALP20] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2BV = @[Common.718.MALP2BV] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2ITB = @[Common.718.MALP2ITB] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP1 = @[Common.718.MGRTP1] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP3 = @[Common.718.MGRTP3] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKHA = @[Common.718.MGRKHA] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKTA = @[Common.718.MGRKTA] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP2 = @[Common.718.MGRTP2] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP4 = @[Common.718.MGRTP4] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKHB = @[Common.718.MGRKHB] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKTB = @[Common.718.MGRKTB] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKRV = @[Common.718.MGRKRV] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRNV = @[Common.718.MGRNV] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRBV = @[Common.718.MGRBV] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRLK = @[Common.718.MGRLK] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKRN = @[Common.718.MGRKRN] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAKT = @[Common.718.MLUAKT] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAXH = @[Common.718.MLUAXH] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAVP = @[Common.718.MLUAVP] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUANZ = @[Common.718.MLUANZ] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUASS = @[Common.718.MLUASS] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAPV = @[Common.718.MLUAPV] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUALK = @[Common.718.MLUALK] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1V1 = @[Common.718.MUVK1V1] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1KT = @[Common.718.MUVK1KT] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1KH = @[Common.718.MUVK1KH] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1LK = @[Common.718.MUVK1LK] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1PV = @[Common.718.MUVK1PV] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1NZ = @[Common.718.MUVK1NZ] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1SN = @[Common.718.MUVK1SN] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIV33 = @[Common.718.MIV33] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIVV1 = @[Common.718.MIVV1] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIVSMA = @[Common.718.MIVSMA] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIVSMB = @[Common.718.MIVSMB] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2RTM = @[Common.718.MUVK2RTM] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2RKT = @[Common.718.MUVK2RKT] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2RP = @[Common.718.MUVK2RP] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2OTK = @[Common.718.MUVK2OTK] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK275 = @[Common.718.MUVK275] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2VP = @[Common.718.MUVK2VP] +Entities.gmod_subway_81-719.Buttons.PVZ.SF4Toggle = @[Common.718.SF4] +Entities.gmod_subway_81-719.Buttons.PVZ.SF27Toggle = @[Common.718.SF27] +Entities.gmod_subway_81-719.Buttons.PVZ.SF46Toggle = @[Common.718.SF46] +Entities.gmod_subway_81-719.Buttons.PVZ.SF12Toggle = @[Common.718.SF12] +Entities.gmod_subway_81-719.Buttons.PVZ.SF13Toggle = @[Common.718.SF13] +Entities.gmod_subway_81-719.Buttons.PVZ.SF45Toggle = @[Common.718.SF45] +Entities.gmod_subway_81-719.Buttons.PVZ.SF16Toggle = @[Common.718.SF16] +Entities.gmod_subway_81-719.Buttons.PVZ.SF44Toggle = @[Common.718.SF44] +Entities.gmod_subway_81-719.Buttons.PVZ.SF43Toggle = @[Common.718.SF43] +Entities.gmod_subway_81-719.Buttons.PVZ.SF14Toggle = @[Common.718.SF14] +Entities.gmod_subway_81-719.Buttons.PVZ.SF15Toggle = @[Common.718.SF15] +Entities.gmod_subway_81-719.Buttons.PVZ.SF25Toggle = @[Common.718.SF25] +Entities.gmod_subway_81-719.Buttons.PVZ.SF72Toggle = @[Common.718.SF72] +Entities.gmod_subway_81-719.Buttons.PVZ.SF56Toggle = @[Common.718.SF56] +Entities.gmod_subway_81-719.Buttons.PVZ.SF29Toggle = @[Common.718.SF29] +Entities.gmod_subway_81-719.Buttons.PVZ.SF26Toggle = @[Common.718.SF26] +Entities.gmod_subway_81-719.Buttons.PVZ.SF42Toggle = @[Common.718.SF42] +Entities.gmod_subway_81-719.Buttons.PVZ.SF18Toggle = @[Common.718.SF18] +Entities.gmod_subway_81-719.Buttons.PVZ.SF20Toggle = @[Common.718.SF20] +Entities.gmod_subway_81-719.Buttons.PVZ.SF17Toggle = @[Common.718.SF17] +Entities.gmod_subway_81-719.Buttons.PVZ.SF19Toggle = @[Common.718.SF19] +Entities.gmod_subway_81-719.Buttons.PVZ.SF21Toggle = @[Common.718.SF21] +Entities.gmod_subway_81-719.Buttons.PVZ.SF22Toggle = @[Common.718.SF22] +Entities.gmod_subway_81-719.Buttons.PVZ.SF34Toggle = @[Common.718.SF34] +Entities.gmod_subway_81-719.Buttons.PVZ.SF35Toggle = @[Common.718.SF35] +Entities.gmod_subway_81-719.Buttons.PVZ.SF23Toggle = @[Common.718.SF23] +Entities.gmod_subway_81-719.Buttons.PVZ.SF24Toggle = @[Common.718.SF24] + +Entities.gmod_subway_81-719.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.RearPneumatic.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-719.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-719.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-719.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-719.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-719.Buttons.couch_cap_o.CouchCap = @[Common.ALL.CouchCap] +Entities.gmod_subway_81-719.Buttons.couch_cap.CouchCap = @[Common.ALL.CouchCap] + +Entities.gmod_subway_81-719.Buttons.Battery.VBToggle = @[Common.ALL.VB] + +#Spawner: +Entities.gmod_subway_81-718.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-718.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-718.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-718.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-718.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-718.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-718.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-718.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-718.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-718.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] diff --git a/lua/metrostroi_data/languages/it_720.lua b/lua/metrostroi_data/languages/it_720.lua new file mode 100644 index 0000000..28a1481 --- /dev/null +++ b/lua/metrostroi_data/languages/it_720.lua @@ -0,0 +1,421 @@ +return [[ +#81-720 + +[it] + +#######Buttons########### +#Cameras +Train.720.CameraCond = Condizionatore d'aria, IGLA +Train.720.CameraPPZ = PPZ +Train.720.CameraPV = VPU +Train.720.CameraVityaz = SAU "Vityaz" +Train.720.CameraKRMH = Valvole KRMSH e UAVA +Train.720.CameraPVZ = PVZ + +#Common +Common.720.SF1 = SF1: Alimentazione principale +Common.720.SF2 = SF2: Controllo principale +Common.720.SF3 = SF3: Controllo d'emergenza +Common.720.SF4 = SF4: BARS +Common.720.SF5 = SF5: BUP (controllo unità treno) +Common.720.SF6 = SF6: BKCU (unità di commutazione dei circuiti di controllo) +Common.720.SF7 = SF7: PPO (ASOTP) +Common.720.SF8 = SF8: Annunciatore +Common.720.SF9 = SF9: Radiostazione +Common.720.SF10 = SF10: orientazione vagoni +Common.720.SF11 = SF11: Direzione di muovimento +Common.720.SF12 = SF12: Primo gruppo fari frontali +Common.720.SF13 = SF13: Secondo gruppo fari frontali +Common.720.SF14 = SF14: Luci rosse +Common.720.SF15 = SF15: @[Common.703.VU3] +Common.720.SF16 = SF16: @[Common.703.VU1] +Common.720.SF17 = SF17: Condizionatore d'aria cabina +Common.720.SF18 = SF18: Lubrificazione flangia +Common.720.SF19 = SF19: Alimentazione freno principale +Common.720.SF20 = SF20: Alimentazione di emergenza leva del freno +Common.720.SF21 = SF21: Apertura delle porte +Common.720.SF22 = SF22: Chiusura delle porte + +Common.720.SFV1 = SF1: Alimentazione dei circuiti di controllo del vagone +Common.720.SFV2 = SF2: Alimentazione dell'unità di controllo del vagone +Common.720.SFV3 = SF3: Alimentazione della centralina dei motori di trazione +Common.720.SFV4 = SF4: Controllo della centralina dei motori di trazione +Common.720.SFV5 = SF5: Controllo centralina dei motori di trazione d'emergenza +Common.720.SFV6 = SF6: Alimentazione BUTP +Common.720.SFV7 = SF7: Alimentazione elettrica +Common.720.SFV8 = SF8: Controllo BV +Common.720.SFV9 = SF9: Alimentazione BV +Common.720.SFV10 = SF10: PPO (ASOTP PCBK) +Common.720.SFV11 = SF11: Compressore +Common.720.SFV12 = SF12: Apertura delle porte a sinistra +Common.720.SFV13 = SF13: Left doors opening +Common.720.SFV14 = SF14: Apertura delle porte a destra +Common.720.SFV15 = SF15: Porte finali +Common.720.SFV16 = SF16: Annunciatore +Common.720.SFV17 = SF17: Citofono di emergenza +Common.720.SFV18 = SF18: @[Common.ALL.Unsused1] +Common.720.SFV19 = SF19: Alimentazione illuminazione interna +Common.720.SFV20 = SF20: Illuminazione interna d'emergenza +Common.720.SFV21 = SF21: Sensore di velocità +Common.720.SFV22 = SF22: Freno di stazionamento +Common.720.SFV23 = SF23: Primo controllo del gruppo di ventilazione +Common.720.SFV24 = SF24: Secondo controllo del gruppo di ventilazione +Common.720.SFV25 = SF25: Alimentazione del primo gruppo di ventilazione +Common.720.SFV26 = SF26: Alimentazione del secondo gruppo di ventilazione +Common.720.SFV27 = SF27: Potenza dell'eccitatore +Common.720.SFV28 = SF28: Potenza del condensatore di carica +Common.720.SFV29 = SF29: Collettori di corrente +Common.720.SFV30 = SF30: Schemi di linee e ticker +Common.720.SFV31 = SF31: @[Common.ALL.Unsused1] +Common.720.SFV32 = SF32: @[Common.ALL.Unsused1] +Common.720.SFV33 = SF33: @[Common.ALL.Unsused1] + +Common.720.VentCMode = Modalità ventilazione +Common.720.VentHMode+ = Aumentare la potenza del riscaldamento +Common.720.VentHMode- = Diminuire la potenza del riscaldamento +Common.720.VentSMode- = Aumentare la potenza della ventilazione +Common.720.VentSMode+ = Diminuire la potenza della ventilazione + +Common.720.Pant1 = Rilascia il primo gruppo di collettori di corrente +Common.720.Pant2 = Rilascia il secondo gruppo di collettori di corrente +Common.720.Vent1 = Primo gruppo di ventilazione +Common.720.Vent2 = Secondo gruppo di ventilazione +Common.720.TorecDoors = Porte finali +Common.720.BBER = Emergenza BBE +Common.720.BBE = BBE: Alimentazione elettrica +Common.720.CabLightStrength = Luminosità della cabina +Common.720.AppLights = Illuminazione dei vagoni +Common.720.BARSBlock = Blocco BARS difettoso (unità ARS) + +Common.720.Accel = Accellerazione +Common.720.Forward = Avanzamento avanti +Common.720.Backward = Avanzamento indietro +Common.720.Stand = Resta @[Common.ALL.Unsused2] +Common.720.Ticker = Ticker +Common.720.KAH = KAH: Modalità di guida BARS di emergenza +Common.720.KAHK = @[Common.ALL.KAHK] +Common.720.ALS = Cambia ARS in modalità segnalazione (disabilita ARS) +Common.720.ALSK = Copribottone ALS +Common.720.FDepot = Partenza dal deposito +Common.720.HVoltage = Nessuna alta tensione +Common.720.PassScheme = Pannello informativo #old translation: "Line schemes" +Common.720.EmergencyCompressor = Pulsante di avvio del compressore d'emergenza +Common.720.EnableBV = Abilita BV +Common.720.DisableBV = Disabilita BV +Common.720.Ring = Trasferimento dei controlli (Emettitore sonoro) +Common.720.R_Announcer = Abilita il suono dell'annunciatore nell'vagone +Common.720.R_Line = Abilita il microfono del conducente +Common.720.R_Emer = Citofono di emergenza +Common.720.R_Program1 = Inizia ad annunciare (programma 1) +Common.720.EnableBVEmer = Abilitazione di emergenza BV +Common.720.EmergencyControls = Disabilitare l'abilitazione di emergenza del controllo del circuito +Common.720.Wiper = Abilita tergicristallo + +Common.720.AccelRate = Abilita la modalità "Slope" +Common.720.EBrakeAdd = Aumenta la forza frenante ausiliaria +Common.720.EBrakeRelease = Diminuisci la forza frenante ausiliaria +Common.720.EBrakeToggle = Abilita freno ausiliario +Common.720.EmergencyBrake = Abilita freno di emergenza +Common.720.DoorClose = Chiudi porte +Common.720.AttentionMessage = Bottone percezione del messaggio + + +Common.720.DoorSelectL = Select left doors +Common.720.DoorSelectR = Select right doors +Common.720.DoorBlock = Driving without doors control +Common.720.KDL = Open left doors +Common.720.KDP = Open right doors + +Common.Vityaz.F1 = Vityaz: F1 +Common.Vityaz.F2 = Vityaz: Pagina successiva +Common.Vityaz.F3 = Vityaz: Pagina precedente +Common.Vityaz.F4 = Vityaz: Modalità principale +Common.Vityaz.1 = Vityaz: 1 +Common.Vityaz.4 = Vityaz: 4 +Common.Vityaz.7 = Vityaz: 7 +Common.Vityaz.2 = Vityaz: 2 +Common.Vityaz.5 = Vityaz: 5 +Common.Vityaz.8 = Vityaz: 8 +Common.Vityaz.0 = Vityaz: 0 +Common.Vityaz.3 = Vityaz: 3 +Common.Vityaz.6 = Vityaz: 6 +Common.Vityaz.9 = Vityaz: 9 +Common.Vityaz.F5 = Vityaz: ZV +Common.Vityaz.F6 = Vityaz: Su\Velocità +Common.Vityaz.F7 = Vityaz: Giù\Correnti +Common.Vityaz.F8 = Vityaz: Enter\Equipaggiamento del vagone +Common.Vityaz.F9 = Vityaz: Seleziona\Controllo dell'attrezzatura del vagone + +Common.720.EmerX1 = Modalità di guida d'emergenza X1 +Common.720.EmerX2 = Modalità di guida d'emergenza X2 +Common.720.EmerCloseDoors = Chiusura delle porte d'emergenza +Common.720.EmergencyDoors = Abilitare il controllo delle porte d'emergenza +Common.720.BRU = BRU: Sezionatore di alta tensione + +#gmod_subway_81-720 +#Buttons: + +Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode- = @[Common.720.VentCMode] @[Common.ALL.CCW] +Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode+ = @[Common.720.VentCMode] @[Common.ALL.CW] +Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode+ = @[Common.720.VentHMode+] +Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode- = @[Common.720.VentHMode-] +Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode- = @[Common.720.VentSMode-] +Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode+ = @[Common.720.VentSMode+] + +Entities.gmod_subway_81-720.Buttons.RV.EmerX1Set = @[Common.720.EmerX1] +Entities.gmod_subway_81-720.Buttons.RV.EmerX2Set = @[Common.720.EmerX2] +Entities.gmod_subway_81-720.Buttons.RV.EmerCloseDoorsSet = @[Common.720.EmerCloseDoors] +Entities.gmod_subway_81-720.Buttons.RV.EmergencyDoorsToggle = @[Common.720.EmergencyDoors] + +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF1Set = @[Common.Vityaz.F1] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF2Set = @[Common.Vityaz.F2] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF3Set = @[Common.Vityaz.F3] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF4Set = @[Common.Vityaz.F4] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz1Set = @[Common.Vityaz.1] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz4Set = @[Common.Vityaz.4] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz7Set = @[Common.Vityaz.7] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz2Set = @[Common.Vityaz.2] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz5Set = @[Common.Vityaz.5] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz8Set = @[Common.Vityaz.8] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz0Set = @[Common.Vityaz.0] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz3Set = @[Common.Vityaz.3] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz6Set = @[Common.Vityaz.6] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz9Set = @[Common.Vityaz.9] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF5Set = @[Common.Vityaz.F5] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF6Set = @[Common.Vityaz.F6] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF7Set = @[Common.Vityaz.F7] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF8Set = @[Common.Vityaz.F8] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF9Set = @[Common.Vityaz.F9] + +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF1Toggle = @[Common.720.SF1] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF2Toggle = @[Common.720.SF2] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF3Toggle = @[Common.720.SF3] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF4Toggle = @[Common.720.SF4] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF5Toggle = @[Common.720.SF5] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF6Toggle = @[Common.720.SF6] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF7Toggle = @[Common.720.SF7] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF8Toggle = @[Common.720.SF8] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF9Toggle = @[Common.720.SF9] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF10Toggle = @[Common.720.SF10] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF11Toggle = @[Common.720.SF11] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF12Toggle = @[Common.720.SF12] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF13Toggle = @[Common.720.SF13] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF14Toggle = @[Common.720.SF14] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF15Toggle = @[Common.720.SF15] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF16Toggle = @[Common.720.SF16] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF17Toggle = @[Common.720.SF17] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF18Toggle = @[Common.720.SF18] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF19Toggle = @[Common.720.SF19] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF20Toggle = @[Common.720.SF20] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF21Toggle = @[Common.720.SF21] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF22Toggle = @[Common.720.SF22] + +Entities.gmod_subway_81-720.Buttons.BackDown.Pant1Toggle = @[Common.720.Pant1] +Entities.gmod_subway_81-720.Buttons.BackDown.Pant2Toggle = @[Common.720.Pant2] +Entities.gmod_subway_81-720.Buttons.BackDown.Vent1Toggle = @[Common.720.Vent1] +Entities.gmod_subway_81-720.Buttons.BackDown.Vent2Toggle = @[Common.720.Vent2] +Entities.gmod_subway_81-720.Buttons.BackDown.PassLightToggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-720.Buttons.BackDown.CabLightToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-720.Buttons.BackDown.Headlights1Toggle = @[Common.ALL.VF1] +Entities.gmod_subway_81-720.Buttons.BackDown.Headlights2Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-720.Buttons.BackDown.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-720.Buttons.BackDown.TorecDoorsToggle = @[Common.720.TorecDoors] +Entities.gmod_subway_81-720.Buttons.BackDown.BBERToggle = @[Common.720.BBER] +Entities.gmod_subway_81-720.Buttons.BackDown.BBEToggle = @[Common.720.BBE] +Entities.gmod_subway_81-720.Buttons.BackDown.CompressorToggle = @[Common.ALL.MK] +Entities.gmod_subway_81-720.Buttons.BackDown.CabLightStrengthToggle = @[Common.720.CabLightStrength] +Entities.gmod_subway_81-720.Buttons.BackDown.AppLights1Toggle = @[Common.720.AppLights] +Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock- = @[Common.720.BARSBlock] @[Common.ALL.CCW] +Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock+ = @[Common.720.BARSBlock] @[Common.ALL.CW] +Entities.gmod_subway_81-720.Buttons.BackDown.BatteryToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-720.Buttons.BackDown.ALSFreqToggle = @[Common.ARS.Freq] + +Entities.gmod_subway_81-720.Buttons.PUU.!DoorsClosed = @[Common.ALL.LSD] +Entities.gmod_subway_81-720.Buttons.PUU.StandToggle = @[Common.720.Stand] @[Common.ALL.Unsused2] +Entities.gmod_subway_81-720.Buttons.PUU.TickerToggle = @[Common.720.Ticker] +Entities.gmod_subway_81-720.Buttons.PUU.KAHToggle = @[Common.720.KAH] +Entities.gmod_subway_81-720.Buttons.PUU.KAHkToggle = @[Common.720.KAHK] +Entities.gmod_subway_81-720.Buttons.PUU.ALSToggle = @[Common.720.ALS] +Entities.gmod_subway_81-720.Buttons.PUU.ALSkToggle = @[Common.720.ALSK] +Entities.gmod_subway_81-720.Buttons.PUU.FDepotToggle = @[Common.720.FDepot] @[Common.ALL.Unsused2] +Entities.gmod_subway_81-720.Buttons.PUU.!HVoltage = @[Common.720.HVoltage] +Entities.gmod_subway_81-720.Buttons.PUU.PassSchemeToggle = @[Common.720.PassScheme] +Entities.gmod_subway_81-720.Buttons.PUU.EmergencyCompressorSet = @[Common.720.EmergencyCompressor] +Entities.gmod_subway_81-720.Buttons.PUU.EnableBVSet = @[Common.720.EnableBV] +Entities.gmod_subway_81-720.Buttons.PUU.DisableBVSet = @[Common.720.DisableBV] +Entities.gmod_subway_81-720.Buttons.PUU.RingSet = @[Common.720.Ring] +Entities.gmod_subway_81-720.Buttons.PUU.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-720.Buttons.PUU.R_AnnouncerToggle = @[Common.720.R_Announcer] +Entities.gmod_subway_81-720.Buttons.PUU.R_LineToggle = @[Common.720.R_Line] +Entities.gmod_subway_81-720.Buttons.PUU.R_EmerSet = @[Common.720.R_Emer] +Entities.gmod_subway_81-720.Buttons.PUU.R_Program1Set = @[Common.720.R_Program1] +Entities.gmod_subway_81-720.Buttons.PUU.EnableBVEmerSet = @[Common.720.EnableBVEmer] +Entities.gmod_subway_81-720.Buttons.PUU.EmergencyControlsToggle = @[Common.720.EmergencyControls] +Entities.gmod_subway_81-720.Buttons.PUU.WiperToggle = @[Common.720.Wiper] +Entities.gmod_subway_81-720.Buttons.PUU.!VDop = @[Common.ALL.SpeedAccept] +Entities.gmod_subway_81-720.Buttons.PUU.!VFact = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-720.Buttons.PUU.!VPred = @[Common.ALL.SpeedAttent] +Entities.gmod_subway_81-720.Buttons.PUU.!VDop2 = @[Common.ALL.SpeedAccept] +Entities.gmod_subway_81-720.Buttons.PUU.!Acc = @[Common.720.Accel] +Entities.gmod_subway_81-720.Buttons.PUU.!Forw = @[Common.720.Forward] +Entities.gmod_subway_81-720.Buttons.PUU.!Back = @[Common.720.Backward] + +Entities.gmod_subway_81-720.Buttons.PUR.AccelRateSet = @[Common.720.AccelRate] +Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeAddSet = @[Common.720.EBrakeAdd] +Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeReleaseSet = @[Common.720.EBrakeRelease] +Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeToggle = @[Common.720.EBrakeToggle] +Entities.gmod_subway_81-720.Buttons.PUR.EmergencyBrakeToggle = @[Common.720.EmergencyBrake] +Entities.gmod_subway_81-720.Buttons.PUR.DoorCloseToggle = @[Common.720.DoorClose] +Entities.gmod_subway_81-720.Buttons.PUR.AttentionMessageSet = @[Common.720.AttentionMessage] +Entities.gmod_subway_81-720.Buttons.PUR.AttentionSet = @[Common.ARS.KB] +Entities.gmod_subway_81-720.Buttons.PUR.AttentionBrakeSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-720.Buttons.PUR.HornBSet = @[Common.ALL.Horn] +Entities.gmod_subway_81-720.Buttons.PUR.DoorRightSet = @[Common.720.KDP] +Entities.gmod_subway_81-720.Buttons.PUR.!DoorRightLamp = @[Common.ALL.KDPL] + +Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectLToggle = @[Common.720.DoorSelectL] +Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectRToggle = @[Common.720.DoorSelectR] +Entities.gmod_subway_81-720.Buttons.PUL.DoorBlockToggle = @[Common.720.DoorBlock] +Entities.gmod_subway_81-720.Buttons.PUL.!DoorLeftLamp = @[Common.ALL.KDLL] +Entities.gmod_subway_81-720.Buttons.PUL.DoorLeftSet = @[Common.720.KDL] + +Entities.gmod_subway_81-720.Buttons.PVZ.SFV1Toggle = @[Common.720.SFV1] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV2Toggle = @[Common.720.SFV2] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV3Toggle = @[Common.720.SFV3] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV4Toggle = @[Common.720.SFV4] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV5Toggle = @[Common.720.SFV5] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV6Toggle = @[Common.720.SFV6] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV7Toggle = @[Common.720.SFV7] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV8Toggle = @[Common.720.SFV8] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV9Toggle = @[Common.720.SFV9] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV10Toggle = @[Common.720.SFV10] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV11Toggle = @[Common.720.SFV11] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV12Toggle = @[Common.720.SFV12] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV13Toggle = @[Common.720.SFV13] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV14Toggle = @[Common.720.SFV14] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV15Toggle = @[Common.720.SFV15] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV16Toggle = @[Common.720.SFV16] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV17Toggle = @[Common.720.SFV17] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV18Toggle = @[Common.720.SFV18] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV19Toggle = @[Common.720.SFV19] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV20Toggle = @[Common.720.SFV20] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV21Toggle = @[Common.720.SFV21] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV22Toggle = @[Common.720.SFV22] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV23Toggle = @[Common.720.SFV23] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV24Toggle = @[Common.720.SFV24] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV25Toggle = @[Common.720.SFV25] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV26Toggle = @[Common.720.SFV26] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV27Toggle = @[Common.720.SFV27] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV28Toggle = @[Common.720.SFV28] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV29Toggle = @[Common.720.SFV29] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV30Toggle = @[Common.720.SFV30] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV31Toggle = @[Common.720.SFV31] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV32Toggle = @[Common.720.SFV32] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV33Toggle = @[Common.720.SFV33] + +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] + +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] + +Entities.gmod_subway_81-720.Buttons.BTO.K29Toggle = @[Common.ALL.KRMH] +Entities.gmod_subway_81-720.Buttons.BTO.UAVAToggle = @[Common.ALL.UAVA2] + +Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +Entities.gmod_subway_81-720.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-720.Buttons.RearDoor1.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-720.Buttons.CabinDoorR.CabinDoorRight = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-720.Buttons.CabinDoorL.CabinDoorLeft = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-720.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-720.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] + +Entities.gmod_subway_81-720.Buttons.VoltHelper2.!HV = @[Common.ALL.HighVoltage] +Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I1_3 = @[Common.ALL.EnginesCurrent1] +Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I2_4 = @[Common.ALL.EnginesCurrent2] +Entities.gmod_subway_81-720.Buttons.PneumoHelper2.!BrakeTrainLine = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-720.Buttons.PneumoHelper1.!BrakeCylinder = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-720.Buttons.VoltHelper1.!Battery = @[Common.ALL.BatteryVoltage] +Entities.gmod_subway_81-720.Buttons.GV.GVToggle = @[Common.720.BRU] + +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-720.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-720.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +#gmod_subway_81-721 +Entities.gmod_subway_81-721.Buttons.Battery.BatteryToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-721.Buttons.GV.GVToggle = @[Common.720.BRU] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV1Toggle = @[Common.720.SFV1] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV2Toggle = @[Common.720.SFV2] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV3Toggle = @[Common.720.SFV3] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV4Toggle = @[Common.720.SFV4] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV5Toggle = @[Common.720.SFV5] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV6Toggle = @[Common.720.SFV6] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV7Toggle = @[Common.720.SFV7] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV8Toggle = @[Common.720.SFV8] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV9Toggle = @[Common.720.SFV9] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV10Toggle = @[Common.720.SFV10] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV11Toggle = @[Common.720.SFV11] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV12Toggle = @[Common.720.SFV12] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV13Toggle = @[Common.720.SFV13] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV14Toggle = @[Common.720.SFV14] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV15Toggle = @[Common.720.SFV15] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV16Toggle = @[Common.720.SFV16] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV17Toggle = @[Common.720.SFV17] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV18Toggle = @[Common.720.SFV18] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV19Toggle = @[Common.720.SFV19] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV20Toggle = @[Common.720.SFV20] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV21Toggle = @[Common.720.SFV21] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV22Toggle = @[Common.720.SFV22] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV23Toggle = @[Common.720.SFV23] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV24Toggle = @[Common.720.SFV24] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV25Toggle = @[Common.720.SFV25] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV26Toggle = @[Common.720.SFV26] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV27Toggle = @[Common.720.SFV27] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV28Toggle = @[Common.720.SFV28] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV29Toggle = @[Common.720.SFV29] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV30Toggle = @[Common.720.SFV30] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV31Toggle = @[Common.720.SFV31] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV32Toggle = @[Common.720.SFV32] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV33Toggle = @[Common.720.SFV33] + +Entities.gmod_subway_81-721.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-721.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +#Spawner: + +Entities.gmod_subway_81-720.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-720.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-720.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-720.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-720.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-720.Spawner.PassSchemesInvert.Name = @[Common.Spawner.SchemeInvert] +Entities.gmod_subway_81-720.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-720.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-720.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-720.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-720.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] diff --git a/lua/metrostroi_data/languages/it_722.lua b/lua/metrostroi_data/languages/it_722.lua new file mode 100644 index 0000000..25af3c3 --- /dev/null +++ b/lua/metrostroi_data/languages/it_722.lua @@ -0,0 +1,360 @@ +return [[ +#81-722 + +[it] + +#Cameras: +Train.722.Breakers = Freni automatici +Train.722.PU2_1 = Pannello pulsanti +Train.722.PU2_2 = Pannello ausigliario +Train.722.Vityaz = SAU "VITYAZ-SP" monitor +Train.722.SARMAT = CIS monitor di sistema +Train.722.CabLights = Pannello luci cabina +Train.722.Disconnects = Disconnetti valvole +Train.722.KRMH = KRMSH e RVTB valvole + +#######Buttons########### +Common.722.MirrorHeating = Riscaldamento specchietti +Common.722.EmergencyDrive = Emergency start in the emergency drive mode +Common.722.Microphone = Abilita il microfono +Common.722.LRS = Alimentazione di emergenza della radiostazione dalle batterie #indicator +Common.722.LAVS = Bassa pressione nei freni #indicator +Common.722.LRU = Il relè di controllo è spento #indicator +Common.722.GlassWasher = Fluido per parabrezza +Common.722.GlassCleaner = Tergicristallo +Common.722.EmergencyBrakeTPlus = Freno di emergenza (modalità T+) +Common.722.EmergencyBrakeTPlusK = Copertura del pulsante "Freno di emergenza" +Common.722.KRO = Direzione di muovimento + +Common.722.PSNToggle = Abilita la carica della batteria da fonte esterna +Common.722.BattOn = Abilita l'alimentazione del treno +Common.722.BattOff = Disabilita l'alimentazione del treno +Common.722.TorecDoorUnlock = Sblocca le porte finali +Common.722.SCEnabled = Il dispositivo di cortocircuito è acceso +Common.722.LSOSD = l'inicatore delle porte di stazione è acceso #indicator + +Common.722.PassVent = Ventilazione interna +Common.722.VRU = Interruttore modalità di controllo +Common.722.VADToggle = Guida senza porte interbloccate +Common.722.VAHToggle = Guida senza pedale di attenzione +Common.722.EmergencyRadioPowerToggle = Alimenta stazioneradio di emergenza +Common.722.BARSMode = interruttore modalità BARS +Common.722.PantSC = Collettori attuali e dispositivo di cortocircuito + +Common.SARMAT.Up = SARMAT: Su +Common.SARMAT.Down = SARMAT: Giù +Common.SARMAT.Enter = SARMAT: Enter +Common.SARMAT.Esc = SARMAT: Esc +Common.SARMAT.F1 = SARMAT: F1 +Common.SARMAT.F2 = SARMAT: F2 +Common.SARMAT.F3 = SARMAT: F3 +Common.SARMAT.F4 = SARMAT: F4 +Common.SARMAT.Path = SARMAT: Traccia +Common.SARMAT.Line = SARMAT: Linea +Common.SARMAT.Zero = SARMAT: Imposta all'inizio +Common.SARMAT.Start = SARMAT: Partenza + +#Autobreakers +Common.722.SF1 = SF1: Linea elettrica del treno (controllo) +Common.722.SF2 = SF2: Attiva cabina +Common.722.SF3 = SF3: Controllo principale +Common.722.SF4 = SF4: Controllo di emergenza +Common.722.SF5 = SF5: Controllo dell'RVTB +Common.722.SF6 = SF6: Alimentazione leva del freno +Common.722.SF7 = SF7: Controllo delle porte +Common.722.SF8 = SF8: BARS 1 +Common.722.SF9 = SF9: BARS 2 +Common.722.UPO = SF: UPO1 +Common.722.SF10 = SF10: BRPI-M1 +Common.722.SF11 = SF11: BRPI-M2 +Common.722.SF12 = SF12: Allarme incendio +Common.722.SF13 = SF13: @[Common.722.PantSC] +Common.722.SF14 = SF14: Radio comunicazione 1 +Common.722.SF15 = SF15: Radio comunicazione 2 +Common.722.SF16 = SF16: CIS 1 (monitor) +Common.722.SF17 = SF17: CIS 2 (sistema centrale d'informazione) +Common.722.SF18 = SF18: CIS 3 +Common.722.SF19 = SF19: BUKP, UPI +Common.722.SF20 = SF20: Monitor +Common.722.SF21 = SF21: Orientamento +Common.722.SF22 = SF22: Luci rosse alimentate da batterie +Common.722.SF23 = SF23: Fari, luci rosse +Common.722.SF24 = SF24: Indicatore apertura porte della stazione +Common.722.SF25 = SF25: Illuminazione cabina +Common.722.SF26 = SF26: Condizionatore dell'aria cabina +Common.722.SF27 = SF27: Tergicristallo, lavavetri, clacson + +Common.722.SF31 = SF31: Alimentazione del treno +Common.722.SF32 = SF32: Treno linea elettrica (controllo) +Common.722.SF33 = SF33: Controllo dei circuiti di potenza +Common.722.SF34 = SF34: Lato sinistro CIS +Common.722.SF35 = SF35: Lato destro CIS +Common.722.SF36 = SF36: Indicatore stato delle porte (esterno) +Common.722.SF37 = SF37: Rilascio dei collettori +Common.722.SF38 = SF38: Riserva +Common.722.SF41 = SF41: Apertura delle porte a sinistra +Common.722.SF42 = SF42: Apertura delle porte a destra +Common.722.SF43 = SF43: Chiusura delle porte +Common.722.SF44 = SF44: Porte finali +Common.722.SF45 = SF45: Alimentazione luci interne +Common.722.SF46 = SF46: Illuminazione interna di emergenza +Common.722.SF47 = SF47: Primo gruppo di ventilazione +Common.722.SF48 = SF48: Secondo gruppo di ventilazione +Common.722.SF49 = SF49: Contatore +Common.722.SF51 = SF51: Controllo unità vagone +Common.722.SF52 = SF52: BODV +Common.722.SF53 = SF53: PSN (Alimentazione elettrica) +Common.722.SF54 = SF54: Essiccatore ad aria compressa +Common.722.SF55 = SF55: BUFT (unità di controllo del freno ad attrito) +Common.722.SF56 = SF56: Invertitore +Common.722.SF57 = SF57: Riscaldatore ad inverter +Common.722.SF58 = SF58: Alimentazione circuiti di controllo del vagone +Common.722.SF59 = SF59: Alimentazione circuiti di controllo del vagone d'emergenza + +#gmod_subway_81-722 +#Buttons: +Entities.gmod_subway_81-722.Buttons.PU1.MirrorHeatingSet = @[Common.722.MirrorHeating] +Entities.gmod_subway_81-722.Buttons.PU1.DoorLeft2Set = @[Common.720.KDL] +Entities.gmod_subway_81-722.Buttons.PU1.DoorBackSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-722.Buttons.PU1.EmergencyDriveSet = @[Common.722.EmergencyDrive] +Entities.gmod_subway_81-722.Buttons.PU1.MicrophoneSet = @[Common.722.Microphone] +Entities.gmod_subway_81-722.Buttons.PU1.DoorLeft1Set = @[Common.720.KDL] + +Entities.gmod_subway_81-722.Buttons.PU2.ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-722.Buttons.PU2.ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-722.Buttons.PU2.GlassWasherSet = @[Common.722.GlassWasher] +Entities.gmod_subway_81-722.Buttons.PU2.GlassCleaner+ = @[Common.722.GlassCleaner] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.PU2.GlassCleaner- = @[Common.722.GlassCleaner] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeTPlusKToggle = @[Common.722.EmergencyBrakeTPlusK] +Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeTPlusSet = @[Common.722.EmergencyBrakeTPlus] +Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeToggle = @[Common.720.EmergencyBrake] +Entities.gmod_subway_81-722.Buttons.PU2.VigilanceSet = @[Common.ARS.KB] +Entities.gmod_subway_81-722.Buttons.PU2.Headlights+ = @[Common.ALL.VF] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.PU2.Headlights- = @[Common.ALL.VF] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.PU2.DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-722.Buttons.PU2.DoorClose+ = @[Common.720.DoorClose] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.PU2.DoorClose- = @[Common.720.DoorClose] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.PU2.DoorRightSet = @[Common.720.KDP] + +Entities.gmod_subway_81-722.Buttons.BI3.KRO+ = @[Common.722.KRO] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.BI3.KRO- = @[Common.722.KRO] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.BI3.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-722.Buttons.BI3.Compressor- = @[Common.ALL.MK] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.BI3.Compressor+ = @[Common.ALL.MK] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.BI3.!BrakeTrainLine = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-722.Buttons.BI3.!BrakeCylinder = @[Common.ALL.BCPressure] + +Entities.gmod_subway_81-722.Buttons.PPZB.PSNToggleSet = @[Common.722.PSNToggle] +Entities.gmod_subway_81-722.Buttons.PPZB.BattOnSet = @[Common.722.BattOn] +Entities.gmod_subway_81-722.Buttons.PPZB.BattOffSet = @[Common.722.BattOff] +Entities.gmod_subway_81-722.Buttons.PPZB.TorecDoorUnlockSet = @[Common.722.TorecDoorUnlock] +Entities.gmod_subway_81-722.Buttons.PPZB.SCEnable = @[Common.722.SCEnabled] +Entities.gmod_subway_81-722.Buttons.PPZB.SOSD = @[Common.722.LSOSD] + +Entities.gmod_subway_81-722.Buttons.PVM.PassLightToggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-722.Buttons.PVM.PassVent- = @[Common.722.PassVent] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.PassVent+ = @[Common.722.PassVent] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.VKFToggle = @[Common.ALL.VKF] +Entities.gmod_subway_81-722.Buttons.PVM.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-722.Buttons.PVM.VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-722.Buttons.PVM.SOSDEnableToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-722.Buttons.PVM.VRU- = @[Common.722.VRU] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.VRU+ = @[Common.722.VRU] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.VADToggle = @[Common.722.VADToggle] +Entities.gmod_subway_81-722.Buttons.PVM.VAHToggle = @[Common.722.VAHToggle] +Entities.gmod_subway_81-722.Buttons.PVM.EmergencyRadioPowerToggle = @[Common.722.EmergencyRadioPowerToggle] +Entities.gmod_subway_81-722.Buttons.PVM.BARSMode- = @[Common.722.BARSMode] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.BARSMode+ = @[Common.722.BARSMode] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.PantSC- = @[Common.722.PantSC] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.PantSC+ = @[Common.722.PantSC] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.RCARSToggle = @[Common.ALL.RCARS] + +Entities.gmod_subway_81-722.Buttons.HelperLamps.!LRD = @[Common.ARS.LRD] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!LPT = @[Common.ALL.BrT] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!RS = @[Common.722.LRS] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!AVS = @[Common.722.LAVS] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!LSD = @[Common.ALL.LSD] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!RU = @[Common.722.LRU] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!04 = @[Common.ARS.N4] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!00 = @[Common.ARS.0] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!40 = @[Common.ARS.40] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!60 = @[Common.ARS.60] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!70 = @[Common.ARS.70] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!80 = @[Common.ARS.80] + +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatUpSet = @[Common.SARMAT.Up] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatDownSet = @[Common.SARMAT.Down] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatEnterSet = @[Common.SARMAT.Enter] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatEscSet = @[Common.SARMAT.Esc] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF1Set = @[Common.SARMAT.F1] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF2Set = @[Common.SARMAT.F2] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF3Set = @[Common.SARMAT.F3] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF4Set = @[Common.SARMAT.F4] + +Entities.gmod_subway_81-722.Buttons.BMP.SarmatPathSet = @[Common.SARMAT.Path] +Entities.gmod_subway_81-722.Buttons.BMP.SarmatLineSet = @[Common.SARMAT.Line] +Entities.gmod_subway_81-722.Buttons.BMP.SarmatZeroSet = @[Common.SARMAT.Zero] +Entities.gmod_subway_81-722.Buttons.BMP.SarmatStartSet = @[Common.SARMAT.Start] + +Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber1Set = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber2Set = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber3Set = @[Common.ALL.RouteNumber3+] + +Entities.gmod_subway_81-722.Buttons.Lighting.CabinLight- = @[Common.ALL.CabLights] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.Lighting.CabinLight+ = @[Common.ALL.CabLights] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.Lighting.PanelLightToggle = @[Common.ALL.PanelLights] + +Entities.gmod_subway_81-722.Buttons.PPZ.SF1Toggle = @[Common.722.SF1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF2Toggle = @[Common.722.SF2] +Entities.gmod_subway_81-722.Buttons.PPZ.SF3Toggle = @[Common.722.SF3] +Entities.gmod_subway_81-722.Buttons.PPZ.SF4Toggle = @[Common.722.SF4] +Entities.gmod_subway_81-722.Buttons.PPZ.SF5Toggle = @[Common.722.SF5] +Entities.gmod_subway_81-722.Buttons.PPZ.SF6Toggle = @[Common.722.SF6] +Entities.gmod_subway_81-722.Buttons.PPZ.SF7Toggle = @[Common.722.SF7] +Entities.gmod_subway_81-722.Buttons.PPZ.SF8Toggle = @[Common.722.SF8] +Entities.gmod_subway_81-722.Buttons.PPZ.SF9Toggle = @[Common.722.SF9] +Entities.gmod_subway_81-722.Buttons.PPZ.R_UPOToggle = @[Common.722.UPO] +Entities.gmod_subway_81-722.Buttons.PPZ.SF01Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF10Toggle = @[Common.722.SF10] +Entities.gmod_subway_81-722.Buttons.PPZ.SF11Toggle = @[Common.722.SF11] +Entities.gmod_subway_81-722.Buttons.PPZ.SF12Toggle = @[Common.722.SF12] +Entities.gmod_subway_81-722.Buttons.PPZ.SF13Toggle = @[Common.722.SF13] +Entities.gmod_subway_81-722.Buttons.PPZ.SF02Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF14Toggle = @[Common.722.SF14] +Entities.gmod_subway_81-722.Buttons.PPZ.SF15Toggle = @[Common.722.SF15] +Entities.gmod_subway_81-722.Buttons.PPZ.SF16Toggle = @[Common.722.SF16] +Entities.gmod_subway_81-722.Buttons.PPZ.SF17Toggle = @[Common.722.SF17] +Entities.gmod_subway_81-722.Buttons.PPZ.SF18Toggle = @[Common.722.SF18] +Entities.gmod_subway_81-722.Buttons.PPZ.SF19Toggle = @[Common.722.SF19] +Entities.gmod_subway_81-722.Buttons.PPZ.SF20Toggle = @[Common.722.SF20] +Entities.gmod_subway_81-722.Buttons.PPZ.SF21Toggle = @[Common.722.SF21] +Entities.gmod_subway_81-722.Buttons.PPZ.SF22Toggle = @[Common.722.SF22] +Entities.gmod_subway_81-722.Buttons.PPZ.SF23Toggle = @[Common.722.SF23] +Entities.gmod_subway_81-722.Buttons.PPZ.SF24Toggle = @[Common.722.SF24] +Entities.gmod_subway_81-722.Buttons.PPZ.SF25Toggle = @[Common.722.SF25] +Entities.gmod_subway_81-722.Buttons.PPZ.SF26Toggle = @[Common.722.SF26] +Entities.gmod_subway_81-722.Buttons.PPZ.SF27Toggle = @[Common.722.SF27] +Entities.gmod_subway_81-722.Buttons.PPZ.SF03Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF04Toggle = @[Common.ALL.Unsused1] + +Entities.gmod_subway_81-722.Buttons.PVZ.SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-722.Buttons.PVZ.1:SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-722.Buttons.PVZ.SF32Toggle = @[Common.722.SF32] +Entities.gmod_subway_81-722.Buttons.PVZ.SF33Toggle = @[Common.722.SF33] +Entities.gmod_subway_81-722.Buttons.PVZ.SF34Toggle = @[Common.722.SF34] +Entities.gmod_subway_81-722.Buttons.PVZ.SF35Toggle = @[Common.722.SF35] +Entities.gmod_subway_81-722.Buttons.PVZ.SF36Toggle = @[Common.722.SF36] +Entities.gmod_subway_81-722.Buttons.PVZ.SF37Toggle = @[Common.722.SF37] +Entities.gmod_subway_81-722.Buttons.PVZ.SF38Toggle = @[Common.722.SF38] +Entities.gmod_subway_81-722.Buttons.PVZ.SF41Toggle = @[Common.722.SF41] +Entities.gmod_subway_81-722.Buttons.PVZ.SF42Toggle = @[Common.722.SF42] +Entities.gmod_subway_81-722.Buttons.PVZ.SF43Toggle = @[Common.722.SF43] +Entities.gmod_subway_81-722.Buttons.PVZ.SF44Toggle = @[Common.722.SF44] +Entities.gmod_subway_81-722.Buttons.PVZ.SF45Toggle = @[Common.722.SF45] +Entities.gmod_subway_81-722.Buttons.PVZ.SF46Toggle = @[Common.722.SF46] +Entities.gmod_subway_81-722.Buttons.PVZ.SF47Toggle = @[Common.722.SF47] +Entities.gmod_subway_81-722.Buttons.PVZ.SF48Toggle = @[Common.722.SF48] +Entities.gmod_subway_81-722.Buttons.PVZ.SF49Toggle = @[Common.722.SF49] +Entities.gmod_subway_81-722.Buttons.PVZ.SF51Toggle = @[Common.722.SF51] +Entities.gmod_subway_81-722.Buttons.PVZ.SF52Toggle = @[Common.722.SF52] +Entities.gmod_subway_81-722.Buttons.PVZ.SF53Toggle = @[Common.722.SF53] +Entities.gmod_subway_81-722.Buttons.PVZ.SF54Toggle = @[Common.722.SF54] +Entities.gmod_subway_81-722.Buttons.PVZ.SF55Toggle = @[Common.722.SF55] +Entities.gmod_subway_81-722.Buttons.PVZ.SF56Toggle = @[Common.722.SF56] +Entities.gmod_subway_81-722.Buttons.PVZ.SF57Toggle = @[Common.722.SF57] +Entities.gmod_subway_81-722.Buttons.PVZ.SF58Toggle = @[Common.722.SF58] +Entities.gmod_subway_81-722.Buttons.PVZ.SF59Toggle = @[Common.722.SF59] + +Entities.gmod_subway_81-722.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-722.Buttons.CabinDoorL.CabinDoorLeft = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-722.Buttons.CabinDoorR.CabinDoorRight = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-722.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-722.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-722.Buttons.Isolations.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.Isolations.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.StopKran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-722.Buttons.StopKran.UAVAToggle = @[Common.ALL.UAVA2] +Entities.gmod_subway_81-722.Buttons.BTO.K29Toggle = @[Common.ALL.KRMH] +Entities.gmod_subway_81-722.Buttons.BTO.K9Toggle = @[Common.ALL.RVTB] + +#gmod_subway_81-723 +Entities.gmod_subway_81-723.Buttons.PVZ.SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-723.Buttons.PVZ.1:SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-723.Buttons.PVZ.SF32Toggle = @[Common.722.SF32] +Entities.gmod_subway_81-723.Buttons.PVZ.SF33Toggle = @[Common.722.SF33] +Entities.gmod_subway_81-723.Buttons.PVZ.SF34Toggle = @[Common.722.SF34] +Entities.gmod_subway_81-723.Buttons.PVZ.SF35Toggle = @[Common.722.SF35] +Entities.gmod_subway_81-723.Buttons.PVZ.SF36Toggle = @[Common.722.SF36] +Entities.gmod_subway_81-723.Buttons.PVZ.SF37Toggle = @[Common.722.SF37] +Entities.gmod_subway_81-723.Buttons.PVZ.SF38Toggle = @[Common.722.SF38] +Entities.gmod_subway_81-723.Buttons.PVZ.SF41Toggle = @[Common.722.SF41] +Entities.gmod_subway_81-723.Buttons.PVZ.SF42Toggle = @[Common.722.SF42] +Entities.gmod_subway_81-723.Buttons.PVZ.SF43Toggle = @[Common.722.SF43] +Entities.gmod_subway_81-723.Buttons.PVZ.SF44Toggle = @[Common.722.SF44] +Entities.gmod_subway_81-723.Buttons.PVZ.SF45Toggle = @[Common.722.SF45] +Entities.gmod_subway_81-723.Buttons.PVZ.SF46Toggle = @[Common.722.SF46] +Entities.gmod_subway_81-723.Buttons.PVZ.SF47Toggle = @[Common.722.SF47] +Entities.gmod_subway_81-723.Buttons.PVZ.SF48Toggle = @[Common.722.SF48] +Entities.gmod_subway_81-723.Buttons.PVZ.SF49Toggle = @[Common.722.SF49] +Entities.gmod_subway_81-723.Buttons.PVZ.SF51Toggle = @[Common.722.SF51] +Entities.gmod_subway_81-723.Buttons.PVZ.SF52Toggle = @[Common.722.SF52] +Entities.gmod_subway_81-723.Buttons.PVZ.SF53Toggle = @[Common.722.SF53] +Entities.gmod_subway_81-723.Buttons.PVZ.SF54Toggle = @[Common.722.SF54] +Entities.gmod_subway_81-723.Buttons.PVZ.SF55Toggle = @[Common.722.SF55] +Entities.gmod_subway_81-723.Buttons.PVZ.SF56Toggle = @[Common.722.SF56] +Entities.gmod_subway_81-723.Buttons.PVZ.SF57Toggle = @[Common.722.SF57] +Entities.gmod_subway_81-723.Buttons.PVZ.SF58Toggle = @[Common.722.SF58] +Entities.gmod_subway_81-723.Buttons.PVZ.SF59Toggle = @[Common.722.SF59] + +Entities.gmod_subway_81-723.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-723.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-723.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-723.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +Entities.gmod_subway_81-723.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-723.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] + + +#gmod_subway_81-724 +#Buttons: +Entities.gmod_subway_81-724.Buttons.PVZ.SF34Toggle = @[Common.722.SF34] +Entities.gmod_subway_81-724.Buttons.PVZ.SF35Toggle = @[Common.722.SF35] +Entities.gmod_subway_81-724.Buttons.PVZ.SF36Toggle = @[Common.722.SF36] +Entities.gmod_subway_81-724.Buttons.PVZ.SF41Toggle = @[Common.722.SF41] +Entities.gmod_subway_81-724.Buttons.PVZ.SF42Toggle = @[Common.722.SF42] +Entities.gmod_subway_81-724.Buttons.PVZ.SF43Toggle = @[Common.722.SF43] +Entities.gmod_subway_81-724.Buttons.PVZ.SF44Toggle = @[Common.722.SF44] +Entities.gmod_subway_81-724.Buttons.PVZ.SF45Toggle = @[Common.722.SF45] +Entities.gmod_subway_81-724.Buttons.PVZ.SF46Toggle = @[Common.722.SF46] +Entities.gmod_subway_81-724.Buttons.PVZ.SF47Toggle = @[Common.722.SF47] +Entities.gmod_subway_81-724.Buttons.PVZ.SF48Toggle = @[Common.722.SF48] +Entities.gmod_subway_81-724.Buttons.PVZ.SF51Toggle = @[Common.722.SF51] +Entities.gmod_subway_81-724.Buttons.PVZ.SF52Toggle = @[Common.722.SF52] +Entities.gmod_subway_81-724.Buttons.PVZ.SF53Toggle = @[Common.722.SF53] +Entities.gmod_subway_81-724.Buttons.PVZ.SF54Toggle = @[Common.722.SF54] +Entities.gmod_subway_81-724.Buttons.PVZ.SF55Toggle = @[Common.722.SF55] + +Entities.gmod_subway_81-724.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-724.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-724.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-724.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +Entities.gmod_subway_81-724.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-724.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] + +#Spawner: +Entities.gmod_subway_81-722.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-722.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-722.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-722.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-722.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-722.Spawner.SarmatInvert.Name = @[Common.Spawner.SchemeInvert] +Entities.gmod_subway_81-722.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-722.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-722.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-722.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-722.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] + +]] diff --git a/lua/metrostroi_data/languages/it_base.lua b/lua/metrostroi_data/languages/it_base.lua new file mode 100644 index 0000000..a76b090 --- /dev/null +++ b/lua/metrostroi_data/languages/it_base.lua @@ -0,0 +1,395 @@ +return [[ +#Base text for Italian language + +[it] +lang = Italiano #Full language name +AuthorText = Translation Author: PlayMaster6176[PoG] #Author text + +#Workshop errors +Workshop.Title = Manager dei contenuti +Workshop.FilesMissing = Addon mancanti o corrotti.\nse l'addon è stato installato dal workshop , prova a eliminare il seguente file:\nGarrysMod/garrysmod/%s. +Workshop.FilesMissingLocaly = Addon mancanti o corrotti. +Workshop.InstalledLocaly = Installato (localmente) +Workshop.NotInstalledE = Non installato.\nIscriviti all'addon e verifica che sia presente nel "Addons" menu. +Workshop.NotInstalled = Non installato. +Workshop.Disabled = Disabilitato.\nAbilitalo dal "Addons" menu. +Workshop.Installed = Installato +Workshop.Open = Workshop +Workshop.ErrorGithub = Rilevato versione GitHub di Metrostroi. La seguente versione di metrostroi non è compatibile e non funziona con la versione GitHub di Metrostroi. +Workshop.ErrorLegacy = Rilevata versione legacy di Metrostroi. La versione corrente di Metrostroi non è compatibile e non funziona con la versione legacy di Metrostroi. +Workshop.ErrorEnhancers = Questo addon contiene un potenziatore grafico che potrebbe interferire con l'esperienza di gioco. +Workshop.Error1 = Questo addon contiene un vecchio codice script di Metrostroi che è in conflitto con la versione corrente. Può causare "scriptscript" e l'instabilità dell'addon. + +#Client settings +Panel.Admin = Admin +Panel.RequireThirdRail = Richiede il terzo binario + +Panel.Client = Utente +Panel.Language = Seleziona lingua +Panel.DrawCams = Render telecamera +Panel.DisableHUD = Disabilita l'HUD nella sedia del macchinista +Panel.DisableCamAccel = Disabilita accellerazione della visuale +Panel.DisableHoverText = Disable hover text +Panel.ScreenshotMode = Modalità screenshot (FPS Bassi) +Panel.ShadowsHeadlight = Abilita ombre faro +Panel.RedLights = Abilita le luci dinamiche\ndelle luci rosse +Panel.ShadowsOther = Abilita le ombre dagli altri\nlight sources +Panel.MinimizedShow = Non scaricare nessun elemento\nwhen minimizzato +Panel.FOV = FOV +Panel.Z = Altezza della videocamera +Panel.RenderDistance = Distanza di rendering +Panel.ReloadClient = Ricarica lato utente + +Panel.ClientAdvanced = Utente (Avanzato) +Panel.DrawDebugInfo = Disegna le informazioni di debug +Panel.CheckAddons = Verifica addons +Panel.DrawSignalDebugInfo = Segnala informazioni di debug +Panel.ReloadLang = Ricarica linguaggi +Panel.SoftDraw = Tempo di caricamento degli elementi del treno +Panel.SoftReloadLang = Non ricaricare uno spawnmenu + + + +#Common train +Train.Common.Camera0 = Sedia del macchinista +Train.Common.RouteNumber = Numero itinerario +Train.Common.LastStation = Ultima stazione +Train.Common.HelpersPanel = Pannello aiutanti +Train.Common.UAVA = UAVA +Train.Common.PneumoPanels = Valvola pneumatica +Train.Common.Voltmeters = Voltometro e amperometro +Train.Common.CouplerCamera = Accoppiamento +Common.ARM.Monitor1 = Monitor 1 Armato +Train.Buttons.Sealed = Sigillato + +#Train entities +Entities.gmod_subway_base.Name = Metropolitana base +Entities.gmod_subway_81-502.Name = 81-502 (Ema-502 Testa) +Entities.gmod_subway_81-501.Name = 81-501 (Em-501 Intermedio) +Entities.gmod_subway_81-702.Name = 81-702 (D Testa) +Entities.gmod_subway_81-702_int.Name = 81-702 (D Intermedio) +Entities.gmod_subway_81-703.Name = 81-703 (E Testa) +Entities.gmod_subway_81-703_int.Name = 81-703 (E Intermedio) +Entities.gmod_subway_ezh.Name = 81-707 (Ezh Testa) +Entities.gmod_subway_ezh1.Name = 81-708 (Ezh1 Intermedio) +Entities.gmod_subway_ezh3.Name = 81-710 (Ezh3 Testa) +Entities.gmod_subway_em508t.Name = 81-508T (Em-508T Intermedio) +Entities.gmod_subway_81-717_mvm.Name = 81-717 (Moscow Testa) +Entities.gmod_subway_81-717_mvm_custom.Name = 81-717 (Moscow personalizzato) +Entities.gmod_subway_81-714_mvm.Name = 81-714 (Moscow Intermedio) +Entities.gmod_subway_81-717_lvz.Name = 81-717 (St. Petersburg Testa) +Entities.gmod_subway_81-714_lvz.Name = 81-714 (St. Petersburg Intermedio) +Entities.gmod_subway_81-718.Name = 81-718 (TISU Testa) +Entities.gmod_subway_81-719.Name = 81-719 (TISU Intermedio) +Entities.gmod_subway_81-720.Name = 81-720 (Yauza Testa) +Entities.gmod_subway_81-721.Name = 81-721 (Yauza Intermedio) +Entities.gmod_subway_81-722.Name = 81-722 (Yubileyniy Testa) +Entities.gmod_subway_81-723.Name = 81-723 (Yubileyniy Intermedio motore) +Entities.gmod_subway_81-724.Name = 81-724 (Yubileyniy Intermedio rimorchio) +Entities.gmod_subway_81-7036.Name = 81-7036 (Non funziona) +Entities.gmod_subway_81-7037.Name = 81-7037 (Non funziona) +Entities.gmod_subway_tatra_t3.Name = Tatra T3 + +#Train util entities +Entities.gmod_train_bogey.Name = Carrello +Entities.gmod_train_couple.Name = Accoppiatore + +#Other entities +Entities.gmod_track_pui.Name = PUI +Entities.gmod_track_mus_elektronika7.Name = "Electronika" Orologio +Entities.gmod_mus_clock_analog.Name = Orologio analogico +Entities.gmod_track_clock_time.Name = Grande orologio intervallo (Tempo) +Entities.gmod_track_clock_small.Name = Piccolo orologio intervallo +Entities.gmod_track_clock_interval.Name = Grande orologio (intervallo) +Entities.gmod_track_switch.Name = Scambio +Entities.gmod_track_powermeter.Name = Misuratore corrente rotaie +Entities.gmod_track_arm.Name = ARM DSCP +Entities.gmod_track_udochka.Name = Connettore di corrente +Entities.gmod_train_spawner.Name = Spawna treno +Entities.gmod_train_special_box.Name = Consegna speciale + +#Weapons +Weapons.button_presser.Name = Premi bottoni +Weapons.button_presser.Purpose = Usato per premere i bottoni della mappa. +Weapons.button_presser.Instructions = Guarda il pulsante e fai clic sul pulsante "Attacca". +Weapons.train_key.Name = Chiave dell'amministratore +Weapons.train_key.Purpose = Utilizzato per premere i pulsanti degli amministratori. +Weapons.train_key.Instructions = Guarda il pulsante amministratore e premi il pulsante "Attacca". +Weapons.train_kv_wrench.Name = Chiave dell'invertitore +Weapons.train_kv_wrench.Purpose = Utilizzato nel treno per premere i pulsanti in essi. +Weapons.train_kv_wrench.Instructions = premi il pulsante "Attacca" per interagire col treno. +Weapons.train_kv_wrench_gold.Name = La chiave dell'invertitore dorata + +Weapons.train_kv_wrench_gold.Purpose = @[Weapons.train_kv_wrench.Purpose] +Weapons.train_kv_wrench_gold.Instructions = @[Weapons.train_kv_wrench.Instructions] + +#Spawner common +Spawner.Title = Spawner di treni +Spawner.Spawn = Spawn +Spawner.Close = Chiudi +Spawner.Trains1 = Wags. permesso +Spawner.Trains2 = Per player +Spawner.WagNum = Numero di vagoni +Common.Spawner.Texture = Skin del treno +Common.Spawner.PassTexture = Skin degli interni +Common.Spawner.CabTexture = Skin della cabina +Common.Spawner.Announcer = Tipo di annunciatore +Common.Spawner.Type1 = Tipo 1 +Common.Spawner.Type2 = Tipo 2 +Common.Spawner.Type3 = Tipo 3 +Common.Spawner.Type4 = Tipo 4 +Common.Spawner.SpawnMode = Stato del treno +Common.Spawner.SpawnMode.Deadlock = Completamente spento +Common.Spawner.SpawnMode.Full = Completamente pronto +Common.Spawner.SpawnMode.NightDeadlock = Completamente spento dopo la notte +Common.Spawner.SpawnMode.Depot = Deposito +Spawner.Common.EType = Circuiti elettrici type +Common.Spawner.Scheme = Schema linea +Common.Spawner.Random = Casuale +Common.Spawner.Old = Vecchio +Common.Spawner.New = Nuovo +Common.Spawner.Type = Tipo +Common.Spawner.SchemeInvert = Inverti schema linea + +#Coupler common +Common.Couple.Title = Menu accoppiatore +Common.Couple.CoupleState = Stato dell' accoppiatore +Common.Couple.Coupled = Accoppiato +Common.Couple.Uncoupled = Non accoppiato +Common.Couple.Uncouple = Sgancia +Common.Couple.IsolState = Stato delle valvole di isolamento +Common.Couple.Isolated = Isolato +Common.Couple.Opened = Aperto +Common.Couple.Open = Apri +Common.Couple.Isolate = Isola +Common.Couple.EKKState = EKK stato (Connessione elettrica) +Common.Couple.Disconnected = Disconesso +Common.Couple.Connected = Connesso +Common.Couple.Connect = Connetti +Common.Couple.Disconnect = Disconetti + +#Bogey common +Common.Bogey.Title = Menu carrello +Common.Bogey.ContactState = Stato attuale dei contatti +Common.Bogey.CReleased = Rilasciato +Common.Bogey.CPressed = Premuto +Common.Bogey.CPress = Premi +Common.Bogey.CRelease = Rilascia +Common.Bogey.ParkingBrakeState = Stato freno di parcheggio +Common.Bogey.PBDisabled = Disabilitato manualmente +Common.Bogey.PBEnabled = Abilitato +Common.Bogey.PBEnable = Abilita +Common.Bogey.PBDisable = Disabilitazione manuale + +#Trains common +Common.ALL.Unsused1 = Non utilizzato +Common.ALL.Unsused2 = (non utilizzato) +Common.ALL.Up = (su) +Common.ALL.Down = (giù) +Common.ALL.Left = (sinistra) +Common.ALL.Right = (destra) +Common.ALL.CW = (senzo orario) +Common.ALL.CCW = (Contatore senzo orario) +Common.ALL.VB = VB: Batteria on/off +Common.ALL.VSOSD = SOSD: Indicatore apertura porte stazione +Common.ALL.VKF = VKF: Batteria per luci rosse +Common.ALL.VB2 = (Basso voltaggio) +Common.ALL.VPR = VPR: Stazione radio treno +Common.ALL.VASNP = ASNP Corrente +Common.ALL.UOS = RC-UOS: Dispositivo limitazione velocità (Guida w/o EPV/EPK) +Common.ALL.VAH = VAH: Modalità guida d'emergenza (failure of RPB relay) +Common.ALL.KAH = KAH: Bottone per guida d'emergenza w/o ARS +Common.ALL.KAHK = KAH Copri bottone +Common.ALL.VAD = VAD: Emergenza oltrepassato porta chiusa (Errore del KD relay) +Common.ALL.OVT = OVT: Disabilita la valvola del freno pneumatico +Common.ALL.VOVT = VOVT: Disabilita i freni (valvola pneumatica) +Common.ALL.EmergencyBrakeValve = Freno d'emergenza +Common.ALL.ParkingBrake = Freno di parcheggio +Common.ALL.VU = VU: Interruttore di controllo del treno +Common.ALL.KDP = KDP: Apri le porte di DESTRA +Common.ALL.KDPL = Selezionato apertura porte DESTRA +Common.ALL.KDPK = Copri bottone di apertura porte DESTRA +Common.ALL.KDL = KDL: Apri le porte di SINISTRA +Common.ALL.KDLL = Selezionato apertura porte SINISTRA +Common.ALL.KDLK = Copri bottone di apertura porte SINISTRA +Common.ALL.KDLPK = Copri bottoni porte +Common.ALL.KRZD = KRZD: Chiusura d'emergenza delle porte +Common.ALL.VSD = Selettore lato di apertura porte +Common.ALL.Ring = Squillo +Common.ALL.VUD = VUD: Interruttore di controllo delle porte (Chiudi porte) +Common.ALL.KDPH = Aprire le porte a destra dell'ultima vettura +Common.ALL.VUD2 = VUD2: Close doors from the helper's side +Common.ALL.Program1 = Programma I +Common.ALL.Program2 = Programma II +Common.ALL.VRP = VRP: Ripristinare il relè di sovraccarico +Common.ALL.VRPBV = VRP: Ripristinare il relè di sovraccarico, abilitare BV +Common.ALL.KSN = KSN: Segnalatore di malfunzionamento +Common.ALL.VMK = VMK: Compressore +Common.ALL.MK = Compressore (without acronym) +Common.ALL.VF1 = Fari primari +Common.ALL.VF2 = Fari secondari +Common.ALL.VF = Interruttori fari +Common.ALL.VUS = VUS: Luci fari LUMINOSO / BASSO +Common.ALL.GaugeLights = Illuminazione strumenti +Common.ALL.CabLights = Luci cabina +Common.ALL.PassLights = Luci compartimento passeggieri +Common.ALL.PanelLights = Illuminazione del pannello di controllo +Common.ALL.RMK = RMK: Compressore d'emergenza +Common.ALL.KRP = KRP: Bottone partenza d'emergenza +Common.ALL.VZP = VZP: Disabilita il ritardo della guida +Common.ALL.VZD = VZD: Disabilita il ritardo delle porte +Common.ALL.VAV = VAV: Interruttore guida automatica +Common.ALL.RouteNumber1+ = Aumenta la PRIMA cifra dell'itinerario +Common.ALL.RouteNumber1- = Diminuisci la PRIMA cifra dell'itinerario +Common.ALL.RouteNumber2+ = Aumenta la SECONDA cifra dell'itinerario +Common.ALL.RouteNumber2- = Diminuisci la SECONDA cifra dell'itinerario +Common.ALL.RouteNumber3+ = Aumenta la TERZA cifra dell'itinerario +Common.ALL.RouteNumber3- = Diminuisci la TERZA cifra dell'itinerario +Common.ALL.LastStation+ = Prossima ultima stazione +Common.ALL.LastStation- = Ultima stazione precedente +Common.ALL.RRP = RP: Spia rossa sovraccarico del relè (i circuiti di alimetazione non sono riusciti a funzionare) +Common.ALL.GRP = RP: Spia verde sovraccarico del relè (impedisce la sovraccarico dei motori) +Common.ALL.RP = RP: Spia rossa sovraccarico del relè (i circuiti di potenza non sono riusciti a funzionare o RP attivo) +Common.ALL.SN = LSN: Failure indicator light (power circuits failed to assemble) +Common.ALL.PU = Indicatore modalità di alimentazione ridotta +Common.ALL.BrT = Freni pneumatici del treno in funzione +Common.ALL.BrW = Freni pneumatici dei vagoni in funzione +Common.ALL.ARS = ARS: Interruttore di regolazione della velocità automatico +Common.ALL.ARSR = ARS-R: Interruttore di regolazione della velocità automatico in modalita ARS-R +Common.ALL.ALS = ALS: Lettore segnali automatico del treno +Common.ALL.RCARS = RC-ARS: I circuiti del ARS si sono disconessi (same as RC-1) +Common.ALL.RC1 = RC-1: I circuiti del ARS si sono disconessi +Common.ALL.EPK = ARS Valvola elettropneumatica (EPK) +Common.ALL.EPV = ARS Valvola elettropneumatica (EPV) +Common.ARS.LN = LN: Direzione del segnale +Common.ARS.KT = KT: Indicatore di controllo frenata +Common.ARS.VD = VD: Modalià di guida bloccata dall'ARS +Common.ARS.Freq = ALS interruttore del decoder +Common.ARS.FreqD = (su 1/5, giù 2/6) +Common.ARS.FreqU = (su 2/6, giù 1/5) +Common.ARS.VP = Modalità "Treno ausiliario" +Common.ARS.RS = RS: Indicatore velocità uguale (Per il prossimo segmento la velocità è uguale o maggiore) +Common.ARS.AB = Modalità autobloccante ARS +Common.ARS.ABButton = Bottone di modalità autobloccante ARS +Common.ARS.ABDriver = (Macchinista) +Common.ARS.ABHelper = (Aiutante) +Common.ARS.AV = Malfunzionamento dell'unità ARS-MP principale +Common.ARS.AV1 = Malfunzionamento dell'unità ARS-MP di ricambio +Common.ARS.AB2 = Pulsante di modalità ARS con blocco automatico +Common.ARS.ARS = Modalità ARS +Common.ARS.LRD = LRD: Permesso di movimento (quando 0 su ALS) +Common.ARS.VRD = VRD: Consenti il movimento(quando 0 su ALS) +Common.ARS.KB = KB: Pulsante di attenzione +Common.ARS.KVT = KVT: Pulsante di percezione del freno +Common.ARS.KVTR = KVT: Pulsante di percezione freno ARS-R +Common.ARS.04 = OCh: Nessuna frequenza ARS +Common.ARS.N4 = NCh: Nessuna frequenza ARS (same as OCh but NCh) +Common.ARS.0 = 0: ARS Segnale di stop +Common.ARS.40 = Limite di velocità 40 km/h +Common.ARS.60 = Limite di velocità 60 km/h +Common.ARS.70 = Limite di velocità 70 km/h +Common.ARS.80 = Limite di velocità 80 km/h +Common.ALL.RCBPS = RC-BPS: Interruttore unità antirollio +Common.BPS.On = Funzionamento dell'unità antirollio +Common.BPS.Err = Errore unità antirollio +Common.BPS.Fail = Malfunzionamento dell'unità antirollio +Commom.NMnUAVA.NMPressureLow = Indicatore di bassa pressione +Commom.NMnUAVA.UAVATriggered = UAVA Contatti aperti +Common.ALL.LSD = Luce indicatore delle porte del treno (le porte sono chiuse) +Common.ALL.L1w = Primo indicatore (modalità di guida abilitata) +Common.ALL.L2w = Secondo indicatore (movimento del controller reostato) +Common.ALL.L6w = Sesto indicatore (modalità di frenatura inserita) +Common.ALL.Horn = Clacson +Common.ALL.DriverValveBLDisconnect = Brake line disconnect valve +Common.ALL.DriverValveTLDisconnect = Train line disconnect valve +Common.ALL.DriverValveDisconnect = Valvola di disconnessione valvola del conducente +Common.ALL.KRMH = KRMSH: Abilitazione di emergenza della valvola del conducente +Common.ALL.RVTB = RVTB: Valvola riservata del freno di sicurezza +Common.ALL.FrontBrakeLineIsolationToggle = Valvola di isolamento della linea del freno +Common.ALL.FrontTrainLineIsolationToggle = Valvola di isolamento della linea del treno +Common.ALL.RearTrainLineIsolationToggle = Valvola di isolamento della linea del treno +Common.ALL.RearBrakeLineIsolationToggle = Valvola di isolamento della linea del freno +Common.ALL.UAVA = UAVA: Abilita disabilitazione automatica del autostop \n(abilitata dopo la caduta di pressione del freno) +Common.ALL.UAVA2 = UAVA: Abilita la disabilitazione automatica dell'autostop +Common.ALL.UAVAContact = UAVA: Resetta i contatti +Common.ALL.OAVU = OAVU: Interruttore disabilitazione AVU +Common.ALL.LAVU = AVU è attivato +Common.ALL.GV = Switch principale +Common.ALL.AirDistributor = VRN: Disabilita distribuzione aria +Common.ALL.CabinDoor = Porta cabina del macchinista +Common.ALL.PassDoor = Porta dell'abitacolo +Common.ALL.FrontDoor = Porta anteriore +Common.ALL.RearDoor = Porta posteriore +Common.ALL.OtsekDoor1 = Prima maniglia armadietto +Common.ALL.OtsekDoor2 = Seconda maniglia armadietto +Common.ALL.CouchCap = Tira fuori il sedile + +Common.ALL.UNCh = UNCh: Interruttore amplificatore di bassa frequenza +Common.ALL.ES = ES: Interruttore controllo comunicazione di emergenza +Common.ALL.GCab = Altoparlante: Interruttore annuncio in cabina +Common.ALL.UPO = UPO: Annunciatore +Common.ALL.R_Radio = Annunciatore +Common.ALL.AnnPlay = Annunciatore in riproduzione + +#RRI +Train.Common.RRI = RRI: Radio-relè annunciatore +Common.RRI.RRIUp = RRI: Imposta giù +Common.RRI.RRIDown = RRI: Imposta su +Common.RRI.RRILeft = RRI: Imposta sinistra +Common.RRI.RRIRight = RRI: Imposta destra +Common.RRI.RRIEnableToggle = RRI: Alimentazione +Common.RRI.RRIRewindSet2 = RRI: Avanti veloce +Common.RRI.RRIRewindSet0 = RRI: Riavvolgi +Common.RRI.RRIAmplifierToggle = RRI: Amplificatore +Common.RRI.RRIOn = RRI: spia operazione + +#ASNP +Train.Common.ASNP = ASNP +Common.ASNP.ASNPMenu = ASNP: Menu +Common.ASNP.ASNPUp = ASNP: Su +Common.ASNP.ASNPDown = ASNP: Giù +Common.ASNP.ASNPOn = ASNP: Accenzione + +#PVK +Common.CabVent.PVK- = Diminuisci potenza ventilazione cabina +Common.CabVent.PVK+ = Aumenta potenza ventilazione cabina + +#IGLA +Train.Common.IGLA = IGLA +Common.IGLA.Button1Up = IGLA: Primo pulsante su +Common.IGLA.Button1 = IGLA: Primo pulsante +Common.IGLA.Button1Down = IGLA: Primo pulsante giù +Common.IGLA.Button2Up = IGLA: Secondo pulsante su +Common.IGLA.Button2 = IGLA: Secondo pulsante +Common.IGLA.Button2Down = IGLA: Secondo pulsante giù +Common.IGLA.Button23 = IGLA: Secondo e terzo pulsante +Common.IGLA.Button3 = IGLA: Terzo pulsante +Common.IGLA.Button4 = IGLA: Quarto pulsante +Common.IGLA.IGLASR = IGLA: Alimentazione +Common.IGLA.IGLARX = IGLA: Nessuna connessione +Common.IGLA.IGLAErr = IGLA: Errore +Common.IGLA.IGLAOSP = IGLA: Sistema di estinzione è attivo +Common.IGLA.IGLAPI = IGLA: Fuoco +Common.IGLA.IGLAOff = IGLA: HV circuiti spenti + +#BZOS +Common.BZOS.On = Interruttore allarme di sicurezza#FIXME +Common.BZOS.VH1 = Allarme di sicurezza attivo +Common.BZOS.VH2 = Allarme di sicurezza innescato +Common.BZOS.Engaged = Allarme innescato + +#Train helpers common +Common.ALL.SpeedCurr = Velocità effettiva +Common.ALL.SpeedAccept = Velocità autorizzata +Common.ALL.SpeedAttent = Velocità autorizzate al prossimo segmento +Common.ALL.Speedometer = Tachimetro +Common.ALL.BLTLPressure = Pressione nelle linee pneumatiche (rosso: linea freni, nero: linea treno) +Common.ALL.BCPressure = Pressione nel cilindro del freno +Common.ALL.EnginesCurrent = Corrente motori (A) +Common.ALL.EnginesCurrent1 = Corrente di trazione motore 1 (A) +Common.ALL.EnginesCurrent2 = Corrente di trazione motore 2 (A) +Common.ALL.EnginesVoltage = Voltaggio motori (kV) +Common.ALL.BatteryVoltage = Voltaggio batteria (V) +Common.ALL.BatteryCurrent = Corrente batteria (A) +Common.ALL.HighVoltage = Alto voltaggio (kV) +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/kr_502.lua b/lua/metrostroi_data/languages/kr_502.lua new file mode 100644 index 0000000..68e7de8 --- /dev/null +++ b/lua/metrostroi_data/languages/kr_502.lua @@ -0,0 +1,274 @@ +return [[ +#81-502 + +[kr] + +#######Buttons########### +#Common +Common.502.KS = KSAUP ìž‘ë™ í‘œì‹œë“± +Common.502.AV = ATO ìž‘ë™ ì¤‘ +Common.502.SD = SD: 출입문 ìƒíƒœ 표시등 (출입문 닫힘) +Common.502.SDW = SD: 출입문 ìƒíƒœ 표시등 (출입문 열림) +Common.502.L3w = 차량 회로 3 표시등 (X3 모드) +Common.502.L4w = 차량 회로 4 표시등 (후진 ë°©í–¥) +Common.502.L5w = 차량 회로 5 표시등 (ì „ì§„ ë°©í–¥) +Common.502.L16w = 차량 회로 16 표시등 (출입문 ì—°ë™) +Common.502.L20w = 차량 회로 20 표시등 (LK2/LK5 차단, 부드럽게 분리) +Common.502.L23w = 차량 회로 23 표시등 (공기 압축기 제어) +Common.502.RK1 = 첫번째 RK 위치 제어 +Common.502.BRD = 출입문 고장 표시등 +Common.502.KOS = KB: ì†ë„ 제한 버튼 (í™•ì¸ ë²„íŠ¼) +Common.502.VAK = AK: ë¹„ìƒ ì£¼í–‰ 모드 회로 ì—°ê²° +Common.502.LRU = ë¹„ìƒ ì£¼í–‰ 모드 회로 ìž‘ë™ ì¤‘ + +#Spawner +Spawner.502.TypeNVL = NVL 사양 차량 +Spawner.502.TypeKVLO = KVL 사양 구형 차량 +Spawner.502.TypeKVLN = KVL 사양 신형 차량 +Spawner.502.EWagons = "E" í˜•ì‹ ê°ì°¨ 추가 + +#gmod_subway_81-502 +Entities.gmod_subway_81-502.Buttons.VBA.VBAToggle = ìžë™ ìš´ì „ 배터리 투입/차단 + +Entities.gmod_subway_81-502.Buttons.AV.VRUToggle = VRU: ë¹„ìƒ ìš´ì „ 모드 +Entities.gmod_subway_81-502.Buttons.AV.KPVUToggle = KPVU: 공압 밸브 ì œë™ ë¹„í™œì„±ê¸° 사용 중지 +Entities.gmod_subway_81-502.Buttons.AV.KSDToggle = KSD: 출입문 ì—°ë™ ì œì–´ 사용 중지 +Entities.gmod_subway_81-502.Buttons.AV.KAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-502.Buttons.AV.KADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-502.Buttons.AV.OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-502.Buttons.AV.VKFToggle = @[Common.ALL.VKF] + + +Entities.gmod_subway_81-502.Buttons.RCAV3.RCAV3Toggle = KSAUP 회로 차단기 (AV3) +Entities.gmod_subway_81-502.Buttons.RCAV4.RCAV4Toggle = KSAUP 회로 차단기 (AV4) +Entities.gmod_subway_81-502.Buttons.RCAV5.RCAV5Toggle = KSAUP 회로 차단기 (AV5) +Entities.gmod_subway_81-502.Buttons.RCARS.RCARSToggle = @[Common.ALL.RCARS] +Entities.gmod_subway_81-502.Buttons.RCBPS.RCBPSToggle = @[Common.ALL.RCBPS] + +Entities.gmod_subway_81-502.Buttons.VRD2.2:VRDSet = @[Common.ARS.VRD] +Entities.gmod_subway_81-502.Buttons.VRD2.!LVRD = @[Common.ARS.LRD] + +Entities.gmod_subway_81-502.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-502.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-502.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-502.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-502.Buttons.AV1.VU3Toggle = @[Common.703.VU3] +Entities.gmod_subway_81-502.Buttons.UPO.R_UPOToggle = @[Common.ALL.UPO] + +Entities.gmod_subway_81-502.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_81-502.Buttons.VRD.VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-502.Buttons.HelperPanel.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.HelperPanel.KDPHSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-502.Buttons.AV2.VSOSDToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-502.Buttons.AV2.VRToggle = @[Common.ALL.VPR] + +Entities.gmod_subway_81-502.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLampAutodrive = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LDoorsWag = @[Common.502.SDW] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LDoors = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LGreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LRedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLampAutodrive = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RDoorsWag = @[Common.502.SDW] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RDoors = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RGreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RRedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_80 = @[Common.ARS.80] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_70 = @[Common.ARS.70] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_60 = @[Common.ARS.60] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_40 = @[Common.ARS.40] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_00 = @[Common.ARS.0] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_04 = @[Common.ARS.N4] + +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_KS = @[Common.502.KS] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_AV = @[Common.502.AV] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_4 = @[Common.502.L4w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_5 = @[Common.502.L5w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_DT = @[Common.ALL.BrT] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_20 = @[Common.502.L20w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_1P = @[Common.502.RK1] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SN1 = @[Common.ALL.RP] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SN2 = @[Common.ALL.SN] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_3 = @[Common.502.L3w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SD1 = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SD2 = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_RP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_DV = @[Common.502.BRD] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!CPS_Pd = @[Common.ARS.LRD] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_04 = @[Common.ARS.04] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_00 = @[Common.ARS.0] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_40 = @[Common.ARS.40] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_60 = @[Common.ARS.60] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_70 = @[Common.ARS.70] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_80 = @[Common.ARS.80] + +Entities.gmod_subway_81-502.Buttons.Main1.2:VUSToggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-502.Buttons.Main1.2:HeadlightsToggle = @[Common.ALL.VF1] +Entities.gmod_subway_81-502.Buttons.Main1.!LKTLight = @[Common.ARS.KT] +Entities.gmod_subway_81-502.Buttons.Main1.!LKVDLight = @[Common.ARS.VD] +Entities.gmod_subway_81-502.Buttons.Main1.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-502.Buttons.Main1.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-502.Buttons.Main1.2:KBSet = @[Common.ARS.KB] +Entities.gmod_subway_81-502.Buttons.Main1.2:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.Main1.2:LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-502.Buttons.Main1.2:LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-502.Buttons.Main1.2:VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-502.Buttons.Main1.2:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-502.Buttons.Main1.2:KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-502.Buttons.Main1.2:VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-502.Buttons.Main1.2:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-502.Buttons.Main1.2:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-502.Buttons.Main1.2:VAKSet = @[Common.502.VAK] +Entities.gmod_subway_81-502.Buttons.Main1.2:VUDToggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-502.Buttons.Main1_2.!LMK2 = @[Common.502.L23w] +Entities.gmod_subway_81-502.Buttons.Main1_2.!LVRD2 = @[Common.ARS.LRD] + +Entities.gmod_subway_81-502.Buttons.Main2.KOSSet = @[Common.502.KOS] +Entities.gmod_subway_81-502.Buttons.Main2.!LMK = @[Common.502.L23w] +Entities.gmod_subway_81-502.Buttons.Main2.VZPToggle = @[Common.ALL.VZP] +Entities.gmod_subway_81-502.Buttons.Main2.VZDSet = @[Common.ALL.VZD] +Entities.gmod_subway_81-502.Buttons.Main2.!L16 = @[Common.502.L16w] +Entities.gmod_subway_81-502.Buttons.Main2.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-502.Buttons.Main2.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.Main2.LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-502.Buttons.Main2.LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-502.Buttons.Main2.VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-502.Buttons.Main2.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-502.Buttons.Main2.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-502.Buttons.Main2.KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-502.Buttons.Main2.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-502.Buttons.Main2.!RU = @[Common.502.LRU] +Entities.gmod_subway_81-502.Buttons.Main2.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-502.Buttons.Main2.VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-502.Buttons.Main2.VAKSet = @[Common.502.VAK] +Entities.gmod_subway_81-502.Buttons.Main2.AutodriveToggle = @[Common.ALL.VAV] +Entities.gmod_subway_81-502.Buttons.Main2.VUDToggle = @[Common.ALL.VUD] + +Entities.gmod_subway_81-502.Buttons.BPS.!BPSon = @[Common.BPS.On] +Entities.gmod_subway_81-502.Buttons.BPS.!BPSErr = @[Common.BPS.Err] +Entities.gmod_subway_81-502.Buttons.BPS.!BPSFail = @[Common.BPS.Fail] +Entities.gmod_subway_81-502.Buttons.NMnUAVA.!NMPressureLow = @[Commom.NMnUAVA.NMPressureLow] +Entities.gmod_subway_81-502.Buttons.NMnUAVA.!UAVATriggered = @[Commom.NMnUAVA.UAVATriggered] + +Entities.gmod_subway_81-502.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-502.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-502.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-502.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-502.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-502.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-502.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-502.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-502.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-502.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-502.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-502.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-502.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-502.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber3+ = @[Common.ALL.RouteNumber3+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber3- = @[Common.ALL.RouteNumber3-] + +Entities.gmod_subway_81-502.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-502.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-502.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-502.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-502.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-502.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-501 +Entities.gmod_subway_81-501.Buttons.AV.KPVUToggle = @[Entities.gmod_subway_81-502.Buttons.AV.KPVUToggle] +Entities.gmod_subway_81-501.Buttons.AV.KSDToggle = @[Entities.gmod_subway_81-502.Buttons.AV.KSDToggle] + +Entities.gmod_subway_81-501.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-501.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-501.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-501.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-501.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-501.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_81-501.Buttons.Main.!GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-501.Buttons.Main.!RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-501.Buttons.Main.!SD = @[Common.703.SD] +Entities.gmod_subway_81-501.Buttons.Main.LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-501.Buttons.Main.LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-501.Buttons.Main.VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-501.Buttons.Main.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-501.Buttons.Main.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-501.Buttons.Main.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-501.Buttons.Main.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-501.Buttons.Main.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-501.Buttons.Main.VUDToggle = @[Common.ALL.VUD] + +Entities.gmod_subway_81-501.Buttons.HelperPanel.VDLSet = @[Common.ALL.KDL] + +Entities.gmod_subway_81-501.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-501.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-501.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-501.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-501.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-501.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-501.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-501.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-501.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-501.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-501.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-501.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-501.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-501.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-501.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-501.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] + +Entities.gmod_subway_81-501.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#Cameras: +Train.502.AV = 스위치류 +Train.502.VBA = @[Entities.gmod_subway_81-502.Buttons.VBA.VBAToggle] +Train.502.VRD = VRD +Train.502.RCARS = RC-ARS +Train.502.RCAV5 = RC-AV5 +Train.502.RCBPS = RC-BPS +Train.502.RCAV3 = RC-AV3 +Train.502.RCAV4 = RC-AV4 + +#Spawner: +Entities.gmod_subway_81-502.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-502.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-502.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-502.Spawner.EMAType.Name = @[Spawner.Common.EType] +Entities.gmod_subway_81-502.Spawner.EMAType.1 = @[Spawner.502.TypeNVL] +Entities.gmod_subway_81-502.Spawner.EMAType.2 = @[Spawner.502.TypeKVLO] +Entities.gmod_subway_81-502.Spawner.EMAType.3 = @[Spawner.502.TypeKVLN] +Entities.gmod_subway_81-502.Spawner.EWagons.Name = @[Spawner.502.EWagons] +Entities.gmod_subway_81-502.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-502.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-502.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-502.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-502.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/kr_702.lua b/lua/metrostroi_data/languages/kr_702.lua new file mode 100644 index 0000000..b3d8bde --- /dev/null +++ b/lua/metrostroi_data/languages/kr_702.lua @@ -0,0 +1,752 @@ +return [[ +#D/E-based types + +[kr] + +#Cameras: +Train.702.Breakers1 = 배터리 스위치 +Train.702.Breakers2 = 조명 스위치류 +Train.702.Breakers3 = 주 회로 차단기 +Train.703.Breakers1 = 배터리 스위치 +Train.703.Breakers2 = 주 회로 차단기, 조명 스위치류 +Train.703.Parking = 주차 ì œë™ê¸°, UAVA +Train.703.RCARS = RC-1: ARS 회로 차단기 +Train.703.AVU = AVU 블럭 + +#Spawner +Spawner.707.Type = 운전대 종류 +Spawner.707.Type1 = 구형 + RRI +Spawner.707.Type2 = 신형 + ASNP +Spawner.710.RRI = 무선 중계 안내방송기 + +#######Buttons########### +#Common +Common.702.VZ1 = 공압 밸브 â„–1 +Common.703.ParkingBrakeLeft = 주차 ì œë™ ì™„í•´ +Common.703.ParkingBrakeRight = 주차 ì œë™ ì²´ê²° +Common.703.KSD = KSD: 출입문 ì—°ë™ ì œì–´ 버튼 +Common.703.SD = @[Common.502.SDW] +Common.703.VU1 = 운전실 난방기 +Common.703.VU2 = 비ìƒë“± +Common.703.VU3 = 운전실 조명 +Common.703.AV = 주 회로 차단기 (ê³ ì „ì•• 회로) +Common.703.LOn = 조명 켜기 +Common.703.LOff = 조명 ë„기 +Common.703.KRR = KRR: RK를 첫번째 위치로 회전 +Common.703.RUT = RUT ì¡°ì • (ê°€ì†ë ¥ ê°ì†Œ) +Common.707.SEQ = 가변 저항 제어기 ë™ìž‘ 표시등 +Common.707.TAH = TAH: ë¹„ìƒ ìš´ì „ 모드 (ARS 미사용 주행) +Common.710.RK = 가변 저항 제어기가 중간 ìœ„ì¹˜ì— ìžˆìŒ + +Common.710.SAMMSchemeOff = SAMM ì •ì§€ 버튼 +Common.710.SAMMStart = SAMM 시작 버튼 +Common.710.SAMMReset = SAMM: 리셋 버튼 +Common.710.SAMMXTLamp = SAMM: ATOì— ì˜í•´ 구ë™/ì œë™ íšŒë¡œ ì—°ê²° +Common.710.SAMMSignal1 = SAMM: @[Common.ALL.Unsused1] +Common.710.SAMMSignal2 = SAMM: @[Common.ALL.Unsused1] +Common.710.SAMMOn = SAMM: 스위치 (ATO:ì—´ì°¨ ìžë™ ìš´ì „) +Common.710.SAMMUnit = SAMM: 실행 유닛 +Common.710.SAMMX2 = SAMM: X2 모드 +Common.710.SAMMAhead = SAMM: 회복 ìš´ì „ 모드 +Common.710.SAMMAccept = SAMM: ìŠ¹ì¸ + +#gmod_subway_81-702 +Entities.gmod_subway_81-702.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-702.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-702.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-702.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-702.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-702.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-702.Buttons.VU.KU1Set = @[Common.703.LOn] +Entities.gmod_subway_81-702.Buttons.VU.KU2Set = @[Common.703.LOff] +Entities.gmod_subway_81-702.Buttons.MainB.KU7Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-702.Buttons.MainB.KU6Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-702.Buttons.MainB.VRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-702.Buttons.MainB.KU3Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-702.Buttons.MainP.VZSet = @[Common.702.VZ1] +Entities.gmod_subway_81-702.Buttons.KU9.KU9Set = @[Common.703.KSD] +Entities.gmod_subway_81-702.Buttons.KU5.KU5Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-702.Buttons.MainL.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-702.Buttons.MainL.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-702.Buttons.MainL.!Blue = @[Common.703.SD] +Entities.gmod_subway_81-702.Buttons.VU.SNSet = @[Common.ALL.KSN] + +Entities.gmod_subway_81-702.Buttons.HelperPanel.KU10Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-702.Buttons.HelperPanel.KU8Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-702.Buttons.HelperPanel.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-702.Buttons.HelperPanel.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_81-702.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_81-702.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_81-702.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_81-702.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_81-702.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] + +Entities.gmod_subway_81-702.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-702.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-702.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-702.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-702.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-702.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-702.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-702.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-702.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-702.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-702.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-702.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-702.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-702.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-702.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-702.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-702.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-702.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-702.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-702.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-702_int +Entities.gmod_subway_81-702_int.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-702_int.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-702_int.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-702_int.Buttons.VU.KU1Set = @[Common.703.LOn] +Entities.gmod_subway_81-702_int.Buttons.VU.KU2Set = @[Common.703.LOff] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU7Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU6Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-702_int.Buttons.MainB.VRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU3Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-702_int.Buttons.KU9.KU9Set = @[Common.703.KSD] +Entities.gmod_subway_81-702_int.Buttons.KU5.KU5Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-702_int.Buttons.MainL.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-702_int.Buttons.MainL.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-702_int.Buttons.MainL.!Blue = @[Common.703.SD] +Entities.gmod_subway_81-702_int.Buttons.VU.SNSet = @[Common.ALL.KSN] + +Entities.gmod_subway_81-702_int.Buttons.HelperPanel.KU10Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-702_int.Buttons.HelperPanel.KU8Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_81-702_int.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-702_int.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-702_int.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-702_int.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-702_int.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-702_int.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-702_int.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-702_int.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-702_int.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-702_int.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702_int.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702_int.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-702_int.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-702_int.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-702_int.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-702_int.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-702_int.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-702_int.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-702_int.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-702_int.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-703 +Entities.gmod_subway_81-703.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-703.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-703.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-703.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-703.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-703.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-703.Buttons.AV2.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-703.Buttons.Main.RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-703.Buttons.Main.GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-703.Buttons.Main.SD = @[Common.703.SD] +Entities.gmod_subway_81-703.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_81-703.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_81-703.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_81-703.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_81-703.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-703.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_81-703.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-703.Buttons.Main.KU7KToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-703.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703.Buttons.Main.KU6KToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-703.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-703.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-703.Buttons.Main.KU12Toggle = @[Common.703.RUT] +Entities.gmod_subway_81-703.Buttons.VU4.KU16Toggle = @[Common.ALL.VF2] + +Entities.gmod_subway_81-703.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-703.Buttons.HelperPanel.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-703.Buttons.HelperPanel.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_81-703.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_81-703.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_81-703.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_81-703.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_81-703.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] + +Entities.gmod_subway_81-703.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-703.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-703.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-703.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-703.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-703.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-703.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-703.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-703.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-703.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-703.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-703.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-703.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-703.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-703.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-703.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-703.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-703.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-703.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-703.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-703.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-703_int +Entities.gmod_subway_81-703_int.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-703_int.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-703_int.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-703_int.Buttons.Main.RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-703_int.Buttons.Main.GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-703_int.Buttons.Main.SD = @[Common.703.SD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_81-703_int.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_81-703_int.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_81-703_int.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_81-703_int.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-703_int.Buttons.Main.KU7KToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703_int.Buttons.Main.KU6KToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU12Toggle = @[Common.703.RUT] +Entities.gmod_subway_81-703_int.Buttons.VU4.KU16Toggle = @[Common.ALL.VF2] + +Entities.gmod_subway_81-703_int.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703_int.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_81-703_int.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-703_int.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-703_int.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-703_int.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-703_int.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-703_int.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-703_int.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-703_int.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-703_int.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-703_int.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703_int.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703_int.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-703_int.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-703_int.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-703_int.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-703_int.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-703_int.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-703_int.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-703_int.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-703_int.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-703_int.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_ezh +Entities.gmod_subway_ezh.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_ezh.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_ezh.Buttons.VU.KU14Set = @[Common.ALL.KRP] +Entities.gmod_subway_ezh.Buttons.VU.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_ezh.Buttons.KRR.KRRSet = @[Common.703.KRR] + +Entities.gmod_subway_ezh.Buttons.AVU.OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_ezh.Buttons.AVU.!AVULight = @[Common.ALL.LAVU] + +Entities.gmod_subway_ezh.Buttons.AV2.R_RadioToggle = @[Common.ALL.VASNP] +Entities.gmod_subway_ezh.Buttons.AV2.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_ezh.Buttons.AV2.UOSToggle = @[Common.ALL.UOS] + +Entities.gmod_subway_ezh.Buttons.LampsALS1.!LNF = @[Common.ARS.04] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L0 = @[Common.ARS.0] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L40 = @[Common.ARS.40] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L60 = @[Common.ARS.60] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L70 = @[Common.ARS.70] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L80 = @[Common.ARS.80] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!LNF_2 = @[Common.ARS.04] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L0_2 = @[Common.ARS.0] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L40_2 = @[Common.ARS.40] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L60_2 = @[Common.ARS.60] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L70_2 = @[Common.ARS.70] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L80_2 = @[Common.ARS.80] + +Entities.gmod_subway_ezh.Buttons.AB1.AB1Set = @[Common.ARS.ABButton]@[Common.ARS.ABDriver] +Entities.gmod_subway_ezh.Buttons.AB2.AB2Set = @[Common.ARS.ABButton]@[Common.ARS.ABHelper] +Entities.gmod_subway_ezh.Buttons.KAH.KAHToggle = @[Common.707.TAH] +Entities.gmod_subway_ezh.Buttons.RC1.RC1Toggle = @[Common.ALL.RCARS] + +Entities.gmod_subway_ezh.Buttons.Lamps1.!AV = @[Common.ARS.AV] +Entities.gmod_subway_ezh.Buttons.Lamps1.!SEQ = @[Common.707.SEQ] +Entities.gmod_subway_ezh.Buttons.Lamps1.!ARS = @[Common.ARS.ARS] +Entities.gmod_subway_ezh.Buttons.Lamps1.!AB = @[Common.ARS.AB] +Entities.gmod_subway_ezh.Buttons.Lamps1.!SD = @[Common.703.SD] +Entities.gmod_subway_ezh.Buttons.Lamps1.!LSN = @[Common.ALL.SN] +Entities.gmod_subway_ezh.Buttons.Lamps1.!AV1 = @[Common.ARS.AV1] +Entities.gmod_subway_ezh.Buttons.Lamps1.!RRP = @[Common.ALL.RP] +Entities.gmod_subway_ezh.Buttons.Lamps1.!KT = @[Common.ARS.KT] +Entities.gmod_subway_ezh.Buttons.Lamps1.!VD = @[Common.ARS.VD] +Entities.gmod_subway_ezh.Buttons.Lamps1.!RS = @[Common.ARS.RS] +Entities.gmod_subway_ezh.Buttons.Lamps1.!LN = @[Common.ARS.LN] +Entities.gmod_subway_ezh.Buttons.Lamps2.!RRP2 = @[Common.ALL.RP] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LPU2 = @[Common.707.SEQ] +Entities.gmod_subway_ezh.Buttons.Lamps2.!VD2 = @[Common.ARS.VD] +Entities.gmod_subway_ezh.Buttons.Lamps2.!KT2 = @[Common.ARS.KT] +Entities.gmod_subway_ezh.Buttons.Lamps2.!AB2 = @[Common.ARS.AB] +Entities.gmod_subway_ezh.Buttons.Lamps2.!SD2 = @[Common.703.SD] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LN2 = @[Common.ARS.LN] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LSN2 = @[Common.ALL.SN] + +Entities.gmod_subway_ezh.Buttons.Main1.1:KU16Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_ezh.Buttons.Main1.1:ALSFreqToggle = @[Common.ARS.Freq]@[Common.ARS.FreqD] +Entities.gmod_subway_ezh.Buttons.Main1.1:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU6KToggle = @[Common.ALL.KDLPK] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh.Buttons.Main1.1:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh.Buttons.Main1.1:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh.Buttons.Main1.1:R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU16Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_ezh.Buttons.Main2.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh.Buttons.Main2.2:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU6KToggle = @[Common.ALL.KDLPK] +Entities.gmod_subway_ezh.Buttons.Main2.2:ALSFreqToggle = @[Common.ARS.Freq]@[Common.ARS.FreqD] +Entities.gmod_subway_ezh.Buttons.Main2.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh.Buttons.Main2.2:R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU10Set = @[Common.ALL.KRZD] + +Entities.gmod_subway_ezh.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_ezh.Buttons.HelperPanel.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.HelperPanel.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_ezh.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_ezh.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_ezh.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_ezh.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_ezh.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] + +Entities.gmod_subway_ezh.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_ezh.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_ezh.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] +Entities.gmod_subway_ezh.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_ezh.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_ezh.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_ezh.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + + +Entities.gmod_subway_ezh.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_ezh.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_ezh.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_ezh.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_ezh1 +Entities.gmod_subway_ezh1.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh1.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh1.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh1.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh1.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh1.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh1.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh1.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh1.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] + + +Entities.gmod_subway_ezh1.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh1.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh1.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh1.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh1.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +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.!SD = @[Common.703.SD] + +Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh1.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh1.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh1.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh1.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh1.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh1.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh1.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh1.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh1.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_ezh1.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh1.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh1.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_ezh1.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh1.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_ezh1.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_ez3 +Entities.gmod_subway_ezh3.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh3.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh3.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh3.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh3.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_ezh3.Buttons.RUM.RUMToggle = @[Common.ALL.RCARS] +Entities.gmod_subway_ezh3.Buttons.KRR.KRRSet = @[Common.703.KRR] + +Entities.gmod_subway_ezh3.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_ezh3.Buttons.VUHelper.VUToggle = @[Common.ALL.VU] + + +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSchemeOffSet = @[Common.710.SAMMSchemeOff] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMStartSet = @[Common.710.SAMMStart] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMResetSet = @[Common.710.SAMMReset] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMXTLamp = @[Common.710.SAMMXTLamp] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal1 = @[Common.ALL.Unsused1] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal2 = @[Common.ALL.Unsused1] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMOnToggle = @[Common.710.SAMMOn] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMUnitToggle = @[Common.710.SAMMUnit] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMX2Toggle = @[Common.710.SAMMX2] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMAheadToggle = @[Common.710.SAMMAhead] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMAcceptToggle = @[Common.710.SAMMAccept] +Entities.gmod_subway_ezh3.Buttons.Main.V1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh3.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh3.Buttons.Main.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh3.Buttons.Main.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_ezh3.Buttons.Main.VU14Toggle = @[Common.ALL.VUS] +Entities.gmod_subway_ezh3.Buttons.Main.GLightsToggle = @[Common.ALL.GaugeLights] +Entities.gmod_subway_ezh3.Buttons.Main.VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_ezh3.Buttons.Main.V4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh3.Buttons.Main.V5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh3.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_ezh3.Buttons.Main.KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh3.Buttons.Main.KBSet = @[Common.ARS.KB] +Entities.gmod_subway_ezh3.Buttons.Main.RKLamp = @[Common.710.RK] +Entities.gmod_subway_ezh3.Buttons.Main.ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh3.Buttons.Main.R_UNchToggle = @[Common.ALL.UNCh] +Entities.gmod_subway_ezh3.Buttons.Main.V2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh3.Buttons.Main.R_RadioToggle = @[Common.ALL.R_Radio] +Entities.gmod_subway_ezh3.Buttons.Main.ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh3.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh3.Buttons.Main.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_ezh3.Buttons.Main.PLightsToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_ezh3.Buttons.Main.V10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh3.Buttons.Main.PLightsToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_ezh3.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh3.Buttons.Main.KU12Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh3.Buttons.Main.KAHSet = @[Common.ALL.KAH] +Entities.gmod_subway_ezh3.Buttons.Main.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_ezh3.Buttons.Main.KU10Set = @[Common.ALL.KRP] +Entities.gmod_subway_ezh3.Buttons.Main.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_ezh3.Buttons.Main.R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_ezh3.Buttons.Main.!AnnPlay = @[Common.ALL.AnnPlay] + +Entities.gmod_subway_ezh3.Buttons.HelperPanel.V6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.V3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_ezh3.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] + +Entities.gmod_subway_ezh3.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] +Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh3.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh3.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh3.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh3.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh3.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh3.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh3.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_ezh3.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_ezh3.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_ezh3.Buttons.Panel.!L04 = @[Common.ARS.04] +Entities.gmod_subway_ezh3.Buttons.Panel.!L0 = @[Common.ARS.0] +Entities.gmod_subway_ezh3.Buttons.Panel.!L40 = @[Common.ARS.40] +Entities.gmod_subway_ezh3.Buttons.Panel.!L60 = @[Common.ARS.60] +Entities.gmod_subway_ezh3.Buttons.Panel.!L70 = @[Common.ARS.70] +Entities.gmod_subway_ezh3.Buttons.Panel.!L80 = @[Common.ARS.80] + +Entities.gmod_subway_ezh3.Buttons.Panel.!LKT = @[Common.ARS.KT] +Entities.gmod_subway_ezh3.Buttons.Panel.!LSN = @[Common.ALL.SN] +Entities.gmod_subway_ezh3.Buttons.Panel.!LKVD = @[Common.ARS.VD] +Entities.gmod_subway_ezh3.Buttons.Panel.!LRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh3.Buttons.Panel.!LPU = @[Common.ALL.PU] +Entities.gmod_subway_ezh3.Buttons.Panel.!LSD = @[Common.703.SD] + +Entities.gmod_subway_ezh3.Buttons.Panel.!Speedometer = @[Common.ALL.Speedometer] +Entities.gmod_subway_ezh3.Buttons.Panel.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh3.Buttons.Panel.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh3.Buttons.Panel.!HighVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_ezh3.Buttons.Panel.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh3.Buttons.Panel.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +#gmod_subway_em508t +Entities.gmod_subway_em508t.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_em508t.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_em508t.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_em508t.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_em508t.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_em508t.Buttons.VU14.VU14Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_em508t.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_em508t.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_em508t.Buttons.Main.KU12Set = @[Common.ALL.KDL] +Entities.gmod_subway_em508t.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_em508t.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_em508t.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_em508t.Buttons.Main.V2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_em508t.Buttons.Main.V1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_em508t.Buttons.Main.V4Set = @[Common.703.LOn] +Entities.gmod_subway_em508t.Buttons.Main.V5Set = @[Common.703.LOff] +Entities.gmod_subway_em508t.Buttons.Main.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_em508t.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_em508t.Buttons.Main.V10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_em508t.Buttons.Main.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_em508t.Buttons.Main.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_em508t.Buttons.Main.!SD = @[Common.703.SD] + +Entities.gmod_subway_em508t.Buttons.HelperPanel.V6Set = @[Common.ALL.KDL] +Entities.gmod_subway_em508t.Buttons.HelperPanel.V3Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_em508t.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_em508t.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_em508t.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_em508t.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_em508t.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_em508t.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_em508t.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_em508t.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_em508t.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_em508t.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_em508t.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_em508t.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_em508t.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +#Spawner: +Entities.gmod_subway_81-702.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-702.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-702.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-702.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-702.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_81-702.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-702.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-702.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] + +Entities.gmod_subway_81-703.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-703.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-703.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-703.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-703.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_81-703.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-703.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-703.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] + +Entities.gmod_subway_ezh.Spawner.TrainType.Name = @[Spawner.707.Type] +Entities.gmod_subway_ezh.Spawner.TrainType.1 = @[Spawner.707.Type1] +Entities.gmod_subway_ezh.Spawner.TrainType.2 = @[Spawner.707.Type2] +Entities.gmod_subway_ezh.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_ezh.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_ezh.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_ezh.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_ezh.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_ezh.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_ezh.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_ezh.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_ezh.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_ezh.Spawner.EWagons.Name = @[Spawner.502.EWagons] + +Entities.gmod_subway_ezh3.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_ezh3.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_ezh3.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_ezh3.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_ezh3.Spawner.Announcer.1 = @[Spawner.710.RRI] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/kr_717.lua b/lua/metrostroi_data/languages/kr_717.lua new file mode 100644 index 0000000..c011caa --- /dev/null +++ b/lua/metrostroi_data/languages/kr_717.lua @@ -0,0 +1,1206 @@ +return [[ +#81-717 + +[kr] +#Cameras: +Train.717.Breakers = 회로 차단기 +Train.717.VB = 배터리, RC +Train.717.VBD = VBD, UPPS + +Train.717.VRD = VRD +Train.717.SOSD = SOSD +Train.717.PUAV = PUAV +Train.717.PA = PA +Train.717.PAScreen = PA 화면 + +Train.714.Shunt = 입환 작업용 패ë„, ì œë™ë³€ 밸브 +#Spawner +Spawner.717.Line2 = MPL 사양 차량 +Spawner.717.Line4 = PBL 사양 차량 +Spawner.717.Line5 = FPL 사양 차량 + +Spawner.717.Type = 차량 종류 +Spawner.717.BodyType = 차체 종류 +Spawner.717.MVM = MVM +Spawner.717.LVZ = LVZ +Spawner.717.MaskType = ì „ë©´ë¶€ 종류 +Spawner.717.CranType = ì œë™ë³€ 종류 +Spawner.717.LampType = 실내등 종류 +Spawner.717.Lamp1 = LPV-02 +Spawner.717.Lamp2 = LLV-01 +Spawner.717.SeatType = ì¢Œì„ ì¢…ë¥˜ +Spawner.717.ARS = ARS íŒ¨ë„ ì¢…ë¥˜ +Spawner.717.RingType = ARS 부저 종류 +Spawner.717.BPSNType = BPSN 종류 + +#######Buttons########### +#Common +Common.717.VBD = ASNP 출입문 잠금 스위치 +Common.717.UPPS = UPPS 시스템 스위치 +Common.717.BPSN = BPSN: 차량 ì „ì› ê³µê¸‰ 장치 +Common.717.ARS13V = ARS 13V: ARS ì „ì•• 안정 검사 +Common.717.Radio13V = 무선 13V ì „ì•• 안정 검사 +Common.717.LVD = LVD: 차량 회로 1 표시등 (ê²¬ì¸ ì „ë™ê¸° ìž‘ë™ ì¤‘) +Common.717.LHRK = LHRK: 차량 회로 2 표시등 (RK 회전 중) +Common.717.LST = LST: 차량 회로 6 표시등 (ì œë™ í‘œì‹œë“±) +Common.717.KVC = LKVC: ë³´ì¡° 회로 접촉기 표시등 (ê³ ì „ì•• ì§‘ì „ 불가) +Common.717.GLEB = GLEB: ì—…ë°ì´íЏ 표시등 +Common.717.KVP = LKVP: ê³ ì „ì•• 변류기 제어 (BPSN) +Common.717.LSP = LSP: 화재 경고 +Common.717.LEKK = LEKK: 전기 연결기 표시등 +Common.717.LPU = LPU: RUT 설정 ê°’ ê°ì†Œ 표시등 +Common.717.OtklBV = ê¸‰ì† ìž‘ìš© 스위치 사용 중지 (BV) +Common.717.OtklBVK = ê¸‰ì† ìž‘ìš© 스위치 커버 +Common.717.ConverterProtection = ì „ì› ê³µê¸‰ 장치 보호 버튼 +Common.717.VZ1 = VZ1: 공압 밸브 â„–1 +Common.717.VL1 = 환í’기 비í¬í•¨ 제어 표시등 +Common.717.V13 = ë¹„ìƒ í™˜ê¸° 스위치 +Common.717.V11 = 환í’기 1번 그룹 스위치 +Common.717.V12 = 환í’기 2번 그룹 스위치 +Common.717.RZPL = RZP: ì „ì› ê³µê¸‰ 장치 보호 계전기 +Common.717.VPAOn = VPA: 차량 유닛 ìž‘ë™ +Common.717.VPAOff = VPA: 차량 유닛 ìž‘ë™ ì¤‘ì§€ +Common.717.VZD = VZD: 출입문 제어 스위치 (출입문 닫힘) + +Common.717.A53 = A53: ë³´ì¡° 회로 접촉기 +Common.717.A56 = A56: 배터리 +Common.717.A54 = A54: 차량 제어 +Common.717.A17 = A17: 출입문, ë¹„ìƒ ë°±ìƒ‰ 전조등 +Common.717.A44 = A44: ë¹„ìƒ ì œì–´ê¸°, ë¹„ìƒ ê³µê¸° 압축기, ë¹„ìƒ ARS ì „ì› +Common.717.A39 = A39: ë¹„ìƒ ì œì–´ê¸°ë¡œ 차량 ê¸°ë™ +Common.717.A70 = A70: RKTT ìžë™ 모드 +Common.717.A14 = A14: ë¹„ìƒ ê¸°ë™ ê³„ì „ê¸° +Common.717.A74 = A74: 차량 보호 리셋 +Common.717.A26 = A26: 저주파 ì¦í­ê¸° +Common.717.AR63 = AР63: 무선국 +Common.717.AS1 = AС1: 통화 장치, ASNP +Common.717.A13 = A13: 출입문 ìƒíƒœ +Common.717.A21 = A21: 출입문 제어 +Common.717.A31 = A31: 좌측 출입문 열림 +Common.717.A32 = A32: 우측 출입문 열림 +Common.717.A16 = A16: 출입문 닫힘 +Common.717.A12 = A12: 출입문 ê°•ì œ 닫힘 + +Common.717.A24 = A24: ì¶©ì „ 제어 +Common.717.A49 = A49: 비ìƒë“± +Common.717.A27 = A27: ê°ì‹¤ 조명, 운전실 조명, ì œë™ ì‹ í˜¸, 녹색 RP 표시등 +Common.717.A72 = A72: 공압 밸브 â„–1 ë™ê¸°í™” +Common.717.A50 = A50: 조명 접촉기 +Common.717.AV3 = AÐ’3: 환í’기 ë¹„ìƒ ì „ì› +Common.717.AV3S = AÐ’3: 무선국 ë¹„ìƒ ì „ì› +Common.717.AV2 = AÐ’2: 환í’기 주 ì „ì› +Common.717.AV4 = AÐ’4: 환í’기 1번 그룹 제어 +Common.717.AV5 = AÐ’5: 환í’기 2번 그룹 제어 +Common.717.AV6 = AÐ’6: 환í’기 ë¹„ìƒ ì œì–´ +Common.717.AV1 = AÐ’1: 환í’기 제어, 환í’기 신호, 운전실 환í’기 +Common.717.A29 = A29: 전조등 ì „ì› +Common.717.A46 = A46: 하향등 (1번 그룹) +Common.717.A47 = A47: ìƒí–¥ë“± (2번 그룹) +Common.717.A71 = A71: 제어기 / ARSì˜ RV-3 ì „ì› +Common.717.A7 = A7: 우측 ì ìƒ‰ë“± +Common.717.A9 = A9: 좌측 ì ìƒ‰ë“± + +Common.717.A84 = @[Common.ALL.VU] +Common.717.A8 = A8: 공압 밸브 â„–2 +Common.717.A52 = A52: í™•ì¸ íŽ˜ë‹¬ì˜ ê³µì•• 밸브 +Common.717.A19 = A19: ê°ì°¨ RV-3 ì „ì› +Common.717.A48 = A48: í™•ì¸ íŽ˜ë‹¬, RPB, ARS 주 ì „ì› +Common.717.A10 = A10: 공기 압축기 제어 +Common.717.A22 = A22: 공기 압축기 접촉기 +Common.717.A30 = A30: 가변저항 제어기 ë³´ì¡° 모터 ì „ì› (SDRK) +Common.717.A1 = A1: êµ¬ë™ ëª¨ë“œ +Common.717.A2 = A2: 가변저항 제어기 제어 +Common.717.A3 = A3: X-3 +Common.717.A4 = A4: ì „ì§„ êµ¬ë™ +Common.717.A5 = A5: 후진 êµ¬ë™ +Common.717.A6 = A6: ì œë™ +Common.717.A18 = A18: 보호 리셋 +Common.717.A73 = A73: 고장 신호 +Common.717.A20 = A20: LK-2, LK-5 +Common.717.A25 = A25: 수 ì œë™ + +Common.717.A11 = A11: ë°°ì „ë°˜ / 운전실 조명 +Common.717.A37 = A37: ì „ì› ê³µê¸‰ 장치 보호 계전기 리셋 +Common.717.A45 = A45: BPSN 제어 +Common.717.A38 = A38: ê°ì°¨ 회로 고장 신호 표시등 +Common.717.A51 = A51: KPP / KVP 접촉기 +Common.717.A65 = A65: ë³´ì¡° BPSN 변환기 +Common.717.A66 = A66: BV 사용안함 +Common.717.A42 = A42: 75V ARS +Common.717.A43 = A43: 12V ARS +Common.717.A432 = A43: EPK 제어 +Common.717.A41 = A41: ARS 공압 밸브 â„–2 +Common.717.A40 = A40: ì œë™ í‘œì‹œë“± +Common.717.A75 = A75: 운전실 난방기 +Common.717.A76 = A76: 화재 경보 (ASOTP) +Common.717.A60 = A60: ê²¬ì¸ ì „ë™ê¸° ìž‘ë™ í‘œì‹œë“± +Common.717.A58 = A58: KAH-1 +Common.717.A57 = A57: 가변저항 제어기 회전 표시등 +Common.717.A59 = A59: KAH-2 +Common.717.A28 = A28: 사ì´ë¦¬ìŠ¤í„° 제어기 제어 유닛 ì „ì› +Common.717.A55 = A55: 가변저항 제어기 ë™ê¸°í™” +Common.717.A68 = A68: ì§‘ì „ 장치 제어 +Common.717.A80 = A80: BV 사용 +Common.717.A81 = A81: BV 제어 + +Common.717.A58PU = A58: PUAV ì „ì› +Common.717.A59PU = A59: PUAV 제어 +Common.717.A61PU = A61: PUAV ì—­ì „ê°„ 제어 +Common.717.A58PA = A58: PA ì „ì› +Common.717.A59PA = Ð59: @[Common.ALL.Unsused1] +Common.717.A61PA = A61: PA ì—­ì „ê°„ 제어 + +Common.717.A78 = A78: 관통문 제어 +Common.717.ABK = A-VК: 운전실 냉난방기 제어 + +Common.717.A81 = A81: BV 제어 +Common.717.A23 = A23: 공기 압축기 ê¸°ë™ +Common.717.A15 = A15: 비ìƒë“± +Common.717.AIS = AIS: ì†ë„ 센서 회로 차단기 + +Common.717.RC2 = RC-2: ìžë™ ìš´ì „ 시스템 회로 차단기 +Common.717.VAU = VAU: ìžë™ ìš´ì „ 시스템 스위치 + +Common.717.LampDV = DV: 회전 센서 ì˜¤ìž‘ë™ +Common.717.ARSL20 = ì†ë„ 제한 20 km/h +Common.717.ARSL40 = @[Common.ARS.40] +Common.717.ARSL60 = @[Common.ARS.60] +Common.717.ARSL70 = @[Common.ARS.70] +Common.717.ARSL80 = @[Common.ARS.80] + +Common.PUAV.K16 = LK16: 차량 회로 16 ì „ì› ê³µê¸‰ (출입문 닫힘) +Common.PUAV.OS = LOS: PUAV ì†ë„ 제한 모드 +Common.PUAV.AVT = LAVT: PUAV ìžë™ ìš´ì „ 모드 +Common.PUAV.RS = LRS: PUAV ì†ë„ ì¡°ì ˆ 모드 +Common.PUAV.KI1 = LKI1: PUAV 1번 그룹 ì˜¤ìž‘ë™ í‘œì‹œê¸° +Common.PUAV.KI2 = LKI2: PUAV 2번 그룹 ì˜¤ìž‘ë™ í‘œì‹œê¸° +Common.717.KH = KH3: ìžë™ ìš´ì „ 시스템: X-3 모드 ìž‘ë™ +Common.717.KSZD = KSZD: 출입문 닫힘 ìŠ¹ì¸ +Common.717.VAV = @[Common.ALL.VAV] + +Common.717.PAM = PA-M +Common.717.PAKSDM = PA-KSD-M + +Common.PA.P = P +Common.PA.F = F +Common.PA.Up = 위 +Common.PA.M = M +Common.PA.Left = 좌 +Common.PA.Down = 아래 +Common.PA.Right = ìš° +Common.PA.Esc = 취소 +Common.PA.Enter = ìž…ë ¥ + +Common.714.Start = ê²¬ì¸ ì „ë™ê¸° ê¸°ë™ +Common.714.RV = ë°©í–¥ 스위치 + +#gmod_subway_81-717 +Entities.gmod_subway_81-717_mvm.Buttons.Battery_C.1:UOSToggle = @[Common.ALL.UOS] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_R.2:UOSToggle = @[Common.ALL.UOS] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_C.1:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_R.2:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_C.1:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_R.2:RC1Toggle = @[Common.ALL.RC1] + +Entities.gmod_subway_81-717_mvm.Buttons.VBD_C.1:VBDToggle = @[Common.717.VBD] +Entities.gmod_subway_81-717_mvm.Buttons.VBD_R.2:VBDToggle = @[Common.717.VBD] +Entities.gmod_subway_81-717_mvm.Buttons.VBD_C.1:UPPS_OnToggle = @[Common.717.UPPS] +Entities.gmod_subway_81-717_mvm.Buttons.VBD_R.2:UPPS_OnToggle = @[Common.717.UPPS] + +Entities.gmod_subway_81-717_mvm.Buttons.Block1.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.RezMKSet = @[Common.ALL.RMK] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.ARS13Set = @[Common.717.ARS13V] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARSOch = @[Common.ARS.04] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLSD1 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLSD2 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLHRK = @[Common.717.LHRK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampRP = @[Common.ALL.RP] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLSN = @[Common.ALL.SN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLN = @[Common.ARS.LN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLKVC = @[Common.717.KVC] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLRS = @[Common.ARS.RS] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLVD = @[Common.717.LVD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLST = @[Common.717.LST] + +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARSOch = @[Common.ARS.04] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLSD1 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLSD2 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLVD = @[Common.717.LVD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLHRK = @[Common.717.LHRK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLST = @[Common.717.LST] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampRP = @[Common.ALL.RP] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLSN = @[Common.ALL.SN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLKVC = @[Common.717.KVC] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLEKK = @[Common.717.GLEB] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLN = @[Common.ARS.LN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLRS = @[Common.ARS.RS] + +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LSD = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LOch = @[Common.ARS.0]\n@[Common.ARS.04] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LN = @[Common.ARS.LN]\n@[Common.ARS.40] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!60 = @[Common.ARS.60]\n@[Common.ARS.80] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!70 = @[Common.ARS.70]\n@[Common.717.LHRK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LEKK = @[Common.717.LEKK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LPU = @[Common.717.LPU] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LKVC = @[Common.717.KVC] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LVD = @[Common.717.LVD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LST = @[Common.717.LST] + +Entities.gmod_subway_81-717_mvm.Buttons.Block3.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-717_mvm.Buttons.Block3.!BCPressure = @[Common.ALL.BCPressure] + +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] + +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_UNchToggle = @[Common.ALL.UNCh] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_ZSToggle = @[Common.ALL.ES] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_RadioToggle = @[Common.ALL.R_Radio] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.1:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.1:KVTRSet = @[Common.ARS.KVTR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.2:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.2:KVTRSet = @[Common.ARS.KVTR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!L1Light = @[Common.717.VL1] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.V13Toggle = @[Common.717.V13] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VUD1Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!GreenRPLight = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!AVULight = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!LKVPLight = @[Common.717.KVP] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!SPLight = @[Common.717.LSP] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OtklBVSet = @[Common.717.OtklBV] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OtklBVKToggle = @[Common.717.OtklBVK] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.V11Toggle = @[Common.717.V11] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.V12Toggle = @[Common.717.V12] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ARSRToggle = @[Common.ALL.ARSR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ALSFreqToggle = @[Common.ARS.Freq] @[Common.ARS.FreqU] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.L_3Toggle = @[Common.ALL.PanelLights] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VPToggle = @[Common.ARS.VP] + +Entities.gmod_subway_81-717_mvm.Buttons.Block7.L_4Toggle = @[Common.ALL.VF] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.VADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KRPSet = @[Common.ALL.KRP] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KAHSet = @[Common.ALL.KAH] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KAHKToggle = @[Common.ALL.KAHK] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.!PNT = @[Common.ALL.BrT] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.!PNW = @[Common.ALL.BrW] + +Entities.gmod_subway_81-717_mvm.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-717_mvm.Buttons.HVMeters.!HighVoltage = @[Common.ALL.HighVoltage] + +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:R_Program2HSet = @[Common.ALL.Program2] + +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_C.SAB1Toggle = @[Common.BZOS.On] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_C.!VH1 = @[Common.BZOS.VH1] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_C.!VH2 = @[Common.BZOS.VH2] + +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_R.1:SAB1Toggle = @[Common.BZOS.On] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_R.1:!VH1 = @[Common.BZOS.VH1] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_R.1:!VH2 = @[Common.BZOS.VH2] + + +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_C.PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_C.PVK+ = @[Common.CabVent.PVK+] +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_R.1:PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_R.1:PVK+ = @[Common.CabVent.PVK+] + +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA23 = @[Common.IGLA.Button23] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA3Set = @[Common.IGLA.Button3] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA4Set = @[Common.IGLA.Button4] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.!IGLAFire = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA23 = @[Common.IGLA.Button23] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA3Set = @[Common.IGLA.Button3] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA4Set = @[Common.IGLA.Button4] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:!IGLAFire = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:!IGLAErr = @[Common.IGLA.IGLAErr] + +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A26Toggle = @[Common.717.A26] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AR63Toggle = @[Common.717.AR63] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AS1Toggle = @[Common.717.AS1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV3Toggle = @[Common.717.AV3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV2Toggle = @[Common.717.AV2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV4Toggle = @[Common.717.AV4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV5Toggle = @[Common.717.AV5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV6Toggle = @[Common.717.AV6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A9Toggle = @[Common.717.A9] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A43Toggle = @[Common.717.A43] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A76Toggle = @[Common.717.A76] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A60Toggle = @[Common.717.A60] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A58Toggle = @[Common.717.A58] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A59Toggle = @[Common.717.A59] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A26Toggle = @[Common.717.A26] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:AR63Toggle = @[Common.717.AR63] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:AS1Toggle = @[Common.717.AS1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A76Toggle = @[Common.717.A76] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A43Toggle = @[Common.717.A43] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A28Toggle = @[Common.717.A28] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AISToggle = @[Common.717.AIS] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A80Toggle = @[Common.717.A80] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV2Toggle = @[Common.717.AV2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV3Toggle = @[Common.717.AV3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV4Toggle = @[Common.717.AV4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV5Toggle = @[Common.717.AV5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV6Toggle = @[Common.717.AV6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A81Toggle = @[Common.717.A81] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A9Toggle = @[Common.717.A9] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A68Toggle = @[Common.717.A68] + +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-717_mvm.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-717_mvm.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle = @[Common.ALL.DriverValveDisconnect] +Entities.gmod_subway_81-717_mvm.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-717_mvm.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-717_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] + +Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-717_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_mvm.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-717_mvm.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-717_mvm.Buttons.OtsekDoor1.OtsekDoor1 = @[Common.ALL.OtsekDoor1] +Entities.gmod_subway_81-717_mvm.Buttons.OtsekDoor2.OtsekDoor2 = @[Common.ALL.OtsekDoor2] +Entities.gmod_subway_81-717_mvm.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_81-717_mvm.Buttons.EPVDisconnect.EPKToggle = @[Common.ALL.EPV] +Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] + + +#gmod_subway_81-717_lvz +#Buttons: +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:RC2Toggle = @[Common.717.RC2] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:RC2Toggle = @[Common.717.RC2] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:VAUToggle = @[Common.717.VAU] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:VAUToggle = @[Common.717.VAU] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:VRDToggle = @[Common.ARS.VRD] + +Entities.gmod_subway_81-717_lvz.Buttons.VRD_C.1:VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-717_lvz.Buttons.SOSD_C.1:VSOSDToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-717_lvz.Buttons.SOSD_R.2:VSOSDToggle = @[Common.ALL.VSOSD] + +Entities.gmod_subway_81-717_lvz.Buttons.Block1.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.ARS13Set = @[Common.717.ARS13V] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.Radio13Set = @[Common.717.Radio13V] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSOch = @[Common.ARS.N4] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLSD1 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLSD2 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLVD = @[Common.ALL.L1w] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLHRK = @[Common.ALL.L2w] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLST = @[Common.ALL.L6w] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLRD = @[Common.ARS.LRD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampRP = @[Common.ALL.RP] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLSN = @[Common.ALL.SN] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampDV = @[Common.717.LampDV] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!SpeedFact1 = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!SpeedFact2 = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL20 = @[Common.717.ARSL20] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL40 = @[Common.717.ARSL40] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL60 = @[Common.717.ARSL60] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL70 = @[Common.717.ARSL70] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL80 = @[Common.717.ARSL80] + +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!NMPressureLow2 = @[Commom.NMnUAVA.NMPressureLow] +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!UAVATriggered2 = @[Commom.NMnUAVA.UAVATriggered] + +Entities.gmod_subway_81-717_lvz.Buttons.USS1.!NMPressureLow = @[Commom.NMnUAVA.NMPressureLow] +Entities.gmod_subway_81-717_lvz.Buttons.USS1.!UAVATriggered = @[Commom.NMnUAVA.UAVATriggered] + +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OK16 = @[Common.PUAV.K16] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OLRS = @[Common.PUAV.RS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OKI1 = @[Common.PUAV.KI1] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OKI2 = @[Common.PUAV.KI2] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OOS = @[Common.PUAV.OS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OAVT = @[Common.PUAV.AVT] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:KHSet = @[Common.717.KH] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:KSZDSet = @[Common.717.KSZD] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:VAVToggle = @[Common.717.VAV] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:VZPToggle = @[Common.ALL.VZP] + +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!K16 = @[Common.PUAV.K16] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!OS = @[Common.PUAV.OS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!AVT = @[Common.PUAV.AVT] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!LRS = @[Common.PUAV.RS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!KI1 = @[Common.PUAV.KI1] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!KI2 = @[Common.PUAV.KI2] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARSOch = @[Common.ARS.N4] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.KHSet = @[Common.717.KH] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.KSZDSet = @[Common.717.KSZD] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.VAVToggle = @[Common.717.VAV] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.VZPToggle = @[Common.ALL.VZP] + +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMPSet = @[Common.717.PAM]: @[Common.PA.P] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMFSet = @[Common.717.PAM]: @[Common.PA.F] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMUpSet = @[Common.717.PAM]: @[Common.PA.Up] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMMSet = @[Common.717.PAM]: @[Common.PA.M] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMLeftSet = @[Common.717.PAM]: @[Common.PA.Left] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMDownSet = @[Common.717.PAM]: @[Common.PA.Down] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMRightSet = @[Common.717.PAM]: @[Common.PA.Right] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM1Set = @[Common.717.PAM]: 1 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM2Set = @[Common.717.PAM]: 2 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM3Set = @[Common.717.PAM]: 3 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM4Set = @[Common.717.PAM]: 4 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM5Set = @[Common.717.PAM]: 5 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM6Set = @[Common.717.PAM]: 6 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM7Set = @[Common.717.PAM]: 7 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM8Set = @[Common.717.PAM]: 8 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM9Set = @[Common.717.PAM]: 9 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMEscSet = @[Common.717.PAM]: @[Common.PA.Esc] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM0Set = @[Common.717.PAM]: 0 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMEnterSet = @[Common.717.PAM]: @[Common.PA.Enter] +Entities.gmod_subway_81-717_lvz.Buttons.PAM.2:KSZDSet = @[Common.717.KSZD] +Entities.gmod_subway_81-717_lvz.Buttons.PAM.2:VZPToggle = @[Common.ALL.VZP] + +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:R_UPOToggle = @[Common.ALL.UPO] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!OhSigLamp1 = @[Common.BZOS.Engaged] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:VUD1Toggle = @[Common.717.VZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!GreenRPLight1 = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!AVULight1 = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!LKVPLight1 = @[Common.717.KVP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!SPLight1 = @[Common.717.LSP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:L_3Toggle = @[Common.ALL.PanelLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:OhrSigToggle = @[Common.BZOS.On] + +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:R_UPOToggle = @[Common.ALL.UPO] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!OhSigLamp2 = @[Common.BZOS.Engaged] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VUD1Toggle = @[Common.717.VZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!KDLLight2 = @[Common.ALL.KDLL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!KDLRLight2 = @[Common.ALL.KDLL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!GreenRPLight2 = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!RZPLight2 = @[Common.717.RZPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!LKVPLight2 = @[Common.717.KVP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:OhrSigToggle = @[Common.BZOS.On] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VPAOnSet = @[Common.717.VPAOn] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VPAOffSet = @[Common.717.VPAOff] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!AVULight2 = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:L_3Toggle = @[Common.ALL.PanelLights] + +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!RZPLight1 = @[Common.717.RZPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:R_UPOToggle = @[Common.ALL.UPO] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!SPLight3 = @[Common.717.LSP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!AVULight3 = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:VUD1Toggle = @[Common.717.VZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!GreenRPLight3 = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!RZPLight3 = @[Common.717.RZPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!LKVPLight3 = @[Common.717.KVP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.1:VPAOnSet = @[Common.717.VPAOn] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.1:VPAOffSet = @[Common.717.VPAOff] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:OVTToggle = @[Common.ALL.VOVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:L_3Toggle = @[Common.ALL.PanelLights] + +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:L_4Toggle = @[Common.ALL.VF] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:VADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:KRPSet = @[Common.ALL.KRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:RezMKSet = @[Common.ALL.RMK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.!1:PNT = @[Common.ALL.BrT] + +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:L_4Toggle = @[Common.ALL.VF] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:VADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:KRPSet = @[Common.ALL.KRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:RezMKSet = @[Common.ALL.RMK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.!KDPLight2 = @[Common.ALL.KDPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.!2:PNT = @[Common.ALL.BrT] + +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_C.VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_C.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_C.VOPDSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_R.1:VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_R.1:VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_R.1:VOPDSet = @[Common.ALL.KDPH] + +Entities.gmod_subway_81-717_lvz.Buttons.CabVent_C.PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-717_lvz.Buttons.CabVent_C.PVK+ = @[Common.CabVent.PVK+] + +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_N.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_N.!HighVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_O.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_O.!HighVoltage = @[Common.ALL.HighVoltage] + +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A26Toggle = @[Common.717.A26] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AR63Toggle = @[Common.717.AR63] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AS1Toggle = @[Common.717.AS1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AISToggle = @[Common.717.AIS] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AV3Toggle = @[Common.717.AV3S] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A58Toggle = @[Common.717.A58PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A59Toggle = @[Common.717.A59PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A61Toggle = @[Common.717.A61PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:P:A58Toggle = @[Common.717.A58PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:P:A59Toggle = @[Common.717.A59PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:P:A61Toggle = @[Common.717.A61PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A9Toggle = @[Common.717.A9] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A06Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A43Toggle = @[Common.717.A432] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A76Toggle = @[Common.717.A76] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A60Toggle = @[Common.717.A60] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A58Toggle = @[Common.717.A58PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A59Toggle = @[Common.717.A59PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A61Toggle = @[Common.717.A61PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.P:A58Toggle = @[Common.717.A58PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.P:A59Toggle = @[Common.717.A59PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.P:A61Toggle = @[Common.717.A61PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A78Toggle = @[Common.717.A78]@[Common.ALL.Unsused2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.ABKToggle = @[Common.717.ABK]@[Common.ALL.Unsused2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A43Toggle = @[Common.717.A432] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A65Toggle = @[Common.717.A65] + +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A28Toggle = @[Common.717.A28] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.AISToggle = @[Common.717.AIS] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.AV3Toggle = @[Common.717.AV3S] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A60Toggle = @[Common.717.A60] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A9Toggle = @[Common.717.A9] + +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber3+ = @[Common.ALL.RouteNumber3+] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber3- = @[Common.ALL.RouteNumber3-] + +Entities.gmod_subway_81-717_lvz.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle = @[Common.ALL.DriverValveDisconnect] +Entities.gmod_subway_81-717_lvz.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-717_lvz.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-717_lvz.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-717_lvz.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-717_lvz.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] + +Entities.gmod_subway_81-717_lvz.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-717_lvz.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-717_lvz.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_lvz.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_lvz.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-717_lvz.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-717_lvz.Buttons.OtsekDoor1.OtsekDoor1 = @[Common.ALL.OtsekDoor1] +Entities.gmod_subway_81-717_lvz.Buttons.OtsekDoor2.OtsekDoor2 = @[Common.ALL.OtsekDoor2] +Entities.gmod_subway_81-717_lvz.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_81-717_lvz.Buttons.EPVDisconnect.EPKToggle = @[Common.ALL.EPV] +Entities.gmod_subway_81-717_lvz.Buttons.ParkingBrake.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] + +#gmod_subway_81-714_mvm +Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-714_mvm.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-714_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-714_mvm.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-714_mvm.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-714_mvm.Buttons.couch_cap_o.CouchCap = @[Common.ALL.CouchCap] +Entities.gmod_subway_81-714_mvm.Buttons.couch_cap.CouchCap = @[Common.ALL.CouchCap] + +Entities.gmod_subway_81-714_mvm.Buttons.Battery.VBToggle = @[Common.ALL.VB] + +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV2Toggle = @[Common.717.AV2] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV3Toggle = @[Common.717.AV3] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV4Toggle = @[Common.717.AV4] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV5Toggle = @[Common.717.AV5] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A81Toggle = @[Common.717.A81] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV6Toggle = @[Common.717.AV6] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A80Toggle = @[Common.717.A80] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A18Toggle = @[Common.717.A18] + +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A23Toggle = @[Common.717.A23] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-714_mvm.Buttons.VU.A84Toggle = @[Common.ALL.VU] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.!RZPLight = @[Common.717.RZPL] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.OtklBVSet = @[Common.717.OtklBV] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.StartSet = @[Common.714.Start] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.RV- = @[Common.714.RV] @[Common.ALL.CCW] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.RV+ = @[Common.714.RV] @[Common.ALL.CW] +Entities.gmod_subway_81-714_mvm.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-714_mvm.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-714_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] + + +#gmod_subway_81-714_lvz +Entities.gmod_subway_81-714_lvz.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-714_lvz.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-714_lvz.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-714_lvz.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-714_lvz.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-714_lvz.Buttons.couch_cap_o.CouchCap = @[Common.ALL.CouchCap] +Entities.gmod_subway_81-714_lvz.Buttons.couch_cap.CouchCap = @[Common.ALL.CouchCap] + +Entities.gmod_subway_81-714_lvz.Buttons.Battery.VBToggle = @[Common.ALL.VB] + +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A81Toggle = @[Common.717.A81] +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A80Toggle = @[Common.717.A80] +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A18Toggle = @[Common.717.A18] + +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A23Toggle = @[Common.717.A23] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-714_lvz.Buttons.VU.A84Toggle = @[Common.ALL.VU] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.!RZPLight = @[Common.717.RZPL] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.StartSet = @[Common.714.Start] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.RV- = @[Common.714.RV] @[Common.ALL.CCW] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.RV+ = @[Common.714.RV] @[Common.ALL.CW] +Entities.gmod_subway_81-714_lvz.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-714_lvz.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-714_lvz.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] + +#Spawner: +Entities.gmod_subway_81-717_mvm.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-717_mvm.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] + + +Entities.gmod_subway_81-717_mvm_custom.Spawner.Type.Name = @[Spawner.717.Type] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BodyType.Name = @[Spawner.717.BodyType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BodyType.1 = @[Spawner.717.MVM] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BodyType.2 = @[Spawner.717.LVZ] +Entities.gmod_subway_81-717_mvm_custom.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-717_mvm_custom.Spawner.MaskType.Name = @[Spawner.717.MaskType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.Cran.Name = @[Spawner.717.CranType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.Name = @[Spawner.717.LampType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.2 = @[Spawner.717.Lamp1] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.3 = @[Spawner.717.Lamp2] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.Name = @[Spawner.717.SeatType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.2 = @[Common.Spawner.Old] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.3 = @[Common.Spawner.New] +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.Name = @[Spawner.717.ARS] +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.2 = @[Common.Spawner.Type] 1 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.3 = @[Common.Spawner.Type] 2 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.4 = @[Common.Spawner.Type] 3 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.5 = @[Common.Spawner.Type] 4 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.6 = @[Common.Spawner.Type] 5 +Entities.gmod_subway_81-717_mvm_custom.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-717_mvm_custom.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-717_mvm_custom.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.Name = @[Spawner.717.RingType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.2 = @[Common.Spawner.Type] 1 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.3 = @[Common.Spawner.Type] 2 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.4 = @[Common.Spawner.Type] 3 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.5 = @[Common.Spawner.Type] 4 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.6 = @[Common.Spawner.Type] 5 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.7 = @[Common.Spawner.Type] 6 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.8 = @[Common.Spawner.Type] 7 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.9 = @[Common.Spawner.Type] 8 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.Name = @[Spawner.717.BPSNType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.2 = @[Common.Spawner.Type] 1 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.3 = @[Common.Spawner.Type] 2 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.4 = @[Common.Spawner.Type] 3 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.5 = @[Common.Spawner.Type] 4 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.6 = @[Common.Spawner.Type] 5 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.7 = @[Common.Spawner.Type] 6 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.8 = @[Common.Spawner.Type] 7 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.9 = @[Common.Spawner.Type] 8 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.10 = @[Common.Spawner.Type] 9 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.11 = @[Common.Spawner.Type] 10 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.12 = @[Common.Spawner.Type] 11 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.13 = @[Common.Spawner.Type] 12 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.14 = @[Common.Spawner.Type] 13 +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] + +#Spawner: +Entities.gmod_subway_81-717_lvz.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-717_lvz.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-717_lvz.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-717_lvz.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-717_lvz.Spawner.Type.Name = @[Spawner.Common.EType] +Entities.gmod_subway_81-717_lvz.Spawner.Type.1 = @[Spawner.717.Line2] +Entities.gmod_subway_81-717_lvz.Spawner.Type.2 = @[Spawner.717.Line4] +Entities.gmod_subway_81-717_lvz.Spawner.Type.3 = @[Spawner.717.Line5] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] diff --git a/lua/metrostroi_data/languages/kr_718.lua b/lua/metrostroi_data/languages/kr_718.lua new file mode 100644 index 0000000..2545f1f --- /dev/null +++ b/lua/metrostroi_data/languages/kr_718.lua @@ -0,0 +1,699 @@ +return [[ +#81-718 + +[kr] + +#######Buttons########### +#Cameras +Train.718.BUP = BUP +Train.718.PPZ = PPZ +Train.718.VPU = VPU + +#Common +Common.718.SB4 = 회로 ì—°ê²° í™•ì¸ +Common.718.SB5 = ì—°ë½ ë¶€ì € +Common.718.SB7K = ìš´ì „ 모드 전환 커버 +Common.718.SB7 = ìš´ì „ 모드 전환 +Common.718.SB12 = ìžë™ 스위치 유닛 ìž‘ë™ +Common.718.SB13 = ìžë™ 스위치 유닛 ìž‘ë™ ì¤‘ì§€ +Common.718.SB15 = 차량 ì „ì› ê³µê¸‰ 장치 ìž‘ë™ +Common.718.SB16 = 차량 ì „ì› ê³µê¸‰ 장치 ìž‘ë™ ì¤‘ì§€ + +Common.718.VTPR = 집전기 비활성 모드 스위치 +Common.718.RX1 = ë¹„ìƒ ìš´ì „ 1 +Common.718.KAH2 = KAH: ë¹„ìƒ ìš´ì „ 버튼 (ë¹„ìƒ ìš´ì „ 모드 ARS 미사용 주행) +Common.718.RX2 = ë¹„ìƒ ìš´ì „ 2 + +Common.718.SPULightStrength = 운전대 표시등 ë°ê¸° + +Common.718.Heat = 운전실 난방기 +Common.718.SBP22 = 회로 ì—°ê²° 시험 +Common.718.KDPR = 우측 출입문 ë¹„ìƒ ê°œë°© +Common.718.KDLR = 좌측 출입문 ë¹„ìƒ ê°œë°© +Common.718.UOS = UOS: ì†ë„ 제한 장치 (EPV/EPK 미사용 주행) + +Common.718.KES = KES: ë¹„ìƒ êµì‹  제어 ìž‘ë™ì¤‘ +Common.718.CUV = CUV: ê°ì°¨ CUV 비í¬í•¨ 표시등 +Common.718.AIP = AIP: 화재 표시등 (화재) +Common.718.RIP = RIP: 화재 ë¹„ìƒ ëŒ€ê¸° 모드 +Common.718.VS1 = VS1: 1번 환í’기 그룹 미작ë™ì¤‘ +Common.718.VS2 = VS2: 2번 환í’기 그룹 미작ë™ì¤‘ + +#Autobreakers +Common.718.SF51 = SF51: ARS 주 ì „ì› +Common.718.SF52 = SF52: ARS ë¹„ìƒ ì „ì› +Common.718.SF53 = SF53: ARS ì œë™ íšŒë¡œ +Common.718.SF60 = SF60: 12V ARS +Common.718.SF61 = SF61: 50V ARS(FMM1) +Common.718.SF77 = SF77: 주 제어 - ë¹„ìƒ ìš´ì „ +Common.718.SF78 = SF78: ë¹„ìƒ ì œì–´ - ë¹„ìƒ ìš´ì „ +Common.718.SF40 = SF40: ZPT 공압 밸브 â„–2 +Common.718.SF41 = SF41: 전조등 +Common.718.SF8 = SF8: 출입문 제어 +Common.718.SF11 = SF11: 2번 환í’기 그룹 제어 +Common.718.SF10 = SF10: 1번 환í’기 그룹 제어 +Common.718.SF7 = SF7: BBE, 공기 압축기 +Common.718.SF50 = SF50: ì†ë„계 +Common.718.SF76 = SF76: 화재 경보 +Common.718.SF73 = SF73: 차륜 ë„유기 +Common.718.SF3 = SF3: ê°ì°¨ ì „ì›, CUV +Common.718.SF71 = SF71: ë¹„ìƒ í†µí™” 장치 +Common.718.SF63 = SF63: 무선국 +Common.718.SF54 = SF54: 안내방송기 50A +Common.718.SF65 = SF65: 운전실 환í’기 +Common.718.SF55 = SF55: SOT-3 +Common.718.SF9 = SF9: 차량 ë¹„ìƒ ì œì–´ +Common.718.SF6 = SF6: 차량 주 제어 +Common.718.SF5 = SF5: BKCU 제어 +Common.718.SF2 = SF2: 차량 ì „ì› +Common.718.SF4 = SF4: BUV, PTTI, BCKA ì „ì› +Common.718.SF27 = SF27: BVA ì „ì› +Common.718.SF46 = SF46: BVA 제어 +Common.718.SF12 = SF12: BBE ìž‘ë™ +Common.718.SF13 = SF13: BBE ìž‘ë™ ì¤‘ì§€ +Common.718.SF45 = SF45: BBE, 조명 접촉기 제어 +Common.718.SF16 = SF16: ê°ì‹¤ 조명 제어 +Common.718.SF44 = SF44: ê°ì‹¤ 조명 ì „ì› +Common.718.SF43 = SF43: ê°ì‹¤ ë¹„ìƒ ì¡°ëª… +Common.718.SF14 = SF14: 제어 회로 접촉기 ì „ì› +Common.718.SF15 = SF15: 제어 회로 접촉기 ë¹„ìƒ ì „ì› +Common.718.SF25 = SF25: 집전기 비활성 제어 +Common.718.SF72 = SF72: ë¹„ìƒ ì œë™ í‘œì‹œë“± +Common.718.SF56 = SF56: 공기 압축기 제어 +Common.718.SF29 = SF29: 공압 밸브 â„–1 +Common.718.SF26 = SF26: 공압 밸브 â„–2 +Common.718.SF42 = SF42: ë¶€ ì—¬ìžê¸° +Common.718.SF18 = SF18: 좌측 출입문 열림 +Common.718.SF20 = SF20: 우측 출입문 열림 +Common.718.SF17 = SF17: 출입문 닫힘 +Common.718.SF19 = SF19: 출입문 ê°•ì œ 닫힘 +Common.718.SF21 = SF21: 주 공기 압축기 제어 +Common.718.SF22 = SF22: ë¹„ìƒ ê³µê¸° 압축기 제어 +Common.718.SF34 = SF34: 1번 환í’기 그룹 ì „ì› +Common.718.SF35 = SF35: 2번 환í’기 그룹 ì „ì› +Common.718.SF23 = SF23: 1번 환í’기 그룹 접촉기 +Common.718.SF24 = SF24: 2번 환í’기 그룹 접촉기 + +#Names +Common.718.MVSU = BUP MVSU +Common.718.MLUP = BUP MLUP +Common.718.MUVS1 = BUP MUVS1 +Common.718.MUVS2 = BUP MUVS2 +Common.718.MP = BUP MP +Common.718.MS = BUP MS + +#A lot of indicators +Common.718.MVSUARSX = @[Common.718.MVSU]: BKBD êµ¬ë™ ëª¨ë“œ +Common.718.MVSUARST = @[Common.718.MVSU]: BKBD ì œë™ ëª¨ë“œ +Common.718.MVSUARSX3 = @[Common.718.MVSU]: ATO 유닛 X3 모드 +Common.718.MVSUARSX2 = @[Common.718.MVSU]: ATO 유닛 X2 모드 +Common.718.MVSUARSX1 = @[Common.718.MVSU]: ATO 유닛 X1 모드 +Common.718.MVSUARS0 = @[Common.718.MVSU]: ATO 유닛 0 모드 +Common.718.MVSUARST1 = @[Common.718.MVSU]: ATO 유닛 T1 모드 +Common.718.MVSUARST2 = @[Common.718.MVSU]: ATO 유닛 T2 모드 +Common.718.MVSUARST3 = @[Common.718.MVSU]: ATO 유닛 T3 모드 +Common.718.MVSUKVX3 = @[Common.718.MVSU]: 주간 제어기 X3 모드 +Common.718.MVSUKVX2 = @[Common.718.MVSU]: 주간 제어기 X2 모드 +Common.718.MVSUKVX1 = @[Common.718.MVSU]: 주간 제어기 X1 모드 +Common.718.MVSUKV0 = @[Common.718.MVSU]: 주간 제어기 0 모드 +Common.718.MVSUKVT1 = @[Common.718.MVSU]: 주간 제어기 T1 모드 +Common.718.MVSUKVT2 = @[Common.718.MVSU]: 주간 제어기 T2 모드 +Common.718.MVSUKVT3 = @[Common.718.MVSU]: 주간 제어기 T3 모드 +Common.718.MVSUKDV = @[Common.718.MVSU]: 출입문 ìƒíƒœ 제어 +Common.718.MVSUBDV = @[Common.718.MVSU]: 출입문 제어 차단 모드 +Common.718.MVSUPB = @[Common.718.MVSU]: PB/ARS ìž‘ë™ì¤‘ +Common.718.MVSUARS = @[Common.718.MVSU]: PB/ARS 미작ë™ì¤‘ +Common.718.MVSUAVT = @[Common.718.MVSU]: BKBD ë¹„ìƒ ì œë™ +Common.718.MVSUKVV = @[Common.718.MVSU]: "ì „ì§„" 모드 ìž…ë ¥ +Common.718.MVSUKVN = @[Common.718.MVSU]: "후진" 모드 ìž…ë ¥ +Common.718.MVSUPVU = @[Common.718.MVSU]: PVU (UAVA) 회로 ì—°ê²° 실패 +Common.718.MVSURPB = @[Common.718.MVSU]: í™•ì¸ íŽ˜ë‹¬ 계전기 회로 ì—°ê²° 실패 +Common.718.MVSUROT = @[Common.718.MVSU]: ë™ë ¥ 차단 계전기 (ARS) 회로 ì—°ê²° 실패 +Common.718.MVSUSOT = @[Common.718.MVSU]: ì œë™ ì‹ í˜¸ 처리기 (EPV) 회로 ì—°ê²° 실패 +Common.718.MLUPVP = @[Common.718.MLUP]: "ì „ì§„" 모드 +Common.718.MLUPNZ = @[Common.718.MLUP]: "후진" 모드 +Common.718.MLUPBUP = @[Common.718.MLUP]: BUP 차단 +Common.718.MLUPV0 = @[Common.718.MLUP]: ì˜ì  ì†ë„ (공압 밸브 â„–1) +Common.718.MLUPKU = @[Common.718.MLUP]: 주간 제어기 고장 +Common.718.MLUPBAV = @[Common.718.MLUP]: ATO 유닛 고장 +Common.718.MLUPKR = @[Common.718.MLUP]: ì—­ì „ê°„ 제어기 고장 +Common.718.MLUPARS = @[Common.718.MLUP]: ARS 고장 +Common.718.MUVS1VP = @[Common.718.MUVS1]: "ì „ì§„" 모드 출력 +Common.718.MUVS1NZ = @[Common.718.MUVS1]: "후진" 모드 출력 +Common.718.MUVS1X = @[Common.718.MUVS1]: "구ë™" 모드 출력 +Common.718.MUVS1T = @[Common.718.MUVS1]: "ì œë™" 모드 출력 +Common.718.MUVS1U1 = @[Common.718.MUVS1]: "전류 설정값 1" 모드 출력 +Common.718.MUVS1U2 = @[Common.718.MUVS1]: "전류 설정값 2" 모드 출력 +Common.718.MUVS1BAV = @[Common.718.MUVS1]: BAV 차단 출력 +Common.718.MUVS1BUP = @[Common.718.MUVS1]: BUV 차단 출력 +Common.718.MUVS20 = @[Common.718.MUVS2]: "소진" 모드 출력 +Common.718.MUVS2ZPT = @[Common.718.MUVS2]: 공압 밸브 â„–2 +Common.718.MPMP = @[Common.718.MP]: ì •ìƒ ìž‘ë™ +Common.718.MSMS = @[Common.718.MS]: ì •ìƒ ìž‘ë™ + +Common.718.MPS = BUV MPS +Common.718.MALP1 = BUV MALP1 +Common.718.MVD = BUV MVD +Common.718.MALP2 = BUV MALP2 +Common.718.MGR = BUV MGR +Common.718.MLU = BUV MLU +Common.718.MUVK = BUV MUVK +Common.718.MIV = BUV MIV +Common.718.MUVK2 = BUV MUVK2 +Common.718.MPSPROV = @[Common.718.MPS]: "ìž‘ë™ í™•ì¸" +Common.718.MPSAVR = @[Common.718.MPS]: "AVTì— ì˜í•´ 구ë™/ì œë™ ëª¨ë“œ ìž‘ë™ ì¤‘ì§€" +Common.718.MPSTARS = @[Common.718.MPS]: "BKBD ARS ì œë™" +Common.718.MPSX = @[Common.718.MPS]: "êµ¬ë™ ëª¨ë“œ 신호" +Common.718.MPSNZ = @[Common.718.MPS]: "후진" +Common.718.MPSNZR = @[Common.718.MPS]: "ë¹„ìƒ í›„ì§„" +Common.718.MPSVPR = @[Common.718.MPS]: "ë¹„ìƒ ì „ì§„" +Common.718.MPSPROV0 = @[Common.718.MPS]: "ìž‘ë™ í™•ì¸" +Common.718.MPSSK = @[Common.718.MPS]: "ì†ë„" #IDK what is this, no info (@Gleb) +Common.718.MPST = @[Common.718.MPS]: "ì œë™ ëª¨ë“œ 신호" +Common.718.MPSXR = @[Common.718.MPS]: "ë¹„ìƒ ìš´ì „ 1" +Common.718.MPSU1 = @[Common.718.MPS]: "전류 설정값 1" +Common.718.MPSU2 = @[Common.718.MPS]: "전류 설정값 2" +Common.718.MPSVP = @[Common.718.MPS]: "ì „ì§„" +Common.718.MPSVZ = @[Common.718.MPS]: "보호기 리셋" +Common.718.MPSXM = @[Common.718.MPS]: "@[Common.718.SB7]" +Common.718.MPSU1R = @[Common.718.MPS]: "ë¹„ìƒ ìš´ì „ 2" + +Common.718.MALP1MZK = @[Common.718.MALP1]: 사ì´ë¦¬ìŠ¤í„° 게ì´íЏ 차단 +Common.718.MALP1FM = @[Common.718.MALP1]: 서지 보호 과전압 (1000V ì´ìƒ) +Common.718.MALP1400 = @[Common.718.MALP1]: 3궤조 ì „ì•• 400V 집전중 +Common.718.MALP150 = @[Common.718.MALP1]: 1번 ì „ê¸°ìž ê·¸ë£¹ 전류 가용성 +Common.718.MALP1DIF = @[Common.718.MALP1]: 1번/2번 ì „ê¸°ìž ê·¸ë£¹ 전류 불ì¼ì¹˜ +Common.718.MALP1650 = @[Common.718.MALP1]: 1번 ì „ê¸°ìž ê·¸ë£¹ 전류 650A ì´ìƒ +Common.718.MALP10 = @[Common.718.MALP1]: 1번 ì „ê¸°ìž ê·¸ë£¹ 전류 ì—†ìŒ +Common.718.MALP1ARS = @[Common.718.MALP1]: 주파수 시작 실패 +Common.718.MALP1ITA = @[Common.718.MALP1]: 1번 그룹 ì œë™ ì‚¬ì´ë¦¬ìŠ¤í„° 절연 파괴 > 100A +Common.718.MALP1TR = @[Common.718.MALP1]: 1번 그룹 저항 전류 100A ì´ìƒ +Common.718.MALP1SN = @[Common.718.MALP1]: ì „ì› íšŒë¡œ 미연결 +Common.718.MALP1VN = @[Common.718.MALP1]: 환í’기 고장 + + +Common.718.MVDOTK = @[Common.718.MVD]: 구ë™/ì œë™ ëª¨ë“œ 고장 +Common.718.MVDRP = @[Common.718.MVD]: RP ìž‘ë™ + +Common.718.MALP2MSU = @[Common.718.MALP1]: 순간 전류 설정값 리셋 +Common.718.MALP2800 = @[Common.718.MALP1]: 3궤조 ì „ì•• 800V 집전중 +Common.718.MALP2975 = @[Common.718.MALP1]: 3궤조 최대 ì „ì•• 집전중 +Common.718.MALP250 = @[Common.718.MALP1]: 2번 ì „ê¸°ìž ê·¸ë£¹ 전류 가용성 +Common.718.MALP2650 = @[Common.718.MALP1]: 2번 ì „ê¸°ìž ê·¸ë£¹ 전류 650A ì´ìƒ +Common.718.MALP20 = @[Common.718.MALP1]: 2번 ì „ê¸°ìž ê·¸ë£¹ 전류 ì—†ìŒ +Common.718.MALP2BV = @[Common.718.MALP1]: BV ìž‘ë™ +Common.718.MALP2ITB = @[Common.718.MALP1]: 2번 그룹 ì œë™ ì‚¬ì´ë¦¬ìŠ¤í„° 절연 파괴 > 100A + +Common.718.MGRTP1 = @[Common.718.MGR]: 1번 집전기 눌림 +Common.718.MGRTP3 = @[Common.718.MGR]: 3번 집전기 눌림 +Common.718.MGRKHA = @[Common.718.MGR]: 1번 êµ¬ë™ ì ‘ì´‰ê¸° 그룹 ìž‘ë™ì¤‘ +Common.718.MGRKTA = @[Common.718.MGR]: 1번 ì œë™ ì ‘ì´‰ê¸° 그룹 ìž‘ë™ì¤‘ +Common.718.MGRTP2 = @[Common.718.MGR]: 2번 집전기 눌림 +Common.718.MGRTP4 = @[Common.718.MGR]: 4번 집전기 눌림 +Common.718.MGRKHB = @[Common.718.MGR]: 2번 êµ¬ë™ ì ‘ì´‰ê¸° 그룹 ìž‘ë™ì¤‘ +Common.718.MGRKTB = @[Common.718.MGR]: 2번 êµ¬ë™ ì ‘ì´‰ê¸° 그룹 ìž‘ë™ì¤‘ +Common.718.MGRKRV = @[Common.718.MGR]: ì „ì§„ 전환 접촉기 ìž‘ë™ì¤‘ #reverse switched to forward +Common.718.MGRNV = @[Common.718.MGR]: PTTI 환í’기 고장 +Common.718.MGRBV = @[Common.718.MGR]: BV armed +Common.718.MGRLK = @[Common.718.MGR]: 회로 접촉기 ìž‘ë™ì¤‘ +Common.718.MGRKRN = @[Common.718.MGR]: 후진 전환 접촉기 ìž‘ë™ì¤‘ #reverse switched to backward + +Common.718.MLUAKT = @[Common.718.MLU]: ì œë™ ëª…ë ¹ +Common.718.MLUAXH = @[Common.718.MLU]: êµ¬ë™ ëª…ë ¹ +Common.718.MLUAVP = @[Common.718.MLU]: ì „ì§„ 전환 명령 +Common.718.MLUANZ = @[Common.718.MLU]: 후진 전환 명령 +Common.718.MLUASS = @[Common.718.MLU]: 회로 ì—°ê²° ë¨ +Common.718.MLUAPV = @[Common.718.MLU]: ë¶€ ì—¬ìžê¸° ìž‘ë™ ëª…ë ¹ +Common.718.MLUALK = @[Common.718.MLU]: 회로 접촉기 ìž‘ë™ ëª…ë ¹ + +Common.718.MUVK1V1 = @[Common.718.MUVK]: 공압 밸브 â„–1 ì½”ì¼ ì œì–´ +Common.718.MUVK1KT = @[Common.718.MUVK]: ì œë™ ì ‘ì´‰ê¸° 제어 +Common.718.MUVK1KH = @[Common.718.MUVK]: êµ¬ë™ ì ‘ì´‰ê¸° 제어 +Common.718.MUVK1LK = @[Common.718.MUVK]: 회로 접촉기 제어 +Common.718.MUVK1PV = @[Common.718.MUVK]: ë¶€ ì—¬ìžê¸° 제어 +Common.718.MUVK1NZ = @[Common.718.MUVK]: 후진 전환 제어 +Common.718.MUVK1SN = @[Common.718.MUVK]: ê°ì°¨ ì „ì› íšŒë¡œ 미연결 + +Common.718.MIV33 = @[Common.718.MIV]: 주파수 시작 종료 +Common.718.MIVV1 = @[Common.718.MIV]: 공압 밸브 â„–1 +Common.718.MIVSMA = @[Common.718.MIV]: 최대 1번 설정값 그룹 전류 신호 +Common.718.MIVSMB = @[Common.718.MIV]: 최대 2번 설정값 그룹 전류 신호 + +Common.718.MUVK2RTM = @[Common.718.MUVK2]: 최소 전류 계전기 제어 +Common.718.MUVK2RKT = @[Common.718.MUVK2]: ì œë™ ì œì–´ 계전기 제어 +Common.718.MUVK2RP = @[Common.718.MUVK2]: 보호기 ìž‘ë™ +Common.718.MUVK2OTK = @[Common.718.MUVK2]: ê°ì°¨ 고장 +Common.718.MUVK275 = @[Common.718.MUVK2]: BUV ë¹„ìƒ ì „ì› +Common.718.MUVK2VP = @[Common.718.MUVK2]: ì „ì§„ 전환 제어 + + +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF51Toggle = @[Common.718.SF51] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF52Toggle = @[Common.718.SF52] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF53Toggle = @[Common.718.SF53] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF60Toggle = @[Common.718.SF60] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF61Toggle = @[Common.718.SF61] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF77Toggle = @[Common.718.SF77] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF78Toggle = @[Common.718.SF78] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF40Toggle = @[Common.718.SF40] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF41Toggle = @[Common.718.SF41] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF8Toggle = @[Common.718.SF8] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF11Toggle = @[Common.718.SF11] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF10Toggle = @[Common.718.SF10] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF7Toggle = @[Common.718.SF7] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF50Toggle = @[Common.718.SF50] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF76Toggle = @[Common.718.SF76] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF73Toggle = @[Common.718.SF73] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF3Toggle = @[Common.718.SF3] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF71Toggle = @[Common.718.SF71] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF63Toggle = @[Common.718.SF63] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF54Toggle = @[Common.718.SF54] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF65Toggle = @[Common.718.SF65] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF55Toggle = @[Common.718.SF55] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF9Toggle = @[Common.718.SF9] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF6Toggle = @[Common.718.SF6] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF5Toggle = @[Common.718.SF5] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF2Toggle = @[Common.718.SF2] + +Entities.gmod_subway_81-718.Buttons.Main.SA5Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-718.Buttons.Main.SB3Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-718.Buttons.Main.SA7Toggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-718.Buttons.Main.SB1Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-718.Buttons.Main.SB2Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-718.Buttons.Main.SA8Toggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-718.Buttons.Main.SB4Set = @[Common.718.SB4] +Entities.gmod_subway_81-718.Buttons.Main.SB5Set = @[Common.718.SB5] +Entities.gmod_subway_81-718.Buttons.Main.SA9Toggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-718.Buttons.Main.SA13Toggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-718.Buttons.Main.SA14Toggle = @[Common.ALL.ARSR] +Entities.gmod_subway_81-718.Buttons.Main.SA15Toggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-718.Buttons.Main.SA2Toggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-718.Buttons.Main.SB6KToggle = @[Common.ALL.KAHK] +Entities.gmod_subway_81-718.Buttons.Main.SB6Set = @[Common.ALL.KAH] +Entities.gmod_subway_81-718.Buttons.Main.SB7KToggle = @[Common.718.SB7K] +Entities.gmod_subway_81-718.Buttons.Main.SB7Set = @[Common.718.SB7] +Entities.gmod_subway_81-718.Buttons.Main.SB8Set = @[Common.ARS.KVTR] +Entities.gmod_subway_81-718.Buttons.Main.SB10Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-718.Buttons.Main.SB9Set = @[Common.ARS.KVT] +Entities.gmod_subway_81-718.Buttons.Main.SB11Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-718.Buttons.Main.SA16Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-718.Buttons.Main.SB12Set = @[Common.718.SB12] +Entities.gmod_subway_81-718.Buttons.Main.SB13Set = @[Common.718.SB13] +Entities.gmod_subway_81-718.Buttons.Main.SB14Set = @[Common.ALL.RMK] +Entities.gmod_subway_81-718.Buttons.Main.SB15Set = @[Common.718.SB15] +Entities.gmod_subway_81-718.Buttons.Main.SB16Set = @[Common.718.SB16] + + +Entities.gmod_subway_81-718.Buttons.Battery.RCToggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-718.Buttons.Battery.VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-718.Buttons.Battery.VTPR- = @[Common.718.VTPR] @[Common.ALL.CCW] +Entities.gmod_subway_81-718.Buttons.Battery.VTPR+ = @[Common.718.VTPR] @[Common.ALL.CW] + + +Entities.gmod_subway_81-718.Buttons.KR.SBR14Set = @[Common.718.RX1] +Entities.gmod_subway_81-718.Buttons.KR.SBR16Set = @[Common.718.KAH2] +Entities.gmod_subway_81-718.Buttons.KR.SBR15Set = @[Common.718.RX2] + + +Entities.gmod_subway_81-718.Buttons.VPU.SAP8Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-718.Buttons.VPU.SAP13Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-718.Buttons.VPU.SAP36Toggle = @[Common.ALL.ES] +Entities.gmod_subway_81-718.Buttons.VPU.SAP12Toggle = @[Common.720.AppLights] +Entities.gmod_subway_81-718.Buttons.VPU.SAP11Toggle = @[Common.718.Heat] +Entities.gmod_subway_81-718.Buttons.VPU.SAP23Toggle = @[Common.ARS.VP] +Entities.gmod_subway_81-718.Buttons.VPU.SAP9Toggle = @[Common.720.Vent1] +Entities.gmod_subway_81-718.Buttons.VPU.SAP10Toggle = @[Common.720.Vent2] +Entities.gmod_subway_81-718.Buttons.VPU.SAP3Toggle = @[Common.ALL.UNCh] +Entities.gmod_subway_81-718.Buttons.VPU.SAP39Toggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-718.Buttons.VPU.SBP22Set = @[Common.718.SBP22] +Entities.gmod_subway_81-718.Buttons.VPU.SBP6Set = @[Common.718.KDPR] +Entities.gmod_subway_81-718.Buttons.VPU.SBP4Set = @[Common.718.KDLR] +Entities.gmod_subway_81-718.Buttons.VPU.SAP14Toggle = @[Common.ARS.Freq] @[Common.ARS.FreqU] +Entities.gmod_subway_81-718.Buttons.VPU.SAP26Toggle = @[Common.718.UOS] +Entities.gmod_subway_81-718.Buttons.VPU.SAP24Toggle = @[Common.ALL.VOVT] + +Entities.gmod_subway_81-718.Buttons.ARS.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-718.Buttons.ARS.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-718.Buttons.ARS.!SD = @[Common.ALL.LSD] +Entities.gmod_subway_81-718.Buttons.ARS.!KT = @[Common.ARS.KT] +Entities.gmod_subway_81-718.Buttons.ARS.!RS = @[Common.ARS.RS] +Entities.gmod_subway_81-718.Buttons.ARS.!SK = @[Common.ARS.LN] +Entities.gmod_subway_81-718.Buttons.ARS.!04 = @[Common.ARS.04] +Entities.gmod_subway_81-718.Buttons.ARS.!0 = @[Common.ARS.0] +Entities.gmod_subway_81-718.Buttons.ARS.!40 = @[Common.ARS.40] +Entities.gmod_subway_81-718.Buttons.ARS.!60 = @[Common.ARS.60] +Entities.gmod_subway_81-718.Buttons.ARS.!70 = @[Common.ARS.70] +Entities.gmod_subway_81-718.Buttons.ARS.!80 = @[Common.ARS.80] +Entities.gmod_subway_81-718.Buttons.ARS.!KES = @[Common.718.KES] +Entities.gmod_subway_81-718.Buttons.ARS.!ST = @[Common.ALL.BrT] +Entities.gmod_subway_81-718.Buttons.ARS.!CUV = @[Common.718.CUV] +Entities.gmod_subway_81-718.Buttons.ARS.!AVU = @[Common.ALL.LAVU] +Entities.gmod_subway_81-718.Buttons.ARS.!AIP = @[Common.718.AIP] +Entities.gmod_subway_81-718.Buttons.ARS.!RIP = @[Common.718.RIP] +Entities.gmod_subway_81-718.Buttons.ARS.!KVD = @[Common.ARS.VD] +Entities.gmod_subway_81-718.Buttons.ARS.!VS1 = @[Common.718.VS1] +Entities.gmod_subway_81-718.Buttons.ARS.!VS2 = @[Common.718.VS2] + +Entities.gmod_subway_81-718.Buttons.Right.SA1/1Toggle = @[Common.ALL.VF1] +Entities.gmod_subway_81-718.Buttons.Right.SA2/1Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-718.Buttons.Right.SA5/1Toggle = @[Common.718.SPULightStrength] +Entities.gmod_subway_81-718.Buttons.Right.SA4/1Toggle = @[Common.ALL.GaugeLights] + +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKDV = @[Common.718.MVSUKDV] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUBDV = @[Common.718.MVSUBDV] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUPB = @[Common.718.MVSUPB] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARS = @[Common.718.MVSUARS] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUAVT = @[Common.718.MVSUAVT] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVV = @[Common.718.MVSUKVV] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVN = @[Common.718.MVSUKVN] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVX3 = @[Common.718.MVSUKVX3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVX2 = @[Common.718.MVSUKVX2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVX1 = @[Common.718.MVSUKVX1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKV0 = @[Common.718.MVSUKV0] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVT1 = @[Common.718.MVSUKVT1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVT2 = @[Common.718.MVSUKVT2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVT3 = @[Common.718.MVSUKVT3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUPVU = @[Common.718.MVSUPVU] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSURPB = @[Common.718.MVSURPB] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX = @[Common.718.MVSUARSX] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST = @[Common.718.MVSUARST] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX3 = @[Common.718.MVSUARSX3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX2 = @[Common.718.MVSUARSX2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX1 = @[Common.718.MVSUARSX1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARS0 = @[Common.718.MVSUARS0] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST1 = @[Common.718.MVSUARST1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST2 = @[Common.718.MVSUARST2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST3 = @[Common.718.MVSUARST3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUROT = @[Common.718.MVSUROT] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUSOT = @[Common.718.MVSUSOT] + +Entities.gmod_subway_81-718.Buttons.BUP_MUVS2.MUVS20 = @[Common.718.MUVS20] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS2.MUVS2ZPT = @[Common.718.MUVS2ZPT] + +Entities.gmod_subway_81-718.Buttons.BUP_MP.MPMP = @[Common.718.MPMP] +Entities.gmod_subway_81-718.Buttons.BUP_MS.MSMS = @[Common.718.MSMS] + +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1VP = @[Common.718.MUVS1VP] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1NZ = @[Common.718.MUVS1NZ] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1X = @[Common.718.MUVS1X] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1T = @[Common.718.MUVS1T] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1U1 = @[Common.718.MUVS1U1] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1U2 = @[Common.718.MUVS1U2] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1BAV = @[Common.718.MUVS1BAV] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1BUP = @[Common.718.MUVS1BUP] + +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPVP = @[Common.718.MLUPVP] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPNZ = @[Common.718.MLUPNZ] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPBUP = @[Common.718.MLUPBUP] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPV0 = @[Common.718.MLUPV0] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPKU = @[Common.718.MLUPKU] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPBAV = @[Common.718.MLUPBAV] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPKR = @[Common.718.MLUPKR] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPARS = @[Common.718.MLUPARS] + +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSPROV = @[Common.718.MPSPROV] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSAVR = @[Common.718.MPSAVR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSTARS = @[Common.718.MPSTARS] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSX = @[Common.718.MPSX] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSNZ = @[Common.718.MPSNZ] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSNZR = @[Common.718.MPSNZR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSPROV0 = @[Common.718.MPSPROV0] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSSK = @[Common.718.MPSSK] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPST = @[Common.718.MPST] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSXR = @[Common.718.MPSXR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSU1 = @[Common.718.MPSU1] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSU2 = @[Common.718.MPSU2] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSVP = @[Common.718.MPSVP] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSVPR = @[Common.718.MPSVPR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSVZ = @[Common.718.MPSVZ] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSXM = @[Common.718.MPSXM] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSU1R = @[Common.718.MPSU1R] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1MZK = @[Common.718.MALP1MZK] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1FM = @[Common.718.MALP1FM] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1400 = @[Common.718.MALP1400] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP150 = @[Common.718.MALP150] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1DIF = @[Common.718.MALP1DIF] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1650 = @[Common.718.MALP1650] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP10 = @[Common.718.MALP10] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1ARS = @[Common.718.MALP1ARS] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1ITA = @[Common.718.MALP1ITA] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1TR = @[Common.718.MALP1TR] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1SN = @[Common.718.MALP1SN] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1VN = @[Common.718.MALP1VN] +Entities.gmod_subway_81-718.Buttons.BUV_MVD.MVDOTK = @[Common.718.MVDOTK] +Entities.gmod_subway_81-718.Buttons.BUV_MVD.MVDRP = @[Common.718.MVDRP] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2MSU = @[Common.718.MALP2MSU] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2800 = @[Common.718.MALP2800] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2975 = @[Common.718.MALP2975] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP250 = @[Common.718.MALP250] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2650 = @[Common.718.MALP2650] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP20 = @[Common.718.MALP20] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2BV = @[Common.718.MALP2BV] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2ITB = @[Common.718.MALP2ITB] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP1 = @[Common.718.MGRTP1] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP3 = @[Common.718.MGRTP3] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKHA = @[Common.718.MGRKHA] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKTA = @[Common.718.MGRKTA] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP2 = @[Common.718.MGRTP2] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP4 = @[Common.718.MGRTP4] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKHB = @[Common.718.MGRKHB] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKTB = @[Common.718.MGRKTB] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKRV = @[Common.718.MGRKRV] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRNV = @[Common.718.MGRNV] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRBV = @[Common.718.MGRBV] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRLK = @[Common.718.MGRLK] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKRN = @[Common.718.MGRKRN] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAKT = @[Common.718.MLUAKT] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAXH = @[Common.718.MLUAXH] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAVP = @[Common.718.MLUAVP] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUANZ = @[Common.718.MLUANZ] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUASS = @[Common.718.MLUASS] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAPV = @[Common.718.MLUAPV] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUALK = @[Common.718.MLUALK] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1V1 = @[Common.718.MUVK1V1] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1KT = @[Common.718.MUVK1KT] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1KH = @[Common.718.MUVK1KH] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1LK = @[Common.718.MUVK1LK] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1PV = @[Common.718.MUVK1PV] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1NZ = @[Common.718.MUVK1NZ] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1SN = @[Common.718.MUVK1SN] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIV33 = @[Common.718.MIV33] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIVV1 = @[Common.718.MIVV1] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIVSMA = @[Common.718.MIVSMA] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIVSMB = @[Common.718.MIVSMB] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2RTM = @[Common.718.MUVK2RTM] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2RKT = @[Common.718.MUVK2RKT] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2RP = @[Common.718.MUVK2RP] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2OTK = @[Common.718.MUVK2OTK] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK275 = @[Common.718.MUVK275] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2VP = @[Common.718.MUVK2VP] + +Entities.gmod_subway_81-718.Buttons.PVZ.SF4Toggle = @[Common.718.SF4] +Entities.gmod_subway_81-718.Buttons.PVZ.SF27Toggle = @[Common.718.SF27] +Entities.gmod_subway_81-718.Buttons.PVZ.SF46Toggle = @[Common.718.SF46] +Entities.gmod_subway_81-718.Buttons.PVZ.SF12Toggle = @[Common.718.SF12] +Entities.gmod_subway_81-718.Buttons.PVZ.SF13Toggle = @[Common.718.SF13] +Entities.gmod_subway_81-718.Buttons.PVZ.SF45Toggle = @[Common.718.SF45] +Entities.gmod_subway_81-718.Buttons.PVZ.SF16Toggle = @[Common.718.SF16] +Entities.gmod_subway_81-718.Buttons.PVZ.SF44Toggle = @[Common.718.SF44] +Entities.gmod_subway_81-718.Buttons.PVZ.SF43Toggle = @[Common.718.SF43] +Entities.gmod_subway_81-718.Buttons.PVZ.SF14Toggle = @[Common.718.SF14] +Entities.gmod_subway_81-718.Buttons.PVZ.SF15Toggle = @[Common.718.SF15] +Entities.gmod_subway_81-718.Buttons.PVZ.SF25Toggle = @[Common.718.SF25] +Entities.gmod_subway_81-718.Buttons.PVZ.SF72Toggle = @[Common.718.SF72] +Entities.gmod_subway_81-718.Buttons.PVZ.SF29Toggle = @[Common.718.SF29] +Entities.gmod_subway_81-718.Buttons.PVZ.SF26Toggle = @[Common.718.SF26] +Entities.gmod_subway_81-718.Buttons.PVZ.SF42Toggle = @[Common.718.SF42] +Entities.gmod_subway_81-718.Buttons.PVZ.SF18Toggle = @[Common.718.SF18] +Entities.gmod_subway_81-718.Buttons.PVZ.SF20Toggle = @[Common.718.SF20] +Entities.gmod_subway_81-718.Buttons.PVZ.SF17Toggle = @[Common.718.SF17] +Entities.gmod_subway_81-718.Buttons.PVZ.SF19Toggle = @[Common.718.SF19] +Entities.gmod_subway_81-718.Buttons.PVZ.SF21Toggle = @[Common.718.SF21] +Entities.gmod_subway_81-718.Buttons.PVZ.SF22Toggle = @[Common.718.SF22] +Entities.gmod_subway_81-718.Buttons.PVZ.SF34Toggle = @[Common.718.SF34] +Entities.gmod_subway_81-718.Buttons.PVZ.SF35Toggle = @[Common.718.SF35] +Entities.gmod_subway_81-718.Buttons.PVZ.SF23Toggle = @[Common.718.SF23] +Entities.gmod_subway_81-718.Buttons.PVZ.SF24Toggle = @[Common.718.SF24] + +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-718.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-718.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-718.Buttons.HelperPanel.SA6Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-718.Buttons.HelperPanel.SA24Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-718.Buttons.HelperPanel.SB20Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-718.Buttons.HelperPanel.SB21Set = @[Common.ALL.Program2] + +Entities.gmod_subway_81-718.Buttons.BZOS.SAB1Toggle = @[Common.BZOS.On] +Entities.gmod_subway_81-718.Buttons.BZOS.!VH1 = @[Common.BZOS.VH1] +Entities.gmod_subway_81-718.Buttons.BZOS.!VH2 = @[Common.BZOS.VH2] + +Entities.gmod_subway_81-718.Buttons.CabVent.PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-718.Buttons.CabVent.PVK+ = @[Common.CabVent.PVK+] + +Entities.gmod_subway_81-718.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-718.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-718.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-718.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-718.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-718.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-718.Buttons.OtsekDoor1.OtsekDoor1 = @[Common.ALL.OtsekDoor1] +Entities.gmod_subway_81-718.Buttons.OtsekDoor2.OtsekDoor2 = @[Common.ALL.OtsekDoor2] +Entities.gmod_subway_81-718.Buttons.DriverValveDisconnect.EPKToggle = @[Common.ALL.EPV] +Entities.gmod_subway_81-718.Buttons.DriverValveDisconnect.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-718.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle = @[Common.ALL.DriverValveDisconnect] + +Entities.gmod_subway_81-718.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-718.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-718.Buttons.UAVAPanel.UAVAContactSet = @[Common.ALL.UAVAContact] + +Entities.gmod_subway_81-718.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] + +Entities.gmod_subway_81-718.Buttons.HVMeters.!I13 = @[Common.ALL.EnginesCurrent1] +Entities.gmod_subway_81-718.Buttons.HVMeters.!I24 = @[Common.ALL.EnginesCurrent2] +Entities.gmod_subway_81-718.Buttons.HVMeters.!HVVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_81-718.Buttons.HVMeters.!BatteryCurrent = @[Common.ALL.BatteryCurrent] +Entities.gmod_subway_81-718.Buttons.PneumaticPanels.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-718.Buttons.PneumaticPanels.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-718.Buttons.Left.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSPROV = @[Common.718.MPSPROV] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSAVR = @[Common.718.MPSAVR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSTARS = @[Common.718.MPSTARS] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSX = @[Common.718.MPSX] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSNZ = @[Common.718.MPSNZ] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSNZR = @[Common.718.MPSNZR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSPROV0 = @[Common.718.MPSPROV0] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSSK = @[Common.718.MPSSK] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPST = @[Common.718.MPST] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSXR = @[Common.718.MPSXR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSU1 = @[Common.718.MPSU1] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSU2 = @[Common.718.MPSU2] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSVP = @[Common.718.MPSVP] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSVPR = @[Common.718.MPSVPR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSVZ = @[Common.718.MPSVZ] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSXM = @[Common.718.MPSXM] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSU1R = @[Common.718.MPSU1R] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1MZK = @[Common.718.MALP1MZK] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1FM = @[Common.718.MALP1FM] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1400 = @[Common.718.MALP1400] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP150 = @[Common.718.MALP150] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1DIF = @[Common.718.MALP1DIF] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1650 = @[Common.718.MALP1650] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP10 = @[Common.718.MALP10] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1ARS = @[Common.718.MALP1ARS] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1ITA = @[Common.718.MALP1ITA] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1TR = @[Common.718.MALP1TR] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1SN = @[Common.718.MALP1SN] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1VN = @[Common.718.MALP1VN] +Entities.gmod_subway_81-719.Buttons.BUV_MVD.MVDOTK = @[Common.718.MVDOTK] +Entities.gmod_subway_81-719.Buttons.BUV_MVD.MVDRP = @[Common.718.MVDRP] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2MSU = @[Common.718.MALP2MSU] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2800 = @[Common.718.MALP2800] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2975 = @[Common.718.MALP2975] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP250 = @[Common.718.MALP250] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2650 = @[Common.718.MALP2650] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP20 = @[Common.718.MALP20] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2BV = @[Common.718.MALP2BV] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2ITB = @[Common.718.MALP2ITB] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP1 = @[Common.718.MGRTP1] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP3 = @[Common.718.MGRTP3] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKHA = @[Common.718.MGRKHA] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKTA = @[Common.718.MGRKTA] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP2 = @[Common.718.MGRTP2] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP4 = @[Common.718.MGRTP4] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKHB = @[Common.718.MGRKHB] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKTB = @[Common.718.MGRKTB] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKRV = @[Common.718.MGRKRV] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRNV = @[Common.718.MGRNV] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRBV = @[Common.718.MGRBV] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRLK = @[Common.718.MGRLK] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKRN = @[Common.718.MGRKRN] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAKT = @[Common.718.MLUAKT] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAXH = @[Common.718.MLUAXH] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAVP = @[Common.718.MLUAVP] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUANZ = @[Common.718.MLUANZ] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUASS = @[Common.718.MLUASS] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAPV = @[Common.718.MLUAPV] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUALK = @[Common.718.MLUALK] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1V1 = @[Common.718.MUVK1V1] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1KT = @[Common.718.MUVK1KT] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1KH = @[Common.718.MUVK1KH] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1LK = @[Common.718.MUVK1LK] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1PV = @[Common.718.MUVK1PV] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1NZ = @[Common.718.MUVK1NZ] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1SN = @[Common.718.MUVK1SN] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIV33 = @[Common.718.MIV33] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIVV1 = @[Common.718.MIVV1] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIVSMA = @[Common.718.MIVSMA] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIVSMB = @[Common.718.MIVSMB] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2RTM = @[Common.718.MUVK2RTM] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2RKT = @[Common.718.MUVK2RKT] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2RP = @[Common.718.MUVK2RP] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2OTK = @[Common.718.MUVK2OTK] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK275 = @[Common.718.MUVK275] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2VP = @[Common.718.MUVK2VP] +Entities.gmod_subway_81-719.Buttons.PVZ.SF4Toggle = @[Common.718.SF4] +Entities.gmod_subway_81-719.Buttons.PVZ.SF27Toggle = @[Common.718.SF27] +Entities.gmod_subway_81-719.Buttons.PVZ.SF46Toggle = @[Common.718.SF46] +Entities.gmod_subway_81-719.Buttons.PVZ.SF12Toggle = @[Common.718.SF12] +Entities.gmod_subway_81-719.Buttons.PVZ.SF13Toggle = @[Common.718.SF13] +Entities.gmod_subway_81-719.Buttons.PVZ.SF45Toggle = @[Common.718.SF45] +Entities.gmod_subway_81-719.Buttons.PVZ.SF16Toggle = @[Common.718.SF16] +Entities.gmod_subway_81-719.Buttons.PVZ.SF44Toggle = @[Common.718.SF44] +Entities.gmod_subway_81-719.Buttons.PVZ.SF43Toggle = @[Common.718.SF43] +Entities.gmod_subway_81-719.Buttons.PVZ.SF14Toggle = @[Common.718.SF14] +Entities.gmod_subway_81-719.Buttons.PVZ.SF15Toggle = @[Common.718.SF15] +Entities.gmod_subway_81-719.Buttons.PVZ.SF25Toggle = @[Common.718.SF25] +Entities.gmod_subway_81-719.Buttons.PVZ.SF72Toggle = @[Common.718.SF72] +Entities.gmod_subway_81-719.Buttons.PVZ.SF56Toggle = @[Common.718.SF56] +Entities.gmod_subway_81-719.Buttons.PVZ.SF29Toggle = @[Common.718.SF29] +Entities.gmod_subway_81-719.Buttons.PVZ.SF26Toggle = @[Common.718.SF26] +Entities.gmod_subway_81-719.Buttons.PVZ.SF42Toggle = @[Common.718.SF42] +Entities.gmod_subway_81-719.Buttons.PVZ.SF18Toggle = @[Common.718.SF18] +Entities.gmod_subway_81-719.Buttons.PVZ.SF20Toggle = @[Common.718.SF20] +Entities.gmod_subway_81-719.Buttons.PVZ.SF17Toggle = @[Common.718.SF17] +Entities.gmod_subway_81-719.Buttons.PVZ.SF19Toggle = @[Common.718.SF19] +Entities.gmod_subway_81-719.Buttons.PVZ.SF21Toggle = @[Common.718.SF21] +Entities.gmod_subway_81-719.Buttons.PVZ.SF22Toggle = @[Common.718.SF22] +Entities.gmod_subway_81-719.Buttons.PVZ.SF34Toggle = @[Common.718.SF34] +Entities.gmod_subway_81-719.Buttons.PVZ.SF35Toggle = @[Common.718.SF35] +Entities.gmod_subway_81-719.Buttons.PVZ.SF23Toggle = @[Common.718.SF23] +Entities.gmod_subway_81-719.Buttons.PVZ.SF24Toggle = @[Common.718.SF24] + +Entities.gmod_subway_81-719.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.RearPneumatic.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-719.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-719.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-719.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-719.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-719.Buttons.couch_cap_o.CouchCap = @[Common.ALL.CouchCap] +Entities.gmod_subway_81-719.Buttons.couch_cap.CouchCap = @[Common.ALL.CouchCap] + +Entities.gmod_subway_81-719.Buttons.Battery.VBToggle = @[Common.ALL.VB] + +#Spawner: +Entities.gmod_subway_81-718.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-718.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-718.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-718.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-718.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-718.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-718.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-718.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-718.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-718.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] diff --git a/lua/metrostroi_data/languages/kr_720.lua b/lua/metrostroi_data/languages/kr_720.lua new file mode 100644 index 0000000..3e6ddbf --- /dev/null +++ b/lua/metrostroi_data/languages/kr_720.lua @@ -0,0 +1,421 @@ +return [[ +#81-720 + +[kr] + +#######Buttons########### +#Cameras +Train.720.CameraCond = 냉난방기, IGLA +Train.720.CameraPPZ = PPZ +Train.720.CameraPV = VPU +Train.720.CameraVityaz = SAU "Vityaz" +Train.720.CameraKRMH = KRMSH, UAVA 밸브 +Train.720.CameraPVZ = PVZ + +#Common +Common.720.SF1 = SF1: 주 ì „ì› +Common.720.SF2 = SF2: 주 제어 +Common.720.SF3 = SF3: ë¹„ìƒ ì œì–´ +Common.720.SF4 = SF4: BARS +Common.720.SF5 = SF5: BUP (차량 제어 유닛) +Common.720.SF6 = SF6: BKCU (제어 회로 명령 유닛) +Common.720.SF7 = SF7: PPO (ASOTP) +Common.720.SF8 = SF8: 안내방송기 +Common.720.SF9 = SF9: 무선국 +Common.720.SF10 = SF10: ê°ì°¨ ë°©í–¥ +Common.720.SF11 = SF11: ì§„í–‰ ë°©í–¥ +Common.720.SF12 = SF12: 전조등 1번 그룹 +Common.720.SF13 = SF13: 전조등 2번 그룹 +Common.720.SF14 = SF14: ì ìƒ‰ë“± +Common.720.SF15 = SF15: @[Common.703.VU3] +Common.720.SF16 = SF16: @[Common.703.VU1] +Common.720.SF17 = SF17: 운전실 냉난방기 +Common.720.SF18 = SF18: 차륜 ë„유기 +Common.720.SF19 = SF19: ì œë™ë³€ 주 ì „ì› +Common.720.SF20 = SF20: ì œë™ë³€ ë¹„ìƒ ì „ì› +Common.720.SF21 = SF21: 출입문 열림 +Common.720.SF22 = SF22: 출입문 닫힘 + +Common.720.SFV1 = SF1: ê°ì°¨ 제어 회로 ì „ì› +Common.720.SFV2 = SF2: ê°ì°¨ 제어 유닛 ì „ì› +Common.720.SFV3 = SF3: ê²¬ì¸ ì „ë™ê¸° 제어 유닛 ì „ì› +Common.720.SFV4 = SF4: ê²¬ì¸ ì „ë™ê¸° 제어 유닛 제어 +Common.720.SFV5 = SF5: ê²¬ì¸ ì „ë™ê¸° 제어 유닛 ë¹„ìƒ ì œì–´ +Common.720.SFV6 = SF6: BUTP ì „ì› +Common.720.SFV7 = SF7: ì „ì› ê³µê¸‰ 장치 +Common.720.SFV8 = SF8: BV 제어 +Common.720.SFV9 = SF9: BV ì „ì› +Common.720.SFV10 = SF10: PPO (ASOTP PCBK) +Common.720.SFV11 = SF11: 공기 압축기 +Common.720.SFV12 = SF12: 출입문 닫힘 +Common.720.SFV13 = SF13: 좌측 출입문 열림 +Common.720.SFV14 = SF14: 우측 출입문 열림 +Common.720.SFV15 = SF15: 관통문 잠금 +Common.720.SFV16 = SF16: 안내방송기 +Common.720.SFV17 = SF17: ë¹„ìƒ í†µí™” 장치 +Common.720.SFV18 = SF18: @[Common.ALL.Unsused1] +Common.720.SFV19 = SF19: ê°ì‹¤ 조명 ì „ì› +Common.720.SFV20 = SF20: ê°ì‹¤ ë¹„ìƒ ì¡°ëª… ì „ì› +Common.720.SFV21 = SF21: ì†ë„ 센서 +Common.720.SFV22 = SF22: 주차 ì œë™ +Common.720.SFV23 = SF23: 환í’기 1번 그룹 제어 +Common.720.SFV24 = SF24: 환í’기 2번 그룹 제어 +Common.720.SFV25 = SF25: 환í’기 1번 그룹 ì „ì› +Common.720.SFV26 = SF26: 환í’기 2번 그룹 ì „ì› +Common.720.SFV27 = SF27: ì œë™ ìœ ë„기 ì „ì› +Common.720.SFV28 = SF28: ìºíŽ˜ì‹œí„° ì „ì› ì¶©ì „ +Common.720.SFV29 = SF29: 집전기 +Common.720.SFV30 = SF30: ë…¸ì„ ë„ & 안내기 +Common.720.SFV31 = SF31: @[Common.ALL.Unsused1] +Common.720.SFV32 = SF32: @[Common.ALL.Unsused1] +Common.720.SFV33 = SF33: @[Common.ALL.Unsused1] + +Common.720.VentCMode = 환기 모드 +Common.720.VentHMode+ = 난방 세기 ì¦ê°€ +Common.720.VentHMode- = 난방 세기 ê°ì†Œ +Common.720.VentSMode- = 환기 세기 ì¦ê°€ +Common.720.VentSMode+ = 환기 세기 ê°ì†Œ + +Common.720.Pant1 = 집전기 1번 그룹 사용 중지 +Common.720.Pant2 = 집전기 2번 그룹 사용 중지 +Common.720.Vent1 = 환í’기 1번 그룹 +Common.720.Vent2 = 환í’기 2번 그룹 +Common.720.TorecDoors = 관통문 잠금 +Common.720.BBER = ë¹„ìƒ BBE +Common.720.BBE = BBE: ì „ì› ê³µê¸‰ 장치 +Common.720.CabLightStrength = 운전실 조명 ë°ê¸° ì¡°ì ˆ +Common.720.AppLights = 배전함 조명 +Common.720.BARSBlock = 고장 BARS (ARS 유닛) 차단 + +Common.720.Accel = ê°€ì†ë„ +Common.720.Forward = ì „ì§„ +Common.720.Backward = 후진 +Common.720.Stand = +Common.720.Ticker = 안내기 +Common.720.KAH = KAH: BARS ë¹„ìƒ ìš´ì „ 모드 +Common.720.KAHK = @[Common.ALL.KAHK] +Common.720.ALS = ALS: ARS를 ALS 모드로 전환 (ARS 사용 중지) +Common.720.ALSK = ALS 버튼 커버 +Common.720.FDepot = 기지 출고 모드 +Common.720.HVoltage = ê³ ì „ì•• ì§‘ì „ 불가 +Common.720.PassScheme = ê°ì‹¤ ì „ìž ë…¸ì„ ë„ #old translation: "Line schemes" +Common.720.EmergencyCompressor = 공기 압축기 ê°•ì œ ê¸°ë™ ë²„íŠ¼ +Common.720.EnableBV = BV 사용 +Common.720.DisableBV = BV 미사용 +Common.720.Ring = ì—°ë½ ë¶€ì € +Common.720.R_Announcer = ê°ì‹¤ ë‚´ 안내 방송 스피커 활성 +Common.720.R_Line = 마ì´í¬ 사용 +Common.720.R_Emer = ë¹„ìƒ í†µí™” 장치 +Common.720.R_Program1 = 안내 방송 ìž¬ìƒ (안내 방송 1) +Common.720.EnableBVEmer = ë¹„ìƒ BV 사용 +Common.720.EmergencyControls = 제어 회로 ë¹„ìƒ ìž‘ë™ ì¤‘ì§€ +Common.720.Wiper = 와ì´í¼ + +Common.720.AccelRate = 경사로 밀림 ë°©ì§€ +Common.720.EBrakeAdd = ë³´ì¡° ì œë™ë ¥ ì¦ê°€ +Common.720.EBrakeRelease = ë³´ì¡° ì œë™ë ¥ ê°ì†Œ +Common.720.EBrakeToggle = ë³´ì¡° ì œë™ +Common.720.EmergencyBrake = ë¹„ìƒ ì œë™ +Common.720.DoorClose = 출입문 닫힘 +Common.720.AttentionMessage = 알림 í™•ì¸ ë²„íŠ¼ + + +Common.720.DoorSelectL = 좌측 출입문 ì„ íƒ +Common.720.DoorSelectR = 우측 출입문 ì„ íƒ +Common.720.DoorBlock = 출입문 제어 ë¹„ì—°ë™ +Common.720.KDL = 좌측 출입문 열림 +Common.720.KDP = 우측 출입문 열림 + +Common.Vityaz.F1 = Vityaz: F1 +Common.Vityaz.F2 = Vityaz: ë‹¤ìŒ í™”ë©´ +Common.Vityaz.F3 = Vityaz: ì´ì „ 화면 +Common.Vityaz.F4 = Vityaz: ë©”ì¸ ëª¨ë“œ +Common.Vityaz.1 = Vityaz: 1 +Common.Vityaz.4 = Vityaz: 4 +Common.Vityaz.7 = Vityaz: 7 +Common.Vityaz.2 = Vityaz: 2 +Common.Vityaz.5 = Vityaz: 5 +Common.Vityaz.8 = Vityaz: 8 +Common.Vityaz.0 = Vityaz: 0 +Common.Vityaz.3 = Vityaz: 3 +Common.Vityaz.6 = Vityaz: 6 +Common.Vityaz.9 = Vityaz: 9 +Common.Vityaz.F5 = Vityaz: ЗV +Common.Vityaz.F6 = Vityaz: 위\ì†ë„ +Common.Vityaz.F7 = Vityaz: 아래\전류 +Common.Vityaz.F8 = Vityaz: ìž…ë ¥\ê°ì°¨ë³„ ìƒíƒœ +Common.Vityaz.F9 = Vityaz: ì„ íƒ\ê°ì°¨ë³„ ìƒíƒœ 제어 + +Common.720.EmerX1 = ë¹„ìƒ ìš´ì „ 모드 X1 +Common.720.EmerX2 = ë¹„ìƒ ìš´ì „ 모드 X2 +Common.720.EmerCloseDoors = 출입문 ê°•ì œ 닫힘 +Common.720.EmergencyDoors = 출입문 ë¹„ìƒ ì œì–´ +Common.720.BRU = BRU: ê³ ì „ì•• 차단기 + +#gmod_subway_81-720 +#Buttons: + +Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode- = @[Common.720.VentCMode] @[Common.ALL.CCW] +Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode+ = @[Common.720.VentCMode] @[Common.ALL.CW] +Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode+ = @[Common.720.VentHMode+] +Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode- = @[Common.720.VentHMode-] +Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode- = @[Common.720.VentSMode-] +Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode+ = @[Common.720.VentSMode+] + +Entities.gmod_subway_81-720.Buttons.RV.EmerX1Set = @[Common.720.EmerX1] +Entities.gmod_subway_81-720.Buttons.RV.EmerX2Set = @[Common.720.EmerX2] +Entities.gmod_subway_81-720.Buttons.RV.EmerCloseDoorsSet = @[Common.720.EmerCloseDoors] +Entities.gmod_subway_81-720.Buttons.RV.EmergencyDoorsToggle = @[Common.720.EmergencyDoors] + +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF1Set = @[Common.Vityaz.F1] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF2Set = @[Common.Vityaz.F2] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF3Set = @[Common.Vityaz.F3] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF4Set = @[Common.Vityaz.F4] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz1Set = @[Common.Vityaz.1] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz4Set = @[Common.Vityaz.4] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz7Set = @[Common.Vityaz.7] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz2Set = @[Common.Vityaz.2] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz5Set = @[Common.Vityaz.5] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz8Set = @[Common.Vityaz.8] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz0Set = @[Common.Vityaz.0] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz3Set = @[Common.Vityaz.3] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz6Set = @[Common.Vityaz.6] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz9Set = @[Common.Vityaz.9] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF5Set = @[Common.Vityaz.F5] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF6Set = @[Common.Vityaz.F6] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF7Set = @[Common.Vityaz.F7] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF8Set = @[Common.Vityaz.F8] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF9Set = @[Common.Vityaz.F9] + +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF1Toggle = @[Common.720.SF1] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF2Toggle = @[Common.720.SF2] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF3Toggle = @[Common.720.SF3] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF4Toggle = @[Common.720.SF4] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF5Toggle = @[Common.720.SF5] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF6Toggle = @[Common.720.SF6] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF7Toggle = @[Common.720.SF7] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF8Toggle = @[Common.720.SF8] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF9Toggle = @[Common.720.SF9] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF10Toggle = @[Common.720.SF10] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF11Toggle = @[Common.720.SF11] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF12Toggle = @[Common.720.SF12] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF13Toggle = @[Common.720.SF13] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF14Toggle = @[Common.720.SF14] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF15Toggle = @[Common.720.SF15] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF16Toggle = @[Common.720.SF16] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF17Toggle = @[Common.720.SF17] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF18Toggle = @[Common.720.SF18] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF19Toggle = @[Common.720.SF19] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF20Toggle = @[Common.720.SF20] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF21Toggle = @[Common.720.SF21] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF22Toggle = @[Common.720.SF22] + +Entities.gmod_subway_81-720.Buttons.BackDown.Pant1Toggle = @[Common.720.Pant1] +Entities.gmod_subway_81-720.Buttons.BackDown.Pant2Toggle = @[Common.720.Pant2] +Entities.gmod_subway_81-720.Buttons.BackDown.Vent1Toggle = @[Common.720.Vent1] +Entities.gmod_subway_81-720.Buttons.BackDown.Vent2Toggle = @[Common.720.Vent2] +Entities.gmod_subway_81-720.Buttons.BackDown.PassLightToggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-720.Buttons.BackDown.CabLightToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-720.Buttons.BackDown.Headlights1Toggle = @[Common.ALL.VF1] +Entities.gmod_subway_81-720.Buttons.BackDown.Headlights2Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-720.Buttons.BackDown.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-720.Buttons.BackDown.TorecDoorsToggle = @[Common.720.TorecDoors] +Entities.gmod_subway_81-720.Buttons.BackDown.BBERToggle = @[Common.720.BBER] +Entities.gmod_subway_81-720.Buttons.BackDown.BBEToggle = @[Common.720.BBE] +Entities.gmod_subway_81-720.Buttons.BackDown.CompressorToggle = @[Common.ALL.MK] +Entities.gmod_subway_81-720.Buttons.BackDown.CabLightStrengthToggle = @[Common.720.CabLightStrength] +Entities.gmod_subway_81-720.Buttons.BackDown.AppLights1Toggle = @[Common.720.AppLights] +Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock- = @[Common.720.BARSBlock] @[Common.ALL.CCW] +Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock+ = @[Common.720.BARSBlock] @[Common.ALL.CW] +Entities.gmod_subway_81-720.Buttons.BackDown.BatteryToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-720.Buttons.BackDown.ALSFreqToggle = @[Common.ARS.Freq] + +Entities.gmod_subway_81-720.Buttons.PUU.!DoorsClosed = @[Common.ALL.LSD] +Entities.gmod_subway_81-720.Buttons.PUU.StandToggle = @[Common.720.Stand] @[Common.ALL.Unsused2] +Entities.gmod_subway_81-720.Buttons.PUU.TickerToggle = @[Common.720.Ticker] +Entities.gmod_subway_81-720.Buttons.PUU.KAHToggle = @[Common.720.KAH] +Entities.gmod_subway_81-720.Buttons.PUU.KAHkToggle = @[Common.720.KAHK] +Entities.gmod_subway_81-720.Buttons.PUU.ALSToggle = @[Common.720.ALS] +Entities.gmod_subway_81-720.Buttons.PUU.ALSkToggle = @[Common.720.ALSK] +Entities.gmod_subway_81-720.Buttons.PUU.FDepotToggle = @[Common.720.FDepot] @[Common.ALL.Unsused2] +Entities.gmod_subway_81-720.Buttons.PUU.!HVoltage = @[Common.720.HVoltage] +Entities.gmod_subway_81-720.Buttons.PUU.PassSchemeToggle = @[Common.720.PassScheme] +Entities.gmod_subway_81-720.Buttons.PUU.EmergencyCompressorSet = @[Common.720.EmergencyCompressor] +Entities.gmod_subway_81-720.Buttons.PUU.EnableBVSet = @[Common.720.EnableBV] +Entities.gmod_subway_81-720.Buttons.PUU.DisableBVSet = @[Common.720.DisableBV] +Entities.gmod_subway_81-720.Buttons.PUU.RingSet = @[Common.720.Ring] +Entities.gmod_subway_81-720.Buttons.PUU.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-720.Buttons.PUU.R_AnnouncerToggle = @[Common.720.R_Announcer] +Entities.gmod_subway_81-720.Buttons.PUU.R_LineToggle = @[Common.720.R_Line] +Entities.gmod_subway_81-720.Buttons.PUU.R_EmerSet = @[Common.720.R_Emer] +Entities.gmod_subway_81-720.Buttons.PUU.R_Program1Set = @[Common.720.R_Program1] +Entities.gmod_subway_81-720.Buttons.PUU.EnableBVEmerSet = @[Common.720.EnableBVEmer] +Entities.gmod_subway_81-720.Buttons.PUU.EmergencyControlsToggle = @[Common.720.EmergencyControls] +Entities.gmod_subway_81-720.Buttons.PUU.WiperToggle = @[Common.720.Wiper] +Entities.gmod_subway_81-720.Buttons.PUU.!VDop = @[Common.ALL.SpeedAccept] +Entities.gmod_subway_81-720.Buttons.PUU.!VFact = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-720.Buttons.PUU.!VPred = @[Common.ALL.SpeedAttent] +Entities.gmod_subway_81-720.Buttons.PUU.!VDop2 = @[Common.ALL.SpeedAccept] +Entities.gmod_subway_81-720.Buttons.PUU.!Acc = @[Common.720.Accel] +Entities.gmod_subway_81-720.Buttons.PUU.!Forw = @[Common.720.Forward] +Entities.gmod_subway_81-720.Buttons.PUU.!Back = @[Common.720.Backward] + +Entities.gmod_subway_81-720.Buttons.PUR.AccelRateSet = @[Common.720.AccelRate] +Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeAddSet = @[Common.720.EBrakeAdd] +Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeReleaseSet = @[Common.720.EBrakeRelease] +Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeToggle = @[Common.720.EBrakeToggle] +Entities.gmod_subway_81-720.Buttons.PUR.EmergencyBrakeToggle = @[Common.720.EmergencyBrake] +Entities.gmod_subway_81-720.Buttons.PUR.DoorCloseToggle = @[Common.720.DoorClose] +Entities.gmod_subway_81-720.Buttons.PUR.AttentionMessageSet = @[Common.720.AttentionMessage] +Entities.gmod_subway_81-720.Buttons.PUR.AttentionSet = @[Common.ARS.KB] +Entities.gmod_subway_81-720.Buttons.PUR.AttentionBrakeSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-720.Buttons.PUR.HornBSet = @[Common.ALL.Horn] +Entities.gmod_subway_81-720.Buttons.PUR.DoorRightSet = @[Common.720.KDP] +Entities.gmod_subway_81-720.Buttons.PUR.!DoorRightLamp = @[Common.ALL.KDPL] + +Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectLToggle = @[Common.720.DoorSelectL] +Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectRToggle = @[Common.720.DoorSelectR] +Entities.gmod_subway_81-720.Buttons.PUL.DoorBlockToggle = @[Common.720.DoorBlock] +Entities.gmod_subway_81-720.Buttons.PUL.!DoorLeftLamp = @[Common.ALL.KDLL] +Entities.gmod_subway_81-720.Buttons.PUL.DoorLeftSet = @[Common.720.KDL] + +Entities.gmod_subway_81-720.Buttons.PVZ.SFV1Toggle = @[Common.720.SFV1] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV2Toggle = @[Common.720.SFV2] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV3Toggle = @[Common.720.SFV3] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV4Toggle = @[Common.720.SFV4] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV5Toggle = @[Common.720.SFV5] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV6Toggle = @[Common.720.SFV6] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV7Toggle = @[Common.720.SFV7] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV8Toggle = @[Common.720.SFV8] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV9Toggle = @[Common.720.SFV9] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV10Toggle = @[Common.720.SFV10] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV11Toggle = @[Common.720.SFV11] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV12Toggle = @[Common.720.SFV12] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV13Toggle = @[Common.720.SFV13] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV14Toggle = @[Common.720.SFV14] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV15Toggle = @[Common.720.SFV15] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV16Toggle = @[Common.720.SFV16] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV17Toggle = @[Common.720.SFV17] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV18Toggle = @[Common.720.SFV18] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV19Toggle = @[Common.720.SFV19] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV20Toggle = @[Common.720.SFV20] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV21Toggle = @[Common.720.SFV21] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV22Toggle = @[Common.720.SFV22] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV23Toggle = @[Common.720.SFV23] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV24Toggle = @[Common.720.SFV24] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV25Toggle = @[Common.720.SFV25] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV26Toggle = @[Common.720.SFV26] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV27Toggle = @[Common.720.SFV27] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV28Toggle = @[Common.720.SFV28] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV29Toggle = @[Common.720.SFV29] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV30Toggle = @[Common.720.SFV30] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV31Toggle = @[Common.720.SFV31] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV32Toggle = @[Common.720.SFV32] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV33Toggle = @[Common.720.SFV33] + +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] + +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] + +Entities.gmod_subway_81-720.Buttons.BTO.K29Toggle = @[Common.ALL.KRMH] +Entities.gmod_subway_81-720.Buttons.BTO.UAVAToggle = @[Common.ALL.UAVA2] + +Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +Entities.gmod_subway_81-720.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-720.Buttons.RearDoor1.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-720.Buttons.CabinDoorR.CabinDoorRight = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-720.Buttons.CabinDoorL.CabinDoorLeft = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-720.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-720.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] + +Entities.gmod_subway_81-720.Buttons.VoltHelper2.!HV = @[Common.ALL.HighVoltage] +Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I1_3 = @[Common.ALL.EnginesCurrent1] +Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I2_4 = @[Common.ALL.EnginesCurrent2] +Entities.gmod_subway_81-720.Buttons.PneumoHelper2.!BrakeTrainLine = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-720.Buttons.PneumoHelper1.!BrakeCylinder = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-720.Buttons.VoltHelper1.!Battery = @[Common.ALL.BatteryVoltage] +Entities.gmod_subway_81-720.Buttons.GV.GVToggle = @[Common.720.BRU] + +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-720.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-720.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +#gmod_subway_81-721 +Entities.gmod_subway_81-721.Buttons.Battery.BatteryToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-721.Buttons.GV.GVToggle = @[Common.720.BRU] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV1Toggle = @[Common.720.SFV1] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV2Toggle = @[Common.720.SFV2] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV3Toggle = @[Common.720.SFV3] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV4Toggle = @[Common.720.SFV4] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV5Toggle = @[Common.720.SFV5] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV6Toggle = @[Common.720.SFV6] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV7Toggle = @[Common.720.SFV7] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV8Toggle = @[Common.720.SFV8] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV9Toggle = @[Common.720.SFV9] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV10Toggle = @[Common.720.SFV10] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV11Toggle = @[Common.720.SFV11] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV12Toggle = @[Common.720.SFV12] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV13Toggle = @[Common.720.SFV13] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV14Toggle = @[Common.720.SFV14] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV15Toggle = @[Common.720.SFV15] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV16Toggle = @[Common.720.SFV16] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV17Toggle = @[Common.720.SFV17] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV18Toggle = @[Common.720.SFV18] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV19Toggle = @[Common.720.SFV19] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV20Toggle = @[Common.720.SFV20] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV21Toggle = @[Common.720.SFV21] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV22Toggle = @[Common.720.SFV22] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV23Toggle = @[Common.720.SFV23] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV24Toggle = @[Common.720.SFV24] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV25Toggle = @[Common.720.SFV25] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV26Toggle = @[Common.720.SFV26] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV27Toggle = @[Common.720.SFV27] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV28Toggle = @[Common.720.SFV28] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV29Toggle = @[Common.720.SFV29] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV30Toggle = @[Common.720.SFV30] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV31Toggle = @[Common.720.SFV31] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV32Toggle = @[Common.720.SFV32] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV33Toggle = @[Common.720.SFV33] + +Entities.gmod_subway_81-721.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-721.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +#Spawner: + +Entities.gmod_subway_81-720.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-720.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-720.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-720.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-720.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-720.Spawner.PassSchemesInvert.Name = @[Common.Spawner.SchemeInvert] +Entities.gmod_subway_81-720.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-720.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-720.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-720.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-720.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] diff --git a/lua/metrostroi_data/languages/kr_722.lua b/lua/metrostroi_data/languages/kr_722.lua new file mode 100644 index 0000000..4f67393 --- /dev/null +++ b/lua/metrostroi_data/languages/kr_722.lua @@ -0,0 +1,360 @@ +return [[ +#81-722 + +[kr] + +#Cameras: +Train.722.Breakers = 회로 차단기 +Train.722.PU2_1 = 버튼 íŒ¨ë„ +Train.722.PU2_2 = ë³´ì¡° íŒ¨ë„ +Train.722.Vityaz = SAU "VITYAZ-SP" 모니터 +Train.722.SARMAT = CIS 시스템 모니터 +Train.722.CabLights = 운전실 조명 íŒ¨ë„ +Train.722.Disconnects = 차단 밸브류 +Train.722.KRMH = KRMSH, RVTB 밸브 + +#######Buttons########### +Common.722.MirrorHeating = 반사경 히터 +Common.722.EmergencyDrive = ë¹„ìƒ ìš´ì „ 모드 - ë¹„ìƒ ê¸°ë™ +Common.722.Microphone = 마ì´í¬ ìž‘ë™ +Common.722.LRS = 무선국 배터리 ë¹„ìƒ ì „ì› #indicator +Common.722.LAVS = ì œë™ê´€ ì••ë ¥ 부족 #indicator +Common.722.LRU = 제어 계전기 êº¼ì§ #indicator +Common.722.GlassWasher = ì „ë©´ ì°½ 워셔 +Common.722.GlassCleaner = ì „ë©´ ì°½ 와ì´í¼ +Common.722.EmergencyBrakeTPlus = ë¹„ìƒ ì œë™ (T+ 모드) +Common.722.EmergencyBrakeTPlusK = "ë¹„ìƒ ì œë™" 버튼 커버 +Common.722.KRO = ì§„í–‰ ë°©í–¥ + +Common.722.PSNToggle = 배터리 ì¶©ì „ (외부 ì „ì› ì‚¬ìš©) +Common.722.BattOn = ì—´ì°¨ ì „ì› ê³µê¸‰ 장치 ìž‘ë™ +Common.722.BattOff = ì—´ì°¨ ì „ì› ê³µê¸‰ 장치 ìž‘ë™ ì¤‘ì§€ +Common.722.TorecDoorUnlock = 통로문 잠금 í•´ì œ +Common.722.SCEnabled = ë‹¨ë½ ìž¥ì¹˜ ìž‘ë™ +Common.722.LSOSD = 스í¬ë¦°ë„ì–´ 표시등 ì ë“± #indicator + +Common.722.PassVent = ê°ì‹¤ 환í’기 +Common.722.VRU = 제어 모드 스위치 +Common.722.VADToggle = 출입문 ì¸í„°ë¡ 미사용 주행 +Common.722.VAHToggle = í™•ì¸ íŽ˜ë‹¬ 미사용 주행 +Common.722.EmergencyRadioPowerToggle = 무선국 ë¹„ìƒ ì „ì› +Common.722.BARSMode = BARS 모드 스위치 +Common.722.PantSC = ì§‘ì „ 장치, 단ë½ê¸° + +Common.SARMAT.Up = SARMAT: 위 +Common.SARMAT.Down = SARMAT: 아래 +Common.SARMAT.Enter = SARMAT: Enter +Common.SARMAT.Esc = SARMAT: Esc +Common.SARMAT.F1 = SARMAT: F1 +Common.SARMAT.F2 = SARMAT: F2 +Common.SARMAT.F3 = SARMAT: F3 +Common.SARMAT.F4 = SARMAT: F4 +Common.SARMAT.Path = SARMAT: ë°©í–¥ +Common.SARMAT.Line = SARMAT: 노선 +Common.SARMAT.Zero = SARMAT: 시작으로 설정 +Common.SARMAT.Start = SARMAT: 시작 + +#Autobreakers +Common.722.SF1 = SF1: 차량 ì „ì›ì„  (제어) +Common.722.SF2 = SF2: 운전실 활성 +Common.722.SF3 = SF3: 주 제어 +Common.722.SF4 = SF4: ë¹„ìƒ ì œì–´ +Common.722.SF5 = SF5: RVTB 제어 +Common.722.SF6 = SF6: ì œë™ë³€ ì „ì› +Common.722.SF7 = SF7: 출입문 제어 +Common.722.SF8 = SF8: BARS 1 +Common.722.SF9 = SF9: BARS 2 +Common.722.UPO = SF: UPO1 +Common.722.SF10 = SF10: BRPI-M1 +Common.722.SF11 = SF11: BRPI-M2 +Common.722.SF12 = SF12: 화재 경보 +Common.722.SF13 = SF13: @[Common.722.PantSC] +Common.722.SF14 = SF14: 무선 êµì‹  1 +Common.722.SF15 = SF15: 무선 êµì‹  2 +Common.722.SF16 = SF16: CIS 1 (모니터) +Common.722.SF17 = SF17: CIS 2 (중앙 ì •ë³´ 시스템) +Common.722.SF18 = SF18: CIS 3 +Common.722.SF19 = SF19: BUKP, UPI +Common.722.SF20 = SF20: 모니터 +Common.722.SF21 = SF21: ë°©í–¥ +Common.722.SF22 = SF22: ì ìƒ‰ë“± ì „ì› (배터리) +Common.722.SF23 = SF23: 전조등, ì ìƒ‰ë“± +Common.722.SF24 = SF24: 스í¬ë¦°ë„ì–´ 열림 확ì¸ë“± +Common.722.SF25 = SF25: 운전실 조명 +Common.722.SF26 = SF26: 운전실 냉난방기 +Common.722.SF27 = SF27: ì „ë©´ ì°½ 와ì´í¼, 워셔, ê²½ì  + +Common.722.SF31 = SF31: 차량 ì „ì›ì„  +Common.722.SF32 = SF32: 차량 ì „ì›ì„  (제어) +Common.722.SF33 = SF33: 제어 회로 ì „ì› +Common.722.SF34 = SF34: 좌측 CIS +Common.722.SF35 = SF35: 우측 CIS +Common.722.SF36 = SF36: 외부 차량 ìƒíƒœ 확ì¸ë“± +Common.722.SF37 = SF37: ì§‘ì „ 장치 비활성 +Common.722.SF38 = SF38: 예비 +Common.722.SF41 = SF41: 좌측 출입문 열림 +Common.722.SF42 = SF42: 우측 출입문 열림 +Common.722.SF43 = SF43: 출입문 닫힘 +Common.722.SF44 = SF44: 통로문 +Common.722.SF45 = SF45: ê°ì‹¤ 조명 ì „ì› +Common.722.SF46 = SF46: ê°ì‹¤ ë¹„ìƒ ì¡°ëª… +Common.722.SF47 = SF47: 1번 환í’기 그룹 +Common.722.SF48 = SF48: 2번 환í’기 그룹 +Common.722.SF49 = SF49: 계수기 +Common.722.SF51 = SF51: ê°ì°¨ 제어 유닛 +Common.722.SF52 = SF52: BODV +Common.722.SF53 = SF53: PSN (ì „ì› ê³µê¸‰ 장치) +Common.722.SF54 = SF54: 공기 압축기 공기 건조기 +Common.722.SF55 = SF55: BUFT (마찰 ì œë™ ì œì–´ 유닛) +Common.722.SF56 = SF56: ì¸ë²„í„° +Common.722.SF57 = SF57: ì¸ë²„í„° 히터 +Common.722.SF58 = SF58: ê°ì°¨ 제어 회로 주 ì „ì› +Common.722.SF59 = SF59: ê°ì°¨ 제어 회로 ë¹„ìƒ ì „ì› + +#gmod_subway_81-722 +#Buttons: +Entities.gmod_subway_81-722.Buttons.PU1.MirrorHeatingSet = @[Common.722.MirrorHeating] +Entities.gmod_subway_81-722.Buttons.PU1.DoorLeft2Set = @[Common.720.KDL] +Entities.gmod_subway_81-722.Buttons.PU1.DoorBackSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-722.Buttons.PU1.EmergencyDriveSet = @[Common.722.EmergencyDrive] +Entities.gmod_subway_81-722.Buttons.PU1.MicrophoneSet = @[Common.722.Microphone] +Entities.gmod_subway_81-722.Buttons.PU1.DoorLeft1Set = @[Common.720.KDL] + +Entities.gmod_subway_81-722.Buttons.PU2.ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-722.Buttons.PU2.ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-722.Buttons.PU2.GlassWasherSet = @[Common.722.GlassWasher] +Entities.gmod_subway_81-722.Buttons.PU2.GlassCleaner+ = @[Common.722.GlassCleaner] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.PU2.GlassCleaner- = @[Common.722.GlassCleaner] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeTPlusKToggle = @[Common.722.EmergencyBrakeTPlusK] +Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeTPlusSet = @[Common.722.EmergencyBrakeTPlus] +Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeToggle = @[Common.720.EmergencyBrake] +Entities.gmod_subway_81-722.Buttons.PU2.VigilanceSet = @[Common.ARS.KB] +Entities.gmod_subway_81-722.Buttons.PU2.Headlights+ = @[Common.ALL.VF] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.PU2.Headlights- = @[Common.ALL.VF] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.PU2.DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-722.Buttons.PU2.DoorClose+ = @[Common.720.DoorClose] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.PU2.DoorClose- = @[Common.720.DoorClose] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.PU2.DoorRightSet = @[Common.720.KDP] + +Entities.gmod_subway_81-722.Buttons.BI3.KRO+ = @[Common.722.KRO] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.BI3.KRO- = @[Common.722.KRO] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.BI3.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-722.Buttons.BI3.Compressor- = @[Common.ALL.MK] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.BI3.Compressor+ = @[Common.ALL.MK] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.BI3.!BrakeTrainLine = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-722.Buttons.BI3.!BrakeCylinder = @[Common.ALL.BCPressure] + +Entities.gmod_subway_81-722.Buttons.PPZB.PSNToggleSet = @[Common.722.PSNToggle] +Entities.gmod_subway_81-722.Buttons.PPZB.BattOnSet = @[Common.722.BattOn] +Entities.gmod_subway_81-722.Buttons.PPZB.BattOffSet = @[Common.722.BattOff] +Entities.gmod_subway_81-722.Buttons.PPZB.TorecDoorUnlockSet = @[Common.722.TorecDoorUnlock] +Entities.gmod_subway_81-722.Buttons.PPZB.SCEnable = @[Common.722.SCEnabled] +Entities.gmod_subway_81-722.Buttons.PPZB.SOSD = @[Common.722.LSOSD] + +Entities.gmod_subway_81-722.Buttons.PVM.PassLightToggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-722.Buttons.PVM.PassVent- = @[Common.722.PassVent] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.PassVent+ = @[Common.722.PassVent] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.VKFToggle = @[Common.ALL.VKF] +Entities.gmod_subway_81-722.Buttons.PVM.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-722.Buttons.PVM.VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-722.Buttons.PVM.SOSDEnableToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-722.Buttons.PVM.VRU- = @[Common.722.VRU] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.VRU+ = @[Common.722.VRU] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.VADToggle = @[Common.722.VADToggle] +Entities.gmod_subway_81-722.Buttons.PVM.VAHToggle = @[Common.722.VAHToggle] +Entities.gmod_subway_81-722.Buttons.PVM.EmergencyRadioPowerToggle = @[Common.722.EmergencyRadioPowerToggle] +Entities.gmod_subway_81-722.Buttons.PVM.BARSMode- = @[Common.722.BARSMode] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.BARSMode+ = @[Common.722.BARSMode] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.PantSC- = @[Common.722.PantSC] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.PantSC+ = @[Common.722.PantSC] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.RCARSToggle = @[Common.ALL.RCARS] + +Entities.gmod_subway_81-722.Buttons.HelperLamps.!LRD = @[Common.ARS.LRD] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!LPT = @[Common.ALL.BrT] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!RS = @[Common.722.LRS] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!AVS = @[Common.722.LAVS] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!LSD = @[Common.ALL.LSD] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!RU = @[Common.722.LRU] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!04 = @[Common.ARS.N4] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!00 = @[Common.ARS.0] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!40 = @[Common.ARS.40] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!60 = @[Common.ARS.60] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!70 = @[Common.ARS.70] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!80 = @[Common.ARS.80] + +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatUpSet = @[Common.SARMAT.Up] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatDownSet = @[Common.SARMAT.Down] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatEnterSet = @[Common.SARMAT.Enter] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatEscSet = @[Common.SARMAT.Esc] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF1Set = @[Common.SARMAT.F1] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF2Set = @[Common.SARMAT.F2] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF3Set = @[Common.SARMAT.F3] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF4Set = @[Common.SARMAT.F4] + +Entities.gmod_subway_81-722.Buttons.BMP.SarmatPathSet = @[Common.SARMAT.Path] +Entities.gmod_subway_81-722.Buttons.BMP.SarmatLineSet = @[Common.SARMAT.Line] +Entities.gmod_subway_81-722.Buttons.BMP.SarmatZeroSet = @[Common.SARMAT.Zero] +Entities.gmod_subway_81-722.Buttons.BMP.SarmatStartSet = @[Common.SARMAT.Start] + +Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber1Set = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber2Set = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber3Set = @[Common.ALL.RouteNumber3+] + +Entities.gmod_subway_81-722.Buttons.Lighting.CabinLight- = @[Common.ALL.CabLights] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.Lighting.CabinLight+ = @[Common.ALL.CabLights] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.Lighting.PanelLightToggle = @[Common.ALL.PanelLights] + +Entities.gmod_subway_81-722.Buttons.PPZ.SF1Toggle = @[Common.722.SF1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF2Toggle = @[Common.722.SF2] +Entities.gmod_subway_81-722.Buttons.PPZ.SF3Toggle = @[Common.722.SF3] +Entities.gmod_subway_81-722.Buttons.PPZ.SF4Toggle = @[Common.722.SF4] +Entities.gmod_subway_81-722.Buttons.PPZ.SF5Toggle = @[Common.722.SF5] +Entities.gmod_subway_81-722.Buttons.PPZ.SF6Toggle = @[Common.722.SF6] +Entities.gmod_subway_81-722.Buttons.PPZ.SF7Toggle = @[Common.722.SF7] +Entities.gmod_subway_81-722.Buttons.PPZ.SF8Toggle = @[Common.722.SF8] +Entities.gmod_subway_81-722.Buttons.PPZ.SF9Toggle = @[Common.722.SF9] +Entities.gmod_subway_81-722.Buttons.PPZ.R_UPOToggle = @[Common.722.UPO] +Entities.gmod_subway_81-722.Buttons.PPZ.SF01Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF10Toggle = @[Common.722.SF10] +Entities.gmod_subway_81-722.Buttons.PPZ.SF11Toggle = @[Common.722.SF11] +Entities.gmod_subway_81-722.Buttons.PPZ.SF12Toggle = @[Common.722.SF12] +Entities.gmod_subway_81-722.Buttons.PPZ.SF13Toggle = @[Common.722.SF13] +Entities.gmod_subway_81-722.Buttons.PPZ.SF02Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF14Toggle = @[Common.722.SF14] +Entities.gmod_subway_81-722.Buttons.PPZ.SF15Toggle = @[Common.722.SF15] +Entities.gmod_subway_81-722.Buttons.PPZ.SF16Toggle = @[Common.722.SF16] +Entities.gmod_subway_81-722.Buttons.PPZ.SF17Toggle = @[Common.722.SF17] +Entities.gmod_subway_81-722.Buttons.PPZ.SF18Toggle = @[Common.722.SF18] +Entities.gmod_subway_81-722.Buttons.PPZ.SF19Toggle = @[Common.722.SF19] +Entities.gmod_subway_81-722.Buttons.PPZ.SF20Toggle = @[Common.722.SF20] +Entities.gmod_subway_81-722.Buttons.PPZ.SF21Toggle = @[Common.722.SF21] +Entities.gmod_subway_81-722.Buttons.PPZ.SF22Toggle = @[Common.722.SF22] +Entities.gmod_subway_81-722.Buttons.PPZ.SF23Toggle = @[Common.722.SF23] +Entities.gmod_subway_81-722.Buttons.PPZ.SF24Toggle = @[Common.722.SF24] +Entities.gmod_subway_81-722.Buttons.PPZ.SF25Toggle = @[Common.722.SF25] +Entities.gmod_subway_81-722.Buttons.PPZ.SF26Toggle = @[Common.722.SF26] +Entities.gmod_subway_81-722.Buttons.PPZ.SF27Toggle = @[Common.722.SF27] +Entities.gmod_subway_81-722.Buttons.PPZ.SF03Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF04Toggle = @[Common.ALL.Unsused1] + +Entities.gmod_subway_81-722.Buttons.PVZ.SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-722.Buttons.PVZ.1:SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-722.Buttons.PVZ.SF32Toggle = @[Common.722.SF32] +Entities.gmod_subway_81-722.Buttons.PVZ.SF33Toggle = @[Common.722.SF33] +Entities.gmod_subway_81-722.Buttons.PVZ.SF34Toggle = @[Common.722.SF34] +Entities.gmod_subway_81-722.Buttons.PVZ.SF35Toggle = @[Common.722.SF35] +Entities.gmod_subway_81-722.Buttons.PVZ.SF36Toggle = @[Common.722.SF36] +Entities.gmod_subway_81-722.Buttons.PVZ.SF37Toggle = @[Common.722.SF37] +Entities.gmod_subway_81-722.Buttons.PVZ.SF38Toggle = @[Common.722.SF38] +Entities.gmod_subway_81-722.Buttons.PVZ.SF41Toggle = @[Common.722.SF41] +Entities.gmod_subway_81-722.Buttons.PVZ.SF42Toggle = @[Common.722.SF42] +Entities.gmod_subway_81-722.Buttons.PVZ.SF43Toggle = @[Common.722.SF43] +Entities.gmod_subway_81-722.Buttons.PVZ.SF44Toggle = @[Common.722.SF44] +Entities.gmod_subway_81-722.Buttons.PVZ.SF45Toggle = @[Common.722.SF45] +Entities.gmod_subway_81-722.Buttons.PVZ.SF46Toggle = @[Common.722.SF46] +Entities.gmod_subway_81-722.Buttons.PVZ.SF47Toggle = @[Common.722.SF47] +Entities.gmod_subway_81-722.Buttons.PVZ.SF48Toggle = @[Common.722.SF48] +Entities.gmod_subway_81-722.Buttons.PVZ.SF49Toggle = @[Common.722.SF49] +Entities.gmod_subway_81-722.Buttons.PVZ.SF51Toggle = @[Common.722.SF51] +Entities.gmod_subway_81-722.Buttons.PVZ.SF52Toggle = @[Common.722.SF52] +Entities.gmod_subway_81-722.Buttons.PVZ.SF53Toggle = @[Common.722.SF53] +Entities.gmod_subway_81-722.Buttons.PVZ.SF54Toggle = @[Common.722.SF54] +Entities.gmod_subway_81-722.Buttons.PVZ.SF55Toggle = @[Common.722.SF55] +Entities.gmod_subway_81-722.Buttons.PVZ.SF56Toggle = @[Common.722.SF56] +Entities.gmod_subway_81-722.Buttons.PVZ.SF57Toggle = @[Common.722.SF57] +Entities.gmod_subway_81-722.Buttons.PVZ.SF58Toggle = @[Common.722.SF58] +Entities.gmod_subway_81-722.Buttons.PVZ.SF59Toggle = @[Common.722.SF59] + +Entities.gmod_subway_81-722.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-722.Buttons.CabinDoorL.CabinDoorLeft = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-722.Buttons.CabinDoorR.CabinDoorRight = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-722.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-722.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-722.Buttons.Isolations.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.Isolations.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.StopKran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-722.Buttons.StopKran.UAVAToggle = @[Common.ALL.UAVA2] +Entities.gmod_subway_81-722.Buttons.BTO.K29Toggle = @[Common.ALL.KRMH] +Entities.gmod_subway_81-722.Buttons.BTO.K9Toggle = @[Common.ALL.RVTB] + +#gmod_subway_81-723 +Entities.gmod_subway_81-723.Buttons.PVZ.SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-723.Buttons.PVZ.1:SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-723.Buttons.PVZ.SF32Toggle = @[Common.722.SF32] +Entities.gmod_subway_81-723.Buttons.PVZ.SF33Toggle = @[Common.722.SF33] +Entities.gmod_subway_81-723.Buttons.PVZ.SF34Toggle = @[Common.722.SF34] +Entities.gmod_subway_81-723.Buttons.PVZ.SF35Toggle = @[Common.722.SF35] +Entities.gmod_subway_81-723.Buttons.PVZ.SF36Toggle = @[Common.722.SF36] +Entities.gmod_subway_81-723.Buttons.PVZ.SF37Toggle = @[Common.722.SF37] +Entities.gmod_subway_81-723.Buttons.PVZ.SF38Toggle = @[Common.722.SF38] +Entities.gmod_subway_81-723.Buttons.PVZ.SF41Toggle = @[Common.722.SF41] +Entities.gmod_subway_81-723.Buttons.PVZ.SF42Toggle = @[Common.722.SF42] +Entities.gmod_subway_81-723.Buttons.PVZ.SF43Toggle = @[Common.722.SF43] +Entities.gmod_subway_81-723.Buttons.PVZ.SF44Toggle = @[Common.722.SF44] +Entities.gmod_subway_81-723.Buttons.PVZ.SF45Toggle = @[Common.722.SF45] +Entities.gmod_subway_81-723.Buttons.PVZ.SF46Toggle = @[Common.722.SF46] +Entities.gmod_subway_81-723.Buttons.PVZ.SF47Toggle = @[Common.722.SF47] +Entities.gmod_subway_81-723.Buttons.PVZ.SF48Toggle = @[Common.722.SF48] +Entities.gmod_subway_81-723.Buttons.PVZ.SF49Toggle = @[Common.722.SF49] +Entities.gmod_subway_81-723.Buttons.PVZ.SF51Toggle = @[Common.722.SF51] +Entities.gmod_subway_81-723.Buttons.PVZ.SF52Toggle = @[Common.722.SF52] +Entities.gmod_subway_81-723.Buttons.PVZ.SF53Toggle = @[Common.722.SF53] +Entities.gmod_subway_81-723.Buttons.PVZ.SF54Toggle = @[Common.722.SF54] +Entities.gmod_subway_81-723.Buttons.PVZ.SF55Toggle = @[Common.722.SF55] +Entities.gmod_subway_81-723.Buttons.PVZ.SF56Toggle = @[Common.722.SF56] +Entities.gmod_subway_81-723.Buttons.PVZ.SF57Toggle = @[Common.722.SF57] +Entities.gmod_subway_81-723.Buttons.PVZ.SF58Toggle = @[Common.722.SF58] +Entities.gmod_subway_81-723.Buttons.PVZ.SF59Toggle = @[Common.722.SF59] + +Entities.gmod_subway_81-723.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-723.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-723.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-723.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +Entities.gmod_subway_81-723.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-723.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] + + +#gmod_subway_81-724 +#Buttons: +Entities.gmod_subway_81-724.Buttons.PVZ.SF34Toggle = @[Common.722.SF34] +Entities.gmod_subway_81-724.Buttons.PVZ.SF35Toggle = @[Common.722.SF35] +Entities.gmod_subway_81-724.Buttons.PVZ.SF36Toggle = @[Common.722.SF36] +Entities.gmod_subway_81-724.Buttons.PVZ.SF41Toggle = @[Common.722.SF41] +Entities.gmod_subway_81-724.Buttons.PVZ.SF42Toggle = @[Common.722.SF42] +Entities.gmod_subway_81-724.Buttons.PVZ.SF43Toggle = @[Common.722.SF43] +Entities.gmod_subway_81-724.Buttons.PVZ.SF44Toggle = @[Common.722.SF44] +Entities.gmod_subway_81-724.Buttons.PVZ.SF45Toggle = @[Common.722.SF45] +Entities.gmod_subway_81-724.Buttons.PVZ.SF46Toggle = @[Common.722.SF46] +Entities.gmod_subway_81-724.Buttons.PVZ.SF47Toggle = @[Common.722.SF47] +Entities.gmod_subway_81-724.Buttons.PVZ.SF48Toggle = @[Common.722.SF48] +Entities.gmod_subway_81-724.Buttons.PVZ.SF51Toggle = @[Common.722.SF51] +Entities.gmod_subway_81-724.Buttons.PVZ.SF52Toggle = @[Common.722.SF52] +Entities.gmod_subway_81-724.Buttons.PVZ.SF53Toggle = @[Common.722.SF53] +Entities.gmod_subway_81-724.Buttons.PVZ.SF54Toggle = @[Common.722.SF54] +Entities.gmod_subway_81-724.Buttons.PVZ.SF55Toggle = @[Common.722.SF55] + +Entities.gmod_subway_81-724.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-724.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-724.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-724.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +Entities.gmod_subway_81-724.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-724.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] + +#Spawner: +Entities.gmod_subway_81-722.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-722.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-722.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-722.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-722.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-722.Spawner.SarmatInvert.Name = @[Common.Spawner.SchemeInvert] +Entities.gmod_subway_81-722.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-722.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-722.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-722.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-722.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] + +]] diff --git a/lua/metrostroi_data/languages/kr_base.lua b/lua/metrostroi_data/languages/kr_base.lua new file mode 100644 index 0000000..3e99ae4 --- /dev/null +++ b/lua/metrostroi_data/languages/kr_base.lua @@ -0,0 +1,396 @@ +return [[ +#Base text for English language + +[kr] +lang = 한국어 #Full language name +AuthorText = Translation Author: Archerity #Author text + +#Workshop errors +Workshop.Title = 컨í…츠 매니저 +Workshop.FilesMissing = 애드온 파ì¼ì˜ ì¼ë¶€ê°€ 누ë½ë˜ê±°ë‚˜ ì†ìƒë˜ì—ˆìŠµë‹ˆë‹¤.\n만약 ì°½ìž‘ë§ˆë‹¹ì„ í†µí•´ ì• ë“œì˜¨ì„ ë‚´ë ¤ 받았다면 ë‹¤ìŒ ê²½ë¡œì—서 파ì¼ì„ 지우세요.\nGarrysMod/garrysmod/%s. +Workshop.FilesMissingLocaly = 애드온 파ì¼ì˜ ì¼ë¶€ê°€ 누ë½ë˜ê±°ë‚˜ ì†ìƒë˜ì—ˆìŠµë‹ˆë‹¤. +Workshop.InstalledLocaly = 설치 완료 (local) +Workshop.NotInstalledE = 미설치 ìƒíƒœ.\nì• ë“œì˜¨ì„ êµ¬ë…하고 "애드온" 메뉴를 확ì¸í•˜ì„¸ìš”. +Workshop.NotInstalled = 미설치 ìƒíƒœ. +Workshop.Disabled = 애드온 비활성중.\n"애드온" 메뉴ì—서 활성화 시키세요. +Workshop.Installed = 설치 완료 +Workshop.Open = 창작마당 +Workshop.ErrorGithub = GitHub ë²„ì „ì˜ Metrostroiê°€ ê°ì§€ë˜ì—ˆìŠµë‹ˆë‹¤. 최신 ë²„ì „ì˜ Metrostroi는 GitHub ë²„ì „ì˜ Metrostroi와 호환ë˜ê±°ë‚˜ ìž‘ë™í•˜ì§€ 않습니다. +Workshop.ErrorLegacy = 기존 ë²„ì „ì˜ Metrostroiê°€ ê°ì§€ë˜ì—ˆìŠµë‹ˆë‹¤. 최신 ë²„ì „ì˜ Metrostroi는 기존 ë²„ì „ì˜ Metrostroi와 호환ë˜ê±°ë‚˜ ìž‘ë™í•˜ì§€ 않습니다. +Workshop.ErrorEnhancers = ì´ ì• ë“œì˜¨ì—는 ì›í™œí•œ 게임 플레ì´ë¥¼ ë°©í•´í•  수 있는 그래픽 í–¥ìƒ ìš”ì†Œê°€ í¬í•¨ë˜ì–´ 있습니다. +Workshop.Error1 = ì´ ì• ë“œì˜¨ì€ í˜„ìž¬ 버전과 ì¶©ëŒì„ ì¼ìœ¼í‚¬ 수 있는 Metrostroiì˜ êµ¬ì‹ ìŠ¤í¬ë¦½íŠ¸ë¥¼ í¬í•¨í•˜ê³  있습니다. 스í¬ë¦½íЏ ì—러나 ìž‘ë™ì´ 불안정할 ê°€ëŠ¥ì„±ì´ ìžˆìŠµë‹ˆë‹¤. +Workshop.ErrorOld = ì´ì „ ë²„ì „ì˜ ëª¨ë¸ì´ ê°ì§€ë˜ì—ˆìŠµë‹ˆë‹¤ (81-702, 81-717 ì˜ ì˜›ë‚  모ë¸). ì´ì „ ë²„ì „ì˜ Metrostroi 컨í…츠가 남아 있는지 í™•ì¸ í›„ 삭제하고, 게리모드 í´ë”ì— ìžˆëŠ” "cache","download","downloads" í´ë”를 삭제해주세요. + +#Client settings +Panel.Admin = ê´€ë¦¬ìž +Panel.RequireThirdRail = 3궤조 í•„ìš” 여부 + +Panel.Client = ì‚¬ìš©ìž +Panel.Language = 언어 ì„ íƒ +Panel.DrawCams = ì¹´ë©”ë¼ ë Œë”ë§ +Panel.DisableHUD = ìš´ì „ì„ ì°©ì„시 HUD 비활성 +Panel.DisableCamAccel = ì‹œì  í”들림 사용 안함 +Panel.DisableHoverText = ì£¼ì„ í…스트 표시 안함 +Panel.ScreenshotMode = 스í¬ë¦°ìƒ· 모드 (ë‚®ì€ FPS) +Panel.ShadowsHeadlight = 전조등 ê·¸ë¦¼ìž í™œì„± +Panel.RedLights = ì ìƒ‰ë“±ì˜ 다ì´ë‚˜ë¯¹ ë¼ì´íЏ 사용 +Panel.ShadowsOther = 기타 ê´‘ì› ê·¸ë¦¼ìž í™œì„± +Panel.MinimizedShow = ì°½ 최소화시 구성요소 언로드 하지 않기 +Panel.FOV = 시야ê°(FOV) +Panel.Z = ì‹œì  ë†’ì´ +Panel.RenderDistance = ë Œë”ë§ ê±°ë¦¬ +Panel.ReloadClient = ì‚¬ìš©ìž ì‹œìŠ¤í…œ 다시 불러오기 + +Panel.ClientAdvanced = ì‚¬ìš©ìž (고급설정) +Panel.DrawDebugInfo = 디버깅 ì •ë³´ 표시 +Panel.DrawSignalDebugInfo = 신호 디버그 ì •ë³´ +Panel.CheckAddons = 애드온 스캔 +Panel.ReloadLang = 언어 다시 불러오기 +Panel.SoftDraw = 차량 구성요소 로딩 시간 +Panel.SoftReloadLang = ìŠ¤í° ë©”ë‰´ 다시 불러오지 않기 + + + +#Common train +Train.Common.Camera0 = ìš´ì „ì„ +Train.Common.RouteNumber = 경로 번호 +Train.Common.LastStation = 종착역 +Train.Common.HelpersPanel = ë³´ì¡°ì„ íŒ¨ë„ +Train.Common.UAVA = UAVA +Train.Common.PneumoPanels = 공압 밸브 +Train.Common.Voltmeters = 전압계, 전류계 +Train.Common.CouplerCamera = 연결기 +Common.ARM.Monitor1 = ARM 모니터 1 +Train.Buttons.Sealed = ë´‰ì¸ ë¨ + +#Train entities +Entities.gmod_subway_base.Name = Subway base +Entities.gmod_subway_81-502.Name = 81-502 (Ema-502 ì„ ë‘차량) +Entities.gmod_subway_81-501.Name = 81-501 (Em-501 중간차량) +Entities.gmod_subway_81-702.Name = 81-702 (D ì„ ë‘차량) +Entities.gmod_subway_81-702_int.Name = 81-702 (D 중간차량) +Entities.gmod_subway_81-703.Name = 81-703 (E ì„ ë‘차량) +Entities.gmod_subway_81-703_int.Name = 81-703 (E 중간차량) +Entities.gmod_subway_ezh.Name = 81-707 (Ezh ì„ ë‘차량) +Entities.gmod_subway_ezh1.Name = 81-708 (Ezh1 중간차량) +Entities.gmod_subway_ezh3.Name = 81-710 (Ezh3 ì„ ë‘차량) +Entities.gmod_subway_em508t.Name = 81-508T (Em-508T 중간차량) +Entities.gmod_subway_81-717_mvm.Name = 81-717 (Moscow ì„ ë‘차량) +Entities.gmod_subway_81-717_mvm_custom.Name = 81-717 (Moscow custom) +Entities.gmod_subway_81-714_mvm.Name = 81-714 (Moscow 중간차량) +Entities.gmod_subway_81-717_lvz.Name = 81-717 (St. Petersburg ì„ ë‘차량) +Entities.gmod_subway_81-714_lvz.Name = 81-714 (St. Petersburg 중간차량) +Entities.gmod_subway_81-718.Name = 81-718 (TISU ì„ ë‘차량) +Entities.gmod_subway_81-719.Name = 81-719 (TISU 중간차량) +Entities.gmod_subway_81-720.Name = 81-720 (Yauza ì„ ë‘차량) +Entities.gmod_subway_81-721.Name = 81-721 (Yauza 중간차량) +Entities.gmod_subway_81-722.Name = 81-722 (Yubileyniy ì„ ë‘차량) +Entities.gmod_subway_81-723.Name = 81-723 (Yubileyniy 중간차량[M]) +Entities.gmod_subway_81-724.Name = 81-724 (Yubileyniy 중간차량[T]) +Entities.gmod_subway_81-7036.Name = 81-7036 (사용 불가) +Entities.gmod_subway_81-7037.Name = 81-7037 (사용 불가) +Entities.gmod_subway_tatra_t3.Name = Tatra T3 + +#Train util entities +Entities.gmod_train_bogey.Name = 대차 +Entities.gmod_train_couple.Name = 연결기 + +#Other entities +Entities.gmod_track_pui.Name = PUI +Entities.gmod_track_mus_elektronika7.Name = "Electronika" 시계 +Entities.gmod_mus_clock_analog.Name = 아날로그 시계 +Entities.gmod_track_clock_time.Name = 대형 배차간격 시계 (시간) +Entities.gmod_track_clock_small.Name = 소형 배차간격 시계 +Entities.gmod_track_clock_interval.Name = 대형 배차간격 시계 (배차간격) +Entities.gmod_track_switch.Name = 선로 분기기 +Entities.gmod_track_powermeter.Name = 전력계 +Entities.gmod_track_arm.Name = ARM DSCP +Entities.gmod_track_udochka.Name = 급전 커넥터 +Entities.gmod_train_spawner.Name = ì—´ì°¨ 스í¬ë„ˆ +Entities.gmod_train_special_box.Name = 특별 배달 + +#Weapons +Weapons.button_presser.Name = 버튼 조작기 +Weapons.button_presser.Purpose = ë§µì— ìžˆëŠ” ë²„íŠ¼ì„ ëˆ„ë¥´ê¸° 위해 사용ë©ë‹ˆë‹¤. +Weapons.button_presser.Instructions = ë²„íŠ¼ì„ ë°”ë¼ë³´ê³  "공격" 키를 누르세요. +Weapons.train_key.Name = 관리ìžìš© 키 +Weapons.train_key.Purpose = 관리ìžìš© ë²„íŠ¼ì„ í™œì„±í™”í•˜ê¸° 위해 사용ë©ë‹ˆë‹¤. +Weapons.train_key.Instructions = 관리ìžìš© ë²„íŠ¼ì„ ë°”ë¼ë³´ê³  "공격" 키를 누르세요. +Weapons.train_kv_wrench.Name = ì—­ì „ê°„ 핸들 +Weapons.train_kv_wrench.Purpose = ì—´ì°¨ì— ìžˆëŠ” 버튼/스위치를 조작하기 위해 사용ë©ë‹ˆë‹¤. +Weapons.train_kv_wrench.Instructions = ì—´ì°¨ì— ìžˆëŠ” 버튼/스위치를 ë°”ë¼ë³´ê³  "공격" 키를 누르세요. +Weapons.train_kv_wrench_gold.Name = 황금 ì—­ì „ê°„ 핸들 + +Weapons.train_kv_wrench_gold.Purpose = @[Weapons.train_kv_wrench.Purpose] +Weapons.train_kv_wrench_gold.Instructions = @[Weapons.train_kv_wrench.Instructions] + +#Spawner common +Spawner.Title = ì—´ì°¨ 소환기 +Spawner.Spawn = 소환 +Spawner.Close = 닫기 +Spawner.Trains1 = 현재 ì—´ì°¨ 수 +Spawner.Trains2 = 최대 량수 (길ì´) +Spawner.WagNum = ì—´ì°¨ 량수 (길ì´) +Common.Spawner.Texture = 차량 외부 ë„색 +Common.Spawner.PassTexture = 차량 ë‚´ë¶€ ì¸í…Œë¦¬ì–´ +Common.Spawner.CabTexture = 운전대 í…ìŠ¤ì³ +Common.Spawner.Announcer = 안내방송 유형 +Common.Spawner.Type1 = 유형 1 +Common.Spawner.Type2 = 유형 2 +Common.Spawner.Type3 = 유형 3 +Common.Spawner.Type4 = 유형 4 +Common.Spawner.SpawnMode = 차량 ìƒíƒœ +Common.Spawner.SpawnMode.Deadlock = 회차 +Common.Spawner.SpawnMode.Full = 완전 ê¸°ë™ +Common.Spawner.SpawnMode.NightDeadlock = 주박 +Common.Spawner.SpawnMode.Depot = 기지 +Spawner.Common.EType = 전기 회로 종류 +Common.Spawner.Scheme = ë…¸ì„ ë„ +Common.Spawner.Random = 무작위 +Common.Spawner.Old = 구형 +Common.Spawner.New = 신형 +Common.Spawner.Type = 종류 +Common.Spawner.SchemeInvert = ë…¸ì„ ë„ ë°˜ì „ + +#Coupler common +Common.Couple.Title = 연결기 메뉴 +Common.Couple.CoupleState = 연결기 ìƒíƒœ +Common.Couple.Coupled = ì—°ê²° ë¨ +Common.Couple.Uncoupled = ì—°ê²° ì•ˆë¨ +Common.Couple.Uncouple = 분리 +Common.Couple.IsolState = 차단 밸브 ìƒíƒœ +Common.Couple.Isolated = 닫힘 +Common.Couple.Opened = 열림 +Common.Couple.Open = 열기 +Common.Couple.Isolate = 닫기 +Common.Couple.EKKState = EKK ìƒíƒœ (전기 연결기) +Common.Couple.Disconnected = ì—°ê²° ëŠê¹€ +Common.Couple.Connected = ì—°ê²° ë¨ +Common.Couple.Connect = ì—°ê²° +Common.Couple.Disconnect = ì—°ê²° ëŠê¸° + +#Bogey common +Common.Bogey.Title = 대차 메뉴 +Common.Bogey.ContactState = ì§‘ì „ 장치 ìƒíƒœ +Common.Bogey.CReleased = 사용 중지 ë¨ +Common.Bogey.CPressed = 사용 중 +Common.Bogey.CPress = 사용 하기 +Common.Bogey.CRelease = 사용 중지 +Common.Bogey.ParkingBrakeState = 주차 ì œë™ ìƒíƒœ +Common.Bogey.PBDisabled = ìˆ˜ë™ í•´ì œ ë¨ +Common.Bogey.PBEnabled = ì²´ê²° ë¨ +Common.Bogey.PBEnable = ì²´ê²° +Common.Bogey.PBDisable = ìˆ˜ë™ í•´ì œ + +#Trains common +Common.ALL.Unsused1 = 미사용 +Common.ALL.Unsused2 = (미사용) +Common.ALL.Up = (ìƒ) +Common.ALL.Down = (하) +Common.ALL.Left = (좌) +Common.ALL.Right = (ìš°) +Common.ALL.CW = (시계 ë°©í–¥) +Common.ALL.CCW = (반시계 ë°©í–¥) +Common.ALL.VB = VB: 배터리 투입/차단 +Common.ALL.VSOSD = SOSD: 승강장 안전문 열림 확ì¸ë“± +Common.ALL.VKF = VKF: ì ìƒ‰ë“±ìš© 배터리 ì „ì› +Common.ALL.VB2 = (저전압 회로) +Common.ALL.VPR = VPR: ì—´ì°¨ 무선국 +Common.ALL.VASNP = ASNP ì „ì› +Common.ALL.UOS = RC-UOS: ì†ë„ 제한 장치 (EPV/EPK 미사용 주행) +Common.ALL.VAH = VAH: ë¹„ìƒ ìš´ì „ 모드 (RPB 계전기 고장) +Common.ALL.KAH = KAH: ë¹„ìƒ ìš´ì „ 버튼 (ARS 미사용 주행) +Common.ALL.KAHK = KAX 버튼 커버 +Common.ALL.VAD = VAD: 출입문 ê°•ì œ 닫힘 무시 (KD 계전기 고장) +Common.ALL.OVT = OVT: 공압 밸브 ì œë™ ë¹„í™œì„± +Common.ALL.VOVT = VOVT: 공압 밸브 ì œë™ ë¹„í™œì„±ê¸° 사용 중지 +Common.ALL.EmergencyBrakeValve = ë¹„ìƒ ì œë™ +Common.ALL.ParkingBrake = 주차 ì œë™ +Common.ALL.VU = VU: 차량 제어 +Common.ALL.KDP = KDP: 우측 출입문 열림 +Common.ALL.KDPL = 우측 출입문 ì„ íƒ ë¨ +Common.ALL.KDPK = 우측 출입문 열림 버튼 커버 +Common.ALL.KDL = KDL: 좌측 출입문 열림 +Common.ALL.KDLL = 좌측 출입문 ì„ íƒ ë¨ +Common.ALL.KDLK = 좌측 출입문 열림 버튼 커버 +Common.ALL.KDLPK = 출입문 버튼 커버 +Common.ALL.KRZD = KRZD: 출입문 ê°•ì œ 닫힘 +Common.ALL.VSD = 출입문 열림 ë°©í–¥ ì„ íƒ +Common.ALL.Ring = ì—°ë½ ë¶€ì € +Common.ALL.VUD = VUD: 출입문 제어 스위치 (출입문 닫힘) +Common.ALL.KDPH = 마지막 ê°ì°¨ 우측 출입문 열림 +Common.ALL.VUD2 = VUD2: 출입문 제어 스위치 (ë³´ì¡°ì„) +Common.ALL.Program1 = 안내방송 I +Common.ALL.Program2 = 안내방송 II +Common.ALL.VRP = VRP: 과전류 계전기 리셋 +Common.ALL.VRPBV = VRP: 과전류 계전기 리셋, BV 사용 +Common.ALL.KSN = KSN: ì˜¤ìž‘ë™ ì‹ í˜¸ 전달 +Common.ALL.VMK = VMK: 공기 압축기 +Common.ALL.MK = 공기 압축기 +Common.ALL.VF1 = 전조등 1번 그룹 +Common.ALL.VF2 = 전조등 2번 그룹 +Common.ALL.VF = 전조등 스위치 +Common.ALL.VUS = VUS: 전조등 ìƒí–¥ +Common.ALL.GaugeLights = 계기류 조명 +Common.ALL.CabLights = 운전실 조명 +Common.ALL.PassLights = ê°ì‹¤ ë‚´ë¶€ 조명 +Common.ALL.PanelLights = 운전대 조명 +Common.ALL.RMK = RMK: 공기 압축기 ê°•ì œ ê¸°ë™ +Common.ALL.KRP = KRP: ë¹„ìƒ ê¸°ë™ ë²„íŠ¼ +Common.ALL.VZP = VZP: 출발 스위치 +Common.ALL.VZD = VZD: 출입문 스위치 +Common.ALL.VAV = VAV: ìžë™ ìš´ì „ 버튼 +Common.ALL.RouteNumber1+ = 경로 번호: 첫째 ìžë¦¬ ì¦ê°€ +Common.ALL.RouteNumber1- = 경로 번호: 첫째 ìžë¦¬ ê°ì†Œ +Common.ALL.RouteNumber2+ = 경로 번호: 둘째 ìžë¦¬ ì¦ê°€ +Common.ALL.RouteNumber2- = 경로 번호: 둘째 ìžë¦¬ ê°ì†Œ +Common.ALL.RouteNumber3+ = 경로 번호: 셋째 ìžë¦¬ ì¦ê°€ +Common.ALL.RouteNumber3- = 경로 번호: 셋째 ìžë¦¬ ê°ì†Œ +Common.ALL.LastStation+ = ë‹¤ìŒ ì¢…ì°©ì—­ +Common.ALL.LastStation- = ì´ì „ 종착역 +Common.ALL.RRP = RP: 과전류 계전기 확ì¸ë“± (ì ìƒ‰) (ì „ì› íšŒë¡œ ì—°ê²° 실패) +Common.ALL.GRP = RP: 과전류 계전기 확ì¸ë“±(녹색) (추진 장치 과전류 ë°©ì§€) +Common.ALL.RP = RP: 과전류 계전기 확ì¸ë“± (ì ìƒ‰) (ì „ì› íšŒë¡œ ì—°ê²° 실패/RP ìž‘ë™ ì¤‘) +Common.ALL.SN = LSN: 고장 표시등 (ì „ì› íšŒë¡œ ì—°ê²° 실패) +Common.ALL.PU = 공전 ë°©ì§€ 장치 ìž‘ë™ ì¤‘ +Common.ALL.BrT = 공압 ì œë™ ìž‘ë™ ì¤‘ +Common.ALL.BrW = ê°ì°¨ 공압 ì œë™ ìž‘ë™ ì¤‘ +Common.ALL.ARS = ARS: ìžë™ ì†ë„ 제한 스위치 +Common.ALL.ARSR = ARS-R: ìžë™ ì†ë„ 제한 (ARS-R 모드) 스위치 +Common.ALL.ALS = ALS: ìžë™ 차량 신호 스위치 +Common.ALL.RCARS = RC-ARS: ARS 회로 차단 +Common.ALL.RC1 = RC-1: ARS 회로 차단 +Common.ALL.EPK = ARS ì „ê³µ 밸브 (EPK) +Common.ALL.EPV = ARS ì „ê³µ 밸브 (EPV) +Common.ARS.LN = LN: ë°©í–¥ 신호 +Common.ARS.KT = KT: ì œë™ ì œì–´ 확ì¸ë“± +Common.ARS.VD = VD: ARSì— ì˜í•´ êµ¬ë™ ëª¨ë“œ ìž‘ë™ ì¤‘ì§€ +Common.ARS.Freq = ALS ë””ì½”ë” ìŠ¤ìœ„ì¹˜ +Common.ARS.FreqD = (위 1/5, 아래 2/6) +Common.ARS.FreqU = (위 2/6, 아래 1/5) +Common.ARS.VP = "ë³´ì¡° 차량" 모드 +Common.ARS.RS = RS: ì†ë„ 유지등 (ë‹¤ìŒ ì†ë„ 제한 ìƒí–¥/ì§€ì†) +Common.ARS.AB = ìžë™ í색 ARS 모드 +Common.ARS.ABButton = ìžë™ í색 ARS 모드 버튼 +Common.ARS.ABDriver = (운전사) +Common.ARS.ABHelper = (ìš´ì „ë³´ì¡°) +Common.ARS.AV = 주 ARS-MP 유닛 고장 +Common.ARS.AV1 = ë³´ì¡° ARS-MP 유닛 고장 +Common.ARS.AB2 = ìžë™ í색 ARS 모드 버튼 +Common.ARS.ARS = ARS 모드 +Common.ARS.LRD = LRD: 주행 허용 (ALS 신호 0 현시 시) +Common.ARS.VRD = VRD: 주행 허용 (ALS 신호 0 현시 시) +Common.ARS.KB = KB: í™•ì¸ ë²„íŠ¼ +Common.ARS.KVT = KVT: ì œë™ í™•ì¸ ë²„íŠ¼ +Common.ARS.KVTR = KVT: ARS-R ì œë™ í™•ì¸ ë²„íŠ¼ +Common.ARS.04 = OCh: ARS 신호 ì—†ìŒ +Common.ARS.N4 = NCh: ARS 신호 ì—†ìŒ +Common.ARS.0 = 0: ARS ì •ì§€ 신호 +Common.ARS.40 = ì†ë„ 제한 40 km/h +Common.ARS.60 = ì†ë„ 제한 60 km/h +Common.ARS.70 = ì†ë„ 제한 70 km/h +Common.ARS.80 = ì†ë„ 제한 80 km/h +Common.ALL.RCBPS = RC-BPS: 차량 구름 ë°©ì§€ 장치 스위치 +Common.BPS.On = 차량 구름 ë°©ì§€ 장치: ìž‘ë™ +Common.BPS.Err = 차량 구름 ë°©ì§€ 장치: 오류 +Common.BPS.Fail = 차량 구름 ë°©ì§€ 장치: 고장 +Commom.NMnUAVA.NMPressureLow = 주 공기관 ì••ë ¥ 부족 경고등 +Commom.NMnUAVA.UAVATriggered = UAVA ìž‘ë™ (ì ‘ì  ì—´ë¦¼) +Common.ALL.LSD = 출입문 ìƒíƒœ 표시등 (출입문 닫힘 ìƒíƒœ) +Common.ALL.L1w = 차량 회로 1 표시등 (êµ¬ë™ ëª¨ë“œ ìž‘ë™) +Common.ALL.L2w = 차량 회로 2 표시등 (가변 저항 제어기 ìž‘ë™) +Common.ALL.L6w = 차량 회로 6 표시등 (ì œë™ ëª¨ë“œ ìž‘ë™) +Common.ALL.Horn = ê²½ì  +Common.ALL.DriverValveBLDisconnect = ì œë™ê´€ 차단 밸브 +Common.ALL.DriverValveTLDisconnect = 주 공기관 차단 밸브 +Common.ALL.DriverValveDisconnect = ì œë™ë³€ 차단 밸브 +Common.ALL.KRMH = KRMSH: ì œë™ë³€ ë¹„ìƒ ì‚¬ìš© +Common.ALL.RVTB = RVTB: 안전 ì œë™ ì§€ì • 밸브 +Common.ALL.FrontBrakeLineIsolationToggle = ì œë™ê´€ í•´ë°© 밸브 +Common.ALL.FrontTrainLineIsolationToggle = 주 공기관 í•´ë°© 밸브 +Common.ALL.RearTrainLineIsolationToggle = 주 공기관 í•´ë°© 밸브 +Common.ALL.RearBrakeLineIsolationToggle = ì œë™ê´€ í•´ë°© 밸브 +Common.ALL.UAVA = UAVA: ìžë™ ì •ì§€ 장치 사용 중지\n(ì œë™ê´€ ì••ë ¥ ê°ì†Œ 후 ìž‘ë™) +Common.ALL.UAVA2 = UAVA: ìžë™ ì •ì§€ 장치 사용 중지 +Common.ALL.UAVAContact = UAVA 복귀 (ì ‘ì  ë¦¬ì…‹) +Common.ALL.OAVU = OAVU: AVU 스위치 사용 중지 +Common.ALL.LAVU = AVU ìž‘ë™ ì¤‘ +Common.ALL.GV = ê³ ì „ì•• 스위치 +Common.ALL.AirDistributor = VRN: 공압 제어기 사용 중지 +Common.ALL.CabinDoor = 운전실 문 +Common.ALL.PassDoor = ê°ì‹¤ 문 +Common.ALL.FrontDoor = 관통 문 +Common.ALL.RearDoor = 관통 문 +Common.ALL.OtsekDoor1 = 1번 장비함 ì†ìž¡ì´ +Common.ALL.OtsekDoor2 = 2번 장비함 ì†ìž¡ì´ +Common.ALL.CouchCap = ì˜ìž 당기기 + +Common.ALL.UNCh = UNCh: 저주파 ì¦í­ê¸° 스위치 +Common.ALL.ES = ES: ë¹„ìƒ êµì‹  제어 스위치 +Common.ALL.GCab = Loudspeaker: 운전실 ë‚´ë¶€ 방송 ìž¬ìƒ +Common.ALL.UPO = UPO: 안내방송기 +Common.ALL.R_Radio = 안내방송기 +Common.ALL.AnnPlay = 안내방송기 ìž¬ìƒ í‘œì‹œë“± + +#RRI +Train.Common.RRI = RRI: 무선 중계 안내방송기 +Common.RRI.RRIUp = RRI: 설정 위 +Common.RRI.RRIDown = RRI: 설정 아래 +Common.RRI.RRILeft = RRI: 설정 좌 +Common.RRI.RRIRight = RRI: 설정 ìš° +Common.RRI.RRIEnableToggle = RRI: ì „ì› +Common.RRI.RRIRewindSet2 = RRI: 빨리 ê°ê¸° +Common.RRI.RRIRewindSet0 = RRI: ë˜ê°ê¸° +Common.RRI.RRIAmplifierToggle = RRI: ì¦í­ê¸° +Common.RRI.RRIOn = RRI ìž‘ë™ í‘œì‹œë“± + +#ASNP +Train.Common.ASNP = ASNP +Common.ASNP.ASNPMenu = ASNP: 메뉴 +Common.ASNP.ASNPUp = ASNP: 위 +Common.ASNP.ASNPDown = ASNP: 아래 +Common.ASNP.ASNPOn = ASNP: ì „ì› + +#PVK +Common.CabVent.PVK- = 운전실 환í’기 세기: - +Common.CabVent.PVK+ = 운전실 환í’기 세기: + + +#IGLA +Train.Common.IGLA = IGLA +Common.IGLA.Button1Up = IGLA: [버튼 1] 위 +Common.IGLA.Button1 = IGLA: [버튼 1] +Common.IGLA.Button1Down = IGLA: [버튼 1] 아래 +Common.IGLA.Button2Up = IGLA: [버튼 2] 위 +Common.IGLA.Button2 = IGLA: [버튼 2] +Common.IGLA.Button2Down = IGLA: [버튼 3] 아래 +Common.IGLA.Button23 = IGLA: [버튼 2/3] +Common.IGLA.Button3 = IGLA: [버튼 3] +Common.IGLA.Button4 = IGLA: [버튼 4] +Common.IGLA.IGLASR = IGLA: ì „ì› +Common.IGLA.IGLARX = IGLA: ì—°ê²° ì—†ìŒ +Common.IGLA.IGLAErr = IGLA: 오류 +Common.IGLA.IGLAOSP = IGLA: 소화 장치 ìž‘ë™ +Common.IGLA.IGLAPI = IGLA: 화재 +Common.IGLA.IGLAOff = IGLA: ê³ ì „ì•• 회로 차단 + +#BZOS +Common.BZOS.On = 보안 경보 스위치 +Common.BZOS.VH1 = 보안 경보 ìž‘ë™ ì¤‘ +Common.BZOS.VH2 = 보안 경보 ê°ì§€ ë¨ +Common.BZOS.Engaged = 보안 경보 ê°ì§€ ë¨ + +#Train helpers common +Common.ALL.SpeedCurr = 실제 ì†ë„ +Common.ALL.SpeedAccept = 허용 ì†ë„ +Common.ALL.SpeedAttent = ë‹¤ìŒ êµ¬ê°„ 허용 ì†ë„ +Common.ALL.Speedometer = ì†ë„계 +Common.ALL.BLTLPressure = 공기관 압력계 (ì ìƒ‰: ì œë™ê´€, í‘색: 주 공기관) +Common.ALL.BCPressure = ì œë™í†µ 압력계 +Common.ALL.EnginesCurrent = 추진 장치 전류계 (A) +Common.ALL.EnginesCurrent1 = 1번 ê²¬ì¸ ì „ë™ê¸° 전류계 (A) +Common.ALL.EnginesCurrent2 = 2번 ê²¬ì¸ ì „ë™ê¸° 전류계 (A) +Common.ALL.EnginesVoltage = 추진 장치 전압계 (kV) +Common.ALL.BatteryVoltage = 배터리 전압계 (V) +Common.ALL.BatteryCurrent = 배터리 전류계 (A) +Common.ALL.HighVoltage = 고전압계 (kV) +]] diff --git a/lua/metrostroi_data/languages/pl_502.lua b/lua/metrostroi_data/languages/pl_502.lua new file mode 100644 index 0000000..e846291 --- /dev/null +++ b/lua/metrostroi_data/languages/pl_502.lua @@ -0,0 +1,274 @@ +return [[ +#81-502 + +[pl] + +#######Buttons########### +#Common +Common.502.KS = Kontrolka pracy KSAUP +Common.502.AV = Kontrolka jazdy samoczynnej +Common.502.SD = Kontrolka sygnalizacji drzwi skÅ‚adu (drzwi zamkniÄ™te) +Common.502.SDW = Kontrolka sygnalizacji drzwi wagonu (drzwo otwarte) +Common.502.L3w = Kontrolka przewodu 3. (tryb X3) +Common.502.L4w = Kontrolka przewodu 4. (jazda w tyÅ‚) +Common.502.L5w = Kontrolka przewodu 5. (jazda w przód) +Common.502.L16w = Kontrolka przewodu 16. (zamkniÄ™cie drzwi) +Common.502.L20w = Kontrolka przewodu 20. (zamkniÄ™cie LK2 i LK5, "miÄ™kkie" wyłączenie silników) +Common.502.L23w = Kontrolka przewodu 23. (sterowanie sprzężarki) +Common.502.RK1 = Kontrolka pierwszej pozycji RK +Common.502.BRD = Kontrolka niesprawnoÅ›ci drzwi +Common.502.KOS = KB: Przycisk ograniczenia prÄ™dkoÅ›ci (przycisk czuwaka) +Common.502.VAK = AK: Przycisk załączania rozruchu w jeździe awaryjnej +Common.502.LRU = Kontrolka załączenia silników w sterowaniu rezerwowym + +#Spawner +Spawner.502.TypeNVL = Train from NVL #FIXME +Spawner.502.TypeKVLO = Old train from KVL #FIXME +Spawner.502.TypeKVLN = New train from KVL #FIXME +Spawner.502.EWagons = Add "E" type wagons #FIXME + +#gmod_subway_81-502 +Entities.gmod_subway_81-502.Buttons.VBA.VBAToggle = Wyłącznik baterii jazdy samoczynnej + +Entities.gmod_subway_81-502.Buttons.AV.VRUToggle = VRU: Wyłącznik sterowania rezerwowego +Entities.gmod_subway_81-502.Buttons.AV.KPVUToggle = KPVU: Wyłączenie pneumatycznego odłącznika sterowania +Entities.gmod_subway_81-502.Buttons.AV.KSDToggle = KSD: Wyłącznik kontroli pracy blokad drzwi +Entities.gmod_subway_81-502.Buttons.AV.KAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-502.Buttons.AV.KADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-502.Buttons.AV.OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-502.Buttons.AV.VKFToggle = @[Common.ALL.VKF] + + +Entities.gmod_subway_81-502.Buttons.RCAV3.RCAV3Toggle = Odłącznik obwodów KSAUP (AV3) +Entities.gmod_subway_81-502.Buttons.RCAV4.RCAV4Toggle = Odłącznik obwodów KSAUP (AV4) +Entities.gmod_subway_81-502.Buttons.RCAV5.RCAV5Toggle = Odłącznik obwodów KSAUP (AV5) +Entities.gmod_subway_81-502.Buttons.RCARS.RCARSToggle = @[Common.ALL.RCARS] +Entities.gmod_subway_81-502.Buttons.RCBPS.RCBPSToggle = @[Common.ALL.RCBPS] + +Entities.gmod_subway_81-502.Buttons.VRD2.2:VRDSet = @[Common.ARS.VRD] +Entities.gmod_subway_81-502.Buttons.VRD2.!LVRD = @[Common.ARS.LRD] + +Entities.gmod_subway_81-502.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-502.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-502.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-502.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-502.Buttons.AV1.VU3Toggle = @[Common.703.VU3] +Entities.gmod_subway_81-502.Buttons.UPO.R_UPOToggle = @[Common.ALL.UPO] + +Entities.gmod_subway_81-502.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_81-502.Buttons.VRD.VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-502.Buttons.HelperPanel.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.HelperPanel.KDPHSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-502.Buttons.AV2.VSOSDToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-502.Buttons.AV2.VRToggle = @[Common.ALL.VPR] + +Entities.gmod_subway_81-502.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLampAutodrive = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LDoorsWag = @[Common.502.SDW] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LDoors = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LGreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LRedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLampAutodrive = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RDoorsWag = @[Common.502.SDW] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RDoors = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RGreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RRedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_80 = @[Common.ARS.80] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_70 = @[Common.ARS.70] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_60 = @[Common.ARS.60] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_40 = @[Common.ARS.40] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_00 = @[Common.ARS.0] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_04 = @[Common.ARS.N4] + +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_KS = @[Common.502.KS] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_AV = @[Common.502.AV] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_4 = @[Common.502.L4w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_5 = @[Common.502.L5w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_DT = @[Common.ALL.BrT] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_20 = @[Common.502.L20w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_1P = @[Common.502.RK1] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SN1 = @[Common.ALL.RP] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SN2 = @[Common.ALL.SN] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_3 = @[Common.502.L3w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SD1 = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SD2 = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_RP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_DV = @[Common.502.BRD] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!CPS_Pd = @[Common.ARS.LRD] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_04 = @[Common.ARS.04] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_00 = @[Common.ARS.0] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_40 = @[Common.ARS.40] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_60 = @[Common.ARS.60] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_70 = @[Common.ARS.70] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_80 = @[Common.ARS.80] + +Entities.gmod_subway_81-502.Buttons.Main1.2:VUSToggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-502.Buttons.Main1.2:HeadlightsToggle = @[Common.ALL.VF1] +Entities.gmod_subway_81-502.Buttons.Main1.!LKTLight = @[Common.ARS.KT] +Entities.gmod_subway_81-502.Buttons.Main1.!LKVDLight = @[Common.ARS.VD] +Entities.gmod_subway_81-502.Buttons.Main1.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-502.Buttons.Main1.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-502.Buttons.Main1.2:KBSet = @[Common.ARS.KB] +Entities.gmod_subway_81-502.Buttons.Main1.2:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.Main1.2:LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-502.Buttons.Main1.2:LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-502.Buttons.Main1.2:VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-502.Buttons.Main1.2:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-502.Buttons.Main1.2:KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-502.Buttons.Main1.2:VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-502.Buttons.Main1.2:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-502.Buttons.Main1.2:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-502.Buttons.Main1.2:VAKSet = @[Common.502.VAK] +Entities.gmod_subway_81-502.Buttons.Main1.2:VUDToggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-502.Buttons.Main1_2.!LMK2 = @[Common.502.L23w] +Entities.gmod_subway_81-502.Buttons.Main1_2.!LVRD2 = @[Common.ARS.LRD] + +Entities.gmod_subway_81-502.Buttons.Main2.KOSSet = @[Common.502.KOS] +Entities.gmod_subway_81-502.Buttons.Main2.!LMK = @[Common.502.L23w] +Entities.gmod_subway_81-502.Buttons.Main2.VZPToggle = @[Common.ALL.VZP] +Entities.gmod_subway_81-502.Buttons.Main2.VZDSet = @[Common.ALL.VZD] +Entities.gmod_subway_81-502.Buttons.Main2.!L16 = @[Common.502.L16w] +Entities.gmod_subway_81-502.Buttons.Main2.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-502.Buttons.Main2.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.Main2.LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-502.Buttons.Main2.LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-502.Buttons.Main2.VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-502.Buttons.Main2.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-502.Buttons.Main2.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-502.Buttons.Main2.KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-502.Buttons.Main2.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-502.Buttons.Main2.!RU = @[Common.502.LRU] +Entities.gmod_subway_81-502.Buttons.Main2.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-502.Buttons.Main2.VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-502.Buttons.Main2.VAKSet = @[Common.502.VAK] +Entities.gmod_subway_81-502.Buttons.Main2.AutodriveToggle = @[Common.ALL.VAV] +Entities.gmod_subway_81-502.Buttons.Main2.VUDToggle = @[Common.ALL.VUD] + +Entities.gmod_subway_81-502.Buttons.BPS.!BPSon = @[Common.BPS.On] +Entities.gmod_subway_81-502.Buttons.BPS.!BPSErr = @[Common.BPS.Err] +Entities.gmod_subway_81-502.Buttons.BPS.!BPSFail = @[Common.BPS.Fail] +Entities.gmod_subway_81-502.Buttons.NMnUAVA.!NMPressureLow = @[Commom.NMnUAVA.NMPressureLow] +Entities.gmod_subway_81-502.Buttons.NMnUAVA.!UAVATriggered = @[Commom.NMnUAVA.UAVATriggered] + +Entities.gmod_subway_81-502.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-502.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-502.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-502.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-502.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-502.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-502.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-502.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-502.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-502.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-502.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-502.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-502.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-502.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber3+ = @[Common.ALL.RouteNumber3+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber3- = @[Common.ALL.RouteNumber3-] + +Entities.gmod_subway_81-502.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-502.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-502.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-502.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-502.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-502.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-501 +Entities.gmod_subway_81-501.Buttons.AV.KPVUToggle = @[Entities.gmod_subway_81-502.Buttons.AV.KPVUToggle] +Entities.gmod_subway_81-501.Buttons.AV.KSDToggle = @[Entities.gmod_subway_81-502.Buttons.AV.KSDToggle] + +Entities.gmod_subway_81-501.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-501.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-501.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-501.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-501.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-501.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_81-501.Buttons.Main.!GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-501.Buttons.Main.!RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-501.Buttons.Main.!SD = @[Common.703.SD] +Entities.gmod_subway_81-501.Buttons.Main.LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-501.Buttons.Main.LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-501.Buttons.Main.VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-501.Buttons.Main.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-501.Buttons.Main.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-501.Buttons.Main.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-501.Buttons.Main.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-501.Buttons.Main.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-501.Buttons.Main.VUDToggle = @[Common.ALL.VUD] + +Entities.gmod_subway_81-501.Buttons.HelperPanel.VDLSet = @[Common.ALL.KDL] + +Entities.gmod_subway_81-501.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-501.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-501.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-501.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-501.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-501.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-501.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-501.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-501.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-501.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-501.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-501.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-501.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-501.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-501.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-501.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] + +Entities.gmod_subway_81-501.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#Cameras: +Train.502.AV = Wyłączniki +Train.502.VBA = @[Entities.gmod_subway_81-502.Buttons.VBA.VBAToggle] +Train.502.VRD = VRD +Train.502.RCARS = RC-ARS +Train.502.RCAV5 = RC-AV5 +Train.502.RCBPS = RC-BPS +Train.502.RCAV3 = RC-AV3 +Train.502.RCAV4 = RC-AV4 + +#Spawner: +Entities.gmod_subway_81-502.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-502.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-502.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-502.Spawner.EMAType.Name = @[Spawner.Common.EType] +Entities.gmod_subway_81-502.Spawner.EMAType.1 = @[Spawner.502.TypeNVL] +Entities.gmod_subway_81-502.Spawner.EMAType.2 = @[Spawner.502.TypeKVLO] +Entities.gmod_subway_81-502.Spawner.EMAType.3 = @[Spawner.502.TypeKVLN] +Entities.gmod_subway_81-502.Spawner.EWagons.Name = @[Spawner.502.EWagons] +Entities.gmod_subway_81-502.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-502.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-502.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-502.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-502.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/pl_702.lua b/lua/metrostroi_data/languages/pl_702.lua new file mode 100644 index 0000000..1ab4ef1 --- /dev/null +++ b/lua/metrostroi_data/languages/pl_702.lua @@ -0,0 +1,761 @@ +return [[ +#D/E-based types + +[pl] + +#Cameras: +Train.702.Breakers1 = Wyłącznik baterii akumulatorów +Train.702.Breakers2 = OÅ›wietlenie +Train.702.Breakers3 = Wyłącznik główny +Train.703.Breakers1 = Wyłącznik baterii akumulatorów +Train.703.Breakers2 = Wyłącznik główny, oÅ›wietlenie +Train.703.Parking = Hamulec postojowy, UAVA +Train.703.RCARS = RC-1: Odłącznik obwodów ARS +Train.703.AVU = Panel AVU + +#Spawner +Spawner.707.Type = Panel type #FIXME +Spawner.707.Type1 = Old + RRI #FIXME +Spawner.707.Type2 = New + ASNP #FIXME +Spawner.710.RRI = Radio-relay announcer #FIXME + +#######Buttons########### +Train.Buttons.ParkingBrake = %d%% +Train.Buttons.EnginesVoltage = %d V #NEW (volts) +Train.Buttons.CanAB = Autoblocking mode is available #NEW (automatic block signals (without ARS)) +Train.Buttons.InAB = In autoblocking mode #NEW (automatic block signals (without ARS)) + +#Common +Common.702.VZ1 = Pneumatic valve â„–1 #FIXME!! +Common.703.ParkingBrakeLeft = Hamulec postojowy - hamowanie +Common.703.ParkingBrakeRight = Hamulec postojowy - luzowanie +Common.703.KSD = KSD: Przycisk kontroli pracy blokad drzwi +Common.703.SD = @[Common.502.SDW] +Common.703.VU1 = Ogrzewanie kabiny +Common.703.VU2 = Awaryjne oÅ›wietlenie +Common.703.VU3 = OÅ›wietlenie kabiny +Common.703.AV = Wyłącznik główny +Common.703.LOn = Włączanie oÅ›wietlenia +Common.703.LOff = Wyłączanie oÅ›wietlenia +Common.703.KRR = KRR: Powrót RK do pierwszej pozycji +Common.703.RUT = Regulacja RUT (zmniejszone przyspieszenie) +Common.707.SEQ = Kontrolka pracy RK +Common.707.TAH = TAH: Przełącznik jazdy awaryjnej w ruchu bez ARS +Common.710.RK = Kontrolka przejÅ›ciowej pozycji RK +Common.710.LKVT = Attention light #NEW #FIXME + +Common.710.SAMMSchemeOff = Przycisk wyłączenia rozruchu w jeździe samoczynnej +Common.710.SAMMStart = Przycisk rozruchu w jeździe samoczynnej +Common.710.SAMMReset = Przycisk kasowania +Common.710.SAMMXTLamp = Przycisk załączenia silników w jeździe samoczynnej +Common.710.SAMMSignal1 = @[Common.ALL.Unsused1] +Common.710.SAMMSignal2 = @[Common.ALL.Unsused1] +Common.710.SAMMOn = Włączenie SAMM (systemu jazdy samoczynnej) +Common.710.SAMMUnit = Włączenie bloku wykonawczego SAMM +Common.710.SAMMX2 = Tryb X2 +Common.710.SAMMAhead = Tryb nadganiania +Common.710.SAMMAccept = Zezwolenie + +#gmod_subway_81-702 +Entities.gmod_subway_81-702.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-702.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-702.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-702.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-702.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-702.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-702.Buttons.VU.KU1Set = @[Common.703.LOn] +Entities.gmod_subway_81-702.Buttons.VU.KU2Set = @[Common.703.LOff] +Entities.gmod_subway_81-702.Buttons.MainB.KU7Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-702.Buttons.MainB.KU6Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-702.Buttons.MainB.VRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-702.Buttons.MainB.KU3Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-702.Buttons.MainP.VZSet = @[Common.702.VZ1] +Entities.gmod_subway_81-702.Buttons.KU9.KU9Set = @[Common.703.KSD] +Entities.gmod_subway_81-702.Buttons.KU5.KU5Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-702.Buttons.MainL.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-702.Buttons.MainL.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-702.Buttons.MainL.!Blue = @[Common.703.SD] +Entities.gmod_subway_81-702.Buttons.VU.SNSet = @[Common.ALL.KSN] + +Entities.gmod_subway_81-702.Buttons.HelperPanel.KU10Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-702.Buttons.HelperPanel.KU8Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-702.Buttons.HelperPanel.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-702.Buttons.HelperPanel.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_81-702.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_81-702.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_81-702.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_81-702.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_81-702.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] + +Entities.gmod_subway_81-702.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-702.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-702.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-702.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-702.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-702.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-702.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-702.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-702.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-702.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-702.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-702.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-702.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-702.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-702.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-702.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-702.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-702.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-702.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-702.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-702_int +Entities.gmod_subway_81-702_int.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-702_int.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-702_int.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-702_int.Buttons.VU.KU1Set = @[Common.703.LOn] +Entities.gmod_subway_81-702_int.Buttons.VU.KU2Set = @[Common.703.LOff] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU7Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU6Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-702_int.Buttons.MainB.VRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU3Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-702_int.Buttons.KU9.KU9Set = @[Common.703.KSD] +Entities.gmod_subway_81-702_int.Buttons.KU5.KU5Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-702_int.Buttons.MainL.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-702_int.Buttons.MainL.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-702_int.Buttons.MainL.!Blue = @[Common.703.SD] +Entities.gmod_subway_81-702_int.Buttons.VU.SNSet = @[Common.ALL.KSN] + +Entities.gmod_subway_81-702_int.Buttons.HelperPanel.KU10Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-702_int.Buttons.HelperPanel.KU8Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_81-702_int.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-702_int.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-702_int.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-702_int.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-702_int.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-702_int.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-702_int.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-702_int.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-702_int.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-702_int.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702_int.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702_int.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-702_int.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-702_int.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-702_int.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-702_int.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-702_int.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-702_int.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-702_int.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-702_int.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-703 +Entities.gmod_subway_81-703.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-703.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-703.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-703.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-703.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-703.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-703.Buttons.AV2.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-703.Buttons.Main.RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-703.Buttons.Main.GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-703.Buttons.Main.SD = @[Common.703.SD] +Entities.gmod_subway_81-703.Buttons.Main.SDW = @[Common.502.SDW] +Entities.gmod_subway_81-703.Buttons.Main.PP1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-703.Buttons.Main.PP6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-703.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_81-703.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_81-703.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_81-703.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_81-703.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-703.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_81-703.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-703.Buttons.Main.KU7KToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-703.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703.Buttons.Main.KU6KToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-703.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-703.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-703.Buttons.Main.KU12Toggle = @[Common.703.RUT] +Entities.gmod_subway_81-703.Buttons.VU4.KU16Toggle = @[Common.ALL.VF2] + +Entities.gmod_subway_81-703.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-703.Buttons.HelperPanel.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-703.Buttons.HelperPanel.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_81-703.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_81-703.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_81-703.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_81-703.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_81-703.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] + +Entities.gmod_subway_81-703.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-703.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-703.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-703.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-703.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-703.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-703.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-703.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-703.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-703.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-703.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-703.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-703.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-703.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-703.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-703.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-703.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-703.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-703.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-703.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-703.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-703_int +Entities.gmod_subway_81-703_int.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-703_int.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-703_int.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-703_int.Buttons.Main.RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-703_int.Buttons.Main.GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-703_int.Buttons.Main.SD = @[Common.703.SD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_81-703_int.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_81-703_int.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_81-703_int.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_81-703_int.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-703_int.Buttons.Main.KU7KToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703_int.Buttons.Main.KU6KToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU12Toggle = @[Common.703.RUT] +Entities.gmod_subway_81-703_int.Buttons.VU4.KU16Toggle = @[Common.ALL.VF2] + +Entities.gmod_subway_81-703_int.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703_int.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_81-703_int.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-703_int.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-703_int.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-703_int.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-703_int.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-703_int.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-703_int.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-703_int.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-703_int.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-703_int.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703_int.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703_int.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-703_int.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-703_int.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-703_int.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-703_int.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-703_int.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-703_int.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-703_int.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-703_int.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-703_int.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_ezh +Entities.gmod_subway_ezh.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_ezh.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_ezh.Buttons.VU.KU14Set = @[Common.ALL.KRP] +Entities.gmod_subway_ezh.Buttons.VU.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_ezh.Buttons.KRR.KRRSet = @[Common.703.KRR] + +Entities.gmod_subway_ezh.Buttons.AVU.OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_ezh.Buttons.AVU.!AVULight = @[Common.ALL.LAVU] + +Entities.gmod_subway_ezh.Buttons.AV2.R_RadioToggle = @[Common.ALL.VASNP] +Entities.gmod_subway_ezh.Buttons.AV2.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_ezh.Buttons.AV2.UOSToggle = @[Common.ALL.UOS] + +Entities.gmod_subway_ezh.Buttons.LampsALS1.!LNF = @[Common.ARS.04] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L0 = @[Common.ARS.0] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L40 = @[Common.ARS.40] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L60 = @[Common.ARS.60] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L70 = @[Common.ARS.70] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L80 = @[Common.ARS.80] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!LNF_2 = @[Common.ARS.04] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L0_2 = @[Common.ARS.0] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L40_2 = @[Common.ARS.40] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L60_2 = @[Common.ARS.60] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L70_2 = @[Common.ARS.70] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L80_2 = @[Common.ARS.80] + +Entities.gmod_subway_ezh.Buttons.AB1.AB1Set = @[Common.ARS.ABButton]@[Common.ARS.ABDriver] +Entities.gmod_subway_ezh.Buttons.AB2.AB2Set = @[Common.ARS.ABButton]@[Common.ARS.ABHelper] +Entities.gmod_subway_ezh.Buttons.KAH.KAHToggle = @[Common.707.TAH] +Entities.gmod_subway_ezh.Buttons.RC1.RC1Toggle = @[Common.ALL.RCARS] + +Entities.gmod_subway_ezh.Buttons.Lamps1.!AV = @[Common.ARS.AV] +Entities.gmod_subway_ezh.Buttons.Lamps1.!SEQ = @[Common.707.SEQ] +Entities.gmod_subway_ezh.Buttons.Lamps1.!ARS = @[Common.ARS.ARS] +Entities.gmod_subway_ezh.Buttons.Lamps1.!AB = @[Common.ARS.AB] +Entities.gmod_subway_ezh.Buttons.Lamps1.!SD = @[Common.703.SD] +Entities.gmod_subway_ezh.Buttons.Lamps1.!LSN = @[Common.ALL.SN] +Entities.gmod_subway_ezh.Buttons.Lamps1.!AV1 = @[Common.ARS.AV1] +Entities.gmod_subway_ezh.Buttons.Lamps1.!RRP = @[Common.ALL.RP] +Entities.gmod_subway_ezh.Buttons.Lamps1.!KT = @[Common.ARS.KT] +Entities.gmod_subway_ezh.Buttons.Lamps1.!VD = @[Common.ARS.VD] +Entities.gmod_subway_ezh.Buttons.Lamps1.!RS = @[Common.ARS.RS] +Entities.gmod_subway_ezh.Buttons.Lamps1.!LN = @[Common.ARS.LN] +Entities.gmod_subway_ezh.Buttons.Lamps2.!RRP2 = @[Common.ALL.RP] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LPU2 = @[Common.707.SEQ] +Entities.gmod_subway_ezh.Buttons.Lamps2.!VD2 = @[Common.ARS.VD] +Entities.gmod_subway_ezh.Buttons.Lamps2.!KT2 = @[Common.ARS.KT] +Entities.gmod_subway_ezh.Buttons.Lamps2.!AB2 = @[Common.ARS.AB] +Entities.gmod_subway_ezh.Buttons.Lamps2.!SD2 = @[Common.703.SD] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LN2 = @[Common.ARS.LN] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LSN2 = @[Common.ALL.SN] + +Entities.gmod_subway_ezh.Buttons.Main1.1:KU16Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_ezh.Buttons.Main1.1:ALSFreqToggle = @[Common.ARS.Freq]@[Common.ARS.FreqD] +Entities.gmod_subway_ezh.Buttons.Main1.1:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU6KToggle = @[Common.ALL.KDLPK] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh.Buttons.Main1.1:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh.Buttons.Main1.1:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh.Buttons.Main1.1:R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU16Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_ezh.Buttons.Main2.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh.Buttons.Main2.2:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU6KToggle = @[Common.ALL.KDLPK] +Entities.gmod_subway_ezh.Buttons.Main2.2:ALSFreqToggle = @[Common.ARS.Freq]@[Common.ARS.FreqD] +Entities.gmod_subway_ezh.Buttons.Main2.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh.Buttons.Main2.2:R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU10Set = @[Common.ALL.KRZD] + +Entities.gmod_subway_ezh.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_ezh.Buttons.HelperPanel.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.HelperPanel.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_ezh.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_ezh.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_ezh.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_ezh.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_ezh.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] + +Entities.gmod_subway_ezh.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_ezh.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_ezh.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_ezh.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_ezh.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_ezh.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_ezh.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + + +Entities.gmod_subway_ezh.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_ezh.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_ezh.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_ezh.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_ezh1 +Entities.gmod_subway_ezh1.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh1.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh1.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh1.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh1.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh1.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh1.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh1.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh1.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] + + +Entities.gmod_subway_ezh1.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh1.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh1.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh1.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh1.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +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.!SD = @[Common.703.SD] + +Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh1.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh1.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh1.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh1.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh1.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh1.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh1.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh1.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh1.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_ezh1.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh1.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh1.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_ezh1.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh1.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_ezh1.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_ez3 +Entities.gmod_subway_ezh3.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh3.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh3.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh3.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh3.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_ezh3.Buttons.RUM.RUMToggle = @[Common.ALL.RCARS] +Entities.gmod_subway_ezh3.Buttons.KRR.KRRSet = @[Common.703.KRR] + +Entities.gmod_subway_ezh3.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_ezh3.Buttons.VUHelper.VUToggle = @[Common.ALL.VU] + + +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSchemeOffSet = @[Common.710.SAMMSchemeOff] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMStartSet = @[Common.710.SAMMStart] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMResetSet = @[Common.710.SAMMReset] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMXTLamp = @[Common.710.SAMMXTLamp] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal1 = @[Common.ALL.Unsused1] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal2 = @[Common.ALL.Unsused1] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMOnToggle = @[Common.710.SAMMOn] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMUnitToggle = @[Common.710.SAMMUnit] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMX2Toggle = @[Common.710.SAMMX2] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMAheadToggle = @[Common.710.SAMMAhead] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMAcceptToggle = @[Common.710.SAMMAccept] +Entities.gmod_subway_ezh3.Buttons.Main.V1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh3.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh3.Buttons.Main.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh3.Buttons.Main.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_ezh3.Buttons.Main.VU14Toggle = @[Common.ALL.VUS] +Entities.gmod_subway_ezh3.Buttons.Main.GLightsToggle = @[Common.ALL.GaugeLights] +Entities.gmod_subway_ezh3.Buttons.Main.VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_ezh3.Buttons.Main.V4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh3.Buttons.Main.V5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh3.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_ezh3.Buttons.Main.KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh3.Buttons.Main.KBSet = @[Common.ARS.KB] +Entities.gmod_subway_ezh3.Buttons.Main.RKLamp = @[Common.710.RK] +Entities.gmod_subway_ezh3.Buttons.Main.ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh3.Buttons.Main.R_UNchToggle = @[Common.ALL.UNCh] +Entities.gmod_subway_ezh3.Buttons.Main.V2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh3.Buttons.Main.R_RadioToggle = @[Common.ALL.R_Radio] +Entities.gmod_subway_ezh3.Buttons.Main.ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh3.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh3.Buttons.Main.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_ezh3.Buttons.Main.PLightsToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_ezh3.Buttons.Main.V10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh3.Buttons.Main.PLightsToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_ezh3.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh3.Buttons.Main.KU12Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh3.Buttons.Main.KAHSet = @[Common.ALL.KAH] +Entities.gmod_subway_ezh3.Buttons.Main.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_ezh3.Buttons.Main.KU10Set = @[Common.ALL.KRP] +Entities.gmod_subway_ezh3.Buttons.Main.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_ezh3.Buttons.Main.R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_ezh3.Buttons.Main.!AnnPlay = @[Common.ALL.AnnPlay] + +Entities.gmod_subway_ezh3.Buttons.HelperPanel.V6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.V3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_ezh3.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] + +Entities.gmod_subway_ezh3.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh3.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh3.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh3.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh3.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh3.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh3.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh3.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_ezh3.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_ezh3.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_ezh3.Buttons.Panel.!L04 = @[Common.ARS.04] +Entities.gmod_subway_ezh3.Buttons.Panel.!L0 = @[Common.ARS.0] +Entities.gmod_subway_ezh3.Buttons.Panel.!L40 = @[Common.ARS.40] +Entities.gmod_subway_ezh3.Buttons.Panel.!L60 = @[Common.ARS.60] +Entities.gmod_subway_ezh3.Buttons.Panel.!L70 = @[Common.ARS.70] +Entities.gmod_subway_ezh3.Buttons.Panel.!L80 = @[Common.ARS.80] + +Entities.gmod_subway_ezh3.Buttons.Panel.!LKT = @[Common.ARS.KT] +Entities.gmod_subway_ezh3.Buttons.Panel.!LSN = @[Common.ALL.SN] +Entities.gmod_subway_ezh3.Buttons.Panel.!LKVD = @[Common.ARS.VD] +Entities.gmod_subway_ezh3.Buttons.Panel.!LRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh3.Buttons.Panel.!LPU = @[Common.ALL.PU] +Entities.gmod_subway_ezh3.Buttons.Panel.!LSD = @[Common.703.SD] + +Entities.gmod_subway_ezh3.Buttons.Panel.!Speedometer = @[Common.ALL.Speedometer] +Entities.gmod_subway_ezh3.Buttons.Panel.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh3.Buttons.Panel.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh3.Buttons.Panel.!HighVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_ezh3.Buttons.Panel.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh3.Buttons.Panel.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +#gmod_subway_em508t +Entities.gmod_subway_em508t.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_em508t.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_em508t.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_em508t.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_em508t.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_em508t.Buttons.VU14.VU14Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_em508t.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_em508t.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_em508t.Buttons.Main.KU12Set = @[Common.ALL.KDL] +Entities.gmod_subway_em508t.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_em508t.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_em508t.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_em508t.Buttons.Main.V2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_em508t.Buttons.Main.V1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_em508t.Buttons.Main.V4Set = @[Common.703.LOn] +Entities.gmod_subway_em508t.Buttons.Main.V5Set = @[Common.703.LOff] +Entities.gmod_subway_em508t.Buttons.Main.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_em508t.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_em508t.Buttons.Main.V10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_em508t.Buttons.Main.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_em508t.Buttons.Main.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_em508t.Buttons.Main.!SD = @[Common.703.SD] + +Entities.gmod_subway_em508t.Buttons.HelperPanel.V6Set = @[Common.ALL.KDL] +Entities.gmod_subway_em508t.Buttons.HelperPanel.V3Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_em508t.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_em508t.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_em508t.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_em508t.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_em508t.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_em508t.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_em508t.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_em508t.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_em508t.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_em508t.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_em508t.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_em508t.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_em508t.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +#Spawner: +Entities.gmod_subway_81-702.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-702.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-702.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-702.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-702.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_81-702.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-702.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-702.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] + +Entities.gmod_subway_81-703.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-703.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-703.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-703.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-703.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_81-703.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-703.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-703.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] + +Entities.gmod_subway_ezh.Spawner.TrainType.Name = @[Spawner.707.Type] +Entities.gmod_subway_ezh.Spawner.TrainType.1 = @[Spawner.707.Type1] +Entities.gmod_subway_ezh.Spawner.TrainType.2 = @[Spawner.707.Type2] +Entities.gmod_subway_ezh.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_ezh.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_ezh.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_ezh.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_ezh.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_ezh.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_ezh.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_ezh.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_ezh.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_ezh.Spawner.EWagons.Name = @[Spawner.502.EWagons] + +Entities.gmod_subway_ezh3.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_ezh3.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_ezh3.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_ezh3.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_ezh3.Spawner.Announcer.1 = @[Spawner.710.RRI] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/pl_base.lua b/lua/metrostroi_data/languages/pl_base.lua new file mode 100644 index 0000000..e825986 --- /dev/null +++ b/lua/metrostroi_data/languages/pl_base.lua @@ -0,0 +1,450 @@ +return [[ +#Base text for Polish languagÄ™ + +[pl] +lang = Polski #Full language name +AuthorText = Autor przekÅ‚adu: Elkm #Author text + +#Workshop errors +Workshop.Title = Menadżer addonów +Workshop.FilesMissing = Brakuje niektórych plików addonu lub addon uszkodzony\nJeÅ›li addon zostaÅ‚ zainstalowany za poÅ›rednictwem Workshopu, spróbuj usunąć plik:\nGarrysMod/garrysmod/%s. +Workshop.FilesMissingLocaly = Brakuje niektórych plików addonu lub addon uszkodzny. +Workshop.InstalledLocaly = Zainstalowany (lokalnie) +Workshop.NotInstalledE = Niezainstalowany.\nZasubskrybuj addon i sprawdź go w menu "Addony". +Workshop.NotInstalled = Niezainstalowany. +Workshop.Disabled = Wyłączony.\nWłącz go w menu "Addony". +Workshop.Installed = Zainstalowany. +Workshop.Open = Workshop +Workshop.ErrorGithub = Znaleziona wersja GitHub modu Metrostroi - jest ona niekompatybilna z wersjÄ… Legacy. +Workshop.ErrorLegacy = Znaleziona wersja Legacy modu Metrostroi - jest ona niekompatybilna z wersjÄ… GitHub. +Workshop.ErrorEnhancers = This addon contain a graphic enhancers that may interfere comfortable game. +Workshop.Error1 = Ten addon zawiera stary kod modu Metrostroi, który nie jest kompatybilny z zainstalowanym. MogÄ… pojawić siÄ™ "Script errors" i zachodzić niestabilność addonu. +Workshop.ErrorOld = Old models detected (81-702 and 81-717 old models). Check and remove old metrostroi content files, remove cache, download and downloads folders from garrysmod folder. + +#Client settings +Panel.Admin = Admin +Panel.RequireThirdRail = Wymagaj trzeciej szyny + +Panel.Client = Klient +Panel.Language = Wybierz jÄ™zyk +Panel.DrawCams = Renderuj obraz z kamer +Panel.DisableHUD = Wyłącz HUD na miejscu maszynisty +Panel.DisableCamAccel = Wyłącz ruch kamery (wrażenie przyspieszenia) +Panel.DisableHoverText = Wyłącz podpowiedzi przycisków +Panel.DisableHoverTextP = Disable additional information\nin tooltips #NEW #FIXME +Panel.ScreenshotMode = Tryb fotografii (NISKI FPS!) +Panel.ShadowsHeadlight = Włącz dynamiczne cienie (lampy) +Panel.RedLights = Enable dynamic light\nof red lights +Panel.ShadowsOther = Włącz dynamiczne cienie (inne źródÅ‚a) +Panel.MinimizedShow = Nie zwalniaj zasobów podczas minimalizacji +Panel.PanelLights = Enable dynamic lights\nfrom control panel lamps #NEW +Panel.RouteNumber = Route number #NEW +Panel.FOV = FOV (pole widzenia) +Panel.Z = Camera height #NEW +Panel.RenderDistance = OdlegÅ‚ość rysowania +Panel.ReloadClient = PrzeÅ‚aduj zasoby (klient) + +Panel.ClientAdvanced = Klient (zaawansowane) +Panel.DrawDebugInfo = Pokaż dodatkowe informacje (debug) +Panel.DrawSignalDebugInfo = Signalling debug info #FIXME +Panel.CheckAddons = Przeskanuj addony +Panel.ReloadLang = PrzeÅ‚aduj jÄ™zyki +Panel.SoftDraw = Opóźnienie miÄ™dzy rysowaniami +Panel.SoftReloadLang = Nie przeÅ‚adowywuj spawnmenu + + + +#Common train + +#Cameras +Train.Common.Camera0 = Miejsce maszynisty +Train.Common.RouteNumber = Numer brygady +Train.Common.LastStation = Stacja koÅ„cowa +Train.Common.HelpersPanel = Panel pomocnika maszynisty +Train.Common.UAVA = UAVA #FIXME +Train.Common.PneumoPanels = Pneumatic valves #FIXME +Train.Common.Voltmeters = Voltmeters and amperemeters #FIXME +Train.Common.CouplerCamera = Coupler #FIXME +Common.ARM.Monitor1 = Monitor ARM 1 + +Train.Buttons.Sealed = Zaplombowane +Train.Buttons.Active = Active #NEW +Train.Buttons.Auto = Auto #NEW +Train.Buttons.On = On #NEW +Train.Buttons.Off = Off #NEW +Train.Buttons.Closed = Closed #NEW +Train.Buttons.Opened = Opened #NEW +Train.Buttons.Disconnected = Disconnected #NEW +Train.Buttons.Connected = Connected #NEW +Train.Buttons.UAVAOff = Control circuits is open #NEW (OFF) +Train.Buttons.UAVAOn = Control circuits is closed #NEW (ON) +Train.Buttons.Freq1/5 = 1/5 autoblocking #NEW +Train.Buttons.Freq2/6 = 2/6 ALS-ARS #NEW +Train.Buttons.Left = Left #NEW +Train.Buttons.Right = Right #NEW +Train.Buttons.Low = Low #NEW +Train.Buttons.High = High #NEW #FIXME +Train.Buttons.LFar = Bright #NEW #FIXME (headlights) +Train.Buttons.LNear = Dim #NEW #FIXME (headlights) +Train.Buttons.0 = 0 #NEW +Train.Buttons.1 = 1 #NEW +Train.Buttons.2 = 2 #NEW +Train.Buttons.3 = 3 #NEW +Train.Buttons.4 = 4 #NEW +Train.Buttons.Forward = Forward #NEW +Train.Buttons.Back = Backward #NEW +Train.Buttons.VentHalf = 1/2 of speed #NEW (of ventilation) +Train.Buttons.VentFull = Full speed #NEW (of ventilation) +Train.Buttons.VTRF = Forward oriented wagons #NEW +Train.Buttons.VTRB = Back oriented wagons #NEW +Train.Buttons.VTR1 = Even wagons #NEW +Train.Buttons.VTR2 = Odd wagons #NEW +Train.Buttons.VTRH1 = First half of train #NEW +Train.Buttons.VTRH2 = Second half of train #NEW +Train.Buttons.VTRAll = All wagons #NEW + +Train.Buttons.BatteryVoltage = %d V #NEW +Train.Buttons.HighVoltage = %d V #NEW +Train.Buttons.BatteryCurrent = %d A #NEW +Train.Buttons.EnginesCurrent = %d A #NEW +Train.Buttons.Speed = %d km/h #NEW +Train.Buttons.SpeedAll = %d km/h\nSpeed limit: %s km/h #NEW #FIXME +Train.Buttons.SpeedLimit = %s km/h #NEW +Train.Buttons.SpeedLimitNext = %s km/h #NEW +Train.Buttons.04 = NF #NEW (no frequency) +Train.Buttons.BCPressure = %.1f bar +Train.Buttons.BLTLPressure = TL: %.1f\nBL: %.1f bar #NEW (TL: Train line, BL: Brake line acronyms) +Train.Buttons.Locked = Locked #NEW +Train.Buttons.Unlocked = Unlocked #NEW + +#Train entities +Entities.gmod_subway_base.Name = Baza pociÄ…gu metra +Entities.gmod_subway_81-502.Name = 81-502 (Ema-502 koÅ„cowy) +Entities.gmod_subway_81-501.Name = 81-501 (Em-501 Å›rodkowy) +Entities.gmod_subway_81-702.Name = 81-702 (D koÅ„cowy) +Entities.gmod_subway_81-702_int.Name = 81-702 (D Å›rodkowy) +Entities.gmod_subway_81-703.Name = 81-703 (E koÅ„cowy) +Entities.gmod_subway_81-703_int.Name = 81-703 (E Å›rodkowy) +Entities.gmod_subway_ezh.Name = 81-707 (Ezh koÅ„cowy) +Entities.gmod_subway_ezh1.Name = 81-708 (Ezh1 Å›rodkowy) +Entities.gmod_subway_ezh3.Name = 81-710 (Ezh3 koÅ„cowy) +Entities.gmod_subway_em508t.Name = 81-508T (Em-508T Å›rodkowy) +Entities.gmod_subway_81-717_mvm.Name = 81-717 (moskiewski, koÅ„cowy) +Entities.gmod_subway_81-717_mvm_custom.Name = 81-717 (Moscow custom) #FIXME +Entities.gmod_subway_81-714_mvm.Name = 81-714 (moskiewski, Å›rodkowy) +Entities.gmod_subway_81-717_lvz.Name = 81-717 (petersburski, koÅ„cowy) +Entities.gmod_subway_81-714_lvz.Name = 81-714 (petersburski, Å›rodkowy) +Entities.gmod_subway_81-718.Name = 81-718 (TISU koÅ„cowy) +Entities.gmod_subway_81-719.Name = 81-719 (TISU Å›rodkowy) +Entities.gmod_subway_81-720.Name = 81-720 (Yauza koÅ„cowy) +Entities.gmod_subway_81-721.Name = 81-721 (Yauza Å›rodkowy) +Entities.gmod_subway_81-722.Name = 81-722 (Yubileyniy koÅ„cowy) +Entities.gmod_subway_81-723.Name = 81-723 (Yubileyniy Å›rodkowy silnikowy) +Entities.gmod_subway_81-724.Name = 81-724 (Yubileyniy Å›rodkowy toczny) +Entities.gmod_subway_81-7036.Name = 81-7036 (nie dziaÅ‚a) +Entities.gmod_subway_81-7037.Name = 81-7037 (nie dziaÅ‚a) +Entities.gmod_subway_tatra_t3.Name = Tatra T3 + +#Train util entities +Entities.gmod_train_bogey.Name = Wózek +Entities.gmod_train_couple.Name = SprzÄ™g + +#Other entities +Entities.gmod_track_pui.Name = PUI +Entities.gmod_track_mus_elektronika7.Name = Zegar "Electronika" +Entities.gmod_mus_clock_analog.Name = Zegar analogowy +Entities.gmod_track_clock_time.Name = Duży stoper (czas) +Entities.gmod_track_clock_small.Name = MaÅ‚y stoper +Entities.gmod_track_clock_interval.Name = Duży stoper (interwaÅ‚) +Entities.gmod_track_switch.Name = Zwrotnica (kontroler) +Entities.gmod_track_powermeter.Name = Kilowatomierz +Entities.gmod_track_arm.Name = Pulpit nastawczy +Entities.gmod_track_udochka.Name = Konektor +Entities.gmod_train_spawner.Name = Spawner +Entities.gmod_train_special_box.Name = Special delivery #FIXME + +#Weapons +Weapons.button_presser.Name = Button presser #FIXME +Weapons.button_presser.Purpose = Used to press buttons on the maps. #FIXME +Weapons.button_presser.Instructions = Hold to the button and click "Attack" button. #FIXME +Weapons.train_key.Name = Administrator key #FIXME +Weapons.train_key.Purpose = Used to activate the administrators buttons. #FIXME +Weapons.train_key.Instructions = Hold to administrator button and press "Attack" button. #FIXME +Weapons.train_kv_wrench.Name = Reverser wrench #FIXME +Weapons.train_kv_wrench.Purpose = Used in metro train and for pressing buttons in them. #FIXME +Weapons.train_kv_wrench.Instructions = Hold to button in the train and press "Attack" button. #FIXME +Weapons.train_kv_wrench_gold.Name = The golden reverser wrench #FIXME + +Weapons.train_kv_wrench_gold.Purpose = @[Weapons.train_kv_wrench.Purpose] +Weapons.train_kv_wrench_gold.Instructions = @[Weapons.train_kv_wrench.Instructions] + +#Spawner common +Spawner.Title = Train spawner #FIXME +Spawner.Spawn = Spawn #FIXME +Spawner.Close = Close #FIXME +Spawner.Trains1 = Wags. allowed #FIXME +Spawner.Trains2 = Per player #FIXME +Spawner.WagNum = Wagons amount #FIXME +Common.Spawner.Texture = Malowanie +Common.Spawner.PassTexture = WnÄ™trze +Common.Spawner.CabTexture = Kabina +Common.Spawner.Announcer = Zapowiedzi +Common.Spawner.Type1 = Typ 1 +Common.Spawner.Type2 = Typ 2 +Common.Spawner.Type3 = Typ 3 +Common.Spawner.Type4 = Typ 4 +Common.Spawner.SpawnMode = Train state #FIXME +Common.Spawner.SpawnMode.Deadlock = Dead-end #FIXME +Common.Spawner.SpawnMode.Full = Fully started #FIXME +Common.Spawner.SpawnMode.NightDeadlock = Dead-end after night #FIXME +Common.Spawner.SpawnMode.Depot = Depot #FIXME +Spawner.Common.EType = Electric circuits type #FIXME +Common.Spawner.Scheme = Line schemes +Common.Spawner.Random = Random #FIXME +Common.Spawner.Old = Old #FIXME +Common.Spawner.New = New #FIXME +Common.Spawner.Type = Type #FIXME +Common.Spawner.SchemeInvert = Invert line schemes #FIXME + +#Coupler common +Common.Couple.Title = Coupler menu #FIXME +Common.Couple.CoupleState = Coupler state #FIXME +Common.Couple.Coupled = Coupled #FIXME +Common.Couple.Uncoupled = Not coupled #FIXME +Common.Couple.Uncouple = Uncouple #FIXME +Common.Couple.IsolState = Isolation valves state #FIXME +Common.Couple.Isolated = Closed #FIXME +Common.Couple.Opened = Opened #FIXME +Common.Couple.Open = Open #FIXME +Common.Couple.Isolate = Close #FIXME +Common.Couple.EKKState = EKK state (electrical connection) #FIXME +Common.Couple.Disconnected = Disconnected #FIXME +Common.Couple.Connected = Connected #FIXME +Common.Couple.Connect = Connect #FIXME +Common.Couple.Disconnect = Disconnect #FIXME + +#Bogey common +Common.Bogey.Title = Bogie menu #FIXME +Common.Bogey.ContactState = Current collectors state #FIXME +Common.Bogey.CReleased = Released #FIXME +Common.Bogey.CPressed = Pressed #FIXME +Common.Bogey.CPress = Press #FIXME +Common.Bogey.CRelease = Release #FIXME +Common.Bogey.ParkingBrakeState = Parking brake state #FIXME +Common.Bogey.PBDisabled = Manually disabled #FIXME +Common.Bogey.PBEnabled = Enabled #FIXME +Common.Bogey.PBEnable = Enable #FIXME +Common.Bogey.PBDisable = Manual disable #FIXME + +#Trains common +Common.ALL.Unsused1 = Nieużywane +Common.ALL.Unsused2 = (nieużywane) +Common.ALL.Up = (up) #FIXME +Common.ALL.Down = (down) #FIXME +Common.ALL.Left = (left) #FIXME +Common.ALL.Right = (right) #FIXME +Common.ALL.CW = (clockwise) #FIXME +Common.ALL.CCW = (counter-clockwise) #FIXME +Common.ALL.VB = VB: Wyłącznik baterii akumulatorów +Common.ALL.VSOSD = SOSD: Wyłącznik kontrolki otwarcia drzwi stacyjnych +Common.ALL.VKF = VKF: Wyłącznik bateryjnego zasilania reflektorów czerwonych +Common.ALL.VB2 = (Obwody pomocnicze NN) +Common.ALL.VPR = VPR: Wyłącznik radiotelefonu +Common.ALL.VASNP = Wyłącznik ASNP +Common.ALL.UOS = RC-UOS: UrzÄ…dzenie ograniczenia prÄ™dkoÅ›ci (jazda bez EPV/EPK) +Common.ALL.VAH = VAH: Wyłącznik jazdy awaryjnej +Common.ALL.KAH = KAH: Przycisk jazdy awaryjnej bez ARS +Common.ALL.KAHK = KAH button cover #FIXME +Common.ALL.VAD = VAD: Wyłącznik awaryjny drzwi +Common.ALL.OVT = OVT: Odłączenie hamulców pneumatycznych +Common.ALL.VOVT = VOVT: Wyłącznik odłączenia hamulców pneumatycznych +Common.ALL.EmergencyBrakeValve = Hamulec bezpieczeÅ„stwa +Common.ALL.ParkingBrake = Parking brake #FIXME +Common.ALL.VU = VU: Wyłącznik sterowania +Common.ALL.KDP = KDP: Otwarcie drzwi prawych +Common.ALL.KDPL = Right doors side is selected #FIXME +Common.ALL.KDPK = Klapka przycisku drzwi prawych +Common.ALL.KDL = KDL: Otwarcie drzwi lewych +Common.ALL.KDLL = Left doors side is selected #FIXME +Common.ALL.KDLK = Klapka przycisku drzwi prawych +Common.ALL.KDLPK = Klapka przycisków drzwi +Common.ALL.KRZD = KRZD: Rezerwowe zamykanie drzwi +Common.ALL.VSD = Doors side selector #FIXME +Common.ALL.Ring = Dzwonek +Common.ALL.VUD = VUD: Zamykanie drzwi +Common.ALL.KDPH = Otwarcie prawych drzwi ostatniego wagonu +Common.ALL.VUD2 = VUD2: Zamykanie drzwi od strony pomocnika +Common.ALL.Program1 = Program I +Common.ALL.Program2 = Program II +Common.ALL.VRP = VRP: Odblokowanie RP +Common.ALL.VRPBV = VRP: Reset overload relay, enable BV #FIXME +Common.ALL.KSN = KSN: SygnaÅ‚ awarii +Common.ALL.VMK = VMK: Sprężarka +Common.ALL.MK = Compressor #FIXME (without acronym) +Common.ALL.VF1 = Wyłącznik pierwszej grupy reflektorów +Common.ALL.VF2 = Wyłącznik drugiej grupy reflektorów +Common.ALL.VF = Wyłącznik reflektorów +Common.ALL.VUS = VUS: Wyłącznik silniejszego Å›wiatÅ‚a reflektorów +Common.ALL.GaugeLights = OÅ›wietlenie pulpitu +Common.ALL.CabLights = OÅ›wietlenie kabiny +Common.ALL.PassLights = Passenger compartment lighting #FIXME +Common.ALL.PanelLights = Control panel lighting #FIXME +Common.ALL.RMK = RMK: Rezerwowe sterowanie sprężarki +Common.ALL.KRP = KRP: Rozruch rezerwowy +Common.ALL.VZP = VZP: Wyłącznik wstrzymania odjazdu systemu jazdy samoczynnej +Common.ALL.VZD = VZD: Wyłącznik wstrzymania drzwi +Common.ALL.VAV = VAV: Wyłącznik jazdy samoczynnej +Common.ALL.RouteNumber1+ = ZwiÄ™kszenie pierwszej cyfry numeru brygady +Common.ALL.RouteNumber1- = Zmniejszenie pierwszej cyfry numeru brygady +Common.ALL.RouteNumber2+ = ZwiÄ™kszenie drugiej cyfry numeru brygady +Common.ALL.RouteNumber2- = Zmniejszenie drugiej cyfry numeru brygady +Common.ALL.RouteNumber3+ = ZwiÄ™kszenie trzeciej cyfry numeru brygady +Common.ALL.RouteNumber3- = Zmniejszenie trzeciej cyfry numeru brygady +Common.ALL.LastStation+ = PrzewiniÄ™cie tablicy stacji koÅ„cowych naprzód +Common.ALL.LastStation- = PrzewiniÄ™cie tablicy stacji koÅ„cowych w tyÅ‚ +Common.ALL.RRP = Czerwona kontrolka RP (brak załączenia obwodu głównego) +Common.ALL.GRP = Zielona kontrolka RP +Common.ALL.RP = RP: Czerwona kontrolka RP (zadziaÅ‚anie RP na jednym z wagonów lub brak załączenia obwodu głównego) +Common.ALL.SN = LSN: Czerwona kontrolka RP (brak załączenia obwodu głównego jednego lub wiÄ™cej wagonów) +Common.ALL.PU = Kontrolka niskiego rozruchu +Common.ALL.BrT = Kontrolka dziaÅ‚ania hamulca pneumatycznego pociÄ…gu +Common.ALL.BrW = Wagon pneumobrakes are engaged #FIXME +Common.ALL.ARS = ARS: Wyłącznik systemu ARS +Common.ALL.ARSR = ARS-R: Wyłącznik pracy systemu ARS w trybie ARS-R +Common.ALL.ALS = ALS: Wyłącznik ALS +Common.ALL.RCARS = RC-ARS: ARS circuits disconnect #FIXME (same as RC-1) +Common.ALL.RC1 = RC-1: Odłącznik obwodów ARS +Common.ALL.EPK = EPK: elektropneumatyczny zawór ARS +Common.ALL.EPV = EPV: elektropneumatyczny zawór ARS +Common.ARS.LN = LN: Kontrolka jazdy w kierunku wÅ‚aÅ›ciwym +Common.ARS.KT = KT: Kontrolka hamowania +Common.ARS.VD = VD: Kontrolka wyłączenia +Common.ARS.Freq = Przełączenie trybu pracy ALS +Common.ARS.FreqD = (w górÄ™ 1/5, w dół 2/6) +Common.ARS.FreqU = (w górÄ™ 2/6, w dół 1/5) +Common.ARS.VP = "Auxiliary train" mode #FIXME +Common.ARS.RS = RS: Lampa równoÅ›ci ograniczeÅ„ prÄ™dkoÅ›ci +Common.ARS.AB = Praca systemu ARS w trybie blokady liniowej +Common.ARS.ABButton = Przycisk przejÅ›cia w tryb blokady liniowej +Common.ARS.ABDriver = (maszynisty) +Common.ARS.ABHelper = (pomocnika) +Common.ARS.AV = Kontrolka awarii bloku głównego systemu ARS-MP +Common.ARS.AV1 = Kontrolka awarii bloku rezerwowego systemu ARS-MP +Common.ARS.AB2 = Przycisk przejÅ›cia w tryb blokady liniowej +Common.ARS.ARS = Zasadniczy tryb pracy systemu ARS +Common.ARS.LRD = LRD: Kontrolka zezwolenia jazdy podczas sygnaÅ‚u "stój" +Common.ARS.VRD = VRD: Zezwolenie jazdy podczas sygnaÅ‚u "stój" +Common.ARS.KB = KB: Przycisk czuwaka +Common.ARS.KVT = KVT: Przycisk kasowania hamowania +Common.ARS.KVTR = KVT: Przycisk kasowania hamowania w trybie ARS-R +Common.ARS.04 = OCh: Brak sygnaÅ‚u ARS +Common.ARS.N4 = NCh: No ARS frequency #FIXME (same as OCh but NCh) +Common.ARS.0 = 0: SygnaÅ‚ "stój" +Common.ARS.40 = 40: Ograniczenie 40 km/h +Common.ARS.60 = 60: Ograniczenie 60 km/h +Common.ARS.70 = 70: Ograniczenie 70 km/h +Common.ARS.80 = 80: Ograniczenie 80 km/h +Common.ALL.RCBPS = RC-BPS: Odłącznik obwodów systemu przeciwpoÅ›lizgowego +Common.BPS.On = DziaÅ‚anie systemu przeciwpoÅ›lizgowego +Common.BPS.Err = Błąd systemu przeciwpoÅ›lizgowego +Common.BPS.Fail = Awaria systemu przeciwpoÅ›lizgowego +Commom.NMnUAVA.NMPressureLow = Kontrolka niskiego ciÅ›nienia w przewodzie zasilajÄ…cym +Commom.NMnUAVA.UAVATriggered = Kontrolka otwarcia styków UAVA +Common.ALL.LSD = Train doors state light (doors are closed) #FIXME +Common.ALL.L1w = Kontrolka przewodu 1. (załączenie obwodu głównego - rozruch) +Common.ALL.L2w = Kontrolka przewodu 2. (praca kontrolera reostatu (PSR)) +Common.ALL.L6w = Kontrolka przewodu 6. (załączenie obwodu głównego - hamowanie ED) +Common.ALL.Horn = Horn #FIXME +Common.ALL.DriverValveBLDisconnect = Zawór dwudrożny przewodu głównego +Common.ALL.DriverValveTLDisconnect = Zawór dwudrożny przewodu zasilajÄ…cego +Common.ALL.DriverValveDisconnect = Driver's valve disconnect valve #FIXME +Common.ALL.KRMH = KRMSH: Driver's valve emergency enable #FIXME +Common.ALL.RVTB = RVTB: Reserved valve of safety brake #FIXME +Common.ALL.FrontBrakeLineIsolationToggle = Zawór przewodu głównego sprzÄ™gu powietrznego +Common.ALL.FrontTrainLineIsolationToggle = Zawór przewodu zasilajÄ…cego sprzÄ™gu powietrznego +Common.ALL.RearBrakeLineIsolationToggle = Zawór przewodu głównego sprzÄ™gu powietrznego +Common.ALL.RearTrainLineIsolationToggle = Zawór przewodu zasilajÄ…cego sprzÄ™gu powietrznego +Common.ALL.UAVA = UAVA: Włączenie samoczynnego wyłącznika autostopu\n(możliwe dopiero po zmniejszeniu ciÅ›nienia w przewodzie głównym) +Common.ALL.UAVA2 = UAVA: Enable automatic autostop disabler #FIXME +Common.ALL.UAVAContact = Przywrócenie styków UAVA +Common.ALL.OAVU = OAVU: Wyłącznik odłączenia AVU +Common.ALL.LAVU = Kontrolka dziaÅ‚ania AVU +Common.ALL.GV = GV: Główny odłącznik +Common.ALL.AirDistributor = VRN: Wyłącznik zaworu rozrzÄ…drzego +Common.ALL.CabinDoor = Drzwi do kabiny +Common.ALL.PassDoor = Door to the passenger compartment #FIXME +Common.ALL.FrontDoor = Drzwi przednie +Common.ALL.RearDoor = Drzwi tylne +Common.ALL.OtsekDoor1 = 1st equipment cupboard handle #FIXME +Common.ALL.OtsekDoor2 = 2nd equipment cupboard handle #FIXME +Common.ALL.CouchCap = Pull out the seat #FIXME + +Common.ALL.UNCh = UNCh: Włączenie wzmacniacza niskich czÄ™stotliwoÅ›ci +Common.ALL.ES = ES: Przełącznik kontroli łącznoÅ›ci alarmowej +Common.ALL.GCab = Włączenie gÅ‚oÅ›nika w kabinie +Common.ALL.UPO = UPO: Włączenie urzÄ…dzeÅ„ rozgÅ‚aszania komunikatów dźwiÄ™kowych +Common.ALL.R_Radio = Włączenie systemu zapowiedzi gÅ‚osowych +Common.ALL.AnnPlay = Kontrolka odtwarzania zapowiedzi gÅ‚osowej + +#RRI +Train.Common.RRI = RRI: Przekaźnikowy system zapowiedzi gÅ‚osowych +Common.RRI.RRIUp = RRI: Konfiguracja w górÄ™ +Common.RRI.RRIDown = RRI: Konfiguracja w dół +Common.RRI.RRILeft = RRI: Konfiguracja w lewo +Common.RRI.RRIRight = RRI: Konfiguracja w prawo +Common.RRI.RRIEnableToggle = RRI: Zasilanie +Common.RRI.RRIRewindSet2 = RRI: Przewijanie do przodu +Common.RRI.RRIRewindSet0 = RRI: Przewijanie do tyÅ‚u +Common.RRI.RRIAmplifierToggle = RRI: Wzmacniacz +Common.RRI.RRIOn = RRI: Kontrolka pracy RRI + +#ASNP +Train.Common.ASNP = ASNP +Common.ASNP.ASNPMenu = ASNP: Menu +Common.ASNP.ASNPUp = ASNP: W górÄ™ +Common.ASNP.ASNPDown = ASNP: W dół +Common.ASNP.ASNPOn = Wyłącznik ASNP + +#PVK +Common.CabVent.PVK- = Decrease cabin ventilation power #FIXME +Common.CabVent.PVK+ = Increase cabin ventilation power #FIXME + +#IGLA +Train.Common.IGLA = IGLA +Common.IGLA.Button1Up = IGLA: Pierwszy przycisk w górÄ™ +Common.IGLA.Button1 = IGLA: Pierwszy przycisk +Common.IGLA.Button1Down = IGLA: Pierwszy przycisk w dół +Common.IGLA.Button2Up = IGLA: Drugi przycisk w górÄ™ +Common.IGLA.Button2 = IGLA: Drugi przycisk +Common.IGLA.Button2Down = IGLA: Drugi przycisk w górÄ™ +Common.IGLA.Button23 = IGLA: Second and third buttons #FIXME +Common.IGLA.Button3 = IGLA: Third button #FIXME +Common.IGLA.Button4 = IGLA: Fourth button #FIXME +Common.IGLA.IGLASR = IGLA: Zasilanie +Common.IGLA.IGLARX = IGLA: Brak łącznoÅ›ci +Common.IGLA.IGLAErr = IGLA: Błąd +Common.IGLA.IGLAOSP = IGLA: ZadziaÅ‚anie systemu przeciwpożarowego +Common.IGLA.IGLAPI = IGLA: Pożar +Common.IGLA.IGLAOff = IGLA: Odłączenie obwodów WN + +#BZOS +Common.BZOS.On = Security alarm switch #FIXME +Common.BZOS.VH1 = Security alarm is enabled #FIXME +Common.BZOS.VH2 = Security alarm is triggered #FIXME +Common.BZOS.Engaged = Security alarm is triggered #FIXME + +#Train helpers common +Common.ALL.SpeedCurr = Actual speed #FIXME +Common.ALL.SpeedAccept = Allowed speed #FIXME +Common.ALL.SpeedAttent = Allowed speed on the next section #FIXME +Common.ALL.Speedometer = PrÄ™dkoÅ›ciomierz +Common.ALL.BLTLPressure = CiÅ›nienie w przewodach: głównym (wsk. czerwona) i zasilajÄ…cym (wsk. czarna) +Common.ALL.BCPressure = CiÅ›nienie w cylindrach hamulcowych +Common.ALL.EnginesCurrent = PrÄ…d trakcyjny [A] +Common.ALL.EnginesCurrent1 = 1st traction motors current (A) #FIXME +Common.ALL.EnginesCurrent2 = 2nd traction motors current (A) #FIXME +Common.ALL.EnginesVoltage = NapiÄ™cie trakcyjne [kV] +Common.ALL.BatteryVoltage = NapiÄ™cie baterii [V] +Common.ALL.BatteryCurrent = Battery current (A) #FIXME +Common.ALL.HighVoltage = Woltomierz WN [kV] +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/ru_502.lua b/lua/metrostroi_data/languages/ru_502.lua new file mode 100644 index 0000000..ecd7427 --- /dev/null +++ b/lua/metrostroi_data/languages/ru_502.lua @@ -0,0 +1,272 @@ +return [[ +#81-502 + +[ru] + +#######Buttons########### +#Common +Common.502.KS = Лампа работы КСÐУП +Common.502.AV = Лампа Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° Ð°Ð²Ñ‚Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ +Common.502.SD = Лампа Ñигнализации дверей поезда (двери закрыты) +Common.502.SDW = Лампа Ñигнализации дверей вагона (двери открыты) +Common.502.L3w = Лампа 3 провода (режим ход3) +Common.502.L4w = Лампа 4 провода (направление Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð°Ð·Ð°Ð´) +Common.502.L5w = Лампа 5 провода (направление Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð²Ð¿ÐµÑ€Ñ‘Ð´) +Common.502.L16w = Лампа 16 провода (закрытие дверей) +Common.502.L20w = Лампа 20 провода (замыкание ЛК2 и ЛК5, плавный разбор) +Common.502.L23w = Лампа 23 провода (управление мотор-компреÑÑоров) +Common.502.RK1 = Лампа ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð¿ÐµÑ€Ð²Ð¾Ð¹ позиции РК +Common.502.BRD = Лампа неиÑправноÑти дверей +Common.502.KOS = Кнопка Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ ÑкороÑти (кнопка бдительноÑти) +Common.502.VAK = Кнопка Ñбора Ñхемы аварийного хода +Common.502.LRU = Лампа Ñбора Ñхемы резервного ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + +#Spawner +Spawner.502.TypeNVL = СоÑтав Ñ ÐВЛ +Spawner.502.TypeKVLO = СоÑтав Ñ ÐšÐ’Ð› Ñтарый +Spawner.502.TypeKVLN = СоÑтав Ñ ÐšÐ’Ð› новый +Spawner.502.EWagons = Вцепить вагоны типа Е + +#gmod_subway_81-502 +Entities.gmod_subway_81-502.Buttons.VBA.VBAToggle = Выключатель батарей Ð°Ð²Ñ‚Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ + +Entities.gmod_subway_81-502.Buttons.AV.VRUToggle = Выключатель резервного ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ +Entities.gmod_subway_81-502.Buttons.AV.KPVUToggle = Отключение пневматичеÑкого Ð²Ñ‹ÐºÐ»ÑŽÑ‡Ð°Ñ‚ÐµÐ»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ +Entities.gmod_subway_81-502.Buttons.AV.KSDToggle = Выключатель ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ дверных блокировок +Entities.gmod_subway_81-502.Buttons.AV.KAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-502.Buttons.AV.KADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-502.Buttons.AV.OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-502.Buttons.AV.VKFToggle = @[Common.ALL.VKF] + + +Entities.gmod_subway_81-502.Buttons.RCAV3.RCAV3Toggle = Разъединитель цепей КСÐУП (ÐÐ’3) +Entities.gmod_subway_81-502.Buttons.RCAV4.RCAV4Toggle = Разъединитель цепей КСÐУП (ÐÐ’4) +Entities.gmod_subway_81-502.Buttons.RCAV5.RCAV5Toggle = Разъединитель цепей КСÐУП (ÐÐ’5) +Entities.gmod_subway_81-502.Buttons.RCARS.RCARSToggle = @[Common.ALL.RCARS] +Entities.gmod_subway_81-502.Buttons.RCBPS.RCBPSToggle = @[Common.ALL.RCBPS] + +Entities.gmod_subway_81-502.Buttons.VRD2.2:VRDSet = @[Common.ARS.VRD] +Entities.gmod_subway_81-502.Buttons.VRD2.!LVRD = @[Common.ARS.LRD] + +Entities.gmod_subway_81-502.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-502.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-502.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-502.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-502.Buttons.AV1.VU3Toggle = @[Common.703.VU3] +Entities.gmod_subway_81-502.Buttons.UPO.R_UPOToggle = @[Common.ALL.UPO] + +Entities.gmod_subway_81-502.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_81-502.Buttons.VRD.VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-502.Buttons.HelperPanel.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.HelperPanel.KDPHSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-502.Buttons.AV2.VSOSDToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-502.Buttons.AV2.VRToggle = @[Common.ALL.VPR] + +Entities.gmod_subway_81-502.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLampAutodrive = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LLamp6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LDoorsWag = @[Common.502.SDW] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LDoors = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LGreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_1.!LRedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLampAutodrive = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RLamp6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RDoorsWag = @[Common.502.SDW] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RDoors = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RGreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps1_2.!RRedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_80 = @[Common.ARS.80] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_70 = @[Common.ARS.70] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_60 = @[Common.ARS.60] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_40 = @[Common.ARS.40] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_00 = @[Common.ARS.0] +Entities.gmod_subway_81-502.Buttons.ALSPanel.!ALS_04 = @[Common.ARS.N4] + +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_KS = @[Common.502.KS] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_AV = @[Common.502.AV] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_4 = @[Common.502.L4w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_5 = @[Common.502.L5w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_DT = @[Common.ALL.BrT] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_20 = @[Common.502.L20w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_2 = @[Common.ALL.L2w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_1P = @[Common.502.RK1] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SN1 = @[Common.ALL.RP] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SN2 = @[Common.ALL.SN] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_3 = @[Common.502.L3w] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SD1 = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_SD2 = @[Common.502.SD] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_RP = @[Common.ALL.GRP] +Entities.gmod_subway_81-502.Buttons.Lamps2_1.!CPS_DV = @[Common.502.BRD] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!CPS_Pd = @[Common.ARS.LRD] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_04 = @[Common.ARS.04] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_00 = @[Common.ARS.0] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_40 = @[Common.ARS.40] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_60 = @[Common.ARS.60] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_70 = @[Common.ARS.70] +Entities.gmod_subway_81-502.Buttons.Lamps2_2.!ALS_80 = @[Common.ARS.80] + +Entities.gmod_subway_81-502.Buttons.Main1.2:VUSToggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-502.Buttons.Main1.2:HeadlightsToggle = @[Common.ALL.VF1] +Entities.gmod_subway_81-502.Buttons.Main1.!LKTLight = @[Common.ARS.KT] +Entities.gmod_subway_81-502.Buttons.Main1.!LKVDLight = @[Common.ARS.VD] +Entities.gmod_subway_81-502.Buttons.Main1.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-502.Buttons.Main1.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-502.Buttons.Main1.2:KBSet = @[Common.ARS.KB] +Entities.gmod_subway_81-502.Buttons.Main1.2:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.Main1.2:LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-502.Buttons.Main1.2:LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-502.Buttons.Main1.2:VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-502.Buttons.Main1.2:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-502.Buttons.Main1.2:KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-502.Buttons.Main1.2:VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-502.Buttons.Main1.2:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-502.Buttons.Main1.2:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-502.Buttons.Main1.2:VAKSet = @[Common.502.VAK] +Entities.gmod_subway_81-502.Buttons.Main1.2:VUDToggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-502.Buttons.Main1_2.!LMK2 = @[Common.502.L23w] +Entities.gmod_subway_81-502.Buttons.Main1_2.!LVRD2 = @[Common.ARS.LRD] + +Entities.gmod_subway_81-502.Buttons.Main2.KOSSet = @[Common.502.KOS] +Entities.gmod_subway_81-502.Buttons.Main2.!LMK = @[Common.502.L23w] +Entities.gmod_subway_81-502.Buttons.Main2.VZPToggle = @[Common.ALL.VZP] +Entities.gmod_subway_81-502.Buttons.Main2.VZDSet = @[Common.ALL.VZD] +Entities.gmod_subway_81-502.Buttons.Main2.!L16 = @[Common.502.L16w] +Entities.gmod_subway_81-502.Buttons.Main2.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-502.Buttons.Main2.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-502.Buttons.Main2.LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-502.Buttons.Main2.LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-502.Buttons.Main2.VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-502.Buttons.Main2.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-502.Buttons.Main2.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-502.Buttons.Main2.KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-502.Buttons.Main2.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-502.Buttons.Main2.!RU = @[Common.502.LRU] +Entities.gmod_subway_81-502.Buttons.Main2.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-502.Buttons.Main2.VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-502.Buttons.Main2.VAKSet = @[Common.502.VAK] +Entities.gmod_subway_81-502.Buttons.Main2.AutodriveToggle = @[Common.ALL.VAV] +Entities.gmod_subway_81-502.Buttons.Main2.VUDToggle = @[Common.ALL.VUD] + +Entities.gmod_subway_81-502.Buttons.BPS.!BPSon = @[Common.BPS.On] +Entities.gmod_subway_81-502.Buttons.BPS.!BPSErr = @[Common.BPS.Err] +Entities.gmod_subway_81-502.Buttons.BPS.!BPSFail = @[Common.BPS.Fail] +Entities.gmod_subway_81-502.Buttons.NMnUAVA.!NMPressureLow = @[Commom.NMnUAVA.NMPressureLow] +Entities.gmod_subway_81-502.Buttons.NMnUAVA.!UAVATriggered = @[Commom.NMnUAVA.UAVATriggered] + +Entities.gmod_subway_81-502.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-502.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-502.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-502.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-502.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-502.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-502.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-502.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-502.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-502.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-502.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-502.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-502.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-502.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-502.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber3+ = @[Common.ALL.RouteNumber3+] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-502.Buttons.Route.RouteNumber3- = @[Common.ALL.RouteNumber3-] + +Entities.gmod_subway_81-502.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-502.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-502.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-502.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-502.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] +Entities.gmod_subway_81-502.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] +#gmod_subway_81-501 +Entities.gmod_subway_81-501.Buttons.AV.KPVUToggle = @[Entities.gmod_subway_81-502.Buttons.AV.KPVUToggle] +Entities.gmod_subway_81-501.Buttons.AV.KSDToggle = @[Entities.gmod_subway_81-502.Buttons.AV.KSDToggle] + +Entities.gmod_subway_81-501.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-501.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-501.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-501.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-501.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-501.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_81-501.Buttons.Main.!GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-501.Buttons.Main.!RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-501.Buttons.Main.!SD = @[Common.703.SD] +Entities.gmod_subway_81-501.Buttons.Main.LOnSet = @[Common.703.LOn] +Entities.gmod_subway_81-501.Buttons.Main.LOffSet = @[Common.703.LOff] +Entities.gmod_subway_81-501.Buttons.Main.VozvratRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-501.Buttons.Main.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-501.Buttons.Main.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-501.Buttons.Main.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-501.Buttons.Main.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-501.Buttons.Main.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-501.Buttons.Main.VUDToggle = @[Common.ALL.VUD] + +Entities.gmod_subway_81-501.Buttons.HelperPanel.VDLSet = @[Common.ALL.KDL] + +Entities.gmod_subway_81-501.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-501.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-501.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-501.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-501.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-501.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-501.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-501.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-501.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-501.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-501.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-501.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-501.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-501.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-501.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-501.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-501.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] + +Entities.gmod_subway_81-501.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#Cameras: +Train.502.AV = Выключатели +Train.502.VBA = Выключатель батареи Ð°Ð²Ñ‚Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ +Train.502.VRD = ВРД +Train.502.RCARS = РЦ-ÐРС +Train.502.RCAV5 = РЦ-ÐÐ’5 +Train.502.RCBPS = РЦ-БПС +Train.502.RCAV3 = РЦ-ÐÐ’3 +Train.502.RCAV4 = РЦ-ÐÐ’4 + +#Spawner: +Entities.gmod_subway_81-502.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-502.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-502.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-502.Spawner.EMAType.Name = @[Spawner.Common.EType] +Entities.gmod_subway_81-502.Spawner.EMAType.1 = @[Spawner.502.TypeNVL] +Entities.gmod_subway_81-502.Spawner.EMAType.2 = @[Spawner.502.TypeKVLO] +Entities.gmod_subway_81-502.Spawner.EMAType.3 = @[Spawner.502.TypeKVLN] +Entities.gmod_subway_81-502.Spawner.EWagons.Name = @[Spawner.502.EWagons] +Entities.gmod_subway_81-502.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-502.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-502.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-502.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-502.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/ru_508.lua b/lua/metrostroi_data/languages/ru_508.lua new file mode 100644 index 0000000..fe27a31 --- /dev/null +++ b/lua/metrostroi_data/languages/ru_508.lua @@ -0,0 +1,132 @@ +return [[ +#81-508/509 + +[ru] + +#######Buttons########### +#Common +Common.508.50V = +50Ð’: Питание дополнительных потребителий +Common.508.UKS = Работа уÑтройÑтва Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ ÑкороÑти +Common.508.UKSDisconnect = Кран Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÑƒÑтройÑтва Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ ÑкороÑти +Common.508.Heaters = Включение Ð¾Ñ‚Ð¾Ð¿Ð»ÐµÐ½Ð¸Ñ Ñалонов + + +#gmod_subway_em508 +Entities.gmod_subway_em508.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_em508.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_em508.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_em508.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_em508.Spawner.Announcer.1 = @[Spawner.710.RRI] +Entities.gmod_subway_em508.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_em508.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_em508.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_em508.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_em508.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] + +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.AV2.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_em508.Buttons.50V.50VToggle = @[Common.508.50V] +Entities.gmod_subway_em508.Buttons.PassHeaters.HPassToggle = @[Common.508.Heaters] + +Entities.gmod_subway_em508.Buttons.Lamps.!GRP = @[Common.ALL.GRP] +Entities.gmod_subway_em508.Buttons.Lamps.!LSN = @[Common.ALL.SN] +Entities.gmod_subway_em508.Buttons.Lamps.!RRP = @[Common.ALL.RRP] +Entities.gmod_subway_em508.Buttons.Lamps.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_em508.Buttons.Lamps.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_em508.Buttons.Lamps.!SD = @[Common.703.SD] +Entities.gmod_subway_em508.Buttons.Lamps.!UKS = @[Common.508.UKS] +Entities.gmod_subway_em508.Buttons.Lamps.KU16Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_em508.Buttons.Main1.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_em508.Buttons.Main1.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_em508.Buttons.Main1.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_em508.Buttons.Main1.KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_em508.Buttons.Main1.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_em508.Buttons.Main1.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_em508.Buttons.Main1.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_em508.Buttons.Main1.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_em508.Buttons.Main1.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_em508.Buttons.Main1.UV1Set = @[Common.702.VZ1] +Entities.gmod_subway_em508.Buttons.Main1.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_em508.Buttons.Main1.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_em508.Buttons.Main1.KU6KToggle = @[Common.ALL.KDLPK] + +Entities.gmod_subway_em508.Buttons.KU14.KU14Set = @[Common.ALL.KRP] +Entities.gmod_subway_em508.Buttons.KU10R.KU10RSet = @[Common.ALL.KRZD] +Entities.gmod_subway_em508.Buttons.AVU.OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_em508.Buttons.AVU.!AVULight = @[Common.ALL.LAVU] +Entities.gmod_subway_em508.Buttons.KRR.KRRSet = @[Common.703.KRR] +Entities.gmod_subway_em508.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_em508.Buttons.DriverMicrophone.R_Program1Set = @[Common.ALL.Program1] + +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.HelperPanel.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_em508.Buttons.HelperPanel.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_em508.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_em508.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_em508.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_em508.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_em508.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_em508.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_em508.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_em508.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_em508.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_em508.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_em508.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_em508.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_em508.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] +Entities.gmod_subway_em508.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_em508.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_em508.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_em508.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_em508.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_em508.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_em508.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_em508.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_em508.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_em508.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_em508.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_em508.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] + + +Entities.gmod_subway_em508.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +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.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_em508.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_em508.Buttons.UAVAPanel.UKSDisconnectToggle = @[Common.508.UKSDisconnect] +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.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +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_em508t.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +Entities.gmod_subway_em508.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_em508.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_em508.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_em508.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_em508.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_em508.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/ru_702.lua b/lua/metrostroi_data/languages/ru_702.lua new file mode 100644 index 0000000..9100022 --- /dev/null +++ b/lua/metrostroi_data/languages/ru_702.lua @@ -0,0 +1,762 @@ +return [[ +#D/E-based types + +[ru] + +#Cameras: +Train.702.Breakers1 = Выключатель батареи +Train.702.Breakers2 = ОÑвещение +Train.702.Breakers3 = Ðвтомат +Train.703.Breakers1 = Выключатель батареи +Train.703.Breakers2 = Ðвтомат, оÑвещение +Train.703.Parking = Ручной тормоз, УÐÐ’Ð +Train.703.RCARS = Разъединитель цепей ÐРС +Train.703.AVU = Панель Ñ ÐВУ + +#Spawner +Spawner.707.Type = Тип панели +Spawner.707.Type1 = Ð¡Ñ‚Ð°Ñ€Ð°Ñ + РРИ +Spawner.707.Type2 = ÐÐ¾Ð²Ð°Ñ + ÐСÐП +Spawner.710.RRI = Радиорелейный информатор + +#######Buttons########### +Train.Buttons.ParkingBrake = %d%% +Train.Buttons.EnginesVoltage = %d Ð’ +Train.Buttons.CanAB = ДоÑтупен переход в режим ÐБ +Train.Buttons.InAB = Ð’ режиме ÐБ + +#Common +Common.702.VZ1 = Кнопка принудительного ÑÑ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð²ÐµÐ½Ñ‚Ð¸Ð»Ñ Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ â„–1 +Common.703.ParkingBrakeLeft = РаÑтормозить ручной тормоз +Common.703.ParkingBrakeRight = Затормозить ручной тормоз +Common.703.KSD = Кнопка ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ дверных блокировок +Common.703.SD = Лампа Ñигнализации дверей поезда (двери открыты) +Common.703.VU1 = Отопление кабины +Common.703.VU2 = Ðварийное оÑвещение +Common.703.VU3 = ОÑвещение кабины +Common.703.AV = Главный автомат (вÑпомогательные цепи выÑокого напрÑжениÑ) +Common.703.LOn = Включение оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ +Common.703.LOff = Выключение оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ +Common.703.KRR = Кнопка разворота реверÑоров +Common.703.RUT = Регулировка РУТ(Пониженное уÑкорение) +Common.707.SEQ = Лампа Ð²Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð Ðš +Common.707.TAH = Тумблер аварийного хода Ð´Ð»Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð±ÐµÐ· ÐРС +Common.710.RK = Лампа Ð½Ð°Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð Ðš в промежуточной позиции +Common.710.LKVT = Лампа бдительноÑти + +Common.710.SAMMSchemeOff = Кнопка Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ‚Ñги Ð°Ð²Ñ‚Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ +Common.710.SAMMStart = Кнопка пуÑка от Ð°Ð²Ñ‚Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ +Common.710.SAMMReset = Кнопка ÑброÑа +Common.710.SAMMXTLamp = Кнопка Ñбора Ñхемы от Ð°Ð²Ñ‚Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð² ход/тормоз +Common.710.SAMMSignal1 = @[Common.ALL.Unsused1] +Common.710.SAMMSignal2 = @[Common.ALL.Unsused1] +Common.710.SAMMOn = Включение СÐММ +Common.710.SAMMUnit = Включение иÑполнительного блока СÐММ +Common.710.SAMMX2 = Режим Ð¥2 +Common.710.SAMMAhead = Режим нагона +Common.710.SAMMAccept = Подтверждение + +#gmod_subway_81-702 +Entities.gmod_subway_81-702.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-702.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-702.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-702.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-702.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-702.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-702.Buttons.VU.KU1Set = @[Common.703.LOn] +Entities.gmod_subway_81-702.Buttons.VU.KU2Set = @[Common.703.LOff] +Entities.gmod_subway_81-702.Buttons.MainB.KU7Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-702.Buttons.MainB.KU6Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-702.Buttons.MainB.VRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-702.Buttons.MainB.KU3Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-702.Buttons.MainP.VZSet = @[Common.702.VZ1] +Entities.gmod_subway_81-702.Buttons.KU9.KU9Set = @[Common.703.KSD] +Entities.gmod_subway_81-702.Buttons.KU5.KU5Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-702.Buttons.MainL.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-702.Buttons.MainL.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-702.Buttons.MainL.!Blue = @[Common.703.SD] +Entities.gmod_subway_81-702.Buttons.VU.SNSet = @[Common.ALL.KSN] + +Entities.gmod_subway_81-702.Buttons.HelperPanel.KU10Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-702.Buttons.HelperPanel.KU8Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-702.Buttons.HelperPanel.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-702.Buttons.HelperPanel.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_81-702.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_81-702.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_81-702.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_81-702.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_81-702.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_81-702.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] + +Entities.gmod_subway_81-702.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-702.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-702.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-702.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-702.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-702.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-702.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-702.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-702.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-702.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-702.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-702.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-702.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-702.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-702.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-702.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-702.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-702.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-702.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-702.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-702.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-702.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + + +#gmod_subway_81-702_int +Entities.gmod_subway_81-702_int.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-702_int.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-702_int.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-702_int.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-702_int.Buttons.VU.KU1Set = @[Common.703.LOn] +Entities.gmod_subway_81-702_int.Buttons.VU.KU2Set = @[Common.703.LOff] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU7Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU6Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-702_int.Buttons.MainB.VRPSet = @[Common.ALL.VRP] +Entities.gmod_subway_81-702_int.Buttons.MainB.KU3Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-702_int.Buttons.KU9.KU9Set = @[Common.703.KSD] +Entities.gmod_subway_81-702_int.Buttons.KU5.KU5Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-702_int.Buttons.MainL.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-702_int.Buttons.MainL.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-702_int.Buttons.MainL.!Blue = @[Common.703.SD] +Entities.gmod_subway_81-702_int.Buttons.VU.SNSet = @[Common.ALL.KSN] + +Entities.gmod_subway_81-702_int.Buttons.HelperPanel.KU10Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-702_int.Buttons.HelperPanel.KU8Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_81-702_int.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-702_int.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-702_int.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-702_int.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-702_int.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-702_int.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-702_int.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-702_int.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-702_int.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-702_int.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-702_int.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702_int.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-702_int.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-702_int.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-702_int.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-702_int.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-702_int.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-702_int.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-702_int.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-702_int.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-702_int.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-703 +Entities.gmod_subway_81-703.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-703.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-703.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-703.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-703.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-703.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-703.Buttons.AV2.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-703.Buttons.Main.RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-703.Buttons.Main.GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-703.Buttons.Main.SD = @[Common.703.SD] +Entities.gmod_subway_81-703.Buttons.Main.SDW = @[Common.502.SDW] +Entities.gmod_subway_81-703.Buttons.Main.PP1 = @[Common.ALL.L1w] +Entities.gmod_subway_81-703.Buttons.Main.PP6 = @[Common.ALL.L6w] +Entities.gmod_subway_81-703.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_81-703.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_81-703.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_81-703.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_81-703.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-703.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_81-703.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-703.Buttons.Main.KU7KToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-703.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703.Buttons.Main.KU6KToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-703.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-703.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-703.Buttons.Main.KU12Toggle = @[Common.703.RUT] +Entities.gmod_subway_81-703.Buttons.VU4.KU16Toggle = @[Common.ALL.VF2] + +Entities.gmod_subway_81-703.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-703.Buttons.HelperPanel.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-703.Buttons.HelperPanel.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_81-703.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_81-703.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_81-703.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_81-703.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_81-703.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_81-703.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] + +Entities.gmod_subway_81-703.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-703.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-703.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-703.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-703.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-703.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-703.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-703.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-703.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-703.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-703.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-703.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-703.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-703.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-703.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-703.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-703.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-703.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-703.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-703.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-703.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-703.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-703.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_81-703_int +Entities.gmod_subway_81-703_int.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_81-703_int.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_81-703_int.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_81-703_int.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_81-703_int.Buttons.Main.RRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-703_int.Buttons.Main.GRP = @[Common.ALL.GRP] +Entities.gmod_subway_81-703_int.Buttons.Main.SD = @[Common.703.SD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_81-703_int.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_81-703_int.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_81-703_int.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_81-703_int.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-703_int.Buttons.Main.KU7KToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703_int.Buttons.Main.KU6KToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-703_int.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-703_int.Buttons.Main.KU12Toggle = @[Common.703.RUT] +Entities.gmod_subway_81-703_int.Buttons.VU4.KU16Toggle = @[Common.ALL.VF2] + +Entities.gmod_subway_81-703_int.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-703_int.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_81-703_int.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-703_int.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_81-703_int.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_81-703_int.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-703_int.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_81-703_int.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-703_int.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-703_int.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-703_int.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-703_int.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-703_int.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703_int.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-703_int.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-703_int.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-703_int.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-703_int.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_81-703_int.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-703_int.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-703_int.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_81-703_int.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-703_int.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-703_int.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_ezh +Entities.gmod_subway_ezh.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_ezh.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_ezh.Buttons.VU.KU14Set = @[Common.ALL.KRP] +Entities.gmod_subway_ezh.Buttons.VU.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_ezh.Buttons.KRR.KRRSet = @[Common.703.KRR] + +Entities.gmod_subway_ezh.Buttons.AVU.OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_ezh.Buttons.AVU.!AVULight = @[Common.ALL.LAVU] + +Entities.gmod_subway_ezh.Buttons.AV2.R_RadioToggle = @[Common.ALL.VASNP] +Entities.gmod_subway_ezh.Buttons.AV2.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_ezh.Buttons.AV2.UOSToggle = @[Common.ALL.UOS] + +Entities.gmod_subway_ezh.Buttons.LampsALS1.!LNF = @[Common.ARS.04] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L0 = @[Common.ARS.0] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L40 = @[Common.ARS.40] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L60 = @[Common.ARS.60] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L70 = @[Common.ARS.70] +Entities.gmod_subway_ezh.Buttons.LampsALS1.!L80 = @[Common.ARS.80] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!LNF_2 = @[Common.ARS.04] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L0_2 = @[Common.ARS.0] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L40_2 = @[Common.ARS.40] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L60_2 = @[Common.ARS.60] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L70_2 = @[Common.ARS.70] +Entities.gmod_subway_ezh.Buttons.LampsALS2.!L80_2 = @[Common.ARS.80] + +Entities.gmod_subway_ezh.Buttons.AB1.AB1Set = @[Common.ARS.ABButton]@[Common.ARS.ABDriver] +Entities.gmod_subway_ezh.Buttons.AB2.AB2Set = @[Common.ARS.ABButton]@[Common.ARS.ABHelper] +Entities.gmod_subway_ezh.Buttons.KAH.KAHToggle = @[Common.707.TAH] +Entities.gmod_subway_ezh.Buttons.RC1.RC1Toggle = @[Common.ALL.RCARS] + +Entities.gmod_subway_ezh.Buttons.Lamps1.!AV = @[Common.ARS.AV] +Entities.gmod_subway_ezh.Buttons.Lamps1.!SEQ = @[Common.707.SEQ] +Entities.gmod_subway_ezh.Buttons.Lamps1.!ARS = @[Common.ARS.ARS] +Entities.gmod_subway_ezh.Buttons.Lamps1.!AB = @[Common.ARS.AB] +Entities.gmod_subway_ezh.Buttons.Lamps1.!SD = @[Common.703.SD] +Entities.gmod_subway_ezh.Buttons.Lamps1.!LSN = @[Common.ALL.SN] +Entities.gmod_subway_ezh.Buttons.Lamps1.!AV1 = @[Common.ARS.AV1] +Entities.gmod_subway_ezh.Buttons.Lamps1.!RRP = @[Common.ALL.RP] +Entities.gmod_subway_ezh.Buttons.Lamps1.!KT = @[Common.ARS.KT] +Entities.gmod_subway_ezh.Buttons.Lamps1.!VD = @[Common.ARS.VD] +Entities.gmod_subway_ezh.Buttons.Lamps1.!RS = @[Common.ARS.RS] +Entities.gmod_subway_ezh.Buttons.Lamps1.!LN = @[Common.ARS.LN] +Entities.gmod_subway_ezh.Buttons.Lamps2.!RRP2 = @[Common.ALL.RP] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LPU2 = @[Common.707.SEQ] +Entities.gmod_subway_ezh.Buttons.Lamps2.!VD2 = @[Common.ARS.VD] +Entities.gmod_subway_ezh.Buttons.Lamps2.!KT2 = @[Common.ARS.KT] +Entities.gmod_subway_ezh.Buttons.Lamps2.!AB2 = @[Common.ARS.AB] +Entities.gmod_subway_ezh.Buttons.Lamps2.!SD2 = @[Common.703.SD] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LN2 = @[Common.ARS.LN] +Entities.gmod_subway_ezh.Buttons.Lamps2.!LSN2 = @[Common.ALL.SN] + +Entities.gmod_subway_ezh.Buttons.Main1.1:KU16Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_ezh.Buttons.Main1.1:ALSFreqToggle = @[Common.ARS.Freq]@[Common.ARS.FreqD] +Entities.gmod_subway_ezh.Buttons.Main1.1:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU6KToggle = @[Common.ALL.KDLPK] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh.Buttons.Main1.1:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh.Buttons.Main1.1:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh.Buttons.Main1.1:R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh.Buttons.Main1.1:KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU16Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_ezh.Buttons.Main2.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh.Buttons.Main2.2:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU6KToggle = @[Common.ALL.KDLPK] +Entities.gmod_subway_ezh.Buttons.Main2.2:ALSFreqToggle = @[Common.ARS.Freq]@[Common.ARS.FreqD] +Entities.gmod_subway_ezh.Buttons.Main2.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh.Buttons.Main2.2:R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh.Buttons.Main2.2:KU10Set = @[Common.ALL.KRZD] + +Entities.gmod_subway_ezh.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_ezh.Buttons.HelperPanel.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_ezh.Buttons.HelperPanel.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_ezh.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_ezh.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_ezh.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_ezh.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_ezh.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_ezh.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] + +Entities.gmod_subway_ezh.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_ezh.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_ezh.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_ezh.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_ezh.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_ezh.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_ezh.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_ezh.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + + +Entities.gmod_subway_ezh.Buttons.Speedometer.!Speedometer = @[Common.ALL.Speedometer] + +Entities.gmod_subway_ezh.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_ezh.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_ezh.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_ezh1 +Entities.gmod_subway_ezh1.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh1.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh1.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh1.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh1.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh1.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh1.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh1.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh1.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] + + +Entities.gmod_subway_ezh1.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh1.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh1.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh1.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh1.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +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.!SD = @[Common.703.SD] + +Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh1.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh1.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh1.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh1.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh1.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh1.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh1.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh1.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh1.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh1.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_ezh1.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh1.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh1.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_ezh1.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh1.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_ezh1.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] + +#gmod_subway_ez3 +Entities.gmod_subway_ezh3.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_ezh3.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_ezh3.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_ezh3.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_ezh3.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_ezh3.Buttons.RUM.RUMToggle = @[Common.ALL.RCARS] +Entities.gmod_subway_ezh3.Buttons.KRR.KRRSet = @[Common.703.KRR] + +Entities.gmod_subway_ezh3.Buttons.VU.VUToggle = @[Common.ALL.VU] +Entities.gmod_subway_ezh3.Buttons.VUHelper.VUToggle = @[Common.ALL.VU] + + +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSchemeOffSet = @[Common.710.SAMMSchemeOff] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMStartSet = @[Common.710.SAMMStart] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMResetSet = @[Common.710.SAMMReset] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMXTLamp = @[Common.710.SAMMXTLamp] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal1 = @[Common.ALL.Unsused1] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal2 = @[Common.ALL.Unsused1] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMOnToggle = @[Common.710.SAMMOn] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMUnitToggle = @[Common.710.SAMMUnit] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMX2Toggle = @[Common.710.SAMMX2] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMAheadToggle = @[Common.710.SAMMAhead] +Entities.gmod_subway_ezh3.Buttons.Main.SAMMAcceptToggle = @[Common.710.SAMMAccept] +Entities.gmod_subway_ezh3.Buttons.Main.V1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_ezh3.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_ezh3.Buttons.Main.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_ezh3.Buttons.Main.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_ezh3.Buttons.Main.VU14Toggle = @[Common.ALL.VUS] +Entities.gmod_subway_ezh3.Buttons.Main.GLightsToggle = @[Common.ALL.GaugeLights] +Entities.gmod_subway_ezh3.Buttons.Main.VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_ezh3.Buttons.Main.V4Set = @[Common.703.LOn] +Entities.gmod_subway_ezh3.Buttons.Main.V5Set = @[Common.703.LOff] +Entities.gmod_subway_ezh3.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_ezh3.Buttons.Main.KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_ezh3.Buttons.Main.KBSet = @[Common.ARS.KB] +Entities.gmod_subway_ezh3.Buttons.Main.RKLamp = @[Common.710.RK] +Entities.gmod_subway_ezh3.Buttons.Main.ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_ezh3.Buttons.Main.R_UNchToggle = @[Common.ALL.UNCh] +Entities.gmod_subway_ezh3.Buttons.Main.V2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_ezh3.Buttons.Main.R_RadioToggle = @[Common.ALL.R_Radio] +Entities.gmod_subway_ezh3.Buttons.Main.ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_ezh3.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_ezh3.Buttons.Main.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_ezh3.Buttons.Main.PLightsToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_ezh3.Buttons.Main.V10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_ezh3.Buttons.Main.PLightsToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_ezh3.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_ezh3.Buttons.Main.KU12Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh3.Buttons.Main.KAHSet = @[Common.ALL.KAH] +Entities.gmod_subway_ezh3.Buttons.Main.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_ezh3.Buttons.Main.KU10Set = @[Common.ALL.KRP] +Entities.gmod_subway_ezh3.Buttons.Main.RSTToggle = @[Common.ALL.VPR] +Entities.gmod_subway_ezh3.Buttons.Main.R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_ezh3.Buttons.Main.!AnnPlay = @[Common.ALL.AnnPlay] + +Entities.gmod_subway_ezh3.Buttons.HelperPanel.V6Set = @[Common.ALL.KDL] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.V3Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_ezh3.Buttons.HelperPanel.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_ezh3.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIEnableToggle = @[Common.RRI.RRIEnableToggle] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIRewindSet2 = @[Common.RRI.RRIRewindSet2] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIRewindSet0 = @[Common.RRI.RRIRewindSet0] +Entities.gmod_subway_ezh3.Buttons.RRI.RRIAmplifierToggle = @[Common.RRI.RRIAmplifierToggle] +Entities.gmod_subway_ezh3.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] + +Entities.gmod_subway_ezh3.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] +Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_ezh3.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_ezh3.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_ezh3.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_ezh3.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh3.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_ezh3.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_ezh3.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_ezh3.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_ezh3.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_ezh3.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_ezh3.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_ezh3.Buttons.Panel.!L04 = @[Common.ARS.04] +Entities.gmod_subway_ezh3.Buttons.Panel.!L0 = @[Common.ARS.0] +Entities.gmod_subway_ezh3.Buttons.Panel.!L40 = @[Common.ARS.40] +Entities.gmod_subway_ezh3.Buttons.Panel.!L60 = @[Common.ARS.60] +Entities.gmod_subway_ezh3.Buttons.Panel.!L70 = @[Common.ARS.70] +Entities.gmod_subway_ezh3.Buttons.Panel.!L80 = @[Common.ARS.80] + +Entities.gmod_subway_ezh3.Buttons.Panel.!LKT = @[Common.ARS.KT] +Entities.gmod_subway_ezh3.Buttons.Panel.!LSN = @[Common.ALL.SN] +Entities.gmod_subway_ezh3.Buttons.Panel.!LKVD = @[Common.ARS.VD] +Entities.gmod_subway_ezh3.Buttons.Panel.!LRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh3.Buttons.Panel.!LPU = @[Common.ALL.PU] +Entities.gmod_subway_ezh3.Buttons.Panel.!LSD = @[Common.703.SD] + +Entities.gmod_subway_ezh3.Buttons.Panel.!Speedometer = @[Common.ALL.Speedometer] +Entities.gmod_subway_ezh3.Buttons.Panel.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_ezh3.Buttons.Panel.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_ezh3.Buttons.Panel.!HighVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_ezh3.Buttons.Panel.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_ezh3.Buttons.Panel.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +#gmod_subway_em508t +Entities.gmod_subway_em508t.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_em508t.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_em508t.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_em508t.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_em508t.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_em508t.Buttons.VU14.VU14Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_em508t.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_em508t.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_em508t.Buttons.Main.KU12Set = @[Common.ALL.KDL] +Entities.gmod_subway_em508t.Buttons.Main.KU11Set = @[Common.703.KSD] +Entities.gmod_subway_em508t.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_em508t.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_em508t.Buttons.Main.V2Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_em508t.Buttons.Main.V1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_em508t.Buttons.Main.V4Set = @[Common.703.LOn] +Entities.gmod_subway_em508t.Buttons.Main.V5Set = @[Common.703.LOff] +Entities.gmod_subway_em508t.Buttons.Main.KU15Set = @[Common.ALL.RMK] +Entities.gmod_subway_em508t.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_em508t.Buttons.Main.V10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_em508t.Buttons.Main.!RedRP = @[Common.ALL.RRP] +Entities.gmod_subway_em508t.Buttons.Main.!GreenRP = @[Common.ALL.GRP] +Entities.gmod_subway_em508t.Buttons.Main.!SD = @[Common.703.SD] + +Entities.gmod_subway_em508t.Buttons.HelperPanel.V6Set = @[Common.ALL.KDL] +Entities.gmod_subway_em508t.Buttons.HelperPanel.V3Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_em508t.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_em508t.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_em508t.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_em508t.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_em508t.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_em508t.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_em508t.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_em508t.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_em508t.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_em508t.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_em508t.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_em508t.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_em508t.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_em508t.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +#Spawner: +Entities.gmod_subway_81-702.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-702.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-702.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-702.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-702.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_81-702.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-702.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-702.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] + +Entities.gmod_subway_81-703.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-703.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-703.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-703.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-703.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_81-703.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-703.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-703.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] + +Entities.gmod_subway_ezh.Spawner.TrainType.Name = @[Spawner.707.Type] +Entities.gmod_subway_ezh.Spawner.TrainType.1 = @[Spawner.707.Type1] +Entities.gmod_subway_ezh.Spawner.TrainType.2 = @[Spawner.707.Type2] +Entities.gmod_subway_ezh.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_ezh.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_ezh.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_ezh.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_ezh.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +Entities.gmod_subway_ezh.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_ezh.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_ezh.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_ezh.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_ezh.Spawner.EWagons.Name = @[Spawner.502.EWagons] + +Entities.gmod_subway_ezh3.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_ezh3.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_ezh3.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_ezh3.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_ezh3.Spawner.Announcer.1 = @[Spawner.710.RRI] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_ezh3.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/ru_717.lua b/lua/metrostroi_data/languages/ru_717.lua new file mode 100644 index 0000000..72a3dfb --- /dev/null +++ b/lua/metrostroi_data/languages/ru_717.lua @@ -0,0 +1,1221 @@ +return [[ +#81-717 + +[ru] +#Cameras: +Train.717.Breakers = ÐвтоматичеÑкие выключатели +Train.717.VB = Ð‘Ð°Ñ‚Ð°Ñ€ÐµÑ Ð¸ РЦ +Train.717.VBD = ВБД и УППС + +Train.717.VRD = ВРД +Train.717.SOSD = СОСД +Train.717.PUAV = ПУÐÐ’ +Train.717.PA = ПР+Train.717.PAScreen = Экран ПР+ +Train.714.Shunt = Маневровый пульт, кран +#Spawner +Spawner.717.Line2 = СоÑтав Ñ ÐœÐŸÐ› +Spawner.717.Line4 = СоÑтав Ñ ÐŸÐ‘Ð› +Spawner.717.Line5 = СоÑтав Ñ Ð¤ÐŸÐ› + +Spawner.717.Type = Тип ÑоÑтава +Spawner.717.BodyType = Тип кузова +Spawner.717.MVM = МВМ +Spawner.717.LVZ = ЛВЗ +Spawner.717.MaskType = Тип маÑки +Spawner.717.CranType = Тип крана машиниÑта +Spawner.717.LampType = Тип ламп +Spawner.717.Lamp1 = ЛПВ-02 +Spawner.717.Lamp2 = ЛЛВ-01 +Spawner.717.SeatType = Тип Ñидений +Spawner.717.ARS = Тип панели ÐРС +Spawner.717.RingType = Тип звонка +Spawner.717.BPSNType = Тип БПСР+ +#######Buttons########### +Train.Buttons.RZP = Сработала защита БПСР+ +#Common +Common.717.VBD = Выключатель блокировки дверей от ÐСÐП +Common.717.UPPS = Выключатель ÑиÑтемы УППС +Common.717.BPSN = Выключатель БПСР+Common.717.ARS13V = Проверка напрÑÐ¶ÐµÐ½Ð¸Ñ ÐРС 13Ð’ +Common.717.Radio13V = Проверка напрÑÐ¶ÐµÐ½Ð¸Ñ Ð Ð°Ð´Ð¸Ð¾ 13Ð’ +Common.717.LVD = ЛВД: Лампа 1 провода (Ñбор Ñхемы на ход) +Common.717.LHRK = ЛХРК: Лампа 2 провода (вращение РК) +Common.717.LST = ЛСТ: Лампа 6 провода (Ñбор Ñхемы на тормоз) +Common.717.KVC = ЛКВЦ: Лампа контактора вÑпомогательных цепей (отÑутÑвие выÑокого напрÑÐ¶ÐµÐ½Ð¸Ñ Ð½Ð° вагоне) +Common.717.GLEB = ГЛЕБ: Лампа Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ +Common.717.KVP = ЛКВП: Лампа ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ (БПСÐ) +Common.717.LSP = ЛСП: Лампа Ñигнализации пожара +Common.717.LEKK = ЛЭКК: Лампа Ñлектроконтактной коробки +Common.717.LPU = ЛПУ: Лампа пониженной уÑтавки РУТ +Common.717.OtklBV = Отключение быÑтродейÑтвующего Ð²Ñ‹ÐºÐ»ÑŽÑ‡Ð°Ñ‚ÐµÐ»Ñ +Common.717.OtklBVK = Крышка Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð±Ñ‹ÑтродейÑтвующего Ð²Ñ‹ÐºÐ»ÑŽÑ‡Ð°Ñ‚ÐµÐ»Ñ +Common.717.ConverterProtection = Кнопка возврата защиты Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ +Common.717.VZ1 = ВЗ1: Кнопка Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð²ÐµÐ½Ñ‚Ð¸Ð»Ñ Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ â„–1 +Common.717.VL1 = Лампа ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð½ÐµÐ²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð²ÐµÐ½Ñ‚Ð¸Ð»Ñции +Common.717.V13 = Тумблер Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð°Ð²Ð°Ñ€Ð¸Ð¹Ð½Ð¾Ð¹ вентилÑции +Common.717.V11 = Тумблер Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ I группы вентилÑции +Common.717.V12 = Тумблер Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ II группы вентилÑции +Common.717.RZPL = РЗП: Сработка реле защиты Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ (защита БПСÐ) +Common.717.VPAOn = ВПÐ: Включение поездной аппаратуры +Common.717.VPAOff = ВПÐ: Отключение поездной аппаратуры +Common.717.VZD = ВЗД: Выключатель Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ + +Common.717.A53 = Ð53: Контактор вÑпомогательных цепей +Common.717.A56 = Ð56: ÐккумулÑÑ‚Ð¾Ñ€Ð½Ð°Ñ Ð±Ð°Ñ‚Ð°Ñ€ÐµÑ +Common.717.A54 = Ð54: Управление поездом +Common.717.A17 = Ð17: Двери, белые фары резервные +Common.717.A44 = Ð44: Контроллер резервного управлениÑ, мотор-компреÑÑор резервный, резервное питание ÐРС +Common.717.A39 = Ð39: ПуÑк вагона на резервном управлении +Common.717.A70 = Ð70: Ðвторежим РКТТ +Common.717.A14 = Ð14: Реле резервного пуÑка +Common.717.A74 = Ð74: ВоÑÑтановление защиты поезда +Common.717.A26 = Ð26: УÑилитель низких чаÑтот +Common.717.AR63 = ÐР63: РадиоÑÑ‚Ð°Ð½Ñ†Ð¸Ñ +Common.717.AS1 = ÐС1: Переговорное уÑтройÑтво, ÐСÐП +Common.717.A13 = Ð13: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ +Common.717.A21 = Ð21: Управление дверьми +Common.717.A31 = Ð31: Открытие левых дверей +Common.717.A32 = Ð32: Открытие правых дверей +Common.717.A16 = Ð16: Закрытие дверей +Common.717.A12 = Ð12: Резервное закрытие дверей + +Common.717.A24 = Ð24: Контроль зарÑда +Common.717.A49 = Ð49: Ðварийное оÑвещение +Common.717.A27 = Ð27: Управление оÑвещением Ñалона, оÑвещение кабины, ÑÐ¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ‚Ð¾Ñ€Ð¼Ð¾Ð·Ð°, Ð·ÐµÐ»Ñ‘Ð½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° РП +Common.717.A72 = Ð72: Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð²ÐµÐ½Ñ‚Ð¸Ð»Ñ Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ â„–1 +Common.717.A50 = Ð50: Контактор оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ +Common.717.AV3 = ÐÐ’3: Резервное питание вентилÑции +Common.717.AV3S = ÐÐ’3: Резервное питание радиоÑтанции +Common.717.AV2 = ÐÐ’2: ОÑновное питание вентилÑции +Common.717.AV4 = ÐÐ’4: Управление I группой вентилÑции +Common.717.AV5 = ÐÐ’5: Управление II группой вентилÑции +Common.717.AV6 = ÐÐ’6: Управление резервной группой вентилÑции +Common.717.AV1 = ÐÐ’1: Управление вентилÑцией, ÑÐ¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð²ÐµÐ½Ñ‚Ð¸Ð»Ñции, вентилÑÑ†Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹ +Common.717.A29 = Ð29: Общее питание белых фар +Common.717.A46 = Ð46: Слабый Ñвет фар (1 группа) +Common.717.A47 = Ð47: УÑиленный Ñвет фар (2 группа) +Common.717.A71 = Ð71: Питание РВ-3 от контроллера и ÐРС +Common.717.A7 = Ð7: ÐŸÑ€Ð°Ð²Ð°Ñ ÐºÑ€Ð°ÑÐ½Ð°Ñ Ñ„Ð°Ñ€Ð° +Common.717.A9 = Ð9: Ð›ÐµÐ²Ð°Ñ ÐºÑ€Ð°ÑÐ½Ð°Ñ Ñ„Ð°Ñ€Ð° + +Common.717.A84 = ВУ: Выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ +Common.717.A8 = Ð8: Вентиль Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ â„–2 +Common.717.A52 = Ð52: Вентиль Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¾Ñ‚ педали безопаÑноÑти +Common.717.A19 = Ð19: Питание РВ-3 вагона +Common.717.A48 = Ð48: Педаль безопаÑноÑти, РПБ, оÑновное питание ÐРС +Common.717.A10 = Ð10: Управление мотор-копреÑÑором +Common.717.A22 = Ð22: Контактор мотор-компреÑÑора +Common.717.A30 = Ð30: Питание ÑÐµÑ€Ð²Ð¾Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»Ñ Ñ€ÐµÐ¾Ñтатного контроллера (СДРК) +Common.717.A1 = Ð1: Ход +Common.717.A2 = Ð2: Управление реоÑтатным контроллером +Common.717.A3 = Ð3: Ход 3 +Common.717.A4 = Ð4: Ход назад +Common.717.A5 = Ð5: Ход вперёд +Common.717.A6 = Ð6: Тормоз +Common.717.A18 = Ð18: ВоÑÑтановление защиты +Common.717.A73 = Ð73: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½ÐµÐ¸ÑправноÑти +Common.717.A20 = Ð20: ЛК-2, ЛК-5 +Common.717.A25 = Ð25: Ручное торможение (байпаÑ) + +Common.717.A11 = Ð11: ОÑвещение отÑека и кабины +Common.717.A37 = Ð37: Возврат реле защиты Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ +Common.717.A45 = Ð45: Управление БПСР+Common.717.A38 = Ð38: Ð¡Ð¸Ð³Ð½Ð°Ð»ÑŒÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° неиÑправноÑти Ñхемы вагона +Common.717.A51 = Ð51: Контакторы КПП и КВП +Common.717.A65 = Ð65: Вторичный преобразователь БПСР+Common.717.A66 = Ð66: Выключение БВ +Common.717.A42 = Ð42: 75 вольт ÐРС +Common.717.A43 = Ð43: 12 вольт ÐРС +Common.717.A432 = Ð43: Управление ЭПК +Common.717.A41 = Ð41: Вентиль Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ â„–2 от ÐРС +Common.717.A40 = Ð40: Лампа Ñигнализации Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ +Common.717.A75 = Ð75: Включение Ð¾Ñ‚Ð¾Ð¿Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹ +Common.717.A76 = Ð76: ÐŸÐ¾Ð¶Ð°Ñ€Ð½Ð°Ñ ÑÐ¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ (ÐСОТП) +Common.717.A60 = Ð60: Лампа Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹ +Common.717.A58 = Ð58: КÐÐ¥-1 +Common.717.A57 = Ð57: Лампа хода реоÑтатного контроллера +Common.717.A59 = Ð59: КÐÐ¥-2 +Common.717.A28 = Ð28: Питание блока ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‚Ð¸Ñ€Ð¸Ñторным регулÑтором +Common.717.A55 = Ð55: Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ…Ð¾Ð´Ð° РК +Common.717.A68 = Ð68: Управление токоприёмниками +Common.717.A80 = Ð80: Включение БВ +Common.717.A81 = Ð81: Управление БВ + +Common.717.A58PU = Ð58: Питание ПУÐÐ’ +Common.717.A59PU = Ð59: Контроль ПУÐÐ’ +Common.717.A61PU = Ð61: Контроль реверÑивной рукоÑтки ПУÐÐ’ +Common.717.A58PA = Ð58: Питание ПР+Common.717.A59PA = Ð59: @[Common.ALL.Unsused1] +Common.717.A61PA = Ð61: Контроль реверÑивной рукоÑтки ПР+ +Common.717.A78 = Ð78: Управление торцевыми дверÑми +Common.717.ABK = Ð-ВК: Управление кондиционером кабины + +Common.717.A81 = Ð81: Управление БВ +Common.717.A23 = Ð23: ПуÑк мотор-компреÑÑора +Common.717.A15 = Ð15: Ðварийное оÑвещение +Common.717.AIS = ÐИС: Ðвтомат Ð¸Ð·Ð¼ÐµÑ€Ð¸Ñ‚ÐµÐ»Ñ ÑкороÑти + +Common.717.RC2 = РЦ-2: Разъединитель цепей ÑиÑтемы Ð°Ð²Ñ‚Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ +Common.717.VAU = Ð’ÐУ: Выключатель ÑиÑтемы Ð°Ð²Ñ‚Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ + +Common.717.LampDV = ДВ: ÐеиÑправноÑть датчика Ð²Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ +Common.717.ARSL20 = Ограничение ÑкороÑти в 20 км\ч +Common.717.ARSL40 = Ограничение ÑкороÑти в 40 км\ч +Common.717.ARSL60 = Ограничение ÑкороÑти в 60 км\ч +Common.717.ARSL70 = Ограничение ÑкороÑти в 70 км\ч +Common.717.ARSL80 = Ограничение ÑкороÑти в 80 км\ч + +Common.PUAV.K16 = ЛК16: Лампа Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ñ Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ñ Ð½Ð° 16 проводе (закрытие дверей) +Common.PUAV.OS = ЛОС: Лампа режима Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ ÑкороÑти ÑиÑтемы ПУÐÐ’ +Common.PUAV.AVT = ЛÐВТ: Лампа режима Ð°Ð²Ñ‚Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÑиÑтемы ПУÐÐ’ +Common.PUAV.RS = ЛРС: Лампа режима Ñ€ÐµÐ³ÑƒÐ»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑкороÑти ÑиÑтемы ПУÐÐ’ +Common.PUAV.KI1 = ЛКИ1: Лампа индикации ошибки 1 полукомплекта ПУÐÐ’ +Common.PUAV.KI2 = ЛКИ2: Лампа индикации ошибки 2 полукомплекта ПУÐÐ’ +Common.717.KH = КХ3: Кнопка Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° Ход 3 от ÑиÑтемы Ð°Ð²Ñ‚Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ +Common.717.KSZD = КСЗД: Кнопка ÑоглаÑÐ¸Ñ Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ +Common.717.VAV = Ð’ÐÐ’: Выключатель Ð°Ð²Ñ‚Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ + +Common.717.PAM = ПÐ-М +Common.717.PAKSDM = ПÐ-КСД-М + +Common.PA.P = P +Common.PA.F = F +Common.PA.Up = Вверх +Common.PA.M = M +Common.PA.Left = Влево +Common.PA.Down = Вниз +Common.PA.Right = Вправо +Common.PA.Esc = Отмена +Common.PA.Enter = Ввод + +Common.714.Start = ПуÑк Ñ‚Ñговых двигателей +Common.714.RV = Переключатель Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ + +#gmod_subway_81-717 +Entities.gmod_subway_81-717_mvm.Buttons.Battery_C.1:UOSToggle = @[Common.ALL.UOS] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_R.2:UOSToggle = @[Common.ALL.UOS] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_C.1:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_R.2:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_C.1:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_mvm.Buttons.Battery_R.2:RC1Toggle = @[Common.ALL.RC1] + +Entities.gmod_subway_81-717_mvm.Buttons.VBD_C.1:VBDToggle = @[Common.717.VBD] +Entities.gmod_subway_81-717_mvm.Buttons.VBD_R.2:VBDToggle = @[Common.717.VBD] +Entities.gmod_subway_81-717_mvm.Buttons.VBD_C.1:UPPS_OnToggle = @[Common.717.UPPS] +Entities.gmod_subway_81-717_mvm.Buttons.VBD_R.2:UPPS_OnToggle = @[Common.717.UPPS] + +Entities.gmod_subway_81-717_mvm.Buttons.Block1.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.RezMKSet = @[Common.ALL.RMK] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.ARS13Set = @[Common.717.ARS13V] +Entities.gmod_subway_81-717_mvm.Buttons.Block1.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARSOch = @[Common.ARS.04] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLSD1 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLSD2 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLHRK = @[Common.717.LHRK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampRP = @[Common.ALL.RP] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLSN = @[Common.ALL.SN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLN = @[Common.ARS.LN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLKVC = @[Common.717.KVC] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLRS = @[Common.ARS.RS] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLVD = @[Common.717.LVD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLST = @[Common.717.LST] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_1.!LampLEKK = @[Common.717.LEKK] + +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARSOch = @[Common.ARS.04] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLSD1 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLSD2 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLVD = @[Common.717.LVD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLHRK = @[Common.717.LHRK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLST = @[Common.717.LST] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampRP = @[Common.ALL.RP] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLSN = @[Common.ALL.SN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLKVC = @[Common.717.KVC] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLEKK = @[Common.717.GLEB] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLN = @[Common.ARS.LN] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_2.!LampLRS = @[Common.ARS.RS] + +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!Speedometer = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LSD = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LOch = @[Common.ARS.0]\n@[Common.ARS.04] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LN = @[Common.ARS.LN]\n@[Common.ARS.40] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!60 = @[Common.ARS.60]\n@[Common.ARS.80] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!70 = @[Common.ARS.70]\n@[Common.717.LHRK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LEKK = @[Common.717.LEKK] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LPU = @[Common.717.LPU] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LRP = @[Common.ALL.RRP] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LKVC = @[Common.717.KVC] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LVD = @[Common.717.LVD] +Entities.gmod_subway_81-717_mvm.Buttons.Block2_3.!LST = @[Common.717.LST] + +Entities.gmod_subway_81-717_mvm.Buttons.Block3.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-717_mvm.Buttons.Block3.!BCPressure = @[Common.ALL.BCPressure] + +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_81-717_mvm.Buttons.Block4.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] + +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_UNchToggle = @[Common.ALL.UNCh] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_ZSToggle = @[Common.ALL.ES] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_RadioToggle = @[Common.ALL.R_Radio] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_Program1Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.1:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.1:KVTRSet = @[Common.ARS.KVTR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.2:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.2:KVTRSet = @[Common.ARS.KVTR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!L1Light = @[Common.717.VL1] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.V13Toggle = @[Common.717.V13] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VUD1Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!GreenRPLight = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!AVULight = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!LKVPLight = @[Common.717.KVP] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.!SPLight = @[Common.717.LSP] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OtklBVSet = @[Common.717.OtklBV] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OtklBVKToggle = @[Common.717.OtklBVK] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.V11Toggle = @[Common.717.V11] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.V12Toggle = @[Common.717.V12] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ARSRToggle = @[Common.ALL.ARSR] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.ALSFreqToggle = @[Common.ARS.Freq] @[Common.ARS.FreqU] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.L_3Toggle = @[Common.ALL.PanelLights] +Entities.gmod_subway_81-717_mvm.Buttons.Block5_6.VPToggle = @[Common.ARS.VP] + +Entities.gmod_subway_81-717_mvm.Buttons.Block7.L_4Toggle = @[Common.ALL.VF] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.VADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KRPSet = @[Common.ALL.KRP] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KAHSet = @[Common.ALL.KAH] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KAHKToggle = @[Common.ALL.KAHK] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.!PNT = @[Common.ALL.BrT] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-717_mvm.Buttons.Block7.!PNW = @[Common.ALL.BrW] + +Entities.gmod_subway_81-717_mvm.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-717_mvm.Buttons.HVMeters.!HighVoltage = @[Common.ALL.HighVoltage] + +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_C.R_Program2HSet = @[Common.ALL.Program2] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:R_Program1HSet = @[Common.ALL.Program1] +Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel_R.1:R_Program2HSet = @[Common.ALL.Program2] + +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_C.SAB1Toggle = @[Common.BZOS.On] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_C.!VH1 = @[Common.BZOS.VH1] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_C.!VH2 = @[Common.BZOS.VH2] + +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_R.1:SAB1Toggle = @[Common.BZOS.On] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_R.1:!VH1 = @[Common.BZOS.VH1] +Entities.gmod_subway_81-717_mvm.Buttons.BZOS_R.1:!VH2 = @[Common.BZOS.VH2] + + +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_C.PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_C.PVK+ = @[Common.CabVent.PVK+] +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_R.1:PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-717_mvm.Buttons.CabVent_R.1:PVK+ = @[Common.CabVent.PVK+] + +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA23 = @[Common.IGLA.Button23] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA3Set = @[Common.IGLA.Button3] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.IGLA4Set = @[Common.IGLA.Button4] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.!IGLAFire = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_C.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA23 = @[Common.IGLA.Button23] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA3Set = @[Common.IGLA.Button3] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:IGLA4Set = @[Common.IGLA.Button4] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:!IGLAFire = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons_R.1:!IGLAErr = @[Common.IGLA.IGLAErr] + +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A26Toggle = @[Common.717.A26] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AR63Toggle = @[Common.717.AR63] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AS1Toggle = @[Common.717.AS1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV3Toggle = @[Common.717.AV3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV2Toggle = @[Common.717.AV2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV4Toggle = @[Common.717.AV4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV5Toggle = @[Common.717.AV5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV6Toggle = @[Common.717.AV6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A9Toggle = @[Common.717.A9] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A43Toggle = @[Common.717.A43] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A76Toggle = @[Common.717.A76] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A60Toggle = @[Common.717.A60] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A58Toggle = @[Common.717.A58] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A59Toggle = @[Common.717.A59] +Entities.gmod_subway_81-717_mvm.Buttons.AV_C.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A26Toggle = @[Common.717.A26] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:AR63Toggle = @[Common.717.AR63] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:AS1Toggle = @[Common.717.AS1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A76Toggle = @[Common.717.A76] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A43Toggle = @[Common.717.A43] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_mvm.Buttons.AV_R.2:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A28Toggle = @[Common.717.A28] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AISToggle = @[Common.717.AIS] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A80Toggle = @[Common.717.A80] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV2Toggle = @[Common.717.AV2] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV3Toggle = @[Common.717.AV3] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV4Toggle = @[Common.717.AV4] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV5Toggle = @[Common.717.AV5] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.AV6Toggle = @[Common.717.AV6] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A81Toggle = @[Common.717.A81] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A9Toggle = @[Common.717.A9] +Entities.gmod_subway_81-717_mvm.Buttons.AV_S.A68Toggle = @[Common.717.A68] + +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-717_mvm.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-717_mvm.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-717_mvm.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle = @[Common.ALL.DriverValveDisconnect] +Entities.gmod_subway_81-717_mvm.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-717_mvm.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-717_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] + +Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_mvm.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-717_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_mvm.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-717_mvm.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-717_mvm.Buttons.OtsekDoor1.OtsekDoor1 = @[Common.ALL.OtsekDoor1] +Entities.gmod_subway_81-717_mvm.Buttons.OtsekDoor2.OtsekDoor2 = @[Common.ALL.OtsekDoor2] +Entities.gmod_subway_81-717_mvm.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_81-717_mvm.Buttons.EPVDisconnect.EPKToggle = @[Common.ALL.EPV] +Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] + + +#gmod_subway_81-717_lvz +#Buttons: +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1P:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2P:RC1Toggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:RC2Toggle = @[Common.717.RC2] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:RC2Toggle = @[Common.717.RC2] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_C.1:VAUToggle = @[Common.717.VAU] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:VAUToggle = @[Common.717.VAU] +Entities.gmod_subway_81-717_lvz.Buttons.Battery_R.2:VRDToggle = @[Common.ARS.VRD] + +Entities.gmod_subway_81-717_lvz.Buttons.VRD_C.1:VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-717_lvz.Buttons.SOSD_C.1:VSOSDToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-717_lvz.Buttons.SOSD_R.2:VSOSDToggle = @[Common.ALL.VSOSD] + +Entities.gmod_subway_81-717_lvz.Buttons.Block1.VMKToggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.ARS13Set = @[Common.717.ARS13V] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.Radio13Set = @[Common.717.Radio13V] +Entities.gmod_subway_81-717_lvz.Buttons.Block1.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSOch = @[Common.ARS.N4] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLSD1 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLSD2 = @[Common.ALL.LSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLVD = @[Common.ALL.L1w] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLHRK = @[Common.ALL.L2w] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLST = @[Common.ALL.L6w] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLRD = @[Common.ARS.LRD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampRP = @[Common.ALL.RP] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLSN = @[Common.ALL.SN] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLKVD = @[Common.ARS.VD] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampLKT = @[Common.ARS.KT] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!LampDV = @[Common.717.LampDV] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!SpeedFact1 = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!SpeedFact2 = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL20 = @[Common.717.ARSL20] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL40 = @[Common.717.ARSL40] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL60 = @[Common.717.ARSL60] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL70 = @[Common.717.ARSL70] +Entities.gmod_subway_81-717_lvz.Buttons.Block2.!ARSL80 = @[Common.717.ARSL80] + +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!NMPressureLow2 = @[Commom.NMnUAVA.NMPressureLow] +Entities.gmod_subway_81-717_lvz.Buttons.Block3.!UAVATriggered2 = @[Commom.NMnUAVA.UAVATriggered] + +Entities.gmod_subway_81-717_lvz.Buttons.USS1.!NMPressureLow = @[Commom.NMnUAVA.NMPressureLow] +Entities.gmod_subway_81-717_lvz.Buttons.USS1.!UAVATriggered = @[Commom.NMnUAVA.UAVATriggered] + +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OK16 = @[Common.PUAV.K16] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OLRS = @[Common.PUAV.RS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OKI1 = @[Common.PUAV.KI1] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OKI2 = @[Common.PUAV.KI2] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OOS = @[Common.PUAV.OS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.!OAVT = @[Common.PUAV.AVT] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:KHSet = @[Common.717.KH] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:KSZDSet = @[Common.717.KSZD] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:VAVToggle = @[Common.717.VAV] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVO.1:VZPToggle = @[Common.ALL.VZP] + +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!K16 = @[Common.PUAV.K16] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!OS = @[Common.PUAV.OS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!AVT = @[Common.PUAV.AVT] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!LRS = @[Common.PUAV.RS] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!KI1 = @[Common.PUAV.KI1] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!KI2 = @[Common.PUAV.KI2] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARSOch = @[Common.ARS.N4] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS0 = @[Common.ARS.0] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS40 = @[Common.ARS.40] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS60 = @[Common.ARS.60] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS70 = @[Common.ARS.70] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS80 = @[Common.ARS.80] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.KHSet = @[Common.717.KH] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.KSZDSet = @[Common.717.KSZD] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.VAVToggle = @[Common.717.VAV] +Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.VZPToggle = @[Common.ALL.VZP] + +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMPSet = @[Common.717.PAM]: @[Common.PA.P] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMFSet = @[Common.717.PAM]: @[Common.PA.F] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMUpSet = @[Common.717.PAM]: @[Common.PA.Up] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMMSet = @[Common.717.PAM]: @[Common.PA.M] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMLeftSet = @[Common.717.PAM]: @[Common.PA.Left] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMDownSet = @[Common.717.PAM]: @[Common.PA.Down] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMRightSet = @[Common.717.PAM]: @[Common.PA.Right] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM1Set = @[Common.717.PAM]: 1 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM2Set = @[Common.717.PAM]: 2 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM3Set = @[Common.717.PAM]: 3 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM4Set = @[Common.717.PAM]: 4 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM5Set = @[Common.717.PAM]: 5 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM6Set = @[Common.717.PAM]: 6 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM7Set = @[Common.717.PAM]: 7 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM8Set = @[Common.717.PAM]: 8 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM9Set = @[Common.717.PAM]: 9 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMEscSet = @[Common.717.PAM]: @[Common.PA.Esc] +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAM0Set = @[Common.717.PAM]: 0 +Entities.gmod_subway_81-717_lvz.Buttons.PAM1.PAMEnterSet = @[Common.717.PAM]: @[Common.PA.Enter] +Entities.gmod_subway_81-717_lvz.Buttons.PAM.2:KSZDSet = @[Common.717.KSZD] +Entities.gmod_subway_81-717_lvz.Buttons.PAM.2:VZPToggle = @[Common.ALL.VZP] + +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:R_UPOToggle = @[Common.ALL.UPO] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!OhSigLamp1 = @[Common.BZOS.Engaged] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:VUD1Toggle = @[Common.717.VZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!GreenRPLight1 = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!AVULight1 = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!LKVPLight1 = @[Common.717.KVP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!SPLight1 = @[Common.717.LSP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:L_3Toggle = @[Common.ALL.PanelLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.1:OhrSigToggle = @[Common.BZOS.On] + +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:R_UPOToggle = @[Common.ALL.UPO] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!OhSigLamp2 = @[Common.BZOS.Engaged] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VUD1Toggle = @[Common.717.VZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!KDLLight2 = @[Common.ALL.KDLL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!KDLRLight2 = @[Common.ALL.KDLL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!GreenRPLight2 = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!RZPLight2 = @[Common.717.RZPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!LKVPLight2 = @[Common.717.KVP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:OhrSigToggle = @[Common.BZOS.On] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VPAOnSet = @[Common.717.VPAOn] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:VPAOffSet = @[Common.717.VPAOff] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:OVTToggle = @[Common.ALL.OVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.!AVULight2 = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_kvr.2:L_3Toggle = @[Common.ALL.PanelLights] + +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old.!RZPLight1 = @[Common.717.RZPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:R_VPRToggle = @[Common.ALL.VPR] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:R_GToggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:R_UPOToggle = @[Common.ALL.UPO] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KVTSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:VZ1Set = @[Common.717.VZ1] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!SPLight3 = @[Common.717.LSP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!AVULight3 = @[Common.ALL.LAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:VUD1Toggle = @[Common.717.VZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLRSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KDLRKToggle = @[Common.ALL.KDLK] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KRZDSet = @[Common.ALL.KRZD] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!GreenRPLight3 = @[Common.ALL.GRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!RZPLight3 = @[Common.717.RZPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.!LKVPLight3 = @[Common.717.KVP] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:OtklAVUToggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:KSNSet = @[Common.ALL.KSN] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.1:VPAOnSet = @[Common.717.VPAOn] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.1:VPAOffSet = @[Common.717.VPAOff] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:OVTToggle = @[Common.ALL.VOVT] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:L_2Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-717_lvz.Buttons.Block5_6_old_paksd.3:L_3Toggle = @[Common.ALL.PanelLights] + +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:L_4Toggle = @[Common.ALL.VF] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:VADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:KRPSet = @[Common.ALL.KRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:RezMKSet = @[Common.ALL.RMK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.1:KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_old.!1:PNT = @[Common.ALL.BrT] + +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:L_4Toggle = @[Common.ALL.VF] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:VUSToggle = @[Common.ALL.VUS] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:VADToggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:VAHToggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:KRPSet = @[Common.ALL.KRP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:RezMKSet = @[Common.ALL.RMK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.!KDPLight2 = @[Common.ALL.KDPL] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:KDPSet = @[Common.ALL.KDP] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.2:KDPKToggle = @[Common.ALL.KDPK] +Entities.gmod_subway_81-717_lvz.Buttons.Block7_kvr.!2:PNT = @[Common.ALL.BrT] + +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_C.VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_C.VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_C.VOPDSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_R.1:VUD2Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_R.1:VDLSet = @[Common.ALL.KDL] +Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel_R.1:VOPDSet = @[Common.ALL.KDPH] + +Entities.gmod_subway_81-717_lvz.Buttons.CabVent_C.PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-717_lvz.Buttons.CabVent_C.PVK+ = @[Common.CabVent.PVK+] + +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_N.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_N.!HighVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_O.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_81-717_lvz.Buttons.HVMeters_O.!HighVoltage = @[Common.ALL.HighVoltage] + +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A26Toggle = @[Common.717.A26] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AR63Toggle = @[Common.717.AR63] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AS1Toggle = @[Common.717.AS1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AISToggle = @[Common.717.AIS] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AV3Toggle = @[Common.717.AV3S] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A58Toggle = @[Common.717.A58PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A59Toggle = @[Common.717.A59PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A61Toggle = @[Common.717.A61PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:P:A58Toggle = @[Common.717.A58PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:P:A59Toggle = @[Common.717.A59PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:P:A61Toggle = @[Common.717.A61PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A9Toggle = @[Common.717.A9] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A06Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A43Toggle = @[Common.717.A432] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A76Toggle = @[Common.717.A76] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A60Toggle = @[Common.717.A60] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-717_lvz.Buttons.AV_C.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A11Toggle = @[Common.717.A11] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A17Toggle = @[Common.717.A17] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A44Toggle = @[Common.717.A44] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A58Toggle = @[Common.717.A58PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A59Toggle = @[Common.717.A59PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A61Toggle = @[Common.717.A61PU] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.P:A58Toggle = @[Common.717.A58PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.P:A59Toggle = @[Common.717.A59PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.P:A61Toggle = @[Common.717.A61PA] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A21Toggle = @[Common.717.A21] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A84Toggle = @[Common.717.A84] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A78Toggle = @[Common.717.A78]@[Common.ALL.Unsused2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A48Toggle = @[Common.717.A48] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.ABKToggle = @[Common.717.ABK]@[Common.ALL.Unsused2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A29Toggle = @[Common.717.A29] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A46Toggle = @[Common.717.A46] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A47Toggle = @[Common.717.A47] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A43Toggle = @[Common.717.A432] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A42Toggle = @[Common.717.A42] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A74Toggle = @[Common.717.A74] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A73Toggle = @[Common.717.A73] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A71Toggle = @[Common.717.A71] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A41Toggle = @[Common.717.A41] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A75Toggle = @[Common.717.A75] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-717_lvz.Buttons.AV_R.A65Toggle = @[Common.717.A65] + +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A28Toggle = @[Common.717.A28] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A18Toggle = @[Common.717.A18] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A40Toggle = @[Common.717.A40] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.AISToggle = @[Common.717.AIS] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.AV3Toggle = @[Common.717.AV3S] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.AV1Toggle = @[Common.717.AV1] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A57Toggle = @[Common.717.A57] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A60Toggle = @[Common.717.A60] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A7Toggle = @[Common.717.A7] +Entities.gmod_subway_81-717_lvz.Buttons.AV_S.A9Toggle = @[Common.717.A9] + +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber3+ = @[Common.ALL.RouteNumber3+] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-717_lvz.Buttons.Route.RouteNumber3- = @[Common.ALL.RouteNumber3-] + +Entities.gmod_subway_81-717_lvz.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle = @[Common.ALL.DriverValveDisconnect] +Entities.gmod_subway_81-717_lvz.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-717_lvz.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-717_lvz.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-717_lvz.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-717_lvz.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] + +Entities.gmod_subway_81-717_lvz.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-717_lvz.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-717_lvz.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-717_lvz.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_lvz.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-717_lvz.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-717_lvz.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-717_lvz.Buttons.OtsekDoor1.OtsekDoor1 = @[Common.ALL.OtsekDoor1] +Entities.gmod_subway_81-717_lvz.Buttons.OtsekDoor2.OtsekDoor2 = @[Common.ALL.OtsekDoor2] +Entities.gmod_subway_81-717_lvz.Buttons.EPKDisconnect.EPKToggle = @[Common.ALL.EPK] +Entities.gmod_subway_81-717_lvz.Buttons.EPVDisconnect.EPKToggle = @[Common.ALL.EPV] +Entities.gmod_subway_81-717_lvz.Buttons.ParkingBrake.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] + +#gmod_subway_81-714_mvm +Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-714_mvm.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-714_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-714_mvm.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-714_mvm.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-714_mvm.Buttons.couch_cap_o.CouchCap = @[Common.ALL.CouchCap] +Entities.gmod_subway_81-714_mvm.Buttons.couch_cap.CouchCap = @[Common.ALL.CouchCap] + +Entities.gmod_subway_81-714_mvm.Buttons.Battery.VBToggle = @[Common.ALL.VB] + +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV2Toggle = @[Common.717.AV2] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV3Toggle = @[Common.717.AV3] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV4Toggle = @[Common.717.AV4] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV5Toggle = @[Common.717.AV5] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A81Toggle = @[Common.717.A81] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:AV6Toggle = @[Common.717.AV6] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A80Toggle = @[Common.717.A80] +Entities.gmod_subway_81-714_mvm.Buttons.AV_T.1:A18Toggle = @[Common.717.A18] + +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A23Toggle = @[Common.717.A23] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-714_mvm.Buttons.AV_S.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-714_mvm.Buttons.VU.A84Toggle = @[Common.ALL.VU] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.!RZPLight = @[Common.717.RZPL] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.OtklBVSet = @[Common.717.OtklBV] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.StartSet = @[Common.714.Start] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.RV- = @[Common.714.RV] @[Common.ALL.CCW] +Entities.gmod_subway_81-714_mvm.Buttons.Shunt.RV+ = @[Common.714.RV] @[Common.ALL.CW] +Entities.gmod_subway_81-714_mvm.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-714_mvm.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-714_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] + +Entities.gmod_subway_81-714_mvm.Buttons.Voltages.!BatteryVoltage = @[Common.ALL.BatteryVoltage] +Entities.gmod_subway_81-714_mvm.Buttons.Voltages.!BatteryCurrent = @[Common.ALL.BatteryCurrent] +Entities.gmod_subway_81-714_mvm.Buttons.Pressures.!BCPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-714_mvm.Buttons.Pressures.!BLTLPressure = @[Common.ALL.BCPressure] + +#gmod_subway_81-714_lvz +Entities.gmod_subway_81-714_lvz.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-714_lvz.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-714_lvz.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-714_lvz.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-714_lvz.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-714_lvz.Buttons.couch_cap_o.CouchCap = @[Common.ALL.CouchCap] +Entities.gmod_subway_81-714_lvz.Buttons.couch_cap.CouchCap = @[Common.ALL.CouchCap] + +Entities.gmod_subway_81-714_lvz.Buttons.Battery.VBToggle = @[Common.ALL.VB] + +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A70Toggle = @[Common.717.A70] +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A81Toggle = @[Common.717.A81] +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A80Toggle = @[Common.717.A80] +Entities.gmod_subway_81-714_lvz.Buttons.AV_T.1:A18Toggle = @[Common.717.A18] + +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A53Toggle = @[Common.717.A53] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A56Toggle = @[Common.717.A56] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A54Toggle = @[Common.717.A54] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A24Toggle = @[Common.717.A24] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A39Toggle = @[Common.717.A39] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A23Toggle = @[Common.717.A23] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A14Toggle = @[Common.717.A14] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A13Toggle = @[Common.717.A13] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A31Toggle = @[Common.717.A31] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A32Toggle = @[Common.717.A32] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A16Toggle = @[Common.717.A16] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A12Toggle = @[Common.717.A12] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A49Toggle = @[Common.717.A49] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A15Toggle = @[Common.717.A15] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A27Toggle = @[Common.717.A27] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A50Toggle = @[Common.717.A50] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A8Toggle = @[Common.717.A8] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A52Toggle = @[Common.717.A52] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A19Toggle = @[Common.717.A19] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A10Toggle = @[Common.717.A10] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A22Toggle = @[Common.717.A22] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A30Toggle = @[Common.717.A30] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A1Toggle = @[Common.717.A1] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A2Toggle = @[Common.717.A2] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A3Toggle = @[Common.717.A3] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A4Toggle = @[Common.717.A4] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A5Toggle = @[Common.717.A5] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A6Toggle = @[Common.717.A6] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A72Toggle = @[Common.717.A72] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A38Toggle = @[Common.717.A38] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A20Toggle = @[Common.717.A20] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A25Toggle = @[Common.717.A25] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A37Toggle = @[Common.717.A37] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A55Toggle = @[Common.717.A55] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A45Toggle = @[Common.717.A45] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A66Toggle = @[Common.717.A66] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A51Toggle = @[Common.717.A51] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A65Toggle = @[Common.717.A65] +Entities.gmod_subway_81-714_lvz.Buttons.AV_S.1:A28Toggle = @[Common.717.A28] + +Entities.gmod_subway_81-714_lvz.Buttons.VU.A84Toggle = @[Common.ALL.VU] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.BPSNonToggle = @[Common.717.BPSN] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.!RZPLight = @[Common.717.RZPL] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.ConverterProtectionSet = @[Common.717.ConverterProtection] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.L_1Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.StartSet = @[Common.714.Start] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.VozvratRPSet = @[Common.ALL.VRPBV] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.RV- = @[Common.714.RV] @[Common.ALL.CCW] +Entities.gmod_subway_81-714_lvz.Buttons.Shunt.RV+ = @[Common.714.RV] @[Common.ALL.CW] +Entities.gmod_subway_81-714_lvz.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_81-714_lvz.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_81-714_lvz.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] + +Entities.gmod_subway_81-714_lvz.Buttons.Voltages.!BatteryVoltage = @[Common.ALL.BatteryVoltage] #NEW +Entities.gmod_subway_81-714_lvz.Buttons.Voltages.!BatteryCurrent = @[Common.ALL.BatteryCurrent] #NEW +Entities.gmod_subway_81-714_lvz.Buttons.Pressures.!BCPressure = @[Common.ALL.BLTLPressure] #NEW +Entities.gmod_subway_81-714_lvz.Buttons.Pressures.!BLTLPressure = @[Common.ALL.BCPressure] #NEW + +#Spawner: +Entities.gmod_subway_81-717_mvm.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-717_mvm.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-717_mvm.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] + + +Entities.gmod_subway_81-717_mvm_custom.Spawner.Type.Name = @[Spawner.717.Type] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BodyType.Name = @[Spawner.717.BodyType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BodyType.1 = @[Spawner.717.MVM] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BodyType.2 = @[Spawner.717.LVZ] +Entities.gmod_subway_81-717_mvm_custom.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-717_mvm_custom.Spawner.MaskType.Name = @[Spawner.717.MaskType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.Cran.Name = @[Spawner.717.CranType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.Name = @[Spawner.717.LampType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.2 = @[Spawner.717.Lamp1] +Entities.gmod_subway_81-717_mvm_custom.Spawner.LampType.3 = @[Spawner.717.Lamp2] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.Name = @[Spawner.717.SeatType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.2 = @[Common.Spawner.Old] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SeatType.3 = @[Common.Spawner.New] +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.Name = @[Spawner.717.ARS] +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.2 = @[Common.Spawner.Type] 1 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.3 = @[Common.Spawner.Type] 2 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.4 = @[Common.Spawner.Type] 3 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.5 = @[Common.Spawner.Type] 4 +Entities.gmod_subway_81-717_mvm_custom.Spawner.ARSType.6 = @[Common.Spawner.Type] 5 +Entities.gmod_subway_81-717_mvm_custom.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-717_mvm_custom.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-717_mvm_custom.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.Name = @[Spawner.717.RingType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.2 = @[Common.Spawner.Type] 1 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.3 = @[Common.Spawner.Type] 2 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.4 = @[Common.Spawner.Type] 3 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.5 = @[Common.Spawner.Type] 4 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.6 = @[Common.Spawner.Type] 5 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.7 = @[Common.Spawner.Type] 6 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.8 = @[Common.Spawner.Type] 7 +Entities.gmod_subway_81-717_mvm_custom.Spawner.RingType.9 = @[Common.Spawner.Type] 8 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.Name = @[Spawner.717.BPSNType] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.1 = @[Common.Spawner.Random] +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.2 = @[Common.Spawner.Type] 1 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.3 = @[Common.Spawner.Type] 2 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.4 = @[Common.Spawner.Type] 3 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.5 = @[Common.Spawner.Type] 4 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.6 = @[Common.Spawner.Type] 5 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.7 = @[Common.Spawner.Type] 6 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.8 = @[Common.Spawner.Type] 7 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.9 = @[Common.Spawner.Type] 8 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.10 = @[Common.Spawner.Type] 9 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.11 = @[Common.Spawner.Type] 10 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.12 = @[Common.Spawner.Type] 11 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.13 = @[Common.Spawner.Type] 12 +Entities.gmod_subway_81-717_mvm_custom.Spawner.BPSNType.14 = @[Common.Spawner.Type] 13 +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-717_mvm_custom.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] + +#Spawner: +Entities.gmod_subway_81-717_lvz.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-717_lvz.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-717_lvz.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-717_lvz.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-717_lvz.Spawner.Type.Name = @[Spawner.Common.EType] +Entities.gmod_subway_81-717_lvz.Spawner.Type.1 = @[Spawner.717.Line2] +Entities.gmod_subway_81-717_lvz.Spawner.Type.2 = @[Spawner.717.Line4] +Entities.gmod_subway_81-717_lvz.Spawner.Type.3 = @[Spawner.717.Line5] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-717_lvz.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] diff --git a/lua/metrostroi_data/languages/ru_718.lua b/lua/metrostroi_data/languages/ru_718.lua new file mode 100644 index 0000000..f850b13 --- /dev/null +++ b/lua/metrostroi_data/languages/ru_718.lua @@ -0,0 +1,709 @@ +return [[ +#81-718 + +[ru] + +#######Buttons########### +#Cameras +Train.718.BUP = БУП +Train.718.PPZ = ППЗ +Train.718.VPU = ВПУ + +Train.Buttons.LHalf = ÐŸÐ¾Ð½Ð¸Ð¶ÐµÐ½Ð½Ð°Ñ +Train.Buttons.LFull = ÐŸÐ¾Ð»Ð½Ð°Ñ +Train.Buttons.HL5 = ÐеÑбор Ñхемы +Train.Buttons.HL6 = Сработала защита или минимальный ток +Train.Buttons.HL7 = Сработала защита ББЭ +#Common +Common.718.SB4 = Проверка Ñбора Ñхемы +Common.718.SB5 = Передача ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (звонок) +Common.718.SB7K = Крышка хода маневрового +Common.718.SB7 = Ход маневровый +Common.718.SB12 = Включение блока автоматичеÑких выключателей +Common.718.SB13 = Отключение блока автоматичеÑких выключателей +Common.718.SB15 = Включение блока бортового ÑлектроÑÐ½Ð°Ð±Ð¶ÐµÐ½Ð¸Ñ +Common.718.SB16 = Отключение блока бортового ÑлектроÑÐ½Ð°Ð±Ð¶ÐµÐ½Ð¸Ñ + +Common.718.VTPR = Переключатель режима Ð¾Ñ‚Ð¶Ð°Ñ‚Ð¸Ñ Ñ‚Ð¾ÐºÐ¾Ð¿Ñ€Ð¸Ñ‘Ð¼Ð½Ð¸ÐºÐ¾Ð² +Common.718.RX1 = Резервный ход 1 +Common.718.KAH2 = КÐÐ¥: Кнопка аварийного хода Ð´Ð»Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð±ÐµÐ· ÐРС от резервного ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ +Common.718.RX2 = Резервный ход 2 + +Common.718.SPULightStrength = Увеличение ÑркоÑти Ñлементов Ñигнального табло + +Common.718.Heat = Включение Ð¾Ñ‚Ð¾Ð¿Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹ +Common.718.SBP22 = Проверка работоÑпоÑобноÑти Ñхемы (Ñбор Ñхемы) +Common.718.KDPR = Резервное открытие правых дверей +Common.718.KDLR = Резервное открытие левых дверей +Common.718.UOS = УОС: УÑтройÑтво Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ ÑкороÑти(езда без ЭПК\\ЭПВ) + +Common.718.KES = КЭС: Лампа Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ ÑкÑтренной ÑвÑзи +Common.718.CUV = ЦУВ: Лампа Ð½ÐµÐ²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¦Ð£Ð’ на вагоне +Common.718.AIP = ÐИП: Лампа аварийной индикации пожара (пожар в поезде) +Common.718.RIP = РИП: Работа индикации пожара +Common.718.VS1 = ВС1: Лампа выключенного ÑоÑтоÑÐ½Ð¸Ñ Ð²ÐµÐ½Ñ‚Ð¸Ð»Ñции 1 группы +Common.718.VS2 = ВС2: Лампа выключенного ÑоÑтоÑÐ½Ð¸Ñ Ð²ÐµÐ½Ñ‚Ð¸Ð»Ñции 2 группы + +#Autobreakers +Common.718.SF51 = SF51: ОÑновное питание ÐРС +Common.718.SF52 = SF52: Резервное питание ÐРС +Common.718.SF53 = SF53: Тормозные цепи ÐРС +Common.718.SF60 = SF60: 12Ð’ ÐРС +Common.718.SF61 = SF61: 50Ð’ ÐРС(ФММ1) +Common.718.SF77 = SF77: Ðварийный ход оÑновного ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ +Common.718.SF78 = SF78: Ðварийный ход резервного ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ +Common.718.SF40 = SF40: Вентиль â„–2 от ЗПТ +Common.718.SF41 = SF41: Фары +Common.718.SF8 = SF8: Управление дверьми +Common.718.SF11 = SF11: Управление вентилÑтором II группы +Common.718.SF10 = SF10: Управление вентилÑтором I группы +Common.718.SF7 = SF7: ББЭ, Мотор-компреÑÑор +Common.718.SF50 = SF50: СкороÑтемер +Common.718.SF76 = SF76: ÐŸÐ¾Ð¶Ð°Ñ€Ð½Ð°Ñ ÑÐ¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ +Common.718.SF73 = SF73: ГребнеÑмазыватель +Common.718.SF3 = SF3: Вагонное питание, ЦУВ +Common.718.SF71 = SF71: ЭкÑÑ‚Ñ€ÐµÐ½Ð½Ð°Ñ ÑвÑзь +Common.718.SF63 = SF63: РадиоÑÑ‚Ð°Ð½Ñ†Ð¸Ñ +Common.718.SF54 = SF54: Радиооповещение 50Ð +Common.718.SF65 = SF65: ВентилÑÑ†Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹ +Common.718.SF55 = SF55: СОТ-3 +Common.718.SF9 = SF9: Управление поездом резервное +Common.718.SF6 = SF6: Управление поездом оÑновное +Common.718.SF5 = SF5: Управление БКЦУ +Common.718.SF2 = SF2: Поездное питание +Common.718.SF4 = SF4: Питание БУВ, ПТТИ, БСКР+Common.718.SF27 = SF27: Питание БВР+Common.718.SF46 = SF46: Управление БВР+Common.718.SF12 = SF12: Включение ББЭ +Common.718.SF13 = SF13: Отключение ББЭ +Common.718.SF45 = SF45: Управление контактором ББЭ, оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ +Common.718.SF16 = SF16: Управление оÑвещением Ñалона +Common.718.SF44 = SF44: Питание оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ Ñалона +Common.718.SF43 = SF43: Ðварийное оÑвещение Ñалона +Common.718.SF14 = SF14: Питание контактора цепей ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ +Common.718.SF15 = SF15: Резервное питание контактора цепей ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ +Common.718.SF25 = SF25: Управление отжатием токоприёмника +Common.718.SF72 = SF72: Лампа ÑтоÑночного тормоза +Common.718.SF56 = SF56: Управление мотор-компреÑÑором +Common.718.SF29 = SF29: Вентиль Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ â„–1 +Common.718.SF26 = SF26: Вентиль Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ â„–2 +Common.718.SF42 = SF42: Подвозбудитель +Common.718.SF18 = SF18: Открытие левых дверей +Common.718.SF20 = SF20: Открытие правых дверей +Common.718.SF17 = SF17: Закрытие дверей +Common.718.SF19 = SF19: Резервное закрытие дверей +Common.718.SF21 = SF21: Управление мотор-компреÑÑором оÑновное +Common.718.SF22 = SF22: Управление мотор-компреÑÑором резервное +Common.718.SF34 = SF34: Питание вентилÑции I группы +Common.718.SF35 = SF35: Питание вентилÑции II группы +Common.718.SF23 = SF23: Контактор вентилÑции I группы +Common.718.SF24 = SF24: Контактор вентилÑции II группы + +#Names +Common.718.MVSU = БУП МВСУ +Common.718.MLUP = БУП МЛУП +Common.718.MUVS1 = БУП МУВС1 +Common.718.MUVS2 = БУП МУВС2 +Common.718.MP = БУП МП +Common.718.MS = БУП МС + +#A lot of indicators +Common.718.MVSUARSX = @[Common.718.MVSU]: Разрешение режима Ход от БКБД +Common.718.MVSUARST = @[Common.718.MVSU]: Режим Тормоз от БКБД +Common.718.MVSUARSX3 = @[Common.718.MVSU]: Режим Ð¥3 от блока Ð°Ð²Ñ‚Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ +Common.718.MVSUARSX2 = @[Common.718.MVSU]: Режим Ð¥2 от блока Ð°Ð²Ñ‚Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ +Common.718.MVSUARSX1 = @[Common.718.MVSU]: Режим Ð¥1 от блока Ð°Ð²Ñ‚Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ +Common.718.MVSUARS0 = @[Common.718.MVSU]: Режим 0 от блока Ð°Ð²Ñ‚Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ +Common.718.MVSUARST1 = @[Common.718.MVSU]: Режим Т1 от блока Ð°Ð²Ñ‚Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ +Common.718.MVSUARST2 = @[Common.718.MVSU]: Режим Т2 от блока Ð°Ð²Ñ‚Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ +Common.718.MVSUARST3 = @[Common.718.MVSU]: Режим Т3 от блока Ð°Ð²Ñ‚Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ +Common.718.MVSUKVX3 = @[Common.718.MVSU]: Режим Ð¥3 от контроллера +Common.718.MVSUKVX2 = @[Common.718.MVSU]: Режим Ð¥2 от контроллера +Common.718.MVSUKVX1 = @[Common.718.MVSU]: Режим Ð¥1 от контроллера +Common.718.MVSUKV0 = @[Common.718.MVSU]: Режим 0 от контроллера +Common.718.MVSUKVT1 = @[Common.718.MVSU]: Режим Т1 от контроллера +Common.718.MVSUKVT2 = @[Common.718.MVSU]: Режим Т2 от контроллера +Common.718.MVSUKVT3 = @[Common.718.MVSU]: Режим Т3 от контроллера +Common.718.MVSUKDV = @[Common.718.MVSU]: Контроль ÑоÑтоÑÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ +Common.718.MVSUBDV = @[Common.718.MVSU]: ОтÑутÑтвие ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ +Common.718.MVSUPB = @[Common.718.MVSU]: ПБ или ÐРС включены +Common.718.MVSUARS = @[Common.718.MVSU]: ПБ или ÐРС отключены +Common.718.MVSUAVT = @[Common.718.MVSU]: Ðварийный тормоз от БКБД +Common.718.MVSUKVV = @[Common.718.MVSU]: Вход режима "Вперёд" +Common.718.MVSUKVN = @[Common.718.MVSU]: Вход режима "Ðазад" +Common.718.MVSUPVU = @[Common.718.MVSU]: ÐеÑбор Ñхемы от ПВУ(УÐÐ’Ð) +Common.718.MVSURPB = @[Common.718.MVSU]: ÐеÑбор Ñхемы от реле педали безопаÑноÑти +Common.718.MVSUROT = @[Common.718.MVSU]: ÐеÑбор Ñхемы от реле Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ‚Ñги(ÐРС) +Common.718.MVSUSOT = @[Common.718.MVSU]: ÐеÑбор Ñхемы от Ñигнализатора торможениÑ(ЭПВ) +Common.718.MLUPVP = @[Common.718.MLUP]: Режим "Вперёд" +Common.718.MLUPNZ = @[Common.718.MLUP]: Режим "Ðазад" +Common.718.MLUPBUP = @[Common.718.MLUP]: Блокировка БУП +Common.718.MLUPV0 = @[Common.718.MLUP]: ÐÑƒÐ»ÐµÐ²Ð°Ñ ÑкороÑть (замещение) +Common.718.MLUPKU = @[Common.718.MLUP]: Отказ контроллера +Common.718.MLUPBAV = @[Common.718.MLUP]: Отказ блока Ð°Ð²Ñ‚Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ +Common.718.MLUPKR = @[Common.718.MLUP]: Отказ контроллера реверÑа +Common.718.MLUPARS = @[Common.718.MLUP]: Отказ ÐРС +Common.718.MUVS1VP = @[Common.718.MUVS1]: Выход режима "Вперёд" +Common.718.MUVS1NZ = @[Common.718.MUVS1]: Выход режима "Ðазад" +Common.718.MUVS1X = @[Common.718.MUVS1]: Выход режима "Ход" +Common.718.MUVS1T = @[Common.718.MUVS1]: Выход режима "Тормоз" +Common.718.MUVS1U1 = @[Common.718.MUVS1]: Выход режима "УÑтавка 1" +Common.718.MUVS1U2 = @[Common.718.MUVS1]: Выход режима "УÑтавка 2" +Common.718.MUVS1BAV = @[Common.718.MUVS1]: Выход Блокировка БÐÐ’ +Common.718.MUVS1BUP = @[Common.718.MUVS1]: Выход Блокировка БУВ +Common.718.MUVS20 = @[Common.718.MUVS2]: Выход режима "Выбег +Common.718.MUVS2ZPT = @[Common.718.MUVS2]: Замещение пневмотормоза +Common.718.MPMP = @[Common.718.MP]: ÐÐ¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð° +Common.718.MSMS = @[Common.718.MS]: ÐÐ¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð° + +Common.718.MPS = БУВ МПС +Common.718.MALP1 = БУВ МÐЛП1 +Common.718.MVD = БУВ МВД +Common.718.MALP2 = БУВ МÐЛП2 +Common.718.MGR = БУВ МГР +Common.718.MLU = БУВ МЛУ +Common.718.MUVK = БУВ МУВК +Common.718.MIV = БУВ МИВ +Common.718.MUVK2 = БУВ МУВК2 +Common.718.MPSPROV = @[Common.718.MPS]: Проверка работы +Common.718.MPSAVR = @[Common.718.MPS]: Отключение режимов (ÐВТ) +Common.718.MPSTARS = @[Common.718.MPS]: Тормоз БКБД ÐРС +Common.718.MPSX = @[Common.718.MPS]: Код режима Ход +Common.718.MPSNZ = @[Common.718.MPS]: Ðазад +Common.718.MPSNZR = @[Common.718.MPS]: Резервный назад +Common.718.MPSVPR = @[Common.718.MPS]: Резервный вперед +Common.718.MPSPROV0 = @[Common.718.MPS]: Проверка работоÑпоÑобноÑти +Common.718.MPSSK = @[Common.718.MPS]: СкороÑть #IDK what is this, no info +Common.718.MPST = @[Common.718.MPS]: Код режима Тормоз +Common.718.MPSXR = @[Common.718.MPS]: Резервный ход 1 +Common.718.MPSU1 = @[Common.718.MPS]: УÑтавка 1 +Common.718.MPSU2 = @[Common.718.MPS]: УÑтавка 2 +Common.718.MPSVP = @[Common.718.MPS]: Вперёд +Common.718.MPSVZ = @[Common.718.MPS]: Возврат защиты +Common.718.MPSXM = @[Common.718.MPS]: Маневровый ход +Common.718.MPSU1R = @[Common.718.MPS]: Резервный ход 2 + +Common.718.MALP1MZK = @[Common.718.MALP1]: Мгновенный запрет ключа +Common.718.MALP1FM = @[Common.718.MALP1]: ÐапрÑжение на фильтре выше 1000Ð’ +Common.718.MALP1400 = @[Common.718.MALP1]: Ðаличие 400 вольт в контактной Ñети +Common.718.MALP150 = @[Common.718.MALP1]: Ðаличие тока ÑÐºÐ¾Ñ€Ñ I группы +Common.718.MALP1DIF = @[Common.718.MALP1]: РазноÑть токов группы I и II +Common.718.MALP1650 = @[Common.718.MALP1]: Ток ÑÐºÐ¾Ñ€Ñ I группы выше 650Ð +Common.718.MALP10 = @[Common.718.MALP1]: Якорный ток I группы отÑутÑтвует +Common.718.MALP1ARS = @[Common.718.MALP1]: Срыв чаÑтотного пуÑка +Common.718.MALP1ITA = @[Common.718.MALP1]: Пробой тормозного тириÑтора I группы > 100Ð +Common.718.MALP1TR = @[Common.718.MALP1]: Ðаличие в I группе реоÑтатного тока > 100Ð +Common.718.MALP1SN = @[Common.718.MALP1]: Ð¡Ð¸Ð»Ð¾Ð²Ð°Ñ Ñхема не Ñобрана +Common.718.MALP1VN = @[Common.718.MALP1]: ÐеиÑправноÑть вентилÑторов + + +Common.718.MVDOTK = @[Common.718.MVD]: Отказ режимов +Common.718.MVDRP = @[Common.718.MVD]: Сработка РП + +Common.718.MALP2MSU = @[Common.718.MALP1]: Мгновенный ÑÐ±Ñ€Ð¾Ñ ÑƒÑтавки +Common.718.MALP2800 = @[Common.718.MALP1]: ÐапрÑжение Ñети 800Ð’ +Common.718.MALP2975 = @[Common.718.MALP1]: МакÑимальное напрÑжение контактной Ñети +Common.718.MALP250 = @[Common.718.MALP1]: Ðаличие тока ÑÐºÐ¾Ñ€Ñ II группы +Common.718.MALP2650 = @[Common.718.MALP1]: Ток ÑÐºÐ¾Ñ€Ñ II группы выше 650Ð +Common.718.MALP20 = @[Common.718.MALP1]: Якорный ток II группы отÑутÑтвует +Common.718.MALP2BV = @[Common.718.MALP1]: Сработка БВ +Common.718.MALP2ITB = @[Common.718.MALP1]: Пробой тормозного тириÑтора II группы > 100Ð + +Common.718.MGRTP1 = @[Common.718.MGR]: Прижатие 1 токоприемника +Common.718.MGRTP3 = @[Common.718.MGR]: Прижатие 3 токоприемника +Common.718.MGRKHA = @[Common.718.MGR]: Включение контакторов хода I группы +Common.718.MGRKTA = @[Common.718.MGR]: Включение контакторов тормоза I группы +Common.718.MGRTP2 = @[Common.718.MGR]: Прижатие 2 токоприемника +Common.718.MGRTP4 = @[Common.718.MGR]: Прижатие 4 токоприемника +Common.718.MGRKHB = @[Common.718.MGR]: Включение контакторов хода II группы +Common.718.MGRKTB = @[Common.718.MGR]: Включение контакторов тормоза II группы +Common.718.MGRKRV = @[Common.718.MGR]: Включение контакторов реверÑа вперёд +Common.718.MGRNV = @[Common.718.MGR]: ÐеиÑправноÑть вентилÑтора ПТТИ +Common.718.MGRBV = @[Common.718.MGR]: БВ взведён +Common.718.MGRLK = @[Common.718.MGR]: Включение линейного контактора +Common.718.MGRKRN = @[Common.718.MGR]: Включение контакторов реверÑа назад + +Common.718.MLUAKT = @[Common.718.MLU]: Команда тормоза +Common.718.MLUAXH = @[Common.718.MLU]: Команда хода +Common.718.MLUAVP = @[Common.718.MLU]: Команда Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ€ÐµÐ²ÐµÑ€Ñа вперёд +Common.718.MLUANZ = @[Common.718.MLU]: Команда Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ€ÐµÐ²ÐµÑ€Ñа назад +Common.718.MLUASS = @[Common.718.MLU]: Сигнал Ñобранной Ñхемы +Common.718.MLUAPV = @[Common.718.MLU]: Команда Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ð²Ð¾Ð·Ð±ÑƒÐ´Ð¸Ñ‚ÐµÐ»Ñ +Common.718.MLUALK = @[Common.718.MLU]: Команда Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð»Ð¸Ð½ÐµÐ¹Ð½Ð¾Ð³Ð¾ контактора + +Common.718.MUVK1V1 = @[Common.718.MUVK]: Управление катушкой Ð²ÐµÐ½Ñ‚Ð¸Ð»Ñ Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ â„–1 +Common.718.MUVK1KT = @[Common.718.MUVK]: Управление контакторами тормоза +Common.718.MUVK1KH = @[Common.718.MUVK]: Управление контакторами хода +Common.718.MUVK1LK = @[Common.718.MUVK]: Управление линейным контактором +Common.718.MUVK1PV = @[Common.718.MUVK]: Управление подвозбудителем +Common.718.MUVK1NZ = @[Common.718.MUVK]: Управление реверÑом Ðазад +Common.718.MUVK1SN = @[Common.718.MUVK]: Ð¡Ð¸Ð»Ð¾Ð²Ð°Ñ Ñхема вагона не Ñобрана + +Common.718.MIV33 = @[Common.718.MIV]: ЧаÑтотный пуÑк завершен +Common.718.MIVV1 = @[Common.718.MIV]: Вентиль â„–1 +Common.718.MIVSMA = @[Common.718.MIV]: Сигнал макÑимального тока уÑтавки I группы +Common.718.MIVSMB = @[Common.718.MIV]: Сигнал макÑимального тока уÑтавки II группы + +Common.718.MUVK2RTM = @[Common.718.MUVK2]: Управление реле минимального тока +Common.718.MUVK2RKT = @[Common.718.MUVK2]: Управление реле ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ +Common.718.MUVK2RP = @[Common.718.MUVK2]: Сработка защиты +Common.718.MUVK2OTK = @[Common.718.MUVK2]: Отказ вагона +Common.718.MUVK275 = @[Common.718.MUVK2]: Резервное питание БУВ +Common.718.MUVK2VP = @[Common.718.MUVK2]: Управление реверÑом Вперед + + +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF51Toggle = @[Common.718.SF51] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF52Toggle = @[Common.718.SF52] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF53Toggle = @[Common.718.SF53] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF60Toggle = @[Common.718.SF60] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF61Toggle = @[Common.718.SF61] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF77Toggle = @[Common.718.SF77] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF78Toggle = @[Common.718.SF78] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF40Toggle = @[Common.718.SF40] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF41Toggle = @[Common.718.SF41] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF8Toggle = @[Common.718.SF8] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF11Toggle = @[Common.718.SF11] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF10Toggle = @[Common.718.SF10] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF7Toggle = @[Common.718.SF7] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF50Toggle = @[Common.718.SF50] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF76Toggle = @[Common.718.SF76] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF73Toggle = @[Common.718.SF73] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF3Toggle = @[Common.718.SF3] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF71Toggle = @[Common.718.SF71] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF63Toggle = @[Common.718.SF63] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF54Toggle = @[Common.718.SF54] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF65Toggle = @[Common.718.SF65] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF55Toggle = @[Common.718.SF55] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF9Toggle = @[Common.718.SF9] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF6Toggle = @[Common.718.SF6] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF5Toggle = @[Common.718.SF5] +Entities.gmod_subway_81-718.Buttons.BackPPZ.SF2Toggle = @[Common.718.SF2] + +Entities.gmod_subway_81-718.Buttons.Main.SA5Toggle = @[Common.ALL.VUD] +Entities.gmod_subway_81-718.Buttons.Main.SB3Set = @[Common.ALL.KRZD] +Entities.gmod_subway_81-718.Buttons.Main.SA7Toggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-718.Buttons.Main.SB1Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-718.Buttons.Main.SB2Set = @[Common.ALL.KDP] +Entities.gmod_subway_81-718.Buttons.Main.SA8Toggle = @[Common.ALL.VAH] +Entities.gmod_subway_81-718.Buttons.Main.SB4Set = @[Common.718.SB4] +Entities.gmod_subway_81-718.Buttons.Main.SB5Set = @[Common.718.SB5] +Entities.gmod_subway_81-718.Buttons.Main.SA9Toggle = @[Common.ALL.OAVU] +Entities.gmod_subway_81-718.Buttons.Main.SA13Toggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-718.Buttons.Main.SA14Toggle = @[Common.ALL.ARSR] +Entities.gmod_subway_81-718.Buttons.Main.SA15Toggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-718.Buttons.Main.SA2Toggle = @[Common.ALL.VAD] +Entities.gmod_subway_81-718.Buttons.Main.SB6KToggle = @[Common.ALL.KAHK] +Entities.gmod_subway_81-718.Buttons.Main.SB6Set = @[Common.ALL.KAH] +Entities.gmod_subway_81-718.Buttons.Main.SB7KToggle = @[Common.718.SB7K] +Entities.gmod_subway_81-718.Buttons.Main.SB7Set = @[Common.718.SB7] +Entities.gmod_subway_81-718.Buttons.Main.SB8Set = @[Common.ARS.KVTR] +Entities.gmod_subway_81-718.Buttons.Main.SB10Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-718.Buttons.Main.SB9Set = @[Common.ARS.KVT] +Entities.gmod_subway_81-718.Buttons.Main.SB11Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-718.Buttons.Main.SA16Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_81-718.Buttons.Main.SB12Set = @[Common.718.SB12] +Entities.gmod_subway_81-718.Buttons.Main.SB13Set = @[Common.718.SB13] +Entities.gmod_subway_81-718.Buttons.Main.SB14Set = @[Common.ALL.RMK] +Entities.gmod_subway_81-718.Buttons.Main.SB15Set = @[Common.718.SB15] +Entities.gmod_subway_81-718.Buttons.Main.SB16Set = @[Common.718.SB16] + + +Entities.gmod_subway_81-718.Buttons.Battery.RCToggle = @[Common.ALL.RC1] +Entities.gmod_subway_81-718.Buttons.Battery.VBToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-718.Buttons.Battery.VTPR- = @[Common.718.VTPR] @[Common.ALL.CCW] +Entities.gmod_subway_81-718.Buttons.Battery.VTPR+ = @[Common.718.VTPR] @[Common.ALL.CW] + + +Entities.gmod_subway_81-718.Buttons.KR.SBR14Set = @[Common.718.RX1] +Entities.gmod_subway_81-718.Buttons.KR.SBR16Set = @[Common.718.KAH2] +Entities.gmod_subway_81-718.Buttons.KR.SBR15Set = @[Common.718.RX2] + + +Entities.gmod_subway_81-718.Buttons.VPU.SAP8Toggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-718.Buttons.VPU.SAP13Toggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-718.Buttons.VPU.SAP36Toggle = @[Common.ALL.ES] +Entities.gmod_subway_81-718.Buttons.VPU.SAP12Toggle = @[Common.720.AppLights] +Entities.gmod_subway_81-718.Buttons.VPU.SAP11Toggle = @[Common.718.Heat] +Entities.gmod_subway_81-718.Buttons.VPU.SAP23Toggle = @[Common.ARS.VP] +Entities.gmod_subway_81-718.Buttons.VPU.SAP9Toggle = @[Common.720.Vent1] +Entities.gmod_subway_81-718.Buttons.VPU.SAP10Toggle = @[Common.720.Vent2] +Entities.gmod_subway_81-718.Buttons.VPU.SAP3Toggle = @[Common.ALL.UNCh] +Entities.gmod_subway_81-718.Buttons.VPU.SAP39Toggle = @[Common.ALL.GCab] +Entities.gmod_subway_81-718.Buttons.VPU.SBP22Set = @[Common.718.SBP22] +Entities.gmod_subway_81-718.Buttons.VPU.SBP6Set = @[Common.718.KDPR] +Entities.gmod_subway_81-718.Buttons.VPU.SBP4Set = @[Common.718.KDLR] +Entities.gmod_subway_81-718.Buttons.VPU.SAP14Toggle = @[Common.ARS.Freq] @[Common.ARS.FreqU] +Entities.gmod_subway_81-718.Buttons.VPU.SAP26Toggle = @[Common.718.UOS] +Entities.gmod_subway_81-718.Buttons.VPU.SAP24Toggle = @[Common.ALL.VOVT] + +Entities.gmod_subway_81-718.Buttons.ARS.!Speedometer1 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-718.Buttons.ARS.!Speedometer2 = @[Common.ALL.Speedometer] +Entities.gmod_subway_81-718.Buttons.ARS.!SD = @[Common.ALL.LSD] +Entities.gmod_subway_81-718.Buttons.ARS.!KT = @[Common.ARS.KT] +Entities.gmod_subway_81-718.Buttons.ARS.!RS = @[Common.ARS.RS] +Entities.gmod_subway_81-718.Buttons.ARS.!SK = @[Common.ARS.LN] +Entities.gmod_subway_81-718.Buttons.ARS.!04 = @[Common.ARS.04] +Entities.gmod_subway_81-718.Buttons.ARS.!0 = @[Common.ARS.0] +Entities.gmod_subway_81-718.Buttons.ARS.!40 = @[Common.ARS.40] +Entities.gmod_subway_81-718.Buttons.ARS.!60 = @[Common.ARS.60] +Entities.gmod_subway_81-718.Buttons.ARS.!70 = @[Common.ARS.70] +Entities.gmod_subway_81-718.Buttons.ARS.!80 = @[Common.ARS.80] +Entities.gmod_subway_81-718.Buttons.ARS.!KES = @[Common.718.KES] +Entities.gmod_subway_81-718.Buttons.ARS.!ST = @[Common.ALL.BrT] +Entities.gmod_subway_81-718.Buttons.ARS.!CUV = @[Common.718.CUV] +Entities.gmod_subway_81-718.Buttons.ARS.!AVU = @[Common.ALL.LAVU] +Entities.gmod_subway_81-718.Buttons.ARS.!AIP = @[Common.718.AIP] +Entities.gmod_subway_81-718.Buttons.ARS.!RIP = @[Common.718.RIP] +Entities.gmod_subway_81-718.Buttons.ARS.!KVD = @[Common.ARS.VD] +Entities.gmod_subway_81-718.Buttons.ARS.!VS1 = @[Common.718.VS1] +Entities.gmod_subway_81-718.Buttons.ARS.!VS2 = @[Common.718.VS2] + +Entities.gmod_subway_81-718.Buttons.Right.SA1/1Toggle = @[Common.ALL.VF1] +Entities.gmod_subway_81-718.Buttons.Right.SA2/1Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-718.Buttons.Right.SA5/1Toggle = @[Common.718.SPULightStrength] +Entities.gmod_subway_81-718.Buttons.Right.SA4/1Toggle = @[Common.ALL.GaugeLights] + +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKDV = @[Common.718.MVSUKDV] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUBDV = @[Common.718.MVSUBDV] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUPB = @[Common.718.MVSUPB] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARS = @[Common.718.MVSUARS] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUAVT = @[Common.718.MVSUAVT] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVV = @[Common.718.MVSUKVV] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVN = @[Common.718.MVSUKVN] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVX3 = @[Common.718.MVSUKVX3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVX2 = @[Common.718.MVSUKVX2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVX1 = @[Common.718.MVSUKVX1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKV0 = @[Common.718.MVSUKV0] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVT1 = @[Common.718.MVSUKVT1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVT2 = @[Common.718.MVSUKVT2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUKVT3 = @[Common.718.MVSUKVT3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUPVU = @[Common.718.MVSUPVU] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSURPB = @[Common.718.MVSURPB] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX = @[Common.718.MVSUARSX] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST = @[Common.718.MVSUARST] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX3 = @[Common.718.MVSUARSX3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX2 = @[Common.718.MVSUARSX2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARSX1 = @[Common.718.MVSUARSX1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARS0 = @[Common.718.MVSUARS0] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST1 = @[Common.718.MVSUARST1] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST2 = @[Common.718.MVSUARST2] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUARST3 = @[Common.718.MVSUARST3] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUROT = @[Common.718.MVSUROT] +Entities.gmod_subway_81-718.Buttons.BUP_MVSU.MVSUSOT = @[Common.718.MVSUSOT] + +Entities.gmod_subway_81-718.Buttons.BUP_MUVS2.MUVS20 = @[Common.718.MUVS20] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS2.MUVS2ZPT = @[Common.718.MUVS2ZPT] + +Entities.gmod_subway_81-718.Buttons.BUP_MP.MPMP = @[Common.718.MPMP] +Entities.gmod_subway_81-718.Buttons.BUP_MS.MSMS = @[Common.718.MSMS] + +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1VP = @[Common.718.MUVS1VP] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1NZ = @[Common.718.MUVS1NZ] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1X = @[Common.718.MUVS1X] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1T = @[Common.718.MUVS1T] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1U1 = @[Common.718.MUVS1U1] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1U2 = @[Common.718.MUVS1U2] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1BAV = @[Common.718.MUVS1BAV] +Entities.gmod_subway_81-718.Buttons.BUP_MUVS1.MUVS1BUP = @[Common.718.MUVS1BUP] + +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPVP = @[Common.718.MLUPVP] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPNZ = @[Common.718.MLUPNZ] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPBUP = @[Common.718.MLUPBUP] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPV0 = @[Common.718.MLUPV0] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPKU = @[Common.718.MLUPKU] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPBAV = @[Common.718.MLUPBAV] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPKR = @[Common.718.MLUPKR] +Entities.gmod_subway_81-718.Buttons.BUP_MLUP.MLUPARS = @[Common.718.MLUPARS] + +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSPROV = @[Common.718.MPSPROV] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSAVR = @[Common.718.MPSAVR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSTARS = @[Common.718.MPSTARS] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSX = @[Common.718.MPSX] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSNZ = @[Common.718.MPSNZ] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSNZR = @[Common.718.MPSNZR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSPROV0 = @[Common.718.MPSPROV0] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSSK = @[Common.718.MPSSK] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPST = @[Common.718.MPST] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSXR = @[Common.718.MPSXR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSU1 = @[Common.718.MPSU1] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSU2 = @[Common.718.MPSU2] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSVP = @[Common.718.MPSVP] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSVPR = @[Common.718.MPSVPR] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSVZ = @[Common.718.MPSVZ] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSXM = @[Common.718.MPSXM] +Entities.gmod_subway_81-718.Buttons.BUV_MPS.MPSU1R = @[Common.718.MPSU1R] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1MZK = @[Common.718.MALP1MZK] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1FM = @[Common.718.MALP1FM] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1400 = @[Common.718.MALP1400] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP150 = @[Common.718.MALP150] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1DIF = @[Common.718.MALP1DIF] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1650 = @[Common.718.MALP1650] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP10 = @[Common.718.MALP10] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1ARS = @[Common.718.MALP1ARS] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1ITA = @[Common.718.MALP1ITA] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1TR = @[Common.718.MALP1TR] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1SN = @[Common.718.MALP1SN] +Entities.gmod_subway_81-718.Buttons.BUV_MALP1.MALP1VN = @[Common.718.MALP1VN] +Entities.gmod_subway_81-718.Buttons.BUV_MVD.MVDOTK = @[Common.718.MVDOTK] +Entities.gmod_subway_81-718.Buttons.BUV_MVD.MVDRP = @[Common.718.MVDRP] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2MSU = @[Common.718.MALP2MSU] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2800 = @[Common.718.MALP2800] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2975 = @[Common.718.MALP2975] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP250 = @[Common.718.MALP250] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2650 = @[Common.718.MALP2650] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP20 = @[Common.718.MALP20] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2BV = @[Common.718.MALP2BV] +Entities.gmod_subway_81-718.Buttons.BUV_MALP2.MALP2ITB = @[Common.718.MALP2ITB] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP1 = @[Common.718.MGRTP1] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP3 = @[Common.718.MGRTP3] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKHA = @[Common.718.MGRKHA] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKTA = @[Common.718.MGRKTA] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP2 = @[Common.718.MGRTP2] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRTP4 = @[Common.718.MGRTP4] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKHB = @[Common.718.MGRKHB] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKTB = @[Common.718.MGRKTB] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKRV = @[Common.718.MGRKRV] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRNV = @[Common.718.MGRNV] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRBV = @[Common.718.MGRBV] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRLK = @[Common.718.MGRLK] +Entities.gmod_subway_81-718.Buttons.BUV_MGR.MGRKRN = @[Common.718.MGRKRN] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAKT = @[Common.718.MLUAKT] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAXH = @[Common.718.MLUAXH] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAVP = @[Common.718.MLUAVP] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUANZ = @[Common.718.MLUANZ] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUASS = @[Common.718.MLUASS] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUAPV = @[Common.718.MLUAPV] +Entities.gmod_subway_81-718.Buttons.BUV_MLUA.MLUALK = @[Common.718.MLUALK] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1V1 = @[Common.718.MUVK1V1] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1KT = @[Common.718.MUVK1KT] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1KH = @[Common.718.MUVK1KH] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1LK = @[Common.718.MUVK1LK] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1PV = @[Common.718.MUVK1PV] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1NZ = @[Common.718.MUVK1NZ] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK1.MUVK1SN = @[Common.718.MUVK1SN] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIV33 = @[Common.718.MIV33] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIVV1 = @[Common.718.MIVV1] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIVSMA = @[Common.718.MIVSMA] +Entities.gmod_subway_81-718.Buttons.BUV_MIV.MIVSMB = @[Common.718.MIVSMB] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2RTM = @[Common.718.MUVK2RTM] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2RKT = @[Common.718.MUVK2RKT] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2RP = @[Common.718.MUVK2RP] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2OTK = @[Common.718.MUVK2OTK] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK275 = @[Common.718.MUVK275] +Entities.gmod_subway_81-718.Buttons.BUV_MUVK2.MUVK2VP = @[Common.718.MUVK2VP] + +Entities.gmod_subway_81-718.Buttons.PVZ.SF4Toggle = @[Common.718.SF4] +Entities.gmod_subway_81-718.Buttons.PVZ.SF27Toggle = @[Common.718.SF27] +Entities.gmod_subway_81-718.Buttons.PVZ.SF46Toggle = @[Common.718.SF46] +Entities.gmod_subway_81-718.Buttons.PVZ.SF12Toggle = @[Common.718.SF12] +Entities.gmod_subway_81-718.Buttons.PVZ.SF13Toggle = @[Common.718.SF13] +Entities.gmod_subway_81-718.Buttons.PVZ.SF45Toggle = @[Common.718.SF45] +Entities.gmod_subway_81-718.Buttons.PVZ.SF16Toggle = @[Common.718.SF16] +Entities.gmod_subway_81-718.Buttons.PVZ.SF44Toggle = @[Common.718.SF44] +Entities.gmod_subway_81-718.Buttons.PVZ.SF43Toggle = @[Common.718.SF43] +Entities.gmod_subway_81-718.Buttons.PVZ.SF14Toggle = @[Common.718.SF14] +Entities.gmod_subway_81-718.Buttons.PVZ.SF15Toggle = @[Common.718.SF15] +Entities.gmod_subway_81-718.Buttons.PVZ.SF25Toggle = @[Common.718.SF25] +Entities.gmod_subway_81-718.Buttons.PVZ.SF72Toggle = @[Common.718.SF72] +Entities.gmod_subway_81-718.Buttons.PVZ.SF29Toggle = @[Common.718.SF29] +Entities.gmod_subway_81-718.Buttons.PVZ.SF26Toggle = @[Common.718.SF26] +Entities.gmod_subway_81-718.Buttons.PVZ.SF42Toggle = @[Common.718.SF42] +Entities.gmod_subway_81-718.Buttons.PVZ.SF18Toggle = @[Common.718.SF18] +Entities.gmod_subway_81-718.Buttons.PVZ.SF20Toggle = @[Common.718.SF20] +Entities.gmod_subway_81-718.Buttons.PVZ.SF17Toggle = @[Common.718.SF17] +Entities.gmod_subway_81-718.Buttons.PVZ.SF19Toggle = @[Common.718.SF19] +Entities.gmod_subway_81-718.Buttons.PVZ.SF21Toggle = @[Common.718.SF21] +Entities.gmod_subway_81-718.Buttons.PVZ.SF22Toggle = @[Common.718.SF22] +Entities.gmod_subway_81-718.Buttons.PVZ.SF34Toggle = @[Common.718.SF34] +Entities.gmod_subway_81-718.Buttons.PVZ.SF35Toggle = @[Common.718.SF35] +Entities.gmod_subway_81-718.Buttons.PVZ.SF23Toggle = @[Common.718.SF23] +Entities.gmod_subway_81-718.Buttons.PVZ.SF24Toggle = @[Common.718.SF24] + +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-718.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-718.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-718.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +Entities.gmod_subway_81-718.Buttons.HelperPanel.SA6Toggle = @[Common.ALL.VUD2] +Entities.gmod_subway_81-718.Buttons.HelperPanel.SA24Set = @[Common.ALL.KDL] +Entities.gmod_subway_81-718.Buttons.HelperPanel.SB20Set = @[Common.ALL.Program1] +Entities.gmod_subway_81-718.Buttons.HelperPanel.SB21Set = @[Common.ALL.Program2] + +Entities.gmod_subway_81-718.Buttons.BZOS.SAB1Toggle = @[Common.BZOS.On] +Entities.gmod_subway_81-718.Buttons.BZOS.!VH1 = @[Common.BZOS.VH1] +Entities.gmod_subway_81-718.Buttons.BZOS.!VH2 = @[Common.BZOS.VH2] + +Entities.gmod_subway_81-718.Buttons.CabVent.PVK- = @[Common.CabVent.PVK-] +Entities.gmod_subway_81-718.Buttons.CabVent.PVK+ = @[Common.CabVent.PVK+] + +Entities.gmod_subway_81-718.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-718.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-718.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-718.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-718.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-718.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-718.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-718.Buttons.OtsekDoor1.OtsekDoor1 = @[Common.ALL.OtsekDoor1] +Entities.gmod_subway_81-718.Buttons.OtsekDoor2.OtsekDoor2 = @[Common.ALL.OtsekDoor2] +Entities.gmod_subway_81-718.Buttons.DriverValveDisconnect.EPKToggle = @[Common.ALL.EPV] +Entities.gmod_subway_81-718.Buttons.DriverValveDisconnect.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-718.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle = @[Common.ALL.DriverValveDisconnect] + +Entities.gmod_subway_81-718.Buttons.Stopkran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-718.Buttons.UAVAPanel.UAVAToggle = @[Common.ALL.UAVA] +Entities.gmod_subway_81-718.Buttons.UAVAPanel.UAVACToggle = @[Common.ALL.UAVAContact] + +Entities.gmod_subway_81-718.Buttons.RRI.!RRIOn = @[Common.RRI.RRIOn] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRIUp = @[Common.RRI.RRIUp] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRIDown = @[Common.RRI.RRIDown] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRILeft = @[Common.RRI.RRILeft] +Entities.gmod_subway_81-718.Buttons.RRIScreen.RRIRight = @[Common.RRI.RRIRight] + +Entities.gmod_subway_81-718.Buttons.HVMeters.!I13 = @[Common.ALL.EnginesCurrent1] +Entities.gmod_subway_81-718.Buttons.HVMeters.!I24 = @[Common.ALL.EnginesCurrent2] +Entities.gmod_subway_81-718.Buttons.HVMeters.!HVVoltage = @[Common.ALL.HighVoltage] +Entities.gmod_subway_81-718.Buttons.HVMeters.!BatteryCurrent = @[Common.ALL.BatteryCurrent] +Entities.gmod_subway_81-718.Buttons.PneumaticPanels.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-718.Buttons.PneumaticPanels.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-718.Buttons.Left.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSPROV = @[Common.718.MPSPROV] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSAVR = @[Common.718.MPSAVR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSTARS = @[Common.718.MPSTARS] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSX = @[Common.718.MPSX] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSNZ = @[Common.718.MPSNZ] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSNZR = @[Common.718.MPSNZR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSPROV0 = @[Common.718.MPSPROV0] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSSK = @[Common.718.MPSSK] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPST = @[Common.718.MPST] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSXR = @[Common.718.MPSXR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSU1 = @[Common.718.MPSU1] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSU2 = @[Common.718.MPSU2] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSVP = @[Common.718.MPSVP] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSVPR = @[Common.718.MPSVPR] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSVZ = @[Common.718.MPSVZ] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSXM = @[Common.718.MPSXM] +Entities.gmod_subway_81-719.Buttons.BUV_MPS.MPSU1R = @[Common.718.MPSU1R] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1MZK = @[Common.718.MALP1MZK] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1FM = @[Common.718.MALP1FM] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1400 = @[Common.718.MALP1400] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP150 = @[Common.718.MALP150] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1DIF = @[Common.718.MALP1DIF] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1650 = @[Common.718.MALP1650] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP10 = @[Common.718.MALP10] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1ARS = @[Common.718.MALP1ARS] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1ITA = @[Common.718.MALP1ITA] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1TR = @[Common.718.MALP1TR] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1SN = @[Common.718.MALP1SN] +Entities.gmod_subway_81-719.Buttons.BUV_MALP1.MALP1VN = @[Common.718.MALP1VN] +Entities.gmod_subway_81-719.Buttons.BUV_MVD.MVDOTK = @[Common.718.MVDOTK] +Entities.gmod_subway_81-719.Buttons.BUV_MVD.MVDRP = @[Common.718.MVDRP] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2MSU = @[Common.718.MALP2MSU] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2800 = @[Common.718.MALP2800] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2975 = @[Common.718.MALP2975] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP250 = @[Common.718.MALP250] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2650 = @[Common.718.MALP2650] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP20 = @[Common.718.MALP20] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2BV = @[Common.718.MALP2BV] +Entities.gmod_subway_81-719.Buttons.BUV_MALP2.MALP2ITB = @[Common.718.MALP2ITB] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP1 = @[Common.718.MGRTP1] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP3 = @[Common.718.MGRTP3] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKHA = @[Common.718.MGRKHA] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKTA = @[Common.718.MGRKTA] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP2 = @[Common.718.MGRTP2] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRTP4 = @[Common.718.MGRTP4] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKHB = @[Common.718.MGRKHB] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKTB = @[Common.718.MGRKTB] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKRV = @[Common.718.MGRKRV] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRNV = @[Common.718.MGRNV] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRBV = @[Common.718.MGRBV] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRLK = @[Common.718.MGRLK] +Entities.gmod_subway_81-719.Buttons.BUV_MGR.MGRKRN = @[Common.718.MGRKRN] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAKT = @[Common.718.MLUAKT] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAXH = @[Common.718.MLUAXH] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAVP = @[Common.718.MLUAVP] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUANZ = @[Common.718.MLUANZ] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUASS = @[Common.718.MLUASS] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUAPV = @[Common.718.MLUAPV] +Entities.gmod_subway_81-719.Buttons.BUV_MLUA.MLUALK = @[Common.718.MLUALK] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1V1 = @[Common.718.MUVK1V1] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1KT = @[Common.718.MUVK1KT] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1KH = @[Common.718.MUVK1KH] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1LK = @[Common.718.MUVK1LK] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1PV = @[Common.718.MUVK1PV] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1NZ = @[Common.718.MUVK1NZ] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK1.MUVK1SN = @[Common.718.MUVK1SN] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIV33 = @[Common.718.MIV33] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIVV1 = @[Common.718.MIVV1] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIVSMA = @[Common.718.MIVSMA] +Entities.gmod_subway_81-719.Buttons.BUV_MIV.MIVSMB = @[Common.718.MIVSMB] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2RTM = @[Common.718.MUVK2RTM] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2RKT = @[Common.718.MUVK2RKT] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2RP = @[Common.718.MUVK2RP] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2OTK = @[Common.718.MUVK2OTK] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK275 = @[Common.718.MUVK275] +Entities.gmod_subway_81-719.Buttons.BUV_MUVK2.MUVK2VP = @[Common.718.MUVK2VP] +Entities.gmod_subway_81-719.Buttons.PVZ.SF4Toggle = @[Common.718.SF4] +Entities.gmod_subway_81-719.Buttons.PVZ.SF27Toggle = @[Common.718.SF27] +Entities.gmod_subway_81-719.Buttons.PVZ.SF46Toggle = @[Common.718.SF46] +Entities.gmod_subway_81-719.Buttons.PVZ.SF12Toggle = @[Common.718.SF12] +Entities.gmod_subway_81-719.Buttons.PVZ.SF13Toggle = @[Common.718.SF13] +Entities.gmod_subway_81-719.Buttons.PVZ.SF45Toggle = @[Common.718.SF45] +Entities.gmod_subway_81-719.Buttons.PVZ.SF16Toggle = @[Common.718.SF16] +Entities.gmod_subway_81-719.Buttons.PVZ.SF44Toggle = @[Common.718.SF44] +Entities.gmod_subway_81-719.Buttons.PVZ.SF43Toggle = @[Common.718.SF43] +Entities.gmod_subway_81-719.Buttons.PVZ.SF14Toggle = @[Common.718.SF14] +Entities.gmod_subway_81-719.Buttons.PVZ.SF15Toggle = @[Common.718.SF15] +Entities.gmod_subway_81-719.Buttons.PVZ.SF25Toggle = @[Common.718.SF25] +Entities.gmod_subway_81-719.Buttons.PVZ.SF72Toggle = @[Common.718.SF72] +Entities.gmod_subway_81-719.Buttons.PVZ.SF56Toggle = @[Common.718.SF56] +Entities.gmod_subway_81-719.Buttons.PVZ.SF29Toggle = @[Common.718.SF29] +Entities.gmod_subway_81-719.Buttons.PVZ.SF26Toggle = @[Common.718.SF26] +Entities.gmod_subway_81-719.Buttons.PVZ.SF42Toggle = @[Common.718.SF42] +Entities.gmod_subway_81-719.Buttons.PVZ.SF18Toggle = @[Common.718.SF18] +Entities.gmod_subway_81-719.Buttons.PVZ.SF20Toggle = @[Common.718.SF20] +Entities.gmod_subway_81-719.Buttons.PVZ.SF17Toggle = @[Common.718.SF17] +Entities.gmod_subway_81-719.Buttons.PVZ.SF19Toggle = @[Common.718.SF19] +Entities.gmod_subway_81-719.Buttons.PVZ.SF21Toggle = @[Common.718.SF21] +Entities.gmod_subway_81-719.Buttons.PVZ.SF22Toggle = @[Common.718.SF22] +Entities.gmod_subway_81-719.Buttons.PVZ.SF34Toggle = @[Common.718.SF34] +Entities.gmod_subway_81-719.Buttons.PVZ.SF35Toggle = @[Common.718.SF35] +Entities.gmod_subway_81-719.Buttons.PVZ.SF23Toggle = @[Common.718.SF23] +Entities.gmod_subway_81-719.Buttons.PVZ.SF24Toggle = @[Common.718.SF24] + +Entities.gmod_subway_81-719.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-719.Buttons.RearPneumatic.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-719.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_81-719.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_81-719.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-719.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-719.Buttons.couch_cap_o.CouchCap = @[Common.ALL.CouchCap] +Entities.gmod_subway_81-719.Buttons.couch_cap.CouchCap = @[Common.ALL.CouchCap] + +Entities.gmod_subway_81-719.Buttons.Battery.VBToggle = @[Common.ALL.VB] + +Entities.gmod_subway_81-719.Buttons.Voltages.!BatteryVoltage = @[Common.ALL.BatteryVoltage] #NEW +Entities.gmod_subway_81-719.Buttons.Voltages.!BatteryCurrent = @[Common.ALL.BatteryCurrent] #NEW +Entities.gmod_subway_81-719.Buttons.Pressures.!BCPressure = @[Common.ALL.BLTLPressure] #NEW +Entities.gmod_subway_81-719.Buttons.Pressures.!BLTLPressure = @[Common.ALL.BCPressure] #NEW + +#Spawner: +Entities.gmod_subway_81-718.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-718.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-718.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-718.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-718.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-718.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-718.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-718.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-718.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-718.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] diff --git a/lua/metrostroi_data/languages/ru_720.lua b/lua/metrostroi_data/languages/ru_720.lua new file mode 100644 index 0000000..72654aa --- /dev/null +++ b/lua/metrostroi_data/languages/ru_720.lua @@ -0,0 +1,428 @@ +return [[ +#81-720 + +[ru] + +#######Buttons########### +#Cameras +Train.720.CameraCond = Управление кондиционером, ИГЛР+Train.720.CameraPPZ = ППЗ +Train.720.CameraPV = ВПУ +Train.720.CameraVityaz = СÐУ "ВитÑзь" +Train.720.CameraKRMH = Краны КРМШ и УÐÐ’Ð +Train.720.CameraPVZ = ПВЗ + +Train.Buttons.Heating = Обогрев +Train.Buttons.Vent = ВентилÑÑ†Ð¸Ñ +Train.Buttons.Cooling = Охлаждение +Train.Buttons.BARS1 = БÐРС1 +Train.Buttons.BARS2 = БÐРС2 +Train.Buttons.BARS12 = БÐРС1 и БÐРС2 + +#Common +Common.720.SF1 = SF1: Питание общее +Common.720.SF2 = SF2: Управление оÑновное +Common.720.SF3 = SF3: Управление резервное +Common.720.SF4 = SF4: БÐРС +Common.720.SF5 = SF5: БУП (блок ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ÐµÐ·Ð´Ð¾Ð¼) +Common.720.SF6 = SF6: БКЦУ (блок коммутации цепей управлениÑ) +Common.720.SF7 = SF7: ППО (ÐСОТП) +Common.720.SF8 = SF8: Оповещение +Common.720.SF9 = SF9: РадиоÑвÑзь +Common.720.SF10 = SF10: ÐžÑ€Ð¸ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð²Ð°Ð³Ð¾Ð½Ð° +Common.720.SF11 = SF11: Ðаправление Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ +Common.720.SF12 = SF12: Фары 1-й группы +Common.720.SF13 = SF13: Фары 2-й группы +Common.720.SF14 = SF14: Огни габаритные +Common.720.SF15 = SF15: ОÑвещение кабины +Common.720.SF16 = SF16: Отопление +Common.720.SF17 = SF17: Кондиционер кабины +Common.720.SF18 = SF18: ГребнеÑмазыватель +Common.720.SF19 = SF19: Питание крана машиниÑта оÑновное +Common.720.SF20 = SF20: Питание крана машиниÑта резервное +Common.720.SF21 = SF21: Двери открытие +Common.720.SF22 = SF22: Двери закрытие + +Common.720.SFV1 = SF1: Питание цепей ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð°Ð³Ð¾Ð½Ð° +Common.720.SFV2 = SF2: Питание блока ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð°Ð³Ð¾Ð½Ð° +Common.720.SFV3 = SF3: Питание блока ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‚Ñговым приводом +Common.720.SFV4 = SF4: Управление блоком ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‚Ñговым приводом +Common.720.SFV5 = SF5: Резервное управление блоком ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‚Ñговым приводом +Common.720.SFV6 = SF6: БУТП Питание +Common.720.SFV7 = SF7: Блок бортового ÑнергоÑÐ½Ð°Ð±Ð¶ÐµÐ½Ð¸Ñ +Common.720.SFV8 = SF8: БВ управление +Common.720.SFV9 = SF9: БВ питание +Common.720.SFV10 = SF10: ППО (ÐСОТП ПЦБК) +Common.720.SFV11 = SF11: Мотор-компреÑÑор +Common.720.SFV12 = SF12: Двери закрытие +Common.720.SFV13 = SF13: Двери открытие левых +Common.720.SFV14 = SF14: Двери открытие правых +Common.720.SFV15 = SF15: Двери торцевые +Common.720.SFV16 = SF16: Оповещение +Common.720.SFV17 = SF17: ЭкÑÑ‚Ñ€ÐµÐ½Ð½Ð°Ñ ÑвÑзь +Common.720.SFV18 = SF18: Резерв +Common.720.SFV19 = SF19: ОÑвещение Ñалона питание +Common.720.SFV20 = SF20: ОÑвещение Ñалона аварийное +Common.720.SFV21 = SF21: Датчик ÑкороÑти +Common.720.SFV22 = SF22: Тормоз ÑтоÑночный +Common.720.SFV23 = SF23: ВентилÑÑ†Ð¸Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ 1-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° +Common.720.SFV24 = SF24: ВентилÑÑ†Ð¸Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ 2-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° +Common.720.SFV25 = SF25: ВентилÑÑ†Ð¸Ñ Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ðµ 1-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° +Common.720.SFV26 = SF26: ВентилÑÑ†Ð¸Ñ Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ðµ 2-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° +Common.720.SFV27 = SF27: Питание Ð²Ð¾Ð·Ð±ÑƒÐ´Ð¸Ñ‚ÐµÐ»Ñ +Common.720.SFV28 = SF28: Питание зарÑдного конденÑатора +Common.720.SFV29 = SF29: Токоприёмники +Common.720.SFV30 = SF30: Табло +Common.720.SFV31 = SF31: Резерв +Common.720.SFV32 = SF32: Резерв +Common.720.SFV33 = SF33: Резерв + +Common.720.VentCMode = Режим работы вентилÑтора +Common.720.VentHMode+ = Увеличение Ñилы обогрева +Common.720.VentHMode- = Уменьшение Ñилы обогрева +Common.720.VentSMode- = Увеличение Ñилы вентилÑтора +Common.720.VentSMode+ = Уменьшение Ñилы вентилÑтора + +Common.720.Pant1 = Отжатие токоприёмников 1-й группы +Common.720.Pant2 = Отжатие токоприёмников 2-й группы +Common.720.Vent1 = ВентилÑÑ†Ð¸Ñ 1-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° +Common.720.Vent2 = ВентилÑÑ†Ð¸Ñ 2-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° +Common.720.TorecDoors = Двери торцевые +Common.720.BBER = Резервное включение ББЭ +Common.720.BBE = Включение ББЭ +Common.720.CabLightStrength = ЯркоÑть оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹ +Common.720.AppLights = ОÑвещение аппаратного отÑека +Common.720.BARSBlock = Блокировка неиÑправных БÐРСов + +Common.720.Accel = Текущее уÑкорение +Common.720.Forward = Движение вперёд +Common.720.Backward = Движение назад +Common.720.Stand = СтоÑнка +Common.720.Ticker = Включение бегущей Ñтроки в Ñалоне +Common.720.KAH = Кнопка Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð°Ð²Ð°Ñ€Ð¸Ð¹Ð½Ð¾Ð³Ð¾ хода БÐРС +Common.720.KAHK = Крышка кнопки КÐÐ¥ +Common.720.ALS = Кнопка перевода ÑиÑтемы ÐРС в режим локомотивной Ñигнализации +Common.720.ALSK = Крышка кнопки ÐЛС +Common.720.FDepot = Выезд из депо +Common.720.HVoltage = Лампа отÑутÑÑ‚Ð²Ð¸Ñ Ð½Ð°Ð¿Ñ€ÑÐ¶ÐµÐ½Ð¸Ñ Ð² контактной Ñети +Common.720.PassScheme = Включение наддверного табло в Ñалоне +Common.720.EmergencyCompressor = Кнопка резервного мотор-компреÑÑора +Common.720.EnableBV = Включение БВ +Common.720.DisableBV = Отключение БВ +Common.720.Ring = Передача ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (звонок) +Common.720.R_Announcer = Включение информатора в Ñалоне +Common.720.R_Line = Включение микрофона машиниÑта +Common.720.R_Emer = Включение ÑкÑтренной ÑвÑзи +Common.720.R_Program1 = ПуÑк запиÑи (программа 1) +Common.720.EnableBVEmer = Резервное включение БВ +Common.720.EmergencyControls = Выключатель резервного Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ†ÐµÐ¿ÐµÐ¹ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ +Common.720.Wiper = Включение ÑтеклоочиÑÑ‚Ð¸Ñ‚ÐµÐ»Ñ + +Common.720.AccelRate = Включение режима "Подъём" +Common.720.EBrakeAdd = Увеличение уÑтавки резервного тормоза +Common.720.EBrakeRelease = Уменьшение уÑтавки резервного тормоза +Common.720.EBrakeToggle = Включение резервного тормоза +Common.720.EmergencyBrake = Включение ÑкÑтренного тормоза +Common.720.DoorClose = Закрытие дверей +Common.720.AttentionMessage = Кнопка воÑприÑÑ‚Ð¸Ñ ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ + + +Common.720.DoorSelectL = Выбор левых дверей +Common.720.DoorSelectR = Выбор правых дверей +Common.720.DoorBlock = Движение без ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ +Common.720.KDL = Открытие левых дверей +Common.720.KDP = Открытие правых дверей + +Common.Vityaz.F1 = ВитÑзь: F1 +Common.Vityaz.F2 = ВитÑзь: Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ñтраница +Common.Vityaz.F3 = ВитÑзь: ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ñтраница +Common.Vityaz.F4 = ВитÑзь: Штатный режим +Common.Vityaz.1 = ВитÑзь: 1 +Common.Vityaz.4 = ВитÑзь: 4 +Common.Vityaz.7 = ВитÑзь: 7 +Common.Vityaz.2 = ВитÑзь: 2 +Common.Vityaz.5 = ВитÑзь: 5 +Common.Vityaz.8 = ВитÑзь: 8 +Common.Vityaz.0 = ВитÑзь: 0 +Common.Vityaz.3 = ВитÑзь: 3 +Common.Vityaz.6 = ВитÑзь: 6 +Common.Vityaz.9 = ВитÑзь: 9 +Common.Vityaz.F5 = ВитÑзь: ЗВ +Common.Vityaz.F6 = ВитÑзь: Вверх\СкороÑть +Common.Vityaz.F7 = ВитÑзь: Вниз\Токи +Common.Vityaz.F8 = ВитÑзь: Ввод\Вагонное оборудование +Common.Vityaz.F9 = ВитÑзь: Выбор\Управление вагонным оборудованием + +Common.720.EmerX1 = Резервный пуÑк в режиме ход 1 +Common.720.EmerX2 = Резервный пуÑк в режиме ход 2 +Common.720.EmerCloseDoors = Резервное закрытие дверей +Common.720.EmergencyDoors = Включение резервного ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÑŒÐ¼Ð¸ +Common.720.BRU = Разъединитель БРУ (ГВ) + +#gmod_subway_81-720 +#Buttons: + +Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode- = @[Common.720.VentCMode] @[Common.ALL.CCW] +Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode+ = @[Common.720.VentCMode] @[Common.ALL.CW] +Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode+ = @[Common.720.VentHMode+] +Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode- = @[Common.720.VentHMode-] +Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode- = @[Common.720.VentSMode-] +Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode+ = @[Common.720.VentSMode+] + +Entities.gmod_subway_81-720.Buttons.RV.EmerX1Set = @[Common.720.EmerX1] +Entities.gmod_subway_81-720.Buttons.RV.EmerX2Set = @[Common.720.EmerX2] +Entities.gmod_subway_81-720.Buttons.RV.EmerCloseDoorsSet = @[Common.720.EmerCloseDoors] +Entities.gmod_subway_81-720.Buttons.RV.EmergencyDoorsToggle = @[Common.720.EmergencyDoors] + +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF1Set = @[Common.Vityaz.F1] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF2Set = @[Common.Vityaz.F2] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF3Set = @[Common.Vityaz.F3] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF4Set = @[Common.Vityaz.F4] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz1Set = @[Common.Vityaz.1] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz4Set = @[Common.Vityaz.4] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz7Set = @[Common.Vityaz.7] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz2Set = @[Common.Vityaz.2] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz5Set = @[Common.Vityaz.5] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz8Set = @[Common.Vityaz.8] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz0Set = @[Common.Vityaz.0] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz3Set = @[Common.Vityaz.3] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz6Set = @[Common.Vityaz.6] +Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz9Set = @[Common.Vityaz.9] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF5Set = @[Common.Vityaz.F5] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF6Set = @[Common.Vityaz.F6] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF7Set = @[Common.Vityaz.F7] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF8Set = @[Common.Vityaz.F8] +Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF9Set = @[Common.Vityaz.F9] + +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF1Toggle = @[Common.720.SF1] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF2Toggle = @[Common.720.SF2] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF3Toggle = @[Common.720.SF3] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF4Toggle = @[Common.720.SF4] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF5Toggle = @[Common.720.SF5] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF6Toggle = @[Common.720.SF6] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF7Toggle = @[Common.720.SF7] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF8Toggle = @[Common.720.SF8] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF9Toggle = @[Common.720.SF9] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF10Toggle = @[Common.720.SF10] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF11Toggle = @[Common.720.SF11] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF12Toggle = @[Common.720.SF12] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF13Toggle = @[Common.720.SF13] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF14Toggle = @[Common.720.SF14] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF15Toggle = @[Common.720.SF15] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF16Toggle = @[Common.720.SF16] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF17Toggle = @[Common.720.SF17] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF18Toggle = @[Common.720.SF18] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF19Toggle = @[Common.720.SF19] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF20Toggle = @[Common.720.SF20] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF21Toggle = @[Common.720.SF21] +Entities.gmod_subway_81-720.Buttons.BackPPZ.SF22Toggle = @[Common.720.SF22] + +Entities.gmod_subway_81-720.Buttons.BackDown.Pant1Toggle = @[Common.720.Pant1] +Entities.gmod_subway_81-720.Buttons.BackDown.Pant2Toggle = @[Common.720.Pant2] +Entities.gmod_subway_81-720.Buttons.BackDown.Vent1Toggle = @[Common.720.Vent1] +Entities.gmod_subway_81-720.Buttons.BackDown.Vent2Toggle = @[Common.720.Vent2] +Entities.gmod_subway_81-720.Buttons.BackDown.PassLightToggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-720.Buttons.BackDown.CabLightToggle = @[Common.ALL.CabLights] +Entities.gmod_subway_81-720.Buttons.BackDown.Headlights1Toggle = @[Common.ALL.VF1] +Entities.gmod_subway_81-720.Buttons.BackDown.Headlights2Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_81-720.Buttons.BackDown.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-720.Buttons.BackDown.TorecDoorsToggle = @[Common.720.TorecDoors] +Entities.gmod_subway_81-720.Buttons.BackDown.BBERToggle = @[Common.720.BBER] +Entities.gmod_subway_81-720.Buttons.BackDown.BBEToggle = @[Common.720.BBE] +Entities.gmod_subway_81-720.Buttons.BackDown.CompressorToggle = @[Common.ALL.MK] +Entities.gmod_subway_81-720.Buttons.BackDown.CabLightStrengthToggle = @[Common.720.CabLightStrength] +Entities.gmod_subway_81-720.Buttons.BackDown.AppLights1Toggle = @[Common.720.AppLights] +Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock- = @[Common.720.BARSBlock] @[Common.ALL.CCW] +Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock+ = @[Common.720.BARSBlock] @[Common.ALL.CW] +Entities.gmod_subway_81-720.Buttons.BackDown.BatteryToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-720.Buttons.BackDown.ALSFreqToggle = @[Common.ARS.Freq] + +Entities.gmod_subway_81-720.Buttons.PUU.!DoorsClosed = @[Common.ALL.LSD] +Entities.gmod_subway_81-720.Buttons.PUU.StandToggle = @[Common.720.Stand] @[Common.ALL.Unsused2] +Entities.gmod_subway_81-720.Buttons.PUU.TickerToggle = @[Common.720.Ticker] +Entities.gmod_subway_81-720.Buttons.PUU.KAHToggle = @[Common.720.KAH] +Entities.gmod_subway_81-720.Buttons.PUU.KAHkToggle = @[Common.720.KAHK] +Entities.gmod_subway_81-720.Buttons.PUU.ALSToggle = @[Common.720.ALS] +Entities.gmod_subway_81-720.Buttons.PUU.ALSkToggle = @[Common.720.ALSK] +Entities.gmod_subway_81-720.Buttons.PUU.FDepotToggle = @[Common.720.FDepot] @[Common.ALL.Unsused2] +Entities.gmod_subway_81-720.Buttons.PUU.!HVoltage = @[Common.720.HVoltage] +Entities.gmod_subway_81-720.Buttons.PUU.PassSchemeToggle = @[Common.720.PassScheme] +Entities.gmod_subway_81-720.Buttons.PUU.EmergencyCompressorSet = @[Common.720.EmergencyCompressor] +Entities.gmod_subway_81-720.Buttons.PUU.EnableBVSet = @[Common.720.EnableBV] +Entities.gmod_subway_81-720.Buttons.PUU.DisableBVSet = @[Common.720.DisableBV] +Entities.gmod_subway_81-720.Buttons.PUU.RingSet = @[Common.720.Ring] +Entities.gmod_subway_81-720.Buttons.PUU.R_Program2Set = @[Common.ALL.Program2] +Entities.gmod_subway_81-720.Buttons.PUU.R_AnnouncerToggle = @[Common.720.R_Announcer] +Entities.gmod_subway_81-720.Buttons.PUU.R_LineToggle = @[Common.720.R_Line] +Entities.gmod_subway_81-720.Buttons.PUU.R_EmerSet = @[Common.720.R_Emer] +Entities.gmod_subway_81-720.Buttons.PUU.R_Program1Set = @[Common.720.R_Program1] +Entities.gmod_subway_81-720.Buttons.PUU.EnableBVEmerSet = @[Common.720.EnableBVEmer] +Entities.gmod_subway_81-720.Buttons.PUU.EmergencyControlsToggle = @[Common.720.EmergencyControls] +Entities.gmod_subway_81-720.Buttons.PUU.WiperToggle = @[Common.720.Wiper] +Entities.gmod_subway_81-720.Buttons.PUU.!VDop = @[Common.ALL.SpeedAccept] +Entities.gmod_subway_81-720.Buttons.PUU.!VFact = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-720.Buttons.PUU.!VPred = @[Common.ALL.SpeedAttent] +Entities.gmod_subway_81-720.Buttons.PUU.!VFact2 = @[Common.ALL.SpeedCurr] +Entities.gmod_subway_81-720.Buttons.PUU.!Acc = @[Common.720.Accel] +Entities.gmod_subway_81-720.Buttons.PUU.!Forw = @[Common.720.Forward] +Entities.gmod_subway_81-720.Buttons.PUU.!Back = @[Common.720.Backward] + +Entities.gmod_subway_81-720.Buttons.PUR.AccelRateSet = @[Common.720.AccelRate] +Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeAddSet = @[Common.720.EBrakeAdd] +Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeReleaseSet = @[Common.720.EBrakeRelease] +Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeToggle = @[Common.720.EBrakeToggle] +Entities.gmod_subway_81-720.Buttons.PUR.EmergencyBrakeToggle = @[Common.720.EmergencyBrake] +Entities.gmod_subway_81-720.Buttons.PUR.DoorCloseToggle = @[Common.720.DoorClose] +Entities.gmod_subway_81-720.Buttons.PUR.AttentionMessageSet = @[Common.720.AttentionMessage] +Entities.gmod_subway_81-720.Buttons.PUR.AttentionSet = @[Common.ARS.KB] +Entities.gmod_subway_81-720.Buttons.PUR.AttentionBrakeSet = @[Common.ARS.KVT] +Entities.gmod_subway_81-720.Buttons.PUR.HornBSet = @[Common.ALL.Horn] +Entities.gmod_subway_81-720.Buttons.PUR.DoorRightSet = @[Common.720.KDP] +Entities.gmod_subway_81-720.Buttons.PUR.!DoorRightLamp = @[Common.ALL.KDPL] + +Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectLToggle = @[Common.720.DoorSelectL] +Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectRToggle = @[Common.720.DoorSelectR] +Entities.gmod_subway_81-720.Buttons.PUL.DoorBlockToggle = @[Common.720.DoorBlock] +Entities.gmod_subway_81-720.Buttons.PUL.!DoorLeftLamp = @[Common.ALL.KDLL] +Entities.gmod_subway_81-720.Buttons.PUL.DoorLeftSet = @[Common.720.KDL] + +Entities.gmod_subway_81-720.Buttons.PVZ.SFV1Toggle = @[Common.720.SFV1] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV2Toggle = @[Common.720.SFV2] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV3Toggle = @[Common.720.SFV3] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV4Toggle = @[Common.720.SFV4] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV5Toggle = @[Common.720.SFV5] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV6Toggle = @[Common.720.SFV6] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV7Toggle = @[Common.720.SFV7] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV8Toggle = @[Common.720.SFV8] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV9Toggle = @[Common.720.SFV9] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV10Toggle = @[Common.720.SFV10] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV11Toggle = @[Common.720.SFV11] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV12Toggle = @[Common.720.SFV12] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV13Toggle = @[Common.720.SFV13] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV14Toggle = @[Common.720.SFV14] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV15Toggle = @[Common.720.SFV15] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV16Toggle = @[Common.720.SFV16] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV17Toggle = @[Common.720.SFV17] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV18Toggle = @[Common.720.SFV18] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV19Toggle = @[Common.720.SFV19] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV20Toggle = @[Common.720.SFV20] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV21Toggle = @[Common.720.SFV21] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV22Toggle = @[Common.720.SFV22] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV23Toggle = @[Common.720.SFV23] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV24Toggle = @[Common.720.SFV24] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV25Toggle = @[Common.720.SFV25] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV26Toggle = @[Common.720.SFV26] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV27Toggle = @[Common.720.SFV27] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV28Toggle = @[Common.720.SFV28] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV29Toggle = @[Common.720.SFV29] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV30Toggle = @[Common.720.SFV30] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV31Toggle = @[Common.720.SFV31] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV32Toggle = @[Common.720.SFV32] +Entities.gmod_subway_81-720.Buttons.PVZ.SFV33Toggle = @[Common.720.SFV33] + +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPMenuSet = @[Common.ASNP.ASNPMenu] +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPUpSet = @[Common.ASNP.ASNPUp] +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPDownSet = @[Common.ASNP.ASNPDown] +Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPOnToggle = @[Common.ASNP.ASNPOn] + +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1USet = @[Common.IGLA.Button1Up] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1Set = @[Common.IGLA.Button1] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1DSet = @[Common.IGLA.Button1Down] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2USet = @[Common.IGLA.Button2Up] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2Set = @[Common.IGLA.Button2] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2DSet = @[Common.IGLA.Button2Down] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLASR = @[Common.IGLA.IGLASR] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLARX = @[Common.IGLA.IGLARX] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAErr = @[Common.IGLA.IGLAErr] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAOSP = @[Common.IGLA.IGLAOSP] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAPI = @[Common.IGLA.IGLAPI] +Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAOff = @[Common.IGLA.IGLAOff] + +Entities.gmod_subway_81-720.Buttons.BTO.K29Toggle = @[Common.ALL.KRMH] +Entities.gmod_subway_81-720.Buttons.BTO.UAVAToggle = @[Common.ALL.UAVA2] + +Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +Entities.gmod_subway_81-720.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-720.Buttons.RearDoor1.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-720.Buttons.CabinDoorR.CabinDoorRight = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-720.Buttons.CabinDoorL.CabinDoorLeft = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-720.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-720.Buttons.PassengerDoor2.PassengerDoor = @[Common.ALL.PassDoor] + +Entities.gmod_subway_81-720.Buttons.VoltHelper2.!HV = @[Common.ALL.HighVoltage] +Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I1_3 = @[Common.ALL.EnginesCurrent1] +Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I2_4 = @[Common.ALL.EnginesCurrent2] +Entities.gmod_subway_81-720.Buttons.PneumoHelper2.!BrakeTrainLine = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-720.Buttons.PneumoHelper1.!BrakeCylinder = @[Common.ALL.BCPressure] +Entities.gmod_subway_81-720.Buttons.VoltHelper1.!Battery = @[Common.ALL.BatteryVoltage] +Entities.gmod_subway_81-720.Buttons.GV.GVToggle = @[Common.720.BRU] + +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber1- = @[Common.ALL.RouteNumber1-] +Entities.gmod_subway_81-720.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] +Entities.gmod_subway_81-720.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] +Entities.gmod_subway_81-720.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +#gmod_subway_81-721 +Entities.gmod_subway_81-721.Buttons.Battery.BatteryToggle = @[Common.ALL.VB] +Entities.gmod_subway_81-721.Buttons.GV.GVToggle = @[Common.720.BRU] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV1Toggle = @[Common.720.SFV1] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV2Toggle = @[Common.720.SFV2] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV3Toggle = @[Common.720.SFV3] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV4Toggle = @[Common.720.SFV4] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV5Toggle = @[Common.720.SFV5] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV6Toggle = @[Common.720.SFV6] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV7Toggle = @[Common.720.SFV7] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV8Toggle = @[Common.720.SFV8] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV9Toggle = @[Common.720.SFV9] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV10Toggle = @[Common.720.SFV10] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV11Toggle = @[Common.720.SFV11] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV12Toggle = @[Common.720.SFV12] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV13Toggle = @[Common.720.SFV13] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV14Toggle = @[Common.720.SFV14] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV15Toggle = @[Common.720.SFV15] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV16Toggle = @[Common.720.SFV16] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV17Toggle = @[Common.720.SFV17] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV18Toggle = @[Common.720.SFV18] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV19Toggle = @[Common.720.SFV19] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV20Toggle = @[Common.720.SFV20] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV21Toggle = @[Common.720.SFV21] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV22Toggle = @[Common.720.SFV22] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV23Toggle = @[Common.720.SFV23] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV24Toggle = @[Common.720.SFV24] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV25Toggle = @[Common.720.SFV25] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV26Toggle = @[Common.720.SFV26] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV27Toggle = @[Common.720.SFV27] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV28Toggle = @[Common.720.SFV28] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV29Toggle = @[Common.720.SFV29] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV30Toggle = @[Common.720.SFV30] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV31Toggle = @[Common.720.SFV31] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV32Toggle = @[Common.720.SFV32] +Entities.gmod_subway_81-721.Buttons.PVZ.SFV33Toggle = @[Common.720.SFV33] + +Entities.gmod_subway_81-721.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-721.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +#Spawner: + +Entities.gmod_subway_81-720.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-720.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-720.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-720.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-720.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-720.Spawner.PassSchemesInvert.Name = @[Common.Spawner.SchemeInvert] +Entities.gmod_subway_81-720.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-720.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-720.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-720.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-720.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] +]] diff --git a/lua/metrostroi_data/languages/ru_722.lua b/lua/metrostroi_data/languages/ru_722.lua new file mode 100644 index 0000000..e01f950 --- /dev/null +++ b/lua/metrostroi_data/languages/ru_722.lua @@ -0,0 +1,374 @@ +return [[ +#81-722 + +[ru] + +#Cameras: +Train.722.Breakers = ÐвтоматичеÑкие выключатели +Train.722.PU2_1 = Панель кнопок +Train.722.PU2_2 = Ð’Ñпомогательный пульт +Train.722.Vityaz = Монитор СÐУ "ВИТЯЗЬ-СП" +Train.722.SARMAT = Монитор ÑиÑтемы ЦИС +Train.722.CabLights = Пульт оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ +Train.722.Disconnects = Концевые краны +Train.722.KRMH = Краны КРМШ и РВТБ + +Train.Buttons.BattOn = Ð‘Ð°Ñ‚Ð°Ñ€ÐµÑ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð° +Train.Buttons.BattOff = Ð‘Ð°Ñ‚Ð°Ñ€ÐµÑ Ð²Ñ‹ÐºÐ»ÑŽÑ‡Ð°ÐµÑ‚ÑÑ +Train.Buttons.VentEmer = Ðварийное +Train.Buttons.VentAuto = ÐвтоматичеÑкое +Train.Buttons.Vent1/2 = Половина вентилÑторов +Train.Buttons.VentAll = Ð’Ñе вентилÑторы + +Train.Buttons.VRUAH = Ðварийный ход +Train.Buttons.VRUOn = Ручное включение +Train.Buttons.PantSC = Включение ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¾Ð·Ð°Ð¼Ñ‹ÐºÐ°Ñ‚ÐµÐ»Ñ +Train.Buttons.DoorCloseA = ÐвтоматичеÑкое закрытие (Ñ Ñигналом) +Train.Buttons.DoorCloseM = Ручное закрытие (без Ñигнала) +Train.Buttons.AHActive = Ðктивно резервное управление + +#######Buttons########### +Common.722.MirrorHeating = Включение Ð¾Ñ‚Ð¾Ð¿Ð»ÐµÐ½Ð¸Ñ Ð·ÐµÑ€ÐºÐ°Ð» +Common.722.EmergencyDrive = Резервный пуÑк в режиме аварийного хода +Common.722.Microphone = Включение микрофона +Common.722.LRS = Лампа аварийного Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ñ Ñ€Ð°Ð´Ð¸Ð¾Ñтанции от батареи +Common.722.LAVS = Лампа низкого Ð´Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² тормозной магиÑтрали +Common.722.LRU = Лампа выключенного ÑоÑтоÑÐ½Ð¸Ñ Ñ€ÐµÐ»Ðµ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ +Common.722.GlassWasher = Омыватель Ñтекла +Common.722.GlassCleaner = СтеклоочиÑтитель +Common.722.EmergencyBrakeTPlus = Ðварийный тормоз (режим Т+) +Common.722.EmergencyBrakeTPlusK = Крышка кнопки "Ðварийный тормоз" +Common.722.KRO = Ðаправление Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ + +Common.722.PSNToggle = Включение зарÑдки батареи от внешнего иÑточника +Common.722.BattOn = Включение иÑточника Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ñ Ð±Ð¾Ñ€Ñ‚Ð¾Ð²Ð¾Ð¹ Ñети +Common.722.BattOff = Отключение иÑточника Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ñ Ð±Ð¾Ñ€Ñ‚Ð¾Ð²Ð¾Ð¹ Ñети +Common.722.TorecDoorUnlock = Разблокировка торцевых дверей +Common.722.SCEnabled = Лампа Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¾Ð·Ð°Ð¼Ñ‹ÐºÐ°Ñ‚ÐµÐ»Ñ +Common.722.LSOSD = Лампа работы Ñветильника Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñтанционных дверей + +Common.722.PassVent = Включение вентилÑции Ñалона +Common.722.VRU = Переключение режимов ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ +Common.722.VADToggle = Движение без ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ +Common.722.VAHToggle = Движение без педали бдительноÑти +Common.722.EmergencyRadioPowerToggle = Ðварийное питание радиоÑтанции +Common.722.BARSMode = Переключатель полукомплектов БÐРС +Common.722.PantSC = Токоприёмники и короткозамыкатель + +Common.SARMAT.Up = СÐРМÐТ: Вверх +Common.SARMAT.Down = СÐРМÐТ: Вниз +Common.SARMAT.Enter = СÐРМÐТ: Enter +Common.SARMAT.Esc = СÐРМÐТ: Esc +Common.SARMAT.F1 = СÐРМÐТ: F1 +Common.SARMAT.F2 = СÐРМÐТ: F2 +Common.SARMAT.F3 = СÐРМÐТ: F3 +Common.SARMAT.F4 = СÐРМÐТ: F4 +Common.SARMAT.Path = СÐРМÐТ: Путь +Common.SARMAT.Line = СÐРМÐТ: Ð›Ð¸Ð½Ð¸Ñ +Common.SARMAT.Zero = СÐРМÐТ: УÑтановка в начало +Common.SARMAT.Start = СÐРМÐТ: ПуÑк + +#Autobreakers +Common.722.SF1 = SF1: Ð‘Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ñ Ñеть (управление) +Common.722.SF2 = SF2: ÐÐºÑ‚Ð¸Ð²Ð½Ð°Ñ ÐºÐ°Ð±Ð¸Ð½Ð° +Common.722.SF3 = SF3: Управление оÑновное +Common.722.SF4 = SF4: Управление резервное +Common.722.SF5 = SF5: Управление РВТБ +Common.722.SF6 = SF6: Питание крана машиниÑта +Common.722.SF7 = SF7: Управление дверьми +Common.722.SF8 = SF8: БÐРС 1 +Common.722.SF9 = SF9: БÐРС 2 +Common.722.UPO = SF: УПО1 +Common.722.SF10 = SF10: БРПИ-М1 +Common.722.SF11 = SF11: БРПИ-М2 +Common.722.SF12 = SF12: ÐŸÐ¾Ð¶Ð°Ñ€Ð½Ð°Ñ ÑиÑтема +Common.722.SF13 = SF13: Токоприёмник, короткозамыкатель +Common.722.SF14 = SF14: РадиоÑвÑзь 1 +Common.722.SF15 = SF15: РадиоÑвÑзь 2 +Common.722.SF16 = SF16: ЦИС 1 (монитор) +Common.722.SF17 = SF17: ЦИС 2 (цифровой информационный комплекÑ) +Common.722.SF18 = SF18: ЦИС 3 +Common.722.SF19 = SF19: БУКП, УПИ +Common.722.SF20 = SF20: Монитор +Common.722.SF21 = SF21: ÐžÑ€Ð¸ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ +Common.722.SF22 = SF22: Габаритные огни от батареи +Common.722.SF23 = SF23: Фары, габаритные огни +Common.722.SF24 = SF24: Светильник Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñтанционных дверей +Common.722.SF25 = SF25: ОÑвещение кабины +Common.722.SF26 = SF26: Кондиционер кабины +Common.722.SF27 = SF27: СтеклоочиÑтитель, омыватель, тифон + +Common.722.SF31 = SF31: Поездной питающий провод +Common.722.SF32 = SF32: Ð‘Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ñ Ñеть управление +Common.722.SF33 = SF33: Питание цепей ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ +Common.722.SF34 = SF34: ЦИС по левой Ñтороне +Common.722.SF35 = SF35: ЦИС по правой Ñтороне +Common.722.SF36 = SF36: Ð‘Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ñ ÑÐ¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ +Common.722.SF37 = SF37: Отжатие токоприёмников +Common.722.SF38 = SF38: Резерв +Common.722.SF41 = SF41: Двери открытие левые +Common.722.SF42 = SF42: Двери открытие правые +Common.722.SF43 = SF43: Двери закрытие +Common.722.SF44 = SF44: Двери торцевые +Common.722.SF45 = SF45: ОÑвещение Ñалона питание +Common.722.SF46 = SF46: ОÑвещение Ñалона аварийное +Common.722.SF47 = SF47: ВентилÑÑ†Ð¸Ñ 1 группа +Common.722.SF48 = SF48: ВентилÑÑ†Ð¸Ñ 2 группа +Common.722.SF49 = SF49: Счётчик +Common.722.SF51 = SF51: Блок ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð°Ð³Ð¾Ð½Ð¾Ð¼ +Common.722.SF52 = SF52: БОДВ +Common.722.SF53 = SF53: Преобразователь ÑобÑтвенных нужд +Common.722.SF54 = SF54: ОÑушитель +Common.722.SF55 = SF55: Блок ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ„Ñ€Ð¸ÐºÑ†Ð¸Ð¾Ð½Ð½Ñ‹Ð¼ тормозом +Common.722.SF56 = SF56: Инвертор +Common.722.SF57 = SF57: Обогрев инвертора +Common.722.SF58 = SF58: Цепи ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð°Ð³Ð¾Ð½Ð¾Ð¼ оÑновное питание +Common.722.SF59 = SF59: Цепи ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð°Ð³Ð¾Ð½Ð¾Ð¼ резервное питание + +#gmod_subway_81-722 +#Buttons: +Entities.gmod_subway_81-722.Buttons.PU1.MirrorHeatingSet = @[Common.722.MirrorHeating] +Entities.gmod_subway_81-722.Buttons.PU1.DoorLeft2Set = @[Common.720.KDL] +Entities.gmod_subway_81-722.Buttons.PU1.DoorBackSet = @[Common.ALL.KDPH] +Entities.gmod_subway_81-722.Buttons.PU1.EmergencyDriveSet = @[Common.722.EmergencyDrive] +Entities.gmod_subway_81-722.Buttons.PU1.MicrophoneSet = @[Common.722.Microphone] +Entities.gmod_subway_81-722.Buttons.PU1.DoorLeft1Set = @[Common.720.KDL] + +Entities.gmod_subway_81-722.Buttons.PU2.ARSToggle = @[Common.ALL.ARS] +Entities.gmod_subway_81-722.Buttons.PU2.ALSToggle = @[Common.ALL.ALS] +Entities.gmod_subway_81-722.Buttons.PU2.GlassWasherSet = @[Common.722.GlassWasher] +Entities.gmod_subway_81-722.Buttons.PU2.GlassCleaner+ = @[Common.722.GlassCleaner] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.PU2.GlassCleaner- = @[Common.722.GlassCleaner] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeTPlusKToggle = @[Common.722.EmergencyBrakeTPlusK] +Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeTPlusSet = @[Common.722.EmergencyBrakeTPlus] +Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeToggle = @[Common.720.EmergencyBrake] +Entities.gmod_subway_81-722.Buttons.PU2.VigilanceSet = @[Common.ARS.KB] +Entities.gmod_subway_81-722.Buttons.PU2.Headlights+ = @[Common.ALL.VF] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.PU2.Headlights- = @[Common.ALL.VF] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.PU2.DoorSelectToggle = @[Common.ALL.VSD] +Entities.gmod_subway_81-722.Buttons.PU2.DoorClose+ = @[Common.720.DoorClose] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.PU2.DoorClose- = @[Common.720.DoorClose] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.PU2.DoorRightSet = @[Common.720.KDP] + +Entities.gmod_subway_81-722.Buttons.BI3.KRO+ = @[Common.722.KRO] @[Common.ALL.Up] +Entities.gmod_subway_81-722.Buttons.BI3.KRO- = @[Common.722.KRO] @[Common.ALL.Down] +Entities.gmod_subway_81-722.Buttons.BI3.RingSet = @[Common.ALL.Ring] +Entities.gmod_subway_81-722.Buttons.BI3.Compressor- = @[Common.ALL.MK] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.BI3.Compressor+ = @[Common.ALL.MK] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.BI3.!BrakeTrainLine = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_81-722.Buttons.BI3.!BrakeCylinder = @[Common.ALL.BCPressure] + +Entities.gmod_subway_81-722.Buttons.PPZB.PSNToggleSet = @[Common.722.PSNToggle] +Entities.gmod_subway_81-722.Buttons.PPZB.BattOnSet = @[Common.722.BattOn] +Entities.gmod_subway_81-722.Buttons.PPZB.BattOffSet = @[Common.722.BattOff] +Entities.gmod_subway_81-722.Buttons.PPZB.TorecDoorUnlockSet = @[Common.722.TorecDoorUnlock] +Entities.gmod_subway_81-722.Buttons.PPZB.SCEnable = @[Common.722.SCEnabled] +Entities.gmod_subway_81-722.Buttons.PPZB.SOSD = @[Common.722.LSOSD] + +Entities.gmod_subway_81-722.Buttons.PVM.PassLightToggle = @[Common.ALL.PassLights] +Entities.gmod_subway_81-722.Buttons.PVM.PassVent- = @[Common.722.PassVent] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.PassVent+ = @[Common.722.PassVent] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.VKFToggle = @[Common.ALL.VKF] +Entities.gmod_subway_81-722.Buttons.PVM.ParkingBrakeToggle = @[Common.ALL.ParkingBrake] +Entities.gmod_subway_81-722.Buttons.PVM.VRDToggle = @[Common.ARS.VRD] +Entities.gmod_subway_81-722.Buttons.PVM.SOSDEnableToggle = @[Common.ALL.VSOSD] +Entities.gmod_subway_81-722.Buttons.PVM.VRU- = @[Common.722.VRU] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.VRU+ = @[Common.722.VRU] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.VADToggle = @[Common.722.VADToggle] +Entities.gmod_subway_81-722.Buttons.PVM.VAHToggle = @[Common.722.VAHToggle] +Entities.gmod_subway_81-722.Buttons.PVM.EmergencyRadioPowerToggle = @[Common.722.EmergencyRadioPowerToggle] +Entities.gmod_subway_81-722.Buttons.PVM.BARSMode- = @[Common.722.BARSMode] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.BARSMode+ = @[Common.722.BARSMode] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.PantSC- = @[Common.722.PantSC] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.PVM.PantSC+ = @[Common.722.PantSC] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.PVM.RCARSToggle = @[Common.ALL.RCARS] + +Entities.gmod_subway_81-722.Buttons.HelperLamps.!LRD = @[Common.ARS.LRD] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!LPT = @[Common.ALL.BrT] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!RS = @[Common.722.LRS] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!AVS = @[Common.722.LAVS] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!LSD = @[Common.ALL.LSD] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!RU = @[Common.722.LRU] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!04 = @[Common.ARS.N4] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!00 = @[Common.ARS.0] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!40 = @[Common.ARS.40] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!60 = @[Common.ARS.60] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!70 = @[Common.ARS.70] +Entities.gmod_subway_81-722.Buttons.HelperLamps.!80 = @[Common.ARS.80] + +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatUpSet = @[Common.SARMAT.Up] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatDownSet = @[Common.SARMAT.Down] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatEnterSet = @[Common.SARMAT.Enter] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatEscSet = @[Common.SARMAT.Esc] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF1Set = @[Common.SARMAT.F1] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF2Set = @[Common.SARMAT.F2] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF3Set = @[Common.SARMAT.F3] +Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF4Set = @[Common.SARMAT.F4] + +Entities.gmod_subway_81-722.Buttons.BMP.SarmatPathSet = @[Common.SARMAT.Path] +Entities.gmod_subway_81-722.Buttons.BMP.SarmatLineSet = @[Common.SARMAT.Line] +Entities.gmod_subway_81-722.Buttons.BMP.SarmatZeroSet = @[Common.SARMAT.Zero] +Entities.gmod_subway_81-722.Buttons.BMP.SarmatStartSet = @[Common.SARMAT.Start] + +Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber1Set = @[Common.ALL.RouteNumber1+] +Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber2Set = @[Common.ALL.RouteNumber2+] +Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber3Set = @[Common.ALL.RouteNumber3+] + +Entities.gmod_subway_81-722.Buttons.Lighting.CabinLight- = @[Common.ALL.CabLights] @[Common.ALL.CCW] +Entities.gmod_subway_81-722.Buttons.Lighting.CabinLight+ = @[Common.ALL.CabLights] @[Common.ALL.CW] +Entities.gmod_subway_81-722.Buttons.Lighting.PanelLightToggle = @[Common.ALL.PanelLights] + +Entities.gmod_subway_81-722.Buttons.PPZ.SF1Toggle = @[Common.722.SF1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF2Toggle = @[Common.722.SF2] +Entities.gmod_subway_81-722.Buttons.PPZ.SF3Toggle = @[Common.722.SF3] +Entities.gmod_subway_81-722.Buttons.PPZ.SF4Toggle = @[Common.722.SF4] +Entities.gmod_subway_81-722.Buttons.PPZ.SF5Toggle = @[Common.722.SF5] +Entities.gmod_subway_81-722.Buttons.PPZ.SF6Toggle = @[Common.722.SF6] +Entities.gmod_subway_81-722.Buttons.PPZ.SF7Toggle = @[Common.722.SF7] +Entities.gmod_subway_81-722.Buttons.PPZ.SF8Toggle = @[Common.722.SF8] +Entities.gmod_subway_81-722.Buttons.PPZ.SF9Toggle = @[Common.722.SF9] +Entities.gmod_subway_81-722.Buttons.PPZ.R_UPOToggle = @[Common.722.UPO] +Entities.gmod_subway_81-722.Buttons.PPZ.SF01Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF10Toggle = @[Common.722.SF10] +Entities.gmod_subway_81-722.Buttons.PPZ.SF11Toggle = @[Common.722.SF11] +Entities.gmod_subway_81-722.Buttons.PPZ.SF12Toggle = @[Common.722.SF12] +Entities.gmod_subway_81-722.Buttons.PPZ.SF13Toggle = @[Common.722.SF13] +Entities.gmod_subway_81-722.Buttons.PPZ.SF02Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF14Toggle = @[Common.722.SF14] +Entities.gmod_subway_81-722.Buttons.PPZ.SF15Toggle = @[Common.722.SF15] +Entities.gmod_subway_81-722.Buttons.PPZ.SF16Toggle = @[Common.722.SF16] +Entities.gmod_subway_81-722.Buttons.PPZ.SF17Toggle = @[Common.722.SF17] +Entities.gmod_subway_81-722.Buttons.PPZ.SF18Toggle = @[Common.722.SF18] +Entities.gmod_subway_81-722.Buttons.PPZ.SF19Toggle = @[Common.722.SF19] +Entities.gmod_subway_81-722.Buttons.PPZ.SF20Toggle = @[Common.722.SF20] +Entities.gmod_subway_81-722.Buttons.PPZ.SF21Toggle = @[Common.722.SF21] +Entities.gmod_subway_81-722.Buttons.PPZ.SF22Toggle = @[Common.722.SF22] +Entities.gmod_subway_81-722.Buttons.PPZ.SF23Toggle = @[Common.722.SF23] +Entities.gmod_subway_81-722.Buttons.PPZ.SF24Toggle = @[Common.722.SF24] +Entities.gmod_subway_81-722.Buttons.PPZ.SF25Toggle = @[Common.722.SF25] +Entities.gmod_subway_81-722.Buttons.PPZ.SF26Toggle = @[Common.722.SF26] +Entities.gmod_subway_81-722.Buttons.PPZ.SF27Toggle = @[Common.722.SF27] +Entities.gmod_subway_81-722.Buttons.PPZ.SF03Toggle = @[Common.ALL.Unsused1] +Entities.gmod_subway_81-722.Buttons.PPZ.SF04Toggle = @[Common.ALL.Unsused1] + +Entities.gmod_subway_81-722.Buttons.PVZ.SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-722.Buttons.PVZ.1:SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-722.Buttons.PVZ.SF32Toggle = @[Common.722.SF32] +Entities.gmod_subway_81-722.Buttons.PVZ.SF33Toggle = @[Common.722.SF33] +Entities.gmod_subway_81-722.Buttons.PVZ.SF34Toggle = @[Common.722.SF34] +Entities.gmod_subway_81-722.Buttons.PVZ.SF35Toggle = @[Common.722.SF35] +Entities.gmod_subway_81-722.Buttons.PVZ.SF36Toggle = @[Common.722.SF36] +Entities.gmod_subway_81-722.Buttons.PVZ.SF37Toggle = @[Common.722.SF37] +Entities.gmod_subway_81-722.Buttons.PVZ.SF38Toggle = @[Common.722.SF38] +Entities.gmod_subway_81-722.Buttons.PVZ.SF41Toggle = @[Common.722.SF41] +Entities.gmod_subway_81-722.Buttons.PVZ.SF42Toggle = @[Common.722.SF42] +Entities.gmod_subway_81-722.Buttons.PVZ.SF43Toggle = @[Common.722.SF43] +Entities.gmod_subway_81-722.Buttons.PVZ.SF44Toggle = @[Common.722.SF44] +Entities.gmod_subway_81-722.Buttons.PVZ.SF45Toggle = @[Common.722.SF45] +Entities.gmod_subway_81-722.Buttons.PVZ.SF46Toggle = @[Common.722.SF46] +Entities.gmod_subway_81-722.Buttons.PVZ.SF47Toggle = @[Common.722.SF47] +Entities.gmod_subway_81-722.Buttons.PVZ.SF48Toggle = @[Common.722.SF48] +Entities.gmod_subway_81-722.Buttons.PVZ.SF49Toggle = @[Common.722.SF49] +Entities.gmod_subway_81-722.Buttons.PVZ.SF51Toggle = @[Common.722.SF51] +Entities.gmod_subway_81-722.Buttons.PVZ.SF52Toggle = @[Common.722.SF52] +Entities.gmod_subway_81-722.Buttons.PVZ.SF53Toggle = @[Common.722.SF53] +Entities.gmod_subway_81-722.Buttons.PVZ.SF54Toggle = @[Common.722.SF54] +Entities.gmod_subway_81-722.Buttons.PVZ.SF55Toggle = @[Common.722.SF55] +Entities.gmod_subway_81-722.Buttons.PVZ.SF56Toggle = @[Common.722.SF56] +Entities.gmod_subway_81-722.Buttons.PVZ.SF57Toggle = @[Common.722.SF57] +Entities.gmod_subway_81-722.Buttons.PVZ.SF58Toggle = @[Common.722.SF58] +Entities.gmod_subway_81-722.Buttons.PVZ.SF59Toggle = @[Common.722.SF59] + +Entities.gmod_subway_81-722.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_81-722.Buttons.CabinDoorL.CabinDoorLeft = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-722.Buttons.CabinDoorR.CabinDoorRight = @[Common.ALL.CabinDoor] +Entities.gmod_subway_81-722.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-722.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_81-722.Buttons.Isolations.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.Isolations.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_81-722.Buttons.StopKran.EmergencyBrakeValveToggle = @[Common.ALL.EmergencyBrakeValve] +Entities.gmod_subway_81-722.Buttons.StopKran.UAVAToggle = @[Common.ALL.UAVA2] +Entities.gmod_subway_81-722.Buttons.BTO.K29Toggle = @[Common.ALL.KRMH] +Entities.gmod_subway_81-722.Buttons.BTO.K9Toggle = @[Common.ALL.RVTB] + +#gmod_subway_81-723 +Entities.gmod_subway_81-723.Buttons.PVZ.SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-723.Buttons.PVZ.1:SF31Toggle = @[Common.722.SF31] +Entities.gmod_subway_81-723.Buttons.PVZ.SF32Toggle = @[Common.722.SF32] +Entities.gmod_subway_81-723.Buttons.PVZ.SF33Toggle = @[Common.722.SF33] +Entities.gmod_subway_81-723.Buttons.PVZ.SF34Toggle = @[Common.722.SF34] +Entities.gmod_subway_81-723.Buttons.PVZ.SF35Toggle = @[Common.722.SF35] +Entities.gmod_subway_81-723.Buttons.PVZ.SF36Toggle = @[Common.722.SF36] +Entities.gmod_subway_81-723.Buttons.PVZ.SF37Toggle = @[Common.722.SF37] +Entities.gmod_subway_81-723.Buttons.PVZ.SF38Toggle = @[Common.722.SF38] +Entities.gmod_subway_81-723.Buttons.PVZ.SF41Toggle = @[Common.722.SF41] +Entities.gmod_subway_81-723.Buttons.PVZ.SF42Toggle = @[Common.722.SF42] +Entities.gmod_subway_81-723.Buttons.PVZ.SF43Toggle = @[Common.722.SF43] +Entities.gmod_subway_81-723.Buttons.PVZ.SF44Toggle = @[Common.722.SF44] +Entities.gmod_subway_81-723.Buttons.PVZ.SF45Toggle = @[Common.722.SF45] +Entities.gmod_subway_81-723.Buttons.PVZ.SF46Toggle = @[Common.722.SF46] +Entities.gmod_subway_81-723.Buttons.PVZ.SF47Toggle = @[Common.722.SF47] +Entities.gmod_subway_81-723.Buttons.PVZ.SF48Toggle = @[Common.722.SF48] +Entities.gmod_subway_81-723.Buttons.PVZ.SF49Toggle = @[Common.722.SF49] +Entities.gmod_subway_81-723.Buttons.PVZ.SF51Toggle = @[Common.722.SF51] +Entities.gmod_subway_81-723.Buttons.PVZ.SF52Toggle = @[Common.722.SF52] +Entities.gmod_subway_81-723.Buttons.PVZ.SF53Toggle = @[Common.722.SF53] +Entities.gmod_subway_81-723.Buttons.PVZ.SF54Toggle = @[Common.722.SF54] +Entities.gmod_subway_81-723.Buttons.PVZ.SF55Toggle = @[Common.722.SF55] +Entities.gmod_subway_81-723.Buttons.PVZ.SF56Toggle = @[Common.722.SF56] +Entities.gmod_subway_81-723.Buttons.PVZ.SF57Toggle = @[Common.722.SF57] +Entities.gmod_subway_81-723.Buttons.PVZ.SF58Toggle = @[Common.722.SF58] +Entities.gmod_subway_81-723.Buttons.PVZ.SF59Toggle = @[Common.722.SF59] + +Entities.gmod_subway_81-723.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-723.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-723.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-723.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +Entities.gmod_subway_81-723.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-723.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] + + +#gmod_subway_81-724 +#Buttons: +Entities.gmod_subway_81-724.Buttons.PVZ.SF34Toggle = @[Common.722.SF34] +Entities.gmod_subway_81-724.Buttons.PVZ.SF35Toggle = @[Common.722.SF35] +Entities.gmod_subway_81-724.Buttons.PVZ.SF36Toggle = @[Common.722.SF36] +Entities.gmod_subway_81-724.Buttons.PVZ.SF41Toggle = @[Common.722.SF41] +Entities.gmod_subway_81-724.Buttons.PVZ.SF42Toggle = @[Common.722.SF42] +Entities.gmod_subway_81-724.Buttons.PVZ.SF43Toggle = @[Common.722.SF43] +Entities.gmod_subway_81-724.Buttons.PVZ.SF44Toggle = @[Common.722.SF44] +Entities.gmod_subway_81-724.Buttons.PVZ.SF45Toggle = @[Common.722.SF45] +Entities.gmod_subway_81-724.Buttons.PVZ.SF46Toggle = @[Common.722.SF46] +Entities.gmod_subway_81-724.Buttons.PVZ.SF47Toggle = @[Common.722.SF47] +Entities.gmod_subway_81-724.Buttons.PVZ.SF48Toggle = @[Common.722.SF48] +Entities.gmod_subway_81-724.Buttons.PVZ.SF51Toggle = @[Common.722.SF51] +Entities.gmod_subway_81-724.Buttons.PVZ.SF52Toggle = @[Common.722.SF52] +Entities.gmod_subway_81-724.Buttons.PVZ.SF53Toggle = @[Common.722.SF53] +Entities.gmod_subway_81-724.Buttons.PVZ.SF54Toggle = @[Common.722.SF54] +Entities.gmod_subway_81-724.Buttons.PVZ.SF55Toggle = @[Common.722.SF55] + +Entities.gmod_subway_81-724.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_81-724.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_81-724.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_81-724.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] + +Entities.gmod_subway_81-724.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_81-724.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] + +#Spawner: +Entities.gmod_subway_81-722.Spawner.Texture.Name = @[Common.Spawner.Texture] +Entities.gmod_subway_81-722.Spawner.PassTexture.Name = @[Common.Spawner.PassTexture] +Entities.gmod_subway_81-722.Spawner.CabTexture.Name = @[Common.Spawner.CabTexture] +Entities.gmod_subway_81-722.Spawner.Announcer.Name = @[Common.Spawner.Announcer] +Entities.gmod_subway_81-722.Spawner.Scheme.Name = @[Common.Spawner.Scheme] +Entities.gmod_subway_81-722.Spawner.SarmatInvert.Name = @[Common.Spawner.SchemeInvert] +Entities.gmod_subway_81-722.Spawner.SpawnMode.Name = @[Common.Spawner.SpawnMode] +Entities.gmod_subway_81-722.Spawner.SpawnMode.1 = @[Common.Spawner.SpawnMode.Full] +Entities.gmod_subway_81-722.Spawner.SpawnMode.2 = @[Common.Spawner.SpawnMode.Deadlock] +Entities.gmod_subway_81-722.Spawner.SpawnMode.3 = @[Common.Spawner.SpawnMode.NightDeadlock] +Entities.gmod_subway_81-722.Spawner.SpawnMode.4 = @[Common.Spawner.SpawnMode.Depot] + +]] diff --git a/lua/metrostroi_data/languages/ru_base.lua b/lua/metrostroi_data/languages/ru_base.lua new file mode 100644 index 0000000..89e1f38 --- /dev/null +++ b/lua/metrostroi_data/languages/ru_base.lua @@ -0,0 +1,453 @@ +return [[ +#Base text for Russian language + +[ru] +lang = РуÑÑкий #Language name +AuthorText = Ðвтор перевода: glebqip #Author text + +#Workshop errors +Workshop.Title = Менеджер аддонов +Workshop.FilesMissing = ОтÑутÑтвуют некоторые файлы аддона или аддон повреждён.\nЕÑли аддон уÑтановлен из Workshop, попробуйте удалить файл:\nGarrysMod/garrysmod/%s. +Workshop.FilesMissingLocaly = ОтÑутÑтвуют некоторые файлы аддона или аддон повреждён. +Workshop.InstalledLocaly = УÑтановлен (локально) +Workshop.NotInstalledE = Ðе уÑтановлен.\nПодпишитеÑÑŒ на аддон и проверьте его загрузку меню "ДополнениÑ". +Workshop.NotInstalled = Ðе уÑтановлен. +Workshop.Disabled = Отключен.\nВключите его в меню "ДополнениÑ". +Workshop.Installed = УÑтановлен +Workshop.Open = Workshop +Workshop.ErrorGithub = Обнаружены Ñкрипты GitHub верÑии мода Metrostroi. Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Metrostroi не ÑовмеÑтима и не может работать одновременно Ñ GitHub верÑией. +Workshop.ErrorLegacy = Обнаружена Legacy верÑÐ¸Ñ Ð¼Ð¾Ð´Ð° Metrostroi. Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Metrostroi не ÑовмеÑтима и не может работать одновременно Ñ Legacy верÑией. +Workshop.ErrorEnhancers = Этот аддон Ñодержит ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ Ð³Ñ€Ð°Ñ„Ð¸ÐºÐ¸, которые могут помешать комфортной игре. +Workshop.Error1 = Данный аддон Ñодержит в Ñебе Ñтарый код мода Metrostroi, который конфликтует Ñ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ð¼. Возможны "Script errors"(ошибки Ñкриптов) и неопределённое поведение аддона. +Workshop.ErrorOld = Обнаружены Ñтарые модели(вагон типа Д и ÑÑ‚Ð°Ñ€Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ 81-717). Проверьте и удалите Ñтарый контент метроÑтроÑ, или почиÑтите папки cache, download и downloads в папке Ñ Ð¸Ð³Ñ€Ð¾Ð¹ (garrysmod). + +#Client settings +Panel.Admin = Ðдмин +Panel.RequireThirdRail = Вкл. необходимоÑть наличиÑ\nконтактного рельÑа + +Panel.Client = Клиент +Panel.Language = Выберите Ñзык +Panel.DrawCams = ОтриÑовывать камеры +Panel.DisableHUD = Откл. HUD в креÑле машиниÑта +Panel.DisableCamAccel = Откл. ÑимулÑцию ÐºÐ°Ñ‡Ð°Ð½Ð¸Ñ Ð³Ð¾Ð»Ð¾Ð²Ñ‹ +Panel.DisableHoverText = Откл. вÑплывающий текÑÑ‚ +Panel.DisableHoverTextP = Откл. дополнительную информацию\nв вÑплывающем текÑте +Panel.ScreenshotMode = Режим Ñъёмки (ÐИЗКИЙ ФПС) +Panel.ShadowsHeadlight = Вкл. тени от фар +Panel.RedLights = Вкл. динамичеÑкий Ñвет от\nкраÑных фар +Panel.ShadowsOther = Вкл. тени от оÑтальных\nиÑточников Ñвета +Panel.PanelSprites = Вкл. отображение Ñпрайтов\nна пульте +Panel.MinimizedShow = Ðе выгружать Ñлементы\nпри Ñворачивании +Panel.PanelLights = Вкл. динамичеÑкий Ñвет от\nламп на пульте +Panel.RouteNumber = Ðомер маршрута +Panel.FOV = Поле Ð·Ñ€ÐµÐ½Ð¸Ñ +Panel.Z = Ð’Ñ‹Ñота камеры +Panel.RenderDistance = ДальноÑть прориÑовки +Panel.ReloadClient = Перезагрузить клиентÑкую чаÑть + +Panel.ClientAdvanced = Клиент (дополнительно) +Panel.DrawDebugInfo = ÐžÑ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ +Panel.DrawSignalDebugInfo = ÐžÑ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ\nÑигнализации +Panel.CheckAddons = ПроÑканировать аддоны +Panel.ReloadLang = Перезагрузить Ñзыки +Panel.SoftDraw = Процент "мÑгкой"\nпрогрузки Ñлементов +Panel.SoftReloadLang = Ðе перезагружать Ñпавнменю + + + +#Common train + +#Cameras +Train.Common.Camera0 = МеÑто машиниÑта +Train.Common.RouteNumber = Ðомер маршрута +Train.Common.LastStation = ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ ÑÑ‚Ð°Ð½Ñ†Ð¸Ñ +Train.Common.HelpersPanel = Панель помощника машиниÑта +Train.Common.UAVA = УÐÐ’Ð +Train.Common.PneumoPanels = Краны Ñ€Ð°Ð·Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ ЭПК +Train.Common.Voltmeters = Вольтметры и амперметры +Train.Common.CouplerCamera = Сцепка +Common.ARM.Monitor1 = Монитор 1 ÐРМ + +Train.Buttons.Sealed = Запломбировано +Train.Buttons.Active = Ðктивен +Train.Buttons.Auto = ÐвтоматичеÑки +Train.Buttons.On = Включен +Train.Buttons.Off = Отключен +Train.Buttons.Closed = Закрыт +Train.Buttons.Opened = Открыт +Train.Buttons.Disconnected = Разъединён +Train.Buttons.Connected = Соединён +Train.Buttons.UAVAOff = Цепи ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð¾Ð¼ÐºÐ½ÑƒÑ‚Ñ‹ +Train.Buttons.UAVAOn = Цепи ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð·Ð°Ð¼ÐºÐ½ÑƒÑ‚Ñ‹ +Train.Buttons.Freq1/5 = 1/5 ÐБ +Train.Buttons.Freq2/6 = 2/6 ÐЛС-ÐРС +Train.Buttons.Left = Левые +Train.Buttons.Right = Правые +Train.Buttons.Low = Слабо +Train.Buttons.High = Сильно +Train.Buttons.LFar = Дальний Ñвет +Train.Buttons.LNear = Ближний Ñвет +Train.Buttons.0 = 0 +Train.Buttons.1 = 1 +Train.Buttons.2 = 2 +Train.Buttons.3 = 3 +Train.Buttons.4 = 4 +Train.Buttons.Forward = Вперед +Train.Buttons.Back = Ðазад +Train.Buttons.VentHalf = 1/2 ÑкороÑти +Train.Buttons.VentFull = ÐŸÐ¾Ð»Ð½Ð°Ñ ÑкороÑть +Train.Buttons.VTRF = ПрÑмо ориентированные вагоны +Train.Buttons.VTRB = Обратно ориентированные вагоны +Train.Buttons.VTR1 = Чётные вагоны +Train.Buttons.VTR2 = Ðечётные вагоны +Train.Buttons.VTRH1 = ÐŸÐµÑ€Ð²Ð°Ñ Ð¿Ð¾Ð»Ð¾Ð²Ð¸Ð½Ð° +Train.Buttons.VTRH2 = Ð’Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ð¾Ð»Ð¾Ð²Ð¸Ð½Ð° +Train.Buttons.VTRAll = Ð’Ñе вагоны + +Train.Buttons.BatteryVoltage = %d Ð’ +Train.Buttons.HighVoltage = %d Ð’ +Train.Buttons.BatteryCurrent = %d Ð +Train.Buttons.EnginesCurrent = %d Ð +Train.Buttons.Speed = %d км/ч +Train.Buttons.SpeedAll = %d км/ч\nОграничение:%s км/ч +Train.Buttons.SpeedLimit = %s км/ч +Train.Buttons.SpeedLimitNext = %s км/ч +Train.Buttons.Acceleration = % 4.2f м/Ñ +Train.Buttons.04 = ОЧ +Train.Buttons.BCPressure = %.1f кгÑ/Ñм² +Train.Buttons.BLTLPressure = ÐМ: %.1f\nТМ: %.1f кгÑ/Ñм² +Train.Buttons.Locked = Заблокирован +Train.Buttons.Unlocked = Разблокирован + +#Train entities +Entities.gmod_subway_base.Name = База метропоездов +Entities.gmod_subway_81-502.Name = 81-502 (Ема-502 головной) +Entities.gmod_subway_81-501.Name = 81-501 (Ем-501 промежуточный) +Entities.gmod_subway_81-702.Name = 81-702 (Д головной) +Entities.gmod_subway_81-702_int.Name = 81-702 (Д промежуточный) +Entities.gmod_subway_81-703.Name = 81-703 (E головной) +Entities.gmod_subway_81-703_int.Name = 81-703 (E промежуточный) +Entities.gmod_subway_ezh.Name = 81-707 (Еж головной) +Entities.gmod_subway_ezh1.Name = 81-708 (Еж1 промежуточный) +Entities.gmod_subway_ezh3.Name = 81-710 (Еж3 головной) +Entities.gmod_subway_em508t.Name = 81-508Т (Ем-508Т промежуточный) +Entities.gmod_subway_81-717_mvm.Name = 81-717 (Ðомерной МСК головной) +Entities.gmod_subway_81-717_mvm_custom.Name = 81-717 (Ðомерной МСК каÑтом) +Entities.gmod_subway_81-714_mvm.Name = 81-714 (Ðомерной МСК промежуточный) +Entities.gmod_subway_81-717_lvz.Name = 81-717 (Ðомерной СПБ головной) +Entities.gmod_subway_81-714_lvz.Name = 81-714 (Ðомерной СПБ промежуточный) +Entities.gmod_subway_81-718.Name = 81-718 (ТИСУ головной) +Entities.gmod_subway_81-719.Name = 81-719 (ТИСУ промежуточный) +Entities.gmod_subway_81-720.Name = 81-720 (Яуза головной) +Entities.gmod_subway_81-721.Name = 81-721 (Яуза промежуточный) +Entities.gmod_subway_81-722.Name = 81-722 (Юбилейный головной) +Entities.gmod_subway_81-723.Name = 81-723 (Юбилейный промежуточный моторный) +Entities.gmod_subway_81-724.Name = 81-724 (Юбилейный промежуточный немоторный) +Entities.gmod_subway_81-7036.Name = 81-7036 (не работоÑпоÑобен) +Entities.gmod_subway_81-7037.Name = 81-7037 (не работоÑпоÑобен) +Entities.gmod_subway_tatra_t3.Name = Татра Т3 + +#Train util entities +Entities.gmod_train_bogey.Name = Тележка вагона +Entities.gmod_train_couple.Name = Сцепка + +#Other entities +Entities.gmod_track_pui.Name = ПУИ +Entities.gmod_track_mus_elektronika7.Name = ЧаÑÑ‹ "Электроника" +Entities.gmod_mus_clock_analog.Name = Стрелочные чаÑÑ‹ +Entities.gmod_track_clock_time.Name = Большие интервальные чаÑÑ‹(времÑ) +Entities.gmod_track_clock_small.Name = Маленькие интервальные чаÑÑ‹ +Entities.gmod_track_clock_interval.Name = Большие интервальные чаÑÑ‹(интервал) +Entities.gmod_track_switch.Name = ÐŸÑƒÑ‚ÐµÐ²Ð°Ñ Ñтрелка +Entities.gmod_track_powermeter.Name = Измеритель напрÑÐ¶ÐµÐ½Ð¸Ñ +Entities.gmod_track_arm.Name = ÐРМ ДСЦП +Entities.gmod_track_udochka.Name = Удочка +Entities.gmod_train_spawner.Name = Спавнер поездов +Entities.gmod_train_special_box.Name = ОÑÐ¾Ð±Ð°Ñ Ð´Ð¾Ñтавка + +#Weapons +Weapons.button_presser.Name = Ðажиматель кнопок +Weapons.button_presser.Purpose = Предназначен Ð´Ð»Ñ ÑƒÐ´Ð¾Ð±Ð½Ð¾Ð³Ð¾ Ð½Ð°Ð¶Ð¸Ð¼Ð°Ð½Ð¸Ñ ÐºÐ½Ð¾Ð¿Ð¾Ðº на карте. +Weapons.button_presser.Instructions = ÐаведитеÑÑŒ на кнопку и нажмите кнопку атаки. +Weapons.train_key.Name = Ключ админиÑтратора +Weapons.train_key.Purpose = Предназначен Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð° заблокированных только Ð´Ð»Ñ Ð°Ð´Ð½Ð¸Ð¼Ð¸Ñтратора кнопок. +Weapons.train_key.Instructions = ÐаведитеÑÑŒ на кнопку Ð´Ð»Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратора и нажмите кнопку атаки. +Weapons.train_kv_wrench.Name = РеверÑÐ¸Ð²Ð½Ð°Ñ Ñ€ÑƒÐºÐ¾Ñтка +Weapons.train_kv_wrench.Purpose = Предназначена Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² поездах метрополитена или Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ñ… кнопок в них. +Weapons.train_kv_wrench.Instructions = ÐаведитеÑÑŒ на кнопку в поезде и нажмите кнопку атаки. +Weapons.train_kv_wrench_gold.Name = Ð—Ð¾Ð»Ð¾Ñ‚Ð°Ñ Ñ€ÐµÐ²ÐµÑ€ÑÐ¸Ð²Ð½Ð°Ñ Ñ€ÑƒÐºÐ¾Ñтка + +Weapons.train_kv_wrench_gold.Purpose = @[Weapons.train_kv_wrench.Purpose] +Weapons.train_kv_wrench_gold.Instructions = @[Weapons.train_kv_wrench.Instructions] + +#Spawner common +Spawner.Title = Спавнер поездов +Spawner.Spawn = Создать +Spawner.Close = Закрыть +Spawner.Trains1 = Разрешено ваг. +Spawner.Trains2 = Ðа человека +Spawner.WagNum = КоличеÑтво вагонов +Common.Spawner.Texture = ОкраÑка кузова +Common.Spawner.PassTexture = ОкраÑка Ñалона +Common.Spawner.CabTexture = ОкраÑка кабины +Common.Spawner.Announcer = Тип информатора +Common.Spawner.Type1 = Тип 1 +Common.Spawner.Type2 = Тип 2 +Common.Spawner.Type3 = Тип 3 +Common.Spawner.Type4 = Тип 4 +Common.Spawner.SpawnMode = СоÑтоÑние поезда +Common.Spawner.SpawnMode.Deadlock = Тупик +Common.Spawner.SpawnMode.Full = Запущен полноÑтью +Common.Spawner.SpawnMode.NightDeadlock = Ðочной отÑтой +Common.Spawner.SpawnMode.Depot = Депо +Spawner.Common.EType = Тип ÑлектроÑхем #FIXME +Common.Spawner.Scheme = Схема в Ñалоне +Common.Spawner.Random = Случайно +Common.Spawner.Old = Старые +Common.Spawner.New = Ðовые +Common.Spawner.Type = Тип +Common.Spawner.SchemeInvert = Инвертировать наддверные Ñхемы + +#Coupler common +Common.Couple.Title = Меню Ñцепки +Common.Couple.CoupleState = СоÑтоÑние Ñцепки +Common.Couple.Coupled = Сцеплено +Common.Couple.Uncoupled = РаÑцеплено +Common.Couple.Uncouple = РаÑцепить +Common.Couple.IsolState = СоÑтоÑние концевых кранов +Common.Couple.Isolated = Закрыты +Common.Couple.Opened = Открыты +Common.Couple.Open = Открыть +Common.Couple.Isolate = Закрыть +Common.Couple.EKKState = СоÑтоÑние ЭКК +Common.Couple.Disconnected = Разъединена +Common.Couple.Connected = Соединена +Common.Couple.Connect = Соединить +Common.Couple.Disconnect = Разъединить + +#Bogey common +Common.Bogey.Title = Меню тележки +Common.Bogey.ContactState = СоÑтоÑние токоприёмников +Common.Bogey.CReleased = Отжаты +Common.Bogey.CPressed = Прижаты +Common.Bogey.CPress = Прижать +Common.Bogey.CRelease = Отжать +Common.Bogey.ParkingBrakeState = СоÑтоÑние ÑтоÑночного тормоза +Common.Bogey.PBDisabled = Отключен вручную +Common.Bogey.PBEnabled = Включен +Common.Bogey.PBEnable = Включить +Common.Bogey.PBDisable = Отключить вручную + +#Trains common +Common.ALL.Unsused1 = Ðе иÑпользуетÑÑ +Common.ALL.Unsused2 = (не иÑпользуетÑÑ) +Common.ALL.Up = (вверх) +Common.ALL.Down = (вниз) +Common.ALL.Left = (влево) +Common.ALL.Right = (вправо) +Common.ALL.CW = (по чаÑовой) +Common.ALL.CCW = (против чаÑовой) +Common.ALL.VB = ВБ: Выключатель батарей +Common.ALL.VSOSD = СОСД: Выключатель Ñветильника Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñтанционных дверей +Common.ALL.VKF = ВКФ: Выключатель Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ñ ÐºÑ€Ð°Ñных фар от батареи +Common.ALL.VB2 = (Ð’Ñпомогательные цепи низкого напрÑжениÑ) +Common.ALL.VPR = ВПР: Выключатель поездной радиоÑвÑзи +Common.ALL.VASNP = Выключатель ÐСÐП +Common.ALL.UOS = РЦ-УОС: УÑтройÑтво Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ ÑкороÑти(езда без ЭПК\ЭПВ) +Common.ALL.VAH = Ð’ÐÐ¥: Выключатель аварийного хода +Common.ALL.KAH = КÐÐ¥: Кнопка аварийного хода Ð´Ð»Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð±ÐµÐ· ÐРС +Common.ALL.KAHK = Крышка кнопки КÐÐ¥ +Common.ALL.VAD = Ð’ÐД: Выключатель аварийный дверей +Common.ALL.OVT = ОВТ: Отключение вентильных тормозов +Common.ALL.VOVT = ВОВТ: Выключатель Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð²ÐµÐ½Ñ‚Ð¸Ð»ÑŒÐ½Ñ‹Ñ… тормозов +Common.ALL.EmergencyBrakeValve = Стоп-кран +Common.ALL.ParkingBrake = СтоÑночный тормоз +Common.ALL.VU = ВУ: Выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ +Common.ALL.KDP = КДП: Открытие правых дверей +Common.ALL.KDPL = Лампа выбора правой Ñтороны дверей +Common.ALL.KDPK = Крышка кнопки правых дверей +Common.ALL.KDL = КДЛ: Открытие левых дверей +Common.ALL.KDLL = Лампа выбора левой Ñтороны дверей +Common.ALL.KDLK = Крышка кнопки левых дверей +Common.ALL.KDLPK = Крышка кнопок дверей +Common.ALL.KRZD = КРЗД: Резервное закрытие дверей +Common.ALL.VSD = Переключатель Ñтороны дверей +Common.ALL.Ring = Звонок +Common.ALL.VUD = ВУД: Закрытие дверей +Common.ALL.KDPH = Открытие правых дверей хвоÑтового вагона +Common.ALL.VUD2 = ВУД2: Закрытие дверей Ñо Ñтороны помощника +Common.ALL.Program1 = Программа I +Common.ALL.Program2 = Программа II +Common.ALL.VRP = ВРП: Возврат РП +Common.ALL.VRPBV = ВРП: Возврат РП, включение БВ +Common.ALL.KSN = КСÐ: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½ÐµÐ¸ÑправноÑти +Common.ALL.VMK = ВМК: Мотор-компреÑÑор +Common.ALL.MK = Мотор-компреÑÑор +Common.ALL.VF1 = Выключатель 1 группы фар +Common.ALL.VF2 = Выключатель 2 группы фар +Common.ALL.VF = Выключатель фар +Common.ALL.VUS = ВУС: Выключатель уÑиленного Ñвета фар +Common.ALL.GaugeLights = ОÑвещение приборов +Common.ALL.CabLights = ОÑвещение кабины +Common.ALL.PassLights = ОÑвещение Ñалона +Common.ALL.PanelLights = ОÑвещение пульта +Common.ALL.RMK = РМК: Резервный мотор-компреÑÑор +Common.ALL.KRP = КРП: Резервный пуÑк +Common.ALL.VZP = ВЗП: Выключатель задержки пуÑка поезда от ÑиÑтемы Ð°Ð²Ñ‚Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ +Common.ALL.VZD = ВЗД: Выключатель задержки дверей +Common.ALL.VAV = Ð’ÐÐ’: Выключатель Ð°Ð²Ñ‚Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ +Common.ALL.RouteNumber1+ = Увеличить первую цифру номера маршрута +Common.ALL.RouteNumber1- = Уменьшить первую цифру номера маршрута +Common.ALL.RouteNumber2+ = Увеличить вторую цифру номера маршрута +Common.ALL.RouteNumber2- = Уменьшить вторую цифру номера маршрута +Common.ALL.RouteNumber3+ = Увеличить третью цифру номера маршрута +Common.ALL.RouteNumber3- = Уменьшить третью цифру номера маршрута +Common.ALL.LastStation+ = ПролиÑтать табличку конечных Ñтанций вперёд +Common.ALL.LastStation- = ПролиÑтать табличку конечных Ñтанций назад +Common.ALL.RRP = КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° РП (неÑбор Ñхемы) +Common.ALL.GRP = Ð—ÐµÐ»Ñ‘Ð½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° РП +Common.ALL.RP = РП: КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° РП (Ñработка РП на одном из вагонов или неÑбор Ñхемы ÑоÑтава) +Common.ALL.SN = ЛСÐ: КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° РП (неÑбор Ñхемы одного или неÑкольких вагонов) +Common.ALL.PU = Лампа Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð½Ð¸Ð¶ÐµÐ½Ð½Ð¾Ð¹ уÑтавки +Common.ALL.BrT = Лампа Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð½ÐµÐ²Ð¼Ð¾Ñ‚Ð¾Ñ€Ð¼Ð¾Ð·Ð° в ÑоÑтаве +Common.ALL.BrW = Лампа Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð½ÐµÐ²Ð¼Ð¾Ñ‚Ð¾Ñ€Ð¼Ð¾Ð·Ð° в вагоне +Common.ALL.ARS = ÐРС: Выключатель ÑиÑтемы ÐРС +Common.ALL.ARSR = ÐРС-Р: Выключатель ÑиÑтемы ÐРС в режиме ÐРС-Р +Common.ALL.ALS = ÐЛС: Выключатель ÐЛС +Common.ALL.RCARS = РЦ-ÐРС: Разъединитель цепей ÐРС +Common.ALL.RC1 = РЦ-1: Разъединитель цепей ÐРС +Common.ALL.EPK = ЭПК: ЭлектропневматичеÑкий клапан ÐРС +Common.ALL.EPV = ЭПВ: ЭлектропневматичеÑкий вентиль ÐРС +Common.ARS.LN = ЛÐ: Лампа ÑоответÑÑ‚Ð²Ð¸Ñ Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ +Common.ARS.KT = КТ: Лампа ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ +Common.ARS.VD = ВД: Лампа Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ…Ð¾Ð´Ð¾Ð²Ð¾Ð³Ð¾ режима ÑиÑтемой ÐРС +Common.ARS.Freq = Переключение режима дешифратора ÐЛС +Common.ARS.FreqD = (вверх 1/5, вниз 2/6) +Common.ARS.FreqU = (вверх 2/6, вниз 1/5) +Common.ARS.VP = Режим "Ð’Ñпомогательный поезд" +Common.ARS.RS = РС: Лампа равенÑтва ÑкороÑтей +Common.ARS.AB = Режим Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÑиÑтемы ÐРС по автоблокировке +Common.ARS.ABButton = Кнопка перехода в режим ÐБ +Common.ARS.ABDriver = (машиниÑта) +Common.ARS.ABHelper = (помощника машиниÑта) +Common.ARS.AV = Лампа отказа оÑновного блока ÑиÑтемы ÐРС-МП +Common.ARS.AV1 = Лампа отказа резервного блока ÑиÑтемы ÐРС-МП +Common.ARS.AB2 = Кнопка перехода в режим ÐБ +Common.ARS.ARS = Режим Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÑиÑтемы ÐРС по ÐРС +Common.ARS.LRD = ЛРД: Лампа Ñ€Ð°Ð·Ñ€ÐµÑˆÐ°ÑŽÑ‰Ð°Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ðµ под запрещающую чаÑтоту +Common.ARS.VRD = ВРД: Выключатель разрешающий движение под запрещающую чаÑтоту +Common.ARS.KB = КБ: Кнопка бдительноÑти +Common.ARS.KVT = КВТ: Кнопка воÑприÑÑ‚Ð¸Ñ Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ +Common.ARS.KVTR = КВТ: Кнопка воÑприÑÑ‚Ð¸Ñ Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ работе от ÐРС-Р +Common.ARS.AO = ÐО: Сигнал абÑолютной оÑтановки +Common.ARS.04 = ОЧ: Лампа отÑутÑÑ‚Ð²Ð¸Ñ Ñ‡Ð°Ñтоты +Common.ARS.N4 = ÐЧ: Лампа отÑутÑÑ‚Ð²Ð¸Ñ Ñ‡Ð°Ñтоты +Common.ARS.0 = 0: Лампа разрешённой ÑкороÑти 0 км\ч +Common.ARS.40 = 40: Лампа разрешённой ÑкороÑти 40 км\ч +Common.ARS.60 = 60: Лампа разрешённой ÑкороÑти 60 км\ч +Common.ARS.70 = 70: Лампа разрешённой ÑкороÑти 70 км\ч +Common.ARS.80 = 80: Лампа разрешённой ÑкороÑти 80 км\ч +Common.ALL.RCBPS = РЦ-БПС: Разъединитель цепей блока противоÑÐºÐ°Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ +Common.BPS.On = Работа блока противоÑÐºÐ°Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ +Common.BPS.Err = Ошибка блока противоÑÐºÐ°Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ +Common.BPS.Fail = ÐеиÑправноÑть блока противоÑÐºÐ°Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ +Commom.NMnUAVA.NMPressureLow = Лампа низкого Ð´Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² напорной магиÑтрали +Commom.NMnUAVA.UAVATriggered = Лампа Ñ€Ð°Ð·Ð¼Ñ‹ÐºÐ°Ð½Ð¸Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð¾Ð² УÐÐ’Ð +Common.ALL.LSD = Лампа Ñигнализации дверей поезда (двери закрыты) +Common.ALL.L1w = Лампа 1 провода (Ñбор Ñхемы на ход) +Common.ALL.L2w = Лампа 2 провода (вращение РК) +Common.ALL.L6w = Лампа 6 провода (Ñбор Ñхемы на тормоз) +Common.ALL.Horn = Тифон +Common.ALL.DriverValveBLDisconnect = Кран двойной Ñ‚Ñги тормозной магиÑтрали +Common.ALL.DriverValveTLDisconnect = Кран двойной Ñ‚Ñги напорной магиÑтрали +Common.ALL.DriverValveDisconnect = Разобщительный кран крана машиниÑта +Common.ALL.KRMH = КРМШ: Резервное включение крана машиниÑта +Common.ALL.RVTB = РВТБ: Резервный вентиль тормоза безопаÑноÑти +Common.ALL.FrontTrainLineIsolationToggle = Концевой кран напорной магиÑтрали +Common.ALL.FrontBrakeLineIsolationToggle = Концевой кран тормозной магиÑтрали +Common.ALL.RearTrainLineIsolationToggle = Концевой кран напорной магиÑтрали +Common.ALL.RearBrakeLineIsolationToggle = Концевой кран тормозной магиÑтрали +Common.ALL.UAVA = УÐÐ’Ð: Включение автоматичеÑкого Ð²Ñ‹ÐºÐ»ÑŽÑ‡Ð°Ñ‚ÐµÐ»Ñ Ð°Ð²Ñ‚Ð¾Ñтопа\n(возможно включить поÑле ÑÐ½Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð´Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² тормозной магиÑтрали) +Common.ALL.UAVA2 = УÐÐ’Ð: Включение автоматичеÑкого Ð²Ñ‹ÐºÐ»ÑŽÑ‡Ð°Ñ‚ÐµÐ»Ñ Ð°Ð²Ñ‚Ð¾Ñтопа +Common.ALL.UAVAContact = ВоÑÑтановление контактов УÐÐ’Ð +Common.ALL.OAVU = ОÐВУ: Тумблер Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÐВУ +Common.ALL.LAVU = Лампа Ñработки ÐВУ +Common.ALL.GV = ГВ: Главный разъединитель +Common.ALL.AirDistributor = ВРÐ: Выключатель воздухораÑÐ¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÐµÐ»Ñ +Common.ALL.CabinDoor = Дверь в кабину +Common.ALL.PassDoor = Дверь в Ñалон +Common.ALL.FrontDoor = ПереднÑÑ Ñ‚Ð¾Ñ€Ñ†ÐµÐ²Ð°Ñ Ð´Ð²ÐµÑ€ÑŒ +Common.ALL.RearDoor = ЗаднÑÑ Ñ‚Ð¾Ñ€Ñ†ÐµÐ²Ð°Ñ Ð´Ð²ÐµÑ€ÑŒ +Common.ALL.OtsekDoor1 = Ручка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ 1 аппаратного отÑека +Common.ALL.OtsekDoor2 = Ручка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ 2 аппаратного отÑека +Common.ALL.CouchCap = Откидывание Ñидушки + +Common.ALL.UNCh = УÐЧ: Включение уÑÐ¸Ð»Ð¸Ñ‚ÐµÐ»Ñ Ð½Ð¸Ð·ÐºÐ¸Ñ… чаÑтот в Ñалоне +Common.ALL.ES = ЭС: Контроль ÑкÑтренной ÑвÑзи +Common.ALL.GCab = Включение Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ð³Ð¾Ð²Ð¾Ñ€Ð¸Ñ‚ÐµÐ»Ñ Ð² кабине +Common.ALL.UPO = УПО: Включение уÑтройÑтв поездного Ð¾Ð¿Ð¾Ð²ÐµÑ‰ÐµÐ½Ð¸Ñ +Common.ALL.R_Radio = Включение радиоинформатора +Common.ALL.AnnPlay = Лампа Ð¿Ñ€Ð¾Ð¸Ð³Ñ€Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±ÑŠÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ‚ информатора + +#RRI +Train.Common.RRI = РРИ: Радиорелейный информатор +Common.RRI.RRIUp = РРИ: ÐаÑтройка вверх +Common.RRI.RRIDown = РРИ: ÐаÑтройка вниз +Common.RRI.RRILeft = РРИ: ÐаÑтройка влево +Common.RRI.RRIRight = РРИ: ÐаÑтройка вправо +Common.RRI.RRIEnableToggle = РРИ: Питание +Common.RRI.RRIRewindSet2 = РРИ: Перемотка вперёд +Common.RRI.RRIRewindSet0 = РРИ: Перемотка назад +Common.RRI.RRIAmplifierToggle = РРИ: УÑилитель +Common.RRI.RRIOn = РРИ: Лампа работы РРИ + +#ASNP +Train.Common.ASNP = ÐСÐП +Common.ASNP.ASNPMenu = ÐСÐП: Меню +Common.ASNP.ASNPUp = ÐСÐП: Вверх +Common.ASNP.ASNPDown = ÐСÐП: Вниз +Common.ASNP.ASNPOn = Выключатель ÐСÐП + +#PVK +Common.CabVent.PVK- = Уменьшение Ñилы обдува вентилÑции кабины +Common.CabVent.PVK+ = Увеличение Ñилы обдува вентилÑции кабины + +#IGLA +Train.Common.IGLA = ИГЛР+Common.IGLA.Button1Up = ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вверх +Common.IGLA.Button1 = ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° +Common.IGLA.Button1Down = ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вниз +Common.IGLA.Button2Up = ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вверх +Common.IGLA.Button2 = ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° +Common.IGLA.Button2Down = ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вниз +Common.IGLA.Button23 = ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ Ð¸ Ñ‚Ñ€ÐµÑ‚ÑŒÑ ÐºÐ½Ð¾Ð¿ÐºÐ° +Common.IGLA.Button3 = ИГЛÐ: Ð¢Ñ€ÐµÑ‚ÑŒÑ ÐºÐ½Ð¾Ð¿ÐºÐ° +Common.IGLA.Button4 = ИГЛÐ: Ð§ÐµÑ‚Ð²Ñ‘Ñ€Ñ‚Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° +Common.IGLA.IGLASR = ИГЛÐ: Питание +Common.IGLA.IGLARX = ИГЛÐ: Ðет ÑвÑзи +Common.IGLA.IGLAErr = ИГЛÐ: Ошибка +Common.IGLA.IGLAOSP = ИГЛÐ: Сработка ОСП +Common.IGLA.IGLAPI = ИГЛÐ: Пожар +Common.IGLA.IGLAOff = ИГЛÐ: Отключение выÑоковольтных цепей + +#BZOS +Common.BZOS.On = Выключатель охранной Ñигнализации +Common.BZOS.VH1 = Лампа Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¾Ñ…Ñ€Ð°Ð½Ð½Ð¾Ð¹ Ñигнализации +Common.BZOS.VH2 = Лампа тревоги охранной Ñигнализации +Common.BZOS.Engaged = Лампа Ñработки охранной Ñигнализации + +#Train helpers common +Common.ALL.SpeedCurr = ФактичеÑÐºÐ°Ñ ÑкороÑть +Common.ALL.SpeedAccept = Ð Ð°Ð·Ñ€ÐµÑˆÑ‘Ð½Ð½Ð°Ñ ÑкороÑть +Common.ALL.SpeedAttent = Ð Ð°Ð·Ñ€ÐµÑˆÑ‘Ð½Ð½Ð°Ñ ÑкороÑть на Ñледующем учаÑтке +Common.ALL.Speedometer = СкороÑтемер +Common.ALL.BLTLPressure = Давление в напорной(Ñ‡Ñ‘Ñ€Ð½Ð°Ñ Ñтрелка) и тормозной(краÑÐ½Ð°Ñ Ñтрелка) магиÑтралÑÑ… +Common.ALL.BCPressure = Давление в тормозных цилиндрах +Common.ALL.EnginesCurrent = Ток на Ñ‚Ñговом двигателе (Ð) +Common.ALL.EnginesCurrent1 = Ток I группы Ñ‚Ñговых двигателей (Ð) +Common.ALL.EnginesCurrent2 = Ток II группы Ñ‚Ñговых двигателей (Ð) +Common.ALL.EnginesVoltage = ÐапрÑжение на Ñ‚Ñговом двигателе (кВ) +Common.ALL.BatteryVoltage = ÐапрÑжение на аккумулÑторной батарее (Ð’) +Common.ALL.BatteryCurrent = Ток поздарÑда аккумулÑторной батареи (Ð) +Common.ALL.HighVoltage = ÐапрÑжение на контактном рельÑе (кВ) +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages_/_unfinished/cz_base.lua b/lua/metrostroi_data/languages_/_unfinished/cz_base.lua new file mode 100644 index 0000000..07701df --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/cz_base.lua @@ -0,0 +1,53 @@ +return [[ +{ + "Lang": "cz", + "Name": "ÄŒeÅ¡tina", + "Panel.Admin": "Admin", + "Panel.Client": "Klient", + "Panel.DrawDebugInfo": "Zobrazit informace pro vývojáře", + "Panel.DisableCamAccel": "Vypnout akceleraci pohledu", + "Panel.DisableHoverText": "Vypnout vysvÄ›tlivky", + + "Entities.gmod_subway_base.Name": "Vozová základna", + "Entities.gmod_subway_81-703.Name": "E", + "Entities.gmod_subway_81-703_2.Name": "E (vložený vůz)", + "Entities.gmod_subway_81-717_mvm.Name": "81-717 (MVM)", + "Entities.gmod_subway_81-717_lvz.Name": "81-717 (LVZ)", + "Entities.gmod_subway_81-714_mvm.Name": "81-714 (MVM)", + "Entities.gmod_subway_81-714_lvz.Name": "81-714 (LVZ)", + "Entities.gmod_subway_81-7036.Name": "81-7036 (nefunguje)", + "Entities.gmod_subway_81-7037.Name": "81-7037 (nefunguje)", + "Entities.gmod_subway_81-720.Name": "81-720 (Äelní vůz)", + "Entities.gmod_subway_81-721.Name": "81-721 (vložený vůz)", + "Entities.gmod_subway_81-722.Name": "81-722 (Äelní vůz)", + "Entities.gmod_subway_81-723.Name": "81-723 (vložený vůz s pohonem)", + "Entities.gmod_subway_81-724.Name": "81-724 (vložený vůz bez pohonu)", + "Entities.gmod_subway_e.Name": "E", + "Entities.gmod_subway_em.Name": "Em", + "Entities.gmod_subway_ema.Name": "Ema", + "Entities.gmod_subway_ezh.Name": "Ež", + "Entities.gmod_subway_ezh1.Name": "Ež1", + "Entities.gmod_subway_em508.Name": "Em-508", + "Entities.gmod_subway_em508_int.Name": "Em-508 (vložený vůz)", + "Entities.gmod_subway_ezh3.Name": "Ež3", + "Entities.gmod_subway_ezh3ru1.Name": "Ež3 RU1", + "Entities.gmod_subway_ema508t.Name": "Em-508T", + "Entities.gmod_subway_tatra_t3.Name": "Tatra T3", + "Entities.gmod_subway_ai.Name": "Vlak řízený poÄítaÄem", + + "Entities.gmod_train_bogey.Name": "Podvozek vlaku", + "Entities.gmod_train_couple.Name": "Spřáhlo", + + "Entities.gmod_track_pui.Name": "PUI (Programovatelné zobrazovací zařízení)", + "Entities.gmod_track_mus_elektronika7.Name": "Digitální hodiny", + "Entities.gmod_mus_clock_analog.Name": "Analogové hodiny", + "Entities.gmod_track_clock_time.Name": "Velké intervalové hodiny(Äas)", + "Entities.gmod_track_clock_small.Name": "Malé intervalové hodiny", + "Entities.gmod_track_clock_interval.Name": "Velké intervalové hodiny(interval)", + "Entities.gmod_track_switch.Name": "Výhybka", + "Entities.gmod_track_powermeter.Name": "MÄ›Å™Ã­Ä výkonu", + "Entities.gmod_track_controller.Name": "Track controller", + "Entities.gmod_track_udochka.Name": "Pohyblivý napájecí kabel", + "Entities.gmod_train_spawner.Name": "Spawner vozů metra" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/cz_buttons_717.lua b/lua/metrostroi_data/languages_/_unfinished/cz_buttons_717.lua new file mode 100644 index 0000000..a11aa8d --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/cz_buttons_717.lua @@ -0,0 +1,297 @@ +return [[ +{ + "Lang": "cz", + "Name": "ÄŒeÅ¡tina", + + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.VUD2Toggle": "VUD2: ZavÅ™ení dveří", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.VDLSet": "VDL: Otevřít levé dveÅ™e", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.R_Program2Helper": "Start hlášení (Program 2)", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.R_Program1Helper": "Start hlášení (Program 1)", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:RC1Toggle": "RC-1: OdpojovaÄ Å™Ã­dicích obvodů ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:VBToggle": "VB: Baterie zapnuto/vypnuto", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:UOSToggle": "RC-UOS: OdpojovaÄ obvodů omezovaÄe rychlosti", + "Entities.gmod_subway_81-717_mvm.Buttons.Wiper.WiperToggle": "StÄ›raÄ", + "Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle": "Ventil brzdiÄe", + "Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveBLDisconnectToggle": "Ventil brzdového potrubí", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_UNchToggle": "UNCh: ZesilovaÄ nízké frekvence", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_ZSToggle": "ZS: Vlakový rozhlas ve vozech", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_GToggle": "Vlakový rozhlas v kabinÄ›", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_RadioToggle": "Vlakový rozhlas", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_Program1Set": "Start hlášení (Program 1)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_Program2Set": "Start hlášení (Program 2)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.2:KVTSet": "KB: TlaÄítka bdÄ›losti", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VZ1Set": "VZ1: Pneumatický ventil #1", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VUD1Toggle": "VUD: ZavÅ™ení dveří", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLSet": "KDL: Otevřít levé dveÅ™e", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLKToggle": "Krytka KDL", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLRSet": "VDL: Otevřít levé dveÅ™e", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLRKToggle": "Krytka VDL", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.DoorSelectToggle": "DveÅ™e pÅ™edvolba", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KRZDSet": "RZD: DveÅ™e nouze", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_VPRToggle": "VPR: Radiostanice", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VozvratRPSet": "Korekce zátěže relé", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.GreenRPLight": "RP: Zelené svÄ›tlo pÅ™ehřátí relé (zabraňuje nadproudu trakÄních motorů)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.AVULight": "AVU: Automatický odpojovaÄ Å™Ã­zení", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.LKVPLight": "LKVP: Kontrolka mÄ›niÄe vysokého napÄ›tí", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.SPLight": "LSP: Stav nouze-požár (pÅ™ehřátí reostatu)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ConverterProtectionSet": "Ochranný mÄ›niÄ", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KSNSet": "KSN: Porucha řízení", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.DIPoffSet": "Zvonek", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ARSToggle": "ARS: Automatická regulace rychlosti", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ALSToggle": "ALS: Automatická lokomotivní signalizace", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.OtklAVUToggle": "Vypnutí automatického odpojovaÄe relé (porucha AVU)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.TormATToggle": "Vypnutí pneumatické brzdy", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_1Toggle": "OsvÄ›tlení vozu", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_2Toggle": "OsvÄ›tlení kabiny", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_3Toggle": "OsvÄ›tlení Panel", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ALSFreqToggle": "Dekodér: PÅ™epínaÄ kódování frekvencí ALS (1/5 nebo 2/6)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ParkingBrakeSignToggle": "Cedule \"ODBRZDI PARKOVACà BRZDU\"", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.ParkingBrakeToggle": "Parkovací brzda", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.DriverValveTLDisconnectToggle": "Ventil hlavního potrubí", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA1Set": "IGLA: První tlaÄítko", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA2Set": "IGLA: Druhé tlaÄítko", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA3Set": "IGLA: TÅ™etí tlaÄítko", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA4Set": "IGLA: ÄŒtvrté tlaÄítko", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.!Voltage": "Napájení obvodů řízení", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.VMKToggle": "Kompresor", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.BPSNonToggle": "MÄ›niÄ", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.RezMKSet": "Kompresor nouze", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.ARS13Set": "ARS 13V: Kontrola stabilizace napÄ›tí ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!RouteNum": "GVD â„–\nČíslo turnusu", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!PathNum": "TRASA â„–\nČíslo trasy", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchTime": "DOBA JÃZDY\nCelková doba jízdy", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchInterval": "INT\nInterval", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchHour": "HOD\nHodina", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchMin": "MIN\nMinuta", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchSec": "SEK\nSekunda", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchArrival": "ÄŒas příjezdu", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchStations": "Název stanice", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!Speedometer": "RychlomÄ›r", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLSN": "LSN: Indikátor poruchy (Nelze zkompletovat jistiÄe)", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampRP": "RP: ÄŒervené svÄ›tlo pÅ™etížení relé (Nelze zkompletovat jistiÄe)", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLHRK": "LhRK: Funkce reostatu kontroléru", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLKT": "LKT: Indikátor brzdÄ›ní ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLKVD": "LKVD: Odpojení trakce", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLKVC": "LKVC: Vysoké napÄ›tí není dostupné", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARSOch": "OÄŒ: Bez kódu", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS0": "0: Kód 0 (NávÄ›st zastavení)", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS40": "Rychlost 40 km/h", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS60": "Rychlost 60 km/h", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS70": "Rychlost 70 km/h", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS80": "Rychlost 80 km/h", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLSD1": "LSD: Signalizace zavÅ™ení dveří (dveÅ™e jsou zavÅ™eny)", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLSD2": "LSD: Signalizace zavÅ™ení dveří (dveÅ™e jsou zavÅ™eny)", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLST": "LST: Brzdy v chodu", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLVD": "LVD: TrakÄní motory v chodu", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLN": "LN: Kontrolka smÄ›ru jízdy", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLRS": "LRS: PÅ™edvÄ›st (rychlost v dalším oddílu je stejná nebo vyšší)", + "Entities.gmod_subway_81-717_mvm.Buttons.PneumaticPanels.!CylinderPressure": "Brzdový válec", + "Entities.gmod_subway_81-717_mvm.Buttons.PneumaticPanels.!LinePressure": "Napájecí-brzdové potrubí (Äervená: brzdové potrubí, Äerná: hlavní potrubí)", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.RC1Toggle": "RC-1: OdpojovaÄ Å™Ã­dicích obvodů ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.UOSToggle": "RC-UOS: OdpojovaÄ obvodů omezovaÄe rychlosti", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.VBToggle": "VB: Baterie zapnuto/vypnuto", + "Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "IzolaÄní ventil brzdového potrubí", + "Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "IzolaÄní ventil hlavního potrubí", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPMenuSet": "ASNP: Menu", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPUpSet": "ASNP: Nahoru", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPDownSet": "ASNP: Dolů", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPOnToggle": "ASNP: Zapnout", + "Entities.gmod_subway_81-717_mvm.Buttons.RearDoor.RearDoor": "Zadní dveÅ™e", + "Entities.gmod_subway_81-717_mvm.Buttons.Meters.!TotalVoltmeter": "Voltmetr vysokého napÄ›tí (kV)", + "Entities.gmod_subway_81-717_mvm.Buttons.Meters.!TotalAmpermeter": "Ampérmetr (A)", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A61Toggle": "A61 Elektrické rozvody", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A55Toggle": "A55 Elektrické rozvody", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A54Toggle": "A54 Vyp. řízení", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A56Toggle": "A56 Baterie", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A27Toggle": "A27 Osv.kabina, kontr. MR, park. brzda", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A21Toggle": "A21 Ovládání dveří", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A10Toggle": "A10 Ovládání kompresoru", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A53Toggle": "A53 Vlak. obvody", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A43Toggle": "A43 Baterie ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A45Toggle": "A45 Elektrické rozvody ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A42Toggle": "A42 Napájení ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A41Toggle": "A41 Brzda ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.VUToggle": "VU Řízení", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A64Toggle": "A64 OsvÄ›tlení kabiny", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A63Toggle": "A63 Napájení VR (IGLA/BIS)", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A50Toggle": "A50 Přídrž PBO", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A51Toggle": "A51 Vypnutí DIP a osvÄ›tlení", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A23Toggle": "A23 Nouzové zapnutí kompresoru", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A14Toggle": "A14 Relé nouzového řízení", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A75Toggle": "A75 VytápÄ›ní kabiny", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A1Toggle": "A1 J-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A2Toggle": "A2 J-2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A3Toggle": "A3 J-3", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A17Toggle": "A17 Korekce zátěže relé", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A62Toggle": "A62 Rádiová komunikace", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A29Toggle": "A29 Rádiový pÅ™enos", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A5Toggle": "A5 ASNP", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A6Toggle": "A6 B-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A8Toggle": "A8 Pneumatické ventily #1, #2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A20Toggle": "A20 LS 2, LS 5", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A25Toggle": "A25 RuÄní brzdÄ›ní", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A22Toggle": "A22 StykaÄ kompresoru", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A30Toggle": "A30 Motor HK", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A39Toggle": "A39 Nouzové řízení vozidla", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A44Toggle": "A44 Nouzové řízení (kompresory KNŘ)", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A80Toggle": "A80 Napájení trakÄních motorů", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A65Toggle": "A65 OsvÄ›tlení interiéru", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.L_5Toggle": "Ð49 OsvÄ›tlení nouze", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A24Toggle": "A24 Dobíjení baterie", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A32Toggle": "A32 OtevÅ™. pravé dveÅ™e", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A31Toggle": "A31 OtevÅ™. levé dveÅ™e", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A16Toggle": "A16 Zavírání dveří", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A13Toggle": "A13 DveÅ™ní signalizace", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A12Toggle": "A12 Zavírání nouze", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A7Toggle": "A7 ÄŒervené svÄ›tlo pravé", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A9Toggle": "A9 ÄŒervené svÄ›tlo levé", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A46Toggle": "A46 Bílá svÄ›tla (klopená)", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A47Toggle": "A47 Bílá svÄ›tla (dálková)", + "Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor.PassengerDoor": "DveÅ™e z kabiny do interiéru", + "Entities.gmod_subway_81-717_mvm.Buttons.GV.GVToggle": "Hlavní vypínaÄ", + "Entities.gmod_subway_81-717_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle": "Rychlobrzda", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.PrevSign": "PÅ™edeÅ¡lí smÄ›r jízdy", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.NextSign": "Další smÄ›r jízdy", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num2P": "Turnus: Zvýšit 2. Äíslo", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num2M": "Turnus: Snížit 2. Äíslo", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num1P": "Turnus: Zvýšit 1. Äíslo", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num1M": "Turnus: Snížit 1. Äíslo", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.L_4Toggle": "SvÄ›tla", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VUSToggle": "VUS: SvÄ›tla dálková", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VAHToggle": "VAH: PÅ™epínaÄ nouzové jízdy (porucha relé pedálu bdÄ›losti)", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VADToggle": "VAD: PÅ™epínaÄ nouzového zavÅ™ení dveří (porucha relé tlaÄítka dveří)", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KRPSet": "KRP: Nouzové řízení", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KAHSet": "TlaÄítko nouzové jízdy", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KAHKToggle": "Krytka TNJ", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KUP": "VytápÄ›ní kabiny", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KDPSet": "KDP: Otevřít pravé dveÅ™e", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KDPKToggle": "Krytka KDP", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.PN": "Pneumatická brzda", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A61Toggle": "A61 Elektrické rozvody", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A55Toggle": "A55 Elektrické rozvody", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A54Toggle": "A54 Vyp. řízení", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A56Toggle": "A56 Baterie", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A27Toggle": "A27 Osv.kabina, kontr. MR, park. brzda", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A21Toggle": "A21 Ovládání dveří", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A10Toggle": "A10 Ovládání kompresoru", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A53Toggle": "A53 Vlak. obvody", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A43Toggle": "A43 Baterie ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A45Toggle": "A45 Elektrické rozvody ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A42Toggle": "A42 Napájení ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A41Toggle": "A41 Brzda ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:VUToggle": "VU Řízení", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A64Toggle": "A64 OsvÄ›tlení kabiny", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A63Toggle": "A63 Napájení VR (IGLA/BIS)", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A50Toggle": "A50 Přídrž PBO", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A51Toggle": "A51 Vypnutí DIP a osvÄ›tlení", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A23Toggle": "A23 Nouzové zapnutí kompresoru", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A14Toggle": "A14 Relé nouzového řízení", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A75Toggle": "A75 VytápÄ›ní kabiny", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A1Toggle": "A1 J-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A2Toggle": "A2 J-2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A3Toggle": "A3 J-3", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A17Toggle": "A17 Korekce zátěže relé", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A62Toggle": "A62 Rádiová komunikace", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A29Toggle": "A29 Rádiový pÅ™enos", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A5Toggle": "A5 ASNP", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A6Toggle": "A6 B-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A8Toggle": "A8 Pneumatické ventily #1, #2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A20Toggle": "A20 LS 2, LS 5", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A25Toggle": "A25 RuÄní brzdÄ›ní", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A22Toggle": "A22 StykaÄ kompresoru", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A30Toggle": "A30 Motor HK", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A39Toggle": "A39 Nouzové řízení vozidla", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A44Toggle": "A44 Nouzové řízení (kompresory KNŘ)", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A80Toggle": "A80 Napájení trakÄních motorů", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A65Toggle": "A65 OsvÄ›tlení interiéru", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:L_5Toggle": "Ð49 OsvÄ›tlení nouze", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A24Toggle": "A24 Dobíjení baterie", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A32Toggle": "A32 OtevÅ™. pravé dveÅ™e", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A31Toggle": "A31 OtevÅ™. levé dveÅ™e", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A16Toggle": "A16 Zavírání dveří", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A13Toggle": "A13 DveÅ™ní signalizace", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A12Toggle": "A12 Zavírání nouze", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A7Toggle": "A7 ÄŒervené svÄ›tlo pravé", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A9Toggle": "A9 ÄŒervené svÄ›tlo levé", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A46Toggle": "A46 Bílá svÄ›tla (klopená)", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A47Toggle": "A47 Bílá svÄ›tla (dálková)", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!Speedometer": "RychlomÄ›r", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LSD": "LSD: Signalizace zavÅ™ení dveří (dveÅ™e jsou zavÅ™eny)", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LOCh": "NÄŒ: Bez kódu", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L0": "0: Kód 0 (NávÄ›st zastavení)", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LRS": "LRS: PÅ™edvÄ›st (rychlost v dalším oddílu je stejná nebo vyšší)", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L40": "Rychlost 40 km/h", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L60": "Rychlost 60 km/h", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L80": "Rychlost 80 km/h", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L70": "Rychlost 70 km/h", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LRK": "RK: Kontrolka reostatu kontroléru", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LEKK": "", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LPU": "", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LKVD": "LKVD: Odpojení trakce", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LKT": "LKT: Indikátor brzdÄ›ní ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LRP": "LRP: ÄŒervené svÄ›tlo pÅ™etížení relé (Nelze zkompletovat jistiÄe)", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LKVC": "LKVC: Vysoké napÄ›tí není dostupné", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LVD": "LVD: TrakÄní motory v chodu", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LST": "LST: Brzdy v chodu", + "Entities.gmod_subway_81-717_mvm.Buttons.CabinDoor.CabinDoor": "DveÅ™e kabiny", + "Entities.gmod_subway_81-717_mvm.Buttons.Reverser.KVReverserDown": "Reverz vzad", + "Entities.gmod_subway_81-717_mvm.Buttons.Reverser.KVReverserUp": "Reverz vpÅ™ed", + "Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor1.PassengerDoor": "DveÅ™e z kabiny do interiéru", + "Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAToggle": "UAVA: Univerzální Automatický VypínaÄ Autostopu (vypnutí autostopu)", + "Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAContactSet": "UAVA: Univerzální Automatický VypínaÄ Autostopu (obnovení kontaktů)", + "Entities.gmod_subway_81-717_mvm.Buttons.EPKDisconnect.EPKToggle": "Ventil EPV", + "Entities.gmod_subway_81-717_mvm.Buttons.Help.ShowHelp": "Pomoc pÅ™i řízení soupravy", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake2.1:ParkingBrakeToggle": "Parkovací brzda", + "Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "IzolaÄní ventil brzdového potrubí", + "Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "IzolaÄní ventil hlavního potrubí", + "Entities.gmod_subway_81-717_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Odpojit vzduchový rozdÄ›lovaÄ", + + "Entities.gmod_subway_81-714_mvm.Buttons.GV.GVToggle": "Hlavní vypínaÄ", + "Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "IzolaÄní ventil brzdového potrubí", + "Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "IzolaÄní ventil hlavního potrubí", + "Entities.gmod_subway_81-714_mvm.Buttons.RearDoor.RearDoor": "Zadní dveÅ™e", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.DriverValveBLDisconnectToggle": "Ventil brzdového potrubí", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.DriverValveTLDisconnectToggle": "Ventil hlavního potrubí", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A65Toggle": "A65 OsvÄ›tlení interiéru", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A56Toggle": "A56 Baterie", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A63Toggle": "A63 Napájení VR (IGLA/BIS)", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A10Toggle": "A10 Ovládání kompresoru", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A30Toggle": "A30 Motor HK", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A80Toggle": "A80 Napájení trakÄních motorů", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "IzolaÄní ventil brzdového potrubí", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "IzolaÄní ventil hlavního potrubí", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.ParkingBrakeToggle": "Parkovací brzda", + "Entities.gmod_subway_81-714_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Odpojit vzduchový rozdÄ›lovaÄ", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontDoor.FrontDoor": "PÅ™ední dveÅ™e", + "Entities.gmod_subway_81-714_mvm.Buttons.Battery.VBToggle": "VB: Baterie zapnuto/vypnuto", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A54Toggle": "A54 Vyp. řízení", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A27Toggle": "A27 Osv.kabina, kontr. MR, park. brzda", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A24Toggle": "A24 Dobíjení baterie", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A53Toggle": "A53 Vlak. obvody", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A13Toggle": "A13 DveÅ™ní signalizace", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A32Toggle": "A32 OtevÅ™. pravé dveÅ™e", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A31Toggle": "A31 OtevÅ™. levé dveÅ™e", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A16Toggle": "A16 Zavírání dveří", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A12Toggle": "A12 Zavírání nouze", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A50Toggle": "A50 Přídrž PBO", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A51Toggle": "A51 Vypnutí DIP a osvÄ›tlení", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A1Toggle": "A1 J-1", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.KRPSet": "START: Nouzové řízení", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.VozvratRPSet": "Korekce zátěže reléé", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.RezMKSet": "Kompresor nouze", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.VMKToggle": "Kompresor", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.BPSNonToggle": "MÄ›niÄ", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A2Toggle": "A2 J-2", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A3Toggle": "A3 J-3", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A17Toggle": "A17 Korekce zátěže relé", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A5Toggle": "A5 ", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A6Toggle": "A6 B-1", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A8Toggle": "A8 Pneumatické ventily #1, #2", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A20Toggle": "A20 LS 2, LS 5", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A25Toggle": "A25 RuÄní brzdÄ›ní", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A22Toggle": "A22 StykaÄ kompresoru", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A23Toggle": "A23 Nouzové zapnutí kompresoru", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A39Toggle": "A39 Nouzové řízení vozidla", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A14Toggle": "A14 Relé nouzového řízení" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/cz_buttons_720.lua b/lua/metrostroi_data/languages_/_unfinished/cz_buttons_720.lua new file mode 100644 index 0000000..e8b019b --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/cz_buttons_720.lua @@ -0,0 +1,220 @@ +return [[ +{ + "Lang": "cz", + "Name": "ÄŒeÅ¡tina", + + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF1Set": "Vityaz: F1", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF2Set": "Vityaz: Následující strana", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF3Set": "Vityaz: PÅ™edeÅ¡lá strana", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF4Set": "Vityaz: Hlavní strana", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz1Set": "Vityaz: 1", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz4Set": "Vityaz: 4", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz7Set": "Vityaz: 7", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz2Set": "Vityaz: 2", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz5Set": "Vityaz: 5", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz8Set": "Vityaz: 8", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz0Set": "Vityaz: 0", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz3Set": "Vityaz: 3", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz6Set": "Vityaz: 6", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz9Set": "Vityaz: 9", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF5Set": "Vityaz: Smazat", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF6Set": "Vityaz: Nahoru\\Rychlost", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF7Set": "Vityaz: Dolů\\Proudy", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF8Set": "Vityaz: Zadat\\Vybavení vozu", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF9Set": "Vityaz: Vybrat\\Správa vybavení vozu", + "Entities.gmod_subway_81-720.Buttons.RV.EmerX1Set": "Nouzová J-1", + "Entities.gmod_subway_81-720.Buttons.RV.EmerX2Set": "Nouzová J-2", + "Entities.gmod_subway_81-720.Buttons.RV.EmerCloseDoorsSet": "DveÅ™e nouze", + "Entities.gmod_subway_81-720.Buttons.RV.EmergencyDoorsToggle": "Rezervní dveÅ™e", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode-": "Chod ventilace: +", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode+": "Chod ventilace: -", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode+": "+", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode-": "-", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode-": "Intenzita ventilace: +", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode+": "Intenzita ventilace: -", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV1Toggle": "SF1: Napájení obvodů řízení", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV2Toggle": "SF2: Napájení BUV (ovládání vozu)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV3Toggle": "SF3: Napájení BUTP (ovládánáí trakÄních motorů)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV4Toggle": "SF4: Řízení BUTP", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV5Toggle": "SF5: Nouzové řízení BUTP", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV6Toggle": "SF6: Napájení BUTP", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV7Toggle": "SF7: BBE", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV8Toggle": "SF8: Řízení BV", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV9Toggle": "SF9: Napájení BV (pÅ™etížení relé)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV10Toggle": "SF10: PPO", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV11Toggle": "SF11: Kompresor", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV12Toggle": "SF12: ZavÅ™ení dveří", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV13Toggle": "SF13: Otevřít levé dveÅ™e", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV14Toggle": "SF14: Otevřít pravé dveÅ™e", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV15Toggle": "SF15: PÅ™ední dveÅ™e", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV16Toggle": "SF16: Vlakový rozhlas", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV17Toggle": "SF17: Nouzové spojení", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV18Toggle": "SF18: Rezerva", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV19Toggle": "SF19: Napájení osvÄ›tlení interiéru", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV20Toggle": "SF20: OsvÄ›tlení nouze", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV21Toggle": "SF21: Senzor rychlosti", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV22Toggle": "SF22: Parkovací brzda", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV23Toggle": "SF23: Ovládání ventilace 1. skupiny", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV24Toggle": "SF24: Ovládání ventilace 2. skupiny", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV25Toggle": "SF25: Napájení ventilace 1. skupiny", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV26Toggle": "SF26: Napájení ventilace 2. skupiny", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV27Toggle": "SF27: Napájení zdroje", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV28Toggle": "SF28: Napájení ZKK", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV29Toggle": "SF29: SbÄ›raÄ proudu", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV30Toggle": "SF30: SmÄ›rová tabule", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV31Toggle": "SF31: Rezerva", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV32Toggle": "SF32: Rezerva", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV33Toggle": "SF33: Rezerva", + "Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPMenuSet": "ASNP: Menu", + "Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPUpSet": "ASNP: Nahoru", + "Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPDownSet": "ASNP: Dolů", + "Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPOnToggle": "ASNP: Zapnout", + "Entities.gmod_subway_81-720.Buttons.PneumoHelper1.!BrakeCylinder": "Brzdový válec", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF1Toggle": "SF1: Hlavní napájení", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF2Toggle": "SF2: Hlavní řízení", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF3Toggle": "SF3: Nouzové řízení", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF4Toggle": "SF4: BARS", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF5Toggle": "SF5: BUP", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF6Toggle": "SF6: BKCU", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF7Toggle": "SF7: BARS", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF8Toggle": "SF8: Vlakový rozhlas", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF9Toggle": "SF9: Radiostanice", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF10Toggle": "SF10: Pozice vozu", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF11Toggle": "SF11: SmÄ›r jízdy", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF12Toggle": "SF12: SvÄ›tla 1. skupina", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF13Toggle": "SF13: SvÄ›tla 2. skupina", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF14Toggle": "SF14: Parkovací svÄ›tla", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF15Toggle": "SF15: OsvÄ›tlení kabiny", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF16Toggle": "SF16: Topné tÄ›leso", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF17Toggle": "SF17: Klimatizace kabiny", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF18Toggle": "SF18: Mazaní okolků", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF19Toggle": "SF19: Napájení hlavního KRM", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF20Toggle": "SF20: Nouzové napájení KRM", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF21Toggle": "SF21: Otevírání dveří", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF22Toggle": "SF22: Zavírání dveří", + "Entities.gmod_subway_81-720.Buttons.BTO.K29Toggle": "KRMSH (ventil brzdiÄe)", + "Entities.gmod_subway_81-720.Buttons.PassengerDoor2.PassengerDoor": "DveÅ™e z kabiny do interiéru", + "Entities.gmod_subway_81-720.Buttons.VoltHelper2.!HV": "Voltmeter (kV)", + "Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I1_3": "Napájení trakÄních motorů 1. skupiny (A)", + "Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I2_4": "Napájení trakÄních motorů 2. skupiny (A)", + "Entities.gmod_subway_81-720.Buttons.GV.GVToggle": "Hlavní vypínaÄ", + "Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "IzolaÄní ventil brzdového potrubí", + "Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "IzolaÄní ventil hlavního potrubí", + "Entities.gmod_subway_81-720.Buttons.RearDoor1.RearDoor": "Zadní dveÅ™e", + "Entities.gmod_subway_81-720.Buttons.RearDoor.RearDoor": "Zadní dveÅ™e", + "Entities.gmod_subway_81-720.Buttons.BackDown.Pant1Toggle": "Odpojení sbÄ›raÄe proudů 1. skupiny", + "Entities.gmod_subway_81-720.Buttons.BackDown.Pant2Toggle": "Odpojení sbÄ›raÄe proudů 2. skupiny", + "Entities.gmod_subway_81-720.Buttons.BackDown.Vent1Toggle": "Ventilace 1. skupina", + "Entities.gmod_subway_81-720.Buttons.BackDown.Vent2Toggle": "Ventilace 2. skupina", + "Entities.gmod_subway_81-720.Buttons.BackDown.VentToggle": "", + "Entities.gmod_subway_81-720.Buttons.BackDown.PassLightToggle": "OsvÄ›tlení interiéru", + "Entities.gmod_subway_81-720.Buttons.BackDown.CabLightToggle": "OsvÄ›tlení kabiny", + "Entities.gmod_subway_81-720.Buttons.BackDown.Headlights1Toggle": "SvÄ›tla 1. skupina", + "Entities.gmod_subway_81-720.Buttons.BackDown.Headlights2Toggle": "SvÄ›tla 2. skupina", + "Entities.gmod_subway_81-720.Buttons.BackDown.ParkingBrakeToggle": "Parkovací brzda", + "Entities.gmod_subway_81-720.Buttons.BackDown.TorecDoorsToggle": "PÅ™ední dveÅ™e", + "Entities.gmod_subway_81-720.Buttons.BackDown.BBERToggle": "Nouzové zapnutí BBE", + "Entities.gmod_subway_81-720.Buttons.BackDown.BBEToggle": "BBE", + "Entities.gmod_subway_81-720.Buttons.BackDown.CompressorToggle": "Kompresor", + "Entities.gmod_subway_81-720.Buttons.BackDown.CabLightStrengthToggle": "Napájení osvÄ›tlení kabiny", + "Entities.gmod_subway_81-720.Buttons.BackDown.AppLights1Toggle": "OsvÄ›tlení vybavení vozu", + "Entities.gmod_subway_81-720.Buttons.BackDown.AppLights2Toggle": "", + "Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock-": "Blokování nefunkÄních jednotek BARS: -", + "Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock+": "Blokování nefunkÄních jednotek BARS: +", + "Entities.gmod_subway_81-720.Buttons.BackDown.BatteryToggle": "Baterie zapnuto/vypnuto", + "Entities.gmod_subway_81-720.Buttons.BackDown.ALSFreqToggle": "Dekodér ALS", + "Entities.gmod_subway_81-720.Buttons.VoltHelper1.!Battery": "Napájení obvodů řízení", + "Entities.gmod_subway_81-720.Buttons.PassengerDoor.PassengerDoor": "DveÅ™e z kabiny do interiéru", + "Entities.gmod_subway_81-720.Buttons.CabinDoorR.CabinDoorRight": "DveÅ™e kabiny", + "Entities.gmod_subway_81-720.Buttons.CabinDoorL.CabinDoorLeft": "DveÅ™e kabiny", + "Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "IzolaÄní ventil brzdového potrubí", + "Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "IzolaÄní ventil hlavního potrubí", + "Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectLToggle": "DveÅ™e levé (pÅ™edvolba)", + "Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectRToggle": "DveÅ™e pravé (pÅ™edvolba)", + "Entities.gmod_subway_81-720.Buttons.PUL.DoorBlockToggle": "Blokování dveří", + "Entities.gmod_subway_81-720.Buttons.PUL.!DoorLeftLamp": "ÄŒinnost tlaÄítka levých dveří", + "Entities.gmod_subway_81-720.Buttons.PUL.DoorLeftSet": "Levé dveÅ™e", + "Entities.gmod_subway_81-720.Buttons.PUU.!DoorsClosed": "Signalizace zavÅ™ení dveří", + "Entities.gmod_subway_81-720.Buttons.PUU.StandToggle": "Zastavení", + "Entities.gmod_subway_81-720.Buttons.PUU.TickerToggle": "Tachograf", + "Entities.gmod_subway_81-720.Buttons.PUU.KAHToggle": "KAH: TlaÄítko nouzové jízdy", + "Entities.gmod_subway_81-720.Buttons.PUU.ALSToggle": "ALS: Automatická lokomotivní signalizace", + "Entities.gmod_subway_81-720.Buttons.PUU.FDepotToggle": "Odjezd z depa", + "Entities.gmod_subway_81-720.Buttons.PUU.!HVoltage": "Vysoké napÄ›tí není dostupné", + "Entities.gmod_subway_81-720.Buttons.PUU.PassSchemeToggle": "Schéma metra nad dveÅ™mi", + "Entities.gmod_subway_81-720.Buttons.PUU.EmergencyCompressorSet": "Kompresor nouze", + "Entities.gmod_subway_81-720.Buttons.PUU.EnableBVSet": "Zapnutí ochrany (pÅ™etížení relé)", + "Entities.gmod_subway_81-720.Buttons.PUU.DisableBVSet": "Odpojení BV (pÅ™etížení relé)", + "Entities.gmod_subway_81-720.Buttons.PUU.RingSet": "Zvonek", + "Entities.gmod_subway_81-720.Buttons.PUU.R_Program2Set": "Start hlášení (Program 2)", + "Entities.gmod_subway_81-720.Buttons.PUU.R_AnnouncerToggle": "Vlakový rozhlas", + "Entities.gmod_subway_81-720.Buttons.PUU.R_LineToggle": "Linka", + "Entities.gmod_subway_81-720.Buttons.PUU.R_EmerSet": "Nouzové spojení", + "Entities.gmod_subway_81-720.Buttons.PUU.R_Program1Set": "Start hlášení (Program 1)", + "Entities.gmod_subway_81-720.Buttons.PUU.EnableBVEmerSet": "Rezervní obnova BV", + "Entities.gmod_subway_81-720.Buttons.PUU.EmergencyControlsToggle": "Nouzové řízení", + "Entities.gmod_subway_81-720.Buttons.PUU.WiperToggle": "StÄ›raÄ", + "Entities.gmod_subway_81-720.Buttons.PUU.!VDop": "Povolená rychlost", + "Entities.gmod_subway_81-720.Buttons.PUU.!VFact": "Aktuální rychlost", + "Entities.gmod_subway_81-720.Buttons.PUU.!VPred": "PÅ™edvÄ›st", + "Entities.gmod_subway_81-720.Buttons.PUU.!VDop2": "Povolená rychlost", + "Entities.gmod_subway_81-720.Buttons.PUU.!Acc": "Akcelerace", + "Entities.gmod_subway_81-720.Buttons.PUU.!Forw": "Jízda vpÅ™ed", + "Entities.gmod_subway_81-720.Buttons.PUU.!Back": "Jízda vzad", + "Entities.gmod_subway_81-720.Buttons.PUR.AccelRateToggle": "Míra akcelerace", + "Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeAddSet": "Náhradní brzda (brzdÄ›ní)", + "Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeReleaseSet": "Náhradní brzda (odbrzdÄ›ní)", + "Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeToggle": "Náhradní brzda", + "Entities.gmod_subway_81-720.Buttons.PUR.EmergencyBrakeToggle": "Rychlobrzda", + "Entities.gmod_subway_81-720.Buttons.PUR.DoorCloseToggle": "ZavÅ™ení dveří", + "Entities.gmod_subway_81-720.Buttons.PUR.AttentionMessageSet": "UpozornÄ›ní na zprávu", + "Entities.gmod_subway_81-720.Buttons.PUR.AttentionSet": "BdÄ›lost", + "Entities.gmod_subway_81-720.Buttons.PUR.AttentionBrakeSet": "UpozornÄ›ní na brzdu", + "Entities.gmod_subway_81-720.Buttons.PUR.HornBSet": "HoukaÄka", + "Entities.gmod_subway_81-720.Buttons.PUR.DoorRightSet": "Pravé dveÅ™e", + "Entities.gmod_subway_81-720.Buttons.PUR.!DoorRightLamp": "ÄŒinnost tlaÄítka pravých dveří", + "Entities.gmod_subway_81-720.Buttons.PneumoHelper2.!BrakeTrainLine": "ÄŒervená: brzdové potrubí, ÄŒerná: hlavní potrubí", + + "Entities.gmod_subway_81-721.Buttons.GV.GVToggle": "Hlavní vypínaÄ", + "Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "IzolaÄní ventil brzdového potrubí", + "Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "IzolaÄní ventil hlavního potrubí", + "Entities.gmod_subway_81-721.Buttons.FrontDoor.FrontDoor": "PÅ™ední dveÅ™e", + "Entities.gmod_subway_81-721.Buttons.RearDoor.RearDoor": "Zadní dveÅ™e", + "Entities.gmod_subway_81-721.Buttons.Battery.BatteryToggle": "Baterie zapnuto/vypnuto", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV1Toggle": "SF1: Napájení obvodů řízení", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV2Toggle": "SF2: Napájení BUV (ovládání vozů)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV3Toggle": "SF3: Napájení BUTP (ovládání traÄkních motorů)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV4Toggle": "SF4: Řízení BUTP", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV5Toggle": "SF5: Nouzové řízení BUTP", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV6Toggle": "SF6: Napájení BUTP", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV7Toggle": "SF7: BBE", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV8Toggle": "SF8: Řízení BV", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV9Toggle": "SF9: Napájení BV (pÅ™etížení relé)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV10Toggle": "SF10: PPO", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV11Toggle": "SF11: Kompresor", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV12Toggle": "SF12: ZavÅ™ení dveří", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV13Toggle": "SF13: Otevřít levé dveÅ™e", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV14Toggle": "SF14: Otevřít pravé dveÅ™e", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV15Toggle": "SF15: PÅ™ední dveÅ™e", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV16Toggle": "SF16: Vlakový rozhlas", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV17Toggle": "SF17: Nouzové spojení", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV18Toggle": "SF18: Rezerva", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV19Toggle": "SF19: Napájení osvÄ›tlení interiéru", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV20Toggle": "SF20: OsvÄ›tlení nouze", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV21Toggle": "SF21: Senzor rychlosti", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV22Toggle": "SF22: Parkovací brzda", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV23Toggle": "SF23: Ovládání ventilace 1. skupiny", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV24Toggle": "SF24: Ovládání ventilace 2. skupiny", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV25Toggle": "SF25: Napájení ventilace 1. skupiny", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV26Toggle": "SF26: Napájení ventilace 2. skupiny", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV27Toggle": "SF27: Napájení zdroje", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV28Toggle": "SF28: Napájení ZKK", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV29Toggle": "SF29: SbÄ›raÄ proudů", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV30Toggle": "SF30: SmÄ›rová tabule", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV31Toggle": "SF31: Rezerva", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV32Toggle": "SF32: Rezerva", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV33Toggle": "SF33: Rezerva", + "Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "IzolaÄní ventil brzdového potrubí", + "Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "IzolaÄní ventil hlavního potrubí" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/cz_buttons_ezh3.lua b/lua/metrostroi_data/languages_/_unfinished/cz_buttons_ezh3.lua new file mode 100644 index 0000000..68f9f1a --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/cz_buttons_ezh3.lua @@ -0,0 +1,140 @@ +return [[ +{ + "Lang": "cz", + "Name": "ÄŒeÅ¡tina", + + + "Entities.gmod_subway_ezh3.Buttons.Stopkran.EmergencyBrakeValveToggle": "Záchraná brzda", + "Entities.gmod_subway_ezh3.Buttons.Back.BackDoor": "Zadní dveÅ™e", + "Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle": "Ventil brzdového potrubí", + "Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle": "Ventil hlavního potrubí", + "Entities.gmod_subway_ezh3.Buttons.Battery.VBToggle": "VB: Baterie zapnuto/vypnuto (nízkonapÄ›tová)", + "Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "IzolaÄní ventil brzdového potrubí", + "Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "IzolaÄní ventil hlavního potrubí", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPMenuSet": "Vlakový rozhlas: Menu", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPUpSet": "Vlakový rozhlas: Nahoru", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPDownSet": "Vlakový rozhlas: Dolů", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPOnToggle": "Vlakový rozhlas: Zapnout", + "Entities.gmod_subway_ezh3.Buttons.PassengerDoor1.PassengerDoor": "DveÅ™e z kabiny do interiéru", + "Entities.gmod_subway_ezh3.Buttons.PassengerDoor.PassengerDoor": "DveÅ™e z kabiny do interiéru", + "Entities.gmod_subway_ezh3.Buttons.CabinDoor.CabinDoor": "DveÅ™e kabiny", + "Entities.gmod_subway_ezh3.Buttons.Front.FrontDoor": "PÅ™ední dveÅ™e", + "Entities.gmod_subway_ezh3.Buttons.GV.GVToggle": "Hlavní vypínaÄ", + "Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "IzolaÄní ventil hlavního potrubí", + "Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "IzolaÄní ventil brzdového potrubí", + "Entities.gmod_subway_ezh3.Buttons.Panel.!OCH": "NÄŒ: Bez kódu", + "Entities.gmod_subway_ezh3.Buttons.Panel.!0": "0: Kód 0 (NávÄ›st zastavení)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!40": "Rychlost 40 km/h", + "Entities.gmod_subway_ezh3.Buttons.Panel.!60": "Rychlost 60 km/h", + "Entities.gmod_subway_ezh3.Buttons.Panel.!70": "Rychlost 70 km/h", + "Entities.gmod_subway_ezh3.Buttons.Panel.!80": "Rychlost 80 km/h", + "Entities.gmod_subway_ezh3.Buttons.Panel.!Speedometer": "RychlomÄ›r (km/h)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!TotalAmpermeter": "Ampérmetr (A)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!TotalVoltmeter": "Voltmetr (kV)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!BatteryVoltage": "NapÄ›tí baterie řízení(V)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!BrakeCylinder": "Brzdový válec", + "Entities.gmod_subway_ezh3.Buttons.Panel.!LinesPressure": "Napájecí-brzdové potrubí (Äervená: brzdové potrubí, Äerná: hlavní potrubí)", + "Entities.gmod_subway_ezh3.Buttons.Main.KU1Toggle": "Kompresor", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMM1Set": "SAMM: Vypnutí trakce", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMM2Set": "SAMM: Rozjezd", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMM3Set": "SAMM: Korekce", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal1": "Lamp: Jízda-Brzda", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal2": "Lamp: OperaÄní stav SAMM", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal3": "Lamp: Zapnuta Äinná jednotka SAMM", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMOnToggle": "SAMM: Zapnutí systému", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMBlokToggle": "SAMM: ÄŒinná jednotka", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMCommand3Set": "SAMM: J-2", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMCommand2Set": "SAMM: Dohnat", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMCommand1Set": "SAMM: Souhlas", + "Entities.gmod_subway_ezh3.Buttons.Main.KSNSet": "KSN: Porucha řízení", + "Entities.gmod_subway_ezh3.Buttons.Main.R_Program1Set": "Start hlášení (Program 1)", + "Entities.gmod_subway_ezh3.Buttons.Main.R_Program2Set": "Start hlášení (Program 2)", + "Entities.gmod_subway_ezh3.Buttons.Main.VUSToggle": "PÅ™epínaÄ: SvÄ›tla (dolů)/SvÄ›tla dálková (nahoru)", + "Entities.gmod_subway_ezh3.Buttons.Main.L_3Toggle": "PÅ™epínaÄ: OsvÄ›tlení přístojů", + "Entities.gmod_subway_ezh3.Buttons.Main.VAHToggle": "SpínaÄ: Nouzová jízda", + "Entities.gmod_subway_ezh3.Buttons.Main.DIPonSet": "Osv. Vkl.: Zapnout osvÄ›tlení", + "Entities.gmod_subway_ezh3.Buttons.Main.DIPoffSet": "Osv. Vykl.: Vypnout osvÄ›tlení", + "Entities.gmod_subway_ezh3.Buttons.Main.KSDSet": "KSD: Signalizace zavÅ™ení dveří", + "Entities.gmod_subway_ezh3.Buttons.Main.KVTSet": "KVT: TlaÄítko bdÄ›losti", + "Entities.gmod_subway_ezh3.Buttons.Main.KBSet": "KB: TlaÄítko bdÄ›losti", + "Entities.gmod_subway_ezh3.Buttons.Main.KBLamp": "Lamp: Funkce reostatu kontroléru", + "Entities.gmod_subway_ezh3.Buttons.Main.ARSToggle": "ARS: Automatická regulace rychlosti", + "Entities.gmod_subway_ezh3.Buttons.Main.R_UNchToggle": "UNCh: ZesilovaÄ nízké frekvence", + "Entities.gmod_subway_ezh3.Buttons.Main.VUD1Toggle": "VUD: ZavÅ™ení dveří", + "Entities.gmod_subway_ezh3.Buttons.Main.R_RadioToggle": "Vlakový rozhlas", + "Entities.gmod_subway_ezh3.Buttons.Main.ALSToggle": "ALS: Automatická lokomotivní signalizace", + "Entities.gmod_subway_ezh3.Buttons.Main.VozvratRPSet": "KVRP: Korekce zátěže relé", + "Entities.gmod_subway_ezh3.Buttons.Main.RingSet": "Zvonek", + "Entities.gmod_subway_ezh3.Buttons.Main.L_2Toggle": "TlaÄítko: OsvÄ›tlení kabiny", + "Entities.gmod_subway_ezh3.Buttons.Main.KRZDSet": "KRZD: DveÅ™e nouze", + "Entities.gmod_subway_ezh3.Buttons.Main.KDPSet": "KDP: Otevřít pravé dveÅ™e", + "Entities.gmod_subway_ezh3.Buttons.Main.KDLSet": "KDL: Otevřít levé dveÅ™e", + "Entities.gmod_subway_ezh3.Buttons.Main.KAHSet": "KAH: TlaÄítko nouzové jízdy", + "Entities.gmod_subway_ezh3.Buttons.Main.RezMKSet": "Kompresor nouze", + "Entities.gmod_subway_ezh3.Buttons.Main.KRPSet": "KRP: Nouzové řízení", + "Entities.gmod_subway_ezh3.Buttons.Main.RSTToggle": "VPR: Radiostanice", + "Entities.gmod_subway_ezh3.Buttons.Main.R_GToggle": "Vlakový rozhlas v kabinÄ›", + "Entities.gmod_subway_ezh3.Buttons.Main.R_ZSToggle": "ZS: Vlakový rozhlas ve vozech", + "Entities.gmod_subway_ezh3.Buttons.Main.Custom2Set": "Unused Switch", + "Entities.gmod_subway_ezh3.Buttons.Main.Custom3Set": "Unused Switch", + "Entities.gmod_subway_ezh3.Buttons.Main.ASNPPlay": "Vlakový rozhlas v pořádku", + "Entities.gmod_subway_ezh3.Buttons.AV1.VU3Toggle": "VU3: OsvÄ›tlení kabiny", + "Entities.gmod_subway_ezh3.Buttons.AV1.VU2Toggle": "VU2: OsvÄ›tlení nouze (45V)", + "Entities.gmod_subway_ezh3.Buttons.AV1.VU1Toggle": "VU1: VytápÄ›ní kabiny (3kWt)", + "Entities.gmod_subway_ezh3.Buttons.AVMain.AV8BToggle": "AV-8B: Automatický spínaÄ (vysokonapÄ›tový)", + "Entities.gmod_subway_ezh3.Buttons.RC1.RC1Toggle": "RC-ARS: OdpojovaÄ Å™Ã­dicích obvodů ARS", + "Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAToggle": "UAVA: Univerzální Automatický VypínaÄ Autostopu (vypnutí autostopu)", + "Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAContactSet": "UAVA: Univerzální Automatický VypínaÄ Autostopu (obnovení kontaktů)", + "Entities.gmod_subway_ezh3.Buttons.VUHelper.VUToggle": "VU: Řízení", + "Entities.gmod_subway_ezh3.Buttons.HelperPanel.VDLSet": "KDL: Otevřít levé dveÅ™e", + "Entities.gmod_subway_ezh3.Buttons.HelperPanel.VUD2Toggle": "VUD2: ZavÅ™ení dveří", + "Entities.gmod_subway_ezh3.Buttons.EPKDisconnect.EPKToggle": "Ventil EPK", + "Entities.gmod_subway_ezh3.Buttons.VU.VUToggle": "VU: Řízení", + "Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeLeft": "Parkovací brzda", + "Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeRight": "Parkovací brzda", + "Entities.gmod_subway_ezh3.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Odpojit vzduchový rozdÄ›lovaÄ", + + "Entities.gmod_subway_em508t.Buttons.Stopkran.EmergencyBrakeValveToggle": "Záchraná brzda", + "Entities.gmod_subway_em508t.Buttons.Battery.VBToggle": "VB: Baterie zapnuto/vypnuto (nízkonapÄ›tová)", + "Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Ventil brzdového potrubí", + "Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Ventil hlavního potrubí", + "Entities.gmod_subway_em508t.Buttons.GV.GVToggle": "Hlavní vypínaÄ", + "Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Ventil hlavního potrubí", + "Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Ventil brzdového potrubí", + "Entities.gmod_subway_em508t.Buttons.RearDoor.RearDoor": "Zadní dveÅ™e", + "Entities.gmod_subway_em508t.Buttons.Back2.!HVFuse": "Pojistky hlavního vypínaÄe", + "Entities.gmod_subway_em508t.Buttons.Back2.!Relays": "Skříňka s zařízeními pro dobíjení baterie a dveÅ™ního rozdÄ›lovaÄe", + "Entities.gmod_subway_em508t.Buttons.Back2.!Heater": "Topné tÄ›leso", + "Entities.gmod_subway_em508t.Buttons.Front.FrontDoor": "PÅ™ední dveÅ™e", + "Entities.gmod_subway_em508t.Buttons.AV1.VU3Toggle": "VU3: OsvÄ›tlení kabiny", + "Entities.gmod_subway_em508t.Buttons.AV1.VU2Toggle": "VU2: OsvÄ›tlení nouze (45V)", + "Entities.gmod_subway_em508t.Buttons.AV1.VU1Toggle": "VU1: VytápÄ›ní kabiny (3kWt)", + "Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeLeft": "Parkovací brzda", + "Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeRight": "Parkovací brzda", + "Entities.gmod_subway_em508t.Buttons.CabinDoor.CabinDoor1": "DveÅ™e kabiny", + "Entities.gmod_subway_em508t.Buttons.PassengerDoor.PassengerDoor": "DveÅ™e z kabiny do interiéru", + "Entities.gmod_subway_em508t.Buttons.PassengerDoor1.PassengerDoor": "DveÅ™e z kabiny do interiéru", + "Entities.gmod_subway_em508t.Buttons.Main.!RedRP": "RP: ÄŒervené svÄ›tlo pÅ™etížení relé (Nelze zkompletovat jistiÄe)", + "Entities.gmod_subway_em508t.Buttons.Main.!GreenRP": "RP: Zelené svÄ›tlo pÅ™ehřátí relé (zabraňuje nadproudu trakÄních motorů)", + "Entities.gmod_subway_em508t.Buttons.Main.!SD": "Signalizace zavÅ™ení dveří", + "Entities.gmod_subway_em508t.Buttons.Main.KDLSet": "PÅ™epínaÄ: Otevřít levé dveÅ™e", + "Entities.gmod_subway_em508t.Buttons.Main.KSDSet": "PÅ™epínaÄ: Signalizace zavÅ™ení dveří", + "Entities.gmod_subway_em508t.Buttons.Main.VozvratRPSet": "PÅ™epínaÄ: Korekce zátěže relé", + "Entities.gmod_subway_em508t.Buttons.Main.KSNSet": "SpínaÄ: Porucha řízení", + "Entities.gmod_subway_em508t.Buttons.Main.VUD1Toggle": "PÅ™epínaÄ: ZavÅ™ení dveří", + "Entities.gmod_subway_em508t.Buttons.Main.KU1Toggle": "PÅ™epínaÄ: Kompresor", + "Entities.gmod_subway_em508t.Buttons.Main.DIPonSet": "KU4: Zapnout osvÄ›tlení", + "Entities.gmod_subway_em508t.Buttons.Main.DIPoffSet": "KU5: Vypnout osvÄ›tlení", + "Entities.gmod_subway_em508t.Buttons.Main.RezMKSet": "PÅ™epínaÄ: Kompresor nouze", + "Entities.gmod_subway_em508t.Buttons.Main.KDPSet": "KDP: Otevřít pravé dveÅ™e", + "Entities.gmod_subway_em508t.Buttons.Main.KRZDSet": "KU10: DveÅ™e nouze", + "Entities.gmod_subway_em508t.Buttons.AVMain.AV8BToggle": "AV-8B: Automatický spínaÄ (vysokonapÄ›tový)", + "Entities.gmod_subway_em508t.Buttons.VU.VUToggle": "VU: Řízení", + "Entities.gmod_subway_em508t.Buttons.VU.!Voltage": "Napájení obvodů řízení", + "Entities.gmod_subway_em508t.Buttons.HelperPanel.VUD2Toggle": "VUD2: ZavÅ™ení dveří", + "Entities.gmod_subway_em508t.Buttons.HelperPanel.VDLSet": "VDL: Otevřít levé dveÅ™e", + "Entities.gmod_subway_em508t.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle": "Ventil brzdového potrubí", + "Entities.gmod_subway_em508t.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle": "Ventil hlavního potrubí", + "Entities.gmod_subway_em508t.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Odpojit vzduchový rozdÄ›lovaÄ" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/cz_spawner.lua b/lua/metrostroi_data/languages_/_unfinished/cz_spawner.lua new file mode 100644 index 0000000..b941656 --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/cz_spawner.lua @@ -0,0 +1,117 @@ +return [[ +{ + "Lang": "cz", + "Name": "ÄŒeÅ¡tina", + + "Spawner.Title": "Spawner vozů metra", + "Spawner.Trains1": "Typ vozů metra", + "Spawner.Trains2": "Maximum pro tebe", + "Spawner.WagNum": "PoÄet vozů", + "Spawner.AutoCouple": "Automaticky spřáhnout vozy", + + "Entities.gmod_subway_81-717_mvm.Spawner.Texture.Name": "Textura vozu", + "Entities.gmod_subway_81-717_mvm.Spawner.PassTexture.Name": "Textura interiéru", + "Entities.gmod_subway_81-717_mvm.Spawner.CabTexture.Name": "Textura kabiny", + "Entities.gmod_subway_81-717_mvm.Spawner.Announcer.Name": "HlásiÄ", + "Entities.gmod_subway_81-717_mvm.Spawner.Lighter.Name": "ZapalovaÄ", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.Name": "Panel ARS", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.1": "Standartní(obdelníkové žárovky)", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.2": "Standartní(kruhové žárovky)", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.3": "Kyjevská/Petrohradská ARS", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.4": "Stará ARS", + "Entities.gmod_subway_81-717_mvm.Spawner.Cran.Name": "Typ brzdiÄe", + "Entities.gmod_subway_81-717_mvm.Spawner.Cran.1": "334", + "Entities.gmod_subway_81-717_mvm.Spawner.Cran.2": "013", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.Name": "Maska Äela", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.1": "2-2", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.2": "2-2-2", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.3": "1-4-1 nárazník 1", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.4": "1-4-1 nárazník 2", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.5": "1-1", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.6": "Retro", + "Entities.gmod_subway_81-717_mvm.Spawner.LED.Name": "SvÄ›tla LED", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.Name": "Typ statického mÄ›niÄe", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.1": "Starý vysokotónový zvuk", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.2": "Starý stÅ™edotónový zvuk", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.3": "Standartní(Petrohrad)", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.4": "Standartní(TKL)", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.5": "Standartní", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.6": "Kyjevský", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.7": "Starý", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.8": "Standartní 2", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.9": "Standartní 3", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.10": "Bez zvuku (BPN-115)", + "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.Name": "Zvuk řídicího kontroléru", + "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.1": "Typ 1", + "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.2": "Typ 2", + "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.3": "Typ 3", + "Entities.gmod_subway_81-717_mvm.Spawner.NewKV.Name": "Nový model kontroléru", + "Entities.gmod_subway_81-717_mvm.Spawner.HornType.Name": "Petrohradská houkaÄka", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.Name": "Zvuk zvonku ARS", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.1": "Starý", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.2": "Standartní s nízkým tónem", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.3": "Standartní s vysokým tónem", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.4": "Standartní pÅ™eruÅ¡ovaný s nízkým tónem", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.5": "Standartní pÅ™eruÅ¡ovaný s vysokým tónem", + "Entities.gmod_subway_81-717_mvm.Spawner.NM.Name": "Tlak v hlavním potrubí", + "Entities.gmod_subway_81-717_mvm.Spawner.Battery.Name": "Zapnout baterii", + "Entities.gmod_subway_81-717_mvm.Spawner.Switches.Name": "Zapnout vÅ¡echny jistiÄe", + "Entities.gmod_subway_81-717_mvm.Spawner.SwitchesR.Name": "Zapnout náhodné jistiÄe", + "Entities.gmod_subway_81-717_mvm.Spawner.DoorsL.Name": "Otevřít levé dveÅ™e", + "Entities.gmod_subway_81-717_mvm.Spawner.DoorsR.Name": "Otevřít pravé dveÅ™e", + "Entities.gmod_subway_81-717_mvm.Spawner.GV.Name": "Zapnout hlavní vypínaÄ", + "Entities.gmod_subway_81-717_mvm.Spawner.PB.Name": "Parkovací brzda", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.Name": "Typ postranních žárovek", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.1": "Horizontální", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.2": "Vertikální", + "Entities.gmod_subway_81-717_mvm.Spawner.MVM.Name": "Znak MytiÅ¡Äi", + "Entities.gmod_subway_81-717_mvm.Spawner.HandRail.Name": "Madla", + "Entities.gmod_subway_81-717_mvm.Spawner.HandRail.1": "Stará", + "Entities.gmod_subway_81-717_mvm.Spawner.HandRail.2": "Nová", + "Entities.gmod_subway_81-717_mvm.Spawner.SeatType.Name": "Sedadla", + "Entities.gmod_subway_81-717_mvm.Spawner.SeatType.1": "Stará", + "Entities.gmod_subway_81-717_mvm.Spawner.SeatType.2": "Nová", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.Name": "OsvÄ›tlení interiéru", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.1": "Typ 1", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.2": "Typ 2", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.3": "Typ 3", + "Entities.gmod_subway_81-717_mvm.Spawner.Breakers.Name": "JistiÄe na pravé stranÄ›", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.Name": "Reklamy", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.1": "Typ 1", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.2": "Typ 2", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.3": "Typ 3", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.4": "Bez reklam", + + "Entities.gmod_subway_81-720.Spawner.Texture.Name": "Textura vozu", + "Entities.gmod_subway_81-720.Spawner.PassTexture.Name": "Textura interiéru", + "Entities.gmod_subway_81-720.Spawner.CabTexture.Name": "Textura kabiny", + "Entities.gmod_subway_81-720.Spawner.Announcer.Name": "HlásiÄ", + "Entities.gmod_subway_81-720.Spawner.Scheme.Name": "Schéma metra nad dveÅ™mi", + "Entities.gmod_subway_81-720.Spawner.PassSchemesInvert.Name": "Obrátit schéma metra", + "Entities.gmod_subway_81-720.Spawner.NM.Name": "Tlak v hlavním potrubí", + "Entities.gmod_subway_81-720.Spawner.Battery.Name": "Zapnout baterii", + "Entities.gmod_subway_81-720.Spawner.BRU.Name": "Zapnout hlavní vypínaÄ", + "Entities.gmod_subway_81-720.Spawner.PVZR.Name": "JistiÄe na POV budou zapnuty náhodnÄ›", + "Entities.gmod_subway_81-720.Spawner.PPZ.Name": "Zapnout vÅ¡echny potÅ™ebné jistiÄe", + "Entities.gmod_subway_81-720.Spawner.PPZDepot.Name": "Vypnout vÅ¡echny jistiÄe (jako v depu)", + "Entities.gmod_subway_81-720.Spawner.PPZR.Name": "JistiÄe na POS budou zapnuty náhodnÄ›", + "Entities.gmod_subway_81-720.Spawner.DoorsL.Name": "Otevřít levé dveÅ™e", + "Entities.gmod_subway_81-720.Spawner.DoorsR.Name": "Otevřít pravé dveÅ™e", + + "Entities.gmod_subway_81-722.Spawner.Texture.Name": "Textura vozu", + "Entities.gmod_subway_81-722.Spawner.PassTexture.Name": "Textura interiéru", + "Entities.gmod_subway_81-722.Spawner.CabTexture.Name": "Textura kabiny", + "Entities.gmod_subway_81-722.Spawner.Announcer.Name": "HlásiÄ", + "Entities.gmod_subway_81-722.Spawner.Scheme.Name": "Schéma metra nad dveÅ™mi", + "Entities.gmod_subway_81-722.Spawner.SarmatInvert.Name": "Obrátit schéma metra", + "Entities.gmod_subway_81-722.Spawner.NM.Name": "Tlak v hlavním potrubí", + "Entities.gmod_subway_81-722.Spawner.Battery.Name": "Zapnout baterii", + "Entities.gmod_subway_81-722.Spawner.Switches.Name": "Zapnout vÅ¡echny jistiÄe", + "Entities.gmod_subway_81-722.Spawner.SwitchesR.Name": "Zapnout náhodné jistiÄe", + "Entities.gmod_subway_81-722.Spawner.DoorsL.Name": "Otevřít levé dveÅ™e", + "Entities.gmod_subway_81-722.Spawner.DoorsR.Name": "Otevřít pravé dveÅ™e", + + "Spawner.Close": "Zavřít", + "Spawner.Spawn": "Hotovo" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/de_base.lua b/lua/metrostroi_data/languages_/_unfinished/de_base.lua new file mode 100644 index 0000000..20e795a --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/de_base.lua @@ -0,0 +1,53 @@ +return [[ +{ + "Lang": "de", + "Name": "Deutsch", + "Panel.Admin": "Admin", + "Panel.Client": "Client", + "Panel.DrawDebugInfo": "Draw debugging info", + "Panel.DisableCamAccel": "Deaktivere Bewegende Camera", + "Panel.DisableHoverText": "Deaktivere Info Text", + + "Entities.gmod_subway_base.Name": "U-Bahn Basis", + "Entities.gmod_subway_81-703.Name": "E (Triebkopf)", + "Entities.gmod_subway_81-703_2.Name": "E (Zwischenwagen)", + "Entities.gmod_subway_81-717_mvm.Name": "81-717(MVM)", + "Entities.gmod_subway_81-717_lvz.Name": "81-717(LVZ)", + "Entities.gmod_subway_81-714_mvm.Name": "81-714(MVM)", + "Entities.gmod_subway_81-714_lvz.Name": "81-714(LVZ)", + "Entities.gmod_subway_81-7036.Name": "81-7036 (Dummy)", + "Entities.gmod_subway_81-7037.Name": "81-7037 (Dummy)", + "Entities.gmod_subway_81-720.Name": "81-720 (Triebkopf)", + "Entities.gmod_subway_81-721.Name": "81-721 (Zwischenwagen)", + "Entities.gmod_subway_81-722.Name": "81-722 (Triebkopf)", + "Entities.gmod_subway_81-723.Name": "81-723 (Zwischenwagen mit Motor)", + "Entities.gmod_subway_81-724.Name": "81-724 (Zwischenwagen ohne Motor)", + "Entities.gmod_subway_e.Name": "E", + "Entities.gmod_subway_em.Name": "Em", + "Entities.gmod_subway_ema.Name": "Ema", + "Entities.gmod_subway_ezh.Name": "Ezh", + "Entities.gmod_subway_ezh1.Name": "Ezh1", + "Entities.gmod_subway_em508.Name": "Em-508", + "Entities.gmod_subway_em508_int.Name": "Em-508 (Zwischenwagen)", + "Entities.gmod_subway_ezh3.Name": "Ezh3", + "Entities.gmod_subway_ezh3ru1.Name": "Ezh3 RU1", + "Entities.gmod_subway_ema508t.Name": "Em-508t", + "Entities.gmod_subway_tatra_t3.Name": "Tatra T3", + "Entities.gmod_subway_ai.Name": "KI Zug", + + "Entities.gmod_train_bogey.Name": "Drehgestell", + "Entities.gmod_train_couple.Name": "Kupplung", + + "Entities.gmod_track_pui.Name": "PUI Uhr", + "Entities.gmod_track_mus_elektronika7.Name": "Digitale Uhr", + "Entities.gmod_mus_clock_analog.Name": "Analoge Uhr", + "Entities.gmod_track_clock_time.Name": "Grosser Uhr", + "Entities.gmod_track_clock_small.Name": "Kleiner Intervallanzeiger", + "Entities.gmod_track_clock_interval.Name": "Grosser Intervallanzeiger", + "Entities.gmod_track_switch.Name": "Weichenbox", + "Entities.gmod_track_powermeter.Name": "Messgeraet", + "Entities.gmod_track_controller.Name": "Gleis Kontroller", + "Entities.gmod_track_udochka.Name": "Elektrischer Kontakt", + "Entities.gmod_train_spawner.Name": "Zug Spawner" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/de_buttons_717.lua b/lua/metrostroi_data/languages_/_unfinished/de_buttons_717.lua new file mode 100644 index 0000000..9780c33 --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/de_buttons_717.lua @@ -0,0 +1,288 @@ +return [[ +{ + "Lang": "de", + "Name": "Deutsch", + + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.VUD2Toggle": "VUD2: Tueren schliessen", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.VDLSet": "VDL: Oeffne Tueren links", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.R_Program2Helper": "Programm 2", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.R_Program1Helper": "Programm 1", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:RC1Toggle": "RC-1: ARS Schalkreise abschalten", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:VBToggle": "VB: Batterie an/aus", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:UOSToggle": "RC-UOS: Geschwindigkeitsbegrenzungs Geraet", + "Entities.gmod_subway_81-717_mvm.Buttons.Wiper.WiperToggle": "Schweibenwischer", + "Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle": "Zugdruckventil", + "Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveBLDisconnectToggle": "Bremsdruckventil", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_UNchToggle": "UNCh: Niederfrequenzverstaerker", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_ZSToggle": "Lautsprecher im Wagen einschalten", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_GToggle": "Lautsprecher im Fuehrerstand einschalten", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_RadioToggle": "Fahrgast Informations System", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_Program1Set": "Programm 1", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_Program2Set": "Programm 2", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.2:KVTSet": "KB: Sicherheitsschalter", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VZ1Set": "VZ1: Pneumatisches Ventil Nr.1", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VUD1Toggle": "VUD: Tueren Schliessen", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLSet": "KDL: Oeffne Tueren links", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLKToggle": "KDL Knopf Abdeckung", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLRSet": "KDL: Oeffne Tueren links", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLRKToggle": "KDL Knopf Abdeckung", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.DoorSelectToggle": "Tuerseite auswaehlen", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KRZDSet": "RZD: Zwangsschliessen", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_VPRToggle": "VPR: Schalte Funkgeraet ein", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VozvratRPSet": "Setze Wagonrelay zuruek", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.GreenRPLight": "RP: Gruene Ueberladungsrelay-Lampe (schuetzt die Motoren vor zu hoher Spannung)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.AVULight": "AVU: Automatischer steuerung deaktivierer aktiv", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.LKVPLight": "LKVP: Hochspannungs-Transformator kontrolle", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.SPLight": "LSP: Brandgefahr (Relays ueberhitzen)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ConverterProtectionSet": "Transformatorschutz", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KSNSet": "KSN: Ausfallanzeige", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.DIPoffSet": "Ring", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ARSToggle": "ARS: Automatische Geschwindigkeitskontrolle", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ALSToggle": "ALS: Automatische Zug Signalisierung", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.OtklAVUToggle": "Deaktiviere automatisches steuerungs Relay(fehler der AVU)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.TormATToggle": "(platzhalter) Notbremse", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_1Toggle": "Wagenbeleuchtung", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_2Toggle": "Fuehrerstandbeleuchtung", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_3Toggle": "Steuerungsbeleuchtung", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ALSFreqToggle": "Decodierer: ALS Frequenz waehler 1/5 oder 2/6", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ParkingBrakeSignToggle": "Schild \"LoeSE DIE PARKBREMSE\"", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.ParkingBrakeToggle": "Parkbremse", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.DriverValveTLDisconnectToggle": "Zugdruckkreislauf Ventil", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA1Set": "IGLA: Erster Taster", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA2Set": "IGLA: Zweiter Taster", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA3Set": "IGLA: Dritter Taster", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA4Set": "IGLA: Vierter Taster", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.!Voltage": "Kontrollschaltkreis Volt", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.VMKToggle": "Schalte Kompressor an", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.BPSNonToggle": "BPSN: Zug Spannung", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.RezMKSet": "Notfall Kompressor Starten", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.ARS13Set": "ARS 13V: ARS stabile voltanzahl check", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!Speedometer": "Tachometer", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLSN": "LSN: Ausfallanzeigenlicht (Fehler beim initialisieren der Schaltkreise)", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampRP": "RP: ueberladungsleuchte (Fehler beim initialisieren der Schaltkreise)", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLHRK": "LhRK: Rheostat kontroll Lampe", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLKT": "LKT: ARS Bremsleuchte", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLKVD": "LKVD: ARS Motor deaktivierungsleuchte", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLKVC": "LKVC: Hochspannung nicht vorhanden (Kein kontakt zur Stromschiene)", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARSOch": "OCh: Keine ARS Frequenz", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS0": "0: ARS Stop signal", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS40": "Geschwindigkeitslimit 40 kmh", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS60": "Geschwindigkeitslimit 60 kmh", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS70": "Geschwindigkeitslimit 70 kmh", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS80": "Geschwindigkeitslimit 80 kmh", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLSD1": "LSD: Tuerleuchte (Tueren sind geschlossen)", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLSD2": "LSD: Tuerleuchte (Tueren sind geschlossen)", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLST": "LST: Bremse aktiviert", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLVD": "LVD: Motor aktiviert", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLN": "LN: Richtungs signal", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLRS": "LRS: Geschwindigkeitsleuchte(Naechste Geschwindigkeitsbegrenzung ist gleich oder groeЯer als die momentane)", + "Entities.gmod_subway_81-717_mvm.Buttons.PneumaticPanels.!CylinderPressure": "Bremszylinderdruck", + "Entities.gmod_subway_81-717_mvm.Buttons.PneumaticPanels.!LinePressure": "Luftdruck in Pneumatischem System (Rot: Bremskreislauf, Schwarz: Zugkreislauf)", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.RC1Toggle": "RC-1: ARS Schaltkreise trennen", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.UOSToggle": "RC-UOS: Geschwindigkeitslimit Geraet", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.VBToggle": "VB: Batterie an/aus", + "Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Bremskreislauf Ventil", + "Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Zugkreislauf Ventil", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPMenuSet": "ASNP: Menue", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPUpSet": "ASNP: Hoch", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPDownSet": "ASNP: Runter", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPOnToggle": "ASNP: Einschalten", + "Entities.gmod_subway_81-717_mvm.Buttons.RearDoor.RearDoor": "Hecktuer", + "Entities.gmod_subway_81-717_mvm.Buttons.Meters.!TotalVoltmeter": "Hochspannungs Voltmeter (kV)", + "Entities.gmod_subway_81-717_mvm.Buttons.Meters.!TotalAmpermeter": "Ampermeter (A)", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A61Toggle": "A61 Zug leitung 6 kontrolle", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A55Toggle": "A55 Zug leitung 10AS kontrolle", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A54Toggle": "A54 Zug leitung 10AK kontrolle", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A56Toggle": "A56 Schalte Batteriespannung zu den Kontrollschaltkreisen ein", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A27Toggle": "A27 Schalte DIP und Beleuchtung ein", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A21Toggle": "A21 Tuerkontrolle", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A10Toggle": "A10 Motor-kompressor kontrolle", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A53Toggle": "A53 KVC Netzteil", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A43Toggle": "A43 ARS 12V Spannungsleitung", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A45Toggle": "A45 ARS Zug Leitung 10AU", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A42Toggle": "A42 ARS 75V Spannungsleitung", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A41Toggle": "A41 ARS bremsen", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.VUToggle": "VU Zugkontrolle", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A64Toggle": "A64 Fuehrerstandsbeleuchtung", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A63Toggle": "A63 IGLA/BIS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A50Toggle": "A50 Schalte DIP und Beleuchtung ein", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A51Toggle": "A51 Schalte DIP und Beleuchtung aus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A23Toggle": "A23 Schalte Notfall Kompressor ein", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A14Toggle": "A14 Zug Leitung 18", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A75Toggle": "A75 Fuehrerstandsheistung", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A1Toggle": "A1 X-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A2Toggle": "A2 X-2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A3Toggle": "A3 X-3", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A17Toggle": "A17 Setze Wagonrelay zuruek", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A62Toggle": "A62 Funkgeraet", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A29Toggle": "A29 Funklauschen", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A5Toggle": "A5 Mittelwagen", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A6Toggle": "A6 T-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A8Toggle": "A8 Pneumatische Ventile Nr.1 und Nr.2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A20Toggle": "A20 Anfahr/Brems schaltkreis kontrolle, Zug Leitung 20", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A25Toggle": "A25 Manuelles Elektrisches bremsen", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A22Toggle": "A22 Schalte KK ein", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A30Toggle": "A30 Rheostat kontrolle", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A39Toggle": "A39 Notfallkontrolle", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A44Toggle": "A44 Notfall Zug Kontrolle", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A80Toggle": "A80 Spannungsschaltkreis modus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A65Toggle": "A65 Wagonbeleuchtung", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.L_5Toggle": "Рђ49 Notfallbeleuchtung", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A24Toggle": "A24 Batterie Laden", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A32Toggle": "A32 Oeffne Tueren rechts", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A31Toggle": "A31 Oeffne Tueren links", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A16Toggle": "A16 Schliesse Tueren", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A13Toggle": "A13 Tueralarm", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A12Toggle": "A12 Zwangsschliessen", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A7Toggle": "A7 Rote Lampe", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A9Toggle": "A9 Rote Lampe", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A46Toggle": "A46 Weisse Lampe", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A47Toggle": "A47 Weisse Lampe", + "Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor.PassengerDoor": "Wagentuer", + "Entities.gmod_subway_81-717_mvm.Buttons.GV.GVToggle": "HV switch", + "Entities.gmod_subway_81-717_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle": "Notbremse", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.PrevSign": "Vorheriges schild", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.NextSign": "Naechstes schild", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num2P": "Zugnummer: Erhoehe Zweite Nummer", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num2M": "Zugnummer: Senke Zweite Nummer", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num1P": "Zugnummer: Erhoehe Erste Nummer", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num1M": "Zugnummer: Senke Erste Nummer", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.L_4Toggle": "Scheinwerfer", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VUSToggle": "VUS: Fernlicht", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VAHToggle": "VAH: Notfallfahrt (Fehler beim initialisieren des RPB Relays)", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VADToggle": "VAD: Notfall Tuerschliessungs Mechanismus (Fehler des KD Relays)", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KRPSet": "KRP: Notfall Start knopf", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KAHSet": "Aktiviere Notfallfahrt", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KAHKToggle": "KAH Knopfabdeckung", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KUP": "Fuehrerstandsheitzung eingeschaltet", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KDPSet": "KDP: Oeffne Tueren rechts", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KDPKToggle": "KDP Knopfabdeckung", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.PN": "Bremskontrolle", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A61Toggle": "A61 Zug Leitung 6 Kontrolle", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A55Toggle": "A55 Zug Leitung 10AS Kontrolle", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A54Toggle": "A54 Zug Leitung 10AK Kontrolle", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A56Toggle": "A56 Aktiviere Batterie fuer Steuerungsschaltkreise", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A27Toggle": "A27 Aktiviere DIP und Belechtung", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A21Toggle": "A21 Tuerkontrolle", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A10Toggle": "A10 Kompressor kontrolle", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A53Toggle": "A53 KVC Stromversorgung", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A43Toggle": "A43 ARS 12V Spannungsleitung", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A45Toggle": "A45 ARS Zug Leitung 10AU", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A42Toggle": "A42 ARS 75V Spannungsleitung", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A41Toggle": "A41 ARS bremsen", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:VUToggle": "VU Zug Kontrolle", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A64Toggle": "A64 Fuehrerstandsbeleuchtung", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A63Toggle": "A63 IGLA/BIS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A50Toggle": "A50 Schalte DIP und Beleuchtung ein", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A51Toggle": "A51 Schalte DIP und Beleuchtung aus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A23Toggle": "A23 Notfallkompressor einschalten", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A14Toggle": "A14 Zug Leitung 18", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A75Toggle": "A75 Fuehrerstandsheizung", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A1Toggle": "A1 X-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A2Toggle": "A2 X-2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A3Toggle": "A3 X-3", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A17Toggle": "A17 Setze Wagonrelay zuruek", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A62Toggle": "A62 Funkgeraet", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A29Toggle": "A29 Funklauschen", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A5Toggle": "A5 Zwischenwagen", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A6Toggle": "A6 T-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A8Toggle": "A8 Pneumatische Ventile Nr.1 und Nr.2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A20Toggle": "A20 Anfahr/Brems-relay kontrolle, Zug Leitung 20", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A25Toggle": "A25 Manuelles Elektrisches bremsen", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A22Toggle": "A22 Schalte KK ein", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A30Toggle": "A30 Rheostat steuerung fuer Motorspannung", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A39Toggle": "A39 Notfallkontrolle", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A44Toggle": "A44 Notfall Zug Kontrolle", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A80Toggle": "A80 Spannungsschaltkreismodus auswaehlen", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A65Toggle": "A65 Wagenbeleuchtung", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:L_5Toggle": "Рђ49 Notfallbeleuchtung", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A24Toggle": "A24 Batterie Laden", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A32Toggle": "A32 Oeffne Tueren rechts", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A31Toggle": "A31 Oeffne Tueren links", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A16Toggle": "A16 Schliesse Tueren", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A13Toggle": "A13 Tuerwarnung", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A12Toggle": "A12 Zwangsschliessen", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A7Toggle": "A7 Rote Lampe", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A9Toggle": "A9 Rote Lampe", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A46Toggle": "A46 Weisse Lampe", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A47Toggle": "A47 Weisse Lampe", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!Speedometer": "Tachometer", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LSD": "LSD: Tuerleuchte(Tueren sind geschlossen)", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LOCh": "NCh: Keine ARS Frequenz", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L0": "0: ARS stop signal", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LRS": "LRS: Geschwindigkeitsleuchte(Naechste Geschwindigkeitsbegrenzung ist gleich oder groeЯer als die momentane)", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L40": "Geschwindigkeitsbegrenzung 40 kmh", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L60": "Geschwindigkeitsbegrenzung 60 kmh", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L80": "Geschwindigkeitsbegrenzung 80 kmh", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L70": "Geschwindigkeitsbegrenzung 60 kmh", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LRK": "RK: Rheostat kontroll Lampe", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LEKK": "", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LPU": "", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LKVD": "LKVD: ARS Motor deaktivierungsleuchte", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LKT": "LKT: ARS Bremsleuchte", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LRP": "RP: ueberladungsleuchte (Fehler beim initialisieren der Schaltkreise)", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LKVC": "LKVC: Hochspannung nicht vorhanden (Kein kontakt zur Stromschiene)", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LVD": "LVD: Motor aktiviert", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LST": "LST: Bremsen aktiviert", + "Entities.gmod_subway_81-717_mvm.Buttons.CabinDoor.CabinDoor": "Fuehrerstandstuer", + "Entities.gmod_subway_81-717_mvm.Buttons.Reverser.KVReverserDown": "Fahrtrichtungsschalter Rueckwaerts", + "Entities.gmod_subway_81-717_mvm.Buttons.Reverser.KVReverserUp": "Fahrtrichtungsschalter Forwaerts", + "Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor1.PassengerDoor": "Wagentuer", + "Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAToggle": "UAVA: Automatisches Zugbremssystem ausschalten(Verhindert das abbremsen des Zuges nach dem ueberfahren eines Signals mit der Stellung Stop)", + "Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAContactSet": "UAVA: Automatisches Zugbremssystem (Setze Kontakte zurueck)", + "Entities.gmod_subway_81-717_mvm.Buttons.EPKDisconnect.EPKToggle": "EPV Oeffne Ventil", + "Entities.gmod_subway_81-717_mvm.Buttons.Help.ShowHelp": "Zeige die Hilfe (Englisch)", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake2.1:ParkingBrakeToggle": "Parkbremse", + "Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Bremskrislauf schliessventil", + "Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Zugdruckkreislauf schliessventil", + "Entities.gmod_subway_81-717_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Schalte Druckluftverteiler ab", + + "Entities.gmod_subway_81-714_mvm.Buttons.GV.GVToggle": "Hochspannungsschalter", + "Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Bremskrislauf schliessventil", + "Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Zugdruckkreislauf schliessventil", + "Entities.gmod_subway_81-714_mvm.Buttons.RearDoor.RearDoor": "Hecktuer", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.DriverValveBLDisconnectToggle": "Bremskrislauf schliessventil", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.DriverValveTLDisconnectToggle": "Zugdruckkreislauf schliessventil", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A65Toggle": "A65 Wagenbeleuchtung", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A56Toggle": "A56 Schalte Batterie fuer kontrollschaltkreise ein", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A63Toggle": "A63 IGLA/BIS", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A10Toggle": "A10 Kompressorkontrolle", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A30Toggle": "A30 Rheostat kontrolle", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A80Toggle": "A80 Spannungsschaltkreis modus", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Bremskrislauf schliessventil", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Zugdruckkreislauf schliessventil", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.ParkingBrakeToggle": "Parkbremse", + "Entities.gmod_subway_81-714_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Schalte Druckluftverteiler ab", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontDoor.FrontDoor": "Fronttuer", + "Entities.gmod_subway_81-714_mvm.Buttons.Battery.VBToggle": "VB: Batterie an/aus", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A54Toggle": "A54 Zug Leitung 10AK kontrolle", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A27Toggle": "A27 Schalte DIP und Beleuchtung ein", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A24Toggle": "A24 Batterie Laden", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A53Toggle": "A53 KVC Spannungsversorgung", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A13Toggle": "A13 Tueralarm", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A32Toggle": "A32 Oeffne Tueren rechts", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A31Toggle": "A31 Oeffne Tueren links", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A16Toggle": "A16 Schliesse Tueren", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A12Toggle": "A12 Zwangsschliessen", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A50Toggle": "A50 Schalte DIP und Beleuchtung ein", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A51Toggle": "A51 Schalte DIP und Beleuchtung aus", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A1Toggle": "A1 X-1", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.KRPSet": "START: Notfallstart Knopf", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.VozvratRPSet": "Setze Wagonrelay zurueck", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.RezMKSet": "Notfallkompressor starten", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.VMKToggle": "Schalte Kompressor ein", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.BPSNonToggle": "BPSN: Zugspannung", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A2Toggle": "A2 X-2", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A3Toggle": "A3 X-3", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A17Toggle": "A17 Setze Wagonrelay zurueck", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A5Toggle": "A5 ", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A6Toggle": "A6 T-1", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A8Toggle": "A8 Pneumatisches Ventil Nr.1 und Nr.2", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A20Toggle": "A20 Anfahr/Brems schaltkreis kontrolle, Zug Leitung 20", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A25Toggle": "A25 Manuelles Elektisches bremsen", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A22Toggle": "A22 Schalte KK ein", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A23Toggle": "A23 Notfallkompressor starten", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A39Toggle": "A39 Notfallsteuerung", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A14Toggle": "A14 Zug Leitung 18" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/de_buttons_720.lua b/lua/metrostroi_data/languages_/_unfinished/de_buttons_720.lua new file mode 100644 index 0000000..e94469f --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/de_buttons_720.lua @@ -0,0 +1,220 @@ +return [[ +{ + "Lang": "de", + "Name": "Deutsch", + + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF1Set": "Vityaz: F1", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF2Set": "Vityaz: Naechster Bildschirm", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF3Set": "Vityaz: Vorheriger Bildschirm", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF4Set": "Vityaz: Haupt", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz1Set": "Vityaz: 1", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz4Set": "Vityaz: 4", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz7Set": "Vityaz: 7", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz2Set": "Vityaz: 2", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz5Set": "Vityaz: 5", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz8Set": "Vityaz: 8", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz0Set": "Vityaz: 0", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz3Set": "Vityaz: 3", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz6Set": "Vityaz: 6", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz9Set": "Vityaz: 9", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF5Set": "Vityaz: Loeschen", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF6Set": "Vityaz: Hoch\\Geschwindigkeit", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF7Set": "Vityaz: Runter\\Stromsaerke", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF8Set": "Vityaz: Eingeben\\Wagen equipment", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF9Set": "Vityaz: Auswaehlen\\Wagen equipment kontrolle", + "Entities.gmod_subway_81-720.Buttons.RV.EmerX1Set": "Notfall X-1", + "Entities.gmod_subway_81-720.Buttons.RV.EmerX2Set": "Notfall X-2", + "Entities.gmod_subway_81-720.Buttons.RV.EmerCloseDoorsSet": "Zwangschliessen", + "Entities.gmod_subway_81-720.Buttons.RV.EmergencyDoorsToggle": "Notausgaenge", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode-": "Belueftungs Kapazitaet: +", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode+": "Belueftungs Kapazitaet: -", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode+": "+", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode-": "-", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode-": "Belueftungs Staerke +", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode+": "Belueftungs Staerke -", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV1Toggle": "SF1: Kontrolliere Spannung", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV2Toggle": "SF2: BUV Spannung (Zugmitte)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV3Toggle": "SF3: BUTP Spannung (Zugfront)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV4Toggle": "SF4: BUTP Kontrolle", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV5Toggle": "SF5: BUTP Notfall Kontrolle", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV6Toggle": "SF6: BUTP Spannung", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV7Toggle": "SF7: BBE (Zugeigenes Netzeil)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV8Toggle": "SF8: BV Kontrolle", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV9Toggle": "SF9: BV Spannung (Wagen relay)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV10Toggle": "SF10: PPO", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV11Toggle": "SF11: Kompressor", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV12Toggle": "SF12: Tueren schliessen", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV13Toggle": "SF13: Oeffne Tueren links", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV14Toggle": "SF14: Oeffne Tueren rechts", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV15Toggle": "SF15: Front Tuer", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV16Toggle": "SF16: Fahrgast Informations System", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV17Toggle": "SF17: Notfall Sprechanlage", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV18Toggle": "SF18: (Platzhalter)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV19Toggle": "SF19: Wagenbeleuchtung", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV20Toggle": "SF20: Notfall Wagenbeleuchtung", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV21Toggle": "SF21: Geschwindigkeits Sensor", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV22Toggle": "SF22: Parkbremse", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV23Toggle": "SF23: Erste Ventilatorgruppe Kontrolle", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV24Toggle": "SF24: Zweite Ventilatorgruppe Kontrolle", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV25Toggle": "SF25: Schalte erste Ventilatorgruppe ein", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV26Toggle": "SF26: Schalte zweite Ventilatorgruppe ein", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV27Toggle": "SF27: Pre-Bremseinstellung", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV28Toggle": "SF28: ZKK Spannung", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV29Toggle": "SF29: Stromabnehmer", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV30Toggle": "SF30: Linienplan", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV31Toggle": "SF31: (Platzhalter)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV32Toggle": "SF32: (Platzhalter)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV33Toggle": "SF33: (Platzhalter)", + "Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPMenuSet": "ASNP: Menue", + "Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPUpSet": "ASNP: Hoch", + "Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPDownSet": "ASNP: Runter", + "Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPOnToggle": "ASNP: Einschalten", + "Entities.gmod_subway_81-720.Buttons.PneumoHelper1.!BrakeCylinder": "Bremszylinder", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF1Toggle": "SF1: Zugspannung", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF2Toggle": "SF2: Hauptschalter", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF3Toggle": "SF3: Notfall Kontrolle", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF4Toggle": "SF4: BARS (ARS)", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF5Toggle": "SF5: BUP (Zugkontrolle)", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF6Toggle": "SF6: BKCU (Steuergeraetkommunikation)", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF7Toggle": "SF7: BARS (ARS unit)", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF8Toggle": "SF8: Fahrgast Informations System", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF9Toggle": "SF9: Radiostation", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF10Toggle": "SF10: Wagen orientation", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF11Toggle": "SF11: Richtung", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF12Toggle": "SF12: Erste Scheinwerfergruppe", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF13Toggle": "SF13: Zweite Scheinwerfergruppe", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF14Toggle": "SF14: Markierungsleuchten", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF15Toggle": "SF15: Fuehrerstandsbeleuchtung", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF16Toggle": "SF16: Heizung", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF17Toggle": "SF17: Fuehrerstandsbelueftung", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF18Toggle": "SF18: Radschmierung", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF19Toggle": "SF19: Hauptspannung", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF20Toggle": "SF20: Notfallspannung", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF21Toggle": "SF21: Tueren Oeffnen", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF22Toggle": "SF22: Tueren Schliessen", + "Entities.gmod_subway_81-720.Buttons.BTO.K29Toggle": "KRMSH", + "Entities.gmod_subway_81-720.Buttons.PassengerDoor2.PassengerDoor": "Wagontuer", + "Entities.gmod_subway_81-720.Buttons.VoltHelper2.!HV": "Voltmeter (kV)", + "Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I1_3": "Erste Motorgruppe Stromstaerke (A)", + "Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I2_4": "Zweite Motorgruppe Stromstaerke (A)", + "Entities.gmod_subway_81-720.Buttons.GV.GVToggle": "Hochspannungsschalter", + "Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Bremsdruckventil", + "Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Zugdruckventil", + "Entities.gmod_subway_81-720.Buttons.RearDoor1.RearDoor": "Tuer", + "Entities.gmod_subway_81-720.Buttons.RearDoor.RearDoor": "Tuer", + "Entities.gmod_subway_81-720.Buttons.BackDown.Pant1Toggle": "Schalte erste Stromabnehmergruppe aus", + "Entities.gmod_subway_81-720.Buttons.BackDown.Pant2Toggle": "Schalte zweite Stromabnehmergruppe aus", + "Entities.gmod_subway_81-720.Buttons.BackDown.Vent1Toggle": "Erste Ventilator gruppe", + "Entities.gmod_subway_81-720.Buttons.BackDown.Vent2Toggle": "Zweite Ventilator gruppe", + "Entities.gmod_subway_81-720.Buttons.BackDown.VentToggle": "", + "Entities.gmod_subway_81-720.Buttons.BackDown.PassLightToggle": "Wagonbeleuchtung", + "Entities.gmod_subway_81-720.Buttons.BackDown.CabLightToggle": "Fuehrerstandsbeleuchtung", + "Entities.gmod_subway_81-720.Buttons.BackDown.Headlights1Toggle": "Erste Scheinwerfergruppe", + "Entities.gmod_subway_81-720.Buttons.BackDown.Headlights2Toggle": "Zweite Scheinwerfergruppe", + "Entities.gmod_subway_81-720.Buttons.BackDown.ParkingBrakeToggle": "Parkbremse", + "Entities.gmod_subway_81-720.Buttons.BackDown.TorecDoorsToggle": "Front Tuer", + "Entities.gmod_subway_81-720.Buttons.BackDown.BBERToggle": "Schalte Notfal BBE ein", + "Entities.gmod_subway_81-720.Buttons.BackDown.BBEToggle": "BBE", + "Entities.gmod_subway_81-720.Buttons.BackDown.CompressorToggle": "Kompressor", + "Entities.gmod_subway_81-720.Buttons.BackDown.CabLightStrengthToggle": "Fuehrerstandsbeleuchtungs Spannung", + "Entities.gmod_subway_81-720.Buttons.BackDown.AppLights1Toggle": "Wagen beleuchtung", + "Entities.gmod_subway_81-720.Buttons.BackDown.AppLights2Toggle": "", + "Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock-": "Defektes BARS (ARS) blocke: -", + "Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock+": "Defektes BARS (ARS) blocke: +", + "Entities.gmod_subway_81-720.Buttons.BackDown.BatteryToggle": "Batterie an/aus", + "Entities.gmod_subway_81-720.Buttons.BackDown.ALSFreqToggle": "ALS decodierer", + "Entities.gmod_subway_81-720.Buttons.VoltHelper1.!Battery": "Schalkreis Spannung", + "Entities.gmod_subway_81-720.Buttons.PassengerDoor.PassengerDoor": "Wagenbeleuchtung", + "Entities.gmod_subway_81-720.Buttons.CabinDoorR.CabinDoorRight": "Fuehrerstandstuer", + "Entities.gmod_subway_81-720.Buttons.CabinDoorL.CabinDoorLeft": "Fuehrerstandstuer", + "Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Bremsdruckventil", + "Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Zugdruckventil", + "Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectLToggle": "Waehle aus linke Tueren", + "Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectRToggle": "Waehle aus rechte Tueren", + "Entities.gmod_subway_81-720.Buttons.PUL.DoorBlockToggle": "Tuerkontrolle", + "Entities.gmod_subway_81-720.Buttons.PUL.!DoorLeftLamp": "Linker Tueren Check", + "Entities.gmod_subway_81-720.Buttons.PUL.DoorLeftSet": "Tueren Links", + "Entities.gmod_subway_81-720.Buttons.PUU.!DoorsClosed": "Tueren geschlossen", + "Entities.gmod_subway_81-720.Buttons.PUU.StandToggle": "Bleib", + "Entities.gmod_subway_81-720.Buttons.PUU.TickerToggle": "Ticker", + "Entities.gmod_subway_81-720.Buttons.PUU.KAHToggle": "KAH", + "Entities.gmod_subway_81-720.Buttons.PUU.ALSToggle": "ALS", + "Entities.gmod_subway_81-720.Buttons.PUU.FDepotToggle": "Verlassen des Depots", + "Entities.gmod_subway_81-720.Buttons.PUU.!HVoltage": "Keine Hochspannung", + "Entities.gmod_subway_81-720.Buttons.PUU.PassSchemeToggle": "Linienplan", + "Entities.gmod_subway_81-720.Buttons.PUU.EmergencyCompressorSet": "Notfall Kompressor", + "Entities.gmod_subway_81-720.Buttons.PUU.EnableBVSet": "Aktiviere Ueberladungs schutz", + "Entities.gmod_subway_81-720.Buttons.PUU.DisableBVSet": "Deaktiviere BV", + "Entities.gmod_subway_81-720.Buttons.PUU.RingSet": "Ring", + "Entities.gmod_subway_81-720.Buttons.PUU.R_Program2Set": "Programm 2", + "Entities.gmod_subway_81-720.Buttons.PUU.R_AnnouncerToggle": "Fahrgast Informations System", + "Entities.gmod_subway_81-720.Buttons.PUU.R_LineToggle": "Linie", + "Entities.gmod_subway_81-720.Buttons.PUU.R_EmerSet": "Notfall Sprechanlage", + "Entities.gmod_subway_81-720.Buttons.PUU.R_Program1Set": "Programm 1", + "Entities.gmod_subway_81-720.Buttons.PUU.EnableBVEmerSet": "Notfall BV neustart", + "Entities.gmod_subway_81-720.Buttons.PUU.EmergencyControlsToggle": "Norfall Kontrolle", + "Entities.gmod_subway_81-720.Buttons.PUU.WiperToggle": "Scheibenwischer", + "Entities.gmod_subway_81-720.Buttons.PUU.!VDop": "Hoechsgeschwindigkeit", + "Entities.gmod_subway_81-720.Buttons.PUU.!VFact": "Momentane Geschwindigkeit", + "Entities.gmod_subway_81-720.Buttons.PUU.!VPred": "Vorbeugende Geschwindigkeit", + "Entities.gmod_subway_81-720.Buttons.PUU.!VDop2": "Erlaubte Geschwindigkeit", + "Entities.gmod_subway_81-720.Buttons.PUU.!Acc": "Beschleunigung", + "Entities.gmod_subway_81-720.Buttons.PUU.!Forw": "Forwaerts", + "Entities.gmod_subway_81-720.Buttons.PUU.!Back": "Rueckwaerts", + "Entities.gmod_subway_81-720.Buttons.PUR.AccelRateToggle": "Beschleunigungsrate", + "Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeAddSet": "Hilfs-Bremse", + "Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeReleaseSet": "Hilfs-Loesen", + "Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeToggle": "Hilfs-Bremse", + "Entities.gmod_subway_81-720.Buttons.PUR.EmergencyBrakeToggle": "Notbremse", + "Entities.gmod_subway_81-720.Buttons.PUR.DoorCloseToggle": "Schliesse Tueren", + "Entities.gmod_subway_81-720.Buttons.PUR.AttentionMessageSet": "Nachrichtenwahrnehmung", + "Entities.gmod_subway_81-720.Buttons.PUR.AttentionSet": "Achtung", + "Entities.gmod_subway_81-720.Buttons.PUR.AttentionBrakeSet": "Bremswahrnehmung", + "Entities.gmod_subway_81-720.Buttons.PUR.HornBSet": "Hupe", + "Entities.gmod_subway_81-720.Buttons.PUR.DoorRightSet": "Tueren Rechts", + "Entities.gmod_subway_81-720.Buttons.PUR.!DoorRightLamp": "Rechter Tueren Check", + "Entities.gmod_subway_81-720.Buttons.PneumoHelper2.!BrakeTrainLine": "Rot: Bremskreislauf, Schwarz: Zugkreislauf", + + "Entities.gmod_subway_81-721.Buttons.GV.GVToggle": "Hauptschalter", + "Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Bremsdruckventil", + "Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Zugdruckventil", + "Entities.gmod_subway_81-721.Buttons.FrontDoor.FrontDoor": "Front Tuer", + "Entities.gmod_subway_81-721.Buttons.RearDoor.RearDoor": "Rueck Tuer", + "Entities.gmod_subway_81-721.Buttons.Battery.BatteryToggle": "Batterie an/aus", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV1Toggle": "SF1: Kontrollspannung", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV2Toggle": "SF2: BUV BUV Spannung (Zugmitte)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV3Toggle": "SF3: BUTP Spannung (Zugfront)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV4Toggle": "SF4: BUTP Kontrolle", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV5Toggle": "SF5: BUTP Notfall Kontrolle", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV6Toggle": "SF6: BUTP Spannung", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV7Toggle": "SF7: BBE (Zugeigenes Netzeil)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV8Toggle": "SF8: BV Kontrolle", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV9Toggle": "SF9: BV Spannung (Wagen relay)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV10Toggle": "SF10: PPO", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV11Toggle": "SF11: Kompressor", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV12Toggle": "SF12: Tueren Schliessen", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV13Toggle": "SF13: Oeffne Tueren Links", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV14Toggle": "SF14: Oeffne Tueren Rechts", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV15Toggle": "SF15: Front Tuer", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV16Toggle": "SF16: Fahrgast Informations System", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV17Toggle": "SF17: Notfall Sprechanlage", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV18Toggle": "SF18: (Platzhalter)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV19Toggle": "SF19: Wagonbeleuchtungsspannung", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV20Toggle": "SF20: Notfallwagonbeleuchtung", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV21Toggle": "SF21: Geschwindigkeitssensor", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV22Toggle": "SF22: Parkbremse", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV23Toggle": "SF23: Erste Ventilatorgruppe Kontrolle", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV24Toggle": "SF24: Zweite Ventilatorgruppe Kontrolle", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV25Toggle": "SF25: Schalte erste Ventilatorgruppe ein", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV26Toggle": "SF26: Schalte zweite Ventilatorgruppe ein", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV27Toggle": "SF27: Pre-Bremseinstellung", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV28Toggle": "SF28: ZKK Spannung", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV29Toggle": "SF29: Stromabnehmer", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV30Toggle": "SF30: Linienplan", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV31Toggle": "SF31: (Platzhalter)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV32Toggle": "SF32: (Platzhalter)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV33Toggle": "SF33: (Platzhalter)", + "Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Bremsdruckventil", + "Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Zugdruckventil" +} +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages_/_unfinished/de_buttons_ezh3.lua b/lua/metrostroi_data/languages_/_unfinished/de_buttons_ezh3.lua new file mode 100644 index 0000000..bca9b1a --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/de_buttons_ezh3.lua @@ -0,0 +1,140 @@ +return [[ +{ + "Lang": "de", + "Name": "Deutsch", + + + "Entities.gmod_subway_ezh3.Buttons.Stopkran.EmergencyBrakeValveToggle": "Notbremse", + "Entities.gmod_subway_ezh3.Buttons.Back.BackDoor": "Wagentuer", + "Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle": "Bremsdruckventil", + "Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle": "Zugdruckventil", + "Entities.gmod_subway_ezh3.Buttons.Battery.VBToggle": "VB: Batterie an/aus (Niedrigspannung)", + "Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Bremsdruckventil", + "Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Zugdruckventil", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPMenuSet": "Ansager: Menue", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPUpSet": "Ansager: Hoch", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPDownSet": "Ansager: Runter", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPOnToggle": "Ansager: An", + "Entities.gmod_subway_ezh3.Buttons.PassengerDoor1.PassengerDoor": "Wagentuer", + "Entities.gmod_subway_ezh3.Buttons.PassengerDoor.PassengerDoor": "Wagentuer", + "Entities.gmod_subway_ezh3.Buttons.CabinDoor.CabinDoor": "Fuehrerstandstuer", + "Entities.gmod_subway_ezh3.Buttons.Front.FrontDoor": "Fronttuer", + "Entities.gmod_subway_ezh3.Buttons.GV.GVToggle": "Hochspannungsschalter", + "Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Zugdruckventil", + "Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Bremsdruckventil", + "Entities.gmod_subway_ezh3.Buttons.Panel.!OCH": "NCh: Keine Ars Frequenz", + "Entities.gmod_subway_ezh3.Buttons.Panel.!0": "0: ARS Stop Signal", + "Entities.gmod_subway_ezh3.Buttons.Panel.!40": "Geschwindigkeitslimit 40 kmh", + "Entities.gmod_subway_ezh3.Buttons.Panel.!60": "Geschwindigkeitslimit 60 kmh", + "Entities.gmod_subway_ezh3.Buttons.Panel.!70": "Geschwindigkeitslimit 70 kmh", + "Entities.gmod_subway_ezh3.Buttons.Panel.!80": "Geschwindigkeitslimit 80 kmh", + "Entities.gmod_subway_ezh3.Buttons.Panel.!Speedometer": "Tachometer (km/h)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!TotalAmpermeter": "Amperemeter (A)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!TotalVoltmeter": "Voltmeter (kV)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!BatteryVoltage": "Batterie Voltanzahl(V)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!BrakeCylinder": "Bremsdruck", + "Entities.gmod_subway_ezh3.Buttons.Panel.!LinesPressure": "Luftdruck in Pneumatischem System (Rot: Bremskreislauf, Schwarz: Zugkreislauf)", + "Entities.gmod_subway_ezh3.Buttons.Main.KU1Toggle": "Schalte Kompressor ein", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMM1Set": "SAMM: Deaktiviere Automatisches Fahren", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMM2Set": "SAMM: Start", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMM3Set": "SAMM: Neustart", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal1": "Lampe: Fahren-Bremsen", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal2": "Lampe: SAMM Aktiviert", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal3": "Lamp: Aktiviere SAMM Kontrolleinheit", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMOnToggle": "SAMM: Aktiviere automatisches Fahren", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMBlokToggle": "SAMM: Kontrolleinheit", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMCommand3Set": "SAMM: X-2", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMCommand2Set": "SAMM: Aufholen", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMCommand1Set": "SAMM: Genehmigung", + "Entities.gmod_subway_ezh3.Buttons.Main.KSNSet": "KSN: Ausfall", + "Entities.gmod_subway_ezh3.Buttons.Main.R_Program1Set": "Programm 1", + "Entities.gmod_subway_ezh3.Buttons.Main.R_Program2Set": "Programm 2", + "Entities.gmod_subway_ezh3.Buttons.Main.VUSToggle": "Fahrlicht/Fernlicht)", + "Entities.gmod_subway_ezh3.Buttons.Main.L_3Toggle": "Armaturenbeleuchtung", + "Entities.gmod_subway_ezh3.Buttons.Main.VAHToggle": "Notfall Fahren", + "Entities.gmod_subway_ezh3.Buttons.Main.DIPonSet": "Osv. Vkl.: Schalte Licht ein", + "Entities.gmod_subway_ezh3.Buttons.Main.DIPoffSet": "Osv. Vykl.: Schalte Licht aus", + "Entities.gmod_subway_ezh3.Buttons.Main.KSDSet": "KSD: Türsignalisierungsprüfung", + "Entities.gmod_subway_ezh3.Buttons.Main.KVTSet": "KVT: Bremsenwahrnehmungstaste", + "Entities.gmod_subway_ezh3.Buttons.Main.KBSet": "KB: Warnungs Knopf", + "Entities.gmod_subway_ezh3.Buttons.Main.KBLamp": "Lampe: Rehostat Kontroller", + "Entities.gmod_subway_ezh3.Buttons.Main.ARSToggle": "ARS: Automatische Geschwindigkeitskontrolle", + "Entities.gmod_subway_ezh3.Buttons.Main.R_UNchToggle": "UNCh: Niedrigfrequenzverstaerker", + "Entities.gmod_subway_ezh3.Buttons.Main.VUD1Toggle": "VUD: Schliesse Tueren", + "Entities.gmod_subway_ezh3.Buttons.Main.R_RadioToggle": "Fahrgast Informations System", + "Entities.gmod_subway_ezh3.Buttons.Main.ALSToggle": "ALS: Automatische Zug Signalisierung", + "Entities.gmod_subway_ezh3.Buttons.Main.VozvratRPSet": "KVRP: Setze Wagonrelay zuruek", + "Entities.gmod_subway_ezh3.Buttons.Main.RingSet": "Pfeifen", + "Entities.gmod_subway_ezh3.Buttons.Main.L_2Toggle": "Fuehrerstandbeleuchtung", + "Entities.gmod_subway_ezh3.Buttons.Main.KRZDSet": "KRZD: Zwangsschliessen", + "Entities.gmod_subway_ezh3.Buttons.Main.KDPSet": "KDP: Oeffne Tueren rechts", + "Entities.gmod_subway_ezh3.Buttons.Main.KDLSet": "KDL: Oeffne Tueren links", + "Entities.gmod_subway_ezh3.Buttons.Main.KAHSet": "KAH: Notfallfahrt", + "Entities.gmod_subway_ezh3.Buttons.Main.RezMKSet": "Notfall Kompressor Starten", + "Entities.gmod_subway_ezh3.Buttons.Main.KRPSet": "KRP: Notfallstartknopf", + "Entities.gmod_subway_ezh3.Buttons.Main.RSTToggle": "VPR: Funk", + "Entities.gmod_subway_ezh3.Buttons.Main.R_GToggle": "Lautsprecher im Fuehrerstand einschalten", + "Entities.gmod_subway_ezh3.Buttons.Main.R_ZSToggle": "ZS: Lautsprecher im Wagon einschalten", + "Entities.gmod_subway_ezh3.Buttons.Main.Custom2Set": "Platzhalter", + "Entities.gmod_subway_ezh3.Buttons.Main.Custom3Set": "Platzhalter", + "Entities.gmod_subway_ezh3.Buttons.Main.ASNPPlay": "Fahrgast informations System funktioniert", + "Entities.gmod_subway_ezh3.Buttons.AV1.VU3Toggle": "VU3: Fuehrerstandsbeleuchtung", + "Entities.gmod_subway_ezh3.Buttons.AV1.VU2Toggle": "VU2: Notfallbeleuchtung (45V)", + "Entities.gmod_subway_ezh3.Buttons.AV1.VU1Toggle": "VU1: Fuehrerstandsheizung (3kWt)", + "Entities.gmod_subway_ezh3.Buttons.AVMain.AV8BToggle": "AV-8B: Automatischer Schalter (Hochspannung)", + "Entities.gmod_subway_ezh3.Buttons.RC1.RC1Toggle": "RC-ARS: ARS Relay", + "Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAToggle": "UAVA: Automatisches Zugbremssystem ausschalten(Verhindert das abbremsen des Zuges nach dem ueberfahren eines Signals mit der Stellung Stop)", + "Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAContactSet": "UAVA: Automatisches Zugbremssystem (Setze Kontakte zurueck)", + "Entities.gmod_subway_ezh3.Buttons.VUHelper.VUToggle": "VU: Aktiviere Zugkontrolle", + "Entities.gmod_subway_ezh3.Buttons.HelperPanel.VDLSet": "KDL: Oeffne Tueren links", + "Entities.gmod_subway_ezh3.Buttons.HelperPanel.VUD2Toggle": "VUD2: Schliesse Tueren", + "Entities.gmod_subway_ezh3.Buttons.EPKDisconnect.EPKToggle": "EPK Oeffne Ventil", + "Entities.gmod_subway_ezh3.Buttons.VU.VUToggle": "VU: Aktiviere Zugkontrolle", + "Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeLeft": "Parkbremse", + "Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeRight": "Parkbremse", + "Entities.gmod_subway_ezh3.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Schalte Druckluftverteiler ab", + + "Entities.gmod_subway_em508t.Buttons.Stopkran.EmergencyBrakeValveToggle": "Notbremse", + "Entities.gmod_subway_em508t.Buttons.Battery.VBToggle": "VB: Battery on/off (low voltage)", + "Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Bremsdruckventil", + "Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Zugdruckventil", + "Entities.gmod_subway_em508t.Buttons.GV.GVToggle": "Hochspannungschalter", + "Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Zugdruckventil", + "Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Bremsdruckventil", + "Entities.gmod_subway_em508t.Buttons.RearDoor.RearDoor": "Wagentuer", + "Entities.gmod_subway_em508t.Buttons.Back2.!HVFuse": "Hochspannungssicherungen", + "Entities.gmod_subway_em508t.Buttons.Back2.!Relays": "Batterie- und Steuerungs-Schaltkreise", + "Entities.gmod_subway_em508t.Buttons.Back2.!Heater": "Heizung", + "Entities.gmod_subway_em508t.Buttons.Front.FrontDoor": "Fronttuer", + "Entities.gmod_subway_em508t.Buttons.AV1.VU3Toggle": "VU3: Fuehrerstandsbeleuchtung", + "Entities.gmod_subway_em508t.Buttons.AV1.VU2Toggle": "VU2: Notfallbeleuchtung (45V)", + "Entities.gmod_subway_em508t.Buttons.AV1.VU1Toggle": "VU1: Fuehrerstandsheizung (3kWt)", + "Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeLeft": "Parkbremse", + "Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeRight": "Parkbremse", + "Entities.gmod_subway_em508t.Buttons.CabinDoor.CabinDoor1": "Fuehrerstandstuer", + "Entities.gmod_subway_em508t.Buttons.PassengerDoor.PassengerDoor": "Wagentuer", + "Entities.gmod_subway_em508t.Buttons.PassengerDoor1.PassengerDoor": "Wagentuer", + "Entities.gmod_subway_em508t.Buttons.Main.!RedRP": "RP: Rote Ueberladungsrelay-Lampe (schuetzt die Motoren vor zu hoher Spannung)", + "Entities.gmod_subway_em508t.Buttons.Main.!GreenRP": "RP: Gruene Ueberladungsrelay-Lampe (schuetzt die Motoren vor zu hoher Spannung)", + "Entities.gmod_subway_em508t.Buttons.Main.!SD": "Tueren geschlossen)", + "Entities.gmod_subway_em508t.Buttons.Main.KDLSet": "Oeffne Tueren links", + "Entities.gmod_subway_em508t.Buttons.Main.KSDSet": "Tuerkontrolle", + "Entities.gmod_subway_em508t.Buttons.Main.VozvratRPSet": "Setze Wagonrelay zuruek", + "Entities.gmod_subway_em508t.Buttons.Main.KSNSet": "Ausfallschalter", + "Entities.gmod_subway_em508t.Buttons.Main.VUD1Toggle": "Schliesse Tueren", + "Entities.gmod_subway_em508t.Buttons.Main.KU1Toggle": "Kompressor", + "Entities.gmod_subway_em508t.Buttons.Main.DIPonSet": "KU4: Schalte Wagonbeleuchtung ein", + "Entities.gmod_subway_em508t.Buttons.Main.DIPoffSet": "KU5: Schalte Wagonbeleuchtung aus", + "Entities.gmod_subway_em508t.Buttons.Main.RezMKSet": "Switch: Notfallkompressor starten", + "Entities.gmod_subway_em508t.Buttons.Main.KDPSet": "KDP: Oeffne Tueren rechts", + "Entities.gmod_subway_em508t.Buttons.Main.KRZDSet": "KU10: Zwangsschliessen", + "Entities.gmod_subway_em508t.Buttons.AVMain.AV8BToggle": "AV-8B: Automat (Hochspannungs Schalter)", + "Entities.gmod_subway_em508t.Buttons.VU.VUToggle": "VU: Aktiviere Zugkontrolle", + "Entities.gmod_subway_em508t.Buttons.VU.!Voltage": "Kontrolliere die Voltanzahl der Schaltkreise", + "Entities.gmod_subway_em508t.Buttons.HelperPanel.VUD2Toggle": "VUD2: Schliesse Tueren", + "Entities.gmod_subway_em508t.Buttons.HelperPanel.VDLSet": "VDL: Oeffne Tueren links", + "Entities.gmod_subway_em508t.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle": "Bremsdruckventil", + "Entities.gmod_subway_em508t.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle": "Zugdruckventil", + "Entities.gmod_subway_em508t.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Schalte Druckluftverteiler ab" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/de_spawner.lua b/lua/metrostroi_data/languages_/_unfinished/de_spawner.lua new file mode 100644 index 0000000..44b8f5e --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/de_spawner.lua @@ -0,0 +1,117 @@ +return [[ +{ + "Lang": "de", + "Name": "Deutsch", + + "Spawner.Title": "Zug spawner", + "Spawner.Trains1": "Zuege", + "Spawner.Trains2": "Maximale Anzahl fuer dich", + "Spawner.WagNum": "Wagen", + "Spawner.AutoCouple": "Automatisches kuppeln der Wagons", + + "Entities.gmod_subway_81-717_mvm.Spawner.Texture.Name": "Ausfuehrung", + "Entities.gmod_subway_81-717_mvm.Spawner.PassTexture.Name": "Passagiertextur", + "Entities.gmod_subway_81-717_mvm.Spawner.CabTexture.Name": "Fuehrerstandstextur", + "Entities.gmod_subway_81-717_mvm.Spawner.Announcer.Name": "Ansagegeraet", + "Entities.gmod_subway_81-717_mvm.Spawner.Lighter.Name": "Feuerzeug", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.Name": "ARS Konsolentyp", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.1": "Normal(eckige lampen)", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.2": "Normal(runde lampen)", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.3": "Kiev/St.Petersburg", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.4": "Alte ARS Ausfuehrung", + "Entities.gmod_subway_81-717_mvm.Spawner.Cran.Name": "Bremshebel", + "Entities.gmod_subway_81-717_mvm.Spawner.Cran.1": "334", + "Entities.gmod_subway_81-717_mvm.Spawner.Cran.2": "013", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.Name": "Front", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.1": "2-2", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.2": "2-2-2", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.3": "1-4-1 Stossstange 1", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.4": "1-4-1 Stossstange 2", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.5": "1-1", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.6": "Retro", + "Entities.gmod_subway_81-717_mvm.Spawner.LED.Name": "LED", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.Name": "BPSN typ", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.1": "Alter hoher ton", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.2": "Alter mittlerer ton", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.3": "Normal(aus St.Petersburg)", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.4": "Normal(TKL)", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.5": "Normal", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.6": "Kiew", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.7": "Alt", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.8": "Normal 2", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.9": "Normal 3", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.10": "Kein Ton(BPN-115)", + "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.Name": "Steuerungston", + "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.1": "Typ 1", + "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.2": "Typ 2", + "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.3": "Typ 3", + "Entities.gmod_subway_81-717_mvm.Spawner.NewKV.Name": "Neues Kontroller Modell", + "Entities.gmod_subway_81-717_mvm.Spawner.HornType.Name": "St.Petersburg Warnsignal", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.Name": "Pfeifton", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.1": "Alt", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.2": "Normal tiefer ton", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.3": "Normal hoher ton", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.4": "Normal alternierender tiefer ton", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.5": "Normal alternierender hoher ton", + "Entities.gmod_subway_81-717_mvm.Spawner.NM.Name": "Zug Luftdruck", + "Entities.gmod_subway_81-717_mvm.Spawner.Battery.Name": "Batterie", + "Entities.gmod_subway_81-717_mvm.Spawner.Switches.Name": "Relays eingeschaltet", + "Entities.gmod_subway_81-717_mvm.Spawner.SwitchesR.Name": "Zufaellige Relays einschalten", + "Entities.gmod_subway_81-717_mvm.Spawner.DoorsL.Name": "Oeffne Tueren links", + "Entities.gmod_subway_81-717_mvm.Spawner.DoorsR.Name": "Oeffne Tueren rechts", + "Entities.gmod_subway_81-717_mvm.Spawner.GV.Name": "Hochspannungs Schalter", + "Entities.gmod_subway_81-717_mvm.Spawner.PB.Name": "Parkbremse", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.Name": "Tuersignal lampen", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.1": "Horizontal", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.2": "Vertikal", + "Entities.gmod_subway_81-717_mvm.Spawner.MVM.Name": "MVM Schild", + "Entities.gmod_subway_81-717_mvm.Spawner.HandRail.Name": "Haltestangen style", + "Entities.gmod_subway_81-717_mvm.Spawner.HandRail.1": "Alt", + "Entities.gmod_subway_81-717_mvm.Spawner.HandRail.2": "Neu", + "Entities.gmod_subway_81-717_mvm.Spawner.SeatType.Name": "Sitz style", + "Entities.gmod_subway_81-717_mvm.Spawner.SeatType.1": "Alt", + "Entities.gmod_subway_81-717_mvm.Spawner.SeatType.2": "Neu", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.Name": "Lampen style", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.1": "Typ 1", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.2": "Typ 2", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.3": "Typ 3", + "Entities.gmod_subway_81-717_mvm.Spawner.Breakers.Name": "Relays Rechts", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.Name": "Werbung", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.1": "Werbung 1", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.2": "Werbung 2", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.3": "Werbung 3", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.4": "Keine Werbung", + + "Entities.gmod_subway_81-720.Spawner.Texture.Name": "Ausfuehrung", + "Entities.gmod_subway_81-720.Spawner.PassTexture.Name": "Passagiertextur", + "Entities.gmod_subway_81-720.Spawner.CabTexture.Name": "Fuehrerstandstextur", + "Entities.gmod_subway_81-720.Spawner.Announcer.Name": "Ansagegeraet", + "Entities.gmod_subway_81-720.Spawner.Scheme.Name": "Linien schema", + "Entities.gmod_subway_81-720.Spawner.PassSchemesInvert.Name": "Tausche schema", + "Entities.gmod_subway_81-720.Spawner.NM.Name": "Zug Luftdruck", + "Entities.gmod_subway_81-720.Spawner.Battery.Name": "Batterie", + "Entities.gmod_subway_81-720.Spawner.BRU.Name": "Hochspannungschalter", + "Entities.gmod_subway_81-720.Spawner.PVZR.Name": "Schalte zufaellige Zugsicherungrelays ein", + "Entities.gmod_subway_81-720.Spawner.PPZ.Name": "Schalte alle Zugsicherungrelays ein", + "Entities.gmod_subway_81-720.Spawner.PPZDepot.Name": "Schalte alle Zugsicherungs Relays aus", + "Entities.gmod_subway_81-720.Spawner.PPZR.Name": "Zufaellige Relays in Mittelwagen", + "Entities.gmod_subway_81-720.Spawner.DoorsL.Name": "Oeffne Tueren links", + "Entities.gmod_subway_81-720.Spawner.DoorsR.Name": "Oeffne Tueren rechts", + + "Entities.gmod_subway_81-722.Spawner.Texture.Name": "Ausfuehrung", + "Entities.gmod_subway_81-722.Spawner.PassTexture.Name": "Passagiertextur", + "Entities.gmod_subway_81-722.Spawner.CabTexture.Name": "Fuehrerstandstextur", + "Entities.gmod_subway_81-722.Spawner.Announcer.Name": "Ansagegeraet", + "Entities.gmod_subway_81-722.Spawner.Scheme.Name": "Linien schema", + "Entities.gmod_subway_81-722.Spawner.SarmatInvert.Name": "Tausche schema", + "Entities.gmod_subway_81-722.Spawner.NM.Name": "Zug Luftdruck", + "Entities.gmod_subway_81-722.Spawner.Battery.Name": "Batterie", + "Entities.gmod_subway_81-722.Spawner.Switches.Name": "Schalte zufaellige Zugsrelays ein", + "Entities.gmod_subway_81-722.Spawner.SwitchesR.Name": "Schalte zufaellige Relays ein", + "Entities.gmod_subway_81-722.Spawner.DoorsL.Name": "Oeffne Tueren links", + "Entities.gmod_subway_81-722.Spawner.DoorsR.Name": "Oeffne Tueren rechts", + + "Spawner.Close": "Schliessen", + "Spawner.Spawn": "Fertig" +} +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages_/_unfinished/fin_buttons_717.lua b/lua/metrostroi_data/languages_/_unfinished/fin_buttons_717.lua new file mode 100644 index 0000000..50c3c10 --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/fin_buttons_717.lua @@ -0,0 +1,297 @@ +return [[ +{ + "Lang": "FIN", + "Name": "FINLAND", + + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.VUD2Toggle": "VUD2: Door ohjaus toggle (close doors)", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.VDLSet": "VDL: Vasemmanpuoleiset ovet auki", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.R_Program2Helper": "Ohjelma 2", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.R_Program1Helper": "Ohjelma 1", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:RC1Toggle": "RC-1: ARS-piirit pois", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:VBToggle": "VB: Akusto päälle/pois", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:UOSToggle": "RC-UOS: Nopeudenrajoituslaite", + "Entities.gmod_subway_81-717_mvm.Buttons.Wiper.WiperToggle": "Pyyhkijä", + "Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle": "Ohjausventtiilin irroitus", + "Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveBLDisconnectToggle": "Jarrujohdon irroitus", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_UNchToggle": "UNCh: Matala taajuusvahvistin", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_ZSToggle": "ZS: Äänet vaunussa päälle", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_GToggle": "Loudspeaker: Äänet ohjaamossa päälle", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_RadioToggle": "Radioinffo: Ilmoitukset(sisäänrakennettu)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_Program1Set": "Ohjelma 1", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_Program2Set": "Ohjelma 2", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.2:KVTSet": "KB: Huomio nappi", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VZ1Set": "VZ1: Paineilman venttiili #1", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VUD1Toggle": "VUD: Ovilukon asento (sulje ovet)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLSet": "KDL: Vasemmanpuoleiset ovet auki", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLKToggle": "KDL nappulan kansi", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLRSet": "KDL: Vasemmanpuoleiset ovet auki", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLRKToggle": "KDL nappulan kansi", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.DoorSelectToggle": "Ovien puoli", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KRZDSet": "RZD: ", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_VPRToggle": "VPR: Radioasemat päälle", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VozvratRPSet": "Ylikuormituksen resetoinnin rele", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.GreenRPLight": "RP: Viherä ylikuormituksen valo (estää moottoreiden \"ylivirtauksen\")", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.AVULight": "AVU: Automaattisen ohjauksen sammutus aktiivinen", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.LKVPLight": "LKVP: Suurjännitemuuntimen ohjaus", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.SPLight": "LSP: Palohälytys (reostaatti ylikuumenee)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ConverterProtectionSet": "Muuntimen suojaus", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KSNSet": "KSN: Failure indication button", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.DIPoffSet": "Hälytys äänimerkki", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ARSToggle": "ARS: Automaattinen nopeudenvalvonta", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ALSToggle": "ALS: Kulunvalvonta", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.OtklAVUToggle": "Sammuta automaattisen ohjausyksikön rele (vikatila AVU)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.TormATToggle": "(placeholder) Hätäjarrun kytkin", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_1Toggle": "Matkustamon valot", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_2Toggle": "Ohjaamo valo", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_3Toggle": "Paneeli valot", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ALSFreqToggle": "Decoder: ALS taajuuskytkin 1/5 tai 2/6", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ParkingBrakeSignToggle": "Sign \"VAPAUTA KÄSIJARRU\"", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.ParkingBrakeToggle": "Käsijarru", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.DriverValveTLDisconnectToggle": "Junaohausventtiili", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA1Set": "IGLA: Ensimmäinen nappi", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA2Set": "IGLA: Toinen nappi", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA3Set": "IGLA: Kolmas nappi", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA4Set": "IGLA: Neljäs nappi", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.!Voltage": "Hallitse ohjauspiirin jännitteitä", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.VMKToggle": "Moottori kompressori päälle", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.BPSNonToggle": "BPSN: Train power supply", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.RezMKSet": "Moottorikompressorin hätä käynnistys", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.ARS13Set": "ARS 13V: ARS stabiloitu jännite tarkastus", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!RouteNum": "М â„–\nReitti numero", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!PathNum": "П â„–\nn numero", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchTime": "ВРЕМЯ ХОДÐ\nAikataulun totaalinen aika(?)", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchInterval": "ИÐТ\nJunien aikaväli", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchHour": "ЧÐС\nTunnit", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchMin": "МИÐ\nMinuutit", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchSec": "СЕК\nSekunnit", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchArrival": "Saapumis ajat", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchStations": "Aseman nimi", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!Speedometer": "Nopeusmittari", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLSN": "LSN: Vian merkkiovalo (tehopiirit eivät onnistuneet kokoontumaan)", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampRP": "RP: Punainen ylikuormituksen valo (tehopiirit eivät onnistuneet kasaantumaan)", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLHRK": "LhRK: Reostaattisäätimen liikevalo", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLKT": "LKT: ARS jarrutuksen merkkivalo", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLKVD": "LKVD: ARS moottorin sammutusilmaisin", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLKVC": "LKVC: Korkeajännite ei ole saatavilla", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARSOch": "OCh: Ei ARS taajuutta", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS0": "0: ARS pysähtymis singaali", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS40": "Nopeusrajoitus 40 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS60": "Nopeusrajoitus 60 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS70": "Nopeusrajoitus 70 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS80": "Nopeusrajoitus 80 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLSD1": "LSD: Ovi valot (ovet ovat kiinni)", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLSD2": "LSD: Ovi valot (ovet ovat kiinni)", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLST": "LST: Jarrut kiinni", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLVD": "LVD: Moottorit päällä", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLN": "LN: Suuntaussingaali", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLRS": "LRS: Nopeuden \"tasa-arvo\" (sueraavan segmentin nopeusrajoitus on yhtä suuri tai suurempi kuin nykyinen)", + "Entities.gmod_subway_81-717_mvm.Buttons.PneumaticPanels.!CylinderPressure": "Jarrusylintereiden paine", + "Entities.gmod_subway_81-717_mvm.Buttons.PneumaticPanels.!LinePressure": "Paine penumaattisissa linjoissa (punainen: \"jarruviiva\", musta: junan)", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.RC1Toggle": "RC-1: ARS piirien irroitus", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.UOSToggle": "RC-UOS: Nopeudenrajouituslaite", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.VBToggle": "VB: Akusto päälle/pois", + "Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "jarrujohdon eristysventtiili", + "Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Junajohdon eristysventtiili", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPMenuSet": "ASNP: Valikko", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPUpSet": "ASNP: Ylös", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPDownSet": "ASNP: Alas", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPOnToggle": "ASNP: Päälle", + "Entities.gmod_subway_81-717_mvm.Buttons.RearDoor.RearDoor": "Taka-ovi", + "Entities.gmod_subway_81-717_mvm.Buttons.Meters.!TotalVoltmeter": "HV volttimittari (kV)", + "Entities.gmod_subway_81-717_mvm.Buttons.Meters.!TotalAmpermeter": "Totaalinen ampeerimittari(A)", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A61Toggle": "A61 Juna johto 6 ohjaus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A55Toggle": "A55 Juna johto 10AS Ohjaus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A54Toggle": "A54 Juna johto 10AK ohjaus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A56Toggle": "A56 Kytke virta akkuvirtapiiriin", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A27Toggle": "A27 Käynnistä DIP ja valaistus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A21Toggle": "A21 Ovien hallinta", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A10Toggle": "A10 Moottorikompressorin ohjaus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A53Toggle": "A53 KVC virtalähde", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A43Toggle": "A43 ARS 12V virtalähde", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A45Toggle": "A45 ARS junajohto 10AU", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A42Toggle": "A42 ARS 75V jännitelähde", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A41Toggle": "A41 ARS jarrutus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.VUToggle": "VU Junan ohjaus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A64Toggle": "A64 Ohjaamo valo", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A63Toggle": "A63 IGLA/BIS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A50Toggle": "A50 Käynnistä DIP ja valaistus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A51Toggle": "A51 Sammuta DIP and valaistus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A23Toggle": "A23 Moottorikompressorin hätäkäynnistys", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A14Toggle": "A14 Juna johto 18", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A75Toggle": "A75 Ohjaamon lämmitys", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A1Toggle": "A1 X-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A2Toggle": "A2 X-2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A3Toggle": "A3 X-3", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A17Toggle": "A17 Ylikuormituksen resetointi", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A62Toggle": "A62 Radioviestintä", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A29Toggle": "A29 Radiolägetykset", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A5Toggle": "A5 Välivaunu", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A6Toggle": "A6 T-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A8Toggle": "A8 Paineilma venttiilit #1, #2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A20Toggle": "A20 Ohjaus 20", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A25Toggle": "A25 Manuaalinen sähkojarru", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A22Toggle": "A22 Käynnistä KK", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A30Toggle": "A30 Reostaattisäätimen moottorin teho", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A39Toggle": "A39 Hätäohjaus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A44Toggle": "A44 Junan hätäohjaus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A80Toggle": "A80 Virtakytkin kytketty moottorin tehoon", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A65Toggle": "A65 Matkustamon valot", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.L_5Toggle": "Ð49 Hätä valaistus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A24Toggle": "A24 Akun lataus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A32Toggle": "A32 Open right doors", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A31Toggle": "A31 Open left doors", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A16Toggle": "A16 Ovet kiinni", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A13Toggle": "A13 Ovi hälytys", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A12Toggle": "A12 Ovien hätäsulku", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A7Toggle": "A7 Punainen valo", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A9Toggle": "A9 Punainen valo", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A46Toggle": "A46 Valkoinen valo", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A47Toggle": "A47 Valkoinen valo", + "Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor.PassengerDoor": "Matkustamon ovi", + "Entities.gmod_subway_81-717_mvm.Buttons.GV.GVToggle": "HV kytkin", + "Entities.gmod_subway_81-717_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle": "Hätäjarru", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.PrevSign": "Edellinen kilpi", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.NextSign": "Seuraava kilpi", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num2P": "linja : Lisää 2. numeroa", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num2M": "Linja: Vähennä 2. numeroa", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num1P": "Linja: Lisää 1. numeroa", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num1M": "Linja: Vähennä 1. numeroa", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.L_4Toggle": "Ajovalojen kytkin", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VUSToggle": "VUS: Ajovalot pitkät/lyhyet", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VAHToggle": "VAH: Hätä ajo modi (vika RPB releessä)", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VADToggle": "VAD: Hätäoven sulkian ylikuormittuminen (vikaf KD releessä)", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KRPSet": "KRP: Hätäkäynnistys nappi", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KAHSet": "Hätä ajo nappi", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KAHKToggle": "KAH nappulan suoja", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KUP": "Ohjaamolämmitys aktiivinen", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KDPSet": "KDP: Oikeanopuoleiset ovet auki", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KDPKToggle": "KDP nappulan suoja", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.PN": "Ilmajarrun ohjaus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A61Toggle": "A61 Juna johdon 6 ohjus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A55Toggle": "A55 Juna johdon 10AS ohjaus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A54Toggle": "A54 Juna johdon 10AK ohjaus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A56Toggle": "A56 Käynnistä akustonvirta ohjauspiireihin", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A27Toggle": "A27 Käynnistä DIP ja valaistus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A21Toggle": "A21 Ovien ohjaus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A10Toggle": "A10 Moottorikompressorin ohjaus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A53Toggle": "A53 KVC virta", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A43Toggle": "A43 ARS 12V virta", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A45Toggle": "A45 ARS junajohto 10AU", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A42Toggle": "A42 ARS 75V virta", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A41Toggle": "A41 ARS jarrutus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:VUToggle": "VU Junan ohjaus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A64Toggle": "A64 Ohjaamo valaistus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A63Toggle": "A63 IGLA/BIS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A50Toggle": "A50 Käynnistä DIP ja valaistus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A51Toggle": "A51 Sammuta DIP ja valaistus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A23Toggle": "A23 Hätämoottorikompressori päälle", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A14Toggle": "A14 Junajohto 18", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A75Toggle": "A75 Ohjaamon lämmitys", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A1Toggle": "A1 X-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A2Toggle": "A2 X-2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A3Toggle": "A3 X-3", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A17Toggle": "A17 Ylikuormituksen resetointi", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A62Toggle": "A62 Radioviestintä", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A29Toggle": "A29 Radiolägetykset", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A5Toggle": "A5 Välivaunu", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A6Toggle": "A6 T-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A8Toggle": "A8 Paineilma venttiilit #1, #2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A20Toggle": "A20 Ajo/jarru ohjaus, juna johto 20", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A25Toggle": "A25 Manuaalinen sähköjarru", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A22Toggle": "A22 Käynnistä KK", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A30Toggle": "A30 Reostaattisen moottorin teho", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A39Toggle": "A39 Hätäohjaus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A44Toggle": "A44 Junan hätäohjaus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A80Toggle": "A80 Virroitin kytkeytyy moottoriin tehoon", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A65Toggle": "A65 Matkustamon valaistus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:L_5Toggle": "Ð49 Hätä valaistus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A24Toggle": "A24 Akuston lataus", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A32Toggle": "A32 Avaa oikeanpuoleiset ovet", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A31Toggle": "A31 Avaa vasemmanpuoleiset ovet", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A16Toggle": "A16 Sulje ovet", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A13Toggle": "A13 Ovi hälytys", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A12Toggle": "A12 Ovien hätäsulkeutuminen", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A7Toggle": "A7 Punainen valo", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A9Toggle": "A9 Punainen valo", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A46Toggle": "A46 Valkoinen lamppu", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A47Toggle": "A47 Valkoinen lamppu", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!Speedometer": "Nopeusmittari", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LSD": "LSD: Ovien tila valo (ovet ovat kiinni)", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LOCh": "NCh: Ei ARS taajuutta", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L0": "0: ARS pysähtymis singaali", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LRS": "LRS: Nopeuden tasa-arvo (seuraavan singaalin nopeusrajoitus on yhtä suuri tai suurempi kuin nykyinen)", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L40": "Rajoitus 40 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L60": "Rajoitus 60 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L80": "Rajoitus 80 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L70": "Rajoitus 60 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LRK": "RK: Reostaattiohauksen valo", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LEKK": "", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LPU": "", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LKVD": "LKVD: ARS Moottorin sammutusilmaisin", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LKT": "LKT: ARS Jarrutusilmaisin", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LRP": "RP: Punainen ylikuormituksen valo (tehopiirit eivät onnistuneet kasaantumaan)", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LKVC": "LKVC: Korkeajännite ei ole saatavilla", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LVD": "LVD: Moottorit ovat \"mukana\"", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LST": "LST: Jarrut kiinni", + "Entities.gmod_subway_81-717_mvm.Buttons.CabinDoor.CabinDoor": "Ohjaamo ovi", + "Entities.gmod_subway_81-717_mvm.Buttons.Reverser.KVReverserDown": "Suunta taakse", + "Entities.gmod_subway_81-717_mvm.Buttons.Reverser.KVReverserUp": "Suunta eteen", + "Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor1.PassengerDoor": "Matkustamon ovi", + "Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAToggle": "UAVA: Automaattinen pysähdys pois päältä", + "Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAContactSet": "UAVA: Automaattisen pysähdyksen resetointi)", + "Entities.gmod_subway_81-717_mvm.Buttons.EPKDisconnect.EPKToggle": "EPV Irroita venttiili", + "Entities.gmod_subway_81-717_mvm.Buttons.Help.ShowHelp": "Junan ohjekirja", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake2.1:ParkingBrakeToggle": "Käsijarru", + "Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": " Jarruventtiilin vipu", + "Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle": " Junaventtiilin vipu", + "Entities.gmod_subway_81-717_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Poista ilmansyöttö", + + "Entities.gmod_subway_81-714_mvm.Buttons.GV.GVToggle": "HV kytkin", + "Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Jarrun eristysventtiili", + "Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Junajarrun eristysventtiili", + "Entities.gmod_subway_81-714_mvm.Buttons.RearDoor.RearDoor": "Rear door", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.DriverValveBLDisconnectToggle": "Jarrun eristysventtiili", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.DriverValveTLDisconnectToggle": "Junajarrun ohjausventtiili", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A65Toggle": "A65 Matkustamon valot", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A56Toggle": "A56 Kytke akusto päälle ohjaamaan piirejä", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A63Toggle": "A63 IGLA/BIS", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A10Toggle": "A10 Moottorikompressorin ohjaus", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A30Toggle": "A30 Reostaattisen moottorin teho", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A80Toggle": "A80 Virroittimen tila kytkeytyy moottorin tehoon", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Jarrun eristysventtiili", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Junajarrun eristysventtiili", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.ParkingBrakeToggle": "Käsijarru", + "Entities.gmod_subway_81-714_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Disabloi ilmansyöttö", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontDoor.FrontDoor": "Etuovi", + "Entities.gmod_subway_81-714_mvm.Buttons.Battery.VBToggle": "VB: Akusto päälle/pois", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A54Toggle": "A54 junajohdon 10AK ohjaus", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A27Toggle": "A27 Käynnistä DIP ja valaistus", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A24Toggle": "A24 Akuston lataus", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A53Toggle": "A53 KVC power supply", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A13Toggle": "A13 Ovi hälytys", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A32Toggle": "A32 Oikeanopuoleiset ovet", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A31Toggle": "A31 Vasemmanpuoleiset ovet", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A16Toggle": "A16 Ovet kiinni", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A12Toggle": "A12 Ovet kiinni hätäkatkaisia", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A50Toggle": "A50 Käynnistä DIP ja valaistus", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A51Toggle": "A51 Sammuta DIP ja valaistus", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A1Toggle": "A1 X-1", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.KRPSet": "START: Hätä käynnistyksen nappi", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.VozvratRPSet": " Ylikuormituksen resetointi", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.RezMKSet": "Moottorikompressorin hätäkäynnistys", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.VMKToggle": "Moottorikompressori päälle ", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.BPSNonToggle": "BPSN: Junan virtalähde", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A2Toggle": "A2 X-2", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A3Toggle": "A3 X-3", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A17Toggle": "A17 Ylikuormituksen resetointi", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A5Toggle": "A5 ", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A6Toggle": "A6 T-1", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A8Toggle": "A8 Paineilman venttiilit #1, #2", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A20Toggle": "A20 Veto/jarru piiri ohjaus, juna johto 20", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A25Toggle": "A25 Manuaalinen sähkojarru", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A22Toggle": "A22 Käynnistä KK", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A23Toggle": "A23 Käynnistä hätämoottorikompressori", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A39Toggle": "A39 Hätäohjaus", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A14Toggle": "A14 Juna johto 18" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/fin_buttons_ezh3.lua b/lua/metrostroi_data/languages_/_unfinished/fin_buttons_ezh3.lua new file mode 100644 index 0000000..1a76de0 --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/fin_buttons_ezh3.lua @@ -0,0 +1,140 @@ +return [[ +{ + "Lang": "fin", + "Name": "Suomi", + + + "Entities.gmod_subway_ezh3.Buttons.Stopkran.EmergencyBrakeValveToggle": "Hätäjarru", + "Entities.gmod_subway_ezh3.Buttons.Back.BackDoor": "Taka-ovi", + "Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle": "Jarrujohdon irroitusventtiili", + "Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle": "Junajohdon irroitusventtiili", + "Entities.gmod_subway_ezh3.Buttons.Battery.VBToggle": "VB: Akusto päälle/pois (matala voltti)", + "Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Jarrujohdon irroitusventtiili", + "Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Junajarrun irroitusventtiili", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPMenuSet": "Kuuluttaja: Menu", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPUpSet": "Kuuluttaja: Ylös", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPDownSet": "Kuuluttaja: Alas", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPOnToggle": "Kuuluttaja: Käynnistä", + "Entities.gmod_subway_ezh3.Buttons.PassengerDoor1.PassengerDoor": "Matkustamon ovi", + "Entities.gmod_subway_ezh3.Buttons.PassengerDoor.PassengerDoor": "Matkustamon ovi", + "Entities.gmod_subway_ezh3.Buttons.CabinDoor.CabinDoor": "Ohjaamon ovi", + "Entities.gmod_subway_ezh3.Buttons.Front.FrontDoor": "Etu ovi", + "Entities.gmod_subway_ezh3.Buttons.GV.GVToggle": "HV kytkin", + "Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Junajohdon irroitusventtiili", + "Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Jarrujohdon irroitusventtiili", + "Entities.gmod_subway_ezh3.Buttons.Panel.!OCH": "NCh: No ARS taajuutta", + "Entities.gmod_subway_ezh3.Buttons.Panel.!0": "0: ARS pysähtymis singaali", + "Entities.gmod_subway_ezh3.Buttons.Panel.!40": "Nopeusrajoitus 40 kph", + "Entities.gmod_subway_ezh3.Buttons.Panel.!60": "Nopeusrajoitus 60 kph", + "Entities.gmod_subway_ezh3.Buttons.Panel.!70": "Nopeusrajoitus 80 kph", + "Entities.gmod_subway_ezh3.Buttons.Panel.!80": "Nopuesrajoitus 60 kph", + "Entities.gmod_subway_ezh3.Buttons.Panel.!Speedometer": "Nopeusmittari (km/h)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!TotalAmpermeter": "Moottoreiden totaalinen amppeerimäärä (A)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!TotalVoltmeter": "Totaalinen volttimäärä (kV)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!BatteryVoltage": "Akuston volttimäärä junan ohjauksessa(V)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!BrakeCylinder": "Jarrusylintereiden paine", + "Entities.gmod_subway_ezh3.Buttons.Panel.!LinesPressure": "Paine paineilmajohdoissa (punainen: jarrujohto, musta: junajohto)", + "Entities.gmod_subway_ezh3.Buttons.Main.KU1Toggle": "Käynnistä moottorikompressori", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMM1Set": "SAMM: Sammuta ajomodi", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMM2Set": "SAMM: Käynnistys", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMM3Set": "SAMM: Resetointi", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal1": "Lamppu: Veto-Jarrutus", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal2": "Lamppu: Työ status SAMM", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal3": "Lamppu: SAMMM toteutusyksikkö käytössä", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMOnToggle": "SAMM: Automaattiajo päälle", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMBlokToggle": "SAMM: Suoritusyksikkö", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMCommand3Set": "SAMM: X-2", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMCommand2Set": "SAMM: Saavuttaa", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMCommand1Set": "SAMM: Lupa", + "Entities.gmod_subway_ezh3.Buttons.Main.KSNSet": "KSN: Vian osoituspainike", + "Entities.gmod_subway_ezh3.Buttons.Main.R_Program1Set": "Ohjelma 1", + "Entities.gmod_subway_ezh3.Buttons.Main.R_Program2Set": "Ohjelma 2", + "Entities.gmod_subway_ezh3.Buttons.Main.VUSToggle": "Kytkin: Lähivalot(alhaalla)/Pitkätvalot(ylhäällä)", + "Entities.gmod_subway_ezh3.Buttons.Main.L_3Toggle": "Kytkin: Mittarien valaistus", + "Entities.gmod_subway_ezh3.Buttons.Main.VAHToggle": "Kytkin: Hätäkytkin", + "Entities.gmod_subway_ezh3.Buttons.Main.DIPonSet": "Osv. Vkl.: Valaistus päälle", + "Entities.gmod_subway_ezh3.Buttons.Main.DIPoffSet": "Osv. Vykl.: Valaistus pois päältä", + "Entities.gmod_subway_ezh3.Buttons.Main.KSDSet": "KSD: Ovien tarkastus", + "Entities.gmod_subway_ezh3.Buttons.Main.KVTSet": "KVT: jarrun havainnointipainike", + "Entities.gmod_subway_ezh3.Buttons.Main.KBSet": "KB:Huomio-painike", + "Entities.gmod_subway_ezh3.Buttons.Main.KBLamp": "Lamppu: RK kehruu", + "Entities.gmod_subway_ezh3.Buttons.Main.ARSToggle": "ARS: Nopeuden kulunvalvonta", + "Entities.gmod_subway_ezh3.Buttons.Main.R_UNchToggle": "UNCh: Alhainen taajuusvahvistin", + "Entities.gmod_subway_ezh3.Buttons.Main.VUD1Toggle": "VUD:Ovilukko (sulje ovet)", + "Entities.gmod_subway_ezh3.Buttons.Main.R_RadioToggle": "Radioinformator: Kuuluttaja (sisäänrakennettu)", + "Entities.gmod_subway_ezh3.Buttons.Main.ALSToggle": "ALS: Kulunvalvonta", + "Entities.gmod_subway_ezh3.Buttons.Main.VozvratRPSet": "KVRP: Ylikuormittuksen resetointi", + "Entities.gmod_subway_ezh3.Buttons.Main.RingSet": "Kello", + "Entities.gmod_subway_ezh3.Buttons.Main.L_2Toggle": "Kytkin: Ohjaamo valo", + "Entities.gmod_subway_ezh3.Buttons.Main.KRZDSet": "KRZD: Ovien hätäsulku", + "Entities.gmod_subway_ezh3.Buttons.Main.KDPSet": "KDP: Avaa oikeanpuoleiset ovet", + "Entities.gmod_subway_ezh3.Buttons.Main.KDLSet": "KDL: Vasemmanpuoleiset ovet auki", + "Entities.gmod_subway_ezh3.Buttons.Main.KAHSet": "KAH: Ajamisen hätäpainnike", + "Entities.gmod_subway_ezh3.Buttons.Main.RezMKSet": "Moottorikompressorin hätäkäynnistys", + "Entities.gmod_subway_ezh3.Buttons.Main.KRPSet": "KRP: Hätkäynnistyksen painike", + "Entities.gmod_subway_ezh3.Buttons.Main.RSTToggle": "VPR: Radioaseman aktivointi", + "Entities.gmod_subway_ezh3.Buttons.Main.R_GToggle": "Loudspeaker: Äänet ohjaamossa päälle", + "Entities.gmod_subway_ezh3.Buttons.Main.R_ZSToggle": "ZS: Äänet vaunuissa päälle", + "Entities.gmod_subway_ezh3.Buttons.Main.Custom2Set": "Käyttämätön kytkin", + "Entities.gmod_subway_ezh3.Buttons.Main.Custom3Set": "Käyttämätön kytkin", + "Entities.gmod_subway_ezh3.Buttons.Main.ASNPPlay": "Ilmoittajan työn ilmaisin", + "Entities.gmod_subway_ezh3.Buttons.AV1.VU3Toggle": "VU3: Ohjaamon valo", + "Entities.gmod_subway_ezh3.Buttons.AV1.VU2Toggle": "VU2: Hätävalaistus (45V)", + "Entities.gmod_subway_ezh3.Buttons.AV1.VU1Toggle": "VU1: Ohjaamon lämmitys (3kWt)", + "Entities.gmod_subway_ezh3.Buttons.AVMain.AV8BToggle": "AV-8B: Automaattinen kytkin(korkeajännite)", + "Entities.gmod_subway_ezh3.Buttons.RC1.RC1Toggle": "RC-ARS: ARS-katkaisija", + "Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAToggle": "UAVA: Automaattisen hätäjarrun disablointi (disablointi)", + "Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAContactSet": "UAVA: Automaattisen hätäjarrun disablointi(resetointi)", + "Entities.gmod_subway_ezh3.Buttons.VUHelper.VUToggle": "VU: Junaohjaus päälle", + "Entities.gmod_subway_ezh3.Buttons.HelperPanel.VDLSet": "KDL: Vasemmanpuoleiset ovet auki", + "Entities.gmod_subway_ezh3.Buttons.HelperPanel.VUD2Toggle": "VUD2: Ovilukon kytkin (ovet kiinni)", + "Entities.gmod_subway_ezh3.Buttons.EPKDisconnect.EPKToggle": "EPK irroita venttiili", + "Entities.gmod_subway_ezh3.Buttons.VU.VUToggle": "VU: Junaohjaus päälle", + "Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeLeft": "Käsijarrun pyörä", + "Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeRight": "Käsijarrun pyörä", + "Entities.gmod_subway_ezh3.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Disabloi ilmansyöttö", + + "Entities.gmod_subway_em508t.Buttons.Stopkran.EmergencyBrakeValveToggle": "Hätäjarru", + "Entities.gmod_subway_em508t.Buttons.Battery.VBToggle": "VB: Akusto päälle/pois (matala jännite)", + "Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Jarrujohdon irroitusventtiili", + "Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Junajohdon irroitusventtiili", + "Entities.gmod_subway_em508t.Buttons.GV.GVToggle": "HV kytkin", + "Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Jarrujohdon irroitusventtiili", + "Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Jarrujohdon irroitusventtiili", + "Entities.gmod_subway_em508t.Buttons.RearDoor.RearDoor": "Matkustamon ovi", + "Entities.gmod_subway_em508t.Buttons.Back2.!HVFuse": "HV sulakkeet estävät", + "Entities.gmod_subway_em508t.Buttons.Back2.!Relays": "Laatikko, jossa on akuston lataus ja ovien paineanturit", + "Entities.gmod_subway_em508t.Buttons.Back2.!Heater": "Lämmitys", + "Entities.gmod_subway_em508t.Buttons.Front.FrontDoor": "Etu-ovi", + "Entities.gmod_subway_em508t.Buttons.AV1.VU3Toggle": "VU3: Ohjaamon valo", + "Entities.gmod_subway_em508t.Buttons.AV1.VU2Toggle": "VU2: Hätävalaistus (45V)", + "Entities.gmod_subway_em508t.Buttons.AV1.VU1Toggle": "VU1: Ohjaamon lämmitys (3kWt)", + "Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeLeft": "Käsijarrun pyörä", + "Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeRight": "Käsijarrun pyörä", + "Entities.gmod_subway_em508t.Buttons.CabinDoor.CabinDoor1": "Ohjaamon ovi", + "Entities.gmod_subway_em508t.Buttons.PassengerDoor.PassengerDoor": "Matkustamon ovi", + "Entities.gmod_subway_em508t.Buttons.PassengerDoor1.PassengerDoor": "Matkustamon ovi", + "Entities.gmod_subway_em508t.Buttons.Main.!RedRP": "RP: Punainen ylikuormituksen relevalo (virtapiirit eivät onnistuneet kasaantumaan)", + "Entities.gmod_subway_em508t.Buttons.Main.!GreenRP": "RP: Vihreä ylikuormituksen valo (estää moottoreiden ylivirtauksen)", + "Entities.gmod_subway_em508t.Buttons.Main.!SD": "Sininen ovien tila valo (ovet ovat kiinni)", + "Entities.gmod_subway_em508t.Buttons.Main.KDLSet": "Kytkin: Avaa vasemmanpuoleiset ovet", + "Entities.gmod_subway_em508t.Buttons.Main.KSDSet": "Kytkin: Singaalisaatio (Ovien hallinan testaaminen)", + "Entities.gmod_subway_em508t.Buttons.Main.VozvratRPSet": "Kytkin: Ylikuormittumisen resetointi", + "Entities.gmod_subway_em508t.Buttons.Main.KSNSet": "Kytkin: Rikkinäisen vaunun havaitseminen", + "Entities.gmod_subway_em508t.Buttons.Main.VUD1Toggle": "Kytkin: Ovien hallinta (sulje ovet)", + "Entities.gmod_subway_em508t.Buttons.Main.KU1Toggle": "Kytkin: Kompressori päälle", + "Entities.gmod_subway_em508t.Buttons.Main.DIPonSet": "KU4: Matkustamovalot päälle", + "Entities.gmod_subway_em508t.Buttons.Main.DIPoffSet": "KU5: Matkustamovalot pois", + "Entities.gmod_subway_em508t.Buttons.Main.RezMKSet": "Kytkin: Moottorikompressorin hätäkäynnistäminen", + "Entities.gmod_subway_em508t.Buttons.Main.KDPSet": "KDP: Avaa oikeanpuoleiset ovet", + "Entities.gmod_subway_em508t.Buttons.Main.KRZDSet": "KU10: Ovien hätäsulku", + "Entities.gmod_subway_em508t.Buttons.AVMain.AV8BToggle": "AV-8B: Automaattikytkin (Korkeajännite)", + "Entities.gmod_subway_em508t.Buttons.VU.VUToggle": "VU: Aktivoi junaohjaus", + "Entities.gmod_subway_em508t.Buttons.VU.!Voltage": "Ohjauspiirien jännite", + "Entities.gmod_subway_em508t.Buttons.HelperPanel.VUD2Toggle": "VUD2: Ovilukko (sulje ovet)", + "Entities.gmod_subway_em508t.Buttons.HelperPanel.VDLSet": "VDL: Avaa vasemmanpuoleiset ovet", + "Entities.gmod_subway_em508t.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle": "Jarrujohdon irroitusventtiili", + "Entities.gmod_subway_em508t.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle": "Junajohdon irroitusventtiili", + "Entities.gmod_subway_em508t.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Disabloi ilmansyöttö" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/fr_base.lua b/lua/metrostroi_data/languages_/_unfinished/fr_base.lua new file mode 100644 index 0000000..111b216 --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/fr_base.lua @@ -0,0 +1,53 @@ +return [[ +{ + "Lang": "fr", + "Name": "French", + "Panel.Admin": "Admin", + "Panel.Client": "Client", + "Panel.DrawDebugInfo": "Draw debugging info", + "Panel.DisableCamAccel": "Disable cam acceleration", + "Panel.DisableHoverText": "Disable hover text", + + "Entities.gmod_subway_base.Name": "Subway base", + "Entities.gmod_subway_81-703.Name": "E", + "Entities.gmod_subway_81-703_2.Name": "E (intermédiaire)", + "Entities.gmod_subway_81-717_mvm.Name": "81-717(MVM)", + "Entities.gmod_subway_81-717_lvz.Name": "81-717(LVZ)", + "Entities.gmod_subway_81-714_mvm.Name": "81-714(MVM)", + "Entities.gmod_subway_81-714_lvz.Name": "81-714(LVZ)", + "Entities.gmod_subway_81-7036.Name": "81-7036 (ne fonctionne pas)", + "Entities.gmod_subway_81-7037.Name": "81-7037 (ne fonctionne pas)", + "Entities.gmod_subway_81-720.Name": "81-720 (locomotive)", + "Entities.gmod_subway_81-721.Name": "81-721 (intermédiaire)", + "Entities.gmod_subway_81-722.Name": "81-722 (locomotive)", + "Entities.gmod_subway_81-723.Name": "81-723 (intermédiaire motorisé)", + "Entities.gmod_subway_81-724.Name": "81-724 (wagon intermédiaire)", + "Entities.gmod_subway_e.Name": "E", + "Entities.gmod_subway_em.Name": "Em", + "Entities.gmod_subway_ema.Name": "Ema", + "Entities.gmod_subway_ezh.Name": "Ezh", + "Entities.gmod_subway_ezh1.Name": "Ezh1", + "Entities.gmod_subway_em508.Name": "Em-508", + "Entities.gmod_subway_em508_int.Name": "Em-508 intermédiaire", + "Entities.gmod_subway_ezh3.Name": "Ezh3", + "Entities.gmod_subway_ezh3ru1.Name": "Ezh3 RU1", + "Entities.gmod_subway_ema508t.Name": "Em-508t", + "Entities.gmod_subway_tatra_t3.Name": "Tatra T3", + "Entities.gmod_subway_ai.Name": "train IA", + + "Entities.gmod_train_bogey.Name": "Bogie de train", + "Entities.gmod_train_couple.Name": "Couple", + + "Entities.gmod_track_pui.Name": "Horloge PUI", + "Entities.gmod_track_mus_elektronika7.Name": "Horloge Électrique", + "Entities.gmod_mus_clock_analog.Name": "Horloge Analogique ", + "Entities.gmod_track_clock_time.Name": "Horloge des Grandes Intervales (temps)", + "Entities.gmod_track_clock_small.Name": "Horloge de petites intervales", + "Entities.gmod_track_clock_interval.Name": " Horloge des Grandes Intervales (intervales)", + "Entities.gmod_track_switch.Name": "Aiguillage", + "Entities.gmod_track_powermeter.Name": "Voltmètre", + "Entities.gmod_track_controller.Name": "Controleur de rails", + "Entities.gmod_track_udochka.Name": "Connecteur électrique", + "Entities.gmod_train_spawner.Name": "Outil d'apparition de trains" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/fr_buttons_717.lua b/lua/metrostroi_data/languages_/_unfinished/fr_buttons_717.lua new file mode 100644 index 0000000..21c7be7 --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/fr_buttons_717.lua @@ -0,0 +1,297 @@ +return [[ +{ + "Lang": "fr", + "Name": "french", + + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.VUD2Toggle": "VUD2: Contrôle des portes(fermer les portes)", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.VDLSet": "VDL: Portes gauches", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.R_Program2Helper": "Programme 2", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.R_Program1Helper": "Programme 1", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:RC1Toggle": "RC-1: ARS déconnecter les circuits ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:VBToggle": "VB: Batterie on/off", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:UOSToggle": "RC-UOS: Limiteur de vitesse", + "Entities.gmod_subway_81-717_mvm.Buttons.Wiper.WiperToggle": "Essuie-glace", + "Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle": "Valve pilote (déconnecter la valve)", + "Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveBLDisconnectToggle": "Déconnecter la valve de freinage", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_UNchToggle": "UNCh: Amplifieur de basses fréquences", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_ZSToggle": "ZS: Activer le son des wagons", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_GToggle": "Loudspeaker: Activer le son dans la cabine", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_RadioToggle": "Radioinformator: Annonceur (en dev)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_Program1Set": "Programme 1", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_Program2Set": "Programme 2", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.2:KVTSet": "KB: Bouton d'attention", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VZ1Set": "VZ1: Valve pneumatique #1", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VUD1Toggle": "VUD: Contrôle des portes (fermer les portes)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLSet": "KDL: Ouvrir les portes gauche", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLKToggle": "KDL Couvre-bouton", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLRSet": "KDL: Ouvrir les portes gauche ", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLRKToggle": "KDL Couvre-Bouton", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.DoorSelectToggle": "Sélectionner le côté d'ouverture des portes", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KRZDSet": "RZD: Fermetures de portes d'urgence", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_VPRToggle": "VPR: Activer la radio", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VozvratRPSet": "Remettre a zéro le relai de l'overload ", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.GreenRPLight": "RP: Lampe vertr de l'overload (évite de surcharger les moteurs", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.AVULight": "AVU: Automatic control disabler active", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.LKVPLight": "LKVP: Controle du Haut Voltage ", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.SPLight": "LSP:Prévention incendie (rhéostat en surchauffe)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ConverterProtectionSet": "Protection du converteur", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KSNSet": "KSN: Bouton affichant l\"erreur", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.DIPoffSet": "Sonette", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ARSToggle": "ARS: Régulation automatique de la vitesse", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ALSToggle": "ALS: Signalement de la locomotive automatique", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.OtklAVUToggle": "Désactiver le contrôle automatique, désactiver les relais (erreur de l'AVU)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.TormATToggle": "(pour rester en place) Frein d'urgence", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_1Toggle": "Lumière des wagons", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_2Toggle": "Lumières de la cabine", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_3Toggle": "Lumières du panneau", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ALSFreqToggle": "Decoder: Fréquence de l'ALS 1/5 ou 2/6", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ParkingBrakeSignToggle": "Panneau \"ENLEVER LE FREIN DE PARKING\"", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.ParkingBrakeToggle": "Frein de parking", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.DriverValveTLDisconnectToggle": "Déconnecter la valve(train line)", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA1Set": "IGLA: Premier Bouton", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA2Set": "IGLA: Deuxième Bouton", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA3Set": "IGLA: Troisième bouton", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA4Set": "IGLA: Quatrième bouton", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.!Voltage": "Contrôle du voltage des circuits", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.VMKToggle": "Démarrer le compresseur du moteur", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.BPSNonToggle": "BPSN: Envoyer de l'énergie vers les wagons", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.RezMKSet": "Démarrage d'urgence du compresseur du moteur", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.ARS13Set": "ARS 13V: (ARS) Vérifier la tension stable de l'ars", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!RouteNum": "М â„–\nNuméro de route", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!PathNum": "П â„–\n° de chemin", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchTime": "ВРЕМЯ ХОДÐ\nTemps total du parcours", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchInterval": "ИÐТ\nInterale entre les trains", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchHour": "ЧÐС\nHeure", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchMin": "МИÐ\nMinute", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchSec": "СЕК\nSeconde", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchArrival": "Temps d'arrivée", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchStations": "Nom de la station", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!Speedometer": "Compteur de vitesse", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLSN": "LSN: Lumière indiquant une erreur ( les circuits d'alimentation n'ont pas réussis a s'assembler)", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampRP": "RP: Lumière rouge indiquant un overload des relais ( les circuits d'alimentation n'ont pas réussis a s'assembler )", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLHRK": "LhRK: Lumière de contrôle des rhéostats", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLKT": "LKT: ARS Indicateur de freinage ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLKVD": "LKVD: Indicateur de l'état des moteurs ARS (off) ", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLKVC": "LKVC: Haut voltage non disponible", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARSOch": "OCh: Aucune fréquence ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS0": "0: ARS Signe stop", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS40": "Limite de vitesse 40 km/h", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS60": "Limite de vitesse 60 km/h", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS70": "Limite de vitesse de 70 km/h", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS80": "Limite de vitesse 80 km/h", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLSD1": "LSD: Lumière d'état des portes (les portes sont fermées)", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLSD2": "LSD: Lumière d'état des portes (les portes sont fermées ", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLST": "LST: Freins engagés", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLVD": "LVD: Moteurs engagés", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLN": "LN: Signal de direction", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLRS": "LRS: Lumière d'égalité des vitesses (la vitesse du prochain segment est égale ou supérieure que celle de maintenant)", + "Entities.gmod_subway_81-717_mvm.Buttons.PneumaticPanels.!CylinderPressure": "Pression du cylindre des freins", + "Entities.gmod_subway_81-717_mvm.Buttons.PneumaticPanels.!LinePressure": "Pression des valves pneumatiques (rouge: freinage, noir: ligne du train)", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.RC1Toggle": "RC-1: Déconnecter les circuits ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.UOSToggle": "RC-UOS: Limitations de vitesses", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.VBToggle": "VB: Batterie on/off", + "Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Valve d'isolation (Brake line) ", + "Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Valve d'isolation (Train line)", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPMenuSet": "ASNP: Menu", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPUpSet": "ASNP: haut", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPDownSet": "ASNP: bas", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPOnToggle": "ASNP: Allumer", + "Entities.gmod_subway_81-717_mvm.Buttons.RearDoor.RearDoor": "Porte arrière", + "Entities.gmod_subway_81-717_mvm.Buttons.Meters.!TotalVoltmeter": "Voltmètre de haut voltage (kV)", + "Entities.gmod_subway_81-717_mvm.Buttons.Meters.!TotalAmpermeter": "Ampèremètre (A)", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A61Toggle": "A61 Train wire control 6 ", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A55Toggle": "A55 Train wire 10AS control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A54Toggle": "A54 Train wire 10AK control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A56Toggle": "A56 Allumer la batterie pour les circuits", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A27Toggle": "A27 Turn on DIP and lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A21Toggle": "A21 Door control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A10Toggle": "A10 Motor-compressor control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A53Toggle": "A53 KVC power supply", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A43Toggle": "A43 ARS 12V power supply", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A45Toggle": "A45 ARS train wire 10AU", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A42Toggle": "A42 ARS 75V power supply", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A41Toggle": "A41 ARS braking", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.VUToggle": "VU Train control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A64Toggle": "A64 Cabin lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A63Toggle": "A63 IGLA/BIS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A50Toggle": "A50 Turn on DIP and lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A51Toggle": "A51 Turn off DIP and lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A23Toggle": "A23 Emergency motor-compressor turn on", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A14Toggle": "A14 Train wire 18", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A75Toggle": "A75 Cabin heating", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A1Toggle": "A1 X-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A2Toggle": "A2 X-2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A3Toggle": "A3 X-3", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A17Toggle": "A17 Reset overload relay", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A62Toggle": "A62 Radio communications", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A29Toggle": "A29 Radio broadcasting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A5Toggle": "A5 Interim wagon", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A6Toggle": "A6 T-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A8Toggle": "A8 Pneumatic valves #1, #2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A20Toggle": "A20 Drive/brake circuit control, train wire 20", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A25Toggle": "A25 Manual electric braking", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A22Toggle": "A22 Turn on KK", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A30Toggle": "A30 Rheostat controller motor power", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A39Toggle": "A39 Emergency control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A44Toggle": "A44 Emergency train control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A80Toggle": "A80 Power circuit mode switch motor power", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A65Toggle": "A65 Interior lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.L_5Toggle": "Ð49 Emergency lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A24Toggle": "A24 Battery charging", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A32Toggle": "A32 Open right doors", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A31Toggle": "A31 Open left doors", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A16Toggle": "A16 Close doors", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A13Toggle": "A13 Door alarm", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A12Toggle": "A12 Emergency door close", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A7Toggle": "A7 Red lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A9Toggle": "A9 Red lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A46Toggle": "A46 White lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A47Toggle": "A47 White lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor.PassengerDoor": "Passenger door", + "Entities.gmod_subway_81-717_mvm.Buttons.GV.GVToggle": " switcheur HV", + "Entities.gmod_subway_81-717_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle": "Frein d'urgence", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.PrevSign": "Panneau précédent", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.NextSign": "Panneau Suivant", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num2P": "Route: Augmenter le second nombre", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num2M": "Route: Descendre le second nombre", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num1P": "Route: Augmenter le premier nombre", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num1M": "Route: Descendre le premier nombre", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.L_4Toggle": "Phares", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VUSToggle": "VUS: Phares puissants", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VAHToggle": "VAH: Mode de conduite d'urgence ", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VADToggle": "VAD: Fermeture d'urgence des portes (erreur du relai KD)", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KRPSet": "KRP: Bouton de démarrage d'urgence", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KAHSet": "Bouton de conduite d'urgence", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KAHKToggle": "KAH Couvre bouton", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KUP": "Activer le chauffage", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KDPSet": "KDP: Ouvrir les portes droites", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KDPKToggle": "KDP Couvre bouton", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.PN": "Contrôle des freins pneumatiques", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A61Toggle": "A61 Train wire 6 control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A55Toggle": "A55 Train wire 10AS control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A54Toggle": "A54 Train wire 10AK control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A56Toggle": "A56 Turn on battery power to control circuits", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A27Toggle": "A27 Turn on DIP and lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A21Toggle": "A21 Door control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A10Toggle": "A10 Motor-compressor control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A53Toggle": "A53 KVC power supply", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A43Toggle": "A43 ARS 12V power supply", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A45Toggle": "A45 ARS train wire 10AU", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A42Toggle": "A42 ARS 75V power supply", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A41Toggle": "A41 ARS braking", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:VUToggle": "Contrôle du train (VU)", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A64Toggle": "A64 Cabin lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A63Toggle": "A63 IGLA/BIS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A50Toggle": "A50 Turn on DIP and lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A51Toggle": "A51 Turn off DIP and lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A23Toggle": "A23 Emergency motor-compressor turn on", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A14Toggle": "A14 Train wire 18", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A75Toggle": "A75 Cabin heating", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A1Toggle": "A1 X-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A2Toggle": "A2 X-2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A3Toggle": "A3 X-3", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A17Toggle": "A17 Reset overload relay", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A62Toggle": "A62 Radio communications", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A29Toggle": "A29 Radio broadcasting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A5Toggle": "A5 Interim wagon", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A6Toggle": "A6 T-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A8Toggle": "A8 Pneumatic valves #1, #2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A20Toggle": "A20 Drive/brake circuit control, train wire 20", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A25Toggle": "A25 Manual electric braking", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A22Toggle": "A22 Turn on KK", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A30Toggle": "A30 Rheostat controller motor power", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A39Toggle": "A39 Emergency control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A44Toggle": "A44 Emergency train control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A80Toggle": "A80 Power circuit mode switch motor power", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A65Toggle": "A65 Interior lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:L_5Toggle": "Ð49 Emergency lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A24Toggle": "A24 Battery charging", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A32Toggle": "A32 Open right doors", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A31Toggle": "A31 Open left doors", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A16Toggle": "A16 Close doors", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A13Toggle": "A13 Door alarm", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A12Toggle": "A12 Emergency door close", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A7Toggle": "A7 Red lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A9Toggle": "A9 Red lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A46Toggle": "A46 White lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A47Toggle": "A47 White lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!Speedometer": "Speed indicator", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LSD": "LSD: Door state light (doors are closed)", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LOCh": "NCh: Compteur", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L0": "0: ARS signal stop", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LRS": "LRS: Lumière d'égalité des vitesses (la vitesse du prochain segment est égale ou supérieure que celle de maintenant)", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L40": "Limite de vitesse 40km/h", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L60": "Limite de vitesse 60 km/h", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L80": "Limite de vitesse 80 km/h", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L70": "Limite de vitesse 60 km/h", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LRK": "RK: Lampe de contrôle du rhéostat", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LEKK": "", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LPU": "", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LKVD": "LKVD: Indicateur de l'arret des moteurs ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LKT": "LKT: Indicateur de freinage ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LRP": "RP: Lumière rouge d'overload des relais, les circuits n'ont pas réussis a s'assembler", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LKVC": "LKVC: Haut voltage non disponible", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LVD": "LVD: Moteurs engagés", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LST": "LST: Freins engagés", + "Entities.gmod_subway_81-717_mvm.Buttons.CabinDoor.CabinDoor": "Porte de cabine", + "Entities.gmod_subway_81-717_mvm.Buttons.Reverser.KVReverserDown": "Marche arrière", + "Entities.gmod_subway_81-717_mvm.Buttons.Reverser.KVReverserUp": "Marche avant", + "Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor1.PassengerDoor": " Porte passager", + "Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAToggle": "UAVA:Désactivateur de l'arrêt automatique lors du dépassement des feux rouges", + "Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAContactSet": "UAVA: Réinitialiser les contacts de l'UAVA", + "Entities.gmod_subway_81-717_mvm.Buttons.EPKDisconnect.EPKToggle": " Valve de déconnection de l'EPV", + "Entities.gmod_subway_81-717_mvm.Buttons.Help.ShowHelp": "Afficher de l'aide concernant la conduite du train", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake2.1:ParkingBrakeToggle": "Parking brake Frein de parking", + "Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": " Valve d'isolation des freins", + "Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Valve d'isolation du train", + "Entities.gmod_subway_81-717_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Désactiver le distributeur d'air", + + "Entities.gmod_subway_81-714_mvm.Buttons.GV.GVToggle": "Switcheur HV", + "Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Valve d'isolation des freins", + "Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Valve d'isolation du train", + "Entities.gmod_subway_81-714_mvm.Buttons.RearDoor.RearDoor": "Porte arrière", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.DriverValveBLDisconnectToggle": " Valve de déconnection des freins", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.DriverValveTLDisconnectToggle": " Valve de déconnection du (train line)", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A65Toggle": "A65 Interior lighting", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A56Toggle": "A56 Turn on battery power to control circuits", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A63Toggle": "A63 IGLA/BIS", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A10Toggle": "A10 Motor-compressor control", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A30Toggle": "A30 Rheostat controller motor power", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A80Toggle": "A80 Power circuit mode switch motor power", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": " Valve d'isolation de la ligne de frein", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": " Valve d'isolation de la ligne de train", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.ParkingBrakeToggle": "Frein de parking", + "Entities.gmod_subway_81-714_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Désactiver le distributeur d'air", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontDoor.FrontDoor": "Porte de devant", + "Entities.gmod_subway_81-714_mvm.Buttons.Battery.VBToggle": "VB: Batterie on/off", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A54Toggle": "A54 Train wire 10AK control", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A27Toggle": "A27 Turn on DIP and lighting", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A24Toggle": "A24 Battery charging", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A53Toggle": "A53 KVC power supply", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A13Toggle": "A13 Door alarm", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A32Toggle": "A32 Open right doors", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A31Toggle": "A31 Open left doors", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A16Toggle": "A16 Close doors", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A12Toggle": "A12 Emergency door close", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A50Toggle": "A50 Turn on DIP and lighting", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A51Toggle": "A51 Turn off DIP and lighting", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A1Toggle": "A1 X-1", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.KRPSet": "START: Bouton de démarrage d'urgence", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.VozvratRPSet": "Remettre a zéro le relai overload", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.RezMKSet": " Démarrage d'urgence des compresseurs du moteur", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.VMKToggle": "Allumer le compresseur du moteur", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.BPSNonToggle": "BPSN: Envoyer de l'électricité dans le train", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A2Toggle": "A2 X-2", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A3Toggle": "A3 X-3", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A17Toggle": "A17 Reset overload relay", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A5Toggle": "A5 ", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A6Toggle": "A6 T-1", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A8Toggle": "A8 Pneumatic valves #1, #2", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A20Toggle": "A20 Drive/brake circuit control, train wire 20", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A25Toggle": "A25 Manual electric braking", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A22Toggle": "A22 Turn on KK", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A23Toggle": "A23 Emergency motor-compressor turn on", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A39Toggle": "A39 Emergency control", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A14Toggle": "A14 Train wire 18" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/fr_spawner.lua b/lua/metrostroi_data/languages_/_unfinished/fr_spawner.lua new file mode 100644 index 0000000..e411518 --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/fr_spawner.lua @@ -0,0 +1,117 @@ +return [[ +{ + "Lang": "fr", + "Name": "French", + + "Spawner.Title": "Outil d'apparition de trains", + "Spawner.Trains1": "Trains", + "Spawner.Trains2": "Maximum pour toi", + "Spawner.WagNum": "Wagons", + "Spawner.AutoCouple": "Coupler automatiquement les wagons", + + "Entities.gmod_subway_81-717_mvm.Spawner.Texture.Name": "Apparence", + "Entities.gmod_subway_81-717_mvm.Spawner.PassTexture.Name": "Apparence intérieure", + "Entities.gmod_subway_81-717_mvm.Spawner.CabTexture.Name": "Apparence de la cabine", + "Entities.gmod_subway_81-717_mvm.Spawner.Announcer.Name": "Annonceur", + "Entities.gmod_subway_81-717_mvm.Spawner.Lighter.Name": "Lighter", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.Name": "Type d'interface ARS", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.1": "Standard(lampes carrées)", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.2": "Standard(lampes rondes)", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.3": "Kiev/SPB", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.4": "Ancien ARS(compteur à aiguilles)", + "Entities.gmod_subway_81-717_mvm.Spawner.Cran.Name": "Type de levier de frein", + "Entities.gmod_subway_81-717_mvm.Spawner.Cran.1": "334", + "Entities.gmod_subway_81-717_mvm.Spawner.Cran.2": "013", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.Name": "Type de pare-chocs", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.1": "2-2", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.2": "2-2-2", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.3": "1-4-1 avant 1", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.4": "1-4-1 avant 2", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.5": "1-1", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.6": "Rétro", + "Entities.gmod_subway_81-717_mvm.Spawner.LED.Name": "LED", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.Name": "Type de BPSN", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.1": "Ancien son ton haut ", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.2": " Ancien son ton moyen ", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.3": "Standard(de SPB)", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.4": "Standard(TKL)", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.5": "Standard", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.6": "Kiev", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.7": "Ancien", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.8": "Standard 2", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.9": "Standard 3", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.10": "Aucun son(BPN-115)", + "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.Name": "Son du controlleur ", + "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.1": "Type 1", + "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.2": "Type 2", + "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.3": "Type 3", + "Entities.gmod_subway_81-717_mvm.Spawner.NewKV.Name": "Nouveau modèle de controlleur", + "Entities.gmod_subway_81-717_mvm.Spawner.HornType.Name": "klaxon SPB ", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.Name": "Sonette", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.1": "Ancien", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.2": "Standard, ton bas", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.3": "Standard, ton haut", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.4": "Standard intermittent et ton bas", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.5": "Standard intermittent et ton haut", + "Entities.gmod_subway_81-717_mvm.Spawner.NM.Name": "Valve(train line)", + "Entities.gmod_subway_81-717_mvm.Spawner.Battery.Name": "Batterie", + "Entities.gmod_subway_81-717_mvm.Spawner.Switches.Name": "Activateur de circuit(ON)", + "Entities.gmod_subway_81-717_mvm.Spawner.SwitchesR.Name": "Activateur de circuit(au hasard)", + "Entities.gmod_subway_81-717_mvm.Spawner.DoorsL.Name": "Portes Gauches Ouvertes", + "Entities.gmod_subway_81-717_mvm.Spawner.DoorsR.Name": " Portes Droite Ouvertes ", + "Entities.gmod_subway_81-717_mvm.Spawner.GV.Name": "Switcheur HV", + "Entities.gmod_subway_81-717_mvm.Spawner.PB.Name": "Frein de Parking", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.Name": "Types de lampes(Compteurs)", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.1": "Horizontal", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.2": "Vertical", + "Entities.gmod_subway_81-717_mvm.Spawner.MVM.Name": "Signe MVM", + "Entities.gmod_subway_81-717_mvm.Spawner.HandRail.Name": "Handrails type", + "Entities.gmod_subway_81-717_mvm.Spawner.HandRail.1": "Vieux", + "Entities.gmod_subway_81-717_mvm.Spawner.HandRail.2": "Neuf", + "Entities.gmod_subway_81-717_mvm.Spawner.SeatType.Name": "Type de sièges", + "Entities.gmod_subway_81-717_mvm.Spawner.SeatType.1": "Vieux", + "Entities.gmod_subway_81-717_mvm.Spawner.SeatType.2": "Neuf", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.Name": "Type de Lampes(Intérieure)", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.1": "Type 1", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.2": "Type 2", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.3": "Type 3", + "Entities.gmod_subway_81-717_mvm.Spawner.Breakers.Name": "Activateur de circuits droite", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.Name": "Type de klaxon", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.1": "Type 1", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.2": "Type 2", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.3": "Type 3", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.4": "Aucun", + + "Entities.gmod_subway_81-720.Spawner.Texture.Name": "Apparence", + "Entities.gmod_subway_81-720.Spawner.PassTexture.Name": "Apparence intérieure", + "Entities.gmod_subway_81-720.Spawner.CabTexture.Name": "Apparence de la cabine", + "Entities.gmod_subway_81-720.Spawner.Announcer.Name": "Annonceur", + "Entities.gmod_subway_81-720.Spawner.Scheme.Name": "Schéma de la ligne", + "Entities.gmod_subway_81-720.Spawner.PassSchemesInvert.Name": "Inverser le schéma", + "Entities.gmod_subway_81-720.Spawner.NM.Name": "Valve(Train line)", + "Entities.gmod_subway_81-720.Spawner.Battery.Name": "Batterie", + "Entities.gmod_subway_81-720.Spawner.BRU.Name": "Switcheur HV", + "Entities.gmod_subway_81-720.Spawner.PVZR.Name": "Activateurs de circuit du train(random)", + "Entities.gmod_subway_81-720.Spawner.PPZ.Name": "Activer tous les activateurs de circuit ", + "Entities.gmod_subway_81-720.Spawner.PPZDepot.Name": "Désactiver tous les activateurs", + "Entities.gmod_subway_81-720.Spawner.PPZR.Name": "Activateurs de circuits aléatoires(wagon)", + "Entities.gmod_subway_81-720.Spawner.DoorsL.Name": "Ouvrir les portes gauche", + "Entities.gmod_subway_81-720.Spawner.DoorsR.Name": "Ouvrir les portes droite", + + "Entities.gmod_subway_81-722.Spawner.Texture.Name": "Apparence", + "Entities.gmod_subway_81-722.Spawner.PassTexture.Name": "Apparence intérieure", + "Entities.gmod_subway_81-722.Spawner.CabTexture.Name": "Apparence de la cabine", + "Entities.gmod_subway_81-722.Spawner.Announcer.Name": "Annonceur", + "Entities.gmod_subway_81-722.Spawner.Scheme.Name": "Schéma de la ligne", + "Entities.gmod_subway_81-722.Spawner.SarmatInvert.Name": "Inverser le schéma", + "Entities.gmod_subway_81-722.Spawner.NM.Name": "Valve(Train line)", + "Entities.gmod_subway_81-722.Spawner.Battery.Name": "Batterie", + "Entities.gmod_subway_81-722.Spawner.Switches.Name": "Activer tous les activateurs de circuits", + "Entities.gmod_subway_81-722.Spawner.SwitchesR.Name": "Activateur de circuit (random)", + "Entities.gmod_subway_81-722.Spawner.DoorsL.Name": "Ouvrir les portes gauches", + "Entities.gmod_subway_81-722.Spawner.DoorsR.Name": "Ouvrir les portes droites", + + "Spawner.Close": "Fermer", + "Spawner.Spawn": "Fini !" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/kr_base.lua b/lua/metrostroi_data/languages_/_unfinished/kr_base.lua new file mode 100644 index 0000000..bd88643 --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/kr_base.lua @@ -0,0 +1,52 @@ +return [[ +{ + "Lang": "kr", + "Name": "Korean", + "Panel.Admin": "관리ìž", + "Panel.Client": "사용ìž", + "Panel.DrawDebugInfo": "디버깅 ì •ë³´ 표시", + "Panel.DisableCamAccel": "ì‹œì  í”들림 ë„기", + "Panel.DisableHoverText": "ì£¼ì„ í…스트 ë„기", + + "Entities.gmod_subway_base.Name": "Subway base", + "Entities.gmod_subway_81-703.Name": "E", + "Entities.gmod_subway_81-703_2.Name": "E (중간 ê°ì°¨)", + "Entities.gmod_subway_81-717_mvm.Name": "81-717(MVM)", + "Entities.gmod_subway_81-717_lvz.Name": "81-717(LVZ)", + "Entities.gmod_subway_81-714_mvm.Name": "81-714(MVM)", + "Entities.gmod_subway_81-714_lvz.Name": "81-714(LVZ)", + "Entities.gmod_subway_81-7036.Name": "81-7036 (ìž‘ë™ ì•ˆí•¨)", + "Entities.gmod_subway_81-7037.Name": "81-7037 (ìž‘ë™ ì•ˆí•¨)", + "Entities.gmod_subway_81-720.Name": "81-720 (ì„ ë‘ì°¨)", + "Entities.gmod_subway_81-721.Name": "81-721 (중간 ê°ì°¨)", + "Entities.gmod_subway_81-722.Name": "81-722 (ì„ ë‘ì°¨)", + "Entities.gmod_subway_81-723.Name": "81-723 (중간 ë™ë ¥ ê°ì°¨)", + "Entities.gmod_subway_81-724.Name": "81-724 (중간 무ë™ë ¥ ê°ì°¨)", + "Entities.gmod_subway_e.Name": "E", + "Entities.gmod_subway_em.Name": "Em", + "Entities.gmod_subway_ema.Name": "Ema", + "Entities.gmod_subway_ezh.Name": "Ezh", + "Entities.gmod_subway_ezh1.Name": "Ezh1", + "Entities.gmod_subway_em508.Name": "Em-508", + "Entities.gmod_subway_em508_int.Name": "Em-508 (중간차)", + "Entities.gmod_subway_ezh3.Name": "Ezh3", + "Entities.gmod_subway_ezh3ru1.Name": "Ezh3 RU1", + "Entities.gmod_subway_ema508t.Name": "Em-508t", + "Entities.gmod_subway_tatra_t3.Name": "Tatra T3", + "Entities.gmod_subway_ai.Name": "AI 차량", + + "Entities.gmod_train_bogey.Name": "대차", + "Entities.gmod_train_couple.Name": "연결기", + + "Entities.gmod_track_pui.Name": "PUI 시계", + "Entities.gmod_track_mus_elektronika7.Name": "ì „ìž ì‹œê³„", + "Entities.gmod_mus_clock_analog.Name": "아날로그 시계", + "Entities.gmod_track_clock_time.Name": "대형 배차간격 시계(시간)", + "Entities.gmod_track_clock_small.Name": "소형 배차간격 시계", + "Entities.gmod_track_clock_interval.Name": "대형 배차간격 시계(배차간격)", + "Entities.gmod_track_switch.Name": "선로 분기기", + "Entities.gmod_track_powermeter.Name": "전력계", + "Entities.gmod_track_udochka.Name": "급전 커넥터", + "Entities.gmod_train_spawner.Name": "ì—´ì°¨ 스í¬ë„ˆ" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/kr_buttons_717.lua b/lua/metrostroi_data/languages_/_unfinished/kr_buttons_717.lua new file mode 100644 index 0000000..9c6619f --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/kr_buttons_717.lua @@ -0,0 +1,297 @@ +return [[ +{ + "Lang": "kr", + "Name": "Korean", + + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.VUD2Toggle": "VUD2: 출입문 제어 스위치 (출입문 닫힘)", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.VDLSet": "VDL: 좌측 출입문 열림", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.R_Program2Helper": "안내방송 2", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.R_Program1Helper": "안내방송 1", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:RC1Toggle": "RC-1: ARS 회로 차단", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:VBToggle": "VB: 배터리 투입/차단", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:UOSToggle": "RC-UOS: ì†ë„ 제한 장치", + "Entities.gmod_subway_81-717_mvm.Buttons.Wiper.WiperToggle": "와ì´í¼", + "Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle": "ì§í†µê´€ 차단 밸브", + "Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveBLDisconnectToggle": "ì œë™ê´€ 차단 밸브", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_UNchToggle": "UNCh: 저주파 ì¦í­ê¸°", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_ZSToggle": "ZS: ê°ì‹¤ ë‚´ë¶€ 방송 재ìƒ", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_GToggle": "스피커: 운전실 ë‚´ë¶€ 방송 재ìƒ", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_RadioToggle": "안내방송기 ì „ì› (내장)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_Program1Set": "안내방송 1", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_Program2Set": "안내방송 2", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.2:KVTSet": "KB: í™•ì¸ ë²„íŠ¼", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VZ1Set": "VZ1: 공압 밸브 #1", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VUD1Toggle": "VUD: 출입문 제어 스위치 (출입문 닫힘)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLSet": "KDL: 좌측 출입문 열림", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLKToggle": "KDL 버튼 커버", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLRSet": "KDL: 좌측 출입문 열림", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLRKToggle": "KDL 버튼 커버", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.DoorSelectToggle": "출입문 ë°©í–¥ ì„ íƒ", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KRZDSet": "RZD: 출입문 ê°•ì œ 닫힘", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_VPRToggle": "VPR: 무선국 활성화", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VozvratRPSet": "과전류 계전기 리셋", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.GreenRPLight": "RP: 과전류 계전기 확ì¸ë“±(녹색) (추진장치 과전류 ë°©ì§€)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.AVULight": "AVU: ìžë™ 제어 해제기 활성화", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.LKVPLight": "LKVP: ê³ ì „ì•• 변류기 제어", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.SPLight": "LSP: 화재 경고 (가변 저항 과열)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ConverterProtectionSet": "변류기 보호", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KSNSet": "KSN: 고장 í™•ì¸ ë²„íŠ¼", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.DIPoffSet": "부저", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ARSToggle": "ARS: ìžë™ ì†ë„ 제한", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ALSToggle": "ALS: ìžë™ 차량 신호 제어", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.OtklAVUToggle": "ìžë™ 제어 해제기 비활성화 (AVU 고장)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.TormATToggle": "(기능 ì—†ìŒ) ë¹„ìƒ ì œë™ íˆ¬ìž…", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_1Toggle": "ê°ì‹¤ 조명", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_2Toggle": "ìš´ì „ì„ ì¡°ëª…", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_3Toggle": "운전대 조명", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ALSFreqToggle": "디코ë”: ALS 주파수 절환 1/5 ë˜ëŠ” 2/6", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ParkingBrakeSignToggle": "표지 \"주차 ì œë™ ì™„í•´\"", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.ParkingBrakeToggle": "주차 ì œë™", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.DriverValveTLDisconnectToggle": "주 공기관 차단 밸브", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA1Set": "IGLA: 버튼 1", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA2Set": "IGLA: 버튼 2", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA3Set": "IGLA: 버튼 3", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA4Set": "IGLA: 버튼 4", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.!Voltage": "제어 회로 ì „ì••", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.VMKToggle": "공기 압축기 기ë™", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.BPSNonToggle": "BPSN: 차량 ì „ì› ê³µê¸‰ 장치", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.RezMKSet": "공기 압축기 ê°•ì œ 기ë™", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.ARS13Set": "ARS 13V: ARS ì „ì•• 안정 검사", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!RouteNum": "М â„–\n열번", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!PathNum": "П â„–\n경로 번호", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchTime": "ВРЕМЯ ХОДÐ\nì´ ìš´í–‰ 시간", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchInterval": "ИÐТ\në°°ì°¨ 간격", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchHour": "ЧÐС\n시", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchMin": "МИÐ\në¶„", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchSec": "СЕК\nì´ˆ", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchArrival": "ë„ì°© 시ê°", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchStations": "역명", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!Speedometer": "ì†ë„계", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLSN": "LSN: 고장 표시등 (ì „ì› íšŒë¡œ ì—°ê²° 실패)", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampRP": "RP: 과전류 계전기 확ì¸ë“± (ì ìƒ‰) (ì „ì› íšŒë¡œ ì—°ê²° 실패)", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLHRK": "LhRK: 가변저항 제어기 ë™ìž‘ 확ì¸ë“±", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLKT": "LKT: ARS ì œë™ í‘œì‹œë“±", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLKVD": "LKVD: ARS 추진장치 ì •ì§€ 표시등", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLKVC": "LKVC: ê³ ì „ì•• ì§‘ì „ 불가", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARSOch": "OCh: ARS 신호 ì—†ìŒ", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS0": "0: ARS ì •ì§€ 신호", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS40": "ì†ë„ 제한 40 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS60": "ì†ë„ 제한 60 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS70": "ì†ë„ 제한 70 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS80": "ì†ë„ 제한 80 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLSD1": "LSD: 출입문 닫힘 확ì¸ë“±", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLSD2": "LSD: 출입문 닫힘 확ì¸ë“±", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLST": "LST: ì œë™ ìž‘ë™", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLVD": "LVD: 추진장치 ìž‘ë™", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLN": "LN: ë°©í–¥ 신호", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLRS": "LRS: ì†ë„ 유지등", + "Entities.gmod_subway_81-717_mvm.Buttons.PneumaticPanels.!CylinderPressure": "ì œë™í†µ ì••ë ¥", + "Entities.gmod_subway_81-717_mvm.Buttons.PneumaticPanels.!LinePressure": "공기관 ì••ë ¥ (ì ìƒ‰: ì œë™ê´€ ì••ë ¥, í‘색: 주 공기관 ì••ë ¥)", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.RC1Toggle": "RC-1: ARS 회로 차단", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.UOSToggle": "RC-UOS: ì†ë„ 제한 장치", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.VBToggle": "VB: 배터리 투입/차단", + "Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "ì œë™ê´€ í•´ë°© 밸브", + "Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "주 공기관 í•´ë°© 밸브", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPMenuSet": "ASNP: 메뉴", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPUpSet": "ASNP: 위", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPDownSet": "ASNP: 아래", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPOnToggle": "ASNP: 켜기", + "Entities.gmod_subway_81-717_mvm.Buttons.RearDoor.RearDoor": "관통문(ë’¤)", + "Entities.gmod_subway_81-717_mvm.Buttons.Meters.!TotalVoltmeter": "HV 전압계 (kV)", + "Entities.gmod_subway_81-717_mvm.Buttons.Meters.!TotalAmpermeter": "ì´ ì „ë¥˜ê³„ (A)", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A61Toggle": "A61 차량 회로 6 제어", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A55Toggle": "A55 차량 회로 10AS 제어", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A54Toggle": "A54 차량 회로 10AK 제어", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A56Toggle": "A56 제어 회로용 배터리 ì „ì› íˆ¬ìž…", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A27Toggle": "A27 DIP 기ë™/ì ë“±", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A21Toggle": "A21 출입문 제어", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A10Toggle": "A10 공기 압축기 제어", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A53Toggle": "A53 KVC ì „ì› ê³µê¸‰", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A43Toggle": "A43 ARS 12V ì „ì› ê³µê¸‰", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A45Toggle": "A45 ARS 차량 회로 10AU", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A42Toggle": "A42 ARS 75V ì „ì› ê³µê¸‰", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A41Toggle": "A41 ARS ì œë™", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.VUToggle": "VU 차량 제어", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A64Toggle": "A64 운전실 조명", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A63Toggle": "A63 IGLA/BIS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A50Toggle": "A50 부수 ê°ì°¨ DIP 기ë™/ì ë“±", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A51Toggle": "A51 DIP 차단/소등", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A23Toggle": "A23 공기 압축기 ê°•ì œ 기ë™", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A14Toggle": "A14 차량 회로 18", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A75Toggle": "A75 운전실 난방", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A1Toggle": "A1 X-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A2Toggle": "A2 X-2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A3Toggle": "A3 X-3", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A17Toggle": "A17 과전류 계전기 리셋", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A62Toggle": "A62 무선 통신", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A29Toggle": "A29 무선 방송", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A5Toggle": "A5 부수 ê°ì°¨", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A6Toggle": "A6 T-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A8Toggle": "A8 공압 밸브 #1, #2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A20Toggle": "A20 ìš´ì „/ì œë™ íšŒë¡œ 제어, 차량 회로 20", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A25Toggle": "A25 ìˆ˜ë™ ì „ê¸° ì œë™", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A22Toggle": "A22 부수 ê°ì°¨ 공기 압축기 접촉기 제어", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A30Toggle": "A30 가변 저항 제어기 모터 ì „ì›", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A39Toggle": "A39 ë¹„ìƒ ì œì–´", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A44Toggle": "A44 차량 ë¹„ìƒ ì œì–´", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A80Toggle": "A80 ì „ì› íšŒë¡œ 스위치 모터 ì „ì›", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A65Toggle": "A65 실내 조명", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.L_5Toggle": "Ð49 비ìƒë“±", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A24Toggle": "A24 배터리 ì¶©ì „", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A32Toggle": "A32 우측 출입문 열림", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A31Toggle": "A31 좌측 출입문 열림", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A16Toggle": "A16 출입문 닫힘", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A13Toggle": "A13 출입문 알람", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A12Toggle": "A12 출입문 ê°•ì œ 닫힘", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A7Toggle": "A7 ì ìƒ‰ë“±", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A9Toggle": "A9 ì ìƒ‰ë“±", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A46Toggle": "A46 백색등", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A47Toggle": "A47 백색등", + "Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor.PassengerDoor": "ê°ì‹¤ë¬¸", + "Entities.gmod_subway_81-717_mvm.Buttons.GV.GVToggle": "ê³ ì „ì•• 스위치", + "Entities.gmod_subway_81-717_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle": "ë¹„ìƒ ì œë™", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.PrevSign": "ì´ì „ 방향막", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.NextSign": "ë‹¤ìŒ ë°©í–¥ë§‰", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num2P": "열번: ì‹­ì˜ ìžë¦¬ ì¦ê°€", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num2M": "열번: ì‹­ì˜ ìžë¦¬ ê°ì†Œ", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num1P": "열번: ì¼ì˜ ìžë¦¬ ì¦ê°€", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num1M": "열번: ì¼ì˜ ìžë¦¬ ê°ì†Œ", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.L_4Toggle": "헤드ë¼ì´ë“œ ì ë“±", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VUSToggle": "VUS: 헤드ë¼ì´íЏ ìƒí–¥", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VAHToggle": "VAH: ë¹„ìƒ ìš´ì „ 모드 (RPB 계전기 고장)", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VADToggle": "VAD: 출입문 ê°•ì œ 닫힘 무시 (KD 계전기 고장)", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KRPSet": "KRP: ë¹„ìƒ ê¸°ë™ ë²„íŠ¼", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KAHSet": "ë¹„ìƒ ìš´ì „ 버튼", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KAHKToggle": "KAH 버튼 커버", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KUP": "운전실 난방 ìž‘ë™", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KDPSet": "KDP: 우측 출입문 열림", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KDPKToggle": "KDP 버튼 커버", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.PN": "공압 ì œë™ ì œì–´", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A61Toggle": "A61 차량 회로 6 제어", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A55Toggle": "A55 차량 회로 10AS 제어", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A54Toggle": "A54 차량 회로 10AK 제어", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A56Toggle": "A56 제어 회로용 배터리 ì „ì› íˆ¬ìž…", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A27Toggle": "A27 DIP 기ë™/ì ë“±", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A21Toggle": "A21 출입문 제어", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A10Toggle": "A10 공기 압축기 제어", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A53Toggle": "A53 KVC ì „ì› ê³µê¸‰", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A43Toggle": "A43 ARS 12V ì „ì› ê³µê¸‰", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A45Toggle": "A45 ARS 차량 회로 10AU", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A42Toggle": "A42 ARS 75V ì „ì› ê³µê¸‰", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A41Toggle": "A41 ARS ì œë™", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:VUToggle": "VU 차량 제어", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A64Toggle": "A64 운전실 조명", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A63Toggle": "A63 IGLA/BIS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A50Toggle": "A50 부수 ê°ì°¨ DIP 기ë™/ì ë“±", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A51Toggle": "A51 DIP 차단/소등", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A23Toggle": "A23 공기 압축기 ê°•ì œ 기ë™", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A14Toggle": "A14 차량 회로 18", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A75Toggle": "A75 운전실 난방", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A1Toggle": "A1 X-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A2Toggle": "A2 X-2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A3Toggle": "A3 X-3", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A17Toggle": "A17 과전류 계전기 리셋", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A62Toggle": "A62 무선 통신", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A29Toggle": "A29 무선 방송", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A5Toggle": "A5 부수 ê°ì°¨", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A6Toggle": "A6 T-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A8Toggle": "A8 공압 밸브 #1, #2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A20Toggle": "A20 ìš´ì „/ì œë™ íšŒë¡œ 제어, 차량 회로 20", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A25Toggle": "A25 ìˆ˜ë™ ì „ê¸° ì œë™", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A22Toggle": "A22 부수 ê°ì°¨ 공기 압축기 접촉기 제어", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A30Toggle": "A30 가변 저항 제어기 모터 ì „ì›", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A39Toggle": "A39 ë¹„ìƒ ì œì–´", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A44Toggle": "A44 차량 ë¹„ìƒ ì œì–´", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A80Toggle": "A80 ì „ì› íšŒë¡œ 스위치 모터 ì „ì›", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A65Toggle": "A65 실내 조명", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:L_5Toggle": "Ð49 비ìƒë“±", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A24Toggle": "A24 배터리 ì¶©ì „", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A32Toggle": "A32 우측 출입문 열림", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A31Toggle": "A31 좌측 출입문 열림", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A16Toggle": "A16 출입문 닫힘", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A13Toggle": "A13 출입문 알람", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A12Toggle": "A12 출입문 ê°•ì œ 닫힘", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A7Toggle": "A7 ì ìƒ‰ë“±", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A9Toggle": "A9 ì ìƒ‰ë“±", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A46Toggle": "A46 백색등", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A47Toggle": "A47 백색등", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!Speedometer": "ì†ë„계", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LSD": "LSD: 출입문 닫힘 확ì¸ë“±", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LOCh": "NCh: ARS 신호 ì—†ìŒ", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L0": "0: ARS ì •ì§€ 신호", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LRS": "LRS: ì†ë„ 유지등", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L40": "ì†ë„ 제한 40 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L60": "ì†ë„ 제한 60 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L80": "ì†ë„ 제한 80 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L70": "ì†ë„ 제한 60 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LRK": "RK: 가변저항 제어기 ë™ìž‘ 확ì¸ë“±", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LEKK": "", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LPU": "", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LKVD": "LKVD: ARS 추진장치 ì •ì§€ 표시등", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LKT": "LKT: ARS ì œë™ í‘œì‹œë“±", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LRP": "RP: 과전류 계전기 확ì¸ë“± (ì ìƒ‰) (ì „ì› íšŒë¡œ ì—°ê²° 실패)", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LKVC": "LKVC: ê³ ì „ì•• ì§‘ì „ 불가", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LVD": "LVD: 추진장치 ìž‘ë™", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LST": "LST: ì œë™ ìž‘ë™", + "Entities.gmod_subway_81-717_mvm.Buttons.CabinDoor.CabinDoor": "운전실문", + "Entities.gmod_subway_81-717_mvm.Buttons.Reverser.KVReverserDown": "ì—­ì „ê°„ 후퇴", + "Entities.gmod_subway_81-717_mvm.Buttons.Reverser.KVReverserUp": "ì—­ì „ê°„ ì „ì§„", + "Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor1.PassengerDoor": "ê°ì‹¤ë¬¸", + "Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAToggle": "UAVA: 범용 ìžë™ ì •ì§€ 장치 비활성 (ìžë™ ì •ì§€ 비활성)", + "Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAContactSet": "UAVA: 범용 ìžë™ ì •ì§€ 장치 비활성 (복귀)", + "Entities.gmod_subway_81-717_mvm.Buttons.EPKDisconnect.EPKToggle": "EPV 차단 밸브", + "Entities.gmod_subway_81-717_mvm.Buttons.Help.ShowHelp": "ì—´ì°¨ ìš´ì „ ë„ì›€ë§ ë³´ê¸°", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake2.1:ParkingBrakeToggle": "주차 ì œë™", + "Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "ì œë™ê´€ í•´ë°© 밸브", + "Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "주 공기관 í•´ë°© 밸브", + "Entities.gmod_subway_81-717_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle": "공압 제어기 비활성", + + "Entities.gmod_subway_81-714_mvm.Buttons.GV.GVToggle": "ê³ ì „ì•• 스위치", + "Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "ì œë™ê´€ í•´ë°© 밸브", + "Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "주 공기관 í•´ë°© 밸브", + "Entities.gmod_subway_81-714_mvm.Buttons.RearDoor.RearDoor": "관통문(ë’¤)", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.DriverValveBLDisconnectToggle": "ì œë™ê´€ 차단 밸브", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.DriverValveTLDisconnectToggle": "주 공기관 차단 밸브", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A65Toggle": "A65 실내 조명", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A56Toggle": "A56 제어 회로용 배터리 ì „ì› íˆ¬ìž…", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A63Toggle": "A63 IGLA/BIS", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A10Toggle": "A10 공기 압축기 제어", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A30Toggle": "A30 가변 저항 제어기 모터 ì „ì›", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A80Toggle": "A80 ì „ì› íšŒë¡œ 스위치 모터 ì „ì›", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "ì œë™ê´€ í•´ë°© 밸브", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "주 공기관 í•´ë°© 밸브", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.ParkingBrakeToggle": "주차 ì œë™", + "Entities.gmod_subway_81-714_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle": "공압 제어기 비활성", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontDoor.FrontDoor": "관통문(앞)", + "Entities.gmod_subway_81-714_mvm.Buttons.Battery.VBToggle": "VB: 배터리 투입/차단", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A54Toggle": "A54 차량 회로 10AK 제어", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A27Toggle": "A27 DIP 기ë™/ì ë“±", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A24Toggle": "A24 배터리 ì¶©ì „", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A53Toggle": "A53 KVC ì „ì› ê³µê¸‰", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A13Toggle": "A13 출입문 알람", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A32Toggle": "A32 우측 출입문 열림", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A31Toggle": "A31 좌측 출입문 열림", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A16Toggle": "A16 출입문 닫힘", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A12Toggle": "A12 출입문 ê°•ì œ 닫힘", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A50Toggle": "A50 부수 ê°ì°¨ DIP 기ë™/ì ë“±", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A51Toggle": "A51 DIP 차단/소등", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A1Toggle": "A1 X-1", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.KRPSet": "START: ë¹„ìƒ ê¸°ë™ ë²„íŠ¼", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.VozvratRPSet": "과전류 계전기 리셋", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.RezMKSet": "공기 압축기 ê°•ì œ 기ë™", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.VMKToggle": "공기 압축기 기ë™", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.BPSNonToggle": "BPSN: 차량 ì „ì› ê³µê¸‰ 장치", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A2Toggle": "A2 X-2", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A3Toggle": "A3 X-3", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A17Toggle": "A17 과전류 계전기 리셋", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A5Toggle": "A5 ", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A6Toggle": "A6 T-1", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A8Toggle": "A8 공압 밸브 #1, #2", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A20Toggle": "A20 ìš´ì „/ì œë™ íšŒë¡œ 제어, 차량 회로 20", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A25Toggle": "A25 ìˆ˜ë™ ì „ê¸° ì œë™", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A22Toggle": "A22 부수 ê°ì°¨ 공기 압축기 접촉기 제어", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A23Toggle": "A23 공기 압축기 ê°•ì œ 기ë™", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A39Toggle": "A39 ë¹„ìƒ ì œì–´", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A14Toggle": "A14 차량 회로 18" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/kr_buttons_720.lua b/lua/metrostroi_data/languages_/_unfinished/kr_buttons_720.lua new file mode 100644 index 0000000..cfacb42 --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/kr_buttons_720.lua @@ -0,0 +1,220 @@ +return [[ +{ + "Lang": "kr", + "Name": "Korean", + + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF1Set": "Vityaz: F1", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF2Set": "Vityaz: ë‹¤ìŒ í™”ë©´", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF3Set": "Vityaz: ì´ì „ 화면", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF4Set": "Vityaz: ë©”ì¸", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz1Set": "Vityaz: 1", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz4Set": "Vityaz: 4", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz7Set": "Vityaz: 7", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz2Set": "Vityaz: 2", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz5Set": "Vityaz: 5", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz8Set": "Vityaz: 8", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz0Set": "Vityaz: 0", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz3Set": "Vityaz: 3", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz6Set": "Vityaz: 6", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz9Set": "Vityaz: 9", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF5Set": "Vityaz: ì‚­ì œ", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF6Set": "Vityaz: 위\\ì†ë„", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF7Set": "Vityaz: 아래\\전류", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF8Set": "Vityaz: ìž…ë ¥\\ê°ì°¨ë³„ ìƒíƒœ", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF9Set": "Vityaz: ì„ íƒ\\ê°ì°¨ë³„ ìƒíƒœ 제어", + "Entities.gmod_subway_81-720.Buttons.RV.EmerX1Set": "ë¹„ìƒ X-1", + "Entities.gmod_subway_81-720.Buttons.RV.EmerX2Set": "ë¹„ìƒ X-2", + "Entities.gmod_subway_81-720.Buttons.RV.EmerCloseDoorsSet": "출입문 ê°•ì œ 닫힘", + "Entities.gmod_subway_81-720.Buttons.RV.EmergencyDoorsToggle": "비ìƒë¬¸", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode-": "냉난방기 ìš´ì „ 모드: +", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode+": "냉난방기 ìš´ì „ 모드: -", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode+": "+", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode-": "-", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode-": "냉난방 세기: +", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode+": "냉난방 세기: -", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV1Toggle": "SF1: 제어 회로 ì „ì›", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV2Toggle": "SF2: BUV ì „ì› (ê°ì°¨ 제어 유닛)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV3Toggle": "SF3: BUTP ì „ì› (추진장치 제어 유닛)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV4Toggle": "SF4: BUTP 제어", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV5Toggle": "SF5: BUTP ë¹„ìƒ ì œì–´", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV6Toggle": "SF6: BUTP ì „ì›", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV7Toggle": "SF7: BBE (ë‚´ë¶€ ì „ì› ê³µê¸‰ 유닛)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV8Toggle": "SF8: BV 제어", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV9Toggle": "SF9: BV ì „ì› (계전기 과부하)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV10Toggle": "SF10: PPO", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV11Toggle": "SF11: 공기 압축기", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV12Toggle": "SF12: 출입문 닫힘", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV13Toggle": "SF13: 좌측 출입문 열림", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV14Toggle": "SF14: 우측 출입문 열림", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV15Toggle": "SF15: 관통문 잠금", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV16Toggle": "SF16: 안내방송기", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV17Toggle": "SF17: ë¹„ìƒ í†µí™” 장치", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV18Toggle": "SF18: (기능 ì—†ìŒ)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV19Toggle": "SF19: ê°ì‹¤ 조명 ì „ì›", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV20Toggle": "SF20: ê°ì‹¤ ë¹„ìƒ ì¡°ëª… ì „ì›", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV21Toggle": "SF21: ì†ë„ 센서", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV22Toggle": "SF22: ë¹„ìƒ ì œë™", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV23Toggle": "SF23: 냉난방기 1번 그룹 제어", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV24Toggle": "SF24: 냉난방기 2번 그룹 제어", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV25Toggle": "SF25: 냉난방기 1번 그룹 ì „ì›", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV26Toggle": "SF26: 냉난방기 2번 그룹 ì „ì›", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV27Toggle": "SF27: ì œë™ ìœ ë„기 ì „ì›", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV28Toggle": "SF28: ZKK ì „ì›", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV29Toggle": "SF29: 집전기", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV30Toggle": "SF30: ë…¸ì„ ë„ & 안내기", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV31Toggle": "SF31: (기능 ì—†ìŒ)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV32Toggle": "SF32: (기능 ì—†ìŒ)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV33Toggle": "SF33: (기능 ì—†ìŒ)", + "Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPMenuSet": "ASNP: 메뉴", + "Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPUpSet": "ASNP: 위", + "Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPDownSet": "ASNP: 아래", + "Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPOnToggle": "ASNP: ì „ì›", + "Entities.gmod_subway_81-720.Buttons.PneumoHelper1.!BrakeCylinder": "ì œë™ê´€", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF1Toggle": "SF1: 주 ì „ì›", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF2Toggle": "SF2: 주 제어", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF3Toggle": "SF3: ë¹„ìƒ ì œì–´", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF4Toggle": "SF4: BARS (ARS 유닛)", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF5Toggle": "SF5: BUP (차량 제어 유닛)", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF6Toggle": "SF6: BKCU (제어 회로 정류 유닛)", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF7Toggle": "SF7: BARS (ARS 유닛)", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF8Toggle": "SF8: 안내방송기", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF9Toggle": "SF9: 무선국", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF10Toggle": "SF10: ê°ì°¨ ë°©í–¥", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF11Toggle": "SF11: ì§„í–‰ ë°©í–¥", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF12Toggle": "SF12: 전조등 1번 그룹", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF13Toggle": "SF13: 전조등 2번 그룹", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF14Toggle": "SF14: 마커등", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF15Toggle": "SF15: 운전실 조명", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF16Toggle": "SF16: 난방기", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF17Toggle": "SF17: 운전실 ì—어컨", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF18Toggle": "SF18: 살사 장치", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF19Toggle": "SF19: 주 KRM ì „ì› (ì§í†µê´€)", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF20Toggle": "SF20: ë¹„ìƒ KRM ì „ì› (ì§í†µê´€)", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF21Toggle": "SF21: 출입문 열림", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF22Toggle": "SF22: 출입문 닫힘", + "Entities.gmod_subway_81-720.Buttons.BTO.K29Toggle": "KRMSH (ì§í†µê´€ 차단 밸브)", + "Entities.gmod_subway_81-720.Buttons.PassengerDoor2.PassengerDoor": "ê°ì‹¤ë¬¸", + "Entities.gmod_subway_81-720.Buttons.VoltHelper2.!HV": "ì´ ì „ì••ê³„ (kV)", + "Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I1_3": "추진장치 1번 그룹 전류 (A)", + "Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I2_4": "추진장치 2번 그룹 전류 (A)", + "Entities.gmod_subway_81-720.Buttons.GV.GVToggle": "ê³ ì „ì•• 스위치", + "Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "ì œë™ê´€ 차단 밸브", + "Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "주 공기관 차단 밸브", + "Entities.gmod_subway_81-720.Buttons.RearDoor1.RearDoor": "관통문(ë’¤)", + "Entities.gmod_subway_81-720.Buttons.RearDoor.RearDoor": "관통문(ë’¤)", + "Entities.gmod_subway_81-720.Buttons.BackDown.Pant1Toggle": "집전기 1번 그룹 비활성", + "Entities.gmod_subway_81-720.Buttons.BackDown.Pant2Toggle": "집전기 2번 그룹 비활성", + "Entities.gmod_subway_81-720.Buttons.BackDown.Vent1Toggle": "환í’기 1번 그룹", + "Entities.gmod_subway_81-720.Buttons.BackDown.Vent2Toggle": "환í’기 2번 그룹", + "Entities.gmod_subway_81-720.Buttons.BackDown.VentToggle": "", + "Entities.gmod_subway_81-720.Buttons.BackDown.PassLightToggle": "ê°ì‹¤ 조명", + "Entities.gmod_subway_81-720.Buttons.BackDown.CabLightToggle": "운전실 조명", + "Entities.gmod_subway_81-720.Buttons.BackDown.Headlights1Toggle": "전조등 1번 그룹", + "Entities.gmod_subway_81-720.Buttons.BackDown.Headlights2Toggle": "전조등 2번 그룹", + "Entities.gmod_subway_81-720.Buttons.BackDown.ParkingBrakeToggle": "주차 ì œë™", + "Entities.gmod_subway_81-720.Buttons.BackDown.TorecDoorsToggle": "관통문 잠금", + "Entities.gmod_subway_81-720.Buttons.BackDown.BBERToggle": "ë¹„ìƒ BBE 기ë™", + "Entities.gmod_subway_81-720.Buttons.BackDown.BBEToggle": "BBE (ë‚´ë¶€ ì „ì› ê³µê¸‰ 유닛)", + "Entities.gmod_subway_81-720.Buttons.BackDown.CompressorToggle": "공기 압축기", + "Entities.gmod_subway_81-720.Buttons.BackDown.CabLightStrengthToggle": "운전실 조명 ì „ì›", + "Entities.gmod_subway_81-720.Buttons.BackDown.AppLights1Toggle": "ê°ì‹¤ 조명 장치", + "Entities.gmod_subway_81-720.Buttons.BackDown.AppLights2Toggle": "", + "Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock-": "BARS 고장 (ARS 유닛) 차단: -", + "Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock+": "BARS 고장 (ARS 유닛) 차단: +", + "Entities.gmod_subway_81-720.Buttons.BackDown.BatteryToggle": "배터리 투입/차단", + "Entities.gmod_subway_81-720.Buttons.BackDown.ALSFreqToggle": "ALS 디코ë”", + "Entities.gmod_subway_81-720.Buttons.VoltHelper1.!Battery": "제어 회로 ì „ì••", + "Entities.gmod_subway_81-720.Buttons.PassengerDoor.PassengerDoor": "ê°ì‹¤ë¬¸", + "Entities.gmod_subway_81-720.Buttons.CabinDoorR.CabinDoorRight": "운전실문", + "Entities.gmod_subway_81-720.Buttons.CabinDoorL.CabinDoorLeft": "운전실문", + "Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "ì œë™ê´€ í•´ë°© 밸브", + "Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "주 공기관 í•´ë°© 밸브", + "Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectLToggle": "좌측 출입문 ì„ íƒ", + "Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectRToggle": "우측 출입문 ì„ íƒ", + "Entities.gmod_subway_81-720.Buttons.PUL.DoorBlockToggle": "출입문 제어 스위치", + "Entities.gmod_subway_81-720.Buttons.PUL.!DoorLeftLamp": "좌측 출입문 버튼 ìž‘ë™", + "Entities.gmod_subway_81-720.Buttons.PUL.DoorLeftSet": "좌측 출입문", + "Entities.gmod_subway_81-720.Buttons.PUU.!DoorsClosed": "출입문 닫힘", + "Entities.gmod_subway_81-720.Buttons.PUU.StandToggle": "유지", + "Entities.gmod_subway_81-720.Buttons.PUU.TickerToggle": "안내기", + "Entities.gmod_subway_81-720.Buttons.PUU.KAHToggle": "KAH", + "Entities.gmod_subway_81-720.Buttons.PUU.ALSToggle": "ALS", + "Entities.gmod_subway_81-720.Buttons.PUU.FDepotToggle": "기지 출고", + "Entities.gmod_subway_81-720.Buttons.PUU.!HVoltage": "ê³ ì „ì•• ì§‘ì „ 불가", + "Entities.gmod_subway_81-720.Buttons.PUU.PassSchemeToggle": "노선ë„", + "Entities.gmod_subway_81-720.Buttons.PUU.EmergencyCompressorSet": "ë¹„ìƒ ê³µê¸° 압축기", + "Entities.gmod_subway_81-720.Buttons.PUU.EnableBVSet": "보호기 ìž‘ë™ (계전기 과부하)", + "Entities.gmod_subway_81-720.Buttons.PUU.DisableBVSet": "BV 차단 (계전기 과부하)", + "Entities.gmod_subway_81-720.Buttons.PUU.RingSet": "부저", + "Entities.gmod_subway_81-720.Buttons.PUU.R_Program2Set": "안내방송 2", + "Entities.gmod_subway_81-720.Buttons.PUU.R_AnnouncerToggle": "안내방송기", + "Entities.gmod_subway_81-720.Buttons.PUU.R_LineToggle": "노선", + "Entities.gmod_subway_81-720.Buttons.PUU.R_EmerSet": "ë¹„ìƒ í†µí™” 장치", + "Entities.gmod_subway_81-720.Buttons.PUU.R_Program1Set": "안내방송 1", + "Entities.gmod_subway_81-720.Buttons.PUU.EnableBVEmerSet": "ë¹„ìƒ BV 복구", + "Entities.gmod_subway_81-720.Buttons.PUU.EmergencyControlsToggle": "ë¹„ìƒ ì œì–´", + "Entities.gmod_subway_81-720.Buttons.PUU.WiperToggle": "와ì´í¼", + "Entities.gmod_subway_81-720.Buttons.PUU.!VDop": "제한 ì†ë„", + "Entities.gmod_subway_81-720.Buttons.PUU.!VFact": "현재 ì†ë„", + "Entities.gmod_subway_81-720.Buttons.PUU.!VPred": "제한 ì†ë„ 예고", + "Entities.gmod_subway_81-720.Buttons.PUU.!VDop2": "제한 ì†ë„", + "Entities.gmod_subway_81-720.Buttons.PUU.!Acc": "ê°€ì†", + "Entities.gmod_subway_81-720.Buttons.PUU.!Forw": "ì „ì§„", + "Entities.gmod_subway_81-720.Buttons.PUU.!Back": "후진", + "Entities.gmod_subway_81-720.Buttons.PUR.AccelRateToggle": "ê°€ì†ë„", + "Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeAddSet": "(ë³´ì¡°) ì œë™", + "Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeReleaseSet": "(ë³´ì¡°) 완해", + "Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeToggle": "ë³´ì¡° ì œë™", + "Entities.gmod_subway_81-720.Buttons.PUR.EmergencyBrakeToggle": "ë¹„ìƒ ì œë™", + "Entities.gmod_subway_81-720.Buttons.PUR.DoorCloseToggle": "출입문 닫힘", + "Entities.gmod_subway_81-720.Buttons.PUR.AttentionMessageSet": "메세지 확ì¸", + "Entities.gmod_subway_81-720.Buttons.PUR.AttentionSet": "확ì¸", + "Entities.gmod_subway_81-720.Buttons.PUR.AttentionBrakeSet": "ì œë™ í™•ì¸", + "Entities.gmod_subway_81-720.Buttons.PUR.HornBSet": "ê²½ì ", + "Entities.gmod_subway_81-720.Buttons.PUR.DoorRightSet": "우측 출입문", + "Entities.gmod_subway_81-720.Buttons.PUR.!DoorRightLamp": "우측 출입문 버튼 ë™ìž‘", + "Entities.gmod_subway_81-720.Buttons.PneumoHelper2.!BrakeTrainLine": "ì ìƒ‰: ì œë™ê´€ ì••ë ¥, í‘색: 주 공기관 ì••ë ¥", + + "Entities.gmod_subway_81-721.Buttons.GV.GVToggle": "ê³ ì „ì•• 스위치", + "Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "ì œë™ê´€ í•´ë°© 밸브", + "Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "주 공기관 í•´ë°© 밸브", + "Entities.gmod_subway_81-721.Buttons.FrontDoor.FrontDoor": "관통문(앞)", + "Entities.gmod_subway_81-721.Buttons.RearDoor.RearDoor": "관통문(ë’¤)", + "Entities.gmod_subway_81-721.Buttons.Battery.BatteryToggle": "배터리 투입/차단", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV1Toggle": "SF1: 제어 회로 ì „ì›", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV2Toggle": "SF2: BUV ì „ì› (ê°ì°¨ 제어 유닛)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV3Toggle": "SF3: BUTP ì „ì› (추진장치 제어 유닛)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV4Toggle": "SF4: BUTP 제어", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV5Toggle": "SF5: BUTP ë¹„ìƒ ì œì–´", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV6Toggle": "SF6: BUTP ì „ì›", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV7Toggle": "SF7: BBE (ë‚´ë¶€ ì „ì› ê³µê¸‰ 유닛)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV8Toggle": "SF8: BV 제어", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV9Toggle": "SF9: BV ì „ì› (계전기 과부하)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV10Toggle": "SF10: PPO", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV11Toggle": "SF11: 공기 압축기", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV12Toggle": "SF12: 출입문 닫힘", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV13Toggle": "SF13: 좌측 출입문 열림", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV14Toggle": "SF14: 우측 출입문 열림", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV15Toggle": "SF15: 관통문 잠금", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV16Toggle": "SF16: 안내방송기", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV17Toggle": "SF17: ë¹„ìƒ í†µí™” 장치", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV18Toggle": "SF18: (기능 ì—†ìŒ)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV19Toggle": "SF19: ê°ì‹¤ 조명 ì „ì›", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV20Toggle": "SF20: ê°ì‹¤ ë¹„ìƒ ì¡°ëª… ì „ì›", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV21Toggle": "SF21: ì†ë„ 센서", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV22Toggle": "SF22: 주차 ì œë™", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV23Toggle": "SF23: 냉난방기 1번 그룹 제어", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV24Toggle": "SF24: 냉난방기 2번 그룹 제어", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV25Toggle": "SF25: 냉난방기 1번 그룹 ì „ì›", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV26Toggle": "SF26: 냉난방기 2번 그룹 ì „ì›", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV27Toggle": "SF27: ì œë™ ìœ ë„기 ì „ì›", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV28Toggle": "SF28: ZKK ì „ì›", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV29Toggle": "SF29: 집전기", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV30Toggle": "SF30: ë…¸ì„ ë„ & 안내기", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV31Toggle": "SF31: (기능 ì—†ìŒ)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV32Toggle": "SF32: (기능 ì—†ìŒ)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV33Toggle": "SF33: (기능 ì—†ìŒ)", + "Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "ì œë™ê´€ í•´ë°© 밸브", + "Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "주 공기관 í•´ë°© 밸브" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/kr_buttons_ezh3.lua b/lua/metrostroi_data/languages_/_unfinished/kr_buttons_ezh3.lua new file mode 100644 index 0000000..3a8e764 --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/kr_buttons_ezh3.lua @@ -0,0 +1,140 @@ +return [[ +{ + "Lang": "kr", + "Name": "Korean", + + + "Entities.gmod_subway_ezh3.Buttons.Stopkran.EmergencyBrakeValveToggle": "ë¹„ìƒ ì œë™", + "Entities.gmod_subway_ezh3.Buttons.Back.BackDoor": "관통문(ë’¤)", + "Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle": "ì œë™ê´€ 차단 밸브", + "Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle": "주 공기관 차단 밸브", + "Entities.gmod_subway_ezh3.Buttons.Battery.VBToggle": "VB: 배터리 투입/차단 (저전압)", + "Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "ì œë™ê´€ í•´ë°© 밸브", + "Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "주 공기관 í•´ë°© 밸브", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPMenuSet": "안내방송기: 메뉴", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPUpSet": "안내방송기: 위", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPDownSet": "안내방송기: 아래", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPOnToggle": "안내방송기: ì „ì›", + "Entities.gmod_subway_ezh3.Buttons.PassengerDoor1.PassengerDoor": "ê°ì‹¤ë¬¸", + "Entities.gmod_subway_ezh3.Buttons.PassengerDoor.PassengerDoor": "ê°ì‹¤ë¬¸", + "Entities.gmod_subway_ezh3.Buttons.CabinDoor.CabinDoor": "운전실문", + "Entities.gmod_subway_ezh3.Buttons.Front.FrontDoor": "관통문(앞)", + "Entities.gmod_subway_ezh3.Buttons.GV.GVToggle": "ê³ ì „ì•• 스위치", + "Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "주 공기관 차단 밸브", + "Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "ì œë™ê´€ 차단 밸브", + "Entities.gmod_subway_ezh3.Buttons.Panel.!OCH": "NCh: ARS 신호 ì—†ìŒ", + "Entities.gmod_subway_ezh3.Buttons.Panel.!0": "0: ARS ì •ì§€ 신호", + "Entities.gmod_subway_ezh3.Buttons.Panel.!40": "ì†ë„ 제한 40 kph", + "Entities.gmod_subway_ezh3.Buttons.Panel.!60": "ì†ë„ 제한 60 kph", + "Entities.gmod_subway_ezh3.Buttons.Panel.!70": "ì†ë„ 제한 80 kph", + "Entities.gmod_subway_ezh3.Buttons.Panel.!80": "ì†ë„ 제한 60 kph", + "Entities.gmod_subway_ezh3.Buttons.Panel.!Speedometer": "ì†ë„계 (km/h)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!TotalAmpermeter": "ì´ ì „ë¥˜ê³„ (A)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!TotalVoltmeter": "ì´ ì „ì••ê³„ (kV)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!BatteryVoltage": "차량 제어 ìš© 배터리 ì „ì••(V)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!BrakeCylinder": "ì œë™í†µ ì••ë ¥", + "Entities.gmod_subway_ezh3.Buttons.Panel.!LinesPressure": "공기관 ì••ë ¥ (red: ì œë™ê´€ ì••ë ¥, black: 주 공기관 ì••ë ¥)", + "Entities.gmod_subway_ezh3.Buttons.Main.KU1Toggle": "공기 압축기 기ë™", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMM1Set": "SAMM: ìš´ì „ 종료", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMM2Set": "SAMM: 시작", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMM3Set": "SAMM: 리셋", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal1": "Lamp: ìƒìš© ì œë™", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal2": "Lamp: SAMM ìž‘ë™ ìƒíƒœ", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal3": "Lamp: SAMM 실행 유닛 ìž‘ë™", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMOnToggle": "SAMM: ìžë™ ìš´ì „ 시작", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMBlokToggle": "SAMM: 실행 유닛", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMCommand3Set": "SAMM: X-2", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMCommand2Set": "SAMM: ë”°ë¼ ìž¡ê¸°", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMCommand1Set": "SAMM: 권한", + "Entities.gmod_subway_ezh3.Buttons.Main.KSNSet": "KSN: 고장 í™•ì¸ ë²„íŠ¼", + "Entities.gmod_subway_ezh3.Buttons.Main.R_Program1Set": "안내방송 1", + "Entities.gmod_subway_ezh3.Buttons.Main.R_Program2Set": "안내방송 2", + "Entities.gmod_subway_ezh3.Buttons.Main.VUSToggle": "Switch: 하향등 (아래)/ìƒí–¥ë“± (위)", + "Entities.gmod_subway_ezh3.Buttons.Main.L_3Toggle": "Switch: 조명 측정기", + "Entities.gmod_subway_ezh3.Buttons.Main.VAHToggle": "Switch: ë¹„ìƒ ìš´ì „", + "Entities.gmod_subway_ezh3.Buttons.Main.DIPonSet": "Osv. Vkl.: 조명 켜기", + "Entities.gmod_subway_ezh3.Buttons.Main.DIPoffSet": "Osv. Vykl.: 조명 ë„기", + "Entities.gmod_subway_ezh3.Buttons.Main.KSDSet": "KSD: 출입문 신호 전달 확ì¸", + "Entities.gmod_subway_ezh3.Buttons.Main.KVTSet": "KVT: ì œë™ í™•ì¸ ë²„íŠ¼", + "Entities.gmod_subway_ezh3.Buttons.Main.KBSet": "KB: í™•ì¸ ë²„íŠ¼", + "Entities.gmod_subway_ezh3.Buttons.Main.KBLamp": "Lamp: RK 회전 중", + "Entities.gmod_subway_ezh3.Buttons.Main.ARSToggle": "ARS: ìžë™ ì†ë„ 제한", + "Entities.gmod_subway_ezh3.Buttons.Main.R_UNchToggle": "UNCh: 저주파 ì¦í­ê¸°", + "Entities.gmod_subway_ezh3.Buttons.Main.VUD1Toggle": "VUD: 출입문 제어 스위치 (출입문 닫힘)", + "Entities.gmod_subway_ezh3.Buttons.Main.R_RadioToggle": "안내방송기 ì „ì› (내장형)", + "Entities.gmod_subway_ezh3.Buttons.Main.ALSToggle": "ALS: ìžë™ 차량 신호 제어", + "Entities.gmod_subway_ezh3.Buttons.Main.VozvratRPSet": "KVRP: 과전류 계전기 리셋", + "Entities.gmod_subway_ezh3.Buttons.Main.RingSet": "부저", + "Entities.gmod_subway_ezh3.Buttons.Main.L_2Toggle": "Switch: 운전실 조명", + "Entities.gmod_subway_ezh3.Buttons.Main.KRZDSet": "KRZD: 출입문 ê°•ì œ 닫힘", + "Entities.gmod_subway_ezh3.Buttons.Main.KDPSet": "KDP: 우측 출입문 열림", + "Entities.gmod_subway_ezh3.Buttons.Main.KDLSet": "KDL: 좌측 출입문 열림", + "Entities.gmod_subway_ezh3.Buttons.Main.KAHSet": "KAH: ë¹„ìƒ ìš´ì „ 버튼", + "Entities.gmod_subway_ezh3.Buttons.Main.RezMKSet": "공기 압축기 ê°•ì œ 기ë™", + "Entities.gmod_subway_ezh3.Buttons.Main.KRPSet": "KRP: ë¹„ìƒ ê¸°ë™ ë²„íŠ¼", + "Entities.gmod_subway_ezh3.Buttons.Main.RSTToggle": "VPR: 무선국 활성화", + "Entities.gmod_subway_ezh3.Buttons.Main.R_GToggle": "스피커: 운전실 ë‚´ë¶€ 방송 재ìƒ", + "Entities.gmod_subway_ezh3.Buttons.Main.R_ZSToggle": "ZS: ê°ì‹¤ ë‚´ë¶€ 방송 재ìƒ", + "Entities.gmod_subway_ezh3.Buttons.Main.Custom2Set": "(기능 ì—†ìŒ)", + "Entities.gmod_subway_ezh3.Buttons.Main.Custom3Set": "(기능 ì—†ìŒ)", + "Entities.gmod_subway_ezh3.Buttons.Main.ASNPPlay": "안내방송기 ìž‘ë™ í™•ì¸ë“±", + "Entities.gmod_subway_ezh3.Buttons.AV1.VU3Toggle": "VU3: 운전실 조명", + "Entities.gmod_subway_ezh3.Buttons.AV1.VU2Toggle": "VU2: 비ìƒë“± (45V)", + "Entities.gmod_subway_ezh3.Buttons.AV1.VU1Toggle": "VU1: 운전실 난방 (3kWt)", + "Entities.gmod_subway_ezh3.Buttons.AVMain.AV8BToggle": "AV-8B: ìžë™ 스위치 (ê³ ì „ì••)", + "Entities.gmod_subway_ezh3.Buttons.RC1.RC1Toggle": "RC-ARS: ARS 차단기", + "Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAToggle": "UAVA: 범용 ìžë™ ì •ì§€ 장치 비활성 (ìžë™ ì •ì§€ 비활성)", + "Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAContactSet": "UAVA: 범용 ìžë™ ì •ì§€ 장치 비활성 (복귀)", + "Entities.gmod_subway_ezh3.Buttons.VUHelper.VUToggle": "VU: 차량 제어 활성화", + "Entities.gmod_subway_ezh3.Buttons.HelperPanel.VDLSet": "KDL: 좌측 출입문 열림", + "Entities.gmod_subway_ezh3.Buttons.HelperPanel.VUD2Toggle": "VUD2: 출입문 제어 스위치 (출입문 닫힘)", + "Entities.gmod_subway_ezh3.Buttons.EPKDisconnect.EPKToggle": "EPK 차단 밸브", + "Entities.gmod_subway_ezh3.Buttons.VU.VUToggle": "VU: 차량 제어 활성화", + "Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeLeft": "주차 ì œë™ í•¸ë“¤", + "Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeRight": "주차 ì œë™ í•¸ë“¤", + "Entities.gmod_subway_ezh3.Buttons.AirDistributor.AirDistributorDisconnectToggle": "공압 제어기 비활성", + + "Entities.gmod_subway_em508t.Buttons.Stopkran.EmergencyBrakeValveToggle": "ë¹„ìƒ ì œë™", + "Entities.gmod_subway_em508t.Buttons.Battery.VBToggle": "VB: 배터리 투입/차단 (저전압)", + "Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "ì œë™ê´€ 차단 밸브", + "Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "주 공기관 차단 밸브", + "Entities.gmod_subway_em508t.Buttons.GV.GVToggle": "ê³ ì „ì•• 스위치", + "Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "주 공기관 차단 밸브", + "Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "ì œë™ê´€ 차단 밸브", + "Entities.gmod_subway_em508t.Buttons.RearDoor.RearDoor": "ê°ì‹¤ë¬¸", + "Entities.gmod_subway_em508t.Buttons.Back2.!HVFuse": "ê³ ì „ì•• 퓨즈 함", + "Entities.gmod_subway_em508t.Buttons.Back2.!Relays": "배터리 ì¶©ì „/출입문 ì••ë ¥ 제어기 함", + "Entities.gmod_subway_em508t.Buttons.Back2.!Heater": "난방기", + "Entities.gmod_subway_em508t.Buttons.Front.FrontDoor": "관통문(앞)", + "Entities.gmod_subway_em508t.Buttons.AV1.VU3Toggle": "VU3: 운전실 조명", + "Entities.gmod_subway_em508t.Buttons.AV1.VU2Toggle": "VU2: 비ìƒë“± (45V)", + "Entities.gmod_subway_em508t.Buttons.AV1.VU1Toggle": "VU1: 운전실 난방 (3kWt)", + "Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeLeft": "주차 ì œë™ í•¸ë“¤", + "Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeRight": "주차 ì œë™ í•¸ë“¤", + "Entities.gmod_subway_em508t.Buttons.CabinDoor.CabinDoor1": "운전실문", + "Entities.gmod_subway_em508t.Buttons.PassengerDoor.PassengerDoor": "ê°ì‹¤ë¬¸", + "Entities.gmod_subway_em508t.Buttons.PassengerDoor1.PassengerDoor": "ê°ì‹¤ë¬¸", + "Entities.gmod_subway_em508t.Buttons.Main.!RedRP": "RP: 과전류 계전기 확ì¸ë“± (ì ìƒ‰) (ì „ì› íšŒë¡œ ì—°ê²° 실패)", + "Entities.gmod_subway_em508t.Buttons.Main.!GreenRP": "RP: 과전류 계전기 확ì¸ë“± (녹색) (추진장치 과전류 ë°©ì§€)", + "Entities.gmod_subway_em508t.Buttons.Main.!SD": "출입문 닫힘 확ì¸ë“±", + "Entities.gmod_subway_em508t.Buttons.Main.KDLSet": "Switch: 좌측 출입문 열림", + "Entities.gmod_subway_em508t.Buttons.Main.KSDSet": "Switch: 신호 전달 (출입문 제어 확ì¸)", + "Entities.gmod_subway_em508t.Buttons.Main.VozvratRPSet": "Switch: 과전류 계전기 리셋", + "Entities.gmod_subway_em508t.Buttons.Main.KSNSet": "Switch: 고장 í™•ì¸ ìŠ¤ìœ„ì¹˜", + "Entities.gmod_subway_em508t.Buttons.Main.VUD1Toggle": "Switch: 출입문 제어 스위치 (출입문 닫힘)", + "Entities.gmod_subway_em508t.Buttons.Main.KU1Toggle": "Switch: 공기 압축기 기ë™", + "Entities.gmod_subway_em508t.Buttons.Main.DIPonSet": "KU4: 실내 조명 켜기", + "Entities.gmod_subway_em508t.Buttons.Main.DIPoffSet": "KU5: 실내 조명 ë„기", + "Entities.gmod_subway_em508t.Buttons.Main.RezMKSet": "Switch: 공기 압축기 ê°•ì œ 기ë™", + "Entities.gmod_subway_em508t.Buttons.Main.KDPSet": "KDP: 우측 출입문 열림", + "Entities.gmod_subway_em508t.Buttons.Main.KRZDSet": "KU10: 출입문 ê°•ì œ 닫힘", + "Entities.gmod_subway_em508t.Buttons.AVMain.AV8BToggle": "AV-8B: ìžë™ 스위치 (ê³ ì „ì••)", + "Entities.gmod_subway_em508t.Buttons.VU.VUToggle": "VU: 차량 제어 활성화", + "Entities.gmod_subway_em508t.Buttons.VU.!Voltage": "제어 회로 ì „ì••", + "Entities.gmod_subway_em508t.Buttons.HelperPanel.VUD2Toggle": "VUD2: 출입문 제어 스위치 (출입문 닫힘)", + "Entities.gmod_subway_em508t.Buttons.HelperPanel.VDLSet": "VDL: 좌측 출입문 열림", + "Entities.gmod_subway_em508t.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle": "ì œë™ê´€ 차단 밸브", + "Entities.gmod_subway_em508t.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle": "주 공기관 차단 밸브", + "Entities.gmod_subway_em508t.Buttons.AirDistributor.AirDistributorDisconnectToggle": "공압 제어기 비활성" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/kr_spawner.lua b/lua/metrostroi_data/languages_/_unfinished/kr_spawner.lua new file mode 100644 index 0000000..db526c2 --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/kr_spawner.lua @@ -0,0 +1,117 @@ +return [[ +{ + "Lang": "kr", + "Name": "Korean", + + "Spawner.Title": "ì—´ì°¨ 스í¬ë„ˆ", + "Spawner.Trains1": "현재 ì—´ì°¨ 수", + "Spawner.Trains2": "최대 량수", + "Spawner.WagNum": "차량 량수", + "Spawner.AutoCouple": "ê°ì°¨ ê°„ ìžë™ ì—°ê²°", + + "Entities.gmod_subway_81-717_mvm.Spawner.Texture.Name": "ë„색", + "Entities.gmod_subway_81-717_mvm.Spawner.PassTexture.Name": "ê°ì‹¤ 내장재", + "Entities.gmod_subway_81-717_mvm.Spawner.CabTexture.Name": "운전대 재질", + "Entities.gmod_subway_81-717_mvm.Spawner.Announcer.Name": "안내방송", + "Entities.gmod_subway_81-717_mvm.Spawner.Lighter.Name": "ë¼ì´í„°", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.Name": "ARS íŒ¨ë„ ì¢…ë¥˜", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.1": "기본(사ê°í˜• 램프)", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.2": "기본(ì›í˜• 램프)", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.3": "키예프(Kiev)/SPB", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.4": "구형 ARS", + "Entities.gmod_subway_81-717_mvm.Spawner.Cran.Name": "ì œë™ë³€ 종류", + "Entities.gmod_subway_81-717_mvm.Spawner.Cran.1": "334", + "Entities.gmod_subway_81-717_mvm.Spawner.Cran.2": "013", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.Name": "ì „ë©´ë¶€ 종류", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.1": "2-2", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.2": "2-2-2", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.3": "1-4-1 ë²”í¼ 1", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.4": "1-4-1 ë²”í¼ 2", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.5": "1-1", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.6": "복고í’(Retro)", + "Entities.gmod_subway_81-717_mvm.Spawner.LED.Name": "LED 전조등", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.Name": "BPSN 종류", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.1": "ë†’ì€ í†¤ì˜ êµ¬í˜• 사운드", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.2": "중간 í†¤ì˜ êµ¬í˜• 사운드", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.3": "기본(SPB)", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.4": "기본(TKL)", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.5": "기본", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.6": "키예프(Kiev)", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.7": "구형", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.8": "기본 2", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.9": "기본 3", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.10": "소리 ì—†ìŒ(BPN-115)", + "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.Name": "주간 제어기 소리", + "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.1": "종류 1", + "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.2": "종류 2", + "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.3": "종류 3", + "Entities.gmod_subway_81-717_mvm.Spawner.NewKV.Name": "새로운 주간 제어기 모ë¸", + "Entities.gmod_subway_81-717_mvm.Spawner.HornType.Name": "SPB ê²½ì ", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.Name": "부저 소리", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.1": "구형 소리", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.2": "ë‚®ì€ í†¤ì˜ ê¸°ë³¸ 부저 소리", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.3": "ë†’ì€ í†¤ì˜ ê¸°ë³¸ 부저 소리", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.4": "ê°„í—ì ìœ¼ë¡œ ë‚®ì€ í†¤ì˜ ê¸°ë³¸ 부저 소리", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.5": "ê°„í—ì ìœ¼ë¡œ ë†’ì€ í†¤ì˜ ê¸°ë³¸ 부저 소리", + "Entities.gmod_subway_81-717_mvm.Spawner.NM.Name": "주 공기관 ì••ë ¥", + "Entities.gmod_subway_81-717_mvm.Spawner.Battery.Name": "배터리", + "Entities.gmod_subway_81-717_mvm.Spawner.Switches.Name": "모든 ì°¨ëŸ‰ì˜ ì°¨ë‹¨ê¸°ë¥¼ 활성화 함", + "Entities.gmod_subway_81-717_mvm.Spawner.SwitchesR.Name": "ì°¨ë‹¨ê¸°ì˜ ìƒíƒœë¥¼ 무작위로 함", + "Entities.gmod_subway_81-717_mvm.Spawner.DoorsL.Name": "좌측 출입문 열림", + "Entities.gmod_subway_81-717_mvm.Spawner.DoorsR.Name": "우측 출입문 열림", + "Entities.gmod_subway_81-717_mvm.Spawner.GV.Name": "ê³ ì „ì•• 스위치", + "Entities.gmod_subway_81-717_mvm.Spawner.PB.Name": "주차 ì œë™", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.Name": "외부 출입문 확ì¸ë“± ë°°ì—´", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.1": "수í‰", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.2": "수ì§", + "Entities.gmod_subway_81-717_mvm.Spawner.MVM.Name": "MVM 마í¬", + "Entities.gmod_subway_81-717_mvm.Spawner.HandRail.Name": "ê°ì‹¤ ì†ìž¡ì´ 종류", + "Entities.gmod_subway_81-717_mvm.Spawner.HandRail.1": "구형", + "Entities.gmod_subway_81-717_mvm.Spawner.HandRail.2": "신형", + "Entities.gmod_subway_81-717_mvm.Spawner.SeatType.Name": "ì¢Œì„ ì¢…ë¥˜", + "Entities.gmod_subway_81-717_mvm.Spawner.SeatType.1": "구형", + "Entities.gmod_subway_81-717_mvm.Spawner.SeatType.2": "신형", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.Name": "ê°ì‹¤ 조명 종류", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.1": "종류 1", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.2": "종류 2", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.3": "종류 3", + "Entities.gmod_subway_81-717_mvm.Spawner.Breakers.Name": "ìš´ì „ì„ ë°°ì „ë°˜ 우측 배치", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.Name": "차내 ê´‘ê³  종류", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.1": "종류 1", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.2": "종류 2", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.3": "종류 3", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.4": "ê´‘ê³  ì—†ìŒ", + + "Entities.gmod_subway_81-720.Spawner.Texture.Name": "ë„색", + "Entities.gmod_subway_81-720.Spawner.PassTexture.Name": "ê°ì‹¤ 내장재", + "Entities.gmod_subway_81-720.Spawner.CabTexture.Name": "운전대 재질", + "Entities.gmod_subway_81-720.Spawner.Announcer.Name": "안내 방송", + "Entities.gmod_subway_81-720.Spawner.Scheme.Name": "ë…¸ì„ ë„ ì¢…ë¥˜", + "Entities.gmod_subway_81-720.Spawner.PassSchemesInvert.Name": "ì—­ë°©í–¥ 노선ë„", + "Entities.gmod_subway_81-720.Spawner.NM.Name": "주 공기관 ì••ë ¥", + "Entities.gmod_subway_81-720.Spawner.Battery.Name": "배터리", + "Entities.gmod_subway_81-720.Spawner.BRU.Name": "ê³ ì „ì•• 스위치", + "Entities.gmod_subway_81-720.Spawner.PVZR.Name": "ìš´ì „ì„ ë°°ì „ë°˜ì˜ ì°¨ë‹¨ê¸° ìƒíƒœë¥¼ 무작위로 함", + "Entities.gmod_subway_81-720.Spawner.PPZ.Name": "모든 ì°¨ëŸ‰ì˜ ì°¨ë‹¨ê¸°ë¥¼ 활성화 함", + "Entities.gmod_subway_81-720.Spawner.PPZDepot.Name": "모든 ì°¨ëŸ‰ì˜ ì°¨ë‹¨ê¸°ë¥¼ 비활성화 함(기지 ìž…ê³  ìƒíƒœ)", + "Entities.gmod_subway_81-720.Spawner.PPZR.Name": "모든 ì°¨ëŸ‰ì˜ ì°¨ë‹¨ê¸° ìƒíƒœë¥¼ 무작위로 함", + "Entities.gmod_subway_81-720.Spawner.DoorsL.Name": "좌측 출입문 열림", + "Entities.gmod_subway_81-720.Spawner.DoorsR.Name": "우측 출입문 열림", + + "Entities.gmod_subway_81-722.Spawner.Texture.Name": "ë„색", + "Entities.gmod_subway_81-722.Spawner.PassTexture.Name": "ê°ì‹¤ 내장재", + "Entities.gmod_subway_81-722.Spawner.CabTexture.Name": "운전대 재질", + "Entities.gmod_subway_81-722.Spawner.Announcer.Name": "안내방송", + "Entities.gmod_subway_81-722.Spawner.Scheme.Name": "ë…¸ì„ ë„ ì¢…ë¥˜", + "Entities.gmod_subway_81-722.Spawner.SarmatInvert.Name": "ì—­ë°©í–¥ 노선ë„", + "Entities.gmod_subway_81-722.Spawner.NM.Name": "주 공기관 ì••ë ¥", + "Entities.gmod_subway_81-722.Spawner.Battery.Name": "배터리", + "Entities.gmod_subway_81-722.Spawner.Switches.Name": "모든 ì°¨ëŸ‰ì˜ ì°¨ë‹¨ê¸°ë¥¼ 활성화 함", + "Entities.gmod_subway_81-722.Spawner.SwitchesR.Name": "ì°¨ë‹¨ê¸°ì˜ ìƒíƒœë¥¼ 무작위로 함", + "Entities.gmod_subway_81-722.Spawner.DoorsL.Name": "좌측 출입문 열림", + "Entities.gmod_subway_81-722.Spawner.DoorsR.Name": "우측 출입문 열림", + + "Spawner.Close": "닫기", + "Spawner.Spawn": "완료" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/mypatch.patch b/lua/metrostroi_data/languages_/_unfinished/mypatch.patch new file mode 100644 index 0000000..03552e2 --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/mypatch.patch @@ -0,0 +1,527 @@ +diff --git a/lua/metrostroi_data/languages/en_base.lua b/lua/metrostroi_data/languages/en_base.lua +index 831a705..8874874 100644 +--- a/lua/metrostroi_data/languages/en_base.lua ++++ b/lua/metrostroi_data/languages/en_base.lua +@@ -7,6 +7,12 @@ return [[ + "Panel.DrawDebugInfo": "Draw debugging info", + "Panel.DisableCamAccel": "Disable cam acceleration", + "Panel.DisableHoverText": "Disable hover text", ++ "Panel.DrawCams": "Render cameras", ++ "Panel.FOV": "Field of view", ++ ++ "Train.Common.Camera0": "Driver seat", ++ ++ "Train.Buttons.Sealed": "Sealed", + + "Entities.gmod_subway_base.Name": "Subway base", + "Entities.gmod_subway_81-703.Name": "E", +diff --git a/lua/metrostroi_data/languages/en_buttons_720.lua b/lua/metrostroi_data/languages/en_buttons_720.lua +index 73e5e54..efd4b8a 100644 +--- a/lua/metrostroi_data/languages/en_buttons_720.lua ++++ b/lua/metrostroi_data/languages/en_buttons_720.lua +@@ -215,6 +215,22 @@ + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV32Toggle": "SF32: (placeholder)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV33Toggle": "SF33: (placeholder)", + "Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Brake line isolation valve", +- "Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Train line isolation valve" ++ "Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Train line isolation valve", ++ ++ "Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1USet": "IGLA: First button UP", ++ "Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1Set": "IGLA: First button", ++ "Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1DSet": "IGLA: First button DOWN", ++ "Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2USet": "IGLA: Second button UP", ++ "Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2Set": "IGLA: Second button", ++ "Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2DSet": "IGLA: Second button DOWN", ++ "Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLASR": "IGLA: SR", ++ "Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLARX": "IGLA: RX", ++ "Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAErr": "IGLA: Malfunction", ++ "Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAOSP": "IGLA: OSP(Fire extinguisher)", ++ "Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAPI": "IGLA: PI(Fire indication)", ++ "Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAOff": "IGLA: Off", ++ "Entities.gmod_subway_81-720.Buttons.PUU.KAHkToggle": "KAH button cover", ++ "Entities.gmod_subway_81-720.Buttons.PUU.ALSkToggle": "ALS button cover", ++ "Entities.gmod_subway_81-720.Buttons.PUR.AccelRateSet": "Acceleration rate(Slope mode)" + } + ]] +diff --git a/lua/metrostroi_data/languages/ru_base.lua b/lua/metrostroi_data/languages/ru_base.lua +index 72cc4c3..1cf405f 100644 +--- a/lua/metrostroi_data/languages/ru_base.lua ++++ b/lua/metrostroi_data/languages/ru_base.lua +@@ -7,6 +7,12 @@ return [[ + "Panel.DrawDebugInfo": "Отображать отладочную информацию", + "Panel.DisableCamAccel": "Откл. ÑимулÑцию ÐºÐ°Ñ‡Ð°Ð½Ð¸Ñ Ð³Ð¾Ð»Ð¾Ð²Ñ‹", + "Panel.DisableHoverText": "Откл. вÑплывающий текÑÑ‚", ++ "Panel.DrawCams": "ОтриÑовывать камеры", ++ "Panel.FOV": "Поле зрениÑ", ++ ++ "Train.Common.Camera0": "МеÑто машиниÑта", ++ ++ "Train.Buttons.Sealed": "Запломбировано", + + "Entities.gmod_subway_base.Name": "База метропоездов", + "Entities.gmod_subway_81-703.Name": "E", +@@ -48,6 +54,41 @@ return [[ + "Entities.gmod_track_powermeter.Name": "Измеритель напрÑжениÑ", + "Entities.gmod_track_controller.Name": "ДиÑпечерÑкий пульт(не работает)", + "Entities.gmod_track_udochka.Name": "Удочка", +- "Entities.gmod_train_spawner.Name": "Спавнер поездов" ++ "Entities.gmod_train_spawner.Name": "Спавнер поездов", ++ ++ "Train.703.VU": "Выключатель управлениÑ", ++ "Train.703.Breakers1" : "Батареи", ++ "Train.703.Breakers2" : "Ðвтоматы", ++ "Train.703.RCARS" : "РЦ-ÐРС", ++ "Train.703.Left" : "Панель помощника", ++ "Train.703.Parking" : "УÐВРи ручной тормоз", ++ "Train.703.ASNP" : "ÐСÐП", ++ "Train.703.IGLA" : "ИГЛÐ", ++ "Train.717.Breakers1": "Центральные автоматы", ++ "Train.717.VB1": "Панель Ñ Ð Ð¦", ++ "Train.717.Breakers2": "Правые автоматы", ++ "Train.717.VB2": "ÐижнÑÑ Ð¿Ð°Ð½ÐµÐ»ÑŒ Ñ Ð Ð¦", ++ "Train.717.UAVA": "УÐÐ’Ð", ++ "Train.717.Pneumo": "ПневматичеÑкие краны", ++ "Train.717.Helpers": "Пульт помощника", ++ "Train.717.Block4": "4 блок", ++ "Train.717.IGLA": "ИГЛÐ", ++ "Train.717.ASNP" : "ÐСÐП", ++ "Train.720.CameraCond": "Панель кондиционеров", ++ "Train.720.CameraPPZ": "Панель поездной защиты", ++ "Train.720.CameraPV": "Панель вÑпомогательных кнопок", ++ "Train.720.CameraASNP": "ÐСÐП", ++ "Train.720.CameraVityaz": "СÐУ ВитÑзь", ++ "Train.720.CameraKRMH": "Кран КРМШ", ++ "Train.720.CameraPVZ": "Панель вагонной защиты", ++ "Train.722.Breakers": "Ðвтоматы поездной защиты", ++ "Train.722.PU2_1": "Панель кнопок", ++ "Train.722.PU2_2": "Панель выключателей", ++ "Train.722.Vityaz": "Экран СÐУ ВитÑзь", ++ "Train.722.SARMAT": "Экран БМЦИК Сармат", ++ "Train.722.CabLights": "Панель оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹", ++ "Train.722.Route": "УÑтановка номера маршрута", ++ "Train.722.Disconnects": "Концевые краны", ++ "Train.722.KRMH": "Выключатель КРМШ и РВТБ" + } + ]] +diff --git a/lua/metrostroi_data/languages/ru_buttons_717.lua b/lua/metrostroi_data/languages/ru_buttons_717.lua +index 81017b6..80c134f 100644 +--- a/lua/metrostroi_data/languages/ru_buttons_717.lua ++++ b/lua/metrostroi_data/languages/ru_buttons_717.lua +@@ -14,7 +14,7 @@ return [[ + "Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle": "Клапан разобщениÑ", + "Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveBLDisconnectToggle": "Кран двойной Ñ‚Ñги тормозной магиÑтрали", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_UNchToggle": "УÐЧ: УÑилитель низких чаÑтот", +- "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_ZSToggle": "ЗС: Звук в Ñалоне", ++ "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_ZSToggle": "ЭС: Контроль ÑкÑтренной ÑвÑзи\nES: Emergency communication control", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_GToggle": "Громкоговоритель", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_RadioToggle": "Радиоинформатор (вÑтроеный)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_Program1Set": "Программа 1", +@@ -45,7 +45,6 @@ return [[ + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_2Toggle": "ОÑвещение кабины", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_3Toggle": "ОÑвещение пульта", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ALSFreqToggle": "Дешифратор: Переключение режима приёмных катушек 1/5 или 2/6", +- "Entities.gmod_subway_81-717_mvm.Buttons.Main.ParkingBrakeSignToggle": "Табличка \"ОТПУСТИ СТОЯÐОЧÐЫЙ ТОРМОЗ\"", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.ParkingBrakeToggle": "СтоÑночный тормоз", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.DriverValveTLDisconnectToggle": "Кран двойной Ñ‚Ñги напорной магиÑтрали", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA1Set": "ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°", +@@ -66,25 +65,6 @@ return [[ + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchSec": "СЕК\nSecond", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchArrival": "Arrival times", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchStations": "Station name", +- "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!Speedometer": "Индикатор ÑкороÑти\nSpeed indicator", +- "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLSN": "ЛСÐ: Лампа Ñигнализации неиÑправноÑти\nLSN: Failure indicator light (power circuits failed to assemble)", +- "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampRP": "РП: КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки\nRP: Red overload relay light (power circuits failed to assemble)", +- "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLHRK": "ЛхРК: Лампа хода реоÑтатного контроллера\nLhRK: Rheostat controller motion light", +- "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLKT": "ЛКТ: Контроль тормоза\nLKT: ARS braking indicator", +- "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLKVD": "ЛКВД: Контроль Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹\nLKVD: ARS engine shutdown indicator", +- "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLKVC": "ЛКВЦ: Лампа контактора выÑоковольтных цепей\nLKVC: High voltage not available", +- "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARSOch": "ОЧ: ОтÑутÑтвие чаÑтоты ÐРС\nOCh: No ARS frequency", +- "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS0": "0: Сигнал ÐРС оÑтановки\n0: ARS stop signal", +- "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS40": "40: Ограничение ÑкороÑти 40 км/ч\nSpeed limit 40 kph", +- "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS60": "60: Ограничение ÑкороÑти 60 км/ч\nSpeed limit 60 kph", +- "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS70": "70: Ограничение ÑкороÑти 70 км/ч\nSpeed limit 70 kph", +- "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS80": "80: Ограничение ÑкороÑти 80 км/ч\nSpeed limit 80 kph", +- "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLSD1": "ЛСД: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹\nLSD: Door state light (doors are closed)", +- "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLSD2": "ЛСД: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹\nLSD: Door state light (doors are closed)", +- "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLST": "ЛСТ: Лампа Ñигнализации торможениÑ\nLST: Brakes engaged", +- "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLVD": "ЛВД: Лампа Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹\nLVD: Engines engaged", +- "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLN": "ЛÐ: Лампа направлениÑ\nLN: Direction signal", +- "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLRS": "ЛРС: Лампа равенÑтва ÑкороÑтей\nLRS: Speed equality light (next segment speed limit equal or greater to current)", + "Entities.gmod_subway_81-717_mvm.Buttons.PneumaticPanels.!CylinderPressure": "Давление в тормозных цилиндрах (ТЦ)\nBrake cylinder pressure", + "Entities.gmod_subway_81-717_mvm.Buttons.PneumaticPanels.!LinePressure": "Давление в магиÑтралÑÑ… (краÑнаÑ: тормозной, чёрнаÑ: напорной)\nPressure in pneumatic lines (red: brake line, black: train line)", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.RC1Toggle": "РЦ-1: Разъединитель цепей ÐРС", +@@ -150,12 +130,6 @@ return [[ + "Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor.PassengerDoor": "Дверь в кабину машиниÑта из Ñалона", + "Entities.gmod_subway_81-717_mvm.Buttons.GV.GVToggle": "Главный выключатель", + "Entities.gmod_subway_81-717_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle": "Стопкран", +- "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.PrevSign": "ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð½Ð°Ð´Ð¿Ð¸ÑÑŒ", +- "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.NextSign": "Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð½Ð°Ð´Ð¿Ð¸ÑÑŒ", +- "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num2P": "Маршрут: Увеличить чиÑло 2", +- "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num2M": "Маршрут: Уменьшить чиÑло 2", +- "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num1P": "Маршрут: Увеличить чиÑло 1", +- "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num1M": "Маршрут: Уменьшить чиÑло 1", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.L_4Toggle": "Выключатель фар", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VUSToggle": "ВУС: Выключатель уÑиленого Ñвета ходовых фар", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VAHToggle": "Ð’ÐÐ¥: Включение аварийного хода (неиÑправноÑть реле педали безопаÑноÑти)", +@@ -215,24 +189,6 @@ return [[ + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A9Toggle": "A9 Red lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A46Toggle": "A46 White lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A47Toggle": "A47 White lamp", +- "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!Speedometer": "Индикатор ÑкороÑти\nSpeed indicator", +- "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LSD": "ЛСД: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹\nLSD: Door state light (doors are closed)", +- "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LOCh": "ОЧ: ОтÑутÑтвие чаÑтоты ÐРС\nNCh: No ARS frequency", +- "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L0": "0: Сигнал ÐРС оÑтановки\n0: ARS stop signal", +- "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LRS": "ЛРС: Лампа равенÑтва ÑкороÑтей\nLRS: Speed equality light (next segment speed limit equal or greater to current)", +- "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L40": "40: Ограничение ÑкороÑти 40 км/ч\nSpeed limit 40 kph", +- "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L60": "60: Ограничение ÑкороÑти 60 км/ч\nSpeed limit 60 kph", +- "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L80": "80: Ограничение ÑкороÑти 80 км/ч\nSpeed limit 80 kph", +- "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L70": "70: Ограничение ÑкороÑти 70 км/ч\nSpeed limit 60 kph", +- "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LRK": "РК: Лампа хода реоÑтатного контроллера\nRK: Rheostat controller motion light", +- "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LEKK": "", +- "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LPU": "", +- "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LKVD": "ЛКВД: Контроль Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹\nLKVD: ARS engine shutdown indicator", +- "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LKT": "ЛКТ: Контроль тормоза\nLKT: ARS braking indicator", +- "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LRP": "РП: КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки\nRP: Red overload relay light (power circuits failed to assemble)", +- "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LKVC": "ЛКВЦ: Лампа контактора выÑоковольтных цепей\nLKVC: High voltage not available", +- "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LVD": "ЛВД: Лампа Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹\nLVD: Engines engaged", +- "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LST": "ЛСТ: Лампа Ñигнализации торможениÑ\nLST: Brakes engaged", + "Entities.gmod_subway_81-717_mvm.Buttons.CabinDoor.CabinDoor": "Дверь в кабину машиниÑта", + "Entities.gmod_subway_81-717_mvm.Buttons.Reverser.KVReverserDown": "РеверÑор назад", + "Entities.gmod_subway_81-717_mvm.Buttons.Reverser.KVReverserUp": "РеверÑор вперёд", +@@ -292,6 +248,71 @@ return [[ + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A22Toggle": "A22 Turn on KK", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A23Toggle": "A23 Emergency motor-compressor turn on", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A39Toggle": "A39 Emergency control", +- "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A14Toggle": "A14 Train wire 18" ++ "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A14Toggle": "A14 Train wire 18", ++ ++ ++ "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!Speedometer1": "Индикатор ÑкороÑти\nSpeed indicator", ++ "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!Speedometer2": "Индикатор ÑкороÑти\nSpeed indicator", ++ "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!ARSOch": "ОЧ: ОтÑутÑтвие чаÑтоты ÐРС\nOCh: No ARS frequency", ++ "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!ARS0": "0: Сигнал ÐРС оÑтановки\n0: ARS stop signal", ++ "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!ARS40": "40: Ограничение ÑкороÑти 40 км/ч\nSpeed limit 40 kph", ++ "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!ARS60": "60: Ограничение ÑкороÑти 60 км/ч\nSpeed limit 60 kph", ++ "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!ARS70": "70: Ограничение ÑкороÑти 70 км/ч\nSpeed limit 70 kph", ++ "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!ARS80": "80: Ограничение ÑкороÑти 80 км/ч\nSpeed limit 80 kph", ++ "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLSD1": "ЛСД: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹\nLSD: Door state light (doors are closed)", ++ "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLSD2": "ЛСД: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹\nLSD: Door state light (doors are closed)", ++ "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLVD": "1: Лампа Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹", ++ "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLHRK": "2: Лампа хода реоÑтатного контроллера", ++ "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLST": "6: Лампа Ñигнализации торможениÑ", ++ "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLRD": "ДВ", ++ "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampRP": "РП: КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки\nRP: Red overload relay light (power circuits failed to assemble)", ++ "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLSN": "ЛСÐ: Лампа Ñигнализации неиÑправноÑти\nLSN: Failure indicator light (power circuits failed to assemble)", ++ "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLKVD": "ЛКВД: Контроль Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹\nLKVD: ARS engine shutdown indicator", ++ "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLKT": "ЛКТ: Контроль тормоза\nLKT: ARS braking indicator", ++ "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampDV": "ДВ", ++ "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA23": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ Ð¸ Ñ‚Ñ€ÐµÑ‚ÑŒÑ ÐºÐ½Ð¾Ð¿ÐºÐ°", ++ "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.!IGLAFire": "ИГЛÐ: Пожар", ++ "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.!IGLAErr": "ИГЛÐ: ÐеиÑправноÑть", ++ "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!Speedometer1": "Индикатор ÑкороÑти\nSpeed indicator", ++ "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!Speedometer2": "Индикатор ÑкороÑти\nSpeed indicator", ++ "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!ARSOch": "ОЧ: ОтÑутÑтвие чаÑтоты ÐРС\nOCh: No ARS frequency", ++ "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!ARS0": "0: Сигнал ÐРС оÑтановки\n0: ARS stop signal", ++ "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!ARS40": "40: Ограничение ÑкороÑти 40 км/ч\nSpeed limit 40 kph", ++ "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!ARS60": "60: Ограничение ÑкороÑти 60 км/ч\nSpeed limit 60 kph", ++ "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!ARS70": "70: Ограничение ÑкороÑти 70 км/ч\nSpeed limit 70 kph", ++ "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!ARS80": "80: Ограничение ÑкороÑти 80 км/ч\nSpeed limit 80 kph", ++ "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLSD1": "ЛСД: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹\nLSD: Door state light (doors are closed)", ++ "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLSD2": "ЛСД: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹\nLSD: Door state light (doors are closed)", ++ "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLHRK": "ЛхРК: Лампа хода реоÑтатного контроллера\nLhRK: Rheostat controller motion light", ++ "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampRP": "РП: КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки\nRP: Red overload relay light (power circuits failed to assemble)", ++ "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLSN": "ЛСÐ: Лампа Ñигнализации неиÑправноÑти\nLSN: Failure indicator light (power circuits failed to assemble)", ++ "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLN": "ЛÐ: Лампа направлениÑ\nLN: Direction signal", ++ "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLKVD": "ЛКВД: Контроль Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹\nLKVD: ARS engine shutdown indicator", ++ "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLKT": "ЛКТ: Контроль тормоза\nLKT: ARS braking indicator", ++ "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLKVC": "ЛКВЦ: Лампа контактора выÑоковольтных цепей\nLKVC: High voltage not available", ++ "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLRS": "ЛРС: Лампа равенÑтва ÑкороÑтей\nLRS: Speed equality light (next segment speed limit equal or greater to current)", ++ "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLVD": "ЛВД: Лампа Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹\nLVD: Engines engaged", ++ "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLST": "ЛСТ: Лампа Ñигнализации торможениÑ\nLST: Brakes engaged", ++ "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!Speedometer1": "Индикатор ÑкороÑти\nSpeed indicator", ++ "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!Speedometer2": "Индикатор ÑкороÑти\nSpeed indicator", ++ "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!ARSOch": "ОЧ: ОтÑутÑтвие чаÑтоты ÐРС\nOCh: No ARS frequency", ++ "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!ARS0": "0: Сигнал ÐРС оÑтановки\n0: ARS stop signal", ++ "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!ARS40": "40: Ограничение ÑкороÑти 40 км/ч\nSpeed limit 40 kph", ++ "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!ARS60": "60: Ограничение ÑкороÑти 60 км/ч\nSpeed limit 60 kph", ++ "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!ARS70": "70: Ограничение ÑкороÑти 70 км/ч\nSpeed limit 70 kph", ++ "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!ARS80": "80: Ограничение ÑкороÑти 80 км/ч\nSpeed limit 80 kph", ++ "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLSD1": "ЛСД: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹\nLSD: Door state light (doors are closed)", ++ "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLSD2": "ЛСД: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹\nLSD: Door state light (doors are closed)", ++ "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLVD": "ЛВД: Лампа Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹", ++ "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLHRK": "2: Лампа хода реоÑтатного контроллера", ++ "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLST": "6: Лампа Ñигнализации торможениÑ", ++ "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampRP": "РП: КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки\nRP: Red overload relay light (power circuits failed to assemble)", ++ "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLSN": "ЛСÐ: Лампа Ñигнализации неиÑправноÑти\nLSN: Failure indicator light (power circuits failed to assemble)", ++ "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLKVD": "ЛКВД: Контроль Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹\nLKVD: ARS engine shutdown indicator", ++ "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLKVC": "ЛКВЦ: Лампа контактора выÑоковольтных цепей", ++ "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLKT": "ЛКТ: Контроль тормоза\nLKT: ARS braking indicator", ++ "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLEKK": "ГЛЕБ: Лампа работы Глеба", ++ "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLN": "ЛÐ: Лампа направлениÑ\nLN: Direction signal", ++ "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLRS": "ЛРС: Лампа равенÑтва ÑкороÑтей\nLRS: Speed equality light (next segment speed limit equal or greater to current)" + } + ]] +diff --git a/lua/metrostroi_data/languages/ru_buttons_720.lua b/lua/metrostroi_data/languages/ru_buttons_720.lua +index 7cbe27d..b00c86a 100644 +--- a/lua/metrostroi_data/languages/ru_buttons_720.lua ++++ b/lua/metrostroi_data/languages/ru_buttons_720.lua +@@ -161,7 +161,6 @@ return [[ + "Entities.gmod_subway_81-720.Buttons.PUU.!Acc": "УÑкорение", + "Entities.gmod_subway_81-720.Buttons.PUU.!Forw": "Движение вперёд", + "Entities.gmod_subway_81-720.Buttons.PUU.!Back": "Движение назад", +- "Entities.gmod_subway_81-720.Buttons.PUR.AccelRateToggle": "Темп разгона", + "Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeAddSet": "(резервный) Тормоз", + "Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeReleaseSet": "(резервный) ОтпуÑк", + "Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeToggle": "Тормоз резервный", +@@ -215,6 +214,22 @@ return [[ + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV32Toggle": "SF32: Резерв", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV33Toggle": "SF33: Резерв", + "Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", +- "Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали" ++ "Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", ++ ++ "Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1USet": "ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вверх", ++ "Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1Set": "ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°", ++ "Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1DSet": "ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вниз", ++ "Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2USet": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вверх", ++ "Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2Set": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°", ++ "Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2DSet": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вниз", ++ "Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLASR": "ИГЛÐ: SR", ++ "Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLARX": "ИГЛÐ: RX", ++ "Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAErr": "ИГЛÐ: Отказ", ++ "Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAOSP": "ИГЛÐ: ОСП(Сработка огнетушителей)", ++ "Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAPI": "ИГЛÐ: ПИ(Пожар)", ++ "Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAOff": "ИГЛÐ: Откл", ++ "Entities.gmod_subway_81-720.Buttons.PUU.KAHkToggle": "Крышка кнопки КÐÐ¥", ++ "Entities.gmod_subway_81-720.Buttons.PUU.ALSkToggle": "Крышка кнопки ÐЛС", ++ "Entities.gmod_subway_81-720.Buttons.PUR.AccelRateSet": "Темп разгона(Режим подъём)" + } + ]] +diff --git a/lua/metrostroi_data/languages/ru_buttons_ezh3.lua b/lua/metrostroi_data/languages/ru_buttons_ezh3.lua +index 08c50f9..1078b41 100644 +--- a/lua/metrostroi_data/languages/ru_buttons_ezh3.lua ++++ b/lua/metrostroi_data/languages/ru_buttons_ezh3.lua +@@ -74,7 +74,6 @@ return [[ + "Entities.gmod_subway_ezh3.Buttons.Main.KRPSet": "КРП: Кнопка резервного пуÑка\nKRP: Emergency start button", + "Entities.gmod_subway_ezh3.Buttons.Main.RSTToggle": "ВПР: Включение поездной радиоÑвÑзи\nVPR: Radiostation enable", + "Entities.gmod_subway_ezh3.Buttons.Main.R_GToggle": "Громкоговоритель\nLoudspeaker: Sound in cabin enable", +- "Entities.gmod_subway_ezh3.Buttons.Main.R_ZSToggle": "Радиоинформатор: Звук в Ñалоне\nZS: Sound in wagons enable", + "Entities.gmod_subway_ezh3.Buttons.Main.Custom2Set": "Ðезаведенный тумблер", + "Entities.gmod_subway_ezh3.Buttons.Main.Custom3Set": "Ðезаведенный тумблер", + "Entities.gmod_subway_ezh3.Buttons.Main.ASNPPlay": "Индикатор работы программы информатора", +@@ -135,6 +134,21 @@ return [[ + "Entities.gmod_subway_em508t.Buttons.HelperPanel.VDLSet": "ВДЛ: Выключатель левых дверей\nVDL: Left doors open", + "Entities.gmod_subway_em508t.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle": "Кран двойной Ñ‚Ñги тормозной магиÑтрали\nTrain line disconnect valve", + "Entities.gmod_subway_em508t.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle": "Кран двойной Ñ‚Ñги напорной магиÑтрали\nBrake line disconnect valve", +- "Entities.gmod_subway_em508t.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Выключение воздухораÑпределителÑ" ++ "Entities.gmod_subway_em508t.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Выключение воздухораÑпределителÑ", ++ ++ ++ "Entities.gmod_subway_ezh3.Buttons.Main.Custom1Toggle": "Ðезаведенный тумблер", ++ "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1USet": "ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вверх", ++ "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1Set": "ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°", ++ "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1DSet": "ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вниз", ++ "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2USet": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вверх", ++ "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2Set": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°", ++ "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2DSet": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вниз", ++ "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLASR": "ИГЛÐ: SR", ++ "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLARX": "ИГЛÐ: RX", ++ "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAErr": "ИГЛÐ: Отказ", ++ "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAOSP": "ИГЛÐ: ОСП(Сработка огнетушителей)", ++ "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAPI": "ИГЛÐ: ПИ(Пожар)", ++ "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAOff": "ИГЛÐ: Откл" + } + ]] +diff --git a/lua/metrostroi_data/languages/ru_spawner.lua b/lua/metrostroi_data/languages/ru_spawner.lua +index 015d43c..08a7fa4 100644 +--- a/lua/metrostroi_data/languages/ru_spawner.lua ++++ b/lua/metrostroi_data/languages/ru_spawner.lua +@@ -7,7 +7,7 @@ return [[ + "Spawner.Trains1": "Поездов", + "Spawner.Trains2": "МакÑимально", + "Spawner.WagNum": "Вагонов", +- "Spawner.AutoCouple": "ÐвтоматичеÑки Ñцепить\nвагоны","Entities.gmod_subway_em.Buttons.HelperPanel.VDLSet": "ВДЛ: Выключатель левых дверей\nVDL: Left doors open", ++ "Spawner.AutoCouple": "ÐвтоматичеÑки Ñцепить вагоны", + + "Entities.gmod_subway_81-717_mvm.Spawner.Texture.Name": "ОкраÑка кузова", + "Entities.gmod_subway_81-717_mvm.Spawner.PassTexture.Name": "ОкраÑка Ñалона", +@@ -41,10 +41,6 @@ return [[ + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.8": "Стандартный 2", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.9": "Стандартный 3", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.10": "Беззвучный(БПÐ-115)", +- "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.Name": "Звук контроллера", +- "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.1": "Тип 1", +- "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.2": "Тип 2", +- "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.3": "Тип 3", + "Entities.gmod_subway_81-717_mvm.Spawner.NewKV.Name": "ÐÐ¾Ð²Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ ГРКВ", + "Entities.gmod_subway_81-717_mvm.Spawner.HornType.Name": "ПитерÑкий тифон", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.Name": "Звук звонка", +@@ -53,13 +49,13 @@ return [[ + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.3": "Стандартный Ñ Ð²Ñ‹Ñоким тоном", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.4": "Стандартный прерывиÑтый Ñ Ð½Ð¸Ð·ÐºÐ¸Ð¼ тоном", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.5": "Стандартный прерывиÑтый Ñ Ð²Ñ‹Ñоким тоном", +- "Entities.gmod_subway_81-717_mvm.Spawner.NM.Name": "Давление напорной\nмагиÑтрали", ++ "Entities.gmod_subway_81-717_mvm.Spawner.NM.Name": "Давление напорной магиÑтрали", + "Entities.gmod_subway_81-717_mvm.Spawner.Battery.Name": "Вкл. батарею", + "Entities.gmod_subway_81-717_mvm.Spawner.Switches.Name": "Вкл. вÑе автоматики", +- "Entities.gmod_subway_81-717_mvm.Spawner.SwitchesR.Name": "Ðвтоматики будут\nвключены Ñлучайно", ++ "Entities.gmod_subway_81-717_mvm.Spawner.SwitchesR.Name": "Ðвтоматики будут включены Ñлучайно", + "Entities.gmod_subway_81-717_mvm.Spawner.DoorsL.Name": "Открыть левые двери", + "Entities.gmod_subway_81-717_mvm.Spawner.DoorsR.Name": "Открыть правые двери", +- "Entities.gmod_subway_81-717_mvm.Spawner.GV.Name": "Вкл. главный\nвыключатель", ++ "Entities.gmod_subway_81-717_mvm.Spawner.GV.Name": "Вкл. главный выключатель", + "Entities.gmod_subway_81-717_mvm.Spawner.PB.Name": "Вкл. ÑтоÑночный тормоз", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.Name": "Тип бортовых ламп", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.1": "Горизнонтальные", +@@ -87,14 +83,14 @@ return [[ + "Entities.gmod_subway_81-720.Spawner.CabTexture.Name": "ОкраÑка кабины", + "Entities.gmod_subway_81-720.Spawner.Announcer.Name": "Информатор", + "Entities.gmod_subway_81-720.Spawner.Scheme.Name": "Ðаддверные Ñхемы", +- "Entities.gmod_subway_81-720.Spawner.PassSchemesInvert.Name": "Инвертировать\nнаддверные Ñхемы", +- "Entities.gmod_subway_81-720.Spawner.NM.Name": "Давление напорной\nмагиÑтрали", ++ "Entities.gmod_subway_81-720.Spawner.PassSchemesInvert.Name": "Инвертировать наддверные Ñхемы", ++ "Entities.gmod_subway_81-720.Spawner.NM.Name": "Давление напорной магиÑтрали", + "Entities.gmod_subway_81-720.Spawner.Battery.Name": "Вкл. батарею", + "Entities.gmod_subway_81-720.Spawner.BRU.Name": "Вкл. БРУ(ГВ)", +- "Entities.gmod_subway_81-720.Spawner.PVZR.Name": "Ðвтоматики на ПВЗ бу-\nдут включены Ñлучайно", +- "Entities.gmod_subway_81-720.Spawner.PPZ.Name": "Вкл. вÑе\nпоездные автоматики", +- "Entities.gmod_subway_81-720.Spawner.PPZDepot.Name": "Выкл. автоматики\nкак в депо", +- "Entities.gmod_subway_81-720.Spawner.PPZR.Name": "Ðвтоматики на ППЗ бу-\nдут включены Ñлучайно", ++ "Entities.gmod_subway_81-720.Spawner.PVZR.Name": "Ðвтоматики на ПВЗ бу- дут включены Ñлучайно", ++ "Entities.gmod_subway_81-720.Spawner.PPZ.Name": "Вкл. вÑе поездные автоматики", ++ "Entities.gmod_subway_81-720.Spawner.PPZDepot.Name": "Выкл. автоматики как в депо", ++ "Entities.gmod_subway_81-720.Spawner.PPZR.Name": "Ðвтоматики на ППЗ бу- дут включены Ñлучайно", + "Entities.gmod_subway_81-720.Spawner.DoorsL.Name": "Открыть левые двери", + "Entities.gmod_subway_81-720.Spawner.DoorsR.Name": "Открыть правые двери", + +@@ -103,14 +99,127 @@ return [[ + "Entities.gmod_subway_81-722.Spawner.CabTexture.Name": "ОкраÑка кабины", + "Entities.gmod_subway_81-722.Spawner.Announcer.Name": "Информатор", + "Entities.gmod_subway_81-722.Spawner.Scheme.Name": "Ðаддверные Ñхемы", +- "Entities.gmod_subway_81-722.Spawner.SarmatInvert.Name": "Инвертировать\nнаддверные Ñхемы", +- "Entities.gmod_subway_81-722.Spawner.NM.Name": "Давление напорной\nмагиÑтрали", ++ "Entities.gmod_subway_81-722.Spawner.SarmatInvert.Name": "Инвертировать наддверные Ñхемы", ++ "Entities.gmod_subway_81-722.Spawner.NM.Name": "Давление напорной магиÑтрали", + "Entities.gmod_subway_81-722.Spawner.Battery.Name": "Вкл. батарею", + "Entities.gmod_subway_81-722.Spawner.Switches.Name": "Вкл. вÑе автоматики", +- "Entities.gmod_subway_81-722.Spawner.SwitchesR.Name": "Ðвтоматики будут\nвключены Ñлучайно", ++ "Entities.gmod_subway_81-722.Spawner.SwitchesR.Name": "Ðвтоматики будут включены Ñлучайно", + "Entities.gmod_subway_81-722.Spawner.DoorsL.Name": "Открыть левые двери", + "Entities.gmod_subway_81-722.Spawner.DoorsR.Name": "Открыть правые двери", + ++ ++ "Entities.gmod_subway_ezh.Spawner.Texture.Name": "ОкраÑка кузова", ++ "Entities.gmod_subway_ezh.Spawner.PassTexture.Name": "ОкраÑка Ñалона", ++ "Entities.gmod_subway_ezh.Spawner.CabTexture.Name": "ОкраÑка кабины", ++ "Entities.gmod_subway_ezh.Spawner.Announcer.Name": "Информатор", ++ "Entities.gmod_subway_ezh.Spawner.HornType.Name": "ПитерÑкий тифон", ++ "Entities.gmod_subway_ezh.Spawner.NM.Name": "Давление напорной магиÑтрали", ++ "Entities.gmod_subway_ezh.Spawner.Battery.Name": "Вкл. батарею", ++ "Entities.gmod_subway_ezh.Spawner.AV8B.Name": "Вкл. ÐÐ’8Б", ++ "Entities.gmod_subway_ezh.Spawner.DoorsL.Name": "Открыть левые двери", ++ "Entities.gmod_subway_ezh.Spawner.DoorsR.Name": "Открыть правые двери", ++ "Entities.gmod_subway_ezh.Spawner.GV.Name": "Вкл. главный выключатель", ++ ++ "Entities.gmod_subway_em508.Spawner.Texture.Name": "ОкраÑка кузова", ++ "Entities.gmod_subway_em508.Spawner.PassTexture.Name": "ОкраÑка Ñалона", ++ "Entities.gmod_subway_em508.Spawner.CabTexture.Name": "ОкраÑка кабины", ++ "Entities.gmod_subway_em508.Spawner.Announcer.Name": "Информатор", ++ "Entities.gmod_subway_em508.Spawner.HornType.Name": "ПитерÑкий тифон", ++ "Entities.gmod_subway_em508.Spawner.NM.Name": "Давление напорной магиÑтрали", ++ "Entities.gmod_subway_em508.Spawner.Battery.Name": "Вкл. батарею", ++ "Entities.gmod_subway_em508.Spawner.AV8B.Name": "Вкл. ÐÐ’8Б", ++ "Entities.gmod_subway_em508.Spawner.DoorsL.Name": "Открыть левые двери", ++ "Entities.gmod_subway_em508.Spawner.DoorsR.Name": "Открыть правые двери", ++ "Entities.gmod_subway_em508.Spawner.GV.Name": "Вкл. главный выключатель", ++ ++ "Entities.gmod_subway_ezh3.Spawner.Texture.Name": "ОкраÑка кузова", ++ "Entities.gmod_subway_ezh3.Spawner.PassTexture.Name": "ОкраÑка Ñалона", ++ "Entities.gmod_subway_ezh3.Spawner.CabTexture.Name": "ОкраÑка кабины", ++ "Entities.gmod_subway_ezh3.Spawner.Announcer.Name": "Информатор", ++ "Entities.gmod_subway_ezh3.Spawner.HornType.Name": "ПитерÑкий тифон", ++ "Entities.gmod_subway_ezh3.Spawner.NM.Name": "Давление напорной магиÑтрали", ++ "Entities.gmod_subway_ezh3.Spawner.Battery.Name": "Вкл. батарею", ++ "Entities.gmod_subway_ezh3.Spawner.AV8B.Name": "Вкл. ÐÐ’8Б", ++ "Entities.gmod_subway_ezh3.Spawner.DoorsL.Name": "Открыть левые двери", ++ "Entities.gmod_subway_ezh3.Spawner.DoorsR.Name": "Открыть правые двери", ++ "Entities.gmod_subway_ezh3.Spawner.GV.Name": "Вкл. главный выключатель", ++ ++ "Entities.gmod_subway_81-717_lvz.Spawner.Texture.Name": "ОкраÑка кузова", ++ "Entities.gmod_subway_81-717_lvz.Spawner.PassTexture.Name": "ОкраÑка Ñалона", ++ "Entities.gmod_subway_81-717_lvz.Spawner.CabTexture.Name": "ОкраÑка кабины", ++ "Entities.gmod_subway_81-717_lvz.Spawner.Announcer.Name": "Информатор", ++ "Entities.gmod_subway_81-717_lvz.Spawner.Lighter.Name": "ПриÑутÑтвие зажигалки", ++ "Entities.gmod_subway_81-717_lvz.Spawner.Cran.Name": "Тип крана", ++ "Entities.gmod_subway_81-717_lvz.Spawner.Cran.1": "334", ++ "Entities.gmod_subway_81-717_lvz.Spawner.Cran.2": "013", ++ "Entities.gmod_subway_81-717_lvz.Spawner.MaskType.Name": "Тип маÑки", ++ "Entities.gmod_subway_81-717_lvz.Spawner.MaskType.1": "1-4-1", ++ "Entities.gmod_subway_81-717_lvz.Spawner.MaskType.2": "Spawner.717.MaskType.4L", ++ "Entities.gmod_subway_81-717_lvz.Spawner.MaskType.3": "2-2", ++ "Entities.gmod_subway_81-717_lvz.Spawner.MaskType.4": "2-2-2", ++ "Entities.gmod_subway_81-717_lvz.Spawner.MaskType.5": "1-3-1", ++ "Entities.gmod_subway_81-717_lvz.Spawner.LED.Name": "Светодиодные фары", ++ "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.Name": "Тип БПСÐ", ++ "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.1": "Старый звук Ñ Ð²Ñ‹Ñоким тоном", ++ "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.2": "Старый звук Ñ Ñредним тоном", ++ "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.3": "Стандартный(из СПБ)", ++ "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.4": "Стандартный(ТКЛ)", ++ "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.5": "Стандартный", ++ "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.6": "КиевÑкий", ++ "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.7": "Старый", ++ "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.8": "Стандартный 2", ++ "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.9": "Стандартный 3", ++ "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.10": "Беззвучный(БПÐ-115)", ++ "Entities.gmod_subway_81-717_lvz.Spawner.NewKV.Name": "ÐÐ¾Ð²Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ ГРКВ", ++ "Entities.gmod_subway_81-717_lvz.Spawner.HornType.Name": "ПитерÑкий тифон", ++ "Entities.gmod_subway_81-717_lvz.Spawner.RingType.Name": "Звук звонка", ++ "Entities.gmod_subway_81-717_lvz.Spawner.RingType.1": "Старый", ++ "Entities.gmod_subway_81-717_lvz.Spawner.RingType.2": "Стандартный Ñ Ð½Ð¸Ð·ÐºÐ¸Ð¼ тоном", ++ "Entities.gmod_subway_81-717_lvz.Spawner.RingType.3": "Стандартный Ñ Ð²Ñ‹Ñоким тоном", ++ "Entities.gmod_subway_81-717_lvz.Spawner.RingType.4": "Стандартный прерывиÑтый Ñ Ð½Ð¸Ð·ÐºÐ¸Ð¼ тоном", ++ "Entities.gmod_subway_81-717_lvz.Spawner.RingType.5": "Стандартный прерывиÑтый Ñ Ð²Ñ‹Ñоким тоном", ++ "Entities.gmod_subway_81-717_lvz.Spawner.NM.Name": "Давление напорной магиÑтрали", ++ "Entities.gmod_subway_81-717_lvz.Spawner.Battery.Name": "Вкл. батарею", ++ "Entities.gmod_subway_81-717_lvz.Spawner.Switches.Name": "Вкл. вÑе автоматики", ++ "Entities.gmod_subway_81-717_lvz.Spawner.SwitchesR.Name": "Ðвтоматики будут включены Ñлучайно", ++ "Entities.gmod_subway_81-717_lvz.Spawner.DoorsL.Name": "Открыть левые двери", ++ "Entities.gmod_subway_81-717_lvz.Spawner.DoorsR.Name": "Открыть правые двери", ++ "Entities.gmod_subway_81-717_lvz.Spawner.GV.Name": "Вкл. главный выключатель", ++ "Entities.gmod_subway_81-717_lvz.Spawner.PB.Name": "Вкл. ÑтоÑночный тормоз", ++ "Entities.gmod_subway_81-717_lvz.Spawner.BortLampType.Name": "Тип бортовых ламп", ++ "Entities.gmod_subway_81-717_lvz.Spawner.BortLampType.1": "Горизнонтальные", ++ "Entities.gmod_subway_81-717_lvz.Spawner.BortLampType.2": "Вертикальные", ++ "Entities.gmod_subway_81-717_lvz.Spawner.HandRail.Name": "Тип поручней", ++ "Entities.gmod_subway_81-717_lvz.Spawner.HandRail.1": "Старый", ++ "Entities.gmod_subway_81-717_lvz.Spawner.HandRail.2": "Ðовый", ++ "Entities.gmod_subway_81-717_lvz.Spawner.SeatType.Name": "Тип Ñидушек", ++ "Entities.gmod_subway_81-717_lvz.Spawner.SeatType.1": "Старый", ++ "Entities.gmod_subway_81-717_lvz.Spawner.SeatType.2": "Ðовый", ++ "Entities.gmod_subway_81-717_lvz.Spawner.LampType.Name": "Тип ламп", ++ "Entities.gmod_subway_81-717_lvz.Spawner.LampType.1": "Тип 1", ++ "Entities.gmod_subway_81-717_lvz.Spawner.LampType.2": "Тип 2", ++ "Entities.gmod_subway_81-717_lvz.Spawner.LampType.3": "Тип 3", ++ "Entities.gmod_subway_81-717_lvz.Spawner.Breakers.Name": "Ðвтоматики Ñправа", ++ "Entities.gmod_subway_81-717_lvz.Spawner.Adverts.Name": "Вид рекламы", ++ "Entities.gmod_subway_81-717_lvz.Spawner.Adverts.1": "Тип 1", ++ "Entities.gmod_subway_81-717_lvz.Spawner.Adverts.2": "Тип 2", ++ "Entities.gmod_subway_81-717_lvz.Spawner.Adverts.3": "Тип 3", ++ "Entities.gmod_subway_81-717_lvz.Spawner.Adverts.4": "Без реклам", ++ ++ "Entities.gmod_subway_81-703.Spawner.Texture.Name": "ОкраÑка кузова", ++ "Entities.gmod_subway_81-703.Spawner.PassTexture.Name": "ОкраÑка Ñалона", ++ "Entities.gmod_subway_81-703.Spawner.CabTexture.Name": "ОкраÑка кабины", ++ "Entities.gmod_subway_81-703.Spawner.Announcer.Name": "Информатор", ++ "Entities.gmod_subway_81-703.Spawner.HornType.Name": "ПитерÑкий тифон", ++ "Entities.gmod_subway_81-703.Spawner.NM.Name": "Давление напорной магиÑтрали", ++ "Entities.gmod_subway_81-703.Spawner.Battery.Name": "Вкл. батарею", ++ "Entities.gmod_subway_81-703.Spawner.AV8B.Name": "Вкл. ÐÐ’8Б", ++ "Entities.gmod_subway_81-703.Spawner.DoorsL.Name": "Открыть левые двери", ++ "Entities.gmod_subway_81-703.Spawner.DoorsR.Name": "Открыть правые двери", ++ "Entities.gmod_subway_81-703.Spawner.GV.Name": "Вкл. главный выключатель", ++ ++ ++ + "Spawner.Close": "Закрыть", + "Spawner.Spawn": "Готово" + } diff --git a/lua/metrostroi_data/languages_/_unfinished/nl_base.lua b/lua/metrostroi_data/languages_/_unfinished/nl_base.lua new file mode 100644 index 0000000..2711005 --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/nl_base.lua @@ -0,0 +1,52 @@ +return [[ +{ + "Lang": "nl", + "Name": "Nederlands", + "Panel.Admin": "Admin", + "Panel.Client": "Client", + "Panel.DrawDebugInfo": "Activeer debug hints", + "Panel.DisableCamAccel": "Deactiveer camera acceleratie", + "Panel.DisableHoverText": "Deactiveer zwevende labels", + + "Entities.gmod_subway_base.Name": "Metrotrein basis", + "Entities.gmod_subway_81-703.Name": "E", + "Entities.gmod_subway_81-703_2.Name": "E (tussenrijtuig)", + "Entities.gmod_subway_81-717_mvm.Name": "81-717(MVM)", + "Entities.gmod_subway_81-717_lvz.Name": "81-717(LVZ)", + "Entities.gmod_subway_81-714_mvm.Name": "81-714(MVM)", + "Entities.gmod_subway_81-714_lvz.Name": "81-714(LVZ)", + "Entities.gmod_subway_81-7036.Name": "81-7036 (werkt niet)", + "Entities.gmod_subway_81-7037.Name": "81-7037 (werkt niet)", + "Entities.gmod_subway_81-720.Name": "81-720 (stuurstandrijtuig)", + "Entities.gmod_subway_81-721.Name": "81-721 (tussenrijtuig)", + "Entities.gmod_subway_81-722.Name": "81-722 (stuurstandrijtuig)", + "Entities.gmod_subway_81-723.Name": "81-723 (tussenrijtuig motor)", + "Entities.gmod_subway_81-724.Name": "81-724 (tussenrijtuig)", + "Entities.gmod_subway_e.Name": "E (old)", + "Entities.gmod_subway_em.Name": "Em", + "Entities.gmod_subway_ema.Name": "Ema", + "Entities.gmod_subway_ezh.Name": "Ezh", + "Entities.gmod_subway_ezh1.Name": "Ezh1", + "Entities.gmod_subway_em508.Name": "Em-508 (stuurstandrijtuig)", + "Entities.gmod_subway_em508_int.Name": "Em-508 (tussenrijtuig)", + "Entities.gmod_subway_ezh3.Name": "Ezh3", + "Entities.gmod_subway_ezh3ru1.Name": "Ezh3 RU1", + "Entities.gmod_subway_ema508t.Name": "Em-508T", + "Entities.gmod_subway_tatra_t3.Name": "Tatra T3", + "Entities.gmod_subway_ai.Name": "AI trein", + + "Entities.gmod_train_bogey.Name": "Trein draaistel", + "Entities.gmod_train_couple.Name": "Koppeling", + + "Entities.gmod_track_pui.Name": "PUI klok", + "Entities.gmod_track_mus_elektronika7.Name": "Elektronische klok", + "Entities.gmod_mus_clock_analog.Name": "Analoge klok", + "Entities.gmod_track_clock_time.Name": "Grote interval klok(tijd)", + "Entities.gmod_track_clock_small.Name": "Kleine interval klok", + "Entities.gmod_track_clock_interval.Name": "Grote interval klok(interval)", + "Entities.gmod_track_switch.Name": "Wissel bestuurder", + "Entities.gmod_track_powermeter.Name": "Energie meter", + "Entities.gmod_track_udochka.Name": "Hoog-voltage verbindingsstuk", + "Entities.gmod_train_spawner.Name": "Trein spawner" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/nl_buttons_717.lua b/lua/metrostroi_data/languages_/_unfinished/nl_buttons_717.lua new file mode 100644 index 0000000..52ab14c --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/nl_buttons_717.lua @@ -0,0 +1,297 @@ +return [[ +{ + "Lang": "nl", + "Name": "Nederlands", + + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.VUD2Toggle": "VUD2: Deuren open of dicht(doet alle deuren dicht)", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.VDLSet": "VDL: Open deuren aan linkerkant", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.R_Program2Helper": "Programma 2", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.R_Program1Helper": "Programma 1", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:RC1Toggle": "RC-1: Koppel ARS circuits los", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:VBToggle": "VB: Batterij inschakelen/uitschakelen", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:UOSToggle": "RC-UOS: Snelheidsbegrenzing", + "Entities.gmod_subway_81-717_mvm.Buttons.Wiper.WiperToggle": "Ruitenwisser", + "Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle": "Bestuurdershendel verbindingsklep", + "Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveBLDisconnectToggle": "Remleiding verbindingsklep", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_UNchToggle": "UNCh: Versterker lage frequentie", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_ZSToggle": "ZS: Luidsprekers in de wagon inschakelen/uitschakelen", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_GToggle": "Loudspeaker: Luidspreker in cabine inschakelen/uitschakelen", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_RadioToggle": "Radioinformator: Omroeper (ingebouwd)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_Program1Set": "Programma 1", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_Program2Set": "Programma 2", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.2:KVTSet": "KB: Attentieknop", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VZ1Set": "VZ1: Pneumatische klep #1", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VUD1Toggle": "VUD: Deuren open of dicht(doet alle deuren dicht)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLSet": "KDL: Open deuren aan linkerkant", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLKToggle": "KDL knop afdekklepje", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLRSet": "KDL: Open deuren aan linkerkant", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLRKToggle": "KDL knop afdekklepje", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.DoorSelectToggle": "Selecteer zijde waar deuren opengaan", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KRZDSet": "RZD: Noodknop deuren dicht", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_VPRToggle": "VPR: Radioapparatuur inschakelen/uitschakelen", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VozvratRPSet": "Reset overbelastingsrelais", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.GreenRPLight": "RP: Groene overbelastingsrelais lamp (voorkomt teveel stroom in de motoren)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.AVULight": "AVU: Automatische besturingsdeactivatie actief", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.LKVPLight": "LKVP: Hoog-voltage omvormer besturing", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.SPLight": "LSP: Brandgevaar (rijweerstanden oververhit)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ConverterProtectionSet": "Bescherming omvormer", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KSNSet": "KSN: Storingsindicatie knop ", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.DIPoffSet": "Bel", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ARSToggle": "ARS: Automatische snelheidsregulatie", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ALSToggle": "ALS: Automatische locomotief signalering", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.OtklAVUToggle": "Schakel automatische besturingsdeactivatie relais uit (Storing AVU)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.TormATToggle": "(placeholder) Schakelaar noodrem", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_1Toggle": "Wagonverlichting", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_2Toggle": "Cabineverlichting", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_3Toggle": "Paneelverlichting", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ALSFreqToggle": "Decoder: ALS frequentie schakelaar 1/5 of 2/6", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ParkingBrakeSignToggle": "Bord \"DEACTIVEER PARKEERREM\"", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.ParkingBrakeToggle": "Parkeerrem", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.DriverValveTLDisconnectToggle": "Treinleiding verbindingsklep", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA1Set": "IGLA: Knop één", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA2Set": "IGLA: Knop twee", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA3Set": "IGLA: Knop drie", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA4Set": "IGLA: Knop vier", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.!Voltage": "Voltage besturingscircuits", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.VMKToggle": "Schakel compressor in", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.BPSNonToggle": "BPSN: Trein krachtvoeding", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.RezMKSet": "Compressor noodactivatie", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.ARS13Set": "ARS 13V: ARS voltage check", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!RouteNum": "М â„–\nRoute number", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!PathNum": "П â„–\nPath number", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchTime": "ВРЕМЯ ХОДÐ\nTotal schedule time", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchInterval": "ИÐТ\nTrain interval", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchHour": "ЧÐС\nHour", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchMin": "МИÐ\nMinute", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchSec": "СЕК\nSecond", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchArrival": "Arrival times", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchStations": "Station name", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!Speedometer": "Snelheidsindicator", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLSN": "LSN: Storingsindicatie lamp (krachtcircuits konden niet worden samengevoegd)", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampRP": "RP: Rode overbelastingsrelais lamp (krachtcircuits konden niet worden samengevoegd)", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLHRK": "LhRK: Indicatielicht rijweerstandmechanisme in beweging ", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLKT": "LKT: ARS rem indicatielicht", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLKVD": "LKVD: ARS motordeactivatie indicatielicht", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLKVC": "LKVC: Hoog-voltage niet beschikbaar", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARSOch": "OCh: Geen ARS frequentie", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS0": "0: ARS stopteken", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS40": "Snelheidslimiet 40 km/u", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS60": "Snelheidslimiet 60 km/u", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS70": "Snelheidslimiet 70 km/u", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS80": "Snelheidslimiet 80 km/u", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLSD1": "LSD: Lamp deurstatus (deuren zijn dicht)", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLSD2": "LSD: Lamp deurstatus (deuren zijn dicht)", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLST": "LST: Remmen geactiveerd", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLVD": "LVD: Motoren geactiveerd", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLN": "LN: Richtingssignaal", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLRS": "LRS: Gelijke snelheid lamp (volgende snelheidslimiet gelijk of groter dan huidige)", + "Entities.gmod_subway_81-717_mvm.Buttons.PneumaticPanels.!CylinderPressure": "Druk in remcilinders", + "Entities.gmod_subway_81-717_mvm.Buttons.PneumaticPanels.!LinePressure": "Druk in pneumatische leidingen (rood: remleiding, zwart: treinleiding)", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.RC1Toggle": "RC-1: Koppel ARS circuits los", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.UOSToggle": "RC-UOS: Snelheidsbegrenzing", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.VBToggle": "VB: Batterij inschakelen/uitschakelen", + "Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Remleiding isolatieklep", + "Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Treinleiding isolatieklep", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPMenuSet": "ASNP: Menu", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPUpSet": "ASNP: Omhoog", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPDownSet": "ASNP: Omlaag", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPOnToggle": "ASNP: Inschakelen", + "Entities.gmod_subway_81-717_mvm.Buttons.RearDoor.RearDoor": "Achterdeur", + "Entities.gmod_subway_81-717_mvm.Buttons.Meters.!TotalVoltmeter": "HV voltmeter (kV)", + "Entities.gmod_subway_81-717_mvm.Buttons.Meters.!TotalAmpermeter": "Totale ampéragemeter (A)", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A61Toggle": "A61 Besturing signaaldraad 6", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A55Toggle": "A55 Besturing signaaldraad 10AS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A54Toggle": "A54 Besturing signaaldraad 10AK", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A56Toggle": "A56 Verbind besturingscircuits met batterij", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A27Toggle": "A27 Schakel krachtvoeding en verlichting in (trein)", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A21Toggle": "A21 Deurbesturing", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A10Toggle": "A10 Compressormotor besturing", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A53Toggle": "A53 KVC voeding", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A43Toggle": "A43 ARS 12V voeding", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A45Toggle": "A45 ARS signaaldraad 10AU", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A42Toggle": "A42 ARS 75V voeding", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A41Toggle": "A41 ARS Rem", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.VUToggle": "VU Treinbesturing", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A64Toggle": "A64 Cabineverlichting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A63Toggle": "A63 IGLA/BIS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A50Toggle": "A50 Schakel krachtvoeding en verlichting in (wagon)", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A51Toggle": "A51 Schakel krachtvoeding en verlichting uit", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A23Toggle": "A23 Compressor noodactivatie", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A14Toggle": "A14 Signaaldraad 18", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A75Toggle": "A75 Cabineverwarming", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A1Toggle": "A1 X-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A2Toggle": "A2 X-2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A3Toggle": "A3 X-3", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A17Toggle": "A17 Reset overbelastingsrelais", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A62Toggle": "A62 Radio communicatie", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A29Toggle": "A29 Radio uitzending", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A5Toggle": "A5 Omroeper", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A6Toggle": "A6 T-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A8Toggle": "A8 Pneumatische klep #1, #2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A20Toggle": "A20 Gas/rem besturing, signaaldraad 20", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A25Toggle": "A25 Handmatige elektrische rem", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A22Toggle": "A22 Activeer compressor", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A30Toggle": "A30 Rijweerstand schakelaarmotor voeding", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A39Toggle": "A39 Noodbesturing", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A44Toggle": "A44 Trein noodbesturing", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A80Toggle": "A80 Krachtcircuits schakelmotor voeding", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A65Toggle": "A65 Interieurverlichting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.L_5Toggle": "Ð49 Noodverlichting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A24Toggle": "A24 Opladen batterij", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A32Toggle": "A32 Open deuren aan rechterkant", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A31Toggle": "A31 Open deuren aan linkerkant", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A16Toggle": "A16 Deuren dicht", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A13Toggle": "A13 Deur waarschuwing", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A12Toggle": "A12 Nood deuren dicht", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A7Toggle": "A7 Rode lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A9Toggle": "A9 Rode lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A46Toggle": "A46 Witte lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A47Toggle": "A47 Witte lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor.PassengerDoor": "Passagiersdeur", + "Entities.gmod_subway_81-717_mvm.Buttons.GV.GVToggle": "HV schakelaar", + "Entities.gmod_subway_81-717_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle": "Noodrem", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.PrevSign": "Bord: Vorige", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.NextSign": "Bord: Volgende", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num2P": "Route: Verhoog 2de cijfer", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num2M": "Route: Verlaag 2de cijfer", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num1P": "Route: Verhoog 1ste cijfer", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num1M": "Route: Verlaag 1ste cijfer", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.L_4Toggle": "Koplampen aan/uit", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VUSToggle": "VUS: Koplampen helder/gedimd", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VAHToggle": "VAH: Noodbesturing (storing RPB relais)", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VADToggle": "VAD: Nood deuren dicht (storing KD relais)", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KRPSet": "KRP: Noodstart knop", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KAHSet": "Noodbesturing knop", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KAHKToggle": "KAH afdekklepje", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KUP": "Cabineverwarming actief", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KDPSet": "KDP: Deuren aan rechterkant open", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KDPKToggle": "KDP afdekklepje", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.PN": "Luchtrem besturing", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A61Toggle": "A61 Besturing signaaldraad 6", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A55Toggle": "A55 Besturing signaaldraad 10AS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A54Toggle": "A54 Besturing signaaldraad 10AK", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A56Toggle": "A56 Verbind besturingscircuits met batterij", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A27Toggle": "A27 Schakel krachtvoeding en verlichting in (trein)", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A21Toggle": "A21 Deurbesturing", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A10Toggle": "A10 Besturing compressor", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A53Toggle": "A53 KVC voeding", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A43Toggle": "A43 ARS 12V voeding", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A45Toggle": "A45 ARS signaaldraad 10AU", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A42Toggle": "A42 ARS 75V voeding", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A41Toggle": "A41 ARS rem", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:VUToggle": "VU Treinbesturing", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A64Toggle": "A64 Cabineverlichting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A63Toggle": "A63 IGLA/BIS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A50Toggle": "A50 Schakel krachtvoeding en verlichting in (wagon)", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A51Toggle": "A51 Schakel krachtvoeding en verlichting uit", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A23Toggle": "A23 Compressor noodactivatie", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A14Toggle": "A14 Signaaldraad 18", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A75Toggle": "A75 Cabineverwarming", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A1Toggle": "A1 X-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A2Toggle": "A2 X-2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A3Toggle": "A3 X-3", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A17Toggle": "A17 Reset overbelastingsrelais", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A62Toggle": "A62 Radio communicatie", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A29Toggle": "A29 Radio uitzending", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A5Toggle": "A5 Tussenwagon", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A6Toggle": "A6 T-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A8Toggle": "A8 Pneumatische klep #1, #2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A20Toggle": "A20 Gas/rem besturing, signaaldraad 20", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A25Toggle": "A25 Handmatige elektrische rem", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A22Toggle": "A22 Activeer compressor", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A30Toggle": "A30 Rijweerstand schakelmotor voeding", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A39Toggle": "A39 Noodbesturing", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A44Toggle": "A44 Trein noodbesturing", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A80Toggle": "A80 Krachtcircuits schakelmotor voeding", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A65Toggle": "A65 Interieurverlichting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:L_5Toggle": "Ð49 Noodverlichting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A24Toggle": "A24 Opladen batterij", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A32Toggle": "A32 Open deuren aan rechterkant", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A31Toggle": "A31 Open deuren aan linkerkant", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A16Toggle": "A16 Deuren dicht", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A13Toggle": "A13 Deur waarschuwing", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A12Toggle": "A12 Nood deuren dicht", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A7Toggle": "A7 Rode lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A9Toggle": "A9 Rode lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A46Toggle": "A46 Witte lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A47Toggle": "A47 Witte lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!Speedometer": "Snelheidsindicator", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LSD": "LSD: Lamp deurstatus (Deuren zijn dicht)", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LOCh": "NCh: Geen ARS frequentie", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L0": "0: ARS stopteken", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LRS": "LRS: Gelijke snelheid indicatielamp (volgende snelheidslimiet gelijk of groter dan huidige)", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L40": "Snelheidslimiet 40 km/u", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L60": "Snelheidslimiet 60 km/u", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L80": "Snelheidslimiet 70 km/u", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L70": "Snelheidslimiet 80 km/u", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LRK": "RK: Indicatielicht rijweerstandmechanisme in beweging", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LEKK": "", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LPU": "", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LKVD": "LKVD: ARS motordeactivatie indicatielicht", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LKT": "LKT: ARS rem indicatielicht", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LRP": "RP: Rode overbelastingsrelais lamp (krachtcircuits konden niet worden samengevoegd)", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LKVC": "LKVC: Hoog-voltage niet beschikbaar", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LVD": "LVD: Motoren geactiveerd", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LST": "LST: Remmen geactiveerd", + "Entities.gmod_subway_81-717_mvm.Buttons.CabinDoor.CabinDoor": "Cabinedeur", + "Entities.gmod_subway_81-717_mvm.Buttons.Reverser.KVReverserDown": "Rijrichting achteruit", + "Entities.gmod_subway_81-717_mvm.Buttons.Reverser.KVReverserUp": "Rijrichting vooruit", + "Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor1.PassengerDoor": "Passagiersdeur", + "Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAToggle": "UAVA: Universele Automatische Autostop Deactiveerder (deactiveer autostop)", + "Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAContactSet": "UAVA: Universele Automatische Autostop Deactiveerder (reset contacten)", + "Entities.gmod_subway_81-717_mvm.Buttons.EPKDisconnect.EPKToggle": "EPV verbindingsklep", + "Entities.gmod_subway_81-717_mvm.Buttons.Help.ShowHelp": "Toon uitleg voor besturing van de trein (engelstalig)", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake2.1:ParkingBrakeToggle": "Parkeerrem", + "Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Remleiding isolatieklep", + "Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Treinleiding isolatieklep", + "Entities.gmod_subway_81-717_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Deactiveer luchtdrukverdeler", + + "Entities.gmod_subway_81-714_mvm.Buttons.GV.GVToggle": "HV schakelaar", + "Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Remleiding isolatieklep", + "Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Treinleiding isolatieklep", + "Entities.gmod_subway_81-714_mvm.Buttons.RearDoor.RearDoor": "Achterdeur", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.DriverValveBLDisconnectToggle": "Remleiding isolatieklep", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.DriverValveTLDisconnectToggle": "Treinleiding isolatieklep", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A65Toggle": "A65 Interieurverlichting", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A56Toggle": "A56 Verbind besturingscircuits met batterij", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A63Toggle": "A63 IGLA/BIS", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A10Toggle": "A10 Besturing compressor", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A30Toggle": "A30 Rijweerstand schakelmotor voeding", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A80Toggle": "A80 Krachtcircuits schakelmotor voeding", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Remleiding isolatieklep", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Treinleiding isolatieklep", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.ParkingBrakeToggle": "Parkeerrem", + "Entities.gmod_subway_81-714_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Deactiveer luchtdrukverdeler", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontDoor.FrontDoor": "Voordeur", + "Entities.gmod_subway_81-714_mvm.Buttons.Battery.VBToggle": "VB: Batterij inschakelen/uitschakelen", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A54Toggle": "A54 Besturing signaaldraad 10AK", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A27Toggle": "A27 Schakel krachtvoeding en verlichting in (trein)", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A24Toggle": "A24 Opladen batterij", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A53Toggle": "A53 KVC voeding", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A13Toggle": "A13 Deur waarschuwing", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A32Toggle": "A32 Open deuren aan rechterkant", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A31Toggle": "A31 Open deuren aan linkerkant", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A16Toggle": "A16 Deuren dicht", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A12Toggle": "A12 Nood deuren dicht", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A50Toggle": "A50 Schakel krachtvoeding en verlichting in (wagon)", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A51Toggle": "A51 Schakel krachtvoeding en verlichting uit", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A1Toggle": "A1 X-1", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.KRPSet": "START: Noodstart knop", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.VozvratRPSet": "Reset overbelastingsrelais", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.RezMKSet": "Compressor noodactivatie", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.VMKToggle": "Schakel compressor in", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.BPSNonToggle": "BPSN: Trein krachtvoeding", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A2Toggle": "A2 X-2", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A3Toggle": "A3 X-3", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A17Toggle": "A17 Reset overbelastingsrelais", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A5Toggle": "A5 ", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A6Toggle": "A6 T-1", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A8Toggle": "A8 Pneumatische klep #1, #2", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A20Toggle": "A20 Gas/rem besturing, signaaldraad 20", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A25Toggle": "A25 Handmatige elektrische rem", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A22Toggle": "A22 Activeer compressor", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A23Toggle": "A23 Compressor noodactivatie", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A39Toggle": "A39 Noodbesturing", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A14Toggle": "A14 Signaaldraad 18" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/nl_buttons_ezh3.lua b/lua/metrostroi_data/languages_/_unfinished/nl_buttons_ezh3.lua new file mode 100644 index 0000000..dfae31c --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/nl_buttons_ezh3.lua @@ -0,0 +1,140 @@ +return [[ +{ + "Lang": "nl", + "Name": "Nederlands", + + + "Entities.gmod_subway_ezh3.Buttons.Stopkran.EmergencyBrakeValveToggle": "Noodrem", + "Entities.gmod_subway_ezh3.Buttons.Back.BackDoor": "Achterdeur", + "Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle": "Remleiding verbindingsklep", + "Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle": "Treinleiding verbindingsklep", + "Entities.gmod_subway_ezh3.Buttons.Battery.VBToggle": "VB: Batterij inschakelen/uitschakelen (laag voltage)", + "Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Remleiding isolatieklep", + "Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Treinleiding isolatieklep", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPMenuSet": "Omroeper: Menu", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPUpSet": "Omroeper: Omhoog", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPDownSet": "Omroeper: Omlaag", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPOnToggle": "Omroeper: Schakel in", + "Entities.gmod_subway_ezh3.Buttons.PassengerDoor1.PassengerDoor": "Passagiersdeur", + "Entities.gmod_subway_ezh3.Buttons.PassengerDoor.PassengerDoor": "Passagiersdeur", + "Entities.gmod_subway_ezh3.Buttons.CabinDoor.CabinDoor": "Cabinedeur", + "Entities.gmod_subway_ezh3.Buttons.Front.FrontDoor": "Voordeur", + "Entities.gmod_subway_ezh3.Buttons.GV.GVToggle": "HV Schakelaar", + "Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Treinleiding isolatieklep", + "Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Remleiding isolatieklep", + "Entities.gmod_subway_ezh3.Buttons.Panel.!OCH": "NCh: Geen ARS frequentie", + "Entities.gmod_subway_ezh3.Buttons.Panel.!0": "0: ARS stopteken", + "Entities.gmod_subway_ezh3.Buttons.Panel.!40": "Snelheidslimiet 40 km/u", + "Entities.gmod_subway_ezh3.Buttons.Panel.!60": "Snelheidslimiet 60 km/u", + "Entities.gmod_subway_ezh3.Buttons.Panel.!70": "Snelheidslimiet 70 km/u", + "Entities.gmod_subway_ezh3.Buttons.Panel.!80": "Snelheidslimiet 80 km/u", + "Entities.gmod_subway_ezh3.Buttons.Panel.!Speedometer": "Snelheidsindicator (km/u)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!TotalAmpermeter": "Totale motor ampérage (A)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!TotalVoltmeter": "Totale voltage (kV)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!BatteryVoltage": "Batterijvoltage treinbesturing (V)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!BrakeCylinder": "Luchtdruk in remcilinders", + "Entities.gmod_subway_ezh3.Buttons.Panel.!LinesPressure": "Luchtdruk in pneumatische leidingen (rood: remleiding, zwart: treinleiding)", + "Entities.gmod_subway_ezh3.Buttons.Main.KU1Toggle": "Schakel compressor in", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMM1Set": "SAMM: Deactiveer autodrive", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMM2Set": "SAMM: Start", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMM3Set": "SAMM: Reset", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal1": "Lamp: Rem/Gas", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal2": "Lamp: Werkstatus SAMM", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal3": "Lamp: SAMM uitvoerings eenheid ingeschakeld", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMOnToggle": "SAMM: Activeer autodrive", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMBlokToggle": "SAMM: Uitvoerings eenheid", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMCommand3Set": "SAMM: X-2", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMCommand2Set": "SAMM: Inhalen", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMCommand1Set": "SAMM: Toestemming", + "Entities.gmod_subway_ezh3.Buttons.Main.KSNSet": "KSN: Storingsindicatie knop", + "Entities.gmod_subway_ezh3.Buttons.Main.R_Program1Set": "Programma 1", + "Entities.gmod_subway_ezh3.Buttons.Main.R_Program2Set": "Programma 2", + "Entities.gmod_subway_ezh3.Buttons.Main.VUSToggle": "Switch: Dimlicht/Grootlicht", + "Entities.gmod_subway_ezh3.Buttons.Main.L_3Toggle": "Switch: Verlichting meters", + "Entities.gmod_subway_ezh3.Buttons.Main.VAHToggle": "Switch: Noodbesturing", + "Entities.gmod_subway_ezh3.Buttons.Main.DIPonSet": "Osv. Vkl.: Schakel interieurverlichting in", + "Entities.gmod_subway_ezh3.Buttons.Main.DIPoffSet": "Osv. Vykl.: Schakel interieurverlichting uit", + "Entities.gmod_subway_ezh3.Buttons.Main.KSDSet": "KSD: Deuren statuscontrole", + "Entities.gmod_subway_ezh3.Buttons.Main.KVTSet": "KVT: Reset ARS rem", + "Entities.gmod_subway_ezh3.Buttons.Main.KBSet": "KB: Attentieknop", + "Entities.gmod_subway_ezh3.Buttons.Main.KBLamp": "Lamp: Indicatielicht rijweerstandmechanisme in beweging", + "Entities.gmod_subway_ezh3.Buttons.Main.ARSToggle": "ARS: Automatische snelheidsregulatie", + "Entities.gmod_subway_ezh3.Buttons.Main.R_UNchToggle": "UNCh: Versterker lage frequentie", + "Entities.gmod_subway_ezh3.Buttons.Main.VUD1Toggle": "VUD: Deuren open of dicht(doet alle deuren dicht)", + "Entities.gmod_subway_ezh3.Buttons.Main.R_RadioToggle": "Radioinformator: Omroeper (ingebouwd)", + "Entities.gmod_subway_ezh3.Buttons.Main.ALSToggle": "ALS: Automatische locomotief signalering", + "Entities.gmod_subway_ezh3.Buttons.Main.VozvratRPSet": "KVRP: Reset overbelastingsrelais", + "Entities.gmod_subway_ezh3.Buttons.Main.RingSet": "Bel", + "Entities.gmod_subway_ezh3.Buttons.Main.L_2Toggle": "Switch: Cabineverlichting", + "Entities.gmod_subway_ezh3.Buttons.Main.KRZDSet": "KRZD: Nood deuren dicht", + "Entities.gmod_subway_ezh3.Buttons.Main.KDPSet": "KDP: Open deuren aan rechterkant", + "Entities.gmod_subway_ezh3.Buttons.Main.KDLSet": "KDL: Open deuren aan linkerkant", + "Entities.gmod_subway_ezh3.Buttons.Main.KAHSet": "KAH: Noodbesturing knop", + "Entities.gmod_subway_ezh3.Buttons.Main.RezMKSet": "Compressor noodactivatie", + "Entities.gmod_subway_ezh3.Buttons.Main.KRPSet": "KRP: Noodstart knop", + "Entities.gmod_subway_ezh3.Buttons.Main.RSTToggle": "VPR: Radioapparatuur inschakelen/uitschakelen", + "Entities.gmod_subway_ezh3.Buttons.Main.R_GToggle": "Loudspeaker: Luidspreker in cabine inschakelen/uitschakelen", + "Entities.gmod_subway_ezh3.Buttons.Main.R_ZSToggle": "ZS: Luidsprekers in de wagon inschakelen/uitschakelen", + "Entities.gmod_subway_ezh3.Buttons.Main.Custom2Set": "Ongebruikte schakelaar", + "Entities.gmod_subway_ezh3.Buttons.Main.Custom3Set": "Ongebruikte schakelaar", + "Entities.gmod_subway_ezh3.Buttons.Main.ASNPPlay": "Omroeper in gebruik", + "Entities.gmod_subway_ezh3.Buttons.AV1.VU3Toggle": "VU3: Cabineverlichting", + "Entities.gmod_subway_ezh3.Buttons.AV1.VU2Toggle": "VU2: Noodverlichting (45V)", + "Entities.gmod_subway_ezh3.Buttons.AV1.VU1Toggle": "VU1: Cabineverwarming (3kW)", + "Entities.gmod_subway_ezh3.Buttons.AVMain.AV8BToggle": "AV-8B: Automatische schakelaar (Hoog voltage)", + "Entities.gmod_subway_ezh3.Buttons.RC1.RC1Toggle": "RC-ARS: ARS stroomonderbreker", + "Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAToggle": "UAVA: Universele Automatische Autostop Deactiveerder (deactiveer autostop)", + "Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAContactSet": "UAVA: UAVA: Universele Automatische Autostop Deactiveerder (reset contacten)", + "Entities.gmod_subway_ezh3.Buttons.VUHelper.VUToggle": "VU: Treinbesturing", + "Entities.gmod_subway_ezh3.Buttons.HelperPanel.VDLSet": "KDL: Open deuren aan linkerkant", + "Entities.gmod_subway_ezh3.Buttons.HelperPanel.VUD2Toggle": "VUD2: Deuren open of dicht(doet alle deuren dicht)", + "Entities.gmod_subway_ezh3.Buttons.EPKDisconnect.EPKToggle": "EPK verbindingsklep", + "Entities.gmod_subway_ezh3.Buttons.VU.VUToggle": "VU: Treinbesturing", + "Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeLeft": "Parkeerrem", + "Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeRight": "Parkeerrem", + "Entities.gmod_subway_ezh3.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Deactiveer luchtdrukverdeler", + + "Entities.gmod_subway_em508t.Buttons.Stopkran.EmergencyBrakeValveToggle": "Noodrem", + "Entities.gmod_subway_em508t.Buttons.Battery.VBToggle": "VB: Batterij inschakelen/uitschakelen (laag voltage)", + "Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Remleiding isolatieklep", + "Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Treinleiding isolatieklep", + "Entities.gmod_subway_em508t.Buttons.GV.GVToggle": "HV schakelaar", + "Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Treinleiding isolatieklep", + "Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Remleiding isolatieklep", + "Entities.gmod_subway_em508t.Buttons.RearDoor.RearDoor": "Passagiersdeur", + "Entities.gmod_subway_em508t.Buttons.Back2.!HVFuse": "HV zekeringenkast", + "Entities.gmod_subway_em508t.Buttons.Back2.!Relays": "Kast met apparatuur voor opladen batterij en verspreiding van luchtdruk voor deuren", + "Entities.gmod_subway_em508t.Buttons.Back2.!Heater": "Verwarming", + "Entities.gmod_subway_em508t.Buttons.Front.FrontDoor": "Voordeur", + "Entities.gmod_subway_em508t.Buttons.AV1.VU3Toggle": "VU3: Cabineverlichting", + "Entities.gmod_subway_em508t.Buttons.AV1.VU2Toggle": "VU2: Noodverlichting (45V)", + "Entities.gmod_subway_em508t.Buttons.AV1.VU1Toggle": "VU1: Cabineverwarming (3kW)", + "Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeLeft": "Parkeerrem", + "Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeRight": "Parkeerrem", + "Entities.gmod_subway_em508t.Buttons.CabinDoor.CabinDoor1": "Cabinedeur", + "Entities.gmod_subway_em508t.Buttons.PassengerDoor.PassengerDoor": "Passagiersdeur", + "Entities.gmod_subway_em508t.Buttons.PassengerDoor1.PassengerDoor": "Passagiersdeur", + "Entities.gmod_subway_em508t.Buttons.Main.!RedRP": "RP: Rode overbelastingsrelais lamp (krachtcircuits konden niet worden samengevoegd)", + "Entities.gmod_subway_em508t.Buttons.Main.!GreenRP": "RP: Groene overbelastingsrelais lamp (voorkomt teveel stroom in de motoren)", + "Entities.gmod_subway_em508t.Buttons.Main.!SD": "Blauwe lamp deurstatus (deuren zijn dicht)", + "Entities.gmod_subway_em508t.Buttons.Main.KDLSet": "Switch: Open deuren aan linkerkant", + "Entities.gmod_subway_em508t.Buttons.Main.KSDSet": "Switch: Deuren statuscontrole", + "Entities.gmod_subway_em508t.Buttons.Main.VozvratRPSet": "Switch: Reset overbelastingsrelais", + "Entities.gmod_subway_em508t.Buttons.Main.KSNSet": "Switch: Storingsindicatie schakelaar", + "Entities.gmod_subway_em508t.Buttons.Main.VUD1Toggle": "Switch: Deuren open of dicht(doet alle deuren dicht)", + "Entities.gmod_subway_em508t.Buttons.Main.KU1Toggle": "Switch: Schakel compressor in", + "Entities.gmod_subway_em508t.Buttons.Main.DIPonSet": "KU4: Schakel interieurverlichting in", + "Entities.gmod_subway_em508t.Buttons.Main.DIPoffSet": "KU5: Schakel interieurverlichting uit", + "Entities.gmod_subway_em508t.Buttons.Main.RezMKSet": "Switch: Compressor noodactivatie", + "Entities.gmod_subway_em508t.Buttons.Main.KDPSet": "KDP: Open deuren rechterkant", + "Entities.gmod_subway_em508t.Buttons.Main.KRZDSet": "KU10: Nood deuren dicht", + "Entities.gmod_subway_em508t.Buttons.AVMain.AV8BToggle": "AV-8B: Automatische schakelaar (Hoog voltage)", + "Entities.gmod_subway_em508t.Buttons.VU.VUToggle": "VU: Treinbesturing", + "Entities.gmod_subway_em508t.Buttons.VU.!Voltage": "Voltage besturingscircuits", + "Entities.gmod_subway_em508t.Buttons.HelperPanel.VUD2Toggle": "VUD2: Deuren open of dicht(doet alle deuren dicht)", + "Entities.gmod_subway_em508t.Buttons.HelperPanel.VDLSet": "VDL: Open deuren aan linkerkant", + "Entities.gmod_subway_em508t.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle": "Remleiding verbindingsklep", + "Entities.gmod_subway_em508t.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle": "Remleiding verbindingsklep", + "Entities.gmod_subway_em508t.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Deactiveer luchtdrukverdeler" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/nl_spawner.lua b/lua/metrostroi_data/languages_/_unfinished/nl_spawner.lua new file mode 100644 index 0000000..6e0aa50 --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/nl_spawner.lua @@ -0,0 +1,117 @@ +return [[ +{ + "Lang": "nl", + "Name": "Nederlands", + + "Spawner.Title": "Trein spawner", + "Spawner.Trains1": "Trein", + "Spawner.Trains2": "Maximum voor jou", + "Spawner.WagNum": "Aantal wagons", + "Spawner.AutoCouple": "Koppel wagons automatisch", + + "Entities.gmod_subway_81-717_mvm.Spawner.Texture.Name": "Kleurstelling", + "Entities.gmod_subway_81-717_mvm.Spawner.PassTexture.Name": "Interieur", + "Entities.gmod_subway_81-717_mvm.Spawner.CabTexture.Name": "Cabine interieur", + "Entities.gmod_subway_81-717_mvm.Spawner.Announcer.Name": "Omroeper", + "Entities.gmod_subway_81-717_mvm.Spawner.Lighter.Name": "Aansteker", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.Name": "Model ARS", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.1": "Standaard(vierkante lampen)", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.2": "Standard(ronde lampen)", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.3": "Kiev/SPB", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.4": "Oude ARS", + "Entities.gmod_subway_81-717_mvm.Spawner.Cran.Name": "Remhendel type", + "Entities.gmod_subway_81-717_mvm.Spawner.Cran.1": "334", + "Entities.gmod_subway_81-717_mvm.Spawner.Cran.2": "013", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.Name": "Voorkant", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.1": "2-2", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.2": "2-2-2", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.3": "1-4-1 bumper 1", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.4": "1-4-1 bumper 2", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.5": "1-1", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.6": "Retro", + "Entities.gmod_subway_81-717_mvm.Spawner.LED.Name": "LED", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.Name": "BPSN type", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.1": "Oud hoge toon", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.2": "Oud medium toon", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.3": "Standaard(SPB)", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.4": "Standaard(TKL)", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.5": "Standaard", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.6": "Kiev", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.7": "Oud", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.8": "Standaard 2", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.9": "Standaard 3", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.10": "Geen geluid(BPN-115)", + "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.Name": "Controller geluid", + "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.1": "Type 1", + "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.2": "Type 2", + "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.3": "Type 3", + "Entities.gmod_subway_81-717_mvm.Spawner.NewKV.Name": "Nieuw controller model", + "Entities.gmod_subway_81-717_mvm.Spawner.HornType.Name": "SPB toeter", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.Name": "Bel geluid", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.1": "Oud", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.2": "Standaard met lage toon", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.3": "Standaard met hoge toon", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.4": "Standaard onderbroken met lage toon", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.5": "Standaard onderbroken met hoge toon", + "Entities.gmod_subway_81-717_mvm.Spawner.NM.Name": "Treinleiding", + "Entities.gmod_subway_81-717_mvm.Spawner.Battery.Name": "Batterij", + "Entities.gmod_subway_81-717_mvm.Spawner.Switches.Name": "Stoppen ingeschakeld", + "Entities.gmod_subway_81-717_mvm.Spawner.SwitchesR.Name": "Willekeurige stoppen", + "Entities.gmod_subway_81-717_mvm.Spawner.DoorsL.Name": "Open deuren linkerkant", + "Entities.gmod_subway_81-717_mvm.Spawner.DoorsR.Name": "Open deuren rechterkant", + "Entities.gmod_subway_81-717_mvm.Spawner.GV.Name": "Hoog-voltage schakelaar", + "Entities.gmod_subway_81-717_mvm.Spawner.PB.Name": "Parkeerrem", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.Name": "Type signaallampen", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.1": "Horizontaal", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.2": "Verticaal", + "Entities.gmod_subway_81-717_mvm.Spawner.MVM.Name": "MVM teken", + "Entities.gmod_subway_81-717_mvm.Spawner.HandRail.Name": "Handvaten model", + "Entities.gmod_subway_81-717_mvm.Spawner.HandRail.1": "Oud", + "Entities.gmod_subway_81-717_mvm.Spawner.HandRail.2": "Nieuw", + "Entities.gmod_subway_81-717_mvm.Spawner.SeatType.Name": "Stoel model", + "Entities.gmod_subway_81-717_mvm.Spawner.SeatType.1": "Oud", + "Entities.gmod_subway_81-717_mvm.Spawner.SeatType.2": "Nieuw", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.Name": "Verlichting type", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.1": "Type 1", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.2": "Type 2", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.3": "Type 3", + "Entities.gmod_subway_81-717_mvm.Spawner.Breakers.Name": "Stoppen rechterkant", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.Name": "Advertenties type", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.1": "Type 1", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.2": "Type 2", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.3": "Type 3", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.4": "Geen advertenties", + + "Entities.gmod_subway_81-720.Spawner.Texture.Name": "Kleurstelling", + "Entities.gmod_subway_81-720.Spawner.PassTexture.Name": "Interieur", + "Entities.gmod_subway_81-720.Spawner.CabTexture.Name": "Cabine interieur", + "Entities.gmod_subway_81-720.Spawner.Announcer.Name": "Omroeper", + "Entities.gmod_subway_81-720.Spawner.Scheme.Name": "Dienstregeling", + "Entities.gmod_subway_81-720.Spawner.PassSchemesInvert.Name": "Keer dienstregeling om", + "Entities.gmod_subway_81-720.Spawner.NM.Name": "Treinleiding", + "Entities.gmod_subway_81-720.Spawner.Battery.Name": "Batterij", + "Entities.gmod_subway_81-720.Spawner.BRU.Name": "Hoog-voltage schakelaar", + "Entities.gmod_subway_81-720.Spawner.PVZR.Name": "Willekeurige stoppen (trein)", + "Entities.gmod_subway_81-720.Spawner.PPZ.Name": "Activeer alle stoppen", + "Entities.gmod_subway_81-720.Spawner.PPZDepot.Name": "Deactiveer stoppen als in depot", + "Entities.gmod_subway_81-720.Spawner.PPZR.Name": "Willekeurige stoppen (wagon)", + "Entities.gmod_subway_81-720.Spawner.DoorsL.Name": "Open deuren linkerkant", + "Entities.gmod_subway_81-720.Spawner.DoorsR.Name": "Open deuren rechterkant", + + "Entities.gmod_subway_81-722.Spawner.Texture.Name": "Kleurstelling", + "Entities.gmod_subway_81-722.Spawner.PassTexture.Name": "Interieur", + "Entities.gmod_subway_81-722.Spawner.CabTexture.Name": "Cabin interieur", + "Entities.gmod_subway_81-722.Spawner.Announcer.Name": "Omroeper", + "Entities.gmod_subway_81-722.Spawner.Scheme.Name": "Dienstregeling", + "Entities.gmod_subway_81-722.Spawner.SarmatInvert.Name": "Keer dienstregeling om", + "Entities.gmod_subway_81-722.Spawner.NM.Name": "Treinleiding", + "Entities.gmod_subway_81-722.Spawner.Battery.Name": "Batterij", + "Entities.gmod_subway_81-722.Spawner.Switches.Name": "Activeer alle stoppen", + "Entities.gmod_subway_81-722.Spawner.SwitchesR.Name": "Willekeurige stoppen", + "Entities.gmod_subway_81-722.Spawner.DoorsL.Name": "Open deuren linkerkant", + "Entities.gmod_subway_81-722.Spawner.DoorsR.Name": "Open deuren rechterkant", + + "Spawner.Close": "Sluiten", + "Spawner.Spawn": "Klaar" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/pl_base.lua b/lua/metrostroi_data/languages_/_unfinished/pl_base.lua new file mode 100644 index 0000000..1e39669 --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/pl_base.lua @@ -0,0 +1,52 @@ +return [[ +{ + "Lang": "pl", + "Name": "polski", + "Panel.Admin": "Admin", + "Panel.Client": "Klient", + "Panel.DrawDebugInfo": "Rysuj debuginfo", + "Panel.DisableCamAccel": "Wyłącz ruch kamery przy przyspieszeniu", + "Panel.DisableHoverText": "Wyłącz tekst pod kursorem", + + "Entities.gmod_subway_base.Name": "Baza pociÄ…gu", + "Entities.gmod_subway_81-703.Name": "81-703 (koÅ„cowy)", + "Entities.gmod_subway_81-703_2.Name": "81-703 (Å›rodkowy)", + "Entities.gmod_subway_81-717_mvm.Name": "81-717 (MVM)", + "Entities.gmod_subway_81-717_lvz.Name": "81-717 (LVZ)", + "Entities.gmod_subway_81-714_mvm.Name": "81-714 (MVM)", + "Entities.gmod_subway_81-714_lvz.Name": "81-714 (LVZ)", + "Entities.gmod_subway_81-7036.Name": "81-7036 (nie dziaÅ‚a)", + "Entities.gmod_subway_81-7037.Name": "81-7037 (nie dziaÅ‚a)", + "Entities.gmod_subway_81-720.Name": "81-720 (koÅ„cowy)", + "Entities.gmod_subway_81-721.Name": "81-721 (Å›rodkowy)", + "Entities.gmod_subway_81-722.Name": "81-722 (koÅ„cowy)", + "Entities.gmod_subway_81-723.Name": "81-723 (Å›rodkowy toczny)", + "Entities.gmod_subway_81-724.Name": "81-724 (Å›rodkowy napÄ™dowy)", + "Entities.gmod_subway_e.Name": "E", + "Entities.gmod_subway_em.Name": "Em", + "Entities.gmod_subway_ema.Name": "Ema", + "Entities.gmod_subway_ezh.Name": "Ezh (ARS-MP)", + "Entities.gmod_subway_ezh1.Name": "Ezh1", + "Entities.gmod_subway_em508.Name": "Em-508", + "Entities.gmod_subway_em508_int.Name": "Em-508 (Å›rodkowy)", + "Entities.gmod_subway_ezh3.Name": "Ezh3", + "Entities.gmod_subway_ezh3ru1.Name": "Ezh3 RU1", + "Entities.gmod_subway_ema508t.Name": "Em-508t", + "Entities.gmod_subway_tatra_t3.Name": "Tatra T3", + "Entities.gmod_subway_ai.Name": "PociÄ…g SI", + + "Entities.gmod_train_bogey.Name": "Wózek szynowy", + "Entities.gmod_train_couple.Name": "SprzÄ™g", + + "Entities.gmod_track_pui.Name": "Zegar PUI", + "Entities.gmod_track_mus_elektronika7.Name": "Zegar \"Electronica\"", + "Entities.gmod_mus_clock_analog.Name": "Zegar analogowy", + "Entities.gmod_track_clock_time.Name": "Duży zegar interwaÅ‚owy (czas)", + "Entities.gmod_track_clock_small.Name": "MaÅ‚y zegar interwaÅ‚owy", + "Entities.gmod_track_clock_interval.Name": "Duży zegar interwaÅ‚owy (interwaÅ‚)", + "Entities.gmod_track_switch.Name": "Rozjazd", + "Entities.gmod_track_powermeter.Name": "Kilowatomierz", + "Entities.gmod_track_udochka.Name": "ÅÄ…cznik WN (udochka)", + "Entities.gmod_train_spawner.Name": "Spawner pociÄ…gów" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/pl_buttons_717.lua b/lua/metrostroi_data/languages_/_unfinished/pl_buttons_717.lua new file mode 100644 index 0000000..a82e7ae --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/pl_buttons_717.lua @@ -0,0 +1,297 @@ +return [[ +{ + "Lang": "pl", + "Name": "polski", + + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.VUD2Toggle": "VUD2: Sterowanie drzwiami (zamykanie)", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.VDLSet": "VDL: Otwieranie lewych drzwi", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.R_Program2Helper": "Zapowiedź 2", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.R_Program1Helper": "Zapowiedź 1", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:RC1Toggle": "RC-1: Odłączenie obwodów ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:VBToggle": "VB: Baterie akumulatorów", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:UOSToggle": "RC-UOS: UrzÄ…dzenie ograniczenia prÄ™dkoÅ›ci", + "Entities.gmod_subway_81-717_mvm.Buttons.Wiper.WiperToggle": "Wycieraczka", + "Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle": "Zawór odłączajÄ…cy", + "Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveBLDisconnectToggle": "Zawór dwudrożny przewodu zasilajÄ…cego", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_UNchToggle": "UNCh: Wzmacniacz niskich czÄ™stotliwoÅ›ci", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_ZSToggle": "ZS: NagÅ‚oÅ›nienie klasy", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_GToggle": "GÅ‚oÅ›nik (dźwiÄ™k w kabinie)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_RadioToggle": "Zapowiedzi gÅ‚osowe (wbudowane)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_Program1Set": "Zapowiedź 1", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_Program2Set": "Zapowiedź 2", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.2:KVTSet": "KB: Czuwak (przycisk)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VZ1Set": "VZ1: Zawór pneumatyczny #1", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VUD1Toggle": "VUD: Przełącznik sterowania drzwiami (zamykanie)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLSet": "KDL: Otwieranie lewych drzwi", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLKToggle": "Klapka przycisku KDL", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLRSet": "KDL: Otwieranie lewych drzwi", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLRKToggle": "Klapka przycisku KDL", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.DoorSelectToggle": "Wybór strony otwierania drzwi", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KRZDSet": "RZD: Awaryjne zamykanie drzwi", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_VPRToggle": "VPR: Załączanie radiostacji", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VozvratRPSet": "Odblokowanie przekaźnika nadmiarowego", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.GreenRPLight": "RP: ZadziaÅ‚anie przekaźnika nadmiarowego", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.AVULight": "AVU: Automatyczny wyłącznik sterowania", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.LKVPLight": "LKVP: Przetwornica WN", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.SPLight": "LSP: Kontrolka sygnalizacji pożaru", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ConverterProtectionSet": "Ochrona przetwornicy", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KSNSet": "KSN: Sygnalizacja usterki", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.DIPoffSet": "Dzwonek", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ARSToggle": "ARS: Automatyczna regulacja prÄ™dkoÅ›ci", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ALSToggle": "ALS: Automatyczna sygnalizacja pociÄ…gu", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.OtklAVUToggle": "Wyłączanie automatycznego odcinania sterowania (niesprawność AVU)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.TormATToggle": "(placeholder) Hamulec awaryjny", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_1Toggle": "OÅ›wietlenie klasy", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_2Toggle": "OÅ›wietlenie kabiny", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_3Toggle": "OÅ›wietlenie pulpitu", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ALSFreqToggle": "Dekoder: Przełącznik trybu ALS (1/5 lub 2/6)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ParkingBrakeSignToggle": "Tabliczka \"ZWOLNIJ HAMULEC POSTOJOWY\"", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.ParkingBrakeToggle": "Hamulec postojowy", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.DriverValveTLDisconnectToggle": "Zawór dwudrożny przewodu zasilajÄ…cego", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA1Set": "IGLA: Przycisk pierwszy", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA2Set": "IGLA: Przycisk drugi", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA3Set": "IGLA: Przycisk trzeci", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA4Set": "IGLA: Przycisk czwarty", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.!Voltage": "Zasilanie obwodu sterowania", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.VMKToggle": "Włączanie sprężarki", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.BPSNonToggle": "BPSN: Zasilanie systemów pociÄ…gu", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.RezMKSet": "Awaryjne załączenie sprężarki", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.ARS13Set": "ARS 13V: Sprawdzenie stabilizowanego napiÄ™cia ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!RouteNum": "М â„–\nRoute number", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!PathNum": "П â„–\nPath number", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchTime": "ВРЕМЯ ХОДÐ\nTotal schedule time", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchInterval": "ИÐТ\nTrain interval", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchHour": "ЧÐС\nHour", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchMin": "МИÐ\nMinute", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchSec": "СЕК\nSecond", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchArrival": "Arrival times", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchStations": "Station name", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!Speedometer": "Wskaźnik prÄ™dkoÅ›ci", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLSN": "LSN: Kontrolka sygnalizacji niesprawnoÅ›ci", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampRP": "RP: Kontrolka przekaźnika nadmiarowego", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLHRK": "LhRK: Ruch reostatu", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLKT": "LKT: ARS -- hamowanie", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLKVD": "LKVD: ARS -- wyłączenie silników", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLKVC": "LKVC: Kontrolka stycznika WN", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARSOch": "OCh: Brak czÄ™stotliwoÅ›ci ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS0": "0: SygnaÅ‚ ARS zatrzymania", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS40": "Ograniczenie prÄ™dkoÅ›ci do 40 km/h", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS60": "Ograniczenie prÄ™dkoÅ›ci do 60 km/h", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS70": "Ograniczenie prÄ™dkoÅ›ci do 70 km/h", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!ARS80": "Ograniczenie prÄ™dkoÅ›ci do 80 km/h", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLSD1": "LSD: Sygnalizacja drzwi (drzwi zamkniÄ™te)", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLSD2": "LSD: Sygnalizacja drzwi (drzwi zamkniÄ™te)", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLST": "LST: Kontrolka sygnalizacji hamowania", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLVD": "LVD: Kontrolka dziaÅ‚ania silników", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLN": "LN: Kontrolka kierunku", + "Entities.gmod_subway_81-717_mvm.Buttons.ARS.!LampLRS": "LRS: Kontrolka równoÅ›ci ograniczeÅ„ prÄ™dkoÅ›ci", + "Entities.gmod_subway_81-717_mvm.Buttons.PneumaticPanels.!CylinderPressure": "CiÅ›nienie w cylindach hamulcowych", + "Entities.gmod_subway_81-717_mvm.Buttons.PneumaticPanels.!LinePressure": "CiÅ›nienie w zbiorniku (czarna) i przewodzie głównym (czerwona)", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.RC1Toggle": "RC-1: Odłączenie obwodów ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.UOSToggle": "RC-UOS: UrzÄ…dzenie ograniczenia prÄ™dkoÅ›ci", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.VBToggle": "VB: Bateria akumulatorów", + "Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Zawór przewodu głównego sprzÄ™gu powietrznego", + "Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Zawór przewodu zasilajÄ…cego sprzÄ™gu powietrznego", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPMenuSet": "ASNP: Menu", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPUpSet": "ASNP: W górÄ™", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPDownSet": "ASNP: W dół", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPOnToggle": "ASNP: Włączenie", + "Entities.gmod_subway_81-717_mvm.Buttons.RearDoor.RearDoor": "Przednie drzwi", + "Entities.gmod_subway_81-717_mvm.Buttons.Meters.!TotalVoltmeter": "Woltomierz WN [kV]", + "Entities.gmod_subway_81-717_mvm.Buttons.Meters.!TotalAmpermeter": "Amperomierz [A]", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A61Toggle": "A61 Sterowanie przewodem 6", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A55Toggle": "A55 Sterowanie przewodem 10AS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A54Toggle": "A54 Sterowanie przewodem 10AK", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A56Toggle": "A56 Włączenie akumulatorów baterii", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A27Toggle": "A27 Włączenie DIP (komplementarnej jednostki zasilania) i oÅ›wietlenia", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A21Toggle": "A21 Sterowanie drzwiami", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A10Toggle": "A10 Sterowanie sprężarkÄ…", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A53Toggle": "A53 Zasilanie stycznika obwodów WN", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A43Toggle": "A43 Zasilanie 12 V systemu ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A45Toggle": "A45 Przewód ARS 10AU", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A42Toggle": "A42 Zasilanie 75 V systemu ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A41Toggle": "A41 Hamowanie ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.VUToggle": "VU Sterowanie pociÄ…giem", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A64Toggle": "A64 OÅ›wietlenie kabiny", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A63Toggle": "A63 IGLA/BIS (jednostka prÄ™dkoÅ›ciomierza)", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A50Toggle": "A50 Włączenie DIP i oÅ›wietlenia", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A51Toggle": "A51 Wyłączenie DIP i oÅ›wietlenia", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A23Toggle": "A23 Awaryjne załączanie sprężarki", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A14Toggle": "A14 Przewód 18", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A75Toggle": "A75 Ogrzewanie kabiny", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A1Toggle": "A1 X-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A2Toggle": "A2 X-2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A3Toggle": "A3 X-3", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A17Toggle": "A17 Odblokowywanie przekaźnika nadmiarowego", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A62Toggle": "A62 ÅÄ…czność radiowa", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A29Toggle": "A29 Nadawanie radiowe", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A5Toggle": "A5 ASNP: Automatyczny czytnik numeru pociÄ…gu", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A6Toggle": "A6 T-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A8Toggle": "A8 Zawory pneumatyczne #1 i #2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A20Toggle": "A20 Sterowanie jazdÄ… i hamowaniem, przewód 20", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A25Toggle": "A25 RÄ™czne hamowanie elektrodynamiczne", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A22Toggle": "A22 Zasilanie stycznika sprężarki", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A30Toggle": "A30 Zasilanie silnika reostatu", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A39Toggle": "A39 Sterowanie awaryjne", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A44Toggle": "A44 Awaryjne sterowanie pociÄ…gu", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A80Toggle": "A80 Zasilanie silnika przełącznika kuÅ‚akowego", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A65Toggle": "A65 OÅ›wietlenie klasy", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.L_5Toggle": "Ð49 OÅ›wietlenie awaryjne", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A24Toggle": "A24 Åadowanie baterii", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A32Toggle": "A32 Otwieranie prawych drzwi", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A31Toggle": "A31 Otwieranie lewych drzwi", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A16Toggle": "A16 Zamykanie drzwi", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A13Toggle": "A13 Dzwonek drzwi", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A12Toggle": "A12 Awaryjne zamykanie drzwi", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A7Toggle": "A7 Reflektor czerwony", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A9Toggle": "A9 Reflektor czerwony", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A46Toggle": "A46 Reflektory biaÅ‚e", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A47Toggle": "A47 Reflektory biaÅ‚e", + "Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor.PassengerDoor": "Drzwi do klasy", + "Entities.gmod_subway_81-717_mvm.Buttons.GV.GVToggle": "Wyłącznik główny", + "Entities.gmod_subway_81-717_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle": "Hamulec awaryjny", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.PrevSign": "NastÄ™pna tablica", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.NextSign": "Poprzednia tablica", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num2P": "Linia: ZwiÄ™ksz drugÄ… cyfrÄ™", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num2M": "Linia: Zmniejsz drugÄ… cyfrÄ™", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num1P": "Linia: ZwiÄ™ksz pierwszÄ… cyfrÄ™", + "Entities.gmod_subway_81-717_mvm.Buttons.InfoTableSelect.Num1M": "Linia: Zmniejsz pierwszÄ… cyfrÄ™", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.L_4Toggle": "Wyłącznik Å›wiateÅ‚", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VUSToggle": "VUS: Przyciemnianie Å›wiateÅ‚ jezdnych", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VAHToggle": "VAH: Jazda awaryjna (uszkodzenie przekaźnika czuwaka)", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VADToggle": "VAD: Awaryjne zamykanie drzwi (uszkodzony przekaźnik sterowania drzwiami)", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KRPSet": "KRP: Rozruch rezerwowy", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KAHSet": "KAH: Jazda awaryjna", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KAHKToggle": "Klapka przycisku KAH", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KUP": "Kontrola ogrzewania", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KDPSet": "KDP: Otwieranie prawych drzwi", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KDPKToggle": "Klapka przycisku KDP", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.PN": "Kontrola hamulca pneumatycznego", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A61Toggle": "A61 Sterowanie przewodem 6", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A55Toggle": "A55 Sterowanie przewodem 10AS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A54Toggle": "A54 Sterowanie przewodem 10AK", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A56Toggle": "A56 Włączenie akumulatorów baterii", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A27Toggle": "A27 Włączenie DIP (komplementarnej jednostki zasilania) i oÅ›wietlenia", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A21Toggle": "A21 Sterowanie drzwiami", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A10Toggle": "A10 Sterowanie sprężarkÄ…", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A53Toggle": "A53 Zasilanie stycznika obwodów WN", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A43Toggle": "A43 Zasilanie 12 V systemu ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A45Toggle": "A45 Przewód ARS 10AU", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A42Toggle": "A42 Zasilanie 75 V systemu ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A41Toggle": "A41 Hamowanie ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:VUToggle": "VU Sterowanie pociÄ…giem", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A64Toggle": "A64 OÅ›wietlenie kabiny", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A63Toggle": "A63 Włączenie IGLA/BIS (jednotki prÄ™dkoÅ›ciomierza)", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A50Toggle": "A50 Włączenie DIP i oÅ›wietlenia", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A51Toggle": "A51 Wyłączenie DIP i oÅ›wietlenia", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A23Toggle": "A23 Awaryjne załączanie sprężarki", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A14Toggle": "A14 Przewód 18", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A75Toggle": "A75 Ogrzewanie kabiny", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A1Toggle": "A1 X-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A2Toggle": "A2 X-2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A3Toggle": "A3 X-3", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A17Toggle": "A17 Odblokowywanie przekaźnika nadmiarowego", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A62Toggle": "A62 ÅÄ…czność radiowa", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A29Toggle": "A29 Nadawanie radiowe", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A5Toggle": "A5 ASNP: Automatyczny czytnik numeru pociÄ…gu", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A6Toggle": "A6 T-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A8Toggle": "A8 Zawory pneumatyczne #1 i #2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A20Toggle": "A20 Sterowanie jazdÄ… i hamowaniem, przewód 20", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A25Toggle": "A25 RÄ™czne hamowanie elektrodynamiczne", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A22Toggle": "A22 Zasilanie stycznika sprężarki", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A30Toggle": "A30 Zasilanie silnika reostatu", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A39Toggle": "A39 Sterowanie awaryjne", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A44Toggle": "A44 Awaryjne sterowanie pociÄ…gu", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A80Toggle": "A80 Zasilanie silnika przełącznika kuÅ‚akowego", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A65Toggle": "A65 OÅ›wietlenie klasy", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:L_5Toggle": "Ð49 OÅ›wietlenie awatyjne", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A24Toggle": "A24 Åadowanie baterii", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A32Toggle": "A32 Otwieranie prawych drzwi", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A31Toggle": "A31 Otwieranie lewych drzwi", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A16Toggle": "A16 Zamykanie drzwi", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A13Toggle": "A13 Dzwonek drzwi", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A12Toggle": "A12 Awaryjne zamykanie drzwi", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A7Toggle": "A7 Reflektor czerwony", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A9Toggle": "A9 Reflektor czerwony", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A46Toggle": "A46 Reflektory biaÅ‚e", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A47Toggle": "A47 Reflektory biaÅ‚e", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!Speedometer": "Wskaźnik prÄ™dkoÅ›ci", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LSD": "LSD: Sygnalizacja drzwi (drzwi zamkniÄ™te)", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LOCh": "NCh: Brak czÄ™stotliwoÅ›ci ARS", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L0": "0: SygnaÅ‚ ARS zatrzymania", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LRS": "LRS: Kontrolka równoÅ›ci prÄ™dkoÅ›ci", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L40": "Ograniczenie prÄ™dkoÅ›ci do 40 km/h", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L60": "Ograniczenie prÄ™dkoÅ›ci do 60 km/h", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L80": "Ograniczenie prÄ™dkoÅ›ci do 70 km/h", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!L70": "Ograniczenie prÄ™dkoÅ›ci do 80 km/h", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LRK": "RK: Ruch reostatu", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LEKK": "", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LPU": "", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LKVD": "LKVD: ARS -- wyłączenie silników", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LKT": "LKT: ARS -- hamowanie", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LRP": "RP: Kontrolka przekaźnika nadmiarowego", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LKVC": "LKVC: Brak zasilania WN", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LVD": "LVD: Silniki załączone", + "Entities.gmod_subway_81-717_mvm.Buttons.OldARS.!LST": "LST: Sygnalizacja hamowania", + "Entities.gmod_subway_81-717_mvm.Buttons.CabinDoor.CabinDoor": "Drzwi do klasy", + "Entities.gmod_subway_81-717_mvm.Buttons.Reverser.KVReverserDown": "Nawrotnik -- w tyÅ‚", + "Entities.gmod_subway_81-717_mvm.Buttons.Reverser.KVReverserUp": "Nawrotnik -- naprzód", + "Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor1.PassengerDoor": "Drzi do klasy", + "Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAToggle": "UAVA: (wyłączenie autostopu)", + "Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAContactSet": "UAVA: (odblokowanie przekaźników)", + "Entities.gmod_subway_81-717_mvm.Buttons.EPKDisconnect.EPKToggle": "EPV: zawór elektropneumatyczny", + "Entities.gmod_subway_81-717_mvm.Buttons.Help.ShowHelp": "Pomoc w prowadzeniu pociÄ…gu", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake2.1:ParkingBrakeToggle": "Hamulec postojowy", + "Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Zawór przewodu głównego sprzÄ™gu powietrznego", + "Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Zawór przewodu zasilajÄ…cego sprzÄ™gu powietrznego", + "Entities.gmod_subway_81-717_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Blokada dystrybutora powietrza", + + "Entities.gmod_subway_81-714_mvm.Buttons.GV.GVToggle": "Wyłącznik główny", + "Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Zawór przewodu głównego sprzÄ™gu powietrznego", + "Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Zawór przewodu zasilajÄ…cego sprzÄ™gu powietrznego", + "Entities.gmod_subway_81-714_mvm.Buttons.RearDoor.RearDoor": "Przednie drzwi", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.DriverValveBLDisconnectToggle": "Zawór dwudrożny przewodu głównego", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.DriverValveTLDisconnectToggle": "Zawór dwudrożny przewodu zasilajÄ…cego", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A65Toggle": "A65 OÅ›wietlenie klasy", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A56Toggle": "A56 Włączenie akumulatorów baterii", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A63Toggle": "A63 Włączenie IGLA/BIS (jednostki prÄ™dkoÅ›ciomierza)", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A10Toggle": "A10 Sterowanie sprężarkÄ…", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A30Toggle": "A30 Zasilanie silnika reostatu", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A80Toggle": "A80 Zasilanie silnika przełącznika kuÅ‚akowego", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Zawór przewodu głównego sprzÄ™gu powietrznego", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Zawór przewodu zasilajÄ…cego sprzÄ™gu powietrznego", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.ParkingBrakeToggle": "Hamulec postojowy", + "Entities.gmod_subway_81-714_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Blokada dystrybutora powietrza", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontDoor.FrontDoor": "Przednie drzwi", + "Entities.gmod_subway_81-714_mvm.Buttons.Battery.VBToggle": "VB: Baterie akumulatorów", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A54Toggle": "A54 Sterowanie przewodem 10AK", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A27Toggle": "A27 Włączenie DIP (komplementarnej jednostki zasilania) i oÅ›wietlenia", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A24Toggle": "A24 Åadowanie baterii", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A53Toggle": "A53 Zasilanie stycznika obwodów WN", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A13Toggle": "A13 Dzwonek drzwi", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A32Toggle": "A32 Otwieranie prawych drzwi", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A31Toggle": "A31 Otwieranie lewych drzwi", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A16Toggle": "A16 Zamykanie drzwi", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A12Toggle": "A12 Awaryjne zamykanie drzwi", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A50Toggle": "A50 Włączenie DIP i oÅ›wietlenia", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A51Toggle": "A51 Wyłączenie DIP i oÅ›wietlenia", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A1Toggle": "A1 X-1", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.KRPSet": "START: Rozruch awaryjny", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.VozvratRPSet": "Oblokowanie przekaźnika nadmiarowego", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.RezMKSet": "Awaryjne załączanie sprężarki", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.VMKToggle": "Włączanie sprężarki", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.BPSNonToggle": "BPSN: Zasilanie systemów pociÄ…gu", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A2Toggle": "A2 X-2", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A3Toggle": "A3 X-3", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A17Toggle": "A17 Odblokowanie przekaźnika nadmiarowego", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A5Toggle": "A5 ASNP: Automatyczny czytnik numeru pociÄ…gu", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A6Toggle": "A6 T-1", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A8Toggle": "A8 Zawory pneumatyczne #1 i #2", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A20Toggle": "A20 Sterowanie jazdÄ… i hamowaniem, przewód 20", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A25Toggle": "A25 RÄ™czne hamowanie elektrodynamiczne", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A22Toggle": "A22 Zasilanie stycznika sprężarki", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A23Toggle": "A23 Awaryjne załączanie sprężarki", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A39Toggle" : "A39 Sterowanie awaryjne", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A14Toggle" : "A14 Przewód 18" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/pl_buttons_720.lua b/lua/metrostroi_data/languages_/_unfinished/pl_buttons_720.lua new file mode 100644 index 0000000..d42173b --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/pl_buttons_720.lua @@ -0,0 +1,220 @@ +return [[ +{ + "Lang" : "pl", + "Name" : "Polish", + + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF1Set" : "Vityaz: F1", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF2Set" : "Vityaz: NastÄ™pny ekran", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF3Set" : "Vityaz: Poprzedni ekran", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF4Set" : "Vityaz: Tryb zasadniczy", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz1Set" : "Vityaz: 1", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz4Set" : "Vityaz: 4", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz7Set" : "Vityaz: 7", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz2Set" : "Vityaz: 2", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz5Set" : "Vityaz: 5", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz8Set" : "Vityaz: 8", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz0Set" : "Vityaz: 0", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz3Set" : "Vityaz: 3", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz6Set" : "Vityaz: 6", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz9Set" : "Vityaz: 9", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF5Set" : "Vityaz: UsuÅ„", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF6Set" : "Vityaz: W górÄ™\\PrÄ™dkość", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF7Set" : "Vityaz: W dół\\PrÄ…dy", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF8Set" : "Vityaz: Wprowadzanie\\Wyposażenie wagonów", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF9Set" : "Vityaz: Wybór\\Sterowanie wyposażeniem wagonów", + "Entities.gmod_subway_81-720.Buttons.RV.EmerX1Set" : "X-1 rezerwowy", + "Entities.gmod_subway_81-720.Buttons.RV.EmerX2Set" : "X-2 rezerwowy", + "Entities.gmod_subway_81-720.Buttons.RV.EmerCloseDoorsSet" : "Awaryjne zamykanie drzwi", + "Entities.gmod_subway_81-720.Buttons.RV.EmergencyDoorsToggle" : "Drzwi awaryjne", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode-" : "Tryb pracy wentylatora: +", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode+" : "Tryb pracy wentylatora: -", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode+" : "+", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode-" : "-", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode-" : "Moc wentylatora: +", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode+" : "Moc wentylatora: -", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV1Toggle" : "SF1: Zasilanie obwodów sterowania wagonu", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV2Toggle" : "SF2: Zasilanie BUV (jednostki sterowania wagonu)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV3Toggle" : "SF3: Zasilanie BUTP (jednostki sterowania silnikami)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV4Toggle" : "SF4: Sterowanie BUTP", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV5Toggle" : "SF5: Awaryjne sterowanie BUTP", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV6Toggle" : "SF6: Zasilanie BUTP", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV7Toggle" : "SF7: BBE (zasilanie pokÅ‚adowe)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV8Toggle" : "SF8: Sterowanie BV (przekaźnik nadmiarowy)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV9Toggle" : "SF9: Zasilanie BV (przekaźnik nadmiarowy)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV10Toggle" : "SF10: PPO (ochrona przeciwpożarowa)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV11Toggle" : "SF11: Sprężarka", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV12Toggle" : "SF12: ZamkniÄ™cie drzwi", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV13Toggle" : "SF13: Otwarcie drzwi lewych", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV14Toggle" : "SF14: Otwarcie drzwi prawych", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV15Toggle" : "SF15: Przednie drzwi", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV16Toggle" : "SF16: Zapowiedzi gÅ‚osowe", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV17Toggle" : "SF17: Radiowa linia awaryjna", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV18Toggle" : "SF18: (placeholder)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV19Toggle" : "SF19: Zasilanie oÅ›wietlenia klasy", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV20Toggle" : "SF20: Awaryjne oÅ›wietlenie klasy", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV21Toggle" : "SF21: Czujnik prÄ™dkoÅ›ci", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV22Toggle" : "SF22: Hamulec postojowy", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV23Toggle" : "SF23: Sterowanie wentylatorami: pierwsza grupa", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV24Toggle" : "SF24: Sterowanie wentylatorami: druga grupa", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV25Toggle" : "SF25: Zasilanie wentylatorów: pierwsza grupa", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV26Toggle" : "SF26: Zasilanie wentylatorów: druga grupa", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV27Toggle" : "SF27: Zasilanie wzbudnicy", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV28Toggle" : "SF28: Zasilanie ZKK", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV29Toggle" : "SF29: Odbieraki prÄ…du", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV30Toggle" : "SF30: Tablice Å›wietlne", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV31Toggle" : "SF31: (placeholder)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV32Toggle" : "SF32: (placeholder)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV33Toggle" : "SF33: (placeholder)", + "Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPMenuSet" : "ASNP: Menu", + "Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPUpSet" : "ASNP: W górÄ™", + "Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPDownSet" : "ASNP: W dół", + "Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPOnToggle" : "ASNP: Włączenie", + "Entities.gmod_subway_81-720.Buttons.PneumoHelper1.!BrakeCylinder" : "Cylinder hamulcowy", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF1Toggle" : "SF1: Zasilanie ogólne", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF2Toggle" : "SF2: Sterowanie zasadnicze", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF3Toggle" : "SF3: Sterowanie rezerwowe", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF4Toggle" : "SF4: BARS (blok ARS)", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF5Toggle" : "SF5: BUP (jednostka sterowania pociÄ…giem)", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF6Toggle" : "SF6: BKCU (jednostka komutacji sieci sterowania)", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF7Toggle" : "SF7: BARS (blok ARS)", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF8Toggle" : "SF8: Zapowiedzi gÅ‚osowe", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF9Toggle" : "SF9: Radiostacja", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF10Toggle" : "SF10: Orientacja wagonu", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF11Toggle" : "SF11: Zwrot jazdy", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF12Toggle" : "SF12: Reflektory grupy pierwszej", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF13Toggle" : "SF13: Reflektory grupy drugiej", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF14Toggle" : "SF14: ÅšwiatÅ‚a obrysowe", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF15Toggle" : "SF15: OÅ›wietlenie kabiny", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF16Toggle" : "SF16: Ogrzewanie", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF17Toggle" : "SF17: Klimatyzacja kabiny", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF18Toggle" : "SF18: Smarowanie obrzeży kół", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF19Toggle" : "SF19: Zasilanie główne KRM (kranu hamulca)", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF20Toggle" : "SF20: Zasilanie rezerwowe KRM (kranu hamulca)", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF21Toggle" : "SF21: Otwieranie drzwi", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF22Toggle" : "SF22: Zamykanie drzwi", + "Entities.gmod_subway_81-720.Buttons.BTO.K29Toggle" : "KRMSh (driver disconnect valve)", + "Entities.gmod_subway_81-720.Buttons.PassengerDoor2.PassengerDoor" : "Drzwi do klasy", + "Entities.gmod_subway_81-720.Buttons.VoltHelper2.!HV" : "Woltomierz WN [kV]", + "Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I1_3" : "PrÄ…d pierwszej grupy silników [A]", + "Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I2_4" : "2nd engine group current [A]", + "Entities.gmod_subway_81-720.Buttons.GV.GVToggle" : "Wyłącznik główny", + "Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearBrakeLineIsolationToggle" : "Zawór przewodu głównego sprzÄ™gu powietrznego", + "Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearTrainLineIsolationToggle" : "Zawór przedogu zasilajÄ…cego sprzÄ™gu powietrznego", + "Entities.gmod_subway_81-720.Buttons.RearDoor1.RearDoor" : "Drzwi tylne", + "Entities.gmod_subway_81-720.Buttons.RearDoor.RearDoor" : "Drzwi tylne", + "Entities.gmod_subway_81-720.Buttons.BackDown.Pant1Toggle" : "Odłączenie pierwszej grupy odbieraków", + "Entities.gmod_subway_81-720.Buttons.BackDown.Pant2Toggle" : "Odłączenie drugiej grupy odbieraków", + "Entities.gmod_subway_81-720.Buttons.BackDown.Vent1Toggle" : "Pierwsza grupa wentylacji", + "Entities.gmod_subway_81-720.Buttons.BackDown.Vent2Toggle" : "Druga grupa wentylacji", + "Entities.gmod_subway_81-720.Buttons.BackDown.VentToggle" : "", + "Entities.gmod_subway_81-720.Buttons.BackDown.PassLightToggle" : "OÅ›wietlenie klasy", + "Entities.gmod_subway_81-720.Buttons.BackDown.CabLightToggle" : "OÅ›wietlenie kabiny", + "Entities.gmod_subway_81-720.Buttons.BackDown.Headlights1Toggle" : "Reflektory grupy pierwszej", + "Entities.gmod_subway_81-720.Buttons.BackDown.Headlights2Toggle" : "Reflektory grupy drugiej", + "Entities.gmod_subway_81-720.Buttons.BackDown.ParkingBrakeToggle" : "Hamulec postojowy", + "Entities.gmod_subway_81-720.Buttons.BackDown.TorecDoorsToggle" : "Drzwi przednie", + "Entities.gmod_subway_81-720.Buttons.BackDown.BBERToggle" : "Turning on emergency BBE", + "Entities.gmod_subway_81-720.Buttons.BackDown.BBEToggle" : "BBE (zasilanie pokÅ‚adowe)", + "Entities.gmod_subway_81-720.Buttons.BackDown.CompressorToggle" : "Sprężarka", + "Entities.gmod_subway_81-720.Buttons.BackDown.CabLightStrengthToggle" : "Moc oÅ›wietlenia kabiny", + "Entities.gmod_subway_81-720.Buttons.BackDown.AppLights1Toggle" : "OÅ›wietlenie urzÄ…dzeÅ„ wagonu", + "Entities.gmod_subway_81-720.Buttons.BackDown.AppLights2Toggle" : "", + "Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock-" : "Blokada uszkodzonych bloków ARS: -", + "Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock+" : "Blokada uszkodzonych bloków ARS: +", + "Entities.gmod_subway_81-720.Buttons.BackDown.BatteryToggle" : "Wyłącznik baterii", + "Entities.gmod_subway_81-720.Buttons.BackDown.ALSFreqToggle" : "Dekoder ALS", + "Entities.gmod_subway_81-720.Buttons.VoltHelper1.!Battery" : "Woltomierz baterii akumulatorów", + "Entities.gmod_subway_81-720.Buttons.PassengerDoor.PassengerDoor" : "Drzwi do klasy", + "Entities.gmod_subway_81-720.Buttons.CabinDoorR.CabinDoorRight" : "Drzwi do kabiny", + "Entities.gmod_subway_81-720.Buttons.CabinDoorL.CabinDoorLeft" : "Drzwi do kabiny", + "Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle" : "Zawór przewodu głównego sprzÄ™gu powietrznego", + "Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle" : "Zawór przewodu zasilajÄ…cego sprzÄ™gu powietrznego", + "Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectLToggle" : "Wybór lewych drzwi", + "Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectRToggle" : "Wybór prawych drzwi", + "Entities.gmod_subway_81-720.Buttons.PUL.DoorBlockToggle" : "Blokada drzwi", + "Entities.gmod_subway_81-720.Buttons.PUL.!DoorLeftLamp" : "Praca przycisku lewych drzwi", + "Entities.gmod_subway_81-720.Buttons.PUL.DoorLeftSet" : "Drzwi lewe", + "Entities.gmod_subway_81-720.Buttons.PUU.!DoorsClosed" : "Drzwi sÄ… zamkniÄ™te", + "Entities.gmod_subway_81-720.Buttons.PUU.StandToggle" : "Postój", + "Entities.gmod_subway_81-720.Buttons.PUU.TickerToggle" : "Tablica ledowa", + "Entities.gmod_subway_81-720.Buttons.PUU.KAHToggle" : "KAH", + "Entities.gmod_subway_81-720.Buttons.PUU.ALSToggle" : "ALS", + "Entities.gmod_subway_81-720.Buttons.PUU.FDepotToggle" : "Wyjazd z zajezdni", + "Entities.gmod_subway_81-720.Buttons.PUU.!HVoltage" : "Sieć trakcyjna", + "Entities.gmod_subway_81-720.Buttons.PUU.PassSchemeToggle" : "Tablica nad drzwiami", + "Entities.gmod_subway_81-720.Buttons.PUU.EmergencyCompressorSet" : "Sprężarka rezerwowa", + "Entities.gmod_subway_81-720.Buttons.PUU.EnableBVSet" : "Włączenie ochrony", + "Entities.gmod_subway_81-720.Buttons.PUU.DisableBVSet" : "Wyłączenie BV (przekaźnika nadmiarowego)", + "Entities.gmod_subway_81-720.Buttons.PUU.RingSet" : "Przekazanie sterowania (dzwonek)", + "Entities.gmod_subway_81-720.Buttons.PUU.R_Program2Set" : "Zapowiedź 2", + "Entities.gmod_subway_81-720.Buttons.PUU.R_AnnouncerToggle" : "Zapowiedzi gÅ‚osowe", + "Entities.gmod_subway_81-720.Buttons.PUU.R_LineToggle" : "Linia", + "Entities.gmod_subway_81-720.Buttons.PUU.R_EmerSet" : "Radiowa sieć awaryjna", + "Entities.gmod_subway_81-720.Buttons.PUU.R_Program1Set" : "Zapowiedź 1", + "Entities.gmod_subway_81-720.Buttons.PUU.EnableBVEmerSet" : "Rezerwowe odblokowanie BV", + "Entities.gmod_subway_81-720.Buttons.PUU.EmergencyControlsToggle" : "Sterowanie rezerwowe", + "Entities.gmod_subway_81-720.Buttons.PUU.WiperToggle" : "Wycieraczka", + "Entities.gmod_subway_81-720.Buttons.PUU.!VDop" : "PrÄ™dkość dopuszczalna", + "Entities.gmod_subway_81-720.Buttons.PUU.!VFact" : "PrÄ™dkość rzeczywista", + "Entities.gmod_subway_81-720.Buttons.PUU.!VPred" : "PrÄ™dkość zalecana", + "Entities.gmod_subway_81-720.Buttons.PUU.!VDop2" : "PrÄ™dkość dopuszczalna", + "Entities.gmod_subway_81-720.Buttons.PUU.!Acc" : "Przyspieszenie", + "Entities.gmod_subway_81-720.Buttons.PUU.!Forw" : "Jazda naprzód", + "Entities.gmod_subway_81-720.Buttons.PUU.!Back" : "Jazda w tyÅ‚", + "Entities.gmod_subway_81-720.Buttons.PUR.AccelRateToggle" : "Przyspieszenie", + "Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeAddSet" : "(rezerwowy) Hamulec", + "Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeReleaseSet" : "(rezerwowy) Luzowanie", + "Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeToggle" : "Hamulec rezerwowy", + "Entities.gmod_subway_81-720.Buttons.PUR.EmergencyBrakeToggle" : "Hamulec awaryjny", + "Entities.gmod_subway_81-720.Buttons.PUR.DoorCloseToggle" : "ZamkniÄ™cie drzwi", + "Entities.gmod_subway_81-720.Buttons.PUR.AttentionMessageSet" : "Message perception", + "Entities.gmod_subway_81-720.Buttons.PUR.AttentionSet" : "Attention", + "Entities.gmod_subway_81-720.Buttons.PUR.AttentionBrakeSet" : "Czujnik hamowania", + "Entities.gmod_subway_81-720.Buttons.PUR.HornBSet" : "SygnaÅ‚", + "Entities.gmod_subway_81-720.Buttons.PUR.DoorRightSet" : "Drzwi prawe", + "Entities.gmod_subway_81-720.Buttons.PUR.!DoorRightLamp" : "Praca przycisku prawych drzwi", + "Entities.gmod_subway_81-720.Buttons.PneumoHelper2.!BrakeTrainLine" : "Czerwona - przewód gÅ‚., czarna - przewód zas.", + + "Entities.gmod_subway_81-721.Buttons.GV.GVToggle" : "Wyłącznik główny", + "Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearBrakeLineIsolationToggle" : "Zawór przewodu głównego sprzÄ™gu powietrznego", + "Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearTrainLineIsolationToggle" : "Zawór przewodu zasilajÄ…cego sprzÄ™gu powietrznego", + "Entities.gmod_subway_81-721.Buttons.FrontDoor.FrontDoor" : "Drzwi przednie", + "Entities.gmod_subway_81-721.Buttons.RearDoor.RearDoor" : "Drzwi tylne", + "Entities.gmod_subway_81-721.Buttons.Battery.BatteryToggle" : "Baterie akumulatorów", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV1Toggle" : "SF1: Zasilanie obwodów sterowania wagonu", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV2Toggle" : "SF2: Zasilanie BUV (wagon controlling unit)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV3Toggle" : "SF3: Zasilanie BUTP (engines controlling unit)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV4Toggle" : "SF4: Sterowanie BUTP", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV5Toggle" : "SF5: Awaryjne sterowanie BUTP", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV6Toggle" : "SF6: Zasilanie BUTP", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV7Toggle" : "SF7: BBE (zasilanie pokÅ‚adowe)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV8Toggle" : "SF8: Sterowanie BV", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV9Toggle" : "SF9: Zasilanie BV (przekaźnik nadmiarowy)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV10Toggle" : "SF10: PPO (ochrona przeciwpożarowa)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV11Toggle" : "SF11: Sprężarka", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV12Toggle" : "SF12: Zamykanie drzwi", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV13Toggle" : "SF13: Otwieranie lewych drzwi", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV14Toggle" : "SF14: Otwieranie prawych drzwi", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV15Toggle" : "SF15: Drzwi przednie", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV16Toggle" : "SF16: Zapowiedzi gÅ‚osowe", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV17Toggle" : "SF17: Radiowa sieć awaryjna", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV18Toggle" : "SF18: (placeholder)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV19Toggle" : "SF19: Zasilanie oÅ›wietlenia klasy", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV20Toggle" : "SF20: Awaryjne oÅ›wietlenie klasy", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV21Toggle" : "SF21: Czujnik prÄ™dkoÅ›ci", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV22Toggle" : "SF22: Hamulec postojowy", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV23Toggle" : "SF23: Sterowanie wentylatorami: pierwsza grupa", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV24Toggle" : "SF24: Sterowanie wentylatorami: druga grupa", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV25Toggle" : "SF25: Zasilanie wentylatorów: pierwsza grupa", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV26Toggle" : "SF26: Zasilanie wentylatorów: druga grupa", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV27Toggle" : "SF27: Zasilanie wzbudnicy", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV28Toggle" : "SF28: Zasilanie ZKK", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV29Toggle" : "SF29: Odbieraki prÄ…du", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV30Toggle" : "SF30: Tablice Å›wietlne", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV31Toggle" : "SF31: (placeholder)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV32Toggle" : "SF32: (placeholder)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV33Toggle" : "SF33: (placeholder)", + "Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle" : "Zawór przewodu głównego sprzÄ™gu powietrznego", + "Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle" : "Zawór przewodu zasilajÄ…cego sprzÄ™gu powietrznego" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/pl_buttons_ezh3.lua b/lua/metrostroi_data/languages_/_unfinished/pl_buttons_ezh3.lua new file mode 100644 index 0000000..de1e591 --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/pl_buttons_ezh3.lua @@ -0,0 +1,140 @@ +return [[ +{ + "Lang" : "pl", + "Name" : "polski", + + + "Entities.gmod_subway_ezh3.Buttons.Stopkran.EmergencyBrakeValveToggle" : "Hamulec awaryjny", + "Entities.gmod_subway_ezh3.Buttons.Back.BackDoor" : "Drzwi tylne", + "Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle" : "Zawór dwudrożny przewodu głównego", + "Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle" : "Zawór dwudrożny przewodu zasilajÄ…cego", + "Entities.gmod_subway_ezh3.Buttons.Battery.VBToggle" : "AB: Włącznik akumulatorów baterii", + "Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle" : "Zawór przewodu głównego sprzÄ™gu powietrznego", + "Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle" : "Zawór przewodu zasilajÄ…cegosprzÄ™gu powietrznego", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPMenuSet" : "Informator: Menu", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPUpSet" : "Informator: W górÄ™", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPDownSet" : "Informator: W dół", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPOnToggle" : "Informator: Włączenie", + "Entities.gmod_subway_ezh3.Buttons.PassengerDoor1.PassengerDoor" : "Drzwi do klasy", + "Entities.gmod_subway_ezh3.Buttons.PassengerDoor.PassengerDoor" : "Drzwi do klasy", + "Entities.gmod_subway_ezh3.Buttons.CabinDoor.CabinDoor" : "Drzwi do kabiny", + "Entities.gmod_subway_ezh3.Buttons.Front.FrontDoor" : "Drzwi przednie", + "Entities.gmod_subway_ezh3.Buttons.GV.GVToggle" : "Wyłącznik główny", + "Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearTrainLineIsolationToggle" : "Zawór przewodu zasilajÄ…cego sprzÄ™gu powietrznego", + "Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearBrakeLineIsolationToggle" : "Zawór przewodu głównego sprzÄ™gu powietrznego", + "Entities.gmod_subway_ezh3.Buttons.Panel.!OCH" : "ОЧ: Kontrolka braku sygnaÅ‚u ARS", + "Entities.gmod_subway_ezh3.Buttons.Panel.!0" : "0: Kontrolka sygnaÅ‚u zatrzymania ARS", + "Entities.gmod_subway_ezh3.Buttons.Panel.!40" : "40: Kontrolka ograniczenia prÄ™dkoÅ›ci do 40 km/h", + "Entities.gmod_subway_ezh3.Buttons.Panel.!60" : "60: Kontrolka ograniczenia prÄ™dkoÅ›ci do 60 km/h", + "Entities.gmod_subway_ezh3.Buttons.Panel.!70" : "70: Kontrolka ograniczenia prÄ™dkoÅ›ci do 70 km/h", + "Entities.gmod_subway_ezh3.Buttons.Panel.!80" : "80: Kontrolka ograniczenia prÄ™dkoÅ›ci do 80 km/h", + "Entities.gmod_subway_ezh3.Buttons.Panel.!Speedometer" : "Wskaźnik prÄ™dkoÅ›ci [km/h]", + "Entities.gmod_subway_ezh3.Buttons.Panel.!TotalAmpermeter" : "Amperomierz WN [Ð]", + "Entities.gmod_subway_ezh3.Buttons.Panel.!TotalVoltmeter" : "Woltomierz WN [kV]", + "Entities.gmod_subway_ezh3.Buttons.Panel.!BatteryVoltage" : "NapiÄ™cie akumulatorów baterii [V]", + "Entities.gmod_subway_ezh3.Buttons.Panel.!BrakeCylinder" : "CiÅ›nienie w cylindrach hamulcowych", + "Entities.gmod_subway_ezh3.Buttons.Panel.!LinesPressure" : "CiÅ›nienie w zbiorniku (czarna) i przewodzie głównym (czerwona)", + "Entities.gmod_subway_ezh3.Buttons.Main.KU1Toggle" : "VMK: Włączenie sprężarki", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMM1Set" : "СÐММ: Wyłączenie rozruchu", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMM2Set" : "СÐММ: Start", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMM3Set" : "СÐММ: Reset", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal1" : "Kontrolka: Jazda-hamowanie", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal2" : "Kontrolka: DziaÅ‚anie СÐММ", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal3" : "Kontrolka: Włączona jednostka wykonawcza СÐММ", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMOnToggle" : "СÐММ: Włączenie sytemu automatycznego prowadzenia skÅ‚adu", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMBlokToggle" : "СÐММ: Jednostka wykonawcza", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMCommand3Set" : "СÐММ: X-2", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMCommand2Set" : "СÐММ: Doganianie rozkÅ‚adu", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMCommand1Set" : "СÐММ: Zezwolenie", + "Entities.gmod_subway_ezh3.Buttons.Main.KSNSet" : "КСÐ: Sygnalizacja usterki", + "Entities.gmod_subway_ezh3.Buttons.Main.R_Program1Set" : "Zapowiedź 1", + "Entities.gmod_subway_ezh3.Buttons.Main.R_Program2Set" : "Zapowiedź 2", + "Entities.gmod_subway_ezh3.Buttons.Main.VUSToggle" : "Przyciemnianie Å›wiateÅ‚ jezdnych", + "Entities.gmod_subway_ezh3.Buttons.Main.L_3Toggle" : "OÅ›wietlenie przyrzÄ…dów", + "Entities.gmod_subway_ezh3.Buttons.Main.VAHToggle" : "Jazda awaryjna", + "Entities.gmod_subway_ezh3.Buttons.Main.DIPonSet" : "Włączanie oÅ›wietlenia", + "Entities.gmod_subway_ezh3.Buttons.Main.DIPoffSet" : "Wyłączanie oÅ›wietlenia", + "Entities.gmod_subway_ezh3.Buttons.Main.KSDSet" : "KSD: Sprawdzanie sygnalizacji drzwi", + "Entities.gmod_subway_ezh3.Buttons.Main.KVTSet" : "КВТ: Kasowanie hamowania ARS", + "Entities.gmod_subway_ezh3.Buttons.Main.KBSet" : "КB: Czuwak (przycisk)", + "Entities.gmod_subway_ezh3.Buttons.Main.KBLamp" : "LHRK: Ruch reostatu", + "Entities.gmod_subway_ezh3.Buttons.Main.ARSToggle" : "ÐRS: Automatyczna regulacja prÄ™dkoÅ›ci", + "Entities.gmod_subway_ezh3.Buttons.Main.R_UNchToggle" : "UNCh: Wzmacniacz niskich czÄ™stotliwoÅ›ci", + "Entities.gmod_subway_ezh3.Buttons.Main.VUD1Toggle" : "VUD: Włącznik sterowania drzwiami", + "Entities.gmod_subway_ezh3.Buttons.Main.R_RadioToggle" : "Zapowiedzi gÅ‚osowe (wbudowane)", + "Entities.gmod_subway_ezh3.Buttons.Main.ALSToggle" : "ÐLS: Automatyczna sygnalizacja pociÄ…gu", + "Entities.gmod_subway_ezh3.Buttons.Main.VozvratRPSet" : "KVRP: Odblokowanie przekaźnika nadmiarowego", + "Entities.gmod_subway_ezh3.Buttons.Main.RingSet" : "Dzwonek", + "Entities.gmod_subway_ezh3.Buttons.Main.L_2Toggle" : "OÅ›wietlenie kabiny", + "Entities.gmod_subway_ezh3.Buttons.Main.KRZDSet" : "KRZD: Awaryjne zamykanie drzwi", + "Entities.gmod_subway_ezh3.Buttons.Main.KDPSet" : "KDP: Otwieranie prawych drzwi", + "Entities.gmod_subway_ezh3.Buttons.Main.KDLSet" : "KDL: Otwieranie lewych drzwi", + "Entities.gmod_subway_ezh3.Buttons.Main.KAHSet" : "KAH: Jazda awaryjna", + "Entities.gmod_subway_ezh3.Buttons.Main.RezMKSet" : "Awaryjne załączanie sprężarki", + "Entities.gmod_subway_ezh3.Buttons.Main.KRPSet" : "KRP: Rozruch awaryjny", + "Entities.gmod_subway_ezh3.Buttons.Main.RSTToggle" : "VPR: Załączenie radiostacji", + "Entities.gmod_subway_ezh3.Buttons.Main.R_GToggle" : "GÅ‚oÅ›nik (dźwiÄ™k w kabinie)", + "Entities.gmod_subway_ezh3.Buttons.Main.R_ZSToggle" : "ZS: NagÅ‚oÅ›nienie klasy", + "Entities.gmod_subway_ezh3.Buttons.Main.Custom2Set" : "Nieużywany przełącznik", + "Entities.gmod_subway_ezh3.Buttons.Main.Custom3Set" : "Nieużywany przełącznik", + "Entities.gmod_subway_ezh3.Buttons.Main.ASNPPlay" : "Odtwarzanie zapowiedzi", + "Entities.gmod_subway_ezh3.Buttons.AV1.VU3Toggle" : "VU3: OÅ›wietlenie kabiny", + "Entities.gmod_subway_ezh3.Buttons.AV1.VU2Toggle" : "VU2: Awaryjne oÅ›wietlenie (45 V)", + "Entities.gmod_subway_ezh3.Buttons.AV1.VU1Toggle" : "VU1: Ogrzewanie kabiny (3 kW)\n", + "Entities.gmod_subway_ezh3.Buttons.AVMain.AV8BToggle" : "ÐV-8B: Wyłącznik automatyczny WN", + "Entities.gmod_subway_ezh3.Buttons.RC1.RC1Toggle" : "RC_ARS: Odłączenie obwodów ARS", + "Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAToggle" : "UAVA: Wyłączenie autostopu", + "Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAContactSet" : "UAVA: odblokowanie przekaźników", + "Entities.gmod_subway_ezh3.Buttons.VUHelper.VUToggle" : "VU: Wyłącznik sterowania", + "Entities.gmod_subway_ezh3.Buttons.HelperPanel.VDLSet" : "VDL: Otwieranie lewych drzwi", + "Entities.gmod_subway_ezh3.Buttons.HelperPanel.VUD2Toggle" : "VUD2: Włącznik sterowania drzwiami", + "Entities.gmod_subway_ezh3.Buttons.EPKDisconnect.EPKToggle" : "EPV: Zawór elektropneumatyczny", + "Entities.gmod_subway_ezh3.Buttons.VU.VUToggle" : "VU: Sterowanie pociÄ…giem", + "Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeLeft" : "Powrót koÅ‚a hamulca rÄ™cznego", + "Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeRight" : "Powrót koÅ‚a hamulca rÄ™cznego", + "Entities.gmod_subway_ezh3.Buttons.AirDistributor.AirDistributorDisconnectToggle" : "Blokada dystrybutora powietrza", + + "Entities.gmod_subway_em508t.Buttons.Stopkran.EmergencyBrakeValveToggle" : "Hamulec awaryjny", + "Entities.gmod_subway_em508t.Buttons.Battery.VBToggle" : "AB: Włącznik akumulatorów baterii (obwody wspomagajÄ…ce NN)", + "Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle" : "Zawór przewodu głównego sprzÄ™gu powietrznego", + "Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle" : "Zawór przewodu zasilajÄ…cego sprzÄ™gu powietrznego", + "Entities.gmod_subway_em508t.Buttons.GV.GVToggle" : "Wyłącznik główny", + "Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearTrainLineIsolationToggle" : "Zawór przewodu zasilajÄ…cego sprzÄ™gu powietrznego", + "Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearBrakeLineIsolationToggle" : "Zawór przewodu głównego sprzÄ™gu powietrznego", + "Entities.gmod_subway_em508t.Buttons.RearDoor.RearDoor" : "Drzwi do klasy", + "Entities.gmod_subway_em508t.Buttons.Back2.!HVFuse" : "Blok bezpieczników WN", + "Entities.gmod_subway_em508t.Buttons.Back2.!Relays" : "Skrzynia aparatów Å‚adowania baterii akumulatorów i dystrybucji powietrza do siÅ‚owników drzwi", + "Entities.gmod_subway_em508t.Buttons.Back2.!Heater" : "Farelka", + "Entities.gmod_subway_em508t.Buttons.Front.FrontDoor" : "Drzwi przednie", + "Entities.gmod_subway_em508t.Buttons.AV1.VU3Toggle" : "VU3: OÅ›wietlenie kabiny\n", + "Entities.gmod_subway_em508t.Buttons.AV1.VU2Toggle" : "VU2: Awaryjne oÅ›wietlenie (45 V)", + "Entities.gmod_subway_em508t.Buttons.AV1.VU1Toggle" : "VU1: Ogrzewanie kabiny (3 kW)", + "Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeLeft" : "Powrót koÅ‚a hamulca rÄ™cznego", + "Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeRight" : "Powrót koÅ‚a hamulca rÄ™cznego", + "Entities.gmod_subway_em508t.Buttons.CabinDoor.CabinDoor1" : "Drzwi do kabiny", + "Entities.gmod_subway_em508t.Buttons.PassengerDoor.PassengerDoor" : "Drzwi do klasy", + "Entities.gmod_subway_em508t.Buttons.PassengerDoor1.PassengerDoor" : "Drzwi do klasy", + "Entities.gmod_subway_em508t.Buttons.Main.!RedRP" : "RP: Obwody mocy nie załączyÅ‚y siÄ™", + "Entities.gmod_subway_em508t.Buttons.Main.!GreenRP" : "RP: ZadziaÅ‚anie przekaźnika nadmiarowego", + "Entities.gmod_subway_em508t.Buttons.Main.!SD" : "SD: Sygnalizacja drzwi", + "Entities.gmod_subway_em508t.Buttons.Main.KDLSet" : "Otwieranie lewych drzwi", + "Entities.gmod_subway_em508t.Buttons.Main.KSDSet" : "KSD: Sprawdzanie sygnalizacji drzwi", + "Entities.gmod_subway_em508t.Buttons.Main.VozvratRPSet" : "VozvratRP: Odblokowanie przekaźnika nadmiarowego", + "Entities.gmod_subway_em508t.Buttons.Main.KSNSet" : "Sygnalizacja usterki", + "Entities.gmod_subway_em508t.Buttons.Main.VUD1Toggle" : "Włącznik sterowania drzwiami", + "Entities.gmod_subway_em508t.Buttons.Main.KU1Toggle" : "Włącznik sprężarki", + "Entities.gmod_subway_em508t.Buttons.Main.DIPonSet" : "KU4: Włączanie oÅ›wietlenia", + "Entities.gmod_subway_em508t.Buttons.Main.DIPoffSet" : "KU5: Wyłączanie oÅ›wietlenia", + "Entities.gmod_subway_em508t.Buttons.Main.RezMKSet" : "Awaryjne załączanie sprężarki", + "Entities.gmod_subway_em508t.Buttons.Main.KDPSet" : "KDP: Otwieranie prawych drzwi", + "Entities.gmod_subway_em508t.Buttons.Main.KRZDSet" : "KU10: Awaryjne zamykanie drzwi", + "Entities.gmod_subway_em508t.Buttons.AVMain.AV8BToggle" : "ÐV-8B: Wyłącznik automatyczny WN", + "Entities.gmod_subway_em508t.Buttons.VU.VUToggle" : "VU: Wyłącznik sterowania", + "Entities.gmod_subway_em508t.Buttons.VU.!Voltage" : "NapiÄ™cie obwodów sterowania", + "Entities.gmod_subway_em508t.Buttons.HelperPanel.VUD2Toggle" : "VUD2: Włącznik sterowania drzwiami", + "Entities.gmod_subway_em508t.Buttons.HelperPanel.VDLSet" : "VDL: Otwieranie lewych drzwi", + "Entities.gmod_subway_em508t.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle" : "Zawór dwudrożny przewodu głównego", + "Entities.gmod_subway_em508t.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle" : "Zawór dwudrożny przewodu zasilajÄ…cego", + "Entities.gmod_subway_em508t.Buttons.AirDistributor.AirDistributorDisconnectToggle" : "Blokada dystrybutora powietrza" +} +]] diff --git a/lua/metrostroi_data/languages_/_unfinished/pl_spawner.lua b/lua/metrostroi_data/languages_/_unfinished/pl_spawner.lua new file mode 100644 index 0000000..f39eda3 --- /dev/null +++ b/lua/metrostroi_data/languages_/_unfinished/pl_spawner.lua @@ -0,0 +1,117 @@ +return [[ +{ + "Lang": "pl", + "Name": "polski", + + "Spawner.Title": "Spawner ", + "Spawner.Trains1": "SkÅ‚adów", + "Spawner.Trains2": "Maks.", + "Spawner.WagNum": "Wagonów", + "Spawner.AutoCouple": "Połącz wagony", + + "Entities.gmod_subway_81-717_mvm.Spawner.Texture.Name": "Skin", + "Entities.gmod_subway_81-717_mvm.Spawner.PassTexture.Name": "WyglÄ…d klasy", + "Entities.gmod_subway_81-717_mvm.Spawner.CabTexture.Name": "WyglÄ…d kabiny", + "Entities.gmod_subway_81-717_mvm.Spawner.Announcer.Name": "DźwiÄ™k zapowiedzi", + "Entities.gmod_subway_81-717_mvm.Spawner.Lighter.Name": "NiezbÄ™dnik maszynisty", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.Name": "Typ panelu ARS", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.1": "Standardowy (kwadratowe kontrolki)", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.2": "Standardowy (okrÄ…gÅ‚e kontrolki)", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.3": "Kijowski/Petersburski", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.4": "Stary panel ARS", + "Entities.gmod_subway_81-717_mvm.Spawner.Cran.Name": "Rodzaj kranu hamulca", + "Entities.gmod_subway_81-717_mvm.Spawner.Cran.1": "334", + "Entities.gmod_subway_81-717_mvm.Spawner.Cran.2": "013", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.Name": "Typ maski", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.1": "2-2", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.2": "2-2-2", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.3": "1-4-1, zderzak 1", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.4": "1-4-1, zderzak 2", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.5": "1-1", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.6": "Retro", + "Entities.gmod_subway_81-717_mvm.Spawner.LED.Name": "Reflektory ledowe", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.Name": "Typ BPSN", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.1": "Stary dźwiÄ™k, ton wysoki", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.2": "Stary dźwiÄ™k, ton niski", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.3": "Standardowy (Petersburg)", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.4": "Standardowy (TKL)", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.5": "Standardowy", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.6": "Kijów", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.7": "Stary", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.8": "Standardowy 2", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.9": "Standardowy 3", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.10": "Bez dźwiÄ™ku (BPN-115)", + "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.Name": "DźwiÄ™k nastawnika jazdy", + "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.1": "Typ 1", + "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.2": "Typ 2", + "Entities.gmod_subway_81-717_mvm.Spawner.KVSnd.3": "Typ 3", + "Entities.gmod_subway_81-717_mvm.Spawner.NewKV.Name": "Nowy model nastawnika", + "Entities.gmod_subway_81-717_mvm.Spawner.HornType.Name": "Syrena Petersburska", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.Name": "DźwiÄ™k dzwonka", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.1": "Stary", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.2": "Standardowa, ton niski", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.3": "Standardowa, ton wysoki", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.4": "Standardowy przerywany, ton niski", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.5": "Standardowy przerywany, ton wysoki", + "Entities.gmod_subway_81-717_mvm.Spawner.NM.Name": "CiÅ›nienie przewodu zasilajÄ…cego", + "Entities.gmod_subway_81-717_mvm.Spawner.Battery.Name": "WÅ‚. baterie", + "Entities.gmod_subway_81-717_mvm.Spawner.Switches.Name": "WÅ‚. wszystkie bezpieczniki", + "Entities.gmod_subway_81-717_mvm.Spawner.SwitchesR.Name": "Losowe ust. bezpieczników", + "Entities.gmod_subway_81-717_mvm.Spawner.DoorsL.Name": "Drzwi lewe otwarte", + "Entities.gmod_subway_81-717_mvm.Spawner.DoorsR.Name": "Drzwi prawe otwarte", + "Entities.gmod_subway_81-717_mvm.Spawner.GV.Name": "WÅ‚. wyłącznik główny", + "Entities.gmod_subway_81-717_mvm.Spawner.PB.Name": "Hamulec postojowy zaciÄ…gniÄ™ty", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.Name": "Typ lamp bocznych", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.1": "Poziome", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.2": "Pionowe", + "Entities.gmod_subway_81-717_mvm.Spawner.MVM.Name": "Znak MVM", + "Entities.gmod_subway_81-717_mvm.Spawner.HandRail.Name": "PorÄ™cze", + "Entities.gmod_subway_81-717_mvm.Spawner.HandRail.1": "Stare", + "Entities.gmod_subway_81-717_mvm.Spawner.HandRail.2": "Nowe", + "Entities.gmod_subway_81-717_mvm.Spawner.SeatType.Name": "Sedzenia", + "Entities.gmod_subway_81-717_mvm.Spawner.SeatType.1": "Stare", + "Entities.gmod_subway_81-717_mvm.Spawner.SeatType.2": "Nowe", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.Name": "Lampy w klasie", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.1": "Typ 1", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.2": "Typ 2", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.3": "Typ 3", + "Entities.gmod_subway_81-717_mvm.Spawner.Breakers.Name": "Bezpieczniki z prawej", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.Name": "Reklamy", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.1": "Typ 1", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.2": "Typ 2", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.3": "Typ 3", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.4": "Bez reklam", + + "Entities.gmod_subway_81-720.Spawner.Texture.Name": "Skin", + "Entities.gmod_subway_81-720.Spawner.PassTexture.Name": "WyglÄ…d klasy", + "Entities.gmod_subway_81-720.Spawner.CabTexture.Name": "WyglÄ…d kabiny", + "Entities.gmod_subway_81-720.Spawner.Announcer.Name": "DźwiÄ™k zapowiedzi", + "Entities.gmod_subway_81-720.Spawner.Scheme.Name": "Schematy nad drzwiami", + "Entities.gmod_subway_81-720.Spawner.PassSchemesInvert.Name": "Odwrócone schematy", + "Entities.gmod_subway_81-720.Spawner.NM.Name": "CiÅ›nienie przewodu zas.", + "Entities.gmod_subway_81-720.Spawner.Battery.Name": "WÅ‚. baterie", + "Entities.gmod_subway_81-720.Spawner.BRU.Name": "WÅ‚. wyłącznik główny", + "Entities.gmod_subway_81-720.Spawner.PVZR.Name": "Losowe ust. bezpieczników", + "Entities.gmod_subway_81-720.Spawner.PPZ.Name": "WÅ‚. wszystkie bezpieczniki", + "Entities.gmod_subway_81-720.Spawner.PPZDepot.Name": "WyÅ‚. wszystkie bezpieczniki", + "Entities.gmod_subway_81-720.Spawner.PPZR.Name": "Losowe ust. bezpieczników wagonu", + "Entities.gmod_subway_81-720.Spawner.DoorsL.Name": "Drzwi lewe otwarte", + "Entities.gmod_subway_81-720.Spawner.DoorsR.Name": "Drzwi prawe otwarte", + + "Entities.gmod_subway_81-722.Spawner.Texture.Name": "Skin", + "Entities.gmod_subway_81-722.Spawner.PassTexture.Name": "WyglÄ…d klasy", + "Entities.gmod_subway_81-722.Spawner.CabTexture.Name": "WyglÄ…d kabiny", + "Entities.gmod_subway_81-722.Spawner.Announcer.Name": "DźwiÄ™k zapowiedzi", + "Entities.gmod_subway_81-722.Spawner.Scheme.Name": "Schematy nad drzwiami", + "Entities.gmod_subway_81-722.Spawner.SarmatInvert.Name": "Odwrócone schematy", + "Entities.gmod_subway_81-722.Spawner.NM.Name": "CiÅ›nienie przewodu zas.", + "Entities.gmod_subway_81-722.Spawner.Battery.Name": "WÅ‚. baterie", + "Entities.gmod_subway_81-722.Spawner.Switches.Name": "WÅ‚. wszystkie bezpieczniki", + "Entities.gmod_subway_81-722.Spawner.SwitchesR.Name": "Losowe ust. bezpieczników", + "Entities.gmod_subway_81-722.Spawner.DoorsL.Name": "Drzwi lewe otwarte", + "Entities.gmod_subway_81-722.Spawner.DoorsR.Name": "Drzwi prawe otwarte", + + "Spawner.Close": "Zamknij", + "Spawner.Spawn": "Gotowe" +} +]] diff --git a/lua/metrostroi_data/languages_/en_base.lua b/lua/metrostroi_data/languages_/en_base.lua new file mode 100644 index 0000000..b83b2b6 --- /dev/null +++ b/lua/metrostroi_data/languages_/en_base.lua @@ -0,0 +1,94 @@ +return [[ +{ + "Lang": "en", + "Name": "English", + "Panel.Admin": "Admin", + "Panel.Client": "Client", + "Panel.DrawDebugInfo": "Draw debugging info", + "Panel.DisableCamAccel": "Disable cam acceleration", + "Panel.DisableHoverText": "Disable hover text", + "Panel.DrawCams": "Render cameras", + "Panel.FOV": "Field of view", + + "Train.Common.Camera0": "Driver seat", + + "Train.Buttons.Sealed": "Sealed", + + "Entities.gmod_subway_base.Name": "Subway base", + "Entities.gmod_subway_81-703.Name": "E", + "Entities.gmod_subway_81-703_2.Name": "E (intermediate)", + "Entities.gmod_subway_81-717_mvm.Name": "81-717(MVM)", + "Entities.gmod_subway_81-717_lvz.Name": "81-717(LVZ)", + "Entities.gmod_subway_81-714_mvm.Name": "81-714(MVM)", + "Entities.gmod_subway_81-714_lvz.Name": "81-714(LVZ)", + "Entities.gmod_subway_81-7036.Name": "81-7036 (doesn't work)", + "Entities.gmod_subway_81-7037.Name": "81-7037 (doesn't work)", + "Entities.gmod_subway_81-720.Name": "81-720 (head)", + "Entities.gmod_subway_81-721.Name": "81-721 (intermediate)", + "Entities.gmod_subway_81-722.Name": "81-722 (head)", + "Entities.gmod_subway_81-723.Name": "81-723 (intermediate motor)", + "Entities.gmod_subway_81-724.Name": "81-724 (intermediate trailer)", + "Entities.gmod_subway_e.Name": "E", + "Entities.gmod_subway_em.Name": "Em", + "Entities.gmod_subway_ema.Name": "Ema", + "Entities.gmod_subway_ezh.Name": "Ezh", + "Entities.gmod_subway_ezh1.Name": "Ezh1", + "Entities.gmod_subway_em508.Name": "Em-508", + "Entities.gmod_subway_em508_int.Name": "Em-508 (intermediate)", + "Entities.gmod_subway_ezh3.Name": "Ezh3", + "Entities.gmod_subway_ezh3ru1.Name": "Ezh3 RU1", + "Entities.gmod_subway_ema508t.Name": "Em-508t", + "Entities.gmod_subway_tatra_t3.Name": "Tatra T3", + "Entities.gmod_subway_ai.Name": "AI train", + + "Entities.gmod_train_bogey.Name": "Train bogey", + "Entities.gmod_train_couple.Name": "Couple", + + "Entities.gmod_track_pui.Name": "PUI clock", + "Entities.gmod_track_mus_elektronika7.Name": "Electronika clock", + "Entities.gmod_mus_clock_analog.Name": "Analog clock", + "Entities.gmod_track_clock_time.Name": "Big interval clock(time)", + "Entities.gmod_track_clock_small.Name": "Small interval clock", + "Entities.gmod_track_clock_interval.Name": "Big interval clock(interval)", + "Entities.gmod_track_switch.Name": "Track switch", + "Entities.gmod_track_powermeter.Name": "Power meter", + "Entities.gmod_track_controller.Name": "Track controller", + "Entities.gmod_track_udochka.Name": "Electric connector", + "Entities.gmod_train_spawner.Name": "Train spawner", + + "Train.703.VU": "Train-control", + "Train.703.Breakers1" : "Batteries", + "Train.703.Breakers2" : "Circuit breakers", + "Train.703.RCARS" : "RC-ARS", + "Train.703.Left" : "Helper panel", + "Train.703.Parking" : "UAVA and parking brake", + "Train.703.ASNP" : "ASNP", + "Train.703.IGLA" : "IGLA", + "Train.717.Breakers1": "Middle side circuit breakers", + "Train.717.VB1": "Panel with RC", + "Train.717.Breakers2": "Right side circuit breakers", + "Train.717.VB2": "Bottom panel with RC", + "Train.717.UAVA": "UAVA", + "Train.717.Pneumo": "Pneumatic valves", + "Train.717.Helpers": "Helper panel", + "Train.717.Block4": "4th block", + "Train.717.IGLA": "IGLA", + "Train.717.ASNP" : "ASNP", + "Train.720.CameraCond": "Conditioners panel", + "Train.720.CameraPPZ": "Train protection panel", + "Train.720.CameraPV": "Auxiliary buttons panel", + "Train.720.CameraASNP": "ASNP", + "Train.720.CameraVityaz": "SAU Vityaz", + "Train.720.CameraKRMH": "KRMSH valve", + "Train.720.CameraPVZ": "Wagon protection panel", + "Train.722.Breakers": "Train protection circuit breakers", + "Train.722.PU2_1": "Buttons panel", + "Train.722.PU2_2": "Disablers panel", + "Train.722.Vityaz": "SAU Vityaz-SP screen", + "Train.722.SARMAT": "BM CIK SARMAT screen", + "Train.722.CabLights": "Cabin ligting panel", + "Train.722.Route": "Setting route number", + "Train.722.Disconnects": "Isolation valves", + "Train.722.KRMH": "KRMSH & RVTB disabler" +} +]] diff --git a/lua/metrostroi_data/languages_/en_buttons_703.lua b/lua/metrostroi_data/languages_/en_buttons_703.lua new file mode 100644 index 0000000..dcd84c9 --- /dev/null +++ b/lua/metrostroi_data/languages_/en_buttons_703.lua @@ -0,0 +1,142 @@ +return [[ +{ + "Lang": "en", + "Name": "English", + + + "Entities.gmod_subway_81-703.Buttons.HelperPanel.R_Program1Set": "Program 1", + "Entities.gmod_subway_81-703.Buttons.HelperPanel.R_Program2Set": "Program 2", + "Entities.gmod_subway_81-703.Buttons.HelperPanel.VDLSet": "VDL: Open left doors", + "Entities.gmod_subway_81-703.Buttons.HelperPanel.VUD2Toggle": "VUD2: Door control toggle (close doors)", + "Entities.gmod_subway_81-703.Buttons.Meters.!TotalVoltmeter": "HV voltmeter (kV)", + "Entities.gmod_subway_81-703.Buttons.Meters.!TotalAmpermeter": "Total ampermeter (A)", + "Entities.gmod_subway_81-703.Buttons.AV2.RSTToggle": "RST: Radiostation", + "Entities.gmod_subway_81-703.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_81-703.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_81-703.Buttons.Back2.!HVFuses": "HV fuses block", + "Entities.gmod_subway_81-703.Buttons.Back2.!DVR": "The box with the door pressure diffuser", + "Entities.gmod_subway_81-703.Buttons.Main.RK": "Lamp: Rheostat controller is spinning", + "Entities.gmod_subway_81-703.Buttons.Main.GreenRP": "Lamp: Green overload relay light (overload relay open on current train)", + "Entities.gmod_subway_81-703.Buttons.Main.RedRP": "Lamp: Red overload relay light (power circuits failed to assemble)", + "Entities.gmod_subway_81-703.Buttons.Main.Blue": "Lamp: Door state light (doors are closed)", + "Entities.gmod_subway_81-703.Buttons.Main.DIPonSet": "Swithcer: Turn interior lights on", + "Entities.gmod_subway_81-703.Buttons.Main.DIPoffSet": "Swithcer: Turn interior lights off (ring)", + "Entities.gmod_subway_81-703.Buttons.Main.VozvratRPSet": "KU: Reset overload relay", + "Entities.gmod_subway_81-703.Buttons.Main.KSNSet": "KSN: Forced activation of the RP on the faulty wagon (Malfunction signaling)", + "Entities.gmod_subway_81-703.Buttons.Main.KRZDSet": "KRZD: Emergency door closing", + "Entities.gmod_subway_81-703.Buttons.Main.KSDSet": "KSD: Door state control(Door check)", + "Entities.gmod_subway_81-703.Buttons.Main.KDPSet": "KDP: Open right doors", + "Entities.gmod_subway_81-703.Buttons.Main.KDLSet": "KDL: Open left doors", + "Entities.gmod_subway_81-703.Buttons.Main.KU1Toggle": "MK: Turn motor-compressor on", + "Entities.gmod_subway_81-703.Buttons.Main.VUD1Toggle": "VUD: Door control toggle (close doors)", + "Entities.gmod_subway_81-703.Buttons.Main.KRPSet": "KRP: Emergency start", + "Entities.gmod_subway_81-703.Buttons.AV1.VU3Toggle": "VU3: Cabin lighting", + "Entities.gmod_subway_81-703.Buttons.AV1.VU2Toggle": "VU2: Emergency lighting (45V)", + "Entities.gmod_subway_81-703.Buttons.AV1.VU1Toggle": "VU1: Cabin heater (3kWt)", + "Entities.gmod_subway_81-703.Buttons.AVMain.AV8BToggle": "Circuit braker (High voltage auxiliary circuits)", + "Entities.gmod_subway_81-703.Buttons.Lamp.L_3Toggle": "Lamp: Gauges lighting", + "Entities.gmod_subway_81-703.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle": "Train line disconnect valve", + "Entities.gmod_subway_81-703.Buttons.VU.VUToggle": "VU: Enable train-control", + "Entities.gmod_subway_81-703.Buttons.FrontDoor.FrontDoor": "Front door", + "Entities.gmod_subway_81-703.Buttons.PneumaticManometer.!LinesPressure": "Pressure in pneumatic lines (red: brake line, black: train line)", + "Entities.gmod_subway_81-703.Buttons.Stopkran.EmergencyBrakeValveToggle": "Emergency brake", + "Entities.gmod_subway_81-703.Buttons.UAVAPanel.UAVAToggle": "UAVA: Universal Automatic Autostop Disabler (disable autostop)", + "Entities.gmod_subway_81-703.Buttons.UAVAPanel.UAVACToggle ": "UAVA: Universal Automatic Autostop Disabler(reset contacts)", + "Entities.gmod_subway_81-703.Buttons.PneumaticPanels.!CylinderPressure": "Brake manometer: Brake cylinder pressure", + "Entities.gmod_subway_81-703.Buttons.Battery.VBToggle": "VB: Battery on/off (Low voltage circuits)", + "Entities.gmod_subway_81-703.Buttons.Battery.R_RadioToggle": "Announcer (+50V)", + "Entities.gmod_subway_81-703.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_81-703.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_81-703.Buttons.ASNP.R_ASNPMenuSet": "Announcer: Menu", + "Entities.gmod_subway_81-703.Buttons.ASNP.R_ASNPUpSet": "Announcer: Up", + "Entities.gmod_subway_81-703.Buttons.ASNP.R_ASNPDownSet": "Announcer: Down", + "Entities.gmod_subway_81-703.Buttons.ASNP.R_ASNPOnToggle": "Announcer: Turn on", + "Entities.gmod_subway_81-703.Buttons.GV.GVToggle": "GV: HV switch", + "Entities.gmod_subway_81-703.Buttons.PassengerDoor.PassengerDoor": "Passenger door", + "Entities.gmod_subway_81-703.Buttons.KRR.KRRToggle": "KRR: Button of enabling reversers", + "Entities.gmod_subway_81-703.Buttons.VU4.VUSToggle": "Switcher: Near Headlights/Far Headlights", + "Entities.gmod_subway_81-703.Buttons.CabinDoor.CabinDoor1": "Cabin door", + "Entities.gmod_subway_81-703.Buttons.Tsepi.!BatteryVoltage": "Control circuits voltage", + "Entities.gmod_subway_81-703.Buttons.IGLAButtons.IGLA1USet": "IGLA: First button up", + "Entities.gmod_subway_81-703.Buttons.IGLAButtons.IGLA1Set": "IGLA: First button", + "Entities.gmod_subway_81-703.Buttons.IGLAButtons.IGLA1DSet": "IGLA: First button down", + "Entities.gmod_subway_81-703.Buttons.IGLAButtons.IGLA2USet": "IGLA: Second button up", + "Entities.gmod_subway_81-703.Buttons.IGLAButtons.IGLA2Set": "IGLA: Second button", + "Entities.gmod_subway_81-703.Buttons.IGLAButtons.IGLA2DSet": "IGLA: Second button down", + "Entities.gmod_subway_81-703.Buttons.IGLAButtons.!IGLASR": "IGLA: SR", + "Entities.gmod_subway_81-703.Buttons.IGLAButtons.!IGLARX": "IGLA: RX", + "Entities.gmod_subway_81-703.Buttons.IGLAButtons.!IGLAErr": "IGLA: Malfunction", + "Entities.gmod_subway_81-703.Buttons.IGLAButtons.!IGLAOSP": "IGLA: OSP(Fire extinguisher)", + "Entities.gmod_subway_81-703.Buttons.IGLAButtons.!IGLAPI": "IGLA: PI(Fire indication)", + "Entities.gmod_subway_81-703.Buttons.IGLAButtons.!IGLAOff": "IGLA: Off", + "Entities.gmod_subway_81-703.Buttons.Back1.R_UNchToggle": "UNCh: Low frequency amplifier (passenger announcer sound)", + "Entities.gmod_subway_81-703.Buttons.Back1.IGLAToggle": "ASOTP: IGLA", + "Entities.gmod_subway_81-703.Buttons.Back1.RezMKSet": "Emergency motor-compressor startup", + "Entities.gmod_subway_81-703.Buttons.ParkingBrake.ParkingBrakeLeft": "Parking brake wheel", + "Entities.gmod_subway_81-703.Buttons.ParkingBrake.ParkingBrakeRight": "Parking brake wheel", + "Entities.gmod_subway_81-703.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle": "Brake line disconnect valve", + "Entities.gmod_subway_81-703.Buttons.Speedometer.!Speedometer": "Speedometer", + "Entities.gmod_subway_81-703.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Disable air distributor", + + + + "Entities.gmod_subway_81-703_2.Buttons.Stopkran.EmergencyBrakeValveToggle": "Emergency brake", + "Entities.gmod_subway_81-703_2.Buttons.HelperPanel.R_Program1Set": "Program 1", + "Entities.gmod_subway_81-703_2.Buttons.HelperPanel.R_Program2Set": "Program 2", + "Entities.gmod_subway_81-703_2.Buttons.HelperPanel.VDLSet": "VDL: Open left doors", + "Entities.gmod_subway_81-703_2.Buttons.HelperPanel.VUD2LToggle": "VUD2 lock", + "Entities.gmod_subway_81-703_2.Buttons.HelperPanel.VUD2Toggle": "VUD2: Door control toggle (close doors)", + "Entities.gmod_subway_81-703_2.Buttons.PneumaticPanels.!CylinderPressure": "Brake manometer: Brake cylinder pressure", + "Entities.gmod_subway_81-703_2.Buttons.Battery.VBToggle": "VB: Battery on/off (Low voltage circuits)", + "Entities.gmod_subway_81-703_2.Buttons.Battery.R_RadioToggle": "Announcer (+50V)", + "Entities.gmod_subway_81-703_2.Buttons.Meters.!TotalVoltmeter": "HV voltmeter (kV)", + "Entities.gmod_subway_81-703_2.Buttons.Meters.!TotalAmpermeter": "Total ampermeter (A)", + "Entities.gmod_subway_81-703_2.Buttons.AV2.RSTToggle": "RST: Radiostation", + "Entities.gmod_subway_81-703_2.Buttons.PassengerDoor.PassengerDoor": "Passenger door", + "Entities.gmod_subway_81-703_2.Buttons.VU4.VUSToggle": "Switcher: Near Headlights/Far Headlights", + "Entities.gmod_subway_81-703_2.Buttons.AV1.VU3Toggle": "VU3: Cabin lighting", + "Entities.gmod_subway_81-703_2.Buttons.AV1.VU2Toggle": "VU2: Emergency lighting (45V)", + "Entities.gmod_subway_81-703_2.Buttons.AV1.VU1Toggle": "VU1: Cabin heater (3kWt)", + "Entities.gmod_subway_81-703_2.Buttons.UAVAPanel.UAVAToggle": "UAVA: Universal Automatic Autostop Disabler (disable autostop)", + "Entities.gmod_subway_81-703_2.Buttons.UAVAPanel.UAVACToggle ": "UAVA: Universal Automatic Autostop Disabler(reset contacts)", + "Entities.gmod_subway_81-703_2.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Disable air distributor", + "Entities.gmod_subway_81-703_2.Buttons.GV.GVToggle": "GV: HV switch", + "Entities.gmod_subway_81-703_2.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_81-703_2.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_81-703_2.Buttons.Tsepi.!BatteryVoltage": "Battery voltage", + "Entities.gmod_subway_81-703_2.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_81-703_2.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_81-703_2.Buttons.ParkingBrake.ParkingBrakeLeft": "Parking brake wheel", + "Entities.gmod_subway_81-703_2.Buttons.ParkingBrake.ParkingBrakeRight": "Parking brake wheel", + "Entities.gmod_subway_81-703_2.Buttons.Back2.!HVFuses": "HV fuses block", + "Entities.gmod_subway_81-703_2.Buttons.Back2.!DVR": "The box with the door pressure diffuser", + "Entities.gmod_subway_81-703_2.Buttons.Main.RK": "Lamp: Rheostat controller is spinning", + "Entities.gmod_subway_81-703_2.Buttons.Main.GreenRP": "Lamp: Green overload relay light (overload relay open on current train)", + "Entities.gmod_subway_81-703_2.Buttons.Main.RedRP": "Lamp: Red overload relay light (power circuits failed to assemble)", + "Entities.gmod_subway_81-703_2.Buttons.Main.Blue": "Lamp: Door state light (doors are closed)", + "Entities.gmod_subway_81-703_2.Buttons.Main.DIPonSet": "Swithcer: Turn interior lights on", + "Entities.gmod_subway_81-703_2.Buttons.Main.DIPoffSet": "Swithcer: Turn interior lights off", + "Entities.gmod_subway_81-703_2.Buttons.Main.VozvratRPSet": "VRP: Reset overload relay", + "Entities.gmod_subway_81-703_2.Buttons.Main.KSNSet": "KSN: Forced activation of the RP on the faulty wagon (Malfunction signaling)", + "Entities.gmod_subway_81-703_2.Buttons.Main.KRZDSet": "KRZD: Emergency door closing", + "Entities.gmod_subway_81-703_2.Buttons.Main.KSDSet": "KSD: Door state control(Door check)", + "Entities.gmod_subway_81-703_2.Buttons.Main.KDPSet": "KDP: Open right doors", + "Entities.gmod_subway_81-703_2.Buttons.Main.KDLSet": "KDL: Open left", + "Entities.gmod_subway_81-703_2.Buttons.Main.KU1Toggle": "MK: Turn motor-compressor on", + "Entities.gmod_subway_81-703_2.Buttons.Main.VUD1Toggle": "VUD: Door control toggle (close doors)", + "Entities.gmod_subway_81-703_2.Buttons.Main.KRPSet": "KRP: Emergency start", + "Entities.gmod_subway_81-703_2.Buttons.KRR.KRRToggle": "KRR: Button of enabling reversers", + "Entities.gmod_subway_81-703_2.Buttons.Back1.R_ZSToggle": "ZS: Switch loudspeaker amplification, the sound in the train", + "Entities.gmod_subway_81-703_2.Buttons.Back1.IGLAToggle": "ASOTP: IGLA", + "Entities.gmod_subway_81-703_2.Buttons.Back1.RezMKSet": "Emergency motor-compressor startup", + "Entities.gmod_subway_81-703_2.Buttons.CabinDoor.CabinDoor1": "Cabin door", + "Entities.gmod_subway_81-703_2.Buttons.Lamp.L_3Toggle": "Lamp: Gauges lighting", + "Entities.gmod_subway_81-703_2.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle": "Brake line disconnect valve", + "Entities.gmod_subway_81-703_2.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle": "Train line disconnect valve", + "Entities.gmod_subway_81-703_2.Buttons.AVMain.AV8BToggle": "AV-8B: Circuit breaker (High voltage auxiliary circuits)", + "Entities.gmod_subway_81-703_2.Buttons.VU.VUToggle": "VU: Enable train-control", + "Entities.gmod_subway_81-703_2.Buttons.FrontDoor.FrontDoor": "Front door", + "Entities.gmod_subway_81-703_2.Buttons.Speedometer.!Speedometer": "Speedometer", +"Entities.gmod_subway_81-703_2.Buttons.PneumaticManometer.!LinesPressure": "Pressure in pneumatic lines (red: brake line, black: train line)" +} +]] diff --git a/lua/metrostroi_data/languages_/en_buttons_717.lua b/lua/metrostroi_data/languages_/en_buttons_717.lua new file mode 100644 index 0000000..e76c115 --- /dev/null +++ b/lua/metrostroi_data/languages_/en_buttons_717.lua @@ -0,0 +1,318 @@ +return [[ +{ + "Lang": "en", + "Name": "English", + + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.VUD2Toggle": "VUD2: Door control toggle (close doors)", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.VDLSet": "VDL: Open left doors", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.R_Program2Helper": "Program 2", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.R_Program1Helper": "Program 1", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:RC1Toggle": "RC-1: ARS circuits disconnect", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:VBToggle": "VB: Battery on/off", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:UOSToggle": "RC-UOS: Speed Limitation Device", + "Entities.gmod_subway_81-717_mvm.Buttons.Wiper.WiperToggle": "Wiper", + "Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle": "Brake lever disconnect valve", + "Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveBLDisconnectToggle": "Brake line disconnect valve", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_UNchToggle": "UNCh: Low frequency amplifier", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_ZSToggle": "ES: Emergency communication control", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_GToggle": "Loudspeaker: Sound in cabin enable", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_RadioToggle": "Radioinformator: Announcer (built-in)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_Program1Set": "Program 1", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_Program2Set": "Program 2", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.2:KVTSet": "KB: Attention button", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VZ1Set": "VZ1: Pneumatic valve #1", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VUD1Toggle": "VUD: Door control toggle (close doors)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLSet": "KDL: Open left doors", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLKToggle": "KDL button cover", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLRSet": "KDL: Open left doors", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLRKToggle": "KDL button cover", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.DoorSelectToggle": "Select doors side", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KRZDSet": "KRZD: Emergency door closing", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_VPRToggle": "VPR: Radiostation enable", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VozvratRPSet": "Reset overload relay", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.GreenRPLight": "RP: Green overload relay light (prevents overcurrent of engines)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.AVULight": "AVU: Automatic control disabler active", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.LKVPLight": "LKVP: High-voltage converter control", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.SPLight": "LSP: Fire emergency (rheostat overheat)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ConverterProtectionSet": "Converter protection", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KSNSet": "KSN: Forced activation of the RP on the faulty wagon (Malfunction signaling)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.DIPoffSet": "Ring", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ARSToggle": "ARS: Automatic speed regulation", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ALSToggle": "ALS: Automatic locomotive signalling", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.OtklAVUToggle": "Turn off automatic control disable relay (failure of AVU)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.TormATToggle": "(placeholder) Emergency brake toggle", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_1Toggle": "Interior lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_2Toggle": "Cabin lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_3Toggle": "Gauges lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ALSFreqToggle": "Decoder: ALS frequency switcher (down - 1/5, up - 2/6)", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.ParkingBrakeToggle": "Parking brake", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.DriverValveTLDisconnectToggle": "Train line disconnect valve", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA1Set": "IGLA: First button", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA2Set": "IGLA: Second button", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA3Set": "IGLA: Third button", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA4Set": "IGLA: Fourth button", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.!Voltage": "Battery voltage", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.VMKToggle": "Turn motor-compressor on", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.BPSNonToggle": "BPSN: Train power supply", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.RezMKSet": "Emergency motor-compressor startup", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.ARS13Set": "ARS 13V: ARS stabilized voltage check", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!RouteNum": "М â„–\nRoute number", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!PathNum": "П â„–\nPath number", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchTime": "ВРЕМЯ ХОДÐ\nTotal schedule time", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchInterval": "ИÐТ\nTrain interval", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchHour": "ЧÐС\nHour", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchMin": "МИÐ\nMinute", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchSec": "СЕК\nSecond", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchArrival": "Arrival times", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchStations": "Station name", + "Entities.gmod_subway_81-717_mvm.Buttons.PneumaticPanels.!CylinderPressure": "Brake cylinder pressure", + "Entities.gmod_subway_81-717_mvm.Buttons.PneumaticPanels.!LinePressure": "Pressure in pneumatic lines (red: brake line, black: train line)", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.RC1Toggle": "RC-1: ARS circuits disconnect", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.UOSToggle": "RC-UOS: Speed Limitation Device", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.VBToggle": "VB: Battery on/off", + "Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPMenuSet": "ASNP: Menu", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPUpSet": "ASNP: Up", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPDownSet": "ASNP: Down", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPOnToggle": "ASNP: Turn on", + "Entities.gmod_subway_81-717_mvm.Buttons.RearDoor.RearDoor": "Rear door", + "Entities.gmod_subway_81-717_mvm.Buttons.Meters.!TotalVoltmeter": "HV voltmeter (kV)", + "Entities.gmod_subway_81-717_mvm.Buttons.Meters.!TotalAmpermeter": "Total ampermeter (A)", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A61Toggle": "A61 Train wire 6 control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A55Toggle": "A55 Train wire 10AS control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A54Toggle": "A54 Train wire 10AK control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A56Toggle": "A56 Turn on battery power to control circuits", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A27Toggle": "A27 Turn on DIP and lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A21Toggle": "A21 Door control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A10Toggle": "A10 Motor-compressor control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A53Toggle": "A53 KVC power supply", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A43Toggle": "A43 ARS 12V power supply", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A45Toggle": "A45 ARS train wire 10AU", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A42Toggle": "A42 ARS 75V power supply", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A41Toggle": "A41 ARS braking", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.VUToggle": "VU Train control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A64Toggle": "A64 Cabin lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A63Toggle": "A63 IGLA/BIS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A50Toggle": "A50 Turn on DIP and lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A51Toggle": "A51 Turn off DIP and lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A23Toggle": "A23 Emergency motor-compressor turn on", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A14Toggle": "A14 Train wire 18", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A75Toggle": "A75 Cabin heating", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A1Toggle": "A1 X-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A2Toggle": "A2 X-2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A3Toggle": "A3 X-3", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A17Toggle": "A17 Reset overload relay", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A62Toggle": "A62 Radio communications", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A29Toggle": "A29 Radio broadcasting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A5Toggle": "A5 ", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A6Toggle": "A6 T-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A8Toggle": "A8 Pneumatic valves #1, #2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A20Toggle": "A20 Drive/brake circuit control, train wire 20", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A25Toggle": "A25 Manual electric braking", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A22Toggle": "A22 Turn on KK", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A30Toggle": "A30 Rheostat controller motor power", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A39Toggle": "A39 Emergency control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A44Toggle": "A44 Emergency train control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A80Toggle": "A80 Power circuit mode switch motor power", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A65Toggle": "A65 Interior lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.L_5Toggle": "Ð49 Emergency lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A24Toggle": "A24 Battery charging", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A32Toggle": "A32 Open right doors", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A31Toggle": "A31 Open left doors", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A16Toggle": "A16 Close doors", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A13Toggle": "A13 Door alarm", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A12Toggle": "A12 Emergency door close", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A7Toggle": "A7 Red lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A9Toggle": "A9 Red lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A46Toggle": "A46 White lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A47Toggle": "A47 White lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor.PassengerDoor": "Passenger door", + "Entities.gmod_subway_81-717_mvm.Buttons.GV.GVToggle": "HV switch", + "Entities.gmod_subway_81-717_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle": "Emergency brake", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.L_4Toggle": "Headlights toggle", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VUSToggle": "VUS: Head lights bright/dim", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VAHToggle": "VAH: Emergency driving mode (failure of RPB relay)", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VADToggle": "VAD: Emergency door close override (failure of KD relay)", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KRPSet": "KRP: Emergency start button", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KAHSet": "KAH: Emergency drive button", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KAHKToggle": "KAH button cover", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KUP": "Heater control", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KDPSet": "KDP: Open right doors", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KDPKToggle": "KDP button cover", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.PN": "Pneumatic brake control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A61Toggle": "A61 Train wire 6 control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A55Toggle": "A55 Train wire 10AS control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A54Toggle": "A54 Train wire 10AK control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A56Toggle": "A56 Turn on battery power to control circuits", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A27Toggle": "A27 Turn on DIP and lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A21Toggle": "A21 Door control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A10Toggle": "A10 Motor-compressor control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A53Toggle": "A53 KVC power supply", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A43Toggle": "A43 ARS 12V power supply", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A45Toggle": "A45 ARS train wire 10AU", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A42Toggle": "A42 ARS 75V power supply", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A41Toggle": "A41 ARS braking", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:VUToggle": "VU Train control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A64Toggle": "A64 Cabin lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A63Toggle": "A63 IGLA/BIS", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A50Toggle": "A50 Turn on DIP and lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A51Toggle": "A51 Turn off DIP and lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A23Toggle": "A23 Emergency motor-compressor turn on", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A14Toggle": "A14 Train wire 18", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A75Toggle": "A75 Cabin heating", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A1Toggle": "A1 X-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A2Toggle": "A2 X-2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A3Toggle": "A3 X-3", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A17Toggle": "A17 Reset overload relay", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A62Toggle": "A62 Radio communications", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A29Toggle": "A29 Radio broadcasting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A5Toggle": "A5 ", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A6Toggle": "A6 T-1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A8Toggle": "A8 Pneumatic valves #1, #2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A20Toggle": "A20 Drive/brake circuit control, train wire 20", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A25Toggle": "A25 Manual electric braking", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A22Toggle": "A22 Turn on KK", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A30Toggle": "A30 Rheostat controller motor power", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A39Toggle": "A39 Emergency control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A44Toggle": "A44 Emergency train control", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A80Toggle": "A80 Power circuit mode switch motor power", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A65Toggle": "A65 Interior lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:L_5Toggle": "Ð49 Emergency lighting", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A24Toggle": "A24 Battery charging", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A32Toggle": "A32 Open right doors", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A31Toggle": "A31 Open left doors", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A16Toggle": "A16 Close doors", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A13Toggle": "A13 Door alarm", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A12Toggle": "A12 Emergency door close", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A7Toggle": "A7 Red lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A9Toggle": "A9 Red lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A46Toggle": "A46 White lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A47Toggle": "A47 White lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.CabinDoor.CabinDoor": "Cabin door", + "Entities.gmod_subway_81-717_mvm.Buttons.Reverser.KVReverserDown": "Reverser back", + "Entities.gmod_subway_81-717_mvm.Buttons.Reverser.KVReverserUp": "Reverser forward", + "Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor1.PassengerDoor": "Passenger door", + "Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAToggle": "UAVA: Universal Automatic Autostop Disabler (disable autostop)", + "Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVACToggle ": "UAVA: Universal Automatic Autostop Disabler (reset contacts)", + "Entities.gmod_subway_81-717_mvm.Buttons.EPKDisconnect.EPKToggle": "EPV disconnect valve", + "Entities.gmod_subway_81-717_mvm.Buttons.Help.ShowHelp": "Show help on driving the train", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake2.1:ParkingBrakeToggle": "Parking brake", + "Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_81-717_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Disable air distributor", + + "Entities.gmod_subway_81-714_mvm.Buttons.GV.GVToggle": "HV switch", + "Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_81-714_mvm.Buttons.RearDoor.RearDoor": "Rear door", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.DriverValveBLDisconnectToggle": "Brake line disconnect valve", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.DriverValveTLDisconnectToggle": "Train line disconnect valve", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A65Toggle": "A65 Interior lighting", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A56Toggle": "A56 Turn on battery power to control circuits", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A63Toggle": "A63 IGLA/BIS", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A10Toggle": "A10 Motor-compressor control", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A30Toggle": "A30 Rheostat controller motor power", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A80Toggle": "A80 Power circuit mode switch motor power", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.ParkingBrakeToggle": "Parking brake", + "Entities.gmod_subway_81-714_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Disable air distributor", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontDoor.FrontDoor": "Front door", + "Entities.gmod_subway_81-714_mvm.Buttons.Battery.VBToggle": "VB: Battery on/off", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A54Toggle": "A54 Train wire 10AK control", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A27Toggle": "A27 Turn on DIP and lighting", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A24Toggle": "A24 Battery charging", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A53Toggle": "A53 KVC power supply", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A13Toggle": "A13 Door alarm", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A32Toggle": "A32 Open right doors", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A31Toggle": "A31 Open left doors", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A16Toggle": "A16 Close doors", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A12Toggle": "A12 Emergency door close", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A50Toggle": "A50 Turn on DIP and lighting", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A51Toggle": "A51 Turn off DIP and lighting", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A1Toggle": "A1 X-1", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.KRPSet": "START: Emergency start button", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.VozvratRPSet": "Reset overload relay", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.RezMKSet": "Emergency motor-compressor startup", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.VMKToggle": "Turn motor-compressor on", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.BPSNonToggle": "BPSN: Train power supply", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A2Toggle": "A2 X-2", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A3Toggle": "A3 X-3", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A17Toggle": "A17 Reset overload relay", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A5Toggle": "A5 ", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A6Toggle": "A6 T-1", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A8Toggle": "A8 Pneumatic valves #1, #2", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A20Toggle": "A20 Drive/brake circuit control, train wire 20", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A25Toggle": "A25 Manual electric braking", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A22Toggle": "A22 Turn on KK", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A23Toggle": "A23 Emergency motor-compressor turn on", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A39Toggle": "A39 Emergency control", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A14Toggle": "A14 Train wire 18", + + + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!Speedometer1": "Speed indicator", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!Speedometer2": "Speed indicator", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!ARSOch": "OCh: No ARS frequency", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!ARS0": "0: ARS stop signal", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!ARS40": "Speed limit 40 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!ARS60": "Speed limit 60 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!ARS70": "Speed limit 70 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!ARS80": "Speed limit 80 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLSD1": "LSD: Door state light (doors are closed)", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLSD2": "LSD: Door state light (doors are closed)", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLVD": "1: Engines engaged", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLHRK": "2: Rheostat controller motion lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLST": "6: Brakes engaged", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLRD": "DV", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampRP": "RP: Red overload relay light (power circuits failed to assemble)", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLSN": "LSN: Failure indicator light (power circuits failed to assemble)", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLKVD": "LKVD: ARS engine shutdown indicator", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLKT": "LKT: ARS braking indicator", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampDV": "DV", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA23": "IGLA: Second and third buttons", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.!IGLAFire": "IGLA: Fire", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.!IGLAErr": "IGLA: Malfunction", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!Speedometer1": "Speed indicator", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!Speedometer2": "Speed indicator", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!ARSOch": "OCh: No ARS frequency", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!ARS0": "0: ARS stop signal", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!ARS40": "Speed limit 40 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!ARS60": "Speed limit 60 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!ARS70": "Speed limit 70 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!ARS80": "Speed limit 80 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLSD1": "LSD: Door state light (doors are closed)", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLSD2": "LSD: Door state light (doors are closed)", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLHRK": "LhRK: Rheostat controller motion light", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampRP": "RP: Red overload relay light (power circuits failed to assemble)", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLSN": "LSN: Failure indicator light (power circuits failed to assemble)", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLN": "LN: Direction signal", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLKVD": "LKVD: ARS engine shutdown indicator", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLKT": "LKT: ARS braking indicator", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLKVC": "LKVC: High voltage not available", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLRS": "LRS: Speed equality light (next segment speed limit equal or greater to current)", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLVD": "LVD: Engines engaged", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLST": "LST: Brakes engaged", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!Speedometer1": "Speed indicator", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!Speedometer2": "Speed indicator", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!ARSOch": "OCh: No ARS frequency", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!ARS0": "0: ARS stop signal", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!ARS40": "Speed limit 40 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!ARS60": "Speed limit 60 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!ARS70": "Speed limit 70 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!ARS80": "Speed limit 80 kph", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLSD1": "LSD: Door state light (doors are closed)", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLSD2": "LSD: Door state light (doors are closed)", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLVD": "LVD: Engines engaged", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLHRK": "LhRK: Rheostat controller motion light", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLST": "LST: Brakes engaged", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampRP": "RP: Red overload relay light (power circuits failed to assemble)", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLSN": "LSN: Failure indicator light (power circuits failed to assemble)", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLKVD": "LKVD: ARS engine shutdown indicator", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLKVC": "LKVC: High voltage not available", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLKT": "LKT: ARS braking indicator", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLEKK": "GLEB: Gleb working lamp", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLN": "LN: Direction signal", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLRS": "LRS: Speed equality light (next segment speed limit equal or greater to current)" +} +]] diff --git a/lua/metrostroi_data/languages_/en_buttons_717_lvz.lua b/lua/metrostroi_data/languages_/en_buttons_717_lvz.lua new file mode 100644 index 0000000..63e078a --- /dev/null +++ b/lua/metrostroi_data/languages_/en_buttons_717_lvz.lua @@ -0,0 +1,293 @@ +return [[ +{ + "Lang": "en", + "Name": "English", + + + "Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel.VUD2Toggle": "VUD2: Door control toggle (close doors)", + "Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel.VDLSet": "VDL: Left doors open", + "Entities.gmod_subway_81-717_lvz.Buttons.Battery_2.1:RC1Toggle": "RC-1: ARS circuits disconnect", + "Entities.gmod_subway_81-717_lvz.Buttons.Battery_2.1:VBToggle": "VB: Battery on/off", + "Entities.gmod_subway_81-717_lvz.Buttons.Battery_2.1:BPSToggle": "RC-BPS: Anti-rolling", + "Entities.gmod_subway_81-717_lvz.Buttons.Battery_2.1:BUDToggle": "BUD: Doors control unit", + "Entities.gmod_subway_81-717_lvz.Buttons.Battery_2.1:VRDToggle": "VRD: Allow movement(when 0 on ALS)", + "Entities.gmod_subway_81-717_lvz.Buttons.VRD1.VRDToggle": "VRD: Allow movement(when 0 on ALS)", + "Entities.gmod_subway_81-717_lvz.Buttons.Wiper.WiperToggle": "Wiper", + "Entities.gmod_subway_81-717_lvz.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_81-717_lvz.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.R_UNchToggle": "UNCh: Low frequency amplifier", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.R_ZSToggle": "ES: Emergency communication control", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.R_GToggle": "Loudspeaker: Sound in cabin enable", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.R_UPOToggle": "UPO: Announcer", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.2:KVTSet": "KB: Attention button", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.VZ1Set": "VZ1: Pneumatic valve #1", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.VUD1Toggle": "VUD: Door control toggle (close doors)", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.KDLSet": "KDL: Open left doors", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.KDLKToggle": "KDL button cover", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.KDLRSet": "KDL: Open left doors", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.KDLRKToggle": "KDL button cover", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.DoorSelectToggle": "Select doors side", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.KRZDSet": "KRZD: Emergency door closing", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.VozvratRPSet": "Reset overload relay", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.GreenRPLight": "RP: Green overload relay light (overload relay open on current train)", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.AVULight": "AVU: Automatic control disabler active", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.LKVPLight": "LKVP: High-voltage converter control", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.SPLight": "LSP: Fire emergency (rheostat overheat)", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.ConverterProtectionSet": "Converter protection", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.KSNSet": "KSN: Forced activation of the RP on the faulty wagon (Malfunction signaling)", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.DIPoffSet": "Ring", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.ARSToggle": "ARS: Automatic speed regulation", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.ALSToggle": "ALS: Automatic locomotive signalling", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.TormATToggle": "(placeholder) Emergency brake toggle", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.OtklAVUToggle": "OtklAVU: Turn off automatic control disable relay (failure of AVU)", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.L_1Toggle": "Interior lighting", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.L_2Toggle": "Cabin lighting", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.L_3Toggle": "Gauges lighting", + "Entities.gmod_subway_81-717_lvz.Buttons.PassengerDoor.PassengerDoor": "Passenger door", + "Entities.gmod_subway_81-717_lvz.Buttons.IGLAButtons.IGLA1Set": "IGLA: First button", + "Entities.gmod_subway_81-717_lvz.Buttons.IGLAButtons.IGLA2Set": "IGLA: Second button", + "Entities.gmod_subway_81-717_lvz.Buttons.IGLAButtons.IGLA23": "IGLA: Second and third buttons", + "Entities.gmod_subway_81-717_lvz.Buttons.IGLAButtons.IGLA3Set": "IGLA: Third button", + "Entities.gmod_subway_81-717_lvz.Buttons.IGLAButtons.IGLA4Set": "IGLA: Fourth button", + "Entities.gmod_subway_81-717_lvz.Buttons.IGLAButtons.!IGLAFire": "IGLA: Fire", + "Entities.gmod_subway_81-717_lvz.Buttons.IGLAButtons.!IGLAErr": "IGLA: Malfunction", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A61Toggle": "A61 Train wire 6 control", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A55Toggle": "A55 Train wire 10AS control", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A54Toggle": "A54 Train wire 10AK control", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A56Toggle": "A56 Turn on battery power to control circuits", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A27Toggle": "A27 Turn on DIP and lighting", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A21Toggle": "A21 Door control", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A10Toggle": "A10 Motor-compressor control", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A53Toggle": "A53 KVC power supply", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A43Toggle": "A43 ARS 12V power supply", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A45Toggle": "A45 ARS train wire 10AU", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A42Toggle": "A42 ARS 75V power supply", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A41Toggle": "A41 ARS braking", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:VUToggle": "VU Train control", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A64Toggle": "A64 Cabin lighting", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A63Toggle": "A63 IGLA/BIS", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A50Toggle": "A50 Turn on DIP and lighting", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A51Toggle": "A51 Turn off DIP and lighting", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A23Toggle": "A23 Emergency motor-compressor turn on", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A14Toggle": "A14 Train wire 18", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A75Toggle": "A75 Cabin heating", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A1Toggle": "A1 X-1", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A2Toggle": "A2 X-2", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A3Toggle": "A3 X-3", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A17Toggle": "A17 Reset overload relay", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A62Toggle": "A62 Radio communications", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A29Toggle": "A29 Radio broadcasting", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A5Toggle": "A5 Interim wagon", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A6Toggle": "A6 T-1", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A8Toggle": "A8 Pneumatic valves #1, #2", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A20Toggle": "A20 Drive/brake circuit control, train wire 20", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A25Toggle": "A25 Manual electric braking", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A22Toggle": "A22 Turn on KK", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A30Toggle": "A30 Rheostat controller motor power", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A39Toggle": "A39 Emergency control", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A44Toggle": "A44 Emergency train control", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A80Toggle": "A80 Power circuit mode switch motor power", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A65Toggle": "A65 Interior lighting", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:L_5Toggle": "Ð49 Emergency lighting", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A24Toggle": "A24 Battery charging", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A32Toggle": "A32 Open right doors", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A31Toggle": "A31 Open left doors", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A16Toggle": "A16 Close doors", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A13Toggle": "A13 Door alarm", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A12Toggle": "A12 Emergency door close", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A7Toggle": "A7 Red lamp", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A9Toggle": "A9 Red lamp", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A46Toggle": "A46 White lamp", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A47Toggle": "A47 White lamp", + "Entities.gmod_subway_81-717_lvz.Buttons.Schedule.!RouteNum": "М â„–\nRoute number", + "Entities.gmod_subway_81-717_lvz.Buttons.Schedule.!PathNum": "П â„–\nPath number", + "Entities.gmod_subway_81-717_lvz.Buttons.Schedule.!SchTime": "ВРЕМЯ ХОДÐ\nTotal schedule time", + "Entities.gmod_subway_81-717_lvz.Buttons.Schedule.!SchInterval": "ИÐТ\nTrain interval", + "Entities.gmod_subway_81-717_lvz.Buttons.Schedule.!SchHour": "ЧÐС\nHour", + "Entities.gmod_subway_81-717_lvz.Buttons.Schedule.!SchMin": "МИÐ\nMinute", + "Entities.gmod_subway_81-717_lvz.Buttons.Schedule.!SchSec": "СЕК\nSecond", + "Entities.gmod_subway_81-717_lvz.Buttons.Schedule.!SchArrival": "Arrival times", + "Entities.gmod_subway_81-717_lvz.Buttons.Schedule.!SchStations": "Station name", + "Entities.gmod_subway_81-717_lvz.Buttons.Stopkran.EmergencyBrakeValveToggle": "Emergency brake", + "Entities.gmod_subway_81-717_lvz.Buttons.PneumaticPanels.!CylinderPressure": "Brake cylinder pressure", + "Entities.gmod_subway_81-717_lvz.Buttons.PneumaticPanels.!LinePressure": "Pressure in pneumatic lines (red: brake line, black: train line)", + "Entities.gmod_subway_81-717_lvz.Buttons.Battery.BPSToggle": "RC-BPS: Anti-rolling", + "Entities.gmod_subway_81-717_lvz.Buttons.Battery.RC1Toggle": "RC-1: ARS circuits disconnect", + "Entities.gmod_subway_81-717_lvz.Buttons.Battery.BUDToggle": "BUD: Doors control unit", + "Entities.gmod_subway_81-717_lvz.Buttons.Battery.VBToggle": "VB: Battery on/off", + "Entities.gmod_subway_81-717_lvz.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_81-717_lvz.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!Speedometer1": "Speed indicator", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!Speedometer2": "Speed indicator", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!ARSOch": "NCh: No ARS frequency", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!ARS0": "0: ARS stop signal", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!ARS40": "Speed limit 40 kph", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!ARS60": "Speed limit 60 kph", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!ARS70": "Speed limit 70 kph", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!ARS80": "Speed limit 80 kph", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!LampLSD1": "LSD: Door state light (doors are closed)", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!LampLSD2": "LSD: Door state light (doors are closed)", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!LampLVD": "1: Engines engaged", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!LampLHRK": "2: Rheostat controller motion lamp", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!LampLST": "6: Brakes engaged", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!LampLRD": "LRD: Move permission(when 0 on ALS)", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!LampRP": "RP: Red overload relay light (power circuits failed to assemble)", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!LampLSN": "LSN: Failure indicator light (power circuits failed to assemble)", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!LampLKVD": "LKVD: ARS engine shutdown indicator", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!LampLKT": "LKT: ARS braking indicator", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!LampDV": "DV: Rotational sensor", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!SpeedFact1": "Speed", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!SpeedFact2": "Speed", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!ARSL20": "NCh: No ARS frequency", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!ARSL40": "Speed limit 40 kph", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!ARSL60": "Speed limit 60 kph", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!ARSL70": "Speed limit 70 kph", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!ARSL80": "Speed limit 80 kph", + "Entities.gmod_subway_81-717_lvz.Buttons.ParkingBrake2.1:ParkingBrakeToggle": "Parking brake", + "Entities.gmod_subway_81-717_lvz.Buttons.RearDoor.RearDoor": "Front door", + "Entities.gmod_subway_81-717_lvz.Buttons.GV.GVToggle": "HV switch", + "Entities.gmod_subway_81-717_lvz.Buttons.Meters.!TotalVoltmeter": "HV voltmeter (kV)", + "Entities.gmod_subway_81-717_lvz.Buttons.Meters.!TotalAmpermeter": "Total ampermeter (A)", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A61Toggle": "Train wire 6 control", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A55Toggle": "Train wire 10AS control", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A54Toggle": "Train wire 10AK control", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A56Toggle": "Turn on battery power to control circuits", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A27Toggle": "A27 Turn on DIP and lighting", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A21Toggle": "A21 Door control", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A10Toggle": "A10 Motor-compressor control", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A53Toggle": "A53 KVC power supply", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A43Toggle": "A43 ARS 12V power supply", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A45Toggle": "A45 ARS train wire 10AU", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A42Toggle": "A42 ARS 75V power supply", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A41Toggle": "A41 ARS braking", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.VUToggle": "VU Train control", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A64Toggle": "A64 Cabin lighting", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A63Toggle": "A63 IGLA/BIS", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A50Toggle": "A50 Turn on DIP and lighting", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A51Toggle": "A51 Turn off DIP and lighting", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A23Toggle": "A23 Emergency motor-compressor turn on", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A14Toggle": "A14 Train wire 18", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A75Toggle": "A75 Cabin heating", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A1Toggle": "A1 X-1", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A2Toggle": "A2 X-2", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A3Toggle": "A3 X-3", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A17Toggle": "A17 Reset overload relay", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A62Toggle": "A62 Radio communications", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A29Toggle": "A29 Radio broadcasting", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A5Toggle": "A5 Interim wagon", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A6Toggle": "A6 T-1", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A8Toggle": "A8 Pneumatic valves #1, #2", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A20Toggle": "A20 Drive/brake circuit control, train wire 20", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A25Toggle": "A25 Manual electric braking", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A22Toggle": "A22 Turn on KK", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A30Toggle": "A30 Rheostat controller motor power", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A39Toggle": "A39 Emergency control", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A44Toggle": "A44 Emergency train control", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A80Toggle": "A80 Power circuit mode switch motor power", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A65Toggle": "A65 Interior lighting", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.L_5Toggle": "Ð49 Emergency lighting", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A24Toggle": "A24 Battery charging", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A32Toggle": "A32 Open right doors", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A31Toggle": "A31 Open left doors", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A16Toggle": "A16 Close doors", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A13Toggle": "A13 Door alarm", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A12Toggle": "A12 Emergency door close", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A7Toggle": "A7 Red lamp", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A9Toggle": "A9 Red lamp", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A46Toggle": "A46 White lamp", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A47Toggle": "A47 White lamp", + "Entities.gmod_subway_81-717_lvz.Buttons.Front.L_4Toggle": "Headlights toggle", + "Entities.gmod_subway_81-717_lvz.Buttons.Front.VUSToggle": "VUS: Headlights bright/dim", + "Entities.gmod_subway_81-717_lvz.Buttons.Front.VADToggle": "VAD: Emergency door close override (failure of KD relay)", + "Entities.gmod_subway_81-717_lvz.Buttons.Front.VAHToggle": "VAH: Emergency driving mode (failure of RPB relay)", + "Entities.gmod_subway_81-717_lvz.Buttons.Front.KRPSet": "KRP: Emergency start button", + "Entities.gmod_subway_81-717_lvz.Buttons.Front.RezMKSet": "Emergency motor-compressor startup", + "Entities.gmod_subway_81-717_lvz.Buttons.Front.KDPSet": "KDP: Right doors open", + "Entities.gmod_subway_81-717_lvz.Buttons.Front.KDPKToggle": "KDP button cover", + "Entities.gmod_subway_81-717_lvz.Buttons.Front.PN": "Pneumatic brake control", + "Entities.gmod_subway_81-717_lvz.Buttons.BPSNFront.!Voltage": "Battery voltage", + "Entities.gmod_subway_81-717_lvz.Buttons.BPSNFront.VMKToggle": "Turn motor-compressor on", + "Entities.gmod_subway_81-717_lvz.Buttons.BPSNFront.BPSNonToggle": "BPSN: Train power supply", + "Entities.gmod_subway_81-717_lvz.Buttons.BPSNFront.ARS13Set": "ARS 13V: ARS stabilized voltage check", + "Entities.gmod_subway_81-717_lvz.Buttons.ParkingBrake.ParkingBrakeToggle": "Parking brake", + "Entities.gmod_subway_81-717_lvz.Buttons.ParkingBrake.DriverValveTLDisconnectToggle": "Brake line disconnect valve", + "Entities.gmod_subway_81-717_lvz.Buttons.CabinDoor.CabinDoor": "Cabin door", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!K16": "NCh: No ARS frequency", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!OS": "0: ARS stop signal", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!AVT": "Speed limit 40 kph", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS": "Speed limit 60 kph", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!KI1": "Speed limit 70 kph", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!KI2": "Speed limit 80 kph", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARSOch": "NCh: No ARS frequency", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS0": "0: ARS stop signal", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS40": "Speed limit 40 kph", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS60": "Speed limit 60 kph", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS70": "Speed limit 70 kph", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS80": "Speed limit 80 kph", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.KHSet": "", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.KSZDSet": "", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.VAVToggle": "", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.VZPToggle": "", + "Entities.gmod_subway_81-717_lvz.Buttons.PassengerDoor1.PassengerDoor": "Passenger door", + "Entities.gmod_subway_81-717_lvz.Buttons.Reverser.KVReverserDown": "Reverser back", + "Entities.gmod_subway_81-717_lvz.Buttons.Reverser.KVReverserUp": "Reverser forward", + "Entities.gmod_subway_81-717_lvz.Buttons.EPKDisconnect.EPKToggle": "EPV disconnect valve", + "Entities.gmod_subway_81-717_lvz.Buttons.Help.ShowHelp": "Show help on driving the train", + "Entities.gmod_subway_81-717_lvz.Buttons.UAVAPanel.UAVAToggle": "UAVA: Universal Automatic Autostop Disabler (disable autostop)", + "Entities.gmod_subway_81-717_lvz.Buttons.UAVAPanel.UAVACToggle ": "UAVA: Universal Automatic Autostop Disabler(reset contacts)", + "Entities.gmod_subway_81-717_lvz.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle": "Brake lever disconnect valve", + "Entities.gmod_subway_81-717_lvz.Buttons.DriverValveDisconnect.DriverValveBLDisconnectToggle": "Train line disconnect valve", + "Entities.gmod_subway_81-717_lvz.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Disable air distributor", + + + + + "Entities.gmod_subway_81-714_lvz.Buttons.GV.GVToggle": "HV switch", + "Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_81-714_lvz.Buttons.RearDoor.RearDoor": "Rear door", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Left.DriverValveBLDisconnectToggle": "Brake line disconnect valve", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Left.DriverValveTLDisconnectToggle": "Train line disconnect valve", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Left.A65Toggle": "A65 Interior lighting", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Left.A56Toggle": "A56 Turn on battery power to control circuits", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Left.A63Toggle": "A63 IGLA/BIS", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Left.A10Toggle": "A10 Motor-compressor control", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Left.A30Toggle": "A30 Rheostat controller motor power", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Left.A80Toggle": "A80 Power circuit mode switch motor power", + "Entities.gmod_subway_81-714_lvz.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_81-714_lvz.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_81-714_lvz.Buttons.FrontPneumatic.ParkingBrakeToggle": "Parking brake", + "Entities.gmod_subway_81-714_lvz.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Disable air distributor", + "Entities.gmod_subway_81-714_lvz.Buttons.FrontDoor.FrontDoor": "Front door", + "Entities.gmod_subway_81-714_lvz.Buttons.Battery.VBToggle": "VB: Battery on/off", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A54Toggle": "A54 Train wire 10AK control", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A27Toggle": "A27 Turn on DIP and lighting", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A24Toggle": "A24 Battery charging", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A53Toggle": "A53 KVC power supply", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A13Toggle": "A13 Door alarm", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A32Toggle": "A32 Open right doors", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A31Toggle": "A31 Open left doors", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A16Toggle": "A16 Close doors", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A12Toggle": "A12 Emergency door close", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A50Toggle": "A50 Turn on DIP and lighting", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A51Toggle": "A51 Turn off DIP and lighting", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A1Toggle": "A1 X-1", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.KRPSet": "START: Emergency start button", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.VozvratRPSet": "Reset overload relay", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.RezMKSet": "Emergency motor-compressor startup", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.VMKToggle": "Turn motor-compressor on", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.BPSNonToggle": "BPSN: Train power supply", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A2Toggle": "A2 X-2", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A3Toggle": "A3 X-3", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A17Toggle": "A17 Reset overload relay", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A5Toggle": "A5 ", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A6Toggle": "A6 T-1", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A8Toggle": "A8 Pneumatic valves #1, #2", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A20Toggle": "A20 Drive/brake circuit control, train wire 20", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A25Toggle": "A25 Manual electric braking", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A22Toggle": "A22 Turn on KK", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A23Toggle": "A23 Emergency motor-compressor turn on", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A39Toggle": "A39 Emergency control", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A14Toggle": "A14 Train wire 18" +} +]] diff --git a/lua/metrostroi_data/languages_/en_buttons_720.lua b/lua/metrostroi_data/languages_/en_buttons_720.lua new file mode 100644 index 0000000..ba21341 --- /dev/null +++ b/lua/metrostroi_data/languages_/en_buttons_720.lua @@ -0,0 +1,237 @@ +return [[ +{ + "Lang": "en", + "Name": "English", + + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF1Set": "Vityaz: F1", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF2Set": "Vityaz: Next screen", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF3Set": "Vityaz: Previous screen", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF4Set": "Vityaz: Main", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz1Set": "Vityaz: 1", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz4Set": "Vityaz: 4", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz7Set": "Vityaz: 7", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz2Set": "Vityaz: 2", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz5Set": "Vityaz: 5", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz8Set": "Vityaz: 8", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz0Set": "Vityaz: 0", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz3Set": "Vityaz: 3", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz6Set": "Vityaz: 6", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz9Set": "Vityaz: 9", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF5Set": "Vityaz: Erase", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF6Set": "Vityaz: Up\\Speed", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF7Set": "Vityaz: Down\\Currents", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF8Set": "Vityaz: Input\\Wagon equipment", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF9Set": "Vityaz: Select\\Wagon equipment controlling", + "Entities.gmod_subway_81-720.Buttons.RV.EmerX1Set": "Emergency X-1", + "Entities.gmod_subway_81-720.Buttons.RV.EmerX2Set": "Emergency X-2", + "Entities.gmod_subway_81-720.Buttons.RV.EmerCloseDoorsSet": "Emergency door close", + "Entities.gmod_subway_81-720.Buttons.RV.EmergencyDoorsToggle": "Emergency doors", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode-": "Fan operation mode: +", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode+": "Fan operation mode: -", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode+": "+", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode-": "-", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode-": "Fan strength: +", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode+": "Fan strength: -", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV1Toggle": "SF1: Control circuits power", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV2Toggle": "SF2: BUV Power (wagon controlling unit)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV3Toggle": "SF3: BUTP Power (engines controlling unit)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV4Toggle": "SF4: BUTP Controlling", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV5Toggle": "SF5: BUTP Emergency control", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV6Toggle": "SF6: BUTP Power", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV7Toggle": "SF7: BBE (onboard power supply unit)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV8Toggle": "SF8: BV controlling", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV9Toggle": "SF9: BV power (overload relay)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV10Toggle": "SF10: PPO", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV11Toggle": "SF11: Motor-compressor", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV12Toggle": "SF12: Doors closing", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV13Toggle": "SF13: Doors open left", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV14Toggle": "SF14: Doors open right", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV15Toggle": "SF15: Front doors", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV16Toggle": "SF16: Announcer", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV17Toggle": "SF17: Emergency intercom", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV18Toggle": "SF18: (placeholder)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV19Toggle": "SF19: Passenger lighting power", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV20Toggle": "SF20: Emergency passenger lighting", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV21Toggle": "SF21: Speed sensor", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV22Toggle": "SF22: Parking brake", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV23Toggle": "SF23: 1st fan group controlling", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV24Toggle": "SF24: 2nd fan group controlling", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV25Toggle": "SF25: 1st fan group power", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV26Toggle": "SF26: 2nd fan group power", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV27Toggle": "SF27: Exciter power", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV28Toggle": "SF28: ZKK power", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV29Toggle": "SF29: Current collectors", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV30Toggle": "SF30: Line schemes & ticker", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV31Toggle": "SF31: (placeholder)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV32Toggle": "SF32: (placeholder)", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV33Toggle": "SF33: (placeholder)", + "Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPMenuSet": "ASNP: Menu", + "Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPUpSet": "ASNP: Up", + "Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPDownSet": "ASNP: Down", + "Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPOnToggle": "ASNP: Turn on", + "Entities.gmod_subway_81-720.Buttons.PneumoHelper1.!BrakeCylinder": "Brake cylinder", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF1Toggle": "SF1: Main power", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF2Toggle": "SF2: Main control", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF3Toggle": "SF3: Emergency control", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF4Toggle": "SF4: BARS (ARS unit)", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF5Toggle": "SF5: BUP (train controlling unit)", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF6Toggle": "SF6: BKCU (control circuits commutation unit)", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF7Toggle": "SF7: BARS (ARS unit)", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF8Toggle": "SF8: Announcer", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF9Toggle": "SF9: Radiostation", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF10Toggle": "SF10: Wagon orientation", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF11Toggle": "SF11: Movement direction", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF12Toggle": "SF12: 1st headlights group", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF13Toggle": "SF13: 2nd headlights group", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF14Toggle": "SF14: Red lights", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF15Toggle": "SF15: Cabin lighting", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF16Toggle": "SF16: Heater", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF17Toggle": "SF17: Cabin air conditioner", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF18Toggle": "SF18: Flange lubrication", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF19Toggle": "SF19: Main KRM power (brake lever)", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF20Toggle": "SF20: Emergency KRM power (brake lever)", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF21Toggle": "SF21: Doors opening", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF22Toggle": "SF22: Doors closing", + "Entities.gmod_subway_81-720.Buttons.BTO.K29Toggle": "KRMSH (brake lever disconnect valve)", + "Entities.gmod_subway_81-720.Buttons.PassengerDoor2.PassengerDoor": "Passenger door", + "Entities.gmod_subway_81-720.Buttons.VoltHelper2.!HV": "Total voltmeter (kV)", + "Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I1_3": "1st engine group current (A)", + "Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I2_4": "2nd engine group current (A)", + "Entities.gmod_subway_81-720.Buttons.GV.GVToggle": "HV switch", + "Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_81-720.Buttons.RearDoor1.RearDoor": "Rear door", + "Entities.gmod_subway_81-720.Buttons.RearDoor.RearDoor": "Rear door", + "Entities.gmod_subway_81-720.Buttons.BackDown.Pant1Toggle": "Disable 1st current collectors group", + "Entities.gmod_subway_81-720.Buttons.BackDown.Pant2Toggle": "Disable 2nd current collectors group", + "Entities.gmod_subway_81-720.Buttons.BackDown.Vent1Toggle": "1st ventilation group", + "Entities.gmod_subway_81-720.Buttons.BackDown.Vent2Toggle": "2nd ventilation group", + "Entities.gmod_subway_81-720.Buttons.BackDown.VentToggle": "", + "Entities.gmod_subway_81-720.Buttons.BackDown.PassLightToggle": "Passenger lighting", + "Entities.gmod_subway_81-720.Buttons.BackDown.CabLightToggle": "Cabin lighting", + "Entities.gmod_subway_81-720.Buttons.BackDown.Headlights1Toggle": "1st headlights group", + "Entities.gmod_subway_81-720.Buttons.BackDown.Headlights2Toggle": "2nd headlights group", + "Entities.gmod_subway_81-720.Buttons.BackDown.ParkingBrakeToggle": "Parking brake", + "Entities.gmod_subway_81-720.Buttons.BackDown.TorecDoorsToggle": "Front doors", + "Entities.gmod_subway_81-720.Buttons.BackDown.BBERToggle": "Turning on emergency BBE", + "Entities.gmod_subway_81-720.Buttons.BackDown.BBEToggle": "BBE (onboard power supply unit)", + "Entities.gmod_subway_81-720.Buttons.BackDown.CompressorToggle": "Motor-compressor", + "Entities.gmod_subway_81-720.Buttons.BackDown.CabLightStrengthToggle": "Cabin lighting power", + "Entities.gmod_subway_81-720.Buttons.BackDown.AppLights1Toggle": "Wagon equipment lighting", + "Entities.gmod_subway_81-720.Buttons.BackDown.AppLights2Toggle": "", + "Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock-": "Broken BARS (ARS unit) blocking: -", + "Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock+": "Broken BARS (ARS unit) blocking: +", + "Entities.gmod_subway_81-720.Buttons.BackDown.BatteryToggle": "Battery on/off", + "Entities.gmod_subway_81-720.Buttons.BackDown.ALSFreqToggle": "ALS decoder", + "Entities.gmod_subway_81-720.Buttons.VoltHelper1.!Battery": "Control circuits voltage", + "Entities.gmod_subway_81-720.Buttons.PassengerDoor.PassengerDoor": "Passenger door", + "Entities.gmod_subway_81-720.Buttons.CabinDoorR.CabinDoorRight": "Cabin door", + "Entities.gmod_subway_81-720.Buttons.CabinDoorL.CabinDoorLeft": "Cabin door", + "Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectLToggle": "Select left doors", + "Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectRToggle": "Select right doors", + "Entities.gmod_subway_81-720.Buttons.PUL.DoorBlockToggle": "Doors locking: Emergency door close override", + "Entities.gmod_subway_81-720.Buttons.PUL.!DoorLeftLamp": "Left doors button work", + "Entities.gmod_subway_81-720.Buttons.PUL.DoorLeftSet": "Left doors", + "Entities.gmod_subway_81-720.Buttons.PUU.!DoorsClosed": "Doors are closed", + "Entities.gmod_subway_81-720.Buttons.PUU.StandToggle": "Stay", + "Entities.gmod_subway_81-720.Buttons.PUU.TickerToggle": "Ticker", + "Entities.gmod_subway_81-720.Buttons.PUU.KAHToggle": "KAH", + "Entities.gmod_subway_81-720.Buttons.PUU.ALSToggle": "ALS", + "Entities.gmod_subway_81-720.Buttons.PUU.FDepotToggle": "Depature from depot", + "Entities.gmod_subway_81-720.Buttons.PUU.!HVoltage": "No high voltage", + "Entities.gmod_subway_81-720.Buttons.PUU.PassSchemeToggle": "Line schemes", + "Entities.gmod_subway_81-720.Buttons.PUU.EmergencyCompressorSet": "Emergency compressor", + "Entities.gmod_subway_81-720.Buttons.PUU.EnableBVSet": "Turn on protection (overload relay)", + "Entities.gmod_subway_81-720.Buttons.PUU.DisableBVSet": "Disable BV (overload relay)", + "Entities.gmod_subway_81-720.Buttons.PUU.RingSet": "Ring", + "Entities.gmod_subway_81-720.Buttons.PUU.R_Program2Set": "Program 2", + "Entities.gmod_subway_81-720.Buttons.PUU.R_AnnouncerToggle": "Announcer", + "Entities.gmod_subway_81-720.Buttons.PUU.R_LineToggle": "Line", + "Entities.gmod_subway_81-720.Buttons.PUU.R_EmerSet": "Emergency intercom", + "Entities.gmod_subway_81-720.Buttons.PUU.R_Program1Set": "Program 1", + "Entities.gmod_subway_81-720.Buttons.PUU.EnableBVEmerSet": "Emergency BV recovery", + "Entities.gmod_subway_81-720.Buttons.PUU.EmergencyControlsToggle": "Emergency control", + "Entities.gmod_subway_81-720.Buttons.PUU.WiperToggle": "Wiper", + "Entities.gmod_subway_81-720.Buttons.PUU.!VDop": "Allowed speed", + "Entities.gmod_subway_81-720.Buttons.PUU.!VFact": "Actual speed", + "Entities.gmod_subway_81-720.Buttons.PUU.!VPred": "Preventive speed", + "Entities.gmod_subway_81-720.Buttons.PUU.!VDop2": "Allowed speed", + "Entities.gmod_subway_81-720.Buttons.PUU.!Acc": "Acceleration", + "Entities.gmod_subway_81-720.Buttons.PUU.!Forw": "Moving forward", + "Entities.gmod_subway_81-720.Buttons.PUU.!Back": "Moving backward", + "Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeAddSet": "(auxiliary) Brake", + "Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeReleaseSet": "(auxiliary) Release", + "Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeToggle": "Auxiliary brake", + "Entities.gmod_subway_81-720.Buttons.PUR.EmergencyBrakeToggle": "Emergency brake", + "Entities.gmod_subway_81-720.Buttons.PUR.DoorCloseToggle": "Close doors", + "Entities.gmod_subway_81-720.Buttons.PUR.AttentionMessageSet": "Message perception", + "Entities.gmod_subway_81-720.Buttons.PUR.AttentionSet": "Attention", + "Entities.gmod_subway_81-720.Buttons.PUR.AttentionBrakeSet": "Braking perception", + "Entities.gmod_subway_81-720.Buttons.PUR.HornBSet": "Horn", + "Entities.gmod_subway_81-720.Buttons.PUR.DoorRightSet": "Right doors", + "Entities.gmod_subway_81-720.Buttons.PUR.!DoorRightLamp": "Right doors button work", + "Entities.gmod_subway_81-720.Buttons.PneumoHelper2.!BrakeTrainLine": "Red - brake line, black - train line", + + "Entities.gmod_subway_81-721.Buttons.GV.GVToggle": "HV switch", + "Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_81-721.Buttons.FrontDoor.FrontDoor": "Front door", + "Entities.gmod_subway_81-721.Buttons.RearDoor.RearDoor": "Rear door", + "Entities.gmod_subway_81-721.Buttons.Battery.BatteryToggle": "Battery on/off", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV1Toggle": "SF1: Control circuits power", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV2Toggle": "SF2: BUV Power (wagon controlling unit)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV3Toggle": "SF3: BUTP Power (engines controlling unit)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV4Toggle": "SF4: BUTP Controlling", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV5Toggle": "SF5: BUTP Emergency control", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV6Toggle": "SF6: BUTP Power", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV7Toggle": "SF7: BBE (onboard power supply unit)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV8Toggle": "SF8: BV controlling", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV9Toggle": "SF9: BV power (overload relay)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV10Toggle": "SF10: PPO", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV11Toggle": "SF11: Motor-compressor", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV12Toggle": "SF12: Doors closing", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV13Toggle": "SF13: Doors open left", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV14Toggle": "SF14: Doors open right", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV15Toggle": "SF15: Front doors", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV16Toggle": "SF16: Announcer", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV17Toggle": "SF17: Emergency intercom", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV18Toggle": "SF18: (placeholder)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV19Toggle": "SF19: Passenger lighting power", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV20Toggle": "SF20: Emergency passenger lighting", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV21Toggle": "SF21: Speed sensor", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV22Toggle": "SF22: Parking brake", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV23Toggle": "SF23: 1st fan group controlling", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV24Toggle": "SF24: 2nd fan group controlling", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV25Toggle": "SF25: 1st fan group power", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV26Toggle": "SF26: 2nd fan group power", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV27Toggle": "SF27: Exciter power", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV28Toggle": "SF28: ZKK power", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV29Toggle": "SF29: Current collectors", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV30Toggle": "SF30: Line schemes & ticker", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV31Toggle": "SF31: (placeholder)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV32Toggle": "SF32: (placeholder)", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV33Toggle": "SF33: (placeholder)", + "Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Train line isolation valve", + + "Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1USet": "IGLA: First button UP", + "Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1Set": "IGLA: First button", + "Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1DSet": "IGLA: First button DOWN", + "Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2USet": "IGLA: Second button UP", + "Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2Set": "IGLA: Second button", + "Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2DSet": "IGLA: Second button DOWN", + "Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLASR": "IGLA: SR", + "Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLARX": "IGLA: RX", + "Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAErr": "IGLA: Malfunction", + "Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAOSP": "IGLA: OSP(Fire extinguisher)", + "Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAPI": "IGLA: PI(Fire indication)", + "Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAOff": "IGLA: Off", + "Entities.gmod_subway_81-720.Buttons.PUU.KAHkToggle": "KAH button cover", + "Entities.gmod_subway_81-720.Buttons.PUU.ALSkToggle": "ALS button cover", + "Entities.gmod_subway_81-720.Buttons.PUR.AccelRateSet": "Acceleration rate(Slope mode)", + + "Entities.gmod_subway_81-720.Buttons.BTO.UAVAToggle": "UAVA: Universal Automatic Autostop Disabler (disable autostop)" +} +]] diff --git a/lua/metrostroi_data/languages_/en_buttons_722.lua b/lua/metrostroi_data/languages_/en_buttons_722.lua new file mode 100644 index 0000000..93a5642 --- /dev/null +++ b/lua/metrostroi_data/languages_/en_buttons_722.lua @@ -0,0 +1,219 @@ +return [[ +{ + "Lang": "en", + "Name": "English", + + + "Entities.gmod_subway_81-722.Buttons.StopKran.UAVAToggle": "Autostop disabler", + "Entities.gmod_subway_81-722.Buttons.StopKran.EmergencyBrakeValveToggle": "Emergency brake", + "Entities.gmod_subway_81-722.Buttons.PU2.ARSToggle": "ARS: Automatic speed regulation", + "Entities.gmod_subway_81-722.Buttons.PU2.ALSToggle": "ALS: Automatic locomotive signalling", + "Entities.gmod_subway_81-722.Buttons.PU2.GlassWasherSet": "Glass washer", + "Entities.gmod_subway_81-722.Buttons.PU2.GlassCleaner+": "Wiper(up)", + "Entities.gmod_subway_81-722.Buttons.PU2.GlassCleaner-": "Wiper(down)", + "Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeTPlusKToggle": "Emergency brake button cover \"T+\"", + "Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeTPlusSet": "Emergency brake \"T+\"", + "Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeToggle": "Emergency braking", + "Entities.gmod_subway_81-722.Buttons.PU2.VigilanceSet": "Attention", + "Entities.gmod_subway_81-722.Buttons.PU2.Headlights+": "Headlights(up)", + "Entities.gmod_subway_81-722.Buttons.PU2.Headlights-": "Headlights(down)", + "Entities.gmod_subway_81-722.Buttons.PU2.DoorSelectToggle": "Select doors side", + "Entities.gmod_subway_81-722.Buttons.PU2.DoorClose+": "Door closing(up)", + "Entities.gmod_subway_81-722.Buttons.PU2.DoorClose-": "Door closing(down)", + "Entities.gmod_subway_81-722.Buttons.PU2.DoorRightSet": "Open right doors", + "Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatUpSet": "SARMAT: Up", + "Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatDownSet": "SARMAT: Down", + "Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatEnterSet": "SARMAT: Enter", + "Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatEscSet": "SARMAT: Esc", + "Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF1Set": "SARMAT: F1", + "Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF2Set": "SARMAT: F2", + "Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF3Set": "SARMAT: F3", + "Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF4Set": "SARMAT: F4", + "Entities.gmod_subway_81-722.Buttons.HelperLamps.!LRD": "LRD: Move permission(when 0 on ALS)", + "Entities.gmod_subway_81-722.Buttons.HelperLamps.!LPT": "LPT: Pneumatic brakes lamp", + "Entities.gmod_subway_81-722.Buttons.HelperLamps.!RS": "P/C: Emergency radiostation power lamp", + "Entities.gmod_subway_81-722.Buttons.HelperLamps.!AVS": "ABC Low train line pressure lamp", + "Entities.gmod_subway_81-722.Buttons.HelperLamps.!LSD": "LSD: Door state light (doors are closed)", + "Entities.gmod_subway_81-722.Buttons.HelperLamps.!RU": "RU: Turning off control relay lamp", + "Entities.gmod_subway_81-722.Buttons.HelperLamps.!04": "NCh: No ARS frequency (0 kph)", + "Entities.gmod_subway_81-722.Buttons.HelperLamps.!00": "0: Speed limit 0 kph", + "Entities.gmod_subway_81-722.Buttons.HelperLamps.!40": "40: Speed limit 40 kph", + "Entities.gmod_subway_81-722.Buttons.HelperLamps.!60": "60: Speed limit 60 kph", + "Entities.gmod_subway_81-722.Buttons.HelperLamps.!70": "70: Speed limit 70 kph", + "Entities.gmod_subway_81-722.Buttons.HelperLamps.!80": "80: Speed limit 80 kph", + "Entities.gmod_subway_81-722.Buttons.CabinDoorL.CabinDoorLeft": "Cabin door", + "Entities.gmod_subway_81-722.Buttons.BMP.SarmatPathSet": "SARMAT: Track", + "Entities.gmod_subway_81-722.Buttons.BMP.SarmatLineSet": "SARMAT: Line", + "Entities.gmod_subway_81-722.Buttons.BMP.SarmatZeroSet": "SARMAT: >0<", + "Entities.gmod_subway_81-722.Buttons.BMP.SarmatStartSet": "SARMAT: Start", + "Entities.gmod_subway_81-722.Buttons.BTO.K29Toggle": "KRMSH (driver disconnect valve)", + "Entities.gmod_subway_81-722.Buttons.BTO.K9Toggle": "RVTB: Reserved valve of safeness brake", + "Entities.gmod_subway_81-722.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_81-722.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber1Set": "First number", + "Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber2Set": "Second number", + "Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber3Set": "Third number", + "Entities.gmod_subway_81-722.Buttons.RearDoor.RearDoor": "Rear door", + "Entities.gmod_subway_81-722.Buttons.Lighting.CabinLightToggle": "Cabin lighting", + "Entities.gmod_subway_81-722.Buttons.Lighting.CabinLight-": "Cabin lighting(leftward)", + "Entities.gmod_subway_81-722.Buttons.Lighting.CabinLight+": "Cabin lighting(rightward)", + "Entities.gmod_subway_81-722.Buttons.Lighting.PanelLightToggle": "Panel lighting", + "Entities.gmod_subway_81-722.Buttons.PassengerDoor.PassengerDoor": "Passenger door", + "Entities.gmod_subway_81-722.Buttons.PU1.MirrorHeatingSet": "Mirrors heater", + "Entities.gmod_subway_81-722.Buttons.PU1.DoorLeft2Set": "Left doors", + "Entities.gmod_subway_81-722.Buttons.PU1.DoorBackSet": "Open right doors of last wagon", + "Entities.gmod_subway_81-722.Buttons.PU1.EmergencyDriveSet": "Emergency drive", + "Entities.gmod_subway_81-722.Buttons.PU1.MicrophoneSet": "Microphone", + "Entities.gmod_subway_81-722.Buttons.PU1.DoorLeft1Set": "Left doors", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF1Toggle": "SF1:Train power line (controlling)", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF2Toggle": "SF2:Active cabin", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF3Toggle": "SF3:Main control", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF4Toggle": "SF4:Reserved control", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF5Toggle": "SF5:RVTB control", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF6Toggle": "SF6:Brake lever power", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF7Toggle": "SF7:Doors (controlling)", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF8Toggle": "SF8:BARS 1 (ARS unit)", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF9Toggle": "SF9:BARS 2 (ARS unit)", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF00Toggle": "SF00:", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF01Toggle": "SF01:", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF10Toggle": "SF10:BRPI-M1 (Parameter registration unit)", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF11Toggle": "SF11:BRPI-M2 (Parameter registration unit)", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF12Toggle": "SF12:Fire system", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF13Toggle": "SF13:Current collector, grounding", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF02Toggle": "SF02:", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF14Toggle": "SF14:Radiostation 1", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF15Toggle": "SF15:Radiostation 2", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF16Toggle": "SF16:CIS 1 (central informing system)", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF17Toggle": "SF17:CIS 2 (central informing system)", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF18Toggle": "SF18:CIS 3 (central informing system)", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF19Toggle": "SF19:BUKP, UPI (train announce device)", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF20Toggle": "SF20:Monitor", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF21Toggle": "SF21:Orientation", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF22Toggle": "SF22:Red lamp", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF23Toggle": "SF23:Headlights, red lamp", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF24Toggle": "SF24:SOSD (station doors opening lamp)", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF25Toggle": "SF25:Cabin lighting", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF26Toggle": "SF26:Cabin air conditioner", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF27Toggle": "SF27:Wiper, glass washer, horn", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF03Toggle": "SF03:", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF04Toggle": "SF04:", + "Entities.gmod_subway_81-722.Buttons.PassengerDoor1.PassengerDoor": "Passenger door", + "Entities.gmod_subway_81-722.Buttons.CabinDoorR.CabinDoorRight": "Cabin door", + "Entities.gmod_subway_81-722.Buttons.PPZB.PSNToggleSet": "Batteries charging", + "Entities.gmod_subway_81-722.Buttons.PPZB.BattOnSet": "Enable train power line", + "Entities.gmod_subway_81-722.Buttons.PPZB.BattOffSet": "Disable train power line", + "Entities.gmod_subway_81-722.Buttons.PPZB.TorecDoorUnlockSet": "Unlock end doors", + "Entities.gmod_subway_81-722.Buttons.PPZB.SCEnable": "Grounding", + "Entities.gmod_subway_81-722.Buttons.PPZB.SOSD": "SOSD (station doors opening lamp)", + "Entities.gmod_subway_81-722.Buttons.Isolations.FrontBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_81-722.Buttons.Isolations.FrontTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_81-722.Buttons.BI3.KRO+": "Movement direction(up)", + "Entities.gmod_subway_81-722.Buttons.BI3.KRO-": "Movement direction(down)", + "Entities.gmod_subway_81-722.Buttons.BI3.RingSet": "Ring", + "Entities.gmod_subway_81-722.Buttons.BI3.Compressor-": "Compressors(-)", + "Entities.gmod_subway_81-722.Buttons.BI3.Compressor+": "Compressors(+)", + "Entities.gmod_subway_81-722.Buttons.BI3.!BrakeCylinder": "Brake cylinder", + "Entities.gmod_subway_81-722.Buttons.BI3.!BrakeTrainLine": "Red - brake line, black - train line", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF31Toggle": "SF31:Train power wire", + "Entities.gmod_subway_81-722.Buttons.PVZ.1:SF31Toggle": "SF31:Train power wire", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF32Toggle": "SF32:Train power line (controlling)", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF33Toggle": "SF33:Control circuits power", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF34Toggle": "SF34:Left CIS", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF35Toggle": "SF35:Right CIS", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF36Toggle": "SF36:Bort signalling (lamps)", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF37Toggle": "SF37:Disable current collectors", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF38Toggle": "SF38:Reserve", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF41Toggle": "SF41:Doors open left", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF42Toggle": "SF42:Doors open right", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF43Toggle": "SF43:Doors close", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF44Toggle": "SF44:End doors", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF45Toggle": "SF45:Interior lighting power", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF46Toggle": "SF46:Emergency interior lighting", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF47Toggle": "SF47:1st ventilation group", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF48Toggle": "SF48:2nd ventilation group", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF49Toggle": "SF49:Counter", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF51Toggle": "SF51:BUV (wagon controlling unit)", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF52Toggle": "SF52:BODV (power of rotational sensor processing unit)", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF53Toggle": "SF53:PSN (power supply)", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF54Toggle": "SF54:Air dryer", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF55Toggle": "SF55:BUFT (friction brake controlling unit)", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF56Toggle": "SF56:Inverter - inverter", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF57Toggle": "SF57:Inverter - heating", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF58Toggle": "SF58:Main CUV (wagon control circuits)", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF59Toggle": "SF59:Reserved CUV (wagon control circuits)", + "Entities.gmod_subway_81-722.Buttons.PVM.PassLightToggle": "Interior lighting", + "Entities.gmod_subway_81-722.Buttons.PVM.PassVent-": "Interior ventilation(-)", + "Entities.gmod_subway_81-722.Buttons.PVM.PassVent+": "Interior ventilation(+)", + "Entities.gmod_subway_81-722.Buttons.PVM.VKFToggle": "VKF (red lamps disabler)", + "Entities.gmod_subway_81-722.Buttons.PVM.ParkingBrakeToggle": "Parking brake", + "Entities.gmod_subway_81-722.Buttons.PVM.VRDToggle": "VRD: Allow movement(when 0 on ALS)", + "Entities.gmod_subway_81-722.Buttons.PVM.SOSDEnableToggle": "SOSD (station doors opening lamp)", + "Entities.gmod_subway_81-722.Buttons.PVM.VRU-": "VRU(-) (enable control relay)", + "Entities.gmod_subway_81-722.Buttons.PVM.VRU+": "VRU(+) (enable control relay)", + "Entities.gmod_subway_81-722.Buttons.PVM.VADToggle": "Driving w/o doors control", + "Entities.gmod_subway_81-722.Buttons.PVM.VAHToggle": "Driving w/o attention pedal", + "Entities.gmod_subway_81-722.Buttons.PVM.EmergencyRadioPowerToggle": "Emergency radiostation power", + "Entities.gmod_subway_81-722.Buttons.PVM.BARSMode-": "BARS modes(leftward)", + "Entities.gmod_subway_81-722.Buttons.PVM.BARSMode+": "BARS modes(rightward)", + "Entities.gmod_subway_81-722.Buttons.PVM.PantSC-": "Current collectors & grounding(-)", + "Entities.gmod_subway_81-722.Buttons.PVM.PantSC+": "Current collector & grounding(+)", + "Entities.gmod_subway_81-722.Buttons.PVM.RCARSToggle": "RC ARS (ARS circuits disconnect)", + + "Entities.gmod_subway_81-723.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_81-723.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_81-723.Buttons.RearDoor.RearDoor": "Rear door", + "Entities.gmod_subway_81-723.Buttons.FrontDoor.FrontDoor": "Front door", + "Entities.gmod_subway_81-723.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_81-723.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF31Toggle": "SF31:Train power wire", + "Entities.gmod_subway_81-723.Buttons.PVZ.1:SF31Toggle": "SF31:Train power wire", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF32Toggle": "SF32:Train power line (controlling)", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF33Toggle": "SF33:Control circuits power", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF34Toggle": "SF34:Left CIS", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF35Toggle": "SF35:Right CIS", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF36Toggle": "SF36:Bort signalling (lamps)", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF37Toggle": "SF37:Disable current collectors", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF38Toggle": "SF38:Reserve", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF41Toggle": "SF41:Doors open left", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF42Toggle": "SF42:Doors open right", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF43Toggle": "SF43:Doors close", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF44Toggle": "SF44:End doors", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF45Toggle": "SF45:Interior lighting power", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF46Toggle": "SF46:Emergency interior lighting", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF47Toggle": "SF47:1st ventilation group", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF48Toggle": "SF48:2nd ventilation group", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF49Toggle": "SF49:Counter", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF51Toggle": "SF51:BUV (wagon controlling unit)", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF52Toggle": "SF52:BODV (power of rotational sensor processing unit)", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF53Toggle": "SF53:PSN (power supply)", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF54Toggle": "SF54:Air dryer", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF55Toggle": "SF55:BUFT (friction brake controlling unit)", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF56Toggle": "SF56:Inverter - inverter", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF57Toggle": "SF57:Inverter - heating", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF58Toggle": "SF58:Main CUV (wagon control circuits)", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF59Toggle": "SF59:Reserved CUV (wagon control circuits)", + + "Entities.gmod_subway_81-724.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_81-724.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_81-724.Buttons.RearDoor.RearDoor": "Rear door", + "Entities.gmod_subway_81-724.Buttons.FrontDoor.FrontDoor": "Front door", + "Entities.gmod_subway_81-724.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_81-724.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF34Toggle": "SF34:Left CIS", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF35Toggle": "SF35:Right CIS", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF36Toggle": "SF36:Bort signalling (lamps)", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF41Toggle": "SF41:Doors open left", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF42Toggle": "SF42:Doors open right", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF43Toggle": "SF43:Doors close", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF44Toggle": "SF44:End doors", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF45Toggle": "SF45:Interior lighting power", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF46Toggle": "SF46:Emergency interior lighting", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF47Toggle": "SF47:1st ventilation group", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF48Toggle": "SF48:2nd ventilation group", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF51Toggle": "SF51:BUV (wagon controlling unit)", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF52Toggle": "SF52:BODV (power of rotational sensor processing unit)", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF53Toggle": "SF53:Reserve", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF54Toggle": "SF54:Reserve", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF55Toggle": "SF55:BUFT (friction brake controlling unit)" +} +]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages_/en_buttons_em508.lua b/lua/metrostroi_data/languages_/en_buttons_em508.lua new file mode 100644 index 0000000..f644f1a --- /dev/null +++ b/lua/metrostroi_data/languages_/en_buttons_em508.lua @@ -0,0 +1,157 @@ +return [[ +{ + "Lang": "en", + "Name": "English", + + + "Entities.gmod_subway_em508.Buttons.Back.BackDoor": "Rear door", + "Entities.gmod_subway_em508.Buttons.HelperPanel.R_Program1Set": "Program 1", + "Entities.gmod_subway_em508.Buttons.HelperPanel.R_Program2Set": "Program 2", + "Entities.gmod_subway_em508.Buttons.HelperPanel.VDLSet": "VDL: Left doors open", + "Entities.gmod_subway_em508.Buttons.HelperPanel.VUD2Toggle": "VUD2: Door control toggle (close doors)", + "Entities.gmod_subway_em508.Buttons.AV2.RSTToggle": "RST: Radiostation", + "Entities.gmod_subway_em508.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_em508.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_em508.Buttons.AVU.AVULight": "Lamp: Automatic control disabler is active", + "Entities.gmod_subway_em508.Buttons.AVU.OtklAVUToggle": "OtklAVU: Turn off automatic control disable relay (failure of AVU)", + "Entities.gmod_subway_em508.Buttons.Back2.!HVFuses": "HV fuses block", + "Entities.gmod_subway_em508.Buttons.Back2.!Relays": "The box with the devices for battery recharging and door pressure diffuser", + "Entities.gmod_subway_em508.Buttons.Back2.!Heater": "The heater", + "Entities.gmod_subway_em508.Buttons.Main.DoorSelectToggle": "Switcher:Select doors side", + "Entities.gmod_subway_em508.Buttons.Main.DIPonSet": "Swithcer:Turn interior lights on", + "Entities.gmod_subway_em508.Buttons.Main.DIPoffSet": "Swithcer:Turn interior lights off", + "Entities.gmod_subway_em508.Buttons.Main.VozvratRPSet": "VRP:Reset overload relay", + "Entities.gmod_subway_em508.Buttons.Main.KSNSet": "KSN: Forced activation of the RP on the faulty wagon (Malfunction signaling)", + "Entities.gmod_subway_em508.Buttons.Main.KRZDSet": "KRZD: Emergency door closing", + "Entities.gmod_subway_em508.Buttons.Main.KSDSet": "KSD: Door state controle(Door check)", + "Entities.gmod_subway_em508.Buttons.Main.KDPSet": "KDP: Right doors open", + "Entities.gmod_subway_em508.Buttons.Main.KDLSet": "KDL: Left doors open", + "Entities.gmod_subway_em508.Buttons.Main.RezMKSet": "RMC: Emergency motor-compressor enabling", + "Entities.gmod_subway_em508.Buttons.Main.KU1Toggle": "MK: Turn motor-compressor on", + "Entities.gmod_subway_em508.Buttons.Main.VUD1Toggle": "VUD: Door control toggle (close doors)", + "Entities.gmod_subway_em508.Buttons.AV1.VU3Toggle": "VU3: Cabin lighting", + "Entities.gmod_subway_em508.Buttons.AV1.VU2Toggle": "VU2: Emergency lighting", + "Entities.gmod_subway_em508.Buttons.AV1.VU1Toggle": "VU1: Cabin heater", + "Entities.gmod_subway_em508.Buttons.Back1.!ULSPM": "UESPM (Emergency intercom)", + "Entities.gmod_subway_em508.Buttons.Back1.!TonalARS": "Ring", + "Entities.gmod_subway_em508.Buttons.Back1.!PressureRelay": "Pressure controller", + "Entities.gmod_subway_em508.Buttons.Back1.!Reproductor": "Speaker", + "Entities.gmod_subway_em508.Buttons.Back1.!LVFuses": "Shield with low-voltage fuses", + "Entities.gmod_subway_em508.Buttons.Back1.R_UNchToggle": "Announcer control", + "Entities.gmod_subway_em508.Buttons.Lamp.L_3Toggle": "Lamp: Gauges lighting", + "Entities.gmod_subway_em508.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle": "Train line disconnect valve", + "Entities.gmod_subway_em508.Buttons.VU.VUToggle": "VU: Train control", + "Entities.gmod_subway_em508.Buttons.PneumaticManometer.!LinesPressure": "Pressure in pneumatic lines (red: brake line, black: train line)", + "Entities.gmod_subway_em508.Buttons.Stopkran.EmergencyBrakeValveToggle": "Emergency brake", + "Entities.gmod_subway_em508.Buttons.LAMPS.SN": "Lamp: Overload relay light (overload relay open on current train)", + "Entities.gmod_subway_em508.Buttons.LAMPS.RedRP": "Lamp: Red overload relay light (power circuits failed to assemble)", + "Entities.gmod_subway_em508.Buttons.LAMPS.SD": "Lamp: SD door state light (doors are open)", + "Entities.gmod_subway_em508.Buttons.LAMPS.GreenRP": "Lamp: Green overload relay light", + "Entities.gmod_subway_em508.Buttons.LAMPS.UKS": "Speed control device UKS-20M", + "Entities.gmod_subway_em508.Buttons.LAMPS.Red": "Lamp: The heater is on", + "Entities.gmod_subway_em508.Buttons.LAMPS.AGS": "Lamp: AGS (Automatic Creast Greaser)", + "Entities.gmod_subway_em508.Buttons.UAVAPanel.UAVAToggle": "UAVA: Universal Automatic Autostop Disabler (disable autostop)", + "Entities.gmod_subway_em508.Buttons.UAVAPanel.UAVACToggle ": "UAVA: Universal Automatic Autostop Disabler(reset contacts)", + "Entities.gmod_subway_em508.Buttons.PneumaticPanels.!CylinderPressure": "Brake cylinder pressure", + "Entities.gmod_subway_em508.Buttons.Battery.VBToggle": "VB: Battery on/off", + "Entities.gmod_subway_em508.Buttons.Battery.R_RadioToggle": "Announcer power (+50V)", + "Entities.gmod_subway_em508.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_em508.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_em508.Buttons.ASNP.R_ASNPMenuSet": "Announcer: Menu", + "Entities.gmod_subway_em508.Buttons.ASNP.R_ASNPUpSet": "Announcer: Up", + "Entities.gmod_subway_em508.Buttons.ASNP.R_ASNPDownSet": "Announcer: Down", + "Entities.gmod_subway_em508.Buttons.ASNP.R_ASNPOnToggle": "Announcer: Turn on", + "Entities.gmod_subway_em508.Buttons.VU1.KRPSet": "RRP: Emergency start", + "Entities.gmod_subway_em508.Buttons.GV.GVToggle": "GV: HV switch", + "Entities.gmod_subway_em508.Buttons.IGLAButtons.IGLA1USet": "IGLA: First button up", + "Entities.gmod_subway_em508.Buttons.IGLAButtons.IGLA1Set": "IGLA: First button", + "Entities.gmod_subway_em508.Buttons.IGLAButtons.IGLA1DSet": "IGLA: First button down", + "Entities.gmod_subway_em508.Buttons.IGLAButtons.IGLA2USet": "IGLA: Second button up", + "Entities.gmod_subway_em508.Buttons.IGLAButtons.IGLA2Set": "IGLA: Second button", + "Entities.gmod_subway_em508.Buttons.IGLAButtons.IGLA2DSet": "IGLA: Second button down", + "Entities.gmod_subway_em508.Buttons.IGLAButtons.!IGLASR": "IGLA: SR", + "Entities.gmod_subway_em508.Buttons.IGLAButtons.!IGLARX": "IGLA: RX", + "Entities.gmod_subway_em508.Buttons.IGLAButtons.!IGLAErr": "IGLA: Malfunction", + "Entities.gmod_subway_em508.Buttons.IGLAButtons.!IGLAOSP": "IGLA: OSP(Fire extinguisher)", + "Entities.gmod_subway_em508.Buttons.IGLAButtons.!IGLAPI": "IGLA: PI(Fire indication)", + "Entities.gmod_subway_em508.Buttons.IGLAButtons.!IGLAOff": "IGLA: Off", + "Entities.gmod_subway_em508.Buttons.PassengerDoor.PassengerDoor": "Passenger door", + "Entities.gmod_subway_em508.Buttons.InfoTableSelect.PrevSign": "Previous sign", + "Entities.gmod_subway_em508.Buttons.InfoTableSelect.NextSign": "Next sign", + "Entities.gmod_subway_em508.Buttons.InfoTableSelect.Num2P": "Route: Increase 2nd number", + "Entities.gmod_subway_em508.Buttons.InfoTableSelect.Num2M": "Route: Decrease 2nd number", + "Entities.gmod_subway_em508.Buttons.InfoTableSelect.Num1P": "Route: Increase 1st number", + "Entities.gmod_subway_em508.Buttons.InfoTableSelect.Num1M": "Route: Decrease 1st number", + "Entities.gmod_subway_em508.Buttons.Front.FrontDoor": "Front door", + "Entities.gmod_subway_em508.Buttons.KRR.KRRSet": "KRR: Button of enabling reversers", + "Entities.gmod_subway_em508.Buttons.AGS.VUSToggle": "Switcher: Near Headlights(down)/Far Headlights (up)", + "Entities.gmod_subway_em508.Buttons.CabinDoor.CabinDoor": "Cabin door", + "Entities.gmod_subway_em508.Buttons.PassengerDoor1.PassengerDoor": "Passenger door", + "Entities.gmod_subway_em508.Buttons.ParkingBrake.ParkingBrakeLeft": "Parking brake", + "Entities.gmod_subway_em508.Buttons.ParkingBrake.ParkingBrakeRight": "Parking brake", + "Entities.gmod_subway_em508.Buttons.AVMain.AV8BToggle": "AV-8B: Circuit breaker (High voltage auxiliary circuits)", + "Entities.gmod_subway_em508.Buttons.Back3.!RTM": "Remote radio with dispatcher", + "Entities.gmod_subway_em508.Buttons.Back3.!ULSPMSpeaker": "Emergency intercom speaker block", + "Entities.gmod_subway_em508.Buttons.Back3.!Amplifier": "Amplifier unit of train station", + "Entities.gmod_subway_em508.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle": "Brake line disconnect valve", + "Entities.gmod_subway_em508.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Disable air distributor", + + + + "Entities.gmod_subway_em508_int.Buttons.Stopkran.EmergencyBrakeValveToggle": "Emergency brake", + "Entities.gmod_subway_em508_int.Buttons.Back.BackDoor": "Rear door", + "Entities.gmod_subway_em508_int.Buttons.HelperPanel.R_Program1Set": "Program 1", + "Entities.gmod_subway_em508_int.Buttons.HelperPanel.R_Program2Set": "Program 2", + "Entities.gmod_subway_em508_int.Buttons.HelperPanel.VDLSet": "VDL: Left doors open", + "Entities.gmod_subway_em508_int.Buttons.HelperPanel.VUD2Toggle": "VUD2: Door control toggle (close doors)", + "Entities.gmod_subway_em508_int.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle": "Brake line disconnect valve", + "Entities.gmod_subway_em508_int.Buttons.Battery.VBToggle": "AB: Battery on/off", + "Entities.gmod_subway_em508_int.Buttons.Battery.R_RadioToggle": "Announcer power (+50V)", + "Entities.gmod_subway_em508_int.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_em508_int.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_em508_int.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Disable air distributor", + "Entities.gmod_subway_em508_int.Buttons.PassengerDoor.PassengerDoor": "Passenger door", + "Entities.gmod_subway_em508_int.Buttons.VU1.KRPSet": "RRP: Emergency start", + "Entities.gmod_subway_em508_int.Buttons.UAVAPanel.UAVAToggle": "UAVA: Universal Automatic Autostop Disabler (disable autostop)", + "Entities.gmod_subway_em508_int.Buttons.UAVAPanel.UAVACToggle ": "UAVA: Universal Automatic Autostop Disabler(reset contacts)", + "Entities.gmod_subway_em508_int.Buttons.Front.FrontDoor": "Front door", + "Entities.gmod_subway_em508_int.Buttons.Tsepi.!BatteryVoltage": "Battery voltage", + "Entities.gmod_subway_em508_int.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_em508_int.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_em508_int.Buttons.InfoTableSelect.PrevSign": "Previous sign", + "Entities.gmod_subway_em508_int.Buttons.InfoTableSelect.NextSign": "Next sign", + "Entities.gmod_subway_em508_int.Buttons.InfoTableSelect.Num2P": "Route: Increase 2nd number", + "Entities.gmod_subway_em508_int.Buttons.InfoTableSelect.Num2M": "Route: Decrease 2nd number", + "Entities.gmod_subway_em508_int.Buttons.InfoTableSelect.Num1P": "Route: Increase 1st number", + "Entities.gmod_subway_em508_int.Buttons.InfoTableSelect.Num1M": "Route: Decrease 1st number", + "Entities.gmod_subway_em508_int.Buttons.Back2.!HVFuses": "HV fuses block", + "Entities.gmod_subway_em508_int.Buttons.Back2.!Relays": "The box with the devices for battery recharging and door pressure diffuser", + "Entities.gmod_subway_em508_int.Buttons.Back2.!Heater": "The heater", + "Entities.gmod_subway_em508_int.Buttons.Main.GreenRP": "Lamp: Green overload relay light", + "Entities.gmod_subway_em508_int.Buttons.Main.RedRP": "Lamp: Red overload relay light (power circuits failed to assemble)", + "Entities.gmod_subway_em508_int.Buttons.Main.SD": "Lamp: SD door state light (doors are open)", + "Entities.gmod_subway_em508_int.Buttons.Main.DIPonSet": "Switcher: Turn interior lights on", + "Entities.gmod_subway_em508_int.Buttons.Main.DIPoffSet": "Switcher: Turn interior lights off", + "Entities.gmod_subway_em508_int.Buttons.Main.VozvratRPSet": "VRP: Reset overload relay", + "Entities.gmod_subway_em508_int.Buttons.Main.KSNSet": "KSN: Forced activation of the RP on the faulty wagon (Malfunction signaling)", + "Entities.gmod_subway_em508_int.Buttons.Main.KRZDSet": "KRZD: Emergency door closing", + "Entities.gmod_subway_em508_int.Buttons.Main.KDPSet": "KDP: Right doors open", + "Entities.gmod_subway_em508_int.Buttons.Main.KDLSet": "KDL: Left doors open", + "Entities.gmod_subway_em508_int.Buttons.Main.KU1Toggle": "MK: Turn motor-compressor on", + "Entities.gmod_subway_em508_int.Buttons.Main.VUD1Toggle": "VUD: Door control toggle (close doors)", + "Entities.gmod_subway_em508_int.Buttons.AV1.VU3Toggle": "VU3: Cabin lighting", + "Entities.gmod_subway_em508_int.Buttons.AV1.VU2Toggle": "VU2: Emergency lighting", + "Entities.gmod_subway_em508_int.Buttons.AV1.VU1Toggle": "VU1: Cabin heater", + "Entities.gmod_subway_em508_int.Buttons.AVMain.AV8BToggle": "AV-8B: Circuit breaker (High voltage auxiliary circuits)", + "Entities.gmod_subway_em508_int.Buttons.CabinDoor.CabinDoor": "Cabin door", + "Entities.gmod_subway_em508_int.Buttons.Lamp.L_3Toggle": "Lamp: Gauges lighting", + "Entities.gmod_subway_em508_int.Buttons.PassengerDoor1.PassengerDoor": "Passenger door", + "Entities.gmod_subway_em508_int.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle": "Train line disconnect valve", + "Entities.gmod_subway_em508_int.Buttons.GV.GVToggle": "GV: HV switch", + "Entities.gmod_subway_em508_int.Buttons.VU.VUToggle": "VU: Train control", + "Entities.gmod_subway_em508_int.Buttons.PneumaticPanels.!CylinderPressure": "Brake cylinder pressure", + "Entities.gmod_subway_em508_int.Buttons.ParkingBrake.ParkingBrakeLeft": "Parking brake", + "Entities.gmod_subway_em508_int.Buttons.ParkingBrake.ParkingBrakeRight": "Parking brake", + "Entities.gmod_subway_em508_int.Buttons.PneumaticManometer.!LinesPressure": "Pressure in pneumatic lines (red: brake line, black: train line)" +} +]] diff --git a/lua/metrostroi_data/languages_/en_buttons_ezh.lua b/lua/metrostroi_data/languages_/en_buttons_ezh.lua new file mode 100644 index 0000000..2e9d0ac --- /dev/null +++ b/lua/metrostroi_data/languages_/en_buttons_ezh.lua @@ -0,0 +1,148 @@ +return [[ +{ + "Lang": "en", + "Name": "English", + + "Entities.gmod_subway_ezh.Buttons.HelperPanel.VDLSet": "VDL: Left doors open", + "Entities.gmod_subway_ezh.Buttons.HelperPanel.VUD2Toggle": "VUD2: Door control toggle (close doors)", + "Entities.gmod_subway_ezh.Buttons.Meters.!TotalVoltmeter": "HV voltmeter (kV)", + "Entities.gmod_subway_ezh.Buttons.Meters.!TotalAmpermeter": "Total ampermeter (A)", + "Entities.gmod_subway_ezh.Buttons.AV2.R_RadioToggle": "+50V: Announcer, RRI block ", + "Entities.gmod_subway_ezh.Buttons.AV2.RSTToggle": "RST: Radiostation", + "Entities.gmod_subway_ezh.Buttons.AV2.UOSToggle": "UOS: Speed limitation tumbler", + "Entities.gmod_subway_ezh.Buttons.AB1.AB1Set": "Switch ARS unit to AB mode(drivers button)", + "Entities.gmod_subway_ezh.Buttons.KAH.KAHToggle": "TAH: Emergency Drive Mode", + "Entities.gmod_subway_ezh.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_ezh.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_ezh.Buttons.AVU.AVULight": "Lamp: AVU is turned on (Automatic control disabler)", + "Entities.gmod_subway_ezh.Buttons.AVU.OtklAVUToggle": "Turn off automatic control disable relay (failure of AVU)", + "Entities.gmod_subway_ezh.Buttons.Main.DIPonSet": "Turn interior lights on", + "Entities.gmod_subway_ezh.Buttons.Main.DIPoffSet": "Turn interior lights off (Ring)", + "Entities.gmod_subway_ezh.Buttons.Main.KDPSet": "KDP: Right doors open", + "Entities.gmod_subway_ezh.Buttons.Main.KDLSet": "KDL: Left doors open", + "Entities.gmod_subway_ezh.Buttons.Main.DoorSelectToggle": "Select doors side", + "Entities.gmod_subway_ezh.Buttons.Main.KVTSet": "KVT: Brake reception button (ARS Cancel)", + "Entities.gmod_subway_ezh.Buttons.Main.VUSToggle": "Switcher: Near Headlights(down)/Far Headlights (up)", + "Entities.gmod_subway_ezh.Buttons.Main.ALSToggle": "Switcher: ALS", + "Entities.gmod_subway_ezh.Buttons.Main.ALSFreqToggle": "Switch: Decoder (Down - ARS 2/6, up - ARS 1/5)", + "Entities.gmod_subway_ezh.Buttons.Main.ARSToggle": "Switcher: Automatic speed regulation", + "Entities.gmod_subway_ezh.Buttons.Main.KU1Toggle": "Turn motor-compressor on", + "Entities.gmod_subway_ezh.Buttons.Main.KSNSet": "SN: Failure indication button", + "Entities.gmod_subway_ezh.Buttons.Main.VozvratRPSet": "KU9: Reset overload relay", + "Entities.gmod_subway_ezh.Buttons.Main.R_Program1Set": "Announcer: Program 1", + "Entities.gmod_subway_ezh.Buttons.Main.VUD1Toggle": "VUD: Door control toggle (close doors)", + "Entities.gmod_subway_ezh.Buttons.Main.KRZDSet": "KRZD: Emergency door closing", + "Entities.gmod_subway_ezh.Buttons.AV1.VU3Toggle": "VU3: Cabin lighting", + "Entities.gmod_subway_ezh.Buttons.AV1.VU2Toggle": "VU2: Emergency lighting (45V)", + "Entities.gmod_subway_ezh.Buttons.AV1.VU1Toggle": "VU1: Cabin heater (3kWt)", + "Entities.gmod_subway_ezh.Buttons.Back1.!RignARS": "ARS tonal device", + "Entities.gmod_subway_ezh.Buttons.Back1.!USPM": "UESPM (Emergency intercom)", + "Entities.gmod_subway_ezh.Buttons.Back1.!AK": "Pressure controller", + "Entities.gmod_subway_ezh.Buttons.Back1.!LVP": "Shield with low-voltage fuses", + "Entities.gmod_subway_ezh.Buttons.RC1.RC1Toggle": "RCR: ARS Circuit Breaker", + "Entities.gmod_subway_ezh.Buttons.Lamp.L_3Toggle": "Lamp: Gauges lighting", + "Entities.gmod_subway_ezh.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle": "Train line disconnect valve", + "Entities.gmod_subway_ezh.Buttons.VU.VUToggle": "VU: Train control", + "Entities.gmod_subway_ezh.Buttons.VU.RezMKSet": "KU15: Motor Compressor emergency toggle", + "Entities.gmod_subway_ezh.Buttons.VU.KRPSet": "Emergency start", + "Entities.gmod_subway_ezh.Buttons.FrontDoor.FrontDoor": "Front door", + "Entities.gmod_subway_ezh.Buttons.AB2.AB2Set": "Switch ARS unit to AB mode(helpers button)", + "Entities.gmod_subway_ezh.Buttons.PneumaticManometer.!LinesPressure": "Pressure in pneumatic lines (red: brake line, black: train line)", + "Entities.gmod_subway_ezh.Buttons.Stopkran.EmergencyBrakeValveToggle": "Emergency brake", + "Entities.gmod_subway_ezh.Buttons.UAVAPanel.UAVAToggle": "UAVA: Universal Automatic Autostop Disabler (disable autostop)", + "Entities.gmod_subway_ezh.Buttons.UAVAPanel.UAVACToggle ": "UAVA: Universal Automatic Autostop Disabler(reset contacts)", + "Entities.gmod_subway_ezh.Buttons.PneumaticPanels.!BrakeCylinder": "Brake manometer: Brake cylinder pressure", + "Entities.gmod_subway_ezh.Buttons.Battery.VBToggle": "AB: Battery on/off", + "Entities.gmod_subway_ezh.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_ezh.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPMenuSet": "Announcer: Menu", + "Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPUpSet": "Announcer: Up", + "Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPDownSet": "Announcer: Down", + "Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPOnToggle": "Announcer: Turn on", + "Entities.gmod_subway_ezh.Buttons.Tsepi.!BatteryVoltage": "Battery voltage", + "Entities.gmod_subway_ezh.Buttons.PassengerDoor1.PassengerDoor": "Passenger door", + "Entities.gmod_subway_ezh.Buttons.PassengerDoor.PassengerDoor": "Passenger door", + "Entities.gmod_subway_ezh.Buttons.GV.GVToggle": "GV: HV switch", + "Entities.gmod_subway_ezh.Buttons.LampsALS.!L80": "Speed limit 80 kph", + "Entities.gmod_subway_ezh.Buttons.LampsALS.!L70": "Speed limit 70 kph", + "Entities.gmod_subway_ezh.Buttons.LampsALS.!L60": "Speed limit 60 kph", + "Entities.gmod_subway_ezh.Buttons.LampsALS.!L40": "Speed limit 40 kph", + "Entities.gmod_subway_ezh.Buttons.LampsALS.!L0": "0: Speed limit 0 kph", + "Entities.gmod_subway_ezh.Buttons.LampsALS.!LNF": "OCh: No ARS frequency", + "Entities.gmod_subway_ezh.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle": "Brake line disconnect valve", + "Entities.gmod_subway_ezh.Buttons.CabinDoor.CabinDoor": "Cabin door", + "Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1USet": "IGLA: First button up", + "Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1Set": "IGLA: First button", + "Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1DSet": "IGLA: First button down", + "Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2USet": "IGLA: Second button up", + "Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2Set": "IGLA: Second button", + "Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2DSet": "IGLA: Second button down", + "Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLASR": "IGLA: SR", + "Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLARX": "IGLA: SR", + "Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAErr": "IGLA: Malfunction", + "Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAOSP": "IGLA: OSP(Fire extinguisher)", + "Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAPI": "IGLA: PI(Fire indication)", + "Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAOff": "IGLA: Off", + "Entities.gmod_subway_ezh.Buttons.Lamps.!RedRP": "RP: Red overload relay light (power circuits failed to assemble)", + "Entities.gmod_subway_ezh.Buttons.Lamps.!LPU": "Sequence (Verifying the inclusion of machines in the run and braking mode when there is no high voltage)", + "Entities.gmod_subway_ezh.Buttons.Lamps.!VD": "VD: Engines engaged (indicates the presence of voltage on the 1 train wire)", + "Entities.gmod_subway_ezh.Buttons.Lamps.!KT": "KT: Brake control (efficient brakes)", + "Entities.gmod_subway_ezh.Buttons.Lamps.!AB": "AB: Work in auto-lock mode (ARS is disabled)", + "Entities.gmod_subway_ezh.Buttons.Lamps.!Doors": "Doors: door state light (doors are open)", + "Entities.gmod_subway_ezh.Buttons.Lamps.!LN": "LN: Direction signal", + "Entities.gmod_subway_ezh.Buttons.Lamps.!Sbor": "Lamp SBOR: Failure indicator light (power circuits failed to assemble)", + "Entities.gmod_subway_ezh.Buttons.EPKDisconnect.EPKToggle": "EPK disconnect valve", + "Entities.gmod_subway_ezh.Buttons.AVMain.AV8BToggle": "AV-8B: Circuit breaker (High voltage auxiliary circuits)", + "Entities.gmod_subway_ezh.Buttons.KRR.KRRToggle": "KRR: Button of enabling reversers", + "Entities.gmod_subway_ezh.Buttons.ParkingBrake.ParkingBrakeLeft": "Parking brake", + "Entities.gmod_subway_ezh.Buttons.ParkingBrake.ParkingBrakeRight": "Parking brake", + "Entities.gmod_subway_ezh.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Disable air distributor", + + + + "Entities.gmod_subway_ezh1.Buttons.Stopkran.EmergencyBrakeValveToggle": "Emergency brake", + "Entities.gmod_subway_ezh1.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle": "Brake line disconnect valve", + "Entities.gmod_subway_ezh1.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle": "Train line disconnect valve", + "Entities.gmod_subway_ezh1.Buttons.PneumaticPanels.!CylinderPressure": "Brake manometer: Brake cylinder pressure", + "Entities.gmod_subway_ezh1.Buttons.Battery.VBToggle": "AB: Battery on/off", + "Entities.gmod_subway_ezh1.Buttons.Meters.!TotalVoltmerer": "HV voltmeter (kV)", + "Entities.gmod_subway_ezh1.Buttons.Meters.!TotalAmpermeter": "Total ampermeter (A)", + "Entities.gmod_subway_ezh1.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_ezh1.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_ezh1.Buttons.RearDoor.RearDoor": "Passenger door", + "Entities.gmod_subway_ezh1.Buttons.Tsepi.!BatteryVoltage": "Battery voltage", + "Entities.gmod_subway_ezh1.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_ezh1.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_ezh1.Buttons.PassengerDoor.PassengerDoor": "Passenger door", + "Entities.gmod_subway_ezh1.Buttons.Back2.!HVFuses": "HV fuses block", + "Entities.gmod_subway_ezh1.Buttons.Back2.!Relays": "The box with the devices for battery recharging and door pressure diffuser", + "Entities.gmod_subway_ezh1.Buttons.Back2.!Heater": "The heater", + "Entities.gmod_subway_ezh1.Buttons.Main.RedRP": "RP: Red overload relay light (power circuits failed to assemble)", + "Entities.gmod_subway_ezh1.Buttons.Main.GreenRP": "RP: Green overload relay light (overload relay open on current train)", + "Entities.gmod_subway_ezh1.Buttons.Main.SD": "Blue door state light (doors are closed)", + "Entities.gmod_subway_ezh1.Buttons.Main.DIPonSet": "KU4: Turn interior lights on", + "Entities.gmod_subway_ezh1.Buttons.Main.DIPoffSet": "KU5: Turn interior lights off", + "Entities.gmod_subway_ezh1.Buttons.Main.VozvratRPSet": "Switcher: Reset overload relay", + "Entities.gmod_subway_ezh1.Buttons.Main.KSNSet": "Turn motor-compressor on", + "Entities.gmod_subway_ezh1.Buttons.Main.KDPSet": "KDP: Open right doors", + "Entities.gmod_subway_ezh1.Buttons.Main.KRZDSet": "KRZD: Emergency door closing", + "Entities.gmod_subway_ezh1.Buttons.Main.KDLSet": "KU12: Open left doors", + "Entities.gmod_subway_ezh1.Buttons.Main.KU1Toggle": "Switcher: Turn motor-compressor on", + "Entities.gmod_subway_ezh1.Buttons.Main.VUD1Toggle": "Switcher: Doors control toggle (close doors)", + "Entities.gmod_subway_ezh1.Buttons.AV1.VU3Toggle": "VU3: Cabin lighting", + "Entities.gmod_subway_ezh1.Buttons.AV1.VU2Toggle": "VU2: Emergency lighting (45V)", + "Entities.gmod_subway_ezh1.Buttons.AV1.VU1Toggle": "VU1: Cabin heater (3kWt)", + "Entities.gmod_subway_ezh1.Buttons.AVMain.AV8BToggle": "AV-8B: Circuit breaker (High voltage auxiliary circuits)", + "Entities.gmod_subway_ezh1.Buttons.CabinDoor.CabinDoor1": "Cabin door", + "Entities.gmod_subway_ezh1.Buttons.Front.FrontDoor": "Front door", + "Entities.gmod_subway_ezh1.Buttons.PassengerDoor1.PassengerDoor": "Passenger door", + "Entities.gmod_subway_ezh1.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Disable air distributor", + "Entities.gmod_subway_ezh1.Buttons.GV.GVToggle": "GV: HV switch", + "Entities.gmod_subway_ezh1.Buttons.VU.VUToggle": "VU: Enable train-control", + "Entities.gmod_subway_ezh1.Buttons.HelperPanel.VUD2Toggle": "VUD2: Door control toggle (close doors)", + "Entities.gmod_subway_ezh1.Buttons.HelperPanel.VDLSet": "VDL: Open left doors", + "Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeLeft": "Parking brake", + "Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeRight": "Parking brake", + "Entities.gmod_subway_ezh1.Buttons.PneumaticManometer.!LinesPressure": "Pressure in pneumatic lines (red: brake line, black: train line)" +} +]] diff --git a/lua/metrostroi_data/languages_/en_buttons_ezh3.lua b/lua/metrostroi_data/languages_/en_buttons_ezh3.lua new file mode 100644 index 0000000..ff59a55 --- /dev/null +++ b/lua/metrostroi_data/languages_/en_buttons_ezh3.lua @@ -0,0 +1,158 @@ +return [[ +{ + "Lang": "en", + "Name": "English", + + + "Entities.gmod_subway_ezh3.Buttons.Stopkran.EmergencyBrakeValveToggle": "Emergency brake", + "Entities.gmod_subway_ezh3.Buttons.Back.BackDoor": "Back door", + "Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle": "Brake line disconnect valve", + "Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle": "Train line disconnect valve", + "Entities.gmod_subway_ezh3.Buttons.Battery.VBToggle": "VB: Battery on/off (low voltage)", + "Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Brake line isolation valve", + "Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Train line isolation valve", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPMenuSet": "Announcer: Menu", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPUpSet": "Announcer: Up", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPDownSet": "Announcer: Down", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPOnToggle": "Announcer: Turn on", + "Entities.gmod_subway_ezh3.Buttons.PassengerDoor1.PassengerDoor": "Passenger door", + "Entities.gmod_subway_ezh3.Buttons.PassengerDoor.PassengerDoor": "Passenger door", + "Entities.gmod_subway_ezh3.Buttons.CabinDoor.CabinDoor": "Cabin door", + "Entities.gmod_subway_ezh3.Buttons.Front.FrontDoor": "Front door", + "Entities.gmod_subway_ezh3.Buttons.GV.GVToggle": "HV switch", + "Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Train line disconnect valve", + "Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Brake line disconnect valve", + "Entities.gmod_subway_ezh3.Buttons.Panel.!OCH": "NCh: No ARS frequency", + "Entities.gmod_subway_ezh3.Buttons.Panel.!0": "0: ARS stop signal", + "Entities.gmod_subway_ezh3.Buttons.Panel.!40": "Speed limit 40 kph", + "Entities.gmod_subway_ezh3.Buttons.Panel.!60": "Speed limit 60 kph", + "Entities.gmod_subway_ezh3.Buttons.Panel.!70": "Speed limit 70 kph", + "Entities.gmod_subway_ezh3.Buttons.Panel.!80": "Speed limit 80 kph", + "Entities.gmod_subway_ezh3.Buttons.Panel.!Speedometer": "Speedometer (km/h)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!TotalAmpermeter": "Total engines ampermeter (A)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!TotalVoltmeter": "Total voltmeter (kV)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!BatteryVoltage": "Battery voltage of train control(V)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!BrakeCylinder": "Brake cylinder pressure", + "Entities.gmod_subway_ezh3.Buttons.Panel.!LinesPressure": "Pressure in pneumatic lines (red: brake line, black: train line)", + "Entities.gmod_subway_ezh3.Buttons.Main.KU1Toggle": "Turn motor-compressor on", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMM1Set": "SAMM: Turning off drive", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMM2Set": "SAMM: Start", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMM3Set": "SAMM: Reset", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal1": "Lamp: Drive-Brake", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal2": "Lamp: Working state SAMM", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal3": "Lamp: Enabled SAMM execution unit", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMOnToggle": "SAMM: Turn autodrive on", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMBlokToggle": "SAMM: Execution unit", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMCommand3Set": "SAMM: X-2", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMCommand2Set": "SAMM: Catch Up", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMCommand1Set": "SAMM: Permission", + "Entities.gmod_subway_ezh3.Buttons.Main.KSNSet": "KSN: Failure indication button", + "Entities.gmod_subway_ezh3.Buttons.Main.R_Program1Set": "Program 1", + "Entities.gmod_subway_ezh3.Buttons.Main.R_Program2Set": "Program 2", + "Entities.gmod_subway_ezh3.Buttons.Main.VUSToggle": "Switch: Near Headlights(down)/Far Headlights (up)", + "Entities.gmod_subway_ezh3.Buttons.Main.L_3Toggle": "Switch: Gauges lighting", + "Entities.gmod_subway_ezh3.Buttons.Main.VAHToggle": "Switch: Emergency Run", + "Entities.gmod_subway_ezh3.Buttons.Main.DIPonSet": "Osv. Vkl.: Turn on lighting", + "Entities.gmod_subway_ezh3.Buttons.Main.DIPoffSet": "Osv. Vykl.: Turn off lighting", + "Entities.gmod_subway_ezh3.Buttons.Main.KSDSet": "KSD: Doors signalization check", + "Entities.gmod_subway_ezh3.Buttons.Main.KVTSet": "KVT: Brake perception button", + "Entities.gmod_subway_ezh3.Buttons.Main.KBSet": "KB: Attention button", + "Entities.gmod_subway_ezh3.Buttons.Main.KBLamp": "Lamp: RK spinning", + "Entities.gmod_subway_ezh3.Buttons.Main.ARSToggle": "ARS: Automatic speed regulation", + "Entities.gmod_subway_ezh3.Buttons.Main.R_UNchToggle": "UNCh: Low frequency amplifier", + "Entities.gmod_subway_ezh3.Buttons.Main.VUD1Toggle": "VUD: Door control toggle (close doors)", + "Entities.gmod_subway_ezh3.Buttons.Main.R_RadioToggle": "Radioinformator: Announcer (built-in)", + "Entities.gmod_subway_ezh3.Buttons.Main.ALSToggle": "ALS: Automatic locomotive signalling", + "Entities.gmod_subway_ezh3.Buttons.Main.VozvratRPSet": "KVRP: Reset overload relay", + "Entities.gmod_subway_ezh3.Buttons.Main.RingSet": "Ring", + "Entities.gmod_subway_ezh3.Buttons.Main.L_2Toggle": "Switch: Cabin lighting", + "Entities.gmod_subway_ezh3.Buttons.Main.KRZDSet": "KRZD: Emergency door closing", + "Entities.gmod_subway_ezh3.Buttons.Main.KDPSet": "KDP: Open right doors", + "Entities.gmod_subway_ezh3.Buttons.Main.KDLSet": "KDL: Open left doors", + "Entities.gmod_subway_ezh3.Buttons.Main.KAHSet": "KAH: Emergency drive button", + "Entities.gmod_subway_ezh3.Buttons.Main.RezMKSet": "Emergency motor-compressor startup", + "Entities.gmod_subway_ezh3.Buttons.Main.KRPSet": "KRP: Emergency start button", + "Entities.gmod_subway_ezh3.Buttons.Main.RSTToggle": "VPR: Radiostation enable", + "Entities.gmod_subway_ezh3.Buttons.Main.R_GToggle": "Loudspeaker: Sound in cabin enable", + "Entities.gmod_subway_ezh3.Buttons.Main.Custom2Set": "Unused switch", + "Entities.gmod_subway_ezh3.Buttons.Main.Custom3Set": "Unused switch", + "Entities.gmod_subway_ezh3.Buttons.Main.ASNPPlay": "Announcer work indicator", + "Entities.gmod_subway_ezh3.Buttons.AV1.VU3Toggle": "VU3: Cabin light", + "Entities.gmod_subway_ezh3.Buttons.AV1.VU2Toggle": "VU2: Emergency lighting (45V)", + "Entities.gmod_subway_ezh3.Buttons.AV1.VU1Toggle": "VU1: Cabin heater (3kWt)", + "Entities.gmod_subway_ezh3.Buttons.AVMain.AV8BToggle": "AV-8B: Automatic switch (High voltage)", + "Entities.gmod_subway_ezh3.Buttons.RC1.RC1Toggle": "RC-ARS: ARS Circuit Breaker", + "Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAToggle": "UAVA: Universal Automatic Autostop Disabler (disable autostop)", + "Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVACToggle ": "UAVA: Universal Automatic Autostop Disabler(reset contacts)", + "Entities.gmod_subway_ezh3.Buttons.VUHelper.VUToggle": "VU: Enable train-control", + "Entities.gmod_subway_ezh3.Buttons.HelperPanel.VDLSet": "KDL: Open left doors", + "Entities.gmod_subway_ezh3.Buttons.HelperPanel.VUD2Toggle": "VUD2: Door control toggle (close doors)", + "Entities.gmod_subway_ezh3.Buttons.EPKDisconnect.EPKToggle": "EPK disconnect valve", + "Entities.gmod_subway_ezh3.Buttons.VU.VUToggle": "VU: Enable train-control", + "Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeLeft": "Parking brake wheel", + "Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeRight": "Parking brake wheel", + "Entities.gmod_subway_ezh3.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Disable air distributor", + + "Entities.gmod_subway_em508t.Buttons.Stopkran.EmergencyBrakeValveToggle": "Emergency brake", + "Entities.gmod_subway_em508t.Buttons.Battery.VBToggle": "VB: Battery on/off (low voltage)", + "Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Brake line disconnect valve", + "Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Train line disconnect valve", + "Entities.gmod_subway_em508t.Buttons.GV.GVToggle": "HV switch", + "Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Train line disconnect valve", + "Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Brake line disconnect valve", + "Entities.gmod_subway_em508t.Buttons.RearDoor.RearDoor": "Passenger door", + "Entities.gmod_subway_em508t.Buttons.Back2.!HVFuse": "HV fuses block", + "Entities.gmod_subway_em508t.Buttons.Back2.!Relays": "The box with the devices for battery recharging and door pressure diffuser", + "Entities.gmod_subway_em508t.Buttons.Back2.!Heater": "The heater", + "Entities.gmod_subway_em508t.Buttons.Front.FrontDoor": "Front door", + "Entities.gmod_subway_em508t.Buttons.AV1.VU3Toggle": "VU3: Cabin light", + "Entities.gmod_subway_em508t.Buttons.AV1.VU2Toggle": "VU2: Emergency lighting (45V)", + "Entities.gmod_subway_em508t.Buttons.AV1.VU1Toggle": "VU1: Cabin heater (3kWt)", + "Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeLeft": "Parking brake wheel", + "Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeRight": "Parking brake wheel", + "Entities.gmod_subway_em508t.Buttons.CabinDoor.CabinDoor1": "Cabin door", + "Entities.gmod_subway_em508t.Buttons.PassengerDoor.PassengerDoor": "Passenger door", + "Entities.gmod_subway_em508t.Buttons.PassengerDoor1.PassengerDoor": "Passenger door", + "Entities.gmod_subway_em508t.Buttons.Main.!RedRP": "RP: Red overload relay light (power circuits failed to assemble)", + "Entities.gmod_subway_em508t.Buttons.Main.!GreenRP": "RP: Green overload relay light (prevents overcurrent of engines)", + "Entities.gmod_subway_em508t.Buttons.Main.!SD": "Blue door state light (doors are closed)", + "Entities.gmod_subway_em508t.Buttons.Main.KDLSet": "Switch: Open left doors", + "Entities.gmod_subway_em508t.Buttons.Main.KSDSet": "Switch: Signalization (Doors control check)", + "Entities.gmod_subway_em508t.Buttons.Main.VozvratRPSet": "Switch: Reset overload relay", + "Entities.gmod_subway_em508t.Buttons.Main.KSNSet": "Switch: Failure indication switch", + "Entities.gmod_subway_em508t.Buttons.Main.VUD1Toggle": "Switch: Doors control toggle (close doors)", + "Entities.gmod_subway_em508t.Buttons.Main.KU1Toggle": "Switch: Compressor turn on", + "Entities.gmod_subway_em508t.Buttons.Main.DIPonSet": "KU4: Turn interior lights on", + "Entities.gmod_subway_em508t.Buttons.Main.DIPoffSet": "KU5: Turn interior lights off", + "Entities.gmod_subway_em508t.Buttons.Main.RezMKSet": "Switch: Emergency motor-compressor startup", + "Entities.gmod_subway_em508t.Buttons.Main.KDPSet": "KDP: Open right doors", + "Entities.gmod_subway_em508t.Buttons.Main.KRZDSet": "KU10: Emergency door closing", + "Entities.gmod_subway_em508t.Buttons.AVMain.AV8BToggle": "AV-8B: Automatic switch (High voltage)", + "Entities.gmod_subway_em508t.Buttons.VU.VUToggle": "VU: Enable train-control", + "Entities.gmod_subway_em508t.Buttons.VU.!Voltage": "Control circuits voltage", + "Entities.gmod_subway_em508t.Buttons.HelperPanel.VUD2Toggle": "VUD2: Door control toggle (close doors)", + "Entities.gmod_subway_em508t.Buttons.HelperPanel.VDLSet": "VDL: Open left doors", + "Entities.gmod_subway_em508t.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle": "Brake line disconnect valve", + "Entities.gmod_subway_em508t.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle": "Train line disconnect valve", + "Entities.gmod_subway_em508t.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Disable air distributor", + + + "Entities.gmod_subway_ezh3.Buttons.Main.Custom1Toggle": "Unused switch", + "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1USet": "IGLA: First button up", + "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1Set": "IGLA: First button", + "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1DSet": "IGLA: First button down", + "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2USet": "IGLA: Second button up", + "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2Set": "IGLA: Second button", + "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2DSet": "IGLA: Second button down", + "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLASR": "IGLA: SR", + "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLARX": "IGLA: RX", + "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAErr": "IGLA: Malfunction", + "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAOSP": "IGLA: OSP(Fire extinguisher)", + "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAPI": "IGLA: PI(Fire indication)", + "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAOff": "IGLA: Off", + + "Entities.gmod_subway_ezh3.Buttons.Back2.!HVHuse": "HV fuses block", + "Entities.gmod_subway_ezh3.Buttons.Back2.!AKBCharge": "The box with the devices for battery recharging and door pressure diffuser", + "Entities.gmod_subway_ezh3.Buttons.Back2.!Heater": "The heater" +} +]] diff --git a/lua/metrostroi_data/languages_/en_spawner.lua b/lua/metrostroi_data/languages_/en_spawner.lua new file mode 100644 index 0000000..1257ac9 --- /dev/null +++ b/lua/metrostroi_data/languages_/en_spawner.lua @@ -0,0 +1,223 @@ +return [[ +{ + "Lang": "en", + "Name": "English", + + "Spawner.Title": "Train spawner", + "Spawner.Trains1": "Trains", + "Spawner.Trains2": "Max for you", + "Spawner.WagNum": "Wagons", + "Spawner.AutoCouple": "Automatically couple wagons", + + "Entities.gmod_subway_81-717_mvm.Spawner.Texture.Name": "Skin", + "Entities.gmod_subway_81-717_mvm.Spawner.PassTexture.Name": "Interior texture", + "Entities.gmod_subway_81-717_mvm.Spawner.CabTexture.Name": "Cabin texture", + "Entities.gmod_subway_81-717_mvm.Spawner.Announcer.Name": "Announcer", + "Entities.gmod_subway_81-717_mvm.Spawner.Lighter.Name": "Lighter", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.Name": "ARS panel type", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.1": "Standard(square lamps)", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.2": "Standard(round lamps)", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.3": "Kiev/SPB", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.4": "Old ARS", + "Entities.gmod_subway_81-717_mvm.Spawner.Cran.Name": "Brake lever type", + "Entities.gmod_subway_81-717_mvm.Spawner.Cran.1": "334", + "Entities.gmod_subway_81-717_mvm.Spawner.Cran.2": "013", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.Name": "Mask type", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.1": "2-2", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.2": "2-2-2", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.3": "1-4-1 bumper 1", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.4": "1-4-1 bumper 2", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.5": "1-1", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.6": "Retro", + "Entities.gmod_subway_81-717_mvm.Spawner.LED.Name": "LED", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.Name": "BPSN type", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.1": "Old sound high tone", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.2": "Old sound medium tone", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.3": "Standard(from SPB)", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.4": "Standard(TKL)", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.5": "Standard", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.6": "Kiev", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.7": "Old", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.8": "Standard 2", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.9": "Standard 3", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.10": "No sound(BPN-115)", + "Entities.gmod_subway_81-717_mvm.Spawner.NewKV.Name": "New contoller model", + "Entities.gmod_subway_81-717_mvm.Spawner.HornType.Name": "SPB horn", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.Name": "Ring sound", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.1": "Old", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.2": "Standard with low tone", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.3": "Standard with high tone", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.4": "Standard intermittent with low tone", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.5": "Standard intermittent with high tone", + "Entities.gmod_subway_81-717_mvm.Spawner.NM.Name": "Train line pressure", + "Entities.gmod_subway_81-717_mvm.Spawner.Battery.Name": "Battery", + "Entities.gmod_subway_81-717_mvm.Spawner.Switches.Name": "Circuit breakers on", + "Entities.gmod_subway_81-717_mvm.Spawner.SwitchesR.Name": "Random circuit breakers", + "Entities.gmod_subway_81-717_mvm.Spawner.DoorsL.Name": "Open left doors", + "Entities.gmod_subway_81-717_mvm.Spawner.DoorsR.Name": "Open right doors", + "Entities.gmod_subway_81-717_mvm.Spawner.GV.Name": "HV switch", + "Entities.gmod_subway_81-717_mvm.Spawner.PB.Name": "Parking brake", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.Name": "Board lamps type", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.1": "Horizontal", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.2": "Vertical", + "Entities.gmod_subway_81-717_mvm.Spawner.MVM.Name": "MVM sign", + "Entities.gmod_subway_81-717_mvm.Spawner.HandRail.Name": "Handrails type", + "Entities.gmod_subway_81-717_mvm.Spawner.HandRail.1": "Old", + "Entities.gmod_subway_81-717_mvm.Spawner.HandRail.2": "New", + "Entities.gmod_subway_81-717_mvm.Spawner.SeatType.Name": "Seats type", + "Entities.gmod_subway_81-717_mvm.Spawner.SeatType.1": "Old", + "Entities.gmod_subway_81-717_mvm.Spawner.SeatType.2": "New", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.Name": "Lamps type", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.1": "Type 1", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.2": "Type 2", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.3": "Type 3", + "Entities.gmod_subway_81-717_mvm.Spawner.Breakers.Name": "Right side circuit breakers", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.Name": "Adverts type", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.1": "Type 1", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.2": "Type 2", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.3": "Type 3", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.4": "No adverts", + + "Entities.gmod_subway_81-720.Spawner.Texture.Name": "Skin", + "Entities.gmod_subway_81-720.Spawner.PassTexture.Name": "Interior texture", + "Entities.gmod_subway_81-720.Spawner.CabTexture.Name": "Cabin texture", + "Entities.gmod_subway_81-720.Spawner.Announcer.Name": "Announcer", + "Entities.gmod_subway_81-720.Spawner.Scheme.Name": "Line scheme", + "Entities.gmod_subway_81-720.Spawner.PassSchemesInvert.Name": "Invert scheme", + "Entities.gmod_subway_81-720.Spawner.NM.Name": "Train line pressure", + "Entities.gmod_subway_81-720.Spawner.Battery.Name": "Battery", + "Entities.gmod_subway_81-720.Spawner.BRU.Name": "HV switch", + "Entities.gmod_subway_81-720.Spawner.PVZR.Name": "Random train protection panel circuit breakers", + "Entities.gmod_subway_81-720.Spawner.PPZ.Name": "Enable all train circuit breakers", + "Entities.gmod_subway_81-720.Spawner.PPZDepot.Name": "Disable circuit breakers like in depot", + "Entities.gmod_subway_81-720.Spawner.PPZR.Name": "Random wagon protection panel circuit breakers", + "Entities.gmod_subway_81-720.Spawner.DoorsL.Name": "Open left doors", + "Entities.gmod_subway_81-720.Spawner.DoorsR.Name": "Open right doors", + + "Entities.gmod_subway_81-722.Spawner.Texture.Name": "Skin", + "Entities.gmod_subway_81-722.Spawner.PassTexture.Name": "Interior texture", + "Entities.gmod_subway_81-722.Spawner.CabTexture.Name": "Cabin texture", + "Entities.gmod_subway_81-722.Spawner.Announcer.Name": "Announcer", + "Entities.gmod_subway_81-722.Spawner.Scheme.Name": "Line scheme", + "Entities.gmod_subway_81-722.Spawner.SarmatInvert.Name": "Invert scheme", + "Entities.gmod_subway_81-722.Spawner.NM.Name": "Train line pressure", + "Entities.gmod_subway_81-722.Spawner.Battery.Name": "Battery", + "Entities.gmod_subway_81-722.Spawner.Switches.Name": "Enable all train circuit breakers", + "Entities.gmod_subway_81-722.Spawner.SwitchesR.Name": "Random circuit breakers", + "Entities.gmod_subway_81-722.Spawner.DoorsL.Name": "Open left doors", + "Entities.gmod_subway_81-722.Spawner.DoorsR.Name": "Open right doors", + + "Entities.gmod_subway_ezh.Spawner.Texture.Name": "Skin", + "Entities.gmod_subway_ezh.Spawner.PassTexture.Name": "Interior texture", + "Entities.gmod_subway_ezh.Spawner.CabTexture.Name": "Cabin texture", + "Entities.gmod_subway_ezh.Spawner.Announcer.Name": "Announcer", + "Entities.gmod_subway_ezh.Spawner.HornType.Name": "SPB horn", + "Entities.gmod_subway_ezh.Spawner.NM.Name": "Train line pressure", + "Entities.gmod_subway_ezh.Spawner.Battery.Name": "Turn on battery", + "Entities.gmod_subway_ezh.Spawner.AV8B.Name": "Enable AV8B", + "Entities.gmod_subway_ezh.Spawner.DoorsL.Name": "Open left doors", + "Entities.gmod_subway_ezh.Spawner.DoorsR.Name": "Open right doors", + "Entities.gmod_subway_ezh.Spawner.GV.Name": "Enable HV switch", + + "Entities.gmod_subway_em508.Spawner.Texture.Name": "Skin", + "Entities.gmod_subway_em508.Spawner.PassTexture.Name": "Interior texture", + "Entities.gmod_subway_em508.Spawner.CabTexture.Name": "Cabin texture", + "Entities.gmod_subway_em508.Spawner.Announcer.Name": "Announcer", + "Entities.gmod_subway_em508.Spawner.HornType.Name": "SPB horn", + "Entities.gmod_subway_em508.Spawner.NM.Name": "Train line pressure", + "Entities.gmod_subway_em508.Spawner.Battery.Name": "Turn on battery", + "Entities.gmod_subway_em508.Spawner.AV8B.Name": "Enable AV8B", + "Entities.gmod_subway_em508.Spawner.DoorsL.Name": "Open left doors", + "Entities.gmod_subway_em508.Spawner.DoorsR.Name": "Open right doors", + "Entities.gmod_subway_em508.Spawner.GV.Name": "Enable HV switch", + + "Entities.gmod_subway_ezh3.Spawner.Texture.Name": "Skin", + "Entities.gmod_subway_ezh3.Spawner.PassTexture.Name": "Interior texture", + "Entities.gmod_subway_ezh3.Spawner.CabTexture.Name": "Cabin texture", + "Entities.gmod_subway_ezh3.Spawner.Announcer.Name": "Announcer", + "Entities.gmod_subway_ezh3.Spawner.HornType.Name": "SPB horn", + "Entities.gmod_subway_ezh3.Spawner.NM.Name": "Train line pressure", + "Entities.gmod_subway_ezh3.Spawner.Battery.Name": "Turn on battery", + "Entities.gmod_subway_ezh3.Spawner.AV8B.Name": "Enable AV8B", + "Entities.gmod_subway_ezh3.Spawner.DoorsL.Name": "Open left doors", + "Entities.gmod_subway_ezh3.Spawner.DoorsR.Name": "Open right doors", + "Entities.gmod_subway_ezh3.Spawner.GV.Name": "Enable HV switch", + + "Entities.gmod_subway_81-717_lvz.Spawner.Texture.Name": "Skin", + "Entities.gmod_subway_81-717_lvz.Spawner.PassTexture.Name": "Interior texture", + "Entities.gmod_subway_81-717_lvz.Spawner.CabTexture.Name": "Cabin texture", + "Entities.gmod_subway_81-717_lvz.Spawner.Announcer.Name": "Announcer", + "Entities.gmod_subway_81-717_lvz.Spawner.Lighter.Name": "Lighter", + "Entities.gmod_subway_81-717_lvz.Spawner.Cran.Name": "Brake lever type", + "Entities.gmod_subway_81-717_lvz.Spawner.Cran.1": "334", + "Entities.gmod_subway_81-717_lvz.Spawner.Cran.2": "013", + "Entities.gmod_subway_81-717_lvz.Spawner.MaskType.Name": "Mask type", + "Entities.gmod_subway_81-717_lvz.Spawner.MaskType.1": "1-4-1", + "Entities.gmod_subway_81-717_lvz.Spawner.MaskType.2": "2-2(down)-2", + "Entities.gmod_subway_81-717_lvz.Spawner.MaskType.3": "2-2", + "Entities.gmod_subway_81-717_lvz.Spawner.MaskType.4": "2-2-2", + "Entities.gmod_subway_81-717_lvz.Spawner.MaskType.5": "1-3-1", + "Entities.gmod_subway_81-717_lvz.Spawner.LED.Name": "LED", + "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.Name": "BPSN type", + "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.1": "Old sound high tone", + "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.2": "Old sound medium tone", + "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.3": "Standard(from SPB)", + "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.4": "Standard(TKL)", + "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.5": "Standard", + "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.6": "Kiev", + "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.7": "Old", + "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.8": "Standard 2", + "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.9": "Standard 3", + "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.10": "No sound(BPN-115)", + "Entities.gmod_subway_81-717_lvz.Spawner.NewKV.Name": "New contoller model", + "Entities.gmod_subway_81-717_lvz.Spawner.HornType.Name": "SPB horn", + "Entities.gmod_subway_81-717_lvz.Spawner.RingType.Name": "Ring sound", + "Entities.gmod_subway_81-717_lvz.Spawner.RingType.1": "Old", + "Entities.gmod_subway_81-717_lvz.Spawner.RingType.2": "Standard with low tone", + "Entities.gmod_subway_81-717_lvz.Spawner.RingType.3": "Standard with high tone", + "Entities.gmod_subway_81-717_lvz.Spawner.RingType.4": "Standard intermittent with low tone", + "Entities.gmod_subway_81-717_lvz.Spawner.RingType.5": "Standard intermittent with high tone", + "Entities.gmod_subway_81-717_lvz.Spawner.NM.Name": "Train line pressure", + "Entities.gmod_subway_81-717_lvz.Spawner.Battery.Name": "Turn on battery", + "Entities.gmod_subway_81-717_lvz.Spawner.Switches.Name": "Circuit breakers on", + "Entities.gmod_subway_81-717_lvz.Spawner.SwitchesR.Name": "Random circuit breakers", + "Entities.gmod_subway_81-717_lvz.Spawner.DoorsL.Name": "Open left doors", + "Entities.gmod_subway_81-717_lvz.Spawner.DoorsR.Name": "Open right doors", + "Entities.gmod_subway_81-717_lvz.Spawner.GV.Name": "Enable HV switch", + "Entities.gmod_subway_81-717_lvz.Spawner.PB.Name": "Enable parking brake", + "Entities.gmod_subway_81-717_lvz.Spawner.BortLampType.Name": "Board lamps type", + "Entities.gmod_subway_81-717_lvz.Spawner.BortLampType.1": "Horizontal", + "Entities.gmod_subway_81-717_lvz.Spawner.BortLampType.2": "Vertical", + "Entities.gmod_subway_81-717_lvz.Spawner.HandRail.Name": "Handrails type", + "Entities.gmod_subway_81-717_lvz.Spawner.HandRail.1": "Old", + "Entities.gmod_subway_81-717_lvz.Spawner.HandRail.2": "New", + "Entities.gmod_subway_81-717_lvz.Spawner.SeatType.Name": "Seats type", + "Entities.gmod_subway_81-717_lvz.Spawner.SeatType.1": "Old", + "Entities.gmod_subway_81-717_lvz.Spawner.SeatType.2": "New", + "Entities.gmod_subway_81-717_lvz.Spawner.LampType.Name": "Lamps type", + "Entities.gmod_subway_81-717_lvz.Spawner.LampType.1": "Type 1", + "Entities.gmod_subway_81-717_lvz.Spawner.LampType.2": "Type 2", + "Entities.gmod_subway_81-717_lvz.Spawner.LampType.3": "Type 3", + "Entities.gmod_subway_81-717_lvz.Spawner.Breakers.Name": "Right side circuit breakers", + "Entities.gmod_subway_81-717_lvz.Spawner.Adverts.Name": "Adverts type", + "Entities.gmod_subway_81-717_lvz.Spawner.Adverts.1": "Type 1", + "Entities.gmod_subway_81-717_lvz.Spawner.Adverts.2": "Type 2", + "Entities.gmod_subway_81-717_lvz.Spawner.Adverts.3": "Type 3", + "Entities.gmod_subway_81-717_lvz.Spawner.Adverts.4": "No adverts", + + "Entities.gmod_subway_81-703.Spawner.Texture.Name": "Skin", + "Entities.gmod_subway_81-703.Spawner.PassTexture.Name": "Interior texture", + "Entities.gmod_subway_81-703.Spawner.CabTexture.Name": "Cabin texture", + "Entities.gmod_subway_81-703.Spawner.Announcer.Name": "Announcer", + "Entities.gmod_subway_81-703.Spawner.HornType.Name": "SPB horn", + "Entities.gmod_subway_81-703.Spawner.NM.Name": "Train line pressure", + "Entities.gmod_subway_81-703.Spawner.Battery.Name": "Turn on battery", + "Entities.gmod_subway_81-703.Spawner.AV8B.Name": "Enable AV8B", + "Entities.gmod_subway_81-703.Spawner.DoorsL.Name": "Open left doors", + "Entities.gmod_subway_81-703.Spawner.DoorsR.Name": "Open right doors", + "Entities.gmod_subway_81-703.Spawner.GV.Name": "Enable HV switch", + + "Spawner.Close": "Close", + "Spawner.Spawn": "Done" +} +]] diff --git a/lua/metrostroi_data/languages_/ru_717.lua b/lua/metrostroi_data/languages_/ru_717.lua new file mode 100644 index 0000000..58d58e7 --- /dev/null +++ b/lua/metrostroi_data/languages_/ru_717.lua @@ -0,0 +1,8 @@ +return [[ +{ + "Lang": "ru", + "Name": "Russian", + + +} +]] diff --git a/lua/metrostroi_data/languages_/ru_base.lua b/lua/metrostroi_data/languages_/ru_base.lua new file mode 100644 index 0000000..cb21c29 --- /dev/null +++ b/lua/metrostroi_data/languages_/ru_base.lua @@ -0,0 +1,94 @@ +return [[ +{ + "Lang": "ru", + "Name": "Russian", + "Panel.Admin": "Ðдмин", + "Panel.Client": "Клиент", + "Panel.DrawDebugInfo": "Отображать отладочную информацию", + "Panel.DisableCamAccel": "Откл. ÑимулÑцию ÐºÐ°Ñ‡Ð°Ð½Ð¸Ñ Ð³Ð¾Ð»Ð¾Ð²Ñ‹", + "Panel.DisableHoverText": "Откл. вÑплывающий текÑÑ‚", + "Panel.DrawCams": "ОтриÑовывать камеры", + "Panel.FOV": "Поле зрениÑ", + + "Train.Common.Camera0": "МеÑто машиниÑта", + + "Train.Buttons.Sealed": "Запломбировано", + + "Entities.gmod_subway_base.Name": "База метропоездов", + "Entities.gmod_subway_81-703.Name": "E", + "Entities.gmod_subway_81-703_2.Name": "E (промежуточный)", + "Entities.gmod_subway_81-717_mvm.Name": "81-717(МВМ головной)", + "Entities.gmod_subway_81-717_lvz.Name": "81-717(ЛВЗ головной)", + "Entities.gmod_subway_81-714_mvm.Name": "81-714(МВМ промежуточный)", + "Entities.gmod_subway_81-714_lvz.Name": "81-714(ЛВЗ промежуточный)", + "Entities.gmod_subway_81-7036.Name": "81-7036 (не работоÑпоÑобен)", + "Entities.gmod_subway_81-7037.Name": "81-7037 (не работоÑпоÑобен)", + "Entities.gmod_subway_81-720.Name": "81-720 (головной)", + "Entities.gmod_subway_81-721.Name": "81-721 (промежуточный)", + "Entities.gmod_subway_81-722.Name": "81-722 (головной)", + "Entities.gmod_subway_81-723.Name": "81-723 (промежуточный моторный)", + "Entities.gmod_subway_81-724.Name": "81-724 (промежуточный немоторный)", + "Entities.gmod_subway_e.Name": "Е (Ñтар)", + "Entities.gmod_subway_em.Name": "Ем", + "Entities.gmod_subway_ema.Name": "Ема", + "Entities.gmod_subway_ezh.Name": "Еж", + "Entities.gmod_subway_ezh1.Name": "Еж1", + "Entities.gmod_subway_em508.Name": "Ем-508", + "Entities.gmod_subway_em508_int.Name": "Ем-508 *промежуточный)", + "Entities.gmod_subway_ezh3.Name": "Еж3", + "Entities.gmod_subway_ezh3ru1.Name": "Еж3 РУ1", + "Entities.gmod_subway_ema508t.Name": "Ем-508Т", + "Entities.gmod_subway_tatra_t3.Name": "Татра Т3", + "Entities.gmod_subway_ai.Name": "Поезд Ñ Ð˜Ð˜", + + "Entities.gmod_train_bogey.Name": "Тележка вагона", + "Entities.gmod_train_couple.Name": "Сцепка", + + "Entities.gmod_track_pui.Name": "ПУИ", + "Entities.gmod_track_mus_elektronika7.Name": "ЧаÑÑ‹ \"Электроника\"", + "Entities.gmod_mus_clock_analog.Name": "Стрелочные чаÑÑ‹", + "Entities.gmod_track_clock_time.Name": "Большие интервальные чаÑÑ‹(времÑ)", + "Entities.gmod_track_clock_small.Name": "Маленькие интервальные чаÑÑ‹", + "Entities.gmod_track_clock_interval.Name": "Большие интервальные чаÑÑ‹(интервал)", + "Entities.gmod_track_switch.Name": "ÐŸÑƒÑ‚ÐµÐ²Ð°Ñ Ñтрелка", + "Entities.gmod_track_powermeter.Name": "Измеритель напрÑжениÑ", + "Entities.gmod_track_controller.Name": "ДиÑпечерÑкий пульт(не работает)", + "Entities.gmod_track_udochka.Name": "Удочка", + "Entities.gmod_train_spawner.Name": "Спавнер поездов", + + "Train.703.VU": "Выключатель управлениÑ", + "Train.703.Breakers1" : "Батареи", + "Train.703.Breakers2" : "Ðвтоматы", + "Train.703.RCARS" : "РЦ-ÐРС", + "Train.703.Left" : "Панель помощника", + "Train.703.Parking" : "УÐВРи ручной тормоз", + "Train.703.ASNP" : "ÐСÐП", + "Train.703.IGLA" : "ИГЛÐ", + "Train.717.Breakers1": "Центральные автоматы", + "Train.717.VB1": "Панель Ñ Ð Ð¦", + "Train.717.Breakers2": "Правые автоматы", + "Train.717.VB2": "ÐижнÑÑ Ð¿Ð°Ð½ÐµÐ»ÑŒ Ñ Ð Ð¦", + "Train.717.UAVA": "УÐÐ’Ð", + "Train.717.Pneumo": "ПневматичеÑкие краны", + "Train.717.Helpers": "Пульт помощника", + "Train.717.Block4": "4 блок", + "Train.717.IGLA": "ИГЛÐ", + "Train.717.ASNP" : "ÐСÐП", + "Train.720.CameraCond": "Панель кондиционеров", + "Train.720.CameraPPZ": "Панель поездной защиты", + "Train.720.CameraPV": "Панель вÑпомогательных кнопок", + "Train.720.CameraASNP": "ÐСÐП", + "Train.720.CameraVityaz": "СÐУ ВитÑзь", + "Train.720.CameraKRMH": "Кран КРМШ", + "Train.720.CameraPVZ": "Панель вагонной защиты", + "Train.722.Breakers": "Ðвтоматы поездной защиты", + "Train.722.PU2_1": "Панель кнопок", + "Train.722.PU2_2": "Панель выключателей", + "Train.722.Vityaz": "Экран СÐУ ВитÑзь", + "Train.722.SARMAT": "Экран БМ ЦИК СÐРМÐТ", + "Train.722.CabLights": "Панель оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹", + "Train.722.Route": "УÑтановка номера маршрута", + "Train.722.Disconnects": "Концевые краны", + "Train.722.KRMH": "Выключатель КРМШ и РВТБ" +} +]] diff --git a/lua/metrostroi_data/languages_/ru_buttons_703.lua b/lua/metrostroi_data/languages_/ru_buttons_703.lua new file mode 100644 index 0000000..ed08e6e --- /dev/null +++ b/lua/metrostroi_data/languages_/ru_buttons_703.lua @@ -0,0 +1,142 @@ +return [[ +{ + "Lang": "ru", + "Name": "Russian", + + + "Entities.gmod_subway_81-703.Buttons.HelperPanel.R_Program1Set": "Программа 1", + "Entities.gmod_subway_81-703.Buttons.HelperPanel.R_Program2Set": "Программа 2", + "Entities.gmod_subway_81-703.Buttons.HelperPanel.VDLSet": "ВДЛ: Выключатель левых дверей", + "Entities.gmod_subway_81-703.Buttons.HelperPanel.VUD2Toggle": "ВУД2: Выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÑŒÐ¼Ð¸", + "Entities.gmod_subway_81-703.Buttons.Meters.!TotalVoltmeter": "Вольтметр выÑокого напрÑÐ¶ÐµÐ½Ð¸Ñ (кВ)", + "Entities.gmod_subway_81-703.Buttons.Meters.!TotalAmpermeter": "Ðмперметр (Ð)", + "Entities.gmod_subway_81-703.Buttons.AV2.RSTToggle": "РСТ: РадиоÑтанциÑ", + "Entities.gmod_subway_81-703.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_81-703.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_81-703.Buttons.Back2.!HVFuses": "Блок выÑоковольтных предохранителей", + "Entities.gmod_subway_81-703.Buttons.Back2.!DVR": "Дверной воздухораÑпределитель", + "Entities.gmod_subway_81-703.Buttons.Main.RK": "Лампа: Вращение реоÑтатного контроллера)", + "Entities.gmod_subway_81-703.Buttons.Main.GreenRP": "Лампа: Ð—ÐµÐ»Ñ‘Ð½Ð°Ñ Ð ÐŸ (ÑÐ¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿ÐµÑ€ÐµÐ³Ñ€ÑƒÐ·ÐºÐ¸ на поезде)", + "Entities.gmod_subway_81-703.Buttons.Main.RedRP": "Лампа: КраÑÐ½Ð°Ñ Ð ÐŸ", + "Entities.gmod_subway_81-703.Buttons.Main.Blue": "Лампа: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_81-703.Buttons.Main.DIPonSet": "Вкл. ОÑв.: Включение оÑвещениÑ", + "Entities.gmod_subway_81-703.Buttons.Main.DIPoffSet": "Выкл. ОÑв.: Отключение оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ (звонок)", + "Entities.gmod_subway_81-703.Buttons.Main.VozvratRPSet": "ВРП: Возврат РП", + "Entities.gmod_subway_81-703.Buttons.Main.KSNSet": "КСÐ: Принудительное Ñрабатывание РП на неиÑправном вагоне (Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½ÐµÐ¸ÑправноÑти)", + "Entities.gmod_subway_81-703.Buttons.Main.KRZDSet": "КРЗД: Кнопка резервного Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_81-703.Buttons.Main.KSDSet": "КСД: Контроль Ñигнализации дверей(проверка СД)", + "Entities.gmod_subway_81-703.Buttons.Main.KDPSet": "КДП: Правые двери", + "Entities.gmod_subway_81-703.Buttons.Main.KDLSet": "КДЛ: Кнопка левых дверей", + "Entities.gmod_subway_81-703.Buttons.Main.KU1Toggle": "МК: Включение мотор-компреÑÑора", + "Entities.gmod_subway_81-703.Buttons.Main.VUD1Toggle": "ВУД: Закрытие дверей", + "Entities.gmod_subway_81-703.Buttons.Main.KRPSet": "КРП: Резервный пуÑк (ручное управление)", + "Entities.gmod_subway_81-703.Buttons.AV1.VU3Toggle": "ВУ3: ОÑвещение кабины\n", + "Entities.gmod_subway_81-703.Buttons.AV1.VU2Toggle": "ВУ2: Ðварийное оÑвещение (45Ð’)\n", + "Entities.gmod_subway_81-703.Buttons.AV1.VU1Toggle": "ВУ1: Печь Ð¾Ñ‚Ð¾Ð¿Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹ (3кВт)\n", + "Entities.gmod_subway_81-703.Buttons.AVMain.AV8BToggle": "ÐÐ’-8Б: ÐвтоматичеÑкй выключатель (Ð’Ñпомогательные цепи выÑокого напрÑжениÑ)\n", + "Entities.gmod_subway_81-703.Buttons.Lamp.L_3Toggle": "Лампа: ПодÑветка приборов", + "Entities.gmod_subway_81-703.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle": "Кран двойной Ñ‚Ñги напорной магиÑтрали", + "Entities.gmod_subway_81-703.Buttons.VU.VUToggle": "ВУ: Выключатель управлениÑ", + "Entities.gmod_subway_81-703.Buttons.FrontDoor.FrontDoor": "ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ", + "Entities.gmod_subway_81-703.Buttons.PneumaticManometer.!LinesPressure": "Давление в магиÑтралÑÑ… (краÑнаÑ: тормозной, чёрнаÑ: напорной)", + "Entities.gmod_subway_81-703.Buttons.Stopkran.EmergencyBrakeValveToggle": "Стопкран", + "Entities.gmod_subway_81-703.Buttons.UAVAPanel.UAVAToggle": "УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа (отключение автоÑтопа)", + "Entities.gmod_subway_81-703.Buttons.UAVAPanel.UAVACToggle ": "УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа (воÑÑтановление контактов)", + "Entities.gmod_subway_81-703.Buttons.PneumaticPanels.!CylinderPressure": "Тормозной манометр: Давление в тормозных цилиндрах (ТЦ)", + "Entities.gmod_subway_81-703.Buttons.Battery.VBToggle": "ВБ: Выключатель аккумулÑторной батареи (Ð’Ñпомогательные цепи низкого напрÑжениÑ)", + "Entities.gmod_subway_81-703.Buttons.Battery.R_RadioToggle": "Питание радиоинформатора +50Ð’", + "Entities.gmod_subway_81-703.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_81-703.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_81-703.Buttons.ASNP.R_ASNPMenuSet": "Информатор: Меню", + "Entities.gmod_subway_81-703.Buttons.ASNP.R_ASNPUpSet": "Информатор: Вверх", + "Entities.gmod_subway_81-703.Buttons.ASNP.R_ASNPDownSet": "Информатор: Вниз", + "Entities.gmod_subway_81-703.Buttons.ASNP.R_ASNPOnToggle": "Информатор: Включение", + "Entities.gmod_subway_81-703.Buttons.GV.GVToggle": "Главный выключатель", + "Entities.gmod_subway_81-703.Buttons.PassengerDoor.PassengerDoor": "Дверь из Ñалона", + "Entities.gmod_subway_81-703.Buttons.KRR.KRRToggle": "KРР: Кнопка разворота реверÑоров", + "Entities.gmod_subway_81-703.Buttons.VU4.VUSToggle": "Переключатель: Ближний Ñвет/Дальний Ñвет", + "Entities.gmod_subway_81-703.Buttons.CabinDoor.CabinDoor1": "Дверь в кабину машиниÑта", + "Entities.gmod_subway_81-703.Buttons.Tsepi.!BatteryVoltage": "ÐапрÑжение цепей управлениÑ", + "Entities.gmod_subway_81-703.Buttons.IGLAButtons.IGLA1USet": "ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вверх", + "Entities.gmod_subway_81-703.Buttons.IGLAButtons.IGLA1Set": "ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°", + "Entities.gmod_subway_81-703.Buttons.IGLAButtons.IGLA1DSet": "ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вниз", + "Entities.gmod_subway_81-703.Buttons.IGLAButtons.IGLA2USet": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вверх", + "Entities.gmod_subway_81-703.Buttons.IGLAButtons.IGLA2Set": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°", + "Entities.gmod_subway_81-703.Buttons.IGLAButtons.IGLA2DSet": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вниз", + "Entities.gmod_subway_81-703.Buttons.IGLAButtons.!IGLASR": "ИГЛÐ: SR", + "Entities.gmod_subway_81-703.Buttons.IGLAButtons.!IGLARX": "ИГЛÐ: RX", + "Entities.gmod_subway_81-703.Buttons.IGLAButtons.!IGLAErr": "ИГЛÐ: Отказ", + "Entities.gmod_subway_81-703.Buttons.IGLAButtons.!IGLAOSP": "ИГЛÐ: ОСП", + "Entities.gmod_subway_81-703.Buttons.IGLAButtons.!IGLAPI": "ИГЛÐ: ПИ", + "Entities.gmod_subway_81-703.Buttons.IGLAButtons.!IGLAOff": "ИГЛÐ: Откл", + "Entities.gmod_subway_81-703.Buttons.Back1.R_UNchToggle": "УÐЧ: УÑилитель низких чаÑтот(звук Ñалона)", + "Entities.gmod_subway_81-703.Buttons.Back1.IGLAToggle": "ÐСОТП: ИГЛÐ", + "Entities.gmod_subway_81-703.Buttons.Back1.RezMKSet": "Резервное включение мотор-компреÑÑора", + "Entities.gmod_subway_81-703.Buttons.ParkingBrake.ParkingBrakeLeft": "Поворот колеÑа ручного тормоза", + "Entities.gmod_subway_81-703.Buttons.ParkingBrake.ParkingBrakeRight": "Поворот колеÑа ручного тормоза", + "Entities.gmod_subway_81-703.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle": "Кран двойной Ñ‚Ñги тормозной магиÑтрали", + "Entities.gmod_subway_81-703.Buttons.Speedometer.!Speedometer": "СкороÑтемер", + "Entities.gmod_subway_81-703.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Выключение воздухораÑпределителÑ", + + + + "Entities.gmod_subway_81-703_2.Buttons.Stopkran.EmergencyBrakeValveToggle": "Стопкран", + "Entities.gmod_subway_81-703_2.Buttons.HelperPanel.R_Program1Set": "Программа 1", + "Entities.gmod_subway_81-703_2.Buttons.HelperPanel.R_Program2Set": "Программа 2", + "Entities.gmod_subway_81-703_2.Buttons.HelperPanel.VDLSet": "ВДЛ: Выключатель левых дверей", + "Entities.gmod_subway_81-703_2.Buttons.HelperPanel.VUD2LToggle": "Блокировка ВУД2", + "Entities.gmod_subway_81-703_2.Buttons.HelperPanel.VUD2Toggle": "ВУД2: Выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÑŒÐ¼Ð¸", + "Entities.gmod_subway_81-703_2.Buttons.PneumaticPanels.!CylinderPressure": "Тормозной манометр: Давление в тормозных цилиндрах (ТЦ)", + "Entities.gmod_subway_81-703_2.Buttons.Battery.VBToggle": "ВБ: Выключатель аккумулÑторной батареи (Ð’Ñпомогательные цепи низкого напрÑжениÑ)", + "Entities.gmod_subway_81-703_2.Buttons.Battery.R_RadioToggle": "Питание радиоинформатора +50Ð’", + "Entities.gmod_subway_81-703_2.Buttons.Meters.!TotalVoltmeter": "Вольтметр выÑокого напрÑÐ¶ÐµÐ½Ð¸Ñ (кВ)", + "Entities.gmod_subway_81-703_2.Buttons.Meters.!TotalAmpermeter": "Ðмперметр (Ð)", + "Entities.gmod_subway_81-703_2.Buttons.AV2.RSTToggle": "РСТ: РадиоÑтанциÑ", + "Entities.gmod_subway_81-703_2.Buttons.PassengerDoor.PassengerDoor": "Дверь из Ñалона", + "Entities.gmod_subway_81-703_2.Buttons.VU4.VUSToggle": "Переключатель: Ближний Ñвет/Дальний Ñвет", + "Entities.gmod_subway_81-703_2.Buttons.AV1.VU3Toggle": "ВУ3: ОÑвещение кабины\n", + "Entities.gmod_subway_81-703_2.Buttons.AV1.VU2Toggle": "ВУ2: Ðварийное оÑвещение (45Ð’)\n", + "Entities.gmod_subway_81-703_2.Buttons.AV1.VU1Toggle": "ВУ1: Печь Ð¾Ñ‚Ð¾Ð¿Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹ (3кВт)\n", + "Entities.gmod_subway_81-703_2.Buttons.UAVAPanel.UAVAToggle": "УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа (отключение автоÑтопа)", + "Entities.gmod_subway_81-703_2.Buttons.UAVAPanel.UAVACToggle ": "УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа (воÑÑтановление контактов)", + "Entities.gmod_subway_81-703_2.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Выключение воздухораÑпределителÑ", + "Entities.gmod_subway_81-703_2.Buttons.GV.GVToggle": "Главный выключатель", + "Entities.gmod_subway_81-703_2.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_81-703_2.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_81-703_2.Buttons.Tsepi.!BatteryVoltage": "ÐапрÑжение цепей управлениÑ", + "Entities.gmod_subway_81-703_2.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_81-703_2.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_81-703_2.Buttons.ParkingBrake.ParkingBrakeLeft": "Поворот колеÑа ручного тормоза", + "Entities.gmod_subway_81-703_2.Buttons.ParkingBrake.ParkingBrakeRight": "Поворот колеÑа ручного тормоза", + "Entities.gmod_subway_81-703_2.Buttons.Back2.!HVFuses": "Блок выÑоковольтных предохранителей", + "Entities.gmod_subway_81-703_2.Buttons.Back2.!DVR": "Дверной воздухораÑпределитель", + "Entities.gmod_subway_81-703_2.Buttons.Main.RK": "Лампа: Вращение реоÑтатного контроллера)", + "Entities.gmod_subway_81-703_2.Buttons.Main.GreenRP": "Лампа: Ð—ÐµÐ»Ñ‘Ð½Ð°Ñ Ð ÐŸ (ÑÐ¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿ÐµÑ€ÐµÐ³Ñ€ÑƒÐ·ÐºÐ¸ на поезде)", + "Entities.gmod_subway_81-703_2.Buttons.Main.RedRP": "Лампа: КраÑÐ½Ð°Ñ Ð ÐŸ", + "Entities.gmod_subway_81-703_2.Buttons.Main.Blue": "Лампа: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_81-703_2.Buttons.Main.DIPonSet": "Вкл. ОÑв.: Включение оÑвещениÑ", + "Entities.gmod_subway_81-703_2.Buttons.Main.DIPoffSet": "Выкл. ОÑв.: Отключение оÑвещениÑ", + "Entities.gmod_subway_81-703_2.Buttons.Main.VozvratRPSet": "ВРП: Возврат РП", + "Entities.gmod_subway_81-703_2.Buttons.Main.KSNSet": "КСÐ: Принудительное Ñрабатывание РП на неиÑправном вагоне (Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½ÐµÐ¸ÑправноÑти)", + "Entities.gmod_subway_81-703_2.Buttons.Main.KRZDSet": "КРЗД: Кнопка резервного Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_81-703_2.Buttons.Main.KSDSet": "КСД: Контроль Ñигнализации дверей(проверка СД)", + "Entities.gmod_subway_81-703_2.Buttons.Main.KDPSet": "КДП: Правые двери", + "Entities.gmod_subway_81-703_2.Buttons.Main.KDLSet": "КДЛ: Кнопка левых дверей", + "Entities.gmod_subway_81-703_2.Buttons.Main.KU1Toggle": "МК: Включение мотор-компреÑÑора", + "Entities.gmod_subway_81-703_2.Buttons.Main.VUD1Toggle": "ВУД: Закрытие дверей", + "Entities.gmod_subway_81-703_2.Buttons.Main.KRPSet": "КРП: Резервный пуÑк (ручное управление)", + "Entities.gmod_subway_81-703_2.Buttons.KRR.KRRToggle": "KРР: Кнопка разворота реверÑоров", + "Entities.gmod_subway_81-703_2.Buttons.Back1.R_ZSToggle": "ЗС: Выключатель уÑÐ¸Ð»ÐµÐ½Ð¸Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ð³Ð¾Ð²Ð¾Ñ€Ð¸Ñ‚ÐµÐ»Ñ, звук в Ñалоне", + "Entities.gmod_subway_81-703_2.Buttons.Back1.IGLAToggle": "ÐСОТП: ИГЛРВкл. (вверх)/Выкл. (вниз)", + "Entities.gmod_subway_81-703_2.Buttons.Back1.RezMKSet": "Резервное включение мотор-компреÑÑора", + "Entities.gmod_subway_81-703_2.Buttons.CabinDoor.CabinDoor1": "Дверь в кабину машиниÑта", + "Entities.gmod_subway_81-703_2.Buttons.Lamp.L_3Toggle": "Лампа: ПодÑветка приборов", + "Entities.gmod_subway_81-703_2.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle": "Кран двойной Ñ‚Ñги тормозной магиÑтрали", + "Entities.gmod_subway_81-703_2.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle": "Кран двойной Ñ‚Ñги напорной магиÑтрали", + "Entities.gmod_subway_81-703_2.Buttons.AVMain.AV8BToggle": "ÐÐ’-8Б: ÐвтоматичеÑкй выключатель (Ð’Ñпомогательные цепи выÑокого напрÑжениÑ)\n", + "Entities.gmod_subway_81-703_2.Buttons.VU.VUToggle": "ВУ: Выключатель управлениÑ", + "Entities.gmod_subway_81-703_2.Buttons.FrontDoor.FrontDoor": "ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ", + "Entities.gmod_subway_81-703_2.Buttons.Speedometer.!Speedometer": "СкороÑтемер", +"Entities.gmod_subway_81-703_2.Buttons.PneumaticManometer.!LinesPressure": "Давление в магиÑтралÑÑ… (краÑнаÑ: тормозной, чёрнаÑ: напорной)" +} +]] diff --git a/lua/metrostroi_data/languages_/ru_buttons_717.lua b/lua/metrostroi_data/languages_/ru_buttons_717.lua new file mode 100644 index 0000000..23a4731 --- /dev/null +++ b/lua/metrostroi_data/languages_/ru_buttons_717.lua @@ -0,0 +1,318 @@ +return [[ +{ + "Lang": "ru", + "Name": "Russian", + + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.VUD2Toggle": "ВУД2: Выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÑŒÐ¼Ð¸", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.VDLSet": "ВДЛ: Выключатель левых дверей", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.R_Program2Helper": "Программа 2", + "Entities.gmod_subway_81-717_mvm.Buttons.HelperPanel.R_Program1Helper": "Программа 1", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:RC1Toggle": "РЦ-1: Разъединитель цепей ÐРС", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:VBToggle": "ВБ: Выключатель батареи", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery_2.1:UOSToggle": "РЦ-УОС: УÑтройÑтво Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ ÑкороÑти", + "Entities.gmod_subway_81-717_mvm.Buttons.Wiper.WiperToggle": "Дворник", + "Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle": "Клапан разобщениÑ", + "Entities.gmod_subway_81-717_mvm.Buttons.DriverValveDisconnect.DriverValveBLDisconnectToggle": "Кран двойной Ñ‚Ñги тормозной магиÑтрали", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_UNchToggle": "УÐЧ: УÑилитель низких чаÑтот", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_ZSToggle": "ЭС: Контроль ÑкÑтренной ÑвÑзи", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_GToggle": "Громкоговоритель", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_RadioToggle": "Радиоинформатор (вÑтроеный)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_Program1Set": "Программа 1", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_Program2Set": "Программа 2", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.2:KVTSet": "КБ: Кнопка БдительноÑти", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VZ1Set": "ВЗ1: Вентиль Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ â„–1", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VUD1Toggle": "ВУД: Выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÑŒÐ¼Ð¸", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLSet": "КДЛ: Кнопка левых дверей", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLKToggle": "Крышка кнопки КДЛ", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLRSet": "ВДЛ: Выключатель левых дверей", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KDLRKToggle": "Крышка кнопки ВДЛ", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.DoorSelectToggle": "Выбор Ñтороны Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KRZDSet": "КРЗД: Кнопка резервного Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.R_VPRToggle": "ВПР: Включение поездной радиоÑвÑзи", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.VozvratRPSet": "Возврат реле перегрузки", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.GreenRPLight": "РП: Ð—ÐµÐ»Ñ‘Ð½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.AVULight": "ÐВУ: ÐвтоматичеÑкий выключатель управлениÑ", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.LKVPLight": "ЛКВП: Контроль выÑоковольного преобразователÑ", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.SPLight": "ЛСП: Лампа Ñигнализации пожара", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ConverterProtectionSet": "Защита преобразователÑ", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.KSNSet": "КСÐ: Кнопка Ñигнализации неиÑправноÑти", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.DIPoffSet": "Звонок", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ARSToggle": "ÐРС: Включение ÑиÑтемы автоматичеÑкого Ñ€ÐµÐ³ÑƒÐ»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑкороÑти", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ALSToggle": "ÐЛС: Включение ÑиÑтемы автоматичеÑкой локомотивной Ñигнализации", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.OtklAVUToggle": "ОтклÐВУ: Отключение автоматичеÑкого Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (неиÑправноÑть ÐВУ)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.TormATToggle": "(placeholder)", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_1Toggle": "ОÑвещение Ñалона", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_2Toggle": "ОÑвещение кабины", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.L_3Toggle": "ОÑвещение пульта", + "Entities.gmod_subway_81-717_mvm.Buttons.Main.ALSFreqToggle": "Дешифратор: Переключение режима приёмных катушек 1/5 или 2/6", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.ParkingBrakeToggle": "СтоÑночный тормоз", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake.DriverValveTLDisconnectToggle": "Кран двойной Ñ‚Ñги напорной магиÑтрали", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA1Set": "ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA2Set": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA3Set": "ИГЛÐ: Ð¢Ñ€ÐµÑ‚ÑŒÑ ÐºÐ½Ð¾Ð¿ÐºÐ°", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA4Set": "ИГЛÐ: Ð§ÐµÑ‚Ð²Ñ‘Ñ€Ñ‚Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.!Voltage": "ÐапрÑжение цепей управлениÑ", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.VMKToggle": "Включение мотор-компреÑÑора", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.BPSNonToggle": "БПСÐ: Блок Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ñ ÑобÑтвенных нужд", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.RezMKSet": "Резервное включение мотор-компреÑÑора", + "Entities.gmod_subway_81-717_mvm.Buttons.BPSNFront.ARS13Set": "ÐРС 13Ð’: Проверка Ñтабилизированого напрÑÐ¶ÐµÐ½Ð¸Ñ ÐРС", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!RouteNum": "М â„–\nRoute number", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!PathNum": "П â„–\nPath number", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchTime": "ВРЕМЯ ХОДÐ\nTotal schedule time", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchInterval": "ИÐТ\nTrain interval", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchHour": "ЧÐС\nHour", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchMin": "МИÐ\nMinute", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchSec": "СЕК\nSecond", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchArrival": "Arrival times", + "Entities.gmod_subway_81-717_mvm.Buttons.Schedule.!SchStations": "Station name", + "Entities.gmod_subway_81-717_mvm.Buttons.PneumaticPanels.!CylinderPressure": "Давление в тормозных цилиндрах (ТЦ)", + "Entities.gmod_subway_81-717_mvm.Buttons.PneumaticPanels.!LinePressure": "Давление в магиÑтралÑÑ… (краÑнаÑ: тормозной, чёрнаÑ: напорной)", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.RC1Toggle": "РЦ-1: Разъединитель цепей ÐРС", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.UOSToggle": "РЦ-УОС: УÑтройÑтво Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ ÑкороÑти", + "Entities.gmod_subway_81-717_mvm.Buttons.Battery.VBToggle": "ВБ: Выключатель батареи", + "Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_81-717_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPMenuSet": "ÐСÐП: Меню", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPUpSet": "ÐСÐП: Вверх", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPDownSet": "ÐСÐП: Вниз", + "Entities.gmod_subway_81-717_mvm.Buttons.ASNP.R_ASNPOnToggle": "ÐСÐП: Включение", + "Entities.gmod_subway_81-717_mvm.Buttons.RearDoor.RearDoor": "ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ", + "Entities.gmod_subway_81-717_mvm.Buttons.Meters.!TotalVoltmeter": "Вольтметр выÑокого напрÑÐ¶ÐµÐ½Ð¸Ñ (кВ)", + "Entities.gmod_subway_81-717_mvm.Buttons.Meters.!TotalAmpermeter": "Ðмперметр (Ð)", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A61Toggle": "A61 Управление 6ым поездным проводом", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A55Toggle": "A55 Управление проводом 10ÐС", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A54Toggle": "A54 Управление проводом 10ÐК", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A56Toggle": "A56 Включение аккумулÑторной батареи", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A27Toggle": "A27 Включение ДИП и оÑвещениÑ", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A21Toggle": "A21 Управление дверей", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A10Toggle": "A10 Управление мотор-компреÑÑором", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A53Toggle": "A53 Питание КВЦ", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A43Toggle": "A43 Питание ÐРС 12Ð’", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A45Toggle": "A45 ÐРС провод 10ÐУ", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A42Toggle": "A42 Питание ÐРС 75Ð’", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A41Toggle": "A41 Торможение ÐРС", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.VUToggle": "VU Управление поезда", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A64Toggle": "A64 Включение оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A63Toggle": "A63 ИГЛÐ/БИС", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A50Toggle": "A50 ДИП и оÑвещение включение", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A51Toggle": "A51 ДИП и оÑвещение отключение", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A23Toggle": "A23 Резервное включение мотор-компреÑÑора", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A14Toggle": "A14 18 провод", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A75Toggle": "A75 Отопление кабины", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A1Toggle": "A1 Ход 1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A2Toggle": "A2 Ход 2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A3Toggle": "A3 Ход 3", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A17Toggle": "A17 Возврат РП", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A62Toggle": "A62 РадиоÑвÑзь", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A29Toggle": "A29 Радио опевещение", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A5Toggle": "A5 ", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A6Toggle": "A6 Тормоз 1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A8Toggle": "A8 Вентиль #1, #2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A20Toggle": "A20 Ход 1, 20 провод", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A25Toggle": "A25 Торможение ручное", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A22Toggle": "A22 Включение КК", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A30Toggle": "A30 Серводвигатель реоÑтатного контроллера", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A39Toggle": "A39 Резервное управление", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A44Toggle": "A44 Резервное управление поезда", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A80Toggle": "A80 Серводвигатель Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡Ð°Ñ‚ÐµÐ»Ñ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A65Toggle": "A65 ОÑвещение Ñалона", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.L_5Toggle": "Ð49 Ðварийное оÑвещение", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A24Toggle": "A24 ЗарÑд аккумулÑторной батареи", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A32Toggle": "A32 Открытие правых дверей", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A31Toggle": "A31 Открытие левых дверей", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A16Toggle": "A16 Закрытие дверей", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A13Toggle": "A13 Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A12Toggle": "A12 Резервное закрытие дверей", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A7Toggle": "A7 КраÑный фонарь", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A9Toggle": "A9 КраÑный фонарь", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A46Toggle": "A46 Фары белые", + "Entities.gmod_subway_81-717_mvm.Buttons.AV.A47Toggle": "A47 Фары белые", + "Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor.PassengerDoor": "Дверь в кабину машиниÑта из Ñалона", + "Entities.gmod_subway_81-717_mvm.Buttons.GV.GVToggle": "Главный выключатель", + "Entities.gmod_subway_81-717_mvm.Buttons.Stopkran.EmergencyBrakeValveToggle": "Стопкран", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.L_4Toggle": "Выключатель фар", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VUSToggle": "ВУС: Выключатель уÑиленого Ñвета ходовых фар", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VAHToggle": "Ð’ÐÐ¥: Включение аварийного хода (неиÑправноÑть реле педали безопаÑноÑти)", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.VADToggle": "Ð’ÐД: Включение аварийного Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ (неиÑправноÑть реле ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð²ÐµÑ€ÐµÐ¹)", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KRPSet": "КРП: Кнопка резервного пуÑка", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KAHSet": "КÐÐ¥: Кнопка аварийного хода", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KAHKToggle": "Крышка кнопки КÐÐ¥", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KUP": "Контроль печи", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KDPSet": "КДП: Кнопка правых дверей", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.KDPKToggle": "Крышка кнопки КДП", + "Entities.gmod_subway_81-717_mvm.Buttons.Front.PN": "Контроль пневмотормоза", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A61Toggle": "A61 Управление 6ым поездным проводом", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A55Toggle": "A55 Управление проводом 10ÐС", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A54Toggle": "A54 Управление проводом 10ÐК", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A56Toggle": "A56 Включение аккумулÑторной батареи", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A27Toggle": "A27 Включение ДИП и оÑвещениÑ", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A21Toggle": "A21 Управление дверей", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A10Toggle": "A10 Управление мотор-компреÑÑором", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A53Toggle": "A53 Питание КВЦ", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A43Toggle": "A43 Питание ÐРС 12Ð’", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A45Toggle": "A45 ÐРС провод 10ÐУ", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A42Toggle": "A42 Питание ÐРС 75Ð’", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A41Toggle": "A41 Торможение ÐРС", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:VUToggle": "VU Управление поезда", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A64Toggle": "A64 Включение оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A63Toggle": "A63 ИГЛÐ/БИС", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A50Toggle": "A50 ДИП и оÑвещение включение", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A51Toggle": "A51 ДИП и оÑвещение отключение", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A23Toggle": "A23 Резервное включение мотор-компреÑÑора", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A14Toggle": "A14 18 провод", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A75Toggle": "A75 Отопление кабины", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A1Toggle": "A1 Ход 1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A2Toggle": "A2 Ход 2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A3Toggle": "A3 Ход 3", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A17Toggle": "A17 Возврат РП", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A62Toggle": "A62 РадиоÑвÑзь", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A29Toggle": "A29 Радио опевещение", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A5Toggle": "A5 ", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A6Toggle": "A6 Тормоз 1", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A8Toggle": "A8 Вентиль #1, #2", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A20Toggle": "A20 Ход 1, 20 провод", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A25Toggle": "A25 Торможение ручное", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A22Toggle": "A22 Включение КК", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A30Toggle": "A30 Серводвигатель реоÑтатного контроллера", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A39Toggle": "A39 Резервное управление", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A44Toggle": "A44 Резервное управление поезда", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A80Toggle": "A80 Серводвигатель Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡Ð°Ñ‚ÐµÐ»Ñ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A65Toggle": "A65 ОÑвещение Ñалона", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:L_5Toggle": "Ð49 Ðварийное оÑвещение", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A24Toggle": "A24 ЗарÑд аккумулÑторной батареи", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A32Toggle": "A32 Открытие правых дверей", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A31Toggle": "A31 Открытие левых дверей", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A16Toggle": "A16 Закрытие дверей", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A13Toggle": "A13 Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A12Toggle": "A12 Резервное закрытие дверей", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A7Toggle": "A7 КраÑный фонарь", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A9Toggle": "A9 КраÑный фонарь", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A46Toggle": "A46 Фары белые", + "Entities.gmod_subway_81-717_mvm.Buttons.AV_1.1:A47Toggle": "A47 Фары белые", + "Entities.gmod_subway_81-717_mvm.Buttons.CabinDoor.CabinDoor": "Дверь в кабину машиниÑта", + "Entities.gmod_subway_81-717_mvm.Buttons.Reverser.KVReverserDown": "РеверÑор назад", + "Entities.gmod_subway_81-717_mvm.Buttons.Reverser.KVReverserUp": "РеверÑор вперёд", + "Entities.gmod_subway_81-717_mvm.Buttons.PassengerDoor1.PassengerDoor": "Дверь в кабину машиниÑта из Ñалона", + "Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVAToggle": "УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа (отключение автоÑтопа)", + "Entities.gmod_subway_81-717_mvm.Buttons.UAVAPanel.UAVACToggle ": "УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа (воÑÑтановление контактов)", + "Entities.gmod_subway_81-717_mvm.Buttons.EPKDisconnect.EPKToggle": "Кран ЭПВ", + "Entities.gmod_subway_81-717_mvm.Buttons.Help.ShowHelp": "Помощь в вождении поезда", + "Entities.gmod_subway_81-717_mvm.Buttons.ParkingBrake2.1:ParkingBrakeToggle": "СтоÑночный тормоз", + "Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_81-717_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_81-717_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Выключение воздухораÑпределителÑ", + + "Entities.gmod_subway_81-714_mvm.Buttons.GV.GVToggle": "Главный выключатель", + "Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_81-714_mvm.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_81-714_mvm.Buttons.RearDoor.RearDoor": "ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.DriverValveBLDisconnectToggle": "Кран двойной Ñ‚Ñги тормозной магиÑтрали", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.DriverValveTLDisconnectToggle": "Кран двойной Ñ‚Ñги напорной магиÑтрали", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A65Toggle": "A65 ОÑвещение Ñалона", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A56Toggle": "A56 Включение аккумулÑторной батареи", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A63Toggle": "A63 ИГЛÐ/БИС", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A10Toggle": "A10 Управление мотор-компреÑÑором", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A30Toggle": "A30 Серводвигатель реоÑтатного контроллера", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Left.A80Toggle": "A80 Серводвигатель Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡Ð°Ñ‚ÐµÐ»Ñ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontPneumatic.ParkingBrakeToggle": "СтоÑночный тормоз", + "Entities.gmod_subway_81-714_mvm.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Выключение воздухораÑпределителÑ", + "Entities.gmod_subway_81-714_mvm.Buttons.FrontDoor.FrontDoor": "ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ", + "Entities.gmod_subway_81-714_mvm.Buttons.Battery.VBToggle": "ВБ: Выключатель батареи", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A54Toggle": "A54 Управление проводом 10ÐК", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A27Toggle": "A27 Включение ДИП и оÑвещениÑ", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A24Toggle": "A24 ЗарÑд аккумулÑторной батареи", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A53Toggle": "A53 Питание КВЦ", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A13Toggle": "A13 Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A32Toggle": "A32 Открытие правых дверей", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A31Toggle": "A31 Открытие левых дверей", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A16Toggle": "A16 Закрытие дверей", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A12Toggle": "A12 Резервное закрытие дверей", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A50Toggle": "A50 ДИП и оÑвещение включение", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A51Toggle": "A51 ДИП и оÑвещение отключение", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A1Toggle": "A1 Ход 1", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.KRPSet": "ПУСК: Кнопка пуÑка", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.VozvratRPSet": "Возврат реле перегрузки", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.RezMKSet": "Резервное включение мотор-компреÑÑора", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.VMKToggle": "Включение мотор-компреÑÑора", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.BPSNonToggle": "БПСÐ: Блок Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ñ ÑобÑтвенных нужд", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A2Toggle": "A2 Ход 2", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A3Toggle": "A3 Ход 3", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A17Toggle": "A17 Возврат РП", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A5Toggle": "A5 ", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A6Toggle": "A6 Tормоз 1", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A8Toggle": "A8 Вентиль #1, #2", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A20Toggle": "A20 Ход 1, 20 провод", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A25Toggle": "A25 Торможение ручное", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A22Toggle": "A22 Включение КК", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A23Toggle": "A23 Резервное включение мотор-компреÑÑора", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A39Toggle": "A39 Резервное управление", + "Entities.gmod_subway_81-714_mvm.Buttons.AV_Right.A14Toggle": "A14 18 провод", + + + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!Speedometer1": "Индикатор ÑкороÑти", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!Speedometer2": "Индикатор ÑкороÑти", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!ARSOch": "ОЧ: ОтÑутÑтвие чаÑтоты ÐРС", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!ARS0": "0: Сигнал ÐРС оÑтановки", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!ARS40": "40: Ограничение ÑкороÑти 40 км/ч", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!ARS60": "60: Ограничение ÑкороÑти 60 км/ч", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!ARS70": "70: Ограничение ÑкороÑти 70 км/ч", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!ARS80": "80: Ограничение ÑкороÑти 80 км/ч", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLSD1": "ЛСД: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLSD2": "ЛСД: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLVD": "1: Лампа Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLHRK": "2: Лампа хода реоÑтатного контроллера", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLST": "6: Лампа Ñигнализации торможениÑ", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLRD": "ДВ", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampRP": "РП: КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLSN": "ЛСÐ: Лампа Ñигнализации неиÑправноÑти", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLKVD": "ЛКВД: Контроль Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampLKT": "ЛКТ: Контроль тормоза", + "Entities.gmod_subway_81-717_mvm.Buttons.KiyvARS.!LampDV": "ДВ", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.IGLA23": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ Ð¸ Ñ‚Ñ€ÐµÑ‚ÑŒÑ ÐºÐ½Ð¾Ð¿ÐºÐ°", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.!IGLAFire": "ИГЛÐ: Пожар", + "Entities.gmod_subway_81-717_mvm.Buttons.IGLAButtons.!IGLAErr": "ИГЛÐ: ÐеиÑправноÑть", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!Speedometer1": "Индикатор ÑкороÑти", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!Speedometer2": "Индикатор ÑкороÑти", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!ARSOch": "ОЧ: ОтÑутÑтвие чаÑтоты ÐРС", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!ARS0": "0: Сигнал ÐРС оÑтановки", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!ARS40": "40: Ограничение ÑкороÑти 40 км/ч", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!ARS60": "60: Ограничение ÑкороÑти 60 км/ч", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!ARS70": "70: Ограничение ÑкороÑти 70 км/ч", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!ARS80": "80: Ограничение ÑкороÑти 80 км/ч", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLSD1": "ЛСД: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLSD2": "ЛСД: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLHRK": "ЛхРК: Лампа хода реоÑтатного контроллера", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampRP": "РП: КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLSN": "ЛСÐ: Лампа Ñигнализации неиÑправноÑти", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLN": "ЛÐ: Лампа направлениÑ", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLKVD": "ЛКВД: Контроль Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLKT": "ЛКТ: Контроль тормоза", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLKVC": "ЛКВЦ: Лампа контактора выÑоковольтных цепей", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLRS": "ЛРС: Лампа равенÑтва ÑкороÑтей", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLVD": "ЛВД: Лампа Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹", + "Entities.gmod_subway_81-717_mvm.Buttons.RoundARS.!LampLST": "ЛСТ: Лампа Ñигнализации торможениÑ", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!Speedometer1": "Индикатор ÑкороÑти", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!Speedometer2": "Индикатор ÑкороÑти", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!ARSOch": "ОЧ: ОтÑутÑтвие чаÑтоты ÐРС", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!ARS0": "0: Сигнал ÐРС оÑтановки", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!ARS40": "40: Ограничение ÑкороÑти 40 км/ч", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!ARS60": "60: Ограничение ÑкороÑти 60 км/ч", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!ARS70": "70: Ограничение ÑкороÑти 70 км/ч", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!ARS80": "80: Ограничение ÑкороÑти 80 км/ч", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLSD1": "ЛСД: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLSD2": "ЛСД: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLVD": "ЛВД: Лампа Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLHRK": "2: Лампа хода реоÑтатного контроллера", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLST": "6: Лампа Ñигнализации торможениÑ", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampRP": "РП: КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLSN": "ЛСÐ: Лампа Ñигнализации неиÑправноÑти", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLKVD": "ЛКВД: Контроль Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLKVC": "ЛКВЦ: Лампа контактора выÑоковольтных цепей", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLKT": "ЛКТ: Контроль тормоза", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLEKK": "ГЛЕБ: Лампа работы Глеба", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLN": "ЛÐ: Лампа направлениÑ", + "Entities.gmod_subway_81-717_mvm.Buttons.SquareARS.!LampLRS": "ЛРС: Лампа равенÑтва ÑкороÑтей" +} +]] diff --git a/lua/metrostroi_data/languages_/ru_buttons_717_lvz.lua b/lua/metrostroi_data/languages_/ru_buttons_717_lvz.lua new file mode 100644 index 0000000..15414e2 --- /dev/null +++ b/lua/metrostroi_data/languages_/ru_buttons_717_lvz.lua @@ -0,0 +1,293 @@ +return [[ +{ + "Lang": "ru", + "Name": "Russian", + + + "Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel.VUD2Toggle": "ВУД2: Выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÑŒÐ¼Ð¸", + "Entities.gmod_subway_81-717_lvz.Buttons.HelperPanel.VDLSet": "ВДЛ: Выключатель левых дверей", + "Entities.gmod_subway_81-717_lvz.Buttons.Battery_2.1:RC1Toggle": "РЦ-1: Разъединитель цепей ÐРС", + "Entities.gmod_subway_81-717_lvz.Buttons.Battery_2.1:VBToggle": "ВБ: Выключатель батареи", + "Entities.gmod_subway_81-717_lvz.Buttons.Battery_2.1:BPSToggle": "РЦ-БПС: Блок противоÑкатываниÑ", + "Entities.gmod_subway_81-717_lvz.Buttons.Battery_2.1:BUDToggle": "БУД: Блок ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÑŒÐ¼Ð¸", + "Entities.gmod_subway_81-717_lvz.Buttons.Battery_2.1:VRDToggle": "ВРД: Выключатель разрешающий движение (под 0)", + "Entities.gmod_subway_81-717_lvz.Buttons.VRD1.VRDToggle": "ВРД: Выключатель разрешающий движение (под 0)", + "Entities.gmod_subway_81-717_lvz.Buttons.Wiper.WiperToggle": "Дворник", + "Entities.gmod_subway_81-717_lvz.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_81-717_lvz.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.R_UNchToggle": "УÐЧ: УÑилитель низких чаÑтот", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.R_ZSToggle": "ЭС: Контроль ÑкÑтренной ÑвÑзи", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.R_GToggle": "Громкоговоритель", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.R_UPOToggle": "УПО: Информатор", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.2:KVTSet": "КБ: Кнопка БдительноÑти", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.VZ1Set": "ВЗ1: Вентиль Ð·Ð°Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ â„–1", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.VUD1Toggle": "ВУД: Выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÑŒÐ¼Ð¸", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.KDLSet": "КДЛ: Кнопка левых дверей", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.KDLKToggle": "Крышка кнопки КДЛ", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.KDLRSet": "ВДЛ: Выключатель левых дверей", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.KDLRKToggle": "Крышка кнопки ВДЛ", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.DoorSelectToggle": "Выбор Ñтороны Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.KRZDSet": "КРЗД: Кнопка резервного Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.VozvratRPSet": "Возврат реле перегрузки", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.GreenRPLight": "РП: Ð—ÐµÐ»Ñ‘Ð½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.AVULight": "ÐВУ: ÐвтоматичеÑкий выключатель управлениÑ", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.LKVPLight": "ЛКВП: Контроль выÑоковольного преобразователÑ", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.SPLight": "ЛСП: Лампа Ñигнализации пожара", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.ConverterProtectionSet": "Converter protection", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.KSNSet": "КСÐ: Кнопка Ñигнализации неиÑправноÑти", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.DIPoffSet": "Звонок", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.ARSToggle": "ÐРС: Включение ÑиÑтемы автоматичеÑкого Ñ€ÐµÐ³ÑƒÐ»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑкороÑти", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.ALSToggle": "ÐЛС: Включение ÑиÑтемы автоматичеÑкой локомотивной Ñигнализации", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.TormATToggle": "(placeholder)", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.OtklAVUToggle": "ОтклÐВУ: Отключение автоматичеÑкого Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (неиÑправноÑть ÐВУ)", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.L_1Toggle": "ОÑвещение Ñалона", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.L_2Toggle": "ОÑвещение кабины", + "Entities.gmod_subway_81-717_lvz.Buttons.Main.L_3Toggle": "ОÑвещение пульта", + "Entities.gmod_subway_81-717_lvz.Buttons.PassengerDoor.PassengerDoor": "Дверь в кабину машиниÑта из Ñалона", + "Entities.gmod_subway_81-717_lvz.Buttons.IGLAButtons.IGLA1Set": "ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°", + "Entities.gmod_subway_81-717_lvz.Buttons.IGLAButtons.IGLA2Set": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°", + "Entities.gmod_subway_81-717_lvz.Buttons.IGLAButtons.IGLA23": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ Ð¸ Ñ‚Ñ€ÐµÑ‚ÑŒÑ ÐºÐ½Ð¾Ð¿ÐºÐ°", + "Entities.gmod_subway_81-717_lvz.Buttons.IGLAButtons.IGLA3Set": "ИГЛÐ: Ð¢Ñ€ÐµÑ‚ÑŒÑ ÐºÐ½Ð¾Ð¿ÐºÐ°", + "Entities.gmod_subway_81-717_lvz.Buttons.IGLAButtons.IGLA4Set": "ИГЛÐ: Ð§ÐµÑ‚Ð²Ñ‘Ñ€Ñ‚Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°", + "Entities.gmod_subway_81-717_lvz.Buttons.IGLAButtons.!IGLAFire": "ИГЛÐ: Пожар", + "Entities.gmod_subway_81-717_lvz.Buttons.IGLAButtons.!IGLAErr": "ИГЛÐ: ÐеиÑправноÑть", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A61Toggle": "A61 Управление 6ым поездным проводом", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A55Toggle": "A55 Управление проводом 10ÐС", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A54Toggle": "A54 Управление проводом 10ÐК", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A56Toggle": "A56 Включение аккумулÑторной батареи", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A27Toggle": "A27 Включение ДИП и оÑвещениÑ", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A21Toggle": "A21 Управление дверей", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A10Toggle": "A10 Управление мотор-компреÑÑором", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A53Toggle": "A53 Питание КВЦ", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A43Toggle": "A43 Питание ÐРС 12Ð’", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A45Toggle": "A45 ÐРС провод 10ÐУ", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A42Toggle": "A42 Питание ÐРС 75Ð’", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A41Toggle": "A41 Торможение ÐРС", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:VUToggle": "ВУ Управление поезда", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A64Toggle": "A64 Включение оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A63Toggle": "A63 ИГЛÐ/БИС", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A50Toggle": "A50 ДИП и оÑвещение включение", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A51Toggle": "A51 ДИП и оÑвещение отключение", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A23Toggle": "A23 Резервное включение мотор-компреÑÑора", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A14Toggle": "A14 18 провод", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A75Toggle": "A75 Отопление кабины", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A1Toggle": "A1 Ход 1", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A2Toggle": "A2 Ход 2", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A3Toggle": "A3 Ход 3", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A17Toggle": "A17 Возврат РП", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A62Toggle": "A62 РадиоÑвÑзь", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A29Toggle": "A29 Радио опевещение", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A5Toggle": "A5 ", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A6Toggle": "A6 Тормоз 1", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A8Toggle": "A8 Вентиль #1, #2", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A20Toggle": "A20 Ход 1, 20 провод", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A25Toggle": "A25 Торможение ручное", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A22Toggle": "A22 Включение КК", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A30Toggle": "A30 Серводвигатель реоÑтатного контроллера", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A39Toggle": "A39 Резервное управление", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A44Toggle": "A44 Резервное управление поезда", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A80Toggle": "A80 Серводвигатель Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡Ð°Ñ‚ÐµÐ»Ñ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A65Toggle": "A65 ОÑвещение Ñалона", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:L_5Toggle": "Ð49 Ðварийное оÑвещение", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A24Toggle": "A24 ЗарÑд аккумулÑторной батареи", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A32Toggle": "A32 Открытие правых дверей", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A31Toggle": "A31 Открытие левых дверей", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A16Toggle": "A16 Закрытие дверей", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A13Toggle": "A13 Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A12Toggle": "A12 Резервное закрытие дверей", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A7Toggle": "A7 КраÑный фонарь", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A9Toggle": "A9 КраÑный фонарь", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A46Toggle": "A46 Фары белые", + "Entities.gmod_subway_81-717_lvz.Buttons.AV_1.1:A47Toggle": "A47 Фары белые", + "Entities.gmod_subway_81-717_lvz.Buttons.Schedule.!RouteNum": "М â„–\nRoute number", + "Entities.gmod_subway_81-717_lvz.Buttons.Schedule.!PathNum": "П â„–\nPath number", + "Entities.gmod_subway_81-717_lvz.Buttons.Schedule.!SchTime": "ВРЕМЯ ХОДÐ\nTotal schedule time", + "Entities.gmod_subway_81-717_lvz.Buttons.Schedule.!SchInterval": "ИÐТ\nTrain interval", + "Entities.gmod_subway_81-717_lvz.Buttons.Schedule.!SchHour": "ЧÐС\nHour", + "Entities.gmod_subway_81-717_lvz.Buttons.Schedule.!SchMin": "МИÐ\nMinute", + "Entities.gmod_subway_81-717_lvz.Buttons.Schedule.!SchSec": "СЕК\nSecond", + "Entities.gmod_subway_81-717_lvz.Buttons.Schedule.!SchArrival": "Arrival times", + "Entities.gmod_subway_81-717_lvz.Buttons.Schedule.!SchStations": "Station name", + "Entities.gmod_subway_81-717_lvz.Buttons.Stopkran.EmergencyBrakeValveToggle": "Стопкран", + "Entities.gmod_subway_81-717_lvz.Buttons.PneumaticPanels.!CylinderPressure": "Давление в тормозных цилиндрах (ТЦ)", + "Entities.gmod_subway_81-717_lvz.Buttons.PneumaticPanels.!LinePressure": "Давление в магиÑтралÑÑ… (краÑнаÑ: тормозной, чёрнаÑ: напорной)", + "Entities.gmod_subway_81-717_lvz.Buttons.Battery.BPSToggle": "РЦ-БПС: Блок противоÑкатываниÑ", + "Entities.gmod_subway_81-717_lvz.Buttons.Battery.RC1Toggle": "РЦ-1: Разъединитель цепей ÐРС", + "Entities.gmod_subway_81-717_lvz.Buttons.Battery.BUDToggle": "БУД: Блок ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÑŒÐ¼Ð¸", + "Entities.gmod_subway_81-717_lvz.Buttons.Battery.VBToggle": "ВБ: Выключатель батареи", + "Entities.gmod_subway_81-717_lvz.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_81-717_lvz.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!Speedometer1": "Индикатор ÑкороÑти", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!Speedometer2": "Индикатор ÑкороÑти", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!ARSOch": "ÐЧ: ОтÑутÑтвие чаÑтоты ÐРС", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!ARS0": "0: Сигнал ÐРС оÑтановки", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!ARS40": "40: Ограничение ÑкороÑти 40 км/ч", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!ARS60": "60: Ограничение ÑкороÑти 60 км/ч", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!ARS70": "70: Ограничение ÑкороÑти 70 км/ч", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!ARS80": "80: Ограничение ÑкороÑти 80 км/ч", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!LampLSD1": "ЛСД: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!LampLSD2": "ЛСД: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!LampLVD": "1: Лампа Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!LampLHRK": "2: Лампа хода реоÑтатного контроллера", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!LampLST": "6: Лампа Ñигнализации торможениÑ", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!LampLRD": "ЛРД", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!LampRP": "РП: КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!LampLSN": "ЛСÐ: Лампа Ñигнализации неиÑправноÑти", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!LampLKVD": "ЛКВД: Контроль Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!LampLKT": "ЛКТ: Контроль тормоза", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!LampDV": "ДВ: Датчик вращениÑ", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!SpeedFact1": "СкороÑть", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!SpeedFact2": "СкороÑть", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!ARSL20": "ÐЧ: ОтÑутÑтвие чаÑтоты ÐРС", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!ARSL40": "40: Ограничение ÑкороÑти 40 км/ч", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!ARSL60": "60: Ограничение ÑкороÑти 60 км/ч", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!ARSL70": "70: Ограничение ÑкороÑти 70 км/ч", + "Entities.gmod_subway_81-717_lvz.Buttons.SPBARS.!ARSL80": "80: Ограничение ÑкороÑти 80 км/ч", + "Entities.gmod_subway_81-717_lvz.Buttons.ParkingBrake2.1:ParkingBrakeToggle": "СтоÑночный тормоз", + "Entities.gmod_subway_81-717_lvz.Buttons.RearDoor.RearDoor": "ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ", + "Entities.gmod_subway_81-717_lvz.Buttons.GV.GVToggle": "Главный выключатель", + "Entities.gmod_subway_81-717_lvz.Buttons.Meters.!TotalVoltmeter": "Вольтметр выÑокого напрÑÐ¶ÐµÐ½Ð¸Ñ (кВ)", + "Entities.gmod_subway_81-717_lvz.Buttons.Meters.!TotalAmpermeter": "Ðмперметр (Ð)", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A61Toggle": "A61 Управление 6ым поездным проводом", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A55Toggle": "A55 Управление проводом 10ÐС", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A54Toggle": "A54 Управление проводом 10ÐК", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A56Toggle": "A56 Включение аккумулÑторной батареи", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A27Toggle": "A27 Включение ДИП и оÑвещениÑ", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A21Toggle": "A21 Управление дверей", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A10Toggle": "A10 Управление мотор-компреÑÑором", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A53Toggle": "A53 Питание КВЦ", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A43Toggle": "A43 Питание ÐРС 12Ð’", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A45Toggle": "A45 ÐРС провод 10ÐУ", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A42Toggle": "A42 Питание ÐРС 75Ð’", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A41Toggle": "A41 Торможение ÐРС", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.VUToggle": "ВУ Управление поезда", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A64Toggle": "A64 Включение оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A63Toggle": "A63 ИГЛÐ/БИС", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A50Toggle": "A50 ДИП и оÑвещение включение", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A51Toggle": "A51 ДИП и оÑвещение отключение", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A23Toggle": "A23 Резервное включение мотор-компреÑÑора", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A14Toggle": "A14 18 провод", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A75Toggle": "A75 Отопление кабины", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A1Toggle": "A1 Ход 1", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A2Toggle": "A2 Ход 2", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A3Toggle": "A3 Ход 3", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A17Toggle": "A17 Возврат РП", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A62Toggle": "A62 РадиоÑвÑзь", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A29Toggle": "A29 Радио опевещение", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A5Toggle": "A5 ", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A6Toggle": "A6 Тормоз 1", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A8Toggle": "A8 Вентиль #1, #2", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A20Toggle": "A20 Ход 1, 20 провод", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A25Toggle": "A25 Торможение ручное", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A22Toggle": "A22 Включение КК", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A30Toggle": "A30 Серводвигатель реоÑтатного контроллера", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A39Toggle": "A39 Резервное управление", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A44Toggle": "A44 Резервное управление поезда", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A80Toggle": "A80 Серводвигатель Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡Ð°Ñ‚ÐµÐ»Ñ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A65Toggle": "A65 ОÑвещение Ñалона", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.L_5Toggle": "Ð49 Ðварийное оÑвещение", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A24Toggle": "A24 ЗарÑд аккумулÑторной батареи", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A32Toggle": "A32 Открытие правых дверей", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A31Toggle": "A31 Открытие левых дверей", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A16Toggle": "A16 Закрытие дверей", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A13Toggle": "A13 Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A12Toggle": "A12 Резервное закрытие дверей", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A7Toggle": "A7 КраÑный фонарь", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A9Toggle": "A9 КраÑный фонарь", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A46Toggle": "A46 Фары белые", + "Entities.gmod_subway_81-717_lvz.Buttons.AV.A47Toggle": "A47 Фары белые", + "Entities.gmod_subway_81-717_lvz.Buttons.Front.L_4Toggle": "Выключатель фар", + "Entities.gmod_subway_81-717_lvz.Buttons.Front.VUSToggle": "ВУС: Выключатель уÑиленого Ñвета ходовых фар", + "Entities.gmod_subway_81-717_lvz.Buttons.Front.VADToggle": "Ð’ÐД: Включение аварийного Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ (неиÑправноÑть реле ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð²ÐµÑ€ÐµÐ¹)", + "Entities.gmod_subway_81-717_lvz.Buttons.Front.VAHToggle": "Ð’ÐÐ¥: Включение аварийного хода (неиÑправноÑть реле педали безопаÑноÑти)", + "Entities.gmod_subway_81-717_lvz.Buttons.Front.KRPSet": "КРП: Кнопка резервного пуÑка", + "Entities.gmod_subway_81-717_lvz.Buttons.Front.RezMKSet": "Резервное включение мотор-компреÑÑора", + "Entities.gmod_subway_81-717_lvz.Buttons.Front.KDPSet": "КДП: Кнопка правых дверей", + "Entities.gmod_subway_81-717_lvz.Buttons.Front.KDPKToggle": "Крышка кнопки КДП", + "Entities.gmod_subway_81-717_lvz.Buttons.Front.PN": "Контроль пневмотормоза", + "Entities.gmod_subway_81-717_lvz.Buttons.BPSNFront.!Voltage": "ÐапрÑжение цепей управлениÑ", + "Entities.gmod_subway_81-717_lvz.Buttons.BPSNFront.VMKToggle": "Включение мотор-компреÑÑора", + "Entities.gmod_subway_81-717_lvz.Buttons.BPSNFront.BPSNonToggle": "БПСÐ: Блок Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ñ ÑобÑтвенных нужд", + "Entities.gmod_subway_81-717_lvz.Buttons.BPSNFront.ARS13Set": "ÐРС 13Ð’: Проверка Ñтабилизированого напрÑÐ¶ÐµÐ½Ð¸Ñ ÐРС", + "Entities.gmod_subway_81-717_lvz.Buttons.ParkingBrake.ParkingBrakeToggle": "СтоÑночный тормоз", + "Entities.gmod_subway_81-717_lvz.Buttons.ParkingBrake.DriverValveTLDisconnectToggle": "Кран двойной Ñ‚Ñги напорной магиÑтрали", + "Entities.gmod_subway_81-717_lvz.Buttons.CabinDoor.CabinDoor": "Дверь в кабину машиниÑта", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!K16": "ÐЧ: ОтÑутÑтвие чаÑтоты ÐРС", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!OS": "0: Сигнал ÐРС оÑтановки", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!AVT": "40: Ограничение ÑкороÑти 40 км/ч", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS": "60: Ограничение ÑкороÑти 60 км/ч", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!KI1": "70: Ограничение ÑкороÑти 70 км/ч", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!KI2": "80: Ограничение ÑкороÑти 80 км/ч", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARSOch": "ÐЧ: ОтÑутÑтвие чаÑтоты ÐРС", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS0": "0: Сигнал ÐРС оÑтановки", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS40": "40: Ограничение ÑкороÑти 40 км/ч", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS60": "60: Ограничение ÑкороÑти 60 км/ч", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS70": "70: Ограничение ÑкороÑти 70 км/ч", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.!ARS80": "80: Ограничение ÑкороÑти 80 км/ч", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.KHSet": "", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.KSZDSet": "", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.VAVToggle": "", + "Entities.gmod_subway_81-717_lvz.Buttons.PUAVN.VZPToggle": "", + "Entities.gmod_subway_81-717_lvz.Buttons.PassengerDoor1.PassengerDoor": "Дверь в кабину машиниÑта из Ñалона", + "Entities.gmod_subway_81-717_lvz.Buttons.Reverser.KVReverserDown": "РеверÑор назад", + "Entities.gmod_subway_81-717_lvz.Buttons.Reverser.KVReverserUp": "РеверÑор вперёд", + "Entities.gmod_subway_81-717_lvz.Buttons.EPKDisconnect.EPKToggle": "Кран ЭПВ", + "Entities.gmod_subway_81-717_lvz.Buttons.Help.ShowHelp": "Помощь в вождении поезда", + "Entities.gmod_subway_81-717_lvz.Buttons.UAVAPanel.UAVAToggle": "УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа (отключение автоÑтопа)", + "Entities.gmod_subway_81-717_lvz.Buttons.UAVAPanel.UAVACToggle ": "УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа (воÑÑтановление контактов)", + "Entities.gmod_subway_81-717_lvz.Buttons.DriverValveDisconnect.DriverValveDisconnectToggle": "Клапан разобщениÑ", + "Entities.gmod_subway_81-717_lvz.Buttons.DriverValveDisconnect.DriverValveBLDisconnectToggle": "Кран двойной Ñ‚Ñги тормозной магиÑтрали", + "Entities.gmod_subway_81-717_lvz.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Выключение воздухораÑпределителÑ", + + + + + "Entities.gmod_subway_81-714_lvz.Buttons.GV.GVToggle": "Главный выключатель", + "Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_81-714_lvz.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_81-714_lvz.Buttons.RearDoor.RearDoor": "ЗаднÑÑ Ð´Ð²ÐµÑ€ÑŒ", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Left.DriverValveBLDisconnectToggle": "Кран двойной Ñ‚Ñги тормозной магиÑтрали", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Left.DriverValveTLDisconnectToggle": "Кран двойной Ñ‚Ñги напорной магиÑтрали", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Left.A65Toggle": "A65 Interior lighting", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Left.A56Toggle": "A56 Включение аккумулÑторной батареи", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Left.A63Toggle": "A63 IGLA/BIS", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Left.A10Toggle": "A10 Motor-compressor control", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Left.A30Toggle": "A30 Rheostat controller motor power", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Left.A80Toggle": "A80 Power circuit mode switch motor power", + "Entities.gmod_subway_81-714_lvz.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_81-714_lvz.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_81-714_lvz.Buttons.FrontPneumatic.ParkingBrakeToggle": "СтоÑночный тормоз", + "Entities.gmod_subway_81-714_lvz.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Выключение воздухораÑпределителÑ", + "Entities.gmod_subway_81-714_lvz.Buttons.FrontDoor.FrontDoor": "ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ", + "Entities.gmod_subway_81-714_lvz.Buttons.Battery.VBToggle": "ВБ: Выключатель батареи", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A54Toggle": "A54 Управление проводом 10ÐК", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A27Toggle": "A27 Включение ДИП и оÑвещениÑ", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A24Toggle": "A24 ЗарÑд аккумулÑторной батареи", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A53Toggle": "A53 Питание КВЦ", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A13Toggle": "A13 Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A32Toggle": "A32 Открытие правых дверей", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A31Toggle": "A31 Открытие левых дверей", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A16Toggle": "A16 Закрытие дверей", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A12Toggle": "A12 Резервное закрытие дверей", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A50Toggle": "A50 ДИП и оÑвещение включение", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A51Toggle": "A51 ДИП и оÑвещение отключение", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A1Toggle": "A1 Ход 1", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.KRPSet": "ПУСК: Кнопка пуÑка", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.VozvratRPSet": "Возврат реле перегрузки", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.RezMKSet": "Резервное включение мотор-компреÑÑора", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.VMKToggle": "Включение мотор-компреÑÑора", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.BPSNonToggle": "БПСÐ: Блок Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ñ ÑобÑтвенных нужд", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A2Toggle": "A2 Ход 2", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A3Toggle": "A3 Ход 3", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A17Toggle": "A17 Возврат РП", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A5Toggle": "A5 ", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A6Toggle": "A6 Tормоз 1", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A8Toggle": "A8 Вентиль #1, #2", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A20Toggle": "A20 Ход 1, 20 провод", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A25Toggle": "A25 Торможение ручное", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A22Toggle": "A22 Включение КК", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A23Toggle": "A23 Резервное включение мотор-компреÑÑора", + "Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A39Toggle": "A39 Резервное управление", +"Entities.gmod_subway_81-714_lvz.Buttons.AV_Right.A14Toggle": "A14 18 провод" +} +]] diff --git a/lua/metrostroi_data/languages_/ru_buttons_720.lua b/lua/metrostroi_data/languages_/ru_buttons_720.lua new file mode 100644 index 0000000..188a0d6 --- /dev/null +++ b/lua/metrostroi_data/languages_/ru_buttons_720.lua @@ -0,0 +1,237 @@ +return [[ +{ + "Lang": "ru", + "Name": "Russian", + + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF1Set": "ВитÑзь: F1", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF2Set": "ВитÑзь: Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ñтраница", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF3Set": "ВитÑзь: ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ñтраница", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF4Set": "ВитÑзь: Штатный режим", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz1Set": "ВитÑзь: 1", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz4Set": "ВитÑзь: 4", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz7Set": "ВитÑзь: 7", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz2Set": "ВитÑзь: 2", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz5Set": "ВитÑзь: 5", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz8Set": "ВитÑзь: 8", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz0Set": "ВитÑзь: 0", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz3Set": "ВитÑзь: 3", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz6Set": "ВитÑзь: 6", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.Vityaz9Set": "ВитÑзь: 9", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF5Set": "ВитÑзь: ЗВ", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF6Set": "ВитÑзь: Вверх\\СкороÑть", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF7Set": "ВитÑзь: Вниз\\Токи", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF8Set": "ВитÑзь: Ввод\\Вагонное оборудование", + "Entities.gmod_subway_81-720.Buttons.VityazButtons.VityazF9Set": "ВитÑзь: Выбор\\Управление вагонным оборудованием", + "Entities.gmod_subway_81-720.Buttons.RV.EmerX1Set": "Ход 1 резервный", + "Entities.gmod_subway_81-720.Buttons.RV.EmerX2Set": "Ход 2 резервный", + "Entities.gmod_subway_81-720.Buttons.RV.EmerCloseDoorsSet": "Закрытие дверей резервное", + "Entities.gmod_subway_81-720.Buttons.RV.EmergencyDoorsToggle": "Двери резервные", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode-": "Режим работы вентилÑтора: +", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentCondMode+": "Режим работы вентилÑтора: -", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode+": "+", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentHeatMode-": "-", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode-": "Сила вентилÑтора: +", + "Entities.gmod_subway_81-720.Buttons.BackVent.VentStrengthMode+": "Сила вентилÑтора: -", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV1Toggle": "SF1: Питание цепей ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð°Ð³Ð¾Ð½Ð°", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV2Toggle": "SF2: Питание БУВ", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV3Toggle": "SF3: Питание БУТП", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV4Toggle": "SF4: БУТП Управление", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV5Toggle": "SF5: БУТП Управление резервное", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV6Toggle": "SF6: БУТП Питание", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV7Toggle": "SF7: ББЭ", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV8Toggle": "SF8: БВ управление", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV9Toggle": "SF9: БВ питание", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV10Toggle": "SF10: ППО", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV11Toggle": "SF11: Мотор-компреÑÑор", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV12Toggle": "SF12: Двери закрытие", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV13Toggle": "SF13: Двери открытие левых", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV14Toggle": "SF14: Двери открытие правых", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV15Toggle": "SF15: Двери торцевые", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV16Toggle": "SF16: Оповещение", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV17Toggle": "SF17: ЭкÑÑ‚Ñ€ÐµÐ½Ð½Ð°Ñ ÑвÑзь", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV18Toggle": "SF18: Резерв", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV19Toggle": "SF19: ОÑвещение Ñалона питание", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV20Toggle": "SF20: ОÑвещение Ñалона аварийное", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV21Toggle": "SF21: Датчик ÑкороÑти", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV22Toggle": "SF22: Тормоз ÑтоÑночный", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV23Toggle": "SF23: ВентилÑÑ†Ð¸Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ 1-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV24Toggle": "SF24: ВентилÑÑ†Ð¸Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ 2-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV25Toggle": "SF25: ВентилÑÑ†Ð¸Ñ Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ðµ 1-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV26Toggle": "SF26: ВентилÑÑ†Ð¸Ñ Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ðµ 2-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV27Toggle": "SF27: Питание Ð²Ð¾Ð·Ð±ÑƒÐ´Ð¸Ñ‚ÐµÐ»Ñ FIXME", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV28Toggle": "SF28: Питание ЗКК FIXME", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV29Toggle": "SF29: Токоприёмники", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV30Toggle": "SF30: Табло", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV31Toggle": "SF31: Резерв", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV32Toggle": "SF32: Резерв", + "Entities.gmod_subway_81-720.Buttons.PVZ.SFV33Toggle": "SF33: Резерв", + "Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPMenuSet": "ÐСÐП: Меню", + "Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPUpSet": "ÐСÐП: Вверх", + "Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPDownSet": "ÐСÐП: Вниз", + "Entities.gmod_subway_81-720.Buttons.ASNP.R_ASNPOnToggle": "ÐСÐП: Включение", + "Entities.gmod_subway_81-720.Buttons.PneumoHelper1.!BrakeCylinder": "Тормозной цилиндр", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF1Toggle": "SF1: Питание общее", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF2Toggle": "SF2: Управление оÑновное", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF3Toggle": "SF3: Управление резервное", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF4Toggle": "SF4: БÐРС", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF5Toggle": "SF5: БУП", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF6Toggle": "SF6: БКЦУ", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF7Toggle": "SF7: ППО", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF8Toggle": "SF8: Оповещение", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF9Toggle": "SF9: РадиоÑвÑзь", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF10Toggle": "SF10: ÐžÑ€Ð¸ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð²Ð°Ð³Ð¾Ð½Ð°", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF11Toggle": "SF11: Ðаправление движениÑ", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF12Toggle": "SF12: Фары 1-й группы", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF13Toggle": "SF13: Фары 2-й группы", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF14Toggle": "SF14: Огни габаритные", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF15Toggle": "SF15: ОÑвещение кабины", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF16Toggle": "SF16: Отопление", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF17Toggle": "SF17: Кондиционер кабины", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF18Toggle": "SF18: ГребнеÑмазыватель", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF19Toggle": "SF19: Питание КРМ оÑновное", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF20Toggle": "SF20: Питание КРМ резервное", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF21Toggle": "SF21: Двери открытие", + "Entities.gmod_subway_81-720.Buttons.BackPPZ.SF22Toggle": "SF22: Двери закрытие", + "Entities.gmod_subway_81-720.Buttons.BTO.K29Toggle": "КРМШ", + "Entities.gmod_subway_81-720.Buttons.PassengerDoor2.PassengerDoor": "Дверь в кабину машиниÑта из Ñалона\nPass door", + "Entities.gmod_subway_81-720.Buttons.VoltHelper2.!HV": "Киловольтметр выÑокого напрÑжениÑ(контактный рельÑ)", + "Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I1_3": "Ток 1-й группы Ñ‚Ñговых двигателей", + "Entities.gmod_subway_81-720.Buttons.VoltHelper2.!I2_4": "Ток 2-й группы Ñ‚Ñговых двигателей", + "Entities.gmod_subway_81-720.Buttons.GV.GVToggle": "Разъединитель БРУ (ГВ)", + "Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_81-720.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_81-720.Buttons.RearDoor1.RearDoor": "ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ\nFront door", + "Entities.gmod_subway_81-720.Buttons.RearDoor.RearDoor": "ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ\nFront door", + "Entities.gmod_subway_81-720.Buttons.BackDown.Pant1Toggle": "Отжатие токоприёмников 1-й группы", + "Entities.gmod_subway_81-720.Buttons.BackDown.Pant2Toggle": "Отжатие токоприёмников 2-й группы", + "Entities.gmod_subway_81-720.Buttons.BackDown.Vent1Toggle": "ВентилÑÑ†Ð¸Ñ 1-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°", + "Entities.gmod_subway_81-720.Buttons.BackDown.Vent2Toggle": "ВентилÑÑ†Ð¸Ñ 2-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°", + "Entities.gmod_subway_81-720.Buttons.BackDown.VentToggle": "", + "Entities.gmod_subway_81-720.Buttons.BackDown.PassLightToggle": "ОÑвещение Ñалона", + "Entities.gmod_subway_81-720.Buttons.BackDown.CabLightToggle": "ОÑвещение кабины", + "Entities.gmod_subway_81-720.Buttons.BackDown.Headlights1Toggle": "Фары 1-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°", + "Entities.gmod_subway_81-720.Buttons.BackDown.Headlights2Toggle": "Фары 2-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°", + "Entities.gmod_subway_81-720.Buttons.BackDown.ParkingBrakeToggle": "СтоÑночный тормоз", + "Entities.gmod_subway_81-720.Buttons.BackDown.TorecDoorsToggle": "Двери торцевые", + "Entities.gmod_subway_81-720.Buttons.BackDown.BBERToggle": "ББЭ Резервнео включение", + "Entities.gmod_subway_81-720.Buttons.BackDown.BBEToggle": "ББЭ", + "Entities.gmod_subway_81-720.Buttons.BackDown.CompressorToggle": "КомпреÑÑор", + "Entities.gmod_subway_81-720.Buttons.BackDown.CabLightStrengthToggle": "Сила оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹", + "Entities.gmod_subway_81-720.Buttons.BackDown.AppLights1Toggle": "ОÑвещение аппаратного отÑека", + "Entities.gmod_subway_81-720.Buttons.BackDown.AppLights2Toggle": "", + "Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock-": "Блокировка неиÑправных БÐРСов: -", + "Entities.gmod_subway_81-720.Buttons.BackDown.BARSBlock+": "Блокировка неиÑправных БÐРСов: +", + "Entities.gmod_subway_81-720.Buttons.BackDown.BatteryToggle": "Выключатель батареи", + "Entities.gmod_subway_81-720.Buttons.BackDown.ALSFreqToggle": "Дешифратор ÐЛС", + "Entities.gmod_subway_81-720.Buttons.VoltHelper1.!Battery": "Вольтметр бортовой Ñети(батареÑ)", + "Entities.gmod_subway_81-720.Buttons.PassengerDoor.PassengerDoor": "Дверь в кабину машиниÑта из Ñалона\nPass door", + "Entities.gmod_subway_81-720.Buttons.CabinDoorR.CabinDoorRight": "Дверь в кабину машиниÑта\nCabin door", + "Entities.gmod_subway_81-720.Buttons.CabinDoorL.CabinDoorLeft": "Дверь в кабину машиниÑта\nCabin door", + "Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_81-720.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectLToggle": "Выбор левых дверей", + "Entities.gmod_subway_81-720.Buttons.PUL.DoorSelectRToggle": "Выбор правых дверей", + "Entities.gmod_subway_81-720.Buttons.PUL.DoorBlockToggle": "Блокировка дверей", + "Entities.gmod_subway_81-720.Buttons.PUL.!DoorLeftLamp": "Работа кнопки левых дверей", + "Entities.gmod_subway_81-720.Buttons.PUL.DoorLeftSet": "Левые двери", + "Entities.gmod_subway_81-720.Buttons.PUU.!DoorsClosed": "Двери закрыты", + "Entities.gmod_subway_81-720.Buttons.PUU.StandToggle": "СтоÑнка", + "Entities.gmod_subway_81-720.Buttons.PUU.TickerToggle": "Ð‘ÐµÐ³ÑƒÑ‰Ð°Ñ Ñтрока", + "Entities.gmod_subway_81-720.Buttons.PUU.KAHToggle": "КÐÐ¥", + "Entities.gmod_subway_81-720.Buttons.PUU.ALSToggle": "ÐЛС", + "Entities.gmod_subway_81-720.Buttons.PUU.FDepotToggle": "Выезд из депо", + "Entities.gmod_subway_81-720.Buttons.PUU.!HVoltage": "Сеть контактнаÑ", + "Entities.gmod_subway_81-720.Buttons.PUU.PassSchemeToggle": "Табло наддверное", + "Entities.gmod_subway_81-720.Buttons.PUU.EmergencyCompressorSet": "КомпреÑÑор резервный", + "Entities.gmod_subway_81-720.Buttons.PUU.EnableBVSet": "Включение защиты", + "Entities.gmod_subway_81-720.Buttons.PUU.DisableBVSet": "Отключение БВ", + "Entities.gmod_subway_81-720.Buttons.PUU.RingSet": "Передача управлениÑ(звонок)", + "Entities.gmod_subway_81-720.Buttons.PUU.R_Program2Set": "Программа 2", + "Entities.gmod_subway_81-720.Buttons.PUU.R_AnnouncerToggle": "Информатор", + "Entities.gmod_subway_81-720.Buttons.PUU.R_LineToggle": "ЛиниÑ", + "Entities.gmod_subway_81-720.Buttons.PUU.R_EmerSet": "СвÑзь ÑкÑтреннаÑ", + "Entities.gmod_subway_81-720.Buttons.PUU.R_Program1Set": "ПуÑк запиÑи", + "Entities.gmod_subway_81-720.Buttons.PUU.EnableBVEmerSet": "Возврат БВ резервный", + "Entities.gmod_subway_81-720.Buttons.PUU.EmergencyControlsToggle": "Управление резервное", + "Entities.gmod_subway_81-720.Buttons.PUU.WiperToggle": "Стекло-очиÑтитель", + "Entities.gmod_subway_81-720.Buttons.PUU.!VDop": "ДопуÑÑ‚Ð¸Ð¼Ð°Ñ ÑкороÑть", + "Entities.gmod_subway_81-720.Buttons.PUU.!VFact": "ФактичеÑÐºÐ°Ñ ÑкороÑть", + "Entities.gmod_subway_81-720.Buttons.PUU.!VPred": "ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ ÑкороÑть", + "Entities.gmod_subway_81-720.Buttons.PUU.!VDop2": "ДопуÑÑ‚Ð¸Ð¼Ð°Ñ ÑкороÑть", + "Entities.gmod_subway_81-720.Buttons.PUU.!Acc": "УÑкорение", + "Entities.gmod_subway_81-720.Buttons.PUU.!Forw": "Движение вперёд", + "Entities.gmod_subway_81-720.Buttons.PUU.!Back": "Движение назад", + "Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeAddSet": "(резервный) Тормоз", + "Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeReleaseSet": "(резервный) ОтпуÑк", + "Entities.gmod_subway_81-720.Buttons.PUR.EmerBrakeToggle": "Тормоз резервный", + "Entities.gmod_subway_81-720.Buttons.PUR.EmergencyBrakeToggle": "Тормоз ÑкÑтренный", + "Entities.gmod_subway_81-720.Buttons.PUR.DoorCloseToggle": "Закрытие дверей", + "Entities.gmod_subway_81-720.Buttons.PUR.AttentionMessageSet": "ВоÑприÑтие ÑообщениÑ", + "Entities.gmod_subway_81-720.Buttons.PUR.AttentionSet": "БдительноÑть", + "Entities.gmod_subway_81-720.Buttons.PUR.AttentionBrakeSet": "ВоÑприÑтие торможениÑ", + "Entities.gmod_subway_81-720.Buttons.PUR.HornBSet": "Сигнал", + "Entities.gmod_subway_81-720.Buttons.PUR.DoorRightSet": "Прав двери", + "Entities.gmod_subway_81-720.Buttons.PUR.!DoorRightLamp": "Работа кнопки правых дверей", + "Entities.gmod_subway_81-720.Buttons.PneumoHelper2.!BrakeTrainLine": "КраÑÐ½Ð°Ñ - тормознаÑ, Ñ‡Ñ‘Ñ€Ð½Ð°Ñ - Ð½Ð°Ð¿Ð¾Ñ€Ð½Ð°Ñ Ð¼Ð°Ð³Ð¸Ñтраль", + + "Entities.gmod_subway_81-721.Buttons.GV.GVToggle": "Разъединитель БРУ (ГВ)", + "Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_81-721.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_81-721.Buttons.FrontDoor.FrontDoor": "ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ\nFront door", + "Entities.gmod_subway_81-721.Buttons.RearDoor.RearDoor": "ЗаднÑÑ Ð´Ð²ÐµÑ€ÑŒ\nRear door", + "Entities.gmod_subway_81-721.Buttons.Battery.BatteryToggle": "БатареÑ", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV1Toggle": "SF1: Питание цепей ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð°Ð³Ð¾Ð½Ð°", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV2Toggle": "SF2: Питание БУВ", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV3Toggle": "SF3: Питание БУТП", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV4Toggle": "SF4: БУТП Управление", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV5Toggle": "SF5: БУТП Управление резервное", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV6Toggle": "SF6: БУТП Питание", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV7Toggle": "SF7: ББЭ", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV8Toggle": "SF8: БВ управление", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV9Toggle": "SF9: БВ питание", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV10Toggle": "SF10: ППО", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV11Toggle": "SF11: Мотор-компреÑÑор", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV12Toggle": "SF12: Двери закрытие", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV13Toggle": "SF13: Двери открытие левых", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV14Toggle": "SF14: Двери открытие правых", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV15Toggle": "SF15: Двери торцевые", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV16Toggle": "SF16: Оповещение", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV17Toggle": "SF17: ЭкÑÑ‚Ñ€ÐµÐ½Ð½Ð°Ñ ÑвÑзь", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV18Toggle": "SF18: Резерв", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV19Toggle": "SF19: ОÑвещение Ñалона питание", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV20Toggle": "SF20: ОÑвещение Ñалона аварийное", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV21Toggle": "SF21: Датчик ÑкороÑти", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV22Toggle": "SF22: Тормоз ÑтоÑночный", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV23Toggle": "SF23: ВентилÑÑ†Ð¸Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ 1-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV24Toggle": "SF24: ВентилÑÑ†Ð¸Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ 2-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV25Toggle": "SF25: ВентилÑÑ†Ð¸Ñ Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ðµ 1-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV26Toggle": "SF26: ВентилÑÑ†Ð¸Ñ Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ðµ 2-Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV27Toggle": "SF27: Питание Ð²Ð¾Ð·Ð±ÑƒÐ´Ð¸Ñ‚ÐµÐ»Ñ FIXME", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV28Toggle": "SF28: Питание ЗКК FIXME", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV29Toggle": "SF29: Токоприёмники", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV30Toggle": "SF30: Табло", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV31Toggle": "SF31: Резерв", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV32Toggle": "SF32: Резерв", + "Entities.gmod_subway_81-721.Buttons.PVZ.SFV33Toggle": "SF33: Резерв", + "Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_81-721.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + + "Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1USet": "ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вверх", + "Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1Set": "ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°", + "Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA1DSet": "ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вниз", + "Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2USet": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вверх", + "Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2Set": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°", + "Entities.gmod_subway_81-720.Buttons.IGLAButtons.IGLA2DSet": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вниз", + "Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLASR": "ИГЛÐ: SR", + "Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLARX": "ИГЛÐ: RX", + "Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAErr": "ИГЛÐ: Отказ", + "Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAOSP": "ИГЛÐ: ОСП(Сработка огнетушителей)", + "Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAPI": "ИГЛÐ: ПИ(Пожар)", + "Entities.gmod_subway_81-720.Buttons.IGLAButtons.!IGLAOff": "ИГЛÐ: Откл", + "Entities.gmod_subway_81-720.Buttons.PUU.KAHkToggle": "Крышка кнопки КÐÐ¥", + "Entities.gmod_subway_81-720.Buttons.PUU.ALSkToggle": "Крышка кнопки ÐЛС", + "Entities.gmod_subway_81-720.Buttons.PUR.AccelRateSet": "Темп разгона(Режим подъём)", + + "Entities.gmod_subway_81-720.Buttons.BTO.UAVAToggle": "УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа" +} +]] diff --git a/lua/metrostroi_data/languages_/ru_buttons_722.lua b/lua/metrostroi_data/languages_/ru_buttons_722.lua new file mode 100644 index 0000000..a52cb6a --- /dev/null +++ b/lua/metrostroi_data/languages_/ru_buttons_722.lua @@ -0,0 +1,219 @@ +return [[ +{ + "Lang": "ru", + "Name": "Russian", + + + "Entities.gmod_subway_81-722.Buttons.StopKran.UAVAToggle": "Выключатель автоÑтопа", + "Entities.gmod_subway_81-722.Buttons.StopKran.EmergencyBrakeValveToggle": "Стопкран", + "Entities.gmod_subway_81-722.Buttons.PU2.ARSToggle": "ÐРС: ÐвтоматичеÑкое регулирвоание ÑкороÑти", + "Entities.gmod_subway_81-722.Buttons.PU2.ALSToggle": "ÐЛС:ÐвтоматичеÑÐºÐ°Ñ Ð»Ð¾ÐºÐ¾Ð¼Ð¾Ñ‚Ð¸Ð²Ð½Ð°Ñ ÑигнализациÑ", + "Entities.gmod_subway_81-722.Buttons.PU2.GlassWasherSet": "Омыватель Ñтекла", + "Entities.gmod_subway_81-722.Buttons.PU2.GlassCleaner+": "СтеклоочиÑтитель(вверх)", + "Entities.gmod_subway_81-722.Buttons.PU2.GlassCleaner-": "СтеклоочиÑтитель(вниз)", + "Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeTPlusKToggle": "Крышка кнопки Ðварийный тормоз \"Т+\"", + "Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeTPlusSet": "Ðварийный тормоз \"Т+\"", + "Entities.gmod_subway_81-722.Buttons.PU2.EmergencyBrakeToggle": "ЭкÑтренное торможение", + "Entities.gmod_subway_81-722.Buttons.PU2.VigilanceSet": "БдительноÑть", + "Entities.gmod_subway_81-722.Buttons.PU2.Headlights+": "Фары(вверх)", + "Entities.gmod_subway_81-722.Buttons.PU2.Headlights-": "Фары(вниз)", + "Entities.gmod_subway_81-722.Buttons.PU2.DoorSelectToggle": "Выбор Ñтороны дверей", + "Entities.gmod_subway_81-722.Buttons.PU2.DoorClose+": "Закрытие дверей(вверх)", + "Entities.gmod_subway_81-722.Buttons.PU2.DoorClose-": "Закрытие дверей(вниз)", + "Entities.gmod_subway_81-722.Buttons.PU2.DoorRightSet": "Открытие правых дверей", + "Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatUpSet": "СÐРМÐТ: Вверх", + "Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatDownSet": "СÐРМÐТ: Вниз", + "Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatEnterSet": "СÐРМÐТ: Enter", + "Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatEscSet": "СÐРМÐТ: Esc", + "Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF1Set": "СÐРМÐТ: F1", + "Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF2Set": "СÐРМÐТ: F2", + "Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF3Set": "СÐРМÐТ: F3", + "Entities.gmod_subway_81-722.Buttons.SarmatButtons.SarmatF4Set": "СÐРМÐТ: F4", + "Entities.gmod_subway_81-722.Buttons.HelperLamps.!LRD": "ЛРД: Лампа Ñ€Ð°Ð·Ñ€ÐµÑˆÐ°ÑŽÑ‰Ð°Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ðµ(разрешение Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´ 0)", + "Entities.gmod_subway_81-722.Buttons.HelperLamps.!LPT": "ЛПТ: Лампа включение пневмотормоза", + "Entities.gmod_subway_81-722.Buttons.HelperLamps.!RS": "Р/С: Лампа аварийного Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ñ Ñ€Ð°Ð´Ð¸Ð¾Ñтанции", + "Entities.gmod_subway_81-722.Buttons.HelperLamps.!AVS": "ÐВС Лампа низкого Ð´Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¢Ðœ", + "Entities.gmod_subway_81-722.Buttons.HelperLamps.!LSD": "ЛСД: Лампа Ñигнализации Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_81-722.Buttons.HelperLamps.!RU": "РУ: Лампа Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð ÐµÐ»Ðµ УправлениÑ", + "Entities.gmod_subway_81-722.Buttons.HelperLamps.!04": "ÐЧ: Лампа отÑутÑÑ‚Ð²Ð¸Ñ Ñ‡Ð°Ñтоты (0км\\ч)", + "Entities.gmod_subway_81-722.Buttons.HelperLamps.!00": "0: Лампа Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð² 0км\\ч", + "Entities.gmod_subway_81-722.Buttons.HelperLamps.!40": "40: Лампа Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð² 40км\\ч", + "Entities.gmod_subway_81-722.Buttons.HelperLamps.!60": "60 Лампа Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð² 60км\\ч", + "Entities.gmod_subway_81-722.Buttons.HelperLamps.!70": "70: Лампа Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð² 70км\\ч", + "Entities.gmod_subway_81-722.Buttons.HelperLamps.!80": "80: Лампа Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð² 80км\\ч", + "Entities.gmod_subway_81-722.Buttons.CabinDoorL.CabinDoorLeft": "Дверь в кабину машиниÑта", + "Entities.gmod_subway_81-722.Buttons.BMP.SarmatPathSet": "СÐРМÐТ: Путь", + "Entities.gmod_subway_81-722.Buttons.BMP.SarmatLineSet": "СÐРМÐТ: ЛиниÑ", + "Entities.gmod_subway_81-722.Buttons.BMP.SarmatZeroSet": "СÐРМÐТ: >0<", + "Entities.gmod_subway_81-722.Buttons.BMP.SarmatStartSet": "СÐРМÐТ: ПуÑк", + "Entities.gmod_subway_81-722.Buttons.BTO.K29Toggle": "КРМШ", + "Entities.gmod_subway_81-722.Buttons.BTO.K9Toggle": "РВТБ", + "Entities.gmod_subway_81-722.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_81-722.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber1Set": "ÐŸÐµÑ€Ð²Ð°Ñ Ñ†Ð¸Ñ„Ñ€Ð°", + "Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber2Set": "Ð’Ñ‚Ð¾Ñ€Ð°Ñ Ñ†Ð¸Ñ„Ñ€Ð°", + "Entities.gmod_subway_81-722.Buttons.RouteNumberSet.RouteNumber3Set": "Ð¢Ñ€ÐµÑ‚ÑŒÑ Ñ†Ð¸Ñ„Ñ€Ð°", + "Entities.gmod_subway_81-722.Buttons.RearDoor.RearDoor": "ЗаднÑÑ Ð´Ð²ÐµÑ€ÑŒ", + "Entities.gmod_subway_81-722.Buttons.Lighting.CabinLightToggle": "ОÑвещение кабины", + "Entities.gmod_subway_81-722.Buttons.Lighting.CabinLight-": "ОÑвещение кабины(влево)", + "Entities.gmod_subway_81-722.Buttons.Lighting.CabinLight+": "ОÑвещение кабины(вправо)", + "Entities.gmod_subway_81-722.Buttons.Lighting.PanelLightToggle": "ОÑвещение пульта", + "Entities.gmod_subway_81-722.Buttons.PassengerDoor.PassengerDoor": "Дверь в кабину машиниÑта из Ñалона", + "Entities.gmod_subway_81-722.Buttons.PU1.MirrorHeatingSet": "Отопление зеркал", + "Entities.gmod_subway_81-722.Buttons.PU1.DoorLeft2Set": "Двери левые", + "Entities.gmod_subway_81-722.Buttons.PU1.DoorBackSet": "Открытие правых дверей хвоÑтового вагона", + "Entities.gmod_subway_81-722.Buttons.PU1.EmergencyDriveSet": "Ðварийный ход", + "Entities.gmod_subway_81-722.Buttons.PU1.MicrophoneSet": "Микрофон", + "Entities.gmod_subway_81-722.Buttons.PU1.DoorLeft1Set": "Двери левые", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF1Toggle": "SF1:Ð‘Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ñ Ñеть (управление)", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF2Toggle": "SF2:ÐÐºÑ‚Ð¸Ð²Ð½Ð°Ñ ÐºÐ°Ð±Ð¸Ð½Ð°", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF3Toggle": "SF3:Управление оÑновное", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF4Toggle": "SF4:Управление резервное", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF5Toggle": "SF5:Управление РВТБ", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF6Toggle": "SF6:Питание крана машиниÑта", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF7Toggle": "SF7:Двери(управление)", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF8Toggle": "SF8:БÐРС 1", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF9Toggle": "SF9:БÐРС 2", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF00Toggle": "SF00:", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF01Toggle": "SF01:", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF10Toggle": "SF10:БРПИ-М1", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF11Toggle": "SF11:БРПИ-М2", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF12Toggle": "SF12:ÐŸÐ¾Ð¶Ð°Ñ€Ð½Ð°Ñ ÑиÑтема", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF13Toggle": "SF13:Токоприёмник, короткозамыкатель", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF02Toggle": "SF02:", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF14Toggle": "SF14:РадиоÑвÑзь 1", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF15Toggle": "SF15:РадиоÑвÑзь 2", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF16Toggle": "SF16:ЦИС 1", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF17Toggle": "SF17:ЦИС 2", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF18Toggle": "SF18:ЦИС 3", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF19Toggle": "SF19:БУКП, УПИ", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF20Toggle": "SF20:Монитор", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF21Toggle": "SF21:ОриентациÑ", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF22Toggle": "SF22:Габаритные огни ÐБ", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF23Toggle": "SF23:Фары, габаритные огни", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF24Toggle": "SF24:СОСД", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF25Toggle": "SF25:ОÑвещение кабины", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF26Toggle": "SF26:Кондиционер кабины", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF27Toggle": "SF27:СтеклоочиÑтитель, омыватель, гудок", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF03Toggle": "SF03:", + "Entities.gmod_subway_81-722.Buttons.PPZ.SF04Toggle": "SF04:", + "Entities.gmod_subway_81-722.Buttons.PassengerDoor1.PassengerDoor": "Дверь в кабину машиниÑта из Ñалона", + "Entities.gmod_subway_81-722.Buttons.CabinDoorR.CabinDoorRight": "Дверь в кабину машиниÑта", + "Entities.gmod_subway_81-722.Buttons.PPZB.PSNToggleSet": "ЗарÑдка ÐКБ", + "Entities.gmod_subway_81-722.Buttons.PPZB.BattOnSet": "Включение иÑточника Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ñ Ð±Ð¾Ñ€Ñ‚Ð¾Ð²Ð¾Ð¹ Ñети", + "Entities.gmod_subway_81-722.Buttons.PPZB.BattOffSet": "Отключение иÑточника Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ñ Ð±Ð¾Ñ€Ñ‚Ð¾Ð²Ð¾Ð¹ Ñети", + "Entities.gmod_subway_81-722.Buttons.PPZB.TorecDoorUnlockSet": "Разблокировка торцевых дверей", + "Entities.gmod_subway_81-722.Buttons.PPZB.SCEnable": "Короткозамыкатель", + "Entities.gmod_subway_81-722.Buttons.PPZB.SOSD": "СОСД", + "Entities.gmod_subway_81-722.Buttons.Isolations.FrontBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_81-722.Buttons.Isolations.FrontTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_81-722.Buttons.BI3.KRO+": "Ðаправление движениÑ(вверх)", + "Entities.gmod_subway_81-722.Buttons.BI3.KRO-": "Ðаправление движениÑ(вниз)", + "Entities.gmod_subway_81-722.Buttons.BI3.RingSet": "Звонок", + "Entities.gmod_subway_81-722.Buttons.BI3.Compressor-": "КомпреÑÑоры(-)", + "Entities.gmod_subway_81-722.Buttons.BI3.Compressor+": "КомпреÑÑоры(+)", + "Entities.gmod_subway_81-722.Buttons.BI3.!BrakeCylinder": "Тормозной цилиндр", + "Entities.gmod_subway_81-722.Buttons.BI3.!BrakeTrainLine": "КраÑÐ½Ð°Ñ - тормознаÑ, Ñ‡Ñ‘Ñ€Ð½Ð°Ñ - Ð½Ð°Ð¿Ð¾Ñ€Ð½Ð°Ñ Ð¼Ð°Ð³Ð¸Ñтраль", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF31Toggle": "SF31:Поездной питающий провод", + "Entities.gmod_subway_81-722.Buttons.PVZ.1:SF31Toggle": "SF31:Поездной питающий провод", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF32Toggle": "SF32:Ð‘Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ñ Ñеть управление", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF33Toggle": "SF33:Питание цепей управлениÑ", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF34Toggle": "SF34:ЦИС левый", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF35Toggle": "SF35:ЦИС правый", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF36Toggle": "SF36:Ð‘Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ñ ÑигнализациÑ", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF37Toggle": "SF37:Отжатие токоприёмников", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF38Toggle": "SF38:Резерв", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF41Toggle": "SF41:Двери открытие левые", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF42Toggle": "SF42:Двери открытие правые", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF43Toggle": "SF43:Двери закрытие", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF44Toggle": "SF44:Двери торцевые", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF45Toggle": "SF45:ОÑвещение Ñалона питание", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF46Toggle": "SF46:ОÑвещение Ñалона аварийное", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF47Toggle": "SF47:ВентилÑÑ†Ð¸Ñ 1 группа", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF48Toggle": "SF48:ВентилÑÑ†Ð¸Ñ 2 группа", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF49Toggle": "SF49:Счётчик", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF51Toggle": "SF51:БУВ", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF52Toggle": "SF52:БОДВ", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF53Toggle": "SF53:ПСÐ", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF54Toggle": "SF54:ОÑушитель", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF55Toggle": "SF55:БУФТ", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF56Toggle": "SF56:Инвертор инвертор", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF57Toggle": "SF57:Инвертор обогрев", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF58Toggle": "SF58:ЦУВ оÑновное", + "Entities.gmod_subway_81-722.Buttons.PVZ.SF59Toggle": "SF59:ЦУВ резервное", + "Entities.gmod_subway_81-722.Buttons.PVM.PassLightToggle": "ОÑвещение Ñалона", + "Entities.gmod_subway_81-722.Buttons.PVM.PassVent-": "ВентилÑÑ†Ð¸Ñ Ñалона(-)", + "Entities.gmod_subway_81-722.Buttons.PVM.PassVent+": "ВентилÑÑ†Ð¸Ñ Ñалона(+)", + "Entities.gmod_subway_81-722.Buttons.PVM.VKFToggle": "ВКФ", + "Entities.gmod_subway_81-722.Buttons.PVM.ParkingBrakeToggle": "СтоÑночный тормоз", + "Entities.gmod_subway_81-722.Buttons.PVM.VRDToggle": "ВРД", + "Entities.gmod_subway_81-722.Buttons.PVM.SOSDEnableToggle": "СОСД", + "Entities.gmod_subway_81-722.Buttons.PVM.VRU-": "ВРУ(-)", + "Entities.gmod_subway_81-722.Buttons.PVM.VRU+": "ВРУ(+)", + "Entities.gmod_subway_81-722.Buttons.PVM.VADToggle": "Движение без ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_81-722.Buttons.PVM.VAHToggle": "Движение без педали бдительноÑти", + "Entities.gmod_subway_81-722.Buttons.PVM.EmergencyRadioPowerToggle": "Ðварийное питание радиоÑтанции", + "Entities.gmod_subway_81-722.Buttons.PVM.BARSMode-": "Режимы БÐРС(влево)", + "Entities.gmod_subway_81-722.Buttons.PVM.BARSMode+": "Режимы БÐРС(вправо)", + "Entities.gmod_subway_81-722.Buttons.PVM.PantSC-": "Токоприёмники и короткозамыкатель(-)", + "Entities.gmod_subway_81-722.Buttons.PVM.PantSC+": "Токоприёмники и короткозамыкатель(+)", + "Entities.gmod_subway_81-722.Buttons.PVM.RCARSToggle": "РЦ ÐРС", + + "Entities.gmod_subway_81-723.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_81-723.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_81-723.Buttons.RearDoor.RearDoor": "ЗаднÑÑ Ð´Ð²ÐµÑ€ÑŒ", + "Entities.gmod_subway_81-723.Buttons.FrontDoor.FrontDoor": "ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ", + "Entities.gmod_subway_81-723.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_81-723.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF31Toggle": "SF31:Поездной питающий провод", + "Entities.gmod_subway_81-723.Buttons.PVZ.1:SF31Toggle": "SF31:Поездной питающий провод", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF32Toggle": "SF32:Ð‘Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ñ Ñеть управление", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF33Toggle": "SF33:Питание цепей управленÑи", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF34Toggle": "SF34:ЦИС левый", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF35Toggle": "SF35:ЦИС правый", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF36Toggle": "SF36:Ð‘Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ñ ÑигнализациÑ", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF37Toggle": "SF37:Отжатие токоприёмников", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF38Toggle": "SF38:Резерв", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF41Toggle": "SF41:Двери открытие левые", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF42Toggle": "SF42:Двери открытие правые", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF43Toggle": "SF43:Двери закрытие", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF44Toggle": "SF44:Двери торцевые", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF45Toggle": "SF45:ОÑвещение Ñалона питание", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF46Toggle": "SF46:ОÑвещение Ñалона аварийное", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF47Toggle": "SF47:ВентилÑÑ†Ð¸Ñ 1 группа", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF48Toggle": "SF48:ВентилÑÑ†Ð¸Ñ 2 группа", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF49Toggle": "SF49:Счётчик", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF51Toggle": "SF51:БУВ", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF52Toggle": "SF52:БОДВ", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF53Toggle": "SF53:ПСÐ", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF54Toggle": "SF54:ОÑушитель", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF55Toggle": "SF55:БУФТ", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF56Toggle": "SF56:Инвертор инвертор", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF57Toggle": "SF57:Инвертор обогрев", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF58Toggle": "SF58:ЦУВ оÑновное", + "Entities.gmod_subway_81-723.Buttons.PVZ.SF59Toggle": "SF59:ЦУВ резервное", + + "Entities.gmod_subway_81-724.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_81-724.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_81-724.Buttons.RearDoor.RearDoor": "ЗаднÑÑ Ð´Ð²ÐµÑ€ÑŒ", + "Entities.gmod_subway_81-724.Buttons.FrontDoor.FrontDoor": "ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ", + "Entities.gmod_subway_81-724.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_81-724.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF34Toggle": "SF34:ЦИС левый", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF35Toggle": "SF35:ЦИС правый", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF36Toggle": "SF36:Ð‘Ð¾Ñ€Ñ‚Ð¾Ð²Ð°Ñ ÑигнализациÑ", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF41Toggle": "SF41:Двери открытие левые", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF42Toggle": "SF42:Двери открытие правые", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF43Toggle": "SF43:Двери закрытие", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF44Toggle": "SF44:Двери торцевые", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF45Toggle": "SF45:ОÑвещение Ñалона питание", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF46Toggle": "SF46:ОÑвещение Ñалона аварийное", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF47Toggle": "SF47:ВентилÑÑ†Ð¸Ñ 1 группа", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF48Toggle": "SF48:ВентилÑÑ†Ð¸Ñ 2 группа", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF51Toggle": "SF51:БУВ", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF52Toggle": "SF52:БОДВ", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF53Toggle": "SF53:Резерв", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF54Toggle": "SF54:Резерв", + "Entities.gmod_subway_81-724.Buttons.PVZ.SF55Toggle": "SF55:БУФТ" +} +]] diff --git a/lua/metrostroi_data/languages_/ru_buttons_em508.lua b/lua/metrostroi_data/languages_/ru_buttons_em508.lua new file mode 100644 index 0000000..795fee2 --- /dev/null +++ b/lua/metrostroi_data/languages_/ru_buttons_em508.lua @@ -0,0 +1,157 @@ +return [[ +{ + "Lang": "ru", + "Name": "Russian", + + + "Entities.gmod_subway_em508.Buttons.Back.BackDoor": "ЗаднÑÑ Ð´Ð²ÐµÑ€ÑŒ", + "Entities.gmod_subway_em508.Buttons.HelperPanel.R_Program1Set": "Программа 1", + "Entities.gmod_subway_em508.Buttons.HelperPanel.R_Program2Set": "Программа 2", + "Entities.gmod_subway_em508.Buttons.HelperPanel.VDLSet": "ВДЛ: Выключатель левых дверей", + "Entities.gmod_subway_em508.Buttons.HelperPanel.VUD2Toggle": "ВУД2: Выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÑŒÐ¼Ð¸", + "Entities.gmod_subway_em508.Buttons.AV2.RSTToggle": "РСТ: РадиоÑтанциÑ", + "Entities.gmod_subway_em508.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_em508.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_em508.Buttons.AVU.AVULight": "Лампа:Включен ÐВУ (ÐвтоматичеÑкий выключатель управлениÑ)", + "Entities.gmod_subway_em508.Buttons.AVU.OtklAVUToggle": "Отключение автоматичеÑкого Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (неиÑправноÑть ÐВУ)", + "Entities.gmod_subway_em508.Buttons.Back2.!HVFuses": "Блок предохранителей", + "Entities.gmod_subway_em508.Buttons.Back2.!Relays": "Ящик Ñ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð°Ð¼Ð¸ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð·Ð°Ñ€Ñда аккумулÑторной батареи и дверной воздухораÑпределитель", + "Entities.gmod_subway_em508.Buttons.Back2.!Heater": "Печка", + "Entities.gmod_subway_em508.Buttons.Main.DoorSelectToggle": "Переключатель: Выбор Ñтороны Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_em508.Buttons.Main.DIPonSet": "Вкл. ОÑв.: Включение оÑвещениÑ", + "Entities.gmod_subway_em508.Buttons.Main.DIPoffSet": "Выкл. ОÑв.: Отключение оÑвещениÑ", + "Entities.gmod_subway_em508.Buttons.Main.VozvratRPSet": "ВРП: Возврат РП", + "Entities.gmod_subway_em508.Buttons.Main.KSNSet": "КСÐ:Принудительное Ñрабатывание РП на неиÑправном вагоне (Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½ÐµÐ¸ÑправноÑти)", + "Entities.gmod_subway_em508.Buttons.Main.KRZDSet": "КРЗД: Кнопка резервного Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_em508.Buttons.Main.KSDSet": "КСД: Контроль Ñигнализации дверей(проверка СД)", + "Entities.gmod_subway_em508.Buttons.Main.KDPSet": "КДП:Правые двери", + "Entities.gmod_subway_em508.Buttons.Main.KDLSet": "КДЛ: Кнопка левых дверей", + "Entities.gmod_subway_em508.Buttons.Main.RezMKSet": "РМК: Резервное включение мотор-компреÑÑора", + "Entities.gmod_subway_em508.Buttons.Main.KU1Toggle": "МК: Включение мотор-компреÑÑора", + "Entities.gmod_subway_em508.Buttons.Main.VUD1Toggle": "ВУД: Закрытие дверей", + "Entities.gmod_subway_em508.Buttons.AV1.VU3Toggle": "ВУ3: ОÑвещение кабины\n", + "Entities.gmod_subway_em508.Buttons.AV1.VU2Toggle": "ВУ2: Ðварийное оÑвещение\n", + "Entities.gmod_subway_em508.Buttons.AV1.VU1Toggle": "ВУ1: Печь Ð¾Ñ‚Ð¾Ð¿Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹\n", + "Entities.gmod_subway_em508.Buttons.Back1.!ULSPM": "УЭСПМ (УÑтройÑтво ÑвÑзи паÑÑажир-машиниÑÑ‚)", + "Entities.gmod_subway_em508.Buttons.Back1.!TonalARS": "Тональное уÑтройÑтво - Звонок", + "Entities.gmod_subway_em508.Buttons.Back1.!PressureRelay": "РегулÑтор давлениÑ", + "Entities.gmod_subway_em508.Buttons.Back1.!Reproductor": "Громкоговоритель", + "Entities.gmod_subway_em508.Buttons.Back1.!LVFuses": "Щиток Ñ Ð½Ð¸Ð·ÐºÐ¾Ð²Ð¾Ð»ÑŒÑ‚Ð½Ñ‹Ð¼Ð¸ предохранителÑми", + "Entities.gmod_subway_em508.Buttons.Back1.R_UNchToggle": "Питание Ñтатива РРИ", + "Entities.gmod_subway_em508.Buttons.Lamp.L_3Toggle": "Лампа: ПодÑветка приборов", + "Entities.gmod_subway_em508.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle": "Кран двойной Ñ‚Ñги напорной магиÑтрали", + "Entities.gmod_subway_em508.Buttons.VU.VUToggle": "ВУ: Выключатель УправлениÑ", + "Entities.gmod_subway_em508.Buttons.PneumaticManometer.!LinesPressure": "Давление в магиÑтралÑÑ… (краÑнаÑ: тормозной, чёрнаÑ: напорной)", + "Entities.gmod_subway_em508.Buttons.Stopkran.EmergencyBrakeValveToggle": "Стопкран", + "Entities.gmod_subway_em508.Buttons.LAMPS.SN": "Индикатор: CÐ¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½ÐµÐ¸ÑправноÑти", + "Entities.gmod_subway_em508.Buttons.LAMPS.RedRP": "Индикатор: КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки", + "Entities.gmod_subway_em508.Buttons.LAMPS.SD": "Индикатор: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_em508.Buttons.LAMPS.GreenRP": "Индикатор: Ð—ÐµÐ»ÐµÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки", + "Entities.gmod_subway_em508.Buttons.LAMPS.UKS": "Индикатор: УÑтройÑтво ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ ÑкороÑти УКС-20М", + "Entities.gmod_subway_em508.Buttons.LAMPS.Red": "Индикатор: Обогрев кабины", + "Entities.gmod_subway_em508.Buttons.LAMPS.AGS": "Лампа: Работа ÐГС (ÐвтоматичеÑкий гребне Ñмазыватель)", + "Entities.gmod_subway_em508.Buttons.UAVAPanel.UAVAToggle": "УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа (отключение автоÑтопа)", + "Entities.gmod_subway_em508.Buttons.UAVAPanel.UAVACToggle ": "УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа (воÑÑтановление контактов)", + "Entities.gmod_subway_em508.Buttons.PneumaticPanels.!CylinderPressure": "Тормозной манометр: Давление в тормозных цилиндрах (ТЦ)", + "Entities.gmod_subway_em508.Buttons.Battery.VBToggle": "ÐБ: Выключатель аккумулÑторной батареи (Ð’Ñпомогательные цепи низкого напрÑжениÑ)", + "Entities.gmod_subway_em508.Buttons.Battery.R_RadioToggle": "Питание радиоинформатора +50Ð’", + "Entities.gmod_subway_em508.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_em508.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_em508.Buttons.ASNP.R_ASNPMenuSet": "Информатор: Меню", + "Entities.gmod_subway_em508.Buttons.ASNP.R_ASNPUpSet": "Информатор: Вверх", + "Entities.gmod_subway_em508.Buttons.ASNP.R_ASNPDownSet": "Информатор: Вниз", + "Entities.gmod_subway_em508.Buttons.ASNP.R_ASNPOnToggle": "Информатор: Включение", + "Entities.gmod_subway_em508.Buttons.VU1.KRPSet": "РРП: Резервный пуÑк ", + "Entities.gmod_subway_em508.Buttons.GV.GVToggle": "Главный выключатель", + "Entities.gmod_subway_em508.Buttons.IGLAButtons.IGLA1USet": "ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вверх", + "Entities.gmod_subway_em508.Buttons.IGLAButtons.IGLA1Set": "ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°", + "Entities.gmod_subway_em508.Buttons.IGLAButtons.IGLA1DSet": "ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вниз", + "Entities.gmod_subway_em508.Buttons.IGLAButtons.IGLA2USet": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вверх", + "Entities.gmod_subway_em508.Buttons.IGLAButtons.IGLA2Set": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°", + "Entities.gmod_subway_em508.Buttons.IGLAButtons.IGLA2DSet": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вниз", + "Entities.gmod_subway_em508.Buttons.IGLAButtons.!IGLASR": "ИГЛÐ: SR", + "Entities.gmod_subway_em508.Buttons.IGLAButtons.!IGLARX": "ИГЛÐ: RX", + "Entities.gmod_subway_em508.Buttons.IGLAButtons.!IGLAErr": "ИГЛÐ: Отказ", + "Entities.gmod_subway_em508.Buttons.IGLAButtons.!IGLAOSP": "ИГЛÐ: ОСП", + "Entities.gmod_subway_em508.Buttons.IGLAButtons.!IGLAPI": "ИГЛÐ: ПИ", + "Entities.gmod_subway_em508.Buttons.IGLAButtons.!IGLAOff": "ИГЛÐ: Откл", + "Entities.gmod_subway_em508.Buttons.PassengerDoor.PassengerDoor": "Дверь в кабину машиниÑта из Ñалона", + "Entities.gmod_subway_em508.Buttons.InfoTableSelect.PrevSign": "ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð½Ð°Ð´Ð¿Ð¸ÑÑŒ", + "Entities.gmod_subway_em508.Buttons.InfoTableSelect.NextSign": "Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð½Ð°Ð´Ð¿Ð¸ÑÑŒ", + "Entities.gmod_subway_em508.Buttons.InfoTableSelect.Num2P": "Маршрут: Увеличить чиÑло 2", + "Entities.gmod_subway_em508.Buttons.InfoTableSelect.Num2M": "Маршрут: Уменьшить чиÑло 2", + "Entities.gmod_subway_em508.Buttons.InfoTableSelect.Num1P": "Маршрут: Увеличить чиÑло 1", + "Entities.gmod_subway_em508.Buttons.InfoTableSelect.Num1M": "Маршрут: Уменьшить чиÑло 1", + "Entities.gmod_subway_em508.Buttons.Front.FrontDoor": "ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ", + "Entities.gmod_subway_em508.Buttons.KRR.KRRSet": "KРР: Кнопка разворота реверÑоров", + "Entities.gmod_subway_em508.Buttons.AGS.VUSToggle": "Переключатель: Ближний Ñвет/Дальний Ñвет", + "Entities.gmod_subway_em508.Buttons.CabinDoor.CabinDoor": "Дверь в кабину машиниÑта", + "Entities.gmod_subway_em508.Buttons.PassengerDoor1.PassengerDoor": "Дверь в кабину машиниÑта из Ñалона", + "Entities.gmod_subway_em508.Buttons.ParkingBrake.ParkingBrakeLeft": "Поворот колеÑа ручного тормоза", + "Entities.gmod_subway_em508.Buttons.ParkingBrake.ParkingBrakeRight": "Поворот колеÑа ручного тормоза", + "Entities.gmod_subway_em508.Buttons.AVMain.AV8BToggle": "ÐÐ’-8Б: ÐвтоматичеÑкй выключатель (Ð’Ñпомогательные цепи выÑокого напрÑжениÑ)\n", + "Entities.gmod_subway_em508.Buttons.Back3.!RTM": "Пульт диÑпетчерÑкой радиоÑвÑзи", + "Entities.gmod_subway_em508.Buttons.Back3.!ULSPMSpeaker": "Блок Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ð³Ð¾Ð²Ð¾Ñ€Ð¸Ñ‚ÐµÐ»Ñ ÑвÑзи паÑÑажир-машиниÑÑ‚", + "Entities.gmod_subway_em508.Buttons.Back3.!Amplifier": "Блок уÑÐ¸Ð»Ð¸Ñ‚ÐµÐ»Ñ Ð¿Ð¾ÐµÐ·Ð´Ð½Ð¾Ð¹ радиоÑтанции", + "Entities.gmod_subway_em508.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle": "Кран двойной Ñ‚Ñги тормозной магиÑтрали", + "Entities.gmod_subway_em508.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Выключение воздухораÑпределителÑ", + + + + "Entities.gmod_subway_em508_int.Buttons.Stopkran.EmergencyBrakeValveToggle": "Стопкран", + "Entities.gmod_subway_em508_int.Buttons.Back.BackDoor": "ЗаднÑÑ Ð´Ð²ÐµÑ€ÑŒ", + "Entities.gmod_subway_em508_int.Buttons.HelperPanel.R_Program1Set": "Программа 1", + "Entities.gmod_subway_em508_int.Buttons.HelperPanel.R_Program2Set": "Программа 2", + "Entities.gmod_subway_em508_int.Buttons.HelperPanel.VDLSet": "ВДЛ: Выключатель левых дверей", + "Entities.gmod_subway_em508_int.Buttons.HelperPanel.VUD2Toggle": "ВУД2: Выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÑŒÐ¼Ð¸", + "Entities.gmod_subway_em508_int.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle": "Кран двойной Ñ‚Ñги тормозной магиÑтрали", + "Entities.gmod_subway_em508_int.Buttons.Battery.VBToggle": "ÐБ: Выключатель аккумулÑторной батареи (Ð’Ñпомогательные цепи низкого напрÑжениÑ)", + "Entities.gmod_subway_em508_int.Buttons.Battery.R_RadioToggle": "Питание радиоинформатора +50Ð’", + "Entities.gmod_subway_em508_int.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_em508_int.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_em508_int.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Выключение воздухораÑпределителÑ", + "Entities.gmod_subway_em508_int.Buttons.PassengerDoor.PassengerDoor": "Дверь в кабину машиниÑта из Ñалона", + "Entities.gmod_subway_em508_int.Buttons.VU1.KRPSet": "РРП: Резервный пуÑк ", + "Entities.gmod_subway_em508_int.Buttons.UAVAPanel.UAVAToggle": "УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа (отключение автоÑтопа)", + "Entities.gmod_subway_em508_int.Buttons.UAVAPanel.UAVACToggle ": "УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа (воÑÑтановление контактов)", + "Entities.gmod_subway_em508_int.Buttons.Front.FrontDoor": "ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ", + "Entities.gmod_subway_em508_int.Buttons.Tsepi.!BatteryVoltage": "ÐапрÑжение цепей управлениÑ", + "Entities.gmod_subway_em508_int.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_em508_int.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_em508_int.Buttons.InfoTableSelect.PrevSign": "ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð½Ð°Ð´Ð¿Ð¸ÑÑŒ", + "Entities.gmod_subway_em508_int.Buttons.InfoTableSelect.NextSign": "Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð½Ð°Ð´Ð¿Ð¸ÑÑŒ", + "Entities.gmod_subway_em508_int.Buttons.InfoTableSelect.Num2P": "Маршрут: Увеличить чиÑло 2", + "Entities.gmod_subway_em508_int.Buttons.InfoTableSelect.Num2M": "Маршрут: Уменьшить чиÑло 2", + "Entities.gmod_subway_em508_int.Buttons.InfoTableSelect.Num1P": "Маршрут: Увеличить чиÑло 1", + "Entities.gmod_subway_em508_int.Buttons.InfoTableSelect.Num1M": "Маршрут: Уменьшить чиÑло 1", + "Entities.gmod_subway_em508_int.Buttons.Back2.!HVFuses": "Блок предохранителей", + "Entities.gmod_subway_em508_int.Buttons.Back2.!Relays": "Ящик Ñ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð°Ð¼Ð¸ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð·Ð°Ñ€Ñда аккумулÑторной батареи и дверной воздухораÑпределитель", + "Entities.gmod_subway_em508_int.Buttons.Back2.!Heater": "Печка", + "Entities.gmod_subway_em508_int.Buttons.Main.GreenRP": "Лампа: Ð—ÐµÐ»ÐµÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки", + "Entities.gmod_subway_em508_int.Buttons.Main.RedRP": "Лампа: КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки", + "Entities.gmod_subway_em508_int.Buttons.Main.SD": "Лампа: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_em508_int.Buttons.Main.DIPonSet": "Вкл. ОÑв.: Включение оÑвещениÑ", + "Entities.gmod_subway_em508_int.Buttons.Main.DIPoffSet": "Выкл. ОÑв.: Отключение оÑвещениÑ", + "Entities.gmod_subway_em508_int.Buttons.Main.VozvratRPSet": "ВРП: Возврат РП", + "Entities.gmod_subway_em508_int.Buttons.Main.KSNSet": "КСÐ:Принудительное Ñрабатывание РП на неиÑправном вагоне (Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½ÐµÐ¸ÑправноÑти)", + "Entities.gmod_subway_em508_int.Buttons.Main.KRZDSet": "КРЗД: Кнопка резервного Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_em508_int.Buttons.Main.KDPSet": "КДП:Правые двери", + "Entities.gmod_subway_em508_int.Buttons.Main.KDLSet": "КДЛ: Кнопка левых дверей", + "Entities.gmod_subway_em508_int.Buttons.Main.KU1Toggle": "МК: Включение мотор-компреÑÑора", + "Entities.gmod_subway_em508_int.Buttons.Main.VUD1Toggle": "ВУД: Закрытие дверей", + "Entities.gmod_subway_em508_int.Buttons.AV1.VU3Toggle": "ВУ3: ОÑвещение кабины", + "Entities.gmod_subway_em508_int.Buttons.AV1.VU2Toggle": "ВУ2: Ðварийное оÑвещение", + "Entities.gmod_subway_em508_int.Buttons.AV1.VU1Toggle": "ВУ1: Печь Ð¾Ñ‚Ð¾Ð¿Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹", + "Entities.gmod_subway_em508_int.Buttons.AVMain.AV8BToggle": "ÐÐ’-8Б: ÐвтоматичеÑкй выключатель (Ð’Ñпомогательные цепи выÑокого напрÑжениÑ)\n", + "Entities.gmod_subway_em508_int.Buttons.CabinDoor.CabinDoor": "Дверь в кабину машиниÑта", + "Entities.gmod_subway_em508_int.Buttons.Lamp.L_3Toggle": "Лампа: ПодÑветка приборов", + "Entities.gmod_subway_em508_int.Buttons.PassengerDoor1.PassengerDoor": "Дверь в кабину машиниÑта из Ñалона", + "Entities.gmod_subway_em508_int.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle": "Кран двойной Ñ‚Ñги напорной магиÑтрали", + "Entities.gmod_subway_em508_int.Buttons.GV.GVToggle": "Главный выключатель", + "Entities.gmod_subway_em508_int.Buttons.VU.VUToggle": "ВУ: Выключатель УправлениÑ", + "Entities.gmod_subway_em508_int.Buttons.PneumaticPanels.!CylinderPressure": "Тормозной манометр: Давление в тормозных цилиндрах (ТЦ)", + "Entities.gmod_subway_em508_int.Buttons.ParkingBrake.ParkingBrakeLeft": "Поворот колеÑа ручного тормоза", + "Entities.gmod_subway_em508_int.Buttons.ParkingBrake.ParkingBrakeRight": "Поворот колеÑа ручного тормоза", + "Entities.gmod_subway_em508_int.Buttons.PneumaticManometer.!LinesPressure": "Давление в магиÑтралÑÑ… (краÑнаÑ: тормозной, чёрнаÑ: напорной)" +} +]] diff --git a/lua/metrostroi_data/languages_/ru_buttons_ezh.lua b/lua/metrostroi_data/languages_/ru_buttons_ezh.lua new file mode 100644 index 0000000..5527d26 --- /dev/null +++ b/lua/metrostroi_data/languages_/ru_buttons_ezh.lua @@ -0,0 +1,148 @@ +return [[ +{ + "Lang": "ru", + "Name": "Russian", + + "Entities.gmod_subway_ezh.Buttons.HelperPanel.VDLSet": "ВДЛ: Выключатель левых дверей", + "Entities.gmod_subway_ezh.Buttons.HelperPanel.VUD2Toggle": "ВУД2: Выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÑŒÐ¼Ð¸", + "Entities.gmod_subway_ezh.Buttons.Meters.!TotalVoltmeter": "Вольтметр выÑокого напрÑÐ¶ÐµÐ½Ð¸Ñ (кВ)", + "Entities.gmod_subway_ezh.Buttons.Meters.!TotalAmpermeter": "Ðмперметр (Ð)", + "Entities.gmod_subway_ezh.Buttons.AV2.R_RadioToggle": "+50Ð’: Блок ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð Ð Ð˜ и ПÐМ (Включение радиоинформатора)", + "Entities.gmod_subway_ezh.Buttons.AV2.RSTToggle": "РСТ: РадиоÑтанциÑ", + "Entities.gmod_subway_ezh.Buttons.AV2.UOSToggle": "УОС: Тумблер Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡Ð¸Ñ‚ÐµÐ»Ñ ÑкороÑти ", + "Entities.gmod_subway_ezh.Buttons.AB1.AB1Set": "Переход ÑиÑтемы ÐРС в режим ÐБ(кнопка машиниÑта)", + "Entities.gmod_subway_ezh.Buttons.KAH.KAHToggle": "ТÐÐ¥: Тумблер аварийного хода ", + "Entities.gmod_subway_ezh.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_ezh.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_ezh.Buttons.AVU.AVULight": "Лампа:Включен ÐВУ (ÐвтоматичеÑкий выключатель управлениÑ)", + "Entities.gmod_subway_ezh.Buttons.AVU.OtklAVUToggle": "Отключение автоматичеÑкого Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (неиÑправноÑть ÐВУ)", + "Entities.gmod_subway_ezh.Buttons.Main.DIPonSet": "ОÑв. Вкл.: Включение оÑвещениÑ", + "Entities.gmod_subway_ezh.Buttons.Main.DIPoffSet": "ОÑв. Выкл.: Выключение оÑÐ²ÐµÑ‰ÐµÐ½Ð¸Ñ (Звонок)", + "Entities.gmod_subway_ezh.Buttons.Main.KDPSet": "КДП:Правые двери", + "Entities.gmod_subway_ezh.Buttons.Main.KDLSet": "КДЛ: Левые дверей", + "Entities.gmod_subway_ezh.Buttons.Main.DoorSelectToggle": "Крышка выбора Ñтороны Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_ezh.Buttons.Main.KVTSet": "КВТ: Кнопка воÑприÑÑ‚Ð¸Ñ Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ (Отмена ÐРС)", + "Entities.gmod_subway_ezh.Buttons.Main.VUSToggle": "Переключатель: Ближний Ñвет/Дальний Ñвет", + "Entities.gmod_subway_ezh.Buttons.Main.ALSToggle": "Переключатель: ÐЛС", + "Entities.gmod_subway_ezh.Buttons.Main.ALSFreqToggle": "Переключатель: Дешифратор (ÐРС 2/6 вниз, ÐРС 1/5 вверх)", + "Entities.gmod_subway_ezh.Buttons.Main.ARSToggle": "Переключатель: ÐРС", + "Entities.gmod_subway_ezh.Buttons.Main.KU1Toggle": "МК:Включение мотор-компреÑÑора", + "Entities.gmod_subway_ezh.Buttons.Main.KSNSet": "СÐ:Принудительное Ñрабатывание РП на неиÑправном вагоне (ÑÐ¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½ÐµÐ¸ÑправноÑти)", + "Entities.gmod_subway_ezh.Buttons.Main.VozvratRPSet": "КУ9:Возврат РП", + "Entities.gmod_subway_ezh.Buttons.Main.R_Program1Set": "Радиоинформатор: Программа 1", + "Entities.gmod_subway_ezh.Buttons.Main.VUD1Toggle": "ВУД: Закрытие дверей", + "Entities.gmod_subway_ezh.Buttons.Main.KRZDSet": "КРЗД: Кнопка резервного Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_ezh.Buttons.AV1.VU3Toggle": "ВУ3: ОÑвещение кабины", + "Entities.gmod_subway_ezh.Buttons.AV1.VU2Toggle": "ВУ2: Ðварийное оÑвещение (45Ð’)", + "Entities.gmod_subway_ezh.Buttons.AV1.VU1Toggle": "ВУ1: Печь Ð¾Ñ‚Ð¾Ð¿Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹ (3кВт)", + "Entities.gmod_subway_ezh.Buttons.Back1.!RignARS": "Тональное уÑтройÑтво ÐРС", + "Entities.gmod_subway_ezh.Buttons.Back1.!USPM": "УЛСПМ (УÑтвойÑтво ÑвÑзи паÑÑажир-машиниÑÑ‚)", + "Entities.gmod_subway_ezh.Buttons.Back1.!AK": "РегулÑтор давлениÑ", + "Entities.gmod_subway_ezh.Buttons.Back1.!LVP": "Щиток Ñ Ð½Ð¸Ð·ÐºÐ¾Ð²Ð¾Ð»ÑŒÑ‚Ð½Ñ‹Ð¼Ð¸ предохранителÑми", + "Entities.gmod_subway_ezh.Buttons.RC1.RC1Toggle": "РЦР: Кулачковый разъединитель цепей ÐРС", + "Entities.gmod_subway_ezh.Buttons.Lamp.L_3Toggle": "Лампа: ПодÑветка приборов", + "Entities.gmod_subway_ezh.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle": "Кран двойной Ñ‚Ñги напорной магиÑтрали", + "Entities.gmod_subway_ezh.Buttons.VU.VUToggle": "ВУ: Выключатель УправлениÑ", + "Entities.gmod_subway_ezh.Buttons.VU.RezMKSet": "КУ15:Резервное включение мотор-компреÑÑора", + "Entities.gmod_subway_ezh.Buttons.VU.KRPSet": "Резервный пуÑк ", + "Entities.gmod_subway_ezh.Buttons.FrontDoor.FrontDoor": "ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ", + "Entities.gmod_subway_ezh.Buttons.AB2.AB2Set": "Переход ÑиÑтемы ÐРС в режим ÐБ(кнопка помощника машиниÑта)", + "Entities.gmod_subway_ezh.Buttons.PneumaticManometer.!LinesPressure": "Давление в магиÑтралÑÑ… (краÑнаÑ: тормозной, чёрнаÑ: напорной)", + "Entities.gmod_subway_ezh.Buttons.Stopkran.EmergencyBrakeValveToggle": "Стопкран", + "Entities.gmod_subway_ezh.Buttons.UAVAPanel.UAVAToggle": "УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа (отключение автоÑтопа)", + "Entities.gmod_subway_ezh.Buttons.UAVAPanel.UAVACToggle ": "УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа (воÑÑтановление контактов)", + "Entities.gmod_subway_ezh.Buttons.PneumaticPanels.!BrakeCylinder": "Тормозной манометр: Давление в тормозных цилиндрах (ТЦ)", + "Entities.gmod_subway_ezh.Buttons.Battery.VBToggle": "ÐБ: Выключатель аккумулÑторной батареи (Ð’Ñпомогательные цепи низкого напрÑжениÑ)", + "Entities.gmod_subway_ezh.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_ezh.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPMenuSet": "Информатор: Меню", + "Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPUpSet": "Информатор: Вверх", + "Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPDownSet": "Информатор: Вниз", + "Entities.gmod_subway_ezh.Buttons.ASNP.R_ASNPOnToggle": "Информатор: Включение", + "Entities.gmod_subway_ezh.Buttons.Tsepi.!BatteryVoltage": "ÐапрÑжение батареи", + "Entities.gmod_subway_ezh.Buttons.PassengerDoor1.PassengerDoor": "Дверь в кабину машиниÑта из Ñалона", + "Entities.gmod_subway_ezh.Buttons.PassengerDoor.PassengerDoor": "Дверь в кабину машиниÑта из Ñалона", + "Entities.gmod_subway_ezh.Buttons.GV.GVToggle": "Главный выключатель", + "Entities.gmod_subway_ezh.Buttons.LampsALS.!L80": "80: Ограничение ÑкороÑти 80 км/ч", + "Entities.gmod_subway_ezh.Buttons.LampsALS.!L70": "70: Ограничение ÑкороÑти 70 км/ч", + "Entities.gmod_subway_ezh.Buttons.LampsALS.!L60": "60: Ограничение ÑкороÑти 60 км/ч", + "Entities.gmod_subway_ezh.Buttons.LampsALS.!L40": "40: Ограничение ÑкороÑти 40 км/ч", + "Entities.gmod_subway_ezh.Buttons.LampsALS.!L0": "0: Ограничение ÑкороÑти 0 км/ч", + "Entities.gmod_subway_ezh.Buttons.LampsALS.!LNF": "ОЧ: ОтÑутÑтвие чаÑтоты ÐРС", + "Entities.gmod_subway_ezh.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle": "Кран двойной Ñ‚Ñги тормозной магиÑтрали", + "Entities.gmod_subway_ezh.Buttons.CabinDoor.CabinDoor": "Дверь в кабину машиниÑта", + "Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1USet": "ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вверх", + "Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1Set": "ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°", + "Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA1DSet": "ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вниз", + "Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2USet": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вверх", + "Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2Set": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°", + "Entities.gmod_subway_ezh.Buttons.IGLAButtons.IGLA2DSet": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вниз", + "Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLASR": "ИГЛÐ: SR", + "Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLARX": "ИГЛÐ: RX", + "Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAErr": "ИГЛÐ: Отказ", + "Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAOSP": "ИГЛÐ: ОСП", + "Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAPI": "ИГЛÐ: ПИ", + "Entities.gmod_subway_ezh.Buttons.IGLAButtons.!IGLAOff": "ИГЛÐ: Откл", + "Entities.gmod_subway_ezh.Buttons.Lamps.!RedRP": "РП: КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки", + "Entities.gmod_subway_ezh.Buttons.Lamps.!LPU": "Ð¡ÐµÐºÐ²ÐµÐ½Ñ†Ð¸Ñ (Контроль правильноÑти Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð¾Ð² в режимах Ñ‚Ñги и Ñ‚Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ отÑутÑтвии выÑокого напрÑжениÑ)", + "Entities.gmod_subway_ezh.Buttons.Lamps.!VD": "ВД: Светодиод ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñ‚ÐµÐ»ÐµÐ¹ (ЛКВД)", + "Entities.gmod_subway_ezh.Buttons.Lamps.!KT": "КТ: Контроль тормоза(торможение Ñффективно)", + "Entities.gmod_subway_ezh.Buttons.Lamps.!AB": "Ð—ÐµÐ»ÐµÐ½Ð°Ñ AБ: Следование по учаÑтку Ñ Ð°Ð²Ñ‚Ð¾Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²ÐºÐ¾Ð¹ (некодируемый учаÑток).", + "Entities.gmod_subway_ezh.Buttons.Lamps.!Doors": "Двери: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ поезда", + "Entities.gmod_subway_ezh.Buttons.Lamps.!LN": "ЛÐ: Светодиод уÑтановленного Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ учаÑтка", + "Entities.gmod_subway_ezh.Buttons.Lamps.!Sbor": "Лампа СБОР: Ошибка Ñбора ÑлектричеÑкой Ñхемы (Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½ÐµÐ¸ÑправноÑти)", + "Entities.gmod_subway_ezh.Buttons.EPKDisconnect.EPKToggle": "Кран ЭПК", + "Entities.gmod_subway_ezh.Buttons.AVMain.AV8BToggle": "ÐÐ’-8Б: ÐвтоматичеÑкй выключатель (Ð’Ñпомогательные цепи выÑокого напрÑжениÑ)", + "Entities.gmod_subway_ezh.Buttons.KRR.KRRToggle": "KРР: Кнопка разворота реверÑоров", + "Entities.gmod_subway_ezh.Buttons.ParkingBrake.ParkingBrakeLeft": "Поворот колеÑа ручного тормоза", + "Entities.gmod_subway_ezh.Buttons.ParkingBrake.ParkingBrakeRight": "Поворот колеÑа ручного тормоза", + "Entities.gmod_subway_ezh.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Выключение воздухораÑпределителÑ", + + + + "Entities.gmod_subway_ezh1.Buttons.Stopkran.EmergencyBrakeValveToggle": "Стопкран", + "Entities.gmod_subway_ezh1.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle": "Кран двойной Ñ‚Ñги тормозной магиÑтрали", + "Entities.gmod_subway_ezh1.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle": "Кран двойной Ñ‚Ñги напорной магиÑтрали", + "Entities.gmod_subway_ezh1.Buttons.PneumaticPanels.!CylinderPressure": "Тормозной манометр: Давление в тормозных цилиндрах (ТЦ)", + "Entities.gmod_subway_ezh1.Buttons.Battery.VBToggle": "ÐБ: Выключатель аккумулÑторной батареи (Ð’Ñпомогательные цепи низкого напрÑжениÑ)", + "Entities.gmod_subway_ezh1.Buttons.Meters.!TotalVoltmerer": "Вольтметр выÑокого напрÑÐ¶ÐµÐ½Ð¸Ñ (кВ)", + "Entities.gmod_subway_ezh1.Buttons.Meters.!TotalAmpermeter": "Ðмперметр (Ð)", + "Entities.gmod_subway_ezh1.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_ezh1.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_ezh1.Buttons.RearDoor.RearDoor": "Дверь из Ñалона", + "Entities.gmod_subway_ezh1.Buttons.Tsepi.!BatteryVoltage": "ÐапрÑжение цепей управлениÑ", + "Entities.gmod_subway_ezh1.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_ezh1.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_ezh1.Buttons.PassengerDoor.PassengerDoor": "Дверь из Ñалона", + "Entities.gmod_subway_ezh1.Buttons.Back2.!HVFuses": "Блок предохранителей", + "Entities.gmod_subway_ezh1.Buttons.Back2.!Relays": "Ящик Ñ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð°Ð¼Ð¸ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð·Ð°Ñ€Ñда аккумулÑторной батареи и дверной воздухораÑпределитель", + "Entities.gmod_subway_ezh1.Buttons.Back2.!Heater": "Печка", + "Entities.gmod_subway_ezh1.Buttons.Main.RedRP": "КраÑÐ½Ð°Ñ Ð ÐŸ: КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки", + "Entities.gmod_subway_ezh1.Buttons.Main.GreenRP": "Ð—ÐµÐ»ÐµÐ½Ð°Ñ Ð ÐŸ: Ð—ÐµÐ»Ñ‘Ð½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки (Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿ÐµÑ€ÐµÐ³Ñ€ÑƒÐ·ÐºÐ¸)", + "Entities.gmod_subway_ezh1.Buttons.Main.SD": "СинÑÑ Ð»Ð°Ð¼Ð¿Ð° СД: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ поезда", + "Entities.gmod_subway_ezh1.Buttons.Main.DIPonSet": "КУ4:Включение оÑвещениÑ", + "Entities.gmod_subway_ezh1.Buttons.Main.DIPoffSet": "КУ5:Отключение оÑвещениÑ", + "Entities.gmod_subway_ezh1.Buttons.Main.VozvratRPSet": "Переключатель: Возврат Реле Перегрузки", + "Entities.gmod_subway_ezh1.Buttons.Main.KSNSet": "Переключатель: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½ÐµÐ¸ÑправноÑти (Срабатывание РП на неиÑправном вагоне)", + "Entities.gmod_subway_ezh1.Buttons.Main.KDPSet": "КДП:Правые двери", + "Entities.gmod_subway_ezh1.Buttons.Main.KRZDSet": "КРЗД: Кнопка резервного Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_ezh1.Buttons.Main.KDLSet": "КУ12: Открытие левых дверей", + "Entities.gmod_subway_ezh1.Buttons.Main.KU1Toggle": "Переключатель:Включение мотор-компреÑÑора", + "Entities.gmod_subway_ezh1.Buttons.Main.VUD1Toggle": "Переключатель: Закрытие дверей", + "Entities.gmod_subway_ezh1.Buttons.AV1.VU3Toggle": "ВУ3: ОÑвещение кабины", + "Entities.gmod_subway_ezh1.Buttons.AV1.VU2Toggle": "ВУ2: Ðварийное оÑвещение (45Ð’)", + "Entities.gmod_subway_ezh1.Buttons.AV1.VU1Toggle": "ВУ1: Печь Ð¾Ñ‚Ð¾Ð¿Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹ (3кВт)", + "Entities.gmod_subway_ezh1.Buttons.AVMain.AV8BToggle": "ÐÐ’-8Б: ÐвтоматичеÑкй выключатель (Ð’Ñпомогательные цепи выÑокого напрÑжениÑ)", + "Entities.gmod_subway_ezh1.Buttons.CabinDoor.CabinDoor1": "Дверь в кабину машиниÑта", + "Entities.gmod_subway_ezh1.Buttons.Front.FrontDoor": "ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ", + "Entities.gmod_subway_ezh1.Buttons.PassengerDoor1.PassengerDoor": "Дверь из Ñалона", + "Entities.gmod_subway_ezh1.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Выключение воздухораÑпределителÑ", + "Entities.gmod_subway_ezh1.Buttons.GV.GVToggle": "Главный выключатель", + "Entities.gmod_subway_ezh1.Buttons.VU.VUToggle": "ВУ: Выключатель управлениÑ", + "Entities.gmod_subway_ezh1.Buttons.HelperPanel.VUD2Toggle": "ВУД2: Выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÑŒÐ¼Ð¸", + "Entities.gmod_subway_ezh1.Buttons.HelperPanel.VDLSet": "ВДЛ: Выключатель левых дверей", + "Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeLeft": "Поворот колеÑа ручного тормоза", + "Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeRight": "Поворот колеÑа ручного тормоза", + "Entities.gmod_subway_ezh1.Buttons.PneumaticManometer.!LinesPressure": "Давление в магиÑтралÑÑ… (краÑнаÑ: тормозной, чёрнаÑ: напорной)" +} +]] diff --git a/lua/metrostroi_data/languages_/ru_buttons_ezh3.lua b/lua/metrostroi_data/languages_/ru_buttons_ezh3.lua new file mode 100644 index 0000000..e772b93 --- /dev/null +++ b/lua/metrostroi_data/languages_/ru_buttons_ezh3.lua @@ -0,0 +1,158 @@ +return [[ +{ + "Lang": "ru", + "Name": "Russian", + + + "Entities.gmod_subway_ezh3.Buttons.Stopkran.EmergencyBrakeValveToggle": "Стопкран", + "Entities.gmod_subway_ezh3.Buttons.Back.BackDoor": "ЗаднÑÑ Ð´Ð²ÐµÑ€ÑŒ", + "Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle": "Кран двойной Ñ‚Ñги тормозной магиÑтрали", + "Entities.gmod_subway_ezh3.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle": "Кран двойной Ñ‚Ñги напорной магиÑтрали", + "Entities.gmod_subway_ezh3.Buttons.Battery.VBToggle": "ÐБ: Выключатель аккумулÑторной батареи (Ð’Ñпомогательные цепи низкого напрÑжениÑ)", + "Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_ezh3.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPMenuSet": "Информатор: Меню", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPUpSet": "Информатор: Вверх", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPDownSet": "Информатор: Вниз", + "Entities.gmod_subway_ezh3.Buttons.ASNP.R_ASNPOnToggle": "Информатор: Включение", + "Entities.gmod_subway_ezh3.Buttons.PassengerDoor1.PassengerDoor": "Дверь в кабину машиниÑта из Ñалона", + "Entities.gmod_subway_ezh3.Buttons.PassengerDoor.PassengerDoor": "Дверь в кабину машиниÑта из Ñалона", + "Entities.gmod_subway_ezh3.Buttons.CabinDoor.CabinDoor": "Дверь в кабину машиниÑта", + "Entities.gmod_subway_ezh3.Buttons.Front.FrontDoor": "ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ", + "Entities.gmod_subway_ezh3.Buttons.GV.GVToggle": "Главный выключатель", + "Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_ezh3.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_ezh3.Buttons.Panel.!OCH": "ОЧ: Лампа отÑутÑÑ‚Ð²Ð¸Ñ Ñ‡Ð°Ñтоты (0км\\ч)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!0": "0: Лампа Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð² 0км\\ч", + "Entities.gmod_subway_ezh3.Buttons.Panel.!40": "40: Лампа Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð² 40км\\ч", + "Entities.gmod_subway_ezh3.Buttons.Panel.!60": "60: Лампа Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð² 60км\\ч", + "Entities.gmod_subway_ezh3.Buttons.Panel.!70": "70: Лампа Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð² 70км\\ч", + "Entities.gmod_subway_ezh3.Buttons.Panel.!80": "80: Лампа Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð² 80км\\ч", + "Entities.gmod_subway_ezh3.Buttons.Panel.!Speedometer": "Индикатор ÑкороÑти (км/ч)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!TotalAmpermeter": "Силовой амперметр Ñ‚Ñговых Ñлектродвигателей (Ð)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!TotalVoltmeter": "ÐапрÑжение Ñиловой Ñети (кВ)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!BatteryVoltage": "ÐапрÑжение аккумулÑторной батареи ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (Ð’)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!BrakeCylinder": "Давление в тормозных цилиндрах (ТЦ)", + "Entities.gmod_subway_ezh3.Buttons.Panel.!LinesPressure": "Давление в магиÑтралÑÑ… (краÑнаÑ: тормозной, чёрнаÑ: напорной)", + "Entities.gmod_subway_ezh3.Buttons.Main.KU1Toggle": "ВМК: Включение мотор-компреÑÑора", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMM1Set": "СÐММ:Выключение Ñ‚Ñги", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMM2Set": "СÐММ:ПуÑк", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMM3Set": "СÐММ:СброÑ", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal1": "Лампа:Ход-Тормоз", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal2": "Лампа: Рабочее ÑоÑтоÑние СÐММ", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMSignal3": "Лампа:Включен иÑполнительный блок СÐММ", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMOnToggle": "СÐММ:Включение ÑиÑтемы автоведениÑ", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMBlokToggle": "СÐММ:ИÑполнительный блок", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMCommand3Set": "СÐММ:Ход2", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMCommand2Set": "СÐММ:Ðагон", + "Entities.gmod_subway_ezh3.Buttons.Main.SAMMCommand1Set": "СÐММ:Разрешение", + "Entities.gmod_subway_ezh3.Buttons.Main.KSNSet": "КСÐ: Кнопка Ñигнализации неиÑправноÑти", + "Entities.gmod_subway_ezh3.Buttons.Main.R_Program1Set": "Программа 1", + "Entities.gmod_subway_ezh3.Buttons.Main.R_Program2Set": "Программа 2", + "Entities.gmod_subway_ezh3.Buttons.Main.VUSToggle": "Переключатель: Ближний Ñвет/Дальний Ñвет", + "Entities.gmod_subway_ezh3.Buttons.Main.L_3Toggle": "Переключатель: ПодÑветка приборов", + "Entities.gmod_subway_ezh3.Buttons.Main.VAHToggle": "Переключатель: Ðварийный Ход", + "Entities.gmod_subway_ezh3.Buttons.Main.DIPonSet": "ОÑв. Вкл.: Включение оÑвещениÑ", + "Entities.gmod_subway_ezh3.Buttons.Main.DIPoffSet": "ОÑв. Выкл.: Выключение оÑвещениÑ", + "Entities.gmod_subway_ezh3.Buttons.Main.KSDSet": "КСД: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_ezh3.Buttons.Main.KVTSet": "КВТ: Кнопка ВоÑприÑÑ‚Ð¸Ñ Ð¢Ð¾Ñ€Ð¼Ð¾Ð¶ÐµÐ½Ð¸Ñ", + "Entities.gmod_subway_ezh3.Buttons.Main.KBSet": "КБ: Кнопка БдительноÑти", + "Entities.gmod_subway_ezh3.Buttons.Main.KBLamp": "Лампа: Вращение РК", + "Entities.gmod_subway_ezh3.Buttons.Main.ARSToggle": "ÐРС: Включение ÑиÑтемы автоматичеÑкого Ñ€ÐµÐ³ÑƒÐ»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑкороÑти", + "Entities.gmod_subway_ezh3.Buttons.Main.R_UNchToggle": "УÐЧ: УÑилитель низких чаÑтот", + "Entities.gmod_subway_ezh3.Buttons.Main.VUD1Toggle": "ВУД: Выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÑŒÐ¼Ð¸", + "Entities.gmod_subway_ezh3.Buttons.Main.R_RadioToggle": "Радиоинформатор (вÑтроеный)", + "Entities.gmod_subway_ezh3.Buttons.Main.ALSToggle": "ÐЛС: Включение ÑиÑтемы автоматичеÑкой локомотивной Ñигнализации", + "Entities.gmod_subway_ezh3.Buttons.Main.VozvratRPSet": "КВРП: Возврат реле перегрузки", + "Entities.gmod_subway_ezh3.Buttons.Main.RingSet": "Звонок", + "Entities.gmod_subway_ezh3.Buttons.Main.L_2Toggle": "Переключатель: ОÑвещение кабины", + "Entities.gmod_subway_ezh3.Buttons.Main.KRZDSet": "КРЗД: Кнопка резервного Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_ezh3.Buttons.Main.KDPSet": "КДП: Кнопка правых дверей", + "Entities.gmod_subway_ezh3.Buttons.Main.KDLSet": "КДЛ: Кнопка левых дверей", + "Entities.gmod_subway_ezh3.Buttons.Main.KAHSet": "KAH", + "Entities.gmod_subway_ezh3.Buttons.Main.RezMKSet": "Резервное включение мотор-компреÑÑора", + "Entities.gmod_subway_ezh3.Buttons.Main.KRPSet": "КРП: Кнопка резервного пуÑка", + "Entities.gmod_subway_ezh3.Buttons.Main.RSTToggle": "ВПР: Включение поездной радиоÑвÑзи", + "Entities.gmod_subway_ezh3.Buttons.Main.R_GToggle": "Громкоговоритель", + "Entities.gmod_subway_ezh3.Buttons.Main.Custom2Set": "Ðезаведенный тумблер", + "Entities.gmod_subway_ezh3.Buttons.Main.Custom3Set": "Ðезаведенный тумблер", + "Entities.gmod_subway_ezh3.Buttons.Main.ASNPPlay": "Индикатор работы программы информатора", + "Entities.gmod_subway_ezh3.Buttons.AV1.VU3Toggle": "ВУ3: ОÑвещение кабины\n", + "Entities.gmod_subway_ezh3.Buttons.AV1.VU2Toggle": "ВУ2: Ðварийное оÑвещение (45Ð’)\n", + "Entities.gmod_subway_ezh3.Buttons.AV1.VU1Toggle": "ВУ1: Печь Ð¾Ñ‚Ð¾Ð¿Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹ (3кВт)\n", + "Entities.gmod_subway_ezh3.Buttons.AVMain.AV8BToggle": "ÐÐ’-8Б: ÐвтоматичеÑкй выключатель (Ð’Ñпомогательные цепи выÑокого напрÑжениÑ)\n", + "Entities.gmod_subway_ezh3.Buttons.RC1.RC1Toggle": "РЦ-ÐРС: Разъединитель цепей ÐРС", + "Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVAToggle": "УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа (отключение автоÑтопа)", + "Entities.gmod_subway_ezh3.Buttons.UAVAPanel.UAVACToggle ": "УÐÐ’Ð: УниверÑальный ÐвтоматичеÑкий Выключатель ÐвтоÑтопа (воÑÑтановление контактов)", + "Entities.gmod_subway_ezh3.Buttons.VUHelper.VUToggle": "ВУ: Выключатель управлениÑ", + "Entities.gmod_subway_ezh3.Buttons.HelperPanel.VDLSet": "ВДЛ: Выключатель левых дверей", + "Entities.gmod_subway_ezh3.Buttons.HelperPanel.VUD2Toggle": "ВУД2: Выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÑŒÐ¼Ð¸", + "Entities.gmod_subway_ezh3.Buttons.EPKDisconnect.EPKToggle": "Кран ЭПК", + "Entities.gmod_subway_ezh3.Buttons.VU.VUToggle": "ВУ: Выключатель управлениÑ", + "Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeLeft": "Поворот колеÑа ручного тормоза", + "Entities.gmod_subway_ezh3.Buttons.ParkingBrake.ParkingBrakeRight": "Поворот колеÑа ручного тормоза", + "Entities.gmod_subway_ezh3.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Выключение воздухораÑпределителÑ", + + "Entities.gmod_subway_em508t.Buttons.Stopkran.EmergencyBrakeValveToggle": "Стопкран", + "Entities.gmod_subway_em508t.Buttons.Battery.VBToggle": "ÐБ: Выключатель аккумулÑторной батареи (Ð’Ñпомогательные цепи низкого напрÑжениÑ)", + "Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_em508t.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_em508t.Buttons.GV.GVToggle": "Главный выключатель", + "Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearTrainLineIsolationToggle": "Концевой кран тормозной магиÑтрали", + "Entities.gmod_subway_em508t.Buttons.RearPneumatic.RearBrakeLineIsolationToggle": "Концевой кран напорной магиÑтрали", + "Entities.gmod_subway_em508t.Buttons.RearDoor.RearDoor": "Дверь из Ñалона", + "Entities.gmod_subway_em508t.Buttons.Back2.!HVFuse": "Блок выÑоковольтных предохранителей", + "Entities.gmod_subway_em508t.Buttons.Back2.!Relays": "Ящик Ñ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð°Ð¼Ð¸ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð·Ð°Ñ€Ñда аккумулÑторной батареи и дверной воздухораÑпределитель", + "Entities.gmod_subway_em508t.Buttons.Back2.!Heater": "Печка", + "Entities.gmod_subway_em508t.Buttons.Front.FrontDoor": "ПереднÑÑ Ð´Ð²ÐµÑ€ÑŒ", + "Entities.gmod_subway_em508t.Buttons.AV1.VU3Toggle": "ВУ3: ОÑвещение кабины\n", + "Entities.gmod_subway_em508t.Buttons.AV1.VU2Toggle": "ВУ2: Ðварийное оÑвещение (45Ð’)\n", + "Entities.gmod_subway_em508t.Buttons.AV1.VU1Toggle": "ВУ1: Печь Ð¾Ñ‚Ð¾Ð¿Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ð±Ð¸Ð½Ñ‹ (3кВт)\n", + "Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeLeft": "Поворот колеÑа ручного тормоза", + "Entities.gmod_subway_em508t.Buttons.ParkingBrake.ParkingBrakeRight": "Поворот колеÑа ручного тормоза", + "Entities.gmod_subway_em508t.Buttons.CabinDoor.CabinDoor1": "Дверь в кабину машиниÑта", + "Entities.gmod_subway_em508t.Buttons.PassengerDoor.PassengerDoor": "Дверь из Ñалона", + "Entities.gmod_subway_em508t.Buttons.PassengerDoor1.PassengerDoor": "Дверь из Ñалона", + "Entities.gmod_subway_em508t.Buttons.Main.!RedRP": "КраÑÐ½Ð°Ñ Ð ÐŸ: КраÑÐ½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки", + "Entities.gmod_subway_em508t.Buttons.Main.!GreenRP": "Ð—ÐµÐ»ÐµÐ½Ð°Ñ Ð ÐŸ: Ð—ÐµÐ»Ñ‘Ð½Ð°Ñ Ð»Ð°Ð¼Ð¿Ð° реле перегрузки (Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿ÐµÑ€ÐµÐ³Ñ€ÑƒÐ·ÐºÐ¸)", + "Entities.gmod_subway_em508t.Buttons.Main.!SD": "СинÑÑ Ð»Ð°Ð¼Ð¿Ð° СД: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹ поезда", + "Entities.gmod_subway_em508t.Buttons.Main.KDLSet": "Переключатель: Открытие левых дверей", + "Entities.gmod_subway_em508t.Buttons.Main.KSDSet": "Переключатель: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ (Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹)", + "Entities.gmod_subway_em508t.Buttons.Main.VozvratRPSet": "Переключатель: Возврат Реле Перегрузки", + "Entities.gmod_subway_em508t.Buttons.Main.KSNSet": "Переключатель: Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½ÐµÐ¸ÑправноÑти (Срабатывание РП на неиÑправном вагоне)", + "Entities.gmod_subway_em508t.Buttons.Main.VUD1Toggle": "Переключатель: Закрытие дверей", + "Entities.gmod_subway_em508t.Buttons.Main.KU1Toggle": "Переключатель: Включение Мотор-компреÑÑора", + "Entities.gmod_subway_em508t.Buttons.Main.DIPonSet": "КУ4:Включение оÑвещениÑ", + "Entities.gmod_subway_em508t.Buttons.Main.DIPoffSet": "КУ5:Отключение оÑвещениÑ", + "Entities.gmod_subway_em508t.Buttons.Main.RezMKSet": "КУ5:Отключение оÑвещениÑ", + "Entities.gmod_subway_em508t.Buttons.Main.KDPSet": "КДП:Правые двери", + "Entities.gmod_subway_em508t.Buttons.Main.KRZDSet": "КУ10: Кнопка резервного Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð²ÐµÑ€ÐµÐ¹", + "Entities.gmod_subway_em508t.Buttons.AVMain.AV8BToggle": "ÐÐ’-8Б: ÐвтоматичеÑкй выключатель (Ð’Ñпомогательные цепи выÑокого напрÑжениÑ)\n", + "Entities.gmod_subway_em508t.Buttons.VU.VUToggle": "ВУ: Выключатель управлениÑ", + "Entities.gmod_subway_em508t.Buttons.VU.!Voltage": "ÐапрÑжение цепей управлениÑ", + "Entities.gmod_subway_em508t.Buttons.HelperPanel.VUD2Toggle": "ВУД2: Выключатель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²ÐµÑ€ÑŒÐ¼Ð¸", + "Entities.gmod_subway_em508t.Buttons.HelperPanel.VDLSet": "ВДЛ: Выключатель левых дверей", + "Entities.gmod_subway_em508t.Buttons.DriverValveBLTLDisconnect.DriverValveBLDisconnectToggle": "Кран двойной Ñ‚Ñги тормозной магиÑтрали", + "Entities.gmod_subway_em508t.Buttons.DriverValveBLTLDisconnect.DriverValveTLDisconnectToggle": "Кран двойной Ñ‚Ñги напорной магиÑтрали", + "Entities.gmod_subway_em508t.Buttons.AirDistributor.AirDistributorDisconnectToggle": "Выключение воздухораÑпределителÑ", + + + "Entities.gmod_subway_ezh3.Buttons.Main.Custom1Toggle": "Ðезаведенный тумблер", + "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1USet": "ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вверх", + "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1Set": "ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°", + "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA1DSet": "ИГЛÐ: ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вниз", + "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2USet": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вверх", + "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2Set": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°", + "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.IGLA2DSet": "ИГЛÐ: Ð’Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вниз", + "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLASR": "ИГЛÐ: SR", + "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLARX": "ИГЛÐ: RX", + "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAErr": "ИГЛÐ: Отказ", + "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAOSP": "ИГЛÐ: ОСП(Сработка огнетушителей)", + "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAPI": "ИГЛÐ: ПИ(Пожар)", + "Entities.gmod_subway_ezh3.Buttons.IGLAButtons.!IGLAOff": "ИГЛÐ: Откл", + + "Entities.gmod_subway_ezh3.Buttons.Back2.!HVHuse": "Блок выÑоковольтных предохранителей", + "Entities.gmod_subway_ezh3.Buttons.Back2.!AKBCharge": "Ящик Ñ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð°Ð¼Ð¸ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð·Ð°Ñ€Ñда аккумулÑторной батареи и дверной воздухораÑпределитель", + "Entities.gmod_subway_ezh3.Buttons.Back2.!Heater": "Печка" +} +]] diff --git a/lua/metrostroi_data/languages_/ru_spawner.lua b/lua/metrostroi_data/languages_/ru_spawner.lua new file mode 100644 index 0000000..9b71f2a --- /dev/null +++ b/lua/metrostroi_data/languages_/ru_spawner.lua @@ -0,0 +1,226 @@ +return [[ +{ + "Lang": "ru", + "Name": "Russian", + + "Spawner.Title": "Спавнер поездов", + "Spawner.Trains1": "Поездов", + "Spawner.Trains2": "МакÑимально", + "Spawner.WagNum": "Вагонов", + "Spawner.AutoCouple": "ÐвтоматичеÑки Ñцепить вагоны", + + "Entities.gmod_subway_81-717_mvm.Spawner.Texture.Name": "ОкраÑка кузова", + "Entities.gmod_subway_81-717_mvm.Spawner.PassTexture.Name": "ОкраÑка Ñалона", + "Entities.gmod_subway_81-717_mvm.Spawner.CabTexture.Name": "ОкраÑка кабины", + "Entities.gmod_subway_81-717_mvm.Spawner.Announcer.Name": "Звук информатора", + "Entities.gmod_subway_81-717_mvm.Spawner.Lighter.Name": "ПриÑутÑтвие зажигалки", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.Name": "Тип панели ÐРС", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.1": "СтандартнаÑ(квадратные лампы)", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.2": "СтандартнаÑ(круглые лампы)", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.3": "КиевÑкие/СПБ", + "Entities.gmod_subway_81-717_mvm.Spawner.ARSType.4": "Ð¡Ñ‚Ð°Ñ€Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ ÐРС", + "Entities.gmod_subway_81-717_mvm.Spawner.Cran.Name": "Тип крана", + "Entities.gmod_subway_81-717_mvm.Spawner.Cran.1": "334", + "Entities.gmod_subway_81-717_mvm.Spawner.Cran.2": "013", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.Name": "Тип маÑки", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.1": "2-2", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.2": "2-2-2", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.3": "1-4-1 тип бампера 1", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.4": "1-4-1 тип бампера 2", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.5": "1-1", + "Entities.gmod_subway_81-717_mvm.Spawner.MaskType.6": "Ретро", + "Entities.gmod_subway_81-717_mvm.Spawner.LED.Name": "Светодиодные фары", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.Name": "Тип БПСÐ", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.1": "Старый звук Ñ Ð²Ñ‹Ñоким тоном", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.2": "Старый звук Ñ Ñредним тоном", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.3": "Стандартный(из СПБ)", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.4": "Стандартный(ТКЛ)", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.5": "Стандартный", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.6": "КиевÑкий", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.7": "Старый", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.8": "Стандартный 2", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.9": "Стандартный 3", + "Entities.gmod_subway_81-717_mvm.Spawner.BPSNType.10": "Беззвучный(БПÐ-115)", + "Entities.gmod_subway_81-717_mvm.Spawner.NewKV.Name": "ÐÐ¾Ð²Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ ГРКВ", + "Entities.gmod_subway_81-717_mvm.Spawner.HornType.Name": "ПитерÑкий тифон", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.Name": "Звук звонка", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.1": "Старый", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.2": "Стандартный Ñ Ð½Ð¸Ð·ÐºÐ¸Ð¼ тоном", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.3": "Стандартный Ñ Ð²Ñ‹Ñоким тоном", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.4": "Стандартный прерывиÑтый Ñ Ð½Ð¸Ð·ÐºÐ¸Ð¼ тоном", + "Entities.gmod_subway_81-717_mvm.Spawner.RingType.5": "Стандартный прерывиÑтый Ñ Ð²Ñ‹Ñоким тоном", + "Entities.gmod_subway_81-717_mvm.Spawner.NM.Name": "Давление напорной магиÑтрали", + "Entities.gmod_subway_81-717_mvm.Spawner.Battery.Name": "Вкл. батарею", + "Entities.gmod_subway_81-717_mvm.Spawner.Switches.Name": "Вкл. вÑе автоматики", + "Entities.gmod_subway_81-717_mvm.Spawner.SwitchesR.Name": "Ðвтоматики будут включены Ñлучайно", + "Entities.gmod_subway_81-717_mvm.Spawner.DoorsL.Name": "Открыть левые двери", + "Entities.gmod_subway_81-717_mvm.Spawner.DoorsR.Name": "Открыть правые двери", + "Entities.gmod_subway_81-717_mvm.Spawner.GV.Name": "Вкл. главный выключатель", + "Entities.gmod_subway_81-717_mvm.Spawner.PB.Name": "Вкл. ÑтоÑночный тормоз", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.Name": "Тип бортовых ламп", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.1": "Горизнонтальные", + "Entities.gmod_subway_81-717_mvm.Spawner.BortLampType.2": "Вертикальные", + "Entities.gmod_subway_81-717_mvm.Spawner.MVM.Name": "Значок МВМ", + "Entities.gmod_subway_81-717_mvm.Spawner.HandRail.Name": "Тип поручней", + "Entities.gmod_subway_81-717_mvm.Spawner.HandRail.1": "Старый", + "Entities.gmod_subway_81-717_mvm.Spawner.HandRail.2": "Ðовый", + "Entities.gmod_subway_81-717_mvm.Spawner.SeatType.Name": "Тип Ñидушек", + "Entities.gmod_subway_81-717_mvm.Spawner.SeatType.1": "Старый", + "Entities.gmod_subway_81-717_mvm.Spawner.SeatType.2": "Ðовый", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.Name": "Тип ламп", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.1": "Тип 1", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.2": "Тип 2", + "Entities.gmod_subway_81-717_mvm.Spawner.LampType.3": "Тип 3", + "Entities.gmod_subway_81-717_mvm.Spawner.Breakers.Name": "Ðвтоматики Ñправа", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.Name": "Вид рекламы", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.1": "Тип 1", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.2": "Тип 2", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.3": "Тип 3", + "Entities.gmod_subway_81-717_mvm.Spawner.Adverts.4": "Без реклам", + + "Entities.gmod_subway_81-720.Spawner.Texture.Name": "ОкраÑка кузова", + "Entities.gmod_subway_81-720.Spawner.PassTexture.Name": "ОкраÑка Ñалона", + "Entities.gmod_subway_81-720.Spawner.CabTexture.Name": "ОкраÑка кабины", + "Entities.gmod_subway_81-720.Spawner.Announcer.Name": "Информатор", + "Entities.gmod_subway_81-720.Spawner.Scheme.Name": "Ðаддверные Ñхемы", + "Entities.gmod_subway_81-720.Spawner.PassSchemesInvert.Name": "Инвертировать наддверные Ñхемы", + "Entities.gmod_subway_81-720.Spawner.NM.Name": "Давление напорной магиÑтрали", + "Entities.gmod_subway_81-720.Spawner.Battery.Name": "Вкл. батарею", + "Entities.gmod_subway_81-720.Spawner.BRU.Name": "Вкл. БРУ(ГВ)", + "Entities.gmod_subway_81-720.Spawner.PVZR.Name": "Ðвтоматики на ПВЗ будут включены Ñлучайно", + "Entities.gmod_subway_81-720.Spawner.PPZ.Name": "Вкл. вÑе поездные автоматики", + "Entities.gmod_subway_81-720.Spawner.PPZDepot.Name": "Выкл. автоматики как в депо", + "Entities.gmod_subway_81-720.Spawner.PPZR.Name": "Ðвтоматики на ППЗ будут включены Ñлучайно", + "Entities.gmod_subway_81-720.Spawner.DoorsL.Name": "Открыть левые двери", + "Entities.gmod_subway_81-720.Spawner.DoorsR.Name": "Открыть правые двери", + + "Entities.gmod_subway_81-722.Spawner.Texture.Name": "ОкраÑка кузова", + "Entities.gmod_subway_81-722.Spawner.PassTexture.Name": "ОкраÑка Ñалона", + "Entities.gmod_subway_81-722.Spawner.CabTexture.Name": "ОкраÑка кабины", + "Entities.gmod_subway_81-722.Spawner.Announcer.Name": "Информатор", + "Entities.gmod_subway_81-722.Spawner.Scheme.Name": "Ðаддверные Ñхемы", + "Entities.gmod_subway_81-722.Spawner.SarmatInvert.Name": "Инвертировать наддверные Ñхемы", + "Entities.gmod_subway_81-722.Spawner.NM.Name": "Давление напорной магиÑтрали", + "Entities.gmod_subway_81-722.Spawner.Battery.Name": "Вкл. батарею", + "Entities.gmod_subway_81-722.Spawner.Switches.Name": "Вкл. вÑе автоматики", + "Entities.gmod_subway_81-722.Spawner.SwitchesR.Name": "Ðвтоматики будут включены Ñлучайно", + "Entities.gmod_subway_81-722.Spawner.DoorsL.Name": "Открыть левые двери", + "Entities.gmod_subway_81-722.Spawner.DoorsR.Name": "Открыть правые двери", + + + "Entities.gmod_subway_ezh.Spawner.Texture.Name": "ОкраÑка кузова", + "Entities.gmod_subway_ezh.Spawner.PassTexture.Name": "ОкраÑка Ñалона", + "Entities.gmod_subway_ezh.Spawner.CabTexture.Name": "ОкраÑка кабины", + "Entities.gmod_subway_ezh.Spawner.Announcer.Name": "Информатор", + "Entities.gmod_subway_ezh.Spawner.HornType.Name": "ПитерÑкий тифон", + "Entities.gmod_subway_ezh.Spawner.NM.Name": "Давление напорной магиÑтрали", + "Entities.gmod_subway_ezh.Spawner.Battery.Name": "Вкл. батарею", + "Entities.gmod_subway_ezh.Spawner.AV8B.Name": "Вкл. ÐÐ’8Б", + "Entities.gmod_subway_ezh.Spawner.DoorsL.Name": "Открыть левые двери", + "Entities.gmod_subway_ezh.Spawner.DoorsR.Name": "Открыть правые двери", + "Entities.gmod_subway_ezh.Spawner.GV.Name": "Вкл. главный выключатель", + + "Entities.gmod_subway_em508.Spawner.Texture.Name": "ОкраÑка кузова", + "Entities.gmod_subway_em508.Spawner.PassTexture.Name": "ОкраÑка Ñалона", + "Entities.gmod_subway_em508.Spawner.CabTexture.Name": "ОкраÑка кабины", + "Entities.gmod_subway_em508.Spawner.Announcer.Name": "Информатор", + "Entities.gmod_subway_em508.Spawner.HornType.Name": "ПитерÑкий тифон", + "Entities.gmod_subway_em508.Spawner.NM.Name": "Давление напорной магиÑтрали", + "Entities.gmod_subway_em508.Spawner.Battery.Name": "Вкл. батарею", + "Entities.gmod_subway_em508.Spawner.AV8B.Name": "Вкл. ÐÐ’8Б", + "Entities.gmod_subway_em508.Spawner.DoorsL.Name": "Открыть левые двери", + "Entities.gmod_subway_em508.Spawner.DoorsR.Name": "Открыть правые двери", + "Entities.gmod_subway_em508.Spawner.GV.Name": "Вкл. главный выключатель", + + "Entities.gmod_subway_ezh3.Spawner.Texture.Name": "ОкраÑка кузова", + "Entities.gmod_subway_ezh3.Spawner.PassTexture.Name": "ОкраÑка Ñалона", + "Entities.gmod_subway_ezh3.Spawner.CabTexture.Name": "ОкраÑка кабины", + "Entities.gmod_subway_ezh3.Spawner.Announcer.Name": "Информатор", + "Entities.gmod_subway_ezh3.Spawner.HornType.Name": "ПитерÑкий тифон", + "Entities.gmod_subway_ezh3.Spawner.NM.Name": "Давление напорной магиÑтрали", + "Entities.gmod_subway_ezh3.Spawner.Battery.Name": "Вкл. батарею", + "Entities.gmod_subway_ezh3.Spawner.AV8B.Name": "Вкл. ÐÐ’8Б", + "Entities.gmod_subway_ezh3.Spawner.DoorsL.Name": "Открыть левые двери", + "Entities.gmod_subway_ezh3.Spawner.DoorsR.Name": "Открыть правые двери", + "Entities.gmod_subway_ezh3.Spawner.GV.Name": "Вкл. главный выключатель", + + "Entities.gmod_subway_81-717_lvz.Spawner.Texture.Name": "ОкраÑка кузова", + "Entities.gmod_subway_81-717_lvz.Spawner.PassTexture.Name": "ОкраÑка Ñалона", + "Entities.gmod_subway_81-717_lvz.Spawner.CabTexture.Name": "ОкраÑка кабины", + "Entities.gmod_subway_81-717_lvz.Spawner.Announcer.Name": "Информатор", + "Entities.gmod_subway_81-717_lvz.Spawner.Lighter.Name": "ПриÑутÑтвие зажигалки", + "Entities.gmod_subway_81-717_lvz.Spawner.Cran.Name": "Тип крана", + "Entities.gmod_subway_81-717_lvz.Spawner.Cran.1": "334", + "Entities.gmod_subway_81-717_lvz.Spawner.Cran.2": "013", + "Entities.gmod_subway_81-717_lvz.Spawner.MaskType.Name": "Тип маÑки", + "Entities.gmod_subway_81-717_lvz.Spawner.MaskType.1": "1-4-1", + "Entities.gmod_subway_81-717_lvz.Spawner.MaskType.2": "2-2(Ñнизу)-2", + "Entities.gmod_subway_81-717_lvz.Spawner.MaskType.3": "2-2", + "Entities.gmod_subway_81-717_lvz.Spawner.MaskType.4": "2-2-2", + "Entities.gmod_subway_81-717_lvz.Spawner.MaskType.5": "1-3-1", + "Entities.gmod_subway_81-717_lvz.Spawner.LED.Name": "Светодиодные фары", + "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.Name": "Тип БПСÐ", + "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.1": "Старый звук Ñ Ð²Ñ‹Ñоким тоном", + "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.2": "Старый звук Ñ Ñредним тоном", + "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.3": "Стандартный(из СПБ)", + "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.4": "Стандартный(ТКЛ)", + "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.5": "Стандартный", + "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.6": "КиевÑкий", + "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.7": "Старый", + "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.8": "Стандартный 2", + "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.9": "Стандартный 3", + "Entities.gmod_subway_81-717_lvz.Spawner.BPSNType.10": "Беззвучный(БПÐ-115)", + "Entities.gmod_subway_81-717_lvz.Spawner.NewKV.Name": "ÐÐ¾Ð²Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ ГРКВ", + "Entities.gmod_subway_81-717_lvz.Spawner.HornType.Name": "ПитерÑкий тифон", + "Entities.gmod_subway_81-717_lvz.Spawner.RingType.Name": "Звук звонка", + "Entities.gmod_subway_81-717_lvz.Spawner.RingType.1": "Старый", + "Entities.gmod_subway_81-717_lvz.Spawner.RingType.2": "Стандартный Ñ Ð½Ð¸Ð·ÐºÐ¸Ð¼ тоном", + "Entities.gmod_subway_81-717_lvz.Spawner.RingType.3": "Стандартный Ñ Ð²Ñ‹Ñоким тоном", + "Entities.gmod_subway_81-717_lvz.Spawner.RingType.4": "Стандартный прерывиÑтый Ñ Ð½Ð¸Ð·ÐºÐ¸Ð¼ тоном", + "Entities.gmod_subway_81-717_lvz.Spawner.RingType.5": "Стандартный прерывиÑтый Ñ Ð²Ñ‹Ñоким тоном", + "Entities.gmod_subway_81-717_lvz.Spawner.NM.Name": "Давление напорной магиÑтрали", + "Entities.gmod_subway_81-717_lvz.Spawner.Battery.Name": "Вкл. батарею", + "Entities.gmod_subway_81-717_lvz.Spawner.Switches.Name": "Вкл. вÑе автоматики", + "Entities.gmod_subway_81-717_lvz.Spawner.SwitchesR.Name": "Ðвтоматики будут включены Ñлучайно", + "Entities.gmod_subway_81-717_lvz.Spawner.DoorsL.Name": "Открыть левые двери", + "Entities.gmod_subway_81-717_lvz.Spawner.DoorsR.Name": "Открыть правые двери", + "Entities.gmod_subway_81-717_lvz.Spawner.GV.Name": "Вкл. главный выключатель", + "Entities.gmod_subway_81-717_lvz.Spawner.PB.Name": "Вкл. ÑтоÑночный тормоз", + "Entities.gmod_subway_81-717_lvz.Spawner.BortLampType.Name": "Тип бортовых ламп", + "Entities.gmod_subway_81-717_lvz.Spawner.BortLampType.1": "Горизнонтальные", + "Entities.gmod_subway_81-717_lvz.Spawner.BortLampType.2": "Вертикальные", + "Entities.gmod_subway_81-717_lvz.Spawner.HandRail.Name": "Тип поручней", + "Entities.gmod_subway_81-717_lvz.Spawner.HandRail.1": "Старый", + "Entities.gmod_subway_81-717_lvz.Spawner.HandRail.2": "Ðовый", + "Entities.gmod_subway_81-717_lvz.Spawner.SeatType.Name": "Тип Ñидушек", + "Entities.gmod_subway_81-717_lvz.Spawner.SeatType.1": "Старый", + "Entities.gmod_subway_81-717_lvz.Spawner.SeatType.2": "Ðовый", + "Entities.gmod_subway_81-717_lvz.Spawner.LampType.Name": "Тип ламп", + "Entities.gmod_subway_81-717_lvz.Spawner.LampType.1": "Тип 1", + "Entities.gmod_subway_81-717_lvz.Spawner.LampType.2": "Тип 2", + "Entities.gmod_subway_81-717_lvz.Spawner.LampType.3": "Тип 3", + "Entities.gmod_subway_81-717_lvz.Spawner.Breakers.Name": "Ðвтоматики Ñправа", + "Entities.gmod_subway_81-717_lvz.Spawner.Adverts.Name": "Вид рекламы", + "Entities.gmod_subway_81-717_lvz.Spawner.Adverts.1": "Тип 1", + "Entities.gmod_subway_81-717_lvz.Spawner.Adverts.2": "Тип 2", + "Entities.gmod_subway_81-717_lvz.Spawner.Adverts.3": "Тип 3", + "Entities.gmod_subway_81-717_lvz.Spawner.Adverts.4": "Без реклам", + + "Entities.gmod_subway_81-703.Spawner.Texture.Name": "ОкраÑка кузова", + "Entities.gmod_subway_81-703.Spawner.PassTexture.Name": "ОкраÑка Ñалона", + "Entities.gmod_subway_81-703.Spawner.CabTexture.Name": "ОкраÑка кабины", + "Entities.gmod_subway_81-703.Spawner.Announcer.Name": "Информатор", + "Entities.gmod_subway_81-703.Spawner.HornType.Name": "ПитерÑкий тифон", + "Entities.gmod_subway_81-703.Spawner.NM.Name": "Давление напорной магиÑтрали", + "Entities.gmod_subway_81-703.Spawner.Battery.Name": "Вкл. батарею", + "Entities.gmod_subway_81-703.Spawner.AV8B.Name": "Вкл. ÐÐ’8Б", + "Entities.gmod_subway_81-703.Spawner.DoorsL.Name": "Открыть левые двери", + "Entities.gmod_subway_81-703.Spawner.DoorsR.Name": "Открыть правые двери", + "Entities.gmod_subway_81-703.Spawner.GV.Name": "Вкл. главный выключатель", + + + + "Spawner.Close": "Закрыть", + "Spawner.Spawn": "Готово" +} +]] diff --git a/lua/metrostroi_data/pa_gm_metro_crossline_c4.lua b/lua/metrostroi_data/pa_gm_metro_crossline_c4.lua new file mode 100644 index 0000000..80cedee --- /dev/null +++ b/lua/metrostroi_data/pa_gm_metro_crossline_c4.lua @@ -0,0 +1,2481 @@ +{ + "1": [ + [ + { + "slopes": [ + [ + 20.0, + 845.451 + ], + [ + 0.0, + 1205.1674 + ], + [ + 5.0, + 1363.6692, + 0.0 + ], + [ + 0.0, + 1463.4951 + ], + [ + 45.0, + 2346.2218 + ], + [ + 0.0, + 2596.9441 + ], + [ + 25.0, + 3295.4179 + ], + [ + 15.0, + 3517.8838 + ], + [ + 20.0, + 3598.3329 + ], + [ + 0.0, + 3808.7421 + ], + [ + 10.0, + 3958.802, + 2.0 + ], + [ + 0.0, + 3999.1842 + ], + [ + 20.0, + 4478.8099 + ], + [ + 15.0, + 4548.849 + ], + [ + 45.0, + 4598.6701 + ], + [ + 25.0, + 4798.757 + ], + [ + 0.0, + 4898.2389 + ], + [ + -20.0, + 5636.8246 + ], + [ + 0.0, + 6053.7193 + ], + [ + -5.0, + 6293.4981, + 0.0 + ], + [ + 0.0, + 6644.8761 + ], + [ + 35.0, + 6849.7321 + ], + [ + 0.0, + 7069.9078 + ], + [ + 45.0, + 7649.3506 + ], + [ + 0.0, + 7938.5793 + ], + [ + 45.0, + 8188.3756 + ], + [ + 0.0, + 8518.7076 + ], + [ + 10.0, + 8637.2944 + ], + [ + 0.0, + 8846.9184 + ], + [ + 35.0, + 9346.8366 + ], + [ + 40.0, + 9427.1725 + ], + [ + 35.0, + 9477.2283 + ], + [ + 0.0, + 9656.104 + ], + [ + 20.0, + 9666.0144 + ], + [ + 0.0, + 9814.4795 + ], + [ + 10.0, + 9909.9192, + 1.0 + ], + [ + 0.0, + 10118.4314 + ], + [ + 10.0, + 10877.6026, + 6.0 + ], + [ + 0.0, + 10957.3241 + ] + ], + "slopeLength": 79.7215, + "sensors": [ + 199.9342, + 295.2651, + 1222.2821, + 1324.6847, + 2841.8153, + 2939.5584, + 4010.8822, + 4113.9494, + 5499.0453, + 5597.7516, + 7259.7772, + 7355.9965, + 8866.3448, + 10974.6384, + 11078.0379 + ], + "stations": [ + { + "path": 1.0, + "pos": 311.7655, + "linkedSensor": 1.0, + "id": 110.0, + "isHorlift": false, + "rightDoors": false, + "name": "МеждународнаÑ", + "isLast": false + }, + { + "path": 1.0, + "pos": 1340.3142, + "linkedSensor": 3.0, + "id": 111.0, + "isHorlift": false, + "rightDoors": false, + "name": "Парк культуры", + "isLast": false + }, + { + "linkedSensor": 5.0, + "id": 112.0, + "path": 1.0, + "pos": 2955.1122, + "hasSwitches": true, + "isHorlift": false, + "rightDoors": false, + "name": "ПолитехничеÑкаÑ", + "isLast": false + }, + { + "path": 1.0, + "pos": 4129.6481, + "linkedSensor": 7.0, + "id": 113.0, + "isHorlift": false, + "rightDoors": false, + "name": "ПроÑпект Ñуворова", + "isLast": false + }, + { + "linkedSensor": 9.0, + "id": 114.0, + "path": 1.0, + "pos": 5613.2086, + "hasSwitches": true, + "isHorlift": false, + "rightDoors": false, + "name": "ÐахимовÑкаÑ", + "isLast": false + }, + { + "dist_last_start": 7497.1201, + "dist_last_end": 7672.1201, + "linkedSensor": 11.0, + "id": 115.0, + "path": 1.0, + "isInWrong": true, + "name_last": "ОктÑбрьÑкой", + "pos": 7372.6212, + "isHorlift": false, + "rightDoors": false, + "name": "ОктÑбрьÑкаÑ", + "isLast": true + }, + { + "dist_last_start": 9048.6695, + "dist_last_end": 10002.6695, + "linkedSensor": 13.0, + "id": 116.0, + "path": 1.0, + "pos": 8977.8898, + "hasSwitches": true, + "name_last": "Речной", + "isHorlift": false, + "rightDoors": true, + "name": "РечнаÑ", + "isLast": true + }, + { + "dist_last_start": 11293.0817, + "dist_last_end": 11543.0817, + "linkedSensor": 14.0, + "id": 117.0, + "path": 1.0, + "isInWrong": false, + "name_last": "ПролетарÑкой", + "pos": 11093.6325, + "isHorlift": false, + "rightDoors": false, + "name": "ПролетарÑкаÑ", + "isLast": true + } + ], + "signals": [ + [ + "MD3", + 19.0477 + ], + [ + "MDG", + 143.6259 + ], + [ + "MDA100", + 181.5837 + ], + [ + "219", + 196.6065 + ], + [ + "5A", + 280.0352 + ], + [ + "221", + 322.0814 + ], + [ + "219A", + 381.0164 + ], + [ + "223", + 510.5559 + ], + [ + "225", + 654.8644 + ], + [ + "227", + 792.1698 + ], + [ + "229", + 910.1179 + ], + [ + "231", + 1030.8249 + ], + [ + "233", + 1095.8453 + ], + [ + "235", + 1158.3352 + ], + [ + "237", + 1221.0768 + ], + [ + "239A", + 1289.3552 + ], + [ + "239", + 1350.0118 + ], + [ + "27A", + 1399.9782 + ], + [ + "241", + 1521.3638 + ], + [ + "243", + 1731.5634 + ], + [ + "245", + 1931.7584 + ], + [ + "247", + 2151.8986 + ], + [ + "249", + 2356.4315 + ], + [ + "251A", + 2481.4097 + ], + [ + " 251", + 2538.1932 + ], + [ + "PT249A", + 2573.8529 + ], + [ + "PT253", + 2644.5677 + ], + [ + "PT255", + 2707.3049 + ], + [ + "PT257", + 2769.6929 + ], + [ + "PT47A", + 2822.9061 + ], + [ + "PT259", + 2832.16 + ], + [ + "261A", + 2894.7452 + ], + [ + "261B", + 2924.6498 + ], + [ + "PT261M", + 2967.1842 + ], + [ + "PTA201", + 3041.6599 + ], + [ + "263", + 3162.051 + ], + [ + "265", + 3338.8371 + ], + [ + "267", + 3507.0348 + ], + [ + "269M", + 3657.0158 + ], + [ + "273A", + 3735.6493 + ], + [ + "271", + 3810.0102 + ], + [ + "273", + 3885.2571 + ], + [ + "M1", + 3893.1815 + ], + [ + "275", + 3947.9004 + ], + [ + "277", + 4010.2791 + ], + [ + "281A", + 4079.9363 + ], + [ + "279", + 4144.1784 + ], + [ + "283A", + 4197.9247 + ], + [ + "281", + 4286.4398 + ], + [ + "283", + 4417.2586 + ], + [ + "285", + 4562.5001 + ], + [ + "287", + 4685.7643 + ], + [ + "289", + 4800.9504 + ], + [ + "291", + 4919.9424 + ], + [ + "NH293", + 5036.0715 + ], + [ + "NH295", + 5180.9459 + ], + [ + "NH297", + 5306.3799 + ], + [ + "299", + 5373.6023 + ], + [ + "301", + 5435.9521 + ], + [ + "303", + 5498.1445 + ], + [ + "311A", + 5568.3753 + ], + [ + "305", + 5624.3101 + ], + [ + "313A", + 5682.9605 + ], + [ + "307", + 5764.3359 + ], + [ + "315A", + 5839.5876 + ], + [ + "309", + 5926.2981 + ], + [ + "311", + 6126.9837 + ], + [ + "313", + 6346.2035 + ], + [ + "315", + 6556.4057 + ], + [ + "323A", + 6675.4586 + ], + [ + "317", + 6776.5111 + ], + [ + "325A", + 6839.5631 + ], + [ + "OK319", + 6950.3678 + ], + [ + "OK321", + 7039.691 + ], + [ + "OK323", + 7125.2606 + ], + [ + "OK325", + 7187.6476 + ], + [ + "OKA7", + 7240.8247 + ], + [ + "327", + 7249.6336 + ], + [ + "335A", + 7307.9886 + ], + [ + "335B", + 7355.8862 + ], + [ + "329", + 7380.257 + ], + [ + "133A", + 7442.1409 + ], + [ + "331", + 7512.4642 + ], + [ + "333", + 7626.6941 + ], + [ + "335", + 7780.0581 + ], + [ + "337", + 7925.306 + ], + [ + "339", + 8086.6077 + ], + [ + "341", + 8288.965 + ], + [ + "343", + 8434.564 + ], + [ + "353", + 8516.3464 + ], + [ + "345", + 8603.5111 + ], + [ + "347", + 8666.1006 + ], + [ + "349", + 8729.0483 + ], + [ + "351", + 8791.4415 + ], + [ + "RX353", + 8854.2824 + ], + [ + "363A", + 8928.2726 + ], + [ + "363B", + 8961.3163 + ], + [ + "RX355", + 8986.4092 + ], + [ + "RXR3", + 9017.3836 + ], + [ + "RXA3", + 9037.8133 + ], + [ + "357", + 9218.4882 + ], + [ + "359", + 9406.7399 + ], + [ + "361", + 9576.103 + ], + [ + "373A", + 9636.1101 + ], + [ + "363", + 9737.3861 + ], + [ + "365", + 9876.278 + ], + [ + "367", + 10009.2053 + ], + [ + "369", + 10135.6066 + ], + [ + "371", + 10276.541 + ], + [ + "373", + 10417.442 + ], + [ + "375", + 10579.978 + ], + [ + "PR377", + 10708.469 + ], + [ + "PR379", + 10770.3686 + ], + [ + "PR381", + 10832.5667 + ], + [ + "PR383", + 10894.7395 + ], + [ + "PR385", + 10957.2606 + ], + [ + "401A", + 11042.7369 + ], + [ + "401B", + 11068.879 + ], + [ + "PR387", + 11099.3226 + ], + [ + "PRR5", + 11138.9852 + ], + [ + "PRA5", + 11139.8285 + ], + [ + "PRA1ST", + 11246.5446 + ] + ], + "slope": [ + [ + 10877.6026, + 5.9302 + ], + [ + 10887.5345, + 9.7683 + ], + [ + 10897.4206, + 8.365 + ], + [ + 10907.255, + 9.7566 + ], + [ + 10917.0347, + 8.3506 + ], + [ + 10927.2001, + 8.6609 + ], + [ + 10937.3064, + 8.753 + ], + [ + 10947.3531, + 8.6851 + ] + ] + }, + 11284.9326 + ], + [ + { + "slopes": [ + [ + -10.0, + 360.1912, + 7.0 + ], + [ + 0.0, + 440.2883 + ], + [ + -5.0, + 1136.5713, + 0.0 + ], + [ + 0.0, + 1345.2872 + ], + [ + -15.0, + 1464.8497 + ], + [ + -20.0, + 1564.4296 + ], + [ + -35.0, + 1634.2338 + ], + [ + 0.0, + 1943.696 + ], + [ + -20.0, + 2432.2 + ], + [ + 0.0, + 2619.7565 + ], + [ + -5.0, + 2699.3834, + 2.0 + ], + [ + 0.0, + 2729.4866 + ], + [ + -45.0, + 2769.3634 + ], + [ + 0.0, + 3130.9037 + ], + [ + -45.0, + 3349.6313 + ], + [ + 0.0, + 3649.6103 + ], + [ + -35.0, + 4278.0315 + ], + [ + 0.0, + 4527.0654 + ], + [ + -5.0, + 4576.539, + 0.0 + ], + [ + 0.0, + 4626.3497 + ], + [ + -20.0, + 5366.4481 + ], + [ + 0.0, + 5586.0237 + ], + [ + 25.0, + 5606.2433 + ], + [ + 0.0, + 5805.6187 + ], + [ + -45.0, + 6611.4609 + ], + [ + -15.0, + 6761.4003 + ], + [ + -10.0, + 6967.0225 + ], + [ + 0.0, + 7044.9677 + ], + [ + -20.0, + 7591.8818 + ], + [ + 0.0, + 8125.7746 + ], + [ + -45.0, + 8822.1769 + ], + [ + 0.0, + 9054.8902 + ], + [ + -10.0, + 9397.9305, + 1.0 + ], + [ + 0.0, + 9610.4038 + ], + [ + -10.0, + 9880.1576, + 0.0 + ], + [ + 0.0, + 9940.6367 + ], + [ + -25.0, + 10098.3218 + ], + [ + 0.0, + 10454.6846 + ], + [ + -5.0, + 10843.068, + 0.0 + ], + [ + 0.0, + 10892.7203 + ] + ], + "slopeLength": 49.6523, + "sensors": [ + 220.261, + 323.4148, + 2292.818, + 3947.5212, + 4042.6904, + 5841.3845, + 5943.2035, + 7331.8362, + 7430.4004, + 9956.6861, + 10059.1067, + 10886.3145, + 10982.7479 + ], + "stations": [ + { + "path": 2.0, + "pos": 339.0018, + "linkedSensor": 1.0, + "id": 117.0, + "isHorlift": false, + "rightDoors": false, + "name": "ПролетарÑкаÑ", + "isLast": false + }, + { + "path": 2.0, + "pos": 2406.5701, + "linkedSensor": 3.0, + "id": 116.0, + "rightDoors": true, + "name": "РечнаÑ", + "hasSwitches": true + }, + { + "dist_last_start": 4183.7819, + "dist_last_end": 4358.7819, + "linkedSensor": 4.0, + "id": 115.0, + "rightDoors": false, + "pos": 4058.7819, + "name_last": "ОктÑбрьÑкой", + "path": 2.0, + "name": "ОктÑбрьÑкаÑ", + "isLast": true + }, + { + "path": 2.0, + "pos": 5958.5305, + "linkedSensor": 6.0, + "id": 114.0, + "hasSwitches": true, + "rightDoors": false, + "name": "ÐахимовÑкаÑ", + "isLast": false + }, + { + "path": 2.0, + "pos": 7445.754, + "linkedSensor": 8.0, + "id": 113.0, + "name": "ПроÑпект Суворова", + "rightDoors": false + }, + { + "path": 2.0, + "pos": 8562.9006, + "id": 112.0, + "name": "ПолитехничеÑкаÑ", + "rightDoors": false + }, + { + "path": 2.0, + "pos": 10074.0949, + "linkedSensor": 10.0, + "id": 111.0, + "name": "Парк Культуры", + "rightDoors": false + }, + { + "dist_last_start": 11123.7078, + "dist_last_end": 12022.7078, + "linkedSensor": 12.0, + "id": 110.0, + "rightDoors": false, + "pos": 10998.7078, + "name_last": "Международной", + "path": 2.0, + "name": "МеждународнаÑ", + "isLast": true + } + ], + "signals": [ + [ + "PR376", + 14.4426 + ], + [ + "374", + 208.0673 + ], + [ + "PRR6", + 206.5185 + ], + [ + "PR382A", + 308.5235 + ], + [ + "372", + 344.075 + ], + [ + "380A", + 406.1455 + ], + [ + "370", + 492.6069 + ], + [ + "368", + 644.8573 + ], + [ + "366", + 783.1927 + ], + [ + "364", + 921.7295 + ], + [ + "362", + 1060.337 + ], + [ + "360", + 1211.975 + ], + [ + "358", + 1387.5455 + ], + [ + "356", + 1541.4707 + ], + [ + "386A", + 1632.2293 + ], + [ + "RX354", + 1704.1659 + ], + [ + "RX352", + 1931.2888 + ], + [ + "RX350", + 2007.1185 + ], + [ + "RX348", + 2105.4627 + ], + [ + "RX346", + 2167.4847 + ], + [ + "RX344", + 2229.6113 + ], + [ + "RXR2", + 2259.7071 + ], + [ + "RX154A", + 2280.7199 + ], + [ + "342", + 2291.4208 + ], + [ + "350A", + 2331.1529 + ], + [ + "350B", + 2381.4514 + ], + [ + "340", + 2413.6125 + ], + [ + "348A", + 2476.2105 + ], + [ + "338", + 2563.9045 + ], + [ + "336", + 2703.7632 + ], + [ + "334", + 2843.286 + ], + [ + "332", + 3103.1488 + ], + [ + "330", + 3325.6367 + ], + [ + "OK328", + 3576.0723 + ], + [ + "OK326", + 3693.7198 + ], + [ + "OK324", + 3812.2221 + ], + [ + "OK322", + 3874.5725 + ], + [ + "OK320", + 3944.7043 + ], + [ + "OK130A", + 4007.3383 + ], + [ + "OK130B", + 4040.3636 + ], + [ + "OK318", + 4068.1954 + ], + [ + "128A", + 4131.4666 + ], + [ + "OKREP11", + 4129.5956 + ], + [ + "316", + 4197.0539 + ], + [ + "314", + 4336.9111 + ], + [ + "312", + 4531.6229 + ], + [ + "310", + 4715.4834 + ], + [ + "308", + 4864.9115 + ], + [ + "306", + 5167.3373 + ], + [ + "304", + 5390.2928 + ], + [ + "302", + 5513.7918 + ], + [ + "300", + 5641.891 + ], + [ + "298", + 5735.8568 + ], + [ + "NH296", + 5828.6459 + ], + [ + "302A", + 5909.9921 + ], + [ + "302B", + 5941.5908 + ], + [ + "NH294", + 5967.1915 + ], + [ + "NHR4", + 6028.2965 + ], + [ + "300A", + 6028.3048 + ], + [ + "292", + 6111.2938 + ], + [ + "290", + 6262.8678 + ], + [ + "288", + 6414.3755 + ], + [ + "286", + 6553.1217 + ], + [ + "284", + 6696.7129 + ], + [ + "282", + 6889.3033 + ], + [ + "280", + 7066.7079 + ], + [ + "278", + 7139.55 + ], + [ + "276", + 7201.7011 + ], + [ + "274", + 7264.7513 + ], + [ + "272", + 7326.6129 + ], + [ + "278A", + 7397.5704 + ], + [ + "270M", + 7455.5475 + ], + [ + "66A", + 7507.7257 + ], + [ + "M2", + 7560.2003 + ], + [ + "268", + 7664.5805 + ], + [ + "266", + 7853.2582 + ], + [ + "264", + 8013.255 + ], + [ + "PT262", + 8216.2621 + ], + [ + "PT260", + 8325.3113 + ], + [ + "PT258", + 8387.1687 + ], + [ + "256", + 8450.3447 + ], + [ + "258A", + 8513.2348 + ], + [ + "PT254", + 8574.7375 + ], + [ + "PT252", + 8633.2642 + ], + [ + "PT40A", + 8673.9431 + ], + [ + " 250", + 8800.4097 + ], + [ + "248", + 8955.8941 + ], + [ + "246", + 9209.2012 + ], + [ + "244", + 9437.233 + ], + [ + "242", + 9618.8236 + ], + [ + "242A", + 9675.456 + ], + [ + "240", + 9731.0464 + ], + [ + "238", + 9843.7205 + ], + [ + "236", + 9956.1399 + ], + [ + "238A", + 10019.2279 + ], + [ + "234", + 10083.4067 + ], + [ + "236A", + 10134.3229 + ], + [ + "232", + 10268.4341 + ], + [ + "230", + 10418.6837 + ], + [ + "234A", + 10549.2814 + ], + [ + "MD228", + 10592.3159 + ], + [ + "MD226", + 10686.779 + ], + [ + "MD230A", + 10719.1267 + ], + [ + "MD224", + 10751.4451 + ], + [ + "MD222", + 10816.9266 + ], + [ + "MD220", + 10884.3418 + ], + [ + "MD224A", + 10944.2074 + ], + [ + "MD222A", + 10971.2037 + ], + [ + "MD218", + 11008.4561 + ], + [ + "MDA22", + 11060.8045 + ], + [ + "MDR20", + 11060.6784 + ] + ], + "slope": [ + [ + 10843.068, + -7.4204 + ], + [ + 10852.9784, + -10.0619 + ], + [ + 10862.8886, + -3.2031 + ], + [ + 10872.8202, + -8.7572 + ], + [ + 10882.7707, + -3.9508 + ] + ] + }, + 11314.194 + ] + ], + "markers": [ + { + "PAWrongPath": false, + "TrackPath": 8.0, + "PAStationHasSwtiches": true, + "PADeadlockEnd": false, + "TrackX": 3045.3635, + "PAStationRightDoors": false, + "PALastStation": false, + "PAStationID": 112.0, + "PADeadlockStart": false, + "PAStationHorlift": false, + "PALineChangeStationID": false, + "PAStationPath": 1.0, + "Angles": "{0.0151 0.0116 0}", + "PAStationName": "ПолитехничеÑкаÑ", + "Pos": "[2643.106 -15218.3486 -13559]", + "PAType": 1.0, + "PALineChange": false, + "PALineChangeStationPath": false + }, + { + "PAWrongPath": false, + "TrackPath": 8.0, + "PADeadlockEnd": false, + "TrackX": 1430.5795, + "PAStationRightDoors": false, + "PALastStation": false, + "PAStationID": 111.0, + "PADeadlockStart": false, + "PAStationHorlift": false, + "PALineChangeStationID": false, + "PAStationPath": 1.0, + "PAStationCorrection": -0.2, + "Angles": "{359.9737 90.0098 0}", + "PAStationName": "Парк культуры", + "Pos": "[15720.5762 2171.3127 -14159.9727]", + "PAType": 1.0, + "PALineChange": false, + "PALineChangeStationPath": false + }, + { + "PAWrongPath": false, + "TrackPath": 8.0, + "PADeadlockEnd": false, + "TrackX": 4219.6896, + "PAStationRightDoors": false, + "PALastStation": false, + "PAStationID": 113.0, + "PADeadlockStart": false, + "PAStationHorlift": false, + "PALineChangeStationID": false, + "PAStationPath": 1.0, + "PAStationCorrection": -0.32, + "Angles": "{359.9303 189.8595 0}", + "PAStationName": "ПроÑпект Ñуворова", + "Pos": "[-8909.3164 13630.9209 -13103.7344]", + "PAType": 1.0, + "PALineChange": false, + "PALineChangeStationPath": false + }, + { + "PAWrongPath": false, + "TrackPath": 8.0, + "PAStationHasSwtiches": true, + "PADeadlockEnd": false, + "TrackX": 5703.4431, + "PAStationRightDoors": false, + "PALastStation": false, + "PAStationID": 114.0, + "PADeadlockStart": false, + "PAStationHorlift": false, + "PALineChangeStationID": false, + "PAStationPath": 1.0, + "PAStationCorrection": -0.13, + "Angles": "{359.9947 180.0953 0}", + "PAStationName": "ÐахимовÑкаÑ", + "Pos": "[-6462.811 -9388.3916 -12515.5879]", + "PAType": 1.0, + "PALineChange": false, + "PALineChangeStationPath": false + }, + { + "PAWrongPath": true, + "TrackPath": 8.0, + "PADeadlockEnd": 300.0, + "TrackX": 7461.6914, + "PAStationRightDoors": false, + "PALastStation": true, + "PAStationID": 115.0, + "PADeadlockStart": 125.0, + "PAStationHorlift": false, + "PAStationPath": 1.0, + "PAStationCorrection": -1.16, + "Angles": "{359.9896 224.0125 0}", + "PAStationName": "ОктÑбрьÑкаÑ", + "Pos": "[-6919.9121 -12619.8047 -11903.4063]", + "PAType": 1.0, + "PALastStationName": "ОктÑбрьÑкой" + }, + { + "TrackPath": 8.0, + "PAStationHasSwtiches": true, + "PADeadlockEnd": 1024.0, + "TrackX": 9068.8708, + "PAStationRightDoors": true, + "PALastStation": true, + "PAStationID": 116.0, + "PADeadlockStart": 70.0, + "PAStationHorlift": false, + "PAStationPath": 1.0, + "PAStationCorrection": -0.53, + "Angles": "{359.986 269.9643 0}", + "PAStationName": "РечнаÑ", + "Pos": "[14634.1377 -4787.498 -10740.3975]", + "PAType": 1.0, + "PALastStationName": "Речной" + }, + { + "PAWrongPath": false, + "TrackPath": 8.0, + "PADeadlockEnd": false, + "TrackX": 400.8237, + "PAStationRightDoors": false, + "PALastStation": false, + "PAStationID": 110.0, + "PADeadlockStart": false, + "PAStationHorlift": false, + "PALineChangeStationID": false, + "PAStationPath": 1.0, + "PAStationCorrection": -1.12, + "Angles": "{359.9808 224.012 0}", + "PAStationName": "МеждународнаÑ", + "Pos": "[-7383.6343 -5384.3511 -14474.8086]", + "PAType": 1.0, + "PALineChange": false, + "PALineChangeStationPath": false + }, + { + "TrackPath": 9.0, + "PAStationHasSwtiches": true, + "TrackX": 2765.8418, + "PAStationRightDoors": true, + "PAStationID": 116.0, + "PAStationPath": 2.0, + "PAStationCorrection": -0.15, + "Angles": "{0.0169 89.9291 0}", + "PAStationName": "РечнаÑ", + "Pos": "[14898.8096 812.436 -10740.1729]", + "PAType": 1.0 + }, + { + "TrackPath": 9.0, + "PADeadlockEnd": 300.0, + "TrackX": 4417.0536, + "PAStationRightDoors": false, + "PALastStation": true, + "PAStationID": 115.0, + "PADeadlockStart": 125.0, + "PAStationPath": 2.0, + "PAStationCorrection": -1.15, + "Angles": "{0.02 43.9471 0}", + "PAStationName": "ОктÑбрьÑкаÑ", + "Pos": "[-2341.0161 -9602.6484 -11903.5732]", + "PAType": 1.0, + "PALastStationName": "ОктÑбрьÑкой" + }, + { + "PAWrongPath": false, + "TrackPath": 9.0, + "PAStationHasSwtiches": true, + "PADeadlockEnd": false, + "TrackX": 6317.7022, + "PAStationRightDoors": false, + "PALastStation": false, + "PAStationID": 114.0, + "PADeadlockStart": false, + "PALineChangeStationID": false, + "PAStationPath": 2.0, + "PAStationCorrection": -0.25, + "Angles": "{0.0378 359.9499 0}", + "PAStationName": "ÐахимовÑкаÑ", + "Pos": "[-754.0745 -10085.2832 -12514.2578]", + "PAType": 1.0, + "PALineChange": false, + "PALineChangeStationPath": false + }, + { + "TrackPath": 9.0, + "TrackX": 7804.8957, + "PAStationRightDoors": false, + "PAStationID": 113.0, + "PAStationPath": 2.0, + "PAStationCorrection": -0.28, + "Angles": "{359.9978 10.0093 0}", + "PAStationName": "ПроÑпект Суворова", + "Pos": "[-3029.7468 13519.7461 -13103.3389]", + "PAType": 1.0 + }, + { + "TrackPath": 9.0, + "TrackX": 8922.3223, + "PAStationRightDoors": false, + "PAStationID": 112.0, + "PAStationPath": 2.0, + "Angles": "{359.9877 180.0597 0}", + "PAStationName": "ПолитехничеÑкаÑ", + "Pos": "[-2813.5425 -14490.4697 -13560.2158]", + "PAType": 1.0 + }, + { + "TrackPath": 9.0, + "TrackX": 10433.5166, + "PAStationRightDoors": false, + "PAStationID": 111.0, + "PAStationPath": 2.0, + "Angles": "{359.9938 270.1042 0}", + "PAStationName": "Парк Культуры", + "Pos": "[14970.3359 -3725.5752 -14161.0762]", + "PAType": 1.0 + }, + { + "TrackPath": 9.0, + "PADeadlockEnd": 1024.0, + "TrackX": 11357.0795, + "PAStationRightDoors": false, + "PALastStation": true, + "PAStationID": 110.0, + "PADeadlockStart": 125.0, + "PAStationPath": 2.0, + "PAStationCorrection": -1.05, + "Angles": "{0.0058 44.0593 0}", + "PAStationName": "МеждународнаÑ", + "Pos": "[-2804.7344 -2366.4001 -14474.418]", + "PAType": 1.0, + "PALastStationName": "Международной" + }, + { + "PAWrongPath": false, + "TrackPath": 8.0, + "PADeadlockEnd": 450.0, + "TrackX": 11183.813, + "PAStationRightDoors": false, + "PALastStation": true, + "PAStationID": 117.0, + "PADeadlockStart": 200.0, + "PAStationHorlift": false, + "PALineChangeStationID": false, + "PAStationPath": 1.0, + "Angles": "{0.0348 270.1003 0}", + "PAStationName": "ПролетарÑкаÑ", + "Pos": "[-15550.7725 -5428.5127 -9836.5]", + "PAType": 1.0, + "PALineChange": false, + "PALineChangeStationPath": false, + "PALastStationName": "ПролетарÑкой" + }, + { + "PAWrongPath": false, + "TrackPath": 9.0, + "PADeadlockEnd": false, + "TrackX": 697.923, + "PAStationRightDoors": false, + "PALastStation": false, + "PAStationID": 117.0, + "PADeadlockStart": false, + "PAStationHorlift": false, + "PALineChangeStationID": false, + "PAStationPath": 2.0, + "Angles": "{0.034 89.8576 0}", + "PAStationName": "ПролетарÑкаÑ", + "Pos": "[-14853.0762 636.587 -9835.2793]", + "PAType": 1.0, + "PALineChange": false, + "PALineChangeStationPath": false + } + ], + "117": { + "116": [ + { + "slopes": [ + [ + -10.0, + 289.6078, + 7.0 + ], + [ + 0.0, + 369.7049 + ], + [ + -5.0, + 1065.9879, + 0.0 + ], + [ + 0.0, + 1274.7038 + ], + [ + -15.0, + 1394.2663 + ], + [ + -20.0, + 1493.8462 + ], + [ + -35.0, + 1563.6504 + ], + [ + 0.0, + 1873.1126 + ], + [ + -20.0, + 2361.6166 + ], + [ + 0.0, + 2549.1731 + ], + [ + -5.0, + 2628.8, + 2.0 + ], + [ + 0.0, + 2658.9031 + ], + [ + -45.0, + 2698.78 + ], + [ + 0.0, + 3060.3203 + ], + [ + -45.0, + 3279.0479 + ], + [ + 0.0, + 3579.0269 + ], + [ + -35.0, + 4207.4481 + ], + [ + 0.0, + 4456.482 + ], + [ + -5.0, + 4505.9556, + 0.0 + ], + [ + 0.0, + 4555.7663 + ], + [ + -20.0, + 5295.8646 + ], + [ + 0.0, + 5515.4403 + ], + [ + 25.0, + 5535.6599 + ], + [ + 0.0, + 5735.0352 + ], + [ + -45.0, + 6540.8774 + ], + [ + -15.0, + 6690.8169 + ], + [ + -10.0, + 6896.4391 + ], + [ + 0.0, + 6974.3843 + ], + [ + -20.0, + 7521.2984 + ], + [ + 0.0, + 8055.1912 + ], + [ + -45.0, + 8751.5935 + ], + [ + 0.0, + 8984.3068 + ], + [ + -10.0, + 9327.3471, + 1.0 + ], + [ + 0.0, + 9539.8204 + ], + [ + -10.0, + 9809.5742, + 0.0 + ], + [ + 0.0, + 9870.0532 + ], + [ + -25.0, + 10027.7384 + ], + [ + 0.0, + 10384.1012 + ], + [ + -5.0, + 10772.4846, + 0.0 + ], + [ + 0.0, + 10822.1369 + ] + ], + "signals": [ + [ + "374", + 137.4839 + ], + [ + "PRR6", + 135.9351 + ], + [ + "PR382A", + 237.9401 + ], + [ + "372", + 273.4915 + ], + [ + "380A", + 335.5621 + ], + [ + "370", + 422.0235 + ], + [ + "368", + 574.2738 + ], + [ + "366", + 712.6093 + ], + [ + "364", + 851.1461 + ], + [ + "362", + 989.7535 + ], + [ + "360", + 1141.3916 + ], + [ + "358", + 1316.9621 + ], + [ + "356", + 1470.8872 + ], + [ + "386A", + 1561.6459 + ], + [ + "RX354", + 1633.5825 + ], + [ + "RX352", + 1860.7054 + ], + [ + "RX350", + 1936.5351 + ], + [ + "RX348", + 2034.8792 + ], + [ + "RX346", + 2096.9013 + ], + [ + "RX344", + 2159.0278 + ], + [ + "RXR2", + 2189.1237 + ], + [ + "RX154A", + 2210.1364 + ], + [ + "342", + 2220.8374 + ], + [ + "350A", + 2260.5695 + ], + [ + "350B", + 2310.868 + ], + [ + "340", + 2343.0291 + ], + [ + "348A", + 2405.6271 + ], + [ + "338", + 2493.3211 + ], + [ + "336", + 2633.1798 + ], + [ + "334", + 2772.7026 + ], + [ + "332", + 3032.5654 + ], + [ + "330", + 3255.0533 + ], + [ + "OK328", + 3505.4889 + ], + [ + "OK326", + 3623.1364 + ], + [ + "OK324", + 3741.6387 + ], + [ + "OK322", + 3803.9891 + ], + [ + "OK320", + 3874.1209 + ], + [ + "OK130A", + 3936.7549 + ], + [ + "OK130B", + 3969.7802 + ], + [ + "OK318", + 3997.612 + ], + [ + "128A", + 4060.8832 + ], + [ + "OKREP11", + 4059.0122 + ], + [ + "316", + 4126.4705 + ], + [ + "314", + 4266.3276 + ], + [ + "312", + 4461.0395 + ], + [ + "310", + 4644.9 + ], + [ + "308", + 4794.3281 + ], + [ + "306", + 5096.7539 + ], + [ + "304", + 5319.7094 + ], + [ + "302", + 5443.2084 + ], + [ + "300", + 5571.3076 + ], + [ + "298", + 5665.2734 + ], + [ + "NH296", + 5758.0625 + ], + [ + "302A", + 5839.4087 + ], + [ + "302B", + 5871.0074 + ], + [ + "NH294", + 5896.6081 + ], + [ + "NHR4", + 5957.713 + ], + [ + "300A", + 5957.7214 + ], + [ + "292", + 6040.7104 + ], + [ + "290", + 6192.2844 + ], + [ + "288", + 6343.7921 + ], + [ + "286", + 6482.5382 + ], + [ + "284", + 6626.1295 + ], + [ + "282", + 6818.7199 + ], + [ + "280", + 6996.1245 + ], + [ + "278", + 7068.9666 + ], + [ + "276", + 7131.1177 + ], + [ + "274", + 7194.1679 + ], + [ + "272", + 7256.0294 + ], + [ + "278A", + 7326.987 + ], + [ + "270M", + 7384.9641 + ], + [ + "66A", + 7437.1423 + ], + [ + "M2", + 7489.6169 + ], + [ + "268", + 7593.9971 + ], + [ + "266", + 7782.6748 + ], + [ + "264", + 7942.6716 + ], + [ + "PT262", + 8145.6787 + ], + [ + "PT260", + 8254.7279 + ], + [ + "PT258", + 8316.5853 + ], + [ + "256", + 8379.7613 + ], + [ + "258A", + 8442.6514 + ], + [ + "PT254", + 8504.1541 + ], + [ + "PT252", + 8562.6808 + ], + [ + "PT40A", + 8603.3597 + ], + [ + " 250", + 8729.8263 + ], + [ + "248", + 8885.3106 + ], + [ + "246", + 9138.6178 + ], + [ + "244", + 9366.6496 + ], + [ + "242", + 9548.2401 + ], + [ + "242A", + 9604.8726 + ], + [ + "240", + 9660.463 + ], + [ + "238", + 9773.1371 + ], + [ + "236", + 9885.5565 + ], + [ + "238A", + 9948.6445 + ], + [ + "234", + 10012.8233 + ], + [ + "236A", + 10063.7395 + ], + [ + "232", + 10197.8507 + ], + [ + "230", + 10348.1003 + ], + [ + "234A", + 10478.698 + ], + [ + "MD228", + 10521.7325 + ], + [ + "MD226", + 10616.1956 + ], + [ + "MD230A", + 10648.5432 + ], + [ + "MD224", + 10680.8617 + ], + [ + "MD222", + 10746.3432 + ], + [ + "MD220", + 10813.7584 + ], + [ + "MD224A", + 10873.624 + ], + [ + "MD222A", + 10900.6203 + ], + [ + "MD218", + 10937.8726 + ], + [ + "MDA22", + 10990.2211 + ], + [ + "MDR20", + 10990.095 + ] + ], + "sensors": [ + 149.6776, + 252.8314, + 2222.2346, + 3876.9378, + 3972.107, + 5770.8011, + 5872.62, + 7261.2528, + 7359.817, + 8373.4463, + 9886.1027, + 9988.5233, + 10815.7311, + 10912.1645 + ], + "slope": [ + [ + 10772.4846, + -7.4204 + ], + [ + 10782.395, + -10.0619 + ], + [ + 10792.3052, + -3.2031 + ], + [ + 10802.2368, + -8.7572 + ], + [ + 10812.1873, + -3.9508 + ] + ], + "slopeLength": 49.6523, + "stations": [] + }, + 11243.6106 + ] + } +} \ No newline at end of file diff --git a/lua/metrostroi_data/sched_gm_metrostroi_b46_lite.lua b/lua/metrostroi_data/sched_gm_metrostroi_b46_lite.lua new file mode 100644 index 0000000..9b1eb06 --- /dev/null +++ b/lua/metrostroi_data/sched_gm_metrostroi_b46_lite.lua @@ -0,0 +1,116 @@ +{ + "Routes":{ + "Line1_Platform1":{ + "1":{"1":108, "2":1}, + "2":{"1":109, "2":1}, + "3":{"1":110, "2":1}, + "4":{"1":111, "2":1}, + "5":{"1":112, "2":1}, + "6":{"1":113, "2":1}, + "7":{"1":114, "2":1}, + "8":{"1":115, "2":1}, + "9":{"1":116, "2":1}, + "10":{"1":117, "2":1}, + "11":{"1":118, "2":1}, + "12":{"1":119, "2":1}, + "13":{"1":121, "2":1}, + "14":{"1":122, "2":1}, + "15":{"1":123, "2":1} + }, + "Line1_Platform2":{ + "1":{"1":123, "2":2}, + "2":{"1":122, "2":2}, + "3":{"1":121, "2":2}, + "4":{"1":119, "2":2}, + "5":{"1":118, "2":2}, + "6":{"1":117, "2":2}, + "7":{"1":116, "2":2}, + "8":{"1":115, "2":2}, + "9":{"1":114, "2":2}, + "10":{"1":113, "2":2}, + "11":{"1":112, "2":2}, + "12":{"1":111, "2":2}, + "13":{"1":110, "2":2}, + "14":{"1":109, "2":2}, + "15":{"1":108, "2":2} + } + }, + "Configuration":{ + "1":{ "1":"0:00", "2":"24:00", "3":"Line1_Platform1", "4":"3:00" }, + "2":{ "1":"0:00", "2":"24:00", "3":"Line1_Platform2", "4":"3:00" } + }, + "AIConfiguration":{ + "Line1_Platform1":{ + "Path":1, + "SpawnPosition":100, + "EndPosition":16905, + "NextRoute":"Line1_Platform2" + }, + "Line1_Platform2":{ + "Path":2, + "SpawnPosition":100, + "EndPosition":16900, + "NextRoute":"Line1_Platform1" + } + }, + "StationNames":{ + "108":"Avtozavodskaya", + "109":"Industrial'naya", + "110":"Moskovskaya", + "111":"Oktyabrs'kaya", + "112":"Ploschad' Myra", + "113":"Novoarmeyskaya", + "114":"Vokzalnaya", + "115":"Komsomol'skaya", + "116":"Elektrosila", + "117":"Teatral'naya Ploshad", + "118":"Park Pobedy", + "119":"Sineozernaya", + "120":"Lesnaya", + "121":"Minskaya", + "122":"Tsarskiye Vorota", + "123":"Mezhdustroyskaya", + "321":"Muzey Skulptur", + "322":"Avtostanciya Yuzhnaya" + }, + "StationTitles":{ + "108":"ÐвтозаводÑкаÑ", + "109":"ИндуÑтриальнаÑ", + "110":"МоÑковÑкаÑ", + "111":"ОктÑбрьÑкаÑ", + "112":"Площадь Мира", + "113":"ÐовоармейÑкаÑ", + "114":"ВокзальнаÑ", + "115":"КомÑомольÑкаÑ", + "116":"ЭлектроÑила", + "117":"Ð¢ÐµÐ°Ñ‚Ñ€Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ð»Ð¾Ñ‰Ð°Ð´ÑŒ", + "118":"Парк Победы", + "119":"СинеозернаÑ", + "120":"ЛеÑнаÑ", + "121":"МинÑкаÑ", + "122":"ЦарÑкие Ворота", + "123":"МеждуÑтройÑкаÑ", + "321":"Музей Скульптур", + "322":"ÐвтоÑÑ‚Ð°Ð½Ñ†Ð¸Ñ Ð®Ð¶Ð½Ð°Ñ" + }, + "StationNamesConfiguration":{ + "108":{ "1":0, "2":151, "3":54, "4":1 }, + "109":{ "1":0, "2":151, "3":54, "4":1 }, + "110":{ "1":0, "2":151, "3":54, "4":1 }, + "111":{ "1":0, "2":151, "3":54, "4":1 }, + "112":{ "1":0, "2":151, "3":54, "4":1 }, + "113":{ "1":0, "2":151, "3":54, "4":1 }, + "114":{ "1":0, "2":151, "3":54, "4":1 }, + "115":{ "1":0, "2":151, "3":54, "4":1 }, + "116":{ "1":0, "2":151, "3":54, "4":1 }, + "117":{ "1":0, "2":151, "3":54, "4":1 }, + "118":{ "1":0, "2":151, "3":54, "4":1 }, + "119":{ "1":0, "2":151, "3":54, "4":1 }, + "120":{ "1":0, "2":151, "3":54, "4":0 }, + "121":{ "1":0, "2":151, "3":54, "4":1 }, + "122":{ "1":0, "2":151, "3":54, "4":1 }, + "123":{ "1":0, "2":151, "3":54, "4":1 }, + "321":{ "1":0, "2":54, "3":151, "4":1 }, + "322":{ "1":0, "2":54, "3":151, "4":1 } + } +} \ No newline at end of file diff --git a/lua/metrostroi_data/sched_gm_metrostroi_b50.lua b/lua/metrostroi_data/sched_gm_metrostroi_b50.lua new file mode 100644 index 0000000..374dc49 --- /dev/null +++ b/lua/metrostroi_data/sched_gm_metrostroi_b50.lua @@ -0,0 +1,154 @@ +{ + "Routes":{ + "Line1_Platform1":{ + "1":{"1":108, "2":1}, + "2":{"1":109, "2":1}, + "3":{"1":110, "2":1}, + "4":{"1":111, "2":1}, + "5":{"1":112, "2":1}, + "6":{"1":113, "2":1}, + "7":{"1":114, "2":1}, + "8":{"1":115, "2":1}, + "9":{"1":116, "2":1}, + "10":{"1":117, "2":1}, + "11":{"1":118, "2":1}, + "12":{"1":119, "2":1}, + "13":{"1":121, "2":1}, + "14":{"1":122, "2":1}, + "15":{"1":123, "2":1} + }, + "Line1_Platform2":{ + "1":{"1":123, "2":2}, + "2":{"1":122, "2":2}, + "3":{"1":121, "2":2}, + "4":{"1":119, "2":2}, + "5":{"1":118, "2":2}, + "6":{"1":117, "2":2}, + "7":{"1":116, "2":2}, + "8":{"1":115, "2":2}, + "9":{"1":114, "2":2}, + "10":{"1":113, "2":2}, + "11":{"1":112, "2":2}, + "12":{"1":111, "2":2}, + "13":{"1":110, "2":2}, + "14":{"1":109, "2":2}, + "15":{"1":108, "2":2} + }, + "Line3_Platform1":{ + "1":{"1":108, "2":1}, + "2":{"1":109, "2":1}, + "3":{"1":110, "2":1}, + "4":{"1":111, "2":1}, + "5":{"1":112, "2":1}, + "6":{"1":113, "2":1}, + "7":{"1":114, "2":1}, + "8":{"1":115, "2":1}, + "9":{"1":116, "2":1}, + "10":{"1":117, "2":1}, + "11":{"1":118, "2":1}, + "12":{"1":119, "2":1}, + "13":{"1":121, "2":1}, + "14":{"1":122, "2":1}, + "15":{"1":321, "2":1}, + "16":{"1":322, "2":1} + }, + "Line3_Platform2":{ + "1":{"1":322, "2":2}, + "2":{"1":321, "2":2}, + "3":{"1":122, "2":2}, + "4":{"1":121, "2":2}, + "5":{"1":119, "2":2}, + "6":{"1":118, "2":2}, + "7":{"1":117, "2":2}, + "8":{"1":116, "2":2}, + "9":{"1":115, "2":2}, + "10":{"1":114, "2":2}, + "11":{"1":113, "2":2}, + "12":{"1":112, "2":2}, + "13":{"1":111, "2":2}, + "14":{"1":110, "2":2}, + "15":{"1":109, "2":2}, + "16":{"1":108, "2":2} + } + }, + "Configuration":{ + "1":{ "1":"0:00", "2":"24:00", "3":"Line1_Platform1", "4":"3:00" }, + "2":{ "1":"0:00", "2":"24:00", "3":"Line1_Platform2", "4":"3:00" }, + "3":{ "1":"0:00", "2":"24:00", "3":"Line3_Platform1", "4":"3:00" }, + "4":{ "1":"0:00", "2":"24:00", "3":"Line3_Platform2", "4":"3:00" } + }, + "AIConfiguration":{ + "Line1_Platform1":{ + "Path":1, + "SpawnPosition":100, + "EndPosition":16905, + "NextRoute":"Line1_Platform2" + }, + "Line1_Platform2":{ + "Path":2, + "SpawnPosition":100, + "EndPosition":16900, + "NextRoute":"Line1_Platform1" + } + }, + "StationNames":{ + "108":"Avtozavodskaya", + "109":"Industrial'naya", + "110":"Moskovskaya", + "111":"Oktyabrs'kaya", + "112":"Ploschad' Myra", + "113":"Novoarmeyskaya", + "114":"Vokzalnaya", + "115":"Komsomol'skaya", + "116":"Elektrosila", + "117":"Teatral'naya Ploshad", + "118":"Park Pobedy", + "119":"Sineozernaya", + "120":"Lesnaya", + "121":"Minskaya", + "122":"Tsarskiye Vorota", + "123":"Mezhdustroyskaya", + "321":"Muzey Skulptur", + "322":"Avtostanciya Yuzhnaya" + }, + "StationTitles":{ + "108":"ÐвтозаводÑкаÑ", + "109":"ИндуÑтриальнаÑ", + "110":"МоÑковÑкаÑ", + "111":"ОктÑбрьÑкаÑ", + "112":"Площадь Мира", + "113":"ÐовоармейÑкаÑ", + "114":"ВокзальнаÑ", + "115":"КомÑомольÑкаÑ", + "116":"ЭлектроÑила", + "117":"Ð¢ÐµÐ°Ñ‚Ñ€Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ð»Ð¾Ñ‰Ð°Ð´ÑŒ", + "118":"Парк Победы", + "119":"СинеозернаÑ", + "120":"ЛеÑнаÑ", + "121":"МинÑкаÑ", + "122":"ЦарÑкие Ворота", + "123":"МеждуÑтройÑкаÑ", + "321":"Музей Скульптур", + "322":"ÐвтоÑÑ‚Ð°Ð½Ñ†Ð¸Ñ Ð®Ð¶Ð½Ð°Ñ" + }, + "StationNamesConfiguration":{ + "108":{ "1":0, "2":151, "3":54, "4":1 }, + "109":{ "1":0, "2":151, "3":54, "4":1 }, + "110":{ "1":0, "2":151, "3":54, "4":1 }, + "111":{ "1":0, "2":151, "3":54, "4":1 }, + "112":{ "1":0, "2":151, "3":54, "4":1 }, + "113":{ "1":0, "2":151, "3":54, "4":1 }, + "114":{ "1":0, "2":151, "3":54, "4":1 }, + "115":{ "1":0, "2":151, "3":54, "4":1 }, + "116":{ "1":0, "2":151, "3":54, "4":1 }, + "117":{ "1":0, "2":151, "3":54, "4":1 }, + "118":{ "1":0, "2":151, "3":54, "4":1 }, + "119":{ "1":0, "2":151, "3":54, "4":1 }, + "120":{ "1":0, "2":151, "3":54, "4":0 }, + "121":{ "1":0, "2":151, "3":54, "4":1 }, + "122":{ "1":0, "2":151, "3":54, "4":1 }, + "123":{ "1":0, "2":151, "3":54, "4":1 }, + "321":{ "1":0, "2":54, "3":151, "4":1 }, + "322":{ "1":0, "2":54, "3":151, "4":1 } + } +} \ No newline at end of file diff --git a/lua/metrostroi_data/signs_gm_metro_crossline_c4.lua b/lua/metrostroi_data/signs_gm_metro_crossline_c4.lua new file mode 100644 index 0000000..f39acd6 --- /dev/null +++ b/lua/metrostroi_data/signs_gm_metro_crossline_c4.lua @@ -0,0 +1,14123 @@ +{ + "1": { + "Approve0": false, + "RouteNumberSetup": "12", + "LensesStr": "WRW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "MD2", + "ARSOnly": false, + "Angles": "{0 313.998 0}", + "Pos": "[2301.9482 3083.325 -14585.5059]", + "Routes": [ + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "2", + "Manual": false, + "EnRou": false, + "Lights": "2", + "RouteName": "", + "Switches": "", + "Repeater": false + }, + { + "Emer": false, + "NextSignal": "MDA5", + "ARSCodes": "222224", + "Manual": true, + "EnRou": true, + "Lights": "2-2-2-2-2-1", + "Repeater": false, + "Switches": "md6-,md3-,md1-,md4+,md5+", + "RouteName": "MD4-1" + }, + { + "Emer": false, + "NextSignal": "MDA6", + "ARSCodes": "2224", + "Manual": true, + "EnRou": true, + "Lights": "2-2-2-1", + "RouteName": "MD4-2", + "Switches": "md4+,md6+,md2-,md5+,md3+", + "Repeater": false + } + ] + }, + "2": { + "Approve0": false, + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": " OP", + "ARSOnly": false, + "Angles": "{0 314 0}", + "Pos": "[-8158.769 -7538.1899 -14575.209]", + "Routes": [ + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "2", + "Repeater": false, + "Lights": "1", + "Switches": "", + "RouteName": "", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": true + }, + "3": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "221", + "ARSOnly": false, + "Angles": "{0 314.001 0}", + "Pos": "[-7835.6338 -5822.2446 -14586.2061]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-3", + "NextSignal": "*", + "ARSCodes": "0446", + "Repeater": false + } + ] + }, + "4": { + "Approve0": false, + "RouteNumberSetup": "1234", + "LensesStr": "WRW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "MDD", + "ARSOnly": false, + "Angles": "{0 134.001 0}", + "Pos": "[-3079.8879 -1229.5167 -14586.1055]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "2", + "Manual": false, + "EnRou": false, + "Lights": "2", + "RouteName": "", + "Switches": "", + "Repeater": false + }, + { + "Emer": false, + "NextSignal": "MDA21", + "ARSCodes": "22224", + "Manual": true, + "EnRou": true, + "Lights": "2-2-2-1", + "Repeater": false, + "RouteName": "MD1-4", + "Switches": "md1-,md3-,md6-,md5+,md4+" + }, + { + "Emer": false, + "NextSignal": "MDA23", + "ARSCodes": "224", + "Manual": true, + "EnRou": true, + "Lights": "2-2-1", + "Repeater": false, + "Switches": "md1+", + "RouteName": "MDD-1" + }, + { + "Emer": false, + "NextSignal": "MDA21", + "ARSCodes": "22224", + "Repeater": false, + "EnRou": true, + "Lights": "2-2-2-2-1", + "Manual": true, + "RouteName": "Md1-3", + "Switches": "md1-,md3+,md5+,md6+,md4+" + } + ], + "NonAutoStop": true, + "Left": true + }, + "5": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "270M", + "ARSOnly": false, + "Angles": "{0 100 0}", + "Pos": "[-2509.2273 13611.9092 -13215.3057]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "0446", + "Manual": false, + "Lights": "4-42-42-1-3", + "Repeater": false, + "Switches": "g2-", + "RouteName": "" + }, + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "0", + "Manual": false, + "Lights": "4", + "Repeater": false, + "Switches": "g2+", + "RouteName": "" + } + ], + "Left": false + }, + "6": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "WYY-GR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1.0, + "Double": false, + "Name": "PT254", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-3434.8635 -14490.793 -13671.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false, + "Lights": "5-53-53-2-4", + "RouteName": "", + "Switches": "", + "Manual": false + } + ], + "Left": false + }, + "7": { + "Approve0": false, + "LensesStr": "WYG-RW-M", + "RouteNumber": "4", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "MDA3", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[1501.4525 2677.4731 -14585.5059]", + "Routes": [ + { + "Manual": false, + "ARSCodes": "0", + "Emer": false, + "Lights": "2", + "NextSignal": "K", + "RouteName": "", + "Repeater": false + }, + { + "Repeater": false, + "RouteName": "MD2-3", + "Emer": false, + "Manual": true, + "NextSignal": "MDA11", + "ARSCodes": "004" + }, + { + "Manual": true, + "RouteName": "MD1-3", + "Emer": false, + "Repeater": false, + "NextSignal": "MDA11", + "ARSCodes": "004" + } + ], + "NonAutoStop": true, + "Left": true + }, + "8": { + "Approve0": false, + "LensesStr": "WYG-RW-M", + "RouteNumber": "4", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "MDA4", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[1700.3765 2502.4348 -14585.5059]", + "Routes": [ + { + "Manual": false, + "ARSCodes": "0", + "Emer": false, + "Lights": "2", + "NextSignal": "K", + "RouteName": "", + "Repeater": false + }, + { + "Manual": true, + "ARSCodes": "004", + "Emer": false, + "Repeater": false, + "NextSignal": "MDA12", + "RouteName": "MD2-4" + }, + { + "Repeater": false, + "ARSCodes": "004", + "Emer": false, + "Manual": true, + "NextSignal": "MDA12", + "RouteName": "MD1-4" + } + ], + "NonAutoStop": true, + "Left": false + }, + "9": { + "Approve0": false, + "LensesStr": "WYG-RW-M", + "RouteNumber": "2", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "MDA6", + "ARSOnly": true, + "Angles": "{0 314.2464 0}", + "Pos": "[126.1527 981.4335 -14585.6055]", + "Routes": [ + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "0", + "Repeater": false, + "Lights": "2", + "RouteName": "", + "Switches": "", + "Manual": false + }, + { + "Manual": true, + "RouteName": "MD3-2", + "Emer": false, + "ARSCodes": "004", + "NextSignal": "MDA8", + "Switches": "", + "Repeater": false + }, + { + "Manual": true, + "RouteName": "MD4-2", + "Emer": false, + "ARSCodes": "004", + "NextSignal": "MDA8", + "Switches": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "10": { + "Approve0": false, + "LensesStr": "WYG-RW-M", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "MDA5", + "ARSOnly": true, + "Angles": "{0 313.7646 0}", + "Pos": "[-65.6152 1165.8973 -14585.6055]", + "Routes": [ + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "0", + "Manual": false, + "Lights": "2", + "Switches": "", + "RouteName": "", + "Repeater": false + }, + { + "Repeater": false, + "RouteName": "MD3-1", + "Emer": false, + "Manual": true, + "NextSignal": "MDA100", + "ARSCodes": "0004" + }, + { + "Repeater": false, + "RouteName": "MD4-1", + "Emer": false, + "Manual": true, + "NextSignal": "MDA100", + "ARSCodes": "0004" + } + ], + "NonAutoStop": true, + "Left": false + }, + "11": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "MDR1", + "ARSOnly": true, + "Angles": "{0 301.2145 0}", + "Pos": "[-1710.9084 -68.6644 -14585.6055]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "MDA100", + "ARSCodes": "04", + "Manual": false, + "Lights": "4-2-31", + "Switches": "md1-", + "RouteName": "", + "Repeater": true + } + ], + "NonAutoStop": true, + "Left": true + }, + "12": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "MDR2", + "ARSOnly": true, + "Angles": "{0 326.7965 0}", + "Pos": "[-1219.7107 -700.4481 -14585.6055]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "MDA8", + "ARSCodes": "04", + "Manual": false, + "Lights": "4-2-31", + "Switches": "md2-", + "RouteName": "", + "Repeater": true + } + ], + "NonAutoStop": true, + "Left": false + }, + "13": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "MDR4", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[887.4714 1718.1824 -14585.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "MDA3", + "ARSCodes": "04", + "Manual": false, + "Lights": "4-2-31", + "Switches": "md4-,md5-", + "RouteName": "", + "Repeater": true + }, + { + "Repeater": true, + "RouteName": "", + "Emer": false, + "ARSCodes": "04", + "NextSignal": "MDA4", + "Switches": "md4+,md6+", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "14": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "MDR3", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[704.1759 1907.6058 -14585.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "MDA4", + "ARSCodes": "04", + "Manual": false, + "Lights": "4-2-31", + "Switches": "md3-,md6-", + "RouteName": "", + "Repeater": true + }, + { + "Repeater": true, + "RouteName": "", + "Emer": false, + "ARSCodes": "04", + "NextSignal": "MDA3", + "Switches": "md3+,md5+", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "15": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "MDR5", + "ARSOnly": true, + "Angles": "{0 313.998 0}", + "Pos": "[734.6047 1936.9885 -14585.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "MDA6", + "ARSCodes": "04", + "Manual": false, + "Lights": "4-2-31", + "Switches": "md5-,md4-", + "RouteName": "", + "Repeater": true + }, + { + "Repeater": true, + "RouteName": "", + "Emer": false, + "ARSCodes": "04", + "NextSignal": "MDA5", + "Switches": "md5+,md3+", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "16": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "MDR6", + "ARSOnly": true, + "Angles": "{0 313.998 0}", + "Pos": "[914.8126 1744.5836 -14585.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "MDA5", + "ARSCodes": "04", + "Manual": false, + "Lights": "4-2-31", + "Switches": "md6-,md3-", + "RouteName": "", + "Repeater": true + }, + { + "Repeater": true, + "RouteName": "", + "Emer": false, + "ARSCodes": "04", + "NextSignal": "MDA6", + "Switches": "md4+,md6+", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "17": { + "Approve0": false, + "LensesStr": "WYG-RW-M", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "MDA20", + "ARSOnly": true, + "Angles": "{0 145.052 0}", + "Pos": "[-991.7622 -342.9074 -14585.6055]", + "Routes": [ + { + "Emer": false, + "NextSignal": "MDA4", + "ARSCodes": "0004", + "Manual": false, + "Lights": "2q", + "Switches": "md4+,md6+", + "RouteName": "", + "Repeater": false + }, + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "ARSCodes": "0004", + "NextSignal": "MDA3", + "Switches": "md4-,md5-", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "18": { + "Approve0": false, + "LensesStr": "WYG-RW-M", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "MDA8", + "ARSOnly": true, + "Angles": "{0 314.001 0}", + "Pos": "[-1825.7689 -1420.7837 -14585.9063]", + "Routes": [ + { + "Manual": false, + "ARSCodes": "0", + "Emer": false, + "Lights": "2", + "NextSignal": "", + "RouteName": "", + "Repeater": false + }, + { + "Repeater": false, + "ARSCodes": "04", + "Emer": false, + "Manual": true, + "NextSignal": "*", + "RouteName": "MD4-2" + }, + { + "Manual": true, + "RouteName": "MD3-2", + "Emer": false, + "Repeater": false, + "NextSignal": "*", + "ARSCodes": "04" + }, + { + "Repeater": false, + "RouteName": "MDE-2", + "Emer": false, + "Manual": true, + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "NonAutoStop": true, + "Left": false + }, + "19": { + "Approve0": false, + "LensesStr": "WYG-RW-M", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "MDA21", + "ARSOnly": true, + "Angles": "{0 120.3165 0}", + "Pos": "[-1584.2175 4.2778 -14585.6055]", + "Routes": [ + { + "Emer": false, + "NextSignal": "MDA3", + "ARSCodes": "04", + "Manual": false, + "Lights": "2q", + "Switches": "md1-,md3+,md5+", + "RouteName": "", + "Repeater": false + }, + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "ARSCodes": "04", + "NextSignal": "MDA4", + "Switches": "md3-,md6-,md1-", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "20": { + "Approve0": false, + "LensesStr": "WYG-RW-M", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "MDA23", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[-1050.8572 729.2649 -14585.6055]", + "Routes": [ + { + "Emer": false, + "NextSignal": "K", + "ARSCodes": "04", + "Manual": true, + "Repeater": false, + "RouteName": "MDD-1", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": true + }, + "21": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2.0, + "Double": false, + "Name": "PTA1", + "ARSOnly": true, + "Angles": "{354.1662 257.6116 0}", + "Pos": "[-5105.8813 -15102.9316 -13687.3594]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "PT40A", + "ARSCodes": "0004", + "Manual": false, + "Lights": "4-42-1-13-3", + "Repeater": false, + "Switches": "pt1-,pt2-", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "22": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2.0, + "Double": false, + "Name": "PTA2", + "ARSOnly": true, + "Angles": "{358.9532 78.1027 0}", + "Pos": "[-7573.1924 -14613.2949 -13670.4688]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "PT47A", + "ARSCodes": "04", + "Repeater": false, + "Lights": "4-42-1-13-3", + "RouteName": "", + "Switches": "pt1-,pt2-", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "23": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2.0, + "Double": false, + "Name": "PTR1", + "ARSOnly": true, + "Angles": "{0 258.033 0}", + "Pos": "[-7188.6797 -14695.0039 -13670.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "PT40A", + "ARSCodes": "04", + "Manual": false, + "Lights": "4-42-1-13-3", + "Repeater": true, + "Switches": "pt2-", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": true + }, + "24": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "WR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1.0, + "Double": false, + "Name": "PTV", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-8841.876 -14491.793 -13669.0195]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "2", + "Manual": false, + "EnRou": false, + "Lights": "2", + "RouteName": "", + "Switches": "", + "Repeater": false + }, + { + "Emer": false, + "NextSignal": "PTA2", + "ARSCodes": "2222224", + "Manual": true, + "Lights": "2-2-2-2-2-2-1", + "RouteName": "PTV-1", + "Switches": "pt1-,pt2-", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "25": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2.0, + "Double": false, + "Name": "PTA4", + "ARSOnly": true, + "Angles": "{0 90.03 0}", + "Pos": "[-6529.5693 -14491.1484 -13671.2148]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "", + "Manual": false, + "Lights": "4-42-1-13-3", + "Repeater": false, + "Switches": "", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": true + }, + "26": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2.0, + "Double": false, + "Name": "PTR4", + "ARSOnly": true, + "Angles": "{0 90.03 0}", + "Pos": "[-6602.0869 -14491.1875 -13671.1895]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "PTA2", + "ARSCodes": "04", + "Manual": false, + "Lights": "4-42-1-13-3", + "Repeater": true, + "Switches": "pt1-,pt2-", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": true + }, + "27": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGY-RW-M", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "NHA2", + "ARSOnly": true, + "Angles": "{0 102 0}", + "Pos": "[2435.6401 -9992.0996 -12626.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "NHA4", + "ARSCodes": "04", + "Repeater": false, + "Lights": "", + "Manual": false, + "RouteName": "NH2-1", + "Switches": "nh1-,nh2-" + } + ], + "NonAutoStop": true, + "Left": true + }, + "28": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGY-RW-M", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "NHR2", + "ARSOnly": true, + "Angles": "{0 102 0}", + "Pos": "[8581.9082 -9480.2969 -12626.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "NHA4", + "ARSCodes": "04", + "Repeater": true, + "Lights": "", + "Manual": false, + "RouteName": "", + "Switches": "nh1-" + } + ], + "NonAutoStop": true, + "Left": false + }, + "29": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGY-RW-M", + "RouteNumber": "2", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "NHA3", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[1526.0012 -10085.207 -12626.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "1", + "Repeater": false, + "Lights": "", + "Manual": false, + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "30": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGY-RW-M", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "NHA4", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[9681.9854 -9388.9863 -12626.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": " OPA", + "ARSCodes": "04", + "Repeater": false, + "Lights": "", + "Manual": false, + "RouteName": "", + "Switches": "nh1-,nh2-" + } + ], + "NonAutoStop": true, + "Left": false + }, + "31": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGY-RW-M", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "NHR4", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[2921.2087 -10084.793 -12626.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "NHA2", + "ARSCodes": "04", + "Repeater": true, + "Lights": "", + "Manual": false, + "RouteName": "", + "Switches": "nh2-" + }, + { + "Manual": false, + "Switches": "nh2+", + "Emer": false, + "Repeater": true, + "NextSignal": "*", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "32": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "RXA3", + "ARSOnly": true, + "Angles": "{359.7632 359.4941 0}", + "Pos": "[14635.0723 -7919.9009 -10851.5293]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "007", + "Repeater": false, + "Lights": "4", + "RouteName": "", + "Switches": "rx1+,rx3+,rx4+,rx2+", + "Manual": false + }, + { + "Manual": false, + "Switches": "rx1+,rx3-,rx4+,rx2-", + "Emer": false, + "ARSCodes": "004", + "NextSignal": "*", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "33": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "2", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "RXA4", + "ARSOnly": true, + "Angles": "{359.7651 359.4946 0}", + "Pos": "[14899.0762 -7919.3257 -10851.4629]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4", + "NextSignal": "K", + "ARSCodes": "0", + "Repeater": false + }, + { + "Manual": true, + "RouteName": "RX1-2", + "Emer": false, + "Repeater": false, + "NextSignal": "*", + "ARSCodes": "004" + }, + { + "Manual": true, + "RouteName": "RXD-2", + "Emer": false, + "ARSCodes": "004", + "NextSignal": "*", + "Switches": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "34": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "RXR4", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[14898.793 -6854.708 -10851.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "RXA4", + "ARSCodes": "04", + "Repeater": true, + "Lights": "4", + "RouteName": "", + "Switches": "rx4+,rx2+", + "Manual": false + }, + { + "Repeater": true, + "RouteName": "", + "Emer": false, + "Switches": "rx2-,rx3-", + "NextSignal": "RXA3", + "ARSCodes": "", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "35": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "RXR1", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[14635.207 -6890.7305 -10851.5059]", + "DoubleL": false, + "Routes": [ + { + "Repeater": true, + "RouteName": "", + "Emer": false, + "Switches": "rx2-,rx3-", + "NextSignal": "RX154A", + "ARSCodes": "", + "Manual": false + }, + { + "Repeater": true, + "RouteName": "", + "Emer": false, + "ARSCodes": "", + "NextSignal": "RXA5", + "Switches": "rx1+,rx3+", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "36": { + "Approve0": false, + "RouteNumberSetup": "12", + "LensesStr": "WRW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "RXV", + "ARSOnly": false, + "Angles": "{0.6931 177.4099 0}", + "Pos": "[14621.7021 -8537.334 -10852.7686]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "K", + "ARSCodes": "2", + "Repeater": false, + "EnRou": false, + "Lights": "2", + "Manual": false, + "RouteName": "", + "Switches": "" + }, + { + "Emer": false, + "NextSignal": "RX154A", + "ARSCodes": "22224", + "Repeater": false, + "EnRou": true, + "Lights": "2-2-2-2-1", + "Switches": "rx2-,rx3-,rx1+,rx4+", + "RouteName": "RXV-2", + "Manual": true + } + ], + "NonAutoStop": false, + "Left": true + }, + "37": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "2", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "RX154A", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[14899.207 -5785.9038 -10851.4063]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "0006", + "Repeater": false, + "Lights": "4-2-13", + "RouteName": "", + "Switches": "", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "38": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "RXA5", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[14635.207 -5787.4004 -10851.5059]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "ARSCodes": "0", + "Emer": false, + "Lights": "4", + "NextSignal": "", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "39": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": true, + "Double": false, + "Name": "RXR3", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[14635.207 -6847.7402 -10851.5059]", + "DoubleL": false, + "Routes": [ + { + "Repeater": true, + "RouteName": "", + "Emer": false, + "Switches": "rx2-,rx3-", + "NextSignal": "RXA4", + "ARSCodes": "", + "Manual": false + }, + { + "Repeater": true, + "RouteName": "", + "Emer": false, + "ARSCodes": "", + "NextSignal": "RXA3", + "Switches": "rx1+,rx3+", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "40": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "", + "RouteNumber": "3", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "OKA3", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[2031.8733 -4494.4458 -12014.7061]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Lights": "3-1", + "NextSignal": "", + "ARSCodes": "0", + "Manual": false + }, + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false, + "EnRou": true, + "RouteName": "Ok1-3", + "Switches": "", + "Manual": true + }, + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "04", + "Manual": true, + "EnRou": true, + "RouteName": "Ok2-3", + "Switches": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "41": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "", + "RouteNumber": "4", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "OKA4", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[2226.4204 -4673.71 -12014.7061]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Lights": "3-1", + "NextSignal": "", + "ARSCodes": "0", + "Manual": false + }, + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "004", + "Manual": true, + "EnRou": true, + "Switches": "", + "RouteName": "Ok2-4", + "Repeater": false + }, + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "004", + "Manual": true, + "EnRou": true, + "Repeater": false, + "RouteName": "Ok1-4", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "42": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "OKA5", + "ARSOnly": true, + "Angles": "{0 313.7646 0}", + "Pos": "[447.8206 -6022.4375 -12014.8057]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "0", + "Manual": false, + "Lights": "3-1", + "RouteName": "", + "Switches": "", + "Repeater": false + }, + { + "Manual": true, + "RouteName": "Ok3-1", + "Emer": false, + "ARSCodes": "000004", + "NextSignal": "OKA7", + "Switches": "", + "Repeater": false + }, + { + "Repeater": false, + "RouteName": "OK4-1", + "Emer": false, + "ARSCodes": "000004", + "NextSignal": "OKA7", + "Switches": "", + "Manual": true + } + ], + "NonAutoStop": true, + "Left": false + }, + "43": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "OKA6", + "ARSOnly": true, + "Angles": "{0 314.2464 0}", + "Pos": "[641.966 -6204.5576 -12014.8057]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "0", + "Manual": false, + "Lights": "3-1", + "RouteName": "", + "Switches": "", + "Repeater": false + }, + { + "Repeater": false, + "Switches": "", + "Emer": false, + "ARSCodes": "004", + "NextSignal": "OKA8", + "RouteName": "OK4-2", + "Manual": true + }, + { + "Repeater": false, + "Switches": "", + "Emer": false, + "ARSCodes": "004", + "NextSignal": "OKA8", + "RouteName": "OK3-2", + "Manual": true + } + ], + "NonAutoStop": true, + "Left": true + }, + "44": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "", + "RouteNumber": "2", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "OKA8", + "ARSOnly": true, + "Angles": "{0 314 0}", + "Pos": "[-1310.9536 -8607.1846 -12015.1055]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Lights": "3-1", + "NextSignal": "", + "ARSCodes": "0", + "Manual": false + }, + { + "Manual": true, + "RouteName": "Ok3-2", + "Emer": false, + "ARSCodes": "04", + "NextSignal": "*", + "Switches": "", + "Repeater": false + }, + { + "Repeater": false, + "Switches": "", + "Emer": false, + "ARSCodes": "04", + "NextSignal": "*", + "RouteName": "OK4-2", + "Manual": true + } + ], + "NonAutoStop": true, + "Left": false + }, + "45": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": true, + "Double": false, + "Name": "OKA7", + "ARSOnly": true, + "Angles": "{0 314 0}", + "Pos": "[-2004.8623 -7875.4307 -12014.7061]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "04", + "Manual": false, + "Lights": "3-1", + "Switches": "ok1-", + "RouteName": "", + "Repeater": false + }, + { + "Repeater": false, + "Switches": "ok1+", + "Emer": false, + "ARSCodes": "00006", + "NextSignal": "*", + "RouteName": "", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "46": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "OKR1", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[1398.8138 -5472.1592 -12014.7061]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "OKA4", + "ARSCodes": "04", + "Manual": false, + "Lights": "3-1", + "Switches": "ok6+,ok4+", + "RouteName": "", + "Repeater": true + }, + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Repeater": true, + "NextSignal": "OKA3", + "Switches": "ok5-,ok4-" + } + ], + "NonAutoStop": true, + "Left": false + }, + "47": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "OKR2", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[1215.8433 -5282.4219 -12014.7061]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "OKA3", + "ARSCodes": "04", + "Manual": false, + "Lights": "3-1", + "Switches": "ok3+,ok5+", + "RouteName": "", + "Repeater": true + }, + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Repeater": true, + "NextSignal": "OKA4", + "Switches": "ok3-,ok6-" + } + ], + "NonAutoStop": true, + "Left": true + }, + "48": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "OKR4", + "ARSOnly": true, + "Angles": "{0 313.998 0}", + "Pos": "[1244.0972 -5255.1392 -12014.7061]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "OKA5", + "ARSCodes": "04", + "Manual": false, + "Lights": "3-1", + "Switches": "ok3+,ok5+", + "RouteName": "", + "Repeater": true + }, + { + "Manual": false, + "Switches": "ok5-,ok4-", + "Emer": false, + "Repeater": true, + "NextSignal": "OKA6", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "49": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "OKR3", + "ARSOnly": true, + "Angles": "{0 313.998 0}", + "Pos": "[1430.1648 -5441.8857 -12014.7061]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "OKA6", + "ARSCodes": "04", + "Manual": false, + "Lights": "3-1", + "Switches": "ok6+,ok4+", + "RouteName": "", + "Repeater": true + }, + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Repeater": true, + "NextSignal": "OKA5", + "Switches": "ok3-,ok6-" + } + ], + "NonAutoStop": true, + "Left": true + }, + "50": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "OKA10", + "ARSOnly": true, + "Angles": "{0 121.2145 0}", + "Pos": "[-1269.2544 -7301.0688 -12014.8057]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "OKA3", + "ARSCodes": "0004", + "Repeater": false, + "EnRou": true, + "Lights": "3-1", + "Manual": false, + "Switches": "ok3+,ok5+", + "RouteName": "" + }, + { + "Emer": false, + "NextSignal": "OKA4", + "ARSCodes": "0004", + "Manual": false, + "EnRou": true, + "Repeater": false, + "Switches": "ok3-,ok6-", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "51": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "OKA11", + "ARSOnly": true, + "Angles": "{0 147.2693 0}", + "Pos": "[-731.0481 -7934.9541 -12030.7686]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "OKA4", + "ARSCodes": "0004", + "Repeater": false, + "EnRou": true, + "Lights": "3-1", + "Switches": "ok6+,ok4+", + "RouteName": "", + "Manual": false + }, + { + "Emer": false, + "NextSignal": "OKA3", + "ARSCodes": "004", + "Manual": false, + "EnRou": true, + "Repeater": false, + "Switches": "ok5-,ok4-", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": true + }, + "52": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "OKR8", + "ARSOnly": true, + "Angles": "{0 328.1656 0}", + "Pos": "[-599.1087 -7719.2666 -12014.8057]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "OKA8", + "ARSCodes": "04", + "Manual": false, + "Lights": "3-1", + "Switches": "", + "RouteName": "", + "Repeater": true + } + ], + "NonAutoStop": true, + "Left": false + }, + "53": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "OKR7", + "ARSOnly": true, + "Angles": "{0 301.0035 0}", + "Pos": "[-1339.9279 -7339.0928 -12030.7686]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "OKA7", + "ARSCodes": "04", + "Manual": false, + "Lights": "3-1", + "Switches": "ok1-", + "RouteName": "", + "Repeater": true + }, + { + "Manual": false, + "ARSCodes": "0", + "Emer": false, + "Switches": "ok1+", + "NextSignal": "K", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "54": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "OKR10", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[-1138.5392 -7039.5088 -12014.8057]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "OKA10", + "ARSCodes": "04", + "Manual": false, + "Lights": "3-1", + "Switches": "ok1-", + "RouteName": "", + "Repeater": true + } + ], + "NonAutoStop": true, + "Left": true + }, + "55": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "OKA50", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[-1071.7529 -6975.0186 -12014.8057]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "OKA50", + "ARSCodes": "1", + "Manual": false, + "Lights": "3-1", + "Switches": "", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "56": { + "Approve0": false, + "RouteNumberSetup": "12", + "LensesStr": "WY-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "OK1", + "ARSOnly": false, + "Angles": "{0 313.998 0}", + "Pos": "[2573.0371 -3971.8867 -12014.7061]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "K", + "ARSCodes": "24", + "Manual": false, + "EnRou": false, + "Lights": "3", + "Switches": "", + "RouteName": "", + "Repeater": false + }, + { + "Emer": false, + "NextSignal": "OKA6", + "ARSCodes": "2224", + "Manual": true, + "EnRou": true, + "Lights": "3-3-3-1", + "Switches": "ok5-,ok4-,ok2-,ok6+,ok3+", + "RouteName": "Ok3-2", + "Repeater": false + }, + { + "Emer": false, + "NextSignal": "OKA5", + "ARSCodes": "2222224", + "Repeater": false, + "EnRou": true, + "Lights": "3-3-32-32-32-32-32-1", + "Switches": "ok3+,ok5+,ok1-,ok6+,rx4+", + "RouteName": "Ok3-1", + "Manual": true + } + ], + "NonAutoStop": false, + "Left": false + }, + "57": { + "Approve0": false, + "RouteNumberSetup": "12XW", + "LensesStr": "WYY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "NH294", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-286.5195 -10085 -12625.6055]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "04", + "Manual": false, + "EnRou": false, + "Lights": "5-53-53-2-4", + "Repeater": false, + "Switches": "nh2+", + "RouteName": "Nh2-2" + }, + { + "Emer": false, + "NextSignal": "NHA2", + "ARSCodes": "04", + "Repeater": false, + "EnRou": true, + "Lights": "5-53-53-1", + "Manual": false, + "Switches": "nh2-,nh1-", + "RouteName": "NH2-1" + } + ], + "Left": false + }, + "58": { + "Approve0": false, + "RouteNumberSetup": "12X34", + "LensesStr": "WY-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "MD218", + "ARSOnly": false, + "Angles": "{0 134.001 0}", + "Pos": "[-2397.1045 -1972.5354 -14585.9063]", + "Routes": [ + { + "Emer": false, + "NextSignal": "K", + "ARSCodes": "24", + "Manual": false, + "EnRou": false, + "Lights": "3-32", + "RouteName": "MD2P", + "Switches": "", + "Repeater": false + }, + { + "Emer": false, + "NextSignal": "MDA20", + "ARSCodes": "2004", + "Repeater": false, + "EnRou": true, + "Lights": "3-32-32-32-1", + "Manual": true, + "Switches": "md2-,md4-,md5-,md6+,md3+", + "RouteName": "MD2-3" + }, + { + "Emer": false, + "NextSignal": "MDA22", + "ARSCodes": "204", + "Repeater": false, + "EnRou": true, + "Lights": "3-32-1", + "Manual": true, + "Switches": "md2+", + "RouteName": "MD2-2" + }, + { + "Emer": false, + "NextSignal": "MDA20", + "ARSCodes": "2004", + "Repeater": false, + "EnRou": true, + "Lights": "3-32-32-32-1", + "Manual": true, + "Switches": "md2-,md6+,md4+,md5+,md3+", + "RouteName": "MD2-4" + } + ] + }, + "59": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "237", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[15720.8018 -4063.4543 -14270.835]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-24-13", + "NextSignal": "*", + "ARSCodes": "0046", + "Repeater": false + } + ] + }, + "60": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "239", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[15719.707 2704.8896 -14271.4063]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-3", + "NextSignal": "*", + "ARSCodes": "0446", + "Repeater": false + } + ] + }, + "61": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "329", + "ARSOnly": false, + "Angles": "{0 314 0}", + "Pos": "[-7270.1567 -12959.498 -12014.8057]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-3", + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "62": { + "Approve0": false, + "RouteNumberSetup": "4D23", + "LensesStr": "WYY-GRW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "OK318", + "ARSOnly": false, + "Angles": "{0 134 0}", + "Pos": "[-1942.5334 -9217.0938 -12015.1055]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "128A", + "ARSCodes": "04", + "Manual": false, + "EnRou": false, + "Lights": "5-53-53-2-4", + "Switches": "ok2+", + "RouteName": "Ok2-2", + "Repeater": false + }, + { + "Emer": false, + "NextSignal": "OKA11", + "ARSCodes": "24", + "Repeater": false, + "EnRou": true, + "Lights": "5-53-53-1", + "Switches": "ok2-,ok6+,ok4+,ok5+,ok3+", + "RouteName": "OK2-4", + "Manual": false + }, + { + "Emer": false, + "NextSignal": "OKA11", + "ARSCodes": "24", + "Repeater": false, + "EnRou": true, + "Lights": "5-53-53-1", + "Switches": "ok2-,ok5-,ok4-,ok6+,ok3+", + "RouteName": "OK2-3", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "63": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "234", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[14971.5 -4214.3848 -14272.4063]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-3", + "NextSignal": "*", + "ARSCodes": "0446", + "Repeater": false + } + ], + "Left": false + }, + "64": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2.0, + "Double": false, + "Name": "PTR2", + "ARSOnly": true, + "Angles": "{358.9886 77.9649 0}", + "Pos": "[-5293.3047 -15097.1992 -13670.2939]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "PT47A", + "ARSCodes": "04", + "Manual": false, + "Lights": "4-42-1-13-3", + "Repeater": true, + "Switches": "pt1-", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": true + }, + "65": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2.0, + "Double": false, + "Name": "PTR3", + "ARSOnly": true, + "Angles": "{0.9973 270.0027 0}", + "Pos": "[-5489.3179 -15216.6846 -13670.5039]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "PTA1", + "ARSCodes": "04", + "Manual": false, + "Lights": "4-42-1-13-3", + "Repeater": true, + "Switches": "pt1-,pt2-", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": true + }, + "66": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2.0, + "Double": false, + "Name": "PTA3", + "ARSOnly": true, + "Angles": "{0.9973 270.0027 0}", + "Pos": "[-5605.8623 -15216.6904 -13670.5039]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "PTA3", + "ARSCodes": "1", + "Manual": false, + "Lights": "4-42-1-13-3", + "Repeater": false, + "Switches": "", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": true + }, + "67": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Name": "239A", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[15720.207 -479.2824 -14271.3223]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-2-3", + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "68": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "OK130B", + "ARSOnly": true, + "Angles": "{0 133.9999 0}", + "Pos": "[-2994.4375 -10230.8691 -12015.1055]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "006", + "Manual": false, + "Lights": "4-42-2-31", + "Switches": "", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "69": { + "Approve0": false, + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "OK325", + "ARSOnly": false, + "Angles": "{0 313.998 0}", + "Pos": "[3.329 -5936.54 -12014.9063]", + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "0007", + "Repeater": false, + "Lights": "4-42-42-42-1-3", + "RouteName": "ok1-1", + "Switches": "ok1+", + "Manual": false + }, + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "0", + "Repeater": false, + "Lights": "4", + "RouteName": "", + "Switches": "ok1-", + "Manual": false + } + ], + "Left": false + }, + "70": { + "Approve0": false, + "RouteNumberSetup": "12", + "LensesStr": "WY-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "OK2", + "ARSOnly": false, + "Angles": "{0 313.998 0}", + "Pos": "[2690.1406 -4225.9326 -12014.7061]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "K", + "ARSCodes": "24", + "Repeater": false, + "EnRou": false, + "Lights": "3", + "RouteName": "", + "Switches": "", + "Manual": false + }, + { + "Emer": false, + "NextSignal": "OKA6", + "ARSCodes": "22224", + "Manual": true, + "EnRou": true, + "Lights": "3-3-3-3-1", + "RouteName": "OK4-2", + "Switches": "ok6+,ok4+,ok2-,ok5+,ok3+", + "Repeater": false + }, + { + "Emer": false, + "NextSignal": "OKA5", + "ARSCodes": "2222224", + "Manual": true, + "EnRou": true, + "Lights": "3-3-32-32-32-32-32-1", + "Repeater": false, + "Switches": "ok3-,ok6-,ok1-,ok5+,ok4+", + "RouteName": "Ok4-1" + } + ], + "NonAutoStop": false, + "Left": false + }, + "71": { + "Approve0": false, + "LensesStr": "WYG-RW-M", + "RouteNumber": "2", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "MDA22", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[-420.6035 -63.3112 -14585.6055]", + "Routes": [ + { + "Emer": false, + "NextSignal": "K", + "ARSCodes": "04", + "Repeater": false, + "Manual": true, + "Switches": "md2+", + "RouteName": "MD2-2" + } + ], + "NonAutoStop": true, + "Left": false + }, + "72": { + "Approve0": false, + "LensesStr": "WR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "MDE", + "ARSOnly": false, + "Angles": "{0 313.998 0}", + "Pos": "[-467.0078 -108.1201 -14585.6055]", + "Routes": [ + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "2", + "Manual": false, + "Lights": "2", + "Switches": "", + "RouteName": "", + "Repeater": false + }, + { + "Emer": false, + "NextSignal": "MDA8", + "ARSCodes": "224", + "Repeater": false, + "Lights": "2-2-1", + "Manual": true, + "RouteName": "MDE-2", + "Switches": "md2+" + } + ], + "Left": true + }, + "73": { + "Approve0": false, + "LensesStr": "WRW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "MDG", + "ARSOnly": false, + "Angles": "{0 313.998 0}", + "Pos": "[-1096.7954 684.9061 -14585.6055]", + "Routes": [ + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "2", + "Manual": false, + "Lights": "2", + "Switches": "", + "RouteName": "", + "Repeater": false + }, + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "22224", + "Repeater": false, + "Lights": "2-2-2-2-1", + "Manual": true, + "RouteName": "Md1-1", + "Switches": "md1+" + } + ] + }, + "74": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "MD226", + "ARSOnly": false, + "Angles": "{357.3599 252.5512 0}", + "Pos": "[-7719.2896 -14738.583 -14569.4941]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-42-1-31-3", + "NextSignal": "*", + "ARSCodes": "00046", + "Repeater": false + } + ], + "Left": true + }, + "75": { + "Approve0": false, + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": " DOP", + "ARSOnly": false, + "Angles": "{0 313.998 0}", + "Pos": "[705.8215 -6660.0859 -12014.8057]", + "Routes": [ + { + "Emer": false, + "NextSignal": "K", + "ARSCodes": "1", + "Repeater": false, + "Lights": "1b-3", + "Manual": false, + "RouteName": "", + "Switches": "ok2+" + }, + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "2", + "Manual": false, + "Lights": "1b", + "Switches": "ok2-", + "RouteName": "", + "Repeater": false + } + ] + }, + "76": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "MD228", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-2786.4436 -14978.793 -14569.5059]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-42-1-31-3", + "NextSignal": "*", + "ARSCodes": "00446", + "Repeater": false + } + ], + "Left": false + }, + "77": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "MD220", + "ARSOnly": false, + "Angles": "{0 134.001 0}", + "Pos": "[-7084.2168 -6498.4663 -14585.123]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "MD6//", + "Emer": false, + "Lights": "4-42-42-13", + "NextSignal": "*", + "ARSCodes": "0046", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": true + }, + "78": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "233", + "ARSOnly": false, + "Angles": "{0.3 180 0}", + "Pos": "[15719.8418 -10634.4404 -14360.8516]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-31-3", + "NextSignal": "*", + "ARSCodes": "0046", + "Repeater": false + } + ] + }, + "79": { + "Approve0": false, + "LensesStr": "YY-GR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1.0, + "PassOcc": false, + "Name": "PT253", + "ARSOnly": false, + "Angles": "{3.5015 46.6392 0}", + "Pos": "[-13410.8721 -14296.333 -13679.4932]", + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "0046", + "Manual": false, + "Lights": "4-42-42-1-31-3", + "Switches": "", + "RouteName": "", + "Repeater": false + } + ] + }, + "80": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2.0, + "PassOcc": true, + "Double": false, + "Name": "PT47A", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[-4271.6099 -15217.207 -13670.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "00046", + "Manual": false, + "Lights": "4-42-1-13-3", + "Repeater": false, + "Switches": "pt1+", + "RouteName": "" + }, + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "ARSCodes": "0004", + "NextSignal": "*", + "Switches": "pt1-,pt2-", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "81": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2.0, + "Double": false, + "Name": "PT40A", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-8643.1533 -14491.793 -13670.0596]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "0006", + "Manual": false, + "Lights": "4-42-1-13-3", + "Repeater": false, + "Switches": "pt2+", + "RouteName": "" + }, + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "ARSCodes": "0004", + "NextSignal": "*", + "Switches": "pt1-,pt2-", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "82": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "238A", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[14971.293 -845.473 -14272.3057]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-2-3", + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "83": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Name": "277", + "ARSOnly": false, + "Angles": "{0 280 0}", + "Pos": "[-2773.9082 14712.8438 -13213.5059]", + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "0046", + "Repeater": false, + "Lights": "4-42-42-31", + "Manual": false, + "RouteName": "", + "Switches": "" + } + ] + }, + "84": { + "Approve0": false, + "RouteNumberSetup": "12", + "LensesStr": "WYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "RX355", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[14634.793 -5221.6074 -10851.7061]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false, + "EnRou": false, + "Lights": "4-42-42-2-3", + "Switches": "rx1+,rx3+,rx4+,rx2+", + "RouteName": "", + "Manual": false + }, + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "04", + "Manual": false, + "EnRou": false, + "Lights": "4-42", + "Switches": "rx1+,rx3-", + "RouteName": "", + "Repeater": false + }, + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "04", + "Repeater": false, + "Lights": "4-42", + "Manual": false, + "RouteName": "", + "Switches": "rx1-,rx4+" + }, + { + "Emer": false, + "NextSignal": "RXA4", + "ARSCodes": "24", + "Repeater": false, + "EnRou": true, + "Lights": "4-42-1", + "Manual": false, + "Switches": "rx1-,rx4-,rx3+,rx2+", + "RouteName": "RX1-2" + } + ], + "NonAutoStop": false, + "Left": false + }, + "85": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "340", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[14898.7939 1190.0481 -10851.5059]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "3-31-31-1-2", + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false + } + ], + "Left": true + }, + "86": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "348A", + "ARSOnly": true, + "Angles": "{358.9566 165.8749 0}", + "Pos": "[15173.5732 4451.6201 -10872.4814]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-31-3", + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "87": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "OK328", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[-15933.0059 -5065.7349 -11935.9668]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-31-3", + "NextSignal": "*", + "ARSCodes": "008", + "Repeater": false + } + ], + "Left": false + }, + "88": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "OK324", + "ARSOnly": false, + "Angles": "{3.0199 74.1688 0}", + "Pos": "[-12752.4043 -15976.752 -12014.4746]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-1-13-3", + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false + } + ], + "Left": false + }, + "89": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "OK320", + "ARSOnly": false, + "Angles": "{0 134 0}", + "Pos": "[-6605.6133 -13720.1309 -12015.0059]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-42-31", + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false + } + ], + "Left": false + }, + "90": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "OK322", + "ARSOnly": false, + "Angles": "{3.3538 105.1066 0}", + "Pos": "[-9507.9961 -15888.751 -12014.8916]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-42-1-3", + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false + } + ], + "Left": false + }, + "91": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "OK130A", + "ARSOnly": true, + "Angles": "{0 133.9999 0}", + "Pos": "[-4241.5513 -11435.1934 -12015.1055]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "006", + "Manual": false, + "Lights": "4-42-2-31", + "Switches": "", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "92": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "2", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "128A", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[446.8397 -6910.1641 -12014.8057]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "006", + "Manual": false, + "EnRou": true, + "Lights": "3-31-1-2", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "93": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "272", + "ARSOnly": false, + "Angles": "{0 100 0}", + "Pos": "[-9174.4688 12436.6514 -13214.3057]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false, + "EnRou": false, + "Lights": "4-42-42-31", + "Manual": false, + "RouteName": "", + "Switches": "" + } + ], + "Left": true + }, + "94": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "274", + "ARSOnly": false, + "Angles": "{0 126.4995 0}", + "Pos": "[-12158.6934 11240.9023 -13214.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "006", + "Manual": false, + "EnRou": false, + "Lights": "4-42-42-1-3", + "Repeater": false, + "Switches": "", + "RouteName": "" + } + ], + "Left": true + }, + "95": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "276", + "ARSOnly": false, + "Angles": "{0 149.5516 0}", + "Pos": "[-14328.6611 8786.2559 -13214.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false, + "EnRou": false, + "Lights": "4-42-42-1-31-3", + "Manual": false, + "RouteName": "", + "Switches": "" + } + ], + "Left": true + }, + "96": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RYY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "278A", + "ARSOnly": true, + "Angles": "{0 100 0}", + "Pos": "[-5506.3179 13083.4443 -13214.6055]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false, + "Lights": "5-53-3-4", + "Manual": false, + "Switches": "", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": true + }, + "97": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "278", + "ARSOnly": false, + "Angles": "{0 176.2628 0}", + "Pos": "[-15221.5254 5679.6602 -13214.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false, + "EnRou": false, + "Lights": "4-42-42-1-31-3", + "Manual": false, + "RouteName": "", + "Switches": "" + } + ], + "Left": true + }, + "98": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Name": "279", + "ARSOnly": false, + "Angles": "{0 280.5922 0}", + "Pos": "[-9696.6064 13491.4775 -13213.5059]", + "Routes": [ + { + "Repeater": false, + "ARSCodes": "0446", + "Emer": false, + "Lights": "4-42-42-1-3", + "NextSignal": "*", + "RouteName": "", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "99": { + "Approve0": false, + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "NH293", + "ARSOnly": false, + "Angles": "{357.9602 88.3176 0}", + "Pos": "[11505.8916 -1094.8523 -12626.499]", + "Routes": [ + { + "Repeater": false, + "ARSCodes": "06", + "Emer": false, + "Lights": "4-42-1-31-3", + "NextSignal": "*", + "RouteName": "", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": true + }, + "100": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Name": "301", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[2815.8958 -9388.7949 -12626.5059]", + "Routes": [ + { + "Repeater": false, + "ARSCodes": "006", + "Emer": false, + "Lights": "4-42-42-1-3", + "NextSignal": "*", + "RouteName": "", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "101": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Name": "303", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-448.7825 -9389.0527 -12626.3057]", + "Routes": [ + { + "Repeater": false, + "ARSCodes": "006", + "Emer": false, + "Lights": "4-4-42-31", + "NextSignal": "*", + "RouteName": "", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "102": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "311A", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-4135.3984 -9390 -12626.7061]", + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-2-31", + "NextSignal": "*", + "ARSCodes": "006", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "103": { + "Approve0": false, + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Name": "OK323", + "ARSOnly": false, + "Angles": "{0 313.976 0}", + "Pos": "[2359.4312 -3661.959 -12014.3057]", + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "0007", + "Repeater": false, + "Lights": "4-42-42-42-1-31-3", + "Manual": false, + "Switches": "", + "RouteName": "" + } + ], + "NonAutoStop": false, + "Left": false + }, + "104": { + "Approve0": false, + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "OK321", + "ARSOnly": false, + "Angles": "{0 313.998 0}", + "Pos": "[5589.0117 -543.3234 -12032.542]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-42-1-31-3", + "NextSignal": "*", + "ARSCodes": "007", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "105": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YG-RW", + "RouteNumber": "4", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "V2", + "ARSOnly": false, + "Angles": "{0 133.955 0}", + "Pos": "[8076.2549 975.536 -12014.1201]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "K", + "ARSCodes": "24", + "Repeater": false, + "Lights": "3", + "RouteName": "", + "Switches": "", + "Manual": false + }, + { + "Manual": true, + "ARSCodes": "2", + "Emer": false, + "Lights": "3", + "NextSignal": "K", + "RouteName": "E2-ok2", + "Repeater": false + }, + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "4", + "Manual": true, + "EnRou": true, + "Lights": "3-31-1-2", + "RouteName": "depot2", + "Repeater": false + } + ], + "Left": false + }, + "106": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YG-RW", + "RouteNumber": "3", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "V1", + "ARSOnly": false, + "Angles": "{0 133.955 0}", + "Pos": "[7919.7354 1191.3087 -12013.7832]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Lights": "3", + "NextSignal": "", + "ARSCodes": "4", + "Manual": false + }, + { + "Emer": false, + "NextSignal": "K", + "ARSCodes": "24", + "Repeater": false, + "EnRou": false, + "Lights": "3", + "RouteName": "depot1", + "Manual": true + }, + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "4", + "Repeater": false, + "EnRou": true, + "Lights": "3-31-1-2", + "RouteName": "V1-depot", + "Manual": true + } + ], + "Left": false + }, + "107": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "133A", + "ARSOnly": true, + "Angles": "{356.5601 293.0057 0}", + "Pos": "[-9752.0977 -15011.6846 -12014.6943]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-31-3", + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "108": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": true, + "Double": false, + "Name": "353", + "ARSOnly": true, + "Angles": "{359.9996 89.95 0}", + "Pos": "[9589.3984 14605.1523 -10937.2842]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-31-3", + "NextSignal": "*", + "ARSCodes": "007", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "109": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "347", + "ARSOnly": false, + "Angles": "{359.0904 5.5422 0}", + "Pos": "[15718.2178 11449.7295 -10938.6201]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-31-31-3", + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "110": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "345", + "ARSOnly": false, + "Angles": "{356.7709 63.1804 0}", + "Pos": "[14086.543 14127.3848 -10943.0029]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-31-3", + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "111": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "349", + "ARSOnly": false, + "Angles": "{359.5536 357.872 0}", + "Pos": "[15752.627 8148.4336 -10904.6416]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-1-31-3", + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": true + }, + "112": { + "Approve0": false, + "RouteNumberSetup": "3D14", + "LensesStr": "WRW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "OKD", + "ARSOnly": false, + "Angles": "{0 134 0}", + "Pos": "[-2320.3428 -8180.0869 -12014.7061]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "K", + "ARSCodes": "2", + "Manual": false, + "Lights": "2", + "Repeater": false, + "Switches": "", + "RouteName": "" + }, + { + "Emer": false, + "NextSignal": "OKA10", + "ARSCodes": "2224", + "Manual": true, + "EnRou": true, + "Lights": "2-2-2-1", + "Repeater": false, + "RouteName": "OK1-3", + "Switches": "ok1-,ok3+,ok5+,ok6+,ok4+" + }, + { + "Emer": false, + "NextSignal": "OKA10", + "ARSCodes": "2224", + "Manual": true, + "EnRou": true, + "Lights": "2-2-2-1", + "Repeater": false, + "RouteName": "OK1-4", + "Switches": "ok1-,ok3-,ok6-,ok5+,ok4+" + } + ], + "Left": true + }, + "113": { + "Approve0": false, + "RouteNumberSetup": "12", + "LensesStr": "WRW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "MD1", + "ARSOnly": false, + "Angles": "{0 313.998 0}", + "Pos": "[2116.5962 3271.4688 -14585.5059]", + "Routes": [ + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "2", + "Repeater": false, + "EnRou": false, + "Lights": "2", + "Switches": "", + "RouteName": "", + "Manual": false + }, + { + "Emer": false, + "NextSignal": "MDA5", + "ARSCodes": "222224", + "Repeater": false, + "EnRou": true, + "Lights": "2-2-2-2-2-1", + "Manual": true, + "RouteName": "MD3-1", + "Switches": "md5+,md3+,md1-,md4+,md6+" + }, + { + "Emer": false, + "NextSignal": "MDA6", + "ARSCodes": "2224", + "Repeater": false, + "EnRou": true, + "Lights": "2-2-2-1", + "Manual": true, + "Switches": "md5-,md4-,md2-,md3+,md6+", + "RouteName": "MD3-2" + } + ] + }, + "114": { + "Approve0": false, + "LensesStr": "RYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2.0, + "PassOcc": false, + "Name": "261A", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[-500.5567 -15217.207 -13670.3057]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-2-3", + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "115": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "MD4", + "ARSOnly": false, + "Angles": "{0 313.998 0}", + "Pos": "[4271.0596 4467.0928 -14585.8057]", + "Routes": [ + { + "Emer": false, + "NextSignal": "MDE", + "ARSCodes": "1", + "Repeater": false, + "Manual": true, + "Lights": "1-12b", + "Switches": "", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "116": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "MD3", + "ARSOnly": false, + "Angles": "{0 313.998 0}", + "Pos": "[3607.6836 5227.2285 -14585.5059]", + "Routes": [ + { + "Emer": false, + "NextSignal": "MDG", + "ARSCodes": "1", + "Manual": true, + "Repeater": false, + "Lights": "1-12b", + "Switches": "", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "117": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "MD222", + "ARSOnly": false, + "Angles": "{356.8422 147.7758 0}", + "Pos": "[-9502.0439 -9067.6836 -14569.499]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-3", + "NextSignal": "*", + "ARSCodes": "0046", + "Repeater": false + } + ], + "Left": true + }, + "118": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "OK326", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[-15933.207 -11244.3848 -12014.3057]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-31-31-3", + "NextSignal": "*", + "ARSCodes": "007", + "Repeater": false + } + ], + "Left": false + }, + "119": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "RX353", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[14634.6934 1714.0391 -10851.6689]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-24-24-13", + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false + } + ], + "Left": false + }, + "120": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "WYY-GRW-M", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "363B", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[14635 -3904.3625 -10851.7061]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "53", + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "121": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Name": "305", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-7071.6772 -9390 -12626.9063]", + "Routes": [ + { + "Repeater": false, + "ARSCodes": "06", + "Emer": false, + "Lights": "4-42-42-1-3", + "NextSignal": "*", + "RouteName": "", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "122": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "V6", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[7645.6221 16089.2051 -11476.8057]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "depot2", + "Emer": false, + "Lights": "3-31-2", + "NextSignal": "*", + "ARSCodes": "04", + "Manual": false + }, + { + "Manual": true, + "ARSCodes": "0", + "Emer": false, + "Lights": "3", + "NextSignal": "*", + "RouteName": "E2-ok2", + "Repeater": false + } + ], + "Left": false + }, + "123": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "2", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "OKREP11", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[376.1881 -6978.3867 -12014.8057]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": true, + "Lights": "3-31-1-2", + "RouteName": "", + "Switches": "ok2+", + "Manual": false + }, + { + "Repeater": true, + "Switches": "ok2-", + "Emer": false, + "Manual": false, + "NextSignal": "OKA11", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "124": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": true, + "Double": false, + "Name": "RXR2", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[14898.793 -6889.146 -10851.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "RX154A", + "ARSCodes": "04", + "Repeater": true, + "Lights": "4", + "RouteName": "", + "Switches": "rx4+,rx2+", + "Manual": false + }, + { + "Repeater": true, + "RouteName": "", + "Emer": false, + "Switches": "rx2-,rx3-", + "NextSignal": "RXA5", + "ARSCodes": "", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "125": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "219", + "ARSOnly": false, + "Angles": "{0 314.001 0}", + "Pos": "[-3097.7761 -1246.7917 -14586.1055]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "ARSCodes": "04", + "Emer": false, + "Lights": "4-42-13", + "NextSignal": "*", + "RouteName": "", + "Repeater": false + } + ], + "Left": false + }, + "126": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "MDA100", + "ARSOnly": true, + "Angles": "{0 314.001 0}", + "Pos": "[-2530.3342 -698.8002 -14586.1055]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "ARSCodes": "0", + "Emer": false, + "Lights": "4-42-2", + "NextSignal": "", + "RouteName": "", + "Repeater": false + }, + { + "Repeater": false, + "RouteName": "MD1-1", + "Emer": false, + "Manual": true, + "NextSignal": "*", + "ARSCodes": "0004" + }, + { + "Manual": true, + "RouteName": "MD4-1", + "Emer": false, + "Repeater": false, + "NextSignal": "*", + "ARSCodes": "0004" + }, + { + "Manual": true, + "ARSCodes": "0004", + "Emer": false, + "Repeater": false, + "NextSignal": "*", + "RouteName": "MD3-1" + } + ], + "NonAutoStop": true, + "Left": false + }, + "127": { + "Approve0": true, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": true, + "Double": false, + "Name": "MDOP", + "ARSOnly": true, + "Angles": "{0 314.001 0}", + "Pos": "[-6676.5835 -6105.5068 -14585.9063]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-2-31", + "NextSignal": "*", + "ARSCodes": "0", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "128": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "351", + "ARSOnly": false, + "Angles": "{0.3284 341.8044 0}", + "Pos": "[15059.8057 4965.8745 -10876.8623]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-42-1-3", + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": true + }, + "129": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "335B", + "ARSOnly": true, + "Angles": "{0 313.9998 0}", + "Pos": "[-6348.7012 -12072.2471 -12014.8057]", + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "006", + "Manual": false, + "Lights": "4-42-1-31-3", + "Switches": "", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "130": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "335A", + "ARSOnly": true, + "Angles": "{0 313.9998 0}", + "Pos": "[-4540.0303 -10325.6465 -12014.8057]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-31-3", + "NextSignal": "*", + "ARSCodes": "0006", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "131": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Name": "299", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[6088.8979 -9388.793 -12626.5059]", + "Routes": [ + { + "Repeater": false, + "ARSCodes": "006", + "Emer": false, + "Lights": "4-42-42-1-31-3", + "NextSignal": "*", + "RouteName": "", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "132": { + "Approve0": false, + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "NH295", + "ARSOnly": false, + "Angles": "{357.0358 347.1928 0}", + "Pos": "[15008.6807 -6673.2515 -12626.5049]", + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false, + "Lights": "4-42-42-1-31-3", + "Switches": "nh1+", + "RouteName": "", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": true + }, + "133": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "338", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[16026.5938 8937.8398 -10914.6338]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false + } + ], + "Left": false + }, + "134": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "336", + "ARSOnly": false, + "Angles": "{2.1097 258.8098 0}", + "Pos": "[13024.9785 14761.915 -10931.2178]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-3", + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false + } + ], + "Left": false + }, + "135": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "334", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[5713.9702 14869.1074 -11024.2744]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-3", + "NextSignal": "*", + "ARSCodes": "08", + "Repeater": false + } + ], + "Left": false + }, + "136": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "332", + "ARSOnly": false, + "Angles": "{0.2362 271.5219 0}", + "Pos": "[-7921.5503 14867.7012 -11519.5146]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-1-13-3", + "NextSignal": "*", + "ARSCodes": "08", + "Repeater": false + } + ], + "Left": false + }, + "137": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "330", + "ARSOnly": false, + "Angles": "{1.3371 353.8219 0}", + "Pos": "[-15855.2461 8065.3984 -11517.376]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-3", + "NextSignal": "*", + "ARSCodes": "08", + "Repeater": false + } + ], + "Left": false + }, + "138": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "", + "RouteNumber": "2", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "OKOP", + "ARSOnly": true, + "Angles": "{0 314 0}", + "Pos": "[-6126.8721 -13255.8242 -12015.0059]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Lights": "3-1", + "NextSignal": "*", + "ARSCodes": "0", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "139": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "331", + "ARSOnly": false, + "Angles": "{356.5305 242.5654 0}", + "Pos": "[-13320.4453 -14915.9072 -12014.793]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-31-3", + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": true + }, + "140": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "333", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[-15669.207 -9840.1113 -12014.7061]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-3", + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": true + }, + "141": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "335", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[-15668.9941 -1788.4706 -11799.0303]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-3", + "NextSignal": "*", + "ARSCodes": "08", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "142": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "337", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[-15668.5996 5827.4492 -11529.1484]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-31-3", + "NextSignal": "*", + "ARSCodes": "08", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "143": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "339", + "ARSOnly": false, + "Angles": "{356.6961 122.9416 0}", + "Pos": "[-12730.752 13349.9434 -11528.0254]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-2-1-31-31-3", + "NextSignal": "*", + "ARSCodes": "08", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "144": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "341", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-2334.0244 14606.4941 -11378.7314]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-1-3", + "NextSignal": "*", + "ARSCodes": "08", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "145": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "343", + "ARSOnly": false, + "Angles": "{0 89.97 0}", + "Pos": "[5301.5439 14606.2568 -11044.71]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-31-3", + "NextSignal": "*", + "ARSCodes": "08", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "146": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "OK3", + "ARSOnly": false, + "Angles": "{0 313.955 0}", + "Pos": "[7882.7305 1155.6295 -12014.2324]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "depot1", + "Emer": false, + "Lights": "3-31-31-1-1-1-1-1-2", + "NextSignal": "*", + "ARSCodes": "004", + "Repeater": false + }, + { + "Repeater": false, + "ARSCodes": "0", + "Emer": false, + "Lights": "3", + "NextSignal": "*", + "RouteName": "V1-Depot", + "Manual": true + } + ], + "Left": false + }, + "147": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "OK4", + "ARSOnly": false, + "Angles": "{0 314.023 0}", + "Pos": "[8042.1538 942.8917 -12014.5059]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "ARSCodes": "0", + "Emer": false, + "Lights": "3", + "NextSignal": "K", + "RouteName": "", + "Repeater": false + }, + { + "Manual": true, + "ARSCodes": "0", + "Emer": false, + "Lights": "3", + "NextSignal": "*", + "RouteName": "depot2", + "Repeater": false + }, + { + "Repeater": false, + "ARSCodes": "04", + "Emer": false, + "Lights": "3-31-1-2", + "NextSignal": "*", + "RouteName": "E2-OK2", + "Manual": true + } + ], + "Left": false + }, + "148": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "OK8", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[7667.0288 16089.2051 -11476.8057]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "ARSCodes": "0", + "Emer": false, + "Lights": "3", + "NextSignal": "K", + "RouteName": "", + "Repeater": false + }, + { + "Manual": true, + "ARSCodes": "0", + "Emer": false, + "Lights": "3", + "NextSignal": "*", + "RouteName": "depot2", + "Repeater": false + }, + { + "Manual": true, + "ARSCodes": "04", + "Emer": false, + "Lights": "3-31-1-2", + "NextSignal": "*", + "RouteName": "E2-OK2", + "Repeater": false + } + ], + "Left": true + }, + "149": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "316", + "ARSOnly": false, + "Angles": "{0 134 0}", + "Pos": "[2923.437 -4518.5264 -12014.5059]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "ARSCodes": "06", + "Emer": false, + "Lights": "4-42-1-3", + "NextSignal": "*", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "150": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "NH296", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-7559.0298 -10085.207 -12625.3057]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "ARSCodes": "006", + "Emer": false, + "Lights": "4-42-42-42-31", + "NextSignal": "*", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "151": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "N2", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-4193.6411 16089.207 -11194.4443]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "ARSCodes": "04", + "Emer": false, + "Lights": "3-1-2", + "NextSignal": "*", + "RouteName": "depot2", + "Repeater": false + }, + { + "Repeater": false, + "ARSCodes": "0", + "Emer": false, + "Lights": "3", + "NextSignal": "*", + "RouteName": "E2-OK2", + "Manual": true + } + ], + "Left": false + }, + "152": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YG-RW", + "RouteNumber": "D", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "V4", + "ARSOnly": false, + "Angles": "{1.5948 180 0}", + "Pos": "[14677.4824 9494.958 -11539.2939]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "depot2", + "Emer": false, + "Lights": "3-31-1-2", + "NextSignal": "*", + "ARSCodes": "04", + "Manual": false + }, + { + "Manual": true, + "ARSCodes": "0", + "Emer": false, + "Lights": "3", + "NextSignal": "*", + "RouteName": "E2-OK2", + "Repeater": false + } + ], + "Left": false + }, + "153": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YG-RW", + "RouteNumber": "D", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "V3", + "ARSOnly": false, + "Angles": "{0.7953 180 0}", + "Pos": "[13757.9395 9354.4277 -11582.0996]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Lights": "3", + "NextSignal": "K", + "ARSCodes": "0", + "Manual": false + }, + { + "Repeater": false, + "ARSCodes": "0", + "Emer": false, + "Lights": "3", + "NextSignal": "*", + "RouteName": "depot1", + "Manual": true + }, + { + "Repeater": false, + "ARSCodes": "04", + "Emer": false, + "Lights": "3-31-1-2", + "NextSignal": "*", + "RouteName": "V1-depot", + "Manual": true + } + ], + "Left": false + }, + "154": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "N1", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-4086.4519 15569.207 -11193.1846]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Lights": "3", + "NextSignal": "K", + "ARSCodes": "0", + "Manual": false + }, + { + "Manual": true, + "ARSCodes": "0", + "Emer": false, + "Lights": "3", + "NextSignal": "*", + "RouteName": "depot1", + "Repeater": false + }, + { + "Manual": true, + "ARSCodes": "04", + "Emer": false, + "Lights": "3-31-1-2", + "NextSignal": "*", + "RouteName": "V1-depot", + "Repeater": false + } + ], + "Left": false + }, + "155": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "V5", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[7068.5596 15569.207 -11490.8613]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Lights": "3", + "NextSignal": "K", + "ARSCodes": "0", + "Manual": false + }, + { + "Repeater": false, + "ARSCodes": "0", + "Emer": false, + "Lights": "3", + "NextSignal": "*", + "RouteName": "depot1", + "Manual": true + }, + { + "Manual": true, + "ARSCodes": "04", + "Emer": false, + "Lights": "3-31-1-2", + "NextSignal": "*", + "RouteName": "V1-depot", + "Repeater": false + } + ], + "Left": false + }, + "156": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "313A", + "ARSOnly": true, + "Angles": "{358.9939 270 0}", + "Pos": "[-10147.8447 -9389.0518 -12659.2275]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "157": { + "Approve0": false, + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Name": "OK319", + "ARSOnly": false, + "Angles": "{0 313.998 0}", + "Pos": "[8958.1758 2711.7229 -12178.4355]", + "Routes": [ + { + "Repeater": false, + "ARSCodes": "007", + "Emer": false, + "Lights": "4-42-42-42-1-31-3", + "NextSignal": "*", + "RouteName": "", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "158": { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "380A", + "ARSOnly": true, + "Angles": "{360 180 0}", + "Pos": "[-14854.6055 4185.9727 -9969.5098]", + "Routes": [ + { + "Manual": false, + "ARSCodes": "004", + "RouteName": "", + "Lights": "3-31-1-2", + "NextSignal": "*", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "159": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1.0, + "Double": false, + "Name": "E1", + "ARSOnly": false, + "Angles": "{0 180.1 0}", + "Pos": "[-10520.4941 7536.7432 -11176.3057]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "1", + "Manual": true, + "Lights": "3-3-1-2", + "Repeater": false, + "RouteName": "Depot1" + }, + { + "Repeater": false, + "ARSCodes": "1", + "Emer": false, + "Lights": "3", + "NextSignal": "*", + "RouteName": "v1-depot", + "Manual": true + } + ], + "Left": false + }, + "160": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1.0, + "Double": false, + "Name": "E2", + "ARSOnly": false, + "Angles": "{0 180.1 0}", + "Pos": "[-10786.0293 7524.6592 -11176.1055]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "1", + "Manual": true, + "Lights": "3-3-1-2", + "Repeater": false, + "RouteName": "E2-Ok2" + }, + { + "Manual": true, + "ARSCodes": "1", + "Emer": false, + "Lights": "3", + "NextSignal": "*", + "RouteName": "depot2", + "Repeater": false + } + ], + "Left": false + }, + "161": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "WR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1.0, + "Double": false, + "Name": "A2", + "ARSOnly": false, + "Angles": "{0 0.1 0}", + "Pos": "[-10785.9707 7490.8462 -11176.1055]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "A2", + "ARSCodes": "1", + "Repeater": false, + "Lights": "2-1", + "Manual": true, + "RouteName": "depot2" + }, + { + "Emer": false, + "NextSignal": "K", + "ARSCodes": "1", + "Repeater": false, + "Lights": "2", + "Manual": true, + "Switches": "", + "RouteName": "e2-ok2" + } + ], + "Left": false + }, + "162": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "WR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1.0, + "Double": false, + "Name": "A1", + "ARSOnly": false, + "Angles": "{0 0.1 0}", + "Pos": "[-10520.4336 7502.3989 -11176.3057]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "A1", + "ARSCodes": "1", + "Repeater": false, + "Manual": true, + "Lights": "2-1", + "Switches": "", + "RouteName": "V1-depot" + }, + { + "Manual": true, + "ARSCodes": "1", + "Emer": false, + "Lights": "2", + "NextSignal": "K", + "RouteName": "Depot1", + "Repeater": false + } + ], + "Left": false + }, + "163": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "236", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[14972.082 2466.1411 -14271.6357]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-24-13", + "NextSignal": "*", + "ARSCodes": "0046", + "Repeater": false + } + ], + "Left": false + }, + "164": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "235", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[15719.793 -7354.7319 -14303.9727]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-3", + "NextSignal": "*", + "ARSCodes": "0046", + "Repeater": false + } + ] + }, + "165": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "231", + "ARSOnly": false, + "Angles": "{3.3806 146.2672 0}", + "Pos": "[15105.7422 -13913.2275 -14416.2275]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-31-3", + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false + } + ] + }, + "166": { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "219A", + "ARSOnly": true, + "Angles": "{0.6135 317.0849 0}", + "Pos": "[-10056.5107 -7975.873 -14586.4863]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "3-31-1-2", + "NextSignal": "*", + "ARSCodes": "0006", + "Repeater": false + } + ], + "NonAutoStop": true + }, + "167": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "MD224", + "ARSOnly": false, + "Angles": "{357.7502 195.1981 0}", + "Pos": "[-9906.3643 -12369.1191 -14569.4863]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-13-3", + "NextSignal": "*", + "ARSCodes": "0046", + "Repeater": false + } + ], + "Left": true + }, + "168": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "236A", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[14970.7939 -6884.8486 -14296.8643]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "3-31-31-1-2", + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "169": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": true, + "Double": false, + "Name": "5A", + "ARSOnly": true, + "Angles": "{0 314.001 0}", + "Pos": "[-6246.9824 -4290.0918 -14586.2061]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "ARSCodes": "004", + "Emer": false, + "Lights": "4-4-42-2", + "NextSignal": "*", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "170": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "MDDA", + "ARSOnly": true, + "Angles": "{0 134.001 0}", + "Pos": "[-4627.4883 -2726.1069 -14586.2061]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "ARSCodes": "114", + "Emer": false, + "Lights": "4-4-42-2", + "NextSignal": "*", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "171": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "MD224A", + "ARSOnly": true, + "Angles": "{0 134.001 0}", + "Pos": "[-4824.3555 -4314.022 -14585.9063]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-2-31", + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "172": { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "27A", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[15719.9863 5329.6567 -14246.9668]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "3-31-31-1-2", + "NextSignal": "*", + "ARSCodes": "08", + "Repeater": false + } + ], + "NonAutoStop": true + }, + "173": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1.0, + "PassOcc": false, + "Name": " 251", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[-14540.793 -9022.8008 -13726.1035]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-31-3", + "NextSignal": "*", + "ARSCodes": "0067", + "Repeater": false + } + ] + }, + "174": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1.0, + "Double": false, + "Name": " 250", + "ARSOnly": false, + "Angles": "{358.6605 187.6416 0}", + "Pos": "[-13608.916 -11351.5205 -13665.3271]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "06", + "Manual": false, + "Lights": "4-42-1-3", + "Repeater": false, + "Switches": "", + "RouteName": "" + } + ], + "Left": true + }, + "175": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "238", + "ARSOnly": false, + "Angles": "{358.6627 7.4815 0}", + "Pos": "[14844.3594 8361.2598 -14236.6025]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-3", + "NextSignal": "*", + "ARSCodes": "00467", + "Repeater": false + } + ], + "Left": true + }, + "176": { + "Approve0": false, + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2.0, + "PassOcc": true, + "Name": "PT249A", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-14540.793 -10892.7676 -13683.7813]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-31-3", + "NextSignal": "*", + "ARSCodes": "00067", + "Repeater": false + } + ], + "NonAutoStop": true + }, + "177": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "66A", + "ARSOnly": true, + "Angles": "{0 90.05 0}", + "Pos": "[199.4134 13980.875 -13214.7637]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "006", + "Manual": false, + "Lights": "4-42-1-13-3", + "Repeater": false, + "Switches": "", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "178": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "PT262", + "ARSOnly": false, + "Angles": "{356.7783 332.0108 0}", + "Pos": "[14128.8252 -10792.9238 -13679.001]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "00667", + "Manual": false, + "Lights": "4-42-42-1-13-3", + "Repeater": false, + "Switches": "", + "RouteName": "" + } + ], + "Left": false + }, + "179": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "WRW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "PR4", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-4962.7949 -14599.2061 -9948.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "K", + "ARSCodes": "1", + "Repeater": false, + "Lights": "2", + "Manual": false, + "Switches": "", + "RouteName": "" + }, + { + "Manual": true, + "RouteName": "PR4-6", + "Emer": false, + "Lights": "2-2-1", + "NextSignal": "*", + "ARSCodes": "1", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": true + }, + "180": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "WRW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "PR6", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[1795.3049 -14599.207 -9948.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "1", + "Manual": true, + "Repeater": false, + "Lights": "2-2-2-1", + "Switches": "", + "RouteName": "PR6-4" + } + ], + "NonAutoStop": false, + "Left": false + }, + "181": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": true, + "Double": false, + "Name": "M2", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[2954.1047 13981.793 -13217.4688]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false, + "Lights": "0", + "RouteName": "", + "Switches": "g2-", + "Manual": false + }, + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "1", + "Manual": false, + "Lights": "1", + "Switches": "g2+", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "182": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "MK2", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[3806.2708 13982.0137 -13217.2061]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "1", + "Repeater": false, + "Lights": "0", + "RouteName": "", + "Switches": "g2-", + "Manual": false + }, + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "1", + "Manual": false, + "Lights": "1", + "Switches": "g2+", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "183": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YRYW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2.0, + "PassOcc": false, + "Name": "PTAA", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-2091.3438 -15217.207 -13670.3057]", + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "114", + "Repeater": false, + "EnRou": false, + "Lights": "2", + "RouteName": "", + "Switches": "", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "184": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "263", + "ARSOnly": false, + "Angles": "{3.4694 130.8995 0}", + "Pos": "[13016.6543 -12645.0068 -13663.71]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "04", + "Manual": false, + "Lights": "4-42-1-3", + "RouteName": "", + "Switches": "", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "185": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "275", + "ARSOnly": false, + "Angles": "{0 280 0}", + "Pos": "[450.5845 15281.4609 -13231.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "0046", + "Manual": false, + "Lights": "4-42-42-1-3", + "RouteName": "", + "Switches": "", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "186": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": true, + "Double": false, + "Name": "273A", + "ARSOnly": true, + "Angles": "{3.8446 245.1531 0}", + "Pos": "[11520.7217 15163.709 -13297.8613]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "000067", + "Manual": false, + "Lights": "4-42-42-42-1-13-3", + "RouteName": "", + "Switches": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "187": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "271", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[7672.7324 15478.207 -13250.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "00046", + "Manual": false, + "Lights": "4-42-42-42-1-13-3", + "RouteName": "", + "Switches": "", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "188": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "M1", + "ARSOnly": false, + "Angles": "{0 269.5 0}", + "Pos": "[3306.1353 15480.7275 -13232.792]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "275", + "ARSCodes": "006", + "Repeater": false, + "Lights": "4", + "RouteName": "", + "Switches": "g1-", + "Manual": false + }, + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "1", + "Manual": false, + "Lights": "1", + "Switches": "g1+", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "189": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "MK1", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[2558.5918 15482.207 -13231.4688]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "1", + "Repeater": false, + "Lights": "4", + "RouteName": "", + "Switches": "g1-", + "Manual": false + }, + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "1", + "Manual": false, + "Lights": "1", + "Switches": "g1+", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "190": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "PTA201", + "ARSOnly": true, + "Angles": "{0.2342 90.5031 0}", + "Pos": "[7118.7021 -14491.5313 -13671.3438]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "004", + "Manual": false, + "Lights": "4-4-24-24-13", + "RouteName": "", + "Switches": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "191": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "281", + "ARSOnly": false, + "Angles": "{0 338.5632 0}", + "Pos": "[-15081.8779 8832.873 -13213.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false, + "Lights": "4-42-1-13-3", + "RouteName": "", + "Switches": "", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "192": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "283", + "ARSOnly": false, + "Angles": "{0 359.499 0}", + "Pos": "[-15628.5742 2021.7808 -13213.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false, + "Lights": "4-42-1-13-3", + "RouteName": "", + "Switches": "", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "193": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "285", + "ARSOnly": false, + "Angles": "{2.703 63.6663 0}", + "Pos": "[-12935.1025 -4558.1089 -13167.5576]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false, + "Lights": "4-42-1-13-3", + "RouteName": "", + "Switches": "", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "194": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "287", + "ARSOnly": false, + "Angles": "{0 99.993 0}", + "Pos": "[-6601.4536 -4184.9219 -13002.1973]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false, + "Lights": "4-42-1-3", + "RouteName": "", + "Switches": "", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "195": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "289", + "ARSOnly": false, + "Angles": "{0 100.048 0}", + "Pos": "[-653.8675 -3133.1851 -12739.2871]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false, + "Lights": "4-42-1-1-3", + "RouteName": "", + "Switches": "", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "196": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "291", + "ARSOnly": false, + "Angles": "{0 100.037 0}", + "Pos": "[5491.0469 -2042.9094 -12626.6055]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false, + "Lights": "4-42-1-3", + "RouteName": "", + "Switches": "", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "197": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Name": "292", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[7278.0767 -10084.7939 -12626.5059]", + "Routes": [ + { + "Repeater": false, + "ARSCodes": "06", + "Emer": false, + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "RouteName": "", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "198": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Name": "290", + "ARSOnly": false, + "Angles": "{3.455 136.3566 0}", + "Pos": "[14892.3027 -8730.5732 -12627.4932]", + "Routes": [ + { + "Repeater": false, + "ARSCodes": "06", + "Emer": false, + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "RouteName": "", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "199": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Name": "288", + "ARSOnly": false, + "Angles": "{3.2214 220.1686 0}", + "Pos": "[14366.6738 -1252.0839 -12627.4932]", + "Routes": [ + { + "Repeater": false, + "ARSCodes": "06", + "Emer": false, + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "RouteName": "", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "200": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Name": "286", + "ARSOnly": false, + "Angles": "{0 280.037 0}", + "Pos": "[7466.8164 -804.4972 -12627.5059]", + "Routes": [ + { + "Repeater": false, + "ARSCodes": "06", + "Emer": false, + "Lights": "4-42-1-3", + "NextSignal": "*", + "RouteName": "", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "201": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Name": "284", + "ARSOnly": false, + "Angles": "{0 280.048 0}", + "Pos": "[49.7752 -2116.0969 -12726.4717]", + "Routes": [ + { + "Repeater": false, + "ARSCodes": "06", + "Emer": false, + "Lights": "4-42-1-1-3", + "NextSignal": "*", + "RouteName": "", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "202": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Name": "282", + "ARSOnly": false, + "Angles": "{359.5 280 0}", + "Pos": "[-9900 -3874.6677 -13124.5078]", + "Routes": [ + { + "Repeater": false, + "ARSCodes": "06", + "Emer": false, + "Lights": "4-42-42-1-13-3", + "NextSignal": "*", + "RouteName": "", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "203": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "280", + "ARSOnly": false, + "Angles": "{0 179.5 0}", + "Pos": "[-15313.0811 1856.9633 -13214.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false, + "EnRou": false, + "Lights": "4-42-42-1-31-3", + "Manual": false, + "RouteName": "", + "Switches": "" + } + ], + "Left": true + }, + "204": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "WY-GRW-M", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "300A", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[2921.6448 -10084.793 -12626.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false, + "EnRou": false, + "Lights": "4-42-2-3", + "Manual": false, + "RouteName": "", + "Switches": "" + }, + { + "Emer": false, + "NextSignal": "NHA2", + "ARSCodes": "0004", + "Manual": false, + "EnRou": true, + "Lights": "4-4-4-1", + "Repeater": false, + "RouteName": "NH2-1", + "Switches": "nh2-,nh1-" + } + ], + "NonAutoStop": true, + "Left": false + }, + "205": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "307", + "ARSOnly": false, + "Angles": "{359.9375 222.5802 0}", + "Pos": "[-13957.3818 -7881.3027 -12737.4375]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": true + }, + "206": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "309", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[-14894.2061 393.0159 -12757.1445]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "ARSCodes": "08", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "207": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": true, + "Double": false, + "Name": "315A", + "ARSOnly": true, + "Angles": "{0.981 180 0}", + "Pos": "[-14893.4697 -4160.8022 -12810.7324]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "208": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "311", + "ARSOnly": false, + "Angles": "{356.8778 154.3625 0}", + "Pos": "[-14043.123 10806.168 -12661.4043]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "ARSCodes": "08", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": true + }, + "209": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "313", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-3947.9556 14572.4063 -12622.6738]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-3", + "NextSignal": "*", + "ARSCodes": "08", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "210": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "317", + "ARSOnly": false, + "Angles": "{357.3599 347.4682 0}", + "Pos": "[14959.4229 9449.1582 -12337.6816]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-1-13-3", + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": true + }, + "211": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": true, + "Double": false, + "Name": "323A", + "ARSOnly": true, + "Angles": "{356.779 62.2451 0}", + "Pos": "[13253.7432 14093.1768 -12337.5039]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "ARSCodes": "007", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "212": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": true, + "Double": false, + "Name": "325A", + "ARSOnly": true, + "Angles": "{0 313.998 0}", + "Pos": "[13142.5332 6754.1943 -12338.5059]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "ARSCodes": "0006", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "213": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "357", + "ARSOnly": false, + "Angles": "{357.394 289.1824 0}", + "Pos": "[10112.8574 -15455.2402 -10857.707]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "ARSCodes": "07", + "Manual": false + } + ], + "Left": false + }, + "214": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "RX344", + "ARSOnly": false, + "Angles": "{0.691 177.4102 0}", + "Pos": "[14889.0586 -8468.751 -10850.4385]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "0007", + "Repeater": false, + "EnRou": false, + "Lights": "4-42-42-42-42-1-3", + "Manual": false, + "RouteName": "RX2-2", + "Switches": "rx4+,rx2+,rx1+,rx3+" + } + ], + "NonAutoStop": false, + "Left": false + }, + "215": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "359", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[280.5163 -15958.793 -10793.2422]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-3", + "NextSignal": "*", + "ARSCodes": "07", + "Manual": false + } + ], + "Left": false + }, + "216": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "361", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-8605.7061 -15958.793 -10490.0645]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "ARSCodes": "07", + "Manual": false + } + ], + "Left": false + }, + "217": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "363", + "ARSOnly": false, + "Angles": "{358.458 191.211 0}", + "Pos": "[-15662.3242 -13184.3604 -10355.5225]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "ARSCodes": "06", + "Manual": false + } + ], + "Left": false + }, + "218": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "314", + "ARSOnly": false, + "Angles": "{0 134 0}", + "Pos": "[8202.1084 578.6959 -12072.4209]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "ARSCodes": "06", + "Emer": false, + "Lights": "4-42-1-3", + "NextSignal": "*", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "219": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "312", + "ARSOnly": false, + "Angles": "{2.8898 145.6923 0}", + "Pos": "[15468.8369 7753.3989 -12362.4844]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "ARSCodes": "06", + "Emer": false, + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "220": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "310", + "ARSOnly": false, + "Angles": "{2.0398 258.8637 0}", + "Pos": "[13321.749 15806.042 -12337.002]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "ARSCodes": "06", + "Emer": false, + "Lights": "4-42-1-13-13-3", + "NextSignal": "*", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "221": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "308", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[5489.812 15918.207 -12423.1973]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "ARSCodes": "08", + "Emer": false, + "Lights": "4-42-1-1-13-3", + "NextSignal": "*", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "222": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "306", + "ARSOnly": false, + "Angles": "{2.1116 283.6383 0}", + "Pos": "[-10363.168 15622.8828 -12632.5908]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "ARSCodes": "08", + "Emer": false, + "Lights": "4-42-42-1-13-3", + "NextSignal": "*", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "223": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "304", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[-15743.207 6492.6543 -12645.1953]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "ARSCodes": "008", + "Emer": false, + "Lights": "4-42-42-1-13-3", + "NextSignal": "*", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "224": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "372", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[-14853.5 932.797 -9946.6055]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "0444", + "Repeater": false, + "EnRou": false, + "Lights": "4-42-42-1-3", + "Manual": false, + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": false, + "Left": false + }, + "225": { + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "370", + "ARSOnly": false, + "Angles": "{0 156.7322 0}", + "Pos": "[-14392.9043 8660.6738 -9983.5059]", + "Routes": [ + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "Switches": "" + } + ], + "NonAutoStop": false, + "Left": true + }, + "226": { + "Approve0": false, + "LensesStr": "YG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2.0, + "PassOcc": false, + "Name": "K", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[-15548.793 -15319.8867 -9948.5059]", + "Routes": [ + { + "Emer": false, + "NextSignal": "K", + "ARSCodes": "0", + "Manual": true, + "RouteName": "", + "Lights": "3-3-31-31-1-2", + "Switches": "", + "Repeater": false + } + ], + "NonAutoStop": true + }, + "227": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "PR383", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[-15549.207 4982.1885 -9976.0576]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-3", + "NextSignal": "*", + "ARSCodes": "004", + "Manual": false + } + ], + "Left": false + }, + "228": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "PR381", + "ARSOnly": false, + "Angles": "{0 340.8793 0}", + "Pos": "[-15258.2988 8210.2773 -9983.1055]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-31-3", + "NextSignal": "*", + "ARSCodes": "004", + "Manual": false + } + ], + "Left": false + }, + "229": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "PR379", + "ARSOnly": false, + "Angles": "{360 306.7325 0}", + "Pos": "[-13408.4336 10826.6172 -9983.1055]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-13-3", + "NextSignal": "*", + "ARSCodes": "004", + "Manual": false + } + ], + "Left": false + }, + "230": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "PR377", + "ARSOnly": false, + "Angles": "{0 296 0}", + "Pos": "[-10656.459 12549.5156 -9983.5059]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-13-3", + "NextSignal": "*", + "ARSCodes": "006", + "Manual": false + } + ], + "Left": false + }, + "231": { + "Approve0": false, + "RouteNumberSetup": "12", + "LensesStr": "WYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "PR387", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[-15549.4063 -5756.0049 -9947.8662]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "PR1P", + "Emer": false, + "Lights": "4-42", + "NextSignal": "K", + "ARSCodes": "24", + "Manual": false + }, + { + "Emer": false, + "NextSignal": "PRA4", + "ARSCodes": "20004", + "Repeater": false, + "EnRou": true, + "Lights": "4-42-42-42-1", + "Manual": true, + "RouteName": "PR1-2", + "Switches": "pr1-,pr2-" + }, + { + "Emer": false, + "NextSignal": "PRA5", + "ARSCodes": "2004", + "Repeater": false, + "EnRou": true, + "Lights": "4-42-42-1", + "Manual": true, + "Switches": "pr1+", + "RouteName": "PR1-1" + } + ], + "Left": false + }, + "232": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YW-RW-M", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": true, + "Double": false, + "Name": "401B", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-15548.75 -4159.4741 -9947.7861]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "ARSCodes": "004", + "Emer": false, + "Lights": "13", + "NextSignal": "*", + "RouteName": "", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "233": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "PR385", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[-15549.2051 1704.9214 -9947.457]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-13", + "NextSignal": "*", + "ARSCodes": "004", + "Manual": false + } + ], + "Left": false + }, + "234": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "350B", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[14898.5 -498.272 -10851.4063]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-31", + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "235": { + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "368", + "ARSOnly": false, + "Angles": "{0 116 0}", + "Pos": "[-8081.6841 13200.1172 -9983.5059]", + "Routes": [ + { + "Manual": false, + "Switches": "", + "ARSCodes": "04", + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "RouteName": "" + } + ], + "NonAutoStop": false, + "Left": false + }, + "236": { + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "366", + "ARSOnly": false, + "Angles": "{356.545 65.3531 0}", + "Pos": "[-1366.2692 15266.8525 -9984.4941]", + "Routes": [ + { + "Manual": false, + "ARSCodes": "06", + "RouteName": "", + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "Switches": "" + } + ], + "NonAutoStop": false, + "Left": true + }, + "237": { + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "364", + "ARSOnly": false, + "Angles": "{356.9892 6.6086 0}", + "Pos": "[2128.3953 9174.9521 -9984.2324]", + "Routes": [ + { + "Manual": false, + "Switches": "", + "ARSCodes": "06", + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "RouteName": "" + } + ], + "NonAutoStop": false, + "Left": true + }, + "238": { + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "362", + "ARSOnly": false, + "Angles": "{358.6621 307.5065 0}", + "Pos": "[-871.3066 2941.4053 -9984.2334]", + "Routes": [ + { + "Manual": false, + "Switches": "", + "ARSCodes": "06", + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "RouteName": "" + } + ], + "NonAutoStop": false, + "Left": true + }, + "239": { + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "360", + "ARSOnly": false, + "Angles": "{0 300.085 0}", + "Pos": "[-7700.7153 -1130.1818 -10077.1689]", + "Routes": [ + { + "Manual": false, + "Switches": "", + "ARSCodes": "06", + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "RouteName": "" + } + ], + "NonAutoStop": false, + "Left": false + }, + "240": { + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "358", + "ARSOnly": false, + "Angles": "{3.4375 324.527 0}", + "Pos": "[-15381.749 -6130.0337 -10304.7871]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "4-42-1-13-13-3", + "NextSignal": "*", + "ARSCodes": "06" + } + ], + "NonAutoStop": false, + "Left": false + }, + "241": { + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "356", + "ARSOnly": false, + "Angles": "{2.3803 22.3575 0}", + "Pos": "[-15694.2949 -14030.8682 -10359.5059]", + "Routes": [ + { + "Manual": false, + "Switches": "", + "ARSCodes": "06", + "Lights": "4-42-1-1-13-3", + "NextSignal": "*", + "RouteName": "" + } + ], + "NonAutoStop": false, + "Left": false + }, + "242": { + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "RX354", + "ARSOnly": false, + "Angles": "{359.9995 90.014 0}", + "Pos": "[-8064.0962 -16223.1055 -10509.2236]", + "Routes": [ + { + "Manual": false, + "ARSCodes": "07", + "RouteName": "", + "Lights": "4-42-42-1-31-13-13-3", + "NextSignal": "*", + "Switches": "" + } + ], + "NonAutoStop": false, + "Left": false + }, + "243": { + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": true, + "Double": false, + "Name": "386A", + "ARSOnly": true, + "Angles": "{359.4643 88.9941 0}", + "Pos": "[-11834.917 -16222.7373 -10403.8008]", + "Routes": [ + { + "Manual": false, + "ARSCodes": "006", + "RouteName": "", + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "244": { + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "RX352", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[3856.3865 -16222.207 -10851.5059]", + "Routes": [ + { + "Manual": false, + "ARSCodes": "007", + "RouteName": "", + "Lights": "4-42-42-1-1-1-31-3", + "NextSignal": "*", + "Switches": "rx4+,rx2+,rx1+,rx3+" + } + ], + "NonAutoStop": false, + "Left": false + }, + "245": { + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "RX348", + "ARSOnly": false, + "Angles": "{3.4694 130.8995 0}", + "Pos": "[12572.0664 -14363.3896 -10843.707]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Switches": "rx4+,rx2+,rx1+,rx3+", + "Lights": "4-42-42-42-42-1-13-3", + "NextSignal": "*", + "ARSCodes": "0007" + } + ], + "NonAutoStop": false, + "Left": false + }, + "246": { + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "RX350", + "ARSOnly": false, + "Angles": "{0.9133 94.9211 0}", + "Pos": "[7835.5415 -16169.6035 -10849.2197]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Switches": "rx4+,rx2+,rx1+,rx3+", + "Lights": "4-42-42-42-42-1-13-3", + "NextSignal": "*", + "ARSCodes": "007" + } + ], + "NonAutoStop": false, + "Left": false + }, + "247": { + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "RX346", + "ARSOnly": false, + "Angles": "{2.7522 160.8064 0}", + "Pos": "[14330.6748 -11667.958 -10845.46]", + "Routes": [ + { + "Manual": false, + "Switches": "rx4+,rx2+,rx1+,rx3+", + "ARSCodes": "07", + "Lights": "4-42-42-42-42-1-13-3", + "NextSignal": "*", + "RouteName": "" + } + ], + "NonAutoStop": false, + "Left": false + }, + "248": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "342", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[14899.207 -5224.4009 -10851.5059]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-42-31", + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false + } + ], + "Left": false + }, + "249": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "350A", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[14898.5 -3138.6462 -10851.4063]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-31", + "NextSignal": "*", + "ARSCodes": "0006", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "250": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "RXDA", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[14898.5 -3192.8911 -10851.4063]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "ARSCodes": "114", + "Emer": false, + "Lights": "4-42-31", + "NextSignal": "*", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "251": { + "Approve0": false, + "RouteNumberSetup": "12", + "LensesStr": "WYR-YW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "RXD", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[14899.207 -5251.5469 -10851.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "K", + "ARSCodes": "2", + "Repeater": false, + "EnRou": false, + "Lights": "3", + "Manual": false, + "RouteName": "", + "Switches": "" + }, + { + "Emer": false, + "NextSignal": "RXA3", + "ARSCodes": "2224", + "Manual": true, + "EnRou": false, + "Lights": "3-3-3-24-2b4", + "Switches": "rx2-,rx3-,rx1+,rx4+", + "RouteName": "RXD-1", + "Repeater": false + }, + { + "Emer": false, + "NextSignal": "RXA4", + "ARSCodes": "224", + "Manual": true, + "EnRou": true, + "Lights": "3-3-1", + "Repeater": false, + "Switches": "rx2+,rx3+,rx1+,rx4+", + "RouteName": "RXD-2" + } + ], + "NonAutoStop": false, + "Left": true + }, + "252": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "365", + "ARSOnly": false, + "Angles": "{356.6455 136.6073 0}", + "Pos": "[-14700.7959 -6189.936 -10304.7891]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "ARSCodes": "06", + "Manual": false + } + ], + "Left": true + }, + "253": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "367", + "ARSOnly": false, + "Angles": "{0 120.075 0}", + "Pos": "[-8802.9639 -2484.6487 -10151.6758]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-3", + "NextSignal": "*", + "ARSCodes": "06", + "Manual": false + } + ], + "Left": false + }, + "254": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "369", + "ARSOnly": false, + "Angles": "{0 120.085 0}", + "Pos": "[-3069.0325 836.0653 -9984.2959]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "ARSCodes": "06", + "Manual": false + } + ], + "Left": false + }, + "255": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "375", + "ARSOnly": false, + "Angles": "{0 296 0}", + "Pos": "[-4594.3188 15507.1426 -9983.5059]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-3", + "NextSignal": "*", + "ARSCodes": "06", + "Manual": false + } + ], + "Left": false + }, + "256": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "373", + "ARSOnly": false, + "Angles": "{0.6912 207.4106 0}", + "Pos": "[2158.1348 12511.9219 -9984.2373]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-1-13-3", + "NextSignal": "*", + "ARSCodes": "06", + "Manual": false + } + ], + "Left": false + }, + "257": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "371", + "ARSOnly": false, + "Angles": "{3.3041 150.4229 0}", + "Pos": "[2582.1694 5446.3672 -9984.2344]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-13-13-3", + "NextSignal": "*", + "ARSCodes": "06", + "Manual": false + } + ], + "Left": false + }, + "258": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "WR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "PRE", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[-15548.793 -8415.4902 -9948.5762]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "ARSCodes": "", + "Emer": false, + "Lights": "2", + "NextSignal": "", + "RouteName": "", + "Manual": false + }, + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "224", + "Manual": true, + "Lights": "2-2-1", + "Repeater": false, + "Switches": "pr1+", + "RouteName": "PRE-1" + } + ], + "NonAutoStop": false, + "Left": false + }, + "259": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": true, + "Double": false, + "Name": "PRPREOP", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[-15548.75 359.6071 -9947.3457]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "0", + "Manual": false, + "EnRou": false, + "Lights": "2", + "Repeater": false, + "Switches": "", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "260": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RR", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "PRA2", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[-15548.75 -6426.2075 -9948.5762]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false, + "EnRou": false, + "Lights": "2", + "Manual": false, + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "261": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RR", + "RouteNumber": "2", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "PRA1", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-14851.793 -10574.96 -9948.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "004", + "Repeater": false, + "EnRou": false, + "Lights": "2", + "Manual": false, + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "262": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "PRA4", + "ARSOnly": true, + "Angles": "{0 12.5 0}", + "Pos": "[-15443.2891 -7409.0356 -9948.2158]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "04", + "Manual": false, + "EnRou": false, + "Lights": "2", + "Repeater": false, + "Switches": "", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": true + }, + "263": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "PRR4", + "ARSOnly": true, + "Angles": "{0 12.3017 0}", + "Pos": "[-14940.3203 -9677.6406 -9948.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "PRA1", + "ARSCodes": "04", + "Repeater": true, + "EnRou": false, + "Lights": "2", + "Manual": false, + "RouteName": "", + "Switches": "pr2-" + } + ], + "NonAutoStop": true, + "Left": false + }, + "264": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "PRA3", + "ARSOnly": true, + "Angles": "{0 192.5 0}", + "Pos": "[-14952.0117 -9625.2012 -9948.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false, + "EnRou": false, + "Lights": "2", + "Manual": false, + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": true + }, + "265": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "PRR3", + "ARSOnly": true, + "Angles": "{0 192.5 0}", + "Pos": "[-15454.9902 -7356.2578 -9948.2158]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "PRA2", + "ARSCodes": "04", + "Repeater": true, + "EnRou": false, + "Lights": "2", + "Manual": false, + "RouteName": "", + "Switches": "pr1-" + } + ], + "NonAutoStop": true, + "Left": false + }, + "266": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "WRW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "PRDA", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-14853.5 -3252.8101 -9946.3955]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "1", + "Repeater": false, + "EnRou": false, + "Lights": "*", + "Manual": false, + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "267": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "WRW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": true, + "Double": false, + "Name": "PR382A", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[-14853.5 -937.0219 -9946.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false, + "EnRou": false, + "Lights": "*", + "Manual": false, + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": true + }, + "268": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "PRR5", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-15548.793 -7838.043 -9948.5762]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "PRA4", + "ARSCodes": "04", + "Repeater": true, + "EnRou": false, + "Lights": "2", + "Manual": false, + "RouteName": "", + "Switches": "pr1-" + }, + { + "Repeater": true, + "Switches": "pr1+", + "Emer": false, + "Manual": false, + "NextSignal": "*", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "269": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "PRA1ST", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-15548.793 -13484.249 -9948.5059]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "Switches": "", + "Emer": false, + "RouteName": "", + "NextSignal": "K", + "ARSCodes": "04", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "270": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RR", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "PRA5", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-15548.793 -7882.3066 -9948.5762]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "004", + "Manual": true, + "Repeater": false, + "Switches": "", + "RouteName": "PR1-1" + } + ], + "NonAutoStop": true, + "Left": false + }, + "271": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "302", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[-15743.207 10.9034 -12758.3955]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "ARSCodes": "008", + "Emer": false, + "Lights": "4-42-42-1-13-31-3", + "NextSignal": "*", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "272": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "298", + "ARSOnly": false, + "Angles": "{3.177 77.4473 0}", + "Pos": "[-12419.2402 -10029.7715 -12686.4863]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "ARSCodes": "006", + "Emer": false, + "Lights": "4-42-42-42-1-3", + "NextSignal": "*", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "273": { + "Approve0": false, + "RouteNumberSetup": "13", + "LensesStr": "YYY-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Name": "PT261M", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[3301.7461 -15217.207 -13671.0391]", + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false, + "Lights": "4-42-42-13-1b3", + "Manual": false, + "RouteName": "PT1-1", + "Switches": "pt3-,pt5-,g1-" + }, + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "0", + "Repeater": false, + "Lights": "4", + "RouteName": "", + "Switches": "g1+", + "Manual": false + } + ] + }, + "274": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "223", + "ARSOnly": false, + "Angles": "{3.1023 27.7455 0}", + "Pos": "[-10850.5977 -14306.0449 -14586.4961]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-3", + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false + } + ] + }, + "275": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "225", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-3876.5972 -15996.793 -14586.5059]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-3", + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false + } + ] + }, + "276": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "227", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[3331.0532 -15996.793 -14586.5059]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-1-3", + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false + } + ] + }, + "277": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "229", + "ARSOnly": false, + "Angles": "{359.6 90 0}", + "Pos": "[9523.7471 -15996.7266 -14534.4512]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-13-3", + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false + } + ] + }, + "278": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": true, + "Double": false, + "Name": "373A", + "ARSOnly": true, + "Angles": "{1 270 0}", + "Pos": "[-11752.9951 -15959.1846 -10400.5664]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "ARSCodes": "007", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "279": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "232", + "ARSOnly": false, + "Angles": "{358.7656 316.9226 0}", + "Pos": "[13803.7715 -13595.8389 -14415.2432]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-1-1-3", + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": true + }, + "280": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "327", + "ARSOnly": false, + "Angles": "{0 314 0}", + "Pos": "[-2337.6833 -8196.832 -12014.7061]", + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false, + "Lights": "4-42-42-42-13", + "RouteName": "", + "Switches": "", + "Manual": false + } + ], + "Left": false + }, + "281": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "273", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[3721.9119 15478.207 -13236.0127]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "00046", + "Manual": false, + "Lights": "4-4-42-42-1-13-3", + "RouteName": "", + "Switches": "", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "282": { + "Approve0": false, + "RouteNumberSetup": "12", + "LensesStr": "WRW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "PR376", + "ARSOnly": false, + "Angles": "{359.3852 267.492 0}", + "Pos": "[-11903.3359 -14593.9316 -9948.8389]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "ARSCodes": "2", + "Emer": false, + "Lights": "2", + "NextSignal": "K", + "RouteName": "", + "Manual": false + }, + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "224", + "Repeater": false, + "EnRou": true, + "Lights": "2-2-1", + "Switches": "pr2+", + "RouteName": "pr2-2", + "Manual": true + }, + { + "Emer": false, + "NextSignal": "PRA3", + "ARSCodes": "2224", + "Manual": true, + "EnRou": true, + "Lights": "2-2-2-1", + "Repeater": false, + "Switches": "pr1-,pr2-", + "RouteName": "pr2-1" + } + ], + "NonAutoStop": false, + "Left": false + }, + "283": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "WRW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0.0, + "Double": false, + "Name": "PR6A", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-5026.4258 -14599.2061 -9948.5059]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "2-2-1", + "NextSignal": "*", + "ARSCodes": "1", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "284": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "WYY-GRW-M", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "363A", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[14635 -2169.7961 -10851.7061]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "53", + "NextSignal": "*", + "ARSCodes": "0006", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "285": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YW-RW-M", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "401A", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-15548.75 -2791.0518 -9947.6758]", + "DoubleL": false, + "Routes": [ + { + "Repeater": false, + "ARSCodes": "004", + "Emer": false, + "Lights": "13", + "NextSignal": "*", + "RouteName": "", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "286": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "302A", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[-3288.8972 -10085 -12625.4063]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "ARSCodes": "0006", + "Emer": false, + "Lights": "4-42-2-31", + "NextSignal": "*", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "287": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "302B", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[-1630.2249 -10085 -12625.5059]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "ARSCodes": "006", + "Emer": false, + "Lights": "4-42-2-31", + "NextSignal": "*", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "288": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Name": "281A", + "ARSOnly": true, + "Angles": "{0 280.0003 0}", + "Pos": "[-6375.001 14077.7129 -13213.7061]", + "Routes": [ + { + "Repeater": false, + "ARSCodes": "006", + "Emer": false, + "Lights": "4-42-2-3", + "NextSignal": "*", + "RouteName": "", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "289": { + "Approve0": false, + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "NH297", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[9617.6289 -9388.9863 -12626.5059]", + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false, + "EnRou": false, + "Lights": "4-42-42-1-13-3", + "RouteName": "NH1-1", + "Switches": "nh1+", + "Manual": false + }, + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "2", + "Manual": true, + "EnRou": false, + "Lights": "4", + "Repeater": false, + "Switches": "nh1-", + "RouteName": "" + } + ], + "Left": true + }, + "290": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": " OP ", + "ARSOnly": false, + "Angles": "{2.9633 167.1931 0}", + "Pos": "[15013.6914 -6652.1289 -12626.4932]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "2", + "Repeater": false, + "Lights": "1", + "Manual": false, + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": false, + "Left": false + }, + "291": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": " DOP1", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[6112.5137 -9388.9863 -12626.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": " DOP1", + "ARSCodes": "0", + "Repeater": false, + "Lights": "1b", + "Manual": false, + "RouteName": "", + "Switches": "nh1-" + }, + { + "Emer": false, + "NextSignal": " DOP1", + "ARSCodes": "10", + "Manual": false, + "Lights": "1b-3", + "Repeater": false, + "Switches": "nh1+", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": true + }, + "292": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "300", + "ARSOnly": false, + "Angles": "{2.2352 10.1328 0}", + "Pos": "[-15658.4277 -6711.0225 -12779.8291]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "ARSCodes": "007", + "Emer": false, + "Lights": "4-42-42-1-1-13-3", + "NextSignal": "*", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "293": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": " DOP2", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[4540.6904 -10084.7949 -12626.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": " DOP2", + "ARSCodes": "0", + "Repeater": false, + "Lights": "1b", + "Manual": false, + "RouteName": "", + "Switches": "nh1-" + }, + { + "Emer": false, + "NextSignal": " DOP2", + "ARSCodes": "10", + "Manual": false, + "Lights": "1b-3", + "Repeater": false, + "Switches": "nh1+", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "294": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "283A", + "ARSOnly": true, + "Angles": "{0 304.0969 0}", + "Pos": "[-12290.2959 12441.0762 -13213.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false, + "Lights": "4-42-1-13-3", + "RouteName": "", + "Switches": "", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "295": { + "Approve0": false, + "LensesStr": "YY-GR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1.0, + "PassOcc": false, + "Name": "PT257", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-7063.7363 -15216.793 -13676.6475]", + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "0046", + "Repeater": false, + "Lights": "4-42-42-1-3", + "RouteName": "PT1-1", + "Switches": "pt1+", + "Manual": false + } + ] + }, + "296": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "230", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[6329.9897 -14978.793 -14560.1973]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-42-1-1-3", + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "297": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "234A", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-527.3532 -14978.9863 -14569.5059]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "3-31-31-1-2", + "NextSignal": "*", + "ARSCodes": "0006", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "298": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "MD230A", + "ARSOnly": true, + "Angles": "{356.4985 223.3393 0}", + "Pos": "[-9141.2402 -13857.252 -14569.5059]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-42-1-31-3", + "NextSignal": "*", + "ARSCodes": "0006", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "299": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "OK6", + "ARSOnly": false, + "Angles": "{358.4052 0 0}", + "Pos": "[14677.5186 9469.915 -11540.6064]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "ARSCodes": "0", + "Emer": false, + "Lights": "3", + "NextSignal": "K", + "RouteName": "", + "Repeater": false + }, + { + "Manual": true, + "ARSCodes": "0", + "Emer": false, + "Lights": "3", + "NextSignal": "*", + "RouteName": "depot2", + "Repeater": false + }, + { + "Manual": true, + "ARSCodes": "04", + "Emer": false, + "Lights": "3-31-1-2", + "NextSignal": "*", + "RouteName": "E2-OK2", + "Repeater": false + } + ], + "Left": true + }, + "300": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "OK10", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-4159.8003 16089.207 -11194.7402]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "ARSCodes": "0", + "Emer": false, + "Lights": "3", + "NextSignal": "K", + "RouteName": "", + "Repeater": false + }, + { + "Manual": true, + "ARSCodes": "0", + "Emer": false, + "Lights": "3", + "NextSignal": "*", + "RouteName": "depot2", + "Repeater": false + }, + { + "Manual": true, + "ARSCodes": "04", + "Emer": false, + "Lights": "3-31-1-2", + "NextSignal": "*", + "RouteName": "E2-OK2", + "Repeater": false + } + ], + "Left": false + }, + "301": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "WR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2.0, + "PassOcc": true, + "Double": false, + "Name": "A2A", + "ARSOnly": true, + "Angles": "{0 0.0922 0}", + "Pos": "[-10793.3359 11459.1152 -11176.1055]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "04", + "Manual": true, + "Repeater": false, + "Lights": "2", + "Switches": "", + "RouteName": "depot2" + }, + { + "Manual": true, + "Switches": "", + "Emer": false, + "ARSCodes": "0", + "NextSignal": "*", + "RouteName": "E2-OK2", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "302": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "WR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2.0, + "PassOcc": true, + "Double": false, + "Name": "A1A", + "ARSOnly": true, + "Angles": "{1.4435 355.4161 0}", + "Pos": "[-10506.8906 11674.8916 -11176.4834]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "04", + "Manual": true, + "Repeater": false, + "Lights": "2", + "Switches": "", + "RouteName": "v1-depot" + }, + { + "Manual": true, + "RouteName": "depot1", + "Emer": false, + "Repeater": false, + "NextSignal": "*", + "ARSCodes": "0" + } + ], + "NonAutoStop": true, + "Left": false + }, + "303": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "OK9", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-4052.0767 15569.207 -11193.4844]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "depot1", + "Emer": false, + "Lights": "3-31-1-2", + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false + }, + { + "Repeater": false, + "ARSCodes": "0", + "Emer": false, + "Lights": "3", + "NextSignal": "*", + "RouteName": "V1-Depot", + "Manual": true + } + ], + "Left": false + }, + "304": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "OK7", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[7103.188 15569.207 -11491.4648]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "ARSCodes": "04", + "Emer": false, + "Lights": "3-31-1-2", + "NextSignal": "*", + "RouteName": "depot1", + "Repeater": false + }, + { + "Repeater": false, + "RouteName": "V1-Depot", + "Emer": false, + "Lights": "3", + "NextSignal": "*", + "ARSCodes": "0", + "Manual": true + } + ], + "Left": false + }, + "305": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "OK5", + "ARSOnly": false, + "Angles": "{359.2047 0 0}", + "Pos": "[13757.958 9328.2939 -11583.4688]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "depot1", + "Emer": false, + "Lights": "3-31-1-1-2", + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false + }, + { + "Repeater": false, + "ARSCodes": "0", + "Emer": false, + "Lights": "3", + "NextSignal": "*", + "RouteName": "V1-Depot", + "Manual": true + } + ], + "Left": true + }, + "306": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Name": "241", + "ARSOnly": false, + "Angles": "{2.7532 201.2343 0}", + "Pos": "[15114.3721 11630.0107 -14249.79]", + "Routes": [ + { + "Repeater": false, + "ARSCodes": "08", + "Emer": false, + "Lights": "4-42-1-3", + "NextSignal": "*", + "RouteName": "", + "Manual": false + } + ] + }, + "307": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Name": "243", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[5879.4673 15972.793 -14249.3525]", + "Routes": [ + { + "Repeater": false, + "ARSCodes": "08", + "Emer": false, + "Lights": "4-42-1-3", + "NextSignal": "*", + "RouteName": "", + "Manual": false + } + ] + }, + "308": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Name": "245", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-4629.187 15972.793 -14076.8135]", + "Routes": [ + { + "Repeater": false, + "ARSCodes": "08", + "Emer": false, + "Lights": "4-42-1-3", + "NextSignal": "*", + "RouteName": "", + "Manual": false + } + ] + }, + "309": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Name": "247", + "ARSOnly": false, + "Angles": "{2.6067 342.7583 0}", + "Pos": "[-14079.6133 11206.3096 -14070.9922]", + "Routes": [ + { + "Repeater": false, + "ARSCodes": "08", + "Emer": false, + "Lights": "4-42-1-1-3", + "NextSignal": "*", + "RouteName": "", + "Manual": false + } + ] + }, + "310": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Name": "249", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[-14540.793 514.0874 -14066.1904]", + "Routes": [ + { + "Repeater": false, + "ARSCodes": "08", + "Emer": false, + "Lights": "4-42-42-1-13-3", + "NextSignal": "*", + "RouteName": "", + "Manual": false + } + ] + }, + "311": { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": true, + "Name": "251A", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-14540.793 -6046.0469 -13847.4619]", + "Routes": [ + { + "Repeater": false, + "ARSCodes": "00078", + "Emer": false, + "Lights": "4-42-1-13-3", + "NextSignal": "*", + "RouteName": "", + "Manual": false + } + ], + "NonAutoStop": true + }, + "312": { + "Approve0": false, + "LensesStr": "YY-GR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1.0, + "PassOcc": false, + "Name": "PT255", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-10340.0059 -15216.793 -13679.5059]", + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "0046", + "Repeater": false, + "Lights": "4-42-42-1-31-3", + "RouteName": "", + "Switches": "", + "Manual": false + } + ] + }, + "313": { + "Approve0": false, + "LensesStr": "YY-GR-W", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1.0, + "PassOcc": false, + "Name": "PT259", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-3785.9941 -15217.4023 -13670.1973]", + "Routes": [ + { + "Manual": false, + "ARSCodes": "0046", + "Emer": false, + "Lights": "4-42-42-31", + "NextSignal": "*", + "RouteName": "", + "Repeater": false + } + ] + }, + "314": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "240", + "ARSOnly": false, + "Angles": "{356.6251 57.0494 0}", + "Pos": "[12010.9941 13341.1123 -14236.5928]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "00668", + "Manual": false, + "Lights": "4-42-42-1-31-3", + "Repeater": false, + "Switches": "", + "RouteName": "" + } + ], + "Left": true + }, + "315": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "248", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[-13671.7939 -3203.8032 -13925.9404]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "08", + "Manual": false, + "Lights": "4-42-1-1-3", + "Repeater": false, + "Switches": "", + "RouteName": "" + } + ], + "Left": true + }, + "316": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "244", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-3173.5796 14645.4863 -14088.7412]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "008", + "Manual": false, + "Lights": "4-42-42-42-1-13-3", + "Repeater": false, + "Switches": "", + "RouteName": "" + } + ], + "Left": true + }, + "317": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "242", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[6359.5747 14645.3926 -14236.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "00078", + "Manual": false, + "Lights": "4-42-42-42-1-31-3", + "Repeater": false, + "Switches": "", + "RouteName": "" + } + ], + "Left": false + }, + "318": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "242A", + "ARSOnly": true, + "Angles": "{357.8878 78.0195 0}", + "Pos": "[9316.5459 14410.9229 -14236.5898]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "000778", + "Manual": false, + "Lights": "4-42-42-1-31-3", + "Repeater": false, + "Switches": "", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "319": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "246", + "ARSOnly": false, + "Angles": "{357.2475 160.8073 0}", + "Pos": "[-13157.8447 10042.5459 -14057.5889]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "008", + "Manual": false, + "Lights": "4-42-42-1-1-3", + "Repeater": false, + "Switches": "", + "RouteName": "" + } + ], + "Left": true + }, + "320": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": true, + "Double": false, + "Name": "MD222A", + "ARSOnly": true, + "Angles": "{0 134.001 0}", + "Pos": "[-3805.022 -3329.6274 -14585.9063]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-2-31", + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "321": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGRW", + "RouteNumber": "2", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2.0, + "PassOcc": false, + "Double": false, + "Name": "258A", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-206.3812 -14490.793 -13671.4063]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "0004", + "Manual": false, + "EnRou": false, + "Lights": "3-31-1-2", + "Switches": "", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "322": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "PT260", + "ARSOnly": false, + "Angles": "{358.0724 281.9694 0}", + "Pos": "[9615.3623 -13981.415 -13676.2725]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "0046", + "Manual": false, + "Lights": "4-42-42-1-13", + "Repeater": false, + "Switches": "", + "RouteName": "" + } + ], + "Left": false + }, + "323": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "256", + "ARSOnly": false, + "Angles": "{0 269.9 0}", + "Pos": "[3094.8547 -14491.3105 -13671.2061]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "004", + "Manual": false, + "Lights": "4-42-42-13", + "Repeater": false, + "Switches": "", + "RouteName": "" + } + ], + "Left": true + }, + "324": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YRY-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1.0, + "Name": "PTA", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-3820.9941 -15217.4023 -13670.1973]", + "Routes": [ + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "2", + "Manual": false, + "EnRou": false, + "Lights": "2", + "Switches": "", + "RouteName": "", + "Repeater": false + }, + { + "Emer": false, + "NextSignal": "PTA1", + "ARSCodes": "22224", + "Repeater": false, + "Lights": "2-2-2-2-13-1b3", + "Manual": true, + "RouteName": "PTA-2", + "Switches": "pt1-,pt2-" + } + ], + "Left": false + }, + "325": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "264", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[15093.207 -282.7671 -13576.7646]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "007", + "Manual": false, + "Lights": "4-42-42-1-13-3", + "Repeater": false, + "Switches": "", + "RouteName": "" + } + ], + "Left": false + }, + "326": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "266", + "ARSOnly": false, + "Angles": "{359.3792 0.6503 0}", + "Pos": "[15092.1299 8114.4414 -13430.0684]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "06", + "Manual": false, + "Lights": "4-42-1-1-3", + "Repeater": false, + "Switches": "", + "RouteName": "" + } + ], + "Left": true + }, + "327": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "265", + "ARSOnly": false, + "Angles": "{359.9266 171.5659 0}", + "Pos": "[15441.2197 -3998.6543 -13652.3447]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "07", + "Manual": false, + "Lights": "4-42-1-3", + "RouteName": "", + "Switches": "", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "328": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "267", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[15540.3066 4824.5005 -13489.9121]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "07", + "Manual": false, + "Lights": "4-42-1-1-1-13-3", + "RouteName": "", + "Switches": "", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "329": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "269M", + "ARSOnly": false, + "Angles": "{1.5163 223.0325 0}", + "Pos": "[14617.7354 12477.1338 -13368.7754]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "07", + "Manual": false, + "Lights": "4-42-42-42-1-13-3", + "RouteName": "", + "Switches": "g1-", + "Repeater": false + }, + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "0", + "Repeater": false, + "Lights": "4", + "Manual": false, + "RouteName": "", + "Switches": "g1+" + } + ], + "NonAutoStop": false, + "Left": false + }, + "330": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": "268", + "ARSOnly": false, + "Angles": "{359.4979 90 0}", + "Pos": "[8430.9346 13982.1592 -13266.8467]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "06", + "Manual": false, + "Lights": "4-42-1-13-13-3", + "Repeater": false, + "Switches": "", + "RouteName": "" + } + ], + "Left": false + }, + "331": { + "Approve0": false, + "LensesStr": "RYG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2.0, + "PassOcc": true, + "Name": "261B", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[1069.2045 -15217.207 -13670.4063]", + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-2-3", + "NextSignal": "*", + "ARSCodes": "006", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "332": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "WYY-GR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1.0, + "Double": false, + "Name": "PT252", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-6507.189 -14490.793 -13671.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "0006", + "Repeater": false, + "Lights": "5-53-53-2-24-4", + "RouteName": "PT2-2", + "Switches": "pt2+", + "Manual": false + }, + { + "Emer": false, + "NextSignal": "K", + "ARSCodes": "0", + "Manual": false, + "Lights": "4", + "RouteName": "", + "Switches": "pt2-", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "333": { + "Approve0": false, + "LensesStr": "YYY-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "PT258", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[6385.5747 -14227.793 -13671.5059]", + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "004", + "Repeater": false, + "Lights": "4-42-42-13-1b3", + "RouteName": "", + "Switches": "pt4-,pt6-", + "Manual": false + }, + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "0", + "Repeater": false, + "Lights": "4", + "RouteName": "", + "Switches": "pt6+", + "Manual": false + } + ], + "Left": false + }, + "334": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "315", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[7084.6411 14572.2129 -12439.0811]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "4-42-1-1-13-13-3", + "NextSignal": "*", + "ARSCodes": "08", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "335": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGY-RW-M", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": " OPA", + "ARSOnly": true, + "Angles": "{3.4554 136.3533 0}", + "Pos": "[14245.2822 -8085.9688 -12626.5039]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "0", + "Repeater": false, + "Lights": "", + "Manual": false, + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "336": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": " OP ", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[-15549.2051 3509.3396 -9963.2041]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "2", + "Manual": false, + "EnRou": false, + "Lights": "1", + "Repeater": false, + "Switches": "", + "RouteName": "" + } + ], + "NonAutoStop": false, + "Left": true + }, + "337": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Double": false, + "Name": " OP ", + "ARSOnly": false, + "Angles": "{359.9853 313.0202 0}", + "Pos": "[-8003.75 -15069.583 -12014.8955]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": " OP ", + "ARSCodes": "2", + "Repeater": false, + "Lights": "1", + "Manual": false, + "RouteName": "", + "Switches": "" + } + ], + "Left": true + }, + "338": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "WRW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "PRD", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[-14853.5 -6233.3115 -9946.2656]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "1", + "Manual": false, + "EnRou": false, + "Lights": "2", + "Repeater": false, + "Switches": "", + "RouteName": "" + }, + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "224", + "Repeater": false, + "Lights": "2-2-1", + "Manual": true, + "Switches": "pr1+", + "RouteName": "PRD-2" + } + ], + "NonAutoStop": true, + "Left": true + }, + "339": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YY-GR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "374", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[-14853.5 -6210.252 -9946.2656]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false, + "EnRou": false, + "Lights": "4-42-13", + "Manual": false, + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": false, + "Left": false + }, + "340": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "PRR6", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[-14853.5 -6291.5532 -9946.2656]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "PRA3", + "ARSCodes": "04", + "Manual": false, + "EnRou": false, + "Lights": "2", + "Repeater": true, + "Switches": "pr2-", + "RouteName": "" + }, + { + "Repeater": true, + "RouteName": "", + "Emer": false, + "Manual": false, + "NextSignal": "*", + "Switches": "pr2+" + } + ], + "NonAutoStop": true, + "Left": false + }, + "341": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": false, + "Double": false, + "Name": "OP2", + "ARSOnly": false, + "Angles": "{359.0868 274.9132 0}", + "Pos": "[7809.4277 -16171.8516 -10849.2627]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "1", + "NextSignal": "", + "ARSCodes": "2", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": true + }, + "342": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": true, + "Double": false, + "Name": "RXPEROP2", + "ARSOnly": true, + "Angles": "{356.5306 310.8987 0}", + "Pos": "[12525.123 -14404.0518 -10843.7188]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "2", + "NextSignal": "*", + "ARSCodes": "1", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "343": { + "Approve0": false, + "LensesStr": "WYG-RW-M", + "RouteNumber": "4", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "MDA12", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[5434.8135 6108.7861 -14585.5059]", + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Manual": false, + "NextSignal": "K", + "ARSCodes": "04" + } + ], + "NonAutoStop": true, + "Left": false + }, + "344": { + "Approve0": false, + "LensesStr": "WYG-RW-M", + "RouteNumber": "4", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "MDA11", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[5246.1963 6293.6436 -14585.5059]", + "Routes": [ + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Manual": false, + "NextSignal": "K", + "ARSCodes": "04" + } + ], + "NonAutoStop": true, + "Left": true + }, + "345": { + "Approve0": false, + "LensesStr": "WYG-RW-M", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "MDR21", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[-1064.8914 715.7131 -14585.6055]", + "Routes": [ + { + "Emer": false, + "NextSignal": "MDA21", + "ARSCodes": "04", + "Manual": false, + "Lights": "2q", + "Switches": "md1-", + "RouteName": "", + "Repeater": true + }, + { + "Repeater": true, + "RouteName": "", + "Emer": false, + "ARSCodes": "04", + "NextSignal": "MDA23", + "Switches": "md1+", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "346": { + "Approve0": false, + "LensesStr": "WYG-RW-M", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "Name": "MDR20", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[-425.3638 -67.9079 -14585.6055]", + "Routes": [ + { + "Emer": false, + "NextSignal": "MDA20", + "ARSCodes": "04", + "Manual": false, + "Lights": "2q", + "Switches": "md2-", + "RouteName": "", + "Repeater": true + }, + { + "Manual": false, + "Switches": "md2+", + "Emer": false, + "Repeater": true, + "NextSignal": "*", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "347": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0.0, + "PassOcc": true, + "Double": false, + "Name": "PRA2ST", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[-8093.2441 -14599.2051 -9948.5059]", + "DoubleL": false, + "Routes": [ + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false, + "EnRou": false, + "Lights": "2", + "Manual": false, + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": true + }, + "348": { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "WRW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0.0, + "Double": false, + "Name": "PR4A", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[1858.0155 -14599.207 -9948.5059]", + "DoubleL": false, + "Routes": [ + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Lights": "2-2-1", + "NextSignal": "K", + "ARSCodes": "1", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "349": { + "Angles": "{0 134.9205 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "md2", + "Pos": "[-1588.8408 -1336.515 -14592.0684]" + }, + "350": { + "Angles": "{0 313.7805 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "md1", + "Pos": "[-2512.262 -546.3101 -14592.0684]" + }, + "351": { + "Angles": "{0 359.9197 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "rx1", + "Pos": "[14529.9883 -5900.6719 -10858.1689]" + }, + "352": { + "Angles": "{0 359.9196 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "rx3", + "Pos": "[14527.3066 -7861.0928 -10858.3691]" + }, + "353": { + "Angles": "{0 180.7596 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "rx4", + "Pos": "[15008.832 -7870.3115 -10858.3691]" + }, + "354": { + "Angles": "{0 180.2396 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "rx2", + "Pos": "[15007.2383 -5922.7476 -10858.1689]" + }, + "355": { + "Angles": "{0 90.1799 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "nh2", + "Pos": "[1659.0724 -10165.4043 -12735.9688]" + }, + "356": { + "Angles": "{0 269.2599 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "nh1", + "Pos": "[9332.6807 -9299.0732 -12735.9688]" + }, + "357": { + "Angles": "{0 270.0408 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "pt2", + "Pos": "[-8503.8086 -14410.9453 -13682.9941]" + }, + "358": { + "Angles": "{0 268.6408 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "pt1", + "Pos": "[-4364.9785 -15128.4473 -13681.4902]" + }, + "359": { + "Angles": "{0 132.881 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "ok2", + "Pos": "[-1173.916 -8600.4395 -12021.2686]" + }, + "360": { + "Angles": "{0 313.941 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "ok1", + "Pos": "[-1969.3583 -7712.7603 -12021.2686]" + }, + "361": { + "Angles": "{0 135.7001 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "md4", + "Pos": "[274.7415 980.3679 -14591.9688]" + }, + "362": { + "Angles": "{0 136.3601 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "md6", + "Pos": "[1673.0748 2336.6943 -14591.9688]" + }, + "363": { + "Angles": "{0 315.7401 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "md5", + "Pos": "[1349.8899 2684.0557 -14591.9688]" + }, + "364": { + "Angles": "{0 313.98 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "md3", + "Pos": "[-52.3022 1321.4888 -14591.9688]" + }, + "365": { + "Angles": "{0 135.3399 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "ok6", + "Pos": "[2178.2158 -4863.2017 -12021.1689]" + }, + "366": { + "Angles": "{0 134.0199 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "ok4", + "Pos": "[785.0717 -6215.1187 -12021.1689]" + }, + "367": { + "Angles": "{0 315.6299 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "ok3", + "Pos": "[451.4044 -5869.4106 -12021.1689]" + }, + "368": { + "Angles": "{0 313.3199 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "ok5", + "Pos": "[1873.9607 -4503.8154 -12021.1689]" + }, + "369": { + "Angles": "{0 270.8 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "pt4", + "Pos": "[4018.4458 -14563.6416 -13671.6699]" + }, + "370": { + "Angles": "{0 270.7125 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "pt6", + "Pos": "[5933.417 -14125.3447 -13676.9688]" + }, + "371": { + "Angles": "{0 91.8323 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "pt3", + "Pos": "[3478.365 -15298.2549 -13670.6699]" + }, + "372": { + "Angles": "{0 91.8323 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "pt5", + "Pos": "[6984.5049 -14577.96 -13676.9688]" + }, + "373": { + "Angles": "{0 266.768 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "g2", + "Pos": "[3256.9675 13827.9102 -13183.6055]" + }, + "374": { + "Angles": "{0 268.8001 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "g1", + "Pos": "[2993.626 15692.2031 -13447.9688]" + }, + "375": { + "Angles": "{0 179.6271 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "pr2", + "Pos": "[-14768.1689 -10392.958 -9953.9688]" + }, + "376": { + "Angles": "{0 1.0831 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0.0, + "Name": "pr1", + "Pos": "[-15630.9434 -6592.5786 -9953.9688]" + }, + "377": { + "YOffset": 30.0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 16.0, + "Pos": "[-7815.9868 -10085.0137 -12625.2061]" + }, + "378": { + "YOffset": 10.0, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 45.0, + "Left": false, + "SignType": 3.0, + "Pos": "[-7015.0698 -9390 -12626.9063]" + }, + "379": { + "YOffset": 10.0, + "Angles": "{0 44 0}", + "Class": "gmod_track_signs", + "ZOffset": 45.0, + "Left": false, + "SignType": 3.0, + "Pos": "[-7250.7637 -12940.7695 -12014.8057]" + }, + "380": { + "YOffset": 10.3774, + "Angles": "{0 224 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 16.0, + "Pos": "[-7191.126 -14285.5527 -12015.0059]" + }, + "381": { + "YOffset": 15.0, + "Angles": "{0 224 0}", + "Class": "gmod_track_signs", + "ZOffset": 40.0, + "Left": false, + "SignType": 3.0, + "Pos": "[-1964.2273 -9238.0439 -12015.1055]" + }, + "382": { + "YOffset": 25.4717, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 17.4528, + "Left": false, + "SignType": 30.0, + "Pos": "[-3405.4927 -14490.793 -13671.5059]" + }, + "383": { + "YOffset": 9.2308, + "Angles": "{0.7385 226.0489 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[13424.4111 6150.7979 -11744.1807]" + }, + "384": { + "YOffset": 9.2308, + "Angles": "{0 224.006 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": true, + "SignType": 19.0, + "Pos": "[12007.5459 5138.7563 -11846.3906]" + }, + "385": { + "YOffset": 9.2308, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[14676.207 11396.877 -11476.9063]" + }, + "386": { + "YOffset": 9.2308, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[-3415.0776 16089.207 -11206.0498]" + }, + "387": { + "YOffset": 9.2308, + "Angles": "{1.1763 3.5638 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[-6777.3887 16071.6299 -11177.4873]" + }, + "388": { + "YOffset": 10.0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 29.0, + "Pos": "[-10520.793 9818.2656 -11176.3057]" + }, + "389": { + "YOffset": 9.2308, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 13.8462, + "Left": false, + "SignType": 7.0, + "Pos": "[-6554.8335 15569.207 -11176.5059]" + }, + "390": { + "YOffset": 9.2308, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 14.6226, + "Left": false, + "SignType": 19.0, + "Pos": "[9405.959 15569.207 -11531.9473]" + }, + "391": { + "YOffset": 9.2308, + "Angles": "{357.554 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 14.6226, + "Left": false, + "SignType": 19.0, + "Pos": "[13759.9033 8288.6572 -11638.292]" + }, + "392": { + "YOffset": 9.2308, + "Angles": "{357.5545 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 14.6226, + "Left": false, + "SignType": 19.0, + "Pos": "[14678.2275 9022.1348 -11564.5352]" + }, + "393": { + "YOffset": 9.2308, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 14.6226, + "Left": false, + "SignType": 19.0, + "Pos": "[10403.3438 16089.207 -11476.8057]" + }, + "394": { + "YOffset": 9.2308, + "Angles": "{359.227 267.979 0}", + "Class": "gmod_track_signs", + "ZOffset": 25.0, + "Left": false, + "SignType": 19.0, + "Pos": "[14904.6572 2476.4431 -10855.2393]" + }, + "395": { + "YOffset": 9.2308, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 32.5472, + "Left": false, + "SignType": 19.0, + "Pos": "[16026.5938 10475.4629 -10934.0117]" + }, + "396": { + "YOffset": 9.2308, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 18.4615, + "Left": false, + "SignType": 19.0, + "Pos": "[-15933.207 -11484.2305 -12014.3057]" + }, + "397": { + "YOffset": 9.2308, + "Angles": "{0.4666 2.5952 0}", + "Class": "gmod_track_signs", + "ZOffset": 15.3846, + "Left": false, + "SignType": 19.0, + "Pos": "[-8407.6611 14850.3936 -11518.6357]" + }, + "398": { + "YOffset": 9.2308, + "Angles": "{0.0029 180.6961 0}", + "Class": "gmod_track_signs", + "ZOffset": 13.6792, + "Left": false, + "SignType": 19.0, + "Pos": "[-10890.6846 -16057.6348 -12024.2012]" + }, + "399": { + "YOffset": 10.3774, + "Angles": "{0 266.2628 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[-15222.7832 5660.3965 -13214.5059]" + }, + "400": { + "YOffset": 20.0, + "Angles": "{359.5 10 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[-9713.3398 -3841.5293 -13121.2012]" + }, + "401": { + "YOffset": 10.3774, + "Angles": "{0 181.5638 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[11081.6836 -10084.0869 -12627.5059]" + }, + "402": { + "YOffset": 10.3774, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[1026.1294 -10085.0137 -12626.5059]" + }, + "403": { + "YOffset": 10.3774, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 19.7605, + "Left": false, + "SignType": 19.0, + "Pos": "[9911.3311 -9388.9863 -12626.5059]" + }, + "404": { + "YOffset": 20.0, + "Angles": "{0.0003 280.0957 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[15322.4248 -3497.0222 -12627.498]" + }, + "405": { + "YOffset": 14.1509, + "Angles": "{0 224.001 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[-3078.1101 -1227.7999 -14586.1055]" + }, + "406": { + "YOffset": 20.0, + "Angles": "{0 44.009 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[-9826.2539 -7745.4316 -14586.5059]" + }, + "407": { + "YOffset": 14.1509, + "Angles": "{0.9119 274.9138 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[15675.6113 8941.0322 -14249.7998]" + }, + "408": { + "YOffset": 14.1509, + "Angles": "{0.9119 4.9138 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[-7479.1602 15930.8906 -14071]" + }, + "409": { + "YOffset": 14.1509, + "Angles": "{0 10.5922 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[-9840.1152 13464.6377 -13213.5059]" + }, + "410": { + "YOffset": 14.1509, + "Angles": "{0 91.5632 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[-15624.0029 259.8954 -13213.5059]" + }, + "411": { + "YOffset": 14.1509, + "Angles": "{0 190.037 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[10205.7852 -1208.9841 -12626.5059]" + }, + "412": { + "YOffset": 14.1509, + "Angles": "{359.5343 268.484 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[-14887.9111 6795.9609 -12661.4014]" + }, + "413": { + "YOffset": 10.3774, + "Angles": "{0 43.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[-763.0641 -6676.9424 -12014.8057]" + }, + "414": { + "YOffset": 10.3774, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[10740.2373 14573.0137 -12339.9424]" + }, + "415": { + "YOffset": 10.3774, + "Angles": "{0 224.7475 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[555.9012 -6289.0283 -12014.8057]" + }, + "416": { + "YOffset": 10.3774, + "Angles": "{0 43.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[2263.3042 -4270.9712 -12014.7061]" + }, + "417": { + "YOffset": 10.3774, + "Angles": "{0 43.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": true, + "SignType": 19.0, + "Pos": "[2475.4854 -4433.208 -12014.7061]" + }, + "418": { + "YOffset": 10.3774, + "Angles": "{0 223.2635 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": true, + "SignType": 19.0, + "Pos": "[337.3135 -6127.1133 -12014.8057]" + }, + "419": { + "YOffset": 10.3774, + "Angles": "{0 224 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[-1625.8513 -8911.2773 -12015.1055]" + }, + "420": { + "YOffset": 10.3774, + "Angles": "{0 43.975 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[-8669.1885 -14310.7939 -12014.7061]" + }, + "421": { + "YOffset": 10.3774, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[11486.04 14604.793 -10935.1191]" + }, + "422": { + "YOffset": 10.3774, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[15762.7939 8623.5791 -10909.0439]" + }, + "423": { + "YOffset": 0.2689, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 20.0, + "Pos": "[-1416.3726 -9390 -12626.3057]" + }, + "424": { + "YOffset": 25.0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 50.0, + "Left": false, + "SignType": 25.0, + "Pos": "[-402.6179 -10085 -12625.6055]" + }, + "425": { + "YOffset": 8.0, + "Angles": "{1.3371 83.8219 0}", + "Class": "gmod_track_signs", + "ZOffset": 45.0, + "Left": false, + "SignType": 4.0, + "Pos": "[-15852.2559 8092.9927 -11517.3301]" + }, + "426": { + "YOffset": -6.6329, + "Angles": "{0 236.7964 0}", + "Class": "gmod_track_signs", + "ZOffset": 15.566, + "Left": true, + "SignType": 34.0, + "Pos": "[-676.1991 -7841.8994 -12014.8057]" + }, + "427": { + "YOffset": 0.9434, + "Angles": "{0 43.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 15.566, + "Left": false, + "SignType": 34.0, + "Pos": "[2537.7295 -4005.9807 -12014.7061]" + }, + "428": { + "YOffset": 0.9434, + "Angles": "{0 43.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 15.566, + "Left": true, + "SignType": 34.0, + "Pos": "[2727.4116 -4189.9429 -12014.7061]" + }, + "429": { + "YOffset": 17.9245, + "Angles": "{0 270.1 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.6923, + "Left": true, + "SignType": 29.0, + "Pos": "[-10790.1992 9843.5596 -11176.1055]" + }, + "430": { + "YOffset": 15.3846, + "Angles": "{0.2 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 29.2308, + "Left": false, + "SignType": 38.0, + "Pos": "[-9353.2549 -10085.002 -12629.8857]" + }, + "431": { + "YOffset": 9.2308, + "Angles": "{0 44.001 0}", + "Class": "gmod_track_signs", + "ZOffset": 18.3962, + "Left": false, + "SignType": 16.0, + "Pos": "[-2651.6802 -815.9867 -14586.1055]" + }, + "432": { + "YOffset": 9.2308, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 33.0, + "Pos": "[-3778.4163 -15217.207 -13670.5059]" + }, + "433": { + "YOffset": 9.2308, + "Angles": "{0 196.4995 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 16.0, + "Pos": "[-10100.2871 12229.1191 -13214.5059]" + }, + "434": { + "YOffset": 9.2308, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 16.0, + "Pos": "[380.4257 -9388.793 -12626.2061]" + }, + "435": { + "YOffset": 12.2642, + "Angles": "{0 44 0}", + "Class": "gmod_track_signs", + "ZOffset": 28.7736, + "Left": false, + "SignType": 16.0, + "Pos": "[-2030.55 -7900.2373 -12014.7061]" + }, + "436": { + "YOffset": 10.3774, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 16.0, + "Pos": "[14899.207 -5637.8501 -10851.4063]" + }, + "437": { + "YOffset": 10.3774, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 16.0, + "Pos": "[14634.6934 2008.0181 -10851.7061]" + }, + "438": { + "YOffset": 14.1509, + "Angles": "{0 224.001 0}", + "Class": "gmod_track_signs", + "ZOffset": 29.2308, + "Left": false, + "SignType": 34.0, + "Pos": "[-3080.4011 -1230.0122 -14586.1055]" + }, + "439": { + "YOffset": 9.2308, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.1887, + "Left": false, + "SignType": 7.0, + "Pos": "[-14540.793 -11059.8213 -13680.8652]" + }, + "440": { + "YOffset": 9.2308, + "Angles": "{5.1918 179.8361 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.1887, + "Left": false, + "SignType": 7.0, + "Pos": "[-5834.999 -15203.6396 -13690.9658]" + }, + "441": { + "YOffset": 9.2308, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.1887, + "Left": false, + "SignType": 7.0, + "Pos": "[-4048.4746 -15217.207 -13670.5059]" + }, + "442": { + "YOffset": 9.2308, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.1887, + "Left": false, + "SignType": 28.0, + "Pos": "[-3444.4092 -15217.207 -13670.5059]" + }, + "443": { + "YOffset": 9.2308, + "Angles": "{0.0003 0.03 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.1887, + "Left": false, + "SignType": 7.0, + "Pos": "[-7276.6035 -14491.5391 -13670.9541]" + }, + "444": { + "YOffset": 20.0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.1887, + "Left": false, + "SignType": 28.0, + "Pos": "[-8870.9316 -14491.793 -13668.8672]" + }, + "445": { + "YOffset": 9.2308, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.1887, + "Left": false, + "SignType": 7.0, + "Pos": "[-9440.1514 -14491.793 -13665.8867]" + }, + "446": { + "YOffset": 10.3774, + "Angles": "{0 10.5922 0}", + "Class": "gmod_track_signs", + "ZOffset": 45.0, + "Left": false, + "SignType": 3.0, + "Pos": "[-9635.5938 13502.8887 -13213.5059]" + }, + "447": { + "YOffset": 9.2308, + "Angles": "{0 12 0}", + "Class": "gmod_track_signs", + "ZOffset": -0.4717, + "Left": true, + "SignType": 28.0, + "Pos": "[8436.0361 -9511.3027 -12626.5059]" + }, + "448": { + "YOffset": 9.2308, + "Angles": "{0 192 0}", + "Class": "gmod_track_signs", + "ZOffset": -0.4717, + "Left": true, + "SignType": 28.0, + "Pos": "[2603.9312 -9956.3281 -12626.5059]" + }, + "449": { + "YOffset": 10.3774, + "Angles": "{358.6614 93.446 0}", + "Class": "gmod_track_signs", + "ZOffset": 19.7605, + "Left": true, + "SignType": 19.0, + "Pos": "[15112.2061 -5276.0557 -12626.499]" + }, + "450": { + "YOffset": 9.2308, + "Angles": "{0 279.2628 0}", + "Class": "gmod_track_signs", + "ZOffset": 25.9434, + "Left": false, + "SignType": 19.0, + "Pos": "[-15197.5762 308.9457 -13214.5059]" + }, + "451": { + "YOffset": 15.0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 35.0, + "Left": false, + "SignType": 3.0, + "Pos": "[-311.5651 -10085 -12625.6055]" + }, + "452": { + "YOffset": -0.9434, + "Angles": "{359.1662 88.0448 0}", + "Class": "gmod_track_signs", + "ZOffset": 12.3077, + "Left": true, + "SignType": 19.0, + "Pos": "[15025.6846 9989.5625 -12337.6846]" + }, + "453": { + "YOffset": 21.6981, + "Angles": "{0 224 0}", + "Class": "gmod_track_signs", + "ZOffset": 33.4906, + "Left": true, + "SignType": 34.0, + "Pos": "[-2604.3191 -8454.3193 -12014.7061]" + }, + "454": { + "YOffset": 21.6981, + "Angles": "{0.0008 225.6636 0}", + "Class": "gmod_track_signs", + "ZOffset": 13.8462, + "Left": false, + "SignType": 19.0, + "Pos": "[14849.542 7006.9971 -12362.4883]" + }, + "455": { + "YOffset": 21.6981, + "Angles": "{0.2813 271.8298 0}", + "Class": "gmod_track_signs", + "ZOffset": 18.4615, + "Left": false, + "SignType": 19.0, + "Pos": "[16177.0322 11999.3184 -12336.998]" + }, + "456": { + "YOffset": 21.6981, + "Angles": "{0.2353 1.5219 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.0, + "Left": false, + "SignType": 19.0, + "Pos": "[-8041.7476 15910.1504 -12632.5977]" + }, + "457": { + "YOffset": 21.6981, + "Angles": "{1.419 96.3067 0}", + "Class": "gmod_track_signs", + "ZOffset": 33.4906, + "Left": false, + "SignType": 19.0, + "Pos": "[-15706.1807 -6361.2314 -12786.6934]" + }, + "458": { + "YOffset": 10.0, + "Angles": "{359.5328 268.4751 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.0, + "Left": false, + "SignType": 19.0, + "Pos": "[-15665.7676 6846.8008 -11520.6934]" + }, + "459": { + "YOffset": 2.8302, + "Angles": "{0 224.023 0}", + "Class": "gmod_track_signs", + "ZOffset": 33.4906, + "Left": false, + "SignType": 2.0, + "Pos": "[7527.249 445.2542 -12014.5059]" + }, + "460": { + "YOffset": 2.8302, + "Angles": "{0 224.002 0}", + "Class": "gmod_track_signs", + "ZOffset": 33.4906, + "Left": true, + "SignType": 2.0, + "Pos": "[7341.9375 634.0249 -12014.5059]" + }, + "461": { + "YOffset": 9.2308, + "Angles": "{0.0029 270.6961 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[13756.1816 11135.5479 -11539.4883]" + }, + "462": { + "YOffset": -0.043, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 22.0, + "Pos": "[14898.5 -4976.0303 -10851.4063]" + }, + "463": { + "YOffset": 20.0, + "Angles": "{0 43.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 30.0, + "Left": false, + "SignType": 3.0, + "Pos": "[25.5104 -5915.1211 -12014.9063]" + }, + "464": { + "YOffset": 9.2308, + "Angles": "{0 224 0}", + "Class": "gmod_track_signs", + "ZOffset": 50.0, + "Left": false, + "SignType": 6.0, + "Pos": "[5598.8154 -1935.9498 -12014.5059]" + }, + "465": { + "YOffset": 73.8462, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 50.0, + "Left": false, + "SignType": 6.0, + "Pos": "[14898.793 1268.0068 -10851.5059]" + }, + "466": { + "YOffset": 10.3774, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 50.0, + "Left": false, + "SignType": 6.0, + "Pos": "[10958.4648 -10084.9863 -12627.5059]" + }, + "467": { + "YOffset": 15.3846, + "Angles": "{3.0431 112.4767 0}", + "Class": "gmod_track_signs", + "ZOffset": 29.2308, + "Left": false, + "SignType": 39.0, + "Pos": "[-15361.1025 -7726.6035 -12757.5977]" + }, + "468": { + "YOffset": 15.3846, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 29.2308, + "Left": false, + "SignType": 38.0, + "Pos": "[1107.3707 -9388.9863 -12626.5059]" + }, + "469": { + "YOffset": 15.3846, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 29.2308, + "Left": false, + "SignType": 39.0, + "Pos": "[8222.0117 -9389.207 -12626.5059]" + }, + "470": { + "YOffset": 15.3846, + "Angles": "{356.5443 62.6279 0}", + "Class": "gmod_track_signs", + "ZOffset": 29.2308, + "Left": false, + "SignType": 40.0, + "Pos": "[14775.9814 -7327.9624 -12626.5039]" + }, + "471": { + "YOffset": 0.2689, + "Angles": "{0 43.9999 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 20.0, + "Pos": "[-4597.1289 -10380.7871 -12014.8057]" + }, + "472": { + "YOffset": 0.2689, + "Angles": "{0 223.9999 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 20.0, + "Pos": "[-4527.5439 -11711.373 -12015.1055]" + }, + "473": { + "YOffset": 0.2689, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 19.0, + "Pos": "[14635.207 -5761.3882 -10851.5059]" + }, + "474": { + "YOffset": 0.2689, + "Angles": "{0.4673 268.4838 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": true, + "SignType": 34.0, + "Pos": "[14629.6982 -8295.7734 -10852.292]" + }, + "475": { + "YOffset": 0.2689, + "Angles": "{0.4673 268.4838 0}", + "Class": "gmod_track_signs", + "ZOffset": 38.4615, + "Left": true, + "SignType": 19.0, + "Pos": "[14629.8301 -8290.7832 -10852.2822]" + }, + "476": { + "YOffset": 0.2689, + "Angles": "{0.4652 268.4841 0}", + "Class": "gmod_track_signs", + "ZOffset": 21.5385, + "Left": false, + "SignType": 19.0, + "Pos": "[14895.5342 -8229.5078 -10850.8818]" + }, + "477": { + "YOffset": 0.2689, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 20.0, + "Pos": "[14635 -1722.6804 -10851.7061]" + }, + "478": { + "YOffset": 10.3774, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 50.0, + "Left": false, + "SignType": 6.0, + "Pos": "[15719.707 2685.813 -14271.4063]" + }, + "479": { + "YOffset": 0.2689, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 20.0, + "Pos": "[-3835.6985 -10085 -12625.4063]" + }, + "480": { + "YOffset": 0.2689, + "Angles": "{0 190.0028 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 20.0, + "Pos": "[-6061.231 12985.8242 -13214.8057]" + }, + "481": { + "YOffset": 9.2308, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.6154, + "Left": false, + "SignType": 19.0, + "Pos": "[-13671.793 -6528.2144 -13780.7744]" + }, + "482": { + "YOffset": 0.2689, + "Angles": "{0 10.0023 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 20.0, + "Pos": "[-5697.647 14197.4063 -13213.8057]" + }, + "483": { + "YOffset": 0.5205, + "Angles": "{0.7339 73.8748 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.0, + "Left": false, + "SignType": 19.0, + "Pos": "[14940.3174 4571.7158 -10873.418]" + }, + "484": { + "YOffset": 10.0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 45.0, + "Left": false, + "SignType": 3.0, + "Pos": "[9388.0586 14604.2813 -10939.7793]" + }, + "485": { + "YOffset": 10.0, + "Angles": "{0 179.97 0}", + "Class": "gmod_track_signs", + "ZOffset": 45.0, + "Left": false, + "SignType": 3.0, + "Pos": "[5260.1558 14606.2783 -11046.5527]" + }, + "486": { + "YOffset": 10.0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 45.0, + "Left": false, + "SignType": 4.0, + "Pos": "[-2359.7681 14606.4941 -11379.8555]" + }, + "487": { + "YOffset": 0.2689, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 43.0, + "Pos": "[-4317.1904 -14490.793 -13671.5059]" + }, + "488": { + "YOffset": 19.8113, + "Angles": "{356.7783 62.0108 0}", + "Class": "gmod_track_signs", + "ZOffset": 50.0, + "Left": false, + "SignType": 6.0, + "Pos": "[14127.8037 -10794.8467 -13679.0029]" + }, + "489": { + "YOffset": -0.9434, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 1.4151, + "Left": false, + "SignType": 38.0, + "Pos": "[986.471 -14599.207 -9948.5059]" + }, + "490": { + "YOffset": -0.9434, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 1.4151, + "Left": false, + "SignType": 25.0, + "Pos": "[7962.2988 -14599.2061 -9948.5059]" + }, + "491": { + "YOffset": -0.9434, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 1.4151, + "Left": false, + "SignType": 10.0, + "Pos": "[8170.5 -14599.2051 -9948.5059]" + }, + "492": { + "YOffset": -0.9434, + "Angles": "{0 43.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 16.5094, + "Left": true, + "SignType": 4.0, + "Pos": "[13139.8477 6751.6025 -12338.5059]" + }, + "493": { + "YOffset": 30.0, + "Angles": "{0 43.976 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.0, + "Left": false, + "SignType": 3.0, + "Pos": "[2381.0713 -3640.811 -12014.3057]" + }, + "494": { + "YOffset": 10.0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 45.0, + "Left": false, + "SignType": 4.0, + "Pos": "[14635.207 -5183.73 -10851.6055]" + }, + "495": { + "YOffset": 10.0, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 32.0, + "Left": false, + "SignType": 3.0, + "Pos": "[-8590.7842 -15958.793 -10490.5859]" + }, + "496": { + "YOffset": 14.1509, + "Angles": "{359.4643 178.9941 0}", + "Class": "gmod_track_signs", + "ZOffset": 10.7692, + "Left": false, + "SignType": 4.0, + "Pos": "[-11869.249 -16222.1318 -10403.666]" + }, + "497": { + "YOffset": 17.5676, + "Angles": "{357.394 19.1824 0}", + "Class": "gmod_track_signs", + "ZOffset": 47.973, + "Left": false, + "SignType": 6.0, + "Pos": "[10128.5566 -15449.7793 -10857.7285]" + }, + "498": { + "YOffset": 4.955, + "Angles": "{0 94.5235 0}", + "Class": "gmod_track_signs", + "ZOffset": 12.8378, + "Left": false, + "SignType": 13.0, + "Pos": "[14644.0059 -6226.001 -10861.7686]" + }, + "499": { + "YOffset": 4.955, + "Angles": "{359.5744 269.4295 0}", + "Class": "gmod_track_signs", + "ZOffset": 12.8378, + "Left": false, + "SignType": 13.0, + "Pos": "[14899.1494 2177.0671 -10852.624]" + }, + "500": { + "YOffset": 18.4615, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.0, + "Left": false, + "SignType": 34.0, + "Pos": "[3168.2705 -15214 -13680.1699]" + }, + "501": { + "YOffset": 18.4615, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": -7.6923, + "Left": false, + "SignType": 19.0, + "Pos": "[3165.8237 -15214 -13680.1699]" + }, + "502": { + "YOffset": 0.0, + "Angles": "{3.4694 220.8995 0}", + "Class": "gmod_track_signs", + "ZOffset": 50.0, + "Left": false, + "SignType": 4.0, + "Pos": "[12997.0918 -12661.9521 -13663.7148]" + }, + "503": { + "YOffset": 20.0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.0, + "Left": false, + "SignType": 19.0, + "Pos": "[15357.207 -5512.3076 -13665.7139]" + }, + "504": { + "YOffset": 31.1321, + "Angles": "{0.6497 272.0699 0}", + "Class": "gmod_track_signs", + "ZOffset": 29.3413, + "Left": false, + "SignType": 19.0, + "Pos": "[15537.1162 9724.8447 -13416.8066]" + }, + "505": { + "YOffset": 11.976, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 17.3653, + "Left": false, + "SignType": 9.0, + "Pos": "[3102.2822 15482.207 -13231.4688]" + }, + "506": { + "YOffset": 20.0, + "Angles": "{0.5 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.0, + "Left": false, + "SignType": 44.0, + "Pos": "[8314.1738 15477.9453 -13252.1768]" + }, + "507": { + "YOffset": 30.0, + "Angles": "{0.24 314.9788 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.0, + "Left": false, + "SignType": 35.0, + "Pos": "[13117.9854 13982.7324 -13331.9043]" + }, + "508": { + "YOffset": -0.9434, + "Angles": "{0 14.1259 0}", + "Class": "gmod_track_signs", + "ZOffset": 18.4615, + "Left": false, + "SignType": 13.0, + "Pos": "[-10138.3047 13395.2207 -13213.5059]" + }, + "509": { + "YOffset": 9.2308, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 12.5749, + "Left": false, + "SignType": 13.0, + "Pos": "[-7943.3389 -9388.793 -12627.5059]" + }, + "510": { + "YOffset": 30.0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.0, + "Left": false, + "SignType": 3.0, + "Pos": "[7055.5337 14572.2129 -12439.5889]" + }, + "511": { + "YOffset": 30.0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.0, + "Left": false, + "SignType": 4.0, + "Pos": "[-3984.5393 14572.2129 -12623.3125]" + }, + "512": { + "YOffset": -0.9434, + "Angles": "{356.779 152.2451 0}", + "Class": "gmod_track_signs", + "ZOffset": 15.3846, + "Left": true, + "SignType": 3.0, + "Pos": "[13234.2012 14103.4541 -12337.5029]" + }, + "513": { + "YOffset": -0.9434, + "Angles": "{0 43.975 0}", + "Class": "gmod_track_signs", + "ZOffset": 15.3846, + "Left": false, + "SignType": 13.0, + "Pos": "[-8039.0298 -13702.7881 -12014.7061]" + }, + "514": { + "YOffset": 15.0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 45.0, + "Left": true, + "SignType": 5.0, + "Pos": "[-15669.207 -9851.1787 -12014.7061]" + }, + "515": { + "YOffset": 17.9245, + "Angles": "{359.3069 87.4015 0}", + "Class": "gmod_track_signs", + "ZOffset": 47.3054, + "Left": false, + "SignType": 19.0, + "Pos": "[14616.1963 -8658.8994 -10853.0107]" + }, + "516": { + "YOffset": 17.9245, + "Angles": "{1 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 47.3054, + "Left": false, + "SignType": 19.0, + "Pos": "[-11637.8672 -15959.1396 -10403.1777]" + }, + "517": { + "YOffset": 17.9245, + "Angles": "{357.3568 243.9948 0}", + "Class": "gmod_track_signs", + "ZOffset": 32.3077, + "Left": true, + "SignType": 19.0, + "Pos": "[-15367.2393 -7117.7783 -10304.7988]" + }, + "518": { + "YOffset": 17.9245, + "Angles": "{0.0001 210.4948 0}", + "Class": "gmod_track_signs", + "ZOffset": 29.2308, + "Left": false, + "SignType": 19.0, + "Pos": "[-936.5491 2073.3328 -9984.2461]" + }, + "519": { + "YOffset": 17.9245, + "Angles": "{359.9992 299.1964 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.0, + "Left": false, + "SignType": 19.0, + "Pos": "[1503.1488 13708.6953 -9983.4883]" + }, + "520": { + "YOffset": 17.9245, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 47.3054, + "Left": false, + "SignType": 16.0, + "Pos": "[-15549.2051 1731.7262 -9947.6914]" + }, + "521": { + "YOffset": 20.0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 10.0, + "Left": false, + "SignType": 2.0, + "Pos": "[-15548.75 -5863.5625 -9948.5762]" + }, + "522": { + "YOffset": 20.0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 35.0, + "Left": false, + "SignType": 19.0, + "Pos": "[-15548.75 -5860.2764 -9948.5762]" + }, + "523": { + "YOffset": 18.4615, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 28.1437, + "Left": false, + "SignType": 2.0, + "Pos": "[-15548.793 -8404.6914 -9948.5762]" + }, + "524": { + "YOffset": 18.4615, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 28.1437, + "Left": true, + "SignType": 19.0, + "Pos": "[-15548.793 -8062.2739 -9948.5762]" + }, + "525": { + "YOffset": 18.4615, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 28.1437, + "Left": true, + "SignType": 19.0, + "Pos": "[-14851.793 -10635.083 -9948.5059]" + }, + "526": { + "YOffset": 18.4615, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 28.1437, + "Left": false, + "SignType": 16.0, + "Pos": "[-14852.793 -6531.1509 -9946.2656]" + }, + "527": { + "YOffset": 15.0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.0, + "Left": false, + "SignType": 13.0, + "Pos": "[-14854.6055 1964.0394 -9950.1191]" + }, + "528": { + "YOffset": 18.4615, + "Angles": "{0 266 0}", + "Class": "gmod_track_signs", + "ZOffset": 15.5689, + "Left": false, + "SignType": 19.0, + "Pos": "[-14831.334 6595.9736 -9983.5059]" + }, + "529": { + "YOffset": 18.4615, + "Angles": "{358.9139 203.9437 0}", + "Class": "gmod_track_signs", + "ZOffset": 15.5689, + "Left": false, + "SignType": 19.0, + "Pos": "[-4417.4819 15044.2676 -9984.4941]" + }, + "530": { + "YOffset": 18.4615, + "Angles": "{0 30.999 0}", + "Class": "gmod_track_signs", + "ZOffset": 15.5689, + "Left": false, + "SignType": 19.0, + "Pos": "[-13501.5098 -4531.3711 -10302.0498]" + }, + "531": { + "YOffset": 18.4615, + "Angles": "{359.9994 90.035 0}", + "Class": "gmod_track_signs", + "ZOffset": 15.5689, + "Left": false, + "SignType": 19.0, + "Pos": "[-16031.543 -11736.6094 -10326.1455]" + }, + "532": { + "YOffset": 5.0, + "Angles": "{3.4694 220.8995 0}", + "Class": "gmod_track_signs", + "ZOffset": 50.0, + "Left": false, + "SignType": 3.0, + "Pos": "[12564.2461 -14370.1631 -10843.709]" + }, + "533": { + "YOffset": 5.0, + "Angles": "{0.691 267.4102 0}", + "Class": "gmod_track_signs", + "ZOffset": 50.0, + "Left": false, + "SignType": 3.0, + "Pos": "[14887.8848 -8494.6553 -10850.3926]" + }, + "534": { + "YOffset": 8.3832, + "Angles": "{1.7399 190.4088 0}", + "Class": "gmod_track_signs", + "ZOffset": 15.5689, + "Left": false, + "SignType": 19.0, + "Pos": "[9073.9502 -15998.5176 -10847.2061]" + }, + "535": { + "YOffset": 30.0, + "Angles": "{2.0398 348.8637 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.0, + "Left": false, + "SignType": 5.0, + "Pos": "[13360.8643 15798.3252 -12337.0039]" + }, + "536": { + "YOffset": 9.2308, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 50.0, + "Left": false, + "SignType": 9.0, + "Pos": "[3155.4417 13981.793 -13217.4688]" + }, + "537": { + "YOffset": 9.2308, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 16.9231, + "Left": true, + "SignType": 9.0, + "Pos": "[3536.5576 13981.793 -13217.4688]" + }, + "538": { + "YOffset": 9.2308, + "Angles": "{359.4979 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 16.9231, + "Left": false, + "SignType": 19.0, + "Pos": "[9672.3555 13982 -13288.3643]" + }, + "539": { + "YOffset": 9.2308, + "Angles": "{359.3189 134.9957 0}", + "Class": "gmod_track_signs", + "ZOffset": 16.9231, + "Left": true, + "SignType": 19.0, + "Pos": "[14020.793 11135.4033 -13377.0156]" + }, + "540": { + "YOffset": 9.2308, + "Angles": "{359.3069 87.4015 0}", + "Class": "gmod_track_signs", + "ZOffset": 16.9231, + "Left": false, + "SignType": 19.0, + "Pos": "[15079.585 -6809.9434 -13672.7734]" + }, + "541": { + "YOffset": -0.9434, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 1.4151, + "Left": false, + "SignType": 39.0, + "Pos": "[-5757.4282 -14599.207 -9948.5059]" + }, + "542": { + "YOffset": 10.0, + "Angles": "{1 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 32.0, + "Left": false, + "SignType": 3.0, + "Pos": "[-11763.749 -15959.1895 -10400.3223]" + }, + "543": { + "YOffset": 18.4615, + "Angles": "{0.2342 180.5031 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.0, + "Left": false, + "SignType": 19.0, + "Pos": "[7198.1387 -14490.8379 -13671.1973]" + }, + "544": { + "YOffset": 30.0, + "Angles": "{0.981 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.0, + "Left": true, + "SignType": 5.0, + "Pos": "[-14893.4717 -4179.8076 -12810.5664]" + }, + "545": { + "YOffset": 18.4615, + "Angles": "{359.3852 357.492 0}", + "Class": "gmod_track_signs", + "ZOffset": 29.2308, + "Left": false, + "SignType": 19.0, + "Pos": "[-12004.0381 -14589.5547 -9948.8604]" + }, + "546": { + "YOffset": 10.0, + "Angles": "{2.1097 348.8098 0}", + "Class": "gmod_track_signs", + "ZOffset": 45.0, + "Left": false, + "SignType": 5.0, + "Pos": "[13059.6348 14755.0518 -10931.1162]" + }, + "547": { + "YOffset": 10.0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 42.0, + "Left": false, + "SignType": 3.0, + "Pos": "[-15933.0059 -5034.6885 -11934.8828]" + }, + "548": { + "YOffset": 10.0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 43.0, + "Left": false, + "SignType": 3.0, + "Pos": "[-15933.207 -11222.4092 -12014.3057]" + }, + "549": { + "YOffset": 9.2308, + "Angles": "{0 223.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 13.0, + "Pos": "[-1258.0962 -8556.2324 -12014.8057]" + }, + "550": { + "YOffset": 30.0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.0, + "Left": false, + "SignType": 4.0, + "Pos": "[-15743.0137 6528.7524 -12644.5654]" + }, + "551": { + "YOffset": 30.0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.0, + "Left": false, + "SignType": 3.0, + "Pos": "[-15743.0137 25.8133 -12758.1348]" + }, + "552": { + "YOffset": 30.0, + "Angles": "{2.2332 100.1184 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.0, + "Left": false, + "SignType": 3.0, + "Pos": "[-15662.9492 -6684.7876 -12780.3652]" + }, + "553": { + "YOffset": 9.2308, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 13.0, + "Pos": "[663.7688 -10085.0137 -12626.5059]" + }, + "554": { + "YOffset": 15.3846, + "Angles": "{359.5052 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 18.4615, + "Left": false, + "SignType": 19.0, + "Pos": "[14971.0293 -11049.4023 -14369.459]" + }, + "555": { + "YOffset": 30.0, + "Angles": "{358.9939 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.0, + "Left": false, + "SignType": 19.0, + "Pos": "[-10972.4482 -9389.4307 -12680.8174]" + }, + "556": { + "YOffset": 22.0, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 45.0, + "Left": false, + "SignType": 25.0, + "Pos": "[-6920.4761 -9390 -12626.9063]" + }, + "557": { + "YOffset": 0.0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 3.0, + "Pos": "[14898.7939 1161.5076 -10851.5059]" + }, + "558": { + "YOffset": 9.2308, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": true, + "SignType": 19.0, + "Pos": "[14899.207 -5630.6084 -10851.4063]" + }, + "559": { + "YOffset": 10.0, + "Angles": "{0 26 0}", + "Class": "gmod_track_signs", + "ZOffset": 32.0, + "Left": false, + "SignType": 19.0, + "Pos": "[-10852.2598 12454.0176 -9983.5059]" + }, + "560": { + "YOffset": -5.0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 20.0, + "Pos": "[14898.5 -5070.9883 -10851.4063]" + }, + "561": { + "YOffset": -5.0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 20.0, + "Pos": "[14635 1004.4731 -10851.7061]" + }, + "562": { + "YOffset": -5.0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 20.0, + "Pos": "[-15548.75 651.5449 -9947.3457]" + }, + "563": { + "YOffset": 10.0, + "Angles": "{359.24 269.1631 0}", + "Class": "gmod_track_signs", + "ZOffset": 10.0, + "Left": false, + "SignType": 7.0, + "Pos": "[-10521.7412 11289.6182 -11176.4834]" + }, + "564": { + "YOffset": 10.0, + "Angles": "{0 270.0922 0}", + "Class": "gmod_track_signs", + "ZOffset": 10.0, + "Left": false, + "SignType": 7.0, + "Pos": "[-10793.1504 11343.5625 -11176.1055]" + }, + "565": { + "YOffset": 6.1538, + "Angles": "{0 224 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.6923, + "Left": true, + "SignType": 19.0, + "Pos": "[-2591.4453 -8441.8877 -12014.7061]" + }, + "566": { + "YOffset": 20.0, + "Angles": "{358.182 281.1706 0}", + "Class": "gmod_track_signs", + "ZOffset": 9.2308, + "Left": true, + "SignType": 32.0, + "Pos": "[-13562.4268 -11627.709 -13665.2783]" + }, + "567": { + "YOffset": 20.0, + "Angles": "{0 223.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.283, + "Left": false, + "SignType": 12.0, + "Pos": "[6793.1782 7420.5557 -14585.5059]" + }, + "568": { + "YOffset": 20.0, + "Angles": "{0 223.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.283, + "Left": true, + "SignType": 12.0, + "Pos": "[6640.3623 7640.0869 -14585.5059]" + }, + "569": { + "YOffset": 35.0, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.283, + "Left": false, + "SignType": 19.0, + "Pos": "[-5796.1475 -14978.9863 -14569.5059]" + }, + "570": { + "YOffset": 35.0, + "Angles": "{0 224 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.283, + "Left": false, + "SignType": 16.0, + "Pos": "[-8232.8047 -7609.416 -14574.3125]" + }, + "571": { + "YOffset": 20.0, + "Angles": "{0 44.009 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 13.0, + "Pos": "[-8885.8379 -6837.2363 -14586.5059]" + }, + "572": { + "YOffset": 10.3774, + "Angles": "{0 44.001 0}", + "Class": "gmod_track_signs", + "ZOffset": 50.0, + "Left": false, + "SignType": 6.0, + "Pos": "[-7795.7734 -5783.751 -14586.2061]" + }, + "573": { + "YOffset": 20.0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 10.0, + "Left": false, + "SignType": 19.0, + "Pos": "[-11373.9863 -11633.916 -14586.5059]" + }, + "574": { + "YOffset": 20.0, + "Angles": "{0 223.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 10.0, + "Left": false, + "SignType": 1.0, + "Pos": "[-496.3177 -136.4225 -14585.6055]" + }, + "575": { + "YOffset": -2.0, + "Angles": "{0 224.001 0}", + "Class": "gmod_track_signs", + "ZOffset": -1.0, + "Left": false, + "SignType": 20.0, + "Pos": "[-6978.0215 -6393.8672 -14585.9063]" + }, + "576": { + "YOffset": 20.0, + "Angles": "{0 224.001 0}", + "Class": "gmod_track_signs", + "ZOffset": 40.0, + "Left": false, + "SignType": 34.0, + "Pos": "[-2099.5557 -1685.1858 -14585.9063]" + }, + "577": { + "YOffset": 20.0, + "Angles": "{0 224.001 0}", + "Class": "gmod_track_signs", + "ZOffset": 9.9057, + "Left": false, + "SignType": 19.0, + "Pos": "[-2099.8484 -1685.4684 -14585.9063]" + }, + "578": { + "YOffset": 14.1509, + "Angles": "{0 43.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 9.9057, + "Left": false, + "SignType": 19.0, + "Pos": "[1983.2217 3142.6794 -14585.5059]" + }, + "579": { + "YOffset": 14.1509, + "Angles": "{0 43.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 40.0, + "Left": false, + "SignType": 34.0, + "Pos": "[1982.8662 3142.3362 -14585.5059]" + }, + "580": { + "YOffset": 20.0, + "Angles": "{0 43.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 40.0, + "Left": true, + "SignType": 34.0, + "Pos": "[2082.4429 2871.3662 -14585.5059]" + }, + "581": { + "YOffset": 20.0, + "Angles": "{0 43.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 12.7358, + "Left": true, + "SignType": 19.0, + "Pos": "[2081.708 2870.6563 -14585.5059]" + }, + "582": { + "YOffset": 20.0, + "Angles": "{0 218.658 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.283, + "Left": false, + "SignType": 19.0, + "Pos": "[-714.6962 590.6051 -14585.6055]" + }, + "583": { + "YOffset": -0.9434, + "Angles": "{0 229.3528 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.283, + "Left": true, + "SignType": 19.0, + "Pos": "[-487.2691 335.3461 -14585.6055]" + }, + "584": { + "YOffset": 20.0, + "Angles": "{0 43.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.283, + "Left": false, + "SignType": 19.0, + "Pos": "[-1189.1833 595.6943 -14585.6055]" + }, + "585": { + "YOffset": 20.0, + "Angles": "{0 43.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 44.8113, + "Left": false, + "SignType": 2.0, + "Pos": "[-1194.8846 590.1889 -14585.6055]" + }, + "586": { + "YOffset": 20.0, + "Angles": "{0 223.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 29.717, + "Left": true, + "SignType": 1.0, + "Pos": "[-1240.1671 546.4633 -14585.6055]" + }, + "587": { + "YOffset": -4.717, + "Angles": "{0 44.001 0}", + "Class": "gmod_track_signs", + "ZOffset": -2.3585, + "Left": false, + "SignType": 20.0, + "Pos": "[-5259.1953 -3336.1621 -14586.2061]" + }, + "588": { + "YOffset": 20.0, + "Angles": "{0 223.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.0, + "Left": false, + "SignType": 39.0, + "Pos": "[3949.1221 4155.9561 -14585.8057]" + }, + "589": { + "YOffset": 20.0, + "Angles": "{0 223.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.0, + "Left": false, + "SignType": 38.0, + "Pos": "[8658.8281 8704.7246 -14585.8057]" + }, + "590": { + "YOffset": 20.0, + "Angles": "{0 223.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.0, + "Left": false, + "SignType": 38.0, + "Pos": "[7977.167 9446.7051 -14585.5059]" + }, + "591": { + "YOffset": 20.0, + "Angles": "{0 223.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.0, + "Left": false, + "SignType": 39.0, + "Pos": "[3246.4812 4878.4438 -14585.5059]" + }, + "592": { + "YOffset": 40.566, + "Angles": "{0 224 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.283, + "Left": false, + "SignType": 38.0, + "Pos": "[-7939.4248 -7326.103 -14577.8721]" + }, + "593": { + "YOffset": 19.8113, + "Angles": "{0 223.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.283, + "Left": false, + "SignType": 12.0, + "Pos": "[7294.918 220.8468 -12014.5059]" + }, + "594": { + "YOffset": 19.8113, + "Angles": "{0 223.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.283, + "Left": true, + "SignType": 12.0, + "Pos": "[7106.6025 405.9958 -12014.5059]" + }, + "595": { + "YOffset": 9.0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 50.0, + "Left": false, + "SignType": 6.0, + "Pos": "[15725.625 -4092.5774 -14278.8838]" + }, + "596": { + "YOffset": 9.2308, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 18.3962, + "Left": false, + "SignType": 16.0, + "Pos": "[15719.9863 -5565.1709 -14276.2607]" + }, + "597": { + "YOffset": 0.2689, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 20.0, + "Pos": "[15717 -3855.9961 -14281.0684]" + }, + "598": { + "YOffset": 0.9434, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": -1.4151, + "Left": false, + "SignType": 20.0, + "Pos": "[14971.5 2311.2834 -14272.1055]" + }, + "599": { + "YOffset": 12.2642, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 50.0, + "Left": false, + "SignType": 6.0, + "Pos": "[14966.5137 2509.9036 -14279.6846]" + }, + "600": { + "YOffset": 9.2308, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 18.3962, + "Left": false, + "SignType": 16.0, + "Pos": "[14970.9863 3944.3489 -14267.2998]" + }, + "601": { + "YOffset": -3.0769, + "Angles": "{0 89.95 0}", + "Class": "gmod_track_signs", + "ZOffset": -9.2308, + "Left": false, + "SignType": 13.0, + "Pos": "[14971.1074 -5974.3887 -14281.1055]" + }, + "602": { + "YOffset": 19.8113, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 50.0, + "Left": false, + "SignType": 6.0, + "Pos": "[14971.1934 -4129.2632 -14272.4063]" + }, + "603": { + "YOffset": -3.0769, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": -9.2308, + "Left": false, + "SignType": 13.0, + "Pos": "[15719.9863 4488.792 -14261.6445]" + }, + "604": { + "YOffset": 21.6981, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": -35.3774, + "Left": false, + "SignType": 5.0, + "Pos": "[15719.707 2663.71 -14271.4063]" + }, + "605": { + "YOffset": 40.566, + "Angles": "{356.8989 294.916 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.283, + "Left": false, + "SignType": 39.0, + "Pos": "[-9649.9854 -13090.4248 -14569.5029]" + }, + "606": { + "YOffset": 40.566, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.283, + "Left": false, + "SignType": 40.0, + "Pos": "[-4055.9429 -14978.9863 -14569.5059]" + }, + "607": { + "YOffset": 35.0, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 25.9434, + "Left": false, + "SignType": 6.0, + "Pos": "[-2747.4277 -14978.9863 -14569.5059]" + }, + "608": { + "YOffset": 35.0, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 35.0, + "Left": true, + "SignType": 41.0, + "Pos": "[2515.75 -14978.9863 -14569.5059]" + }, + "609": { + "YOffset": 35.0, + "Angles": "{0.4 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 35.0, + "Left": false, + "SignType": 42.0, + "Pos": "[8793.0967 -14978.9219 -14517.3301]" + }, + "610": { + "YOffset": 20.0, + "Angles": "{0 43.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 12.7358, + "Left": true, + "SignType": 19.0, + "Pos": "[-449.9526 -91.6513 -14585.6055]" + }, + "611": { + "YOffset": 20.0, + "Angles": "{0 43.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 39.1509, + "Left": true, + "SignType": 2.0, + "Pos": "[-450.6995 -92.3725 -14585.6055]" + }, + "612": { + "YOffset": -4.717, + "Angles": "{0 52.9811 0}", + "Class": "gmod_track_signs", + "ZOffset": 18.3962, + "Left": false, + "SignType": 19.0, + "Pos": "[-748.2035 7.3864 -14585.6055]" + }, + "613": { + "YOffset": 4.717, + "Angles": "{0 33.9594 0}", + "Class": "gmod_track_signs", + "ZOffset": 18.3962, + "Left": true, + "SignType": 19.0, + "Pos": "[-1109.4446 300.5967 -14585.6055]" + }, + "614": { + "YOffset": 16.0377, + "Angles": "{0.0034 88.0949 0}", + "Class": "gmod_track_signs", + "ZOffset": 18.3962, + "Left": false, + "SignType": 40.0, + "Pos": "[-11371.3105 -10653.2744 -14586.4863]" + }, + "615": { + "YOffset": 16.0377, + "Angles": "{0.283 179.4565 0}", + "Class": "gmod_track_signs", + "ZOffset": 18.3962, + "Left": false, + "SignType": 39.0, + "Pos": "[-7394.3657 -15995.7705 -14586.502]" + }, + "616": { + "YOffset": 16.0377, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 18.3962, + "Left": false, + "SignType": 38.0, + "Pos": "[-658.4907 -15996.9863 -14586.5059]" + }, + "617": { + "YOffset": 16.0377, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 18.3962, + "Left": false, + "SignType": 25.0, + "Pos": "[6237.7495 -15996.9863 -14584.7158]" + }, + "618": { + "YOffset": 30.0, + "Angles": "{356.6256 147.0517 0}", + "Class": "gmod_track_signs", + "ZOffset": 15.0, + "Left": true, + "SignType": 3.0, + "Pos": "[12004.1592 13345.3018 -14236.6045]" + }, + "619": { + "YOffset": 30.0, + "Angles": "{0 224.001 0}", + "Class": "gmod_track_signs", + "ZOffset": 40.0, + "Left": false, + "SignType": 25.0, + "Pos": "[-2803.012 -2361.9626 -14585.8057]" + }, + "620": { + "YOffset": 10.3774, + "Angles": "{359.7596 134.9745 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.2453, + "Left": false, + "SignType": 44.0, + "Pos": "[13343.916 11811.2012 -13360.1807]" + }, + "621": { + "YOffset": 9.2308, + "Angles": "{358.0724 11.9694 0}", + "Class": "gmod_track_signs", + "ZOffset": 21.2264, + "Left": false, + "SignType": 34.0, + "Pos": "[9626.8877 -13978.9727 -13676.291]" + }, + "622": { + "YOffset": 29.2453, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 10.8491, + "SignType": 3.0, + "Pos": "[15093.0137 -250.0172 -13576.1934]" + }, + "623": { + "YOffset": 17.9245, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.3676, + "Left": false, + "SignType": 3.0, + "Pos": "[-14540.793 -6026.9814 -13848.2939]" + }, + "624": { + "YOffset": 17.9245, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 16.5094, + "Left": false, + "SignType": 4.0, + "Pos": "[-14540.793 734.2678 -14068.1123]" + }, + "625": { + "YOffset": 30.0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 15.0, + "Left": false, + "SignType": 4.0, + "Pos": "[6334.75 14645.5859 -14236.5059]" + }, + "626": { + "YOffset": 10.3774, + "Angles": "{0 10.0003 0}", + "Class": "gmod_track_signs", + "ZOffset": 26.1538, + "Left": false, + "SignType": 44.0, + "Pos": "[-2619.125 14739.9961 -13213.5059]" + }, + "627": { + "YOffset": 10.3774, + "Angles": "{0 10.0003 0}", + "Class": "gmod_track_signs", + "ZOffset": 50.0, + "Left": false, + "SignType": 6.0, + "Pos": "[-2766.7322 14713.9688 -13213.5059]" + }, + "628": { + "YOffset": 9.2308, + "Angles": "{0 10 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 16.0, + "Pos": "[-1379.4529 14959.0527 -13219.9854]" + }, + "629": { + "YOffset": 25.0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.0, + "Left": false, + "SignType": 3.0, + "Pos": "[15540.3066 4784.3887 -13490.9629]" + }, + "630": { + "YOffset": 15.0, + "Angles": "{0 44.001 0}", + "Class": "gmod_track_signs", + "ZOffset": -38.0, + "Left": false, + "SignType": 3.0, + "Pos": "[-7784.1328 -5772.5088 -14586.2061]" + }, + "631": { + "YOffset": 15.0, + "Angles": "{359.947 182.0396 0}", + "Class": "gmod_track_signs", + "ZOffset": 13.6792, + "Left": false, + "SignType": 19.0, + "Pos": "[11469.6016 -15989.4385 -14500.4141]" + }, + "632": { + "YOffset": 19.8113, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": -35.3774, + "Left": false, + "SignType": 3.0, + "Pos": "[14971.1934 -4112.5815 -14272.4063]" + }, + "633": { + "YOffset": 31.1321, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": -50.0, + "Left": false, + "SignType": 6.0, + "Pos": "[-13671.793 -7759.2676 -13730.6963]" + }, + "634": { + "YOffset": -3.6348, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0.0, + "Left": false, + "SignType": 20.0, + "Pos": "[-3216.7432 -15214 -13680.1699]" + }, + "635": { + "YOffset": 0.0, + "Angles": "{3.2197 242.0107 0}", + "Class": "gmod_track_signs", + "ZOffset": 50.0, + "Left": false, + "SignType": 6.0, + "Pos": "[14322.8203 -10989.4482 -13664.3623]" + }, + "636": { + "YOffset": 19.8113, + "Angles": "{356.7783 62.0108 0}", + "Class": "gmod_track_signs", + "ZOffset": -12.7358, + "Left": false, + "SignType": 2.0, + "Pos": "[14074.624 -10894.9189 -13679.1025]" + }, + "637": { + "YOffset": -5.0822, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": -0.4717, + "Left": false, + "SignType": 20.0, + "Pos": "[43.3719 -14491 -13671.3057]" + }, + "638": { + "YOffset": 10.3774, + "Angles": "{0 190 0}", + "Class": "gmod_track_signs", + "ZOffset": 50.0, + "Left": false, + "SignType": 6.0, + "Pos": "[-2546.0967 13605.4082 -13215.3057]" + }, + "639": { + "YOffset": 18.0, + "Angles": "{0 190 0}", + "Class": "gmod_track_signs", + "ZOffset": -38.0, + "Left": false, + "SignType": 3.0, + "Pos": "[-2567.3113 13601.668 -13215.3057]" + }, + "640": { + "YOffset": 18.0, + "Angles": "{0 190 0}", + "Class": "gmod_track_signs", + "ZOffset": 29.717, + "Left": false, + "SignType": 35.0, + "Pos": "[-2386.8281 13633.4922 -13215.3057]" + }, + "641": { + "YOffset": 18.0, + "Angles": "{0 190 0}", + "Class": "gmod_track_signs", + "ZOffset": -0.4717, + "Left": false, + "SignType": 44.0, + "Pos": "[-2382.9287 13634.1797 -13215.3057]" + }, + "642": { + "YOffset": -34.9057, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": -50.0, + "Left": false, + "SignType": 6.0, + "Pos": "[-14610.1309 -8621.1797 -13760.1104]" + }, + "643": { + "YOffset": 21.6981, + "Angles": "{359.7647 269.5035 0}", + "Class": "gmod_track_signs", + "ZOffset": 17.4528, + "Left": false, + "SignType": 19.0, + "Pos": "[-13671.5781 6491.1748 -14057.5957]" + }, + "644": { + "YOffset": 8.4906, + "Angles": "{359.3852 357.492 0}", + "Class": "gmod_track_signs", + "ZOffset": 6.1321, + "Left": false, + "SignType": 3.0, + "Pos": "[-11945.5742 -14592.0957 -9948.8477]" + }, + "645": { + "YOffset": 9.2308, + "Angles": "{0 43.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 50.0, + "Left": false, + "SignType": 6.0, + "Pos": "[8974.8105 2728.0544 -12179.249]" + }, + "646": { + "YOffset": 17.9245, + "Angles": "{0 26 0}", + "Class": "gmod_track_signs", + "ZOffset": 47.3054, + "Left": false, + "SignType": 6.0, + "Pos": "[-10634.8848 12560.0391 -9983.5059]" + }, + "647": { + "YOffset": 63.2075, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 15.0, + "Left": false, + "SignType": 6.0, + "Pos": "[-7588.4697 -10085.207 -12625.3057]" + }, + "648": { + "YOffset": 12.3958, + "Angles": "{359.9995 180.0139 0}", + "Class": "gmod_track_signs", + "ZOffset": 50.0, + "Left": false, + "SignType": 6.0, + "Pos": "[-8074.3804 -16223.1074 -10508.8652]" + }, + "649": { + "YOffset": 12.3958, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 50.0, + "Left": false, + "SignType": 6.0, + "Pos": "[14634.6934 1752.2249 -10851.6689]" + }, + "650": { + "YOffset": 12.3958, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 16.5094, + "Left": false, + "SignType": 6.0, + "Pos": "[-15933.0059 -5110.4624 -11937.5293]" + }, + "651": { + "YOffset": 12.3958, + "Angles": "{0 44 0}", + "Class": "gmod_track_signs", + "ZOffset": 16.5094, + "Left": false, + "SignType": 6.0, + "Pos": "[-7267.7715 -12957.1943 -12014.8057]" + }, + "652": { + "YOffset": 12.3958, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 16.5094, + "Left": false, + "SignType": 6.0, + "Pos": "[-7104.5244 -9390 -12626.9063]" + }, + "653": { + "YOffset": 37.3723, + "Angles": "{357.9602 178.3177 0}", + "Class": "gmod_track_signs", + "ZOffset": 16.5094, + "Left": false, + "SignType": 6.0, + "Pos": "[11490.54 -1094.4073 -12626.498]" + }, + "654": { + "YOffset": 2.6529, + "Angles": "{0 190 0}", + "Class": "gmod_track_signs", + "ZOffset": 21.4969, + "Left": false, + "SignType": 6.0, + "Pos": "[-9181.7559 12435.3672 -13214.3057]" + }, + "655": { + "YOffset": 2.6529, + "Angles": "{0 10.5922 0}", + "Class": "gmod_track_signs", + "ZOffset": 21.4969, + "Left": false, + "SignType": 6.0, + "Pos": "[-9718.5889 13487.3662 -13213.5059]" + }, + "656": { + "YOffset": 20.0, + "Angles": "{0 223.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.283, + "Left": false, + "SignType": 1.0, + "Pos": "[5409.0215 6083.8799 -14585.5059]" + }, + "657": { + "YOffset": 20.0, + "Angles": "{0 223.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.283, + "Left": true, + "SignType": 1.0, + "Pos": "[5228.7773 6276.8232 -14585.5059]" + }, + "658": { + "YOffset": 20.0, + "Angles": "{0 223.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.283, + "Left": false, + "SignType": 10.0, + "Pos": "[8563.3906 9130.0527 -14585.5059]" + }, + "659": { + "YOffset": 20.0, + "Angles": "{0 223.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 20.283, + "Left": true, + "SignType": 10.0, + "Pos": "[8391.1543 9330.7275 -14585.5059]" + }, + "660": { + "YOffset": 20.0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 30.0, + "Left": false, + "SignType": 1.0, + "Pos": "[-8110.3521 -14599.2051 -9948.5059]" + }, + "661": { + "YOffset": 20.0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 30.0, + "Left": false, + "SignType": 12.0, + "Pos": "[-5734.1592 -14599.207 -9948.5059]" + }, + "662": { + "Angles": "{0 206 0}", + "Class": "gmod_track_signs", + "SignType": 3.0, + "Pos": "[-8014.4961 13233.123 -9983.5059]" + }, + "663": { + "YOffset": 27.3585, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 42.9245, + "Left": false, + "SignType": 2.0, + "Pos": "[-14853.5 848.1706 -9946.6055]" + }, + "664": { + "YOffset": 23.5849, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": -50.0, + "SignType": 6.0, + "Pos": "[-14853.5 1232.6711 -9947.2461]" + }, + "665": { + "YOffset": -0.9434, + "Angles": "{90 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 1.4151, + "SignType": 2.0, + "Pos": "[-4290.3442 15627.7041 -9729.9033]" + }, + "666": { + "YOffset": 33.0189, + "Angles": "{0 386 0}", + "Class": "gmod_track_signs", + "ZOffset": -4.2453, + "SignType": 2.0, + "Pos": "[-4467.7549 15569.0879 -9983.5059]" + }, + "Version": 1.2 +} \ No newline at end of file diff --git a/lua/metrostroi_data/signs_gm_metro_crossline_m12.lua b/lua/metrostroi_data/signs_gm_metro_crossline_m12.lua new file mode 100644 index 0000000..c280472 --- /dev/null +++ b/lua/metrostroi_data/signs_gm_metro_crossline_m12.lua @@ -0,0 +1,8172 @@ + + +{ + "1": + { + "LensesStr": "RR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PTOP", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[3025.2756 -14491 -13671.5059]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "1", + "NextSignal": "PTFIX", + "ARSCodes": "1" + } + ] + }, + "2": + { + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "13", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[15696.0137 -420.6255 -13563.3652]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04678", + "Lights": "4-24-1-13-3", + "NextSignal": "15", + "RouteName": "" + } + ] + }, + "3": + { + "Approve0": true, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "25", + "ARSOnly": false, + "Angles": "{0 280.5922 0}", + "Pos": "[-9673.5752 13495.7852 -13213.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "4-24-1-13-3", + "NextSignal": "27", + "Switches": "" + } + ], + "Left": false + }, + "4": + { + "Approve0": true, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "47", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-7219.5869 -9390 -12627.5713]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "4-24-1-13-3", + "NextSignal": "49", + "ARSCodes": "04" + } + ], + "Left": false + }, + "5": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "61", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[10491.9209 14572.5137 -12345.5303]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "RouteName": "", + "Lights": "4-24-1-13-3", + "NextSignal": "63", + "Switches": "" + } + ], + "Left": false + }, + "6": + { + "Approve0": true, + "LensesStr": "WY-YGR-W", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 1, + "Name": "PT6", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-3872.7312 -14490.793 -13671.5059]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "PT2-2", + "Switches": "PT1+", + "Lights": "5-35-3-4", + "NextSignal": "PT4", + "ARSCodes": "04" + }, + + { + "Emer": false, + "NextSignal": "PT4", + "ARSCodes": "4", + "Repeater": false, + "Lights": "25", + "Manual": false, + "RouteName": "", + "Switches": "PT1-" + } + ] + }, + "7": + { + "Approve0": false, + "LensesStr": "YG-RW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "PT8", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[3149.8103 -14491 -13671.5059]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-13-1-1-2", + "NextSignal": "PT6A", + "RouteName": "" + } + ], + "Left": true + }, + "8": + { + "Approve0": true, + "LensesStr": "RYY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "22M", + "ARSOnly": false, + "Angles": "{0 100.0028 0}", + "Pos": "[-2467.1089 13619.7441 -13214.9063]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "5-35-2-24-4", + "NextSignal": "20", + "ARSCodes": "04" + }, + + { + "Emer": false, + "NextSignal": "20", + "ARSCodes": "04", + "Manual": false, + "Lights": "15", + "Switches": "G2+", + "RouteName": "", + "Repeater": false + } + ], + "Left": false + }, + "9": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "24", + "ARSOnly": false, + "Angles": "{0 100.0028 0}", + "Pos": "[-9256.4492 12422.2627 -13214.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-13-13-1-2", + "NextSignal": "22A", + "Switches": "" + }, + + { + "Emer": false, + "NextSignal": "22M", + "ARSCodes": "046", + "Manual": false, + "Lights": "3-1", + "Repeater": false, + "Switches": "G2+", + "RouteName": "" + } + ], + "Left": true + }, + "10": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "42", + "ARSOnly": false, + "Angles": "{0.8241 104.0481 0}", + "Pos": "[12844.3643 -9843.0039 -12627.498]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-13-1-2", + "NextSignal": "40", + "Switches": "" + } + ] + }, + "11": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "48", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-7307.7603 -10085.1816 -12625.1289]", + "Routes": + [ + + { + "Manual": false, + "Switches": "NH1+,NH2+", + "ARSCodes": "046", + "Lights": "4-24-24-1-3", + "NextSignal": "46A", + "RouteName": "NH2-2" + }, + + { + "Emer": false, + "NextSignal": "46A", + "ARSCodes": "046", + "Repeater": false, + "Lights": "4-24-24-1-13", + "RouteName": "NH2-1", + "Switches": "NH1-,NH2-", + "Manual": false + } + ] + }, + "12": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "62", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[9843.6045 15918.0137 -12351.1494]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-13-1-2", + "NextSignal": "60", + "Switches": "" + } + ] + }, + "13": + { + "Approve0": true, + "RouteNumberSetup": "34D", + "LensesStr": "WYY-GRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OK72", + "ARSOnly": false, + "Angles": "{0 134 0}", + "Pos": "[-1882.3601 -9158.9883 -12015.1553]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "OK2-2", + "Lights": "5-35-2-24-4", + "NextSignal": "70", + "Switches": "OK1+" + }, + + { + "Emer": false, + "NextSignal": "OK12A", + "ARSCodes": "04", + "Repeater": false, + "EnRou": true, + "Lights": "5-35-35-1", + "Manual": false, + "RouteName": "OK2-4", + "Switches": "OK1-,OK2+,OK3+" + }, + + { + "Emer": false, + "NextSignal": "OK13A", + "ARSCodes": "04", + "Manual": false, + "EnRou": true, + "Lights": "5-35-1", + "Switches": "OK4-,OK2-,OK1-", + "RouteName": "OK2-3", + "Repeater": false + } + ] + }, + "14": + { + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "88", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-1773.2744 14869.207 -11351.2627]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "RouteName": "", + "Lights": "4-24-1-13-3", + "NextSignal": "86", + "Switches": "" + } + ] + }, + "15": + { + "LensesStr": "YG-RW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "RX98", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[14899.207 -5395.3511 -10851.5059]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-2", + "NextSignal": "96", + "ARSCodes": "04" + } + ] + }, + "16": + { + "Approve0": true, + "LensesStr": "YG-RW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "OK14", + "ARSOnly": false, + "Angles": "{0 134.023 0}", + "Pos": "[7951.3174 855.1014 -12014.5059]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "OK16", + "ARSCodes": "04", + "Manual": true, + "EnRou": true, + "Repeater": false, + "Lights": "3-1-2", + "RouteName": "Depot", + "Switches": "" + } + ], + "Left": false + }, + "17": + { + "LensesStr": "YWR-W", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 1, + "Double": false, + "Name": "A2", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[-10785.793 8785.9658 -11176.4063]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "A2", + "ARSCodes": "4", + "Repeater": false, + "Manual": true, + "Lights": "3-2-1b", + "Switches": "", + "RouteName": "" + } + ], + "Left": false + }, + "18": + { + "Approve0": true, + "RouteNumberSetup": "12", + "LensesStr": "WY-RW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OK3", + "ARSOnly": false, + "Angles": "{0 313.998 0}", + "Pos": "[2445.7371 -4094.8101 -12014.7061]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "ARSCodes": "04", + "Lights": "3-3-23-1", + "NextSignal": "OKFIX2", + "RouteName": "OK3-1", + "Switches": "OK4+,OK5+,OK6-" + }, + + { + "Emer": false, + "NextSignal": "OKFIX1A", + "ARSCodes": "04", + "Manual": false, + "EnRou": true, + "Lights": "3-23-1", + "Repeater": false, + "Switches": "OK4-,OK2-,OK1-", + "RouteName": "OK3-2" + } + ], + "Left": false + }, + "19": + { + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OKFIX1", + "ARSOnly": true, + "Angles": "{0 313.998 0}", + "Pos": "[438.429 -5516.7139 -12014.7061]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "6", + "RouteName": "", + "Lights": "2-2-1", + "NextSignal": "", + "Switches": "" + } + ], + "Left": true + }, + "20": + { + "LensesStr": "WRW", + "RouteNumber": "2", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "OKFIX1A", + "ARSOnly": true, + "Angles": "{0 315.3021 0}", + "Pos": "[477.1119 -6367.6494 -12014.8057]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "2-2-1", + "NextSignal": "OKOP", + "ARSCodes": "4" + } + ], + "Left": false + }, + "21": + { + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OKFIXABD", + "ARSOnly": true, + "Angles": "{0 314 0}", + "Pos": "[-1737.0115 -9018.627 -12015.1553]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "4", + "Lights": "2-2-1", + "NextSignal": "OKOP", + "RouteName": "" + } + ], + "Left": true + }, + "22": + { + "LensesStr": "YG-RW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "OK74", + "ARSOnly": false, + "Angles": "{0 134 0}", + "Pos": "[-6663.0713 -13775.667 -12014.957]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-13-13-1-2", + "NextSignal": "OK72A", + "Switches": "OK1+" + }, + + { + "Emer": false, + "NextSignal": "OK72A", + "ARSCodes": "04", + "Repeater": false, + "Lights": "3-13-13-1-2", + "RouteName": "OK3-2", + "Switches": "OK1-,OK2-,OK4-", + "Manual": false + } + ] + }, + "23": + { + "LensesStr": "RR", + "RouteNumber": "2", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "PassOcc": true, + "Name": "OKOP", + "ARSOnly": false, + "Angles": "{0 314 0}", + "Pos": "[-6562.2007 -13678.2578 -12014.957]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "1", + "NextSignal": "*", + "ARSCodes": "1" + } + ] + }, + "24": + { + "Approve0": false, + "LensesStr": "WYG-RW", + "RouteNumber": "1", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "OK71", + "ARSOnly": false, + "Angles": "{0 314 0}", + "Pos": "[-2550.196 -8402.0518 -12014.7539]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "RouteName": "OK1-1", + "Lights": "4-24-24-2-3", + "NextSignal": "73A", + "Switches": "OK6+", + "ARSCodes": "046" + }, + + { + "Emer": false, + "NextSignal": "73A", + "ARSCodes": "04", + "Manual": false, + "Lights": "4-4-1", + "Repeater": false, + "Switches": "OK6-", + "RouteName": "" + } + ], + "Left": false + }, + "25": + { + "RouteNumberSetup": "34", + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OKD", + "ARSOnly": false, + "Angles": "{0 134 0}", + "Pos": "[-2651.9604 -8500.3242 -12014.7539]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "Switches": "OK4+,OK5+,OK6-", + "Lights": "2-2-1", + "NextSignal": "OK13", + "ARSCodes": "04", + "RouteName": "OK1-3" + }, + + { + "Emer": false, + "NextSignal": "OK12A", + "ARSCodes": "04", + "Manual": false, + "EnRou": true, + "Lights": "2-2-1", + "Switches": "OK6-,OK5-,OK3-", + "RouteName": "OK1-4", + "Repeater": false + } + ], + "Left": false + }, + "26": + { + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OKFIXAL", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[7104.5596 404.0235 -12014.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "4", + "RouteName": "", + "Lights": "2-2-1", + "NextSignal": "", + "Switches": "" + } + ], + "Left": true + }, + "27": + { + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OKFIXC", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[2051.1018 -4475.8784 -12014.7061]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "4", + "RouteName": "", + "Lights": "2-2-1", + "NextSignal": "OKFIXAL", + "Switches": "" + } + ], + "Left": true + }, + "28": + { + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "OKFIX1ABC", + "ARSOnly": true, + "Angles": "{0 325.0512 0}", + "Pos": "[-761.1787 -7971.9238 -12014.8057]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "4", + "Lights": "2-2-1", + "NextSignal": "", + "RouteName": "" + } + ], + "Left": false + }, + "29": + { + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "OKFIX1ABCA", + "ARSOnly": true, + "Angles": "{0 313.998 0}", + "Pos": "[1086.4672 -5712.7651 -12014.7061]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "4", + "Lights": "2-2-1", + "NextSignal": "", + "RouteName": "" + } + ], + "Left": false + }, + "30": + { + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "OKFIX1BCX", + "ARSOnly": true, + "Angles": "{0 313.998 0}", + "Pos": "[3157.3645 -3774.6667 -12014.7061]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "2-2-1", + "NextSignal": "", + "ARSCodes": "4" + } + ], + "Left": false + }, + "31": + { + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "OKFIX1BCX", + "ARSOnly": true, + "Angles": "{0 313.998 0}", + "Pos": "[2868.1089 -4054.0823 -12014.7061]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "2-2-1", + "NextSignal": "", + "ARSCodes": "4" + } + ], + "Left": false + }, + "32": + { + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OKFIXCB", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[2225.8696 -4674.2422 -12014.7061]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "4", + "Lights": "2-2-1", + "NextSignal": "OK12", + "RouteName": "" + } + ], + "Left": true + }, + "33": + { + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "OKFIX1BV", + "ARSOnly": true, + "Angles": "{0 313.998 0}", + "Pos": "[975.9998 -5574.6738 -12027.6689]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "4", + "RouteName": "", + "Lights": "2-2-1", + "NextSignal": "", + "Switches": "" + } + ], + "Left": true + }, + "34": + { + "Approve0": true, + "LensesStr": "YG-RW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "OK13", + "ARSOnly": false, + "Angles": "{0 134.002 0}", + "Pos": "[7762.0908 1039.7903 -12014.5059]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "A1", + "ARSCodes": "4", + "Repeater": false, + "Manual": true, + "Lights": "3-4", + "Switches": "", + "RouteName": "" + } + ], + "Left": false + }, + "35": + { + "Approve0": true, + "LensesStr": "GRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 2, + "Double": false, + "Name": "E2", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[-10786.3066 10031.7959 -11176.3057]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "OK4", + "ARSCodes": "4", + "Repeater": false, + "Manual": true, + "Lights": "2-1", + "Switches": "", + "RouteName": "" + } + ], + "Left": false + }, + "36": + { + "Approve0": true, + "LensesStr": "WY-RW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 1, + "Name": "PT2", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-8715.5967 -14491.793 -13669.6807]", + "Routes": + [ + + { + "Manual": false, + "Switches": "PT1-,PT2-", + "ARSCodes": "04", + "Lights": "3-23-1", + "NextSignal": "PT5", + "RouteName": "PT1-2" + } + ] + }, + "37": + { + "Approve0": true, + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PTFIX2A", + "ARSOnly": true, + "Angles": "{358.9886 77.9649 0}", + "Pos": "[-5218.8311 -15113.0771 -13670.2939]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "4", + "RouteName": "", + "Lights": "2-1", + "NextSignal": "PTFIX2A", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": true + }, + "38": + { + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "9", + "ARSOnly": false, + "Angles": "{0.691 93.7191 0}", + "Pos": "[8512.2637 -15183.292 -13670.3994]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04678", + "Lights": "4-24-1-13-3", + "NextSignal": "11", + "RouteName": "" + } + ] + }, + "39": + { + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "11", + "ARSOnly": false, + "Angles": "{2.2856 166.3855 0}", + "Pos": "[15381.6699 -9915.4717 -13670.4023]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04678", + "Lights": "4-24-1-13-3", + "NextSignal": "13", + "RouteName": "" + } + ] + }, + "40": + { + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "15", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[15696.0137 9001.2061 -13398.6182]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04678", + "Lights": "4-24-1-13-3", + "NextSignal": "17", + "RouteName": "" + } + ] + }, + "41": + { + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "17", + "ARSOnly": false, + "Angles": "{3.5037 254.2031 0}", + "Pos": "[11066.2725 15213.2656 -13259.7324]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-2", + "NextSignal": "19", + "ARSCodes": "046" + }, + + { + "Emer": false, + "NextSignal": "19", + "ARSCodes": "04", + "Repeater": false, + "Lights": "3-12", + "Manual": false, + "RouteName": "", + "Switches": "G1+" + } + ], + "Left": false + }, + "42": + { + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "23", + "ARSOnly": false, + "Angles": "{0 280.0026 0}", + "Pos": "[-2555.8091 14751.5371 -13213.6768]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-13-13-1-2", + "NextSignal": "25A", + "Switches": "" + } + ], + "Left": false + }, + "43": + { + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "19", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[6413.542 15308.0137 -13222.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "4-24-1-13-3", + "NextSignal": "21M", + "Switches": "" + }, + + { + "Emer": false, + "NextSignal": "21M", + "ARSCodes": "046", + "Repeater": false, + "Lights": "1-4", + "Manual": false, + "RouteName": "", + "Switches": "G1+" + } + ], + "Left": false + }, + "44": + { + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "27", + "ARSOnly": false, + "Angles": "{0 320.5412 0}", + "Pos": "[-13869.6211 10996.9082 -13213.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-13-1-2", + "NextSignal": "29", + "Switches": "" + } + ], + "Left": false + }, + "45": + { + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "29", + "ARSOnly": false, + "Angles": "{0 358.999 0}", + "Pos": "[-15617.4238 2966.8962 -13213.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-13-1-2", + "NextSignal": "31", + "Switches": "" + } + ], + "Left": false + }, + "46": + { + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "31", + "ARSOnly": false, + "Angles": "{2.2673 61.811 0}", + "Pos": "[-13138.9619 -4455.4419 -13171.4951]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-13-1-2", + "NextSignal": "33", + "Switches": "" + } + ], + "Left": false + }, + "47": + { + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "33", + "ARSOnly": false, + "Angles": "{0 100.039 0}", + "Pos": "[-5054.6221 -3911.7246 -12933.5742]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-13-1-2", + "NextSignal": "35", + "Switches": "" + } + ], + "Left": false + }, + "48": + { + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "35", + "ARSOnly": false, + "Angles": "{0 100.094 0}", + "Pos": "[2595.9761 -2556.1523 -12647.6865]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-13-1-2", + "NextSignal": "37", + "RouteName": "" + } + ], + "Left": false + }, + "49": + { + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "37", + "ARSOnly": false, + "Angles": "{358.9138 94.9437 0}", + "Pos": "[10843.8232 -1120.7048 -12626.4961]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-2", + "NextSignal": "NH39", + "ARSCodes": "046" + } + ], + "Left": false + }, + "50": + { + "LensesStr": "YY-GRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "NH39", + "ARSOnly": false, + "Angles": "{357.3619 352.0623 0}", + "Pos": "[15082.2031 -6281.0596 -12626.502]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "4-24-1-13-3", + "NextSignal": "NH41", + "Switches": "" + } + ], + "Left": true + }, + "51": + { + "LensesStr": "YG-RW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "NH45", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-81.7338 -9388.9258 -12626.2188]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-13-1-2", + "NextSignal": "47A", + "ARSCodes": "046" + } + ], + "Left": false + }, + "52": + { + "Approve0": true, + "LensesStr": "YG-RW", + "RouteNumber": "1", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "NH43", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[4527.4878 -9388.9863 -12626.5059]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "ARSCodes": "046", + "Lights": "3-13-1-1-2", + "NextSignal": "NH45", + "RouteName": "NH1-1", + "Switches": "NH1+,NH2+" + }, + + { + "Emer": false, + "NextSignal": "NH45", + "ARSCodes": "4", + "Repeater": false, + "Lights": "0", + "Manual": false, + "RouteName": "NH2-1", + "Switches": "NH1-,NH2-" + } + ], + "Left": false + }, + "53": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "49", + "ARSOnly": false, + "Angles": "{356.283 250.9583 0}", + "Pos": "[-12065.9072 -9194.2607 -12697.3633]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-2", + "NextSignal": "51", + "ARSCodes": "046" + } + ], + "Left": true + }, + "54": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "51", + "ARSOnly": false, + "Angles": "{0.0001 180.0061 0}", + "Pos": "[-14894.0635 -2588.3157 -12809.3018]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-2", + "NextSignal": "53", + "ARSCodes": "046" + } + ], + "Left": true + }, + "55": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "53", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[-14894.0137 5209.707 -12672.8945]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "RouteName": "", + "Lights": "4-24-1-13-3", + "NextSignal": "55", + "Switches": "" + } + ], + "Left": false + }, + "56": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "55", + "ARSOnly": false, + "Angles": "{356.4991 133.6252 0}", + "Pos": "[-12792.9414 12574.5293 -12661.4063]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "RouteName": "", + "Lights": "4-24-1-13-3", + "NextSignal": "57", + "Switches": "" + } + ], + "Left": true + }, + "57": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "57", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-4886.5894 14572.2129 -12638.9365]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "RouteName": "", + "Lights": "4-24-1-13-3", + "NextSignal": "59", + "Switches": "" + } + ], + "Left": true + }, + "58": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "59", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[2570.9216 14572.2129 -12509.1494]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "RouteName": "", + "Lights": "4-24-1-13-3", + "NextSignal": "61", + "Switches": "" + } + ], + "Left": false + }, + "59": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "63", + "ARSOnly": false, + "Angles": "{358.4429 354.4836 0}", + "Pos": "[15006.3027 9724.9648 -12337.7051]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "4-24-1-13-3", + "NextSignal": "65", + "RouteName": "" + } + ], + "Left": true + }, + "60": + { + "Approve0": false, + "LensesStr": "YY-GRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "OK67", + "ARSOnly": false, + "Angles": "{0 313.998 0}", + "Pos": "[3687.0337 -2380.6206 -12014.3057]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "4-24-1-13-13-3", + "NextSignal": "OK69", + "Switches": "OK6+" + }, + + { + "Emer": false, + "NextSignal": "OK69", + "ARSCodes": "04", + "Manual": false, + "Lights": "4-24-1", + "Repeater": false, + "Switches": "OK6-", + "RouteName": "" + } + ], + "Left": false + }, + "61": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "75", + "ARSOnly": false, + "Angles": "{359.1484 268.0276 0}", + "Pos": "[-11910.5625 -15337.8154 -12014.8008]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-13-1-2", + "NextSignal": "77", + "Switches": "" + } + ], + "Left": true + }, + "62": + { + "Approve0": false, + "RouteNumberSetup": "XX", + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "77", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[-15668.9941 -9417.4912 -12014.5059]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-13-1-2", + "NextSignal": "79", + "RouteName": "" + } + ], + "Left": false + }, + "63": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "79", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[-15668.3555 -1158.6532 -11771.4873]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04678", + "Lights": "4-24-1-13-3", + "NextSignal": "81", + "RouteName": "" + } + ], + "Left": false + }, + "64": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "81", + "ARSOnly": false, + "Angles": "{359.7632 179.4941 0}", + "Pos": "[-15667.6758 6668.6279 -11520.3359]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04678", + "Lights": "4-24-1-13-3", + "NextSignal": "83", + "RouteName": "" + } + ], + "Left": false + }, + "65": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "83", + "ARSOnly": false, + "Angles": "{357.55 107.2315 0}", + "Pos": "[-11006.9922 14148.0947 -11526.1152]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "RouteName": "", + "Lights": "4-24-1-13-3", + "NextSignal": "85", + "Switches": "" + } + ], + "Left": false + }, + "66": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "85", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-1649.2836 14606.4941 -11348.835]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "4-24-1-13-3", + "NextSignal": "87", + "ARSCodes": "04678" + } + ], + "Left": false + }, + "67": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "87", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[7711.7886 14604.7676 -10965.958]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "4-24-1-13-3", + "NextSignal": "89", + "ARSCodes": "04678" + } + ], + "Left": false + }, + "68": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "89", + "ARSOnly": false, + "Angles": "{356.9894 26.8032 0}", + "Pos": "[15364.3965 12772.1162 -10942.668]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "4-24-1-13-3", + "NextSignal": "91", + "ARSCodes": "046" + } + ], + "Left": true + }, + "69": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "91", + "ARSOnly": false, + "Angles": "{358.9663 341.8234 0}", + "Pos": "[15294.2803 5613.0527 -10882.5039]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-2", + "NextSignal": "93", + "ARSCodes": "046" + } + ], + "Left": true + }, + "70": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YR-GW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "OK7", + "ARSOnly": false, + "Angles": "{359.7022 0 0}", + "Pos": "[13756.9697 9969.9434 -11555.0625]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "ARSCodes": "04", + "Lights": "2-1-3", + "NextSignal": "OK5", + "RouteName": "", + "Switches": "" + } + ], + "Left": true + }, + "71": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YR-GW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "OK11", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-3934.3801 15569.207 -11194.3867]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "ARSCodes": "04", + "Lights": "2-1-3", + "NextSignal": "OK9", + "RouteName": "", + "Switches": "" + } + ], + "Left": true + }, + "72": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YR-GW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "OK9", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[7182.019 15569.207 -11492.8408]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "ARSCodes": "04", + "Lights": "2-1-3", + "NextSignal": "OK7", + "RouteName": "", + "Switches": "" + } + ], + "Left": false + }, + "73": + { + "Approve0": true, + "RouteNumberSetup": "", + "LensesStr": "GY", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "OK6///", + "ARSOnly": false, + "Angles": "{359.5052 0 0}", + "Pos": "[14676.1924 10072.0566 -11509.1523]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "OK6", + "ARSCodes": "04", + "Repeater": true, + "EnRou": true, + "Lights": "2-1", + "Manual": false, + "Switches": "", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "74": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "25A", + "ARSOnly": true, + "Angles": "{0 280.0026 0}", + "Pos": "[-7386.0928 13899.6016 -13213.9307]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "4-24-1-13-3", + "NextSignal": "25", + "Switches": "" + } + ], + "Left": false + }, + "75": + { + "Approve0": true, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "96", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[14899.3066 1247.2522 -10851.3682]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04", + "Lights": "3-13-1-2", + "NextSignal": "94", + "RouteName": "" + } + ] + }, + "76": + { + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "94", + "ARSOnly": false, + "Angles": "{1.4895 165.8727 0}", + "Pos": "[15782.3486 6384.7588 -10889.3652]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-2", + "NextSignal": "92", + "ARSCodes": "046" + } + ] + }, + "77": + { + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "92", + "ARSOnly": false, + "Angles": "{3.0184 206.8141 0}", + "Pos": "[15596.8555 12896.1475 -10928.7012]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-13-1-2", + "NextSignal": "90", + "RouteName": "" + } + ] + }, + "78": + { + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "90", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[7890.2471 14870.999 -10959.8613]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "RouteName": "", + "Lights": "4-24-1-13-3", + "NextSignal": "88", + "Switches": "" + } + ] + }, + "79": + { + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "86", + "ARSOnly": false, + "Angles": "{2.4524 287.2378 0}", + "Pos": "[-11151.0576 14379.502 -11514.3428]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "RouteName": "", + "Lights": "4-24-1-13-3", + "NextSignal": "84", + "Switches": "" + } + ] + }, + "80": + { + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "84", + "ARSOnly": false, + "Angles": "{0.691 357.4102 0}", + "Pos": "[-15918.2764 7211.5029 -11518.8721]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "RouteName": "", + "Lights": "4-24-1-13-3", + "NextSignal": "82", + "Switches": "" + } + ] + }, + "81": + { + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "82", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[-15933.0059 -2337.0659 -11820.1865]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "RouteName": "", + "Lights": "4-24-1-13-3", + "NextSignal": "80", + "Switches": "" + } + ] + }, + "82": + { + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "80", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[-15933.1064 -10819.4277 -12014.666]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "RouteName": "", + "Lights": "4-24-1-13-3", + "NextSignal": "78", + "Switches": "" + } + ] + }, + "83": + { + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "78", + "ARSOnly": false, + "Angles": "{0.0146 43.0263 0}", + "Pos": "[-14940.3252 -14590.8105 -12014.4922]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "4-24-1-13-13-3", + "NextSignal": "76", + "RouteName": "" + } + ] + }, + "84": + { + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "76", + "ARSOnly": false, + "Angles": "{2.5508 98.7079 0}", + "Pos": "[-10084.6729 -16006.2158 -12014.8848]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-1-2", + "NextSignal": "OK74", + "ARSCodes": "046" + } + ] + }, + "85": + { + "Approve0": true, + "LensesStr": "YYG-RW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OK72A", + "ARSOnly": true, + "Angles": "{0 134 0}", + "Pos": "[-3449.1013 -10669.9297 -12015.1016]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "OK1+", + "Lights": "4-24-1-13-3", + "NextSignal": "OK72", + "ARSCodes": "046" + }, + + { + "Manual": false, + "Switches": "OK1-", + "Emer": false, + "ARSCodes": "04", + "NextSignal": "OK72", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true + }, + "86": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "70", + "ARSOnly": false, + "Angles": "{0 133.998 0}", + "Pos": "[1427.5693 -5963.0381 -12014.9063]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-13-1-2", + "NextSignal": "68", + "RouteName": "" + } + ] + }, + "87": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "68", + "ARSOnly": false, + "Angles": "{0 134 0}", + "Pos": "[7432.7119 -164.2865 -12043.3066]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-13-1-2", + "NextSignal": "66", + "RouteName": "" + } + ] + }, + "88": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "66", + "ARSOnly": false, + "Angles": "{0 134 0}", + "Pos": "[13568.9395 5763.4248 -12329.043]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-2", + "NextSignal": "64", + "ARSCodes": "046" + } + ] + }, + "89": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "64", + "ARSOnly": false, + "Angles": "{1.815 191.1715 0}", + "Pos": "[16067.835 13057.4805 -12336.999]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-13-1-2", + "NextSignal": "62", + "Switches": "" + } + ] + }, + "90": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "60", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[1141.0646 15918.0137 -12490.2939]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "RouteName": "", + "Lights": "4-24-1-13-3", + "NextSignal": "58", + "Switches": "" + } + ] + }, + "91": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "58", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-7297.5503 15918.0137 -12630.4043]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "RouteName": "", + "Lights": "4-24-1-13-3", + "NextSignal": "56", + "Switches": "" + } + ] + }, + "92": + { + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "OKFIX2", + "ARSOnly": true, + "Angles": "{0 313.2635 0}", + "Pos": "[383.1631 -6083.9614 -12014.8057]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "OK71", + "ARSCodes": "4", + "Repeater": false, + "Lights": "2-2-1", + "Switches": "", + "RouteName": "", + "Manual": false + } + ], + "Left": false + }, + "93": + { + "Approve0": true, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "73", + "ARSOnly": false, + "Angles": "{0 314 0}", + "Pos": "[-7296.7764 -12985.25 -12014.7568]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-2", + "NextSignal": "75", + "ARSCodes": "04" + } + ], + "Left": false + }, + "94": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "56", + "ARSOnly": false, + "Angles": "{2.8878 338.7824 0}", + "Pos": "[-15117.2021 11625.2441 -12632.6035]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "RouteName": "", + "Lights": "4-24-1-13-3", + "NextSignal": "54", + "Switches": "" + } + ] + }, + "95": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "54", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[-15742.9141 2402.3086 -12716.5664]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "RouteName": "", + "Lights": "4-24-1-13-3", + "NextSignal": "52", + "Switches": "" + } + ] + }, + "96": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "52", + "ARSOnly": false, + "Angles": "{2.7887 14.5355 0}", + "Pos": "[-15584.8672 -7064.6675 -12772.5391]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "RouteName": "", + "Lights": "4-24-1-13-13-3", + "NextSignal": "50", + "Switches": "" + } + ] + }, + "97": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "50", + "ARSOnly": false, + "Angles": "{0.6865 88.0806 0}", + "Pos": "[-11959.7451 -10081.7363 -12680.1904]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-1-2", + "NextSignal": "48", + "ARSCodes": "046" + } + ] + }, + "98": + { + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "46A", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[-2705.5579 -10085 -12625.5098]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "4-24-1-13-3", + "NextSignal": "NH46", + "RouteName": "" + } + ] + }, + "99": + { + "Approve0": false, + "LensesStr": "YG-RW", + "RouteNumber": "F", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "NH44", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[4634.3086 -10084.7949 -12626.5059]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "RouteName": "", + "Lights": "3-13-1-2", + "NextSignal": "42", + "Switches": "", + "ARSCodes": "046" + } + ] + }, + "100": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "40", + "ARSOnly": false, + "Angles": "{0.5561 192.6454 0}", + "Pos": "[15263.9004 -3209.0369 -12627.498]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-13-1-2", + "NextSignal": "38", + "Switches": "" + } + ] + }, + "101": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "38", + "ARSOnly": false, + "Angles": "{0 280 0}", + "Pos": "[8595.1406 -605.4828 -12627.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-13-1-2", + "NextSignal": "36", + "Switches": "" + } + ] + }, + "102": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "36", + "ARSOnly": false, + "Angles": "{0 280.048 0}", + "Pos": "[-327.524 -2182.7544 -12739.8506]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-2", + "NextSignal": "32", + "ARSCodes": "046" + } + ] + }, + "103": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "32", + "ARSOnly": false, + "Angles": "{359.6 280 0}", + "Pos": "[-9020.7461 -3719.1343 -13105.4277]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-2", + "NextSignal": "32", + "ARSCodes": "046" + } + ] + }, + "104": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "26", + "ARSOnly": false, + "Angles": "{0 136.4995 0}", + "Pos": "[-13166.248 10376.3223 -13214.5059]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-13-1-1-2", + "NextSignal": "24", + "RouteName": "" + }, + + { + "Emer": false, + "NextSignal": "24", + "ARSCodes": "046", + "Manual": false, + "Lights": "3-1-12", + "Repeater": false, + "Switches": "G2+", + "RouteName": "" + } + ], + "Left": true + }, + "105": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "28", + "ARSOnly": false, + "Angles": "{0 177.992 0}", + "Pos": "[-15258.6406 4696.4512 -13214.5059]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-2", + "NextSignal": "26", + "ARSCodes": "046" + } + ], + "Left": true + }, + "106": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "30", + "ARSOnly": false, + "Angles": "{358.7955 193.4312 0}", + "Pos": "[-15018.1416 -636.1043 -13210.6396]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "4-24-1-13-3", + "NextSignal": "28", + "Switches": "" + } + ], + "Left": true + }, + "107": + { + "Approve0": true, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "22A", + "ARSOnly": true, + "Angles": "{0 100.0028 0}", + "Pos": "[-4981.3384 13176.293 -13214.8057]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "4-24-1-13-3", + "NextSignal": "22M", + "RouteName": "" + } + ], + "Left": false + }, + "108": + { + "Approve0": true, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "18", + "ARSOnly": false, + "Angles": "{359.4979 90 0}", + "Pos": "[9287.3418 13981.0049 -13285.8311]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "4-24-1-13-3", + "NextSignal": "16", + "RouteName": "" + } + ], + "Left": false + }, + "109": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "16", + "ARSOnly": false, + "Angles": "{358.2238 5.0176 0}", + "Pos": "[14642.7441 8682.9434 -13417.5488]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "4-24-1-13-3", + "NextSignal": "14", + "ARSCodes": "046" + } + ], + "Left": true + }, + "110": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "10", + "ARSOnly": false, + "Angles": "{356.7799 297.9683 0}", + "Pos": "[11121.9326 -13533.6953 -13671.4033]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "4-24-1-13-3", + "NextSignal": "PT8", + "ARSCodes": "0467" + } + ], + "Left": true + }, + "111": + { + "Approve0": false, + "LensesStr": "WR-W", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2, + "Name": "PT6A", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-859.6832 -14491 -13671.4219]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "2-1", + "NextSignal": "PT6", + "RouteName": "" + } + ] + }, + "112": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "12", + "ARSOnly": false, + "Angles": "{359.3085 357.4104 0}", + "Pos": "[14656.127 -7010.9858 -13671.4014]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04678", + "Lights": "4-24-1-13-3", + "NextSignal": "10", + "RouteName": "" + } + ], + "Left": true + }, + "113": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "14", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[14673.0137 64.6657 -13568.5322]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "RouteName": "", + "Lights": "4-24-1-13-3", + "NextSignal": "12", + "Switches": "" + } + ], + "Left": false + }, + "114": + { + "Approve0": false, + "LensesStr": "YG-RW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "OK69", + "ARSOnly": false, + "Angles": "{0 313.998 0}", + "Pos": "[216.4562 -5730.7402 -12014.9063]", + "Routes": + [ + + { + "Manual": false, + "Switches": "OK6+", + "ARSCodes": "046", + "Lights": "3-13-1-1-2", + "NextSignal": "OK71", + "RouteName": "OK1-1" + }, + + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "24", + "Repeater": false, + "Lights": "13", + "Manual": false, + "RouteName": "", + "Switches": "OK6-" + } + ], + "Left": false + }, + "115": + { + "Approve0": true, + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PTFIX3", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-7331.9927 -14492.2109 -13670.5059]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "PT4", + "ARSCodes": "04", + "Repeater": true, + "Lights": "2-1", + "Switches": "", + "RouteName": "", + "Manual": false + } + ] + }, + "116": + { + "Approve0": true, + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PTFIX4", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-5565.2207 -14490.793 -13671.5059]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "PT4", + "ARSCodes": "04", + "Repeater": true, + "Lights": "2-1", + "Switches": "", + "RouteName": "", + "Manual": false + } + ] + }, + "117": + { + "Approve0": true, + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PTOPX1", + "ARSOnly": true, + "Angles": "{1.9663 90.018 0}", + "Pos": "[-6922.707 -14492.3867 -13670.5]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "PTOP", + "ARSCodes": "04", + "Repeater": true, + "Lights": "2-1", + "Switches": "PT1+", + "RouteName": "", + "Manual": false + }, + + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "Switches": "PT1-", + "NextSignal": "PTOPX1", + "ARSCodes": "4", + "Manual": false + } + ] + }, + "118": + { + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OKFIX1T", + "ARSOnly": true, + "Angles": "{0 130.6091 0}", + "Pos": "[9.7016 -6422.3735 -12014.8057]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "OK3-,OK5-", + "Lights": "2-2-1", + "NextSignal": "OK12", + "ARSCodes": "4" + } + ], + "Left": true + }, + "119": + { + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "OKFIX1", + "ARSOnly": true, + "Angles": "{0 301.2145 0}", + "Pos": "[-1302.4165 -7321.1641 -12014.8057]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "OK71", + "ARSCodes": "4", + "Repeater": true, + "Lights": "2-2-1", + "Switches": "", + "RouteName": "", + "Manual": false + } + ], + "Left": true + }, + "120": + { + "Approve0": true, + "RouteNumberSetup": "12", + "LensesStr": "WY-RW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OK4", + "ARSOnly": false, + "Angles": "{0 313.998 0}", + "Pos": "[2651.0894 -4263.6406 -12014.7061]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "RouteName": "OK4-1", + "Lights": "3-1", + "NextSignal": "OKFIX2", + "Switches": "OK3-,OK5-,OK6-", + "ARSCodes": "04" + }, + + { + "Emer": false, + "NextSignal": "OKFIX1A", + "ARSCodes": "04", + "Repeater": false, + "EnRou": true, + "Lights": "3-1", + "RouteName": "OK4-2", + "Switches": "OK1-,OK3+,OK2+", + "Manual": false + } + ], + "Left": false + }, + "121": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YG-RW", + "RouteNumber": "4", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "OK12A", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[4328.3379 -2643.8457 -12014.7061]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "OK12", + "ARSCodes": "4", + "Manual": false, + "EnRou": true, + "Lights": "3-4", + "Repeater": false, + "Switches": "", + "RouteName": "" + } + ], + "Left": false + }, + "122": + { + "Approve0": false, + "LensesStr": "YG-RW", + "RouteNumber": "3", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "OK13A", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[4139.2197 -2459.4712 -12014.7061]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "OK13", + "ARSCodes": "4", + "Repeater": false, + "Lights": "3-4", + "Manual": false, + "Switches": "", + "RouteName": "" + } + ], + "Left": true + }, + "123": + { + "LensesStr": "WY-RW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "RX3", + "ARSOnly": false, + "Angles": "{0.4673 178.4838 0}", + "Pos": "[14631.5742 -8225.0703 -10852.1484]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "RX3-2", + "Lights": "3-3-23-1", + "NextSignal": "RXAFIX", + "Switches": "RX1-,RX2-,RX4+,RX3+" + } + ], + "Left": false + }, + "124": + { + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "OKFIX1BBC", + "ARSOnly": true, + "Angles": "{0 135.92 0}", + "Pos": "[346.5754 -6501.0967 -12014.8057]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "2-2-1", + "NextSignal": "OK12", + "ARSCodes": "4" + } + ], + "Left": true + }, + "125": + { + "Approve0": true, + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PTFIX", + "ARSOnly": true, + "Angles": "{359.0027 90.0027 0}", + "Pos": "[-5445.6621 -15216.6826 -13670.5039]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "PT5", + "ARSCodes": "4", + "Manual": false, + "Lights": "2-1", + "Repeater": true, + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true + }, + "126": + { + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 2, + "Name": "PTD", + "Angles": "{0 270 0}", + "Pos": "[-3486.1821 -15217.207 -13670.5059]", + "Routes": + [ + + { + "Manual": false, + "Switches": "PT2+", + "ARSCodes": "4", + "Lights": "2", + "NextSignal": "PTFIX", + "RouteName": "PT1-1" + }, + + { + "Emer": false, + "NextSignal": "PTFIX2AB", + "ARSCodes": "4", + "Repeater": false, + "Lights": "2-2-1", + "RouteName": "PT1-2", + "Switches": "PT2-,PT1-", + "Manual": false + } + ] + }, + "127": + { + "Approve0": true, + "LensesStr": "YGR-W", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 1, + "Name": "PT5", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-3768.8096 -15217.207 -13670.5059]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-2", + "NextSignal": "5A", + "ARSCodes": "046" + }, + + { + "Emer": false, + "NextSignal": "5A", + "ARSCodes": "046", + "Repeater": false, + "Lights": "3-1", + "Manual": false, + "RouteName": "", + "Switches": "G1+" + } + ] + }, + "128": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "73A", + "ARSOnly": true, + "Angles": "{0 314 0}", + "Pos": "[-5652.4971 -11399.9512 -12014.7822]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-13-1-2", + "NextSignal": "73", + "Switches": "" + } + ], + "Left": false + }, + "129": + { + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "RX97", + "ARSOnly": false, + "Angles": "{356.5696 324.4492 0}", + "Pos": "[13214.1416 -13258.9482 -10859.5801]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "RX99", + "ARSCodes": "4", + "Repeater": false, + "Lights": "2-1", + "Switches": "", + "RouteName": "", + "Manual": false + } + ], + "Left": true + }, + "130": + { + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "RX99", + "ARSOnly": false, + "Angles": "{359.0889 274.9127 0}", + "Pos": "[7888.647 -15900.1221 -10854.0557]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "4", + "RouteName": "", + "Lights": "2", + "NextSignal": "RX99", + "Switches": "" + } + ], + "Left": true + }, + "131": + { + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "47A", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-4706.4214 -9390 -12626.7656]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-13-1-2", + "NextSignal": "47", + "Switches": "" + } + ], + "Left": false + }, + "132": + { + "RouteNumberSetup": "WX", + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "OK18", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[6664.7222 16089.2051 -11476.8057]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "OK20", + "ARSCodes": "04", + "Repeater": false, + "Manual": true, + "Lights": "3-1-2", + "Switches": "", + "RouteName": "Depot" + } + ], + "NonAutoStop": false, + "Left": false + }, + "133": + { + "RouteNumberSetup": "WX", + "LensesStr": "YGR", + "RouteNumber": "D", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "OK16", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[14676.207 10890.5078 -11482.1094]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "OK18", + "ARSCodes": "04", + "Manual": true, + "EnRou": true, + "Repeater": false, + "Lights": "3-1-2", + "RouteName": "Depot", + "Switches": "" + } + ], + "NonAutoStop": false, + "Left": false + }, + "134": + { + "Approve0": true, + "LensesStr": "", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2, + "Double": false, + "Name": "OK12", + "ARSOnly": false, + "Angles": "{0 133.998 0}", + "Pos": "[6453.1636 -592.0665 -12014.5059]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "OK14", + "ARSCodes": "04", + "Repeater": false, + "Lights": "0", + "Manual": false, + "Switches": "", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "135": + { + "LensesStr": "YGRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 2, + "Double": false, + "Name": "E1", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[-10521.6934 10062.9082 -11176.6055]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "OK11", + "ARSCodes": "14", + "Repeater": false, + "Manual": true, + "Lights": "3-13-1-2", + "Switches": "", + "RouteName": "" + } + ], + "Left": false + }, + "136": + { + "LensesStr": "YWR-W", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 1, + "Double": false, + "Name": "A1", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[-10521.793 8769.7148 -11176.6055]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "A1", + "ARSCodes": "4", + "Repeater": false, + "Manual": true, + "Lights": "3-2-1b", + "Switches": "", + "RouteName": "" + } + ], + "Left": false + }, + "137": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YR-GW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "OK5", + "ARSOnly": false, + "Angles": "{0 313.955 0}", + "Pos": "[8396.9111 1651.3876 -12007.999]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "ARSCodes": "04", + "Lights": "2-1-13", + "NextSignal": "OK3", + "RouteName": "OK3-1", + "Switches": "" + } + ], + "Left": true + }, + "138": + { + "LensesStr": "GY", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "A1///", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-3109.686 15569.207 -11210.7744]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "A1", + "ARSCodes": "4", + "Repeater": true, + "Lights": "2-1-1", + "Manual": false, + "Switches": "", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "139": + { + "RouteNumberSetup": "WX", + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "OK20", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-5250.4028 16089.207 -11185.1494]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "A2", + "ARSCodes": "04", + "Repeater": false, + "Manual": true, + "Lights": "3-1-2", + "Switches": "", + "RouteName": "Depot" + } + ], + "NonAutoStop": false, + "Left": false + }, + "140": + { + "Approve0": true, + "RouteNumberSetup": "", + "LensesStr": "YR-GW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OK6", + "ARSOnly": false, + "Angles": "{0 313.955 0}", + "Pos": "[8579.6592 1460.9037 -12008.0176]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "RouteName": "", + "Lights": "2-1-13", + "NextSignal": "OK4", + "Switches": "", + "ARSCodes": "04" + } + ], + "Left": false + }, + "141": + { + "Approve0": false, + "LensesStr": "WY-RW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "RX95A", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[14635 -3426.9888 -10851.7227]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-23-1", + "NextSignal": "RX95", + "ARSCodes": "046" + }, + + { + "Manual": false, + "RouteName": "", + "Emer": false, + "Switches": "RX2-", + "NextSignal": "RX95A", + "ARSCodes": "6", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "142": + { + "Approve0": false, + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "RX1", + "ARSOnly": false, + "Angles": "{3.4934 139.0936 0}", + "Pos": "[12976.9551 -13565.9609 -10859.7246]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "RX3", + "ARSCodes": "04", + "Manual": false, + "Lights": "2-2-1", + "Repeater": false, + "Switches": "", + "RouteName": "" + } + ], + "NonAutoStop": false, + "Left": false + }, + "143": + { + "Approve0": true, + "LensesStr": "RW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "PassOcc": true, + "Name": "NH1", + "ARSOnly": false, + "Angles": "{0.5577 187.7192 0}", + "Pos": "[15068.7119 -4830.3379 -12626.502]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "4", + "RouteName": "", + "Lights": "1", + "NextSignal": "NH1", + "Switches": "" + } + ], + "Left": true + }, + "144": + { + "Approve0": true, + "LensesStr": "", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "NH1A", + "ARSOnly": true, + "Angles": "{0 102.3017 0}", + "Pos": "[8590.2617 -9478.541 -12626.5059]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "NH1", + "ARSCodes": "4", + "Repeater": false, + "Lights": "5-1", + "RouteName": "NH2-1", + "Switches": "NH1-,NH2-", + "Manual": false + } + ], + "NonAutoStop": true + }, + "145": + { + "Approve0": true, + "LensesStr": "", + "RouteNumber": "1", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "NH1B", + "ARSOnly": true, + "Angles": "{0 102 0}", + "Pos": "[2430.1157 -9993.2734 -12626.5059]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "NH1A", + "ARSCodes": "4", + "Manual": false, + "EnRou": true, + "Lights": "5-1", + "Switches": "NH1-,NH2-", + "RouteName": "NH2-1", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "146": + { + "Approve0": true, + "LensesStr": "", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "NH1B", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[2881.1687 -10084.793 -12626.5059]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "NH1", + "ARSCodes": "4", + "Manual": false, + "EnRou": false, + "Lights": "5-1", + "Switches": "NH1-,NH2-", + "RouteName": "NH2-1", + "Repeater": false + }, + + { + "Repeater": true, + "EnRou": true, + "Emer": false, + "Switches": "NH1+,NH2+", + "NextSignal": "NH44", + "RouteName": "", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "147": + { + "Approve0": true, + "RouteNumberSetup": "", + "LensesStr": "RR", + "RouteNumber": "2", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "PassOcc": true, + "Name": "NHOP", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-7085.98 -10085 -12625.1289]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "NHOP", + "ARSCodes": "4", + "Manual": false, + "EnRou": true, + "Lights": "1", + "Repeater": false, + "Switches": "", + "RouteName": "" + } + ], + "Left": true + }, + "148": + { + "Approve0": true, + "RouteNumberSetup": "1XW", + "LensesStr": "WY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "NH46", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-257.359 -10085 -12625.6035]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "RouteName": "NH2-2", + "Lights": "4-24-2-3", + "NextSignal": "NH44", + "Switches": "NH1+,NH2+", + "ARSCodes": "04" + }, + + { + "Emer": false, + "NextSignal": "NH1B", + "ARSCodes": "04", + "Manual": false, + "EnRou": true, + "Lights": "4-4-24-1", + "Switches": "NH1-,NH2-", + "RouteName": "NH2-1", + "Repeater": false + } + ] + }, + "149": + { + "Approve0": true, + "RouteNumberSetup": "2XW", + "LensesStr": "WY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "NH41", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[9634.0332 -9388.9863 -12626.5059]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "Switches": "NH1+,NH2+", + "Lights": "4-24-2-23-23-3", + "NextSignal": "NH43", + "ARSCodes": "046", + "RouteName": "NH1-1" + }, + + { + "Emer": false, + "NextSignal": "NHOP", + "ARSCodes": "04", + "Manual": false, + "EnRou": true, + "Lights": "4-1", + "Repeater": false, + "Switches": "NH1-,NH2-", + "RouteName": "NH2-1" + } + ], + "Left": false + }, + "150": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "65", + "ARSOnly": false, + "Angles": "{0 313.998 0}", + "Pos": "[9353.5947 3093.8154 -12197.6367]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "4-24-1-13-3", + "NextSignal": "OK67", + "RouteName": "" + } + ], + "Left": true + }, + "151": + { + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "RXD", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[14899.207 -5207.4092 -10851.5059]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "RXDA", + "ARSCodes": "4", + "Repeater": false, + "Manual": true, + "Lights": "2-1", + "Switches": "RX1+,RX2+", + "RouteName": "" + } + ], + "Left": true + }, + "152": + { + "Approve0": true, + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "RXDA", + "ARSOnly": true, + "Angles": "{356.6959 329.5704 0}", + "Pos": "[13747.54 -12925.3145 -10844.1963]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "RXDA", + "ARSCodes": "4", + "Repeater": false, + "Lights": "2-1", + "Manual": false, + "Switches": "", + "RouteName": "" + } + ], + "Left": true + }, + "153": + { + "LensesStr": "YG-RW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 1, + "Name": "PT4", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-9065.54 -14491.793 -13667.8486]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-13-1-2", + "NextSignal": " 200", + "RouteName": "" + } + ] + }, + "154": + { + "Approve0": true, + "LensesStr": "YGR-W", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 1, + "Name": "PT3", + "ARSOnly": false, + "Angles": "{0.574 90 0}", + "Pos": "[-6241.2808 -15216.8154 -13670.5059]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "PT1-1", + "Switches": "PT1+,PT2+", + "Lights": "3-13-1-2", + "NextSignal": "PT5", + "ARSCodes": "046" + }, + + { + "Emer": false, + "NextSignal": "PT5", + "ARSCodes": "046", + "Repeater": false, + "Lights": "3-1-12", + "Manual": false, + "RouteName": "", + "Switches": "PT1+,PT2+,G1+" + } + ] + }, + "155": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": " 200", + "ARSOnly": false, + "Angles": "{358.182 191.1706 0}", + "Pos": "[-13566.3096 -11608.0576 -13665.2803]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "4-24-1-13-3", + "NextSignal": "198", + "Switches": "" + } + ], + "Left": false + }, + "156": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "198", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[-13671.793 -5602.4048 -13821.2158]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04678", + "Lights": "3-13-1-12-2", + "NextSignal": "196", + "RouteName": "" + } + ], + "Left": false + }, + "157": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "196", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[-13671.793 239.5456 -14038.3057]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04678", + "Lights": "3-13-1-12-2", + "NextSignal": "194", + "RouteName": "" + } + ], + "Left": false + }, + "158": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "194", + "ARSOnly": false, + "Angles": "{359.7647 179.5035 0}", + "Pos": "[-13670.1113 6665.3652 -14057.6035]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "RouteName": "", + "Lights": "3-13-1-12-2", + "NextSignal": "192", + "Switches": "" + } + ], + "Left": false + }, + "159": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "192", + "ARSOnly": false, + "Angles": "{356.7799 117.9683 0}", + "Pos": "[-10238.5225 13625.7119 -14057.6045]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04678", + "Lights": "3-13-1-12-2", + "NextSignal": "190", + "RouteName": "" + } + ], + "Left": false + }, + "160": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "190", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-4693.23 14645.5859 -14064.3818]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04678", + "Lights": "3-13-1-12-2", + "NextSignal": "188", + "RouteName": "" + } + ], + "Left": false + }, + "161": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "188", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[447.8779 14645.4863 -14152.1367]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04678", + "Lights": "3-13-1-12-2", + "NextSignal": "186", + "RouteName": "" + } + ], + "Left": false + }, + "162": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "186", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[5767.1226 14645.5859 -14236.5059]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04678", + "Lights": "3-13-1-12-2", + "NextSignal": "184", + "RouteName": "" + } + ], + "Left": false + }, + "163": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "184", + "ARSOnly": false, + "Angles": "{356.8778 64.3625 0}", + "Pos": "[11282.8809 13757.6934 -14236.6055]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "RouteName": "", + "Lights": "3-13-1-12-2", + "NextSignal": "182", + "Switches": "" + } + ], + "Left": true + }, + "164": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "182", + "ARSOnly": false, + "Angles": "{357.8891 13.6105 0}", + "Pos": "[14685.5879 9224.4834 -14236.5967]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "0467", + "Lights": "3-13-1-12-2", + "NextSignal": "180", + "RouteName": "" + } + ], + "Left": true + }, + "165": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "180", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[14970.9863 3453.1199 -14271.6865]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-3-1-12-2", + "NextSignal": "178A", + "Switches": "" + } + ], + "Left": false + }, + "166": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "178", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[14970.6934 -4235.4165 -14272.4063]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04", + "Lights": "3-13-1-2", + "NextSignal": "176", + "RouteName": "" + } + ], + "Left": false + }, + "167": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "176", + "ARSOnly": false, + "Angles": "{359.9 0 0}", + "Pos": "[14971.0117 -8883.2803 -14331.6631]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-13-1-12-2", + "NextSignal": "174", + "RouteName": "" + } + ], + "Left": false + }, + "168": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "174", + "ARSOnly": false, + "Angles": "{359.8161 313.2398 0}", + "Pos": "[13448.2002 -13956.9014 -14423.8574]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-12-2", + "NextSignal": "172", + "ARSCodes": "046" + } + ], + "Left": false + }, + "169": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "172", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[5861.7529 -14978.9863 -14564.5596]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-12-2", + "NextSignal": "170", + "ARSCodes": "046" + } + ], + "Left": false + }, + "170": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "170", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-29.645 -14978.9863 -14569.5059]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-12-2", + "NextSignal": "168", + "ARSCodes": "046" + } + ], + "Left": false + }, + "171": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "168", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-5362.9199 -14978.9863 -14569.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-13-1-12-2", + "NextSignal": "166", + "Switches": "" + } + ], + "Left": false + }, + "172": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "166", + "ARSOnly": false, + "Angles": "{357.3629 199.7518 0}", + "Pos": "[-9779.1426 -12780.9463 -14569.502]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-13-1-12-2", + "NextSignal": "164", + "Switches": "" + } + ], + "Left": true + }, + "173": + { + "Approve0": true, + "LensesStr": "WYY-GRW-M", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MD162", + "ARSOnly": false, + "Angles": "{0 134.001 0}", + "Pos": "[-2453.1228 -2026.6335 -14585.9063]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "ARSCodes": "4", + "Lights": "52-1", + "NextSignal": "MD160", + "Switches": "MJ1+", + "RouteName": "MD2-2" + }, + + { + "Emer": false, + "NextSignal": "MDA1", + "ARSCodes": "4", + "Repeater": false, + "EnRou": true, + "Lights": "5-52-1", + "Manual": false, + "Switches": "MJ1-,MJ2+,MJ3+", + "RouteName": "MD2-4" + }, + + { + "Emer": false, + "NextSignal": "MDA2", + "ARSCodes": "4", + "Manual": false, + "EnRou": true, + "Lights": "5-52-1", + "Repeater": false, + "RouteName": "MD2-3", + "Switches": "MJ1-,MJ2-,MJ4-" + } + ], + "Left": false + }, + "174": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "164A", + "ARSOnly": true, + "Angles": "{0 134.001 0}", + "Pos": "[-4476.8853 -3978.4658 -14585.9063]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-13-1-12-2", + "NextSignal": "MD162", + "RouteName": "" + } + ], + "Left": true + }, + "175": + { + "Approve0": false, + "LensesStr": "WYY-GRW-M", + "RouteNumber": "2", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MD160", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[-248.6354 102.378 -14585.6055]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "RouteName": "", + "Lights": "5-52-1", + "NextSignal": "MD158", + "ARSCodes": "4", + "Switches": "" + } + ], + "Left": false + }, + "176": + { + "Approve0": true, + "LensesStr": "", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "NH1BFIX", + "ARSOnly": true, + "Angles": "{0 275.4756 0}", + "Pos": "[3770.2227 -9751.9102 -12626.5059]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "", + "Repeater": false, + "EnRou": true, + "Lights": "5-1", + "RouteName": "", + "Switches": "", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "177": + { + "Approve0": false, + "LensesStr": "WYY-GRW-M", + "RouteNumber": "4", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MDA1", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[1733.6323 2534.5474 -14585.5059]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "RouteName": "", + "Lights": "5-52-1", + "NextSignal": "MDB1", + "ARSCodes": "4", + "Switches": "" + } + ], + "Left": true + }, + "178": + { + "Approve0": false, + "LensesStr": "WYY-GRW-M", + "RouteNumber": "4", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MDB1", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[8543.0879 9110.4473 -14585.5059]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "RouteName": "", + "Lights": "5-52-1", + "NextSignal": "", + "ARSCodes": "4", + "Switches": "" + } + ], + "Left": true + }, + "179": + { + "Approve0": false, + "LensesStr": "WYY-GRW-M", + "RouteNumber": "3", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MDA2", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[1551.6001 2725.8967 -14585.5059]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "RouteName": "", + "Lights": "5-52-1", + "NextSignal": "MDB2", + "ARSCodes": "4", + "Switches": "" + } + ], + "Left": false + }, + "180": + { + "Approve0": false, + "LensesStr": "WYY-GRW-M", + "RouteNumber": "3", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MDB2", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[8378.2324 9318.25 -14585.5059]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "RouteName": "", + "Lights": "5-52-1", + "NextSignal": "", + "ARSCodes": "4", + "Switches": "" + } + ], + "Left": false + }, + "181": + { + "Approve0": true, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "163", + "ARSOnly": false, + "Angles": "{0 314.001 0}", + "Pos": "[-7770.0918 -5758.9497 -14586.2061]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-12-2", + "NextSignal": "165", + "ARSCodes": "04" + } + ], + "Left": false + }, + "182": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "165", + "ARSOnly": false, + "Angles": "{2.6432 347.5887 0}", + "Pos": "[-11319.6543 -10181.8086 -14586.4883]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-13-1-12-2", + "NextSignal": "167", + "RouteName": "" + } + ], + "Left": false + }, + "183": + { + "Approve0": false, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MD3", + "ARSOnly": false, + "Angles": "{0 313.998 0}", + "Pos": "[2216.6106 3368.0171 -14585.5059]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "Switches": "MJ4+,MJ5+,MJ6-", + "Lights": "2-2-1", + "NextSignal": "MD161", + "ARSCodes": "04", + "RouteName": "MD3-1" + }, + + { + "Emer": false, + "NextSignal": "MDN1", + "ARSCodes": "04", + "Repeater": false, + "EnRou": true, + "Lights": "2-2-1", + "Manual": false, + "Switches": "MJ4-,MJ2-,MJ1-", + "RouteName": "MD3-2" + } + ], + "Left": false + }, + "184": + { + "Approve0": false, + "LensesStr": "WYY-GRW-M", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MDFIX1", + "ARSOnly": true, + "Angles": "{0 301.2145 0}", + "Pos": "[-1808.7091 -127.9285 -14585.6055]", + "Routes": + [ + + { + "Manual": false, + "EnRou": false, + "RouteName": "", + "Lights": "5-52-1", + "NextSignal": "", + "ARSCodes": "4", + "Switches": "" + } + ], + "Left": true + }, + "185": + { + "Approve0": false, + "LensesStr": "RR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "MDOP", + "ARSOnly": false, + "Angles": "{0 314.001 0}", + "Pos": "[-7033.5498 -6449.5356 -14585.6143]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "", + "Lights": "1", + "NextSignal": "", + "RouteName": "" + } + ], + "Left": false + }, + "186": + { + "Approve0": false, + "LensesStr": "WYY-GRW-M", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MDFIX2", + "ARSOnly": true, + "Angles": "{0 325.0512 0}", + "Pos": "[-1273.005 -782.0525 -14585.6055]", + "Routes": + [ + + { + "Manual": false, + "EnRou": false, + "RouteName": "", + "Lights": "5-52-1", + "NextSignal": "", + "ARSCodes": "4", + "Switches": "" + } + ], + "Left": false + }, + "187": + { + "Approve0": false, + "LensesStr": "WYY-GRW-M", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MDFIX3", + "ARSOnly": true, + "Angles": "{0 318.6508 0}", + "Pos": "[378.8653 1243.6993 -14585.5059]", + "Routes": + [ + + { + "Manual": false, + "EnRou": false, + "RouteName": "", + "Lights": "5-52-1", + "NextSignal": "", + "ARSCodes": "4", + "Switches": "" + } + ], + "Left": true + }, + "188": + { + "Approve0": false, + "LensesStr": "WYY-GRW-M", + "RouteNumber": "2", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MJN1", + "ARSOnly": true, + "Angles": "{0 314.001 0}", + "Pos": "[-6885.7383 -6304.748 -14585.9063]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "RouteName": "", + "Lights": "5-52-1", + "NextSignal": "MJOP", + "ARSCodes": "4", + "Switches": "" + } + ], + "Left": false + }, + "189": + { + "Approve0": false, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MD4", + "ARSOnly": false, + "Angles": "{0 313.998 0}", + "Pos": "[2389.637 3168.104 -14585.5059]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "Switches": "MJ3-,MJ5-,MJ6-", + "Lights": "2-2-1", + "NextSignal": "MD161", + "ARSCodes": "04", + "RouteName": "MD4-1" + }, + + { + "Emer": false, + "NextSignal": "MDN1", + "ARSCodes": "04", + "Repeater": false, + "EnRou": true, + "Lights": "2-2-1", + "Manual": false, + "Switches": "MJ1-,MJ2+,MJ3+", + "RouteName": "MD4-2" + } + ], + "Left": false + }, + "190": + { + "Approve0": false, + "LensesStr": "WYY-GRW-M", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MDFIX4", + "ARSOnly": true, + "Angles": "{0 309.1925 0}", + "Pos": "[207.5959 1412.4487 -14585.5059]", + "Routes": + [ + + { + "Manual": false, + "EnRou": false, + "RouteName": "", + "Lights": "5-52-1", + "NextSignal": "", + "ARSCodes": "4", + "Switches": "" + } + ], + "Left": false + }, + "191": + { + "Approve0": false, + "LensesStr": "YG-RW", + "RouteNumber": "1", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MD161", + "ARSOnly": false, + "Angles": "{0 314.001 0}", + "Pos": "[-2972.1133 -1125.4363 -14586.1055]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-13-1-12-2", + "NextSignal": "163", + "RouteName": "" + } + ], + "Left": false + }, + "192": + { + "Approve0": false, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "D ", + "ARSOnly": false, + "Angles": "{0 134.001 0}", + "Pos": "[-3199.0322 -1344.5771 -14586.1055]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "MDGFIX", + "ARSCodes": "04", + "Manual": false, + "EnRou": true, + "Lights": "2-1", + "Repeater": false, + "RouteName": "MD1-3", + "Switches": "MJ6+" + } + ], + "Left": false + }, + "193": + { + "Approve0": false, + "LensesStr": "WYY-GRW-M", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MDFIX5", + "ARSOnly": true, + "Angles": "{0 129.2972 0}", + "Pos": "[1427.0985 2254.0044 -14585.5059]", + "Routes": + [ + + { + "Manual": false, + "EnRou": false, + "RouteName": "", + "Lights": "5-52-1", + "NextSignal": "", + "ARSCodes": "4", + "Switches": "" + } + ], + "Left": false + }, + "194": + { + "Approve0": false, + "LensesStr": "WYY-GRW-M", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MDFIX6", + "ARSOnly": true, + "Angles": "{0 138.6485 0}", + "Pos": "[1238.3494 2404.8652 -14585.5059]", + "Routes": + [ + + { + "Manual": false, + "EnRou": false, + "RouteName": "", + "Lights": "5-52-1", + "NextSignal": "", + "ARSCodes": "4", + "Switches": "" + } + ], + "Left": true + }, + "195": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "167", + "ARSOnly": false, + "Angles": "{3.1019 65.0677 0}", + "Pos": "[-9499.3164 -15567.4844 -14586.5059]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-12-2", + "NextSignal": "169", + "ARSCodes": "046" + } + ], + "Left": false + }, + "196": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "169", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-4669.8467 -15996.9863 -14586.5059]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-12-2", + "NextSignal": "171", + "ARSCodes": "046" + } + ], + "Left": false + }, + "197": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "171", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[1715.4761 -15996.9863 -14586.5059]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-12-2", + "NextSignal": "173", + "ARSCodes": "046" + } + ], + "Left": false + }, + "198": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "173", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[7167.2456 -15996.9863 -14575.5596]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-12-2", + "NextSignal": "175", + "ARSCodes": "046" + } + ], + "Left": false + }, + "199": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "175", + "ARSOnly": false, + "Angles": "{2.6964 102.7485 0}", + "Pos": "[12590.4141 -15835.8691 -14478.9873]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-12-2", + "NextSignal": "177", + "ARSCodes": "046" + } + ], + "Left": false + }, + "200": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "177", + "ARSOnly": false, + "Angles": "{0.3 180 0}", + "Pos": "[15720.0146 -10406.7998 -14356.877]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-12-2", + "NextSignal": "179", + "ARSCodes": "046" + } + ], + "Left": false + }, + "201": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "179", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[15719.9863 -4998.2349 -14271.3135]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-3-1-12-2", + "NextSignal": "181A", + "RouteName": "" + } + ], + "Left": false + }, + "202": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "181", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[15719.9063 2567.1926 -14271.7061]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-12-2", + "NextSignal": "183", + "ARSCodes": "04" + } + ], + "Left": false + }, + "203": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "183", + "ARSOnly": false, + "Angles": "{0.691 183.7191 0}", + "Pos": "[15696.2158 8640.9844 -14249.7988]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "RouteName": "", + "Lights": "3-13-1-12-2", + "NextSignal": "185", + "Switches": "" + } + ], + "Left": false + }, + "204": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "185", + "ARSOnly": false, + "Angles": "{3.2199 242.0107 0}", + "Pos": "[12157.0811 15022.7129 -14249.79]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-12-2", + "NextSignal": "187", + "ARSCodes": "04678" + } + ], + "Left": false + }, + "205": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "187", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[5076.0464 15972.9863 -14242.3408]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "RouteName": "", + "Lights": "3-13-1-12-2", + "NextSignal": "189", + "Switches": "" + } + ], + "Left": false + }, + "206": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "189", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-644.7516 15972.9863 -14143.6309]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "RouteName": "", + "Lights": "3-13-1-12-2", + "NextSignal": "191", + "Switches": "" + } + ], + "Left": false + }, + "207": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "191", + "ARSOnly": false, + "Angles": "{0.2348 271.5137 0}", + "Pos": "[-6838.4004 15965.0723 -14070.999]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "RouteName": "", + "Lights": "3-13-1-12-2", + "NextSignal": "193", + "Switches": "" + } + ], + "Left": false + }, + "208": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "193", + "ARSOnly": false, + "Angles": "{3.0112 336.6283 0}", + "Pos": "[-13754.5996 12070.3486 -14071.0059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "RouteName": "", + "Lights": "3-13-1-12-2", + "NextSignal": "195", + "Switches": "" + } + ], + "Left": false + }, + "209": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "195", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[-14541.5859 7051.6904 -14071.1055]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "RouteName": "", + "Lights": "3-13-1-12-2", + "NextSignal": "197", + "Switches": "" + } + ], + "Left": false + }, + "210": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "197", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[-14540.9863 2698.7861 -14071.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "RouteName": "", + "Lights": "3-13-1-12-2", + "NextSignal": "199", + "Switches": "" + } + ], + "Left": false + }, + "211": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "199", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[-14540.793 -1341.738 -14033.4473]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-12-2", + "NextSignal": "201", + "ARSCodes": "04678" + } + ], + "Left": false + }, + "212": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "201", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[-14540.793 -7002.6626 -13805.6953]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-12-2", + "NextSignal": "203", + "ARSCodes": "0467" + } + ], + "Left": false + }, + "213": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "203", + "ARSOnly": false, + "Angles": "{1.582 9.3619 0}", + "Pos": "[-14461.2041 -12185.8457 -13679.4922]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-13-1-12-2", + "NextSignal": "205", + "RouteName": "" + } + ], + "Left": false + }, + "214": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "205", + "ARSOnly": false, + "Angles": "{1.3397 83.9465 0}", + "Pos": "[-11214.6455 -15177.1914 -13679.4961]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-13-1-12-2", + "NextSignal": "PT3", + "Switches": "" + } + ], + "Left": false + }, + "215": + { + "Approve0": true, + "LensesStr": "YYG-RW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "178A", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[14971 -1116.2146 -14272.3057]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "4-24-1-13-3", + "NextSignal": "178", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": true + }, + "216": + { + "Approve0": true, + "LensesStr": "YYG-RW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "181A", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[15716.5 -750.803 -14281.0684]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "4-24-1-13-3", + "NextSignal": "181", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": true + }, + "217": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "163A", + "ARSOnly": true, + "Angles": "{0 314.001 0}", + "Pos": "[-6645.7734 -4675.2129 -14586.2061]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04", + "Lights": "3-13-1-12-2", + "NextSignal": "163", + "RouteName": "" + } + ], + "Left": true + }, + "218": + { + "Approve0": true, + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PTFIX2AB", + "ARSOnly": true, + "Angles": "{1.0468 258.1028 0}", + "Pos": "[-7655.7275 -14595.9063 -13670.4688]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "2-1", + "NextSignal": "PT4", + "ARSCodes": "4" + } + ], + "NonAutoStop": true, + "Left": true + }, + "219": + { + "Approve0": true, + "LensesStr": "YG-RW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "RX4", + "ARSOnly": false, + "Angles": "{0.4652 178.4841 0}", + "Pos": "[14895.5713 -8228.1426 -10850.8848]", + "Routes": + [ + + { + "Manual": false, + "Switches": "RX3+,RX1+", + "ARSCodes": "04", + "Lights": "3-13-4", + "NextSignal": "RX98", + "RouteName": "RX4-2" + } + ], + "Left": true + }, + "220": + { + "Approve0": false, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "93", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[14634.6934 1486.5032 -10851.7061]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "4-24-1-1-1-13", + "NextSignal": "RX95A", + "RouteName": "" + } + ], + "Left": false + }, + "221": + { + "LensesStr": "RR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": " OP", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[14634.6943 1087.001 -10851.7061]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "1", + "Lights": "1", + "NextSignal": "", + "RouteName": "" + } + ], + "Left": false + }, + "222": + { + "Approve0": true, + "LensesStr": "WYY-GRW", + "RouteNumber": "3", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "RXFIXA", + "ARSOnly": true, + "Angles": "{359.7632 359.4941 0}", + "Pos": "[14633.7773 -8067.8477 -10851.8359]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "RX97", + "ARSCodes": "4", + "Repeater": false, + "EnRou": true, + "Lights": "25", + "RouteName": "", + "Switches": "", + "Manual": false + } + ], + "Left": false + }, + "223": + { + "Approve0": true, + "LensesStr": "WYY-GRW", + "RouteNumber": "4", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "RXFIXB", + "ARSOnly": true, + "Angles": "{359.7651 359.4946 0}", + "Pos": "[14897.9355 -8049.8345 -10851.2227]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "RXDA", + "ARSCodes": "4", + "Manual": false, + "EnRou": true, + "Lights": "25", + "Switches": "", + "RouteName": "", + "Repeater": false + } + ], + "Left": false + }, + "224": + { + "Approve0": true, + "LensesStr": "WYY-GRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "RXAFIX", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[14856.4912 -6388.333 -10864.7686]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "RX98", + "ARSCodes": "4", + "Repeater": false, + "EnRou": false, + "Lights": "25", + "Switches": "", + "RouteName": "", + "Manual": false + } + ], + "Left": false + }, + "225": + { + "Approve0": true, + "LensesStr": "WYY-GRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "RXBFIX", + "ARSOnly": true, + "Angles": "{0 4.6505 0}", + "Pos": "[14885.8555 -7587.043 -10851.5059]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "4", + "Manual": false, + "EnRou": false, + "Lights": "25", + "RouteName": "", + "Switches": "", + "Repeater": false + } + ], + "Left": true + }, + "226": + { + "Approve0": false, + "LensesStr": "YGR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "164", + "ARSOnly": false, + "Angles": "{0 134.001 0}", + "Pos": "[-7188.2554 -6598.939 -14584.1133]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-13-1-12-2", + "NextSignal": "164A", + "Switches": "" + } + ], + "Left": false + }, + "227": + { + "Approve0": true, + "LensesStr": "WR-YW-M", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "RX95", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[14635.207 -5258.4395 -10851.6055]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "RXFIXAZ1", + "ARSCodes": "4", + "Manual": false, + "EnRou": true, + "Repeater": false, + "Lights": "23-23-23-1", + "Switches": "", + "RouteName": "" + } + ], + "Left": false + }, + "228": + { + "Approve0": true, + "LensesStr": "WR-YW-M", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "RXFIXAZ1", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[14635.207 -5521.1255 -10851.5059]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "RXFIXA", + "ARSCodes": "4", + "Repeater": false, + "EnRou": true, + "Lights": "2-23-1", + "Manual": false, + "RouteName": "", + "Switches": "RX2+,RX4+" + } + ], + "Left": false + }, + "229": + { + "Approve0": true, + "LensesStr": "WYY-GRW", + "RouteNumber": "3", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "RXFIXAXY", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[14635.207 -5786.5327 -10851.5059]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "4", + "Manual": false, + "EnRou": true, + "Lights": "25", + "Switches": "", + "RouteName": "", + "Repeater": false + } + ], + "Left": false + }, + "230": + { + "Approve0": false, + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": " E", + "ARSOnly": false, + "Angles": "{0 313.998 0}", + "Pos": "[376.3083 705.8364 -14585.6055]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "MDOP", + "ARSCodes": "04", + "Manual": false, + "EnRou": false, + "Lights": "2-1", + "Repeater": false, + "RouteName": "", + "Switches": "MJ1+" + } + ], + "Left": false + }, + "231": + { + "Approve0": false, + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": " G", + "ARSOnly": false, + "Angles": "{0 313.998 0}", + "Pos": "[-268.8534 1484.4258 -14585.5059]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "MD161", + "ARSCodes": "04", + "Manual": false, + "EnRou": false, + "Lights": "2-2-1", + "Repeater": false, + "RouteName": "", + "Switches": "MJ6+" + } + ], + "Left": false + }, + "232": + { + "Approve0": false, + "LensesStr": "WYY-GRW-M", + "RouteNumber": "1", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MDGFIX", + "ARSOnly": true, + "Angles": "{0 133.998 0}", + "Pos": "[-1100.7241 681.1123 -14585.6055]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "RouteName": "", + "Lights": "5-52-1", + "NextSignal": "", + "ARSCodes": "4", + "Switches": "" + } + ], + "Left": false + }, + "233": + { + "Approve0": true, + "LensesStr": "RYY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "7M", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[3079.8569 -15214 -13680.1699]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04", + "Lights": "5-35-2-34-4", + "NextSignal": "9", + "RouteName": "" + }, + + { + "Emer": false, + "NextSignal": "9", + "ARSCodes": "4", + "Repeater": false, + "Lights": "15", + "Manual": false, + "RouteName": "", + "Switches": "G1+" + } + ] + }, + "234": + { + "Approve0": true, + "LensesStr": "YY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "20", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[2304.3633 13981 -13213.9688]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "4-24-1-13-3", + "NextSignal": "18", + "Switches": "" + } + ], + "Left": false + }, + "235": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "21M", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[2571.6846 15308 -13213.3691]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "4-24-2-2-3", + "NextSignal": "23", + "ARSCodes": "046" + }, + + { + "Emer": false, + "NextSignal": "23", + "ARSCodes": "04", + "Manual": false, + "Lights": "14", + "Repeater": false, + "Switches": "G1+", + "RouteName": "" + } + ], + "Left": false + }, + "236": + { + "Approve0": true, + "Depot": false, + "LensesStr": "YGRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 2, + "Name": "5A", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[1074.9204 -15214 -13680.1699]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-13-1-2", + "NextSignal": "7M", + "ARSCodes": "04" + } + ] + }, + "237": + { + "Angles": "{0 88.6598 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 2, + "Name": "PT2", + "Pos": "[-4359.0459 -15294.5439 -13675.21]" + }, + "238": + { + "Angles": "{0 271.3396 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 2, + "Name": "PT1", + "Pos": "[-8518.3906 -14414.8008 -13677.9092]" + }, + "239": + { + "Angles": "{0 181.462 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 2, + "Name": "RX1", + "Pos": "[14987.6582 -5893.8535 -10858.2031]" + }, + "240": + { + "Angles": "{0 358.6418 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 2, + "Name": "RX2", + "Pos": "[14551.2334 -7827.1104 -10858.3691]" + }, + "241": + { + "Angles": "{0 133.9848 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 2, + "Name": "OK1", + "Pos": "[-1190.613 -8619.0664 -12021.2686]" + }, + "242": + { + "Angles": "{0 312.1345 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 2, + "Name": "OK4", + "Pos": "[1855.2661 -4522.2773 -12021.1689]" + }, + "243": + { + "Angles": "{0 311.0345 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 2, + "Name": "OK5", + "Pos": "[461.0626 -5869.0713 -12021.1689]" + }, + "244": + { + "Angles": "{0 130.1145 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 2, + "Name": "OK2", + "Pos": "[777.5453 -6211.2754 -12021.1689]" + }, + "245": + { + "Angles": "{0 131.8745 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 2, + "Name": "OK3", + "Pos": "[2140.6213 -4905.9824 -12021.1689]" + }, + "246": + { + "Angles": "{0 313.1544 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 2, + "Name": "OK6", + "Pos": "[-1994.8082 -7738.6577 -12021.2686]" + }, + "247": + { + "Angles": "{0 90.4558 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0, + "Name": "NH2", + "Pos": "[1770.9041 -10169.1826 -12626.4551]" + }, + "248": + { + "Angles": "{0 268.9849 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0, + "Name": "NH1", + "Pos": "[9369.7432 -9290.4639 -12626.4551]" + }, + "249": + { + "Angles": "{0 130.4912 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0, + "Name": "MJ1", + "Pos": "[-1679.2998 -1408.2428 -14592.0684]" + }, + "250": + { + "Angles": "{0 132.1663 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0, + "Name": "MJ2", + "Pos": "[270.5735 972.4842 -14591.9688]" + }, + "251": + { + "Angles": "{0 134.1464 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0, + "Name": "MJ3", + "Pos": "[1658.6729 2316.5049 -14591.9688]" + }, + "252": + { + "Angles": "{0 316.5264 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0, + "Name": "MJ4", + "Pos": "[1298.9999 2634.1941 -14591.9688]" + }, + "253": + { + "Angles": "{0 313.0064 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0, + "Name": "MJ5", + "Pos": "[-57.4867 1309.735 -14591.9688]" + }, + "254": + { + "Angles": "{0 315.6464 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0, + "Name": "MJ6", + "Pos": "[-2504.5405 -561.1551 -14592.0684]" + }, + "255": + { + "Angles": "{0 180.3298 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0, + "Name": "RX3", + "Pos": "[14997.6699 -7702.5425 -10858.3691]" + }, + "256": + { + "Angles": "{0 0.07 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0, + "Name": "RX4", + "Pos": "[14530.3701 -5953.8018 -10858.1689]" + }, + "257": + { + "Angles": "{0 91.7589 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0, + "Name": "G2", + "Pos": "[2078.0002 13877.8135 -13220.9688]" + }, + "258": + { + "Angles": "{0 268.6976 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 0, + "Name": "G1", + "Pos": "[2090.0623 15415.4902 -13219.9688]" + }, + "259": + { + "YOffset": 3, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 16, + "Pos": "[-2150.3757 -15214 -13680.2148]" + }, + "260": + { + "YOffset": 3, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 5, + "Pos": "[3344.7192 -15214 -13680.2148]" + }, + "261": + { + "YOffset": 3, + "Angles": "{1.1275 186.1758 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 19, + "Pos": "[8917.9639 -15149.7598 -13670.3965]" + }, + "262": + { + "YOffset": 3, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 3, + "Pos": "[15696.0137 -303.4492 -13561.3203]" + }, + "263": + { + "YOffset": 0, + "Angles": "{2.1114 258.0487 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 4, + "Pos": "[15443.6143 -9643.4805 -13670.4023]" + }, + "264": + { + "YOffset": 5, + "Angles": "{0 10 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 16, + "Pos": "[-1988.3252 14851.9863 -13213.5059]" + }, + "265": + { + "YOffset": 5, + "Angles": "{0 10.5922 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 3, + "Pos": "[-9839.4082 13464.7695 -13213.5059]" + }, + "266": + { + "YOffset": 5, + "Angles": "{0 99.2626 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 19, + "Pos": "[-15547.3096 -433.2122 -13213.5059]" + }, + "267": + { + "YOffset": 0, + "Angles": "{357.1908 169.6984 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": true, + "SignType": 19, + "Pos": "[12240.5078 -1168.2866 -12626.5039]" + }, + "268": + { + "YOffset": 3, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 16, + "Pos": "[-198.3617 -9390 -12626.3496]" + }, + "269": + { + "YOffset": 3, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 3, + "Pos": "[-7366.1875 -9390 -12627.5713]" + }, + "270": + { + "YOffset": 3, + "Angles": "{358.9939 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 19, + "Pos": "[-10900.1514 -9389.3975 -12678.9248]" + }, + "271": + { + "YOffset": 3, + "Angles": "{0.981 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": true, + "SignType": 18, + "Pos": "[-14893.542 -4649.9741 -12806.4648]" + }, + "272": + { + "YOffset": 3, + "Angles": "{0.981 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": true, + "SignType": 18, + "Pos": "[-14893.5264 -4544.5352 -12807.3848]" + }, + "273": + { + "YOffset": 3, + "Angles": "{0.2953 305.735 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": true, + "SignType": 5, + "Pos": "[-14895.5654 -2429.0237 -12824.9961]" + }, + "274": + { + "YOffset": 3, + "Angles": "{356.499 223.6253 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": true, + "SignType": 19, + "Pos": "[-12646.1367 12714.4551 -12661.4063]" + }, + "275": + { + "YOffset": 3, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 3, + "Pos": "[2626.6274 14572.2129 -12508.1768]" + }, + "276": + { + "YOffset": 3, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": true, + "SignType": 4, + "Pos": "[-4727.2505 14572.2129 -12636.1553]" + }, + "277": + { + "YOffset": 3, + "Angles": "{357.3568 77.4948 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": true, + "SignType": 18, + "Pos": "[14946.9531 9394.1406 -12337.7031]" + }, + "278": + { + "YOffset": 3, + "Angles": "{0 43.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 17, + "Pos": "[5362.7124 -761.5748 -12027.0537]" + }, + "279": + { + "YOffset": 3, + "Angles": "{0 43.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 17, + "Pos": "[6517.6143 353.9394 -12062.0615]" + }, + "280": + { + "YOffset": 3, + "Angles": "{0 44 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 16, + "Pos": "[-2541.0674 -8393.2363 -12014.7539]" + }, + "281": + { + "YOffset": 3, + "Angles": "{0 44 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 3, + "Pos": "[-7375.0645 -13060.8516 -12014.7568]" + }, + "282": + { + "YOffset": 3, + "Angles": "{359.9856 43.0736 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 19, + "Pos": "[-8682.6367 -14324.5068 -12014.7002]" + }, + "283": + { + "YOffset": 3, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 5, + "Pos": "[-15668.9941 -9155.0215 -12014.5059]" + }, + "284": + { + "YOffset": 3, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 17, + "Pos": "[14634.9121 -6823.9316 -10851.6055]" + }, + "285": + { + "YOffset": 3, + "Angles": "{0.2368 269.5029 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": true, + "SignType": 34, + "Pos": "[14633.3574 -8116.0684 -10851.9365]" + }, + "286": + { + "YOffset": 3, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 16, + "Pos": "[14899.207 -5179.8809 -10851.5059]" + }, + "287": + { + "YOffset": 3, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 3, + "Pos": "[14899.3066 1333.5613 -10851.3682]" + }, + "288": + { + "YOffset": 3, + "Angles": "{3.0184 296.8141 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 5, + "Pos": "[15534.6367 13019.2412 -10928.4834]" + }, + "289": + { + "YOffset": 3, + "Angles": "{2.7541 21.234 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 19, + "Pos": "[-11662.6113 14195.6396 -11513.7275]" + }, + "290": + { + "YOffset": 3, + "Angles": "{359.5328 268.4751 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 19, + "Pos": "[-15664.8945 6879.7759 -11520.7598]" + }, + "291": + { + "YOffset": 3, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 3, + "Pos": "[-15933.0059 -2463.2773 -11825.6973]" + }, + "292": + { + "YOffset": 3, + "Angles": "{0.4652 88.4841 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 4, + "Pos": "[-15923.5693 7083.2959 -11519.1113]" + }, + "293": + { + "YOffset": 3, + "Angles": "{0 224 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 16, + "Pos": "[-6585.9043 -13701.1484 -12014.957]" + }, + "294": + { + "YOffset": 0, + "Angles": "{0 224 0}", + "Class": "gmod_track_signs", + "ZOffset": 17, + "Left": false, + "SignType": 3, + "Pos": "[-1789.3684 -9069.1875 -12015.1553]" + }, + "295": + { + "YOffset": 0, + "Angles": "{0 223.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": true, + "SignType": 3, + "Pos": "[135.203 -7210.7178 -12014.8057]" + }, + "296": + { + "YOffset": 0, + "Angles": "{0 51.8333 0}", + "Class": "gmod_track_signs", + "ZOffset": 17, + "Left": false, + "SignType": 19, + "Pos": "[-129.0888 -7042.123 -12014.8057]" + }, + "297": + { + "YOffset": 0, + "Angles": "{0 224 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 14, + "Pos": "[7629.7002 25.9427 -12050.4775]" + }, + "298": + { + "YOffset": 0, + "Angles": "{0 224 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 15, + "Pos": "[14312.0986 6481.3374 -12352.3037]" + }, + "299": + { + "YOffset": 0, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 5, + "Pos": "[9668.3643 15918.0137 -12353.4033]" + }, + "300": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 3, + "Pos": "[-15742.9141 2304.5293 -12718.2734]" + }, + "301": + { + "YOffset": 0, + "Angles": "{2.7529 70.8303 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 4, + "Pos": "[-15154.582 11527.9355 -12632.6055]" + }, + "302": + { + "YOffset": 0, + "Angles": "{0.0001 0.4948 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 19, + "Pos": "[-7597.6929 15917.6211 -12632.5996]" + }, + "303": + { + "YOffset": 0, + "Angles": "{2.9562 106.9949 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 19, + "Pos": "[-15533.9023 -7252.2158 -12768.4932]" + }, + "304": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 16, + "Pos": "[-7171.9946 -10085 -12625.1289]" + }, + "305": + { + "YOffset": 0, + "Angles": "{0 10.043 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 14, + "Pos": "[-1246.5934 -2345.3726 -12779.7334]" + }, + "306": + { + "YOffset": 0, + "Angles": "{359.6 10 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 15, + "Pos": "[-9230.0146 -3756.0735 -13110.9922]" + }, + "307": + { + "YOffset": 0, + "Angles": "{359.5 10 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 19, + "Pos": "[-10234.5234 -3933.51 -13130.4375]" + }, + "308": + { + "YOffset": 0, + "Angles": "{0 190.0026 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 16, + "Pos": "[-9161.3203 12439.0557 -13214.5059]" + }, + "309": + { + "YOffset": 0, + "Angles": "{0 190.0026 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 3, + "Pos": "[-2273.6895 13653.8525 -13215.5059]" + }, + "310": + { + "YOffset": 0, + "Angles": "{0 190 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 19, + "Pos": "[-1698.7322 13755.3086 -13214.5059]" + }, + "311": + { + "YOffset": 0, + "Angles": "{358.7656 93.4206 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": true, + "SignType": 5, + "Pos": "[14661.9844 8422.3926 -13422.0977]" + }, + "312": + { + "YOffset": 0, + "Angles": "{359.0877 86.2783 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": true, + "SignType": 19, + "Pos": "[14633.333 -7398.1509 -13671.4063]" + }, + "313": + { + "YOffset": 0, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": true, + "SignType": 16, + "Pos": "[3085.0061 -14491 -13671.5059]" + }, + "314": + { + "YOffset": 0, + "Angles": "{356.878 25.6185 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": true, + "SignType": 3, + "Pos": "[11053.9258 -13569.752 -13671.4063]" + }, + "315": + { + "YOffset": 0, + "Angles": "{359.3085 87.4102 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": true, + "SignType": 4, + "Pos": "[14651.4355 -7115.2686 -13671.4053]" + }, + "316": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 3, + "Pos": "[-1551.3311 14606.4941 -11344.5586]" + }, + "317": + { + "YOffset": 0, + "Angles": "{357.55 197.2315 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 4, + "Pos": "[-10887.6885 14185.0967 -11525.9424]" + }, + "318": + { + "YOffset": 12, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 28, + "Pos": "[-3517.1321 -14490.793 -13671.5059]" + }, + "319": + { + "YOffset": 0, + "Angles": "{0 43.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 17, + "Left": false, + "SignType": 34, + "Pos": "[2396.6768 -4142.1841 -12014.7061]" + }, + "320": + { + "YOffset": 0, + "Angles": "{0 43.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 17, + "Left": false, + "SignType": 34, + "Pos": "[2551.752 -4359.5635 -12014.7061]" + }, + "321": + { + "YOffset": 0, + "Angles": "{0 38.6582 0}", + "Class": "gmod_track_signs", + "ZOffset": 17, + "Left": false, + "SignType": 19, + "Pos": "[-164.9118 -6568.9092 -12014.8057]" + }, + "322": + { + "YOffset": 0, + "Angles": "{359.7022 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 17, + "Left": true, + "SignType": 19, + "Pos": "[13757.001 9799.543 -11561.0137]" + }, + "323": + { + "YOffset": 0, + "Angles": "{359.2047 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 17, + "Left": true, + "SignType": 14, + "Pos": "[13757.8428 9487.7939 -11575.1104]" + }, + "324": + { + "YOffset": 0, + "Angles": "{0 43.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 17, + "Left": false, + "SignType": 15, + "Pos": "[7035.8672 337.6924 -12014.5059]" + }, + "325": + { + "YOffset": 0, + "Angles": "{359.1484 268.0247 0}", + "Class": "gmod_track_signs", + "ZOffset": 12, + "Left": false, + "SignType": 17, + "Pos": "[-10518.8721 11755.2188 -11176.4854]" + }, + "326": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": -10, + "Left": false, + "SignType": 18, + "Pos": "[-10521.793 8931.7949 -11176.6055]" + }, + "327": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": -10, + "Left": false, + "SignType": 2, + "Pos": "[-10521.793 9062.9814 -11176.6055]" + }, + "328": + { + "YOffset": 2, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 6, + "Left": false, + "SignType": 19, + "Pos": "[-10521.6934 10246.6514 -11176.6055]" + }, + "329": + { + "YOffset": 2, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 6, + "Left": true, + "SignType": 19, + "Pos": "[-10786.3066 10254.8848 -11176.3057]" + }, + "330": + { + "YOffset": 2, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 6, + "Left": false, + "SignType": 19, + "Pos": "[-5635.6973 16089.207 -11181.7871]" + }, + "331": + { + "YOffset": 2, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 6, + "Left": false, + "SignType": 19, + "Pos": "[-5624.2104 15569.207 -11179.875]" + }, + "332": + { + "YOffset": 2, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 6, + "Left": true, + "SignType": 14, + "Pos": "[-3714.4958 15569.207 -11196.3057]" + }, + "333": + { + "YOffset": 2, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 6, + "Left": false, + "SignType": 14, + "Pos": "[-3720.9053 16089.207 -11199.2324]" + }, + "334": + { + "YOffset": 2, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 6, + "Left": false, + "SignType": 15, + "Pos": "[5969.1089 15569.207 -11478.4902]" + }, + "335": + { + "YOffset": 2, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 6, + "Left": false, + "SignType": 15, + "Pos": "[5922.269 16089.207 -11476.7061]" + }, + "336": + { + "YOffset": 2, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 6, + "Left": false, + "SignType": 19, + "Pos": "[8363.3506 15569.207 -11513.6055]" + }, + "337": + { + "YOffset": 2, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 6, + "Left": false, + "SignType": 19, + "Pos": "[9463.3584 16089.2061 -11476.8057]" + }, + "338": + { + "YOffset": 2, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 6, + "Left": false, + "SignType": 18, + "Pos": "[6446.8003 16089.207 -11476.7061]" + }, + "339": + { + "YOffset": 2, + "Angles": "{0.0029 0.6961 0}", + "Class": "gmod_track_signs", + "ZOffset": 6, + "Left": false, + "SignType": 17, + "Pos": "[-6304.5063 16088.75 -11177.4883]" + }, + "340": + { + "YOffset": 30, + "Angles": "{356.5443 152.6281 0}", + "Class": "gmod_track_signs", + "ZOffset": -30, + "Left": false, + "SignType": 6, + "Pos": "[13161.2021 -1480.4458 -12626.5039]" + }, + "341": + { + "YOffset": 0, + "Angles": "{358.262 10.402 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "Left": true, + "SignType": 35, + "Pos": "[8898.791 -14279.6299 -13671.3984]" + }, + "342": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "Left": false, + "SignType": 18, + "Pos": "[15696.0137 -4577.3223 -13636.4775]" + }, + "343": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "Left": false, + "SignType": 18, + "Pos": "[15696.0137 -6041.1797 -13661.9111]" + }, + "344": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "Left": false, + "SignType": 17, + "Pos": "[15696.0137 6773.8584 -13437.1553]" + }, + "345": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "Left": false, + "SignType": 17, + "Pos": "[15696.0137 8434.252 -13408.5146]" + }, + "346": + { + "YOffset": 0, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "Left": false, + "SignType": 19, + "Pos": "[3852.0139 15308.0137 -13213.5059]" + }, + "347": + { + "YOffset": 0, + "Angles": "{357.1113 235.6724 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "Left": false, + "SignType": 42, + "Pos": "[-9802.1738 13690.3535 -11176.4834]" + }, + "348": + { + "YOffset": 0, + "Angles": "{0 179.97 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "Left": false, + "SignType": 17, + "Pos": "[5356.4336 14606.2295 -11042.2646]" + }, + "349": + { + "YOffset": 0, + "Angles": "{0 223.955 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "Left": false, + "SignType": 18, + "Pos": "[8482.0459 1366.7875 -12009.2002]" + }, + "350": + { + "YOffset": 0, + "Angles": "{0.6127 272.0801 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "Left": false, + "SignType": 17, + "Pos": "[14673.376 11772.7256 -11476.7861]" + }, + "351": + { + "YOffset": 3, + "Angles": "{359.2662 253.864 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "Left": true, + "SignType": 13, + "Pos": "[15264.25 4779.4482 -10875.3447]" + }, + "352": + { + "YOffset": 3, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "Left": false, + "SignType": 19, + "Pos": "[10925.9561 14869.207 -10935.5059]" + }, + "353": + { + "YOffset": 3, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "Left": false, + "SignType": 14, + "Pos": "[5528.6489 14869.207 -11032.1826]" + }, + "354": + { + "YOffset": 3, + "Angles": "{1.7399 10.4088 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "Left": false, + "SignType": 15, + "Pos": "[-9918.1328 14681.9863 -11516.0908]" + }, + "355": + { + "YOffset": 3, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "Left": false, + "SignType": 14, + "Pos": "[-15933.0059 6451.9644 -11521.3887]" + }, + "356": + { + "YOffset": 3, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "Left": false, + "SignType": 15, + "Pos": "[-15933.0059 -9724.8223 -12011.5059]" + }, + "357": + { + "YOffset": 3, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "Left": false, + "SignType": 19, + "Pos": "[-15933.0059 -8437.9492 -12008.5771]" + }, + "358": + { + "YOffset": 3, + "Angles": "{2.1662 215.922 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "Left": false, + "SignType": 35, + "Pos": "[-8350.2256 -15358.501 -12014.8877]" + }, + "359": + { + "YOffset": 3, + "Angles": "{0 43.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "Left": false, + "SignType": 35, + "Pos": "[1384.9493 -4602.9414 -12014.3057]" + }, + "360": + { + "YOffset": 3, + "Angles": "{0 42.7089 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "Left": false, + "SignType": 35, + "Pos": "[314.5022 -6148.5527 -12014.8057]" + }, + "361": + { + "YOffset": 3, + "Angles": "{0 48.3046 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "Left": false, + "SignType": 35, + "Pos": "[134.5023 -6729.0127 -12014.8057]" + }, + "362": + { + "YOffset": 2, + "Angles": "{358.8238 273.5348 0}", + "Class": "gmod_track_signs", + "ZOffset": 6, + "Left": true, + "SignType": 18, + "Pos": "[-15650.6484 -11350.5313 -12014.7871]" + }, + "363": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "Left": false, + "SignType": 18, + "Pos": "[-3406.2021 14606.3926 -11425.5371]" + }, + "364": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "Left": false, + "SignType": 18, + "Pos": "[-4976.3828 14606.3926 -11477.6309]" + }, + "365": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "Left": false, + "SignType": 19, + "Pos": "[11514.7627 14604.793 -10935.1445]" + }, + "366": + { + "YOffset": 0, + "Angles": "{359.3356 69.7026 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "Left": true, + "SignType": 35, + "Pos": "[15218.9619 5409.1885 -10880.7246]" + }, + "367": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "Left": false, + "SignType": 3, + "Pos": "[-126.2599 -10085 -12626.2461]" + }, + "368": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "Left": false, + "SignType": 19, + "Pos": "[908.6134 -10085.0137 -12626.5059]" + }, + "369": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "Left": false, + "SignType": 3, + "Pos": "[4777.6616 -10084.9883 -12626.5059]" + }, + "370": + { + "YOffset": 0, + "Angles": "{2.6371 299.2874 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "Left": false, + "SignType": 19, + "Pos": "[14734.3018 -1779.5569 -12627.502]" + }, + "371": + { + "YOffset": 0, + "Angles": "{0 190 0}", + "Class": "gmod_track_signs", + "ZOffset": -15, + "Left": false, + "SignType": 13, + "Pos": "[-1915.1528 13717.1475 -13214.5059]" + }, + "372": + { + "YOffset": 3, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "Left": false, + "SignType": 35, + "Pos": "[3258.4392 15308.0137 -13213.5059]" + }, + "373": + { + "YOffset": 3, + "Angles": "{0 224.0979 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "Left": true, + "SignType": 35, + "Pos": "[-12927.3887 10615.4199 -13214.5059]" + }, + "374": + { + "YOffset": 0, + "Angles": "{0 16.528 0}", + "Class": "gmod_track_signs", + "ZOffset": -15, + "Left": false, + "SignType": 13, + "Pos": "[-10243.2559 13367.998 -13213.5059]" + }, + "375": + { + "YOffset": 2, + "Angles": "{357.3506 347.4535 0}", + "Class": "gmod_track_signs", + "ZOffset": 6, + "Left": true, + "SignType": 17, + "Pos": "[-12459.9893 -15254.7012 -12014.7959]" + }, + "376": + { + "YOffset": 2, + "Angles": "{357.1113 10.6724 0}", + "Class": "gmod_track_signs", + "ZOffset": 6, + "Left": true, + "SignType": 17, + "Pos": "[-10593.7363 -15246.6748 -12014.6865]" + }, + "377": + { + "YOffset": 0, + "Angles": "{0 0 0}", + "Class": "gmod_track_signs", + "ZOffset": 10.4348, + "Left": false, + "SignType": 30, + "Pos": "[-9432.6182 -14491.793 -13665.9258]" + }, + "378": + { + "YOffset": 0, + "Angles": "{358.6605 277.6416 0}", + "Class": "gmod_track_signs", + "ZOffset": 10.4348, + "Left": false, + "SignType": 32, + "Pos": "[-13615.3584 -11303.5381 -13665.3359]" + }, + "379": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 10.4348, + "Left": false, + "SignType": 19, + "Pos": "[-13671.793 -6259.499 -13792.5264]" + }, + "380": + { + "YOffset": 12.3077, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": -20, + "Left": false, + "SignType": 14, + "Pos": "[-13671.793 -7577.751 -13737.0352]" + }, + "381": + { + "YOffset": 12.3077, + "Angles": "{356.8778 154.3625 0}", + "Class": "gmod_track_signs", + "ZOffset": 24.6154, + "Left": false, + "SignType": 4, + "Pos": "[11123.1738 13834.3174 -14236.6016]" + }, + "382": + { + "YOffset": 12.3077, + "Angles": "{357.5493 105.3638 0}", + "Class": "gmod_track_signs", + "ZOffset": 24.6154, + "Left": false, + "SignType": 3, + "Pos": "[14616.3613 9505.5371 -14236.5986]" + }, + "383": + { + "YOffset": 12.3077, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 24.6154, + "Left": false, + "SignType": 16, + "Pos": "[14970.6934 2692.9788 -14272.0059]" + }, + "384": + { + "YOffset": 12.3077, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 24.6154, + "Left": false, + "SignType": 3, + "Pos": "[14970.6934 -4064.5359 -14272.4063]" + }, + "385": + { + "YOffset": 12.3077, + "Angles": "{0 224.001 0}", + "Class": "gmod_track_signs", + "ZOffset": 24.6154, + "Left": false, + "SignType": 2, + "Pos": "[-7519.521 -6918.8501 -14580.8984]" + }, + "386": + { + "YOffset": 12.3077, + "Angles": "{0 224.001 0}", + "Class": "gmod_track_signs", + "ZOffset": 30.7692, + "Left": false, + "SignType": 34, + "Pos": "[-2224.2456 -1805.6016 -14585.9063]" + }, + "387": + { + "YOffset": 12.3077, + "Angles": "{0 43.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 30.7692, + "Left": true, + "SignType": 34, + "Pos": "[2184.7466 2970.1528 -14585.5059]" + }, + "388": + { + "YOffset": 12.3077, + "Angles": "{0 43.998 0}", + "Class": "gmod_track_signs", + "ZOffset": 30.7692, + "Left": false, + "SignType": 34, + "Pos": "[1999.7467 3158.6362 -14585.5059]" + }, + "389": + { + "YOffset": 12.3077, + "Angles": "{0 44.001 0}", + "Class": "gmod_track_signs", + "ZOffset": 30.7692, + "Left": false, + "SignType": 16, + "Pos": "[-2796.8652 -956.1953 -14586.1055]" + }, + "390": + { + "YOffset": 12.3077, + "Angles": "{0 44.001 0}", + "Class": "gmod_track_signs", + "ZOffset": 50, + "Left": false, + "SignType": 3, + "Pos": "[-7819.8281 -5806.981 -14586.2061]" + }, + "391": + { + "YOffset": 12.3077, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 50, + "Left": false, + "SignType": 16, + "Pos": "[15720.1074 -4686.9722 -14271.1055]" + }, + "392": + { + "YOffset": 12.3077, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 50, + "Left": false, + "SignType": 5, + "Pos": "[15719.9063 2634.167 -14271.7061]" + }, + "393": + { + "YOffset": 12.3077, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 50, + "Left": false, + "SignType": 4, + "Pos": "[-14540.793 -1349.7113 -14033.2383]" + }, + "394": + { + "YOffset": 12.3077, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 50, + "Left": false, + "SignType": 3, + "Pos": "[-14540.793 -6937.7114 -13808.5313]" + }, + "395": + { + "YOffset": 6.1538, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": -3.0769, + "Left": false, + "SignType": 29, + "Pos": "[-4013.1636 -15217.207 -13670.5059]" + }, + "396": + { + "YOffset": -36.9231, + "Angles": "{0 248.3094 0}", + "Class": "gmod_track_signs", + "ZOffset": 18.4615, + "Left": false, + "SignType": 19, + "Pos": "[15128.2002 1845.5918 -10862.0684]" + }, + "397": + { + "YOffset": -9.2308, + "Angles": "{359.5744 269.4295 0}", + "Class": "gmod_track_signs", + "ZOffset": 18.4615, + "Left": false, + "SignType": 19, + "Pos": "[14898.542 2114.7686 -10852.0752]" + }, + "Version": 1.1 +} + + diff --git a/lua/metrostroi_data/signs_gm_metrostroi_b46_lite.lua b/lua/metrostroi_data/signs_gm_metrostroi_b46_lite.lua new file mode 100644 index 0000000..1c9e8f2 --- /dev/null +++ b/lua/metrostroi_data/signs_gm_metrostroi_b46_lite.lua @@ -0,0 +1 @@ +{"1":{"Pos":"[10057.916 -2351.9995 -4380.4741]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 90 0}","Settings":196612},"2":{"Pos":"[-9296.2793 -4120.3037 -3868.4739]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 45 0}","Settings":196612},"3":{"Pos":"[-13232.8633 256.0998 -3868.4739]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225 0}","Settings":196612},"4":{"Pos":"[-10871 -3511.4963 -2844.4739]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196616},"5":{"Pos":"[-9863 2616.6401 -2844.4739]","TrafficLights":144,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 180 0}","Settings":65544},"6":{"Pos":"[639.494 -4917.5791 -2844.4736]","TrafficLights":144,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 11.25 0}","Settings":197124},"7":{"Pos":"[-6104.6909 -1343.7942 -4380.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196612},"8":{"Pos":"[8465.207 10663.4023 -2331.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":197124},"9":{"Pos":"[8131.5688 9693.7012 -2332.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 5.34 0}","Settings":74752},"10":{"Pos":"[8465 -4204.7715 -2332.2742]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196609},"11":{"Pos":"[8959.249 -9348.8311 -2332.4968]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.3374 173.8217 0}","Settings":196616},"12":{"Pos":"[15459.793 -6094.0938 -481.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":197124},"13":{"Pos":"[15460 3646.5662 -481.4739]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196612},"14":{"Pos":"[14451.793 -2491.5957 -481.5056]","TrafficLights":144,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":65540},"15":{"Pos":"[14824.0938 -10641.6025 -609.5056]","TrafficLights":2,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":73728},"16":{"Pos":"[15088.0938 -10650.0205 -609.5056]","TrafficLights":2,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":75776},"17":{"Pos":"[14823.8926 -15629.6328 -609.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":256},"18":{"Pos":"[15087.8926 -15625.7744 -609.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":256},"19":{"Pos":"[4262.7251 14520.207 528.4944]","TrafficLights":64,"Class":"gmod_track_signal","LightsStyle":2,"Angles":"{-0 90 0}","Settings":196616},"20":{"Pos":"[-6612.5107 14784.2061 528.4944]","TrafficLights":64,"Class":"gmod_track_signal","LightsStyle":2,"Angles":"{0 270 0}","Settings":196616},"21":{"Pos":"[9473.207 11228.4951 -2331.5056]","TrafficLights":64,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196612},"22":{"Pos":"[2791.3079 5810.2344 -2331.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":2,"Angles":"{0 191.25 0}","Settings":196608},"23":{"Pos":"[-15520.207 -3760.8923 -1696.5056]","TrafficLights":64,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196609},"24":{"Pos":"[-763.7938 3107.5146 -2844.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196612},"25":{"Pos":"[2320.564 -8203.5195 -2844.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 191.25 0}","Settings":197124},"26":{"Pos":"[1647.1576 -7329.3906 -2844.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 167.224 0}","Settings":73728},"27":{"Pos":"[462.5726 1138.698 -2844.4736]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 191.25 0}","Settings":196616},"28":{"Pos":"[-6519.2637 -11023.585 -2844.4861]","TrafficLights":64,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.691 196.4083 0}","Settings":196616},"29":{"Pos":"[-10872.207 11482.5322 -3356.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":197124},"30":{"Pos":"[-10576.668 4973.6953 -2844.5056]","TrafficLights":2,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 351.0319 0}","Settings":74752},"31":{"Pos":"[-10167.1504 5039.4434 -2844.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 187.8205 0}","Settings":204800},"32":{"Pos":"[-10235.0938 9007.7129 -2844.5056]","TrafficLights":2,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":73728},"33":{"Pos":"[-10499.0938 8968.7568 -2844.5056]","TrafficLights":2,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":75776},"34":{"Pos":"[-7900.5488 -5076.7427 -3868.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225 0}","Settings":196612},"35":{"Pos":"[10335.1572 -11559.5518 -3868.5056]","TrafficLights":64,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 135 0}","Settings":196609},"36":{"Pos":"[-8980.8008 15039.4063 -3868.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":197124},"37":{"Pos":"[-7118.019 16046.9941 -3868.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":197124},"38":{"Pos":"[-1904.8762 15038.793 -3868.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":131072},"39":{"Pos":"[10575.8457 15038.793 -4380.5059]","TrafficLights":64,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196612},"40":{"Pos":"[14987.7949 2803.1431 -4380.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196612},"41":{"Pos":"[16011.7939 9869.1816 -4380.5059]","TrafficLights":64,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196612},"42":{"Pos":"[-1938.6373 -2351.7937 -4380.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":197124},"43":{"Pos":"[14737.1729 -4739.2744 -481.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 8.9682 0}","Settings":204800},"44":{"Pos":"[8958.6445 4510.7813 -2331.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 204.0262 0}","Settings":73728},"45":{"Pos":"[9473 1890.8022 -2332.2742]","TrafficLights":144,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 180 0}","Settings":65540},"46":{"Pos":"[-9863.207 11601.8135 -3356.5056]","TrafficLights":64,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196616},"47":{"Pos":"[437.5148 9754.1934 -3356.5056]","TrafficLights":64,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 45 0}","Settings":196609},"48":{"Pos":"[-8082.4414 15557.5938 -3868.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 245.974 0}","Settings":73728},"49":{"Pos":"[178.0594 -1865.0981 -4380.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 65.974 0}","Settings":73728},"50":{"Pos":"[-5624.3574 -8491.457 -3868.5056]","TrafficLights":64,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 33.75 0}","Settings":196609},"51":{"Pos":"[-3390.2622 14620.9707 -3356.5056]","TrafficLights":64,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225 0}","Settings":196616},"52":{"Pos":"[-15072.2061 11431.0439 5.5887]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 179.9999 0}","Settings":196616},"53":{"Pos":"[14995.2178 7377.0879 -481.4868]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.491 339.6796 0}","Settings":196612},"54":{"Pos":"[-6981.9805 14520.2061 528.4944]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196612},"55":{"Pos":"[0 0 0]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":65544},"56":{"Pos":"[-15519.793 1485.257 -1181.0514]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 0 0}","Settings":196609},"57":{"Pos":"[271.7938 5855.9697 -2844.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196612},"58":{"Pos":"[278.1926 11417.8643 -2331.5015]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.4423 178.1627 0}","Settings":0},"59":{"Pos":"[3208.2971 15143.4717 -2331.4944]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{358.1851 101.1251 0}","Settings":0},"60":{"Pos":"[4404.873 5787.1084 -3356.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 45 0}","Settings":0},"61":{"Pos":"[8075.6572 2116.5635 -3709.8516]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9999 45 0}","Settings":0},"62":{"Pos":"[11394.2695 -1845.7062 -3868.5027]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.3929 27.7636 0}","Settings":0},"63":{"Pos":"[11877.2627 -6860.2979 -3868.5039]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.878 340.6185 0}","Settings":0},"64":{"Pos":"[8912.7012 -11086.6455 -3868.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.5343 313.484 0}","Settings":0},"65":{"Pos":"[4391.2754 -13531.7012 -3868.5054]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.5705 279.4521 0}","Settings":0},"66":{"Pos":"[-504.9932 -12200.1309 -3868.499]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{358.2617 235.3786 0}","Settings":0},"67":{"Pos":"[3331.3552 15038.9873 -3906.9851]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9998 90.0002 0}","Settings":0},"68":{"Pos":"[-15217.749 5111.7129 -3868.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 168.75 0}","Settings":0},"69":{"Pos":"[-14705.9863 10236.8545 -3868.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"70":{"Pos":"[-9329.8721 -8707.0879 -2844.4868]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.1581 47.3008 0}","Settings":0},"71":{"Pos":"[-7110.9429 -13189.9561 -2844.4976]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.5561 14.3954 0}","Settings":0},"72":{"Pos":"[-3402.5879 -16118.5293 -2844.4976]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.8163 91.9397 0}","Settings":0},"73":{"Pos":"[1583.2874 -14827.9795 -2844.5027]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.8082 123.5424 0}","Settings":0},"74":{"Pos":"[-1364.9922 14520.207 528.4944]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"75":{"Pos":"[8164.3013 -9609.2363 -2332.5012]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.7144 346.364 0}","Settings":0},"76":{"Pos":"[5301.3701 -13792.2031 -2332.5046]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6956 300.4095 0}","Settings":0},"77":{"Pos":"[279.7132 -14966.957 -2332.4995]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9999 270.4657 0}","Settings":0},"78":{"Pos":"[-4884.5215 -14967.0127 -1768.3701]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.0002 270 0}","Settings":0},"79":{"Pos":"[-10042.5313 -14582.0186 -1696.5031]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.549 254.6117 0}","Settings":0},"80":{"Pos":"[-14088.042 -11466.1123 -1696.5031]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.7799 207.9683 0}","Settings":0},"81":{"Pos":"[-15072.0137 -6388.561 -1696.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"82":{"Pos":"[-15071.793 -1186.1405 -1507.2463]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 180 0}","Settings":0},"83":{"Pos":"[-15071.793 3987.2588 -873.9995]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"84":{"Pos":"[15844.207 8839.2578 -481.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"85":{"Pos":"[14801.2412 13756.7676 -473.5585]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.2318 226.1817 0}","Settings":0},"86":{"Pos":"[9882.1387 14784.2061 3.597]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"87":{"Pos":"[4710.9937 14784.207 528.4944]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"88":{"Pos":"[-505.687 14784.2061 528.4944]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"89":{"Pos":"[15294.7734 -965.7324 -4380.5044]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.4557 143.1395 0}","Settings":0},"90":{"Pos":"[16011.9883 4108.9312 -4380.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"91":{"Pos":"[9525.4463 14520.2061 47.3933]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 90 0}","Settings":0},"92":{"Pos":"[14479.8125 13695.4707 -483.948]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6754 48.7719 0}","Settings":0},"93":{"Pos":"[15148.416 14847.0996 -4380.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.4899 220.0733 0}","Settings":0},"94":{"Pos":"[10293.1328 16046.9863 -4380.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"95":{"Pos":"[5090.4028 16046.9883 -4103.9785]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"96":{"Pos":"[-103.1785 16046.793 -3868.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"97":{"Pos":"[-15435.8701 -9369.3906 -1696.5013]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.1275 6.1758 0}","Settings":0},"98":{"Pos":"[-13379.1709 -14031.4316 -1696.5057]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.501 46.3687 0}","Settings":0},"99":{"Pos":"[-8654.4521 -15931.9463 -1696.5038]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.1279 85.1102 0}","Settings":0},"100":{"Pos":"[-3467.3347 -15991.0127 -1862.9907]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9998 90 0}","Settings":0},"101":{"Pos":"[1713.4758 -15966.6045 -2332.4993]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.691 93.7191 0}","Settings":0},"102":{"Pos":"[6556.9712 -14336.0557 -2332.5054]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.469 128.196 0}","Settings":0},"103":{"Pos":"[-9374.4795 -6789.0767 -2844.491]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.8517 198.0242 0}","Settings":0},"104":{"Pos":"[-7086.2207 14928.2676 -3356.4971]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.3834 93.455 0}","Settings":0},"105":{"Pos":"[-11876.8271 14783.7939 35.166]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 269.9999 0}","Settings":0},"106":{"Pos":"[7089.9873 15520.5449 -2331.5022]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.6381 252.6004 0}","Settings":0},"107":{"Pos":"[1935.4659 15606.2227 -2331.4988]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.0386 283.1187 0}","Settings":0},"108":{"Pos":"[-763.5446 11694.8613 -2331.4956]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.283 359.4565 0}","Settings":0},"109":{"Pos":"[13437.2002 -6960.9951 -3868.5022]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.3043 165.42 0}","Settings":0},"110":{"Pos":"[12673.832 -1942.9647 -3868.5]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.451 209.6323 0}","Settings":0},"111":{"Pos":"[9264.5781 1965.6403 -3865.4905]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225.0001 0}","Settings":0},"112":{"Pos":"[5582.1348 5648.8477 -3356.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225 0}","Settings":0},"113":{"Pos":"[1914.8453 9316.1367 -3356.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225 0}","Settings":0},"114":{"Pos":"[14746.2754 12688.9258 -4380.501]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.5489 17.3857 0}","Settings":0},"115":{"Pos":"[-8460.7061 15736.7227 -3356.498]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.4511 287.4243 0}","Settings":0},"116":{"Pos":"[-2207.3306 -12624.3555 -3868.4993]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.0001 45.4948 0}","Settings":0},"117":{"Pos":"[2160.4744 -15305.0674 -3868.5027]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.3743 77.9422 0}","Settings":0},"118":{"Pos":"[11902.7939 -1272.2628 -4380.4946]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{358.4192 279.2995 0}","Settings":0},"119":{"Pos":"[-9863 -3173.8479 -2844.4739]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"120":{"Pos":"[-15395.2295 8164.4971 -360.9442]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.0242 351.6276 0}","Settings":0},"121":{"Pos":"[-15519.793 443.943 -1308.528]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 0 0}","Settings":0},"122":{"Pos":"[-763.9872 8011.8442 -2657.7488]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.0002 0 0}","Settings":0},"123":{"Pos":"[-190.3686 -745.5806 -2844.5054]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 11.25 0}","Settings":0},"124":{"Pos":"[6769.0679 14718.9814 -2331.5061]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.779 62.2451 0}","Settings":0},"125":{"Pos":"[-3324.2107 -9652.8076 -3868.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225 0}","Settings":0},"126":{"Pos":"[-9863.2227 6733.3438 -2874.218]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{90 0 0}","Settings":0},"127":{"Pos":"[9473 -4094.7969 -2331.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"128":{"Pos":"[-13326.3828 14399.7373 6.0184]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.7788 105.0844 0}","Settings":0},"129":{"Pos":"[14452 3797.0867 -481.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"130":{"Pos":"[5736.2153 -15046.7939 -3868.5054]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.0111 111.6281 0}","Settings":0},"131":{"Pos":"[759.971 -1344.4061 -4380.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"132":{"Pos":"[1712.0732 -2337.6472 -4396.4688]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 83.5099 0}","Settings":0},"133":{"Pos":"[5855.1265 -2352 -4380.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"134":{"Pos":"[7969.125 14520.2051 238.4857]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 90 0}","Settings":0},"135":{"Pos":"[12082.7207 14511.1602 -276.2962]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.9869 86.6679 0}","Settings":0},"136":{"Pos":"[15101.7549 12938.5576 -495.269]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.0307 29.2924 0}","Settings":0},"137":{"Pos":"[-13813.6084 13873.3076 -3868.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.51 139.9078 0}","Settings":0},"138":{"Pos":"[-3634.9148 13826.8965 -3356.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 45 0}","Settings":0},"139":{"Pos":"[1977.2397 15038.7949 -3868.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"140":{"Pos":"[6124.1953 15038.8125 -4227.7061]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9999 90 0}","Settings":0},"141":{"Pos":"[14987.9873 8880.8359 -4380.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"142":{"Pos":"[4520.0952 -1343.7938 -4380.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 270 0}","Settings":197124},"143":{"Pos":"[3498.7268 -14655.207 -4893.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 270 0}","Settings":196612},"144":{"Pos":"[-3198.6594 -14654.793 -4893.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196612},"145":{"Pos":"[-12656.793 -906.0836 -4893.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196616},"146":{"Pos":"[2620.9817 -2239.7939 -7592.1094]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":2,"Angles":"{0 270 0}","Settings":196616},"147":{"Pos":"[-3734.7041 -2239.7939 -7592.1094]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":1,"Angles":"{0 270 0}","Settings":196616},"148":{"Pos":"[-4441.2705 -13606.6895 -7592.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":197124},"149":{"Pos":"[-3335.8074 -12599.1074 -7592.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":197128},"150":{"Pos":"[-12762.4795 -12214.793 -7592.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 270 0}","Settings":196616},"151":{"Pos":"[-4406.1216 -2503.7939 -7592.1094]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":1,"Angles":"{0 90 0}","Settings":196616},"152":{"Pos":"[2009.4263 -2503.7939 -7592.1094]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":1,"Angles":"{0 90 0}","Settings":196616},"153":{"Pos":"[-5372.2061 9824.2656 -6029.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196612},"154":{"Pos":"[-13680.793 7247.7344 -5762.168]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196609},"155":{"Pos":"[-3985.2231 -15662.793 -4893.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196612},"156":{"Pos":"[2686.7981 -15663.207 -4893.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196612},"157":{"Pos":"[3818.9819 -13606.793 -7592.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196612},"158":{"Pos":"[-4470.335 -13095.9648 -7592.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 245.974 0}","Settings":73728},"159":{"Pos":"[-5690.041 6405.2061 -9047.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196609},"160":{"Pos":"[-15797.7939 -9453.1299 -8288.2744]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.0001 359.9999 0}","Settings":196616},"161":{"Pos":"[7336.9351 -16074.207 -5902.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 90 0}","Settings":196616},"162":{"Pos":"[12258.4941 -1521.9679 -5390.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196612},"163":{"Pos":"[12259.207 4891.9087 -5390.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196612},"164":{"Pos":"[-10268 -432.3572 -5390.4741]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196612},"165":{"Pos":"[-29.206 4921.5488 -5390.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196616},"166":{"Pos":"[-15899.207 -8551.8916 -6913.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196880},"167":{"Pos":"[-15404.2061 -8040.1143 -6913.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196616},"168":{"Pos":"[-1069.2062 5910.2842 -5390.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196612},"169":{"Pos":"[-9260 5652.1021 -5390.4741]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 180 0}","Settings":196612},"170":{"Pos":"[11250.9063 578.2291 -5390.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196612},"171":{"Pos":"[11251.207 -9754.6328 -5902.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196616},"172":{"Pos":"[-15270.2051 -9362.9063 -8299.2695]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 180 0}","Settings":196609},"173":{"Pos":"[-6879.1499 5396.7939 -9047.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196612},"174":{"Pos":"[393.1985 5396.7939 -9047.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196880},"175":{"Pos":"[376.1714 6405.2061 -9047.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196612},"176":{"Pos":"[11742.4707 -487.8091 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 335.974 0}","Settings":65536},"177":{"Pos":"[11956.541 4478.8311 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 187.8205 0}","Settings":65536},"178":{"Pos":"[11883.1084 11554.9697 -4879.4971]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.2826 181.8461 0}","Settings":196608},"179":{"Pos":"[7374.9424 15410.793 -4879.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196608},"180":{"Pos":"[-3248.718 15320.7012 -3868.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 278.9681 0}","Settings":131072},"181":{"Pos":"[-11535.1143 -173.4311 -4380.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6955 239.5747 0}","Settings":0},"182":{"Pos":"[-14400.7393 3994.73 -4380.4995]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.8891 193.6105 0}","Settings":0},"183":{"Pos":"[-14260.375 9102.9512 -4380.5054]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.8981 155.0394 0}","Settings":0},"184":{"Pos":"[-9720.8018 10943.0879 -4444.3662]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9998 90 0}","Settings":0},"185":{"Pos":"[-4566.749 10943.0127 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"186":{"Pos":"[627.947 10943.0137 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"187":{"Pos":"[5785.8008 10586.334 -4893.5044]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.0358 67.6928 0}","Settings":0},"188":{"Pos":"[7820.9873 6187.7397 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"189":{"Pos":"[7820.9873 969.3203 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"190":{"Pos":"[7820.9873 -4765.3062 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"191":{"Pos":"[7821.0127 -9963.9473 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"192":{"Pos":"[-15812.2051 -8885.8281 -7592.1094]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"193":{"Pos":"[-15352.8086 -3473.572 -7608.0322]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.5488 144.0053 0}","Settings":0},"194":{"Pos":"[-10404.377 -2503.7939 -7592.1094]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"195":{"Pos":"[9527.4238 -14799.5615 -5902.5034]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.7797 297.7136 0}","Settings":0},"196":{"Pos":"[4436.0327 -15305.9863 -6178.0205]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 270 0}","Settings":0},"197":{"Pos":"[-699.41 -15305.9863 -6808.5771]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 270 0}","Settings":0},"198":{"Pos":"[-5851.3076 -15305.9863 -7441.1543]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 270 0}","Settings":0},"199":{"Pos":"[-11010.5693 -15306.0127 -8030.6904]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 270.0001 0}","Settings":0},"200":{"Pos":"[-15197.71 -13101.4033 -8036.4956]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{358.2613 190.5965 0}","Settings":0},"201":{"Pos":"[-15270.0117 -7962.8213 -8471.1787]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 180 0}","Settings":0},"202":{"Pos":"[-15269.8809 -2787.5901 -9047.4941]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.7647 179.5035 0}","Settings":0},"203":{"Pos":"[-14093.0127 2237.0481 -9047.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6955 149.5748 0}","Settings":0},"204":{"Pos":"[-1069.0127 269.9673 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"205":{"Pos":"[-1069.0127 -4927.9468 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"206":{"Pos":"[-2659.7571 -9605.291 -5390.5034]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6801 300.642 0}","Settings":0},"207":{"Pos":"[-7671.3276 -9604.0215 -5390.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6797 239.3199 0}","Settings":0},"208":{"Pos":"[-9260.0117 -4944.8359 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"209":{"Pos":"[-9260 257.5346 -5390.4741]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"210":{"Pos":"[-15519.7939 6629.9409 -549.3873]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 0 0}","Settings":0},"211":{"Pos":"[-9073.7314 -2239.7939 -7592.1094]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"212":{"Pos":"[-14225.0742 -2393.9048 -7592.4976]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.2303 285.1031 0}","Settings":0},"213":{"Pos":"[-16076.2051 -6855.4507 -7592.1094]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"214":{"Pos":"[-15042.4873 -11936.0674 -7592.4927]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.4462 54.0096 0}","Settings":0},"215":{"Pos":"[-10111.7529 -12912.7207 -7592.4961]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.5155 71.7933 0}","Settings":0},"216":{"Pos":"[7340.5557 -1606.9313 -7592.0933]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.8519 133.0737 0}","Settings":0},"217":{"Pos":"[11016.4287 2060.3979 -7592.1094]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 135 0}","Settings":0},"218":{"Pos":"[14659.0703 5800.7822 -7591.4941]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.655 143.64 0}","Settings":0},"219":{"Pos":"[14283.4668 10515.6387 -7387.8579]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.8591 220.4404 0}","Settings":0},"220":{"Pos":"[10022.416 13724.6191 -7079.4941]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.4877 268.1711 0}","Settings":0},"221":{"Pos":"[6074.5278 10877.8193 -6891.1431]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 315 0}","Settings":0},"222":{"Pos":"[2440.6277 7243.3359 -6261.3921]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 314.9999 0}","Settings":0},"223":{"Pos":"[-1802.0013 4567.5391 -6029.4873]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{358.8238 273.5348 0}","Settings":0},"224":{"Pos":"[7647.5571 -14797.3496 -4893.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.4899 130.0733 0}","Settings":0},"225":{"Pos":"[8845.0137 -9927.5205 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 180 0}","Settings":0},"226":{"Pos":"[8844.9883 -4698.5522 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"227":{"Pos":"[8844.9873 489.9238 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"228":{"Pos":"[8844.9863 5708.9536 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"229":{"Pos":"[8017.9048 10740.7217 -4893.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.4899 220.0733 0}","Settings":0},"230":{"Pos":"[3148.7351 11984.0137 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"231":{"Pos":"[-2079.373 11983.0137 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"232":{"Pos":"[-7288.8452 11982.9121 -4728.2676]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9998 270 0}","Settings":0},"233":{"Pos":"[-12467.6963 11935.5469 -4380.4985]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.3371 277.6424 0}","Settings":0},"234":{"Pos":"[-15706.8008 8473.3262 -4380.5005]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.0862 355.4971 0}","Settings":0},"235":{"Pos":"[-15373.5195 2780.9834 -4380.499]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.4507 15.3844 0}","Settings":0},"236":{"Pos":"[-12380.5049 -1286.3052 -4380.5034]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.3045 59.585 0}","Settings":0},"237":{"Pos":"[-7348.1978 -2351.9871 -4380.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"238":{"Pos":"[-29.013 10353.6045 -5831.8682]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 180 0}","Settings":0},"239":{"Pos":"[-1366.2112 15139.3633 -5871.2617]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{273.4532 233.2427 0}","Settings":0},"240":{"Pos":"[-6395.6782 15921.9863 -5901.9858]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"241":{"Pos":"[-11591.2617 15921.9863 -5901.9858]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"242":{"Pos":"[-15689.623 13468.6396 -5902.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.4515 344.8298 0}","Settings":0},"243":{"Pos":"[-15899.4063 8338.5283 -6209.7427]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 0 0}","Settings":0},"244":{"Pos":"[-15898.7949 3190.7207 -6832.6196]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 0 0}","Settings":0},"245":{"Pos":"[-15899.2051 -2016.0342 -6913.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"246":{"Pos":"[-9209.0498 11150.3447 -5390.4976]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{358.4178 172.348 0}","Settings":0},"247":{"Pos":"[-5748.8091 14364.0029 -5390.4976]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.176 94.4941 0}","Settings":0},"248":{"Pos":"[-553.0953 14387.0127 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"249":{"Pos":"[4657.9434 14387.0137 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"250":{"Pos":"[9732.4834 13759.5791 -5390.5039]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6011 56.2716 0}","Settings":0},"251":{"Pos":"[11251.2061 9052.4023 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"252":{"Pos":"[-15404.2051 -2768.6458 -6913.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"253":{"Pos":"[-15403.7939 2466.0073 -6898.7935]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 179.9999 0}","Settings":0},"254":{"Pos":"[-15404.4063 7645.9424 -6294.7817]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"255":{"Pos":"[-15317.2041 12771.2666 -5902.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{358.0087 169.3353 0}","Settings":0},"256":{"Pos":"[-11085.248 14898.9863 -5901.9858]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"257":{"Pos":"[-5884.1948 14898.9863 -5901.9858]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"258":{"Pos":"[-1278.8949 13221.3301 -5902.4976]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.3429 20.1481 0}","Settings":0},"259":{"Pos":"[12259.0137 10475.9199 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"260":{"Pos":"[10378.6348 14984.127 -5390.5044]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.1019 245.0677 0}","Settings":0},"261":{"Pos":"[5223.7173 15411.0137 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"262":{"Pos":"[30.1441 15411.0127 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"263":{"Pos":"[-5182.8481 15411.0137 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 270 0}","Settings":0},"264":{"Pos":"[-9771.0557 13669.291 -5390.5044]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.221 332.2693 0}","Settings":0},"265":{"Pos":"[-10268.0137 8529.125 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"266":{"Pos":"[11937.292 -13951.0859 -5902.501]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.9642 157.7244 0}","Settings":0},"267":{"Pos":"[12259.0137 -8755.2559 -5902.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"268":{"Pos":"[-15436.9131 -14747.6191 -8036.4912]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.0049 29.2004 0}","Settings":0},"269":{"Pos":"[-11111.7129 -16074.0127 -8033.7046]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90.0001 0}","Settings":0},"270":{"Pos":"[-5403.3228 -16073.9863 -7384.1841]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"271":{"Pos":"[-174.8765 -16073.9863 -6742.208]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"272":{"Pos":"[-10930.0371 5974.2832 -9047.5]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.6067 287.2322 0}","Settings":0},"273":{"Pos":"[-14868.3193 2801.9031 -9047.5029]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.2203 332.0264 0}","Settings":0},"274":{"Pos":"[-15798.0137 -2294.9407 -9047.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"275":{"Pos":"[-13680.9863 1838.9924 -5099.2046]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0.0001 0}","Settings":0},"276":{"Pos":"[-13680.9863 -3341.3782 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"277":{"Pos":"[-13642.7666 -8549.1328 -4893.4985]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.691 3.7191 0}","Settings":0},"278":{"Pos":"[-11862.9746 -13369.6074 -4893.5054]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.493 40.9 0}","Settings":0},"279":{"Pos":"[-12656.9863 4347.1577 -5408.1055]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 180 0}","Settings":0},"280":{"Pos":"[-12657.0137 9498.1162 -6011.001]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9999 179.9998 0}","Settings":0},"281":{"Pos":"[-9951.8809 13263.9736 -6029.4966]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.3834 93.455 0}","Settings":0},"282":{"Pos":"[-6513.894 10287.209 -6029.4971]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9995 0.5858 0}","Settings":0},"283":{"Pos":"[-6418.7695 5128.5796 -6029.4941]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.9906 12.7913 0}","Settings":0},"284":{"Pos":"[-2141.4924 3161.1877 -6029.4961]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.1578 102.8124 0}","Settings":0},"285":{"Pos":"[1861.6235 6291.0288 -6223.5142]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 135 0}","Settings":0},"286":{"Pos":"[5486.3335 9916.624 -6851.3472]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.0001 135 0}","Settings":0},"287":{"Pos":"[9636.5146 13425.2881 -7095.002]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6168 102.4656 0}","Settings":0},"288":{"Pos":"[13778.2295 10666.4795 -7331.2788]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 45.0001 0}","Settings":0},"289":{"Pos":"[14563.9619 6121.5439 -7600.7695]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{358.1516 325.1198 0}","Settings":0},"290":{"Pos":"[10974.7168 2392.0388 -7592.1094]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 315 0}","Settings":0},"291":{"Pos":"[-8714.8203 -13885.166 -4893.5044]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.9889 246.6131 0}","Settings":0},"292":{"Pos":"[-12121.6641 -10112.4053 -4893.501]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.2474 199.165 0}","Settings":0},"293":{"Pos":"[-10268.0137 -6066.6006 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"294":{"Pos":"[-8589.0137 -10681.582 -5390.5024]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.3203 59.3401 0}","Settings":0},"295":{"Pos":"[-3484.4741 -11184.5967 -5390.4971]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.8241 94.5481 0}","Settings":0},"296":{"Pos":"[-73.4846 -7922.7305 -5390.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.3386 173.9979 0}","Settings":0},"297":{"Pos":"[-29.0129 -2709.4915 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"298":{"Pos":"[-8239.3096 13886.0068 -6029.501]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.0398 258.8637 0}","Settings":0},"299":{"Pos":"[-12988.2344 12575.3887 -6029.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.3988 326.2875 0}","Settings":0},"300":{"Pos":"[-15519.7939 6568.5557 -556.9244]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 0 0}","Settings":0},"301":{"Pos":"[-15519.7939 6568.5557 -556.9244]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 0 0}","Settings":0},"302":{"Pos":"[-15519.7939 6568.5557 -556.9244]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 0 0}","Settings":0},"303":{"Pos":"[-293.7491 9880.207 -8603.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196612},"304":{"Pos":"[-6680.3823 9880.207 -8603.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 270 0}","Settings":196612},"305":{"Pos":"[-3166.3042 4781.9761 -9614.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196612},"306":{"Pos":"[-2546.7551 -15156.793 -10126.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":197124},"307":{"Pos":"[-293.4038 -14650.3906 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 245.974 0}","Settings":65540},"308":{"Pos":"[2250.5728 -15157.0938 -10126.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196609},"309":{"Pos":"[1020.1636 15562.2061 -10126.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196609},"310":{"Pos":"[5419.5835 -16180.207 -10638.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 90 0}","Settings":196612},"311":{"Pos":"[-8835.7295 2666.8955 -10637.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225 0}","Settings":65540},"312":{"Pos":"[-7004.1895 10650.793 -10638.5059]","TrafficLights":144,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":65540},"313":{"Pos":"[-4940.9863 10933.5684 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 98.9682 0}","Settings":204800},"314":{"Pos":"[-552.3101 11024.0938 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 270 0}","Settings":73728},"315":{"Pos":"[-566.7998 11288.0938 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 270 0}","Settings":75776},"316":{"Pos":"[-4615.2744 11334.7598 -10638.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 263.43 0}","Settings":74752},"317":{"Pos":"[-3588.4104 11659.793 -10638.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":197124},"318":{"Pos":"[-7437.644 11659.793 -10638.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196612},"319":{"Pos":"[-5515.5415 -1662.2102 -10637.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 45 0}","Settings":196612},"320":{"Pos":"[1385.4966 -15171.207 -10638.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196609},"321":{"Pos":"[5137.2852 14522.2061 -10126.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196609},"322":{"Pos":"[2285.3506 -14149.207 -10126.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":197124},"323":{"Pos":"[-10721.707 -8323.2373 -10126.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225 0}","Settings":196612},"324":{"Pos":"[-4046.8933 3752.2061 -9618.1865]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 90 0}","Settings":196609},"325":{"Pos":"[-12135.2061 4749.9482 -8604.7588]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 180 0}","Settings":196612},"326":{"Pos":"[-1212.7971 8871.793 -8603.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196609},"327":{"Pos":"[12440.2051 -7281.0571 -7691.2676]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9999 360 0}","Settings":196612},"328":{"Pos":"[13464.207 -8558.8457 -7592.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196609},"329":{"Pos":"[-13159.207 4911.9795 -8603.7959]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196609},"330":{"Pos":"[-4260.8164 -1907.8918 -10638.2061]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225 0}","Settings":196612},"331":{"Pos":"[15093.041 -5732.6035 -481.5056]","TrafficLights":2,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 178.711 0}","Settings":74752},"332":{"Pos":"[-15519.793 4050.1641 -866.1442]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 0 0}","Settings":65537},"333":{"Pos":"[-9233.7363 8768.7646 -8603.7861]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{358.1851 101.1251 0}","Settings":0},"334":{"Pos":"[-11415.0947 9641.4785 -10638.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.9642 337.7245 0}","Settings":0},"335":{"Pos":"[-11111.2168 4083.7024 -10638.498]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.888 34.3221 0}","Settings":0},"336":{"Pos":"[4377.8799 8870.8516 -8603.5]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.7647 89.5035 0}","Settings":0},"337":{"Pos":"[9416.2646 7608.3506 -8603.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6256 57.0517 0}","Settings":0},"338":{"Pos":"[12070.0508 3788.0005 -8603.5]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.5493 15.3638 0}","Settings":0},"339":{"Pos":"[12439.9883 -1511.793 -8391.8047]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"340":{"Pos":"[-3597.8999 -15171.0137 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"341":{"Pos":"[-8967.417 -15027.9004 -10638.501]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{358.2612 261.0835 0}","Settings":0},"342":{"Pos":"[-13552.6836 -12596.9297 -10638.5039]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.531 218.191 0}","Settings":0},"343":{"Pos":"[-15123.4971 -7596.3179 -10638.5]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.5348 182.5592 0}","Settings":0},"344":{"Pos":"[-15136.0117 -2301.5073 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"345":{"Pos":"[-15135.9873 2437.9031 -10539.415]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9999 180 0}","Settings":0},"346":{"Pos":"[-15070.4297 7727.9521 -10126.4971]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{358.6622 173.8214 0}","Settings":0},"347":{"Pos":"[-13056.3125 12504.1602 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.4991 133.6252 0}","Settings":0},"348":{"Pos":"[-8254.5547 14464.3799 -10126.499]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.0881 94.887 0}","Settings":0},"349":{"Pos":"[-2914.8477 14522.0137 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"350":{"Pos":"[7266.9844 -15156.9863 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"351":{"Pos":"[12399.4521 -13993.8945 -10126.5039]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.3043 120.42 0}","Settings":0},"352":{"Pos":"[15276.9648 -9821.25 -10126.502]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.2856 166.3855 0}","Settings":0},"353":{"Pos":"[15583.0137 -4595.188 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"354":{"Pos":"[15583.0137 742.9158 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"355":{"Pos":"[15583.0137 5999.5239 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"356":{"Pos":"[14994.7266 11171.6406 -10126.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.7526 199.1832 0}","Settings":0},"357":{"Pos":"[11468.876 14866.5 -10126.502]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.0111 246.6283 0}","Settings":0},"358":{"Pos":"[10874.0146 -12001.6113 -7592.5044]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6801 300.642 0}","Settings":0},"359":{"Pos":"[6223.2944 -12599.0137 -7592.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"360":{"Pos":"[-13159.0127 14.2264 -9128.2939]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 0 0}","Settings":0},"361":{"Pos":"[-13158.9863 -5220.103 -9614.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"362":{"Pos":"[-12045.6602 -10370.6797 -9614.5039]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.3043 30.42 0}","Settings":0},"363":{"Pos":"[-7882.6694 -13318.5605 -9614.5029]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.2856 76.3855 0}","Settings":0},"364":{"Pos":"[-2620.8198 -13636.0391 -9614.5]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.2348 91.5137 0}","Settings":0},"365":{"Pos":"[2378.6838 -12290.3242 -9614.5039]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.4293 125.5423 0}","Settings":0},"366":{"Pos":"[5049.2388 -7925.7832 -9614.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.9289 169.618 0}","Settings":0},"367":{"Pos":"[5251.5938 -2617.8445 -9614.499]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.4652 182.5872 0}","Settings":0},"368":{"Pos":"[3636.2017 2273.6362 -9614.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.469 218.196 0}","Settings":0},"369":{"Pos":"[-8230.2129 4781.9873 -10068.9854]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 270 0}","Settings":0},"370":{"Pos":"[-13500.6836 3344.2346 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.3988 326.2876 0}","Settings":0},"371":{"Pos":"[-14181.9863 -1751.5472 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"372":{"Pos":"[-13486.9072 -6845.7983 -10126.4961]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.888 34.3221 0}","Settings":0},"373":{"Pos":"[-9882.5547 -10588.209 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 45 0}","Settings":0},"374":{"Pos":"[10072.6426 -14223.2861 -10638.502]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.1019 155.0677 0}","Settings":0},"375":{"Pos":"[10142.085 -9089.1953 -10638.5039]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.4999 200.2214 0}","Settings":0},"376":{"Pos":"[6680.125 -5229.1069 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225 0}","Settings":0},"377":{"Pos":"[2151.3447 -3154.9871 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 270 0}","Settings":0},"378":{"Pos":"[8543.5996 -13607.0137 -7592.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"379":{"Pos":"[1224.6038 2488.1299 -9614.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6256 57.0517 0}","Settings":0},"380":{"Pos":"[3995.2644 -1819.5985 -9614.5]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{358.0716 11.9478 0}","Settings":0},"381":{"Pos":"[4005.5452 -7010.6045 -9614.501]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.8886 348.0261 0}","Settings":0},"382":{"Pos":"[1309.2362 -11312.3154 -9614.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6257 302.9336 0}","Settings":0},"383":{"Pos":"[-3730.2495 -12629.2207 -9614.499]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9999 270.4657 0}","Settings":0},"384":{"Pos":"[-8784.3037 -11566.0098 -9614.5039]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6955 239.5748 0}","Settings":0},"385":{"Pos":"[-11790.166 -7455.5776 -9614.5029]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.8891 193.6105 0}","Settings":0},"386":{"Pos":"[-12134.9863 -2251.8892 -9407.5098]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"387":{"Pos":"[-13157.9863 -4088.104 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"388":{"Pos":"[-12836.3369 1628.9767 -10126.501]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.0358 157.6928 0}","Settings":0},"389":{"Pos":"[-578.1279 -3658.9873 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"390":{"Pos":"[4544.9399 -4296.0713 -10638.501]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.112 55.6275 0}","Settings":0},"391":{"Pos":"[8314.0039 -7899.9863 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 45 0}","Settings":0},"392":{"Pos":"[9204.6338 -12803.6357 -10638.5039]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.3619 342.5622 0}","Settings":0},"393":{"Pos":"[13464.0137 -3360.6997 -8163.7271]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 180 0}","Settings":0},"394":{"Pos":"[13463.9863 1341.8978 -8603.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"395":{"Pos":"[12416.6328 6498.4976 -8603.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.2201 207.9805 0}","Settings":0},"396":{"Pos":"[8289.0674 9534.9824 -8603.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.2856 256.3855 0}","Settings":0},"397":{"Pos":"[-3957.7964 15562.0137 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"398":{"Pos":"[-9212.0381 15510.082 -10126.499]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.9119 274.9138 0}","Settings":0},"399":{"Pos":"[-14067.6055 13556.2695 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.5009 313.6262 0}","Settings":0},"400":{"Pos":"[-16085.7734 8848.0898 -10126.499]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.3378 353.8473 0}","Settings":0},"401":{"Pos":"[-16159.9883 3627.5591 -10401.8027]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.0002 0.0001 0}","Settings":0},"402":{"Pos":"[-16160.0117 -1655.6746 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"403":{"Pos":"[-16159.9863 -6965.7847 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"404":{"Pos":"[-15425.457 -12156.2471 -10638.5029]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.0109 23.3825 0}","Settings":0},"405":{"Pos":"[-11681.4473 -15622.3594 -10638.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.7529 70.8303 0}","Settings":0},"406":{"Pos":"[-6485.3677 -16180.0137 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"407":{"Pos":"[-1269.5033 -16180.0137 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"408":{"Pos":"[10165.6094 13934.7393 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.2472 70.8125 0}","Settings":0},"409":{"Pos":"[13885.6592 10351.752 -10126.5039]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.1125 21.2127 0}","Settings":0},"410":{"Pos":"[14559.0137 5165.7563 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"411":{"Pos":"[14559.0137 -210.3542 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"412":{"Pos":"[14559.0137 -5471.3242 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"413":{"Pos":"[13562.5693 -10671.5518 -10126.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.7798 332.0143 0}","Settings":0},"414":{"Pos":"[9427.1348 -13792.2129 -10126.499]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.5493 285.3638 0}","Settings":0},"415":{"Pos":"[10310.2588 -14249.6523 -96.8367]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":2,"Angles":"{359.6389 269.1971 0}","Settings":196612},"416":{"Pos":"[15591.8066 6535.6851 -97.5056]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":2,"Angles":"{-0 180 0}","Settings":196612},"417":{"Pos":"[5064.5938 5819.1406 -96.5002]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":1,"Angles":"{0.3496 315.1966 0}","Settings":65540},"418":{"Pos":"[-4913.2837 -14719.6953 -95.5057]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":1,"Angles":"{-0 270 0}","Settings":196612},"419":{"Pos":"[-14933.8125 9420.1416 540.3793]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":1,"Angles":"{359.9994 179.3347 0}","Settings":196612},"420":{"Pos":"[-9174.2051 9136.3447 -235.3974]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9999 0.0001 0}","Settings":196609},"421":{"Pos":"[13353.207 -5338.4829 -1739.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196612},"422":{"Pos":"[3159.8374 7900.9258 -1739.2743]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 225 0}","Settings":196612},"423":{"Pos":"[547.2346 9088.5547 -1739.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 45 0}","Settings":197124},"424":{"Pos":"[863.3079 9463.9082 -1739.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 20.974 0}","Settings":73728},"425":{"Pos":"[6449.2617 3185.9756 -1739.2743]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 45 0}","Settings":196612},"426":{"Pos":"[12017.0908 -4419.2974 -1739.4879]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.0008 0.6617 0}","Settings":196609},"427":{"Pos":"[-8462.2051 9183.0332 -234.7458]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.0001 180 0}","Settings":196612},"428":{"Pos":"[-15648.207 3924.1182 540.4944]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":1,"Angles":"{0 0 0}","Settings":196612},"429":{"Pos":"[-4769.0942 -14984.9063 -95.5056]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":1,"Angles":"{0 90 0}","Settings":196612},"430":{"Pos":"[4299.0762 -799.4905 -96.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":1,"Angles":"{-0 180 0}","Settings":65540},"431":{"Pos":"[4164.6865 761.9815 -96.5047]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":1,"Angles":"{0.6709 192.0052 0}","Settings":204800},"432":{"Pos":"[9128.2217 9596.6045 -96.8583]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":1,"Angles":"{358.7651 128.2746 0}","Settings":196612},"433":{"Pos":"[8371.3145 -7563.8145 -97.5056]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":2,"Angles":"{0 315 0}","Settings":196612},"434":{"Pos":"[12012.0586 -14449.1816 -115.2464]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":2,"Angles":"{2.9986 94.2273 0}","Settings":196612},"435":{"Pos":"[0 0 0]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"436":{"Pos":"[0 0 0]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196612},"437":{"Pos":"[0 0 0]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"438":{"Pos":"[0 0 0]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"439":{"Pos":"[0 0 0]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"440":{"Pos":"[0 0 0]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"441":{"Pos":"[-680.1612 11741.4531 -1739.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225 0}","Settings":8},"442":{"Pos":"[-10874.2051 16008.207 -1739.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":8448},"443":{"Pos":"[-5989.6235 -13055.5146 -10126.2061]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225 0}","Settings":196612},"444":{"Pos":"[-4522.8779 10651.0938 -10638.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196609},"445":{"Pos":"[-5405.9741 13689.793 -14417.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196612},"446":{"Pos":"[1140.853 13689.793 -14417.5059]","TrafficLights":41,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":589825},"447":{"Pos":"[3348.8892 -15731.793 -14929.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196609},"448":{"Pos":"[806.7939 3851.4202 -16192.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196609},"449":{"Pos":"[10341.1777 -16045.207 -16192.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196612},"450":{"Pos":"[15399.207 3726.958 -16192.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196616},"451":{"Pos":"[15399.207 -2112.1101 -16192.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196612},"452":{"Pos":"[15134.793 3701.1328 -16192.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196612},"453":{"Pos":"[15134.793 -2194.623 -16192.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196612},"454":{"Pos":"[15399.207 16071.8398 -16192.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":205056},"455":{"Pos":"[15135.207 16080.8926 -16192.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":205056},"456":{"Pos":"[15398.8066 14240.29 -16192.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":204800},"457":{"Pos":"[15134.8066 14149.7012 -16192.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196616},"458":{"Pos":"[9976.8301 -15780.793 -16192.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196609},"459":{"Pos":"[1071.2062 4019.0479 -16192.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196609},"460":{"Pos":"[3855.0029 -15996.207 -14929.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196609},"461":{"Pos":"[7253.1831 13952.7578 -14417.1855]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.2349 269.5034 0}","Settings":197124},"462":{"Pos":"[-4766.5469 14698.207 -14417.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196609},"463":{"Pos":"[869.6057 14698.207 -14417.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196612},"464":{"Pos":"[5213.3101 14698.207 -14417.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":66564},"465":{"Pos":"[15364.4258 5353.3276 -14929.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 168.875 0}","Settings":196616},"466":{"Pos":"[4132.4224 -11307.835 -14929.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 78.875 0}","Settings":196612},"467":{"Pos":"[-2827.5796 -9939.2451 -14929.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 78.875 0}","Settings":196612},"468":{"Pos":"[-12059.2354 4817.4561 -14417.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 337.5 0}","Settings":196612},"469":{"Pos":"[12255.2656 -3355.2593 -13905.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 157.5 0}","Settings":196609},"470":{"Pos":"[1174.9802 -14807.2695 -13905.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 78.625 0}","Settings":196610},"471":{"Pos":"[-2432.3933 7873.6338 -13393.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 258.625 0}","Settings":196609},"472":{"Pos":"[5884.2285 -1488.1453 -13394.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 213.625 0}","Settings":196612},"473":{"Pos":"[13927.6152 -12996.0215 -13394.6055]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 33.875 0}","Settings":327696},"474":{"Pos":"[14761.6426 -14238.0166 -13394.6055]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 33.875 0}","Settings":205056},"475":{"Pos":"[14546.2598 -14391.6836 -13394.6055]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 33.875 0}","Settings":205056},"476":{"Pos":"[9100.0869 -5804.8281 -13394.6055]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 33.875 0}","Settings":327688},"477":{"Pos":"[5215.4404 -4.9971 -13394.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 33.625 0}","Settings":196612},"478":{"Pos":"[-2247.8618 10121.6719 -13394.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 78.625 0}","Settings":196612},"479":{"Pos":"[9850.0293 -6828.459 -13905.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 348.625 0}","Settings":196609},"480":{"Pos":"[6068.2275 6998.5996 -13905.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 67.5 0}","Settings":196610},"481":{"Pos":"[-11284.7246 4528.9775 -14417.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 157.5 0}","Settings":196609},"482":{"Pos":"[-988.1956 -9273.1641 -14929.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 258.875 0}","Settings":196612},"483":{"Pos":"[14188.3184 6015.8091 -14929.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 348.875 0}","Settings":196612},"484":{"Pos":"[6655.1348 13217.9678 -14417.7061]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 78.75 0}","Settings":196616},"485":{"Pos":"[11801.2188 13562.4463 -14929.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 258.875 0}","Settings":65544},"486":{"Pos":"[5459.312 14695.4736 -14417.7061]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 269.2626 0}","Settings":65544},"487":{"Pos":"[13706.4258 -13140.1885 -13394.6055]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 213.875 0}","Settings":196616},"488":{"Pos":"[5013.8364 13544.6582 -14417.7061]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 78.75 0}","Settings":262152},"489":{"Channel":1,"Pos":"[-1822.7947 -1447.7142 -4386.9688]","Angles":"{0 88.9928 0}","Class":"gmod_track_switch"},"490":{"Channel":1,"Pos":"[2110.3704 -2251.4604 -4386.9688]","Angles":"{0 269.3928 0}","Class":"gmod_track_switch"},"491":{"Channel":2,"Pos":"[-4892.834 15146.8975 -3874.9688]","Angles":"{0 271.2938 0}","Class":"gmod_track_switch"},"492":{"Channel":1,"Pos":"[-6058.2861 15139.9512 -3874.9688]","Angles":"{0 269.5339 0}","Class":"gmod_track_switch"},"493":{"Channel":1,"Pos":"[-10019.334 15941.8711 -3874.9688]","Angles":"{0 89.4943 0}","Class":"gmod_track_switch"},"494":{"Channel":2,"Pos":"[-10770.9619 3229.0544 -2850.9688]","Angles":"{0 180.4955 0}","Class":"gmod_track_switch"},"495":{"Channel":1,"Pos":"[-9970.1172 3240.0581 -2850.9688]","Angles":"{0 1.3358 0}","Class":"gmod_track_switch"},"496":{"Channel":1,"Pos":"[-10371.9453 6423.2905 -2850.9688]","Angles":"{0 0.0954 0}","Class":"gmod_track_switch"},"497":{"Channel":1,"Pos":"[-10376.041 8097.7241 -2850.9688]","Angles":"{0 0.5354 0}","Class":"gmod_track_switch"},"498":{"Channel":1,"Pos":"[1646.415 -5336.3262 -2850.9688]","Angles":"{0 11.8959 0}","Class":"gmod_track_switch"},"499":{"Channel":1,"Pos":"[1627.9341 -9371.4805 -2850.9688]","Angles":"{0 192.296 0}","Class":"gmod_track_switch"},"500":{"Channel":1,"Pos":"[8359.0049 7612.1396 -2338.9688]","Angles":"{0 359.7954 0}","Class":"gmod_track_switch"},"501":{"Channel":2,"Pos":"[8566.7158 6477.9478 -2337.9688]","Angles":"{0 180.4155 0}","Class":"gmod_track_switch"},"502":{"Channel":2,"Pos":"[9372.9189 2492.5791 -2337.9688]","Angles":"{0 1.5552 0}","Class":"gmod_track_switch"},"503":{"Channel":1,"Pos":"[14555.833 -3043.0298 -487.9688]","Angles":"{0 181.3748 0}","Class":"gmod_track_switch"},"504":{"Channel":2,"Pos":"[15356.9082 -3049.5342 -487.9688]","Angles":"{0 359.3549 0}","Class":"gmod_track_switch"},"505":{"Channel":1,"Pos":"[14955.46 -8291.1836 -615.9688]","Angles":"{0 359.3548 0}","Class":"gmod_track_switch"},"506":{"Channel":1,"Pos":"[14950.6758 -9965.71 -615.9688]","Angles":"{0 359.3547 0}","Class":"gmod_track_switch"},"507":{"Channel":1,"Pos":"[-6421.2417 -12495.1709 -7612.6787]","Angles":"{0 272.2583 0}","Class":"gmod_track_switch"},"508":{"Channel":1,"Pos":"[-2503.6563 -13502.5156 -7612.6787]","Angles":"{0 268.0783 0}","Class":"gmod_track_switch"},"509":{"Channel":2,"Pos":"[12151.7627 2670.1711 -5396.9688]","Angles":"{0 359.8622 0}","Class":"gmod_track_switch"},"510":{"Channel":1,"Pos":"[12150.9434 1528.887 -5396.9688]","Angles":"{0 1.3828 0}","Class":"gmod_track_switch"},"511":{"Channel":1,"Pos":"[11357.6123 -2436.6223 -5396.9688]","Angles":"{0 179.1429 0}","Class":"gmod_track_switch"},"512":{"Channel":1,"Pos":"[1705.319 -15051.7842 -10132.9688]","Angles":"{0 270.1079 0}","Class":"gmod_track_switch"},"513":{"Channel":1,"Pos":"[-2271.428 -14251.3203 -10132.9688]","Angles":"{0 88.888 0}","Class":"gmod_track_switch"},"514":{"Channel":1,"Pos":"[-6608.165 10758.4121 -10644.9688]","Angles":"{0 272.5503 0}","Class":"gmod_track_switch"},"515":{"Channel":1,"Pos":"[-3547.0432 10921.6016 -10644.9688]","Angles":"{0 89.2903 0}","Class":"gmod_track_switch"},"516":{"Channel":1,"Pos":"[-3555.0503 11391.9063 -10644.9688]","Angles":"{0 270.7903 0}","Class":"gmod_track_switch"},"517":{"Channel":1,"Pos":"[-1606.4888 11394.8076 -10644.9688]","Angles":"{0 272.1103 0}","Class":"gmod_track_switch"},"518":{"Channel":1,"Pos":"[-1601.3893 10921.2393 -10644.9688]","Angles":"{0 91.1904 0}","Class":"gmod_track_switch"},"519":{"Channel":2,"Pos":"[-6588.0479 11554.8252 -10644.9688]","Angles":"{0 88.9905 0}","Class":"gmod_track_switch"},"520":{"Channel":0,"Pos":"[3903.1252 1732.6753 -120.6576]","Angles":"{0 180.3423 0}","Class":"gmod_track_switch"},"521":{"Channel":1,"Pos":"[4421.2671 -278.5978 -122.1636]","Angles":"{0 178.8023 0}","Class":"gmod_track_switch"},"522":{"Channel":1,"Pos":"[3943.416 13789.335 -14423.9688]","Angles":"{0 270.93 0}","Class":"gmod_track_switch"},"523":{"Channel":1,"Pos":"[2275.1738 14799.4854 -14423.9688]","Angles":"{0 271.07 0}","Class":"gmod_track_switch"}} \ No newline at end of file diff --git a/lua/metrostroi_data/signs_gm_metrostroi_b46_lite.txt b/lua/metrostroi_data/signs_gm_metrostroi_b46_lite.txt new file mode 100644 index 0000000..1c9e8f2 --- /dev/null +++ b/lua/metrostroi_data/signs_gm_metrostroi_b46_lite.txt @@ -0,0 +1 @@ +{"1":{"Pos":"[10057.916 -2351.9995 -4380.4741]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 90 0}","Settings":196612},"2":{"Pos":"[-9296.2793 -4120.3037 -3868.4739]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 45 0}","Settings":196612},"3":{"Pos":"[-13232.8633 256.0998 -3868.4739]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225 0}","Settings":196612},"4":{"Pos":"[-10871 -3511.4963 -2844.4739]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196616},"5":{"Pos":"[-9863 2616.6401 -2844.4739]","TrafficLights":144,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 180 0}","Settings":65544},"6":{"Pos":"[639.494 -4917.5791 -2844.4736]","TrafficLights":144,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 11.25 0}","Settings":197124},"7":{"Pos":"[-6104.6909 -1343.7942 -4380.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196612},"8":{"Pos":"[8465.207 10663.4023 -2331.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":197124},"9":{"Pos":"[8131.5688 9693.7012 -2332.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 5.34 0}","Settings":74752},"10":{"Pos":"[8465 -4204.7715 -2332.2742]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196609},"11":{"Pos":"[8959.249 -9348.8311 -2332.4968]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.3374 173.8217 0}","Settings":196616},"12":{"Pos":"[15459.793 -6094.0938 -481.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":197124},"13":{"Pos":"[15460 3646.5662 -481.4739]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196612},"14":{"Pos":"[14451.793 -2491.5957 -481.5056]","TrafficLights":144,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":65540},"15":{"Pos":"[14824.0938 -10641.6025 -609.5056]","TrafficLights":2,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":73728},"16":{"Pos":"[15088.0938 -10650.0205 -609.5056]","TrafficLights":2,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":75776},"17":{"Pos":"[14823.8926 -15629.6328 -609.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":256},"18":{"Pos":"[15087.8926 -15625.7744 -609.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":256},"19":{"Pos":"[4262.7251 14520.207 528.4944]","TrafficLights":64,"Class":"gmod_track_signal","LightsStyle":2,"Angles":"{-0 90 0}","Settings":196616},"20":{"Pos":"[-6612.5107 14784.2061 528.4944]","TrafficLights":64,"Class":"gmod_track_signal","LightsStyle":2,"Angles":"{0 270 0}","Settings":196616},"21":{"Pos":"[9473.207 11228.4951 -2331.5056]","TrafficLights":64,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196612},"22":{"Pos":"[2791.3079 5810.2344 -2331.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":2,"Angles":"{0 191.25 0}","Settings":196608},"23":{"Pos":"[-15520.207 -3760.8923 -1696.5056]","TrafficLights":64,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196609},"24":{"Pos":"[-763.7938 3107.5146 -2844.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196612},"25":{"Pos":"[2320.564 -8203.5195 -2844.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 191.25 0}","Settings":197124},"26":{"Pos":"[1647.1576 -7329.3906 -2844.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 167.224 0}","Settings":73728},"27":{"Pos":"[462.5726 1138.698 -2844.4736]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 191.25 0}","Settings":196616},"28":{"Pos":"[-6519.2637 -11023.585 -2844.4861]","TrafficLights":64,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.691 196.4083 0}","Settings":196616},"29":{"Pos":"[-10872.207 11482.5322 -3356.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":197124},"30":{"Pos":"[-10576.668 4973.6953 -2844.5056]","TrafficLights":2,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 351.0319 0}","Settings":74752},"31":{"Pos":"[-10167.1504 5039.4434 -2844.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 187.8205 0}","Settings":204800},"32":{"Pos":"[-10235.0938 9007.7129 -2844.5056]","TrafficLights":2,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":73728},"33":{"Pos":"[-10499.0938 8968.7568 -2844.5056]","TrafficLights":2,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":75776},"34":{"Pos":"[-7900.5488 -5076.7427 -3868.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225 0}","Settings":196612},"35":{"Pos":"[10335.1572 -11559.5518 -3868.5056]","TrafficLights":64,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 135 0}","Settings":196609},"36":{"Pos":"[-8980.8008 15039.4063 -3868.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":197124},"37":{"Pos":"[-7118.019 16046.9941 -3868.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":197124},"38":{"Pos":"[-1904.8762 15038.793 -3868.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":131072},"39":{"Pos":"[10575.8457 15038.793 -4380.5059]","TrafficLights":64,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196612},"40":{"Pos":"[14987.7949 2803.1431 -4380.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196612},"41":{"Pos":"[16011.7939 9869.1816 -4380.5059]","TrafficLights":64,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196612},"42":{"Pos":"[-1938.6373 -2351.7937 -4380.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":197124},"43":{"Pos":"[14737.1729 -4739.2744 -481.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 8.9682 0}","Settings":204800},"44":{"Pos":"[8958.6445 4510.7813 -2331.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 204.0262 0}","Settings":73728},"45":{"Pos":"[9473 1890.8022 -2332.2742]","TrafficLights":144,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 180 0}","Settings":65540},"46":{"Pos":"[-9863.207 11601.8135 -3356.5056]","TrafficLights":64,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196616},"47":{"Pos":"[437.5148 9754.1934 -3356.5056]","TrafficLights":64,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 45 0}","Settings":196609},"48":{"Pos":"[-8082.4414 15557.5938 -3868.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 245.974 0}","Settings":73728},"49":{"Pos":"[178.0594 -1865.0981 -4380.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 65.974 0}","Settings":73728},"50":{"Pos":"[-5624.3574 -8491.457 -3868.5056]","TrafficLights":64,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 33.75 0}","Settings":196609},"51":{"Pos":"[-3390.2622 14620.9707 -3356.5056]","TrafficLights":64,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225 0}","Settings":196616},"52":{"Pos":"[-15072.2061 11431.0439 5.5887]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 179.9999 0}","Settings":196616},"53":{"Pos":"[14995.2178 7377.0879 -481.4868]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.491 339.6796 0}","Settings":196612},"54":{"Pos":"[-6981.9805 14520.2061 528.4944]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196612},"55":{"Pos":"[0 0 0]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":65544},"56":{"Pos":"[-15519.793 1485.257 -1181.0514]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 0 0}","Settings":196609},"57":{"Pos":"[271.7938 5855.9697 -2844.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196612},"58":{"Pos":"[278.1926 11417.8643 -2331.5015]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.4423 178.1627 0}","Settings":0},"59":{"Pos":"[3208.2971 15143.4717 -2331.4944]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{358.1851 101.1251 0}","Settings":0},"60":{"Pos":"[4404.873 5787.1084 -3356.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 45 0}","Settings":0},"61":{"Pos":"[8075.6572 2116.5635 -3709.8516]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9999 45 0}","Settings":0},"62":{"Pos":"[11394.2695 -1845.7062 -3868.5027]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.3929 27.7636 0}","Settings":0},"63":{"Pos":"[11877.2627 -6860.2979 -3868.5039]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.878 340.6185 0}","Settings":0},"64":{"Pos":"[8912.7012 -11086.6455 -3868.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.5343 313.484 0}","Settings":0},"65":{"Pos":"[4391.2754 -13531.7012 -3868.5054]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.5705 279.4521 0}","Settings":0},"66":{"Pos":"[-504.9932 -12200.1309 -3868.499]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{358.2617 235.3786 0}","Settings":0},"67":{"Pos":"[3331.3552 15038.9873 -3906.9851]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9998 90.0002 0}","Settings":0},"68":{"Pos":"[-15217.749 5111.7129 -3868.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 168.75 0}","Settings":0},"69":{"Pos":"[-14705.9863 10236.8545 -3868.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"70":{"Pos":"[-9329.8721 -8707.0879 -2844.4868]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.1581 47.3008 0}","Settings":0},"71":{"Pos":"[-7110.9429 -13189.9561 -2844.4976]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.5561 14.3954 0}","Settings":0},"72":{"Pos":"[-3402.5879 -16118.5293 -2844.4976]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.8163 91.9397 0}","Settings":0},"73":{"Pos":"[1583.2874 -14827.9795 -2844.5027]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.8082 123.5424 0}","Settings":0},"74":{"Pos":"[-1364.9922 14520.207 528.4944]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"75":{"Pos":"[8164.3013 -9609.2363 -2332.5012]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.7144 346.364 0}","Settings":0},"76":{"Pos":"[5301.3701 -13792.2031 -2332.5046]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6956 300.4095 0}","Settings":0},"77":{"Pos":"[279.7132 -14966.957 -2332.4995]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9999 270.4657 0}","Settings":0},"78":{"Pos":"[-4884.5215 -14967.0127 -1768.3701]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.0002 270 0}","Settings":0},"79":{"Pos":"[-10042.5313 -14582.0186 -1696.5031]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.549 254.6117 0}","Settings":0},"80":{"Pos":"[-14088.042 -11466.1123 -1696.5031]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.7799 207.9683 0}","Settings":0},"81":{"Pos":"[-15072.0137 -6388.561 -1696.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"82":{"Pos":"[-15071.793 -1186.1405 -1507.2463]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 180 0}","Settings":0},"83":{"Pos":"[-15071.793 3987.2588 -873.9995]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"84":{"Pos":"[15844.207 8839.2578 -481.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"85":{"Pos":"[14801.2412 13756.7676 -473.5585]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.2318 226.1817 0}","Settings":0},"86":{"Pos":"[9882.1387 14784.2061 3.597]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"87":{"Pos":"[4710.9937 14784.207 528.4944]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"88":{"Pos":"[-505.687 14784.2061 528.4944]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"89":{"Pos":"[15294.7734 -965.7324 -4380.5044]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.4557 143.1395 0}","Settings":0},"90":{"Pos":"[16011.9883 4108.9312 -4380.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"91":{"Pos":"[9525.4463 14520.2061 47.3933]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 90 0}","Settings":0},"92":{"Pos":"[14479.8125 13695.4707 -483.948]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6754 48.7719 0}","Settings":0},"93":{"Pos":"[15148.416 14847.0996 -4380.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.4899 220.0733 0}","Settings":0},"94":{"Pos":"[10293.1328 16046.9863 -4380.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"95":{"Pos":"[5090.4028 16046.9883 -4103.9785]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"96":{"Pos":"[-103.1785 16046.793 -3868.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"97":{"Pos":"[-15435.8701 -9369.3906 -1696.5013]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.1275 6.1758 0}","Settings":0},"98":{"Pos":"[-13379.1709 -14031.4316 -1696.5057]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.501 46.3687 0}","Settings":0},"99":{"Pos":"[-8654.4521 -15931.9463 -1696.5038]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.1279 85.1102 0}","Settings":0},"100":{"Pos":"[-3467.3347 -15991.0127 -1862.9907]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9998 90 0}","Settings":0},"101":{"Pos":"[1713.4758 -15966.6045 -2332.4993]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.691 93.7191 0}","Settings":0},"102":{"Pos":"[6556.9712 -14336.0557 -2332.5054]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.469 128.196 0}","Settings":0},"103":{"Pos":"[-9374.4795 -6789.0767 -2844.491]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.8517 198.0242 0}","Settings":0},"104":{"Pos":"[-7086.2207 14928.2676 -3356.4971]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.3834 93.455 0}","Settings":0},"105":{"Pos":"[-11876.8271 14783.7939 35.166]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 269.9999 0}","Settings":0},"106":{"Pos":"[7089.9873 15520.5449 -2331.5022]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.6381 252.6004 0}","Settings":0},"107":{"Pos":"[1935.4659 15606.2227 -2331.4988]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.0386 283.1187 0}","Settings":0},"108":{"Pos":"[-763.5446 11694.8613 -2331.4956]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.283 359.4565 0}","Settings":0},"109":{"Pos":"[13437.2002 -6960.9951 -3868.5022]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.3043 165.42 0}","Settings":0},"110":{"Pos":"[12673.832 -1942.9647 -3868.5]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.451 209.6323 0}","Settings":0},"111":{"Pos":"[9264.5781 1965.6403 -3865.4905]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225.0001 0}","Settings":0},"112":{"Pos":"[5582.1348 5648.8477 -3356.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225 0}","Settings":0},"113":{"Pos":"[1914.8453 9316.1367 -3356.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225 0}","Settings":0},"114":{"Pos":"[14746.2754 12688.9258 -4380.501]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.5489 17.3857 0}","Settings":0},"115":{"Pos":"[-8460.7061 15736.7227 -3356.498]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.4511 287.4243 0}","Settings":0},"116":{"Pos":"[-2207.3306 -12624.3555 -3868.4993]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.0001 45.4948 0}","Settings":0},"117":{"Pos":"[2160.4744 -15305.0674 -3868.5027]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.3743 77.9422 0}","Settings":0},"118":{"Pos":"[11902.7939 -1272.2628 -4380.4946]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{358.4192 279.2995 0}","Settings":0},"119":{"Pos":"[-9863 -3173.8479 -2844.4739]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"120":{"Pos":"[-15395.2295 8164.4971 -360.9442]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.0242 351.6276 0}","Settings":0},"121":{"Pos":"[-15519.793 443.943 -1308.528]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 0 0}","Settings":0},"122":{"Pos":"[-763.9872 8011.8442 -2657.7488]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.0002 0 0}","Settings":0},"123":{"Pos":"[-190.3686 -745.5806 -2844.5054]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 11.25 0}","Settings":0},"124":{"Pos":"[6769.0679 14718.9814 -2331.5061]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.779 62.2451 0}","Settings":0},"125":{"Pos":"[-3324.2107 -9652.8076 -3868.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225 0}","Settings":0},"126":{"Pos":"[-9863.2227 6733.3438 -2874.218]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{90 0 0}","Settings":0},"127":{"Pos":"[9473 -4094.7969 -2331.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"128":{"Pos":"[-13326.3828 14399.7373 6.0184]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.7788 105.0844 0}","Settings":0},"129":{"Pos":"[14452 3797.0867 -481.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"130":{"Pos":"[5736.2153 -15046.7939 -3868.5054]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.0111 111.6281 0}","Settings":0},"131":{"Pos":"[759.971 -1344.4061 -4380.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"132":{"Pos":"[1712.0732 -2337.6472 -4396.4688]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 83.5099 0}","Settings":0},"133":{"Pos":"[5855.1265 -2352 -4380.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"134":{"Pos":"[7969.125 14520.2051 238.4857]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 90 0}","Settings":0},"135":{"Pos":"[12082.7207 14511.1602 -276.2962]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.9869 86.6679 0}","Settings":0},"136":{"Pos":"[15101.7549 12938.5576 -495.269]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.0307 29.2924 0}","Settings":0},"137":{"Pos":"[-13813.6084 13873.3076 -3868.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.51 139.9078 0}","Settings":0},"138":{"Pos":"[-3634.9148 13826.8965 -3356.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 45 0}","Settings":0},"139":{"Pos":"[1977.2397 15038.7949 -3868.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"140":{"Pos":"[6124.1953 15038.8125 -4227.7061]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9999 90 0}","Settings":0},"141":{"Pos":"[14987.9873 8880.8359 -4380.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"142":{"Pos":"[4520.0952 -1343.7938 -4380.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 270 0}","Settings":197124},"143":{"Pos":"[3498.7268 -14655.207 -4893.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 270 0}","Settings":196612},"144":{"Pos":"[-3198.6594 -14654.793 -4893.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196612},"145":{"Pos":"[-12656.793 -906.0836 -4893.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196616},"146":{"Pos":"[2620.9817 -2239.7939 -7592.1094]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":2,"Angles":"{0 270 0}","Settings":196616},"147":{"Pos":"[-3734.7041 -2239.7939 -7592.1094]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":1,"Angles":"{0 270 0}","Settings":196616},"148":{"Pos":"[-4441.2705 -13606.6895 -7592.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":197124},"149":{"Pos":"[-3335.8074 -12599.1074 -7592.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":197128},"150":{"Pos":"[-12762.4795 -12214.793 -7592.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 270 0}","Settings":196616},"151":{"Pos":"[-4406.1216 -2503.7939 -7592.1094]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":1,"Angles":"{0 90 0}","Settings":196616},"152":{"Pos":"[2009.4263 -2503.7939 -7592.1094]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":1,"Angles":"{0 90 0}","Settings":196616},"153":{"Pos":"[-5372.2061 9824.2656 -6029.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196612},"154":{"Pos":"[-13680.793 7247.7344 -5762.168]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196609},"155":{"Pos":"[-3985.2231 -15662.793 -4893.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196612},"156":{"Pos":"[2686.7981 -15663.207 -4893.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196612},"157":{"Pos":"[3818.9819 -13606.793 -7592.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196612},"158":{"Pos":"[-4470.335 -13095.9648 -7592.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 245.974 0}","Settings":73728},"159":{"Pos":"[-5690.041 6405.2061 -9047.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196609},"160":{"Pos":"[-15797.7939 -9453.1299 -8288.2744]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.0001 359.9999 0}","Settings":196616},"161":{"Pos":"[7336.9351 -16074.207 -5902.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 90 0}","Settings":196616},"162":{"Pos":"[12258.4941 -1521.9679 -5390.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196612},"163":{"Pos":"[12259.207 4891.9087 -5390.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196612},"164":{"Pos":"[-10268 -432.3572 -5390.4741]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196612},"165":{"Pos":"[-29.206 4921.5488 -5390.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196616},"166":{"Pos":"[-15899.207 -8551.8916 -6913.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196880},"167":{"Pos":"[-15404.2061 -8040.1143 -6913.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196616},"168":{"Pos":"[-1069.2062 5910.2842 -5390.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196612},"169":{"Pos":"[-9260 5652.1021 -5390.4741]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 180 0}","Settings":196612},"170":{"Pos":"[11250.9063 578.2291 -5390.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196612},"171":{"Pos":"[11251.207 -9754.6328 -5902.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196616},"172":{"Pos":"[-15270.2051 -9362.9063 -8299.2695]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 180 0}","Settings":196609},"173":{"Pos":"[-6879.1499 5396.7939 -9047.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196612},"174":{"Pos":"[393.1985 5396.7939 -9047.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196880},"175":{"Pos":"[376.1714 6405.2061 -9047.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196612},"176":{"Pos":"[11742.4707 -487.8091 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 335.974 0}","Settings":65536},"177":{"Pos":"[11956.541 4478.8311 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 187.8205 0}","Settings":65536},"178":{"Pos":"[11883.1084 11554.9697 -4879.4971]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.2826 181.8461 0}","Settings":196608},"179":{"Pos":"[7374.9424 15410.793 -4879.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196608},"180":{"Pos":"[-3248.718 15320.7012 -3868.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 278.9681 0}","Settings":131072},"181":{"Pos":"[-11535.1143 -173.4311 -4380.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6955 239.5747 0}","Settings":0},"182":{"Pos":"[-14400.7393 3994.73 -4380.4995]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.8891 193.6105 0}","Settings":0},"183":{"Pos":"[-14260.375 9102.9512 -4380.5054]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.8981 155.0394 0}","Settings":0},"184":{"Pos":"[-9720.8018 10943.0879 -4444.3662]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9998 90 0}","Settings":0},"185":{"Pos":"[-4566.749 10943.0127 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"186":{"Pos":"[627.947 10943.0137 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"187":{"Pos":"[5785.8008 10586.334 -4893.5044]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.0358 67.6928 0}","Settings":0},"188":{"Pos":"[7820.9873 6187.7397 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"189":{"Pos":"[7820.9873 969.3203 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"190":{"Pos":"[7820.9873 -4765.3062 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"191":{"Pos":"[7821.0127 -9963.9473 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"192":{"Pos":"[-15812.2051 -8885.8281 -7592.1094]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"193":{"Pos":"[-15352.8086 -3473.572 -7608.0322]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.5488 144.0053 0}","Settings":0},"194":{"Pos":"[-10404.377 -2503.7939 -7592.1094]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"195":{"Pos":"[9527.4238 -14799.5615 -5902.5034]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.7797 297.7136 0}","Settings":0},"196":{"Pos":"[4436.0327 -15305.9863 -6178.0205]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 270 0}","Settings":0},"197":{"Pos":"[-699.41 -15305.9863 -6808.5771]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 270 0}","Settings":0},"198":{"Pos":"[-5851.3076 -15305.9863 -7441.1543]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 270 0}","Settings":0},"199":{"Pos":"[-11010.5693 -15306.0127 -8030.6904]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 270.0001 0}","Settings":0},"200":{"Pos":"[-15197.71 -13101.4033 -8036.4956]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{358.2613 190.5965 0}","Settings":0},"201":{"Pos":"[-15270.0117 -7962.8213 -8471.1787]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 180 0}","Settings":0},"202":{"Pos":"[-15269.8809 -2787.5901 -9047.4941]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.7647 179.5035 0}","Settings":0},"203":{"Pos":"[-14093.0127 2237.0481 -9047.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6955 149.5748 0}","Settings":0},"204":{"Pos":"[-1069.0127 269.9673 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"205":{"Pos":"[-1069.0127 -4927.9468 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"206":{"Pos":"[-2659.7571 -9605.291 -5390.5034]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6801 300.642 0}","Settings":0},"207":{"Pos":"[-7671.3276 -9604.0215 -5390.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6797 239.3199 0}","Settings":0},"208":{"Pos":"[-9260.0117 -4944.8359 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"209":{"Pos":"[-9260 257.5346 -5390.4741]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"210":{"Pos":"[-15519.7939 6629.9409 -549.3873]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 0 0}","Settings":0},"211":{"Pos":"[-9073.7314 -2239.7939 -7592.1094]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"212":{"Pos":"[-14225.0742 -2393.9048 -7592.4976]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.2303 285.1031 0}","Settings":0},"213":{"Pos":"[-16076.2051 -6855.4507 -7592.1094]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"214":{"Pos":"[-15042.4873 -11936.0674 -7592.4927]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.4462 54.0096 0}","Settings":0},"215":{"Pos":"[-10111.7529 -12912.7207 -7592.4961]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.5155 71.7933 0}","Settings":0},"216":{"Pos":"[7340.5557 -1606.9313 -7592.0933]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.8519 133.0737 0}","Settings":0},"217":{"Pos":"[11016.4287 2060.3979 -7592.1094]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 135 0}","Settings":0},"218":{"Pos":"[14659.0703 5800.7822 -7591.4941]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.655 143.64 0}","Settings":0},"219":{"Pos":"[14283.4668 10515.6387 -7387.8579]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.8591 220.4404 0}","Settings":0},"220":{"Pos":"[10022.416 13724.6191 -7079.4941]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.4877 268.1711 0}","Settings":0},"221":{"Pos":"[6074.5278 10877.8193 -6891.1431]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 315 0}","Settings":0},"222":{"Pos":"[2440.6277 7243.3359 -6261.3921]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 314.9999 0}","Settings":0},"223":{"Pos":"[-1802.0013 4567.5391 -6029.4873]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{358.8238 273.5348 0}","Settings":0},"224":{"Pos":"[7647.5571 -14797.3496 -4893.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.4899 130.0733 0}","Settings":0},"225":{"Pos":"[8845.0137 -9927.5205 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 180 0}","Settings":0},"226":{"Pos":"[8844.9883 -4698.5522 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"227":{"Pos":"[8844.9873 489.9238 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"228":{"Pos":"[8844.9863 5708.9536 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"229":{"Pos":"[8017.9048 10740.7217 -4893.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.4899 220.0733 0}","Settings":0},"230":{"Pos":"[3148.7351 11984.0137 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"231":{"Pos":"[-2079.373 11983.0137 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"232":{"Pos":"[-7288.8452 11982.9121 -4728.2676]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9998 270 0}","Settings":0},"233":{"Pos":"[-12467.6963 11935.5469 -4380.4985]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.3371 277.6424 0}","Settings":0},"234":{"Pos":"[-15706.8008 8473.3262 -4380.5005]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.0862 355.4971 0}","Settings":0},"235":{"Pos":"[-15373.5195 2780.9834 -4380.499]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.4507 15.3844 0}","Settings":0},"236":{"Pos":"[-12380.5049 -1286.3052 -4380.5034]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.3045 59.585 0}","Settings":0},"237":{"Pos":"[-7348.1978 -2351.9871 -4380.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"238":{"Pos":"[-29.013 10353.6045 -5831.8682]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 180 0}","Settings":0},"239":{"Pos":"[-1366.2112 15139.3633 -5871.2617]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{273.4532 233.2427 0}","Settings":0},"240":{"Pos":"[-6395.6782 15921.9863 -5901.9858]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"241":{"Pos":"[-11591.2617 15921.9863 -5901.9858]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"242":{"Pos":"[-15689.623 13468.6396 -5902.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.4515 344.8298 0}","Settings":0},"243":{"Pos":"[-15899.4063 8338.5283 -6209.7427]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 0 0}","Settings":0},"244":{"Pos":"[-15898.7949 3190.7207 -6832.6196]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 0 0}","Settings":0},"245":{"Pos":"[-15899.2051 -2016.0342 -6913.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"246":{"Pos":"[-9209.0498 11150.3447 -5390.4976]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{358.4178 172.348 0}","Settings":0},"247":{"Pos":"[-5748.8091 14364.0029 -5390.4976]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.176 94.4941 0}","Settings":0},"248":{"Pos":"[-553.0953 14387.0127 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"249":{"Pos":"[4657.9434 14387.0137 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"250":{"Pos":"[9732.4834 13759.5791 -5390.5039]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6011 56.2716 0}","Settings":0},"251":{"Pos":"[11251.2061 9052.4023 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"252":{"Pos":"[-15404.2051 -2768.6458 -6913.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"253":{"Pos":"[-15403.7939 2466.0073 -6898.7935]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 179.9999 0}","Settings":0},"254":{"Pos":"[-15404.4063 7645.9424 -6294.7817]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"255":{"Pos":"[-15317.2041 12771.2666 -5902.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{358.0087 169.3353 0}","Settings":0},"256":{"Pos":"[-11085.248 14898.9863 -5901.9858]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"257":{"Pos":"[-5884.1948 14898.9863 -5901.9858]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"258":{"Pos":"[-1278.8949 13221.3301 -5902.4976]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.3429 20.1481 0}","Settings":0},"259":{"Pos":"[12259.0137 10475.9199 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"260":{"Pos":"[10378.6348 14984.127 -5390.5044]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.1019 245.0677 0}","Settings":0},"261":{"Pos":"[5223.7173 15411.0137 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"262":{"Pos":"[30.1441 15411.0127 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"263":{"Pos":"[-5182.8481 15411.0137 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 270 0}","Settings":0},"264":{"Pos":"[-9771.0557 13669.291 -5390.5044]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.221 332.2693 0}","Settings":0},"265":{"Pos":"[-10268.0137 8529.125 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"266":{"Pos":"[11937.292 -13951.0859 -5902.501]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.9642 157.7244 0}","Settings":0},"267":{"Pos":"[12259.0137 -8755.2559 -5902.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"268":{"Pos":"[-15436.9131 -14747.6191 -8036.4912]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.0049 29.2004 0}","Settings":0},"269":{"Pos":"[-11111.7129 -16074.0127 -8033.7046]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90.0001 0}","Settings":0},"270":{"Pos":"[-5403.3228 -16073.9863 -7384.1841]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"271":{"Pos":"[-174.8765 -16073.9863 -6742.208]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"272":{"Pos":"[-10930.0371 5974.2832 -9047.5]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.6067 287.2322 0}","Settings":0},"273":{"Pos":"[-14868.3193 2801.9031 -9047.5029]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.2203 332.0264 0}","Settings":0},"274":{"Pos":"[-15798.0137 -2294.9407 -9047.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"275":{"Pos":"[-13680.9863 1838.9924 -5099.2046]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0.0001 0}","Settings":0},"276":{"Pos":"[-13680.9863 -3341.3782 -4893.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"277":{"Pos":"[-13642.7666 -8549.1328 -4893.4985]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.691 3.7191 0}","Settings":0},"278":{"Pos":"[-11862.9746 -13369.6074 -4893.5054]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.493 40.9 0}","Settings":0},"279":{"Pos":"[-12656.9863 4347.1577 -5408.1055]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 180 0}","Settings":0},"280":{"Pos":"[-12657.0137 9498.1162 -6011.001]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9999 179.9998 0}","Settings":0},"281":{"Pos":"[-9951.8809 13263.9736 -6029.4966]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.3834 93.455 0}","Settings":0},"282":{"Pos":"[-6513.894 10287.209 -6029.4971]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9995 0.5858 0}","Settings":0},"283":{"Pos":"[-6418.7695 5128.5796 -6029.4941]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.9906 12.7913 0}","Settings":0},"284":{"Pos":"[-2141.4924 3161.1877 -6029.4961]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.1578 102.8124 0}","Settings":0},"285":{"Pos":"[1861.6235 6291.0288 -6223.5142]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 135 0}","Settings":0},"286":{"Pos":"[5486.3335 9916.624 -6851.3472]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.0001 135 0}","Settings":0},"287":{"Pos":"[9636.5146 13425.2881 -7095.002]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6168 102.4656 0}","Settings":0},"288":{"Pos":"[13778.2295 10666.4795 -7331.2788]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 45.0001 0}","Settings":0},"289":{"Pos":"[14563.9619 6121.5439 -7600.7695]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{358.1516 325.1198 0}","Settings":0},"290":{"Pos":"[10974.7168 2392.0388 -7592.1094]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 315 0}","Settings":0},"291":{"Pos":"[-8714.8203 -13885.166 -4893.5044]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.9889 246.6131 0}","Settings":0},"292":{"Pos":"[-12121.6641 -10112.4053 -4893.501]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.2474 199.165 0}","Settings":0},"293":{"Pos":"[-10268.0137 -6066.6006 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"294":{"Pos":"[-8589.0137 -10681.582 -5390.5024]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.3203 59.3401 0}","Settings":0},"295":{"Pos":"[-3484.4741 -11184.5967 -5390.4971]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.8241 94.5481 0}","Settings":0},"296":{"Pos":"[-73.4846 -7922.7305 -5390.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.3386 173.9979 0}","Settings":0},"297":{"Pos":"[-29.0129 -2709.4915 -5390.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"298":{"Pos":"[-8239.3096 13886.0068 -6029.501]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.0398 258.8637 0}","Settings":0},"299":{"Pos":"[-12988.2344 12575.3887 -6029.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.3988 326.2875 0}","Settings":0},"300":{"Pos":"[-15519.7939 6568.5557 -556.9244]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 0 0}","Settings":0},"301":{"Pos":"[-15519.7939 6568.5557 -556.9244]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 0 0}","Settings":0},"302":{"Pos":"[-15519.7939 6568.5557 -556.9244]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 0 0}","Settings":0},"303":{"Pos":"[-293.7491 9880.207 -8603.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196612},"304":{"Pos":"[-6680.3823 9880.207 -8603.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 270 0}","Settings":196612},"305":{"Pos":"[-3166.3042 4781.9761 -9614.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196612},"306":{"Pos":"[-2546.7551 -15156.793 -10126.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":197124},"307":{"Pos":"[-293.4038 -14650.3906 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 245.974 0}","Settings":65540},"308":{"Pos":"[2250.5728 -15157.0938 -10126.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196609},"309":{"Pos":"[1020.1636 15562.2061 -10126.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196609},"310":{"Pos":"[5419.5835 -16180.207 -10638.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 90 0}","Settings":196612},"311":{"Pos":"[-8835.7295 2666.8955 -10637.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225 0}","Settings":65540},"312":{"Pos":"[-7004.1895 10650.793 -10638.5059]","TrafficLights":144,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":65540},"313":{"Pos":"[-4940.9863 10933.5684 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 98.9682 0}","Settings":204800},"314":{"Pos":"[-552.3101 11024.0938 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 270 0}","Settings":73728},"315":{"Pos":"[-566.7998 11288.0938 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 270 0}","Settings":75776},"316":{"Pos":"[-4615.2744 11334.7598 -10638.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 263.43 0}","Settings":74752},"317":{"Pos":"[-3588.4104 11659.793 -10638.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":197124},"318":{"Pos":"[-7437.644 11659.793 -10638.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196612},"319":{"Pos":"[-5515.5415 -1662.2102 -10637.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 45 0}","Settings":196612},"320":{"Pos":"[1385.4966 -15171.207 -10638.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196609},"321":{"Pos":"[5137.2852 14522.2061 -10126.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196609},"322":{"Pos":"[2285.3506 -14149.207 -10126.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":197124},"323":{"Pos":"[-10721.707 -8323.2373 -10126.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225 0}","Settings":196612},"324":{"Pos":"[-4046.8933 3752.2061 -9618.1865]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 90 0}","Settings":196609},"325":{"Pos":"[-12135.2061 4749.9482 -8604.7588]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 180 0}","Settings":196612},"326":{"Pos":"[-1212.7971 8871.793 -8603.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196609},"327":{"Pos":"[12440.2051 -7281.0571 -7691.2676]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9999 360 0}","Settings":196612},"328":{"Pos":"[13464.207 -8558.8457 -7592.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196609},"329":{"Pos":"[-13159.207 4911.9795 -8603.7959]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196609},"330":{"Pos":"[-4260.8164 -1907.8918 -10638.2061]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225 0}","Settings":196612},"331":{"Pos":"[15093.041 -5732.6035 -481.5056]","TrafficLights":2,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 178.711 0}","Settings":74752},"332":{"Pos":"[-15519.793 4050.1641 -866.1442]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 0 0}","Settings":65537},"333":{"Pos":"[-9233.7363 8768.7646 -8603.7861]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{358.1851 101.1251 0}","Settings":0},"334":{"Pos":"[-11415.0947 9641.4785 -10638.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.9642 337.7245 0}","Settings":0},"335":{"Pos":"[-11111.2168 4083.7024 -10638.498]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.888 34.3221 0}","Settings":0},"336":{"Pos":"[4377.8799 8870.8516 -8603.5]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.7647 89.5035 0}","Settings":0},"337":{"Pos":"[9416.2646 7608.3506 -8603.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6256 57.0517 0}","Settings":0},"338":{"Pos":"[12070.0508 3788.0005 -8603.5]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.5493 15.3638 0}","Settings":0},"339":{"Pos":"[12439.9883 -1511.793 -8391.8047]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"340":{"Pos":"[-3597.8999 -15171.0137 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"341":{"Pos":"[-8967.417 -15027.9004 -10638.501]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{358.2612 261.0835 0}","Settings":0},"342":{"Pos":"[-13552.6836 -12596.9297 -10638.5039]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.531 218.191 0}","Settings":0},"343":{"Pos":"[-15123.4971 -7596.3179 -10638.5]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.5348 182.5592 0}","Settings":0},"344":{"Pos":"[-15136.0117 -2301.5073 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"345":{"Pos":"[-15135.9873 2437.9031 -10539.415]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9999 180 0}","Settings":0},"346":{"Pos":"[-15070.4297 7727.9521 -10126.4971]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{358.6622 173.8214 0}","Settings":0},"347":{"Pos":"[-13056.3125 12504.1602 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.4991 133.6252 0}","Settings":0},"348":{"Pos":"[-8254.5547 14464.3799 -10126.499]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.0881 94.887 0}","Settings":0},"349":{"Pos":"[-2914.8477 14522.0137 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"350":{"Pos":"[7266.9844 -15156.9863 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"351":{"Pos":"[12399.4521 -13993.8945 -10126.5039]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.3043 120.42 0}","Settings":0},"352":{"Pos":"[15276.9648 -9821.25 -10126.502]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.2856 166.3855 0}","Settings":0},"353":{"Pos":"[15583.0137 -4595.188 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"354":{"Pos":"[15583.0137 742.9158 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"355":{"Pos":"[15583.0137 5999.5239 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"356":{"Pos":"[14994.7266 11171.6406 -10126.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.7526 199.1832 0}","Settings":0},"357":{"Pos":"[11468.876 14866.5 -10126.502]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.0111 246.6283 0}","Settings":0},"358":{"Pos":"[10874.0146 -12001.6113 -7592.5044]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6801 300.642 0}","Settings":0},"359":{"Pos":"[6223.2944 -12599.0137 -7592.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"360":{"Pos":"[-13159.0127 14.2264 -9128.2939]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 0 0}","Settings":0},"361":{"Pos":"[-13158.9863 -5220.103 -9614.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"362":{"Pos":"[-12045.6602 -10370.6797 -9614.5039]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.3043 30.42 0}","Settings":0},"363":{"Pos":"[-7882.6694 -13318.5605 -9614.5029]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.2856 76.3855 0}","Settings":0},"364":{"Pos":"[-2620.8198 -13636.0391 -9614.5]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.2348 91.5137 0}","Settings":0},"365":{"Pos":"[2378.6838 -12290.3242 -9614.5039]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.4293 125.5423 0}","Settings":0},"366":{"Pos":"[5049.2388 -7925.7832 -9614.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.9289 169.618 0}","Settings":0},"367":{"Pos":"[5251.5938 -2617.8445 -9614.499]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.4652 182.5872 0}","Settings":0},"368":{"Pos":"[3636.2017 2273.6362 -9614.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.469 218.196 0}","Settings":0},"369":{"Pos":"[-8230.2129 4781.9873 -10068.9854]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 270 0}","Settings":0},"370":{"Pos":"[-13500.6836 3344.2346 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.3988 326.2876 0}","Settings":0},"371":{"Pos":"[-14181.9863 -1751.5472 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"372":{"Pos":"[-13486.9072 -6845.7983 -10126.4961]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.888 34.3221 0}","Settings":0},"373":{"Pos":"[-9882.5547 -10588.209 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 45 0}","Settings":0},"374":{"Pos":"[10072.6426 -14223.2861 -10638.502]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.1019 155.0677 0}","Settings":0},"375":{"Pos":"[10142.085 -9089.1953 -10638.5039]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.4999 200.2214 0}","Settings":0},"376":{"Pos":"[6680.125 -5229.1069 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225 0}","Settings":0},"377":{"Pos":"[2151.3447 -3154.9871 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 270 0}","Settings":0},"378":{"Pos":"[8543.5996 -13607.0137 -7592.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"379":{"Pos":"[1224.6038 2488.1299 -9614.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6256 57.0517 0}","Settings":0},"380":{"Pos":"[3995.2644 -1819.5985 -9614.5]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{358.0716 11.9478 0}","Settings":0},"381":{"Pos":"[4005.5452 -7010.6045 -9614.501]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.8886 348.0261 0}","Settings":0},"382":{"Pos":"[1309.2362 -11312.3154 -9614.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6257 302.9336 0}","Settings":0},"383":{"Pos":"[-3730.2495 -12629.2207 -9614.499]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9999 270.4657 0}","Settings":0},"384":{"Pos":"[-8784.3037 -11566.0098 -9614.5039]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.6955 239.5748 0}","Settings":0},"385":{"Pos":"[-11790.166 -7455.5776 -9614.5029]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.8891 193.6105 0}","Settings":0},"386":{"Pos":"[-12134.9863 -2251.8892 -9407.5098]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"387":{"Pos":"[-13157.9863 -4088.104 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"388":{"Pos":"[-12836.3369 1628.9767 -10126.501]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.0358 157.6928 0}","Settings":0},"389":{"Pos":"[-578.1279 -3658.9873 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"390":{"Pos":"[4544.9399 -4296.0713 -10638.501]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.112 55.6275 0}","Settings":0},"391":{"Pos":"[8314.0039 -7899.9863 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 45 0}","Settings":0},"392":{"Pos":"[9204.6338 -12803.6357 -10638.5039]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.3619 342.5622 0}","Settings":0},"393":{"Pos":"[13464.0137 -3360.6997 -8163.7271]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 180 0}","Settings":0},"394":{"Pos":"[13463.9863 1341.8978 -8603.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":0},"395":{"Pos":"[12416.6328 6498.4976 -8603.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.2201 207.9805 0}","Settings":0},"396":{"Pos":"[8289.0674 9534.9824 -8603.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.2856 256.3855 0}","Settings":0},"397":{"Pos":"[-3957.7964 15562.0137 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":0},"398":{"Pos":"[-9212.0381 15510.082 -10126.499]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.9119 274.9138 0}","Settings":0},"399":{"Pos":"[-14067.6055 13556.2695 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.5009 313.6262 0}","Settings":0},"400":{"Pos":"[-16085.7734 8848.0898 -10126.499]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{1.3378 353.8473 0}","Settings":0},"401":{"Pos":"[-16159.9883 3627.5591 -10401.8027]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.0002 0.0001 0}","Settings":0},"402":{"Pos":"[-16160.0117 -1655.6746 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"403":{"Pos":"[-16159.9863 -6965.7847 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"404":{"Pos":"[-15425.457 -12156.2471 -10638.5029]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{3.0109 23.3825 0}","Settings":0},"405":{"Pos":"[-11681.4473 -15622.3594 -10638.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{2.7529 70.8303 0}","Settings":0},"406":{"Pos":"[-6485.3677 -16180.0137 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"407":{"Pos":"[-1269.5033 -16180.0137 -10638.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":0},"408":{"Pos":"[10165.6094 13934.7393 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.2472 70.8125 0}","Settings":0},"409":{"Pos":"[13885.6592 10351.752 -10126.5039]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.1125 21.2127 0}","Settings":0},"410":{"Pos":"[14559.0137 5165.7563 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"411":{"Pos":"[14559.0137 -210.3542 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"412":{"Pos":"[14559.0137 -5471.3242 -10126.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"413":{"Pos":"[13562.5693 -10671.5518 -10126.5049]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{356.7798 332.0143 0}","Settings":0},"414":{"Pos":"[9427.1348 -13792.2129 -10126.499]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{357.5493 285.3638 0}","Settings":0},"415":{"Pos":"[10310.2588 -14249.6523 -96.8367]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":2,"Angles":"{359.6389 269.1971 0}","Settings":196612},"416":{"Pos":"[15591.8066 6535.6851 -97.5056]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":2,"Angles":"{-0 180 0}","Settings":196612},"417":{"Pos":"[5064.5938 5819.1406 -96.5002]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":1,"Angles":"{0.3496 315.1966 0}","Settings":65540},"418":{"Pos":"[-4913.2837 -14719.6953 -95.5057]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":1,"Angles":"{-0 270 0}","Settings":196612},"419":{"Pos":"[-14933.8125 9420.1416 540.3793]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":1,"Angles":"{359.9994 179.3347 0}","Settings":196612},"420":{"Pos":"[-9174.2051 9136.3447 -235.3974]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{359.9999 0.0001 0}","Settings":196609},"421":{"Pos":"[13353.207 -5338.4829 -1739.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196612},"422":{"Pos":"[3159.8374 7900.9258 -1739.2743]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 225 0}","Settings":196612},"423":{"Pos":"[547.2346 9088.5547 -1739.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 45 0}","Settings":197124},"424":{"Pos":"[863.3079 9463.9082 -1739.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 20.974 0}","Settings":73728},"425":{"Pos":"[6449.2617 3185.9756 -1739.2743]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 45 0}","Settings":196612},"426":{"Pos":"[12017.0908 -4419.2974 -1739.4879]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.0008 0.6617 0}","Settings":196609},"427":{"Pos":"[-8462.2051 9183.0332 -234.7458]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.0001 180 0}","Settings":196612},"428":{"Pos":"[-15648.207 3924.1182 540.4944]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":1,"Angles":"{0 0 0}","Settings":196612},"429":{"Pos":"[-4769.0942 -14984.9063 -95.5056]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":1,"Angles":"{0 90 0}","Settings":196612},"430":{"Pos":"[4299.0762 -799.4905 -96.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":1,"Angles":"{-0 180 0}","Settings":65540},"431":{"Pos":"[4164.6865 761.9815 -96.5047]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":1,"Angles":"{0.6709 192.0052 0}","Settings":204800},"432":{"Pos":"[9128.2217 9596.6045 -96.8583]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":1,"Angles":"{358.7651 128.2746 0}","Settings":196612},"433":{"Pos":"[8371.3145 -7563.8145 -97.5056]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":2,"Angles":"{0 315 0}","Settings":196612},"434":{"Pos":"[12012.0586 -14449.1816 -115.2464]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":2,"Angles":"{2.9986 94.2273 0}","Settings":196612},"435":{"Pos":"[0 0 0]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"436":{"Pos":"[0 0 0]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196612},"437":{"Pos":"[0 0 0]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"438":{"Pos":"[0 0 0]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"439":{"Pos":"[0 0 0]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"440":{"Pos":"[0 0 0]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":0},"441":{"Pos":"[-680.1612 11741.4531 -1739.5056]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225 0}","Settings":8},"442":{"Pos":"[-10874.2051 16008.207 -1739.5056]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":8448},"443":{"Pos":"[-5989.6235 -13055.5146 -10126.2061]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 225 0}","Settings":196612},"444":{"Pos":"[-4522.8779 10651.0938 -10638.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196609},"445":{"Pos":"[-5405.9741 13689.793 -14417.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196612},"446":{"Pos":"[1140.853 13689.793 -14417.5059]","TrafficLights":41,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":589825},"447":{"Pos":"[3348.8892 -15731.793 -14929.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196609},"448":{"Pos":"[806.7939 3851.4202 -16192.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196609},"449":{"Pos":"[10341.1777 -16045.207 -16192.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196612},"450":{"Pos":"[15399.207 3726.958 -16192.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196616},"451":{"Pos":"[15399.207 -2112.1101 -16192.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196612},"452":{"Pos":"[15134.793 3701.1328 -16192.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196612},"453":{"Pos":"[15134.793 -2194.623 -16192.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196612},"454":{"Pos":"[15399.207 16071.8398 -16192.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":205056},"455":{"Pos":"[15135.207 16080.8926 -16192.5059]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":205056},"456":{"Pos":"[15398.8066 14240.29 -16192.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":204800},"457":{"Pos":"[15134.8066 14149.7012 -16192.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 0 0}","Settings":196616},"458":{"Pos":"[9976.8301 -15780.793 -16192.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196609},"459":{"Pos":"[1071.2062 4019.0479 -16192.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 180 0}","Settings":196609},"460":{"Pos":"[3855.0029 -15996.207 -14929.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 90 0}","Settings":196609},"461":{"Pos":"[7253.1831 13952.7578 -14417.1855]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0.2349 269.5034 0}","Settings":197124},"462":{"Pos":"[-4766.5469 14698.207 -14417.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196609},"463":{"Pos":"[869.6057 14698.207 -14417.5059]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":196612},"464":{"Pos":"[5213.3101 14698.207 -14417.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 270 0}","Settings":66564},"465":{"Pos":"[15364.4258 5353.3276 -14929.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 168.875 0}","Settings":196616},"466":{"Pos":"[4132.4224 -11307.835 -14929.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 78.875 0}","Settings":196612},"467":{"Pos":"[-2827.5796 -9939.2451 -14929.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 78.875 0}","Settings":196612},"468":{"Pos":"[-12059.2354 4817.4561 -14417.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 337.5 0}","Settings":196612},"469":{"Pos":"[12255.2656 -3355.2593 -13905.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 157.5 0}","Settings":196609},"470":{"Pos":"[1174.9802 -14807.2695 -13905.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 78.625 0}","Settings":196610},"471":{"Pos":"[-2432.3933 7873.6338 -13393.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 258.625 0}","Settings":196609},"472":{"Pos":"[5884.2285 -1488.1453 -13394.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 213.625 0}","Settings":196612},"473":{"Pos":"[13927.6152 -12996.0215 -13394.6055]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 33.875 0}","Settings":327696},"474":{"Pos":"[14761.6426 -14238.0166 -13394.6055]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 33.875 0}","Settings":205056},"475":{"Pos":"[14546.2598 -14391.6836 -13394.6055]","TrafficLights":1,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 33.875 0}","Settings":205056},"476":{"Pos":"[9100.0869 -5804.8281 -13394.6055]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 33.875 0}","Settings":327688},"477":{"Pos":"[5215.4404 -4.9971 -13394.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 33.625 0}","Settings":196612},"478":{"Pos":"[-2247.8618 10121.6719 -13394.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 78.625 0}","Settings":196612},"479":{"Pos":"[9850.0293 -6828.459 -13905.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 348.625 0}","Settings":196609},"480":{"Pos":"[6068.2275 6998.5996 -13905.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 67.5 0}","Settings":196610},"481":{"Pos":"[-11284.7246 4528.9775 -14417.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 157.5 0}","Settings":196609},"482":{"Pos":"[-988.1956 -9273.1641 -14929.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 258.875 0}","Settings":196612},"483":{"Pos":"[14188.3184 6015.8091 -14929.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 348.875 0}","Settings":196612},"484":{"Pos":"[6655.1348 13217.9678 -14417.7061]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{-0 78.75 0}","Settings":196616},"485":{"Pos":"[11801.2188 13562.4463 -14929.5059]","TrafficLights":9,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 258.875 0}","Settings":65544},"486":{"Pos":"[5459.312 14695.4736 -14417.7061]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{360 269.2626 0}","Settings":65544},"487":{"Pos":"[13706.4258 -13140.1885 -13394.6055]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 213.875 0}","Settings":196616},"488":{"Pos":"[5013.8364 13544.6582 -14417.7061]","TrafficLights":0,"Class":"gmod_track_signal","LightsStyle":0,"Angles":"{0 78.75 0}","Settings":262152},"489":{"Channel":1,"Pos":"[-1822.7947 -1447.7142 -4386.9688]","Angles":"{0 88.9928 0}","Class":"gmod_track_switch"},"490":{"Channel":1,"Pos":"[2110.3704 -2251.4604 -4386.9688]","Angles":"{0 269.3928 0}","Class":"gmod_track_switch"},"491":{"Channel":2,"Pos":"[-4892.834 15146.8975 -3874.9688]","Angles":"{0 271.2938 0}","Class":"gmod_track_switch"},"492":{"Channel":1,"Pos":"[-6058.2861 15139.9512 -3874.9688]","Angles":"{0 269.5339 0}","Class":"gmod_track_switch"},"493":{"Channel":1,"Pos":"[-10019.334 15941.8711 -3874.9688]","Angles":"{0 89.4943 0}","Class":"gmod_track_switch"},"494":{"Channel":2,"Pos":"[-10770.9619 3229.0544 -2850.9688]","Angles":"{0 180.4955 0}","Class":"gmod_track_switch"},"495":{"Channel":1,"Pos":"[-9970.1172 3240.0581 -2850.9688]","Angles":"{0 1.3358 0}","Class":"gmod_track_switch"},"496":{"Channel":1,"Pos":"[-10371.9453 6423.2905 -2850.9688]","Angles":"{0 0.0954 0}","Class":"gmod_track_switch"},"497":{"Channel":1,"Pos":"[-10376.041 8097.7241 -2850.9688]","Angles":"{0 0.5354 0}","Class":"gmod_track_switch"},"498":{"Channel":1,"Pos":"[1646.415 -5336.3262 -2850.9688]","Angles":"{0 11.8959 0}","Class":"gmod_track_switch"},"499":{"Channel":1,"Pos":"[1627.9341 -9371.4805 -2850.9688]","Angles":"{0 192.296 0}","Class":"gmod_track_switch"},"500":{"Channel":1,"Pos":"[8359.0049 7612.1396 -2338.9688]","Angles":"{0 359.7954 0}","Class":"gmod_track_switch"},"501":{"Channel":2,"Pos":"[8566.7158 6477.9478 -2337.9688]","Angles":"{0 180.4155 0}","Class":"gmod_track_switch"},"502":{"Channel":2,"Pos":"[9372.9189 2492.5791 -2337.9688]","Angles":"{0 1.5552 0}","Class":"gmod_track_switch"},"503":{"Channel":1,"Pos":"[14555.833 -3043.0298 -487.9688]","Angles":"{0 181.3748 0}","Class":"gmod_track_switch"},"504":{"Channel":2,"Pos":"[15356.9082 -3049.5342 -487.9688]","Angles":"{0 359.3549 0}","Class":"gmod_track_switch"},"505":{"Channel":1,"Pos":"[14955.46 -8291.1836 -615.9688]","Angles":"{0 359.3548 0}","Class":"gmod_track_switch"},"506":{"Channel":1,"Pos":"[14950.6758 -9965.71 -615.9688]","Angles":"{0 359.3547 0}","Class":"gmod_track_switch"},"507":{"Channel":1,"Pos":"[-6421.2417 -12495.1709 -7612.6787]","Angles":"{0 272.2583 0}","Class":"gmod_track_switch"},"508":{"Channel":1,"Pos":"[-2503.6563 -13502.5156 -7612.6787]","Angles":"{0 268.0783 0}","Class":"gmod_track_switch"},"509":{"Channel":2,"Pos":"[12151.7627 2670.1711 -5396.9688]","Angles":"{0 359.8622 0}","Class":"gmod_track_switch"},"510":{"Channel":1,"Pos":"[12150.9434 1528.887 -5396.9688]","Angles":"{0 1.3828 0}","Class":"gmod_track_switch"},"511":{"Channel":1,"Pos":"[11357.6123 -2436.6223 -5396.9688]","Angles":"{0 179.1429 0}","Class":"gmod_track_switch"},"512":{"Channel":1,"Pos":"[1705.319 -15051.7842 -10132.9688]","Angles":"{0 270.1079 0}","Class":"gmod_track_switch"},"513":{"Channel":1,"Pos":"[-2271.428 -14251.3203 -10132.9688]","Angles":"{0 88.888 0}","Class":"gmod_track_switch"},"514":{"Channel":1,"Pos":"[-6608.165 10758.4121 -10644.9688]","Angles":"{0 272.5503 0}","Class":"gmod_track_switch"},"515":{"Channel":1,"Pos":"[-3547.0432 10921.6016 -10644.9688]","Angles":"{0 89.2903 0}","Class":"gmod_track_switch"},"516":{"Channel":1,"Pos":"[-3555.0503 11391.9063 -10644.9688]","Angles":"{0 270.7903 0}","Class":"gmod_track_switch"},"517":{"Channel":1,"Pos":"[-1606.4888 11394.8076 -10644.9688]","Angles":"{0 272.1103 0}","Class":"gmod_track_switch"},"518":{"Channel":1,"Pos":"[-1601.3893 10921.2393 -10644.9688]","Angles":"{0 91.1904 0}","Class":"gmod_track_switch"},"519":{"Channel":2,"Pos":"[-6588.0479 11554.8252 -10644.9688]","Angles":"{0 88.9905 0}","Class":"gmod_track_switch"},"520":{"Channel":0,"Pos":"[3903.1252 1732.6753 -120.6576]","Angles":"{0 180.3423 0}","Class":"gmod_track_switch"},"521":{"Channel":1,"Pos":"[4421.2671 -278.5978 -122.1636]","Angles":"{0 178.8023 0}","Class":"gmod_track_switch"},"522":{"Channel":1,"Pos":"[3943.416 13789.335 -14423.9688]","Angles":"{0 270.93 0}","Class":"gmod_track_switch"},"523":{"Channel":1,"Pos":"[2275.1738 14799.4854 -14423.9688]","Angles":"{0 271.07 0}","Class":"gmod_track_switch"}} \ No newline at end of file diff --git a/lua/metrostroi_data/signs_gm_metrostroi_b50.lua b/lua/metrostroi_data/signs_gm_metrostroi_b50.lua new file mode 100644 index 0000000..eeff6d7 --- /dev/null +++ b/lua/metrostroi_data/signs_gm_metrostroi_b50.lua @@ -0,0 +1,20782 @@ + +{ + "1": + { + "Approve0": true, + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "AV410", + "Angles": "{-0 225 0}", + "Pos": "[3331.6313 7729.1318 -1739.4564]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "004", + "Lights": "1-1-1-2", + "NextSignal": "AV414", + "Switches": "" + } + ] + }, + "2": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "AV416", + "Angles": "{3.0155 254.2496 0}", + "Pos": "[-5619.3081 15902.46 -1739.4962]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "AV418", + "Switches": "" + } + ] + }, + "3": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "AV3", + "Angles": "{0 45 0}", + "Pos": "[2388.3079 7246.9282 -1739.4564]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "2-1-13", + "NextSignal": "AV5", + "Switches": "" + } + ] + }, + "4": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "AV414", + "Angles": "{0 225 0}", + "Pos": "[-2642.9282 13703.9463 -1739.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "AV416", + "Switches": "" + } + ] + }, + "5": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "AV418", + "Angles": "{0 270 0}", + "Pos": "[-11196.4219 16008.0137 -1739.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "1", + "Lights": "1", + "NextSignal": "", + "Switches": "" + } + ] + }, + "6": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "9", + "Angles": "{356.8778 334.3625 0}", + "Pos": "[11179.9932 -8825.2598 -1739.483]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "11", + "Switches": "" + } + ] + }, + "7": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "7", + "Angles": "{356.9846 29.1805 0}", + "Pos": "[11493.9502 -2028.6838 -1739.5007]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "9", + "Switches": "" + } + ] + }, + "8": + { + "Approve0": true, + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "AV5", + "Angles": "{0 45 0}", + "Pos": "[6704.583 2930.6528 -1739.4564]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-21-1-13-3", + "NextSignal": "7", + "Switches": "" + } + ] + }, + "9": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "11", + "Angles": "{358.6627 277.4815 0}", + "Pos": "[5576.9375 -12513.999 -1739.4784]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "13", + "Switches": "" + } + ] + }, + "10": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "13", + "Angles": "{358.8721 265.0835 0}", + "Pos": "[-1506.8242 -12568.6338 -1739.4808]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "15", + "Switches": "" + } + ] + }, + "11": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "15", + "Angles": "{356.6957 210.4096 0}", + "Pos": "[-7385.4941 -9288.9326 -1739.4825]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "17", + "Switches": "" + } + ] + }, + "12": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "17", + "Angles": "{0 179.9999 0}", + "Pos": "[-8461.7939 -2545.3948 -1624.2531]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "19", + "Switches": "" + } + ] + }, + "13": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "19", + "Angles": "{0 180 0}", + "Pos": "[-8461.793 4400.0352 -776.6233]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "21", + "Switches": "" + } + ] + }, + "14": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "21", + "Angles": "{2.178 191.7813 0}", + "Pos": "[-8657.2695 11271.5557 -176.5245]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "23", + "Switches": "" + } + ] + }, + "15": + { + "Approve0": true, + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "25", + "Angles": "{0 0 0}", + "Pos": "[-15648.207 3888.1064 540.4944]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "27", + "Switches": "" + } + ] + }, + "16": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2, + "Name": "23", + "Angles": "{2.124 352.5505 0}", + "Pos": "[-15589.2529 10457.5156 559.5591]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-1-12", + "NextSignal": "25", + "Switches": "" + } + ] + }, + "17": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "27", + "Angles": "{0 0 0}", + "Pos": "[-15648.2051 -3142.6655 540.4944]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "29", + "Switches": "" + } + ] + }, + "18": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2, + "Name": "29", + "Angles": "{0 0 0}", + "Pos": "[-15648.207 -10222.9785 -96.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "31", + "Switches": "" + } + ] + }, + "19": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2, + "Name": "31", + "Angles": "{0.5587 88.1634 0}", + "Pos": "[-11842.7354 -14980.4941 -96.017]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "33", + "Switches": "" + } + ] + }, + "20": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "33", + "Angles": "{0 90 0}", + "Pos": "[-4708.502 -14984.9063 -95.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "35", + "Switches": "" + } + ] + }, + "21": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "35", + "Angles": "{0 135 0}", + "Pos": "[2060.0991 -13226.2432 -95.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "MK37", + "Switches": "" + } + ] + }, + "22": + { + "LensesStr": "YGR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "MK41", + "Angles": "{357.9415 141.7219 0}", + "Pos": "[5012.4868 5463.729 -96.4955]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-1-12", + "NextSignal": "MK43", + "Switches": "" + } + ] + }, + "23": + { + "Approve0": true, + "LensesStr": "YGR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "MK43", + "Angles": "{358.7651 128.2746 0}", + "Pos": "[9079.9033 9558.4775 -96.865]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "45", + "Switches": "" + } + ] + }, + "24": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "45", + "Angles": "{357.9123 16.3328 0}", + "Pos": "[15178.4385 8174.353 -82.1563]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "47", + "Switches": "" + } + ] + }, + "25": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "47", + "Angles": "{357.8199 350.8825 0}", + "Pos": "[15281.1807 291.2085 -102.2269]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "49", + "Switches": "" + } + ] + }, + "26": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "49", + "Angles": "{-0 315 0}", + "Pos": "[10463.2969 -5471.832 -97.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "51", + "Switches": "" + } + ] + }, + "27": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "51", + "Angles": "{1.4445 8.5211 0}", + "Pos": "[6692.6719 -11595.376 -80.5719]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "53", + "Switches": "" + } + ] + }, + "28": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "53", + "Angles": "{3.7344 99.8491 0}", + "Pos": "[12424.4736 -14394.9814 -125.1696]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "OK55", + "Switches": "" + } + ] + }, + "29": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "OK55", + "Angles": "{0 180 0}", + "Pos": "[15459.793 -8536.6211 -481.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-21-1-13-3", + "NextSignal": "OK57", + "Switches": "1400+" + } + ] + }, + "30": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OKOG1", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[15459.7891 -4734.5171 -481.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "ARSCodes": "04", + "Lights": "1", + "NextSignal": "OK63", + "Switches": "1400-,14/5-,14/1-" + }, + + { + "Repeater": true, + "Manual": false, + "Lights": "1", + "NextSignal": "OK346", + "Switches": "1400-,14/5+,14/1+" + } + ] + }, + "31": + { + "LensesStr": "YGR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "MK37", + "Angles": "{-0 180 0}", + "Pos": "[4299.1162 -6939.8877 -95.5057]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "MK39", + "Switches": "" + } + ] + }, + "32": + { + "LensesStr": "RW", + "RouteNumber": "4", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OK63", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[14824.0938 -10659.6641 -609.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-1-2", + "NextSignal": "OK65", + "Switches": "" + } + ] + }, + "33": + { + "LensesStr": "YR-GW", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OK57", + "Angles": "{0 180 0}", + "Pos": "[15460 -2280.5305 -481.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-1-13", + "NextSignal": "OK59", + "Switches": "1400+" + }, + + { + "Repeater": false, + "Manual": false, + "Switches": "1400-", + "Lights": "2-1-13", + "NextSignal": "OK59", + "ARSCodes": "04" + } + ] + }, + "34": + { + "LensesStr": "RW-M", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OK2", + "Angles": "{0 180 0}", + "Pos": "[14824.0938 -11103.9365 -609.5056]", + "Routes": + [ + + { + "Manual": false, + "Switches": "14/1-,14/5-,1400-", + "ARSCodes": "04", + "Lights": "1-1-2", + "NextSignal": "OK57", + "RouteName": "OK4-1" + }, + + { + "Repeater": false, + "ARSCodes": "04", + "Manual": false, + "Lights": "1-1-2", + "NextSignal": "OK356", + "Switches": "14/1+,14/5+,22261-", + "RouteName": "OK4-2" + } + ] + }, + "35": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "OK71", + "Angles": "{0 180 0}", + "Pos": "[15844.207 10581.9131 -481.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-21-1-13-3", + "NextSignal": "73", + "Switches": "" + } + ] + }, + "36": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "73", + "Angles": "{0 270 0}", + "Pos": "[11274.1553 14784.207 -167.3212]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "75", + "Switches": "" + } + ] + }, + "37": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2, + "Name": "75", + "Angles": "{0 270 0}", + "Pos": "[4340.2139 14784.207 528.4944]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "77", + "Switches": "" + } + ] + }, + "38": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2, + "Name": "77", + "Angles": "{0 270 0}", + "Pos": "[-2672.0042 14784.2061 528.4944]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "79", + "Switches": "" + } + ] + }, + "39": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "79", + "Angles": "{360 270.0001 0}", + "Pos": "[-9663.9893 14784.2061 277.3123]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "81", + "Switches": "" + } + ] + }, + "40": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "81", + "Angles": "{1.4767 353.1628 0}", + "Pos": "[-15299.6406 12341.2979 16.5054]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "83", + "Switches": "" + } + ] + }, + "41": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "85", + "Angles": "{0 359.9999 0}", + "Pos": "[-15519.793 -1488.4775 -1543.038]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "87", + "Switches": "" + } + ] + }, + "42": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "87", + "Angles": "{0.4652 2.5872 0}", + "Pos": "[-15503.8779 -8495.8193 -1696.4989]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "89", + "Switches": "" + } + ] + }, + "43": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "89", + "Angles": "{3.4295 54.4589 0}", + "Pos": "[-12695.1777 -14593.3906 -1696.5048]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "91", + "Switches": "" + } + ] + }, + "44": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "91", + "Angles": "{0 90 0}", + "Pos": "[-5894.7837 -15991.0137 -1696.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "93", + "Switches": "" + } + ] + }, + "45": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "93", + "Angles": "{0.0001 90.4948 0}", + "Pos": "[1065.5319 -15989.1973 -2332.499]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "PM95", + "Switches": "" + } + ] + }, + "46": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "PM95", + "Angles": "{3.4691 141.8029 0}", + "Pos": "[7421.543 -13461.8457 -2332.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "2-21-1-13-3", + "NextSignal": "PM97", + "Switches": "" + } + ] + }, + "47": + { + "LensesStr": "RW", + "RouteNumber": "D", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PM1", + "Angles": "{0 186.57 0}", + "Pos": "[8146.0137 9556.3359 -2332.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "PM3", + "Switches": "" + } + ] + }, + "48": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PM3", + "Angles": "{3.5018 226.8232 0}", + "Pos": "[7297.6313 13473.6387 -2331.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "PTO5", + "Switches": "" + } + ] + }, + "49": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "PTO5", + "Angles": "{2.4513 287.5518 0}", + "Pos": "[3785.0837 14056.7959 -2331.4951]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "PTO7", + "Switches": "" + } + ] + }, + "50": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "PTO9", + "Angles": "{0 11.25 0}", + "Pos": "[2709.6316 6220.8481 -2331.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "1", + "Lights": "2", + "NextSignal": "", + "Switches": "" + } + ] + }, + "51": + { + "Approve0": true, + "LensesStr": "WYR-GW-M", + "RouteNumber": "D", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PM99", + "Angles": "{0 180 0}", + "Pos": "[9473 2021.4855 -2332.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "PM1-1", + "Lights": "3-32-2-24-4", + "NextSignal": "PM103", + "Switches": "1620+,22038+" + }, + + { + "Manual": false, + "ARSCodes": "004", + "Repeater": false, + "Lights": "3-3-1", + "NextSignal": "PM101", + "Switches": "1620-,22038-,22036-", + "RouteName": "PM1-PTO" + } + ] + }, + "52": + { + "LensesStr": "RW", + "RouteNumber": "9", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "AVOG", + "ARSOnly": true, + "Angles": "{-0 45 0}", + "Pos": "[803.5244 10257.0488 -1739.5056]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "0", + "Lights": "1", + "NextSignal": "AV3", + "Switches": "22642-,132-" + } + ] + }, + "53": + { + "LensesStr": "RW-M", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OKD", + "Angles": "{0 0 0}", + "Pos": "[15460 -2600.8347 -481.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Switches": "1400-,14/5-,14/1-", + "Lights": "1-2", + "NextSignal": "OK63", + "RouteName": "OK1-4", + "Repeater": false + }, + + { + "Manual": false, + "RouteName": "OK1-3", + "Repeater": false, + "Lights": "1-2", + "NextSignal": "OK346", + "ARSCodes": "04", + "Switches": "1400-,14/5+,14/1+" + } + ] + }, + "54": + { + "LensesStr": "", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "AVREP1", + "ARSOnly": true, + "Angles": "{-0 45 0}", + "Pos": "[1546.729 8184.5713 -1755.4688]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "Switches": "132-", + "Lights": "", + "NextSignal": "AV3", + "ARSCodes": "04" + } + ], + "Left": true + }, + "55": + { + "Approve0": true, + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "OK59", + "Angles": "{0 180 0}", + "Pos": "[15460 3553.4504 -481.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "2-21-1-13-3", + "NextSignal": "OK71", + "Switches": "" + } + ] + }, + "56": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PTO1R", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[8464.7871 8662.9746 -2332.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "NextSignal": "PM1", + "Switches": "22036-" + } + ], + "Left": false + }, + "57": + { + "LensesStr": "YGR-YW-M", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "103R", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[9472.7871 4017.0195 -2331.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "Switches": "1620+,22038+", + "Lights": "", + "NextSignal": "PM103", + "ARSCodes": "046" + }, + + { + "Manual": false, + "Repeater": true, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "PM101", + "Switches": "1620-,22038-" + }, + + { + "Manual": false, + "Repeater": true, + "Switches": "1620-,22038-,22036-", + "Lights": "", + "NextSignal": "PM101", + "ARSCodes": "004" + } + ] + }, + "58": + { + "LensesStr": "RW-M", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PM101", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[8465.207 7238.3242 -2331.5056]", + "Routes": + [ + + { + "Manual": false, + "Switches": "22036-", + "ARSCodes": "04", + "Lights": "1-1-2", + "NextSignal": "PM1", + "RouteName": "PM2-PTO" + } + ] + }, + "59": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "PM103", + "Angles": "{0 180 0}", + "Pos": "[9473.2061 9080.7373 -2331.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-21-1-13-3", + "NextSignal": "105", + "Switches": "" + } + ] + }, + "60": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "105", + "Angles": "{2.9642 247.7244 0}", + "Pos": "[7432.4814 15396.5146 -2331.5039]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "107", + "Switches": "" + } + ] + }, + "61": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "107", + "Angles": "{3.3985 303.7103 0}", + "Pos": "[654.4731 15057.8516 -2331.5049]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "NV109", + "Switches": "" + } + ] + }, + "62": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "NV109", + "Angles": "{0.0002 0.0001 0}", + "Pos": "[-763.9874 8460.6533 -2603.822]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-21-1-13-3", + "NextSignal": "NV111", + "Switches": "" + } + ] + }, + "63": + { + "Approve0": true, + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "NV113", + "Angles": "{0 11.25 0}", + "Pos": "[638.434 -4912.252 -2844.5054]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "2-21-1-13-3", + "NextSignal": "NV115", + "Switches": "" + } + ] + }, + "64": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "NV111", + "Angles": "{0 11.25 0}", + "Pos": "[-538.0667 1002.4156 -2844.5054]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-1-13", + "NextSignal": "NV113", + "Switches": "" + } + ] + }, + "65": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "117", + "Angles": "{357.1908 351.4484 0}", + "Pos": "[1723.582 -11895.6191 -2844.5042]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "119", + "Switches": "1708+" + }, + + { + "Repeater": false, + "Manual": false, + "Switches": "1708-", + "Lights": "3-31-1-12-2", + "NextSignal": "119", + "ARSCodes": "04" + } + ] + }, + "66": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "119", + "Angles": "{356.8981 256.2893 0}", + "Pos": "[-3817.2307 -14798.4941 -2844.5042]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "121", + "Switches": "1708+" + }, + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "121", + "Switches": "1708-" + } + ] + }, + "67": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "121", + "Angles": "{3.0155 220.4996 0}", + "Pos": "[-7388.8672 -9293.3994 -2844.4985]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "VK123", + "Switches": "" + } + ] + }, + "68": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "VK123", + "Angles": "{0 180 0}", + "Pos": "[-9862.793 -3206.4583 -2844.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-1-13", + "NextSignal": "VK125", + "Switches": "" + } + ] + }, + "69": + { + "Approve0": true, + "LensesStr": "WYR-GW-M", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VK125", + "Angles": "{0 180 0}", + "Pos": "[-9862.793 2326.8284 -2844.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "VK1-1", + "Lights": "3-32-2-42-4", + "NextSignal": "VK139", + "Switches": "1767+" + }, + + { + "Repeater": false, + "Switches": "1767-,52+,76+", + "Manual": false, + "Lights": "3-3-1", + "NextSignal": "VK127", + "ARSCodes": "04", + "RouteName": "VK1-3" + }, + + { + "Repeater": false, + "ARSCodes": "04", + "Manual": false, + "Lights": "3-1-1", + "NextSignal": "VK280", + "Switches": "1767-,52-,76-", + "RouteName": "VK1-4" + } + ] + }, + "70": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VK129", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[-10235.0938 12964.2236 -2844.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "VK131", + "Switches": "" + } + ] + }, + "71": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VK131", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[-10234.793 14542.4561 -2844.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "1", + "Lights": "1", + "NextSignal": "", + "Switches": "" + } + ] + }, + "72": + { + "LensesStr": "RW", + "RouteNumber": "3", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VK127", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[-10235.0938 9178.9297 -2844.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "VK129", + "Switches": "" + } + ] + }, + "73": + { + "LensesStr": "RW", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VK135", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-9862.793 2182.4309 -2844.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "VKOP", + "Switches": "" + } + ] + }, + "74": + { + "LensesStr": "WRW-M", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VK1", + "Angles": "{0 0 0}", + "Pos": "[-10235.0938 9034.3008 -2844.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "VK3-2", + "Lights": "2-2-1", + "NextSignal": "VK276", + "Switches": "52-,76-,21898-" + }, + + { + "Manual": false, + "Switches": "52+,76+,1767-", + "Repeater": false, + "Lights": "2-2-1", + "NextSignal": "VK135", + "ARSCodes": "04", + "RouteName": "VK3-1" + } + ] + }, + "75": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VKOPP", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-9863 -2355.9043 -2844.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "VKOP", + "Switches": "" + } + ], + "Left": false + }, + "76": + { + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "VKOP", + "Angles": "{0 0 0}", + "Pos": "[-9862.793 -3430.5159 -2844.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0", + "Lights": "1", + "NextSignal": "", + "Switches": "" + } + ] + }, + "77": + { + "Approve0": true, + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "NVOP", + "Angles": "{0 191.25 0}", + "Pos": "[-630.1361 1465.2798 -2844.5054]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "1", + "Lights": "1", + "NextSignal": "", + "Switches": "" + } + ] + }, + "78": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "NV117P", + "ARSOnly": true, + "Angles": "{0 191.25 0}", + "Pos": "[-274.231 -323.9755 -2844.5054]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "NVOP", + "Switches": "" + } + ] + }, + "79": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "NV117", + "ARSOnly": true, + "Angles": "{0 191.25 0}", + "Pos": "[696.1923 -5202.623 -2844.5054]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "NV117P", + "Switches": "" + } + ] + }, + "80": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "NV115R", + "ARSOnly": true, + "Angles": "{0 191.25 0}", + "Pos": "[1245.5796 -7963.9121 -2844.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "Switches": "1708+,21971+", + "Lights": "", + "NextSignal": "NV117", + "ARSCodes": "04" + }, + + { + "Repeater": true, + "Manual": false, + "Lights": "", + "NextSignal": "NV296", + "Switches": "1708-,21971-" + } + ] + }, + "81": + { + "LensesStr": "WR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "NVB", + "Angles": "{0.283 190.7065 0}", + "Pos": "[1650.9186 -10005.6904 -2844.4956]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "NV1-2", + "Switches": "1708-,21971-", + "Lights": "1-2", + "NextSignal": "NV298", + "ARSCodes": "04" + }, + + { + "Repeater": false, + "Switches": "1708+,21971+", + "Manual": false, + "Lights": "1-2", + "NextSignal": "NV117", + "RouteName": "NV1-1", + "ARSCodes": "04" + } + ] + }, + "82": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "VK139", + "Angles": "{0 180 0}", + "Pos": "[-9863.6064 9674.8252 -3205.9517]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "141", + "Switches": "" + } + ] + }, + "83": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "141", + "Angles": "{359.9995 90.5858 0}", + "Pos": "[-6897.8579 14934.752 -3356.4971]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "143", + "Switches": "" + } + ] + }, + "84": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "143", + "Angles": "{0 45 0}", + "Pos": "[-1126.8546 11318.8359 -3356.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "145", + "Switches": "" + } + ] + }, + "85": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "145", + "Angles": "{0 45 0}", + "Pos": "[3803.7734 6388.208 -3356.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "147", + "Switches": "" + } + ] + }, + "86": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "147", + "Angles": "{0 45 0}", + "Pos": "[8794.6064 1397.6149 -3820.9143]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "149", + "Switches": "" + } + ] + }, + "87": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "149", + "Angles": "{356.5071 4.094 0}", + "Pos": "[12183.8184 -4412.5356 -3868.5054]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "151", + "Switches": "" + } + ] + }, + "88": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "151", + "Angles": "{359.9999 315.4657 0}", + "Pos": "[9492.5879 -10517.3438 -3868.499]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "153", + "Switches": "" + } + ] + }, + "89": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "153", + "Angles": "{356.499 268.6252 0}", + "Pos": "[3436.9822 -13596.4268 -3868.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "155", + "Switches": "" + } + ] + }, + "90": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "155", + "Angles": "{0 225 0}", + "Pos": "[-2519.2017 -10457.8164 -3868.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "157", + "Switches": "" + } + ] + }, + "91": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "157", + "Angles": "{0 225 0}", + "Pos": "[-9194.958 -3781.8062 -3868.4739]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-1-12", + "NextSignal": "159", + "Switches": "" + } + ] + }, + "92": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "161", + "Angles": "{0 168.75 0}", + "Pos": "[-14964.874 6381.5342 -3868.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "163", + "Switches": "" + } + ] + }, + "93": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "163", + "Angles": "{356.779 152.2451 0}", + "Pos": "[-14232.9414 13252.248 -3868.5833]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "KM165", + "Switches": "" + } + ] + }, + "94": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "KM167", + "Angles": "{0 90 0}", + "Pos": "[-661.6918 15038.793 -3868.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "169", + "Switches": "1960+" + }, + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "169", + "Switches": "1960-" + } + ] + }, + "95": + { + "Approve0": true, + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "159", + "Angles": "{0 225 0}", + "Pos": "[-13652.7246 675.9613 -3868.4739]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "161", + "Switches": "" + } + ] + }, + "96": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "169", + "Angles": "{0.0002 89.9999 0}", + "Pos": "[6428.7397 15038.8115 -4262.7949]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "171", + "Switches": "" + } + ] + }, + "97": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "171", + "Angles": "{356.6834 62.2453 0}", + "Pos": "[13309.4473 14508.3242 -4380.5034]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "173", + "Switches": "" + } + ] + }, + "98": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "173", + "Angles": "{0 0 0}", + "Pos": "[14987.9883 7819.1548 -4380.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "175", + "Switches": "" + } + ] + }, + "99": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "175", + "Angles": "{357.0358 337.6928 0}", + "Pos": "[14666.8486 780.2719 -4380.501]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "177", + "Switches": "" + } + ] + }, + "100": + { + "Approve0": true, + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "EL179", + "Angles": "{0 270 0}", + "Pos": "[4440.75 -1343.7938 -4380.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-21-1-13-3", + "NextSignal": "EL181", + "Switches": "" + } + ] + }, + "101": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "177", + "Angles": "{0 270 0}", + "Pos": "[10215.6729 -1343.7939 -4380.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-1-12", + "NextSignal": "EL179", + "Switches": "" + } + ] + }, + "102": + { + "LensesStr": "YR-GW-M", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "KM165", + "Angles": "{0 90 0}", + "Pos": "[-7700.3159 15039.5117 -3868.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "KM1-1", + "Lights": "2-21-1-13-3", + "NextSignal": "KM167", + "Switches": "1960+,1963+" + }, + + { + "Repeater": false, + "RouteName": "KM1-PTO", + "Manual": false, + "Lights": "2-24b", + "NextSignal": "B", + "Switches": "1960+,1963-", + "ARSCodes": "0" + } + ] + }, + "103": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "EL181", + "Angles": "{0 270 0}", + "Pos": "[-377.3474 -1344.5118 -4380.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "193", + "Switches": "11059+" + } + ] + }, + "104": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "ELV", + "Angles": "{0 90 0}", + "Pos": "[-2126.2163 -1344.2062 -4380.5059]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "EL1-2", + "Switches": "11059-,21587-", + "Lights": "1-1-2", + "NextSignal": "EL230", + "ARSCodes": "04" + }, + + { + "Manual": false, + "RouteName": "EL1-1", + "Repeater": false, + "Lights": "1-2", + "NextSignal": "EL187", + "Switches": "11059+,21587+", + "ARSCodes": "04" + } + ] + }, + "105": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "EL187", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[4695.8164 -1343.7937 -4380.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "EL189", + "Switches": "" + } + ] + }, + "106": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "EL189", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[8505.2549 -1344 -4380.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "ELOP", + "Switches": "" + } + ] + }, + "107": + { + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "ELOP", + "Angles": "{0 90 0}", + "Pos": "[9968.2021 -1343.7939 -4380.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0", + "Lights": "1", + "NextSignal": "", + "Switches": "" + } + ] + }, + "108": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "EL187R", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[-116.1238 -1344.5118 -4380.5059]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "EL230", + "Switches": "11059-,21587-" + }, + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "EL187", + "Switches": "11059+,21587+" + } + ] + }, + "109": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "193", + "Angles": "{357.7144 256.364 0}", + "Pos": "[-9288.5596 -1057.7646 -4380.5]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "195", + "Switches": "11059+" + }, + + { + "Manual": false, + "Repeater": false, + "Switches": "11059-", + "Lights": "2-21-1-13-32-21-1-13-3", + "NextSignal": "195", + "ARSCodes": "04" + } + ] + }, + "110": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "195", + "Angles": "{357.3933 197.2128 0}", + "Pos": "[-14259.6826 3473.6365 -4380.5005]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "197", + "Switches": "" + } + ] + }, + "111": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "197", + "Angles": "{356.5101 130.0661 0}", + "Pos": "[-13447.2051 10128.957 -4380.5044]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "199", + "Switches": "" + } + ] + }, + "112": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "199", + "Angles": "{0.0001 90 0}", + "Pos": "[-6678.9487 10942.9131 -4797.9297]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "201", + "Switches": "" + } + ] + }, + "113": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "201", + "Angles": "{0 90 0}", + "Pos": "[362.0601 10943.0137 -4893.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "203", + "Switches": "" + } + ] + }, + "114": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "203", + "Angles": "{356.5101 40.0662 0}", + "Pos": "[6952.0566 9750.4707 -4893.5049]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "205", + "Switches": "" + } + ] + }, + "115": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "205", + "Angles": "{0 0 0}", + "Pos": "[7820.9873 2818.9351 -4893.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "207", + "Switches": "" + } + ] + }, + "116": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "207", + "Angles": "{0 0 0}", + "Pos": "[7820.9873 -4284.5269 -4893.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "209", + "Switches": "" + } + ] + }, + "117": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "209", + "Angles": "{358.6614 353.9461 0}", + "Pos": "[7782.897 -11305.2939 -4893.5005]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "211", + "Switches": "" + } + ] + }, + "118": + { + "Approve0": true, + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "213", + "Angles": "{0 270 0}", + "Pos": "[-3039.0974 -14655 -4893.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "215", + "Switches": "" + } + ] + }, + "119": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "211", + "Angles": "{0 270 0}", + "Pos": "[2584.6216 -14655 -4893.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-1-12", + "NextSignal": "213", + "Switches": "" + } + ] + }, + "120": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "215", + "Angles": "{356.6256 237.0518 0}", + "Pos": "[-9688.5 -13355.5557 -4893.5049]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "217", + "Switches": "" + } + ] + }, + "121": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "217", + "Angles": "{359.5348 182.5592 0}", + "Pos": "[-12636.0186 -7267.9546 -4893.4985]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "219", + "Switches": "" + } + ] + }, + "122": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "219", + "Angles": "{360 180 0}", + "Pos": "[-12656.9863 -211.5685 -4897.312]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "221", + "Switches": "" + } + ] + }, + "123": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "221", + "Angles": "{360 180 0}", + "Pos": "[-12656.9863 6754.186 -5703.5322]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "223", + "Switches": "" + } + ] + }, + "124": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "223", + "Angles": "{357.3429 110.1481 0}", + "Pos": "[-11020.0938 13051.1309 -6029.5]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "225", + "Switches": "" + } + ] + }, + "125": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "225", + "Angles": "{0 0 0}", + "Pos": "[-6513.0127 9626.5518 -6029.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "227", + "Switches": "" + } + ] + }, + "126": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "227", + "Angles": "{3.0121 67.0169 0}", + "Pos": "[-4972.4878 3299.5132 -6029.5015]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "229", + "Switches": "" + } + ] + }, + "127": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "229", + "Angles": "{359.9999 135 0}", + "Pos": "[1063.5897 5492.9966 -6095.6318]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "231", + "Switches": "" + } + ] + }, + "128": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "231", + "Angles": "{0 134.9999 0}", + "Pos": "[5901.8545 10332.1465 -6921.5562]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "233", + "Switches": "" + } + ] + }, + "129": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "233", + "Angles": "{359.3896 48.5255 0}", + "Pos": "[11724.1318 12703.6309 -7083.4092]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "235", + "Switches": "" + } + ] + }, + "130": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "235", + "Angles": "{357.0813 341.5704 0}", + "Pos": "[15012.4199 7000.9019 -7605.0684]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "237", + "Switches": "" + } + ] + }, + "131": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "237", + "Angles": "{0 315 0}", + "Pos": "[10317.0664 1734.3887 -7592.1094]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "239", + "Switches": "" + } + ] + }, + "132": + { + "Approve0": true, + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "241", + "Angles": "{0 270 0}", + "Pos": "[-3811.3577 -2239.7939 -7592.1094]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "243", + "Switches": "" + } + ] + }, + "133": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "243", + "Angles": "{0 270 0}", + "Pos": "[-10989.8779 -2239.7939 -7592.1094]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "245", + "Switches": "" + } + ] + }, + "134": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "245", + "Angles": "{0 0 0}", + "Pos": "[-16076.207 -5532.1855 -7592.1094]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "247", + "Switches": "" + } + ] + }, + "135": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "247", + "Angles": "{3.0137 66.976 0}", + "Pos": "[-14613.082 -12183.7607 -7592.4956]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "249", + "Switches": "" + } + ] + }, + "136": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "249", + "Angles": "{1.296 83.1448 0}", + "Pos": "[-7768.5259 -13531.0684 -7592.5083]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "251", + "Switches": "11468+" + } + ] + }, + "137": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "251", + "Angles": "{0 90 0}", + "Pos": "[-760.5222 -13607.2129 -7592.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "253", + "Switches": "" + } + ] + }, + "138": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "253", + "Angles": "{0 90 0}", + "Pos": "[6662.2314 -13607.0137 -7592.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "255", + "Switches": "" + } + ] + }, + "139": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "255", + "Angles": "{3.1019 155.0676 0}", + "Pos": "[13081.1543 -11631.9912 -7592.501]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "257", + "Switches": "" + } + ] + }, + "140": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "257", + "Angles": "{360 180 0}", + "Pos": "[13464.0137 -4537.7524 -8019.2026]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "259", + "Switches": "" + } + ] + }, + "141": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "259", + "Angles": "{1.1275 186.1758 0}", + "Pos": "[13394.5293 3122.627 -8603.4971]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "261", + "Switches": "" + } + ] + }, + "142": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "263", + "Angles": "{0 270 0}", + "Pos": "[-1007.0496 9880.207 -8603.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-1-12", + "NextSignal": "265", + "Switches": "" + } + ] + }, + "143": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "261", + "Angles": "{2.2856 256.3855 0}", + "Pos": "[8224.7393 9550.5762 -8603.5039]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "263", + "Switches": "" + } + ] + }, + "144": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "267", + "Angles": "{2.4515 344.8297 0}", + "Pos": "[-12973.7354 7337.833 -8603.792]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "269", + "Switches": "" + } + ] + }, + "145": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "269", + "Angles": "{360 0 0}", + "Pos": "[-13159.0127 18.2745 -9127.7969]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "271", + "Switches": "" + } + ] + }, + "146": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "271", + "Angles": "{1.3373 7.5068 0}", + "Pos": "[-13049.1377 -7228.2891 -9614.499]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "273", + "Switches": "" + } + ] + }, + "147": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "273", + "Angles": "{3.0112 66.6282 0}", + "Pos": "[-9235.5654 -12861.0635 -9614.5049]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "275", + "Switches": "" + } + ] + }, + "148": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "275", + "Angles": "{0.691 93.7191 0}", + "Pos": "[-1972.7084 -13609.2412 -9614.499]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "277", + "Switches": "" + } + ] + }, + "149": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "277", + "Angles": "{3.3045 149.5849 0}", + "Pos": "[4202.8447 -10295.4014 -9614.5039]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "279", + "Switches": "" + } + ] + }, + "150": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "279", + "Angles": "{0.0001 180.4948 0}", + "Pos": "[5271.2646 -3320.7056 -9614.499]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "281", + "Switches": "" + } + ] + }, + "151": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "281", + "Angles": "{3.4929 229.0969 0}", + "Pos": "[2935.7524 3001.0874 -9614.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "283", + "Switches": "" + } + ] + }, + "152": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "283", + "Angles": "{0 270 0}", + "Pos": "[-3810.4912 4781.7832 -9614.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "285", + "Switches": "" + } + ] + }, + "153": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "285", + "Angles": "{1.3371 277.6424 0}", + "Pos": "[-11043.7881 4717.9517 -10126.4971]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "287", + "Switches": "" + } + ] + }, + "154": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "287", + "Angles": "{0 0 0}", + "Pos": "[-14181.9863 -761.6826 -10126.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "289", + "Switches": "" + } + ] + }, + "155": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "289", + "Angles": "{0 45 0}", + "Pos": "[-11557.9482 -8913.1074 -10126.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-1-12", + "NextSignal": "LN291", + "Switches": "" + } + ] + }, + "156": + { + "Approve0": true, + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "LN291", + "Angles": "{0 45 0}", + "Pos": "[-7384.4941 -13086.5605 -10126.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-21-1-13-3", + "NextSignal": "LN293", + "Switches": "" + } + ] + }, + "157": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "LNOG", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-5.4084 -15156.6895 -10126.5059]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "Switches": "11774-", + "Lights": "1", + "NextSignal": "LN124R", + "ARSCodes": "04" + } + ] + }, + "158": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "LNV", + "Angles": "{0 270 0}", + "Pos": "[2177.5774 -15157.0938 -10126.5059]", + "Routes": + [ + + { + "Manual": false, + "Switches": "11774-,2880-", + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "LN124", + "RouteName": "LN1-2" + } + ] + }, + "159": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "LN293", + "Angles": "{0 90 0}", + "Pos": "[-589.1295 -15156.793 -10126.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-21-1-13-3", + "NextSignal": "297", + "Switches": "11774+" + } + ] + }, + "160": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "297", + "Angles": "{1.3373 97.5068 0}", + "Pos": "[9314.1777 -15028.4736 -10126.5029]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "299", + "Switches": "2880+" + }, + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "299", + "Switches": "2880-" + } + ] + }, + "161": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "299", + "Angles": "{3.0112 156.6283 0}", + "Pos": "[14792.418 -11262.8193 -10126.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "301", + "Switches": "" + } + ] + }, + "162": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "301", + "Angles": "{0 180 0}", + "Pos": "[15583.0137 -4144.4106 -10126.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "303", + "Switches": "" + } + ] + }, + "163": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "303", + "Angles": "{0 180 0}", + "Pos": "[15583.0137 2924.8301 -10126.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "305", + "Switches": "" + } + ] + }, + "164": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "305", + "Angles": "{2.111 193.6321 0}", + "Pos": "[15274.7686 10235.5322 -10126.499]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "307", + "Switches": "" + } + ] + }, + "165": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "307", + "Angles": "{2.6071 252.7829 0}", + "Pos": "[10723.7627 15128.5518 -10126.501]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "309", + "Switches": "" + } + ] + }, + "166": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "309", + "Angles": "{0 270 0}", + "Pos": "[3348.5647 15562.0127 -10126.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "311", + "Switches": "" + } + ] + }, + "167": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "311", + "Angles": "{0 270 0}", + "Pos": "[-3769.3186 15562.0137 -10126.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "313", + "Switches": "" + } + ] + }, + "168": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "313", + "Angles": "{2.4507 285.3844 0}", + "Pos": "[-11206.1934 15156.2529 -10126.5029]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "315", + "Switches": "" + } + ] + }, + "169": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "315", + "Angles": "{2.1113 348.0488 0}", + "Pos": "[-15911.6553 9969.4063 -10126.501]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "317", + "Switches": "" + } + ] + }, + "170": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "317", + "Angles": "{0.0002 359.9999 0}", + "Pos": "[-16159.9873 2753.9583 -10505.6191]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "319", + "Switches": "" + } + ] + }, + "171": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "319", + "Angles": "{0 0 0}", + "Pos": "[-16160.0137 -4166.2349 -10638.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "321", + "Switches": "" + } + ] + }, + "172": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "321", + "Angles": "{2.4507 15.3844 0}", + "Pos": "[-15750.582 -11239.541 -10638.5029]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "323", + "Switches": "" + } + ] + }, + "173": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "323", + "Angles": "{2.2856 76.3855 0}", + "Pos": "[-10873.2256 -15862.0918 -10638.5029]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "325", + "Switches": "" + } + ] + }, + "174": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "325", + "Angles": "{0 90 0}", + "Pos": "[-3831.9592 -16180.0137 -10638.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "327", + "Switches": "" + } + ] + }, + "175": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "327", + "Angles": "{0 90 0}", + "Pos": "[3686.5288 -16180.0137 -10638.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "329", + "Switches": "" + } + ] + }, + "176": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "329", + "Angles": "{2.9642 157.7244 0}", + "Pos": "[10123.2393 -14103.5625 -10638.5029]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "331", + "Switches": "" + } + ] + }, + "177": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "331", + "Angles": "{0 225 0}", + "Pos": "[8817.1211 -7366.1025 -10638.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "333", + "Switches": "" + } + ] + }, + "178": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "333", + "Angles": "{0.8395 268.0896 0}", + "Pos": "[3195.822 -3156.1323 -10638.4932]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "MN335", + "Switches": "" + } + ] + }, + "179": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "MN335", + "Angles": "{0 225 0}", + "Pos": "[-4851.208 -1317.6257 -10637.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-1-13", + "NextSignal": "MN337", + "Switches": "" + } + ] + }, + "180": + { + "LensesStr": "YGR-YW-M", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MN339R", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[-5158.0342 10651.5117 -10638.5059]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "", + "Lights": "", + "NextSignal": "341", + "Switches": "12088+" + }, + + { + "Manual": false, + "Repeater": true, + "Switches": "12088-,22/5+,22/1+", + "Lights": "", + "NextSignal": "D1", + "ARSCodes": "" + }, + + { + "Manual": false, + "Repeater": true, + "ARSCodes": "", + "Lights": "", + "NextSignal": "D2", + "Switches": "12088-,22/5-,22/1-" + } + ] + }, + "181": + { + "LensesStr": "YRW", + "RouteNumber": "3", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "D1", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[-787.0522 11023.0938 -10638.5059]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "2-1-3", + "NextSignal": "MN3", + "Switches": "" + } + ], + "Left": false + }, + "182": + { + "LensesStr": "YRW", + "RouteNumber": "4", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "D2", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[-787.2786 11287.0938 -10638.5059]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "2-1-3", + "NextSignal": "MN4", + "ARSCodes": "04" + } + ], + "Left": false + }, + "183": + { + "LensesStr": "YRW-", + "RouteNumber": "D", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "D3", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[13035.793 7133.0527 -11150.5059]", + "Routes": + [ + + { + "NextSignal": "D5", + "ARSCodes": "04", + "Manual": true, + "Repeater": false, + "Lights": "2-1-3", + "Switches": "", + "RouteName": "DEPOT" + } + ], + "Left": false + }, + "184": + { + "LensesStr": "YRW", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "D5", + "ARSOnly": false, + "Angles": "{356.5147 352.6299 0}", + "Pos": "[12995.1201 1871.7064 -11508.8047]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "2-1-3", + "NextSignal": "D7", + "ARSCodes": "04" + } + ], + "Left": false + }, + "185": + { + "LensesStr": "YRW", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "D7", + "ARSOnly": false, + "Angles": "{0.003 270.4622 0}", + "Pos": "[9232.29 -1249.9565 -11662.7559]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "2-1-3", + "NextSignal": "D9", + "ARSCodes": "04" + } + ], + "Left": false + }, + "186": + { + "LensesStr": "YRW", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "D9", + "ARSOnly": false, + "Angles": "{356.5637 231.4122 0}", + "Pos": "[4021.551 -515.9459 -12172.8711]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "2-1-3", + "NextSignal": "D11", + "ARSCodes": "04" + } + ], + "Left": false + }, + "187": + { + "LensesStr": "YRW", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "D11", + "ARSOnly": false, + "Angles": "{358.6349 167.8295 0}", + "Pos": "[3003.1797 4575.749 -12174.6963]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "2-1-3", + "NextSignal": "D13", + "ARSCodes": "04" + } + ], + "Left": false + }, + "188": + { + "LensesStr": "YRW", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "D13", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[3940.2061 9625.3066 -12174.5059]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "2-1-3", + "NextSignal": "D15", + "ARSCodes": "04" + } + ], + "Left": false + }, + "189": + { + "LensesStr": "YRW", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "D15", + "ARSOnly": false, + "Angles": "{358.1851 101.1251 0}", + "Pos": "[6747.3672 13599.417 -12174.502]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "2-1-3", + "NextSignal": "D17", + "ARSCodes": "04" + } + ], + "Left": false + }, + "190": + { + "LensesStr": "YRW", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "D17", + "ARSOnly": false, + "Angles": "{356.6801 30.642 0}", + "Pos": "[11530.6563 12160.46 -12174.5049]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "2-1-3", + "NextSignal": "D19", + "ARSCodes": "04" + } + ], + "Left": false + }, + "191": + { + "LensesStr": "YRW", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "D19", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[12130.7949 6941.7373 -12174.5059]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "2-1-3", + "NextSignal": "D21", + "Switches": "" + } + ], + "Left": false + }, + "192": + { + "LensesStr": "YRW", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "D21", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[12130.7949 1726.0868 -12174.5059]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "2-1-3", + "NextSignal": "D23", + "Switches": "" + } + ], + "Left": false + }, + "193": + { + "LensesStr": "YRW", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2, + "Name": "D23", + "ARSOnly": false, + "Angles": "{358.4732 348.0247 0}", + "Pos": "[11998.5332 -3482.9319 -12160.3809]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "2-1-3", + "NextSignal": "D25", + "ARSCodes": "1" + } + ], + "Left": false + }, + "194": + { + "LensesStr": "RW-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "D25", + "ARSOnly": false, + "Angles": "{357.771 270.1291 0}", + "Pos": "[8385.0889 -6246.6997 -11798.3027]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "1", + "Lights": "2", + "NextSignal": "D25", + "Switches": "" + } + ], + "Left": false + }, + "195": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "341", + "Angles": "{0 90 0}", + "Pos": "[395.8339 10650.7949 -10638.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "343", + "Switches": "" + } + ] + }, + "196": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "343", + "Angles": "{358.6622 83.8213 0}", + "Pos": "[7589.4336 10578.7871 -10638.499]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "345", + "Switches": "" + } + ] + }, + "197": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "345", + "Angles": "{356.878 25.6185 0}", + "Pos": "[13448.832 6931.6855 -10638.5039]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "347", + "Switches": "" + } + ] + }, + "198": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "347", + "Angles": "{360 0 0}", + "Pos": "[14321.9863 -311.8667 -10920.3926]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "349", + "Switches": "" + } + ] + }, + "199": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "349", + "Angles": "{359.0877 356.2783 0}", + "Pos": "[14299.1152 -7564.2114 -11649.4971]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "351", + "Switches": "" + } + ] + }, + "200": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "351", + "Angles": "{356.6956 300.4095 0}", + "Pos": "[11115.7031 -13766.249 -11649.5039]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "353", + "Switches": "" + } + ] + }, + "201": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "353", + "Angles": "{0 269.9999 0}", + "Pos": "[4178.8521 -14915.9883 -11743.9346]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "355", + "Switches": "" + } + ] + }, + "202": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "355", + "Angles": "{360 270 0}", + "Pos": "[-3470.509 -14915.9863 -12675.6475]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "357", + "Switches": "" + } + ] + }, + "203": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "357", + "Angles": "{357.1122 248.7655 0}", + "Pos": "[-10683.7734 -14319.126 -13033.502]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "359", + "Switches": "" + } + ] + }, + "204": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "359", + "Angles": "{358.4589 188.8888 0}", + "Pos": "[-14897.8535 -8805.5654 -13033.5]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "361", + "Switches": "" + } + ] + }, + "205": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "361", + "Angles": "{360 180 0}", + "Pos": "[-15050.9863 -1490.3552 -13617.7842]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "363", + "Switches": "" + } + ] + }, + "206": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "363", + "Angles": "{359.5343 178.484 0}", + "Pos": "[-15045.1377 5905.5244 -14417.5]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "365", + "Switches": "" + } + ] + }, + "207": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "365", + "Angles": "{356.531 128.191 0}", + "Pos": "[-12482.1367 12101.999 -14417.5039]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "TV367", + "Switches": "" + } + ] + }, + "208": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "TV371", + "Angles": "{358.2595 81.0755 0}", + "Pos": "[9151.7588 13537.751 -14421.417]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "2-21-1-13-3", + "NextSignal": "373", + "Switches": "" + } + ] + }, + "209": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "373", + "Angles": "{357.55 17.2315 0}", + "Pos": "[14667.2871 9077.2266 -14423.5869]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "375", + "Switches": "" + } + ] + }, + "210": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "375", + "Angles": "{0 0 0}", + "Pos": "[15140.793 2519.1406 -14417.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "377", + "Switches": "" + } + ] + }, + "211": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "377", + "Angles": "{0 0 0}", + "Pos": "[15140.7939 -4563.936 -14606.8857]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "379", + "Switches": "" + } + ] + }, + "212": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "379", + "Angles": "{357.1104 338.7603 0}", + "Pos": "[14503.4316 -11581.2051 -14936.1982]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "381", + "Switches": "" + } + ] + }, + "213": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "381", + "Angles": "{358.4597 278.9125 0}", + "Pos": "[9178.8154 -15575.4922 -14933.4629]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "383", + "Switches": "" + } + ] + }, + "214": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "383", + "Angles": "{0 270 0}", + "Pos": "[899.7794 -15731.793 -15057.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "385", + "Switches": "" + } + ] + }, + "215": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "385", + "Angles": "{0 270 0}", + "Pos": "[-6276.3633 -15731.793 -15057.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "387", + "Switches": "" + } + ] + }, + "216": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "387", + "Angles": "{356.5312 220.8987 0}", + "Pos": "[-13564.3252 -13434.1777 -15065.751]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "389", + "Switches": "" + } + ] + }, + "217": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "389", + "Angles": "{359.9999 180 0}", + "Pos": "[-15303.7949 -6814.9067 -15118.1113]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "391", + "Switches": "" + } + ] + }, + "218": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "391", + "Angles": "{360 180 0}", + "Pos": "[-15304.2061 308.9893 -15978.9727]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "393", + "Switches": "" + } + ] + }, + "219": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "393", + "Angles": "{359.3069 177.4015 0}", + "Pos": "[-15286.7939 7332.6265 -16193.9404]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "395", + "Switches": "" + } + ] + }, + "220": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "395", + "Angles": "{356.8787 117.9788 0}", + "Pos": "[-11860.626 13707.2148 -16199.9941]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "397", + "Switches": "" + } + ] + }, + "221": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "397", + "Angles": "{358.0693 79.5872 0}", + "Pos": "[-4993.2354 14483.208 -16196.7363]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "399", + "Switches": "" + } + ] + }, + "222": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "399", + "Angles": "{357.55 17.2315 0}", + "Pos": "[332.4119 10057.0479 -16198.5908]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "401", + "Switches": "" + } + ] + }, + "223": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "401", + "Angles": "{0 0 0}", + "Pos": "[806.7938 2463.6653 -16192.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "403", + "Switches": "" + } + ] + }, + "224": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "403", + "Angles": "{0 0 0}", + "Pos": "[806.7938 -4702.7119 -16192.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "405", + "Switches": "" + } + ] + }, + "225": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "405", + "Angles": "{2.6083 19.1882 0}", + "Pos": "[1330.0389 -11360.791 -16186.6152]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "407", + "Switches": "" + } + ] + }, + "226": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "409", + "Angles": "{3.3798 126.8711 0}", + "Pos": "[13932.2236 -15321.3906 -16184.9229]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "411", + "Switches": "" + } + ] + }, + "227": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "407", + "Angles": "{1.7381 81.0832 0}", + "Pos": "[7072.3511 -15897.752 -16188.8887]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "409", + "Switches": "" + } + ] + }, + "228": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "411", + "Angles": "{0 180 0}", + "Pos": "[15399.207 -8711.4551 -16192.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "MJ413", + "Switches": "" + } + ] + }, + "229": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "MJ413", + "Angles": "{0 180 0}", + "Pos": "[15399.207 -1932.3966 -16192.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-1-13", + "NextSignal": "MJ415", + "Switches": "" + } + ] + }, + "230": + { + "LensesStr": "RW", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MJ417", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[15399.207 9476.8086 -16192.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-1-2", + "NextSignal": "MJ419", + "Switches": "" + } + ] + }, + "231": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MJ421", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[15399.1074 15348.2061 -16192.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "1", + "Lights": "1", + "NextSignal": "", + "Switches": "" + } + ] + }, + "232": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MJ419", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[15398.8066 13479.6846 -16192.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "MJ421", + "Switches": "" + } + ] + }, + "233": + { + "Approve0": true, + "LensesStr": "YGR-YW-M", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "TV369", + "Angles": "{0 90 0}", + "Pos": "[1793.5015 13690 -14417.5059]", + "Routes": + [ + + { + "Manual": false, + "Switches": "12301+", + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "TV371", + "RouteName": "TV-MJ" + }, + + { + "Manual": false, + "Switches": "12301-", + "Repeater": false, + "Lights": "3-31-14-1b4", + "NextSignal": "425", + "ARSCodes": "04", + "RouteName": "TV-AU" + } + ] + }, + "234": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MJ1", + "Angles": "{0 0 0}", + "Pos": "[15398.8066 9696.8574 -16192.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-1-2", + "NextSignal": "MJ2", + "Switches": "" + } + ] + }, + "235": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "427", + "Angles": "{359.3834 352.33 0}", + "Pos": "[14731.1973 8817.0742 -14929.5967]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "429", + "Switches": "" + } + ] + }, + "236": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "429", + "Angles": "{0 348.855 0}", + "Pos": "[13308.166 1547.6078 -14929.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "431", + "Switches": "" + } + ] + }, + "237": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "431", + "Angles": "{0 348.875 0}", + "Pos": "[11911.1211 -5564.2646 -14929.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "433", + "Switches": "" + } + ] + }, + "238": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "433", + "Angles": "{0 258.875 0}", + "Pos": "[5809.3101 -10609.7998 -14929.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-1-12", + "NextSignal": "435", + "Switches": "" + } + ] + }, + "239": + { + "Approve0": true, + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "435", + "Angles": "{0 258.875 0}", + "Pos": "[-1326.7805 -9206.793 -14929.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "437", + "Switches": "" + } + ] + }, + "240": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "437", + "Angles": "{0 247.75 0}", + "Pos": "[-7899.2554 -7098.0918 -14929.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "439", + "Switches": "" + } + ] + }, + "241": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "439", + "Angles": "{356.5101 197.8161 0}", + "Pos": "[-13648.2383 -3488.2644 -14929.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "441", + "Switches": "" + } + ] + }, + "242": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "441", + "Angles": "{0.0002 157.2499 0}", + "Pos": "[-11911.8232 3029.9351 -14531.249]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "443", + "Switches": "" + } + ] + }, + "243": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "445", + "Angles": "{358.8725 73.6498 0}", + "Pos": "[-1799.2089 10187.8281 -14417.502]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "447", + "Switches": "" + } + ] + }, + "244": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "447", + "Angles": "{0.0002 67.25 0}", + "Pos": "[4603.6807 7608.9712 -13963.126]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "449", + "Switches": "" + } + ] + }, + "245": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "449", + "Angles": "{356.6255 34.5518 0}", + "Pos": "[10559.8408 3817.9348 -13905.5039]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "451", + "Switches": "" + } + ] + }, + "246": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "451", + "Angles": "{359.309 341.1917 0}", + "Pos": "[11052.959 -3008.2039 -13905.499]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "453", + "Switches": "" + } + ] + }, + "247": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "453", + "Angles": "{357.7144 334.989 0}", + "Pos": "[8950.7441 -9701.7305 -13905.502]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "455", + "Switches": "" + } + ] + }, + "248": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "455", + "Angles": "{357.5493 273.9889 0}", + "Pos": "[3258.0176 -13596.5635 -13905.499]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "457", + "Switches": "" + } + ] + }, + "249": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "457", + "Angles": "{0 258.625 0}", + "Pos": "[-3931.6392 -12515.1777 -13905.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "459", + "Switches": "" + } + ] + }, + "250": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "459", + "Angles": "{356.8778 232.9874 0}", + "Pos": "[-10954.8486 -10258.3018 -13906.5029]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "461", + "Switches": "" + } + ] + }, + "251": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "461", + "Angles": "{358.8725 174.7747 0}", + "Pos": "[-13461.5703 -3745.1682 -13906.498]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "463", + "Switches": "" + } + ] + }, + "252": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "463", + "Angles": "{0.0002 168.3749 0}", + "Pos": "[-12095.7939 3313.0159 -13416.0645]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "465", + "Switches": "" + } + ] + }, + "253": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "465", + "Angles": "{356.499 122.2503 0}", + "Pos": "[-8726.4346 9389.5 -13394.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "467", + "Switches": "" + } + ] + }, + "254": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "467", + "Angles": "{0 78.625 0}", + "Pos": "[-1876.1218 10047.082 -13394.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "469", + "Switches": "" + } + ] + }, + "255": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "469", + "Angles": "{0 22.625 0}", + "Pos": "[2604.9302 5197.6514 -13394.4063]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "AU471", + "Switches": "" + } + ] + }, + "256": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "AU471", + "Angles": "{0 33.625 0}", + "Pos": "[6065.2959 -1282.9271 -13394.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-1-13", + "NextSignal": "AU473", + "Switches": "" + } + ] + }, + "257": + { + "Approve0": true, + "LensesStr": "RW-M", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "AU473", + "Angles": "{0 33.875 0}", + "Pos": "[9111.5469 -5821.8984 -13394.6055]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "1-1-1-2", + "NextSignal": "AU475", + "Switches": "" + } + ] + }, + "258": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "AU475", + "ARSOnly": true, + "Angles": "{0 33.875 0}", + "Pos": "[11689.5215 -9661.2451 -13394.6055]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-1-2", + "NextSignal": "AU477", + "Switches": "" + } + ] + }, + "259": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "AU1", + "Angles": "{0 213.875 0}", + "Pos": "[11910.4521 -9991.3105 -13394.6055]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-1-2", + "NextSignal": "AU420", + "Switches": "" + } + ] + }, + "260": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MJ2", + "Angles": "{0 0 0}", + "Pos": "[15134.793 3924.6453 -16192.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "2-1-13", + "NextSignal": "MJ4", + "Switches": "" + } + ] + }, + "261": + { + "Approve0": true, + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "MJ4", + "Angles": "{0 0 0}", + "Pos": "[15134.793 -1798.9486 -16192.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "2-21-1-13-3", + "NextSignal": "6", + "Switches": "" + } + ] + }, + "262": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "6", + "Angles": "{0 0 0}", + "Pos": "[15134.793 -8807.9404 -16192.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "8", + "Switches": "" + } + ] + }, + "263": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "8", + "Angles": "{356.7794 301.6776 0}", + "Pos": "[13676.8301 -15174.9053 -16200.3877]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "10", + "Switches": "" + } + ] + }, + "264": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "10", + "Angles": "{358.2594 261.0755 0}", + "Pos": "[6966.3604 -15614.0186 -16196.583]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "12", + "Switches": "" + } + ] + }, + "265": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "12", + "Angles": "{357.55 197.2315 0}", + "Pos": "[1543.2056 -11163.3623 -16198.5791]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "14", + "Switches": "" + } + ] + }, + "266": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "14", + "Angles": "{0 180 0}", + "Pos": "[1071.2063 -4601.7188 -16192.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "16", + "Switches": "" + } + ] + }, + "267": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "16", + "Angles": "{0 180 0}", + "Pos": "[1071.2063 2572.698 -16192.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "18", + "Switches": "" + } + ] + }, + "268": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "18", + "Angles": "{2.6083 199.1882 0}", + "Pos": "[550.2744 10240.1475 -16186.623]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "20", + "Switches": "" + } + ] + }, + "269": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "20", + "Angles": "{1.7381 261.0831 0}", + "Pos": "[-5020.6743 14756.4844 -16188.6182]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "22", + "Switches": "" + } + ] + }, + "270": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "22", + "Angles": "{3.1232 297.9828 0}", + "Pos": "[-12111.8906 13872.1436 -16185.3242]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "24", + "Switches": "" + } + ] + }, + "271": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "24", + "Angles": "{0.691 357.4102 0}", + "Pos": "[-15554.4131 7258.1636 -16191.2959]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "26", + "Switches": "" + } + ] + }, + "272": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "26", + "Angles": "{0 0.0001 0}", + "Pos": "[-15568.2061 281.9707 -15975.7207]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "28", + "Switches": "" + } + ] + }, + "273": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "28", + "Angles": "{0.0001 0.0001 0}", + "Pos": "[-15567.7949 -6858.729 -15113.6426]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "30", + "Switches": "" + } + ] + }, + "274": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "30", + "Angles": "{3.4694 40.8995 0}", + "Pos": "[-13687.9531 -13693.8145 -15049.7012]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "32", + "Switches": "" + } + ] + }, + "275": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "32", + "Angles": "{0 90 0}", + "Pos": "[-6177.3359 -15996.207 -15057.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "34", + "Switches": "" + } + ] + }, + "276": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "34", + "Angles": "{360 90 0}", + "Pos": "[1011.4784 -15996.207 -15055.7188]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "36", + "Switches": "" + } + ] + }, + "277": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "36", + "Angles": "{1.7399 100.4088 0}", + "Pos": "[9324.541 -15819.4297 -14925.5898]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "38", + "Switches": "" + } + ] + }, + "278": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "38", + "Angles": "{2.8872 158.7602 0}", + "Pos": "[14803.1475 -11537.8262 -14923.3379]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "40", + "Switches": "" + } + ] + }, + "279": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "40", + "Angles": "{359.9999 180 0}", + "Pos": "[15404.7939 -4508.8159 -14600.3223]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "42", + "Switches": "" + } + ] + }, + "280": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "42", + "Angles": "{0 180 0}", + "Pos": "[15405.207 2614.5063 -14417.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "44", + "Switches": "" + } + ] + }, + "281": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "TV48", + "Angles": "{0 270 0}", + "Pos": "[1870.1973 14697.793 -14417.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "2-1-13", + "NextSignal": "TV50", + "Switches": "2345+" + }, + + { + "Manual": false, + "Repeater": false, + "ARSCodes": "046", + "Lights": "2-1-13", + "NextSignal": "TV50", + "Switches": "2345-" + } + ] + }, + "282": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "44", + "Angles": "{3.1232 207.9828 0}", + "Pos": "[14366.3877 10459.7881 -14410.3555]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "TW46", + "Switches": "" + } + ] + }, + "283": + { + "Approve0": true, + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "TV50", + "Angles": "{0 270 0}", + "Pos": "[-4615.3687 14698 -14417.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-21-1-13-3", + "NextSignal": "52", + "Switches": "" + } + ] + }, + "284": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OK67", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[14823.8926 -15366.9004 -609.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "1", + "Lights": "1", + "NextSignal": "", + "Switches": "" + } + ] + }, + "285": + { + "Approve0": false, + "LensesStr": "YRW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MN6", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[5172.3389 11287.207 -10638.5059]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "2", + "NextSignal": "", + "ARSCodes": "1" + } + ], + "Left": false + }, + "286": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "443", + "Angles": "{356.7798 129.5143 0}", + "Pos": "[-8196.1299 9261.2354 -14417.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "445", + "Switches": "" + } + ] + }, + "287": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "TVD", + "Angles": "{0 90 0}", + "Pos": "[1276.5625 14698 -14417.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0", + "Lights": "1", + "NextSignal": "", + "Switches": "" + } + ] + }, + "288": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "52", + "Angles": "{3.4293 305.5423 0}", + "Pos": "[-13385.4336 13203.7832 -14417.5049]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "54", + "Switches": "" + } + ] + }, + "289": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "54", + "Angles": "{0 0 0}", + "Pos": "[-16074.8125 5856.8911 -14417.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "56", + "Switches": "" + } + ] + }, + "290": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "56", + "Angles": "{0 0 0}", + "Pos": "[-16074.9863 -1542.8674 -13613.1777]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "58", + "Switches": "" + } + ] + }, + "291": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "58", + "Angles": "{0.9119 4.9138 0}", + "Pos": "[-16016.5381 -9083.377 -13033.499]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "60", + "Switches": "" + } + ] + }, + "292": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "60", + "Angles": "{2.451 74.6322 0}", + "Pos": "[-11067.6387 -15563.9385 -13033.5029]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "62", + "Switches": "" + } + ] + }, + "293": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "62", + "Angles": "{0 90 0}", + "Pos": "[-3420.0315 -15954.9863 -12669.4492]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "64", + "Switches": "" + } + ] + }, + "294": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "64", + "Angles": "{360 89.9999 0}", + "Pos": "[4235.1221 -15954.9883 -11737.8076]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "66", + "Switches": "" + } + ] + }, + "295": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "66", + "Angles": "{3.3043 120.42 0}", + "Pos": "[11980.9932 -14898.4199 -11649.502]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "68", + "Switches": "" + } + ] + }, + "296": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "68", + "Angles": "{0 180 0}", + "Pos": "[15345.8125 -7556.2637 -11649.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "70", + "Switches": "" + } + ] + }, + "297": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "70", + "Angles": "{0 180 0}", + "Pos": "[15345.9863 -183.9359 -10902.8428]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "72", + "Switches": "" + } + ] + }, + "298": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "72", + "Angles": "{3.0109 203.3825 0}", + "Pos": "[14632.5918 7587.3496 -10638.501]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "74", + "Switches": "" + } + ] + }, + "299": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "74", + "Angles": "{0.4657 268.5127 0}", + "Pos": "[7522.2197 11655.1631 -10638.499]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "76", + "Switches": "" + } + ] + }, + "300": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "78", + "Angles": "{0 270 0}", + "Pos": "[-4576.835 11659.0938 -10638.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "MN80", + "Switches": "2574+" + } + ] + }, + "301": + { + "LensesStr": "YR-GW", + "RouteNumber": "2", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MN80", + "Angles": "{0 45 0}", + "Pos": "[-9454.0488 2276.2971 -10637.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-1-13", + "NextSignal": "MN82", + "Switches": "2574+" + }, + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "2-1-13", + "NextSignal": "MN82", + "Switches": "2574-" + } + ] + }, + "302": + { + "Approve0": true, + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "MN82", + "Angles": "{0 45 0}", + "Pos": "[-5388.2827 -1789.469 -10637.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-21-1-13-3", + "NextSignal": "84", + "Switches": "" + } + ] + }, + "303": + { + "LensesStr": "YRW", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2, + "Name": "E2", + "ARSOnly": false, + "Angles": "{0.3818 177.3483 0}", + "Pos": "[13129.2549 -2503.4751 -12085.6182]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "1", + "Lights": "2-1-3", + "NextSignal": "D4", + "Switches": "" + } + ], + "Left": false + }, + "304": + { + "LensesStr": "YRW", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2, + "Name": "D4", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[13137.6953 2519.3586 -12174.5059]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "1", + "Lights": "2-1-3", + "NextSignal": "D6", + "Switches": "" + } + ], + "Left": false + }, + "305": + { + "LensesStr": "YRW", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2, + "Name": "D6", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[13137.6943 7730.1973 -12174.5059]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "2-1-3", + "NextSignal": "D8", + "Switches": "" + } + ], + "Left": false + }, + "306": + { + "LensesStr": "YRW", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2, + "Name": "D8", + "ARSOnly": false, + "Angles": "{3.4899 220.0733 0}", + "Pos": "[12277.7363 13519.4512 -12174.5049]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "2-1-3", + "NextSignal": "D10", + "Switches": "" + } + ], + "Left": false + }, + "307": + { + "LensesStr": "YRW", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2, + "Name": "D10", + "ARSOnly": false, + "Angles": "{2.0401 283.1313 0}", + "Pos": "[5690.7378 14591.3682 -12174.4883]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "2-1-3", + "NextSignal": "D12", + "Switches": "" + } + ], + "Left": false + }, + "308": + { + "LensesStr": "YRW", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2, + "Name": "D12", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[2931.7939 9131.3945 -12174.5059]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "2-1-3", + "NextSignal": "D14", + "Switches": "" + } + ], + "Left": false + }, + "309": + { + "LensesStr": "YRW", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "D14", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[2547.7939 4039.314 -12174.7061]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "2-1-3", + "NextSignal": "D16", + "Switches": "" + } + ], + "Left": false + }, + "310": + { + "LensesStr": "YRW", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "D16", + "ARSOnly": false, + "Angles": "{4.0541 62.1004 0}", + "Pos": "[4330.4121 -1024.866 -12133.877]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "2-1-3", + "NextSignal": "D18", + "Switches": "" + } + ], + "Left": false + }, + "311": + { + "LensesStr": "YRW", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "D18", + "ARSOnly": false, + "Angles": "{0.7602 93.5498 0}", + "Pos": "[9689.8809 -1499.3484 -11662.4961]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "2-1-3", + "NextSignal": "D20", + "Switches": "" + } + ], + "Left": false + }, + "312": + { + "LensesStr": "YRW", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "D20", + "ARSOnly": false, + "Angles": "{0.6012 178.0787 0}", + "Pos": "[13297.335 2399.2031 -11429.4229]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "2-1-3", + "NextSignal": "D22", + "Switches": "" + } + ], + "Left": false + }, + "313": + { + "LensesStr": "YRW", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "D22", + "ARSOnly": false, + "Angles": "{1.2264 185.9317 0}", + "Pos": "[13264.2256 7936.9067 -11150.4951]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "2-1-3", + "NextSignal": "D24", + "Switches": "" + } + ], + "Left": false + }, + "314": + { + "LensesStr": "YRW", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "D24", + "ARSOnly": false, + "Angles": "{0.6012 268.0787 0}", + "Pos": "[9392.5332 11284.1494 -10918.1279]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "2-1-3", + "NextSignal": "D26", + "ARSCodes": "04" + } + ], + "Left": false + }, + "315": + { + "LensesStr": "YRW", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 2, + "Name": "D26", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[4855.1333 11287.207 -10638.5059]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "2-1-3", + "NextSignal": "MN2", + "Switches": "" + } + ], + "Left": false + }, + "316": + { + "Approve0": true, + "RouteNumberSetup": "21W", + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MN1", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-440.7058 11023.0938 -10638.5059]", + "Routes": + [ + + { + "NextSignal": "MN80", + "ARSCodes": "004", + "Repeater": false, + "EnRou": true, + "Lights": "1-1-2", + "Manual": false, + "RouteName": "MN3-2", + "Switches": "22/1-,22/5-,2574-" + }, + + { + "NextSignal": "951", + "ARSCodes": "004", + "Manual": false, + "EnRou": true, + "Lights": "1-1-2", + "Repeater": false, + "RouteName": "MN3-1", + "Switches": "22/1+,22/5+,12088-" + } + ], + "Left": false + }, + "317": + { + "LensesStr": "RW", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MN80R1", + "ARSOnly": true, + "Angles": "{-0 -90 0}", + "Pos": "[-6061.3472 11593.0137 -10654.4688]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "MN80", + "Switches": "2574-" + } + ], + "Left": true + }, + "318": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "84", + "Angles": "{357.3599 77.4682 0}", + "Pos": "[3257.7117 -3729.7698 -10638.4834]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "86", + "Switches": "" + } + ] + }, + "319": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "86", + "Angles": "{0 45 0}", + "Pos": "[8358.0986 -7944.0801 -10638.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "88", + "Switches": "" + } + ] + }, + "320": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "88", + "Angles": "{356.685 326.2718 0}", + "Pos": "[8830.7207 -13626.6797 -10638.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "90", + "Switches": "" + } + ] + }, + "321": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "90", + "Angles": "{0 270 0}", + "Pos": "[3643.5283 -15171.0137 -10638.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "92", + "Switches": "" + } + ] + }, + "322": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "92", + "Angles": "{0 270 0}", + "Pos": "[-3977.967 -15171.0137 -10638.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "94", + "Switches": "" + } + ] + }, + "323": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "94", + "Angles": "{357.2472 250.8125 0}", + "Pos": "[-10606.916 -14631.9346 -10638.5029]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "96", + "Switches": "" + } + ] + }, + "324": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "96", + "Angles": "{357.1125 201.2127 0}", + "Pos": "[-14513.4492 -10870.9512 -10638.502]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "98", + "Switches": "" + } + ] + }, + "325": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "98", + "Angles": "{0 180 0}", + "Pos": "[-15136.0137 -4039.5271 -10638.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "100", + "Switches": "" + } + ] + }, + "326": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "100", + "Angles": "{0.0001 180 0}", + "Pos": "[-15135.9863 2817.8838 -10496.3252]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "102", + "Switches": "" + } + ] + }, + "327": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "102", + "Angles": "{357.3929 162.7636 0}", + "Pos": "[-14668.5293 9772.4902 -10126.5039]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "104", + "Switches": "" + } + ] + }, + "328": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "104", + "Angles": "{357.1125 111.2127 0}", + "Pos": "[-10822.0684 13904.4521 -10126.501]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "106", + "Switches": "" + } + ] + }, + "329": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "106", + "Angles": "{0 90 0}", + "Pos": "[-3710.95 14522.0137 -10126.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "108", + "Switches": "" + } + ] + }, + "330": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "108", + "Angles": "{0 90 0}", + "Pos": "[3499.8225 14522.0127 -10126.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "110", + "Switches": "" + } + ] + }, + "331": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "110", + "Angles": "{357.1122 68.7655 0}", + "Pos": "[10399.2637 13844.5381 -10126.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "112", + "Switches": "" + } + ] + }, + "332": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "112", + "Angles": "{357.3933 17.2128 0}", + "Pos": "[14088.626 9781.9697 -10126.502]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "114", + "Switches": "" + } + ] + }, + "333": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "114", + "Angles": "{0 0 0}", + "Pos": "[14559.0137 2803.0474 -10126.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "116", + "Switches": "" + } + ] + }, + "334": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "116", + "Angles": "{0 0 0}", + "Pos": "[14559.0137 -4251.6528 -10126.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "118", + "Switches": "" + } + ] + }, + "335": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "118", + "Angles": "{356.6955 329.5748 0}", + "Pos": "[13487.2383 -10809.8389 -10126.5039]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "120", + "Switches": "" + } + ] + }, + "336": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "120", + "Angles": "{358.0716 281.9478 0}", + "Pos": "[9078.3027 -13877.0117 -10126.502]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "LN122", + "Switches": "" + } + ] + }, + "337": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "LN122", + "Angles": "{0 270 0}", + "Pos": "[-631.5718 -14149.2109 -10126.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-21-1-13-3", + "NextSignal": "LN124", + "Switches": "2880+" + } + ] + }, + "338": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "LN124", + "Angles": "{0 225 0}", + "Pos": "[-6731.9609 -12312.9844 -10126.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-1-13", + "NextSignal": "LN126", + "Switches": "2880+" + }, + + { + "Manual": false, + "Repeater": false, + "ARSCodes": "04", + "Lights": "2-1-13", + "NextSignal": "LN126", + "Switches": "2880-" + } + ] + }, + "339": + { + "Approve0": true, + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "LN126", + "Angles": "{0 225 0}", + "Pos": "[-10741.7158 -8303.2285 -10126.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "132", + "Switches": "" + } + ] + }, + "340": + { + "LensesStr": "RW", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "LN124R", + "ARSOnly": true, + "Angles": "{-0 -90 0}", + "Pos": "[-1753.3367 -14190.8789 -10126.5059]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "LN124", + "Switches": "2880-" + } + ], + "Left": true + }, + "341": + { + "LensesStr": "RW", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "LN297R", + "ARSOnly": true, + "Angles": "{-0 90 0}", + "Pos": "[1182.3624 -15113.2666 -10126.5059]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "Switches": "2880-", + "Lights": "", + "NextSignal": "297", + "ARSCodes": "04" + } + ], + "Left": true + }, + "342": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "LNOG2", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[-234.2782 -14149.207 -10126.5059]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "Switches": "11774-", + "Lights": "1", + "NextSignal": "LN297R", + "ARSCodes": "04" + } + ] + }, + "343": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "LND", + "Angles": "{0 45 0}", + "Pos": "[-6955.627 -12089.3174 -10126.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "297", + "Switches": "11774-,2880-" + } + ] + }, + "344": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "132", + "Angles": "{0 180 0}", + "Pos": "[-13157.9863 -544.7238 -10126.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "134", + "Switches": "" + } + ] + }, + "345": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "134", + "Angles": "{357.5489 107.3857 0}", + "Pos": "[-10747.668 3529.1653 -10126.498]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "136", + "Switches": "" + } + ] + }, + "346": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "136", + "Angles": "{359.7647 89.5035 0}", + "Pos": "[-3712.7168 3749.9985 -9614.5039]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "138", + "Switches": "" + } + ] + }, + "347": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "138", + "Angles": "{356.5071 49.094 0}", + "Pos": "[1883.5902 1995.4857 -9614.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "140", + "Switches": "" + } + ] + }, + "348": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "140", + "Angles": "{359.309 3.6918 0}", + "Pos": "[4215.9473 -3457.2898 -9614.499]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "142", + "Switches": "" + } + ] + }, + "349": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "142", + "Angles": "{356.6256 327.0518 0}", + "Pos": "[2942.0408 -9672.5547 -9614.5049]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "144", + "Switches": "" + } + ] + }, + "350": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "144", + "Angles": "{358.6627 277.4815 0}", + "Pos": "[-2171.9985 -12522.3604 -9614.499]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "146", + "Switches": "" + } + ] + }, + "351": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "146", + "Angles": "{356.7798 242.0142 0}", + "Pos": "[-8725.8613 -11598.2764 -9614.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "148", + "Switches": "" + } + ] + }, + "352": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "148", + "Angles": "{358.0716 191.9478 0}", + "Pos": "[-11897.4727 -6987.5967 -9614.498]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "150", + "Switches": "" + } + ] + }, + "353": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "150", + "Angles": "{0 180 0}", + "Pos": "[-12135.0127 137.1174 -9115.1689]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "152", + "Switches": "" + } + ] + }, + "354": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "152", + "Angles": "{357.1908 160.1984 0}", + "Pos": "[-11828.6504 6708.501 -8603.7949]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "154", + "Switches": "" + } + ] + }, + "355": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "154", + "Angles": "{0 90 0}", + "Pos": "[-6938.5117 8871.793 -8603.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-1-12", + "NextSignal": "156", + "Switches": "" + } + ] + }, + "356": + { + "Approve0": true, + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "156", + "Angles": "{0 90 0}", + "Pos": "[-1128.2266 8871.793 -8603.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "158", + "Switches": "" + } + ] + }, + "357": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "158", + "Angles": "{357.2472 70.8125 0}", + "Pos": "[7932.2993 8324.499 -8603.5029]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "160", + "Switches": "" + } + ] + }, + "358": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "160", + "Angles": "{358.2617 10.3786 0}", + "Pos": "[12262.4766 2912.4375 -8603.4971]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "162", + "Switches": "" + } + ] + }, + "359": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "162", + "Angles": "{0 0 0}", + "Pos": "[12440.0137 -4533.0239 -8021.748]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "164", + "Switches": "" + } + ] + }, + "360": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "164", + "Angles": "{356.6011 326.2715 0}", + "Pos": "[11766.3311 -11149.7764 -7592.5054]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "166", + "Switches": "" + } + ] + }, + "361": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "166", + "Angles": "{0 270 0}", + "Pos": "[6529.4858 -12599.0137 -7592.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "168", + "Switches": "" + } + ] + }, + "362": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "168", + "Angles": "{0 270 0}", + "Pos": "[-836.223 -12599.2129 -7592.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "170", + "Switches": "21158+" + } + ] + }, + "363": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "170", + "Angles": "{360 261.5656 0}", + "Pos": "[-7647.3472 -12516.4707 -7592.5054]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "172", + "Switches": "" + } + ] + }, + "364": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "172", + "Angles": "{356.8322 243.9616 0}", + "Pos": "[-14559.7227 -11917.3916 -7606.6104]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "174", + "Switches": "" + } + ] + }, + "365": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "174", + "Angles": "{0 180 0}", + "Pos": "[-15812.207 -5496.9834 -7592.1094]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "176", + "Switches": "" + } + ] + }, + "366": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "176", + "Angles": "{0 90 0}", + "Pos": "[-10931.1221 -2503.7939 -7592.1094]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "178", + "Switches": "" + } + ] + }, + "367": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "178", + "Angles": "{0 90 0}", + "Pos": "[-3824.5 -2503.7939 -7592.1094]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-1-12", + "NextSignal": "180", + "Switches": "" + } + ] + }, + "368": + { + "Approve0": true, + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "180", + "Angles": "{0 90 0}", + "Pos": "[2018.7762 -2503.7939 -7592.1094]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "182", + "Switches": "" + } + ] + }, + "369": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "239", + "Angles": "{0 270 0}", + "Pos": "[2011.6155 -2239.7939 -7592.1094]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-1-12", + "NextSignal": "241", + "Switches": "" + } + ] + }, + "370": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "182", + "Angles": "{0 135 0}", + "Pos": "[10529.1729 1573.1425 -7592.1094]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "184", + "Switches": "" + } + ] + }, + "371": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "184", + "Angles": "{2.921 161.5756 0}", + "Pos": "[15270.124 6940.5083 -7591.4956]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "186", + "Switches": "" + } + ] + }, + "372": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "186", + "Angles": "{0.9138 230.1424 0}", + "Pos": "[11865.7139 12930.29 -7079.4937]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "188", + "Switches": "" + } + ] + }, + "373": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "188", + "Angles": "{0 315 0}", + "Pos": "[5808.4028 10611.5371 -6845.6299]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "190", + "Switches": "" + } + ] + }, + "374": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "190", + "Angles": "{360 314.9999 0}", + "Pos": "[976.7668 5779.4756 -6040.9536]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "192", + "Switches": "" + } + ] + }, + "375": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "192", + "Angles": "{356.548 235.4398 0}", + "Pos": "[-4297.4531 5105.0913 -6030.3843]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "194", + "Switches": "" + } + ] + }, + "376": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "194", + "Angles": "{0 180 0}", + "Pos": "[-5372.0127 9749.249 -6029.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "196", + "Switches": "" + } + ] + }, + "377": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "196", + "Angles": "{2.4511 287.4243 0}", + "Pos": "[-11378.4863 13739.3672 -6029.5029]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "198", + "Switches": "" + } + ] + }, + "378": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "198", + "Angles": "{0 0 0}", + "Pos": "[-13680.9863 6754.5996 -5701.6187]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "200", + "Switches": "" + } + ] + }, + "379": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "200", + "Angles": "{0 0 0}", + "Pos": "[-13680.9863 -328.2243 -4893.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "202", + "Switches": "" + } + ] + }, + "380": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "202", + "Angles": "{0 0 0}", + "Pos": "[-13680.9863 -7382.5928 -4893.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "204", + "Switches": "" + } + ] + }, + "381": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "204", + "Angles": "{3.3045 59.5849 0}", + "Pos": "[-10377.6455 -14570.2139 -4893.5039]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "206", + "Switches": "" + } + ] + }, + "382": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "206", + "Angles": "{-0 90 0}", + "Pos": "[-3428.7822 -15663 -4893.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-1-12", + "NextSignal": "208", + "Switches": "" + } + ], + "Left": true + }, + "383": + { + "Approve0": true, + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "208", + "Angles": "{0 90 0}", + "Pos": "[2733.6868 -15663 -4893.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "210", + "Switches": "" + } + ] + }, + "384": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "210", + "Angles": "{0 180 0}", + "Pos": "[8845.0137 -11451.873 -4893.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "212", + "Switches": "" + } + ] + }, + "385": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "212", + "Angles": "{0 180 0}", + "Pos": "[8844.9883 -4259.4351 -4893.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "214", + "Switches": "" + } + ] + }, + "386": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "214", + "Angles": "{0 180 0}", + "Pos": "[8844.9883 2861.8604 -4893.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "216", + "Switches": "" + } + ] + }, + "387": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "216", + "Angles": "{3.3985 213.7103 0}", + "Pos": "[8155.8931 10557.9678 -4893.5049]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "218", + "Switches": "" + } + ] + }, + "388": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "218", + "Angles": "{0 270 0}", + "Pos": "[235.1771 11983.0137 -4893.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "220", + "Switches": "" + } + ] + }, + "389": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "220", + "Angles": "{359.9999 270 0}", + "Pos": "[-6759.1313 11982.9131 -4789.1982]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "222", + "Switches": "" + } + ] + }, + "390": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "222", + "Angles": "{3.3985 303.7103 0}", + "Pos": "[-14241.5039 11335.5537 -4380.5034]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "224", + "Switches": "" + } + ] + }, + "391": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "224", + "Angles": "{1.9284 11.9704 0}", + "Pos": "[-15451.4824 3097.8792 -4380.5034]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "226", + "Switches": "" + } + ] + }, + "392": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "226", + "Angles": "{1.5416 82.5152 0}", + "Pos": "[-9463.7051 -2223.0696 -4380.5054]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "EL228", + "Switches": "" + } + ] + }, + "393": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "EL228", + "Angles": "{0 90 0}", + "Pos": "[-2162.7026 -2351.7939 -4380.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-21-1-13-3", + "NextSignal": "EL230", + "Switches": "21587+" + } + ] + }, + "394": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "EL230", + "Angles": "{0 90 0}", + "Pos": "[4170.1519 -2352.2061 -4380.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-1-13", + "NextSignal": "EL232", + "Switches": "21587+" + }, + + { + "Manual": false, + "Repeater": false, + "Switches": "21587-", + "Lights": "2-1-13", + "NextSignal": "EL232", + "ARSCodes": "04" + } + ] + }, + "395": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "ELD", + "Angles": "{0 270 0}", + "Pos": "[4679.3394 -2352.2061 -4380.5059]", + "Routes": + [ + + { + "Manual": false, + "Switches": "21587-,11059-", + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "193", + "RouteName": "EL2-1" + } + ] + }, + "396": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "ELOG", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[585.4387 -2351.9883 -4380.5059]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "1", + "NextSignal": "193", + "Switches": "21587-,11059-" + } + ] + }, + "397": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "238", + "Angles": "{2.2519 166.9129 0}", + "Pos": "[15870.9502 368.049 -4380.5005]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "240", + "Switches": "" + } + ] + }, + "398": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "240", + "Angles": "{0 180 0}", + "Pos": "[16011.9883 7886.7227 -4380.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "242", + "Switches": "" + } + ] + }, + "399": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "242", + "Angles": "{2.9642 247.7244 0}", + "Pos": "[13914.3086 15714.9521 -4380.502]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "244", + "Switches": "" + } + ] + }, + "400": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "244", + "Angles": "{359.9998 270 0}", + "Pos": "[6380.7622 16047.0127 -4257.3491]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "KM246", + "Switches": "" + } + ] + }, + "401": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "KM246", + "Angles": "{0 270 0}", + "Pos": "[-698.3274 16046.793 -3868.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-21-1-13-3", + "NextSignal": "KM248", + "Switches": "" + } + ] + }, + "402": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "KM248", + "Angles": "{0 270 0}", + "Pos": "[-7817.98 16046.9941 -3868.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "250", + "Switches": "21693+" + } + ] + }, + "403": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "B", + "Angles": "{0 94.2915 0}", + "Pos": "[-2742.5544 15381.2744 -3868.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "2-21-1-13-3", + "NextSignal": "L", + "Switches": "" + } + ] + }, + "404": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "KMG", + "Angles": "{0 270 0}", + "Pos": "[-5830.7314 15038.793 -3868.5056]", + "Routes": + [ + + { + "Manual": false, + "Switches": "1960-,21693-", + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "250", + "RouteName": "KM1-2" + } + ] + }, + "405": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "KMOG1", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-7510.9063 15039.5117 -3868.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "Switches": "1960-,21693-", + "Lights": "1", + "NextSignal": "250", + "ARSCodes": "1" + } + ] + }, + "406": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "KMOG2", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[-8440.9531 16046.9883 -3868.5056]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "1", + "Lights": "1", + "NextSignal": "PTOR", + "Switches": "21693-" + } + ] + }, + "407": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PTOR", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[-3743.0271 15039.2129 -3868.5056]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "1", + "Lights": "", + "NextSignal": "B", + "Switches": "1963-" + }, + + { + "Repeater": true, + "Manual": false, + "NextSignal": "KM167", + "Switches": "1963+" + } + ] + }, + "408": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PTOR2", + "ARSOnly": true, + "Angles": "{-0 90 0}", + "Pos": "[-6655.6309 15080.626 -3884.4688]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "1", + "Lights": "", + "NextSignal": "PTOR", + "Switches": "1960-" + } + ], + "Left": true + }, + "409": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "250", + "Angles": "{2.8092 340.2333 0}", + "Pos": "[-15454.4609 13797.8457 -3868.5012]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "252", + "Switches": "21693+" + }, + + { + "Manual": false, + "Repeater": false, + "Switches": "21693-", + "Lights": "3-31-1-12-2", + "NextSignal": "252", + "ARSCodes": "04" + } + ] + }, + "410": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "252", + "Angles": "{0 0 0}", + "Pos": "[-15729.9863 6419.0991 -3868.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "254", + "Switches": "" + } + ] + }, + "411": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "254", + "Angles": "{0 45 0}", + "Pos": "[-13577.4785 160.8943 -3868.4739]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-1-12", + "NextSignal": "256", + "Switches": "" + } + ] + }, + "412": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "KMD", + "Angles": "{0 90 0}", + "Pos": "[-10359.6084 16046.793 -3868.5056]", + "Routes": + [ + + { + "Manual": false, + "Switches": "21693-,1960-,1963+", + "ARSCodes": "04", + "Lights": "1-1-2", + "NextSignal": "PTOR", + "RouteName": "KM2-1" + }, + + { + "Manual": false, + "Switches": "21693-,1960-,1963-", + "ARSCodes": "04", + "Lights": "1-1-2", + "NextSignal": "PTOR", + "RouteName": "KM2-PTO" + } + ] + }, + "413": + { + "Approve0": true, + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "256", + "Angles": "{0 45 0}", + "Pos": "[-8819.3027 -4597.2813 -3868.4739]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "258", + "Switches": "" + } + ] + }, + "414": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "258", + "Angles": "{0 45 0}", + "Pos": "[-3392.7036 -11439.3145 -3868.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "260", + "Switches": "" + } + ] + }, + "415": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "260", + "Angles": "{3.501 88.6262 0}", + "Pos": "[3386.6792 -15463.8154 -3868.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "262", + "Switches": "" + } + ] + }, + "416": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "262", + "Angles": "{0 135 0}", + "Pos": "[10516.8105 -11378.1709 -3868.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "264", + "Switches": "" + } + ] + }, + "417": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "264", + "Angles": "{3.3744 192.0603 0}", + "Pos": "[13557.3594 -4211.9209 -3868.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "266", + "Switches": "" + } + ] + }, + "418": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "266", + "Angles": "{0 225.0001 0}", + "Pos": "[9176.4971 2053.7209 -3861.0806]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "268", + "Switches": "" + } + ] + }, + "419": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "268", + "Angles": "{0 225 0}", + "Pos": "[4190.4072 7040.5742 -3356.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "270", + "Switches": "" + } + ] + }, + "420": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "270", + "Angles": "{0 225 0}", + "Pos": "[-724.8599 11955.8418 -3356.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "272", + "Switches": "" + } + ] + }, + "421": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "272", + "Angles": "{0.2813 271.8298 0}", + "Pos": "[-6979.8345 15956.3945 -3356.498]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "VK274", + "Switches": "" + } + ] + }, + "422": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VK274", + "Angles": "{360 0 0}", + "Pos": "[-10872.1064 9585.2295 -3195.5569]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "VK276", + "Switches": "21898+" + } + ] + }, + "423": + { + "LensesStr": "YR-GW", + "RouteNumber": "2", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VK276", + "Angles": "{0 0 0}", + "Pos": "[-10871.207 2501.5891 -2844.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-1-13", + "NextSignal": "VK278", + "Switches": "" + } + ] + }, + "424": + { + "Approve0": true, + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "VK278", + "Angles": "{0 0 0}", + "Pos": "[-10871.207 -3145.4829 -2844.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-21-1-13-3", + "NextSignal": "290", + "Switches": "" + } + ] + }, + "425": + { + "LensesStr": "RW", + "RouteNumber": "4", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VK280", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[-10499.0938 9160.835 -2844.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "VK282", + "Switches": "" + } + ] + }, + "426": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VK282", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[-10499.0938 12984.0986 -2844.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "VK284", + "Switches": "" + } + ] + }, + "427": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VK284", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[-10498.793 14557.501 -2844.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "1", + "Lights": "1", + "NextSignal": "", + "Switches": "" + } + ] + }, + "428": + { + "LensesStr": "RW", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VKR2", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[-9863.5117 4611.5073 -2844.5056]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "1", + "NextSignal": "VK139", + "Switches": "1767+" + }, + + { + "Repeater": true, + "Manual": false, + "Switches": "1767-,52+,76+", + "Lights": "1", + "NextSignal": "VK127", + "ARSCodes": "04" + }, + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "VK280", + "Switches": "1767-,52-,76-" + } + ], + "Left": false + }, + "429": + { + "LensesStr": "YGR-YW-M", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VK127R2", + "ARSOnly": true, + "Angles": "{-0 -180 0}", + "Pos": "[-10292.0117 7948.2158 -2857.4688]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "VK127", + "Switches": "52-" + }, + + { + "Manual": false, + "Repeater": true, + "Switches": "52+", + "Lights": "", + "NextSignal": "VK280", + "ARSCodes": "04" + } + ], + "Left": true + }, + "430": + { + "LensesStr": "YGR-YW-M", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VK127R1", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[-10445.752 7996.0254 -2857.4688]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "VK127", + "Switches": "52+" + }, + + { + "Manual": false, + "Repeater": true, + "Switches": "52-", + "Lights": "", + "NextSignal": "VK280", + "ARSCodes": "04" + } + ], + "Left": false + }, + "431": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VK135R2", + "ARSOnly": true, + "Angles": "{360 0 0}", + "Pos": "[-10283.6553 6395.1826 -2857.4688]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "Switches": "76-", + "Lights": "", + "NextSignal": "VK135R", + "ARSCodes": "1" + } + ], + "Left": false + }, + "432": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VK276R2", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-10454.0879 6404.3018 -2857.4688]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "1", + "Lights": "", + "NextSignal": "VK276R1", + "Switches": "76-" + } + ], + "Left": true + }, + "433": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VK135R3", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-10235.5059 7249.7529 -2844.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "Switches": "5/2-", + "Lights": "", + "NextSignal": "VK276R1", + "ARSCodes": "1" + }, + + { + "Repeater": true, + "Manual": false, + "NextSignal": "VK135R", + "Switches": "5/2+" + } + ], + "Left": true + }, + "434": + { + "LensesStr": "RW", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VK135R", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-9876.1016 3610.0967 -2860.4688]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "Switches": "1767-", + "Lights": "", + "NextSignal": "VK135", + "ARSCodes": "04" + } + ] + }, + "435": + { + "LensesStr": "RW-M", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VKD", + "Angles": "{0 180 0}", + "Pos": "[-10871.207 2717.5571 -2844.5056]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "VK2-4", + "Switches": "21898-,52+,76+", + "Lights": "1-1-2", + "NextSignal": "VK280", + "ARSCodes": "04" + }, + + { + "Repeater": false, + "RouteName": "VK2-3", + "Manual": false, + "Lights": "1-1-2", + "NextSignal": "VK127", + "ARSCodes": "04", + "Switches": "21898-,52-,76-" + } + ] + }, + "436": + { + "LensesStr": "RW", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VKOG1", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[-10871.0879 4822.4702 -2844.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "Switches": "21898-,52+,76+", + "Lights": "1", + "NextSignal": "VK280", + "ARSCodes": "04" + }, + + { + "Repeater": true, + "Manual": false, + "Switches": "21898-,52-,76-", + "Lights": "1", + "NextSignal": "VK127", + "ARSCodes": "04" + } + ], + "Left": false + }, + "437": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "290", + "Angles": "{356.5001 31.4598 0}", + "Pos": "[-8104.8184 -9901.4854 -2844.5039]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "292", + "Switches": "" + } + ] + }, + "438": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "292", + "Angles": "{2.6381 83.8504 0}", + "Pos": "[-4059.5313 -16104.6924 -2844.4995]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "294", + "Switches": "" + } + ] + }, + "439": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "294", + "Angles": "{1.8163 181.9397 0}", + "Pos": "[2961.502 -11852.9678 -2844.5015]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "NV296", + "Switches": "" + } + ] + }, + "440": + { + "Approve0": true, + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "NV300", + "Angles": "{0 191.25 0}", + "Pos": "[441.0276 1247.014 -2844.5054]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-21-1-13-3", + "NextSignal": "NV302", + "Switches": "" + } + ] + }, + "441": + { + "LensesStr": "RW", + "RouteNumber": "9", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "NV300R", + "ARSOnly": true, + "Angles": "{0 11.25 0}", + "Pos": "[2051.3162 -6849.9741 -2844.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "Switches": "1708-,21971-", + "Lights": "", + "NextSignal": "117", + "ARSCodes": "04" + } + ] + }, + "442": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "NV302", + "Angles": "{359.9998 180.0001 0}", + "Pos": "[272.0125 8535.3887 -2594.8318]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-21-1-13-3", + "NextSignal": "304", + "Switches": "" + } + ] + }, + "443": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "304", + "Angles": "{356.4985 133.3393 0}", + "Pos": "[1363.8148 14279.0488 -2331.5054]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "306", + "Switches": "" + } + ] + }, + "444": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "306", + "Angles": "{356.5443 53.1281 0}", + "Pos": "[7072.814 14527.2109 -2331.5042]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "PM308", + "Switches": "" + } + ] + }, + "445": + { + "LensesStr": "YR-GW", + "RouteNumber": "2", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PM310", + "Angles": "{0 0 0}", + "Pos": "[8465 1829.5337 -2332.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "2-1-13", + "NextSignal": "PM312", + "Switches": "1620+,22038+" + }, + + { + "Repeater": false, + "Manual": false, + "Switches": "", + "Lights": "2-1-13", + "NextSignal": "PM312", + "ARSCodes": "04" + } + ] + }, + "446": + { + "Approve0": true, + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "PM312", + "Angles": "{0 0 0}", + "Pos": "[8465 -4093.708 -2332.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "2-21-1-13-3", + "NextSignal": "PM316", + "Switches": "" + } + ] + }, + "447": + { + "LensesStr": "RW-M", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PMD", + "Angles": "{0 180 0}", + "Pos": "[8465 2395.3391 -2332.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-1-2", + "NextSignal": "PM101", + "Switches": "22038+" + } + ] + }, + "448": + { + "LensesStr": "YGR", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "101R", + "ARSOnly": true, + "Angles": "{0 184.6505 0}", + "Pos": "[8478.2188 6218.1104 -2331.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "NextSignal": "PM101", + "Switches": "22038-" + } + ], + "Left": false + }, + "449": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "PTO7", + "Angles": "{360 0.7325 0}", + "Pos": "[1952.3032 10592.1494 -2331.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "PTO9", + "Switches": "" + } + ] + }, + "450": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "PTO2", + "Angles": "{0 191.25 0}", + "Pos": "[2646.6345 6537.5557 -2331.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "1", + "Lights": "1-2", + "NextSignal": "PTO4", + "Switches": "" + } + ] + }, + "451": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "PTO4", + "Angles": "{359.6867 179.3338 0}", + "Pos": "[1953.0206 11229.8379 -2331.5002]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "PTO6", + "Switches": "" + } + ] + }, + "452": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "PTO6", + "Angles": "{358.5257 98.6096 0}", + "Pos": "[4228.0908 14156.084 -2331.4968]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "PM8", + "Switches": "" + } + ] + }, + "453": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PM8", + "Angles": "{356.5547 35.9631 0}", + "Pos": "[7548.4766 13184.3477 -2331.5039]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "PM10", + "Switches": "" + } + ] + }, + "454": + { + "LensesStr": "WRW-M", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PM10", + "Angles": "{0 4.2916 0}", + "Pos": "[8121.1753 9817.1025 -2332.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "PTO-2", + "Lights": "2-2-1", + "NextSignal": "PM310", + "Switches": "22036-,22038+,1620+" + }, + + { + "Manual": false, + "ARSCodes": "04", + "Repeater": false, + "Lights": "2-2-1", + "NextSignal": "PM105", + "Switches": "22036-,22038-,1620-", + "RouteName": "PTO-1" + } + ] + }, + "455": + { + "Approve0": true, + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "PMOP", + "Angles": "{0 0 0}", + "Pos": "[9473 -3862.7507 -2332.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0", + "Lights": "1", + "NextSignal": "", + "Switches": "" + } + ] + }, + "456": + { + "LensesStr": "RW", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PM105", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[9473 -2585.522 -2332.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "PMOP", + "Switches": "" + } + ] + }, + "457": + { + "LensesStr": "RW-M", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PM310R", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[8465.2129 4932.5205 -2331.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "Switches": "22038+,1620+", + "Lights": "", + "NextSignal": "PM310", + "ARSCodes": "04" + }, + + { + "Manual": false, + "Repeater": true, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "PM105", + "Switches": "22038-,1620-" + } + ] + }, + "458": + { + "LensesStr": "RW-M", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PTO10R", + "ARSOnly": true, + "Angles": "{0 4.6505 0}", + "Pos": "[8457.6914 7889.9209 -2348.4688]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "Switches": "22036-,22038+,1620+", + "Lights": "", + "NextSignal": "PM310", + "ARSCodes": "04" + }, + + { + "Manual": false, + "Repeater": true, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "PM105", + "Switches": "22036-,22038-,1620-" + } + ] + }, + "459": + { + "LensesStr": "YR-GW-M", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PM308", + "Angles": "{0 0 0}", + "Pos": "[8464.7871 9492.3076 -2332.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "PM2-2", + "Lights": "2-21-1-13-3", + "NextSignal": "PM310", + "Switches": "22036+,22038+" + }, + + { + "Manual": false, + "ARSCodes": "04", + "Repeater": false, + "Lights": "2-21-4", + "NextSignal": "PM105", + "Switches": "22036+,22038-", + "RouteName": "PM2-1" + } + ] + }, + "460": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "PM316", + "Angles": "{356.499 316.3677 0}", + "Pos": "[6561.9839 -12766.8525 -2332.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "2-21-1-13-3", + "NextSignal": "318", + "Switches": "" + } + ] + }, + "461": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "318", + "Angles": "{359.5348 272.5592 0}", + "Pos": "[946.1979 -14951.9404 -2332.4993]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "320", + "Switches": "" + } + ] + }, + "462": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "320", + "Angles": "{0 270 0}", + "Pos": "[-5949.0283 -14967.0137 -1696.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "322", + "Switches": "" + } + ] + }, + "463": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "322", + "Angles": "{356.6256 237.0518 0}", + "Pos": "[-12071.1436 -13688.5225 -1696.505]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "324", + "Switches": "" + } + ] + }, + "464": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "324", + "Angles": "{358.8725 186.1498 0}", + "Pos": "[-14986.2549 -8360.3477 -1696.5018]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "326", + "Switches": "" + } + ] + }, + "465": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "326", + "Angles": "{360 180 0}", + "Pos": "[-15071.793 -1458.166 -1539.4974]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "328", + "Switches": "" + } + ] + }, + "466": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "328", + "Angles": "{0 180 0}", + "Pos": "[-15071.793 5431.0527 -696.5031]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "330", + "Switches": "" + } + ] + }, + "467": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "330", + "Angles": "{358.2497 171.2981 0}", + "Pos": "[-15030.5244 12368.9102 9.709]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "332", + "Switches": "" + } + ] + }, + "468": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "332", + "Angles": "{360 90 0}", + "Pos": "[-9640.1768 14520.2051 280.1769]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "334", + "Switches": "" + } + ] + }, + "469": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2, + "Name": "334", + "Angles": "{0 90 0}", + "Pos": "[-2628.5437 14520.2061 528.4944]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "336", + "Switches": "" + } + ] + }, + "470": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2, + "Name": "336", + "Angles": "{0 90 0}", + "Pos": "[4357.2266 14520.207 528.4944]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "338", + "Switches": "" + } + ] + }, + "471": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2, + "Name": "OK340", + "Angles": "{359.5695 359.4332 0}", + "Pos": "[15579.9072 10657.5908 -481.486]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "2-21-1-13-3", + "NextSignal": "OK342", + "Switches": "" + } + ] + }, + "472": + { + "Approve0": true, + "LensesStr": "WYR-GW-M", + "RouteNumber": "2", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 2, + "Name": "OK344", + "Angles": "{0 0 0}", + "Pos": "[14452 -2461.1228 -481.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "OK2-2", + "Lights": "3-32-2-42-4", + "NextSignal": "OK360", + "Switches": "22261+" + }, + + { + "Manual": false, + "ARSCodes": "04", + "Repeater": false, + "Lights": "3-1", + "NextSignal": "OK346", + "RouteName": "OK2-3", + "Switches": "22261-,14/5-,14/1-" + }, + + { + "Manual": false, + "ARSCodes": "04", + "Repeater": false, + "Lights": "3-1", + "NextSignal": "OK63", + "RouteName": "OK2-4", + "Switches": "22261-,14/5+,14/1+" + } + ] + }, + "473": + { + "LensesStr": "RW", + "RouteNumber": "3", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OK346", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[15088.0938 -10667.5352 -609.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-1-2", + "NextSignal": "OK348", + "Switches": "" + } + ] + }, + "474": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OK350", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[15087.8926 -15366.3037 -609.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "1", + "Lights": "1", + "NextSignal": "", + "Switches": "" + } + ] + }, + "475": + { + "LensesStr": "RW-M", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OK1", + "Angles": "{0 180 0}", + "Pos": "[15088.0938 -11111.3584 -609.5056]", + "Routes": + [ + + { + "Manual": false, + "Switches": "14/1+,14/5+,1400-", + "ARSCodes": "04", + "Lights": "1-1-2", + "NextSignal": "OK57", + "RouteName": "OK3-1" + }, + + { + "Repeater": false, + "ARSCodes": "04", + "Manual": false, + "Lights": "1-1-2", + "NextSignal": "OK356", + "Switches": "14/1-,14/5-,22261-", + "RouteName": "OK3-2" + } + ] + }, + "476": + { + "LensesStr": "RW", + "RouteNumber": "2", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OK356", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[14452 2223.8716 -481.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "OKOP", + "Switches": "" + } + ] + }, + "477": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OK57R1", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[15088.0938 -9177.9883 -609.5056]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "OK57", + "Switches": "14/1+,14/5+,1400-" + }, + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "OK356", + "Switches": "14/1-,14/5-,22261-" + } + ] + }, + "478": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OK63R1", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[14809.3516 -8767.9014 -619.4688]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "OK63", + "Switches": "14/1+,14/5+" + }, + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "OK346", + "Switches": "14/1-,14/5-" + } + ], + "Left": false + }, + "479": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OK346R1", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[15100.459 -8798.4746 -619.4688]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "OK63", + "Switches": "14/1-,14/5-" + }, + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "OK346", + "Switches": "14/1+,14/5+" + } + ], + "Left": true + }, + "480": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OK356R1", + "ARSOnly": true, + "Angles": "{-0 -180 0}", + "Pos": "[14824.5059 -9174.7363 -609.5056]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "OK57", + "Switches": "14/1-,14/5-,1400-" + }, + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "OK356", + "Switches": "14/1+,14/5+,22261-" + } + ], + "Left": true + }, + "481": + { + "LensesStr": "YGR-YW-M", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VK127R", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[-10220.7773 7610.7095 -2854.4688]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "VK127", + "Switches": "52+,76+" + }, + + { + "Manual": false, + "Repeater": true, + "Switches": "52-,76-", + "Lights": "", + "NextSignal": "VK280", + "ARSCodes": "04" + } + ] + }, + "482": + { + "LensesStr": "YGR-YW-M", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VK280R", + "ARSOnly": true, + "Angles": "{-0 -180 -0}", + "Pos": "[-10487.9648 7632.3086 -2854.4688]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "Switches": "52-,76-", + "Lights": "", + "NextSignal": "VK127", + "ARSCodes": "04" + }, + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "VK280", + "Switches": "52+,76+" + } + ], + "Left": true + }, + "483": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VK276R3", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-10499.0938 7185.5874 -2844.5056]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "1", + "Lights": "", + "NextSignal": "VK276R1", + "Switches": "5/2+" + }, + + { + "Repeater": true, + "Manual": false, + "NextSignal": "VK135R", + "Switches": "5/2-" + } + ], + "Left": false + }, + "484": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OK57R2", + "ARSOnly": true, + "Angles": "{-0 -180 0}", + "Pos": "[15085.4658 -8249.2588 -609.5056]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "OK57R", + "Switches": "14/5-" + } + ], + "Left": true + }, + "485": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OK356R2", + "ARSOnly": true, + "Angles": "{0 180.9353 0}", + "Pos": "[14825.6152 -8189.5244 -609.5056]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "OK356R", + "Switches": "14/5-" + } + ] + }, + "486": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OK63R2", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[14876.9746 -9757.3174 -622.4688]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "Switches": "14/1-", + "Lights": "", + "NextSignal": "OK63", + "ARSCodes": "04" + }, + + { + "Manual": false, + "Repeater": true, + "NextSignal": "OK346", + "Switches": "14/1+" + } + ], + "Left": true + }, + "487": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OK346R2", + "ARSOnly": true, + "Angles": "{0 4.6505 0}", + "Pos": "[15037.5254 -9799.0742 -622.4688]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "Switches": "14/1-", + "Lights": "", + "NextSignal": "OK346", + "ARSCodes": "04" + }, + + { + "Manual": false, + "Repeater": true, + "NextSignal": "OK63", + "Switches": "14/1+" + } + ], + "Left": false + }, + "488": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OK65", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[14824.0938 -14369.2148 -609.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "OK67", + "Switches": "" + } + ] + }, + "489": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OK348", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[15088.0938 -14357.7217 -609.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "OK350", + "Switches": "" + } + ] + }, + "490": + { + "LensesStr": "YR-GW", + "RouteNumber": "2", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "OK360", + "Angles": "{0 0 0}", + "Pos": "[14451.7949 -8547.2236 -481.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-21-1-13-3", + "NextSignal": "362", + "Switches": "" + } + ] + }, + "491": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "362", + "Angles": "{356.4417 288.8028 0}", + "Pos": "[12193.3926 -14121.7412 -197.7633]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "364", + "Switches": "" + } + ] + }, + "492": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "364", + "Angles": "{358.8685 188.5063 0}", + "Pos": "[6948.0796 -11508.9883 -88.118]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "366", + "Switches": "" + } + ] + }, + "493": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "366", + "Angles": "{0 135 0}", + "Pos": "[10655.2891 -5655.0029 -97.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "368", + "Switches": "" + } + ] + }, + "494": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "368", + "Angles": "{2.153 170.9244 0}", + "Pos": "[15544.54 259.1312 -92.8806]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "370", + "Switches": "" + } + ] + }, + "495": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "370", + "Angles": "{2.1119 196.3493 0}", + "Pos": "[15434.8018 8242.208 -71.4288]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "MK372", + "Switches": "" + } + ] + }, + "496": + { + "LensesStr": "YGR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "MK372", + "Angles": "{1.2593 307.5183 0}", + "Pos": "[9127.3672 9851.8135 -96.8383]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-1-12", + "NextSignal": "MK374", + "Switches": "" + } + ] + }, + "497": + { + "Approve0": true, + "LensesStr": "WY-RG-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 1, + "Name": "MK374", + "Angles": "{0.3584 318.4319 0}", + "Pos": "[4965.0049 5713.8296 -96.4928]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "MK2-2", + "Lights": "3-32-2-24-4", + "NextSignal": "376", + "Switches": "22376+,1280+" + }, + + { + "Manual": false, + "Repeater": false, + "RouteName": "MK2-1", + "Lights": "3-1", + "NextSignal": "MK374", + "Switches": "22376-,1280-" + } + ] + }, + "498": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "376", + "Angles": "{0 0 0}", + "Pos": "[4033.834 -6966.7886 -95.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "378", + "Switches": "" + } + ] + }, + "499": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "378", + "Angles": "{0 315 0}", + "Pos": "[1861.1008 -13049.8574 -95.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "380", + "Switches": "" + } + ] + }, + "500": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "380", + "Angles": "{0 270 0}", + "Pos": "[-4762.0923 -14719.6953 -95.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "382", + "Switches": "" + } + ] + }, + "501": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2, + "Name": "382", + "Angles": "{358.4167 262.3333 0}", + "Pos": "[-11828.9297 -14651.7607 -96.0168]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "384", + "Switches": "" + } + ] + }, + "502": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2, + "Name": "384", + "Angles": "{0 180 0}", + "Pos": "[-14935.207 -10165.2646 -96.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "386", + "Switches": "" + } + ] + }, + "503": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2, + "Name": "386", + "Angles": "{0 180 0}", + "Pos": "[-14935.2051 -3069.834 540.4944]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "388", + "Switches": "" + } + ] + }, + "504": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "388", + "Angles": "{0 180 0}", + "Pos": "[-14935.207 3841.6716 540.4944]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-1-12", + "NextSignal": "390", + "Switches": "" + } + ] + }, + "505": + { + "Approve0": true, + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "390", + "Angles": "{358.9642 176.3307 0}", + "Pos": "[-14921.9971 9863.5273 538.8015]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "392", + "Switches": "" + } + ] + }, + "506": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "392", + "Angles": "{357.8077 11.7798 0}", + "Pos": "[-9326.9307 10994.3057 -207.275]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "394", + "Switches": "" + } + ] + }, + "507": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "394", + "Angles": "{360 0 0}", + "Pos": "[-9173.793 4420.9595 -773.0541]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "396", + "Switches": "" + } + ] + }, + "508": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "396", + "Angles": "{360 359.9999 0}", + "Pos": "[-9173.7949 -2627.5908 -1632.7885]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "398", + "Switches": "" + } + ] + }, + "509": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "398", + "Angles": "{3.122 25.6323 0}", + "Pos": "[-8351.7393 -9825.5547 -1739.4814]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "400", + "Switches": "" + } + ] + }, + "510": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "400", + "Angles": "{0.4657 88.5127 0}", + "Pos": "[-1398.5631 -13644.8955 -1739.4803]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "402", + "Switches": "" + } + ] + }, + "511": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "402", + "Angles": "{0.4652 92.5872 0}", + "Pos": "[5771.7686 -13638.7461 -1739.4792]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "404", + "Switches": "" + } + ] + }, + "512": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "404", + "Angles": "{2.8878 158.7824 0}", + "Pos": "[12698.498 -9432.1504 -1739.484]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "406", + "Switches": "" + } + ] + }, + "513": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "406", + "Angles": "{1.5573 219.6168 0}", + "Pos": "[12517.5244 -1478.6449 -1739.4932]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "AV408", + "Switches": "" + } + ] + }, + "514": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "AU420", + "Angles": "{0 213.875 0}", + "Pos": "[8948.2109 -6052.2412 -13394.6055]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "2-1-13", + "NextSignal": "AU422", + "Switches": "" + } + ] + }, + "515": + { + "Approve0": true, + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "AU422", + "Angles": "{0 213.625 0}", + "Pos": "[5755.1943 -1294.1169 -13394.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "2-21-1-13-3", + "NextSignal": "424", + "Switches": "" + } + ] + }, + "516": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "AV1", + "Angles": "{0 45 0}", + "Pos": "[570.532 9065.2578 -1739.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "AV3", + "Switches": "132+" + } + ] + }, + "517": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "424", + "Angles": "{0 213.75 0}", + "Pos": "[1665.5188 4837.0269 -13394.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "426", + "Switches": "" + } + ] + }, + "518": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "426", + "Angles": "{0 258.625 0}", + "Pos": "[-2455.8091 7878.5415 -13393.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "428", + "Switches": "" + } + ] + }, + "519": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "428", + "Angles": "{3.3043 289.045 0}", + "Pos": "[-7575.7393 7734.2007 -13393.5039]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "430", + "Switches": "" + } + ] + }, + "520": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "430", + "Angles": "{1.5416 341.1404 0}", + "Pos": "[-11657.4521 3154.7092 -13393.5]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "432", + "Switches": "" + } + ] + }, + "521": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "432", + "Angles": "{0.2348 350.1386 0}", + "Pos": "[-13196.5352 -3992.6631 -13393.5]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "434", + "Switches": "" + } + ] + }, + "522": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "434", + "Angles": "{3.3045 48.21 0}", + "Pos": "[-11257.7705 -11181.5752 -13393.5039]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "436", + "Switches": "" + } + ] + }, + "523": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "436", + "Angles": "{0.0001 78.3751 0}", + "Pos": "[-4080.6753 -13738.8389 -13663.5947]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "438", + "Switches": "" + } + ] + }, + "524": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "438", + "Angles": "{1.7383 89.0272 0}", + "Pos": "[3575.6877 -15102.0498 -13905.498]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "440", + "Switches": "" + } + ] + }, + "525": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "440", + "Angles": "{1.5416 161.1402 0}", + "Pos": "[10464.4902 -10248.1367 -13905.5039]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "442", + "Switches": "" + } + ] + }, + "526": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "442", + "Angles": "{0 157.5 0}", + "Pos": "[12170.1465 -3561.261 -13905.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "444", + "Switches": "" + } + ] + }, + "527": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "444", + "Angles": "{3.2202 219.5264 0}", + "Pos": "[11721.7568 4798.688 -13905.5029]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "446", + "Switches": "" + } + ] + }, + "528": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "446", + "Angles": "{0 247.2499 0}", + "Pos": "[4863.9136 8645.416 -14000.4883]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "448", + "Switches": "" + } + ] + }, + "529": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "448", + "Angles": "{0.691 251.2191 0}", + "Pos": "[-1595.8467 11303.3223 -14417.499]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "450", + "Switches": "" + } + ] + }, + "530": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "450", + "Angles": "{3.0112 314.1282 0}", + "Pos": "[-9037.8408 10127.9551 -14417.5049]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "452", + "Switches": "" + } + ] + }, + "531": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "452", + "Angles": "{359.9998 337.25 0}", + "Pos": "[-12731.8105 3210.4199 -14551.499]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "454", + "Switches": "" + } + ] + }, + "532": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "454", + "Angles": "{3.4554 14.6033 0}", + "Pos": "[-14849.2012 -3912.7024 -14929.5039]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "456", + "Switches": "" + } + ] + }, + "533": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "456", + "Angles": "{0 67.75 0}", + "Pos": "[-7970.5283 -8137.6719 -14929.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "458", + "Switches": "" + } + ] + }, + "534": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "458", + "Angles": "{0 78.875 0}", + "Pos": "[-1550.7725 -10190.0518 -14929.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-1-12", + "NextSignal": "460", + "Switches": "" + } + ] + }, + "535": + { + "Approve0": true, + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "460", + "Angles": "{0 78.875 0}", + "Pos": "[5557.729 -11588.083 -14929.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "462", + "Switches": "" + } + ] + }, + "536": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "462", + "Angles": "{0 168.875 0}", + "Pos": "[13197.6855 -5665.041 -14929.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "464", + "Switches": "" + } + ] + }, + "537": + { + "LensesStr": "YR-GW-M", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "464", + "Angles": "{0 168.855 0}", + "Pos": "[14580.998 1378.4141 -14929.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-21-1-13-3", + "NextSignal": "466", + "Switches": "" + } + ] + }, + "538": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "466", + "Angles": "{0.0003 169.4707 0}", + "Pos": "[16012.5986 8651.5635 -14929.498]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "468", + "Switches": "" + } + ] + }, + "539": + { + "RouteNumberSetup": "43W1D", + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MN339", + "Angles": "{359.9997 90.5375 0}", + "Pos": "[-7236.5234 10650.4541 -10638.498]", + "Routes": + [ + + { + "Manual": false, + "Switches": "12088+", + "ARSCodes": "046", + "Lights": "2-21-1-13-3", + "NextSignal": "341", + "RouteName": "MN1-1" + }, + + { + "NextSignal": "D1", + "ARSCodes": "04", + "Repeater": false, + "EnRou": true, + "Lights": "2-2-4", + "Manual": false, + "RouteName": "MN1-3", + "Switches": "12088-,22/5+,22/1+" + }, + + { + "NextSignal": "D2", + "ARSCodes": "04", + "Repeater": false, + "EnRou": true, + "Lights": "2-2-4", + "Manual": false, + "RouteName": "MN1-4", + "Switches": "12088-,22/5-,22/1-" + } + ] + }, + "540": + { + "LensesStr": "YGR", + "RouteNumber": "D", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "425", + "Angles": "{0 78.875 0}", + "Pos": "[9934.7549 12573.1006 -14757.6123]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "427", + "Switches": "" + } + ] + }, + "541": + { + "LensesStr": "RW-M", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MN2R", + "ARSOnly": true, + "Angles": "{-0 -90 0}", + "Pos": "[-2702.0789 11023.5059 -10638.5059]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "004", + "Lights": "1-1-2", + "NextSignal": "MN80", + "Switches": "22/1-,22/5-,2574-" + }, + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "004", + "Lights": "1-1-2", + "NextSignal": "951", + "Switches": "22/1+,22/5+,12088-" + } + ], + "Left": true + }, + "542": + { + "LensesStr": "RW", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MJ OG", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[15399.207 4565.0967 -16192.5059]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "Switches": "12621-", + "Lights": "1", + "NextSignal": "MJ2", + "ARSCodes": "04" + } + ] + }, + "543": + { + "LensesStr": "RW", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OG2", + "ARSOnly": true, + "Angles": "{3.682 11.0283 0}", + "Pos": "[4225.7534 468.231 -96.4858]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "", + "NextSignal": "", + "ARSCodes": "" + } + ], + "Left": false + }, + "544": + { + "LensesStr": "RW", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OG1", + "ARSOnly": true, + "Angles": "{1.7944 188.309 0}", + "Pos": "[4099.8931 1193.1216 -111.8698]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "", + "NextSignal": "", + "ARSCodes": "1" + } + ], + "Left": false + }, + "545": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "OG99", + "Angles": "{0 248.3804 0}", + "Pos": "[-4699.7896 -12994.2861 -7592.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "", + "Lights": "3", + "NextSignal": "", + "Switches": "" + } + ] + }, + "546": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "OG98", + "Angles": "{0 68.3805 0}", + "Pos": "[-4060.2424 -13271.0352 -7592.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "", + "Lights": "3", + "NextSignal": "", + "Switches": "" + } + ] + }, + "547": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "76", + "Angles": "{0 270 0}", + "Pos": "[412.5522 11658.7949 -10638.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "3-31-1-12-2", + "NextSignal": "78", + "Switches": "" + } + ] + }, + "548": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "AV2", + "Angles": "{0 45 0}", + "Pos": "[-888.1344 11949.1523 -1739.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-1-2", + "NextSignal": "AV3", + "Switches": "22642-,132-" + } + ] + }, + "549": + { + "LensesStr": "YGR-YW-M", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "371R", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[6414.4688 13689.793 -14417.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Repeater": true, + "Lights": "3-31-1-12-2", + "NextSignal": "TV371", + "Switches": "12301+", + "RouteName": "TV-MJ" + }, + + { + "Manual": false, + "ARSCodes": "04", + "Repeater": true, + "Lights": "3-23-14-1b4", + "NextSignal": "425", + "Switches": "12301-", + "RouteName": "TV-AU" + } + ] + }, + "550": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "AUOG", + "ARSOnly": true, + "Angles": "{0 213.875 0}", + "Pos": "[9232.3486 -6001.8398 -13394.6055]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "1", + "NextSignal": "AU420", + "Switches": "" + } + ] + }, + "551": + { + "LensesStr": "YGR", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "TV50R", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[2895.7485 14710.959 -14433.4688]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "Switches": "", + "Lights": "", + "NextSignal": "TV50", + "ARSCodes": "04" + } + ] + }, + "552": + { + "Approve0": true, + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "265", + "Angles": "{0 270 0}", + "Pos": "[-6669.1216 9880.207 -8603.5059]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "Lights": "3-31-1-12-2", + "NextSignal": "267", + "ARSCodes": "046" + } + ] + }, + "553": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "83", + "Angles": "{360 0 0}", + "Pos": "[-15519.7939 5451.0986 -694.131]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Lights": "3-31-1-12-2", + "NextSignal": "85", + "Switches": "" + } + ] + }, + "554": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "468", + "Angles": "{360 258.8749 0}", + "Pos": "[11232.7354 13674.0732 -14918.1182]", + "Routes": + [ + + { + "Manual": false, + "Switches": "2345-", + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "TV48", + "RouteName": "AU-TSVO" + } + ] + }, + "555": + { + "LensesStr": "RW", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OK57R", + "ARSOnly": true, + "Angles": "{-0 -180 0}", + "Pos": "[15417.3193 -3408.4597 -497.4688]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "OK57", + "Switches": "1400-" + } + ], + "Left": true + }, + "556": + { + "LensesStr": "RW", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "OK356R", + "ARSOnly": true, + "Angles": "{0 184.6505 0}", + "Pos": "[14503.0156 -3346.3689 -497.4688]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "Switches": "22261-", + "Lights": "", + "NextSignal": "OK356", + "ARSCodes": "04" + } + ] + }, + "557": + { + "LensesStr": "RW-M", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PM103R", + "ARSOnly": true, + "Angles": "{360 13.5978 0}", + "Pos": "[9367.0908 3349.5127 -2331.5056]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "Switches": "1620-", + "Lights": "", + "NextSignal": "PM105", + "ARSCodes": "04" + } + ], + "Left": false + }, + "558": + { + "LensesStr": "YGR", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "117R", + "ARSOnly": true, + "Angles": "{-0 11.25 -0}", + "Pos": "[1520.4755 -8994.7295 -2860.4688]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "ARSCodes": "", + "Lights": "", + "NextSignal": "117", + "Switches": "1708-" + } + ], + "Left": true + }, + "559": + { + "LensesStr": "YGR", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "NV296R", + "ARSOnly": true, + "Angles": "{-0 -168.75 -0}", + "Pos": "[1767.5795 -5940.582 -2860.4688]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "Switches": "21971-", + "Lights": "", + "NextSignal": "NV296", + "ARSCodes": "046" + } + ], + "Left": true + }, + "560": + { + "LensesStr": "RW", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VK276R1", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-10820.209 3430.6245 -2860.4688]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "1", + "Lights": "", + "NextSignal": "VK276", + "Switches": "21898-" + } + ], + "Left": true + }, + "561": + { + "LensesStr": "RW", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "250R", + "ARSOnly": true, + "Angles": "{-0 -90 -0}", + "Pos": "[-9652.7695 15980.4023 -3884.4688]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "Switches": "21693-", + "Lights": "", + "NextSignal": "250", + "ARSCodes": "1" + } + ], + "Left": true + }, + "562": + { + "LensesStr": "RW", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "EL230R", + "ARSOnly": true, + "Angles": "{-0 76.4034 0}", + "Pos": "[1240.2708 -2236.9023 -4380.5059]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "EL230", + "Switches": "21587-" + } + ], + "Left": true + }, + "563": + { + "LensesStr": "RW", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "193R", + "ARSOnly": true, + "Angles": "{-0 -103.5966 0}", + "Pos": "[-1017.4688 -1445.4823 -4380.5059]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "1", + "NextSignal": "193", + "Switches": "11059-" + } + ], + "Left": true + }, + "564": + { + "LensesStr": "YR-GW-M", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MN339R5", + "ARSOnly": true, + "Angles": "{-0 96.57 0}", + "Pos": "[-4610.8633 10977.3486 -10638.5059]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "MN1-1", + "Repeater": true, + "Lights": "2-21-1-13-3", + "NextSignal": "341", + "ARSCodes": "046", + "Switches": "12088+" + }, + + { + "Repeater": true, + "Switches": "12088-,22/5+,22/1+", + "Manual": false, + "Lights": "2-2-4", + "NextSignal": "D1", + "RouteName": "MN1-D1", + "ARSCodes": "04" + }, + + { + "Repeater": false, + "ARSCodes": "04", + "Manual": false, + "Lights": "2-2-4", + "NextSignal": "D2", + "RouteName": "MN1-D2", + "Switches": "12088-,22/5-,22/1-" + } + ], + "Left": true + }, + "565": + { + "LensesStr": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 2, + "Name": "OK344R", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[14452.2129 -4101.5972 -481.5056]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "046", + "Lights": "", + "NextSignal": "OK360", + "Switches": "22261+" + }, + + { + "Manual": false, + "Repeater": true, + "Switches": "22261-,14/5-,14/1-", + "Lights": "", + "NextSignal": "OK346", + "ARSCodes": "04" + }, + + { + "Manual": false, + "Repeater": true, + "Switches": "22261-,14/5+,14/1+", + "Lights": "", + "NextSignal": "OK63", + "ARSCodes": "04" + } + ] + }, + "566": + { + "LensesStr": "RR", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 2, + "Name": "OKDOP", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[14451.793 -5230.0249 -481.5056]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "", + "Lights": "", + "NextSignal": "", + "Switches": "22261+" + }, + + { + "Manual": false, + "Repeater": false, + "Switches": "22261-", + "Lights": "1b", + "NextSignal": "", + "ARSCodes": "0" + } + ], + "Left": false + }, + "567": + { + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PMDOP", + "Angles": "{0 0 0}", + "Pos": "[9472.7871 4422.6665 -2331.5056]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "1620+", + "Lights": "", + "NextSignal": "", + "ARSCodes": "" + }, + + { + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "1b", + "NextSignal": "", + "ARSCodes": "", + "Switches": "1620-" + } + ] + }, + "568": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PM97", + "Angles": "{0 180 0}", + "Pos": "[9473 -4468.1064 -2332.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "2-1-13", + "NextSignal": "PM99", + "Switches": "1620+,22038+" + }, + + { + "Repeater": false, + "Manual": false, + "Switches": "1620-,22038-", + "Lights": "2-2-1-13", + "NextSignal": "PM99", + "ARSCodes": "0046" + } + ] + }, + "569": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "NV115", + "Angles": "{0 11.25 0}", + "Pos": "[1189.6628 -7682.8003 -2844.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-21-1-13-3", + "NextSignal": "117", + "Switches": "1708+" + } + ] + }, + "570": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "NV296", + "Angles": "{0 191.25 0}", + "Pos": "[2124.4736 -7217.7612 -2844.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-21-1-13-3", + "NextSignal": "NV298", + "Switches": "21971+" + } + ] + }, + "571": + { + "LensesStr": "RR", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VKDOP", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[-9863.0938 5621.9141 -2844.5056]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "", + "Lights": "", + "NextSignal": "", + "Switches": "1767+" + }, + + { + "Manual": false, + "Repeater": false, + "Switches": "1767-", + "Lights": "1b", + "NextSignal": "", + "ARSCodes": "0" + } + ], + "Left": false + }, + "572": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "L", + "Angles": "{0 90 0}", + "Pos": "[7544.9478 15410.793 -4879.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0", + "Lights": "2-21-1-13-3", + "NextSignal": "", + "Switches": "" + } + ] + }, + "573": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "A", + "Angles": "{0 271.9071 0}", + "Pos": "[-2342.1582 15402.873 -3868.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "004", + "Switches": "1963-", + "Lights": "1-1-2", + "NextSignal": "KMG", + "RouteName": "" + } + ] + }, + "574": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "AREP", + "ARSOnly": true, + "Angles": "{0 276.4902 0}", + "Pos": "[-4537.7656 15094.2324 -3884.4688]", + "Routes": + [ + + { + "Repeater": true, + "ARSCodes": "04", + "Manual": false, + "Lights": "1-2", + "NextSignal": "KMG", + "RouteName": "", + "Switches": "" + } + ] + }, + "575": + { + "Approve0": true, + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "EL232", + "Angles": "{0 90 0}", + "Pos": "[10043.3662 -2352.2061 -4380.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-21-1-13-3", + "NextSignal": "238", + "Switches": "" + } + ] + }, + "576": + { + "LensesStr": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MN4", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[4140.2437 11287.0938 -10638.5059]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "MN6", + "Switches": "" + } + ], + "Left": false + }, + "577": + { + "RouteNumberSetup": "342", + "LensesStr": "WRW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MND", + "Angles": "{0 225 0}", + "Pos": "[-9285.6699 2107.918 -10637.5059]", + "Routes": + [ + + { + "NextSignal": "D2", + "ARSCodes": "04", + "Manual": false, + "EnRou": true, + "Lights": "2-2-1", + "Repeater": false, + "Switches": "2574-,22/5+,22/1+", + "RouteName": "MN2-4" + }, + + { + "NextSignal": "D1", + "ARSCodes": "04", + "Manual": false, + "EnRou": true, + "Lights": "2-2-1", + "Repeater": false, + "Switches": "2574-,22/5-,22/1-", + "RouteName": "MN2-3" + } + ] + }, + "578": + { + "LensesStr": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MN3", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[4116.7119 11023.0938 -10638.5059]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "D", + "Switches": "" + } + ], + "Left": false + }, + "579": + { + "LensesStr": "RW-M", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MNDR", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[-4807.4985 11659.0879 -10638.5059]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Repeater": true, + "Lights": "1-1-2", + "NextSignal": "D2", + "ARSCodes": "04", + "Switches": "2574-,22/5+,22/1+" + }, + + { + "Manual": false, + "RouteName": "", + "Repeater": true, + "Lights": "1-1-2", + "NextSignal": "D1", + "Switches": "2574-,22/5-,22/1-", + "ARSCodes": "04" + } + ] + }, + "580": + { + "Approve0": true, + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MNOP", + "ARSOnly": false, + "Angles": "{0 45 0}", + "Pos": "[-5041.3164 -1127.5178 -10637.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0", + "Lights": "1", + "NextSignal": "", + "Switches": "" + } + ], + "Left": false + }, + "581": + { + "Approve0": true, + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "724", + "ARSOnly": true, + "Angles": "{0 45 0}", + "Pos": "[-5878.668 -290.4581 -10637.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "0", + "NextSignal": "MNOP", + "Switches": "" + } + ], + "Left": false + }, + "582": + { + "Approve0": true, + "LensesStr": "RW", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "951", + "ARSOnly": true, + "Angles": "{0 45 0}", + "Pos": "[-8800.1025 2631.2686 -10637.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "0", + "NextSignal": "724", + "Switches": "" + } + ], + "Left": false + }, + "583": + { + "LensesStr": "RW-M", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MN1R", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-2777.9392 11287.6367 -10638.5059]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "ARSCodes": "004", + "Lights": "1--12", + "NextSignal": "MN80", + "Switches": "22/1+,22/5+,2574-" + }, + + { + "Manual": false, + "Repeater": true, + "Switches": "22/1-,22/5-,12088-", + "Lights": "1-1-2", + "NextSignal": "951", + "ARSCodes": "004" + } + ], + "Left": false + }, + "584": + { + "LensesStr": "YRW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "D1R", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[-2335.0459 11019.1426 -10648.4688]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "2-1-3", + "NextSignal": "D1", + "Switches": "" + } + ], + "Left": false + }, + "585": + { + "LensesStr": "YRW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "D2R", + "ARSOnly": true, + "Angles": "{-0 90 0}", + "Pos": "[-2380.5994 11287.0938 -10638.5059]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "Switches": "", + "Lights": "2-1-3", + "NextSignal": "D2", + "ARSCodes": "04" + } + ], + "Left": true + }, + "586": + { + "Approve0": false, + "LensesStr": "RW", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "951R", + "ARSOnly": true, + "Angles": "{0 278.31 0}", + "Pos": "[-6054.1816 10717.8867 -10654.4688]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "ARSCodes": "04", + "Lights": "0", + "NextSignal": "951", + "Switches": "" + } + ], + "Left": false + }, + "587": + { + "Approve0": true, + "RouteNumberSetup": "21W", + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MN2", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-377.4738 11287.0938 -10638.5059]", + "Routes": + [ + + { + "NextSignal": "951", + "ARSCodes": "004", + "Repeater": false, + "EnRou": true, + "Lights": "1-1-2", + "Manual": false, + "RouteName": "MN4-1", + "Switches": "22/1-,22/5-,12088-" + }, + + { + "NextSignal": "MN80", + "ARSCodes": "004", + "Manual": false, + "EnRou": true, + "Lights": "1-1-2", + "Repeater": false, + "RouteName": "MN4-2", + "Switches": "22/1+,22/5+,2574-" + } + ], + "Left": false + }, + "588": + { + "LensesStr": "RW-M", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MN2R2", + "ARSOnly": true, + "Angles": "{-0 -93.1382 0}", + "Pos": "[-4092.5017 11255.4941 -10654.4688]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "Switches": "22/1-,22/5-,2574-", + "Lights": "1-1-2", + "NextSignal": "MN80", + "ARSCodes": "004" + }, + + { + "Repeater": true, + "Manual": false, + "Switches": "22/1+,22/5+,12088-", + "Lights": "1-1-2", + "NextSignal": "951", + "ARSCodes": "004" + } + ], + "Left": true + }, + "589": + { + "LensesStr": "RW-M", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MN1R2", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-3379.5908 10839.2686 -10617.9688]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "ARSCodes": "004", + "Lights": "1--12", + "NextSignal": "MN80", + "Switches": "22/1+,22/5+,2574-" + }, + + { + "Manual": false, + "Repeater": true, + "Switches": "22/1-,22/5-,12088-", + "Lights": "1-1-2", + "NextSignal": "951", + "ARSCodes": "004" + } + ], + "Left": false + }, + "590": + { + "LensesStr": "YRW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "D1R2", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[-1707.4042 11198.3135 -10646.4873]", + "Routes": + [ + + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "2-1-3", + "NextSignal": "D1", + "Switches": "" + } + ], + "Left": false + }, + "591": + { + "LensesStr": "YRW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "D2R2", + "ARSOnly": true, + "Angles": "{-0 89.0667 0}", + "Pos": "[-1614.6052 11109.9229 -10646.4873]", + "Routes": + [ + + { + "Manual": false, + "Repeater": true, + "Switches": "", + "Lights": "2-1-3", + "NextSignal": "D2", + "ARSCodes": "04" + } + ], + "Left": true + }, + "592": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "TV367", + "Angles": "{0 90 0}", + "Pos": "[-4774.2017 13690 -14417.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Lights": "2-1-13", + "NextSignal": "TV369", + "Switches": "" + } + ] + }, + "593": + { + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "TVOP", + "Angles": "{0 270 0}", + "Pos": "[-4604.1016 13690 -14417.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0", + "Lights": "1", + "NextSignal": "", + "Switches": "" + } + ] + }, + "594": + { + "Approve0": false, + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "TVDOP2", + "Angles": "{0 258.75 0}", + "Pos": "[6191.2852 13310.2334 -14417.7061]", + "Routes": + [ + + { + "Manual": false, + "Switches": "12301+", + "Lights": "1b", + "NextSignal": "", + "ARSCodes": "0" + }, + + { + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "", + "NextSignal": "", + "ARSCodes": "1", + "Switches": "12301+" + } + ] + }, + "595": + { + "Approve0": false, + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "TVDOP", + "Angles": "{0 270 0}", + "Pos": "[6890.2432 13689.793 -14417.5059]", + "Routes": + [ + + { + "Manual": false, + "Switches": "12301-", + "Lights": "1b", + "NextSignal": "", + "ARSCodes": "0" + }, + + { + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "", + "NextSignal": "", + "ARSCodes": "1", + "Switches": "12301+" + } + ] + }, + "596": + { + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MJOP", + "Angles": "{0 0 0}", + "Pos": "[15399.207 -1658.4447 -16192.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0", + "Lights": "1", + "NextSignal": "", + "Switches": "" + } + ] + }, + "597": + { + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "AUOP", + "Angles": "{0 213.625 0}", + "Pos": "[6127.3804 -1376.2831 -13394.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0", + "Lights": "1", + "NextSignal": "", + "Switches": "" + } + ] + }, + "598": + { + "Approve0": false, + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "AVOP", + "Angles": "{0 45 0}", + "Pos": "[7139.7017 3921.062 -1739.4564]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0", + "Lights": "1", + "NextSignal": "", + "Switches": "" + } + ] + }, + "599": + { + "Approve0": false, + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "AVD", + "Angles": "{0 225 0}", + "Pos": "[2580.2239 7055.0127 -1739.4564]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0", + "Lights": "1", + "NextSignal": "", + "Switches": "" + } + ] + }, + "600": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "AU479", + "ARSOnly": true, + "Angles": "{0 33.875 0}", + "Pos": "[15146.3467 -14811.0566 -13394.6055]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "1", + "Lights": "", + "NextSignal": "", + "Switches": "" + } + ], + "Left": false + }, + "601": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "AU477", + "ARSOnly": true, + "Angles": "{0 33.875 0}", + "Pos": "[14276.8076 -13516.0244 -13394.6055]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "AU479", + "Switches": "" + } + ], + "Left": false + }, + "602": + { + "Approve0": true, + "LensesStr": "RW-M", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MJ415", + "Angles": "{0 180 0}", + "Pos": "[15399.207 3722.4966 -16192.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "1-1-2", + "NextSignal": "MJ417", + "Switches": "" + } + ] + }, + "603": + { + "Approve0": true, + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "OKOP", + "ARSOnly": false, + "Angles": "{-0 -180 0}", + "Pos": "[14452 3258.1641 -481.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0", + "Lights": "1", + "NextSignal": "", + "Switches": "" + } + ], + "Left": true + }, + "604": + { + "LensesStr": "RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "NVD", + "Angles": "{-0 11.25 0}", + "Pos": "[1569.6082 -4426.7441 -2844.5054]", + "Routes": + [ + + { + "Manual": false, + "Switches": "1708-,21971-", + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "117", + "RouteName": "NV2-1" + } + ], + "Left": true + }, + "605": + { + "LensesStr": "WRW-M", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "VK2", + "Angles": "{0 0 0}", + "Pos": "[-10499.0938 9026.6074 -2844.5056]", + "Routes": + [ + + { + "Manual": false, + "Switches": "52+,76+,21898-", + "ARSCodes": "04", + "Lights": "2-2-1", + "NextSignal": "VK276", + "RouteName": "VK4-2" + }, + + { + "Repeater": false, + "ARSCodes": "04", + "Manual": false, + "Lights": "2-2-1", + "NextSignal": "VK135", + "RouteName": "VK4-1", + "Switches": "52-,76-,1767-" + } + ] + }, + "606": + { + "Approve0": true, + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2, + "Name": "MKOP", + "Angles": "{0.3496 134.7904 0}", + "Pos": "[8866 9621.0625 -96.8627]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0", + "Lights": "1", + "NextSignal": "", + "Switches": "" + } + ], + "Left": true + }, + "607": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "NV298", + "Angles": "{-0 -168.75 0}", + "Pos": "[1619.8162 -4679.1563 -2844.5054]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-1-13", + "NextSignal": "NV300", + "Switches": "21971+" + }, + + { + "Manual": false, + "Repeater": false, + "Switches": "21971-", + "Lights": "2-1-13", + "NextSignal": "NV298", + "ARSCodes": "04" + } + ], + "Left": true + }, + "608": + { + "Approve0": true, + "LensesStr": "RR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 2, + "Name": "MKPREOP", + "ARSOnly": true, + "Angles": "{0.3496 135.2096 0}", + "Pos": "[5103.9224 5858.749 -96.4949]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "1", + "RouteName": "", + "Lights": "", + "NextSignal": "MKOP", + "Switches": "" + } + ], + "Left": true + }, + "609": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2, + "Name": "OK342", + "Angles": "{0.0014 359.2878 0}", + "Pos": "[14452.3066 4201.5464 -481.4851]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-1-13", + "NextSignal": "OK344", + "Switches": "" + } + ] + }, + "610": + { + "LensesStr": "YYY-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "TW46", + "Angles": "{0 258.75 0}", + "Pos": "[4976.4194 14224.2666 -14417.7061]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "MJ-TSVO", + "Switches": "2345+", + "Lights": "4-42-31-31b", + "NextSignal": "TV48", + "ARSCodes": "046" + } + ] + }, + "611": + { + "LensesStr": "YRW-M", + "RouteNumber": "D", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "D", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[5136.7188 11022.793 -10638.5059]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2-1b", + "NextSignal": "D3", + "Switches": "" + } + ], + "Left": false + }, + "612": + { + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "AV408", + "Angles": "{0 225 0}", + "Pos": "[7335.0161 3725.7471 -1739.4564]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-1-13", + "NextSignal": "AV410", + "Switches": "" + } + ] + }, + "613": + { + "Approve0": true, + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "PassOcc": true, + "Name": "NV113RC", + "ARSOnly": true, + "Angles": "{-0 11.25 0}", + "Pos": "[-176.2378 -816.6208 -2844.5054]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-21-1-13-3", + "NextSignal": "NV113", + "Switches": "" + } + ], + "Left": true + }, + "614": + { + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2, + "Name": "338", + "Angles": "{360 90 0}", + "Pos": "[11318.4385 14520.207 -172.7585]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "Lights": "3-31-1-12-2", + "NextSignal": "OK340", + "ARSCodes": "04" + } + ] + }, + "615": + { + "LensesStr": "WY-GR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 1, + "Name": "MK39", + "Angles": "{0 180 0}", + "Pos": "[4299.0762 -825.8577 -96.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "MK1-1", + "Lights": "4-42-2-32-3", + "NextSignal": "MK41", + "Switches": "1280+,22376+" + }, + + { + "Repeater": false, + "RouteName": "MK1-2", + "Manual": false, + "Lights": "4-4-1", + "NextSignal": "MKPREOP", + "Switches": "1280-,22376-", + "ARSCodes": "1" + } + ] + }, + "616": + { + "Approve0": true, + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "PassOcc": true, + "Name": "25RC", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-15648.2061 6883.6025 540.4944]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "25", + "Switches": "" + } + ] + }, + "617": + { + "Approve0": true, + "LensesStr": "WYR-GW-M", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "PassOcc": true, + "Name": "PM99RC", + "ARSOnly": true, + "Angles": "{-0 -180 0}", + "Pos": "[9473 -1051.1133 -2332.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-32-2-24-4", + "NextSignal": "PM99", + "Switches": "1620+,22038+" + }, + + { + "Repeater": false, + "ARSCodes": "0046", + "Manual": false, + "Lights": "3-3-1", + "NextSignal": "PM99", + "Switches": "1620-,22038-,22036-", + "RouteName": "" + } + ], + "Left": true + }, + "618": + { + "Approve0": true, + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "PassOcc": true, + "Name": "OK59RC", + "ARSOnly": true, + "Angles": "{-0 -180 0}", + "Pos": "[15460 681.5851 -481.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-21-1-13-3", + "NextSignal": "OK59", + "Switches": "" + } + ], + "Left": true + }, + "619": + { + "Approve0": true, + "LensesStr": "YGR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "PassOcc": true, + "Name": "MK43RC", + "ARSOnly": true, + "Angles": "{0 135 0}", + "Pos": "[7005.4512 7499.0518 -96.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "MK43", + "Switches": "" + } + ] + }, + "620": + { + "Approve0": true, + "LensesStr": "YR-GW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "PassOcc": true, + "Name": "AV410RC", + "ARSOnly": true, + "Angles": "{-0 -135 0}", + "Pos": "[4977.7744 6082.9893 -1739.4564]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-1-13", + "NextSignal": "AV410", + "Switches": "" + } + ], + "Left": true + }, + "621": + { + "Approve0": true, + "RouteNumberSetup": "43W1D", + "LensesStr": "YR-GW", + "RouteNumber": "1", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MN337", + "Angles": "{0 225 0}", + "Pos": "[-9078.7188 2909.8848 -10637.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Lights": "2-21-1-13-3", + "NextSignal": "MN339", + "Switches": "12088+" + }, + + { + "Manual": false, + "EnRou": true, + "Switches": "12088-", + "Lights": "2-21-1-13", + "NextSignal": "MN339", + "ARSCodes": "046", + "Repeater": false + } + ] + }, + "622": + { + "Angles": "{0 179.2889 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 1, + "Pos": "[4379.2612 -382.1516 -101.1606]" + }, + "623": + { + "Angles": "{0 0.894 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 1, + "Pos": "[3945.4136 1954.0012 -105.1834]" + }, + "624": + { + "Angles": "{0 181.5691 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 2, + "Pos": "[15545.4346 -3018.5454 -487.9688]" + }, + "625": + { + "Angles": "{0 0.4308 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 1, + "Pos": "[14353.2314 -3053.2363 -487.9688]" + }, + "626": + { + "Angles": "{0 272.3575 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 1, + "Pos": "[14952.0879 -8191.415 -615.9688]" + }, + "627": + { + "Angles": "{0 90.5777 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 1, + "Pos": "[14959.418 -10052.6953 -615.9688]" + }, + "628": + { + "Angles": "{0 1.3387 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 2, + "Pos": "[8372.6748 7666.062 -2338.9688]" + }, + "629": + { + "Angles": "{0 1.0644 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 1, + "Pos": "[8367.6172 6378.957 -2337.9688]" + }, + "630": + { + "Angles": "{0 179.3949 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 1, + "Pos": "[9574.3193 2492.2659 -2337.9688]" + }, + "631": + { + "Angles": "{0 44.0161 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 1, + "Pos": "[-260.1723 11190.9912 -1745.9688]" + }, + "632": + { + "Angles": "{0 224.6485 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 1, + "Pos": "[1983.2766 7785.8584 -1745.9688]" + }, + "633": + { + "Angles": "{0 179.6704 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 1, + "Pos": "[-9767.9854 3216.583 -2850.9688]" + }, + "634": + { + "Angles": "{0 88.2891 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 1, + "Pos": "[-10371.3604 6353.6396 -2850.9688]" + }, + "635": + { + "Angles": "{0 270.6019 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 1, + "Pos": "[-10368.085 8223.167 -2850.9688]" + }, + "636": + { + "Angles": "{0 0.5492 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 2, + "Pos": "[-10966.2617 3337.5078 -2850.9688]" + }, + "637": + { + "Angles": "{0 191.1479 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 1, + "Pos": "[1850.5493 -5357.2803 -2850.9688]" + }, + "638": + { + "Angles": "{0 10.5898 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 1, + "Pos": "[1414.6525 -9318.3086 -2850.9688]" + }, + "639": + { + "Angles": "{0 90.9504 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 1, + "Pos": "[-6055.8809 14944.0723 -3874.9688]" + }, + "640": + { + "Angles": "{0 270.2604 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 1, + "Pos": "[-9959.5723 16141.5156 -3874.9688]" + }, + "641": + { + "Angles": "{0 90.9648 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 2, + "Pos": "[-4873.8516 14936.3066 -3874.9688]" + }, + "642": + { + "Angles": "{0 272.5688 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 1, + "Pos": "[-1835.7775 -1241.7983 -4386.9688]" + }, + "643": + { + "Angles": "{0 89.4021 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 1, + "Pos": "[2023.6064 -2445.6873 -4386.9688]" + }, + "644": + { + "Angles": "{0 92.2423 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 1, + "Pos": "[1647.785 -15256.2695 -10132.9688]" + }, + "645": + { + "Angles": "{0 269.605 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 1, + "Pos": "[-2240.0254 -14054.001 -10132.9688]" + }, + "646": + { + "Angles": "{0 91.4131 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 1, + "Pos": "[-6504.5313 10557.3945 -10644.9688]" + }, + "647": + { + "Angles": "{0 359.1054 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 1, + "Pos": "[-3463.25 11165.3418 -10644.9688]" + }, + "648": + { + "Angles": "{0 177.2849 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 1, + "Pos": "[-1628.1853 11157.2285 -10644.9688]" + }, + "649": + { + "Angles": "{0 271.8737 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 2, + "Pos": "[-6555.7808 11755.1357 -10644.9688]" + }, + "650": + { + "Angles": "{0 90.9934 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 1, + "Pos": "[3744.4116 13597.7656 -14423.9688]" + }, + "651": + { + "Angles": "{0 270.173 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 2, + "Pos": "[2295.5388 14793.8799 -14423.9688]" + }, + "652": + { + "Angles": "{0 90.917 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 1, + "Pos": "[15265.4766 5644.8438 -16198.9688]" + }, + "653": + { + "Angles": "{0 268.2042 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 1, + "Pos": "[15270.4746 7514.042 -16198.9688]" + }, + "654": + { + "Angles": "{0 269.1072 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 1, + "Pos": "[-6420.5791 -12503.8262 -7598.9688]" + }, + "655": + { + "Angles": "{0 91.7579 0}", + "Class": "gmod_track_switch", + "NotChangePos": false, + "Channel": 1, + "Pos": "[-2590.009 -13712.1563 -7598.9688]" + }, + "656": + { + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "SignType": 2, + "Pos": "[3237.9485 7822.8145 -1739.4564]" + }, + "657": + { + "Angles": "{1.5573 354.6168 0}", + "Class": "gmod_track_signs", + "SignType": 1, + "Pos": "[-6154.5854 15996.4727 -1739.4852]" + }, + "658": + { + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "SignType": 3, + "Pos": "[6709.8936 2925.3428 -1739.4564]" + }, + "659": + { + "Angles": "{356.8778 424.3625 0}", + "Class": "gmod_track_signs", + "SignType": 5, + "Pos": "[11121.1924 -8947.8164 -1739.485]" + }, + "660": + { + "YOffset": 30, + "Angles": "{359.7787 223.1157 0}", + "Class": "gmod_track_signs", + "SignType": 3, + "Pos": "[8903.9912 9396.8057 -96.8601]" + }, + "661": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "SignType": 3, + "Pos": "[-15648.2051 4228.3901 540.4944]" + }, + "662": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "SignType": 3, + "Pos": "[15460 3804.5386 -481.5056]" + }, + "663": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": -20, + "SignType": 2, + "Pos": "[-2894.8479 14784.2061 528.4944]" + }, + "664": + { + "YOffset": 0, + "Angles": "{360 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 5, + "Pos": "[-15519.7939 5294.5889 -713.348]" + }, + "665": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[9473 2353.3191 -2332.5056]" + }, + "666": + { + "YOffset": 0, + "Angles": "{0 101.25 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[667.6182 -5058.9707 -2844.5054]" + }, + "667": + { + "YOffset": 8, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 22, + "SignType": 11, + "Pos": "[-10235.0938 14395.3574 -2844.5056]" + }, + "668": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 1, + "Pos": "[-10235.0938 13047.0596 -2844.5056]" + }, + "669": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 2, + "Pos": "[-9862.793 2687.9792 -2844.5056]" + }, + "670": + { + "YOffset": 0, + "Angles": "{359.9994 179.4505 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[-6788.4487 14935.9492 -3356.4871]" + }, + "671": + { + "YOffset": 0, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 5, + "Pos": "[-1041.0892 11233.0703 -3356.5056]" + }, + "672": + { + "YOffset": 0, + "Angles": "{356.499 358.6252 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 4, + "Pos": "[3279.6443 -13592.6523 -3868.5054]" + }, + "673": + { + "YOffset": 0, + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[-13748.9023 772.1398 -3868.4739]" + }, + "674": + { + "YOffset": 5, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 11, + "Pos": "[2058.877 15038.7949 -3868.5056]" + }, + "675": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[3744.1343 -1343.7939 -4380.5059]" + }, + "676": + { + "YOffset": 34, + "Angles": "{357.7493 386.4072 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 11, + "Pos": "[-6.8825 -14256.8848 -2844.5034]" + }, + "677": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[-3315.1233 -14655 -4893.5059]" + }, + "678": + { + "YOffset": 30, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 2, + "Pos": "[-3445.2578 -2239.7939 -7592.1094]" + }, + "679": + { + "YOffset": 0, + "Angles": "{1.296 173.1448 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[-7705.3032 -13538.667 -7592.5063]" + }, + "680": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[-7041.4292 9880.207 -8603.5059]" + }, + "681": + { + "YOffset": 0, + "Angles": "{2.2519 436.9129 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 5, + "Pos": "[-13026.6846 7122.438 -8603.7881]" + }, + "682": + { + "YOffset": 0, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[-7167.2012 -13303.8535 -10126.5059]" + }, + "683": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 5, + "Pos": "[-243.5248 -15156.6895 -10126.5059]" + }, + "684": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 1, + "Pos": "[12130.7949 1592.804 -12174.5059]" + }, + "685": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 5, + "Pos": "[1996.3822 13689.793 -14417.5059]" + }, + "686": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[806.7938 -4734.96 -16192.5059]" + }, + "687": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 1, + "Pos": "[15398.8066 13487.918 -16192.5059]" + }, + "688": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 5, + "Pos": "[5815.27 13689.7891 -14417.5059]" + }, + "689": + { + "YOffset": 0, + "Angles": "{0 168.75 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 2, + "Pos": "[5735.2061 13400.9531 -14417.7061]" + }, + "690": + { + "YOffset": 0, + "Angles": "{0 168.875 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[10067.2988 12547.0371 -14773.5361]" + }, + "691": + { + "YOffset": 0, + "Angles": "{0 348.875 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[-1443.3033 -9183.8789 -14929.5059]" + }, + "692": + { + "YOffset": 0, + "Angles": "{360 247.2499 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 5, + "Pos": "[-11863.2441 3145.7842 -14517.2266]" + }, + "693": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[15134.793 -1928.5472 -16192.5059]" + }, + "694": + { + "YOffset": 0, + "Angles": "{358.0693 349.5871 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 5, + "Pos": "[6933.9453 -15608.7246 -16196.6289]" + }, + "695": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[15405.207 2638.9329 -14417.5059]" + }, + "696": + { + "YOffset": 0, + "Angles": "{359.9999 269.9999 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 4, + "Pos": "[15404.7939 -4352.8262 -14581.748]" + }, + "697": + { + "YOffset": 0, + "Angles": "{3.2212 300.423 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 2, + "Pos": "[14314.5625 10553.3916 -14410.2744]" + }, + "698": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 5, + "Pos": "[-4823.1934 14698 -14417.5059]" + }, + "699": + { + "YOffset": 0, + "Angles": "{0.4657 358.5127 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[7437.5547 11657.3818 -10638.4961]" + }, + "700": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 2, + "Pos": "[13137.6953 2699.2231 -12174.5059]" + }, + "701": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 2, + "Pos": "[12130.7949 2694.3906 -12174.5059]" + }, + "702": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 1, + "Pos": "[4808.3428 11287.207 -10638.5059]" + }, + "703": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 28, + "SignType": 2, + "Pos": "[-696.6737 11287.0938 -10638.5059]" + }, + "704": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 28, + "SignType": 2, + "Pos": "[-704.3004 11023.0938 -10638.5059]" + }, + "705": + { + "YOffset": 0, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[-5219.627 -1958.1248 -10637.5059]" + }, + "706": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 5, + "Pos": "[3445.2183 -15171.0137 -10638.5059]" + }, + "707": + { + "YOffset": 0, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 2, + "Pos": "[-6852.0371 -12192.9082 -10126.5059]" + }, + "708": + { + "YOffset": 0, + "Angles": "{0 359.0667 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 2, + "Pos": "[1693.2007 -15156.3613 -10126.5059]" + }, + "709": + { + "YOffset": 0, + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[-10879.1904 -8165.7539 -10126.5059]" + }, + "710": + { + "YOffset": 0, + "Angles": "{359.5343 178.484 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 5, + "Pos": "[-3585.7466 3747.4248 -9614.498]" + }, + "711": + { + "YOffset": 0, + "Angles": "{358.2617 280.3786 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[-11924.1816 -6853.02 -9614.502]" + }, + "712": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[-959.0465 8871.793 -8603.5059]" + }, + "713": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[-5372.0127 9857.209 -6029.5059]" + }, + "714": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[2797.877 -15663 -4893.5059]" + }, + "715": + { + "YOffset": 30, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 2, + "Pos": "[1653.498 -2503.7939 -7592.1094]" + }, + "716": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[11105.7725 -2351.9871 -4380.5059]" + }, + "717": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "SignType": 3, + "Pos": "[-8461.793 4516.9248 -762.2711]" + }, + "718": + { + "YOffset": 0, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "SignType": 4, + "Pos": "[-8687.9336 -4728.6509 -3868.4739]" + }, + "719": + { + "YOffset": 0, + "Angles": "{0 269.9999 0}", + "Class": "gmod_track_signs", + "SignType": 4, + "Pos": "[-8461.7939 -2482.3577 -1617.0975]" + }, + "720": + { + "YOffset": 0, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "SignType": 5, + "Pos": "[-3258.9341 -11573.084 -3868.5056]" + }, + "721": + { + "YOffset": 0, + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "SignType": 3, + "Pos": "[4139.4404 7091.541 -3356.5056]" + }, + "722": + { + "YOffset": 0, + "Angles": "{0.0001 314.9999 0}", + "Class": "gmod_track_signs", + "SignType": 4, + "Pos": "[9010.6504 2219.5684 -3845.7205]" + }, + "723": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "SignType": 2, + "Pos": "[-10499.0938 8816.5371 -2844.5056]" + }, + "724": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "SignType": 2, + "Pos": "[-10235.0938 8785.25 -2844.5056]" + }, + "725": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "SignType": 3, + "Pos": "[-10871.207 -3533.1492 -2844.5056]" + }, + "726": + { + "YOffset": 0, + "Angles": "{0 281.25 0}", + "Class": "gmod_track_signs", + "SignType": 3, + "Pos": "[411.9708 1393.0925 -2844.5054]" + }, + "727": + { + "YOffset": 0, + "Angles": "{0 275.3398 0}", + "Class": "gmod_track_signs", + "SignType": 2, + "Pos": "[8126.083 9752.3936 -2332.5056]" + }, + "728": + { + "YOffset": 0, + "Angles": "{360 90.7325 0}", + "Class": "gmod_track_signs", + "SignType": 1, + "Pos": "[1953.1418 10526.5313 -2331.5059]" + }, + "729": + { + "YOffset": 0, + "Angles": "{0 281.25 0}", + "Class": "gmod_track_signs", + "SignType": 2, + "Pos": "[2619.1965 6675.4971 -2331.5056]" + }, + "730": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "SignType": 2, + "Pos": "[8465 1747.3112 -2332.5056]" + }, + "731": + { + "YOffset": 0, + "Angles": "{0 97.8204 0}", + "Class": "gmod_track_signs", + "SignType": 2, + "Pos": "[8159.6084 9449.1816 -2332.5056]" + }, + "732": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "SignType": 5, + "Pos": "[8465 -4224.6802 -2332.5056]" + }, + "733": + { + "YOffset": 0, + "Angles": "{360 270 0}", + "Class": "gmod_track_signs", + "SignType": 3, + "Pos": "[-15071.793 -1387.2253 -1531.1904]" + }, + "734": + { + "YOffset": 0, + "Angles": "{358.8725 276.1498 0}", + "Class": "gmod_track_signs", + "SignType": 4, + "Pos": "[-14999.0781 -8241.5938 -1696.498]" + }, + "735": + { + "YOffset": 0, + "Angles": "{359.5695 449.4332 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[15578.4658 10509.8418 -481.4974]" + }, + "736": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[14452 -2536.9209 -481.5056]" + }, + "737": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "SignType": 1, + "Pos": "[14824.0938 -14414.8975 -609.5056]" + }, + "738": + { + "YOffset": 30, + "Angles": "{0 405.1966 0}", + "Class": "gmod_track_signs", + "SignType": 3, + "Pos": "[5158.8389 5914.6523 -96.5056]" + }, + "739": + { + "YOffset": 10, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": -50, + "SignType": 3, + "Pos": "[-14934.7939 9270.7754 540.4944]" + }, + "740": + { + "YOffset": 0, + "Angles": "{360 90 0}", + "Class": "gmod_track_signs", + "SignType": 5, + "Pos": "[-9173.793 4357.2383 -780.8781]" + }, + "741": + { + "YOffset": 0, + "Angles": "{0.4657 178.5127 0}", + "Class": "gmod_track_signs", + "SignType": 3, + "Pos": "[-1265.1117 -13648.3936 -1739.4752]" + }, + "742": + { + "YOffset": -5, + "Angles": "{0 303.625 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[5769.731 -1315.9757 -13394.5059]" + }, + "743": + { + "YOffset": 0, + "Angles": "{3.3743 381.5672 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 4, + "Pos": "[-7713.1479 7683.7139 -13393.5029]" + }, + "744": + { + "YOffset": 0, + "Angles": "{3.1222 311.8759 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 5, + "Pos": "[11645.2979 4884.2554 -13905.5049]" + }, + "745": + { + "YOffset": 0, + "Angles": "{3.0112 404.1282 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[-9123.5713 10044.8174 -14417.5029]" + }, + "746": + { + "YOffset": 0, + "Angles": "{0 168.875 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[5761.3008 -11628.1143 -14929.5059]" + }, + "747": + { + "YOffset": 20, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 12, + "Pos": "[-14191.9512 16008.0127 -1739.5056]" + }, + "748": + { + "YOffset": 0, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[1978.1978 7657.0391 -1739.4564]" + }, + "749": + { + "YOffset": 6, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 11, + "Pos": "[6167.894 3468.5679 -1739.4564]" + }, + "750": + { + "YOffset": 6, + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 11, + "Pos": "[3500.2356 7564.231 -1739.4564]" + }, + "751": + { + "YOffset": 0, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[4924.2197 4711.0166 -1739.4564]" + }, + "752": + { + "YOffset": 0, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[6063.4487 3571.7871 -1739.4564]" + }, + "753": + { + "YOffset": 0, + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[3601.7932 7458.9702 -1739.4564]" + }, + "754": + { + "YOffset": 0, + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[6224.8496 4835.9141 -1739.4564]" + }, + "755": + { + "YOffset": 0, + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[4762.5566 6298.2065 -1739.4564]" + }, + "756": + { + "YOffset": 15, + "Angles": "{358.8721 445.0835 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[11967.6553 -5641.2759 -1739.48]" + }, + "757": + { + "YOffset": 15, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[10945.1133 -1309.1313 -1739.5056]" + }, + "758": + { + "YOffset": 15, + "Angles": "{357.7144 436.364 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[11733.6133 -7190.8125 -1739.4795]" + }, + "759": + { + "YOffset": 0, + "Angles": "{359.3085 357.4104 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-1018.5054 -12601.4834 -1739.4827]" + }, + "760": + { + "YOffset": 0, + "Angles": "{0.169 270.6551 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-8463.3447 9438.7773 -227.9571]" + }, + "761": + { + "YOffset": 0, + "Angles": "{353.2278 162.1139 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[-11169.626 13314.5566 38.435]" + }, + "762": + { + "YOffset": 0, + "Angles": "{359.8199 90.6573 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[-9177.7422 9561.0127 -227.1655]" + }, + "763": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[-9173.9863 -4564.9297 -1739.5056]" + }, + "764": + { + "YOffset": 15, + "Angles": "{0.0001 90.4948 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-9172.6641 -5619.8779 -1739.479]" + }, + "765": + { + "YOffset": 15, + "Angles": "{0.0001 180.4948 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[5370.0498 -13649.2607 -1739.479]" + }, + "766": + { + "YOffset": 15, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[13353.0137 -4694.1216 -1739.5056]" + }, + "767": + { + "YOffset": 15, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-15648.0137 -10857.3721 -96.5056]" + }, + "768": + { + "YOffset": 15, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[-15648.0137 -10708.6621 -96.5056]" + }, + "769": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[15459.793 -8447.6426 -481.5056]" + }, + "770": + { + "YOffset": 0, + "Angles": "{1.4368 441.4332 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 6, + "Pos": "[14554.2295 5649.9526 -481.5089]" + }, + "771": + { + "YOffset": 0, + "Angles": "{0 258.75 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 6, + "Pos": "[15590.5967 5588.9829 -481.5056]" + }, + "772": + { + "YOffset": 0, + "Angles": "{0 97.8205 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[14758.207 -4882.1162 -481.5056]" + }, + "773": + { + "YOffset": 0, + "Angles": "{0 264.6602 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[15131.8926 -5063.7529 -481.5056]" + }, + "774": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 12, + "Pos": "[14823.8926 -15461.7314 -609.5056]" + }, + "775": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[15459.7891 -3968.3899 -481.5056]" + }, + "776": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[15460 1061.744 -481.5056]" + }, + "777": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[15460 -905.6854 -481.5056]" + }, + "778": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[15460 2843.3816 -481.5056]" + }, + "779": + { + "YOffset": 22, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 11, + "Pos": "[15460.6865 2990.3523 -481.4688]" + }, + "780": + { + "YOffset": 22, + "Angles": "{0 450 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 11, + "Pos": "[14451.04 -1794.7159 -481.4688]" + }, + "781": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[14452 -1648.6312 -481.5056]" + }, + "782": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[14452 182.8647 -481.5056]" + }, + "783": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[14452 2113.4138 -481.5056]" + }, + "784": + { + "YOffset": 0, + "Angles": "{1.0785 444.7849 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 16, + "Pos": "[14493.1855 5122.4619 -481.504]" + }, + "785": + { + "YOffset": 0, + "Angles": "{0 269.2628 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 19, + "Pos": "[15460.668 4216.9199 -481.5056]" + }, + "786": + { + "YOffset": 0, + "Angles": "{0 258.75 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 19, + "Pos": "[15719.4629 6236.835 -481.5056]" + }, + "787": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 19, + "Pos": "[15844.207 10262.0537 -481.5056]" + }, + "788": + { + "YOffset": 0, + "Angles": "{359.9999 360.0001 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[-7259.3003 14784.2061 524.4099]" + }, + "789": + { + "YOffset": 0, + "Angles": "{1.7404 370.6772 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[-13183.9609 14701.9775 16.5043]" + }, + "790": + { + "YOffset": 0, + "Angles": "{359.9999 90.0001 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[-15336.2051 11550.8516 10.7526]" + }, + "791": + { + "YOffset": 0, + "Angles": "{360 90.0001 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-15336.2051 9303.5723 -221.3874]" + }, + "792": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[-15520.0137 -3937.9526 -1696.5056]" + }, + "793": + { + "YOffset": 0, + "Angles": "{360 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-12240.1582 14783.793 17.368]" + }, + "794": + { + "YOffset": 15, + "Angles": "{0.2348 91.5137 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-15515.7422 -8147.7368 -1696.4991]" + }, + "795": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[-5332.7134 -15991.0137 -1696.5056]" + }, + "796": + { + "YOffset": 0, + "Angles": "{0.691 183.7191 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[1755.0795 -15963.9092 -2332.4993]" + }, + "797": + { + "YOffset": 15, + "Angles": "{0.4652 182.5872 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[1498.2352 -15977.0166 -2332.4993]" + }, + "798": + { + "YOffset": 15, + "Angles": "{0.2353 269.5325 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[9040.3398 -7871.0791 -2332.4976]" + }, + "799": + { + "YOffset": 5, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 11, + "Pos": "[9473.2119 1248.3701 -2332.5056]" + }, + "800": + { + "YOffset": 5, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 11, + "Pos": "[8465.6719 -3536.0308 -2332.5056]" + }, + "801": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[8465 -3389.0349 -2332.5056]" + }, + "802": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[9473 1103.9821 -2332.5056]" + }, + "803": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[9473 -2682.9097 -2332.5056]" + }, + "804": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[9473 -725.0861 -2332.5056]" + }, + "805": + { + "YOffset": 0, + "Angles": "{0.9803 258.6983 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[9373.5225 -5786.3721 -2332.6313]" + }, + "806": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 20, + "Pos": "[8465 379.7378 -2332.5056]" + }, + "807": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 20, + "Pos": "[8465 -1550.2261 -2332.5056]" + }, + "808": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[8464.7939 3562.2915 -2331.5056]" + }, + "809": + { + "YOffset": 0, + "Angles": "{0 276.57 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[8139.3438 9614.251 -2332.5056]" + }, + "810": + { + "YOffset": 18, + "Angles": "{356.5443 143.1281 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 6, + "Pos": "[7097.2813 14508.8633 -2331.5044]" + }, + "811": + { + "YOffset": 0, + "Angles": "{0.6166 273.5285 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[8080.8892 11512.2715 -2331.4966]" + }, + "812": + { + "YOffset": 0, + "Angles": "{1.4751 353.2301 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[5690.9395 14174.5498 -2331.5046]" + }, + "813": + { + "YOffset": 0, + "Angles": "{359.9999 92.4909 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[1957.6021 10326.8457 -2331.5059]" + }, + "814": + { + "YOffset": 0, + "Angles": "{0 281.25 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[2077.5681 9398.4463 -2331.5056]" + }, + "815": + { + "YOffset": 0, + "Angles": "{359.3826 267.9517 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[1954.2799 11299.5498 -2331.4932]" + }, + "816": + { + "YOffset": 0, + "Angles": "{358.0087 169.3353 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[5893.3579 14142.7041 -2331.4988]" + }, + "817": + { + "YOffset": 0, + "Angles": "{0 91.289 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[8098.8223 10270.8262 -2332.5056]" + }, + "818": + { + "YOffset": 15, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[9473.0137 11542.2822 -2331.5056]" + }, + "819": + { + "YOffset": 15, + "Angles": "{0.5552 361.8296 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[2999.5381 15744.9629 -2331.5061]" + }, + "820": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[-764.0129 11517.6748 -2332.5056]" + }, + "821": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[-764.0128 5076.1533 -2844.5056]" + }, + "822": + { + "YOffset": 8, + "Angles": "{0 101.25 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 11, + "Pos": "[512.5866 -4282.9912 -2844.5054]" + }, + "823": + { + "YOffset": 8, + "Angles": "{0 281.25 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 11, + "Pos": "[567.2988 604.5028 -2844.5054]" + }, + "824": + { + "YOffset": 15, + "Angles": "{357.9615 384.3246 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 6, + "Pos": "[-196.9924 -14349.5029 -2844.501]" + }, + "825": + { + "YOffset": 15, + "Angles": "{1.0846 197.2949 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 6, + "Pos": "[284.8045 -15426.3535 -2844.4983]" + }, + "826": + { + "YOffset": 0, + "Angles": "{0 101.25 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[132.2919 -2367.7046 -2844.5054]" + }, + "827": + { + "YOffset": 0, + "Angles": "{0 101.25 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-243.5056 -478.4429 -2844.5054]" + }, + "828": + { + "YOffset": 0, + "Angles": "{0 281.25 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[596.8297 463.7441 -2844.5054]" + }, + "829": + { + "YOffset": 0, + "Angles": "{0 101.25 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[485.662 -4144.2158 -2844.5054]" + }, + "830": + { + "YOffset": 0, + "Angles": "{0 90.7324 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[-761.6271 2552.3403 -2844.5059]" + }, + "831": + { + "YOffset": 0, + "Angles": "{0 281.25 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[1329.0923 -3217.5889 -2844.5054]" + }, + "832": + { + "YOffset": 0, + "Angles": "{0 281.25 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[945.7344 -1290.3186 -2844.5054]" + }, + "833": + { + "YOffset": 0, + "Angles": "{0 281.25 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[1967.0427 -6426.3022 -2844.5056]" + }, + "834": + { + "YOffset": 0, + "Angles": "{0 280.3167 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[1540.2268 -9445.3047 -2844.5056]" + }, + "835": + { + "YOffset": 0, + "Angles": "{0 100.3167 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[1746.9161 -5321.3496 -2844.5056]" + }, + "836": + { + "YOffset": 15, + "Angles": "{359.717 100.6485 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[1656.7084 -10036.3984 -2844.4985]" + }, + "837": + { + "YOffset": 15, + "Angles": "{358.1837 361.8918 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-2635.0002 -14910.1152 -2844.5005]" + }, + "838": + { + "YOffset": 15, + "Angles": "{0.0008 281.9136 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-6421.3535 -11420.3564 -2844.488]" + }, + "839": + { + "YOffset": 15, + "Angles": "{359.9966 324.3394 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-8090.9609 -8682.9648 -2844.4912]" + }, + "840": + { + "YOffset": 0, + "Angles": "{0 443.43 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-10555.9785 5126.0024 -2844.5056]" + }, + "841": + { + "YOffset": 0, + "Angles": "{0 94.2916 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-10203.9688 5376.5259 -2844.5056]" + }, + "842": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[-10871 -2690.1663 -2844.5056]" + }, + "843": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[-9863 1847.3314 -2844.5056]" + }, + "844": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-9863 -1877.1265 -2844.5056]" + }, + "845": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-9863 38.4273 -2844.5056]" + }, + "846": + { + "YOffset": 0, + "Angles": "{0 281.25 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 16, + "Pos": "[-9786.4033 -4993.3682 -2844.5056]" + }, + "847": + { + "YOffset": 15, + "Angles": "{0 270.7323 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 6, + "Pos": "[-9862.4199 -4052.397 -2844.5056]" + }, + "848": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-10871 1042.0507 -2844.5056]" + }, + "849": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-10871 -877.271 -2844.5056]" + }, + "850": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 16, + "Pos": "[-10871.0879 4088.3442 -2844.5056]" + }, + "851": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[-9863.0938 6046.665 -2844.5056]" + }, + "852": + { + "YOffset": 0, + "Angles": "{359.6867 269.3338 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[-9861.9688 11980.7891 -3356.5039]" + }, + "853": + { + "YOffset": 15, + "Angles": "{359.6867 269.3338 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-9862.9639 11889.9951 -3356.4934]" + }, + "854": + { + "YOffset": 15, + "Angles": "{359.3893 178.0547 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-6473.6035 14929.1768 -3356.4897]" + }, + "855": + { + "YOffset": 0, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[5338.0332 4853.9482 -3356.5056]" + }, + "856": + { + "YOffset": 0, + "Angles": "{359.5343 133.4839 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[9563.624 621.9547 -3868.4985]" + }, + "857": + { + "YOffset": 15, + "Angles": "{359.3085 132.4103 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[9872.1758 289.5452 -3868.5051]" + }, + "858": + { + "YOffset": 15, + "Angles": "{359.309 408.6917 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[9931.8145 -10042.8369 -3868.4993]" + }, + "859": + { + "YOffset": 0, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[-9831.916 -3584.6675 -3868.4739]" + }, + "860": + { + "YOffset": 0, + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[-12699.9863 -276.7778 -3868.4739]" + }, + "861": + { + "YOffset": 45, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": -10, + "SignType": 11, + "Pos": "[-12840.0957 -126.0425 -3877.9688]" + }, + "862": + { + "YOffset": 0, + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-10100.6035 -2876.1597 -3868.4739]" + }, + "863": + { + "YOffset": 0, + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-11483.6758 -1493.0869 -3868.4739]" + }, + "864": + { + "YOffset": 0, + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[-7794.1924 -5183.0996 -3868.5056]" + }, + "865": + { + "YOffset": 45, + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "ZOffset": -10, + "SignType": 11, + "Pos": "[-9688.2031 -3738.0522 -3877.9688]" + }, + "866": + { + "YOffset": 0, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-11042.1777 -2374.4058 -3868.4739]" + }, + "867": + { + "YOffset": 0, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-12422.666 -993.9177 -3868.4739]" + }, + "868": + { + "YOffset": 0, + "Angles": "{1.1747 131.4624 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[-14645.4277 1254.9283 -3868.4902]" + }, + "869": + { + "YOffset": 15, + "Angles": "{359.3893 313.0547 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-14102.9502 1135.7164 -3868.4897]" + }, + "870": + { + "YOffset": 15, + "Angles": "{0 258.75 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-14817.0371 7126.9087 -3868.5056]" + }, + "871": + { + "YOffset": 15, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-14705.9863 10829.7783 -3868.5056]" + }, + "872": + { + "YOffset": 0, + "Angles": "{360 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[2747.5037 15038.9863 -3870.1565]" + }, + "873": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[8555.4629 15038.9863 -4380.5059]" + }, + "874": + { + "YOffset": 15, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[10697.5361 15038.9863 -4380.5059]" + }, + "875": + { + "YOffset": 15, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[14987.9883 2927.4307 -4380.5059]" + }, + "876": + { + "YOffset": 15, + "Angles": "{358.6622 353.8213 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 6, + "Pos": "[-8031.6143 -1265.5031 -4380.5015]" + }, + "877": + { + "YOffset": 15, + "Angles": "{0.4657 178.5127 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 6, + "Pos": "[-8041.084 -2343.627 -4380.5034]" + }, + "878": + { + "YOffset": -15, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 12, + "Pos": "[9860.1631 -1344 -4380.5059]" + }, + "879": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 11, + "Pos": "[4917.6104 -1343.7203 -4380.5059]" + }, + "880": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 11, + "Pos": "[9700.4775 -2352.854 -4380.5059]" + }, + "881": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[9554.9443 -2352 -4380.5059]" + }, + "882": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[5060.3643 -1344 -4380.5059]" + }, + "883": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[6890.1577 -1344 -4380.5059]" + }, + "884": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[8808.3711 -1344 -4380.5059]" + }, + "885": + { + "YOffset": 0, + "Angles": "{358.6629 367.5919 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[11846.1768 -1280.4344 -4380.4976]" + }, + "886": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[7681.9082 -2352 -4380.5059]" + }, + "887": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[5758.9565 -2352 -4380.5059]" + }, + "888": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[2726.7549 -2351.9871 -4380.5059]" + }, + "889": + { + "YOffset": 15, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-6063.3071 -1343.9873 -4380.5059]" + }, + "890": + { + "YOffset": 15, + "Angles": "{359.309 273.6918 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-14668.2764 5777.7261 -4380.4985]" + }, + "891": + { + "YOffset": 0, + "Angles": "{359.4439 183.0899 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[-10990.2822 10933.3574 -4380.4976]" + }, + "892": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[-4471.1313 10943.0127 -4893.5059]" + }, + "893": + { + "YOffset": 15, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[3247.6499 10944.0137 -4893.5059]" + }, + "894": + { + "YOffset": 15, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[7821.0127 -10022.3262 -4893.5059]" + }, + "895": + { + "YOffset": 7, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 11, + "Pos": "[-2762.49 -14654.0928 -4893.5059]" + }, + "896": + { + "YOffset": 7, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 11, + "Pos": "[2019.8201 -15662.207 -4893.5059]" + }, + "897": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[1875.4829 -15663 -4893.5059]" + }, + "898": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[-2624.26 -14655 -4893.5059]" + }, + "899": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[1132.5332 -14655 -4893.5059]" + }, + "900": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-789.0577 -14655 -4893.5059]" + }, + "901": + { + "YOffset": 0, + "Angles": "{359.4439 363.0898 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[4162.2573 -14642.2549 -4893.4976]" + }, + "902": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-1921.9445 -15663 -4893.5059]" + }, + "903": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[47.0719 -15663 -4893.5059]" + }, + "904": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[-4916.3613 -15662.9863 -4893.5059]" + }, + "905": + { + "YOffset": 15, + "Angles": "{359.7647 359.5035 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-4641.0815 -14653.4629 -4893.502]" + }, + "906": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[-12656.9863 -679.0935 -4893.5059]" + }, + "907": + { + "YOffset": 0, + "Angles": "{358.5249 263.1621 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[-12615.208 10876.7979 -6029.5049]" + }, + "908": + { + "YOffset": 15, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-12657.0137 9951.6143 -6029.5059]" + }, + "909": + { + "YOffset": 15, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-6513.0127 6657.2627 -6029.5059]" + }, + "910": + { + "YOffset": 15, + "Angles": "{1.6885 185.1337 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-2817.9597 3063.3354 -6029.4912]" + }, + "911": + { + "YOffset": 0, + "Angles": "{359.9999 225 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[438.5672 4867.9736 -6030.6543]" + }, + "912": + { + "YOffset": 0, + "Angles": "{0 225 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[7865.6162 12295.9082 -7079.5059]" + }, + "913": + { + "YOffset": 0, + "Angles": "{0 225 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[7700.4243 12130.7158 -7079.5059]" + }, + "914": + { + "YOffset": 0, + "Angles": "{0.0052 135.6604 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[11900.0938 12543.3828 -7080.9058]" + }, + "915": + { + "YOffset": 0, + "Angles": "{358.7627 131.7753 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[14001.9336 10434.4844 -7379.1577]" + }, + "916": + { + "YOffset": 0, + "Angles": "{357.6315 420.2703 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[14721.6611 6369.7085 -7602.5024]" + }, + "917": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[533.6654 -2239.7939 -7592.1094]" + }, + "918": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-2326.554 -2503.7939 -7592.1094]" + }, + "919": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-361.7903 -2503.7939 -7592.1094]" + }, + "920": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-1423.7839 -2239.7939 -7592.1094]" + }, + "921": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[1431.5369 -2503.7939 -7592.1094]" + }, + "922": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[-3217.3079 -2239.7939 -7592.1094]" + }, + "923": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-12972.6162 -2239.7939 -7592.1094]" + }, + "924": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-16076.2051 -9131.4414 -7592.1094]" + }, + "925": + { + "YOffset": 0, + "Angles": "{359.5695 179.4332 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-12786.9375 -12480.915 -7592.5005]" + }, + "926": + { + "YOffset": 0, + "Angles": "{1.169 163.8633 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-9186.1787 -13236.876 -7592.4961]" + }, + "927": + { + "YOffset": 15, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[9316.2783 -13607.0137 -7592.5059]" + }, + "928": + { + "YOffset": 15, + "Angles": "{1.0862 265.4971 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[13436.5 -10151.5889 -7592.5049]" + }, + "929": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[13464.0137 -8651.0908 -7592.5059]" + }, + "930": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[13463.9863 981.8336 -8603.5059]" + }, + "931": + { + "YOffset": 15, + "Angles": "{0.0001 270.4948 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[13461.7021 1963.7006 -8603.498]" + }, + "932": + { + "YOffset": 15, + "Angles": "{2.8878 338.7824 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[9131.5039 9269.6377 -8603.502]" + }, + "933": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-2442.6187 9880 -8603.5059]" + }, + "934": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-4398.4014 9880 -8603.5059]" + }, + "935": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[-6192.1431 9880 -8603.5059]" + }, + "936": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[591.6871 9879.7822 -8603.5059]" + }, + "937": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 6, + "Pos": "[-422.4687 9880.207 -8603.5059]" + }, + "938": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 6, + "Pos": "[-425.0566 8871.793 -8603.5059]" + }, + "939": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 6, + "Pos": "[-7500.2993 8871.793 -8603.5059]" + }, + "940": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 6, + "Pos": "[-7504.6899 9880.207 -8603.5059]" + }, + "941": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[-1735.455 8872 -8603.5059]" + }, + "942": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-3479.5781 8872 -8603.5059]" + }, + "943": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-5441.3306 8872 -8603.5059]" + }, + "944": + { + "YOffset": 0, + "Angles": "{359.4439 183.0899 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[-8474.8379 8859.332 -8603.7881]" + }, + "945": + { + "YOffset": 15, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-8680.5039 9880.0137 -8603.7959]" + }, + "946": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[-13159.0137 5106.813 -8603.7959]" + }, + "947": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[-13158.9863 -5082.436 -9614.5059]" + }, + "948": + { + "YOffset": 15, + "Angles": "{0.0001 90.4948 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-13156.7773 -5713.6899 -9614.499]" + }, + "949": + { + "YOffset": 15, + "Angles": "{0.4652 182.5872 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-2309.6667 -13626.7656 -9614.5]" + }, + "950": + { + "YOffset": 0, + "Angles": "{0.0001 270.4948 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 4, + "Pos": "[5270.4922 -3228.5464 -9614.499]" + }, + "951": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[-3584.2146 4781.7832 -9614.5059]" + }, + "952": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[-9451.9756 4782.0127 -10126.5059]" + }, + "953": + { + "YOffset": 15, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-10028.4473 4782.0127 -10126.5059]" + }, + "954": + { + "YOffset": 15, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-14181.793 -4346.0317 -10126.5059]" + }, + "955": + { + "YOffset": -10, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 11, + "Pos": "[-1552.4246 8870.8867 -8603.5059]" + }, + "956": + { + "YOffset": -10, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 11, + "Pos": "[-6334.7856 9881.7295 -8603.5059]" + }, + "957": + { + "YOffset": -10, + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 11, + "Pos": "[-10476.7119 -8568.5254 -10126.5059]" + }, + "958": + { + "YOffset": -10, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 11, + "Pos": "[-7811.7578 -12659.0059 -10126.5059]" + }, + "959": + { + "YOffset": 0, + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-9052.3145 -9992.9219 -10126.5059]" + }, + "960": + { + "YOffset": 0, + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-7662.249 -11382.9863 -10126.5059]" + }, + "961": + { + "YOffset": 0, + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[-10374.4346 -8670.8027 -10126.5059]" + }, + "962": + { + "YOffset": 0, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-9233.3574 -11237.4063 -10126.5059]" + }, + "963": + { + "YOffset": 0, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-10591.7949 -9878.9688 -10126.5059]" + }, + "964": + { + "YOffset": 0, + "Angles": "{0.0008 134.3364 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[-12815.8955 -7653.3311 -10126.4893]" + }, + "965": + { + "YOffset": 0, + "Angles": "{357.842 324.0606 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[-5512.5249 -13462.9092 -10126.5049]" + }, + "966": + { + "YOffset": 15, + "Angles": "{358.8725 366.1498 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 6, + "Pos": "[7836.0791 -14075.8096 -10126.498]" + }, + "967": + { + "YOffset": 0, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 6, + "Pos": "[-12039.8574 -8431.1982 -10126.5059]" + }, + "968": + { + "YOffset": 0, + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 6, + "Pos": "[-11222.21 -7822.7349 -10126.5059]" + }, + "969": + { + "YOffset": 15, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-6568.4551 -13902.5264 -10126.5059]" + }, + "970": + { + "YOffset": 15, + "Angles": "{0.4652 182.5872 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[7977.8208 -15145.8213 -10126.5]" + }, + "971": + { + "YOffset": 15, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[15582.9863 7150.8687 -10126.5059]" + }, + "972": + { + "YOffset": 15, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-6683.4814 15562.0137 -10126.5059]" + }, + "973": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[-16159.8125 6710.6025 -10126.5059]" + }, + "974": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[-16160.0137 547.8915 -10638.5059]" + }, + "975": + { + "YOffset": 15, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-16159.9863 -7694.2305 -10638.5059]" + }, + "976": + { + "YOffset": 15, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[5905.627 -16180.0137 -10638.5059]" + }, + "977": + { + "YOffset": 15, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[10464.0137 -11723.5117 -10638.5059]" + }, + "978": + { + "YOffset": -25, + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 11, + "Pos": "[-8623.8936 2455.8662 -10637.5059]" + }, + "979": + { + "YOffset": -35, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 11, + "Pos": "[-5747.2437 -1434.9034 -10642.4873]" + }, + "980": + { + "YOffset": 0, + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[-8521.0811 2351.9551 -10637.5059]" + }, + "981": + { + "YOffset": 0, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[-5848.689 -1328.7703 -10637.5059]" + }, + "982": + { + "YOffset": 0, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-8500.374 1322.9141 -10637.5059]" + }, + "983": + { + "YOffset": 0, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-7141.7627 -35.6974 -10637.5059]" + }, + "984": + { + "YOffset": 0, + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-5806.8066 -362.3193 -10637.5059]" + }, + "985": + { + "YOffset": 0, + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-6502.7925 333.6669 -10637.5059]" + }, + "986": + { + "YOffset": 0, + "Angles": "{357.3568 327.5053 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[-3603.7205 -2487.5754 -10638.4863]" + }, + "987": + { + "YOffset": 0, + "Angles": "{1.6886 129.8663 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[-10757.458 3617.4319 -10638.4922]" + }, + "988": + { + "YOffset": 15, + "Angles": "{359.9994 314.4505 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-9889.8203 3722.1631 -10638.4883]" + }, + "989": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 6, + "Pos": "[-2445.259 10650.793 -10638.5059]" + }, + "990": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 6, + "Pos": "[-2413.344 11658.793 -10638.5059]" + }, + "991": + { + "YOffset": 15, + "Angles": "{359.7647 179.5035 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[6167.5513 10650.6289 -10638.4961]" + }, + "992": + { + "YOffset": 0, + "Angles": "{359.5348 92.5592 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[14311.8936 3021.9785 -10638.5]" + }, + "993": + { + "YOffset": 0, + "Angles": "{358.6622 443.8213 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[14249.0352 -8190.4063 -11649.499]" + }, + "994": + { + "YOffset": 15, + "Angles": "{359.3085 447.4102 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[14311.127 -7302.6089 -11649.4961]" + }, + "995": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[5920.7637 -14916.1875 -11649.5059]" + }, + "996": + { + "YOffset": 0, + "Angles": "{359.0877 356.2783 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[-7707.1489 -14892.6006 -13033.4971]" + }, + "997": + { + "YOffset": 15, + "Angles": "{359.7647 359.5035 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-7041.1099 -14914.4121 -13033.502]" + }, + "998": + { + "YOffset": 0, + "Angles": "{360 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[-15050.9863 -6550.6807 -13039.6426]" + }, + "999": + { + "YOffset": 0, + "Angles": "{358.8721 265.0835 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[-15003.96 6684.5898 -14417.499]" + }, + "1000": + { + "YOffset": 15, + "Angles": "{359.3085 267.4102 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-15030.6855 6286.6606 -14417.5039]" + }, + "1001": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[507.2098 13690 -14417.5059]" + }, + "1002": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[-3985.7119 14698 -14417.5059]" + }, + "1003": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-2196.0166 14698 -14417.5059]" + }, + "1004": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-279.6739 14698 -14417.5059]" + }, + "1005": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-1360.5083 13690 -14417.5059]" + }, + "1006": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-3283.9326 13690 -14417.5059]" + }, + "1007": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[3024.8086 14697.793 -14417.5059]" + }, + "1008": + { + "YOffset": 0, + "Angles": "{0 348.75 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[4115.3125 14395.8037 -14417.7061]" + }, + "1009": + { + "YOffset": 0, + "Angles": "{359.9999 180.4657 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[-6890.1919 13689.9512 -14417.499]" + }, + "1010": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[6905.4009 13689.793 -14417.5059]" + }, + "1011": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[15140.7939 -2376.1772 -14417.5059]" + }, + "1012": + { + "YOffset": 0, + "Angles": "{359.0861 446.2702 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[15107.5752 -8678.2012 -14931.4814]" + }, + "1013": + { + "YOffset": 0, + "Angles": "{359.5328 448.4751 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[15135.123 -8091.4194 -14930.3359]" + }, + "1014": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[3113.2378 -15731.793 -14929.5059]" + }, + "1015": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[-63.7167 -15731.793 -15057.5059]" + }, + "1016": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-6674.2783 -15731.793 -15057.5059]" + }, + "1017": + { + "YOffset": 0, + "Angles": "{0.0005 270.4942 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[-15302.0137 -7927.9253 -15058.0049]" + }, + "1018": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[-15303.793 3447.2695 -16192.5059]" + }, + "1019": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-15303.793 6518.4648 -16192.5059]" + }, + "1020": + { + "YOffset": 0, + "Angles": "{358.4567 172.482 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-5495.3389 14559.833 -16195.8652]" + }, + "1021": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[806.7939 -7689.9922 -16192.5059]" + }, + "1022": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[11130.1982 -16045.207 -16192.5059]" + }, + "1023": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[15399.2031 3397.1563 -16192.5059]" + }, + "1024": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[15135.2031 -1466.9167 -16192.5059]" + }, + "1025": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[15135.2031 453.9523 -16192.5059]" + }, + "1026": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[15135.2031 2372.8027 -16192.5059]" + }, + "1027": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[15399.2031 1519.684 -16192.5059]" + }, + "1028": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[15399.2031 -400.3303 -16192.5059]" + }, + "1029": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[15399.207 -3603.2063 -16192.5059]" + }, + "1030": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[15134.793 5473.2334 -16192.5059]" + }, + "1031": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 12, + "Pos": "[15398.8066 14739.7051 -16192.5059]" + }, + "1032": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 10, + "Pos": "[15399.1074 14843.7627 -16192.5059]" + }, + "1033": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[9367.541 -15780.793 -16192.5059]" + }, + "1034": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[1071.2062 6395.8345 -16192.5059]" + }, + "1035": + { + "YOffset": 0, + "Angles": "{1.541 352.4896 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-5499.7163 14826.5986 -16189.3818]" + }, + "1036": + { + "YOffset": 0, + "Angles": "{0.4666 92.5952 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-15553.0039 -8353.8467 -15056.2432]" + }, + "1037": + { + "YOffset": 0, + "Angles": "{0.2342 180.5031 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[7217.8535 -15995.084 -14929.25]" + }, + "1038": + { + "YOffset": 0, + "Angles": "{0.2342 270.5031 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[15403.0117 5890.0127 -14417.0234]" + }, + "1039": + { + "YOffset": 0, + "Angles": "{0.2349 359.5034 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[7145.1284 13953.7031 -14417.3848]" + }, + "1040": + { + "YOffset": 15, + "Angles": "{0.4652 92.5872 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-16057.9453 -8480.5859 -13033.5]" + }, + "1041": + { + "YOffset": 15, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-7271.0088 14697.9863 -14417.5059]" + }, + "1042": + { + "YOffset": 15, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[5865.4053 -15955.1875 -11649.5059]" + }, + "1043": + { + "YOffset": 15, + "Angles": "{0.0001 270.4948 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[15345.0918 3577.9414 -10638.5]" + }, + "1044": + { + "YOffset": 15, + "Angles": "{0.0003 360.5957 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-7728.9727 11658.5684 -10638.498]" + }, + "1045": + { + "YOffset": 15, + "Angles": "{0.0034 136.9091 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-4522.7148 -2654.0244 -10638.4971]" + }, + "1046": + { + "YOffset": 15, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[2504.2517 -3658.9871 -10638.5059]" + }, + "1047": + { + "YOffset": 15, + "Angles": "{359.9966 133.0894 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[8455.4473 -8044.0078 -10638.4902]" + }, + "1048": + { + "YOffset": 15, + "Angles": "{359.7647 359.5035 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-7177.3936 -15169.9805 -10638.5039]" + }, + "1049": + { + "YOffset": 15, + "Angles": "{359.7647 269.5035 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-15133.8613 6577.5093 -10126.5049]" + }, + "1050": + { + "YOffset": 15, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[6137.0713 14522.0137 -10126.5059]" + }, + "1051": + { + "YOffset": 15, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[14559.0137 -5955.4771 -10126.5059]" + }, + "1052": + { + "YOffset": 15, + "Angles": "{359.9994 359.4505 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-2910.77 -14148.3223 -10126.4883]" + }, + "1053": + { + "YOffset": 15, + "Angles": "{359.9994 314.4505 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-11757.4619 -7286.5034 -10126.4883]" + }, + "1054": + { + "YOffset": 15, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-13157.9863 -362.456 -10126.5059]" + }, + "1055": + { + "YOffset": 15, + "Angles": "{359.3085 177.4104 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-3322.8267 3739.2126 -9614.4971]" + }, + "1056": + { + "YOffset": 15, + "Angles": "{358.9139 265.4437 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-12109.6934 5388.9136 -8603.793]" + }, + "1057": + { + "YOffset": 15, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[4219.2578 8871.9863 -8603.5059]" + }, + "1058": + { + "YOffset": 15, + "Angles": "{359.717 449.3984 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[12439.0566 -8590.7285 -7592.4995]" + }, + "1059": + { + "YOffset": 0, + "Angles": "{0 359.2628 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-6564.4541 -12597.9277 -7592.5054]" + }, + "1060": + { + "YOffset": 0, + "Angles": "{0 348.75 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-8484.7676 -12353.1084 -7592.5059]" + }, + "1061": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-12779.9658 -12214.793 -7592.5059]" + }, + "1062": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-15812.207 -5359.8975 -7592.1094]" + }, + "1063": + { + "YOffset": 0, + "Angles": "{0 225 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[13708.168 4751.8154 -7592.1094]" + }, + "1064": + { + "YOffset": 0, + "Angles": "{0.3139 317.066 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[12055.2412 12759.6982 -7079.4956]" + }, + "1065": + { + "YOffset": 0, + "Angles": "{359.1499 399.4198 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[612.2784 5428.0928 -6029.4707]" + }, + "1066": + { + "YOffset": 15, + "Angles": "{0.2813 271.8298 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-5375.2192 10113.9082 -6029.498]" + }, + "1067": + { + "YOffset": 15, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-13680.9863 -7466.9141 -4893.5059]" + }, + "1068": + { + "YOffset": 15, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[4406.7114 -15662.9863 -4893.5059]" + }, + "1069": + { + "YOffset": 15, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[8844.9863 7783.2666 -4893.5059]" + }, + "1070": + { + "YOffset": 15, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-11411.6992 11982.9863 -4380.5059]" + }, + "1071": + { + "YOffset": 15, + "Angles": "{0.0001 90.4948 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-15729.668 5798.9097 -4380.499]" + }, + "1072": + { + "YOffset": 15, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[11837.7939 -2351.9871 -4380.5059]" + }, + "1073": + { + "YOffset": 15, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[16012.0137 11000.085 -4380.5059]" + }, + "1074": + { + "YOffset": 15, + "Angles": "{0.0003 360.5957 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-11688.1025 16046.4785 -3868.4978]" + }, + "1075": + { + "YOffset": 15, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-15729.9863 4008.0647 -3868.5056]" + }, + "1076": + { + "YOffset": 15, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-7569.3462 -5847.9453 -3868.5056]" + }, + "1077": + { + "YOffset": 15, + "Angles": "{0 126.5638 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-4438.7036 -10264.8027 -3868.5054]" + }, + "1078": + { + "YOffset": 15, + "Angles": "{0.0001 135.4948 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-2228.603 -12603.4355 -3868.4993]" + }, + "1079": + { + "YOffset": 15, + "Angles": "{0.0001 225.4948 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[10796.6934 -11098.4746 -3868.4995]" + }, + "1080": + { + "YOffset": 15, + "Angles": "{0.0034 316.9091 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-3738.2473 14967.0879 -3356.4937]" + }, + "1081": + { + "YOffset": 0, + "Angles": "{360 90.7324 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-10870.46 -4292.2354 -2844.5056]" + }, + "1082": + { + "YOffset": 0, + "Angles": "{359.1605 144.3407 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-8929.0791 -9014.623 -2844.4885]" + }, + "1083": + { + "YOffset": 0, + "Angles": "{0 101.25 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-7329.7471 -12152.416 -2844.5056]" + }, + "1084": + { + "YOffset": 0, + "Angles": "{0 191.25 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-392.0051 -15593.7783 -2844.5056]" + }, + "1085": + { + "YOffset": 0, + "Angles": "{0 281.25 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[342.2173 1743.7667 -2844.5054]" + }, + "1086": + { + "YOffset": 0, + "Angles": "{359.717 269.3984 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[273.7861 11215.9785 -2331.4985]" + }, + "1087": + { + "YOffset": 15, + "Angles": "{359.7647 449.5035 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[8464.8398 -6787.5444 -2332.4951]" + }, + "1088": + { + "YOffset": 15, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-6861.2505 -14967.0137 -1696.5056]" + }, + "1089": + { + "YOffset": 0, + "Angles": "{359.6781 269.3087 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-15071.5938 11766.2041 15.9172]" + }, + "1090": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[4886.8643 14520.207 528.4944]" + }, + "1091": + { + "YOffset": 0, + "Angles": "{360 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[11639.2197 14520.207 -212.1454]" + }, + "1092": + { + "YOffset": 0, + "Angles": "{359.2443 93.531 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[15567.542 11130.9277 -485.3354]" + }, + "1093": + { + "YOffset": 0, + "Angles": "{0.491 429.6796 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[15003.9326 7400.6338 -481.4842]" + }, + "1094": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 7, + "Pos": "[-10815.2695 -14719.5938 -95.5056]" + }, + "1095": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-14934.793 7191.4233 540.4944]" + }, + "1096": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-14934.793 5226.5757 540.4944]" + }, + "1097": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-15648.2051 6408.812 540.4944]" + }, + "1098": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-15648.207 8284.5107 540.4944]" + }, + "1099": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[-15648.2051 4531.1953 540.4944]" + }, + "1100": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[-14934.7939 9025.5664 540.4944]" + }, + "1101": + { + "YOffset": 0, + "Angles": "{356.7243 255.4467 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 22, + "Pos": "[4475.4487 4307.5342 -96.4912]" + }, + "1102": + { + "YOffset": 0, + "Angles": "{3.4942 379.2745 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 22, + "Pos": "[10060.4502 10361.8408 -96.8563]" + }, + "1103": + { + "YOffset": 0, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 22, + "Pos": "[-13804.8594 388.2757 -3868.4739]" + }, + "1104": + { + "YOffset": 0, + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 22, + "Pos": "[-8837.2461 -4139.5176 -3868.4739]" + }, + "1105": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 22, + "Pos": "[-3577.938 -2503.7939 -7592.1094]" + }, + "1106": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 22, + "Pos": "[1777.7871 -2239.7939 -7592.1094]" + }, + "1107": + { + "YOffset": 0, + "Angles": "{0 168.75 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[6633.3013 13222.3105 -14417.7061]" + }, + "1108": + { + "YOffset": 0, + "Angles": "{359.6867 168.2087 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[12307.1621 12105.8799 -14929.5957]" + }, + "1109": + { + "YOffset": 10, + "Angles": "{359.3826 166.8267 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[12518.7129 12058.6113 -14929.6045]" + }, + "1110": + { + "YOffset": 15, + "Angles": "{0 438.875 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[11532.4023 -7490.1592 -14929.5059]" + }, + "1111": + { + "YOffset": -10, + "Angles": "{0 348.875 0}", + "Class": "gmod_track_signs", + "ZOffset": -10, + "SignType": 11, + "Pos": "[-657.2799 -9336.5938 -14934.4873]" + }, + "1112": + { + "YOffset": -10, + "Angles": "{0 168.875 0}", + "Class": "gmod_track_signs", + "ZOffset": -10, + "SignType": 11, + "Pos": "[3840.5002 -11252.04 -14934.4873]" + }, + "1113": + { + "YOffset": 0, + "Angles": "{0 348.875 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[-517.4064 -9365.9531 -14929.5059]" + }, + "1114": + { + "YOffset": 0, + "Angles": "{0 168.875 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[3702.7158 -11223.125 -14929.5059]" + }, + "1115": + { + "YOffset": 0, + "Angles": "{0 348.875 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[3214.1108 -10099.7383 -14929.5059]" + }, + "1116": + { + "YOffset": 0, + "Angles": "{0 348.875 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[1288.1152 -9721 -14929.5059]" + }, + "1117": + { + "YOffset": 0, + "Angles": "{359.9997 349.4125 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[6791.0552 -10802.1992 -14929.498]" + }, + "1118": + { + "YOffset": 0, + "Angles": "{0 168.875 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[-19.7943 -10491.1113 -14929.5059]" + }, + "1119": + { + "YOffset": 0, + "Angles": "{0 168.875 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[1903.071 -10869.2324 -14929.5059]" + }, + "1120": + { + "YOffset": 0, + "Angles": "{0 168.875 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[-2942.8027 -9916.5869 -14929.5059]" + }, + "1121": + { + "YOffset": 15, + "Angles": "{0.0003 169.4707 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[7832.5093 -12035.1826 -14929.498]" + }, + "1122": + { + "YOffset": 15, + "Angles": "{0.2813 260.7048 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[16030.4795 8750.9443 -14929.498]" + }, + "1123": + { + "YOffset": 15, + "Angles": "{0.0001 348.1378 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-3387.5603 -8800.2656 -14929.5059]" + }, + "1124": + { + "YOffset": 15, + "Angles": "{0 337.75 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-10818.8047 -5903.5098 -14929.5059]" + }, + "1125": + { + "YOffset": 15, + "Angles": "{359.3085 244.9105 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-10739.6621 5809.2905 -14417.499]" + }, + "1126": + { + "YOffset": 15, + "Angles": "{0 157.5 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[6233.4854 6929.9385 -13905.5059]" + }, + "1127": + { + "YOffset": 15, + "Angles": "{0 427.5 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[10483.8398 -4444.2061 -13905.5059]" + }, + "1128": + { + "YOffset": 15, + "Angles": "{359.7647 438.1287 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[9817.4502 -6987.5396 -13905.4971]" + }, + "1129": + { + "YOffset": 15, + "Angles": "{0 348.625 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-6796.6636 -11938.707 -13905.5059]" + }, + "1130": + { + "YOffset": 15, + "Angles": "{359.5343 257.1091 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-11932.7676 4089.4377 -13394.498]" + }, + "1131": + { + "YOffset": 15, + "Angles": "{0 168.625 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-1476.3821 9966.6611 -13394.5059]" + }, + "1132": + { + "YOffset": 0, + "Angles": "{0 123.1378 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[1497.6906 7495.5498 -13394.4063]" + }, + "1133": + { + "YOffset": 0, + "Angles": "{0 123.875 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[7904.3843 -4023.7573 -13394.6055]" + }, + "1134": + { + "YOffset": 0, + "Angles": "{0 123.875 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[6813.4619 -2398.7568 -13394.6055]" + }, + "1135": + { + "YOffset": 0, + "Angles": "{0 123.875 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[8930.4082 -5552.0811 -13394.6055]" + }, + "1136": + { + "YOffset": 0, + "Angles": "{0 303.875 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 21, + "Pos": "[6025.0522 -1698.0151 -13394.6055]" + }, + "1137": + { + "YOffset": 0, + "Angles": "{0 303.875 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[7666.6548 -4143.2871 -13394.6055]" + }, + "1138": + { + "YOffset": 0, + "Angles": "{0 303.875 0}", + "Class": "gmod_track_signs", + "ZOffset": 10, + "SignType": 20, + "Pos": "[6570.2202 -2510.0759 -13394.6055]" + }, + "1139": + { + "YOffset": 15, + "Angles": "{0.0008 304.2886 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[1056.6019 5746.8657 -13394.4883]" + }, + "1140": + { + "YOffset": 15, + "Angles": "{0.0001 349.1198 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-2617.3933 7909.6899 -13393.499]" + }, + "1141": + { + "YOffset": 15, + "Angles": "{0.4652 441.2122 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-13233.4961 -4218.7109 -13393.5]" + }, + "1142": + { + "YOffset": 0, + "Angles": "{0.6915 166.0633 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[-7427.3438 -13034.9111 -13393.502]" + }, + "1143": + { + "YOffset": 0, + "Angles": "{0 168.625 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[-819.8049 -14405.873 -13905.5059]" + }, + "1144": + { + "YOffset": 15, + "Angles": "{0.2348 170.1387 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[1631.0975 -14895.5459 -13905.499]" + }, + "1145": + { + "YOffset": 15, + "Angles": "{0 258.625 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[11557.4219 -5443.7241 -13905.5059]" + }, + "1146": + { + "YOffset": 15, + "Angles": "{0.0001 247.9948 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[12336.9453 -3155.2529 -13905.5]" + }, + "1147": + { + "YOffset": 0, + "Angles": "{0 337.5 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[7169.5728 7684.3594 -13905.5059]" + }, + "1148": + { + "YOffset": 0, + "Angles": "{0 337.5 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[642.7147 10412.0039 -14417.5059]" + }, + "1149": + { + "YOffset": 0, + "Angles": "{1.1275 343.6758 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-2010.6952 11435.6084 -14417.4971]" + }, + "1150": + { + "YOffset": 0, + "Angles": "{0 427.5 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 14, + "Pos": "[-11915.0967 5164.9326 -14417.5059]" + }, + "1151": + { + "YOffset": 0, + "Angles": "{0.0003 428.3457 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 15, + "Pos": "[-14512.9229 -1038.151 -14929.498]" + }, + "1152": + { + "YOffset": 15, + "Angles": "{0 427.25 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-14446.7432 -879.0291 -14929.5059]" + }, + "1153": + { + "YOffset": 15, + "Angles": "{0 157.75 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[-5160.2998 -9287.3652 -14929.5059]" + }, + "1154": + { + "YOffset": 0, + "Angles": "{2.6067 107.2322 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 4, + "Pos": "[-15725.4404 -11324.4346 -10638.5]" + }, + "1155": + { + "YOffset": 0, + "Angles": "{2.2856 166.3855 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[-10726.3926 -15897.6846 -10638.499]" + }, + "1156": + { + "YOffset": 0, + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 16, + "Pos": "[8443.5947 2617.1135 -1739.5056]" + }, + "1157": + { + "YOffset": 0, + "Angles": "{0 135 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 6, + "Pos": "[7554.5161 2081.1924 -1739.5056]" + }, + "1158": + { + "YOffset": 0, + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 6, + "Pos": "[8359.8086 2700.8999 -1739.5056]" + }, + "1159": + { + "YOffset": 0, + "Angles": "{3.4691 321.8029 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[2698.4314 3197.4922 -9614.5049]" + }, + "1160": + { + "YOffset": 15, + "Angles": "{0.2348 271.5137 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[5263.8936 -2914.2437 -9614.498]" + }, + "1161": + { + "YOffset": 0, + "Angles": "{359.3085 267.4102 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 4, + "Pos": "[-15040.7676 6062.5591 -14417.4961]" + }, + "1162": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 4, + "Pos": "[806.7938 2362.8521 -16192.5059]" + }, + "1163": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 22, + "Pos": "[15399.207 -1794.8975 -16192.5059]" + }, + "1164": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 22, + "Pos": "[15134.793 3741.8833 -16192.5059]" + }, + "1165": + { + "YOffset": 0, + "Angles": "{0 180.8822 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 8, + "Pos": "[-6808.0493 -10150.4023 -11790.124]" + }, + "1166": + { + "YOffset": 0, + "Angles": "{0 180.8822 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 8, + "Pos": "[-6809.3379 -10410.2539 -11790.124]" + }, + "1167": + { + "YOffset": 0, + "Angles": "{0 180.8822 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 8, + "Pos": "[-6965.8682 -9730.3086 -11790.124]" + }, + "1168": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 8, + "Pos": "[-6966.3887 -9466.2129 -11790.124]" + }, + "1169": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 8, + "Pos": "[-6817.46 -9045.207 -11790.124]" + }, + "1170": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 8, + "Pos": "[-6811.8569 -8781.207 -11790.124]" + }, + "1171": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 8, + "Pos": "[-6775.4297 -8361.207 -11790.124]" + }, + "1172": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 8, + "Pos": "[-6781.5576 -8097.2061 -11790.124]" + }, + "1173": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 8, + "Pos": "[-6786.3037 -7834.2061 -11790.124]" + }, + "1174": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 8, + "Pos": "[-6791.313 -7570.2061 -11790.124]" + }, + "1175": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 8, + "Pos": "[-6795.7959 -7305.2061 -11790.124]" + }, + "1176": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 8, + "Pos": "[-6800.0146 -7040.2061 -11790.124]" + }, + "1177": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 8, + "Pos": "[-6805.0239 -6776.2061 -11790.124]" + }, + "1178": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 8, + "Pos": "[-6809.2427 -6510.2061 -11790.124]" + }, + "1179": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 8, + "Pos": "[-6816.0986 -6140.2061 -11790.124]" + }, + "1180": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 8, + "Pos": "[-6820.0537 -5876.2061 -11790.124]" + }, + "1181": + { + "YOffset": 0, + "Angles": "{0 180.8822 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 8, + "Pos": "[-7260.8672 -5393.2627 -11790.124]" + }, + "1182": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 8, + "Pos": "[-7257.2988 -5129.2119 -11790.124]" + }, + "1183": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 8, + "Pos": "[-7257.0063 -4865.2061 -11790.124]" + }, + "1184": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[14559.0137 -4366.061 -10126.5059]" + }, + "1185": + { + "YOffset": 0, + "Angles": "{3.0109 293.3825 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 4, + "Pos": "[14602.7656 7656.3604 -10638.5029]" + }, + "1186": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 4, + "Pos": "[14559.0137 2734.167 -10126.5059]" + }, + "1187": + { + "YOffset": 0, + "Angles": "{356.6955 329.5747 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 4, + "Pos": "[-8880.3672 -11509.6055 -9614.5039]" + }, + "1188": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 2, + "Pos": "[-857.691 -12599.2129 -7592.5059]" + }, + "1189": + { + "YOffset": 0, + "Angles": "{0.0002 157.25 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 4, + "Pos": "[4674.2856 7579.3638 -13955.4727]" + }, + "1190": + { + "YOffset": 0, + "Angles": "{0.0002 258.3749 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[-12078.1768 3398.6521 -13409.6729]" + }, + "1191": + { + "YOffset": 0, + "Angles": "{0.9119 342.4138 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 4, + "Pos": "[-1772.1918 11361.375 -14417.499]" + }, + "1192": + { + "YOffset": 0, + "Angles": "{3.122 115.6323 0}", + "Class": "gmod_track_signs", + "SignType": 4, + "Pos": "[-8314.4063 -9903.3848 -1739.4827]" + }, + "1193": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "SignType": 2, + "Pos": "[-15071.793 5574.9922 -678.8296]" + }, + "1194": + { + "YOffset": 0, + "Angles": "{359.9997 180.5375 0}", + "Class": "gmod_track_signs", + "SignType": 5, + "Pos": "[-7253.1182 10650.2891 -10638.498]" + }, + "1195": + { + "YOffset": 0, + "Angles": "{3.4692 231.8029 0}", + "Class": "gmod_track_signs", + "SignType": 3, + "Pos": "[7513.5615 -13344.9092 -2332.5049]" + }, + "1196": + { + "YOffset": 0, + "Angles": "{0.2348 181.5137 0}", + "Class": "gmod_track_signs", + "SignType": 4, + "Pos": "[1146.4906 -15988.084 -2332.4995]" + }, + "1197": + { + "YOffset": 0, + "Angles": "{0 315 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[-2606.9766 -10370.042 -3868.5056]" + }, + "1198": + { + "YOffset": 0, + "Angles": "{359.5348 272.5592 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 2, + "Pos": "[-12638.375 -7215.5337 -4893.4985]" + }, + "1199": + { + "YOffset": 0, + "Angles": "{356.531 218.191 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[-12427.7461 12144.79 -14417.5039]" + }, + "1200": + { + "YOffset": 0, + "Angles": "{0 121.374 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 2, + "Pos": "[4246.0601 1464.4321 -13394.4063]" + }, + "1201": + { + "YOffset": 15, + "Angles": "{0.723 265.0181 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 7, + "Pos": "[15429.3398 -10820.5088 -372.5831]" + }, + "1202": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[14451.7949 -9645.5498 -481.5056]" + }, + "1203": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 6, + "Pos": "[15459.7939 -10098.0918 -422.8867]" + }, + "1204": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 6, + "Pos": "[14451.7949 -10073.2412 -481.5056]" + }, + "1205": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 10, + "Pos": "[14824.0938 -15174.6514 -609.5056]" + }, + "1206": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 19, + "Pos": "[15458.3496 -3139.929 -481.5056]" + }, + "1207": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "SignType": 6, + "Pos": "[9473.2061 10212.292 -2331.5056]" + }, + "1208": + { + "YOffset": 0, + "Angles": "{356.8426 153.972 0}", + "Class": "gmod_track_signs", + "SignType": 6, + "Pos": "[6686.2959 13893.8975 -2331.5027]" + }, + "1209": + { + "YOffset": 0, + "Angles": "{3.279 330.8285 0}", + "Class": "gmod_track_signs", + "SignType": 6, + "Pos": "[6770.4878 13852.5771 -2331.5015]" + }, + "1210": + { + "YOffset": 0, + "Angles": "{0 270.0001 0}", + "Class": "gmod_track_signs", + "SignType": 6, + "Pos": "[-9863.6055 10738.1221 -3319.489]" + }, + "1211": + { + "YOffset": 0, + "Angles": "{360 90.0001 0}", + "Class": "gmod_track_signs", + "SignType": 6, + "Pos": "[-10872.1055 10622.082 -3308.9561]" + }, + "1212": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "SignType": 6, + "Pos": "[-145.4721 16046.793 -3868.5056]" + }, + "1213": + { + "YOffset": 0, + "Angles": "{359.9998 180 0}", + "Class": "gmod_track_signs", + "SignType": 6, + "Pos": "[3096.8064 15038.9873 -3887.7334]" + }, + "1214": + { + "YOffset": 0, + "Angles": "{0.2348 181.5137 0}", + "Class": "gmod_track_signs", + "SignType": 6, + "Pos": "[7816.5796 -15150.7305 -10126.499]" + }, + "1215": + { + "YOffset": 0, + "Angles": "{359.9999 348.8751 0}", + "Class": "gmod_track_signs", + "ZOffset": 28, + "SignType": 6, + "Pos": "[9085.3154 14096.3535 -14683.4785]" + }, + "1216": + { + "YOffset": 0, + "Angles": "{1.9282 349.5944 0}", + "Class": "gmod_track_signs", + "ZOffset": 28, + "SignType": 6, + "Pos": "[9382.6201 13766.7822 -14413.502]" + }, + "1217": + { + "YOffset": 0, + "Angles": "{0.0001 168.875 0}", + "Class": "gmod_track_signs", + "ZOffset": 28, + "SignType": 6, + "Pos": "[9361.1846 12685.8906 -14687.5078]" + }, + "1218": + { + "YOffset": 0, + "Angles": "{358.0693 169.5872 0}", + "Class": "gmod_track_signs", + "ZOffset": 28, + "SignType": 6, + "Pos": "[9347.542 13504.9639 -14421.748]" + }, + "1219": + { + "YOffset": 0, + "Angles": "{2.9642 247.7244 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 5, + "Pos": "[13114.2773 -11552.4248 -7592.5034]" + }, + "1220": + { + "YOffset": 0, + "Angles": "{2.2856 346.3855 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 3, + "Pos": "[8110.5845 9578.2461 -8603.501]" + }, + "1221": + { + "YOffset": 0, + "Angles": "{1.1275 276.1758 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 4, + "Pos": "[13381.1738 3246.3179 -8603.501]" + }, + "1222": + { + "YOffset": 0, + "Angles": "{356.51 139.9078 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "SignType": 2, + "Pos": "[7238.7998 14398.54 -2331.5051]" + }, + "1223": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": -20, + "SignType": 2, + "Pos": "[-2446.3877 14520.2061 528.4944]" + }, + "Version": 1.2 +} \ No newline at end of file diff --git a/lua/metrostroi_data/signs_gm_mus_loopline_e.lua b/lua/metrostroi_data/signs_gm_mus_loopline_e.lua new file mode 100644 index 0000000..5945354 --- /dev/null +++ b/lua/metrostroi_data/signs_gm_mus_loopline_e.lua @@ -0,0 +1,9619 @@ + +{ + "1": + { + "LensesStr": "RY-GR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "5M", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[8099.8735 11120.793 -1140.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "06" + }, + + { + "Manual": false, + "RouteName": "651-652", + "Emer": true, + "Lights": "4-4-2-3", + "NextSignal": "*", + "ARSCodes": "06", + "Repeater": false + } + ], + "Left": false + }, + "2": + { + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "11", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[828.1743 -9381.0137 -2164.5056]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "0467", + "Lights": "", + "NextSignal": "*", + "Switches": "" + }, + + { + "Repeater": false, + "RouteName": "652-653", + "Emer": true, + "Lights": "3-3-1-2", + "NextSignal": "*", + "ARSCodes": "06", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "3": + { + "LensesStr": "RY-GR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "15M", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[6531.668 12090.0137 -2676.5056]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "*", + "Switches": "" + }, + + { + "Manual": false, + "RouteName": "653-654", + "Emer": true, + "Lights": "4-4-2-3", + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "4": + { + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "21", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[15429.6133 1171.0808 -5235.1758]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "067", + "Lights": "", + "NextSignal": "*", + "Switches": "" + }, + + { + "Manual": false, + "RouteName": "653-654", + "Emer": true, + "Lights": "3-3-1-2", + "NextSignal": "*", + "ARSCodes": "067", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "5": + { + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "27", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[15898.0859 5719.1162 -4723.5059]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + }, + + { + "Repeater": false, + "RouteName": "654-655", + "Emer": true, + "Lights": "3-3-1-2", + "NextSignal": "*", + "ARSCodes": "04678", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "6": + { + "LensesStr": "RY-GR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "29M", + "ARSOnly": false, + "Angles": "{0.0002 180 0}", + "Pos": "[-9713.0117 -561.2311 -3236.1926]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "0467" + }, + + { + "Repeater": false, + "RouteName": "654-655", + "Emer": true, + "Lights": "4-4-2-3", + "NextSignal": "*", + "ARSCodes": "0467", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "7": + { + "LensesStr": "BY-GRW", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "PN35", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[-14693.2061 -9446.707 -1651.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "4-4-1", + "NextSignal": "*", + "ARSCodes": "04" + }, + + { + "Manual": false, + "RouteName": "655-656", + "Emer": true, + "Lights": "4-4-2-3", + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "8": + { + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "43", + "ARSOnly": false, + "Angles": "{0.4279 87.8547 0}", + "Pos": "[-5088.4087 -885.5729 -627.4985]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "046", + "Lights": "", + "NextSignal": "*", + "Switches": "" + }, + + { + "Repeater": false, + "RouteName": "656-651", + "Emer": true, + "Lights": "3-3-1-2", + "NextSignal": "1M", + "ARSCodes": "046", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "9": + { + "LensesStr": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "1MR", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[1138.9365 -896 -627.5056]", + "Routes": + [ + + { + "Repeater": true, + "Switches": "", + "Emer": false, + "Lights": "4-4-2-3", + "NextSignal": "1M", + "ARSCodes": "06", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "10": + { + "LensesStr": "BYG-RW", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MR25", + "ARSOnly": false, + "Angles": "{0 315 0}", + "Pos": "[-9055.6943 4372.3838 -4724.3657]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "pto1ex+", + "Lights": "4-4-1", + "NextSignal": "*", + "ARSCodes": "046" + }, + + { + "Emer": true, + "NextSignal": "*", + "ARSCodes": "046", + "Manual": false, + "Lights": "4-4-2-3", + "Switches": "pto1ex+", + "RouteName": "654-655", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "11": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "1A", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[4403.3477 -1080.3438 -627.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "12": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "1B", + "ARSOnly": true, + "Angles": "{359.3893 46.9453 0}", + "Pos": "[7178.3691 -2362.1147 -627.4894]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "13": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "1V", + "ARSOnly": true, + "Angles": "{0.8241 94.5481 0}", + "Pos": "[11767.3691 -3959.8086 -627.4112]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "14": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "1G", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[15352.207 3849.1135 -627.4187]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "15": + { + "Approve0": true, + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "1M", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[1276.0754 -896 -627.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04" + }, + + { + "Manual": false, + "RouteName": "656-651", + "Emer": true, + "Lights": "4-4-2-3", + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "16": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "1I", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-11507.0137 5372.8521 -627.2976]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "17": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "3D", + "ARSOnly": true, + "Angles": "{1.8163 260.6897 0}", + "Pos": "[11010.7373 11048.5537 -1140.4974]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "18": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "3G", + "ARSOnly": true, + "Angles": "{1.0846 186.0449 0}", + "Pos": "[14057.1885 7740.8315 -1140.498]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "19": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "3V", + "ARSOnly": true, + "Angles": "{356.5616 203.0265 0}", + "Pos": "[14446.3398 2942.2593 -1140.5044]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "20": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "7G", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-8425.9863 -1025.5256 -1140.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "NonAutoStop": true, + "Left": false + }, + "21": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "7D", + "ARSOnly": true, + "Angles": "{2.8878 68.7824 0}", + "Pos": "[-4292.6855 -9162.252 -1141.2057]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "22": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "7E", + "ARSOnly": true, + "Angles": "{0.0001 90.4948 0}", + "Pos": "[6051.5952 -9849.7441 -1653.469]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "23": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "7J", + "ARSOnly": true, + "Angles": "{2.451 164.6321 0}", + "Pos": "[13680.4004 -4940.6665 -1653.4757]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "24": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "9A", + "ARSOnly": true, + "Angles": "{2.8878 248.7824 0}", + "Pos": "[9755.0117 12853.0908 -1653.4342]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "0467" + } + ], + "NonAutoStop": true, + "Left": false + }, + "25": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "9B", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[48.9993 13510.5137 -1653.3756]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "26": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "9V", + "ARSOnly": true, + "Angles": "{3.0109 293.3825 0}", + "Pos": "[-9675.7178 12765.8809 -1653.4523]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "27": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "9L", + "ARSOnly": true, + "Angles": "{0 80.2323 0}", + "Pos": "[-2097.5486 -9259.0059 -2164.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "0467" + } + ], + "NonAutoStop": true, + "Left": false + }, + "28": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "9K", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[-5005.7671 -9170.0137 -2164.6455]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "29": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "13A", + "ARSOnly": true, + "Angles": "{1.4743 98.6755 0}", + "Pos": "[9887.6973 -9329.6279 -2164.4973]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "NonAutoStop": true, + "Left": false + }, + "30": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "13B", + "ARSOnly": true, + "Angles": "{2.6576 162.4917 0}", + "Pos": "[12048.3252 -7587.21 -2164.501]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "NonAutoStop": true, + "Left": false + }, + "31": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "13V", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[12220.0137 -2724.3989 -2164.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "NonAutoStop": true, + "Left": false + }, + "32": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "13G", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[12220.0137 7089.8628 -2676.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "NonAutoStop": true, + "Left": false + }, + "33": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "15A", + "ARSOnly": true, + "Angles": "{1.7466 282.6562 0}", + "Pos": "[-3197.9292 12439.6387 -3188.6543]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "NonAutoStop": true, + "Left": false + }, + "34": + { + "LensesStr": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 2, + "Name": "17A", + "ARSOnly": true, + "Angles": "{2.6494 32.4785 0}", + "Pos": "[-4856.5327 3896.885 -3188.4973]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "*", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "35": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "17V", + "ARSOnly": true, + "Angles": "{356.139 351.2332 0}", + "Pos": "[3720.6462 -12249.6133 -3562.6646]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "NonAutoStop": true, + "Left": false + }, + "36": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "19A", + "ARSOnly": true, + "Angles": "{357.55 197.2315 0}", + "Pos": "[-14816.6152 -10589.4521 -4218.5244]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "0467" + } + ], + "NonAutoStop": true, + "Left": false + }, + "37": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "19V", + "ARSOnly": true, + "Angles": "{356.4989 136.3674 0}", + "Pos": "[-13418.1201 -1297.983 -4220.7813]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "0467" + } + ], + "NonAutoStop": true, + "Left": false + }, + "38": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "19G", + "ARSOnly": true, + "Angles": "{360 89.9999 0}", + "Pos": "[-4223.3545 866.2061 -4521.1626]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "0467" + } + ], + "NonAutoStop": true, + "Left": false + }, + "39": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "19D", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[5605.4111 865.7938 -4724.5059]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "40": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "19E", + "ARSOnly": true, + "Angles": "{1.4767 263.1628 0}", + "Pos": "[6729.6665 6972.5039 -4724.4956]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "NonAutoStop": true, + "Left": false + }, + "41": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "19J", + "ARSOnly": true, + "Angles": "{3.3766 327.472 0}", + "Pos": "[-2668.4172 5848.5962 -5235.4912]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "NonAutoStop": true, + "Left": false + }, + "42": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "19Z", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-4253.0127 -3771.2 -5235.5059]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "NonAutoStop": true, + "Left": false + }, + "43": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "19N", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[15429.6133 -1787.7144 -5235.1758]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "0467" + } + ], + "NonAutoStop": true, + "Left": false + }, + "44": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "19L", + "ARSOnly": true, + "Angles": "{0.6915 177.4381 0}", + "Pos": "[15408.457 -4690.7144 -5235.5049]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "45": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "19K", + "ARSOnly": true, + "Angles": "{3.501 136.3687 0}", + "Pos": "[13381.3174 -10027.8223 -5235.5049]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "46": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "MR23A", + "ARSOnly": true, + "Angles": "{2.6371 199.7874 0}", + "Pos": "[15142.0117 10620.2295 -5235.54]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "47": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "MR23B", + "ARSOnly": true, + "Angles": "{2.6381 252.6004 0}", + "Pos": "[13072.6143 12595.1133 -5235.5435]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "48": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "MR23D", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[8187.0674 12834.5859 -5235.5059]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "49": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "PassOcc": true, + "Name": "MR25A", + "ARSOnly": true, + "Angles": "{2.7526 334.1832 0}", + "Pos": "[-15515.8359 -2890.7612 -4723.4834]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "pto1ex+", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + }, + + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "ARSCodes": "04", + "NextSignal": "*", + "Switches": "pto1ex-", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "50": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "MR25B", + "ARSOnly": true, + "Angles": "{0 45 0}", + "Pos": "[-13020.6445 -11675.374 -4723.5059]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "51": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "25V", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[-4713.9307 -15770.0137 -4723.5059]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "52": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "25G", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[5047.9844 -15770.0137 -4723.5059]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "53": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "25D", + "ARSOnly": true, + "Angles": "{1.0862 175.4971 0}", + "Pos": "[12972.8691 -12336.1543 -4723.7856]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "54": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "25E", + "ARSOnly": true, + "Angles": "{1.6885 140.1337 0}", + "Pos": "[14931.124 -3130.0535 -4723.519]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "55": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "27A", + "ARSOnly": true, + "Angles": "{3.3045 239.5849 0}", + "Pos": "[12616.4922 14506.8828 -4723.5044]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "56": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "27B", + "ARSOnly": true, + "Angles": "{0.0001 269.9999 0}", + "Pos": "[3003.5527 15611.9873 -4394.2598]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "0467" + } + ], + "NonAutoStop": true, + "Left": false + }, + "57": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "27V", + "ARSOnly": true, + "Angles": "{3.4508 326.2877 0}", + "Pos": "[-6434.5205 14208.9346 -4211.5342]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "58": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "27G", + "ARSOnly": true, + "Angles": "{2.6381 72.6004 0}", + "Pos": "[-4723.2241 5594.1138 -4211.5303]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "59": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "27D", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[5020.0669 5373.4727 -4211.5059]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "60": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "27E", + "ARSOnly": true, + "Angles": "{0 45 0}", + "Pos": "[12550.0059 -580.1151 -4211.5059]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "61": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "27J", + "ARSOnly": true, + "Angles": "{358.9138 355.4437 0}", + "Pos": "[14839.9248 -9594.7598 -4211.5288]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "62": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "27Z", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[7039.623 -13129.6133 -4211.5059]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "63": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "27L", + "ARSOnly": true, + "Angles": "{359.9998 180 0}", + "Pos": "[-9712.9873 -3442.6948 -3570.0981]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "0467" + } + ], + "NonAutoStop": true, + "Left": false + }, + "64": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "27K", + "ARSOnly": true, + "Angles": "{358.8725 186.1498 0}", + "Pos": "[-9643.082 -6376.3564 -3699.4971]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "0467" + } + ], + "NonAutoStop": true, + "Left": false + }, + "65": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "27I", + "ARSOnly": true, + "Angles": "{357.3929 252.7636 0}", + "Pos": "[-4911.022 -12678.5498 -3699.5024]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "0467" + } + ], + "NonAutoStop": true, + "Left": false + }, + "66": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "31A", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[-9712.8633 9107.042 -3187.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "67": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "31B", + "ARSOnly": true, + "Angles": "{357.9602 168.8177 0}", + "Pos": "[-9614.3877 12103.1924 -3187.4973]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "68": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "31V", + "ARSOnly": true, + "Angles": "{359.176 94.4941 0}", + "Pos": "[-6193.8374 15005.833 -3187.4978]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "69": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "31G", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[3566.7522 14596.0137 -3187.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "70": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "31D", + "ARSOnly": true, + "Angles": "{356.5706 35.5353 0}", + "Pos": "[12489.8477 11703.3457 -3187.5034]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "71": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "31E", + "ARSOnly": true, + "Angles": "{0 0.0001 0}", + "Pos": "[13838.9883 2134.4287 -3181.3667]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "72": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "31J", + "ARSOnly": true, + "Angles": "{359.3085 357.4104 0}", + "Pos": "[13820.3535 -7657.3862 -2675.5227]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "73": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "31Z", + "ARSOnly": true, + "Angles": "{358.0716 281.9478 0}", + "Pos": "[8362.3926 -14825.1445 -2675.5229]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "74": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "31I", + "ARSOnly": true, + "Angles": "{360 272.0656 0}", + "Pos": "[-1363.8595 -15359.1328 -2675.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "75": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "31K", + "ARSOnly": true, + "Angles": "{357.2453 250.8063 0}", + "Pos": "[-11135.126 -14830.8555 -2681.8115]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "76": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "31L", + "ARSOnly": true, + "Angles": "{358.5021 169.6495 0}", + "Pos": "[-15425.6982 -5515.2329 -2675.5105]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "77": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "33A", + "ARSOnly": true, + "Angles": "{357.55 107.2315 0}", + "Pos": "[-9718.5586 14607.0225 -2681.4092]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "78": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "33B", + "ARSOnly": true, + "Angles": "{359.9999 90.0001 0}", + "Pos": "[46.7278 15042.7959 -2444.9177]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "79": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "33V", + "ARSOnly": true, + "Angles": "{357.7126 76.3577 0}", + "Pos": "[9744.7197 14739.3301 -2168.675]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "80": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "33G", + "ARSOnly": true, + "Angles": "{359.7658 1.5129 0}", + "Pos": "[14963.1738 7399.8291 -2164.3311]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "81": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "33D", + "ARSOnly": true, + "Angles": "{1.4382 353.2374 0}", + "Pos": "[13926.999 -2236.2925 -2163.501]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "82": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "33E", + "ARSOnly": true, + "Angles": "{356.9872 336.608 0}", + "Pos": "[13056.3926 -11965.8857 -2170.623]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "83": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "33J", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[4711.3965 -15764.793 -2163.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "0467" + } + ], + "NonAutoStop": true, + "Left": false + }, + "84": + { + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "35", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[-14693.207 3619.9685 -1139.5056]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "046", + "Lights": "", + "NextSignal": "*", + "Switches": "pn1+" + }, + + { + "Emer": true, + "NextSignal": "*", + "ARSCodes": "046", + "Repeater": false, + "Lights": "3-3-1-2", + "Switches": "pn1+", + "RouteName": "656-651", + "Manual": false + }, + + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "ARSCodes": "04", + "NextSignal": "*", + "Switches": "pn1-", + "Manual": false + }, + + { + "Emer": true, + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false, + "Lights": "3-3-1-2", + "Manual": false, + "RouteName": "656-651", + "Switches": "pn1-" + } + ], + "NonAutoStop": true, + "Left": false + }, + "85": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "37B", + "ARSOnly": true, + "Angles": "{356.5305 117.4344 0}", + "Pos": "[-12242.335 14489.6914 -1139.9464]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "86": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "37A", + "ARSOnly": true, + "Angles": "{356.5616 156.9735 0}", + "Pos": "[-14318.543 12442.5439 -1139.9435]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "87": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "37V", + "ARSOnly": true, + "Angles": "{359.9998 90 0}", + "Pos": "[-2565.5728 15497.9863 -914.0064]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "88": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "37GA", + "ARSOnly": true, + "Angles": "{359.0875 87.4103 0}", + "Pos": "[7223.9199 15475.5244 -115.4965]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "89": + { + "LensesStr": "BY-GY-RW-M", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": true, + "Name": "PN39//", + "ARSOnly": false, + "Angles": "{358.2617 10.3786 0}", + "Pos": "[14362.915 9765.1055 -115.5032]", + "DoubleL": false, + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04678", + "Lights": "5-5-1", + "NextSignal": "*", + "Switches": "d1en+" + }, + + { + "Emer": true, + "NextSignal": "*", + "ARSCodes": "04678", + "Manual": false, + "Lights": "5-5-2-3", + "Repeater": false, + "RouteName": "656-651", + "Switches": "d1en+" + }, + + { + "Emer": false, + "NextSignal": "PRED2", + "ARSCodes": "11104", + "Manual": false, + "EnRou": true, + "Lights": "5-5-5-5-52-2b4", + "Repeater": false, + "Switches": "d1en-", + "RouteName": "" + } + ], + "NonAutoStop": false, + "Left": true + }, + "90": + { + "LensesStr": "RY-GR", + "RouteNumber": "1", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "39A", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[14581.7949 10.6821 -115.5057]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "91": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "39B", + "ARSOnly": true, + "Angles": "{357.3929 342.7636 0}", + "Pos": "[14128.335 -9806.9619 -115.2595]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "92": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "41V", + "ARSOnly": true, + "Angles": "{356.4989 226.3674 0}", + "Pos": "[-12925.3867 -12236.5059 -123.7936]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "0467" + } + ], + "NonAutoStop": true, + "Left": false + }, + "93": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "41E", + "ARSOnly": true, + "Angles": "{0.0014 69.6571 0}", + "Pos": "[-7940.6318 -307.7884 -627.4991]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "94": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "41G", + "ARSOnly": true, + "Angles": "{355.2998 160.8282 0}", + "Pos": "[-14714.8125 -1932.3062 -573.3409]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "95": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "41D", + "ARSOnly": true, + "Angles": "{359.2094 87.9859 0}", + "Pos": "[-10806.0879 227.7839 -627.4885]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "96": + { + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "43A", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[-1606.2295 -896 -627.5056]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "046", + "Lights": "", + "NextSignal": "1M", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "97": + { + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "5A", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[2303.8665 11120.207 -1140.5056]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "046", + "Lights": "", + "NextSignal": "*", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "98": + { + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "11A", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[4555.4336 -9381 -2164.5056]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "046", + "Lights": "", + "NextSignal": "*", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "99": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "35A", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[-14693 7250.1479 -1139.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": true + }, + "100": + { + "RouteNumberSetup": "XXK", + "LensesStr": "BYG-RW-M", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "37G", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[-14693 9570.875 -1139.5056]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "4-4-1", + "NextSignal": "*", + "Switches": "" + }, + + { + "Repeater": false, + "RouteName": "656-651", + "Emer": true, + "Lights": "4-4-2-3", + "NextSignal": "*", + "ARSCodes": "04", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "101": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "29A", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[-9713 3712.9666 -3187.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": true + }, + "102": + { + "Approve0": true, + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "31", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[-9713 6191.2544 -3187.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04" + }, + + { + "Manual": false, + "RouteName": "655-656", + "Emer": true, + "Lights": "3-3-1-2", + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "103": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "1E", + "ARSOnly": true, + "Angles": "{3.3045 239.585 0}", + "Pos": "[12207.6611 12757.7549 -627.5058]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "104": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "1J", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[2437.7014 13944.207 -627.4187]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "105": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "1Z", + "ARSOnly": true, + "Angles": "{2.8875 291.2296 0}", + "Pos": "[-7340.0176 13453.165 -627.3826]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "106": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "1K", + "ARSOnly": true, + "Angles": "{1.1275 6.1758 0}", + "Pos": "[-11437.2969 -6761.916 -1139.567]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "107": + { + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "3", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-2291.1904 -13516.7129 -1140.0256]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + }, + + { + "Manual": false, + "RouteName": "651-652", + "Emer": true, + "Lights": "3-3-1-2", + "NextSignal": "*", + "ARSCodes": "04678", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "108": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "3A", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[7425.5376 -13949.0137 -1140.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "109": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "3B", + "ARSOnly": true, + "Angles": "{2.1114 168.0487 0}", + "Pos": "[15894.9307 -8341.1406 -1140.4315]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "0467" + } + ], + "NonAutoStop": true, + "Left": false + }, + "110": + { + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "9", + "ARSOnly": false, + "Angles": "{0.0001 182.4908 0}", + "Pos": "[14087.252 3378.0503 -1653.3757]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + }, + + { + "Repeater": false, + "RouteName": "652-653", + "Emer": true, + "Lights": "3-3-1-2", + "NextSignal": "*", + "ARSCodes": "04678", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "111": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "17B", + "ARSOnly": true, + "Angles": "{0 45 0}", + "Pos": "[2026.7772 -3114.3779 -3188.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "NonAutoStop": true, + "Left": false + }, + "112": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "21A", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[15430 5311.6826 -5235.5059]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "113": + { + "RouteNumberSetup": "XXW", + "LensesStr": "BY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "PN35A", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[-14693.207 -420.8178 -1139.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "pn1+", + "Lights": "4-4-1", + "NextSignal": "*", + "ARSCodes": "0467" + }, + + { + "Emer": true, + "NextSignal": "*", + "ARSCodes": "0467", + "Manual": false, + "Lights": "4-4-2-3", + "Switches": "pn1-", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "114": + { + "Approve0": true, + "LensesStr": "WYG-RW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": true, + "Name": "PA1//", + "ARSOnly": false, + "Angles": "{359.3766 5.4135 0}", + "Pos": "[14930.7627 -11512.3652 396.55]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "4-2-3", + "NextSignal": "PA3", + "ARSCodes": "04" + } + ], + "NonAutoStop": false, + "Left": true + }, + "115": + { + "LensesStr": "RY-GR", + "RouteNumber": "1", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "41B", + "ARSOnly": true, + "Angles": "{0 267.499 0}", + "Pos": "[-3523.0483 -14221.6719 -115.5057]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "d1ex+", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + }, + + { + "Manual": false, + "Switches": "d1ex-", + "Emer": false, + "ARSCodes": "04", + "NextSignal": "*", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "116": + { + "RouteNumberSetup": "XXW", + "LensesStr": "BY-GR", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PA41", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[6360.999 -14601.2559 -115.4056]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04678", + "Lights": "4-4-1", + "NextSignal": "*", + "Switches": "d1ex+" + }, + + { + "Emer": true, + "NextSignal": "*", + "ARSCodes": "04678", + "Repeater": false, + "Lights": "4-4-2-3", + "Switches": "d1ex+", + "RouteName": "656-651", + "Manual": false + }, + + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "2", + "Repeater": false, + "Lights": "4", + "Manual": false, + "RouteName": "", + "Switches": "d1ex-" + } + ], + "NonAutoStop": false, + "Left": false + }, + "117": + { + "Approve0": true, + "LensesStr": "WY-GR-W", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Double": false, + "Name": "E2M", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[4650.7534 -8565.1934 791.4944]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false, + "RouteName": "E2-PN3", + "Lights": "4-2-3", + "Switches": "", + "Manual": true + } + ], + "NonAutoStop": false, + "Left": false + }, + "118": + { + "Approve0": true, + "LensesStr": "YWY-RW-M", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "PN3D", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[14954.3926 100.0214 -115.5056]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "PN3A", + "ARSCodes": "2224", + "Repeater": false, + "EnRou": true, + "Lights": "4-4-4-13-1b3", + "Switches": "d3ex2-,d2ex-", + "RouteName": "", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "119": + { + "Approve0": true, + "LensesStr": "WYG-RW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "PN1", + "ARSOnly": false, + "Angles": "{3.0176 157.7238 0}", + "Pos": "[14660.7891 -7025.7778 395.9499]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "PN3D", + "ARSCodes": "04", + "Repeater": false, + "Switches": "", + "Lights": "4-2-3", + "RouteName": "E2-PN3", + "Manual": true + } + ], + "NonAutoStop": false, + "Left": false + }, + "120": + { + "RouteNumberSetup": "2DXW", + "LensesStr": "BYG-YR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "PA4", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[366.9764 -15608.793 -115.5056]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "EnRou": false, + "ARSCodes": "04678", + "Lights": "5-1", + "NextSignal": "*", + "Switches": "d2en+", + "Repeater": false + }, + + { + "Emer": true, + "NextSignal": "*", + "ARSCodes": "046", + "Repeater": false, + "EnRou": false, + "Lights": "5-5-2-3", + "RouteName": "651-656", + "Switches": "d2en+", + "Manual": false + }, + + { + "Emer": false, + "NextSignal": "PRED1", + "ARSCodes": "22204", + "Repeater": false, + "EnRou": true, + "Lights": "5-5-5-5-25-2b4q", + "Manual": false, + "RouteName": "", + "Switches": "d2en-,d3ex1-" + } + ], + "NonAutoStop": false, + "Left": false + }, + "121": + { + "LensesStr": "BYG-RW", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "PN8", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[-15701 9646.7178 -1139.5056]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "046", + "Lights": "4-1", + "NextSignal": "*", + "Switches": "" + }, + + { + "Repeater": false, + "RouteName": "656-651", + "Emer": true, + "Lights": "4-4-2-3", + "NextSignal": "*", + "ARSCodes": "04", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "122": + { + "Approve0": true, + "RouteNumberSetup": "13KW", + "LensesStr": "BWY-GR", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PN10G", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[-15701 3887.1646 -1139.5056]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "5-5-1", + "NextSignal": "*", + "Switches": "pn2+" + }, + + { + "Emer": true, + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false, + "Lights": "5-5-3-4", + "Manual": false, + "Switches": "pn2+", + "RouteName": "656-655" + }, + + { + "Emer": false, + "NextSignal": "PN2", + "ARSCodes": "4", + "Repeater": false, + "EnRou": true, + "Lights": "5-5-5-2", + "Manual": false, + "Switches": "pn2-,pn3+", + "RouteName": "" + } + ], + "NonAutoStop": false, + "Left": false + }, + "123": + { + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "14", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[-10721 6102.9199 -3187.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + }, + + { + "Manual": false, + "RouteName": "656-655", + "Emer": true, + "Lights": "3-3-1-2", + "NextSignal": "*", + "ARSCodes": "046", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "124": + { + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "26", + "ARSOnly": false, + "Angles": "{0.0004 0.595 0}", + "Pos": "[14420.916 7997.3105 -5235.5376]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "06", + "Lights": "", + "NextSignal": "*", + "Switches": "" + }, + + { + "Repeater": false, + "RouteName": "654-653", + "Emer": true, + "Lights": "3-3-1-2", + "NextSignal": "*", + "ARSCodes": "06", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "125": + { + "Approve0": true, + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "28", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[14422.0059 1701.7679 -5235.4458]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "*", + "Switches": "" + }, + + { + "Repeater": false, + "RouteName": "653-652", + "Emer": true, + "Lights": "3-3-1-2", + "NextSignal": "*", + "ARSCodes": "04", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "126": + { + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "34", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[6702.5664 -8373 -2164.5056]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "*", + "Switches": "" + }, + + { + "Repeater": false, + "RouteName": "653-652", + "Emer": true, + "Lights": "3-3-1-2", + "NextSignal": "*", + "ARSCodes": "04", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "127": + { + "RouteNumberSetup": "", + "LensesStr": "BY-GRW", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "PK40", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-2391.4861 10112.2109 -1140.2556]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "4-4-1", + "NextSignal": "*", + "Switches": "pk2+" + }, + + { + "Emer": true, + "NextSignal": "*", + "ARSCodes": "04", + "Manual": false, + "Lights": "4-4-2-3", + "Repeater": false, + "RouteName": "652-651", + "Switches": "pk2+" + } + ], + "NonAutoStop": true, + "Left": false + }, + "128": + { + "Approve0": true, + "LensesStr": "RY-GR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "42", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[5496.5396 10111.793 -1140.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04" + }, + + { + "Repeater": false, + "RouteName": "652-651", + "Emer": true, + "Lights": "4-4-2-3", + "NextSignal": "*", + "ARSCodes": "04", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "129": + { + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "46", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[1380.0414 112 -627.5056]", + "Routes": + [ + + { + "Repeater": false, + "ARSCodes": "046", + "Manual": false, + "Lights": "", + "NextSignal": "PA2", + "Switches": "", + "RouteName": "" + }, + + { + "Repeater": false, + "RouteName": "652-651", + "Emer": true, + "Lights": "3-3-1-2", + "NextSignal": "1M", + "ARSCodes": "046", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "130": + { + "Approve0": true, + "RouteNumberSetup": "DXW", + "LensesStr": "BY-GR", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PA2", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-4469.3188 112 -627.5056]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "Switches": "", + "Lights": "4-4-1", + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false + }, + + { + "Emer": true, + "NextSignal": "*", + "ARSCodes": "04", + "Manual": false, + "EnRou": true, + "Lights": "4-4-2-3", + "RouteName": "651-656", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "131": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PA2A", + "ARSOnly": true, + "Angles": "{0 265.0969 0}", + "Pos": "[-7356.0566 469.0204 -627.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "132": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PA2B", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-10287.8164 496.2062 -627.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "133": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PA2V", + "ARSOnly": true, + "Angles": "{3.8768 329.4458 0}", + "Pos": "[-14641.7637 -1115.1926 -596.0816]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "134": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PA2G", + "ARSOnly": true, + "Angles": "{3.0123 25.6355 0}", + "Pos": "[-14366.3643 -10634.542 -108.6775]", + "Routes": + [ + + { + "Repeater": false, + "Switches": "", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "135": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PA2D", + "ARSOnly": true, + "Angles": "{1.3371 83.8219 0}", + "Pos": "[-8507.0098 -14394.4141 -112.6341]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "136": + { + "RouteNumberSetup": "", + "LensesStr": "RY-GR", + "RouteNumber": "2", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "PA4A", + "ARSOnly": true, + "Angles": "{2.111 103.6321 0}", + "Pos": "[10170.9004 -15323.2148 -115.2545]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "137": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "PA4B", + "ARSOnly": true, + "Angles": "{0.6915 177.4383 0}", + "Pos": "[15573.4932 -8120.8433 -115.2581]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "138": + { + "RouteNumberSetup": "", + "LensesStr": "BYG-RW", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PA6", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[15590.0938 2746.7346 -115.5056]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04678", + "Lights": "4-4-1", + "NextSignal": "*", + "Switches": "d2ex+" + }, + + { + "Emer": true, + "NextSignal": "*", + "ARSCodes": "04678", + "Repeater": false, + "Lights": "4-4-2-3", + "Switches": "d2ex+", + "RouteName": "656-651", + "Manual": false + }, + + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "2", + "Repeater": false, + "Lights": "4", + "Manual": false, + "RouteName": "", + "Switches": "d2ex-" + } + ], + "NonAutoStop": false, + "Left": false + }, + "139": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "6A", + "ARSOnly": true, + "Angles": "{3.2201 207.9805 0}", + "Pos": "[14631.6924 12476.8213 -115.5023]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "Switches": "d2ex+", + "ARSCodes": "04678" + }, + + { + "Manual": false, + "Switches": "d2ex-", + "Emer": false, + "ARSCodes": "04", + "NextSignal": "*", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "140": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "6B", + "ARSOnly": true, + "Angles": "{360 270 0}", + "Pos": "[6172.5283 16026.0137 -123.2399]", + "Routes": + [ + + { + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "141": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "6D", + "ARSOnly": true, + "Angles": "{3.4999 339.7786 0}", + "Pos": "[-15427.373 12622.8672 -1139.9473]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "142": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "6V", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-6197.8564 16025.7559 -1139.4556]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "0467", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "143": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "6G", + "ARSOnly": true, + "Angles": "{3.4999 294.7786 0}", + "Pos": "[-12359.4199 15731.0654 -1139.9456]", + "Routes": + [ + + { + "Repeater": false, + "Switches": "", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "144": + { + "LensesStr": "RY-GR", + "RouteNumber": "1", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "10A", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-15700.4883 985.9811 -1139.5056]", + "Routes": + [ + + { + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "145": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "10B", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-15701.207 -1978.9127 -1139.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "146": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "10V", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-15701.2051 -11798.6475 -1651.5056]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "147": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "10D", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[-8926.8096 -16029.2061 -1651.5056]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "148": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "10E", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[830.8459 -16028.7949 -2103.2959]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "149": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "10J", + "ARSOnly": true, + "Angles": "{3.1232 117.9828 0}", + "Pos": "[10503.6123 -15047.334 -2156.447]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "150": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "10Z", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[14104.7939 -6546.4976 -2163.5056]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "151": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "10I", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[15232.7949 3150.0242 -2163.5056]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "152": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "10K", + "ARSOnly": true, + "Angles": "{3.4299 218.1966 0}", + "Pos": "[13630.3418 12672.7051 -2155.8018]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "153": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "10L", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[4589.7417 15307.207 -2163.5056]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "154": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "10M", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-5220.9893 15307.207 -2675.5056]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "155": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "10N", + "ARSOnly": true, + "Angles": "{3.2197 332.0107 0}", + "Pos": "[-13728.2119 11719.0508 -2668.4351]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "156": + { + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "12", + "ARSOnly": false, + "Angles": "{1.4749 349.7054 0}", + "Pos": "[-15702.6387 2219.637 -2675.4998]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + }, + + { + "Manual": false, + "RouteName": "656-655", + "Emer": true, + "Lights": "3-3-1-2", + "NextSignal": "*", + "ARSCodes": "04678", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "157": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "12A", + "ARSOnly": true, + "Angles": "{0.2342 0.5031 0}", + "Pos": "[-15842.998 -7573.0703 -2674.9995]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "158": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "12B", + "ARSOnly": true, + "Angles": "{2.6064 72.7568 0}", + "Pos": "[-10891.998 -15186.1934 -2669.96]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "159": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "12V", + "ARSOnly": true, + "Angles": "{0 89.2628 0}", + "Pos": "[-1108.0657 -15627.8252 -2675.5056]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "160": + { + "RouteNumberSetup": "", + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "12G", + "ARSOnly": true, + "Angles": "{1.5411 98.9133 0}", + "Pos": "[8680.4463 -15665.1484 -2675.5181]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "161": + { + "RouteNumberSetup": "", + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "12D", + "ARSOnly": true, + "Angles": "{1.3378 173.8473 0}", + "Pos": "[14788.0469 -9099.8145 -2675.52]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "162": + { + "RouteNumberSetup": "", + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "12E", + "ARSOnly": true, + "Angles": "{359.9999 180 0}", + "Pos": "[14862.9863 733.0583 -3048.9392]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "163": + { + "RouteNumberSetup": "", + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "12J", + "ARSOnly": true, + "Angles": "{2.4507 195.3844 0}", + "Pos": "[14454.4238 10500.4834 -3187.5034]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "164": + { + "RouteNumberSetup": "", + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "12Z", + "ARSOnly": true, + "Angles": "{0.2353 269.5325 0}", + "Pos": "[6833.3149 15442.5781 -3187.5012]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "165": + { + "RouteNumberSetup": "", + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "12L", + "ARSOnly": true, + "Angles": "{0.5577 358.2193 0}", + "Pos": "[-10717.876 11988.3584 -3187.4961]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "166": + { + "RouteNumberSetup": "", + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "12M", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-10721.4141 9075.1367 -3187.3955]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "167": + { + "RouteNumberSetup": "", + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "12K", + "ARSOnly": true, + "Angles": "{2.2507 285.1986 0}", + "Pos": "[-8205.6191 15683.5313 -3187.5005]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "168": + { + "RouteNumberSetup": "", + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "12I", + "ARSOnly": true, + "Angles": "{0.7474 265.7512 0}", + "Pos": "[-1020.4178 15846.9668 -3187.6082]", + "Routes": + [ + + { + "Repeater": false, + "Switches": "", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "169": + { + "Approve0": true, + "LensesStr": "WY-GR-W", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Double": false, + "Name": "E1M", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[4652.0928 -8828.793 790.9343]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "4-2-3", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "NonAutoStop": false, + "Left": false + }, + "170": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "9Z", + "ARSOnly": true, + "Angles": "{3.501 43.6262 0}", + "Pos": "[-11745.1777 -6999.8223 -2164.2756]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "171": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "9G", + "ARSOnly": true, + "Angles": "{0 359.9999 0}", + "Pos": "[-13677.0117 3686.865 -1741.1676]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "172": + { + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "19", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[-6021.563 -15245.207 -4212.5059]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "0", + "NextSignal": "*", + "Switches": "" + }, + + { + "Manual": false, + "RouteName": "653-654", + "Emer": true, + "Lights": "3-3-1-2", + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "173": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "19I", + "ARSOnly": true, + "Angles": "{1.3378 83.8474 0}", + "Pos": "[2302.592 -11983.668 -5235.5054]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "174": + { + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "33", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[-14453.2051 5343.9365 -2675.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + }, + + { + "Manual": false, + "RouteName": "655-656", + "Emer": true, + "Lights": "3-3-1-2", + "NextSignal": "*", + "ARSCodes": "04678", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "175": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "33Z", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-7592.2832 -15765.2051 -1651.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "176": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "18A", + "ARSOnly": true, + "Angles": "{0.0002 0.0001 0}", + "Pos": "[-10720.9893 -2461.6128 -3453.5613]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "177": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "18B", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-10721.0137 -5407.0581 -3699.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "178": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "18V", + "ARSOnly": true, + "Angles": "{3.0109 23.3825 0}", + "Pos": "[-9970.7959 -10166.252 -3699.5024]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "179": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "18G", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[-1681.2679 -14154.0137 -3699.4956]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "180": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "18D", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[8102.6763 -14154.4141 -4211.5059]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "0467" + } + ], + "NonAutoStop": true, + "Left": false + }, + "181": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "18E", + "ARSOnly": true, + "Angles": "{0.8261 178.2193 0}", + "Pos": "[15877.7139 -10391.8477 -4211.5303]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "182": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "18J", + "ARSOnly": true, + "Angles": "{0 225 0}", + "Pos": "[14856.8066 -838.9152 -4211.5059]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "183": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "18Z", + "ARSOnly": true, + "Angles": "{3.4695 242.5713 0}", + "Pos": "[7758.1025 5962.8408 -4211.5039]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "184": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "18I", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-1943.9003 6396.8125 -4211.5059]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "185": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "18K", + "ARSOnly": true, + "Angles": "{356.51 139.9078 0}", + "Pos": "[-5253.6089 13386.1797 -4211.5352]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "186": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "18L", + "ARSOnly": true, + "Angles": "{360 90.0001 0}", + "Pos": "[4202.5825 14588.3867 -4415.2202]", + "Routes": + [ + + { + "Repeater": false, + "Switches": "", + "Emer": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "187": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "18N", + "ARSOnly": true, + "Angles": "{356.499 43.6253 0}", + "Pos": "[13464.0098 12407.6602 -4723.5059]", + "Routes": + [ + + { + "Repeater": false, + "Switches": "", + "Emer": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "188": + { + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "20", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[15386.0137 2765.3491 -4723.5059]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + }, + + { + "Manual": false, + "RouteName": "655-656", + "Emer": true, + "Lights": "3-3-1-2", + "NextSignal": "*", + "ARSCodes": "046", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "189": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "20A", + "ARSOnly": true, + "Angles": "{2.1581 351.0508 0}", + "Pos": "[12520.5762 -6153.5659 -4723.5176]", + "Routes": + [ + + { + "Repeater": false, + "Switches": "", + "Emer": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "190": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "20B", + "ARSOnly": true, + "Angles": "{357.9615 283.0747 0}", + "Pos": "[9792.7451 -14609.6641 -4723.5293]", + "Routes": + [ + + { + "Repeater": false, + "Switches": "", + "Emer": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "191": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "20V", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[42.4431 -14756.2051 -4723.5059]", + "Routes": + [ + + { + "Repeater": false, + "Switches": "", + "Emer": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "192": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "20G", + "ARSOnly": true, + "Angles": "{359.3085 222.4103 0}", + "Pos": "[-10083.4111 -9999.8311 -4723.936]", + "Routes": + [ + + { + "Repeater": false, + "Switches": "", + "Emer": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "193": + { + "Approve0": true, + "RouteNumberSetup": "42XW", + "LensesStr": "BW-YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MR22", + "ARSOnly": false, + "Angles": "{359.7652 136.4851 0}", + "Pos": "[-10016.71 831.5759 -4723.939]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "5-5-1", + "NextSignal": "*", + "Switches": "pto2en+" + }, + + { + "Emer": true, + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false, + "Lights": "5-5-3-4", + "Manual": false, + "RouteName": "655-654", + "Switches": "pto2en+" + }, + + { + "Emer": false, + "NextSignal": "MR2A", + "ARSCodes": "004", + "Manual": false, + "EnRou": true, + "Lights": "5-5-1", + "Switches": "pto2en-", + "RouteName": "", + "Repeater": false + }, + + { + "Emer": true, + "NextSignal": "MR2A", + "ARSCodes": "004", + "Manual": false, + "EnRou": true, + "Lights": "5-5-2", + "Switches": "pto2en-", + "RouteName": "655-654", + "Repeater": false + } + ], + "NonAutoStop": false, + "Left": true + }, + "194": + { + "Approve0": true, + "RouteNumberSetup": "XXW", + "LensesStr": "BY-GR", + "RouteNumber": "2", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MR24", + "ARSOnly": false, + "Angles": "{0 135 0}", + "Pos": "[-3055.0298 7803.4512 -4724.3657]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "pto2ex+", + "Lights": "4-4-1", + "NextSignal": "*", + "ARSCodes": "046" + }, + + { + "Emer": true, + "NextSignal": "*", + "ARSCodes": "046", + "Repeater": false, + "Lights": "4-4-2-3", + "RouteName": "654-655", + "Switches": "pto2ex+", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "195": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "24V", + "ARSOnly": true, + "Angles": "{356.5449 40.0732 0}", + "Pos": "[13521.166 10815.5908 -5235.5347]", + "Routes": + [ + + { + "Repeater": false, + "ARSCodes": "046", + "Emer": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "196": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "24B", + "ARSOnly": true, + "Angles": "{358.9138 85.4437 0}", + "Pos": "[10893.8096 11949.1865 -5235.5396]", + "Routes": + [ + + { + "Repeater": false, + "ARSCodes": "046", + "Emer": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "197": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "24A", + "ARSOnly": true, + "Angles": "{360 90 0}", + "Pos": "[5670.5532 11970.9883 -4973.5527]", + "Routes": + [ + + { + "Repeater": false, + "ARSCodes": "046", + "Emer": false, + "Lights": "", + "NextSignal": "*", + "Switches": "pto2ex+", + "Manual": false + }, + + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "ARSCodes": "04", + "NextSignal": "*", + "Switches": "pto2ex-", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "198": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "28A", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[14421.9141 -1122.6439 -5235.5059]", + "Routes": + [ + + { + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "0467" + } + ], + "NonAutoStop": true, + "Left": false + }, + "199": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "28B", + "ARSOnly": true, + "Angles": "{358.8721 355.0835 0}", + "Pos": "[14369.8779 -4117.9194 -5235.501]", + "Routes": + [ + + { + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "0467" + } + ], + "NonAutoStop": true, + "Left": false + }, + "200": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "28V", + "ARSOnly": true, + "Angles": "{356.5071 319.094 0}", + "Pos": "[12697.9727 -8664.46 -5235.5054]", + "Routes": + [ + + { + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "0467" + } + ], + "NonAutoStop": true, + "Left": false + }, + "201": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "28G", + "ARSOnly": true, + "Angles": "{358.4584 262.4901 0}", + "Pos": "[3510.241 -10951.749 -5235.5024]", + "Routes": + [ + + { + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "0467" + } + ], + "NonAutoStop": true, + "Left": false + }, + "202": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "28D", + "ARSOnly": true, + "Angles": "{358.8725 186.1498 0}", + "Pos": "[-2775.8975 -4445.1289 -5235.501]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "0467", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "203": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "28E", + "ARSOnly": true, + "Angles": "{356.9768 156.9637 0}", + "Pos": "[-2620.8008 5364.8999 -5248.7783]", + "Routes": + [ + + { + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "204": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "28J", + "ARSOnly": true, + "Angles": "{358.8136 83.1446 0}", + "Pos": "[6615.126 6720.3765 -4730.0039]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "205": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "28Z", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[4879.0825 1129.7938 -4724.5059]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "206": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "28I", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-4953.8594 1129.7939 -4433.2681]", + "Routes": + [ + + { + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "207": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "28L", + "ARSOnly": true, + "Angles": "{3.4689 321.7973 0}", + "Pos": "[-13962.5879 -1534.8744 -4204.8135]", + "Routes": + [ + + { + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "208": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "28N", + "ARSOnly": true, + "Angles": "{2.6083 19.1882 0}", + "Pos": "[-14973.2344 -10953.4805 -4206.4619]", + "Routes": + [ + + { + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "209": + { + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "30", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-7083.9302 -15509.207 -4212.5059]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04678", + "Lights": "", + "NextSignal": "*", + "Switches": "" + }, + + { + "Manual": false, + "RouteName": "653-652", + "Emer": true, + "Lights": "3-3-1-2", + "NextSignal": "*", + "ARSCodes": "04678", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "210": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "30A", + "ARSOnly": true, + "Angles": "{3.0052 124.3281 0}", + "Pos": "[2578.1296 -14833.9863 -3700.0161]", + "Routes": + [ + + { + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "0467" + } + ], + "NonAutoStop": true, + "Left": false + }, + "211": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "30B", + "ARSOnly": true, + "Angles": "{3.1583 192.8169 0}", + "Pos": "[3915.0208 -5491.8193 -3188.4861]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "212": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "30V", + "ARSOnly": true, + "Angles": "{0 225 0}", + "Pos": "[-2518.6992 1804.4349 -3188.5056]", + "Routes": + [ + + { + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "213": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "30G", + "ARSOnly": true, + "Angles": "{356.492 138.5408 0}", + "Pos": "[-4523.0571 10561.8213 -3189.3616]", + "Routes": + [ + + { + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "214": + { + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "32", + "ARSOnly": false, + "Angles": "{0.0002 90 0}", + "Pos": "[5160.1606 11082.0117 -2744.3271]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "*", + "Switches": "" + }, + + { + "Manual": false, + "RouteName": "653-652", + "Emer": true, + "Lights": "3-3-1-2", + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "215": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "32A", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[11212.0137 7124.5771 -2676.5056]", + "Routes": + [ + + { + "Repeater": false, + "Switches": "", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "216": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "32B", + "ARSOnly": true, + "Angles": "{360 359.9999 0}", + "Pos": "[11212.0137 -1049.9852 -2169.9951]", + "Routes": + [ + + { + "Repeater": false, + "Switches": "", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "217": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "32V", + "ARSOnly": true, + "Angles": "{358.5249 353.1621 0}", + "Pos": "[11175.9199 -5925.9189 -2164.5002]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "218": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "32G", + "ARSOnly": true, + "Angles": "{357.3429 290.1481 0}", + "Pos": "[9629.4941 -8128.145 -2164.5034]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "219": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "36A", + "ARSOnly": true, + "Angles": "{0 274.8789 0}", + "Pos": "[-1711.6523 -8399.3643 -2164.5056]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "220": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "36B", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-4627.8813 -8503.0137 -2164.6455]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "221": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "36V", + "ARSOnly": true, + "Angles": "{356.8778 244.3625 0}", + "Pos": "[-9405.6973 -7648.9927 -2165.5037]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "222": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "36G", + "ARSOnly": true, + "Angles": "{359.9999 180 0}", + "Pos": "[-13164.9883 773.7103 -2081.6804]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "223": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "36D", + "ARSOnly": true, + "Angles": "{356.5309 141.798 0}", + "Pos": "[-11632.4297 10358.4814 -1653.5448]", + "Routes": + [ + + { + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "04678" + } + ], + "NonAutoStop": true, + "Left": false + }, + "224": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "36E", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[-2590.8279 12998.5137 -1653.3756]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "225": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "36J", + "ARSOnly": true, + "Angles": "{358.2612 81.0835 0}", + "Pos": "[7260.8276 12858.1602 -1653.1895]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "226": + { + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "38", + "ARSOnly": false, + "Angles": "{358.8725 6.1498 0}", + "Pos": "[13389.3242 6212.1162 -1653.1859]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04678", + "Lights": "", + "NextSignal": "*", + "Switches": "" + }, + + { + "Repeater": false, + "RouteName": "652-651", + "Emer": true, + "Lights": "3-3-1-2", + "NextSignal": "*", + "ARSCodes": "04678", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "227": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "38A", + "ARSOnly": true, + "Angles": "{357.8886 348.0261 0}", + "Pos": "[13355.499 -3661.8933 -1653.4696]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "228": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "38B", + "ARSOnly": true, + "Angles": "{359.309 273.6918 0}", + "Pos": "[6309.291 -9310.2725 -1653.4692]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "229": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "38V", + "ARSOnly": true, + "Angles": "{357.2472 250.8125 0}", + "Pos": "[-3431.3704 -8781.3672 -1141.2037]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "230": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "38D", + "ARSOnly": true, + "Angles": "{356.8422 192.7758 0}", + "Pos": "[-9819.1934 5659.7788 -1140.4998]", + "Routes": + [ + + { + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "231": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "38G", + "ARSOnly": true, + "Angles": "{359.5348 182.5592 0}", + "Pos": "[-7897.6548 -1846.7318 -1141.1989]", + "Routes": + [ + + { + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "0467" + } + ], + "NonAutoStop": true, + "Left": false + }, + "232": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "38J", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[-5213.3105 10112.1074 -1140.2556]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": true + }, + "233": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "38E", + "ARSOnly": true, + "Angles": "{357.7714 105.0317 0}", + "Pos": "[-8056.7051 9972.6035 -1140.4989]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "234": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "42A", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[8423.4883 10111.9863 -1140.5056]", + "Routes": + [ + + { + "Repeater": false, + "ARSCodes": "046", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "235": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "42B", + "ARSOnly": true, + "Angles": "{357.1909 70.1984 0}", + "Pos": "[11332.4043 9838.7773 -1140.501]", + "Routes": + [ + + { + "Repeater": false, + "ARSCodes": "046", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "236": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "42V", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[13587.9863 5913.8179 -1140.5056]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "237": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "42G", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[15635.9863 -3412.738 -1140.5056]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "238": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "42D", + "ARSOnly": true, + "Angles": "{356.6257 302.9336 0}", + "Pos": "[12528.0713 -12227.9111 -1140.5029]", + "Routes": + [ + + { + "Repeater": false, + "ARSCodes": "04678", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "239": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "42E", + "ARSOnly": true, + "Angles": "{359.0208 255.132 0}", + "Pos": "[2916.1804 -13246.9863 -1140.5079]", + "Routes": + [ + + { + "Repeater": false, + "ARSCodes": "04678", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "240": + { + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "44", + "ARSOnly": false, + "Angles": "{357.1122 248.7655 0}", + "Pos": "[-6795.3862 -12340.3076 -1140.5045]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04678" + }, + + { + "Manual": false, + "RouteName": "652-651", + "Emer": true, + "Lights": "3-3-1-2", + "NextSignal": "*", + "ARSCodes": "04678", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "241": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "44A", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[-10988.0117 -4235.1738 -1140.5056]", + "Routes": + [ + + { + "Repeater": false, + "ARSCodes": "04678", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "242": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "44B", + "ARSOnly": true, + "Angles": "{359.7647 179.5035 0}", + "Pos": "[-10986.8809 5533.8574 -627.4998]", + "Routes": + [ + + { + "Repeater": false, + "ARSCodes": "04678", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "243": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "44V", + "ARSOnly": true, + "Angles": "{357.5497 107.2319 0}", + "Pos": "[-6086.8252 13179.2949 -627.4893]", + "Routes": + [ + + { + "Repeater": false, + "ARSCodes": "04678", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "244": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "44G", + "ARSOnly": true, + "Angles": "{0 87.499 0}", + "Pos": "[3698.0957 13425.2012 -627.4187]", + "Routes": + [ + + { + "Repeater": false, + "ARSCodes": "04678", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "245": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "44D", + "ARSOnly": true, + "Angles": "{356.531 38.191 0}", + "Pos": "[12765.5938 10834.5977 -627.5046]", + "Routes": + [ + + { + "Repeater": false, + "ARSCodes": "04678", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "246": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "44I", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[4305.5698 -71.7938 -627.5056]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "247": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "44Z", + "ARSOnly": true, + "Angles": "{1.1711 230.1575 0}", + "Pos": "[6952.0718 -1147.6818 -627.4854]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "248": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "44J", + "ARSOnly": true, + "Angles": "{358.6629 277.5919 0}", + "Pos": "[11237.5576 -2899.7024 -627.4102]", + "Routes": + [ + + { + "Repeater": false, + "ARSCodes": "046", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "RouteName": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "249": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "44E", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[14344.207 2849.2222 -627.4187]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "0467", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "250": + { + "Approve0": true, + "RouteNumberSetup": "XXW", + "LensesStr": "BWY-GR", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PK7M", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[177.4644 11120.207 -1140.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Repeater": false, + "Lights": "5-5-1", + "NextSignal": "*", + "Switches": "pk1+", + "RouteName": "" + }, + + { + "Emer": true, + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false, + "Lights": "5-5-3-4", + "RouteName": "652-653", + "Switches": "pk1+", + "Manual": false + } + ], + "Left": false + }, + "251": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "7V", + "ARSOnly": true, + "Angles": "{2.6576 342.4917 0}", + "Pos": "[-10314.0762 9289.0127 -1140.4983]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "NonAutoStop": true, + "Left": false + }, + "252": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "7A", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-2870.4607 11119.793 -1140.2556]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "NonAutoStop": true, + "Left": false + }, + "253": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "7B", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-5826.4575 11120.3008 -1140.4111]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "NonAutoStop": true, + "Left": false + }, + "254": + { + "Approve0": true, + "RouteNumberSetup": "W2", + "LensesStr": "WR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "PA3", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[6309.1606 -14973.207 -115.5056]", + "Routes": + [ + + { + "Repeater": false, + "EnRou": true, + "Switches": "d3ex1+,d1ex-", + "Lights": "2-2-1", + "NextSignal": "41BO", + "ARSCodes": "004", + "Manual": false + }, + + { + "Emer": false, + "NextSignal": "OP1D", + "ARSCodes": "0", + "Repeater": false, + "Lights": "2", + "RouteName": "", + "Switches": "d3ex1-", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "255": + { + "Approve0": true, + "RouteNumberSetup": "", + "LensesStr": "GRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "D1", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[6705.6284 -14973.207 -115.5056]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "D3M", + "ARSCodes": "04", + "Manual": true, + "Lights": "2-2-1", + "Repeater": false, + "Switches": "" + } + ], + "NonAutoStop": false, + "Left": false + }, + "256": + { + "Approve0": true, + "RouteNumberSetup": "", + "LensesStr": "GRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "D3M", + "ARSOnly": false, + "Angles": "{0.0067 182.5084 0}", + "Pos": "[14949.5234 -11813.3027 396.6027]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "A1", + "ARSCodes": "04", + "Manual": true, + "Lights": "2-1", + "Repeater": false, + "Switches": "" + } + ], + "NonAutoStop": false, + "Left": false + }, + "257": + { + "RouteNumberSetup": "", + "LensesStr": "", + "RouteNumber": "D", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "PRED1", + "ARSOnly": true, + "Angles": "{0 102.855 0}", + "Pos": "[1879.0396 -15419.5117 -115.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "22224", + "Emer": false, + "Lights": "2-1", + "NextSignal": "PRE2D1", + "Switches": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "258": + { + "RouteNumberSetup": "", + "LensesStr": "", + "RouteNumber": "D", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "PRE2D1", + "ARSOnly": true, + "Angles": "{0 90.9333 0}", + "Pos": "[5651.4756 -14973.7031 -115.5136]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "2224", + "Emer": false, + "Lights": "2-1", + "NextSignal": "D1", + "Switches": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "259": + { + "RouteNumberSetup": "", + "LensesStr": "GRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "A1", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[4872.5518 -8828.2061 787.8785]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "A1", + "ARSCodes": "04", + "Manual": true, + "Lights": "2-1", + "Repeater": false, + "Switches": "" + } + ], + "NonAutoStop": false, + "Left": false + }, + "260": + { + "LensesStr": "RR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "PassOcc": false, + "Name": "M1", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[15351.9863 2140.7224 -627.4187]", + "Routes": + [ + + { + "Repeater": true, + "ARSCodes": "", + "Emer": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "261": + { + "RouteNumberSetup": "", + "LensesStr": "BYG-YR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "PassOcc": true, + "Double": false, + "Name": "PA4R", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[3165.8906 -15608.9063 -115.5056]", + "DoubleL": false, + "Routes": + [ + + { + "Emer": false, + "NextSignal": "PA4A", + "ARSCodes": "04678", + "Manual": false, + "EnRou": false, + "Lights": "5-1", + "Switches": "d2en+", + "Repeater": true + }, + + { + "Emer": false, + "NextSignal": "PRED1", + "ARSCodes": "22204", + "Manual": false, + "EnRou": false, + "Lights": "5-5-5-5-25-2b4q", + "Repeater": true, + "Switches": "d2en-,d3ex1-", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "262": + { + "RouteNumberSetup": "", + "LensesStr": "", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "PRE2D1R", + "ARSOnly": true, + "Angles": "{0 100.1049 0}", + "Pos": "[5094.1699 -15041.707 -128.4688]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "2224", + "Emer": false, + "Lights": "2-1", + "NextSignal": "D1", + "Switches": "d3ex1-", + "Repeater": true + } + ], + "NonAutoStop": true, + "Left": false + }, + "263": + { + "LensesStr": "RY-GR", + "RouteNumber": "2", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "41BR", + "ARSOnly": true, + "Angles": "{0 263.5099 0}", + "Pos": "[1089.4335 -14614.9385 -131.4687]", + "Routes": + [ + + { + "Repeater": true, + "Switches": "d1ex-", + "Emer": false, + "Lights": "", + "NextSignal": "41B", + "ARSCodes": "04", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "264": + { + "Depot": true, + "RouteNumberSetup": "", + "LensesStr": "", + "RouteNumber": "1", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "D1OP1", + "ARSOnly": true, + "Angles": "{0 272.6014 0}", + "Pos": "[3180.9463 -15247.4053 -115.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "2", + "NextSignal": "", + "ARSCodes": "2" + } + ], + "NonAutoStop": true, + "Left": false + }, + "265": + { + "RouteNumberSetup": "", + "LensesStr": "RR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "OP1D", + "ARSOnly": false, + "Angles": "{1.4749 259.7055 0}", + "Pos": "[-5173.9214 -14623.2891 -115.4999]", + "Routes": + [ + + { + "Repeater": false, + "ARSCodes": "04", + "Manual": false, + "Lights": "1", + "NextSignal": "OP1D", + "Switches": "", + "RouteName": "" + } + ], + "Left": false + }, + "266": + { + "RouteNumberSetup": "", + "LensesStr": "WR", + "RouteNumber": "2", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "PassOcc": true, + "Double": false, + "Name": "41BO", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[487.9367 -14600.793 -115.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "d1ex-", + "Lights": "", + "NextSignal": "41B", + "ARSCodes": "04" + }, + + { + "Emer": false, + "NextSignal": "41B", + "ARSCodes": "0", + "Repeater": true, + "Lights": "2", + "RouteName": "", + "Switches": "d1ex+", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "267": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "46A", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-1904.218 112 -627.5056]", + "Routes": + [ + + { + "Repeater": false, + "Switches": "", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "268": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "8A", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-15701 6259.0967 -1139.5056]", + "Routes": + [ + + { + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "269": + { + "Approve0": true, + "LensesStr": "GRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "D2", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[14954.3936 -279.856 -115.5056]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false, + "Switches": "", + "Lights": "2-2-1", + "RouteName": "", + "Manual": true + } + ], + "NonAutoStop": false, + "Left": false + }, + "270": + { + "RouteNumberSetup": "", + "LensesStr": "GRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "A2", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[4882.5303 -8565.2061 787.6165]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "A2", + "ARSCodes": "4", + "Manual": true, + "Lights": "1", + "Repeater": false, + "Switches": "" + } + ], + "NonAutoStop": false, + "Left": false + }, + "271": + { + "Approve0": true, + "LensesStr": "GRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": true, + "Name": "D4M/", + "ARSOnly": false, + "Angles": "{357.3385 342.8585 0}", + "Pos": "[14764.5068 -6746.9717 396.1239]", + "DoubleL": true, + "Routes": + [ + + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false, + "Switches": "", + "Lights": "2-1", + "RouteName": "", + "Manual": true + } + ], + "NonAutoStop": false, + "Left": false + }, + "272": + { + "LensesStr": "", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "PassOcc": true, + "Double": false, + "Name": "PN39R", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[14582.5117 3800.4854 -115.5056]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04678", + "Emer": false, + "Lights": "5-5-1", + "NextSignal": "39A", + "Switches": "d1en+", + "Repeater": true + }, + + { + "Manual": false, + "ARSCodes": "", + "Emer": false, + "Switches": "d1en-", + "NextSignal": "PRED2", + "RouteName": "", + "Repeater": true + } + ], + "NonAutoStop": true, + "Left": false + }, + "273": + { + "LensesStr": "GRW", + "RouteNumber": "D", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "PRED2", + "ARSOnly": true, + "Angles": "{0 14.1511 0}", + "Pos": "[14704.9883 4787.8594 -115.5056]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "PRE2D2", + "ARSCodes": "22224", + "Manual": false, + "Lights": "2-2-1", + "Repeater": false, + "Switches": "d3ex2+", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": true + }, + "274": + { + "LensesStr": "GRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "PRE2D2", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[14954.707 1479.4707 -115.5056]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "D2", + "ARSCodes": "2224", + "Manual": false, + "Lights": "2-2-1", + "Repeater": false, + "Switches": "d3ex2+", + "RouteName": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "275": + { + "LensesStr": "YWY-RW-M", + "RouteNumber": "2", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "PN3A", + "ARSOnly": true, + "Angles": "{0 167.2139 0}", + "Pos": "[15066.9561 1591.6802 -115.8537]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "6AO", + "ARSCodes": "004", + "Repeater": false, + "Lights": "4-31-31b", + "Switches": "", + "RouteName": "", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "276": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "PassOcc": true, + "Name": "6AO", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[15589.7939 5846.874 -115.5056]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "6A", + "ARSCodes": "04678", + "Repeater": true, + "Lights": "", + "Manual": false, + "RouteName": "", + "Switches": "d2ex+" + }, + + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "ARSCodes": "04", + "NextSignal": "6A", + "Switches": "d2ex-", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "277": + { + "LensesStr": "YWY-RW-M", + "RouteNumber": "1", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Double": false, + "Name": "D1OP", + "ARSOnly": true, + "Angles": "{0 180.7345 0}", + "Pos": "[14953.0664 2901.1709 -115.5056]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "", + "ARSCodes": "0", + "Repeater": false, + "Lights": "4-31-31b", + "Switches": "", + "RouteName": "", + "Manual": false + }, + + { + "Manual": false, + "Switches": "d3ex2-,d2ex-", + "Emer": false, + "ARSCodes": "", + "NextSignal": "PN3A", + "RouteName": "", + "Repeater": true + } + ], + "NonAutoStop": true, + "Left": false + }, + "278": + { + "LensesStr": "RY-GR", + "RouteNumber": "1", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "PassOcc": false, + "Name": "6AR", + "ARSOnly": true, + "Angles": "{0 167.0054 0}", + "Pos": "[15511.6182 4954.2656 -131.4688]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "6A", + "ARSCodes": "04678", + "Repeater": true, + "Lights": "", + "Manual": false, + "RouteName": "", + "Switches": "d2ex-" + } + ], + "NonAutoStop": true, + "Left": true + }, + "279": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "16A", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-10721 2744.1943 -3187.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "280": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "26A", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[14422 4372.0596 -5235.5059]", + "Routes": + [ + + { + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "", + "NextSignal": "*", + "Switches": "", + "ARSCodes": "046" + } + ], + "NonAutoStop": true, + "Left": false + }, + "281": + { + "Approve0": true, + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "13", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[6929.2202 -9381 -2164.5056]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "*", + "Switches": "" + }, + + { + "Repeater": false, + "RouteName": "653-654", + "Emer": true, + "Lights": "3-3-1-2", + "NextSignal": "*", + "ARSCodes": "04", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "282": + { + "Approve0": true, + "RouteNumberSetup": "", + "LensesStr": "BY-GR", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PA2R", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-4293.2402 112 -627.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "Emer": false, + "Lights": "4-4-1", + "NextSignal": "PA2", + "Switches": "", + "Repeater": true + } + ], + "NonAutoStop": false, + "Left": true + }, + "283": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "PassOcc": true, + "Name": "24AO", + "ARSOnly": true, + "Angles": "{0 135 0}", + "Pos": "[-945.5315 9913 -4724.1758]", + "Routes": + [ + + { + "Repeater": true, + "ARSCodes": "046", + "Emer": false, + "Lights": "", + "NextSignal": "*", + "Switches": "pto2ex+", + "Manual": false + }, + + { + "Manual": false, + "Switches": "pto2ex-", + "Emer": false, + "ARSCodes": "04", + "NextSignal": "*", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "284": + { + "Approve0": false, + "LensesStr": "BYG-RW", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MR24R", + "ARSOnly": true, + "Angles": "{0 135 0}", + "Pos": "[-7594.0605 3264.2495 -4724.3657]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "046", + "Repeater": true, + "Lights": "4-4-1", + "Switches": "pto2en+", + "RouteName": "", + "Manual": false + }, + + { + "Repeater": true, + "RouteName": "", + "Emer": false, + "Manual": false, + "NextSignal": "MR2A", + "Switches": "pto2en-" + } + ], + "NonAutoStop": false, + "Left": false + }, + "285": + { + "Approve0": true, + "Depot": false, + "RouteNumberSetup": "WX", + "LensesStr": "BWR", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MR2", + "ARSOnly": false, + "Angles": "{0 135.2334 0}", + "Pos": "[-2860.1802 7474.0215 -4724.3657]", + "Routes": + [ + + { + "Repeater": false, + "Switches": "pto2ex-", + "Emer": false, + "Lights": "3-3-1", + "NextSignal": "24AO", + "ARSCodes": "4", + "Manual": false + }, + + { + "Emer": true, + "NextSignal": "24AO", + "ARSCodes": "4", + "Manual": false, + "Lights": "3-3-2", + "Repeater": false, + "Switches": "pto2ex-", + "RouteName": "655-654" + }, + + { + "Emer": false, + "NextSignal": "MR2", + "ARSCodes": "4", + "Repeater": false, + "Lights": "3", + "Manual": false, + "RouteName": "", + "Switches": "pto2ex+" + } + ], + "NonAutoStop": false, + "Left": false + }, + "286": + { + "Approve0": false, + "RouteNumberSetup": "WX", + "LensesStr": "BWR", + "RouteNumber": "1", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MR2R", + "ARSOnly": true, + "Angles": "{0 147.7835 0}", + "Pos": "[-1577.9211 9125.8535 -4724.3657]", + "Routes": + [ + + { + "Repeater": true, + "Switches": "pto2ex-", + "Emer": false, + "Lights": "3-3-1", + "NextSignal": "24AO", + "ARSCodes": "114", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "287": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "BY-GR", + "RouteNumber": "4", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MR2A", + "ARSOnly": true, + "Angles": "{0 120.8474 0}", + "Pos": "[-8165.5029 2515.0605 -4724.3657]", + "Routes": + [ + + { + "Repeater": false, + "Switches": "", + "Emer": false, + "Lights": "4-1", + "NextSignal": "*", + "ARSCodes": "14", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "288": + { + "Approve0": true, + "LensesStr": "BWY-GRW-M", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MR23V", + "ARSOnly": false, + "Angles": "{1.5573 309.6168 0}", + "Pos": "[-1370.7384 12028.6504 -4723.812]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "046", + "Lights": "5-5-1", + "NextSignal": "*", + "Switches": "pto1en+" + }, + + { + "Emer": true, + "NextSignal": "*", + "ARSCodes": "046", + "Repeater": false, + "Lights": "5-5-3-4", + "Manual": false, + "RouteName": "654-655", + "Switches": "pto1en+" + }, + + { + "Emer": false, + "NextSignal": "MR1A", + "ARSCodes": "04", + "Repeater": false, + "EnRou": true, + "Lights": "5-5-1", + "RouteName": "", + "Switches": "pto1en-", + "Manual": false + }, + + { + "Emer": true, + "NextSignal": "MR1A", + "ARSCodes": "04", + "Repeater": false, + "EnRou": true, + "Lights": "5-5-4", + "RouteName": "", + "Switches": "pto1en-", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "289": + { + "Approve0": true, + "Depot": false, + "RouteNumberSetup": "", + "LensesStr": "BW-RW", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MR1", + "ARSOnly": false, + "Angles": "{0 315.2333 0}", + "Pos": "[-9253.25 4698.9165 -4724.3657]", + "Routes": + [ + + { + "Repeater": false, + "Switches": "pto1ex-", + "Emer": false, + "Lights": "3-3-1", + "NextSignal": "MR25AO", + "ARSCodes": "4", + "Manual": false + }, + + { + "Emer": true, + "NextSignal": "MR25AO", + "ARSCodes": "4", + "Manual": false, + "Lights": "3-3-2", + "Repeater": false, + "Switches": "pto1ex-", + "RouteName": "654-655" + }, + + { + "Emer": false, + "NextSignal": "MR1", + "ARSCodes": "4", + "Repeater": false, + "Lights": "3", + "Manual": false, + "RouteName": "", + "Switches": "pto1ex+" + } + ], + "NonAutoStop": false, + "Left": false + }, + "290": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "PassOcc": true, + "Double": false, + "Name": "MR25AO", + "ARSOnly": true, + "Angles": "{0 315 0}", + "Pos": "[-11162.5059 2265.5518 -4724.1758]", + "Routes": + [ + + { + "Repeater": true, + "ARSCodes": "046", + "Emer": false, + "Lights": "", + "NextSignal": "*", + "Switches": "pto1ex+", + "Manual": false + }, + + { + "Repeater": false, + "RouteName": "", + "Emer": false, + "ARSCodes": "04", + "NextSignal": "*", + "Switches": "pto1ex-", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "291": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "BY-GR", + "RouteNumber": "3", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MR1A", + "ARSOnly": true, + "Angles": "{0 300.8474 0}", + "Pos": "[-3974.1025 9649.8447 -4724.3657]", + "Routes": + [ + + { + "Repeater": false, + "Switches": "", + "Emer": false, + "Lights": "4-1", + "NextSignal": "*", + "ARSCodes": "14", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "292": + { + "Approve0": false, + "Depot": false, + "RouteNumberSetup": "", + "LensesStr": "BW-RW", + "RouteNumber": "1", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MR1R", + "ARSOnly": true, + "Angles": "{0 326.0532 0}", + "Pos": "[-10616.0635 2915.512 -4724.3657]", + "Routes": + [ + + { + "Repeater": true, + "Switches": "pto2ex-", + "Emer": false, + "Lights": "3-3-1", + "NextSignal": "MR25AO", + "ARSCodes": "4", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "293": + { + "Approve0": false, + "LensesStr": "BWY-GRW-M", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "PassOcc": true, + "Name": "MR23VR", + "ARSOnly": true, + "Angles": "{0 315 0}", + "Pos": "[-4454.7085 8973.5117 -4724.3657]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Emer": false, + "Lights": "5-5-1", + "NextSignal": "*", + "Switches": "pto1en+", + "Repeater": true + }, + + { + "Emer": false, + "NextSignal": "MR1A", + "ARSCodes": "04", + "Repeater": true, + "Lights": "5-5-1", + "RouteName": "", + "Switches": "pto1en-", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "294": + { + "Approve0": true, + "RouteNumberSetup": "XXK", + "LensesStr": "BYG-RW-M", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "MR23G", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[15430 7804.5405 -5235.5059]", + "Routes": + [ + + { + "Manual": false, + "EnRou": false, + "Switches": "pto2en+", + "Lights": "4-4-1", + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false + }, + + { + "Emer": true, + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false, + "EnRou": false, + "Lights": "4-4-2-3", + "RouteName": "654-655", + "Switches": "pto2en+", + "Manual": false + }, + + { + "Emer": false, + "NextSignal": "*", + "ARSCodes": "04", + "Manual": false, + "EnRou": true, + "Lights": "4-4-1", + "Repeater": false, + "RouteName": "", + "Switches": "pto2en-" + }, + + { + "Emer": true, + "NextSignal": "*", + "ARSCodes": "04", + "Manual": false, + "EnRou": true, + "Lights": "4-4-2-3", + "Repeater": false, + "RouteName": "654-655", + "Switches": "pto2en-" + } + ], + "NonAutoStop": false, + "Left": false + }, + "295": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "BY-GR", + "RouteNumber": "3", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "PN2", + "ARSOnly": true, + "Angles": "{0 14.1511 0}", + "Pos": "[-15562.3809 1617.1025 -1139.5056]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "224", + "Lights": "4-4-1", + "NextSignal": "PN3PREOP", + "Switches": "pn3+" + } + ], + "NonAutoStop": true, + "Left": true + }, + "296": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "PassOcc": true, + "Name": "PN10R", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-15700.4883 1323.6733 -1139.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Emer": false, + "Lights": "5-5-1", + "NextSignal": "*", + "Switches": "pn2+", + "Repeater": true + }, + + { + "Emer": false, + "NextSignal": "PN2", + "ARSCodes": "004", + "Manual": false, + "Lights": "5-5-2", + "Switches": "pn2-,pn3+", + "RouteName": "", + "Repeater": true + } + ], + "NonAutoStop": true, + "Left": false + }, + "297": + { + "Approve0": true, + "RouteNumberSetup": "12X", + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PN3", + "ARSOnly": false, + "Angles": "{0 179.0667 0}", + "Pos": "[-15329.4346 -2345.3638 -1140.1556]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "Switches": "pn2-,pn3+", + "Lights": "2-2-1", + "NextSignal": "PNOPO", + "ARSCodes": "4", + "Repeater": false + }, + + { + "Emer": false, + "NextSignal": "PN1O", + "ARSCodes": "4", + "Repeater": false, + "EnRou": true, + "Lights": "2-2-2-1", + "Manual": false, + "RouteName": "", + "Switches": "pn1-,pn3-" + } + ], + "NonAutoStop": true, + "Left": true + }, + "298": + { + "Approve0": false, + "RouteNumberSetup": "WX", + "LensesStr": "WR", + "RouteNumber": "1", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PN1O", + "ARSOnly": true, + "Angles": "{0 168.9468 0}", + "Pos": "[-15253.5635 -1645.6548 -1153.1188]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "35O", + "ARSCodes": "224", + "Repeater": false, + "Lights": "2-1", + "Manual": false, + "RouteName": "", + "Switches": "pn1-,pn3-" + } + ], + "NonAutoStop": true, + "Left": false + }, + "299": + { + "LensesStr": "WR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "PNOP", + "ARSOnly": false, + "Angles": "{0 180 0}", + "Pos": "[-15701 9529.9824 -1139.5056]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "4", + "Lights": "2", + "NextSignal": "*", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": true + }, + "300": + { + "LensesStr": "", + "RouteNumber": "2", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PNOPO", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[-15700.793 2712.6453 -1139.5056]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "24", + "Lights": "2", + "NextSignal": "*", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "301": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PN3OP", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-15330.793 -6950.6802 -1139.5056]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "4", + "Lights": "2-2-1", + "NextSignal": "", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "302": + { + "RouteNumberSetup": "", + "LensesStr": "", + "RouteNumber": "1", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PNOPOR", + "ARSOnly": true, + "Angles": "{0 192.7835 0}", + "Pos": "[-15610.1816 1818.0972 -1139.5056]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "Emer": false, + "Lights": "2", + "NextSignal": "PNOPO", + "ARSCodes": "4", + "Repeater": true + } + ], + "NonAutoStop": true, + "Left": false + }, + "303": + { + "RouteNumberSetup": "1", + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "35R", + "ARSOnly": true, + "Angles": "{0 180.3466 0}", + "Pos": "[-14761.3809 2027.0793 -1155.4688]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "35", + "ARSCodes": "", + "Repeater": true, + "Lights": "", + "Manual": false, + "RouteName": "", + "Switches": "pn1-" + } + ], + "NonAutoStop": true, + "Left": true + }, + "304": + { + "Approve0": false, + "RouteNumberSetup": "3X", + "LensesStr": "WRW", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PND", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[-14693 4056.1936 -1139.5056]", + "Routes": + [ + + { + "Manual": false, + "EnRou": true, + "ARSCodes": "1114", + "Lights": "2-2-2-1", + "NextSignal": "PN1D", + "Switches": "pn1-,pn3-", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "305": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "BY-GR", + "RouteNumber": "3", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PN1D", + "ARSOnly": true, + "Angles": "{0 347.1775 0}", + "Pos": "[-14791.9961 1782.1331 -1139.5056]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "224", + "Lights": "4-4-1", + "NextSignal": "PN3PREOP", + "Switches": "pn3-" + } + ], + "NonAutoStop": true, + "Left": false + }, + "306": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "BY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PN3PREOP", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-15330.793 -2506.1187 -1139.5056]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "24", + "Lights": "4-4-1", + "NextSignal": "PN3OP", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": false + }, + "307": + { + "Approve0": true, + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "36", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[1265.3816 -8373 -2164.5056]", + "Routes": + [ + + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "", + "NextSignal": "*", + "Switches": "" + }, + + { + "Repeater": false, + "RouteName": "652-651", + "Emer": true, + "Lights": "3-3-1-2", + "NextSignal": "*", + "ARSCodes": "04", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "308": + { + "LensesStr": "YGR", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "PassOcc": true, + "Name": "35O", + "ARSOnly": true, + "Angles": "{0 180 0}", + "Pos": "[-14693.2061 2714.0491 -1139.5056]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "Emer": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": true + } + ], + "NonAutoStop": true, + "Left": false + }, + "309": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "WR", + "RouteNumber": "9", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "PassOcc": false, + "Name": "PN1OG", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-14692.9121 733.3556 -1139.5056]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "PN1D", + "ARSCodes": "", + "Repeater": true, + "Lights": "2", + "RouteName": "", + "Switches": "pn1-,pn3-", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "310": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "BY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PN3PREOPR", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[-15289.1279 -1947.8104 -1153.1188]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "24", + "Emer": false, + "Lights": "4-4-1", + "NextSignal": "PN3PREOP", + "Switches": "", + "Repeater": true + } + ], + "NonAutoStop": true, + "Left": true + }, + "311": + { + "RouteNumberSetup": "", + "LensesStr": "WRW-M", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PKA", + "ARSOnly": false, + "Angles": "{0 90 0}", + "Pos": "[-7264.3804 11120.1133 -1140.5056]", + "Routes": + [ + + { + "Repeater": false, + "EnRou": true, + "ARSCodes": "0004", + "Lights": "2-2-2-1", + "NextSignal": "PK40B", + "Switches": "pk1-", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": true + }, + "312": + { + "Approve0": true, + "RouteNumberSetup": "", + "LensesStr": "WRW-M", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PKD", + "ARSOnly": false, + "Angles": "{0 270 0}", + "Pos": "[83.9705 10111.793 -1140.5056]", + "Routes": + [ + + { + "Repeater": false, + "EnRou": true, + "ARSCodes": "0004", + "Lights": "2-2-2-1", + "NextSignal": "7B2", + "Switches": "pk2-", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": true + }, + "313": + { + "RouteNumberSetup": "", + "LensesStr": "", + "RouteNumber": "9", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PK2OG", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-2850.6484 10112.2109 -1140.2556]", + "Routes": + [ + + { + "Repeater": true, + "ARSCodes": "00004", + "Emer": false, + "Lights": "", + "NextSignal": "7B2", + "Switches": "pk2-", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "314": + { + "LensesStr": "BY-GR", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "PassOcc": true, + "Name": "PK40A", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[-1198.697 10112.207 -1140.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Emer": false, + "Lights": "4-4-1", + "NextSignal": "*", + "Switches": "pk2+", + "Repeater": true + }, + + { + "Manual": false, + "Switches": "pk2-", + "Emer": false, + "ARSCodes": "04", + "NextSignal": "*", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "315": + { + "LensesStr": "RY-GR", + "RouteNumber": "", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "PassOcc": true, + "Name": "7B1", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-5388.978 11126.6699 -1148.4688]", + "Routes": + [ + + { + "Repeater": true, + "Switches": "pk1+", + "Emer": false, + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04", + "Manual": false + }, + + { + "Manual": false, + "Switches": "pk1-", + "Emer": false, + "ARSCodes": "14", + "NextSignal": "*", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "316": + { + "LensesStr": "RY-GR", + "RouteNumber": "1", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "PassOcc": true, + "Name": "7B2", + "ARSOnly": true, + "Angles": "{360 256.4022 0}", + "Pos": "[-2219.1245 10230.2988 -1140.2556]", + "Routes": + [ + + { + "Manual": false, + "Switches": "pk1-", + "Emer": false, + "ARSCodes": "114", + "NextSignal": "7B1", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "317": + { + "RouteNumberSetup": "", + "LensesStr": "RY-GR", + "RouteNumber": "1", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "PassOcc": true, + "Name": "7B1R", + "ARSOnly": true, + "Angles": "{0 270 0}", + "Pos": "[-4663.0645 11077.4258 -1156.2188]", + "Routes": + [ + + { + "Repeater": true, + "Switches": "pk1-", + "Emer": false, + "Lights": "", + "NextSignal": "7B1", + "ARSCodes": "04", + "Manual": false + } + ], + "NonAutoStop": true, + "Left": true + }, + "318": + { + "LensesStr": "BY-GR", + "RouteNumber": "2", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "PassOcc": true, + "Name": "PK40B", + "ARSOnly": true, + "Angles": "{360 76.4022 0}", + "Pos": "[-4415.4697 11006.8691 -1140.2556]", + "Routes": + [ + + { + "Manual": false, + "Switches": "pk2-", + "Emer": false, + "ARSCodes": "114", + "NextSignal": "PK40A", + "RouteName": "", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "319": + { + "RouteNumberSetup": "", + "LensesStr": "BY-GR", + "RouteNumber": "1", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "PassOcc": true, + "Name": "PK40AR", + "ARSOnly": true, + "Angles": "{0 80.01 0}", + "Pos": "[-1996.4956 10146.4189 -1156.2188]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "Emer": false, + "Lights": "4-4-1", + "NextSignal": "PK40A", + "Switches": "pk2-", + "Repeater": true + } + ], + "NonAutoStop": true, + "Left": true + }, + "320": + { + "RouteNumberSetup": "", + "LensesStr": "", + "RouteNumber": "9", + "Class": "gmod_track_signal", + "IsolateSwitches": false, + "SignalType": 0, + "Name": "PK1OG", + "ARSOnly": true, + "Angles": "{0 90 0}", + "Pos": "[-3731.6074 11119.6895 -1140.2556]", + "Routes": + [ + + { + "Emer": false, + "NextSignal": "PK40B", + "ARSCodes": "0004", + "Repeater": true, + "EnRou": true, + "Lights": "2", + "Switches": "pk1-", + "Manual": false + } + ], + "NonAutoStop": false, + "Left": false + }, + "321": + { + "Approve0": true, + "RouteNumberSetup": "XXK", + "LensesStr": "RY-GR", + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "18MG", + "ARSOnly": false, + "Angles": "{0 0 0}", + "Pos": "[-10721 458.6313 -3187.5056]", + "Routes": + [ + + { + "Manual": false, + "Repeater": false, + "Switches": "", + "Lights": "", + "NextSignal": "*", + "ARSCodes": "04" + }, + + { + "Manual": false, + "RouteName": "655-654", + "Emer": true, + "Lights": "4-4-2-3", + "NextSignal": "*", + "ARSCodes": "04", + "Repeater": false + } + ], + "NonAutoStop": true, + "Left": false + }, + "322": + { + "Angles": "{0 271.3198 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 1, + "Name": "d3ex1", + "Pos": "[5730.6108 -14861.7939 -121.9688]" + }, + "323": + { + "Angles": "{0 90.7258 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 1, + "Name": "d1ex", + "Pos": "[668.1309 -14705.5039 -121.9688]" + }, + "324": + { + "Angles": "{0 314.6656 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 1, + "Name": "pto1en", + "Pos": "[-3237.8833 10332.502 -4730.8315]" + }, + "325": + { + "Angles": "{0 0.3092 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 1, + "Name": "d1en", + "Pos": "[14464.2246 5754.8306 -121.9688]" + }, + "326": + { + "Angles": "{0 89.9937 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 1, + "Name": "d2en", + "Pos": "[633.8423 -15708.707 -121.9688]" + }, + "327": + { + "Angles": "{0 0.8092 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 1, + "Name": "d2ex", + "Pos": "[15487.3311 5719.8506 -121.9688]" + }, + "328": + { + "Angles": "{0 178.4276 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 1, + "Name": "d3ex2", + "Pos": "[15057.8789 703.0144 -121.9688]" + }, + "329": + { + "Angles": "{0 313.9379 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 1, + "Name": "pto2ex", + "Pos": "[-1108.8167 9904.8926 -4730.8286]" + }, + "330": + { + "Angles": "{0 135.0421 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 1, + "Name": "pto2en", + "Pos": "[-8805.7676 1891.1699 -4730.8286]" + }, + "331": + { + "Angles": "{0 134.5441 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 1, + "Name": "pto1ex", + "Pos": "[-10981.6934 2291.1182 -4730.8286]" + }, + "332": + { + "Angles": "{0 359.8237 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 1, + "Name": "pn2", + "Pos": "[-15801.6738 2611.7698 -1145.9688]" + }, + "333": + { + "Angles": "{0 1.4375 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 1, + "Name": "pn1", + "Pos": "[-14789.6211 2610.0706 -1145.9688]" + }, + "334": + { + "Angles": "{0 176.6675 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 1, + "Name": "pn3", + "Pos": "[-15229.7021 -2393.8225 -1146.6188]" + }, + "335": + { + "Angles": "{0 89.9141 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 1, + "Name": "pk1", + "Pos": "[-5304.8843 11010.4326 -1146.7188]" + }, + "336": + { + "Angles": "{0 270.1602 0}", + "Class": "gmod_track_switch", + "NotChangePos": true, + "Channel": 1, + "Name": "pk2", + "Pos": "[-1316.1338 10220.1533 -1146.7188]" + }, + "Version": 1.1 +} diff --git a/lua/metrostroi_data/signs_gm_mus_neoorange_d.lua b/lua/metrostroi_data/signs_gm_mus_neoorange_d.lua new file mode 100644 index 0000000..7cd714e --- /dev/null +++ b/lua/metrostroi_data/signs_gm_mus_neoorange_d.lua @@ -0,0 +1,7887 @@ + +{ + "1": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "E1", + "Angles": "{0 90 0}", + "Pos": "[7768.582 3178.54 5253.4941]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-2", + "NextSignal": "I5", + "ARSCodes": "4" + } + ] + }, + "2": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "I5", + "Angles": "{0.3147 179.3346 0}", + "Pos": "[13543.5508 6201.4468 5253.8047]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "4", + "Lights": "3-31-1-2", + "NextSignal": "I3", + "RouteName": "" + } + ] + }, + "3": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "I3", + "Angles": "{1.9923 192.8082 0}", + "Pos": "[13436.4258 11371.1172 5130.397]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "4", + "Lights": "3-31-1-2", + "NextSignal": "I1", + "RouteName": "" + } + ] + }, + "4": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "WY-GR-W", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "I1", + "Angles": "{0 270 0}", + "Pos": "[6660.3906 13403.8066 5130.4941]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "4-42-3", + "NextSignal": "11", + "ARSCodes": "4" + } + ] + }, + "5": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "11", + "Angles": "{0 270 0}", + "Pos": "[1849.7695 13404.207 5130.7441]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-2", + "NextSignal": "*", + "ARSCodes": "4" + } + ] + }, + "6": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "13", + "Angles": "{0 270.8822 0}", + "Pos": "[-3146.8071 13404.207 5130.7441]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "4", + "RouteName": "", + "Lights": "3-31-2", + "NextSignal": "*", + "Switches": "" + } + ] + }, + "7": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "15", + "Angles": "{0 270 0}", + "Pos": "[-5857.5645 13056.4063 5131.3643]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "06" + } + ] + }, + "8": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "17", + "Angles": "{3.1232 297.9828 0}", + "Pos": "[-12330.666 12069.292 5138.4019]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-21-2", + "NextSignal": "*", + "ARSCodes": "067" + } + ] + }, + "9": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "23", + "Angles": "{0.2349 89.5034 0}", + "Pos": "[-7629.2256 -12782.4219 4830.0952]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "006", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ] + }, + "10": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "25", + "Angles": "{0 90 0}", + "Pos": "[-3741.8823 -12966 4829.4941]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-31-21", + "NextSignal": "*", + "RouteName": "" + } + ] + }, + "11": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "27", + "Angles": "{0 90 0}", + "Pos": "[648.5056 -12966 4829.4941]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ] + }, + "12": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "21", + "Angles": "{1.7381 81.0832 0}", + "Pos": "[-9767.5107 -12617.8223 4833.8247]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "06", + "RouteName": "", + "Lights": "3-31-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ] + }, + "13": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "29", + "Angles": "{0 99.7628 0}", + "Pos": "[3322.9824 -12719.4902 4829.9814]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ] + }, + "14": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "31", + "Angles": "{3.3053 122.9446 0}", + "Pos": "[9684.4092 -11287.6133 4837.5376]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ] + }, + "15": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "33", + "Angles": "{1.1273 175.0836 0}", + "Pos": "[12652.1699 -5529.5522 4832.2876]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ] + }, + "16": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Name": "35", + "Angles": "{3.44 158.015 0}", + "Pos": "[15312.8037 212.5146 4830.1343]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ] + }, + "17": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "37", + "Angles": "{2.1107 258.0256 0}", + "Pos": "[9947.4492 9353.5107 4834.707]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ] + }, + "18": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "39", + "Angles": "{0.2342 270.5031 0}", + "Pos": "[-6258.3662 9628.7324 4385.7549]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ] + }, + "19": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "41", + "Angles": "{1.3371 353.8219 0}", + "Pos": "[-14330.3311 2801.0376 4388.1147]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-21-2", + "NextSignal": "*", + "RouteName": "" + } + ] + }, + "20": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "43", + "Angles": "{0.9119 4.9138 0}", + "Pos": "[-15481.4434 -8852.2363 4386.6211]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-1-21-2", + "NextSignal": "*", + "ARSCodes": "067" + } + ] + }, + "21": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "45", + "Angles": "{0.4657 88.5127 0}", + "Pos": "[-7854.8013 -15791.0967 4386.6157]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-31-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ] + }, + "22": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "47", + "Angles": "{0 90 0}", + "Pos": "[-3419.4111 -15800.3867 4386.6143]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "006", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ] + }, + "23": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "51", + "Angles": "{0 90 0}", + "Pos": "[4451.3359 -15800 4386.4941]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ] + }, + "24": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "53", + "Angles": "{0.691 93.7191 0}", + "Pos": "[7125.6045 -15768.8525 4386.6206]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ] + }, + "25": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "55", + "Angles": "{0.6915 177.4383 0}", + "Pos": "[14327.9971 -8340.4121 4386.6177]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "068" + } + ] + }, + "26": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "57", + "Angles": "{0.0001 180.4948 0}", + "Pos": "[14345.4531 5860.186 4085.6208]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ] + }, + "27": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "59", + "Angles": "{1.5416 262.5153 0}", + "Pos": "[7859.9819 13909.3105 4085.6211]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ] + }, + "28": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "61", + "Angles": "{0 270 0}", + "Pos": "[-6504.5483 14009.3867 3784.3743]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ] + }, + "29": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "63", + "Angles": "{1.9289 349.6179 0}", + "Pos": "[-15131.7412 8167.4985 3784.6179]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "067", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ] + }, + "30": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "65", + "Angles": "{360 0 0}", + "Pos": "[-15331.2051 -3114.2556 3553.7314]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "06", + "Lights": "3-31-1-21-21-2", + "NextSignal": "*", + "RouteName": "" + } + ] + }, + "31": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "67", + "Angles": "{3.2856 34.5691 0}", + "Pos": "[-14863.8154 -12930.5049 3339.1699]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-1-21-2", + "NextSignal": "*", + "ARSCodes": "04" + } + ] + }, + "32": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "69", + "Angles": "{358.6349 77.8295 0}", + "Pos": "[-9104.5742 -14352.4707 3340.3518]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "04" + } + ] + }, + "33": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "71", + "Angles": "{1.4368 81.4332 0}", + "Pos": "[-6195.6157 -15157.2412 3340.3423]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "004", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ] + }, + "34": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "73", + "Angles": "{0 90 0}", + "Pos": "[-2708.4478 -15259.5195 3340.3457]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "3-31-21", + "NextSignal": "*", + "Switches": "" + } + ] + }, + "35": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "AP77", + "Angles": "{0 90 0}", + "Pos": "[4297.9834 -15259.7939 3340.1343]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "04" + } + ] + }, + "36": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": true, + "Name": "AP75//", + "Angles": "{0 90 0}", + "Pos": "[1810.0786 -15259.6465 3340.3457]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "Left": true + }, + "37": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "79", + "Angles": "{0 90 0}", + "Pos": "[9101.3115 -15260.1934 3339.6943]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ] + }, + "38": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "81", + "Angles": "{3.508 138.5463 0}", + "Pos": "[13151.833 -14414.8076 3339.53]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ] + }, + "39": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "83", + "Angles": "{0.0014 159.6571 0}", + "Pos": "[14446.7461 -8958.7969 3340.4675]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ] + }, + "40": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "85", + "Angles": "{360 180 0}", + "Pos": "[15021.7871 2643.3591 3098.2622]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ] + }, + "41": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "87", + "Angles": "{3.1222 244.376 0}", + "Pos": "[11164.7246 14062.2686 3038.6182]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ] + }, + "42": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "89", + "Angles": "{360 270 0}", + "Pos": "[-1757.1123 14869.5859 2819.9353]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-21-2", + "NextSignal": "*", + "RouteName": "" + } + ] + }, + "43": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "91", + "Angles": "{3.4929 319.0969 0}", + "Pos": "[-12831.3779 12582.9658 2736.6143]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-1-21-2", + "NextSignal": "*", + "ARSCodes": "067" + } + ] + }, + "44": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": true, + "Name": "97//", + "Angles": "{0 0 0}", + "Pos": "[-14655.5 2799.5637 2736.5012]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-21", + "NextSignal": "*", + "ARSCodes": "06" + } + ], + "Left": true + }, + "45": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "93", + "Angles": "{0.4657 358.5127 0}", + "Pos": "[-14645.6846 7230.2686 2736.6143]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "06", + "Lights": "3-31-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "46": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "99", + "Angles": "{0 0 0}", + "Pos": "[-14656.207 -1721.5818 2736.4944]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "Left": false + }, + "47": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "101", + "Angles": "{0 0 0}", + "Pos": "[-14656.0137 -4333.4736 2736.4644]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "48": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "95", + "Angles": "{0 0 0}", + "Pos": "[-14655.707 5020.9712 2736.4644]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "006" + } + ], + "Left": false + }, + "49": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "103", + "Angles": "{2.8875 68.7606 0}", + "Pos": "[-10330.6572 -14214.1758 2736.6301]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "50": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "105", + "Angles": "{360 90 0}", + "Pos": "[2513.3574 -14826.9863 2483.6147]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "51": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "107", + "Angles": "{3.501 136.3687 0}", + "Pos": "[13553.166 -12613.6855 2435.6145]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "52": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "109", + "Angles": "{0 180 0}", + "Pos": "[15119.0859 -1534.6481 2435.4644]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "53": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "111", + "Angles": "{1.9285 191.9704 0}", + "Pos": "[15309.9629 10052.1777 2435.6213]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "54": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "113", + "Angles": "{0 270 0}", + "Pos": "[6468.4487 15681.3926 2435.4644]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "55": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "115", + "Angles": "{0 270 0}", + "Pos": "[-6428.9233 15681.6133 2134.4644]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-1-21-2", + "NextSignal": "*", + "ARSCodes": "067" + } + ], + "Left": false + }, + "56": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "121", + "Angles": "{0 0 0}", + "Pos": "[-15150.9941 4985.9775 2134.2512]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-21", + "NextSignal": "*", + "ARSCodes": "06" + } + ], + "Left": false + }, + "57": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "119", + "Angles": "{0 0 0}", + "Pos": "[-15150.8125 7324.4224 2134.4644]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "006", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "58": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "117", + "Angles": "{2.7529 340.8303 0}", + "Pos": "[-14564.043 11286.5 2134.6145]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "06", + "RouteName": "", + "Lights": "3-31-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "59": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "123", + "Angles": "{0 0 0}", + "Pos": "[-15150.9941 669.4668 2134.2144]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "Left": false + }, + "60": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "125", + "Angles": "{0.6108 2.0507 0}", + "Pos": "[-15145.334 -2001.4856 2134.6313]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "06", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "61": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "127", + "Angles": "{3.3043 30.42 0}", + "Pos": "[-11968.8906 -12831.8672 2134.6165]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "06", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "62": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "129", + "Angles": "{360 90 0}", + "Pos": "[-1498.6409 -16064.9863 2092.1897]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "63": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "131", + "Angles": "{1.7383 100.4022 0}", + "Pos": "[10110.46 -15860.6152 1833.9092]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "64": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "133", + "Angles": "{0 180 0}", + "Pos": "[15925.8867 -7177.2344 1833.7744]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "65": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "135", + "Angles": "{0 180 0}", + "Pos": "[15925.5859 4395.6763 1496.6644]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "66": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "137", + "Angles": "{2.451 254.6322 0}", + "Pos": "[10923.9805 13736.3975 1496.6163]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "067", + "Lights": "3-31-1-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "67": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "143", + "Angles": "{0 270 0}", + "Pos": "[1324.478 14561 1496.4944]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-21", + "NextSignal": "*", + "ARSCodes": "06" + } + ], + "Left": false + }, + "68": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "139", + "Angles": "{359.9269 255.1329 0}", + "Pos": "[6260.9878 14323.8887 1496.4634]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "06", + "Lights": "3-31-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "69": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "141", + "Angles": "{0 270 0}", + "Pos": "[3846.877 14561.4863 1496.4644]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "006", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "70": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "145", + "Angles": "{0 270 0}", + "Pos": "[-2452.1472 14561 1496.4944]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "Left": false + }, + "71": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "147", + "Angles": "{1.3944 258.2162 0}", + "Pos": "[-5160.6499 14887.2656 1496.3232]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "068" + } + ], + "Left": true + }, + "72": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "149", + "Angles": "{2.6071 342.7829 0}", + "Pos": "[-14949.8096 10330 1496.6146]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "068" + } + ], + "Left": false + }, + "73": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "151", + "Angles": "{360 0 0}", + "Pos": "[-15444.2871 -1230.783 1333.2316]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "74": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "153", + "Angles": "{3.3743 32.9422 0}", + "Pos": "[-14201.1143 -12648.374 1195.6765]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "068" + } + ], + "Left": false + }, + "75": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "155", + "Angles": "{360 90 0}", + "Pos": "[-3570.3882 -15703.0938 1148.2885]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "067" + } + ], + "Left": false + }, + "76": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "157", + "Angles": "{1.3371 97.6424 0}", + "Pos": "[7993.833 -15642.8223 858.5023]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "77": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "159", + "Angles": "{3.3203 149.3402 0}", + "Pos": "[10586.4395 -14098.4473 858.4954]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "78": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "PK161", + "Angles": "{0 180 0}", + "Pos": "[11160.9863 -11018.333 858.4944]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-21", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "Left": false + }, + "79": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGY-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "PK163", + "Angles": "{0 180 0}", + "Pos": "[11161 -5741.0859 858.5313]", + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "4-41-31-31b", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "Left": false + }, + "80": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": true, + "Name": "165/", + "Angles": "{0 180 0}", + "Pos": "[10788.793 -1576.4841 858.4944]", + "DoubleL": true, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04", + "Lights": "3-31-21", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "81": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "167", + "Angles": "{0 180 0}", + "Pos": "[10789.3066 2907.3823 858.2144]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "Left": false + }, + "82": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "169", + "Angles": "{0 180 0}", + "Pos": "[10789.3066 5535.7847 858.2144]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "83": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "171", + "Angles": "{0 171.5632 0}", + "Pos": "[10906.7402 10258.7773 858.0245]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": true + }, + "84": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "173", + "Angles": "{3.0176 247.7238 0}", + "Pos": "[9400.9531 14350.0322 857.4061]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "85": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "175", + "Angles": "{0 270 0}", + "Pos": "[4673.8403 14629.5059 858.1043]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "86": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "177", + "Angles": "{1.1982 354.6159 0}", + "Pos": "[1393.7395 12044.3447 857.9429]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "87": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "179", + "Angles": "{0 0 0}", + "Pos": "[1623.7939 7340.0225 858.3654]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": true + }, + "88": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Double": false, + "Name": "181", + "Angles": "{0 0 0}", + "Pos": "[1623.3938 2556.8665 858.4353]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "89": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Double": false, + "Name": "183", + "Angles": "{0 0 0}", + "Pos": "[1623.3938 -2182.6367 858.4353]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "90": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "185", + "Angles": "{357.394 289.1824 0}", + "Pos": "[-2703.8149 -11936.6133 851.9]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "91": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "187", + "Angles": "{356.6961 212.9416 0}", + "Pos": "[-13247.457 -9542.6357 850.4694]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "92": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "189", + "Angles": "{360 180 0}", + "Pos": "[-14486.793 3137.0693 603.0972]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "93": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "191", + "Angles": "{356.6961 122.9416 0}", + "Pos": "[-11419.5303 13678.6836 477.7394]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "94": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "193", + "Angles": "{360 90 0}", + "Pos": "[1212.8251 14851.793 407.0654]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "95": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "195", + "Angles": "{356.5709 38.1949 0}", + "Pos": "[13332.0342 12374.9912 211.5229]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "067", + "Lights": "3-31-1-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "96": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "197", + "Angles": "{358.2625 10.4014 0}", + "Pos": "[14736.3369 9061.7793 215.4584]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "06", + "Lights": "3-31-31-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "97": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "199", + "Angles": "{0.0005 0.4942 0}", + "Pos": "[14920.2539 7019.9785 219.2632]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "006", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "98": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "201", + "Angles": "{0 0 0}", + "Pos": "[14921.5938 5816.5381 219.4133]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "06", + "RouteName": "", + "Lights": "3-31-21", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "99": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "203", + "Angles": "{359.5721 357.8682 0}", + "Pos": "[14914.9961 1307.4297 219.5463]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "Left": false + }, + "100": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "205", + "Angles": "{359.1223 341.8155 0}", + "Pos": "[14463.3828 -1282.7629 219.5543]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "068" + } + ], + "Left": true + }, + "101": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "207", + "Angles": "{356.6257 302.9336 0}", + "Pos": "[10705.0752 -11799.4971 218.9698]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "068" + } + ], + "Left": true + }, + "102": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "209", + "Angles": "{360 270 0}", + "Pos": "[-662.204 -13021.7129 45.6118]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "068" + } + ], + "Left": false + }, + "103": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "211", + "Angles": "{356.4991 226.3677 0}", + "Pos": "[-11751.7676 -11007.5488 -82.6388]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "068" + } + ], + "Left": true + }, + "104": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "213", + "Angles": "{360 180 0}", + "Pos": "[-13835.7129 65.2215 -207.6814]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "105": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "215", + "Angles": "{356.6955 149.5747 0}", + "Pos": "[-12703.6641 11371.3027 -383.7247]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "067", + "Lights": "3-31-1-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": true + }, + "106": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "221", + "Angles": "{0 90 0}", + "Pos": "[-3276.8025 14608 -382.6306]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "06", + "Lights": "3-31-21", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "107": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "217", + "Angles": "{357.8891 103.6105 0}", + "Pos": "[-8493.7588 14302.8916 -383.7194]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "06", + "Lights": "3-31-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": true + }, + "108": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "219", + "Angles": "{359.9999 90.4657 0}", + "Pos": "[-5730.147 14606.5898 -383.7192]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "006", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": true + }, + "109": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "223", + "Angles": "{0 90 0}", + "Pos": "[579.4096 14608 -382.6306]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "110": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "225", + "Angles": "{0 90 0}", + "Pos": "[3210.0098 14607.9863 -382.6306]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "111": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "227", + "Angles": "{357.8891 13.6105 0}", + "Pos": "[12474.377 9300.8389 -383.7203]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": true + }, + "112": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "229", + "Angles": "{360 0 0}", + "Pos": "[12787.7129 -2253.187 -641.0153]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "113": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "231", + "Angles": "{356.9891 293.3672 0}", + "Pos": "[8731.7705 -12300.4941 -685.2103]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "068" + } + ], + "Left": true + }, + "114": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "233", + "Angles": "{360 270 0}", + "Pos": "[-2779.6831 -13020.7129 -896.8659]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "068" + } + ], + "Left": false + }, + "115": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "235", + "Angles": "{356.5706 215.5353 0}", + "Pos": "[-13460.7168 -10171.9326 -986.2127]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": true + }, + "116": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "237", + "Angles": "{0 180 0}", + "Pos": "[-14841.0137 1128.22 -986.2566]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "117": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "VB239", + "Angles": "{356.531 128.191 0}", + "Pos": "[-12295.1445 11996.3135 -986.2139]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "067", + "RouteName": "", + "Lights": "3-31-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": true + }, + "118": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "VB243", + "Angles": "{0 90 0}", + "Pos": "[-660.5109 10704.793 -985.1797]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "06", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "119": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YG-RW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "VB241", + "Angles": "{356.9846 74.1806 0}", + "Pos": "[-5843.1123 13487.2832 -985.6308]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "006" + } + ], + "Left": true + }, + "120": + { + "Approve0": false, + "RouteNumberSetup": "134W", + "LensesStr": "WY-YR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "VB245", + "Angles": "{0 90 0}", + "Pos": "[4345.1543 10708 -995.1428]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "4-42-42-1", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "121": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "19", + "Angles": "{360 0 0}", + "Pos": "[-15922.207 -1045.722 4939.0117]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "067", + "RouteName": "", + "Lights": "3-31-1-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ] + }, + "122": + { + "Approve0": false, + "RouteNumberSetup": "12", + "LensesStr": "WRW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "VB1", + "Angles": "{0 180 0}", + "Pos": "[8214.7939 1577.2622 -985.5056]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "2", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "Left": false + }, + "123": + { + "Approve0": false, + "RouteNumberSetup": "12", + "LensesStr": "WRW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "VB2", + "Angles": "{0 180 0}", + "Pos": "[8479.2656 1551.5947 -985.0027]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "4", + "Lights": "1", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "124": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "12", + "Angles": "{0 270 0}", + "Pos": "[4996.7065 12385.1074 -984.9977]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "3-31-21", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "125": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "10", + "Angles": "{0 180 0}", + "Pos": "[8849.2168 8172.6099 -985.0316]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "Left": false + }, + "126": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "49", + "Angles": "{0 90 0}", + "Pos": "[612.7015 -15800 4386.4941]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "06", + "RouteName": "", + "Lights": "3-31-21", + "NextSignal": "*", + "Switches": "" + } + ] + }, + "127": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "VB1ST", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[8214.9443 -1675.8925 -985.5056]", + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04", + "Lights": "3-31-21", + "NextSignal": "VB1ST", + "RouteName": "" + } + ], + "NonAutoStop": true + }, + "128": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Name": "VB2ST", + "ARSOnly": true, + "Angles": "{0 0 0}", + "Pos": "[8478.9434 -1689.7291 -985.5056]", + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "3-31-21", + "NextSignal": "VB2ST", + "Switches": "" + } + ], + "NonAutoStop": true, + "Left": true + }, + "129": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "14", + "Angles": "{0 270 0}", + "Pos": "[865.132 12385 -985.0796]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "130": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "16", + "Angles": "{356.7212 251.0193 0}", + "Pos": "[-1761.5787 12560.3389 -985.6341]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": true + }, + "131": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "18", + "Angles": "{0 270 0}", + "Pos": "[-7498.2427 15282.0137 -986.2566]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "132": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "20", + "Angles": "{1.5416 352.5153 0}", + "Pos": "[-15730.1279 8954.4717 -986.2126]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "133": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "22", + "Angles": "{0 0 0}", + "Pos": "[-15850.9141 -2648.9763 -986.2566]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "134": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "24", + "Angles": "{3.2203 62.0264 0}", + "Pos": "[-12433.6123 -13018.0127 -986.2142]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "135": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "26", + "Angles": "{0 90 0}", + "Pos": "[-1790.4028 -14045.7129 -862.7735]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "068" + } + ], + "Left": false + }, + "136": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "28", + "Angles": "{2.4507 105.3844 0}", + "Pos": "[8879.1953 -13637.709 -685.2124]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "068" + } + ], + "Left": false + }, + "137": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "30", + "Angles": "{0 180 0}", + "Pos": "[13825.5137 -4280.458 -685.2007]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-21-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "138": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "32", + "Angles": "{0 180 0}", + "Pos": "[13825.0137 6476.5371 -384.1107]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-1-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "139": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "34", + "Angles": "{2.1114 258.0487 0}", + "Pos": "[8224.5215 15385.3252 -383.7216]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "067", + "Lights": "3-31-31-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "140": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "36", + "Angles": "{0 270 0}", + "Pos": "[4891.2793 15632.0137 -383.1146]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "06" + } + ], + "Left": false + }, + "141": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "38", + "Angles": "{0 270 0}", + "Pos": "[2571.6646 15632.0137 -383.1146]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "0046", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "142": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "40", + "Angles": "{0 270 0}", + "Pos": "[272.1987 15632 -382.6306]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "06", + "Lights": "3-31-21", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "143": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "42", + "Angles": "{0 270 0}", + "Pos": "[-3447.6938 15632 -382.6306]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "Left": false + }, + "144": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "44", + "Angles": "{0 270 0}", + "Pos": "[-6073.8203 15632.0137 -383.9906]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "145": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "46", + "Angles": "{2.1113 348.0488 0}", + "Pos": "[-15442.1963 10084.0449 -383.7231]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "146": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "48", + "Angles": "{0 0 0}", + "Pos": "[-15700.0137 -888.4901 -161.2471]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "147": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "64", + "Angles": "{0 180 0}", + "Pos": "[15185.9063 1652.2926 219.5753]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "Left": false + }, + "148": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "62", + "Angles": "{0 179.2628 0}", + "Pos": "[15003.4316 -1625.2716 219.5384]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "149": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "60", + "Angles": "{0 180 0}", + "Pos": "[15001.8066 -4910.2915 219.5614]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": true + }, + "150": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "58", + "Angles": "{1.5416 172.5153 0}", + "Pos": "[14903.4609 -8189.9937 218.9749]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "151": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "56", + "Angles": "{3.2203 152.0263 0}", + "Pos": "[13955.7842 -11309.9365 218.9673]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "152": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "50", + "Angles": "{3.4293 35.5423 0}", + "Pos": "[-14341.9268 -11815.8398 -82.6365]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "153": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "52", + "Angles": "{0 90 0}", + "Pos": "[-4169.6611 -14695.7129 -80.7915]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "154": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "54", + "Angles": "{0 90 0}", + "Pos": "[5496.0859 -14695.4141 218.4624]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "067", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "155": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "66", + "Angles": "{0 180 0}", + "Pos": "[15186.207 5845.1074 219.3764]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": true + }, + "156": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "68", + "Angles": "{1.3389 187.5141 0}", + "Pos": "[15089.6846 8483.7324 222.7318]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "157": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "70", + "Angles": "{0.2349 269.5034 0}", + "Pos": "[6889.4351 15115.9551 219.7616]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "158": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "72", + "Angles": "{0.6924 273.7268 0}", + "Pos": "[-7507.1035 15077.666 487.5316]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "159": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "74", + "Angles": "{1.541 352.4896 0}", + "Pos": "[-14645.2871 8554.3096 488.7011]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "160": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "76", + "Angles": "{0 0 0}", + "Pos": "[-14751.4063 -2411.9834 796.8737]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "161": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "78", + "Angles": "{1.7381 81.0832 0}", + "Pos": "[-8595.1006 -12606.4961 862.1576]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "068" + } + ], + "Left": false + }, + "162": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "80", + "Angles": "{3.4291 144.4492 0}", + "Pos": "[498.0255 -9848.3535 865.9338]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "067" + } + ], + "Left": false + }, + "163": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Double": false, + "Name": "82", + "Angles": "{0 180 0}", + "Pos": "[1887.3939 -2490.7551 858.4353]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "Left": false + }, + "164": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "100", + "Angles": "{0 0 0}", + "Pos": "[10524.8926 2802.4507 858.2512]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "165": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "98", + "Angles": "{0 0 0}", + "Pos": "[10524.8926 6071.3701 858.2144]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "166": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "96", + "Angles": "{360 5.5979 0}", + "Pos": "[10497.9883 9356.1475 858.0244]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "Left": false + }, + "167": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "94", + "Angles": "{357.7631 17.1448 0}", + "Pos": "[10050.5107 12622.3262 857.5009]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": true + }, + "168": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "WYY-YRW", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "PK102", + "Angles": "{0 0 0}", + "Pos": "[10524.793 -1831.0963 858.4944]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "5-53-42-42b", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "169": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "104", + "Angles": "{0 355.7085 0}", + "Pos": "[10180.7656 -4651.6084 858.3484]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "04" + } + ], + "Left": false + }, + "170": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "92", + "Angles": "{358.802 84.5771 0}", + "Pos": "[7553.0791 14345.418 857.9947]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": true + }, + "171": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Double": false, + "Name": "84", + "Angles": "{0 180 0}", + "Pos": "[1887.3939 1614.8303 858.4353]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "172": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Double": false, + "Name": "86", + "Angles": "{0 180 0}", + "Pos": "[1887.7939 5811.4741 858.1654]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "173": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "88", + "Angles": "{360 175.0979 0}", + "Pos": "[1928.9044 9720.6787 858.0244]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "174": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "90", + "Angles": "{356.7144 124.5725 0}", + "Pos": "[3153.501 13815.7275 857.1477]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "175": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "106", + "Angles": "{0 0 0}", + "Pos": "[10152.9863 -8634.3447 858.4944]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "176": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "108", + "Angles": "{357.1918 292.26 0}", + "Pos": "[8029.9238 -14356.9199 858.5016]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "177": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "110", + "Angles": "{0 270 0}", + "Pos": "[-3453.5801 -14679.2871 1144.7682]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "178": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "112", + "Angles": "{356.9891 203.3672 0}", + "Pos": "[-13684.0469 -10624.8076 1195.6786]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "179": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "124", + "Angles": "{0 90 0}", + "Pos": "[-2316.0522 13541 1496.5313]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-21", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "Left": false + }, + "180": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "122", + "Angles": "{358.7422 83.699 0}", + "Pos": "[-5541.8979 13925.5957 1496.3185]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "181": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "120", + "Angles": "{358.0716 101.9478 0}", + "Pos": "[-8826.2793 13721.7734 1496.6199]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "182": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "118", + "Angles": "{356.531 128.191 0}", + "Pos": "[-11803.8115 12410.2305 1496.6156]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "183": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "116", + "Angles": "{357.1122 158.7655 0}", + "Pos": "[-13734.1367 9796.2754 1496.6151]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "184": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "148", + "Angles": "{0 180 0}", + "Pos": "[-14383.4063 782.8275 2134.2512]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-21", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "185": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "146", + "Angles": "{356.8422 192.7758 0}", + "Pos": "[-14260.8398 -2505.2708 2134.6238]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "186": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "144", + "Angles": "{3.4384 203.0562 0}", + "Pos": "[-12675.3252 -5341.4854 2134.6143]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "187": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "142", + "Angles": "{359.0881 184.887 0}", + "Pos": "[-12284.2314 -8594.3447 2134.6211]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "188": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "140", + "Angles": "{356.878 205.6185 0}", + "Pos": "[-11494.5068 -11762.5273 2134.6182]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "189": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "176", + "Angles": "{0 180 0}", + "Pos": "[-13464 -1415.1655 2736.4944]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-21", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "190": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "174", + "Angles": "{0 180 0}", + "Pos": "[-13463.5137 -4758.6523 2736.4644]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "191": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "172", + "Angles": "{358.6627 187.4815 0}", + "Pos": "[-13338.2021 -8019.7725 2736.6174]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "192": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "170", + "Angles": "{356.6956 210.4096 0}", + "Pos": "[-12310.2129 -11113.459 2736.616]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "193": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "168", + "Angles": "{356.7798 242.0143 0}", + "Pos": "[-9955.2529 -13333.7764 2736.616]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "194": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "226", + "Angles": "{0 270 0}", + "Pos": "[4452.5615 -14685.7637 4386.5313]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-21", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "Left": false + }, + "195": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "224", + "Angles": "{358.0716 281.9478 0}", + "Pos": "[7732.9863 -14436.332 4386.6201]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "196": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "222", + "Angles": "{356.531 308.191 0}", + "Pos": "[10740.4551 -13107.0986 4386.6157]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "197": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "220", + "Angles": "{357.1122 338.7655 0}", + "Pos": "[12660.8135 -10483.5059 4386.6157]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "198": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "218", + "Angles": "{359.3085 357.4104 0}", + "Pos": "[13302.3975 -7263.854 4386.6167]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "199": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "254", + "Angles": "{0 270 0}", + "Pos": "[455.024 -12166 4829.4941]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-21", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "200": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "252", + "Angles": "{360 265.0979 0}", + "Pos": "[3735.2261 -12326.8594 4829.9814]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "201": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "250", + "Angles": "{358.0724 281.9694 0}", + "Pos": "[6984.6631 -12097.6367 4825.2285]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "202": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "248", + "Angles": "{356.5709 308.1949 0}", + "Pos": "[9966.0928 -10755.9111 4821.8481]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "203": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "246", + "Angles": "{357.1104 338.7603 0}", + "Pos": "[11842.4512 -8092.3589 4823.4795]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "204": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Double": false, + "Name": "272", + "Angles": "{0 90 0}", + "Pos": "[-3092.0715 12793.793 5130.7441]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "205": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Double": false, + "Name": "270", + "Angles": "{0 90 0}", + "Pos": "[-6383.8662 12792.793 5131.4014]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "206": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "268", + "Angles": "{358.4597 98.9125 0}", + "Pos": "[-9664.2451 12640.8145 5127.4307]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "207": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "266", + "Angles": "{356.6961 122.9416 0}", + "Pos": "[-12743.9043 11520.209 5123.3965]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "208": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "264", + "Angles": "{356.8762 154.3582 0}", + "Pos": "[-14849.2803 9044.4199 5124.1665]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "209": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "114", + "Angles": "{0 180 0}", + "Pos": "[-14405.2871 371.9619 1389.1362]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "0467", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "210": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "126", + "Angles": "{0 90 0}", + "Pos": "[1557.5796 13541 1496.4944]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "211": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "128", + "Angles": "{359.998 87.6158 0}", + "Pos": "[4204.5313 13533.4951 1496.4573]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "212": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "130", + "Angles": "{356.878 25.6185 0}", + "Pos": "[14384.2637 9462.7139 1496.6157]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "213": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "132", + "Angles": "{0 0 0}", + "Pos": "[15292.9863 -1991.7034 1692.1394]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "214": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "134", + "Angles": "{356.5071 319.094 0}", + "Pos": "[13540.8926 -13179.7236 1833.9047]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "215": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "138", + "Angles": "{358.2612 261.0835 0}", + "Pos": "[-6169.3657 -15404.2422 2134.6196]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "067" + } + ], + "Left": false + }, + "216": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "136", + "Angles": "{0 270 0}", + "Pos": "[3036.6875 -15548.2871 1929.5743]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "068" + } + ], + "Left": false + }, + "217": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "150", + "Angles": "{0 180 0}", + "Pos": "[-14383.4063 5090.8062 2134.2144]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "218": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "152", + "Angles": "{359.3085 177.4104 0}", + "Pos": "[-14365.3467 7714.812 2134.6179]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "219": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "154", + "Angles": "{359.309 93.6918 0}", + "Pos": "[-7158.4546 15138.458 2134.6211]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "220": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "156", + "Angles": "{0 90 0}", + "Pos": "[4404.6865 15169.8867 2435.4644]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "221": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "158", + "Angles": "{357.3933 17.2128 0}", + "Pos": "[13837.9912 10304.1113 2435.6206]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "068", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "222": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "160", + "Angles": "{0 0 0}", + "Pos": "[13838.0859 -1172.2142 2435.4644]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "223": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "162", + "Angles": "{357.2472 340.8125 0}", + "Pos": "[13625.9873 -9775.7695 2435.6174]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "067", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "224": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "164", + "Angles": "{359.7652 271.4851 0}", + "Pos": "[6339.9966 -14308.8105 2435.6208]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "067", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "225": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "166", + "Angles": "{0 270 0}", + "Pos": "[-3458.5554 -14313.8867 2719.0227]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "226": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "178", + "Angles": "{0 180 0}", + "Pos": "[-13464 2495.9834 2736.4944]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": true + }, + "227": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "200", + "Angles": "{0 270 0}", + "Pos": "[1504.9875 -13766.4043 3340.1731]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04", + "Lights": "3-31-1-21-21", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "228": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "198", + "Angles": "{360 261.5656 0}", + "Pos": "[4763.1992 -14069.0859 3340.1343]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "229": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "196", + "Angles": "{0 270 0}", + "Pos": "[8028.1733 -14145.5117 3339.7444]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "230": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "194", + "Angles": "{357.7631 287.1448 0}", + "Pos": "[11295.4453 -13932.1953 3339.4702]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "231": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "192", + "Angles": "{358.802 354.5771 0}", + "Pos": "[13020.0947 -11411.1172 3339.9744]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "232": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "180", + "Angles": "{0 180 0}", + "Pos": "[-13464.207 5159.0317 2736.4644]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "233": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "182", + "Angles": "{358.2617 100.3786 0}", + "Pos": "[-7502.6167 13668.2773 2736.6233]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "234": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "184", + "Angles": "{0 90 0}", + "Pos": "[4040.5435 13845.2871 3016.5933]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "235": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "186", + "Angles": "{357.2474 19.165 0}", + "Pos": "[13650.7402 9242.582 3038.6204]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "236": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "190", + "Angles": "{358.524 347.7939 0}", + "Pos": "[13939.2324 -6707.7759 3339.9939]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "Left": false + }, + "237": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "188", + "Angles": "{0 0 0}", + "Pos": "[14165.5859 905.4565 3158.9985]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "067" + } + ], + "Left": false + }, + "238": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "202", + "Angles": "{0 270 0}", + "Pos": "[-3262.821 -13766.4238 3340.1362]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "239": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "204", + "Angles": "{1.4982 261.5073 0}", + "Pos": "[-9694.2822 -12748.8965 3340.3521]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "240": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "206", + "Angles": "{0 180 0}", + "Pos": "[-14307.4941 -9365.2461 3340.917]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "046", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "241": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "208", + "Angles": "{0 180 0}", + "Pos": "[-14307.5059 1958.1469 3732.4009]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "242": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "210", + "Angles": "{356.878 115.6185 0}", + "Pos": "[-10547.5186 12089.1895 3784.6177]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "243": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "212", + "Angles": "{0 90 0}", + "Pos": "[917.1699 12943.3867 3984.1882]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "244": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "214", + "Angles": "{356.531 38.191 0}", + "Pos": "[11742.8311 10362.7949 4085.6155]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "068", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "245": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "216", + "Angles": "{0 0 0}", + "Pos": "[13321.2871 301.8802 4195.0127]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "067", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "246": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "228", + "Angles": "{0 270 0}", + "Pos": "[469.3198 -14686 4386.4941]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "04", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "247": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "230", + "Angles": "{0 270 0}", + "Pos": "[-2170.95 -14685.9863 4386.6143]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "068" + } + ], + "Left": false + }, + "248": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "232", + "Angles": "{356.5706 215.5353 0}", + "Pos": "[-12899.832 -11899.8301 4386.6157]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "068" + } + ], + "Left": false + }, + "249": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "234", + "Angles": "{0 175.0969 0}", + "Pos": "[-14166.4531 -394.6328 4386.4443]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "068" + } + ], + "Left": false + }, + "250": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "236", + "Angles": "{357.7156 105.3829 0}", + "Pos": "[-9240.6387 8978.2227 4379.7593]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "068" + } + ], + "Left": false + }, + "251": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "238", + "Angles": "{0 90 0}", + "Pos": "[1928.2101 9366.207 4655.4951]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "068" + } + ], + "Left": false + }, + "252": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "240", + "Angles": "{357.3911 72.7569 0}", + "Pos": "[10592.0156 8908.6807 4824.0322]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "067" + } + ], + "Left": false + }, + "253": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "242", + "Angles": "{357.8899 13.6309 0}", + "Pos": "[14925.2461 4262.2212 4824.6724]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "Left": false + }, + "254": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 1, + "Double": false, + "Name": "244", + "Angles": "{1.1763 318.5638 0}", + "Pos": "[13529.4492 -1781.8893 4830.1328]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "RouteName": "", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "ARSCodes": "046" + } + ], + "Left": false + }, + "255": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "256", + "Angles": "{0 270 0}", + "Pos": "[-3952.0063 -12166 4829.4941]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "Switches": "" + } + ], + "Left": false + }, + "256": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "258", + "Angles": "{0 279.7628 0}", + "Pos": "[-6575.4805 -12418.2734 4829.9814]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "067", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "257": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "260", + "Angles": "{356.8787 207.9788 0}", + "Pos": "[-14651.8076 -9162.9814 4822.46]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "067", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "258": + { + "Approve0": false, + "RouteNumberSetup": "", + "LensesStr": "YGR", + "RouteNumber": "", + "TwoToSix": false, + "Class": "gmod_track_signal", + "IsolateSwitches": true, + "SignalType": 0, + "Double": false, + "Name": "262", + "Angles": "{0 180 0}", + "Pos": "[-15657.5938 1185.1919 5016.9155]", + "DoubleL": false, + "Routes": + [ + + { + "Manual": false, + "Switches": "", + "ARSCodes": "067", + "Lights": "3-31-1-21-2", + "NextSignal": "*", + "RouteName": "" + } + ], + "Left": false + }, + "259": + { + "YOffset": -4, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "Left": false, + "SignType": 21, + "Pos": "[3623.9551 10708 -995.1428]" + }, + "260": + { + "YOffset": 8.490600000000001, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.2453, + "Left": false, + "SignType": 30, + "Pos": "[-2965.0562 13404.207 5130.7441]" + }, + "261": + { + "YOffset": 8.490600000000001, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.2453, + "Left": false, + "SignType": 31, + "Pos": "[-5639.0962 13056.4063 5131.3643]" + }, + "262": + { + "YOffset": 4.717, + "Angles": "{360 90 0}", + "Class": "gmod_track_signs", + "ZOffset": -20.283, + "Left": false, + "SignType": 3, + "Pos": "[-15922.207 -1199.9691 4933.6255]" + }, + "263": + { + "YOffset": 4.717, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": -20.283, + "Left": false, + "SignType": 2, + "Pos": "[-3676.7559 -12966 4829.4941]" + }, + "264": + { + "YOffset": 4.717, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": -25, + "Left": false, + "SignType": 3, + "Pos": "[454.2548 -12966 4829.4941]" + }, + "265": + { + "YOffset": 42.4528, + "Angles": "{3.2817 251.0062 0}", + "Class": "gmod_track_signs", + "ZOffset": -25, + "Left": false, + "SignType": 5, + "Pos": "[15369.3379 374.1856 4830.1377]" + }, + "266": + { + "YOffset": 4.717, + "Angles": "{1.1273 445.0836 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.0755, + "Left": false, + "SignType": 4, + "Pos": "[-14349.9121 2597.9875 4387.7646]" + }, + "267": + { + "YOffset": 12.2642, + "Angles": "{1.1275 96.1758 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.0755, + "Left": false, + "SignType": 3, + "Pos": "[-15464.8945 -9033.4209 4386.6235]" + }, + "268": + { + "YOffset": 15, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 9.9057, + "Left": false, + "SignType": 2, + "Pos": "[158.316 -15800 4386.4941]" + }, + "269": + { + "YOffset": 9, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "Left": false, + "SignType": 1, + "Pos": "[8214.9443 -1574.5344 -985.5056]" + }, + "270": + { + "YOffset": 15, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 9.9057, + "Left": false, + "SignType": 5, + "Pos": "[4598.0537 -15800 4386.4941]" + }, + "271": + { + "YOffset": 5, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": -6.1321, + "Left": false, + "SignType": 34, + "Pos": "[8479.2656 2231.188 -985.0027]" + }, + "272": + { + "YOffset": 5, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": -6.1321, + "Left": true, + "SignType": 34, + "Pos": "[8214.7939 2213.4468 -985.5056]" + }, + "273": + { + "YOffset": 15, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 9.9057, + "Left": false, + "SignType": 4, + "Pos": "[-6677.0879 14009.3867 3784.3743]" + }, + "274": + { + "YOffset": 15, + "Angles": "{1.7388 441.1079 0}", + "Class": "gmod_track_signs", + "ZOffset": 9.9057, + "Left": false, + "SignType": 3, + "Pos": "[-15170.4297 7945.3062 3784.6167]" + }, + "275": + { + "YOffset": -2.8302, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 9.9057, + "Left": false, + "SignType": 2, + "Pos": "[1502.7166 -15259.5 3340.3457]" + }, + "276": + { + "YOffset": 14.1509, + "Angles": "{0.491 249.6796 0}", + "Class": "gmod_track_signs", + "ZOffset": 9.9057, + "Left": false, + "SignType": 5, + "Pos": "[14524.6787 -8748.3838 3340.4697]" + }, + "277": + { + "YOffset": 14.1509, + "Angles": "{360 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 9.9057, + "Left": false, + "SignType": 4, + "Pos": "[-2100.8247 14869.3926 2807.8975]" + }, + "278": + { + "YOffset": 14.1509, + "Angles": "{3.4691 411.8029 0}", + "Class": "gmod_track_signs", + "ZOffset": 9.9057, + "Left": false, + "SignType": 3, + "Pos": "[-13008.5439 12375.1123 2736.6145]" + }, + "279": + { + "YOffset": 25.4717, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 9.9057, + "Left": false, + "SignType": 2, + "Pos": "[-14655.5 3165.0623 2736.5012]" + }, + "280": + { + "YOffset": 16.0377, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 9.9057, + "Left": false, + "SignType": 5, + "Pos": "[-14656 -1157.1819 2736.4944]" + }, + "281": + { + "YOffset": 16.0377, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 9.9057, + "Left": false, + "SignType": 4, + "Pos": "[6155.7412 15681.5859 2435.4644]" + }, + "282": + { + "YOffset": 16.0377, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 9.9057, + "Left": false, + "SignType": 3, + "Pos": "[-6814.6792 15681.6133 2134.4644]" + }, + "283": + { + "YOffset": 16.0377, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 9.9057, + "Left": false, + "SignType": 2, + "Pos": "[-15150.9941 5436.7988 2134.2512]" + }, + "284": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": -31.6038, + "Left": false, + "SignType": 3, + "Pos": "[-15151.2012 833.8862 2134.2144]" + }, + "285": + { + "YOffset": 12.2642, + "Angles": "{3.3743 122.9422 0}", + "Class": "gmod_track_signs", + "ZOffset": -8.962300000000001, + "Left": false, + "SignType": 5, + "Pos": "[-11826.8096 -13060.4834 2134.616]" + }, + "286": + { + "YOffset": 12.2642, + "Angles": "{2.2856 346.3855 0}", + "Class": "gmod_track_signs", + "ZOffset": -8.962300000000001, + "Left": false, + "SignType": 3, + "Pos": "[10623.001 13814.9766 1496.6174]" + }, + "287": + { + "YOffset": 6.6038, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 3.3019, + "Left": false, + "SignType": 4, + "Pos": "[15925.5859 4735.5522 1496.6644]" + }, + "288": + { + "YOffset": 19.8113, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 35.3774, + "Left": false, + "SignType": 2, + "Pos": "[1592.0739 14561 1496.4944]" + }, + "289": + { + "YOffset": 15, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 41.0377, + "Left": false, + "SignType": 5, + "Pos": "[-2342.0059 14561 1496.4944]" + }, + "290": + { + "YOffset": 19.8113, + "Angles": "{360 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 17.4528, + "Left": false, + "SignType": 3, + "Pos": "[-3281.8496 -15703.2871 1138.2125]" + }, + "291": + { + "YOffset": 19.8113, + "Angles": "{3.4293 125.5423 0}", + "Class": "gmod_track_signs", + "ZOffset": 14.6226, + "Left": false, + "SignType": 4, + "Pos": "[-13949.252 -13015.2871 1195.6749]" + }, + "292": + { + "YOffset": 12.2642, + "Angles": "{1.5809 189.348 0}", + "Class": "gmod_track_signs", + "ZOffset": 10.8491, + "Left": false, + "SignType": 2, + "Pos": "[8209.0166 -15609.3906 858.497]" + }, + "293": + { + "YOffset": 12.2642, + "Angles": "{0 271.2891 0}", + "Class": "gmod_track_signs", + "ZOffset": 10.8491, + "Left": false, + "SignType": 34, + "Pos": "[11158.1309 -5173.3994 858.4943]" + }, + "294": + { + "YOffset": 12.2642, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 50, + "Left": false, + "SignType": 2, + "Pos": "[10789 2641.7324 858.4944]" + }, + "295": + { + "YOffset": 12.2642, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": -4.2453, + "Left": false, + "SignType": 5, + "Pos": "[1623.9937 -3545.0293 858.3654]" + }, + "296": + { + "YOffset": 12.2642, + "Angles": "{360 180 0}", + "Class": "gmod_track_signs", + "ZOffset": -4.2453, + "Left": false, + "SignType": 4, + "Pos": "[1421.4855 14851.793 399.7787]" + }, + "297": + { + "YOffset": 12.2642, + "Angles": "{356.6261 125.5416 0}", + "Class": "gmod_track_signs", + "ZOffset": -4.2453, + "Left": false, + "SignType": 3, + "Pos": "[13497.1855 12158.4131 211.6294]" + }, + "298": + { + "YOffset": 12.2642, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 33.4906, + "Left": false, + "SignType": 2, + "Pos": "[14921.5938 6217.1997 219.4133]" + }, + "299": + { + "YOffset": 12.2642, + "Angles": "{359.212 446.3652 0}", + "Class": "gmod_track_signs", + "ZOffset": 33.4906, + "Left": false, + "SignType": 5, + "Pos": "[14903.9258 1056.7117 219.5433]" + }, + "300": + { + "YOffset": 12.2642, + "Angles": "{360 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.2453, + "Left": false, + "SignType": 4, + "Pos": "[-13835.7129 300.1876 -215.8866]" + }, + "301": + { + "YOffset": 12.2642, + "Angles": "{356.6256 237.0517 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.2453, + "Left": false, + "SignType": 3, + "Pos": "[-12631.1611 11492.8076 -383.7237]" + }, + "302": + { + "YOffset": 12.2642, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 38.2075, + "Left": false, + "SignType": 2, + "Pos": "[-3520.8364 14608 -382.6306]" + }, + "303": + { + "YOffset": 14.1509, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 24.0566, + "Left": false, + "SignType": 5, + "Pos": "[361.0436 14608 -382.6306]" + }, + "304": + { + "YOffset": 17.9245, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 18.3962, + "Left": false, + "SignType": 4, + "Pos": "[-14841.0137 1463.9695 -986.2566]" + }, + "305": + { + "YOffset": 38.6792, + "Angles": "{356.5706 215.5353 0}", + "Class": "gmod_track_signs", + "ZOffset": 17.4528, + "Left": false, + "SignType": 3, + "Pos": "[-12029.1436 12195.7148 -986.213]" + }, + "306": + { + "YOffset": 17, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 35, + "Left": false, + "SignType": 34, + "Pos": "[4233.3989 10708 -995.1428]" + }, + "307": + { + "YOffset": 9, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "Left": true, + "SignType": 1, + "Pos": "[8478.9443 -1580.9104 -985.5056]" + }, + "308": + { + "YOffset": 9, + "Angles": "{90 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 0, + "Left": false, + "SignType": 1, + "Pos": "[8263.8486 -1427.5774 -725.985]" + }, + "309": + { + "YOffset": 5, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": -6.1321, + "Left": false, + "SignType": 2, + "Pos": "[8424.8994 3178.54 5253.4941]" + }, + "310": + { + "YOffset": 6.6038, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": -6.1321, + "Left": false, + "SignType": 3, + "Pos": "[695.9727 12385.2559 -985.0796]" + }, + "311": + { + "YOffset": 16.0377, + "Angles": "{0.2345 360.5031 0}", + "Class": "gmod_track_signs", + "ZOffset": 10.8491, + "Left": false, + "SignType": 5, + "Pos": "[-7797.9219 15281.0313 -986.2078]" + }, + "312": + { + "YOffset": 21.6981, + "Angles": "{1.9289 349.6179 0}", + "Class": "gmod_track_signs", + "ZOffset": 15.566, + "Left": false, + "SignType": 3, + "Pos": "[7928.9331 15442.7773 -383.7207]" + }, + "313": + { + "YOffset": 31.1321, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 15.566, + "Left": true, + "SignType": 4, + "Pos": "[13825.0137 6660.8604 -384.1107]" + }, + "314": + { + "YOffset": 12.2642, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 26.8868, + "Left": false, + "SignType": 5, + "Pos": "[-3581.3047 15632 -382.6306]" + }, + "315": + { + "YOffset": 6.6038, + "Angles": "{360 90 0}", + "Class": "gmod_track_signs", + "ZOffset": -7.0755, + "Left": false, + "SignType": 2, + "Pos": "[-15331.2051 -3398.6978 3543.7983]" + }, + "Version": 1.2 +} \ No newline at end of file diff --git a/lua/metrostroi_data/signs_gm_mus_orange_line_c..lua b/lua/metrostroi_data/signs_gm_mus_orange_line_c..lua new file mode 100644 index 0000000..36fecf7 --- /dev/null +++ b/lua/metrostroi_data/signs_gm_mus_orange_line_c..lua @@ -0,0 +1 @@ +{"1":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"2-2-2-1-13","NextSignal":"PR 2","Switches":"","ARSCodes":"0004"}},"Pos":"[-3829 2144.3943 384.4944]","Name":"PR 4"},"2":{"IsolateSwitches":true,"SignalType":1,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"PR 4","Switches":"","ARSCodes":"004"}},"Pos":"[693.5899 -2176.2061 384.4944]","Name":"PR 6"},"3":{"IsolateSwitches":true,"SignalType":1,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"PR 6","Switches":"","ARSCodes":"004"}},"Pos":"[6630.6631 -2176.106 384.4944]","Name":"PR 8"},"4":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{3.502 226.8198 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"PR 8","Switches":"","ARSCodes":"004"}},"Pos":"[13498.5703 -2878.6228 384.5066]","Name":"PR 10"},"5":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"PR 10","Switches":"","ARSCodes":"004"}},"Pos":"[14335.793 -9399.2891 384.4944]","Name":"PR 12"},"6":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0.0019 90.6856 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"PR 12","Switches":"","ARSCodes":"004"}},"Pos":"[11304.4063 -14463.7305 384.5036]","Name":"PR 14"},"7":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"2-1-13","NextSignal":"MS 2","Switches":"","ARSCodes":"04"}},"Pos":"[1030.6936 -14464.0938 -127.5056]","Name":"MS 4"},"8":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"MS 4","Switches":"","ARSCodes":"004"}},"Pos":"[-5812.085 -14464.207 -639.5056]","Name":"MS 6"},"9":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{2.6594 72.4416 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"MS 6","Switches":"","ARSCodes":"004"}},"Pos":"[-12584.8486 -14279.084 -639.4934]","Name":"MS 8"},"10":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"MS 8","Switches":"","ARSCodes":"004"}},"Pos":"[-14336.207 -6378.0771 -639.3806]","Name":"GFC 2"},"11":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"2-1-13","NextSignal":"GFC 2","Switches":"","ARSCodes":"04"}},"Pos":"[-14336.2061 -2085.8608 -639.3806]","Name":"GFC 4"},"12":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"GFC 4","Switches":"","ARSCodes":"0046"}},"Pos":"[-14336.207 4737.2183 -639.5056]","Name":"GFC 6"},"13":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{2.7529 340.8303 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"GFC 6","Switches":"","ARSCodes":"0046"}},"Pos":"[-13750.5293 11345.4609 -639.5056]","Name":"GFC 8"},"14":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{1.9284 281.9704 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"GFC 8","Switches":"","ARSCodes":"00467"}},"Pos":"[-8823.8984 15478.6621 -639.5018]","Name":"GFC 10"},"15":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"GFC 10","Switches":"","ARSCodes":"004678"}},"Pos":"[-2064.5857 15744.0137 -639.5057]","Name":"GFC 12"},"16":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"GFC 12","Switches":"","ARSCodes":"004678"}},"Pos":"[4704.8633 15744.0137 -639.5057]","Name":"GFC 14"},"17":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{3.3744 237.0603 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"GFC 14","Switches":"","ARSCodes":"004678"}},"Pos":"[11290.1611 14494.6729 -639.5045]","Name":"GFC 16"},"18":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0.9119 184.9138 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"GFC 16","Switches":"","ARSCodes":"004678"}},"Pos":"[14282.2012 8817.9766 -639.4988]","Name":"GFC 18"},"19":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"GFC 18","Switches":"","ARSCodes":"004"}},"Pos":"[14336 875.4379 -639.4056]","Name":"WB 2"},"20":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"2-1-13","NextSignal":"WB 2","Switches":"","ARSCodes":"04"}},"Pos":"[14336 -2554.791 -639.4056]","Name":"WB 4"},"21":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{1.1993 174.9442 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 4","Switches":"","ARSCodes":"0046"}},"Pos":"[14309.3076 -9376.7559 -768.5057]","Name":"WB 6"},"22":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{-0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 6","Switches":"","ARSCodes":"0046"}},"Pos":"[8929.6309 -11904.0137 -767.5057]","Name":"WB 8"},"23":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 8","Switches":"","ARSCodes":"00467"}},"Pos":"[2249.4153 -11904.0137 -1312.363]","Name":"WB 10"},"24":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{-0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 10","Switches":"","ARSCodes":"004678"}},"Pos":"[-4450.5479 -11903.9141 -1529.3057]","Name":"WB 12"},"25":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{3.4929 49.0969 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 12","Switches":"","ARSCodes":"004678"}},"Pos":"[-10824.5566 -10147.6875 -1529.5054]","Name":"WB 14"},"26":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0.2348 1.5137 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 14","Switches":"","ARSCodes":"004678"}},"Pos":"[-13182.9707 -4136.0601 -1529.4989]","Name":"WB 16"},"27":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{3.0111 336.6283 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 16","Switches":"","ARSCodes":"004678"}},"Pos":"[-12476.6777 2522.7893 -1529.5023]","Name":"WB 18"},"28":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"2","Angles":"{1.7383 280.4022 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 18","Switches":"","ARSCodes":"004678"}},"Pos":"[-7416.146 6386.2422 -1529.5022]","Name":"WB 20"},"29":{"IsolateSwitches":false,"SignalType":0,"LensesStr":"RW","RouteNumber":"1","Angles":"{-0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-2","NextSignal":"WB 202","ARSCodes":"04","Switches":""}},"Pos":"[-3424.2771 5590.2061 -1529.5056]","Name":"WB 201"},"30":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"RW","RouteNumber":"","Angles":"{3.0109 293.3825 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1","NextSignal":"","ARSCodes":"1","Switches":""}},"Pos":"[-7888.4614 4853.6357 -1529.502]","Name":"WB 202"},"31":{"IsolateSwitches":false,"SignalType":0,"LensesStr":"YGR-YW-M","RouteNumber":"2","Angles":"{0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 20","Switches":"1541+,1543+,1364+","ARSCodes":"0046"},"2":{"Manual":false,"Lights":"2-5","NextSignal":"WB 201","ARSCodes":"04","Switches":"1541+,1543-,1364-"}},"Pos":"[3832.3518 6598.2119 -1530.5056]","Name":"WB 22"},"32":{"IsolateSwitches":true,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1","NextSignal":"","ARSCodes":"1","Switches":""}},"Pos":"[7791.292 6597.7939 -1529.5056]","Name":"WB 212"},"33":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 24","Switches":"","ARSCodes":"004"}},"Pos":"[11129.5313 1959.8022 -1529.5056]","Name":"VHE 2"},"34":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"2-1-13","NextSignal":"VHE 2","Switches":"","ARSCodes":"04"}},"Pos":"[11129.5313 -1821.4204 -1529.5056]","Name":"VHE 4"},"35":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"VHE 4","Switches":"","ARSCodes":"004"}},"Pos":"[11130.207 -8493.6406 -2041.5056]","Name":"VHE 6"},"36":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"VHE 6","Switches":"","ARSCodes":"004"}},"Pos":"[5008.0986 -11814.207 -2039.5056]","Name":"TGM 1"},"37":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"2-1-13","NextSignal":"TGM 1","Switches":"","ARSCodes":"04"}},"Pos":"[979.2762 -11814 -2039.5056]","Name":"TGM 3"},"38":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{1.74 81.2607 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"TGM 3","Switches":"","ARSCodes":"004"}},"Pos":"[-5896.4419 -11761.7441 -2038.6349]","Name":"TGM 5"},"39":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{3.4512 311.4754 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"TGM 5","Switches":"","ARSCodes":"004"}},"Pos":"[-7436.1572 -6375.3979 -2039.4331]","Name":"TGM 7"},"40":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{360 269.9999 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"TGM 7","Switches":"","ARSCodes":"004"}},"Pos":"[-941.8915 -5672.5059 -1819.1001]","Name":"TGM 9"},"41":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{-0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"TGM 9","Switches":"","ARSCodes":"004"}},"Pos":"[5882.98 -5672.2061 -1527.5056]","Name":"TGM 11"},"42":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"2-1-13","NextSignal":"VHE 1","Switches":"","ARSCodes":"04"}},"Pos":"[10104.4678 1848.298 -1529.5056]","Name":"VHE 3"},"43":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"TGM 11","Switches":"","ARSCodes":"004"}},"Pos":"[10104.4688 -2173.9487 -1529.5056]","Name":"VHE 1"},"44":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"1","Angles":"{-0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"VHE 3","Switches":"","ARSCodes":"004"}},"Pos":"[5776.8569 5589.9873 -1529.5056]","Name":"VHE 5"},"45":{"IsolateSwitches":false,"SignalType":0,"LensesStr":"YGR-YW-M","RouteNumber":"1","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"VHE 5","Switches":"1364+,1543+","ARSCodes":"0046"},"2":{"Manual":false,"Lights":"2-5","NextSignal":"D2 9","Switches":"1364-,1543-","ARSCodes":"04"}},"Pos":"[-3696.8025 5590.2061 -1529.5056]","Name":"VHE 7"},"46":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG-M","RouteNumber":"1","Angles":"{356.4991 136.3677 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"VHE 7","Switches":"","ARSCodes":"00467"}},"Pos":"[-9888.5693 3511.9641 -1529.5057]","Name":"VHE 9"},"47":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{359.9999 180.4657 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"VHE 9","Switches":"","ARSCodes":"004678"}},"Pos":"[-11906.1113 -2826.8442 -1529.4989]","Name":"VHE 11"},"48":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{356.5071 229.094 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"VHE 11","Switches":"","ARSCodes":"004678"}},"Pos":"[-9611.3457 -8976.7852 -1529.5056]","Name":"VHE 13"},"49":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"VHE 13","Switches":"","ARSCodes":"004678"}},"Pos":"[-3371.8701 -10792.0137 -1529.5056]","Name":"VHE 15"},"50":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{360 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"VHE 15","Switches":"","ARSCodes":"004"}},"Pos":"[3393.3552 -10792.0137 -1217.9165]","Name":"VHE 17"},"51":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{358.8016 276.7644 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"VHE 17","Switches":"","ARSCodes":"004"}},"Pos":"[10152.6934 -10761.71 -768.4974]","Name":"VHE 19"},"52":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"VHE 19","Switches":"","ARSCodes":"004"}},"Pos":"[12656 -2674.9626 -639.5056]","Name":"WB 1"},"53":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"2-1-13","NextSignal":"WB 1","Switches":"","ARSCodes":"04"}},"Pos":"[12656 648.4708 -639.5056]","Name":"WB 3"},"54":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{358.8725 6.1498 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 3","Switches":"","ARSCodes":"0046"}},"Pos":"[12582.2793 7329.9863 -639.4982]","Name":"WB 5"},"55":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{356.6955 59.5747 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 5","Switches":"","ARSCodes":"00467"}},"Pos":"[9328.3418 12969.4844 -639.5035]","Name":"WB 7"},"56":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 7","Switches":"","ARSCodes":"004678"}},"Pos":"[2686.1809 14048.0137 -639.5057]","Name":"WB 9"},"57":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 9","Switches":"","ARSCodes":"004678"}},"Pos":"[-4169.459 14048.0137 -639.5057]","Name":"WB 11"},"58":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{356.507 130.8968 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 11","Switches":"","ARSCodes":"004678"}},"Pos":"[-10560.3066 12308.1914 -639.5051]","Name":"WB 13"},"59":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{359.5343 178.484 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 13","Switches":"","ARSCodes":"004678"}},"Pos":"[-12939.7432 6202.0508 -639.4977]","Name":"WB 15"},"60":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 15","Switches":"","ARSCodes":"004"}},"Pos":"[-14072.207 -1970.0157 -639.3806]","Name":"GFC 1"},"61":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"2-1-13","NextSignal":"GFC 1","Switches":"","ARSCodes":"04"}},"Pos":"[-14072.207 -6367.5801 -639.3806]","Name":"GFC 3"},"62":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{356.8486 209.1897 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"GFC 3","Switches":"","ARSCodes":"004"}},"Pos":"[-13713.2393 -13065.9023 -654.2793]","Name":"GFC 5"},"63":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{-0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"GFC 5","Switches":"","ARSCodes":"004"}},"Pos":"[-7307.1958 -14200.207 -639.5056]","Name":"GFC 7"},"64":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{-0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"GFC 7","Switches":"","ARSCodes":"004"}},"Pos":"[723.6484 -14200.0938 -127.5056]","Name":"WS 1"},"65":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"2-1-13","NextSignal":"WS 1","Switches":"","ARSCodes":"04"}},"Pos":"[5186.1328 -14199.793 -127.5056]","Name":"WS 3"},"66":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{358.5326 278.6725 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WS 3","Switches":"","ARSCodes":"004"}},"Pos":"[12004.0693 -14145.8145 376.9126]","Name":"WS 5"},"67":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WS 5","Switches":"","ARSCodes":"004"}},"Pos":"[14072.207 -8368.9453 384.4944]","Name":"WS 7"},"68":{"IsolateSwitches":true,"SignalType":1,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WS 7","Switches":"","ARSCodes":"004"}},"Pos":"[10132.4971 -2440.0762 384.4944]","Name":"WS 9"},"69":{"IsolateSwitches":true,"SignalType":1,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WS 9","Switches":"","ARSCodes":"004"}},"Pos":"[3291.165 -2440.0762 384.4944]","Name":"WS 11"},"70":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WS 11","Switches":"","ARSCodes":"004"}},"Pos":"[-4093 1951.2615 384.4944]","Name":"PR 1"},"71":{"IsolateSwitches":false,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"2-1-13","NextSignal":"PR 1","Switches":"","ARSCodes":"04"}},"Pos":"[-4093 5501.1509 384.4944]","Name":"PR 3"},"72":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"2","NextSignal":"","ARSCodes":"1","Switches":""}},"Pos":"[6406.084 13113.207 -1529.5056]","Name":"D2 1"},"73":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{3.4512 221.4754 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-2","NextSignal":"D2 1","ARSCodes":"04","Switches":""}},"Pos":"[9373.1992 12259.4209 -1530.4387]","Name":"D2 3"},"74":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{3.2849 151.9081 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-2","NextSignal":"D2 3","ARSCodes":"04","Switches":""}},"Pos":"[9713.5283 8303.2432 -1530.2632]","Name":"D2 5"},"75":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{356.7144 304.5725 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-2","NextSignal":"D2 2","ARSCodes":"04","Switches":""}},"Pos":"[9045.2539 7532.9429 -1530.3907]","Name":"D2 4"},"76":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{357.7631 17.1448 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-2","NextSignal":"D2 4","ARSCodes":"04","Switches":""}},"Pos":"[9893.5459 11372.5098 -1530.0309]","Name":"D2 6"},"77":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{-0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-2","NextSignal":"D2 6","ARSCodes":"04","Switches":""}},"Pos":"[6767.9644 13113.207 -1529.5056]","Name":"D2 8"},"78":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW-M","RouteNumber":"2","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-2","NextSignal":"D2 7","ARSCodes":"04","Switches":"1541-"},"2":{"Manual":false,"Lights":"1-2","NextSignal":"WB 211","ARSCodes":"04","Switches":"1541+"}},"Pos":"[1328.1024 6597.7939 -1529.5056]","Name":"D2 9"},"79":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"2","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-2","NextSignal":"WB 212","ARSCodes":"04","Switches":""}},"Pos":"[5348.7725 6597.7939 -1529.5056]","Name":"WB 211"},"80":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 22","Switches":"","ARSCodes":"004"}},"Pos":"[7241.042 6597.7939 -1529.5056]","Name":"WB 24"},"81":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"D","Angles":"{-0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-2","NextSignal":"D2 5","ARSCodes":"04","Switches":""}},"Pos":"[5408.8979 6969.7939 -1529.5056]","Name":"D2 7"},"82":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"PR 14","Switches":"","ARSCodes":"004"}},"Pos":"[6094.2598 -14464.207 -127.5056]","Name":"MS 2"},"83":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Lights":"1-2","NextSignal":"PR 203","ARSCodes":"04","Manual":false}},"Pos":"[-3828.7939 11411.7813 383.9944]","Name":"PR 202"},"84":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Lights":"1-2","NextSignal":"PR 103","ARSCodes":"04","Manual":false}},"Pos":"[-4092.7939 11410.415 383.9944]","Name":"PR 102"},"85":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW-M","RouteNumber":"3","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-1-1-2","NextSignal":"PR 201","ARSCodes":"0004","Switches":"1927+,111+"},"2":{"Manual":false,"Lights":"1-1-1-2","NextSignal":"PR 101","ARSCodes":"0004","Switches":"1927-,111-"}},"Pos":"[-3828.7939 5758.9316 384.4944]","Name":"PR 2"},"86":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-1-2","NextSignal":"PR 3","ARSCodes":"004","Switches":"1927-,111-"}},"Pos":"[-3828.7939 9832.0195 383.9944]","Name":"PR 131"},"87":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-1-2","NextSignal":"PR 3","ARSCodes":"004","Switches":"1927+,111+"}},"Pos":"[-4092.7939 9831.5244 383.9944]","Name":"PR 141"},"88":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"3","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Lights":"1-2","NextSignal":"PR 202","ARSCodes":"04","Manual":false}},"Pos":"[-3828.7939 9660.7266 383.9944]","Name":"PR 201"},"89":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"4","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Lights":"1-2","NextSignal":"PR 102","ARSCodes":"04","Manual":false}},"Pos":"[-4092.7939 9657.5625 383.9944]","Name":"PR 101"},"90":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Lights":"1","NextSignal":" ","ARSCodes":"1","Manual":false}},"Pos":"[-3828.7939 6524.1729 384.4944]","Name":"PR OG"},"91":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Lights":"1","NextSignal":"","ARSCodes":"1","Manual":false}},"Pos":"[-3828.4937 13978.2334 383.9944]","Name":"PR 203"},"92":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Lights":"1","NextSignal":"","ARSCodes":"1","Manual":false}},"Pos":"[-4092.4937 14024.7529 383.9944]","Name":"PR 103"},"93":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{0 273.3888 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-2","NextSignal":"WB 20","ARSCodes":"04","Switches":"1541-,1543+,1364+"},"2":{"Manual":false,"Lights":"1-2","NextSignal":"WB 201","ARSCodes":"04","Switches":"1541-,1543-,1364-"},"3":{"Manual":false,"Lights":"1","NextSignal":"WB 201","ARSCodes":"0","Switches":"1541+"}},"Pos":"[4282.2441 6949.3467 -1530.5056]","Name":"D2 2"},"94":{"Channel":1,"Class":"gmod_track_switch","NotChangePos":false,"Angles":"{0 359.6563 0}","Pos":"[-3959.1084 6849.7383 377.5313]"},"95":{"Channel":1,"Class":"gmod_track_switch","NotChangePos":false,"Angles":"{0 358.7189 0}","Pos":"[-3972.5967 8745.4795 377.5313]"},"96":{"Channel":1,"Class":"gmod_track_switch","NotChangePos":false,"Angles":"{0 270.858 0}","Pos":"[1962.4489 6702.6831 -1536.9688]"},"97":{"Channel":2,"Class":"gmod_track_switch","NotChangePos":false,"Angles":"{0 89.207 0}","Pos":"[740.0518 6495.001 -1535.9688]"},"98":{"Channel":2,"Class":"gmod_track_switch","NotChangePos":false,"Angles":"{0 272.4512 0}","Pos":"[-3141.1106 5689.9321 -1535.9688]"},"99":{"YOffset":0,"Angles":"{0 180 0}","Class":"gmod_track_signs","ZOffset":0,"SignType":16,"Pos":"[561.6327 -11814.207 -2039.5056]"},"Version":1} \ No newline at end of file diff --git a/lua/metrostroi_data/signs_gm_mus_orange_line_c.lua b/lua/metrostroi_data/signs_gm_mus_orange_line_c.lua new file mode 100644 index 0000000..36fecf7 --- /dev/null +++ b/lua/metrostroi_data/signs_gm_mus_orange_line_c.lua @@ -0,0 +1 @@ +{"1":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"2-2-2-1-13","NextSignal":"PR 2","Switches":"","ARSCodes":"0004"}},"Pos":"[-3829 2144.3943 384.4944]","Name":"PR 4"},"2":{"IsolateSwitches":true,"SignalType":1,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"PR 4","Switches":"","ARSCodes":"004"}},"Pos":"[693.5899 -2176.2061 384.4944]","Name":"PR 6"},"3":{"IsolateSwitches":true,"SignalType":1,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"PR 6","Switches":"","ARSCodes":"004"}},"Pos":"[6630.6631 -2176.106 384.4944]","Name":"PR 8"},"4":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{3.502 226.8198 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"PR 8","Switches":"","ARSCodes":"004"}},"Pos":"[13498.5703 -2878.6228 384.5066]","Name":"PR 10"},"5":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"PR 10","Switches":"","ARSCodes":"004"}},"Pos":"[14335.793 -9399.2891 384.4944]","Name":"PR 12"},"6":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0.0019 90.6856 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"PR 12","Switches":"","ARSCodes":"004"}},"Pos":"[11304.4063 -14463.7305 384.5036]","Name":"PR 14"},"7":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"2-1-13","NextSignal":"MS 2","Switches":"","ARSCodes":"04"}},"Pos":"[1030.6936 -14464.0938 -127.5056]","Name":"MS 4"},"8":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"MS 4","Switches":"","ARSCodes":"004"}},"Pos":"[-5812.085 -14464.207 -639.5056]","Name":"MS 6"},"9":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{2.6594 72.4416 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"MS 6","Switches":"","ARSCodes":"004"}},"Pos":"[-12584.8486 -14279.084 -639.4934]","Name":"MS 8"},"10":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"MS 8","Switches":"","ARSCodes":"004"}},"Pos":"[-14336.207 -6378.0771 -639.3806]","Name":"GFC 2"},"11":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"2-1-13","NextSignal":"GFC 2","Switches":"","ARSCodes":"04"}},"Pos":"[-14336.2061 -2085.8608 -639.3806]","Name":"GFC 4"},"12":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"GFC 4","Switches":"","ARSCodes":"0046"}},"Pos":"[-14336.207 4737.2183 -639.5056]","Name":"GFC 6"},"13":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{2.7529 340.8303 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"GFC 6","Switches":"","ARSCodes":"0046"}},"Pos":"[-13750.5293 11345.4609 -639.5056]","Name":"GFC 8"},"14":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{1.9284 281.9704 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"GFC 8","Switches":"","ARSCodes":"00467"}},"Pos":"[-8823.8984 15478.6621 -639.5018]","Name":"GFC 10"},"15":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"GFC 10","Switches":"","ARSCodes":"004678"}},"Pos":"[-2064.5857 15744.0137 -639.5057]","Name":"GFC 12"},"16":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"GFC 12","Switches":"","ARSCodes":"004678"}},"Pos":"[4704.8633 15744.0137 -639.5057]","Name":"GFC 14"},"17":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{3.3744 237.0603 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"GFC 14","Switches":"","ARSCodes":"004678"}},"Pos":"[11290.1611 14494.6729 -639.5045]","Name":"GFC 16"},"18":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0.9119 184.9138 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"GFC 16","Switches":"","ARSCodes":"004678"}},"Pos":"[14282.2012 8817.9766 -639.4988]","Name":"GFC 18"},"19":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"GFC 18","Switches":"","ARSCodes":"004"}},"Pos":"[14336 875.4379 -639.4056]","Name":"WB 2"},"20":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"2-1-13","NextSignal":"WB 2","Switches":"","ARSCodes":"04"}},"Pos":"[14336 -2554.791 -639.4056]","Name":"WB 4"},"21":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{1.1993 174.9442 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 4","Switches":"","ARSCodes":"0046"}},"Pos":"[14309.3076 -9376.7559 -768.5057]","Name":"WB 6"},"22":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{-0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 6","Switches":"","ARSCodes":"0046"}},"Pos":"[8929.6309 -11904.0137 -767.5057]","Name":"WB 8"},"23":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 8","Switches":"","ARSCodes":"00467"}},"Pos":"[2249.4153 -11904.0137 -1312.363]","Name":"WB 10"},"24":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{-0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 10","Switches":"","ARSCodes":"004678"}},"Pos":"[-4450.5479 -11903.9141 -1529.3057]","Name":"WB 12"},"25":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{3.4929 49.0969 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 12","Switches":"","ARSCodes":"004678"}},"Pos":"[-10824.5566 -10147.6875 -1529.5054]","Name":"WB 14"},"26":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0.2348 1.5137 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 14","Switches":"","ARSCodes":"004678"}},"Pos":"[-13182.9707 -4136.0601 -1529.4989]","Name":"WB 16"},"27":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{3.0111 336.6283 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 16","Switches":"","ARSCodes":"004678"}},"Pos":"[-12476.6777 2522.7893 -1529.5023]","Name":"WB 18"},"28":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"2","Angles":"{1.7383 280.4022 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 18","Switches":"","ARSCodes":"004678"}},"Pos":"[-7416.146 6386.2422 -1529.5022]","Name":"WB 20"},"29":{"IsolateSwitches":false,"SignalType":0,"LensesStr":"RW","RouteNumber":"1","Angles":"{-0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-2","NextSignal":"WB 202","ARSCodes":"04","Switches":""}},"Pos":"[-3424.2771 5590.2061 -1529.5056]","Name":"WB 201"},"30":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"RW","RouteNumber":"","Angles":"{3.0109 293.3825 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1","NextSignal":"","ARSCodes":"1","Switches":""}},"Pos":"[-7888.4614 4853.6357 -1529.502]","Name":"WB 202"},"31":{"IsolateSwitches":false,"SignalType":0,"LensesStr":"YGR-YW-M","RouteNumber":"2","Angles":"{0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 20","Switches":"1541+,1543+,1364+","ARSCodes":"0046"},"2":{"Manual":false,"Lights":"2-5","NextSignal":"WB 201","ARSCodes":"04","Switches":"1541+,1543-,1364-"}},"Pos":"[3832.3518 6598.2119 -1530.5056]","Name":"WB 22"},"32":{"IsolateSwitches":true,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1","NextSignal":"","ARSCodes":"1","Switches":""}},"Pos":"[7791.292 6597.7939 -1529.5056]","Name":"WB 212"},"33":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 24","Switches":"","ARSCodes":"004"}},"Pos":"[11129.5313 1959.8022 -1529.5056]","Name":"VHE 2"},"34":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"2-1-13","NextSignal":"VHE 2","Switches":"","ARSCodes":"04"}},"Pos":"[11129.5313 -1821.4204 -1529.5056]","Name":"VHE 4"},"35":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"VHE 4","Switches":"","ARSCodes":"004"}},"Pos":"[11130.207 -8493.6406 -2041.5056]","Name":"VHE 6"},"36":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"VHE 6","Switches":"","ARSCodes":"004"}},"Pos":"[5008.0986 -11814.207 -2039.5056]","Name":"TGM 1"},"37":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"2-1-13","NextSignal":"TGM 1","Switches":"","ARSCodes":"04"}},"Pos":"[979.2762 -11814 -2039.5056]","Name":"TGM 3"},"38":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{1.74 81.2607 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"TGM 3","Switches":"","ARSCodes":"004"}},"Pos":"[-5896.4419 -11761.7441 -2038.6349]","Name":"TGM 5"},"39":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{3.4512 311.4754 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"TGM 5","Switches":"","ARSCodes":"004"}},"Pos":"[-7436.1572 -6375.3979 -2039.4331]","Name":"TGM 7"},"40":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{360 269.9999 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"TGM 7","Switches":"","ARSCodes":"004"}},"Pos":"[-941.8915 -5672.5059 -1819.1001]","Name":"TGM 9"},"41":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{-0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"TGM 9","Switches":"","ARSCodes":"004"}},"Pos":"[5882.98 -5672.2061 -1527.5056]","Name":"TGM 11"},"42":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"2-1-13","NextSignal":"VHE 1","Switches":"","ARSCodes":"04"}},"Pos":"[10104.4678 1848.298 -1529.5056]","Name":"VHE 3"},"43":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"TGM 11","Switches":"","ARSCodes":"004"}},"Pos":"[10104.4688 -2173.9487 -1529.5056]","Name":"VHE 1"},"44":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"1","Angles":"{-0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"VHE 3","Switches":"","ARSCodes":"004"}},"Pos":"[5776.8569 5589.9873 -1529.5056]","Name":"VHE 5"},"45":{"IsolateSwitches":false,"SignalType":0,"LensesStr":"YGR-YW-M","RouteNumber":"1","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"VHE 5","Switches":"1364+,1543+","ARSCodes":"0046"},"2":{"Manual":false,"Lights":"2-5","NextSignal":"D2 9","Switches":"1364-,1543-","ARSCodes":"04"}},"Pos":"[-3696.8025 5590.2061 -1529.5056]","Name":"VHE 7"},"46":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG-M","RouteNumber":"1","Angles":"{356.4991 136.3677 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"VHE 7","Switches":"","ARSCodes":"00467"}},"Pos":"[-9888.5693 3511.9641 -1529.5057]","Name":"VHE 9"},"47":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{359.9999 180.4657 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"VHE 9","Switches":"","ARSCodes":"004678"}},"Pos":"[-11906.1113 -2826.8442 -1529.4989]","Name":"VHE 11"},"48":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{356.5071 229.094 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"VHE 11","Switches":"","ARSCodes":"004678"}},"Pos":"[-9611.3457 -8976.7852 -1529.5056]","Name":"VHE 13"},"49":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"VHE 13","Switches":"","ARSCodes":"004678"}},"Pos":"[-3371.8701 -10792.0137 -1529.5056]","Name":"VHE 15"},"50":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{360 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"VHE 15","Switches":"","ARSCodes":"004"}},"Pos":"[3393.3552 -10792.0137 -1217.9165]","Name":"VHE 17"},"51":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{358.8016 276.7644 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"VHE 17","Switches":"","ARSCodes":"004"}},"Pos":"[10152.6934 -10761.71 -768.4974]","Name":"VHE 19"},"52":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"VHE 19","Switches":"","ARSCodes":"004"}},"Pos":"[12656 -2674.9626 -639.5056]","Name":"WB 1"},"53":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"2-1-13","NextSignal":"WB 1","Switches":"","ARSCodes":"04"}},"Pos":"[12656 648.4708 -639.5056]","Name":"WB 3"},"54":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{358.8725 6.1498 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 3","Switches":"","ARSCodes":"0046"}},"Pos":"[12582.2793 7329.9863 -639.4982]","Name":"WB 5"},"55":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{356.6955 59.5747 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 5","Switches":"","ARSCodes":"00467"}},"Pos":"[9328.3418 12969.4844 -639.5035]","Name":"WB 7"},"56":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 7","Switches":"","ARSCodes":"004678"}},"Pos":"[2686.1809 14048.0137 -639.5057]","Name":"WB 9"},"57":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 9","Switches":"","ARSCodes":"004678"}},"Pos":"[-4169.459 14048.0137 -639.5057]","Name":"WB 11"},"58":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{356.507 130.8968 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 11","Switches":"","ARSCodes":"004678"}},"Pos":"[-10560.3066 12308.1914 -639.5051]","Name":"WB 13"},"59":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{359.5343 178.484 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 13","Switches":"","ARSCodes":"004678"}},"Pos":"[-12939.7432 6202.0508 -639.4977]","Name":"WB 15"},"60":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 15","Switches":"","ARSCodes":"004"}},"Pos":"[-14072.207 -1970.0157 -639.3806]","Name":"GFC 1"},"61":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"2-1-13","NextSignal":"GFC 1","Switches":"","ARSCodes":"04"}},"Pos":"[-14072.207 -6367.5801 -639.3806]","Name":"GFC 3"},"62":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{356.8486 209.1897 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"GFC 3","Switches":"","ARSCodes":"004"}},"Pos":"[-13713.2393 -13065.9023 -654.2793]","Name":"GFC 5"},"63":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{-0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"GFC 5","Switches":"","ARSCodes":"004"}},"Pos":"[-7307.1958 -14200.207 -639.5056]","Name":"GFC 7"},"64":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{-0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"GFC 7","Switches":"","ARSCodes":"004"}},"Pos":"[723.6484 -14200.0938 -127.5056]","Name":"WS 1"},"65":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"2-1-13","NextSignal":"WS 1","Switches":"","ARSCodes":"04"}},"Pos":"[5186.1328 -14199.793 -127.5056]","Name":"WS 3"},"66":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{358.5326 278.6725 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WS 3","Switches":"","ARSCodes":"004"}},"Pos":"[12004.0693 -14145.8145 376.9126]","Name":"WS 5"},"67":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WS 5","Switches":"","ARSCodes":"004"}},"Pos":"[14072.207 -8368.9453 384.4944]","Name":"WS 7"},"68":{"IsolateSwitches":true,"SignalType":1,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WS 7","Switches":"","ARSCodes":"004"}},"Pos":"[10132.4971 -2440.0762 384.4944]","Name":"WS 9"},"69":{"IsolateSwitches":true,"SignalType":1,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WS 9","Switches":"","ARSCodes":"004"}},"Pos":"[3291.165 -2440.0762 384.4944]","Name":"WS 11"},"70":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WS 11","Switches":"","ARSCodes":"004"}},"Pos":"[-4093 1951.2615 384.4944]","Name":"PR 1"},"71":{"IsolateSwitches":false,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"2-1-13","NextSignal":"PR 1","Switches":"","ARSCodes":"04"}},"Pos":"[-4093 5501.1509 384.4944]","Name":"PR 3"},"72":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"2","NextSignal":"","ARSCodes":"1","Switches":""}},"Pos":"[6406.084 13113.207 -1529.5056]","Name":"D2 1"},"73":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{3.4512 221.4754 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-2","NextSignal":"D2 1","ARSCodes":"04","Switches":""}},"Pos":"[9373.1992 12259.4209 -1530.4387]","Name":"D2 3"},"74":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{3.2849 151.9081 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-2","NextSignal":"D2 3","ARSCodes":"04","Switches":""}},"Pos":"[9713.5283 8303.2432 -1530.2632]","Name":"D2 5"},"75":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{356.7144 304.5725 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-2","NextSignal":"D2 2","ARSCodes":"04","Switches":""}},"Pos":"[9045.2539 7532.9429 -1530.3907]","Name":"D2 4"},"76":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{357.7631 17.1448 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-2","NextSignal":"D2 4","ARSCodes":"04","Switches":""}},"Pos":"[9893.5459 11372.5098 -1530.0309]","Name":"D2 6"},"77":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{-0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-2","NextSignal":"D2 6","ARSCodes":"04","Switches":""}},"Pos":"[6767.9644 13113.207 -1529.5056]","Name":"D2 8"},"78":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW-M","RouteNumber":"2","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-2","NextSignal":"D2 7","ARSCodes":"04","Switches":"1541-"},"2":{"Manual":false,"Lights":"1-2","NextSignal":"WB 211","ARSCodes":"04","Switches":"1541+"}},"Pos":"[1328.1024 6597.7939 -1529.5056]","Name":"D2 9"},"79":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"2","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-2","NextSignal":"WB 212","ARSCodes":"04","Switches":""}},"Pos":"[5348.7725 6597.7939 -1529.5056]","Name":"WB 211"},"80":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 270 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"WB 22","Switches":"","ARSCodes":"004"}},"Pos":"[7241.042 6597.7939 -1529.5056]","Name":"WB 24"},"81":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"D","Angles":"{-0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-2","NextSignal":"D2 5","ARSCodes":"04","Switches":""}},"Pos":"[5408.8979 6969.7939 -1529.5056]","Name":"D2 7"},"82":{"IsolateSwitches":true,"SignalType":0,"LensesStr":"YRG","RouteNumber":"","Angles":"{0 90 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"3-31-1-12-2","NextSignal":"PR 14","Switches":"","ARSCodes":"004"}},"Pos":"[6094.2598 -14464.207 -127.5056]","Name":"MS 2"},"83":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Lights":"1-2","NextSignal":"PR 203","ARSCodes":"04","Manual":false}},"Pos":"[-3828.7939 11411.7813 383.9944]","Name":"PR 202"},"84":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Lights":"1-2","NextSignal":"PR 103","ARSCodes":"04","Manual":false}},"Pos":"[-4092.7939 11410.415 383.9944]","Name":"PR 102"},"85":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW-M","RouteNumber":"3","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-1-1-2","NextSignal":"PR 201","ARSCodes":"0004","Switches":"1927+,111+"},"2":{"Manual":false,"Lights":"1-1-1-2","NextSignal":"PR 101","ARSCodes":"0004","Switches":"1927-,111-"}},"Pos":"[-3828.7939 5758.9316 384.4944]","Name":"PR 2"},"86":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-1-2","NextSignal":"PR 3","ARSCodes":"004","Switches":"1927-,111-"}},"Pos":"[-3828.7939 9832.0195 383.9944]","Name":"PR 131"},"87":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-1-2","NextSignal":"PR 3","ARSCodes":"004","Switches":"1927+,111+"}},"Pos":"[-4092.7939 9831.5244 383.9944]","Name":"PR 141"},"88":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"3","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Lights":"1-2","NextSignal":"PR 202","ARSCodes":"04","Manual":false}},"Pos":"[-3828.7939 9660.7266 383.9944]","Name":"PR 201"},"89":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"4","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Lights":"1-2","NextSignal":"PR 102","ARSCodes":"04","Manual":false}},"Pos":"[-4092.7939 9657.5625 383.9944]","Name":"PR 101"},"90":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{0 0 0}","Class":"gmod_track_signal","Routes":{"1":{"Lights":"1","NextSignal":" ","ARSCodes":"1","Manual":false}},"Pos":"[-3828.7939 6524.1729 384.4944]","Name":"PR OG"},"91":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Lights":"1","NextSignal":"","ARSCodes":"1","Manual":false}},"Pos":"[-3828.4937 13978.2334 383.9944]","Name":"PR 203"},"92":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{0 180 0}","Class":"gmod_track_signal","Routes":{"1":{"Lights":"1","NextSignal":"","ARSCodes":"1","Manual":false}},"Pos":"[-4092.4937 14024.7529 383.9944]","Name":"PR 103"},"93":{"IsolateSwitches":false,"SignalType":2,"LensesStr":"RW","RouteNumber":"","Angles":"{0 273.3888 0}","Class":"gmod_track_signal","Routes":{"1":{"Manual":false,"Lights":"1-2","NextSignal":"WB 20","ARSCodes":"04","Switches":"1541-,1543+,1364+"},"2":{"Manual":false,"Lights":"1-2","NextSignal":"WB 201","ARSCodes":"04","Switches":"1541-,1543-,1364-"},"3":{"Manual":false,"Lights":"1","NextSignal":"WB 201","ARSCodes":"0","Switches":"1541+"}},"Pos":"[4282.2441 6949.3467 -1530.5056]","Name":"D2 2"},"94":{"Channel":1,"Class":"gmod_track_switch","NotChangePos":false,"Angles":"{0 359.6563 0}","Pos":"[-3959.1084 6849.7383 377.5313]"},"95":{"Channel":1,"Class":"gmod_track_switch","NotChangePos":false,"Angles":"{0 358.7189 0}","Pos":"[-3972.5967 8745.4795 377.5313]"},"96":{"Channel":1,"Class":"gmod_track_switch","NotChangePos":false,"Angles":"{0 270.858 0}","Pos":"[1962.4489 6702.6831 -1536.9688]"},"97":{"Channel":2,"Class":"gmod_track_switch","NotChangePos":false,"Angles":"{0 89.207 0}","Pos":"[740.0518 6495.001 -1535.9688]"},"98":{"Channel":2,"Class":"gmod_track_switch","NotChangePos":false,"Angles":"{0 272.4512 0}","Pos":"[-3141.1106 5689.9321 -1535.9688]"},"99":{"YOffset":0,"Angles":"{0 180 0}","Class":"gmod_track_signs","ZOffset":0,"SignType":16,"Pos":"[561.6327 -11814.207 -2039.5056]"},"Version":1} \ No newline at end of file diff --git a/lua/metrostroi_data/signs_gm_mus_orange_line_long_f.lua b/lua/metrostroi_data/signs_gm_mus_orange_line_long_f.lua new file mode 100644 index 0000000..2637a8a --- /dev/null +++ b/lua/metrostroi_data/signs_gm_mus_orange_line_long_f.lua @@ -0,0 +1,6040 @@ + +{ + "1": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "WR", + "RouteNumber": "1", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "ARSCodes": "14", + "Lights": "2-1", + "NextSignal": "", + "Switches": "", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "Pos": "[-14660.793 8614.71 484.9944]", + "Name": "LT 402" + }, + "2": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "WR-M", + "RouteNumber": "1", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "ARSCodes": "04", + "Lights": "2-2-1", + "NextSignal": "LT 301", + "Switches": "52+,4186+", + "LightsExploded": + { + "1": "2", + "2": "2", + "3": "1" + } + }, + "2": + { + "Manual": false, + "Switches": "52-,4186-", + "Lights": "2-2-1", + "NextSignal": "LT 301", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "2", + "3": "1" + } + } + }, + "Pos": "[-14069 -2039.1575 484.4944]", + "Name": "LT 1" + }, + "3": + { + "IsolateSwitches": false, + "SignalType": 2, + "LensesStr": "WR", + "RouteNumber": "2", + "Angles": "{0 360 0}", + "Left": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-1", + "NextSignal": "LT 402", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[-14660.793 7146.4077 484.9944]", + "Name": "LT 401" + }, + "4": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-13-32-2", + "NextSignal": "FS 12", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "13", + "3": "32", + "4": "2" + } + } + }, + "Pos": "[-14661 -5702.5552 484.4944]", + "Name": "LT 2" + }, + "5": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "4186-,52-", + "Lights": "1-1-2", + "NextSignal": "LT 201", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "1", + "3": "2" + } + } + }, + "Pos": "[-14396.793 4578.6123 484.9944]", + "Name": "LT 03" + }, + "6": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "4186+,52+", + "Lights": "1-1-2", + "NextSignal": "LT 201", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "1", + "3": "2" + } + } + }, + "Pos": "[-14660.793 4602.6777 484.9944]", + "Name": "LT 04" + }, + "7": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-3-32", + "NextSignal": "LT 1", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "3", + "3": "32" + } + } + }, + "Pos": "[-14069 -5727.7778 484.4944]", + "Name": "LT 3" + }, + "8": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-3-32", + "NextSignal": "FS 2", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "3", + "3": "32" + } + } + }, + "Pos": "[12112.207 -3212.9253 2066.4944]", + "Name": "FS 4" + }, + "9": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-3-32", + "NextSignal": "FS 1", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "3", + "3": "32" + } + } + }, + "Pos": "[11848.207 882.03 2066.4944]", + "Name": "FS 3" + }, + "10": + { + "IsolateSwitches": true, + "SignalType": 1, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{359.9868 0.8011 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-13-3-32-2", + "NextSignal": "FS 5", + "ARSCodes": "046", + "LightsExploded": + { + "1": "1", + "2": "13", + "3": "3", + "4": "32", + "5": "2" + } + } + }, + "Pos": "[11847.7012 7187.2891 2067.0608]", + "Name": "FS 7" + }, + "11": + { + "IsolateSwitches": true, + "SignalType": 1, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{359.6389 89.1972 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-13-3-32-2", + "NextSignal": "FS 7", + "ARSCodes": "046", + "LightsExploded": + { + "1": "1", + "2": "13", + "3": "3", + "4": "32", + "5": "2" + } + } + }, + "Pos": "[8487.5225 10597.04 2067.7783]", + "Name": "FS 9" + }, + "12": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{1.4982 81.5073 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-13-3-32-2", + "NextSignal": "FS 9", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "1", + "2": "13", + "3": "3", + "4": "32", + "5": "2" + } + } + }, + "Pos": "[3903.9224 10691.3867 2066.5022]", + "Name": "FS 11" + }, + "13": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{359.5355 92.5864 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-13-3-32-2", + "NextSignal": "FS 11", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "1", + "2": "13", + "3": "3", + "4": "32", + "5": "2" + } + } + }, + "Pos": "[-1767.5698 11715.8887 2065.3206]", + "Name": "FS 13" + }, + "14": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{356.5071 133.6248 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-13-3-32-2", + "NextSignal": "FS 13", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "1", + "2": "13", + "3": "3", + "4": "32", + "5": "2" + } + } + }, + "Pos": "[-7226.5825 9721.5557 2058.2036]", + "Name": "FS 15" + }, + "15": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RGY", + "RouteNumber": "1", + "Angles": "{359.5328 178.4751 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "ARSCodes": "046", + "Lights": "1-13-3-32-2", + "NextSignal": "FS 15", + "Switches": "", + "LightsExploded": + { + "1": "1", + "2": "13", + "3": "3", + "4": "32", + "5": "2" + } + } + }, + "Pos": "[-9231.2188 4082.781 2065.6711]", + "Name": "FS 17" + }, + "16": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{3.508 48.5463 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-2", + "NextSignal": "D4", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "Pos": "[-8395.7842 -5825.3071 2065.3694]", + "Name": "D6" + }, + "17": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-2", + "NextSignal": "D6", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "Pos": "[-9239 -3025.0322 2066.4944]", + "Name": "AE 2" + }, + "18": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-3-32", + "NextSignal": "AE 1", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "3", + "3": "32" + } + } + }, + "Pos": "[-9239 -2725.095 2066.4944]", + "Name": "D1" + }, + "19": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR-YW-M", + "RouteNumber": "1", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "FS 17", + "Switches": "423+", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "12", + "5": "2" + } + } + }, + "Pos": "[-9236.793 776.702 2066.4944]", + "Name": "AE 1" + }, + "20": + { + "IsolateSwitches": true, + "SignalType": 1, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-3-32-2", + "NextSignal": "FS 3", + "ARSCodes": "046", + "LightsExploded": + { + "1": "1", + "2": "3", + "3": "32", + "4": "2" + } + } + }, + "Pos": "[11847.793 4279.5898 2066.4944]", + "Name": "FS 5" + }, + "21": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{3.4689 321.7972 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "ARSCodes": "046", + "Lights": "1-13-3-32-2", + "NextSignal": "AE 6", + "Switches": "", + "LightsExploded": + { + "1": "1", + "2": "13", + "3": "3", + "4": "32", + "5": "2" + } + } + }, + "Pos": "[-7832.0142 9440.9912 2074.2312]", + "Name": "AE 8" + }, + "22": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{1.1289 276.1828 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "ARSCodes": "046", + "Lights": "1-13-3-32-2", + "NextSignal": "AE 8", + "Switches": "", + "LightsExploded": + { + "1": "1", + "2": "13", + "3": "3", + "4": "32", + "5": "2" + } + } + }, + "Pos": "[-2614.9509 11922.4941 2069.0908]", + "Name": "AE 10" + }, + "23": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{358.6349 257.8295 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "ARSCodes": "046", + "Lights": "1-13-3-32-2", + "NextSignal": "AE 10", + "Switches": "", + "LightsExploded": + { + "1": "1", + "2": "13", + "3": "3", + "4": "32", + "5": "2" + } + } + }, + "Pos": "[3376.158 11044.4961 2066.5042]", + "Name": "AE 12" + }, + "24": + { + "IsolateSwitches": false, + "SignalType": 1, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "ARSCodes": "046", + "Lights": "1-13-3-32-2", + "NextSignal": "AE 12", + "Switches": "", + "LightsExploded": + { + "1": "1", + "2": "13", + "3": "3", + "4": "32", + "5": "2" + } + } + }, + "Pos": "[8340.9814 10863.207 2066.4944]", + "Name": "AE 14" + }, + "25": + { + "IsolateSwitches": false, + "SignalType": 1, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{0.3575 180.817 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "ARSCodes": "046", + "Lights": "1-13-3-32-2", + "NextSignal": "AE 14", + "Switches": "", + "LightsExploded": + { + "1": "1", + "2": "13", + "3": "3", + "4": "32", + "5": "2" + } + } + }, + "Pos": "[12112.3477 7246.5259 2068.7681]", + "Name": "AE 16" + }, + "26": + { + "IsolateSwitches": false, + "SignalType": 2, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-13-3-32-2", + "NextSignal": "AE 16", + "Switches": "", + "LightsExploded": + { + "1": "1", + "2": "13", + "3": "3", + "4": "32", + "5": "2" + } + } + }, + "Pos": "[12112.207 1023.6588 2066.4944]", + "Name": "FS 2" + }, + "27": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{360 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-13-3-32-2", + "NextSignal": "LT 3", + "ARSCodes": "046", + "LightsExploded": + { + "1": "1", + "2": "13", + "3": "3", + "4": "32", + "5": "2" + } + } + }, + "Pos": "[-9928.8877 -9609.5059 566.2945]", + "Name": "LT 5" + }, + "28": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{360 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-13-3-32-2", + "NextSignal": "LT 5", + "ARSCodes": "046", + "LightsExploded": + { + "1": "1", + "2": "13", + "3": "3", + "4": "32", + "5": "2" + } + } + }, + "Pos": "[-3064.3184 -9609.0938 1447.3643]", + "Name": "LT 7" + }, + "29": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-13-3-32-2", + "NextSignal": "LT 7", + "ARSCodes": "046", + "LightsExploded": + { + "1": "1", + "2": "13", + "3": "3", + "4": "32", + "5": "2" + } + } + }, + "Pos": "[3706.7175 -9609.207 2066.2744]", + "Name": "LT 9" + }, + "30": + { + "IsolateSwitches": true, + "SignalType": 1, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{356.6708 304.2521 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-13-3-32-2", + "NextSignal": "LT 9", + "ARSCodes": "046", + "LightsExploded": + { + "1": "1", + "2": "13", + "3": "3", + "4": "32", + "5": "2" + } + } + }, + "Pos": "[10632.7217 -9009.7959 2088.7246]", + "Name": "LT 11" + }, + "31": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-13-3-32-2", + "NextSignal": "LT 11", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "13", + "3": "3", + "4": "32", + "5": "2" + } + } + }, + "Pos": "[11848.207 -3534.8545 2066.4944]", + "Name": "FS 1" + }, + "32": + { + "IsolateSwitches": true, + "SignalType": 1, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{3.0304 116.3475 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-13-3-32-2", + "NextSignal": "FS 4", + "ARSCodes": "046", + "LightsExploded": + { + "1": "1", + "2": "13", + "3": "3", + "4": "32", + "5": "2" + } + } + }, + "Pos": "[10354.5029 -9479.8467 2100.8445]", + "Name": "FS 6" + }, + "33": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-13-3-32-2", + "NextSignal": "FS 6", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "1", + "2": "13", + "3": "3", + "4": "32", + "5": "2" + } + } + }, + "Pos": "[3484.489 -9873.207 2066.2744]", + "Name": "FS 8" + }, + "34": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-13-3-32-2", + "NextSignal": "FS 8", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "1", + "2": "13", + "3": "3", + "4": "32", + "5": "2" + } + } + }, + "Pos": "[-3372.8777 -9873.0938 1406.7312]", + "Name": "FS 10" + }, + "35": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{360 90.0001 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-13-3-32-2", + "NextSignal": "FS 10", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "1", + "2": "13", + "3": "3", + "4": "32", + "5": "2" + } + } + }, + "Pos": "[-10243.8965 -9873.5059 534.0864]", + "Name": "FS 12" + }, + "36": + { + "IsolateSwitches": false, + "SignalType": 2, + "LensesStr": "WR", + "RouteNumber": "1", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-1", + "NextSignal": "LT 302", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[-14396.793 7158.7388 484.9944]", + "Name": "LT 301" + }, + "37": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{-0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2", + "NextSignal": "", + "ARSCodes": "1", + "LightsExploded": + { + "1": "2" + } + } + }, + "Pos": "[-5746.1953 -6570.2061 2066.5945]", + "Name": "D4" + }, + "38": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{356.492 228.5408 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-2", + "NextSignal": "D1", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "Pos": "[-8267.0703 -5939.0068 2065.3914]", + "Name": "D3" + }, + "39": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-2", + "NextSignal": "D3", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "Pos": "[-6011.2373 -6570.2061 2066.5945]", + "Name": "D5" + }, + "40": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "WR", + "RouteNumber": "1", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-1", + "NextSignal": "", + "ARSCodes": "14", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "Pos": "[-14396.793 8615.71 484.9944]", + "Name": "LT 302" + }, + "41": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "WR", + "RouteNumber": "", + "Angles": "{0 4.8793 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2", + "NextSignal": "", + "ARSCodes": "0", + "LightsExploded": + { + "1": "2" + } + } + }, + "Pos": "[-14383.1348 968.0936 484.4943]", + "Name": "LT OG" + }, + "42": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-1-1-2", + "NextSignal": "SLS 21", + "ARSCodes": "0004", + "LightsExploded": + { + "1": "1", + "2": "1", + "3": "1", + "4": "2" + } + } + }, + "Pos": "[13733 3573.0337 895.4944]", + "Name": "SLS 2" + }, + "43": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{1.815 191.1715 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-2", + "NextSignal": "SLS 23", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "Pos": "[13612.9844 12277.8857 893.4987]", + "Name": "SLS 22" + }, + "44": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{3.49 229.9146 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2", + "NextSignal": "NO SIG", + "ARSCodes": "1", + "LightsExploded": + { + "1": "2" + } + } + }, + "Pos": "[12495.9854 14261.6416 893.4951]", + "Name": "SLS 23" + }, + "45": + { + "IsolateSwitches": false, + "SignalType": 2, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "11336-", + "Lights": "1-1-2", + "NextSignal": "SLS 3", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "1", + "3": "2" + } + } + }, + "Pos": "[13733.207 10690.1777 893.4944]", + "Name": "SLS 11" + }, + "46": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{360 359.2626 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-1-13", + "NextSignal": "SLS 1", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1", + "3": "13" + } + } + }, + "Pos": "[12542.7852 3823.7676 894.4944]", + "Name": "SLS 3" + }, + "47": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "LIT 13", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[12541.5 -249.4124 895.4944]", + "Name": "SLS 1" + }, + "48": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-1-13", + "NextSignal": "SLS 2", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1", + "3": "13" + } + } + }, + "Pos": "[13733 -106.8964 895.4944]", + "Name": "SLS 4" + }, + "49": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "SLS 4", + "ARSCodes": "046", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[13733.0137 -6951.2578 895.4944]", + "Name": "SLS 6" + }, + "50": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{3.4929 139.0969 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "SLS 6", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[11930.7129 -13441.4238 895.0743]", + "Name": "SLS 8" + }, + "51": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0.0001 90.4948 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "SLS 8", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[5739.0605 -15751.3535 895.0811]", + "Name": "SLS 10" + }, + "52": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{1.1279 85.1102 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "SLS 12", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-7816.9375 -15692.1025 133.0755]", + "Name": "SLS 14" + }, + "53": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "SLS 10", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-1013.6014 -15753.0137 493.808]", + "Name": "SLS 12" + }, + "54": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{3.3043 30.42 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "SLS 14", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-13525.2725 -12522.8154 133.0762]", + "Name": "SLS 16" + }, + "55": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "SLS 16", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-14661 -5775.3472 133.4944]", + "Name": "LIT 2" + }, + "56": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-1-13", + "NextSignal": "LIT 2", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1", + "3": "13" + } + } + }, + "Pos": "[-14661 -2472.8079 133.4944]", + "Name": "LIT 4" + }, + "57": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{2.6371 289.7874 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "LIT 4", + "ARSCodes": "046", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-12403.5771 3430.4805 133.4186]", + "Name": "LIT 6" + }, + "58": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0.0001 270.0001 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "LIT 6", + "ARSCodes": "046", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-5606.9116 3702.2056 -327.4537]", + "Name": "LIT 8" + }, + "59": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{360 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "LIT 8", + "ARSCodes": "046", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[1005.2272 3702.0271 29.7927]", + "Name": "LIT 10" + }, + "60": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{356.4985 316.6392 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "LIT 10", + "ARSCodes": "046", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[7482.9023 4777.833 383.7444]", + "Name": "LIT 12" + }, + "61": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{356.51 49.9078 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "LIT 12", + "ARSCodes": "046", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[7308.0801 10988.3311 383.7441]", + "Name": "LIT 14" + }, + "62": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "2", + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "LIT 14", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[798.762 11894.0137 383.7443]", + "Name": "LIT 16" + }, + "63": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{357.3342 112.302 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-2", + "NextSignal": "", + "ARSCodes": "1", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "Pos": "[-2400.7844 12175.4707 383.3829]", + "Name": "PR 103" + }, + "64": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-1-13", + "NextSignal": "PR 2", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1", + "3": "13" + } + } + }, + "Pos": "[-3829 2117.8308 384.4944]", + "Name": "PR 4" + }, + "65": + { + "IsolateSwitches": true, + "SignalType": 1, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "PR 4", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[693.5899 -2176.2061 384.4944]", + "Name": "PR 6" + }, + "66": + { + "IsolateSwitches": true, + "SignalType": 1, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "PR 6", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[6630.6631 -2176.106 384.4944]", + "Name": "PR 8" + }, + "67": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{3.502 226.8198 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "PR 8", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[13498.5703 -2878.6228 384.5066]", + "Name": "PR 10" + }, + "68": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "PR 10", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[14335.793 -9399.2891 384.4944]", + "Name": "PR 12" + }, + "69": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0.0019 90.6856 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "PR 12", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[11304.4063 -14463.7305 384.5036]", + "Name": "PR 14" + }, + "70": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YGR-YW-M", + "RouteNumber": "2", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "92+,1207+", + "Lights": "3-31-1-12-2", + "NextSignal": "LIT 16", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "12", + "5": "2" + } + }, + "2": + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-13-14-1b4", + "NextSignal": "PR 102", + "Switches": "92-,1207-", + "LightsExploded": + { + "1": "3", + "2": "13", + "3": "14", + "4": "1b4" + } + } + }, + "Pos": "[-3828.7939 6099.2866 384.4944]", + "Name": "PR 2" + }, + "71": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-1-13", + "NextSignal": "MS 2", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1", + "3": "13" + } + } + }, + "Pos": "[1030.6936 -14464.0938 -127.5056]", + "Name": "MS 4" + }, + "72": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "MS 4", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-5812.085 -14464.207 -639.5056]", + "Name": "MS 6" + }, + "73": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{2.6594 72.4416 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "MS 6", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-12584.8486 -14279.084 -639.4934]", + "Name": "MS 8" + }, + "74": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "MS 8", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-14336.207 -6378.0771 -639.3806]", + "Name": "GFC 2" + }, + "75": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-1-13", + "NextSignal": "GFC 2", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1", + "3": "13" + } + } + }, + "Pos": "[-14336.2061 -2085.8608 -639.3806]", + "Name": "GFC 4" + }, + "76": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "GFC 4", + "ARSCodes": "046", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-14336.207 4737.2183 -639.5056]", + "Name": "GFC 6" + }, + "77": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{2.7529 340.8303 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "GFC 6", + "ARSCodes": "046", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-13750.5293 11345.4609 -639.5056]", + "Name": "GFC 8" + }, + "78": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{1.9284 281.9704 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "GFC 8", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-8823.8984 15478.6621 -639.5018]", + "Name": "GFC 10" + }, + "79": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "GFC 10", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-2064.5857 15744.0137 -639.5057]", + "Name": "GFC 12" + }, + "80": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "GFC 12", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[4704.8633 15744.0137 -639.5057]", + "Name": "GFC 14" + }, + "81": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{3.3744 237.0603 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "GFC 14", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[11290.1611 14494.6729 -639.5045]", + "Name": "GFC 16" + }, + "82": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0.9119 184.9138 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "GFC 16", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[14282.2012 8817.9766 -639.4988]", + "Name": "GFC 18" + }, + "83": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "GFC 18", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[14336 875.4379 -639.4056]", + "Name": "WB 2" + }, + "84": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-1-13", + "NextSignal": "WB 2", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1", + "3": "13" + } + } + }, + "Pos": "[14336 -2554.791 -639.4056]", + "Name": "WB 4" + }, + "85": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{1.1993 174.9442 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "WB 4", + "ARSCodes": "046", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[14309.3076 -9376.7559 -768.5057]", + "Name": "WB 6" + }, + "86": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{-0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "WB 6", + "ARSCodes": "046", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[8929.6309 -11904.0137 -767.5057]", + "Name": "WB 8" + }, + "87": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "WB 8", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[2249.4153 -11904.0137 -1312.363]", + "Name": "WB 10" + }, + "88": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{-0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "WB 10", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-4450.5479 -11903.9141 -1529.3057]", + "Name": "WB 12" + }, + "89": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{3.4929 49.0969 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "WB 12", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-10824.5566 -10147.6875 -1529.5054]", + "Name": "WB 14" + }, + "90": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0.2348 1.5137 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "WB 14", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-13182.9707 -4136.0601 -1529.4989]", + "Name": "WB 16" + }, + "91": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{3.0111 336.6283 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "WB 16", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-12476.6777 2522.7893 -1529.5023]", + "Name": "WB 18" + }, + "92": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "2", + "Angles": "{1.7383 280.4022 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "WB 18", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-7416.146 6386.2422 -1529.5022]", + "Name": "WB 20" + }, + "93": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "1", + "Angles": "{-0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "WB 202", + "Switches": "", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "Pos": "[-3424.2771 5590.2061 -1529.5056]", + "Name": "WB 201" + }, + "94": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{3.0109 293.3825 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "ARSCodes": "1", + "Lights": "1", + "NextSignal": "", + "Switches": "", + "LightsExploded": + { + "1": "1" + } + } + }, + "Pos": "[-7888.4614 4853.6357 -1529.502]", + "Name": "WB 202" + }, + "95": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YGR-YW-M", + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "1737+,1739+,1560+", + "Lights": "3-31-1-12-2", + "NextSignal": "WB 20", + "ARSCodes": "046", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "12", + "5": "2" + } + }, + "2": + { + "Manual": false, + "ARSCodes": "04", + "Lights": "2-5", + "NextSignal": "WB 201", + "Switches": "1737+,1739-,1560-", + "LightsExploded": + { + "1": "2", + "2": "5" + } + } + }, + "Pos": "[3832.3518 6598.2119 -1530.5056]", + "Name": "WB 22" + }, + "96": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "ARSCodes": "1", + "Lights": "1", + "NextSignal": "", + "Switches": "", + "LightsExploded": + { + "1": "1" + } + } + }, + "Pos": "[7791.292 6597.7939 -1529.5056]", + "Name": "WB 212" + }, + "97": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "WB 24", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[11129.5313 1959.8022 -1529.5056]", + "Name": "VHE 2" + }, + "98": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-1-13", + "NextSignal": "VHE 2", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1", + "3": "13" + } + } + }, + "Pos": "[11129.5313 -1821.4204 -1529.5056]", + "Name": "VHE 4" + }, + "99": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "VHE 4", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[11130.207 -8493.6406 -2041.5056]", + "Name": "VHE 6" + }, + "100": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "VHE 6", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[5008.0986 -11814.207 -2039.5056]", + "Name": "TGM 1" + }, + "101": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-1-13", + "NextSignal": "TGM 1", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1", + "3": "13" + } + } + }, + "Pos": "[979.2762 -11814 -2039.5056]", + "Name": "TGM 3" + }, + "102": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{1.74 81.2607 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "TGM 3", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-5896.4419 -11761.7441 -2038.6349]", + "Name": "TGM 5" + }, + "103": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{3.4512 311.4754 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "TGM 5", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-7436.1572 -6375.3979 -2039.4331]", + "Name": "TGM 7" + }, + "104": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{360 269.9999 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "TGM 7", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-941.8915 -5672.5059 -1819.1001]", + "Name": "TGM 9" + }, + "105": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{-0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "TGM 9", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[5882.98 -5672.2061 -1527.5056]", + "Name": "TGM 11" + }, + "106": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-1-13", + "NextSignal": "VHE 1", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1", + "3": "13" + } + } + }, + "Pos": "[10104.4678 1848.298 -1529.5056]", + "Name": "VHE 3" + }, + "107": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "TGM 11", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[10104.4688 -2173.9487 -1529.5056]", + "Name": "VHE 1" + }, + "108": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "1", + "Angles": "{-0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "VHE 3", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[5776.8569 5589.9873 -1529.5056]", + "Name": "VHE 5" + }, + "109": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YGR-YW-M", + "RouteNumber": "1", + "Angles": "{359.9999 90.4657 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "1560+,1739+", + "Lights": "3-31-1-12-2", + "NextSignal": "VHE 5", + "ARSCodes": "046", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "12", + "5": "2" + } + }, + "2": + { + "Manual": false, + "Switches": "1560-,1739-", + "Lights": "2-5", + "NextSignal": "D2 9", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "5" + } + } + }, + "Pos": "[-3758.0017 5589.6611 -1529.4993]", + "Name": "VHE 7" + }, + "110": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG-M", + "RouteNumber": "1", + "Angles": "{356.4991 136.3677 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "VHE 7", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-9888.5693 3511.9641 -1529.5057]", + "Name": "VHE 9" + }, + "111": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{359.9999 180.4657 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "VHE 9", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-11906.1113 -2826.8442 -1529.4989]", + "Name": "VHE 11" + }, + "112": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{356.5071 229.094 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "VHE 11", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-9611.3457 -8976.7852 -1529.5056]", + "Name": "VHE 13" + }, + "113": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "VHE 13", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-3371.8701 -10792.0137 -1529.5056]", + "Name": "VHE 15" + }, + "114": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{360 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "VHE 15", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[3393.3552 -10792.0137 -1217.9165]", + "Name": "VHE 17" + }, + "115": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{358.8016 276.7644 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "VHE 17", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[10152.6934 -10761.71 -768.4974]", + "Name": "VHE 19" + }, + "116": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "VHE 19", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[12656 -2674.9626 -639.5056]", + "Name": "WB 1" + }, + "117": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-1-13", + "NextSignal": "WB 1", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1", + "3": "13" + } + } + }, + "Pos": "[12656 648.4708 -639.5056]", + "Name": "WB 3" + }, + "118": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{358.8725 6.1498 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "WB 3", + "ARSCodes": "046", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[12582.2793 7329.9863 -639.4982]", + "Name": "WB 5" + }, + "119": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{356.6955 59.5747 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "WB 5", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[9328.3418 12969.4844 -639.5035]", + "Name": "WB 7" + }, + "120": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "WB 7", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[2686.1809 14048.0137 -639.5057]", + "Name": "WB 9" + }, + "121": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "WB 9", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-4169.459 14048.0137 -639.5057]", + "Name": "WB 11" + }, + "122": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{356.507 130.8968 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "WB 11", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-10560.3066 12308.1914 -639.5051]", + "Name": "WB 13" + }, + "123": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{359.5343 178.484 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "WB 13", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-12939.7432 6202.0508 -639.4977]", + "Name": "WB 15" + }, + "124": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "WB 15", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-14072.207 -1970.0157 -639.3806]", + "Name": "GFC 1" + }, + "125": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-1-13", + "NextSignal": "GFC 1", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1", + "3": "13" + } + } + }, + "Pos": "[-14072.207 -6367.5801 -639.3806]", + "Name": "GFC 3" + }, + "126": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{356.8486 209.1897 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "GFC 3", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-13713.2393 -13065.9023 -654.2793]", + "Name": "GFC 5" + }, + "127": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{-0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "GFC 5", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-7307.1958 -14200.207 -639.5056]", + "Name": "GFC 7" + }, + "128": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{-0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "GFC 7", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[723.6484 -14200.0938 -127.5056]", + "Name": "WS 1" + }, + "129": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-1-13", + "NextSignal": "WS 1", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1", + "3": "13" + } + } + }, + "Pos": "[5186.1328 -14199.793 -127.5056]", + "Name": "WS 3" + }, + "130": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{358.5326 278.6725 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "WS 3", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[12004.0693 -14145.8145 376.9126]", + "Name": "WS 5" + }, + "131": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "WS 5", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[14072.207 -8368.9453 384.4944]", + "Name": "WS 7" + }, + "132": + { + "IsolateSwitches": true, + "SignalType": 1, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "WS 7", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[10132.4971 -2440.0762 384.4944]", + "Name": "WS 9" + }, + "133": + { + "IsolateSwitches": true, + "SignalType": 1, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "WS 9", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[3291.165 -2440.0762 384.4944]", + "Name": "WS 11" + }, + "134": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "WS 11", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-4093 1951.2615 384.4944]", + "Name": "PR 1" + }, + "135": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YR-YW-M", + "RouteNumber": "1", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "ARSCodes": "04", + "IsOpened": false, + "Lights": "2-4", + "NextSignal": "PR 102", + "Switches": "92+,1207+", + "LightsExploded": + { + "1": "2", + "2": "4" + } + }, + "2": + { + "Manual": false, + "ARSCodes": "04", + "Lights": "2-21-13-1b3", + "NextSignal": "LIT 16", + "Switches": "92-,1207-", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "13", + "4": "1b3" + } + } + }, + "Pos": "[-4092.7939 6016.1191 384.4944]", + "Name": "PR 101" + }, + "136": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "1", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Lights": "1-2", + "NextSignal": "PR 103", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "Pos": "[-4092.7939 9187.0557 383.9193]", + "Name": "PR 102" + }, + "137": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "2", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Lights": "1-2", + "NextSignal": "PR 204", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "Pos": "[-3829 3735.5376 384.4944]", + "Name": "PR 203" + }, + "138": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Lights": "1", + "NextSignal": "", + "ARSCodes": "1", + "LightsExploded": + { + "1": "1" + } + } + }, + "Pos": "[-3829 1962.098 384.4944]", + "Name": "PR 204" + }, + "139": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "1", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-1-13", + "NextSignal": "PR 1", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1", + "3": "13" + } + } + }, + "Pos": "[-4093 5516.8071 384.4944]", + "Name": "PR 3" + }, + "140": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YGR-YW-M", + "RouteNumber": "1", + "Angles": "{0.6149 357.5307 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "92+,1207+", + "Lights": "3-31-1-12-2", + "NextSignal": "PR 3", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "12", + "5": "2" + } + }, + "2": + { + "Manual": false, + "ARSCodes": "04", + "Lights": "3-13-14-1b4", + "NextSignal": "PR 202", + "Switches": "92-,1207-", + "LightsExploded": + { + "1": "3", + "2": "13", + "3": "14", + "4": "1b4" + } + } + }, + "Pos": "[-4081.7568 9597.3945 383.8946]", + "Name": "PR 5" + }, + "141": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "PR 5", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[831.3057 12406.0137 383.7443]", + "Name": "PR 7" + }, + "142": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{3.3988 236.2876 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "PR 7", + "ARSCodes": "046", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[7447.9043 11774.9619 383.7463]", + "Name": "PR 9" + }, + "143": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{2.6381 162.6004 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "PR 9", + "ARSCodes": "046", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[8723.0479 5553.3091 383.7469]", + "Name": "PR 11" + }, + "144": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{360 89.9999 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "PR 11", + "ARSCodes": "046", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[3118.5481 3191.0527 283.7023]", + "Name": "PR 13" + }, + "145": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "PR 13", + "ARSCodes": "046", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-3579.0801 3191.0171 -378.2557]", + "Name": "PR 15" + }, + "146": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{359.7187 91.7729 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "PR 15", + "ARSCodes": "046", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-10238.4248 3186.1611 133.7523]", + "Name": "PR 17" + }, + "147": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "PR 17", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-14069 -2221.1221 133.4944]", + "Name": "LIT 1" + }, + "148": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-1-13", + "NextSignal": "LIT 1", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1", + "3": "13" + } + } + }, + "Pos": "[-14069 -5531.1309 133.4944]", + "Name": "LIT 3" + }, + "149": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{356.6956 210.4096 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "LIT 3", + "ARSCodes": "046", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-12902.123 -12063.876 133.0755]", + "Name": "LIT 5" + }, + "150": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{358.6622 263.8213 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "LIT 5", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-7306.7725 -15171.9922 133.0817]", + "Name": "LIT 7" + }, + "151": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{360 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "LIT 7", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[-798.5207 -15241.0137 573.379]", + "Name": "LIT 9" + }, + "152": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{358.8725 276.1498 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "LIT 9", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[5925.4912 -15156.2119 895.0785]", + "Name": "LIT 11" + }, + "153": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{356.7798 332.0143 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "LIT 11", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[11565.6885 -11723.7979 895.0762]", + "Name": "LIT 13" + }, + "154": + { + "IsolateSwitches": false, + "SignalType": 2, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{0 273.3888 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "WB 20", + "Switches": "1737-,1739+,1560+", + "LightsExploded": + { + "1": "1", + "2": "2" + } + }, + "2": + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "WB 201", + "Switches": "1737-,1739-,1560-", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "Pos": "[4295.3877 6950.125 -1530.5056]", + "Name": "D2 2" + }, + "155": + { + "IsolateSwitches": false, + "SignalType": 2, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "ARSCodes": "1", + "Lights": "2", + "NextSignal": "", + "Switches": "", + "LightsExploded": + { + "1": "2" + } + } + }, + "Pos": "[6406.084 13113.207 -1529.5056]", + "Name": "D2 1" + }, + "156": + { + "IsolateSwitches": false, + "SignalType": 2, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{3.4512 221.4754 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "D2 1", + "Switches": "", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "Pos": "[9373.1992 12259.4209 -1530.4387]", + "Name": "D2 3" + }, + "157": + { + "IsolateSwitches": false, + "SignalType": 2, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{3.2849 151.9081 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "D2 3", + "Switches": "", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "Pos": "[9713.5283 8303.2432 -1530.2632]", + "Name": "D2 5" + }, + "158": + { + "IsolateSwitches": false, + "SignalType": 2, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{356.7144 304.5725 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "D2 2", + "Switches": "", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "Pos": "[9045.2539 7532.9429 -1530.3907]", + "Name": "D2 4" + }, + "159": + { + "IsolateSwitches": false, + "SignalType": 2, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{357.7631 17.1448 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "D2 4", + "Switches": "", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "Pos": "[9893.5459 11372.5098 -1530.0309]", + "Name": "D2 6" + }, + "160": + { + "IsolateSwitches": false, + "SignalType": 2, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{-0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "D2 6", + "Switches": "", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "Pos": "[6767.9644 13113.207 -1529.5056]", + "Name": "D2 8" + }, + "161": + { + "IsolateSwitches": false, + "SignalType": 2, + "LensesStr": "RW-M", + "RouteNumber": "D", + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "D2 7", + "Switches": "1737-", + "LightsExploded": + { + "1": "1", + "2": "2" + } + }, + "2": + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "WB 211", + "Switches": "1737+", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "Pos": "[1310.5719 6597.7939 -1529.5056]", + "Name": "D2 9" + }, + "162": + { + "IsolateSwitches": false, + "SignalType": 2, + "LensesStr": "RW", + "RouteNumber": "2", + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "WB 212", + "Switches": "", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "Pos": "[5348.7725 6597.7939 -1529.5056]", + "Name": "WB 211" + }, + "163": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "WB 22", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[7241.042 6597.7939 -1529.5056]", + "Name": "WB 24" + }, + "164": + { + "IsolateSwitches": false, + "SignalType": 2, + "LensesStr": "RW", + "RouteNumber": "D", + "Angles": "{-0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "D2 5", + "Switches": "", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "Pos": "[5408.8979 6969.7939 -1529.5056]", + "Name": "D2 7" + }, + "165": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG", + "RouteNumber": "", + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "2-21-1-13-3", + "NextSignal": "PR 14", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "1", + "4": "13", + "5": "3" + } + } + }, + "Pos": "[6094.2598 -14464.207 -127.5056]", + "Name": "MS 2" + }, + "166": + { + "IsolateSwitches": false, + "SignalType": 2, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": true, + "RouteName": "", + "Switches": "", + "Lights": "1", + "NextSignal": "SLS 3", + "ARSCodes": "0", + "LightsExploded": + { + "1": "1" + } + } + }, + "Pos": "[13732.7891 8698.0225 893.4944]", + "Name": "SLS OG" + }, + "167": + { + "IsolateSwitches": false, + "SignalType": 2, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-1-2", + "NextSignal": "SLS 22", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "1", + "3": "2" + } + } + }, + "Pos": "[13732.793 7854.2568 893.4944]", + "Name": "SLS 21" + }, + "168": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-3-32", + "NextSignal": "LT 2", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "3", + "3": "32" + } + } + }, + "Pos": "[-14661 -2432.2524 484.4944]", + "Name": "LT 201" + }, + "169": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RGY", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "", + "Lights": "1-3-32", + "NextSignal": "AE 2", + "ARSCodes": "4", + "LightsExploded": + { + "1": "1", + "2": "3", + "3": "32" + } + } + }, + "Pos": "[-9239 396.3325 2066.4944]", + "Name": "AE 4" + }, + "170": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YR-YW", + "RouteNumber": "1", + "Angles": "{0.2349 359.5034 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "ARSCodes": "04", + "Lights": "2-21-13-1b3", + "NextSignal": "AE 4", + "Switches": "", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "13", + "4": "1b3" + } + } + }, + "Pos": "[-9499.666 3849.6396 2066.834]", + "Name": "AE 6" + }, + "171": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "2", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Lights": "1-2", + "NextSignal": "PR 203", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "Pos": "[-3829 5635.4092 384.4944]", + "Name": "PR 202" + }, + "172": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YGR-YW-M", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": true, + "Manual": false, + "Switches": "92+,1207+", + "Lights": "3-31-1-12-2", + "NextSignal": "PR 3", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "12", + "5": "2" + } + }, + "2": + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "3-13-14-1b4", + "NextSignal": "PR 202", + "Switches": "92-,1207-", + "LightsExploded": + { + "1": "3", + "2": "13", + "3": "14", + "4": "1b4" + } + } + }, + "ARSOnly": true, + "Pos": "[-4093.3359 7592.2046 384.4944]", + "Name": "PR 5R" + }, + "173": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YR-YW-M", + "RouteNumber": "", + "Angles": "{0 360 0}", + "Left": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "IsOpened": false, + "Manual": false, + "ARSCodes": "04", + "Repeater": true, + "Lights": "2-4", + "NextSignal": "PR 102", + "Switches": "92+,1207+", + "LightsExploded": + { + "1": "2", + "2": "4" + } + }, + "2": + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "2-21-13-1b3", + "NextSignal": "LIT 16", + "Switches": "92-,1207-", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "13", + "4": "1b3" + } + } + }, + "ARSOnly": true, + "Pos": "[-4092.7935 7961.4326 384.4944]", + "Name": "PR 101R" + }, + "174": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YGR-YW-M", + "RouteNumber": "", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": true, + "Manual": false, + "Switches": "92+,1207+", + "Lights": "3-31-1-12-2", + "NextSignal": "LIT 16", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "12", + "5": "2" + } + }, + "2": + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "3-13-14-1b4", + "NextSignal": "PR 102", + "Switches": "92-,1207-", + "LightsExploded": + { + "1": "3", + "2": "13", + "3": "14", + "4": "1b4" + } + } + }, + "ARSOnly": true, + "Pos": "[-3819.3904 8098.3613 374.0313]", + "Name": "PR 2R" + }, + "175": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YW", + "RouteNumber": "", + "Angles": "{270.6141 356.9975 0}", + "Left": false, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": true, + "Manual": false, + "Switches": "92+,1207+", + "Lights": "3-31-1-12-2", + "NextSignal": "PR 3", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "12", + "5": "2" + } + }, + "2": + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "3-13-14-1b4", + "NextSignal": "PR 202", + "Switches": "92-,1207-", + "LightsExploded": + { + "1": "3", + "2": "13", + "3": "14", + "4": "1b4" + } + } + }, + "ARSOnly": false, + "Pos": "[-4220.959 9488.2568 474.9271]", + "Name": "PR 5R2" + }, + "176": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "2", + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": true, + "ARSCodes": "04", + "Lights": "3-31-1-12-2", + "NextSignal": "LIT 16", + "Switches": "92+,1207+", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "12", + "5": "2" + } + }, + "2": + { + "Manual": false, + "Repeater": true, + "Switches": "92-,1207-", + "Lights": "3-13-14-1b4", + "NextSignal": "PR 102", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "13", + "3": "14", + "4": "1b4" + } + } + }, + "ARSOnly": true, + "Pos": "[-3828.7939 6374.5806 384.4944]", + "Name": "PR 2R2" + }, + "177": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YGR-YW-M", + "RouteNumber": "1", + "Angles": "{0 184.6505 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": true, + "Manual": false, + "Switches": "92+,1207+", + "Lights": "3-31-1-12-2", + "NextSignal": "LIT 16", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "12", + "5": "2" + } + }, + "2": + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "3-13-14-1b4", + "NextSignal": "PR 102", + "Switches": "92-,1207-", + "LightsExploded": + { + "1": "3", + "2": "13", + "3": "14", + "4": "1b4" + } + } + }, + "ARSOnly": true, + "Pos": "[-4042.738 8483.2168 371.0313]", + "Name": "PR 2R3" + }, + "178": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "1", + "Angles": "{0 180 0}", + "Left": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": true, + "Manual": false, + "Switches": "92+,1207+", + "Lights": "1-2", + "NextSignal": "PR 202", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "2" + } + }, + "2": + { + "Manual": false, + "Repeater": true, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "PR 3", + "Switches": "92-,1207-", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "ARSOnly": true, + "Pos": "[-3849.4395 7342.4316 374.0313]", + "Name": "PR 3R" + }, + "179": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YGR-YW-M", + "RouteNumber": "", + "Angles": "{0 4.6529 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": true, + "Manual": false, + "Switches": "92+,1207+", + "Lights": "3-31-1-12-2", + "NextSignal": "PR 3", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "12", + "5": "2" + } + }, + "2": + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "3-13-14-1b4", + "NextSignal": "PR 202", + "Switches": "92-,1207-", + "LightsExploded": + { + "1": "3", + "2": "13", + "3": "14", + "4": "1b4" + } + } + }, + "ARSOnly": true, + "Pos": "[-3841.8547 7085.4995 384.4944]", + "Name": "PR 5R3" + }, + "180": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "1", + "Angles": "{0.6149 357.5307 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Switches": "92+,1207+", + "Lights": "1-2", + "NextSignal": "PR 202", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "2" + } + }, + "2": + { + "Manual": false, + "Repeater": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "PR 3", + "Switches": "92-,1207-", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "Pos": "[-3820.3237 9026.334 383.9077]", + "Name": "PR 200" + }, + "181": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "1", + "Angles": "{360 180 0}", + "Left": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": true, + "Manual": false, + "Switches": "92+,1207+", + "Lights": "1-2", + "NextSignal": "PR 202", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "2" + } + }, + "2": + { + "Manual": false, + "Repeater": true, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "PR 3", + "Switches": "92-,1207-", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "ARSOnly": true, + "Pos": "[-4044.4331 7026.0571 371.0313]", + "Name": "PR 3R3" + }, + "182": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YGR-YW-M", + "RouteNumber": "1", + "Angles": "{360 283.5978 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": true, + "Manual": false, + "ARSCodes": "046", + "Lights": "3-31-1-12-2", + "NextSignal": "WB 20", + "Switches": "1737+,1739+,1560+", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "12", + "5": "2" + } + }, + "2": + { + "Repeater": true, + "Manual": false, + "Switches": "1737+,1739-,1560-", + "Lights": "2-5", + "NextSignal": "WB 201", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "5" + } + } + }, + "ARSOnly": true, + "Pos": "[-2190.0002 5721.4238 -1529.5056]", + "Name": "WB 22R3" + }, + "183": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YGR-YW-M", + "RouteNumber": "", + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": true, + "Switches": "1560+,1739+", + "Lights": "3-31-1-12-2", + "NextSignal": "VHE 5", + "ARSCodes": "046", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "12", + "5": "2" + } + }, + "2": + { + "Manual": false, + "Repeater": true, + "Switches": "1560-,1739-", + "Lights": "2-5", + "NextSignal": "D2 9", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "5" + } + } + }, + "ARSOnly": true, + "Pos": "[-2006.5991 5590.2119 -1529.5056]", + "Name": "VHE 7R" + }, + "184": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YGR-YW-M", + "RouteNumber": "1", + "Angles": "{360 103.5978 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": true, + "Switches": "1560+,1739+", + "Lights": "3-31-1-12-2", + "NextSignal": "VHE 5", + "ARSCodes": "046", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "12", + "5": "2" + } + }, + "2": + { + "Manual": false, + "Repeater": true, + "Switches": "1560-,1739-", + "Lights": "2-5", + "NextSignal": "D2 9", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "5" + } + } + }, + "ARSOnly": true, + "Pos": "[-140.8082 6462.5112 -1529.5056]", + "Name": "VHE 7R3" + }, + "185": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YGR-YW-M", + "RouteNumber": "", + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": true, + "Switches": "1739+,1560+", + "Lights": "3-31-1-12-2", + "NextSignal": "WB 20", + "ARSCodes": "046", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "12", + "5": "2" + } + }, + "2": + { + "Manual": false, + "Repeater": true, + "ARSCodes": "04", + "Lights": "2-5", + "NextSignal": "WB 201", + "Switches": "1739-,1560-", + "LightsExploded": + { + "1": "2", + "2": "5" + } + } + }, + "ARSOnly": true, + "Pos": "[-871.6934 6597.7881 -1529.5056]", + "Name": "WB 22R" + }, + "186": + { + "IsolateSwitches": false, + "SignalType": 2, + "LensesStr": "RW-M", + "RouteNumber": "", + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "D2 7", + "Switches": "1737-", + "LightsExploded": + { + "1": "1", + "2": "2" + } + }, + "2": + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "WB 211", + "Switches": "1737+", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "ARSOnly": true, + "Pos": "[3449.9961 6598.2119 -1530.5056]", + "Name": "D2 9R" + }, + "187": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YR-YW-M", + "RouteNumber": "1", + "Angles": "{0 353.5099 0}", + "Left": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04", + "Manual": false, + "Switches": "92+,1207+", + "Repeater": true, + "Lights": "2-4", + "NextSignal": "PR 102", + "IsOpened": false, + "LightsExploded": + { + "1": "2", + "2": "4" + } + }, + "2": + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "2-21-13-1b3", + "NextSignal": "LIT 16", + "Switches": "92-,1207-", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "13", + "4": "1b3" + } + } + }, + "ARSOnly": true, + "Pos": "[-3843.9131 8341.0996 374.0313]", + "Name": "PR 101R3" + }, + "188": + { + "IsolateSwitches": false, + "SignalType": 2, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{0 283.6814 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "WB 20", + "Switches": "1737-,1739+,1560+", + "LightsExploded": + { + "1": "1", + "2": "2" + } + }, + "2": + { + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "WB 201", + "Switches": "1737-,1739-,1560-", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "ARSOnly": true, + "Pos": "[3059.5415 6759.7773 -1530.5056]", + "Name": "D2 2R" + }, + "189": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YR-YW", + "RouteNumber": "1", + "Angles": "{0 7.86 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": true, + "ARSCodes": "04", + "Lights": "2-21-13-1b3", + "NextSignal": "AE 4", + "Switches": "", + "LightsExploded": + { + "1": "2", + "2": "21", + "3": "13", + "4": "1b3" + } + } + }, + "ARSOnly": true, + "Pos": "[-9464.8125 3142.5811 2066.0344]", + "Name": "AE 6R" + }, + "190": + { + "IsolateSwitches": false, + "SignalType": 2, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{0 180 0}", + "Left": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": true, + "Switches": "4186-,52-", + "Lights": "1-1-2", + "NextSignal": "LT 201", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "1", + "3": "2" + } + } + }, + "ARSOnly": true, + "Pos": "[-14410.9238 1925.2017 475.0313]", + "Name": "LT 03R" + }, + "191": + { + "IsolateSwitches": false, + "SignalType": 2, + "LensesStr": "RW", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": true, + "Switches": "4186+,52+", + "Lights": "1-1-2", + "NextSignal": "LT 201", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "1", + "3": "2" + } + } + }, + "ARSOnly": true, + "Pos": "[-14659.2656 1608.4348 484.9944]", + "Name": "LT 04R" + }, + "192": + { + "Channel": 1, + "Class": "gmod_track_switch", + "NotChangePos": false, + "Angles": "{0 270.858 0}", + "Pos": "[1962.4489 6702.6831 -1536.9688]" + }, + "193": + { + "Channel": 2, + "Class": "gmod_track_switch", + "NotChangePos": false, + "Angles": "{0 89.207 0}", + "Pos": "[740.0518 6495.001 -1535.9688]" + }, + "194": + { + "Channel": 2, + "Class": "gmod_track_switch", + "NotChangePos": false, + "Angles": "{0 272.4512 0}", + "Pos": "[-3141.1106 5689.9321 -1535.9688]" + }, + "195": + { + "Channel": 1, + "Class": "gmod_track_switch", + "NotChangePos": true, + "Angles": "{0 90.3329 0}", + "Pos": "[-14530.7998 1512.2249 478.5313]" + }, + "196": + { + "Channel": 1, + "Class": "gmod_track_switch", + "NotChangePos": true, + "Angles": "{0 270.9804 0}", + "Pos": "[-14510.4775 3449.2009 478.5313]" + }, + "197": + { + "Channel": 1, + "Class": "gmod_track_switch", + "NotChangePos": true, + "Angles": "{0 180.0452 0}", + "Pos": "[-9133.4902 1759.4832 2060.0313]" + }, + "198": + { + "Channel": 1, + "Class": "gmod_track_switch", + "NotChangePos": true, + "Angles": "{0 0.7871 0}", + "Pos": "[12630.9902 6228.7588 887.0313]" + }, + "199": + { + "Channel": 1, + "Class": "gmod_track_switch", + "NotChangePos": true, + "Angles": "{0 359.9296 0}", + "Pos": "[13634.1865 10106.8516 887.0313]" + }, + "200": + { + "Channel": 1, + "Class": "gmod_track_switch", + "NotChangePos": false, + "Angles": "{0 91.7829 0}", + "Pos": "[-3968.5188 6855.4092 377.5313]" + }, + "201": + { + "Channel": 1, + "Class": "gmod_track_switch", + "NotChangePos": false, + "Angles": "{0 268.7195 0}", + "Pos": "[-3961.1846 8734.7773 377.5313]" + }, + "Version": 1 +} \ No newline at end of file diff --git a/lua/metrostroi_data/signs_gm_mus_orange_metro_h.lua b/lua/metrostroi_data/signs_gm_mus_orange_metro_h.lua new file mode 100644 index 0000000..12c2c25 --- /dev/null +++ b/lua/metrostroi_data/signs_gm_mus_orange_metro_h.lua @@ -0,0 +1,12507 @@ + +{ + "1": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Angles": "{359.7632 179.4941 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "202", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "Pos": "[-10259.8984 3822.9458 2066.6526]", + "Name": "200" + }, + "2": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Angles": "{359.212 86.3652 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "206", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "Pos": "[-490.2694 11704.3799 2066.4988]", + "Name": "204" + }, + "3": + { + "IsolateSwitches": true, + "SignalType": 1, + "LensesStr": "YGR", + "RouteNumber": "", + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "208", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "Pos": "[6873.0322 10598.793 2066.4944]", + "Name": "206" + }, + "4": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Angles": "{356.571 128.1949 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "204", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "Pos": "[-7670.0947 10226.6973 2058.8215]", + "Name": "202" + }, + "5": + { + "IsolateSwitches": true, + "SignalType": 1, + "LensesStr": "YGR", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "210", + "ARSCodes": "046", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "Pos": "[11847.793 7103.9902 2066.4944]", + "Name": "208" + }, + "6": + { + "IsolateSwitches": true, + "SignalType": 1, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "214", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "Pos": "[11848.207 -3524.3455 2066.4944]", + "Name": "212" + }, + "7": + { + "IsolateSwitches": true, + "SignalType": 1, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{358.2442 280.8871 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "216", + "ARSCodes": "046", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "Pos": "[9384.8311 -9519.2656 2078.8584]", + "Name": "214" + }, + "8": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "218", + "ARSCodes": "046", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "Pos": "[6733.1714 -9608.7832 2066.2744]", + "Name": "216" + }, + "9": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{360 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "220", + "ARSCodes": "046", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "Pos": "[-642.2855 -9609.0938 1766.2065]", + "Name": "218" + }, + "10": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{360 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "222", + "ARSCodes": "046", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "Pos": "[-7616.4448 -9609.0938 848.036]", + "Name": "220" + }, + "11": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 180 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "226", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "Pos": "[-14069 -2199.0544 484.4944]", + "Name": "224" + }, + "12": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "228", + "ARSCodes": "046", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "Pos": "[-14396.793 4962.1572 484.9944]", + "Name": "226" + }, + "13": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "232", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "Pos": "[-5148.5166 13610.4941 569.3536]", + "Name": "230" + }, + "14": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{357.3911 72.7571 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "234", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "Pos": "[2029.5144 13193.9941 856.3314]", + "Name": "232" + }, + "15": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{358.0724 11.9693 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "236", + "ARSCodes": "046", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "Pos": "[6565.1284 8196.0332 857.2744]", + "Name": "234" + }, + "16": + { + "IsolateSwitches": true, + "SignalType": 1, + "LensesStr": "YGR", + "RouteNumber": "", + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "3-31-21", + "NextSignal": "212", + "ARSCodes": "046", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "21" + } + } + }, + "Pos": "[11848.207 1026.9286 2066.4944]", + "Name": "210" + }, + "17": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "1", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Switches": "", + "Lights": "1-2", + "NextSignal": "", + "ARSCodes": "4", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "ARSOnly": true, + "Pos": "[-12087.7422 2528.8462 862.2814]", + "Name": "MT11" + }, + "18": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": false, + "Manual": false, + "ARSCodes": "4", + "Lights": "1-2", + "NextSignal": "", + "RouteName": "", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "ARSOnly": true, + "Pos": "[-12056.8018 2792.8462 862.2814]", + "Name": "MT22" + }, + "19": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RB", + "RouteNumber": "", + "Left": false, + "Angles": "{0 89.2628 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": false, + "Manual": false, + "ARSCodes": "0", + "Lights": "1", + "NextSignal": "", + "RouteName": "", + "LightsExploded": + { + "1": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[1784.6395 2920.7461 861.8054]", + "Name": "MTOP" + }, + "20": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RB", + "RouteNumber": "2", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "04", + "Repeater": false, + "Lights": "1", + "NextSignal": "MTOP", + "RouteName": "", + "LightsExploded": + { + "1": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[1349.4454 2924 861.6243]", + "Name": "MTOP2" + }, + "21": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 269.2628 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "1", + "NextSignal": "", + "ARSCodes": "", + "LightsExploded": + { + "1": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[-1566.1808 2354.145 861.8054]", + "Name": "MTD" + }, + "22": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YRG-BW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "1b2b3b4b5b", + "NextSignal": "", + "ARSCodes": "", + "LightsExploded": + { + "1": "1b2b3b4b5b" + } + } + }, + "ARSOnly": false, + "Pos": "[14878.8994 3493.4736 -681.3693]", + "Name": "TOXINKA" + }, + "23": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "3-31-21", + "NextSignal": "224", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "21" + } + } + }, + "Pos": "[-14069 -5684.7695 484.4944]", + "Name": "222" + }, + "24": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 267.499 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "3-1-1-21", + "NextSignal": "238C", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "1", + "3": "1", + "4": "21" + } + } + }, + "Pos": "[2123.4521 2910.2544 861.8054]", + "Name": "236" + }, + "25": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "3-31-21", + "NextSignal": "MT238", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "21" + } + } + }, + "ARSOnly": true, + "Pos": "[-637.7091 2924 861.6243]", + "Name": "238C" + }, + "26": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{356.5071 133.6249 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "230", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "Pos": "[-12220.5537 11763.7988 476.1522]", + "Name": "228" + }, + "27": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04", + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "237", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[2055.2542 2351.7036 861.8053]", + "Name": "239" + }, + "28": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0.2362 181.5219 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04", + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "235", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[7082.8872 5981.5859 862.9479]", + "Name": "237" + }, + "29": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{3.4689 231.7973 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Repeater": false, + "ARSCodes": "04678", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "233", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[4490.0439 12244.5391 869.8631]", + "Name": "235" + }, + "30": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{360 270.0001 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Repeater": false, + "ARSCodes": "04678", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "231", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-2593.4766 13875.3057 851.57]", + "Name": "233" + }, + "31": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{2.7541 291.234 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Repeater": false, + "ARSCodes": "04678", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "229", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-10349.3438 13216.1768 490.7577]", + "Name": "231" + }, + "32": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{1.541 352.4897 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Repeater": false, + "ARSCodes": "0467", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "227", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-14531.4844 7494.6108 487.8544]", + "Name": "229" + }, + "33": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "046", + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "3-1-21", + "NextSignal": "225", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "1", + "3": "21" + } + } + }, + "ARSOnly": false, + "Pos": "[-14661 -2058.9602 484.4944]", + "Name": "227" + }, + "34": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Repeater": false, + "ARSCodes": "04", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "223", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-14661 -5777.3125 484.4944]", + "Name": "225" + }, + "35": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "221", + "ARSCodes": "046", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-11085.3086 -9873.1064 484.6944]", + "Name": "223" + }, + "36": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Repeater": false, + "ARSCodes": "046", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "219", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[5230.5234 -9873.1074 2066.1743]", + "Name": "221" + }, + "37": + { + "IsolateSwitches": true, + "SignalType": 1, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{3.1993 120.1953 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Repeater": false, + "ARSCodes": "046", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "217", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[10537.3711 -9383.5625 2102.6108]", + "Name": "219" + }, + "38": + { + "IsolateSwitches": true, + "SignalType": 1, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Repeater": false, + "ARSCodes": "046", + "Manual": false, + "Lights": "3-1-21", + "NextSignal": "215", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "1", + "3": "21" + } + } + }, + "ARSOnly": false, + "Pos": "[12112.207 -3371.4119 2066.4944]", + "Name": "217" + }, + "39": + { + "IsolateSwitches": true, + "SignalType": 1, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 180 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Repeater": false, + "ARSCodes": "04", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "213", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[12112.207 1144.0504 2066.4944]", + "Name": "215" + }, + "40": + { + "IsolateSwitches": true, + "SignalType": 1, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{3.4102 235.7885 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "046", + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "211", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[10722.9102 10258.835 2104.2546]", + "Name": "213" + }, + "41": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{359.1273 253.8707 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "046", + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "209", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[2603.8821 11239.4561 2066.4988]", + "Name": "211" + }, + "42": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 180 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "103", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-11096.6563 3773.4824 2068.4944]", + "Name": "101" + }, + "43": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{360 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "109", + "ARSCodes": "046", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[2909.8 14838.0137 1411.9824]", + "Name": "107" + }, + "44": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{357.3619 72.5622 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "111", + "ARSCodes": "046", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[10331.1875 14609.9326 893.7485]", + "Name": "109" + }, + "45": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "046", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-1-21", + "NextSignal": "115", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "1", + "3": "21" + } + } + }, + "ARSOnly": false, + "Pos": "[12541.5 3397.2693 894.3293]", + "Name": "113" + }, + "46": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "046", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "113", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[12725.3105 8067.6133 893.4944]", + "Name": "111" + }, + "47": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "04", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "117", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[12541.5 -265.8079 895.4944]", + "Name": "115" + }, + "48": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{359.5343 358.4841 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "04678", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "119", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[12538.21 -7339.1079 895.0844]", + "Name": "117" + }, + "49": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{356.531 308.191 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "04678", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "121", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[9879.1533 -13725.9531 895.0759]", + "Name": "119" + }, + "50": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": false, + "Switches": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "123", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[2788.4617 -15240.9863 895.4943]", + "Name": "121" + }, + "51": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": false, + "Switches": "", + "Manual": false, + "Lights": "3-1-21", + "NextSignal": "129", + "ARSCodes": "046", + "LightsExploded": + { + "1": "3", + "2": "1", + "3": "21" + } + } + }, + "ARSOnly": false, + "Pos": "[-14069 -5874.1235 133.4944]", + "Name": "127" + }, + "52": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "046", + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "135", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-2012.1654 3191.0176 -324.9876]", + "Name": "133" + }, + "53": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "046", + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "137", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[5229.145 3190.9871 383.4944]", + "Name": "135" + }, + "54": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{3.5014 133.3418 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04", + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "139", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[12436.7529 4105.3022 383.4947]", + "Name": "137" + }, + "55": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{2.2369 197.1425 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Repeater": false, + "ARSCodes": "04", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "PR141", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[13391.3516 11071.3613 383.4589]", + "Name": "139" + }, + "56": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YG-RW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "PR143", + "Switches": "1299+", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[3408.4922 12901.9863 383.4944]", + "Name": "PR141" + }, + "57": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "149", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-4093 1705.6702 384.4944]", + "Name": "147" + }, + "58": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YYG-RW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "04", + "Repeater": false, + "Lights": "4-41-1-23", + "NextSignal": "147", + "RouteName": "", + "LightsExploded": + { + "1": "4", + "2": "41", + "3": "1", + "4": "23" + } + } + }, + "ARSOnly": false, + "Pos": "[-4092.7939 6010.6992 384.4944]", + "Name": "PR145" + }, + "59": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "151", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[404.7992 -2440.2061 384.4944]", + "Name": "149" + }, + "60": + { + "IsolateSwitches": true, + "SignalType": 1, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "153", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[7858.4355 -2440.656 384.7714]", + "Name": "151" + }, + "61": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{358.7908 354.8507 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "157", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[14051.4512 -12002.5352 379.7019]", + "Name": "155" + }, + "62": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{360 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "GS159", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[8487.5547 -14328.6074 102.0149]", + "Name": "157" + }, + "63": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YG-RW", + "RouteNumber": "", + "Left": false, + "Angles": "{358.8705 265.0752 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": false, + "Switches": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "GS163", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-7183.6333 -14282.3545 -641.5635]", + "Name": "GS161" + }, + "64": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YG-RW", + "RouteNumber": "", + "Left": false, + "Angles": "{356.8787 207.9788 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": false, + "Switches": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "GS165", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-13128.9805 -10852.7119 -646.7343]", + "Name": "GS163" + }, + "65": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0.0014 179.2878 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": false, + "Switches": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "171", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-12945.2344 5260.394 -639.4942]", + "Name": "169" + }, + "66": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{356.507 130.8969 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": false, + "Switches": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "173", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-10693.8418 12192.5273 -639.5056]", + "Name": "171" + }, + "67": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": false, + "Switches": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "175", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-3760.1492 14048.0137 -639.5057]", + "Name": "173" + }, + "68": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": false, + "Switches": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "177", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[3770.8735 14048.0137 -639.5057]", + "Name": "175" + }, + "69": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Repeater": false, + "ARSCodes": "04678", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "125", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-5174.2378 -15241.0137 133.7444]", + "Name": "123" + }, + "70": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{356.5071 229.094 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Repeater": false, + "ARSCodes": "0467", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "127", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-11780.6055 -13418.6289 133.0743]", + "Name": "125" + }, + "71": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{356.8778 154.3625 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "046", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "105", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-10242.2754 11080.6465 2067.4961]", + "Name": "103" + }, + "72": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{358.8725 96.1498 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "046", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "107", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-4390.1699 14763.0957 2067.5015]", + "Name": "105" + }, + "73": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{359.4439 93.0899 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Repeater": false, + "ARSCodes": "046", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "133", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-10406.9111 3178.4368 133.7524]", + "Name": "131" + }, + "74": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{358.8082 6.83 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "155", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[14032.3018 -4605.855 377.8493]", + "Name": "153" + }, + "75": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{356.499 46.3677 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Repeater": false, + "ARSCodes": "04678", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "179", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[10489.875 12112.5469 -639.5057]", + "Name": "177" + }, + "76": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Repeater": false, + "ARSCodes": "0467", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "181", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[12656.0137 5702.3911 -639.5057]", + "Name": "179" + }, + "77": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "046", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-1-21", + "NextSignal": "183", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "1", + "3": "21" + } + } + }, + "ARSOnly": false, + "Pos": "[12656.207 1147.1965 -639.5057]", + "Name": "181" + }, + "78": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "04", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "185", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[12656 -2852.4382 -639.5056]", + "Name": "183" + }, + "79": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{356.4982 313.1666 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Repeater": false, + "ARSCodes": "04", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "187", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[11887.4844 -10023.3496 -640.0284]", + "Name": "185" + }, + "80": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{360 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Repeater": false, + "ARSCodes": "04678", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "189", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[4502.3809 -10792.0137 -1081.7487]", + "Name": "187" + }, + "81": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Repeater": false, + "ARSCodes": "04678", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "191", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-2843.9138 -10792.0137 -1529.5056]", + "Name": "189" + }, + "82": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{356.5071 229.0939 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Repeater": false, + "ARSCodes": "04678", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "193", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-9647.7959 -8945.2051 -1529.5057]", + "Name": "191" + }, + "83": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{359.7647 179.5035 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "195", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-11906.0547 -2377.4409 -1529.5037]", + "Name": "193" + }, + "84": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{356.6957 120.4096 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "VH197", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-8571.8115 4516.501 -1529.5026]", + "Name": "195" + }, + "85": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "1101", + "ARSCodes": "046", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[5509.4209 5589.7939 -1529.5056]", + "Name": "199" + }, + "86": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "1105", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[10106.4678 -2115.5461 -1529.5056]", + "Name": "1103" + }, + "87": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "3-1-21", + "NextSignal": "1103", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "1", + "3": "21" + } + } + }, + "ARSOnly": false, + "Pos": "[10106.4678 1756.4363 -1529.5056]", + "Name": "1101" + }, + "88": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "046", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "1107", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[10106.1074 -10033.0361 -2273.7256]", + "Name": "1105" + }, + "89": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "046", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "1109", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[5999.1685 -14878.6133 -2275.5056]", + "Name": "1107" + }, + "90": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "046", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "1111", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-1367.5035 -14880.0137 -2275.5056]", + "Name": "1109" + }, + "91": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{359.9997 180.5375 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "046", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "1113", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-6275.6021 -10825.5537 -2275.498]", + "Name": "1111" + }, + "92": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0.8291 358.163 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "1112", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-14461.1582 -10450.6191 -2275.4976]", + "Name": "1114" + }, + "93": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{2.8093 292.3015 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "046", + "Repeater": false, + "Lights": "3-1-21", + "NextSignal": "1114", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "1", + "3": "21" + } + } + }, + "ARSOnly": false, + "Pos": "[-12343.9229 -7008.9946 -2275.4885]", + "Name": "1113" + }, + "94": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0.8256 86.9017 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "046", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "1110", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-10747.9473 -15894.5137 -2275.4968]", + "Name": "1112" + }, + "95": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "046", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "1108", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-3228.4709 -15904.0137 -2275.5056]", + "Name": "1110" + }, + "96": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "046", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "1106", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[3965.4507 -15904.0137 -2275.5056]", + "Name": "1108" + }, + "97": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{3.3203 149.3402 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "046", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "1104", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[10581.7256 -14254.0879 -2275.5034]", + "Name": "1106" + }, + "98": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": false, + "Switches": "", + "Manual": false, + "Lights": "3-1-21", + "NextSignal": "VH1102", + "ARSCodes": "046", + "LightsExploded": + { + "1": "3", + "2": "1", + "3": "21" + } + } + }, + "ARSOnly": false, + "Pos": "[11129.5313 -2179.1257 -1529.5056]", + "Name": "1104" + }, + "99": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YG-RW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 180 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": false, + "Manual": false, + "Switches": "", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "VH1100", + "ARSCodes": "046", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[11129.5313 2052.8408 -1529.5056]", + "Name": "VH1102" + }, + "100": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0.4652 2.5872 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04678", + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "194", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-13176.2529 -4338.1841 -1529.4991]", + "Name": "196" + }, + "101": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{3.3744 57.0603 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04678", + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "192", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-10227.668 -10600.04 -1529.5052]", + "Name": "194" + }, + "102": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "190", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-3313.2083 -11904.0137 -1529.5056]", + "Name": "192" + }, + "103": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "188", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[4300.9355 -11904.0137 -1061.2983]", + "Name": "190" + }, + "104": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0.3125 92.0443 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Repeater": false, + "ARSCodes": "046", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "186", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[11470.623 -11900.0166 -640.4968]", + "Name": "188" + }, + "105": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "3-1-21", + "NextSignal": "184", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "1", + "3": "21" + } + } + }, + "ARSOnly": false, + "Pos": "[14336.0498 -3405.196 -639.4056]", + "Name": "186" + }, + "106": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 180 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "182", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[14336.2559 1197.4916 -639.4056]", + "Name": "184" + }, + "107": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0.691 183.7191 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "180", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[14305.1416 8516.2734 -639.499]", + "Name": "182" + }, + "108": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{3.2203 242.0264 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "178", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[10870.9326 14740.9912 -639.5046]", + "Name": "180" + }, + "109": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "176", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[3771.4851 15744.207 -639.5056]", + "Name": "178" + }, + "110": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04678", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "174", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-3866.8142 15744.0137 -639.5057]", + "Name": "176" + }, + "111": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{3.4293 305.5423 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04678", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "172", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-11611.5313 14274.7148 -639.5048]", + "Name": "174" + }, + "112": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0.2353 359.5325 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "0467", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "170", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-14334.5391 7719.0811 -639.5014]", + "Name": "172" + }, + "113": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "046", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "160", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[6883.5786 -14592.6074 -94.9236]", + "Name": "162" + }, + "114": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{3.3766 147.472 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "158", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[13897.3838 -13404.8662 384.7874]", + "Name": "160" + }, + "115": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "156", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[14335.793 -6321.8091 384.4944]", + "Name": "158" + }, + "116": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "04", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "154", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[9896.5791 -2176.656 384.7714]", + "Name": "156" + }, + "117": + { + "IsolateSwitches": true, + "SignalType": 1, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "152", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[2715.6892 -2176.6563 384.7714]", + "Name": "154" + }, + "118": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "04", + "Repeater": false, + "Lights": "3-1-21", + "NextSignal": "PR150", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "1", + "3": "21" + } + } + }, + "ARSOnly": false, + "Pos": "[-3828.7939 1053.7258 384.4944]", + "Name": "152" + }, + "119": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{357.7481 346.8695 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "046", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "142", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[12418.7705 6447.043 383.501]", + "Name": "144" + }, + "120": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "046", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "140", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[6312.4727 3701.7939 383.4944]", + "Name": "142" + }, + "121": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{360 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "046", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "138", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-947.3728 3701.7939 -208.1503]", + "Name": "140" + }, + "122": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "046", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "136", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-8813.8301 3702.0129 62.6641]", + "Name": "138" + }, + "123": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": false, + "Switches": "", + "Manual": false, + "Lights": "3-1-21", + "NextSignal": "134", + "ARSCodes": "046", + "LightsExploded": + { + "1": "3", + "2": "1", + "3": "21" + } + } + }, + "ARSOnly": false, + "Pos": "[-14661 -2261.3262 133.4944]", + "Name": "136" + }, + "124": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": false, + "Switches": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "132", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-14661 -5700.7104 133.4944]", + "Name": "134" + }, + "125": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{3.4293 35.5423 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "04678", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "130", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-13200.916 -13015.6484 133.0753]", + "Name": "132" + }, + "126": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0.235 89.5038 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "04678", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "128", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-6544.4521 -15752.5684 133.0834]", + "Name": "130" + }, + "127": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0.0001 89.9999 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "04678", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "126", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[691.6829 -15752.9883 702.0027]", + "Name": "128" + }, + "128": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{2.1109 103.6321 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "04678", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "124", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[8480.1855 -15426.9219 895.0784]", + "Name": "126" + }, + "129": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{2.451 164.6321 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": false, + "Switches": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "122", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[13384.3223 -10598.8096 895.08]", + "Name": "124" + }, + "130": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "0467", + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "120", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[13733.0137 -5862.2856 895.4944]", + "Name": "122" + }, + "131": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "046", + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "3-1-21", + "NextSignal": "118", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "1", + "3": "21" + } + } + }, + "ARSOnly": false, + "Pos": "[13733.207 -420.6107 895.4944]", + "Name": "120" + }, + "132": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 180 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04", + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "116", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[13733 3470.29 895.4944]", + "Name": "118" + }, + "133": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{3.5015 316.6417 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "046", + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "AE108", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-10468.3945 14325.0313 2067.7444]", + "Name": "110" + }, + "134": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YG-RW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Repeater": false, + "ARSCodes": "046", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "AE106", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-11491.1934 8045.418 2067.4944]", + "Name": "AE108" + }, + "135": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "304", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[8425.3477 -14963.793 -1151.5056]", + "Name": "302" + }, + "136": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "D", + "Left": false, + "Angles": "{0 87.3986 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "302", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[643.0826 -14953.3672 -639.5056]", + "Name": "300" + }, + "137": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "0467", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "316", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-3515.6096 15673.207 -2474.5056]", + "Name": "314M" + }, + "138": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "0467", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "314M", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[3789.5483 15671.0039 -2474.5056]", + "Name": "312" + }, + "139": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{2.6071 252.7829 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "312", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[11338.6152 15177.2744 -2474.5056]", + "Name": "310M" + }, + "140": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{1.9285 191.9704 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "0467", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "310M", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[15771.6289 9972.209 -2474.4968]", + "Name": "308" + }, + "141": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "308", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[15996.9863 2742.6985 -2474.5056]", + "Name": "306" + }, + "142": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "D", + "Left": false, + "Angles": "{2.0398 168.8636 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "306", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[15891.9814 -12071.4707 -1151.4994]", + "Name": "304" + }, + "143": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{2.4507 285.3844 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "0467", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "318", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-10662.3555 15302.9531 -2474.5]", + "Name": "316" + }, + "144": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0.9123 356.3055 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "0467", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "320", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-15722.4951 8330.7676 -2474.4966]", + "Name": "318" + }, + "145": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "0467", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "322", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-15745.0137 280.8575 -3102.5056]", + "Name": "320" + }, + "146": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0.2348 1.5137 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "0467", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "324", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-15741.4609 -7136.2681 -3102.4995]", + "Name": "322" + }, + "147": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{3.4295 54.4589 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": false, + "Switches": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "BR2910", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-13051.3066 -13515.7021 -3102.5059]", + "Name": "324" + }, + "148": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YYG-RW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": false, + "Switches": "", + "Manual": false, + "Lights": "4-42-1-31-3", + "NextSignal": "BR2912", + "ARSCodes": "046", + "LightsExploded": + { + "1": "4", + "2": "42", + "3": "1", + "4": "31", + "5": "3" + } + } + }, + "ARSOnly": false, + "Pos": "[-5993.2651 -15007.0137 -3102.5056]", + "Name": "BR2910" + }, + "149": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YYY-GRW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "8226+,8241+", + "Repeater": false, + "ARSCodes": "04", + "Manual": false, + "Lights": "5-52-3-42-4", + "NextSignal": "BR2914", + "RouteName": "", + "LightsExploded": + { + "1": "5", + "2": "52", + "3": "3", + "4": "42", + "5": "4" + } + }, + "2": + { + "Switches": "8226-,714-", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "5-52-31-31b", + "NextSignal": "BR1", + "ARSCodes": "04", + "LightsExploded": + { + "1": "5", + "2": "52", + "3": "31", + "4": "31b" + } + } + }, + "ARSOnly": false, + "Pos": "[60.6699 -15007.0137 -3102.5056]", + "Name": "BR2912" + }, + "150": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "WYY-GRW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "Switches": "", + "RouteName": "", + "Lights": "5-3-42", + "NextSignal": "BR2914C", + "ARSCodes": "4", + "LightsExploded": + { + "1": "5", + "2": "3", + "3": "42" + } + } + }, + "ARSOnly": true, + "Pos": "[15769.5088 -15006.207 -3102.6157]", + "Name": "BR2914C" + }, + "151": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WYY-YRW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": false, + "Manual": false, + "ARSCodes": "0", + "Switches": "8241+,730+", + "Lights": "5", + "NextSignal": "BR2905", + "RouteName": "", + "LightsExploded": + { + "1": "5" + } + }, + "2": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Switches": "8241-,730-", + "Lights": "5-53-42-42b", + "NextSignal": "BR2905", + "ARSCodes": "04", + "LightsExploded": + { + "1": "5", + "2": "53", + "3": "42", + "4": "42b" + } + } + }, + "ARSOnly": false, + "Pos": "[9346.4756 -15006.207 -3102.6157]", + "Name": "BR2" + }, + "152": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "WYY-YRW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "NextSignal": "BR1C", + "RouteName": "", + "ARSCodes": "4" + } + }, + "ARSOnly": true, + "Pos": "[15741.2949 -13997.207 -3102.6157]", + "Name": "BR1C" + }, + "153": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WYY-GRW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "Switches": "", + "RouteName": "", + "Lights": "5-3-42", + "NextSignal": "BR1C", + "ARSCodes": "04", + "LightsExploded": + { + "1": "5", + "2": "3", + "3": "42" + } + } + }, + "ARSOnly": false, + "Pos": "[9747.7246 -13997.207 -3102.6157]", + "Name": "BR1" + }, + "154": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WYB-GRW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": false, + "Manual": false, + "RouteName": "", + "ARSCodes": "04", + "Lights": "5-52-2-42-4", + "NextSignal": "BR2905", + "Switches": "714+,730+", + "LightsExploded": + { + "1": "5", + "2": "52", + "3": "2", + "4": "42", + "5": "4" + } + } + }, + "ARSOnly": false, + "Pos": "[9565.1123 -13997.207 -3102.6157]", + "Name": "BR2901" + }, + "155": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YYG-RW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "04", + "Repeater": false, + "Lights": "4-42-2-31-3", + "NextSignal": "301", + "RouteName": "", + "LightsExploded": + { + "1": "4", + "2": "42", + "3": "2", + "4": "31", + "5": "3" + } + } + }, + "ARSOnly": false, + "Pos": "[170.5038 -13998.207 -3102.5056]", + "Name": "BR2905" + }, + "156": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{358.2612 261.0835 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "Switches": "", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "303", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-9054.9248 -13855.2305 -3102.5]", + "Name": "301" + }, + "157": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{357.1125 201.2127 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "Switches": "", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "305", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-14576.335 -9782.2324 -3102.5027]", + "Name": "303" + }, + "158": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "Switches": "", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "307", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-15232.0117 -2540.3235 -3102.5056]", + "Name": "305" + }, + "159": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{359.7647 179.5035 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "Switches": "", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "309", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-15229.666 6727.7676 -2474.5059]", + "Name": "307" + }, + "160": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{356.5708 125.5422 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "Switches": "", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "311", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-12440.3975 13227.9111 -2474.4922]", + "Name": "309" + }, + "161": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": false, + "Manual": false, + "RouteName": "", + "ARSCodes": "0467", + "Lights": "3-31-1-21-2", + "NextSignal": "313", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-5119.2349 14649.207 -2474.5056]", + "Name": "311" + }, + "162": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": false, + "Manual": false, + "RouteName": "", + "ARSCodes": "0467", + "Lights": "3-31-1-21-2", + "NextSignal": "315", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[2063.1062 14649.207 -2474.5056]", + "Name": "313" + }, + "163": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "ARSCodes": "0467", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "317", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[6981.0479 14649.0137 -2474.5056]", + "Name": "315" + }, + "164": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{356.4991 43.6252 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "ARSCodes": "0467", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "319", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[13548.2734 12486.3105 -2474.5056]", + "Name": "317" + }, + "165": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{357.7481 346.8695 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "ARSCodes": "04", + "Lights": "3-31-1-21-2", + "NextSignal": "327", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[15334.3408 -11285.7979 -1151.5032]", + "Name": "325" + }, + "166": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "", + "RouteNumber": "", + "Left": false, + "Angles": "{360 359.9999 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "ARSCodes": "04", + "Lights": "", + "NextSignal": "325", + "Switches": "", + "LightsExploded": + { + "1": "" + } + } + }, + "ARSOnly": false, + "Pos": "[15487.0137 -9813.1035 -1152.7146]", + "Name": "323C" + }, + "167": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "ARSCodes": "046", + "Lights": "", + "NextSignal": "323C", + "Switches": "", + "LightsExploded": + { + "1": "" + } + } + }, + "ARSOnly": false, + "Pos": "[15487.0137 -2143.8159 -2001.7252]", + "Name": "321C" + }, + "168": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": false, + "Manual": false, + "ARSCodes": "0467", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "321C", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[15486.9863 5801.6113 -2474.5056]", + "Name": "319" + }, + "169": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": false, + "Manual": false, + "RouteName": "", + "ARSCodes": "04", + "Lights": "3-31-1-21-2", + "NextSignal": "GS329", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[9356.2402 -13955.3926 -1151.5056]", + "Name": "327" + }, + "170": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YGR-BW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270.02 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "ARSCodes": "04", + "Switches": "", + "Lights": "3-31-1-21-2", + "NextSignal": "GS331", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[2933.8972 -13955.9414 -639.5056]", + "Name": "GS329" + }, + "171": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YG-RW", + "RouteNumber": "", + "Left": false, + "Angles": "{0.0005 180.4942 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "046", + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "3-1-21", + "NextSignal": "167", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "1", + "3": "21" + } + } + }, + "ARSOnly": false, + "Pos": "[-14070.376 -6458.7725 -639.6488]", + "Name": "GS165" + }, + "172": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": false, + "Switches": "", + "Manual": false, + "Lights": "3-1-21", + "NextSignal": "GS168", + "ARSCodes": "046", + "LightsExploded": + { + "1": "3", + "2": "1", + "3": "21" + } + } + }, + "ARSOnly": false, + "Pos": "[-14336.2061 -1997.5963 -639.3806]", + "Name": "170" + }, + "173": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YGR-YW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "11181+", + "Repeater": false, + "ARSCodes": "0467", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "162", + "RouteName": "GS164-MAIN", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + }, + "2": + { + "Manual": false, + "Repeater": false, + "RouteName": "GS164-DOP", + "Switches": "11181-", + "Lights": "3-31-41-41b", + "NextSignal": "300", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "41", + "4": "41b" + } + } + }, + "ARSOnly": false, + "Pos": "[-2582.8643 -14591.793 -639.5056]", + "Name": "GS164" + }, + "174": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WYY-GRW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{359.9999 90.4657 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "Switches": "1664+", + "RouteName": "", + "Lights": "5-52-2-42-4", + "NextSignal": "199", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "5", + "2": "52", + "3": "2", + "4": "42", + "5": "4" + } + }, + "2": + { + "ARSCodes": "04", + "Repeater": false, + "RouteName": "VH1-3", + "Manual": false, + "Lights": "5-52-1", + "NextSignal": "VH3", + "Switches": "1664-,16/66+,16/63+", + "LightsExploded": + { + "1": "5", + "2": "52", + "3": "1" + } + }, + "3": + { + "Manual": false, + "Repeater": false, + "ARSCodes": "04", + "RouteName": "VH1-4", + "Lights": "5-52-1", + "NextSignal": "VH4", + "Switches": "1664-,16/66-,16/63-", + "LightsExploded": + { + "1": "5", + "2": "52", + "3": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[-3783.3745 5589.4482 -1529.4993]", + "Name": "VH197" + }, + "175": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "", + "Left": false, + "Angles": "{2.8467 249.7976 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "1-2", + "NextSignal": "D5", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[12623.4336 11859.2021 -2041.4968]", + "Name": "D3" + }, + "176": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "1-2", + "NextSignal": "P1", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[5707.4805 12104.793 -1529.5056]", + "Name": "D5" + }, + "177": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "2", + "Left": false, + "Angles": "{3.2203 332.0264 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "1913+", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "196", + "ARSCodes": "04678", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + }, + "2": + { + "Switches": "1913-", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "196", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-12216.5244 3075.4595 -1529.5038]", + "Name": "198" + }, + "178": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "1", + "Left": false, + "Angles": "{2.8875 291.2296 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": false, + "Manual": false, + "ARSCodes": "4", + "Lights": "1", + "NextSignal": "", + "RouteName": "", + "LightsExploded": + { + "1": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[-7601.2832 4969.6509 -1529.501]", + "Name": "VH OP" + }, + "179": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YG-RW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "1913+", + "Repeater": false, + "ARSCodes": "04", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "198", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-872.3248 6598.0938 -1529.5056]", + "Name": "VH1100" + }, + "180": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YG-RW", + "RouteNumber": "", + "Left": false, + "Angles": "{3.5009 46.3677 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "Switches": "", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "GS164", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-12068.6475 -12679.5928 -631.4683]", + "Name": "GS166" + }, + "181": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YG-RW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "ARSCodes": "0467", + "Lights": "3-31-1-21-2", + "NextSignal": "GS161", + "Switches": "1423+", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[252.2922 -14328.207 -639.5077]", + "Name": "GS159" + }, + "182": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YGR-BW", + "RouteNumber": "1", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": true, + "Manual": false, + "Switches": "", + "RouteName": "", + "Lights": "3-31-1-21-2", + "NextSignal": "", + "ARSCodes": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": true, + "Pos": "[-2070.7222 -14591.793 -639.5056]", + "Name": "KOR1" + }, + "183": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "1", + "Left": false, + "Angles": "{0 87.499 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": false, + "Switches": "", + "Manual": false, + "Lights": "3-31-21", + "NextSignal": "239", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "21" + } + } + }, + "ARSOnly": false, + "Pos": "[-1751.8445 2357.6877 861.8053]", + "Name": "241" + }, + "184": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YG-RW", + "RouteNumber": "1", + "Left": false, + "Angles": "{0.6234 275.4188 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "PR145", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-1330.2743 12887.0732 383.901]", + "Name": "PR143" + }, + "185": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "RB", + "RouteNumber": "2", + "Left": false, + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "ARSCodes": "4", + "Switches": "", + "Lights": "1", + "NextSignal": "", + "RouteName": "", + "LightsExploded": + { + "1": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[-3829 2035.4565 384.4944]", + "Name": "OP PR" + }, + "186": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "4", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "", + "NextSignal": "OP PR", + "Switches": "", + "LightsExploded": + { + "1": "" + } + } + }, + "ARSOnly": true, + "Pos": "[57.6684 11894.207 383.4944]", + "Name": "OP PREPR" + }, + "187": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Switches": "29-,313-,1299-", + "Lights": "2-1", + "NextSignal": "PR143", + "RouteName": "", + "LightsExploded": + { + "1": "2", + "2": "1" + } + }, + "2": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "ARSCodes": "04", + "Lights": "2-1", + "NextSignal": "OP PREPR", + "Switches": "29+,313+,11303-", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[5778.3398 12266.207 383.9174]", + "Name": "PR2" + }, + "188": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Switches": "29+,313+,1299-", + "Lights": "2-1", + "NextSignal": "PR143", + "RouteName": "", + "LightsExploded": + { + "1": "2", + "2": "1" + } + }, + "2": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "ARSCodes": "04", + "Lights": "2-1", + "NextSignal": "OP PREPR", + "Switches": "29-,313-,11303-", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[5786.4131 12529.793 383.9174]", + "Name": "PR1" + }, + "189": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YYY-RW", + "RouteNumber": "", + "Left": true, + "Angles": "{0 458.9681 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Switches": "1423-", + "Lights": "4-42-31-31b", + "NextSignal": "GS161", + "RouteName": "", + "LightsExploded": + { + "1": "4", + "2": "42", + "3": "31", + "4": "31b" + } + } + }, + "ARSOnly": false, + "Pos": "[-181.748 -14045.0342 -639.5077]", + "Name": "GS331" + }, + "190": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "2", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": false, + "Switches": "", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "144", + "ARSCodes": "046", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[9342.4316 11893.9863 383.4944]", + "Name": "146" + }, + "191": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YYG-RW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 180 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Manual": false, + "ARSCodes": "04", + "Repeater": false, + "Lights": "4-41-1-23-3", + "NextSignal": "PR148", + "RouteName": "", + "LightsExploded": + { + "1": "4", + "2": "41", + "3": "1", + "4": "23", + "5": "3" + } + } + }, + "ARSOnly": false, + "Pos": "[-3829 5750.0371 384.4944]", + "Name": "PR150" + }, + "192": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW", + "RouteNumber": "4", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "2-1", + "NextSignal": "", + "ARSCodes": "4", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[9314.707 12266.207 383.9174]", + "Name": "PR222" + }, + "193": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW", + "RouteNumber": "4", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "2-1", + "NextSignal": "PR222", + "ARSCodes": "4", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[5648.3643 12266.207 383.9174]", + "Name": "PR22" + }, + "194": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW", + "RouteNumber": "3", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "2-1", + "NextSignal": "PR111", + "ARSCodes": "4", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[5657.2407 12529.793 383.9174]", + "Name": "PR11" + }, + "195": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW", + "RouteNumber": "3", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "2-1", + "NextSignal": "", + "ARSCodes": "4", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[9299.1514 12529.793 383.9174]", + "Name": "PR111" + }, + "196": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 180 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "ARSCodes": "4", + "RouteName": "", + "Lights": "2-1", + "NextSignal": "PR11", + "Switches": "1299-,313+,29+", + "LightsExploded": + { + "1": "2", + "2": "1" + } + }, + "2": + { + "Repeater": false, + "Manual": false, + "ARSCodes": "4", + "RouteName": "", + "Lights": "2-1", + "NextSignal": "PR22", + "Switches": "1299-,313-,29-", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[-4093 5714.3779 384.4944]", + "Name": "D PR" + }, + "197": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "046", + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "110", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-3492.9312 15349.9863 2067.4944]", + "Name": "112" + }, + "198": + { + "IsolateSwitches": true, + "SignalType": 0, + "Depot": true, + "LensesStr": "RW", + "RouteNumber": "", + "Left": false, + "Angles": "{0.3139 92.066 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "IsOpened": false, + "Manual": true, + "RouteName": "depot", + "Repeater": false, + "Lights": "1-2", + "NextSignal": "D3", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[11289.4072 5964.1138 -2041.4955]", + "Name": "D1" + }, + "199": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YG-RW", + "RouteNumber": "1", + "Left": false, + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "Switches": "12+", + "RouteName": "", + "Lights": "3-1-21", + "NextSignal": "101", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "1", + "3": "21" + } + } + }, + "ARSOnly": false, + "Pos": "[-11096.793 -4514.9888 2067.5945]", + "Name": "AE3" + }, + "200": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Switches": "99+,42+,924+,920+", + "Lights": "2-1", + "NextSignal": "AE4", + "RouteName": "", + "LightsExploded": + { + "1": "2", + "2": "1" + } + }, + "2": + { + "RouteName": "", + "Manual": false, + "ARSCodes": "04", + "Repeater": false, + "Lights": "2-1", + "NextSignal": "AE3", + "Switches": "10/21+,924-,920-,12+", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[-4234.106 -11688.6074 2069.2244]", + "Name": "AE2" + }, + "201": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "920+,924+", + "Repeater": false, + "Lights": "2-1", + "NextSignal": "AE7", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1" + } + }, + "2": + { + "ARSCodes": "04", + "Manual": false, + "Switches": "920-,924-", + "Repeater": false, + "Lights": "2-1", + "NextSignal": "AE8", + "RouteName": "", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[-7374.7002 -11951.9004 2069.6943]", + "Name": "AE9" + }, + "202": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "4", + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "1", + "NextSignal": "", + "RouteName": "", + "LightsExploded": + { + "1": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[-4802.0269 -11952.6074 2069.2244]", + "Name": "AE7" + }, + "203": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "Switches": "99+,42+,924-,920-", + "RouteName": "", + "Lights": "2-1", + "NextSignal": "AE4", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1" + } + }, + "2": + { + "Switches": "10/21+,924+,920+,12+", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "2-1", + "NextSignal": "AE3", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[-4219.3755 -11952.6074 2069.2244]", + "Name": "AE1" + }, + "204": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW", + "RouteNumber": "", + "Left": false, + "Angles": "{0.6149 87.5307 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "2-1", + "NextSignal": "AE7", + "Switches": "920-,924-", + "LightsExploded": + { + "1": "2", + "2": "1" + } + }, + "2": + { + "RouteName": "", + "Repeater": false, + "ARSCodes": "04", + "Manual": false, + "Lights": "2-1", + "NextSignal": "AE8", + "Switches": "920+,924+", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[-7349.4761 -11682.2305 2069.4924]", + "Name": "AE10" + }, + "205": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW", + "RouteNumber": "", + "Left": true, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": false, + "ARSCodes": "4", + "Manual": false, + "Lights": "1", + "NextSignal": "", + "Switches": "", + "LightsExploded": + { + "1": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[-4789.9824 -11688.6074 2069.2244]", + "Name": "AE8" + }, + "206": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WY-RW", + "RouteNumber": "", + "Left": true, + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04", + "Repeater": false, + "RouteName": "", + "Manual": false, + "Lights": "3-32-1", + "NextSignal": "AE9", + "Switches": "10/21+", + "LightsExploded": + { + "1": "3", + "2": "32", + "3": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[-11097.207 -7350.2915 2068.4944]", + "Name": "AE11" + }, + "207": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WY-RW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "99+", + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "3-32-1", + "NextSignal": "AE10", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "32", + "3": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[-10260.7891 -7658.7568 2068.7344]", + "Name": "AE12" + }, + "208": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YG-RW", + "RouteNumber": "", + "Left": true, + "Angles": "{0 180 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Repeater": false, + "ARSCodes": "04", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "GS166", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-14336 -6144.5283 -639.3806]", + "Name": "GS168" + }, + "209": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": true, + "Angles": "{0 360 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Repeater": false, + "ARSCodes": "04", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "169", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-14072 -2304.0037 -639.3806]", + "Name": "167" + }, + "210": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WYG-RW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "11303+", + "Repeater": false, + "Lights": "4-42-2-32-3", + "NextSignal": "146", + "ARSCodes": "04", + "LightsExploded": + { + "1": "4", + "2": "42", + "3": "2", + "4": "32", + "5": "3" + } + }, + "2": + { + "ARSCodes": "04", + "Manual": false, + "Switches": "11303-,313+,29+", + "Repeater": false, + "Lights": "4-42-1", + "NextSignal": "PR22", + "RouteName": "", + "LightsExploded": + { + "1": "4", + "2": "42", + "3": "1" + } + }, + "3": + { + "ARSCodes": "04", + "Manual": false, + "Switches": "11303-,313-,29-", + "Repeater": false, + "Lights": "4-42-1", + "NextSignal": "PR11", + "RouteName": "", + "LightsExploded": + { + "1": "4", + "2": "42", + "3": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[-273.8698 11894.207 383.4944]", + "Name": "PR148" + }, + "211": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0.5561 183.1454 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "046", + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "114", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[13717.2695 11746.0674 893.7527]", + "Name": "116" + }, + "212": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "046", + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "112", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[7916.7441 15350.0137 893.7444]", + "Name": "114" + }, + "213": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0.4652 358.4841 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": false, + "Manual": false, + "ARSCodes": "046", + "RouteName": "", + "Lights": "3-1-21", + "NextSignal": "AE205", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "1", + "3": "21" + } + } + }, + "ARSOnly": false, + "Pos": "[-10521.5186 3999.1362 2067.5793]", + "Name": "207" + }, + "214": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WY-RW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04", + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "3-32-1", + "NextSignal": "AE11", + "Switches": "12-", + "LightsExploded": + { + "1": "3", + "2": "32", + "3": "1" + } + }, + "2": + { + "Repeater": false, + "Manual": false, + "RouteName": "", + "Switches": "12+", + "Lights": "23", + "NextSignal": "", + "ARSCodes": "4", + "LightsExploded": + { + "1": "23" + } + } + }, + "ARSOnly": false, + "Pos": "[-11361 -1553.0221 2068.4944]", + "Name": "AE104" + }, + "215": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{2.1125 283.6378 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "207", + "ARSCodes": "046", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-5050.5098 11691.3984 2071.7778]", + "Name": "209" + }, + "216": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WY-RW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04", + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "32-1", + "NextSignal": "AE12", + "Switches": "42-", + "LightsExploded": + { + "1": "32", + "2": "1" + } + }, + "2": + { + "Manual": false, + "Repeater": false, + "Switches": "42+", + "ARSCodes": "4", + "Lights": "32", + "NextSignal": "", + "RouteName": "", + "LightsExploded": + { + "1": "32" + } + } + }, + "ARSOnly": false, + "Pos": "[-10525 -1635.7803 2067.4944]", + "Name": "AE205" + }, + "217": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR-BW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 2.4903 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "", + "Repeater": true, + "RouteName": "", + "Manual": false, + "Lights": "", + "NextSignal": "AE106", + "Switches": "", + "LightsExploded": + { + "1": "" + } + } + }, + "ARSOnly": true, + "Pos": "[-11368.1309 4422.4326 2067.4941]", + "Name": "AE106R" + }, + "218": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YGR", + "RouteNumber": "", + "Left": false, + "Angles": "{0 180 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04", + "Manual": false, + "RouteName": "", + "Repeater": false, + "Lights": "3-31-1-21-2", + "NextSignal": "131", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[-14069 -2214.4868 133.4944]", + "Name": "129" + }, + "219": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "YG-RW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": false, + "Switches": "", + "Manual": false, + "Lights": "3-21", + "NextSignal": "AE104", + "ARSCodes": "046", + "LightsExploded": + { + "1": "3", + "2": "21" + } + } + }, + "ARSOnly": false, + "Pos": "[-11360.7568 3887.0583 2068.4944]", + "Name": "AE106" + }, + "220": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": true, + "Angles": "{0 450 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": true, + "Manual": false, + "Switches": "99+,42+,924-,920-", + "RouteName": "", + "Lights": "2-1", + "NextSignal": "AE4", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1" + } + }, + "2": + { + "Switches": "10/21+,924+,920+,12+", + "Manual": false, + "RouteName": "", + "Repeater": true, + "Lights": "2-1", + "NextSignal": "AE3", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[-6349.7407 -11952.1943 2069.2244]", + "Name": "AE1R" + }, + "221": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": true, + "ARSCodes": "04", + "Switches": "99+,42+,924+,920+", + "Lights": "2-1", + "NextSignal": "AE4", + "RouteName": "", + "LightsExploded": + { + "1": "2", + "2": "1" + } + }, + "2": + { + "RouteName": "", + "Repeater": true, + "ARSCodes": "04", + "Manual": false, + "Lights": "2-1", + "NextSignal": "AE3", + "Switches": "10/21+,924-,920-,12+", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[-6330.1899 -11688.6074 2069.2244]", + "Name": "AE2R" + }, + "222": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "920+,924+", + "Manual": false, + "ARSCodes": "04", + "Repeater": true, + "Lights": "2-1", + "NextSignal": "AE7", + "RouteName": "", + "LightsExploded": + { + "1": "2", + "2": "1" + } + }, + "2": + { + "Switches": "920-,924-", + "Manual": false, + "RouteName": "", + "Repeater": true, + "Lights": "2-1", + "NextSignal": "AE8", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[-6173.4956 -11952.1934 2069.2244]", + "Name": "AE9R" + }, + "223": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW", + "RouteNumber": "", + "Left": true, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": true, + "Switches": "920-,924-", + "Manual": false, + "Lights": "2-1", + "NextSignal": "AE7", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1" + } + }, + "2": + { + "ARSCodes": "04", + "Repeater": true, + "Switches": "920+,924+", + "Manual": false, + "Lights": "2-1", + "NextSignal": "AE8", + "RouteName": "", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[-6155.1421 -11688.6074 2069.2244]", + "Name": "AE10R" + }, + "224": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WY-RW", + "RouteNumber": "1", + "Left": false, + "Angles": "{0 14.0532 0}", + "Approve0": false, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "42-", + "Repeater": true, + "Lights": "32-1", + "NextSignal": "AE12", + "ARSCodes": "04", + "LightsExploded": + { + "1": "32", + "2": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[-10395.8301 -3483.3396 2068.0344]", + "Name": "AE205R" + }, + "225": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WY-RW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0.9333 0}", + "Approve0": false, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "", + "Repeater": true, + "ARSCodes": "04", + "Manual": false, + "Lights": "32-1", + "NextSignal": "AE12", + "RouteName": "", + "LightsExploded": + { + "1": "32", + "2": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[-10261.124 -4505.1201 2067.6045]", + "Name": "AE205R2" + }, + "226": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WY-RW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Approve0": false, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "12-", + "Repeater": true, + "Lights": "3-32-1", + "NextSignal": "AE11", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "32", + "3": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[-11111.5547 -3626.4546 2052.5313]", + "Name": "AE104R1" + }, + "227": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WY-RW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 0 0}", + "Approve0": false, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": true, + "Switches": "12-", + "RouteName": "", + "Lights": "3-32-1", + "NextSignal": "AE11", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "32", + "3": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[-11096.793 -4244.8213 2068.1543]", + "Name": "AE104R2" + }, + "228": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YG-RW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": true, + "Manual": false, + "RouteName": "", + "ARSCodes": "04", + "Lights": "3-1-21", + "NextSignal": "101", + "Switches": "12+", + "LightsExploded": + { + "1": "3", + "2": "1", + "3": "21" + } + } + }, + "ARSOnly": true, + "Pos": "[-11096.793 -4302.7373 2068.1543]", + "Name": "AE3R" + }, + "229": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YG-RW", + "RouteNumber": "2", + "Left": false, + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "42+", + "Repeater": true, + "Lights": "3-1-21", + "NextSignal": "200", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "1", + "3": "21" + } + } + }, + "ARSOnly": true, + "Pos": "[-10260.793 -4528.0503 2067.5945]", + "Name": "AE4R" + }, + "230": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YG-RW", + "RouteNumber": "1", + "Left": false, + "Angles": "{0 180 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": false, + "Manual": false, + "RouteName": "", + "ARSCodes": "04", + "Lights": "3-1-21", + "NextSignal": "200", + "Switches": "42+", + "LightsExploded": + { + "1": "3", + "2": "1", + "3": "21" + } + } + }, + "ARSOnly": false, + "Pos": "[-10260.793 -4729.5059 2067.5945]", + "Name": "AE4" + }, + "231": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WY-RW", + "RouteNumber": "1", + "Left": true, + "Angles": "{0 360.8823 0}", + "Approve0": false, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04", + "Repeater": true, + "RouteName": "", + "Manual": false, + "Lights": "3-32-1", + "NextSignal": "", + "Switches": "", + "LightsExploded": + { + "1": "3", + "2": "32", + "3": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[-11359.7217 -2100.2476 2068.0344]", + "Name": "OCCREM" + }, + "232": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WY-RW", + "RouteNumber": "1", + "Left": true, + "Angles": "{0 360 0}", + "Approve0": false, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": true, + "ARSCodes": "04", + "Switches": "", + "Lights": "3-32-1", + "NextSignal": "", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "32", + "3": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[-10525 -2428.5645 2067.4944]", + "Name": "OCCREM1" + }, + "233": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YYY-RW", + "RouteNumber": "9", + "Left": false, + "Angles": "{0 283.6814 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": true, + "Switches": "1423-", + "RouteName": "", + "Lights": "4-42-31-31b", + "NextSignal": "GS161", + "ARSCodes": "04", + "LightsExploded": + { + "1": "4", + "2": "42", + "3": "31", + "4": "31b" + } + } + }, + "ARSOnly": true, + "Pos": "[-846.5243 -14183.6035 -639.5077]", + "Name": "GS331R" + }, + "234": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YGR-YW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "11181+", + "Repeater": true, + "Lights": "3-31-1-21-2", + "NextSignal": "162", + "ARSCodes": "0467", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + }, + "2": + { + "Repeater": true, + "Manual": false, + "Switches": "11181-", + "ARSCodes": "04", + "Lights": "3-31-41-41b", + "NextSignal": "300", + "RouteName": "", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "41", + "4": "41b" + } + } + }, + "ARSOnly": true, + "Pos": "[31.3127 -14592.2109 -639.5056]", + "Name": "GS164R" + }, + "235": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WYG-RW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04", + "Repeater": true, + "RouteName": "", + "Manual": false, + "Lights": "4-42-2-32-3", + "NextSignal": "146", + "Switches": "11303+", + "LightsExploded": + { + "1": "4", + "2": "42", + "3": "2", + "4": "32", + "5": "3" + } + }, + "2": + { + "RouteName": "", + "Repeater": true, + "ARSCodes": "04", + "Manual": false, + "Lights": "4-42-1", + "NextSignal": "PR22", + "Switches": "11303-,313+,29+", + "LightsExploded": + { + "1": "4", + "2": "42", + "3": "1" + } + }, + "3": + { + "RouteName": "", + "Repeater": true, + "ARSCodes": "04", + "Manual": false, + "Lights": "4-42-1", + "NextSignal": "PR11", + "Switches": "11303-,313-,29-", + "LightsExploded": + { + "1": "4", + "2": "42", + "3": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[3624.417 11893.9863 383.4944]", + "Name": "PR148R" + }, + "236": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": true, + "Switches": "29+,313+,1299-", + "RouteName": "", + "Lights": "2-1", + "NextSignal": "PR143", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1" + } + }, + "2": + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Switches": "29-,313-,11303-", + "Lights": "2-1", + "NextSignal": "OP PREPR", + "RouteName": "", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[4223.6426 12529.4941 383.9174]", + "Name": "PR1R" + }, + "237": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": true, + "Angles": "{0 450 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": true, + "Switches": "29-,313-,1299-", + "RouteName": "", + "Lights": "2-1", + "NextSignal": "PR143", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1" + } + }, + "2": + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Switches": "29+,313+,11303-", + "Lights": "2-1", + "NextSignal": "OP PREPR", + "RouteName": "", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[4227.7476 12265.9063 383.9174]", + "Name": "PR2R" + }, + "238": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WYG-RW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": true, + "ARSCodes": "04", + "Manual": false, + "Lights": "4-42-1", + "NextSignal": "PR22", + "Switches": "313+,29+", + "LightsExploded": + { + "1": "4", + "2": "42", + "3": "1" + } + }, + "2": + { + "RouteName": "", + "Repeater": true, + "ARSCodes": "04", + "Manual": false, + "Lights": "4-42-1", + "NextSignal": "PR11", + "Switches": "313-,29-", + "LightsExploded": + { + "1": "4", + "2": "42", + "3": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[4534.2056 12265.9063 383.9174]", + "Name": "PR22R" + }, + "239": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WYG-RW-M", + "RouteNumber": "", + "Left": true, + "Angles": "{0 269.9105 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "313-,29-", + "Manual": false, + "RouteName": "", + "Repeater": true, + "Lights": "4-42-1", + "NextSignal": "PR22", + "ARSCodes": "04", + "LightsExploded": + { + "1": "4", + "2": "42", + "3": "1" + } + }, + "2": + { + "Switches": "313+,29+", + "Manual": false, + "RouteName": "", + "Repeater": true, + "Lights": "4-42-1", + "NextSignal": "PR11", + "ARSCodes": "04", + "LightsExploded": + { + "1": "4", + "2": "42", + "3": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[4708.1992 12500.9063 367.9543]", + "Name": "PR11R" + }, + "240": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WYG-RW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{360 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": true, + "ARSCodes": "04", + "RouteName": "", + "Lights": "4-42-1", + "NextSignal": "PR22", + "Switches": "313+,29+", + "LightsExploded": + { + "1": "4", + "2": "42", + "3": "1" + } + }, + "2": + { + "Manual": false, + "Repeater": true, + "ARSCodes": "04", + "RouteName": "", + "Lights": "4-42-1", + "NextSignal": "PR11", + "Switches": "313-,29-", + "LightsExploded": + { + "1": "4", + "2": "42", + "3": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[4809.7778 12416.2813 367.9543]", + "Name": "PR22R2" + }, + "241": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WYG-RW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 83.5098 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": true, + "ARSCodes": "04", + "RouteName": "", + "Lights": "4-42-1", + "NextSignal": "PR22", + "Switches": "313-,29-", + "LightsExploded": + { + "1": "4", + "2": "42", + "3": "1" + } + }, + "2": + { + "Manual": false, + "Repeater": true, + "ARSCodes": "04", + "RouteName": "", + "Lights": "4-42-1", + "NextSignal": "PR11", + "Switches": "313+,29+", + "LightsExploded": + { + "1": "4", + "2": "42", + "3": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[4871.2646 12396.2422 367.9543]", + "Name": "PR11R2" + }, + "242": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "9", + "Left": false, + "Angles": "{0 282.7835 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": false, + "Switches": "11303-", + "Manual": false, + "Lights": "", + "NextSignal": "OP PR", + "ARSCodes": "4", + "LightsExploded": + { + "1": "" + } + } + }, + "ARSOnly": true, + "Pos": "[1166.3722 11995.8398 383.9174]", + "Name": "OP PREPRR" + }, + "243": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YG-RW", + "RouteNumber": "9", + "Left": true, + "Angles": "{0 450 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": true, + "Switches": "1299-", + "Manual": false, + "Lights": "3-31-1-21-2", + "NextSignal": "PR145", + "ARSCodes": "04", + "LightsExploded": + { + "1": "3", + "2": "31", + "3": "1", + "4": "21", + "5": "2" + } + } + }, + "ARSOnly": true, + "Pos": "[874.9117 12835.3408 368.0451]", + "Name": "PR143R" + }, + "244": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 259.8928 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": true, + "Manual": false, + "RouteName": "", + "ARSCodes": "04", + "Lights": "2-1", + "NextSignal": "PR143", + "Switches": "29+,313+,1299-", + "LightsExploded": + { + "1": "2", + "2": "1" + } + }, + "2": + { + "Manual": false, + "Repeater": true, + "Switches": "29-,313-,11303-", + "RouteName": "", + "Lights": "2-1", + "NextSignal": "OP PREPR", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[3985.2632 12396.6563 367.9543]", + "Name": "PR1R2" + }, + "245": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": true, + "Angles": "{0 450 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "29-,313-,1299-", + "Repeater": true, + "ARSCodes": "04", + "Manual": false, + "Lights": "2-1", + "NextSignal": "PR143", + "RouteName": "", + "LightsExploded": + { + "1": "2", + "2": "1" + } + }, + "2": + { + "ARSCodes": "04", + "Manual": false, + "RouteName": "", + "Repeater": true, + "Lights": "2-1", + "NextSignal": "OP PREPR", + "Switches": "29+,313+,11303-", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[3985.7913 12408.3809 367.9543]", + "Name": "PR2R2" + }, + "246": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "MT22", + "RouteName": "", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "ARSOnly": true, + "Pos": "[-7023.1646 2792.5464 862.2814]", + "Name": "MT222" + }, + "247": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "MT2-2", + "ARSCodes": "04", + "Lights": "2-1", + "NextSignal": "MT222", + "Switches": "511+,515+", + "LightsExploded": + { + "1": "2", + "2": "1" + } + }, + "2": + { + "Switches": "511-,515-", + "Manual": false, + "RouteName": "MT2-1", + "Repeater": false, + "Lights": "2-1", + "NextSignal": "MT111", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "Pos": "[-1713.5087 2923.2964 861.8053]", + "Name": "MT238" + }, + "248": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "1", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "1-2", + "NextSignal": "MT111", + "Switches": "", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "ARSOnly": true, + "Pos": "[-6989.4395 2528.5464 862.2814]", + "Name": "MT111" + }, + "249": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": false, + "Manual": false, + "RouteName": "", + "Switches": "511-,515-", + "Lights": "2-1", + "NextSignal": "241", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[-8894.4316 2792.5461 862.2814]", + "Name": "MT2" + }, + "250": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": false, + "Manual": false, + "RouteName": "", + "Switches": "511+,515+", + "Lights": "2-1", + "NextSignal": "241", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[-8893.2529 2528.646 862.2814]", + "Name": "MT1" + }, + "251": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Approve0": false, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "Switches": "511+,515+", + "Lights": "2-1", + "NextSignal": "MT222", + "RouteName": "", + "LightsExploded": + { + "1": "2", + "2": "1" + } + }, + "2": + { + "ARSCodes": "04", + "Repeater": true, + "Switches": "511-,515-", + "Manual": false, + "Lights": "2-1", + "NextSignal": "MT111", + "RouteName": "", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[-5957.3779 2792.1338 862.2814]", + "Name": "MT238R" + }, + "252": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": true, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": true, + "Switches": "511-,515-", + "ARSCodes": "04", + "Lights": "2-1", + "NextSignal": "241", + "RouteName": "", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[-5673.3193 2792.134 862.2814]", + "Name": "MT2R" + }, + "253": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": true, + "Switches": "511+,515+", + "ARSCodes": "04", + "Lights": "2-1", + "NextSignal": "241", + "RouteName": "", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[-5651.147 2528.0029 862.2814]", + "Name": "MT1R" + }, + "254": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": true, + "Angles": "{0 261.6878 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "2-1", + "NextSignal": "241", + "Switches": "511+,515+", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[-5419.1523 2550.5933 852.3182]", + "Name": "MT1R2" + }, + "255": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Approve0": false, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": true, + "Switches": "511+,515+", + "RouteName": "", + "Lights": "2-1", + "NextSignal": "MT222", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1" + } + }, + "2": + { + "RouteName": "", + "Manual": false, + "ARSCodes": "04", + "Repeater": true, + "Lights": "2-1", + "NextSignal": "MT111", + "Switches": "511-,515-", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[-6288.583 2550.2856 852.3182]", + "Name": "MT238R2" + }, + "256": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WYB-GRW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Approve0": false, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": true, + "ARSCodes": "04", + "Switches": "714+,730+", + "Lights": "5-52-2-42-4", + "NextSignal": "BR2905", + "RouteName": "", + "LightsExploded": + { + "1": "5", + "2": "52", + "3": "2", + "4": "42", + "5": "4" + } + } + }, + "ARSOnly": true, + "Pos": "[1683.6263 -13997.7109 -3102.6157]", + "Name": "BR2901R" + }, + "257": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WYY-YRW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": true, + "Manual": false, + "ARSCodes": "0", + "Switches": "8241+,730+", + "Lights": "5", + "NextSignal": "BR2905", + "RouteName": "", + "LightsExploded": + { + "1": "5" + } + }, + "2": + { + "Manual": false, + "Repeater": true, + "RouteName": "", + "Switches": "8241-,730-", + "Lights": "5-53-42-42b", + "NextSignal": "BR2905", + "ARSCodes": "04", + "LightsExploded": + { + "1": "5", + "2": "53", + "3": "42", + "4": "42b" + } + } + }, + "ARSOnly": true, + "Pos": "[6754.1084 -15006.0938 -3102.6157]", + "Name": "BR2R" + }, + "258": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YYG-RW", + "RouteNumber": "9", + "Left": true, + "Angles": "{0 440.213 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "730-", + "Repeater": true, + "ARSCodes": "04", + "Manual": false, + "Lights": "4-42-2-31-3", + "NextSignal": "BR2905", + "RouteName": "", + "LightsExploded": + { + "1": "4", + "2": "42", + "3": "2", + "4": "31", + "5": "3" + } + } + }, + "ARSOnly": true, + "Pos": "[4869.918 -14502.3115 -3118.5789]", + "Name": "BR2905R1" + }, + "259": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YYG-RW", + "RouteNumber": "", + "Left": true, + "Angles": "{0 450.3466 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04", + "Manual": false, + "RouteName": "", + "Repeater": true, + "Lights": "4-42-2-31-3", + "NextSignal": "BR2905", + "Switches": "730-", + "LightsExploded": + { + "1": "4", + "2": "42", + "3": "2", + "4": "31", + "5": "3" + } + } + }, + "ARSOnly": true, + "Pos": "[1284.9695 -14066.7637 -3118.5789]", + "Name": "BR2905R2" + }, + "260": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YYY-GRW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Manual": false, + "Switches": "8226+,8241+", + "Repeater": true, + "Lights": "5-52-3-42-4", + "NextSignal": "BR2914", + "ARSCodes": "04", + "LightsExploded": + { + "1": "5", + "2": "52", + "3": "3", + "4": "42", + "5": "4" + } + }, + "2": + { + "ARSCodes": "04", + "Manual": false, + "Switches": "8226-,714-", + "Repeater": true, + "Lights": "5-52-31-31b", + "NextSignal": "BR1", + "RouteName": "", + "LightsExploded": + { + "1": "5", + "2": "52", + "3": "31", + "4": "31b" + } + } + }, + "ARSOnly": true, + "Pos": "[2004.5962 -15006.2871 -3102.6157]", + "Name": "BR2912R" + }, + "261": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YYY-GRW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 102.0339 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": true, + "ARSCodes": "04", + "Manual": false, + "Lights": "5-52-31-31b", + "NextSignal": "BR1", + "Switches": "714-", + "LightsExploded": + { + "1": "5", + "2": "52", + "3": "31", + "4": "31b" + } + } + }, + "ARSOnly": true, + "Pos": "[4534.9194 -14554.5879 -3115.5789]", + "Name": "BR2912R2" + }, + "262": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "YYY-GRW", + "RouteNumber": "9", + "Left": false, + "Angles": "{0 95.5697 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "714-", + "Manual": false, + "RouteName": "", + "Repeater": true, + "Lights": "5-52-31-31b", + "NextSignal": "BR1", + "ARSCodes": "04", + "LightsExploded": + { + "1": "5", + "2": "52", + "3": "31", + "4": "31b" + } + } + }, + "ARSOnly": true, + "Pos": "[8179.4419 -14039.7627 -3118.5789]", + "Name": "BR2912R3" + }, + "263": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WYY-GRW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "ARSCodes": "04", + "Switches": "", + "Lights": "5-3-42", + "NextSignal": "BR2914C", + "RouteName": "", + "LightsExploded": + { + "1": "5", + "2": "3", + "3": "42" + } + } + }, + "ARSOnly": false, + "Pos": "[9740.5264 -15006.207 -3102.6157]", + "Name": "BR2914" + }, + "264": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "WRW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "2-1", + "NextSignal": "D4", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[4956.2158 11841.0879 -1529.5056]", + "Name": "D2" + }, + "265": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WR-WW", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "NextSignal": "D2", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "31" + }, + "Repeater": false, + "IsOpened": false, + "Lights": "2-31", + "Switches": "16/8+", + "RouteName": "", + "Manual": false + } + }, + "ARSOnly": false, + "Pos": "[2049.6238 11841.6074 -1530.0657]", + "Name": "E2" + }, + "266": + { + "IsolateSwitches": true, + "SignalType": 2, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "2-3", + "NextSignal": "P1", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "3" + } + } + }, + "ARSOnly": false, + "Pos": "[2101.8044 12105.207 -1529.5056]", + "Name": "P1" + }, + "267": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "WRW", + "RouteNumber": "", + "Left": true, + "Angles": "{359.6781 539.3087 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "2-1", + "NextSignal": "D6", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[13938.4512 8967.748 -2042.2155]", + "Name": "D4" + }, + "268": + { + "IsolateSwitches": true, + "SignalType": 0, + "LensesStr": "WRW", + "RouteNumber": "", + "Left": true, + "Angles": "{0.0001 450.0001 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "2-1", + "NextSignal": "VH2", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[6827.8462 6225.7944 -1585.5186]", + "Name": "D6" + }, + "269": + { + "IsolateSwitches": true, + "SignalType": 0, + "Depot": false, + "LensesStr": "YRW", + "RouteNumber": "D", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": true, + "Repeater": false, + "ARSCodes": "4", + "IsOpened": false, + "Lights": "2-2-1b", + "NextSignal": "D1", + "RouteName": "DEPOT", + "LightsExploded": + { + "1": "2", + "2": "2", + "3": "1b" + } + } + }, + "ARSOnly": false, + "Pos": "[5899.3716 5961.564 -1529.5056]", + "Name": "D" + }, + "270": + { + "IsolateSwitches": false, + "SignalType": 0, + "Depot": true, + "LensesStr": "WRW", + "RouteNumber": "3", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "2-1", + "NextSignal": "D", + "ARSCodes": "4", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[1994.4974 5962.0039 -1529.5056]", + "Name": "VH3" + }, + "271": + { + "IsolateSwitches": false, + "SignalType": 0, + "Depot": false, + "LensesStr": "WRW", + "RouteNumber": "4", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "2", + "NextSignal": "", + "ARSCodes": "4", + "LightsExploded": + { + "1": "2" + } + } + }, + "ARSOnly": false, + "Pos": "[5894.3057 6225.564 -1529.5056]", + "Name": "D21" + }, + "272": + { + "IsolateSwitches": false, + "SignalType": 0, + "Depot": false, + "LensesStr": "WRW", + "RouteNumber": "4", + "Left": true, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "RouteName": "", + "Lights": "2-1", + "NextSignal": "D21", + "ARSCodes": "4", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[2014.5764 6226.0039 -1529.5056]", + "Name": "VH4" + }, + "273": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": true, + "Angles": "{0 450 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": false, + "Manual": false, + "Switches": "16/63-,16/66-,1913-", + "ARSCodes": "04", + "Lights": "2-1", + "NextSignal": "198", + "RouteName": "VH3-2", + "LightsExploded": + { + "1": "2", + "2": "1" + } + }, + "2": + { + "ARSCodes": "04", + "Repeater": false, + "Switches": "16/63+,16/66+,1664-", + "Manual": false, + "Lights": "2-1", + "NextSignal": "VH PREOP", + "RouteName": "VH3-1", + "LightsExploded": + { + "1": "2", + "2": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[2296.0647 5961.7939 -1529.5056]", + "Name": "VH5" + }, + "274": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Approve0": true, + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": false, + "ARSCodes": "04", + "RouteName": "VH4-2", + "Lights": "2-2-1", + "NextSignal": "198", + "Switches": "16/63+,16/66+,1913-", + "LightsExploded": + { + "1": "2", + "2": "2", + "3": "1" + } + }, + "2": + { + "RouteName": "VH4-1", + "Manual": false, + "ARSCodes": "04", + "Repeater": false, + "Lights": "2-2-1", + "NextSignal": "VH PREOP", + "Switches": "16/63-,16/66-,1664-", + "LightsExploded": + { + "1": "2", + "2": "2", + "3": "1" + } + } + }, + "ARSOnly": false, + "Pos": "[2288.6863 6226.2061 -1529.5056]", + "Name": "VH2" + }, + "275": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": true, + "Angles": "{0 450.493 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "VH3-2", + "Repeater": true, + "ARSCodes": "04", + "Manual": false, + "Lights": "2-1", + "NextSignal": "198", + "Switches": "16/63-,16/66-,1913-", + "LightsExploded": + { + "1": "2", + "2": "1" + } + }, + "2": + { + "Manual": false, + "Repeater": true, + "ARSCodes": "04", + "RouteName": "VH3-1", + "Lights": "1-2", + "NextSignal": "VH PREOP", + "Switches": "16/63+,16/66+,1664-", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "ARSOnly": true, + "Pos": "[551.8408 6153.501 -1542.4688]", + "Name": "VH5R2" + }, + "276": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WYY-GRW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": true, + "Switches": "16/66+,16/63+", + "Manual": false, + "Lights": "5-52-1", + "NextSignal": "VH3", + "ARSCodes": "04", + "LightsExploded": + { + "1": "5", + "2": "52", + "3": "1" + } + }, + "2": + { + "Manual": false, + "Repeater": true, + "Switches": "16/66-,16/63-", + "ARSCodes": "04", + "Lights": "5-52-1", + "NextSignal": "VH4", + "RouteName": "", + "LightsExploded": + { + "1": "5", + "2": "52", + "3": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[1401.6317 5950.7104 -1539.4688]", + "Name": "VH3R" + }, + "277": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WYY-GRW-M", + "RouteNumber": "", + "Left": true, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "16/66+,16/63+", + "Manual": false, + "ARSCodes": "04", + "Repeater": true, + "Lights": "5-52-1", + "NextSignal": "VH4", + "RouteName": "", + "LightsExploded": + { + "1": "5", + "2": "52", + "3": "1" + } + }, + "2": + { + "Repeater": true, + "Manual": false, + "RouteName": "", + "Switches": "16/66-,16/63-", + "Lights": "5-52-1", + "NextSignal": "VH3", + "ARSCodes": "04", + "LightsExploded": + { + "1": "5", + "2": "52", + "3": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[1333.2151 6204.9849 -1539.4688]", + "Name": "VH4R" + }, + "278": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 280.1072 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Switches": "16/63+,16/66+,1913-", + "Repeater": true, + "RouteName": "VH4-2", + "Manual": false, + "Lights": "2-2-1", + "NextSignal": "198", + "ARSCodes": "04", + "LightsExploded": + { + "1": "2", + "2": "2", + "3": "1" + } + }, + "2": + { + "Manual": false, + "Repeater": true, + "RouteName": "VH4-1", + "Switches": "16/63-,16/66-,1664-", + "Lights": "1-2", + "NextSignal": "VH PREOP", + "ARSCodes": "04", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "ARSOnly": true, + "Pos": "[547.5951 6034.4023 -1542.4688]", + "Name": "VH2R2" + }, + "279": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": true, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "ARSCodes": "04", + "Manual": false, + "Switches": "16/63-,16/66-,1913-", + "Repeater": true, + "Lights": "2-1", + "NextSignal": "198", + "RouteName": "VH3-2", + "LightsExploded": + { + "1": "2", + "2": "1" + } + }, + "2": + { + "Repeater": true, + "Manual": false, + "Switches": "16/63+,16/66+,1664-", + "ARSCodes": "04", + "Lights": "1-2", + "NextSignal": "VH PREOP", + "RouteName": "VH3-1", + "LightsExploded": + { + "1": "1", + "2": "2" + } + } + }, + "ARSOnly": true, + "Pos": "[607.8409 5953.9829 -1539.4688]", + "Name": "VH5R" + }, + "280": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": true, + "Switches": "16/63+,16/66+,1913-", + "NextSignal": "198" + }, + "2": + { + "Manual": false, + "Repeater": true, + "Switches": "16/63-,16/66-,1664-", + "NextSignal": "VH PREOP" + } + }, + "ARSOnly": true, + "Pos": "[607.8409 6226.0039 -1529.5056]", + "Name": "VH2R" + }, + "281": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WRW-M", + "RouteNumber": "9", + "Left": true, + "Angles": "{0 450 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Manual": false, + "Repeater": true, + "Switches": "1913-", + "NextSignal": "198" + } + }, + "ARSOnly": true, + "Pos": "[-2584.6077 6531.0107 -1545.4688]", + "Name": "VH2R3" + }, + "282": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WYY-GRW-M", + "RouteNumber": "", + "Left": false, + "Angles": "{0 90 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": true, + "Manual": false, + "RouteName": "", + "ARSCodes": "0467", + "Lights": "5-52-2-42-4", + "NextSignal": "199", + "Switches": "1664+", + "LightsExploded": + { + "1": "5", + "2": "52", + "3": "2", + "4": "42", + "5": "4" + } + }, + "2": + { + "Switches": "1664-,16/66+,16/63+", + "Manual": false, + "ARSCodes": "04", + "Repeater": true, + "Lights": "5-52-1", + "NextSignal": "VH3", + "RouteName": "VH1-3", + "LightsExploded": + { + "1": "5", + "2": "52", + "3": "1" + } + }, + "3": + { + "Repeater": true, + "Manual": false, + "RouteName": "VH1-4", + "Switches": "1664-,16/66-,16/63-", + "Lights": "5-52-1", + "NextSignal": "VH4", + "ARSCodes": "04", + "LightsExploded": + { + "1": "5", + "2": "52", + "3": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[-948.3539 5590.0938 -1529.5056]", + "Name": "VH197R" + }, + "283": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "1", + "Left": false, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": false, + "Manual": false, + "ARSCodes": "04", + "Lights": "1", + "NextSignal": "VH OP", + "RouteName": "", + "LightsExploded": + { + "1": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[-3430.3994 5590.2061 -1529.5056]", + "Name": "VH PREOP" + }, + "284": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "RW", + "RouteNumber": "9", + "Left": false, + "Angles": "{0 280.1049 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "Repeater": true, + "Manual": false, + "ARSCodes": "04", + "RouteName": "", + "Lights": "1", + "NextSignal": "VH OP", + "Switches": "1664-", + "LightsExploded": + { + "1": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[-2549.4927 5660.0029 -1545.4688]", + "Name": "VH PREOPR" + }, + "285": + { + "IsolateSwitches": false, + "SignalType": 0, + "LensesStr": "WYY-GRW-M", + "RouteNumber": "", + "Left": true, + "Angles": "{0 270 0}", + "Class": "gmod_track_signal", + "Routes": + { + "1": + { + "RouteName": "", + "Repeater": true, + "Switches": "16/66+,16/63+", + "Manual": false, + "Lights": "5-52-1", + "NextSignal": "VH4", + "ARSCodes": "04", + "LightsExploded": + { + "1": "5", + "2": "52", + "3": "1" + } + }, + "2": + { + "Manual": false, + "Repeater": true, + "Switches": "16/66-,16/63-", + "ARSCodes": "04", + "Lights": "5-52-1", + "NextSignal": "VH3", + "RouteName": "", + "LightsExploded": + { + "1": "5", + "2": "52", + "3": "1" + } + } + }, + "ARSOnly": true, + "Pos": "[1178.3875 6235.584 -1539.4688]", + "Name": "VH4R2" + }, + "286": + { + "Channel": 1, + "Class": "gmod_track_switch", + "NotChangePos": false, + "Angles": "{0 88.5554 0}", + "Pos": "[-6722.1035 2656.3433 855.8182]" + }, + "287": + { + "Channel": 1, + "Class": "gmod_track_switch", + "NotChangePos": false, + "Angles": "{0 90.9752 0}", + "Pos": "[-4959.771 2655.9863 855.8182]" + }, + "288": + { + "Channel": 1, + "Class": "gmod_track_switch", + "NotChangePos": false, + "Angles": "{0 180.2236 0}", + "Pos": "[-10169.7119 -4348.6558 2062.0313]" + }, + "289": + { + "Channel": 0, + "Class": "gmod_track_switch", + "NotChangePos": true, + "Angles": "{0 179.2965 0}", + "Pos": "[-10998.5557 -8090.6587 2062.0313]" + }, + "290": + { + "Channel": 0, + "Class": "gmod_track_switch", + "NotChangePos": true, + "Angles": "{0 0.9849 0}", + "Pos": "[-10347.0283 -8451.0791 2062.2712]" + }, + "291": + { + "Channel": 1, + "Class": "gmod_track_switch", + "NotChangePos": false, + "Angles": "{0 90.3005 0}", + "Pos": "[784.671 -15095.8975 -3109.0789]" + }, + "292": + { + "Channel": 2, + "Class": "gmod_track_switch", + "NotChangePos": false, + "Angles": "{0 270.9205 0}", + "Pos": "[744.525 -13906.5293 -3109.0789]" + }, + "293": + { + "Channel": 1, + "Class": "gmod_track_switch", + "NotChangePos": false, + "Angles": "{0 268.9404 0}", + "Pos": "[8666.1855 -13894.9756 -3109.0789]" + }, + "294": + { + "Channel": 2, + "Class": "gmod_track_switch", + "NotChangePos": false, + "Angles": "{0 91.6204 0}", + "Pos": "[8716.5117 -15098.9316 -3109.0789]" + }, + "295": + { + "Channel": 1, + "Class": "gmod_track_switch", + "NotChangePos": false, + "Angles": "{0 91.089 0}", + "Pos": "[-3064.3206 5498.6528 -1535.9688]" + }, + "296": + { + "Channel": 1, + "Class": "gmod_track_switch", + "NotChangePos": false, + "Angles": "{0 272.8089 0}", + "Pos": "[-3030.531 6704.5098 -1535.9688]" + }, + "297": + { + "Channel": 1, + "Class": "gmod_track_switch", + "NotChangePos": false, + "Angles": "{0 268.4288 0}", + "Pos": "[-94.679 6100.8804 -1535.9688]" + }, + "298": + { + "Channel": 1, + "Class": "gmod_track_switch", + "NotChangePos": false, + "Angles": "{0 263.5888 0}", + "Pos": "[1686.1865 6104.3564 -1535.9688]" + }, + "299": + { + "Channel": 0, + "Class": "gmod_track_switch", + "NotChangePos": true, + "Angles": "{0 270.4053 0}", + "Pos": "[3038.4353 11938.3887 -1535.9688]" + }, + "300": + { + "Channel": 1, + "Class": "gmod_track_switch", + "NotChangePos": true, + "Angles": "{0 358.7163 0}", + "Pos": "[-7124.167 -11818.084 2062.7612]" + }, + "301": + { + "Channel": 1, + "Class": "gmod_track_switch", + "NotChangePos": true, + "Angles": "{0 178.6763 0}", + "Pos": "[-5202.1294 -11822.0068 2062.7612]" + }, + "302": + { + "Channel": 1, + "Class": "gmod_track_switch", + "NotChangePos": false, + "Angles": "{0 88.6831 0}", + "Pos": "[-1833.6738 -14687.9912 -645.9688]" + }, + "303": + { + "Channel": 1, + "Class": "gmod_track_switch", + "NotChangePos": false, + "Angles": "{0 270.579 0}", + "Pos": "[-1843.8175 -14230.71 -645.9708]" + }, + "304": + { + "Channel": 1, + "Class": "gmod_track_switch", + "NotChangePos": false, + "Angles": "{0 359.1542 0}", + "Pos": "[5310.5449 12389.9766 377.4543]" + }, + "305": + { + "Channel": 2, + "Class": "gmod_track_switch", + "NotChangePos": false, + "Angles": "{0 89.4658 0}", + "Pos": "[438.4602 12791.2646 377.5451]" + }, + "306": + { + "Channel": 1, + "Class": "gmod_track_switch", + "NotChangePos": false, + "Angles": "{0 270.4378 0}", + "Pos": "[363.3202 12010.6143 376.9681]" + }, + "307": + { + "Channel": 1, + "Class": "gmod_track_switch", + "NotChangePos": false, + "Angles": "{0 0.6538 0}", + "Pos": "[3360.5332 12402.3096 377.4543]" + }, + "308": + { + "Channel": 1, + "Class": "gmod_track_switch", + "NotChangePos": false, + "Angles": "{0 2.285 0}", + "Pos": "[-11197.8037 -4087.9932 2062.0313]" + }, + "309": + { + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 2, + "Pos": "[-4302.7148 -11688.6074 2069.2244]" + }, + "310": + { + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 2, + "Pos": "[-10260.793 -4668.5293 2067.5945]" + }, + "311": + { + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 4, + "SignType": 20, + "Pos": "[-10261 1129.4513 2067.4944]" + }, + "312": + { + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 4, + "SignType": 20, + "Pos": "[-10525 1191.4583 2067.4944]" + }, + "313": + { + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 4, + "SignType": 20, + "Pos": "[-11361 1178.4707 2068.4944]" + }, + "314": + { + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 4, + "SignType": 20, + "Pos": "[-11097 1130.0039 2068.4944]" + }, + "315": + { + "Angles": "{90 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 4, + "SignType": 20, + "Pos": "[-10080.9473 3611.6089 2296.0803]" + }, + "316": + { + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 4, + "SignType": 1, + "Pos": "[-4658.6597 -11688.6074 2069.2244]" + }, + "317": + { + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 4, + "SignType": 1, + "Pos": "[-4764.6011 -11952.6074 2069.2244]" + }, + "318": + { + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 4, + "SignType": 2, + "Pos": "[-4279.6152 -11952.6074 2069.2244]" + }, + "319": + { + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 24.5509, + "SignType": 19, + "Pos": "[-10261 -1593.5464 2067.4944]" + }, + "320": + { + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 8.3832, + "SignType": 16, + "Pos": "[-10261 -1396.241 2067.4944]" + }, + "321": + { + "Angles": "{359.7632 269.4941 0}", + "Class": "gmod_track_signs", + "ZOffset": 8.3832, + "SignType": 4, + "Pos": "[-10259.0654 3918.3562 2066.4546]" + }, + "322": + { + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 24.5509, + "SignType": 19, + "Pos": "[-10261 3654.0015 2067.4944]" + }, + "323": + { + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 9.5808, + "SignType": 20, + "Pos": "[11848.207 -1164.301 2066.4944]" + }, + "324": + { + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 9.5808, + "SignType": 20, + "Pos": "[12112.207 -1173.2251 2066.4944]" + }, + "325": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 9.5808, + "SignType": 19, + "Pos": "[6312.1123 -9609.207 2066.2744]" + }, + "326": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 9.5808, + "SignType": 20, + "Pos": "[-14069 -3688.478 484.4944]" + }, + "327": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 9.5808, + "SignType": 20, + "Pos": "[-14661 -4231.1904 484.4944]" + }, + "328": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 25.1497, + "SignType": 19, + "Pos": "[-14069 -2394.9192 484.4944]" + }, + "329": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 25.1497, + "SignType": 19, + "Pos": "[-14661 -5530.6357 484.4944]" + }, + "330": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 3, + "Pos": "[-14069 -2076.0229 484.4944]" + }, + "331": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 5, + "Pos": "[-14396.793 5032.4121 484.9944]" + }, + "332": + { + "YOffset": 0, + "Angles": "{0.0005 180.4942 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 18, + "Pos": "[-6388.4619 13610.7773 484.3325]" + }, + "333": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 17, + "Pos": "[-1862.295 13610.793 862.6774]" + }, + "334": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 8, + "SignType": 20, + "Pos": "[103.2353 2924 861.6243]" + }, + "335": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 8, + "SignType": 20, + "Pos": "[64.4704 2352 861.6243]" + }, + "336": + { + "YOffset": 0, + "Angles": "{360 357.499 0}", + "Class": "gmod_track_signs", + "ZOffset": 8, + "SignType": 16, + "Pos": "[1864.9116 2919.7129 861.8053]" + }, + "337": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 2, + "Pos": "[2156.3577 2351.7036 861.8053]" + }, + "338": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 2, + "Pos": "[-1794.0724 2923.2964 861.8053]" + }, + "339": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 2, + "Pos": "[-7891.6807 2792.5461 862.2814]" + }, + "340": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 2, + "Pos": "[-7893.251 2528.5461 862.2814]" + }, + "341": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 12, + "Pos": "[-11621.1074 2792.5464 862.2814]" + }, + "342": + { + "YOffset": 0, + "Angles": "{360 179.2626 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 16, + "Pos": "[-1598.9906 2354.5674 861.8053]" + }, + "343": + { + "YOffset": 0, + "Angles": "{0.2362 271.5219 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 5, + "Pos": "[7081.0864 6049.5352 863.0703]" + }, + "344": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 14, + "Pos": "[-1777.0151 13874.793 862.6774]" + }, + "345": + { + "YOffset": 0, + "Angles": "{0.2342 360.5031 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 15, + "Pos": "[-6496.3496 13873.8887 484.7238]" + }, + "346": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 16, + "Pos": "[-14069 -6134.6221 484.4944]" + }, + "347": + { + "YOffset": 0, + "Angles": "{358.802 354.5771 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 15, + "Pos": "[-11283.5977 -9615.4619 475.5164]" + }, + "348": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 14, + "Pos": "[3287.0237 -9609.207 2066.1743]" + }, + "349": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 17, + "Pos": "[3275.0754 -9873.1074 2066.1743]" + }, + "350": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 18, + "Pos": "[-11465.4092 -9873.207 484.4943]" + }, + "351": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 3, + "Pos": "[-14661 -5938.5449 484.4944]" + }, + "352": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 19, + "Pos": "[6260.4395 -9873.207 2066.2744]" + }, + "353": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 19, + "Pos": "[5987.9941 10598.793 2066.4944]" + }, + "354": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 19, + "Pos": "[6294.4355 10862.793 2066.4944]" + }, + "355": + { + "YOffset": 0, + "Angles": "{0.2349 449.5034 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 16, + "Pos": "[-10523.2422 3897.9175 2067.3828]" + }, + "356": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 2, + "Pos": "[-10525 -1785.0874 2067.4944]" + }, + "357": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 19, + "Pos": "[-10525 -1402.2811 2067.4944]" + }, + "358": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 2, + "Pos": "[-11096.793 -4454.0718 2068.1543]" + }, + "359": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 16, + "Pos": "[-11097 -1409.0814 2068.4944]" + }, + "360": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 19, + "Pos": "[-11097 -1742.8915 2068.4944]" + }, + "361": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 3, + "Pos": "[-11097.0566 3990.439 2068.4944]" + }, + "362": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 19, + "Pos": "[-11097 3593.3708 2068.4944]" + }, + "363": + { + "YOffset": 0, + "Angles": "{359.5348 182.5592 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 14, + "Pos": "[-3530.4309 14825.0967 2067.5007]" + }, + "364": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 15, + "Pos": "[8493.1699 14838.0137 893.7444]" + }, + "365": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.1856, + "SignType": 20, + "Pos": "[12541.5 1538.655 895.4944]" + }, + "366": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.1856, + "SignType": 20, + "Pos": "[13733 1531.8032 895.4944]" + }, + "367": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.1856, + "SignType": 5, + "Pos": "[12541.5 -383.4925 895.4944]" + }, + "368": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 14, + "Pos": "[3077.1289 -15240.9863 895.4944]" + }, + "369": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 15, + "Pos": "[-5708.1382 -15241.0137 133.7444]" + }, + "370": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 16, + "Pos": "[-14069 -6117.7344 133.4944]" + }, + "371": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.1856, + "SignType": 20, + "Pos": "[-14069 -3977.2744 133.4944]" + }, + "372": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.1856, + "SignType": 20, + "Pos": "[-14661 -3972.1697 133.4944]" + }, + "373": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.1856, + "SignType": 3, + "Pos": "[-14069 -2051.1631 133.4944]" + }, + "374": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.1856, + "SignType": 19, + "Pos": "[-14069 -2396.9055 133.4944]" + }, + "375": + { + "YOffset": 0, + "Angles": "{359.7187 181.7729 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.1856, + "SignType": 14, + "Pos": "[-10232.9365 3186.334 133.7523]" + }, + "376": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.1856, + "SignType": 15, + "Pos": "[-4538.1323 3190.9871 -378.2557]" + }, + "377": + { + "YOffset": 0, + "Angles": "{0 180.0001 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.1856, + "SignType": 18, + "Pos": "[-2719.9858 3191.0171 -375.3814]" + }, + "378": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.1856, + "SignType": 17, + "Pos": "[4756.4233 3191.0129 383.7443]" + }, + "379": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.1856, + "SignType": 9, + "Pos": "[5412.7393 3190.4871 383.4944]" + }, + "380": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.1856, + "SignType": 20, + "Pos": "[-4093 4079.4885 384.4944]" + }, + "381": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.1856, + "SignType": 20, + "Pos": "[-3829 4098.0444 384.4944]" + }, + "382": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.1856, + "SignType": 16, + "Pos": "[-4092.7939 6386.2705 384.4944]" + }, + "383": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.1856, + "SignType": 19, + "Pos": "[-4092.7939 6805.0273 384.4944]" + }, + "384": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 25.1497, + "SignType": 19, + "Pos": "[-3829 5567.5679 384.4944]" + }, + "385": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 25, + "SignType": 19, + "Pos": "[-4093 2110.8997 384.4944]" + }, + "386": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 2, + "Pos": "[-4092.7939 1600.5421 384.4944]" + }, + "387": + { + "YOffset": 0, + "Angles": "{359.0942 365.119 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 14, + "Pos": "[11671.8818 -14313.2998 380.4624]" + }, + "388": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 15, + "Pos": "[1128.9448 -14328.207 -639.5077]" + }, + "389": + { + "YOffset": 0, + "Angles": "{360 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 4, + "Pos": "[8399.7383 -14328.6074 91.2324]" + }, + "390": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 6.5868, + "SignType": 20, + "Pos": "[-14072 -4339.6631 -639.3806]" + }, + "391": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 6.5868, + "SignType": 20, + "Pos": "[-14336 -4117.6782 -639.3806]" + }, + "392": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 6.5868, + "SignType": 5, + "Pos": "[-14072.2061 -2159.2556 -639.3806]" + }, + "393": + { + "YOffset": 0, + "Angles": "{359.7658 271.5129 0}", + "Class": "gmod_track_signs", + "ZOffset": 27.5449, + "SignType": 16, + "Pos": "[-14065.3467 -6708.5566 -640.1501]" + }, + "394": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 4, + "Pos": "[3873.4617 14048.0137 -639.5057]" + }, + "395": + { + "YOffset": 0, + "Angles": "{356.4991 136.3677 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 3, + "Pos": "[10558.5586 12047.0693 -639.5058]" + }, + "396": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 2, + "Pos": "[12656.0137 5583.0381 -639.5057]" + }, + "397": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 16, + "Pos": "[12656.207 1486.4375 -639.5057]" + }, + "398": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 20, + "Pos": "[12656 -948.6758 -639.5056]" + }, + "399": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 20, + "Pos": "[14336 -900.5538 -639.5056]" + }, + "400": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 24.5509, + "SignType": 19, + "Pos": "[12656 -3092.4612 -639.5056]" + }, + "401": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 11.976, + "SignType": 2, + "Pos": "[12656 -2597.8813 -639.5056]" + }, + "402": + { + "YOffset": 0, + "Angles": "{356.4982 403.1666 0}", + "Class": "gmod_track_signs", + "ZOffset": 11.976, + "SignType": 5, + "Pos": "[11801.3398 -10104.1738 -640.0291]" + }, + "403": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 11.976, + "SignType": 14, + "Pos": "[8947.9961 -10791.9141 -640.0096]" + }, + "404": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 11.976, + "SignType": 15, + "Pos": "[-120.6621 -10792.0137 -1529.5056]" + }, + "405": + { + "YOffset": 0, + "Angles": "{356.7799 207.9683 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 3, + "Pos": "[-8421.835 4598.2217 -1529.5033]" + }, + "406": + { + "YOffset": 0, + "Angles": "{359.5343 268.484 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 4, + "Pos": "[-11902.8467 -2221.709 -1529.499]" + }, + "407": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 2, + "Pos": "[-2375.2241 5590.5059 -1529.5056]" + }, + "408": + { + "YOffset": 0, + "Angles": "{359.9934 92.5005 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 16, + "Pos": "[10104.6191 2531.4382 -1529.4873]" + }, + "409": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 20, + "Pos": "[10106.4688 -151.7623 -1529.5056]" + }, + "410": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 20, + "Pos": "[11129.5322 -100.492 -1529.5056]" + }, + "411": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 19, + "Pos": "[10106.4688 2044.8721 -1529.5056]" + }, + "412": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 3, + "Pos": "[10106.4688 -2164.0378 -1529.5056]" + }, + "413": + { + "YOffset": 0, + "Angles": "{0 90.05 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.1916, + "SignType": 15, + "Pos": "[10105.7773 -10405.2607 -2273.8757]" + }, + "414": + { + "YOffset": 0, + "Angles": "{0.0003 270.5957 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.1916, + "SignType": 2, + "Pos": "[-6276.8965 -10692.0557 -2275.4978]" + }, + "415": + { + "YOffset": 0, + "Angles": "{0.283 359.4565 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.1916, + "SignType": 16, + "Pos": "[-10338.332 -6688.4033 -2275.4951]" + }, + "416": + { + "YOffset": 39.521, + "Angles": "{1.3397 443.9464 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.1916, + "SignType": 3, + "Pos": "[-14436.7539 -10099.9824 -2275.4895]" + }, + "417": + { + "YOffset": 0, + "Angles": "{0.2839 449.399 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.1916, + "SignType": 19, + "Pos": "[-14468.1055 -10771.9219 -2275.4917]" + }, + "418": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.1916, + "SignType": 19, + "Pos": "[-9386.5645 -15904.0137 -2275.5056]" + }, + "419": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.1916, + "SignType": 19, + "Pos": "[-5221.4878 -15904.0137 -2275.5056]" + }, + "420": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.1916, + "SignType": 18, + "Pos": "[11129.1074 -10346.1484 -2274.0356]" + }, + "421": + { + "YOffset": 0, + "Angles": "{0.0001 269.9999 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.1916, + "SignType": 16, + "Pos": "[11128.9941 -2657.9773 -1531.0375]" + }, + "422": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 24.5509, + "SignType": 19, + "Pos": "[11129.5313 -2435.884 -1529.5056]" + }, + "423": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 2, + "Pos": "[11129.5322 1767.8761 -1529.5056]" + }, + "424": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 19, + "Pos": "[11129.5322 2250.396 -1529.5056]" + }, + "425": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 5, + "Pos": "[-961.3202 6598.0938 -1529.5056]" + }, + "426": + { + "YOffset": 0, + "Angles": "{3.3744 147.0603 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 4, + "Pos": "[-10130.54 -10662.9814 -1529.5043]" + }, + "427": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 3, + "Pos": "[-3219.0466 -11904.0137 -1529.5056]" + }, + "428": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 2, + "Pos": "[4412.5005 -11904.0137 -1047.5999]" + }, + "429": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 16, + "Pos": "[14336.207 -4240.7397 -639.5057]" + }, + "430": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 17, + "Pos": "[8639.9736 -11904.0137 -640.0016]" + }, + "431": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 18, + "Pos": "[-563.6486 -11904.0137 -1529.5056]" + }, + "432": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 5, + "Pos": "[14336 834.572 -639.4056]" + }, + "433": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 19, + "Pos": "[14336.207 1245.4142 -639.5057]" + }, + "434": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 4, + "Pos": "[-3956.2461 15744.0137 -639.5057]" + }, + "435": + { + "YOffset": 0, + "Angles": "{3.469 398.196 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 3, + "Pos": "[-11691.79 14215.0771 -639.5042]" + }, + "436": + { + "YOffset": 0, + "Angles": "{0.2353 449.5325 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 2, + "Pos": "[-14335.4746 7607.7373 -639.4969]" + }, + "437": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 16, + "Pos": "[-14336.207 -1505.2632 -639.3806]" + }, + "438": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 19, + "Pos": "[-14336 -2199.3369 -639.3806]" + }, + "439": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 4, + "Pos": "[-14336 -6137.1968 -639.3806]" + }, + "440": + { + "YOffset": 0, + "Angles": "{0.2342 90.5031 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 19, + "Pos": "[-14335.4033 -6345.3975 -639.1318]" + }, + "441": + { + "YOffset": 0, + "Angles": "{3.4928 139.0934 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 3, + "Pos": "[-12003.1631 -12738.3359 -631.4811]" + }, + "442": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 19, + "Pos": "[10327.1729 -2175.7939 384.4944]" + }, + "443": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 19, + "Pos": "[10281.6152 -2439.594 384.6944]" + }, + "444": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 19, + "Pos": "[-19.5707 -2175.7939 384.4944]" + }, + "445": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 19, + "Pos": "[-44.8717 -2439.7939 384.6944]" + }, + "446": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 5, + "SignType": 16, + "Pos": "[-3828.7939 1510.5765 384.4944]" + }, + "447": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 25.7485, + "SignType": 19, + "Pos": "[-3829 1828.0665 384.4944]" + }, + "448": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 3, + "Pos": "[-175.6526 11894.207 383.4944]" + }, + "449": + { + "YOffset": 0, + "Angles": "{359.717 449.3985 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 9, + "Pos": "[12553.6924 7774.0518 383.5058]" + }, + "450": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 2, + "Pos": "[-8929.2275 3702.543 75.4012]" + }, + "451": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 17, + "Pos": "[-10156.3135 3702.9028 133.4944]" + }, + "452": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 18, + "Pos": "[-4739.6206 3701.9871 -369.5056]" + }, + "453": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 15, + "Pos": "[-2973.2937 3701.9871 -369.5056]" + }, + "454": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 14, + "Pos": "[4468.6411 3701.9871 383.4944]" + }, + "455": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 16, + "Pos": "[-14661.207 -1410.0725 133.4944]" + }, + "456": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 19, + "Pos": "[-14661 -2098.749 133.4944]" + }, + "457": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 22.7545, + "SignType": 5, + "Pos": "[-14661 -5569.8833 133.4944]" + }, + "458": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 19, + "Pos": "[-14661 -5928.0894 133.4944]" + }, + "459": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 18, + "Pos": "[-4785.521 -15753.0137 133.7444]" + }, + "460": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 17, + "Pos": "[3225.9487 -15752.9863 895.4944]" + }, + "461": + { + "YOffset": 0, + "Angles": "{2.4507 195.3844 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 4, + "Pos": "[8578.25 -15402.5039 895.0814]" + }, + "462": + { + "YOffset": 0, + "Angles": "{2.2856 256.3855 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 3, + "Pos": "[13419.5859 -10447.6934 895.0775]" + }, + "463": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 2, + "Pos": "[13733.0137 -5709.436 895.4944]" + }, + "464": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 16, + "Pos": "[13733.0137 -924.0312 895.4944]" + }, + "465": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 19, + "Pos": "[13733 -343.6708 895.4944]" + }, + "466": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 19, + "Pos": "[13733 3666.4851 895.4944]" + }, + "467": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 3, + "Pos": "[13733 3246.4187 895.4944]" + }, + "468": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 17, + "Pos": "[-3785.7063 15349.9863 2067.4944]" + }, + "469": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 18, + "Pos": "[8438.001 15350.0137 893.7444]" + }, + "470": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 2, + "Pos": "[-11491.1934 7990.0283 2067.4944]" + }, + "471": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 19, + "Pos": "[-11361 -1822.3278 2068.4944]" + }, + "472": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 19, + "Pos": "[-11097.4785 -3876.4038 2060.3477]" + }, + "473": + { + "YOffset": 0, + "Angles": "{359.212 176.3652 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 3, + "Pos": "[-425.9784 11700.291 2066.4983]" + }, + "474": + { + "YOffset": 0, + "Angles": "{360 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 2, + "Pos": "[-756.7137 -9609.0938 1751.1418]" + }, + "475": + { + "YOffset": 0, + "Angles": "{356.5312 220.8987 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 4, + "Pos": "[-12169.833 11810.126 476.1609]" + }, + "476": + { + "YOffset": 0, + "Angles": "{357.3911 162.7569 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 2, + "Pos": "[2145.6309 13157.9629 856.1624]" + }, + "477": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 3, + "Pos": "[-5079.6895 13610.4941 577.8046]" + }, + "478": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 3, + "Pos": "[1112.6912 2434.6792 885.5778]" + }, + "479": + { + "YOffset": 0, + "Angles": "{360 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 4, + "Pos": "[-2887.6858 13875.3047 832.897]" + }, + "480": + { + "YOffset": 0, + "Angles": "{2.7541 381.234 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 3, + "Pos": "[-10410.6797 13192.3438 490.8263]" + }, + "481": + { + "YOffset": 0, + "Angles": "{1.541 442.4896 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 2, + "Pos": "[-14542.332 7412.4023 487.7228]" + }, + "482": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 16, + "Pos": "[-14661.2061 -1399.2472 484.4944]" + }, + "483": + { + "YOffset": 0, + "Angles": "{2.1125 373.6378 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 2, + "Pos": "[-5167.3018 11663.0625 2071.9402]" + }, + "484": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 3, + "Pos": "[-5320.8774 -15241.0137 133.7444]" + }, + "485": + { + "YOffset": 0, + "Angles": "{356.499 316.3679 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 2, + "Pos": "[-11843.4619 -13362.1895 133.0744]" + }, + "486": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 4, + "Pos": "[2680.1323 -15240.9863 895.4944]" + }, + "487": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 2, + "Pos": "[-1932.0277 3191.0176 -316.814]" + }, + "488": + { + "YOffset": 0, + "Angles": "{358.8705 355.0752 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 3, + "Pos": "[-7261.6724 -14275.6396 -641.7128]" + }, + "489": + { + "YOffset": 0, + "Angles": "{356.8787 297.9788 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.3892, + "SignType": 2, + "Pos": "[-13153.248 -10807.0264 -646.6889]" + }, + "490": + { + "YOffset": 0, + "Angles": "{360 449.2626 0}", + "Class": "gmod_track_signs", + "ZOffset": -20, + "SignType": 16, + "Pos": "[12541.2617 3737.2297 893.9755]" + }, + "491": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 19, + "Pos": "[12541.0137 -961.7728 895.4944]" + }, + "492": + { + "YOffset": 0, + "Angles": "{0 171.0319 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 2, + "Pos": "[-123.8731 -14884.25 -639.5056]" + }, + "493": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 2, + "Pos": "[-108.4565 -14592.2109 -639.5056]" + }, + "494": + { + "YOffset": 0, + "Angles": "{0 180.02 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 14, + "Pos": "[2911.7607 -14964.3496 -639.5056]" + }, + "495": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 15, + "Pos": "[8768.082 -14963.793 -1151.5056]" + }, + "496": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 9, + "Pos": "[10899.3223 -14964.0137 -1151.5056]" + }, + "497": + { + "YOffset": 0, + "Angles": "{1.8163 260.6896 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 4, + "Pos": "[15905.8477 -11996.543 -1151.5044]" + }, + "498": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 14, + "Pos": "[15997.0137 -10021.7646 -1151.5056]" + }, + "499": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 15, + "Pos": "[15996.9863 2984.6353 -2474.5056]" + }, + "500": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 19, + "Pos": "[5794.4785 14649.207 -2474.3757]" + }, + "501": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 19, + "Pos": "[6474.5195 15673.207 -2474.3757]" + }, + "502": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 19, + "Pos": "[-7317.5132 15672.793 -2474.3757]" + }, + "503": + { + "YOffset": 0, + "Angles": "{359.9999 180.4657 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 19, + "Pos": "[-7218.5249 14647.5166 -2474.499]" + }, + "504": + { + "YOffset": 0, + "Angles": "{0.4657 448.5127 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 14, + "Pos": "[-15737.4971 7989.0703 -2474.5042]" + }, + "505": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 15, + "Pos": "[-15745.0137 -406.5291 -3102.5056]" + }, + "506": + { + "YOffset": 0, + "Angles": "{0.2348 91.5137 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 3, + "Pos": "[-15738.5117 -7248.895 -3102.499]" + }, + "507": + { + "YOffset": 0, + "Angles": "{3.4295 144.4589 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 2, + "Pos": "[-12945.4512 -13591.332 -3102.5049]" + }, + "508": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 20, + "Pos": "[11638.4346 -15006 -3102.6157]" + }, + "509": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 20, + "Pos": "[11662.6416 -13996 -3102.6157]" + }, + "510": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 16, + "Pos": "[9088.335 -15006.207 -3102.6157]" + }, + "511": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 4.7904, + "SignType": 16, + "Pos": "[9108.6924 -13997.207 -3102.6157]" + }, + "512": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 34.7305, + "SignType": 2, + "Pos": "[9213.1445 -15006.207 -3102.6157]" + }, + "513": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.7844, + "SignType": 2, + "Pos": "[9353.8076 -13997.207 -3102.6157]" + }, + "514": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.7844, + "SignType": 4, + "Pos": "[70.318 -13998.0137 -3102.5056]" + }, + "515": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.7844, + "SignType": 18, + "Pos": "[-15232.0137 -112.7236 -3102.5056]" + }, + "516": + { + "YOffset": 0, + "Angles": "{359.3085 267.4102 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.7844, + "SignType": 17, + "Pos": "[-15221.7744 7021.2202 -2474.4958]" + }, + "517": + { + "YOffset": 0, + "Angles": "{356.507 130.8968 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.7844, + "SignType": 3, + "Pos": "[13673.8496 12349.9805 -2474.5054]" + }, + "518": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.7844, + "SignType": 9, + "Pos": "[15486.9863 4372.8574 -2474.5056]" + }, + "519": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.7844, + "SignType": 18, + "Pos": "[15486.9863 3057.7727 -2474.5056]" + }, + "520": + { + "YOffset": 0, + "Angles": "{358.6614 443.9459 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.7844, + "SignType": 17, + "Pos": "[15443.6533 -10655.9531 -1151.5038]" + }, + "521": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.7844, + "SignType": 18, + "Pos": "[9878.8096 -13955.5859 -1151.5056]" + }, + "522": + { + "YOffset": 0, + "Angles": "{0 360.02 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.7844, + "SignType": 17, + "Pos": "[2602.8052 -13956.0566 -639.5056]" + }, + "523": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.7844, + "SignType": 2, + "Pos": "[15486.9863 5679.7202 -2474.5056]" + }, + "524": + { + "YOffset": 0, + "Angles": "{0 188.9682 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.7844, + "SignType": 2, + "Pos": "[-1422.5074 5880.3232 -1529.5056]" + }, + "525": + { + "YOffset": 0, + "Angles": "{0.6181 183.5496 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.7844, + "SignType": 15, + "Pos": "[11480.1055 5972.8076 -2041.495]" + }, + "526": + { + "YOffset": 0, + "Angles": "{359.9999 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.7844, + "SignType": 14, + "Pos": "[6011.4199 5961.7939 -1529.4816]" + }, + "527": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.7844, + "SignType": 14, + "Pos": "[5999.8999 6225.564 -1529.5056]" + }, + "528": + { + "YOffset": 0, + "Angles": "{0.6103 183.5487 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.7844, + "SignType": 15, + "Pos": "[11426.7617 6233.9697 -2044.6659]" + }, + "529": + { + "YOffset": 0, + "Angles": "{359.6935 362.0412 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.7844, + "SignType": 18, + "Pos": "[11330.6738 6229.7349 -2043.6494]" + }, + "530": + { + "YOffset": 0, + "Angles": "{359.3819 363.5276 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.7844, + "SignType": 18, + "Pos": "[11447.7461 5970.8057 -2041.4948]" + }, + "531": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.7844, + "SignType": 17, + "Pos": "[5480.3477 12104.793 -1529.5056]" + }, + "532": + { + "YOffset": 0, + "Angles": "{1.2008 354.8742 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.7844, + "SignType": 18, + "Pos": "[11563.7695 12088.5752 -2041.4886]" + }, + "533": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.7844, + "SignType": 14, + "Pos": "[5718.439 11841.0938 -1529.5056]" + }, + "534": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 7.7844, + "SignType": 1, + "Pos": "[1961.9958 12105.207 -1529.5056]" + }, + "535": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": -17.9641, + "SignType": 19, + "Pos": "[2343.178 12105.207 -1529.5056]" + }, + "536": + { + "YOffset": 0, + "Angles": "{0.9228 356.4666 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.988, + "SignType": 18, + "Pos": "[11453.6953 11831.3926 -2044.9406]" + }, + "537": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.988, + "SignType": 17, + "Pos": "[5176.7651 11841.0938 -1529.5056]" + }, + "538": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.988, + "SignType": 14, + "Pos": "[5048.4102 12104.793 -1529.5056]" + }, + "539": + { + "YOffset": 0, + "Angles": "{358.7993 174.8529 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.988, + "SignType": 15, + "Pos": "[11666.877 12079.3066 -2041.5004]" + }, + "540": + { + "YOffset": 0, + "Angles": "{358.7908 174.8507 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.988, + "SignType": 15, + "Pos": "[11546.8379 11825.0986 -2045.8962]" + }, + "541": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 5.988, + "SignType": 2, + "Pos": "[2139.7346 11841.6074 -1530.0657]" + }, + "542": + { + "YOffset": 0, + "Angles": "{1.8259 353.8759 0}", + "Class": "gmod_track_signs", + "ZOffset": 6.5868, + "SignType": 8, + "Pos": "[-3895.0444 12603.6221 -1552.4692]" + }, + "543": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 6.5868, + "SignType": 8, + "Pos": "[-3889.4255 12371.207 -1530.5056]" + }, + "544": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 6.5868, + "SignType": 8, + "Pos": "[-3883.0698 12106.207 -1530.5056]" + }, + "545": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 6.5868, + "SignType": 8, + "Pos": "[-3883.0632 11841.793 -1530.5056]" + }, + "546": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 6.5868, + "SignType": 8, + "Pos": "[-3885.7246 11577.793 -1530.5056]" + }, + "547": + { + "YOffset": 0, + "Angles": "{3.5757 367.9789 0}", + "Class": "gmod_track_signs", + "ZOffset": 6.5868, + "SignType": 8, + "Pos": "[-3864.3557 11307.9766 -1531.4799]" + }, + "548": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 12.5749, + "SignType": 19, + "Pos": "[14336 -2696.0527 -639.4056]" + }, + "549": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 12.5749, + "SignType": 19, + "Pos": "[5.9671 15744.0137 -639.5057]" + }, + "550": + { + "YOffset": 0, + "Angles": "{0 180 0}", + "Class": "gmod_track_signs", + "ZOffset": 12.5749, + "SignType": 19, + "Pos": "[-2317.6575 -14591.793 -639.5056]" + }, + "551": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 12.5749, + "SignType": 19, + "Pos": "[-2374.1741 -14328.5059 -639.5056]" + }, + "552": + { + "YOffset": 0, + "Angles": "{0.614 182.0651 0}", + "Class": "gmod_track_signs", + "ZOffset": 12.5749, + "SignType": 19, + "Pos": "[11544.0557 -14585.9443 384.7808]" + }, + "553": + { + "YOffset": 0, + "Angles": "{0 270 0}", + "Class": "gmod_track_signs", + "ZOffset": 12.5749, + "SignType": 19, + "Pos": "[-3829.2061 8507.9883 384.4944]" + }, + "554": + { + "YOffset": 0, + "Angles": "{359.3852 177.492 0}", + "Class": "gmod_track_signs", + "ZOffset": 12.5749, + "SignType": 19, + "Pos": "[9555.832 11890.9961 383.9369]" + }, + "555": + { + "YOffset": 0, + "Angles": "{0 90 0}", + "Class": "gmod_track_signs", + "ZOffset": 12.5749, + "SignType": 19, + "Pos": "[12554.207 8072.8271 383.9193]" + }, + "556": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 12.5749, + "SignType": 19, + "Pos": "[5598.7905 3701.9871 383.4944]" + }, + "557": + { + "YOffset": 0, + "Angles": "{0 360 0}", + "Class": "gmod_track_signs", + "ZOffset": 12.5749, + "SignType": 19, + "Pos": "[-3882.1636 3701.9871 -369.5056]" + }, + "558": + { + "YOffset": 0, + "Angles": "{0.0003 360.5957 0}", + "Class": "gmod_track_signs", + "ZOffset": 12.5749, + "SignType": 19, + "Pos": "[-10672.0713 3701.9541 133.4192]" + }, + "559": + { + "YOffset": 0, + "Angles": "{3.3045 149.5849 0}", + "Class": "gmod_track_signs", + "ZOffset": 12.5749, + "SignType": 19, + "Pos": "[-11371.3193 -14652.1836 133.076]" + }, + "560": + { + "YOffset": 0, + "Angles": "{3.3743 212.9422 0}", + "Class": "gmod_track_signs", + "ZOffset": 12.5749, + "SignType": 19, + "Pos": "[10773.9639 -14447.4482 895.0755]" + }, + "Version": 1 +} \ No newline at end of file diff --git a/lua/metrostroi_data/track_gm_metro_crossline_c4.lua b/lua/metrostroi_data/track_gm_metro_crossline_c4.lua new file mode 100644 index 0000000..1532722 --- /dev/null +++ b/lua/metrostroi_data/track_gm_metro_crossline_c4.lua @@ -0,0 +1,2679 @@ + +[ + + [ + "[-1096.6074 -8376.4287 -11889.499]", + "[-1029.2598 -8300.9541 -11889.5615]", + "[-719.4922 -7892.1626 -11889.5889]", + "[-442.0692 -7460.3481 -11889.5996]", + "[-139.6663 -7042.0884 -11889.6768]", + "[194.9994 -6649.8872 -11889.6387]", + "[553.7519 -6279.3921 -11889.6338]", + "[921.8335 -5920.5068 -11889.5361]", + "[1291.8401 -5563.2876 -11889.4727]", + "[1661.0477 -5207.6382 -11889.3369]", + "[2036.4531 -4844.3442 -11889.583]", + "[2411.6409 -4482.6802 -11889.4434]", + "[2786.2896 -4121.9272 -11889.46]", + "[3159.7939 -3760.6028 -11889.4639]", + "[3532.5203 -3401.2236 -11889.3818]", + "[3902.6375 -3043.4844 -11889.4385]", + "[4281.7749 -2677.8044 -11889.5107]", + "[4658.5176 -2313.4211 -11889.46]", + "[5032.1685 -1951.6207 -11889.4053]", + "[5403.8379 -1593.7009 -11889.4736]", + "[5783.1982 -1227.0143 -11889.5254]", + "[6156.4351 -867.1202 -11889.2607]", + "[6537.1025 -499.2715 -11889.2842]", + "[6913.0356 -136.9785 -11889.249]", + "[7282.8604 220.4503 -11889.3086]", + "[7659.8682 585.9918 -11889.2363]", + "[8032.4678 944.4391 -11889.2363]", + "[8410.1318 1309.1621 -11884.7559]", + "[8779.5498 1665.0957 -11880.1123]", + "[9150.4404 2023.3118 -11871.1338]", + "[9524.168 2384.2427 -11862.0078]", + "[9898.6992 2745.989 -11848.3154]", + "[10273.3076 3108.2769 -11834.1895]", + "[10645.8135 3468.054 -11816.2773]", + "[11016.8389 3825.4543 -11797.8086]", + "[11397.4805 4193.3755 -11774.6973]", + "[11772.9697 4556.1465 -11751.1113]", + "[12142.3213 4912.8115 -11724.1699]", + "[12516.0771 5273.7944 -11696.1318]", + "[12891.7314 5636.7017 -11664.041]", + "[13266.2461 6000.9707 -11631.3223]", + "[13614.4736 6379.9429 -11600.9248]", + "[13936.0928 6791.7666 -11569.6318]", + "[14216.1348 7232.8291 -11538.6924]", + "[14438.5361 7698.7153 -11508.8486]", + "[14590.7246 8190.7617 -11481.083]", + "[14661.1133 8701.0195 -11455.8906]", + "[14665.1592 9212.8291 -11429.3184]", + "[14666.376 9728.374 -11402.0518]", + "[14666.7402 10239.7725 -11376.5244]", + "[14667.6348 10752.04 -11359.9473]", + "[14667.7354 11271.7188 -11352.0361]", + "[14663.5918 11792.5146 -11351.3926]", + "[14625.9033 12308.1699 -11350.9854]", + "[14545.666 12824.373 -11352.2373]", + "[14411.4863 13334.7178 -11352.1064]", + "[14219.4805 13811.0303 -11351.626]", + "[13958.999 14256.6279 -11351.4824]", + "[13627.9834 14653.6768 -11351.2295]", + "[13241.8047 15005.9756 -11351.8721]", + "[12826.4512 15331.3887 -11352.0283]", + "[12393.2363 15606.9375 -11351.9707]", + "[11928.582 15833.9756 -11351.4707]", + "[11433.2705 15994.9033 -11351.6016]", + "[10915.8193 16074.5928 -11351.4619]", + "[10389.6426 16080.9932 -11351.5635]", + "[9875.2158 16080.9258 -11351.5166]", + "[9351.7646 16081.1045 -11351.5508]", + "[8818.8389 16080.207 -11351.5537]", + "[8299.3291 16080.3857 -11351.5166]", + "[7770.8262 16080.4424 -11351.498]", + "[7256.9673 16080.4668 -11351.4883]", + "[6734.5835 16080.4814 -11351.4844]", + "[6203.9365 16080.6924 -11351.4219]", + "[5688.9302 16081.4766 -11351.4053]", + "[5166.21 16080.2793 -11351.4971]", + "[4635.5249 16081.2529 -11351.4541]", + "[4122.2339 16081.1484 -11351.4229]", + "[3601.5227 16081.1357 -11351.4033]", + "[3073.0488 16081.1387 -11351.3926]", + "[2537.2075 16080.9805 -11351.2461]", + "[1998.9559 16080.0928 -11343.3545]", + "[1486.5038 16080.665 -11326.5977]", + "[950.9434 16080.8604 -11299.9287]", + "[419.6567 16080.5771 -11272.0576]", + "[-107.7735 16081.2686 -11244.4609]", + "[-631.209 16080.3301 -11217.0156]", + "[-1150.8995 16081.0771 -11189.7539]", + "[-1666.5239 16081.0996 -11162.7158]", + "[-2178.2473 16081.0537 -11135.8906]", + "[-2711.0867 16081.0361 -11107.9629]", + "[-3242.0066 16081.0234 -11085.999]", + "[-3771.8267 16081.1289 -11071.8682]", + "[-4292.9175 16080.625 -11068.417]", + "[-4823.5791 16080.5723 -11063.7412]", + "[-5359.729 16080.5586 -11058.96]", + "[-5876.7505 16080.624 -11054.5039]", + "[-6401.1064 16077.752 -11051.4346]", + "[-6925.0986 16047.1895 -11052.6328]", + "[-7450.7554 15973.7109 -11052.1191]", + "[-7971.605 15844.1182 -11052.3379]", + "[-8450.1631 15661.0215 -11052.3535]", + "[-8900.1348 15409.9043 -11052.1006]", + "[-9303.2158 15088.2217 -11051.4736]", + "[-9657.4795 14707.7168 -11052.5391]", + "[-9982.8809 14299.2529 -11051.4297]", + "[-10273.3369 13861.75 -11052.3926]", + "[-10511.8252 13388.5723 -11052.6855]", + "[-10682.165 12885.7734 -11052.4766]", + "[-10769.9668 12360.5049 -11051.751]", + "[-10778.0127 11824.7031 -11050.874]", + "[-10778.2627 11311.0557 -11050.8076]", + "[-10777.8213 10790.8721 -11050.8164]", + "[-10778.415 10263.5771 -11051.1064]", + "[-10777.6709 9729.623 -11051.167]", + "[-10777.4111 9190.126 -11051.2813]", + "[-10777.7109 8674.8818 -11051.2324]", + "[-10788.0371 7986.4717 -11064.7578]", + "[-10786.6719 7472.7407 -11064.7637]", + "[-10784.6719 6959.2954 -11064.7529]", + "[-10785.3545 6446.7212 -11064.9678]" + ], + + [ + "[-1301.0675 -822.9005 -14471.2686]", + "[-1021.6826 -391.4329 -14471.2568]", + "[-725.9218 34.8555 -14471.2588]", + "[-400.6446 433.0515 -14471.3008]", + "[-44.915 810.4982 -14471.1699]", + "[322.0415 1170.218 -14471.1475]", + "[694.6635 1530.0837 -14471.0762]", + "[1065.2837 1887.1775 -14471.0166]", + "[1435.3472 2244.9009 -14471.2734]", + "[1807.1578 2603.8567 -14471.1318]", + "[2182.0835 2966.3303 -14471.0615]", + "[2552.7441 3323.2998 -14471.1191]", + "[2925.2729 3683.332 -14471.1172]", + "[3299.6252 4045.561 -14471.1201]", + "[3676.4968 4409.2441 -14471.0674]", + "[4053.7795 4773.2539 -14471.0947]", + "[4422.1655 5129.54 -14471.0801]", + "[4791.2124 5485.8037 -14471.1211]", + "[5160.2148 5842.2144 -14471.0332]", + "[5529.3267 6197.6558 -14471.1162]", + "[5906.5151 6563.311 -14471.1279]", + "[6283.5366 6926.0522 -14471.1309]", + "[6657.9629 7287.7354 -14471.1387]", + "[7030.1689 7648.0381 -14471.1172]", + "[7400.5015 8006.0566 -14471.1318]", + "[7780.0674 8371.4209 -14471.1299]", + "[8156.4014 8734.8213 -14471.1172]", + "[8528.7666 9095.6074 -14471.1152]", + "[8837.5127 9393.2695 -14471.0205]" + ], + + [ + "[8592.4248 9523.374 -14471.0205]", + "[8516.7344 9450.7559 -14471.0215]", + "[8148.042 9093.9004 -14471.0898]", + "[7774.9541 8734.5547 -14471.0391]", + "[7403.061 8375.7529 -14471.0977]", + "[7034.4248 8018.3809 -14471.041]", + "[6661.5791 7658.9233 -14471.0615]", + "[6290.6807 7300.749 -14471.043]", + "[5921.7002 6945.0464 -14471.0947]", + "[5552.6787 6587.3569 -14471.0449]", + "[5180.2192 6228.7358 -14471.0664]", + "[4812.0034 5872.9287 -14471.0518]", + "[4442.0552 5516.2188 -14471.0732]", + "[4071.7275 5158.3193 -14471.0488]", + "[3700.8965 4799.6558 -14471.0176]", + "[3330.261 4441.1987 -14471.0527]", + "[2959.4207 4083.9268 -14471.1299]", + "[2590.4021 3727.5632 -14471.0586]", + "[2216.0178 3366.0837 -14471.1543]", + "[1844.9911 3006.8352 -14471.0488]", + "[1468.342 2644.7974 -14471.1152]", + "[1098.7977 2287.1895 -14471.248]", + "[727.6743 1927.9264 -14471.1377]", + "[355.6832 1569.4531 -14471.1084]", + "[-18.4495 1209.657 -14471.2109]", + "[-398.3868 857.1781 -14471.1885]", + "[-797.5797 524.4246 -14471.2305]", + "[-1220.7805 225.0996 -14471.3369]", + "[-1663.9082 -42.981 -14471.2764]", + "[-1885.85 -191.3851 -14471.2764]" + ], + + [ + "[-1374.9716 -7361.1548 -11902.6797]", + "[-1229.1376 -7259.2256 -11902.6797]", + "[-773.1816 -7006.2974 -11902.3945]", + "[-335.9274 -6715.9038 -11902.4707]", + "[62.5817 -6390.4316 -11902.7412]", + "[445.9476 -6034.1382 -11902.541]", + "[817.4315 -5672.0625 -11902.6182]", + "[1192.9025 -5305.8784 -11902.043]", + "[1567.8807 -4943.1392 -11902.5977]", + "[1942.5303 -4583.979 -11902.6992]", + "[2314.0808 -4224.0947 -11902.7217]", + "[2684.0027 -3864.1533 -11902.585]", + "[3054.7217 -3506.3901 -11902.7236]", + "[3425.9871 -3150.6135 -11902.6885]", + "[3794.5144 -2793.4685 -11902.5967]", + "[4163.0044 -2437.6538 -11902.665]", + "[4541.0952 -2072.1199 -11902.7305]", + "[4918.6733 -1708.0316 -11902.6816]", + "[5295.2275 -1344.8105 -11902.5654]", + "[5669.9072 -981.1694 -11902.7109]", + "[6044.499 -619.9952 -11902.168]", + "[6418.1133 -260.515 -11902.4912]", + "[6789.4683 99.0142 -11902.374]", + "[7160.4561 457.3929 -11902.4971]", + "[7530.1011 815.5298 -11902.5127]", + "[7900.3809 1171.4904 -11902.5879]", + "[8279.3174 1536.2766 -11898.0127]", + "[8654.4609 1897.0938 -11892.9453]", + "[9031.335 2262.9565 -11883.3711]", + "[9403.7021 2622.5881 -11873.9307]", + "[9782.3184 2986.7551 -11859.8994]", + "[10155.9189 3346.7815 -11845.8398]", + "[10530.9492 3711.4556 -11826.8389]", + "[10900.2861 4068.5874 -11808.2314]", + "[11268.7979 4424.5781 -11785.2627]", + "[11643.4941 4785.8779 -11761.8154]", + "[12020.376 5149.6016 -11733.6357]", + "[12397.4453 5514.0176 -11705.4209]", + "[12751.8926 5895.6392 -11672.752]", + "[13067.5059 6303.2759 -11641.5449]", + "[13344.9238 6747.6372 -11610.3174]", + "[13563.292 7218.605 -11580.8271]", + "[13709.9326 7713.103 -11553.1211]", + "[13773.9219 8223.5684 -11528.6914]", + "[13759.7988 8737.2588 -11502.9785]", + "[13755.2002 9248.5635 -11475.2617]", + "[13756.75 9773.5947 -11448.458]", + "[13757.2441 10288.041 -11432.3096]", + "[13758.1689 10813.9893 -11425.5615]", + "[13755.957 11330.6152 -11426.4395]", + "[13720.0166 11854.4395 -11427.4082]", + "[13636.8779 12363.7422 -11427.4902]", + "[13501.9922 12862.3145 -11427.3623]", + "[13303.0391 13347.3008 -11427.5605]", + "[13033.5801 13795.1221 -11427.3887]", + "[12694.2803 14188.7461 -11427.2559]", + "[12305.9336 14527.8711 -11427.6016]", + "[11887.9365 14849.9365 -11427.458]", + "[11443.749 15131.6563 -11427.4893]", + "[10970.5098 15357.5322 -11427.4531]", + "[10472.2734 15514.1582 -11427.4092]", + "[9957.5215 15585.1328 -11427.418]", + "[9441.5127 15577.3398 -11422.2256]", + "[8914.5293 15570.7783 -11411.4521]", + "[8391.9053 15570.4961 -11402.083]", + "[7874.9985 15568.8652 -11393.0547]", + "[7348.8027 15570.5459 -11383.7021]", + "[6828.793 15569.0859 -11374.6387]", + "[6315.415 15570.1855 -11368.8379]", + "[5790.7651 15571.3213 -11364.8047]", + "[5265.7725 15570.5791 -11363.8174]", + "[4751.9937 15570.1016 -11364.4717]", + "[4231.7568 15570.8164 -11364.5391]", + "[3704.3679 15570.2109 -11364.5322]", + "[3185.6091 15570.543 -11364.5713]", + "[2659.708 15570.5703 -11364.5654]", + "[2144.6448 15570.123 -11358.9531]", + "[1629.2306 15569.6719 -11342.7725]", + "[1106.1035 15570.084 -11316.6729]", + "[584.8401 15570.333 -11287.8125]", + "[69.9473 15570.2852 -11260.7432]", + "[-448.5496 15569.4512 -11233.4561]", + "[-963.8104 15570.293 -11206.5215]", + "[-1476.5673 15569.6514 -11179.6582]", + "[-2001.6868 15569.7881 -11152.1367]", + "[-2525.0447 15569.8418 -11124.7021]", + "[-3049.3806 15569.3379 -11099.1299]", + "[-3564.2976 15570.4004 -11085.1191]", + "[-4076.7048 15570.1992 -11079.8936]", + "[-4592.1128 15569.5107 -11077.0303]", + "[-5111.7432 15569.5068 -11072.1475]", + "[-5625.4854 15569.4697 -11067.9121]", + "[-6148.4331 15570.1465 -11063.2021]", + "[-6665.2041 15546.8418 -11063.8711]", + "[-7173.9917 15477.3262 -11064.5293]", + "[-7685.9897 15354.5205 -11064.75]", + "[-8177.2686 15171.377 -11064.6045]", + "[-8635.0381 14921.6221 -11064.2646]", + "[-9043.0811 14602.9482 -11064.3477]", + "[-9391.0488 14225.8809 -11064.2998]", + "[-9717.3916 13819.8145 -11064.5371]", + "[-10010.043 13383.1328 -11064.373]", + "[-10251.5313 12919.7295 -11064.585]", + "[-10426.9365 12432.9902 -11064.6553]", + "[-10525.9375 11923.3643 -11064.4258]", + "[-10535.2158 11403.377 -11064.3184]", + "[-10523.6816 10887.7285 -11064.7031]", + "[-10523.3613 10372.9121 -11064.6543]", + "[-10521.665 9857.8447 -11064.5996]", + "[-10523.5342 9342.7725 -11064.6045]", + "[-10522.4609 8829.9336 -11064.583]", + "[-10523.3252 8645.9307 -11064.623]", + "[-10520.3936 7978.2378 -11064.9404]", + "[-10520.7324 7463.4604 -11064.9805]", + "[-10520.0146 6950.3149 -11064.9658]", + "[-10518.8457 6428.3921 -11065.0742]" + ], + + [ + "[-4753.7988 -15202.8506 -13558.3535]", + "[-4855.9429 -15192.8174 -13558.2734]", + "[-5358.6099 -15093.4785 -13558.2305]", + "[-5861.7285 -14975.9707 -13558.5996]", + "[-6367.5361 -14869.0117 -13558.3115]", + "[-6871.7178 -14763.7119 -13558.6602]", + "[-7376.3931 -14653.8516 -13558.6289]", + "[-7880.7422 -14545.9766 -13558.5049]", + "[-8160.5547 -14499.001 -13558.3779]" + ], + + [ + "[1944.7765 -10077.5176 -12514.3955]", + "[2044.8452 -10070.4531 -12514.376]", + "[2551.4492 -9982.1318 -12514.5752]", + "[3052.0659 -9858.8516 -12514.502]", + "[3558.6885 -9763.1895 -12514.5889]", + "[4073.7231 -9726.4287 -12514.4883]", + "[4586.1787 -9733.8428 -12514.1475]", + "[5104.6689 -9738.9063 -12514.4834]", + "[5620.7085 -9737.3965 -12514.4004]", + "[6136.2026 -9738.4834 -12514.4746]", + "[6653.9272 -9738.0117 -12514.0596]", + "[7170.2329 -9734.9941 -12514.4502]", + "[7679.4673 -9681.8438 -12514.2285]", + "[8181.2993 -9578.1475 -12514.5352]", + "[8682.1855 -9459.5215 -12514.5752]", + "[9025.2314 -9398.6973 -12514.4824]" + ], + + [ + "[-15536.9844 -6926.3198 -9837.0508]", + "[-15527.6826 -7026.5249 -9837.293]", + "[-15431.0273 -7531.2861 -9836.9658]", + "[-15306.4668 -8029.7339 -9836.7832]", + "[-15195.6016 -8532.7959 -9836.8672]", + "[-15083.4746 -9033.8164 -9836.8369]", + "[-14972.5156 -9535.3975 -9837.0879]", + "[-14870.3027 -10037.667 -9837.3408]", + "[-14866.1689 -10066.0703 -9837.1895]" + ], + + [ + "[7752.8647 9230.459 -14474.2275]", + "[7679.8511 9161.083 -14474.0732]", + "[7307.1348 8801.1445 -14474.0615]", + "[6933.9102 8440.7666 -14474.082]", + "[6556.4722 8076.3105 -14474.0723]", + "[6185.9346 7717.5059 -14474.1787]", + "[5812.2603 7356.8184 -14474.1455]", + "[5436.9614 6995.3062 -14473.8057]", + "[5067.9063 6638.5938 -14474.1299]", + "[4696.7612 6280.3013 -14474.127]", + "[4326.2207 5922.5425 -14474.1172]", + "[3944.6267 5554.1533 -14474.1064]", + "[3565.5571 5187.98 -14474.1221]", + "[3196.8188 4830.4922 -14474.1318]", + "[2827.1201 4474.8779 -14474.2041]", + "[2458.2856 4119.7598 -14474.0771]", + "[2077.9758 3750.908 -14474.2041]", + "[1697.2311 3383.782 -14474.1416]", + "[1317.5023 3016.8867 -14474.1328]", + "[938.2512 2650.7253 -14474.1328]", + "[558.6698 2286.1797 -14474.1445]", + "[181.413 1919.5269 -14474.2949]", + "[-199.0461 1553.9447 -14474.1543]", + "[-580.1202 1185.9521 -14474.4727]", + "[-948.2872 828.4092 -14474.291]", + "[-1319.9756 469.142 -14474.5078]", + "[-1699.3237 105.5238 -14474.2324]", + "[-2071.7026 -255.1464 -14473.791]", + "[-2446.4856 -616.7551 -14474.0244]", + "[-2828.1626 -984.2014 -14474.8467]", + "[-3204.3784 -1349.9519 -14474.4463]", + "[-3585.5854 -1716.1904 -14474.9482]", + "[-3965.3811 -2083.042 -14474.8379]", + "[-4344.4292 -2449.2959 -14474.7227]", + "[-4722.7119 -2815.551 -14474.9004]", + "[-5101.0161 -3180.8259 -14474.832]", + "[-5479.3013 -3545.2451 -14474.9707]", + "[-5856.1401 -3910.1687 -14474.6426]", + "[-6233.231 -4273.8892 -14474.8877]", + "[-6609.6909 -4637.2275 -14474.7305]", + "[-6985.5703 -5000.0254 -14474.9326]", + "[-7360.791 -5362.2817 -14474.8203]", + "[-7735.2715 -5724.0723 -14474.6309]", + "[-8109.3188 -6085.3164 -14474.6875]", + "[-8482.4834 -6446.5996 -14474.8486]", + "[-8855.8105 -6806.9268 -14475.2949]", + "[-9228.8467 -7166.5952 -14475.1338]", + "[-9600.6934 -7526.7383 -14475.2139]", + "[-9972.1621 -7886.3218 -14475.2266]", + "[-10326.3652 -8261.1035 -14475.1182]", + "[-10644.71 -8665.6211 -14475.1016]", + "[-10919.1221 -9099.9424 -14475.3711]", + "[-11153.8828 -9579.7383 -14474.7422]", + "[-11316.4268 -10087.2842 -14475.2705]", + "[-11391.791 -10613.0488 -14474.8945]", + "[-11382.1826 -11141.6475 -14474.707]", + "[-11377.2949 -11666.0283 -14475.2334]", + "[-11373.8838 -12189.3428 -14475.1172]", + "[-11338.1777 -12710.1016 -14474.8281]", + "[-11257.8818 -13224.5684 -14474.9004]", + "[-11119.959 -13725.2402 -14474.4434]", + "[-10921.3867 -14203.291 -14475.3955]", + "[-10653.915 -14644.8447 -14475.0537]", + "[-10314.8984 -15032.2197 -14474.7354]", + "[-9915.0918 -15352.7188 -14474.8291]", + "[-9450.4453 -15609.4238 -14474.9297]", + "[-8955.3662 -15791.9688 -14474.7637]", + "[-8444.3789 -15911.835 -14475.2383]", + "[-7926.3091 -15979.5244 -14474.9268]", + "[-7406.3755 -16006.126 -14475.1777]", + "[-6887.2393 -16000.7861 -14475.2617]", + "[-6369.5288 -15997.9678 -14475.2012]", + "[-5852.7441 -15996.8984 -14475.1699]", + "[-5336.6602 -15997.6143 -14475.1699]", + "[-4821.2832 -15998.2119 -14475.0693]", + "[-4306.606 -15997.4482 -14475.1865]", + "[-3792.6038 -15997.1279 -14475.3857]", + "[-3279.3254 -15997.4707 -14475.123]", + "[-2766.7009 -15998.4502 -14475.2246]", + "[-2234.3442 -15997.8574 -14475.0576]", + "[-1722.1154 -15997.6582 -14475.2871]", + "[-1208.5048 -15997.0654 -14475.0605]", + "[-693.2826 -15996.5117 -14475.1982]", + "[-176.2735 -15998.8506 -14474.8721]", + "[344.9021 -15996.9033 -14475.167]", + "[872.8647 -15997.3564 -14475.0625]", + "[1388.6444 -15998.3857 -14475.124]", + "[1919.4612 -15997.7646 -14474.9258]", + "[2446.5425 -15998.0508 -14474.9287]", + "[2965.3972 -15996.3896 -14475.1025]", + "[3497.1821 -15997.6914 -14475.1592]", + "[4015.5549 -15997.9141 -14475.0732]", + "[4543.8979 -15996.2969 -14475.2559]", + "[5081.2188 -15998.9082 -14474.999]", + "[5600.9473 -15996.5313 -14475.209]", + "[6127.9575 -15998.3643 -14475.1484]", + "[6661.2363 -15996.8223 -14470.1025]", + "[7198.2383 -15998.8389 -14464.915]", + "[7734.7266 -15996.0146 -14454.5537]", + "[8267.7373 -15998.6494 -14444.8379]", + "[8796.4502 -15996.9902 -14435.5371]", + "[9320.6328 -15998.9512 -14425.4678]", + "[9840.2383 -15999.2139 -14417.7441]", + "[10355.3545 -15997.166 -14408.4727]", + "[10891.582 -15998.3779 -14399.4805]", + "[11422.6113 -15998.1426 -14388.7129]", + "[11946.4395 -15960.708 -14379.9014]", + "[12459.4053 -15877.2617 -14370.3242]", + "[12955.0625 -15740.3438 -14359.7578]", + "[13445.8125 -15536.0879 -14348.6338]", + "[13893.3604 -15262.1396 -14337.5781]", + "[14282.3809 -14920.8789 -14326.6787]", + "[14641.8359 -14528.9912 -14317.4141]", + "[14970.6445 -14121.4102 -14308.8613]", + "[15255.7705 -13689.8955 -14300.4326]", + "[15493.7148 -13212.6357 -14291.5986]", + "[15658.0078 -12712.4375 -14283.3145]", + "[15736.6162 -12198.6094 -14276.0352]", + "[15728.1953 -11686.2783 -14268.2861]", + "[15722.7607 -11163.4141 -14258.4727]", + "[15718.6025 -10648.1221 -14249.9219]", + "[15719.2178 -10119.7354 -14240.3018]", + "[15721.2002 -9598.9365 -14231.3643]", + "[15719.4648 -9085.8564 -14222.4219]", + "[15720.748 -8561.0059 -14213.6768]", + "[15722.0205 -8044.0679 -14204.5283]", + "[15720.0283 -7516.2598 -14195.4082]", + "[15720.958 -6996.8813 -14186.4043]", + "[15720.2178 -6467.917 -14177.0605]", + "[15719.6592 -5948.0107 -14168.1035]", + "[15719.8125 -5419.2739 -14163.1904]", + "[15721.4785 -4898.5327 -14159.1934]", + "[15722.7695 -4383.6348 -14159.25]", + "[15720.873 -3855.3447 -14159.499]", + "[15720.043 -3328.7788 -14159.5801]", + "[15720.7666 -2804.9189 -14159.8594]", + "[15721.3232 -2289.1763 -14159.9668]", + "[15720.6982 -1774.9607 -14159.9492]", + "[15721.5107 -1260.4655 -14159.6104]", + "[15721.2461 -743.3938 -14159.8545]", + "[15721.0088 -223.0152 -14160.0752]", + "[15720.7539 301.7385 -14159.8838]", + "[15721.668 821.3655 -14160.0137]", + "[15722.3682 1343.3534 -14159.8887]", + "[15720.5723 1865.3021 -14160.083]", + "[15720.5791 2380.0913 -14159.8975]", + "[15720.4238 2901.5942 -14159.623]", + "[15720.2383 3421.7585 -14159.8027]", + "[15721.9697 3934.4089 -14156.2656]", + "[15719.418 4459.1089 -14150.9111]", + "[15721.3232 4993.418 -14142.1592]", + "[15719.9883 5510.5303 -14132.3799]", + "[15721.3975 6034.1953 -14127.8232]", + "[15719.29 6564.0586 -14124.1143]", + "[15721.1855 7076.1694 -14129.2979]", + "[15719.5195 7596.1514 -14135.1572]", + "[15721.3301 8125.1621 -14140.4229]", + "[15699.6152 8661.166 -14137.8037]", + "[15661.3232 9173.5918 -14138.2939]", + "[15598.9385 9684.6787 -14138.4053]", + "[15515.999 10191.7197 -14138.376]", + "[15406.7725 10692.9932 -14138.2432]", + "[15262.8057 11211.9863 -14138.5391]", + "[15085.8271 11719.4434 -14138.5234]", + "[14874.3418 12212.5908 -14138.4385]", + "[14625.1094 12686.7744 -14138.3301]", + "[14338.7344 13138.2402 -14138.2998]", + "[14014.0137 13561.7061 -14138.5664]", + "[13653.1064 13953.1016 -14138.3623]", + "[13258.6982 14309.0488 -14138.5205]", + "[12834.8818 14627.2295 -14138.3115]", + "[12386.0107 14906.666 -14138.3545]", + "[11916.6328 15147.3447 -14138.4229]", + "[11432.0264 15352.6113 -14138.5342]", + "[10935.4922 15523.835 -14138.2266]", + "[10429.8545 15662.1758 -14138.4658]", + "[9918.3037 15772.0088 -14138.4453]", + "[9402.7393 15855.8809 -14138.4277]", + "[8884.7852 15916.5195 -14138.3525]", + "[8365.3857 15955.1699 -14138.0527]", + "[7845.6309 15975.2344 -14138.4287]", + "[7326.2246 15976.8916 -14137.7119]", + "[6808.0073 15973.6494 -14137.8887]", + "[6291.0459 15973.9648 -14138.4375]", + "[5774.7192 15973.4014 -14138.0244]", + "[5259.7983 15973.8838 -14133.042]", + "[4745.8472 15973.7646 -14127.7402]", + "[4233.5674 15973.0537 -14117.7305]", + "[3696.55 15973.9854 -14108.3408]", + "[3160.376 15973.627 -14098.9844]", + "[2624.2969 15973.5664 -14089.665]", + "[2109.877 15973.6484 -14080.2871]", + "[1584.1443 15973.8428 -14070.583]", + "[1047.144 15973.6387 -14061.6553]", + "[527.1212 15974.1797 -14052.0156]", + "[-1.6598 15972.3311 -14043.5342]", + "[-538.0715 15974.5098 -14034.0146]", + "[-1053.5635 15972.4775 -14025.1172]", + "[-1575.3357 15973.168 -14015.8867]", + "[-2103.2197 15974.3799 -14006.9297]", + "[-2636.1619 15973.0264 -13996.3428]", + "[-3174.1714 15973.6348 -13987.9082]", + "[-3687.1921 15973.7402 -13979.0859]", + "[-4204.6152 15973.5898 -13970.1133]", + "[-4726.4897 15973.5732 -13963.9795]", + "[-5253.2373 15974.0664 -13960.2627]", + "[-5785.0347 15973.9414 -13959.082]", + "[-6322.5303 15974 -13959.7734]", + "[-6864.2793 15970.1729 -13959.3008]", + "[-7375.7603 15945.373 -13959.4287]", + "[-7886.0674 15899.2402 -13959.7061]", + "[-8425.0713 15827.3672 -13959.5303]", + "[-8958.7676 15729.4512 -13959.4053]", + "[-9485.5107 15602.3984 -13959.2256]", + "[-10002.7881 15443.5283 -13958.9863]", + "[-10507.3838 15250.3457 -13959.502]", + "[-10995.8311 15021.4756 -13959.1875]", + "[-11463.2256 14753.9355 -13959.2832]", + "[-11905.5195 14448.3945 -13959.5879]", + "[-12317.1221 14104.1445 -13959.2607]", + "[-12695.0205 13724.7139 -13959.5586]", + "[-13035.3701 13312.8916 -13959.751]", + "[-13336.9609 12873.2705 -13959.6162]", + "[-13599.21 12410.4141 -13959.4463]", + "[-13823.9053 11929.5732 -13958.8086]", + "[-14011.7158 11434.2471 -13959.2891]", + "[-14167.2627 10929.0039 -13959.4219]", + "[-14291.6123 10416.1904 -13959.4961]", + "[-14388.3877 9898.2979 -13959.5439]", + "[-14460.0996 9377.1709 -13959.4619]", + "[-14509.166 8854.1738 -13959.6797]", + "[-14538.0381 8330.3652 -13959.4658]", + "[-14547.3428 7806.4639 -13959.6846]", + "[-14543.3486 7283.1553 -13959.917]", + "[-14541.9043 6760.4004 -13959.8418]", + "[-14542.4463 6238.1553 -13959.8848]", + "[-14542.3096 5716.7061 -13959.6904]", + "[-14540.3721 5196.2451 -13960.2041]", + "[-14542.4453 4676.396 -13959.957]", + "[-14540.7549 4157.0386 -13960.3447]", + "[-14542.2041 3638.1714 -13959.8994]", + "[-14540.8496 3119.7566 -13960.2939]", + "[-14542.2939 2601.8721 -13960.0332]", + "[-14541.1973 2084.436 -13959.8184]", + "[-14541.2754 1567.4969 -13960.1689]", + "[-14541.9365 1051.0488 -13960.2959]", + "[-14540.6504 535.5281 -13955.4375]", + "[-14542.9922 21.2811 -13950.5889]", + "[-14540.5576 -520.3055 -13940.5049]", + "[-14542.1328 -1058.6567 -13930.5908]", + "[-14540.6572 -1593.5688 -13915.8838]", + "[-14542.3037 -2125.9158 -13901.3076]", + "[-14540.46 -2654.4744 -13881.75]", + "[-14541.9883 -3179.2236 -13862.6279]", + "[-14541.1797 -3699.1685 -13838.6289]", + "[-14541.5273 -4214.2041 -13815.9277]", + "[-14541.8477 -4751.9683 -13792.4639]", + "[-14541.7012 -5283.8184 -13769.2451]", + "[-14541.7275 -5809.6631 -13745.9023]", + "[-14541.6621 -6329.8438 -13723.5596]", + "[-14541.3164 -6844.3584 -13701.2158]", + "[-14541.7246 -7379.8618 -13677.7129]", + "[-14541.9863 -7909.4238 -13654.8203]", + "[-14542.2109 -8433.2031 -13634.3389]", + "[-14541.2588 -8952.2197 -13617.1816]", + "[-14540.6533 -9467.2412 -13602.0322]", + "[-14542.6992 -9979.5029 -13589.459]", + "[-14540.8516 -10515.1563 -13578.4492]", + "[-14542.125 -11048.3652 -13569.627]", + "[-14536.583 -11577.4746 -13566.5645]", + "[-14485.2881 -12100.4883 -13567.7793]", + "[-14386.3281 -12613.6162 -13568.4023]", + "[-14229.2139 -13110.2197 -13568.2168]", + "[-14007.5488 -13580.0439 -13568.0674]", + "[-13713.8135 -14007.4014 -13568.1289]", + "[-13350.7246 -14375.8047 -13568.0293]", + "[-12950.4766 -14660.166 -13568.0234]", + "[-12490.0039 -14886.7266 -13568.0059]", + "[-11982.1123 -15053.5322 -13567.8701]", + "[-11459.3467 -15157.7695 -13567.9229]", + "[-10929.8096 -15213.2461 -13568.0195]", + "[-10397.2363 -15227.5078 -13567.9238]", + "[-9864.4541 -15218.373 -13568.1016]", + "[-9330.7666 -15218.3945 -13568.249]", + "[-8795.9355 -15217.9736 -13568.1035]", + "[-8259.8984 -15216.8965 -13568.168]", + "[-7747.1001 -15217.3574 -13568.0879]", + "[-7233.3345 -15217.4521 -13568.1758]", + "[-6719.7344 -15218.0156 -13562.6563]", + "[-6183.79 -15217.4482 -13557.8008]", + "[-5650.3276 -15216.9902 -13558.4766]", + "[-5118.3662 -15217.1104 -13559.2734]", + "[-4587.0713 -15217.8047 -13558.5352]", + "[-4056.4626 -15219.4141 -13558.4795]", + "[-3527.0942 -15217.3525 -13559.1055]", + "[-2999.2432 -15218.9688 -13558.2754]", + "[-2472.2612 -15216.8818 -13559.2266]", + "[-1946.1885 -15218.3164 -13558.8564]", + "[-1421.8518 -15217.4268 -13559.1162]", + "[-905.776 -15218.8047 -13559.0605]", + "[-381.856 -15217.0098 -13559.0215]", + "[145.8204 -15218.5225 -13559.2461]", + "[676.6475 -15218.2666 -13559.1318]", + "[1190.0017 -15217.248 -13559.2354]", + "[1707.202 -15217.6553 -13559.0156]", + "[2227.8508 -15217.043 -13559.2988]", + "[2751.8867 -15218.6904 -13558.9219]", + "[3279.063 -15218.1211 -13559.1963]", + "[3791.6638 -15209.2021 -13560.3135]", + "[4302.1885 -15130.0303 -13560.1094]", + "[4796.4849 -14973.8984 -13560.2568]", + "[5301.126 -14830.2207 -13560.1025]", + "[5805.3823 -14692.6758 -13560.123]", + "[6307.4966 -14553.9922 -13560.2568]", + "[6819.9204 -14480.7061 -13559.957]", + "[7337.0801 -14483.4473 -13559.8945]", + "[7852.4351 -14473.3271 -13558.543]", + "[8368.5713 -14435.8184 -13557.3496]", + "[8888.9111 -14378.4355 -13556.5479]", + "[9406.5898 -14296.0791 -13555.7891]", + "[9918.2402 -14187.5918 -13555.3633]", + "[10426.1992 -14050.7549 -13554.6211]", + "[10912.2314 -13888.1768 -13553.6387]", + "[11402.4121 -13688.7529 -13553.4199]", + "[11868.498 -13456.0674 -13552.6621]", + "[12324.4395 -13182.1758 -13552.6572]", + "[12746.1865 -12879.9668 -13552.3838]", + "[13145.0508 -12535.4365 -13552.5068]", + "[13517.5615 -12152.1748 -13552.4658]", + "[13846.54 -11747.8867 -13552.3027]", + "[14138.959 -11318.3564 -13552.2295]", + "[14392.9268 -10870.7861 -13552.7598]", + "[14619.7998 -10389.9141 -13553.3564]", + "[14806.6123 -9905.6182 -13554.1484]", + "[14965.6064 -9398.4131 -13554.7881]", + "[15089.918 -8899.2129 -13555.375]", + "[15190.0371 -8384.9521 -13555.9707]", + "[15265.8242 -7857.0376 -13557.1025]", + "[15319.6563 -7317.6489 -13557.8789]", + "[15350.2979 -6799.0996 -13558.8027]", + "[15362.7178 -6272.5811 -13559.8623]", + "[15360.0635 -5739.3813 -13557.3955]", + "[15357.6084 -5200.6538 -13551.458]", + "[15363.2617 -4657.147 -13546.9395]", + "[15405.1045 -4143.5405 -13542.3418]", + "[15492.3135 -3632.04 -13539.8291]", + "[15546.5059 -3112.8 -13547.9775]", + "[15548.7451 -2586.1296 -13552.1904]", + "[15541.2559 -2055.5637 -13545.7852]", + "[15540.6621 -1520.8274 -13539.1279]", + "[15541.5674 -984.1422 -13529.2031]", + "[15539.9395 -445.5355 -13519.2422]", + "[15541.8623 94.238 -13503.6367]", + "[15539.8955 633.8644 -13487.0215]", + "[15541.6064 1173.3601 -13474.5791]", + "[15540.9619 1712.3079 -13459.4482]", + "[15540.1846 2249.7056 -13446.583]", + "[15541.8545 2783.7222 -13431.9971]", + "[15540.7734 3313.7251 -13418.374]", + "[15540.5547 3839.5046 -13404.3848]", + "[15542.2578 4361.0684 -13390.915]", + "[15539.4922 4878.1826 -13377.3271]", + "[15541.209 5390.8682 -13363.5225]", + "[15542.0195 5931.2388 -13354.2021]", + "[15540.7754 6467.5371 -13345.0693]", + "[15541.5742 7000.2183 -13335.8877]", + "[15541.3252 7529.1782 -13326.3682]", + "[15540.2734 8054.5928 -13322.2969]", + "[15540.5605 8576.6992 -13317.4141]", + "[15541.6992 9096.2461 -13312.5039]", + "[15539.6348 9613.5049 -13308.2197]", + "[15525.5576 10127.25 -13299.4336]", + "[15455.0928 10662.9238 -13288.9434]", + "[15333.5723 11183.999 -13279.7393]", + "[15150.1436 11682.5283 -13270.9639]", + "[14898.5 12145.9277 -13263.0273]", + "[14575.7334 12558.0596 -13255.374]", + "[14199.333 12914.1484 -13248.1006]", + "[13811.0469 13288.959 -13237.6641]", + "[13432.5029 13666.5537 -13228.9395]", + "[13060.3418 14039.9004 -13218.9443]", + "[12687.3301 14399.5244 -13210.0869]", + "[12266.6279 14733.1572 -13200.2402]", + "[11822.3291 15020.3057 -13191.4756]", + "[11351.8623 15250.8281 -13183.0615]", + "[10858.6914 15412.3486 -13175.1904]", + "[10350.7715 15492.8281 -13167.6992]", + "[9816.1152 15488.6553 -13160.2842]", + "[9289.6387 15478.498 -13150.8398]", + "[8768.499 15476.2939 -13144.1182]", + "[8252.0166 15478.4736 -13140.3008]", + "[7739.3032 15478.792 -13139.1338]", + "[7204.8564 15478.9502 -13139.1113]", + "[6671.769 15479.0898 -13139.2676]", + "[6139.2524 15477.9824 -13139.1152]", + "[5607.3291 15479.1611 -13139.3125]", + "[5075.9561 15479.3115 -13139.0684]", + "[4545.7568 15478.083 -13133.8838]", + "[4017.8037 15478.5508 -13126.7334]", + "[3493.748 15478.9238 -13122.3057]", + "[2973.7012 15485.6016 -13118.7764]", + "[2456.136 15481.626 -13119.8125]", + "[1940.1393 15484.3359 -13120.2852]", + "[1425.8748 15452.1641 -13119.8418]", + "[917.6937 15371.7783 -13119.9414]", + "[413.6202 15277.0654 -13120.1045]", + "[-113.2231 15183.0996 -13119.9434]", + "[-638.803 15089.6289 -13115.9521]", + "[-1162.5496 14997.6045 -13110.7451]", + "[-1683.5869 14906.8203 -13105.9355]", + "[-2200.7542 14815.1025 -13101.4854]", + "[-2714.5762 14722.9658 -13101.4287]", + "[-3226.6499 14633.6729 -13102.3691]", + "[-3737.5608 14545.0645 -13101.9082]", + "[-4247.3481 14453.8896 -13102.3164]", + "[-4757.3623 14363.0293 -13102.3037]", + "[-5268.8252 14274.0137 -13102.1904]", + "[-5781.2974 14183.4561 -13102.1396]", + "[-6295.7568 14092.6641 -13102.1104]", + "[-6814.5059 14001.4033 -13102.4434]", + "[-7338.3467 13909.6426 -13102.084]", + "[-7845.3555 13819.2832 -13102.4287]", + "[-8359.5469 13728.7891 -13103.0107]", + "[-8879.8311 13636.0342 -13103.7637]", + "[-9406.5869 13544.6875 -13103.2451]", + "[-9910.5957 13453.8027 -13100.4873]", + "[-10428.8242 13327.5635 -13102.3379]", + "[-10927.7715 13158.7949 -13101.8125]", + "[-11410.498 12951.2334 -13102.165]", + "[-11874.5371 12707.624 -13102.0195]", + "[-12322.0898 12437.5693 -13102.498]", + "[-12741.2129 12126.7441 -13101.9912]", + "[-13139.9736 11792.8438 -13101.7188]", + "[-13509.3818 11428.1504 -13102.126]", + "[-13851.0586 11039.2061 -13101.9248]", + "[-14163.416 10628.3262 -13101.7783]", + "[-14437.6621 10192.541 -13101.9268]", + "[-14694.4219 9748.2549 -13102.1729]", + "[-14911.7471 9284.2002 -13102.3223]", + "[-15107.9844 8787.4307 -13102.166]", + "[-15272.2773 8280.5703 -13102.1494]", + "[-15393.9854 7762.3555 -13102.3252]", + "[-15477.5186 7236.394 -13101.7881]", + "[-15516.459 6705.0234 -13101.9658]", + "[-15530.4082 6171.2563 -13102.3398]", + "[-15545.8076 5657.3569 -13102.084]", + "[-15561.6631 5139.2607 -13102.1475]", + "[-15580.6084 4615.4189 -13102.2061]", + "[-15593.8867 4078.8457 -13102.2559]", + "[-15609.6709 3544.3689 -13102.0742]", + "[-15617.6299 3016.9446 -13101.9961]", + "[-15627.2373 2479.2588 -13102.1621]", + "[-15629.1396 1965.7324 -13102.0107]", + "[-15635.5322 1452.8058 -13102.2021]", + "[-15632.7295 940.3804 -13102.2266]", + "[-15634.1758 401.5858 -13102.0508]", + "[-15602.333 -135.6078 -13101.9248]", + "[-15518.542 -666.2125 -13101.9229]", + "[-15418.6191 -1192.248 -13102.1602]", + "[-15312.4971 -1715.3601 -13097.4912]", + "[-15156.1943 -2223.4915 -13091.6748]", + "[-14954.1768 -2711.5989 -13088.3291]", + "[-14696.3887 -3169.6282 -13083.5371]", + "[-14378.5273 -3583.9822 -13079.5146]", + "[-14000.5713 -3940.1255 -13075.5615]", + "[-13570.9658 -4225.3145 -13069.5303]", + "[-13104.0752 -4485.4897 -13059.4453]", + "[-12622.1006 -4701.8164 -13050.3721]", + "[-12127.4619 -4867.7622 -13041.6426]", + "[-11618.7061 -4961.4268 -13032.9043]", + "[-11105.9033 -4978.3169 -13025.2939]", + "[-10577.2256 -4904.8608 -13018.9385]", + "[-10059.2637 -4794.2012 -13009.6533]", + "[-9539.2773 -4702.269 -12999.5664]", + "[-9019.7891 -4611.877 -12984.7373]", + "[-8500.665 -4518.8452 -12969.5371]", + "[-7982.6724 -4430.2793 -12950.3838]", + "[-7467.6689 -4338.7339 -12930.1533]", + "[-6956.4531 -4248.8892 -12906.5723]", + "[-6450.0674 -4158.582 -12883.9756]", + "[-5925.3003 -4066.7715 -12860.7754]", + "[-5406.1577 -3975.1362 -12837.7256]", + "[-4891.4233 -3884.3086 -12814.9043]", + "[-4380.9185 -3794.0154 -12792.1035]", + "[-3874.3005 -3703.3479 -12769.7051]", + "[-3349.5112 -3610.4678 -12746.7744]", + "[-2827.7283 -3519.6936 -12723.2656]", + "[-2309.4756 -3426.894 -12700.6318]", + "[-1793.7799 -3335.3315 -12677.5371]", + "[-1281.0906 -3244.533 -12654.8086]", + "[-770.9093 -3154.9172 -12631.835]", + "[-262.5565 -3063.5842 -12613.4131]", + "[246.0063 -2974.5251 -12595.833]", + "[755.7522 -2884.4058 -12581.752]", + "[1267.8618 -2793.4939 -12568.6309]", + "[1782.998 -2701.7329 -12555.0068]", + "[2300.8704 -2609.3467 -12541.3398]", + "[2822.0029 -2516.2432 -12531.6885]", + "[3347.4541 -2424.0879 -12523.0254]", + "[3855.5776 -2332.1304 -12518.5283]", + "[4369.2939 -2242.2205 -12514.7197]", + "[4888.9282 -2149.6543 -12514.3262]", + "[5397.2891 -2061.9307 -12515.3203]", + "[5923.1147 -1966.9138 -12515.1113]", + "[6441.0718 -1876.7169 -12515.1191]", + "[6946.3076 -1784.8077 -12514.9785]", + "[7463.2686 -1695.3116 -12515.0781]", + "[7990.292 -1602.0807 -12514.9268]", + "[8500.2305 -1512.4888 -12515.1514]", + "[9017.8799 -1419.4827 -12515.2969]", + "[9543.8018 -1328.4519 -12513.7432]", + "[10075.2891 -1232.0299 -12515.125]", + "[10582.3145 -1144.5017 -12514.8057]", + "[11094.4883 -1092.5875 -12514.3779]", + "[11608.0928 -1085.9818 -12513.8447]", + "[12145.3984 -1138.7422 -12515.5127]", + "[12669.3096 -1258.5804 -12514.625]", + "[13165.8574 -1461.1117 -12515.0957]", + "[13617.7764 -1747.4624 -12514.9092]", + "[13969.7393 -2070.3662 -12515.1592]", + "[14297.416 -2488.7595 -12514.9082]", + "[14558.124 -2949.1301 -12514.8896]", + "[14758.5879 -3436.2971 -12515.5322]", + "[14909.7646 -3938.8735 -12514.8535]", + "[15020.1201 -4450.3413 -12515.0078]", + "[15095.3125 -4966.4448 -12515.2031]", + "[15131.8623 -5485.2954 -12514.5801]", + "[15123.4473 -6003.0249 -12515.5752]", + "[15057.0664 -6513.9272 -12515.1953]", + "[14926.0791 -7010.2485 -12514.4492]", + "[14718.043 -7478.9238 -12514.8447]", + "[14416.668 -7924.9194 -12515.4941]", + "[14079.9209 -8271.3965 -12515.1045]", + "[13650.2461 -8589.0068 -12515.1689]", + "[13180.9961 -8838.9346 -12514.8662]", + "[12688.0557 -9030.7939 -12514.9824]", + "[12181.1357 -9174.7646 -12514.9932]", + "[11666.2236 -9278.4609 -12515.0244]", + "[11147.8945 -9352.7061 -12515.2061]", + "[10627.2783 -9398.6064 -12515.1162]", + "[10105.2715 -9394.8242 -12515.0352]", + "[9585.3271 -9388.4521 -12515.334]", + "[9066.207 -9387.876 -12514.6035]", + "[8547.7188 -9388.7744 -12515.291]", + "[8029.9985 -9387.5615 -12515.4033]", + "[7512.9233 -9388.7432 -12515.1621]", + "[6996.2798 -9387.4736 -12515.457]", + "[6480.1626 -9389.0342 -12514.8857]", + "[5964.8438 -9387.6191 -12515.1396]", + "[5450.062 -9387.9639 -12515.0332]", + "[4935.8027 -9387.5801 -12515.0557]", + "[4421.9888 -9386.9209 -12515.1816]", + "[3908.7 -9388.4707 -12515.1553]", + "[3395.9238 -9387.6973 -12515.125]", + "[2883.6042 -9387.7119 -12515.1172]", + "[2346.2397 -9388.4258 -12515.1309]", + "[1809.3672 -9388.2881 -12514.9336]", + "[1273.0156 -9387.8779 -12515.0176]", + "[737.1964 -9387.6826 -12515.1377]", + "[202.0915 -9388.0898 -12513.7627]", + "[-331.4434 -9387.6035 -12514.9375]", + "[-863.5466 -9387.9023 -12514.9941]", + "[-1394.8921 -9389.0918 -12514.7764]", + "[-1925.7726 -9388.7373 -12515.6709]", + "[-2456.0063 -9386.9492 -12515.1563]", + "[-2985.7073 -9388.7178 -12515.3076]", + "[-3514.8831 -9389.0156 -12515.2881]", + "[-4043.4998 -9388.7725 -12515.249]", + "[-4571.6055 -9387.4873 -12515.4697]", + "[-5099.1201 -9389.4521 -12515.4385]", + "[-5626.1206 -9388.3281 -12515.5732]", + "[-6152.5732 -9387.874 -12515.5264]", + "[-6678.4717 -9388.752 -12515.6299]", + "[-7203.8501 -9389.623 -12515.4756]", + "[-7728.5698 -9387.9951 -12515.1006]", + "[-8252.5322 -9388.209 -12518.0107]", + "[-8776.8086 -9386.6025 -12524.1309]", + "[-9301.8613 -9386.0225 -12529.7559]", + "[-9828.8389 -9386.4248 -12541.3047]", + "[-10358.5127 -9385.3291 -12552.2314]", + "[-10892.8936 -9386.9453 -12567.6807]", + "[-11405.8398 -9375.5693 -12576.0566]", + "[-11862.2412 -9282.2451 -12582.5615]", + "[-12346.0762 -9095.9492 -12590.5225]", + "[-12799.5703 -8845.9277 -12599.3838]", + "[-13225.3271 -8550.0781 -12607.9971]", + "[-13624.5029 -8216.3574 -12617.3223]", + "[-14000.417 -7853.6074 -12626.5791]", + "[-14322.6123 -7438.3599 -12639.1904]", + "[-14519.4697 -7063.5649 -12648.083]", + "[-14698.2295 -6564.3525 -12660.0098]", + "[-14816.1396 -6046.1309 -12670.6611]", + "[-14880.7783 -5516.5518 -12681.2734]", + "[-14905.0947 -4981.7715 -12690.3662]", + "[-14895.96 -4444.1934 -12697.9336]", + "[-14896.293 -3931.9026 -12701.3018]", + "[-14893.9229 -3418.6711 -12703.0645]", + "[-14896.0547 -2905.6628 -12701.9434]", + "[-14895.5703 -2366.9829 -12695.9531]", + "[-14896.8535 -1831.1714 -12684.6611]", + "[-14893.7422 -1299.3365 -12675.335]", + "[-14894.7588 -772.3258 -12665.7666]", + "[-14893.8955 -249.7981 -12657.2373]", + "[-14894.001 268.3173 -12647.6709]", + "[-14893.8379 781.7863 -12638.9707]", + "[-14893.8672 1316.173 -12629.5381]", + "[-14892.3154 1845.1565 -12620.1309]", + "[-14893.1182 2368.9512 -12610.9082]", + "[-14893.2188 2887.8101 -12602.0459]", + "[-14894.6729 3401.8713 -12593.1504]", + "[-14893.2363 3935.3101 -12583.7803]", + "[-14893.123 4463.5054 -12574.541]", + "[-14893.5693 4986.5142 -12565.4053]", + "[-14893.5752 5504.2632 -12556.4482]", + "[-14893.3203 6017.2729 -12552.4189]", + "[-14893.1143 6549.4463 -12548.5674]", + "[-14881.5479 7078.9634 -12549.9453]", + "[-14848.3896 7605.7246 -12549.9844]", + "[-14791.5361 8129.8081 -12550.3516]", + "[-14712.9678 8650.2529 -12549.9902]", + "[-14608.4766 9164.9844 -12549.7754]", + "[-14475.5615 9671.9375 -12549.9756]", + "[-14312.8623 10169.4063 -12550.0781]", + "[-14117.3145 10655.4775 -12549.9238]", + "[-13886.042 11126.1494 -12549.835]", + "[-13617.4873 11577.3066 -12549.6475]", + "[-13310.7676 12006.1709 -12550.2148]", + "[-12963.3506 12408.25 -12549.7959]", + "[-12595.7051 12765.71 -12550.2832]", + "[-12192.418 13092.415 -12549.9727]", + "[-11757.4678 13386.3965 -12550.0957]", + "[-11293.998 13644.9805 -12549.9961]", + "[-10807.1182 13869.291 -12549.7881]", + "[-10323.4775 14050.7227 -12550.1064]", + "[-9824.6719 14201.9219 -12550.2461]", + "[-9313.6699 14324.667 -12549.9873]", + "[-8792.543 14421.1123 -12550.0176]", + "[-8262.9355 14492.0488 -12549.5596]", + "[-7752.124 14538.6162 -12549.6943]", + "[-7236.3677 14566.3828 -12549.7344]", + "[-6716.3105 14575.5977 -12549.877]", + "[-6193.272 14573.0508 -12546.4756]", + "[-5667.7236 14571.0586 -12540.9912]", + "[-5140.5 14572.5283 -12532.6543]", + "[-4612.5669 14570.8027 -12522.5107]", + "[-4084.5945 14572.4268 -12513.752]", + "[-3556.7549 14571.4736 -12504.3555]", + "[-3029.0664 14571.1494 -12495.5459]", + "[-2498.8582 14571.8203 -12486.1318]", + "[-1985.313 14571.25 -12477.3408]", + "[-1462.2484 14571.4775 -12467.9072]", + "[-930.0685 14571.2402 -12458.4697]", + "[-390.4333 14571.5498 -12449.2422]", + "[127.7111 14572.0215 -12440.3848]", + "[652.3852 14570.7559 -12431.1445]", + "[1182.9016 14572.0645 -12422.083]", + "[1719.1672 14571.3633 -12412.4473]", + "[2260.8645 14571.2402 -12403.2461]", + "[2776.9734 14572.2627 -12394.2188]", + "[3297.4771 14571.083 -12385.1172]", + "[3821.9177 14571.9512 -12375.3535]", + "[4348.9551 14571.4131 -12366.6758]", + "[4875.5063 14571.3291 -12358.4609]", + "[5401.4141 14572.6973 -12356.1846]", + "[5924.3545 14570.1982 -12349.166]", + "[6444.6328 14572.4844 -12338.9355]", + "[6961.7695 14571.7891 -12329.75]", + "[7475.626 14570.3779 -12320.7949]", + "[8015.9375 14572.5576 -12309.1025]", + "[8551.7246 14571.4561 -12294.1768]", + "[9082.1143 14572.1973 -12277.1514]", + "[9606.3467 14572.5879 -12258.0674]", + "[10124.1953 14571.6738 -12242.6709]", + "[10663.7041 14572.4004 -12228.6563]", + "[11196.4434 14571.4473 -12223.1777]", + "[11724.4209 14540.2822 -12225.832]", + "[12244.3984 14457.9014 -12225.0088]", + "[12750.1826 14320.5088 -12224.7715]", + "[13233.3799 14122.7266 -12225.7432]", + "[13678.0479 13851.1143 -12225.3428]", + "[14068.8652 13510.0684 -12225.7734]", + "[14376.1074 13128.6963 -12225.9561]", + "[14627.9893 12679.2754 -12225.9111]", + "[14809.7227 12200.0439 -12225.9717]", + "[14937.0049 11678.4072 -12226.2969]", + "[15008.3301 11148.5947 -12225.7744]", + "[15036.7852 10616.6123 -12226.0645]", + "[15030.2783 10085.1875 -12225.5205]", + "[15002.9063 9556.2979 -12225.2676]", + "[14929.498 9245.8613 -12226.5645]", + "[14745.1201 8751.041 -12226.2607]", + "[14491.9258 8291.252 -12226.7715]", + "[14196.7461 7862.4702 -12225.8643]", + "[13864.0146 7464.2661 -12226.3408]", + "[13506.0293 7091.2666 -12225.9893]", + "[13128.3721 6739.9194 -12227.8018]", + "[12759.1123 6382.2217 -12227.1816]", + "[12388.8389 6026.9956 -12225.3105]", + "[12004.6914 5653.8169 -12211.5723]", + "[11621.9121 5285.5381 -12198.707]", + "[11244.7803 4921.9492 -12178.375]", + "[10872.7656 4562.4541 -12159.8516]", + "[10487.5625 4190.7422 -12141.2852]", + "[10106.4658 3822.9478 -12122.6484]", + "[9729.8174 3457.384 -12104.4941]", + "[9355.2422 3095.0417 -12086.2568]", + "[8981.5811 2735.6995 -12068.0957]", + "[8610.0898 2378.0007 -12050.1123]", + "[8241.7959 2020.5507 -12032.3037]", + "[7858.2661 1649.2701 -12013.8457]", + "[7475.7813 1280.2142 -11995.0713]", + "[7094.6743 912.7808 -11977.0273]", + "[6716.0796 545.7496 -11958.1777]", + "[6338.106 180.3418 -11943.6016]", + "[5959.1177 -183.1582 -11930.1885]", + "[5582.085 -549.8748 -11920.3525]", + "[5201.6475 -915.4913 -11911.6934]", + "[4820.6606 -1285.3691 -11906.6992]", + "[4448.7798 -1642.7998 -11902.6006]", + "[4067.334 -2014.6777 -11902.375]", + "[3689.7214 -2376.6897 -11902.8936]", + "[3303.8435 -2750.1272 -11902.9404]", + "[2927.7222 -3113.6357 -11902.7676]", + "[2542.3389 -3482.7896 -11902.6133]", + "[2171.5364 -3842.1733 -11902.9033]", + "[1796.5836 -4205.6821 -11902.8438]", + "[1419.1952 -4570.1797 -11902.6152]", + "[1040.906 -4933.7427 -11902.792]", + "[663.3719 -5297.3262 -11903.3887]", + "[287.6692 -5662.0952 -11903.4355]", + "[-89.2654 -6024.8696 -11903.7666]", + "[-465.1132 -6388.0557 -11903.5186]", + "[-839.948 -6751.2622 -11903.6074]", + "[-1215.0536 -7113.2241 -11903.1719]", + "[-1590.6531 -7473.9595 -11902.7129]", + "[-1963.8722 -7835.5513 -11903.5469]", + "[-2334.2151 -8191.4897 -11903.918]", + "[-2714.8035 -8559.3057 -11903.0166]", + "[-3085.2905 -8915.6748 -11904.1387]", + "[-3461.3958 -9281.8262 -11903.3291]", + "[-3837.7744 -9643.3125 -11903.6035]", + "[-4212.5122 -10005.6943 -11903.501]", + "[-4587.186 -10367.0566 -11903.6035]", + "[-4960.7412 -10728.4814 -11903.5205]", + "[-5332.875 -11089.9092 -11903.502]", + "[-5706.6855 -11448.6484 -11903.1729]", + "[-6079.6416 -11807.5654 -11903.5049]", + "[-6450.3311 -12167.6963 -11903.3818]", + "[-6821.9712 -12525.335 -11903.4883]", + "[-7192.5996 -12882.8252 -11903.1797]", + "[-7561.5776 -13240.9033 -11903.6836]", + "[-7931.1274 -13597.5986 -11903.1914]", + "[-8300.5439 -13953.6797 -11903.3779]", + "[-8669.4512 -14309.0967 -11903.2676]", + "[-9066.4512 -14667.7334 -11903.0068]", + "[-9356.9307 -14847.9629 -11903.1924]", + "[-9845.5234 -15064.6729 -11903.5137]", + "[-10357.0908 -15208.1807 -11902.8184]", + "[-10877.3037 -15298.2598 -11903.3926]", + "[-11400.9072 -15342.7412 -11902.8516]", + "[-11924.1436 -15348.7656 -11903.0908]", + "[-12442.0586 -15280.8027 -11903.1846]", + "[-12871.7617 -15144.3164 -11903.1113]", + "[-13339.1807 -14919.1904 -11903.5469]", + "[-13775.2148 -14644.8184 -11903.0117]", + "[-14180.874 -14330.8223 -11903.1885]", + "[-14576.6172 -13972.4141 -11903.6064]", + "[-14939.1445 -13583.3047 -11902.5244]", + "[-15153.0439 -13252.5205 -11903.0781]", + "[-15373.7119 -12771.1963 -11903.4814]", + "[-15523.2607 -12265.9443 -11903.4141]", + "[-15616.625 -11750.8086 -11903.3262]", + "[-15665.3447 -11232.2412 -11903.1387]", + "[-15675.9805 -10713.166 -11903.3008]", + "[-15668.6816 -10195.7861 -11903.1514]", + "[-15669.2734 -9679.6729 -11903.3926]", + "[-15668.1309 -9164.7676 -11903.1973]", + "[-15668.2217 -8650.7412 -11903.2764]", + "[-15667.793 -8138.2739 -11898.083]", + "[-15667.8965 -7605.8633 -11892.5068]", + "[-15669.1396 -7078.4497 -11882.6279]", + "[-15667.6797 -6556.2188 -11872.9141]", + "[-15668.3398 -6041.1255 -11858.8027]", + "[-15666.9336 -5513.0513 -11843.9854]", + "[-15669.2764 -4995.8013 -11825.1074]", + "[-15668.4648 -4470.2402 -11805.9033]", + "[-15667.875 -3940.3936 -11781.6904]", + "[-15668.2461 -3426.7908 -11758.959]", + "[-15667.6025 -2910.7397 -11736.6582]", + "[-15667.7373 -2393.6997 -11714.0068]", + "[-15667.75 -1876.4653 -11691.5947]", + "[-15667.9941 -1353.0654 -11668.3594]", + "[-15669.0117 -827.8546 -11645.6182]", + "[-15668.4414 -309.3492 -11622.4482]", + "[-15668.6924 216.829 -11599.9824]", + "[-15668.5859 745.637 -11576.6143]", + "[-15668.2559 1275.3364 -11553.752]", + "[-15667.7764 1802.5229 -11530.6602]", + "[-15668.3125 2327.739 -11507.7344]", + "[-15668.999 2846.967 -11487.7412]", + "[-15668.3438 3378.9814 -11470.0986]", + "[-15668.3115 3899.1265 -11455.0439]", + "[-15667.5996 4429.4326 -11441.667]", + "[-15668.4922 4945.2324 -11431.1279]", + "[-15668.623 5470.4438 -11422.5654]", + "[-15668.9717 6004.8501 -11415.3477]", + "[-15666.9443 6522.6421 -11408.6631]", + "[-15664.2539 7049.0537 -11409.1035]", + "[-15636.7217 7584.3018 -11410.2041]", + "[-15589.4512 8099.6992 -11411.8086]", + "[-15520.1621 8620.6777 -11412.1221]", + "[-15421.8076 9144.9404 -11413.5361]", + "[-15295.2139 9670.3594 -11414.2607]", + "[-15141.7744 10165.2861 -11415.001]", + "[-14955.5078 10655.2666 -11415.8564]", + "[-14730.0811 11134.8457 -11415.9961]", + "[-14464.2783 11599.4023 -11416.6631]", + "[-14155.5186 12042.6455 -11416.7529]", + "[-13824.4834 12436.7305 -11417.3047]", + "[-13456.0527 12802.0234 -11416.6465]", + "[-13052.4434 13134.1455 -11416.9365]", + "[-12619.1611 13430.0596 -11416.5664]", + "[-12160.9551 13687.9404 -11416.3164]", + "[-11684.7881 13908.4268 -11415.9102]", + "[-11194.957 14092.9727 -11415.0303]", + "[-10695.2354 14244.2939 -11414.1699]", + "[-10188.5713 14365.5723 -11413.5137]", + "[-9677.3008 14459.7832 -11412.6533]", + "[-9163.1914 14528.4385 -11411.582]", + "[-8647.6934 14575.2656 -11410.7393]", + "[-8132.0132 14602.1084 -11409.5879]", + "[-7616.9932 14611.2334 -11409.1338]", + "[-7103.3398 14606.9063 -11404.6201]", + "[-6561.5649 14606.4395 -11399.5146]", + "[-6022.667 14604.9531 -11390.0479]", + "[-5486.7813 14605.9492 -11380.209]", + "[-4954.9604 14604.999 -11365.6719]", + "[-4427.9238 14606.1289 -11352.084]", + "[-3906.8403 14605.4121 -11333.1299]", + "[-3391.7698 14604.5264 -11314.6816]", + "[-2856.1572 14606.1416 -11290.3887]", + "[-2329.2639 14605.1406 -11266.5371]", + "[-1811.7866 14605.2344 -11244.3613]", + "[-1277.0618 14606.3398 -11221.0791]", + "[-752.4542 14605.5615 -11197.9365]", + "[-238.5429 14606.1631 -11174.6328]", + "[289.8942 14606.0313 -11152.3994]", + "[806.7358 14606.2578 -11129.7061]", + "[1336.3077 14605.5205 -11107.0479]", + "[1854.2751 14605.1855 -11083.8467]", + "[2384.4763 14606.332 -11061.3975]", + "[2903.3418 14605.0996 -11038.3945]", + "[3435.6948 14605.9385 -11015.4756]", + "[3959.7942 14606.3584 -10991.8408]", + "[4478.417 14607.1875 -10969.5918]", + "[5003.0439 14605.7256 -10946.4365]", + "[5520.481 14604.8076 -10923.5176]", + "[6050.1543 14606.4453 -10902.6602]", + "[6567.1836 14603.9521 -10885.6514]", + "[7093.6143 14604.8564 -10869.8096]", + "[7629.7207 14605.4277 -10856.8516]", + "[8149.9253 14605.458 -10846.6162]", + "[8679.1611 14604.749 -10837.4395]", + "[9191.5049 14605.2139 -10830.5518]", + "[9712.0195 14604.1885 -10824.4121]", + "[10238.4238 14605.9561 -10823.4131]", + "[10772.1582 14604.1855 -10823.127]", + "[11287.0459 14604.2637 -10824.2139]", + "[11809.3291 14603.6689 -10824.0088]", + "[12338.626 14593.9053 -10825.2695]", + "[12872.2949 14532.5039 -10827.0459]", + "[13374.9678 14423.7881 -10829.9502]", + "[13863.3652 14252.2627 -10831.2109]", + "[14322.9795 14011.6504 -10831.8652]", + "[14732.3896 13694.1143 -10832.4092]", + "[15039.7373 13353.874 -10832.5332]", + "[15322.3105 12901.0264 -10831.8867]", + "[15519.4326 12426.0127 -10830.5156]", + "[15654.375 11919.2002 -10828.6914]", + "[15732.9453 11409.29 -10827.0566]", + "[15769.0811 10875.4131 -10824.748]", + "[15767.4707 10344.5273 -10821.9404]", + "[15762.3555 9817.5156 -10816.9102]", + "[15761.0166 9293.7891 -10810.3896]", + "[15762.792 8773.7705 -10800.3535]", + "[15759.3145 8258.0586 -10793.209]", + "[15731.9844 7723.126 -10789.5547]", + "[15674.1758 7194.7451 -10784.7959]", + "[15585.6201 6673.7412 -10780.3818]", + "[15467.7939 6161.8516 -10775.6914]", + "[15317.2256 5661.8081 -10771.6406]", + "[15134.9658 5175.8823 -10767.4033]", + "[14964.2695 4689.8809 -10762.8291]", + "[14838.8037 4193.188 -10758.4697]", + "[14743.5371 3669.6802 -10754.0098]", + "[14676.8027 3145.6055 -10749.4688]", + "[14639.8154 2621.9368 -10744.8828]", + "[14628.623 2100.718 -10740.3018]", + "[14632.4912 1582.592 -10739.6045]", + "[14633.9336 1066.8792 -10740.3779]", + "[14635.043 552.6221 -10740.1982]", + "[14632.7705 39.0562 -10740.4346]", + "[14633.3945 -473.8846 -10740.3535]", + "[14635.1084 -986.2096 -10740.2578]", + "[14633.8018 -1520.1753 -10740.4043]", + "[14633.7305 -2053.4707 -10740.2803]", + "[14633.6641 -2586.1211 -10740.3584]", + "[14633.9316 -3118.1184 -10740.5332]", + "[14632.9658 -3649.4597 -10740.2871]", + "[14633.6602 -4180.189 -10740.4229]", + "[14634.1992 -4710.2422 -10740.4014]", + "[14633.7783 -5239.7114 -10740.375]", + "[14633.9814 -5767.9771 -10739.6455]", + "[14635.0352 -6294.5396 -10739.8086]", + "[14634.0859 -6819.5581 -10739.9941]", + "[14635.2041 -7343.3442 -10739.1016]", + "[14633.6807 -7865.6108 -10740.1904]", + "[14630.2559 -8386.7031 -10740.5723]", + "[14605.4346 -8906.5566 -10742.2607]", + "[14558.7959 -9425.1992 -10742.4805]", + "[14490.3037 -9942.7578 -10744.4102]", + "[14395.8223 -10458.1299 -10744.9346]", + "[14274.9629 -10970.2305 -10745.7285]", + "[14120.4473 -11478.3867 -10746.5547]", + "[13940.2393 -11959.9424 -10747.0947]", + "[13721.3145 -12434.166 -10747.3672]", + "[13470.8789 -12883.4814 -10748.085]", + "[13184.9053 -13308.4883 -10748.1885]", + "[12847.7236 -13723.6533 -10748.5566]", + "[12479.1074 -14100.4639 -10748.3535]", + "[12085.6592 -14433.2979 -10747.8613]", + "[11654.6328 -14737.3818 -10747.6982]", + "[11188.165 -15007.3506 -10747.1543]", + "[10718.3447 -15230.7002 -10747.0303]", + "[10225.293 -15421.7734 -10746.6123]", + "[9712.9521 -15582.0537 -10745.5977]", + "[9213.3975 -15703.873 -10744.9668]", + "[8702.0088 -15801.623 -10743.9375]", + "[8179.8232 -15873.958 -10743.1406]", + "[7650.2588 -15924.0391 -10742.0391]", + "[7117.0986 -15953.2832 -10740.8799]", + "[6583.2588 -15962.8057 -10740.0605]", + "[6052.5811 -15956.9102 -10740.5439]", + "[5525.4746 -15957.7236 -10739.4932]", + "[5000.1572 -15956.3848 -10740.3447]", + "[4475.4229 -15956.9775 -10740.1572]", + "[3951.1741 -15957.8525 -10740.2686]", + "[3427.4214 -15955.9668 -10739.9629]", + "[2904.697 -15957.376 -10735.3232]", + "[2383.2517 -15957.5947 -10730.3789]", + "[1864.7504 -15959.0225 -10720.415]", + "[1349.1958 -15957.6318 -10710.9951]", + "[807.4664 -15957.9189 -10696.1846]", + "[270.2628 -15958.3311 -10681.6768]", + "[-261.8055 -15957.7617 -10667.751]", + "[-788.677 -15958.6279 -10653.3809]", + "[-1309.5835 -15957.8643 -10634.2305]", + "[-1824.3287 -15957.8906 -10615.4795]", + "[-2360.5063 -15958.1094 -10596.9912]", + "[-2890.1692 -15957.9775 -10578.0791]", + "[-3414.6243 -15957.4688 -10560.2656]", + "[-3933.8735 -15958.0117 -10540.4404]", + "[-4448.5122 -15958.0742 -10523.7305]", + "[-4985.0601 -15958.4551 -10504.9502]", + "[-5517.2222 -15958.417 -10486.5684]", + "[-6045.0605 -15957.2842 -10468.042]", + "[-6568.7554 -15959.5557 -10449.7803]", + "[-7088.4155 -15957.1318 -10431.6143]", + "[-7604.3574 -15958.9893 -10413.6787]", + "[-8116.1689 -15958.3359 -10396.2842]", + "[-8648.9893 -15959.3447 -10377.1055]", + "[-9177.6191 -15958.4609 -10358.8779]", + "[-9701.9814 -15957.5645 -10340.1133]", + "[-10222.4883 -15960.0244 -10326.1631]", + "[-10739.8125 -15959.6396 -10312.2148]", + "[-11255.1807 -15959.5518 -10300.9121]", + "[-11769.1943 -15960.4521 -10288.7305]", + "[-12283.1338 -15952.9482 -10287.3506]", + "[-12797.2139 -15901.0049 -10290.4609]", + "[-13307.1885 -15798.2197 -10290.8516]", + "[-13804.7012 -15633.5645 -10289.1113]", + "[-14275.8457 -15397.207 -10285.8721]", + "[-14699.7744 -15081.8613 -10281.1875]", + "[-15007.7549 -14753.2666 -10275.375]", + "[-15293.04 -14318.9658 -10267.0605]", + "[-15499.6074 -13849.8945 -10257.7441]", + "[-15644.3262 -13341.5576 -10247.6211]", + "[-15729.8574 -12828.458 -10236.418]", + "[-15770.1807 -12295.3223 -10224.6064]", + "[-15772.4463 -11769.7158 -10214.2197]", + "[-15766.6563 -11252.7275 -10206.5723]", + "[-15766.0918 -10720.2412 -10198.958]", + "[-15767.9248 -10192.666 -10195.6152]", + "[-15766.6123 -9669.293 -10191.8877]", + "[-15766.1904 -9148.1396 -10193.4492]", + "[-15763.9658 -8628.5625 -10193.2959]", + "[-15698.4717 -8113.1899 -10193.6973]", + "[-15569.2266 -7610.939 -10192.9795]", + "[-15396.6484 -7125.4238 -10193.335]", + "[-15257.876 -6881.9614 -10193.1914]", + "[-14949.8789 -6447.5928 -10193.3535]", + "[-14585.5166 -6060.8721 -10193.1885]", + "[-14182.6875 -5715.8955 -10193.5]", + "[-13752.707 -5405.9702 -10193.4229]", + "[-13300.5 -5124.7417 -10192.8438]", + "[-12854.8008 -4866.7075 -10187.0107]", + "[-12408.7217 -4598.3228 -10181.0195]", + "[-11957.3516 -4325.1016 -10170.666]", + "[-11499.5596 -4051.6838 -10159.5576]", + "[-11055.3428 -3792.7581 -10145.1553]", + "[-10610.1367 -3531.6069 -10130.0771]", + "[-10162.8164 -3274.345 -10110.5889]", + "[-9717.5264 -3014.7693 -10090.75]", + "[-9273.417 -2757.7224 -10067.3252]", + "[-8812.3936 -2492.1763 -10042.1006]", + "[-8356.9873 -2226.8999 -10013.1436]", + "[-7904.7134 -1965.5502 -9988.5996]", + "[-7455.3916 -1706.2657 -9966.6279]", + "[-7009.1069 -1446.168 -9947.0645]", + "[-6561.4063 -1188.793 -9929.6475]", + "[-6114.4492 -928.3698 -9914.9746]", + "[-5664.1841 -668.6652 -9901.7656]", + "[-5212.1602 -405.729 -9891.6963]", + "[-4755.7344 -141.4888 -9882.5293]", + "[-4311.1973 116.5276 -9877.5859]", + "[-3848.4714 382.9479 -9872.9863]", + "[-3391.7419 648.3868 -9872.709]", + "[-2941.9683 909.0439 -9872.7568]", + "[-2479.6646 1175.8138 -9872.9287]", + "[-2030.0737 1437.6409 -9872.8418]", + "[-1573.9513 1700.8481 -9873.0156]", + "[-1117.0599 1965.5522 -9872.6582]", + "[-663.6948 2235.262 -9872.8994]", + "[-223.1749 2524.5488 -9873.0938]", + "[205.1181 2829.9053 -9872.6641]", + "[618.3832 3154.3442 -9872.5938]", + "[1015.3781 3497.4009 -9872.8779]", + "[1392.635 3861.1797 -9872.9951]", + "[1746.7086 4246.5249 -9873.082]", + "[2075.1355 4652.8931 -9872.4844]", + "[2372.5603 5081.5366 -9872.9902]", + "[2635.3037 5531.0273 -9872.7539]", + "[2859.645 5999.8955 -9872.8994]", + "[3041.3052 6485.6499 -9872.6396]", + "[3179.2847 6984.3667 -9872.9805]", + "[3272.2175 7492.1626 -9872.5439]", + "[3320.605 8004.8311 -9872.7148]", + "[3325.2651 8518.6172 -9872.8916]", + "[3291.0381 9029.9844 -9872.9287]", + "[3215.4155 9561.5557 -9872.8408]", + "[3104.3589 10085.6367 -9872.6191]", + "[2960.0713 10600.502 -9872.6162]", + "[2789.3237 11106.0996 -9872.4502]", + "[2592.4177 11601.2227 -9873.0889]", + "[2375.0107 12086.7402 -9872.8555]", + "[2137.707 12561.9795 -9872.8672]", + "[1884.1769 13027.958 -9872.9297]", + "[1623.7329 13486.7822 -9872.5352]", + "[1372.7532 13947.7568 -9871.8008]", + "[1084.9369 14384.3828 -9872.2109]", + "[758.7859 14791.0342 -9872.127]", + "[391.9729 15159.8066 -9871.835]", + "[-19.6135 15476.2373 -9872.0088]", + "[-472.5789 15727.165 -9872.1113]", + "[-960.9724 15895.4336 -9872.1182]", + "[-1460.7954 16011.0752 -9872.2891]", + "[-1987.9065 16098.4619 -9871.6006]", + "[-2518.8953 16133.6289 -9871.8301]", + "[-3048.8059 16100.04 -9871.9795]", + "[-3566.7634 15990.6865 -9871.6953]", + "[-4057.4077 15795.3037 -9871.7041]", + "[-4520.4854 15545.6768 -9872.1699]", + "[-4991.5444 15314.9336 -9872.1787]", + "[-5463.9355 15084.0459 -9872.1855]", + "[-5939.02 14852.208 -9872.2393]", + "[-6418.0093 14619.5283 -9872.1553]", + "[-6877.4561 14392.8691 -9871.9805]", + "[-7343.6099 14167.7363 -9872.25]", + "[-7812.1553 13937.0195 -9872.0527]", + "[-8285.3203 13706.8457 -9872.1953]", + "[-8759.8096 13475.2002 -9872.1572]", + "[-9233.7744 13244.6455 -9871.8057]", + "[-9706.6094 13013.8223 -9872.1973]", + "[-10178.4883 12782.5488 -9871.6914]", + "[-10650.457 12554.0771 -9872.0703]", + "[-11120.4932 12323.2773 -9870.9531]", + "[-11588.8535 12092.3359 -9871.6523]", + "[-12038.457 11830.2549 -9871.4854]", + "[-12454.9512 11518.71 -9871.5137]", + "[-12875.208 11216.3379 -9871.3193]", + "[-13294.4844 10913.9805 -9871.8262]", + "[-13705.1816 10601.6592 -9871.835]", + "[-14079.3838 10247.082 -9870.9551]", + "[-14410.582 9853.2236 -9871.9434]", + "[-14703.4229 9432.9502 -9871.8574]", + "[-14969.3232 8968.5186 -9871.7773]", + "[-15175.0449 8475.8184 -9871.6387]", + "[-15347.8506 7973.8311 -9871.6309]", + "[-15450.3145 7453.3643 -9871.4365]", + "[-15516 6930.6021 -9871.5918]", + "[-15543.8096 6405.7109 -9871.6895]", + "[-15552.8838 5882.5249 -9871.7373]", + "[-15554.1914 5361.1738 -9868.6455]", + "[-15548.46 4842.2749 -9863.5762]", + "[-15550.4443 4326.0581 -9859.2578]", + "[-15550.377 3812.7107 -9854.249]", + "[-15550.0479 3279.1113 -9849.793]", + "[-15549.2441 2748.6196 -9845.1982]", + "[-15549.6406 2221.2549 -9840.582]", + "[-15549.6416 1697.8601 -9836.0361]", + "[-15549.8604 1185.1035 -9835.667]", + "[-15550.5654 665.4739 -9835.999]", + "[-15549.8145 138.8053 -9836.1025]", + "[-15550.4521 -374.4835 -9835.9844]", + "[-15549.8457 -895.308 -9836.208]", + "[-15549.0996 -1423.0648 -9836.3516]", + "[-15550.2363 -1938.3082 -9836.502]", + "[-15550.8604 -2457.72 -9836.4512]", + "[-15550.5547 -2980.6963 -9836.4805]", + "[-15550.3008 -3498.2122 -9836.6816]", + "[-15551.3096 -4017.7832 -9836.3838]", + "[-15549.3604 -4534.3887 -9836.4727]", + "[-15551.0205 -5049.3945 -9836.6523]", + "[-15550.6836 -5564.0332 -9836.4453]", + "[-15549.5791 -6079.583 -9836.9443]", + "[-15549.9951 -6600.2266 -9837.3965]", + "[-15550.6494 -7116.625 -9837.126]", + "[-15549.1826 -7641.0981 -9836.9355]", + "[-15550.4697 -8155.3906 -9837.3945]", + "[-15548.2646 -8673.1309 -9837.0342]", + "[-15548.7646 -9189.3057 -9837.248]", + "[-15549.876 -9703.8682 -9837.0771]", + "[-15549.4639 -10216.8271 -9837.2285]", + "[-15549.9092 -10742.8105 -9837.1289]", + "[-15549.6055 -11267.1162 -9837.0088]", + "[-15548.7803 -11789.7441 -9837.1133]", + "[-15549.1318 -12307.9648 -9837.1602]", + "[-15549.1504 -12820.6787 -9837.166]", + "[-15550.2256 -13343.3682 -9837.0498]", + "[-15548.7676 -13866.8564 -9837.2324]", + "[-15550.0186 -14382.1514 -9837.207]", + "[-15550.334 -14894.7051 -9837.25]", + "[-15550.2568 -15408.415 -9837.2568]", + "[-15549.3887 -15499.4033 -9837.168]" + ], + + [ + "[7721.9058 -14598.9404 -9837.1387]", + "[7621.6304 -14598.5234 -9837.084]", + "[7106.8647 -14598.6436 -9837.0703]", + "[6587.561 -14598.6123 -9837.0947]", + "[6075.3145 -14598.5635 -9837.083]", + "[5553.8237 -14597.7227 -9837.2383]", + "[5039.0469 -14599.0215 -9837.0996]", + "[4514.5303 -14598.083 -9837.0898]", + "[3989.2927 -14598.0664 -9837.2012]", + "[3461.8489 -14597.9795 -9837.1504]", + "[2941.5547 -14597.9854 -9837.1387]", + "[2417.8733 -14597.6035 -9837.1416]", + "[1894.938 -14597.8711 -9837.1387]", + "[1372.7572 -14597.9805 -9837.0439]", + "[851.2889 -14598.5439 -9837.2656]", + "[330.5954 -14598.3496 -9837.1006]", + "[-189.3727 -14598.1299 -9837.1641]", + "[-708.5724 -14599.1738 -9837.0879]", + "[-1227.052 -14598.7354 -9837.1328]", + "[-1744.7772 -14598.9082 -9837.1357]", + "[-2261.7888 -14598.7783 -9837.1572]", + "[-2778.0413 -14597.8174 -9837.2285]", + "[-3293.5684 -14598.8672 -9837.1611]", + "[-3808.3213 -14597.9121 -9836.8848]", + "[-4322.3755 -14597.7021 -9837.2139]", + "[-4835.6353 -14597.8496 -9837.1553]", + "[-5348.1802 -14598.2012 -9837.1563]", + "[-5879.6265 -14598.1563 -9837.1436]", + "[-6410.2847 -14598.4258 -9836.9561]", + "[-6940.1436 -14598.4814 -9837.2412]", + "[-7469.1641 -14598.0557 -9837.1729]", + "[-7997.3486 -14599.0811 -9837.1963]", + "[-8524.7139 -14597.5352 -9837.1982]", + "[-9051.2617 -14598.6104 -9837.1465]", + "[-9576.9912 -14598.6182 -9837.1426]", + "[-10101.9453 -14597.3428 -9837.1455]", + "[-10626.0068 -14598.8232 -9836.6631]", + "[-11145.3545 -14597.6758 -9837.3037]", + "[-11667.8809 -14598.9307 -9837.2031]", + "[-12186.4307 -14585.3984 -9837.7178]", + "[-12697.3193 -14512.3691 -9837.6885]", + "[-13193.1846 -14371.082 -9837.6807]", + "[-13661.2949 -14145.5244 -9838.5439]", + "[-13962.167 -13928.3799 -9838.5654]", + "[-14243.0439 -13639.2725 -9838.4824]", + "[-14432.3936 -13358.709 -9838.4658]", + "[-14645.1377 -12892.7549 -9838.3271]", + "[-14780.3418 -12382.7314 -9837.6123]", + "[-14847.4922 -11861.9961 -9837.2861]", + "[-14864.0605 -11337.5625 -9836.9883]", + "[-14852.0176 -10807.4502 -9837.0977]", + "[-14850.4248 -10283.7197 -9836.792]", + "[-14852.5771 -9760.9355 -9837.0039]", + "[-14850.3652 -9244.7275 -9835.623]", + "[-14851.8379 -8717.8438 -9833.9688]", + "[-14851.5488 -8203.7344 -9835.2715]", + "[-14851.3711 -7677.8306 -9835.2871]", + "[-14853.21 -7152.8994 -9834.8721]", + "[-14852.2852 -6627.8823 -9835.2139]", + "[-14851.6992 -6109.3813 -9834.8701]", + "[-14852.1582 -5582.7715 -9835.0889]", + "[-14853.8672 -5054.333 -9834.7842]", + "[-14853.8115 -4526.5513 -9835.3096]", + "[-14853.5439 -3999.5439 -9835.0264]", + "[-14852.6357 -3473.0415 -9835.0322]", + "[-14851.6797 -2947.1045 -9834.8574]", + "[-14853.5215 -2421.6836 -9835.1699]", + "[-14853.5273 -1896.8583 -9835.1113]", + "[-14852.793 -1375.2048 -9835.2842]", + "[-14851.7852 -861.8339 -9835.1719]", + "[-14853.5791 -334.2067 -9835.2676]", + "[-14853.5371 182.184 -9835.1973]", + "[-14852.9971 714.2183 -9835.293]", + "[-14851.5449 1244.9752 -9835.6455]", + "[-14853.1279 1775.1583 -9836.0557]", + "[-14854.207 2304.8074 -9841.1924]", + "[-14853.9365 2835.1812 -9846.4414]", + "[-14854.6895 3367.1428 -9850.9395]", + "[-14854.2363 3900.8965 -9855.6465]", + "[-14854.2832 4436.4102 -9860.3145]", + "[-14853.0986 4949.2271 -9864.874]", + "[-14855.1797 5463.6455 -9869.2373]", + "[-14853.8027 5979.5586 -9873.1221]", + "[-14842.1973 6495.7559 -9872.4648]", + "[-14804.6035 7010.854 -9871.7266]", + "[-14745.9531 7523.3838 -9872.5146]", + "[-14627.1943 8025.2656 -9872.0146]", + "[-14472.4648 8514.9063 -9872.0391]", + "[-14260.0605 8982.1426 -9872.1846]", + "[-13997.2119 9447.5762 -9872.1172]", + "[-13694.4336 9886.1123 -9871.9707]", + "[-13339.2666 10281.8379 -9872.3096]", + "[-12962.5713 10652.4102 -9871.8271]", + "[-12538.0156 10967.165 -9871.8428]", + "[-12097.0791 11251.4541 -9871.9492]", + "[-11626.1309 11482.0469 -9872.2109]", + "[-11153.0361 11700.9414 -9871.8799]", + "[-10686.7588 11931.2012 -9871.8506]", + "[-10219.3594 12156.665 -9872.082]", + "[-9753.8652 12384.6572 -9872.1309]", + "[-9288.084 12609.9619 -9872.0693]", + "[-8824.2627 12836.4404 -9871.9561]", + "[-8361.7588 13064.0762 -9872.2529]", + "[-7898.3706 13288.4033 -9871.9531]", + "[-7436.688 13514.2002 -9871.9063]", + "[-6975.1763 13738.9834 -9871.9053]", + "[-6515.2212 13964.8594 -9871.6426]", + "[-6039.4648 14208.8984 -9872.3262]", + "[-5563.666 14451.3359 -9871.957]", + "[-5092.5469 14701.5967 -9873.0947]", + "[-4620.1567 14948.2852 -9872.9746]", + "[-4138.144 15173.8125 -9873.1768]", + "[-3637.6975 15349.2734 -9873.4316]", + "[-3123.2629 15466.3389 -9873.2998]", + "[-2601.2603 15517.4287 -9873.7754]", + "[-2079.574 15485.9414 -9872.9648]", + "[-1573.6187 15365.3457 -9873.4385]", + "[-1119.1279 15167.9541 -9873.1836]", + "[-687.2918 14886.5537 -9872.9961]", + "[-302.997 14548.043 -9872.8789]", + "[50.4069 14151.5449 -9872.6992]", + "[359.8351 13723.1455 -9873.0771]", + "[632.6615 13273.0879 -9873.1357]", + "[883.012 12812.4141 -9873.1855]", + "[1125.4642 12349.7539 -9872.8672]", + "[1347.4889 11878.6875 -9872.9053]", + "[1548.4954 11399.3691 -9872.9238]", + "[1728.3181 10913.6855 -9872.9443]", + "[1881.1699 10421.3232 -9872.4688]", + "[2005.5021 9922.2334 -9872.3525]", + "[2099.2466 9418.1699 -9872.8262]", + "[2160.2563 8889.1816 -9873.1309]", + "[2179.3804 8358.6357 -9873.2334]", + "[2154.9727 7829.644 -9873.1074]", + "[2085.8601 7306.0435 -9873.0244]", + "[1969.3621 6792.3384 -9873.0947]", + "[1807.0576 6292.9028 -9873.1084]", + "[1602.3448 5811.1191 -9872.8838]", + "[1357.3188 5350.3242 -9873.084]", + "[1076.1177 4912.6216 -9873.0469]", + "[765.2462 4497.48 -9872.8711]", + "[427.4205 4105.6968 -9873.0986]", + "[66.0013 3737.3608 -9872.9307]", + "[-313.9487 3390.0444 -9873.0107]", + "[-709.5478 3063.1177 -9872.7686]", + "[-1118.3673 2754.6912 -9872.793]", + "[-1556.1943 2453.2222 -9872.8867]", + "[-2003.756 2169.0149 -9872.9082]", + "[-2460.26 1902.0146 -9872.5449]", + "[-2918.4277 1641.3696 -9872.7432]", + "[-3373.1511 1377.7836 -9872.9385]", + "[-3826.6084 1113.6501 -9873.0273]", + "[-4280.4531 851.6644 -9873.252]", + "[-4734.687 589.5641 -9879.5273]", + "[-5188.8237 325.5259 -9884.5342]", + "[-5646.1216 59.62 -9895.5781]", + "[-6090.7056 -196.4733 -9904.6953]", + "[-6539.5259 -457.5388 -9920.5264]", + "[-6995.6372 -719.7938 -9934.5205]", + "[-7439.4448 -978.0874 -9954.7666]", + "[-7891.459 -1240.1149 -9973.2705]", + "[-8352.7588 -1508.2784 -9998.8779]", + "[-8805.8926 -1768.4727 -10022.5869]", + "[-9248.1602 -2025.8418 -10051.3418]", + "[-9701.7764 -2288.1086 -10076.5879]", + "[-10144.792 -2544.3467 -10098.0469]", + "[-10593.5996 -2805.6738 -10118.0645]", + "[-11043.3818 -3066.1475 -10135.665]", + "[-11489.4141 -3328.0283 -10151.1123]", + "[-11932.6621 -3588.7036 -10163.7471]", + "[-12391.9023 -3862.4492 -10174.8975]", + "[-12845.1377 -4135.7793 -10183.3115]", + "[-13292.6914 -4406.4883 -10189.2285]", + "[-13735.793 -4671.4321 -10193.0996]", + "[-14185.0811 -4955.3037 -10193.6982]", + "[-14599.7197 -5274.0098 -10193.4404]", + "[-14979.3779 -5628.2964 -10193.2188]", + "[-15317.3164 -6021.0542 -10193.2939]", + "[-15599.0303 -6454.5718 -10193.0703]", + "[-15808.4277 -6925.7378 -10193.5889]", + "[-15933.6572 -7423.9019 -10193.6602]", + "[-16027.3701 -7947.0986 -10193.7373]", + "[-16047.7813 -8477.124 -10193.459]", + "[-16033.7324 -9004.0879 -10193.1406]", + "[-16033.3721 -9529.2393 -10193.5117]", + "[-16032.71 -10053.1201 -10193.3301]", + "[-16031.6816 -10575.9922 -10197.6973]", + "[-16033.542 -11099.0947 -10203.085]", + "[-16030.9648 -11624.4521 -10212.3506]", + "[-16031.7393 -12153.415 -10221.2334]", + "[-16008.4717 -12685.3262 -10228.5068]", + "[-15940.1855 -13194.5254 -10235.5508]", + "[-15822.335 -13697.2744 -10242.9043]", + "[-15646.0068 -14185.6367 -10250.3506]", + "[-15402.4941 -14646.6436 -10257.7607]", + "[-15086.625 -15063.9121 -10264.6299]", + "[-14702.958 -15421.2773 -10270.7148]", + "[-14264.1582 -15708.9629 -10276.3965]", + "[-13786.5879 -15925.251 -10281.0215]", + "[-13285.3262 -16077.1162 -10284.4229]", + "[-12771.0732 -16172.7451 -10288.123]", + "[-12251.2129 -16221.9609 -10291.0908]", + "[-11729.5176 -16234.291 -10293.0527]", + "[-11206.9775 -16226.4951 -10302.8008]", + "[-10681.8867 -16226.5771 -10313.6113]", + "[-10151.832 -16226.7266 -10327.4805]", + "[-9639.1445 -16224.7344 -10341.8809]", + "[-9120.5303 -16224.6611 -10360.1152]", + "[-8594.6318 -16224.9873 -10379.3301]", + "[-8060.2813 -16225.8613 -10397.9883]", + "[-7542.1133 -16224.5928 -10416.1729]", + "[-7016.0493 -16223.4375 -10434.7891]", + "[-6482.0991 -16223.8779 -10453.3086]", + "[-5966.2129 -16223.8955 -10471.2637]", + "[-5443.7964 -16223.5117 -10488.3223]", + "[-4914.7515 -16224.6914 -10507.668]", + "[-4379.3696 -16224.4971 -10526.5342]", + "[-3864.2439 -16223.1953 -10544.5703]", + "[-3342.6592 -16223.4404 -10562.7441]", + "[-2814.7317 -16224.7021 -10581.041]", + "[-2280.386 -16223.7275 -10599.7598]", + "[-1768.2773 -16222.9551 -10617.8525]", + "[-1250.4705 -16224.0566 -10635.8057]", + "[-726.9541 -16224.6924 -10654.4199]", + "[-197.8503 -16222.6182 -10670.6387]", + "[336.2577 -16223.4932 -10683.3262]", + "[874.8997 -16224.9443 -10697.4785]", + "[1387.2266 -16222.8848 -10711.0967]", + "[1902.8606 -16223.4424 -10721.3623]", + "[2421.4839 -16223.751 -10729.8174]", + "[2941.9607 -16221.1885 -10736.3262]", + "[3463.8643 -16223.458 -10739.4512]", + "[3986.2219 -16221.1113 -10741.2432]", + "[4508.0508 -16223.4199 -10740.043]", + "[5029.4688 -16222.041 -10740.21]", + "[5550.3809 -16223.0381 -10740.415]", + "[6070.3701 -16223.1758 -10740.4922]", + "[6589.7388 -16222.6523 -10740.0986]", + "[7108.5161 -16217.915 -10739.3105]", + "[7625.9517 -16191.2676 -10737.6748]", + "[8140.9624 -16145.2783 -10737.5098]", + "[8652.4189 -16076.9277 -10736.5381]", + "[9158.9668 -15985.8506 -10735.5088]", + "[9659.0791 -15870.0381 -10734.7969]", + "[10150.833 -15725.6133 -10734.0566]", + "[10660.0977 -15541.2178 -10733.3818]", + "[11153.4375 -15320.7988 -10733.2178]", + "[11627.458 -15064.25 -10732.6357]", + "[12077.5557 -14769.6865 -10732.5869]", + "[12499.2891 -14437.625 -10732.2744]", + "[12888.3027 -14069.5332 -10731.9688]", + "[13241.7529 -13668.7764 -10732.0732]", + "[13558.3174 -13239.6816 -10732.4844]", + "[13836.0039 -12785.7793 -10732.8125]", + "[14076.9355 -12312.5723 -10733.3271]", + "[14280.1016 -11822.9678 -10733.6406]", + "[14450.9814 -11322.1934 -10734.542]", + "[14589.2246 -10812.1748 -10735.2275]", + "[14699.4775 -10296.0967 -10736.0205]", + "[14783.0547 -9775.6221 -10736.8857]", + "[14843.6719 -9252.4629 -10737.6514]", + "[14882.3857 -8727.6807 -10738.3154]", + "[14901.2695 -8202.1758 -10739.1416]", + "[14903.0645 -7677.2778 -10740.002]", + "[14899.0283 -7156.8003 -10739.7236]", + "[14899.5557 -6643.9546 -10740.2656]", + "[14899.2979 -6115.9326 -10740.0879]", + "[14900.0254 -5601.1577 -10739.6641]", + "[14899.8438 -5072.5356 -10740.2861]", + "[14899.1758 -4556.1753 -10739.9922]", + "[14899.5029 -4026.6028 -10739.9902]", + "[14899.5283 -3506.3398 -10739.8828]", + "[14900.0713 -2987.2393 -10740.1289]", + "[14899.751 -2469.105 -10739.5488]", + "[14899.7373 -1951.8395 -10740.0039]", + "[14899.3467 -1435.1763 -10739.9854]", + "[14900.165 -919.094 -10739.9941]", + "[14900.3838 -403.5487 -10740.083]", + "[14899.6172 111.4256 -10740.0664]", + "[14898.6182 625.8246 -10740.0313]", + "[14899.1465 1139.7067 -10740.4209]", + "[14899.9697 1652.9626 -10740.1553]", + "[14899.1777 2165.7095 -10740.1387]", + "[14907.4023 2678.1108 -10744.5879]", + "[14946.1328 3189.2046 -10750.1172]", + "[15012.791 3697.8105 -10754.3516]", + "[15107.1709 4202.8145 -10758.6553]", + "[15233.9424 4701.8887 -10763.0049]", + "[15392.5762 5192.0825 -10767.6152]", + "[15579.0566 5672.2754 -10772.2793]", + "[15733.916 6162.9048 -10776.2598]", + "[15851.8975 6664.0806 -10780.2715]", + "[15935.7354 7172.8398 -10784.335]", + "[15993.1279 7686.2227 -10789.5195]", + "[16025.9082 8202.7715 -10793.9385]", + "[16032.125 8721.2393 -10798.4365]", + "[16027.9277 9241.3721 -10807.834]", + "[16027.918 9764.0527 -10817.5898]", + "[16026.6279 10289.3291 -10821.3125]", + "[16027.7793 10817.0176 -10825.3174]", + "[16003.6201 11344.0596 -10822.2617]", + "[15932.4141 11866.1777 -10819.3574]", + "[15807.8477 12376.1094 -10818.5605]", + "[15626.0664 12866.2441 -10817.4102]", + "[15377.3896 13323.5098 -10816.458]", + "[15060.1162 13733.2744 -10816.4473]", + "[14679.084 14080.835 -10816.1982]", + "[14248.748 14359.4775 -10817.0479]", + "[13761.2734 14577.6406 -10817.96]", + "[13251.9434 14727.7051 -10818.3848]", + "[12731.8701 14821.5508 -10820.6348]", + "[12207.666 14868.7246 -10822.6543]", + "[11682.333 14877.8291 -10824.7559]", + "[11157.8438 14870.376 -10824.2939]", + "[10633.9463 14869.5957 -10823.8252]", + "[10110.9014 14869.0635 -10823.8076]", + "[9589.1152 14869.0625 -10824.1357]", + "[9067.6016 14869.9395 -10830.0225]", + "[8545.5537 14869.958 -10835.6807]", + "[8021.3887 14869.1641 -10845.8477]", + "[7494.7407 14869.7764 -10856.0791]", + "[6963.4634 14869.8613 -10871.167]", + "[6451.1177 14870.2002 -10885.5137]", + "[5932.3452 14868.8779 -10904.9688]", + "[5406.3315 14869.4141 -10924.4365]", + "[4871.7979 14870.3184 -10949.4932]", + "[4353.9902 14870.25 -10971.3994]", + "[3827.198 14869.1182 -10994.7764]", + "[3292.0938 14868.6211 -11018.498]", + "[2775.3704 14869.6279 -11041.0615]", + "[2250.553 14870.6934 -11063.7998]", + "[1717.6902 14869.6104 -11087.3496]", + "[1205.8645 14869.1914 -11109.584]", + "[687.0454 14869.3193 -11132.4824]", + "[161.5169 14870.9609 -11155.208]", + "[-370.9402 14868.918 -11178.4668]", + "[-910.3369 14868.6885 -11201.9844]", + "[-1426.4136 14869.8037 -11224.2695]", + "[-1948.8719 14869.498 -11247.5098]", + "[-2477.7458 14869.8281 -11270.3076]", + "[-3013.03 14870.5938 -11294.2549]", + "[-3554.6477 14869.5723 -11317.7412]", + "[-4069.897 14869.3652 -11336.0889]", + "[-4589.8345 14871.126 -11353.6875]", + "[-5113.9058 14868.7646 -11367.3809]", + "[-5641.7148 14871.2744 -11380.7344]", + "[-6172.1924 14869.085 -11389.7754]", + "[-6704.9272 14869.4316 -11398.8135]", + "[-7238.9287 14872.1934 -11404.5381]", + "[-7774.3804 14870.2266 -11410.126]", + "[-8309.7451 14860.8369 -11408.1338]", + "[-8843.5791 14826.665 -11406.3799]", + "[-9373.9424 14770.3057 -11405.209]", + "[-9900.1914 14691.1865 -11404.8428]", + "[-10420.8105 14585.5771 -11403.7432]", + "[-10934.207 14452.6357 -11403.0254]", + "[-11437.4619 14288.2549 -11402.5537]", + "[-11927.8545 14091.3252 -11402.209]", + "[-12401.5732 13860.2793 -11401.3848]", + "[-12854.7793 13593.0996 -11401.2256]", + "[-13283.4609 13289.9795 -11400.8262]", + "[-13683.6533 12951.8311 -11400.5957]", + "[-14051.7842 12580.4951 -11400.7119]", + "[-14385.4893 12179.4219 -11401.0371]", + "[-14681.9814 11751.2402 -11401.2021]", + "[-14942.8066 11301.7158 -11401.4941]", + "[-15167.541 10834.1836 -11402.2441]", + "[-15358.3037 10352.7363 -11402.6211]", + "[-15517.0313 9860.6572 -11402.915]", + "[-15646.4961 9360.876 -11403.9785]", + "[-15749.8311 8855.7041 -11404.751]", + "[-15827.5742 8346.4844 -11405.292]", + "[-15883.4014 7835 -11406.3594]", + "[-15918.5928 7322.1538 -11407.3877]", + "[-15935.8496 6808.8022 -11408.2148]", + "[-15936.9639 6295.5684 -11409.7148]", + "[-15933.7148 5783.415 -11416.3691]", + "[-15933.6406 5242.5117 -11421.499]", + "[-15933.4023 4706.2944 -11433.1152]", + "[-15933.4775 4177.1406 -11443.9014]", + "[-15933.4014 3655.5884 -11459.1191]", + "[-15934.0986 3142.3506 -11474.2783]", + "[-15932.3486 2606.9817 -11494.8369]", + "[-15933.7148 2078.8613 -11515.4707]", + "[-15933.3701 1556.3276 -11539.3965]", + "[-15932.2422 1038.9226 -11561.5195]", + "[-15934.165 526.003 -11584.0664]", + "[-15934.3975 -10.626 -11607.0986]", + "[-15933.0928 -542.9644 -11630.5869]", + "[-15932.876 -1071.3486 -11653.6631]", + "[-15933.8564 -1596.2118 -11676.6631]", + "[-15932.3691 -2117.429 -11699.3682]", + "[-15932.3418 -2635.3821 -11721.7275]", + "[-15932.7373 -3150.1924 -11744.5098]", + "[-15934.1162 -3662.3557 -11766.6836]", + "[-15932.8369 -4198.7876 -11790.2578]", + "[-15932.5752 -4732.5405 -11813.5635]", + "[-15932.9756 -5262.7656 -11831.8887]", + "[-15934.1982 -5789.2026 -11849.7568]", + "[-15933.6318 -6311.0464 -11863.1064]", + "[-15932.9004 -6827.9141 -11876.3652]", + "[-15932.7754 -7364.1338 -11884.9951]", + "[-15933.4492 -7893.5093 -11893.5674]", + "[-15933.084 -8414.3193 -11897.0723]", + "[-15933.5166 -8928.8965 -11901.1094]", + "[-15934.4053 -9443.2852 -11900.4844]", + "[-15933.1299 -9957.9082 -11899.7344]", + "[-15933.6504 -10471.5889 -11901.8213]", + "[-15933.9688 -10984.4941 -11903.1426]", + "[-15933.7842 -11520.4229 -11902.9521]", + "[-15924.1299 -12054.4541 -11902.4346]", + "[-15866.7021 -12584 -11903.0439]", + "[-15757.4326 -13104.4199 -11903.1133]", + "[-15590.1846 -13607.9258 -11903.2744]", + "[-15353.4502 -14081.6436 -11903.127]", + "[-15044.457 -14509.8311 -11902.6406]", + "[-14667.9277 -14877.6816 -11903.0703]", + "[-14263.3711 -15209.2324 -11902.7852]", + "[-13835.1484 -15506.6689 -11903.0811]", + "[-13380.9473 -15760.1689 -11902.918]", + "[-12897.8877 -15950.1729 -11903.0166]", + "[-12393.3594 -16064.9648 -11902.9248]", + "[-11878.4834 -16093.9375 -11902.8115]", + "[-11366.6865 -16072.583 -11903.7393]", + "[-10834.6719 -16072.5967 -11903.1992]", + "[-10304.8574 -16042.9326 -11903.6416]", + "[-9780.8594 -15961.7627 -11903.292]", + "[-9269.0322 -15828.3818 -11903.291]", + "[-8779.5107 -15631.0781 -11903.0947]", + "[-8326.2041 -15363.6631 -11903.2803]", + "[-7925.9209 -15024.6113 -11903.1416]", + "[-7565.2339 -14648.2539 -11903.6113]", + "[-7192.8472 -14287.7422 -11903.7188]", + "[-6820.1699 -13928.5645 -11903.6875]", + "[-6449.6387 -13568.1719 -11903.7344]", + "[-6076.6851 -13211.8945 -11903.6396]", + "[-5708.6787 -12851.6445 -11903.8242]", + "[-5337.0977 -12496.4902 -11903.9678]", + "[-4968.1177 -12139.6953 -11903.9287]", + "[-4599.3296 -11783.7188 -11903.5391]", + "[-4214.5908 -11413.2549 -11903.7607]", + "[-3831.9575 -11042.4238 -11903.792]", + "[-3449.8152 -10672.8604 -11903.7549]", + "[-3067.9622 -10304.4912 -11903.7686]", + "[-2686.8645 -9936.5098 -11903.5889]", + "[-2306.3064 -9569.1416 -11903.5713]", + "[-1926.0984 -9202.7119 -11903.7764]", + "[-1547.4375 -8836.1104 -11903.5293]", + "[-1168.5193 -8470.8574 -11903.3154]", + "[-791.8965 -8105.6792 -11902.9463]", + "[-415.2314 -7742.6396 -11903.2734]", + "[-40.0826 -7379.2637 -11904.002]", + "[335.7268 -7017.6885 -11903.1699]", + "[711.1011 -6656.9565 -11903.4609]", + "[1084.8383 -6296.1152 -11903.4707]", + "[1457.9131 -5935.6162 -11903.3701]", + "[1830.6803 -5576.1489 -11902.29]", + "[2201.3508 -5216.853 -11902.9473]", + "[2571.6436 -4859.3623 -11902.834]", + "[2940.6997 -4501.6821 -11903.1631]", + "[3310.2542 -4146.3853 -11903.2246]", + "[3693.6348 -3775.9758 -11902.9307]", + "[4076.7632 -3406.325 -11903.0977]", + "[4458.6763 -3036.8928 -11903.373]", + "[4840.5933 -2668.8613 -11903.1221]", + "[5221.8799 -2301.1953 -11903.2305]", + "[5601.9487 -1933.283 -11903.2061]", + "[5981.9746 -1566.3752 -11903.1328]", + "[6361.0815 -1198.8549 -11908.1465]", + "[6742.0503 -832.5062 -11913.1475]", + "[7124.5933 -464.0806 -11923.5459]", + "[7493.6011 -106.656 -11932.6611]", + "[7866.4912 254.7131 -11947.1748]", + "[8244.7285 619.4169 -11961.4502]", + "[8628.375 990.4212 -11980.8887]", + "[9003.2598 1351.1954 -11999.3516]", + "[9383.0693 1720.1052 -12018.3105]", + "[9753.9307 2077.0425 -12035.9844]", + "[10130.3262 2440.729 -12054.4434]", + "[10512.5703 2810.1575 -12072.2998]", + "[10883.6611 3167.7351 -12090.9023]", + "[11260.3379 3530.8281 -12108.6895]", + "[11641.1543 3901.0166 -12127.876]", + "[12010.3301 4256.9453 -12145.6221]", + "[12384.5566 4617.9648 -12163.9141]", + "[12763.3994 4983.9116 -12182.0234]", + "[13143.7686 5352.2612 -12200.9961]", + "[13522.1133 5718.647 -12216.9072]", + "[13898.2568 6080.2148 -12229.5693]", + "[14269.7461 6438.9897 -12240.8125]", + "[14638.2842 6795.0928 -12248.8008]", + "[15002.8682 7158.9854 -12252.334]", + "[15334.1816 7555.7373 -12250.5801]", + "[15629.8291 7979.3442 -12250.9561]", + "[15876.9014 8431.8447 -12251.2197]", + "[16064.8789 8910.4678 -12251.002]", + "[16177.0518 9411.376 -12250.8574]", + "[16203.2676 9948.1123 -12250.9014]", + "[16178.6113 10480.4131 -12241.6807]", + "[16179.375 11007.5098 -12230.5664]", + "[16180.1367 11530.0234 -12228.1533]", + "[16179.125 12047.6221 -12223.1426]", + "[16152.4785 12561.3496 -12225.7188]", + "[16073.5283 13091.6855 -12225.4561]", + "[15938.0479 13609.6201 -12225.4131]", + "[15737.1377 14104.8066 -12225.4629]", + "[15462.5908 14561.8418 -12225.9307]", + "[15129.5303 14944.9863 -12225.3057]", + "[14716.876 15277.2041 -12225.1846]", + "[14254.8389 15531.5 -12225.4941]", + "[13762.4424 15712.8271 -12225.8262]", + "[13254.1797 15832.3555 -12225.6289]", + "[12738.6279 15900.2471 -12225.3535]", + "[12220.9697 15927.2178 -12225.5186]", + "[11704.0479 15921.8662 -12225.041]", + "[11188.6934 15919.1484 -12228.5859]", + "[10673.9375 15917.1035 -12231.9326]", + "[10158.3008 15919.3281 -12236.9131]", + "[9641.2744 15918.0518 -12241.5332]", + "[9122.5859 15919.5781 -12248.8291]", + "[8601.4512 15918.2764 -12256.1768]", + "[8077.4263 15917.5752 -12266.1084]", + "[7550.0933 15918.8047 -12275.4639]", + "[7018.7554 15918.6641 -12284.7334]", + "[6483.3613 15919.3066 -12294.0059]", + "[5968.5234 15917.5508 -12303.4688]", + "[5450.043 15917.8838 -12312.3623]", + "[4927.8774 15919.1006 -12321.4189]", + "[4402.2539 15919.1611 -12328.8076]", + "[3874.0923 15919.6533 -12332.7969]", + "[3344.0681 15918.877 -12339.3057]", + "[2811.5608 15918.2441 -12349.8809]", + "[2276.1362 15917.6299 -12359.4961]", + "[1763.0505 15918.5693 -12368.0732]", + "[1247.0413 15919.71 -12377.0078]", + "[727.7542 15918.3428 -12386.2256]", + "[205.3621 15918.0439 -12395.4844]", + "[-320.0982 15918.1582 -12403.9746]", + "[-848.3451 15918.6396 -12413.7471]", + "[-1379.5466 15918.6553 -12422.5234]", + "[-1913.7874 15919.0264 -12432.5664]", + "[-2451.3154 15918.0391 -12441.1689]", + "[-2965.0129 15919.582 -12450.5146]", + "[-3481.3618 15918.0684 -12459.4082]", + "[-3999.9546 15918.9043 -12468.9844]", + "[-4521.2183 15918.123 -12477.2451]", + "[-5045.1831 15919.5879 -12486.4063]", + "[-5571.7646 15918.4756 -12495.7324]", + "[-6100.8257 15918.459 -12505.4336]", + "[-6632.4204 15917.6836 -12514.1904]", + "[-7165.9751 15918.2441 -12518.3018]", + "[-7701.1172 15918.8799 -12522.542]", + "[-8236.7119 15908.833 -12521.3184]", + "[-8771.498 15873.8203 -12521.375]", + "[-9303.8164 15817.5166 -12521.0469]", + "[-9832.3516 15736.9326 -12521.3047]", + "[-10355.4238 15629.7197 -12521.3838]", + "[-10870.6055 15494.3604 -12520.6543]", + "[-11375.3252 15326.5342 -12521.3213]", + "[-11866.748 15125.293 -12521.248]", + "[-12340.9326 14888.1836 -12521.3008]", + "[-12793.7471 14614.3809 -12521.1641]", + "[-13220.2383 14302.8145 -12521.1064]", + "[-13616.5986 13955.4697 -12521.5117]", + "[-13979.0752 13574.5605 -12521.2588]", + "[-14304.7627 13163.2188 -12521.2168]", + "[-14592.8594 12726.2695 -12521.2021]", + "[-14843.2471 12268.0977 -12520.959]", + "[-15057.5059 11793.2139 -12520.9902]", + "[-15237.4053 11305.4277 -12521.4131]", + "[-15385.1152 10808.0176 -12521.1494]", + "[-15504.0625 10303.999 -12521.1807]", + "[-15596.1182 9795.2715 -12520.9541]", + "[-15664.6846 9283.7139 -12521.1484]", + "[-15711.8145 8770.498 -12521.208]", + "[-15738.9521 8256.4883 -12521.1914]", + "[-15748.208 7742.4292 -12521.2578]", + "[-15744.9863 7228.6445 -12525.2705]", + "[-15743.251 6714.5874 -12530.0332]", + "[-15742.9688 6199.5269 -12538.5205]", + "[-15744.2979 5682.4248 -12547.6865]", + "[-15742.6572 5162.5889 -12557.3115]", + "[-15744.3428 4639.8555 -12565.9014]", + "[-15744.0898 4114.4702 -12575.0869]", + "[-15742.917 3586.6255 -12584.3594]", + "[-15743.1621 3056.0283 -12593.8867]", + "[-15743.9131 2522.5339 -12603.0322]", + "[-15743.3164 1986.5348 -12612.292]", + "[-15742.5068 1447.6322 -12621.627]", + "[-15744.0459 934.7829 -12630.6025]", + "[-15744.0781 419.331 -12639.8262]", + "[-15743.1455 -98.7385 -12648.9893]", + "[-15743.6387 -619.269 -12657.2588]", + "[-15745.0654 -1141.7793 -12666.583]", + "[-15743.9697 -1666.401 -12675.0635]", + "[-15743.6797 -2192.8623 -12684.959]", + "[-15745.1855 -2721.3516 -12693]", + "[-15745.874 -3251.4531 -12697.1064]", + "[-15746.0547 -3782.3455 -12699.9834]", + "[-15743.9111 -4313.3091 -12699.1553]", + "[-15744.624 -4843.7373 -12697.9561]", + "[-15746.3516 -5372.8262 -12692.1279]", + "[-15746.0137 -5898.5645 -12684.0596]", + "[-15711.8799 -6414.5146 -12673.5869]", + "[-15626.4639 -6939.3843 -12663.4434]", + "[-15489.0869 -7434.5469 -12653.1602]", + "[-15288.8545 -7913.6089 -12641.5879]", + "[-15008.8525 -8366.8135 -12629.5518]", + "[-14661.1299 -8760.6514 -12616.9307]", + "[-14265.7549 -9094.0811 -12609.4297]", + "[-13841.457 -9414.9844 -12600.3242]", + "[-13391.5703 -9687.7734 -12591.2842]", + "[-12917.3848 -9901.5654 -12582.6074]", + "[-12423.4717 -10045.5107 -12574.4902]", + "[-11894.6738 -10105.2646 -12567.4502]", + "[-11370.6592 -10087.8457 -12555.3027]", + "[-10856.5967 -10085.1123 -12541]", + "[-10328.7451 -10083.4121 -12531.0205]", + "[-9809.0283 -10082.1357 -12522.2715]", + "[-9296.2236 -10085.2236 -12517.3682]", + "[-8767.8076 -10084.2363 -12513.4238]", + "[-8243.2324 -10085.623 -12513.2051]", + "[-7720.8081 -10086.6143 -12513.9658]", + "[-7199.3892 -10085.9629 -12513.9453]", + "[-6678.7256 -10085.9678 -12513.7168]", + "[-6158.8003 -10086.5293 -12513.8105]", + "[-5639.2847 -10086.4922 -12514.0049]", + "[-5119.0049 -10085.6406 -12514.0225]", + "[-4597.2686 -10085.085 -12514.0654]", + "[-4073.9678 -10085.5488 -12513.9512]", + "[-3548.4668 -10084.8594 -12514.1084]", + "[-3017.6777 -10085.5879 -12514.1416]", + "[-2501.4861 -10085.8418 -12514.0254]", + "[-1976.1517 -10086.2158 -12513.998]", + "[-1463.2086 -10083.96 -12514.248]", + "[-945.4025 -10085.0615 -12514.2705]", + "[-425.6941 -10085.6631 -12514.2373]", + "[93.3821 -10085.8652 -12515.2236]", + "[611.7604 -10086.0088 -12514.6846]", + "[1129.5408 -10086.4434 -12515.1328]", + "[1646.6459 -10084.584 -12515.248]", + "[2163.1475 -10084.2725 -12514.8477]", + "[2678.9934 -10084.7158 -12514.917]", + "[3194.2908 -10084.5322 -12515.3281]", + "[3708.9358 -10084.7617 -12515.1787]", + "[4223.0176 -10085.8574 -12515.249]", + "[4736.3965 -10086.6162 -12514.8809]", + "[5249.1704 -10085.1348 -12515.2705]", + "[5783.1426 -10085.7578 -12515.0898]", + "[6316.4834 -10084.6855 -12515.1377]", + "[6849.1401 -10085.0723 -12515.1357]", + "[7381.1738 -10085.7246 -12515.2793]", + "[7912.5244 -10084.6846 -12515.25]", + "[8443.2246 -10085.6328 -12515.1602]", + "[8973.2656 -10085.1084 -12515.2061]", + "[9502.6904 -10085.2793 -12516.6514]", + "[10031.3252 -10086.0283 -12516.0732]", + "[10559.3887 -10084.9121 -12516.1875]", + "[11086.748 -10084.5742 -12516.1709]", + "[11612.957 -10068.6943 -12515.7695]", + "[12133.7695 -9995.9805 -12516.2295]", + "[12648.1025 -9897.9541 -12515.8691]", + "[13153.2197 -9767.6523 -12515.9844]", + "[13642.8115 -9590.5059 -12516.2949]", + "[14109.1875 -9363.3652 -12515.876]", + "[14539.5068 -9076.3857 -12515.999]", + "[14919.0664 -8727.0195 -12516.1309]", + "[15231.292 -8318.4424 -12515.6172]", + "[15465.3564 -7863.3525 -12516.1172]", + "[15626.3408 -7358.6104 -12516.0967]", + "[15711.6455 -6838.77 -12516.167]", + "[15733.8496 -6315.292 -12516.165]", + "[15707.4912 -5794.3281 -12516.1885]", + "[15640.6855 -5278.8115 -12516.0205]", + "[15545.957 -4769.2007 -12516.373]", + "[15456.7695 -4260.0786 -12515.9834]", + "[15366.5693 -3751.9634 -12516.0889]", + "[15278.4619 -3244.5181 -12515.8848]", + "[15153.6084 -2746.0588 -12516.0576]", + "[14981.3809 -2262.8787 -12516.21]", + "[14751.1445 -1783.2336 -12515.873]", + "[14458.7803 -1340.8809 -12515.9941]", + "[14100.4619 -952.4661 -12515.9648]", + "[13680.4219 -633.5049 -12516.3291]", + "[13246.8193 -412.1978 -12515.6172]", + "[12745.3682 -251.7168 -12516.1396]", + "[12226.4033 -165.5417 -12516.2793]", + "[11697.5273 -141.3975 -12516.0244]", + "[11182.9434 -166.6698 -12516.0361]", + "[10660.8203 -233.4408 -12516.0137]", + "[10151.5 -330.9218 -12516.3145]", + "[9630.1025 -424.1616 -12516.1885]", + "[9120.5381 -514.5115 -12516.2422]", + "[8601.6904 -603.9134 -12516.2207]", + "[8074.8496 -696.097 -12516.0752]", + "[7564.1016 -787.4745 -12516.0977]", + "[7047.2559 -877.5206 -12516.1318]", + "[6527.3413 -970.1688 -12516.1563]", + "[6007.0859 -1061.0605 -12516.2432]", + "[5487.4043 -1151.2318 -12516.1689]", + "[4968.2466 -1240.9683 -12516.1182]", + "[4450.5513 -1334.192 -12516.1348]", + "[3932.4978 -1425.4675 -12521.584]", + "[3413.9021 -1518.1755 -12526.9375]", + "[2892.98 -1611.5334 -12536.8613]", + "[2368.6035 -1704.0403 -12547.25]", + "[1864.3267 -1793.9724 -12561.4521]", + "[1355.1501 -1885.2428 -12575.7559]", + "[839.8793 -1974.8807 -12589.5352]", + "[319.394 -2067.9258 -12603.8262]", + "[-207.2803 -2161.5894 -12624.1045]", + "[-715.2374 -2251.0669 -12642.3945]", + "[-1230.4171 -2342.729 -12667.6445]", + "[-1754.1122 -2434.7065 -12690.4727]", + "[-2259.8796 -2523.7429 -12713.4834]", + "[-2773.2229 -2616.6057 -12735.7959]", + "[-3295.3967 -2705.9397 -12759.3467]", + "[-3824.5789 -2802.4587 -12782.0791]", + "[-4334.0181 -2890.7629 -12805.0693]", + "[-4850.354 -2981.793 -12827.9414]", + "[-5373.3643 -3075.7737 -12851.3398]", + "[-5902.9658 -3170.3459 -12875.1787]", + "[-6410.0952 -3257.8198 -12897.1289]", + "[-6923.0088 -3349.4294 -12920.085]", + "[-7442.46 -3440.6965 -12943.166]", + "[-7967.9517 -3533.8096 -12962.3789]", + "[-8499.373 -3626.0327 -12980.5029]", + "[-9034.7285 -3720.4321 -12995.0215]", + "[-9541.7422 -3811.1367 -13007.8369]", + "[-10051.2822 -3899.1792 -13016.1328]", + "[-10556.2744 -3988.8313 -13024.6025]", + "[-11082.7539 -4040.2026 -13030.0898]", + "[-11355.9922 -4017.6929 -13033.1494]", + "[-11875.9346 -3907.1143 -13043.7646]", + "[-12383.1387 -3726.177 -13052.5283]", + "[-12846.5264 -3505.2871 -13061.3975]", + "[-13290.8301 -3244.553 -13070.2783]", + "[-13714.2568 -2954.709 -13078.6836]", + "[-14105.6826 -2592.761 -13081.291]", + "[-14374.6699 -2238.2017 -13083.9863]", + "[-14626.8467 -1786.8641 -13089.0313]", + "[-14829.9717 -1302.7134 -13093.2402]", + "[-14982.6709 -807.8655 -13098.0381]", + "[-15096.7441 -305.2568 -13102.1016]", + "[-15181.8447 205.5564 -13104.1201]", + "[-15266.2373 718.8471 -13102.8682]", + "[-15318.9443 1238.7524 -13103.0693]", + "[-15323.2305 1765.8618 -13102.3662]", + "[-15310.4551 2297.7703 -13103.3086]", + "[-15304.1348 2815.321 -13102.8164]", + "[-15292.916 3339.6804 -13103.3545]", + "[-15282.4609 3870.2095 -13102.9639]", + "[-15266.665 4384.729 -13103.1885]", + "[-15252.5801 4905.0098 -13102.8457]", + "[-15231.1914 5430.7559 -13103.3213]", + "[-15207.083 5961.5078 -13103.248]", + "[-15147.8994 6471.3169 -13102.8887]", + "[-15040.9473 6977.9517 -13103.0762]", + "[-14901.5771 7480.1089 -13102.9668]", + "[-14721.3506 7968.8247 -13102.8398]", + "[-14509.8037 8443.3594 -13103.2158]", + "[-14273.4688 8904.3213 -13102.8125]", + "[-14001.4932 9341.3652 -13102.8867]", + "[-13700.6855 9775.3662 -13103.1826]", + "[-13369.4492 10173.2754 -13102.9834]", + "[-13004.2344 10556.084 -13103.3135]", + "[-12618.9609 10903.2246 -13103.1836]", + "[-12196.5498 11222.8291 -13103.1719]", + "[-11765.5361 11512.8135 -13103.0283]", + "[-11312.0557 11760.0068 -13103.0664]", + "[-10846.0713 11978.1143 -13103.0635]", + "[-10365.5625 12158.2002 -13102.6602]", + "[-9855.3633 12308.4424 -13103.0107]", + "[-9336.8086 12419.5928 -13103.1123]", + "[-8814.9688 12500.0693 -13102.8555]", + "[-8297.2285 12589.2676 -13102.6855]", + "[-7781.4751 12682.4717 -13102.9609]", + "[-7266.0747 12773.001 -13103.1895]", + "[-6751.4019 12863.1543 -13102.9922]", + "[-6237.6489 12953.8721 -13103.2246]", + "[-5724.5381 13043.6104 -13102.8789]", + "[-5212.3623 13133.9619 -13103.2861]", + "[-4701.1182 13225.0127 -13103.2119]", + "[-4190.749 13313.8428 -13103.2588]", + "[-3681.6582 13404.5273 -13103.1514]", + "[-3173.2678 13494.4736 -13103.4385]", + "[-2665.583 13583.8701 -13103.0859]", + "[-2158.7747 13673.8447 -13103.9082]", + "[-1653.545 13762.7412 -13103.1787]", + "[-1130.9767 13854.4971 -13102.8164]", + "[-609.748 13940.5977 -13102.9268]", + "[-84.6057 13987.9209 -13103.1855]", + "[441.4374 13986.5059 -13103.916]", + "[965.5885 13981.709 -13105.4453]", + "[1489.4784 13981.7871 -13106.333]", + "[2013.1453 13981.5693 -13106.1729]", + "[2536.1252 13981.3711 -13106.0801]", + "[3058.29 13982.501 -13106.2002]", + "[3579.5708 13980.8525 -13106.1982]", + "[4099.2954 13982.8975 -13105.8086]", + "[4617.1885 13981.3389 -13105.7529]", + "[5133.8013 13981.0449 -13109.3906]", + "[5651.0449 13982.0176 -13114.8057]", + "[6170.6104 13982.627 -13120.9209]", + "[6693.5986 13980.7207 -13127.7402]", + "[7220.3247 13982.209 -13135.1748]", + "[7751.0757 13982.3389 -13143.374]", + "[8266.0342 13979.9414 -13152.1875]", + "[8785.7754 13981.9805 -13161.9541]", + "[9310.5352 13981.9795 -13170.7373]", + "[9840.748 13979.8945 -13180.1328]", + "[10351.8945 13932.6396 -13185.7822]", + "[10651.9082 13849.8799 -13189.7432]", + "[11130.4434 13654.3174 -13198.9434]", + "[11580.9023 13399.0938 -13207.4268]", + "[12002.9092 13096.0762 -13216.4219]", + "[12400.1465 12755.9902 -13225.6973]", + "[12776.5273 12387.2559 -13234.1143]", + "[13147.1943 12007.6758 -13244.1377]", + "[13508.5713 11643.3594 -13252.7549]", + "[13876.2207 11278.6289 -13262.2891]", + "[14243.1318 10906.6689 -13270.1729]", + "[14554.3125 10482.4678 -13276.7148]", + "[14757.9277 10066.6748 -13284.085]", + "[14920.2666 9562.5371 -13293.2275]", + "[15026.416 9042.8877 -13302.6641]", + "[15084.5479 8512.8418 -13311.6758]", + "[15101.1631 7998.79 -13320.3545]", + "[15093.9375 7481.3579 -13329.8398]", + "[15093.9805 6960.8276 -13337.748]", + "[15092.8359 6437.1831 -13347.2246]", + "[15092.165 5910.3184 -13355.6582]", + "[15092.1406 5380.1523 -13365.417]", + "[15091.0293 4845.9839 -13374.9902]", + "[15092.0322 4330.9863 -13384.0928]", + "[15092.8047 3811.9348 -13393.0791]", + "[15093.0557 3288.8308 -13402.2148]", + "[15092.9727 2761.6953 -13411.7646]", + "[15092.0713 2230.5181 -13421.0713]", + "[15092.7441 1695.3262 -13430.3486]", + "[15092.9063 1180.644 -13439.627]", + "[15093.0273 662.3208 -13448.7861]", + "[15091.2256 140.3126 -13458.0469]", + "[15092.3125 -385.3085 -13466.8955]", + "[15093.2734 -914.6255 -13476.5059]", + "[15094.0703 -1447.6023 -13485.7529]", + "[15092.9375 -1984.1904 -13495.6172]", + "[15091.8594 -2498.6252 -13504.4922]", + "[15092.8457 -3016.3467 -13513.4766]", + "[15092.9639 -3537.4009 -13522.6084]", + "[15094.124 -4061.7451 -13531.6377]", + "[15093.251 -4589.3662 -13541.2969]", + "[15092.3779 -5120.2847 -13550.1611]", + "[15091.6338 -5654.1714 -13555.9365]", + "[15093.6699 -6190.3799 -13560.1279]", + "[15087.3223 -6727.7925 -13560.9385]", + "[15057.251 -7263.9502 -13561.4932]", + "[15006.0557 -7797.415 -13563.1279]", + "[14931.1396 -8327.0732 -13564.1006]", + "[14828.7109 -8851.5908 -13565.2246]", + "[14698.1963 -9368.4395 -13566.0293]", + "[14535.6162 -9874.7568 -13565.9102]", + "[14340.3418 -10367.8525 -13566.5381]", + "[14107.9736 -10843.5527 -13567.8965]", + "[13838.5264 -11298.4014 -13568.1748]", + "[13530.6748 -11727.1436 -13568.2539]", + "[13185.2529 -12124.8994 -13568.3604]", + "[12805.5195 -12488.3701 -13568.5967]", + "[12395.0137 -12814.6426 -13568.4434]", + "[11958.1006 -13102.1807 -13567.5635]", + "[11499.6719 -13351.1553 -13567.4365]", + "[11024.4355 -13563.0508 -13566.8867]", + "[10536.9199 -13741.0332 -13566.1445]", + "[10040.626 -13885.9092 -13565.7119]", + "[9518.5098 -14005.5635 -13564.6992]", + "[9003.8594 -14094.8252 -13564.0049]", + "[8480.3545 -14160.3311 -13562.9824]", + "[7954.4204 -14203.748 -13561.8643]", + "[7434.3096 -14227.2324 -13560.8867]", + "[6915.8828 -14231.6445 -13560.1846]", + "[6401.9136 -14226.916 -13559.9072]", + "[5880.5859 -14227.1709 -13560.0537]", + "[5368.4063 -14264.9248 -13560.1729]", + "[4855.3071 -14380.0127 -13559.8008]", + "[4347.6602 -14485.0547 -13559.126]", + "[3834.1418 -14508.3643 -13559.4756]", + "[3309.9724 -14492.333 -13560.0137]", + "[2789.3259 -14488.7549 -13559.8848]", + "[2270.7615 -14490.0762 -13559.8379]", + "[1754.5435 -14489.4102 -13559.8867]", + "[1230.5498 -14489.6826 -13560.0928]", + "[718.5211 -14491.5186 -13560.0264]", + "[197.7658 -14490.1172 -13560.0068]", + "[-315.6237 -14490.3213 -13560.1748]", + "[-832.5588 -14490.9551 -13560.1494]", + "[-1346.5884 -14490.0664 -13559.9141]", + "[-1867.156 -14489.9971 -13560.1064]", + "[-2383.1721 -14490.6113 -13560.4258]", + "[-2895.9617 -14490.4424 -13560.1758]", + "[-3412.5635 -14491.1162 -13560.0918]", + "[-3929.3398 -14489.9922 -13560.2578]", + "[-4448.4146 -14488.9277 -13560.1396]", + "[-4968.2158 -14489.9971 -13560.0762]", + "[-5490.4668 -14490.8887 -13560.0713]", + "[-6017.5591 -14490.5967 -13560.2598]", + "[-6530.6553 -14490.3672 -13560.1416]", + "[-7057.2104 -14490.9492 -13559.5068]", + "[-7581.27 -14490.2168 -13559.4854]", + "[-8102.6499 -14492.0645 -13559.0869]", + "[-8621.4385 -14491.1445 -13558.8955]", + "[-9136.9834 -14490.5898 -13556.0273]", + "[-9649.1416 -14491.6084 -13553.502]", + "[-10172.415 -14475.7891 -13553.5088]", + "[-10691.5088 -14413.1631 -13554.2939]", + "[-11203.3828 -14298.4863 -13554.2129]", + "[-11700.2959 -14122.0068 -13554.2363]", + "[-12156.4502 -13881.4092 -13554.1504]", + "[-12566.1777 -13569.5811 -13554.0742]", + "[-12908.5205 -13197.6367 -13554.2822]", + "[-13193.8799 -12751.0381 -13554.1885]", + "[-13405.0605 -12263.4199 -13554.0283]", + "[-13548.2139 -11756.71 -13553.2217]", + "[-13632.7109 -11249.7783 -13553.7041]", + "[-13674.9756 -10732.041 -13554.0664]", + "[-13678.5762 -10213.041 -13554.4131]", + "[-13672.0527 -9693.9209 -13565.8145]", + "[-13670.2646 -9177.4658 -13575.0586]", + "[-13670.9434 -8639.9971 -13590.5439]", + "[-13671.9082 -8111.6211 -13604.8311]", + "[-13671.2158 -7594.9043 -13624.6582]", + "[-13669.7559 -7063.2949 -13643.9863]", + "[-13672.4063 -6547.2036 -13668.2197]", + "[-13671.6455 -6017.4365 -13691.4482]", + "[-13670.8867 -5474.229 -13715.2891]", + "[-13671.0244 -4951.3398 -13737.9258]", + "[-13671.1729 -4417.709 -13761.1436]", + "[-13671.2959 -3875.6189 -13785.1016]", + "[-13671.1162 -3360.9922 -13807.6133]", + "[-13670.9072 -2841.4561 -13830.2686]", + "[-13672.0107 -2317.0605 -13853.165]", + "[-13670.7637 -1787.9521 -13873.2979]", + "[-13671.6387 -1254.4857 -13891.2129]", + "[-13671.334 -717.3094 -13906.1465]", + "[-13671.584 -177.4062 -13919.8389]", + "[-13670.7773 363.9147 -13930.2959]", + "[-13671.6826 906.7231 -13938.2832]", + "[-13670.9229 1450.7601 -13943.0176]", + "[-13671.2256 1995.5858 -13947.5615]", + "[-13671.7734 2538.8384 -13946.5518]", + "[-13670.959 3078.5508 -13945.1816]", + "[-13671.4648 3612.9795 -13945.9395]", + "[-13671.9512 4141.1157 -13945.6885]", + "[-13671.166 4662.5811 -13946.2559]", + "[-13671.123 5180.0776 -13946.415]", + "[-13671.2959 5696.645 -13945.1006]", + "[-13672.1445 6212.4766 -13945.9971]", + "[-13670.7266 6726.8115 -13945.5742]", + "[-13657.6504 7240.1836 -13946.207]", + "[-13620.9893 7751.8843 -13945.5732]", + "[-13564.0771 8260.9512 -13945.7334]", + "[-13479.584 8799.6914 -13945.709]", + "[-13366.1729 9331.9951 -13945.9434]", + "[-13222.8848 9855.4404 -13946.4014]", + "[-13047.3818 10367.4639 -13946.0381]", + "[-12835.9971 10864.4277 -13946.0879]", + "[-12587.0566 11342.7139 -13946.2236]", + "[-12300.0879 11797.998 -13945.9941]", + "[-11974.3682 12225.2451 -13946.0459]", + "[-11612.0117 12620.4766 -13946.4316]", + "[-11214.4863 12978.6621 -13946.2031]", + "[-10787.8633 13299.6191 -13946.5322]", + "[-10335.3105 13580.6846 -13946.3213]", + "[-9862.3945 13823.3965 -13946.1484]", + "[-9373.6758 14029.5127 -13946.1543]", + "[-8872.377 14199.9053 -13946.25]", + "[-8362.6826 14339.1807 -13946.1934]", + "[-7846.6753 14448.5693 -13946.1953]", + "[-7327.0229 14532.252 -13945.9287]", + "[-6804.7705 14591.3096 -13946.0205]", + "[-6281.3423 14629.2754 -13945.9775]", + "[-5757.5503 14647.8896 -13945.9277]", + "[-5234.4683 14649.4521 -13946.1182]", + "[-4711.9702 14644.1621 -13952.332]", + "[-4189.7798 14645.707 -13957.2666]", + "[-3666.5459 14644.249 -13968.2607]", + "[-3141.9226 14644.6133 -13977.4277]", + "[-2615.3423 14645.2559 -13986.9443]", + "[-2086.8281 14644.4609 -13996.5283]", + "[-1556.4735 14644.8447 -14005.8477]", + "[-1024.1946 14645.4326 -14015.0771]", + "[-490.0281 14644.4268 -14024.5]", + "[45.7237 14645.9648 -14034.0527]", + "[582.9904 14644.1846 -14043.3271]", + "[1121.6736 14644.375 -14052.7754]", + "[1662.197 14645.8984 -14062.1309]", + "[2204.416 14644.3145 -14071.7842]", + "[2746.3616 14644.7734 -14081.1299]", + "[3285.9336 14646.3555 -14090.8887]", + "[3821.019 14643.9717 -14100.0049]", + "[4349.6226 14644.415 -14108.9111]", + "[4870.8994 14645.9541 -14118.2803]", + "[5383.4761 14644.9199 -14122.4072]", + "[5917.4058 14643.7783 -14126.4404]", + "[6438.8994 14645.5869 -14125.542]", + "[6976.3179 14644.8799 -14124.709]", + "[7496.3071 14633.3418 -14125.3916]", + "[8025.563 14598.6533 -14125.4951]", + "[8559.71 14540.792 -14125.1846]", + "[9070.917 14461.5557 -14125.0488]", + "[9581.625 14356.6475 -14125.1006]", + "[10085.708 14223.9043 -14125.4277]", + "[10575.832 14062.3086 -14125.1846]", + "[11054.6582 13868.9053 -14125.3848]", + "[11520.9209 13639.6572 -14125.3379]", + "[11963.7129 13377.0957 -14125.2656]", + "[12393.5215 13069.4658 -14125.5625]", + "[12792.668 12726.9668 -14125.4404]", + "[13159.3643 12350.3936 -14125.3633]", + "[13491.8906 11941.7051 -14125.2529]", + "[13787.1006 11502.7383 -14125.4541]", + "[14039.5273 11053.8232 -14125.1143]", + "[14259.9297 10576.4766 -14124.8203]", + "[14446.6631 10083.1934 -14124.5195]", + "[14600.0684 9577.4531 -14125.2021]", + "[14721.6973 9076.9014 -14125.0293]", + "[14817.8535 8554.0684 -14124.9766]", + "[14888.2988 8035.4834 -14125.1201]", + "[14937.9189 7503.3242 -14125.2646]", + "[14965.3379 6982.498 -14124.8086]", + "[14974.7871 6454.5859 -14125.0479]", + "[14971.4746 5924.4028 -14129.5049]", + "[14970.3105 5393.6782 -14134.3398]", + "[14970.3828 4861.0122 -14142.873]", + "[14968.9395 4326.1875 -14153.6475]", + "[14969.7314 3796.8057 -14157.6084]", + "[14970.5752 3280.0962 -14161.8066]", + "[14970.4238 2763.7922 -14160.959]", + "[14970.3652 2242.178 -14160.3223]", + "[14971.3086 1723.7246 -14160.8818]", + "[14972.3213 1210.4207 -14160.668]", + "[14970.9229 687.9749 -14161.0039]", + "[14970.8818 173.6741 -14160.5996]", + "[14970.582 -346.9815 -14160.8838]", + "[14970.3174 -860.4563 -14160.6494]", + "[14972.0693 -1379.6641 -14160.9727]", + "[14971.3057 -1892.0774 -14160.8662]", + "[14970.3066 -2409.2749 -14161.1201]", + "[14970.7393 -2930.9368 -14161.0449]", + "[14970.0107 -3448.2104 -14161.1328]", + "[14970.6123 -3960.8887 -14161.0273]", + "[14971.8369 -4478.5781 -14161.0137]", + "[14971.1025 -4997.3242 -14161.04]", + "[14970.5547 -5513.1919 -14164.8789]", + "[14969.9072 -6028.168 -14170.249]", + "[14970.1152 -6549.8496 -14178.8916]", + "[14969.4844 -7074.8369 -14188.8926]", + "[14970.0576 -7601.3203 -14197.9541]", + "[14970.3672 -8118.6138 -14207.0605]", + "[14970.7168 -8637.9492 -14215.9893]", + "[14971.4102 -9156.2119 -14225.1152]", + "[14970.6973 -9669.6582 -14234.1885]", + "[14969.3828 -10197.6367 -14243.376]", + "[14969.0869 -10717.2959 -14252.2129]", + "[14968.7363 -11248.5576 -14261.6602]", + "[14897.584 -11762.8145 -14267.7012]", + "[14777.0264 -12134.4131 -14273.8359]", + "[14542.3477 -12613.5088 -14282.6533]", + "[14264.3623 -13047.2471 -14291.4141]", + "[13939.1094 -13455.9717 -14300.5488]", + "[13577.124 -13842.4639 -14309.751]", + "[13202.9102 -14192.8135 -14318.0303]", + "[12771.9629 -14484.7021 -14330.5303]", + "[12290.0566 -14698.9795 -14341.3174]", + "[11777.2041 -14845.1475 -14352.3428]", + "[11272.0488 -14934.5264 -14362.2266]", + "[10754.9248 -14979.7832 -14371.1572]", + "[10230.1104 -14987.5664 -14381.0879]", + "[9699.4834 -14980.4971 -14390.2744]", + "[9163.457 -14978.4854 -14398.3789]", + "[8648.6895 -14980.8555 -14408.3936]", + "[8128.499 -14978.2295 -14417.4404]", + "[7602.6558 -14979.2178 -14426.3369]", + "[7071.2373 -14978.2676 -14434.458]", + "[6535.0005 -14977.917 -14445.1953]", + "[6022.7573 -14979.2041 -14453.5391]", + "[5508.5293 -14977.2266 -14456.4678]", + "[4969.5068 -14978.4521 -14459.6943]", + "[4438.4287 -14978.2656 -14458.4297]", + "[3917.313 -14979.5156 -14457.9248]", + "[3380.082 -14977.1455 -14458.2803]", + "[2854.6768 -14978.793 -14457.8887]", + "[2340.8411 -14977.9619 -14458.1611]", + "[1813.8879 -14978.8438 -14458.0566]", + "[1299.7662 -14978.1709 -14458.3525]", + "[774.8915 -14978.4941 -14458.2686]", + "[241.2715 -14977.9385 -14458.2725]", + "[-277.3934 -14979.0986 -14458.3525]", + "[-805.1015 -14976.7197 -14457.9658]", + "[-1322.8323 -14979.2783 -14458.2471]", + "[-1854.8091 -14979.0195 -14458.1436]", + "[-2382.4143 -14979.4678 -14458.1377]", + "[-2909.0227 -14978.9971 -14457.3877]", + "[-3434.9126 -14977.6992 -14458.2813]", + "[-3960.0361 -14979.1641 -14458.0264]", + "[-4484.3691 -14977.5947 -14457.7813]", + "[-5007.9858 -14978.6396 -14458.167]", + "[-5530.7739 -14979.6426 -14458.0664]", + "[-6052.8599 -14978.8096 -14458.2139]", + "[-6573.8047 -14962.9404 -14457.6279]", + "[-7090.2104 -14900.8154 -14457.8223]", + "[-7595.5718 -14787.1133 -14458.3164]", + "[-8081.5952 -14616.7207 -14458.2852]", + "[-8552.9063 -14369.7461 -14457.46]", + "[-8974.4795 -14049.3643 -14458.4707]", + "[-9304.8691 -13689.998 -14458.123]", + "[-9590.4736 -13245.9316 -14458.1152]", + "[-9801.5107 -12762.8369 -14458.3145]", + "[-9944.4746 -12255.2803 -14458.2979]", + "[-10033.2285 -11731.2188 -14457.9463]", + "[-10075.5781 -11214.8047 -14457.8271]", + "[-10078.6904 -10685.1582 -14457.959]", + "[-10005.8564 -10175.7051 -14457.5342]", + "[-9851.9932 -9707.4414 -14457.9785]", + "[-9614.7373 -9232.5742 -14458.0361]", + "[-9326.0469 -8791.9502 -14458.334]", + "[-9001.1367 -8381.3047 -14457.8193]", + "[-8646.582 -7998.7593 -14458.0176]", + "[-8268.5596 -7641.373 -14461.8779]", + "[-7893.9106 -7280.4878 -14467.1123]", + "[-7518.9058 -6918.3159 -14468.7822]", + "[-7141.9517 -6556.7646 -14473.3564]", + "[-6767.3267 -6192.8452 -14475.4199]", + "[-6390.8457 -5830.4375 -14474.6387]", + "[-6017.6895 -5471.3608 -14474.3008]", + "[-5639.9458 -5105.1079 -14474.3789]", + "[-5270.9297 -4747.9468 -14474.4814]", + "[-4896.0376 -4386.4155 -14474.7783]", + "[-4517.0796 -4019.4722 -14474.458]", + "[-4145.1797 -3662.4382 -14474.5957]", + "[-3769.9263 -3299.3821 -14474.5664]", + "[-3390.0229 -2932.6726 -14474.4678]", + "[-3020.4465 -2575.0298 -14474.3945]", + "[-2648.689 -2215.4785 -14474.4355]", + "[-2275.1646 -1853.8812 -14474.4971]", + "[-1898.6244 -1491.0917 -14474.4033]", + "[-1521.3237 -1125.3468 -14473.9229]", + "[-1151.1342 -770.4391 -14473.915]", + "[-781.0475 -411.7017 -14474.3809]", + "[-407.1492 -52.3674 -14474.0234]", + "[-31.9803 312.3365 -14474.2705]", + "[342.0325 673.2186 -14474.1816]", + "[714.6779 1032.1144 -14474.4453]", + "[1085.3425 1390.0911 -14474.3447]", + "[1454.3799 1746.8116 -14474.627]", + "[1832.0244 2111.4653 -14474.415]", + "[2207.98 2474.7178 -14474.2813]", + "[2583.1528 2835.6973 -14474.3496]", + "[2956.0552 3195.8848 -14474.4268]", + "[3326.6719 3555.2612 -14474.4463]", + "[3697.6743 3911.0852 -14474.4277]", + "[4074.6052 4276.9453 -14474.4385]", + "[4451.1367 4639.8838 -14474.3613]", + "[4824.7744 5002.4912 -14474.4102]", + "[5198.3188 5361.8506 -14474.6953]", + "[5569.4551 5720.269 -14474.3838]", + "[5938.9126 6077.0723 -14474.4268]", + "[6316.3521 6440.9956 -14474.4414]", + "[6691.3257 6803.8545 -14474.4365]", + "[7065.3457 7164.0889 -14474.4375]", + "[7437.1772 7522.9009 -14474.1934]", + "[7805.9946 7880.9673 -14474.4326]", + "[8177.5439 8239.2803 -14474.6563]", + "[8551.959 8601.1484 -14474.5986]", + "[8922.2822 8957.1299 -14473.9678]", + "[9147.5654 9176.3691 -14474.2646]" + ] +] \ No newline at end of file diff --git a/lua/metrostroi_data/track_gm_metro_crossline_m12.lua b/lua/metrostroi_data/track_gm_metro_crossline_m12.lua new file mode 100644 index 0000000..51f4853 --- /dev/null +++ b/lua/metrostroi_data/track_gm_metro_crossline_m12.lua @@ -0,0 +1,2303 @@ + + + + +[ + + [ + "[-4626.2847 -15204.1553 -13547.4961]", + "[-5137.6255 -15131.0068 -13547.5859]", + "[-5642.3594 -15023.002 -13547.5596]", + "[-6147.9937 -14916.6143 -13547.3223]", + "[-6649.6201 -14810.0781 -13547.4912]", + "[-7153.8091 -14702.8809 -13547.7305]", + "[-7659.5586 -14594.7949 -13547.625]", + "[-8167.0557 -14512.2324 -13547.6611]", + "[-8315.3057 -14499.9941 -13547.5]" + ], + + [ + "[-1096.6074 -8376.4287 -11889.499]", + "[-1029.2598 -8300.9541 -11889.5615]", + "[-719.4922 -7892.1626 -11889.5889]", + "[-442.0692 -7460.3481 -11889.5996]", + "[-139.6663 -7042.0884 -11889.6768]", + "[194.9994 -6649.8872 -11889.6387]", + "[553.7519 -6279.3921 -11889.6338]", + "[921.8335 -5920.5068 -11889.5361]", + "[1291.8401 -5563.2876 -11889.4727]", + "[1661.0477 -5207.6382 -11889.3369]", + "[2036.4531 -4844.3442 -11889.583]", + "[2411.6409 -4482.6802 -11889.4434]", + "[2786.2896 -4121.9272 -11889.46]", + "[3159.7939 -3760.6028 -11889.4639]", + "[3532.5203 -3401.2236 -11889.3818]", + "[3902.6375 -3043.4844 -11889.4385]", + "[4281.7749 -2677.8044 -11889.5107]", + "[4658.5176 -2313.4211 -11889.46]", + "[5032.1685 -1951.6207 -11889.4053]", + "[5403.8379 -1593.7009 -11889.4736]", + "[5783.1982 -1227.0143 -11889.5254]", + "[6156.4351 -867.1202 -11889.2607]", + "[6537.1025 -499.2715 -11889.2842]", + "[6913.0356 -136.9785 -11889.249]", + "[7282.8604 220.4503 -11889.3086]", + "[7659.8682 585.9918 -11889.2363]", + "[8032.4678 944.4391 -11889.2363]", + "[8410.1318 1309.1621 -11884.7559]", + "[8779.5498 1665.0957 -11880.1123]", + "[9150.4404 2023.3118 -11871.1338]", + "[9524.168 2384.2427 -11862.0078]", + "[9898.6992 2745.989 -11848.3154]", + "[10273.3076 3108.2769 -11834.1895]", + "[10645.8135 3468.054 -11816.2773]", + "[11016.8389 3825.4543 -11797.8086]", + "[11397.4805 4193.3755 -11774.6973]", + "[11772.9697 4556.1465 -11751.1113]", + "[12142.3213 4912.8115 -11724.1699]", + "[12516.0771 5273.7944 -11696.1318]", + "[12891.7314 5636.7017 -11664.041]", + "[13266.2461 6000.9707 -11631.3223]", + "[13614.4736 6379.9429 -11600.9248]", + "[13936.0928 6791.7666 -11569.6318]", + "[14216.1348 7232.8291 -11538.6924]", + "[14438.5361 7698.7153 -11508.8486]", + "[14590.7246 8190.7617 -11481.083]", + "[14661.1133 8701.0195 -11455.8906]", + "[14665.1592 9212.8291 -11429.3184]", + "[14666.376 9728.374 -11402.0518]", + "[14666.7402 10239.7725 -11376.5244]", + "[14667.6348 10752.04 -11359.9473]", + "[14667.7354 11271.7188 -11352.0361]", + "[14663.5918 11792.5146 -11351.3926]", + "[14625.9033 12308.1699 -11350.9854]", + "[14545.666 12824.373 -11352.2373]", + "[14411.4863 13334.7178 -11352.1064]", + "[14219.4805 13811.0303 -11351.626]", + "[13958.999 14256.6279 -11351.4824]", + "[13627.9834 14653.6768 -11351.2295]", + "[13241.8047 15005.9756 -11351.8721]", + "[12826.4512 15331.3887 -11352.0283]", + "[12393.2363 15606.9375 -11351.9707]", + "[11928.582 15833.9756 -11351.4707]", + "[11433.2705 15994.9033 -11351.6016]", + "[10915.8193 16074.5928 -11351.4619]", + "[10389.6426 16080.9932 -11351.5635]", + "[9875.2158 16080.9258 -11351.5166]", + "[9351.7646 16081.1045 -11351.5508]", + "[8818.8389 16080.207 -11351.5537]", + "[8299.3291 16080.3857 -11351.5166]", + "[7770.8262 16080.4424 -11351.498]", + "[7256.9673 16080.4668 -11351.4883]", + "[6734.5835 16080.4814 -11351.4844]", + "[6203.9365 16080.6924 -11351.4219]", + "[5688.9302 16081.4766 -11351.4053]", + "[5166.21 16080.2793 -11351.4971]", + "[4635.5249 16081.2529 -11351.4541]", + "[4122.2339 16081.1484 -11351.4229]", + "[3601.5227 16081.1357 -11351.4033]", + "[3073.0488 16081.1387 -11351.3926]", + "[2537.2075 16080.9805 -11351.2461]", + "[1998.9559 16080.0928 -11343.3545]", + "[1486.5038 16080.665 -11326.5977]", + "[950.9434 16080.8604 -11299.9287]", + "[419.6567 16080.5771 -11272.0576]", + "[-107.7735 16081.2686 -11244.4609]", + "[-631.209 16080.3301 -11217.0156]", + "[-1150.8995 16081.0771 -11189.7539]", + "[-1666.5239 16081.0996 -11162.7158]", + "[-2178.2473 16081.0537 -11135.8906]", + "[-2711.0867 16081.0361 -11107.9629]", + "[-3242.0066 16081.0234 -11085.999]", + "[-3771.8267 16081.1289 -11071.8682]", + "[-4292.9175 16080.625 -11068.417]", + "[-4823.5791 16080.5723 -11063.7412]", + "[-5359.729 16080.5586 -11058.96]", + "[-5876.7505 16080.624 -11054.5039]", + "[-6401.1064 16077.752 -11051.4346]", + "[-6925.0986 16047.1895 -11052.6328]", + "[-7450.7554 15973.7109 -11052.1191]", + "[-7971.605 15844.1182 -11052.3379]", + "[-8450.1631 15661.0215 -11052.3535]", + "[-8900.1348 15409.9043 -11052.1006]", + "[-9303.2158 15088.2217 -11051.4736]", + "[-9657.4795 14707.7168 -11052.5391]", + "[-9982.8809 14299.2529 -11051.4297]", + "[-10273.3369 13861.75 -11052.3926]", + "[-10511.8252 13388.5723 -11052.6855]", + "[-10682.165 12885.7734 -11052.4766]", + "[-10769.9668 12360.5049 -11051.751]", + "[-10778.0127 11824.7031 -11050.874]", + "[-10778.2627 11311.0557 -11050.8076]", + "[-10777.8213 10790.8721 -11050.8164]", + "[-10778.415 10263.5771 -11051.1064]", + "[-10777.6709 9729.623 -11051.167]", + "[-10777.4111 9190.126 -11051.2813]", + "[-10777.7109 8674.8818 -11051.2324]", + "[-10752.6895 8157.6084 -11050.5313]", + "[-10647.5898 7637.6206 -11042.1445]", + "[-10551.5635 7133.2798 -11045.3174]", + "[-10547.4668 6999.4136 -11035.8906]", + "[-10542.2197 7003.478 -11049.7393]" + ], + + [ + "[-10529.3105 7654.9883 -11050.9775]", + "[-10529.2061 7755.3296 -11051.0078]", + "[-10529.3096 8271.1729 -11051.0703]", + "[-10530.9004 8791.8555 -11051.3389]", + "[-10530.2041 9311.9482 -11051.3975]", + "[-10529.9609 9833 -11051.4131]", + "[-10530.499 10355.1162 -11051.3164]", + "[-10530.0527 10879.8789 -11051.2715]", + "[-10531.1318 11399.0244 -11051.21]", + "[-10513.1846 11927.29 -11050.1865]", + "[-10415.2139 12444.9551 -11050.2012]", + "[-10234.8223 12940.1553 -11050.8555]", + "[-9996.4453 13395.5625 -11051.0488]", + "[-9706.4512 13826.9863 -11050.9463]", + "[-9373.3936 14237.1025 -11050.8662]", + "[-9019.9395 14609.1914 -11050.3613]", + "[-8608.9629 14925.1729 -11050.248]", + "[-8157.3457 15172.6582 -11050.8076]", + "[-7670.75 15352.4043 -11051.1523]", + "[-7162.1064 15474.3965 -11051.0254]", + "[-6636.9771 15546.5332 -11051.0254]", + "[-6121.9385 15575.8223 -11050.958]", + "[-5596.5952 15577.7773 -11054.9512]", + "[-5077.9668 15578.1074 -11059.3965]", + "[-4565.2256 15577.6367 -11063.7959]", + "[-4039.5454 15578.1777 -11068.3809]", + "[-3522.9177 15578.0371 -11074.3145]", + "[-2989.8569 15577.5117 -11089.6641]", + "[-2457.5818 15577.4014 -11115.0791]", + "[-1924.7443 15577.9551 -11142.9395]", + "[-1392.3823 15577.9766 -11170.8164]", + "[-862.9835 15578.0117 -11198.5508]", + "[-339.325 15578.042 -11225.9883]", + "[175.9679 15577.7871 -11253.0684]", + "[709.0267 15577.4102 -11281.0234]", + "[1230.2917 15577.6885 -11308.2998]", + "[1765.1365 15575.8145 -11331.3672]", + "[2279.7908 15582.832 -11344.9873]", + "[2801.0825 15578.0186 -11351.3164]", + "[3331.2087 15577.9629 -11351.2373]", + "[3867.3943 15577.8398 -11351.2471]", + "[4410.1499 15577.5332 -11351.2617]", + "[4926.7949 15577.5 -11351.3291]", + "[5449.5664 15577.834 -11351.25]", + "[5978.6792 15578.1982 -11353.4092]", + "[6514.1973 15577.3379 -11358.0117]", + "[7057.7388 15577.0986 -11365.4648]", + "[7574.2148 15578.1807 -11374.4277]", + "[8098.0791 15578.0234 -11383.7607]", + "[8629.7197 15577.5547 -11393.0186]", + "[9168.9014 15577.8369 -11402.625]", + "[9715.6943 15577.3672 -11412.1016]", + "[10229.5713 15551.4824 -11412.7246]", + "[10731.5088 15436.2383 -11412.4238]", + "[11210.2734 15245.6553 -11413.1201]", + "[11662.9043 14996.5156 -11413.376]", + "[12088.5752 14698.9082 -11413.6963]", + "[12492.0371 14363.8896 -11412.6914]", + "[12864.0605 14001.2891 -11412.2861]", + "[13148.7393 13604.9668 -11413.2666]", + "[13400.75 13145.0283 -11410.2793]", + "[13532.7275 12754.6328 -11412.5078]", + "[13657.3281 12242.8525 -11413.4492]", + "[13732.4795 11719.3672 -11413.5859]", + "[13763.9082 11189.2734 -11414.2578]", + "[13765.0596 10653.873 -11415.6328]", + "[13765.5068 10113.25 -11425.7383]", + "[13754.8926 9600.873 -11438.0918]", + "[13781.7012 9076.7852 -11468.7529]", + "[13759.1973 8547.2363 -11496.3623]", + "[13787.4209 8021.2139 -11526.6699]", + "[13729.7441 7556.1973 -11543.3643]", + "[13643.2803 7498.4097 -11548.3984]", + "[13579.5127 7407.061 -11556.2676]", + "[13544.2881 7304.4404 -11562.084]", + "[13540.3047 7198.1948 -11569.0879]", + "[13508.25 7052.6377 -11578.3066]", + "[13357.6025 6688.7119 -11601.5762]", + "[13126.1377 6330.1377 -11619.2109]", + "[13040.999 6276.2061 -11630.1553]", + "[12982.3896 6193.7671 -11636.2686]", + "[12661.1162 5794.6533 -11667.3975]", + "[12308.0605 5418.582 -11698.9199]", + "[11938.1318 5060.2192 -11726.4346]", + "[11570.8076 4704.541 -11753.2227]", + "[11194.457 4342.3091 -11776.5283]", + "[10823.083 3983.2661 -11799.0938]", + "[10446.4707 3618.8306 -11817.5938]", + "[10068.7813 3252.616 -11835.8193]", + "[9694.7666 2891.3777 -11849.5039]", + "[9315.5127 2526.261 -11862.9883]", + "[8935.5264 2158.7471 -11872.1182]", + "[8555.8975 1792.6652 -11880.9551]", + "[8179.4971 1430.1439 -11885.4238]", + "[7808.5664 1072.9989 -11889.2744]", + "[7430.4233 707.4352 -11889.2529]", + "[7060.9985 349.5332 -11889.4824]", + "[6685.6494 -12.0638 -11889.2354]", + "[6303.7456 -381.0271 -11889.2334]", + "[5931.1289 -740.5383 -11889.2354]", + "[5552.1064 -1105.9773 -11889.457]", + "[5184.1548 -1462.2839 -11889.459]", + "[4809.8906 -1823.6198 -11889.415]", + "[4429.1748 -2191.1338 -11889.4785]", + "[4060.3987 -2547.2993 -11889.5342]", + "[3685.6836 -2909.1982 -11889.4248]", + "[3305.1528 -3276.176 -11889.4619]", + "[2918.7371 -3649.5251 -11889.4473]", + "[2545.6458 -4009.4871 -11889.4492]", + "[2177.7273 -4365.7861 -11889.5156]", + "[1802.7778 -4726.8887 -11889.4639]", + "[1428.8461 -5087.8877 -11889.3975]", + "[1060.8671 -5444.3081 -11889.5879]", + "[686.0878 -5806.6865 -11889.4541]", + "[311.3154 -6163.3848 -11889.666]", + "[-79.7193 -6509.4424 -11889.585]", + "[-487.5683 -6823.5015 -11889.6191]", + "[-919.6304 -7105.1587 -11889.666]", + "[-1363.3202 -7370.3477 -11889.5947]", + "[-1722.9309 -7634.3838 -11889.4775]" + ], + + [ + "[1881.3521 -4654.4268 -11887.5234]", + "[1812.6844 -4727.2495 -11887.5459]", + "[1489.2604 -5126.375 -11887.6367]", + "[1204.1279 -5557.1978 -11887.3535]", + "[887.5467 -5960.0879 -11887.5811]", + "[881.3156 -5967.438 -11887.5244]" + ], + + [ + "[694.7581 -5808.5957 -11887.5293]", + "[1108.3242 -5501.312 -11887.5713]", + "[1545.8318 -5233.6831 -11887.6475]", + "[1958.2712 -4928.9922 -11887.6367]", + "[2020.2427 -4876.4736 -11887.5244]" + ], + + [ + "[1666.6274 -10085.4375 -12504.665]", + "[1769.4694 -10085.4785 -12504.9072]", + "[2286.2141 -10037.4766 -12505.0498]", + "[2788.9143 -9923.915 -12504.8018]", + "[3290.4553 -9806.2109 -12504.8145]", + "[3801.1641 -9738.4912 -12504.877]", + "[4314.2148 -9727.6895 -12504.9824]", + "[4827.2925 -9738.5205 -12504.9814]", + "[5340.064 -9737.3877 -12504.9111]", + "[5854.4155 -9737.0576 -12504.9023]", + "[6369.4888 -9736.9336 -12504.8467]", + "[6885.7095 -9736.8701 -12504.7246]", + "[7400.7178 -9719.0205 -12504.8818]", + "[7909.8877 -9639.3994 -12504.8496]", + "[8408.2783 -9519.6104 -12504.8525]", + "[8911.001 -9413.5898 -12504.9746]", + "[9421.5215 -9374.2949 -12504.582]", + "[9498.0635 -9374.9561 -12504.8711]" + ], + + [ + "[5262.3154 -16221.4209 -10739.2773]", + "[5777.1167 -16220.9092 -10739.4854]", + "[6298.5166 -16223.5 -10739.6396]", + "[6816.0513 -16222.7021 -10738.7939]", + "[7330.3789 -16206.8857 -10738.1836]", + "[7846.769 -16171.0947 -10737.3447]", + "[8357.8613 -16115.3008 -10736.1221]", + "[8870.7773 -16036.666 -10735.5176]", + "[9380.8691 -15933.1426 -10735.0117]", + "[9885.1904 -15803.0938 -10733.998]", + "[10379.6436 -15643.9707 -10733.2617]", + "[10860.7432 -15452.3809 -10733.166]", + "[11330.5498 -15226.4492 -10732.541]", + "[11779.7441 -14964.7314 -10732.4092]", + "[12203.5947 -14669.5967 -10732.29]", + "[12598.6318 -14343.2021 -10731.8027]", + "[12969.0615 -13977.9902 -10731.9443]", + "[13303.0654 -13583.9219 -10732.1572]", + "[13601.0596 -13165.9971 -10732.168]", + "[13866.9414 -12717.3691 -10732.6982]", + "[14097.3506 -12252.5576 -10733.1123]", + "[14293.543 -11774.9209 -10733.4619]", + "[14457.3779 -11287.4395 -10733.9893]", + "[14590.4941 -10792.5986 -10734.8936]", + "[14698.7109 -10281.9014 -10735.4512]", + "[14780.8096 -9767.835 -10736.2627]", + "[14839.6396 -9257.7871 -10736.9219]", + "[14878.6123 -8739.8682 -10738.0049]", + "[14896.7871 -8222.9268 -10739.0293]", + "[14897.6699 -7708.4067 -10739.7188]", + "[14897.3408 -7186.937 -10739.7783]", + "[14896.8203 -6669.9287 -10739.7939]", + "[14897.584 -6157.8618 -10739.5869]", + "[14898.0635 -5638.7773 -10739.1729]", + "[14898.5117 -5123.4199 -10739.5615]", + "[14897.668 -4601.1973 -10739.3945]", + "[14898.7109 -4082.48 -10739.3994]", + "[14898.374 -3567.582 -10739.3037]", + "[14896.9092 -3045.7957 -10739.2656]", + "[14897.4971 -2527.8491 -10739.252]", + "[14897.5283 -2013.5515 -10739.2988]", + "[14898.0254 -1500.597 -10739.1572]", + "[14898.21 -987.7671 -10739.46]", + "[14898.5947 -468.9658 -10739.2695]", + "[14897.4277 45.0151 -10739.4609]", + "[14898.3604 566.1174 -10739.1563]", + "[14899.4014 1091.0663 -10739.6172]", + "[14897.2881 1613.0437 -10738.6729]", + "[14892.1621 2130.4817 -10740.4824]", + "[14904.5859 2648.3931 -10744.5029]", + "[14943.8848 3176.2251 -10749.2578]", + "[15012.0156 3705.3779 -10753.8604]", + "[15110.9609 4228.541 -10758.3838]", + "[15239.9551 4726.3813 -10762.9102]", + "[15411.5498 5210.6445 -10766.502]", + "[15592.96 5692.1152 -10771.1963]", + "[15737.2305 6186.2725 -10775.7646]", + "[15853.0537 6688.9238 -10780.0664]", + "[15937.6289 7198.6543 -10784.5479]", + "[15995.5195 7713.9883 -10788.1006]", + "[16023.1514 8233.9326 -10792.4531]", + "[16025.5986 8756.5723 -10799.6914]", + "[16025.6279 9280.9033 -10809.3154]", + "[16026.2715 9806.1387 -10816.293]", + "[16031.25 10330.1729 -10822.1982]", + "[16033.3457 10853.7344 -10822.5234]", + "[16000.8135 11374.3926 -10820.9844]", + "[15928.1152 11889.4658 -10819.2598]", + "[15804.7842 12392.3125 -10817.8799]", + "[15624.792 12875.5205 -10816.5957]", + "[15377.5605 13325.4316 -10815.6211]", + "[15045.7021 13746.2969 -10815.6143]", + "[14648.1533 14100.9355 -10815.5176]", + "[14199.0371 14381.4512 -10816.7842]", + "[13714.8545 14590.2559 -10817.2783]", + "[13208.7979 14734.0234 -10818.6533]", + "[12689.0889 14824.3184 -10820.1113]", + "[12160.9395 14865.3936 -10822.2979]", + "[11627.0928 14868.6221 -10823.6504]", + "[11114.6445 14867.3604 -10823.5146]", + "[10596.7354 14868.7119 -10823.4746]", + "[10070.1289 14867.2744 -10822.3076]", + "[9554.1777 14868.7861 -10825.6426]", + "[9019.7295 14867.3701 -10829.5479]", + "[8497.0166 14869.2568 -10837.0801]", + "[7959.2114 14867.3936 -10845.4307]", + "[7441.4087 14868.917 -10857.7959]", + "[6916.1914 14867.1895 -10870.7393]", + "[6385.7573 14868.127 -10888.0898]", + "[5849.7339 14868.6729 -10906.207]", + "[5308.4219 14868.9619 -10929.5303]", + "[4793.4141 14868.0059 -10951.2764]", + "[4273.2632 14868.0781 -10974.6504]", + "[3747.561 14869.0283 -10997.7979]", + "[3216.2847 14868.4307 -11021.1348]", + "[2679.4058 14868.2969 -11044.6592]", + "[2137.0142 14869.2354 -11068.3027]", + "[1623.6224 14868.3359 -11090.7197]", + "[1105.8341 14867.7773 -11113.2949]", + "[585.5067 14868.0186 -11135.9795]", + "[63.9675 14868.1191 -11158.8096]", + "[-457.6415 14869.1748 -11181.4668]", + "[-978.2203 14868.3447 -11204.3623]", + "[-1497.0664 14868.8193 -11227.0615]", + "[-2013.5636 14868.6143 -11249.4531]", + "[-2526.8777 14868.624 -11272.2744]", + "[-3070.1875 14868.876 -11296.7598]", + "[-3608.4897 14869.0479 -11318.7529]", + "[-4140.7383 14868.6406 -11338.1855]", + "[-4666.3208 14867.5342 -11354.4863]", + "[-5183.6406 14868.8223 -11369.126]", + "[-5723.8882 14869.3203 -11380.9033]", + "[-6253.3472 14867.5664 -11390.7051]", + "[-6770.7134 14869.4277 -11398.2314]", + "[-7308.9629 14872.4951 -11405.9395]", + "[-7846.2202 14874.084 -11407.5664]", + "[-8381.9023 14854.8887 -11406.5967]", + "[-8915.7363 14818.2354 -11405.9551]", + "[-9446.501 14758.7578 -11404.9004]", + "[-9973.2334 14675.8232 -11404.2061]", + "[-10494.1533 14566.585 -11403.4033]", + "[-11007.2549 14428.9736 -11402.6719]", + "[-11509.6504 14259.4648 -11401.7549]", + "[-11998.6836 14057.3203 -11401.2598]", + "[-12470.6885 13820.5703 -11400.8535]", + "[-12921.291 13547.2402 -11400.6914]", + "[-13346.3086 13237.5498 -11400.4658]", + "[-13742.7217 12893.6074 -11400.3984]", + "[-14105.7402 12516.1826 -11400.3662]", + "[-14433.5811 12109.1338 -11400.5869]", + "[-14725.6348 11676.7148 -11400.5742]", + "[-14980.3604 11222.3203 -11401.0078]", + "[-15200.3779 10750.8984 -11401.4414]", + "[-15386.0928 10265.5996 -11402.1172]", + "[-15540.6045 9770.0791 -11402.7539]", + "[-15665.7852 9266.8154 -11403.6279]", + "[-15765.1543 8758.1113 -11403.8428]", + "[-15837.7559 8245.5068 -11404.9893]", + "[-15890.9824 7730.5708 -11405.8652]", + "[-15921.5303 7213.2969 -11406.4619]", + "[-15932.5898 6694.7124 -11406.542]", + "[-15931.959 6174.6108 -11411.6436]", + "[-15931.9131 5652.2817 -11416.0244]", + "[-15931.6992 5126.9043 -11424.5703]", + "[-15932.1768 4597.5396 -11433.3525]", + "[-15933.2549 4063.5659 -11447.0615]", + "[-15931.2412 3525.563 -11461.2744]", + "[-15931.3057 2986.4119 -11479.8975]", + "[-15932.1201 2448.5566 -11499.1582]", + "[-15932.5547 1914.9012 -11522.9912]", + "[-15931.7314 1387.0255 -11545.9111]", + "[-15932.5752 866.6846 -11568.7324]", + "[-15932.0762 354.8513 -11590.4863]", + "[-15932.167 -174.8827 -11613.8125]", + "[-15932.5137 -692.6439 -11636.3193]", + "[-15932.208 -1222.951 -11659.5479]", + "[-15932.1738 -1738.1062 -11682.2061]", + "[-15932.2344 -2264.177 -11704.7412]", + "[-15932.0498 -2777.5283 -11727.5225]", + "[-15931.9189 -3303.3198 -11750.2422]", + "[-15933.1904 -3817.7737 -11773.0195]", + "[-15932.5391 -4332.1504 -11796.0605]", + "[-15932.0225 -4855.2695 -11816.6963]", + "[-15931.4502 -5385.4185 -11836.1064]", + "[-15931.3662 -5897.353 -11851.2861]", + "[-15932.6611 -6413.373 -11865.5947]", + "[-15931.6748 -6932.8384 -11876.7803]", + "[-15933.3613 -7454.6084 -11886.6406]", + "[-15932.5352 -7977.4263 -11892.5449]", + "[-15932.1826 -8499.7959 -11898.0596]", + "[-15931.2793 -9022.1094 -11899.9023]", + "[-15932.6777 -9543.585 -11899.0723]", + "[-15930.9863 -10063.332 -11900.1211]", + "[-15932.6855 -10581.6074 -11902.6104]", + "[-15934.9902 -11098.9004 -11902.2041]", + "[-15939.7715 -11614.8926 -11901.6836]", + "[-15918.2314 -12129.3916 -11901.6299]", + "[-15857.9199 -12639.7432 -11902.7344]", + "[-15750.0518 -13141.041 -11902.7314]", + "[-15577.877 -13648.9277 -11902.3457]", + "[-15333.2979 -14124.084 -11902.4023]", + "[-15068.9941 -14469.1279 -11901.9463]", + "[-14693.7354 -14839.6084 -11902.3027]", + "[-14294.5977 -15182.7451 -11902.4248]", + "[-13867.8213 -15488.3018 -11902.9727]", + "[-13412.584 -15748.3799 -11902.3203]", + "[-12928.4004 -15946.0342 -11902.1621]", + "[-12420.0322 -16056.4629 -11902.4131]", + "[-11974.2734 -16073.2969 -11903.0137]", + "[-11459.3301 -16074.417 -11902.2666]", + "[-10945.1992 -16078.4678 -11902.6025]", + "[-10432.8623 -16053.3418 -11902.7783]", + "[-9902.167 -15985.542 -11902.9697]", + "[-9381.8945 -15866.2881 -11902.9902]", + "[-8880.9512 -15684.3398 -11902.5938]", + "[-8418.0713 -15426.1621 -11902.6318]", + "[-8120.3525 -15183.3467 -11902.8281]", + "[-7744.0283 -14816.5264 -11902.8506]", + "[-7363.624 -14451.835 -11902.8926]", + "[-6986.144 -14086.917 -11902.9521]", + "[-6613.6055 -13726.7656 -11902.7666]", + "[-6244.1533 -13371.3555 -11902.9834]", + "[-5865.7559 -13005.4141 -11903.1045]", + "[-5486.8159 -12639.1465 -11903.1689]", + "[-5109.7241 -12274.3311 -11903.2422]", + "[-4732.584 -11911.0996 -11903.0957]", + "[-4357.2119 -11547.7461 -11902.7275]", + "[-3982.0801 -11186.1875 -11903.123]", + "[-3612.8262 -10829.2314 -11902.9756]", + "[-3243.3596 -10472.4619 -11903.1885]", + "[-2873.7805 -10115.251 -11903.0322]", + "[-2496.1831 -9750.7207 -11903.29]", + "[-2119.3555 -9387.6563 -11902.8447]", + "[-1743.9722 -9025.8955 -11903.2568]", + "[-1369.5841 -8663.2813 -11902.8184]", + "[-990.9615 -8297.7549 -11902.9756]", + "[-619.3724 -7937.0703 -11902.9248]", + "[-239.4675 -7572.5254 -11902.8525]", + "[140.4459 -7205.7026 -11902.8535]", + "[514.6998 -6844.0601 -11902.833]", + "[885.8907 -6484.271 -11903.1299]", + "[1260.189 -6123.3599 -11903.0273]", + "[1633.7976 -5763.7598 -11901.7275]", + "[2013.043 -5397.1108 -11902.6963]", + "[2387.9973 -5034.5552 -11902.7236]", + "[2767.5674 -4669.5713 -11902.5166]", + "[3145.2588 -4303.2012 -11902.4844]", + "[3523.7444 -3938.8035 -11902.4854]", + "[3900.7468 -3573.4873 -11902.5918]", + "[4278.502 -3209.4912 -11902.5322]", + "[4655.4546 -2845.5144 -11902.4473]", + "[5033.1455 -2482.749 -11902.4277]", + "[5409.1812 -2117.8594 -11902.2266]", + "[5786.8325 -1752.9333 -11901.3154]", + "[6166.2515 -1386.493 -11905.3613]", + "[6548.4414 -1017.4153 -11909.1416]", + "[6934.2017 -645.625 -11917.8838]", + "[7305.1523 -286.8654 -11926.5195]", + "[7676.0938 72.1339 -11939.6709]", + "[8060.7334 442.3056 -11953.1836]", + "[8434.5684 805.1506 -11971.585]", + "[8817.3379 1173.6571 -11989.9258]", + "[9191.0322 1535.0217 -12008.3145]", + "[9573.7031 1904.2417 -12026.835]", + "[9950.2539 2266.7871 -12045.0127]", + "[10319.626 2625.4646 -12062.8652]", + "[10701.9248 2993.3008 -12081.6494]", + "[11072.0322 3353.3169 -12099.4316]", + "[11452.543 3717.8577 -12117.7803]", + "[11821.4033 4077.2234 -12136.0332]", + "[12199.7529 4440.5088 -12154.0869]", + "[12582.2764 4812.1479 -12173.1904]", + "[12955.3584 5170.8325 -12191.8477]", + "[13331.6484 5535.605 -12208.4053]", + "[13712.5225 5902.4683 -12222.8213]", + "[14094.1465 6272.4502 -12235.3594]", + "[14481.3242 6637.3564 -12246.3145]", + "[14862.4268 7008.5796 -12250.4707]", + "[15213.6592 7406.4565 -12250.4053]", + "[15532.0898 7829.1689 -12250.7354]", + "[15804.8604 8281.1367 -12250.5107]", + "[16019.0352 8761.8047 -12250.3857]", + "[16154.4004 9265.8066 -12251.0508]", + "[16182.6426 9592.5127 -12252.2588]", + "[16177.0752 10125.4697 -12246.3477]", + "[16179.6699 10653.3232 -12235.0918]", + "[16178.1846 11177.0498 -12230.7266]", + "[16185.0391 11698.4697 -12224.5049]", + "[16178.7725 12217.5762 -12224.9902]", + "[16132.0146 12732.7002 -12225.0635]", + "[16040.5254 13240.667 -12225.0195]", + "[15895.8057 13735.0273 -12224.874]", + "[15686.7773 14204.1006 -12225.1455]", + "[15394.2979 14650.7051 -12224.9307]", + "[15044.2627 15020.7305 -12224.7988]", + "[14618.585 15333.9609 -12225.1377]", + "[14149.2051 15571.374 -12225.1006]", + "[13652.8438 15739.2139 -12224.9482]", + "[13141.7598 15847.4443 -12224.7588]", + "[12623.5674 15905.1289 -12224.7861]", + "[12102.5762 15918.6572 -12224.3447]", + "[11580.2314 15916.3867 -12226.2031]", + "[11055.7725 15917.0732 -12228.8154]", + "[10526.6416 15916.709 -12232.9922]", + "[10013.6553 15918.0186 -12236.917]", + "[9494.1416 15917.709 -12243.502]", + "[8965.7715 15917.3799 -12249.6543]", + "[8450.2148 15918.8096 -12258.8428]", + "[7924.0576 15917.0508 -12268.0332]", + "[7387.5439 15917.4678 -12277.8838]", + "[6865.895 15916.626 -12286.9785]", + "[6335.123 15916.4658 -12296.3389]", + "[5821.8804 15917.3145 -12305.0879]", + "[5302.9326 15917.5527 -12315.0361]", + "[4780.9214 15917.1328 -12323.4199]", + "[4256.1079 15918.7002 -12328.04]", + "[3728.6125 15917.9502 -12332.9258]", + "[3198.3027 15917.3477 -12342.3984]", + "[2664.5759 15916.749 -12351.54]", + "[2127.5813 15918.1807 -12361.1064]", + "[1614.5314 15918.5918 -12369.9092]", + "[1098.7102 15917.2852 -12379.127]", + "[580.038 15917.1904 -12387.8154]", + "[58.4877 15917.7432 -12397.1807]", + "[-466.1189 15917.2148 -12406.2637]", + "[-993.6073 15917.1191 -12415.5244]", + "[-1523.9318 15917.9658 -12424.8311]", + "[-2056.9978 15917.6533 -12433.79]", + "[-2592.8679 15917.1533 -12443.751]", + "[-3131.7488 15918.2012 -12452.5029]", + "[-3644.6243 15916.6143 -12461.7295]", + "[-4159.791 15918.584 -12470.793]", + "[-4677.2417 15916.4355 -12479.9102]", + "[-5196.8081 15918.8369 -12488.2461]", + "[-5718.4619 15916.1602 -12497.9775]", + "[-6243.6353 15918.0625 -12507.7471]", + "[-6772.646 15916.7227 -12514.0176]", + "[-7304.5132 15920.8467 -12520.1084]", + "[-7839.4106 15919.3457 -12520.7754]", + "[-8377.6514 15899.7314 -12520.4854]", + "[-8892.0547 15861.6777 -12520.4121]", + "[-9413.3818 15801.6436 -12520.4531]", + "[-9940.1338 15716.2988 -12520.623]", + "[-10469.8594 15601.874 -12520.7871]", + "[-10967.6104 15464.0117 -12520.6943]", + "[-11459.5352 15294.9219 -12520.4951]", + "[-11939.9746 15092.0811 -12520.4023]", + "[-12402.8965 14854.2568 -12520.623]", + "[-12844.375 14580.5234 -12520.5703]", + "[-13260.3574 14271.1455 -12520.584]", + "[-13646.0381 13926.6855 -12520.8975]", + "[-13998.9854 13550.1426 -12520.6748]", + "[-14316.5283 13145.793 -12520.4355]", + "[-14612.1865 12692.0352 -12520.7275]", + "[-14865.4502 12220.96 -12520.5381]", + "[-15077.668 11739.833 -12520.5303]", + "[-15252.6191 11255.042 -12520.4766]", + "[-15401.9814 10738.3027 -12520.4355]", + "[-15521.584 10215.1729 -12520.5029]", + "[-15612.2871 9687.0684 -12520.3164]", + "[-15678.3467 9156.0195 -12520.6289]", + "[-15721.3994 8622.7324 -12520.3535]", + "[-15741.625 8087.8535 -12519.3623]", + "[-15742.4502 7551.9346 -12522.2441]", + "[-15741.4365 7014.2749 -12525.9268]", + "[-15743.0176 6476.02 -12533.5342]", + "[-15741.1416 5940.5815 -12542.752]", + "[-15742.5088 5410.4629 -12552.4258]", + "[-15741.5811 4888.7207 -12561.2822]", + "[-15742.3252 4349.5205 -12570.3555]", + "[-15742.1787 3824.2605 -12579.7432]", + "[-15742.2715 3288.8589 -12588.7607]", + "[-15742.7109 2773.4229 -12598.1104]", + "[-15742.1777 2253.0295 -12606.9404]", + "[-15742.6133 1727.7191 -12616.1904]", + "[-15742.0859 1197.1887 -12625.5479]", + "[-15742.8457 683.3571 -12634.5176]", + "[-15743.2666 162.4984 -12643.833]", + "[-15743.1055 -353.5062 -12652.2598]", + "[-15744.25 -873.3384 -12661.7676]", + "[-15743.9863 -1397.1115 -12670.4307]", + "[-15743.543 -1923.699 -12680.5088]", + "[-15743.8037 -2452.1604 -12688.6191]", + "[-15744.0088 -2981.0991 -12694.75]", + "[-15743.5615 -3509.6924 -12698.1377]", + "[-15745.3584 -4036.1201 -12698.8926]", + "[-15744.0449 -4558.7817 -12698.416]", + "[-15745.3848 -5075.5254 -12694.6416]", + "[-15751.7217 -5606.6665 -12688.6045]", + "[-15734.9131 -6129.4438 -12679.2139]", + "[-15679.6924 -6641.1362 -12669.293]", + "[-15573.3145 -7158.3145 -12659.0527]", + "[-15409.2412 -7652.0088 -12647.6904]", + "[-15181.6953 -8112.4346 -12635.9521]", + "[-14904.2578 -8489.0928 -12624.4717]", + "[-14535.5186 -8851.5586 -12615.0195]", + "[-14147.2324 -9186.4834 -12606.1631]", + "[-13719.7266 -9494.9766 -12597.2246]", + "[-13267.9883 -9752.7656 -12588.3662]", + "[-12779.0225 -9954.3174 -12579.7305]", + "[-12275.4365 -10066.127 -12573.502]", + "[-11876.8984 -10083.6416 -12566.918]", + "[-11350.7598 -10083.6309 -12552.7686]", + "[-10835.5234 -10082.4863 -12540.0283]", + "[-10312.9268 -10082.2305 -12530.1943]", + "[-9796.7588 -10084.3359 -12521.9502]", + "[-9284.4141 -10084.1445 -12516.4512]", + "[-8758.8564 -10083.9648 -12513.2451]", + "[-8235.0518 -10083.9053 -12513.1768]", + "[-7712.5493 -10084.8271 -12513.4229]", + "[-7190.9512 -10084.6123 -12513.2197]", + "[-6670.2368 -10083.6855 -12513.0498]", + "[-6150.6582 -10084.5996 -12513.0898]", + "[-5630.2324 -10085.1104 -12513.3311]", + "[-5115.644 -10084.8535 -12513.2119]", + "[-4596.5107 -10083.4248 -12513.3291]", + "[-4076.7263 -10083.8887 -12513.4209]", + "[-3562.8484 -10084.0225 -12513.4404]", + "[-3047.978 -10084.1094 -12513.4902]", + "[-2534.6677 -10084.1035 -12513.5713]", + "[-2018.2637 -10084.416 -12513.4629]", + "[-1504.9806 -10085.1191 -12513.5332]", + "[-988.0532 -10084.9727 -12513.4521]", + "[-474.2582 -10084.7539 -12513.542]", + "[42.6803 -10084.127 -12514.207]", + "[563.3776 -10083.5547 -12514.5547]", + "[1078.1851 -10083.6455 -12514.4863]", + "[1595.8551 -10083.1582 -12514.3105]", + "[2116.0908 -10084.5752 -12514.5811]", + "[2629.5867 -10084.1406 -12514.5986]", + "[3145.3625 -10084.1709 -12514.5967]", + "[3663.1594 -10083.1045 -12514.5225]", + "[4182.5303 -10084.6318 -12514.5273]", + "[4694.8472 -10083.2646 -12514.5039]", + "[5208.1572 -10083.6875 -12514.4863]", + "[5722.0078 -10083.7217 -12514.4893]", + "[6235.9199 -10083.8018 -12514.5]", + "[6749.4351 -10083.4121 -12514.4414]", + "[7261.9512 -10084.5459 -12514.5303]", + "[7781.1338 -10083.4629 -12514.4766]", + "[8296.2617 -10083.3018 -12514.3477]", + "[8811.7168 -10083.0059 -12514.082]", + "[9328.4355 -10082.8252 -12515.4961]", + "[9843.9561 -10084.4004 -12515.4268]", + "[10357.5166 -10085.2832 -12515.458]", + "[10870.2129 -10091.457 -12515.2979]", + "[11390.9814 -10082.166 -12515.6035]", + "[11909.4863 -10024.6504 -12515.4512]", + "[12420.0303 -9943.9434 -12515.5791]", + "[12936.0371 -9828.6221 -12515.1631]", + "[13434.3564 -9672.3896 -12515.709]", + "[13908.9238 -9470.4561 -12515.6494]", + "[14352.7822 -9213.7891 -12515.8027]", + "[14761.8877 -8887.833 -12515.3643]", + "[15109.3877 -8496.0293 -12515.5811]", + "[15363.7568 -8080.2236 -12515.5811]", + "[15556.0615 -7601.939 -12515.625]", + "[15673.6494 -7101.584 -12515.3916]", + "[15725.6748 -6592.0107 -12515.3809]", + "[15724.0117 -6056.624 -12515.5898]", + "[15671.6563 -5524.9839 -12515.4648]", + "[15581.374 -4999.4312 -12515.502]", + "[15491.915 -4474.7036 -12515.4971]", + "[15404.3584 -3951.1614 -12515.2324]", + "[15319.251 -3428.3232 -12515.1689]", + "[15200.623 -2913.6328 -12515.3477]", + "[15042.0078 -2411.2449 -12515.2998]", + "[14831.835 -1930.0077 -12515.582]", + "[14563.7813 -1480.0126 -12515.4277]", + "[14231.5898 -1076.9688 -12515.1689]", + "[13836.5469 -738.8797 -12515.4814]", + "[13410.8281 -488.3743 -12515.6309]", + "[12929.9863 -303.8941 -12515.625]", + "[12428.9395 -194.2706 -12514.4473]", + "[11897.2305 -146.0621 -12515.4092]", + "[11364.8418 -155.1073 -12515.418]", + "[10836.8955 -213.2213 -12515.5146]", + "[10314.7979 -306.1956 -12515.5313]", + "[9792.873 -397.5331 -12515.4971]", + "[9271.6016 -489.8838 -12515.2988]", + "[8750.5742 -579.3104 -12515.5771]", + "[8230.668 -671.372 -12515.6318]", + "[7711.2217 -763.1271 -12515.4189]", + "[7192.4004 -854.3489 -12515.4678]", + "[6674.166 -945.9333 -12515.375]", + "[6156.2134 -1035.8761 -12515.6582]", + "[5638.4126 -1125.7294 -12515.6777]", + "[5120.1338 -1216.6246 -12515.0117]", + "[4600.1523 -1308.2137 -12515.5684]", + "[4077.2373 -1401.7502 -12519.7207]", + "[3572.7368 -1491.0105 -12525.042]", + "[3063.2065 -1581.1047 -12533.2451]", + "[2548.2871 -1673.7793 -12543.4248]", + "[2027.1541 -1766.0859 -12557.2842]", + "[1499.2283 -1859.6481 -12571.3174]", + "[988.1249 -1950.708 -12584.1387]", + "[469.1229 -2041.9574 -12599.9336]", + "[-58.8422 -2134.9329 -12617.4219]", + "[-569.7955 -2227.0962 -12638.0195]", + "[-1087.9731 -2318.5557 -12660.6279]", + "[-1608.0149 -2410.3145 -12683.8291]", + "[-2124.436 -2501.5503 -12706.5303]", + "[-2632.1514 -2592.8796 -12729.2578]", + "[-3152.9353 -2683.0229 -12752.3467]", + "[-3659.5835 -2774.1282 -12774.5723]", + "[-4178.3965 -2864.3469 -12797.5723]", + "[-4685.8315 -2956.1221 -12820.1885]", + "[-5207.3735 -3046.2966 -12843.2666]", + "[-5729.7466 -3140.4229 -12866.4219]", + "[-6241.0981 -3228.9543 -12889.1465]", + "[-6761.6963 -3322.4207 -12912.5811]", + "[-7266.9214 -3411.574 -12935.7988]", + "[-7779.6826 -3501.3811 -12954.4668]", + "[-8298.1221 -3591.886 -12972.918]", + "[-8820.8682 -3683.9373 -12988.3154]", + "[-9346.1621 -3777.3049 -13001.9453]", + "[-9873.3477 -3872.6584 -13012.376]", + "[-10398.5996 -3983.1414 -13020.0059]", + "[-10909.6758 -4035.1582 -13028.0391]", + "[-11422.1074 -3997.9434 -13035.7861]", + "[-11925.124 -3886.5383 -13043.5742]", + "[-12411.8291 -3712.2195 -13052.5889]", + "[-12879.1572 -3488.0557 -13061.5508]", + "[-13328.2725 -3231.5659 -13071.0176]", + "[-13754.0947 -2935.1108 -13076.7705]", + "[-14102.1328 -2588.7207 -13080.6904]", + "[-14410.9502 -2174.5569 -13084.4365]", + "[-14656.3398 -1720.3782 -13088.4473]", + "[-14851.7305 -1242.3383 -13092.7822]", + "[-14999.6221 -748.2213 -13098.04]", + "[-15103.9492 -243.8381 -13102.8926]", + "[-15197.6865 262.0411 -13102.4355]", + "[-15280.5811 769.4897 -13102.5713]", + "[-15316.3574 1281.2261 -13102.5498]", + "[-15314.2764 1793.2721 -13102.4551]", + "[-15310.7764 2330.2427 -13102.5322]", + "[-15303.0752 2866.6826 -13102.3984]", + "[-15293.9307 3402.6472 -13102.4756]", + "[-15281.0908 3937.8848 -13102.3525]", + "[-15267.4805 4472.3418 -13102.3584]", + "[-15251.252 5005.7144 -13102.4795]", + "[-15238.957 5538.6445 -13102.3271]", + "[-15203.4648 6069.5303 -13102.5781]", + "[-15126.3301 6595.2881 -13102.8262]", + "[-15008.9395 7111.8799 -13102.1924]", + "[-14854.4766 7618.02 -13102.2363]", + "[-14661.0566 8108.7695 -13102.416]", + "[-14444.6641 8589.2695 -13102.6602]", + "[-14186.2969 9046.752 -13102.4365]", + "[-13907.4775 9491.373 -13102.6563]", + "[-13593.54 9910.6201 -13102.6104]", + "[-13251.8535 10305.7256 -13102.4326]", + "[-12882.7393 10674.2988 -13102.3262]", + "[-12484.5508 11008.7822 -13102.2305]", + "[-12069.2578 11320.5234 -13102.4531]", + "[-11628.208 11590.5088 -13102.0684]", + "[-11155.748 11840.5977 -13102.2197]", + "[-10679.6426 12045.9404 -13102.3857]", + "[-10191.2764 12215.4121 -13102.3428]", + "[-9680.3887 12347.5352 -13102.4072]", + "[-9161.8799 12439.0518 -13102.4873]", + "[-8657.8389 12529.2148 -13102.3018]", + "[-8147.8994 12617.9854 -13102.4844]", + "[-7631.6289 12709.0957 -13102.666]", + "[-7126.2432 12799.0547 -13102.6816]", + "[-6608.3882 12890.2168 -13102.7451]", + "[-6091.9067 12981.1826 -13102.3623]", + "[-5576.769 13071.3242 -13102.8867]", + "[-5063.1606 13162.3291 -13102.6924]", + "[-4551.0874 13253.8027 -13102.7637]", + "[-4040.1321 13343.3389 -13102.8516]", + "[-3530.4033 13433.083 -13102.8857]", + "[-3015.3389 13523.2822 -13102.8516]", + "[-2506.5449 13612.7666 -13103.3926]", + "[-2001.3617 13703.1865 -13102.5254]", + "[-1494.5056 13794.916 -13102.541]", + "[-984.2197 13889.0137 -13102.2988]", + "[-475.9668 13960.7842 -13102.5039]", + "[52.7509 13981.9287 -13102.6279]", + "[565.1748 13981.1904 -13102.5137]", + "[1082.7131 13981.6709 -13102.5225]", + "[1596.1208 13980.6943 -13102.7012]", + "[2118.104 13981.0166 -13100.9512]", + "[2642.6323 13980.4932 -13102.0713]", + "[3166.7678 13981.7695 -13101.9053]", + "[3691.6301 13982.2197 -13101.5654]", + "[4217.8335 13981.9619 -13102.3281]", + "[4746.1768 13982.3945 -13106.4141]", + "[5277.2788 13981.5762 -13111.709]", + "[5811.0688 13981.5068 -13118.1963]", + "[6324.7524 13982.2725 -13124.8926]", + "[6841.1714 13981.2979 -13131.7949]", + "[7360.8926 13980.3623 -13140.8711]", + "[7883.8311 13980.7676 -13148.8037]", + "[8409.2217 13981.1387 -13158.9639]", + "[8935.54 13991.0117 -13168.1475]", + "[9465.8252 13996.5254 -13175.4297]", + "[9989.8672 13913.5176 -13182.2998]", + "[10495.9238 13748.292 -13191.9424]", + "[10974.1895 13509.9463 -13200.4141]", + "[11404.1348 13231.2178 -13208.7412]", + "[11807.1523 12911.2676 -13217.9561]", + "[12181.9063 12554.8301 -13226.3193]", + "[12547.8779 12184.793 -13235.9775]", + "[12919.3916 11816.8154 -13245.3477]", + "[13294.4063 11449.4482 -13254.9268]", + "[13678.6094 11087.1104 -13263.3311]", + "[14011.3877 10674.8945 -13270.5693]", + "[14269.7197 10211.3936 -13279.1113]", + "[14455.6396 9712.8848 -13287.3311]", + "[14582.1729 9193.5117 -13296.6504]", + "[14653.0127 8661.5898 -13305.6563]", + "[14674.5391 8148.5024 -13314.1758]", + "[14673.5264 7631.9272 -13323.8359]", + "[14673.8428 7111.895 -13332.5781]", + "[14673.3301 6588.4336 -13341.9521]", + "[14673.7734 6060.8408 -13351.1133]", + "[14673.6133 5529.8901 -13360.4258]", + "[14674.1377 4994.0122 -13369.8691]", + "[14673.5273 4478.1021 -13378.9072]", + "[14673.5361 3955.2974 -13387.9482]", + "[14673.6846 3425.4304 -13397.4912]", + "[14674.0273 2888.2078 -13406.9092]", + "[14673.2246 2372.4878 -13415.9932]", + "[14674.2754 1850.5349 -13425.2764]", + "[14673.2334 1322.2454 -13434.417]", + "[14674.6172 787.7406 -13443.9043]", + "[14673.123 247.1772 -13453.4268]", + "[14673.502 -268.9553 -13462.5967]", + "[14674.6152 -790.1378 -13471.708]", + "[14673.083 -1315.4679 -13480.8848]", + "[14674.7578 -1843.2306 -13490.1934]", + "[14674.7402 -2373.2668 -13499.5947]", + "[14673.0957 -2905.4922 -13508.7627]", + "[14674.8232 -3439.8049 -13518.2939]", + "[14673.5049 -3973.9973 -13527.3525]", + "[14674.0088 -4504.6201 -13537.1631]", + "[14674.9473 -5027.1973 -13547.2422]", + "[14674.666 -5568.6372 -13553.7373]", + "[14677.3486 -6095.2808 -13558.834]", + "[14674.6992 -6633.5059 -13559.3604]", + "[14654.2051 -7151.8394 -13559.0771]", + "[14614.2715 -7673.0459 -13558.8564]", + "[14551.8613 -8200.7832 -13558.9492]", + "[14465.6318 -8723.499 -13558.9658]", + "[14350.6543 -9239.6836 -13559.3428]", + "[14209.5449 -9748.3369 -13559.1494]", + "[14035.0938 -10245.1855 -13559.502]", + "[13828.04 -10728.0869 -13559.5146]", + "[13585.0371 -11192.6738 -13559.751]", + "[13305.9033 -11635.085 -13559.4873]", + "[12990.2813 -12050.8076 -13559.2021]", + "[12639.9805 -12436.3398 -13559.3613]", + "[12256.9961 -12787.4131 -13559.4229]", + "[11845.8857 -13103.3438 -13559.3096]", + "[11410.1123 -13382.0039 -13559.2803]", + "[10954.1348 -13623.5195 -13559.5576]", + "[10482.6748 -13830.6914 -13559.377]", + "[9998.9395 -14004.9775 -13559.6074]", + "[9506.0332 -14148.2881 -13559.0986]", + "[9006.5068 -14262.3662 -13559.1934]", + "[8478.9375 -14356.2256 -13559.1621]", + "[7948.5879 -14422.165 -13559.0967]", + "[7417.8384 -14467.4424 -13559.2783]", + "[6893.6724 -14489.1387 -13559.2412]", + "[6363.0615 -14492.2393 -13559.6025]", + "[5832.3218 -14492.7207 -13559.5273]", + "[5300.8145 -14492.1855 -13559.4355]", + "[4788.3081 -14491.1367 -13559.6377]", + "[4272.9102 -14491.1416 -13559.4795]", + "[3754.8669 -14491.457 -13559.4053]", + "[3240.5564 -14491.0273 -13559.6064]", + "[2715.6414 -14492.124 -13559.1963]", + "[2201.4404 -14490.752 -13559.2822]", + "[1682.4519 -14491.8535 -13559.4033]", + "[1165.8231 -14491.5859 -13559.2705]", + "[641.3836 -14491.9971 -13559.4287]", + "[120.1994 -14491.5859 -13559.0156]", + "[-401.6879 -14490.6494 -13559.3594]", + "[-914.2053 -14491.3955 -13559.3711]", + "[-1432.7471 -14490.4209 -13559.3506]", + "[-1947.139 -14490.5674 -13559.4033]", + "[-2461.0437 -14490.7852 -13559.4639]", + "[-2978.2798 -14491.4814 -13559.3125]", + "[-3495.1624 -14491.9619 -13559.5]", + "[-4009.1572 -14491.293 -13559.5732]", + "[-4529.1846 -14491.3164 -13559.3418]", + "[-5042.7666 -14492.1084 -13559.4639]", + "[-5558.5063 -14490.7129 -13559.4492]", + "[-6073.7476 -14490.2471 -13559.7529]", + "[-6590.1655 -14493.0771 -13558.4023]", + "[-7105.7417 -14492.5381 -13558.4658]", + "[-7622.9429 -14492.4697 -13558.3701]", + "[-8141.1904 -14493.2568 -13559.125]", + "[-8662.6055 -14493.3311 -13557.9355]", + "[-9183.1553 -14495.9229 -13554.5566]", + "[-9695.1719 -14499.3242 -13553.2568]", + "[-10209.4756 -14474.2168 -13553.3818]", + "[-10724.4697 -14407.5225 -13553.2783]", + "[-11224.043 -14294.1016 -13553.3164]", + "[-11706.29 -14121.8203 -13553.5908]", + "[-12161.4482 -13880.4883 -13553.6533]", + "[-12572.0146 -13564.5674 -13553.5566]", + "[-12899.6133 -13205.9414 -13553.5576]", + "[-13178.5449 -12774.2686 -13553.6465]", + "[-13388.0107 -12300.4814 -13553.5898]", + "[-13532.5537 -11808.0664 -13553.1895]", + "[-13623.7686 -11304.04 -13553.1504]", + "[-13667.3965 -10791.8135 -13551.7314]", + "[-13672.7959 -10279.5195 -13555.5918]", + "[-13673.0225 -9760.9971 -13563.7207]", + "[-13672.5117 -9243.5137 -13574.7402]", + "[-13672.9512 -8730.374 -13587.376]", + "[-13672.2539 -8216.541 -13602.6396]", + "[-13672.2646 -7694.8745 -13619.8154]", + "[-13673.3027 -7179.6899 -13640.1328]", + "[-13673.1543 -6662.7065 -13662.7393]", + "[-13671.9873 -6147.0996 -13685.3691]", + "[-13672.3711 -5632.9683 -13707.7637]", + "[-13672.0117 -5121.4229 -13730.1094]", + "[-13673.1299 -4596.6514 -13753.0322]", + "[-13673.0146 -4078.4114 -13775.6289]", + "[-13672.9307 -3559.4097 -13798.2119]", + "[-13672.917 -3045.7166 -13820.7959]", + "[-13672.79 -2518.5842 -13844.6924]", + "[-13673.2695 -2001.7 -13864.8262]", + "[-13673.1436 -1476.7107 -13883.9766]", + "[-13672.8115 -954.126 -13899.1768]", + "[-13672.2432 -438.3382 -13913.4316]", + "[-13672.6152 84.9495 -13923.7461]", + "[-13673.6719 613.3101 -13933.9434]", + "[-13672.8154 1127.6636 -13939.6611]", + "[-13672.0635 1642.834 -13945.1963]", + "[-13673.2305 2158.0469 -13945.7705]", + "[-13673.4043 2672.4382 -13945.7461]", + "[-13672.7197 3186.0195 -13945.6309]", + "[-13672.4287 3698.8799 -13945.541]", + "[-13671.9277 4227.6587 -13945.8145]", + "[-13671.6953 4755.2222 -13945.7197]", + "[-13672.793 5281.897 -13945.415]", + "[-13672.3242 5807.7158 -13945.4355]", + "[-13676.0244 6332.3965 -13945.3555]", + "[-13671.1045 6856.106 -13945.2529]", + "[-13647.7744 7377.8623 -13945.5264]", + "[-13605.2295 7897.2959 -13945.6436]", + "[-13541.2832 8412.9492 -13945.6621]", + "[-13453.8105 8923.2998 -13945.8418]", + "[-13341.7021 9426.6729 -13945.5508]", + "[-13201.7676 9921.2803 -13945.6875]", + "[-13031.375 10404.2715 -13945.749]", + "[-12823.1328 10887.6953 -13945.459]", + "[-12579.3057 11351.9492 -13945.6709]", + "[-12299.3037 11792.6719 -13945.6826]", + "[-11984.5977 12206.8848 -13945.7783]", + "[-11636.2471 12590.3994 -13945.7412]", + "[-11256.8174 12940.5225 -13945.6982]", + "[-10849.0322 13253.9355 -13945.7041]", + "[-10417.46 13530.252 -13945.6973]", + "[-9952.5625 13777.4463 -13945.3652]", + "[-9471.8389 13987.3311 -13945.6289]", + "[-8979.5684 14162.6582 -13945.7725]", + "[-8479.1084 14307.7188 -13945.6055]", + "[-7972.5479 14422.9414 -13945.6787]", + "[-7462.1426 14511.7949 -13945.7881]", + "[-6949.79 14577.0381 -13945.7129]", + "[-6435.6147 14620.5176 -13945.5098]", + "[-5918.8042 14643.1934 -13944.7822]", + "[-5397.832 14645.3418 -13946.248]", + "[-4870.1372 14645.6084 -13950.1084]", + "[-4350.4541 14646.0215 -13956.002]", + "[-3822.1226 14647.0713 -13965.4404]", + "[-3304.2478 14645.7139 -13974.3994]", + "[-2783.3599 14646.1865 -13983.5068]", + "[-2271.2109 14646.5742 -13992.5693]", + "[-1749.9526 14647.5674 -14001.6543]", + "[-1231.4558 14646.6992 -14010.8057]", + "[-712.8726 14646.9395 -14019.8936]", + "[-192.6584 14646.7598 -14028.8467]", + "[330.5147 14646.7061 -14038.0195]", + "[854.3152 14646.8145 -14047.4238]", + "[1377.7889 14645.3242 -14056.5918]", + "[1892.4185 14646.2783 -14065.665]", + "[2413.8447 14645.8311 -14074.79]", + "[2925.8655 14646.8896 -14083.7959]", + "[3449.353 14645.8623 -14092.9199]", + "[3971.6951 14646.4844 -14102.1787]", + "[4491.3931 14646.5586 -14112.2129]", + "[5013.3027 14645.9502 -14118.0723]", + "[5533.5049 14645.3682 -14123.7412]", + "[6061.1724 14646.0508 -14124.458]", + "[6587.6182 14649.8232 -14124.499]", + "[7105.8872 14647.123 -14124.6465]", + "[7630.396 14627.333 -14124.209]", + "[8153.98 14586.9766 -14124.7666]", + "[8674.8936 14525.8252 -14124.1328]", + "[9191.2461 14440.0586 -14124.3965]", + "[9701.6895 14329.1475 -14124.3477]", + "[10203.5596 14189.2285 -14124.7842]", + "[10695.2441 14019.7578 -14124.6963]", + "[11173.1807 13817.2695 -14124.623]", + "[11633.4033 13579.5684 -14124.7861]", + "[12073 13307.3096 -14124.7314]", + "[12486.8496 12999.2178 -14124.4951]", + "[12870.8584 12656.6729 -14124.3965]", + "[13222.5576 12282.5645 -14124.4795]", + "[13538.8252 11879.6611 -14124.6885]", + "[13832.9209 11432.1641 -14124.5742]", + "[14086.5195 10962.0508 -14124.8613]", + "[14302.5352 10474.707 -14124.7188]", + "[14483.5078 9974.4395 -14124.7598]", + "[14631.5977 9464.2393 -14124.3291]", + "[14749.6934 8947.1006 -14124.4287]", + "[14840.0215 8425.1973 -14124.6553]", + "[14904.8037 7900.4634 -14124.3379]", + "[14948.4141 7373.4756 -14124.2461]", + "[14969.4805 6844.5786 -14123.54]", + "[14972.3379 6314.0537 -14125.9229]", + "[14971.8896 5785.623 -14129.5762]", + "[14971.3398 5267.6904 -14136.4697]", + "[14972.1465 4746.5762 -14146.4805]", + "[14971.9199 4230.8525 -14153.0615]", + "[14972.1748 3706.8711 -14158.5186]", + "[14971.876 3181.0576 -14159.9717]", + "[14971.0059 2664.7048 -14159.9707]", + "[14971.6406 2148.8931 -14160.082]", + "[14971.9688 1628.9651 -14160.2744]", + "[14970.7627 1109.0671 -14159.9697]", + "[14971.7168 591.0348 -14160.2969]", + "[14970.6934 70.6545 -14160.1709]", + "[14970.7607 -444.936 -14160.1816]", + "[14971.7061 -961.359 -14160.3154]", + "[14971.3887 -1474.9913 -14160.2881]", + "[14971.2988 -1988.6174 -14160.1377]", + "[14970.7598 -2503.1047 -14160.3398]", + "[14971.248 -3023.1467 -14160.2744]", + "[14971.5527 -3550.3831 -14160.7109]", + "[14971.7021 -4066.1687 -14160.4766]", + "[14971.9775 -4589.9453 -14159.7178]", + "[14971.1846 -5102.8789 -14161.6406]", + "[14972.5811 -5635.5117 -14165.0732]", + "[14970.916 -6155.0806 -14172.3779]", + "[14971.3906 -6677.5015 -14181.376]", + "[14972.2471 -7191.3643 -14190.2725]", + "[14970.3516 -7710.9653 -14199.3184]", + "[14972.2578 -8233.8271 -14208.3193]", + "[14971.541 -8759.5264 -14217.5234]", + "[14971.4121 -9288.3359 -14227.2324]", + "[14970.4814 -9819.6475 -14235.9395]", + "[14971.6572 -10353.1924 -14245.332]", + "[14990.584 -10887.1895 -14255.1563]", + "[14964.9209 -11424.9473 -14261.2314]", + "[14869.875 -11840.4785 -14267.7588]", + "[14685.2891 -12334.2764 -14277.0527]", + "[14432.3848 -12794.2949 -14285.6592]", + "[14130.3613 -13225.4697 -14294.708]", + "[13788.333 -13628.9434 -14303.6611]", + "[13420.5713 -14012.6836 -14312.5527]", + "[13001.8408 -14343.9346 -14324.0762]", + "[12532.6963 -14595.3105 -14335.0898]", + "[12032.6055 -14777.2773 -14346.0928]", + "[11511.9395 -14897.3721 -14356.7539]", + "[10979.6162 -14966.0205 -14366.5889]", + "[10441.4844 -14981.7939 -14376.8105]", + "[9928.9189 -14980.4121 -14385.3818]", + "[9392.6953 -14980.8525 -14394.8145]", + "[8863.708 -14980.5693 -14404.3213]", + "[8345.2734 -14980.71 -14413.0234]", + "[7815.5679 -14978.752 -14422.4375]", + "[7300.6406 -14979.6006 -14431.2666]", + "[6787.1665 -14978.8789 -14441.1729]", + "[6271.9316 -14978.9307 -14448.7734]", + "[5756.2729 -14978.4424 -14454.1006]", + "[5240.7466 -14979.3896 -14457.6611]", + "[4725.874 -14979.8438 -14457.8691]", + "[4211.5161 -14980.3262 -14457.6953]", + "[3697.6726 -14978.5371 -14457.3301]", + "[3184.2119 -14979.6162 -14457.5947]", + "[2671.0676 -14979.3896 -14457.5527]", + "[2158.2959 -14980.1074 -14457.4912]", + "[1645.8872 -14979.1426 -14457.584]", + "[1133.8523 -14978.7607 -14457.5967]", + "[597.8188 -14978.5527 -14457.6182]", + "[62.2184 -14979.1563 -14457.7295]", + "[-473.0069 -14979.0322 -14457.498]", + "[-1007.8278 -14979.5605 -14457.5859]", + "[-1542.2412 -14979.0459 -14457.4482]", + "[-2076.3042 -14979.8428 -14457.582]", + "[-2609.937 -14978.54 -14457.5684]", + "[-3143.196 -14979.7686 -14457.5967]", + "[-3676.0469 -14980.5029 -14457.5039]", + "[-4208.4961 -14980.0703 -14457.583]", + "[-4740.2583 -14980.7031 -14457.4736]", + "[-5270.9048 -14980.6123 -14457.4385]", + "[-5799.6372 -14986.2119 -14457.4248]", + "[-6327.4585 -14982.0742 -14456.3467]", + "[-6851.4771 -14938.1367 -14457.499]", + "[-7367.8926 -14848.3252 -14457.2959]", + "[-7870.2227 -14704.0957 -14456.9424]", + "[-8347.2549 -14494.918 -14457.0078]", + "[-8783.2998 -14213.7129 -14457.4795]", + "[-9161.9492 -13862.3145 -14457.1406]", + "[-9470.9795 -13451.6484 -14457.5898]", + "[-9716.9033 -12977.0234 -14457.042]", + "[-9890.457 -12473.8604 -14457.4561]", + "[-10002.0645 -11956.6768 -14457.5586]", + "[-10066.54 -11434.2148 -14457.0186]", + "[-10095.1445 -10910.7139 -14457.1689]", + "[-10046.8691 -10391.8271 -14457.0273]", + "[-9915.2861 -9891.3271 -14457.1602]", + "[-9711.7607 -9418.4736 -14457.3623]", + "[-9453.4805 -8974.875 -14457.3086]", + "[-9151.6641 -8560.4766 -14456.9922]", + "[-8814.043 -8174.7383 -14456.1592]", + "[-8437.043 -7806.2573 -14459.8828]", + "[-8057.1665 -7437.376 -14464.8643]", + "[-7681.0615 -7073.792 -14467.6553]", + "[-7308.7065 -6716.4175 -14471.3115]", + "[-6931.2773 -6349.604 -14473.9551]", + "[-6555.0718 -5986.8638 -14473.8154]", + "[-6183.0977 -5627.0024 -14473.9102]", + "[-5807.3359 -5265.2393 -14473.8398]", + "[-5438.4829 -4908.1494 -14473.9023]", + "[-5067.9507 -4550.48 -14473.7041]", + "[-4693.4438 -4189.917 -14473.9004]", + "[-4325.6074 -3833.3535 -14473.8564]", + "[-3955.7854 -3476.2593 -14473.9717]", + "[-3584.2366 -3117.6592 -14473.9736]", + "[-3208.5791 -2755.217 -14473.9023]", + "[-2837.1809 -2395.7041 -14473.7695]", + "[-2463.7881 -2036.5828 -14473.8633]", + "[-2092.5415 -1678.1746 -14473.9053]", + "[-1723.8292 -1320.5155 -14473.9102]", + "[-1345.7498 -955.4337 -14473.3672]", + "[-968.964 -591.0435 -14473.5146]", + "[-592.2402 -228.6299 -14473.5996]", + "[-217.8914 133.8606 -14473.7188]", + "[155.9998 494.6465 -14473.6133]", + "[528.3945 854.8995 -14473.7549]", + "[900.3113 1213.9602 -14473.7373]", + "[1276.7457 1576.1322 -14473.8438]", + "[1648.7681 1937.0281 -14473.7432]", + "[2020.0774 2293.2441 -14473.5781]", + "[2397.3425 2659.3879 -14473.792]", + "[2773.5469 3020.6826 -14473.7969]", + "[3145.022 3379.9211 -14473.8076]", + "[3519.4641 3741.5515 -14473.8271]", + "[3893.0876 4102.1309 -14473.7891]", + "[4266.2163 4463.9453 -14473.751]", + "[4641.9546 4825.7251 -14473.7588]", + "[5010.3862 5182.6675 -14473.7754]", + "[5381.4082 5541.105 -14473.8018]", + "[5757.0073 5902.1152 -14473.7715]", + "[6130.3516 6263.6348 -14473.7725]", + "[6499.186 6620.2168 -14473.7891]", + "[6870.2715 6976.8828 -14473.7676]", + "[7239.9585 7335.6382 -14473.7539]", + "[7608.9233 7690.8252 -14473.7959]", + "[7768.3667 7844.7705 -14473.7988]" + ], + + [ + "[8428.1885 9880.7617 -14473.4756]", + "[8056.2861 9522.2793 -14473.498]", + "[7685.6313 9164.4033 -14473.4443]", + "[7315.9014 8807.6904 -14473.4971]", + "[6946.6963 8450.7236 -14473.4951]", + "[6577.6226 8094.8164 -14473.4912]", + "[6207.8945 7736.3047 -14473.4883]", + "[5836.6548 7378.5093 -14473.4795]", + "[5468.5791 7022.2217 -14473.4883]", + "[5094.8457 6661.8857 -14473.4902]", + "[4722.5356 6302.4028 -14473.4961]", + "[4348.2319 5940.9028 -14473.5059]", + "[3978.376 5583.4253 -14473.4209]", + "[3605.2566 5223.4961 -14473.5752]", + "[3232.7979 4864.0527 -14473.4736]", + "[2861.7524 4505.4141 -14473.4404]", + "[2490.2063 4147.2529 -14473.4834]", + "[2118.0552 3787.9106 -14473.4766]", + "[1748.979 3431.5217 -14473.4805]", + "[1378.9176 3074.2227 -14473.5107]", + "[1010.1139 2718.0024 -14473.416]", + "[640.4346 2360.677 -14473.4111]", + "[270.1243 2003.2192 -14473.5781]", + "[-107.2697 1639.7952 -14473.5137]", + "[-486.5562 1274.52 -14473.4814]", + "[-854.1249 917.6839 -14473.6963]", + "[-1233.1906 553.3994 -14473.5947]", + "[-1609.8578 188.6713 -14473.8037]", + "[-1985.9141 -174.9146 -14473.3164]", + "[-2361.6201 -536.8993 -14473.876]", + "[-2736.1367 -898.4772 -14473.9326]", + "[-3109.2251 -1259.6705 -14473.916]", + "[-3481.7659 -1619.2947 -14474.0986]", + "[-3853.7505 -1977.7286 -14474.1328]", + "[-4225.1069 -2335.0537 -14474.1836]", + "[-4594.0723 -2692.3013 -14474.2021]", + "[-4966.6406 -3051.2563 -14474.0928]", + "[-5336.5908 -3410.4238 -14474.2256]", + "[-5705.9229 -3766.387 -14474.1592]", + "[-6074.3877 -4121.9692 -14474.2324]", + "[-6443.5869 -4478.5884 -14474.2676]", + "[-6814.5039 -4836.9536 -14474.4023]", + "[-7189.0381 -5198.7935 -14474.2393]", + "[-7566.1152 -5562.563 -14474.3291]", + "[-7939.1519 -5924.0015 -14474.1631]", + "[-8308.6475 -6280.4595 -14474.2646]", + "[-8687.8066 -6647.1968 -14474.6064]", + "[-9068.7295 -7014.2622 -14474.3506]", + "[-9439.6992 -7371.665 -14474.3164]", + "[-9814.4834 -7723.2744 -14474.5898]", + "[-10172.4326 -8090.0913 -14474.2354]", + "[-10516.5771 -8497.5254 -14473.8301]", + "[-10821.291 -8933.0332 -14474.4707]", + "[-11077.1729 -9397.4883 -14474.4629]", + "[-11268.8125 -9890.9551 -14474.3496]", + "[-11361.6445 -10364.7637 -14474.3809]", + "[-11373.1367 -10887.0527 -14474.6445]", + "[-11377.2334 -11408.043 -14474.5283]", + "[-11381.124 -11927.5439 -14474.3789]", + "[-11362.1572 -12444.9678 -14474.166]", + "[-11306.0771 -12958.2275 -14474.6934]", + "[-11199.8115 -13461.8203 -14474.415]", + "[-11037.584 -13948.6367 -14474.5547]", + "[-10799.7217 -14425.1143 -14474.5195]", + "[-10491.1426 -14846.3564 -14474.4277]", + "[-10131.291 -15189.2139 -14474.4775]", + "[-9698.123 -15479.001 -14474.6318]", + "[-9220.915 -15698.334 -14474.7617]", + "[-8720.3428 -15849.6475 -14474.6914]", + "[-8207.8662 -15944.8896 -14474.3242]", + "[-7690.375 -15991.0713 -14474.2266]", + "[-7172.3325 -15995.1553 -14474.5508]", + "[-6654.8755 -15996.1104 -14474.4482]", + "[-6138.0029 -15996.5605 -14474.4912]", + "[-5621.7466 -15995.2012 -14474.4834]", + "[-5106.0313 -15995.4512 -14474.5332]", + "[-4590.9312 -15996.8984 -14474.3486]", + "[-4076.4263 -15996.7246 -14474.5596]", + "[-3562.4937 -15995.5098 -14474.5107]", + "[-3049.1382 -15996.3799 -14474.4951]", + "[-2536.3428 -15995.9717 -14474.5098]", + "[-2024.1918 -15997.0068 -14474.5352]", + "[-1495.0127 -15996.1914 -14474.6543]", + "[-966.4457 -15996.123 -14474.4609]", + "[-438.5048 -15996.8945 -14474.5771]", + "[88.813 -15995.6367 -14474.5811]", + "[615.5259 -15995.2139 -14474.5166]", + "[1141.6151 -15995.0566 -14474.6211]", + "[1667.1312 -15996.5039 -14474.5547]", + "[2191.9924 -15995.3242 -14474.5]", + "[2716.2317 -15995.3936 -14474.502]", + "[3239.981 -15996.0957 -14474.5146]", + "[3766.0999 -15996.1143 -14474.7432]", + "[4278.2881 -15995.3359 -14474.5566]", + "[4794.6416 -15996.3955 -14474.5049]", + "[5314.605 -15995.0576 -14474.8535]", + "[5836.6343 -15995.4951 -14475.4932]", + "[6359.4214 -15995.7549 -14472.1182]", + "[6878.7778 -15996.6875 -14468.1729]", + "[7404.375 -15995.2471 -14459.5029]", + "[7921.6494 -15996.2373 -14450.3105]", + "[8436.6582 -15997.9844 -14441.4053]", + "[8954.8604 -15997.9834 -14432.2734]", + "[9475.7432 -15996.7803 -14423.1387]", + "[9990.2266 -15998.0215 -14414.2998]", + "[10504.1621 -15997.9424 -14405.5127]", + "[11017.3057 -16004.5713 -14396.5537]", + "[11534.4268 -15992.0098 -14387.2725]", + "[12051.2031 -15944.2637 -14377.6787]", + "[12555.6699 -15852.7939 -14368.0977]", + "[13047.8477 -15707.2451 -14357.3857]", + "[13520.3848 -15497.8164 -14346.7158]", + "[13938.3301 -15215.9316 -14335.2158]", + "[14316.7295 -14865.0527 -14325.4785]", + "[14671.127 -14487.9736 -14316.6973]", + "[14993.0518 -14086.8809 -14307.8896]", + "[15275.8047 -13652.375 -14299.3594]", + "[15504.7012 -13186.7637 -14290.709]", + "[15663.2998 -12691.7383 -14282.7158]", + "[15715.4209 -12305.2197 -14277.2266]", + "[15718.2051 -11791.6074 -14268.7822]", + "[15718.3223 -11278.7461 -14259.7627]", + "[15718.7168 -10760.2637 -14250.9629]", + "[15718.5205 -10247.3125 -14241.3887]", + "[15718.8252 -9724.3438 -14232.9209]", + "[15718.917 -9208.4688 -14224.0762]", + "[15718.6992 -8688.415 -14215.2891]", + "[15719.001 -8175.813 -14206.1836]", + "[15719.4736 -7657.937 -14197.2227]", + "[15719.042 -7131.4473 -14188.1563]", + "[15718.3838 -6613.9399 -14178.5576]", + "[15719.5127 -6095.3799 -14169.1416]", + "[15719.1016 -5583.23 -14163.9014]", + "[15720.0117 -5060.666 -14159.1777]", + "[15719.9482 -4540.6616 -14159.124]", + "[15719.2451 -4022.1335 -14159.0293]", + "[15718.5449 -3505.0002 -14159.1104]", + "[15719.2031 -2989.3428 -14159.1406]", + "[15718.5303 -2475.1235 -14159.2227]", + "[15718.6924 -1962.364 -14159.2188]", + "[15719.3838 -1437.6194 -14159.1572]", + "[15719.0967 -914.4176 -14159.4189]", + "[15719.3086 -392.7577 -14159.2988]", + "[15719.5723 127.3668 -14159.2549]", + "[15718.5361 645.9255 -14159.3213]", + "[15718.4189 1162.9832 -14159.4502]", + "[15718.4854 1684.7646 -14159.4893]", + "[15718.79 2202.7434 -14159.3408]", + "[15720.333 2717.1602 -14160.1543]", + "[15719.166 3241.1775 -14160.5791]", + "[15718.3584 3758.1011 -14156.7988]", + "[15719.3857 4273.4946 -14153.1025]", + "[15719.5713 4786.9312 -14144.1631]", + "[15718.9912 5306.3198 -14134.3789]", + "[15718.707 5826.8931 -14128.8408]", + "[15719.1318 6346.584 -14123.2773]", + "[15718.5908 6860.7344 -14128.1035]", + "[15720.4824 7388.229 -14133.46]", + "[15723.0059 7904.9902 -14137.7783]", + "[15709.8193 8431.8311 -14137.9014]", + "[15678.3633 8943.5664 -14137.7168]", + "[15626.2891 9461.9346 -14137.6377]", + "[15550.5879 9984.9766 -14137.752]", + "[15448.0537 10511.2197 -14137.9424]", + "[15319.3301 11013.2451 -14137.8486]", + "[15160.7764 11513.292 -14137.7588]", + "[14965.9922 12006.5049 -14137.9141]", + "[14733.7939 12487.292 -14137.916]", + "[14464.3809 12948.0986 -14137.9814]", + "[14156.2949 13382.4561 -14138.1143]", + "[13811.9932 13787.2891 -14137.8584]", + "[13432.1846 14157.1758 -14138.1025]", + "[13021.7266 14490.8574 -14137.8096]", + "[12584.5791 14786.7686 -14137.8281]", + "[12124.8857 15043.9668 -14138.0459]", + "[11647.2451 15263.8027 -14137.8076]", + "[11156.168 15449.041 -14137.8281]", + "[10654.8115 15602.0244 -14137.6006]", + "[10145.8672 15724.0557 -14137.8555]", + "[9632.0391 15820.6719 -14137.8672]", + "[9114.7041 15890.9424 -14137.8936]", + "[8595.7119 15938.8789 -14137.8916]", + "[8076.2158 15966.4365 -14137.8184]", + "[7557.4839 15972.6787 -14137.1074]", + "[7040.8945 15972.4639 -14137.5059]", + "[6526.0718 15972.1162 -14138.2861]", + "[6013.9717 15972.7275 -14138.4844]", + "[5481.0381 15971.8477 -14134.2852]", + "[4952.6934 15972.6025 -14129.6836]", + "[4428.2588 15972.3857 -14120.4629]", + "[3906.7368 15972.5547 -14111.2363]", + "[3386.8044 15971.4141 -14102.499]", + "[2866.1438 15972.0713 -14093.4531]", + "[2344.4988 15971.6406 -14084.0928]", + "[1821.4114 15971.8799 -14074.6592]", + "[1295.8346 15971.377 -14065.9619]", + "[767.2143 15972.835 -14056.3535]", + "[235.8104 15972.1465 -14047.0205]", + "[-298.5806 15972.9541 -14037.6436]", + "[-810.5398 15971.7227 -14028.7881]", + "[-1324.6642 15973.1523 -14019.7598]", + "[-1840.8806 15970.9658 -14010.8145]", + "[-2359.5166 15973.0889 -14001.4922]", + "[-2880.6172 15971.0029 -13992.5127]", + "[-3404.4805 15972.8994 -13983.2139]", + "[-3931.8843 15970.875 -13973.1289]", + "[-4463.3252 15972.9971 -13966.3438]", + "[-5000.1777 15970.8916 -13960.46]", + "[-5516.0723 15973.2041 -13958.999]", + "[-6035.4053 15973.2129 -13958.8096]", + "[-6555.4746 15976.293 -13958.2393]", + "[-7074.2031 15958.834 -13959.1797]", + "[-7591.4858 15924.5576 -13958.8652]", + "[-8106.4365 15869.8936 -13959.1523]", + "[-8617.5791 15791.5859 -13959.1006]", + "[-9124.0449 15690.3018 -13958.8838]", + "[-9623.3252 15561.2666 -13958.9424]", + "[-10113.0732 15402.3984 -13958.96]", + "[-10590.5674 15212.085 -13959.0879]", + "[-11052.3438 14988.5029 -13959.2119]", + "[-11494.9316 14730.7539 -13959.1221]", + "[-11933.8018 14422.207 -13959.1816]", + "[-12342.4482 14076.5098 -13959.1445]", + "[-12716.5742 13695.4609 -13959.2813]", + "[-13053.127 13282.4043 -13959.1475]", + "[-13351.4854 12842.3057 -13959.0645]", + "[-13611.4814 12379.7119 -13958.9639]", + "[-13832.6494 11898.4785 -13959.166]", + "[-14019.4375 11403.8418 -13959.2529]", + "[-14172.2988 10898.5205 -13958.5693]", + "[-14295.0459 10385.9287 -13959.0488]", + "[-14390.6572 9868.2021 -13958.9941]", + "[-14461.5986 9347.1416 -13959.1553]", + "[-14509.5576 8823.9834 -13959.1035]", + "[-14535.4971 8299.7764 -13958.9512]", + "[-14540.9834 7775.5859 -13959.126]", + "[-14539.7334 7251.7881 -13959.1338]", + "[-14541.3877 6728.584 -13959.0352]", + "[-14539.7949 6205.9009 -13959.123]", + "[-14540.5313 5683.6401 -13959.3037]", + "[-14539.1211 5161.7695 -13959.2666]", + "[-14539.9766 4640.3032 -13959.6113]", + "[-14539.9307 4120.7915 -13959.4883]", + "[-14540.9043 3585.4858 -13959.5244]", + "[-14540.2617 3067.4268 -13959.2158]", + "[-14540.5674 2551.7483 -13959.5215]", + "[-14540.127 2027.814 -13959.6172]", + "[-14539.8311 1503.8894 -13960.4473]", + "[-14540.4424 981.5387 -13958.3926]", + "[-14540.3408 469.1763 -13954.8418]", + "[-14540.2275 -49.7917 -13947.7959]", + "[-14540.6318 -572.7419 -13939.6563]", + "[-14539.2197 -1085.0632 -13928.2236]", + "[-14540.083 -1599.7322 -13915.6729]", + "[-14540.373 -2113.4263 -13899.7744]", + "[-14540.5898 -2635.8137 -13882.4521]", + "[-14539.5713 -3148.6519 -13861.8584]", + "[-14540.4365 -3663.9802 -13839.3457]", + "[-14540.6025 -4180.5161 -13816.79]", + "[-14540.5029 -4697.6289 -13794.2256]", + "[-14540.1035 -5212.3418 -13771.7354]", + "[-14539.2979 -5731.1172 -13749.2881]", + "[-14539.0938 -6256.876 -13726.2197]", + "[-14539.7188 -6783.8623 -13703.2041]", + "[-14538.9668 -7301.3408 -13680.4014]", + "[-14539.1494 -7818.8979 -13656.998]", + "[-14540.333 -8333.8643 -13637.5811]", + "[-14539.7852 -8847.4102 -13619.0811]", + "[-14540.3291 -9360.0791 -13604.2871]", + "[-14540.5791 -9873.998 -13590.3936]", + "[-14539.793 -10391.9434 -13580.0166]", + "[-14545.7793 -10904.6533 -13569.0762]", + "[-14543.8086 -11420.6436 -13567.5068]", + "[-14504.0645 -11940.085 -13567.5488]", + "[-14419.8066 -12458.8926 -13567.4326]", + "[-14283.21 -12955.6328 -13567.7295]", + "[-14082.7871 -13434.4609 -13567.6953]", + "[-13810.1543 -13878.8008 -13567.6182]", + "[-13473.5742 -14257.751 -13567.6348]", + "[-13078.9941 -14570.2773 -13567.6514]", + "[-12624.9766 -14821.3896 -13567.7246]", + "[-12137.541 -15003.1963 -13567.7266]", + "[-11637.1445 -15123.0166 -13567.5176]", + "[-11120.7617 -15194.0029 -13567.1348]", + "[-10605.3086 -15215.9209 -13567.2627]", + "[-10088.5859 -15217.3193 -13567.415]", + "[-9573.1885 -15216.4268 -13567.5498]", + "[-9052.1943 -15216.7705 -13567.4336]", + "[-8537.4375 -15216.6084 -13567.4863]", + "[-8022.25 -15216.7998 -13567.9609]", + "[-7509.4512 -15215.7998 -13568.6602]", + "[-6989.0898 -15216.4111 -13563.5898]", + "[-6476.7642 -15214.8018 -13558.6104]", + "[-5958.6484 -15215.0449 -13558.6309]", + "[-5442.8423 -15215.1309 -13558.6074]", + "[-4921.4263 -15215.6875 -13558.5117]", + "[-4405.0273 -15215.9482 -13558.541]", + "[-3892.0178 -15216.499 -13558.6221]", + "[-3374.1575 -15217.2939 -13557.5664]", + "[-2851.7363 -15216.8096 -13558.1777]", + "[-2334.0864 -15216.2803 -13558.2715]", + "[-1817.2628 -15216.2988 -13558.2471]", + "[-1302.6898 -15216.6455 -13558.4219]", + "[-790.3978 -15215.5752 -13558.2148]", + "[-272.2492 -15217.1006 -13558.5156]", + "[243.5378 -15216.1689 -13558.4424]", + "[762.0354 -15217.0889 -13558.5781]", + "[1278.8923 -15216.1338 -13558.4121]", + "[1798.9857 -15215.6113 -13558.5801]", + "[2313.2668 -15216.0615 -13558.4756]", + "[2828.2312 -15215.8516 -13558.4775]", + "[3344.1987 -15216.4238 -13558.4902]", + "[3866.6514 -15216.1758 -13558.2539]", + "[4381.8525 -15216.75 -13558.5381]", + "[4907.3379 -15216.9971 -13558.5137]", + "[5423.8667 -15216.6338 -13558.4365]", + "[5944.3096 -15215.6602 -13558.5293]", + "[6463.3662 -15216.4346 -13558.5713]", + "[6981.0713 -15216.6641 -13558.6406]", + "[7497.3008 -15220.4131 -13558.5596]", + "[8012.0254 -15211.8789 -13558.3096]", + "[8524.833 -15184.9004 -13558.2988]", + "[9035.0156 -15139.6582 -13558.6094]", + "[9555.7266 -15071.0693 -13558.7012]", + "[10070.6064 -14977.7832 -13558.459]", + "[10577.8809 -14857.4219 -13558.3301]", + "[11075.5469 -14708.9697 -13558.6553]", + "[11561.3057 -14530.9668 -13558.667]", + "[12031.8857 -14320.8701 -13558.5088]", + "[12482.6885 -14075.9336 -13558.6826]", + "[12911.3867 -13795.6396 -13558.4697]", + "[13319.1504 -13476.5068 -13558.666]", + "[13701.8604 -13115.9414 -13558.7012]", + "[14049.1387 -12725.9492 -13558.8086]", + "[14358.5273 -12310.4248 -13558.7363]", + "[14631.7783 -11870.0215 -13558.4355]", + "[14873.3408 -11399.6309 -13558.6367]", + "[15073.6855 -10925.5518 -13558.4424]", + "[15240.2412 -10439.7383 -13558.373]", + "[15380.4932 -9929.7881 -13558.1602]", + "[15491.0898 -9418.7041 -13558.4453]", + "[15575.1709 -8911.0889 -13558.6211]", + "[15636.6182 -8389.0059 -13558.4287]", + "[15675.6768 -7876.7334 -13558.4707]", + "[15694.4297 -7355.21 -13559.4785]", + "[15695.3672 -6825.0117 -13556.9619]", + "[15695.1826 -6310.9995 -13553.4131]", + "[15695.6611 -5792.1045 -13546.1514]", + "[15695.6035 -5269.0156 -13536.7373]", + "[15694.8447 -4742.0137 -13527.3672]", + "[15695.7822 -4211.2007 -13518.1846]", + "[15694.4971 -3676.8457 -13508.4307]", + "[15695.6602 -3162.3242 -13499.7402]", + "[15694.5439 -2644.657 -13490.1504]", + "[15696.252 -2124.4092 -13481.6924]", + "[15694.3828 -1601.2164 -13472.0732]", + "[15695.792 -1075.3774 -13462.791]", + "[15694.6055 -546.7988 -13453.5068]", + "[15695.3965 -15.473 -13444.1699]", + "[15695.6162 518.278 -13434.6484]", + "[15695.9678 1054.4885 -13425.1094]", + "[15696.4131 1568.1172 -13416.4707]", + "[15694.7139 2083.8518 -13406.9658]", + "[15695.8916 2600.9727 -13398.2666]", + "[15695.5977 3120.0759 -13388.8438]", + "[15695.4717 3641.1519 -13379.7783]", + "[15695.1914 4164.5605 -13370.5801]", + "[15694.667 4690.1475 -13361.4717]", + "[15695.043 5217.6592 -13351.7686]", + "[15694.9824 5745.6313 -13343.0068]", + "[15695.4336 6270.5454 -13333.8477]", + "[15695.1787 6790.9185 -13324.9561]", + "[15695.792 7306.5762 -13316.1035]", + "[15694.8857 7841.7153 -13306.668]", + "[15696.1084 8370.7285 -13297.7598]", + "[15697.8301 8893.4648 -13288.4893]", + "[15702.5576 9410.0928 -13278.6309]", + "[15678.0879 9942.793 -13270.0859]", + "[15613.8516 10466.1797 -13261.1738]", + "[15500.1768 10975.0234 -13251.9189]", + "[15329.4102 11461.6436 -13243.1963]", + "[15082.0264 11931.5586 -13235.6113]", + "[14840.7188 12240.6982 -13230.4863]", + "[14476.1768 12604.4951 -13221.9023]", + "[14104.3125 12981.1797 -13212.7422]", + "[13733.7178 13349.0625 -13203.2842]", + "[13373.3779 13716.249 -13194.3965]", + "[12998.5088 14087.793 -13185.2266]", + "[12602.3145 14425.0156 -13176.3652]", + "[12184.876 14722.1885 -13167.4922]", + "[11729.042 14981.8975 -13159.0605]", + "[11250.7451 15177.7441 -13150.3086]", + "[10736.9902 15290.2354 -13143.1045]", + "[10313.6074 15307.1035 -13137.4814]", + "[9786.3926 15307.2988 -13127.3252]", + "[9264.7773 15305.8477 -13119.3613]", + "[8747.0068 15307.2021 -13113.5957]", + "[8231.2432 15307.5928 -13110.7842]", + "[7716.7251 15307.9355 -13110.6299]", + "[7202.791 15307.9189 -13110.542]", + "[6689.5591 15307.7666 -13110.3535]", + "[6160.2339 15307.0449 -13110.5283]", + "[5633.9507 15307.502 -13111.4131]", + "[5110.5034 15308.1777 -13109.5859]", + "[4589.4658 15307.5586 -13104.0977]", + "[4070.5063 15307.748 -13101.5684]", + "[3552.7959 15306.8398 -13101.4863]", + "[3037.5625 15308.1533 -13101.2686]", + "[2523.3972 15306.0068 -13101.165]", + "[2010.5188 15307.1963 -13101.5449]", + "[1492.0457 15311.2734 -13101.6729]", + "[975.5134 15316.0566 -13101.21]", + "[462.9599 15273.4746 -13101.5742]", + "[-43.6448 15195.0039 -13101.332]", + "[-561.4869 15102.5586 -13101.5176]", + "[-1078.574 15012.2588 -13101.4648]", + "[-1594.3726 14921.21 -13101.4023]", + "[-2108.947 14830.2617 -13101.7803]", + "[-2622.4084 14739.7021 -13101.6602]", + "[-3134.7451 14649.71 -13101.7334]", + "[-3645.6863 14558.2324 -13101.6992]", + "[-4155.7827 14469.2188 -13101.8779]", + "[-4664.458 14378.875 -13101.6602]", + "[-5172.0425 14289.3906 -13101.8633]", + "[-5678.6147 14200.8037 -13101.7627]", + "[-6183.145 14111.9092 -13101.8975]", + "[-6699.4604 14020.3154 -13102.1416]", + "[-7213.9937 13929.8057 -13101.1689]", + "[-7726.459 13840.3877 -13101.4795]", + "[-8239.8105 13747.9141 -13101.5264]", + "[-8746.6924 13659.0098 -13101.5039]", + "[-9263.4482 13570.6338 -13101.5146]", + "[-9781.002 13487.2588 -13101.249]", + "[-10288.916 13362.0098 -13101.6455]", + "[-10785.8047 13207.3271 -13101.585]", + "[-11272.9443 13010.0195 -13101.5645]", + "[-11733.3857 12784.2256 -13101.4424]", + "[-12176.8369 12527.8418 -13101.5811]", + "[-12598.1162 12232.3877 -13101.5137]", + "[-13010.6357 11906.4785 -13101.4229]", + "[-13383.3525 11552.4717 -13101.7432]", + "[-13737.4365 11171.0684 -13101.7598]", + "[-14055.5889 10769.6289 -13101.2744]", + "[-14349.2588 10332.7441 -13101.583]", + "[-14617.7012 9890.4209 -13101.4473]", + "[-14846.3789 9418.0498 -13101.5723]", + "[-15052.7588 8938.1895 -13101.5283]", + "[-15220.1436 8441.498 -13101.6094]", + "[-15353.3887 7942.9546 -13101.5371]", + "[-15448.458 7434.2383 -13101.1719]", + "[-15497.0986 6919.3916 -13101.4883]", + "[-15517.3154 6398.4629 -13101.3545]", + "[-15536.2852 5883.8887 -13101.6064]", + "[-15553.5566 5370.1763 -13101.3623]", + "[-15572.7031 4857.5396 -13101.6865]", + "[-15585.4844 4345.4971 -13101.5654]", + "[-15601.5547 3818.2896 -13101.4238]", + "[-15612.0195 3291.9155 -13101.4111]", + "[-15621.5 2766.3223 -13101.0703]", + "[-15625.3633 2241.8057 -13101.5791]", + "[-15631.3818 1718.3397 -13101.5332]", + "[-15633.3047 1202.2646 -13101.5439]", + "[-15640.2041 675.9005 -13101.377]", + "[-15624.9297 150.3595 -13101.3379]", + "[-15560.876 -359.7805 -13101.7314]", + "[-15475.1777 -869.2261 -13102.7793]", + "[-15384.9326 -1378.55 -13099.458]", + "[-15261.4365 -1882.1007 -13094.9727]", + "[-15099.1758 -2368.073 -13090.875]", + "[-14887.8135 -2837.7041 -13086.3623]", + "[-14622.1328 -3278.0415 -13082.0664]", + "[-14291.0361 -3672.4531 -13078.5811]", + "[-13947.9727 -3959.7827 -13075.6758]", + "[-13515.0723 -4245.9297 -13067.1426]", + "[-13066.9199 -4498.064 -13058.4268]", + "[-12595.5234 -4711.6538 -13049.2471]", + "[-12102.0391 -4873.8711 -13040.8281]", + "[-11596.8516 -4965.9731 -13032.2598]", + "[-11081.9336 -4967.2119 -13025.2695]", + "[-10561.2568 -4881.3179 -13017.8252]", + "[-10056.5039 -4793.3564 -13009.7578]", + "[-9548.3584 -4702.438 -12998.3623]", + "[-9026.5039 -4610.8188 -12985.2119]", + "[-8513.9629 -4521.8506 -12968.6836]", + "[-7996.3726 -4430.1323 -12951.2246]", + "[-7475.0864 -4337.3032 -12928.8086]", + "[-6970.5186 -4249.2773 -12906.5957]", + "[-6464.4604 -4159.6914 -12883.9297]", + "[-5950.0024 -4070.1882 -12861.2168]", + "[-5441.981 -3980.2712 -12838.748]", + "[-4927.833 -3888.071 -12815.7266]", + "[-4411.9043 -3797.748 -12792.9736]", + "[-3902.3704 -3706.2058 -12770.1416]", + "[-3378.1157 -3613.3354 -12747.373]", + "[-2871.1182 -3525.0356 -12724.9854]", + "[-2358.9805 -3434.479 -12701.9824]", + "[-1842.5604 -3341.9595 -12679.1172]", + "[-1328.2856 -3252.1304 -12655.709]", + "[-820.4259 -3161.5457 -12632.917]", + "[-294.9123 -3067.8635 -12613.9785]", + "[223.6049 -2976.4031 -12595.5283]", + "[734.9421 -2886.9932 -12582.2998]", + "[1239.5156 -2797.4458 -12568.6523]", + "[1762.3285 -2704.5508 -12553.9453]", + "[2279.9565 -2612.0674 -12541.3242]", + "[2793.686 -2521.0952 -12531.6162]", + "[3304.2102 -2429.3696 -12523.416]", + "[3812.98 -2339.2622 -12518.1143]", + "[4320.4395 -2249.2573 -12514.9688]", + "[4826.8604 -2159.6792 -12514.6455]", + "[5332.708 -2070.7117 -12514.6426]", + "[5837.5234 -1981.342 -12514.627]", + "[6341.5674 -1891.3483 -12514.6777]", + "[6868.2451 -1799.3141 -12514.1797]", + "[7393.98 -1705.0752 -12514.6904]", + "[7919.3291 -1613.4458 -12514.6973]", + "[8443.9727 -1519.8864 -12514.6553]", + "[8967.8105 -1427.6533 -12514.6553]", + "[9490.5459 -1334.7142 -12514.623]", + "[10010.4785 -1237.0686 -12514.459]", + "[10530.168 -1145.3282 -12514.248]", + "[11052.6699 -1093.689 -12514.5479]", + "[11575.0508 -1084.0785 -12514.2598]", + "[12093.6631 -1127.4104 -12514.0703]", + "[12600.3926 -1236.4121 -12514.4521]", + "[13082.9434 -1420.0801 -12514.3408]", + "[13525.335 -1681.5634 -12514.4961]", + "[13912.6699 -2015.3231 -12514.2451]", + "[14248.8838 -2425.4739 -12514.3818]", + "[14519.0762 -2879.2253 -12514.1143]", + "[14728.8418 -3361.7576 -12514.332]", + "[14888.3809 -3861.2458 -12514.2646]", + "[15005.0381 -4370.0273 -12514.4795]", + "[15085.5928 -4883.7944 -12513.6514]", + "[15129.9629 -5399.3623 -12514.2363]", + "[15129.4736 -5914.2329 -12514.4863]", + "[15075.8271 -6424.7148 -12513.7275]", + "[14949.7148 -6941.7412 -12514.0781]", + "[14744.3369 -7430.2642 -12514.3604]", + "[14469.1895 -7855.5195 -12514.4902]", + "[14109.2002 -8240.8525 -12514.7051]", + "[13688.9727 -8560.4961 -12514.1094]", + "[13226.502 -8814.7725 -12514.3184]", + "[12738.96 -9011.3252 -12514.1777]", + "[12242.6836 -9157.9043 -12514.2813]", + "[11730.335 -9265.8574 -12514.4775]", + "[11210.8252 -9349.4033 -12514.4609]", + "[10687.377 -9388.4385 -12514.3164]", + "[10167.0039 -9390.54 -12514.6484]", + "[9653.1133 -9389.7207 -12514.3047]", + "[9132.9697 -9390.0508 -12514.2764]", + "[8610.6338 -9389.6465 -12514.3428]", + "[8098.5635 -9390.7246 -12514.4902]", + "[7586.3633 -9390.1416 -12514.6377]", + "[7060.3188 -9390.4414 -12514.5635]", + "[6541.8066 -9389.6357 -12514.3672]", + "[6015.7056 -9389.8955 -12514.3672]", + "[5496.0356 -9389.6865 -12514.7031]", + "[4983.0313 -9389.7393 -12514.4756]", + "[4461.7432 -9390.0381 -12514.5049]", + "[3937.2964 -9389.7324 -12514.4834]", + "[3413.7991 -9389.7393 -12514.498]", + "[2891.22 -9389.8281 -12514.5186]", + "[2369.5752 -9389.3633 -12514.543]", + "[1849.2678 -9389.5352 -12514.4316]", + "[1330.4568 -9389.9775 -12514.4941]", + "[813.4199 -9389.291 -12514.5488]", + "[298.0095 -9388.916 -12514.1162]", + "[-215.937 -9390.8662 -12514.334]", + "[-728.8907 -9390.1309 -12514.2246]", + "[-1255.8831 -9389.3789 -12514.2822]", + "[-1781.7876 -9388.7539 -12514.7314]", + "[-2306.6482 -9390.4648 -12514.6143]", + "[-2830.4707 -9389.7344 -12514.5801]", + "[-3353.1445 -9389.6357 -12514.8086]", + "[-3874.7878 -9389.3613 -12514.7627]", + "[-4395.3057 -9390.5918 -12514.7393]", + "[-4914.7568 -9389.8896 -12514.8242]", + "[-5437.5972 -9389.7314 -12514.7129]", + "[-5952.25 -9389.8369 -12514.9092]", + "[-6475.3901 -9390.3203 -12514.8984]", + "[-6993.791 -9389.9326 -12515.1201]", + "[-7519.6313 -9388.2822 -12514.585]", + "[-8043.6348 -9389.0801 -12516.9248]", + "[-8569.4912 -9388.668 -12520.5771]", + "[-9088.0313 -9387.29 -12527.082]", + "[-9611.0625 -9388.1084 -12535.0215]", + "[-10132.9102 -9386.7939 -12546.9648]", + "[-10646.6484 -9398.2441 -12561.6035]", + "[-11175.6396 -9404.7891 -12571.2461]", + "[-11702.1699 -9318.5029 -12579.6729]", + "[-12189.2764 -9158.9619 -12586.8467]", + "[-12651.1289 -8931.7871 -12595.6377]", + "[-13086.4717 -8652.0938 -12604.4971]", + "[-13499.4619 -8334.7559 -12612.957]", + "[-13890.9004 -7985.291 -12622.1338]", + "[-14224.2432 -7577.4194 -12634.0723]", + "[-14487.0742 -7117.877 -12646.9492]", + "[-14676.8516 -6620.7236 -12658.2783]", + "[-14804.4541 -6100.7793 -12669.168]", + "[-14874.9414 -5591.9551 -12679.0693]", + "[-14897.3564 -5077.9302 -12689.5518]", + "[-14895.8379 -4562.4487 -12695.373]", + "[-14896.8037 -4046.7141 -12701.04]", + "[-14896.4238 -3530.5791 -12701.7236]", + "[-14896.4805 -3015.2002 -12703.8652]", + "[-14896.9375 -2498.7122 -12695.7539]", + "[-14895.5801 -1981.7268 -12685.9951]", + "[-14896.6445 -1463.4232 -12677.5625]", + "[-14894.9541 -940.3709 -12668.208]", + "[-14895.9092 -426.4829 -12659.4033]", + "[-14894.9395 103.0599 -12648.9336]", + "[-14895.1162 619.281 -12640.9326]", + "[-14894.7012 1147.474 -12630.9775]", + "[-14894.5684 1686.2114 -12622.1689]", + "[-14894.7617 2206.3047 -12613.1455]", + "[-14895.6934 2735.1255 -12604.1406]", + "[-14894.6748 3272.0327 -12594.5527]", + "[-14895.1973 3786.2144 -12585.8389]", + "[-14894.8027 4306.8789 -12576.6162]", + "[-14894.4229 4834.4673 -12566.9063]", + "[-14895.1123 5369.4048 -12557.9512]", + "[-14895.8818 5909.9956 -12552.9785]", + "[-14899.8154 6453.6548 -12549.3691]", + "[-14887.3262 6996.208 -12549.3506]", + "[-14855.3584 7534.3179 -12549.6904]", + "[-14802.0137 8065.165 -12549.2324]", + "[-14726.4434 8587.4688 -12549.2168]", + "[-14625.665 9100.416 -12549.3594]", + "[-14498.7764 9603.3164 -12549.4893]", + "[-14342.8398 10094.5723 -12549.3555]", + "[-14157.0459 10573.2871 -12549.2998]", + "[-13936.9355 11035.6729 -12549.4199]", + "[-13667.7861 11505.1816 -12549.5723]", + "[-13358.9385 11948.0732 -12549.585]", + "[-13012.291 12360.6895 -12549.4248]", + "[-12629.7959 12738.4561 -12549.3906]", + "[-12214.9668 13078.3174 -12549.3926]", + "[-11772.5615 13379.0811 -12549.2031]", + "[-11307.2744 13640.8057 -12549.3691]", + "[-10823.3887 13863.8955 -12548.9473]", + "[-10325.9111 14051.8711 -12549.5391]", + "[-9817.7266 14205.2754 -12549.4824]", + "[-9302.5576 14329.4453 -12549.4297]", + "[-8782.2666 14424.2148 -12549.4277]", + "[-8258.957 14495.2588 -12549.1221]", + "[-7733.8926 14542.4365 -12549.2998]", + "[-7208.9468 14568.5557 -12549.8838]", + "[-6685.5322 14573.9521 -12549.5859]", + "[-6164.7954 14572.7734 -12545.4824]", + "[-5647.3345 14572.5361 -12540.2891]", + "[-5133.1807 14572.748 -12531.2578]", + "[-4594.3008 14573.9277 -12521.8721]", + "[-4059.8508 14572.4951 -12512.376]", + "[-3533.3406 14572.5586 -12503.6514]", + "[-3016.178 14571.8105 -12494.6289]", + "[-2480.8821 14574.0361 -12485.1338]", + "[-1953.7332 14572.4141 -12475.7803]", + "[-1433.1992 14573.5205 -12466.7832]", + "[-917.1182 14572.9863 -12457.6475]", + "[-379.736 14573.748 -12448.6689]", + "[152.9161 14572.3027 -12439.127]", + "[680.9774 14572.8857 -12430.0469]", + "[1204.3461 14573.2881 -12420.9375]", + "[1722.9932 14573.748 -12412.2109]", + "[2236.4207 14572.6934 -12403.0469]", + "[2769.7026 14573.75 -12393.5547]", + "[3300.0017 14572.6602 -12384.5488]", + "[3828.3579 14573.415 -12374.8213]", + "[4355.7573 14573.5098 -12364.6016]", + "[4884.0898 14573.3203 -12360.0811]", + "[5413.6328 14573.1064 -12356.0547]", + "[5944.1162 14571.9385 -12347]", + "[6475.1587 14573.1611 -12337.2461]", + "[7005.1245 14572.1563 -12329.0176]", + "[7531.8672 14573.418 -12320.2451]", + "[8050.2134 14571.8789 -12307.1719]", + "[8576.4736 14573.4502 -12293.458]", + "[9106.9697 14574.0283 -12274.248]", + "[9620.4033 14572.9756 -12256.4023]", + "[10139.8252 14573.7686 -12241.5918]", + "[10668.4521 14578.9141 -12227.1777]", + "[11188.2227 14578.8467 -12225.4033]", + "[11699.3574 14544.0801 -12225.3125]", + "[12216.4746 14464.8018 -12225.6152]", + "[12713.9463 14334.498 -12225.4922]", + "[13200.0811 14139.4258 -12225.8535]", + "[13652.3262 13869.416 -12225.5352]", + "[14051.1611 13523.6338 -12225.4502]", + "[14361.9688 13138.5439 -12225.5332]", + "[14619.9434 12682.0176 -12225.251]", + "[14803.7168 12202.7979 -12225.6162]", + "[14929.7041 11699.0166 -12225.3408]", + "[15003.0879 11189.3779 -12225.457]", + "[15031.2822 10669.8096 -12225.1133]", + "[15047.8545 10155.3115 -12225.2559]", + "[15009.0137 9631.7676 -12225.4668]", + "[14884.8506 9128.7334 -12225.8516]", + "[14687.0313 8648.0156 -12225.8633]", + "[14427.6807 8195.4766 -12225.7471]", + "[14124.5 7773.7656 -12225.6816]", + "[13789.3838 7384.7222 -12225.3643]", + "[13422.3242 7021.459 -12226.3965]", + "[13048.1172 6662.7505 -12227.4502]", + "[12675.7441 6302.1255 -12228.8564]", + "[12304.7891 5944.2559 -12219.9229]", + "[11932.2969 5583.1914 -12210.457]", + "[11552.6748 5217.4185 -12192.46]", + "[11180.918 4857.6563 -12174.2334]", + "[10804.4727 4495.3892 -12156.084]", + "[10430.7939 4133.377 -12137.7754]", + "[10061.0215 3777.5376 -12119.6846]", + "[9686.3184 3414.4795 -12101.6973]", + "[9305.6357 3047.3162 -12083.2764]", + "[8935.6211 2689.1189 -12065.1758]", + "[8561.6729 2328.8127 -12047.2227]", + "[8186.6646 1965.573 -12028.8105]", + "[7808.6641 1601.1768 -12010.751]", + "[7430.9741 1235.4272 -11992.2002]", + "[7055.7637 874.6704 -11973.5371]", + "[6676.1455 505.3582 -11955.7705]", + "[6300.9995 144.8971 -11941.5117]", + "[5933.21 -212.2174 -11928.8857]", + "[5554.5786 -576.2433 -11918.9902]", + "[5181.5156 -939.4348 -11910.9277]", + "[4808.4165 -1298.3279 -11905.5898]", + "[4428.2715 -1665.0968 -11902.3438]", + "[4049.0129 -2033.5776 -11902.2607]", + "[3671.5964 -2396.4917 -11902.3145]", + "[3300.0637 -2754.2925 -11902.0049]", + "[2923.6917 -3118.0408 -11902.2959]", + "[2549.0005 -3480.4846 -11902.333]", + "[2178.3879 -3837.8662 -11902.2559]", + "[1808.5067 -4194.1797 -11902.4004]", + "[1440.5103 -4550.6709 -11902.2119]", + "[1071.3582 -4906.0537 -11902.5146]", + "[699.2041 -5266.1255 -11902.5986]", + "[322.5505 -5630.4248 -11902.7686]", + "[-48.135 -5987.5195 -11902.7793]", + "[-421.3638 -6347.5142 -11902.8145]", + "[-793.1058 -6707.9336 -11902.8711]", + "[-1164.5051 -7066.5693 -11903.0352]", + "[-1535.3997 -7423.8262 -11902.7227]", + "[-1905.041 -7780.1372 -11902.2529]", + "[-2273.8567 -8135.2881 -11902.6885]", + "[-2652.0454 -8500.5967 -11902.7549]", + "[-3028.6567 -8865.6338 -11902.8545]", + "[-3405.8564 -9228.5342 -11902.7793]", + "[-3781.96 -9590.8779 -11902.9209]", + "[-4155.8877 -9953.6719 -11902.6143]", + "[-4528.7803 -10315.2988 -11902.8711]", + "[-4902.6914 -10674.0537 -11902.7236]", + "[-5274.3638 -11033.0947 -11902.7344]", + "[-5644.9482 -11391.3232 -11902.8311]", + "[-6014.2964 -11749.2285 -11902.8193]", + "[-6384.2539 -12105.1172 -11902.7441]", + "[-6755.7964 -12464.6104 -11902.7041]", + "[-7133.0137 -12829.3145 -11902.7832]", + "[-7506.6465 -13188.96 -11902.874]", + "[-7877.4238 -13548.2656 -11902.8809]", + "[-8256.0557 -13914.8818 -11902.8008]", + "[-8622.6279 -14292.1436 -11902.25]", + "[-9025.749 -14634.292 -11902.833]", + "[-9480.5371 -14902.9395 -11903.1182]", + "[-9967.9736 -15098.8076 -11902.6123]", + "[-10472.7793 -15232.2373 -11902.8037]", + "[-10986.1094 -15312.6846 -11902.5146]", + "[-11499.7871 -15355.1152 -11902.6025]", + "[-12012.71 -15347.2402 -11902.7256]", + "[-12530.375 -15249.7354 -11902.8506]", + "[-13022.9756 -15072.8027 -11903.0225]", + "[-13484.4287 -14832.2578 -11903.0859]", + "[-13912.7285 -14543.2402 -11902.4932]", + "[-14313.2373 -14222.7158 -11902.5488]", + "[-14701.8193 -13865.4121 -11902.7666]", + "[-15025.8828 -13452.5703 -11902.8926]", + "[-15277.2627 -12990.1436 -11902.5244]", + "[-15454.7061 -12509.6006 -11903.1943]", + "[-15574.4912 -12007.5576 -11902.832]", + "[-15647.1563 -11486.2734 -11902.543]", + "[-15670.7207 -10961.0752 -11902.6133]", + "[-15669.459 -10430.7246 -11902.8281]", + "[-15669.3975 -9906.6045 -11902.4883]", + "[-15670.5049 -9384.5908 -11903.1104]", + "[-15670.0801 -8856.5703 -11903.4844]", + "[-15669.5205 -8330.1309 -11899.3867]", + "[-15670.1436 -7806.2183 -11894.6309]", + "[-15670.5576 -7288.8608 -11886.0615]", + "[-15670.4209 -6757.1099 -11876.3301]", + "[-15668.709 -6240.873 -11863.5586]", + "[-15669.333 -5715.6265 -11849.2168]", + "[-15669.2891 -5183.5762 -11831.2783]", + "[-15670.4854 -4645.2993 -11811.5889]", + "[-15668.8086 -4130.3022 -11788.9688]", + "[-15668.6934 -3611.0051 -11766.4033]", + "[-15669.5098 -3087.4937 -11743.6787]", + "[-15670.1318 -2560.2361 -11720.6387]", + "[-15670.0938 -2029.3779 -11697.3594]", + "[-15669.0371 -1495.2793 -11674.2744]", + "[-15669.75 -958.7521 -11650.334]", + "[-15669.3877 -419.2437 -11627.3018]", + "[-15669.2314 93.0217 -11604.374]", + "[-15670.249 607.6129 -11582.2891]", + "[-15668.7441 1124.8413 -11559.5557]", + "[-15670.9658 1644.9187 -11536.8838]", + "[-15669.3457 2167.9839 -11513.2354]", + "[-15669.4805 2694.5942 -11493.4014]", + "[-15669.8184 3225.5105 -11473.6582]", + "[-15669.249 3760.7981 -11458.3828]", + "[-15670.8135 4301.4824 -11443.0039]", + "[-15669.4932 4814.9648 -11433.1025]", + "[-15669.9395 5333.2695 -11423.8008]", + "[-15669.9727 5857.4834 -11416.1426]", + "[-15673.0166 6388.1177 -11407.7168]", + "[-15670.6514 6924.373 -11408.6074]", + "[-15646.2598 7466.2573 -11409.6748]", + "[-15604.5244 7978.1997 -11410.4082]", + "[-15541.4014 8490.167 -11411.5068]", + "[-15455.0137 9000.9453 -11412.6748]", + "[-15341.0889 9506.0732 -11413.5547]", + "[-15199.5957 10003.3916 -11413.9541]", + "[-15026.2227 10489.3799 -11414.7998]", + "[-14820.3184 10961.3984 -11415.6104]", + "[-14579.334 11415.4004 -11415.7061]", + "[-14302.4453 11847.1182 -11415.9668]", + "[-13968.0303 12278.4648 -11416.4043]", + "[-13594.7305 12674.7842 -11416.5273]", + "[-13186.0439 13032.2266 -11416.5264]", + "[-12747.3027 13349.7422 -11415.7783]", + "[-12282.71 13625.1484 -11415.6875]", + "[-11798.3545 13860.666 -11415.0742]", + "[-11300.5566 14056.876 -11414.5908]", + "[-10795.707 14217.5381 -11413.752]", + "[-10288.8848 14344.8193 -11412.8682]", + "[-9784.5 14442.916 -11412.0469]", + "[-9254.9307 14519.334 -11411.1387]", + "[-8730.25 14570.8027 -11410.1855]", + "[-8206.6211 14600.2705 -11409.5498]", + "[-7684.6274 14607.4512 -11408.4229]", + "[-7165.5122 14606.7998 -11404.8525]", + "[-6649.7656 14607.0781 -11400.4814]", + "[-6107.9502 14608.1533 -11391.1338]", + "[-5571.3877 14607.5508 -11381.3281]", + "[-5040.7983 14606.54 -11367.8906]", + "[-4516.9268 14607.1533 -11353.1514]", + "[-4000.7195 14607.208 -11335.9609]", + "[-3464.4468 14606.7178 -11315.8604]", + "[-2937.2041 14607.2871 -11292.9883]", + "[-2419.2615 14607.0615 -11270.6855]", + "[-1884.0708 14607.3486 -11247.1699]", + "[-1358.4954 14607.7676 -11224.0537]", + "[-839.226 14607.8096 -11201.292]", + "[-325.5835 14606.2773 -11178.8633]", + "[207.9904 14606.5615 -11155.582]", + "[736.6739 14606.9082 -11132.582]", + "[1260.673 14606.9238 -11109.5195]", + "[1780.5131 14607.3936 -11086.8047]", + "[2295.647 14607.2178 -11064.1455]", + "[2830.7585 14608.5264 -11041.5596]", + "[3361.0112 14608.2432 -11017.9629]", + "[3886.5989 14607.4756 -10994.8828]", + "[4405.9053 14607.5986 -10972.4131]", + "[4938.0166 14606.9795 -10948.1768]", + "[5459.1416 14606.4873 -10924.3096]", + "[5992.0913 14607.0166 -10904.6973]", + "[6515.8691 14607.3828 -10885.6445]", + "[7031.4927 14606.9434 -10871.2158]", + "[7561.832 14606.3242 -10856.4717]", + "[8085.6069 14606.8633 -10846.9307]", + "[8604.2988 14606.501 -10837.4355]", + "[9134.6943 14606.9385 -10830.1895]", + "[9650.3623 14606.7656 -10822.4492]", + "[10165.6543 14604.3721 -10822.5898]", + "[10681.835 14604.418 -10822.4238]", + "[11200.8965 14607.1777 -10822.8262]", + "[11727.2246 14613.7012 -10823.0322]", + "[12248.9463 14601.3945 -10825.124]", + "[12767.1523 14550.1787 -10827.083]", + "[13276.9072 14450.2266 -10828.6553]", + "[13772.5869 14291.167 -10830.1465]", + "[14237.6289 14062.9053 -10831.4834]", + "[14653.1084 13762.042 -10831.7061]", + "[14959.5527 13445.4072 -10831.8906]", + "[15254.8594 13013.6729 -10831.46]", + "[15474.582 12538.8779 -10830.2637]", + "[15625.2686 12036.8496 -10828.7734]", + "[15717.1426 11532.7441 -10826.7256]", + "[15760.002 11009.8535 -10825.3115]", + "[15762.9629 10481.5264 -10822.0293]", + "[15763.7754 9961.5039 -10818.5557]", + "[15763.6602 9439.2939 -10811.3057]", + "[15766.8828 8911.624 -10801.1602]", + "[15766.9023 8388.1436 -10794.708]", + "[15743.5498 7869.3208 -10790.0693]", + "[15694.6367 7356.3467 -10785.627]", + "[15617.6123 6832.8574 -10781.1123]", + "[15512.0654 6329.3892 -10776.5449]", + "[15372.9902 5836.4053 -10772.2666]", + "[15188.8613 5347.4502 -10768.0381]", + "[15015.8115 4849.083 -10763.7148]", + "[14877.8877 4344.291 -10759.5293]", + "[14773.7793 3840.8499 -10755.166]", + "[14698.3154 3321.9968 -10750.6553]", + "[14651.8486 2802.1296 -10745.6611]", + "[14636.0303 2285.9937 -10739.7275]", + "[14634.9424 1773.5216 -10739.6279]", + "[14636.1201 1250.1636 -10739.458]", + "[14635.8574 728.7015 -10739.7627]", + "[14635.9893 209.0725 -10739.7207]", + "[14635.2305 -308.6838 -10739.584]", + "[14634.8193 -824.5808 -10739.5947]", + "[14634.6523 -1338.5573 -10739.6611]", + "[14634.6406 -1850.6157 -10739.627]", + "[14634.3838 -2373.1284 -10739.6709]", + "[14634.459 -2893.5527 -10739.7773]", + "[14635.0811 -3411.9072 -10739.7588]", + "[14634.665 -3927.7761 -10739.8086]", + "[14635.8496 -4440.8462 -10739.9092]", + "[14635.9736 -4963.23 -10739.4951]", + "[14636.1797 -5482.9956 -10739.5186]", + "[14634.9795 -6000.1489 -10739.5977]", + "[14635.0684 -6514.6709 -10739.6201]", + "[14636.1621 -7026.8647 -10739.5537]", + "[14636.7236 -7549.2803 -10739.4404]", + "[14638.6777 -8070.5298 -10739.8789]", + "[14623.6953 -8590.2451 -10740.6396]", + "[14590.5391 -9105.0996 -10741.6143]", + "[14535.7031 -9618.751 -10742.7744]", + "[14458.7344 -10127.6934 -10743.7461]", + "[14357.8389 -10629.8633 -10744.6182]", + "[14229.5254 -11127.2607 -10745.4365]", + "[14070.4814 -11621.6553 -10746.2109]", + "[13878.9482 -12105.4678 -10746.6133]", + "[13649.0293 -12576.0732 -10747.0088]", + "[13380.5039 -13027.2676 -10747.5879]", + "[13076.3125 -13451.7275 -10747.8008]", + "[12737.0938 -13843.7617 -10747.9014]", + "[12364.5342 -14201.7852 -10747.6143]", + "[11962.6934 -14522.9385 -10747.5732]", + "[11536.5313 -14807.0127 -10747.418]", + "[11076.0498 -15062.167 -10747.1631]", + "[10598.6191 -15278.4395 -10746.4521]", + "[10107.2266 -15459.459 -10745.8799]", + "[9610.8652 -15607.002 -10744.8672]", + "[9111.2773 -15723.6123 -10744.2217]", + "[8603.291 -15816.5479 -10743.3105]", + "[8091.5361 -15883.3203 -10742.4004]", + "[7580.6401 -15929.3711 -10741.4873]", + "[7154.5659 -15951.4229 -10740.4043]" + ], + + [ + "[-1630.8953 -1225.2863 -14471.0186]", + "[-1301.0675 -822.9005 -14471.2686]", + "[-1021.6826 -391.4329 -14471.2568]", + "[-725.9218 34.8555 -14471.2588]", + "[-400.6446 433.0515 -14471.3008]", + "[-44.915 810.4982 -14471.1699]", + "[322.0415 1170.218 -14471.1475]", + "[694.6635 1530.0837 -14471.0762]", + "[1065.2837 1887.1775 -14471.0166]", + "[1435.3472 2244.9009 -14471.2734]", + "[1807.1578 2603.8567 -14471.1318]", + "[2182.0835 2966.3303 -14471.0615]", + "[2552.7441 3323.2998 -14471.1191]", + "[2925.2729 3683.332 -14471.1172]", + "[3299.6252 4045.561 -14471.1201]", + "[3676.4968 4409.2441 -14471.0674]", + "[4053.7795 4773.2539 -14471.0947]", + "[4422.1655 5129.54 -14471.0801]", + "[4791.2124 5485.8037 -14471.1211]", + "[5160.2148 5842.2144 -14471.0332]", + "[5529.3267 6197.6558 -14471.1162]", + "[5906.5151 6563.311 -14471.1279]", + "[6283.5366 6926.0522 -14471.1309]", + "[6657.9629 7287.7354 -14471.1387]", + "[7030.1689 7648.0381 -14471.1172]", + "[7400.5015 8006.0566 -14471.1318]", + "[7780.0674 8371.4209 -14471.1299]", + "[8156.4014 8734.8213 -14471.1172]", + "[8528.7666 9095.6074 -14471.1152]", + "[8837.5127 9393.2695 -14471.0205]" + ], + + [ + "[8592.4248 9523.374 -14471.0205]", + "[8516.7344 9450.7559 -14471.0215]", + "[8148.042 9093.9004 -14471.0898]", + "[7774.9541 8734.5547 -14471.0391]", + "[7403.061 8375.7529 -14471.0977]", + "[7034.4248 8018.3809 -14471.041]", + "[6661.5791 7658.9233 -14471.0615]", + "[6290.6807 7300.749 -14471.043]", + "[5921.7002 6945.0464 -14471.0947]", + "[5552.6787 6587.3569 -14471.0449]", + "[5180.2192 6228.7358 -14471.0664]", + "[4812.0034 5872.9287 -14471.0518]", + "[4442.0552 5516.2188 -14471.0732]", + "[4071.7275 5158.3193 -14471.0488]", + "[3700.8965 4799.6558 -14471.0176]", + "[3330.261 4441.1987 -14471.0527]", + "[2959.4207 4083.9268 -14471.1299]", + "[2590.4021 3727.5632 -14471.0586]", + "[2216.0178 3366.0837 -14471.1543]", + "[1844.9911 3006.8352 -14471.0488]", + "[1468.342 2644.7974 -14471.1152]", + "[1098.7977 2287.1895 -14471.248]", + "[727.6743 1927.9264 -14471.1377]", + "[355.6832 1569.4531 -14471.1084]", + "[-18.4495 1209.657 -14471.2109]", + "[-398.3868 857.1781 -14471.1885]", + "[-797.5797 524.4246 -14471.2305]", + "[-1220.7805 225.0996 -14471.3369]", + "[-1663.9082 -42.981 -14471.2764]", + "[-2092.2449 -323.9617 -14471.2363]", + "[-2323.5876 -509.6955 -14471.1318]" + ], + + [ + "[279.4322 1137.7771 -14471.0234]", + "[348.3957 1212.5092 -14471.1162]", + "[670.2855 1614.3636 -14471.1611]", + "[952.8093 2042.6471 -14471.0986]", + "[1272.9832 2444.5598 -14471.0879]", + "[1315.7036 2491.9155 -14470.8955]" + ], + + [ + "[1499.8029 2314.6929 -14471.0273]", + "[1421.696 2247.998 -14471.1533]", + "[1006.2286 1945.8073 -14471.165]", + "[569.0557 1678.4857 -14471.1406]", + "[164.6147 1382.637 -14468.0273]" + ], + + [ + "[14654.6016 -5594.04 -10733.4912]", + "[14654.3887 -5695.9937 -10733.5742]", + "[14671.7998 -6213.6006 -10733.6289]", + "[14750.8164 -6724.2739 -10733.6416]", + "[14859.5518 -7226.9795 -10733.499]", + "[14900.8623 -7537.687 -10733.4902]" + ], + + [ + "[14649.2109 -7776.5088 -10737.3809]", + "[14653.7305 -7674.583 -10737.4814]", + "[14715.8799 -7165.4233 -10737.584]", + "[14829.2998 -6661.2217 -10737.46]", + "[14900.1885 -6150.6689 -10737.4707]", + "[14902.0215 -6115.6191 -10737.3809]" + ] +] + + + + diff --git a/lua/metrostroi_data/track_gm_metrostroi_b46_lite.lua b/lua/metrostroi_data/track_gm_metrostroi_b46_lite.lua new file mode 100644 index 0000000..2843d87 --- /dev/null +++ b/lua/metrostroi_data/track_gm_metrostroi_b46_lite.lua @@ -0,0 +1 @@ +{"1":{"1":"[-11059.2119 15293.625 -1622.4454]","2":"[-10957.0264 15294.8105 -1622.3954]","3":"[-10442.3008 15294.7158 -1622.4854]","4":"[-9924.8848 15295.3818 -1622.4829]","5":"[-9409.4951 15295.3232 -1622.4828]","6":"[-8889.3789 15295.0713 -1622.535]","7":"[-8373.0586 15295.4932 -1622.4851]","8":"[-7860.1631 15295.2441 -1622.4706]","9":"[-7341.8452 15295.1182 -1622.4907]","10":"[-6830.5947 15262.0078 -1622.6295]","11":"[-6320.1006 15166.1426 -1622.5759]","12":"[-5836.8521 14994.3281 -1622.5576]","13":"[-5381.2915 14760.2344 -1622.512]","14":"[-4954.5981 14476.6182 -1622.4247]","15":"[-4548.1489 14151.5898 -1622.3805]","16":"[-4167.293 13798.3633 -1622.453]","17":"[-3799.5842 13436.5449 -1622.5626]","18":"[-3435.6633 13070.2021 -1622.4792]","19":"[-3066.2 12701.9395 -1622.4829]","20":"[-2697.7571 12333.8682 -1622.4805]","21":"[-2330.4382 11965.8711 -1622.5012]","22":"[-1963.4805 11598.6904 -1622.4873]","23":"[-1596.6931 11232.5674 -1622.5341]","24":"[-1231.2144 10866.874 -1622.4526]","25":"[-866.0137 10502.1895 -1622.4888]","26":"[-501.7584 10137.707 -1622.5479]","27":"[-138.0834 9774.2041 -1622.4725]","28":"[224.5659 9411.4883 -1622.589]","29":"[596.0246 9039.9219 -1622.5515]","30":"[966.929 8669.0889 -1622.4493]","31":"[1337.2456 8298.9033 -1622.3387]","32":"[1706.5593 7929.0146 -1622.1505]","33":"[2074.9509 7561.7197 -1622.2509]","34":"[2440.979 7193.7642 -1622.4459]","35":"[2807.3657 6827.6538 -1622.2632]","36":"[3173.74 6462.7412 -1622.2487]","37":"[3537.6245 6096.5186 -1622.2151]","38":"[3903.1838 5733.1587 -1622.33]","39":"[4266.0298 5368.2666 -1622.276]","40":"[4629.9336 5005.6626 -1622.2903]","41":"[4992.7744 4643.2261 -1622.225]","42":"[5363.2021 4271.0791 -1622.3247]","43":"[5735.1943 3901.7678 -1622.3091]","44":"[6103.5337 3530.0493 -1622.2756]","45":"[6474.9927 3162.7185 -1622.3207]","46":"[6841.9575 2792.1506 -1622.2441]","47":"[7211.1924 2425.1121 -1622.4769]","48":"[7578.2349 2057.1304 -1622.3572]","49":"[7945.4214 1690.536 -1622.4911]","50":"[8311.7002 1324.2072 -1622.4669]","51":"[8677.1924 958.3295 -1622.4565]","52":"[9042.9922 593.9393 -1622.449]","53":"[9404.7773 229.5983 -1622.6293]","54":"[9770.3105 -133.6753 -1622.506]","55":"[10132.7012 -496.2275 -1622.4874]","56":"[10497.6611 -862.7943 -1622.4825]","57":"[10862.7109 -1227.7295 -1622.3275]","58":"[11199.0986 -1613.8905 -1622.1971]","59":"[11486.3936 -2046.3269 -1622.3231]","60":"[11698.5244 -2516.5662 -1622.4578]","61":"[11850.7334 -3007.53 -1622.5028]","62":"[11945.9473 -3511.4121 -1622.2603]","63":"[11999.1289 -4031.6475 -1622.2766]","64":"[12012.7891 -4553.0137 -1622.1599]","65":"[12000.7637 -5072.9302 -1622.3724]","66":"[11967.2119 -5590.7764 -1622.4836]","67":"[11915.0693 -6105.9917 -1622.4509]","68":"[11839.4512 -6616.8604 -1622.5188]","69":"[11740.0967 -7122.4482 -1622.4817]","70":"[11614.4541 -7620.6958 -1622.4386]","71":"[11456.6494 -8120.0903 -1622.4471]","72":"[11271.001 -8598.4238 -1622.5112]","73":"[11048.1367 -9065.4736 -1622.4056]","74":"[10789.2676 -9520.416 -1622.3939]","75":"[10493.9453 -9948.8105 -1622.2391]","76":"[10158.6143 -10354.5342 -1622.5127]","77":"[9797.8955 -10719.1221 -1622.3901]","78":"[9405.2549 -11052.0742 -1622.428]","79":"[8978.9297 -11354.0322 -1622.3953]","80":"[8527.835 -11619.2754 -1622.4465]","81":"[8058.4814 -11847.5596 -1622.3934]","82":"[7582.3062 -12038.832 -1622.3458]","83":"[7094.4624 -12197.6211 -1622.302]","84":"[6582.0171 -12330.8691 -1622.187]","85":"[6064.3589 -12435.75 -1622.2444]","86":"[5543.1631 -12514.1689 -1622.2605]","87":"[5020.0508 -12569.0664 -1622.3478]","88":"[4496.2275 -12603.1865 -1622.5242]","89":"[3972.4868 -12618.2393 -1622.278]","90":"[3449.4519 -12620.6162 -1622.3962]","91":"[2927.3379 -12620.2822 -1622.4596]","92":"[2400.1067 -12620.1826 -1622.4631]","93":"[1886.259 -12620.3994 -1622.4618]","94":"[1373.3561 -12620.5381 -1622.4758]","95":"[843.7491 -12620.3125 -1622.4102]","96":"[315.1869 -12620.0205 -1622.485]","97":"[-212.3818 -12620.1084 -1622.4551]","98":"[-738.5702 -12610.9531 -1622.09]","99":"[-1262.5613 -12584.8818 -1621.9329]","100":"[-1783.2648 -12538.1543 -1622.1831]","101":"[-2300.2976 -12470.3848 -1622.4022]","102":"[-2811.97 -12377.7285 -1622.5322]","103":"[-3316.8679 -12259.3408 -1622.3278]","104":"[-3812.844 -12112.6826 -1622.277]","105":"[-4296.9771 -11934.709 -1622.1954]","106":"[-4766.6509 -11725.0498 -1622.2502]","107":"[-5217.668 -11481.2979 -1622.5126]","108":"[-5660.0552 -11193.2861 -1622.4119]","109":"[-6074.748 -10869.543 -1622.4921]","110":"[-6456.897 -10510.626 -1622.4984]","111":"[-6804.7832 -10120.6592 -1622.4943]","112":"[-7115.7236 -9702.5596 -1622.3121]","113":"[-7389.3975 -9260.7598 -1622.3539]","114":"[-7626.5234 -8799.7637 -1622.3398]","115":"[-7830.2202 -8318.8145 -1622.4669]","116":"[-8002.4985 -7820.2349 -1622.3573]","117":"[-8142.1655 -7312.7544 -1622.3187]","118":"[-8253.4854 -6799.4609 -1622.3224]","119":"[-8338.0449 -6282.1885 -1622.2828]","120":"[-8398.541 -5762.5669 -1622.375]","121":"[-8437.7344 -5241.9536 -1622.3982]","122":"[-8457.3662 -4721.6338 -1622.0554]","123":"[-8462.0898 -4202.3398 -1622.1136]","124":"[-8462.0068 -3687.6042 -1606.7993]","125":"[-8462.0313 -3160.6675 -1569.6423]","126":"[-8461.8711 -2641.991 -1516.4755]","127":"[-8461.9072 -2115.8787 -1456.2029]","128":"[-8461.792 -1590.5563 -1393.723]","129":"[-8461.791 -1081.5577 -1331.7845]","130":"[-8461.7754 -557.5002 -1267.5255]","131":"[-8462.4902 -45.2574 -1204.5804]","132":"[-8461.876 467.0757 -1141.7941]","133":"[-8461.3574 987.5672 -1077.8243]","134":"[-8461.7979 1500.1559 -1014.8558]","135":"[-8462.1016 2013.973 -951.7559]","136":"[-8462.3877 2523.2908 -889.0739]","137":"[-8462.1416 3037.4749 -826.0299]","138":"[-8461.6348 3558.7935 -762.1362]","139":"[-8461.9092 4067.1096 -699.575]","140":"[-8462.5322 4580.7012 -636.606]","141":"[-8462.1777 5098.144 -572.9977]","142":"[-8461.5742 5617.9976 -509.1426]","143":"[-8461.5439 6138.7891 -445.1893]","144":"[-8462.2354 6658.8677 -381.6057]","145":"[-8462.334 7176.79 -318.772]","146":"[-8462.4053 7691.6973 -258.3127]","147":"[-8462.2529 8202.8848 -201.1747]","148":"[-8462.4463 8724.918 -151.0225]","149":"[-8462.8594 9246.9697 -120.0115]","150":"[-8474.5107 9759.0029 -103.982]","151":"[-8507.9287 10272.9648 -91.8422]","152":"[-8573.5146 10787.1709 -76.5625]","153":"[-8675.2217 11300.1914 -57.2212]","154":"[-8819.4727 11791.0596 -33.5755]","155":"[-9018.6182 12275.29 -4.5833]","156":"[-9276.3389 12724.9268 30.728]","157":"[-9593.7588 13125.001 71.9296]","158":"[-9977.2578 13472.8018 119.4282]","159":"[-10408.4717 13744.375 171.9896]","160":"[-10887.7617 13943.0488 228.2761]","161":"[-11390.2529 14062.7471 285.9153]","162":"[-11907.8125 14112.3232 343.2458]","163":"[-12428.3535 14098.9219 400.6561]","164":"[-12940.1729 14019.8359 455.6136]","165":"[-13432.6523 13863.0234 507.3643]","166":"[-13891.0479 13633.1055 554.4301]","167":"[-14287.5459 13338.0361 593.152]","168":"[-14643.1826 12969.4434 625.9862]","169":"[-14939.0986 12541.4365 650.3957]","170":"[-15172.7998 12078.0615 667.1775]","171":"[-15350.0762 11587.5254 676.0056]","172":"[-15476.5781 11087.4902 678.6412]","173":"[-15563.207 10580.8027 677.0042]","174":"[-15615.8516 10068.7822 671.2161]","175":"[-15641.3242 9551.9648 662.7073]","176":"[-15647.9697 9032.6387 657.7137]","177":"[-15647.8623 8512.5576 657.6006]","178":"[-15647.6387 7993.2788 657.5426]","179":"[-15648.4424 7474.8032 657.5368]","180":"[-15648.3047 6957.1094 657.5081]","181":"[-15647.6299 6440.1938 657.5053]","182":"[-15648.5518 5924.0625 657.5085]","183":"[-15648.3809 5408.7183 657.5343]","184":"[-15647.6768 4894.1392 657.5389]","185":"[-15648.3633 4380.3345 657.603]","186":"[-15648.4082 3866.5352 657.5576]","187":"[-15647.5527 3346.4888 657.6343]","188":"[-15648.4092 2834.2952 657.5137]","189":"[-15648.1719 2312.6006 657.5245]","190":"[-15647.4092 1786.6532 657.5475]","191":"[-15647.8311 1274.0526 657.5472]","192":"[-15648.1748 761.9135 657.5485]","193":"[-15648.084 241.907 657.6238]","194":"[-15647.6133 -278.6079 657.5967]","195":"[-15647.8945 -806.7278 657.5847]","196":"[-15648.5596 -1332.0923 657.5623]","197":"[-15648.3809 -1856.3009 657.4094]","198":"[-15647.3613 -2379.3743 657.5006]","199":"[-15647.4668 -2901.311 657.5499]","200":"[-15648.2256 -3422.1035 657.5519]","201":"[-15648.5557 -3940.9546 653.2815]","202":"[-15648.1631 -4455.1787 629.0827]","203":"[-15647.7275 -4970.8535 582.4442]","204":"[-15648.1289 -5493.2856 525.7081]","205":"[-15648.5146 -6003.5908 466.205]","206":"[-15648.2383 -6519.7725 404.1048]","207":"[-15648.0234 -7039.2837 340.789]","208":"[-15647.9248 -7550.834 278.1226]","209":"[-15647.5293 -8074.4155 214.9048]","210":"[-15647.8975 -8594.8232 153.8994]","211":"[-15647.7227 -9117.1084 96.9894]","212":"[-15647.3223 -9639.6553 49.9144]","213":"[-15647.9551 -10162.1377 26.1626]","214":"[-15647.6582 -10685.3066 21.294]","215":"[-15634.9756 -11199.7852 20.9869]","216":"[-15592.7451 -11714.7158 20.9775]","217":"[-15502.833 -12229.9697 21.0301]","218":"[-15359.8877 -12729.9297 21.0992]","219":"[-15152.3447 -13203.7803 21.0455]","220":"[-14877.6904 -13638.6504 21.1616]","221":"[-14526.4277 -14025.9268 21.1499]","222":"[-14115.6426 -14345.1279 21.0205]","223":"[-13658.6855 -14590.332 21.0874]","224":"[-13172.9111 -14767.998 21.1169]","225":"[-12670.2002 -14885.5615 21.2329]","226":"[-12159.4893 -14953.4141 21.1162]","227":"[-11646.3213 -14981.1592 21.1739]","228":"[-11133.7383 -14986.1875 21.8739]","229":"[-10607.4023 -14985.0977 21.5594]","230":"[-10087.1592 -14984.9014 21.4736]","231":"[-9567.5869 -14984.8135 21.9304]","232":"[-9042.7471 -14984.2646 21.5554]","233":"[-8517.8281 -14984.4961 21.3633]","234":"[-7994.1538 -14985.1064 21.4957]","235":"[-7471.7222 -14984.7246 21.5078]","236":"[-6950.4985 -14984.4893 21.5256]","237":"[-6430.4746 -14984.4932 21.5426]","238":"[-5907.6963 -14985.1211 21.5912]","239":"[-5380.1074 -14985.4863 21.6035]","240":"[-4860.5005 -14984.2139 21.6178]","241":"[-4339.6479 -14984.5166 21.5328]","242":"[-3822.6736 -14985.2148 21.51]","243":"[-3302.8579 -14984.3525 21.5634]","244":"[-2784.9519 -14984.4473 21.5491]","245":"[-2267.4668 -14984.9639 21.5511]","246":"[-1751.5691 -14981.2588 23.272]","247":"[-1239.4248 -14954.9424 25.8659]","248":"[-721.3835 -14890.5967 27.8761]","249":"[-214.9089 -14779.7754 29.1339]","250":"[273.5844 -14613.4746 29.1125]","251":"[734.5286 -14386.5264 27.6522]","252":"[1154.7471 -14093.5371 23.9713]","253":"[1535.4789 -13750.0039 22.02]","254":"[1898.791 -13387.5791 21.4899]","255":"[2260.5439 -13024.6846 21.5996]","256":"[2632.3206 -12654.6563 22.0447]","257":"[2992.8547 -12276.9541 23.7926]","258":"[3330.1038 -11883.915 26.5696]","259":"[3630.0977 -11466.2861 28.4604]","260":"[3893.1155 -11012.7412 29.3787]","261":"[4097.4263 -10532.502 28.4999]","262":"[4232.0854 -10030.5625 26.0638]","263":"[4289.3828 -9514.7705 23.3424]","264":"[4300.5366 -9000.2617 21.383]","265":"[4298.3848 -8485.9717 21.4755]","266":"[4298.7319 -7972.3838 21.594]","267":"[4300.0117 -7458.6914 21.5394]","268":"[4298.7358 -6939.6729 21.538]","269":"[4298.2192 -6421.6646 21.5516]","270":"[4299.1074 -5904.6587 21.549]","271":"[4299.5454 -5388.6533 21.4816]","272":"[4298.8599 -4873.6465 21.5869]","273":"[4298.292 -4359.6421 21.6327]","274":"[4299.5688 -3846.5984 21.5527]","275":"[4299.7041 -3334.541 21.5092]","276":"[4298.4502 -2805.2327 21.5289]","277":"[4298.5435 -2285.3057 21.5403]","278":"[4299.6069 -1765.3181 21.541]","279":"[4298.374 -1244.6649 21.0425]","280":"[4299.5732 -730.5665 20.4061]","281":"[4297.9648 -217.7158 20.7297]","282":"[4299.0894 304.4788 20.578]","283":"[4298.7715 825.7511 20.5533]","284":"[4298.4946 1346.1558 20.4704]","285":"[4298.8286 1865.3032 20.6172]","286":"[4298.9263 2383.543 20.4009]","287":"[4304.2949 2900.2883 20.6134]","288":"[4334.8047 3414.3162 20.8946]","289":"[4404.5435 3921.6079 20.4975]","290":"[4526.5337 4427.2358 20.5187]","291":"[4708.6226 4909.1411 20.519]","292":"[4964.3989 5360.5337 20.8274]","293":"[5284.1455 5761.5176 20.6263]","294":"[5641.751 6138.3052 20.4271]","295":"[6007.7412 6499.207 20.4901]","296":"[6377.0234 6871.2925 20.6444]","297":"[6747.0605 7241.3086 20.5692]","298":"[7117.21 7609.9746 20.6476]","299":"[7487.916 7982.2368 20.5206]","300":"[7851.2861 8345.5781 20.5451]","301":"[8221.2275 8714.3398 20.5483]","302":"[8589.583 9083.5801 20.5467]","303":"[8965.8467 9442.2822 20.5272]","304":"[9375.4785 9753.0293 20.6278]","305":"[9834.8936 9996.6357 19.9443]","306":"[10322.3291 10171.1865 20.2958]","307":"[10825.8135 10282.5752 20.2615]","308":"[11342.9922 10347.9609 20.3667]","309":"[11860.3193 10369.4824 22.0516]","310":"[12382.4736 10345.6865 26.3379]","311":"[12893.3584 10268.2334 32.4115]","312":"[13396.5459 10126.2715 37.4048]","313":"[13864.5127 9909.5176 40.866]","314":"[14273.3857 9624.6318 42.403]","315":"[14565.2783 9333.4658 42.384]","316":"[14861.3262 8911.4434 40.6492]","317":"[15065.2529 8474.0361 37.5144]","318":"[15212.3867 7974.4331 32.6193]","319":"[15293.8828 7458.0645 26.8036]","320":"[15323.8965 6931.2021 22.0336]","321":"[15327.0371 6413.0947 19.2971]","322":"[15325.9795 5886.3325 19.4829]","323":"[15326.9336 5360.5879 19.6738]","324":"[15326.3438 4835.7944 19.4529]","325":"[15326.8994 4311.9907 19.5685]","326":"[15327.3447 3789.1553 19.5969]","327":"[15326.248 3267.2673 19.516]","328":"[15326.5947 2746.3347 19.4737]","329":"[15327.0195 2226.3193 19.5291]","330":"[15326.8213 1711.7802 19.5322]","331":"[15326.7881 1188.2037 19.5346]","332":"[15313.8115 669.6322 18.1125]","333":"[15239.1201 162.1724 15.1823]","334":"[15081.3564 -336.1668 12.1628]","335":"[14852.3789 -804.4553 12.0516]","336":"[14572.3535 -1241.5305 13.6901]","337":"[14251.6875 -1647.2399 16.4605]","338":"[13897.3955 -2035.3494 18.7345]","339":"[13533.1025 -2403.428 19.7116]","340":"[13165.3008 -2769.9487 19.6264]","341":"[12800.8574 -3133.8823 19.549]","342":"[12437.8691 -3497.6074 19.5086]","343":"[12075.4648 -3860.2771 19.5424]","344":"[11697.8008 -4237.4512 19.5382]","345":"[11321.0596 -4613.7866 19.5471]","346":"[10945.8076 -4989.8853 19.5151]","347":"[10571.7734 -5364.3862 19.5386]","348":"[10204.7402 -5730.7456 19.7251]","349":"[9831.8994 -6102.3101 19.5696]","350":"[9459.6836 -6475.6396 19.494]","351":"[9093.8984 -6842.2388 19.5412]","352":"[8730.5127 -7204.1113 19.5492]","353":"[8361.7861 -7573.4126 19.5653]","354":"[7997.1821 -7949.7358 21.6581]","355":"[7656.29 -8341.5049 24.1862]","356":"[7349.1221 -8755.0322 26.4942]","357":"[7080.042 -9204.7773 27.2407]","358":"[6866.4736 -9680.5293 26.7607]","359":"[6721.0225 -10179.1846 24.7019]","360":"[6654.5757 -10692.3887 23.9205]","361":"[6660.2363 -11207.0654 28.137]","362":"[6725.52 -11724.6816 38.6702]","363":"[6842.8818 -12225.9189 47.0741]","364":"[7031.8237 -12710.0225 53.4756]","365":"[7288.2622 -13153.9795 56.9714]","366":"[7622.5132 -13551.1836 58.3508]","367":"[7992.8291 -13860 57.0986]","368":"[8436.7412 -14120.2324 53.4459]","369":"[8916.9629 -14306.7705 47.1137]","370":"[9419.8594 -14427.9287 38.9078]","371":"[9936.9307 -14493.0059 28.7709]","372":"[10450.0566 -14510.2002 21.6994]","373":"[10966.1152 -14502.1514 16.7419]","374":"[11482.1201 -14476.9277 10.7285]","375":"[11999.4395 -14439.0645 1.6895]","376":"[12516.2217 -14356.0049 -11.3132]","377":"[13011.5811 -14214.4189 -28.5111]","378":"[13484.8789 -14009.5977 -48.8899]","379":"[13926.8838 -13748.2832 -71.8201]","380":"[14329.9648 -13416.2617 -97.3035]","381":"[14667.1621 -13020.3281 -123.1954]","382":"[14937.1777 -12577.7461 -149.2271]","383":"[15141.6631 -12103.2549 -176.2873]","384":"[15290.2588 -11607.8721 -205.4427]","385":"[15387.6846 -11100.9727 -237.2199]","386":"[15440.9434 -10586.5791 -270.8652]","387":"[15458.0439 -10067.998 -310.0214]","388":"[15460.668 -9549.4043 -344.6683]","389":"[15459.0762 -9037.1143 -361.3834]","390":"[15459.4609 -8511.8301 -364.3223]","391":"[15460.124 -7987.4619 -364.4124]","392":"[15459.2158 -7466.7139 -364.477]","393":"[15459.7969 -6953.6636 -364.4525]","394":"[15459.6934 -6441.0835 -364.4842]","395":"[15459.6699 -5914.292 -364.4939]","396":"[15460.4102 -5388.4014 -364.5044]","397":"[15459.5176 -4863.4053 -364.491]","398":"[15459.7695 -4339.6406 -364.5018]","399":"[15459.8877 -3816.8513 -364.2935]","400":"[15459.458 -3294.9053 -364.1771]","401":"[15459.9004 -2773.8157 -364.328]","402":"[15460.3477 -2253.5938 -364.5002]","403":"[15459.6953 -1734.2292 -364.4483]","404":"[15460.3486 -1215.697 -364.3842]","405":"[15460.376 -698.0395 -364.308]","406":"[15459.4795 -181.2064 -364.4399]","407":"[15460.7627 340.762 -364.3268]","408":"[15459.5068 857.1755 -364.326]","409":"[15460.2529 1372.7604 -364.4005]","410":"[15459.8906 1887.54 -364.5345]","411":"[15460.2393 2401.4937 -364.4861]","412":"[15460.0781 2914.6235 -364.4627]","413":"[15459.8525 3426.9326 -364.3712]","414":"[15460.373 3952.2449 -364.4796]","415":"[15467.6143 4476.4805 -364.4637]","416":"[15503.0889 4992.5215 -364.4022]","417":"[15576.6738 5499.7964 -364.4447]","418":"[15674.0254 6015.2153 -364.5331]","419":"[15767.085 6529.7456 -364.3895]","420":"[15821.6377 7047.8311 -364.5126]","421":"[15842.0762 7572.0947 -364.4121]","422":"[15844.0967 8085.7339 -364.4962]","423":"[15844.1865 8598.5674 -364.4837]","424":"[15843.8545 9110.6416 -364.3689]","425":"[15844.4668 9635.001 -364.5712]","426":"[15843.665 10158.5771 -364.4098]","427":"[15842.5791 10681.3066 -364.2676]","428":"[15819.8926 11202.2725 -364.0941]","429":"[15762.9961 11718.9795 -364.3271]","430":"[15654.6289 12225.2617 -364.3959]","431":"[15488.7168 12712.6348 -364.4131]","432":"[15244.0654 13176.4893 -363.3414]","433":"[14932.2539 13592.9922 -358.8143]","434":"[14559.4004 13947.4688 -346.6214]","435":"[14125.1123 14240.2656 -325.5434]","436":"[13645.9365 14452.7539 -296.8995]","437":"[13156.9268 14603.5313 -259.1152]","438":"[12651.2803 14705.1006 -210.9848]","439":"[12138.5742 14763.7949 -154.1104]","440":"[11622.8916 14783.0801 -92.2866]","441":"[11102.416 14784.1943 -28.4057]","442":"[10593.5967 14783.5361 34.1822]","443":"[10074.1855 14784.6729 97.9898]","444":"[9556.0684 14783.7188 161.6088]","445":"[9036.6777 14783.8174 225.3508]","446":"[8524.8936 14783.8418 288.196]","447":"[8008.3262 14783.5801 351.6648]","448":"[7488.312 14783.752 414.8932]","449":"[6967.0786 14783.6846 477.1564]","450":"[6447.4019 14783.373 536.5086]","451":"[5927.8911 14783.8584 590.2825]","452":"[5409.5596 14783.5195 628.6126]","453":"[4887.0796 14784.2422 644.3461]","454":"[4369.0981 14784.1602 645.4778]","455":"[3850.0652 14783.832 645.6388]","456":"[3329.1624 14783.6885 645.6412]","457":"[2805.7017 14784.6924 645.5496]","458":"[2289.3677 14783.6377 645.5202]","459":"[1769.0535 14783.7988 645.5922]","460":"[1244.494 14784.2969 645.6561]","461":"[716.7141 14783.79 645.5258]","462":"[189.8714 14784.5029 645.532]","463":"[-336.0115 14784.4072 645.5604]","464":"[-860.9666 14783.9688 645.5932]","465":"[-1385.0048 14783.6914 645.6194]","466":"[-1908.0958 14783.9609 645.5673]","467":"[-2430.2742 14784.4756 645.5199]","468":"[-2951.5251 14784.1299 645.605]","469":"[-3471.8801 14784.5 645.5702]","470":"[-3991.3135 14784.0625 645.5369]","471":"[-4509.853 14783.752 645.5513]","472":"[-5027.4937 14784.4287 645.5416]","473":"[-5548.9775 14784.0029 645.5854]","474":"[-6061.9165 14784.1357 645.5381]","475":"[-6587.1294 14783.8789 645.4993]","476":"[-7112.249 14784.1768 640.0157]","477":"[-7627.9409 14783.9912 616.2856]","478":"[-8138.8403 14784.292 570.5638]","479":"[-8650.1084 14784.0059 515.1095]","480":"[-9171.4473 14783.9893 454.2121]","481":"[-9690.3457 14783.626 392.2413]","482":"[-10200.3096 14783.8154 331.4578]","483":"[-10712.2695 14783.6514 271.0671]","484":"[-11231.4053 14783.5928 213.7484]","485":"[-11750.7832 14783.8057 165.7892]","486":"[-12265.3008 14780.3535 140.7527]","487":"[-12780.0889 14748.2783 133.8312]","488":"[-13289.4902 14662.3447 133.6379]","489":"[-13781.3896 14503.0303 133.6412]","490":"[-14190.5811 14285.5654 133.5361]","491":"[-14483.1436 14056.4951 133.4357]","492":"[-14760.4902 13747.6367 133.5149]","493":"[-14969.8955 13410.7061 133.4474]","494":"[-15162.1982 12929.8154 133.5057]","495":"[-15274.0381 12426.4434 133.5729]","496":"[-15323.0078 11914.5674 132.0765]","497":"[-15335.9629 11399.416 114.5669]","498":"[-15335.5361 10881.0723 74.5335]","499":"[-15335.9561 10363.3623 20.621]","500":"[-15336.1904 9847.0762 -38.6478]","501":"[-15336.3066 9330.4268 -100.517]","502":"[-15346.2002 8812.7676 -163.3994]","503":"[-15382.6338 8299.2617 -226.5269]","504":"[-15445.3242 7792.3638 -288.644]","505":"[-15497.5957 7285.8154 -350.8643]","506":"[-15516.4912 6771.9556 -413.9976]","507":"[-15520.2451 6258.5986 -476.9509]","508":"[-15519.3203 5739.8896 -540.7343]","509":"[-15519.1689 5219.8516 -604.5701]","510":"[-15519.9336 4702.397 -668.1008]","511":"[-15519.5537 4191.1909 -730.7513]","512":"[-15519.7158 3674.7061 -794.3202]","513":"[-15519.79 3158.0981 -857.7751]","514":"[-15519.5 2644.4043 -921.0157]","515":"[-15519.542 2135.2866 -982.7799]","516":"[-15519.5557 1614.3983 -1046.5428]","517":"[-15519.8369 1100.4473 -1110.0192]","518":"[-15519.0332 575.8349 -1174.4935]","519":"[-15519.9365 61.5044 -1237.5491]","520":"[-15519.877 -457.6136 -1301.1514]","521":"[-15519.168 -977.3496 -1364.0989]","522":"[-15519.6992 -1494.0087 -1425.1886]","523":"[-15519.8721 -2004.4381 -1483.0814]","524":"[-15519.1621 -2525.7437 -1535.1038]","525":"[-15520.2275 -3054.6807 -1567.6719]","526":"[-15520.1592 -3576.5815 -1579.4832]","527":"[-15519.5527 -4093.6167 -1579.4166]","528":"[-15520.458 -4609.3892 -1579.4633]","529":"[-15520.0479 -5124.2036 -1579.3453]","530":"[-15519.8057 -5638.0518 -1579.4302]","531":"[-15520.4434 -6150.9678 -1579.4202]","532":"[-15519.9756 -6680.5435 -1579.3859]","533":"[-15520.165 -7210.0977 -1579.4961]","534":"[-15519.3652 -7726.5938 -1579.3461]","535":"[-15512.0791 -8245.8281 -1579.4065]","536":"[-15487.5381 -8762.3955 -1579.033]","537":"[-15442.4736 -9276.2471 -1579.3763]","538":"[-15377.4502 -9786.6904 -1579.386]","539":"[-15288.7461 -10292.2754 -1579.3452]","540":"[-15174.2813 -10791.3232 -1579.3416]","541":"[-15026.9326 -11300.6982 -1579.2192]","542":"[-14847.375 -11798.0283 -1579.2822]","543":"[-14633.6455 -12279.9502 -1579.2904]","544":"[-14385.0586 -12742.9932 -1579.4454]","545":"[-14099.7988 -13182.4023 -1579.351]","546":"[-13778.6787 -13594.2686 -1579.3336]","547":"[-13423.7764 -13975.165 -1579.2667]","548":"[-13037.5107 -14321.8066 -1579.3809]","549":"[-12623.0693 -14631.7061 -1579.4373]","550":"[-12185.7451 -14905.7236 -1579.2836]","551":"[-11728.9834 -15142.9561 -1579.384]","552":"[-11257.0811 -15345.2451 -1579.4432]","553":"[-10773.6094 -15515.415 -1579.3815]","554":"[-10269.0361 -15658.4961 -1579.2499]","555":"[-9758.0508 -15771.7207 -1579.3986]","556":"[-9243.1563 -15858.7393 -1579.3746]","557":"[-8725.9736 -15921.8545 -1579.3075]","558":"[-8207.7266 -15963.2227 -1579.3925]","559":"[-7689.3926 -15985.0928 -1579.4844]","560":"[-7171.689 -15991.7656 -1579.4869]","561":"[-6654.9595 -15991.0361 -1579.4487]","562":"[-6139.2422 -15990.458 -1579.4222]","563":"[-5624.561 -15991.7256 -1579.4694]","564":"[-5109.4326 -15991.3115 -1591.6036]","565":"[-4591.8252 -15990.9268 -1624.1207]","566":"[-4069.3572 -15991.0254 -1676.6146]","567":"[-3558.4282 -15990.9893 -1734.5986]","568":"[-3048.1189 -15991.167 -1795.2203]","569":"[-2528.3926 -15991.1152 -1858.3733]","570":"[-2019.5122 -15990.6377 -1920.7794]","571":"[-1510.4646 -15991.0283 -1982.5448]","572":"[-985.9043 -15990.8457 -2045.3333]","573":"[-461.4722 -15990.2568 -2105.4631]","574":"[52.4746 -15990.5498 -2159.0056]","575":"[567.3611 -15990.6709 -2197.918]","576":"[1086.2618 -15987.5215 -2214.2839]","577":"[1613.9702 -15970.3389 -2215.074]","578":"[2138.6987 -15931.998 -2215.1982]","579":"[2660.167 -15873.1045 -2214.7603]","580":"[3176.8245 -15791.6035 -2215.1997]","581":"[3687.2207 -15683.377 -2215.4333]","582":"[4189.6797 -15547.9502 -2215.4233]","583":"[4681.6294 -15382.6934 -2215.3369]","584":"[5159.7666 -15184.7559 -2215.2112]","585":"[5621.0049 -14953.4941 -2215.1699]","586":"[6061.3423 -14687.5596 -2215.2161]","587":"[6476.8301 -14386.9951 -2215.2446]","588":"[6877.5806 -14039.999 -2215.2417]","589":"[7243.6226 -13658.8164 -2215.2463]","590":"[7573.0562 -13247.5752 -2215.3708]","591":"[7864.9414 -12810.7441 -2215.3152]","592":"[8118.3032 -12352.1758 -2215.4409]","593":"[8335.082 -11876.5742 -2215.2952]","594":"[8516.8691 -11391.4873 -2215.4832]","595":"[8666.2549 -10895.9971 -2215.3301]","596":"[8785.8301 -10390.5186 -2215.3579]","597":"[8881.751 -9881.4639 -2215.3867]","598":"[8951.3379 -9365.2061 -2215.3145]","599":"[8999.3076 -8851.2031 -2215.3701]","600":"[9028.0361 -8337.3799 -2215.2551]","601":"[9045.0029 -7817.2173 -2215.2666]","602":"[9077.874 -7299.9487 -2215.4314]","603":"[9149.3086 -6788.7603 -2215.3347]","604":"[9256.8809 -6285.7266 -2215.3972]","605":"[9360.5371 -5784.0381 -2215.3899]","606":"[9433.3164 -5269.1943 -2215.436]","607":"[9465.8369 -4751.48 -2215.5142]","608":"[9473.6494 -4229.6855 -2215.3401]","609":"[9472.917 -3700.9258 -2215.51]","610":"[9472.3301 -3183.5044 -2215.4453]","611":"[9473.7021 -2666.6768 -2215.4744]","612":"[9473.1123 -2150.8269 -2215.4397]","613":"[9472.7461 -1635.9169 -2215.5168]","614":"[9473.2715 -1121.9523 -2215.4988]","615":"[9472.9639 -608.9202 -2215.5403]","616":"[9473.3115 -96.856 -2215.3142]","617":"[9472.8701 431.3045 -2215.4351]","618":"[9473.0742 958.4771 -2215.4385]","619":"[9473.2188 1484.6648 -2215.4619]","620":"[9472.7754 2009.8618 -2215.5339]","621":"[9472.8887 2529.7029 -2214.8955]","622":"[9472.1279 3044.5779 -2214.7026]","623":"[9473.0967 3556.5981 -2214.4023]","624":"[9472.834 4083.7715 -2214.375]","625":"[9472.6943 4609.6411 -2214.4312]","626":"[9473.1826 5134.5176 -2214.4724]","627":"[9473.2041 5658.4644 -2214.5249]","628":"[9472.7324 6185.0229 -2214.4863]","629":"[9473.3154 6704.9014 -2214.4216]","630":"[9473.1748 7223.7637 -2214.4778]","631":"[9472.624 7741.6836 -2214.5886]","632":"[9473.5371 8258.624 -2214.4395]","633":"[9473.2813 8774.6074 -2214.5671]","634":"[9472.915 9289.6924 -2214.4932]","635":"[9472.5264 9803.8584 -2214.4705]","636":"[9472.5713 10316.7383 -2214.4514]","637":"[9473.2227 10838.0264 -2214.448]","638":"[9472.8379 11361.4014 -2214.3411]","639":"[9464.3789 11885.0801 -2214.3228]","640":"[9426.6064 12404.8955 -2214.1433]","641":"[9344.5811 12918.3828 -2214.4514]","642":"[9213.2266 13414.2354 -2214.3533]","643":"[9014.2637 13897.7959 -2214.4629]","644":"[8748.0938 14344.4307 -2214.3137]","645":"[8410.6025 14735.9346 -2214.208]","646":"[8013.4985 15062.9531 -2214.4429]","647":"[7568.5313 15317.5049 -2214.2515]","648":"[7080.9116 15508.9365 -2214.3867]","649":"[6574.0518 15636.7637 -2214.4187]","650":"[6057.8926 15712.8135 -2214.2292]","651":"[5539.0181 15745.3057 -2214.313]","652":"[5023.2642 15752.6416 -2214.4138]","653":"[4508.2832 15751.5156 -2214.2979]","654":"[3994.0691 15752.1914 -2214.4714]","655":"[3480.6953 15751.4424 -2214.3767]","656":"[2968.9099 15736.583 -2214.1958]","657":"[2448.6843 15689.5742 -2214.4167]","658":"[1938.8077 15594.2051 -2214.1067]","659":"[1444.5083 15446.791 -2214.5615]","660":"[978.2227 15234.8242 -2214.3018]","661":"[548.3005 14956.2383 -2214.4304]","662":"[172.653 14605.585 -2214.4885]","663":"[-144.0486 14187.8682 -2214.1316]","664":"[-385.7145 13724.4219 -2214.4641]","665":"[-558.8445 13232.7607 -2214.2715]","666":"[-672.7442 12725.0566 -2214.3052]","667":"[-736.1255 12209.5137 -2214.4958]","668":"[-760.4963 11691.3994 -2214.9604]","669":"[-764.7978 11172.5254 -2221.1875]","670":"[-763.4318 10660.9277 -2245.1677]","671":"[-764.8185 10150.8086 -2290.5503]","672":"[-763.4393 9636.3213 -2346.4741]","673":"[-764.7699 9115.8701 -2407.199]","674":"[-763.4142 8605.5322 -2468.3977]","675":"[-764.0934 8092.5791 -2530.0208]","676":"[-763.1676 7576.8325 -2590.4602]","677":"[-763.8362 7064.5518 -2646.8433]","678":"[-763.4095 6553.248 -2694.3252]","679":"[-764.1934 6038.3237 -2719.7571]","680":"[-763.6988 5515.0854 -2727.5667]","681":"[-764.6448 4991.1553 -2727.5032]","682":"[-763.7393 4468.0288 -2727.3274]","683":"[-764.1053 3945.7007 -2727.4578]","684":"[-763.8518 3424.4084 -2727.2966]","685":"[-763.6398 2904.4951 -2727.437]","686":"[-750.8118 2386.6145 -2727.3596]","687":"[-699.8696 1873.7272 -2727.3997]","688":"[-612.091 1367.1563 -2727.3301]","689":"[-506.8012 853.13 -2727.4768]","690":"[-406.0967 334.8459 -2727.3726]","691":"[-303.7562 -178.2924 -2727.4839]","692":"[-200.2045 -692.0361 -2727.4548]","693":"[-99.5005 -1205.2358 -2727.4971]","694":"[2.5291 -1717.1027 -2727.5225]","695":"[104.9874 -2227.8149 -2727.397]","696":"[204.1388 -2732.3643 -2727.3865]","697":"[306.0419 -3240.7805 -2727.4141]","698":"[408.2082 -3755.7725 -2727.3989]","699":"[510.5975 -4269.8511 -2727.5261]","700":"[612.0514 -4780.7202 -2727.448]","701":"[713.7674 -5291.7437 -2727.4165]","702":"[815.8633 -5801.8276 -2727.4272]","703":"[916.704 -6311.2861 -2727.5427]","704":"[1018.3831 -6819.7295 -2727.4519]","705":"[1118.7471 -7327.5454 -2727.4485]","706":"[1220.0968 -7834.3311 -2727.426]","707":"[1320.6406 -8340.4102 -2727.4089]","708":"[1420.7452 -8845.6816 -2727.394]","709":"[1521.4635 -9349.6729 -2727.2087]","710":"[1620.4854 -9853.0049 -2727.3425]","711":"[1707.2092 -10371.6992 -2727.4766]","712":"[1757.9696 -10892.1885 -2726.9229]","713":"[1760.5043 -11412.5391 -2726.8203]","714":"[1703.682 -11932.0928 -2726.9883]","715":"[1577.1517 -12442.7666 -2726.7263]","716":"[1371.1187 -12922.8232 -2726.5586]","717":"[1088.9156 -13358.624 -2725.5676]","718":"[737.0938 -13743.8105 -2723.1648]","719":"[420.137 -13987.292 -2725.3457]","720":"[326.5932 -14034.5566 -2728.3843]","721":"[-113.2025 -14300.6914 -2726.5293]","722":"[-587.6689 -14501.7705 -2727.3779]","723":"[-1076.6936 -14656.1777 -2727.3721]","724":"[-1575.1409 -14774.3926 -2727.3091]","725":"[-2082.6685 -14856.4971 -2727.0798]","726":"[-2599.5071 -14897.0596 -2727.1729]","727":"[-3115.2551 -14888.9004 -2727.5864]","728":"[-3628.7744 -14821.0313 -2727.4548]","729":"[-4127.355 -14682.1924 -2727.4939]","730":"[-4597.7744 -14464.9727 -2727.7959]","731":"[-5018.8105 -14173.2041 -2727.5078]","732":"[-5385.6211 -13812.8633 -2727.6467]","733":"[-5691.6045 -13400.3066 -2727.3831]","734":"[-5941.9321 -12944.9932 -2727.5513]","735":"[-6138.4282 -12466.4434 -2727.4761]","736":"[-6289.5913 -11973.7822 -2727.3064]","737":"[-6412.8271 -11475.1172 -2727.3237]","738":"[-6543.0181 -10977.2656 -2727.2222]","739":"[-6710.6138 -10493.3721 -2727.573]","740":"[-6924.2617 -10021.8389 -2727.5237]","741":"[-7190.0659 -9581.1074 -2727.4109]","742":"[-7518.667 -9178.3809 -2727.2708]","743":"[-7899.7803 -8835.417 -2727.2324]","744":"[-8288.5684 -8498.9443 -2727.2712]","745":"[-8642.5664 -8127.6348 -2727.7241]","746":"[-8939.0264 -7705.9766 -2727.5237]","747":"[-9178.082 -7251.1665 -2727.3735]","748":"[-9368.0381 -6768.855 -2727.2927]","749":"[-9515.8145 -6270.1196 -2727.3088]","750":"[-9631.2266 -5768.7554 -2727.3145]","751":"[-9732.3115 -5265.0918 -2727.4812]","752":"[-9812.5615 -4752.4521 -2727.4458]","753":"[-9855.2432 -4238.3354 -2727.5029]","754":"[-9863.7725 -3718.3555 -2727.5686]","755":"[-9862.2012 -3199.24 -2727.5327]","756":"[-9862.8193 -2681.2344 -2727.5208]","757":"[-9863.2266 -2164.353 -2727.5034]","758":"[-9862.8721 -1646.624 -2727.4722]","759":"[-9862.9922 -1124.9825 -2727.3933]","760":"[-9862.8613 -610.8767 -2727.5286]","761":"[-9862.8623 -97.5308 -2727.3645]","762":"[-9863.0771 415.106 -2727.5332]","763":"[-9862.8809 939.1588 -2727.3452]","764":"[-9863.0576 1462.3971 -2727.4922]","765":"[-9862.8057 1984.8033 -2727.4753]","766":"[-9863.1416 2506.406 -2727.5186]","767":"[-9862.7754 3026.9944 -2727.3411]","768":"[-9863.6943 3546.4807 -2727.3906]","769":"[-9863.377 4064.0916 -2727.4514]","770":"[-9863.8564 4580.4927 -2727.532]","771":"[-9863.6221 5095.9551 -2727.4314]","772":"[-9863.1445 5610.5542 -2727.366]","773":"[-9863.5439 6124.5293 -2731.0669]","774":"[-9863.1133 6643.5557 -2751.928]","775":"[-9863.5127 7162.4429 -2795.7329]","776":"[-9863.2236 7677.0757 -2850.9177]","777":"[-9863.3926 8196.0117 -2911.1404]","778":"[-9863.4395 8709.957 -2972.512]","779":"[-9863.5908 9218.8164 -3033.7124]","780":"[-9863.793 9733.9961 -3094.4185]","781":"[-9863.6016 10244.7979 -3151.4226]","782":"[-9863.4639 10759.8496 -3200.916]","783":"[-9863.6572 11276.8877 -3229.8997]","784":"[-9862.1436 11795.8584 -3239.6863]","785":"[-9833.918 12315.2471 -3239.3579]","786":"[-9756.0781 12830.9258 -3239.2297]","787":"[-9607.0684 13326.0283 -3239.3828]","788":"[-9396.4834 13742.9121 -3239.4539]","789":"[-9165.3877 14051.2471 -3239.5771]","790":"[-8861.7295 14335.0957 -3239.4089]","791":"[-8536.416 14546.1455 -3239.4084]","792":"[-8065.3804 14745.0449 -3239.3472]","793":"[-7562.0483 14865.5889 -3239.2842]","794":"[-7049.1299 14920.3057 -3239.4165]","795":"[-6534.8071 14923.0732 -3239.3088]","796":"[-6016.7676 14881.7236 -3239.3025]","797":"[-5506.585 14798.0928 -3239.4504]","798":"[-5010.6587 14662.9824 -3239.5725]","799":"[-4531.6528 14464.3945 -3239.5083]","800":"[-4090.5906 14200.1826 -3239.2148]","801":"[-3691.7559 13872.0146 -3239.323]","802":"[-3320.6721 13516.9727 -3239.5542]","803":"[-2952.5513 13142.0371 -3239.3518]","804":"[-2586.4292 12776.9072 -3239.5171]","805":"[-2210.2268 12404.7686 -3239.4722]","806":"[-1837.9661 12030.3955 -3239.469]","807":"[-1466.5845 11656.8564 -3239.4392]","808":"[-1094.2633 11285.9121 -3239.4553]","809":"[-722.846 10915.6748 -3239.5371]","810":"[-353.2256 10545.2832 -3239.5151]","811":"[15.3138 10175.4355 -3239.4751]","812":"[384.1422 9807.4893 -3239.4189]","813":"[752.2257 9440.4219 -3239.4109]","814":"[1118.3962 9073.0488 -3239.4443]","815":"[1484.1348 8706.8574 -3239.45]","816":"[1849.8044 8342.1533 -3239.438]","817":"[2214.7886 7978.3027 -3239.5]","818":"[2577.9158 7614.1572 -3239.4878]","819":"[2940.0146 7250.5547 -3239.4717]","820":"[3302.8413 6889.2256 -3239.5339]","821":"[3679.1516 6514.0137 -3239.5503]","822":"[4053.4749 6138.4355 -3239.4888]","823":"[4427.2085 5763.9063 -3239.4563]","824":"[4800.8008 5390.8506 -3239.4277]","825":"[5174.0171 5019.0195 -3239.4158]","826":"[5545.0947 4646.7988 -3239.4761]","827":"[5917.2915 4274.6797 -3259.0691]","828":"[6290.9185 3902.1907 -3300.0176]","829":"[6652.5195 3538.959 -3353.3926]","830":"[7019.6709 3171.9585 -3412.9146]","831":"[7392.0518 2800.7375 -3475.7686]","832":"[7753.1973 2439.3296 -3537.3301]","833":"[8117.9385 2074.4604 -3598.387]","834":"[8484.4971 1708.366 -3656.9341]","835":"[8849.9541 1342.8947 -3708.24]","836":"[9223.2139 968.8925 -3740.3845]","837":"[9584.2148 598.9535 -3751.6089]","838":"[9933.9561 217.0026 -3751.4822]","839":"[10269.8779 -180.6721 -3751.1204]","840":"[10594.4521 -597.7684 -3751.3293]","841":"[10895.7002 -1025.3121 -3751.354]","842":"[11173.9268 -1466.6183 -3751.3188]","843":"[11425.665 -1921.9783 -3751.2527]","844":"[11648.1133 -2390.6741 -3751.0938]","845":"[11836.8018 -2872.2329 -3751.3882]","846":"[11988.5527 -3364.8979 -3751.5332]","847":"[12100.3809 -3866.2864 -3751.2739]","848":"[12169.2861 -4373.6353 -3751.2271]","849":"[12193.8516 -4900.4575 -3751.3455]","850":"[12171.1104 -5425.7192 -3751.3286]","851":"[12101.5166 -5946.0391 -3751.3325]","852":"[11987.3906 -6462.1924 -3751.2756]","853":"[11835.4951 -6954.8833 -3751.2161]","854":"[11646.415 -7434.5332 -3751.373]","855":"[11426.0088 -7899.2207 -3751.385]","856":"[11177.9453 -8348.4414 -3751.3521]","857":"[10895.0439 -8796.9307 -3751.1616]","858":"[10589.9316 -9229.1875 -3751.2476]","859":"[10264.3789 -9647.6621 -3751.3867]","860":"[9925.96 -10046.2383 -3751.1462]","861":"[9573.4209 -10430.8828 -3751.2542]","862":"[9208.4102 -10802.1953 -3751.4121]","863":"[8831.2539 -11159.0498 -3751.5254]","864":"[8442.6826 -11500.7617 -3751.5745]","865":"[8033.5176 -11832.4482 -3751.1755]","866":"[7615.2563 -12142.4678 -3751.3457]","867":"[7183.603 -12430.6094 -3751.2803]","868":"[6738.1196 -12694.334 -3751.1897]","869":"[6279.0313 -12930.4053 -3751.3076]","870":"[5805.854 -13135.9053 -3751.4392]","871":"[5307.5259 -13311.251 -3751.3293]","872":"[4798.2476 -13445.3945 -3751.3533]","873":"[4281.2065 -13536.3359 -3751.4031]","874":"[3759.9158 -13581.5 -3751.292]","875":"[3238.5828 -13579.4854 -3751.3757]","876":"[2721.0837 -13531.6133 -3751.4768]","877":"[2211.1008 -13439.2852 -3751.4539]","878":"[1711.8811 -13305.2266 -3751.3015]","879":"[1225.5645 -13133.9971 -3751.4519]","880":"[753.9832 -12928.5869 -3751.4636]","881":"[297.6974 -12693.7588 -3751.4644]","882":"[-143.0275 -12433.0068 -3751.5027]","883":"[-581.8073 -12139.6992 -3751.5601]","884":"[-1004.8853 -11826.001 -3751.5005]","885":"[-1412.7886 -11494.4482 -3751.2634]","886":"[-1806.3566 -11147.542 -3751.3892]","887":"[-2186.7871 -10787.709 -3751.3701]","888":"[-2558.2417 -10419.8965 -3751.5413]","889":"[-2926.8547 -10050.5264 -3751.4888]","890":"[-3294.811 -9681.8379 -3751.4651]","891":"[-3662.5957 -9314.2949 -3751.4604]","892":"[-4029.7339 -8947.3906 -3751.4568]","893":"[-4396.3833 -8581.1045 -3751.4897]","894":"[-4759.6392 -8218.3584 -3751.5652]","895":"[-5123.9839 -7853.0273 -3751.4192]","896":"[-5488.2739 -7488.9922 -3751.3264]","897":"[-5851.7861 -7125.5347 -3751.3267]","898":"[-6214.6187 -6762.7407 -3751.4307]","899":"[-6576.938 -6400.751 -3751.4531]","900":"[-6944.4082 -6033.3291 -3751.4612]","901":"[-7311.8726 -5665.7012 -3751.3926]","902":"[-7679.6255 -5297.752 -3751.4402]","903":"[-8041.793 -4935.5532 -3751.5117]","904":"[-8404.1104 -4572.8052 -3751.2803]","905":"[-8773.0146 -4204.21 -3751.4316]","906":"[-9136.9629 -3840.3015 -3751.4277]","907":"[-9507.0098 -3470.1917 -3751.4202]","908":"[-9870.2637 -3106.2183 -3751.4541]","909":"[-10237.7188 -2738.5874 -3751.3843]","910":"[-10604.4453 -2373.6748 -3751.4387]","911":"[-10969.6611 -2008.8022 -3751.448]","912":"[-11343.7461 -1633.2853 -3751.4021]","913":"[-11713.4346 -1262.3092 -3751.4202]","914":"[-12082.3535 -895.3417 -3751.3457]","915":"[-12445.4111 -530.3635 -3751.4565]","916":"[-12813.8525 -164.1103 -3751.4111]","917":"[-13177.0938 201.4431 -3751.4656]","918":"[-13541.9619 563.9583 -3751.4111]","919":"[-13908.7246 937.3759 -3751.3899]","920":"[-14258.0215 1323.9242 -3751.3481]","921":"[-14575.3672 1733.2283 -3751.4485]","922":"[-14851.0947 2169.0417 -3751.5068]","923":"[-15073.4043 2631.4075 -3751.5203]","924":"[-15232.875 3129.5708 -3751.1672]","925":"[-15310.7832 3643.9692 -3751.1003]","926":"[-15318.6855 4163.9907 -3751.4246]","927":"[-15277.7861 4681.313 -3751.5332]","928":"[-15199.5674 5192.9175 -3751.4009]","929":"[-15101.1992 5699.7329 -3751.4592]","930":"[-14999.5322 6204.5049 -3751.4636]","931":"[-14900.127 6708.4536 -3751.4131]","932":"[-14805.3252 7211.793 -3751.4556]","933":"[-14739.791 7729.4565 -3751.4392]","934":"[-14711.1738 8248.6484 -3751.4114]","935":"[-14705.8457 8767.915 -3751.4814]","936":"[-14705.9922 9289.8076 -3751.3374]","937":"[-14706.0283 9804.793 -3751.4307]","938":"[-14706.0264 10318.9492 -3751.3025]","939":"[-14705.6318 10832.124 -3751.5479]","940":"[-14688.4814 11356.3867 -3751.2021]","941":"[-14637.5039 11876.1113 -3751.2747]","942":"[-14536.873 12386.7451 -3751.4763]","943":"[-14382.4063 12880.8809 -3751.0046]","944":"[-14162.8262 13345.6592 -3751.5093]","945":"[-13868.8145 13778.2451 -3751.3767]","946":"[-13505.7227 14150.4893 -3751.5815]","947":"[-13085.7197 14453.082 -3751.3911]","948":"[-12623.9229 14683.7979 -3751.592]","949":"[-12135.9072 14848.0439 -3751.3638]","950":"[-11627.7832 14956.0547 -3751.7004]","951":"[-11106.1777 15016.4268 -3751.3723]","952":"[-10588.5752 15037.4365 -3751.5437]","953":"[-10076.5332 15040.1787 -3751.4966]","954":"[-9559.4932 15039.4014 -3751.4585]","955":"[-9042.1807 15039.582 -3751.4548]","956":"[-8525.8203 15039.6396 -3751.5112]","957":"[-8010.4336 15039.4678 -3751.5625]","958":"[-7496.0122 15039.8135 -3751.4517]","959":"[-6982.7949 15039.1299 -3750.8818]","960":"[-6453.4185 15039.6475 -3751.0679]","961":"[-5925.7256 15039.1563 -3751.5098]","962":"[-5399.417 15038.4463 -3751.6262]","963":"[-4874.9741 15039.5996 -3751.3528]","964":"[-4352.209 15039.3262 -3750.9971]","965":"[-3831.0737 15038.8936 -3750.9734]","966":"[-3311.51 15039.6689 -3751.4585]","967":"[-2792.854 15039.0654 -3751.5488]","968":"[-2275.1675 15038.5391 -3751.5176]","969":"[-1758.4174 15039.3525 -3751.4365]","970":"[-1242.6277 15039.1445 -3751.4407]","971":"[-727.7779 15038.374 -3751.4419]","972":"[-213.8456 15039.208 -3751.4287]","973":"[299.1512 15039.5703 -3751.4492]","974":"[811.1998 15038.1416 -3751.4583]","975":"[1339.3347 15038.5674 -3751.4597]","976":"[1866.5055 15039.3604 -3751.4377]","977":"[2392.7158 15038.918 -3751.4944]","978":"[2920.0093 15039.0068 -3765.8008]","979":"[3433.9844 15039.0693 -3800.5918]","980":"[3955.4067 15039.1436 -3853.5239]","981":"[4469.9609 15038.8896 -3912.0242]","982":"[4996.1147 15039.1602 -3974.7727]","983":"[5515.3774 15039.293 -4037.2515]","984":"[6026.9863 15039.0957 -4097.9683]","985":"[6549.0356 15039.209 -4157.4468]","986":"[7061.0757 15039.3838 -4210.4253]","987":"[7580.4014 15039.1934 -4248.0962]","988":"[8103.252 15038.8848 -4263.0845]","989":"[8616.1055 15039.0635 -4263.2495]","990":"[9128.8125 15038.9668 -4263.3667]","991":"[9646.4814 15038.7979 -4263.3525]","992":"[10163.2588 15038.5557 -4263.4673]","993":"[10684.5674 15038.7559 -4263.1875]","994":"[11204.6133 15027.3389 -4263.416]","995":"[11721.0107 14983.6895 -4263.1699]","996":"[12229.1494 14895.8711 -4263.1895]","997":"[12721.584 14754.8799 -4263.2173]","998":"[13200.4473 14547.9424 -4263.252]","999":"[13638.5371 14271.3906 -4263.3223]","1000":"[14021.0986 13927.0557 -4263.2915]","1001":"[14337.1182 13523.5674 -4263.3945]","1002":"[14587.5449 13063.5176 -4263.21]","1003":"[14768.0469 12573.3545 -4263.4888]","1004":"[14887.627 12066.042 -4263.2324]","1005":"[14956.0391 11550.1855 -4263.2759]","1006":"[14983.8027 11035.2607 -4263.353]","1007":"[14989.0508 10516.8057 -4263.3818]","1008":"[14987.9453 10000.7949 -4263.4766]","1009":"[14986.9258 9473.9795 -4263.4692]","1010":"[14987.9756 8937.54 -4263.5112]","1011":"[14988.8174 8413.5098 -4263.46]","1012":"[14988.4531 7890.8291 -4263.4785]","1013":"[14987.8369 7369.5068 -4263.4683]","1014":"[14987.502 6849.5454 -4263.3462]","1015":"[14987.5889 6330.9033 -4263.3838]","1016":"[14988.2256 5813.6089 -4263.4282]","1017":"[14988.4443 5297.6074 -4263.4795]","1018":"[14987.4756 4764.1704 -4263.4819]","1019":"[14987.5039 4237.8774 -4263.4565]","1020":"[14988.1797 3724.9666 -4263.4634]","1021":"[14987.9492 3197.3132 -4263.457]","1022":"[14984.9658 2676.7126 -4262.707]","1023":"[14959.5234 2159.407 -4263.25]","1024":"[14890.5645 1639.7726 -4263.3193]","1025":"[14773.333 1140.1874 -4263.436]","1026":"[14595.7041 648.7827 -4263.2046]","1027":"[14349.7021 191.5279 -4263.354]","1028":"[14034.8877 -216.9174 -4263.0225]","1029":"[13656.0293 -562.3677 -4263.4561]","1030":"[13215.1084 -844.2455 -4263.2686]","1031":"[12737.0752 -1053.9576 -4263.4141]","1032":"[12236.5781 -1198.2706 -4263.4546]","1033":"[11724.6533 -1287.8839 -4263.1841]","1034":"[11206.0293 -1331.678 -4263.3794]","1035":"[10681.4785 -1343.7805 -4263.3242]","1036":"[10155.8213 -1344.6283 -4263.4248]","1037":"[9640.8584 -1342.922 -4263.3652]","1038":"[9126.832 -1344.1543 -4263.5317]","1039":"[8613.7002 -1344.1619 -4263.5596]","1040":"[8101.5132 -1343.651 -4263.5464]","1041":"[7573.7256 -1344.1628 -4263.4189]","1042":"[7046.8862 -1344.1477 -4263.519]","1043":"[6520.9902 -1343.8572 -4263.4287]","1044":"[5996.0278 -1343.9827 -4263.4663]","1045":"[5472.0332 -1344.231 -4263.3677]","1046":"[4948.9507 -1343.655 -4263.4941]","1047":"[4426.8052 -1343.8734 -4263.4639]","1048":"[3905.6003 -1344.1952 -4263.3838]","1049":"[3385.3103 -1343.4965 -4263.4155]","1050":"[2866.1123 -1344.6681 -4263.292]","1051":"[2348.0894 -1344.3875 -4263.2954]","1052":"[1831.0231 -1344.3865 -4263.2432]","1053":"[1315.3171 -1345.4434 -4263.3252]","1054":"[800.4871 -1343.9485 -4263.3682]","1055":"[286.58 -1344.8024 -4263.356]","1056":"[-226.4437 -1345.0416 -4263.4131]","1057":"[-738.5685 -1344.1436 -4263.3433]","1058":"[-1265.4716 -1345.2349 -4263.3667]","1059":"[-1791.3547 -1344.1626 -4263.2339]","1060":"[-2316.1086 -1343.9991 -4263.1455]","1061":"[-2839.6252 -1344.2363 -4263.3877]","1062":"[-3362.2288 -1343.5618 -4263.481]","1063":"[-3883.9275 -1343.5594 -4263.5044]","1064":"[-4404.7275 -1344.1443 -4263.438]","1065":"[-4924.6138 -1343.6854 -4263.4619]","1066":"[-5443.606 -1343.6104 -4263.4619]","1067":"[-5961.7368 -1344.0253 -4263.4585]","1068":"[-6479.2861 -1343.3544 -4263.4668]","1069":"[-6991.5366 -1334.4896 -4263.395]","1070":"[-7518.5879 -1307.8063 -4263.3247]","1071":"[-8043.0698 -1260.5507 -4263.3433]","1072":"[-8563.7051 -1190.6946 -4263.3164]","1073":"[-9079.1348 -1096.8188 -4263.3643]","1074":"[-9587.6182 -976.1063 -4263.4712]","1075":"[-10086.8535 -825.976 -4263.3838]","1076":"[-10573.8477 -644.7527 -4263.6831]","1077":"[-11045.7334 -431.2069 -4263.5186]","1078":"[-11498.1846 -182.8709 -4263.5317]","1079":"[-11927.7129 100.134 -4263.3096]","1080":"[-12330.3174 417.5194 -4263.478]","1081":"[-12713.751 779.0538 -4263.3726]","1082":"[-13061.9492 1172.2085 -4263.3188]","1083":"[-13372.4072 1593.6389 -4263.4189]","1084":"[-13645.9766 2038.3209 -4263.541]","1085":"[-13882.1758 2502.4536 -4263.3384]","1086":"[-14083.2432 2981.4163 -4263.3833]","1087":"[-14250.5117 3471.8496 -4263.4233]","1088":"[-14387.8594 3970.3601 -4263.2588]","1089":"[-14496.4326 4474.6484 -4263.2231]","1090":"[-14579.96 4982.6587 -4263.3984]","1091":"[-14640.5811 5497.1348 -4263.4014]","1092":"[-14680.2383 6017.4917 -4263.3848]","1093":"[-14700.6904 6537.9771 -4263.1772]","1094":"[-14698.8018 7057.2495 -4263.4829]","1095":"[-14663.4121 7573.3667 -4262.9009]","1096":"[-14585.4414 8082.4165 -4262.8706]","1097":"[-14456.5479 8578.2334 -4263.5186]","1098":"[-14261.4102 9064.0898 -4263.1255]","1099":"[-13999.2549 9512.9111 -4263.0132]","1100":"[-13668.8311 9910.0557 -4261.9004]","1101":"[-13272.8066 10248.7676 -4259.8389]","1102":"[-12936.4834 10446.4766 -4261.9355]","1103":"[-12462.0186 10651.4814 -4263.1411]","1104":"[-11967.1475 10788.6895 -4263.5156]","1105":"[-11464.1543 10884.5859 -4263.2793]","1106":"[-10945.4863 10929.5283 -4263.2715]","1107":"[-10432.4766 10940.6113 -4276.9004]","1108":"[-9915.877 10943.5684 -4309.999]","1109":"[-9405.875 10943.1826 -4360.7056]","1110":"[-8888.0332 10942.6484 -4419.2915]","1111":"[-8375.6631 10943.4043 -4480.0112]","1112":"[-7860.9365 10942.7412 -4541.7393]","1113":"[-7347.4819 10943.5352 -4603.061]","1114":"[-6825.0986 10942.958 -4663.1147]","1115":"[-6310.9956 10943.2764 -4717.0835]","1116":"[-5796.1865 10943.1934 -4756.8687]","1117":"[-5272.9219 10943.3857 -4774.6592]","1118":"[-4760.9058 10943.4346 -4776.2881]","1119":"[-4234.4272 10942.8779 -4776.4775]","1120":"[-3708.7983 10942.8848 -4776.4712]","1121":"[-3184.0222 10943.2021 -4776.4595]","1122":"[-2660.094 10943.8662 -4776.5186]","1123":"[-2137.063 10942.5645 -4776.4351]","1124":"[-1614.9186 10943.6055 -4776.353]","1125":"[-1093.6152 10943.6699 -4776.4341]","1126":"[-573.1732 10942.9473 -4776.4521]","1127":"[-53.5953 10942.6221 -4776.4521]","1128":"[465.15 10943.2754 -4776.4546]","1129":"[983.0729 10943.4365 -4776.4531]","1130":"[1500.1631 10943.2871 -4776.4004]","1131":"[2016.4447 10943.4834 -4776.3545]","1132":"[2531.6714 10943.9727 -4776.1255]","1133":"[3045.5215 10943.7695 -4776.3364]","1134":"[3558.106 10944.4336 -4776.1924]","1135":"[4083.439 10930.0869 -4776.5215]","1136":"[4602.8623 10883.0273 -4776.4282]","1137":"[5111.022 10789.2871 -4776.4536]","1138":"[5603.2808 10642.7236 -4775.9609]","1139":"[6079.6929 10427.542 -4776.5469]","1140":"[6514.2744 10144.376 -4776.2954]","1141":"[6890.3154 9792.3447 -4776.1782]","1142":"[7199.3813 9383.0273 -4776.3071]","1143":"[7442.5635 8918.4736 -4776.2412]","1144":"[7616.5645 8424.9854 -4776.3262]","1145":"[7730.4009 7915.2803 -4776.2397]","1146":"[7793.9141 7398.2231 -4776.4146]","1147":"[7817.605 6878.5107 -4776.4839]","1148":"[7821.6274 6362.8652 -4776.3257]","1149":"[7820.9644 5832.4595 -4776.3862]","1150":"[7820.5889 5315.7427 -4776.4775]","1151":"[7820.8618 4800.917 -4776.4668]","1152":"[7820.9272 4287.2622 -4776.4878]","1153":"[7821.1646 3774.7664 -4776.4683]","1154":"[7821.188 3241.209 -4776.46]","1155":"[7820.9512 2708.8887 -4776.4629]","1156":"[7820.646 2177.7964 -4776.3423]","1157":"[7821.0479 1647.9323 -4776.3516]","1158":"[7821.207 1119.2666 -4776.3794]","1159":"[7820.5801 591.8199 -4776.4321]","1160":"[7820.3208 65.5785 -4776.4712]","1161":"[7820.8916 -459.4741 -4776.4604]","1162":"[7821.0508 -983.3577 -4776.4512]","1163":"[7821.1543 -1506.0857 -4776.5513]","1164":"[7820.6685 -2027.6296 -4776.5063]","1165":"[7820.5688 -2548.0054 -4776.4751]","1166":"[7821.0005 -3067.218 -4776.5195]","1167":"[7821.499 -3585.2595 -4776.4556]","1168":"[7821.0918 -4102.146 -4776.4678]","1169":"[7820.6265 -4617.8813 -4776.4663]","1170":"[7820.9028 -5132.4922 -4776.4404]","1171":"[7821.1914 -5646.0005 -4776.5469]","1172":"[7821.2031 -6158.3745 -4776.501]","1173":"[7821.127 -6690.9199 -4776.3198]","1174":"[7820.5933 -7222.3008 -4776.3774]","1175":"[7820.7236 -7752.4771 -4776.4644]","1176":"[7821.2383 -8281.4805 -4776.458]","1177":"[7821.1079 -8799.4629 -4776.4634]","1178":"[7821.0054 -9327.0459 -4776.3408]","1179":"[7820.7856 -9843.6582 -4776.4116]","1180":"[7821.7529 -10362.04 -4776.3325]","1181":"[7807.8755 -10879.0947 -4776.3755]","1182":"[7765.4385 -11392.4805 -4776.3667]","1183":"[7676.4731 -11897.207 -4775.9092]","1184":"[7532.9067 -12398.8262 -4776.1968]","1185":"[7325.4175 -12873.7344 -4776.1128]","1186":"[7050.0073 -13308.6689 -4776.3091]","1187":"[6698.6982 -13696.3135 -4776.2876]","1188":"[6287.0239 -14014.9336 -4776.4204]","1189":"[5830.4009 -14260.8516 -4776.1821]","1190":"[5344.3604 -14437.4082 -4776.3892]","1191":"[4841.9131 -14555.5059 -4776.2813]","1192":"[4326.5698 -14623.5908 -4776.3291]","1193":"[3800.9976 -14652.542 -4776.2959]","1194":"[3280.6077 -14656.0762 -4776.3057]","1195":"[2756.4167 -14654.1475 -4776.4766]","1196":"[2239.1511 -14654.2471 -4776.5303]","1197":"[1724.7922 -14655.5215 -4776.3921]","1198":"[1211.7657 -14655.4814 -4776.2891]","1199":"[674.425 -14654.3203 -4776.4541]","1200":"[138.552 -14654.4756 -4776.4604]","1201":"[-395.9642 -14655.2686 -4776.3818]","1202":"[-929.0439 -14655.2617 -4776.459]","1203":"[-1460.765 -14654.4844 -4776.394]","1204":"[-1982.7661 -14654.6758 -4776.4912]","1205":"[-2495.2327 -14655.3857 -4776.417]","1206":"[-3012.9939 -14654.8418 -4776.4858]","1207":"[-3529.6421 -14654.3975 -4776.4561]","1208":"[-4044.8213 -14655.3662 -4776.5005]","1209":"[-4562.1851 -14653.8652 -4776.5122]","1210":"[-5083.8066 -14640.1885 -4776.1899]","1211":"[-5603.2764 -14609.0254 -4776.3813]","1212":"[-6119.8652 -14556.8223 -4776.438]","1213":"[-6631.9097 -14482.4775 -4776.6406]","1214":"[-7138.3433 -14384.6396 -4776.0361]","1215":"[-7637.1333 -14259.8477 -4776.3931]","1216":"[-8126.7622 -14107.1426 -4776.3218]","1217":"[-8619.2041 -13916.6504 -4776.4072]","1218":"[-9095.3662 -13692.0703 -4776.4585]","1219":"[-9551.0625 -13431.6533 -4776.3433]","1220":"[-9981.7637 -13134.8418 -4776.375]","1221":"[-10384.2031 -12803.4131 -4776.4395]","1222":"[-10753.4775 -12437.7607 -4776.6206]","1223":"[-11088.9375 -12042.8154 -4776.3525]","1224":"[-11387.2979 -11620.9229 -4776.3633]","1225":"[-11649.3457 -11177.1436 -4776.2305]","1226":"[-11875.7373 -10715.7676 -4776.416]","1227":"[-12066.9922 -10240.0645 -4776.5615]","1228":"[-12232.1758 -9739.4385 -4776.3784]","1229":"[-12364.7041 -9230.6035 -4776.3882]","1230":"[-12469.6992 -8716.4551 -4776.3716]","1231":"[-12548.207 -8198.6514 -4776.4653]","1232":"[-12603.9658 -7678.8633 -4776.2773]","1233":"[-12638.5352 -7158.3423 -4776.0635]","1234":"[-12654.0654 -6638.2334 -4775.9771]","1235":"[-12657.7715 -6124.3535 -4776.3491]","1236":"[-12656.6328 -5606.5146 -4776.4648]","1237":"[-12656.6152 -5083.1953 -4776.4976]","1238":"[-12657.8115 -4560.8589 -4776.48]","1239":"[-12656.8154 -4039.5068 -4776.4741]","1240":"[-12656.1396 -3519.1626 -4776.4639]","1241":"[-12656.8457 -2999.7732 -4776.4614]","1242":"[-12657.1416 -2481.3308 -4776.3594]","1243":"[-12657.2715 -1963.7949 -4776.3486]","1244":"[-12656.9131 -1447.225 -4776.4517]","1245":"[-12656.9063 -931.5935 -4776.5068]","1246":"[-12656.5986 -416.5213 -4779.6484]","1247":"[-12656.6631 100.8257 -4801.3481]","1248":"[-12656.9414 622.6443 -4846.0352]","1249":"[-12656.9766 1135.9153 -4901.2056]","1250":"[-12656.8135 1660.1731 -4961.8555]","1251":"[-12656.6855 2177.5786 -5024.0718]","1252":"[-12656.834 2687.3972 -5086.2295]","1253":"[-12656.8486 3204.4055 -5149.8047]","1254":"[-12656.7568 3727.5273 -5213.9819]","1255":"[-12657.1699 4242.6738 -5277.3823]","1256":"[-12656.8555 4765.7993 -5341.5684]","1257":"[-12656.6924 5285.4321 -5405.3721]","1258":"[-12656.667 5795.2915 -5467.9692]","1259":"[-12656.6992 6316.1045 -5531.8628]","1260":"[-12657.0928 6840.0859 -5596.2676]","1261":"[-12657.2705 7354.6528 -5658.9219]","1262":"[-12657.2949 7869.0063 -5720.5522]","1263":"[-12657.3359 8385.8652 -5781.4268]","1264":"[-12657.2363 8899.8037 -5837.2041]","1265":"[-12657.3564 9419.0088 -5883.5654]","1266":"[-12656.8027 9939.9053 -5907.0508]","1267":"[-12642.2256 10460.7324 -5911.9087]","1268":"[-12587.6611 10973.8037 -5912.4492]","1269":"[-12466.5059 11479.6426 -5912.4673]","1270":"[-12265.7109 11952.21 -5912.3267]","1271":"[-12055.5322 12274.8213 -5912.5044]","1272":"[-11766.6504 12582.8359 -5912.3086]","1273":"[-11456.2236 12814.6836 -5912.3652]","1274":"[-11078.9434 13004.8164 -5912.4385]","1275":"[-10590.1338 13160.54 -5912.3784]","1276":"[-10083.7588 13242.5898 -5912.2759]","1277":"[-9570.9189 13268.9795 -5912.5503]","1278":"[-9054.8223 13239.3994 -5912.2119]","1279":"[-8546.1563 13151.4492 -5912.1138]","1280":"[-8051.2466 12989.6758 -5912.2861]","1281":"[-7662.5146 12781.9824 -5912.4082]","1282":"[-7355.7246 12540.9404 -5912.2993]","1283":"[-7085.3315 12238.4434 -5912.3774]","1284":"[-6878.0728 11902.8262 -5912.4844]","1285":"[-6685.127 11419.4775 -5912.3496]","1286":"[-6573.1899 10912.9707 -5912.3818]","1287":"[-6524.3857 10402.6865 -5912.3086]","1288":"[-6512.2227 9885.4971 -5912.4131]","1289":"[-6513.6606 9368.5615 -5912.4473]","1290":"[-6513.6763 8847.916 -5912.4165]","1291":"[-6511.707 8328.1279 -5912.5103]","1292":"[-6514.1797 7809.2139 -5912.4595]","1293":"[-6512.7808 7291.1807 -5912.4541]","1294":"[-6512.603 6777.5771 -5912.4565]","1295":"[-6512.645 6259.9009 -5912.4224]","1296":"[-6490.6479 5747.9414 -5912.3394]","1297":"[-6423.7998 5233.8813 -5912.2793]","1298":"[-6289.5352 4736.8457 -5912.394]","1299":"[-6069.0005 4267.9683 -5912.5313]","1300":"[-5868.2598 3983.7656 -5912.4063]","1301":"[-5550.0957 3668.5469 -5912.332]","1302":"[-5268.6455 3473.6738 -5912.5337]","1303":"[-4796.7168 3255.6526 -5912.3364]","1304":"[-4300.4053 3123.2859 -5912.2056]","1305":"[-3792.1389 3058.1726 -5912.2437]","1306":"[-3272.3269 3047.2153 -5912.1738]","1307":"[-2755.5215 3080.0933 -5912.3154]","1308":"[-2245.1309 3155.6987 -5912.4941]","1309":"[-1747.4838 3281.7385 -5912.6465]","1310":"[-1263.6414 3468.6624 -5912.5015]","1311":"[-814.5626 3720.3218 -5912.2061]","1312":"[-406.0904 4042.186 -5912.4502]","1313":"[-29.1 4399.0444 -5912.5273]","1314":"[337.2914 4766.1128 -5916.2178]","1315":"[703.4799 5134.2964 -5937.1426]","1316":"[1069.5574 5499.5015 -5980.333]","1317":"[1434.937 5863.978 -6035.6528]","1318":"[1799.3866 6229.1567 -6095.4478]","1319":"[2162.4724 6592.0024 -6157.1206]","1320":"[2522.5234 6952.1455 -6219.0049]","1321":"[2886.6472 7315.792 -6282.2798]","1322":"[3246.8574 7676.8516 -6344.8926]","1323":"[3610.5466 8040.1963 -6407.9175]","1324":"[3972.2346 8401.4336 -6470.7817]","1325":"[4332.8418 8763.1025 -6533.479]","1326":"[4696.8057 9126.832 -6596.6558]","1327":"[5064.1396 9493.7891 -6660.4321]","1328":"[5428.085 9858.3857 -6722.9907]","1329":"[5791.5879 10222.2539 -6784.7759]","1330":"[6153.9111 10584.6328 -6844.1216]","1331":"[6518.5815 10949.1426 -6898.8384]","1332":"[6884.8232 11315.5752 -6940.5981]","1333":"[7251.4937 11682.1982 -6959.7319]","1334":"[7620.0771 12049.8018 -6962.4678]","1335":"[7989.9565 12417.0908 -6963.8672]","1336":"[8378.9043 12762.8789 -6966.7612]","1337":"[8796.6035 13059.3643 -6971.729]","1338":"[9261.8643 13288.8613 -6975.917]","1339":"[9611.4385 13390.1523 -6977.3926]","1340":"[9977.7422 13428.9814 -6978.0352]","1341":"[10318.6426 13404.9902 -6977.7432]","1342":"[10684.2236 13313.2715 -6976.1118]","1343":"[11100.8506 13127.0127 -6972.9419]","1344":"[11533.5322 12842.7422 -6968.3188]","1345":"[11927.2842 12505.2422 -6968.8159]","1346":"[12296.8506 12149.293 -6989.1479]","1347":"[12660.209 11785.8193 -7032.2524]","1348":"[13021.6299 11423.0957 -7087.1479]","1349":"[13381.8125 11062.8828 -7146.2583]","1350":"[13740.3896 10703.0137 -7210.3511]","1351":"[14083.6016 10326.1943 -7277.6206]","1352":"[14396.7021 9926.416 -7344.0918]","1353":"[14674.1016 9496.2021 -7396.9185]","1354":"[14904.7871 9037.4717 -7434.6484]","1355":"[15063.502 8551.3008 -7460.7773]","1356":"[15134.6016 8052.8311 -7477.0249]","1357":"[15119.7568 7600.9624 -7485.0972]","1358":"[15016.5742 7091.1377 -7487.6445]","1359":"[14829.9287 6608.0747 -7486.436]","1360":"[14574.4863 6162.1675 -7483.7095]","1361":"[14267.8213 5745.3735 -7479.9795]","1362":"[13930.7803 5359.8496 -7476.6206]","1363":"[13568.2744 4983.7524 -7474.7632]","1364":"[13195.5293 4612.4849 -7474.7529]","1365":"[12825.3936 4244.5479 -7474.9541]","1366":"[12450.7549 3866.8623 -7475.1035]","1367":"[12082.4326 3497.8713 -7475.0044]","1368":"[11713.208 3131.1272 -7474.9263]","1369":"[11345.9014 2764.3054 -7475.1245]","1370":"[10972.8154 2389.0525 -7475.1646]","1371":"[10598.4893 2014.6367 -7475.1025]","1372":"[10231.8691 1650.0514 -7475.0234]","1373":"[9859.9697 1276.3105 -7474.9785]","1374":"[9488.793 905.7505 -7475.0586]","1375":"[9121.8535 539.2278 -7475.1064]","1376":"[8756.3398 173.4465 -7475.1304]","1377":"[8393.1582 -189.8424 -7475.1001]","1378":"[8029.5767 -552.8955 -7475.0718]","1379":"[7665.1626 -917.4192 -7475.0811]","1380":"[7298.0098 -1274.5922 -7478.1011]","1381":"[6891.3672 -1596.353 -7483.4111]","1382":"[6439.4253 -1846.2559 -7489.4355]","1383":"[5955.9209 -2025.7422 -7490.479]","1384":"[5456.7124 -2142.9976 -7487.561]","1385":"[4945.7202 -2209.3062 -7482.2529]","1386":"[4425.2637 -2235.7358 -7477.5322]","1387":"[3901.594 -2241.0378 -7474.8994]","1388":"[3387.7231 -2239.6204 -7475.0752]","1389":"[2873.3049 -2239.6045 -7475.1226]","1390":"[2351.3384 -2240.5432 -7475.1763]","1391":"[1831.108 -2239.7463 -7475.0215]","1392":"[1317.7761 -2239.6782 -7475.0483]","1393":"[794.9223 -2240.5088 -7475.1392]","1394":"[281.0304 -2239.9873 -7475.187]","1395":"[-239.3923 -2239.4136 -7474.9541]","1396":"[-766.9639 -2239.6448 -7475.0547]","1397":"[-1293.3196 -2239.9536 -7475.1563]","1398":"[-1818.4357 -2239.887 -7475.0093]","1399":"[-2342.323 -2240.0149 -7474.9795]","1400":"[-2864.968 -2239.7266 -7474.9707]","1401":"[-3386.3997 -2239.6628 -7475.1831]","1402":"[-3906.6111 -2240.1636 -7475.1787]","1403":"[-4425.6377 -2239.8616 -7474.9961]","1404":"[-4943.4824 -2239.708 -7474.9453]","1405":"[-5460.1738 -2240.1299 -7475.1543]","1406":"[-5975.6597 -2239.8005 -7475.1489]","1407":"[-6489.9927 -2239.4102 -7475.0313]","1408":"[-7003.1509 -2239.8865 -7474.9722]","1409":"[-7515.186 -2240.2646 -7475.1338]","1410":"[-8048.2495 -2240.0261 -7475.1406]","1411":"[-8580.0586 -2240.1787 -7475.041]","1412":"[-9103.6992 -2240.064 -7475.0142]","1413":"[-9620.7832 -2239.8716 -7475.062]","1414":"[-10135.1328 -2239.5029 -7475.1436]","1415":"[-10659.5293 -2240.1333 -7475.0825]","1416":"[-11176.0117 -2240.0742 -7475.0459]","1417":"[-11698.6553 -2239.9714 -7474.8984]","1418":"[-12217.8271 -2239.9788 -7475.0127]","1419":"[-12732.5908 -2240.074 -7475.0596]","1420":"[-13246.6318 -2254.3328 -7475.3701]","1421":"[-13765.2607 -2307.4983 -7475.5786]","1422":"[-14268.8945 -2427.2959 -7475.457]","1423":"[-14741.627 -2624.9922 -7475.4033]","1424":"[-15066.3242 -2833.4175 -7475.2764]","1425":"[-15361.2354 -3105.5317 -7475.6509]","1426":"[-15602.915 -3422.8254 -7475.2539]","1427":"[-15797.6055 -3800.2117 -7475.3555]","1428":"[-15955.5723 -4290.5601 -7475.3442]","1429":"[-16041.1758 -4803.7085 -7475.4204]","1430":"[-16071.1982 -5317.0225 -7475.249]","1431":"[-16076.7656 -5829.6509 -7475.0518]","1432":"[-16075.6641 -6351.1577 -7474.96]","1433":"[-16075.9873 -6871.9087 -7475.0518]","1434":"[-16076.1787 -7391.7476 -7475.02]","1435":"[-16076.3252 -7910.6943 -7475.0601]","1436":"[-16075.6426 -8428.7813 -7475.0605]","1437":"[-16076.3359 -8945.9951 -7475.0518]","1438":"[-16070.7051 -9462.1426 -7475.1548]","1439":"[-16035.1748 -9975.0381 -7475.313]","1440":"[-15940.9697 -10487.1553 -7475.4595]","1441":"[-15772.1406 -10977.7051 -7475.4819]","1442":"[-15558.2676 -11363.6104 -7475.4136]","1443":"[-15325.3955 -11650.9844 -7475.4028]","1444":"[-15004.4131 -11929.7988 -7475.3418]","1445":"[-14670.2637 -12129.8867 -7475.4365]","1446":"[-14185.374 -12316.1758 -7475.2617]","1447":"[-13682.3799 -12423.083 -7475.377]","1448":"[-13164.0078 -12468.6992 -7475.3037]","1449":"[-12648.9658 -12490.1689 -7475.2998]","1450":"[-12128.9473 -12518.4443 -7475.4053]","1451":"[-11613.3428 -12575.2412 -7475.2686]","1452":"[-11103.6738 -12660.9424 -7475.4712]","1453":"[-10602.0303 -12774.5557 -7475.6152]","1454":"[-10103.167 -12922.3975 -7475.5063]","1455":"[-9611.0479 -13090.4795 -7475.3555]","1456":"[-9122.502 -13248.123 -7475.5122]","1457":"[-8618.0205 -13376.8262 -7475.2847]","1458":"[-8114.0605 -13474.3818 -7475.5908]","1459":"[-7602.0342 -13543.3584 -7475.3745]","1460":"[-7088.7021 -13584.917 -7475.4292]","1461":"[-6566.6528 -13603.3418 -7475.5093]","1462":"[-6047.418 -13606.9697 -7475.3682]","1463":"[-5525.3555 -13606.3779 -7475.6035]","1464":"[-5010.6235 -13606.8652 -7475.1963]","1465":"[-4489.8081 -13606.2695 -7475.3999]","1466":"[-3965.7117 -13606.5156 -7475.4648]","1467":"[-3452.0332 -13606.9844 -7475.3101]","1468":"[-2938.0088 -13606.0762 -7475.2695]","1469":"[-2409.0818 -13606.7988 -7475.5029]","1470":"[-1888.1517 -13607.0947 -7475.3975]","1471":"[-1358.2803 -13607.4414 -7475.0752]","1472":"[-829.9323 -13607.3252 -7475.3022]","1473":"[-302.6403 -13606.8135 -7475.4844]","1474":"[223.5667 -13607.0469 -7475.4766]","1475":"[748.6737 -13607.5674 -7475.4785]","1476":"[1272.6952 -13607.4688 -7475.4722]","1477":"[1795.6644 -13607.4688 -7475.4644]","1478":"[2317.147 -13606.5889 -7475.6055]","1479":"[2837.1912 -13607.1094 -7475.6045]","1480":"[3356.0806 -13607.3184 -7475.4912]","1481":"[3873.8794 -13606.7324 -7475.5088]","1482":"[4389.6978 -13606.7197 -7475.8945]","1483":"[4904.2529 -13607.4463 -7475.6118]","1484":"[5417.7798 -13607.5068 -7475.4575]","1485":"[5930.3052 -13606.5303 -7475.4146]","1486":"[6460.7388 -13606.584 -7475.4688]","1487":"[6990.0977 -13607.4404 -7475.4678]","1488":"[7515.604 -13607.7754 -7475.4678]","1489":"[8030.6563 -13607.0879 -7475.4272]","1490":"[8544.9072 -13606.5635 -7475.3667]","1491":"[9058.3848 -13607.4688 -7475.5156]","1492":"[9570.7842 -13599.0352 -7475.3818]","1493":"[10093.1133 -13563.1416 -7475.2183]","1494":"[10608.0449 -13483.4375 -7475.3569]","1495":"[11109.625 -13352.1729 -7475.5171]","1496":"[11588.1211 -13159.1396 -7475.5391]","1497":"[12030.8525 -12899.6406 -7475.2739]","1498":"[12430.333 -12562.6982 -7475.502]","1499":"[12763.7314 -12163.5557 -7475.1323]","1500":"[13023.2949 -11715.1963 -7475.4556]","1501":"[13214.7021 -11235.1016 -7475.4653]","1502":"[13343.0879 -10735.6426 -7475.2813]","1503":"[13421.2012 -10226.835 -7475.2217]","1504":"[13455.8164 -9714.042 -7475.3984]","1505":"[13464.5566 -9200.7324 -7475.4507]","1506":"[13463.7666 -8687.9531 -7476.8613]","1507":"[13464.2764 -8171.5366 -7495.0713]","1508":"[13463.9258 -7657.4702 -7534.3447]","1509":"[13464.1016 -7138.3843 -7588.3877]","1510":"[13464.0537 -6625.0332 -7647.2266]","1511":"[13464.0586 -6104.7139 -7709.2988]","1512":"[13464.6084 -5593.27 -7771.6875]","1513":"[13463.252 -5078.3027 -7834.8843]","1514":"[13464.123 -4561.291 -7898.3555]","1515":"[13464.8926 -4043.8667 -7961.9458]","1516":"[13463.6016 -3527.5549 -8025.3071]","1517":"[13463.4473 -3015.1345 -8088.2168]","1518":"[13464.0518 -2490.3918 -8152.6348]","1519":"[13463.9492 -1968.8665 -8216.4531]","1520":"[13463.7227 -1450.288 -8279.0361]","1521":"[13463.3994 -935.5288 -8339.7119]","1522":"[13464.0762 -411.312 -8398.4131]","1523":"[13463.6143 108.3085 -8448.6973]","1524":"[13463.7041 636.3317 -8477.6738]","1525":"[13463.7783 1151.1967 -8487.0771]","1526":"[13462.9854 1666.7417 -8486.5518]","1527":"[13454.2773 2181.1035 -8486.0078]","1528":"[13427.6113 2693.3425 -8486.2373]","1529":"[13379.9316 3220.7195 -8486.0996]","1530":"[13310.2783 3743.9565 -8486.2236]","1531":"[13214.9453 4261.8765 -8486.3428]","1532":"[13093.1797 4772.5708 -8486.667]","1533":"[12942.2002 5273.8428 -8486.4648]","1534":"[12759.1221 5762.6943 -8485.9326]","1535":"[12543.1475 6235.9731 -8486.0684]","1536":"[12292.5664 6690.0635 -8486.2656]","1537":"[12006.4492 7120.7202 -8486.4268]","1538":"[11685.7295 7524.2568 -8486.4141]","1539":"[11332.0781 7897.166 -8486.4023]","1540":"[10947.749 8236.1299 -8486.4521]","1541":"[10522.7832 8549.5977 -8486.3125]","1542":"[10073.7578 8824.7246 -8486.3115]","1543":"[9605.1514 9062.0703 -8486.4121]","1544":"[9121.5908 9263.9785 -8486.2793]","1545":"[8626.3037 9431.4307 -8486.376]","1546":"[8122.8691 9568.25 -8486.4688]","1547":"[7613.624 9676.5664 -8486.3223]","1548":"[7100.5767 9758.8477 -8486.3975]","1549":"[6585.4629 9818.4111 -8486.415]","1550":"[6069.3169 9856.0498 -8486.4434]","1551":"[5553.2104 9875.4668 -8486.0693]","1552":"[5038.0688 9880.1035 -8486.3945]","1553":"[4523.8296 9879.5898 -8486.4229]","1554":"[4010.4822 9880.0293 -8486.3965]","1555":"[3498.0757 9879.5977 -8486.5049]","1556":"[2970.0723 9879.8193 -8486.5156]","1557":"[2443.032 9880.5762 -8486.417]","1558":"[1916.3325 9879.8477 -8486.4463]","1559":"[1395.5818 9879.166 -8486.4541]","1560":"[872.7241 9879.6338 -8486.4492]","1561":"[352.0775 9880.1416 -8486.4297]","1562":"[-167.7332 9879.7988 -8486.3486]","1563":"[-686.4269 9880.4795 -8486.4297]","1564":"[-1204.2361 9879.541 -8486.4248]","1565":"[-1721.1982 9880.3154 -8486.4502]","1566":"[-2237.3352 9879.9785 -8486.5576]","1567":"[-2752.6372 9880.1689 -8486.4238]","1568":"[-3267.1182 9879.4834 -8486.3662]","1569":"[-3780.7666 9880.4453 -8486.3262]","1570":"[-4293.5615 9879.8809 -8486.542]","1571":"[-4819.749 9880.2949 -8486.417]","1572":"[-5336.4561 9879.9121 -8486.3545]","1573":"[-5849.7578 9880.3828 -8486.4297]","1574":"[-6362.2539 9880.0898 -8486.4209]","1575":"[-6887.0815 9880.2158 -8486.4521]","1576":"[-7411.1123 9879.9502 -8486.5273]","1577":"[-7934.356 9880.3545 -8486.6445]","1578":"[-8456.7617 9879.7539 -8486.6846]","1579":"[-8978.3311 9879.1465 -8486.5586]","1580":"[-9497.627 9860.1221 -8486.1436]","1581":"[-10012.3486 9808.6572 -8486.6748]","1582":"[-10516.6016 9707.4229 -8486.3945]","1583":"[-11015.6357 9549.9873 -8486.668]","1584":"[-11484.8301 9325.376 -8486.7451]","1585":"[-11910.8604 9032.042 -8486.7109]","1586":"[-12277.21 8670.8623 -8486.6182]","1587":"[-12576.1494 8254.8838 -8486.71]","1588":"[-12807.9717 7786.0996 -8486.6875]","1589":"[-12973.1338 7291.1514 -8486.8096]","1590":"[-13078.9844 6781.3384 -8486.5752]","1591":"[-13137.0254 6264.8413 -8486.5615]","1592":"[-13156.5977 5746.186 -8486.7178]","1593":"[-13159.6719 5227.8408 -8486.7041]","1594":"[-13158.9678 4708.8696 -8494.5537]","1595":"[-13159.334 4195.6792 -8522.3691]","1596":"[-13158.9443 3681.657 -8570.3262]","1597":"[-13159.0225 3161.2312 -8627.9424]","1598":"[-13158.7842 2647.3354 -8688.2988]","1599":"[-13159.2148 2127.5203 -8751.1748]","1600":"[-13158.623 1618.2732 -8813.3564]","1601":"[-13158.5576 1106.865 -8876.2266]","1602":"[-13159.7373 594.8076 -8938.9922]","1603":"[-13159.3555 83.7128 -9001.7871]","1604":"[-13158.4434 -424.9495 -9064.2607]","1605":"[-13158.9619 -947.3679 -9128.4043]","1606":"[-13159.2793 -1465.3563 -9192.0117]","1607":"[-13158.835 -1977.521 -9254.3232]","1608":"[-13158.5615 -2501.4053 -9317.1885]","1609":"[-13158.8379 -3015.5178 -9376.6523]","1610":"[-13158.6875 -3526.4924 -9431.3018]","1611":"[-13158.3438 -4051.4058 -9475.0234]","1612":"[-13158.9336 -4571.8198 -9494.9639]","1613":"[-13158.501 -5097.8984 -9497.3242]","1614":"[-13156.2441 -5622.1787 -9497.3682]","1615":"[-13140.8809 -6145.0698 -9497.4736]","1616":"[-13105.418 -6665.6885 -9497.1074]","1617":"[-13050.8574 -7183.2656 -9497.5078]","1618":"[-12972.7451 -7696.603 -9497.459]","1619":"[-12869.4775 -8204.2285 -9497.4307]","1620":"[-12739.874 -8704.4609 -9497.3145]","1621":"[-12578.2217 -9200.0527 -9497.4053]","1622":"[-12383.6357 -9687.6172 -9497.3018]","1623":"[-12153.708 -10157.8975 -9497.418]","1624":"[-11888.3223 -10607.292 -9497.3174]","1625":"[-11587.541 -11031.8535 -9497.3086]","1626":"[-11251.6436 -11427.1143 -9497.4375]","1627":"[-10883.2363 -11790.0576 -9497.4795]","1628":"[-10485.4678 -12118.1592 -9497.3789]","1629":"[-10061.9756 -12409.9092 -9497.3984]","1630":"[-9617.2598 -12665.5469 -9497.4307]","1631":"[-9139.6689 -12892.5156 -9497.4707]","1632":"[-8648.2031 -13084.0566 -9497.3232]","1633":"[-8146.0845 -13241.8174 -9497.2725]","1634":"[-7636.6099 -13369.1963 -9497.4053]","1635":"[-7122.082 -13468.5352 -9497.5146]","1636":"[-6604.3994 -13542.7607 -9497.2822]","1637":"[-6084.9927 -13593.9902 -9497.3164]","1638":"[-5564.9927 -13624.7217 -9497.293]","1639":"[-5045.2593 -13637.5957 -9497.2373]","1640":"[-4526.2612 -13639.2607 -9497.3984]","1641":"[-4008.2109 -13638.3506 -9497.4238]","1642":"[-3491.1841 -13638.9443 -9497.3105]","1643":"[-2975.4006 -13637.9424 -9497.3486]","1644":"[-2460.6658 -13629.9492 -9497.3018]","1645":"[-1947.4445 -13604.7295 -9497.5293]","1646":"[-1421.4928 -13558.5469 -9497.4453]","1647":"[-899.1301 -13490.1924 -9497.6514]","1648":"[-381.9022 -13397.2676 -9497.4219]","1649":"[128.5427 -13277.7549 -9497.3906]","1650":"[629.7839 -13128.7744 -9497.3262]","1651":"[1119.1528 -12948.4248 -9497.4775]","1652":"[1593.568 -12735.2334 -9497.416]","1653":"[2048.9656 -12487.1699 -9497.4385]","1654":"[2481.335 -12203.6396 -9497.543]","1655":"[2887.2422 -11885.8584 -9497.3584]","1656":"[3261.8635 -11534.0176 -9497.543]","1657":"[3603.8584 -11152.3398 -9497.5166]","1658":"[3919.5095 -10729.7227 -9497.3652]","1659":"[4197.1348 -10282.8906 -9497.4297]","1660":"[4437.1396 -9816.2979 -9497.2158]","1661":"[4641.1763 -9334.1592 -9497.2656]","1662":"[4811.3501 -8840.2871 -9497.4033]","1663":"[4950.4448 -8337.9629 -9497.3418]","1664":"[5060.6631 -7829.6206 -9497.3047]","1665":"[5144.7798 -7317.3818 -9497.3965]","1666":"[5206.1221 -6802.5034 -9497.4697]","1667":"[5245.7261 -6291.3037 -9497.3223]","1668":"[5266.7183 -5763.4653 -9497.2939]","1669":"[5272.3008 -5236.1938 -9497.3838]","1670":"[5271.3423 -4710.2358 -9497.5029]","1671":"[5271.4512 -4185.2974 -9497.3701]","1672":"[5272.0884 -3661.3369 -9497.4033]","1673":"[5267.103 -3132.5642 -9497.3916]","1674":"[5248.6675 -2611.4963 -9497.3496]","1675":"[5210.3872 -2098.2683 -9497.415]","1676":"[5152.1011 -1587.9375 -9497.4199]","1677":"[5071.2324 -1081.8347 -9497.3975]","1678":"[4961.9604 -564.8321 -9497.3291]","1679":"[4823.9399 -56.1703 -9497.0596]","1680":"[4655.1797 441.0954 -9497.2402]","1681":"[4453.8149 924.5034 -9497.3096]","1682":"[4217.5542 1390.1957 -9497.3799]","1683":"[3945.8225 1834.2573 -9497.4326]","1684":"[3638.4272 2252.4846 -9497.4307]","1685":"[3297.0767 2641.395 -9497.5518]","1686":"[2923.1338 2996.9868 -9497.3291]","1687":"[2521.1501 3318.1191 -9497.4912]","1688":"[2094.1143 3602.6362 -9497.416]","1689":"[1632.045 3858.7427 -9497.4639]","1690":"[1152.6051 4077.4978 -9497.4453]","1691":"[660.0092 4261.4204 -9497.3984]","1692":"[157.5105 4412.3433 -9497.3662]","1693":"[-351.7766 4533.7539 -9497.3057]","1694":"[-865.8264 4627.5576 -9497.3301]","1695":"[-1382.7129 4696.8823 -9497.3428]","1696":"[-1901.0392 4744.4429 -9497.3086]","1697":"[-2419.8667 4771.4214 -9497.1309]","1698":"[-2938.3452 4781.3984 -9497.4053]","1699":"[-3455.7842 4781.8745 -9497.4658]","1700":"[-3972.9932 4781.4443 -9504.6934]","1701":"[-4493.6992 4782.5747 -9531.25]","1702":"[-5004.6641 4781.978 -9578.9893]","1703":"[-5526.7144 4781.9517 -9636.7715]","1704":"[-6044.4019 4782.3398 -9697.5244]","1705":"[-6557.207 4781.4946 -9759.0313]","1706":"[-7082.1221 4781.6328 -9821.8633]","1707":"[-7600.4448 4781.5078 -9882.2998]","1708":"[-8110.6782 4781.791 -9937.5352]","1709":"[-8636.083 4781.603 -9983.5811]","1710":"[-9149.0947 4782.0176 -10005.0703]","1711":"[-9672.9033 4781.9941 -10009.4336]","1712":"[-10196.3887 4777.3325 -10009.5771]","1713":"[-10716.8799 4747.7959 -10009.1904]","1714":"[-11230.3994 4678.0015 -10009.0957]","1715":"[-11732.4561 4557.6001 -10009.2324]","1716":"[-12213.5527 4378.4917 -10009.584]","1717":"[-12673.1406 4126.9312 -10009.3447]","1718":"[-13081.6221 3803.825 -10009.4961]","1719":"[-13425.8447 3416.7039 -10009.1992]","1720":"[-13698.3857 2978.5476 -10009.4072]","1721":"[-13901.0537 2505.2896 -10009.3389]","1722":"[-14040.6133 2010.8799 -10009.3174]","1723":"[-14127.4434 1505.4259 -10009.3418]","1724":"[-14170.4609 982.0922 -10009.2959]","1725":"[-14182.1494 455.6594 -10009.3115]","1726":"[-14182.6094 -71.8238 -10009.1943]","1727":"[-14180.9072 -602.3636 -10009.6162]","1728":"[-14181.5244 -1114.3761 -10009.6465]","1729":"[-14182.6914 -1644.9452 -10009.5098]","1730":"[-14181.873 -2174.3916 -10009.4717]","1731":"[-14181.2744 -2702.7388 -10009.4131]","1732":"[-14181.2344 -3227.9109 -10009.4697]","1733":"[-14181.959 -3752.9897 -10009.4316]","1734":"[-14181.3945 -4271.856 -10009.3887]","1735":"[-14177.9785 -4789.5664 -10008.8311]","1736":"[-14129.2334 -5300.3423 -10008.5977]","1737":"[-14001.8398 -5801.6489 -10009.2588]","1738":"[-13802.6914 -6285.0508 -10009.3115]","1739":"[-13542.3359 -6736.9243 -10009.3936]","1740":"[-13239.1729 -7159.8838 -10009.1113]","1741":"[-12899.5908 -7556.1558 -10009.1201]","1742":"[-12542.3799 -7928.6494 -10008.7676]","1743":"[-12176.1211 -8294.7646 -10009.0771]","1744":"[-11803.5342 -8667.3496 -10009.2227]","1745":"[-11434.0059 -9036.6133 -10009.3486]","1746":"[-11071.2412 -9400.0283 -10009.5137]","1747":"[-10708.708 -9762.0859 -10009.4785]","1748":"[-10332.0947 -10138.5879 -10009.4453]","1749":"[-9956.6953 -10514.5439 -10009.4209]","1750":"[-9581.7588 -10889.3145 -10009.4219]","1751":"[-9207.4434 -11263.0225 -10009.374]","1752":"[-8835.9756 -11635.2158 -10009.4189]","1753":"[-8469.3887 -12001.4512 -10009.4072]","1754":"[-8096.5332 -12374.2549 -10009.3223]","1755":"[-7728.2056 -12742.7021 -10009.3613]","1756":"[-7361.9258 -13108.5674 -10009.4697]","1757":"[-6994.6294 -13476.4453 -10009.5693]","1758":"[-6625.7036 -13845.1191 -10009.0859]","1759":"[-6247.5732 -14202.5986 -10009.3301]","1760":"[-5836.3984 -14512.6016 -10009.165]","1761":"[-5375.1133 -14757.4023 -10009.4902]","1762":"[-4886.0767 -14936.1855 -10009.4658]","1763":"[-4380.2285 -15053.0732 -10009.4473]","1764":"[-3867.2646 -15122.6836 -10009.3105]","1765":"[-3346.0247 -15151.4658 -10009.4512]","1766":"[-2833.0898 -15157.2188 -10009.4424]","1767":"[-2311.6973 -15156.5029 -10009.4971]","1768":"[-1795.4424 -15156.4199 -10009.4795]","1769":"[-1279.4337 -15156.4922 -10009.4697]","1770":"[-764.9032 -15156.8213 -10009.5039]","1771":"[-250.6963 -15156.5049 -10009.5371]","1772":"[274.0852 -15156.2441 -10009.4941]","1773":"[800.9784 -15157.167 -10009.3252]","1774":"[1329.6171 -15156.7188 -10008.9189]","1775":"[1856.5983 -15157.0234 -10009.25]","1776":"[2382.0527 -15156.7686 -10009.6631]","1777":"[2906.5186 -15156.4092 -10009.4629]","1778":"[3421.019 -15156.2832 -10009.46]","1779":"[3941.9067 -15156.7461 -10009.46]","1780":"[4461.8325 -15156.8076 -10009.4541]","1781":"[4980.8032 -15156.0742 -10009.4033]","1782":"[5498.8276 -15156.626 -10009.4492]","1783":"[6015.9009 -15157.2734 -10009.5098]","1784":"[6532.0474 -15156.0273 -10009.5205]","1785":"[7047.2412 -15156.8008 -10009.501]","1786":"[7563.5229 -15154.3662 -10009.4629]","1787":"[8079.4224 -15138.5664 -10009.4824]","1788":"[8598.3193 -15105.2783 -10009.4258]","1789":"[9117.4844 -15050.5195 -10009.3447]","1790":"[9627.5762 -14973.3594 -10009.3047]","1791":"[10142.5156 -14870.0625 -10009.249]","1792":"[10649.4766 -14738.2354 -10009.4326]","1793":"[11146.3057 -14576.8682 -10009.291]","1794":"[11629.8965 -14383.4453 -10009.2402]","1795":"[12096.5283 -14155.5469 -10009.4287]","1796":"[12543.0254 -13893.4053 -10009.4424]","1797":"[12964.6924 -13595.7686 -10009.4258]","1798":"[13357.7441 -13263.7607 -10009.2773]","1799":"[13718.9014 -12899.4824 -10009.4775]","1800":"[14057.4766 -12491.292 -10009.2744]","1801":"[14357.7578 -12056.0771 -10009.3145]","1802":"[14614.0176 -11609.0137 -10009.3809]","1803":"[14837.9277 -11138.8486 -10009.2344]","1804":"[15026.0186 -10654.6152 -10009.2021]","1805":"[15182.2324 -10160.4688 -10009.2764]","1806":"[15308.6094 -9659.084 -10009.4404]","1807":"[15407.6436 -9152.7656 -10009.3701]","1808":"[15482.3379 -8643.4287 -10009.2813]","1809":"[15534.7988 -8132.4575 -10009.3125]","1810":"[15566.8691 -7620.876 -10009.3604]","1811":"[15581.3027 -7090.7866 -10009.3174]","1812":"[15583.208 -6565.2236 -10009.2617]","1813":"[15582.5938 -6044.9917 -10009.1533]","1814":"[15583.1826 -5524.7539 -10008.999]","1815":"[15583.5225 -5007.7827 -10009.501]","1816":"[15582.9141 -4489.334 -10009.543]","1817":"[15582.1592 -3954.5566 -10009.4395]","1818":"[15582.8154 -3428.408 -10009.4648]","1819":"[15583.7695 -2912.0769 -10009.4482]","1820":"[15583.8496 -2379.5232 -10009.4453]","1821":"[15582.915 -1859.1539 -10009.377]","1822":"[15582.4375 -1346.2402 -10009.3711]","1823":"[15582.6943 -813.3914 -10009.5039]","1824":"[15583.4707 -300.7653 -10009.498]","1825":"[15583.5449 212.3167 -10009.4658]","1826":"[15582.793 753.9894 -10009.4854]","1827":"[15582.5547 1294.0641 -10009.46]","1828":"[15582.8711 1832.564 -10009.4609]","1829":"[15583.3857 2369.4944 -10009.4824]","1830":"[15583.4629 2899.426 -10009.4424]","1831":"[15582.8779 3435.4851 -10009.3535]","1832":"[15582.2324 3964.4832 -10009.5684]","1833":"[15582.5654 4477.9434 -10009.54]","1834":"[15583.2549 4992.6001 -10009.4775]","1835":"[15583.6523 5510.5806 -10009.4668]","1836":"[15583.3418 6023.7637 -10009.4561]","1837":"[15582.3457 6543.9629 -10009.4678]","1838":"[15582.7012 7066.0479 -10009.5303]","1839":"[15580.0146 7587.0767 -10009.3496]","1840":"[15562.9463 8106.6523 -10009.3213]","1841":"[15527.0947 8624.0254 -10008.9482]","1842":"[15470.6436 9137.6855 -10009.6094]","1843":"[15392.3115 9647.0869 -10009.3682]","1844":"[15288.543 10150.6113 -10009.2676]","1845":"[15158.5938 10646.7471 -10009.3896]","1846":"[14993.4502 11150.0967 -10009.2393]","1847":"[14794.6943 11639.543 -10009.0811]","1848":"[14561.5283 12111.7773 -10009.0693]","1849":"[14292.1953 12562.4756 -10009.3779]","1850":"[13986.5029 12987.2871 -10009.4824]","1851":"[13645.877 13382.5254 -10009.4668]","1852":"[13272.5557 13744.7705 -10009.3418]","1853":"[12869.6592 14071.3682 -10009.4033]","1854":"[12441.2363 14361.0273 -10009.4033]","1855":"[11992.0322 14614.499 -10009.4297]","1856":"[11525.9365 14832.332 -10009.3936]","1857":"[11046.665 15016.082 -10009.2344]","1858":"[10557.7637 15168.6787 -10009.3418]","1859":"[10044.6816 15296.0752 -10009.2793]","1860":"[9526.5254 15395.0781 -10009.252]","1861":"[9005.2559 15468.5791 -10009.3418]","1862":"[8482.3535 15519.3135 -10009.3408]","1863":"[7965.0166 15549.3564 -10009.2393]","1864":"[7442.1191 15561.3125 -10009.1973]","1865":"[6916.1587 15562.1953 -10009.0039]","1866":"[6401.2749 15561.4043 -10009.2715]","1867":"[5877.5825 15562.1416 -10009.335]","1868":"[5353.8188 15562.4189 -10009.4619]","1869":"[4832.8013 15561.9473 -10009.4541]","1870":"[4318.8101 15561.6748 -10009.4287]","1871":"[3787.7891 15561.9609 -10009.4688]","1872":"[3258.176 15562.3232 -10009.4492]","1873":"[2742.6741 15562.3604 -10009.4453]","1874":"[2211.3362 15562.3506 -10009.3809]","1875":"[1697.5751 15562.1387 -10009.377]","1876":"[1171.5321 15561.7148 -10009.4902]","1877":"[646.9715 15561.8896 -10009.4932]","1878":"[123.8849 15562.4668 -10009.5127]","1879":"[-397.7498 15562.1992 -10009.5059]","1880":"[-917.9423 15561.6553 -10009.4863]","1881":"[-1436.7009 15561.5498 -10009.4746]","1882":"[-1954.0376 15562.2002 -10009.4912]","1883":"[-2469.9646 15562.6611 -10009.3564]","1884":"[-2984.4661 15562.4629 -10009.2598]","1885":"[-3497.6226 15561.6055 -10009.6367]","1886":"[-4037.7825 15561.4414 -10009.4746]","1887":"[-4576.4116 15562.0205 -10009.458]","1888":"[-5113.3984 15562.4404 -10009.4873]","1889":"[-5648.1089 15562.4893 -10009.4697]","1890":"[-6176.2451 15562.1064 -10009.4492]","1891":"[-6689.3315 15561.7637 -10009.1777]","1892":"[-7206.4048 15561.791 -10009.3936]","1893":"[-7719.2305 15561.6416 -10009.4727]","1894":"[-8239.1064 15557.5322 -10009.377]","1895":"[-8757.583 15538.8477 -10009.2598]","1896":"[-9276.5771 15500.4629 -10009.5059]","1897":"[-9799.5156 15441.0811 -10009.6816]","1898":"[-10317.7939 15357.4229 -10009.4004]","1899":"[-10829.8594 15247.5488 -10009.4561]","1900":"[-11334.0059 15110.6191 -10009.0391]","1901":"[-11826.6592 14942.6338 -10009.2266]","1902":"[-12305.3467 14742.6553 -10009.5449]","1903":"[-12766.4033 14508.5938 -10009.3076]","1904":"[-13206.4307 14239.9619 -10009.4775]","1905":"[-13621.0664 13936.3193 -10009.4688]","1906":"[-14006.7617 13599.0342 -10009.459]","1907":"[-14371.8477 13217.7236 -10009.3848]","1908":"[-14699.8301 12805.9766 -10009.4229]","1909":"[-14990.3965 12368.8232 -10009.3936]","1910":"[-15242.8838 11910.167 -10009.4834]","1911":"[-15458.9541 11434.6387 -10009.4775]","1912":"[-15640.7139 10946.2354 -10009.4102]","1913":"[-15790.5664 10448.3213 -10009.373]","1914":"[-15910.6201 9943.5088 -10009.4385]","1915":"[-16003.959 9434.0938 -10009.4775]","1916":"[-16073.7773 8921.9775 -10009.3623]","1917":"[-16120.9355 8408.2637 -10009.2363]","1918":"[-16148.5244 7894.1304 -10009.4814]","1919":"[-16158.9414 7380.5542 -10009.5488]","1920":"[-16159.8848 6868.0635 -10009.3906]","1921":"[-16159.5898 6355.9614 -10015.5381]","1922":"[-16160.3799 5840.8901 -10039.9854]","1923":"[-16160.1104 5319.9468 -10087.293]","1924":"[-16159.6709 4805.6016 -10143.8594]","1925":"[-16160.3242 4296.8721 -10203.3564]","1926":"[-16159.584 3787.47 -10264.502]","1927":"[-16159.5986 3272.8352 -10326.1963]","1928":"[-16159.9004 2751.906 -10387.1025]","1929":"[-16159.3877 2237.4314 -10443.4824]","1930":"[-16159.9082 1711.3013 -10491.625]","1931":"[-16159.9473 1195.7529 -10515.5645]","1932":"[-16159.9961 676.2723 -10521.71]","1933":"[-16160.1016 156.9258 -10521.4707]","1934":"[-16160.5645 -361.4345 -10521.416]","1935":"[-16160.1914 -878.8145 -10521.502]","1936":"[-16159.668 -1395.2433 -10521.4805]","1937":"[-16159.6963 -1910.7208 -10521.4678]","1938":"[-16159.9434 -2425.2363 -10521.4629]","1939":"[-16160.4873 -2938.7959 -10521.54]","1940":"[-16160.3545 -3458.2219 -10521.4355]","1941":"[-16159.2324 -3984.4888 -10521.4102]","1942":"[-16160.2861 -4509.7354 -10521.3848]","1943":"[-16161.041 -5033.9229 -10521.4414]","1944":"[-16159.1846 -5557.0781 -10521.4609]","1945":"[-16159.7061 -6079.2056 -10521.4648]","1946":"[-16160.6797 -6602.8042 -10521.4482]","1947":"[-16159.4746 -7114.9478 -10521.3857]","1948":"[-16159.6465 -7642.6821 -10521.5156]","1949":"[-16157.2793 -8168.7886 -10521.2432]","1950":"[-16140.7998 -8693.5518 -10521.2783]","1951":"[-16105.9785 -9216.3428 -10521.4277]","1952":"[-16049.4678 -9736.1475 -10521.3457]","1953":"[-15970.9775 -10251.9189 -10521.3906]","1954":"[-15866.4258 -10761.832 -10521.4531]","1955":"[-15734.8809 -11263.6729 -10521.3486]","1956":"[-15574.0068 -11755.5645 -10521.5029]","1957":"[-15380.7168 -12234.1533 -10521.4268]","1958":"[-15155.0703 -12696.9014 -10521.3877]","1959":"[-14894.2881 -13139.0879 -10521.499]","1960":"[-14589.7363 -13570.2275 -10521.4707]","1961":"[-14248.7656 -13971.0811 -10521.4102]","1962":"[-13874.5205 -14338.8066 -10521.4639]","1963":"[-13469.9502 -14670.459 -10521.4746]","1964":"[-13039.3379 -14965.0684 -10521.3311]","1965":"[-12586.8428 -15222.0342 -10521.4824]","1966":"[-12117.1396 -15443.1299 -10521.4043]","1967":"[-11633.9834 -15629.7881 -10521.4639]","1968":"[-11140.5527 -15783.8389 -10521.5654]","1969":"[-10640.2334 -15909.4639 -10521.3594]","1970":"[-10134.7139 -16006.9365 -10521.4971]","1971":"[-9626.1963 -16080.7285 -10521.374]","1972":"[-9115.9385 -16132.3799 -10521.458]","1973":"[-8595.3584 -16164.2393 -10521.2949]","1974":"[-8076.5459 -16178.3701 -10521.3291]","1975":"[-7560.5049 -16180.1221 -10521.4668]","1976":"[-7043.083 -16179.6533 -10521.3408]","1977":"[-6505.8057 -16179.9873 -10521.4063]","1978":"[-5993.6963 -16179.9902 -10521.5371]","1979":"[-5467.6558 -16180.0508 -10521.4912]","1980":"[-4934.6045 -16180.1465 -10521.3398]","1981":"[-4401.0112 -16180.1729 -10521.5439]","1982":"[-3874.158 -16179.9512 -10521.4482]","1983":"[-3342.0144 -16179.8154 -10521.4902]","1984":"[-2811.5989 -16179.8457 -10521.333]","1985":"[-2282.821 -16180.1045 -10521.4023]","1986":"[-1755.7665 -16180.3506 -10521.4102]","1987":"[-1230.2859 -16180.3506 -10521.5]","1988":"[-706.4827 -16180.1982 -10521.4814]","1989":"[-185.508 -16180.1631 -10521.5137]","1990":"[344.4918 -16180.1904 -10521.4971]","1991":"[870.4059 -16180.0967 -10521.4756]","1992":"[1385.7727 -16180.2803 -10521.4531]","1993":"[1908.7559 -16180.4072 -10521.3809]","1994":"[2424.0798 -16179.5098 -10521.377]","1995":"[2952.6609 -16179.6602 -10521.3711]","1996":"[3470.0044 -16180.749 -10521.4561]","1997":"[3994.998 -16180.0596 -10521.4717]","1998":"[4519.1528 -16179.7852 -10521.4609]","1999":"[5042.4531 -16179.7598 -10521.4121]","2000":"[5564.9077 -16180.2734 -10521.3994]","2001":"[6086.5024 -16180.2568 -10521.5742]","2002":"[6606.6392 -16171.4902 -10521.5967]","2003":"[7122.8647 -16133.6738 -10521.6084]","2004":"[7630.498 -16052.2559 -10521.5361]","2005":"[8132.1631 -15917.9814 -10521.1973]","2006":"[8606.1533 -15724.2529 -10521.2354]","2007":"[9054.0068 -15456.5625 -10521.3086]","2008":"[9447.6572 -15119.0547 -10521.4307]","2009":"[9774.9482 -14720.2129 -10521.208]","2010":"[10030.7148 -14274.2305 -10521.4229]","2011":"[10218.4619 -13796.9443 -10521.4248]","2012":"[10347.5898 -13288.4717 -10521.4131]","2013":"[10424.4102 -12770.5566 -10521.1416]","2014":"[10457.292 -12248.9043 -10521.291]","2015":"[10464.4424 -11726.8789 -10521.4551]","2016":"[10463.1641 -11205.623 -10521.3584]","2017":"[10446.8623 -10686.0293 -10521.2695]","2018":"[10397.6025 -10170.9111 -10521.1738]","2019":"[10303.1367 -9664.873 -10521.5703]","2020":"[10155.834 -9174.0537 -10521.2598]","2021":"[9942.1787 -8697.4746 -10521.4316]","2022":"[9659.5449 -8261.9658 -10521.376]","2023":"[9318.959 -7871.1113 -10521.2764]","2024":"[8954.7402 -7502.4028 -10521.5049]","2025":"[8587.5098 -7137.8462 -10521.4551]","2026":"[8223.7725 -6770.9688 -10521.5234]","2027":"[7857.4243 -6407.8359 -10521.4766]","2028":"[7494.3608 -6042.5562 -10521.4521]","2029":"[7130.5396 -5679.1631 -10521.4512]","2030":"[6767.0181 -5316.5415 -10521.4336]","2031":"[6404.9219 -4953.5684 -10521.4434]","2032":"[6032.0078 -4585.4248 -10521.4961]","2033":"[5644.583 -4235.29 -10521.3818]","2034":"[5234.6807 -3916.22 -10521.4971]","2035":"[4798.4033 -3638.9797 -10521.2813]","2036":"[4335.5391 -3414.7896 -10521.5684]","2037":"[3837.5068 -3253.7671 -10521.1768]","2038":"[3323.1592 -3174.6953 -10521.3955]","2039":"[2802.8616 -3153.3816 -10521.3516]","2040":"[2282.9741 -3156.2197 -10521.4316]","2041":"[1763.9423 -3153.8374 -10521.4414]","2042":"[1245.7291 -3155.3171 -10521.5059]","2043":"[728.3021 -3155.1724 -10521.4727]","2044":"[211.6475 -3154.6909 -10521.4629]","2045":"[-304.2541 -3154.9851 -10521.457]","2046":"[-819.3886 -3154.8445 -10521.3525]","2047":"[-1332.8981 -3137.3931 -10521.2764]","2048":"[-1853.688 -3088.9565 -10521.0898]","2049":"[-2364.6958 -2992.3169 -10521.4111]","2050":"[-2860.4385 -2843.5486 -10521.3838]","2051":"[-3329.8701 -2632.0327 -10521.4043]","2052":"[-3768.2405 -2346.835 -10521.1807]","2053":"[-4160.8633 -2004.2307 -10520.877]","2054":"[-4530.1436 -1639.6887 -10520.6641]","2055":"[-4895.1768 -1274.0845 -10520.4131]","2056":"[-5259.3726 -909.4534 -10520.4238]","2057":"[-5623.6611 -546.0554 -10520.4492]","2058":"[-5986.4302 -182.2427 -10520.3115]","2059":"[-6356.2314 186.2866 -10520.4287]","2060":"[-6721.5752 553.153 -10520.3506]","2061":"[-7087.8052 917.9826 -10520.3652]","2062":"[-7452.2407 1283.5192 -10520.3105]","2063":"[-7817.0747 1647.5535 -10520.4688]","2064":"[-8180.3608 2012.0377 -10520.5449]","2065":"[-8544.3369 2374.7048 -10520.502]","2066":"[-8908.668 2739.8218 -10520.3818]","2067":"[-9278.3213 3108.9607 -10520.5859]","2068":"[-9646.8584 3478.0645 -10520.8936]","2069":"[-10006.2061 3854.229 -10520.7949]","2070":"[-10342.7764 4247.4556 -10521.1084]","2071":"[-10641.5146 4666.2773 -10521.4658]","2072":"[-10900.8672 5121.1504 -10520.998]","2073":"[-11098.957 5602.3057 -10521.4541]","2074":"[-11223.1006 6104.4185 -10521.1064]","2075":"[-11265.334 6617.2637 -10521.1504]","2076":"[-11248.2529 7130.54 -10521.2031]","2077":"[-11179.4561 7647.4082 -10521.4121]","2078":"[-11065.0186 8152.4917 -10521.1367]","2079":"[-10891.9746 8636.7539 -10521.4463]","2080":"[-10646.8545 9098.1563 -10521.1855]","2081":"[-10332.8008 9511.5586 -10521.4395]","2082":"[-9961.6592 9854.0986 -10521.373]","2083":"[-9531.2861 10134.877 -10521.4658]","2084":"[-9064.5762 10345.502 -10521.251]","2085":"[-8564.8398 10494.7822 -10521.5605]","2086":"[-8053.0757 10588.8672 -10521.375]","2087":"[-7536.4131 10636.2666 -10521.2354]","2088":"[-7018.853 10649.7881 -10521.3398]","2089":"[-6502.5913 10652.0947 -10521.3662]","2090":"[-5987.6816 10651.7422 -10521.1787]","2091":"[-5473.7891 10651.501 -10521.4717]","2092":"[-4960.7256 10651.8574 -10521.4355]","2093":"[-4438.0771 10651.0137 -10521.5537]","2094":"[-3916.4709 10651.3691 -10521.4404]","2095":"[-3400.8247 10650.9053 -10521.374]","2096":"[-2887.2959 10651.1152 -10521.5]","2097":"[-2360.7095 10650.7129 -10521.3623]","2098":"[-1841.7316 10651.4082 -10521.4619]","2099":"[-1315.1559 10651.2988 -10521.4658]","2100":"[-791.4565 10651.1035 -10521.4717]","2101":"[-268.3696 10650.6758 -10521.4609]","2102":"[253.7243 10650.9912 -10521.4297]","2103":"[774.8307 10651.5117 -10521.46]","2104":"[1294.942 10651 -10521.5088]","2105":"[1814.0677 10650.3203 -10521.5029]","2106":"[2332.2163 10651.2109 -10521.501]","2107":"[2849.3896 10651.4082 -10521.4951]","2108":"[3365.595 10650.5898 -10521.4648]","2109":"[3880.8372 10650.293 -10521.457]","2110":"[4395.1206 10650.7529 -10521.3457]","2111":"[4908.4834 10651.1299 -10521.4541]","2112":"[5420.8301 10650.6445 -10521.4102]","2113":"[5949.3892 10650.8379 -10521.124]","2114":"[6476.5117 10645.4082 -10521.1094]","2115":"[7001.9604 10623.6973 -10521.416]","2116":"[7524.0464 10582.0469 -10521.5176]","2117":"[8049.1523 10518.6494 -10521.1572]","2118":"[8568.1221 10430.583 -10521.1982]","2119":"[9080.1045 10316.2314 -10521.6641]","2120":"[9583.3301 10173.3525 -10521.5322]","2121":"[10075.1689 9999.6455 -10521.5293]","2122":"[10552.5732 9793.3105 -10521.3936]","2123":"[11011.6602 9552.3604 -10521.3955]","2124":"[11448.4971 9276.1563 -10521.2363]","2125":"[11859.5381 8965.5703 -10521.376]","2126":"[12240.2002 8620.8271 -10521.3291]","2127":"[12600.5508 8230.9541 -10521.2305]","2128":"[12923.5371 7811.6641 -10521.3408]","2129":"[13207.8066 7367.1655 -10521.4395]","2130":"[13453.7568 6901.9961 -10521.3418]","2131":"[13663.7217 6420.9722 -10521.3701]","2132":"[13839.2002 5927.7427 -10521.2314]","2133":"[13982.5215 5425.499 -10521.3477]","2134":"[14097.3496 4917.1958 -10521.1992]","2135":"[14185.2744 4404.7256 -10521.3945]","2136":"[14249.4424 3889.8479 -10521.3887]","2137":"[14292.1064 3373.7966 -10521.3926]","2138":"[14315.5225 2857.6738 -10521.4609]","2139":"[14321.9336 2341.45 -10531.8525]","2140":"[14321.9834 1822.7731 -10561.458]","2141":"[14321.6289 1299.2402 -10613.041]","2142":"[14321.9795 785.9275 -10670.8975]","2143":"[14322.2227 266.6541 -10732.2822]","2144":"[14321.6553 -253.1082 -10795.5195]","2145":"[14322.0283 -763.666 -10857.9785]","2146":"[14321.7227 -1290.3038 -10922.6045]","2147":"[14321.6475 -1818.0719 -10987.3721]","2148":"[14322.4043 -2336.4443 -11051.041]","2149":"[14322.0342 -2862.6631 -11115.6455]","2150":"[14321.6992 -3375.238 -11178.582]","2151":"[14321.7637 -3897.0229 -11242.6152]","2152":"[14322.002 -4416.3584 -11305.6855]","2153":"[14322.6523 -4945.2427 -11368.5098]","2154":"[14322.123 -5462.7432 -11427.583]","2155":"[14321.9443 -5990.3726 -11481.5957]","2156":"[14322.6553 -6521.4736 -11518.207]","2157":"[14317.8799 -7034.2881 -11532.2148]","2158":"[14297.3223 -7558.1274 -11532.0088]","2159":"[14257.2988 -8077.2422 -11532.3857]","2160":"[14196.6738 -8592.9346 -11532.4863]","2161":"[14112.7178 -9104.0508 -11532.3867]","2162":"[14003.1074 -9608.959 -11532.376]","2163":"[13866.9365 -10105.9102 -11532.2451]","2164":"[13700.2246 -10591.9082 -11532.334]","2165":"[13502.3467 -11064.5176 -11532.2969]","2166":"[13262.3096 -11536.7305 -11532.3506]","2167":"[12985.4131 -11986.374 -11532.3535]","2168":"[12672.1738 -12409.3604 -11532.2383]","2169":"[12323.7793 -12801.6084 -11532.21]","2170":"[11942.626 -13159.6924 -11532.3418]","2171":"[11532.501 -13481.7637 -11532.4834]","2172":"[11097.4971 -13766.6367 -11532.3076]","2173":"[10641.8252 -14014.1768 -11532.4258]","2174":"[10170.1035 -14226.3936 -11532.2988]","2175":"[9685.8662 -14404.6729 -11532.4336]","2176":"[9192.4033 -14551.5078 -11532.3408]","2177":"[8692.5732 -14670.0615 -11532.3154]","2178":"[8188.2866 -14762.0586 -11532.4463]","2179":"[7663.1699 -14832.2969 -11532.3662]","2180":"[7136.6323 -14880.0703 -11532.2324]","2181":"[6609.6987 -14906.8711 -11532.2988]","2182":"[6083.1851 -14915.6729 -11532.4395]","2183":"[5557.8545 -14915.8311 -11533.1279]","2184":"[5031.2251 -14914.9756 -11552.1826]","2185":"[4519.6855 -14916.3418 -11592.4453]","2186":"[4000.9604 -14916.0225 -11646.6875]","2187":"[3491.5452 -14915.6318 -11705.1211]","2188":"[2977.8972 -14915.9834 -11766.4072]","2189":"[2461.5313 -14915.7949 -11829.3027]","2190":"[1934.5029 -14915.667 -11894.1514]","2191":"[1416.7836 -14916.249 -11957.6309]","2192":"[898.1903 -14916.2383 -12021.3809]","2193":"[370.417 -14915.5137 -12086.1416]","2194":"[-141.4404 -14915.6455 -12148.9707]","2195":"[-657.8857 -14916.0088 -12212.374]","2196":"[-1176.6321 -14916.0752 -12275.9756]","2197":"[-1701.4332 -14915.6963 -12340.5098]","2198":"[-2214.9006 -14915.834 -12403.543]","2199":"[-2732.7378 -14916.123 -12467.0254]","2200":"[-3241.1042 -14916.0146 -12529.4277]","2201":"[-3764.5461 -14915.623 -12593.8789]","2202":"[-4289.5869 -14916.4443 -12657.9648]","2203":"[-4814.5791 -14916.4453 -12721.2041]","2204":"[-5336.9883 -14916.209 -12782.3818]","2205":"[-5862.5308 -14916.6279 -12839.873]","2206":"[-6384.9717 -14916.4854 -12887.2197]","2207":"[-6909.3657 -14914.9111 -12910.8477]","2208":"[-7436.7808 -14904.0605 -12916.209]","2209":"[-7962.7227 -14873.5381 -12916.2451]","2210":"[-8485.0264 -14821.459 -12916.1016]","2211":"[-9003.2275 -14748.8818 -12916.2773]","2212":"[-9514.7363 -14650.0068 -12916.1006]","2213":"[-10018.8262 -14525.6104 -12916.3359]","2214":"[-10513.3086 -14372.0244 -12916.4102]","2215":"[-10995.168 -14186.5586 -12916.4473]","2216":"[-11461.5088 -13969.1436 -12916.4404]","2217":"[-11908.1221 -13717.2031 -12916.3652]","2218":"[-12346.7637 -13419.7256 -12916.2803]","2219":"[-12756.207 -13086.2568 -12916.6045]","2220":"[-13131.8027 -12718.0801 -12916.6338]","2221":"[-13472.5654 -12319.6357 -12916.4141]","2222":"[-13775.7129 -11893.7676 -12916.3408]","2223":"[-14041.0195 -11444.9648 -12916.4287]","2224":"[-14270.5654 -10978.4209 -12916.373]","2225":"[-14464.249 -10497.3174 -12916.3857]","2226":"[-14625.4385 -10005.6797 -12916.2578]","2227":"[-14756.7314 -9506.4434 -12916.2422]","2228":"[-14860.0137 -9001.7842 -12916.4717]","2229":"[-14938.7227 -8493.8418 -12916.4717]","2230":"[-14994.9697 -7983.9644 -12916.3154]","2231":"[-15031.0908 -7454.9712 -12916.1719]","2232":"[-15048.8223 -6926.082 -12917.1309]","2233":"[-15051.7002 -6413.9302 -12935.3848]","2234":"[-15050.4072 -5899.2222 -12974.7344]","2235":"[-15051.2568 -5377.4956 -13028.9688]","2236":"[-15051.166 -4865.2852 -13087.6895]","2237":"[-15050.793 -4343.127 -13150.0801]","2238":"[-15051.1963 -3831.1885 -13212.4463]","2239":"[-15050.9424 -3312.8728 -13276.1328]","2240":"[-15050.958 -2796.4082 -13339.6172]","2241":"[-15050.9229 -2279.3979 -13402.9561]","2242":"[-15051.1416 -1755.0786 -13467.3477]","2243":"[-15050.8584 -1243.5985 -13530.1426]","2244":"[-15050.7529 -729.7975 -13593.2324]","2245":"[-15050.835 -204.796 -13657.6514]","2246":"[-15050.9053 312.557 -13721.1885]","2247":"[-15051.1426 834.3349 -13785.2227]","2248":"[-15051.002 1352.9409 -13849.001]","2249":"[-15050.8936 1862.4641 -13911.4648]","2250":"[-15050.8564 2372.8635 -13974.1191]","2251":"[-15051.2959 2889.3726 -14037.2549]","2252":"[-15051.4043 3412.6453 -14100.3887]","2253":"[-15051.2686 3936.7153 -14161.9893]","2254":"[-15051.3936 4451.0684 -14218.7773]","2255":"[-15051.3145 4974.0728 -14267.5918]","2256":"[-15050.8242 5502.4614 -14293.7451]","2257":"[-15040.4404 6033.7983 -14300.3525]","2258":"[-15011.7881 6552.6484 -14300.6084]","2259":"[-14964.3955 7062.8945 -14300.3672]","2260":"[-14892.3877 7588.1597 -14300.4668]","2261":"[-14795.6143 8107.7612 -14300.4658]","2262":"[-14671.3438 8620.0107 -14300.2793]","2263":"[-14517.2275 9122.5303 -14300.375]","2264":"[-14331.4492 9612.5781 -14300.2666]","2265":"[-14111.4863 10086.5059 -14300.2861]","2266":"[-13856.6309 10540.542 -14300.2598]","2267":"[-13566.3906 10970.7861 -14300.2725]","2268":"[-13241.0762 11373.0342 -14300.0439]","2269":"[-12883.084 11743.8887 -14300.3154]","2270":"[-12494.5527 12080.3047 -14300.4258]","2271":"[-12080.0391 12381.6211 -14300.3428]","2272":"[-11626.2705 12655.4033 -14300.3643]","2273":"[-11153.4961 12891.7012 -14300.4482]","2274":"[-10665.6279 13091.4619 -14300.332]","2275":"[-10179.4873 13252.8291 -14300.3584]","2276":"[-9674.2715 13387.0479 -14300.3477]","2277":"[-9163.8828 13493.9033 -14300.3896]","2278":"[-8647.9561 13574.8525 -14300.3955]","2279":"[-8126.0498 13632.0273 -14300.417]","2280":"[-7602.4673 13669.2119 -14300.2861]","2281":"[-7079.6367 13686.4814 -14300.3242]","2282":"[-6557.2876 13690.3428 -14300.3545]","2283":"[-6036.1255 13690.2295 -14300.2871]","2284":"[-5516.0728 13689.5508 -14300.3965]","2285":"[-4996.8667 13690.2744 -14300.4668]","2286":"[-4478.4805 13689.8955 -14300.3887]","2287":"[-3960.8943 13689.9277 -14300.4229]","2288":"[-3444.1292 13690.0166 -14300.2402]","2289":"[-2928.1521 13690.041 -14300.4336]","2290":"[-2412.9844 13689.8965 -14300.335]","2291":"[-1898.6128 13689.6816 -14300.4385]","2292":"[-1385.0635 13690.4316 -14300.2979]","2293":"[-872.3052 13689.5342 -14300.4395]","2294":"[-346.8901 13690.2383 -14300.5098]","2295":"[177.7081 13689.8467 -14300.5039]","2296":"[701.4755 13690.1289 -14300.3936]","2297":"[1224.3888 13689.7334 -14300.5029]","2298":"[1742.4763 13690.0947 -14300.4082]","2299":"[2266.5566 13689.8066 -14300.499]","2300":"[2781.5112 13690.1475 -14300.4629]","2301":"[3299.4363 13689.957 -14300.459]","2302":"[3818.6729 13690.6523 -14300.4121]","2303":"[4331.02 13688.9785 -14300.4395]","2304":"[4843.7686 13689.7998 -14300.4531]","2305":"[5373.7881 13690.8457 -14300.4424]","2306":"[5891.6084 13689.873 -14300.2148]","2307":"[6412.8535 13689.5498 -14300.248]","2308":"[6937.3086 13690.54 -14300.3545]","2309":"[7462.3389 13683.5449 -14301.04]","2310":"[7985.7886 13660.5654 -14301.8799]","2311":"[8506.5742 13617.5273 -14303.1006]","2312":"[9027.123 13552.6123 -14303.9756]","2313":"[9547.751 13461.4521 -14305.1465]","2314":"[10061.4443 13343.543 -14305.6719]","2315":"[10565.998 13196.2979 -14306.375]","2316":"[11058.4414 13016.3994 -14307.1182]","2317":"[11535.7305 12802.9023 -14307.6338]","2318":"[11993.3643 12552.9541 -14308.0576]","2319":"[12428.6514 12267.0547 -14308.542]","2320":"[12833.4258 11946.8018 -14308.4414]","2321":"[13205.9707 11591.8965 -14308.375]","2322":"[13544.2236 11206.4746 -14308.6201]","2323":"[13856.2324 10777.9043 -14308.3525]","2324":"[14129.0557 10325.2598 -14307.8633]","2325":"[14363.4424 9853.2148 -14307.3926]","2326":"[14560.5137 9366.1338 -14306.916]","2327":"[14723.7549 8868.2588 -14306.0596]","2328":"[14855.5908 8362.749 -14305.3301]","2329":"[14958.7539 7851.9565 -14304.5029]","2330":"[15036.585 7335.4541 -14303.6553]","2331":"[15091.0322 6821.3833 -14302.498]","2332":"[15124.1416 6307.6177 -14301.5264]","2333":"[15138.7217 5795.4023 -14300.3105]","2334":"[15141.2881 5266.5752 -14300.0635]","2335":"[15140.7861 4739.3838 -14300.2227]","2336":"[15141.0732 4213.2612 -14300.3564]","2337":"[15141.2314 3698.5623 -14300.3145]","2338":"[15140.375 3180.7405 -14300.457]","2339":"[15141.0059 2655.9866 -14300.3564]","2340":"[15141.3848 2132.3259 -14300.4355]","2341":"[15140.541 1602.3959 -14300.4434]","2342":"[15140.9531 1087.094 -14300.2744]","2343":"[15141.3652 572.8551 -14300.293]","2344":"[15140.5264 59.6979 -14300.3184]","2345":"[15140.8682 -452.3892 -14300.3252]","2346":"[15141.3096 -983.0637 -14300.3027]","2347":"[15140.4434 -1512.6371 -14300.3281]","2348":"[15140.9834 -2041.0608 -14300.2441]","2349":"[15141.0215 -2569.0825 -14306.4326]","2350":"[15140.5098 -3099.105 -14333.0596]","2351":"[15140.7969 -3612.6733 -14381.2617]","2352":"[15141.1699 -4133.2944 -14438.7725]","2353":"[15140.8115 -4642.0376 -14498.4268]","2354":"[15141.1445 -5159.0151 -14560.5283]","2355":"[15141.6533 -5684.6665 -14623.4814]","2356":"[15140.9668 -6195.6372 -14682.9131]","2357":"[15141.5332 -6714.8413 -14739.5156]","2358":"[15141.6123 -7243.7061 -14786.1914]","2359":"[15139.9199 -7765.3354 -14808.3467]","2360":"[15127.334 -8290.0215 -14813.2861]","2361":"[15094.9453 -8812.4424 -14814.582]","2362":"[15042.4648 -9331.3838 -14815.5518]","2363":"[14967.7256 -9846.4541 -14816.5176]","2364":"[14866.6523 -10355.791 -14817.4023]","2365":"[14738.9521 -10857.8359 -14818.1084]","2366":"[14581.9883 -11349.8799 -14818.749]","2367":"[14392.6729 -11828.9395 -14819.1357]","2368":"[14169.7695 -12291.3418 -14819.9775]","2369":"[13902.6689 -12749.4063 -14819.7012]","2370":"[13597.4404 -13180.7178 -14820.3096]","2371":"[13255.6611 -13581.3545 -14820.54]","2372":"[12879.3232 -13947.3359 -14820.4443]","2373":"[12473.0781 -14276.5566 -14820.3896]","2374":"[12040.3037 -14567.166 -14820.3271]","2375":"[11585.7559 -14819.5244 -14819.9033]","2376":"[11114.7021 -15036.1162 -14819.1895]","2377":"[10632.9951 -15216.5781 -14818.4795]","2378":"[10135.4453 -15366.3809 -14817.834]","2379":"[9626.5801 -15487.9844 -14817.1104]","2380":"[9113.0908 -15581.3037 -14816.2539]","2381":"[8597.542 -15649.8506 -14815.5752]","2382":"[8080.9756 -15697.0537 -14814.459]","2383":"[7564.5195 -15722.5059 -14813.5439]","2384":"[7049.1636 -15731.9199 -14813.0938]","2385":"[6535.127 -15732.251 -14812.5049]","2386":"[6022.2954 -15731.3506 -14812.4189]","2387":"[5491.5293 -15732.0723 -14812.4854]","2388":"[4961.8232 -15731.9746 -14812.5234]","2389":"[4433.1987 -15731.8369 -14812.5156]","2390":"[3905.6394 -15732.2588 -14812.6064]","2391":"[3379.1606 -15731.7275 -14812.3877]","2392":"[2852.6853 -15732.0166 -14820.6885]","2393":"[2324.1365 -15732.041 -14847.1836]","2394":"[1810.6873 -15731.9609 -14888.5918]","2395":"[1292.0913 -15732.6436 -14924.2852]","2396":"[769.7429 -15732.2344 -14938.9209]","2397":"[245.5932 -15731.4609 -14940.3545]","2398":"[-277.6687 -15732.0166 -14940.4199]","2399":"[-799.8812 -15732.0576 -14940.5811]","2400":"[-1321.0548 -15731.9189 -14940.4258]","2401":"[-1841.1512 -15732.1895 -14940.4824]","2402":"[-2360.2175 -15731.8477 -14940.46]","2403":"[-2878.2031 -15731.8311 -14940.4814]","2404":"[-3395.155 -15732.0771 -14940.417]","2405":"[-3911.0522 -15731.9033 -14940.4736]","2406":"[-4425.9102 -15732.1406 -14940.4531]","2407":"[-4939.7407 -15732.0146 -14940.4932]","2408":"[-5452.54 -15731.8223 -14940.3682]","2409":"[-5983.2534 -15732.1621 -14940.4697]","2410":"[-6512.8672 -15731.7012 -14940.4375]","2411":"[-7026.333 -15731.875 -14940.5254]","2412":"[-7551.731 -15727.4932 -14941.3154]","2413":"[-8075.0415 -15707.8877 -14941.96]","2414":"[-8595.1855 -15666.6982 -14942.9561]","2415":"[-9111.8223 -15606.3809 -14943.7764]","2416":"[-9623.7988 -15521.5313 -14944.7422]","2417":"[-10129.418 -15409.96 -14945.4463]","2418":"[-10627.0693 -15271.5605 -14946.1914]","2419":"[-11113.0537 -15101.6924 -14946.9229]","2420":"[-11591.8613 -14897.2939 -14947.457]","2421":"[-12057.4238 -14655.0742 -14947.7813]","2422":"[-12499.043 -14374.9385 -14948.4297]","2423":"[-12913.5693 -14058.8135 -14948.3877]","2424":"[-13297.0195 -13708.1523 -14948.4629]","2425":"[-13644.9844 -13324.4375 -14948.3291]","2426":"[-13956.6494 -12912.665 -14948.2773]","2427":"[-14230.9561 -12476.9287 -14947.835]","2428":"[-14467.9609 -12021.6641 -14947.3916]","2429":"[-14676.6797 -11533.9473 -14947.0264]","2430":"[-14849.5791 -11033.9121 -14946.3135]","2431":"[-14990.2568 -10525.4443 -14945.5879]","2432":"[-15100.6963 -10011.0352 -14944.7139]","2433":"[-15183.7666 -9493.2959 -14943.5107]","2434":"[-15244.1504 -8974.041 -14942.4258]","2435":"[-15281.8369 -8454.7979 -14941.8428]","2436":"[-15300.0898 -7935.9775 -14940.7695]","2437":"[-15303.9365 -7416.1631 -14957.1074]","2438":"[-15304.0293 -6893.5635 -14994.5879]","2439":"[-15303.7461 -6383.5435 -15046.9102]","2440":"[-15303.9141 -5864.7261 -15106.0781]","2441":"[-15303.7881 -5355.8506 -15166.7646]","2442":"[-15303.9199 -4837.3525 -15229.915]","2443":"[-15303.999 -4309.0908 -15294.7871]","2444":"[-15303.916 -3791.8394 -15358.252]","2445":"[-15303.9756 -3268.1782 -15422.6338]","2446":"[-15303.8643 -2746.6597 -15486.7695]","2447":"[-15303.915 -2237.8174 -15549.0078]","2448":"[-15303.9121 -1722.3331 -15612.4111]","2449":"[-15303.8936 -1199.7959 -15676.6113]","2450":"[-15303.9463 -683.2458 -15740.1025]","2451":"[-15304.3213 -174.1892 -15802.0986]","2452":"[-15304.3135 345.3737 -15865.124]","2453":"[-15304.0391 855.4505 -15925.6064]","2454":"[-15304.5449 1375.1158 -15983.9131]","2455":"[-15304.377 1901.782 -16035.3926]","2456":"[-15303.9375 2430.2576 -16065.958]","2457":"[-15303.8564 2942.4204 -16076.1162]","2458":"[-15304.0469 3455.2891 -16075.6006]","2459":"[-15303.5068 3986.7788 -16075.4395]","2460":"[-15303.8086 4517.1216 -16075.4434]","2461":"[-15303.9102 5046.3877 -16075.3916]","2462":"[-15303.8389 5574.5034 -16075.4521]","2463":"[-15303.7637 6101.541 -16075.4521]","2464":"[-15303.3271 6627.5151 -16075.7324]","2465":"[-15293.4531 7151.7041 -16075.9316]","2466":"[-15263.7813 7673.3506 -16077.0771]","2467":"[-15214.0039 8191.7412 -16078.334]","2468":"[-15143.1611 8706.125 -16079.2217]","2469":"[-15045.4238 9221.1396 -16080.0918]","2470":"[-14919.6289 9732.625 -16080.8838]","2471":"[-14765.7266 10226.5332 -16081.6709]","2472":"[-14579.6865 10709.667 -16082.4111]","2473":"[-14359.9238 11176.5654 -16082.709]","2474":"[-14105.0117 11623.3271 -16083.0723]","2475":"[-13814.5313 12045.8281 -16083.3125]","2476":"[-13476.2393 12454.7422 -16083.4111]","2477":"[-13102.5342 12829.1416 -16083.3193]","2478":"[-12697.1436 13166.374 -16083.4287]","2479":"[-12264.4932 13464.8789 -16083.3369]","2480":"[-11809.2217 13724.5283 -16082.8936]","2481":"[-11336.2139 13946.7803 -16082.1211]","2482":"[-10849.7168 14133.1475 -16081.6807]","2483":"[-10353.2412 14286.498 -16080.8584]","2484":"[-9849.916 14410.0283 -16080.085]","2485":"[-9341.9453 14506.0537 -16079.3984]","2486":"[-8831.1348 14577.1631 -16078.4961]","2487":"[-8311.6924 14626.8623 -16077.4551]","2488":"[-7785.8691 14656.0898 -16076.2568]","2489":"[-7261.5503 14666.1357 -16075.8174]","2490":"[-6738.5884 14657.3301 -16076.4258]","2491":"[-6217.7246 14628.9629 -16077.5264]","2492":"[-5699.3921 14581.4287 -16078.2568]","2493":"[-5184.8564 14511.0605 -16079.2764]","2494":"[-4675.5552 14415.8369 -16079.752]","2495":"[-4173.4341 14294.96 -16080.7783]","2496":"[-3680.6365 14144.6094 -16081.665]","2497":"[-3199.8755 13962.9795 -16082.1514]","2498":"[-2734.3569 13748.5879 -16082.7236]","2499":"[-2272.2441 13489.3496 -16083.1777]","2500":"[-1835.5154 13192.3311 -16083.5371]","2501":"[-1427.9159 12859.5635 -16083.6836]","2502":"[-1055.0613 12490.6963 -16083.4951]","2503":"[-718.0679 12090.96 -16083.4463]","2504":"[-418.7833 11664.2041 -16083.2705]","2505":"[-158.2435 11214.5225 -16082.8008]","2506":"[65.7313 10747.0967 -16082.3721]","2507":"[254.2704 10265.8574 -16081.6992]","2508":"[409.9124 9774.3955 -16080.9951]","2509":"[535.8848 9275.8008 -16080.2734]","2510":"[634.5515 8772.3936 -16079.4639]","2511":"[708.1848 8265.5313 -16078.5918]","2512":"[761.7382 7741.3989 -16077.5488]","2513":"[793.1852 7221.8071 -16076.6699]","2514":"[806.3182 6702.0171 -16075.5596]","2515":"[807.937 6181.0688 -16074.8662]","2516":"[806.1935 5656.1914 -16075.5107]","2517":"[806.2109 5141.751 -16075.5557]","2518":"[807.3918 4619.6196 -16075.2813]","2519":"[807.5739 4096.2236 -16075.3779]","2520":"[806.8859 3578.0142 -16075.3779]","2521":"[806.223 3051.5051 -16075.5908]","2522":"[806.361 2526.7139 -16075.3008]","2523":"[807.068 2003.5204 -16075.5586]","2524":"[807.5873 1482.0033 -16075.4141]","2525":"[807.2876 962.0779 -16075.4277]","2526":"[806.6566 443.7349 -16075.416]","2527":"[806.4392 -72.9979 -16075.4775]","2528":"[806.6991 -588.144 -16075.3145]","2529":"[807.3911 -1101.748 -16075.415]","2530":"[807.4218 -1613.7761 -16075.4561]","2531":"[806.6093 -2158.2844 -16075.2725]","2532":"[806.4521 -2701.0466 -16075.5801]","2533":"[806.7173 -3239.4741 -16075.3379]","2534":"[807.4953 -3780.2781 -16075.5439]","2535":"[806.9996 -4311.333 -16075.3662]","2536":"[806.7388 -4825.8154 -16075.5176]","2537":"[806.9148 -5341.6963 -16075.374]","2538":"[807.4012 -5864.9307 -16075.5068]","2539":"[806.9837 -6386.877 -16075.4297]","2540":"[806.7713 -6902.0239 -16075.4893]","2541":"[806.916 -7422.687 -16075.5186]","2542":"[810.2609 -7952.0635 -16074.916]","2543":"[827.3887 -8479.8906 -16074.0332]","2544":"[865.0551 -9004.8701 -16073.1836]","2545":"[922.6061 -9526.0762 -16072.2686]","2546":"[1003.0556 -10042.7412 -16071.4668]","2547":"[1109.7115 -10553.2168 -16070.5791]","2548":"[1241.8839 -11056.1846 -16069.9043]","2549":"[1404.8157 -11548.5029 -16069.2207]","2550":"[1598.3257 -12027.9941 -16068.8418]","2551":"[1824.3888 -12491.3086 -16068.5029]","2552":"[2084.9902 -12934.3027 -16068.1211]","2553":"[2378.8748 -13353.9746 -16067.5635]","2554":"[2718.0447 -13759.043 -16067.5791]","2555":"[3090.3096 -14131.6123 -16067.4209]","2556":"[3492.7776 -14468.9873 -16067.6738]","2557":"[3921.8298 -14769.4063 -16067.9941]","2558":"[4372.7056 -15033.3789 -16068.1748]","2559":"[4841.561 -15261.1377 -16068.7803]","2560":"[5324.3726 -15454.6514 -16069.2344]","2561":"[5817.8081 -15615.7793 -16069.8584]","2562":"[6323.439 -15748.1846 -16070.5273]","2563":"[6830.7671 -15852.8008 -16071.3623]","2564":"[7341.9355 -15931.3867 -16072.1787]","2565":"[7855.1074 -15987.9072 -16073.0938]","2566":"[8369.1748 -16024.3535 -16073.8926]","2567":"[8883.3623 -16041.3389 -16074.8135]","2568":"[9396.9219 -16045.4268 -16075.3252]","2569":"[9909.5938 -16044.8535 -16075.5186]","2570":"[10439.5527 -16044.9277 -16075.4375]","2571":"[10968.4424 -16045.1064 -16075.3994]","2572":"[11495.6553 -16034.4746 -16074.2275]","2573":"[12018.957 -15990.7549 -16071.9102]","2574":"[12533.7373 -15901.7861 -16070.5986]","2575":"[13030.5615 -15762.1709 -16068.6992]","2576":"[13505.167 -15553.001 -16068.5283]","2577":"[13951.6826 -15284.1895 -16067.7959]","2578":"[14341.1914 -14945.123 -16067.8389]","2579":"[14674.9434 -14543.0801 -16068.04]","2580":"[14936.2959 -14097.0313 -16068.5908]","2581":"[15130.9766 -13616.9355 -16069.5791]","2582":"[15266.79 -13115.876 -16070.9463]","2583":"[15350.3311 -12598.1572 -16072.3877]","2584":"[15389.8711 -12073.7842 -16074.4336]","2585":"[15399.8223 -11558.3057 -16075.3877]","2586":"[15399.5166 -11037.6514 -16075.4492]","2587":"[15398.1865 -10524.1191 -16075.3594]","2588":"[15399.4121 -10003.5176 -16075.4678]","2589":"[15399.8066 -9484.0742 -16075.6133]","2590":"[15398.5342 -8965.7881 -16075.5908]","2591":"[15398.7197 -8448.6465 -16075.5176]","2592":"[15399.71 -7932.6802 -16075.4092]","2593":"[15399.1953 -7417.8501 -16075.5361]","2594":"[15398.6514 -6904.1675 -16075.457]","2595":"[15399.3213 -6391.5742 -16075.4844]","2596":"[15399.2178 -5858.8618 -16075.5078]","2597":"[15398.8525 -5327.3555 -16075.4092]","2598":"[15399.2109 -4797.0415 -16075.3799]","2599":"[15399.3945 -4267.9229 -16075.4912]","2600":"[15398.5889 -3739.4114 -16075.4199]","2601":"[15399.2109 -3213.5532 -16075.4668]","2602":"[15399.3145 -2697.6624 -16075.4033]","2603":"[15399.3584 -2184.061 -16075.4941]","2604":"[15398.6777 -1669.2129 -16075.5186]","2605":"[15398.7324 -1151.5651 -16075.3916]","2606":"[15399.0264 -638.576 -16075.502]","2607":"[15398.373 -126.4231 -16075.4795]","2608":"[15399.0166 394.9201 -16075.5293]","2609":"[15398.3877 915.3863 -16075.2881]","2610":"[15398.8828 1435.009 -16075.4873]","2611":"[15398.4414 1953.7728 -16075.3271]","2612":"[15398.3516 2471.7019 -16075.4893]","2613":"[15398.8799 2988.771 -16075.3604]","2614":"[15399.166 3504.4512 -16075.4482]","2615":"[15398.9697 4018.9392 -16075.5518]","2616":"[15399.1992 4532.582 -16075.4629]","2617":"[15399.0244 5045.332 -16075.5146]","2618":"[15398.9482 5567.0537 -16075.4033]","2619":"[15399.5596 6087.8623 -16075.1416]","2620":"[15399.1328 6607.5713 -16075.167]","2621":"[15399.0957 7124.8052 -16075.0664]","2622":"[15399.4111 7640.709 -16075.3467]","2623":"[15398.8906 8155.6885 -16075.4434]","2624":"[15399.458 8669.8252 -16075.5166]","2625":"[15398.7188 9183.0684 -16075.4717]","2626":"[15398.8535 9701.0977 -16075.4004]","2627":"[15398.1064 10214.3193 -16075.4932]","2628":"[15398.209 10728.0146 -16075.46]","2629":"[15398.332 11245.0381 -16075.4219]","2630":"[15399.1885 11761.2725 -16075.46]","2631":"[15399.1406 12280.4453 -16075.4912]","2632":"[15398.6035 12798.0176 -16075.4805]","2633":"[15398.6924 13314.8301 -16075.4893]","2634":"[15398.3799 13829.748 -16075.4141]","2635":"[15398.5488 14342.9365 -16075.5166]","2636":"[15398.9219 14856.5625 -16075.373]","2637":"[15398.7373 15369.333 -16075.5244]","2638":"[15398.7002 15713.5332 -16075.1514]"},"2":{"1":"[15135.1299 15696.4785 -16075.4521]","2":"[15135.0996 15594.0605 -16075.4375]","3":"[15134.6719 15081.4268 -16075.3809]","4":"[15135.3506 14562.2461 -16075.4463]","5":"[15134.8359 14044.4648 -16075.4434]","6":"[15135.209 13527.8701 -16075.4434]","7":"[15135.166 13012.3887 -16075.4629]","8":"[15134.9209 12498.002 -16075.4746]","9":"[15135.2432 11984.7197 -16075.4385]","10":"[15135.1846 11472.5371 -16075.4932]","11":"[15135.4229 10952.9453 -16075.5205]","12":"[15135.0029 10434.4902 -16075.499]","13":"[15134.5098 9917.1592 -16075.3965]","14":"[15135.0381 9400.958 -16075.4453]","15":"[15134.6367 8885.8779 -16075.4863]","16":"[15134.6348 8371.9268 -16075.4395]","17":"[15135.667 7859.1724 -16075.3652]","18":"[15135.5645 7339.6167 -16075.3271]","19":"[15135.7725 6821.7222 -16075.251]","20":"[15136.1543 6306.0186 -16075.3057]","21":"[15134.9541 5788.8608 -16075.3789]","22":"[15135.2246 5273.3779 -16075.2607]","23":"[15135.0781 4760.0146 -16075.3564]","24":"[15134.4717 4247.8271 -16075.4688]","25":"[15135.0264 3728.218 -16075.4258]","26":"[15135.2686 3209.7634 -16075.4785]","27":"[15134.6299 2692.4565 -16075.3428]","28":"[15135.0566 2176.239 -16075.4434]","29":"[15134.8877 1661.1644 -16075.4063]","30":"[15135.123 1147.2715 -16075.5]","31":"[15134.4395 634.4876 -16075.5439]","32":"[15135.2646 114.4669 -16075.499]","33":"[15135.0967 -404.3576 -16075.5215]","34":"[15134.7695 -922.0253 -16075.4082]","35":"[15135.2881 -1438.4806 -16075.4893]","36":"[15134.4531 -1951.2113 -16075.3789]","37":"[15134.6689 -2471.5776 -16075.4063]","38":"[15135.2939 -2990.8433 -16075.4365]","39":"[15135.1914 -3508.978 -16075.5303]","40":"[15135.2666 -4026.0146 -16075.4365]","41":"[15134.5469 -4541.9463 -16075.5244]","42":"[15135.1299 -5056.792 -16075.4629]","43":"[15134.5957 -5570.5586 -16075.5215]","44":"[15135.2402 -6083.1885 -16075.5244]","45":"[15134.9902 -6603.2573 -16075.5098]","46":"[15135.0225 -7122.186 -16075.4824]","47":"[15135.1602 -7639.9717 -16075.5547]","48":"[15135.1514 -8156.6382 -16075.4092]","49":"[15134.5254 -8672.1699 -16075.5107]","50":"[15135.0498 -9186.5469 -16075.4844]","51":"[15134.5283 -9699.8008 -16075.4922]","52":"[15135.5625 -10211.8887 -16075.416]","53":"[15135.0225 -10731.2285 -16075.54]","54":"[15134.4912 -11249.3877 -16075.4063]","55":"[15132.8916 -11766.5322 -16075.8525]","56":"[15112.1855 -12278.5996 -16077.1924]","57":"[15055.1768 -12793.75 -16078.8867]","58":"[14949.5664 -13298.6104 -16080.7842]","59":"[14785.7939 -13784.6934 -16082.1436]","60":"[14551.4404 -14245.9707 -16083.2656]","61":"[14246.4561 -14657.7734 -16083.623]","62":"[13886.7129 -14997.8672 -16083.5742]","63":"[13462.5459 -15277.04 -16082.9453]","64":"[12988.3232 -15489.4922 -16081.7275]","65":"[12494.6211 -15634.4424 -16080.2334]","66":"[11982.165 -15724.6016 -16078.4424]","67":"[11465.9111 -15767.5869 -16076.6064]","68":"[10951.4229 -15780.5801 -16075.6855]","69":"[10438.9951 -15780.5713 -16075.335]","70":"[9919.2529 -15781.2871 -16075.4639]","71":"[9400.7539 -15781.0225 -16075.4678]","72":"[8883.6543 -15775.4873 -16076.0029]","73":"[8368.3438 -15758.1748 -16076.9268]","74":"[7855.5933 -15721.1533 -16077.9229]","75":"[7346.4321 -15663.2383 -16078.7969]","76":"[6834.1167 -15582.0361 -16079.8535]","77":"[6327.3721 -15475.4902 -16080.541]","78":"[5825.0942 -15340.1309 -16081.3037]","79":"[5339.6143 -15175.9434 -16082.0371]","80":"[4859.3755 -14976.7422 -16082.6416]","81":"[4397.0024 -14742.2373 -16083.1484]","82":"[3956.4241 -14472.2441 -16083.4971]","83":"[3541.8855 -14166.9453 -16083.8398]","84":"[3157.9126 -13827.1543 -16083.9658]","85":"[2801.7241 -13449.5654 -16083.9307]","86":"[2482.3372 -13043.6211 -16083.6455]","87":"[2200.9507 -12613.2949 -16083.418]","88":"[1953.4203 -12155.7734 -16082.8271]","89":"[1742.3356 -11682.8799 -16082.3066]","90":"[1566.946 -11201.4209 -16081.6152]","91":"[1421.3712 -10704.4365 -16080.8682]","92":"[1305.4266 -10202.1855 -16080.1113]","93":"[1215.9142 -9696.7305 -16079.2031]","94":"[1149.2407 -9181.7617 -16078.3838]","95":"[1104.9945 -8667.2129 -16077.2461]","96":"[1080.8459 -8154.9526 -16076.1387]","97":"[1072.0139 -7636.4731 -16075.6133]","98":"[1071.1643 -7118.2529 -16075.4912]","99":"[1071.4144 -6605.7964 -16075.543]","100":"[1070.9999 -6085.7681 -16075.5264]","101":"[1071.1707 -5566.835 -16075.5049]","102":"[1071.2371 -5048.9907 -16075.5322]","103":"[1071.4198 -4532.2871 -16075.4434]","104":"[1070.6383 -4016.668 -16075.4883]","105":"[1070.8149 -3502.167 -16075.5322]","106":"[1071.5189 -2988.7813 -16075.4668]","107":"[1070.7515 -2476.5117 -16075.4902]","108":"[1071.3213 -1956.8198 -16075.4951]","109":"[1070.8636 -1438.2463 -16075.54]","110":"[1071.3882 -920.8117 -16075.5146]","111":"[1071.0138 -404.5113 -16075.4658]","112":"[1070.7422 110.6538 -16075.4551]","113":"[1071.3099 624.699 -16075.5195]","114":"[1071.4124 1137.6248 -16075.5117]","115":"[1070.9911 1657.777 -16075.3926]","116":"[1070.5707 2176.7402 -16075.4307]","117":"[1071.5204 2694.5276 -16075.4385]","118":"[1070.6351 3211.1675 -16075.4316]","119":"[1070.9934 3730.0842 -16075.4385]","120":"[1071.1365 4250.7158 -16075.3896]","121":"[1070.6251 4770.2319 -16075.4766]","122":"[1071.4209 5288.604 -16075.4619]","123":"[1071.256 5805.8784 -16075.4795]","124":"[1070.97 6322.0005 -16075.377]","125":"[1066.4186 6836.4941 -16075.1416]","126":"[1049.1384 7348.499 -16074.0908]","127":"[1013.1406 7865.9648 -16073.085]","128":"[957.1602 8379.4219 -16072.3018]","129":"[879.4567 8887.7871 -16071.541]","130":"[777.4229 9389.5723 -16070.8574]","131":"[647.0332 9891.0195 -16070.1895]","132":"[488.5112 10381.6094 -16069.3955]","133":"[300.3449 10858.2109 -16069.0566]","134":"[77.1111 11324.1191 -16068.4883]","135":"[-179.5315 11769.7881 -16068.2559]","136":"[-474.7612 12198.2969 -16067.9121]","137":"[-803.6143 12598.4189 -16067.9131]","138":"[-1164.3374 12966.7607 -16067.7852]","139":"[-1553.6029 13301.4463 -16067.9844]","140":"[-1974.7745 13606.0342 -16068.0049]","141":"[-2418.0613 13873.873 -16068.5459]","142":"[-2879.4763 14105.3867 -16068.8477]","143":"[-3354.7903 14303.1436 -16069.4521]","144":"[-3840.9312 14468.5381 -16070.0508]","145":"[-4339.4673 14606.0977 -16070.6426]","146":"[-4845.4966 14716.0303 -16071.2988]","147":"[-5355.7407 14800.1133 -16071.957]","148":"[-5868.5483 14861.1357 -16073.0098]","149":"[-6382.8135 14901.9141 -16073.8369]","150":"[-6897.9268 14923.3701 -16074.7813]","151":"[-7412.5996 14926.2197 -16074.8936]","152":"[-7925.667 14912.0039 -16074.0957]","153":"[-8444.2646 14878.5 -16073.2129]","154":"[-8958.8955 14824.626 -16072.5293]","155":"[-9468.5 14748.8301 -16071.5684]","156":"[-9971.6846 14649.6201 -16071.0859]","157":"[-10474.6494 14522.7275 -16070.1318]","158":"[-10966.9629 14366.9453 -16069.5498]","159":"[-11446.1357 14181.0498 -16069.0889]","160":"[-11909.9434 13963.832 -16068.5957]","161":"[-12358.8252 13710.3975 -16068.2109]","162":"[-12784.0498 13423.1523 -16068.0664]","163":"[-13188.6836 13097.5693 -16067.791]","164":"[-13562.126 12739.9316 -16067.8301]","165":"[-13901.6943 12352.9697 -16067.7861]","166":"[-14206.1592 11940.4678 -16068.1104]","167":"[-14478.9678 11498.8477 -16068.2695]","168":"[-14715.5264 11038.8594 -16068.8018]","169":"[-14917.6016 10564.3916 -16069.375]","170":"[-15087.1309 10078.7334 -16069.9502]","171":"[-15228.5635 9578.6113 -16070.4385]","172":"[-15341.6514 9072.4521 -16071.2617]","173":"[-15429.0156 8561.9287 -16072.0586]","174":"[-15492.6094 8048.5083 -16072.7988]","175":"[-15535.5107 7533.4258 -16073.7988]","176":"[-15558.9443 7017.4824 -16074.6221]","177":"[-15567.2383 6501.4951 -16075.0938]","178":"[-15567.8115 5986.166 -16075.4854]","179":"[-15567.9824 5471.8931 -16075.4766]","180":"[-15568.6924 4958.7251 -16075.5068]","181":"[-15567.8506 4446.7163 -16075.4639]","182":"[-15568.1973 3927.2976 -16075.4688]","183":"[-15567.5781 3408.999 -16075.4756]","184":"[-15568.1201 2891.8362 -16075.4951]","185":"[-15568.2217 2377.2268 -16063.4482]","186":"[-15568.8379 1860.3184 -16031.7061]","187":"[-15568.1084 1347.6101 -15981.001]","188":"[-15567.8867 836.5643 -15923.3311]","189":"[-15568.084 323.537 -15862.7598]","190":"[-15568.4678 -187.8866 -15800.748]","191":"[-15568.6982 -699.2289 -15738.2666]","192":"[-15567.5029 -1211.5094 -15675.2021]","193":"[-15567.3574 -1722.6373 -15612.376]","194":"[-15568.5645 -2232.9128 -15549.7334]","195":"[-15568.293 -2745.2542 -15486.8525]","196":"[-15567.9023 -3258.1697 -15423.8662]","197":"[-15568.1533 -3769.3125 -15361.1162]","198":"[-15568.0977 -4280.5698 -15298.3379]","199":"[-15568.1475 -4792.2837 -15235.4512]","200":"[-15568.0371 -5302.647 -15173.4238]","201":"[-15567.3799 -5816.0713 -15112.0332]","202":"[-15567.5088 -6329.4746 -15053.1934]","203":"[-15567.8848 -6842.1484 -14999.5967]","204":"[-15567.9307 -7357.9863 -14959.8994]","205":"[-15563.2529 -7873.3433 -14942.2695]","206":"[-15547.3203 -8392.8965 -14939.0449]","207":"[-15512.3926 -8908.7549 -14938.1816]","208":"[-15457.2363 -9420.6582 -14937.3027]","209":"[-15380.5488 -9927.3164 -14936.7363]","210":"[-15278.8682 -10435.4609 -14935.8389]","211":"[-15150.0869 -10935.0146 -14935.1641]","212":"[-14993.5088 -11424.1523 -14934.5811]","213":"[-14805.7461 -11903.9971 -14934.0146]","214":"[-14584.5195 -12369.252 -14933.5391]","215":"[-14329.8877 -12814.3291 -14933.2412]","216":"[-14037.5039 -13243.0459 -14932.9893]","217":"[-13711.165 -13643.5332 -14932.8564]","218":"[-13353.0371 -14012.749 -14932.7969]","219":"[-12966.2412 -14348.5586 -14932.9863]","220":"[-12547.4375 -14654.2461 -14933.0469]","221":"[-12106.4082 -14923.3281 -14933.3926]","222":"[-11647.501 -15156.6338 -14933.8281]","223":"[-11174.3672 -15356.041 -14934.4307]","224":"[-10686.4668 -15524.8145 -14935.0107]","225":"[-10187.877 -15663.5234 -14935.6885]","226":"[-9683.3945 -15774.627 -14936.2441]","227":"[-9174.7578 -15860.5908 -14937.0957]","228":"[-8663.3008 -15923.0039 -14937.8691]","229":"[-8150.1899 -15964.6631 -14938.751]","230":"[-7636.3506 -15987.4492 -14939.8115]","231":"[-7122.5659 -15995.082 -14940.332]","232":"[-6609.5005 -15995.9307 -14940.5059]","233":"[-6088.9834 -15996.5293 -14940.3379]","234":"[-5569.6104 -15995.4521 -14940.4033]","235":"[-5051.4023 -15996.334 -14940.5713]","236":"[-4534.2944 -15995.8945 -14940.5059]","237":"[-4018.2842 -15996.1211 -14940.4424]","238":"[-3503.3684 -15995.9473 -14940.5]","239":"[-2989.5681 -15995.8291 -14940.4453]","240":"[-2476.9204 -15996.5889 -14940.4395]","241":"[-1957.0065 -15995.5566 -14940.3848]","242":"[-1438.2572 -15996.0479 -14940.459]","243":"[-920.6996 -15995.7617 -14940.5293]","244":"[-404.3284 -15996.2178 -14940.5176]","245":"[109.5028 -15996.1523 -14940.5254]","246":"[629.839 -15996.3857 -14940.2148]","247":"[1143.53 -15995.6924 -14929.3877]","248":"[1658.0585 -15996.0371 -14899.9785]","249":"[2173.0681 -15996.0244 -14859.3994]","250":"[2687.6511 -15995.8271 -14826.9385]","251":"[3199.7002 -15995.4707 -14813.9014]","252":"[3719.9121 -15996.0273 -14812.3594]","253":"[4238.5132 -15996.4453 -14812.4697]","254":"[4755.9019 -15995.3389 -14812.4824]","255":"[5272.0747 -15996.0322 -14812.5322]","256":"[5789.8765 -15996.6318 -14812.3516]","257":"[6309.9937 -15995.4766 -14812.501]","258":"[6828.9619 -15995.9336 -14812.3369]","259":"[7345.8047 -15990.3516 -14811.8838]","260":"[7860.0386 -15972.291 -14811.0303]","261":"[8371.1416 -15935.501 -14810.1768]","262":"[8886.7559 -15877.7432 -14809.3545]","263":"[9396.8887 -15797.8271 -14808.2686]","264":"[9900.1768 -15694.0303 -14807.792]","265":"[10402.9521 -15561.2041 -14807.0176]","266":"[10894.6563 -15399.4795 -14806.5088]","267":"[11372.5918 -15207.2988 -14806.001]","268":"[11833.7881 -14983.2373 -14805.4355]","269":"[12279.752 -14722.6611 -14805.2383]","270":"[12701.3438 -14428.2402 -14804.9434]","271":"[13101.1006 -14095.0693 -14804.9766]","272":"[13468.9932 -13730.3662 -14804.8643]","273":"[13802.499 -13336.9023 -14804.9473]","274":"[14100.8975 -12918.5547 -14805.0869]","275":"[14363.2158 -12478.7588 -14805.4727]","276":"[14593.7441 -12014.085 -14805.7061]","277":"[14789.9629 -11535.6279 -14806.3379]","278":"[14954.2861 -11046.5977 -14806.9199]","279":"[15088.7334 -10549.6016 -14807.8193]","280":"[15195.8721 -10046.8359 -14808.3457]","281":"[15278.4434 -9539.2822 -14809.1631]","282":"[15338.6641 -9023.8916 -14810.0283]","283":"[15377.8457 -8506.9893 -14810.8711]","284":"[15398.4297 -7989.4536 -14811.7451]","285":"[15404.5352 -7471.4331 -14797.541]","286":"[15404.8975 -6955.9551 -14762.5029]","287":"[15405.1738 -6442.3735 -14710.5576]","288":"[15405 -5930.1235 -14652.4355]","289":"[15404.8193 -5417.5684 -14591.457]","290":"[15404.8574 -4905.6938 -14530.0283]","291":"[15404.5029 -4393.6436 -14469.1543]","292":"[15404.4209 -3881.0745 -14410.3262]","293":"[15404.752 -3367.0239 -14357.1289]","294":"[15404.8838 -2852.6514 -14318.7373]","295":"[15405.0996 -2336.6768 -14302.4092]","296":"[15404.6846 -1820.6188 -14300.4004]","297":"[15405.377 -1305.9698 -14300.4873]","298":"[15404.8525 -792.4127 -14300.5498]","299":"[15404.7051 -279.9584 -14300.458]","300":"[15405.0645 239.8911 -14300.5117]","301":"[15404.9736 758.6158 -14300.4932]","302":"[15404.5342 1276.2104 -14300.5566]","303":"[15405.333 1792.6498 -14300.5225]","304":"[15405.248 2307.9548 -14300.3311]","305":"[15404.8271 2822.105 -14300.5078]","306":"[15404.9453 3335.1155 -14300.4316]","307":"[15405.207 3855.377 -14300.5313]","308":"[15404.9434 4374.4785 -14300.4795]","309":"[15405.124 4892.3994 -14300.5088]","310":"[15404.9512 5409.2305 -14300.3398]","311":"[15398.8301 5929.7212 -14299.792]","312":"[15379.2871 6447.3125 -14298.9688]","313":"[15340.5352 6961.3525 -14298.0957]","314":"[15281.9082 7471.3018 -14297.1553]","315":"[15199.4482 7984.4072 -14296.3037]","316":"[15093.1865 8490.873 -14295.7373]","317":"[14959.5996 8988.5576 -14295.1016]","318":"[14797.0146 9474.9668 -14294.4473]","319":"[14601.1738 9955.3975 -14293.9053]","320":"[14372.7236 10418.4336 -14293.4961]","321":"[14110.998 10860.6631 -14293.292]","322":"[13811.7227 11283.8418 -14292.9219]","323":"[13479.3203 11677.6895 -14292.9141]","324":"[13116.1016 12039.9951 -14292.8154]","325":"[12717.6318 12373.2139 -14292.9912]","326":"[12294.3926 12671.043 -14293.3096]","327":"[11849.7646 12932.54 -14293.5615]","328":"[11387.8623 13158.7041 -14293.8906]","329":"[10912.2949 13350.9775 -14294.4805]","330":"[10418.6182 13514.374 -14295.123]","331":"[9917.0371 13647.665 -14295.7432]","332":"[9409.6387 13753.1924 -14296.5107]","333":"[8898.4404 13833.9795 -14297.2949]","334":"[8384.7568 13892.1523 -14298.0703]","335":"[7869.6235 13929.4678 -14298.9639]","336":"[7353.9922 13948.0684 -14299.8975]","337":"[6836.2051 13961.3242 -14300.4893]","338":"[6317.7305 13993.623 -14300.834]","339":"[5805.9746 14064.1904 -14300.6377]","340":"[5299.9624 14158.7637 -14300.7607]","341":"[4797.3623 14259.5645 -14300.6455]","342":"[4288.4683 14362.0029 -14300.5684]","343":"[3780.3547 14461.9512 -14300.7139]","344":"[3273.5745 14562.1641 -14300.6396]","345":"[2765.1807 14640.0566 -14300.585]","346":"[2246.9915 14683.918 -14300.7822]","347":"[1729.2251 14697.1807 -14300.4912]","348":"[1211.9886 14698.1367 -14300.582]","349":"[699.8677 14697.7119 -14300.3291]","350":"[180.1601 14698.0459 -14300.499]","351":"[-338.4329 14697.7686 -14300.4453]","352":"[-855.9151 14698.5947 -14300.5674]","353":"[-1372.3098 14698.165 -14300.5566]","354":"[-1887.6371 14697.9512 -14300.5068]","355":"[-2401.887 14698.2266 -14300.4131]","356":"[-2915.0552 14697.6738 -14300.4424]","357":"[-3427.082 14698.3516 -14300.5537]","358":"[-3946.4734 14698.6338 -14300.5303]","359":"[-4464.6763 14697.2402 -14300.4023]","360":"[-4981.7222 14697.9404 -14300.5059]","361":"[-5497.5742 14698.4648 -14300.4688]","362":"[-6012.2383 14697.9316 -14300.3955]","363":"[-6525.314 14697.4932 -14300.4199]","364":"[-7044.9434 14698.1045 -14300.5166]","365":"[-7563.1558 14697.4297 -14300.3398]","366":"[-8079.499 14692.7168 -14300.4912]","367":"[-8594.2061 14677.4678 -14300.4492]","368":"[-9106.4727 14643.082 -14300.4072]","369":"[-9621.9844 14586.6738 -14300.4512]","370":"[-10133.2695 14508.8105 -14300.5234]","371":"[-10638.8145 14406.5674 -14300.4902]","372":"[-11136.4023 14276.6748 -14300.4316]","373":"[-11623.9873 14118.4688 -14300.5986]","374":"[-12106.4473 13926.2813 -14300.5977]","375":"[-12571.9219 13700.2549 -14300.54]","376":"[-13016.5938 13439.6738 -14300.5527]","377":"[-13436.6816 13144.9795 -14300.6621]","378":"[-13834.5928 12811.333 -14300.7627]","379":"[-14199.2578 12444.9932 -14300.624]","380":"[-14529.0557 12049.8779 -14300.6416]","381":"[-14822.7822 11629.8135 -14300.6094]","382":"[-15083.1084 11184.1846 -14300.5518]","383":"[-15306.9004 10720.3633 -14300.498]","384":"[-15496.8076 10243.4658 -14300.5176]","385":"[-15656.9043 9748.4922 -14300.4609]","386":"[-15786.707 9246.3545 -14300.5439]","387":"[-15888.626 8739.3604 -14300.5225]","388":"[-15965.8086 8229.3682 -14300.5869]","389":"[-16020.0059 7717.8398 -14300.3311]","390":"[-16054.4063 7205.9561 -14300.4199]","391":"[-16070.9814 6686.1382 -14300.3721]","392":"[-16075.3486 6167.3071 -14300.4023]","393":"[-16074.7334 5647.9292 -14297.7686]","394":"[-16074.0947 5130.5098 -14278.4775]","395":"[-16075.5957 4615.3145 -14237.1289]","396":"[-16075.5381 4103.0537 -14182.791]","397":"[-16074.8711 3589.5449 -14123.1582]","398":"[-16074.8398 3077.929 -14062.0176]","399":"[-16074.9961 2565.6931 -13999.5879]","400":"[-16074.7842 2053.1018 -13936.7256]","401":"[-16074.5674 1542.2904 -13874.0225]","402":"[-16074.249 1030.2562 -13811.2676]","403":"[-16074.4639 518.8933 -13748.3496]","404":"[-16075.168 8.1397 -13685.7363]","405":"[-16074.2949 -503.824 -13622.8135]","406":"[-16074.6895 -1015.1428 -13560.0244]","407":"[-16074.4277 -1526.9818 -13497.1777]","408":"[-16074.5176 -2037.8484 -13434.4492]","409":"[-16074.8428 -2550.3372 -13371.5205]","410":"[-16075.0674 -3062.1985 -13308.6748]","411":"[-16074.3623 -3573.0674 -13245.9619]","412":"[-16074.7129 -4085.6692 -13183.3291]","413":"[-16074.9092 -4597.1392 -13121.4053]","414":"[-16074.3955 -5108.2959 -13061.3311]","415":"[-16074.5234 -5621.8877 -13004.085]","416":"[-16074.6875 -6135.6626 -12954.9688]","417":"[-16074.6738 -6651.7993 -12926.6279]","418":"[-16074.4775 -7170.8628 -12916.2305]","419":"[-16074.0234 -7684.834 -12916.6201]","420":"[-16065.5342 -8197.127 -12916.4131]","421":"[-16040.1084 -8716.0928 -12916.3906]","422":"[-15995.6309 -9232.4219 -12916.2871]","423":"[-15930.1758 -9744.6143 -12916.3574]","424":"[-15840.6592 -10251.3604 -12916.4072]","425":"[-15726.3799 -10751.6104 -12916.5098]","426":"[-15581.9453 -11251.085 -12916.5996]","427":"[-15406.7695 -11738.8115 -12916.5479]","428":"[-15198.9805 -12211.4678 -12916.6514]","429":"[-14957.7676 -12665.6025 -12916.6299]","430":"[-14680.1982 -13101.0215 -12916.6523]","431":"[-14366.4902 -13511.0488 -12916.5967]","432":"[-14019.7969 -13890.4951 -12916.6494]","433":"[-13636.3838 -14242.1553 -12916.5605]","434":"[-13224.9346 -14556.8213 -12916.5088]","435":"[-12790.4072 -14834.7646 -12916.668]","436":"[-12337.1406 -15076.7695 -12916.501]","437":"[-11860.6387 -15285.749 -12916.6348]","438":"[-11372.6533 -15460.8867 -12916.5938]","439":"[-10876.4209 -15605.1406 -12916.5752]","440":"[-10374.2285 -15720.1426 -12916.4561]","441":"[-9867.9658 -15809.3994 -12916.417]","442":"[-9353.5557 -15875.2354 -12916.4932]","443":"[-8838.125 -15920.001 -12916.5254]","444":"[-8322.6201 -15944.7734 -12916.5264]","445":"[-7807.7271 -15953.5674 -12916.4697]","446":"[-7293.9409 -15954.8564 -12916.5332]","447":"[-6777.2871 -15955.0645 -12906.5576]","448":"[-6262.9336 -15955.6035 -12877.5264]","449":"[-5748.6128 -15955.1436 -12828.0908]","450":"[-5235.1172 -15954.7646 -12770.6973]","451":"[-4724.0034 -15954.9414 -12710.3838]","452":"[-4211.5806 -15954.9746 -12648.3701]","453":"[-3699.6775 -15953.9609 -12585.8857]","454":"[-3188.6401 -15954.6543 -12523.1406]","455":"[-2677.5225 -15955.126 -12460.4209]","456":"[-2165.9651 -15954.5957 -12397.6152]","457":"[-1653.9159 -15954.5811 -12334.7422]","458":"[-1142.2128 -15954.5371 -12271.876]","459":"[-629.0639 -15954.4463 -12208.8477]","460":"[-117.6797 -15954.958 -12146.041]","461":"[393.867 -15954.6729 -12083.2314]","462":"[905.9209 -15954.3242 -12020.3555]","463":"[1417.3564 -15955.3008 -11957.5352]","464":"[1928.155 -15954.4307 -11894.9033]","465":"[2440.9285 -15955.0762 -11831.8994]","466":"[2952.7073 -15954.1885 -11769.668]","467":"[3463.3872 -15954.7725 -11708.4424]","468":"[3975.167 -15954.4824 -11649.5234]","469":"[4486.9531 -15954.6074 -11595.376]","470":"[5001.9678 -15955.0234 -11554.1025]","471":"[5520.4482 -15954.748 -11535.251]","472":"[6033.6157 -15954.6582 -11532.4551]","473":"[6553.2598 -15954.5254 -11532.4209]","474":"[7071.292 -15954.1318 -11532.3965]","475":"[7587.8447 -15944.8477 -11532.3672]","476":"[8102.3027 -15920.3037 -11532.3311]","477":"[8612.9365 -15876.8242 -11532.3506]","478":"[9127.042 -15811.4492 -11532.458]","479":"[9636.0488 -15722.0518 -11532.4795]","480":"[10137.9834 -15607.3691 -11532.4688]","481":"[10630.9639 -15465.1641 -11532.4814]","482":"[11120.4102 -15289.7715 -11532.4746]","483":"[11595.2295 -15082.6221 -11532.3887]","484":"[12051.3525 -14841.292 -11532.5723]","485":"[12484.5898 -14565.0176 -11532.7783]","486":"[12897.9629 -14249.6309 -11532.6523]","487":"[13280.3457 -13900.7842 -11532.6846]","488":"[13628.9961 -13521.3252 -11532.6143]","489":"[13941.3193 -13114.1504 -11532.5215]","490":"[14220.3594 -12680.3496 -11532.6641]","491":"[14463.1582 -12225.8008 -11532.6152]","492":"[14670.6309 -11756.1729 -11532.5]","493":"[14847.8271 -11267.0313 -11532.5117]","494":"[14992.8604 -10769.1914 -11532.4746]","495":"[15108.5273 -10265.373 -11532.4404]","496":"[15199.0986 -9757.9102 -11532.5098]","497":"[15265.1016 -9248.0566 -11532.6162]","498":"[15309.5488 -8737.1943 -11532.5]","499":"[15335.2539 -8217.9883 -11532.4512]","500":"[15344.6885 -7699.4766 -11532.4453]","501":"[15345.6143 -7182.2881 -11532.3926]","502":"[15345.8809 -6662.1587 -11522.6846]","503":"[15346.6367 -6148.3916 -11493.8779]","504":"[15345.6504 -5635.4585 -11444.7305]","505":"[15345.5713 -5123.3545 -11387.5439]","506":"[15346.7441 -4610.9102 -11327.3281]","507":"[15345.7852 -4098.8428 -11265.3516]","508":"[15345.1699 -3588.1116 -11202.876]","509":"[15345.9922 -3075.3513 -11139.9111]","510":"[15345.6289 -2564.2427 -11077.1514]","511":"[15346.1699 -2052.6301 -11014.3359]","512":"[15345.04 -1540.8846 -10951.4883]","513":"[15346.375 -1028.6575 -10888.6025]","514":"[15345.3984 -518.1984 -10825.9619]","515":"[15345.7266 -6.1599 -10763.5693]","516":"[15345.627 505.1206 -10702.3477]","517":"[15345.2656 1017.4252 -10643.0146]","518":"[15345.8496 1530.9784 -10588.2461]","519":"[15345.9551 2045.7305 -10545.6699]","520":"[15345.8555 2561.863 -10524.8193]","521":"[15345.2813 3075.2786 -10521.4668]","522":"[15342.3633 3595.0676 -10521.5]","523":"[15329.0098 4112.9395 -10521.3838]","524":"[15295.7979 4628.4038 -10521.4902]","525":"[15243.0938 5140.8579 -10521.4473]","526":"[15169.0781 5648.9702 -10521.5127]","527":"[15069.0215 6159.2754 -10521.335]","528":"[14941.8857 6661.2686 -10521.542]","529":"[14786.0127 7153.3442 -10521.6689]","530":"[14599.5176 7632.7334 -10521.7207]","531":"[14380.1748 8095.9341 -10521.5928]","532":"[14122.4189 8547.1182 -10521.5381]","533":"[13831.2178 8971.4824 -10521.6143]","534":"[13506.2178 9367.8232 -10521.6348]","535":"[13142.9619 9738.3203 -10521.625]","536":"[12750.2051 10073.9121 -10521.6787]","537":"[12331.8418 10373.2705 -10521.6572]","538":"[11891.8486 10635.9023 -10521.4736]","539":"[11426.8926 10866.0313 -10521.5566]","540":"[10948.2188 11060.9609 -10521.4609]","541":"[10459.5684 11223.3721 -10521.5068]","542":"[9959.5869 11356.4326 -10521.4424]","543":"[9452.6455 11462.1602 -10521.5898]","544":"[8942.4854 11542.4316 -10521.4297]","545":"[8430.7344 11599.7139 -10521.4414]","546":"[7918.4961 11636.6982 -10521.3818]","547":"[7406.4741 11654.2656 -10521.377]","548":"[6886.769 11659.9512 -10521.4658]","549":"[6368.2832 11658.9238 -10521.4502]","550":"[5851.103 11658.9375 -10521.4355]","551":"[5335.8579 11660.1094 -10521.5273]","552":"[4822.2773 11658.1201 -10521.5361]","553":"[4309.9263 11657.8467 -10521.4463]","554":"[3790.4023 11659.5059 -10521.459]","555":"[3272.0796 11658.0635 -10521.4502]","556":"[2754.9087 11658.7549 -10521.4531]","557":"[2238.8821 11658.6338 -10521.4531]","558":"[1724.9816 11658.3818 -10521.4707]","559":"[1204.9137 11658.5762 -10521.5332]","560":"[685.9205 11658.6563 -10521.4248]","561":"[167.9899 11658.3418 -10521.4189]","562":"[-348.848 11659.1729 -10521.46]","563":"[-864.6102 11658.5039 -10521.4551]","564":"[-1379.2941 11658.9736 -10521.4541]","565":"[-1892.8937 11658.582 -10521.4531]","566":"[-2405.427 11658.7939 -10521.4668]","567":"[-2925.3713 11658.751 -10521.5146]","568":"[-3444.1812 11658.6934 -10521.4189]","569":"[-3961.8997 11658.9561 -10521.3711]","570":"[-4478.4941 11659.0713 -10521.5586]","571":"[-4993.9844 11658.915 -10521.4609]","572":"[-5508.3257 11658.7139 -10521.374]","573":"[-6021.2554 11659.7646 -10521.3408]","574":"[-6541.2163 11658.7676 -10521.5811]","575":"[-7059.6235 11658.4336 -10521.5068]","576":"[-7576.4023 11658.0732 -10521.4082]","577":"[-8090.7334 11640.1357 -10521.417]","578":"[-8600.6055 11588.8467 -10521.4307]","579":"[-9107.667 11492.3311 -10521.3477]","580":"[-9604.4561 11338.4824 -10521.5156]","581":"[-10071.9639 11120.7432 -10521.5879]","582":"[-10503.042 10830.2871 -10521.6719]","583":"[-10874.5322 10473.1689 -10521.4199]","584":"[-11181.2441 10053.4307 -10521.6289]","585":"[-11415.1133 9592.5342 -10521.4531]","586":"[-11582.3506 9105.1553 -10521.5566]","587":"[-11692.4502 8597.4023 -10521.3682]","588":"[-11753.2256 8083.0825 -10521.4629]","589":"[-11775.8262 7566.978 -10521.3291]","590":"[-11780.3066 7051.6978 -10521.498]","591":"[-11779.6475 6537.8086 -10521.4814]","592":"[-11768.8857 6017.7891 -10521.1445]","593":"[-11709.1465 5507.3281 -10521.1396]","594":"[-11569.9561 5010.8228 -10521.6025]","595":"[-11361.4824 4536.894 -10521.5596]","596":"[-11098.5088 4092.3928 -10521.5488]","597":"[-10793.3135 3678.7966 -10521.5371]","598":"[-10456.6885 3292.9275 -10521.0547]","599":"[-10096.0859 2918.2283 -10520.3057]","600":"[-9728.5938 2551.3325 -10520.3047]","601":"[-9363.6729 2186.0552 -10520.5098]","602":"[-8999.0234 1822.1549 -10520.4785]","603":"[-8636.1924 1457.9723 -10520.4619]","604":"[-8272.7646 1095.9276 -10520.4189]","605":"[-7905.3745 727.3884 -10520.5322]","606":"[-7538.1436 360.2902 -10520.4844]","607":"[-7171.4009 -5.6853 -10520.541]","608":"[-6806.1494 -371.4585 -10520.4404]","609":"[-6441.7295 -736.4481 -10520.5508]","610":"[-6077.5186 -1100.0186 -10520.4336]","611":"[-5714.0669 -1462.7487 -10520.5371]","612":"[-5352.0703 -1825.3297 -10520.4873]","613":"[-4985.0986 -2193.2017 -10520.9131]","614":"[-4616.3687 -2557.1428 -10520.9863]","615":"[-4223.1582 -2885.7583 -10521.1357]","616":"[-3786.728 -3157.9656 -10521.5879]","617":"[-3314.7383 -3363.5542 -10521.5811]","618":"[-2822.9019 -3506.2007 -10521.54]","619":"[-2312.4644 -3596.8142 -10521.3906]","620":"[-1797.9023 -3642.8792 -10521.3223]","621":"[-1283.0155 -3657.1011 -10521.3613]","622":"[-764.3973 -3658.8748 -10521.4629]","623":"[-245.7268 -3658.8677 -10521.458]","624":"[271.8557 -3658.7637 -10521.4551]","625":"[788.3609 -3658.2813 -10521.4531]","626":"[1303.7826 -3658.8354 -10521.4531]","627":"[1818.1407 -3658.5042 -10521.4756]","628":"[2331.4131 -3659.0222 -10521.3379]","629":"[2849.1011 -3685.7764 -10521.2852]","630":"[3361.5022 -3773.334 -10521.2373]","631":"[3852.3875 -3940.4255 -10521.3301]","632":"[4313.9155 -4172.7393 -10521.4844]","633":"[4744.4722 -4452.7959 -10521.5859]","634":"[5151.9307 -4774.7207 -10521.1963]","635":"[5533.3203 -5124.2734 -10521.417]","636":"[5901.5938 -5486.1934 -10521.4551]","637":"[6265.209 -5851.1807 -10521.4531]","638":"[6629.1274 -6214.2886 -10521.4521]","639":"[6991.8457 -6577.0273 -10521.4531]","640":"[7359.543 -6945.0713 -10521.4053]","641":"[7726.7061 -7312.043 -10521.4502]","642":"[8093.0576 -7678.1929 -10521.5371]","643":"[8450.5322 -8053.5547 -10521.2334]","644":"[8766.9307 -8460.2217 -10521.2148]","645":"[9016.835 -8913.2764 -10521.4268]","646":"[9199.6787 -9393.2002 -10521.6201]","647":"[9325.5 -9897.8369 -10521.5439]","648":"[9400.1641 -10411.0117 -10521.2363]","649":"[9432.6094 -10923.0811 -10521.4287]","650":"[9424.7422 -11443.3867 -10521.2939]","651":"[9375.8193 -11959.0537 -10521.5918]","652":"[9282.9658 -12464.8887 -10521.3809]","653":"[9133.2168 -12961.9639 -10521.499]","654":"[8921.2246 -13429.8594 -10521.5986]","655":"[8637.2637 -13862.4805 -10521.5693]","656":"[8284.6104 -14240.2588 -10521.499]","657":"[7872.7388 -14550.0225 -10521.417]","658":"[7418.6992 -14788.0381 -10521.543]","659":"[6929.625 -14961.835 -10521.4395]","660":"[6425.1572 -15075.7158 -10521.543]","661":"[5914.0371 -15140.6904 -10521.2813]","662":"[5401.3101 -15166.4072 -10521.4766]","663":"[4881.0454 -15171.9316 -10521.4277]","664":"[4362.0806 -15170.8555 -10521.4561]","665":"[3844.2698 -15171.1113 -10521.4531]","666":"[3327.5918 -15171.9326 -10521.4512]","667":"[2807.4324 -15170.9805 -10521.4775]","668":"[2295.4309 -15171.4453 -10521.4854]","669":"[1775.8087 -15171.6836 -10521.3965]","670":"[1257.2615 -15171.1533 -10521.4678]","671":"[739.7901 -15171.458 -10521.4746]","672":"[223.3935 -15171.1865 -10521.4639]","673":"[-291.9331 -15171.2207 -10521.4561]","674":"[-806.1935 -15172.0234 -10521.4531]","675":"[-1319.3759 -15170.8027 -10521.4912]","676":"[-1831.4642 -15171.752 -10521.5078]","677":"[-2350.9702 -15170.791 -10521.5068]","678":"[-2869.364 -15171.8213 -10521.5078]","679":"[-3386.6123 -15170.9385 -10521.4902]","680":"[-3902.7297 -15171.6416 -10521.4609]","681":"[-4417.7363 -15171.459 -10521.4561]","682":"[-4931.6372 -15171.1846 -10521.4531]","683":"[-5444.4355 -15171.8545 -10521.4785]","684":"[-5964.4985 -15170.9063 -10521.4707]","685":"[-6483.4058 -15171.6426 -10521.5107]","686":"[-7000.7856 -15169.5967 -10521.4277]","687":"[-7513.3833 -15158.1016 -10521.5156]","688":"[-8031.938 -15127.6709 -10521.4453]","689":"[-8547.5283 -15078.1289 -10521.542]","690":"[-9058.2344 -15006.1611 -10521.4678]","691":"[-9563.2188 -14911 -10521.5732]","692":"[-10060.9219 -14789.5928 -10521.3818]","693":"[-10556.9473 -14637.8145 -10521.5791]","694":"[-11039.7061 -14454.8467 -10521.5186]","695":"[-11506.9199 -14239.7813 -10521.6016]","696":"[-11954.7354 -13990.9131 -10521.6748]","697":"[-12385.9375 -13703.0176 -10521.6621]","698":"[-12790.2061 -13379.9199 -10521.6025]","699":"[-13166.043 -13020.7119 -10521.5977]","700":"[-13507.0049 -12631.0898 -10521.6729]","701":"[-13812.0273 -12215.3213 -10521.6221]","702":"[-14079.499 -11776.7969 -10521.5264]","703":"[-14314.5947 -11312.7979 -10521.584]","704":"[-14514.5449 -10834.8721 -10521.4961]","705":"[-14681.1582 -10346.4453 -10521.458]","706":"[-14817.2314 -9850.3174 -10521.4756]","707":"[-14925.2539 -9348.8408 -10521.4697]","708":"[-15009.4521 -8835.7998 -10521.5137]","709":"[-15070.0381 -8321.0713 -10521.4092]","710":"[-15109.2715 -7803.9131 -10521.293]","711":"[-15129.5654 -7284.5752 -10521.3281]","712":"[-15136.0273 -6766.7598 -10521.4629]","713":"[-15136.583 -6250.0527 -10521.4844]","714":"[-15136.3281 -5734.415 -10521.458]","715":"[-15136.2588 -5219.8647 -10521.4551]","716":"[-15136.3301 -4706.3828 -10521.4531]","717":"[-15136.0762 -4193.9722 -10521.457]","718":"[-15136.7646 -3674.1089 -10521.5322]","719":"[-15136.2246 -3155.3643 -10521.4717]","720":"[-15136.5518 -2637.7632 -10521.4639]","721":"[-15136.2256 -2121.314 -10521.4727]","722":"[-15136.4307 -1605.981 -10521.459]","723":"[-15136.2461 -1091.7545 -10521.4561]","724":"[-15136.5605 -578.6236 -10521.4541]","725":"[-15136.5811 -66.5868 -10521.4541]","726":"[-15136.6484 452.7386 -10521.4551]","727":"[-15136.1289 970.6085 -10520.3242]","728":"[-15136.3164 1482.3792 -10503.7002]","729":"[-15135.8428 1995.6334 -10465.7373]","730":"[-15135.5596 2508.3066 -10412.8975]","731":"[-15135.8877 3020.4053 -10354.2461]","732":"[-15136.209 3533.6606 -10293.209]","733":"[-15136.2109 4044.25 -10231.7266]","734":"[-15136.084 4555.6206 -10171.1387]","735":"[-15136.6689 5069.6865 -10112.6543]","736":"[-15136.5596 5583.0176 -10060.4541]","737":"[-15136.1709 6098.6016 -10024.7158]","738":"[-15129.792 6612.3696 -10010.4717]","739":"[-15110.999 7131.2065 -10009.3818]","740":"[-15072.4697 7646.354 -10009.543]","741":"[-15013.4814 8157.2554 -10009.5518]","742":"[-14932.0703 8663.6523 -10009.4482]","743":"[-14824.0732 9172.2598 -10009.376]","744":"[-14688.8857 9671.5313 -10009.624]","745":"[-14524.2148 10159.9707 -10009.4453]","746":"[-14328.0322 10634.2334 -10009.5498]","747":"[-14094.9863 11098.7207 -10009.6602]","748":"[-13829.5225 11538.4629 -10009.6055]","749":"[-13529.2773 11954.0439 -10009.6445]","750":"[-13189.167 12346.335 -10009.6377]","751":"[-12817.5771 12705.7578 -10009.5996]","752":"[-12417.6416 13029.9141 -10009.5107]","753":"[-11992.96 13317.1553 -10009.5615]","754":"[-11541.4141 13572.3457 -10009.5859]","755":"[-11073.418 13790.7529 -10009.5947]","756":"[-10593.252 13974.8779 -10009.6104]","757":"[-10103.8838 14127.3584 -10009.6777]","758":"[-9599.9346 14252.79 -10009.2881]","759":"[-9091.4111 14350.5986 -10009.3682]","760":"[-8583.9434 14423.7344 -10009.3203]","761":"[-8073.9697 14474.7949 -10009.4473]","762":"[-7555.5605 14505.8574 -10009.4209]","763":"[-7038.4102 14519.1084 -10009.4424]","764":"[-6522.5459 14522.7998 -10009.4521]","765":"[-6007.7813 14522.2783 -10009.5078]","766":"[-5494.0845 14522.3711 -10009.376]","767":"[-4981.4834 14521.7959 -10009.4541]","768":"[-4461.4395 14522.0605 -10009.4551]","769":"[-3942.4883 14522.0664 -10009.4521]","770":"[-3424.6436 14522.2891 -10009.3428]","771":"[-2907.8796 14522.2383 -10009.4844]","772":"[-2392.2378 14522.0088 -10009.417]","773":"[-1877.7117 14522.3672 -10009.4971]","774":"[-1364.301 14522.1494 -10009.4189]","775":"[-852.0064 14522.0313 -10009.4541]","776":"[-332.4465 14521.9336 -10009.4521]","777":"[185.9746 14521.9912 -10009.4531]","778":"[703.2646 14522.3887 -10009.4463]","779":"[1219.4073 14521.9121 -10009.4199]","780":"[1736.4364 14522.4775 -10009.5039]","781":"[2256.5811 14522.2256 -10009.499]","782":"[2775.6431 14522.959 -10009.4395]","783":"[3293.6133 14522.3184 -10009.458]","784":"[3810.51 14522.3857 -10009.4551]","785":"[4326.3423 14522.6338 -10009.4521]","786":"[4841.0874 14521.8525 -10009.4375]","787":"[5354.7593 14522.5049 -10009.4766]","788":"[5867.3252 14522.21 -10009.4951]","789":"[6387.3096 14520.9189 -10009.3896]","790":"[6905.8154 14508.9629 -10009.4023]","791":"[7422.1646 14480.1895 -10009.501]","792":"[7935.0317 14431.958 -10009.499]","793":"[8443.291 14362.2949 -10009.6309]","794":"[8954.4668 14267.6631 -10009.54]","795":"[9454.5322 14147.541 -10009.5264]","796":"[9945.9355 13999.4023 -10009.54]","797":"[10433.041 13817.5938 -10009.5791]","798":"[10904.1563 13602.8311 -10009.5488]","799":"[11355.7197 13353.9668 -10009.6689]","800":"[11784.0127 13071.2891 -10009.6602]","801":"[12191.502 12748.8945 -10009.6074]","802":"[12567.3838 12393.2949 -10009.6309]","803":"[12908.8057 12007.5146 -10009.502]","804":"[13214.1377 11595.4727 -10009.7158]","805":"[13487.3018 11153.9248 -10009.6494]","806":"[13722.8721 10695.3008 -10009.5762]","807":"[13923.2119 10223.2871 -10009.5967]","808":"[14093.042 9732.1406 -10009.5537]","809":"[14232.0088 9233.3135 -10009.4697]","810":"[14342.8125 8729.2891 -10009.4121]","811":"[14427.4111 8221.7041 -10009.4023]","812":"[14489.1143 7712.1118 -10009.4658]","813":"[14530.0225 7193.5562 -10009.4209]","814":"[14551.6191 6676.0562 -10009.5264]","815":"[14559.1455 6159.6719 -10009.4932]","816":"[14559.0391 5644.3657 -10009.4717]","817":"[14559.0146 5130.1826 -10009.459]","818":"[14559.0674 4617.0957 -10009.4551]","819":"[14559.0811 4096.7222 -10009.4531]","820":"[14559.4268 3577.4883 -10009.4268]","821":"[14559.3984 3059.3857 -10009.415]","822":"[14559.1416 2542.4451 -10009.376]","823":"[14559.1396 2024.3628 -10009.4707]","824":"[14559.4756 1512.1377 -10009.4512]","825":"[14559.3174 992.2941 -10009.457]","826":"[14559.2666 473.5057 -10009.4541]","827":"[14559.2861 -44.2241 -10009.4521]","828":"[14559.5449 -560.9041 -10009.4727]","829":"[14559.7939 -1076.5372 -10009.4834]","830":"[14559.2178 -1591.0861 -10009.3838]","831":"[14559.4502 -2104.5659 -10009.4629]","832":"[14559.5801 -2616.9744 -10009.4717]","833":"[14559.1982 -3136.8232 -10009.458]","834":"[14559.3486 -3655.5508 -10009.4551]","835":"[14559.334 -4173.1689 -10009.4541]","836":"[14559.1152 -4689.6748 -10009.4355]","837":"[14559.4805 -5205.0825 -10009.4795]","838":"[14559.3301 -5719.3706 -10009.4258]","839":"[14553.0479 -6232.3916 -10009.4785]","840":"[14534.5088 -6751.7295 -10009.5674]","841":"[14496.0234 -7267.8745 -10009.5107]","842":"[14436.6328 -7781.9565 -10009.5176]","843":"[14354.1152 -8295.249 -10009.3555]","844":"[14246.377 -8801.1592 -10009.5596]","845":"[14112.1621 -9298.1748 -10009.5498]","846":"[13948.415 -9784.4004 -10009.6348]","847":"[13749.3965 -10264.6201 -10009.5947]","848":"[13517.0742 -10727.3047 -10009.7305]","849":"[13250.4453 -11168.4863 -10009.5859]","850":"[12949.2666 -11584.1318 -10009.6582]","851":"[12609.001 -11976.7246 -10009.5996]","852":"[12234.3291 -12338.2656 -10009.5176]","853":"[11835.7217 -12660.2539 -10009.6289]","854":"[11405.7607 -12950.9883 -10009.584]","855":"[10955.0449 -13204.416 -10009.5664]","856":"[10487.7158 -13421.2021 -10009.5576]","857":"[10008.2354 -13604.418 -10009.4814]","858":"[9512.2627 -13758.6416 -10009.4951]","859":"[9009.7461 -13882.9219 -10009.4512]","860":"[8502.751 -13979.9229 -10009.3066]","861":"[7992.9937 -14051.8525 -10009.3271]","862":"[7482.3994 -14102.6494 -10009.3154]","863":"[6963.1372 -14133.9053 -10009.5332]","864":"[6444.3555 -14146.625 -10009.4707]","865":"[5926.8608 -14149.1768 -10009.376]","866":"[5410.6499 -14148.9561 -10009.458]","867":"[4897.3267 -14149.2246 -10009.4551]","868":"[4377.0698 -14149.4893 -10009.4521]","869":"[3857.877 -14149.4688 -10009.4131]","870":"[3339.7473 -14149.1455 -10009.4844]","871":"[2822.7173 -14149.4912 -10009.5293]","872":"[2306.7639 -14149.2461 -10009.4951]","873":"[1792.0841 -14149.4678 -10009.4971]","874":"[1278.8464 -14149.1113 -10009.4561]","875":"[758.5356 -14149.1641 -10009.5029]","876":"[239.3907 -14149.3018 -10009.4834]","877":"[-278.6018 -14149.0088 -10009.3682]","878":"[-795.3325 -14149.5566 -10009.3721]","879":"[-1310.506 -14149.5879 -10009.4482]","880":"[-1824.5256 -14149.3545 -10009.4092]","881":"[-2337.3796 -14149.5137 -10009.334]","882":"[-2857.0452 -14145.5459 -10009.1553]","883":"[-3369.0566 -14121.3809 -10009.21]","884":"[-3885.0286 -14057.7402 -10009.5068]","885":"[-4389.6201 -13948.4346 -10009.3887]","886":"[-4875.6978 -13783.5557 -10009.5449]","887":"[-5338.8589 -13551.4668 -10009.458]","888":"[-5756.8359 -13252.8135 -10009.3096]","889":"[-6136.3262 -12908.9883 -10009.2656]","890":"[-6501.7832 -12541.498 -10009.3945]","891":"[-6868.397 -12177.1689 -10009.4707]","892":"[-7236.7852 -11809.3125 -10009.4482]","893":"[-7604.4761 -11440.7471 -10009.5039]","894":"[-7971.5039 -11073.0752 -10009.4395]","895":"[-8338.4502 -10706.8955 -10009.3672]","896":"[-8704.376 -10341.2988 -10009.4727]","897":"[-9069.1357 -9976.127 -10009.5254]","898":"[-9433.1035 -9611.7158 -10009.4668]","899":"[-9796.8633 -9248.6514 -10009.3574]","900":"[-10159.0811 -8885.5801 -10009.3359]","901":"[-10527.3506 -8518.0537 -10009.5459]","902":"[-10894.2041 -8150.7158 -10009.5156]","903":"[-11260.1113 -7784.7803 -10009.1895]","904":"[-11623.7188 -7419.9644 -10009.1367]","905":"[-11972.6445 -7045.1313 -10009.5137]","906":"[-12297.0205 -6648.4106 -10009.4199]","907":"[-12586.1338 -6225.5474 -10009.6416]","908":"[-12830.0195 -5769.2192 -10009.7764]","909":"[-13011.2246 -5288.9595 -10009.4326]","910":"[-13118.1143 -4782.5469 -10009.4258]","911":"[-13154.6826 -4267.9448 -10009.2373]","912":"[-13157.5332 -3752.9011 -10009.4756]","913":"[-13158.5283 -3239.0239 -10009.3076]","914":"[-13157.2891 -2726.2727 -10009.4639]","915":"[-13158.2744 -2206.3081 -10009.4697]","916":"[-13157.8125 -1687.4976 -10009.459]","917":"[-13158.0518 -1169.834 -10009.4551]","918":"[-13158.3564 -653.3178 -10009.3701]","919":"[-13148.5889 -136.3253 -10009.4023]","920":"[-13113.8047 380.1443 -10009.3916]","921":"[-13034.8721 888.5176 -10009.3584]","922":"[-12903.1963 1389.7212 -10009.4336]","923":"[-12711.8066 1866.8231 -10009.376]","924":"[-12450.4248 2314.1726 -10009.4785]","925":"[-12118.5693 2710.7363 -10009.3896]","926":"[-11730.5723 3036.8484 -10009.5566]","927":"[-11289.6895 3297.6455 -10009.4873]","928":"[-10809.3301 3492.7295 -10009.4092]","929":"[-10309.8301 3625.0835 -10009.4404]","930":"[-9800.9805 3705.29 -10009.2744]","931":"[-9289.1514 3741.8901 -10008.1494]","932":"[-8771.2686 3752.6987 -9990.3369]","933":"[-8258.4961 3751.4688 -9951.9688]","934":"[-7744.6553 3751.6489 -9898.5527]","935":"[-7233.062 3751.9626 -9839.9336]","936":"[-6720.8774 3752.7017 -9778.8184]","937":"[-6209.375 3751.9846 -9717.335]","938":"[-5698.3457 3752.127 -9656.6572]","939":"[-5184.4956 3752.6174 -9598.4287]","940":"[-4670.0283 3752.5195 -9546.6807]","941":"[-4156.3232 3752.2334 -9511.582]","942":"[-3638.3379 3745.1145 -9497.9932]","943":"[-3120.7 3725.678 -9497.457]","944":"[-2606.5117 3686.5984 -9497.4795]","945":"[-2090.4019 3625.7097 -9497.5273]","946":"[-1579.9265 3542.2866 -9497.5049]","947":"[-1076.1515 3434.2075 -9497.5869]","948":"[-580.7645 3298.2214 -9497.5801]","949":"[-96.0081 3133.208 -9497.3691]","950":"[382.5576 2933.887 -9497.459]","951":"[843.6133 2700.9502 -9497.5518]","952":"[1282.8044 2432.9888 -9497.6865]","953":"[1696.7711 2131.231 -9497.5557]","954":"[2087.7537 1790.6322 -9497.6289]","955":"[2444.5869 1419.6426 -9497.5273]","956":"[2770.2224 1014.0372 -9497.6006]","957":"[3058.8774 583.7493 -9497.458]","958":"[3310.9106 133.1951 -9497.5596]","959":"[3526.4312 -333.5839 -9497.5859]","960":"[3710.9299 -820.2642 -9497.4873]","961":"[3863.3833 -1315.9879 -9497.4629]","962":"[3986.4302 -1818.1268 -9497.3223]","963":"[4082.0205 -2324.6765 -9497.4707]","964":"[4153.1104 -2833.8198 -9497.3232]","965":"[4203.1543 -3343.7791 -9497.541]","966":"[4233.6704 -3862.2966 -9497.1992]","967":"[4244.4546 -4380.3359 -9497.4268]","968":"[4237.6367 -4893.3027 -9497.5049]","969":"[4212.4502 -5405.2329 -9497.3613]","970":"[4167.5879 -5922.8276 -9497.3262]","971":"[4100.8057 -6436.1851 -9497.4238]","972":"[4010.9551 -6943.5884 -9497.4238]","973":"[3895.9502 -7442.7231 -9497.3877]","974":"[3750.6738 -7940.9722 -9497.5371]","975":"[3574.7129 -8427.1484 -9497.4688]","976":"[3366.9666 -8898.4531 -9497.4727]","977":"[3125.9082 -9351.1191 -9497.5693]","978":"[2845.5161 -9787.8613 -9497.541]","979":"[2533.9077 -10194.251 -9497.5654]","980":"[2182.1985 -10578.0244 -9497.6094]","981":"[1798.9386 -10927.0732 -9497.5986]","982":"[1388.2037 -11239.9404 -9497.6895]","983":"[954.5222 -11516.585 -9497.6875]","984":"[501.7322 -11756.8711 -9497.4668]","985":"[26.2413 -11965.0039 -9497.6865]","986":"[-460.2421 -12139.4014 -9497.5039]","987":"[-955.1085 -12282.5244 -9497.5273]","988":"[-1455.8251 -12397.1855 -9497.4795]","989":"[-1960.2365 -12485.584 -9497.502]","990":"[-2474.822 -12551.7588 -9497.4346]","991":"[-2990.3979 -12596.1152 -9497.4287]","992":"[-3510.1792 -12621.248 -9497.4668]","993":"[-4022.5647 -12627.5381 -9497.4092]","994":"[-4542.209 -12615.71 -9497.4316]","995":"[-5059.5938 -12584.4932 -9497.5479]","996":"[-5574.1196 -12533.9785 -9497.3828]","997":"[-6083.9253 -12460.9434 -9497.3779]","998":"[-6587.3911 -12364.4922 -9497.2988]","999":"[-7091.2075 -12239.7666 -9497.5234]","1000":"[-7584.7642 -12086.8223 -9497.4609]","1001":"[-8065.1719 -11902.8623 -9497.5127]","1002":"[-8529.9766 -11686.9424 -9497.5449]","1003":"[-8982.1641 -11432.6094 -9497.6377]","1004":"[-9410.8027 -11142.8779 -9497.6533]","1005":"[-9815.2197 -10815.4014 -9497.6211]","1006":"[-10188.0938 -10455.5049 -9497.5908]","1007":"[-10525.9043 -10065.3584 -9497.7041]","1008":"[-10827.3281 -9649.2676 -9497.5039]","1009":"[-11096.2744 -9203.9473 -9497.5391]","1010":"[-11328.1455 -8740.374 -9497.6758]","1011":"[-11525.5166 -8262.9766 -9497.4609]","1012":"[-11689.291 -7774.8169 -9497.5762]","1013":"[-11823.4121 -7279.5137 -9497.4512]","1014":"[-11931.0898 -6770.7842 -9497.4775]","1015":"[-12013.4512 -6258.7954 -9497.4111]","1016":"[-12072.1992 -5744.9956 -9497.3926]","1017":"[-12110.5527 -5225.9595 -9497.415]","1018":"[-12129.4814 -4706.1411 -9497.1367]","1019":"[-12135.1621 -4186.9258 -9482.0732]","1020":"[-12134.6348 -3672.4766 -9446.7803]","1021":"[-12134.623 -3159.2085 -9394.4287]","1022":"[-12135.2041 -2647.4822 -9336.2705]","1023":"[-12135.2959 -2135.0886 -9275.3096]","1024":"[-12135.3506 -1623.4022 -9213.1748]","1025":"[-12135.5879 -1111.9685 -9150.5762]","1026":"[-12135.6514 -599.2625 -9087.6328]","1027":"[-12135.6689 -88.2999 -9024.8945]","1028":"[-12135.5801 423.2002 -8962.0898]","1029":"[-12135.0654 935.9566 -8899.1338]","1030":"[-12135.3242 1446.9442 -8836.3311]","1031":"[-12134.9219 1958.481 -8773.6162]","1032":"[-12135.4395 2470.6338 -8711.459]","1033":"[-12135.6768 2982.3157 -8650.5107]","1034":"[-12135.4492 3495.6199 -8592.2676]","1035":"[-12135.2988 4008.2268 -8539.9023]","1036":"[-12135.251 4524.77 -8503.0342]","1037":"[-12123.1992 5043.3364 -8488.2031]","1038":"[-12083.6445 5559.5747 -8486.9883]","1039":"[-11999.5527 6066.8105 -8486.7012]","1040":"[-11861.4492 6566.4644 -8486.7314]","1041":"[-11660.9668 7044.2876 -8486.6934]","1042":"[-11392.4189 7482.6855 -8486.832]","1043":"[-11051.4668 7872.9736 -8486.8955]","1044":"[-10651.1777 8195.6074 -8486.8896]","1045":"[-10198.6455 8450.1924 -8486.7891]","1046":"[-9715.627 8635.5039 -8486.6787]","1047":"[-9218.625 8758.7773 -8486.7549]","1048":"[-8704.8711 8832.8701 -8486.7002]","1049":"[-8188.583 8864.5176 -8486.2969]","1050":"[-7673.3057 8872.9258 -8486.291]","1051":"[-7160.9326 8871.0488 -8486.4512]","1052":"[-6641.229 8871.6953 -8486.3477]","1053":"[-6122.7256 8872.707 -8486.4785]","1054":"[-5605.4355 8872.0869 -8486.4756]","1055":"[-5089.3208 8871.5137 -8486.4609]","1056":"[-4574.3628 8871.8945 -8486.46]","1057":"[-4060.5479 8871.792 -8486.4941]","1058":"[-3547.8694 8871.7861 -8486.4121]","1059":"[-3027.9783 8872.0723 -8486.4424]","1060":"[-2509.2668 8871.6963 -8486.5322]","1061":"[-1991.7151 8872.0596 -8486.4795]","1062":"[-1475.3446 8871.9746 -8486.5127]","1063":"[-957.7928 8872.2813 -8486.4336]","1064":"[-437.4679 8871.6787 -8486.5322]","1065":"[81.7649 8871.6572 -8486.501]","1066":"[599.8956 8872.1641 -8486.4355]","1067":"[1116.9335 8871.7158 -8486.4443]","1068":"[1632.8992 8871.6543 -8486.4756]","1069":"[2147.811 8871.7402 -8486.3604]","1070":"[2661.6399 8872.2363 -8486.46]","1071":"[3174.4126 8871.5107 -8486.4541]","1072":"[3694.6252 8871.627 -8486.4541]","1073":"[4213.7095 8870.9648 -8486.3662]","1074":"[4731.3848 8860.5762 -8486.4424]","1075":"[5247.0127 8834.3105 -8486.4893]","1076":"[5759.5249 8788.2793 -8486.3867]","1077":"[6268 8721.4736 -8486.3936]","1078":"[6779.3994 8629.458 -8486.4658]","1079":"[7283.5835 8511.666 -8486.584]","1080":"[7781.4116 8364.2422 -8486.3818]","1081":"[8269.2178 8185.5571 -8486.6201]","1082":"[8741.5527 7974.2539 -8486.6455]","1083":"[9195.0752 7729.166 -8486.6309]","1084":"[9625.6641 7449.478 -8486.5762]","1085":"[10035.916 7130.1694 -8486.5137]","1086":"[10414.8115 6777.5537 -8486.6455]","1087":"[10759.4668 6394.5498 -8486.543]","1088":"[11068.3291 5985.0396 -8486.6953]","1089":"[11344.4785 5545.5815 -8486.6777]","1090":"[11582.8584 5089.8164 -8486.5771]","1091":"[11786.4131 4619.3267 -8486.459]","1092":"[11959.5 4129.2031 -8486.4863]","1093":"[12101.0889 3630.8848 -8486.4629]","1094":"[12214.3604 3126.917 -8486.4619]","1095":"[12301.6221 2619.5767 -8486.3232]","1096":"[12365.1641 2109.9993 -8486.3506]","1097":"[12407.4893 1599.4766 -8486.5313]","1098":"[12431.1777 1081.2227 -8486.4482]","1099":"[12439.1494 566.1353 -8475.4961]","1100":"[12439.5762 49.2818 -8444.7363]","1101":"[12440.2686 -463.5329 -8394.6152]","1102":"[12440.0381 -975.0377 -8337.2266]","1103":"[12439.8975 -1488.2159 -8276.6621]","1104":"[12440.2451 -1998.7141 -8214.7725]","1105":"[12439.9355 -2510.5012 -8152.1396]","1106":"[12440.4951 -3022.5979 -8089.249]","1107":"[12440.6221 -3534.0842 -8026.4482]","1108":"[12439.5742 -4045.707 -7963.6289]","1109":"[12440.5449 -4558.9424 -7900.6123]","1110":"[12440.4746 -5070.4116 -7837.8569]","1111":"[12440.5771 -5582.0195 -7775.0205]","1112":"[12439.9785 -6094.5034 -7712.6763]","1113":"[12440.6045 -6605.1587 -7651.5503]","1114":"[12440.5684 -7117.6431 -7592.4746]","1115":"[12440.2744 -7631.2612 -7538.2397]","1116":"[12439.8975 -8146.5771 -7497.0669]","1117":"[12432.2412 -8663.8193 -7478.0786]","1118":"[12401.5117 -9177.4502 -7474.9985]","1119":"[12326.2871 -9688.4932 -7475.2544]","1120":"[12201.2471 -10185.5547 -7475.2441]","1121":"[12016.3125 -10666.9111 -7475.5923]","1122":"[11761.2295 -11118.8389 -7475.4697]","1123":"[11437.9854 -11519.0586 -7475.4565]","1124":"[11049.0342 -11857.5049 -7475.478]","1125":"[10611.8564 -12124.8096 -7475.4175]","1126":"[10133.792 -12325.5186 -7475.5103]","1127":"[9635.7734 -12462.8389 -7475.1914]","1128":"[9128.208 -12547.0088 -7475.2466]","1129":"[8616.9492 -12587.3066 -7475.1978]","1130":"[8097.2183 -12599.4072 -7475.4253]","1131":"[7578.4512 -12599.0479 -7475.4478]","1132":"[7060.8389 -12599.0654 -7475.4526]","1133":"[6544.3574 -12599.5908 -7475.4512]","1134":"[6025.1484 -12599.8506 -7475.4507]","1135":"[5504.6724 -12599.1738 -7475.4756]","1136":"[4985.2661 -12599.3408 -7475.439]","1137":"[4466.9497 -12599.334 -7475.4487]","1138":"[3949.7292 -12599.6084 -7475.4155]","1139":"[3433.615 -12599.0449 -7475.5]","1140":"[2918.592 -12599.1201 -7475.4209]","1141":"[2404.8145 -12599.791 -7475.4712]","1142":"[1892.5146 -12599.4531 -7475.4141]","1143":"[1373.275 -12599.4785 -7475.4541]","1144":"[855.1445 -12599.4639 -7475.4521]","1145":"[338.1243 -12599.6113 -7475.4521]","1146":"[-177.7817 -12599.5254 -7475.4517]","1147":"[-692.5881 -12599.6406 -7475.5244]","1148":"[-1206.2775 -12599.0791 -7475.5]","1149":"[-1718.8525 -12599.9385 -7475.4365]","1150":"[-2238.6372 -12599.3916 -7475.3555]","1151":"[-2756.8574 -12599.5596 -7475.4561]","1152":"[-3273.4893 -12599.3564 -7475.4771]","1153":"[-3785.5156 -12599.3086 -7475.333]","1154":"[-4305.5469 -12599.0801 -7475.4097]","1155":"[-4824.5347 -12599.8604 -7475.3853]","1156":"[-5342.4102 -12599.2021 -7475.3657]","1157":"[-5858.8618 -12598.9014 -7475.4448]","1158":"[-6374.2271 -12598.1777 -7475.5352]","1159":"[-6887.9829 -12586.0313 -7475.4111]","1160":"[-7406.0405 -12543.5264 -7475.3613]","1161":"[-7917.6323 -12463.5205 -7475.561]","1162":"[-8424.6963 -12365.5596 -7475.3369]","1163":"[-8931.6211 -12284.0293 -7475.6206]","1164":"[-9448.1533 -12233.0039 -7475.5239]","1165":"[-9965.458 -12216.1104 -7475.3643]","1166":"[-10481.7803 -12215.084 -7475.501]","1167":"[-10997.0938 -12215.1367 -7475.457]","1168":"[-11517.4121 -12214.5781 -7475.543]","1169":"[-12036.6123 -12214.334 -7475.2964]","1170":"[-12554.7129 -12215.4385 -7475.4966]","1171":"[-13072.0488 -12208.2891 -7477.6685]","1172":"[-13586.8535 -12169.7979 -7481.1782]","1173":"[-14090.6455 -12068.5283 -7485.9712]","1174":"[-14574.1719 -11881.1494 -7489.3345]","1175":"[-14855.4658 -11710.4297 -7490.6753]","1176":"[-15138.3838 -11462.0869 -7491.0649]","1177":"[-15345.4688 -11202.8398 -7490.4692]","1178":"[-15543.1533 -10840.1328 -7488.3892]","1179":"[-15684.1475 -10419.5537 -7485.314]","1180":"[-15774.9023 -9913.166 -7480.5132]","1181":"[-15807.5205 -9401.3184 -7476.8501]","1182":"[-15813.0781 -8884.2607 -7475.0591]","1183":"[-15811.9053 -8369.7734 -7475.0674]","1184":"[-15812.6445 -7856.3789 -7475.064]","1185":"[-15812.5508 -7344.0625 -7475.0566]","1186":"[-15812.7158 -6824.2881 -7475.0947]","1187":"[-15811.8555 -6305.5967 -7474.9629]","1188":"[-15812.1504 -5788.0645 -7475.0977]","1189":"[-15807.2188 -5271.3086 -7477.1274]","1190":"[-15770.5732 -4756.7607 -7480.9077]","1191":"[-15671.9658 -4251.1489 -7485.6509]","1192":"[-15492.5918 -3770.9138 -7489.1294]","1193":"[-15318.3984 -3475.9656 -7490.4956]","1194":"[-15081.2607 -3199.2346 -7491.0063]","1195":"[-14816.7813 -2982.1997 -7490.5205]","1196":"[-14475.2412 -2790.126 -7488.8154]","1197":"[-14036.8105 -2636.3994 -7485.4351]","1198":"[-13525.2705 -2542.3088 -7480.6133]","1199":"[-13009.1602 -2509.394 -7476.9575]","1200":"[-12497.0342 -2502.8403 -7475.0767]","1201":"[-11979.5654 -2504.1177 -7475.0703]","1202":"[-11463.2695 -2503.7754 -7475.1514]","1203":"[-10948.1348 -2502.9795 -7475.0278]","1204":"[-10434.1172 -2504.1245 -7475.0679]","1205":"[-9921.2236 -2503.4956 -7475.1265]","1206":"[-9401.0488 -2503.4114 -7475.1152]","1207":"[-8882.041 -2503.6067 -7474.978]","1208":"[-8364.1953 -2503.4331 -7475.063]","1209":"[-7847.5249 -2504.1919 -7475.0508]","1210":"[-7332.7236 -2503.1479 -7475.0317]","1211":"[-6812.1123 -2504.0801 -7475.0806]","1212":"[-6292.6348 -2502.8916 -7475.0811]","1213":"[-5774.2729 -2503.8955 -7475.0479]","1214":"[-5256.9902 -2503.5625 -7475.0298]","1215":"[-4740.7861 -2503.9854 -7475.0137]","1216":"[-4225.729 -2502.7783 -7475.0747]","1217":"[-3711.8232 -2503.9419 -7475.0474]","1218":"[-3199.0142 -2503.4333 -7475.1104]","1219":"[-2678.7419 -2504.0217 -7475.0884]","1220":"[-2159.5818 -2503.1196 -7475.0732]","1221":"[-1641.566 -2503.8425 -7475.0747]","1222":"[-1124.7019 -2503.4026 -7475.0454]","1223":"[-608.9527 -2503.8132 -7475.0137]","1224":"[-94.3149 -2503.999 -7475.0728]","1225":"[419.2049 -2503.2422 -7475.1021]","1226":"[931.5927 -2504.0764 -7475.0054]","1227":"[1451.2319 -2503.2964 -7475.0713]","1228":"[1969.7103 -2503.7266 -7475.0718]","1229":"[2487.0193 -2503.7583 -7475.0728]","1230":"[3003.135 -2503.3887 -7475.0342]","1231":"[3522.0168 -2503.7036 -7475.0801]","1232":"[4042.1028 -2503.5732 -7475.0796]","1233":"[4559.7578 -2495.0078 -7475.0361]","1234":"[5073.5205 -2463.199 -7475.1885]","1235":"[5580.189 -2388.9014 -7475.2417]","1236":"[6082.7065 -2263.5154 -7475.3022]","1237":"[6563.5537 -2080.5879 -7475.125]","1238":"[7017.5039 -1829.17 -7474.7285]","1239":"[7424.0381 -1512.296 -7474.9751]","1240":"[7802.3862 -1155.4811 -7475.1108]","1241":"[8168.8262 -786.8887 -7475.0991]","1242":"[8535.0654 -419.7356 -7475.0952]","1243":"[8901.876 -54.7823 -7475.0776]","1244":"[9266.5889 310.6848 -7475.1128]","1245":"[9630.8213 675.0805 -7474.9712]","1246":"[9994.5889 1038.4017 -7475.0703]","1247":"[10357.3027 1401.2654 -7475.1069]","1248":"[10724.875 1769.8229 -7475.1553]","1249":"[11092.6953 2136.5269 -7475.0859]","1250":"[11458.7764 2503.3711 -7475.064]","1251":"[11824.9189 2868.561 -7475.1143]","1252":"[12189.5234 3233.6975 -7475.125]","1253":"[12553.8242 3597.5403 -7474.9517]","1254":"[12916.7861 3961.1238 -7475.0645]","1255":"[13279.0293 4323.834 -7475.1187]","1256":"[13647.7031 4690.3457 -7475.1211]","1257":"[14010.2129 5059.4282 -7474.6572]","1258":"[14356.9531 5439.2749 -7474.2188]","1259":"[14675.1514 5843.1025 -7474.4409]","1260":"[14953.4775 6276.0581 -7474.4263]","1261":"[15178.1318 6744.478 -7474.4819]","1262":"[15327.6602 7237.7993 -7473.5093]","1263":"[15396.9775 7750.8496 -7468.584]","1264":"[15381.6758 8270.585 -7456.1172]","1265":"[15278.3848 8772.126 -7435.7705]","1266":"[15095.9922 9252.2041 -7406.9556]","1267":"[14852.9756 9708.2266 -7368.6841]","1268":"[14566.8584 10139.4365 -7320.0737]","1269":"[14245.7842 10541.6221 -7263.0894]","1270":"[13899.1533 10915.1895 -7202.7324]","1271":"[13538.8066 11279.4316 -7141.3804]","1272":"[13178.4648 11641.6201 -7082.3428]","1273":"[12814.1582 12004.8604 -7027.623]","1274":"[12449.582 12368.3965 -6985.5952]","1275":"[12078.46 12726.1143 -6965.6323]","1276":"[11683.2705 13063.1025 -6962.0635]","1277":"[11253.707 13346.333 -6962.3726]","1278":"[10782.3809 13560.4727 -6962.5298]","1279":"[10374.2725 13665.3457 -6962.4971]","1280":"[9974.3154 13695.6621 -6962.3901]","1281":"[9610.6396 13659.4219 -6962.4219]","1282":"[9149.166 13529.3105 -6962.5098]","1283":"[8725.5195 13324.7998 -6962.3545]","1284":"[8295.7393 13033.4932 -6962.2988]","1285":"[7903.5322 12695.3916 -6962.4912]","1286":"[7533.4258 12337.7988 -6957.7163]","1287":"[7169.6577 11972.6533 -6934.3564]","1288":"[6806.8657 11609.7305 -6889.3706]","1289":"[6444.2139 11247.3818 -6833.7998]","1290":"[6082.6147 10885.9824 -6774.1826]","1291":"[5721.0747 10523.9033 -6712.6001]","1292":"[5359.5591 10161.7051 -6649.7515]","1293":"[4998.0562 9800.7979 -6587.0444]","1294":"[4636.4453 9438.584 -6524.1855]","1295":"[4274.5244 9077.3926 -6461.4004]","1296":"[3913.2861 8716.2139 -6398.6797]","1297":"[3551.6716 8353.9844 -6335.8193]","1298":"[3189.1072 7991.7944 -6272.9482]","1299":"[2827.8174 7630.7861 -6210.2261]","1300":"[2465.9988 7267.9873 -6147.7793]","1301":"[2103.636 6906.5981 -6086.7607]","1302":"[1742.71 6545.5005 -6027.8755]","1303":"[1379.9342 6181.8491 -5973.9829]","1304":"[1016.3318 5818.6958 -5933.4092]","1305":"[632.4696 5467.6372 -5914.812]","1306":"[213.0132 5160.1064 -5912.52]","1307":"[-245.1044 4926.8213 -5912.4746]","1308":"[-735.4808 4757.6641 -5912.5151]","1309":"[-1242.9271 4645.0601 -5912.3057]","1310":"[-1758.6414 4580.6885 -5912.5146]","1311":"[-2275.4065 4561.9521 -5912.1421]","1312":"[-2787.8271 4592.5854 -5912.3975]","1313":"[-3295.9705 4685.8203 -5912.7393]","1314":"[-3783.4761 4847.3901 -5913.0034]","1315":"[-4222.3301 5084.2275 -5913.3804]","1316":"[-4502.0313 5306.1992 -5913.3218]","1317":"[-4790.8447 5632.7769 -5913.293]","1318":"[-4996.4272 5968.5845 -5913.0894]","1319":"[-5187.1626 6445.3213 -5912.7573]","1320":"[-5302.9858 6949.3901 -5912.4858]","1321":"[-5356.8818 7458.7178 -5912.3984]","1322":"[-5372.6099 7976.2944 -5912.4907]","1323":"[-5371.3794 8496.4346 -5912.3945]","1324":"[-5372.6499 9008.6924 -5912.5098]","1325":"[-5372.7178 9528.4961 -5912.5151]","1326":"[-5378.7891 10046.9453 -5912.3599]","1327":"[-5409.8965 10562.4502 -5912.4243]","1328":"[-5483.7349 11071.0625 -5911.9414]","1329":"[-5608.3486 11574.0273 -5912.2666]","1330":"[-5791.6987 12054.4346 -5912.5537]","1331":"[-6045.1812 12507.0254 -5912.5996]","1332":"[-6367.0137 12908.0361 -5912.4795]","1333":"[-6756.4766 13249.6084 -5912.5923]","1334":"[-7194.4858 13518.1455 -5912.6235]","1335":"[-7670.7676 13719.2754 -5912.4731]","1336":"[-8167.1743 13858.042 -5912.2144]","1337":"[-8673.9258 13942.8145 -5912.3574]","1338":"[-9184.5381 13983.4189 -5912.2949]","1339":"[-9703.7813 13989.3584 -5912.4736]","1340":"[-10220.1416 13959.8936 -5912.3828]","1341":"[-10729.5713 13889.7031 -5912.3555]","1342":"[-11234.502 13767.4873 -5912.4312]","1343":"[-11719.3086 13585.5293 -5912.4932]","1344":"[-12173.5332 13335.0439 -5912.5474]","1345":"[-12577.0801 13015.9541 -5912.5059]","1346":"[-12921.7109 12628.5264 -5912.606]","1347":"[-13194.1758 12191.3613 -5912.4434]","1348":"[-13396.4229 11720.4961 -5912.3301]","1349":"[-13538.0859 11221.6123 -5912.3086]","1350":"[-13625.0645 10715.7783 -5912.2734]","1351":"[-13667.7012 10203.8496 -5912.0449]","1352":"[-13680.5654 9690.2178 -5897.3423]","1353":"[-13680.5703 9173.5342 -5862.1558]","1354":"[-13681.1055 8660.6406 -5810.0557]","1355":"[-13680.8477 8148.4497 -5751.8901]","1356":"[-13681.0928 7636.2495 -5691.001]","1357":"[-13681.1963 7125.1997 -5628.9517]","1358":"[-13680.3125 6613.6909 -5566.4023]","1359":"[-13680.7539 6101.7573 -5503.584]","1360":"[-13680.3564 5589.73 -5440.7637]","1361":"[-13680.8594 5078.3169 -5377.958]","1362":"[-13680.7012 4566.3936 -5315.106]","1363":"[-13680.6875 4054.3464 -5252.2324]","1364":"[-13680.9209 3542.9294 -5189.4067]","1365":"[-13680.3271 3032.0874 -5126.7524]","1366":"[-13681 2520.0098 -5063.9355]","1367":"[-13680.9941 2008.1211 -5001.6831]","1368":"[-13680.1943 1496.6819 -4940.96]","1369":"[-13680.5078 983.0609 -4882.354]","1370":"[-13680.6992 470.1623 -4829.8784]","1371":"[-13680.7461 -44.2031 -4793.0054]","1372":"[-13680.7686 -559.2672 -4777.8662]","1373":"[-13680.5693 -1077.2634 -4776.4785]","1374":"[-13680.1191 -1593.8879 -4776.4873]","1375":"[-13680.9082 -2109.3594 -4776.4243]","1376":"[-13680.6943 -2623.708 -4776.4614]","1377":"[-13681.1973 -3136.959 -4776.4531]","1378":"[-13680.4404 -3649.1475 -4776.4502]","1379":"[-13680.5488 -4168.7729 -4776.4526]","1380":"[-13680.6719 -4687.2886 -4776.4526]","1381":"[-13681.0303 -5204.6851 -4776.4502]","1382":"[-13680.3408 -5720.9736 -4776.48]","1383":"[-13680.6953 -6236.1299 -4776.436]","1384":"[-13680.6104 -6750.1616 -4776.4443]","1385":"[-13680.292 -7262.9951 -4776.376]","1386":"[-13674.3398 -7782.5894 -4776.3369]","1387":"[-13653.4561 -8300.3877 -4776.2944]","1388":"[-13614.7959 -8815.8232 -4776.3633]","1389":"[-13554.1094 -9327.7236 -4776.4702]","1390":"[-13470.8496 -9834.9512 -4776.4458]","1391":"[-13361.3418 -10343.6992 -4776.6499]","1392":"[-13224.7168 -10842.0166 -4776.5952]","1393":"[-13058.3818 -11329.5254 -4776.521]","1394":"[-12860.0449 -11803.0635 -4776.4756]","1395":"[-12624.8096 -12266.8799 -4776.563]","1396":"[-12354.6982 -12708.7275 -4776.5103]","1397":"[-12049.6768 -13124.4834 -4776.6216]","1398":"[-11711.4326 -13510.7363 -4776.563]","1399":"[-11336.0088 -13869.9072 -4776.7188]","1400":"[-10931.9844 -14192.9043 -4776.6074]","1401":"[-10503.6387 -14478.9756 -4776.7285]","1402":"[-10052.9541 -14729.5098 -4776.6392]","1403":"[-9583.2148 -14946.2676 -4776.5679]","1404":"[-9100.9346 -15128.7529 -4776.6582]","1405":"[-8609.3779 -15279.1768 -4776.5161]","1406":"[-8111.4077 -15400.6318 -4776.4629]","1407":"[-7600.9043 -15497.4014 -4776.3867]","1408":"[-7087.7139 -15569.2646 -4776.4692]","1409":"[-6573.314 -15618.8564 -4776.3721]","1410":"[-6058.7134 -15648.5117 -4776.3804]","1411":"[-5544.6519 -15659.9551 -4776.458]","1412":"[-5031.6772 -15663.501 -4776.3174]","1413":"[-4511.4878 -15662.8545 -4776.4497]","1414":"[-3992.7014 -15662.7461 -4776.4863]","1415":"[-3475.4731 -15663.0479 -4776.271]","1416":"[-2955.1846 -15662.9131 -4776.4863]","1417":"[-2443.0366 -15663.1426 -4776.4648]","1418":"[-1923.2946 -15663.1738 -4776.4688]","1419":"[-1404.6556 -15662.8281 -4776.4712]","1420":"[-887.0888 -15663.0918 -4776.4761]","1421":"[-370.6032 -15662.9121 -4776.5527]","1422":"[144.7945 -15663.5508 -4776.5156]","1423":"[659.0933 -15663.1582 -4776.5029]","1424":"[1172.3439 -15662.9365 -4776.498]","1425":"[1684.4738 -15663.4307 -4776.5313]","1426":"[2204.0464 -15662.8047 -4776.5054]","1427":"[2722.479 -15662.6123 -4776.3647]","1428":"[3239.783 -15663.0742 -4776.3828]","1429":"[3755.6643 -15662.6123 -4776.52]","1430":"[4270.1494 -15662.7119 -4776.4102]","1431":"[4782.9146 -15659.2227 -4776.3662]","1432":"[5301.0796 -15634.7197 -4776.041]","1433":"[5812.8438 -15570.1494 -4776.3945]","1434":"[6313.1851 -15458.8604 -4776.3584]","1435":"[6803.6587 -15287.7246 -4776.5977]","1436":"[7264.7173 -15049.1934 -4776.4927]","1437":"[7677.4834 -14741.5117 -4776.5928]","1438":"[8033.3105 -14364.0605 -4776.5415]","1439":"[8317.1025 -13934.8145 -4776.3872]","1440":"[8533.3975 -13461.9473 -4776.5845]","1441":"[8683.8564 -12966.541 -4776.5181]","1442":"[8779.2451 -12456.5645 -4776.3882]","1443":"[8827.5957 -11946.3369 -4776.4365]","1444":"[8843.7197 -11426.6201 -4776.5]","1445":"[8845.4326 -10907.8457 -4776.4834]","1446":"[8845.2051 -10390.1982 -4776.5073]","1447":"[8844.8789 -9873.6934 -4776.5107]","1448":"[8844.5459 -9358.3438 -4776.5176]","1449":"[8844.3721 -8844.126 -4776.4668]","1450":"[8845.0537 -8331.0244 -4776.46]","1451":"[8844.9531 -7810.646 -4776.4541]","1452":"[8844.9209 -7291.4048 -4776.4531]","1453":"[8844.5742 -6773.3032 -4776.438]","1454":"[8844.5537 -6256.3486 -4776.4697]","1455":"[8844.6836 -5743.9331 -4776.4473]","1456":"[8844.0586 -5231.7178 -4776.4751]","1457":"[8844.9209 -4711.9121 -4776.4502]","1458":"[8844.2568 -4193.1924 -4776.4546]","1459":"[8844.8662 -3675.543 -4776.4531]","1460":"[8844.6523 -3158.9827 -4776.4526]","1461":"[8844.9961 -2643.5015 -4776.4561]","1462":"[8844.8232 -2129.0793 -4776.4795]","1463":"[8844.1748 -1615.7401 -4776.4565]","1464":"[8845.0469 -1103.4763 -4776.4736]","1465":"[8844.3496 -583.7855 -4776.4722]","1466":"[8844.6328 -65.1935 -4776.4634]","1467":"[8844.5859 452.3054 -4776.457]","1468":"[8844.2715 968.7048 -4776.4536]","1469":"[8844.6631 1483.9921 -4776.4648]","1470":"[8844.6934 1998.1698 -4776.4644]","1471":"[8844.5361 2511.2336 -4776.397]","1472":"[8844.5 3031.5759 -4776.4648]","1473":"[8845.2441 3550.7517 -4776.4619]","1474":"[8844.3984 4068.7771 -4776.4561]","1475":"[8844.9668 4585.6626 -4776.4531]","1476":"[8844.8516 5103.2852 -4776.4517]","1477":"[8844.1738 5615.4531 -4776.4839]","1478":"[8844.9248 6135.2139 -4776.4731]","1479":"[8845.1172 6653.8628 -4776.4585]","1480":"[8844.3867 7171.4033 -4776.4219]","1481":"[8844.3906 7687.6523 -4776.5005]","1482":"[8830.9219 8201.6953 -4776.356]","1483":"[8788.208 8712.0098 -4776.3887]","1484":"[8699.877 9222.9482 -4776.2568]","1485":"[8557.5938 9718.167 -4776.2588]","1486":"[8350.0215 10194.8223 -4776.4492]","1487":"[8074.8828 10630.9795 -4776.522]","1488":"[7727.019 11016.9072 -4776.5977]","1489":"[7320.6499 11334.252 -4776.6362]","1490":"[6866.7876 11581.3848 -4776.5669]","1491":"[6381.9116 11760.1855 -4776.4224]","1492":"[5880.9844 11879.5254 -4776.3716]","1493":"[5372.3403 11948.7451 -4776.3652]","1494":"[4852.8301 11977.876 -4776.4453]","1495":"[4333.6304 11984.9395 -4776.416]","1496":"[3815.6372 11984.1387 -4776.4727]","1497":"[3298.8506 11983.4492 -4776.4902]","1498":"[2786.2173 11983.7334 -4776.5132]","1499":"[2266.333 11983.5859 -4776.418]","1500":"[1747.8673 11983.1016 -4776.5288]","1501":"[1230.5017 11983.1182 -4776.5093]","1502":"[714.2642 11983.5195 -4776.4561]","1503":"[199.1222 11982.7549 -4776.4561]","1504":"[-314.9344 11983.1387 -4776.4531]","1505":"[-827.9122 11982.8799 -4776.4526]","1506":"[-1348.3519 11982.7432 -4776.4727]","1507":"[-1867.662 11982.9365 -4776.4102]","1508":"[-2385.8464 11983.6182 -4776.4697]","1509":"[-2902.9214 11982.8408 -4776.5293]","1510":"[-3418.8804 11983.3848 -4776.4219]","1511":"[-3933.6724 11982.6904 -4776.4521]","1512":"[-4447.3364 11983.3994 -4776.4517]","1513":"[-4959.8823 11982.9258 -4776.4497]","1514":"[-5475.0205 11982.7275 -4770.168]","1515":"[-5990.9111 11983.0361 -4744.0493]","1516":"[-6504.6069 11982.7998 -4697.4526]","1517":"[-7017.8696 11982.9473 -4641.3359]","1518":"[-7529.6963 11983.3096 -4581.3296]","1519":"[-8042.0327 11982.8838 -4519.7505]","1520":"[-8552.9482 11982.876 -4458.7314]","1521":"[-9063.6406 11982.8145 -4398.9629]","1522":"[-9577.5049 11983.0781 -4342.8672]","1523":"[-10091.7676 11982.9883 -4295.7959]","1524":"[-10609.5713 11982.3809 -4270.4033]","1525":"[-11125.0898 11983.0879 -4263.5781]","1526":"[-11642.25 11980.4639 -4263.4194]","1527":"[-12156.5732 11956.5645 -4263.2891]","1528":"[-12673.0801 11893.9102 -4263.106]","1529":"[-13177.8877 11784.7939 -4263.4971]","1530":"[-13663.1484 11618.8057 -4263.4917]","1531":"[-14124.4561 11384.8145 -4263.4224]","1532":"[-14538.6211 11082.4111 -4263.563]","1533":"[-14897.127 10710.2871 -4263.6602]","1534":"[-15188.3809 10279.8682 -4263.3682]","1535":"[-15407.3047 9811.7461 -4263.3599]","1536":"[-15560.9023 9320.5 -4263.4048]","1537":"[-15658.5635 8816.9932 -4263.3555]","1538":"[-15710.9639 8299.8965 -4263.4253]","1539":"[-15727.708 7781.7007 -4263.4233]","1540":"[-15729.4375 7264.3877 -4263.5293]","1541":"[-15729.9092 6748.2598 -4263.5278]","1542":"[-15729.585 6232.0327 -4263.5313]","1543":"[-15726.0156 5712.0479 -4263.5688]","1544":"[-15713.2432 5193.5391 -4263.2803]","1545":"[-15679.5195 4677.2563 -4263.4736]","1546":"[-15626.6191 4163.9468 -4263.5]","1547":"[-15552.4092 3654.6555 -4263.4082]","1548":"[-15453.4561 3150.9734 -4263.5503]","1549":"[-15326.1416 2646.4219 -4263.5317]","1550":"[-15168.9512 2152.0334 -4263.5508]","1551":"[-14981.377 1670.2914 -4263.668]","1552":"[-14760.6563 1204.9515 -4263.3989]","1553":"[-14505.6689 759.7989 -4263.5459]","1554":"[-14211.5986 331.8753 -4263.6191]","1555":"[-13883.3721 -67.4946 -4263.5444]","1556":"[-13522.7637 -434.3782 -4263.6304]","1557":"[-13133.0459 -766.6641 -4263.6147]","1558":"[-12714.9443 -1065.8279 -4263.6416]","1559":"[-12273.2813 -1329.4893 -4263.5654]","1560":"[-11813.9971 -1556.4985 -4263.5479]","1561":"[-11333.4229 -1752.6769 -4263.6465]","1562":"[-10842.4482 -1915.9412 -4263.5405]","1563":"[-10343.9336 -2048.2563 -4263.46]","1564":"[-9840.5098 -2153.4124 -4263.4595]","1565":"[-9333.917 -2233.1418 -4263.3921]","1566":"[-8817.332 -2291.2632 -4263.4146]","1567":"[-8300.2188 -2328.356 -4263.3789]","1568":"[-7783.4575 -2346.5342 -4263.4648]","1569":"[-7266.0884 -2351.6436 -4263.3687]","1570":"[-6753.8994 -2351.0286 -4263.4673]","1571":"[-6234.146 -2352.1458 -4263.4912]","1572":"[-5715.5049 -2351.844 -4263.4702]","1573":"[-5197.9683 -2351.9211 -4263.459]","1574":"[-4681.4937 -2351.6729 -4263.4551]","1575":"[-4166.0894 -2351.4878 -4263.4307]","1576":"[-3651.7522 -2351.4478 -4263.459]","1577":"[-3138.4978 -2351.6382 -4263.4678]","1578":"[-2626.3521 -2352.2695 -4263.4873]","1579":"[-2106.9841 -2351.8303 -4263.5562]","1580":"[-1589.193 -2351.6917 -4263.5161]","1581":"[-1072.8927 -2351.9451 -4263.46]","1582":"[-557.7775 -2351.6667 -4263.4229]","1583":"[-44.2845 -2351.9807 -4263.4688]","1584":"[468.1249 -2351.5928 -4263.4648]","1585":"[987.715 -2351.856 -4263.4946]","1586":"[1505.7214 -2351.9927 -4263.3354]","1587":"[2022.4138 -2352.2434 -4263.3301]","1588":"[2539.1086 -2351.5474 -4263.3853]","1589":"[3059.675 -2351.7654 -4263.4009]","1590":"[3579.1533 -2351.9482 -4263.4561]","1591":"[4097.5547 -2351.4412 -4263.4854]","1592":"[4614.4492 -2352.2847 -4263.5576]","1593":"[5130.2295 -2352.4272 -4263.459]","1594":"[5644.8818 -2351.3564 -4263.4487]","1595":"[6158.4019 -2352.6697 -4263.4722]","1596":"[6670.7964 -2352.0659 -4263.3628]","1597":"[7190.5693 -2351.0071 -4263.4595]","1598":"[7709.1797 -2352.5728 -4263.4492]","1599":"[8226.6309 -2352.2385 -4263.394]","1600":"[8742.8857 -2352.1135 -4263.5474]","1601":"[9257.9639 -2351.8362 -4263.5059]","1602":"[9771.9209 -2352.2336 -4263.4873]","1603":"[10284.7373 -2351.9529 -4263.5127]","1604":"[10804.5039 -2351.7014 -4263.4873]","1605":"[11322.6738 -2351.8577 -4263.4321]","1606":"[11839.3135 -2351.1848 -4263.3296]","1607":"[12353.4941 -2331.0044 -4263.3589]","1608":"[12869.9473 -2276.7046 -4263.3955]","1609":"[13375.0596 -2176.3086 -4263.353]","1610":"[13870.2021 -2018.9146 -4263.4863]","1611":"[14335.7119 -1796.1563 -4263.6191]","1612":"[14762.9326 -1499.7594 -4263.3135]","1613":"[15129.585 -1138.4442 -4263.6533]","1614":"[15431.3477 -715.9349 -4263.5952]","1615":"[15660.6875 -253.3936 -4263.5532]","1616":"[15824.1387 236.2885 -4263.3452]","1617":"[15929.959 744.2368 -4263.4028]","1618":"[15987.916 1258.3254 -4263.3101]","1619":"[16008.0566 1773.717 -4263.3828]","1620":"[16011.7246 2288.1038 -4263.5303]","1621":"[16012.3994 2801.2588 -4263.417]","1622":"[16011.5635 3321.5972 -4263.5054]","1623":"[16011.3613 3840.7356 -4263.4653]","1624":"[16011.2734 4358.7251 -4263.4561]","1625":"[16011.7148 4875.562 -4263.3989]","1626":"[16011.625 5393.8989 -4263.4536]","1627":"[16011.7041 5906.0117 -4263.4878]","1628":"[16011.5986 6425.7354 -4263.4971]","1629":"[16011.582 6944.3696 -4263.4927]","1630":"[16011.6318 7461.9033 -4263.4912]","1631":"[16011.4707 7978.3843 -4263.4639]","1632":"[16011.71 8493.7803 -4263.4561]","1633":"[16011.6865 9008.0996 -4263.4536]","1634":"[16012.0439 9521.334 -4263.438]","1635":"[16011.1172 10033.5068 -4263.4688]","1636":"[16012.2715 10553.0928 -4263.4819]","1637":"[16011.2617 11071.5527 -4263.4482]","1638":"[16012.1572 11588.5674 -4263.4409]","1639":"[16004.7168 12104.1123 -4263.4355]","1640":"[15973.3057 12616.8594 -4263.3315]","1641":"[15898.8994 13131.0361 -4263.415]","1642":"[15773.5723 13631.8301 -4263.3179]","1643":"[15586.9697 14117.0566 -4263.4741]","1644":"[15333.2324 14565.9473 -4263.5381]","1645":"[15010.0439 14966.7021 -4263.7119]","1646":"[14623.4102 15303.8096 -4263.5752]","1647":"[14181.5068 15573.5586 -4263.5205]","1648":"[13706.498 15772.7734 -4263.4976]","1649":"[13211.9443 15909.5381 -4263.3662]","1650":"[12699.3037 15994.6846 -4263.2769]","1651":"[12180.7441 16035.3818 -4263.27]","1652":"[11666.2197 16046.5615 -4263.4243]","1653":"[11153.1416 16046.4014 -4263.4736]","1654":"[10632.6602 16047.209 -4263.4531]","1655":"[10113.2988 16046.8105 -4263.4526]","1656":"[9595.0342 16046.5459 -4263.4268]","1657":"[9077.8887 16047.1445 -4263.3716]","1658":"[8561.8604 16046.2178 -4263.4663]","1659":"[8047.2979 16047.0186 -4262.1621]","1660":"[7531.1445 16047.3691 -4244.8091]","1661":"[7017.6431 16047.2588 -4206.001]","1662":"[6504.2168 16046.6357 -4152.5073]","1663":"[5992.9668 16047.3125 -4093.9849]","1664":"[5480.5132 16047.2148 -4033.0869]","1665":"[4969.5581 16046.834 -3971.6077]","1666":"[4457.1436 16046.6309 -3910.9036]","1667":"[3943.8406 16046.4854 -3852.7078]","1668":"[3429.2078 16046.9043 -3800.627]","1669":"[2915.9033 16046.6094 -3765.824]","1670":"[2397.146 16046.6621 -3752.0249]","1671":"[1884.7185 16046.4023 -3751.3616]","1672":"[1365.2025 16047.0605 -3751.4563]","1673":"[846.8345 16046.0313 -3751.4524]","1674":"[329.6155 16046.5439 -3751.4524]","1675":"[-186.4641 16046.4307 -3751.3735]","1676":"[-703.0905 16046.623 -3751.4443]","1677":"[-1223.1909 16047.0117 -3751.4836]","1678":"[-1742.1989 16046.6807 -3751.4358]","1679":"[-2260.1428 16046.8711 -3751.3792]","1680":"[-2776.9941 16046.5566 -3751.46]","1681":"[-3292.7915 16046.6211 -3751.4546]","1682":"[-3807.5342 16046.6689 -3751.4534]","1683":"[-4321.2246 16046.6221 -3751.4558]","1684":"[-4833.8579 16046.8379 -3751.4744]","1685":"[-5353.9258 16046.2549 -3751.4656]","1686":"[-5872.626 16047.292 -3751.4246]","1687":"[-6389.9224 16046.6191 -3751.436]","1688":"[-6906.0425 16046.5898 -3751.4519]","1689":"[-7420.9116 16046.7871 -3751.4592]","1690":"[-7934.2412 16046.9395 -3751.4719]","1691":"[-8446.4756 16046.2617 -3751.4409]","1692":"[-8965.9365 16047.0713 -3751.4707]","1693":"[-9484.2031 16047.3613 -3751.5278]","1694":"[-10000.9697 16046.3486 -3751.5461]","1695":"[-10521.5918 16046.9082 -3751.5149]","1696":"[-11041.8672 16046.4365 -3751.4312]","1697":"[-11560.8506 16045.7607 -3751.53]","1698":"[-12077.4795 16025.7461 -3751.3499]","1699":"[-12589.4639 15971.4941 -3751.2568]","1700":"[-13091.7354 15872 -3751.3608]","1701":"[-13584.5264 15714.8643 -3751.4897]","1702":"[-14047.7637 15494.0234 -3751.4319]","1703":"[-14473.7217 15200.5859 -3751.6106]","1704":"[-14840.4287 14842.0732 -3751.5762]","1705":"[-15142.501 14422.4619 -3751.6768]","1706":"[-15374.6641 13958.2813 -3751.5042]","1707":"[-15539.7109 13466.7656 -3751.4819]","1708":"[-15646.1699 12961.2256 -3751.3381]","1709":"[-15704.9727 12449.6709 -3751.4526]","1710":"[-15726.0156 11936.4414 -3751.3672]","1711":"[-15730.0449 11423.8867 -3751.46]","1712":"[-15729.9629 10904.1016 -3751.4551]","1713":"[-15729.5723 10385.4795 -3751.447]","1714":"[-15729.3691 9868.0137 -3751.4524]","1715":"[-15729.2861 9351.6885 -3751.4612]","1716":"[-15729.9727 8831.0996 -3751.3916]","1717":"[-15729.5986 8310.793 -3751.5015]","1718":"[-15729.752 7791.5527 -3751.4851]","1719":"[-15729.6826 7273.3931 -3751.4871]","1720":"[-15729.8145 6756.2944 -3751.457]","1721":"[-15729.1123 6240.2661 -3751.4514]","1722":"[-15729.8506 5725.3159 -3751.4524]","1723":"[-15729.5879 5211.4443 -3751.5056]","1724":"[-15729.8174 4698.6343 -3751.4031]","1725":"[-15729.7129 4178.3672 -3751.4397]","1726":"[-15714.0186 3661.4973 -3751.324]","1727":"[-15645.1846 3147.7048 -3751.2131]","1728":"[-15496.709 2657.0972 -3751.6909]","1729":"[-15279.623 2187.4736 -3751.5535]","1730":"[-15011.7285 1749.636 -3751.4194]","1731":"[-14698.252 1334.5842 -3751.2124]","1732":"[-14353.9717 947.7053 -3751.4202]","1733":"[-13994.1064 576.8898 -3751.4924]","1734":"[-13628.8145 213.1095 -3751.3896]","1735":"[-13265.3281 -150.8817 -3751.4229]","1736":"[-12902.4727 -513.9404 -3751.3223]","1737":"[-12540.0996 -875.9631 -3751.4321]","1738":"[-12172.9863 -1243.5355 -3751.4233]","1739":"[-11806.4346 -1610.0522 -3751.4248]","1740":"[-11440.9326 -1975.6772 -3751.4426]","1741":"[-11078.874 -2337.7012 -3751.4753]","1742":"[-10712.3037 -2703.7551 -3751.4224]","1743":"[-10348.7148 -3069.0403 -3751.3979]","1744":"[-9984.9473 -3430.5068 -3751.4697]","1745":"[-9618.9561 -3798.1919 -3751.4563]","1746":"[-9253.7031 -4162.4219 -3751.3662]","1747":"[-8891.4287 -4524.8398 -3751.3691]","1748":"[-8524.1357 -4892.5649 -3751.387]","1749":"[-8157.4541 -5260.168 -3751.4475]","1750":"[-7791.9238 -5624.6465 -3751.5203]","1751":"[-7433.6919 -5992.1079 -3751.5698]","1752":"[-7087.3618 -6377.5435 -3751.502]","1753":"[-6773.2969 -6785.0483 -3751.3318]","1754":"[-6477.249 -7212.9639 -3751.4561]","1755":"[-6190.4756 -7645.2271 -3751.5303]","1756":"[-5902.2651 -8075.0718 -3751.4336]","1757":"[-5615.52 -8504.4824 -3751.4629]","1758":"[-5327.1528 -8936.0674 -3751.46]","1759":"[-5038.021 -9368.6719 -3751.4563]","1760":"[-4749.5049 -9800.4043 -3751.4539]","1761":"[-4456.8823 -10226.6719 -3751.4045]","1762":"[-4144.6597 -10634.7764 -3751.6162]","1763":"[-3799.1387 -11023.0947 -3751.3613]","1764":"[-3437.7209 -11394.5244 -3751.4348]","1765":"[-3072.5986 -11759.5449 -3751.4937]","1766":"[-2708.6145 -12124.002 -3751.4092]","1767":"[-2345.1003 -12486.4248 -3751.406]","1768":"[-1971.5873 -12848.1631 -3751.4573]","1769":"[-1589.1665 -13197.8389 -3751.4109]","1770":"[-1194.4374 -13531.4375 -3751.3091]","1771":"[-787.2825 -13847.5078 -3751.3979]","1772":"[-364.2501 -14146.501 -3751.5566]","1773":"[73.6299 -14423.501 -3751.6541]","1774":"[525.4905 -14673.7666 -3751.4509]","1775":"[990.069 -14895.6367 -3751.5786]","1776":"[1467.0348 -15084.6152 -3751.4375]","1777":"[1963.1005 -15239.377 -3751.6584]","1778":"[2468.0027 -15353.3057 -3751.749]","1779":"[2978.5271 -15424.1396 -3751.5215]","1780":"[3490.9658 -15450.3916 -3751.5955]","1781":"[4009.8442 -15430.9961 -3751.6707]","1782":"[4522.6504 -15366.0391 -3751.5598]","1783":"[5026.0615 -15258.375 -3751.689]","1784":"[5523.4453 -15109.4287 -3751.4922]","1785":"[6006.1758 -14923.8682 -3751.5417]","1786":"[6473.6387 -14706.4092 -3751.4316]","1787":"[6924.9282 -14460.5566 -3751.5452]","1788":"[7360.1128 -14190.208 -3751.4521]","1789":"[7786.5718 -13893.8545 -3751.4399]","1790":"[8197.4482 -13578.6211 -3751.4912]","1791":"[8593.9639 -13247.5508 -3751.52]","1792":"[8976.4004 -12902.2334 -3751.4253]","1793":"[9346.7725 -12545.7559 -3751.4575]","1794":"[9710.1807 -12184.2529 -3751.4131]","1795":"[10077.543 -11816.8271 -3751.5029]","1796":"[10444.3691 -11450.5518 -3751.5281]","1797":"[10808.2871 -11083.5068 -3751.3669]","1798":"[11164.417 -10711.0039 -3751.3831]","1799":"[11510.1318 -10322.3525 -3751.4587]","1800":"[11839.6064 -9921.4668 -3751.5474]","1801":"[12151.3682 -9508.3281 -3751.4463]","1802":"[12441.6875 -9081.6826 -3751.4341]","1803":"[12708.7197 -8641.8311 -3751.5295]","1804":"[12949.0244 -8188.5933 -3751.4927]","1805":"[13162.2344 -7714.5752 -3751.5879]","1806":"[13340.6455 -7228.4395 -3751.541]","1807":"[13481.4277 -6732.1157 -3751.6311]","1808":"[13580.5625 -6227.957 -3751.6946]","1809":"[13636.9785 -5711.0503 -3751.7312]","1810":"[13647.6924 -5193.4102 -3751.6782]","1811":"[13612.8838 -4678.9863 -3751.6257]","1812":"[13533.6641 -4171.6797 -3751.6389]","1813":"[13411.3652 -3667.3577 -3751.6995]","1814":"[13250.2334 -3177.6453 -3751.582]","1815":"[13054.9961 -2702.5144 -3751.5962]","1816":"[12824.9307 -2235.667 -3751.5503]","1817":"[12567.6221 -1785.188 -3751.479]","1818":"[12286.665 -1350.9402 -3751.4919]","1819":"[11985.2158 -932.4088 -3751.365]","1820":"[11665.8955 -529.0475 -3751.2844]","1821":"[11331.4521 -139.8286 -3751.333]","1822":"[10978.3242 242.2102 -3751.3953]","1823":"[10615.4766 613.2404 -3751.4197]","1824":"[10249.5078 979.3846 -3751.4185]","1825":"[9884.5117 1344.8264 -3751.4146]","1826":"[9520.7168 1709.0782 -3750.8811]","1827":"[9153.0752 2076.1172 -3735.1736]","1828":"[8790.6104 2439.8835 -3698.4102]","1829":"[8428.0801 2802.4736 -3645.876]","1830":"[8065.5479 3164.7573 -3587.5725]","1831":"[7702.8149 3526.9482 -3526.6543]","1832":"[7341.582 3888.9089 -3465.1877]","1833":"[6978.729 4251.0264 -3404.0349]","1834":"[6615.6411 4613.4009 -3345.6514]","1835":"[6253.063 4976.1807 -3293.0776]","1836":"[5888.1338 5341.8594 -3256.0239]","1837":"[5523.4761 5706.3218 -3240.8042]","1838":"[5158.4526 6072.4424 -3239.5308]","1839":"[4793.4106 6436.6626 -3239.4932]","1840":"[4430.1069 6801.0708 -3239.4556]","1841":"[4066.364 7163.5044 -3239.4561]","1842":"[3704.1794 7525.9893 -3239.4534]","1843":"[3336.8164 7893.8247 -3239.5098]","1844":"[2970.1558 8260.7861 -3239.4495]","1845":"[2603.6809 8626.4043 -3239.4651]","1846":"[2238.8547 8992.0742 -3239.4453]","1847":"[1873.9344 9356.0176 -3239.4575]","1848":"[1510.4927 9719.7979 -3239.4768]","1849":"[1147.969 10082.9287 -3239.4607]","1850":"[785.7878 10444.8594 -3239.4551]","1851":"[418.4886 10811.9453 -3239.4526]","1852":"[52.0138 11178.2705 -3239.4526]","1853":"[-313.0872 11544.3496 -3239.4539]","1854":"[-679.079 11909.5088 -3239.5273]","1855":"[-1041.3788 12271.6729 -3239.446]","1856":"[-1408.9733 12639.3047 -3239.4709]","1857":"[-1775.7545 13006.2451 -3239.4558]","1858":"[-2142.0674 13372.1523 -3239.4534]","1859":"[-2507.3848 13737.5449 -3239.4524]","1860":"[-2871.8101 14102.3174 -3239.4897]","1861":"[-3235.3325 14466.4658 -3239.4802]","1862":"[-3600.0757 14827.6748 -3239.3069]","1863":"[-3993.9675 15162.1641 -3239.3516]","1864":"[-4428.772 15441.9229 -3239.3762]","1865":"[-4896.9976 15651.6553 -3239.5581]","1866":"[-5394.1973 15799.2324 -3239.5447]","1867":"[-5905.4771 15892.6533 -3239.5693]","1868":"[-6415.522 15940.998 -3239.3608]","1869":"[-6933.6748 15950.0742 -3239.0413]","1870":"[-7448.291 15919.9619 -3239.5386]","1871":"[-7956.1133 15846.2832 -3239.4001]","1872":"[-8458.8848 15720.0732 -3239.4517]","1873":"[-8939.1973 15534.9707 -3239.4353]","1874":"[-9391.209 15280.084 -3239.5588]","1875":"[-9791.7314 14956.9238 -3239.4172]","1876":"[-10130.1631 14568.3994 -3239.583]","1877":"[-10397.543 14130.2197 -3239.5835]","1878":"[-10598.6738 13651.5547 -3239.4399]","1879":"[-10735.9434 13152.9736 -3239.4055]","1880":"[-10820.0088 12644.373 -3239.3022]","1881":"[-10859.9277 12132.0068 -3239.4587]","1882":"[-10871.7461 11619.6396 -3238.6946]","1883":"[-10871.8076 11103.1826 -3222.8735]","1884":"[-10872.0449 10588.0732 -3185.6699]","1885":"[-10872.3604 10075.0732 -3132.856]","1886":"[-10871.9229 9563.8926 -3074.7371]","1887":"[-10871.9648 9052.123 -3013.8267]","1888":"[-10871.8545 8539.9912 -2952.2734]","1889":"[-10871.8428 8029.1304 -2891.4824]","1890":"[-10871.1904 7516.3853 -2833.1621]","1891":"[-10871.4014 7003.1455 -2780.5979]","1892":"[-10871.4775 6486.1602 -2743.5813]","1893":"[-10871.9326 5969.5869 -2728.8359]","1894":"[-10870.4229 5456.2339 -2727.4902]","1895":"[-10870.4463 4935.7402 -2727.3772]","1896":"[-10871.8271 4416.4229 -2727.4478]","1897":"[-10871.3545 3898.4897 -2727.4338]","1898":"[-10870.2744 3381.8643 -2727.4702]","1899":"[-10870.9775 2866.3523 -2727.3303]","1900":"[-10871.668 2352.0112 -2727.491]","1901":"[-10870.6299 1838.8138 -2727.4773]","1902":"[-10870.627 1318.432 -2727.4712]","1903":"[-10872.002 799.2529 -2727.5066]","1904":"[-10871.1006 281.3285 -2727.4299]","1905":"[-10870.4717 -235.3656 -2727.4875]","1906":"[-10871.1006 -749.4357 -2727.4949]","1907":"[-10871.1699 -1270.0343 -2727.4187]","1908":"[-10870.7803 -1789.5389 -2727.4556]","1909":"[-10871.0127 -2307.9685 -2727.4175]","1910":"[-10871.5771 -2825.3162 -2727.5518]","1911":"[-10870.96 -3341.5859 -2727.4277]","1912":"[-10870.957 -3856.7168 -2727.4934]","1913":"[-10866.1318 -4370.605 -2727.4304]","1914":"[-10834.3086 -4889.624 -2727.4448]","1915":"[-10760.0488 -5398.8657 -2727.3247]","1916":"[-10658.4199 -5905.7197 -2727.3599]","1917":"[-10546.8281 -6408.1221 -2727.1309]","1918":"[-10406.7998 -6904.1226 -2727.428]","1919":"[-10224.2881 -7386.312 -2727.4836]","1920":"[-9993.2676 -7844.125 -2727.5728]","1921":"[-9705.2402 -8274.4805 -2727.3845]","1922":"[-9359.9268 -8654.9873 -2727.1841]","1923":"[-8964.29 -8992.3008 -2727.1165]","1924":"[-8577.2793 -9336.835 -2727.106]","1925":"[-8246.8135 -9729.5391 -2727.3794]","1926":"[-7970.8242 -10167.8564 -2727.4724]","1927":"[-7750.2114 -10634 -2727.5103]","1928":"[-7578.3252 -11117.6367 -2727.3608]","1929":"[-7444.6006 -11619.6182 -2727.3889]","1930":"[-7334.6924 -12125.7305 -2727.4192]","1931":"[-7234.5894 -12632.458 -2727.1868]","1932":"[-7116.3667 -13136.6035 -2727.4802]","1933":"[-6967.9082 -13632.918 -2727.4194]","1934":"[-6777.3003 -14112.0664 -2727.4604]","1935":"[-6531.7192 -14570.6084 -2727.5027]","1936":"[-6229.7144 -14989.6055 -2727.5178]","1937":"[-5869.397 -15354.0381 -2727.5479]","1938":"[-5449.4233 -15654.6025 -2727.5286]","1939":"[-4987.3926 -15876.0928 -2727.5271]","1940":"[-4490.8486 -16021.543 -2727.5361]","1941":"[-3979.4612 -16095.6055 -2727.5156]","1942":"[-3459.644 -16108.4629 -2727.3335]","1943":"[-2942.5085 -16071.252 -2727.5396]","1944":"[-2431.0613 -15994.5547 -2727.4734]","1945":"[-1923.8619 -15899.1904 -2727.3999]","1946":"[-1419.0427 -15798.1426 -2727.4771]","1947":"[-915.4288 -15697.0381 -2727.4016]","1948":"[-413.1798 -15595.7256 -2727.2839]","1949":"[90.6734 -15473.2568 -2727.3237]","1950":"[581.9183 -15315.3916 -2727.4634]","1951":"[1054.0582 -15114.5674 -2727.4194]","1952":"[1504.5045 -14858.4717 -2727.3965]","1953":"[1913.9271 -14543.1914 -2727.6067]","1954":"[2268.04 -14166.8213 -2727.5005]","1955":"[2549.8289 -13738.8877 -2727.4287]","1956":"[2755.9236 -13264.8994 -2727.6052]","1957":"[2884.2241 -12767.1367 -2727.4392]","1958":"[2943.9856 -12250.5898 -2727.3167]","1959":"[2945.3538 -11732.1455 -2727.2908]","1960":"[2898.9709 -11219.834 -2727.3923]","1961":"[2816.7363 -10713.2598 -2727.3745]","1962":"[2719.792 -10210.3701 -2727.5493]","1963":"[2619.6636 -9701.4141 -2727.4756]","1964":"[2517.1514 -9195.2393 -2727.5168]","1965":"[2416.6826 -8690.3213 -2727.5042]","1966":"[2317.7324 -8186.4912 -2727.46]","1967":"[2217.3525 -7684.1499 -2727.4915]","1968":"[2115.5842 -7174.7285 -2727.4727]","1969":"[2015.0288 -6666.2529 -2727.4802]","1970":"[1913.3762 -6159.1753 -2727.3076]","1971":"[1812.4227 -5651.1602 -2727.302]","1972":"[1711.4368 -5141.3447 -2727.5037]","1973":"[1610.3785 -4632.8169 -2727.4014]","1974":"[1510.5343 -4125.3896 -2727.3362]","1975":"[1408.6396 -3619.488 -2727.5059]","1976":"[1308.6597 -3114.364 -2727.531]","1977":"[1209.1177 -2610.3096 -2727.5222]","1978":"[1108.3109 -2107.6667 -2727.4612]","1979":"[1006.8449 -1597.5774 -2727.5415]","1980":"[905.4391 -1088.603 -2727.45]","1981":"[804.9708 -580.5711 -2727.509]","1982":"[703.9757 -73.7582 -2727.5186]","1983":"[602.9025 431.9398 -2727.4673]","1984":"[503.005 936.6994 -2727.5112]","1985":"[402.7975 1440.2087 -2727.4185]","1986":"[322.6355 1952.5964 -2727.4014]","1987":"[280.0528 2463.4827 -2727.4434]","1988":"[270.8343 2983.2593 -2727.51]","1989":"[272.6052 3501.2268 -2727.3596]","1990":"[271.7754 4017.7004 -2727.4919]","1991":"[271.0296 4532.998 -2727.5291]","1992":"[272.5186 5047.1504 -2727.4194]","1993":"[271.791 5560.1396 -2727.5896]","1994":"[272.0433 6076.7866 -2719.0151]","1995":"[272.0415 6590.8818 -2691.0046]","1996":"[271.8534 7104.3916 -2642.6917]","1997":"[272.05 7618.6431 -2585.6355]","1998":"[272.1549 8129.7363 -2525.4744]","1999":"[271.7199 8642.0361 -2463.9031]","2000":"[271.4669 9153.7529 -2402.6172]","2001":"[271.4628 9666.0068 -2342.9619]","2002":"[271.4165 10178.1182 -2287.7825]","2003":"[271.5657 10693.3203 -2242.9204]","2004":"[277.2374 11211.791 -2219.303]","2005":"[303.9093 11729.8633 -2214.5027]","2006":"[370.4565 12238.1035 -2214.3389]","2007":"[485.9474 12741.4844 -2214.0059]","2008":"[661.1917 13230.459 -2214.4431]","2009":"[904.1228 13687.9639 -2214.5234]","2010":"[1216.402 14096.9541 -2214.8167]","2011":"[1597.3217 14448.2383 -2214.4229]","2012":"[2029.1357 14727.9648 -2214.6116]","2013":"[2503.9973 14939.8877 -2214.5562]","2014":"[3000.4026 15086.4688 -2214.4192]","2015":"[3510.5471 15178.9766 -2214.4351]","2016":"[4028.3081 15225.0752 -2214.1729]","2017":"[4545.7949 15230.7314 -2214.52]","2018":"[5059.8999 15198.8525 -2214.5234]","2019":"[5567.3359 15124.0703 -2214.4392]","2020":"[6069.0771 14996.0547 -2214.7222]","2021":"[6546.9287 14809.5674 -2214.4922]","2022":"[6997.3599 14552.874 -2214.1716]","2023":"[7397.5786 14225.8936 -2214.3833]","2024":"[7731.9258 13837.5215 -2214.6208]","2025":"[7999.499 13394.3184 -2214.5522]","2026":"[8196.7939 12918.3105 -2214.5928]","2027":"[8331.6406 12423.0596 -2214.4656]","2028":"[8415.2529 11909.9482 -2214.4771]","2029":"[8454.5332 11393.4824 -2214.426]","2030":"[8465.1602 10876.8428 -2214.7981]","2031":"[8464.8643 10357.8379 -2215.0447]","2032":"[8465.3906 9837.3203 -2215.4641]","2033":"[8465.2246 9318.2246 -2215.531]","2034":"[8464.5625 8800.2295 -2215.4919]","2035":"[8465.2275 8283.3643 -2215.3872]","2036":"[8465.1289 7769.1074 -2214.6707]","2037":"[8464.834 7253.5366 -2214.6423]","2038":"[8465.2549 6734.7109 -2214.4688]","2039":"[8466.0107 6217.98 -2214.2859]","2040":"[8465.5322 5703.7085 -2214.5327]","2041":"[8465.0986 5183.418 -2214.4011]","2042":"[8465.1748 4664.4307 -2214.5149]","2043":"[8464.9785 4146.8394 -2214.4526]","2044":"[8464.8281 3630.749 -2214.5256]","2045":"[8464.7334 3115.7971 -2214.4363]","2046":"[8464.9844 2601.8835 -2215.0549]","2047":"[8464.5908 2089.1357 -2215.25]","2048":"[8464.6963 1568.9832 -2215.4858]","2049":"[8464.8994 1049.9244 -2215.4827]","2050":"[8465.0508 532.0253 -2215.6187]","2051":"[8464.9707 15.2572 -2215.4993]","2052":"[8464.4805 -500.3689 -2215.4856]","2053":"[8465.5156 -1014.8588 -2215.4497]","2054":"[8465.3066 -1528.1608 -2215.4609]","2055":"[8464.6084 -2040.3241 -2215.396]","2056":"[8464.585 -2559.7083 -2215.417]","2057":"[8465.7314 -3077.8623 -2215.5166]","2058":"[8465.001 -3594.7747 -2215.5083]","2059":"[8464.3721 -4115.0552 -2215.4607]","2060":"[8464.7402 -4627.1978 -2215.5469]","2061":"[8465.4678 -5146.9126 -2215.4404]","2062":"[8464.8086 -5665.5459 -2215.5242]","2063":"[8465.0527 -6183.1108 -2215.522]","2064":"[8463.9619 -6699.2881 -2215.5015]","2065":"[8455.3926 -7213.814 -2215.4089]","2066":"[8430.4893 -7726.0361 -2215.3743]","2067":"[8385.8389 -8243.2314 -2215.5039]","2068":"[8320.4307 -8756.498 -2215.4668]","2069":"[8231.085 -9263.8789 -2215.5071]","2070":"[8116.4282 -9763.6514 -2215.5942]","2071":"[7972.2515 -10262.2178 -2215.5627]","2072":"[7798.6001 -10746.3721 -2215.5649]","2073":"[7593.2524 -11215.5938 -2215.5581]","2074":"[7350.2358 -11673.9873 -2215.4966]","2075":"[7072.6543 -12109.4551 -2215.5437]","2076":"[6760.8584 -12518.3916 -2215.5496]","2077":"[6415.876 -12896.8379 -2215.6201]","2078":"[6034.3613 -13247.8018 -2215.5857]","2079":"[5625.1553 -13562.2998 -2215.6079]","2080":"[5192.646 -13839.9902 -2215.6633]","2081":"[4733.8037 -14085.3613 -2215.5771]","2082":"[4259.5225 -14294.8027 -2215.499]","2083":"[3769.9099 -14471.1592 -2215.3462]","2084":"[3270.0857 -14616.3457 -2215.4727]","2085":"[2764.3501 -14732.5879 -2215.4124]","2086":"[2254.5725 -14822.1045 -2215.5334]","2087":"[1742.4607 -14887.8945 -2215.373]","2088":"[1229.9427 -14931.835 -2215.5498]","2089":"[717.5089 -14956.9395 -2215.4963]","2090":"[201.2818 -14965.6338 -2205.9255]","2091":"[-314.1047 -14966.9717 -2177.2625]","2092":"[-827.9447 -14966.8477 -2128.1462]","2093":"[-1340.9581 -14966.9316 -2070.9277]","2094":"[-1852.4235 -14966.8418 -2010.6675]","2095":"[-2364.7593 -14967.0098 -1948.7751]","2096":"[-2876.3613 -14967.7275 -1886.2521]","2097":"[-3387.4258 -14967.0391 -1823.8809]","2098":"[-3899.9749 -14967.3369 -1762.4535]","2099":"[-4412.9346 -14967.9482 -1702.9175]","2100":"[-4926.8716 -14967.4658 -1648.0052]","2101":"[-5442.5283 -14966.8896 -1604.505]","2102":"[-5960.8887 -14967.4775 -1583.0862]","2103":"[-6473.7939 -14967.9316 -1579.4832]","2104":"[-6992.5557 -14963.8877 -1579.4279]","2105":"[-7509.5332 -14949.9834 -1579.3596]","2106":"[-8021.3252 -14919.1582 -1579.3447]","2107":"[-8538.6631 -14866.6699 -1579.4978]","2108":"[-9050.7637 -14791.6045 -1579.6456]","2109":"[-9557.1143 -14693.2686 -1579.6365]","2110":"[-10054.9863 -14568.6816 -1579.4285]","2111":"[-10550.6426 -14412.7051 -1579.5786]","2112":"[-11032.7568 -14225.8691 -1579.5564]","2113":"[-11498.7744 -14006.291 -1579.4744]","2114":"[-11944.6914 -13752.6748 -1579.5212]","2115":"[-12372.6357 -13460.3105 -1579.5502]","2116":"[-12773.2588 -13133.1943 -1579.4659]","2117":"[-13145.4648 -12770.0352 -1579.6794]","2118":"[-13482.1816 -12376.6553 -1579.4897]","2119":"[-13782.4365 -11957.2842 -1579.5964]","2120":"[-14046.1895 -11516.3232 -1579.5548]","2121":"[-14273.917 -11057.7529 -1579.5668]","2122":"[-14470.3047 -10577.8906 -1579.5786]","2123":"[-14633.5693 -10087.6973 -1579.4366]","2124":"[-14765.959 -9590.1074 -1579.6086]","2125":"[-14871.7695 -9087.9355 -1579.5339]","2126":"[-14953.6172 -8574.1846 -1579.4475]","2127":"[-15011.0576 -8058.5298 -1579.4019]","2128":"[-15048.6016 -7542.5439 -1579.5203]","2129":"[-15067.127 -7024.8643 -1579.5908]","2130":"[-15071.8408 -6504.936 -1579.4937]","2131":"[-15072.2549 -5986.0752 -1579.4507]","2132":"[-15072.7734 -5468.3623 -1579.4719]","2133":"[-15072.6484 -4951.7979 -1579.4373]","2134":"[-15072.3535 -4436.3755 -1579.4756]","2135":"[-15072.041 -3922.0266 -1579.4369]","2136":"[-15072.4756 -3409.1521 -1578.0748]","2137":"[-15071.7939 -2894.7646 -1560.6061]","2138":"[-15071.8369 -2380.8374 -1521.498]","2139":"[-15071.709 -1867.899 -1468.0275]","2140":"[-15072.2412 -1355.7634 -1409.1959]","2141":"[-15072.1309 -844.0811 -1348.0105]","2142":"[-15071.5547 -332.1529 -1285.8621]","2143":"[-15072.1094 180.0818 -1222.8956]","2144":"[-15072.8818 691.6774 -1160.1714]","2145":"[-15071.8398 1202.599 -1097.589]","2146":"[-15071.2197 1714.6967 -1034.7729]","2147":"[-15072.2598 2226.082 -972.0891]","2148":"[-15071.6924 2736.5115 -909.1253]","2149":"[-15071.5645 3249.1765 -846.725]","2150":"[-15071.8789 3760.7126 -783.4699]","2151":"[-15072.3701 4272.2524 -720.6637]","2152":"[-15071.9336 4782.9443 -657.9728]","2153":"[-15071.6758 5295.0791 -595.197]","2154":"[-15071.9678 5808.0605 -532.3126]","2155":"[-15072.1563 6319.272 -469.5245]","2156":"[-15072.0215 6831.395 -406.5273]","2157":"[-15071.3604 7343.2695 -343.7542]","2158":"[-15071.6543 7854.5181 -280.9847]","2159":"[-15071.6895 8366.6807 -218.0997]","2160":"[-15072.0166 8878.5039 -155.2752]","2161":"[-15072.415 9389.7363 -93.1601]","2162":"[-15072.3848 9902.0107 -32.2062]","2163":"[-15072.3447 10414.9473 26.4101]","2164":"[-15072.3857 10927.4404 78.9809]","2165":"[-15072.335 11443.3164 116.2648]","2166":"[-15055.8281 11961.585 128.874]","2167":"[-14999.1865 12475.6484 125.973]","2168":"[-14870.4971 12975.2041 121.761]","2169":"[-14689.835 13372.2744 119.0678]","2170":"[-14482.8896 13672.5068 117.9796]","2171":"[-14246.5674 13911.5791 118.0324]","2172":"[-13940.4131 14128.0537 119.064]","2173":"[-13577.5654 14298.9326 121.4478]","2174":"[-13082.4902 14435.8818 125.5355]","2175":"[-12570.4707 14500.9307 130.8674]","2176":"[-12053.3975 14519.4473 148.0097]","2177":"[-11541.4014 14518.9775 183.5476]","2178":"[-11026.7627 14520.0039 235.824]","2179":"[-10514.3604 14520.9756 294.0156]","2180":"[-10002.0439 14519.998 354.7366]","2181":"[-9490.3711 14519.7998 416.1696]","2182":"[-8977.5088 14520.4805 477.1253]","2183":"[-8466.3838 14520.8262 535.5989]","2184":"[-7953.1128 14520.5381 588.7958]","2185":"[-7439.1821 14520.4199 627.5622]","2186":"[-6923.1689 14519.8574 643.5084]","2187":"[-6407.1782 14520.7373 645.4828]","2188":"[-5889.0151 14519.8438 645.5515]","2189":"[-5371.9277 14520.4453 645.621]","2190":"[-4855.8999 14520.4844 645.5226]","2191":"[-4340.9497 14520.5225 645.5137]","2192":"[-3827.0903 14519.9326 645.5916]","2193":"[-3314.3564 14520.1279 645.5922]","2194":"[-2794.2666 14521.0967 645.5259]","2195":"[-2275.3652 14520.0518 645.5421]","2196":"[-1757.6169 14520.4951 645.5017]","2197":"[-1240.9806 14520.3154 645.5173]","2198":"[-725.4647 14520.3164 645.4966]","2199":"[-211.0622 14520.7295 645.5145]","2200":"[302.2231 14519.9971 645.5337]","2201":"[814.408 14520.5557 645.6238]","2202":"[1333.8622 14520.3721 645.5334]","2203":"[1852.1725 14520.791 645.5406]","2204":"[2369.3359 14519.7822 645.5236]","2205":"[2885.4724 14520.499 645.6393]","2206":"[3397.7903 14520.0703 645.6024]","2207":"[3917.8521 14520.7217 645.5403]","2208":"[4436.8135 14519.9707 645.5107]","2209":"[4955.0952 14520.1865 643.3448]","2210":"[5469.1196 14520.0635 625.3154]","2211":"[5983.625 14519.8613 584.8334]","2212":"[6496.8701 14519.8037 530.8705]","2213":"[7008.7876 14519.9629 472.0246]","2214":"[7521.9512 14520.1006 410.9412]","2215":"[8034.5552 14520.375 348.373]","2216":"[8547.4609 14520.4463 285.4099]","2217":"[9059.5498 14520.2197 222.5441]","2218":"[9572.7119 14520.6436 159.5418]","2219":"[10084.2861 14520.334 96.6882]","2220":"[10597.2646 14520.126 33.6729]","2221":"[11108.6475 14521.0381 -29.0501]","2222":"[11621.5869 14519.2363 -94.4917]","2223":"[12134.6143 14496.6172 -163.3069]","2224":"[12643.875 14437.4307 -230.1989]","2225":"[13147.2373 14331.6104 -284.3442]","2226":"[13638.4199 14172.2979 -323.2578]","2227":"[14099.2314 13943.2676 -349.8283]","2228":"[14486.7764 13657.5342 -366.0634]","2229":"[14836.1953 13290.1641 -374.9946]","2230":"[15112.9502 12872.8828 -377.6241]","2231":"[15322.2539 12401.7666 -376.4571]","2232":"[15458.9063 11899.7588 -373.6023]","2233":"[15536.8213 11391.0176 -370.3062]","2234":"[15571.1758 10878.6475 -366.1371]","2235":"[15570.6895 10359.5098 -364.2484]","2236":"[15542.2607 9845.165 -364.4735]","2237":"[15488.5137 9334.8428 -364.4908]","2238":"[15405.1436 8821.4287 -364.4608]","2239":"[15291.6016 8316.1787 -364.5146]","2240":"[15147.8018 7822.0088 -364.3606]","2241":"[14980.79 7329.48 -364.1503]","2242":"[14821.0459 6838.7031 -364.1661]","2243":"[14691.5273 6341.6519 -364.4818]","2244":"[14591.7773 5839.2349 -364.3425]","2245":"[14520.6768 5327.3149 -364.4781]","2246":"[14476.7051 4814.6206 -364.7068]","2247":"[14456.2744 4294.5874 -364.5146]","2248":"[14452.0645 3776.093 -364.3408]","2249":"[14452.5967 3259.145 -364.4456]","2250":"[14451.1904 2743.3335 -364.4902]","2251":"[14452.4229 2228.6523 -364.54]","2252":"[14451.7754 1715.1239 -364.463]","2253":"[14451.3857 1202.7451 -364.4202]","2254":"[14452.1641 683.1643 -364.388]","2255":"[14452.0283 164.7652 -364.4687]","2256":"[14451.7764 -352.3867 -364.4047]","2257":"[14451.6563 -868.3729 -364.5012]","2258":"[14451.8545 -1382.1937 -364.4747]","2259":"[14452.123 -1902.1787 -364.4924]","2260":"[14451.9111 -2421.103 -364.3757]","2261":"[14452.3359 -2938.6135 -364.5882]","2262":"[14452.4248 -3454.7725 -364.2846]","2263":"[14451.9805 -3969.093 -364.3623]","2264":"[14452.7588 -4481.8057 -364.5449]","2265":"[14451.7549 -5001.8086 -364.5027]","2266":"[14451.7285 -5520.6714 -364.481]","2267":"[14452.7158 -6038.3896 -364.5076]","2268":"[14451.4131 -6554.9624 -364.5142]","2269":"[14451.6924 -7070.4077 -364.5207]","2270":"[14452.4629 -7584.7236 -364.46]","2271":"[14451.2949 -8097.9072 -364.4141]","2272":"[14452.2715 -8609.9287 -364.4445]","2273":"[14451.6074 -9129.1787 -364.4516]","2274":"[14452.2803 -9647.2822 -364.455]","2275":"[14448.6006 -10167.7129 -364.002]","2276":"[14425.043 -10686.5977 -361.5381]","2277":"[14363.6914 -11196.4805 -355.7155]","2278":"[14257.5791 -11701.1338 -345.0258]","2279":"[14098.3887 -12195.3613 -328.8665]","2280":"[13884.3203 -12666.2979 -305.3829]","2281":"[13607.9824 -13104.627 -271.6005]","2282":"[13266.4355 -13487.0459 -225.0551]","2283":"[12944.5332 -13740.1904 -178.3784]","2284":"[12496.9209 -13984.666 -118.1513]","2285":"[12018.2275 -14145.9434 -66.5264]","2286":"[11526.126 -14221.1455 -29.3939]","2287":"[11009.9326 -14244.5303 -2.1667]","2288":"[10491.917 -14247.3623 14.9122]","2289":"[9976.1787 -14227.376 24.6248]","2290":"[9465.332 -14163.7178 30.9015]","2291":"[8965.083 -14041.8672 36.1144]","2292":"[8486.8906 -13846.6855 39.7913]","2293":"[8057.5171 -13575.6748 41.7879]","2294":"[7742.1377 -13288.5254 42.1295]","2295":"[7437.5854 -12893.7783 41.0079]","2296":"[7221.5225 -12480.6885 38.49]","2297":"[7055.4556 -11990.1299 34.3365]","2298":"[6957.2427 -11480.7832 28.4941]","2299":"[6916.5508 -10970.4287 22.4021]","2300":"[6947.2393 -10451.1982 16.3963]","2301":"[7059.0972 -9946.1533 13.2836]","2302":"[7246.9805 -9466.667 11.8719]","2303":"[7495.8994 -9018.3359 12.373]","2304":"[7794.9648 -8595.8896 14.4599]","2305":"[8130.981 -8198.6836 17.5469]","2306":"[8483.874 -7826.668 19.2887]","2307":"[8851.2773 -7459.3306 19.5398]","2308":"[9217.6943 -7092.6372 19.64]","2309":"[9582.8271 -6726.1167 19.5294]","2310":"[9948.7832 -6361.9883 19.5108]","2311":"[10312.4453 -5997.0962 19.5412]","2312":"[10676.0576 -5633.6689 19.5477]","2313":"[11039.0586 -5271.1421 19.5457]","2314":"[11406.749 -4902.7949 19.5471]","2315":"[11774.502 -4536.1147 19.5364]","2316":"[12141.0166 -4169.7798 19.5311]","2317":"[12505.6699 -3803.1365 19.5303]","2318":"[12871.499 -3439.2917 19.5451]","2319":"[13234.9971 -3074.7017 19.547]","2320":"[13598.4639 -2711.6506 19.5476]","2321":"[13960.6934 -2349.1077 19.9956]","2322":"[14316.3047 -1973.3966 21.9364]","2323":"[14647.7119 -1579.9794 24.5761]","2324":"[14944.0762 -1161.7441 26.4275]","2325":"[15199.2578 -711.8623 27.1594]","2326":"[15396.9014 -237.2132 26.4104]","2327":"[15525.6377 258.3521 24.0645]","2328":"[15581.0527 775.4844 21.0846]","2329":"[15593.0322 1288.4562 19.4989]","2330":"[15591.2471 1801.0587 19.4844]","2331":"[15591.7119 2320.8662 19.5479]","2332":"[15592.3008 2839.491 19.5754]","2333":"[15591.4414 3356.9409 19.5457]","2334":"[15591.5273 3873.2378 19.5475]","2335":"[15591.8906 4391.5127 19.5473]","2336":"[15591.9473 4911.8042 19.5505]","2337":"[15591.8516 5431.0171 19.4461]","2338":"[15591.7061 5949.1367 19.6063]","2339":"[15591.708 6466.1758 19.517]","2340":"[15586.2764 6980.1011 23.8274]","2341":"[15554.8877 7493.4102 31.768]","2342":"[15474.4717 8004.752 41.3697]","2343":"[15336.1406 8499.75 49.0191]","2344":"[15126.9551 8975.2412 54.5811]","2345":"[14845.3574 9408.4375 57.6267]","2346":"[14514.2197 9762.7686 58.089]","2347":"[14104.1133 10072.8369 56.3414]","2348":"[13648.6025 10308.8467 51.5765]","2349":"[13160.8027 10475.2959 44.7695]","2350":"[12658.8135 10577.5645 36.0587]","2351":"[12141.6865 10627.2207 26.3895]","2352":"[11626.9951 10628.3877 20.9882]","2353":"[11113.2168 10586.8408 20.132]","2354":"[10607.167 10501.6533 20.1324]","2355":"[10108.2246 10359.3037 20.0045]","2356":"[9635.5 10155.002 20.0665]","2357":"[9194.9922 9880.8955 20.2088]","2358":"[8800.8193 9548.2334 20.3678]","2359":"[8429.1299 9185.2422 20.6631]","2360":"[8062.9985 8819.0088 20.5045]","2361":"[7697.6807 8453.4834 20.4491]","2362":"[7333.0713 8088.791 20.5293]","2363":"[6969.2959 7724.8179 20.545]","2364":"[6605.9336 7361.9775 20.5476]","2365":"[6243.8511 6999.3794 20.548]","2366":"[5876.1807 6631.8667 20.5262]","2367":"[5509.2783 6265.1782 20.5108]","2368":"[5146.21 5897.1567 20.696]","2369":"[4815.248 5506.0186 20.6232]","2370":"[4538.2598 5071.8096 20.4626]","2371":"[4328.2075 4597.2852 20.4263]","2372":"[4183.5103 4103.2754 20.2958]","2373":"[4093.6011 3599.01 20.6824]","2374":"[4048.5481 3082.3367 20.7959]","2375":"[4034.5923 2566.0679 20.548]","2376":"[4034.3652 2051.4895 20.7143]","2377":"[4033.3801 1538.5859 20.4329]","2378":"[4034.0386 1019.2311 20.4311]","2379":"[4035.4194 501.6642 20.5548]","2380":"[4034.0945 -16.9003 20.6127]","2381":"[4033.303 -529.1265 20.5074]","2382":"[4033.9609 -1047.5844 21.0319]","2383":"[4034.3186 -1566.9366 21.0853]","2384":"[4034.272 -2079.8083 21.5768]","2385":"[4033.28 -2599.269 21.5434]","2386":"[4034.7219 -3117.5574 21.5096]","2387":"[4033.4302 -3634.6604 21.536]","2388":"[4034.1584 -4150.6021 21.5426]","2389":"[4034.021 -4668.5981 21.545]","2390":"[4033.626 -5188.5498 21.5881]","2391":"[4033.7761 -5707.4438 21.5788]","2392":"[4033.9746 -6225.2705 21.4955]","2393":"[4033.583 -6742.0254 21.5466]","2394":"[4034.4341 -7257.6943 21.6142]","2395":"[4033.7163 -7772.2681 21.5505]","2396":"[4034.4785 -8285.7646 21.5508]","2397":"[4033.7212 -8798.1807 21.5478]","2398":"[4032.3127 -9318.0664 20.9384]","2399":"[3990.3857 -9832.8086 18.7585]","2400":"[3878.4414 -10340.1191 14.9925]","2401":"[3688.9768 -10821.5996 13.785]","2402":"[3437.179 -11273.8701 14.3314]","2403":"[3138.0295 -11695.6279 16.5534]","2404":"[2806.0483 -12086.5547 19.5705]","2405":"[2448.8401 -12461.8281 21.3514]","2406":"[2084.6531 -12826.793 21.5512]","2407":"[1721.3793 -13190.9746 21.6185]","2408":"[1357.2734 -13552.498 21.2858]","2409":"[968.4418 -13896.1211 18.8673]","2410":"[540.3362 -14188.4775 15.7411]","2411":"[72.2928 -14405.6973 13.7867]","2412":"[-418.4337 -14555.6904 14.1063]","2413":"[-927.8293 -14651.6953 15.9209]","2414":"[-1438.9785 -14701.377 19.4442]","2415":"[-1956.3428 -14718.0811 21.134]","2416":"[-2476.5891 -14720.1924 21.5453]","2417":"[-2995.5845 -14719.498 21.6116]","2418":"[-3513.502 -14719.7324 21.5394]","2419":"[-4030.3547 -14720.2139 21.5273]","2420":"[-4546.144 -14719.5254 21.5497]","2421":"[-5060.8667 -14719.8047 21.5471]","2422":"[-5574.519 -14720.0928 21.6051]","2423":"[-6087.1152 -14720.1064 21.5399]","2424":"[-6607.1499 -14719.7979 21.5396]","2425":"[-7126.0615 -14719.6885 21.5134]","2426":"[-7643.8003 -14719.9561 21.4017]","2427":"[-8160.4014 -14719.6338 21.5024]","2428":"[-8675.8633 -14720.2256 21.5394]","2429":"[-9190.1953 -14719.3447 21.5472]","2430":"[-9703.415 -14719.6797 21.574]","2431":"[-10215.5352 -14719.6123 21.5512]","2432":"[-10734.4531 -14718.6162 21.4762]","2433":"[-11254.5762 -14701.1641 21.1465]","2434":"[-11771.0645 -14648.5439 21.0969]","2435":"[-12276.4951 -14550.459 21.1046]","2436":"[-12771.3428 -14395.4463 20.7037]","2437":"[-13236.083 -14176.8721 20.8713]","2438":"[-13664.0381 -13886.1025 21.0707]","2439":"[-14036.7998 -13526.0723 20.8963]","2440":"[-14339.4277 -13109.8096 21.0547]","2441":"[-14574.2822 -12645.4053 21.0382]","2442":"[-14740.8398 -12154.9023 21.0682]","2443":"[-14848.9639 -11650.3057 21.1308]","2444":"[-14909.0234 -11139.3447 21.0697]","2445":"[-14931.5986 -10626.5908 20.9028]","2446":"[-14935.0879 -10114.5059 26.9631]","2447":"[-14934.9189 -9598.2275 53.3081]","2448":"[-14935.0928 -9084.8555 100.2378]","2449":"[-14935.0117 -8572.0234 156.515]","2450":"[-14934.9453 -8060.3672 216.5038]","2451":"[-14935.083 -7548.3823 278.3852]","2452":"[-14935.5537 -7036.4263 340.9502]","2453":"[-14935.1875 -6524.396 403.3326]","2454":"[-14935.0654 -6012.2798 465.1671]","2455":"[-14935.2725 -5498.9316 524.9931]","2456":"[-14935.54 -4986.4551 580.9123]","2457":"[-14935.3066 -4471.6279 627.0864]","2458":"[-14935.29 -3956.0542 651.2401]","2459":"[-14935.1533 -3442.6887 657.3889]","2460":"[-14935.958 -2928.2021 657.5295]","2461":"[-14934.9756 -2414.7937 657.5419]","2462":"[-14935.0977 -1902.4775 657.5471]","2463":"[-14935.4717 -1382.7231 657.5703]","2464":"[-14935.5537 -864.0669 657.6213]","2465":"[-14935.1074 -346.5584 657.5224]","2466":"[-14936.0986 169.8224 657.5546]","2467":"[-14935.1104 685.0703 657.5081]","2468":"[-14935.333 1199.207 657.5361]","2469":"[-14935.1484 1712.243 657.5457]","2470":"[-14935.3184 2232.5708 657.5469]","2471":"[-14935.7539 2751.7703 657.4709]","2472":"[-14934.9453 3269.8186 657.5888]","2473":"[-14935.582 3786.6934 657.4869]","2474":"[-14935.1064 4302.9575 657.4811]","2475":"[-14934.5156 4823.3882 657.5066]","2476":"[-14934.9238 5342.7109 657.4988]","2477":"[-14934.7705 5860.9644 657.5178]","2478":"[-14934.8701 6378.1465 657.467]","2479":"[-14934.7578 6894.2314 657.4761]","2480":"[-14935.2734 7409.2358 657.5111]","2481":"[-14935.1846 7923.1592 657.5358]","2482":"[-14934.6709 8436.0029 657.5422]","2483":"[-14935.0635 8956.29 657.5467]","2484":"[-14929.3291 9475.54 656.8527]","2485":"[-14906.3848 9994.332 654.0695]","2486":"[-14853.9941 10504.625 647.3089]","2487":"[-14763.0771 11014.7764 635.6118]","2488":"[-14625.7139 11512.248 617.327]","2489":"[-14428.6416 11989.5029 591.146]","2490":"[-14161.293 12426.6816 555.7089]","2491":"[-13884.9775 12739.4863 518.8727]","2492":"[-13564.9219 12993.6953 476.0641]","2493":"[-13222.8115 13178.7324 430.2234]","2494":"[-12787.2793 13322.957 372.0393]","2495":"[-12279.3135 13397.5303 304.2189]","2496":"[-11766.9326 13392.3174 235.2361]","2497":"[-11260.3584 13308.0342 167.6617]","2498":"[-10835.5654 13157.2617 110.673]","2499":"[-10488.8359 12959.8984 64.4903]","2500":"[-10189.8018 12710.8936 24.603]","2501":"[-9899.0469 12366.3672 -14.2626]","2502":"[-9653.7588 11944.624 -47.1278]","2503":"[-9464.9189 11467.165 -72.2595]","2504":"[-9334.3047 10970.6807 -89.727]","2505":"[-9248.2373 10460.0859 -100.9913]","2506":"[-9199.1406 9948.8164 -107.3724]","2507":"[-9178.4043 9435.2363 -114.1777]","2508":"[-9174.0098 8919.0156 -136.583]","2509":"[-9174.707 8406.6855 -179.2815]","2510":"[-9174.0742 7892.6831 -234.2312]","2511":"[-9173.8887 7380.4331 -293.6467]","2512":"[-9174.3682 6868.2324 -355.2246]","2513":"[-9173.5039 6356.2891 -417.4937]","2514":"[-9174.3486 5843.2549 -480.4618]","2515":"[-9173.6729 5330.665 -543.4033]","2516":"[-9174.168 4817.7715 -606.3726]","2517":"[-9173.6758 4305.3062 -669.3719]","2518":"[-9173.5381 3791.7791 -732.3615]","2519":"[-9173.8291 3280.2461 -795.2213]","2520":"[-9173.3525 2766.8804 -858.3192]","2521":"[-9174.1279 2255.4866 -921.0752]","2522":"[-9173.4736 1742.2821 -984.1259]","2523":"[-9173.626 1229.9048 -1047.0403]","2524":"[-9173.6689 717.94 -1109.902]","2525":"[-9173.4229 204.5357 -1172.8611]","2526":"[-9173.8652 -307.2971 -1235.8317]","2527":"[-9173.3623 -820.5447 -1298.8149]","2528":"[-9173.6621 -1333.2821 -1361.5596]","2529":"[-9173.5293 -1846.5562 -1423.5455]","2530":"[-9173.8447 -2358.6055 -1483.575]","2531":"[-9174.1455 -2871.2898 -1540.2471]","2532":"[-9173.4336 -3384.0671 -1588.2366]","2533":"[-9173.5068 -3896.2705 -1614.3104]","2534":"[-9173.6445 -4409.4785 -1622.4789]","2535":"[-9173.7354 -4929.5283 -1622.5291]","2536":"[-9172.9668 -5448.3853 -1622.2914]","2537":"[-9161.6162 -5965.5923 -1622.4305]","2538":"[-9133.8096 -6480.4277 -1622.5508]","2539":"[-9087.3896 -6992.6118 -1622.4941]","2540":"[-9019.709 -7503.5713 -1622.5315]","2541":"[-8926.626 -8013.0122 -1622.4695]","2542":"[-8807.6484 -8515.582 -1622.4106]","2543":"[-8660.3174 -9009.04 -1622.5261]","2544":"[-8483.4004 -9490.9072 -1622.5518]","2545":"[-8269.7891 -9965.0547 -1622.667]","2546":"[-8022.1763 -10420.0605 -1622.641]","2547":"[-7740.0938 -10852.0801 -1622.6188]","2548":"[-7423.5869 -11256.7871 -1622.5924]","2549":"[-7068.3813 -11636.4141 -1622.6077]","2550":"[-6682.7319 -11981.4775 -1622.5553]","2551":"[-6270.2607 -12290.1152 -1622.4688]","2552":"[-5835.5435 -12562.1465 -1622.5469]","2553":"[-5377.1475 -12800.6074 -1622.4739]","2554":"[-4903.5264 -13003.8506 -1622.5334]","2555":"[-4418.8159 -13174.0488 -1622.5222]","2556":"[-3926.0042 -13313.6465 -1622.423]","2557":"[-3419.2751 -13426.8193 -1622.4178]","2558":"[-2908.9399 -13513.8457 -1622.3734]","2559":"[-2396.5537 -13577.5762 -1622.3258]","2560":"[-1883.2791 -13619.3975 -1622.4492]","2561":"[-1370.1357 -13642.2549 -1622.3652]","2562":"[-857.7379 -13650.0303 -1622.3894]","2563":"[-338.1085 -13650.8682 -1622.4683]","2564":"[180.3293 -13651.7793 -1622.449]","2565":"[697.5762 -13650.96 -1622.4821]","2566":"[1213.6251 -13651.209 -1622.4781]","2567":"[1729.3901 -13651.4014 -1622.5251]","2568":"[2249.3677 -13651.0742 -1622.4824]","2569":"[2768.2559 -13651.5127 -1622.4603]","2570":"[3286.0742 -13651.1162 -1622.4508]","2571":"[3802.8093 -13651.002 -1622.4276]","2572":"[4318.4746 -13650.9668 -1622.4136]","2573":"[4833.0439 -13650.5449 -1622.4421]","2574":"[5346.4395 -13646.5908 -1622.5352]","2575":"[5866.3853 -13630.8232 -1622.3882]","2576":"[6383.9785 -13595.543 -1622.4553]","2577":"[6898.4424 -13539.9834 -1622.4464]","2578":"[7408.6738 -13462.4512 -1622.4175]","2579":"[7913.0503 -13360.2148 -1622.3679]","2580":"[8409.666 -13230.9502 -1622.4415]","2581":"[8904.1523 -13070.4502 -1622.6241]","2582":"[9385.3008 -12878.4629 -1622.7145]","2583":"[9849.6924 -12653.1338 -1622.6516]","2584":"[10293.3799 -12393.542 -1622.603]","2585":"[10719.0586 -12094.6816 -1622.4827]","2586":"[11116.293 -11760.8174 -1622.7129]","2587":"[11478.6885 -11396.584 -1622.6576]","2588":"[11811.8027 -10997.0938 -1622.5825]","2589":"[12107.7725 -10571.9893 -1622.5153]","2590":"[12366.5947 -10125.7373 -1622.5939]","2591":"[12589.543 -9662.6641 -1622.5184]","2592":"[12778.4395 -9186.6572 -1622.5922]","2593":"[12937.5 -8692.9531 -1622.4379]","2594":"[13066.0029 -8192.1865 -1622.4603]","2595":"[13167.7412 -7686.9097 -1622.4841]","2596":"[13244.1299 -7178.7417 -1622.4424]","2597":"[13298.9863 -6663.3345 -1622.4619]","2598":"[13333.1875 -6147.1001 -1622.3564]","2599":"[13348.6904 -5631.2666 -1622.4866]","2600":"[13353.5986 -5116.3525 -1622.3433]","2601":"[13352.9629 -4602.6108 -1622.282]","2602":"[13340.4922 -4090.4893 -1622.4399]","2603":"[13300.8936 -3573.9951 -1622.3695]","2604":"[13218.0039 -3064.7881 -1622.4761]","2605":"[13083.2031 -2569.605 -1622.5876]","2606":"[12886.3604 -2090.3752 -1622.5751]","2607":"[12624.3428 -1648.2295 -1622.2891]","2608":"[12295.2002 -1246.7188 -1622.369]","2609":"[11934.4717 -872.7379 -1622.5042]","2610":"[11569.8975 -508.3631 -1622.3958]","2611":"[11205.2305 -145.7631 -1622.486]","2612":"[10843.0664 217.7929 -1622.4579]","2613":"[10480.8721 579.7758 -1622.4529]","2614":"[10113.3057 946.9196 -1622.453]","2615":"[9747.2119 1313.9611 -1622.4331]","2616":"[9381.1982 1679.5242 -1622.4856]","2617":"[9016.0771 2044.4166 -1622.4589]","2618":"[8651.9189 2408.7205 -1622.3827]","2619":"[8288.0664 2771.7126 -1622.4392]","2620":"[7926.0469 3134.8464 -1622.4751]","2621":"[7558.7114 3502.0894 -1622.3981]","2622":"[7192.7964 3867.8613 -1622.1749]","2623":"[6828.1411 4232.96 -1622.2437]","2624":"[6463.9282 4596.8506 -1622.2032]","2625":"[6100.5288 4959.856 -1622.208]","2626":"[5738.5596 5322.6084 -1622.1741]","2627":"[5370.8008 5689.5781 -1622.283]","2628":"[5004.7939 6056.6143 -1622.181]","2629":"[4638.6406 6421.771 -1622.256]","2630":"[4274.1157 6786.8408 -1622.1818]","2631":"[3909.5217 7150.1436 -1622.2904]","2632":"[3547.1313 7513.9307 -1622.2477]","2633":"[3184.7036 7875.9087 -1622.2278]","2634":"[2817.2002 8242.4844 -1622.3406]","2635":"[2451.2737 8608.7813 -1622.3656]","2636":"[2086.9045 8974.8076 -1622.4337]","2637":"[1722.1071 9338.5996 -1622.496]","2638":"[1358.3278 9701.4297 -1622.5256]","2639":"[996.5794 10063.9658 -1622.4293]","2640":"[630.5446 10430.834 -1622.376]","2641":"[264.4026 10795.667 -1622.2334]","2642":"[-100.0604 11160.1523 -1622.2959]","2643":"[-462.9668 11523.958 -1622.3492]","2644":"[-825.6285 11886.1465 -1622.3845]","2645":"[-1191.8497 12253.4014 -1622.4996]","2646":"[-1557.6785 12619.1338 -1622.5363]","2647":"[-1922.9546 12983.4785 -1622.3834]","2648":"[-2286.0264 13348.0654 -1622.4539]","2649":"[-2649.4678 13710.375 -1622.452]","2650":"[-3016.7283 14077.9551 -1622.4523]","2651":"[-3383.5693 14443.9697 -1622.4432]","2652":"[-3760.2542 14797.126 -1622.2668]","2653":"[-4156.1704 15124.502 -1622.5941]","2654":"[-4582.4468 15419.6025 -1622.5739]","2655":"[-5034.502 15665.833 -1622.7061]","2656":"[-5517.6484 15852.5752 -1622.5513]","2657":"[-6018.4375 15963.4854 -1622.3605]","2658":"[-6534.3921 16003.8408 -1622.3541]","2659":"[-7050.2671 16007.2754 -1622.4641]","2660":"[-7564.5649 16008.6904 -1622.5278]","2661":"[-8077.2725 16007.9502 -1622.5084]","2662":"[-8595.7285 16008.5342 -1622.4584]","2663":"[-9112.6143 16008.2041 -1622.4564]","2664":"[-9627.9355 16008.5254 -1622.4536]","2665":"[-10141.6807 16008.377 -1622.4521]","2666":"[-10653.8506 16008.4863 -1622.4568]","2667":"[-11171.6221 16008.0459 -1622.4409]","2668":"[-11687.7578 16008.3496 -1622.3619]","2669":"[-12202.2217 16007.6777 -1622.5143]","2670":"[-12714.9766 16007.8271 -1622.4437]","2671":"[-13233.1738 16007.7842 -1622.4545]","2672":"[-13749.6807 16008.2832 -1622.4532]","2673":"[-13834.4248 16008.1436 -1622.4515]"},"3":{"1":"[-5684.7476 15039.6465 -3756.4209]","2":"[-6199.4663 15056.8027 -3756.4556]","3":"[-6708.3145 15115.623 -3756.5195]","4":"[-7209.0005 15233.3184 -3756.3623]","5":"[-7693.7002 15399.5156 -3756.4556]","6":"[-8169.4634 15591.1133 -3756.3997]","7":"[-8650.0898 15777.4717 -3756.3459]","8":"[-9145.3164 15920.6621 -3756.3352]","9":"[-9650.2705 16009.1484 -3756.4275]","10":"[-10161.6025 16042.5752 -3756.4158]","11":"[-10248.2197 16044.8516 -3756.4739]"},"4":{"1":"[-10870.9697 2876.0461 -2732.3955]","2":"[-10851.7891 3389.571 -2732.4009]","3":"[-10790.0303 3900.5088 -2732.4231]","4":"[-10691.5918 4403.1987 -2732.3853]","5":"[-10594.8818 4908.7271 -2732.4729]","6":"[-10534.1016 5421.9829 -2732.4558]","7":"[-10506.9912 5939.0391 -2732.4268]","8":"[-10499.6895 6456.1357 -2732.3462]","9":"[-10498.7041 6968.6128 -2732.3586]","10":"[-10498.8965 7484.6821 -2732.3196]","11":"[-10498.8232 7998.1997 -2732.4529]","12":"[-10498.2842 8510.585 -2732.3843]","13":"[-10498.9365 9027.2412 -2732.4929]","14":"[-10499.2383 9542.0664 -2732.4312]","15":"[-10498.4736 10054.79 -2732.5627]","16":"[-10499.3115 10570.7178 -2732.4778]","17":"[-10498.8154 11083.9873 -2732.4065]","18":"[-10498.4463 11599.6904 -2732.4309]","19":"[-10499.0693 12112.0625 -2732.4797]","20":"[-10498.6924 12626.0029 -2732.4651]","21":"[-10499.0215 13140.9766 -2732.3877]","22":"[-10499.1367 13656.459 -2732.4504]","23":"[-10498.5117 14168.543 -2732.4463]","24":"[-10498.4082 14293.583 -2732.4363]"},"5":{"1":"[-10499.1016 8653.5928 -2732.4209]","2":"[-10499.3047 8552.2803 -2732.4316]","3":"[-10478.5361 8040.644 -2732.4504]","4":"[-10415.5908 7531.7734 -2732.3193]","5":"[-10325.9219 7026.3838 -2732.2939]","6":"[-10258.5771 6518.0098 -2732.4668]","7":"[-10241.1084 6256.7397 -2732.3896]"},"6":{"1":"[-9862.5449 2859.6384 -2732.4199]","2":"[-9881.4268 3372.1169 -2732.5044]","3":"[-9941.2979 3883.0371 -2732.5037]","4":"[-10039.7617 4390.1416 -2732.0195]","5":"[-10137.1777 4894.9668 -2732.293]","6":"[-10198.958 5404.9341 -2732.1785]","7":"[-10226.585 5918.1406 -2732.3113]","8":"[-10234.0381 6430.9316 -2732.4185]","9":"[-10235.0088 6945.4531 -2732.5281]","10":"[-10235.1914 7463.8018 -2732.406]","11":"[-10234.8799 7977.769 -2732.4302]","12":"[-10235.2588 8493.21 -2732.332]","13":"[-10235.2217 9010.167 -2732.3789]","14":"[-10235.3271 9522.9629 -2732.4431]","15":"[-10234.7588 10037.9932 -2732.4866]","16":"[-10234.6953 10551.8457 -2732.4199]","17":"[-10235.4102 11071.3037 -2732.5166]","18":"[-10234.625 11587.127 -2732.4851]","19":"[-10235.1689 12099.3809 -2732.4175]","20":"[-10235.5205 12616.9268 -2732.4824]","21":"[-10234.8359 13130.1836 -2732.481]","22":"[-10235.1455 13647.0703 -2732.4517]","23":"[-10234.6035 14159.7119 -2732.4519]","24":"[-10234.793 14288.9648 -2732.4077]"},"7":{"1":"[-10234.8252 8606.8115 -2732.5483]","2":"[-10235.4902 8505.8613 -2732.374]","3":"[-10258.6172 7990.5928 -2732.3567]","4":"[-10327.5469 7482.2612 -2731.9226]","5":"[-10416.5527 6976.5674 -2732.3235]","6":"[-10480.1611 6466.103 -2732.3516]","7":"[-10505.3428 5984.5674 -2732.426]"},"8":{"1":"[1665.5681 -4909.7021 -2732.3977]","2":"[1750.8396 -5417.0923 -2732.3972]","3":"[1795.9111 -5930.332 -2732.4075]","4":"[1782.5428 -6446.896 -2732.1335]","5":"[1715.8392 -6958.3818 -2732.4668]","6":"[1619.9119 -7463.3911 -2732.4868]","7":"[1530.3253 -7971.896 -2732.3442]","8":"[1483.0995 -8482.4043 -2732.2544]","9":"[1493.1205 -8996.3535 -2732.3369]","10":"[1556.3998 -9505.2305 -2732.373]","11":"[1608.6178 -9794.9531 -2732.4241]"},"9":{"1":"[8464.0391 7329.519 -2219.8528]","2":"[8442.3105 7841.3652 -2219.9539]","3":"[8374.5029 8354.9814 -2220.3052]","4":"[8273.168 8861.0664 -2220.5132]","5":"[8179.0747 9371.3047 -2220.3933]","6":"[8123.2798 9882.373 -2220.4546]","7":"[8099.3086 10398.2432 -2219.7349]","8":"[8093.4692 10912.2705 -2219.491]","9":"[8075.1519 11430.0537 -2219.4182]","10":"[8017.0835 11939.6875 -2219.3787]","11":"[7893.2485 12440.5508 -2219.3975]","12":"[7686.874 12915.2041 -2219.5813]","13":"[7481.8213 13224.7109 -2219.5127]","14":"[7183.6704 13537.7344 -2219.3708]","15":"[6901.502 13745.4111 -2219.3496]","16":"[6447.1436 13970.4863 -2219.2546]","17":"[5965.9585 14111.5957 -2219.384]","18":"[5456.8418 14187.0449 -2219.2791]","19":"[4944.4458 14205.9336 -2219.0903]","20":"[4432.7183 14171.1201 -2219.4001]","21":"[3926.0503 14075.7734 -2219.4194]","22":"[3438.0378 13904.4307 -2219.4736]","23":"[3060.1375 13691.8496 -2219.4058]","24":"[2758.4426 13443.7285 -2219.4385]","25":"[2497.2036 13137.7324 -2219.4592]","26":"[2287.1897 12780.2197 -2219.3794]","27":"[2107.0083 12296.5313 -2219.356]","28":"[2003.8759 11787.6895 -2219.4521]","29":"[1961.5043 11274.5176 -2219.4324]","30":"[1952.2203 10756.7168 -2219.4277]","31":"[1968.1733 10242.7275 -2219.2842]","32":"[2023.9193 9731.7549 -2219.4651]","33":"[2111.8494 9221.8115 -2219.425]","34":"[2212.6255 8715.2051 -2219.4351]","35":"[2314.9934 8207.1914 -2219.3252]","36":"[2415.187 7698.1533 -2219.3589]","37":"[2516.6079 7192.5425 -2219.4209]","38":"[2616.4897 6687.1992 -2219.4226]","39":"[2717.323 6181.7598 -2219.4204]","40":"[2816.991 5679.3799 -2219.3721]","41":"[2918.3196 5170.0103 -2219.4421]","42":"[3018.8171 4663.8726 -2219.4241]","43":"[3118.583 4160.9497 -2219.5229]","44":"[3220.3608 3651.2888 -2219.4163]","45":"[3320.7813 3144.554 -2219.3977]","46":"[3422.0498 2637.3794 -2219.4429]","47":"[3522.4128 2130.531 -2219.4104]","48":"[3622.7124 1624.8605 -2219.3909]","49":"[3723.9478 1116.42 -2219.3987]","50":"[3824.9465 612.8533 -2219.4331]","51":"[3925.6108 104.2535 -2219.4063]","52":"[4025.0479 -398.821 -2219.4634]","53":"[4126.3604 -902.9211 -2219.2979]","54":"[4225.7803 -1406.4818 -2219.3489]","55":"[4292.4487 -1741.5797 -2219.4448]"},"10":{"1":"[8465.4473 6873.0542 -2219.313]","2":"[8465.9063 6770.187 -2219.3118]","3":"[8487.6377 6255.9019 -2219.3662]","4":"[8557.4531 5744.3428 -2219.3228]","5":"[8684.1133 5244.6875 -2219.5649]","6":"[8859.2363 4759.811 -2219.4839]","7":"[9053.0117 4281.4937 -2219.428]","8":"[9233.0469 3799.1748 -2219.4509]","9":"[9366.4316 3304.6978 -2219.3796]","10":"[9444.5186 2797.9265 -2219.259]","11":"[9471.0947 2285.0151 -2219.6453]","12":"[9472.6074 2169.4646 -2219.71]"},"11":{"1":"[14452.4785 -2731.0142 -369.4182]","2":"[14454.2002 -2831.9658 -369.4692]","3":"[14482.083 -3343.5774 -369.4999]","4":"[14557.5244 -3853.1855 -369.3214]","5":"[14659.2002 -4357.2568 -369.4039]","6":"[14747.3506 -4862.127 -369.2599]","7":"[14798.8984 -5374.5898 -369.2908]","8":"[14819.1982 -5889.1943 -371.5239]","9":"[14823.8555 -6405.9067 -386.2061]","10":"[14824.1826 -6919.1714 -420.1409]","11":"[14824.2656 -7435.9111 -460.6422]","12":"[14824.4912 -7952.4697 -487.708]","13":"[14824.7656 -8469.334 -497.2754]","14":"[14824.791 -8987.0361 -497.3188]","15":"[14824.8252 -9504.7686 -497.4149]","16":"[14824.5078 -10023.4893 -497.5075]","17":"[14824.1074 -10536.4775 -497.3666]","18":"[14823.96 -11050.8027 -497.3991]","19":"[14824.3506 -11568.084 -497.403]","20":"[14824.457 -12084.0654 -497.4504]","21":"[14824.2295 -12596.1074 -497.4329]","22":"[14824.0693 -13112.5508 -497.4748]","23":"[14824.9277 -13624.9541 -497.4376]","24":"[14823.834 -14141.4824 -497.4262]","25":"[14823.8789 -14657.0488 -497.4437]","26":"[14824.4023 -15158.624 -497.4097]"},"12":{"1":"[14824.7061 -10471.8936 -497.4314]","2":"[14842.1445 -9958.9053 -497.4393]","3":"[14900.6436 -9446.8135 -497.5256]","4":"[14989.5449 -8939.2881 -497.4455]","5":"[15061.46 -8430.8877 -497.1534]","6":"[15087.6133 -7918.98 -486.7771]","7":"[15087.8369 -7895.8794 -485.8729]"},"13":{"1":"[15459.5244 -2775.7981 -369.4145]","2":"[15457.3789 -2876.5476 -369.3204]","3":"[15426.6797 -3389.1758 -369.2701]","4":"[15346.6777 -3899.5076 -369.3903]","5":"[15243.6523 -4403.4243 -369.3727]","6":"[15157.8711 -4913.2451 -369.4397]","7":"[15109.9346 -5429.7661 -369.2259]","8":"[15091.8701 -5943.3579 -372.2113]","9":"[15087.8271 -6457.4341 -388.7292]","10":"[15088.083 -6972.0869 -424.4951]","11":"[15087.9932 -7483.1079 -464.1251]","12":"[15088.3145 -8000.6929 -489.0957]","13":"[15088.291 -8513.501 -497.4406]","14":"[15088.2754 -9031.9248 -497.169]","15":"[15088.3994 -9544.6934 -497.3565]","16":"[15088.2432 -10061.2842 -497.4388]","17":"[15088.29 -10573.668 -497.4427]","18":"[15087.8008 -11090.1865 -497.4804]","19":"[15088.7334 -11602.541 -497.382]","20":"[15088.7197 -12118.8389 -497.4926]","21":"[15088.373 -12630.9336 -497.3958]","22":"[15088.416 -13146.7646 -497.4641]","23":"[15088.2754 -13663.2471 -497.4361]","24":"[15087.9932 -14176.5176 -497.4692]","25":"[15088.0967 -14691.3916 -497.4488]","26":"[15088.2773 -15158.3818 -497.4299]"},"14":{"1":"[15088.3174 -10517.4385 -497.337]","2":"[15073.7637 -10003.3516 -497.3589]","3":"[15020.3604 -9491.54 -496.9701]","4":"[14931.2314 -8984.3027 -497.3188]","5":"[14855.6484 -8476.3047 -497.207]","6":"[14826.627 -7965.0142 -488.1588]","7":"[14824.6279 -7774.7686 -481.018]"},"15":{"1":"[-2072.5559 -13606.8916 -7494.1548]","2":"[-2585.6052 -13590.5117 -7494.2002]","3":"[-3095.532 -13532.8281 -7494.0781]","4":"[-3597.5498 -13417.1309 -7494.0869]","5":"[-4086.3401 -13251.4805 -7494.2886]","6":"[-4563.9575 -13058.9697 -7494.1948]","7":"[-5042.9023 -12872.9463 -7494.2314]","8":"[-5537.064 -12728.0215 -7494.0288]","9":"[-6042.8818 -12638.6738 -7494.0703]","10":"[-6555.4917 -12602.6621 -7488.6216]","11":"[-6624.7017 -12598.6367 -7488.6069]"},"16":{"1":"[5518.9653 -11179.8574 -8900.0264]","2":"[5419.165 -11180.2002 -8892.5713]","3":"[4904.5747 -11180.0928 -8843.9697]","4":"[4388.2876 -11180.3184 -8786.5869]","5":"[3879.6548 -11179.9346 -8726.6611]","6":"[3367.1443 -11180.1875 -8664.6191]","7":"[2849.8997 -11180.7041 -8601.4639]","8":"[2333.4307 -11179.8213 -8537.9863]","9":"[1822.1011 -11180.6094 -8475.3174]","10":"[1302.9396 -11180.5352 -8411.4775]","11":"[780.661 -11180.4023 -8347.3496]","12":"[265.732 -11180.7578 -8284.123]","13":"[-257.8615 -11180.3555 -8219.9102]","14":"[-774.1168 -11180.4023 -8156.4312]","15":"[-1296.4147 -11180.4639 -8092.3193]","16":"[-1809.7366 -11180.0625 -8029.3032]","17":"[-2330.4265 -11180.2568 -7965.3936]","18":"[-2839.0793 -11180.4795 -7902.9004]","19":"[-3363.8037 -11180.6387 -7838.4673]","20":"[-3879.4321 -11180.5117 -7775.1528]","21":"[-4388.9165 -11179.8799 -7712.6689]","22":"[-4908.4351 -11180.2041 -7648.8228]","23":"[-5435.998 -11180.793 -7583.9902]","24":"[-5950.7275 -11180.4463 -7520.8838]","25":"[-6471.6826 -11180.2793 -7456.9663]","26":"[-6997.4482 -11180.5615 -7392.3452]","27":"[-7508.5786 -11180.6426 -7329.5615]","28":"[-8022.6338 -11180.4092 -7266.4385]","29":"[-8538.1045 -11180.3916 -7203.1226]","30":"[-9053.4619 -11180.7402 -7139.9404]","31":"[-9571.9883 -11180.4619 -7076.2544]","32":"[-10092.2334 -11180.4229 -7013.2227]","33":"[-10610.8994 -11180.4219 -6951.8022]","34":"[-11126.957 -11180.3516 -6893.6924]","35":"[-11639.3193 -11180.3242 -6842.6602]","36":"[-12156.1592 -11179.627 -6809.3442]","37":"[-12671.2803 -11158.9961 -6796.5713]","38":"[-13183.3789 -11094.8193 -6796.4067]","39":"[-13680.502 -10964.082 -6796.4058]","40":"[-14146.502 -10751.1514 -6796.2793]","41":"[-14442.8398 -10546.375 -6796.355]","42":"[-14756.8389 -10235.375 -6796.4424]","43":"[-14961.2969 -9945.543 -6796.4312]","44":"[-15179.0303 -9482.0918 -6796.2778]","45":"[-15314.6846 -8982.2129 -6796.4014]","46":"[-15382.0547 -8469.8994 -6796.3013]","47":"[-15402.8945 -7952.0684 -6796.4224]","48":"[-15404.292 -7430.3242 -6796.4893]","49":"[-15404.6484 -6911.1577 -6796.3989]","50":"[-15404.7021 -6391.5859 -6796.4966]","51":"[-15403.873 -5872.2202 -6796.4121]","52":"[-15404.0625 -5350.2065 -6796.4209]","53":"[-15404.2773 -4834.105 -6796.4189]","54":"[-15404.6309 -4312.2798 -6796.501]","55":"[-15404.3438 -3785.8848 -6796.5449]","56":"[-15404.0947 -3258.7322 -6796.5063]","57":"[-15404.2402 -2736.6458 -6796.4688]","58":"[-15404.7236 -2213.7068 -6796.4956]","59":"[-15404.7471 -1698.5889 -6796.4438]","60":"[-15404.541 -1172.1184 -6796.4341]","61":"[-15404.5391 -647.5566 -6796.4248]","62":"[-15404.3496 -122.594 -6796.5225]","63":"[-15404.4648 389.4152 -6796.4761]","64":"[-15404.2285 917.8057 -6796.3462]","65":"[-15403.7285 1444.3104 -6796.4155]","66":"[-15404.3174 1968.9227 -6794.502]","67":"[-15404.2979 2497.9331 -6774.0283]","68":"[-15403.7383 3014.1501 -6731.5435]","69":"[-15404.2256 3532.4958 -6676.1553]","70":"[-15403.9014 4054.8867 -6615.5483]","71":"[-15404.0723 4581.8398 -6552.1816]","72":"[-15404.8994 5102.7378 -6488.5825]","73":"[-15404.7227 5619.1147 -6425.5781]","74":"[-15404.1426 6133.5977 -6362.4834]","75":"[-15404.4795 6645.7373 -6299.6104]","76":"[-15405.1035 7161.0127 -6236.2671]","77":"[-15404.8887 7677.7603 -6172.8794]","78":"[-15403.915 8192.1338 -6109.772]","79":"[-15404.8867 8700.9814 -6047.5293]","80":"[-15404.5547 9210.4814 -5985.9985]","81":"[-15404.8389 9722.041 -5926.085]","82":"[-15404.3701 10234.9053 -5869.4341]","83":"[-15404.54 10745.3027 -5821.376]","84":"[-15404.7822 11262.001 -5794.6172]","85":"[-15401.6426 11777.501 -5785.0396]","86":"[-15373.5938 12292.1572 -5785.1738]","87":"[-15294.1895 12799.2949 -5785.373]","88":"[-15144.752 13291.6426 -5785.355]","89":"[-14924.3086 13725.7773 -5785.6343]","90":"[-14714.624 14004.1191 -5785.5742]","91":"[-14383.9648 14312.0703 -5785.4624]","92":"[-14095.2109 14498.9434 -5785.2734]","93":"[-13620.0908 14703.3867 -5785.2998]","94":"[-13120.4912 14825.7686 -5785.374]","95":"[-12603.625 14882.9727 -5784.9204]","96":"[-12087.0332 14899.292 -5785.1719]","97":"[-11573.8164 14898.167 -5784.8877]","98":"[-11053.248 14899.085 -5784.8989]","99":"[-10530.4355 14899.0166 -5784.8677]","100":"[-10012.291 14899.3779 -5784.8823]","101":"[-9493.7012 14898.9814 -5784.9082]","102":"[-8973.4111 14898.9863 -5784.9077]","103":"[-8454.9863 14899.3467 -5784.873]","104":"[-7938.4004 14899.0771 -5784.9141]","105":"[-7413.3525 14898.8369 -5784.9502]","106":"[-6888.1631 14898.999 -5784.8086]","107":"[-6376.0811 14899.0234 -5784.8975]","108":"[-5852.1948 14899.4385 -5784.9165]","109":"[-5332.1836 14899.1387 -5784.9038]","110":"[-4814.5034 14899.1357 -5784.9053]","111":"[-4297.2354 14898.5986 -5785.1128]","112":"[-3784.1001 14876.9141 -5785.0869]","113":"[-3269.7175 14811.7568 -5785.1992]","114":"[-2766.4773 14674.9463 -5785.4097]","115":"[-2299.0232 14454.6104 -5785.2573]","116":"[-2006.8336 14247.999 -5785.5044]","117":"[-1709.613 13947.8438 -5785.3687]","118":"[-1492.7274 13633.6143 -5785.1919]","119":"[-1287.4567 13184.2559 -5785.3687]","120":"[-1154.2697 12681.6191 -5785.3013]","121":"[-1089.1102 12167.8164 -5784.981]","122":"[-1069.0697 11645.2744 -5785.082]","123":"[-1069.0673 11124.0156 -5771.0322]","124":"[-1069.1348 10599.6182 -5736.3491]","125":"[-1068.5175 10087.501 -5684.3174]","126":"[-1069.8293 9574.917 -5625.9546]","127":"[-1068.6647 9049.8945 -5563.6353]","128":"[-1068.4429 8540.9492 -5502.3257]","129":"[-1068.4012 8030.5435 -5441.814]","130":"[-1068.4486 7519.3984 -5383.3491]","131":"[-1068.7521 7001.1738 -5329.6289]","132":"[-1068.749 6487.1455 -5291.311]","133":"[-1068.9097 5971.6841 -5274.7598]","134":"[-1069.381 5448.9785 -5273.5264]","135":"[-1068.7133 4927.7935 -5273.314]","136":"[-1068.9852 4406.5947 -5273.3774]","137":"[-1069.573 3889.4258 -5273.439]","138":"[-1068.9806 3367.9844 -5273.4229]","139":"[-1068.913 2850.1274 -5273.418]","140":"[-1069.1246 2328.2776 -5273.3442]","141":"[-1069.3137 1809.4321 -5273.4111]","142":"[-1068.8923 1286.6053 -5273.4688]","143":"[-1069.0417 761.3607 -5273.3882]","144":"[-1069.7817 237.9673 -5273.2295]","145":"[-1068.9418 -283.5324 -5273.3926]","146":"[-1068.7813 -803.2028 -5273.4155]","147":"[-1069.2131 -1321.0343 -5273.4248]","148":"[-1069.4551 -1837.0529 -5273.4268]","149":"[-1068.8628 -2349.9243 -5273.3975]","150":"[-1068.7008 -2877.1797 -5273.438]","151":"[-1068.724 -3401.5579 -5273.4756]","152":"[-1069.123 -3923.1584 -5273.4751]","153":"[-1068.929 -4442.5562 -5273.4492]","154":"[-1068.6428 -4959.9468 -5273.4287]","155":"[-1068.8357 -5475.3438 -5273.4248]","156":"[-1070.0065 -5988.6177 -5273.2544]","157":"[-1086.7894 -6511.8613 -5273.0996]","158":"[-1139.1967 -7029.3901 -5273.6025]","159":"[-1237.9387 -7535.8589 -5273.2222]","160":"[-1396.3795 -8036.6851 -5272.8618]","161":"[-1619.1816 -8507.6621 -5273.1445]","162":"[-1912.2506 -8933.4512 -5273.1729]","163":"[-2270.8291 -9300.9961 -5273.2466]","164":"[-2696.5378 -9605.8271 -5273.0957]","165":"[-3163.1902 -9838.2471 -5273.4253]","166":"[-3659.0403 -10002.5762 -5273.3047]","167":"[-4162.9634 -10108.0273 -5273.3242]","168":"[-4672.7036 -10165.1846 -5273.4424]","169":"[-5196.23 -10183.0742 -5272.8608]","170":"[-5715.8262 -10160.9023 -5273.1875]","171":"[-6227.8115 -10097.2334 -5273.3164]","172":"[-6739.7515 -9983.8154 -5273.019]","173":"[-7230.7534 -9810.3223 -5273.5337]","174":"[-7689.0483 -9571.543 -5273.2539]","175":"[-8099.4868 -9264.0977 -5273.2046]","176":"[-8455.6035 -8883.6777 -5273.2563]","177":"[-8740.4492 -8450.7305 -5273.2998]","178":"[-8953.0723 -7980.4868 -5273.2437]","179":"[-9101.9199 -7488.3198 -5273.3589]","180":"[-9195.7949 -6981.4263 -5273.2939]","181":"[-9245.1152 -6465.7275 -5273.375]","182":"[-9259.3115 -5948.3613 -5273.3721]","183":"[-9261.1895 -5432.3809 -5273.4614]","184":"[-9259.459 -4912.8359 -5273.4023]","185":"[-9260.9229 -4394.0474 -5273.5063]","186":"[-9260.4482 -3879.1904 -5273.4478]","187":"[-9259.7754 -3352.272 -5273.4248]","188":"[-9260.251 -2835.2437 -5273.4185]","189":"[-9260.6475 -2307.364 -5273.4497]","190":"[-9260.1758 -1785.9907 -5273.4209]","191":"[-9260.083 -1271.9915 -5273.3604]","192":"[-9260.6924 -751.6728 -5273.4048]","193":"[-9260.3496 -230.1136 -5273.4521]","194":"[-9259.958 289.5346 -5273.3789]","195":"[-9260.0508 807.2825 -5273.2935]","196":"[-9260.1621 1323.1759 -5273.377]","197":"[-9260.4209 1837.2067 -5273.4009]","198":"[-9260.6523 2359.9744 -5273.3936]","199":"[-9260.2871 2883.6086 -5273.3916]","200":"[-9259.3184 3402.8679 -5273.3848]","201":"[-9260.8076 3922.1951 -5273.2983]","202":"[-9260.4434 4438.1431 -5273.4165]","203":"[-9259.9131 4952.0894 -5273.3589]","204":"[-9260.7197 5478.271 -5273.3745]","205":"[-9260.1309 5999.0078 -5273.2803]","206":"[-9260.8721 6521.0659 -5273.3677]","207":"[-9260.3623 7041.0918 -5273.4404]","208":"[-9260.2568 7559.1182 -5273.4253]","209":"[-9260.4727 8075.1724 -5273.4238]","210":"[-9260.4258 8589.2637 -5273.3633]","211":"[-9260.3037 9101.4072 -5273.4561]","212":"[-9260.8809 9625.7402 -5273.4893]","213":"[-9259.6074 10147.9141 -5273.1631]","214":"[-9245.0049 10667.1768 -5273.3975]","215":"[-9196.8623 11180.9453 -5273.3638]","216":"[-9102.8926 11684.8848 -5273.2578]","217":"[-8952.6885 12185.5713 -5273.2529]","218":"[-8736.9941 12657.3223 -5273.1816]","219":"[-8453.9912 13087.1221 -5273.1289]","220":"[-8094.2178 13468.7412 -5273.2734]","221":"[-7675.4331 13779.4082 -5272.9458]","222":"[-7214.6387 14016.6992 -5273.3511]","223":"[-6727.0352 14186.165 -5273.4106]","224":"[-6224.9082 14297.0547 -5273.3823]","225":"[-5716.3994 14359.7324 -5273.2939]","226":"[-5194.9038 14383.9609 -5273.4863]","227":"[-4670.0415 14388.2715 -5273.3862]","228":"[-4144.6543 14386.8936 -5273.4819]","229":"[-3621.3635 14387.4756 -5273.4409]","230":"[-3100.1382 14387.835 -5273.4307]","231":"[-2580.9771 14387.5107 -5273.3462]","232":"[-2063.823 14387.3662 -5273.4497]","233":"[-1548.7195 14387.7129 -5273.5137]","234":"[-1035.6228 14387.124 -5273.5044]","235":"[-521.0953 14387.5869 -5273.3433]","236":"[4.6396 14387.5791 -5273.4019]","237":"[521.9709 14387.0654 -5273.4189]","238":"[1039.2723 14387.1895 -5273.4199]","239":"[1554.7543 14387.6152 -5273.3867]","240":"[2068.4307 14387.5127 -5273.4546]","241":"[2597.8962 14387.2568 -5273.4985]","242":"[3125.4609 14387.4746 -5273.5068]","243":"[3651.1133 14387.7822 -5273.417]","244":"[4174.8784 14387.79 -5273.4365]","245":"[4689.9434 14387.5791 -5273.439]","246":"[5212.3242 14387.4746 -5273.4268]","247":"[5727.9551 14387.3936 -5273.3926]","248":"[6241.666 14387.4014 -5273.4048]","249":"[6764.1089 14387.3691 -5273.4961]","250":"[7283.0591 14382.3916 -5273.271]","251":"[7798.188 14352 -5273.1265]","252":"[8306.0049 14281.6787 -5273.2329]","253":"[8813.8438 14158.4004 -5273.1919]","254":"[9299.0234 13976.4063 -5273.0229]","255":"[9748.7285 13726.4766 -5273.4307]","256":"[10159.3281 13400.7236 -5273.3584]","257":"[10495.4863 13020.251 -5273.3828]","258":"[10769.2949 12580.0518 -5273.4146]","259":"[10971.6104 12105.8379 -5273.1113]","260":"[11110.6563 11611.4482 -5273.1284]","261":"[11198.4131 11094.582 -5273.1367]","262":"[11240.1621 10574.3447 -5273.27]","263":"[11251.4004 10054.2979 -5273.4678]","264":"[11251.1973 9536.0654 -5273.4478]","265":"[11251.2129 9020.4023 -5273.4595]","266":"[11251.5371 8504.4668 -5273.4287]","267":"[11251.5107 7977.9951 -5273.4229]","268":"[11251.501 7463.0894 -5273.4258]","269":"[11251.0605 6937.2358 -5273.4302]","270":"[11251.043 6420.5361 -5273.478]","271":"[11251.4697 5899.9902 -5273.4194]","272":"[11251.4736 5374.9224 -5273.4453]","273":"[11251.6484 4851.7417 -5273.4839]","274":"[11251.4824 4330.417 -5273.4473]","275":"[11250.834 3810.947 -5273.4307]","276":"[11251.1816 3293.3179 -5273.3765]","277":"[11251.8174 2777.5005 -5273.4395]","278":"[11251.2744 2263.5022 -5273.4619]","279":"[11251.1982 1751.3064 -5273.3164]","280":"[11251.4277 1222.6715 -5273.3789]","281":"[11251.249 699.8514 -5273.4375]","282":"[11251.2109 172.1956 -5273.3784]","283":"[11251.3369 -355.5267 -5273.3218]","284":"[11251.2031 -881.2529 -5273.3882]","285":"[11251.373 -1404.9948 -5273.3252]","286":"[11251.0088 -1926.7977 -5273.3984]","287":"[11251.2266 -2450.1458 -5273.4268]","288":"[11250.9082 -2973.311 -5278.8022]","289":"[11251.2129 -3495.0869 -5302.1641]","290":"[11250.9219 -4008.896 -5347.8154]","291":"[11250.7783 -4523.0679 -5403.582]","292":"[11251.1201 -5043.5015 -5464.3882]","293":"[11251.2236 -5555.1836 -5525.5933]","294":"[11251.6904 -6070.1211 -5587.0723]","295":"[11251.459 -6586.4077 -5648.022]","296":"[11251.4443 -7110.6445 -5705.8286]","297":"[11251.5811 -7631.2402 -5753.6304]","298":"[11251.377 -8145.8442 -5778.1963]","299":"[11251.3457 -8671.5029 -5785.686]","300":"[11251.3867 -9196.502 -5785.479]","301":"[11251.377 -9719.3838 -5785.4253]","302":"[11251.6104 -10240.208 -5785.2944]","303":"[11251.4922 -10758.9121 -5785.4297]","304":"[11247.8877 -11274.71 -5785.1787]","305":"[11219.96 -11796.4707 -5785.3008]","306":"[11152.9824 -12315.2041 -5785.3633]","307":"[11036.4482 -12816.0996 -5785.3872]","308":"[10862.0947 -13298.7549 -5785.2544]","309":"[10618.8779 -13756.5664 -5785.397]","310":"[10306.6445 -14165.0029 -5785.4526]","311":"[9924.001 -14517.1895 -5785.3877]","312":"[9490.1357 -14797.25 -5785.4321]","313":"[9021.0605 -15006.3115 -5785.2949]","314":"[8521.6426 -15153.4424 -5785.4092]","315":"[8012.2397 -15245.1865 -5785.3135]","316":"[7500.3154 -15291.0303 -5785.4165]","317":"[6985.7505 -15305.207 -5798.5752]","318":"[6469.4966 -15305.4512 -5830.749]","319":"[5950.9097 -15306.8252 -5882.502]","320":"[5436.228 -15305.2822 -5940.3877]","321":"[4916.1392 -15306.5215 -6002.0376]","322":"[4406.0532 -15305.8301 -6063.9248]","323":"[3897.6814 -15305.9531 -6126.1963]","324":"[3380.4963 -15306.1045 -6189.689]","325":"[2870.7241 -15305.8604 -6252.2705]","326":"[2356.7229 -15305.6934 -6315.3389]","327":"[1840.1534 -15306.2646 -6378.7769]","328":"[1322.6 -15306.1748 -6442.3252]","329":"[808.8389 -15305.8799 -6505.3398]","330":"[300.2185 -15305.9375 -6567.8491]","331":"[-216.0235 -15306.4316 -6631.2881]","332":"[-729.3888 -15306.0977 -6694.3335]","333":"[-1238.113 -15306 -6756.7153]","334":"[-1746.5685 -15306.3018 -6819.1772]","335":"[-2269.8577 -15306.1582 -6883.4277]","336":"[-2790.8577 -15306.1064 -6947.396]","337":"[-3308.1555 -15306.0186 -7010.8823]","338":"[-3820.3669 -15305.6992 -7073.811]","339":"[-4344.4565 -15306.1016 -7138.2144]","340":"[-4861.6797 -15305.8848 -7201.728]","341":"[-5370.73 -15306.1348 -7264.168]","342":"[-5881.2861 -15306.1045 -7326.9146]","343":"[-6400.2295 -15305.6943 -7390.5996]","344":"[-6913.7495 -15305.6748 -7453.6284]","345":"[-7431.5693 -15306.0537 -7517.1206]","346":"[-7949.3638 -15305.9629 -7580.7686]","347":"[-8462.499 -15306.3896 -7643.6611]","348":"[-8975.7236 -15306.333 -7705.6499]","349":"[-9491.4453 -15306.5898 -7766.9956]","350":"[-10009.2168 -15306.5596 -7825.1079]","351":"[-10521.292 -15306.2969 -7875.6675]","352":"[-11042.043 -15306.4658 -7907.665]","353":"[-11560.0117 -15306.4795 -7919.5903]","354":"[-12075.6484 -15305.2148 -7919.5215]","355":"[-12594.8037 -15280.5635 -7919.1279]","356":"[-13103.1475 -15210.1816 -7919.3975]","357":"[-13598.6963 -15071.4473 -7919.2065]","358":"[-14054.7725 -14851.8008 -7919.1387]","359":"[-14334.6553 -14650.5479 -7919.4185]","360":"[-14652.0693 -14324.3936 -7919.4019]","361":"[-14847.1201 -14037.0635 -7919.415]","362":"[-15058.2813 -13568.9922 -7919.3691]","363":"[-15188.1064 -13067.123 -7919.2832]","364":"[-15250.6504 -12557.7705 -7919.2344]","365":"[-15269.1641 -12045.46 -7923.8931]","366":"[-15269.1748 -11531.624 -7947.2285]","367":"[-15270.2227 -11016.5693 -7991.1074]","368":"[-15270.2305 -10499.584 -8046.6943]","369":"[-15269.875 -9982.9971 -8106.9829]","370":"[-15270.248 -9473.5762 -8168.147]","371":"[-15270.1045 -8955.2178 -8231.3018]","372":"[-15270.6182 -8444.2393 -8294.1094]","373":"[-15271.0811 -7932.8433 -8356.875]","374":"[-15270.4746 -7411.1235 -8420.9365]","375":"[-15269.9131 -6895.209 -8484.3369]","376":"[-15270.7305 -6373.748 -8548.3662]","377":"[-15270.3799 -5863.7183 -8610.9658]","378":"[-15270.0684 -5352.52 -8673.3213]","379":"[-15270.6318 -4841.7769 -8734.875]","380":"[-15270.1797 -4319.9219 -8795.8516]","381":"[-15270.4629 -3797.5054 -8853.207]","382":"[-15270.4336 -3279.6167 -8900.2627]","383":"[-15269.3721 -2755.6028 -8924.5576]","384":"[-15257.6191 -2226.9663 -8930.6191]","385":"[-15228.2217 -1713.653 -8930.1494]","386":"[-15177.4863 -1186.085 -8930.2393]","387":"[-15103.8721 -663.8593 -8930.3047]","388":"[-15005.9697 -149.2033 -8930.249]","389":"[-14880.918 356.9326 -8930.375]","390":"[-14726.9512 852.7014 -8930.4697]","391":"[-14542.4053 1335.5033 -8930.457]","392":"[-14320.2217 1810.8513 -8930.4561]","393":"[-14067.3906 2259.031 -8930.334]","394":"[-13779.9365 2682.9495 -8930.0303]","395":"[-13447.2471 3092.8853 -8930.2236]","396":"[-13080.5645 3469.1775 -8930.3193]","397":"[-12683.5684 3809.604 -8930.2461]","398":"[-12260.167 4112.6255 -8930.1709]","399":"[-11814.8311 4377.9165 -8930.1816]","400":"[-11352.0439 4606.5435 -8930.3096]","401":"[-10875.9561 4800.4282 -8930.3955]","402":"[-10373.1133 4966.6592 -8930.3252]","403":"[-9863.1064 5101.3662 -8930.2305]","404":"[-9348.2637 5206.7964 -8930.2012]","405":"[-8830.7725 5286.4326 -8930.2969]","406":"[-8312.2832 5342.752 -8930.1826]","407":"[-7794.0933 5377.8584 -8930.1914]","408":"[-7277.9629 5394.1958 -8930.4805]","409":"[-6763.7432 5397.1509 -8930.5244]","410":"[-6251.4282 5396.8818 -8930.4199]","411":"[-5723.979 5397.0752 -8930.3545]","412":"[-5198.8394 5397.2036 -8930.293]","413":"[-4680.2642 5396.8164 -8930.3955]","414":"[-4163.4736 5397.4204 -8930.4365]","415":"[-3648.6272 5397.0908 -8930.5107]","416":"[-3135.6936 5396.8921 -8930.4609]","417":"[-2610.5286 5397.5386 -8930.291]","418":"[-2088.8403 5396.5903 -8930.373]","419":"[-1574.0404 5397.2959 -8930.4043]","420":"[-1054.9766 5397.1631 -8930.4258]","421":"[-541.0719 5396.7104 -8930.4463]","422":"[-27.88 5397.3496 -8930.415]","423":"[32.0801 5396.3413 -8930.29]"},"17":{"1":"[-5.4018 6404.8491 -8930.4209]","2":"[-107.5083 6404.8486 -8930.458]","3":"[-621.8191 6405.1279 -8930.4629]","4":"[-1136.0247 6404.8452 -8930.4482]","5":"[-1655.3812 6405.2769 -8930.3564]","6":"[-2177.3679 6404.7393 -8930.5293]","7":"[-2690.6777 6405.1167 -8930.3926]","8":"[-3217.5635 6404.8237 -8930.4746]","9":"[-3742.4534 6404.9966 -8930.458]","10":"[-4265.3267 6404.7422 -8930.2646]","11":"[-4786.2358 6405.2207 -8930.3418]","12":"[-5305.1792 6404.8008 -8930.5088]","13":"[-5822.1841 6405.0938 -8930.4971]","14":"[-6337.2397 6404.7822 -8930.3516]","15":"[-6850.3726 6405.3145 -8930.3896]","16":"[-7376.2515 6404.4297 -8930.2041]","17":"[-7900.0034 6399.4956 -8930.4131]","18":"[-8420.3584 6379.6348 -8930.3105]","19":"[-8934.4375 6341.1812 -8930.4287]","20":"[-9450.0469 6281.0791 -8930.5088]","21":"[-9960.2393 6198.4707 -8930.3926]","22":"[-10463.3809 6090.4199 -8930.4023]","23":"[-10957.9717 5956.3779 -8930.3564]","24":"[-11457.4336 5786.9629 -8930.5996]","25":"[-11941.6523 5585.355 -8930.4131]","26":"[-12406.8027 5348.5098 -8930.3613]","27":"[-12850.0059 5077.7139 -8930.3984]","28":"[-13266.251 4771.4619 -8930.4033]","29":"[-13652.9531 4432.5659 -8930.3438]","30":"[-14008.5488 4059.8345 -8930.375]","31":"[-14334.1729 3652.3462 -8930.2441]","32":"[-14619.5781 3224.4897 -8930.3145]","33":"[-14872.4219 2767.9092 -8930.3164]","34":"[-15092.5967 2287.2681 -8930.3486]","35":"[-15276.0449 1797.9171 -8930.3213]","36":"[-15425.8789 1301.0996 -8930.1543]","37":"[-15546.3086 800.1798 -8930.2217]","38":"[-15641.9971 281.706 -8930.3252]","39":"[-15711.6924 -232.3162 -8930.2988]","40":"[-15760.8477 -760.877 -8930.2441]","41":"[-15788.1611 -1281.7568 -8930.2021]","42":"[-15797.9668 -1810.36 -8930.5771]","43":"[-15798.1885 -2326.9365 -8930.3018]","44":"[-15797.5215 -2853.9341 -8921.8389]","45":"[-15798.1338 -3386.5449 -8892.5879]","46":"[-15798.1348 -3904.366 -8842.3184]","47":"[-15797.7695 -4430.7837 -8783.3311]","48":"[-15797.8467 -4961.123 -8720.6533]","49":"[-15797.915 -5490.6621 -8656.4268]","50":"[-15797.7666 -6016.4761 -8592.209]","51":"[-15797.9043 -6538.0386 -8528.127]","52":"[-15797.8701 -7050.8506 -8465.083]","53":"[-15797.7979 -7573.1816 -8401.0635]","54":"[-15797.9424 -8083.4917 -8338.4063]","55":"[-15797.8154 -8601.5576 -8274.7871]","56":"[-15797.7998 -9125.9893 -8210.3662]","57":"[-15798.0293 -9636.8662 -8148.2134]","58":"[-15797.3896 -10157.2305 -8086.354]","59":"[-15797.6787 -10677.2881 -8026.7358]","60":"[-15797.7637 -11197.7822 -7973.354]","61":"[-15797.5596 -11716.7939 -7936.3271]","62":"[-15797.8916 -12236.4336 -7920.6411]","63":"[-15797.8408 -12752.6953 -7919.3057]","64":"[-15781.7363 -13272.7021 -7919.2534]","65":"[-15726.5801 -13787.8037 -7919.3521]","66":"[-15604.0234 -14286.6582 -7918.9834]","67":"[-15400.1045 -14763.6162 -7919.4238]","68":"[-15202.9697 -15065.2412 -7919.1792]","69":"[-14895.5605 -15392.501 -7919.3608]","70":"[-14626.6445 -15593.0586 -7919.3052]","71":"[-14165.5459 -15824.8457 -7919.436]","72":"[-13668.0234 -15973.2148 -7919.3091]","73":"[-13150.8936 -16047.3857 -7919.2192]","74":"[-12626.1709 -16072.6279 -7919.2861]","75":"[-12108.8203 -16074.5439 -7919.4653]","76":"[-11591.3877 -16073.6133 -7919.3296]","77":"[-11079.251 -16074.2705 -7908.644]","78":"[-10549.8594 -16074.0635 -7877.269]","79":"[-10037.7549 -16073.5703 -7826.5576]","80":"[-9511.1914 -16074.332 -7767.3789]","81":"[-9001.3848 -16074.2549 -7707.0449]","82":"[-8491.9824 -16073.4043 -7645.5024]","83":"[-7961.5747 -16073.2217 -7580.2959]","84":"[-7435.4009 -16073.7939 -7515.6001]","85":"[-6916.2134 -16074.0547 -7451.9336]","86":"[-6406.7681 -16073.7578 -7389.4131]","87":"[-5881.6382 -16073.5615 -7324.9487]","88":"[-5369.7778 -16073.4668 -7262.0825]","89":"[-4844.0449 -16073.3428 -7197.5439]","90":"[-4335.2729 -16073.4014 -7135.0991]","91":"[-3797.4167 -16073.585 -7069.0591]","92":"[-3266.7954 -16073.5283 -7003.9248]","93":"[-2743.4106 -16073.1846 -6939.5552]","94":"[-2227.1277 -16073.2959 -6876.2124]","95":"[-1717.9338 -16073.7363 -6813.6914]","96":"[-1188.0939 -16073.96 -6748.6245]","97":"[-666.0563 -16073.6641 -6684.4971]","98":"[-141.332 -16073.2256 -6620.1201]","99":"[382.418 -16073.4297 -6555.7666]","100":"[898.4272 -16073.876 -6492.4385]","101":"[1406.7307 -16073.8242 -6430.0967]","102":"[1933.5457 -16073.3193 -6365.3252]","103":"[2451.9883 -16073.0645 -6301.6816]","104":"[2962.1021 -16073.5391 -6239.063]","105":"[3488.8252 -16073.8252 -6174.3984]","106":"[4006.5081 -16073.6621 -6110.8828]","107":"[4515.2168 -16073.1855 -6048.4902]","108":"[5038.835 -16073.4297 -5985.103]","109":"[5549.6855 -16073.8086 -5925.1924]","110":"[6066.1201 -16073.6436 -5868.3628]","111":"[6592.2485 -16073.5273 -5819.2407]","112":"[7112.7993 -16074.3516 -5793.1787]","113":"[7638.4111 -16073.8672 -5785.0557]","114":"[8152.2417 -16072.1182 -5785.4741]","115":"[8666.4941 -16049.5059 -5785.2002]","116":"[9180.5293 -15991.4551 -5785.2666]","117":"[9683.1719 -15884.1475 -5785.2314]","118":"[10179.7207 -15717.2354 -5785.4424]","119":"[10644.7139 -15483.8721 -5785.0488]","120":"[11062.8145 -15180.71 -5785.5386]","121":"[11420.4238 -14812.8545 -5785.353]","122":"[11714.8154 -14380.6387 -5785.3052]","123":"[11934.1064 -13915.3174 -5785.2495]","124":"[12091.6729 -13414.1543 -5785.3208]","125":"[12189.7471 -12904.9258 -5785.1758]","126":"[12241.585 -12393.6582 -5785.1626]","127":"[12257.8486 -11868.0342 -5785.2739]","128":"[12259.4229 -11346.7441 -5785.3057]","129":"[12258.6318 -10823.1963 -5785.4331]","130":"[12259.2734 -10298.167 -5785.4248]","131":"[12259.0859 -9766.6064 -5785.3516]","132":"[12258.7148 -9238.5771 -5785.3843]","133":"[12259.2139 -8723.2568 -5785.2896]","134":"[12259.1377 -8204.2549 -5781.8496]","135":"[12258.9355 -7670.4551 -5757.0664]","136":"[12258.7783 -7142.397 -5708.6821]","137":"[12259.0957 -6622.541 -5652.23]","138":"[12259.085 -6111.5444 -5592.1245]","139":"[12258.5664 -5588.5034 -5529.4639]","140":"[12258.3359 -5079.7266 -5468.0552]","141":"[12258.7598 -4557.7847 -5407.4004]","142":"[12258.6582 -4040.8159 -5350.8936]","143":"[12258.5088 -3519.4194 -5303.9097]","144":"[12258.9609 -2998.0039 -5279.9331]","145":"[12257.8369 -2475.7393 -5273.3574]","146":"[12258.6318 -1957.5621 -5273.4619]","147":"[12258.1094 -1434.9935 -5273.4272]","148":"[12258.3291 -914.3333 -5273.4268]","149":"[12258.4463 -395.7527 -5273.4668]","150":"[12258.1787 120.7575 -5273.4556]","151":"[12258.3193 634.9905 -5273.2402]","152":"[12258.2783 1160.1113 -5273.3916]","153":"[12258.9434 1674.4263 -5273.5254]","154":"[12258.8203 2193.3943 -5273.4722]","155":"[12259.0537 2715.0925 -5273.4683]","156":"[12258.3896 3231.7842 -5272.9971]","157":"[12258.9033 3753.8167 -5273.2241]","158":"[12258.5313 4278.9019 -5273.3906]","159":"[12258.6855 4801.3315 -5273.291]","160":"[12259.2188 5321.6899 -5273.4546]","161":"[12258.8975 5840.082 -5273.4585]","162":"[12258.6445 6356.5361 -5273.4292]","163":"[12259.6426 6871.0483 -5273.4419]","164":"[12258.3916 7383.6421 -5273.4761]","165":"[12258.7236 7909.3203 -5273.4385]","166":"[12259.0752 8432.9775 -5273.4204]","167":"[12258.9961 8954.6533 -5273.4224]","168":"[12258.8721 9474.3672 -5273.3984]","169":"[12258.9688 9992.123 -5273.4214]","170":"[12258.7217 10507.9199 -5273.3906]","171":"[12259.2842 11021.7764 -5273.48]","172":"[12250.1729 11544.6445 -5273.2168]","173":"[12213.082 12059.4023 -5273.1685]","174":"[12130.9531 12577.7891 -5273.4824]","175":"[11994.6826 13080.4805 -5273.3506]","176":"[11798.6631 13560.5225 -5273.46]","177":"[11531.7598 14003.5342 -5273.2061]","178":"[11197.7939 14393.2559 -5273.4697]","179":"[10793.7578 14724.3096 -5273.356]","180":"[10342.3516 14981.8398 -5273.3965]","181":"[9860.0313 15169.3955 -5273.3691]","182":"[9357.3086 15296.3008 -5273.3413]","183":"[8842.167 15372.4873 -5273.3579]","184":"[8327.4053 15404.2158 -5273.4155]","185":"[7814.1724 15411.7588 -5273.3916]","186":"[7302.0811 15410.8193 -5273.4453]","187":"[6777.9058 15410.4629 -5273.4854]","188":"[6252.3115 15411.5859 -5273.3638]","189":"[5720.2266 15410.8809 -5273.4678]","190":"[5191.7173 15410.3867 -5273.4224]","191":"[4675.9634 15410.749 -5273.4668]","192":"[4155.9443 15411.1494 -5273.4526]","193":"[3637.5127 15411.0576 -5273.436]","194":"[3115.835 15410.8545 -5273.3281]","195":"[2595.949 15410.8125 -5273.3916]","196":"[2077.9121 15410.9717 -5273.4946]","197":"[1561.6761 15411.0557 -5273.438]","198":"[1047.222 15411.0205 -5273.4243]","199":"[534.542 15410.8691 -5273.4478]","200":"[-1.8559 15410.8096 -5273.459]","201":"[-531.2456 15410.8711 -5273.4399]","202":"[-1055.4476 15411.0771 -5273.3735]","203":"[-1567.8252 15410.959 -5273.334]","204":"[-2083.6575 15410.8506 -5273.3066]","205":"[-2612.5996 15411.127 -5273.4702]","206":"[-3135.8745 15411.335 -5273.5366]","207":"[-3652.4653 15411.0225 -5273.4756]","208":"[-4171.4492 15410.6709 -5273.4473]","209":"[-4692.4717 15410.8994 -5273.4326]","210":"[-5214.8481 15411.084 -5273.3677]","211":"[-5735.1343 15410.834 -5273.4746]","212":"[-6253.1045 15407.1211 -5273.1182]","213":"[-6767.3486 15379.3066 -5273.2373]","214":"[-7287.0708 15311.5762 -5272.9189]","215":"[-7793.8311 15192.6299 -5273.3223]","216":"[-8279.3652 15015.3281 -5273.2178]","217":"[-8731.4277 14772.2695 -5273.2705]","218":"[-9144.4307 14452.6729 -5273.4912]","219":"[-9493.1172 14068.3779 -5273.5439]","220":"[-9769.8555 13632.5947 -5273.3506]","221":"[-9976.2832 13161.8125 -5273.5122]","222":"[-10118.96 12669.9961 -5273.3262]","223":"[-10209.9727 12155.458 -5273.2295]","224":"[-10255.9043 11635.4443 -5273.2866]","225":"[-10268.5713 11118.5557 -5273.3418]","226":"[-10267.9863 10588.5332 -5273.4292]","227":"[-10267.2773 10063.0352 -5273.4629]","228":"[-10268.2236 9535.8438 -5273.4937]","229":"[-10268.4736 9016.5625 -5273.3384]","230":"[-10267.7695 8497.125 -5273.3159]","231":"[-10267.4629 7978.1489 -5273.4648]","232":"[-10268.0068 7460.9902 -5273.4526]","233":"[-10268.3467 6945.6299 -5273.4312]","234":"[-10268.1299 6422.4048 -5273.3706]","235":"[-10267.457 5894.6328 -5273.4331]","236":"[-10267.5137 5369.5518 -5273.4565]","237":"[-10268.3809 4856.2808 -5273.4624]","238":"[-10268.3506 4325.9097 -5273.3359]","239":"[-10267.4072 3797.4197 -5273.3677]","240":"[-10267.3711 3270.8516 -5273.4512]","241":"[-10268.1865 2752.0938 -5273.4043]","242":"[-10267.8516 2225.5496 -5273.3916]","243":"[-10267.3418 1699.1801 -5273.3677]","244":"[-10267.9912 1174.7889 -5273.3237]","245":"[-10267.54 652.3561 -5273.2026]","246":"[-10267.6982 131.9049 -5273.2813]","247":"[-10267.8652 -386.6249 -5273.2246]","248":"[-10267.791 -902.9102 -5273.5093]","249":"[-10268.1475 -1416.8861 -5273.1553]","250":"[-10268.0225 -1943.3081 -5273.4321]","251":"[-10267.8418 -2467.751 -5273.3711]","252":"[-10268.0625 -2990.2261 -5273.3677]","253":"[-10268.2705 -3510.7058 -5273.4077]","254":"[-10267.8008 -4029.2324 -5273.4229]","255":"[-10267.9326 -4545.8208 -5273.4224]","256":"[-10267.9756 -5060.4873 -5273.5]","257":"[-10267.873 -5573.2202 -5273.3716]","258":"[-10268.0938 -6098.6006 -5273.5298]","259":"[-10267.8643 -6621.9492 -5273.4629]","260":"[-10265.4736 -7143.2202 -5273.3027]","261":"[-10240.9883 -7661.3594 -5273.1167]","262":"[-10179.2412 -8172.8638 -5273.1592]","263":"[-10065.3994 -8685.4229 -5272.9438]","264":"[-9895.8887 -9171.3086 -5273.3276]","265":"[-9656.6592 -9627.1074 -5273.522]","266":"[-9349.1367 -10043.3516 -5273.4136]","267":"[-8979.1797 -10394.3262 -5273.5386]","268":"[-8551.0449 -10679.9707 -5273.2544]","269":"[-8082.4561 -10897.1455 -5273.2695]","270":"[-7589.1445 -11047.7959 -5273.1587]","271":"[-7081.7168 -11145.1455 -5273.2612]","272":"[-6560.5825 -11195.4424 -5273.3335]","273":"[-6041.9258 -11211.0791 -5273.416]","274":"[-5524.8213 -11212.5547 -5273.4277]","275":"[-5009.811 -11211.3545 -5273.3774]","276":"[-4496.894 -11212.7158 -5273.5244]","277":"[-3973.1819 -11205.7129 -5273.2876]","278":"[-3453.3235 -11173.3828 -5273.2959]","279":"[-2941.3301 -11099.3252 -5273.4951]","280":"[-2433.4944 -10972.3027 -5273.311]","281":"[-1947.6086 -10781.2695 -5273.4277]","282":"[-1499.0898 -10527.4043 -5273.3687]","283":"[-1097.8524 -10200.6963 -5273.3462]","284":"[-776.9085 -9829.3369 -5273.4736]","285":"[-503.7673 -9387.1982 -5273.4185]","286":"[-302.1321 -8905.4658 -5273.3052]","287":"[-163.7737 -8403.7246 -5273.373]","288":"[-78.7555 -7890.0063 -5273.2451]","289":"[-40.0906 -7377.7207 -5273.2017]","290":"[-28.6935 -6852.2964 -5273.5239]","291":"[-29.5488 -6328.6221 -5273.6021]","292":"[-30.3848 -5805.7695 -5273.4629]","293":"[-28.763 -5286.7246 -5273.4634]","294":"[-29.1629 -4765.459 -5273.4219]","295":"[-29.974 -4251.5771 -5273.4028]","296":"[-29.7129 -3729.4805 -5273.3882]","297":"[-28.9291 -3203.4353 -5273.5322]","298":"[-29.2922 -2677.4915 -5273.4312]","299":"[-29.9069 -2155.4749 -5273.375]","300":"[-29.5148 -1640.9183 -5273.5293]","301":"[-29.2025 -1107.1121 -5273.3701]","302":"[-29.4021 -593.1847 -5273.4312]","303":"[-29.8698 -81.016 -5273.4307]","304":"[-29.7186 459.3324 -5273.2725]","305":"[-29.2637 990.9053 -5273.5161]","306":"[-29.0921 1527.42 -5273.4595]","307":"[-29.4778 2040.2571 -5273.3066]","308":"[-29.5624 2573.7058 -5273.3979]","309":"[-29.466 3100.1348 -5273.4854]","310":"[-29.4409 3626.5376 -5273.4277]","311":"[-29.2446 4145.1875 -5273.4131]","312":"[-29.5044 4662.0361 -5273.3623]","313":"[-29.7514 5177.1079 -5273.457]","314":"[-29.3182 5712.9644 -5273.502]","315":"[-29.1183 6245.0713 -5279.98]","316":"[-29.0677 6764.251 -5307.7544]","317":"[-28.2108 7286.228 -5358.3711]","318":"[-29.4914 7806.7852 -5416.0171]","319":"[-29.0127 8318.9033 -5476.2051]","320":"[-29.3379 8828.418 -5537.6084]","321":"[-29.4658 9348.1787 -5599.6826]","322":"[-29.2436 9870.2236 -5660.3745]","323":"[-29.3694 10384.0059 -5715.7417]","324":"[-29.5538 10903.6445 -5759.689]","325":"[-28.906 11422.2998 -5781.1538]","326":"[-35.1585 11941.918 -5785.1211]","327":"[-64.5186 12457.8193 -5785.2988]","328":"[-135.0236 12966.2705 -5785.3901]","329":"[-256.2578 13471.0811 -5785.1357]","330":"[-436.1104 13953.2432 -5785.502]","331":"[-685.9932 14408.5859 -5785.355]","332":"[-1004.7524 14812.5996 -5785.5269]","333":"[-1391.4972 15158.7988 -5785.4658]","334":"[-1828.0461 15432.0293 -5785.4478]","335":"[-2306.7502 15638.8154 -5785.5132]","336":"[-2803.5891 15779.5303 -5785.2832]","337":"[-3318.9873 15867.6729 -5785.3491]","338":"[-3833.282 15909.8975 -5784.7412]","339":"[-4356.2041 15921.6084 -5785.0049]","340":"[-4878.3438 15921.5879 -5784.9683]","341":"[-5401.0049 15921.2354 -5784.8818]","342":"[-5915.0615 15922.1025 -5784.9048]","343":"[-6427.6782 15921.8867 -5784.8828]","344":"[-6949.3398 15921.1172 -5784.9175]","345":"[-7469.0215 15922.0039 -5784.895]","346":"[-7986.7148 15921.25 -5784.8403]","347":"[-8502.4639 15921.4219 -5784.8223]","348":"[-9016.2646 15921.6318 -5784.8872]","349":"[-9542.7168 15921.4717 -5784.9673]","350":"[-10067.1299 15921.5596 -5784.8735]","351":"[-10589.5244 15921.7393 -5784.9595]","352":"[-11109.9014 15921.4453 -5784.7324]","353":"[-11623.249 15921.2979 -5785.1577]","354":"[-12144.0742 15906.5244 -5785.0493]","355":"[-12659.6045 15862.126 -5784.8755]","356":"[-13171.1104 15768.9053 -5785.4297]","357":"[-13666.6777 15623.2656 -5785.1982]","358":"[-14135.3164 15414.8184 -5785.4458]","359":"[-14572.082 15133.2598 -5785.3789]","360":"[-14951.6807 14784.3193 -5785.1235]","361":"[-15265.5439 14376.0537 -5785.4165]","362":"[-15507.375 13923.0898 -5785.3633]","363":"[-15684.3125 13434.0625 -5785.416]","364":"[-15800.8701 12929.4229 -5785.3408]","365":"[-15867.8789 12417.8184 -5785.2749]","366":"[-15893.8896 11904.5684 -5785.3569]","367":"[-15900.3662 11392.4492 -5790.3091]","368":"[-15898.502 10877.0908 -5811.6714]","369":"[-15899.6855 10363.9229 -5856.1362]","370":"[-15898.873 9845.5215 -5911.813]","371":"[-15899.3467 9333.4297 -5971.2905]","372":"[-15898.9277 8815.2803 -6033.6274]","373":"[-15899.1592 8306.8232 -6095.5122]","374":"[-15899.5615 7795.8154 -6158.395]","375":"[-15899.1318 7283.6196 -6221.3696]","376":"[-15899.2666 6771.7549 -6284.0454]","377":"[-15899.2598 6261.791 -6346.7515]","378":"[-15899.5439 5737.9712 -6411.0767]","379":"[-15899.5596 5217.9697 -6474.9219]","380":"[-15898.8145 4703.6187 -6537.793]","381":"[-15898.5098 4193.0811 -6599.1938]","382":"[-15898.5859 3672.354 -6660.2993]","383":"[-15898.4746 3158.9053 -6716.856]","384":"[-15898.4268 2633.0476 -6765.2759]","385":"[-15898.6768 2116.2043 -6789.6968]","386":"[-15898.5586 1595.6915 -6796.7065]","387":"[-15898.5791 1076.3518 -6796.6904]","388":"[-15898.9658 559.1996 -6796.48]","389":"[-15899.2285 43.9011 -6796.416]","390":"[-15898.624 -469.5618 -6796.5044]","391":"[-15898.6514 -997.6718 -6796.4072]","392":"[-15899.3379 -1523.8198 -6796.4141]","393":"[-15899.2451 -2048.0342 -6796.4229]","394":"[-15898.9238 -2570.3335 -6796.4209]","395":"[-15899.1436 -3090.7327 -6796.4829]","396":"[-15899.0137 -3609.2256 -6796.4429]","397":"[-15898.8955 -4125.8237 -6796.3101]","398":"[-15899.0674 -4649.7837 -6796.4517]","399":"[-15899.0527 -5169.8101 -6796.4429]","400":"[-15898.957 -5684.9038 -6796.4243]","401":"[-15898.7939 -6197.9775 -6796.4263]","402":"[-15899.042 -6722.4619 -6796.4209]","403":"[-15898.6348 -7236.6084 -6796.4131]","404":"[-15899.1465 -7749.7202 -6796.4478]","405":"[-15898.9375 -8262.7266 -6796.437]","406":"[-15888.4033 -8782.0498 -6796.3569]","407":"[-15843.9639 -9295.6426 -6796.3135]","408":"[-15735.3242 -9804.0908 -6796.3101]","409":"[-15550.4072 -10283.999 -6796.3018]","410":"[-15328.9805 -10649.9102 -6796.459]","411":"[-15090.7578 -10921.6855 -6796.3989]","412":"[-14740.3418 -11201.9209 -6796.3569]","413":"[-14410.6934 -11381.6475 -6796.4604]","414":"[-13926.2695 -11551.8877 -6796.4614]","415":"[-13416.8018 -11647.8242 -6796.1001]","416":"[-12898.5205 -11684.9277 -6796.2793]","417":"[-12380.5313 -11693.2305 -6801.0693]","418":"[-11866.7285 -11691.1602 -6823.8667]","419":"[-11356.4297 -11691.9121 -6867.6177]","420":"[-10836.3203 -11692.3096 -6923.874]","421":"[-10316.9238 -11692.0781 -6984.2217]","422":"[-9795.2354 -11691.6875 -7047.0435]","423":"[-9268.166 -11692.4912 -7111.1216]","424":"[-8741.8828 -11691.876 -7175.8794]","425":"[-8227.1885 -11691.3545 -7239.062]","426":"[-7704.1382 -11691.9541 -7303.313]","427":"[-7194.1855 -11692.5068 -7365.9336]","428":"[-6676.6235 -11692.3486 -7429.4961]","429":"[-6151.4751 -11692.1953 -7493.9751]","430":"[-5635.1484 -11691.7422 -7557.354]","431":"[-5109.2124 -11691.8613 -7621.8975]","432":"[-4588.6157 -11692.2412 -7685.8555]","433":"[-4080.05 -11691.9414 -7748.333]","434":"[-3562.2375 -11691.7275 -7811.9917]","435":"[-3047.498 -11691.7617 -7875.1377]","436":"[-2530.3049 -11691.8867 -7938.6162]","437":"[-2020.2939 -11691.8438 -8001.23]","438":"[-1511.6769 -11691.9355 -8063.689]","439":"[-988.9805 -11691.8271 -8127.917]","440":"[-478.6815 -11692.3662 -8190.4707]","441":"[32.1578 -11692.0469 -8253.3066]","442":"[551.7845 -11691.8867 -8317.0547]","443":"[1067.3556 -11691.8896 -8380.3594]","444":"[1581.5137 -11691.7305 -8443.4795]","445":"[2095.9663 -11692.2021 -8506.6426]","446":"[2611.2307 -11691.9932 -8569.9395]","447":"[3125.0654 -11691.7676 -8633.0137]","448":"[3639.4731 -11691.877 -8695.6416]","449":"[4150.3696 -11691.6133 -8756.6855]","450":"[4660.5132 -11691.6729 -8815.3838]","451":"[5173.3569 -11691.8135 -8869.3457]","452":"[5526.583 -11691.7451 -8899.6953]"},"18":{"1":"[11251.2822 -2846.6602 -5276.2046]","2":"[11250.5547 -2745.4106 -5274.5405]","3":"[11273.752 -2232.116 -5273.4658]","4":"[11341.5039 -1723.3824 -5273.4878]","5":"[11467.9209 -1224.1456 -5273.5161]","6":"[11640.8496 -741.1426 -5273.5127]","7":"[11834.1465 -266.414 -5273.4561]","8":"[12013.6611 215.2262 -5273.4136]","9":"[12149.1484 711.9863 -5273.4116]","10":"[12227.374 1218.7456 -5273.3076]","11":"[12256.1387 1730.2482 -5273.457]","12":"[12257.7246 1841.8517 -5273.4448]"},"19":{"1":"[-5088.1846 15041.7471 -3751.4431]","2":"[-4575.7266 15072.3008 -3751.1946]","3":"[-4068.468 15151.6064 -3751.3816]","4":"[-3566.6575 15254.1895 -3751.3569]","5":"[-3059.1482 15340.1133 -3751.5522]","6":"[-2549.1782 15387.6436 -3751.4622]","7":"[-2034.6593 15406.7793 -3754.8049]","8":"[-1517.8894 15411.1045 -3774.1689]","9":"[-1003.7453 15410.8066 -3816.3381]","10":"[-491.0555 15410.291 -3870.7959]","11":"[18.2716 15410.4434 -3929.6108]","12":"[529.1116 15410.9424 -3991.2002]","13":"[1041.2151 15410.4189 -4053.7305]","14":"[1557.1549 15410.6826 -4117.3198]","15":"[2070.2734 15410.3516 -4180.3618]","16":"[2581.3459 15410.6816 -4242.9468]","17":"[3101.8079 15410.3574 -4306.9878]","18":"[3616.731 15410.0518 -4370.1782]","19":"[4132.4795 15410.376 -4433.5]","20":"[4653.084 15410.6426 -4497.0845]","21":"[5164.8159 15410.9658 -4558.8579]","22":"[5679.0669 15411.2314 -4619.5156]","23":"[6200.2905 15410.9639 -4677.21]","24":"[6720.7627 15411.1885 -4726.457]","25":"[7236.314 15410.5293 -4753.728]","26":"[7758.1084 15409.0059 -4762.3979]","27":"[8277.9482 15387.3701 -4762.2563]","28":"[8791.1377 15331.1006 -4762.5537]","29":"[9292.5322 15225.5449 -4761.7378]","30":"[9786.915 15062.2725 -4762.3984]","31":"[10250.4766 14833.5918 -4762.166]","32":"[10668.8291 14536.2686 -4762.4609]","33":"[11035.9824 14164.6934 -4762.293]","34":"[11331.1084 13737.4707 -4762.3521]","35":"[11553.9971 13271.4854 -4762.438]","36":"[11710.9414 12781.7256 -4762.2095]","37":"[11813.2139 12268.0918 -4762.1836]","38":"[11867.6133 11749.6787 -4762.2969]","39":"[11884.8125 11230.001 -4771.4277]","40":"[11887.5918 10717.1074 -4800.3481]","41":"[11886.208 10203.3428 -4848.8604]","42":"[11887.0176 9682.8047 -4906.8706]","43":"[11886.4697 9168.1455 -4967.54]","44":"[11887.1777 8647.9619 -5029.8628]","45":"[11886.7549 8131.7217 -5091.7813]","46":"[11887.0723 7613.2217 -5151.7207]","47":"[11886.7861 7092.0405 -5207.522]","48":"[11886.8984 6570.021 -5250.395]","49":"[11887.0781 6054.8618 -5270.7061]","50":"[11891.5586 5538.7471 -5273.4063]","51":"[11910.3457 5025.1523 -5273.5386]","52":"[11959.6152 4515.0508 -5273.356]","53":"[12045.7783 4009.2742 -5273.2725]","54":"[12148.3408 3507.6252 -5273.3984]","55":"[12227.0449 3000.5256 -5273.251]","56":"[12256.3164 2488.7876 -5273.4839]","57":"[12257.3389 2431.7844 -5273.4976]"},"20":{"1":"[2151.4246 -15157.0889 -10009.4219]","2":"[2049.3037 -15157.1465 -10009.4521]","3":"[1537.4489 -15138.3076 -10009.4473]","4":"[1023.1358 -15074.9795 -10009.3574]","5":"[521.5983 -14953.917 -10009.4229]","6":"[34.8936 -14783.71 -10009.251]","7":"[-440.8094 -14590.8457 -10009.3672]","8":"[-921.0248 -14408.6563 -10009.3828]","9":"[-1419.4646 -14267.8105 -10009.4707]","10":"[-1929.4438 -14182.6152 -10009.4355]","11":"[-2441.8982 -14153.0117 -10009.4229]","12":"[-2747.0869 -14146.4424 -10009.6514]"},"21":{"1":"[-7064.8794 10649.3223 -10521.3027]","2":"[-6964.8081 10651.0742 -10521.4063]","3":"[-6453.1411 10669.6846 -10521.4961]","4":"[-5944.4819 10730.8672 -10521.4609]","5":"[-5439.1509 10830.0332 -10521.418]","6":"[-4934.4395 10927.1113 -10521.5088]","7":"[-4425.979 10987.6084 -10521.4756]","8":"[-3910.8796 11015.8438 -10521.3906]","9":"[-3393.3833 11023.4385 -10521.3887]","10":"[-2877.9756 11024.5146 -10521.4512]","11":"[-2359.4197 11025.1895 -10521.4131]","12":"[-1837.0775 11024.7598 -10521.2305]","13":"[-1313.5604 11024.4824 -10521.3477]","14":"[-797.0997 11024.6689 -10521.4619]","15":"[-272.6636 11024.8623 -10521.4287]","16":"[246.4557 11024.4756 -10521.5049]","17":"[760.2831 11024.3945 -10521.418]","18":"[1285.0769 11024.5771 -10521.5381]","19":"[1805.2994 11024.3945 -10521.4326]","20":"[2322.8381 11024.5088 -10521.3633]","21":"[2836.7688 11024.0986 -10521.4453]","22":"[3355.2957 11024.2959 -10521.4229]","23":"[3872.1084 11024.0605 -10521.3633]","24":"[4385.064 11024.1533 -10521.418]","25":"[4474.5356 11024.0137 -10521.1191]"},"22":{"1":"[-1167.4999 11024.5273 -10521.4629]","2":"[-1681.0438 11037.7881 -10521.5]","3":"[-2192.5417 11089.5332 -10521.3994]","4":"[-2701.8257 11178.9482 -10521.2764]","5":"[-3211.1145 11256.8789 -10521.375]","6":"[-3726.5107 11291.1055 -10521.3965]","7":"[-4111.668 11304.9463 -10521.4346]"},"23":{"1":"[4464.2183 11288.0918 -10521.4229]","2":"[3942.1597 11288.3926 -10521.4082]","3":"[3427.7063 11288.25 -10521.4824]","4":"[2905.4509 11288.2939 -10521.3945]","5":"[2381.0239 11288.751 -10521.4912]","6":"[1861.7886 11288.5039 -10521.3789]","7":"[1347.7365 11288.2939 -10521.4922]","8":"[826.1921 11288.4541 -10521.4092]","9":"[310.0796 11288.3506 -10521.4814]","10":"[-204.0466 11288.3711 -10521.418]","11":"[-725.96 11288.1914 -10521.4375]","12":"[-1245.606 11288.5928 -10521.4688]","13":"[-1762.453 11288.1953 -10521.4668]","14":"[-2275.8979 11288.7217 -10521.2764]","15":"[-2792.5251 11288.5654 -10521.3369]","16":"[-3307.199 11289.127 -10521.2139]","17":"[-3831.1672 11294.7881 -10521.2666]","18":"[-4354.438 11318.8916 -10521.5195]","19":"[-4874.5313 11376.6406 -10521.2451]","20":"[-5386.6436 11472.1299 -10521.334]","21":"[-5890.8584 11572.4707 -10521.4375]","22":"[-6401.8311 11638.7178 -10521.5371]","23":"[-6920.0518 11660.043 -10521.4258]","24":"[-7110.6406 11659.9717 -10521.2363]"},"24":{"1":"[-4051.9509 11302.3018 -10521.3145]","2":"[-3951.1082 11298.623 -10521.4404]","3":"[-3431.9077 11274.4834 -10521.3164]","4":"[-2918.7256 11218.1758 -10521.46]","5":"[-2410.2966 11126.8223 -10521.2334]","6":"[-1903.3087 11052.8477 -10521.2607]","7":"[-1385.6346 11025.8086 -10521.3311]","8":"[-957.9063 11024.2373 -10521.4238]"},"25":{"1":"[-536.0779 11596.6396 -1622.4255]","2":"[-181.6411 11226.7441 -1622.4861]","3":"[145.9695 10829.6475 -1622.6833]","4":"[427.8542 10398.0811 -1622.4144]","5":"[660.5457 9940.5381 -1622.3754]","6":"[862.7678 9468.8721 -1622.2606]","7":"[1065.4482 8998.4248 -1622.3685]","8":"[1305.1803 8541.917 -1622.3842]","9":"[1591.6849 8116.3594 -1622.142]","10":"[1922.4342 7724.21 -1622.333]","11":"[2187.0742 7447.2251 -1622.3037]"},"26":{"1":"[4298.915 -648.7664 20.5584]","2":"[4298.6138 -548.6555 20.5322]","3":"[4278.6479 -35.0244 20.6325]","4":"[4216.3296 473.6113 20.5588]","5":"[4124.7251 979.5752 20.5589]","6":"[4057.8076 1489.1124 20.5382]","7":"[4034.5989 2002.4259 20.5669]","8":"[4033.4734 2126.3059 20.5809]"},"27":{"1":"[4238.0347 11023.249 -10521.501]","2":"[4338.4165 11023.1865 -10521.4824]","3":"[4852.3125 11022.9512 -10521.4336]","4":"[5366.8091 11022.792 -10521.5137]","5":"[5883.7925 11022.6396 -10521.4443]","6":"[6398.1641 11022.7549 -10522.6592]","7":"[6913.9722 11023.3379 -10539.124]","8":"[7425.8677 11023.2207 -10576.1016]","9":"[7935.77 11023.2275 -10628.2656]","10":"[8447.7939 11023.1514 -10686.4639]","11":"[8963.0283 11022.7695 -10748.293]","12":"[9470.3594 11006.1514 -10816.2783]","13":"[9980.0381 10961.2754 -10884.6279]","14":"[10485.9043 10864.0586 -10942.2803]","15":"[10979.0332 10718.6973 -10984.4023]","16":"[11446.6357 10509.749 -11013.3584]","17":"[11871.9932 10224.1436 -11032.2285]","18":"[12182.8584 9924.8086 -11041.709]","19":"[12492.6885 9511.1025 -11046.2842]","20":"[12715.2324 9071.1904 -11045.833]","21":"[12875.4395 8582.6084 -11043.6436]","22":"[12971.3477 8079.4424 -11040.5479]","23":"[13020.6201 7560.7363 -11036.4004]","24":"[13034.9463 7041.8457 -11033.9756]","25":"[13036.1924 6524.2529 -11033.4922]","26":"[13035.7598 6007.4399 -11033.3984]","27":"[13036.0146 5491.0664 -11033.4863]","28":"[13036.167 4971.9756 -11046.5938]","29":"[13035.5996 4453.7441 -11079.0684]","30":"[13036.2012 3939.8345 -11130.2383]","31":"[13035.8027 3421.7888 -11188.6582]","32":"[13036.0908 2904.0906 -11249.8008]","33":"[13025.6943 2387.0759 -11318.7295]","34":"[12983.7139 1878.4086 -11387.1318]","35":"[12896.2588 1377.252 -11445.7461]","36":"[12758.1709 875.1086 -11491.2295]","37":"[12557.5625 397.8955 -11521.7783]","38":"[12277.3164 -38.9672 -11542.1455]","39":"[11976.1963 -365.3413 -11552.6611]","40":"[11565.1328 -681.3035 -11558.1064]","41":"[11107.6162 -921.2552 -11558.1035]","42":"[10618.5498 -1084.5851 -11555.5371]","43":"[10114.1572 -1183.0703 -11552.6455]","44":"[9604.4209 -1233.3522 -11548.667]","45":"[9092.665 -1248.0078 -11556.3701]","46":"[8574.3711 -1250.9382 -11586.3516]","47":"[8055.3291 -1249.3761 -11636.2832]","48":"[7544.6719 -1250.5852 -11693.585]","49":"[7028.4692 -1249.4918 -11754.4668]","50":"[6508.5537 -1244.0417 -11823.3857]","51":"[5995.1333 -1205.6755 -11892.2471]","52":"[5492.6885 -1122.3002 -11952.6846]","53":"[4999.4014 -992.3585 -11998.2627]","54":"[4519.2119 -800.7273 -12030.8174]","55":"[4077.772 -532.398 -12052.1709]","56":"[3754.041 -248.0152 -12063.4639]","57":"[3426.3699 151.997 -12069.6494]","58":"[3186.1943 580.9349 -12070.5215]","59":"[3007.2297 1061.0388 -12068.5]","60":"[2896.5254 1566.0378 -12065.3398]","61":"[2836.3066 2079.844 -12061.5635]","62":"[2816.4148 2596.8494 -12058.5332]","63":"[2828.8569 3115.8613 -12057.5996]","64":"[2867.4927 3631.9348 -12057.5273]","65":"[2932.2263 4140.7251 -12057.5713]","66":"[3027.2756 4651.7261 -12057.4854]","67":"[3151.6941 5152.4385 -12057.5176]","68":"[3308.6055 5646.0776 -12057.2959]","69":"[3474.8245 6131.1523 -12057.3984]","70":"[3627.7642 6631.5386 -12057.7695]","71":"[3746.4387 7141.9766 -12057.3945]","72":"[3834.8308 7651.0215 -12057.6318]","73":"[3893.4155 8163.6689 -12057.6025]","74":"[3927.2642 8677.8672 -12057.1289]","75":"[3937.9963 9191.0625 -12057.582]","76":"[3944.9438 9715.2822 -12057.5332]","77":"[3971.7166 10236.5469 -12057.2178]","78":"[4041.6216 10750.5762 -12057.2178]","79":"[4159.1157 11253.1963 -12057.085]","80":"[4336.4756 11733.9814 -12057.3936]","81":"[4583.9111 12192.6885 -12057.2285]","82":"[4902.0273 12602.0762 -12057.291]","83":"[5284.8716 12948.2959 -12057.293]","84":"[5719.4473 13223.6377 -12057.3379]","85":"[6189.2339 13429.4873 -12057.3643]","86":"[6680.9502 13572.5859 -12057.2051]","87":"[7196.377 13663.2422 -12057.2217]","88":"[7709.9956 13708.3311 -12057.3838]","89":"[8222.9668 13713.1992 -12057.2568]","90":"[8746.2051 13679.8086 -12057.2744]","91":"[9261.8018 13600.1602 -12057.2969]","92":"[9764.6035 13470.0049 -12057.2656]","93":"[10243.8164 13278.6357 -12057.2178]","94":"[10686.3379 13021.0664 -12057.4707]","95":"[11086.8887 12687.3115 -12057.4131]","96":"[11413.9512 12300.0684 -12057.208]","97":"[11678.1563 11855.2441 -12057.3838]","98":"[11871.8926 11376.668 -12057.3428]","99":"[12004.7363 10878.6621 -12057.2773]","100":"[12084.8076 10369.9795 -12057.458]","101":"[12122.0264 9856.9805 -12057.0693]","102":"[12131.2725 9343.4824 -12057.5117]","103":"[12130.917 8822.9297 -12057.4131]","104":"[12130.791 8302.8682 -12057.4072]","105":"[12131.3838 7781.3921 -12057.499]","106":"[12130.5996 7257.8525 -12057.4658]","107":"[12131.4717 6743.1729 -12057.4951]","108":"[12131.1416 6220.6978 -12057.4443]","109":"[12130.8594 5703.1025 -12057.4346]","110":"[12130.8281 5186.042 -12057.3838]","111":"[12131.4863 4669.4878 -12057.3604]","112":"[12131.1113 4153.4922 -12057.4063]","113":"[12130.8945 3638.0278 -12057.3535]","114":"[12131.5957 3123.0933 -12057.4893]","115":"[12130.4316 2608.6814 -12057.4697]","116":"[12130.3848 2094.8298 -12057.4316]","117":"[12131.3721 1581.5061 -12057.4189]","118":"[12131.0049 1068.7216 -12057.3467]","119":"[12131.0225 549.2548 -12057.4463]","120":"[12131.0361 35.6875 -12057.4541]","121":"[12130.9844 -486.0617 -12057.4512]","122":"[12129.7598 -1009.6346 -12056.791]","123":"[12130.5732 -1527.1187 -12056.1279]","124":"[12129.0225 -2051.9507 -12056.2207]","125":"[12111.3242 -2574.6555 -12054.5166]","126":"[12059.1855 -3092.3679 -12049.2607]","127":"[11961.834 -3599.2649 -12039.5811]","128":"[11812.6758 -4099.9717 -12024.5098]","129":"[11611.2412 -4571.6558 -12002.79]","130":"[11351.7061 -5012.6831 -11972.0645]","131":"[11023.6514 -5409.6821 -11927.9844]","132":"[10703.3408 -5682.4922 -11881.7881]","133":"[10260.4609 -5942.9229 -11821.3506]","134":"[9803.1787 -6113.0015 -11768.9658]","135":"[9295.4746 -6209.6992 -11727.3701]","136":"[8778.6934 -6239.3921 -11698.2041]","137":"[8257.4668 -6242.4429 -11680.959]","138":"[7740.6914 -6245.8389 -11672.8125]","139":"[7227.5522 -6247.1851 -11673.0605]","140":"[6711.7031 -6247.6982 -11673.1484]","141":"[6199.519 -6247.3599 -11672.9053]","142":"[5685.2983 -6246.9683 -11672.8975]","143":"[5169.7168 -6247.4805 -11673.1572]","144":"[4648.1338 -6246.6216 -11672.9434]","145":"[4133.8267 -6247.6226 -11672.9678]","146":"[3619.9009 -6246.6816 -11673.125]","147":"[3106.4141 -6248.0605 -11673.1973]","148":"[2593.3257 -6247.2065 -11673.0742]","149":"[2078.5833 -6247.5586 -11672.9375]","150":"[1560.2836 -6247.9917 -11673.0508]","151":"[1046.3217 -6247.1592 -11673.1406]","152":"[546.3865 -6247.9097 -11673.083]"},"28":{"1":"[7994.2739 -6502.501 -11673.2051]","2":"[8509.9658 -6501.1587 -11674.6445]","3":"[9027.5664 -6481.0063 -11679.5693]","4":"[9539.2998 -6447.4766 -11687.9629]","5":"[10053.9258 -6377.4683 -11699.8008]","6":"[10558.7275 -6252.2178 -11715.9746]","7":"[11040.8359 -6063.438 -11735.4561]","8":"[11493.001 -5816.1299 -11758.123]","9":"[11902.1729 -5507.1543 -11782.3906]","10":"[12253.5576 -5133.8643 -11807.9531]","11":"[12541.5313 -4704.3687 -11833.8691]","12":"[12766.1982 -4235.0254 -11860.6045]","13":"[12931.29 -3742.2339 -11889.2363]","14":"[13043.3955 -3234.1895 -11920.5381]","15":"[13108.4414 -2719.9607 -11953.7988]","16":"[13133.5576 -2205.04 -11991.7871]","17":"[13138.8965 -1693.4707 -12027.3301]","18":"[13137.4072 -1179.95 -12050.6777]","19":"[13138.6172 -658.592 -12057.6436]","20":"[13137.2617 -135.9899 -12057.4668]","21":"[13138.7031 386.157 -12057.4121]","22":"[13137.3926 907.8809 -12057.4873]","23":"[13138.0459 1429.1836 -12057.498]","24":"[13138.5547 1950.0883 -12057.4336]","25":"[13138.1641 2470.6082 -12057.4287]","26":"[13138.166 2990.7563 -12057.4248]","27":"[13137.9014 3510.5305 -12057.4414]","28":"[13138.0303 4029.9265 -12057.3945]","29":"[13137.6035 4551.8384 -12057.5059]","30":"[13137.9766 5065.75 -12057.4756]","31":"[13137.9971 5581.8848 -12057.4922]","32":"[13137.5635 6104.769 -12057.4502]","33":"[13137.6592 6627.7051 -12057.4365]","34":"[13137.7402 7148.2432 -12057.4258]","35":"[13137.7744 7670.502 -12057.4199]","36":"[13137.8936 8183.2246 -12057.3682]","37":"[13138.0752 8699.6963 -12057.502]","38":"[13137.8672 9213.4277 -12057.3301]","39":"[13138.3711 9726.2158 -12057.416]","40":"[13138.7168 10238.5771 -12057.4863]","41":"[13132.0947 10756.9385 -12057.3037]","42":"[13101.5215 11278.5342 -12056.9541]","43":"[13028.1533 11792.415 -12057.4385]","44":"[12906.0225 12294.2734 -12057.4141]","45":"[12723.2598 12774.7344 -12057.5195]","46":"[12468.8428 13231.3857 -12057.4688]","47":"[12143.7539 13636.7744 -12057.4717]","48":"[11755.3789 13977.8633 -12057.2891]","49":"[11316.2832 14247.1172 -12057.3027]","50":"[10842.5654 14448.1572 -12057.3916]","51":"[10342.1367 14586.4883 -12057.3027]","52":"[9830.8252 14672.2002 -12057.1211]","53":"[9314.6357 14712.6289 -12057.4258]","54":"[8797.1689 14723.6904 -12057.4521]","55":"[8279.9541 14723.0488 -12057.3828]","56":"[7763.0815 14723.8633 -12057.4805]","57":"[7239.7632 14723.1641 -12057.3301]","58":"[6716.5049 14710.1582 -12057.2217]","59":"[6196.9829 14667.1719 -12057.2324]","60":"[5686.1929 14576.7139 -12056.8818]","61":"[5190.2305 14434.8623 -12057.668]","62":"[4720.064 14229.252 -12057.4463]","63":"[4281.7319 13953.2236 -12057.4121]","64":"[3899.4187 13608.0576 -12057.2979]","65":"[3583.3723 13204.1406 -12057.4316]","66":"[3334.2532 12748.1719 -12057.3711]","67":"[3154.4729 12261.9092 -12057.4111]","68":"[3035.4187 11761.8594 -12057.4521]","69":"[2965.1726 11244.5527 -12057.2881]","70":"[2936.4963 10722.6943 -12057.3496]","71":"[2930.7593 10200.3174 -12057.3174]","72":"[2931.5095 9678.6572 -12057.5488]","73":"[2930.1697 9157.8887 -12057.2656]","74":"[2915.5168 8637.8652 -12057.7402]","75":"[2868.7598 8121.2432 -12057.4727]","76":"[2785.5518 7610.1577 -12057.7158]","77":"[2686.3027 7102.6421 -12057.4111]","78":"[2606.2927 6585.332 -12057.8037]","79":"[2559.4109 6064.8745 -12057.7402]","80":"[2549.3762 5543.0493 -12057.5762]","81":"[2546.3459 5021.5718 -12057.7129]","82":"[2548.657 4500.374 -12057.6367]","83":"[2546.5649 3979.7576 -12057.7129]","84":"[2548.3748 3466.1577 -12057.5361]","85":"[2546.8318 2953.9036 -12057.6924]","86":"[2554.8513 2434.0842 -12057.2832]","87":"[2583.9458 1914.8698 -12057.2402]","88":"[2656.8918 1401.532 -12057.2744]","89":"[2779.5745 898.0455 -12057.2373]","90":"[2968.1882 418.6499 -12057.3994]","91":"[3227.5288 -25.7816 -12055.6494]","92":"[3553.9138 -421.8961 -12049.0732]","93":"[3941.4771 -760.9238 -12035.2168]","94":"[4373.1538 -1021.8484 -12013.3633]","95":"[4856.0645 -1222.4259 -11982.167]","96":"[5352.3267 -1359.1747 -11941.7129]","97":"[5860.4385 -1452.76 -11891.2949]","98":"[6367.1973 -1499.3593 -11833.8154]","99":"[6884.1128 -1513.8931 -11771.8818]","100":"[7403.7583 -1513.6985 -11710.0244]","101":"[7919.0635 -1514.1713 -11651.3945]","102":"[8433.1836 -1513.381 -11598.8037]","103":"[8952.6172 -1514.6958 -11561.3545]","104":"[9467.3008 -1503.402 -11546.292]","105":"[9988.124 -1466.454 -11545.0762]","106":"[10501.1406 -1382.0667 -11545.2686]","107":"[11000.3369 -1246.0283 -11545.3184]","108":"[11472.46 -1040.7552 -11545.3535]","109":"[11905.6758 -767.3871 -11542.7168]","110":"[12294.3232 -420.072 -11534.6973]","111":"[12621.001 -16.5702 -11518.167]","112":"[12850.501 398.9348 -11496.2451]","113":"[13038.0605 881.4165 -11463.332]","114":"[13164.8066 1379.9117 -11421.5322]","115":"[13250.9355 1888.292 -11369.5693]","116":"[13289.8789 2406.8765 -11309.9121]","117":"[13301.0371 2916.3557 -11248.3125]","118":"[13298.8174 3428.7852 -11187.9502]","119":"[13301.0762 3946.8499 -11129.4561]","120":"[13299.0117 4459.7705 -11078.7832]","121":"[13300.7793 4974.9712 -11045.8271]","122":"[13300.0508 5494.4341 -11033.2607]","123":"[13300.8018 6016.335 -11033.5693]","124":"[13300.3594 6537.8154 -11033.3887]","125":"[13300.0244 7059.0122 -11033.376]","126":"[13283.0791 7578.4189 -11033.2764]","127":"[13237.1045 8092.4287 -11033.2725]","128":"[13143.3477 8601.0361 -11033.1211]","129":"[12992.4102 9093.0215 -11033.3135]","130":"[12768.1299 9566.0957 -11032.6523]","131":"[12472.4727 9994.4561 -11029.585]","132":"[12114.835 10365.2295 -11019.2783]","133":"[11698.1934 10671.7412 -11001.3652]","134":"[11236.7666 10902.3701 -10974.8936]","135":"[10752.9951 11067.4805 -10939.9248]","136":"[10254.8789 11182.416 -10895.0303]","137":"[9743.1025 11252.6592 -10840.1299]","138":"[9233.8135 11281.6465 -10780.6934]","139":"[8724.0459 11288.334 -10719.1182]","140":"[8212.041 11286.417 -10659.252]","141":"[7700.1777 11286.1455 -10602.7256]","142":"[7183.3252 11286.8857 -10555.3496]","143":"[6666.7441 11287.4521 -10528.8994]","144":"[6153.3667 11287.7715 -10521.5166]","145":"[5638.1484 11286.9834 -10521.4346]","146":"[5124.5444 11287.4561 -10521.5303]","147":"[4787.7764 11287.5342 -10521.4248]"},"29":{"1":"[3532.1907 13689.9111 -14300.3789]","2":"[3637.6326 13689.5146 -14300.4346]","3":"[4151.2427 13669.3574 -14300.4785]","4":"[4662.6792 13608.2383 -14300.5801]","5":"[5166.9854 13513.9854 -14300.6943]","6":"[5670.8188 13413.8008 -14300.6475]","7":"[6176.1987 13313.4531 -14300.6445]","8":"[6685.8833 13211.9502 -14305.5508]","9":"[7190.1514 13112.7139 -14328.8223]","10":"[7690.9946 13014.3271 -14373.4766]","11":"[8191.3208 12916.1318 -14428.5693]","12":"[8704.0469 12814.9385 -14489.5225]","13":"[9217.333 12713.9297 -14551.8555]","14":"[9722.1348 12614.6729 -14613.7168]","15":"[10229.8125 12515.2178 -14674.3721]","16":"[10741.3018 12414.8809 -14731.8809]","17":"[11247.6689 12315.0752 -14779.6143]","18":"[11760.8115 12214.0283 -14805.3232]","19":"[12268.5947 12110.3643 -14812.5039]","20":"[12769.8848 11978.6484 -14812.2646]","21":"[13249.5586 11795.1641 -14812.3965]","22":"[13709.1201 11537.7188 -14812.5225]","23":"[14054.5781 11254.6338 -14812.2773]","24":"[14305.8818 10961.0352 -14812.4521]","25":"[14518.1992 10598.8457 -14812.4609]","26":"[14650.5098 10241.4531 -14812.5078]","27":"[14745.7246 9726.8428 -14812.4941]","28":"[14756.4453 9205.8105 -14812.3359]","29":"[14702.8076 8689.5225 -14812.2822]","30":"[14614.9277 8179.4707 -14812.1758]","31":"[14512.9619 7670.0083 -14812.4189]","32":"[14415.0898 7166.7329 -14812.4307]","33":"[14315.4668 6662.7358 -14812.4756]","34":"[14210.9521 6133.7271 -14812.4658]","35":"[14105.4131 5594.0381 -14812.458]","36":"[14004.4629 5078.1772 -14812.4541]","37":"[13902.0127 4557.3125 -14811.9893]","38":"[13794.2822 4011.7439 -14812.4512]","39":"[13687.041 3467.667 -14812.4736]","40":"[13580.3311 2924.9451 -14812.4717]","41":"[13473.791 2383.6846 -14812.415]","42":"[13367.5557 1843.9121 -14812.4912]","43":"[13261.6963 1305.54 -14812.4648]","44":"[13156.2207 768.5407 -14812.4414]","45":"[13051.1758 232.887 -14812.541]","46":"[12946.3242 -301.3565 -14812.4844]","47":"[12841.1309 -834.0632 -14812.4287]","48":"[12736.3564 -1365.4163 -14812.3877]","49":"[12632.9277 -1895.6097 -14812.4365]","50":"[12529.0928 -2424.3159 -14812.4717]","51":"[12424.8076 -2951.5457 -14812.4609]","52":"[12322.6963 -3468.9883 -14812.4014]","53":"[12221.6289 -3983.2571 -14812.4238]","54":"[12115.4307 -4526.8765 -14812.4473]","55":"[12012.4883 -5049.9829 -14812.498]","56":"[11911.7744 -5557.7222 -14812.4814]","57":"[11807.5889 -6089.9521 -14812.4473]","58":"[11704.6592 -6617.0322 -14812.4561]","59":"[11601.7881 -7138.7261 -14812.4521]","60":"[11497.9385 -7645.5449 -14812.3701]","61":"[11370.8867 -8145.4121 -14812.3359]","62":"[11207.4727 -8631.8457 -14812.1855]","63":"[10985.7334 -9120.2275 -14812.2236]","64":"[10707.4961 -9574.3887 -14812.2139]","65":"[10367.2148 -9979.3262 -14812.1309]","66":"[9966.1563 -10318.8604 -14812.6221]","67":"[9514.0195 -10581.1357 -14812.3281]","68":"[9025.7471 -10762.0039 -14812.3691]","69":"[8517.5166 -10866.0938 -14812.2822]","70":"[8001.6758 -10904.6338 -14812.0938]","71":"[7486.3853 -10888.1133 -14812.335]","72":"[6975.248 -10828.7578 -14812.1953]","73":"[6469.3018 -10739.4375 -14812.3555]","74":"[5953.8057 -10638.9258 -14812.4229]","75":"[5440.7104 -10536.4258 -14812.5117]","76":"[4924.5425 -10436.7705 -14812.3857]","77":"[4394.1738 -10331.7734 -14812.4121]","78":"[3874.5334 -10228.7383 -14812.3838]","79":"[3354.5271 -10127.8555 -14812.3174]","80":"[2835.9783 -10025.417 -14812.4434]","81":"[2318.46 -9923.0635 -14812.4629]","82":"[1801.6915 -9822.2734 -14812.377]","83":"[1286.1272 -9720.8418 -14812.3213]","84":"[771.7814 -9618.9336 -14812.3516]","85":"[258.157 -9518.6484 -14812.2949]","86":"[-254.3105 -9417.6113 -14812.3965]","87":"[-765.7764 -9316.8818 -14812.4053]","88":"[-1276.2814 -9216.7656 -14812.335]","89":"[-1785.7622 -9116.5039 -14812.3291]","90":"[-2302.0156 -9014.5088 -14812.2979]","91":"[-2822.1394 -8912.5107 -14812.4961]","92":"[-3325.3206 -8811.4951 -14812.4805]","93":"[-3848.8625 -8690.293 -14812.5742]","94":"[-4360.4126 -8532.7119 -14812.2529]","95":"[-4859.2964 -8342.459 -14812.1875]","96":"[-5340.8159 -8145.1392 -14812.4326]","97":"[-5831.0542 -7943.9414 -14812.457]","98":"[-6327.3013 -7742.0845 -14812.4531]","99":"[-6825.6875 -7537.9863 -14812.3555]","100":"[-7323.0659 -7334.0566 -14812.4033]","101":"[-7819.7192 -7131.0264 -14812.5234]","102":"[-8315.3896 -6928.2427 -14812.5195]","103":"[-8809.8018 -6725.1943 -14812.3115]","104":"[-9303.793 -6523.6772 -14812.501]","105":"[-9796.7266 -6322.229 -14812.4775]","106":"[-10288.3955 -6120.4043 -14812.4658]","107":"[-10775.8184 -5921.5703 -14812.418]","108":"[-11266.582 -5714.626 -14812.4941]","109":"[-11742.8369 -5483.5513 -14811.6885]","110":"[-12196.8525 -5214.0283 -14812.0742]","111":"[-12617.6992 -4902.4585 -14812.0742]","112":"[-12989.2393 -4544.9155 -14812.3975]","113":"[-13308.3916 -4133.0068 -14812.333]","114":"[-13551.2832 -3677.2957 -14812.5264]","115":"[-13713.2988 -3185.416 -14812.4492]","116":"[-13789.6328 -2671.4226 -14812.4043]","117":"[-13787.9414 -2153.9885 -14812.6162]","118":"[-13721.8457 -1642.849 -14812.2451]","119":"[-13603.709 -1142.548 -14812.2891]","120":"[-13443.5576 -653.5704 -14811.0918]","121":"[-13256.4287 -175.9238 -14793.9199]","122":"[-13057.6094 297.5261 -14755.6387]","123":"[-12853.2021 783.9495 -14700.6465]","124":"[-12654.5674 1259.3628 -14641.4053]","125":"[-12456.04 1731.5317 -14579.9219]","126":"[-12248.9492 2228.2607 -14515.2139]","127":"[-12039.7764 2726.0203 -14451.4619]","128":"[-11840.4307 3199.9285 -14393.915]","129":"[-11631.3447 3699.7581 -14341.0283]","130":"[-11431.666 4176.4258 -14310.4902]","131":"[-11227.2998 4667.6899 -14300.0625]","132":"[-11022.8232 5160.1245 -14300.3701]","133":"[-10811.8613 5647.6357 -14300.209]","134":"[-10583.8955 6128.3774 -14300.3018]","135":"[-10338.0498 6598.3325 -14300.251]","136":"[-10073.2451 7055.7876 -14300.1836]","137":"[-9787.2314 7498.6182 -14300.0801]","138":"[-9479.7793 7924.729 -14300.2412]","139":"[-9148.1768 8330.6582 -14300.3574]","140":"[-8792.1396 8713.4961 -14300.3643]","141":"[-8391.3193 9087.4277 -14300.3008]","142":"[-7988.7739 9406.3984 -14300.4229]","143":"[-7563.4204 9691.4805 -14300.251]","144":"[-7084.0127 9954.4395 -14300.4893]","145":"[-6584.0459 10171.2852 -14300.4424]","146":"[-6067.6401 10340.125 -14300.4502]","147":"[-5539.3472 10460.459 -14300.3145]","148":"[-5004.3076 10535.1035 -14300.4512]","149":"[-4466.4209 10565.3809 -14300.4814]","150":"[-3928.9919 10555.4111 -14300.5361]","151":"[-3394.5896 10509.6758 -14300.4609]","152":"[-2865.228 10431.0566 -14300.3984]","153":"[-2342.0264 10323.7227 -14300.4082]","154":"[-1825.7256 10191.0918 -14300.4551]","155":"[-1316.8772 10035.958 -14300.5137]","156":"[-815.629 9860.8193 -14300.2773]","157":"[-306.6468 9662.9404 -14300.374]","158":"[184.0505 9460.5 -14300.5566]","159":"[686.3942 9250.7256 -14292.6309]","160":"[1193.7112 9039.4072 -14262.7373]","161":"[1672.2434 8837.8496 -14212.5273]","162":"[2156.592 8634.4297 -14153.7764]","163":"[2630.5078 8436.7168 -14093.1689]","164":"[3127.7014 8227.7197 -14028.2295]","165":"[3612.6086 8024.7544 -13965.5762]","166":"[4085.3877 7827.0356 -13906.1758]","167":"[4560.1206 7627.1006 -13851.6719]","168":"[5054.3516 7420.4502 -13808.6807]","169":"[5539.4746 7217.3291 -13790.083]","170":"[6020.5854 7018.9482 -13788.5791]","171":"[6500.4556 6815.6738 -13788.5195]","172":"[6995.1919 6592.4409 -13788.4805]","173":"[7457.6963 6361.5771 -13788.4521]","174":"[7909.3311 6112.916 -13788.5186]","175":"[8348.6416 5845.936 -13788.5459]","176":"[8773.0244 5558.1069 -13788.374]","177":"[9204.626 5228.8613 -13788.3721]","178":"[9593.9756 4892.1265 -13788.2891]","179":"[9972.6201 4517.7275 -13788.2695]","180":"[10320.4697 4116.5693 -13788.2617]","181":"[10634.5723 3690.436 -13788.3369]","182":"[10909.8135 3240.0752 -13788.293]","183":"[11143.5 2768.4653 -13788.4717]","184":"[11333.8525 2279.4902 -13788.3809]","185":"[11478.2207 1776.4305 -13788.416]","186":"[11579.1875 1264.2792 -13788.4277]","187":"[11638.0625 738.99 -13788.4258]","188":"[11656.4004 221.6532 -13788.3721]","189":"[11637.7168 -294.4873 -13788.2393]","190":"[11586.4121 -807.1337 -13788.376]","191":"[11506.2842 -1315.0856 -13788.3662]","192":"[11399.6074 -1817.1313 -13788.3457]","193":"[11269.917 -2312.7676 -13788.3604]","194":"[11109.0498 -2833.9116 -13788.3721]","195":"[10929.7217 -3340.8635 -13788.3652]","196":"[10740.1572 -3822.4094 -13788.4258]","197":"[10544.4268 -4299.7437 -13788.4463]","198":"[10352.082 -4777.2983 -13788.5049]","199":"[10192.9385 -5264.6738 -13788.1982]","200":"[10061.4268 -5789.5898 -13788.3691]","201":"[9952.8115 -6318.7407 -13788.4873]","202":"[9849.2764 -6831.0093 -13788.4453]","203":"[9734.418 -7359.2036 -13787.9844]","204":"[9607.7734 -7866.082 -13788.2969]","205":"[9458.9395 -8371.71 -13788.4199]","206":"[9286.8408 -8876.8691 -13787.7969]","207":"[9091.7285 -9372.0557 -13788.0723]","208":"[8877.2012 -9842.8516 -13788.3594]","209":"[8633.3643 -10304.0605 -13788.4629]","210":"[8361.2578 -10747.374 -13788.2051]","211":"[8060.0845 -11169.3838 -13787.9502]","212":"[7729.0269 -11565.8408 -13788.4482]","213":"[7355.0459 -11943.8281 -13788.5195]","214":"[6944.2427 -12292.4023 -13788.4355]","215":"[6505.2671 -12601.8496 -13788.5479]","216":"[6040.4282 -12867.5615 -13788.4268]","217":"[5555.4067 -13090.6514 -13788.332]","218":"[5054.1807 -13270.4082 -13788.2705]","219":"[4541.3652 -13408.5332 -13788.3105]","220":"[4020.9392 -13508.0225 -13788.4307]","221":"[3496.3337 -13571.4531 -13788.4443]","222":"[2969.9172 -13602.457 -13788.4043]","223":"[2443.7104 -13604.6133 -13788.4043]","224":"[1919.0599 -13580.1309 -13788.457]","225":"[1396.9669 -13532.6211 -13788.3652]","226":"[878.332 -13463.9072 -13788.3584]","227":"[363.3982 -13376.6357 -13788.4746]","228":"[-157.9193 -13274.9561 -13788.3662]","229":"[-683.1862 -13168.2373 -13788.3057]","230":"[-1193.7418 -13065.4316 -13788.4541]","231":"[-1703.8014 -12963.1982 -13788.5195]","232":"[-2218.967 -12859.8262 -13788.4922]","233":"[-2732.8047 -12756.3164 -13788.4561]","234":"[-3245.2788 -12652.8564 -13788.4668]","235":"[-3756.6428 -12550.2734 -13788.4551]","236":"[-4266.8203 -12448.0322 -13788.4609]","237":"[-4810.0586 -12338.7568 -13788.3584]","238":"[-5333.458 -12232.9102 -13788.2041]","239":"[-5850.3169 -12128.7627 -13788.4463]","240":"[-6354.7813 -12027.9443 -13788.4805]","241":"[-6884.9858 -11918.917 -13789.0498]","242":"[-7391.1919 -11805.6621 -13789.5947]","243":"[-7890.4663 -11676.2773 -13789.2383]","244":"[-8384.1309 -11525.082 -13789.2256]","245":"[-8869.2578 -11354.8027 -13789.3691]","246":"[-9344.8096 -11163.6094 -13788.9551]","247":"[-9842.2813 -10928.7744 -13789.3047]","248":"[-10323.8076 -10665.75 -13789.3535]","249":"[-10784.1836 -10370.4609 -13789.251]","250":"[-11219.5938 -10042.4707 -13788.6611]","251":"[-11625.1738 -9681.7119 -13789.0293]","252":"[-11996.041 -9287.623 -13789.334]","253":"[-12329.8457 -8864.0049 -13789.3428]","254":"[-12621.084 -8412.0811 -13789.4199]","255":"[-12869.3477 -7936.9048 -13789.4814]","256":"[-13074.3584 -7443.2295 -13789.2773]","257":"[-13235.7119 -6935.1152 -13789.2754]","258":"[-13357.0283 -6417.332 -13789.4014]","259":"[-13440.5762 -5893.3418 -13789.2793]","260":"[-13489.5635 -5366.2915 -13789.3135]","261":"[-13507.5811 -4838.5127 -13788.9893]","262":"[-13497.2275 -4312.0503 -13789.1621]","263":"[-13462.0029 -3787.7629 -13789.3037]","264":"[-13404.9023 -3266.4746 -13789.3506]","265":"[-13327.5225 -2749.2166 -13788.998]","266":"[-13233.1104 -2236.5908 -13789.291]","267":"[-13130.3486 -1726.7643 -13789.3643]","268":"[-13024.7314 -1202.9604 -13780.1416]","269":"[-12917.8281 -681.2442 -13749.6094]","270":"[-12814.2783 -182.1558 -13699.8193]","271":"[-12708.1523 335.6203 -13640.7783]","272":"[-12601.459 854.7872 -13577.9814]","273":"[-12495.8105 1367.4259 -13515.0264]","274":"[-12392.9854 1870.0587 -13453.7109]","275":"[-12286.6611 2388.0776 -13392.4785]","276":"[-12179.8896 2905.3899 -13337.2061]","277":"[-12072.7617 3425.3354 -13295.9199]","278":"[-11965.8174 3934.824 -13278.7178]","279":"[-11846.7852 4435.7729 -13277.5781]","280":"[-11707.6914 4948.2329 -13277.3428]","281":"[-11543.4424 5460.1738 -13277.3252]","282":"[-11361.5762 5954.2065 -13277.5732]","283":"[-11153.8818 6436.6938 -13277.4199]","284":"[-10921.3486 6906.3701 -13277.5156]","285":"[-10660.4355 7358.917 -13277.4785]","286":"[-10371.2373 7791.501 -13277.3398]","287":"[-10052.0186 8200.5186 -13277.373]","288":"[-9701.9434 8581.4531 -13277.583]","289":"[-9323.375 8931.8027 -13277.3262]","290":"[-8916.1836 9246.1289 -13277.5059]","291":"[-8484.7939 9523.7285 -13277.4512]","292":"[-8004.2505 9773.6338 -13277.502]","293":"[-7504.8442 9979.5859 -13277.3916]","294":"[-6990.9165 10141.7197 -13277.5254]","295":"[-6467.0991 10262.5439 -13277.4111]","296":"[-5936.998 10344.7734 -13277.4775]","297":"[-5403.7358 10392.417 -13277.3682]","298":"[-4869.8877 10408.0713 -13277.3984]","299":"[-4336.895 10395.4199 -13277.4912]","300":"[-3806.0623 10357.418 -13277.376]","301":"[-3278.6365 10296.7168 -13277.3096]","302":"[-2755.5706 10216.4541 -13277.2998]","303":"[-2236.6558 10118.8643 -13277.3418]","304":"[-1719.5542 10016.0313 -13277.4873]","305":"[-1208.9558 9896.415 -13276.8906]","306":"[-728.6043 9718.4072 -13277.1699]","307":"[-259.6806 9458.6992 -13277.3555]","308":"[164.0954 9134.2197 -13277.3857]","309":"[546.6168 8764.2832 -13277.2539]","310":"[890.4574 8360.0713 -13277.291]","311":"[1202.7516 7932.4331 -13277.4385]","312":"[1498.2418 7493.8325 -13277.4307]","313":"[1773.548 7043.8413 -13277.4492]","314":"[2017.6675 6578.5142 -13277.21]","315":"[2229.8982 6098.8726 -13277.1455]","316":"[2430.0586 5615.9746 -13277.4434]","317":"[2631.5864 5134.7231 -13277.2627]","318":"[2831.689 4653.6758 -13277.3838]","319":"[3031.9026 4173.4312 -13277.1914]","320":"[3231.7554 3693.8618 -13277.4463]","321":"[3431.3108 3214.8982 -13277.2129]","322":"[3630.6021 2736.6545 -13277.3975]","323":"[3833.3118 2260.9045 -13277.4453]","324":"[4059.6628 1798.2139 -13277.1514]","325":"[4318.7656 1354.9869 -13277.3164]","326":"[4597.104 924.3375 -13277.3545]","327":"[4881.3906 498.4594 -13277.4883]","328":"[5176.5654 52.7148 -13277.5244]","329":"[5472.936 -391.3092 -13277.3662]","330":"[5767.5142 -835.6326 -13277.5127]","331":"[6062.978 -1278.4274 -13277.3584]","332":"[6358.3203 -1720.4373 -13277.5176]","333":"[6654.1211 -2161.1477 -13277.5371]","334":"[6949.1885 -2600.2788 -13277.5586]","335":"[7237.3242 -3030.3508 -13277.5186]","336":"[7529.5527 -3465.7361 -13277.5156]","337":"[7822.9219 -3900.7373 -13277.5801]","338":"[8113.7607 -4336.3979 -13277.5557]","339":"[8405.7031 -4770.4067 -13277.4902]","340":"[8697.2607 -5203.7437 -13277.4951]","341":"[8985.4082 -5634.8643 -13277.5791]","342":"[9272.2178 -6059.7314 -13277.6045]","343":"[9569.4727 -6504.5615 -13277.6445]","344":"[9867.998 -6947.3828 -13277.5449]","345":"[10163.8252 -7390.209 -13277.6035]","346":"[10452.7314 -7819.5078 -13276.9463]","347":"[10746.7852 -8258.1025 -13277.5498]","348":"[11040.0908 -8695.1641 -13277.168]","349":"[11333.2178 -9130.6787 -13277.6025]","350":"[11625.2588 -9565.3721 -13277.7246]","351":"[11916.0146 -9999.1182 -13277.5137]","352":"[12206.4229 -10432.2061 -13277.5635]","353":"[12497.1572 -10864.2119 -13277.6094]","354":"[12786.5332 -11296.2256 -13277.6084]","355":"[13076.2656 -11727.1631 -13277.5615]","356":"[13365.3174 -12157.6533 -13277.5811]","357":"[13653.2188 -12588.0566 -13277.3418]","358":"[13942.0371 -13016.1143 -13277.6025]","359":"[14229.2236 -13446.0283 -13277.4189]","360":"[14518.5137 -13875.7363 -13277.4805]","361":"[14804.3311 -14301.1514 -13277.5615]","362":"[15092.2686 -14730.123 -13277.4971]","363":"[15210.0459 -14906.4482 -13277.2363]"},"30":{"1":"[14990.9238 -15054.8789 -13277.3682]","2":"[14934.8086 -14970.667 -13277.5615]","3":"[14646.3857 -14541.3037 -13277.6123]","4":"[14359.3076 -14111.625 -13277.5537]","5":"[14073.1758 -13686.8389 -13277.6191]","6":"[13786.7793 -13260.3662 -13277.5693]","7":"[13499.957 -12833.6504 -13277.5742]","8":"[13214.6338 -12406.9961 -13277.583]","9":"[12925.6797 -11978.0908 -13277.5029]","10":"[12639.9883 -11551.9492 -13277.5762]","11":"[12351.877 -11123.0264 -13277.5557]","12":"[12065.6455 -10696.8457 -13277.5938]","13":"[11774.5703 -10263.2314 -13277.5283]","14":"[11488.7021 -9836.8789 -13277.6104]","15":"[11190.6436 -9392.0361 -13277.3359]","16":"[10898.3311 -8958.5029 -13277.4268]","17":"[10606.2373 -8521.8496 -13277.3564]","18":"[10316.7432 -8091.7925 -13277.3389]","19":"[10028.6836 -7661.5469 -13277.4561]","20":"[9739.6631 -7231.6992 -13277.3223]","21":"[9441.8291 -6787.7837 -13277.4297]","22":"[9153.04 -6357.3887 -13277.4932]","23":"[8855.3418 -5914.6191 -13277.6719]","24":"[8558.5254 -5471.8691 -13277.5996]","25":"[8268.7197 -5039.1885 -13277.4941]","26":"[7977.6846 -4607.3833 -13277.3535]","27":"[7687.8076 -4175.8364 -13277.5137]","28":"[7398.8521 -3744.6987 -13277.5576]","29":"[7103.2568 -3304.6543 -13277.6104]","30":"[6798.0674 -2849.6523 -13277.4873]","31":"[6493.2476 -2395.5803 -13277.4893]","32":"[6188.7661 -1942.5642 -13277.582]","33":"[5885.3638 -1490.002 -13277.583]","34":"[5583.979 -1037.261 -13277.4316]","35":"[5283.5308 -585.0884 -13277.4434]","36":"[4983.4458 -133.9091 -13277.5176]","37":"[4683.8193 316.4288 -13277.458]","38":"[4385.0229 765.9813 -13277.2246]","39":"[4086.1826 1213.9291 -13277.1738]","40":"[3787.72 1660.7482 -13277.1348]","41":"[3489.7861 2106.3677 -13277.376]","42":"[3192.4285 2550.4861 -13277.4355]","43":"[2896.4121 2994.4006 -13277.4521]","44":"[2600.6211 3437.4033 -13277.458]","45":"[2305.1641 3879.4922 -13277.457]","46":"[2010.0603 4320.4141 -13277.457]","47":"[1722.1283 4751.332 -13277.4072]","48":"[1436.7898 5179.7007 -13277.54]","49":"[1148.597 5608.1758 -13277.5322]","50":"[834.3696 6042.6167 -13277.5713]","51":"[493.5273 6453.2549 -13277.1846]","52":"[115.9582 6826.7285 -13277.5049]","53":"[-298.9617 7153.6265 -13277.5107]","54":"[-752.2369 7419.0674 -13277.083]","55":"[-1237.5333 7608.4321 -13276.1904]","56":"[-1737.2817 7732.9688 -13276.8994]","57":"[-2258.2256 7837.9531 -13276.3779]","58":"[-2778.9063 7937.3379 -13276.3047]","59":"[-3301.6978 8019.3931 -13276.5313]","60":"[-3825.5051 8083.6133 -13276.459]","61":"[-4350.7808 8123.811 -13276.6113]","62":"[-4875.9561 8140.7939 -13276.3672]","63":"[-5400.0942 8130.5156 -13276.5225]","64":"[-5919.2373 8090.3008 -13276.4209]","65":"[-6446.7832 8016.4976 -13276.4883]","66":"[-6970.1313 7905.0645 -13276.4131]","67":"[-7483.333 7753.9858 -13276.5625]","68":"[-7980.4517 7560.397 -13276.5869]","69":"[-8457.6934 7325.8145 -13276.4551]","70":"[-8909.9971 7049.1069 -13276.5156]","71":"[-9330.1094 6739.229 -13276.5225]","72":"[-9727.0195 6384.6763 -13276.416]","73":"[-10091.4961 5998.6792 -13276.4355]","74":"[-10422.2012 5585.147 -13276.4688]","75":"[-10723.5156 5144.5757 -13276.29]","76":"[-10985.5771 4700.478 -13276.2998]","77":"[-11221.6963 4230.7227 -13276.4248]","78":"[-11431.7002 3749.9583 -13276.3604]","79":"[-11617.25 3260.4116 -13276.4111]","80":"[-11778.0635 2763.3086 -13276.4258]","81":"[-11919.665 2261.5046 -13276.377]","82":"[-12041.8135 1755.6522 -13276.4443]","83":"[-12148.8271 1247.2883 -13276.4814]","84":"[-12251.1172 738.8724 -13276.501]","85":"[-12357.7607 206.7843 -13276.4512]","86":"[-12462.2842 -311.1961 -13276.4551]","87":"[-12567.5488 -834.473 -13276.4492]","88":"[-12672.5488 -1356.6351 -13276.4023]","89":"[-12777.4941 -1877.5859 -13276.4629]","90":"[-12882.0078 -2397.1887 -13276.3682]","91":"[-12987.707 -2922.3506 -13276.3242]","92":"[-13090.6152 -3434.0808 -13276.3496]","93":"[-13187.6328 -3951.8586 -13276.3652]","94":"[-13269.0596 -4483.271 -13276.3145]","95":"[-13329.792 -5016.3452 -13276.4971]","96":"[-13366.7354 -5550.0381 -13276.6191]","97":"[-13378.8652 -6083.5264 -13276.4697]","98":"[-13361.4326 -6615.3115 -13276.6973]","99":"[-13313.7852 -7143.6958 -13276.4678]","100":"[-13231.3057 -7666.3584 -13276.3066]","101":"[-13112.2314 -8180.4409 -13276.3232]","102":"[-12954.8643 -8682.3965 -13276.5371]","103":"[-12756.1953 -9167.7949 -13276.4971]","104":"[-12517.8867 -9633.2822 -13276.4648]","105":"[-12239.5801 -10074.0645 -13276.3164]","106":"[-11923.9746 -10487.1328 -13276.4854]","107":"[-11574.3252 -10869.9434 -13276.3408]","108":"[-11194.9941 -11221.3828 -13276.4297]","109":"[-10779.9014 -11547.8408 -13276.3223]","110":"[-10354.9258 -11835.2656 -13276.3057]","111":"[-9881.918 -12107.9922 -13276.4268]","112":"[-9393.9131 -12350.373 -13276.3555]","113":"[-8893.5371 -12563.1328 -13276.3193]","114":"[-8383.9443 -12749.5889 -13276.3066]","115":"[-7867.4746 -12912.4238 -13276.2354]","116":"[-7345.397 -13052.4463 -13276.3271]","117":"[-6819.4941 -13174.1963 -13278.8535]","118":"[-6288.501 -13284.8984 -13301.3281]","119":"[-5785.3647 -13387.8594 -13345.2734]","120":"[-5272.9351 -13493.8477 -13401.5244]","121":"[-4748.4912 -13601.6182 -13463.6826]","122":"[-4247.3901 -13704.5869 -13525.1631]","123":"[-3734.6516 -13809.5967 -13588.0586]","124":"[-3210.512 -13917.373 -13650.7402]","125":"[-2675.3191 -14027.7305 -13711.0146]","126":"[-2169.3037 -14131.8633 -13758.3555]","127":"[-1657.9064 -14236.5684 -13782.4287]","128":"[-1142.9711 -14340.9951 -13788.6064]","129":"[-627.7871 -14443.8037 -13788.5752]","130":"[-93.3905 -14551.5176 -13788.5479]","131":"[423.8394 -14656.3545 -13788.5098]","132":"[940.3125 -14759.7109 -13788.4639]","133":"[1456.0538 -14861.8193 -13788.2432]","134":"[1973.0281 -14951.5283 -13788.4951]","135":"[2492.0532 -15020.2334 -13788.3145]","136":"[3012.1216 -15070.1201 -13788.3779]","137":"[3532.6245 -15095.9795 -13787.8027]","138":"[4052.1797 -15095.8506 -13788.1299]","139":"[4569.6919 -15068.9844 -13788.2178]","140":"[5083.1992 -15009.9697 -13788.1826]","141":"[5590.5244 -14918.2539 -13788.252]","142":"[6088.645 -14791.4131 -13788.2432]","143":"[6573.7393 -14626.2061 -13788.4443]","144":"[7075.4941 -14407.3164 -13788.2861]","145":"[7553.3228 -14143.9092 -13788.2256]","146":"[8002.9922 -13837.9102 -13788.3066]","147":"[8421.4375 -13492.9336 -13788.3203]","148":"[8805.7266 -13112.459 -13788.2451]","149":"[9155.7344 -12702.1758 -13788.293]","150":"[9470.5508 -12265.9248 -13788.3789]","151":"[9753.0313 -11809.4824 -13788.3496]","152":"[10004.0176 -11336.4336 -13788.3857]","153":"[10225.6689 -10850.2344 -13788.3564]","154":"[10421.0371 -10354.0127 -13788.2881]","155":"[10592.0879 -9850.0518 -13788.4385]","156":"[10740.7578 -9340.1016 -13788.2793]","157":"[10869.585 -8825.8008 -13788.4688]","158":"[10981.3018 -8308.8984 -13788.4199]","159":"[11082.3994 -7805.9434 -13788.4287]","160":"[11188.6436 -7277.6699 -13788.377]","161":"[11291.0859 -6769.5918 -13788.5742]","162":"[11392.4395 -6262.1377 -13788.4473]","163":"[11494.8975 -5755.8623 -13788.6924]","164":"[11599.6006 -5251.0669 -13788.4863]","165":"[11723.9434 -4752.5376 -13788.3398]","166":"[11894.8643 -4238.5415 -13788.6367]","167":"[12096.709 -3737.4424 -13788.2236]","168":"[12301.708 -3239.2986 -13788.3779]","169":"[12494.8115 -2738.1045 -13788.4189]","170":"[12663.0586 -2254.2495 -13788.3467]","171":"[12813.2285 -1760.0607 -13788.2676]","172":"[12941.624 -1260.8057 -13788.4521]","173":"[13047.9082 -745.6946 -13788.3506]","174":"[13129.2637 -205.9638 -13788.3779]","175":"[13175.8203 336.4721 -13788.376]","176":"[13186.2402 861.8286 -13788.2334]","177":"[13157.4443 1391.4506 -13788.3105]","178":"[13086.9375 1915.6223 -13788.3701]","179":"[12973.0391 2430.4377 -13788.4668]","180":"[12814.1182 2931.4375 -13788.541]","181":"[12611.9443 3414.9187 -13788.3965]","182":"[12368.2285 3877.1584 -13788.3848]","183":"[12085.21 4314.6611 -13788.3828]","184":"[11768.4111 4726.6812 -13788.3701]","185":"[11421.2451 5111.812 -13788.5518]","186":"[11048.1084 5470.1138 -13788.4355]","187":"[10653.7588 5803.2148 -13788.4209]","188":"[10240.6982 6111.0757 -13788.3916]","189":"[9812.8076 6396.2085 -13788.3477]","190":"[9372.5908 6659.8911 -13788.4248]","191":"[8922.1426 6903.7212 -13788.3301]","192":"[8432.5225 7144.0063 -13788.2744]","193":"[7935.3535 7365.5127 -13788.2334]","194":"[7434.0742 7575.0293 -13788.252]","195":"[6933.1865 7782.0547 -13788.502]","196":"[6433.7559 7989.5313 -13788.5713]","197":"[5934.3115 8196.8252 -13795.4141]","198":"[5432.3218 8407.0752 -13823.584]","199":"[4956.1313 8606.8389 -13872.7402]","200":"[4470.0303 8810.5713 -13931.3164]","201":"[3972.3584 9019.1924 -13995.0596]","202":"[3496.7832 9218.5313 -14056.8926]","203":"[3010.5735 9422.1016 -14120.0898]","204":"[2513.7661 9630.4727 -14182.4785]","205":"[2043.1874 9827.7998 -14236.7539]","206":"[1565.1273 10028.248 -14279.0391]","207":"[1091.0209 10226.2168 -14297.8115]","208":"[612.6835 10424.165 -14300.2773]","209":"[136.1031 10622.5693 -14300.2949]","210":"[-340.4397 10818.9531 -14300.5059]","211":"[-816.7238 11013.8594 -14300.3477]","212":"[-1313.172 11202.1729 -14300.6211]","213":"[-1822.8488 11374.5684 -14300.4385]","214":"[-2344.6631 11526.7129 -14300.3242]","215":"[-2871.978 11653.085 -14300.4629]","216":"[-3403.5891 11752.6563 -14300.3975]","217":"[-3938.7405 11820.8447 -14300.415]","218":"[-4449.9487 11853.3711 -14300.5723]","219":"[-4989.7607 11850.3721 -14300.5]","220":"[-5518.7676 11807.625 -14300.4629]","221":"[-6050.6113 11719.541 -14300.4424]","222":"[-6571.4541 11587.2422 -14300.3291]","223":"[-7076.2012 11407.6387 -14300.5576]","224":"[-7556.3257 11187.0713 -14300.2969]","225":"[-8014.4326 10922.3672 -14300.4404]","226":"[-8447.6367 10621.0723 -14300.4365]","227":"[-8852.9502 10285.208 -14300.4365]","228":"[-9231.4453 9921.1123 -14300.416]","229":"[-9582.4756 9532.0264 -14300.2529]","230":"[-9917.0566 9110.1484 -14300.4551]","231":"[-10226.7617 8668.7354 -14300.3633]","232":"[-10511.9443 8212.2725 -14300.3945]","233":"[-10775.0693 7743.8667 -14300.4541]","234":"[-11017.3281 7265.4873 -14300.4053]","235":"[-11241.0088 6779.1143 -14300.3789]","236":"[-11450.6943 6286.5737 -14300.3525]","237":"[-11657.3389 5787.0103 -14300.502]","238":"[-11864.3203 5286.2192 -14300.4287]","239":"[-12072.3965 4786.8286 -14301.7832]","240":"[-12280.4922 4285.7539 -14322.3701]","241":"[-12491.709 3782.6482 -14367.6611]","242":"[-12690.9775 3309.4878 -14422.125]","243":"[-12892.0088 2827.7385 -14482.5205]","244":"[-13097.249 2337.7463 -14545.8662]","245":"[-13306.7578 1839.2516 -14611.0771]","246":"[-13519.3906 1331.3479 -14675.5713]","247":"[-13719.1543 854.7452 -14732.6494]","248":"[-13921.8594 371.4726 -14781.1729]","249":"[-14120.1514 -100.9917 -14805.2998]","250":"[-14321.1475 -579.5796 -14812.668]","251":"[-14520.5791 -1064.4591 -14812.3457]","252":"[-14698.8691 -1570.0078 -14812.4883]","253":"[-14835.5293 -2078.7136 -14812.1045]","254":"[-14920.2471 -2583.7212 -14812.707]","255":"[-14944.5859 -3115.0969 -14812.4854]","256":"[-14890.5215 -3645.2271 -14812.3555]","257":"[-14749.0293 -4155.6201 -14812.5576]","258":"[-14532.457 -4609.4717 -14812.293]","259":"[-14229.9316 -5037.9028 -14812.4365]","260":"[-13866.1943 -5413.4858 -14812.5645]","261":"[-13456.6299 -5736.353 -14812.2861]","262":"[-13016.0439 -6013.3154 -14812.3164]","263":"[-12550.9209 -6250.8975 -14812.208]","264":"[-12059.1729 -6465.79 -14812.2959]","265":"[-11568.4404 -6666.6021 -14812.6455]","266":"[-11073.3994 -6867.187 -14812.4648]","267":"[-10589.2988 -7066.0972 -14812.4414]","268":"[-10106.3301 -7264.6152 -14812.4707]","269":"[-9623.8193 -7461.168 -14812.4707]","270":"[-9142.4834 -7657.3809 -14812.4453]","271":"[-8662.7324 -7854.3335 -14812.3936]","272":"[-8184.0596 -8051.0078 -14812.4844]","273":"[-7682.2915 -8256.1094 -14812.502]","274":"[-7182.6597 -8459.7314 -14812.5029]","275":"[-6684.0303 -8663.958 -14812.4619]","276":"[-6200.8569 -8861.7822 -14812.4629]","277":"[-5706.3823 -9064.2236 -14812.458]","278":"[-5212.4141 -9266.0029 -14812.4541]","279":"[-4717.771 -9463.6699 -14812.5166]","280":"[-4214.2339 -9631.0117 -14812.3213]","281":"[-3701.5808 -9762.3701 -14812.1787]","282":"[-3183.958 -9868.6221 -14812.4883]","283":"[-2662.0857 -9971.791 -14812.2285]","284":"[-2136.1021 -10074.5898 -14812.1523]","285":"[-1595.9132 -10182.1152 -14812.123]","286":"[-1079.009 -10282.5264 -14812.2695]","287":"[-563.3532 -10383.9336 -14812.4395]","288":"[-48.9226 -10485.9932 -14812.4355]","289":"[464.7746 -10586.5381 -14812.4248]","290":"[977.5349 -10686.6016 -14812.4648]","291":"[1488.9122 -10788.2949 -14812.3936]","292":"[1999.5326 -10888.3828 -14812.3906]","293":"[2509.2246 -10987.9131 -14812.3115]","294":"[3017.6902 -11088.7471 -14812.3389]","295":"[3525.333 -11188.4717 -14812.2725]","296":"[4032.042 -11287.5771 -14812.3057]","297":"[4537.5908 -11387.4873 -14812.3145]","298":"[5042.0254 -11486.4258 -14812.6055]","299":"[5545.231 -11585.4863 -14812.3545]","300":"[6080.0381 -11691.0518 -14812.543]","301":"[6595.2676 -11792.1367 -14812.7158]","302":"[7112.8496 -11894.208 -14812.3115]","303":"[7620.5205 -11993.5957 -14812.0811]","304":"[8140.9204 -12080.5791 -14812.3408]","305":"[8678.3887 -12135.7148 -14812.0781]","306":"[9206.4121 -12137.8115 -14812.2256]","307":"[9728.9355 -12082.3379 -14812.6846]","308":"[10235.877 -11955.5771 -14812.2256]","309":"[10713.9854 -11751.7637 -14812.1865]","310":"[11147.3369 -11470.0068 -14812.249]","311":"[11523.9844 -11118.9268 -14812.123]","312":"[11838.7783 -10713.2783 -14812.4219]","313":"[12094.6641 -10269.2002 -14812.2529]","314":"[12306.4727 -9772.5527 -14812.3135]","315":"[12469.1865 -9258.6523 -14812.3613]","316":"[12586.3838 -8760.208 -14812.2822]","317":"[12694.3379 -8228.4277 -14812.1221]","318":"[12796.2432 -7701.0762 -14812.3555]","319":"[12896.8867 -7189.1846 -14812.7061]","320":"[13004.9951 -6647.0391 -14812.5771]","321":"[13111.5342 -6105.9502 -14812.4102]","322":"[13216.6787 -5565.9736 -14812.4404]","323":"[13322.6914 -5024.8608 -14812.3848]","324":"[13427.46 -4495.0796 -14812.2998]","325":"[13530.0361 -3976.2078 -14812.5391]","326":"[13639.7236 -3417.5862 -14812.4043]","327":"[13743.4141 -2888.3052 -14812.3164]","328":"[13849.2168 -2348.6189 -14812.5381]","329":"[13954.8916 -1810.6359 -14812.4287]","330":"[14060.3291 -1274.3892 -14812.4443]","331":"[14165.998 -739.8583 -14812.4189]","332":"[14271.2471 -206.8896 -14812.459]","333":"[14375.9287 324.3065 -14811.8086]","334":"[14479.7891 853.7997 -14812.9902]","335":"[14582.9229 1381.6122 -14812.2529]","336":"[14686.2529 1907.7643 -14812.583]","337":"[14789.8818 2432.2334 -14812.4531]","338":"[14893.0977 2955.2104 -14812.4775]","339":"[14995.6914 3476.7495 -14812.415]","340":"[15093.9648 3980.4333 -14812.4805]","341":"[15197.666 4506.4121 -14812.2402]","342":"[15303.2813 5040.9609 -14812.3916]","343":"[15406.7021 5569.0933 -14812.5205]","344":"[15505.5918 6073.9585 -14812.4863]","345":"[15609.8027 6600.8862 -14812.4668]","346":"[15708.5186 7103.3501 -14812.3428]","347":"[15808.6406 7613.1772 -14812.3701]","348":"[15909.582 8124.4263 -14812.502]","349":"[16006.3096 8634.8867 -14812.3848]","350":"[16082.0566 9159.002 -14812.1963]","351":"[16115.4834 9692.249 -14812.4453]","352":"[16093.4053 10214.0176 -14812.5898]","353":"[16005.9658 10734.9883 -14812.5381]","354":"[15846.6133 11231.6328 -14812.6357]","355":"[15603.4375 11702.8262 -14812.5645]","356":"[15308.7871 12089.2539 -14812.3447]","357":"[14928.2227 12448.3506 -14812.2686]","358":"[14498.1787 12742.7969 -14812.3301]","359":"[14034.9189 12977.7793 -14812.4971]","360":"[13539.709 13166.2725 -14812.4043]","361":"[13023.4414 13310.8379 -14812.2148]","362":"[12496.9648 13426.0518 -14812.1436]","363":"[11966.2568 13529.9082 -14812.6582]","364":"[11463.2568 13628.167 -14804.0459]","365":"[10933.2803 13733.417 -14774.0088]","366":"[10400.248 13837.54 -14721.3604]","367":"[9880.0303 13940.1211 -14661.6279]","368":"[9372.9775 14039.7959 -14600.625]","369":"[8844.8096 14143.0645 -14535.9443]","370":"[8331.8613 14244.0576 -14473.835]","371":"[7820.4771 14344.1299 -14413.6582]","372":"[7317.1914 14443.7549 -14360.04]","373":"[6809.9668 14543.1631 -14320.1816]","374":"[6292.688 14627.1689 -14302.6748]","375":"[5782.6919 14679.1855 -14300.5684]","376":"[5264.4399 14695.8086 -14300.3896]","377":"[4746.4072 14698.4297 -14300.5518]","378":"[4229.084 14698.2051 -14300.4424]","379":"[3711.8418 14697.5625 -14300.4453]","380":"[3197.4041 14697.6074 -14300.4463]","381":"[2887.7629 14697.7695 -14300.4404]"}} \ No newline at end of file diff --git a/lua/metrostroi_data/track_gm_metrostroi_b46_lite.txt b/lua/metrostroi_data/track_gm_metrostroi_b46_lite.txt new file mode 100644 index 0000000..2843d87 --- /dev/null +++ b/lua/metrostroi_data/track_gm_metrostroi_b46_lite.txt @@ -0,0 +1 @@ +{"1":{"1":"[-11059.2119 15293.625 -1622.4454]","2":"[-10957.0264 15294.8105 -1622.3954]","3":"[-10442.3008 15294.7158 -1622.4854]","4":"[-9924.8848 15295.3818 -1622.4829]","5":"[-9409.4951 15295.3232 -1622.4828]","6":"[-8889.3789 15295.0713 -1622.535]","7":"[-8373.0586 15295.4932 -1622.4851]","8":"[-7860.1631 15295.2441 -1622.4706]","9":"[-7341.8452 15295.1182 -1622.4907]","10":"[-6830.5947 15262.0078 -1622.6295]","11":"[-6320.1006 15166.1426 -1622.5759]","12":"[-5836.8521 14994.3281 -1622.5576]","13":"[-5381.2915 14760.2344 -1622.512]","14":"[-4954.5981 14476.6182 -1622.4247]","15":"[-4548.1489 14151.5898 -1622.3805]","16":"[-4167.293 13798.3633 -1622.453]","17":"[-3799.5842 13436.5449 -1622.5626]","18":"[-3435.6633 13070.2021 -1622.4792]","19":"[-3066.2 12701.9395 -1622.4829]","20":"[-2697.7571 12333.8682 -1622.4805]","21":"[-2330.4382 11965.8711 -1622.5012]","22":"[-1963.4805 11598.6904 -1622.4873]","23":"[-1596.6931 11232.5674 -1622.5341]","24":"[-1231.2144 10866.874 -1622.4526]","25":"[-866.0137 10502.1895 -1622.4888]","26":"[-501.7584 10137.707 -1622.5479]","27":"[-138.0834 9774.2041 -1622.4725]","28":"[224.5659 9411.4883 -1622.589]","29":"[596.0246 9039.9219 -1622.5515]","30":"[966.929 8669.0889 -1622.4493]","31":"[1337.2456 8298.9033 -1622.3387]","32":"[1706.5593 7929.0146 -1622.1505]","33":"[2074.9509 7561.7197 -1622.2509]","34":"[2440.979 7193.7642 -1622.4459]","35":"[2807.3657 6827.6538 -1622.2632]","36":"[3173.74 6462.7412 -1622.2487]","37":"[3537.6245 6096.5186 -1622.2151]","38":"[3903.1838 5733.1587 -1622.33]","39":"[4266.0298 5368.2666 -1622.276]","40":"[4629.9336 5005.6626 -1622.2903]","41":"[4992.7744 4643.2261 -1622.225]","42":"[5363.2021 4271.0791 -1622.3247]","43":"[5735.1943 3901.7678 -1622.3091]","44":"[6103.5337 3530.0493 -1622.2756]","45":"[6474.9927 3162.7185 -1622.3207]","46":"[6841.9575 2792.1506 -1622.2441]","47":"[7211.1924 2425.1121 -1622.4769]","48":"[7578.2349 2057.1304 -1622.3572]","49":"[7945.4214 1690.536 -1622.4911]","50":"[8311.7002 1324.2072 -1622.4669]","51":"[8677.1924 958.3295 -1622.4565]","52":"[9042.9922 593.9393 -1622.449]","53":"[9404.7773 229.5983 -1622.6293]","54":"[9770.3105 -133.6753 -1622.506]","55":"[10132.7012 -496.2275 -1622.4874]","56":"[10497.6611 -862.7943 -1622.4825]","57":"[10862.7109 -1227.7295 -1622.3275]","58":"[11199.0986 -1613.8905 -1622.1971]","59":"[11486.3936 -2046.3269 -1622.3231]","60":"[11698.5244 -2516.5662 -1622.4578]","61":"[11850.7334 -3007.53 -1622.5028]","62":"[11945.9473 -3511.4121 -1622.2603]","63":"[11999.1289 -4031.6475 -1622.2766]","64":"[12012.7891 -4553.0137 -1622.1599]","65":"[12000.7637 -5072.9302 -1622.3724]","66":"[11967.2119 -5590.7764 -1622.4836]","67":"[11915.0693 -6105.9917 -1622.4509]","68":"[11839.4512 -6616.8604 -1622.5188]","69":"[11740.0967 -7122.4482 -1622.4817]","70":"[11614.4541 -7620.6958 -1622.4386]","71":"[11456.6494 -8120.0903 -1622.4471]","72":"[11271.001 -8598.4238 -1622.5112]","73":"[11048.1367 -9065.4736 -1622.4056]","74":"[10789.2676 -9520.416 -1622.3939]","75":"[10493.9453 -9948.8105 -1622.2391]","76":"[10158.6143 -10354.5342 -1622.5127]","77":"[9797.8955 -10719.1221 -1622.3901]","78":"[9405.2549 -11052.0742 -1622.428]","79":"[8978.9297 -11354.0322 -1622.3953]","80":"[8527.835 -11619.2754 -1622.4465]","81":"[8058.4814 -11847.5596 -1622.3934]","82":"[7582.3062 -12038.832 -1622.3458]","83":"[7094.4624 -12197.6211 -1622.302]","84":"[6582.0171 -12330.8691 -1622.187]","85":"[6064.3589 -12435.75 -1622.2444]","86":"[5543.1631 -12514.1689 -1622.2605]","87":"[5020.0508 -12569.0664 -1622.3478]","88":"[4496.2275 -12603.1865 -1622.5242]","89":"[3972.4868 -12618.2393 -1622.278]","90":"[3449.4519 -12620.6162 -1622.3962]","91":"[2927.3379 -12620.2822 -1622.4596]","92":"[2400.1067 -12620.1826 -1622.4631]","93":"[1886.259 -12620.3994 -1622.4618]","94":"[1373.3561 -12620.5381 -1622.4758]","95":"[843.7491 -12620.3125 -1622.4102]","96":"[315.1869 -12620.0205 -1622.485]","97":"[-212.3818 -12620.1084 -1622.4551]","98":"[-738.5702 -12610.9531 -1622.09]","99":"[-1262.5613 -12584.8818 -1621.9329]","100":"[-1783.2648 -12538.1543 -1622.1831]","101":"[-2300.2976 -12470.3848 -1622.4022]","102":"[-2811.97 -12377.7285 -1622.5322]","103":"[-3316.8679 -12259.3408 -1622.3278]","104":"[-3812.844 -12112.6826 -1622.277]","105":"[-4296.9771 -11934.709 -1622.1954]","106":"[-4766.6509 -11725.0498 -1622.2502]","107":"[-5217.668 -11481.2979 -1622.5126]","108":"[-5660.0552 -11193.2861 -1622.4119]","109":"[-6074.748 -10869.543 -1622.4921]","110":"[-6456.897 -10510.626 -1622.4984]","111":"[-6804.7832 -10120.6592 -1622.4943]","112":"[-7115.7236 -9702.5596 -1622.3121]","113":"[-7389.3975 -9260.7598 -1622.3539]","114":"[-7626.5234 -8799.7637 -1622.3398]","115":"[-7830.2202 -8318.8145 -1622.4669]","116":"[-8002.4985 -7820.2349 -1622.3573]","117":"[-8142.1655 -7312.7544 -1622.3187]","118":"[-8253.4854 -6799.4609 -1622.3224]","119":"[-8338.0449 -6282.1885 -1622.2828]","120":"[-8398.541 -5762.5669 -1622.375]","121":"[-8437.7344 -5241.9536 -1622.3982]","122":"[-8457.3662 -4721.6338 -1622.0554]","123":"[-8462.0898 -4202.3398 -1622.1136]","124":"[-8462.0068 -3687.6042 -1606.7993]","125":"[-8462.0313 -3160.6675 -1569.6423]","126":"[-8461.8711 -2641.991 -1516.4755]","127":"[-8461.9072 -2115.8787 -1456.2029]","128":"[-8461.792 -1590.5563 -1393.723]","129":"[-8461.791 -1081.5577 -1331.7845]","130":"[-8461.7754 -557.5002 -1267.5255]","131":"[-8462.4902 -45.2574 -1204.5804]","132":"[-8461.876 467.0757 -1141.7941]","133":"[-8461.3574 987.5672 -1077.8243]","134":"[-8461.7979 1500.1559 -1014.8558]","135":"[-8462.1016 2013.973 -951.7559]","136":"[-8462.3877 2523.2908 -889.0739]","137":"[-8462.1416 3037.4749 -826.0299]","138":"[-8461.6348 3558.7935 -762.1362]","139":"[-8461.9092 4067.1096 -699.575]","140":"[-8462.5322 4580.7012 -636.606]","141":"[-8462.1777 5098.144 -572.9977]","142":"[-8461.5742 5617.9976 -509.1426]","143":"[-8461.5439 6138.7891 -445.1893]","144":"[-8462.2354 6658.8677 -381.6057]","145":"[-8462.334 7176.79 -318.772]","146":"[-8462.4053 7691.6973 -258.3127]","147":"[-8462.2529 8202.8848 -201.1747]","148":"[-8462.4463 8724.918 -151.0225]","149":"[-8462.8594 9246.9697 -120.0115]","150":"[-8474.5107 9759.0029 -103.982]","151":"[-8507.9287 10272.9648 -91.8422]","152":"[-8573.5146 10787.1709 -76.5625]","153":"[-8675.2217 11300.1914 -57.2212]","154":"[-8819.4727 11791.0596 -33.5755]","155":"[-9018.6182 12275.29 -4.5833]","156":"[-9276.3389 12724.9268 30.728]","157":"[-9593.7588 13125.001 71.9296]","158":"[-9977.2578 13472.8018 119.4282]","159":"[-10408.4717 13744.375 171.9896]","160":"[-10887.7617 13943.0488 228.2761]","161":"[-11390.2529 14062.7471 285.9153]","162":"[-11907.8125 14112.3232 343.2458]","163":"[-12428.3535 14098.9219 400.6561]","164":"[-12940.1729 14019.8359 455.6136]","165":"[-13432.6523 13863.0234 507.3643]","166":"[-13891.0479 13633.1055 554.4301]","167":"[-14287.5459 13338.0361 593.152]","168":"[-14643.1826 12969.4434 625.9862]","169":"[-14939.0986 12541.4365 650.3957]","170":"[-15172.7998 12078.0615 667.1775]","171":"[-15350.0762 11587.5254 676.0056]","172":"[-15476.5781 11087.4902 678.6412]","173":"[-15563.207 10580.8027 677.0042]","174":"[-15615.8516 10068.7822 671.2161]","175":"[-15641.3242 9551.9648 662.7073]","176":"[-15647.9697 9032.6387 657.7137]","177":"[-15647.8623 8512.5576 657.6006]","178":"[-15647.6387 7993.2788 657.5426]","179":"[-15648.4424 7474.8032 657.5368]","180":"[-15648.3047 6957.1094 657.5081]","181":"[-15647.6299 6440.1938 657.5053]","182":"[-15648.5518 5924.0625 657.5085]","183":"[-15648.3809 5408.7183 657.5343]","184":"[-15647.6768 4894.1392 657.5389]","185":"[-15648.3633 4380.3345 657.603]","186":"[-15648.4082 3866.5352 657.5576]","187":"[-15647.5527 3346.4888 657.6343]","188":"[-15648.4092 2834.2952 657.5137]","189":"[-15648.1719 2312.6006 657.5245]","190":"[-15647.4092 1786.6532 657.5475]","191":"[-15647.8311 1274.0526 657.5472]","192":"[-15648.1748 761.9135 657.5485]","193":"[-15648.084 241.907 657.6238]","194":"[-15647.6133 -278.6079 657.5967]","195":"[-15647.8945 -806.7278 657.5847]","196":"[-15648.5596 -1332.0923 657.5623]","197":"[-15648.3809 -1856.3009 657.4094]","198":"[-15647.3613 -2379.3743 657.5006]","199":"[-15647.4668 -2901.311 657.5499]","200":"[-15648.2256 -3422.1035 657.5519]","201":"[-15648.5557 -3940.9546 653.2815]","202":"[-15648.1631 -4455.1787 629.0827]","203":"[-15647.7275 -4970.8535 582.4442]","204":"[-15648.1289 -5493.2856 525.7081]","205":"[-15648.5146 -6003.5908 466.205]","206":"[-15648.2383 -6519.7725 404.1048]","207":"[-15648.0234 -7039.2837 340.789]","208":"[-15647.9248 -7550.834 278.1226]","209":"[-15647.5293 -8074.4155 214.9048]","210":"[-15647.8975 -8594.8232 153.8994]","211":"[-15647.7227 -9117.1084 96.9894]","212":"[-15647.3223 -9639.6553 49.9144]","213":"[-15647.9551 -10162.1377 26.1626]","214":"[-15647.6582 -10685.3066 21.294]","215":"[-15634.9756 -11199.7852 20.9869]","216":"[-15592.7451 -11714.7158 20.9775]","217":"[-15502.833 -12229.9697 21.0301]","218":"[-15359.8877 -12729.9297 21.0992]","219":"[-15152.3447 -13203.7803 21.0455]","220":"[-14877.6904 -13638.6504 21.1616]","221":"[-14526.4277 -14025.9268 21.1499]","222":"[-14115.6426 -14345.1279 21.0205]","223":"[-13658.6855 -14590.332 21.0874]","224":"[-13172.9111 -14767.998 21.1169]","225":"[-12670.2002 -14885.5615 21.2329]","226":"[-12159.4893 -14953.4141 21.1162]","227":"[-11646.3213 -14981.1592 21.1739]","228":"[-11133.7383 -14986.1875 21.8739]","229":"[-10607.4023 -14985.0977 21.5594]","230":"[-10087.1592 -14984.9014 21.4736]","231":"[-9567.5869 -14984.8135 21.9304]","232":"[-9042.7471 -14984.2646 21.5554]","233":"[-8517.8281 -14984.4961 21.3633]","234":"[-7994.1538 -14985.1064 21.4957]","235":"[-7471.7222 -14984.7246 21.5078]","236":"[-6950.4985 -14984.4893 21.5256]","237":"[-6430.4746 -14984.4932 21.5426]","238":"[-5907.6963 -14985.1211 21.5912]","239":"[-5380.1074 -14985.4863 21.6035]","240":"[-4860.5005 -14984.2139 21.6178]","241":"[-4339.6479 -14984.5166 21.5328]","242":"[-3822.6736 -14985.2148 21.51]","243":"[-3302.8579 -14984.3525 21.5634]","244":"[-2784.9519 -14984.4473 21.5491]","245":"[-2267.4668 -14984.9639 21.5511]","246":"[-1751.5691 -14981.2588 23.272]","247":"[-1239.4248 -14954.9424 25.8659]","248":"[-721.3835 -14890.5967 27.8761]","249":"[-214.9089 -14779.7754 29.1339]","250":"[273.5844 -14613.4746 29.1125]","251":"[734.5286 -14386.5264 27.6522]","252":"[1154.7471 -14093.5371 23.9713]","253":"[1535.4789 -13750.0039 22.02]","254":"[1898.791 -13387.5791 21.4899]","255":"[2260.5439 -13024.6846 21.5996]","256":"[2632.3206 -12654.6563 22.0447]","257":"[2992.8547 -12276.9541 23.7926]","258":"[3330.1038 -11883.915 26.5696]","259":"[3630.0977 -11466.2861 28.4604]","260":"[3893.1155 -11012.7412 29.3787]","261":"[4097.4263 -10532.502 28.4999]","262":"[4232.0854 -10030.5625 26.0638]","263":"[4289.3828 -9514.7705 23.3424]","264":"[4300.5366 -9000.2617 21.383]","265":"[4298.3848 -8485.9717 21.4755]","266":"[4298.7319 -7972.3838 21.594]","267":"[4300.0117 -7458.6914 21.5394]","268":"[4298.7358 -6939.6729 21.538]","269":"[4298.2192 -6421.6646 21.5516]","270":"[4299.1074 -5904.6587 21.549]","271":"[4299.5454 -5388.6533 21.4816]","272":"[4298.8599 -4873.6465 21.5869]","273":"[4298.292 -4359.6421 21.6327]","274":"[4299.5688 -3846.5984 21.5527]","275":"[4299.7041 -3334.541 21.5092]","276":"[4298.4502 -2805.2327 21.5289]","277":"[4298.5435 -2285.3057 21.5403]","278":"[4299.6069 -1765.3181 21.541]","279":"[4298.374 -1244.6649 21.0425]","280":"[4299.5732 -730.5665 20.4061]","281":"[4297.9648 -217.7158 20.7297]","282":"[4299.0894 304.4788 20.578]","283":"[4298.7715 825.7511 20.5533]","284":"[4298.4946 1346.1558 20.4704]","285":"[4298.8286 1865.3032 20.6172]","286":"[4298.9263 2383.543 20.4009]","287":"[4304.2949 2900.2883 20.6134]","288":"[4334.8047 3414.3162 20.8946]","289":"[4404.5435 3921.6079 20.4975]","290":"[4526.5337 4427.2358 20.5187]","291":"[4708.6226 4909.1411 20.519]","292":"[4964.3989 5360.5337 20.8274]","293":"[5284.1455 5761.5176 20.6263]","294":"[5641.751 6138.3052 20.4271]","295":"[6007.7412 6499.207 20.4901]","296":"[6377.0234 6871.2925 20.6444]","297":"[6747.0605 7241.3086 20.5692]","298":"[7117.21 7609.9746 20.6476]","299":"[7487.916 7982.2368 20.5206]","300":"[7851.2861 8345.5781 20.5451]","301":"[8221.2275 8714.3398 20.5483]","302":"[8589.583 9083.5801 20.5467]","303":"[8965.8467 9442.2822 20.5272]","304":"[9375.4785 9753.0293 20.6278]","305":"[9834.8936 9996.6357 19.9443]","306":"[10322.3291 10171.1865 20.2958]","307":"[10825.8135 10282.5752 20.2615]","308":"[11342.9922 10347.9609 20.3667]","309":"[11860.3193 10369.4824 22.0516]","310":"[12382.4736 10345.6865 26.3379]","311":"[12893.3584 10268.2334 32.4115]","312":"[13396.5459 10126.2715 37.4048]","313":"[13864.5127 9909.5176 40.866]","314":"[14273.3857 9624.6318 42.403]","315":"[14565.2783 9333.4658 42.384]","316":"[14861.3262 8911.4434 40.6492]","317":"[15065.2529 8474.0361 37.5144]","318":"[15212.3867 7974.4331 32.6193]","319":"[15293.8828 7458.0645 26.8036]","320":"[15323.8965 6931.2021 22.0336]","321":"[15327.0371 6413.0947 19.2971]","322":"[15325.9795 5886.3325 19.4829]","323":"[15326.9336 5360.5879 19.6738]","324":"[15326.3438 4835.7944 19.4529]","325":"[15326.8994 4311.9907 19.5685]","326":"[15327.3447 3789.1553 19.5969]","327":"[15326.248 3267.2673 19.516]","328":"[15326.5947 2746.3347 19.4737]","329":"[15327.0195 2226.3193 19.5291]","330":"[15326.8213 1711.7802 19.5322]","331":"[15326.7881 1188.2037 19.5346]","332":"[15313.8115 669.6322 18.1125]","333":"[15239.1201 162.1724 15.1823]","334":"[15081.3564 -336.1668 12.1628]","335":"[14852.3789 -804.4553 12.0516]","336":"[14572.3535 -1241.5305 13.6901]","337":"[14251.6875 -1647.2399 16.4605]","338":"[13897.3955 -2035.3494 18.7345]","339":"[13533.1025 -2403.428 19.7116]","340":"[13165.3008 -2769.9487 19.6264]","341":"[12800.8574 -3133.8823 19.549]","342":"[12437.8691 -3497.6074 19.5086]","343":"[12075.4648 -3860.2771 19.5424]","344":"[11697.8008 -4237.4512 19.5382]","345":"[11321.0596 -4613.7866 19.5471]","346":"[10945.8076 -4989.8853 19.5151]","347":"[10571.7734 -5364.3862 19.5386]","348":"[10204.7402 -5730.7456 19.7251]","349":"[9831.8994 -6102.3101 19.5696]","350":"[9459.6836 -6475.6396 19.494]","351":"[9093.8984 -6842.2388 19.5412]","352":"[8730.5127 -7204.1113 19.5492]","353":"[8361.7861 -7573.4126 19.5653]","354":"[7997.1821 -7949.7358 21.6581]","355":"[7656.29 -8341.5049 24.1862]","356":"[7349.1221 -8755.0322 26.4942]","357":"[7080.042 -9204.7773 27.2407]","358":"[6866.4736 -9680.5293 26.7607]","359":"[6721.0225 -10179.1846 24.7019]","360":"[6654.5757 -10692.3887 23.9205]","361":"[6660.2363 -11207.0654 28.137]","362":"[6725.52 -11724.6816 38.6702]","363":"[6842.8818 -12225.9189 47.0741]","364":"[7031.8237 -12710.0225 53.4756]","365":"[7288.2622 -13153.9795 56.9714]","366":"[7622.5132 -13551.1836 58.3508]","367":"[7992.8291 -13860 57.0986]","368":"[8436.7412 -14120.2324 53.4459]","369":"[8916.9629 -14306.7705 47.1137]","370":"[9419.8594 -14427.9287 38.9078]","371":"[9936.9307 -14493.0059 28.7709]","372":"[10450.0566 -14510.2002 21.6994]","373":"[10966.1152 -14502.1514 16.7419]","374":"[11482.1201 -14476.9277 10.7285]","375":"[11999.4395 -14439.0645 1.6895]","376":"[12516.2217 -14356.0049 -11.3132]","377":"[13011.5811 -14214.4189 -28.5111]","378":"[13484.8789 -14009.5977 -48.8899]","379":"[13926.8838 -13748.2832 -71.8201]","380":"[14329.9648 -13416.2617 -97.3035]","381":"[14667.1621 -13020.3281 -123.1954]","382":"[14937.1777 -12577.7461 -149.2271]","383":"[15141.6631 -12103.2549 -176.2873]","384":"[15290.2588 -11607.8721 -205.4427]","385":"[15387.6846 -11100.9727 -237.2199]","386":"[15440.9434 -10586.5791 -270.8652]","387":"[15458.0439 -10067.998 -310.0214]","388":"[15460.668 -9549.4043 -344.6683]","389":"[15459.0762 -9037.1143 -361.3834]","390":"[15459.4609 -8511.8301 -364.3223]","391":"[15460.124 -7987.4619 -364.4124]","392":"[15459.2158 -7466.7139 -364.477]","393":"[15459.7969 -6953.6636 -364.4525]","394":"[15459.6934 -6441.0835 -364.4842]","395":"[15459.6699 -5914.292 -364.4939]","396":"[15460.4102 -5388.4014 -364.5044]","397":"[15459.5176 -4863.4053 -364.491]","398":"[15459.7695 -4339.6406 -364.5018]","399":"[15459.8877 -3816.8513 -364.2935]","400":"[15459.458 -3294.9053 -364.1771]","401":"[15459.9004 -2773.8157 -364.328]","402":"[15460.3477 -2253.5938 -364.5002]","403":"[15459.6953 -1734.2292 -364.4483]","404":"[15460.3486 -1215.697 -364.3842]","405":"[15460.376 -698.0395 -364.308]","406":"[15459.4795 -181.2064 -364.4399]","407":"[15460.7627 340.762 -364.3268]","408":"[15459.5068 857.1755 -364.326]","409":"[15460.2529 1372.7604 -364.4005]","410":"[15459.8906 1887.54 -364.5345]","411":"[15460.2393 2401.4937 -364.4861]","412":"[15460.0781 2914.6235 -364.4627]","413":"[15459.8525 3426.9326 -364.3712]","414":"[15460.373 3952.2449 -364.4796]","415":"[15467.6143 4476.4805 -364.4637]","416":"[15503.0889 4992.5215 -364.4022]","417":"[15576.6738 5499.7964 -364.4447]","418":"[15674.0254 6015.2153 -364.5331]","419":"[15767.085 6529.7456 -364.3895]","420":"[15821.6377 7047.8311 -364.5126]","421":"[15842.0762 7572.0947 -364.4121]","422":"[15844.0967 8085.7339 -364.4962]","423":"[15844.1865 8598.5674 -364.4837]","424":"[15843.8545 9110.6416 -364.3689]","425":"[15844.4668 9635.001 -364.5712]","426":"[15843.665 10158.5771 -364.4098]","427":"[15842.5791 10681.3066 -364.2676]","428":"[15819.8926 11202.2725 -364.0941]","429":"[15762.9961 11718.9795 -364.3271]","430":"[15654.6289 12225.2617 -364.3959]","431":"[15488.7168 12712.6348 -364.4131]","432":"[15244.0654 13176.4893 -363.3414]","433":"[14932.2539 13592.9922 -358.8143]","434":"[14559.4004 13947.4688 -346.6214]","435":"[14125.1123 14240.2656 -325.5434]","436":"[13645.9365 14452.7539 -296.8995]","437":"[13156.9268 14603.5313 -259.1152]","438":"[12651.2803 14705.1006 -210.9848]","439":"[12138.5742 14763.7949 -154.1104]","440":"[11622.8916 14783.0801 -92.2866]","441":"[11102.416 14784.1943 -28.4057]","442":"[10593.5967 14783.5361 34.1822]","443":"[10074.1855 14784.6729 97.9898]","444":"[9556.0684 14783.7188 161.6088]","445":"[9036.6777 14783.8174 225.3508]","446":"[8524.8936 14783.8418 288.196]","447":"[8008.3262 14783.5801 351.6648]","448":"[7488.312 14783.752 414.8932]","449":"[6967.0786 14783.6846 477.1564]","450":"[6447.4019 14783.373 536.5086]","451":"[5927.8911 14783.8584 590.2825]","452":"[5409.5596 14783.5195 628.6126]","453":"[4887.0796 14784.2422 644.3461]","454":"[4369.0981 14784.1602 645.4778]","455":"[3850.0652 14783.832 645.6388]","456":"[3329.1624 14783.6885 645.6412]","457":"[2805.7017 14784.6924 645.5496]","458":"[2289.3677 14783.6377 645.5202]","459":"[1769.0535 14783.7988 645.5922]","460":"[1244.494 14784.2969 645.6561]","461":"[716.7141 14783.79 645.5258]","462":"[189.8714 14784.5029 645.532]","463":"[-336.0115 14784.4072 645.5604]","464":"[-860.9666 14783.9688 645.5932]","465":"[-1385.0048 14783.6914 645.6194]","466":"[-1908.0958 14783.9609 645.5673]","467":"[-2430.2742 14784.4756 645.5199]","468":"[-2951.5251 14784.1299 645.605]","469":"[-3471.8801 14784.5 645.5702]","470":"[-3991.3135 14784.0625 645.5369]","471":"[-4509.853 14783.752 645.5513]","472":"[-5027.4937 14784.4287 645.5416]","473":"[-5548.9775 14784.0029 645.5854]","474":"[-6061.9165 14784.1357 645.5381]","475":"[-6587.1294 14783.8789 645.4993]","476":"[-7112.249 14784.1768 640.0157]","477":"[-7627.9409 14783.9912 616.2856]","478":"[-8138.8403 14784.292 570.5638]","479":"[-8650.1084 14784.0059 515.1095]","480":"[-9171.4473 14783.9893 454.2121]","481":"[-9690.3457 14783.626 392.2413]","482":"[-10200.3096 14783.8154 331.4578]","483":"[-10712.2695 14783.6514 271.0671]","484":"[-11231.4053 14783.5928 213.7484]","485":"[-11750.7832 14783.8057 165.7892]","486":"[-12265.3008 14780.3535 140.7527]","487":"[-12780.0889 14748.2783 133.8312]","488":"[-13289.4902 14662.3447 133.6379]","489":"[-13781.3896 14503.0303 133.6412]","490":"[-14190.5811 14285.5654 133.5361]","491":"[-14483.1436 14056.4951 133.4357]","492":"[-14760.4902 13747.6367 133.5149]","493":"[-14969.8955 13410.7061 133.4474]","494":"[-15162.1982 12929.8154 133.5057]","495":"[-15274.0381 12426.4434 133.5729]","496":"[-15323.0078 11914.5674 132.0765]","497":"[-15335.9629 11399.416 114.5669]","498":"[-15335.5361 10881.0723 74.5335]","499":"[-15335.9561 10363.3623 20.621]","500":"[-15336.1904 9847.0762 -38.6478]","501":"[-15336.3066 9330.4268 -100.517]","502":"[-15346.2002 8812.7676 -163.3994]","503":"[-15382.6338 8299.2617 -226.5269]","504":"[-15445.3242 7792.3638 -288.644]","505":"[-15497.5957 7285.8154 -350.8643]","506":"[-15516.4912 6771.9556 -413.9976]","507":"[-15520.2451 6258.5986 -476.9509]","508":"[-15519.3203 5739.8896 -540.7343]","509":"[-15519.1689 5219.8516 -604.5701]","510":"[-15519.9336 4702.397 -668.1008]","511":"[-15519.5537 4191.1909 -730.7513]","512":"[-15519.7158 3674.7061 -794.3202]","513":"[-15519.79 3158.0981 -857.7751]","514":"[-15519.5 2644.4043 -921.0157]","515":"[-15519.542 2135.2866 -982.7799]","516":"[-15519.5557 1614.3983 -1046.5428]","517":"[-15519.8369 1100.4473 -1110.0192]","518":"[-15519.0332 575.8349 -1174.4935]","519":"[-15519.9365 61.5044 -1237.5491]","520":"[-15519.877 -457.6136 -1301.1514]","521":"[-15519.168 -977.3496 -1364.0989]","522":"[-15519.6992 -1494.0087 -1425.1886]","523":"[-15519.8721 -2004.4381 -1483.0814]","524":"[-15519.1621 -2525.7437 -1535.1038]","525":"[-15520.2275 -3054.6807 -1567.6719]","526":"[-15520.1592 -3576.5815 -1579.4832]","527":"[-15519.5527 -4093.6167 -1579.4166]","528":"[-15520.458 -4609.3892 -1579.4633]","529":"[-15520.0479 -5124.2036 -1579.3453]","530":"[-15519.8057 -5638.0518 -1579.4302]","531":"[-15520.4434 -6150.9678 -1579.4202]","532":"[-15519.9756 -6680.5435 -1579.3859]","533":"[-15520.165 -7210.0977 -1579.4961]","534":"[-15519.3652 -7726.5938 -1579.3461]","535":"[-15512.0791 -8245.8281 -1579.4065]","536":"[-15487.5381 -8762.3955 -1579.033]","537":"[-15442.4736 -9276.2471 -1579.3763]","538":"[-15377.4502 -9786.6904 -1579.386]","539":"[-15288.7461 -10292.2754 -1579.3452]","540":"[-15174.2813 -10791.3232 -1579.3416]","541":"[-15026.9326 -11300.6982 -1579.2192]","542":"[-14847.375 -11798.0283 -1579.2822]","543":"[-14633.6455 -12279.9502 -1579.2904]","544":"[-14385.0586 -12742.9932 -1579.4454]","545":"[-14099.7988 -13182.4023 -1579.351]","546":"[-13778.6787 -13594.2686 -1579.3336]","547":"[-13423.7764 -13975.165 -1579.2667]","548":"[-13037.5107 -14321.8066 -1579.3809]","549":"[-12623.0693 -14631.7061 -1579.4373]","550":"[-12185.7451 -14905.7236 -1579.2836]","551":"[-11728.9834 -15142.9561 -1579.384]","552":"[-11257.0811 -15345.2451 -1579.4432]","553":"[-10773.6094 -15515.415 -1579.3815]","554":"[-10269.0361 -15658.4961 -1579.2499]","555":"[-9758.0508 -15771.7207 -1579.3986]","556":"[-9243.1563 -15858.7393 -1579.3746]","557":"[-8725.9736 -15921.8545 -1579.3075]","558":"[-8207.7266 -15963.2227 -1579.3925]","559":"[-7689.3926 -15985.0928 -1579.4844]","560":"[-7171.689 -15991.7656 -1579.4869]","561":"[-6654.9595 -15991.0361 -1579.4487]","562":"[-6139.2422 -15990.458 -1579.4222]","563":"[-5624.561 -15991.7256 -1579.4694]","564":"[-5109.4326 -15991.3115 -1591.6036]","565":"[-4591.8252 -15990.9268 -1624.1207]","566":"[-4069.3572 -15991.0254 -1676.6146]","567":"[-3558.4282 -15990.9893 -1734.5986]","568":"[-3048.1189 -15991.167 -1795.2203]","569":"[-2528.3926 -15991.1152 -1858.3733]","570":"[-2019.5122 -15990.6377 -1920.7794]","571":"[-1510.4646 -15991.0283 -1982.5448]","572":"[-985.9043 -15990.8457 -2045.3333]","573":"[-461.4722 -15990.2568 -2105.4631]","574":"[52.4746 -15990.5498 -2159.0056]","575":"[567.3611 -15990.6709 -2197.918]","576":"[1086.2618 -15987.5215 -2214.2839]","577":"[1613.9702 -15970.3389 -2215.074]","578":"[2138.6987 -15931.998 -2215.1982]","579":"[2660.167 -15873.1045 -2214.7603]","580":"[3176.8245 -15791.6035 -2215.1997]","581":"[3687.2207 -15683.377 -2215.4333]","582":"[4189.6797 -15547.9502 -2215.4233]","583":"[4681.6294 -15382.6934 -2215.3369]","584":"[5159.7666 -15184.7559 -2215.2112]","585":"[5621.0049 -14953.4941 -2215.1699]","586":"[6061.3423 -14687.5596 -2215.2161]","587":"[6476.8301 -14386.9951 -2215.2446]","588":"[6877.5806 -14039.999 -2215.2417]","589":"[7243.6226 -13658.8164 -2215.2463]","590":"[7573.0562 -13247.5752 -2215.3708]","591":"[7864.9414 -12810.7441 -2215.3152]","592":"[8118.3032 -12352.1758 -2215.4409]","593":"[8335.082 -11876.5742 -2215.2952]","594":"[8516.8691 -11391.4873 -2215.4832]","595":"[8666.2549 -10895.9971 -2215.3301]","596":"[8785.8301 -10390.5186 -2215.3579]","597":"[8881.751 -9881.4639 -2215.3867]","598":"[8951.3379 -9365.2061 -2215.3145]","599":"[8999.3076 -8851.2031 -2215.3701]","600":"[9028.0361 -8337.3799 -2215.2551]","601":"[9045.0029 -7817.2173 -2215.2666]","602":"[9077.874 -7299.9487 -2215.4314]","603":"[9149.3086 -6788.7603 -2215.3347]","604":"[9256.8809 -6285.7266 -2215.3972]","605":"[9360.5371 -5784.0381 -2215.3899]","606":"[9433.3164 -5269.1943 -2215.436]","607":"[9465.8369 -4751.48 -2215.5142]","608":"[9473.6494 -4229.6855 -2215.3401]","609":"[9472.917 -3700.9258 -2215.51]","610":"[9472.3301 -3183.5044 -2215.4453]","611":"[9473.7021 -2666.6768 -2215.4744]","612":"[9473.1123 -2150.8269 -2215.4397]","613":"[9472.7461 -1635.9169 -2215.5168]","614":"[9473.2715 -1121.9523 -2215.4988]","615":"[9472.9639 -608.9202 -2215.5403]","616":"[9473.3115 -96.856 -2215.3142]","617":"[9472.8701 431.3045 -2215.4351]","618":"[9473.0742 958.4771 -2215.4385]","619":"[9473.2188 1484.6648 -2215.4619]","620":"[9472.7754 2009.8618 -2215.5339]","621":"[9472.8887 2529.7029 -2214.8955]","622":"[9472.1279 3044.5779 -2214.7026]","623":"[9473.0967 3556.5981 -2214.4023]","624":"[9472.834 4083.7715 -2214.375]","625":"[9472.6943 4609.6411 -2214.4312]","626":"[9473.1826 5134.5176 -2214.4724]","627":"[9473.2041 5658.4644 -2214.5249]","628":"[9472.7324 6185.0229 -2214.4863]","629":"[9473.3154 6704.9014 -2214.4216]","630":"[9473.1748 7223.7637 -2214.4778]","631":"[9472.624 7741.6836 -2214.5886]","632":"[9473.5371 8258.624 -2214.4395]","633":"[9473.2813 8774.6074 -2214.5671]","634":"[9472.915 9289.6924 -2214.4932]","635":"[9472.5264 9803.8584 -2214.4705]","636":"[9472.5713 10316.7383 -2214.4514]","637":"[9473.2227 10838.0264 -2214.448]","638":"[9472.8379 11361.4014 -2214.3411]","639":"[9464.3789 11885.0801 -2214.3228]","640":"[9426.6064 12404.8955 -2214.1433]","641":"[9344.5811 12918.3828 -2214.4514]","642":"[9213.2266 13414.2354 -2214.3533]","643":"[9014.2637 13897.7959 -2214.4629]","644":"[8748.0938 14344.4307 -2214.3137]","645":"[8410.6025 14735.9346 -2214.208]","646":"[8013.4985 15062.9531 -2214.4429]","647":"[7568.5313 15317.5049 -2214.2515]","648":"[7080.9116 15508.9365 -2214.3867]","649":"[6574.0518 15636.7637 -2214.4187]","650":"[6057.8926 15712.8135 -2214.2292]","651":"[5539.0181 15745.3057 -2214.313]","652":"[5023.2642 15752.6416 -2214.4138]","653":"[4508.2832 15751.5156 -2214.2979]","654":"[3994.0691 15752.1914 -2214.4714]","655":"[3480.6953 15751.4424 -2214.3767]","656":"[2968.9099 15736.583 -2214.1958]","657":"[2448.6843 15689.5742 -2214.4167]","658":"[1938.8077 15594.2051 -2214.1067]","659":"[1444.5083 15446.791 -2214.5615]","660":"[978.2227 15234.8242 -2214.3018]","661":"[548.3005 14956.2383 -2214.4304]","662":"[172.653 14605.585 -2214.4885]","663":"[-144.0486 14187.8682 -2214.1316]","664":"[-385.7145 13724.4219 -2214.4641]","665":"[-558.8445 13232.7607 -2214.2715]","666":"[-672.7442 12725.0566 -2214.3052]","667":"[-736.1255 12209.5137 -2214.4958]","668":"[-760.4963 11691.3994 -2214.9604]","669":"[-764.7978 11172.5254 -2221.1875]","670":"[-763.4318 10660.9277 -2245.1677]","671":"[-764.8185 10150.8086 -2290.5503]","672":"[-763.4393 9636.3213 -2346.4741]","673":"[-764.7699 9115.8701 -2407.199]","674":"[-763.4142 8605.5322 -2468.3977]","675":"[-764.0934 8092.5791 -2530.0208]","676":"[-763.1676 7576.8325 -2590.4602]","677":"[-763.8362 7064.5518 -2646.8433]","678":"[-763.4095 6553.248 -2694.3252]","679":"[-764.1934 6038.3237 -2719.7571]","680":"[-763.6988 5515.0854 -2727.5667]","681":"[-764.6448 4991.1553 -2727.5032]","682":"[-763.7393 4468.0288 -2727.3274]","683":"[-764.1053 3945.7007 -2727.4578]","684":"[-763.8518 3424.4084 -2727.2966]","685":"[-763.6398 2904.4951 -2727.437]","686":"[-750.8118 2386.6145 -2727.3596]","687":"[-699.8696 1873.7272 -2727.3997]","688":"[-612.091 1367.1563 -2727.3301]","689":"[-506.8012 853.13 -2727.4768]","690":"[-406.0967 334.8459 -2727.3726]","691":"[-303.7562 -178.2924 -2727.4839]","692":"[-200.2045 -692.0361 -2727.4548]","693":"[-99.5005 -1205.2358 -2727.4971]","694":"[2.5291 -1717.1027 -2727.5225]","695":"[104.9874 -2227.8149 -2727.397]","696":"[204.1388 -2732.3643 -2727.3865]","697":"[306.0419 -3240.7805 -2727.4141]","698":"[408.2082 -3755.7725 -2727.3989]","699":"[510.5975 -4269.8511 -2727.5261]","700":"[612.0514 -4780.7202 -2727.448]","701":"[713.7674 -5291.7437 -2727.4165]","702":"[815.8633 -5801.8276 -2727.4272]","703":"[916.704 -6311.2861 -2727.5427]","704":"[1018.3831 -6819.7295 -2727.4519]","705":"[1118.7471 -7327.5454 -2727.4485]","706":"[1220.0968 -7834.3311 -2727.426]","707":"[1320.6406 -8340.4102 -2727.4089]","708":"[1420.7452 -8845.6816 -2727.394]","709":"[1521.4635 -9349.6729 -2727.2087]","710":"[1620.4854 -9853.0049 -2727.3425]","711":"[1707.2092 -10371.6992 -2727.4766]","712":"[1757.9696 -10892.1885 -2726.9229]","713":"[1760.5043 -11412.5391 -2726.8203]","714":"[1703.682 -11932.0928 -2726.9883]","715":"[1577.1517 -12442.7666 -2726.7263]","716":"[1371.1187 -12922.8232 -2726.5586]","717":"[1088.9156 -13358.624 -2725.5676]","718":"[737.0938 -13743.8105 -2723.1648]","719":"[420.137 -13987.292 -2725.3457]","720":"[326.5932 -14034.5566 -2728.3843]","721":"[-113.2025 -14300.6914 -2726.5293]","722":"[-587.6689 -14501.7705 -2727.3779]","723":"[-1076.6936 -14656.1777 -2727.3721]","724":"[-1575.1409 -14774.3926 -2727.3091]","725":"[-2082.6685 -14856.4971 -2727.0798]","726":"[-2599.5071 -14897.0596 -2727.1729]","727":"[-3115.2551 -14888.9004 -2727.5864]","728":"[-3628.7744 -14821.0313 -2727.4548]","729":"[-4127.355 -14682.1924 -2727.4939]","730":"[-4597.7744 -14464.9727 -2727.7959]","731":"[-5018.8105 -14173.2041 -2727.5078]","732":"[-5385.6211 -13812.8633 -2727.6467]","733":"[-5691.6045 -13400.3066 -2727.3831]","734":"[-5941.9321 -12944.9932 -2727.5513]","735":"[-6138.4282 -12466.4434 -2727.4761]","736":"[-6289.5913 -11973.7822 -2727.3064]","737":"[-6412.8271 -11475.1172 -2727.3237]","738":"[-6543.0181 -10977.2656 -2727.2222]","739":"[-6710.6138 -10493.3721 -2727.573]","740":"[-6924.2617 -10021.8389 -2727.5237]","741":"[-7190.0659 -9581.1074 -2727.4109]","742":"[-7518.667 -9178.3809 -2727.2708]","743":"[-7899.7803 -8835.417 -2727.2324]","744":"[-8288.5684 -8498.9443 -2727.2712]","745":"[-8642.5664 -8127.6348 -2727.7241]","746":"[-8939.0264 -7705.9766 -2727.5237]","747":"[-9178.082 -7251.1665 -2727.3735]","748":"[-9368.0381 -6768.855 -2727.2927]","749":"[-9515.8145 -6270.1196 -2727.3088]","750":"[-9631.2266 -5768.7554 -2727.3145]","751":"[-9732.3115 -5265.0918 -2727.4812]","752":"[-9812.5615 -4752.4521 -2727.4458]","753":"[-9855.2432 -4238.3354 -2727.5029]","754":"[-9863.7725 -3718.3555 -2727.5686]","755":"[-9862.2012 -3199.24 -2727.5327]","756":"[-9862.8193 -2681.2344 -2727.5208]","757":"[-9863.2266 -2164.353 -2727.5034]","758":"[-9862.8721 -1646.624 -2727.4722]","759":"[-9862.9922 -1124.9825 -2727.3933]","760":"[-9862.8613 -610.8767 -2727.5286]","761":"[-9862.8623 -97.5308 -2727.3645]","762":"[-9863.0771 415.106 -2727.5332]","763":"[-9862.8809 939.1588 -2727.3452]","764":"[-9863.0576 1462.3971 -2727.4922]","765":"[-9862.8057 1984.8033 -2727.4753]","766":"[-9863.1416 2506.406 -2727.5186]","767":"[-9862.7754 3026.9944 -2727.3411]","768":"[-9863.6943 3546.4807 -2727.3906]","769":"[-9863.377 4064.0916 -2727.4514]","770":"[-9863.8564 4580.4927 -2727.532]","771":"[-9863.6221 5095.9551 -2727.4314]","772":"[-9863.1445 5610.5542 -2727.366]","773":"[-9863.5439 6124.5293 -2731.0669]","774":"[-9863.1133 6643.5557 -2751.928]","775":"[-9863.5127 7162.4429 -2795.7329]","776":"[-9863.2236 7677.0757 -2850.9177]","777":"[-9863.3926 8196.0117 -2911.1404]","778":"[-9863.4395 8709.957 -2972.512]","779":"[-9863.5908 9218.8164 -3033.7124]","780":"[-9863.793 9733.9961 -3094.4185]","781":"[-9863.6016 10244.7979 -3151.4226]","782":"[-9863.4639 10759.8496 -3200.916]","783":"[-9863.6572 11276.8877 -3229.8997]","784":"[-9862.1436 11795.8584 -3239.6863]","785":"[-9833.918 12315.2471 -3239.3579]","786":"[-9756.0781 12830.9258 -3239.2297]","787":"[-9607.0684 13326.0283 -3239.3828]","788":"[-9396.4834 13742.9121 -3239.4539]","789":"[-9165.3877 14051.2471 -3239.5771]","790":"[-8861.7295 14335.0957 -3239.4089]","791":"[-8536.416 14546.1455 -3239.4084]","792":"[-8065.3804 14745.0449 -3239.3472]","793":"[-7562.0483 14865.5889 -3239.2842]","794":"[-7049.1299 14920.3057 -3239.4165]","795":"[-6534.8071 14923.0732 -3239.3088]","796":"[-6016.7676 14881.7236 -3239.3025]","797":"[-5506.585 14798.0928 -3239.4504]","798":"[-5010.6587 14662.9824 -3239.5725]","799":"[-4531.6528 14464.3945 -3239.5083]","800":"[-4090.5906 14200.1826 -3239.2148]","801":"[-3691.7559 13872.0146 -3239.323]","802":"[-3320.6721 13516.9727 -3239.5542]","803":"[-2952.5513 13142.0371 -3239.3518]","804":"[-2586.4292 12776.9072 -3239.5171]","805":"[-2210.2268 12404.7686 -3239.4722]","806":"[-1837.9661 12030.3955 -3239.469]","807":"[-1466.5845 11656.8564 -3239.4392]","808":"[-1094.2633 11285.9121 -3239.4553]","809":"[-722.846 10915.6748 -3239.5371]","810":"[-353.2256 10545.2832 -3239.5151]","811":"[15.3138 10175.4355 -3239.4751]","812":"[384.1422 9807.4893 -3239.4189]","813":"[752.2257 9440.4219 -3239.4109]","814":"[1118.3962 9073.0488 -3239.4443]","815":"[1484.1348 8706.8574 -3239.45]","816":"[1849.8044 8342.1533 -3239.438]","817":"[2214.7886 7978.3027 -3239.5]","818":"[2577.9158 7614.1572 -3239.4878]","819":"[2940.0146 7250.5547 -3239.4717]","820":"[3302.8413 6889.2256 -3239.5339]","821":"[3679.1516 6514.0137 -3239.5503]","822":"[4053.4749 6138.4355 -3239.4888]","823":"[4427.2085 5763.9063 -3239.4563]","824":"[4800.8008 5390.8506 -3239.4277]","825":"[5174.0171 5019.0195 -3239.4158]","826":"[5545.0947 4646.7988 -3239.4761]","827":"[5917.2915 4274.6797 -3259.0691]","828":"[6290.9185 3902.1907 -3300.0176]","829":"[6652.5195 3538.959 -3353.3926]","830":"[7019.6709 3171.9585 -3412.9146]","831":"[7392.0518 2800.7375 -3475.7686]","832":"[7753.1973 2439.3296 -3537.3301]","833":"[8117.9385 2074.4604 -3598.387]","834":"[8484.4971 1708.366 -3656.9341]","835":"[8849.9541 1342.8947 -3708.24]","836":"[9223.2139 968.8925 -3740.3845]","837":"[9584.2148 598.9535 -3751.6089]","838":"[9933.9561 217.0026 -3751.4822]","839":"[10269.8779 -180.6721 -3751.1204]","840":"[10594.4521 -597.7684 -3751.3293]","841":"[10895.7002 -1025.3121 -3751.354]","842":"[11173.9268 -1466.6183 -3751.3188]","843":"[11425.665 -1921.9783 -3751.2527]","844":"[11648.1133 -2390.6741 -3751.0938]","845":"[11836.8018 -2872.2329 -3751.3882]","846":"[11988.5527 -3364.8979 -3751.5332]","847":"[12100.3809 -3866.2864 -3751.2739]","848":"[12169.2861 -4373.6353 -3751.2271]","849":"[12193.8516 -4900.4575 -3751.3455]","850":"[12171.1104 -5425.7192 -3751.3286]","851":"[12101.5166 -5946.0391 -3751.3325]","852":"[11987.3906 -6462.1924 -3751.2756]","853":"[11835.4951 -6954.8833 -3751.2161]","854":"[11646.415 -7434.5332 -3751.373]","855":"[11426.0088 -7899.2207 -3751.385]","856":"[11177.9453 -8348.4414 -3751.3521]","857":"[10895.0439 -8796.9307 -3751.1616]","858":"[10589.9316 -9229.1875 -3751.2476]","859":"[10264.3789 -9647.6621 -3751.3867]","860":"[9925.96 -10046.2383 -3751.1462]","861":"[9573.4209 -10430.8828 -3751.2542]","862":"[9208.4102 -10802.1953 -3751.4121]","863":"[8831.2539 -11159.0498 -3751.5254]","864":"[8442.6826 -11500.7617 -3751.5745]","865":"[8033.5176 -11832.4482 -3751.1755]","866":"[7615.2563 -12142.4678 -3751.3457]","867":"[7183.603 -12430.6094 -3751.2803]","868":"[6738.1196 -12694.334 -3751.1897]","869":"[6279.0313 -12930.4053 -3751.3076]","870":"[5805.854 -13135.9053 -3751.4392]","871":"[5307.5259 -13311.251 -3751.3293]","872":"[4798.2476 -13445.3945 -3751.3533]","873":"[4281.2065 -13536.3359 -3751.4031]","874":"[3759.9158 -13581.5 -3751.292]","875":"[3238.5828 -13579.4854 -3751.3757]","876":"[2721.0837 -13531.6133 -3751.4768]","877":"[2211.1008 -13439.2852 -3751.4539]","878":"[1711.8811 -13305.2266 -3751.3015]","879":"[1225.5645 -13133.9971 -3751.4519]","880":"[753.9832 -12928.5869 -3751.4636]","881":"[297.6974 -12693.7588 -3751.4644]","882":"[-143.0275 -12433.0068 -3751.5027]","883":"[-581.8073 -12139.6992 -3751.5601]","884":"[-1004.8853 -11826.001 -3751.5005]","885":"[-1412.7886 -11494.4482 -3751.2634]","886":"[-1806.3566 -11147.542 -3751.3892]","887":"[-2186.7871 -10787.709 -3751.3701]","888":"[-2558.2417 -10419.8965 -3751.5413]","889":"[-2926.8547 -10050.5264 -3751.4888]","890":"[-3294.811 -9681.8379 -3751.4651]","891":"[-3662.5957 -9314.2949 -3751.4604]","892":"[-4029.7339 -8947.3906 -3751.4568]","893":"[-4396.3833 -8581.1045 -3751.4897]","894":"[-4759.6392 -8218.3584 -3751.5652]","895":"[-5123.9839 -7853.0273 -3751.4192]","896":"[-5488.2739 -7488.9922 -3751.3264]","897":"[-5851.7861 -7125.5347 -3751.3267]","898":"[-6214.6187 -6762.7407 -3751.4307]","899":"[-6576.938 -6400.751 -3751.4531]","900":"[-6944.4082 -6033.3291 -3751.4612]","901":"[-7311.8726 -5665.7012 -3751.3926]","902":"[-7679.6255 -5297.752 -3751.4402]","903":"[-8041.793 -4935.5532 -3751.5117]","904":"[-8404.1104 -4572.8052 -3751.2803]","905":"[-8773.0146 -4204.21 -3751.4316]","906":"[-9136.9629 -3840.3015 -3751.4277]","907":"[-9507.0098 -3470.1917 -3751.4202]","908":"[-9870.2637 -3106.2183 -3751.4541]","909":"[-10237.7188 -2738.5874 -3751.3843]","910":"[-10604.4453 -2373.6748 -3751.4387]","911":"[-10969.6611 -2008.8022 -3751.448]","912":"[-11343.7461 -1633.2853 -3751.4021]","913":"[-11713.4346 -1262.3092 -3751.4202]","914":"[-12082.3535 -895.3417 -3751.3457]","915":"[-12445.4111 -530.3635 -3751.4565]","916":"[-12813.8525 -164.1103 -3751.4111]","917":"[-13177.0938 201.4431 -3751.4656]","918":"[-13541.9619 563.9583 -3751.4111]","919":"[-13908.7246 937.3759 -3751.3899]","920":"[-14258.0215 1323.9242 -3751.3481]","921":"[-14575.3672 1733.2283 -3751.4485]","922":"[-14851.0947 2169.0417 -3751.5068]","923":"[-15073.4043 2631.4075 -3751.5203]","924":"[-15232.875 3129.5708 -3751.1672]","925":"[-15310.7832 3643.9692 -3751.1003]","926":"[-15318.6855 4163.9907 -3751.4246]","927":"[-15277.7861 4681.313 -3751.5332]","928":"[-15199.5674 5192.9175 -3751.4009]","929":"[-15101.1992 5699.7329 -3751.4592]","930":"[-14999.5322 6204.5049 -3751.4636]","931":"[-14900.127 6708.4536 -3751.4131]","932":"[-14805.3252 7211.793 -3751.4556]","933":"[-14739.791 7729.4565 -3751.4392]","934":"[-14711.1738 8248.6484 -3751.4114]","935":"[-14705.8457 8767.915 -3751.4814]","936":"[-14705.9922 9289.8076 -3751.3374]","937":"[-14706.0283 9804.793 -3751.4307]","938":"[-14706.0264 10318.9492 -3751.3025]","939":"[-14705.6318 10832.124 -3751.5479]","940":"[-14688.4814 11356.3867 -3751.2021]","941":"[-14637.5039 11876.1113 -3751.2747]","942":"[-14536.873 12386.7451 -3751.4763]","943":"[-14382.4063 12880.8809 -3751.0046]","944":"[-14162.8262 13345.6592 -3751.5093]","945":"[-13868.8145 13778.2451 -3751.3767]","946":"[-13505.7227 14150.4893 -3751.5815]","947":"[-13085.7197 14453.082 -3751.3911]","948":"[-12623.9229 14683.7979 -3751.592]","949":"[-12135.9072 14848.0439 -3751.3638]","950":"[-11627.7832 14956.0547 -3751.7004]","951":"[-11106.1777 15016.4268 -3751.3723]","952":"[-10588.5752 15037.4365 -3751.5437]","953":"[-10076.5332 15040.1787 -3751.4966]","954":"[-9559.4932 15039.4014 -3751.4585]","955":"[-9042.1807 15039.582 -3751.4548]","956":"[-8525.8203 15039.6396 -3751.5112]","957":"[-8010.4336 15039.4678 -3751.5625]","958":"[-7496.0122 15039.8135 -3751.4517]","959":"[-6982.7949 15039.1299 -3750.8818]","960":"[-6453.4185 15039.6475 -3751.0679]","961":"[-5925.7256 15039.1563 -3751.5098]","962":"[-5399.417 15038.4463 -3751.6262]","963":"[-4874.9741 15039.5996 -3751.3528]","964":"[-4352.209 15039.3262 -3750.9971]","965":"[-3831.0737 15038.8936 -3750.9734]","966":"[-3311.51 15039.6689 -3751.4585]","967":"[-2792.854 15039.0654 -3751.5488]","968":"[-2275.1675 15038.5391 -3751.5176]","969":"[-1758.4174 15039.3525 -3751.4365]","970":"[-1242.6277 15039.1445 -3751.4407]","971":"[-727.7779 15038.374 -3751.4419]","972":"[-213.8456 15039.208 -3751.4287]","973":"[299.1512 15039.5703 -3751.4492]","974":"[811.1998 15038.1416 -3751.4583]","975":"[1339.3347 15038.5674 -3751.4597]","976":"[1866.5055 15039.3604 -3751.4377]","977":"[2392.7158 15038.918 -3751.4944]","978":"[2920.0093 15039.0068 -3765.8008]","979":"[3433.9844 15039.0693 -3800.5918]","980":"[3955.4067 15039.1436 -3853.5239]","981":"[4469.9609 15038.8896 -3912.0242]","982":"[4996.1147 15039.1602 -3974.7727]","983":"[5515.3774 15039.293 -4037.2515]","984":"[6026.9863 15039.0957 -4097.9683]","985":"[6549.0356 15039.209 -4157.4468]","986":"[7061.0757 15039.3838 -4210.4253]","987":"[7580.4014 15039.1934 -4248.0962]","988":"[8103.252 15038.8848 -4263.0845]","989":"[8616.1055 15039.0635 -4263.2495]","990":"[9128.8125 15038.9668 -4263.3667]","991":"[9646.4814 15038.7979 -4263.3525]","992":"[10163.2588 15038.5557 -4263.4673]","993":"[10684.5674 15038.7559 -4263.1875]","994":"[11204.6133 15027.3389 -4263.416]","995":"[11721.0107 14983.6895 -4263.1699]","996":"[12229.1494 14895.8711 -4263.1895]","997":"[12721.584 14754.8799 -4263.2173]","998":"[13200.4473 14547.9424 -4263.252]","999":"[13638.5371 14271.3906 -4263.3223]","1000":"[14021.0986 13927.0557 -4263.2915]","1001":"[14337.1182 13523.5674 -4263.3945]","1002":"[14587.5449 13063.5176 -4263.21]","1003":"[14768.0469 12573.3545 -4263.4888]","1004":"[14887.627 12066.042 -4263.2324]","1005":"[14956.0391 11550.1855 -4263.2759]","1006":"[14983.8027 11035.2607 -4263.353]","1007":"[14989.0508 10516.8057 -4263.3818]","1008":"[14987.9453 10000.7949 -4263.4766]","1009":"[14986.9258 9473.9795 -4263.4692]","1010":"[14987.9756 8937.54 -4263.5112]","1011":"[14988.8174 8413.5098 -4263.46]","1012":"[14988.4531 7890.8291 -4263.4785]","1013":"[14987.8369 7369.5068 -4263.4683]","1014":"[14987.502 6849.5454 -4263.3462]","1015":"[14987.5889 6330.9033 -4263.3838]","1016":"[14988.2256 5813.6089 -4263.4282]","1017":"[14988.4443 5297.6074 -4263.4795]","1018":"[14987.4756 4764.1704 -4263.4819]","1019":"[14987.5039 4237.8774 -4263.4565]","1020":"[14988.1797 3724.9666 -4263.4634]","1021":"[14987.9492 3197.3132 -4263.457]","1022":"[14984.9658 2676.7126 -4262.707]","1023":"[14959.5234 2159.407 -4263.25]","1024":"[14890.5645 1639.7726 -4263.3193]","1025":"[14773.333 1140.1874 -4263.436]","1026":"[14595.7041 648.7827 -4263.2046]","1027":"[14349.7021 191.5279 -4263.354]","1028":"[14034.8877 -216.9174 -4263.0225]","1029":"[13656.0293 -562.3677 -4263.4561]","1030":"[13215.1084 -844.2455 -4263.2686]","1031":"[12737.0752 -1053.9576 -4263.4141]","1032":"[12236.5781 -1198.2706 -4263.4546]","1033":"[11724.6533 -1287.8839 -4263.1841]","1034":"[11206.0293 -1331.678 -4263.3794]","1035":"[10681.4785 -1343.7805 -4263.3242]","1036":"[10155.8213 -1344.6283 -4263.4248]","1037":"[9640.8584 -1342.922 -4263.3652]","1038":"[9126.832 -1344.1543 -4263.5317]","1039":"[8613.7002 -1344.1619 -4263.5596]","1040":"[8101.5132 -1343.651 -4263.5464]","1041":"[7573.7256 -1344.1628 -4263.4189]","1042":"[7046.8862 -1344.1477 -4263.519]","1043":"[6520.9902 -1343.8572 -4263.4287]","1044":"[5996.0278 -1343.9827 -4263.4663]","1045":"[5472.0332 -1344.231 -4263.3677]","1046":"[4948.9507 -1343.655 -4263.4941]","1047":"[4426.8052 -1343.8734 -4263.4639]","1048":"[3905.6003 -1344.1952 -4263.3838]","1049":"[3385.3103 -1343.4965 -4263.4155]","1050":"[2866.1123 -1344.6681 -4263.292]","1051":"[2348.0894 -1344.3875 -4263.2954]","1052":"[1831.0231 -1344.3865 -4263.2432]","1053":"[1315.3171 -1345.4434 -4263.3252]","1054":"[800.4871 -1343.9485 -4263.3682]","1055":"[286.58 -1344.8024 -4263.356]","1056":"[-226.4437 -1345.0416 -4263.4131]","1057":"[-738.5685 -1344.1436 -4263.3433]","1058":"[-1265.4716 -1345.2349 -4263.3667]","1059":"[-1791.3547 -1344.1626 -4263.2339]","1060":"[-2316.1086 -1343.9991 -4263.1455]","1061":"[-2839.6252 -1344.2363 -4263.3877]","1062":"[-3362.2288 -1343.5618 -4263.481]","1063":"[-3883.9275 -1343.5594 -4263.5044]","1064":"[-4404.7275 -1344.1443 -4263.438]","1065":"[-4924.6138 -1343.6854 -4263.4619]","1066":"[-5443.606 -1343.6104 -4263.4619]","1067":"[-5961.7368 -1344.0253 -4263.4585]","1068":"[-6479.2861 -1343.3544 -4263.4668]","1069":"[-6991.5366 -1334.4896 -4263.395]","1070":"[-7518.5879 -1307.8063 -4263.3247]","1071":"[-8043.0698 -1260.5507 -4263.3433]","1072":"[-8563.7051 -1190.6946 -4263.3164]","1073":"[-9079.1348 -1096.8188 -4263.3643]","1074":"[-9587.6182 -976.1063 -4263.4712]","1075":"[-10086.8535 -825.976 -4263.3838]","1076":"[-10573.8477 -644.7527 -4263.6831]","1077":"[-11045.7334 -431.2069 -4263.5186]","1078":"[-11498.1846 -182.8709 -4263.5317]","1079":"[-11927.7129 100.134 -4263.3096]","1080":"[-12330.3174 417.5194 -4263.478]","1081":"[-12713.751 779.0538 -4263.3726]","1082":"[-13061.9492 1172.2085 -4263.3188]","1083":"[-13372.4072 1593.6389 -4263.4189]","1084":"[-13645.9766 2038.3209 -4263.541]","1085":"[-13882.1758 2502.4536 -4263.3384]","1086":"[-14083.2432 2981.4163 -4263.3833]","1087":"[-14250.5117 3471.8496 -4263.4233]","1088":"[-14387.8594 3970.3601 -4263.2588]","1089":"[-14496.4326 4474.6484 -4263.2231]","1090":"[-14579.96 4982.6587 -4263.3984]","1091":"[-14640.5811 5497.1348 -4263.4014]","1092":"[-14680.2383 6017.4917 -4263.3848]","1093":"[-14700.6904 6537.9771 -4263.1772]","1094":"[-14698.8018 7057.2495 -4263.4829]","1095":"[-14663.4121 7573.3667 -4262.9009]","1096":"[-14585.4414 8082.4165 -4262.8706]","1097":"[-14456.5479 8578.2334 -4263.5186]","1098":"[-14261.4102 9064.0898 -4263.1255]","1099":"[-13999.2549 9512.9111 -4263.0132]","1100":"[-13668.8311 9910.0557 -4261.9004]","1101":"[-13272.8066 10248.7676 -4259.8389]","1102":"[-12936.4834 10446.4766 -4261.9355]","1103":"[-12462.0186 10651.4814 -4263.1411]","1104":"[-11967.1475 10788.6895 -4263.5156]","1105":"[-11464.1543 10884.5859 -4263.2793]","1106":"[-10945.4863 10929.5283 -4263.2715]","1107":"[-10432.4766 10940.6113 -4276.9004]","1108":"[-9915.877 10943.5684 -4309.999]","1109":"[-9405.875 10943.1826 -4360.7056]","1110":"[-8888.0332 10942.6484 -4419.2915]","1111":"[-8375.6631 10943.4043 -4480.0112]","1112":"[-7860.9365 10942.7412 -4541.7393]","1113":"[-7347.4819 10943.5352 -4603.061]","1114":"[-6825.0986 10942.958 -4663.1147]","1115":"[-6310.9956 10943.2764 -4717.0835]","1116":"[-5796.1865 10943.1934 -4756.8687]","1117":"[-5272.9219 10943.3857 -4774.6592]","1118":"[-4760.9058 10943.4346 -4776.2881]","1119":"[-4234.4272 10942.8779 -4776.4775]","1120":"[-3708.7983 10942.8848 -4776.4712]","1121":"[-3184.0222 10943.2021 -4776.4595]","1122":"[-2660.094 10943.8662 -4776.5186]","1123":"[-2137.063 10942.5645 -4776.4351]","1124":"[-1614.9186 10943.6055 -4776.353]","1125":"[-1093.6152 10943.6699 -4776.4341]","1126":"[-573.1732 10942.9473 -4776.4521]","1127":"[-53.5953 10942.6221 -4776.4521]","1128":"[465.15 10943.2754 -4776.4546]","1129":"[983.0729 10943.4365 -4776.4531]","1130":"[1500.1631 10943.2871 -4776.4004]","1131":"[2016.4447 10943.4834 -4776.3545]","1132":"[2531.6714 10943.9727 -4776.1255]","1133":"[3045.5215 10943.7695 -4776.3364]","1134":"[3558.106 10944.4336 -4776.1924]","1135":"[4083.439 10930.0869 -4776.5215]","1136":"[4602.8623 10883.0273 -4776.4282]","1137":"[5111.022 10789.2871 -4776.4536]","1138":"[5603.2808 10642.7236 -4775.9609]","1139":"[6079.6929 10427.542 -4776.5469]","1140":"[6514.2744 10144.376 -4776.2954]","1141":"[6890.3154 9792.3447 -4776.1782]","1142":"[7199.3813 9383.0273 -4776.3071]","1143":"[7442.5635 8918.4736 -4776.2412]","1144":"[7616.5645 8424.9854 -4776.3262]","1145":"[7730.4009 7915.2803 -4776.2397]","1146":"[7793.9141 7398.2231 -4776.4146]","1147":"[7817.605 6878.5107 -4776.4839]","1148":"[7821.6274 6362.8652 -4776.3257]","1149":"[7820.9644 5832.4595 -4776.3862]","1150":"[7820.5889 5315.7427 -4776.4775]","1151":"[7820.8618 4800.917 -4776.4668]","1152":"[7820.9272 4287.2622 -4776.4878]","1153":"[7821.1646 3774.7664 -4776.4683]","1154":"[7821.188 3241.209 -4776.46]","1155":"[7820.9512 2708.8887 -4776.4629]","1156":"[7820.646 2177.7964 -4776.3423]","1157":"[7821.0479 1647.9323 -4776.3516]","1158":"[7821.207 1119.2666 -4776.3794]","1159":"[7820.5801 591.8199 -4776.4321]","1160":"[7820.3208 65.5785 -4776.4712]","1161":"[7820.8916 -459.4741 -4776.4604]","1162":"[7821.0508 -983.3577 -4776.4512]","1163":"[7821.1543 -1506.0857 -4776.5513]","1164":"[7820.6685 -2027.6296 -4776.5063]","1165":"[7820.5688 -2548.0054 -4776.4751]","1166":"[7821.0005 -3067.218 -4776.5195]","1167":"[7821.499 -3585.2595 -4776.4556]","1168":"[7821.0918 -4102.146 -4776.4678]","1169":"[7820.6265 -4617.8813 -4776.4663]","1170":"[7820.9028 -5132.4922 -4776.4404]","1171":"[7821.1914 -5646.0005 -4776.5469]","1172":"[7821.2031 -6158.3745 -4776.501]","1173":"[7821.127 -6690.9199 -4776.3198]","1174":"[7820.5933 -7222.3008 -4776.3774]","1175":"[7820.7236 -7752.4771 -4776.4644]","1176":"[7821.2383 -8281.4805 -4776.458]","1177":"[7821.1079 -8799.4629 -4776.4634]","1178":"[7821.0054 -9327.0459 -4776.3408]","1179":"[7820.7856 -9843.6582 -4776.4116]","1180":"[7821.7529 -10362.04 -4776.3325]","1181":"[7807.8755 -10879.0947 -4776.3755]","1182":"[7765.4385 -11392.4805 -4776.3667]","1183":"[7676.4731 -11897.207 -4775.9092]","1184":"[7532.9067 -12398.8262 -4776.1968]","1185":"[7325.4175 -12873.7344 -4776.1128]","1186":"[7050.0073 -13308.6689 -4776.3091]","1187":"[6698.6982 -13696.3135 -4776.2876]","1188":"[6287.0239 -14014.9336 -4776.4204]","1189":"[5830.4009 -14260.8516 -4776.1821]","1190":"[5344.3604 -14437.4082 -4776.3892]","1191":"[4841.9131 -14555.5059 -4776.2813]","1192":"[4326.5698 -14623.5908 -4776.3291]","1193":"[3800.9976 -14652.542 -4776.2959]","1194":"[3280.6077 -14656.0762 -4776.3057]","1195":"[2756.4167 -14654.1475 -4776.4766]","1196":"[2239.1511 -14654.2471 -4776.5303]","1197":"[1724.7922 -14655.5215 -4776.3921]","1198":"[1211.7657 -14655.4814 -4776.2891]","1199":"[674.425 -14654.3203 -4776.4541]","1200":"[138.552 -14654.4756 -4776.4604]","1201":"[-395.9642 -14655.2686 -4776.3818]","1202":"[-929.0439 -14655.2617 -4776.459]","1203":"[-1460.765 -14654.4844 -4776.394]","1204":"[-1982.7661 -14654.6758 -4776.4912]","1205":"[-2495.2327 -14655.3857 -4776.417]","1206":"[-3012.9939 -14654.8418 -4776.4858]","1207":"[-3529.6421 -14654.3975 -4776.4561]","1208":"[-4044.8213 -14655.3662 -4776.5005]","1209":"[-4562.1851 -14653.8652 -4776.5122]","1210":"[-5083.8066 -14640.1885 -4776.1899]","1211":"[-5603.2764 -14609.0254 -4776.3813]","1212":"[-6119.8652 -14556.8223 -4776.438]","1213":"[-6631.9097 -14482.4775 -4776.6406]","1214":"[-7138.3433 -14384.6396 -4776.0361]","1215":"[-7637.1333 -14259.8477 -4776.3931]","1216":"[-8126.7622 -14107.1426 -4776.3218]","1217":"[-8619.2041 -13916.6504 -4776.4072]","1218":"[-9095.3662 -13692.0703 -4776.4585]","1219":"[-9551.0625 -13431.6533 -4776.3433]","1220":"[-9981.7637 -13134.8418 -4776.375]","1221":"[-10384.2031 -12803.4131 -4776.4395]","1222":"[-10753.4775 -12437.7607 -4776.6206]","1223":"[-11088.9375 -12042.8154 -4776.3525]","1224":"[-11387.2979 -11620.9229 -4776.3633]","1225":"[-11649.3457 -11177.1436 -4776.2305]","1226":"[-11875.7373 -10715.7676 -4776.416]","1227":"[-12066.9922 -10240.0645 -4776.5615]","1228":"[-12232.1758 -9739.4385 -4776.3784]","1229":"[-12364.7041 -9230.6035 -4776.3882]","1230":"[-12469.6992 -8716.4551 -4776.3716]","1231":"[-12548.207 -8198.6514 -4776.4653]","1232":"[-12603.9658 -7678.8633 -4776.2773]","1233":"[-12638.5352 -7158.3423 -4776.0635]","1234":"[-12654.0654 -6638.2334 -4775.9771]","1235":"[-12657.7715 -6124.3535 -4776.3491]","1236":"[-12656.6328 -5606.5146 -4776.4648]","1237":"[-12656.6152 -5083.1953 -4776.4976]","1238":"[-12657.8115 -4560.8589 -4776.48]","1239":"[-12656.8154 -4039.5068 -4776.4741]","1240":"[-12656.1396 -3519.1626 -4776.4639]","1241":"[-12656.8457 -2999.7732 -4776.4614]","1242":"[-12657.1416 -2481.3308 -4776.3594]","1243":"[-12657.2715 -1963.7949 -4776.3486]","1244":"[-12656.9131 -1447.225 -4776.4517]","1245":"[-12656.9063 -931.5935 -4776.5068]","1246":"[-12656.5986 -416.5213 -4779.6484]","1247":"[-12656.6631 100.8257 -4801.3481]","1248":"[-12656.9414 622.6443 -4846.0352]","1249":"[-12656.9766 1135.9153 -4901.2056]","1250":"[-12656.8135 1660.1731 -4961.8555]","1251":"[-12656.6855 2177.5786 -5024.0718]","1252":"[-12656.834 2687.3972 -5086.2295]","1253":"[-12656.8486 3204.4055 -5149.8047]","1254":"[-12656.7568 3727.5273 -5213.9819]","1255":"[-12657.1699 4242.6738 -5277.3823]","1256":"[-12656.8555 4765.7993 -5341.5684]","1257":"[-12656.6924 5285.4321 -5405.3721]","1258":"[-12656.667 5795.2915 -5467.9692]","1259":"[-12656.6992 6316.1045 -5531.8628]","1260":"[-12657.0928 6840.0859 -5596.2676]","1261":"[-12657.2705 7354.6528 -5658.9219]","1262":"[-12657.2949 7869.0063 -5720.5522]","1263":"[-12657.3359 8385.8652 -5781.4268]","1264":"[-12657.2363 8899.8037 -5837.2041]","1265":"[-12657.3564 9419.0088 -5883.5654]","1266":"[-12656.8027 9939.9053 -5907.0508]","1267":"[-12642.2256 10460.7324 -5911.9087]","1268":"[-12587.6611 10973.8037 -5912.4492]","1269":"[-12466.5059 11479.6426 -5912.4673]","1270":"[-12265.7109 11952.21 -5912.3267]","1271":"[-12055.5322 12274.8213 -5912.5044]","1272":"[-11766.6504 12582.8359 -5912.3086]","1273":"[-11456.2236 12814.6836 -5912.3652]","1274":"[-11078.9434 13004.8164 -5912.4385]","1275":"[-10590.1338 13160.54 -5912.3784]","1276":"[-10083.7588 13242.5898 -5912.2759]","1277":"[-9570.9189 13268.9795 -5912.5503]","1278":"[-9054.8223 13239.3994 -5912.2119]","1279":"[-8546.1563 13151.4492 -5912.1138]","1280":"[-8051.2466 12989.6758 -5912.2861]","1281":"[-7662.5146 12781.9824 -5912.4082]","1282":"[-7355.7246 12540.9404 -5912.2993]","1283":"[-7085.3315 12238.4434 -5912.3774]","1284":"[-6878.0728 11902.8262 -5912.4844]","1285":"[-6685.127 11419.4775 -5912.3496]","1286":"[-6573.1899 10912.9707 -5912.3818]","1287":"[-6524.3857 10402.6865 -5912.3086]","1288":"[-6512.2227 9885.4971 -5912.4131]","1289":"[-6513.6606 9368.5615 -5912.4473]","1290":"[-6513.6763 8847.916 -5912.4165]","1291":"[-6511.707 8328.1279 -5912.5103]","1292":"[-6514.1797 7809.2139 -5912.4595]","1293":"[-6512.7808 7291.1807 -5912.4541]","1294":"[-6512.603 6777.5771 -5912.4565]","1295":"[-6512.645 6259.9009 -5912.4224]","1296":"[-6490.6479 5747.9414 -5912.3394]","1297":"[-6423.7998 5233.8813 -5912.2793]","1298":"[-6289.5352 4736.8457 -5912.394]","1299":"[-6069.0005 4267.9683 -5912.5313]","1300":"[-5868.2598 3983.7656 -5912.4063]","1301":"[-5550.0957 3668.5469 -5912.332]","1302":"[-5268.6455 3473.6738 -5912.5337]","1303":"[-4796.7168 3255.6526 -5912.3364]","1304":"[-4300.4053 3123.2859 -5912.2056]","1305":"[-3792.1389 3058.1726 -5912.2437]","1306":"[-3272.3269 3047.2153 -5912.1738]","1307":"[-2755.5215 3080.0933 -5912.3154]","1308":"[-2245.1309 3155.6987 -5912.4941]","1309":"[-1747.4838 3281.7385 -5912.6465]","1310":"[-1263.6414 3468.6624 -5912.5015]","1311":"[-814.5626 3720.3218 -5912.2061]","1312":"[-406.0904 4042.186 -5912.4502]","1313":"[-29.1 4399.0444 -5912.5273]","1314":"[337.2914 4766.1128 -5916.2178]","1315":"[703.4799 5134.2964 -5937.1426]","1316":"[1069.5574 5499.5015 -5980.333]","1317":"[1434.937 5863.978 -6035.6528]","1318":"[1799.3866 6229.1567 -6095.4478]","1319":"[2162.4724 6592.0024 -6157.1206]","1320":"[2522.5234 6952.1455 -6219.0049]","1321":"[2886.6472 7315.792 -6282.2798]","1322":"[3246.8574 7676.8516 -6344.8926]","1323":"[3610.5466 8040.1963 -6407.9175]","1324":"[3972.2346 8401.4336 -6470.7817]","1325":"[4332.8418 8763.1025 -6533.479]","1326":"[4696.8057 9126.832 -6596.6558]","1327":"[5064.1396 9493.7891 -6660.4321]","1328":"[5428.085 9858.3857 -6722.9907]","1329":"[5791.5879 10222.2539 -6784.7759]","1330":"[6153.9111 10584.6328 -6844.1216]","1331":"[6518.5815 10949.1426 -6898.8384]","1332":"[6884.8232 11315.5752 -6940.5981]","1333":"[7251.4937 11682.1982 -6959.7319]","1334":"[7620.0771 12049.8018 -6962.4678]","1335":"[7989.9565 12417.0908 -6963.8672]","1336":"[8378.9043 12762.8789 -6966.7612]","1337":"[8796.6035 13059.3643 -6971.729]","1338":"[9261.8643 13288.8613 -6975.917]","1339":"[9611.4385 13390.1523 -6977.3926]","1340":"[9977.7422 13428.9814 -6978.0352]","1341":"[10318.6426 13404.9902 -6977.7432]","1342":"[10684.2236 13313.2715 -6976.1118]","1343":"[11100.8506 13127.0127 -6972.9419]","1344":"[11533.5322 12842.7422 -6968.3188]","1345":"[11927.2842 12505.2422 -6968.8159]","1346":"[12296.8506 12149.293 -6989.1479]","1347":"[12660.209 11785.8193 -7032.2524]","1348":"[13021.6299 11423.0957 -7087.1479]","1349":"[13381.8125 11062.8828 -7146.2583]","1350":"[13740.3896 10703.0137 -7210.3511]","1351":"[14083.6016 10326.1943 -7277.6206]","1352":"[14396.7021 9926.416 -7344.0918]","1353":"[14674.1016 9496.2021 -7396.9185]","1354":"[14904.7871 9037.4717 -7434.6484]","1355":"[15063.502 8551.3008 -7460.7773]","1356":"[15134.6016 8052.8311 -7477.0249]","1357":"[15119.7568 7600.9624 -7485.0972]","1358":"[15016.5742 7091.1377 -7487.6445]","1359":"[14829.9287 6608.0747 -7486.436]","1360":"[14574.4863 6162.1675 -7483.7095]","1361":"[14267.8213 5745.3735 -7479.9795]","1362":"[13930.7803 5359.8496 -7476.6206]","1363":"[13568.2744 4983.7524 -7474.7632]","1364":"[13195.5293 4612.4849 -7474.7529]","1365":"[12825.3936 4244.5479 -7474.9541]","1366":"[12450.7549 3866.8623 -7475.1035]","1367":"[12082.4326 3497.8713 -7475.0044]","1368":"[11713.208 3131.1272 -7474.9263]","1369":"[11345.9014 2764.3054 -7475.1245]","1370":"[10972.8154 2389.0525 -7475.1646]","1371":"[10598.4893 2014.6367 -7475.1025]","1372":"[10231.8691 1650.0514 -7475.0234]","1373":"[9859.9697 1276.3105 -7474.9785]","1374":"[9488.793 905.7505 -7475.0586]","1375":"[9121.8535 539.2278 -7475.1064]","1376":"[8756.3398 173.4465 -7475.1304]","1377":"[8393.1582 -189.8424 -7475.1001]","1378":"[8029.5767 -552.8955 -7475.0718]","1379":"[7665.1626 -917.4192 -7475.0811]","1380":"[7298.0098 -1274.5922 -7478.1011]","1381":"[6891.3672 -1596.353 -7483.4111]","1382":"[6439.4253 -1846.2559 -7489.4355]","1383":"[5955.9209 -2025.7422 -7490.479]","1384":"[5456.7124 -2142.9976 -7487.561]","1385":"[4945.7202 -2209.3062 -7482.2529]","1386":"[4425.2637 -2235.7358 -7477.5322]","1387":"[3901.594 -2241.0378 -7474.8994]","1388":"[3387.7231 -2239.6204 -7475.0752]","1389":"[2873.3049 -2239.6045 -7475.1226]","1390":"[2351.3384 -2240.5432 -7475.1763]","1391":"[1831.108 -2239.7463 -7475.0215]","1392":"[1317.7761 -2239.6782 -7475.0483]","1393":"[794.9223 -2240.5088 -7475.1392]","1394":"[281.0304 -2239.9873 -7475.187]","1395":"[-239.3923 -2239.4136 -7474.9541]","1396":"[-766.9639 -2239.6448 -7475.0547]","1397":"[-1293.3196 -2239.9536 -7475.1563]","1398":"[-1818.4357 -2239.887 -7475.0093]","1399":"[-2342.323 -2240.0149 -7474.9795]","1400":"[-2864.968 -2239.7266 -7474.9707]","1401":"[-3386.3997 -2239.6628 -7475.1831]","1402":"[-3906.6111 -2240.1636 -7475.1787]","1403":"[-4425.6377 -2239.8616 -7474.9961]","1404":"[-4943.4824 -2239.708 -7474.9453]","1405":"[-5460.1738 -2240.1299 -7475.1543]","1406":"[-5975.6597 -2239.8005 -7475.1489]","1407":"[-6489.9927 -2239.4102 -7475.0313]","1408":"[-7003.1509 -2239.8865 -7474.9722]","1409":"[-7515.186 -2240.2646 -7475.1338]","1410":"[-8048.2495 -2240.0261 -7475.1406]","1411":"[-8580.0586 -2240.1787 -7475.041]","1412":"[-9103.6992 -2240.064 -7475.0142]","1413":"[-9620.7832 -2239.8716 -7475.062]","1414":"[-10135.1328 -2239.5029 -7475.1436]","1415":"[-10659.5293 -2240.1333 -7475.0825]","1416":"[-11176.0117 -2240.0742 -7475.0459]","1417":"[-11698.6553 -2239.9714 -7474.8984]","1418":"[-12217.8271 -2239.9788 -7475.0127]","1419":"[-12732.5908 -2240.074 -7475.0596]","1420":"[-13246.6318 -2254.3328 -7475.3701]","1421":"[-13765.2607 -2307.4983 -7475.5786]","1422":"[-14268.8945 -2427.2959 -7475.457]","1423":"[-14741.627 -2624.9922 -7475.4033]","1424":"[-15066.3242 -2833.4175 -7475.2764]","1425":"[-15361.2354 -3105.5317 -7475.6509]","1426":"[-15602.915 -3422.8254 -7475.2539]","1427":"[-15797.6055 -3800.2117 -7475.3555]","1428":"[-15955.5723 -4290.5601 -7475.3442]","1429":"[-16041.1758 -4803.7085 -7475.4204]","1430":"[-16071.1982 -5317.0225 -7475.249]","1431":"[-16076.7656 -5829.6509 -7475.0518]","1432":"[-16075.6641 -6351.1577 -7474.96]","1433":"[-16075.9873 -6871.9087 -7475.0518]","1434":"[-16076.1787 -7391.7476 -7475.02]","1435":"[-16076.3252 -7910.6943 -7475.0601]","1436":"[-16075.6426 -8428.7813 -7475.0605]","1437":"[-16076.3359 -8945.9951 -7475.0518]","1438":"[-16070.7051 -9462.1426 -7475.1548]","1439":"[-16035.1748 -9975.0381 -7475.313]","1440":"[-15940.9697 -10487.1553 -7475.4595]","1441":"[-15772.1406 -10977.7051 -7475.4819]","1442":"[-15558.2676 -11363.6104 -7475.4136]","1443":"[-15325.3955 -11650.9844 -7475.4028]","1444":"[-15004.4131 -11929.7988 -7475.3418]","1445":"[-14670.2637 -12129.8867 -7475.4365]","1446":"[-14185.374 -12316.1758 -7475.2617]","1447":"[-13682.3799 -12423.083 -7475.377]","1448":"[-13164.0078 -12468.6992 -7475.3037]","1449":"[-12648.9658 -12490.1689 -7475.2998]","1450":"[-12128.9473 -12518.4443 -7475.4053]","1451":"[-11613.3428 -12575.2412 -7475.2686]","1452":"[-11103.6738 -12660.9424 -7475.4712]","1453":"[-10602.0303 -12774.5557 -7475.6152]","1454":"[-10103.167 -12922.3975 -7475.5063]","1455":"[-9611.0479 -13090.4795 -7475.3555]","1456":"[-9122.502 -13248.123 -7475.5122]","1457":"[-8618.0205 -13376.8262 -7475.2847]","1458":"[-8114.0605 -13474.3818 -7475.5908]","1459":"[-7602.0342 -13543.3584 -7475.3745]","1460":"[-7088.7021 -13584.917 -7475.4292]","1461":"[-6566.6528 -13603.3418 -7475.5093]","1462":"[-6047.418 -13606.9697 -7475.3682]","1463":"[-5525.3555 -13606.3779 -7475.6035]","1464":"[-5010.6235 -13606.8652 -7475.1963]","1465":"[-4489.8081 -13606.2695 -7475.3999]","1466":"[-3965.7117 -13606.5156 -7475.4648]","1467":"[-3452.0332 -13606.9844 -7475.3101]","1468":"[-2938.0088 -13606.0762 -7475.2695]","1469":"[-2409.0818 -13606.7988 -7475.5029]","1470":"[-1888.1517 -13607.0947 -7475.3975]","1471":"[-1358.2803 -13607.4414 -7475.0752]","1472":"[-829.9323 -13607.3252 -7475.3022]","1473":"[-302.6403 -13606.8135 -7475.4844]","1474":"[223.5667 -13607.0469 -7475.4766]","1475":"[748.6737 -13607.5674 -7475.4785]","1476":"[1272.6952 -13607.4688 -7475.4722]","1477":"[1795.6644 -13607.4688 -7475.4644]","1478":"[2317.147 -13606.5889 -7475.6055]","1479":"[2837.1912 -13607.1094 -7475.6045]","1480":"[3356.0806 -13607.3184 -7475.4912]","1481":"[3873.8794 -13606.7324 -7475.5088]","1482":"[4389.6978 -13606.7197 -7475.8945]","1483":"[4904.2529 -13607.4463 -7475.6118]","1484":"[5417.7798 -13607.5068 -7475.4575]","1485":"[5930.3052 -13606.5303 -7475.4146]","1486":"[6460.7388 -13606.584 -7475.4688]","1487":"[6990.0977 -13607.4404 -7475.4678]","1488":"[7515.604 -13607.7754 -7475.4678]","1489":"[8030.6563 -13607.0879 -7475.4272]","1490":"[8544.9072 -13606.5635 -7475.3667]","1491":"[9058.3848 -13607.4688 -7475.5156]","1492":"[9570.7842 -13599.0352 -7475.3818]","1493":"[10093.1133 -13563.1416 -7475.2183]","1494":"[10608.0449 -13483.4375 -7475.3569]","1495":"[11109.625 -13352.1729 -7475.5171]","1496":"[11588.1211 -13159.1396 -7475.5391]","1497":"[12030.8525 -12899.6406 -7475.2739]","1498":"[12430.333 -12562.6982 -7475.502]","1499":"[12763.7314 -12163.5557 -7475.1323]","1500":"[13023.2949 -11715.1963 -7475.4556]","1501":"[13214.7021 -11235.1016 -7475.4653]","1502":"[13343.0879 -10735.6426 -7475.2813]","1503":"[13421.2012 -10226.835 -7475.2217]","1504":"[13455.8164 -9714.042 -7475.3984]","1505":"[13464.5566 -9200.7324 -7475.4507]","1506":"[13463.7666 -8687.9531 -7476.8613]","1507":"[13464.2764 -8171.5366 -7495.0713]","1508":"[13463.9258 -7657.4702 -7534.3447]","1509":"[13464.1016 -7138.3843 -7588.3877]","1510":"[13464.0537 -6625.0332 -7647.2266]","1511":"[13464.0586 -6104.7139 -7709.2988]","1512":"[13464.6084 -5593.27 -7771.6875]","1513":"[13463.252 -5078.3027 -7834.8843]","1514":"[13464.123 -4561.291 -7898.3555]","1515":"[13464.8926 -4043.8667 -7961.9458]","1516":"[13463.6016 -3527.5549 -8025.3071]","1517":"[13463.4473 -3015.1345 -8088.2168]","1518":"[13464.0518 -2490.3918 -8152.6348]","1519":"[13463.9492 -1968.8665 -8216.4531]","1520":"[13463.7227 -1450.288 -8279.0361]","1521":"[13463.3994 -935.5288 -8339.7119]","1522":"[13464.0762 -411.312 -8398.4131]","1523":"[13463.6143 108.3085 -8448.6973]","1524":"[13463.7041 636.3317 -8477.6738]","1525":"[13463.7783 1151.1967 -8487.0771]","1526":"[13462.9854 1666.7417 -8486.5518]","1527":"[13454.2773 2181.1035 -8486.0078]","1528":"[13427.6113 2693.3425 -8486.2373]","1529":"[13379.9316 3220.7195 -8486.0996]","1530":"[13310.2783 3743.9565 -8486.2236]","1531":"[13214.9453 4261.8765 -8486.3428]","1532":"[13093.1797 4772.5708 -8486.667]","1533":"[12942.2002 5273.8428 -8486.4648]","1534":"[12759.1221 5762.6943 -8485.9326]","1535":"[12543.1475 6235.9731 -8486.0684]","1536":"[12292.5664 6690.0635 -8486.2656]","1537":"[12006.4492 7120.7202 -8486.4268]","1538":"[11685.7295 7524.2568 -8486.4141]","1539":"[11332.0781 7897.166 -8486.4023]","1540":"[10947.749 8236.1299 -8486.4521]","1541":"[10522.7832 8549.5977 -8486.3125]","1542":"[10073.7578 8824.7246 -8486.3115]","1543":"[9605.1514 9062.0703 -8486.4121]","1544":"[9121.5908 9263.9785 -8486.2793]","1545":"[8626.3037 9431.4307 -8486.376]","1546":"[8122.8691 9568.25 -8486.4688]","1547":"[7613.624 9676.5664 -8486.3223]","1548":"[7100.5767 9758.8477 -8486.3975]","1549":"[6585.4629 9818.4111 -8486.415]","1550":"[6069.3169 9856.0498 -8486.4434]","1551":"[5553.2104 9875.4668 -8486.0693]","1552":"[5038.0688 9880.1035 -8486.3945]","1553":"[4523.8296 9879.5898 -8486.4229]","1554":"[4010.4822 9880.0293 -8486.3965]","1555":"[3498.0757 9879.5977 -8486.5049]","1556":"[2970.0723 9879.8193 -8486.5156]","1557":"[2443.032 9880.5762 -8486.417]","1558":"[1916.3325 9879.8477 -8486.4463]","1559":"[1395.5818 9879.166 -8486.4541]","1560":"[872.7241 9879.6338 -8486.4492]","1561":"[352.0775 9880.1416 -8486.4297]","1562":"[-167.7332 9879.7988 -8486.3486]","1563":"[-686.4269 9880.4795 -8486.4297]","1564":"[-1204.2361 9879.541 -8486.4248]","1565":"[-1721.1982 9880.3154 -8486.4502]","1566":"[-2237.3352 9879.9785 -8486.5576]","1567":"[-2752.6372 9880.1689 -8486.4238]","1568":"[-3267.1182 9879.4834 -8486.3662]","1569":"[-3780.7666 9880.4453 -8486.3262]","1570":"[-4293.5615 9879.8809 -8486.542]","1571":"[-4819.749 9880.2949 -8486.417]","1572":"[-5336.4561 9879.9121 -8486.3545]","1573":"[-5849.7578 9880.3828 -8486.4297]","1574":"[-6362.2539 9880.0898 -8486.4209]","1575":"[-6887.0815 9880.2158 -8486.4521]","1576":"[-7411.1123 9879.9502 -8486.5273]","1577":"[-7934.356 9880.3545 -8486.6445]","1578":"[-8456.7617 9879.7539 -8486.6846]","1579":"[-8978.3311 9879.1465 -8486.5586]","1580":"[-9497.627 9860.1221 -8486.1436]","1581":"[-10012.3486 9808.6572 -8486.6748]","1582":"[-10516.6016 9707.4229 -8486.3945]","1583":"[-11015.6357 9549.9873 -8486.668]","1584":"[-11484.8301 9325.376 -8486.7451]","1585":"[-11910.8604 9032.042 -8486.7109]","1586":"[-12277.21 8670.8623 -8486.6182]","1587":"[-12576.1494 8254.8838 -8486.71]","1588":"[-12807.9717 7786.0996 -8486.6875]","1589":"[-12973.1338 7291.1514 -8486.8096]","1590":"[-13078.9844 6781.3384 -8486.5752]","1591":"[-13137.0254 6264.8413 -8486.5615]","1592":"[-13156.5977 5746.186 -8486.7178]","1593":"[-13159.6719 5227.8408 -8486.7041]","1594":"[-13158.9678 4708.8696 -8494.5537]","1595":"[-13159.334 4195.6792 -8522.3691]","1596":"[-13158.9443 3681.657 -8570.3262]","1597":"[-13159.0225 3161.2312 -8627.9424]","1598":"[-13158.7842 2647.3354 -8688.2988]","1599":"[-13159.2148 2127.5203 -8751.1748]","1600":"[-13158.623 1618.2732 -8813.3564]","1601":"[-13158.5576 1106.865 -8876.2266]","1602":"[-13159.7373 594.8076 -8938.9922]","1603":"[-13159.3555 83.7128 -9001.7871]","1604":"[-13158.4434 -424.9495 -9064.2607]","1605":"[-13158.9619 -947.3679 -9128.4043]","1606":"[-13159.2793 -1465.3563 -9192.0117]","1607":"[-13158.835 -1977.521 -9254.3232]","1608":"[-13158.5615 -2501.4053 -9317.1885]","1609":"[-13158.8379 -3015.5178 -9376.6523]","1610":"[-13158.6875 -3526.4924 -9431.3018]","1611":"[-13158.3438 -4051.4058 -9475.0234]","1612":"[-13158.9336 -4571.8198 -9494.9639]","1613":"[-13158.501 -5097.8984 -9497.3242]","1614":"[-13156.2441 -5622.1787 -9497.3682]","1615":"[-13140.8809 -6145.0698 -9497.4736]","1616":"[-13105.418 -6665.6885 -9497.1074]","1617":"[-13050.8574 -7183.2656 -9497.5078]","1618":"[-12972.7451 -7696.603 -9497.459]","1619":"[-12869.4775 -8204.2285 -9497.4307]","1620":"[-12739.874 -8704.4609 -9497.3145]","1621":"[-12578.2217 -9200.0527 -9497.4053]","1622":"[-12383.6357 -9687.6172 -9497.3018]","1623":"[-12153.708 -10157.8975 -9497.418]","1624":"[-11888.3223 -10607.292 -9497.3174]","1625":"[-11587.541 -11031.8535 -9497.3086]","1626":"[-11251.6436 -11427.1143 -9497.4375]","1627":"[-10883.2363 -11790.0576 -9497.4795]","1628":"[-10485.4678 -12118.1592 -9497.3789]","1629":"[-10061.9756 -12409.9092 -9497.3984]","1630":"[-9617.2598 -12665.5469 -9497.4307]","1631":"[-9139.6689 -12892.5156 -9497.4707]","1632":"[-8648.2031 -13084.0566 -9497.3232]","1633":"[-8146.0845 -13241.8174 -9497.2725]","1634":"[-7636.6099 -13369.1963 -9497.4053]","1635":"[-7122.082 -13468.5352 -9497.5146]","1636":"[-6604.3994 -13542.7607 -9497.2822]","1637":"[-6084.9927 -13593.9902 -9497.3164]","1638":"[-5564.9927 -13624.7217 -9497.293]","1639":"[-5045.2593 -13637.5957 -9497.2373]","1640":"[-4526.2612 -13639.2607 -9497.3984]","1641":"[-4008.2109 -13638.3506 -9497.4238]","1642":"[-3491.1841 -13638.9443 -9497.3105]","1643":"[-2975.4006 -13637.9424 -9497.3486]","1644":"[-2460.6658 -13629.9492 -9497.3018]","1645":"[-1947.4445 -13604.7295 -9497.5293]","1646":"[-1421.4928 -13558.5469 -9497.4453]","1647":"[-899.1301 -13490.1924 -9497.6514]","1648":"[-381.9022 -13397.2676 -9497.4219]","1649":"[128.5427 -13277.7549 -9497.3906]","1650":"[629.7839 -13128.7744 -9497.3262]","1651":"[1119.1528 -12948.4248 -9497.4775]","1652":"[1593.568 -12735.2334 -9497.416]","1653":"[2048.9656 -12487.1699 -9497.4385]","1654":"[2481.335 -12203.6396 -9497.543]","1655":"[2887.2422 -11885.8584 -9497.3584]","1656":"[3261.8635 -11534.0176 -9497.543]","1657":"[3603.8584 -11152.3398 -9497.5166]","1658":"[3919.5095 -10729.7227 -9497.3652]","1659":"[4197.1348 -10282.8906 -9497.4297]","1660":"[4437.1396 -9816.2979 -9497.2158]","1661":"[4641.1763 -9334.1592 -9497.2656]","1662":"[4811.3501 -8840.2871 -9497.4033]","1663":"[4950.4448 -8337.9629 -9497.3418]","1664":"[5060.6631 -7829.6206 -9497.3047]","1665":"[5144.7798 -7317.3818 -9497.3965]","1666":"[5206.1221 -6802.5034 -9497.4697]","1667":"[5245.7261 -6291.3037 -9497.3223]","1668":"[5266.7183 -5763.4653 -9497.2939]","1669":"[5272.3008 -5236.1938 -9497.3838]","1670":"[5271.3423 -4710.2358 -9497.5029]","1671":"[5271.4512 -4185.2974 -9497.3701]","1672":"[5272.0884 -3661.3369 -9497.4033]","1673":"[5267.103 -3132.5642 -9497.3916]","1674":"[5248.6675 -2611.4963 -9497.3496]","1675":"[5210.3872 -2098.2683 -9497.415]","1676":"[5152.1011 -1587.9375 -9497.4199]","1677":"[5071.2324 -1081.8347 -9497.3975]","1678":"[4961.9604 -564.8321 -9497.3291]","1679":"[4823.9399 -56.1703 -9497.0596]","1680":"[4655.1797 441.0954 -9497.2402]","1681":"[4453.8149 924.5034 -9497.3096]","1682":"[4217.5542 1390.1957 -9497.3799]","1683":"[3945.8225 1834.2573 -9497.4326]","1684":"[3638.4272 2252.4846 -9497.4307]","1685":"[3297.0767 2641.395 -9497.5518]","1686":"[2923.1338 2996.9868 -9497.3291]","1687":"[2521.1501 3318.1191 -9497.4912]","1688":"[2094.1143 3602.6362 -9497.416]","1689":"[1632.045 3858.7427 -9497.4639]","1690":"[1152.6051 4077.4978 -9497.4453]","1691":"[660.0092 4261.4204 -9497.3984]","1692":"[157.5105 4412.3433 -9497.3662]","1693":"[-351.7766 4533.7539 -9497.3057]","1694":"[-865.8264 4627.5576 -9497.3301]","1695":"[-1382.7129 4696.8823 -9497.3428]","1696":"[-1901.0392 4744.4429 -9497.3086]","1697":"[-2419.8667 4771.4214 -9497.1309]","1698":"[-2938.3452 4781.3984 -9497.4053]","1699":"[-3455.7842 4781.8745 -9497.4658]","1700":"[-3972.9932 4781.4443 -9504.6934]","1701":"[-4493.6992 4782.5747 -9531.25]","1702":"[-5004.6641 4781.978 -9578.9893]","1703":"[-5526.7144 4781.9517 -9636.7715]","1704":"[-6044.4019 4782.3398 -9697.5244]","1705":"[-6557.207 4781.4946 -9759.0313]","1706":"[-7082.1221 4781.6328 -9821.8633]","1707":"[-7600.4448 4781.5078 -9882.2998]","1708":"[-8110.6782 4781.791 -9937.5352]","1709":"[-8636.083 4781.603 -9983.5811]","1710":"[-9149.0947 4782.0176 -10005.0703]","1711":"[-9672.9033 4781.9941 -10009.4336]","1712":"[-10196.3887 4777.3325 -10009.5771]","1713":"[-10716.8799 4747.7959 -10009.1904]","1714":"[-11230.3994 4678.0015 -10009.0957]","1715":"[-11732.4561 4557.6001 -10009.2324]","1716":"[-12213.5527 4378.4917 -10009.584]","1717":"[-12673.1406 4126.9312 -10009.3447]","1718":"[-13081.6221 3803.825 -10009.4961]","1719":"[-13425.8447 3416.7039 -10009.1992]","1720":"[-13698.3857 2978.5476 -10009.4072]","1721":"[-13901.0537 2505.2896 -10009.3389]","1722":"[-14040.6133 2010.8799 -10009.3174]","1723":"[-14127.4434 1505.4259 -10009.3418]","1724":"[-14170.4609 982.0922 -10009.2959]","1725":"[-14182.1494 455.6594 -10009.3115]","1726":"[-14182.6094 -71.8238 -10009.1943]","1727":"[-14180.9072 -602.3636 -10009.6162]","1728":"[-14181.5244 -1114.3761 -10009.6465]","1729":"[-14182.6914 -1644.9452 -10009.5098]","1730":"[-14181.873 -2174.3916 -10009.4717]","1731":"[-14181.2744 -2702.7388 -10009.4131]","1732":"[-14181.2344 -3227.9109 -10009.4697]","1733":"[-14181.959 -3752.9897 -10009.4316]","1734":"[-14181.3945 -4271.856 -10009.3887]","1735":"[-14177.9785 -4789.5664 -10008.8311]","1736":"[-14129.2334 -5300.3423 -10008.5977]","1737":"[-14001.8398 -5801.6489 -10009.2588]","1738":"[-13802.6914 -6285.0508 -10009.3115]","1739":"[-13542.3359 -6736.9243 -10009.3936]","1740":"[-13239.1729 -7159.8838 -10009.1113]","1741":"[-12899.5908 -7556.1558 -10009.1201]","1742":"[-12542.3799 -7928.6494 -10008.7676]","1743":"[-12176.1211 -8294.7646 -10009.0771]","1744":"[-11803.5342 -8667.3496 -10009.2227]","1745":"[-11434.0059 -9036.6133 -10009.3486]","1746":"[-11071.2412 -9400.0283 -10009.5137]","1747":"[-10708.708 -9762.0859 -10009.4785]","1748":"[-10332.0947 -10138.5879 -10009.4453]","1749":"[-9956.6953 -10514.5439 -10009.4209]","1750":"[-9581.7588 -10889.3145 -10009.4219]","1751":"[-9207.4434 -11263.0225 -10009.374]","1752":"[-8835.9756 -11635.2158 -10009.4189]","1753":"[-8469.3887 -12001.4512 -10009.4072]","1754":"[-8096.5332 -12374.2549 -10009.3223]","1755":"[-7728.2056 -12742.7021 -10009.3613]","1756":"[-7361.9258 -13108.5674 -10009.4697]","1757":"[-6994.6294 -13476.4453 -10009.5693]","1758":"[-6625.7036 -13845.1191 -10009.0859]","1759":"[-6247.5732 -14202.5986 -10009.3301]","1760":"[-5836.3984 -14512.6016 -10009.165]","1761":"[-5375.1133 -14757.4023 -10009.4902]","1762":"[-4886.0767 -14936.1855 -10009.4658]","1763":"[-4380.2285 -15053.0732 -10009.4473]","1764":"[-3867.2646 -15122.6836 -10009.3105]","1765":"[-3346.0247 -15151.4658 -10009.4512]","1766":"[-2833.0898 -15157.2188 -10009.4424]","1767":"[-2311.6973 -15156.5029 -10009.4971]","1768":"[-1795.4424 -15156.4199 -10009.4795]","1769":"[-1279.4337 -15156.4922 -10009.4697]","1770":"[-764.9032 -15156.8213 -10009.5039]","1771":"[-250.6963 -15156.5049 -10009.5371]","1772":"[274.0852 -15156.2441 -10009.4941]","1773":"[800.9784 -15157.167 -10009.3252]","1774":"[1329.6171 -15156.7188 -10008.9189]","1775":"[1856.5983 -15157.0234 -10009.25]","1776":"[2382.0527 -15156.7686 -10009.6631]","1777":"[2906.5186 -15156.4092 -10009.4629]","1778":"[3421.019 -15156.2832 -10009.46]","1779":"[3941.9067 -15156.7461 -10009.46]","1780":"[4461.8325 -15156.8076 -10009.4541]","1781":"[4980.8032 -15156.0742 -10009.4033]","1782":"[5498.8276 -15156.626 -10009.4492]","1783":"[6015.9009 -15157.2734 -10009.5098]","1784":"[6532.0474 -15156.0273 -10009.5205]","1785":"[7047.2412 -15156.8008 -10009.501]","1786":"[7563.5229 -15154.3662 -10009.4629]","1787":"[8079.4224 -15138.5664 -10009.4824]","1788":"[8598.3193 -15105.2783 -10009.4258]","1789":"[9117.4844 -15050.5195 -10009.3447]","1790":"[9627.5762 -14973.3594 -10009.3047]","1791":"[10142.5156 -14870.0625 -10009.249]","1792":"[10649.4766 -14738.2354 -10009.4326]","1793":"[11146.3057 -14576.8682 -10009.291]","1794":"[11629.8965 -14383.4453 -10009.2402]","1795":"[12096.5283 -14155.5469 -10009.4287]","1796":"[12543.0254 -13893.4053 -10009.4424]","1797":"[12964.6924 -13595.7686 -10009.4258]","1798":"[13357.7441 -13263.7607 -10009.2773]","1799":"[13718.9014 -12899.4824 -10009.4775]","1800":"[14057.4766 -12491.292 -10009.2744]","1801":"[14357.7578 -12056.0771 -10009.3145]","1802":"[14614.0176 -11609.0137 -10009.3809]","1803":"[14837.9277 -11138.8486 -10009.2344]","1804":"[15026.0186 -10654.6152 -10009.2021]","1805":"[15182.2324 -10160.4688 -10009.2764]","1806":"[15308.6094 -9659.084 -10009.4404]","1807":"[15407.6436 -9152.7656 -10009.3701]","1808":"[15482.3379 -8643.4287 -10009.2813]","1809":"[15534.7988 -8132.4575 -10009.3125]","1810":"[15566.8691 -7620.876 -10009.3604]","1811":"[15581.3027 -7090.7866 -10009.3174]","1812":"[15583.208 -6565.2236 -10009.2617]","1813":"[15582.5938 -6044.9917 -10009.1533]","1814":"[15583.1826 -5524.7539 -10008.999]","1815":"[15583.5225 -5007.7827 -10009.501]","1816":"[15582.9141 -4489.334 -10009.543]","1817":"[15582.1592 -3954.5566 -10009.4395]","1818":"[15582.8154 -3428.408 -10009.4648]","1819":"[15583.7695 -2912.0769 -10009.4482]","1820":"[15583.8496 -2379.5232 -10009.4453]","1821":"[15582.915 -1859.1539 -10009.377]","1822":"[15582.4375 -1346.2402 -10009.3711]","1823":"[15582.6943 -813.3914 -10009.5039]","1824":"[15583.4707 -300.7653 -10009.498]","1825":"[15583.5449 212.3167 -10009.4658]","1826":"[15582.793 753.9894 -10009.4854]","1827":"[15582.5547 1294.0641 -10009.46]","1828":"[15582.8711 1832.564 -10009.4609]","1829":"[15583.3857 2369.4944 -10009.4824]","1830":"[15583.4629 2899.426 -10009.4424]","1831":"[15582.8779 3435.4851 -10009.3535]","1832":"[15582.2324 3964.4832 -10009.5684]","1833":"[15582.5654 4477.9434 -10009.54]","1834":"[15583.2549 4992.6001 -10009.4775]","1835":"[15583.6523 5510.5806 -10009.4668]","1836":"[15583.3418 6023.7637 -10009.4561]","1837":"[15582.3457 6543.9629 -10009.4678]","1838":"[15582.7012 7066.0479 -10009.5303]","1839":"[15580.0146 7587.0767 -10009.3496]","1840":"[15562.9463 8106.6523 -10009.3213]","1841":"[15527.0947 8624.0254 -10008.9482]","1842":"[15470.6436 9137.6855 -10009.6094]","1843":"[15392.3115 9647.0869 -10009.3682]","1844":"[15288.543 10150.6113 -10009.2676]","1845":"[15158.5938 10646.7471 -10009.3896]","1846":"[14993.4502 11150.0967 -10009.2393]","1847":"[14794.6943 11639.543 -10009.0811]","1848":"[14561.5283 12111.7773 -10009.0693]","1849":"[14292.1953 12562.4756 -10009.3779]","1850":"[13986.5029 12987.2871 -10009.4824]","1851":"[13645.877 13382.5254 -10009.4668]","1852":"[13272.5557 13744.7705 -10009.3418]","1853":"[12869.6592 14071.3682 -10009.4033]","1854":"[12441.2363 14361.0273 -10009.4033]","1855":"[11992.0322 14614.499 -10009.4297]","1856":"[11525.9365 14832.332 -10009.3936]","1857":"[11046.665 15016.082 -10009.2344]","1858":"[10557.7637 15168.6787 -10009.3418]","1859":"[10044.6816 15296.0752 -10009.2793]","1860":"[9526.5254 15395.0781 -10009.252]","1861":"[9005.2559 15468.5791 -10009.3418]","1862":"[8482.3535 15519.3135 -10009.3408]","1863":"[7965.0166 15549.3564 -10009.2393]","1864":"[7442.1191 15561.3125 -10009.1973]","1865":"[6916.1587 15562.1953 -10009.0039]","1866":"[6401.2749 15561.4043 -10009.2715]","1867":"[5877.5825 15562.1416 -10009.335]","1868":"[5353.8188 15562.4189 -10009.4619]","1869":"[4832.8013 15561.9473 -10009.4541]","1870":"[4318.8101 15561.6748 -10009.4287]","1871":"[3787.7891 15561.9609 -10009.4688]","1872":"[3258.176 15562.3232 -10009.4492]","1873":"[2742.6741 15562.3604 -10009.4453]","1874":"[2211.3362 15562.3506 -10009.3809]","1875":"[1697.5751 15562.1387 -10009.377]","1876":"[1171.5321 15561.7148 -10009.4902]","1877":"[646.9715 15561.8896 -10009.4932]","1878":"[123.8849 15562.4668 -10009.5127]","1879":"[-397.7498 15562.1992 -10009.5059]","1880":"[-917.9423 15561.6553 -10009.4863]","1881":"[-1436.7009 15561.5498 -10009.4746]","1882":"[-1954.0376 15562.2002 -10009.4912]","1883":"[-2469.9646 15562.6611 -10009.3564]","1884":"[-2984.4661 15562.4629 -10009.2598]","1885":"[-3497.6226 15561.6055 -10009.6367]","1886":"[-4037.7825 15561.4414 -10009.4746]","1887":"[-4576.4116 15562.0205 -10009.458]","1888":"[-5113.3984 15562.4404 -10009.4873]","1889":"[-5648.1089 15562.4893 -10009.4697]","1890":"[-6176.2451 15562.1064 -10009.4492]","1891":"[-6689.3315 15561.7637 -10009.1777]","1892":"[-7206.4048 15561.791 -10009.3936]","1893":"[-7719.2305 15561.6416 -10009.4727]","1894":"[-8239.1064 15557.5322 -10009.377]","1895":"[-8757.583 15538.8477 -10009.2598]","1896":"[-9276.5771 15500.4629 -10009.5059]","1897":"[-9799.5156 15441.0811 -10009.6816]","1898":"[-10317.7939 15357.4229 -10009.4004]","1899":"[-10829.8594 15247.5488 -10009.4561]","1900":"[-11334.0059 15110.6191 -10009.0391]","1901":"[-11826.6592 14942.6338 -10009.2266]","1902":"[-12305.3467 14742.6553 -10009.5449]","1903":"[-12766.4033 14508.5938 -10009.3076]","1904":"[-13206.4307 14239.9619 -10009.4775]","1905":"[-13621.0664 13936.3193 -10009.4688]","1906":"[-14006.7617 13599.0342 -10009.459]","1907":"[-14371.8477 13217.7236 -10009.3848]","1908":"[-14699.8301 12805.9766 -10009.4229]","1909":"[-14990.3965 12368.8232 -10009.3936]","1910":"[-15242.8838 11910.167 -10009.4834]","1911":"[-15458.9541 11434.6387 -10009.4775]","1912":"[-15640.7139 10946.2354 -10009.4102]","1913":"[-15790.5664 10448.3213 -10009.373]","1914":"[-15910.6201 9943.5088 -10009.4385]","1915":"[-16003.959 9434.0938 -10009.4775]","1916":"[-16073.7773 8921.9775 -10009.3623]","1917":"[-16120.9355 8408.2637 -10009.2363]","1918":"[-16148.5244 7894.1304 -10009.4814]","1919":"[-16158.9414 7380.5542 -10009.5488]","1920":"[-16159.8848 6868.0635 -10009.3906]","1921":"[-16159.5898 6355.9614 -10015.5381]","1922":"[-16160.3799 5840.8901 -10039.9854]","1923":"[-16160.1104 5319.9468 -10087.293]","1924":"[-16159.6709 4805.6016 -10143.8594]","1925":"[-16160.3242 4296.8721 -10203.3564]","1926":"[-16159.584 3787.47 -10264.502]","1927":"[-16159.5986 3272.8352 -10326.1963]","1928":"[-16159.9004 2751.906 -10387.1025]","1929":"[-16159.3877 2237.4314 -10443.4824]","1930":"[-16159.9082 1711.3013 -10491.625]","1931":"[-16159.9473 1195.7529 -10515.5645]","1932":"[-16159.9961 676.2723 -10521.71]","1933":"[-16160.1016 156.9258 -10521.4707]","1934":"[-16160.5645 -361.4345 -10521.416]","1935":"[-16160.1914 -878.8145 -10521.502]","1936":"[-16159.668 -1395.2433 -10521.4805]","1937":"[-16159.6963 -1910.7208 -10521.4678]","1938":"[-16159.9434 -2425.2363 -10521.4629]","1939":"[-16160.4873 -2938.7959 -10521.54]","1940":"[-16160.3545 -3458.2219 -10521.4355]","1941":"[-16159.2324 -3984.4888 -10521.4102]","1942":"[-16160.2861 -4509.7354 -10521.3848]","1943":"[-16161.041 -5033.9229 -10521.4414]","1944":"[-16159.1846 -5557.0781 -10521.4609]","1945":"[-16159.7061 -6079.2056 -10521.4648]","1946":"[-16160.6797 -6602.8042 -10521.4482]","1947":"[-16159.4746 -7114.9478 -10521.3857]","1948":"[-16159.6465 -7642.6821 -10521.5156]","1949":"[-16157.2793 -8168.7886 -10521.2432]","1950":"[-16140.7998 -8693.5518 -10521.2783]","1951":"[-16105.9785 -9216.3428 -10521.4277]","1952":"[-16049.4678 -9736.1475 -10521.3457]","1953":"[-15970.9775 -10251.9189 -10521.3906]","1954":"[-15866.4258 -10761.832 -10521.4531]","1955":"[-15734.8809 -11263.6729 -10521.3486]","1956":"[-15574.0068 -11755.5645 -10521.5029]","1957":"[-15380.7168 -12234.1533 -10521.4268]","1958":"[-15155.0703 -12696.9014 -10521.3877]","1959":"[-14894.2881 -13139.0879 -10521.499]","1960":"[-14589.7363 -13570.2275 -10521.4707]","1961":"[-14248.7656 -13971.0811 -10521.4102]","1962":"[-13874.5205 -14338.8066 -10521.4639]","1963":"[-13469.9502 -14670.459 -10521.4746]","1964":"[-13039.3379 -14965.0684 -10521.3311]","1965":"[-12586.8428 -15222.0342 -10521.4824]","1966":"[-12117.1396 -15443.1299 -10521.4043]","1967":"[-11633.9834 -15629.7881 -10521.4639]","1968":"[-11140.5527 -15783.8389 -10521.5654]","1969":"[-10640.2334 -15909.4639 -10521.3594]","1970":"[-10134.7139 -16006.9365 -10521.4971]","1971":"[-9626.1963 -16080.7285 -10521.374]","1972":"[-9115.9385 -16132.3799 -10521.458]","1973":"[-8595.3584 -16164.2393 -10521.2949]","1974":"[-8076.5459 -16178.3701 -10521.3291]","1975":"[-7560.5049 -16180.1221 -10521.4668]","1976":"[-7043.083 -16179.6533 -10521.3408]","1977":"[-6505.8057 -16179.9873 -10521.4063]","1978":"[-5993.6963 -16179.9902 -10521.5371]","1979":"[-5467.6558 -16180.0508 -10521.4912]","1980":"[-4934.6045 -16180.1465 -10521.3398]","1981":"[-4401.0112 -16180.1729 -10521.5439]","1982":"[-3874.158 -16179.9512 -10521.4482]","1983":"[-3342.0144 -16179.8154 -10521.4902]","1984":"[-2811.5989 -16179.8457 -10521.333]","1985":"[-2282.821 -16180.1045 -10521.4023]","1986":"[-1755.7665 -16180.3506 -10521.4102]","1987":"[-1230.2859 -16180.3506 -10521.5]","1988":"[-706.4827 -16180.1982 -10521.4814]","1989":"[-185.508 -16180.1631 -10521.5137]","1990":"[344.4918 -16180.1904 -10521.4971]","1991":"[870.4059 -16180.0967 -10521.4756]","1992":"[1385.7727 -16180.2803 -10521.4531]","1993":"[1908.7559 -16180.4072 -10521.3809]","1994":"[2424.0798 -16179.5098 -10521.377]","1995":"[2952.6609 -16179.6602 -10521.3711]","1996":"[3470.0044 -16180.749 -10521.4561]","1997":"[3994.998 -16180.0596 -10521.4717]","1998":"[4519.1528 -16179.7852 -10521.4609]","1999":"[5042.4531 -16179.7598 -10521.4121]","2000":"[5564.9077 -16180.2734 -10521.3994]","2001":"[6086.5024 -16180.2568 -10521.5742]","2002":"[6606.6392 -16171.4902 -10521.5967]","2003":"[7122.8647 -16133.6738 -10521.6084]","2004":"[7630.498 -16052.2559 -10521.5361]","2005":"[8132.1631 -15917.9814 -10521.1973]","2006":"[8606.1533 -15724.2529 -10521.2354]","2007":"[9054.0068 -15456.5625 -10521.3086]","2008":"[9447.6572 -15119.0547 -10521.4307]","2009":"[9774.9482 -14720.2129 -10521.208]","2010":"[10030.7148 -14274.2305 -10521.4229]","2011":"[10218.4619 -13796.9443 -10521.4248]","2012":"[10347.5898 -13288.4717 -10521.4131]","2013":"[10424.4102 -12770.5566 -10521.1416]","2014":"[10457.292 -12248.9043 -10521.291]","2015":"[10464.4424 -11726.8789 -10521.4551]","2016":"[10463.1641 -11205.623 -10521.3584]","2017":"[10446.8623 -10686.0293 -10521.2695]","2018":"[10397.6025 -10170.9111 -10521.1738]","2019":"[10303.1367 -9664.873 -10521.5703]","2020":"[10155.834 -9174.0537 -10521.2598]","2021":"[9942.1787 -8697.4746 -10521.4316]","2022":"[9659.5449 -8261.9658 -10521.376]","2023":"[9318.959 -7871.1113 -10521.2764]","2024":"[8954.7402 -7502.4028 -10521.5049]","2025":"[8587.5098 -7137.8462 -10521.4551]","2026":"[8223.7725 -6770.9688 -10521.5234]","2027":"[7857.4243 -6407.8359 -10521.4766]","2028":"[7494.3608 -6042.5562 -10521.4521]","2029":"[7130.5396 -5679.1631 -10521.4512]","2030":"[6767.0181 -5316.5415 -10521.4336]","2031":"[6404.9219 -4953.5684 -10521.4434]","2032":"[6032.0078 -4585.4248 -10521.4961]","2033":"[5644.583 -4235.29 -10521.3818]","2034":"[5234.6807 -3916.22 -10521.4971]","2035":"[4798.4033 -3638.9797 -10521.2813]","2036":"[4335.5391 -3414.7896 -10521.5684]","2037":"[3837.5068 -3253.7671 -10521.1768]","2038":"[3323.1592 -3174.6953 -10521.3955]","2039":"[2802.8616 -3153.3816 -10521.3516]","2040":"[2282.9741 -3156.2197 -10521.4316]","2041":"[1763.9423 -3153.8374 -10521.4414]","2042":"[1245.7291 -3155.3171 -10521.5059]","2043":"[728.3021 -3155.1724 -10521.4727]","2044":"[211.6475 -3154.6909 -10521.4629]","2045":"[-304.2541 -3154.9851 -10521.457]","2046":"[-819.3886 -3154.8445 -10521.3525]","2047":"[-1332.8981 -3137.3931 -10521.2764]","2048":"[-1853.688 -3088.9565 -10521.0898]","2049":"[-2364.6958 -2992.3169 -10521.4111]","2050":"[-2860.4385 -2843.5486 -10521.3838]","2051":"[-3329.8701 -2632.0327 -10521.4043]","2052":"[-3768.2405 -2346.835 -10521.1807]","2053":"[-4160.8633 -2004.2307 -10520.877]","2054":"[-4530.1436 -1639.6887 -10520.6641]","2055":"[-4895.1768 -1274.0845 -10520.4131]","2056":"[-5259.3726 -909.4534 -10520.4238]","2057":"[-5623.6611 -546.0554 -10520.4492]","2058":"[-5986.4302 -182.2427 -10520.3115]","2059":"[-6356.2314 186.2866 -10520.4287]","2060":"[-6721.5752 553.153 -10520.3506]","2061":"[-7087.8052 917.9826 -10520.3652]","2062":"[-7452.2407 1283.5192 -10520.3105]","2063":"[-7817.0747 1647.5535 -10520.4688]","2064":"[-8180.3608 2012.0377 -10520.5449]","2065":"[-8544.3369 2374.7048 -10520.502]","2066":"[-8908.668 2739.8218 -10520.3818]","2067":"[-9278.3213 3108.9607 -10520.5859]","2068":"[-9646.8584 3478.0645 -10520.8936]","2069":"[-10006.2061 3854.229 -10520.7949]","2070":"[-10342.7764 4247.4556 -10521.1084]","2071":"[-10641.5146 4666.2773 -10521.4658]","2072":"[-10900.8672 5121.1504 -10520.998]","2073":"[-11098.957 5602.3057 -10521.4541]","2074":"[-11223.1006 6104.4185 -10521.1064]","2075":"[-11265.334 6617.2637 -10521.1504]","2076":"[-11248.2529 7130.54 -10521.2031]","2077":"[-11179.4561 7647.4082 -10521.4121]","2078":"[-11065.0186 8152.4917 -10521.1367]","2079":"[-10891.9746 8636.7539 -10521.4463]","2080":"[-10646.8545 9098.1563 -10521.1855]","2081":"[-10332.8008 9511.5586 -10521.4395]","2082":"[-9961.6592 9854.0986 -10521.373]","2083":"[-9531.2861 10134.877 -10521.4658]","2084":"[-9064.5762 10345.502 -10521.251]","2085":"[-8564.8398 10494.7822 -10521.5605]","2086":"[-8053.0757 10588.8672 -10521.375]","2087":"[-7536.4131 10636.2666 -10521.2354]","2088":"[-7018.853 10649.7881 -10521.3398]","2089":"[-6502.5913 10652.0947 -10521.3662]","2090":"[-5987.6816 10651.7422 -10521.1787]","2091":"[-5473.7891 10651.501 -10521.4717]","2092":"[-4960.7256 10651.8574 -10521.4355]","2093":"[-4438.0771 10651.0137 -10521.5537]","2094":"[-3916.4709 10651.3691 -10521.4404]","2095":"[-3400.8247 10650.9053 -10521.374]","2096":"[-2887.2959 10651.1152 -10521.5]","2097":"[-2360.7095 10650.7129 -10521.3623]","2098":"[-1841.7316 10651.4082 -10521.4619]","2099":"[-1315.1559 10651.2988 -10521.4658]","2100":"[-791.4565 10651.1035 -10521.4717]","2101":"[-268.3696 10650.6758 -10521.4609]","2102":"[253.7243 10650.9912 -10521.4297]","2103":"[774.8307 10651.5117 -10521.46]","2104":"[1294.942 10651 -10521.5088]","2105":"[1814.0677 10650.3203 -10521.5029]","2106":"[2332.2163 10651.2109 -10521.501]","2107":"[2849.3896 10651.4082 -10521.4951]","2108":"[3365.595 10650.5898 -10521.4648]","2109":"[3880.8372 10650.293 -10521.457]","2110":"[4395.1206 10650.7529 -10521.3457]","2111":"[4908.4834 10651.1299 -10521.4541]","2112":"[5420.8301 10650.6445 -10521.4102]","2113":"[5949.3892 10650.8379 -10521.124]","2114":"[6476.5117 10645.4082 -10521.1094]","2115":"[7001.9604 10623.6973 -10521.416]","2116":"[7524.0464 10582.0469 -10521.5176]","2117":"[8049.1523 10518.6494 -10521.1572]","2118":"[8568.1221 10430.583 -10521.1982]","2119":"[9080.1045 10316.2314 -10521.6641]","2120":"[9583.3301 10173.3525 -10521.5322]","2121":"[10075.1689 9999.6455 -10521.5293]","2122":"[10552.5732 9793.3105 -10521.3936]","2123":"[11011.6602 9552.3604 -10521.3955]","2124":"[11448.4971 9276.1563 -10521.2363]","2125":"[11859.5381 8965.5703 -10521.376]","2126":"[12240.2002 8620.8271 -10521.3291]","2127":"[12600.5508 8230.9541 -10521.2305]","2128":"[12923.5371 7811.6641 -10521.3408]","2129":"[13207.8066 7367.1655 -10521.4395]","2130":"[13453.7568 6901.9961 -10521.3418]","2131":"[13663.7217 6420.9722 -10521.3701]","2132":"[13839.2002 5927.7427 -10521.2314]","2133":"[13982.5215 5425.499 -10521.3477]","2134":"[14097.3496 4917.1958 -10521.1992]","2135":"[14185.2744 4404.7256 -10521.3945]","2136":"[14249.4424 3889.8479 -10521.3887]","2137":"[14292.1064 3373.7966 -10521.3926]","2138":"[14315.5225 2857.6738 -10521.4609]","2139":"[14321.9336 2341.45 -10531.8525]","2140":"[14321.9834 1822.7731 -10561.458]","2141":"[14321.6289 1299.2402 -10613.041]","2142":"[14321.9795 785.9275 -10670.8975]","2143":"[14322.2227 266.6541 -10732.2822]","2144":"[14321.6553 -253.1082 -10795.5195]","2145":"[14322.0283 -763.666 -10857.9785]","2146":"[14321.7227 -1290.3038 -10922.6045]","2147":"[14321.6475 -1818.0719 -10987.3721]","2148":"[14322.4043 -2336.4443 -11051.041]","2149":"[14322.0342 -2862.6631 -11115.6455]","2150":"[14321.6992 -3375.238 -11178.582]","2151":"[14321.7637 -3897.0229 -11242.6152]","2152":"[14322.002 -4416.3584 -11305.6855]","2153":"[14322.6523 -4945.2427 -11368.5098]","2154":"[14322.123 -5462.7432 -11427.583]","2155":"[14321.9443 -5990.3726 -11481.5957]","2156":"[14322.6553 -6521.4736 -11518.207]","2157":"[14317.8799 -7034.2881 -11532.2148]","2158":"[14297.3223 -7558.1274 -11532.0088]","2159":"[14257.2988 -8077.2422 -11532.3857]","2160":"[14196.6738 -8592.9346 -11532.4863]","2161":"[14112.7178 -9104.0508 -11532.3867]","2162":"[14003.1074 -9608.959 -11532.376]","2163":"[13866.9365 -10105.9102 -11532.2451]","2164":"[13700.2246 -10591.9082 -11532.334]","2165":"[13502.3467 -11064.5176 -11532.2969]","2166":"[13262.3096 -11536.7305 -11532.3506]","2167":"[12985.4131 -11986.374 -11532.3535]","2168":"[12672.1738 -12409.3604 -11532.2383]","2169":"[12323.7793 -12801.6084 -11532.21]","2170":"[11942.626 -13159.6924 -11532.3418]","2171":"[11532.501 -13481.7637 -11532.4834]","2172":"[11097.4971 -13766.6367 -11532.3076]","2173":"[10641.8252 -14014.1768 -11532.4258]","2174":"[10170.1035 -14226.3936 -11532.2988]","2175":"[9685.8662 -14404.6729 -11532.4336]","2176":"[9192.4033 -14551.5078 -11532.3408]","2177":"[8692.5732 -14670.0615 -11532.3154]","2178":"[8188.2866 -14762.0586 -11532.4463]","2179":"[7663.1699 -14832.2969 -11532.3662]","2180":"[7136.6323 -14880.0703 -11532.2324]","2181":"[6609.6987 -14906.8711 -11532.2988]","2182":"[6083.1851 -14915.6729 -11532.4395]","2183":"[5557.8545 -14915.8311 -11533.1279]","2184":"[5031.2251 -14914.9756 -11552.1826]","2185":"[4519.6855 -14916.3418 -11592.4453]","2186":"[4000.9604 -14916.0225 -11646.6875]","2187":"[3491.5452 -14915.6318 -11705.1211]","2188":"[2977.8972 -14915.9834 -11766.4072]","2189":"[2461.5313 -14915.7949 -11829.3027]","2190":"[1934.5029 -14915.667 -11894.1514]","2191":"[1416.7836 -14916.249 -11957.6309]","2192":"[898.1903 -14916.2383 -12021.3809]","2193":"[370.417 -14915.5137 -12086.1416]","2194":"[-141.4404 -14915.6455 -12148.9707]","2195":"[-657.8857 -14916.0088 -12212.374]","2196":"[-1176.6321 -14916.0752 -12275.9756]","2197":"[-1701.4332 -14915.6963 -12340.5098]","2198":"[-2214.9006 -14915.834 -12403.543]","2199":"[-2732.7378 -14916.123 -12467.0254]","2200":"[-3241.1042 -14916.0146 -12529.4277]","2201":"[-3764.5461 -14915.623 -12593.8789]","2202":"[-4289.5869 -14916.4443 -12657.9648]","2203":"[-4814.5791 -14916.4453 -12721.2041]","2204":"[-5336.9883 -14916.209 -12782.3818]","2205":"[-5862.5308 -14916.6279 -12839.873]","2206":"[-6384.9717 -14916.4854 -12887.2197]","2207":"[-6909.3657 -14914.9111 -12910.8477]","2208":"[-7436.7808 -14904.0605 -12916.209]","2209":"[-7962.7227 -14873.5381 -12916.2451]","2210":"[-8485.0264 -14821.459 -12916.1016]","2211":"[-9003.2275 -14748.8818 -12916.2773]","2212":"[-9514.7363 -14650.0068 -12916.1006]","2213":"[-10018.8262 -14525.6104 -12916.3359]","2214":"[-10513.3086 -14372.0244 -12916.4102]","2215":"[-10995.168 -14186.5586 -12916.4473]","2216":"[-11461.5088 -13969.1436 -12916.4404]","2217":"[-11908.1221 -13717.2031 -12916.3652]","2218":"[-12346.7637 -13419.7256 -12916.2803]","2219":"[-12756.207 -13086.2568 -12916.6045]","2220":"[-13131.8027 -12718.0801 -12916.6338]","2221":"[-13472.5654 -12319.6357 -12916.4141]","2222":"[-13775.7129 -11893.7676 -12916.3408]","2223":"[-14041.0195 -11444.9648 -12916.4287]","2224":"[-14270.5654 -10978.4209 -12916.373]","2225":"[-14464.249 -10497.3174 -12916.3857]","2226":"[-14625.4385 -10005.6797 -12916.2578]","2227":"[-14756.7314 -9506.4434 -12916.2422]","2228":"[-14860.0137 -9001.7842 -12916.4717]","2229":"[-14938.7227 -8493.8418 -12916.4717]","2230":"[-14994.9697 -7983.9644 -12916.3154]","2231":"[-15031.0908 -7454.9712 -12916.1719]","2232":"[-15048.8223 -6926.082 -12917.1309]","2233":"[-15051.7002 -6413.9302 -12935.3848]","2234":"[-15050.4072 -5899.2222 -12974.7344]","2235":"[-15051.2568 -5377.4956 -13028.9688]","2236":"[-15051.166 -4865.2852 -13087.6895]","2237":"[-15050.793 -4343.127 -13150.0801]","2238":"[-15051.1963 -3831.1885 -13212.4463]","2239":"[-15050.9424 -3312.8728 -13276.1328]","2240":"[-15050.958 -2796.4082 -13339.6172]","2241":"[-15050.9229 -2279.3979 -13402.9561]","2242":"[-15051.1416 -1755.0786 -13467.3477]","2243":"[-15050.8584 -1243.5985 -13530.1426]","2244":"[-15050.7529 -729.7975 -13593.2324]","2245":"[-15050.835 -204.796 -13657.6514]","2246":"[-15050.9053 312.557 -13721.1885]","2247":"[-15051.1426 834.3349 -13785.2227]","2248":"[-15051.002 1352.9409 -13849.001]","2249":"[-15050.8936 1862.4641 -13911.4648]","2250":"[-15050.8564 2372.8635 -13974.1191]","2251":"[-15051.2959 2889.3726 -14037.2549]","2252":"[-15051.4043 3412.6453 -14100.3887]","2253":"[-15051.2686 3936.7153 -14161.9893]","2254":"[-15051.3936 4451.0684 -14218.7773]","2255":"[-15051.3145 4974.0728 -14267.5918]","2256":"[-15050.8242 5502.4614 -14293.7451]","2257":"[-15040.4404 6033.7983 -14300.3525]","2258":"[-15011.7881 6552.6484 -14300.6084]","2259":"[-14964.3955 7062.8945 -14300.3672]","2260":"[-14892.3877 7588.1597 -14300.4668]","2261":"[-14795.6143 8107.7612 -14300.4658]","2262":"[-14671.3438 8620.0107 -14300.2793]","2263":"[-14517.2275 9122.5303 -14300.375]","2264":"[-14331.4492 9612.5781 -14300.2666]","2265":"[-14111.4863 10086.5059 -14300.2861]","2266":"[-13856.6309 10540.542 -14300.2598]","2267":"[-13566.3906 10970.7861 -14300.2725]","2268":"[-13241.0762 11373.0342 -14300.0439]","2269":"[-12883.084 11743.8887 -14300.3154]","2270":"[-12494.5527 12080.3047 -14300.4258]","2271":"[-12080.0391 12381.6211 -14300.3428]","2272":"[-11626.2705 12655.4033 -14300.3643]","2273":"[-11153.4961 12891.7012 -14300.4482]","2274":"[-10665.6279 13091.4619 -14300.332]","2275":"[-10179.4873 13252.8291 -14300.3584]","2276":"[-9674.2715 13387.0479 -14300.3477]","2277":"[-9163.8828 13493.9033 -14300.3896]","2278":"[-8647.9561 13574.8525 -14300.3955]","2279":"[-8126.0498 13632.0273 -14300.417]","2280":"[-7602.4673 13669.2119 -14300.2861]","2281":"[-7079.6367 13686.4814 -14300.3242]","2282":"[-6557.2876 13690.3428 -14300.3545]","2283":"[-6036.1255 13690.2295 -14300.2871]","2284":"[-5516.0728 13689.5508 -14300.3965]","2285":"[-4996.8667 13690.2744 -14300.4668]","2286":"[-4478.4805 13689.8955 -14300.3887]","2287":"[-3960.8943 13689.9277 -14300.4229]","2288":"[-3444.1292 13690.0166 -14300.2402]","2289":"[-2928.1521 13690.041 -14300.4336]","2290":"[-2412.9844 13689.8965 -14300.335]","2291":"[-1898.6128 13689.6816 -14300.4385]","2292":"[-1385.0635 13690.4316 -14300.2979]","2293":"[-872.3052 13689.5342 -14300.4395]","2294":"[-346.8901 13690.2383 -14300.5098]","2295":"[177.7081 13689.8467 -14300.5039]","2296":"[701.4755 13690.1289 -14300.3936]","2297":"[1224.3888 13689.7334 -14300.5029]","2298":"[1742.4763 13690.0947 -14300.4082]","2299":"[2266.5566 13689.8066 -14300.499]","2300":"[2781.5112 13690.1475 -14300.4629]","2301":"[3299.4363 13689.957 -14300.459]","2302":"[3818.6729 13690.6523 -14300.4121]","2303":"[4331.02 13688.9785 -14300.4395]","2304":"[4843.7686 13689.7998 -14300.4531]","2305":"[5373.7881 13690.8457 -14300.4424]","2306":"[5891.6084 13689.873 -14300.2148]","2307":"[6412.8535 13689.5498 -14300.248]","2308":"[6937.3086 13690.54 -14300.3545]","2309":"[7462.3389 13683.5449 -14301.04]","2310":"[7985.7886 13660.5654 -14301.8799]","2311":"[8506.5742 13617.5273 -14303.1006]","2312":"[9027.123 13552.6123 -14303.9756]","2313":"[9547.751 13461.4521 -14305.1465]","2314":"[10061.4443 13343.543 -14305.6719]","2315":"[10565.998 13196.2979 -14306.375]","2316":"[11058.4414 13016.3994 -14307.1182]","2317":"[11535.7305 12802.9023 -14307.6338]","2318":"[11993.3643 12552.9541 -14308.0576]","2319":"[12428.6514 12267.0547 -14308.542]","2320":"[12833.4258 11946.8018 -14308.4414]","2321":"[13205.9707 11591.8965 -14308.375]","2322":"[13544.2236 11206.4746 -14308.6201]","2323":"[13856.2324 10777.9043 -14308.3525]","2324":"[14129.0557 10325.2598 -14307.8633]","2325":"[14363.4424 9853.2148 -14307.3926]","2326":"[14560.5137 9366.1338 -14306.916]","2327":"[14723.7549 8868.2588 -14306.0596]","2328":"[14855.5908 8362.749 -14305.3301]","2329":"[14958.7539 7851.9565 -14304.5029]","2330":"[15036.585 7335.4541 -14303.6553]","2331":"[15091.0322 6821.3833 -14302.498]","2332":"[15124.1416 6307.6177 -14301.5264]","2333":"[15138.7217 5795.4023 -14300.3105]","2334":"[15141.2881 5266.5752 -14300.0635]","2335":"[15140.7861 4739.3838 -14300.2227]","2336":"[15141.0732 4213.2612 -14300.3564]","2337":"[15141.2314 3698.5623 -14300.3145]","2338":"[15140.375 3180.7405 -14300.457]","2339":"[15141.0059 2655.9866 -14300.3564]","2340":"[15141.3848 2132.3259 -14300.4355]","2341":"[15140.541 1602.3959 -14300.4434]","2342":"[15140.9531 1087.094 -14300.2744]","2343":"[15141.3652 572.8551 -14300.293]","2344":"[15140.5264 59.6979 -14300.3184]","2345":"[15140.8682 -452.3892 -14300.3252]","2346":"[15141.3096 -983.0637 -14300.3027]","2347":"[15140.4434 -1512.6371 -14300.3281]","2348":"[15140.9834 -2041.0608 -14300.2441]","2349":"[15141.0215 -2569.0825 -14306.4326]","2350":"[15140.5098 -3099.105 -14333.0596]","2351":"[15140.7969 -3612.6733 -14381.2617]","2352":"[15141.1699 -4133.2944 -14438.7725]","2353":"[15140.8115 -4642.0376 -14498.4268]","2354":"[15141.1445 -5159.0151 -14560.5283]","2355":"[15141.6533 -5684.6665 -14623.4814]","2356":"[15140.9668 -6195.6372 -14682.9131]","2357":"[15141.5332 -6714.8413 -14739.5156]","2358":"[15141.6123 -7243.7061 -14786.1914]","2359":"[15139.9199 -7765.3354 -14808.3467]","2360":"[15127.334 -8290.0215 -14813.2861]","2361":"[15094.9453 -8812.4424 -14814.582]","2362":"[15042.4648 -9331.3838 -14815.5518]","2363":"[14967.7256 -9846.4541 -14816.5176]","2364":"[14866.6523 -10355.791 -14817.4023]","2365":"[14738.9521 -10857.8359 -14818.1084]","2366":"[14581.9883 -11349.8799 -14818.749]","2367":"[14392.6729 -11828.9395 -14819.1357]","2368":"[14169.7695 -12291.3418 -14819.9775]","2369":"[13902.6689 -12749.4063 -14819.7012]","2370":"[13597.4404 -13180.7178 -14820.3096]","2371":"[13255.6611 -13581.3545 -14820.54]","2372":"[12879.3232 -13947.3359 -14820.4443]","2373":"[12473.0781 -14276.5566 -14820.3896]","2374":"[12040.3037 -14567.166 -14820.3271]","2375":"[11585.7559 -14819.5244 -14819.9033]","2376":"[11114.7021 -15036.1162 -14819.1895]","2377":"[10632.9951 -15216.5781 -14818.4795]","2378":"[10135.4453 -15366.3809 -14817.834]","2379":"[9626.5801 -15487.9844 -14817.1104]","2380":"[9113.0908 -15581.3037 -14816.2539]","2381":"[8597.542 -15649.8506 -14815.5752]","2382":"[8080.9756 -15697.0537 -14814.459]","2383":"[7564.5195 -15722.5059 -14813.5439]","2384":"[7049.1636 -15731.9199 -14813.0938]","2385":"[6535.127 -15732.251 -14812.5049]","2386":"[6022.2954 -15731.3506 -14812.4189]","2387":"[5491.5293 -15732.0723 -14812.4854]","2388":"[4961.8232 -15731.9746 -14812.5234]","2389":"[4433.1987 -15731.8369 -14812.5156]","2390":"[3905.6394 -15732.2588 -14812.6064]","2391":"[3379.1606 -15731.7275 -14812.3877]","2392":"[2852.6853 -15732.0166 -14820.6885]","2393":"[2324.1365 -15732.041 -14847.1836]","2394":"[1810.6873 -15731.9609 -14888.5918]","2395":"[1292.0913 -15732.6436 -14924.2852]","2396":"[769.7429 -15732.2344 -14938.9209]","2397":"[245.5932 -15731.4609 -14940.3545]","2398":"[-277.6687 -15732.0166 -14940.4199]","2399":"[-799.8812 -15732.0576 -14940.5811]","2400":"[-1321.0548 -15731.9189 -14940.4258]","2401":"[-1841.1512 -15732.1895 -14940.4824]","2402":"[-2360.2175 -15731.8477 -14940.46]","2403":"[-2878.2031 -15731.8311 -14940.4814]","2404":"[-3395.155 -15732.0771 -14940.417]","2405":"[-3911.0522 -15731.9033 -14940.4736]","2406":"[-4425.9102 -15732.1406 -14940.4531]","2407":"[-4939.7407 -15732.0146 -14940.4932]","2408":"[-5452.54 -15731.8223 -14940.3682]","2409":"[-5983.2534 -15732.1621 -14940.4697]","2410":"[-6512.8672 -15731.7012 -14940.4375]","2411":"[-7026.333 -15731.875 -14940.5254]","2412":"[-7551.731 -15727.4932 -14941.3154]","2413":"[-8075.0415 -15707.8877 -14941.96]","2414":"[-8595.1855 -15666.6982 -14942.9561]","2415":"[-9111.8223 -15606.3809 -14943.7764]","2416":"[-9623.7988 -15521.5313 -14944.7422]","2417":"[-10129.418 -15409.96 -14945.4463]","2418":"[-10627.0693 -15271.5605 -14946.1914]","2419":"[-11113.0537 -15101.6924 -14946.9229]","2420":"[-11591.8613 -14897.2939 -14947.457]","2421":"[-12057.4238 -14655.0742 -14947.7813]","2422":"[-12499.043 -14374.9385 -14948.4297]","2423":"[-12913.5693 -14058.8135 -14948.3877]","2424":"[-13297.0195 -13708.1523 -14948.4629]","2425":"[-13644.9844 -13324.4375 -14948.3291]","2426":"[-13956.6494 -12912.665 -14948.2773]","2427":"[-14230.9561 -12476.9287 -14947.835]","2428":"[-14467.9609 -12021.6641 -14947.3916]","2429":"[-14676.6797 -11533.9473 -14947.0264]","2430":"[-14849.5791 -11033.9121 -14946.3135]","2431":"[-14990.2568 -10525.4443 -14945.5879]","2432":"[-15100.6963 -10011.0352 -14944.7139]","2433":"[-15183.7666 -9493.2959 -14943.5107]","2434":"[-15244.1504 -8974.041 -14942.4258]","2435":"[-15281.8369 -8454.7979 -14941.8428]","2436":"[-15300.0898 -7935.9775 -14940.7695]","2437":"[-15303.9365 -7416.1631 -14957.1074]","2438":"[-15304.0293 -6893.5635 -14994.5879]","2439":"[-15303.7461 -6383.5435 -15046.9102]","2440":"[-15303.9141 -5864.7261 -15106.0781]","2441":"[-15303.7881 -5355.8506 -15166.7646]","2442":"[-15303.9199 -4837.3525 -15229.915]","2443":"[-15303.999 -4309.0908 -15294.7871]","2444":"[-15303.916 -3791.8394 -15358.252]","2445":"[-15303.9756 -3268.1782 -15422.6338]","2446":"[-15303.8643 -2746.6597 -15486.7695]","2447":"[-15303.915 -2237.8174 -15549.0078]","2448":"[-15303.9121 -1722.3331 -15612.4111]","2449":"[-15303.8936 -1199.7959 -15676.6113]","2450":"[-15303.9463 -683.2458 -15740.1025]","2451":"[-15304.3213 -174.1892 -15802.0986]","2452":"[-15304.3135 345.3737 -15865.124]","2453":"[-15304.0391 855.4505 -15925.6064]","2454":"[-15304.5449 1375.1158 -15983.9131]","2455":"[-15304.377 1901.782 -16035.3926]","2456":"[-15303.9375 2430.2576 -16065.958]","2457":"[-15303.8564 2942.4204 -16076.1162]","2458":"[-15304.0469 3455.2891 -16075.6006]","2459":"[-15303.5068 3986.7788 -16075.4395]","2460":"[-15303.8086 4517.1216 -16075.4434]","2461":"[-15303.9102 5046.3877 -16075.3916]","2462":"[-15303.8389 5574.5034 -16075.4521]","2463":"[-15303.7637 6101.541 -16075.4521]","2464":"[-15303.3271 6627.5151 -16075.7324]","2465":"[-15293.4531 7151.7041 -16075.9316]","2466":"[-15263.7813 7673.3506 -16077.0771]","2467":"[-15214.0039 8191.7412 -16078.334]","2468":"[-15143.1611 8706.125 -16079.2217]","2469":"[-15045.4238 9221.1396 -16080.0918]","2470":"[-14919.6289 9732.625 -16080.8838]","2471":"[-14765.7266 10226.5332 -16081.6709]","2472":"[-14579.6865 10709.667 -16082.4111]","2473":"[-14359.9238 11176.5654 -16082.709]","2474":"[-14105.0117 11623.3271 -16083.0723]","2475":"[-13814.5313 12045.8281 -16083.3125]","2476":"[-13476.2393 12454.7422 -16083.4111]","2477":"[-13102.5342 12829.1416 -16083.3193]","2478":"[-12697.1436 13166.374 -16083.4287]","2479":"[-12264.4932 13464.8789 -16083.3369]","2480":"[-11809.2217 13724.5283 -16082.8936]","2481":"[-11336.2139 13946.7803 -16082.1211]","2482":"[-10849.7168 14133.1475 -16081.6807]","2483":"[-10353.2412 14286.498 -16080.8584]","2484":"[-9849.916 14410.0283 -16080.085]","2485":"[-9341.9453 14506.0537 -16079.3984]","2486":"[-8831.1348 14577.1631 -16078.4961]","2487":"[-8311.6924 14626.8623 -16077.4551]","2488":"[-7785.8691 14656.0898 -16076.2568]","2489":"[-7261.5503 14666.1357 -16075.8174]","2490":"[-6738.5884 14657.3301 -16076.4258]","2491":"[-6217.7246 14628.9629 -16077.5264]","2492":"[-5699.3921 14581.4287 -16078.2568]","2493":"[-5184.8564 14511.0605 -16079.2764]","2494":"[-4675.5552 14415.8369 -16079.752]","2495":"[-4173.4341 14294.96 -16080.7783]","2496":"[-3680.6365 14144.6094 -16081.665]","2497":"[-3199.8755 13962.9795 -16082.1514]","2498":"[-2734.3569 13748.5879 -16082.7236]","2499":"[-2272.2441 13489.3496 -16083.1777]","2500":"[-1835.5154 13192.3311 -16083.5371]","2501":"[-1427.9159 12859.5635 -16083.6836]","2502":"[-1055.0613 12490.6963 -16083.4951]","2503":"[-718.0679 12090.96 -16083.4463]","2504":"[-418.7833 11664.2041 -16083.2705]","2505":"[-158.2435 11214.5225 -16082.8008]","2506":"[65.7313 10747.0967 -16082.3721]","2507":"[254.2704 10265.8574 -16081.6992]","2508":"[409.9124 9774.3955 -16080.9951]","2509":"[535.8848 9275.8008 -16080.2734]","2510":"[634.5515 8772.3936 -16079.4639]","2511":"[708.1848 8265.5313 -16078.5918]","2512":"[761.7382 7741.3989 -16077.5488]","2513":"[793.1852 7221.8071 -16076.6699]","2514":"[806.3182 6702.0171 -16075.5596]","2515":"[807.937 6181.0688 -16074.8662]","2516":"[806.1935 5656.1914 -16075.5107]","2517":"[806.2109 5141.751 -16075.5557]","2518":"[807.3918 4619.6196 -16075.2813]","2519":"[807.5739 4096.2236 -16075.3779]","2520":"[806.8859 3578.0142 -16075.3779]","2521":"[806.223 3051.5051 -16075.5908]","2522":"[806.361 2526.7139 -16075.3008]","2523":"[807.068 2003.5204 -16075.5586]","2524":"[807.5873 1482.0033 -16075.4141]","2525":"[807.2876 962.0779 -16075.4277]","2526":"[806.6566 443.7349 -16075.416]","2527":"[806.4392 -72.9979 -16075.4775]","2528":"[806.6991 -588.144 -16075.3145]","2529":"[807.3911 -1101.748 -16075.415]","2530":"[807.4218 -1613.7761 -16075.4561]","2531":"[806.6093 -2158.2844 -16075.2725]","2532":"[806.4521 -2701.0466 -16075.5801]","2533":"[806.7173 -3239.4741 -16075.3379]","2534":"[807.4953 -3780.2781 -16075.5439]","2535":"[806.9996 -4311.333 -16075.3662]","2536":"[806.7388 -4825.8154 -16075.5176]","2537":"[806.9148 -5341.6963 -16075.374]","2538":"[807.4012 -5864.9307 -16075.5068]","2539":"[806.9837 -6386.877 -16075.4297]","2540":"[806.7713 -6902.0239 -16075.4893]","2541":"[806.916 -7422.687 -16075.5186]","2542":"[810.2609 -7952.0635 -16074.916]","2543":"[827.3887 -8479.8906 -16074.0332]","2544":"[865.0551 -9004.8701 -16073.1836]","2545":"[922.6061 -9526.0762 -16072.2686]","2546":"[1003.0556 -10042.7412 -16071.4668]","2547":"[1109.7115 -10553.2168 -16070.5791]","2548":"[1241.8839 -11056.1846 -16069.9043]","2549":"[1404.8157 -11548.5029 -16069.2207]","2550":"[1598.3257 -12027.9941 -16068.8418]","2551":"[1824.3888 -12491.3086 -16068.5029]","2552":"[2084.9902 -12934.3027 -16068.1211]","2553":"[2378.8748 -13353.9746 -16067.5635]","2554":"[2718.0447 -13759.043 -16067.5791]","2555":"[3090.3096 -14131.6123 -16067.4209]","2556":"[3492.7776 -14468.9873 -16067.6738]","2557":"[3921.8298 -14769.4063 -16067.9941]","2558":"[4372.7056 -15033.3789 -16068.1748]","2559":"[4841.561 -15261.1377 -16068.7803]","2560":"[5324.3726 -15454.6514 -16069.2344]","2561":"[5817.8081 -15615.7793 -16069.8584]","2562":"[6323.439 -15748.1846 -16070.5273]","2563":"[6830.7671 -15852.8008 -16071.3623]","2564":"[7341.9355 -15931.3867 -16072.1787]","2565":"[7855.1074 -15987.9072 -16073.0938]","2566":"[8369.1748 -16024.3535 -16073.8926]","2567":"[8883.3623 -16041.3389 -16074.8135]","2568":"[9396.9219 -16045.4268 -16075.3252]","2569":"[9909.5938 -16044.8535 -16075.5186]","2570":"[10439.5527 -16044.9277 -16075.4375]","2571":"[10968.4424 -16045.1064 -16075.3994]","2572":"[11495.6553 -16034.4746 -16074.2275]","2573":"[12018.957 -15990.7549 -16071.9102]","2574":"[12533.7373 -15901.7861 -16070.5986]","2575":"[13030.5615 -15762.1709 -16068.6992]","2576":"[13505.167 -15553.001 -16068.5283]","2577":"[13951.6826 -15284.1895 -16067.7959]","2578":"[14341.1914 -14945.123 -16067.8389]","2579":"[14674.9434 -14543.0801 -16068.04]","2580":"[14936.2959 -14097.0313 -16068.5908]","2581":"[15130.9766 -13616.9355 -16069.5791]","2582":"[15266.79 -13115.876 -16070.9463]","2583":"[15350.3311 -12598.1572 -16072.3877]","2584":"[15389.8711 -12073.7842 -16074.4336]","2585":"[15399.8223 -11558.3057 -16075.3877]","2586":"[15399.5166 -11037.6514 -16075.4492]","2587":"[15398.1865 -10524.1191 -16075.3594]","2588":"[15399.4121 -10003.5176 -16075.4678]","2589":"[15399.8066 -9484.0742 -16075.6133]","2590":"[15398.5342 -8965.7881 -16075.5908]","2591":"[15398.7197 -8448.6465 -16075.5176]","2592":"[15399.71 -7932.6802 -16075.4092]","2593":"[15399.1953 -7417.8501 -16075.5361]","2594":"[15398.6514 -6904.1675 -16075.457]","2595":"[15399.3213 -6391.5742 -16075.4844]","2596":"[15399.2178 -5858.8618 -16075.5078]","2597":"[15398.8525 -5327.3555 -16075.4092]","2598":"[15399.2109 -4797.0415 -16075.3799]","2599":"[15399.3945 -4267.9229 -16075.4912]","2600":"[15398.5889 -3739.4114 -16075.4199]","2601":"[15399.2109 -3213.5532 -16075.4668]","2602":"[15399.3145 -2697.6624 -16075.4033]","2603":"[15399.3584 -2184.061 -16075.4941]","2604":"[15398.6777 -1669.2129 -16075.5186]","2605":"[15398.7324 -1151.5651 -16075.3916]","2606":"[15399.0264 -638.576 -16075.502]","2607":"[15398.373 -126.4231 -16075.4795]","2608":"[15399.0166 394.9201 -16075.5293]","2609":"[15398.3877 915.3863 -16075.2881]","2610":"[15398.8828 1435.009 -16075.4873]","2611":"[15398.4414 1953.7728 -16075.3271]","2612":"[15398.3516 2471.7019 -16075.4893]","2613":"[15398.8799 2988.771 -16075.3604]","2614":"[15399.166 3504.4512 -16075.4482]","2615":"[15398.9697 4018.9392 -16075.5518]","2616":"[15399.1992 4532.582 -16075.4629]","2617":"[15399.0244 5045.332 -16075.5146]","2618":"[15398.9482 5567.0537 -16075.4033]","2619":"[15399.5596 6087.8623 -16075.1416]","2620":"[15399.1328 6607.5713 -16075.167]","2621":"[15399.0957 7124.8052 -16075.0664]","2622":"[15399.4111 7640.709 -16075.3467]","2623":"[15398.8906 8155.6885 -16075.4434]","2624":"[15399.458 8669.8252 -16075.5166]","2625":"[15398.7188 9183.0684 -16075.4717]","2626":"[15398.8535 9701.0977 -16075.4004]","2627":"[15398.1064 10214.3193 -16075.4932]","2628":"[15398.209 10728.0146 -16075.46]","2629":"[15398.332 11245.0381 -16075.4219]","2630":"[15399.1885 11761.2725 -16075.46]","2631":"[15399.1406 12280.4453 -16075.4912]","2632":"[15398.6035 12798.0176 -16075.4805]","2633":"[15398.6924 13314.8301 -16075.4893]","2634":"[15398.3799 13829.748 -16075.4141]","2635":"[15398.5488 14342.9365 -16075.5166]","2636":"[15398.9219 14856.5625 -16075.373]","2637":"[15398.7373 15369.333 -16075.5244]","2638":"[15398.7002 15713.5332 -16075.1514]"},"2":{"1":"[15135.1299 15696.4785 -16075.4521]","2":"[15135.0996 15594.0605 -16075.4375]","3":"[15134.6719 15081.4268 -16075.3809]","4":"[15135.3506 14562.2461 -16075.4463]","5":"[15134.8359 14044.4648 -16075.4434]","6":"[15135.209 13527.8701 -16075.4434]","7":"[15135.166 13012.3887 -16075.4629]","8":"[15134.9209 12498.002 -16075.4746]","9":"[15135.2432 11984.7197 -16075.4385]","10":"[15135.1846 11472.5371 -16075.4932]","11":"[15135.4229 10952.9453 -16075.5205]","12":"[15135.0029 10434.4902 -16075.499]","13":"[15134.5098 9917.1592 -16075.3965]","14":"[15135.0381 9400.958 -16075.4453]","15":"[15134.6367 8885.8779 -16075.4863]","16":"[15134.6348 8371.9268 -16075.4395]","17":"[15135.667 7859.1724 -16075.3652]","18":"[15135.5645 7339.6167 -16075.3271]","19":"[15135.7725 6821.7222 -16075.251]","20":"[15136.1543 6306.0186 -16075.3057]","21":"[15134.9541 5788.8608 -16075.3789]","22":"[15135.2246 5273.3779 -16075.2607]","23":"[15135.0781 4760.0146 -16075.3564]","24":"[15134.4717 4247.8271 -16075.4688]","25":"[15135.0264 3728.218 -16075.4258]","26":"[15135.2686 3209.7634 -16075.4785]","27":"[15134.6299 2692.4565 -16075.3428]","28":"[15135.0566 2176.239 -16075.4434]","29":"[15134.8877 1661.1644 -16075.4063]","30":"[15135.123 1147.2715 -16075.5]","31":"[15134.4395 634.4876 -16075.5439]","32":"[15135.2646 114.4669 -16075.499]","33":"[15135.0967 -404.3576 -16075.5215]","34":"[15134.7695 -922.0253 -16075.4082]","35":"[15135.2881 -1438.4806 -16075.4893]","36":"[15134.4531 -1951.2113 -16075.3789]","37":"[15134.6689 -2471.5776 -16075.4063]","38":"[15135.2939 -2990.8433 -16075.4365]","39":"[15135.1914 -3508.978 -16075.5303]","40":"[15135.2666 -4026.0146 -16075.4365]","41":"[15134.5469 -4541.9463 -16075.5244]","42":"[15135.1299 -5056.792 -16075.4629]","43":"[15134.5957 -5570.5586 -16075.5215]","44":"[15135.2402 -6083.1885 -16075.5244]","45":"[15134.9902 -6603.2573 -16075.5098]","46":"[15135.0225 -7122.186 -16075.4824]","47":"[15135.1602 -7639.9717 -16075.5547]","48":"[15135.1514 -8156.6382 -16075.4092]","49":"[15134.5254 -8672.1699 -16075.5107]","50":"[15135.0498 -9186.5469 -16075.4844]","51":"[15134.5283 -9699.8008 -16075.4922]","52":"[15135.5625 -10211.8887 -16075.416]","53":"[15135.0225 -10731.2285 -16075.54]","54":"[15134.4912 -11249.3877 -16075.4063]","55":"[15132.8916 -11766.5322 -16075.8525]","56":"[15112.1855 -12278.5996 -16077.1924]","57":"[15055.1768 -12793.75 -16078.8867]","58":"[14949.5664 -13298.6104 -16080.7842]","59":"[14785.7939 -13784.6934 -16082.1436]","60":"[14551.4404 -14245.9707 -16083.2656]","61":"[14246.4561 -14657.7734 -16083.623]","62":"[13886.7129 -14997.8672 -16083.5742]","63":"[13462.5459 -15277.04 -16082.9453]","64":"[12988.3232 -15489.4922 -16081.7275]","65":"[12494.6211 -15634.4424 -16080.2334]","66":"[11982.165 -15724.6016 -16078.4424]","67":"[11465.9111 -15767.5869 -16076.6064]","68":"[10951.4229 -15780.5801 -16075.6855]","69":"[10438.9951 -15780.5713 -16075.335]","70":"[9919.2529 -15781.2871 -16075.4639]","71":"[9400.7539 -15781.0225 -16075.4678]","72":"[8883.6543 -15775.4873 -16076.0029]","73":"[8368.3438 -15758.1748 -16076.9268]","74":"[7855.5933 -15721.1533 -16077.9229]","75":"[7346.4321 -15663.2383 -16078.7969]","76":"[6834.1167 -15582.0361 -16079.8535]","77":"[6327.3721 -15475.4902 -16080.541]","78":"[5825.0942 -15340.1309 -16081.3037]","79":"[5339.6143 -15175.9434 -16082.0371]","80":"[4859.3755 -14976.7422 -16082.6416]","81":"[4397.0024 -14742.2373 -16083.1484]","82":"[3956.4241 -14472.2441 -16083.4971]","83":"[3541.8855 -14166.9453 -16083.8398]","84":"[3157.9126 -13827.1543 -16083.9658]","85":"[2801.7241 -13449.5654 -16083.9307]","86":"[2482.3372 -13043.6211 -16083.6455]","87":"[2200.9507 -12613.2949 -16083.418]","88":"[1953.4203 -12155.7734 -16082.8271]","89":"[1742.3356 -11682.8799 -16082.3066]","90":"[1566.946 -11201.4209 -16081.6152]","91":"[1421.3712 -10704.4365 -16080.8682]","92":"[1305.4266 -10202.1855 -16080.1113]","93":"[1215.9142 -9696.7305 -16079.2031]","94":"[1149.2407 -9181.7617 -16078.3838]","95":"[1104.9945 -8667.2129 -16077.2461]","96":"[1080.8459 -8154.9526 -16076.1387]","97":"[1072.0139 -7636.4731 -16075.6133]","98":"[1071.1643 -7118.2529 -16075.4912]","99":"[1071.4144 -6605.7964 -16075.543]","100":"[1070.9999 -6085.7681 -16075.5264]","101":"[1071.1707 -5566.835 -16075.5049]","102":"[1071.2371 -5048.9907 -16075.5322]","103":"[1071.4198 -4532.2871 -16075.4434]","104":"[1070.6383 -4016.668 -16075.4883]","105":"[1070.8149 -3502.167 -16075.5322]","106":"[1071.5189 -2988.7813 -16075.4668]","107":"[1070.7515 -2476.5117 -16075.4902]","108":"[1071.3213 -1956.8198 -16075.4951]","109":"[1070.8636 -1438.2463 -16075.54]","110":"[1071.3882 -920.8117 -16075.5146]","111":"[1071.0138 -404.5113 -16075.4658]","112":"[1070.7422 110.6538 -16075.4551]","113":"[1071.3099 624.699 -16075.5195]","114":"[1071.4124 1137.6248 -16075.5117]","115":"[1070.9911 1657.777 -16075.3926]","116":"[1070.5707 2176.7402 -16075.4307]","117":"[1071.5204 2694.5276 -16075.4385]","118":"[1070.6351 3211.1675 -16075.4316]","119":"[1070.9934 3730.0842 -16075.4385]","120":"[1071.1365 4250.7158 -16075.3896]","121":"[1070.6251 4770.2319 -16075.4766]","122":"[1071.4209 5288.604 -16075.4619]","123":"[1071.256 5805.8784 -16075.4795]","124":"[1070.97 6322.0005 -16075.377]","125":"[1066.4186 6836.4941 -16075.1416]","126":"[1049.1384 7348.499 -16074.0908]","127":"[1013.1406 7865.9648 -16073.085]","128":"[957.1602 8379.4219 -16072.3018]","129":"[879.4567 8887.7871 -16071.541]","130":"[777.4229 9389.5723 -16070.8574]","131":"[647.0332 9891.0195 -16070.1895]","132":"[488.5112 10381.6094 -16069.3955]","133":"[300.3449 10858.2109 -16069.0566]","134":"[77.1111 11324.1191 -16068.4883]","135":"[-179.5315 11769.7881 -16068.2559]","136":"[-474.7612 12198.2969 -16067.9121]","137":"[-803.6143 12598.4189 -16067.9131]","138":"[-1164.3374 12966.7607 -16067.7852]","139":"[-1553.6029 13301.4463 -16067.9844]","140":"[-1974.7745 13606.0342 -16068.0049]","141":"[-2418.0613 13873.873 -16068.5459]","142":"[-2879.4763 14105.3867 -16068.8477]","143":"[-3354.7903 14303.1436 -16069.4521]","144":"[-3840.9312 14468.5381 -16070.0508]","145":"[-4339.4673 14606.0977 -16070.6426]","146":"[-4845.4966 14716.0303 -16071.2988]","147":"[-5355.7407 14800.1133 -16071.957]","148":"[-5868.5483 14861.1357 -16073.0098]","149":"[-6382.8135 14901.9141 -16073.8369]","150":"[-6897.9268 14923.3701 -16074.7813]","151":"[-7412.5996 14926.2197 -16074.8936]","152":"[-7925.667 14912.0039 -16074.0957]","153":"[-8444.2646 14878.5 -16073.2129]","154":"[-8958.8955 14824.626 -16072.5293]","155":"[-9468.5 14748.8301 -16071.5684]","156":"[-9971.6846 14649.6201 -16071.0859]","157":"[-10474.6494 14522.7275 -16070.1318]","158":"[-10966.9629 14366.9453 -16069.5498]","159":"[-11446.1357 14181.0498 -16069.0889]","160":"[-11909.9434 13963.832 -16068.5957]","161":"[-12358.8252 13710.3975 -16068.2109]","162":"[-12784.0498 13423.1523 -16068.0664]","163":"[-13188.6836 13097.5693 -16067.791]","164":"[-13562.126 12739.9316 -16067.8301]","165":"[-13901.6943 12352.9697 -16067.7861]","166":"[-14206.1592 11940.4678 -16068.1104]","167":"[-14478.9678 11498.8477 -16068.2695]","168":"[-14715.5264 11038.8594 -16068.8018]","169":"[-14917.6016 10564.3916 -16069.375]","170":"[-15087.1309 10078.7334 -16069.9502]","171":"[-15228.5635 9578.6113 -16070.4385]","172":"[-15341.6514 9072.4521 -16071.2617]","173":"[-15429.0156 8561.9287 -16072.0586]","174":"[-15492.6094 8048.5083 -16072.7988]","175":"[-15535.5107 7533.4258 -16073.7988]","176":"[-15558.9443 7017.4824 -16074.6221]","177":"[-15567.2383 6501.4951 -16075.0938]","178":"[-15567.8115 5986.166 -16075.4854]","179":"[-15567.9824 5471.8931 -16075.4766]","180":"[-15568.6924 4958.7251 -16075.5068]","181":"[-15567.8506 4446.7163 -16075.4639]","182":"[-15568.1973 3927.2976 -16075.4688]","183":"[-15567.5781 3408.999 -16075.4756]","184":"[-15568.1201 2891.8362 -16075.4951]","185":"[-15568.2217 2377.2268 -16063.4482]","186":"[-15568.8379 1860.3184 -16031.7061]","187":"[-15568.1084 1347.6101 -15981.001]","188":"[-15567.8867 836.5643 -15923.3311]","189":"[-15568.084 323.537 -15862.7598]","190":"[-15568.4678 -187.8866 -15800.748]","191":"[-15568.6982 -699.2289 -15738.2666]","192":"[-15567.5029 -1211.5094 -15675.2021]","193":"[-15567.3574 -1722.6373 -15612.376]","194":"[-15568.5645 -2232.9128 -15549.7334]","195":"[-15568.293 -2745.2542 -15486.8525]","196":"[-15567.9023 -3258.1697 -15423.8662]","197":"[-15568.1533 -3769.3125 -15361.1162]","198":"[-15568.0977 -4280.5698 -15298.3379]","199":"[-15568.1475 -4792.2837 -15235.4512]","200":"[-15568.0371 -5302.647 -15173.4238]","201":"[-15567.3799 -5816.0713 -15112.0332]","202":"[-15567.5088 -6329.4746 -15053.1934]","203":"[-15567.8848 -6842.1484 -14999.5967]","204":"[-15567.9307 -7357.9863 -14959.8994]","205":"[-15563.2529 -7873.3433 -14942.2695]","206":"[-15547.3203 -8392.8965 -14939.0449]","207":"[-15512.3926 -8908.7549 -14938.1816]","208":"[-15457.2363 -9420.6582 -14937.3027]","209":"[-15380.5488 -9927.3164 -14936.7363]","210":"[-15278.8682 -10435.4609 -14935.8389]","211":"[-15150.0869 -10935.0146 -14935.1641]","212":"[-14993.5088 -11424.1523 -14934.5811]","213":"[-14805.7461 -11903.9971 -14934.0146]","214":"[-14584.5195 -12369.252 -14933.5391]","215":"[-14329.8877 -12814.3291 -14933.2412]","216":"[-14037.5039 -13243.0459 -14932.9893]","217":"[-13711.165 -13643.5332 -14932.8564]","218":"[-13353.0371 -14012.749 -14932.7969]","219":"[-12966.2412 -14348.5586 -14932.9863]","220":"[-12547.4375 -14654.2461 -14933.0469]","221":"[-12106.4082 -14923.3281 -14933.3926]","222":"[-11647.501 -15156.6338 -14933.8281]","223":"[-11174.3672 -15356.041 -14934.4307]","224":"[-10686.4668 -15524.8145 -14935.0107]","225":"[-10187.877 -15663.5234 -14935.6885]","226":"[-9683.3945 -15774.627 -14936.2441]","227":"[-9174.7578 -15860.5908 -14937.0957]","228":"[-8663.3008 -15923.0039 -14937.8691]","229":"[-8150.1899 -15964.6631 -14938.751]","230":"[-7636.3506 -15987.4492 -14939.8115]","231":"[-7122.5659 -15995.082 -14940.332]","232":"[-6609.5005 -15995.9307 -14940.5059]","233":"[-6088.9834 -15996.5293 -14940.3379]","234":"[-5569.6104 -15995.4521 -14940.4033]","235":"[-5051.4023 -15996.334 -14940.5713]","236":"[-4534.2944 -15995.8945 -14940.5059]","237":"[-4018.2842 -15996.1211 -14940.4424]","238":"[-3503.3684 -15995.9473 -14940.5]","239":"[-2989.5681 -15995.8291 -14940.4453]","240":"[-2476.9204 -15996.5889 -14940.4395]","241":"[-1957.0065 -15995.5566 -14940.3848]","242":"[-1438.2572 -15996.0479 -14940.459]","243":"[-920.6996 -15995.7617 -14940.5293]","244":"[-404.3284 -15996.2178 -14940.5176]","245":"[109.5028 -15996.1523 -14940.5254]","246":"[629.839 -15996.3857 -14940.2148]","247":"[1143.53 -15995.6924 -14929.3877]","248":"[1658.0585 -15996.0371 -14899.9785]","249":"[2173.0681 -15996.0244 -14859.3994]","250":"[2687.6511 -15995.8271 -14826.9385]","251":"[3199.7002 -15995.4707 -14813.9014]","252":"[3719.9121 -15996.0273 -14812.3594]","253":"[4238.5132 -15996.4453 -14812.4697]","254":"[4755.9019 -15995.3389 -14812.4824]","255":"[5272.0747 -15996.0322 -14812.5322]","256":"[5789.8765 -15996.6318 -14812.3516]","257":"[6309.9937 -15995.4766 -14812.501]","258":"[6828.9619 -15995.9336 -14812.3369]","259":"[7345.8047 -15990.3516 -14811.8838]","260":"[7860.0386 -15972.291 -14811.0303]","261":"[8371.1416 -15935.501 -14810.1768]","262":"[8886.7559 -15877.7432 -14809.3545]","263":"[9396.8887 -15797.8271 -14808.2686]","264":"[9900.1768 -15694.0303 -14807.792]","265":"[10402.9521 -15561.2041 -14807.0176]","266":"[10894.6563 -15399.4795 -14806.5088]","267":"[11372.5918 -15207.2988 -14806.001]","268":"[11833.7881 -14983.2373 -14805.4355]","269":"[12279.752 -14722.6611 -14805.2383]","270":"[12701.3438 -14428.2402 -14804.9434]","271":"[13101.1006 -14095.0693 -14804.9766]","272":"[13468.9932 -13730.3662 -14804.8643]","273":"[13802.499 -13336.9023 -14804.9473]","274":"[14100.8975 -12918.5547 -14805.0869]","275":"[14363.2158 -12478.7588 -14805.4727]","276":"[14593.7441 -12014.085 -14805.7061]","277":"[14789.9629 -11535.6279 -14806.3379]","278":"[14954.2861 -11046.5977 -14806.9199]","279":"[15088.7334 -10549.6016 -14807.8193]","280":"[15195.8721 -10046.8359 -14808.3457]","281":"[15278.4434 -9539.2822 -14809.1631]","282":"[15338.6641 -9023.8916 -14810.0283]","283":"[15377.8457 -8506.9893 -14810.8711]","284":"[15398.4297 -7989.4536 -14811.7451]","285":"[15404.5352 -7471.4331 -14797.541]","286":"[15404.8975 -6955.9551 -14762.5029]","287":"[15405.1738 -6442.3735 -14710.5576]","288":"[15405 -5930.1235 -14652.4355]","289":"[15404.8193 -5417.5684 -14591.457]","290":"[15404.8574 -4905.6938 -14530.0283]","291":"[15404.5029 -4393.6436 -14469.1543]","292":"[15404.4209 -3881.0745 -14410.3262]","293":"[15404.752 -3367.0239 -14357.1289]","294":"[15404.8838 -2852.6514 -14318.7373]","295":"[15405.0996 -2336.6768 -14302.4092]","296":"[15404.6846 -1820.6188 -14300.4004]","297":"[15405.377 -1305.9698 -14300.4873]","298":"[15404.8525 -792.4127 -14300.5498]","299":"[15404.7051 -279.9584 -14300.458]","300":"[15405.0645 239.8911 -14300.5117]","301":"[15404.9736 758.6158 -14300.4932]","302":"[15404.5342 1276.2104 -14300.5566]","303":"[15405.333 1792.6498 -14300.5225]","304":"[15405.248 2307.9548 -14300.3311]","305":"[15404.8271 2822.105 -14300.5078]","306":"[15404.9453 3335.1155 -14300.4316]","307":"[15405.207 3855.377 -14300.5313]","308":"[15404.9434 4374.4785 -14300.4795]","309":"[15405.124 4892.3994 -14300.5088]","310":"[15404.9512 5409.2305 -14300.3398]","311":"[15398.8301 5929.7212 -14299.792]","312":"[15379.2871 6447.3125 -14298.9688]","313":"[15340.5352 6961.3525 -14298.0957]","314":"[15281.9082 7471.3018 -14297.1553]","315":"[15199.4482 7984.4072 -14296.3037]","316":"[15093.1865 8490.873 -14295.7373]","317":"[14959.5996 8988.5576 -14295.1016]","318":"[14797.0146 9474.9668 -14294.4473]","319":"[14601.1738 9955.3975 -14293.9053]","320":"[14372.7236 10418.4336 -14293.4961]","321":"[14110.998 10860.6631 -14293.292]","322":"[13811.7227 11283.8418 -14292.9219]","323":"[13479.3203 11677.6895 -14292.9141]","324":"[13116.1016 12039.9951 -14292.8154]","325":"[12717.6318 12373.2139 -14292.9912]","326":"[12294.3926 12671.043 -14293.3096]","327":"[11849.7646 12932.54 -14293.5615]","328":"[11387.8623 13158.7041 -14293.8906]","329":"[10912.2949 13350.9775 -14294.4805]","330":"[10418.6182 13514.374 -14295.123]","331":"[9917.0371 13647.665 -14295.7432]","332":"[9409.6387 13753.1924 -14296.5107]","333":"[8898.4404 13833.9795 -14297.2949]","334":"[8384.7568 13892.1523 -14298.0703]","335":"[7869.6235 13929.4678 -14298.9639]","336":"[7353.9922 13948.0684 -14299.8975]","337":"[6836.2051 13961.3242 -14300.4893]","338":"[6317.7305 13993.623 -14300.834]","339":"[5805.9746 14064.1904 -14300.6377]","340":"[5299.9624 14158.7637 -14300.7607]","341":"[4797.3623 14259.5645 -14300.6455]","342":"[4288.4683 14362.0029 -14300.5684]","343":"[3780.3547 14461.9512 -14300.7139]","344":"[3273.5745 14562.1641 -14300.6396]","345":"[2765.1807 14640.0566 -14300.585]","346":"[2246.9915 14683.918 -14300.7822]","347":"[1729.2251 14697.1807 -14300.4912]","348":"[1211.9886 14698.1367 -14300.582]","349":"[699.8677 14697.7119 -14300.3291]","350":"[180.1601 14698.0459 -14300.499]","351":"[-338.4329 14697.7686 -14300.4453]","352":"[-855.9151 14698.5947 -14300.5674]","353":"[-1372.3098 14698.165 -14300.5566]","354":"[-1887.6371 14697.9512 -14300.5068]","355":"[-2401.887 14698.2266 -14300.4131]","356":"[-2915.0552 14697.6738 -14300.4424]","357":"[-3427.082 14698.3516 -14300.5537]","358":"[-3946.4734 14698.6338 -14300.5303]","359":"[-4464.6763 14697.2402 -14300.4023]","360":"[-4981.7222 14697.9404 -14300.5059]","361":"[-5497.5742 14698.4648 -14300.4688]","362":"[-6012.2383 14697.9316 -14300.3955]","363":"[-6525.314 14697.4932 -14300.4199]","364":"[-7044.9434 14698.1045 -14300.5166]","365":"[-7563.1558 14697.4297 -14300.3398]","366":"[-8079.499 14692.7168 -14300.4912]","367":"[-8594.2061 14677.4678 -14300.4492]","368":"[-9106.4727 14643.082 -14300.4072]","369":"[-9621.9844 14586.6738 -14300.4512]","370":"[-10133.2695 14508.8105 -14300.5234]","371":"[-10638.8145 14406.5674 -14300.4902]","372":"[-11136.4023 14276.6748 -14300.4316]","373":"[-11623.9873 14118.4688 -14300.5986]","374":"[-12106.4473 13926.2813 -14300.5977]","375":"[-12571.9219 13700.2549 -14300.54]","376":"[-13016.5938 13439.6738 -14300.5527]","377":"[-13436.6816 13144.9795 -14300.6621]","378":"[-13834.5928 12811.333 -14300.7627]","379":"[-14199.2578 12444.9932 -14300.624]","380":"[-14529.0557 12049.8779 -14300.6416]","381":"[-14822.7822 11629.8135 -14300.6094]","382":"[-15083.1084 11184.1846 -14300.5518]","383":"[-15306.9004 10720.3633 -14300.498]","384":"[-15496.8076 10243.4658 -14300.5176]","385":"[-15656.9043 9748.4922 -14300.4609]","386":"[-15786.707 9246.3545 -14300.5439]","387":"[-15888.626 8739.3604 -14300.5225]","388":"[-15965.8086 8229.3682 -14300.5869]","389":"[-16020.0059 7717.8398 -14300.3311]","390":"[-16054.4063 7205.9561 -14300.4199]","391":"[-16070.9814 6686.1382 -14300.3721]","392":"[-16075.3486 6167.3071 -14300.4023]","393":"[-16074.7334 5647.9292 -14297.7686]","394":"[-16074.0947 5130.5098 -14278.4775]","395":"[-16075.5957 4615.3145 -14237.1289]","396":"[-16075.5381 4103.0537 -14182.791]","397":"[-16074.8711 3589.5449 -14123.1582]","398":"[-16074.8398 3077.929 -14062.0176]","399":"[-16074.9961 2565.6931 -13999.5879]","400":"[-16074.7842 2053.1018 -13936.7256]","401":"[-16074.5674 1542.2904 -13874.0225]","402":"[-16074.249 1030.2562 -13811.2676]","403":"[-16074.4639 518.8933 -13748.3496]","404":"[-16075.168 8.1397 -13685.7363]","405":"[-16074.2949 -503.824 -13622.8135]","406":"[-16074.6895 -1015.1428 -13560.0244]","407":"[-16074.4277 -1526.9818 -13497.1777]","408":"[-16074.5176 -2037.8484 -13434.4492]","409":"[-16074.8428 -2550.3372 -13371.5205]","410":"[-16075.0674 -3062.1985 -13308.6748]","411":"[-16074.3623 -3573.0674 -13245.9619]","412":"[-16074.7129 -4085.6692 -13183.3291]","413":"[-16074.9092 -4597.1392 -13121.4053]","414":"[-16074.3955 -5108.2959 -13061.3311]","415":"[-16074.5234 -5621.8877 -13004.085]","416":"[-16074.6875 -6135.6626 -12954.9688]","417":"[-16074.6738 -6651.7993 -12926.6279]","418":"[-16074.4775 -7170.8628 -12916.2305]","419":"[-16074.0234 -7684.834 -12916.6201]","420":"[-16065.5342 -8197.127 -12916.4131]","421":"[-16040.1084 -8716.0928 -12916.3906]","422":"[-15995.6309 -9232.4219 -12916.2871]","423":"[-15930.1758 -9744.6143 -12916.3574]","424":"[-15840.6592 -10251.3604 -12916.4072]","425":"[-15726.3799 -10751.6104 -12916.5098]","426":"[-15581.9453 -11251.085 -12916.5996]","427":"[-15406.7695 -11738.8115 -12916.5479]","428":"[-15198.9805 -12211.4678 -12916.6514]","429":"[-14957.7676 -12665.6025 -12916.6299]","430":"[-14680.1982 -13101.0215 -12916.6523]","431":"[-14366.4902 -13511.0488 -12916.5967]","432":"[-14019.7969 -13890.4951 -12916.6494]","433":"[-13636.3838 -14242.1553 -12916.5605]","434":"[-13224.9346 -14556.8213 -12916.5088]","435":"[-12790.4072 -14834.7646 -12916.668]","436":"[-12337.1406 -15076.7695 -12916.501]","437":"[-11860.6387 -15285.749 -12916.6348]","438":"[-11372.6533 -15460.8867 -12916.5938]","439":"[-10876.4209 -15605.1406 -12916.5752]","440":"[-10374.2285 -15720.1426 -12916.4561]","441":"[-9867.9658 -15809.3994 -12916.417]","442":"[-9353.5557 -15875.2354 -12916.4932]","443":"[-8838.125 -15920.001 -12916.5254]","444":"[-8322.6201 -15944.7734 -12916.5264]","445":"[-7807.7271 -15953.5674 -12916.4697]","446":"[-7293.9409 -15954.8564 -12916.5332]","447":"[-6777.2871 -15955.0645 -12906.5576]","448":"[-6262.9336 -15955.6035 -12877.5264]","449":"[-5748.6128 -15955.1436 -12828.0908]","450":"[-5235.1172 -15954.7646 -12770.6973]","451":"[-4724.0034 -15954.9414 -12710.3838]","452":"[-4211.5806 -15954.9746 -12648.3701]","453":"[-3699.6775 -15953.9609 -12585.8857]","454":"[-3188.6401 -15954.6543 -12523.1406]","455":"[-2677.5225 -15955.126 -12460.4209]","456":"[-2165.9651 -15954.5957 -12397.6152]","457":"[-1653.9159 -15954.5811 -12334.7422]","458":"[-1142.2128 -15954.5371 -12271.876]","459":"[-629.0639 -15954.4463 -12208.8477]","460":"[-117.6797 -15954.958 -12146.041]","461":"[393.867 -15954.6729 -12083.2314]","462":"[905.9209 -15954.3242 -12020.3555]","463":"[1417.3564 -15955.3008 -11957.5352]","464":"[1928.155 -15954.4307 -11894.9033]","465":"[2440.9285 -15955.0762 -11831.8994]","466":"[2952.7073 -15954.1885 -11769.668]","467":"[3463.3872 -15954.7725 -11708.4424]","468":"[3975.167 -15954.4824 -11649.5234]","469":"[4486.9531 -15954.6074 -11595.376]","470":"[5001.9678 -15955.0234 -11554.1025]","471":"[5520.4482 -15954.748 -11535.251]","472":"[6033.6157 -15954.6582 -11532.4551]","473":"[6553.2598 -15954.5254 -11532.4209]","474":"[7071.292 -15954.1318 -11532.3965]","475":"[7587.8447 -15944.8477 -11532.3672]","476":"[8102.3027 -15920.3037 -11532.3311]","477":"[8612.9365 -15876.8242 -11532.3506]","478":"[9127.042 -15811.4492 -11532.458]","479":"[9636.0488 -15722.0518 -11532.4795]","480":"[10137.9834 -15607.3691 -11532.4688]","481":"[10630.9639 -15465.1641 -11532.4814]","482":"[11120.4102 -15289.7715 -11532.4746]","483":"[11595.2295 -15082.6221 -11532.3887]","484":"[12051.3525 -14841.292 -11532.5723]","485":"[12484.5898 -14565.0176 -11532.7783]","486":"[12897.9629 -14249.6309 -11532.6523]","487":"[13280.3457 -13900.7842 -11532.6846]","488":"[13628.9961 -13521.3252 -11532.6143]","489":"[13941.3193 -13114.1504 -11532.5215]","490":"[14220.3594 -12680.3496 -11532.6641]","491":"[14463.1582 -12225.8008 -11532.6152]","492":"[14670.6309 -11756.1729 -11532.5]","493":"[14847.8271 -11267.0313 -11532.5117]","494":"[14992.8604 -10769.1914 -11532.4746]","495":"[15108.5273 -10265.373 -11532.4404]","496":"[15199.0986 -9757.9102 -11532.5098]","497":"[15265.1016 -9248.0566 -11532.6162]","498":"[15309.5488 -8737.1943 -11532.5]","499":"[15335.2539 -8217.9883 -11532.4512]","500":"[15344.6885 -7699.4766 -11532.4453]","501":"[15345.6143 -7182.2881 -11532.3926]","502":"[15345.8809 -6662.1587 -11522.6846]","503":"[15346.6367 -6148.3916 -11493.8779]","504":"[15345.6504 -5635.4585 -11444.7305]","505":"[15345.5713 -5123.3545 -11387.5439]","506":"[15346.7441 -4610.9102 -11327.3281]","507":"[15345.7852 -4098.8428 -11265.3516]","508":"[15345.1699 -3588.1116 -11202.876]","509":"[15345.9922 -3075.3513 -11139.9111]","510":"[15345.6289 -2564.2427 -11077.1514]","511":"[15346.1699 -2052.6301 -11014.3359]","512":"[15345.04 -1540.8846 -10951.4883]","513":"[15346.375 -1028.6575 -10888.6025]","514":"[15345.3984 -518.1984 -10825.9619]","515":"[15345.7266 -6.1599 -10763.5693]","516":"[15345.627 505.1206 -10702.3477]","517":"[15345.2656 1017.4252 -10643.0146]","518":"[15345.8496 1530.9784 -10588.2461]","519":"[15345.9551 2045.7305 -10545.6699]","520":"[15345.8555 2561.863 -10524.8193]","521":"[15345.2813 3075.2786 -10521.4668]","522":"[15342.3633 3595.0676 -10521.5]","523":"[15329.0098 4112.9395 -10521.3838]","524":"[15295.7979 4628.4038 -10521.4902]","525":"[15243.0938 5140.8579 -10521.4473]","526":"[15169.0781 5648.9702 -10521.5127]","527":"[15069.0215 6159.2754 -10521.335]","528":"[14941.8857 6661.2686 -10521.542]","529":"[14786.0127 7153.3442 -10521.6689]","530":"[14599.5176 7632.7334 -10521.7207]","531":"[14380.1748 8095.9341 -10521.5928]","532":"[14122.4189 8547.1182 -10521.5381]","533":"[13831.2178 8971.4824 -10521.6143]","534":"[13506.2178 9367.8232 -10521.6348]","535":"[13142.9619 9738.3203 -10521.625]","536":"[12750.2051 10073.9121 -10521.6787]","537":"[12331.8418 10373.2705 -10521.6572]","538":"[11891.8486 10635.9023 -10521.4736]","539":"[11426.8926 10866.0313 -10521.5566]","540":"[10948.2188 11060.9609 -10521.4609]","541":"[10459.5684 11223.3721 -10521.5068]","542":"[9959.5869 11356.4326 -10521.4424]","543":"[9452.6455 11462.1602 -10521.5898]","544":"[8942.4854 11542.4316 -10521.4297]","545":"[8430.7344 11599.7139 -10521.4414]","546":"[7918.4961 11636.6982 -10521.3818]","547":"[7406.4741 11654.2656 -10521.377]","548":"[6886.769 11659.9512 -10521.4658]","549":"[6368.2832 11658.9238 -10521.4502]","550":"[5851.103 11658.9375 -10521.4355]","551":"[5335.8579 11660.1094 -10521.5273]","552":"[4822.2773 11658.1201 -10521.5361]","553":"[4309.9263 11657.8467 -10521.4463]","554":"[3790.4023 11659.5059 -10521.459]","555":"[3272.0796 11658.0635 -10521.4502]","556":"[2754.9087 11658.7549 -10521.4531]","557":"[2238.8821 11658.6338 -10521.4531]","558":"[1724.9816 11658.3818 -10521.4707]","559":"[1204.9137 11658.5762 -10521.5332]","560":"[685.9205 11658.6563 -10521.4248]","561":"[167.9899 11658.3418 -10521.4189]","562":"[-348.848 11659.1729 -10521.46]","563":"[-864.6102 11658.5039 -10521.4551]","564":"[-1379.2941 11658.9736 -10521.4541]","565":"[-1892.8937 11658.582 -10521.4531]","566":"[-2405.427 11658.7939 -10521.4668]","567":"[-2925.3713 11658.751 -10521.5146]","568":"[-3444.1812 11658.6934 -10521.4189]","569":"[-3961.8997 11658.9561 -10521.3711]","570":"[-4478.4941 11659.0713 -10521.5586]","571":"[-4993.9844 11658.915 -10521.4609]","572":"[-5508.3257 11658.7139 -10521.374]","573":"[-6021.2554 11659.7646 -10521.3408]","574":"[-6541.2163 11658.7676 -10521.5811]","575":"[-7059.6235 11658.4336 -10521.5068]","576":"[-7576.4023 11658.0732 -10521.4082]","577":"[-8090.7334 11640.1357 -10521.417]","578":"[-8600.6055 11588.8467 -10521.4307]","579":"[-9107.667 11492.3311 -10521.3477]","580":"[-9604.4561 11338.4824 -10521.5156]","581":"[-10071.9639 11120.7432 -10521.5879]","582":"[-10503.042 10830.2871 -10521.6719]","583":"[-10874.5322 10473.1689 -10521.4199]","584":"[-11181.2441 10053.4307 -10521.6289]","585":"[-11415.1133 9592.5342 -10521.4531]","586":"[-11582.3506 9105.1553 -10521.5566]","587":"[-11692.4502 8597.4023 -10521.3682]","588":"[-11753.2256 8083.0825 -10521.4629]","589":"[-11775.8262 7566.978 -10521.3291]","590":"[-11780.3066 7051.6978 -10521.498]","591":"[-11779.6475 6537.8086 -10521.4814]","592":"[-11768.8857 6017.7891 -10521.1445]","593":"[-11709.1465 5507.3281 -10521.1396]","594":"[-11569.9561 5010.8228 -10521.6025]","595":"[-11361.4824 4536.894 -10521.5596]","596":"[-11098.5088 4092.3928 -10521.5488]","597":"[-10793.3135 3678.7966 -10521.5371]","598":"[-10456.6885 3292.9275 -10521.0547]","599":"[-10096.0859 2918.2283 -10520.3057]","600":"[-9728.5938 2551.3325 -10520.3047]","601":"[-9363.6729 2186.0552 -10520.5098]","602":"[-8999.0234 1822.1549 -10520.4785]","603":"[-8636.1924 1457.9723 -10520.4619]","604":"[-8272.7646 1095.9276 -10520.4189]","605":"[-7905.3745 727.3884 -10520.5322]","606":"[-7538.1436 360.2902 -10520.4844]","607":"[-7171.4009 -5.6853 -10520.541]","608":"[-6806.1494 -371.4585 -10520.4404]","609":"[-6441.7295 -736.4481 -10520.5508]","610":"[-6077.5186 -1100.0186 -10520.4336]","611":"[-5714.0669 -1462.7487 -10520.5371]","612":"[-5352.0703 -1825.3297 -10520.4873]","613":"[-4985.0986 -2193.2017 -10520.9131]","614":"[-4616.3687 -2557.1428 -10520.9863]","615":"[-4223.1582 -2885.7583 -10521.1357]","616":"[-3786.728 -3157.9656 -10521.5879]","617":"[-3314.7383 -3363.5542 -10521.5811]","618":"[-2822.9019 -3506.2007 -10521.54]","619":"[-2312.4644 -3596.8142 -10521.3906]","620":"[-1797.9023 -3642.8792 -10521.3223]","621":"[-1283.0155 -3657.1011 -10521.3613]","622":"[-764.3973 -3658.8748 -10521.4629]","623":"[-245.7268 -3658.8677 -10521.458]","624":"[271.8557 -3658.7637 -10521.4551]","625":"[788.3609 -3658.2813 -10521.4531]","626":"[1303.7826 -3658.8354 -10521.4531]","627":"[1818.1407 -3658.5042 -10521.4756]","628":"[2331.4131 -3659.0222 -10521.3379]","629":"[2849.1011 -3685.7764 -10521.2852]","630":"[3361.5022 -3773.334 -10521.2373]","631":"[3852.3875 -3940.4255 -10521.3301]","632":"[4313.9155 -4172.7393 -10521.4844]","633":"[4744.4722 -4452.7959 -10521.5859]","634":"[5151.9307 -4774.7207 -10521.1963]","635":"[5533.3203 -5124.2734 -10521.417]","636":"[5901.5938 -5486.1934 -10521.4551]","637":"[6265.209 -5851.1807 -10521.4531]","638":"[6629.1274 -6214.2886 -10521.4521]","639":"[6991.8457 -6577.0273 -10521.4531]","640":"[7359.543 -6945.0713 -10521.4053]","641":"[7726.7061 -7312.043 -10521.4502]","642":"[8093.0576 -7678.1929 -10521.5371]","643":"[8450.5322 -8053.5547 -10521.2334]","644":"[8766.9307 -8460.2217 -10521.2148]","645":"[9016.835 -8913.2764 -10521.4268]","646":"[9199.6787 -9393.2002 -10521.6201]","647":"[9325.5 -9897.8369 -10521.5439]","648":"[9400.1641 -10411.0117 -10521.2363]","649":"[9432.6094 -10923.0811 -10521.4287]","650":"[9424.7422 -11443.3867 -10521.2939]","651":"[9375.8193 -11959.0537 -10521.5918]","652":"[9282.9658 -12464.8887 -10521.3809]","653":"[9133.2168 -12961.9639 -10521.499]","654":"[8921.2246 -13429.8594 -10521.5986]","655":"[8637.2637 -13862.4805 -10521.5693]","656":"[8284.6104 -14240.2588 -10521.499]","657":"[7872.7388 -14550.0225 -10521.417]","658":"[7418.6992 -14788.0381 -10521.543]","659":"[6929.625 -14961.835 -10521.4395]","660":"[6425.1572 -15075.7158 -10521.543]","661":"[5914.0371 -15140.6904 -10521.2813]","662":"[5401.3101 -15166.4072 -10521.4766]","663":"[4881.0454 -15171.9316 -10521.4277]","664":"[4362.0806 -15170.8555 -10521.4561]","665":"[3844.2698 -15171.1113 -10521.4531]","666":"[3327.5918 -15171.9326 -10521.4512]","667":"[2807.4324 -15170.9805 -10521.4775]","668":"[2295.4309 -15171.4453 -10521.4854]","669":"[1775.8087 -15171.6836 -10521.3965]","670":"[1257.2615 -15171.1533 -10521.4678]","671":"[739.7901 -15171.458 -10521.4746]","672":"[223.3935 -15171.1865 -10521.4639]","673":"[-291.9331 -15171.2207 -10521.4561]","674":"[-806.1935 -15172.0234 -10521.4531]","675":"[-1319.3759 -15170.8027 -10521.4912]","676":"[-1831.4642 -15171.752 -10521.5078]","677":"[-2350.9702 -15170.791 -10521.5068]","678":"[-2869.364 -15171.8213 -10521.5078]","679":"[-3386.6123 -15170.9385 -10521.4902]","680":"[-3902.7297 -15171.6416 -10521.4609]","681":"[-4417.7363 -15171.459 -10521.4561]","682":"[-4931.6372 -15171.1846 -10521.4531]","683":"[-5444.4355 -15171.8545 -10521.4785]","684":"[-5964.4985 -15170.9063 -10521.4707]","685":"[-6483.4058 -15171.6426 -10521.5107]","686":"[-7000.7856 -15169.5967 -10521.4277]","687":"[-7513.3833 -15158.1016 -10521.5156]","688":"[-8031.938 -15127.6709 -10521.4453]","689":"[-8547.5283 -15078.1289 -10521.542]","690":"[-9058.2344 -15006.1611 -10521.4678]","691":"[-9563.2188 -14911 -10521.5732]","692":"[-10060.9219 -14789.5928 -10521.3818]","693":"[-10556.9473 -14637.8145 -10521.5791]","694":"[-11039.7061 -14454.8467 -10521.5186]","695":"[-11506.9199 -14239.7813 -10521.6016]","696":"[-11954.7354 -13990.9131 -10521.6748]","697":"[-12385.9375 -13703.0176 -10521.6621]","698":"[-12790.2061 -13379.9199 -10521.6025]","699":"[-13166.043 -13020.7119 -10521.5977]","700":"[-13507.0049 -12631.0898 -10521.6729]","701":"[-13812.0273 -12215.3213 -10521.6221]","702":"[-14079.499 -11776.7969 -10521.5264]","703":"[-14314.5947 -11312.7979 -10521.584]","704":"[-14514.5449 -10834.8721 -10521.4961]","705":"[-14681.1582 -10346.4453 -10521.458]","706":"[-14817.2314 -9850.3174 -10521.4756]","707":"[-14925.2539 -9348.8408 -10521.4697]","708":"[-15009.4521 -8835.7998 -10521.5137]","709":"[-15070.0381 -8321.0713 -10521.4092]","710":"[-15109.2715 -7803.9131 -10521.293]","711":"[-15129.5654 -7284.5752 -10521.3281]","712":"[-15136.0273 -6766.7598 -10521.4629]","713":"[-15136.583 -6250.0527 -10521.4844]","714":"[-15136.3281 -5734.415 -10521.458]","715":"[-15136.2588 -5219.8647 -10521.4551]","716":"[-15136.3301 -4706.3828 -10521.4531]","717":"[-15136.0762 -4193.9722 -10521.457]","718":"[-15136.7646 -3674.1089 -10521.5322]","719":"[-15136.2246 -3155.3643 -10521.4717]","720":"[-15136.5518 -2637.7632 -10521.4639]","721":"[-15136.2256 -2121.314 -10521.4727]","722":"[-15136.4307 -1605.981 -10521.459]","723":"[-15136.2461 -1091.7545 -10521.4561]","724":"[-15136.5605 -578.6236 -10521.4541]","725":"[-15136.5811 -66.5868 -10521.4541]","726":"[-15136.6484 452.7386 -10521.4551]","727":"[-15136.1289 970.6085 -10520.3242]","728":"[-15136.3164 1482.3792 -10503.7002]","729":"[-15135.8428 1995.6334 -10465.7373]","730":"[-15135.5596 2508.3066 -10412.8975]","731":"[-15135.8877 3020.4053 -10354.2461]","732":"[-15136.209 3533.6606 -10293.209]","733":"[-15136.2109 4044.25 -10231.7266]","734":"[-15136.084 4555.6206 -10171.1387]","735":"[-15136.6689 5069.6865 -10112.6543]","736":"[-15136.5596 5583.0176 -10060.4541]","737":"[-15136.1709 6098.6016 -10024.7158]","738":"[-15129.792 6612.3696 -10010.4717]","739":"[-15110.999 7131.2065 -10009.3818]","740":"[-15072.4697 7646.354 -10009.543]","741":"[-15013.4814 8157.2554 -10009.5518]","742":"[-14932.0703 8663.6523 -10009.4482]","743":"[-14824.0732 9172.2598 -10009.376]","744":"[-14688.8857 9671.5313 -10009.624]","745":"[-14524.2148 10159.9707 -10009.4453]","746":"[-14328.0322 10634.2334 -10009.5498]","747":"[-14094.9863 11098.7207 -10009.6602]","748":"[-13829.5225 11538.4629 -10009.6055]","749":"[-13529.2773 11954.0439 -10009.6445]","750":"[-13189.167 12346.335 -10009.6377]","751":"[-12817.5771 12705.7578 -10009.5996]","752":"[-12417.6416 13029.9141 -10009.5107]","753":"[-11992.96 13317.1553 -10009.5615]","754":"[-11541.4141 13572.3457 -10009.5859]","755":"[-11073.418 13790.7529 -10009.5947]","756":"[-10593.252 13974.8779 -10009.6104]","757":"[-10103.8838 14127.3584 -10009.6777]","758":"[-9599.9346 14252.79 -10009.2881]","759":"[-9091.4111 14350.5986 -10009.3682]","760":"[-8583.9434 14423.7344 -10009.3203]","761":"[-8073.9697 14474.7949 -10009.4473]","762":"[-7555.5605 14505.8574 -10009.4209]","763":"[-7038.4102 14519.1084 -10009.4424]","764":"[-6522.5459 14522.7998 -10009.4521]","765":"[-6007.7813 14522.2783 -10009.5078]","766":"[-5494.0845 14522.3711 -10009.376]","767":"[-4981.4834 14521.7959 -10009.4541]","768":"[-4461.4395 14522.0605 -10009.4551]","769":"[-3942.4883 14522.0664 -10009.4521]","770":"[-3424.6436 14522.2891 -10009.3428]","771":"[-2907.8796 14522.2383 -10009.4844]","772":"[-2392.2378 14522.0088 -10009.417]","773":"[-1877.7117 14522.3672 -10009.4971]","774":"[-1364.301 14522.1494 -10009.4189]","775":"[-852.0064 14522.0313 -10009.4541]","776":"[-332.4465 14521.9336 -10009.4521]","777":"[185.9746 14521.9912 -10009.4531]","778":"[703.2646 14522.3887 -10009.4463]","779":"[1219.4073 14521.9121 -10009.4199]","780":"[1736.4364 14522.4775 -10009.5039]","781":"[2256.5811 14522.2256 -10009.499]","782":"[2775.6431 14522.959 -10009.4395]","783":"[3293.6133 14522.3184 -10009.458]","784":"[3810.51 14522.3857 -10009.4551]","785":"[4326.3423 14522.6338 -10009.4521]","786":"[4841.0874 14521.8525 -10009.4375]","787":"[5354.7593 14522.5049 -10009.4766]","788":"[5867.3252 14522.21 -10009.4951]","789":"[6387.3096 14520.9189 -10009.3896]","790":"[6905.8154 14508.9629 -10009.4023]","791":"[7422.1646 14480.1895 -10009.501]","792":"[7935.0317 14431.958 -10009.499]","793":"[8443.291 14362.2949 -10009.6309]","794":"[8954.4668 14267.6631 -10009.54]","795":"[9454.5322 14147.541 -10009.5264]","796":"[9945.9355 13999.4023 -10009.54]","797":"[10433.041 13817.5938 -10009.5791]","798":"[10904.1563 13602.8311 -10009.5488]","799":"[11355.7197 13353.9668 -10009.6689]","800":"[11784.0127 13071.2891 -10009.6602]","801":"[12191.502 12748.8945 -10009.6074]","802":"[12567.3838 12393.2949 -10009.6309]","803":"[12908.8057 12007.5146 -10009.502]","804":"[13214.1377 11595.4727 -10009.7158]","805":"[13487.3018 11153.9248 -10009.6494]","806":"[13722.8721 10695.3008 -10009.5762]","807":"[13923.2119 10223.2871 -10009.5967]","808":"[14093.042 9732.1406 -10009.5537]","809":"[14232.0088 9233.3135 -10009.4697]","810":"[14342.8125 8729.2891 -10009.4121]","811":"[14427.4111 8221.7041 -10009.4023]","812":"[14489.1143 7712.1118 -10009.4658]","813":"[14530.0225 7193.5562 -10009.4209]","814":"[14551.6191 6676.0562 -10009.5264]","815":"[14559.1455 6159.6719 -10009.4932]","816":"[14559.0391 5644.3657 -10009.4717]","817":"[14559.0146 5130.1826 -10009.459]","818":"[14559.0674 4617.0957 -10009.4551]","819":"[14559.0811 4096.7222 -10009.4531]","820":"[14559.4268 3577.4883 -10009.4268]","821":"[14559.3984 3059.3857 -10009.415]","822":"[14559.1416 2542.4451 -10009.376]","823":"[14559.1396 2024.3628 -10009.4707]","824":"[14559.4756 1512.1377 -10009.4512]","825":"[14559.3174 992.2941 -10009.457]","826":"[14559.2666 473.5057 -10009.4541]","827":"[14559.2861 -44.2241 -10009.4521]","828":"[14559.5449 -560.9041 -10009.4727]","829":"[14559.7939 -1076.5372 -10009.4834]","830":"[14559.2178 -1591.0861 -10009.3838]","831":"[14559.4502 -2104.5659 -10009.4629]","832":"[14559.5801 -2616.9744 -10009.4717]","833":"[14559.1982 -3136.8232 -10009.458]","834":"[14559.3486 -3655.5508 -10009.4551]","835":"[14559.334 -4173.1689 -10009.4541]","836":"[14559.1152 -4689.6748 -10009.4355]","837":"[14559.4805 -5205.0825 -10009.4795]","838":"[14559.3301 -5719.3706 -10009.4258]","839":"[14553.0479 -6232.3916 -10009.4785]","840":"[14534.5088 -6751.7295 -10009.5674]","841":"[14496.0234 -7267.8745 -10009.5107]","842":"[14436.6328 -7781.9565 -10009.5176]","843":"[14354.1152 -8295.249 -10009.3555]","844":"[14246.377 -8801.1592 -10009.5596]","845":"[14112.1621 -9298.1748 -10009.5498]","846":"[13948.415 -9784.4004 -10009.6348]","847":"[13749.3965 -10264.6201 -10009.5947]","848":"[13517.0742 -10727.3047 -10009.7305]","849":"[13250.4453 -11168.4863 -10009.5859]","850":"[12949.2666 -11584.1318 -10009.6582]","851":"[12609.001 -11976.7246 -10009.5996]","852":"[12234.3291 -12338.2656 -10009.5176]","853":"[11835.7217 -12660.2539 -10009.6289]","854":"[11405.7607 -12950.9883 -10009.584]","855":"[10955.0449 -13204.416 -10009.5664]","856":"[10487.7158 -13421.2021 -10009.5576]","857":"[10008.2354 -13604.418 -10009.4814]","858":"[9512.2627 -13758.6416 -10009.4951]","859":"[9009.7461 -13882.9219 -10009.4512]","860":"[8502.751 -13979.9229 -10009.3066]","861":"[7992.9937 -14051.8525 -10009.3271]","862":"[7482.3994 -14102.6494 -10009.3154]","863":"[6963.1372 -14133.9053 -10009.5332]","864":"[6444.3555 -14146.625 -10009.4707]","865":"[5926.8608 -14149.1768 -10009.376]","866":"[5410.6499 -14148.9561 -10009.458]","867":"[4897.3267 -14149.2246 -10009.4551]","868":"[4377.0698 -14149.4893 -10009.4521]","869":"[3857.877 -14149.4688 -10009.4131]","870":"[3339.7473 -14149.1455 -10009.4844]","871":"[2822.7173 -14149.4912 -10009.5293]","872":"[2306.7639 -14149.2461 -10009.4951]","873":"[1792.0841 -14149.4678 -10009.4971]","874":"[1278.8464 -14149.1113 -10009.4561]","875":"[758.5356 -14149.1641 -10009.5029]","876":"[239.3907 -14149.3018 -10009.4834]","877":"[-278.6018 -14149.0088 -10009.3682]","878":"[-795.3325 -14149.5566 -10009.3721]","879":"[-1310.506 -14149.5879 -10009.4482]","880":"[-1824.5256 -14149.3545 -10009.4092]","881":"[-2337.3796 -14149.5137 -10009.334]","882":"[-2857.0452 -14145.5459 -10009.1553]","883":"[-3369.0566 -14121.3809 -10009.21]","884":"[-3885.0286 -14057.7402 -10009.5068]","885":"[-4389.6201 -13948.4346 -10009.3887]","886":"[-4875.6978 -13783.5557 -10009.5449]","887":"[-5338.8589 -13551.4668 -10009.458]","888":"[-5756.8359 -13252.8135 -10009.3096]","889":"[-6136.3262 -12908.9883 -10009.2656]","890":"[-6501.7832 -12541.498 -10009.3945]","891":"[-6868.397 -12177.1689 -10009.4707]","892":"[-7236.7852 -11809.3125 -10009.4482]","893":"[-7604.4761 -11440.7471 -10009.5039]","894":"[-7971.5039 -11073.0752 -10009.4395]","895":"[-8338.4502 -10706.8955 -10009.3672]","896":"[-8704.376 -10341.2988 -10009.4727]","897":"[-9069.1357 -9976.127 -10009.5254]","898":"[-9433.1035 -9611.7158 -10009.4668]","899":"[-9796.8633 -9248.6514 -10009.3574]","900":"[-10159.0811 -8885.5801 -10009.3359]","901":"[-10527.3506 -8518.0537 -10009.5459]","902":"[-10894.2041 -8150.7158 -10009.5156]","903":"[-11260.1113 -7784.7803 -10009.1895]","904":"[-11623.7188 -7419.9644 -10009.1367]","905":"[-11972.6445 -7045.1313 -10009.5137]","906":"[-12297.0205 -6648.4106 -10009.4199]","907":"[-12586.1338 -6225.5474 -10009.6416]","908":"[-12830.0195 -5769.2192 -10009.7764]","909":"[-13011.2246 -5288.9595 -10009.4326]","910":"[-13118.1143 -4782.5469 -10009.4258]","911":"[-13154.6826 -4267.9448 -10009.2373]","912":"[-13157.5332 -3752.9011 -10009.4756]","913":"[-13158.5283 -3239.0239 -10009.3076]","914":"[-13157.2891 -2726.2727 -10009.4639]","915":"[-13158.2744 -2206.3081 -10009.4697]","916":"[-13157.8125 -1687.4976 -10009.459]","917":"[-13158.0518 -1169.834 -10009.4551]","918":"[-13158.3564 -653.3178 -10009.3701]","919":"[-13148.5889 -136.3253 -10009.4023]","920":"[-13113.8047 380.1443 -10009.3916]","921":"[-13034.8721 888.5176 -10009.3584]","922":"[-12903.1963 1389.7212 -10009.4336]","923":"[-12711.8066 1866.8231 -10009.376]","924":"[-12450.4248 2314.1726 -10009.4785]","925":"[-12118.5693 2710.7363 -10009.3896]","926":"[-11730.5723 3036.8484 -10009.5566]","927":"[-11289.6895 3297.6455 -10009.4873]","928":"[-10809.3301 3492.7295 -10009.4092]","929":"[-10309.8301 3625.0835 -10009.4404]","930":"[-9800.9805 3705.29 -10009.2744]","931":"[-9289.1514 3741.8901 -10008.1494]","932":"[-8771.2686 3752.6987 -9990.3369]","933":"[-8258.4961 3751.4688 -9951.9688]","934":"[-7744.6553 3751.6489 -9898.5527]","935":"[-7233.062 3751.9626 -9839.9336]","936":"[-6720.8774 3752.7017 -9778.8184]","937":"[-6209.375 3751.9846 -9717.335]","938":"[-5698.3457 3752.127 -9656.6572]","939":"[-5184.4956 3752.6174 -9598.4287]","940":"[-4670.0283 3752.5195 -9546.6807]","941":"[-4156.3232 3752.2334 -9511.582]","942":"[-3638.3379 3745.1145 -9497.9932]","943":"[-3120.7 3725.678 -9497.457]","944":"[-2606.5117 3686.5984 -9497.4795]","945":"[-2090.4019 3625.7097 -9497.5273]","946":"[-1579.9265 3542.2866 -9497.5049]","947":"[-1076.1515 3434.2075 -9497.5869]","948":"[-580.7645 3298.2214 -9497.5801]","949":"[-96.0081 3133.208 -9497.3691]","950":"[382.5576 2933.887 -9497.459]","951":"[843.6133 2700.9502 -9497.5518]","952":"[1282.8044 2432.9888 -9497.6865]","953":"[1696.7711 2131.231 -9497.5557]","954":"[2087.7537 1790.6322 -9497.6289]","955":"[2444.5869 1419.6426 -9497.5273]","956":"[2770.2224 1014.0372 -9497.6006]","957":"[3058.8774 583.7493 -9497.458]","958":"[3310.9106 133.1951 -9497.5596]","959":"[3526.4312 -333.5839 -9497.5859]","960":"[3710.9299 -820.2642 -9497.4873]","961":"[3863.3833 -1315.9879 -9497.4629]","962":"[3986.4302 -1818.1268 -9497.3223]","963":"[4082.0205 -2324.6765 -9497.4707]","964":"[4153.1104 -2833.8198 -9497.3232]","965":"[4203.1543 -3343.7791 -9497.541]","966":"[4233.6704 -3862.2966 -9497.1992]","967":"[4244.4546 -4380.3359 -9497.4268]","968":"[4237.6367 -4893.3027 -9497.5049]","969":"[4212.4502 -5405.2329 -9497.3613]","970":"[4167.5879 -5922.8276 -9497.3262]","971":"[4100.8057 -6436.1851 -9497.4238]","972":"[4010.9551 -6943.5884 -9497.4238]","973":"[3895.9502 -7442.7231 -9497.3877]","974":"[3750.6738 -7940.9722 -9497.5371]","975":"[3574.7129 -8427.1484 -9497.4688]","976":"[3366.9666 -8898.4531 -9497.4727]","977":"[3125.9082 -9351.1191 -9497.5693]","978":"[2845.5161 -9787.8613 -9497.541]","979":"[2533.9077 -10194.251 -9497.5654]","980":"[2182.1985 -10578.0244 -9497.6094]","981":"[1798.9386 -10927.0732 -9497.5986]","982":"[1388.2037 -11239.9404 -9497.6895]","983":"[954.5222 -11516.585 -9497.6875]","984":"[501.7322 -11756.8711 -9497.4668]","985":"[26.2413 -11965.0039 -9497.6865]","986":"[-460.2421 -12139.4014 -9497.5039]","987":"[-955.1085 -12282.5244 -9497.5273]","988":"[-1455.8251 -12397.1855 -9497.4795]","989":"[-1960.2365 -12485.584 -9497.502]","990":"[-2474.822 -12551.7588 -9497.4346]","991":"[-2990.3979 -12596.1152 -9497.4287]","992":"[-3510.1792 -12621.248 -9497.4668]","993":"[-4022.5647 -12627.5381 -9497.4092]","994":"[-4542.209 -12615.71 -9497.4316]","995":"[-5059.5938 -12584.4932 -9497.5479]","996":"[-5574.1196 -12533.9785 -9497.3828]","997":"[-6083.9253 -12460.9434 -9497.3779]","998":"[-6587.3911 -12364.4922 -9497.2988]","999":"[-7091.2075 -12239.7666 -9497.5234]","1000":"[-7584.7642 -12086.8223 -9497.4609]","1001":"[-8065.1719 -11902.8623 -9497.5127]","1002":"[-8529.9766 -11686.9424 -9497.5449]","1003":"[-8982.1641 -11432.6094 -9497.6377]","1004":"[-9410.8027 -11142.8779 -9497.6533]","1005":"[-9815.2197 -10815.4014 -9497.6211]","1006":"[-10188.0938 -10455.5049 -9497.5908]","1007":"[-10525.9043 -10065.3584 -9497.7041]","1008":"[-10827.3281 -9649.2676 -9497.5039]","1009":"[-11096.2744 -9203.9473 -9497.5391]","1010":"[-11328.1455 -8740.374 -9497.6758]","1011":"[-11525.5166 -8262.9766 -9497.4609]","1012":"[-11689.291 -7774.8169 -9497.5762]","1013":"[-11823.4121 -7279.5137 -9497.4512]","1014":"[-11931.0898 -6770.7842 -9497.4775]","1015":"[-12013.4512 -6258.7954 -9497.4111]","1016":"[-12072.1992 -5744.9956 -9497.3926]","1017":"[-12110.5527 -5225.9595 -9497.415]","1018":"[-12129.4814 -4706.1411 -9497.1367]","1019":"[-12135.1621 -4186.9258 -9482.0732]","1020":"[-12134.6348 -3672.4766 -9446.7803]","1021":"[-12134.623 -3159.2085 -9394.4287]","1022":"[-12135.2041 -2647.4822 -9336.2705]","1023":"[-12135.2959 -2135.0886 -9275.3096]","1024":"[-12135.3506 -1623.4022 -9213.1748]","1025":"[-12135.5879 -1111.9685 -9150.5762]","1026":"[-12135.6514 -599.2625 -9087.6328]","1027":"[-12135.6689 -88.2999 -9024.8945]","1028":"[-12135.5801 423.2002 -8962.0898]","1029":"[-12135.0654 935.9566 -8899.1338]","1030":"[-12135.3242 1446.9442 -8836.3311]","1031":"[-12134.9219 1958.481 -8773.6162]","1032":"[-12135.4395 2470.6338 -8711.459]","1033":"[-12135.6768 2982.3157 -8650.5107]","1034":"[-12135.4492 3495.6199 -8592.2676]","1035":"[-12135.2988 4008.2268 -8539.9023]","1036":"[-12135.251 4524.77 -8503.0342]","1037":"[-12123.1992 5043.3364 -8488.2031]","1038":"[-12083.6445 5559.5747 -8486.9883]","1039":"[-11999.5527 6066.8105 -8486.7012]","1040":"[-11861.4492 6566.4644 -8486.7314]","1041":"[-11660.9668 7044.2876 -8486.6934]","1042":"[-11392.4189 7482.6855 -8486.832]","1043":"[-11051.4668 7872.9736 -8486.8955]","1044":"[-10651.1777 8195.6074 -8486.8896]","1045":"[-10198.6455 8450.1924 -8486.7891]","1046":"[-9715.627 8635.5039 -8486.6787]","1047":"[-9218.625 8758.7773 -8486.7549]","1048":"[-8704.8711 8832.8701 -8486.7002]","1049":"[-8188.583 8864.5176 -8486.2969]","1050":"[-7673.3057 8872.9258 -8486.291]","1051":"[-7160.9326 8871.0488 -8486.4512]","1052":"[-6641.229 8871.6953 -8486.3477]","1053":"[-6122.7256 8872.707 -8486.4785]","1054":"[-5605.4355 8872.0869 -8486.4756]","1055":"[-5089.3208 8871.5137 -8486.4609]","1056":"[-4574.3628 8871.8945 -8486.46]","1057":"[-4060.5479 8871.792 -8486.4941]","1058":"[-3547.8694 8871.7861 -8486.4121]","1059":"[-3027.9783 8872.0723 -8486.4424]","1060":"[-2509.2668 8871.6963 -8486.5322]","1061":"[-1991.7151 8872.0596 -8486.4795]","1062":"[-1475.3446 8871.9746 -8486.5127]","1063":"[-957.7928 8872.2813 -8486.4336]","1064":"[-437.4679 8871.6787 -8486.5322]","1065":"[81.7649 8871.6572 -8486.501]","1066":"[599.8956 8872.1641 -8486.4355]","1067":"[1116.9335 8871.7158 -8486.4443]","1068":"[1632.8992 8871.6543 -8486.4756]","1069":"[2147.811 8871.7402 -8486.3604]","1070":"[2661.6399 8872.2363 -8486.46]","1071":"[3174.4126 8871.5107 -8486.4541]","1072":"[3694.6252 8871.627 -8486.4541]","1073":"[4213.7095 8870.9648 -8486.3662]","1074":"[4731.3848 8860.5762 -8486.4424]","1075":"[5247.0127 8834.3105 -8486.4893]","1076":"[5759.5249 8788.2793 -8486.3867]","1077":"[6268 8721.4736 -8486.3936]","1078":"[6779.3994 8629.458 -8486.4658]","1079":"[7283.5835 8511.666 -8486.584]","1080":"[7781.4116 8364.2422 -8486.3818]","1081":"[8269.2178 8185.5571 -8486.6201]","1082":"[8741.5527 7974.2539 -8486.6455]","1083":"[9195.0752 7729.166 -8486.6309]","1084":"[9625.6641 7449.478 -8486.5762]","1085":"[10035.916 7130.1694 -8486.5137]","1086":"[10414.8115 6777.5537 -8486.6455]","1087":"[10759.4668 6394.5498 -8486.543]","1088":"[11068.3291 5985.0396 -8486.6953]","1089":"[11344.4785 5545.5815 -8486.6777]","1090":"[11582.8584 5089.8164 -8486.5771]","1091":"[11786.4131 4619.3267 -8486.459]","1092":"[11959.5 4129.2031 -8486.4863]","1093":"[12101.0889 3630.8848 -8486.4629]","1094":"[12214.3604 3126.917 -8486.4619]","1095":"[12301.6221 2619.5767 -8486.3232]","1096":"[12365.1641 2109.9993 -8486.3506]","1097":"[12407.4893 1599.4766 -8486.5313]","1098":"[12431.1777 1081.2227 -8486.4482]","1099":"[12439.1494 566.1353 -8475.4961]","1100":"[12439.5762 49.2818 -8444.7363]","1101":"[12440.2686 -463.5329 -8394.6152]","1102":"[12440.0381 -975.0377 -8337.2266]","1103":"[12439.8975 -1488.2159 -8276.6621]","1104":"[12440.2451 -1998.7141 -8214.7725]","1105":"[12439.9355 -2510.5012 -8152.1396]","1106":"[12440.4951 -3022.5979 -8089.249]","1107":"[12440.6221 -3534.0842 -8026.4482]","1108":"[12439.5742 -4045.707 -7963.6289]","1109":"[12440.5449 -4558.9424 -7900.6123]","1110":"[12440.4746 -5070.4116 -7837.8569]","1111":"[12440.5771 -5582.0195 -7775.0205]","1112":"[12439.9785 -6094.5034 -7712.6763]","1113":"[12440.6045 -6605.1587 -7651.5503]","1114":"[12440.5684 -7117.6431 -7592.4746]","1115":"[12440.2744 -7631.2612 -7538.2397]","1116":"[12439.8975 -8146.5771 -7497.0669]","1117":"[12432.2412 -8663.8193 -7478.0786]","1118":"[12401.5117 -9177.4502 -7474.9985]","1119":"[12326.2871 -9688.4932 -7475.2544]","1120":"[12201.2471 -10185.5547 -7475.2441]","1121":"[12016.3125 -10666.9111 -7475.5923]","1122":"[11761.2295 -11118.8389 -7475.4697]","1123":"[11437.9854 -11519.0586 -7475.4565]","1124":"[11049.0342 -11857.5049 -7475.478]","1125":"[10611.8564 -12124.8096 -7475.4175]","1126":"[10133.792 -12325.5186 -7475.5103]","1127":"[9635.7734 -12462.8389 -7475.1914]","1128":"[9128.208 -12547.0088 -7475.2466]","1129":"[8616.9492 -12587.3066 -7475.1978]","1130":"[8097.2183 -12599.4072 -7475.4253]","1131":"[7578.4512 -12599.0479 -7475.4478]","1132":"[7060.8389 -12599.0654 -7475.4526]","1133":"[6544.3574 -12599.5908 -7475.4512]","1134":"[6025.1484 -12599.8506 -7475.4507]","1135":"[5504.6724 -12599.1738 -7475.4756]","1136":"[4985.2661 -12599.3408 -7475.439]","1137":"[4466.9497 -12599.334 -7475.4487]","1138":"[3949.7292 -12599.6084 -7475.4155]","1139":"[3433.615 -12599.0449 -7475.5]","1140":"[2918.592 -12599.1201 -7475.4209]","1141":"[2404.8145 -12599.791 -7475.4712]","1142":"[1892.5146 -12599.4531 -7475.4141]","1143":"[1373.275 -12599.4785 -7475.4541]","1144":"[855.1445 -12599.4639 -7475.4521]","1145":"[338.1243 -12599.6113 -7475.4521]","1146":"[-177.7817 -12599.5254 -7475.4517]","1147":"[-692.5881 -12599.6406 -7475.5244]","1148":"[-1206.2775 -12599.0791 -7475.5]","1149":"[-1718.8525 -12599.9385 -7475.4365]","1150":"[-2238.6372 -12599.3916 -7475.3555]","1151":"[-2756.8574 -12599.5596 -7475.4561]","1152":"[-3273.4893 -12599.3564 -7475.4771]","1153":"[-3785.5156 -12599.3086 -7475.333]","1154":"[-4305.5469 -12599.0801 -7475.4097]","1155":"[-4824.5347 -12599.8604 -7475.3853]","1156":"[-5342.4102 -12599.2021 -7475.3657]","1157":"[-5858.8618 -12598.9014 -7475.4448]","1158":"[-6374.2271 -12598.1777 -7475.5352]","1159":"[-6887.9829 -12586.0313 -7475.4111]","1160":"[-7406.0405 -12543.5264 -7475.3613]","1161":"[-7917.6323 -12463.5205 -7475.561]","1162":"[-8424.6963 -12365.5596 -7475.3369]","1163":"[-8931.6211 -12284.0293 -7475.6206]","1164":"[-9448.1533 -12233.0039 -7475.5239]","1165":"[-9965.458 -12216.1104 -7475.3643]","1166":"[-10481.7803 -12215.084 -7475.501]","1167":"[-10997.0938 -12215.1367 -7475.457]","1168":"[-11517.4121 -12214.5781 -7475.543]","1169":"[-12036.6123 -12214.334 -7475.2964]","1170":"[-12554.7129 -12215.4385 -7475.4966]","1171":"[-13072.0488 -12208.2891 -7477.6685]","1172":"[-13586.8535 -12169.7979 -7481.1782]","1173":"[-14090.6455 -12068.5283 -7485.9712]","1174":"[-14574.1719 -11881.1494 -7489.3345]","1175":"[-14855.4658 -11710.4297 -7490.6753]","1176":"[-15138.3838 -11462.0869 -7491.0649]","1177":"[-15345.4688 -11202.8398 -7490.4692]","1178":"[-15543.1533 -10840.1328 -7488.3892]","1179":"[-15684.1475 -10419.5537 -7485.314]","1180":"[-15774.9023 -9913.166 -7480.5132]","1181":"[-15807.5205 -9401.3184 -7476.8501]","1182":"[-15813.0781 -8884.2607 -7475.0591]","1183":"[-15811.9053 -8369.7734 -7475.0674]","1184":"[-15812.6445 -7856.3789 -7475.064]","1185":"[-15812.5508 -7344.0625 -7475.0566]","1186":"[-15812.7158 -6824.2881 -7475.0947]","1187":"[-15811.8555 -6305.5967 -7474.9629]","1188":"[-15812.1504 -5788.0645 -7475.0977]","1189":"[-15807.2188 -5271.3086 -7477.1274]","1190":"[-15770.5732 -4756.7607 -7480.9077]","1191":"[-15671.9658 -4251.1489 -7485.6509]","1192":"[-15492.5918 -3770.9138 -7489.1294]","1193":"[-15318.3984 -3475.9656 -7490.4956]","1194":"[-15081.2607 -3199.2346 -7491.0063]","1195":"[-14816.7813 -2982.1997 -7490.5205]","1196":"[-14475.2412 -2790.126 -7488.8154]","1197":"[-14036.8105 -2636.3994 -7485.4351]","1198":"[-13525.2705 -2542.3088 -7480.6133]","1199":"[-13009.1602 -2509.394 -7476.9575]","1200":"[-12497.0342 -2502.8403 -7475.0767]","1201":"[-11979.5654 -2504.1177 -7475.0703]","1202":"[-11463.2695 -2503.7754 -7475.1514]","1203":"[-10948.1348 -2502.9795 -7475.0278]","1204":"[-10434.1172 -2504.1245 -7475.0679]","1205":"[-9921.2236 -2503.4956 -7475.1265]","1206":"[-9401.0488 -2503.4114 -7475.1152]","1207":"[-8882.041 -2503.6067 -7474.978]","1208":"[-8364.1953 -2503.4331 -7475.063]","1209":"[-7847.5249 -2504.1919 -7475.0508]","1210":"[-7332.7236 -2503.1479 -7475.0317]","1211":"[-6812.1123 -2504.0801 -7475.0806]","1212":"[-6292.6348 -2502.8916 -7475.0811]","1213":"[-5774.2729 -2503.8955 -7475.0479]","1214":"[-5256.9902 -2503.5625 -7475.0298]","1215":"[-4740.7861 -2503.9854 -7475.0137]","1216":"[-4225.729 -2502.7783 -7475.0747]","1217":"[-3711.8232 -2503.9419 -7475.0474]","1218":"[-3199.0142 -2503.4333 -7475.1104]","1219":"[-2678.7419 -2504.0217 -7475.0884]","1220":"[-2159.5818 -2503.1196 -7475.0732]","1221":"[-1641.566 -2503.8425 -7475.0747]","1222":"[-1124.7019 -2503.4026 -7475.0454]","1223":"[-608.9527 -2503.8132 -7475.0137]","1224":"[-94.3149 -2503.999 -7475.0728]","1225":"[419.2049 -2503.2422 -7475.1021]","1226":"[931.5927 -2504.0764 -7475.0054]","1227":"[1451.2319 -2503.2964 -7475.0713]","1228":"[1969.7103 -2503.7266 -7475.0718]","1229":"[2487.0193 -2503.7583 -7475.0728]","1230":"[3003.135 -2503.3887 -7475.0342]","1231":"[3522.0168 -2503.7036 -7475.0801]","1232":"[4042.1028 -2503.5732 -7475.0796]","1233":"[4559.7578 -2495.0078 -7475.0361]","1234":"[5073.5205 -2463.199 -7475.1885]","1235":"[5580.189 -2388.9014 -7475.2417]","1236":"[6082.7065 -2263.5154 -7475.3022]","1237":"[6563.5537 -2080.5879 -7475.125]","1238":"[7017.5039 -1829.17 -7474.7285]","1239":"[7424.0381 -1512.296 -7474.9751]","1240":"[7802.3862 -1155.4811 -7475.1108]","1241":"[8168.8262 -786.8887 -7475.0991]","1242":"[8535.0654 -419.7356 -7475.0952]","1243":"[8901.876 -54.7823 -7475.0776]","1244":"[9266.5889 310.6848 -7475.1128]","1245":"[9630.8213 675.0805 -7474.9712]","1246":"[9994.5889 1038.4017 -7475.0703]","1247":"[10357.3027 1401.2654 -7475.1069]","1248":"[10724.875 1769.8229 -7475.1553]","1249":"[11092.6953 2136.5269 -7475.0859]","1250":"[11458.7764 2503.3711 -7475.064]","1251":"[11824.9189 2868.561 -7475.1143]","1252":"[12189.5234 3233.6975 -7475.125]","1253":"[12553.8242 3597.5403 -7474.9517]","1254":"[12916.7861 3961.1238 -7475.0645]","1255":"[13279.0293 4323.834 -7475.1187]","1256":"[13647.7031 4690.3457 -7475.1211]","1257":"[14010.2129 5059.4282 -7474.6572]","1258":"[14356.9531 5439.2749 -7474.2188]","1259":"[14675.1514 5843.1025 -7474.4409]","1260":"[14953.4775 6276.0581 -7474.4263]","1261":"[15178.1318 6744.478 -7474.4819]","1262":"[15327.6602 7237.7993 -7473.5093]","1263":"[15396.9775 7750.8496 -7468.584]","1264":"[15381.6758 8270.585 -7456.1172]","1265":"[15278.3848 8772.126 -7435.7705]","1266":"[15095.9922 9252.2041 -7406.9556]","1267":"[14852.9756 9708.2266 -7368.6841]","1268":"[14566.8584 10139.4365 -7320.0737]","1269":"[14245.7842 10541.6221 -7263.0894]","1270":"[13899.1533 10915.1895 -7202.7324]","1271":"[13538.8066 11279.4316 -7141.3804]","1272":"[13178.4648 11641.6201 -7082.3428]","1273":"[12814.1582 12004.8604 -7027.623]","1274":"[12449.582 12368.3965 -6985.5952]","1275":"[12078.46 12726.1143 -6965.6323]","1276":"[11683.2705 13063.1025 -6962.0635]","1277":"[11253.707 13346.333 -6962.3726]","1278":"[10782.3809 13560.4727 -6962.5298]","1279":"[10374.2725 13665.3457 -6962.4971]","1280":"[9974.3154 13695.6621 -6962.3901]","1281":"[9610.6396 13659.4219 -6962.4219]","1282":"[9149.166 13529.3105 -6962.5098]","1283":"[8725.5195 13324.7998 -6962.3545]","1284":"[8295.7393 13033.4932 -6962.2988]","1285":"[7903.5322 12695.3916 -6962.4912]","1286":"[7533.4258 12337.7988 -6957.7163]","1287":"[7169.6577 11972.6533 -6934.3564]","1288":"[6806.8657 11609.7305 -6889.3706]","1289":"[6444.2139 11247.3818 -6833.7998]","1290":"[6082.6147 10885.9824 -6774.1826]","1291":"[5721.0747 10523.9033 -6712.6001]","1292":"[5359.5591 10161.7051 -6649.7515]","1293":"[4998.0562 9800.7979 -6587.0444]","1294":"[4636.4453 9438.584 -6524.1855]","1295":"[4274.5244 9077.3926 -6461.4004]","1296":"[3913.2861 8716.2139 -6398.6797]","1297":"[3551.6716 8353.9844 -6335.8193]","1298":"[3189.1072 7991.7944 -6272.9482]","1299":"[2827.8174 7630.7861 -6210.2261]","1300":"[2465.9988 7267.9873 -6147.7793]","1301":"[2103.636 6906.5981 -6086.7607]","1302":"[1742.71 6545.5005 -6027.8755]","1303":"[1379.9342 6181.8491 -5973.9829]","1304":"[1016.3318 5818.6958 -5933.4092]","1305":"[632.4696 5467.6372 -5914.812]","1306":"[213.0132 5160.1064 -5912.52]","1307":"[-245.1044 4926.8213 -5912.4746]","1308":"[-735.4808 4757.6641 -5912.5151]","1309":"[-1242.9271 4645.0601 -5912.3057]","1310":"[-1758.6414 4580.6885 -5912.5146]","1311":"[-2275.4065 4561.9521 -5912.1421]","1312":"[-2787.8271 4592.5854 -5912.3975]","1313":"[-3295.9705 4685.8203 -5912.7393]","1314":"[-3783.4761 4847.3901 -5913.0034]","1315":"[-4222.3301 5084.2275 -5913.3804]","1316":"[-4502.0313 5306.1992 -5913.3218]","1317":"[-4790.8447 5632.7769 -5913.293]","1318":"[-4996.4272 5968.5845 -5913.0894]","1319":"[-5187.1626 6445.3213 -5912.7573]","1320":"[-5302.9858 6949.3901 -5912.4858]","1321":"[-5356.8818 7458.7178 -5912.3984]","1322":"[-5372.6099 7976.2944 -5912.4907]","1323":"[-5371.3794 8496.4346 -5912.3945]","1324":"[-5372.6499 9008.6924 -5912.5098]","1325":"[-5372.7178 9528.4961 -5912.5151]","1326":"[-5378.7891 10046.9453 -5912.3599]","1327":"[-5409.8965 10562.4502 -5912.4243]","1328":"[-5483.7349 11071.0625 -5911.9414]","1329":"[-5608.3486 11574.0273 -5912.2666]","1330":"[-5791.6987 12054.4346 -5912.5537]","1331":"[-6045.1812 12507.0254 -5912.5996]","1332":"[-6367.0137 12908.0361 -5912.4795]","1333":"[-6756.4766 13249.6084 -5912.5923]","1334":"[-7194.4858 13518.1455 -5912.6235]","1335":"[-7670.7676 13719.2754 -5912.4731]","1336":"[-8167.1743 13858.042 -5912.2144]","1337":"[-8673.9258 13942.8145 -5912.3574]","1338":"[-9184.5381 13983.4189 -5912.2949]","1339":"[-9703.7813 13989.3584 -5912.4736]","1340":"[-10220.1416 13959.8936 -5912.3828]","1341":"[-10729.5713 13889.7031 -5912.3555]","1342":"[-11234.502 13767.4873 -5912.4312]","1343":"[-11719.3086 13585.5293 -5912.4932]","1344":"[-12173.5332 13335.0439 -5912.5474]","1345":"[-12577.0801 13015.9541 -5912.5059]","1346":"[-12921.7109 12628.5264 -5912.606]","1347":"[-13194.1758 12191.3613 -5912.4434]","1348":"[-13396.4229 11720.4961 -5912.3301]","1349":"[-13538.0859 11221.6123 -5912.3086]","1350":"[-13625.0645 10715.7783 -5912.2734]","1351":"[-13667.7012 10203.8496 -5912.0449]","1352":"[-13680.5654 9690.2178 -5897.3423]","1353":"[-13680.5703 9173.5342 -5862.1558]","1354":"[-13681.1055 8660.6406 -5810.0557]","1355":"[-13680.8477 8148.4497 -5751.8901]","1356":"[-13681.0928 7636.2495 -5691.001]","1357":"[-13681.1963 7125.1997 -5628.9517]","1358":"[-13680.3125 6613.6909 -5566.4023]","1359":"[-13680.7539 6101.7573 -5503.584]","1360":"[-13680.3564 5589.73 -5440.7637]","1361":"[-13680.8594 5078.3169 -5377.958]","1362":"[-13680.7012 4566.3936 -5315.106]","1363":"[-13680.6875 4054.3464 -5252.2324]","1364":"[-13680.9209 3542.9294 -5189.4067]","1365":"[-13680.3271 3032.0874 -5126.7524]","1366":"[-13681 2520.0098 -5063.9355]","1367":"[-13680.9941 2008.1211 -5001.6831]","1368":"[-13680.1943 1496.6819 -4940.96]","1369":"[-13680.5078 983.0609 -4882.354]","1370":"[-13680.6992 470.1623 -4829.8784]","1371":"[-13680.7461 -44.2031 -4793.0054]","1372":"[-13680.7686 -559.2672 -4777.8662]","1373":"[-13680.5693 -1077.2634 -4776.4785]","1374":"[-13680.1191 -1593.8879 -4776.4873]","1375":"[-13680.9082 -2109.3594 -4776.4243]","1376":"[-13680.6943 -2623.708 -4776.4614]","1377":"[-13681.1973 -3136.959 -4776.4531]","1378":"[-13680.4404 -3649.1475 -4776.4502]","1379":"[-13680.5488 -4168.7729 -4776.4526]","1380":"[-13680.6719 -4687.2886 -4776.4526]","1381":"[-13681.0303 -5204.6851 -4776.4502]","1382":"[-13680.3408 -5720.9736 -4776.48]","1383":"[-13680.6953 -6236.1299 -4776.436]","1384":"[-13680.6104 -6750.1616 -4776.4443]","1385":"[-13680.292 -7262.9951 -4776.376]","1386":"[-13674.3398 -7782.5894 -4776.3369]","1387":"[-13653.4561 -8300.3877 -4776.2944]","1388":"[-13614.7959 -8815.8232 -4776.3633]","1389":"[-13554.1094 -9327.7236 -4776.4702]","1390":"[-13470.8496 -9834.9512 -4776.4458]","1391":"[-13361.3418 -10343.6992 -4776.6499]","1392":"[-13224.7168 -10842.0166 -4776.5952]","1393":"[-13058.3818 -11329.5254 -4776.521]","1394":"[-12860.0449 -11803.0635 -4776.4756]","1395":"[-12624.8096 -12266.8799 -4776.563]","1396":"[-12354.6982 -12708.7275 -4776.5103]","1397":"[-12049.6768 -13124.4834 -4776.6216]","1398":"[-11711.4326 -13510.7363 -4776.563]","1399":"[-11336.0088 -13869.9072 -4776.7188]","1400":"[-10931.9844 -14192.9043 -4776.6074]","1401":"[-10503.6387 -14478.9756 -4776.7285]","1402":"[-10052.9541 -14729.5098 -4776.6392]","1403":"[-9583.2148 -14946.2676 -4776.5679]","1404":"[-9100.9346 -15128.7529 -4776.6582]","1405":"[-8609.3779 -15279.1768 -4776.5161]","1406":"[-8111.4077 -15400.6318 -4776.4629]","1407":"[-7600.9043 -15497.4014 -4776.3867]","1408":"[-7087.7139 -15569.2646 -4776.4692]","1409":"[-6573.314 -15618.8564 -4776.3721]","1410":"[-6058.7134 -15648.5117 -4776.3804]","1411":"[-5544.6519 -15659.9551 -4776.458]","1412":"[-5031.6772 -15663.501 -4776.3174]","1413":"[-4511.4878 -15662.8545 -4776.4497]","1414":"[-3992.7014 -15662.7461 -4776.4863]","1415":"[-3475.4731 -15663.0479 -4776.271]","1416":"[-2955.1846 -15662.9131 -4776.4863]","1417":"[-2443.0366 -15663.1426 -4776.4648]","1418":"[-1923.2946 -15663.1738 -4776.4688]","1419":"[-1404.6556 -15662.8281 -4776.4712]","1420":"[-887.0888 -15663.0918 -4776.4761]","1421":"[-370.6032 -15662.9121 -4776.5527]","1422":"[144.7945 -15663.5508 -4776.5156]","1423":"[659.0933 -15663.1582 -4776.5029]","1424":"[1172.3439 -15662.9365 -4776.498]","1425":"[1684.4738 -15663.4307 -4776.5313]","1426":"[2204.0464 -15662.8047 -4776.5054]","1427":"[2722.479 -15662.6123 -4776.3647]","1428":"[3239.783 -15663.0742 -4776.3828]","1429":"[3755.6643 -15662.6123 -4776.52]","1430":"[4270.1494 -15662.7119 -4776.4102]","1431":"[4782.9146 -15659.2227 -4776.3662]","1432":"[5301.0796 -15634.7197 -4776.041]","1433":"[5812.8438 -15570.1494 -4776.3945]","1434":"[6313.1851 -15458.8604 -4776.3584]","1435":"[6803.6587 -15287.7246 -4776.5977]","1436":"[7264.7173 -15049.1934 -4776.4927]","1437":"[7677.4834 -14741.5117 -4776.5928]","1438":"[8033.3105 -14364.0605 -4776.5415]","1439":"[8317.1025 -13934.8145 -4776.3872]","1440":"[8533.3975 -13461.9473 -4776.5845]","1441":"[8683.8564 -12966.541 -4776.5181]","1442":"[8779.2451 -12456.5645 -4776.3882]","1443":"[8827.5957 -11946.3369 -4776.4365]","1444":"[8843.7197 -11426.6201 -4776.5]","1445":"[8845.4326 -10907.8457 -4776.4834]","1446":"[8845.2051 -10390.1982 -4776.5073]","1447":"[8844.8789 -9873.6934 -4776.5107]","1448":"[8844.5459 -9358.3438 -4776.5176]","1449":"[8844.3721 -8844.126 -4776.4668]","1450":"[8845.0537 -8331.0244 -4776.46]","1451":"[8844.9531 -7810.646 -4776.4541]","1452":"[8844.9209 -7291.4048 -4776.4531]","1453":"[8844.5742 -6773.3032 -4776.438]","1454":"[8844.5537 -6256.3486 -4776.4697]","1455":"[8844.6836 -5743.9331 -4776.4473]","1456":"[8844.0586 -5231.7178 -4776.4751]","1457":"[8844.9209 -4711.9121 -4776.4502]","1458":"[8844.2568 -4193.1924 -4776.4546]","1459":"[8844.8662 -3675.543 -4776.4531]","1460":"[8844.6523 -3158.9827 -4776.4526]","1461":"[8844.9961 -2643.5015 -4776.4561]","1462":"[8844.8232 -2129.0793 -4776.4795]","1463":"[8844.1748 -1615.7401 -4776.4565]","1464":"[8845.0469 -1103.4763 -4776.4736]","1465":"[8844.3496 -583.7855 -4776.4722]","1466":"[8844.6328 -65.1935 -4776.4634]","1467":"[8844.5859 452.3054 -4776.457]","1468":"[8844.2715 968.7048 -4776.4536]","1469":"[8844.6631 1483.9921 -4776.4648]","1470":"[8844.6934 1998.1698 -4776.4644]","1471":"[8844.5361 2511.2336 -4776.397]","1472":"[8844.5 3031.5759 -4776.4648]","1473":"[8845.2441 3550.7517 -4776.4619]","1474":"[8844.3984 4068.7771 -4776.4561]","1475":"[8844.9668 4585.6626 -4776.4531]","1476":"[8844.8516 5103.2852 -4776.4517]","1477":"[8844.1738 5615.4531 -4776.4839]","1478":"[8844.9248 6135.2139 -4776.4731]","1479":"[8845.1172 6653.8628 -4776.4585]","1480":"[8844.3867 7171.4033 -4776.4219]","1481":"[8844.3906 7687.6523 -4776.5005]","1482":"[8830.9219 8201.6953 -4776.356]","1483":"[8788.208 8712.0098 -4776.3887]","1484":"[8699.877 9222.9482 -4776.2568]","1485":"[8557.5938 9718.167 -4776.2588]","1486":"[8350.0215 10194.8223 -4776.4492]","1487":"[8074.8828 10630.9795 -4776.522]","1488":"[7727.019 11016.9072 -4776.5977]","1489":"[7320.6499 11334.252 -4776.6362]","1490":"[6866.7876 11581.3848 -4776.5669]","1491":"[6381.9116 11760.1855 -4776.4224]","1492":"[5880.9844 11879.5254 -4776.3716]","1493":"[5372.3403 11948.7451 -4776.3652]","1494":"[4852.8301 11977.876 -4776.4453]","1495":"[4333.6304 11984.9395 -4776.416]","1496":"[3815.6372 11984.1387 -4776.4727]","1497":"[3298.8506 11983.4492 -4776.4902]","1498":"[2786.2173 11983.7334 -4776.5132]","1499":"[2266.333 11983.5859 -4776.418]","1500":"[1747.8673 11983.1016 -4776.5288]","1501":"[1230.5017 11983.1182 -4776.5093]","1502":"[714.2642 11983.5195 -4776.4561]","1503":"[199.1222 11982.7549 -4776.4561]","1504":"[-314.9344 11983.1387 -4776.4531]","1505":"[-827.9122 11982.8799 -4776.4526]","1506":"[-1348.3519 11982.7432 -4776.4727]","1507":"[-1867.662 11982.9365 -4776.4102]","1508":"[-2385.8464 11983.6182 -4776.4697]","1509":"[-2902.9214 11982.8408 -4776.5293]","1510":"[-3418.8804 11983.3848 -4776.4219]","1511":"[-3933.6724 11982.6904 -4776.4521]","1512":"[-4447.3364 11983.3994 -4776.4517]","1513":"[-4959.8823 11982.9258 -4776.4497]","1514":"[-5475.0205 11982.7275 -4770.168]","1515":"[-5990.9111 11983.0361 -4744.0493]","1516":"[-6504.6069 11982.7998 -4697.4526]","1517":"[-7017.8696 11982.9473 -4641.3359]","1518":"[-7529.6963 11983.3096 -4581.3296]","1519":"[-8042.0327 11982.8838 -4519.7505]","1520":"[-8552.9482 11982.876 -4458.7314]","1521":"[-9063.6406 11982.8145 -4398.9629]","1522":"[-9577.5049 11983.0781 -4342.8672]","1523":"[-10091.7676 11982.9883 -4295.7959]","1524":"[-10609.5713 11982.3809 -4270.4033]","1525":"[-11125.0898 11983.0879 -4263.5781]","1526":"[-11642.25 11980.4639 -4263.4194]","1527":"[-12156.5732 11956.5645 -4263.2891]","1528":"[-12673.0801 11893.9102 -4263.106]","1529":"[-13177.8877 11784.7939 -4263.4971]","1530":"[-13663.1484 11618.8057 -4263.4917]","1531":"[-14124.4561 11384.8145 -4263.4224]","1532":"[-14538.6211 11082.4111 -4263.563]","1533":"[-14897.127 10710.2871 -4263.6602]","1534":"[-15188.3809 10279.8682 -4263.3682]","1535":"[-15407.3047 9811.7461 -4263.3599]","1536":"[-15560.9023 9320.5 -4263.4048]","1537":"[-15658.5635 8816.9932 -4263.3555]","1538":"[-15710.9639 8299.8965 -4263.4253]","1539":"[-15727.708 7781.7007 -4263.4233]","1540":"[-15729.4375 7264.3877 -4263.5293]","1541":"[-15729.9092 6748.2598 -4263.5278]","1542":"[-15729.585 6232.0327 -4263.5313]","1543":"[-15726.0156 5712.0479 -4263.5688]","1544":"[-15713.2432 5193.5391 -4263.2803]","1545":"[-15679.5195 4677.2563 -4263.4736]","1546":"[-15626.6191 4163.9468 -4263.5]","1547":"[-15552.4092 3654.6555 -4263.4082]","1548":"[-15453.4561 3150.9734 -4263.5503]","1549":"[-15326.1416 2646.4219 -4263.5317]","1550":"[-15168.9512 2152.0334 -4263.5508]","1551":"[-14981.377 1670.2914 -4263.668]","1552":"[-14760.6563 1204.9515 -4263.3989]","1553":"[-14505.6689 759.7989 -4263.5459]","1554":"[-14211.5986 331.8753 -4263.6191]","1555":"[-13883.3721 -67.4946 -4263.5444]","1556":"[-13522.7637 -434.3782 -4263.6304]","1557":"[-13133.0459 -766.6641 -4263.6147]","1558":"[-12714.9443 -1065.8279 -4263.6416]","1559":"[-12273.2813 -1329.4893 -4263.5654]","1560":"[-11813.9971 -1556.4985 -4263.5479]","1561":"[-11333.4229 -1752.6769 -4263.6465]","1562":"[-10842.4482 -1915.9412 -4263.5405]","1563":"[-10343.9336 -2048.2563 -4263.46]","1564":"[-9840.5098 -2153.4124 -4263.4595]","1565":"[-9333.917 -2233.1418 -4263.3921]","1566":"[-8817.332 -2291.2632 -4263.4146]","1567":"[-8300.2188 -2328.356 -4263.3789]","1568":"[-7783.4575 -2346.5342 -4263.4648]","1569":"[-7266.0884 -2351.6436 -4263.3687]","1570":"[-6753.8994 -2351.0286 -4263.4673]","1571":"[-6234.146 -2352.1458 -4263.4912]","1572":"[-5715.5049 -2351.844 -4263.4702]","1573":"[-5197.9683 -2351.9211 -4263.459]","1574":"[-4681.4937 -2351.6729 -4263.4551]","1575":"[-4166.0894 -2351.4878 -4263.4307]","1576":"[-3651.7522 -2351.4478 -4263.459]","1577":"[-3138.4978 -2351.6382 -4263.4678]","1578":"[-2626.3521 -2352.2695 -4263.4873]","1579":"[-2106.9841 -2351.8303 -4263.5562]","1580":"[-1589.193 -2351.6917 -4263.5161]","1581":"[-1072.8927 -2351.9451 -4263.46]","1582":"[-557.7775 -2351.6667 -4263.4229]","1583":"[-44.2845 -2351.9807 -4263.4688]","1584":"[468.1249 -2351.5928 -4263.4648]","1585":"[987.715 -2351.856 -4263.4946]","1586":"[1505.7214 -2351.9927 -4263.3354]","1587":"[2022.4138 -2352.2434 -4263.3301]","1588":"[2539.1086 -2351.5474 -4263.3853]","1589":"[3059.675 -2351.7654 -4263.4009]","1590":"[3579.1533 -2351.9482 -4263.4561]","1591":"[4097.5547 -2351.4412 -4263.4854]","1592":"[4614.4492 -2352.2847 -4263.5576]","1593":"[5130.2295 -2352.4272 -4263.459]","1594":"[5644.8818 -2351.3564 -4263.4487]","1595":"[6158.4019 -2352.6697 -4263.4722]","1596":"[6670.7964 -2352.0659 -4263.3628]","1597":"[7190.5693 -2351.0071 -4263.4595]","1598":"[7709.1797 -2352.5728 -4263.4492]","1599":"[8226.6309 -2352.2385 -4263.394]","1600":"[8742.8857 -2352.1135 -4263.5474]","1601":"[9257.9639 -2351.8362 -4263.5059]","1602":"[9771.9209 -2352.2336 -4263.4873]","1603":"[10284.7373 -2351.9529 -4263.5127]","1604":"[10804.5039 -2351.7014 -4263.4873]","1605":"[11322.6738 -2351.8577 -4263.4321]","1606":"[11839.3135 -2351.1848 -4263.3296]","1607":"[12353.4941 -2331.0044 -4263.3589]","1608":"[12869.9473 -2276.7046 -4263.3955]","1609":"[13375.0596 -2176.3086 -4263.353]","1610":"[13870.2021 -2018.9146 -4263.4863]","1611":"[14335.7119 -1796.1563 -4263.6191]","1612":"[14762.9326 -1499.7594 -4263.3135]","1613":"[15129.585 -1138.4442 -4263.6533]","1614":"[15431.3477 -715.9349 -4263.5952]","1615":"[15660.6875 -253.3936 -4263.5532]","1616":"[15824.1387 236.2885 -4263.3452]","1617":"[15929.959 744.2368 -4263.4028]","1618":"[15987.916 1258.3254 -4263.3101]","1619":"[16008.0566 1773.717 -4263.3828]","1620":"[16011.7246 2288.1038 -4263.5303]","1621":"[16012.3994 2801.2588 -4263.417]","1622":"[16011.5635 3321.5972 -4263.5054]","1623":"[16011.3613 3840.7356 -4263.4653]","1624":"[16011.2734 4358.7251 -4263.4561]","1625":"[16011.7148 4875.562 -4263.3989]","1626":"[16011.625 5393.8989 -4263.4536]","1627":"[16011.7041 5906.0117 -4263.4878]","1628":"[16011.5986 6425.7354 -4263.4971]","1629":"[16011.582 6944.3696 -4263.4927]","1630":"[16011.6318 7461.9033 -4263.4912]","1631":"[16011.4707 7978.3843 -4263.4639]","1632":"[16011.71 8493.7803 -4263.4561]","1633":"[16011.6865 9008.0996 -4263.4536]","1634":"[16012.0439 9521.334 -4263.438]","1635":"[16011.1172 10033.5068 -4263.4688]","1636":"[16012.2715 10553.0928 -4263.4819]","1637":"[16011.2617 11071.5527 -4263.4482]","1638":"[16012.1572 11588.5674 -4263.4409]","1639":"[16004.7168 12104.1123 -4263.4355]","1640":"[15973.3057 12616.8594 -4263.3315]","1641":"[15898.8994 13131.0361 -4263.415]","1642":"[15773.5723 13631.8301 -4263.3179]","1643":"[15586.9697 14117.0566 -4263.4741]","1644":"[15333.2324 14565.9473 -4263.5381]","1645":"[15010.0439 14966.7021 -4263.7119]","1646":"[14623.4102 15303.8096 -4263.5752]","1647":"[14181.5068 15573.5586 -4263.5205]","1648":"[13706.498 15772.7734 -4263.4976]","1649":"[13211.9443 15909.5381 -4263.3662]","1650":"[12699.3037 15994.6846 -4263.2769]","1651":"[12180.7441 16035.3818 -4263.27]","1652":"[11666.2197 16046.5615 -4263.4243]","1653":"[11153.1416 16046.4014 -4263.4736]","1654":"[10632.6602 16047.209 -4263.4531]","1655":"[10113.2988 16046.8105 -4263.4526]","1656":"[9595.0342 16046.5459 -4263.4268]","1657":"[9077.8887 16047.1445 -4263.3716]","1658":"[8561.8604 16046.2178 -4263.4663]","1659":"[8047.2979 16047.0186 -4262.1621]","1660":"[7531.1445 16047.3691 -4244.8091]","1661":"[7017.6431 16047.2588 -4206.001]","1662":"[6504.2168 16046.6357 -4152.5073]","1663":"[5992.9668 16047.3125 -4093.9849]","1664":"[5480.5132 16047.2148 -4033.0869]","1665":"[4969.5581 16046.834 -3971.6077]","1666":"[4457.1436 16046.6309 -3910.9036]","1667":"[3943.8406 16046.4854 -3852.7078]","1668":"[3429.2078 16046.9043 -3800.627]","1669":"[2915.9033 16046.6094 -3765.824]","1670":"[2397.146 16046.6621 -3752.0249]","1671":"[1884.7185 16046.4023 -3751.3616]","1672":"[1365.2025 16047.0605 -3751.4563]","1673":"[846.8345 16046.0313 -3751.4524]","1674":"[329.6155 16046.5439 -3751.4524]","1675":"[-186.4641 16046.4307 -3751.3735]","1676":"[-703.0905 16046.623 -3751.4443]","1677":"[-1223.1909 16047.0117 -3751.4836]","1678":"[-1742.1989 16046.6807 -3751.4358]","1679":"[-2260.1428 16046.8711 -3751.3792]","1680":"[-2776.9941 16046.5566 -3751.46]","1681":"[-3292.7915 16046.6211 -3751.4546]","1682":"[-3807.5342 16046.6689 -3751.4534]","1683":"[-4321.2246 16046.6221 -3751.4558]","1684":"[-4833.8579 16046.8379 -3751.4744]","1685":"[-5353.9258 16046.2549 -3751.4656]","1686":"[-5872.626 16047.292 -3751.4246]","1687":"[-6389.9224 16046.6191 -3751.436]","1688":"[-6906.0425 16046.5898 -3751.4519]","1689":"[-7420.9116 16046.7871 -3751.4592]","1690":"[-7934.2412 16046.9395 -3751.4719]","1691":"[-8446.4756 16046.2617 -3751.4409]","1692":"[-8965.9365 16047.0713 -3751.4707]","1693":"[-9484.2031 16047.3613 -3751.5278]","1694":"[-10000.9697 16046.3486 -3751.5461]","1695":"[-10521.5918 16046.9082 -3751.5149]","1696":"[-11041.8672 16046.4365 -3751.4312]","1697":"[-11560.8506 16045.7607 -3751.53]","1698":"[-12077.4795 16025.7461 -3751.3499]","1699":"[-12589.4639 15971.4941 -3751.2568]","1700":"[-13091.7354 15872 -3751.3608]","1701":"[-13584.5264 15714.8643 -3751.4897]","1702":"[-14047.7637 15494.0234 -3751.4319]","1703":"[-14473.7217 15200.5859 -3751.6106]","1704":"[-14840.4287 14842.0732 -3751.5762]","1705":"[-15142.501 14422.4619 -3751.6768]","1706":"[-15374.6641 13958.2813 -3751.5042]","1707":"[-15539.7109 13466.7656 -3751.4819]","1708":"[-15646.1699 12961.2256 -3751.3381]","1709":"[-15704.9727 12449.6709 -3751.4526]","1710":"[-15726.0156 11936.4414 -3751.3672]","1711":"[-15730.0449 11423.8867 -3751.46]","1712":"[-15729.9629 10904.1016 -3751.4551]","1713":"[-15729.5723 10385.4795 -3751.447]","1714":"[-15729.3691 9868.0137 -3751.4524]","1715":"[-15729.2861 9351.6885 -3751.4612]","1716":"[-15729.9727 8831.0996 -3751.3916]","1717":"[-15729.5986 8310.793 -3751.5015]","1718":"[-15729.752 7791.5527 -3751.4851]","1719":"[-15729.6826 7273.3931 -3751.4871]","1720":"[-15729.8145 6756.2944 -3751.457]","1721":"[-15729.1123 6240.2661 -3751.4514]","1722":"[-15729.8506 5725.3159 -3751.4524]","1723":"[-15729.5879 5211.4443 -3751.5056]","1724":"[-15729.8174 4698.6343 -3751.4031]","1725":"[-15729.7129 4178.3672 -3751.4397]","1726":"[-15714.0186 3661.4973 -3751.324]","1727":"[-15645.1846 3147.7048 -3751.2131]","1728":"[-15496.709 2657.0972 -3751.6909]","1729":"[-15279.623 2187.4736 -3751.5535]","1730":"[-15011.7285 1749.636 -3751.4194]","1731":"[-14698.252 1334.5842 -3751.2124]","1732":"[-14353.9717 947.7053 -3751.4202]","1733":"[-13994.1064 576.8898 -3751.4924]","1734":"[-13628.8145 213.1095 -3751.3896]","1735":"[-13265.3281 -150.8817 -3751.4229]","1736":"[-12902.4727 -513.9404 -3751.3223]","1737":"[-12540.0996 -875.9631 -3751.4321]","1738":"[-12172.9863 -1243.5355 -3751.4233]","1739":"[-11806.4346 -1610.0522 -3751.4248]","1740":"[-11440.9326 -1975.6772 -3751.4426]","1741":"[-11078.874 -2337.7012 -3751.4753]","1742":"[-10712.3037 -2703.7551 -3751.4224]","1743":"[-10348.7148 -3069.0403 -3751.3979]","1744":"[-9984.9473 -3430.5068 -3751.4697]","1745":"[-9618.9561 -3798.1919 -3751.4563]","1746":"[-9253.7031 -4162.4219 -3751.3662]","1747":"[-8891.4287 -4524.8398 -3751.3691]","1748":"[-8524.1357 -4892.5649 -3751.387]","1749":"[-8157.4541 -5260.168 -3751.4475]","1750":"[-7791.9238 -5624.6465 -3751.5203]","1751":"[-7433.6919 -5992.1079 -3751.5698]","1752":"[-7087.3618 -6377.5435 -3751.502]","1753":"[-6773.2969 -6785.0483 -3751.3318]","1754":"[-6477.249 -7212.9639 -3751.4561]","1755":"[-6190.4756 -7645.2271 -3751.5303]","1756":"[-5902.2651 -8075.0718 -3751.4336]","1757":"[-5615.52 -8504.4824 -3751.4629]","1758":"[-5327.1528 -8936.0674 -3751.46]","1759":"[-5038.021 -9368.6719 -3751.4563]","1760":"[-4749.5049 -9800.4043 -3751.4539]","1761":"[-4456.8823 -10226.6719 -3751.4045]","1762":"[-4144.6597 -10634.7764 -3751.6162]","1763":"[-3799.1387 -11023.0947 -3751.3613]","1764":"[-3437.7209 -11394.5244 -3751.4348]","1765":"[-3072.5986 -11759.5449 -3751.4937]","1766":"[-2708.6145 -12124.002 -3751.4092]","1767":"[-2345.1003 -12486.4248 -3751.406]","1768":"[-1971.5873 -12848.1631 -3751.4573]","1769":"[-1589.1665 -13197.8389 -3751.4109]","1770":"[-1194.4374 -13531.4375 -3751.3091]","1771":"[-787.2825 -13847.5078 -3751.3979]","1772":"[-364.2501 -14146.501 -3751.5566]","1773":"[73.6299 -14423.501 -3751.6541]","1774":"[525.4905 -14673.7666 -3751.4509]","1775":"[990.069 -14895.6367 -3751.5786]","1776":"[1467.0348 -15084.6152 -3751.4375]","1777":"[1963.1005 -15239.377 -3751.6584]","1778":"[2468.0027 -15353.3057 -3751.749]","1779":"[2978.5271 -15424.1396 -3751.5215]","1780":"[3490.9658 -15450.3916 -3751.5955]","1781":"[4009.8442 -15430.9961 -3751.6707]","1782":"[4522.6504 -15366.0391 -3751.5598]","1783":"[5026.0615 -15258.375 -3751.689]","1784":"[5523.4453 -15109.4287 -3751.4922]","1785":"[6006.1758 -14923.8682 -3751.5417]","1786":"[6473.6387 -14706.4092 -3751.4316]","1787":"[6924.9282 -14460.5566 -3751.5452]","1788":"[7360.1128 -14190.208 -3751.4521]","1789":"[7786.5718 -13893.8545 -3751.4399]","1790":"[8197.4482 -13578.6211 -3751.4912]","1791":"[8593.9639 -13247.5508 -3751.52]","1792":"[8976.4004 -12902.2334 -3751.4253]","1793":"[9346.7725 -12545.7559 -3751.4575]","1794":"[9710.1807 -12184.2529 -3751.4131]","1795":"[10077.543 -11816.8271 -3751.5029]","1796":"[10444.3691 -11450.5518 -3751.5281]","1797":"[10808.2871 -11083.5068 -3751.3669]","1798":"[11164.417 -10711.0039 -3751.3831]","1799":"[11510.1318 -10322.3525 -3751.4587]","1800":"[11839.6064 -9921.4668 -3751.5474]","1801":"[12151.3682 -9508.3281 -3751.4463]","1802":"[12441.6875 -9081.6826 -3751.4341]","1803":"[12708.7197 -8641.8311 -3751.5295]","1804":"[12949.0244 -8188.5933 -3751.4927]","1805":"[13162.2344 -7714.5752 -3751.5879]","1806":"[13340.6455 -7228.4395 -3751.541]","1807":"[13481.4277 -6732.1157 -3751.6311]","1808":"[13580.5625 -6227.957 -3751.6946]","1809":"[13636.9785 -5711.0503 -3751.7312]","1810":"[13647.6924 -5193.4102 -3751.6782]","1811":"[13612.8838 -4678.9863 -3751.6257]","1812":"[13533.6641 -4171.6797 -3751.6389]","1813":"[13411.3652 -3667.3577 -3751.6995]","1814":"[13250.2334 -3177.6453 -3751.582]","1815":"[13054.9961 -2702.5144 -3751.5962]","1816":"[12824.9307 -2235.667 -3751.5503]","1817":"[12567.6221 -1785.188 -3751.479]","1818":"[12286.665 -1350.9402 -3751.4919]","1819":"[11985.2158 -932.4088 -3751.365]","1820":"[11665.8955 -529.0475 -3751.2844]","1821":"[11331.4521 -139.8286 -3751.333]","1822":"[10978.3242 242.2102 -3751.3953]","1823":"[10615.4766 613.2404 -3751.4197]","1824":"[10249.5078 979.3846 -3751.4185]","1825":"[9884.5117 1344.8264 -3751.4146]","1826":"[9520.7168 1709.0782 -3750.8811]","1827":"[9153.0752 2076.1172 -3735.1736]","1828":"[8790.6104 2439.8835 -3698.4102]","1829":"[8428.0801 2802.4736 -3645.876]","1830":"[8065.5479 3164.7573 -3587.5725]","1831":"[7702.8149 3526.9482 -3526.6543]","1832":"[7341.582 3888.9089 -3465.1877]","1833":"[6978.729 4251.0264 -3404.0349]","1834":"[6615.6411 4613.4009 -3345.6514]","1835":"[6253.063 4976.1807 -3293.0776]","1836":"[5888.1338 5341.8594 -3256.0239]","1837":"[5523.4761 5706.3218 -3240.8042]","1838":"[5158.4526 6072.4424 -3239.5308]","1839":"[4793.4106 6436.6626 -3239.4932]","1840":"[4430.1069 6801.0708 -3239.4556]","1841":"[4066.364 7163.5044 -3239.4561]","1842":"[3704.1794 7525.9893 -3239.4534]","1843":"[3336.8164 7893.8247 -3239.5098]","1844":"[2970.1558 8260.7861 -3239.4495]","1845":"[2603.6809 8626.4043 -3239.4651]","1846":"[2238.8547 8992.0742 -3239.4453]","1847":"[1873.9344 9356.0176 -3239.4575]","1848":"[1510.4927 9719.7979 -3239.4768]","1849":"[1147.969 10082.9287 -3239.4607]","1850":"[785.7878 10444.8594 -3239.4551]","1851":"[418.4886 10811.9453 -3239.4526]","1852":"[52.0138 11178.2705 -3239.4526]","1853":"[-313.0872 11544.3496 -3239.4539]","1854":"[-679.079 11909.5088 -3239.5273]","1855":"[-1041.3788 12271.6729 -3239.446]","1856":"[-1408.9733 12639.3047 -3239.4709]","1857":"[-1775.7545 13006.2451 -3239.4558]","1858":"[-2142.0674 13372.1523 -3239.4534]","1859":"[-2507.3848 13737.5449 -3239.4524]","1860":"[-2871.8101 14102.3174 -3239.4897]","1861":"[-3235.3325 14466.4658 -3239.4802]","1862":"[-3600.0757 14827.6748 -3239.3069]","1863":"[-3993.9675 15162.1641 -3239.3516]","1864":"[-4428.772 15441.9229 -3239.3762]","1865":"[-4896.9976 15651.6553 -3239.5581]","1866":"[-5394.1973 15799.2324 -3239.5447]","1867":"[-5905.4771 15892.6533 -3239.5693]","1868":"[-6415.522 15940.998 -3239.3608]","1869":"[-6933.6748 15950.0742 -3239.0413]","1870":"[-7448.291 15919.9619 -3239.5386]","1871":"[-7956.1133 15846.2832 -3239.4001]","1872":"[-8458.8848 15720.0732 -3239.4517]","1873":"[-8939.1973 15534.9707 -3239.4353]","1874":"[-9391.209 15280.084 -3239.5588]","1875":"[-9791.7314 14956.9238 -3239.4172]","1876":"[-10130.1631 14568.3994 -3239.583]","1877":"[-10397.543 14130.2197 -3239.5835]","1878":"[-10598.6738 13651.5547 -3239.4399]","1879":"[-10735.9434 13152.9736 -3239.4055]","1880":"[-10820.0088 12644.373 -3239.3022]","1881":"[-10859.9277 12132.0068 -3239.4587]","1882":"[-10871.7461 11619.6396 -3238.6946]","1883":"[-10871.8076 11103.1826 -3222.8735]","1884":"[-10872.0449 10588.0732 -3185.6699]","1885":"[-10872.3604 10075.0732 -3132.856]","1886":"[-10871.9229 9563.8926 -3074.7371]","1887":"[-10871.9648 9052.123 -3013.8267]","1888":"[-10871.8545 8539.9912 -2952.2734]","1889":"[-10871.8428 8029.1304 -2891.4824]","1890":"[-10871.1904 7516.3853 -2833.1621]","1891":"[-10871.4014 7003.1455 -2780.5979]","1892":"[-10871.4775 6486.1602 -2743.5813]","1893":"[-10871.9326 5969.5869 -2728.8359]","1894":"[-10870.4229 5456.2339 -2727.4902]","1895":"[-10870.4463 4935.7402 -2727.3772]","1896":"[-10871.8271 4416.4229 -2727.4478]","1897":"[-10871.3545 3898.4897 -2727.4338]","1898":"[-10870.2744 3381.8643 -2727.4702]","1899":"[-10870.9775 2866.3523 -2727.3303]","1900":"[-10871.668 2352.0112 -2727.491]","1901":"[-10870.6299 1838.8138 -2727.4773]","1902":"[-10870.627 1318.432 -2727.4712]","1903":"[-10872.002 799.2529 -2727.5066]","1904":"[-10871.1006 281.3285 -2727.4299]","1905":"[-10870.4717 -235.3656 -2727.4875]","1906":"[-10871.1006 -749.4357 -2727.4949]","1907":"[-10871.1699 -1270.0343 -2727.4187]","1908":"[-10870.7803 -1789.5389 -2727.4556]","1909":"[-10871.0127 -2307.9685 -2727.4175]","1910":"[-10871.5771 -2825.3162 -2727.5518]","1911":"[-10870.96 -3341.5859 -2727.4277]","1912":"[-10870.957 -3856.7168 -2727.4934]","1913":"[-10866.1318 -4370.605 -2727.4304]","1914":"[-10834.3086 -4889.624 -2727.4448]","1915":"[-10760.0488 -5398.8657 -2727.3247]","1916":"[-10658.4199 -5905.7197 -2727.3599]","1917":"[-10546.8281 -6408.1221 -2727.1309]","1918":"[-10406.7998 -6904.1226 -2727.428]","1919":"[-10224.2881 -7386.312 -2727.4836]","1920":"[-9993.2676 -7844.125 -2727.5728]","1921":"[-9705.2402 -8274.4805 -2727.3845]","1922":"[-9359.9268 -8654.9873 -2727.1841]","1923":"[-8964.29 -8992.3008 -2727.1165]","1924":"[-8577.2793 -9336.835 -2727.106]","1925":"[-8246.8135 -9729.5391 -2727.3794]","1926":"[-7970.8242 -10167.8564 -2727.4724]","1927":"[-7750.2114 -10634 -2727.5103]","1928":"[-7578.3252 -11117.6367 -2727.3608]","1929":"[-7444.6006 -11619.6182 -2727.3889]","1930":"[-7334.6924 -12125.7305 -2727.4192]","1931":"[-7234.5894 -12632.458 -2727.1868]","1932":"[-7116.3667 -13136.6035 -2727.4802]","1933":"[-6967.9082 -13632.918 -2727.4194]","1934":"[-6777.3003 -14112.0664 -2727.4604]","1935":"[-6531.7192 -14570.6084 -2727.5027]","1936":"[-6229.7144 -14989.6055 -2727.5178]","1937":"[-5869.397 -15354.0381 -2727.5479]","1938":"[-5449.4233 -15654.6025 -2727.5286]","1939":"[-4987.3926 -15876.0928 -2727.5271]","1940":"[-4490.8486 -16021.543 -2727.5361]","1941":"[-3979.4612 -16095.6055 -2727.5156]","1942":"[-3459.644 -16108.4629 -2727.3335]","1943":"[-2942.5085 -16071.252 -2727.5396]","1944":"[-2431.0613 -15994.5547 -2727.4734]","1945":"[-1923.8619 -15899.1904 -2727.3999]","1946":"[-1419.0427 -15798.1426 -2727.4771]","1947":"[-915.4288 -15697.0381 -2727.4016]","1948":"[-413.1798 -15595.7256 -2727.2839]","1949":"[90.6734 -15473.2568 -2727.3237]","1950":"[581.9183 -15315.3916 -2727.4634]","1951":"[1054.0582 -15114.5674 -2727.4194]","1952":"[1504.5045 -14858.4717 -2727.3965]","1953":"[1913.9271 -14543.1914 -2727.6067]","1954":"[2268.04 -14166.8213 -2727.5005]","1955":"[2549.8289 -13738.8877 -2727.4287]","1956":"[2755.9236 -13264.8994 -2727.6052]","1957":"[2884.2241 -12767.1367 -2727.4392]","1958":"[2943.9856 -12250.5898 -2727.3167]","1959":"[2945.3538 -11732.1455 -2727.2908]","1960":"[2898.9709 -11219.834 -2727.3923]","1961":"[2816.7363 -10713.2598 -2727.3745]","1962":"[2719.792 -10210.3701 -2727.5493]","1963":"[2619.6636 -9701.4141 -2727.4756]","1964":"[2517.1514 -9195.2393 -2727.5168]","1965":"[2416.6826 -8690.3213 -2727.5042]","1966":"[2317.7324 -8186.4912 -2727.46]","1967":"[2217.3525 -7684.1499 -2727.4915]","1968":"[2115.5842 -7174.7285 -2727.4727]","1969":"[2015.0288 -6666.2529 -2727.4802]","1970":"[1913.3762 -6159.1753 -2727.3076]","1971":"[1812.4227 -5651.1602 -2727.302]","1972":"[1711.4368 -5141.3447 -2727.5037]","1973":"[1610.3785 -4632.8169 -2727.4014]","1974":"[1510.5343 -4125.3896 -2727.3362]","1975":"[1408.6396 -3619.488 -2727.5059]","1976":"[1308.6597 -3114.364 -2727.531]","1977":"[1209.1177 -2610.3096 -2727.5222]","1978":"[1108.3109 -2107.6667 -2727.4612]","1979":"[1006.8449 -1597.5774 -2727.5415]","1980":"[905.4391 -1088.603 -2727.45]","1981":"[804.9708 -580.5711 -2727.509]","1982":"[703.9757 -73.7582 -2727.5186]","1983":"[602.9025 431.9398 -2727.4673]","1984":"[503.005 936.6994 -2727.5112]","1985":"[402.7975 1440.2087 -2727.4185]","1986":"[322.6355 1952.5964 -2727.4014]","1987":"[280.0528 2463.4827 -2727.4434]","1988":"[270.8343 2983.2593 -2727.51]","1989":"[272.6052 3501.2268 -2727.3596]","1990":"[271.7754 4017.7004 -2727.4919]","1991":"[271.0296 4532.998 -2727.5291]","1992":"[272.5186 5047.1504 -2727.4194]","1993":"[271.791 5560.1396 -2727.5896]","1994":"[272.0433 6076.7866 -2719.0151]","1995":"[272.0415 6590.8818 -2691.0046]","1996":"[271.8534 7104.3916 -2642.6917]","1997":"[272.05 7618.6431 -2585.6355]","1998":"[272.1549 8129.7363 -2525.4744]","1999":"[271.7199 8642.0361 -2463.9031]","2000":"[271.4669 9153.7529 -2402.6172]","2001":"[271.4628 9666.0068 -2342.9619]","2002":"[271.4165 10178.1182 -2287.7825]","2003":"[271.5657 10693.3203 -2242.9204]","2004":"[277.2374 11211.791 -2219.303]","2005":"[303.9093 11729.8633 -2214.5027]","2006":"[370.4565 12238.1035 -2214.3389]","2007":"[485.9474 12741.4844 -2214.0059]","2008":"[661.1917 13230.459 -2214.4431]","2009":"[904.1228 13687.9639 -2214.5234]","2010":"[1216.402 14096.9541 -2214.8167]","2011":"[1597.3217 14448.2383 -2214.4229]","2012":"[2029.1357 14727.9648 -2214.6116]","2013":"[2503.9973 14939.8877 -2214.5562]","2014":"[3000.4026 15086.4688 -2214.4192]","2015":"[3510.5471 15178.9766 -2214.4351]","2016":"[4028.3081 15225.0752 -2214.1729]","2017":"[4545.7949 15230.7314 -2214.52]","2018":"[5059.8999 15198.8525 -2214.5234]","2019":"[5567.3359 15124.0703 -2214.4392]","2020":"[6069.0771 14996.0547 -2214.7222]","2021":"[6546.9287 14809.5674 -2214.4922]","2022":"[6997.3599 14552.874 -2214.1716]","2023":"[7397.5786 14225.8936 -2214.3833]","2024":"[7731.9258 13837.5215 -2214.6208]","2025":"[7999.499 13394.3184 -2214.5522]","2026":"[8196.7939 12918.3105 -2214.5928]","2027":"[8331.6406 12423.0596 -2214.4656]","2028":"[8415.2529 11909.9482 -2214.4771]","2029":"[8454.5332 11393.4824 -2214.426]","2030":"[8465.1602 10876.8428 -2214.7981]","2031":"[8464.8643 10357.8379 -2215.0447]","2032":"[8465.3906 9837.3203 -2215.4641]","2033":"[8465.2246 9318.2246 -2215.531]","2034":"[8464.5625 8800.2295 -2215.4919]","2035":"[8465.2275 8283.3643 -2215.3872]","2036":"[8465.1289 7769.1074 -2214.6707]","2037":"[8464.834 7253.5366 -2214.6423]","2038":"[8465.2549 6734.7109 -2214.4688]","2039":"[8466.0107 6217.98 -2214.2859]","2040":"[8465.5322 5703.7085 -2214.5327]","2041":"[8465.0986 5183.418 -2214.4011]","2042":"[8465.1748 4664.4307 -2214.5149]","2043":"[8464.9785 4146.8394 -2214.4526]","2044":"[8464.8281 3630.749 -2214.5256]","2045":"[8464.7334 3115.7971 -2214.4363]","2046":"[8464.9844 2601.8835 -2215.0549]","2047":"[8464.5908 2089.1357 -2215.25]","2048":"[8464.6963 1568.9832 -2215.4858]","2049":"[8464.8994 1049.9244 -2215.4827]","2050":"[8465.0508 532.0253 -2215.6187]","2051":"[8464.9707 15.2572 -2215.4993]","2052":"[8464.4805 -500.3689 -2215.4856]","2053":"[8465.5156 -1014.8588 -2215.4497]","2054":"[8465.3066 -1528.1608 -2215.4609]","2055":"[8464.6084 -2040.3241 -2215.396]","2056":"[8464.585 -2559.7083 -2215.417]","2057":"[8465.7314 -3077.8623 -2215.5166]","2058":"[8465.001 -3594.7747 -2215.5083]","2059":"[8464.3721 -4115.0552 -2215.4607]","2060":"[8464.7402 -4627.1978 -2215.5469]","2061":"[8465.4678 -5146.9126 -2215.4404]","2062":"[8464.8086 -5665.5459 -2215.5242]","2063":"[8465.0527 -6183.1108 -2215.522]","2064":"[8463.9619 -6699.2881 -2215.5015]","2065":"[8455.3926 -7213.814 -2215.4089]","2066":"[8430.4893 -7726.0361 -2215.3743]","2067":"[8385.8389 -8243.2314 -2215.5039]","2068":"[8320.4307 -8756.498 -2215.4668]","2069":"[8231.085 -9263.8789 -2215.5071]","2070":"[8116.4282 -9763.6514 -2215.5942]","2071":"[7972.2515 -10262.2178 -2215.5627]","2072":"[7798.6001 -10746.3721 -2215.5649]","2073":"[7593.2524 -11215.5938 -2215.5581]","2074":"[7350.2358 -11673.9873 -2215.4966]","2075":"[7072.6543 -12109.4551 -2215.5437]","2076":"[6760.8584 -12518.3916 -2215.5496]","2077":"[6415.876 -12896.8379 -2215.6201]","2078":"[6034.3613 -13247.8018 -2215.5857]","2079":"[5625.1553 -13562.2998 -2215.6079]","2080":"[5192.646 -13839.9902 -2215.6633]","2081":"[4733.8037 -14085.3613 -2215.5771]","2082":"[4259.5225 -14294.8027 -2215.499]","2083":"[3769.9099 -14471.1592 -2215.3462]","2084":"[3270.0857 -14616.3457 -2215.4727]","2085":"[2764.3501 -14732.5879 -2215.4124]","2086":"[2254.5725 -14822.1045 -2215.5334]","2087":"[1742.4607 -14887.8945 -2215.373]","2088":"[1229.9427 -14931.835 -2215.5498]","2089":"[717.5089 -14956.9395 -2215.4963]","2090":"[201.2818 -14965.6338 -2205.9255]","2091":"[-314.1047 -14966.9717 -2177.2625]","2092":"[-827.9447 -14966.8477 -2128.1462]","2093":"[-1340.9581 -14966.9316 -2070.9277]","2094":"[-1852.4235 -14966.8418 -2010.6675]","2095":"[-2364.7593 -14967.0098 -1948.7751]","2096":"[-2876.3613 -14967.7275 -1886.2521]","2097":"[-3387.4258 -14967.0391 -1823.8809]","2098":"[-3899.9749 -14967.3369 -1762.4535]","2099":"[-4412.9346 -14967.9482 -1702.9175]","2100":"[-4926.8716 -14967.4658 -1648.0052]","2101":"[-5442.5283 -14966.8896 -1604.505]","2102":"[-5960.8887 -14967.4775 -1583.0862]","2103":"[-6473.7939 -14967.9316 -1579.4832]","2104":"[-6992.5557 -14963.8877 -1579.4279]","2105":"[-7509.5332 -14949.9834 -1579.3596]","2106":"[-8021.3252 -14919.1582 -1579.3447]","2107":"[-8538.6631 -14866.6699 -1579.4978]","2108":"[-9050.7637 -14791.6045 -1579.6456]","2109":"[-9557.1143 -14693.2686 -1579.6365]","2110":"[-10054.9863 -14568.6816 -1579.4285]","2111":"[-10550.6426 -14412.7051 -1579.5786]","2112":"[-11032.7568 -14225.8691 -1579.5564]","2113":"[-11498.7744 -14006.291 -1579.4744]","2114":"[-11944.6914 -13752.6748 -1579.5212]","2115":"[-12372.6357 -13460.3105 -1579.5502]","2116":"[-12773.2588 -13133.1943 -1579.4659]","2117":"[-13145.4648 -12770.0352 -1579.6794]","2118":"[-13482.1816 -12376.6553 -1579.4897]","2119":"[-13782.4365 -11957.2842 -1579.5964]","2120":"[-14046.1895 -11516.3232 -1579.5548]","2121":"[-14273.917 -11057.7529 -1579.5668]","2122":"[-14470.3047 -10577.8906 -1579.5786]","2123":"[-14633.5693 -10087.6973 -1579.4366]","2124":"[-14765.959 -9590.1074 -1579.6086]","2125":"[-14871.7695 -9087.9355 -1579.5339]","2126":"[-14953.6172 -8574.1846 -1579.4475]","2127":"[-15011.0576 -8058.5298 -1579.4019]","2128":"[-15048.6016 -7542.5439 -1579.5203]","2129":"[-15067.127 -7024.8643 -1579.5908]","2130":"[-15071.8408 -6504.936 -1579.4937]","2131":"[-15072.2549 -5986.0752 -1579.4507]","2132":"[-15072.7734 -5468.3623 -1579.4719]","2133":"[-15072.6484 -4951.7979 -1579.4373]","2134":"[-15072.3535 -4436.3755 -1579.4756]","2135":"[-15072.041 -3922.0266 -1579.4369]","2136":"[-15072.4756 -3409.1521 -1578.0748]","2137":"[-15071.7939 -2894.7646 -1560.6061]","2138":"[-15071.8369 -2380.8374 -1521.498]","2139":"[-15071.709 -1867.899 -1468.0275]","2140":"[-15072.2412 -1355.7634 -1409.1959]","2141":"[-15072.1309 -844.0811 -1348.0105]","2142":"[-15071.5547 -332.1529 -1285.8621]","2143":"[-15072.1094 180.0818 -1222.8956]","2144":"[-15072.8818 691.6774 -1160.1714]","2145":"[-15071.8398 1202.599 -1097.589]","2146":"[-15071.2197 1714.6967 -1034.7729]","2147":"[-15072.2598 2226.082 -972.0891]","2148":"[-15071.6924 2736.5115 -909.1253]","2149":"[-15071.5645 3249.1765 -846.725]","2150":"[-15071.8789 3760.7126 -783.4699]","2151":"[-15072.3701 4272.2524 -720.6637]","2152":"[-15071.9336 4782.9443 -657.9728]","2153":"[-15071.6758 5295.0791 -595.197]","2154":"[-15071.9678 5808.0605 -532.3126]","2155":"[-15072.1563 6319.272 -469.5245]","2156":"[-15072.0215 6831.395 -406.5273]","2157":"[-15071.3604 7343.2695 -343.7542]","2158":"[-15071.6543 7854.5181 -280.9847]","2159":"[-15071.6895 8366.6807 -218.0997]","2160":"[-15072.0166 8878.5039 -155.2752]","2161":"[-15072.415 9389.7363 -93.1601]","2162":"[-15072.3848 9902.0107 -32.2062]","2163":"[-15072.3447 10414.9473 26.4101]","2164":"[-15072.3857 10927.4404 78.9809]","2165":"[-15072.335 11443.3164 116.2648]","2166":"[-15055.8281 11961.585 128.874]","2167":"[-14999.1865 12475.6484 125.973]","2168":"[-14870.4971 12975.2041 121.761]","2169":"[-14689.835 13372.2744 119.0678]","2170":"[-14482.8896 13672.5068 117.9796]","2171":"[-14246.5674 13911.5791 118.0324]","2172":"[-13940.4131 14128.0537 119.064]","2173":"[-13577.5654 14298.9326 121.4478]","2174":"[-13082.4902 14435.8818 125.5355]","2175":"[-12570.4707 14500.9307 130.8674]","2176":"[-12053.3975 14519.4473 148.0097]","2177":"[-11541.4014 14518.9775 183.5476]","2178":"[-11026.7627 14520.0039 235.824]","2179":"[-10514.3604 14520.9756 294.0156]","2180":"[-10002.0439 14519.998 354.7366]","2181":"[-9490.3711 14519.7998 416.1696]","2182":"[-8977.5088 14520.4805 477.1253]","2183":"[-8466.3838 14520.8262 535.5989]","2184":"[-7953.1128 14520.5381 588.7958]","2185":"[-7439.1821 14520.4199 627.5622]","2186":"[-6923.1689 14519.8574 643.5084]","2187":"[-6407.1782 14520.7373 645.4828]","2188":"[-5889.0151 14519.8438 645.5515]","2189":"[-5371.9277 14520.4453 645.621]","2190":"[-4855.8999 14520.4844 645.5226]","2191":"[-4340.9497 14520.5225 645.5137]","2192":"[-3827.0903 14519.9326 645.5916]","2193":"[-3314.3564 14520.1279 645.5922]","2194":"[-2794.2666 14521.0967 645.5259]","2195":"[-2275.3652 14520.0518 645.5421]","2196":"[-1757.6169 14520.4951 645.5017]","2197":"[-1240.9806 14520.3154 645.5173]","2198":"[-725.4647 14520.3164 645.4966]","2199":"[-211.0622 14520.7295 645.5145]","2200":"[302.2231 14519.9971 645.5337]","2201":"[814.408 14520.5557 645.6238]","2202":"[1333.8622 14520.3721 645.5334]","2203":"[1852.1725 14520.791 645.5406]","2204":"[2369.3359 14519.7822 645.5236]","2205":"[2885.4724 14520.499 645.6393]","2206":"[3397.7903 14520.0703 645.6024]","2207":"[3917.8521 14520.7217 645.5403]","2208":"[4436.8135 14519.9707 645.5107]","2209":"[4955.0952 14520.1865 643.3448]","2210":"[5469.1196 14520.0635 625.3154]","2211":"[5983.625 14519.8613 584.8334]","2212":"[6496.8701 14519.8037 530.8705]","2213":"[7008.7876 14519.9629 472.0246]","2214":"[7521.9512 14520.1006 410.9412]","2215":"[8034.5552 14520.375 348.373]","2216":"[8547.4609 14520.4463 285.4099]","2217":"[9059.5498 14520.2197 222.5441]","2218":"[9572.7119 14520.6436 159.5418]","2219":"[10084.2861 14520.334 96.6882]","2220":"[10597.2646 14520.126 33.6729]","2221":"[11108.6475 14521.0381 -29.0501]","2222":"[11621.5869 14519.2363 -94.4917]","2223":"[12134.6143 14496.6172 -163.3069]","2224":"[12643.875 14437.4307 -230.1989]","2225":"[13147.2373 14331.6104 -284.3442]","2226":"[13638.4199 14172.2979 -323.2578]","2227":"[14099.2314 13943.2676 -349.8283]","2228":"[14486.7764 13657.5342 -366.0634]","2229":"[14836.1953 13290.1641 -374.9946]","2230":"[15112.9502 12872.8828 -377.6241]","2231":"[15322.2539 12401.7666 -376.4571]","2232":"[15458.9063 11899.7588 -373.6023]","2233":"[15536.8213 11391.0176 -370.3062]","2234":"[15571.1758 10878.6475 -366.1371]","2235":"[15570.6895 10359.5098 -364.2484]","2236":"[15542.2607 9845.165 -364.4735]","2237":"[15488.5137 9334.8428 -364.4908]","2238":"[15405.1436 8821.4287 -364.4608]","2239":"[15291.6016 8316.1787 -364.5146]","2240":"[15147.8018 7822.0088 -364.3606]","2241":"[14980.79 7329.48 -364.1503]","2242":"[14821.0459 6838.7031 -364.1661]","2243":"[14691.5273 6341.6519 -364.4818]","2244":"[14591.7773 5839.2349 -364.3425]","2245":"[14520.6768 5327.3149 -364.4781]","2246":"[14476.7051 4814.6206 -364.7068]","2247":"[14456.2744 4294.5874 -364.5146]","2248":"[14452.0645 3776.093 -364.3408]","2249":"[14452.5967 3259.145 -364.4456]","2250":"[14451.1904 2743.3335 -364.4902]","2251":"[14452.4229 2228.6523 -364.54]","2252":"[14451.7754 1715.1239 -364.463]","2253":"[14451.3857 1202.7451 -364.4202]","2254":"[14452.1641 683.1643 -364.388]","2255":"[14452.0283 164.7652 -364.4687]","2256":"[14451.7764 -352.3867 -364.4047]","2257":"[14451.6563 -868.3729 -364.5012]","2258":"[14451.8545 -1382.1937 -364.4747]","2259":"[14452.123 -1902.1787 -364.4924]","2260":"[14451.9111 -2421.103 -364.3757]","2261":"[14452.3359 -2938.6135 -364.5882]","2262":"[14452.4248 -3454.7725 -364.2846]","2263":"[14451.9805 -3969.093 -364.3623]","2264":"[14452.7588 -4481.8057 -364.5449]","2265":"[14451.7549 -5001.8086 -364.5027]","2266":"[14451.7285 -5520.6714 -364.481]","2267":"[14452.7158 -6038.3896 -364.5076]","2268":"[14451.4131 -6554.9624 -364.5142]","2269":"[14451.6924 -7070.4077 -364.5207]","2270":"[14452.4629 -7584.7236 -364.46]","2271":"[14451.2949 -8097.9072 -364.4141]","2272":"[14452.2715 -8609.9287 -364.4445]","2273":"[14451.6074 -9129.1787 -364.4516]","2274":"[14452.2803 -9647.2822 -364.455]","2275":"[14448.6006 -10167.7129 -364.002]","2276":"[14425.043 -10686.5977 -361.5381]","2277":"[14363.6914 -11196.4805 -355.7155]","2278":"[14257.5791 -11701.1338 -345.0258]","2279":"[14098.3887 -12195.3613 -328.8665]","2280":"[13884.3203 -12666.2979 -305.3829]","2281":"[13607.9824 -13104.627 -271.6005]","2282":"[13266.4355 -13487.0459 -225.0551]","2283":"[12944.5332 -13740.1904 -178.3784]","2284":"[12496.9209 -13984.666 -118.1513]","2285":"[12018.2275 -14145.9434 -66.5264]","2286":"[11526.126 -14221.1455 -29.3939]","2287":"[11009.9326 -14244.5303 -2.1667]","2288":"[10491.917 -14247.3623 14.9122]","2289":"[9976.1787 -14227.376 24.6248]","2290":"[9465.332 -14163.7178 30.9015]","2291":"[8965.083 -14041.8672 36.1144]","2292":"[8486.8906 -13846.6855 39.7913]","2293":"[8057.5171 -13575.6748 41.7879]","2294":"[7742.1377 -13288.5254 42.1295]","2295":"[7437.5854 -12893.7783 41.0079]","2296":"[7221.5225 -12480.6885 38.49]","2297":"[7055.4556 -11990.1299 34.3365]","2298":"[6957.2427 -11480.7832 28.4941]","2299":"[6916.5508 -10970.4287 22.4021]","2300":"[6947.2393 -10451.1982 16.3963]","2301":"[7059.0972 -9946.1533 13.2836]","2302":"[7246.9805 -9466.667 11.8719]","2303":"[7495.8994 -9018.3359 12.373]","2304":"[7794.9648 -8595.8896 14.4599]","2305":"[8130.981 -8198.6836 17.5469]","2306":"[8483.874 -7826.668 19.2887]","2307":"[8851.2773 -7459.3306 19.5398]","2308":"[9217.6943 -7092.6372 19.64]","2309":"[9582.8271 -6726.1167 19.5294]","2310":"[9948.7832 -6361.9883 19.5108]","2311":"[10312.4453 -5997.0962 19.5412]","2312":"[10676.0576 -5633.6689 19.5477]","2313":"[11039.0586 -5271.1421 19.5457]","2314":"[11406.749 -4902.7949 19.5471]","2315":"[11774.502 -4536.1147 19.5364]","2316":"[12141.0166 -4169.7798 19.5311]","2317":"[12505.6699 -3803.1365 19.5303]","2318":"[12871.499 -3439.2917 19.5451]","2319":"[13234.9971 -3074.7017 19.547]","2320":"[13598.4639 -2711.6506 19.5476]","2321":"[13960.6934 -2349.1077 19.9956]","2322":"[14316.3047 -1973.3966 21.9364]","2323":"[14647.7119 -1579.9794 24.5761]","2324":"[14944.0762 -1161.7441 26.4275]","2325":"[15199.2578 -711.8623 27.1594]","2326":"[15396.9014 -237.2132 26.4104]","2327":"[15525.6377 258.3521 24.0645]","2328":"[15581.0527 775.4844 21.0846]","2329":"[15593.0322 1288.4562 19.4989]","2330":"[15591.2471 1801.0587 19.4844]","2331":"[15591.7119 2320.8662 19.5479]","2332":"[15592.3008 2839.491 19.5754]","2333":"[15591.4414 3356.9409 19.5457]","2334":"[15591.5273 3873.2378 19.5475]","2335":"[15591.8906 4391.5127 19.5473]","2336":"[15591.9473 4911.8042 19.5505]","2337":"[15591.8516 5431.0171 19.4461]","2338":"[15591.7061 5949.1367 19.6063]","2339":"[15591.708 6466.1758 19.517]","2340":"[15586.2764 6980.1011 23.8274]","2341":"[15554.8877 7493.4102 31.768]","2342":"[15474.4717 8004.752 41.3697]","2343":"[15336.1406 8499.75 49.0191]","2344":"[15126.9551 8975.2412 54.5811]","2345":"[14845.3574 9408.4375 57.6267]","2346":"[14514.2197 9762.7686 58.089]","2347":"[14104.1133 10072.8369 56.3414]","2348":"[13648.6025 10308.8467 51.5765]","2349":"[13160.8027 10475.2959 44.7695]","2350":"[12658.8135 10577.5645 36.0587]","2351":"[12141.6865 10627.2207 26.3895]","2352":"[11626.9951 10628.3877 20.9882]","2353":"[11113.2168 10586.8408 20.132]","2354":"[10607.167 10501.6533 20.1324]","2355":"[10108.2246 10359.3037 20.0045]","2356":"[9635.5 10155.002 20.0665]","2357":"[9194.9922 9880.8955 20.2088]","2358":"[8800.8193 9548.2334 20.3678]","2359":"[8429.1299 9185.2422 20.6631]","2360":"[8062.9985 8819.0088 20.5045]","2361":"[7697.6807 8453.4834 20.4491]","2362":"[7333.0713 8088.791 20.5293]","2363":"[6969.2959 7724.8179 20.545]","2364":"[6605.9336 7361.9775 20.5476]","2365":"[6243.8511 6999.3794 20.548]","2366":"[5876.1807 6631.8667 20.5262]","2367":"[5509.2783 6265.1782 20.5108]","2368":"[5146.21 5897.1567 20.696]","2369":"[4815.248 5506.0186 20.6232]","2370":"[4538.2598 5071.8096 20.4626]","2371":"[4328.2075 4597.2852 20.4263]","2372":"[4183.5103 4103.2754 20.2958]","2373":"[4093.6011 3599.01 20.6824]","2374":"[4048.5481 3082.3367 20.7959]","2375":"[4034.5923 2566.0679 20.548]","2376":"[4034.3652 2051.4895 20.7143]","2377":"[4033.3801 1538.5859 20.4329]","2378":"[4034.0386 1019.2311 20.4311]","2379":"[4035.4194 501.6642 20.5548]","2380":"[4034.0945 -16.9003 20.6127]","2381":"[4033.303 -529.1265 20.5074]","2382":"[4033.9609 -1047.5844 21.0319]","2383":"[4034.3186 -1566.9366 21.0853]","2384":"[4034.272 -2079.8083 21.5768]","2385":"[4033.28 -2599.269 21.5434]","2386":"[4034.7219 -3117.5574 21.5096]","2387":"[4033.4302 -3634.6604 21.536]","2388":"[4034.1584 -4150.6021 21.5426]","2389":"[4034.021 -4668.5981 21.545]","2390":"[4033.626 -5188.5498 21.5881]","2391":"[4033.7761 -5707.4438 21.5788]","2392":"[4033.9746 -6225.2705 21.4955]","2393":"[4033.583 -6742.0254 21.5466]","2394":"[4034.4341 -7257.6943 21.6142]","2395":"[4033.7163 -7772.2681 21.5505]","2396":"[4034.4785 -8285.7646 21.5508]","2397":"[4033.7212 -8798.1807 21.5478]","2398":"[4032.3127 -9318.0664 20.9384]","2399":"[3990.3857 -9832.8086 18.7585]","2400":"[3878.4414 -10340.1191 14.9925]","2401":"[3688.9768 -10821.5996 13.785]","2402":"[3437.179 -11273.8701 14.3314]","2403":"[3138.0295 -11695.6279 16.5534]","2404":"[2806.0483 -12086.5547 19.5705]","2405":"[2448.8401 -12461.8281 21.3514]","2406":"[2084.6531 -12826.793 21.5512]","2407":"[1721.3793 -13190.9746 21.6185]","2408":"[1357.2734 -13552.498 21.2858]","2409":"[968.4418 -13896.1211 18.8673]","2410":"[540.3362 -14188.4775 15.7411]","2411":"[72.2928 -14405.6973 13.7867]","2412":"[-418.4337 -14555.6904 14.1063]","2413":"[-927.8293 -14651.6953 15.9209]","2414":"[-1438.9785 -14701.377 19.4442]","2415":"[-1956.3428 -14718.0811 21.134]","2416":"[-2476.5891 -14720.1924 21.5453]","2417":"[-2995.5845 -14719.498 21.6116]","2418":"[-3513.502 -14719.7324 21.5394]","2419":"[-4030.3547 -14720.2139 21.5273]","2420":"[-4546.144 -14719.5254 21.5497]","2421":"[-5060.8667 -14719.8047 21.5471]","2422":"[-5574.519 -14720.0928 21.6051]","2423":"[-6087.1152 -14720.1064 21.5399]","2424":"[-6607.1499 -14719.7979 21.5396]","2425":"[-7126.0615 -14719.6885 21.5134]","2426":"[-7643.8003 -14719.9561 21.4017]","2427":"[-8160.4014 -14719.6338 21.5024]","2428":"[-8675.8633 -14720.2256 21.5394]","2429":"[-9190.1953 -14719.3447 21.5472]","2430":"[-9703.415 -14719.6797 21.574]","2431":"[-10215.5352 -14719.6123 21.5512]","2432":"[-10734.4531 -14718.6162 21.4762]","2433":"[-11254.5762 -14701.1641 21.1465]","2434":"[-11771.0645 -14648.5439 21.0969]","2435":"[-12276.4951 -14550.459 21.1046]","2436":"[-12771.3428 -14395.4463 20.7037]","2437":"[-13236.083 -14176.8721 20.8713]","2438":"[-13664.0381 -13886.1025 21.0707]","2439":"[-14036.7998 -13526.0723 20.8963]","2440":"[-14339.4277 -13109.8096 21.0547]","2441":"[-14574.2822 -12645.4053 21.0382]","2442":"[-14740.8398 -12154.9023 21.0682]","2443":"[-14848.9639 -11650.3057 21.1308]","2444":"[-14909.0234 -11139.3447 21.0697]","2445":"[-14931.5986 -10626.5908 20.9028]","2446":"[-14935.0879 -10114.5059 26.9631]","2447":"[-14934.9189 -9598.2275 53.3081]","2448":"[-14935.0928 -9084.8555 100.2378]","2449":"[-14935.0117 -8572.0234 156.515]","2450":"[-14934.9453 -8060.3672 216.5038]","2451":"[-14935.083 -7548.3823 278.3852]","2452":"[-14935.5537 -7036.4263 340.9502]","2453":"[-14935.1875 -6524.396 403.3326]","2454":"[-14935.0654 -6012.2798 465.1671]","2455":"[-14935.2725 -5498.9316 524.9931]","2456":"[-14935.54 -4986.4551 580.9123]","2457":"[-14935.3066 -4471.6279 627.0864]","2458":"[-14935.29 -3956.0542 651.2401]","2459":"[-14935.1533 -3442.6887 657.3889]","2460":"[-14935.958 -2928.2021 657.5295]","2461":"[-14934.9756 -2414.7937 657.5419]","2462":"[-14935.0977 -1902.4775 657.5471]","2463":"[-14935.4717 -1382.7231 657.5703]","2464":"[-14935.5537 -864.0669 657.6213]","2465":"[-14935.1074 -346.5584 657.5224]","2466":"[-14936.0986 169.8224 657.5546]","2467":"[-14935.1104 685.0703 657.5081]","2468":"[-14935.333 1199.207 657.5361]","2469":"[-14935.1484 1712.243 657.5457]","2470":"[-14935.3184 2232.5708 657.5469]","2471":"[-14935.7539 2751.7703 657.4709]","2472":"[-14934.9453 3269.8186 657.5888]","2473":"[-14935.582 3786.6934 657.4869]","2474":"[-14935.1064 4302.9575 657.4811]","2475":"[-14934.5156 4823.3882 657.5066]","2476":"[-14934.9238 5342.7109 657.4988]","2477":"[-14934.7705 5860.9644 657.5178]","2478":"[-14934.8701 6378.1465 657.467]","2479":"[-14934.7578 6894.2314 657.4761]","2480":"[-14935.2734 7409.2358 657.5111]","2481":"[-14935.1846 7923.1592 657.5358]","2482":"[-14934.6709 8436.0029 657.5422]","2483":"[-14935.0635 8956.29 657.5467]","2484":"[-14929.3291 9475.54 656.8527]","2485":"[-14906.3848 9994.332 654.0695]","2486":"[-14853.9941 10504.625 647.3089]","2487":"[-14763.0771 11014.7764 635.6118]","2488":"[-14625.7139 11512.248 617.327]","2489":"[-14428.6416 11989.5029 591.146]","2490":"[-14161.293 12426.6816 555.7089]","2491":"[-13884.9775 12739.4863 518.8727]","2492":"[-13564.9219 12993.6953 476.0641]","2493":"[-13222.8115 13178.7324 430.2234]","2494":"[-12787.2793 13322.957 372.0393]","2495":"[-12279.3135 13397.5303 304.2189]","2496":"[-11766.9326 13392.3174 235.2361]","2497":"[-11260.3584 13308.0342 167.6617]","2498":"[-10835.5654 13157.2617 110.673]","2499":"[-10488.8359 12959.8984 64.4903]","2500":"[-10189.8018 12710.8936 24.603]","2501":"[-9899.0469 12366.3672 -14.2626]","2502":"[-9653.7588 11944.624 -47.1278]","2503":"[-9464.9189 11467.165 -72.2595]","2504":"[-9334.3047 10970.6807 -89.727]","2505":"[-9248.2373 10460.0859 -100.9913]","2506":"[-9199.1406 9948.8164 -107.3724]","2507":"[-9178.4043 9435.2363 -114.1777]","2508":"[-9174.0098 8919.0156 -136.583]","2509":"[-9174.707 8406.6855 -179.2815]","2510":"[-9174.0742 7892.6831 -234.2312]","2511":"[-9173.8887 7380.4331 -293.6467]","2512":"[-9174.3682 6868.2324 -355.2246]","2513":"[-9173.5039 6356.2891 -417.4937]","2514":"[-9174.3486 5843.2549 -480.4618]","2515":"[-9173.6729 5330.665 -543.4033]","2516":"[-9174.168 4817.7715 -606.3726]","2517":"[-9173.6758 4305.3062 -669.3719]","2518":"[-9173.5381 3791.7791 -732.3615]","2519":"[-9173.8291 3280.2461 -795.2213]","2520":"[-9173.3525 2766.8804 -858.3192]","2521":"[-9174.1279 2255.4866 -921.0752]","2522":"[-9173.4736 1742.2821 -984.1259]","2523":"[-9173.626 1229.9048 -1047.0403]","2524":"[-9173.6689 717.94 -1109.902]","2525":"[-9173.4229 204.5357 -1172.8611]","2526":"[-9173.8652 -307.2971 -1235.8317]","2527":"[-9173.3623 -820.5447 -1298.8149]","2528":"[-9173.6621 -1333.2821 -1361.5596]","2529":"[-9173.5293 -1846.5562 -1423.5455]","2530":"[-9173.8447 -2358.6055 -1483.575]","2531":"[-9174.1455 -2871.2898 -1540.2471]","2532":"[-9173.4336 -3384.0671 -1588.2366]","2533":"[-9173.5068 -3896.2705 -1614.3104]","2534":"[-9173.6445 -4409.4785 -1622.4789]","2535":"[-9173.7354 -4929.5283 -1622.5291]","2536":"[-9172.9668 -5448.3853 -1622.2914]","2537":"[-9161.6162 -5965.5923 -1622.4305]","2538":"[-9133.8096 -6480.4277 -1622.5508]","2539":"[-9087.3896 -6992.6118 -1622.4941]","2540":"[-9019.709 -7503.5713 -1622.5315]","2541":"[-8926.626 -8013.0122 -1622.4695]","2542":"[-8807.6484 -8515.582 -1622.4106]","2543":"[-8660.3174 -9009.04 -1622.5261]","2544":"[-8483.4004 -9490.9072 -1622.5518]","2545":"[-8269.7891 -9965.0547 -1622.667]","2546":"[-8022.1763 -10420.0605 -1622.641]","2547":"[-7740.0938 -10852.0801 -1622.6188]","2548":"[-7423.5869 -11256.7871 -1622.5924]","2549":"[-7068.3813 -11636.4141 -1622.6077]","2550":"[-6682.7319 -11981.4775 -1622.5553]","2551":"[-6270.2607 -12290.1152 -1622.4688]","2552":"[-5835.5435 -12562.1465 -1622.5469]","2553":"[-5377.1475 -12800.6074 -1622.4739]","2554":"[-4903.5264 -13003.8506 -1622.5334]","2555":"[-4418.8159 -13174.0488 -1622.5222]","2556":"[-3926.0042 -13313.6465 -1622.423]","2557":"[-3419.2751 -13426.8193 -1622.4178]","2558":"[-2908.9399 -13513.8457 -1622.3734]","2559":"[-2396.5537 -13577.5762 -1622.3258]","2560":"[-1883.2791 -13619.3975 -1622.4492]","2561":"[-1370.1357 -13642.2549 -1622.3652]","2562":"[-857.7379 -13650.0303 -1622.3894]","2563":"[-338.1085 -13650.8682 -1622.4683]","2564":"[180.3293 -13651.7793 -1622.449]","2565":"[697.5762 -13650.96 -1622.4821]","2566":"[1213.6251 -13651.209 -1622.4781]","2567":"[1729.3901 -13651.4014 -1622.5251]","2568":"[2249.3677 -13651.0742 -1622.4824]","2569":"[2768.2559 -13651.5127 -1622.4603]","2570":"[3286.0742 -13651.1162 -1622.4508]","2571":"[3802.8093 -13651.002 -1622.4276]","2572":"[4318.4746 -13650.9668 -1622.4136]","2573":"[4833.0439 -13650.5449 -1622.4421]","2574":"[5346.4395 -13646.5908 -1622.5352]","2575":"[5866.3853 -13630.8232 -1622.3882]","2576":"[6383.9785 -13595.543 -1622.4553]","2577":"[6898.4424 -13539.9834 -1622.4464]","2578":"[7408.6738 -13462.4512 -1622.4175]","2579":"[7913.0503 -13360.2148 -1622.3679]","2580":"[8409.666 -13230.9502 -1622.4415]","2581":"[8904.1523 -13070.4502 -1622.6241]","2582":"[9385.3008 -12878.4629 -1622.7145]","2583":"[9849.6924 -12653.1338 -1622.6516]","2584":"[10293.3799 -12393.542 -1622.603]","2585":"[10719.0586 -12094.6816 -1622.4827]","2586":"[11116.293 -11760.8174 -1622.7129]","2587":"[11478.6885 -11396.584 -1622.6576]","2588":"[11811.8027 -10997.0938 -1622.5825]","2589":"[12107.7725 -10571.9893 -1622.5153]","2590":"[12366.5947 -10125.7373 -1622.5939]","2591":"[12589.543 -9662.6641 -1622.5184]","2592":"[12778.4395 -9186.6572 -1622.5922]","2593":"[12937.5 -8692.9531 -1622.4379]","2594":"[13066.0029 -8192.1865 -1622.4603]","2595":"[13167.7412 -7686.9097 -1622.4841]","2596":"[13244.1299 -7178.7417 -1622.4424]","2597":"[13298.9863 -6663.3345 -1622.4619]","2598":"[13333.1875 -6147.1001 -1622.3564]","2599":"[13348.6904 -5631.2666 -1622.4866]","2600":"[13353.5986 -5116.3525 -1622.3433]","2601":"[13352.9629 -4602.6108 -1622.282]","2602":"[13340.4922 -4090.4893 -1622.4399]","2603":"[13300.8936 -3573.9951 -1622.3695]","2604":"[13218.0039 -3064.7881 -1622.4761]","2605":"[13083.2031 -2569.605 -1622.5876]","2606":"[12886.3604 -2090.3752 -1622.5751]","2607":"[12624.3428 -1648.2295 -1622.2891]","2608":"[12295.2002 -1246.7188 -1622.369]","2609":"[11934.4717 -872.7379 -1622.5042]","2610":"[11569.8975 -508.3631 -1622.3958]","2611":"[11205.2305 -145.7631 -1622.486]","2612":"[10843.0664 217.7929 -1622.4579]","2613":"[10480.8721 579.7758 -1622.4529]","2614":"[10113.3057 946.9196 -1622.453]","2615":"[9747.2119 1313.9611 -1622.4331]","2616":"[9381.1982 1679.5242 -1622.4856]","2617":"[9016.0771 2044.4166 -1622.4589]","2618":"[8651.9189 2408.7205 -1622.3827]","2619":"[8288.0664 2771.7126 -1622.4392]","2620":"[7926.0469 3134.8464 -1622.4751]","2621":"[7558.7114 3502.0894 -1622.3981]","2622":"[7192.7964 3867.8613 -1622.1749]","2623":"[6828.1411 4232.96 -1622.2437]","2624":"[6463.9282 4596.8506 -1622.2032]","2625":"[6100.5288 4959.856 -1622.208]","2626":"[5738.5596 5322.6084 -1622.1741]","2627":"[5370.8008 5689.5781 -1622.283]","2628":"[5004.7939 6056.6143 -1622.181]","2629":"[4638.6406 6421.771 -1622.256]","2630":"[4274.1157 6786.8408 -1622.1818]","2631":"[3909.5217 7150.1436 -1622.2904]","2632":"[3547.1313 7513.9307 -1622.2477]","2633":"[3184.7036 7875.9087 -1622.2278]","2634":"[2817.2002 8242.4844 -1622.3406]","2635":"[2451.2737 8608.7813 -1622.3656]","2636":"[2086.9045 8974.8076 -1622.4337]","2637":"[1722.1071 9338.5996 -1622.496]","2638":"[1358.3278 9701.4297 -1622.5256]","2639":"[996.5794 10063.9658 -1622.4293]","2640":"[630.5446 10430.834 -1622.376]","2641":"[264.4026 10795.667 -1622.2334]","2642":"[-100.0604 11160.1523 -1622.2959]","2643":"[-462.9668 11523.958 -1622.3492]","2644":"[-825.6285 11886.1465 -1622.3845]","2645":"[-1191.8497 12253.4014 -1622.4996]","2646":"[-1557.6785 12619.1338 -1622.5363]","2647":"[-1922.9546 12983.4785 -1622.3834]","2648":"[-2286.0264 13348.0654 -1622.4539]","2649":"[-2649.4678 13710.375 -1622.452]","2650":"[-3016.7283 14077.9551 -1622.4523]","2651":"[-3383.5693 14443.9697 -1622.4432]","2652":"[-3760.2542 14797.126 -1622.2668]","2653":"[-4156.1704 15124.502 -1622.5941]","2654":"[-4582.4468 15419.6025 -1622.5739]","2655":"[-5034.502 15665.833 -1622.7061]","2656":"[-5517.6484 15852.5752 -1622.5513]","2657":"[-6018.4375 15963.4854 -1622.3605]","2658":"[-6534.3921 16003.8408 -1622.3541]","2659":"[-7050.2671 16007.2754 -1622.4641]","2660":"[-7564.5649 16008.6904 -1622.5278]","2661":"[-8077.2725 16007.9502 -1622.5084]","2662":"[-8595.7285 16008.5342 -1622.4584]","2663":"[-9112.6143 16008.2041 -1622.4564]","2664":"[-9627.9355 16008.5254 -1622.4536]","2665":"[-10141.6807 16008.377 -1622.4521]","2666":"[-10653.8506 16008.4863 -1622.4568]","2667":"[-11171.6221 16008.0459 -1622.4409]","2668":"[-11687.7578 16008.3496 -1622.3619]","2669":"[-12202.2217 16007.6777 -1622.5143]","2670":"[-12714.9766 16007.8271 -1622.4437]","2671":"[-13233.1738 16007.7842 -1622.4545]","2672":"[-13749.6807 16008.2832 -1622.4532]","2673":"[-13834.4248 16008.1436 -1622.4515]"},"3":{"1":"[-5684.7476 15039.6465 -3756.4209]","2":"[-6199.4663 15056.8027 -3756.4556]","3":"[-6708.3145 15115.623 -3756.5195]","4":"[-7209.0005 15233.3184 -3756.3623]","5":"[-7693.7002 15399.5156 -3756.4556]","6":"[-8169.4634 15591.1133 -3756.3997]","7":"[-8650.0898 15777.4717 -3756.3459]","8":"[-9145.3164 15920.6621 -3756.3352]","9":"[-9650.2705 16009.1484 -3756.4275]","10":"[-10161.6025 16042.5752 -3756.4158]","11":"[-10248.2197 16044.8516 -3756.4739]"},"4":{"1":"[-10870.9697 2876.0461 -2732.3955]","2":"[-10851.7891 3389.571 -2732.4009]","3":"[-10790.0303 3900.5088 -2732.4231]","4":"[-10691.5918 4403.1987 -2732.3853]","5":"[-10594.8818 4908.7271 -2732.4729]","6":"[-10534.1016 5421.9829 -2732.4558]","7":"[-10506.9912 5939.0391 -2732.4268]","8":"[-10499.6895 6456.1357 -2732.3462]","9":"[-10498.7041 6968.6128 -2732.3586]","10":"[-10498.8965 7484.6821 -2732.3196]","11":"[-10498.8232 7998.1997 -2732.4529]","12":"[-10498.2842 8510.585 -2732.3843]","13":"[-10498.9365 9027.2412 -2732.4929]","14":"[-10499.2383 9542.0664 -2732.4312]","15":"[-10498.4736 10054.79 -2732.5627]","16":"[-10499.3115 10570.7178 -2732.4778]","17":"[-10498.8154 11083.9873 -2732.4065]","18":"[-10498.4463 11599.6904 -2732.4309]","19":"[-10499.0693 12112.0625 -2732.4797]","20":"[-10498.6924 12626.0029 -2732.4651]","21":"[-10499.0215 13140.9766 -2732.3877]","22":"[-10499.1367 13656.459 -2732.4504]","23":"[-10498.5117 14168.543 -2732.4463]","24":"[-10498.4082 14293.583 -2732.4363]"},"5":{"1":"[-10499.1016 8653.5928 -2732.4209]","2":"[-10499.3047 8552.2803 -2732.4316]","3":"[-10478.5361 8040.644 -2732.4504]","4":"[-10415.5908 7531.7734 -2732.3193]","5":"[-10325.9219 7026.3838 -2732.2939]","6":"[-10258.5771 6518.0098 -2732.4668]","7":"[-10241.1084 6256.7397 -2732.3896]"},"6":{"1":"[-9862.5449 2859.6384 -2732.4199]","2":"[-9881.4268 3372.1169 -2732.5044]","3":"[-9941.2979 3883.0371 -2732.5037]","4":"[-10039.7617 4390.1416 -2732.0195]","5":"[-10137.1777 4894.9668 -2732.293]","6":"[-10198.958 5404.9341 -2732.1785]","7":"[-10226.585 5918.1406 -2732.3113]","8":"[-10234.0381 6430.9316 -2732.4185]","9":"[-10235.0088 6945.4531 -2732.5281]","10":"[-10235.1914 7463.8018 -2732.406]","11":"[-10234.8799 7977.769 -2732.4302]","12":"[-10235.2588 8493.21 -2732.332]","13":"[-10235.2217 9010.167 -2732.3789]","14":"[-10235.3271 9522.9629 -2732.4431]","15":"[-10234.7588 10037.9932 -2732.4866]","16":"[-10234.6953 10551.8457 -2732.4199]","17":"[-10235.4102 11071.3037 -2732.5166]","18":"[-10234.625 11587.127 -2732.4851]","19":"[-10235.1689 12099.3809 -2732.4175]","20":"[-10235.5205 12616.9268 -2732.4824]","21":"[-10234.8359 13130.1836 -2732.481]","22":"[-10235.1455 13647.0703 -2732.4517]","23":"[-10234.6035 14159.7119 -2732.4519]","24":"[-10234.793 14288.9648 -2732.4077]"},"7":{"1":"[-10234.8252 8606.8115 -2732.5483]","2":"[-10235.4902 8505.8613 -2732.374]","3":"[-10258.6172 7990.5928 -2732.3567]","4":"[-10327.5469 7482.2612 -2731.9226]","5":"[-10416.5527 6976.5674 -2732.3235]","6":"[-10480.1611 6466.103 -2732.3516]","7":"[-10505.3428 5984.5674 -2732.426]"},"8":{"1":"[1665.5681 -4909.7021 -2732.3977]","2":"[1750.8396 -5417.0923 -2732.3972]","3":"[1795.9111 -5930.332 -2732.4075]","4":"[1782.5428 -6446.896 -2732.1335]","5":"[1715.8392 -6958.3818 -2732.4668]","6":"[1619.9119 -7463.3911 -2732.4868]","7":"[1530.3253 -7971.896 -2732.3442]","8":"[1483.0995 -8482.4043 -2732.2544]","9":"[1493.1205 -8996.3535 -2732.3369]","10":"[1556.3998 -9505.2305 -2732.373]","11":"[1608.6178 -9794.9531 -2732.4241]"},"9":{"1":"[8464.0391 7329.519 -2219.8528]","2":"[8442.3105 7841.3652 -2219.9539]","3":"[8374.5029 8354.9814 -2220.3052]","4":"[8273.168 8861.0664 -2220.5132]","5":"[8179.0747 9371.3047 -2220.3933]","6":"[8123.2798 9882.373 -2220.4546]","7":"[8099.3086 10398.2432 -2219.7349]","8":"[8093.4692 10912.2705 -2219.491]","9":"[8075.1519 11430.0537 -2219.4182]","10":"[8017.0835 11939.6875 -2219.3787]","11":"[7893.2485 12440.5508 -2219.3975]","12":"[7686.874 12915.2041 -2219.5813]","13":"[7481.8213 13224.7109 -2219.5127]","14":"[7183.6704 13537.7344 -2219.3708]","15":"[6901.502 13745.4111 -2219.3496]","16":"[6447.1436 13970.4863 -2219.2546]","17":"[5965.9585 14111.5957 -2219.384]","18":"[5456.8418 14187.0449 -2219.2791]","19":"[4944.4458 14205.9336 -2219.0903]","20":"[4432.7183 14171.1201 -2219.4001]","21":"[3926.0503 14075.7734 -2219.4194]","22":"[3438.0378 13904.4307 -2219.4736]","23":"[3060.1375 13691.8496 -2219.4058]","24":"[2758.4426 13443.7285 -2219.4385]","25":"[2497.2036 13137.7324 -2219.4592]","26":"[2287.1897 12780.2197 -2219.3794]","27":"[2107.0083 12296.5313 -2219.356]","28":"[2003.8759 11787.6895 -2219.4521]","29":"[1961.5043 11274.5176 -2219.4324]","30":"[1952.2203 10756.7168 -2219.4277]","31":"[1968.1733 10242.7275 -2219.2842]","32":"[2023.9193 9731.7549 -2219.4651]","33":"[2111.8494 9221.8115 -2219.425]","34":"[2212.6255 8715.2051 -2219.4351]","35":"[2314.9934 8207.1914 -2219.3252]","36":"[2415.187 7698.1533 -2219.3589]","37":"[2516.6079 7192.5425 -2219.4209]","38":"[2616.4897 6687.1992 -2219.4226]","39":"[2717.323 6181.7598 -2219.4204]","40":"[2816.991 5679.3799 -2219.3721]","41":"[2918.3196 5170.0103 -2219.4421]","42":"[3018.8171 4663.8726 -2219.4241]","43":"[3118.583 4160.9497 -2219.5229]","44":"[3220.3608 3651.2888 -2219.4163]","45":"[3320.7813 3144.554 -2219.3977]","46":"[3422.0498 2637.3794 -2219.4429]","47":"[3522.4128 2130.531 -2219.4104]","48":"[3622.7124 1624.8605 -2219.3909]","49":"[3723.9478 1116.42 -2219.3987]","50":"[3824.9465 612.8533 -2219.4331]","51":"[3925.6108 104.2535 -2219.4063]","52":"[4025.0479 -398.821 -2219.4634]","53":"[4126.3604 -902.9211 -2219.2979]","54":"[4225.7803 -1406.4818 -2219.3489]","55":"[4292.4487 -1741.5797 -2219.4448]"},"10":{"1":"[8465.4473 6873.0542 -2219.313]","2":"[8465.9063 6770.187 -2219.3118]","3":"[8487.6377 6255.9019 -2219.3662]","4":"[8557.4531 5744.3428 -2219.3228]","5":"[8684.1133 5244.6875 -2219.5649]","6":"[8859.2363 4759.811 -2219.4839]","7":"[9053.0117 4281.4937 -2219.428]","8":"[9233.0469 3799.1748 -2219.4509]","9":"[9366.4316 3304.6978 -2219.3796]","10":"[9444.5186 2797.9265 -2219.259]","11":"[9471.0947 2285.0151 -2219.6453]","12":"[9472.6074 2169.4646 -2219.71]"},"11":{"1":"[14452.4785 -2731.0142 -369.4182]","2":"[14454.2002 -2831.9658 -369.4692]","3":"[14482.083 -3343.5774 -369.4999]","4":"[14557.5244 -3853.1855 -369.3214]","5":"[14659.2002 -4357.2568 -369.4039]","6":"[14747.3506 -4862.127 -369.2599]","7":"[14798.8984 -5374.5898 -369.2908]","8":"[14819.1982 -5889.1943 -371.5239]","9":"[14823.8555 -6405.9067 -386.2061]","10":"[14824.1826 -6919.1714 -420.1409]","11":"[14824.2656 -7435.9111 -460.6422]","12":"[14824.4912 -7952.4697 -487.708]","13":"[14824.7656 -8469.334 -497.2754]","14":"[14824.791 -8987.0361 -497.3188]","15":"[14824.8252 -9504.7686 -497.4149]","16":"[14824.5078 -10023.4893 -497.5075]","17":"[14824.1074 -10536.4775 -497.3666]","18":"[14823.96 -11050.8027 -497.3991]","19":"[14824.3506 -11568.084 -497.403]","20":"[14824.457 -12084.0654 -497.4504]","21":"[14824.2295 -12596.1074 -497.4329]","22":"[14824.0693 -13112.5508 -497.4748]","23":"[14824.9277 -13624.9541 -497.4376]","24":"[14823.834 -14141.4824 -497.4262]","25":"[14823.8789 -14657.0488 -497.4437]","26":"[14824.4023 -15158.624 -497.4097]"},"12":{"1":"[14824.7061 -10471.8936 -497.4314]","2":"[14842.1445 -9958.9053 -497.4393]","3":"[14900.6436 -9446.8135 -497.5256]","4":"[14989.5449 -8939.2881 -497.4455]","5":"[15061.46 -8430.8877 -497.1534]","6":"[15087.6133 -7918.98 -486.7771]","7":"[15087.8369 -7895.8794 -485.8729]"},"13":{"1":"[15459.5244 -2775.7981 -369.4145]","2":"[15457.3789 -2876.5476 -369.3204]","3":"[15426.6797 -3389.1758 -369.2701]","4":"[15346.6777 -3899.5076 -369.3903]","5":"[15243.6523 -4403.4243 -369.3727]","6":"[15157.8711 -4913.2451 -369.4397]","7":"[15109.9346 -5429.7661 -369.2259]","8":"[15091.8701 -5943.3579 -372.2113]","9":"[15087.8271 -6457.4341 -388.7292]","10":"[15088.083 -6972.0869 -424.4951]","11":"[15087.9932 -7483.1079 -464.1251]","12":"[15088.3145 -8000.6929 -489.0957]","13":"[15088.291 -8513.501 -497.4406]","14":"[15088.2754 -9031.9248 -497.169]","15":"[15088.3994 -9544.6934 -497.3565]","16":"[15088.2432 -10061.2842 -497.4388]","17":"[15088.29 -10573.668 -497.4427]","18":"[15087.8008 -11090.1865 -497.4804]","19":"[15088.7334 -11602.541 -497.382]","20":"[15088.7197 -12118.8389 -497.4926]","21":"[15088.373 -12630.9336 -497.3958]","22":"[15088.416 -13146.7646 -497.4641]","23":"[15088.2754 -13663.2471 -497.4361]","24":"[15087.9932 -14176.5176 -497.4692]","25":"[15088.0967 -14691.3916 -497.4488]","26":"[15088.2773 -15158.3818 -497.4299]"},"14":{"1":"[15088.3174 -10517.4385 -497.337]","2":"[15073.7637 -10003.3516 -497.3589]","3":"[15020.3604 -9491.54 -496.9701]","4":"[14931.2314 -8984.3027 -497.3188]","5":"[14855.6484 -8476.3047 -497.207]","6":"[14826.627 -7965.0142 -488.1588]","7":"[14824.6279 -7774.7686 -481.018]"},"15":{"1":"[-2072.5559 -13606.8916 -7494.1548]","2":"[-2585.6052 -13590.5117 -7494.2002]","3":"[-3095.532 -13532.8281 -7494.0781]","4":"[-3597.5498 -13417.1309 -7494.0869]","5":"[-4086.3401 -13251.4805 -7494.2886]","6":"[-4563.9575 -13058.9697 -7494.1948]","7":"[-5042.9023 -12872.9463 -7494.2314]","8":"[-5537.064 -12728.0215 -7494.0288]","9":"[-6042.8818 -12638.6738 -7494.0703]","10":"[-6555.4917 -12602.6621 -7488.6216]","11":"[-6624.7017 -12598.6367 -7488.6069]"},"16":{"1":"[5518.9653 -11179.8574 -8900.0264]","2":"[5419.165 -11180.2002 -8892.5713]","3":"[4904.5747 -11180.0928 -8843.9697]","4":"[4388.2876 -11180.3184 -8786.5869]","5":"[3879.6548 -11179.9346 -8726.6611]","6":"[3367.1443 -11180.1875 -8664.6191]","7":"[2849.8997 -11180.7041 -8601.4639]","8":"[2333.4307 -11179.8213 -8537.9863]","9":"[1822.1011 -11180.6094 -8475.3174]","10":"[1302.9396 -11180.5352 -8411.4775]","11":"[780.661 -11180.4023 -8347.3496]","12":"[265.732 -11180.7578 -8284.123]","13":"[-257.8615 -11180.3555 -8219.9102]","14":"[-774.1168 -11180.4023 -8156.4312]","15":"[-1296.4147 -11180.4639 -8092.3193]","16":"[-1809.7366 -11180.0625 -8029.3032]","17":"[-2330.4265 -11180.2568 -7965.3936]","18":"[-2839.0793 -11180.4795 -7902.9004]","19":"[-3363.8037 -11180.6387 -7838.4673]","20":"[-3879.4321 -11180.5117 -7775.1528]","21":"[-4388.9165 -11179.8799 -7712.6689]","22":"[-4908.4351 -11180.2041 -7648.8228]","23":"[-5435.998 -11180.793 -7583.9902]","24":"[-5950.7275 -11180.4463 -7520.8838]","25":"[-6471.6826 -11180.2793 -7456.9663]","26":"[-6997.4482 -11180.5615 -7392.3452]","27":"[-7508.5786 -11180.6426 -7329.5615]","28":"[-8022.6338 -11180.4092 -7266.4385]","29":"[-8538.1045 -11180.3916 -7203.1226]","30":"[-9053.4619 -11180.7402 -7139.9404]","31":"[-9571.9883 -11180.4619 -7076.2544]","32":"[-10092.2334 -11180.4229 -7013.2227]","33":"[-10610.8994 -11180.4219 -6951.8022]","34":"[-11126.957 -11180.3516 -6893.6924]","35":"[-11639.3193 -11180.3242 -6842.6602]","36":"[-12156.1592 -11179.627 -6809.3442]","37":"[-12671.2803 -11158.9961 -6796.5713]","38":"[-13183.3789 -11094.8193 -6796.4067]","39":"[-13680.502 -10964.082 -6796.4058]","40":"[-14146.502 -10751.1514 -6796.2793]","41":"[-14442.8398 -10546.375 -6796.355]","42":"[-14756.8389 -10235.375 -6796.4424]","43":"[-14961.2969 -9945.543 -6796.4312]","44":"[-15179.0303 -9482.0918 -6796.2778]","45":"[-15314.6846 -8982.2129 -6796.4014]","46":"[-15382.0547 -8469.8994 -6796.3013]","47":"[-15402.8945 -7952.0684 -6796.4224]","48":"[-15404.292 -7430.3242 -6796.4893]","49":"[-15404.6484 -6911.1577 -6796.3989]","50":"[-15404.7021 -6391.5859 -6796.4966]","51":"[-15403.873 -5872.2202 -6796.4121]","52":"[-15404.0625 -5350.2065 -6796.4209]","53":"[-15404.2773 -4834.105 -6796.4189]","54":"[-15404.6309 -4312.2798 -6796.501]","55":"[-15404.3438 -3785.8848 -6796.5449]","56":"[-15404.0947 -3258.7322 -6796.5063]","57":"[-15404.2402 -2736.6458 -6796.4688]","58":"[-15404.7236 -2213.7068 -6796.4956]","59":"[-15404.7471 -1698.5889 -6796.4438]","60":"[-15404.541 -1172.1184 -6796.4341]","61":"[-15404.5391 -647.5566 -6796.4248]","62":"[-15404.3496 -122.594 -6796.5225]","63":"[-15404.4648 389.4152 -6796.4761]","64":"[-15404.2285 917.8057 -6796.3462]","65":"[-15403.7285 1444.3104 -6796.4155]","66":"[-15404.3174 1968.9227 -6794.502]","67":"[-15404.2979 2497.9331 -6774.0283]","68":"[-15403.7383 3014.1501 -6731.5435]","69":"[-15404.2256 3532.4958 -6676.1553]","70":"[-15403.9014 4054.8867 -6615.5483]","71":"[-15404.0723 4581.8398 -6552.1816]","72":"[-15404.8994 5102.7378 -6488.5825]","73":"[-15404.7227 5619.1147 -6425.5781]","74":"[-15404.1426 6133.5977 -6362.4834]","75":"[-15404.4795 6645.7373 -6299.6104]","76":"[-15405.1035 7161.0127 -6236.2671]","77":"[-15404.8887 7677.7603 -6172.8794]","78":"[-15403.915 8192.1338 -6109.772]","79":"[-15404.8867 8700.9814 -6047.5293]","80":"[-15404.5547 9210.4814 -5985.9985]","81":"[-15404.8389 9722.041 -5926.085]","82":"[-15404.3701 10234.9053 -5869.4341]","83":"[-15404.54 10745.3027 -5821.376]","84":"[-15404.7822 11262.001 -5794.6172]","85":"[-15401.6426 11777.501 -5785.0396]","86":"[-15373.5938 12292.1572 -5785.1738]","87":"[-15294.1895 12799.2949 -5785.373]","88":"[-15144.752 13291.6426 -5785.355]","89":"[-14924.3086 13725.7773 -5785.6343]","90":"[-14714.624 14004.1191 -5785.5742]","91":"[-14383.9648 14312.0703 -5785.4624]","92":"[-14095.2109 14498.9434 -5785.2734]","93":"[-13620.0908 14703.3867 -5785.2998]","94":"[-13120.4912 14825.7686 -5785.374]","95":"[-12603.625 14882.9727 -5784.9204]","96":"[-12087.0332 14899.292 -5785.1719]","97":"[-11573.8164 14898.167 -5784.8877]","98":"[-11053.248 14899.085 -5784.8989]","99":"[-10530.4355 14899.0166 -5784.8677]","100":"[-10012.291 14899.3779 -5784.8823]","101":"[-9493.7012 14898.9814 -5784.9082]","102":"[-8973.4111 14898.9863 -5784.9077]","103":"[-8454.9863 14899.3467 -5784.873]","104":"[-7938.4004 14899.0771 -5784.9141]","105":"[-7413.3525 14898.8369 -5784.9502]","106":"[-6888.1631 14898.999 -5784.8086]","107":"[-6376.0811 14899.0234 -5784.8975]","108":"[-5852.1948 14899.4385 -5784.9165]","109":"[-5332.1836 14899.1387 -5784.9038]","110":"[-4814.5034 14899.1357 -5784.9053]","111":"[-4297.2354 14898.5986 -5785.1128]","112":"[-3784.1001 14876.9141 -5785.0869]","113":"[-3269.7175 14811.7568 -5785.1992]","114":"[-2766.4773 14674.9463 -5785.4097]","115":"[-2299.0232 14454.6104 -5785.2573]","116":"[-2006.8336 14247.999 -5785.5044]","117":"[-1709.613 13947.8438 -5785.3687]","118":"[-1492.7274 13633.6143 -5785.1919]","119":"[-1287.4567 13184.2559 -5785.3687]","120":"[-1154.2697 12681.6191 -5785.3013]","121":"[-1089.1102 12167.8164 -5784.981]","122":"[-1069.0697 11645.2744 -5785.082]","123":"[-1069.0673 11124.0156 -5771.0322]","124":"[-1069.1348 10599.6182 -5736.3491]","125":"[-1068.5175 10087.501 -5684.3174]","126":"[-1069.8293 9574.917 -5625.9546]","127":"[-1068.6647 9049.8945 -5563.6353]","128":"[-1068.4429 8540.9492 -5502.3257]","129":"[-1068.4012 8030.5435 -5441.814]","130":"[-1068.4486 7519.3984 -5383.3491]","131":"[-1068.7521 7001.1738 -5329.6289]","132":"[-1068.749 6487.1455 -5291.311]","133":"[-1068.9097 5971.6841 -5274.7598]","134":"[-1069.381 5448.9785 -5273.5264]","135":"[-1068.7133 4927.7935 -5273.314]","136":"[-1068.9852 4406.5947 -5273.3774]","137":"[-1069.573 3889.4258 -5273.439]","138":"[-1068.9806 3367.9844 -5273.4229]","139":"[-1068.913 2850.1274 -5273.418]","140":"[-1069.1246 2328.2776 -5273.3442]","141":"[-1069.3137 1809.4321 -5273.4111]","142":"[-1068.8923 1286.6053 -5273.4688]","143":"[-1069.0417 761.3607 -5273.3882]","144":"[-1069.7817 237.9673 -5273.2295]","145":"[-1068.9418 -283.5324 -5273.3926]","146":"[-1068.7813 -803.2028 -5273.4155]","147":"[-1069.2131 -1321.0343 -5273.4248]","148":"[-1069.4551 -1837.0529 -5273.4268]","149":"[-1068.8628 -2349.9243 -5273.3975]","150":"[-1068.7008 -2877.1797 -5273.438]","151":"[-1068.724 -3401.5579 -5273.4756]","152":"[-1069.123 -3923.1584 -5273.4751]","153":"[-1068.929 -4442.5562 -5273.4492]","154":"[-1068.6428 -4959.9468 -5273.4287]","155":"[-1068.8357 -5475.3438 -5273.4248]","156":"[-1070.0065 -5988.6177 -5273.2544]","157":"[-1086.7894 -6511.8613 -5273.0996]","158":"[-1139.1967 -7029.3901 -5273.6025]","159":"[-1237.9387 -7535.8589 -5273.2222]","160":"[-1396.3795 -8036.6851 -5272.8618]","161":"[-1619.1816 -8507.6621 -5273.1445]","162":"[-1912.2506 -8933.4512 -5273.1729]","163":"[-2270.8291 -9300.9961 -5273.2466]","164":"[-2696.5378 -9605.8271 -5273.0957]","165":"[-3163.1902 -9838.2471 -5273.4253]","166":"[-3659.0403 -10002.5762 -5273.3047]","167":"[-4162.9634 -10108.0273 -5273.3242]","168":"[-4672.7036 -10165.1846 -5273.4424]","169":"[-5196.23 -10183.0742 -5272.8608]","170":"[-5715.8262 -10160.9023 -5273.1875]","171":"[-6227.8115 -10097.2334 -5273.3164]","172":"[-6739.7515 -9983.8154 -5273.019]","173":"[-7230.7534 -9810.3223 -5273.5337]","174":"[-7689.0483 -9571.543 -5273.2539]","175":"[-8099.4868 -9264.0977 -5273.2046]","176":"[-8455.6035 -8883.6777 -5273.2563]","177":"[-8740.4492 -8450.7305 -5273.2998]","178":"[-8953.0723 -7980.4868 -5273.2437]","179":"[-9101.9199 -7488.3198 -5273.3589]","180":"[-9195.7949 -6981.4263 -5273.2939]","181":"[-9245.1152 -6465.7275 -5273.375]","182":"[-9259.3115 -5948.3613 -5273.3721]","183":"[-9261.1895 -5432.3809 -5273.4614]","184":"[-9259.459 -4912.8359 -5273.4023]","185":"[-9260.9229 -4394.0474 -5273.5063]","186":"[-9260.4482 -3879.1904 -5273.4478]","187":"[-9259.7754 -3352.272 -5273.4248]","188":"[-9260.251 -2835.2437 -5273.4185]","189":"[-9260.6475 -2307.364 -5273.4497]","190":"[-9260.1758 -1785.9907 -5273.4209]","191":"[-9260.083 -1271.9915 -5273.3604]","192":"[-9260.6924 -751.6728 -5273.4048]","193":"[-9260.3496 -230.1136 -5273.4521]","194":"[-9259.958 289.5346 -5273.3789]","195":"[-9260.0508 807.2825 -5273.2935]","196":"[-9260.1621 1323.1759 -5273.377]","197":"[-9260.4209 1837.2067 -5273.4009]","198":"[-9260.6523 2359.9744 -5273.3936]","199":"[-9260.2871 2883.6086 -5273.3916]","200":"[-9259.3184 3402.8679 -5273.3848]","201":"[-9260.8076 3922.1951 -5273.2983]","202":"[-9260.4434 4438.1431 -5273.4165]","203":"[-9259.9131 4952.0894 -5273.3589]","204":"[-9260.7197 5478.271 -5273.3745]","205":"[-9260.1309 5999.0078 -5273.2803]","206":"[-9260.8721 6521.0659 -5273.3677]","207":"[-9260.3623 7041.0918 -5273.4404]","208":"[-9260.2568 7559.1182 -5273.4253]","209":"[-9260.4727 8075.1724 -5273.4238]","210":"[-9260.4258 8589.2637 -5273.3633]","211":"[-9260.3037 9101.4072 -5273.4561]","212":"[-9260.8809 9625.7402 -5273.4893]","213":"[-9259.6074 10147.9141 -5273.1631]","214":"[-9245.0049 10667.1768 -5273.3975]","215":"[-9196.8623 11180.9453 -5273.3638]","216":"[-9102.8926 11684.8848 -5273.2578]","217":"[-8952.6885 12185.5713 -5273.2529]","218":"[-8736.9941 12657.3223 -5273.1816]","219":"[-8453.9912 13087.1221 -5273.1289]","220":"[-8094.2178 13468.7412 -5273.2734]","221":"[-7675.4331 13779.4082 -5272.9458]","222":"[-7214.6387 14016.6992 -5273.3511]","223":"[-6727.0352 14186.165 -5273.4106]","224":"[-6224.9082 14297.0547 -5273.3823]","225":"[-5716.3994 14359.7324 -5273.2939]","226":"[-5194.9038 14383.9609 -5273.4863]","227":"[-4670.0415 14388.2715 -5273.3862]","228":"[-4144.6543 14386.8936 -5273.4819]","229":"[-3621.3635 14387.4756 -5273.4409]","230":"[-3100.1382 14387.835 -5273.4307]","231":"[-2580.9771 14387.5107 -5273.3462]","232":"[-2063.823 14387.3662 -5273.4497]","233":"[-1548.7195 14387.7129 -5273.5137]","234":"[-1035.6228 14387.124 -5273.5044]","235":"[-521.0953 14387.5869 -5273.3433]","236":"[4.6396 14387.5791 -5273.4019]","237":"[521.9709 14387.0654 -5273.4189]","238":"[1039.2723 14387.1895 -5273.4199]","239":"[1554.7543 14387.6152 -5273.3867]","240":"[2068.4307 14387.5127 -5273.4546]","241":"[2597.8962 14387.2568 -5273.4985]","242":"[3125.4609 14387.4746 -5273.5068]","243":"[3651.1133 14387.7822 -5273.417]","244":"[4174.8784 14387.79 -5273.4365]","245":"[4689.9434 14387.5791 -5273.439]","246":"[5212.3242 14387.4746 -5273.4268]","247":"[5727.9551 14387.3936 -5273.3926]","248":"[6241.666 14387.4014 -5273.4048]","249":"[6764.1089 14387.3691 -5273.4961]","250":"[7283.0591 14382.3916 -5273.271]","251":"[7798.188 14352 -5273.1265]","252":"[8306.0049 14281.6787 -5273.2329]","253":"[8813.8438 14158.4004 -5273.1919]","254":"[9299.0234 13976.4063 -5273.0229]","255":"[9748.7285 13726.4766 -5273.4307]","256":"[10159.3281 13400.7236 -5273.3584]","257":"[10495.4863 13020.251 -5273.3828]","258":"[10769.2949 12580.0518 -5273.4146]","259":"[10971.6104 12105.8379 -5273.1113]","260":"[11110.6563 11611.4482 -5273.1284]","261":"[11198.4131 11094.582 -5273.1367]","262":"[11240.1621 10574.3447 -5273.27]","263":"[11251.4004 10054.2979 -5273.4678]","264":"[11251.1973 9536.0654 -5273.4478]","265":"[11251.2129 9020.4023 -5273.4595]","266":"[11251.5371 8504.4668 -5273.4287]","267":"[11251.5107 7977.9951 -5273.4229]","268":"[11251.501 7463.0894 -5273.4258]","269":"[11251.0605 6937.2358 -5273.4302]","270":"[11251.043 6420.5361 -5273.478]","271":"[11251.4697 5899.9902 -5273.4194]","272":"[11251.4736 5374.9224 -5273.4453]","273":"[11251.6484 4851.7417 -5273.4839]","274":"[11251.4824 4330.417 -5273.4473]","275":"[11250.834 3810.947 -5273.4307]","276":"[11251.1816 3293.3179 -5273.3765]","277":"[11251.8174 2777.5005 -5273.4395]","278":"[11251.2744 2263.5022 -5273.4619]","279":"[11251.1982 1751.3064 -5273.3164]","280":"[11251.4277 1222.6715 -5273.3789]","281":"[11251.249 699.8514 -5273.4375]","282":"[11251.2109 172.1956 -5273.3784]","283":"[11251.3369 -355.5267 -5273.3218]","284":"[11251.2031 -881.2529 -5273.3882]","285":"[11251.373 -1404.9948 -5273.3252]","286":"[11251.0088 -1926.7977 -5273.3984]","287":"[11251.2266 -2450.1458 -5273.4268]","288":"[11250.9082 -2973.311 -5278.8022]","289":"[11251.2129 -3495.0869 -5302.1641]","290":"[11250.9219 -4008.896 -5347.8154]","291":"[11250.7783 -4523.0679 -5403.582]","292":"[11251.1201 -5043.5015 -5464.3882]","293":"[11251.2236 -5555.1836 -5525.5933]","294":"[11251.6904 -6070.1211 -5587.0723]","295":"[11251.459 -6586.4077 -5648.022]","296":"[11251.4443 -7110.6445 -5705.8286]","297":"[11251.5811 -7631.2402 -5753.6304]","298":"[11251.377 -8145.8442 -5778.1963]","299":"[11251.3457 -8671.5029 -5785.686]","300":"[11251.3867 -9196.502 -5785.479]","301":"[11251.377 -9719.3838 -5785.4253]","302":"[11251.6104 -10240.208 -5785.2944]","303":"[11251.4922 -10758.9121 -5785.4297]","304":"[11247.8877 -11274.71 -5785.1787]","305":"[11219.96 -11796.4707 -5785.3008]","306":"[11152.9824 -12315.2041 -5785.3633]","307":"[11036.4482 -12816.0996 -5785.3872]","308":"[10862.0947 -13298.7549 -5785.2544]","309":"[10618.8779 -13756.5664 -5785.397]","310":"[10306.6445 -14165.0029 -5785.4526]","311":"[9924.001 -14517.1895 -5785.3877]","312":"[9490.1357 -14797.25 -5785.4321]","313":"[9021.0605 -15006.3115 -5785.2949]","314":"[8521.6426 -15153.4424 -5785.4092]","315":"[8012.2397 -15245.1865 -5785.3135]","316":"[7500.3154 -15291.0303 -5785.4165]","317":"[6985.7505 -15305.207 -5798.5752]","318":"[6469.4966 -15305.4512 -5830.749]","319":"[5950.9097 -15306.8252 -5882.502]","320":"[5436.228 -15305.2822 -5940.3877]","321":"[4916.1392 -15306.5215 -6002.0376]","322":"[4406.0532 -15305.8301 -6063.9248]","323":"[3897.6814 -15305.9531 -6126.1963]","324":"[3380.4963 -15306.1045 -6189.689]","325":"[2870.7241 -15305.8604 -6252.2705]","326":"[2356.7229 -15305.6934 -6315.3389]","327":"[1840.1534 -15306.2646 -6378.7769]","328":"[1322.6 -15306.1748 -6442.3252]","329":"[808.8389 -15305.8799 -6505.3398]","330":"[300.2185 -15305.9375 -6567.8491]","331":"[-216.0235 -15306.4316 -6631.2881]","332":"[-729.3888 -15306.0977 -6694.3335]","333":"[-1238.113 -15306 -6756.7153]","334":"[-1746.5685 -15306.3018 -6819.1772]","335":"[-2269.8577 -15306.1582 -6883.4277]","336":"[-2790.8577 -15306.1064 -6947.396]","337":"[-3308.1555 -15306.0186 -7010.8823]","338":"[-3820.3669 -15305.6992 -7073.811]","339":"[-4344.4565 -15306.1016 -7138.2144]","340":"[-4861.6797 -15305.8848 -7201.728]","341":"[-5370.73 -15306.1348 -7264.168]","342":"[-5881.2861 -15306.1045 -7326.9146]","343":"[-6400.2295 -15305.6943 -7390.5996]","344":"[-6913.7495 -15305.6748 -7453.6284]","345":"[-7431.5693 -15306.0537 -7517.1206]","346":"[-7949.3638 -15305.9629 -7580.7686]","347":"[-8462.499 -15306.3896 -7643.6611]","348":"[-8975.7236 -15306.333 -7705.6499]","349":"[-9491.4453 -15306.5898 -7766.9956]","350":"[-10009.2168 -15306.5596 -7825.1079]","351":"[-10521.292 -15306.2969 -7875.6675]","352":"[-11042.043 -15306.4658 -7907.665]","353":"[-11560.0117 -15306.4795 -7919.5903]","354":"[-12075.6484 -15305.2148 -7919.5215]","355":"[-12594.8037 -15280.5635 -7919.1279]","356":"[-13103.1475 -15210.1816 -7919.3975]","357":"[-13598.6963 -15071.4473 -7919.2065]","358":"[-14054.7725 -14851.8008 -7919.1387]","359":"[-14334.6553 -14650.5479 -7919.4185]","360":"[-14652.0693 -14324.3936 -7919.4019]","361":"[-14847.1201 -14037.0635 -7919.415]","362":"[-15058.2813 -13568.9922 -7919.3691]","363":"[-15188.1064 -13067.123 -7919.2832]","364":"[-15250.6504 -12557.7705 -7919.2344]","365":"[-15269.1641 -12045.46 -7923.8931]","366":"[-15269.1748 -11531.624 -7947.2285]","367":"[-15270.2227 -11016.5693 -7991.1074]","368":"[-15270.2305 -10499.584 -8046.6943]","369":"[-15269.875 -9982.9971 -8106.9829]","370":"[-15270.248 -9473.5762 -8168.147]","371":"[-15270.1045 -8955.2178 -8231.3018]","372":"[-15270.6182 -8444.2393 -8294.1094]","373":"[-15271.0811 -7932.8433 -8356.875]","374":"[-15270.4746 -7411.1235 -8420.9365]","375":"[-15269.9131 -6895.209 -8484.3369]","376":"[-15270.7305 -6373.748 -8548.3662]","377":"[-15270.3799 -5863.7183 -8610.9658]","378":"[-15270.0684 -5352.52 -8673.3213]","379":"[-15270.6318 -4841.7769 -8734.875]","380":"[-15270.1797 -4319.9219 -8795.8516]","381":"[-15270.4629 -3797.5054 -8853.207]","382":"[-15270.4336 -3279.6167 -8900.2627]","383":"[-15269.3721 -2755.6028 -8924.5576]","384":"[-15257.6191 -2226.9663 -8930.6191]","385":"[-15228.2217 -1713.653 -8930.1494]","386":"[-15177.4863 -1186.085 -8930.2393]","387":"[-15103.8721 -663.8593 -8930.3047]","388":"[-15005.9697 -149.2033 -8930.249]","389":"[-14880.918 356.9326 -8930.375]","390":"[-14726.9512 852.7014 -8930.4697]","391":"[-14542.4053 1335.5033 -8930.457]","392":"[-14320.2217 1810.8513 -8930.4561]","393":"[-14067.3906 2259.031 -8930.334]","394":"[-13779.9365 2682.9495 -8930.0303]","395":"[-13447.2471 3092.8853 -8930.2236]","396":"[-13080.5645 3469.1775 -8930.3193]","397":"[-12683.5684 3809.604 -8930.2461]","398":"[-12260.167 4112.6255 -8930.1709]","399":"[-11814.8311 4377.9165 -8930.1816]","400":"[-11352.0439 4606.5435 -8930.3096]","401":"[-10875.9561 4800.4282 -8930.3955]","402":"[-10373.1133 4966.6592 -8930.3252]","403":"[-9863.1064 5101.3662 -8930.2305]","404":"[-9348.2637 5206.7964 -8930.2012]","405":"[-8830.7725 5286.4326 -8930.2969]","406":"[-8312.2832 5342.752 -8930.1826]","407":"[-7794.0933 5377.8584 -8930.1914]","408":"[-7277.9629 5394.1958 -8930.4805]","409":"[-6763.7432 5397.1509 -8930.5244]","410":"[-6251.4282 5396.8818 -8930.4199]","411":"[-5723.979 5397.0752 -8930.3545]","412":"[-5198.8394 5397.2036 -8930.293]","413":"[-4680.2642 5396.8164 -8930.3955]","414":"[-4163.4736 5397.4204 -8930.4365]","415":"[-3648.6272 5397.0908 -8930.5107]","416":"[-3135.6936 5396.8921 -8930.4609]","417":"[-2610.5286 5397.5386 -8930.291]","418":"[-2088.8403 5396.5903 -8930.373]","419":"[-1574.0404 5397.2959 -8930.4043]","420":"[-1054.9766 5397.1631 -8930.4258]","421":"[-541.0719 5396.7104 -8930.4463]","422":"[-27.88 5397.3496 -8930.415]","423":"[32.0801 5396.3413 -8930.29]"},"17":{"1":"[-5.4018 6404.8491 -8930.4209]","2":"[-107.5083 6404.8486 -8930.458]","3":"[-621.8191 6405.1279 -8930.4629]","4":"[-1136.0247 6404.8452 -8930.4482]","5":"[-1655.3812 6405.2769 -8930.3564]","6":"[-2177.3679 6404.7393 -8930.5293]","7":"[-2690.6777 6405.1167 -8930.3926]","8":"[-3217.5635 6404.8237 -8930.4746]","9":"[-3742.4534 6404.9966 -8930.458]","10":"[-4265.3267 6404.7422 -8930.2646]","11":"[-4786.2358 6405.2207 -8930.3418]","12":"[-5305.1792 6404.8008 -8930.5088]","13":"[-5822.1841 6405.0938 -8930.4971]","14":"[-6337.2397 6404.7822 -8930.3516]","15":"[-6850.3726 6405.3145 -8930.3896]","16":"[-7376.2515 6404.4297 -8930.2041]","17":"[-7900.0034 6399.4956 -8930.4131]","18":"[-8420.3584 6379.6348 -8930.3105]","19":"[-8934.4375 6341.1812 -8930.4287]","20":"[-9450.0469 6281.0791 -8930.5088]","21":"[-9960.2393 6198.4707 -8930.3926]","22":"[-10463.3809 6090.4199 -8930.4023]","23":"[-10957.9717 5956.3779 -8930.3564]","24":"[-11457.4336 5786.9629 -8930.5996]","25":"[-11941.6523 5585.355 -8930.4131]","26":"[-12406.8027 5348.5098 -8930.3613]","27":"[-12850.0059 5077.7139 -8930.3984]","28":"[-13266.251 4771.4619 -8930.4033]","29":"[-13652.9531 4432.5659 -8930.3438]","30":"[-14008.5488 4059.8345 -8930.375]","31":"[-14334.1729 3652.3462 -8930.2441]","32":"[-14619.5781 3224.4897 -8930.3145]","33":"[-14872.4219 2767.9092 -8930.3164]","34":"[-15092.5967 2287.2681 -8930.3486]","35":"[-15276.0449 1797.9171 -8930.3213]","36":"[-15425.8789 1301.0996 -8930.1543]","37":"[-15546.3086 800.1798 -8930.2217]","38":"[-15641.9971 281.706 -8930.3252]","39":"[-15711.6924 -232.3162 -8930.2988]","40":"[-15760.8477 -760.877 -8930.2441]","41":"[-15788.1611 -1281.7568 -8930.2021]","42":"[-15797.9668 -1810.36 -8930.5771]","43":"[-15798.1885 -2326.9365 -8930.3018]","44":"[-15797.5215 -2853.9341 -8921.8389]","45":"[-15798.1338 -3386.5449 -8892.5879]","46":"[-15798.1348 -3904.366 -8842.3184]","47":"[-15797.7695 -4430.7837 -8783.3311]","48":"[-15797.8467 -4961.123 -8720.6533]","49":"[-15797.915 -5490.6621 -8656.4268]","50":"[-15797.7666 -6016.4761 -8592.209]","51":"[-15797.9043 -6538.0386 -8528.127]","52":"[-15797.8701 -7050.8506 -8465.083]","53":"[-15797.7979 -7573.1816 -8401.0635]","54":"[-15797.9424 -8083.4917 -8338.4063]","55":"[-15797.8154 -8601.5576 -8274.7871]","56":"[-15797.7998 -9125.9893 -8210.3662]","57":"[-15798.0293 -9636.8662 -8148.2134]","58":"[-15797.3896 -10157.2305 -8086.354]","59":"[-15797.6787 -10677.2881 -8026.7358]","60":"[-15797.7637 -11197.7822 -7973.354]","61":"[-15797.5596 -11716.7939 -7936.3271]","62":"[-15797.8916 -12236.4336 -7920.6411]","63":"[-15797.8408 -12752.6953 -7919.3057]","64":"[-15781.7363 -13272.7021 -7919.2534]","65":"[-15726.5801 -13787.8037 -7919.3521]","66":"[-15604.0234 -14286.6582 -7918.9834]","67":"[-15400.1045 -14763.6162 -7919.4238]","68":"[-15202.9697 -15065.2412 -7919.1792]","69":"[-14895.5605 -15392.501 -7919.3608]","70":"[-14626.6445 -15593.0586 -7919.3052]","71":"[-14165.5459 -15824.8457 -7919.436]","72":"[-13668.0234 -15973.2148 -7919.3091]","73":"[-13150.8936 -16047.3857 -7919.2192]","74":"[-12626.1709 -16072.6279 -7919.2861]","75":"[-12108.8203 -16074.5439 -7919.4653]","76":"[-11591.3877 -16073.6133 -7919.3296]","77":"[-11079.251 -16074.2705 -7908.644]","78":"[-10549.8594 -16074.0635 -7877.269]","79":"[-10037.7549 -16073.5703 -7826.5576]","80":"[-9511.1914 -16074.332 -7767.3789]","81":"[-9001.3848 -16074.2549 -7707.0449]","82":"[-8491.9824 -16073.4043 -7645.5024]","83":"[-7961.5747 -16073.2217 -7580.2959]","84":"[-7435.4009 -16073.7939 -7515.6001]","85":"[-6916.2134 -16074.0547 -7451.9336]","86":"[-6406.7681 -16073.7578 -7389.4131]","87":"[-5881.6382 -16073.5615 -7324.9487]","88":"[-5369.7778 -16073.4668 -7262.0825]","89":"[-4844.0449 -16073.3428 -7197.5439]","90":"[-4335.2729 -16073.4014 -7135.0991]","91":"[-3797.4167 -16073.585 -7069.0591]","92":"[-3266.7954 -16073.5283 -7003.9248]","93":"[-2743.4106 -16073.1846 -6939.5552]","94":"[-2227.1277 -16073.2959 -6876.2124]","95":"[-1717.9338 -16073.7363 -6813.6914]","96":"[-1188.0939 -16073.96 -6748.6245]","97":"[-666.0563 -16073.6641 -6684.4971]","98":"[-141.332 -16073.2256 -6620.1201]","99":"[382.418 -16073.4297 -6555.7666]","100":"[898.4272 -16073.876 -6492.4385]","101":"[1406.7307 -16073.8242 -6430.0967]","102":"[1933.5457 -16073.3193 -6365.3252]","103":"[2451.9883 -16073.0645 -6301.6816]","104":"[2962.1021 -16073.5391 -6239.063]","105":"[3488.8252 -16073.8252 -6174.3984]","106":"[4006.5081 -16073.6621 -6110.8828]","107":"[4515.2168 -16073.1855 -6048.4902]","108":"[5038.835 -16073.4297 -5985.103]","109":"[5549.6855 -16073.8086 -5925.1924]","110":"[6066.1201 -16073.6436 -5868.3628]","111":"[6592.2485 -16073.5273 -5819.2407]","112":"[7112.7993 -16074.3516 -5793.1787]","113":"[7638.4111 -16073.8672 -5785.0557]","114":"[8152.2417 -16072.1182 -5785.4741]","115":"[8666.4941 -16049.5059 -5785.2002]","116":"[9180.5293 -15991.4551 -5785.2666]","117":"[9683.1719 -15884.1475 -5785.2314]","118":"[10179.7207 -15717.2354 -5785.4424]","119":"[10644.7139 -15483.8721 -5785.0488]","120":"[11062.8145 -15180.71 -5785.5386]","121":"[11420.4238 -14812.8545 -5785.353]","122":"[11714.8154 -14380.6387 -5785.3052]","123":"[11934.1064 -13915.3174 -5785.2495]","124":"[12091.6729 -13414.1543 -5785.3208]","125":"[12189.7471 -12904.9258 -5785.1758]","126":"[12241.585 -12393.6582 -5785.1626]","127":"[12257.8486 -11868.0342 -5785.2739]","128":"[12259.4229 -11346.7441 -5785.3057]","129":"[12258.6318 -10823.1963 -5785.4331]","130":"[12259.2734 -10298.167 -5785.4248]","131":"[12259.0859 -9766.6064 -5785.3516]","132":"[12258.7148 -9238.5771 -5785.3843]","133":"[12259.2139 -8723.2568 -5785.2896]","134":"[12259.1377 -8204.2549 -5781.8496]","135":"[12258.9355 -7670.4551 -5757.0664]","136":"[12258.7783 -7142.397 -5708.6821]","137":"[12259.0957 -6622.541 -5652.23]","138":"[12259.085 -6111.5444 -5592.1245]","139":"[12258.5664 -5588.5034 -5529.4639]","140":"[12258.3359 -5079.7266 -5468.0552]","141":"[12258.7598 -4557.7847 -5407.4004]","142":"[12258.6582 -4040.8159 -5350.8936]","143":"[12258.5088 -3519.4194 -5303.9097]","144":"[12258.9609 -2998.0039 -5279.9331]","145":"[12257.8369 -2475.7393 -5273.3574]","146":"[12258.6318 -1957.5621 -5273.4619]","147":"[12258.1094 -1434.9935 -5273.4272]","148":"[12258.3291 -914.3333 -5273.4268]","149":"[12258.4463 -395.7527 -5273.4668]","150":"[12258.1787 120.7575 -5273.4556]","151":"[12258.3193 634.9905 -5273.2402]","152":"[12258.2783 1160.1113 -5273.3916]","153":"[12258.9434 1674.4263 -5273.5254]","154":"[12258.8203 2193.3943 -5273.4722]","155":"[12259.0537 2715.0925 -5273.4683]","156":"[12258.3896 3231.7842 -5272.9971]","157":"[12258.9033 3753.8167 -5273.2241]","158":"[12258.5313 4278.9019 -5273.3906]","159":"[12258.6855 4801.3315 -5273.291]","160":"[12259.2188 5321.6899 -5273.4546]","161":"[12258.8975 5840.082 -5273.4585]","162":"[12258.6445 6356.5361 -5273.4292]","163":"[12259.6426 6871.0483 -5273.4419]","164":"[12258.3916 7383.6421 -5273.4761]","165":"[12258.7236 7909.3203 -5273.4385]","166":"[12259.0752 8432.9775 -5273.4204]","167":"[12258.9961 8954.6533 -5273.4224]","168":"[12258.8721 9474.3672 -5273.3984]","169":"[12258.9688 9992.123 -5273.4214]","170":"[12258.7217 10507.9199 -5273.3906]","171":"[12259.2842 11021.7764 -5273.48]","172":"[12250.1729 11544.6445 -5273.2168]","173":"[12213.082 12059.4023 -5273.1685]","174":"[12130.9531 12577.7891 -5273.4824]","175":"[11994.6826 13080.4805 -5273.3506]","176":"[11798.6631 13560.5225 -5273.46]","177":"[11531.7598 14003.5342 -5273.2061]","178":"[11197.7939 14393.2559 -5273.4697]","179":"[10793.7578 14724.3096 -5273.356]","180":"[10342.3516 14981.8398 -5273.3965]","181":"[9860.0313 15169.3955 -5273.3691]","182":"[9357.3086 15296.3008 -5273.3413]","183":"[8842.167 15372.4873 -5273.3579]","184":"[8327.4053 15404.2158 -5273.4155]","185":"[7814.1724 15411.7588 -5273.3916]","186":"[7302.0811 15410.8193 -5273.4453]","187":"[6777.9058 15410.4629 -5273.4854]","188":"[6252.3115 15411.5859 -5273.3638]","189":"[5720.2266 15410.8809 -5273.4678]","190":"[5191.7173 15410.3867 -5273.4224]","191":"[4675.9634 15410.749 -5273.4668]","192":"[4155.9443 15411.1494 -5273.4526]","193":"[3637.5127 15411.0576 -5273.436]","194":"[3115.835 15410.8545 -5273.3281]","195":"[2595.949 15410.8125 -5273.3916]","196":"[2077.9121 15410.9717 -5273.4946]","197":"[1561.6761 15411.0557 -5273.438]","198":"[1047.222 15411.0205 -5273.4243]","199":"[534.542 15410.8691 -5273.4478]","200":"[-1.8559 15410.8096 -5273.459]","201":"[-531.2456 15410.8711 -5273.4399]","202":"[-1055.4476 15411.0771 -5273.3735]","203":"[-1567.8252 15410.959 -5273.334]","204":"[-2083.6575 15410.8506 -5273.3066]","205":"[-2612.5996 15411.127 -5273.4702]","206":"[-3135.8745 15411.335 -5273.5366]","207":"[-3652.4653 15411.0225 -5273.4756]","208":"[-4171.4492 15410.6709 -5273.4473]","209":"[-4692.4717 15410.8994 -5273.4326]","210":"[-5214.8481 15411.084 -5273.3677]","211":"[-5735.1343 15410.834 -5273.4746]","212":"[-6253.1045 15407.1211 -5273.1182]","213":"[-6767.3486 15379.3066 -5273.2373]","214":"[-7287.0708 15311.5762 -5272.9189]","215":"[-7793.8311 15192.6299 -5273.3223]","216":"[-8279.3652 15015.3281 -5273.2178]","217":"[-8731.4277 14772.2695 -5273.2705]","218":"[-9144.4307 14452.6729 -5273.4912]","219":"[-9493.1172 14068.3779 -5273.5439]","220":"[-9769.8555 13632.5947 -5273.3506]","221":"[-9976.2832 13161.8125 -5273.5122]","222":"[-10118.96 12669.9961 -5273.3262]","223":"[-10209.9727 12155.458 -5273.2295]","224":"[-10255.9043 11635.4443 -5273.2866]","225":"[-10268.5713 11118.5557 -5273.3418]","226":"[-10267.9863 10588.5332 -5273.4292]","227":"[-10267.2773 10063.0352 -5273.4629]","228":"[-10268.2236 9535.8438 -5273.4937]","229":"[-10268.4736 9016.5625 -5273.3384]","230":"[-10267.7695 8497.125 -5273.3159]","231":"[-10267.4629 7978.1489 -5273.4648]","232":"[-10268.0068 7460.9902 -5273.4526]","233":"[-10268.3467 6945.6299 -5273.4312]","234":"[-10268.1299 6422.4048 -5273.3706]","235":"[-10267.457 5894.6328 -5273.4331]","236":"[-10267.5137 5369.5518 -5273.4565]","237":"[-10268.3809 4856.2808 -5273.4624]","238":"[-10268.3506 4325.9097 -5273.3359]","239":"[-10267.4072 3797.4197 -5273.3677]","240":"[-10267.3711 3270.8516 -5273.4512]","241":"[-10268.1865 2752.0938 -5273.4043]","242":"[-10267.8516 2225.5496 -5273.3916]","243":"[-10267.3418 1699.1801 -5273.3677]","244":"[-10267.9912 1174.7889 -5273.3237]","245":"[-10267.54 652.3561 -5273.2026]","246":"[-10267.6982 131.9049 -5273.2813]","247":"[-10267.8652 -386.6249 -5273.2246]","248":"[-10267.791 -902.9102 -5273.5093]","249":"[-10268.1475 -1416.8861 -5273.1553]","250":"[-10268.0225 -1943.3081 -5273.4321]","251":"[-10267.8418 -2467.751 -5273.3711]","252":"[-10268.0625 -2990.2261 -5273.3677]","253":"[-10268.2705 -3510.7058 -5273.4077]","254":"[-10267.8008 -4029.2324 -5273.4229]","255":"[-10267.9326 -4545.8208 -5273.4224]","256":"[-10267.9756 -5060.4873 -5273.5]","257":"[-10267.873 -5573.2202 -5273.3716]","258":"[-10268.0938 -6098.6006 -5273.5298]","259":"[-10267.8643 -6621.9492 -5273.4629]","260":"[-10265.4736 -7143.2202 -5273.3027]","261":"[-10240.9883 -7661.3594 -5273.1167]","262":"[-10179.2412 -8172.8638 -5273.1592]","263":"[-10065.3994 -8685.4229 -5272.9438]","264":"[-9895.8887 -9171.3086 -5273.3276]","265":"[-9656.6592 -9627.1074 -5273.522]","266":"[-9349.1367 -10043.3516 -5273.4136]","267":"[-8979.1797 -10394.3262 -5273.5386]","268":"[-8551.0449 -10679.9707 -5273.2544]","269":"[-8082.4561 -10897.1455 -5273.2695]","270":"[-7589.1445 -11047.7959 -5273.1587]","271":"[-7081.7168 -11145.1455 -5273.2612]","272":"[-6560.5825 -11195.4424 -5273.3335]","273":"[-6041.9258 -11211.0791 -5273.416]","274":"[-5524.8213 -11212.5547 -5273.4277]","275":"[-5009.811 -11211.3545 -5273.3774]","276":"[-4496.894 -11212.7158 -5273.5244]","277":"[-3973.1819 -11205.7129 -5273.2876]","278":"[-3453.3235 -11173.3828 -5273.2959]","279":"[-2941.3301 -11099.3252 -5273.4951]","280":"[-2433.4944 -10972.3027 -5273.311]","281":"[-1947.6086 -10781.2695 -5273.4277]","282":"[-1499.0898 -10527.4043 -5273.3687]","283":"[-1097.8524 -10200.6963 -5273.3462]","284":"[-776.9085 -9829.3369 -5273.4736]","285":"[-503.7673 -9387.1982 -5273.4185]","286":"[-302.1321 -8905.4658 -5273.3052]","287":"[-163.7737 -8403.7246 -5273.373]","288":"[-78.7555 -7890.0063 -5273.2451]","289":"[-40.0906 -7377.7207 -5273.2017]","290":"[-28.6935 -6852.2964 -5273.5239]","291":"[-29.5488 -6328.6221 -5273.6021]","292":"[-30.3848 -5805.7695 -5273.4629]","293":"[-28.763 -5286.7246 -5273.4634]","294":"[-29.1629 -4765.459 -5273.4219]","295":"[-29.974 -4251.5771 -5273.4028]","296":"[-29.7129 -3729.4805 -5273.3882]","297":"[-28.9291 -3203.4353 -5273.5322]","298":"[-29.2922 -2677.4915 -5273.4312]","299":"[-29.9069 -2155.4749 -5273.375]","300":"[-29.5148 -1640.9183 -5273.5293]","301":"[-29.2025 -1107.1121 -5273.3701]","302":"[-29.4021 -593.1847 -5273.4312]","303":"[-29.8698 -81.016 -5273.4307]","304":"[-29.7186 459.3324 -5273.2725]","305":"[-29.2637 990.9053 -5273.5161]","306":"[-29.0921 1527.42 -5273.4595]","307":"[-29.4778 2040.2571 -5273.3066]","308":"[-29.5624 2573.7058 -5273.3979]","309":"[-29.466 3100.1348 -5273.4854]","310":"[-29.4409 3626.5376 -5273.4277]","311":"[-29.2446 4145.1875 -5273.4131]","312":"[-29.5044 4662.0361 -5273.3623]","313":"[-29.7514 5177.1079 -5273.457]","314":"[-29.3182 5712.9644 -5273.502]","315":"[-29.1183 6245.0713 -5279.98]","316":"[-29.0677 6764.251 -5307.7544]","317":"[-28.2108 7286.228 -5358.3711]","318":"[-29.4914 7806.7852 -5416.0171]","319":"[-29.0127 8318.9033 -5476.2051]","320":"[-29.3379 8828.418 -5537.6084]","321":"[-29.4658 9348.1787 -5599.6826]","322":"[-29.2436 9870.2236 -5660.3745]","323":"[-29.3694 10384.0059 -5715.7417]","324":"[-29.5538 10903.6445 -5759.689]","325":"[-28.906 11422.2998 -5781.1538]","326":"[-35.1585 11941.918 -5785.1211]","327":"[-64.5186 12457.8193 -5785.2988]","328":"[-135.0236 12966.2705 -5785.3901]","329":"[-256.2578 13471.0811 -5785.1357]","330":"[-436.1104 13953.2432 -5785.502]","331":"[-685.9932 14408.5859 -5785.355]","332":"[-1004.7524 14812.5996 -5785.5269]","333":"[-1391.4972 15158.7988 -5785.4658]","334":"[-1828.0461 15432.0293 -5785.4478]","335":"[-2306.7502 15638.8154 -5785.5132]","336":"[-2803.5891 15779.5303 -5785.2832]","337":"[-3318.9873 15867.6729 -5785.3491]","338":"[-3833.282 15909.8975 -5784.7412]","339":"[-4356.2041 15921.6084 -5785.0049]","340":"[-4878.3438 15921.5879 -5784.9683]","341":"[-5401.0049 15921.2354 -5784.8818]","342":"[-5915.0615 15922.1025 -5784.9048]","343":"[-6427.6782 15921.8867 -5784.8828]","344":"[-6949.3398 15921.1172 -5784.9175]","345":"[-7469.0215 15922.0039 -5784.895]","346":"[-7986.7148 15921.25 -5784.8403]","347":"[-8502.4639 15921.4219 -5784.8223]","348":"[-9016.2646 15921.6318 -5784.8872]","349":"[-9542.7168 15921.4717 -5784.9673]","350":"[-10067.1299 15921.5596 -5784.8735]","351":"[-10589.5244 15921.7393 -5784.9595]","352":"[-11109.9014 15921.4453 -5784.7324]","353":"[-11623.249 15921.2979 -5785.1577]","354":"[-12144.0742 15906.5244 -5785.0493]","355":"[-12659.6045 15862.126 -5784.8755]","356":"[-13171.1104 15768.9053 -5785.4297]","357":"[-13666.6777 15623.2656 -5785.1982]","358":"[-14135.3164 15414.8184 -5785.4458]","359":"[-14572.082 15133.2598 -5785.3789]","360":"[-14951.6807 14784.3193 -5785.1235]","361":"[-15265.5439 14376.0537 -5785.4165]","362":"[-15507.375 13923.0898 -5785.3633]","363":"[-15684.3125 13434.0625 -5785.416]","364":"[-15800.8701 12929.4229 -5785.3408]","365":"[-15867.8789 12417.8184 -5785.2749]","366":"[-15893.8896 11904.5684 -5785.3569]","367":"[-15900.3662 11392.4492 -5790.3091]","368":"[-15898.502 10877.0908 -5811.6714]","369":"[-15899.6855 10363.9229 -5856.1362]","370":"[-15898.873 9845.5215 -5911.813]","371":"[-15899.3467 9333.4297 -5971.2905]","372":"[-15898.9277 8815.2803 -6033.6274]","373":"[-15899.1592 8306.8232 -6095.5122]","374":"[-15899.5615 7795.8154 -6158.395]","375":"[-15899.1318 7283.6196 -6221.3696]","376":"[-15899.2666 6771.7549 -6284.0454]","377":"[-15899.2598 6261.791 -6346.7515]","378":"[-15899.5439 5737.9712 -6411.0767]","379":"[-15899.5596 5217.9697 -6474.9219]","380":"[-15898.8145 4703.6187 -6537.793]","381":"[-15898.5098 4193.0811 -6599.1938]","382":"[-15898.5859 3672.354 -6660.2993]","383":"[-15898.4746 3158.9053 -6716.856]","384":"[-15898.4268 2633.0476 -6765.2759]","385":"[-15898.6768 2116.2043 -6789.6968]","386":"[-15898.5586 1595.6915 -6796.7065]","387":"[-15898.5791 1076.3518 -6796.6904]","388":"[-15898.9658 559.1996 -6796.48]","389":"[-15899.2285 43.9011 -6796.416]","390":"[-15898.624 -469.5618 -6796.5044]","391":"[-15898.6514 -997.6718 -6796.4072]","392":"[-15899.3379 -1523.8198 -6796.4141]","393":"[-15899.2451 -2048.0342 -6796.4229]","394":"[-15898.9238 -2570.3335 -6796.4209]","395":"[-15899.1436 -3090.7327 -6796.4829]","396":"[-15899.0137 -3609.2256 -6796.4429]","397":"[-15898.8955 -4125.8237 -6796.3101]","398":"[-15899.0674 -4649.7837 -6796.4517]","399":"[-15899.0527 -5169.8101 -6796.4429]","400":"[-15898.957 -5684.9038 -6796.4243]","401":"[-15898.7939 -6197.9775 -6796.4263]","402":"[-15899.042 -6722.4619 -6796.4209]","403":"[-15898.6348 -7236.6084 -6796.4131]","404":"[-15899.1465 -7749.7202 -6796.4478]","405":"[-15898.9375 -8262.7266 -6796.437]","406":"[-15888.4033 -8782.0498 -6796.3569]","407":"[-15843.9639 -9295.6426 -6796.3135]","408":"[-15735.3242 -9804.0908 -6796.3101]","409":"[-15550.4072 -10283.999 -6796.3018]","410":"[-15328.9805 -10649.9102 -6796.459]","411":"[-15090.7578 -10921.6855 -6796.3989]","412":"[-14740.3418 -11201.9209 -6796.3569]","413":"[-14410.6934 -11381.6475 -6796.4604]","414":"[-13926.2695 -11551.8877 -6796.4614]","415":"[-13416.8018 -11647.8242 -6796.1001]","416":"[-12898.5205 -11684.9277 -6796.2793]","417":"[-12380.5313 -11693.2305 -6801.0693]","418":"[-11866.7285 -11691.1602 -6823.8667]","419":"[-11356.4297 -11691.9121 -6867.6177]","420":"[-10836.3203 -11692.3096 -6923.874]","421":"[-10316.9238 -11692.0781 -6984.2217]","422":"[-9795.2354 -11691.6875 -7047.0435]","423":"[-9268.166 -11692.4912 -7111.1216]","424":"[-8741.8828 -11691.876 -7175.8794]","425":"[-8227.1885 -11691.3545 -7239.062]","426":"[-7704.1382 -11691.9541 -7303.313]","427":"[-7194.1855 -11692.5068 -7365.9336]","428":"[-6676.6235 -11692.3486 -7429.4961]","429":"[-6151.4751 -11692.1953 -7493.9751]","430":"[-5635.1484 -11691.7422 -7557.354]","431":"[-5109.2124 -11691.8613 -7621.8975]","432":"[-4588.6157 -11692.2412 -7685.8555]","433":"[-4080.05 -11691.9414 -7748.333]","434":"[-3562.2375 -11691.7275 -7811.9917]","435":"[-3047.498 -11691.7617 -7875.1377]","436":"[-2530.3049 -11691.8867 -7938.6162]","437":"[-2020.2939 -11691.8438 -8001.23]","438":"[-1511.6769 -11691.9355 -8063.689]","439":"[-988.9805 -11691.8271 -8127.917]","440":"[-478.6815 -11692.3662 -8190.4707]","441":"[32.1578 -11692.0469 -8253.3066]","442":"[551.7845 -11691.8867 -8317.0547]","443":"[1067.3556 -11691.8896 -8380.3594]","444":"[1581.5137 -11691.7305 -8443.4795]","445":"[2095.9663 -11692.2021 -8506.6426]","446":"[2611.2307 -11691.9932 -8569.9395]","447":"[3125.0654 -11691.7676 -8633.0137]","448":"[3639.4731 -11691.877 -8695.6416]","449":"[4150.3696 -11691.6133 -8756.6855]","450":"[4660.5132 -11691.6729 -8815.3838]","451":"[5173.3569 -11691.8135 -8869.3457]","452":"[5526.583 -11691.7451 -8899.6953]"},"18":{"1":"[11251.2822 -2846.6602 -5276.2046]","2":"[11250.5547 -2745.4106 -5274.5405]","3":"[11273.752 -2232.116 -5273.4658]","4":"[11341.5039 -1723.3824 -5273.4878]","5":"[11467.9209 -1224.1456 -5273.5161]","6":"[11640.8496 -741.1426 -5273.5127]","7":"[11834.1465 -266.414 -5273.4561]","8":"[12013.6611 215.2262 -5273.4136]","9":"[12149.1484 711.9863 -5273.4116]","10":"[12227.374 1218.7456 -5273.3076]","11":"[12256.1387 1730.2482 -5273.457]","12":"[12257.7246 1841.8517 -5273.4448]"},"19":{"1":"[-5088.1846 15041.7471 -3751.4431]","2":"[-4575.7266 15072.3008 -3751.1946]","3":"[-4068.468 15151.6064 -3751.3816]","4":"[-3566.6575 15254.1895 -3751.3569]","5":"[-3059.1482 15340.1133 -3751.5522]","6":"[-2549.1782 15387.6436 -3751.4622]","7":"[-2034.6593 15406.7793 -3754.8049]","8":"[-1517.8894 15411.1045 -3774.1689]","9":"[-1003.7453 15410.8066 -3816.3381]","10":"[-491.0555 15410.291 -3870.7959]","11":"[18.2716 15410.4434 -3929.6108]","12":"[529.1116 15410.9424 -3991.2002]","13":"[1041.2151 15410.4189 -4053.7305]","14":"[1557.1549 15410.6826 -4117.3198]","15":"[2070.2734 15410.3516 -4180.3618]","16":"[2581.3459 15410.6816 -4242.9468]","17":"[3101.8079 15410.3574 -4306.9878]","18":"[3616.731 15410.0518 -4370.1782]","19":"[4132.4795 15410.376 -4433.5]","20":"[4653.084 15410.6426 -4497.0845]","21":"[5164.8159 15410.9658 -4558.8579]","22":"[5679.0669 15411.2314 -4619.5156]","23":"[6200.2905 15410.9639 -4677.21]","24":"[6720.7627 15411.1885 -4726.457]","25":"[7236.314 15410.5293 -4753.728]","26":"[7758.1084 15409.0059 -4762.3979]","27":"[8277.9482 15387.3701 -4762.2563]","28":"[8791.1377 15331.1006 -4762.5537]","29":"[9292.5322 15225.5449 -4761.7378]","30":"[9786.915 15062.2725 -4762.3984]","31":"[10250.4766 14833.5918 -4762.166]","32":"[10668.8291 14536.2686 -4762.4609]","33":"[11035.9824 14164.6934 -4762.293]","34":"[11331.1084 13737.4707 -4762.3521]","35":"[11553.9971 13271.4854 -4762.438]","36":"[11710.9414 12781.7256 -4762.2095]","37":"[11813.2139 12268.0918 -4762.1836]","38":"[11867.6133 11749.6787 -4762.2969]","39":"[11884.8125 11230.001 -4771.4277]","40":"[11887.5918 10717.1074 -4800.3481]","41":"[11886.208 10203.3428 -4848.8604]","42":"[11887.0176 9682.8047 -4906.8706]","43":"[11886.4697 9168.1455 -4967.54]","44":"[11887.1777 8647.9619 -5029.8628]","45":"[11886.7549 8131.7217 -5091.7813]","46":"[11887.0723 7613.2217 -5151.7207]","47":"[11886.7861 7092.0405 -5207.522]","48":"[11886.8984 6570.021 -5250.395]","49":"[11887.0781 6054.8618 -5270.7061]","50":"[11891.5586 5538.7471 -5273.4063]","51":"[11910.3457 5025.1523 -5273.5386]","52":"[11959.6152 4515.0508 -5273.356]","53":"[12045.7783 4009.2742 -5273.2725]","54":"[12148.3408 3507.6252 -5273.3984]","55":"[12227.0449 3000.5256 -5273.251]","56":"[12256.3164 2488.7876 -5273.4839]","57":"[12257.3389 2431.7844 -5273.4976]"},"20":{"1":"[2151.4246 -15157.0889 -10009.4219]","2":"[2049.3037 -15157.1465 -10009.4521]","3":"[1537.4489 -15138.3076 -10009.4473]","4":"[1023.1358 -15074.9795 -10009.3574]","5":"[521.5983 -14953.917 -10009.4229]","6":"[34.8936 -14783.71 -10009.251]","7":"[-440.8094 -14590.8457 -10009.3672]","8":"[-921.0248 -14408.6563 -10009.3828]","9":"[-1419.4646 -14267.8105 -10009.4707]","10":"[-1929.4438 -14182.6152 -10009.4355]","11":"[-2441.8982 -14153.0117 -10009.4229]","12":"[-2747.0869 -14146.4424 -10009.6514]"},"21":{"1":"[-7064.8794 10649.3223 -10521.3027]","2":"[-6964.8081 10651.0742 -10521.4063]","3":"[-6453.1411 10669.6846 -10521.4961]","4":"[-5944.4819 10730.8672 -10521.4609]","5":"[-5439.1509 10830.0332 -10521.418]","6":"[-4934.4395 10927.1113 -10521.5088]","7":"[-4425.979 10987.6084 -10521.4756]","8":"[-3910.8796 11015.8438 -10521.3906]","9":"[-3393.3833 11023.4385 -10521.3887]","10":"[-2877.9756 11024.5146 -10521.4512]","11":"[-2359.4197 11025.1895 -10521.4131]","12":"[-1837.0775 11024.7598 -10521.2305]","13":"[-1313.5604 11024.4824 -10521.3477]","14":"[-797.0997 11024.6689 -10521.4619]","15":"[-272.6636 11024.8623 -10521.4287]","16":"[246.4557 11024.4756 -10521.5049]","17":"[760.2831 11024.3945 -10521.418]","18":"[1285.0769 11024.5771 -10521.5381]","19":"[1805.2994 11024.3945 -10521.4326]","20":"[2322.8381 11024.5088 -10521.3633]","21":"[2836.7688 11024.0986 -10521.4453]","22":"[3355.2957 11024.2959 -10521.4229]","23":"[3872.1084 11024.0605 -10521.3633]","24":"[4385.064 11024.1533 -10521.418]","25":"[4474.5356 11024.0137 -10521.1191]"},"22":{"1":"[-1167.4999 11024.5273 -10521.4629]","2":"[-1681.0438 11037.7881 -10521.5]","3":"[-2192.5417 11089.5332 -10521.3994]","4":"[-2701.8257 11178.9482 -10521.2764]","5":"[-3211.1145 11256.8789 -10521.375]","6":"[-3726.5107 11291.1055 -10521.3965]","7":"[-4111.668 11304.9463 -10521.4346]"},"23":{"1":"[4464.2183 11288.0918 -10521.4229]","2":"[3942.1597 11288.3926 -10521.4082]","3":"[3427.7063 11288.25 -10521.4824]","4":"[2905.4509 11288.2939 -10521.3945]","5":"[2381.0239 11288.751 -10521.4912]","6":"[1861.7886 11288.5039 -10521.3789]","7":"[1347.7365 11288.2939 -10521.4922]","8":"[826.1921 11288.4541 -10521.4092]","9":"[310.0796 11288.3506 -10521.4814]","10":"[-204.0466 11288.3711 -10521.418]","11":"[-725.96 11288.1914 -10521.4375]","12":"[-1245.606 11288.5928 -10521.4688]","13":"[-1762.453 11288.1953 -10521.4668]","14":"[-2275.8979 11288.7217 -10521.2764]","15":"[-2792.5251 11288.5654 -10521.3369]","16":"[-3307.199 11289.127 -10521.2139]","17":"[-3831.1672 11294.7881 -10521.2666]","18":"[-4354.438 11318.8916 -10521.5195]","19":"[-4874.5313 11376.6406 -10521.2451]","20":"[-5386.6436 11472.1299 -10521.334]","21":"[-5890.8584 11572.4707 -10521.4375]","22":"[-6401.8311 11638.7178 -10521.5371]","23":"[-6920.0518 11660.043 -10521.4258]","24":"[-7110.6406 11659.9717 -10521.2363]"},"24":{"1":"[-4051.9509 11302.3018 -10521.3145]","2":"[-3951.1082 11298.623 -10521.4404]","3":"[-3431.9077 11274.4834 -10521.3164]","4":"[-2918.7256 11218.1758 -10521.46]","5":"[-2410.2966 11126.8223 -10521.2334]","6":"[-1903.3087 11052.8477 -10521.2607]","7":"[-1385.6346 11025.8086 -10521.3311]","8":"[-957.9063 11024.2373 -10521.4238]"},"25":{"1":"[-536.0779 11596.6396 -1622.4255]","2":"[-181.6411 11226.7441 -1622.4861]","3":"[145.9695 10829.6475 -1622.6833]","4":"[427.8542 10398.0811 -1622.4144]","5":"[660.5457 9940.5381 -1622.3754]","6":"[862.7678 9468.8721 -1622.2606]","7":"[1065.4482 8998.4248 -1622.3685]","8":"[1305.1803 8541.917 -1622.3842]","9":"[1591.6849 8116.3594 -1622.142]","10":"[1922.4342 7724.21 -1622.333]","11":"[2187.0742 7447.2251 -1622.3037]"},"26":{"1":"[4298.915 -648.7664 20.5584]","2":"[4298.6138 -548.6555 20.5322]","3":"[4278.6479 -35.0244 20.6325]","4":"[4216.3296 473.6113 20.5588]","5":"[4124.7251 979.5752 20.5589]","6":"[4057.8076 1489.1124 20.5382]","7":"[4034.5989 2002.4259 20.5669]","8":"[4033.4734 2126.3059 20.5809]"},"27":{"1":"[4238.0347 11023.249 -10521.501]","2":"[4338.4165 11023.1865 -10521.4824]","3":"[4852.3125 11022.9512 -10521.4336]","4":"[5366.8091 11022.792 -10521.5137]","5":"[5883.7925 11022.6396 -10521.4443]","6":"[6398.1641 11022.7549 -10522.6592]","7":"[6913.9722 11023.3379 -10539.124]","8":"[7425.8677 11023.2207 -10576.1016]","9":"[7935.77 11023.2275 -10628.2656]","10":"[8447.7939 11023.1514 -10686.4639]","11":"[8963.0283 11022.7695 -10748.293]","12":"[9470.3594 11006.1514 -10816.2783]","13":"[9980.0381 10961.2754 -10884.6279]","14":"[10485.9043 10864.0586 -10942.2803]","15":"[10979.0332 10718.6973 -10984.4023]","16":"[11446.6357 10509.749 -11013.3584]","17":"[11871.9932 10224.1436 -11032.2285]","18":"[12182.8584 9924.8086 -11041.709]","19":"[12492.6885 9511.1025 -11046.2842]","20":"[12715.2324 9071.1904 -11045.833]","21":"[12875.4395 8582.6084 -11043.6436]","22":"[12971.3477 8079.4424 -11040.5479]","23":"[13020.6201 7560.7363 -11036.4004]","24":"[13034.9463 7041.8457 -11033.9756]","25":"[13036.1924 6524.2529 -11033.4922]","26":"[13035.7598 6007.4399 -11033.3984]","27":"[13036.0146 5491.0664 -11033.4863]","28":"[13036.167 4971.9756 -11046.5938]","29":"[13035.5996 4453.7441 -11079.0684]","30":"[13036.2012 3939.8345 -11130.2383]","31":"[13035.8027 3421.7888 -11188.6582]","32":"[13036.0908 2904.0906 -11249.8008]","33":"[13025.6943 2387.0759 -11318.7295]","34":"[12983.7139 1878.4086 -11387.1318]","35":"[12896.2588 1377.252 -11445.7461]","36":"[12758.1709 875.1086 -11491.2295]","37":"[12557.5625 397.8955 -11521.7783]","38":"[12277.3164 -38.9672 -11542.1455]","39":"[11976.1963 -365.3413 -11552.6611]","40":"[11565.1328 -681.3035 -11558.1064]","41":"[11107.6162 -921.2552 -11558.1035]","42":"[10618.5498 -1084.5851 -11555.5371]","43":"[10114.1572 -1183.0703 -11552.6455]","44":"[9604.4209 -1233.3522 -11548.667]","45":"[9092.665 -1248.0078 -11556.3701]","46":"[8574.3711 -1250.9382 -11586.3516]","47":"[8055.3291 -1249.3761 -11636.2832]","48":"[7544.6719 -1250.5852 -11693.585]","49":"[7028.4692 -1249.4918 -11754.4668]","50":"[6508.5537 -1244.0417 -11823.3857]","51":"[5995.1333 -1205.6755 -11892.2471]","52":"[5492.6885 -1122.3002 -11952.6846]","53":"[4999.4014 -992.3585 -11998.2627]","54":"[4519.2119 -800.7273 -12030.8174]","55":"[4077.772 -532.398 -12052.1709]","56":"[3754.041 -248.0152 -12063.4639]","57":"[3426.3699 151.997 -12069.6494]","58":"[3186.1943 580.9349 -12070.5215]","59":"[3007.2297 1061.0388 -12068.5]","60":"[2896.5254 1566.0378 -12065.3398]","61":"[2836.3066 2079.844 -12061.5635]","62":"[2816.4148 2596.8494 -12058.5332]","63":"[2828.8569 3115.8613 -12057.5996]","64":"[2867.4927 3631.9348 -12057.5273]","65":"[2932.2263 4140.7251 -12057.5713]","66":"[3027.2756 4651.7261 -12057.4854]","67":"[3151.6941 5152.4385 -12057.5176]","68":"[3308.6055 5646.0776 -12057.2959]","69":"[3474.8245 6131.1523 -12057.3984]","70":"[3627.7642 6631.5386 -12057.7695]","71":"[3746.4387 7141.9766 -12057.3945]","72":"[3834.8308 7651.0215 -12057.6318]","73":"[3893.4155 8163.6689 -12057.6025]","74":"[3927.2642 8677.8672 -12057.1289]","75":"[3937.9963 9191.0625 -12057.582]","76":"[3944.9438 9715.2822 -12057.5332]","77":"[3971.7166 10236.5469 -12057.2178]","78":"[4041.6216 10750.5762 -12057.2178]","79":"[4159.1157 11253.1963 -12057.085]","80":"[4336.4756 11733.9814 -12057.3936]","81":"[4583.9111 12192.6885 -12057.2285]","82":"[4902.0273 12602.0762 -12057.291]","83":"[5284.8716 12948.2959 -12057.293]","84":"[5719.4473 13223.6377 -12057.3379]","85":"[6189.2339 13429.4873 -12057.3643]","86":"[6680.9502 13572.5859 -12057.2051]","87":"[7196.377 13663.2422 -12057.2217]","88":"[7709.9956 13708.3311 -12057.3838]","89":"[8222.9668 13713.1992 -12057.2568]","90":"[8746.2051 13679.8086 -12057.2744]","91":"[9261.8018 13600.1602 -12057.2969]","92":"[9764.6035 13470.0049 -12057.2656]","93":"[10243.8164 13278.6357 -12057.2178]","94":"[10686.3379 13021.0664 -12057.4707]","95":"[11086.8887 12687.3115 -12057.4131]","96":"[11413.9512 12300.0684 -12057.208]","97":"[11678.1563 11855.2441 -12057.3838]","98":"[11871.8926 11376.668 -12057.3428]","99":"[12004.7363 10878.6621 -12057.2773]","100":"[12084.8076 10369.9795 -12057.458]","101":"[12122.0264 9856.9805 -12057.0693]","102":"[12131.2725 9343.4824 -12057.5117]","103":"[12130.917 8822.9297 -12057.4131]","104":"[12130.791 8302.8682 -12057.4072]","105":"[12131.3838 7781.3921 -12057.499]","106":"[12130.5996 7257.8525 -12057.4658]","107":"[12131.4717 6743.1729 -12057.4951]","108":"[12131.1416 6220.6978 -12057.4443]","109":"[12130.8594 5703.1025 -12057.4346]","110":"[12130.8281 5186.042 -12057.3838]","111":"[12131.4863 4669.4878 -12057.3604]","112":"[12131.1113 4153.4922 -12057.4063]","113":"[12130.8945 3638.0278 -12057.3535]","114":"[12131.5957 3123.0933 -12057.4893]","115":"[12130.4316 2608.6814 -12057.4697]","116":"[12130.3848 2094.8298 -12057.4316]","117":"[12131.3721 1581.5061 -12057.4189]","118":"[12131.0049 1068.7216 -12057.3467]","119":"[12131.0225 549.2548 -12057.4463]","120":"[12131.0361 35.6875 -12057.4541]","121":"[12130.9844 -486.0617 -12057.4512]","122":"[12129.7598 -1009.6346 -12056.791]","123":"[12130.5732 -1527.1187 -12056.1279]","124":"[12129.0225 -2051.9507 -12056.2207]","125":"[12111.3242 -2574.6555 -12054.5166]","126":"[12059.1855 -3092.3679 -12049.2607]","127":"[11961.834 -3599.2649 -12039.5811]","128":"[11812.6758 -4099.9717 -12024.5098]","129":"[11611.2412 -4571.6558 -12002.79]","130":"[11351.7061 -5012.6831 -11972.0645]","131":"[11023.6514 -5409.6821 -11927.9844]","132":"[10703.3408 -5682.4922 -11881.7881]","133":"[10260.4609 -5942.9229 -11821.3506]","134":"[9803.1787 -6113.0015 -11768.9658]","135":"[9295.4746 -6209.6992 -11727.3701]","136":"[8778.6934 -6239.3921 -11698.2041]","137":"[8257.4668 -6242.4429 -11680.959]","138":"[7740.6914 -6245.8389 -11672.8125]","139":"[7227.5522 -6247.1851 -11673.0605]","140":"[6711.7031 -6247.6982 -11673.1484]","141":"[6199.519 -6247.3599 -11672.9053]","142":"[5685.2983 -6246.9683 -11672.8975]","143":"[5169.7168 -6247.4805 -11673.1572]","144":"[4648.1338 -6246.6216 -11672.9434]","145":"[4133.8267 -6247.6226 -11672.9678]","146":"[3619.9009 -6246.6816 -11673.125]","147":"[3106.4141 -6248.0605 -11673.1973]","148":"[2593.3257 -6247.2065 -11673.0742]","149":"[2078.5833 -6247.5586 -11672.9375]","150":"[1560.2836 -6247.9917 -11673.0508]","151":"[1046.3217 -6247.1592 -11673.1406]","152":"[546.3865 -6247.9097 -11673.083]"},"28":{"1":"[7994.2739 -6502.501 -11673.2051]","2":"[8509.9658 -6501.1587 -11674.6445]","3":"[9027.5664 -6481.0063 -11679.5693]","4":"[9539.2998 -6447.4766 -11687.9629]","5":"[10053.9258 -6377.4683 -11699.8008]","6":"[10558.7275 -6252.2178 -11715.9746]","7":"[11040.8359 -6063.438 -11735.4561]","8":"[11493.001 -5816.1299 -11758.123]","9":"[11902.1729 -5507.1543 -11782.3906]","10":"[12253.5576 -5133.8643 -11807.9531]","11":"[12541.5313 -4704.3687 -11833.8691]","12":"[12766.1982 -4235.0254 -11860.6045]","13":"[12931.29 -3742.2339 -11889.2363]","14":"[13043.3955 -3234.1895 -11920.5381]","15":"[13108.4414 -2719.9607 -11953.7988]","16":"[13133.5576 -2205.04 -11991.7871]","17":"[13138.8965 -1693.4707 -12027.3301]","18":"[13137.4072 -1179.95 -12050.6777]","19":"[13138.6172 -658.592 -12057.6436]","20":"[13137.2617 -135.9899 -12057.4668]","21":"[13138.7031 386.157 -12057.4121]","22":"[13137.3926 907.8809 -12057.4873]","23":"[13138.0459 1429.1836 -12057.498]","24":"[13138.5547 1950.0883 -12057.4336]","25":"[13138.1641 2470.6082 -12057.4287]","26":"[13138.166 2990.7563 -12057.4248]","27":"[13137.9014 3510.5305 -12057.4414]","28":"[13138.0303 4029.9265 -12057.3945]","29":"[13137.6035 4551.8384 -12057.5059]","30":"[13137.9766 5065.75 -12057.4756]","31":"[13137.9971 5581.8848 -12057.4922]","32":"[13137.5635 6104.769 -12057.4502]","33":"[13137.6592 6627.7051 -12057.4365]","34":"[13137.7402 7148.2432 -12057.4258]","35":"[13137.7744 7670.502 -12057.4199]","36":"[13137.8936 8183.2246 -12057.3682]","37":"[13138.0752 8699.6963 -12057.502]","38":"[13137.8672 9213.4277 -12057.3301]","39":"[13138.3711 9726.2158 -12057.416]","40":"[13138.7168 10238.5771 -12057.4863]","41":"[13132.0947 10756.9385 -12057.3037]","42":"[13101.5215 11278.5342 -12056.9541]","43":"[13028.1533 11792.415 -12057.4385]","44":"[12906.0225 12294.2734 -12057.4141]","45":"[12723.2598 12774.7344 -12057.5195]","46":"[12468.8428 13231.3857 -12057.4688]","47":"[12143.7539 13636.7744 -12057.4717]","48":"[11755.3789 13977.8633 -12057.2891]","49":"[11316.2832 14247.1172 -12057.3027]","50":"[10842.5654 14448.1572 -12057.3916]","51":"[10342.1367 14586.4883 -12057.3027]","52":"[9830.8252 14672.2002 -12057.1211]","53":"[9314.6357 14712.6289 -12057.4258]","54":"[8797.1689 14723.6904 -12057.4521]","55":"[8279.9541 14723.0488 -12057.3828]","56":"[7763.0815 14723.8633 -12057.4805]","57":"[7239.7632 14723.1641 -12057.3301]","58":"[6716.5049 14710.1582 -12057.2217]","59":"[6196.9829 14667.1719 -12057.2324]","60":"[5686.1929 14576.7139 -12056.8818]","61":"[5190.2305 14434.8623 -12057.668]","62":"[4720.064 14229.252 -12057.4463]","63":"[4281.7319 13953.2236 -12057.4121]","64":"[3899.4187 13608.0576 -12057.2979]","65":"[3583.3723 13204.1406 -12057.4316]","66":"[3334.2532 12748.1719 -12057.3711]","67":"[3154.4729 12261.9092 -12057.4111]","68":"[3035.4187 11761.8594 -12057.4521]","69":"[2965.1726 11244.5527 -12057.2881]","70":"[2936.4963 10722.6943 -12057.3496]","71":"[2930.7593 10200.3174 -12057.3174]","72":"[2931.5095 9678.6572 -12057.5488]","73":"[2930.1697 9157.8887 -12057.2656]","74":"[2915.5168 8637.8652 -12057.7402]","75":"[2868.7598 8121.2432 -12057.4727]","76":"[2785.5518 7610.1577 -12057.7158]","77":"[2686.3027 7102.6421 -12057.4111]","78":"[2606.2927 6585.332 -12057.8037]","79":"[2559.4109 6064.8745 -12057.7402]","80":"[2549.3762 5543.0493 -12057.5762]","81":"[2546.3459 5021.5718 -12057.7129]","82":"[2548.657 4500.374 -12057.6367]","83":"[2546.5649 3979.7576 -12057.7129]","84":"[2548.3748 3466.1577 -12057.5361]","85":"[2546.8318 2953.9036 -12057.6924]","86":"[2554.8513 2434.0842 -12057.2832]","87":"[2583.9458 1914.8698 -12057.2402]","88":"[2656.8918 1401.532 -12057.2744]","89":"[2779.5745 898.0455 -12057.2373]","90":"[2968.1882 418.6499 -12057.3994]","91":"[3227.5288 -25.7816 -12055.6494]","92":"[3553.9138 -421.8961 -12049.0732]","93":"[3941.4771 -760.9238 -12035.2168]","94":"[4373.1538 -1021.8484 -12013.3633]","95":"[4856.0645 -1222.4259 -11982.167]","96":"[5352.3267 -1359.1747 -11941.7129]","97":"[5860.4385 -1452.76 -11891.2949]","98":"[6367.1973 -1499.3593 -11833.8154]","99":"[6884.1128 -1513.8931 -11771.8818]","100":"[7403.7583 -1513.6985 -11710.0244]","101":"[7919.0635 -1514.1713 -11651.3945]","102":"[8433.1836 -1513.381 -11598.8037]","103":"[8952.6172 -1514.6958 -11561.3545]","104":"[9467.3008 -1503.402 -11546.292]","105":"[9988.124 -1466.454 -11545.0762]","106":"[10501.1406 -1382.0667 -11545.2686]","107":"[11000.3369 -1246.0283 -11545.3184]","108":"[11472.46 -1040.7552 -11545.3535]","109":"[11905.6758 -767.3871 -11542.7168]","110":"[12294.3232 -420.072 -11534.6973]","111":"[12621.001 -16.5702 -11518.167]","112":"[12850.501 398.9348 -11496.2451]","113":"[13038.0605 881.4165 -11463.332]","114":"[13164.8066 1379.9117 -11421.5322]","115":"[13250.9355 1888.292 -11369.5693]","116":"[13289.8789 2406.8765 -11309.9121]","117":"[13301.0371 2916.3557 -11248.3125]","118":"[13298.8174 3428.7852 -11187.9502]","119":"[13301.0762 3946.8499 -11129.4561]","120":"[13299.0117 4459.7705 -11078.7832]","121":"[13300.7793 4974.9712 -11045.8271]","122":"[13300.0508 5494.4341 -11033.2607]","123":"[13300.8018 6016.335 -11033.5693]","124":"[13300.3594 6537.8154 -11033.3887]","125":"[13300.0244 7059.0122 -11033.376]","126":"[13283.0791 7578.4189 -11033.2764]","127":"[13237.1045 8092.4287 -11033.2725]","128":"[13143.3477 8601.0361 -11033.1211]","129":"[12992.4102 9093.0215 -11033.3135]","130":"[12768.1299 9566.0957 -11032.6523]","131":"[12472.4727 9994.4561 -11029.585]","132":"[12114.835 10365.2295 -11019.2783]","133":"[11698.1934 10671.7412 -11001.3652]","134":"[11236.7666 10902.3701 -10974.8936]","135":"[10752.9951 11067.4805 -10939.9248]","136":"[10254.8789 11182.416 -10895.0303]","137":"[9743.1025 11252.6592 -10840.1299]","138":"[9233.8135 11281.6465 -10780.6934]","139":"[8724.0459 11288.334 -10719.1182]","140":"[8212.041 11286.417 -10659.252]","141":"[7700.1777 11286.1455 -10602.7256]","142":"[7183.3252 11286.8857 -10555.3496]","143":"[6666.7441 11287.4521 -10528.8994]","144":"[6153.3667 11287.7715 -10521.5166]","145":"[5638.1484 11286.9834 -10521.4346]","146":"[5124.5444 11287.4561 -10521.5303]","147":"[4787.7764 11287.5342 -10521.4248]"},"29":{"1":"[3532.1907 13689.9111 -14300.3789]","2":"[3637.6326 13689.5146 -14300.4346]","3":"[4151.2427 13669.3574 -14300.4785]","4":"[4662.6792 13608.2383 -14300.5801]","5":"[5166.9854 13513.9854 -14300.6943]","6":"[5670.8188 13413.8008 -14300.6475]","7":"[6176.1987 13313.4531 -14300.6445]","8":"[6685.8833 13211.9502 -14305.5508]","9":"[7190.1514 13112.7139 -14328.8223]","10":"[7690.9946 13014.3271 -14373.4766]","11":"[8191.3208 12916.1318 -14428.5693]","12":"[8704.0469 12814.9385 -14489.5225]","13":"[9217.333 12713.9297 -14551.8555]","14":"[9722.1348 12614.6729 -14613.7168]","15":"[10229.8125 12515.2178 -14674.3721]","16":"[10741.3018 12414.8809 -14731.8809]","17":"[11247.6689 12315.0752 -14779.6143]","18":"[11760.8115 12214.0283 -14805.3232]","19":"[12268.5947 12110.3643 -14812.5039]","20":"[12769.8848 11978.6484 -14812.2646]","21":"[13249.5586 11795.1641 -14812.3965]","22":"[13709.1201 11537.7188 -14812.5225]","23":"[14054.5781 11254.6338 -14812.2773]","24":"[14305.8818 10961.0352 -14812.4521]","25":"[14518.1992 10598.8457 -14812.4609]","26":"[14650.5098 10241.4531 -14812.5078]","27":"[14745.7246 9726.8428 -14812.4941]","28":"[14756.4453 9205.8105 -14812.3359]","29":"[14702.8076 8689.5225 -14812.2822]","30":"[14614.9277 8179.4707 -14812.1758]","31":"[14512.9619 7670.0083 -14812.4189]","32":"[14415.0898 7166.7329 -14812.4307]","33":"[14315.4668 6662.7358 -14812.4756]","34":"[14210.9521 6133.7271 -14812.4658]","35":"[14105.4131 5594.0381 -14812.458]","36":"[14004.4629 5078.1772 -14812.4541]","37":"[13902.0127 4557.3125 -14811.9893]","38":"[13794.2822 4011.7439 -14812.4512]","39":"[13687.041 3467.667 -14812.4736]","40":"[13580.3311 2924.9451 -14812.4717]","41":"[13473.791 2383.6846 -14812.415]","42":"[13367.5557 1843.9121 -14812.4912]","43":"[13261.6963 1305.54 -14812.4648]","44":"[13156.2207 768.5407 -14812.4414]","45":"[13051.1758 232.887 -14812.541]","46":"[12946.3242 -301.3565 -14812.4844]","47":"[12841.1309 -834.0632 -14812.4287]","48":"[12736.3564 -1365.4163 -14812.3877]","49":"[12632.9277 -1895.6097 -14812.4365]","50":"[12529.0928 -2424.3159 -14812.4717]","51":"[12424.8076 -2951.5457 -14812.4609]","52":"[12322.6963 -3468.9883 -14812.4014]","53":"[12221.6289 -3983.2571 -14812.4238]","54":"[12115.4307 -4526.8765 -14812.4473]","55":"[12012.4883 -5049.9829 -14812.498]","56":"[11911.7744 -5557.7222 -14812.4814]","57":"[11807.5889 -6089.9521 -14812.4473]","58":"[11704.6592 -6617.0322 -14812.4561]","59":"[11601.7881 -7138.7261 -14812.4521]","60":"[11497.9385 -7645.5449 -14812.3701]","61":"[11370.8867 -8145.4121 -14812.3359]","62":"[11207.4727 -8631.8457 -14812.1855]","63":"[10985.7334 -9120.2275 -14812.2236]","64":"[10707.4961 -9574.3887 -14812.2139]","65":"[10367.2148 -9979.3262 -14812.1309]","66":"[9966.1563 -10318.8604 -14812.6221]","67":"[9514.0195 -10581.1357 -14812.3281]","68":"[9025.7471 -10762.0039 -14812.3691]","69":"[8517.5166 -10866.0938 -14812.2822]","70":"[8001.6758 -10904.6338 -14812.0938]","71":"[7486.3853 -10888.1133 -14812.335]","72":"[6975.248 -10828.7578 -14812.1953]","73":"[6469.3018 -10739.4375 -14812.3555]","74":"[5953.8057 -10638.9258 -14812.4229]","75":"[5440.7104 -10536.4258 -14812.5117]","76":"[4924.5425 -10436.7705 -14812.3857]","77":"[4394.1738 -10331.7734 -14812.4121]","78":"[3874.5334 -10228.7383 -14812.3838]","79":"[3354.5271 -10127.8555 -14812.3174]","80":"[2835.9783 -10025.417 -14812.4434]","81":"[2318.46 -9923.0635 -14812.4629]","82":"[1801.6915 -9822.2734 -14812.377]","83":"[1286.1272 -9720.8418 -14812.3213]","84":"[771.7814 -9618.9336 -14812.3516]","85":"[258.157 -9518.6484 -14812.2949]","86":"[-254.3105 -9417.6113 -14812.3965]","87":"[-765.7764 -9316.8818 -14812.4053]","88":"[-1276.2814 -9216.7656 -14812.335]","89":"[-1785.7622 -9116.5039 -14812.3291]","90":"[-2302.0156 -9014.5088 -14812.2979]","91":"[-2822.1394 -8912.5107 -14812.4961]","92":"[-3325.3206 -8811.4951 -14812.4805]","93":"[-3848.8625 -8690.293 -14812.5742]","94":"[-4360.4126 -8532.7119 -14812.2529]","95":"[-4859.2964 -8342.459 -14812.1875]","96":"[-5340.8159 -8145.1392 -14812.4326]","97":"[-5831.0542 -7943.9414 -14812.457]","98":"[-6327.3013 -7742.0845 -14812.4531]","99":"[-6825.6875 -7537.9863 -14812.3555]","100":"[-7323.0659 -7334.0566 -14812.4033]","101":"[-7819.7192 -7131.0264 -14812.5234]","102":"[-8315.3896 -6928.2427 -14812.5195]","103":"[-8809.8018 -6725.1943 -14812.3115]","104":"[-9303.793 -6523.6772 -14812.501]","105":"[-9796.7266 -6322.229 -14812.4775]","106":"[-10288.3955 -6120.4043 -14812.4658]","107":"[-10775.8184 -5921.5703 -14812.418]","108":"[-11266.582 -5714.626 -14812.4941]","109":"[-11742.8369 -5483.5513 -14811.6885]","110":"[-12196.8525 -5214.0283 -14812.0742]","111":"[-12617.6992 -4902.4585 -14812.0742]","112":"[-12989.2393 -4544.9155 -14812.3975]","113":"[-13308.3916 -4133.0068 -14812.333]","114":"[-13551.2832 -3677.2957 -14812.5264]","115":"[-13713.2988 -3185.416 -14812.4492]","116":"[-13789.6328 -2671.4226 -14812.4043]","117":"[-13787.9414 -2153.9885 -14812.6162]","118":"[-13721.8457 -1642.849 -14812.2451]","119":"[-13603.709 -1142.548 -14812.2891]","120":"[-13443.5576 -653.5704 -14811.0918]","121":"[-13256.4287 -175.9238 -14793.9199]","122":"[-13057.6094 297.5261 -14755.6387]","123":"[-12853.2021 783.9495 -14700.6465]","124":"[-12654.5674 1259.3628 -14641.4053]","125":"[-12456.04 1731.5317 -14579.9219]","126":"[-12248.9492 2228.2607 -14515.2139]","127":"[-12039.7764 2726.0203 -14451.4619]","128":"[-11840.4307 3199.9285 -14393.915]","129":"[-11631.3447 3699.7581 -14341.0283]","130":"[-11431.666 4176.4258 -14310.4902]","131":"[-11227.2998 4667.6899 -14300.0625]","132":"[-11022.8232 5160.1245 -14300.3701]","133":"[-10811.8613 5647.6357 -14300.209]","134":"[-10583.8955 6128.3774 -14300.3018]","135":"[-10338.0498 6598.3325 -14300.251]","136":"[-10073.2451 7055.7876 -14300.1836]","137":"[-9787.2314 7498.6182 -14300.0801]","138":"[-9479.7793 7924.729 -14300.2412]","139":"[-9148.1768 8330.6582 -14300.3574]","140":"[-8792.1396 8713.4961 -14300.3643]","141":"[-8391.3193 9087.4277 -14300.3008]","142":"[-7988.7739 9406.3984 -14300.4229]","143":"[-7563.4204 9691.4805 -14300.251]","144":"[-7084.0127 9954.4395 -14300.4893]","145":"[-6584.0459 10171.2852 -14300.4424]","146":"[-6067.6401 10340.125 -14300.4502]","147":"[-5539.3472 10460.459 -14300.3145]","148":"[-5004.3076 10535.1035 -14300.4512]","149":"[-4466.4209 10565.3809 -14300.4814]","150":"[-3928.9919 10555.4111 -14300.5361]","151":"[-3394.5896 10509.6758 -14300.4609]","152":"[-2865.228 10431.0566 -14300.3984]","153":"[-2342.0264 10323.7227 -14300.4082]","154":"[-1825.7256 10191.0918 -14300.4551]","155":"[-1316.8772 10035.958 -14300.5137]","156":"[-815.629 9860.8193 -14300.2773]","157":"[-306.6468 9662.9404 -14300.374]","158":"[184.0505 9460.5 -14300.5566]","159":"[686.3942 9250.7256 -14292.6309]","160":"[1193.7112 9039.4072 -14262.7373]","161":"[1672.2434 8837.8496 -14212.5273]","162":"[2156.592 8634.4297 -14153.7764]","163":"[2630.5078 8436.7168 -14093.1689]","164":"[3127.7014 8227.7197 -14028.2295]","165":"[3612.6086 8024.7544 -13965.5762]","166":"[4085.3877 7827.0356 -13906.1758]","167":"[4560.1206 7627.1006 -13851.6719]","168":"[5054.3516 7420.4502 -13808.6807]","169":"[5539.4746 7217.3291 -13790.083]","170":"[6020.5854 7018.9482 -13788.5791]","171":"[6500.4556 6815.6738 -13788.5195]","172":"[6995.1919 6592.4409 -13788.4805]","173":"[7457.6963 6361.5771 -13788.4521]","174":"[7909.3311 6112.916 -13788.5186]","175":"[8348.6416 5845.936 -13788.5459]","176":"[8773.0244 5558.1069 -13788.374]","177":"[9204.626 5228.8613 -13788.3721]","178":"[9593.9756 4892.1265 -13788.2891]","179":"[9972.6201 4517.7275 -13788.2695]","180":"[10320.4697 4116.5693 -13788.2617]","181":"[10634.5723 3690.436 -13788.3369]","182":"[10909.8135 3240.0752 -13788.293]","183":"[11143.5 2768.4653 -13788.4717]","184":"[11333.8525 2279.4902 -13788.3809]","185":"[11478.2207 1776.4305 -13788.416]","186":"[11579.1875 1264.2792 -13788.4277]","187":"[11638.0625 738.99 -13788.4258]","188":"[11656.4004 221.6532 -13788.3721]","189":"[11637.7168 -294.4873 -13788.2393]","190":"[11586.4121 -807.1337 -13788.376]","191":"[11506.2842 -1315.0856 -13788.3662]","192":"[11399.6074 -1817.1313 -13788.3457]","193":"[11269.917 -2312.7676 -13788.3604]","194":"[11109.0498 -2833.9116 -13788.3721]","195":"[10929.7217 -3340.8635 -13788.3652]","196":"[10740.1572 -3822.4094 -13788.4258]","197":"[10544.4268 -4299.7437 -13788.4463]","198":"[10352.082 -4777.2983 -13788.5049]","199":"[10192.9385 -5264.6738 -13788.1982]","200":"[10061.4268 -5789.5898 -13788.3691]","201":"[9952.8115 -6318.7407 -13788.4873]","202":"[9849.2764 -6831.0093 -13788.4453]","203":"[9734.418 -7359.2036 -13787.9844]","204":"[9607.7734 -7866.082 -13788.2969]","205":"[9458.9395 -8371.71 -13788.4199]","206":"[9286.8408 -8876.8691 -13787.7969]","207":"[9091.7285 -9372.0557 -13788.0723]","208":"[8877.2012 -9842.8516 -13788.3594]","209":"[8633.3643 -10304.0605 -13788.4629]","210":"[8361.2578 -10747.374 -13788.2051]","211":"[8060.0845 -11169.3838 -13787.9502]","212":"[7729.0269 -11565.8408 -13788.4482]","213":"[7355.0459 -11943.8281 -13788.5195]","214":"[6944.2427 -12292.4023 -13788.4355]","215":"[6505.2671 -12601.8496 -13788.5479]","216":"[6040.4282 -12867.5615 -13788.4268]","217":"[5555.4067 -13090.6514 -13788.332]","218":"[5054.1807 -13270.4082 -13788.2705]","219":"[4541.3652 -13408.5332 -13788.3105]","220":"[4020.9392 -13508.0225 -13788.4307]","221":"[3496.3337 -13571.4531 -13788.4443]","222":"[2969.9172 -13602.457 -13788.4043]","223":"[2443.7104 -13604.6133 -13788.4043]","224":"[1919.0599 -13580.1309 -13788.457]","225":"[1396.9669 -13532.6211 -13788.3652]","226":"[878.332 -13463.9072 -13788.3584]","227":"[363.3982 -13376.6357 -13788.4746]","228":"[-157.9193 -13274.9561 -13788.3662]","229":"[-683.1862 -13168.2373 -13788.3057]","230":"[-1193.7418 -13065.4316 -13788.4541]","231":"[-1703.8014 -12963.1982 -13788.5195]","232":"[-2218.967 -12859.8262 -13788.4922]","233":"[-2732.8047 -12756.3164 -13788.4561]","234":"[-3245.2788 -12652.8564 -13788.4668]","235":"[-3756.6428 -12550.2734 -13788.4551]","236":"[-4266.8203 -12448.0322 -13788.4609]","237":"[-4810.0586 -12338.7568 -13788.3584]","238":"[-5333.458 -12232.9102 -13788.2041]","239":"[-5850.3169 -12128.7627 -13788.4463]","240":"[-6354.7813 -12027.9443 -13788.4805]","241":"[-6884.9858 -11918.917 -13789.0498]","242":"[-7391.1919 -11805.6621 -13789.5947]","243":"[-7890.4663 -11676.2773 -13789.2383]","244":"[-8384.1309 -11525.082 -13789.2256]","245":"[-8869.2578 -11354.8027 -13789.3691]","246":"[-9344.8096 -11163.6094 -13788.9551]","247":"[-9842.2813 -10928.7744 -13789.3047]","248":"[-10323.8076 -10665.75 -13789.3535]","249":"[-10784.1836 -10370.4609 -13789.251]","250":"[-11219.5938 -10042.4707 -13788.6611]","251":"[-11625.1738 -9681.7119 -13789.0293]","252":"[-11996.041 -9287.623 -13789.334]","253":"[-12329.8457 -8864.0049 -13789.3428]","254":"[-12621.084 -8412.0811 -13789.4199]","255":"[-12869.3477 -7936.9048 -13789.4814]","256":"[-13074.3584 -7443.2295 -13789.2773]","257":"[-13235.7119 -6935.1152 -13789.2754]","258":"[-13357.0283 -6417.332 -13789.4014]","259":"[-13440.5762 -5893.3418 -13789.2793]","260":"[-13489.5635 -5366.2915 -13789.3135]","261":"[-13507.5811 -4838.5127 -13788.9893]","262":"[-13497.2275 -4312.0503 -13789.1621]","263":"[-13462.0029 -3787.7629 -13789.3037]","264":"[-13404.9023 -3266.4746 -13789.3506]","265":"[-13327.5225 -2749.2166 -13788.998]","266":"[-13233.1104 -2236.5908 -13789.291]","267":"[-13130.3486 -1726.7643 -13789.3643]","268":"[-13024.7314 -1202.9604 -13780.1416]","269":"[-12917.8281 -681.2442 -13749.6094]","270":"[-12814.2783 -182.1558 -13699.8193]","271":"[-12708.1523 335.6203 -13640.7783]","272":"[-12601.459 854.7872 -13577.9814]","273":"[-12495.8105 1367.4259 -13515.0264]","274":"[-12392.9854 1870.0587 -13453.7109]","275":"[-12286.6611 2388.0776 -13392.4785]","276":"[-12179.8896 2905.3899 -13337.2061]","277":"[-12072.7617 3425.3354 -13295.9199]","278":"[-11965.8174 3934.824 -13278.7178]","279":"[-11846.7852 4435.7729 -13277.5781]","280":"[-11707.6914 4948.2329 -13277.3428]","281":"[-11543.4424 5460.1738 -13277.3252]","282":"[-11361.5762 5954.2065 -13277.5732]","283":"[-11153.8818 6436.6938 -13277.4199]","284":"[-10921.3486 6906.3701 -13277.5156]","285":"[-10660.4355 7358.917 -13277.4785]","286":"[-10371.2373 7791.501 -13277.3398]","287":"[-10052.0186 8200.5186 -13277.373]","288":"[-9701.9434 8581.4531 -13277.583]","289":"[-9323.375 8931.8027 -13277.3262]","290":"[-8916.1836 9246.1289 -13277.5059]","291":"[-8484.7939 9523.7285 -13277.4512]","292":"[-8004.2505 9773.6338 -13277.502]","293":"[-7504.8442 9979.5859 -13277.3916]","294":"[-6990.9165 10141.7197 -13277.5254]","295":"[-6467.0991 10262.5439 -13277.4111]","296":"[-5936.998 10344.7734 -13277.4775]","297":"[-5403.7358 10392.417 -13277.3682]","298":"[-4869.8877 10408.0713 -13277.3984]","299":"[-4336.895 10395.4199 -13277.4912]","300":"[-3806.0623 10357.418 -13277.376]","301":"[-3278.6365 10296.7168 -13277.3096]","302":"[-2755.5706 10216.4541 -13277.2998]","303":"[-2236.6558 10118.8643 -13277.3418]","304":"[-1719.5542 10016.0313 -13277.4873]","305":"[-1208.9558 9896.415 -13276.8906]","306":"[-728.6043 9718.4072 -13277.1699]","307":"[-259.6806 9458.6992 -13277.3555]","308":"[164.0954 9134.2197 -13277.3857]","309":"[546.6168 8764.2832 -13277.2539]","310":"[890.4574 8360.0713 -13277.291]","311":"[1202.7516 7932.4331 -13277.4385]","312":"[1498.2418 7493.8325 -13277.4307]","313":"[1773.548 7043.8413 -13277.4492]","314":"[2017.6675 6578.5142 -13277.21]","315":"[2229.8982 6098.8726 -13277.1455]","316":"[2430.0586 5615.9746 -13277.4434]","317":"[2631.5864 5134.7231 -13277.2627]","318":"[2831.689 4653.6758 -13277.3838]","319":"[3031.9026 4173.4312 -13277.1914]","320":"[3231.7554 3693.8618 -13277.4463]","321":"[3431.3108 3214.8982 -13277.2129]","322":"[3630.6021 2736.6545 -13277.3975]","323":"[3833.3118 2260.9045 -13277.4453]","324":"[4059.6628 1798.2139 -13277.1514]","325":"[4318.7656 1354.9869 -13277.3164]","326":"[4597.104 924.3375 -13277.3545]","327":"[4881.3906 498.4594 -13277.4883]","328":"[5176.5654 52.7148 -13277.5244]","329":"[5472.936 -391.3092 -13277.3662]","330":"[5767.5142 -835.6326 -13277.5127]","331":"[6062.978 -1278.4274 -13277.3584]","332":"[6358.3203 -1720.4373 -13277.5176]","333":"[6654.1211 -2161.1477 -13277.5371]","334":"[6949.1885 -2600.2788 -13277.5586]","335":"[7237.3242 -3030.3508 -13277.5186]","336":"[7529.5527 -3465.7361 -13277.5156]","337":"[7822.9219 -3900.7373 -13277.5801]","338":"[8113.7607 -4336.3979 -13277.5557]","339":"[8405.7031 -4770.4067 -13277.4902]","340":"[8697.2607 -5203.7437 -13277.4951]","341":"[8985.4082 -5634.8643 -13277.5791]","342":"[9272.2178 -6059.7314 -13277.6045]","343":"[9569.4727 -6504.5615 -13277.6445]","344":"[9867.998 -6947.3828 -13277.5449]","345":"[10163.8252 -7390.209 -13277.6035]","346":"[10452.7314 -7819.5078 -13276.9463]","347":"[10746.7852 -8258.1025 -13277.5498]","348":"[11040.0908 -8695.1641 -13277.168]","349":"[11333.2178 -9130.6787 -13277.6025]","350":"[11625.2588 -9565.3721 -13277.7246]","351":"[11916.0146 -9999.1182 -13277.5137]","352":"[12206.4229 -10432.2061 -13277.5635]","353":"[12497.1572 -10864.2119 -13277.6094]","354":"[12786.5332 -11296.2256 -13277.6084]","355":"[13076.2656 -11727.1631 -13277.5615]","356":"[13365.3174 -12157.6533 -13277.5811]","357":"[13653.2188 -12588.0566 -13277.3418]","358":"[13942.0371 -13016.1143 -13277.6025]","359":"[14229.2236 -13446.0283 -13277.4189]","360":"[14518.5137 -13875.7363 -13277.4805]","361":"[14804.3311 -14301.1514 -13277.5615]","362":"[15092.2686 -14730.123 -13277.4971]","363":"[15210.0459 -14906.4482 -13277.2363]"},"30":{"1":"[14990.9238 -15054.8789 -13277.3682]","2":"[14934.8086 -14970.667 -13277.5615]","3":"[14646.3857 -14541.3037 -13277.6123]","4":"[14359.3076 -14111.625 -13277.5537]","5":"[14073.1758 -13686.8389 -13277.6191]","6":"[13786.7793 -13260.3662 -13277.5693]","7":"[13499.957 -12833.6504 -13277.5742]","8":"[13214.6338 -12406.9961 -13277.583]","9":"[12925.6797 -11978.0908 -13277.5029]","10":"[12639.9883 -11551.9492 -13277.5762]","11":"[12351.877 -11123.0264 -13277.5557]","12":"[12065.6455 -10696.8457 -13277.5938]","13":"[11774.5703 -10263.2314 -13277.5283]","14":"[11488.7021 -9836.8789 -13277.6104]","15":"[11190.6436 -9392.0361 -13277.3359]","16":"[10898.3311 -8958.5029 -13277.4268]","17":"[10606.2373 -8521.8496 -13277.3564]","18":"[10316.7432 -8091.7925 -13277.3389]","19":"[10028.6836 -7661.5469 -13277.4561]","20":"[9739.6631 -7231.6992 -13277.3223]","21":"[9441.8291 -6787.7837 -13277.4297]","22":"[9153.04 -6357.3887 -13277.4932]","23":"[8855.3418 -5914.6191 -13277.6719]","24":"[8558.5254 -5471.8691 -13277.5996]","25":"[8268.7197 -5039.1885 -13277.4941]","26":"[7977.6846 -4607.3833 -13277.3535]","27":"[7687.8076 -4175.8364 -13277.5137]","28":"[7398.8521 -3744.6987 -13277.5576]","29":"[7103.2568 -3304.6543 -13277.6104]","30":"[6798.0674 -2849.6523 -13277.4873]","31":"[6493.2476 -2395.5803 -13277.4893]","32":"[6188.7661 -1942.5642 -13277.582]","33":"[5885.3638 -1490.002 -13277.583]","34":"[5583.979 -1037.261 -13277.4316]","35":"[5283.5308 -585.0884 -13277.4434]","36":"[4983.4458 -133.9091 -13277.5176]","37":"[4683.8193 316.4288 -13277.458]","38":"[4385.0229 765.9813 -13277.2246]","39":"[4086.1826 1213.9291 -13277.1738]","40":"[3787.72 1660.7482 -13277.1348]","41":"[3489.7861 2106.3677 -13277.376]","42":"[3192.4285 2550.4861 -13277.4355]","43":"[2896.4121 2994.4006 -13277.4521]","44":"[2600.6211 3437.4033 -13277.458]","45":"[2305.1641 3879.4922 -13277.457]","46":"[2010.0603 4320.4141 -13277.457]","47":"[1722.1283 4751.332 -13277.4072]","48":"[1436.7898 5179.7007 -13277.54]","49":"[1148.597 5608.1758 -13277.5322]","50":"[834.3696 6042.6167 -13277.5713]","51":"[493.5273 6453.2549 -13277.1846]","52":"[115.9582 6826.7285 -13277.5049]","53":"[-298.9617 7153.6265 -13277.5107]","54":"[-752.2369 7419.0674 -13277.083]","55":"[-1237.5333 7608.4321 -13276.1904]","56":"[-1737.2817 7732.9688 -13276.8994]","57":"[-2258.2256 7837.9531 -13276.3779]","58":"[-2778.9063 7937.3379 -13276.3047]","59":"[-3301.6978 8019.3931 -13276.5313]","60":"[-3825.5051 8083.6133 -13276.459]","61":"[-4350.7808 8123.811 -13276.6113]","62":"[-4875.9561 8140.7939 -13276.3672]","63":"[-5400.0942 8130.5156 -13276.5225]","64":"[-5919.2373 8090.3008 -13276.4209]","65":"[-6446.7832 8016.4976 -13276.4883]","66":"[-6970.1313 7905.0645 -13276.4131]","67":"[-7483.333 7753.9858 -13276.5625]","68":"[-7980.4517 7560.397 -13276.5869]","69":"[-8457.6934 7325.8145 -13276.4551]","70":"[-8909.9971 7049.1069 -13276.5156]","71":"[-9330.1094 6739.229 -13276.5225]","72":"[-9727.0195 6384.6763 -13276.416]","73":"[-10091.4961 5998.6792 -13276.4355]","74":"[-10422.2012 5585.147 -13276.4688]","75":"[-10723.5156 5144.5757 -13276.29]","76":"[-10985.5771 4700.478 -13276.2998]","77":"[-11221.6963 4230.7227 -13276.4248]","78":"[-11431.7002 3749.9583 -13276.3604]","79":"[-11617.25 3260.4116 -13276.4111]","80":"[-11778.0635 2763.3086 -13276.4258]","81":"[-11919.665 2261.5046 -13276.377]","82":"[-12041.8135 1755.6522 -13276.4443]","83":"[-12148.8271 1247.2883 -13276.4814]","84":"[-12251.1172 738.8724 -13276.501]","85":"[-12357.7607 206.7843 -13276.4512]","86":"[-12462.2842 -311.1961 -13276.4551]","87":"[-12567.5488 -834.473 -13276.4492]","88":"[-12672.5488 -1356.6351 -13276.4023]","89":"[-12777.4941 -1877.5859 -13276.4629]","90":"[-12882.0078 -2397.1887 -13276.3682]","91":"[-12987.707 -2922.3506 -13276.3242]","92":"[-13090.6152 -3434.0808 -13276.3496]","93":"[-13187.6328 -3951.8586 -13276.3652]","94":"[-13269.0596 -4483.271 -13276.3145]","95":"[-13329.792 -5016.3452 -13276.4971]","96":"[-13366.7354 -5550.0381 -13276.6191]","97":"[-13378.8652 -6083.5264 -13276.4697]","98":"[-13361.4326 -6615.3115 -13276.6973]","99":"[-13313.7852 -7143.6958 -13276.4678]","100":"[-13231.3057 -7666.3584 -13276.3066]","101":"[-13112.2314 -8180.4409 -13276.3232]","102":"[-12954.8643 -8682.3965 -13276.5371]","103":"[-12756.1953 -9167.7949 -13276.4971]","104":"[-12517.8867 -9633.2822 -13276.4648]","105":"[-12239.5801 -10074.0645 -13276.3164]","106":"[-11923.9746 -10487.1328 -13276.4854]","107":"[-11574.3252 -10869.9434 -13276.3408]","108":"[-11194.9941 -11221.3828 -13276.4297]","109":"[-10779.9014 -11547.8408 -13276.3223]","110":"[-10354.9258 -11835.2656 -13276.3057]","111":"[-9881.918 -12107.9922 -13276.4268]","112":"[-9393.9131 -12350.373 -13276.3555]","113":"[-8893.5371 -12563.1328 -13276.3193]","114":"[-8383.9443 -12749.5889 -13276.3066]","115":"[-7867.4746 -12912.4238 -13276.2354]","116":"[-7345.397 -13052.4463 -13276.3271]","117":"[-6819.4941 -13174.1963 -13278.8535]","118":"[-6288.501 -13284.8984 -13301.3281]","119":"[-5785.3647 -13387.8594 -13345.2734]","120":"[-5272.9351 -13493.8477 -13401.5244]","121":"[-4748.4912 -13601.6182 -13463.6826]","122":"[-4247.3901 -13704.5869 -13525.1631]","123":"[-3734.6516 -13809.5967 -13588.0586]","124":"[-3210.512 -13917.373 -13650.7402]","125":"[-2675.3191 -14027.7305 -13711.0146]","126":"[-2169.3037 -14131.8633 -13758.3555]","127":"[-1657.9064 -14236.5684 -13782.4287]","128":"[-1142.9711 -14340.9951 -13788.6064]","129":"[-627.7871 -14443.8037 -13788.5752]","130":"[-93.3905 -14551.5176 -13788.5479]","131":"[423.8394 -14656.3545 -13788.5098]","132":"[940.3125 -14759.7109 -13788.4639]","133":"[1456.0538 -14861.8193 -13788.2432]","134":"[1973.0281 -14951.5283 -13788.4951]","135":"[2492.0532 -15020.2334 -13788.3145]","136":"[3012.1216 -15070.1201 -13788.3779]","137":"[3532.6245 -15095.9795 -13787.8027]","138":"[4052.1797 -15095.8506 -13788.1299]","139":"[4569.6919 -15068.9844 -13788.2178]","140":"[5083.1992 -15009.9697 -13788.1826]","141":"[5590.5244 -14918.2539 -13788.252]","142":"[6088.645 -14791.4131 -13788.2432]","143":"[6573.7393 -14626.2061 -13788.4443]","144":"[7075.4941 -14407.3164 -13788.2861]","145":"[7553.3228 -14143.9092 -13788.2256]","146":"[8002.9922 -13837.9102 -13788.3066]","147":"[8421.4375 -13492.9336 -13788.3203]","148":"[8805.7266 -13112.459 -13788.2451]","149":"[9155.7344 -12702.1758 -13788.293]","150":"[9470.5508 -12265.9248 -13788.3789]","151":"[9753.0313 -11809.4824 -13788.3496]","152":"[10004.0176 -11336.4336 -13788.3857]","153":"[10225.6689 -10850.2344 -13788.3564]","154":"[10421.0371 -10354.0127 -13788.2881]","155":"[10592.0879 -9850.0518 -13788.4385]","156":"[10740.7578 -9340.1016 -13788.2793]","157":"[10869.585 -8825.8008 -13788.4688]","158":"[10981.3018 -8308.8984 -13788.4199]","159":"[11082.3994 -7805.9434 -13788.4287]","160":"[11188.6436 -7277.6699 -13788.377]","161":"[11291.0859 -6769.5918 -13788.5742]","162":"[11392.4395 -6262.1377 -13788.4473]","163":"[11494.8975 -5755.8623 -13788.6924]","164":"[11599.6006 -5251.0669 -13788.4863]","165":"[11723.9434 -4752.5376 -13788.3398]","166":"[11894.8643 -4238.5415 -13788.6367]","167":"[12096.709 -3737.4424 -13788.2236]","168":"[12301.708 -3239.2986 -13788.3779]","169":"[12494.8115 -2738.1045 -13788.4189]","170":"[12663.0586 -2254.2495 -13788.3467]","171":"[12813.2285 -1760.0607 -13788.2676]","172":"[12941.624 -1260.8057 -13788.4521]","173":"[13047.9082 -745.6946 -13788.3506]","174":"[13129.2637 -205.9638 -13788.3779]","175":"[13175.8203 336.4721 -13788.376]","176":"[13186.2402 861.8286 -13788.2334]","177":"[13157.4443 1391.4506 -13788.3105]","178":"[13086.9375 1915.6223 -13788.3701]","179":"[12973.0391 2430.4377 -13788.4668]","180":"[12814.1182 2931.4375 -13788.541]","181":"[12611.9443 3414.9187 -13788.3965]","182":"[12368.2285 3877.1584 -13788.3848]","183":"[12085.21 4314.6611 -13788.3828]","184":"[11768.4111 4726.6812 -13788.3701]","185":"[11421.2451 5111.812 -13788.5518]","186":"[11048.1084 5470.1138 -13788.4355]","187":"[10653.7588 5803.2148 -13788.4209]","188":"[10240.6982 6111.0757 -13788.3916]","189":"[9812.8076 6396.2085 -13788.3477]","190":"[9372.5908 6659.8911 -13788.4248]","191":"[8922.1426 6903.7212 -13788.3301]","192":"[8432.5225 7144.0063 -13788.2744]","193":"[7935.3535 7365.5127 -13788.2334]","194":"[7434.0742 7575.0293 -13788.252]","195":"[6933.1865 7782.0547 -13788.502]","196":"[6433.7559 7989.5313 -13788.5713]","197":"[5934.3115 8196.8252 -13795.4141]","198":"[5432.3218 8407.0752 -13823.584]","199":"[4956.1313 8606.8389 -13872.7402]","200":"[4470.0303 8810.5713 -13931.3164]","201":"[3972.3584 9019.1924 -13995.0596]","202":"[3496.7832 9218.5313 -14056.8926]","203":"[3010.5735 9422.1016 -14120.0898]","204":"[2513.7661 9630.4727 -14182.4785]","205":"[2043.1874 9827.7998 -14236.7539]","206":"[1565.1273 10028.248 -14279.0391]","207":"[1091.0209 10226.2168 -14297.8115]","208":"[612.6835 10424.165 -14300.2773]","209":"[136.1031 10622.5693 -14300.2949]","210":"[-340.4397 10818.9531 -14300.5059]","211":"[-816.7238 11013.8594 -14300.3477]","212":"[-1313.172 11202.1729 -14300.6211]","213":"[-1822.8488 11374.5684 -14300.4385]","214":"[-2344.6631 11526.7129 -14300.3242]","215":"[-2871.978 11653.085 -14300.4629]","216":"[-3403.5891 11752.6563 -14300.3975]","217":"[-3938.7405 11820.8447 -14300.415]","218":"[-4449.9487 11853.3711 -14300.5723]","219":"[-4989.7607 11850.3721 -14300.5]","220":"[-5518.7676 11807.625 -14300.4629]","221":"[-6050.6113 11719.541 -14300.4424]","222":"[-6571.4541 11587.2422 -14300.3291]","223":"[-7076.2012 11407.6387 -14300.5576]","224":"[-7556.3257 11187.0713 -14300.2969]","225":"[-8014.4326 10922.3672 -14300.4404]","226":"[-8447.6367 10621.0723 -14300.4365]","227":"[-8852.9502 10285.208 -14300.4365]","228":"[-9231.4453 9921.1123 -14300.416]","229":"[-9582.4756 9532.0264 -14300.2529]","230":"[-9917.0566 9110.1484 -14300.4551]","231":"[-10226.7617 8668.7354 -14300.3633]","232":"[-10511.9443 8212.2725 -14300.3945]","233":"[-10775.0693 7743.8667 -14300.4541]","234":"[-11017.3281 7265.4873 -14300.4053]","235":"[-11241.0088 6779.1143 -14300.3789]","236":"[-11450.6943 6286.5737 -14300.3525]","237":"[-11657.3389 5787.0103 -14300.502]","238":"[-11864.3203 5286.2192 -14300.4287]","239":"[-12072.3965 4786.8286 -14301.7832]","240":"[-12280.4922 4285.7539 -14322.3701]","241":"[-12491.709 3782.6482 -14367.6611]","242":"[-12690.9775 3309.4878 -14422.125]","243":"[-12892.0088 2827.7385 -14482.5205]","244":"[-13097.249 2337.7463 -14545.8662]","245":"[-13306.7578 1839.2516 -14611.0771]","246":"[-13519.3906 1331.3479 -14675.5713]","247":"[-13719.1543 854.7452 -14732.6494]","248":"[-13921.8594 371.4726 -14781.1729]","249":"[-14120.1514 -100.9917 -14805.2998]","250":"[-14321.1475 -579.5796 -14812.668]","251":"[-14520.5791 -1064.4591 -14812.3457]","252":"[-14698.8691 -1570.0078 -14812.4883]","253":"[-14835.5293 -2078.7136 -14812.1045]","254":"[-14920.2471 -2583.7212 -14812.707]","255":"[-14944.5859 -3115.0969 -14812.4854]","256":"[-14890.5215 -3645.2271 -14812.3555]","257":"[-14749.0293 -4155.6201 -14812.5576]","258":"[-14532.457 -4609.4717 -14812.293]","259":"[-14229.9316 -5037.9028 -14812.4365]","260":"[-13866.1943 -5413.4858 -14812.5645]","261":"[-13456.6299 -5736.353 -14812.2861]","262":"[-13016.0439 -6013.3154 -14812.3164]","263":"[-12550.9209 -6250.8975 -14812.208]","264":"[-12059.1729 -6465.79 -14812.2959]","265":"[-11568.4404 -6666.6021 -14812.6455]","266":"[-11073.3994 -6867.187 -14812.4648]","267":"[-10589.2988 -7066.0972 -14812.4414]","268":"[-10106.3301 -7264.6152 -14812.4707]","269":"[-9623.8193 -7461.168 -14812.4707]","270":"[-9142.4834 -7657.3809 -14812.4453]","271":"[-8662.7324 -7854.3335 -14812.3936]","272":"[-8184.0596 -8051.0078 -14812.4844]","273":"[-7682.2915 -8256.1094 -14812.502]","274":"[-7182.6597 -8459.7314 -14812.5029]","275":"[-6684.0303 -8663.958 -14812.4619]","276":"[-6200.8569 -8861.7822 -14812.4629]","277":"[-5706.3823 -9064.2236 -14812.458]","278":"[-5212.4141 -9266.0029 -14812.4541]","279":"[-4717.771 -9463.6699 -14812.5166]","280":"[-4214.2339 -9631.0117 -14812.3213]","281":"[-3701.5808 -9762.3701 -14812.1787]","282":"[-3183.958 -9868.6221 -14812.4883]","283":"[-2662.0857 -9971.791 -14812.2285]","284":"[-2136.1021 -10074.5898 -14812.1523]","285":"[-1595.9132 -10182.1152 -14812.123]","286":"[-1079.009 -10282.5264 -14812.2695]","287":"[-563.3532 -10383.9336 -14812.4395]","288":"[-48.9226 -10485.9932 -14812.4355]","289":"[464.7746 -10586.5381 -14812.4248]","290":"[977.5349 -10686.6016 -14812.4648]","291":"[1488.9122 -10788.2949 -14812.3936]","292":"[1999.5326 -10888.3828 -14812.3906]","293":"[2509.2246 -10987.9131 -14812.3115]","294":"[3017.6902 -11088.7471 -14812.3389]","295":"[3525.333 -11188.4717 -14812.2725]","296":"[4032.042 -11287.5771 -14812.3057]","297":"[4537.5908 -11387.4873 -14812.3145]","298":"[5042.0254 -11486.4258 -14812.6055]","299":"[5545.231 -11585.4863 -14812.3545]","300":"[6080.0381 -11691.0518 -14812.543]","301":"[6595.2676 -11792.1367 -14812.7158]","302":"[7112.8496 -11894.208 -14812.3115]","303":"[7620.5205 -11993.5957 -14812.0811]","304":"[8140.9204 -12080.5791 -14812.3408]","305":"[8678.3887 -12135.7148 -14812.0781]","306":"[9206.4121 -12137.8115 -14812.2256]","307":"[9728.9355 -12082.3379 -14812.6846]","308":"[10235.877 -11955.5771 -14812.2256]","309":"[10713.9854 -11751.7637 -14812.1865]","310":"[11147.3369 -11470.0068 -14812.249]","311":"[11523.9844 -11118.9268 -14812.123]","312":"[11838.7783 -10713.2783 -14812.4219]","313":"[12094.6641 -10269.2002 -14812.2529]","314":"[12306.4727 -9772.5527 -14812.3135]","315":"[12469.1865 -9258.6523 -14812.3613]","316":"[12586.3838 -8760.208 -14812.2822]","317":"[12694.3379 -8228.4277 -14812.1221]","318":"[12796.2432 -7701.0762 -14812.3555]","319":"[12896.8867 -7189.1846 -14812.7061]","320":"[13004.9951 -6647.0391 -14812.5771]","321":"[13111.5342 -6105.9502 -14812.4102]","322":"[13216.6787 -5565.9736 -14812.4404]","323":"[13322.6914 -5024.8608 -14812.3848]","324":"[13427.46 -4495.0796 -14812.2998]","325":"[13530.0361 -3976.2078 -14812.5391]","326":"[13639.7236 -3417.5862 -14812.4043]","327":"[13743.4141 -2888.3052 -14812.3164]","328":"[13849.2168 -2348.6189 -14812.5381]","329":"[13954.8916 -1810.6359 -14812.4287]","330":"[14060.3291 -1274.3892 -14812.4443]","331":"[14165.998 -739.8583 -14812.4189]","332":"[14271.2471 -206.8896 -14812.459]","333":"[14375.9287 324.3065 -14811.8086]","334":"[14479.7891 853.7997 -14812.9902]","335":"[14582.9229 1381.6122 -14812.2529]","336":"[14686.2529 1907.7643 -14812.583]","337":"[14789.8818 2432.2334 -14812.4531]","338":"[14893.0977 2955.2104 -14812.4775]","339":"[14995.6914 3476.7495 -14812.415]","340":"[15093.9648 3980.4333 -14812.4805]","341":"[15197.666 4506.4121 -14812.2402]","342":"[15303.2813 5040.9609 -14812.3916]","343":"[15406.7021 5569.0933 -14812.5205]","344":"[15505.5918 6073.9585 -14812.4863]","345":"[15609.8027 6600.8862 -14812.4668]","346":"[15708.5186 7103.3501 -14812.3428]","347":"[15808.6406 7613.1772 -14812.3701]","348":"[15909.582 8124.4263 -14812.502]","349":"[16006.3096 8634.8867 -14812.3848]","350":"[16082.0566 9159.002 -14812.1963]","351":"[16115.4834 9692.249 -14812.4453]","352":"[16093.4053 10214.0176 -14812.5898]","353":"[16005.9658 10734.9883 -14812.5381]","354":"[15846.6133 11231.6328 -14812.6357]","355":"[15603.4375 11702.8262 -14812.5645]","356":"[15308.7871 12089.2539 -14812.3447]","357":"[14928.2227 12448.3506 -14812.2686]","358":"[14498.1787 12742.7969 -14812.3301]","359":"[14034.9189 12977.7793 -14812.4971]","360":"[13539.709 13166.2725 -14812.4043]","361":"[13023.4414 13310.8379 -14812.2148]","362":"[12496.9648 13426.0518 -14812.1436]","363":"[11966.2568 13529.9082 -14812.6582]","364":"[11463.2568 13628.167 -14804.0459]","365":"[10933.2803 13733.417 -14774.0088]","366":"[10400.248 13837.54 -14721.3604]","367":"[9880.0303 13940.1211 -14661.6279]","368":"[9372.9775 14039.7959 -14600.625]","369":"[8844.8096 14143.0645 -14535.9443]","370":"[8331.8613 14244.0576 -14473.835]","371":"[7820.4771 14344.1299 -14413.6582]","372":"[7317.1914 14443.7549 -14360.04]","373":"[6809.9668 14543.1631 -14320.1816]","374":"[6292.688 14627.1689 -14302.6748]","375":"[5782.6919 14679.1855 -14300.5684]","376":"[5264.4399 14695.8086 -14300.3896]","377":"[4746.4072 14698.4297 -14300.5518]","378":"[4229.084 14698.2051 -14300.4424]","379":"[3711.8418 14697.5625 -14300.4453]","380":"[3197.4041 14697.6074 -14300.4463]","381":"[2887.7629 14697.7695 -14300.4404]"}} \ No newline at end of file diff --git a/lua/metrostroi_data/track_gm_metrostroi_b50.lua b/lua/metrostroi_data/track_gm_metrostroi_b50.lua new file mode 100644 index 0000000..5a66589 --- /dev/null +++ b/lua/metrostroi_data/track_gm_metrostroi_b50.lua @@ -0,0 +1,7678 @@ + +{ + "1": + { + "1": "[-11059.2119 15293.625 -1622.4454]", + "2": "[-10957.0264 15294.8105 -1622.3954]", + "3": "[-10442.3008 15294.7158 -1622.4854]", + "4": "[-9924.8848 15295.3818 -1622.4829]", + "5": "[-9409.4951 15295.3232 -1622.4828]", + "6": "[-8889.3789 15295.0713 -1622.535]", + "7": "[-8373.0586 15295.4932 -1622.4851]", + "8": "[-7860.1631 15295.2441 -1622.4706]", + "9": "[-7341.8452 15295.1182 -1622.4907]", + "10": "[-6830.5947 15262.0078 -1622.6295]", + "11": "[-6320.1006 15166.1426 -1622.5759]", + "12": "[-5836.8521 14994.3281 -1622.5576]", + "13": "[-5381.2915 14760.2344 -1622.512]", + "14": "[-4954.5981 14476.6182 -1622.4247]", + "15": "[-4548.1489 14151.5898 -1622.3805]", + "16": "[-4167.293 13798.3633 -1622.453]", + "17": "[-3799.5842 13436.5449 -1622.5626]", + "18": "[-3435.6633 13070.2021 -1622.4792]", + "19": "[-3066.2 12701.9395 -1622.4829]", + "20": "[-2697.7571 12333.8682 -1622.4805]", + "21": "[-2330.4382 11965.8711 -1622.5012]", + "22": "[-1963.4805 11598.6904 -1622.4873]", + "23": "[-1596.6931 11232.5674 -1622.5341]", + "24": "[-1231.2144 10866.874 -1622.4526]", + "25": "[-866.0137 10502.1895 -1622.4888]", + "26": "[-501.7584 10137.707 -1622.5479]", + "27": "[-138.0834 9774.2041 -1622.4725]", + "28": "[224.5659 9411.4883 -1622.589]", + "29": "[596.0246 9039.9219 -1622.5515]", + "30": "[966.929 8669.0889 -1622.4493]", + "31": "[1337.2456 8298.9033 -1622.3387]", + "32": "[1706.5593 7929.0146 -1622.1505]", + "33": "[2074.9509 7561.7197 -1622.2509]", + "34": "[2440.979 7193.7642 -1622.4459]", + "35": "[2807.3657 6827.6538 -1622.2632]", + "36": "[3173.74 6462.7412 -1622.2487]", + "37": "[3537.6245 6096.5186 -1622.2151]", + "38": "[3903.1838 5733.1587 -1622.33]", + "39": "[4266.0298 5368.2666 -1622.276]", + "40": "[4629.9336 5005.6626 -1622.2903]", + "41": "[4992.7744 4643.2261 -1622.225]", + "42": "[5363.2021 4271.0791 -1622.3247]", + "43": "[5735.1943 3901.7678 -1622.3091]", + "44": "[6103.5337 3530.0493 -1622.2756]", + "45": "[6474.9927 3162.7185 -1622.3207]", + "46": "[6841.9575 2792.1506 -1622.2441]", + "47": "[7211.1924 2425.1121 -1622.4769]", + "48": "[7578.2349 2057.1304 -1622.3572]", + "49": "[7945.4214 1690.536 -1622.4911]", + "50": "[8311.7002 1324.2072 -1622.4669]", + "51": "[8677.1924 958.3295 -1622.4565]", + "52": "[9042.9922 593.9393 -1622.449]", + "53": "[9404.7773 229.5983 -1622.6293]", + "54": "[9770.3105 -133.6753 -1622.506]", + "55": "[10132.7012 -496.2275 -1622.4874]", + "56": "[10497.6611 -862.7943 -1622.4825]", + "57": "[10862.7109 -1227.7295 -1622.3275]", + "58": "[11199.0986 -1613.8905 -1622.1971]", + "59": "[11486.3936 -2046.3269 -1622.3231]", + "60": "[11698.5244 -2516.5662 -1622.4578]", + "61": "[11850.7334 -3007.53 -1622.5028]", + "62": "[11945.9473 -3511.4121 -1622.2603]", + "63": "[11999.1289 -4031.6475 -1622.2766]", + "64": "[12012.7891 -4553.0137 -1622.1599]", + "65": "[12000.7637 -5072.9302 -1622.3724]", + "66": "[11967.2119 -5590.7764 -1622.4836]", + "67": "[11915.0693 -6105.9917 -1622.4509]", + "68": "[11839.4512 -6616.8604 -1622.5188]", + "69": "[11740.0967 -7122.4482 -1622.4817]", + "70": "[11614.4541 -7620.6958 -1622.4386]", + "71": "[11456.6494 -8120.0903 -1622.4471]", + "72": "[11271.001 -8598.4238 -1622.5112]", + "73": "[11048.1367 -9065.4736 -1622.4056]", + "74": "[10789.2676 -9520.416 -1622.3939]", + "75": "[10493.9453 -9948.8105 -1622.2391]", + "76": "[10158.6143 -10354.5342 -1622.5127]", + "77": "[9797.8955 -10719.1221 -1622.3901]", + "78": "[9405.2549 -11052.0742 -1622.428]", + "79": "[8978.9297 -11354.0322 -1622.3953]", + "80": "[8527.835 -11619.2754 -1622.4465]", + "81": "[8058.4814 -11847.5596 -1622.3934]", + "82": "[7582.3062 -12038.832 -1622.3458]", + "83": "[7094.4624 -12197.6211 -1622.302]", + "84": "[6582.0171 -12330.8691 -1622.187]", + "85": "[6064.3589 -12435.75 -1622.2444]", + "86": "[5543.1631 -12514.1689 -1622.2605]", + "87": "[5020.0508 -12569.0664 -1622.3478]", + "88": "[4496.2275 -12603.1865 -1622.5242]", + "89": "[3972.4868 -12618.2393 -1622.278]", + "90": "[3449.4519 -12620.6162 -1622.3962]", + "91": "[2927.3379 -12620.2822 -1622.4596]", + "92": "[2400.1067 -12620.1826 -1622.4631]", + "93": "[1886.259 -12620.3994 -1622.4618]", + "94": "[1373.3561 -12620.5381 -1622.4758]", + "95": "[843.7491 -12620.3125 -1622.4102]", + "96": "[315.1869 -12620.0205 -1622.485]", + "97": "[-212.3818 -12620.1084 -1622.4551]", + "98": "[-738.5702 -12610.9531 -1622.09]", + "99": "[-1262.5613 -12584.8818 -1621.9329]", + "100": "[-1783.2648 -12538.1543 -1622.1831]", + "101": "[-2300.2976 -12470.3848 -1622.4022]", + "102": "[-2811.97 -12377.7285 -1622.5322]", + "103": "[-3316.8679 -12259.3408 -1622.3278]", + "104": "[-3812.844 -12112.6826 -1622.277]", + "105": "[-4296.9771 -11934.709 -1622.1954]", + "106": "[-4766.6509 -11725.0498 -1622.2502]", + "107": "[-5217.668 -11481.2979 -1622.5126]", + "108": "[-5660.0552 -11193.2861 -1622.4119]", + "109": "[-6074.748 -10869.543 -1622.4921]", + "110": "[-6456.897 -10510.626 -1622.4984]", + "111": "[-6804.7832 -10120.6592 -1622.4943]", + "112": "[-7115.7236 -9702.5596 -1622.3121]", + "113": "[-7389.3975 -9260.7598 -1622.3539]", + "114": "[-7626.5234 -8799.7637 -1622.3398]", + "115": "[-7830.2202 -8318.8145 -1622.4669]", + "116": "[-8002.4985 -7820.2349 -1622.3573]", + "117": "[-8142.1655 -7312.7544 -1622.3187]", + "118": "[-8253.4854 -6799.4609 -1622.3224]", + "119": "[-8338.0449 -6282.1885 -1622.2828]", + "120": "[-8398.541 -5762.5669 -1622.375]", + "121": "[-8437.7344 -5241.9536 -1622.3982]", + "122": "[-8457.3662 -4721.6338 -1622.0554]", + "123": "[-8462.0898 -4202.3398 -1622.1136]", + "124": "[-8462.0068 -3687.6042 -1606.7993]", + "125": "[-8462.0313 -3160.6675 -1569.6423]", + "126": "[-8461.8711 -2641.991 -1516.4755]", + "127": "[-8461.9072 -2115.8787 -1456.2029]", + "128": "[-8461.792 -1590.5563 -1393.723]", + "129": "[-8461.791 -1081.5577 -1331.7845]", + "130": "[-8461.7754 -557.5002 -1267.5255]", + "131": "[-8462.4902 -45.2574 -1204.5804]", + "132": "[-8461.876 467.0757 -1141.7941]", + "133": "[-8461.3574 987.5672 -1077.8243]", + "134": "[-8461.7979 1500.1559 -1014.8558]", + "135": "[-8462.1016 2013.973 -951.7559]", + "136": "[-8462.3877 2523.2908 -889.0739]", + "137": "[-8462.1416 3037.4749 -826.0299]", + "138": "[-8461.6348 3558.7935 -762.1362]", + "139": "[-8461.9092 4067.1096 -699.575]", + "140": "[-8462.5322 4580.7012 -636.606]", + "141": "[-8462.1777 5098.144 -572.9977]", + "142": "[-8461.5742 5617.9976 -509.1426]", + "143": "[-8461.5439 6138.7891 -445.1893]", + "144": "[-8462.2354 6658.8677 -381.6057]", + "145": "[-8462.334 7176.79 -318.772]", + "146": "[-8462.4053 7691.6973 -258.3127]", + "147": "[-8462.2529 8202.8848 -201.1747]", + "148": "[-8462.4463 8724.918 -151.0225]", + "149": "[-8462.8594 9246.9697 -120.0115]", + "150": "[-8474.5107 9759.0029 -103.982]", + "151": "[-8507.9287 10272.9648 -91.8422]", + "152": "[-8573.5146 10787.1709 -76.5625]", + "153": "[-8675.2217 11300.1914 -57.2212]", + "154": "[-8819.4727 11791.0596 -33.5755]", + "155": "[-9018.6182 12275.29 -4.5833]", + "156": "[-9276.3389 12724.9268 30.728]", + "157": "[-9593.7588 13125.001 71.9296]", + "158": "[-9977.2578 13472.8018 119.4282]", + "159": "[-10408.4717 13744.375 171.9896]", + "160": "[-10887.7617 13943.0488 228.2761]", + "161": "[-11390.2529 14062.7471 285.9153]", + "162": "[-11907.8125 14112.3232 343.2458]", + "163": "[-12428.3535 14098.9219 400.6561]", + "164": "[-12940.1729 14019.8359 455.6136]", + "165": "[-13432.6523 13863.0234 507.3643]", + "166": "[-13891.0479 13633.1055 554.4301]", + "167": "[-14287.5459 13338.0361 593.152]", + "168": "[-14643.1826 12969.4434 625.9862]", + "169": "[-14939.0986 12541.4365 650.3957]", + "170": "[-15172.7998 12078.0615 667.1775]", + "171": "[-15350.0762 11587.5254 676.0056]", + "172": "[-15476.5781 11087.4902 678.6412]", + "173": "[-15563.207 10580.8027 677.0042]", + "174": "[-15615.8516 10068.7822 671.2161]", + "175": "[-15641.3242 9551.9648 662.7073]", + "176": "[-15647.9697 9032.6387 657.7137]", + "177": "[-15647.8623 8512.5576 657.6006]", + "178": "[-15647.6387 7993.2788 657.5426]", + "179": "[-15648.4424 7474.8032 657.5368]", + "180": "[-15648.3047 6957.1094 657.5081]", + "181": "[-15647.6299 6440.1938 657.5053]", + "182": "[-15648.5518 5924.0625 657.5085]", + "183": "[-15648.3809 5408.7183 657.5343]", + "184": "[-15647.6768 4894.1392 657.5389]", + "185": "[-15648.3633 4380.3345 657.603]", + "186": "[-15648.4082 3866.5352 657.5576]", + "187": "[-15647.5527 3346.4888 657.6343]", + "188": "[-15648.4092 2834.2952 657.5137]", + "189": "[-15648.1719 2312.6006 657.5245]", + "190": "[-15647.4092 1786.6532 657.5475]", + "191": "[-15647.8311 1274.0526 657.5472]", + "192": "[-15648.1748 761.9135 657.5485]", + "193": "[-15648.084 241.907 657.6238]", + "194": "[-15647.6133 -278.6079 657.5967]", + "195": "[-15647.8945 -806.7278 657.5847]", + "196": "[-15648.5596 -1332.0923 657.5623]", + "197": "[-15648.3809 -1856.3009 657.4094]", + "198": "[-15647.3613 -2379.3743 657.5006]", + "199": "[-15647.4668 -2901.311 657.5499]", + "200": "[-15648.2256 -3422.1035 657.5519]", + "201": "[-15648.5557 -3940.9546 653.2815]", + "202": "[-15648.1631 -4455.1787 629.0827]", + "203": "[-15647.7275 -4970.8535 582.4442]", + "204": "[-15648.1289 -5493.2856 525.7081]", + "205": "[-15648.5146 -6003.5908 466.205]", + "206": "[-15648.2383 -6519.7725 404.1048]", + "207": "[-15648.0234 -7039.2837 340.789]", + "208": "[-15647.9248 -7550.834 278.1226]", + "209": "[-15647.5293 -8074.4155 214.9048]", + "210": "[-15647.8975 -8594.8232 153.8994]", + "211": "[-15647.7227 -9117.1084 96.9894]", + "212": "[-15647.3223 -9639.6553 49.9144]", + "213": "[-15647.9551 -10162.1377 26.1626]", + "214": "[-15647.6582 -10685.3066 21.294]", + "215": "[-15634.9756 -11199.7852 20.9869]", + "216": "[-15592.7451 -11714.7158 20.9775]", + "217": "[-15502.833 -12229.9697 21.0301]", + "218": "[-15359.8877 -12729.9297 21.0992]", + "219": "[-15152.3447 -13203.7803 21.0455]", + "220": "[-14877.6904 -13638.6504 21.1616]", + "221": "[-14526.4277 -14025.9268 21.1499]", + "222": "[-14115.6426 -14345.1279 21.0205]", + "223": "[-13658.6855 -14590.332 21.0874]", + "224": "[-13172.9111 -14767.998 21.1169]", + "225": "[-12670.2002 -14885.5615 21.2329]", + "226": "[-12159.4893 -14953.4141 21.1162]", + "227": "[-11646.3213 -14981.1592 21.1739]", + "228": "[-11133.7383 -14986.1875 21.8739]", + "229": "[-10607.4023 -14985.0977 21.5594]", + "230": "[-10087.1592 -14984.9014 21.4736]", + "231": "[-9567.5869 -14984.8135 21.9304]", + "232": "[-9042.7471 -14984.2646 21.5554]", + "233": "[-8517.8281 -14984.4961 21.3633]", + "234": "[-7994.1538 -14985.1064 21.4957]", + "235": "[-7471.7222 -14984.7246 21.5078]", + "236": "[-6950.4985 -14984.4893 21.5256]", + "237": "[-6430.4746 -14984.4932 21.5426]", + "238": "[-5907.6963 -14985.1211 21.5912]", + "239": "[-5380.1074 -14985.4863 21.6035]", + "240": "[-4860.5005 -14984.2139 21.6178]", + "241": "[-4339.6479 -14984.5166 21.5328]", + "242": "[-3822.6736 -14985.2148 21.51]", + "243": "[-3302.8579 -14984.3525 21.5634]", + "244": "[-2784.9519 -14984.4473 21.5491]", + "245": "[-2267.4668 -14984.9639 21.5511]", + "246": "[-1751.5691 -14981.2588 23.272]", + "247": "[-1239.4248 -14954.9424 25.8659]", + "248": "[-721.3835 -14890.5967 27.8761]", + "249": "[-214.9089 -14779.7754 29.1339]", + "250": "[273.5844 -14613.4746 29.1125]", + "251": "[734.5286 -14386.5264 27.6522]", + "252": "[1154.7471 -14093.5371 23.9713]", + "253": "[1535.4789 -13750.0039 22.02]", + "254": "[1898.791 -13387.5791 21.4899]", + "255": "[2260.5439 -13024.6846 21.5996]", + "256": "[2632.3206 -12654.6563 22.0447]", + "257": "[2992.8547 -12276.9541 23.7926]", + "258": "[3330.1038 -11883.915 26.5696]", + "259": "[3630.0977 -11466.2861 28.4604]", + "260": "[3893.1155 -11012.7412 29.3787]", + "261": "[4097.4263 -10532.502 28.4999]", + "262": "[4232.0854 -10030.5625 26.0638]", + "263": "[4289.3828 -9514.7705 23.3424]", + "264": "[4300.5366 -9000.2617 21.383]", + "265": "[4298.3848 -8485.9717 21.4755]", + "266": "[4298.7319 -7972.3838 21.594]", + "267": "[4300.0117 -7458.6914 21.5394]", + "268": "[4298.7358 -6939.6729 21.538]", + "269": "[4298.2192 -6421.6646 21.5516]", + "270": "[4299.1074 -5904.6587 21.549]", + "271": "[4299.5454 -5388.6533 21.4816]", + "272": "[4298.8599 -4873.6465 21.5869]", + "273": "[4298.292 -4359.6421 21.6327]", + "274": "[4299.5688 -3846.5984 21.5527]", + "275": "[4299.7041 -3334.541 21.5092]", + "276": "[4298.4502 -2805.2327 21.5289]", + "277": "[4298.5435 -2285.3057 21.5403]", + "278": "[4299.6069 -1765.3181 21.541]", + "279": "[4298.374 -1244.6649 21.0425]", + "280": "[4299.5732 -730.5665 20.4061]", + "281": "[4297.9648 -217.7158 20.7297]", + "282": "[4299.0894 304.4788 20.578]", + "283": "[4298.7715 825.7511 20.5533]", + "284": "[4298.4946 1346.1558 20.4704]", + "285": "[4298.8286 1865.3032 20.6172]", + "286": "[4298.9263 2383.543 20.4009]", + "287": "[4304.2949 2900.2883 20.6134]", + "288": "[4334.8047 3414.3162 20.8946]", + "289": "[4404.5435 3921.6079 20.4975]", + "290": "[4526.5337 4427.2358 20.5187]", + "291": "[4708.6226 4909.1411 20.519]", + "292": "[4964.3989 5360.5337 20.8274]", + "293": "[5284.1455 5761.5176 20.6263]", + "294": "[5641.751 6138.3052 20.4271]", + "295": "[6007.7412 6499.207 20.4901]", + "296": "[6377.0234 6871.2925 20.6444]", + "297": "[6747.0605 7241.3086 20.5692]", + "298": "[7117.21 7609.9746 20.6476]", + "299": "[7487.916 7982.2368 20.5206]", + "300": "[7851.2861 8345.5781 20.5451]", + "301": "[8221.2275 8714.3398 20.5483]", + "302": "[8589.583 9083.5801 20.5467]", + "303": "[8965.8467 9442.2822 20.5272]", + "304": "[9375.4785 9753.0293 20.6278]", + "305": "[9834.8936 9996.6357 19.9443]", + "306": "[10322.3291 10171.1865 20.2958]", + "307": "[10825.8135 10282.5752 20.2615]", + "308": "[11342.9922 10347.9609 20.3667]", + "309": "[11860.3193 10369.4824 22.0516]", + "310": "[12382.4736 10345.6865 26.3379]", + "311": "[12893.3584 10268.2334 32.4115]", + "312": "[13396.5459 10126.2715 37.4048]", + "313": "[13864.5127 9909.5176 40.866]", + "314": "[14273.3857 9624.6318 42.403]", + "315": "[14565.2783 9333.4658 42.384]", + "316": "[14861.3262 8911.4434 40.6492]", + "317": "[15065.2529 8474.0361 37.5144]", + "318": "[15212.3867 7974.4331 32.6193]", + "319": "[15293.8828 7458.0645 26.8036]", + "320": "[15323.8965 6931.2021 22.0336]", + "321": "[15327.0371 6413.0947 19.2971]", + "322": "[15325.9795 5886.3325 19.4829]", + "323": "[15326.9336 5360.5879 19.6738]", + "324": "[15326.3438 4835.7944 19.4529]", + "325": "[15326.8994 4311.9907 19.5685]", + "326": "[15327.3447 3789.1553 19.5969]", + "327": "[15326.248 3267.2673 19.516]", + "328": "[15326.5947 2746.3347 19.4737]", + "329": "[15327.0195 2226.3193 19.5291]", + "330": "[15326.8213 1711.7802 19.5322]", + "331": "[15326.7881 1188.2037 19.5346]", + "332": "[15313.8115 669.6322 18.1125]", + "333": "[15239.1201 162.1724 15.1823]", + "334": "[15081.3564 -336.1668 12.1628]", + "335": "[14852.3789 -804.4553 12.0516]", + "336": "[14572.3535 -1241.5305 13.6901]", + "337": "[14251.6875 -1647.2399 16.4605]", + "338": "[13897.3955 -2035.3494 18.7345]", + "339": "[13533.1025 -2403.428 19.7116]", + "340": "[13165.3008 -2769.9487 19.6264]", + "341": "[12800.8574 -3133.8823 19.549]", + "342": "[12437.8691 -3497.6074 19.5086]", + "343": "[12075.4648 -3860.2771 19.5424]", + "344": "[11697.8008 -4237.4512 19.5382]", + "345": "[11321.0596 -4613.7866 19.5471]", + "346": "[10945.8076 -4989.8853 19.5151]", + "347": "[10571.7734 -5364.3862 19.5386]", + "348": "[10204.7402 -5730.7456 19.7251]", + "349": "[9831.8994 -6102.3101 19.5696]", + "350": "[9459.6836 -6475.6396 19.494]", + "351": "[9093.8984 -6842.2388 19.5412]", + "352": "[8730.5127 -7204.1113 19.5492]", + "353": "[8361.7861 -7573.4126 19.5653]", + "354": "[7997.1821 -7949.7358 21.6581]", + "355": "[7656.29 -8341.5049 24.1862]", + "356": "[7349.1221 -8755.0322 26.4942]", + "357": "[7080.042 -9204.7773 27.2407]", + "358": "[6866.4736 -9680.5293 26.7607]", + "359": "[6721.0225 -10179.1846 24.7019]", + "360": "[6654.5757 -10692.3887 23.9205]", + "361": "[6660.2363 -11207.0654 28.137]", + "362": "[6725.52 -11724.6816 38.6702]", + "363": "[6842.8818 -12225.9189 47.0741]", + "364": "[7031.8237 -12710.0225 53.4756]", + "365": "[7288.2622 -13153.9795 56.9714]", + "366": "[7622.5132 -13551.1836 58.3508]", + "367": "[7992.8291 -13860 57.0986]", + "368": "[8436.7412 -14120.2324 53.4459]", + "369": "[8916.9629 -14306.7705 47.1137]", + "370": "[9419.8594 -14427.9287 38.9078]", + "371": "[9936.9307 -14493.0059 28.7709]", + "372": "[10450.0566 -14510.2002 21.6994]", + "373": "[10966.1152 -14502.1514 16.7419]", + "374": "[11482.1201 -14476.9277 10.7285]", + "375": "[11999.4395 -14439.0645 1.6895]", + "376": "[12516.2217 -14356.0049 -11.3132]", + "377": "[13011.5811 -14214.4189 -28.5111]", + "378": "[13484.8789 -14009.5977 -48.8899]", + "379": "[13926.8838 -13748.2832 -71.8201]", + "380": "[14329.9648 -13416.2617 -97.3035]", + "381": "[14667.1621 -13020.3281 -123.1954]", + "382": "[14937.1777 -12577.7461 -149.2271]", + "383": "[15141.6631 -12103.2549 -176.2873]", + "384": "[15290.2588 -11607.8721 -205.4427]", + "385": "[15387.6846 -11100.9727 -237.2199]", + "386": "[15440.9434 -10586.5791 -270.8652]", + "387": "[15458.0439 -10067.998 -310.0214]", + "388": "[15460.668 -9549.4043 -344.6683]", + "389": "[15459.0762 -9037.1143 -361.3834]", + "390": "[15459.4609 -8511.8301 -364.3223]", + "391": "[15460.124 -7987.4619 -364.4124]", + "392": "[15459.2158 -7466.7139 -364.477]", + "393": "[15459.7969 -6953.6636 -364.4525]", + "394": "[15459.6934 -6441.0835 -364.4842]", + "395": "[15459.6699 -5914.292 -364.4939]", + "396": "[15460.4102 -5388.4014 -364.5044]", + "397": "[15459.5176 -4863.4053 -364.491]", + "398": "[15459.7695 -4339.6406 -364.5018]", + "399": "[15459.8877 -3816.8513 -364.2935]", + "400": "[15459.458 -3294.9053 -364.1771]", + "401": "[15459.9004 -2773.8157 -364.328]", + "402": "[15460.3477 -2253.5938 -364.5002]", + "403": "[15459.6953 -1734.2292 -364.4483]", + "404": "[15460.3486 -1215.697 -364.3842]", + "405": "[15460.376 -698.0395 -364.308]", + "406": "[15459.4795 -181.2064 -364.4399]", + "407": "[15460.7627 340.762 -364.3268]", + "408": "[15459.5068 857.1755 -364.326]", + "409": "[15460.2529 1372.7604 -364.4005]", + "410": "[15459.8906 1887.54 -364.5345]", + "411": "[15460.2393 2401.4937 -364.4861]", + "412": "[15460.0781 2914.6235 -364.4627]", + "413": "[15459.8525 3426.9326 -364.3712]", + "414": "[15460.373 3952.2449 -364.4796]", + "415": "[15467.6143 4476.4805 -364.4637]", + "416": "[15503.0889 4992.5215 -364.4022]", + "417": "[15576.6738 5499.7964 -364.4447]", + "418": "[15674.0254 6015.2153 -364.5331]", + "419": "[15767.085 6529.7456 -364.3895]", + "420": "[15821.6377 7047.8311 -364.5126]", + "421": "[15842.0762 7572.0947 -364.4121]", + "422": "[15844.0967 8085.7339 -364.4962]", + "423": "[15844.1865 8598.5674 -364.4837]", + "424": "[15843.8545 9110.6416 -364.3689]", + "425": "[15844.4668 9635.001 -364.5712]", + "426": "[15843.665 10158.5771 -364.4098]", + "427": "[15842.5791 10681.3066 -364.2676]", + "428": "[15819.8926 11202.2725 -364.0941]", + "429": "[15762.9961 11718.9795 -364.3271]", + "430": "[15654.6289 12225.2617 -364.3959]", + "431": "[15488.7168 12712.6348 -364.4131]", + "432": "[15244.0654 13176.4893 -363.3414]", + "433": "[14932.2539 13592.9922 -358.8143]", + "434": "[14559.4004 13947.4688 -346.6214]", + "435": "[14125.1123 14240.2656 -325.5434]", + "436": "[13645.9365 14452.7539 -296.8995]", + "437": "[13156.9268 14603.5313 -259.1152]", + "438": "[12651.2803 14705.1006 -210.9848]", + "439": "[12138.5742 14763.7949 -154.1104]", + "440": "[11622.8916 14783.0801 -92.2866]", + "441": "[11102.416 14784.1943 -28.4057]", + "442": "[10593.5967 14783.5361 34.1822]", + "443": "[10074.1855 14784.6729 97.9898]", + "444": "[9556.0684 14783.7188 161.6088]", + "445": "[9036.6777 14783.8174 225.3508]", + "446": "[8524.8936 14783.8418 288.196]", + "447": "[8008.3262 14783.5801 351.6648]", + "448": "[7488.312 14783.752 414.8932]", + "449": "[6967.0786 14783.6846 477.1564]", + "450": "[6447.4019 14783.373 536.5086]", + "451": "[5927.8911 14783.8584 590.2825]", + "452": "[5409.5596 14783.5195 628.6126]", + "453": "[4887.0796 14784.2422 644.3461]", + "454": "[4369.0981 14784.1602 645.4778]", + "455": "[3850.0652 14783.832 645.6388]", + "456": "[3329.1624 14783.6885 645.6412]", + "457": "[2805.7017 14784.6924 645.5496]", + "458": "[2289.3677 14783.6377 645.5202]", + "459": "[1769.0535 14783.7988 645.5922]", + "460": "[1244.494 14784.2969 645.6561]", + "461": "[716.7141 14783.79 645.5258]", + "462": "[189.8714 14784.5029 645.532]", + "463": "[-336.0115 14784.4072 645.5604]", + "464": "[-860.9666 14783.9688 645.5932]", + "465": "[-1385.0048 14783.6914 645.6194]", + "466": "[-1908.0958 14783.9609 645.5673]", + "467": "[-2430.2742 14784.4756 645.5199]", + "468": "[-2951.5251 14784.1299 645.605]", + "469": "[-3471.8801 14784.5 645.5702]", + "470": "[-3991.3135 14784.0625 645.5369]", + "471": "[-4509.853 14783.752 645.5513]", + "472": "[-5027.4937 14784.4287 645.5416]", + "473": "[-5548.9775 14784.0029 645.5854]", + "474": "[-6061.9165 14784.1357 645.5381]", + "475": "[-6587.1294 14783.8789 645.4993]", + "476": "[-7112.249 14784.1768 640.0157]", + "477": "[-7627.9409 14783.9912 616.2856]", + "478": "[-8138.8403 14784.292 570.5638]", + "479": "[-8650.1084 14784.0059 515.1095]", + "480": "[-9171.4473 14783.9893 454.2121]", + "481": "[-9690.3457 14783.626 392.2413]", + "482": "[-10200.3096 14783.8154 331.4578]", + "483": "[-10712.2695 14783.6514 271.0671]", + "484": "[-11231.4053 14783.5928 213.7484]", + "485": "[-11750.7832 14783.8057 165.7892]", + "486": "[-12265.3008 14780.3535 140.7527]", + "487": "[-12780.0889 14748.2783 133.8312]", + "488": "[-13289.4902 14662.3447 133.6379]", + "489": "[-13781.3896 14503.0303 133.6412]", + "490": "[-14190.5811 14285.5654 133.5361]", + "491": "[-14483.1436 14056.4951 133.4357]", + "492": "[-14760.4902 13747.6367 133.5149]", + "493": "[-14969.8955 13410.7061 133.4474]", + "494": "[-15162.1982 12929.8154 133.5057]", + "495": "[-15274.0381 12426.4434 133.5729]", + "496": "[-15323.0078 11914.5674 132.0765]", + "497": "[-15335.9629 11399.416 114.5669]", + "498": "[-15335.5361 10881.0723 74.5335]", + "499": "[-15335.9561 10363.3623 20.621]", + "500": "[-15336.1904 9847.0762 -38.6478]", + "501": "[-15336.3066 9330.4268 -100.517]", + "502": "[-15346.2002 8812.7676 -163.3994]", + "503": "[-15382.6338 8299.2617 -226.5269]", + "504": "[-15445.3242 7792.3638 -288.644]", + "505": "[-15497.5957 7285.8154 -350.8643]", + "506": "[-15516.4912 6771.9556 -413.9976]", + "507": "[-15520.2451 6258.5986 -476.9509]", + "508": "[-15519.3203 5739.8896 -540.7343]", + "509": "[-15519.1689 5219.8516 -604.5701]", + "510": "[-15519.9336 4702.397 -668.1008]", + "511": "[-15519.5537 4191.1909 -730.7513]", + "512": "[-15519.7158 3674.7061 -794.3202]", + "513": "[-15519.79 3158.0981 -857.7751]", + "514": "[-15519.5 2644.4043 -921.0157]", + "515": "[-15519.542 2135.2866 -982.7799]", + "516": "[-15519.5557 1614.3983 -1046.5428]", + "517": "[-15519.8369 1100.4473 -1110.0192]", + "518": "[-15519.0332 575.8349 -1174.4935]", + "519": "[-15519.9365 61.5044 -1237.5491]", + "520": "[-15519.877 -457.6136 -1301.1514]", + "521": "[-15519.168 -977.3496 -1364.0989]", + "522": "[-15519.6992 -1494.0087 -1425.1886]", + "523": "[-15519.8721 -2004.4381 -1483.0814]", + "524": "[-15519.1621 -2525.7437 -1535.1038]", + "525": "[-15520.2275 -3054.6807 -1567.6719]", + "526": "[-15520.1592 -3576.5815 -1579.4832]", + "527": "[-15519.5527 -4093.6167 -1579.4166]", + "528": "[-15520.458 -4609.3892 -1579.4633]", + "529": "[-15520.0479 -5124.2036 -1579.3453]", + "530": "[-15519.8057 -5638.0518 -1579.4302]", + "531": "[-15520.4434 -6150.9678 -1579.4202]", + "532": "[-15519.9756 -6680.5435 -1579.3859]", + "533": "[-15520.165 -7210.0977 -1579.4961]", + "534": "[-15519.3652 -7726.5938 -1579.3461]", + "535": "[-15512.0791 -8245.8281 -1579.4065]", + "536": "[-15487.5381 -8762.3955 -1579.033]", + "537": "[-15442.4736 -9276.2471 -1579.3763]", + "538": "[-15377.4502 -9786.6904 -1579.386]", + "539": "[-15288.7461 -10292.2754 -1579.3452]", + "540": "[-15174.2813 -10791.3232 -1579.3416]", + "541": "[-15026.9326 -11300.6982 -1579.2192]", + "542": "[-14847.375 -11798.0283 -1579.2822]", + "543": "[-14633.6455 -12279.9502 -1579.2904]", + "544": "[-14385.0586 -12742.9932 -1579.4454]", + "545": "[-14099.7988 -13182.4023 -1579.351]", + "546": "[-13778.6787 -13594.2686 -1579.3336]", + "547": "[-13423.7764 -13975.165 -1579.2667]", + "548": "[-13037.5107 -14321.8066 -1579.3809]", + "549": "[-12623.0693 -14631.7061 -1579.4373]", + "550": "[-12185.7451 -14905.7236 -1579.2836]", + "551": "[-11728.9834 -15142.9561 -1579.384]", + "552": "[-11257.0811 -15345.2451 -1579.4432]", + "553": "[-10773.6094 -15515.415 -1579.3815]", + "554": "[-10269.0361 -15658.4961 -1579.2499]", + "555": "[-9758.0508 -15771.7207 -1579.3986]", + "556": "[-9243.1563 -15858.7393 -1579.3746]", + "557": "[-8725.9736 -15921.8545 -1579.3075]", + "558": "[-8207.7266 -15963.2227 -1579.3925]", + "559": "[-7689.3926 -15985.0928 -1579.4844]", + "560": "[-7171.689 -15991.7656 -1579.4869]", + "561": "[-6654.9595 -15991.0361 -1579.4487]", + "562": "[-6139.2422 -15990.458 -1579.4222]", + "563": "[-5624.561 -15991.7256 -1579.4694]", + "564": "[-5109.4326 -15991.3115 -1591.6036]", + "565": "[-4591.8252 -15990.9268 -1624.1207]", + "566": "[-4069.3572 -15991.0254 -1676.6146]", + "567": "[-3558.4282 -15990.9893 -1734.5986]", + "568": "[-3048.1189 -15991.167 -1795.2203]", + "569": "[-2528.3926 -15991.1152 -1858.3733]", + "570": "[-2019.5122 -15990.6377 -1920.7794]", + "571": "[-1510.4646 -15991.0283 -1982.5448]", + "572": "[-985.9043 -15990.8457 -2045.3333]", + "573": "[-461.4722 -15990.2568 -2105.4631]", + "574": "[52.4746 -15990.5498 -2159.0056]", + "575": "[567.3611 -15990.6709 -2197.918]", + "576": "[1086.2618 -15987.5215 -2214.2839]", + "577": "[1613.9702 -15970.3389 -2215.074]", + "578": "[2138.6987 -15931.998 -2215.1982]", + "579": "[2660.167 -15873.1045 -2214.7603]", + "580": "[3176.8245 -15791.6035 -2215.1997]", + "581": "[3687.2207 -15683.377 -2215.4333]", + "582": "[4189.6797 -15547.9502 -2215.4233]", + "583": "[4681.6294 -15382.6934 -2215.3369]", + "584": "[5159.7666 -15184.7559 -2215.2112]", + "585": "[5621.0049 -14953.4941 -2215.1699]", + "586": "[6061.3423 -14687.5596 -2215.2161]", + "587": "[6476.8301 -14386.9951 -2215.2446]", + "588": "[6877.5806 -14039.999 -2215.2417]", + "589": "[7243.6226 -13658.8164 -2215.2463]", + "590": "[7573.0562 -13247.5752 -2215.3708]", + "591": "[7864.9414 -12810.7441 -2215.3152]", + "592": "[8118.3032 -12352.1758 -2215.4409]", + "593": "[8335.082 -11876.5742 -2215.2952]", + "594": "[8516.8691 -11391.4873 -2215.4832]", + "595": "[8666.2549 -10895.9971 -2215.3301]", + "596": "[8785.8301 -10390.5186 -2215.3579]", + "597": "[8881.751 -9881.4639 -2215.3867]", + "598": "[8951.3379 -9365.2061 -2215.3145]", + "599": "[8999.3076 -8851.2031 -2215.3701]", + "600": "[9028.0361 -8337.3799 -2215.2551]", + "601": "[9045.0029 -7817.2173 -2215.2666]", + "602": "[9077.874 -7299.9487 -2215.4314]", + "603": "[9149.3086 -6788.7603 -2215.3347]", + "604": "[9256.8809 -6285.7266 -2215.3972]", + "605": "[9360.5371 -5784.0381 -2215.3899]", + "606": "[9433.3164 -5269.1943 -2215.436]", + "607": "[9465.8369 -4751.48 -2215.5142]", + "608": "[9473.6494 -4229.6855 -2215.3401]", + "609": "[9472.917 -3700.9258 -2215.51]", + "610": "[9472.3301 -3183.5044 -2215.4453]", + "611": "[9473.7021 -2666.6768 -2215.4744]", + "612": "[9473.1123 -2150.8269 -2215.4397]", + "613": "[9472.7461 -1635.9169 -2215.5168]", + "614": "[9473.2715 -1121.9523 -2215.4988]", + "615": "[9472.9639 -608.9202 -2215.5403]", + "616": "[9473.3115 -96.856 -2215.3142]", + "617": "[9472.8701 431.3045 -2215.4351]", + "618": "[9473.0742 958.4771 -2215.4385]", + "619": "[9473.2188 1484.6648 -2215.4619]", + "620": "[9472.7754 2009.8618 -2215.5339]", + "621": "[9472.8887 2529.7029 -2214.8955]", + "622": "[9472.1279 3044.5779 -2214.7026]", + "623": "[9473.0967 3556.5981 -2214.4023]", + "624": "[9472.834 4083.7715 -2214.375]", + "625": "[9472.6943 4609.6411 -2214.4312]", + "626": "[9473.1826 5134.5176 -2214.4724]", + "627": "[9473.2041 5658.4644 -2214.5249]", + "628": "[9472.7324 6185.0229 -2214.4863]", + "629": "[9473.3154 6704.9014 -2214.4216]", + "630": "[9473.1748 7223.7637 -2214.4778]", + "631": "[9472.624 7741.6836 -2214.5886]", + "632": "[9473.5371 8258.624 -2214.4395]", + "633": "[9473.2813 8774.6074 -2214.5671]", + "634": "[9472.915 9289.6924 -2214.4932]", + "635": "[9472.5264 9803.8584 -2214.4705]", + "636": "[9472.5713 10316.7383 -2214.4514]", + "637": "[9473.2227 10838.0264 -2214.448]", + "638": "[9472.8379 11361.4014 -2214.3411]", + "639": "[9464.3789 11885.0801 -2214.3228]", + "640": "[9426.6064 12404.8955 -2214.1433]", + "641": "[9344.5811 12918.3828 -2214.4514]", + "642": "[9213.2266 13414.2354 -2214.3533]", + "643": "[9014.2637 13897.7959 -2214.4629]", + "644": "[8748.0938 14344.4307 -2214.3137]", + "645": "[8410.6025 14735.9346 -2214.208]", + "646": "[8013.4985 15062.9531 -2214.4429]", + "647": "[7568.5313 15317.5049 -2214.2515]", + "648": "[7080.9116 15508.9365 -2214.3867]", + "649": "[6574.0518 15636.7637 -2214.4187]", + "650": "[6057.8926 15712.8135 -2214.2292]", + "651": "[5539.0181 15745.3057 -2214.313]", + "652": "[5023.2642 15752.6416 -2214.4138]", + "653": "[4508.2832 15751.5156 -2214.2979]", + "654": "[3994.0691 15752.1914 -2214.4714]", + "655": "[3480.6953 15751.4424 -2214.3767]", + "656": "[2968.9099 15736.583 -2214.1958]", + "657": "[2448.6843 15689.5742 -2214.4167]", + "658": "[1938.8077 15594.2051 -2214.1067]", + "659": "[1444.5083 15446.791 -2214.5615]", + "660": "[978.2227 15234.8242 -2214.3018]", + "661": "[548.3005 14956.2383 -2214.4304]", + "662": "[172.653 14605.585 -2214.4885]", + "663": "[-144.0486 14187.8682 -2214.1316]", + "664": "[-385.7145 13724.4219 -2214.4641]", + "665": "[-558.8445 13232.7607 -2214.2715]", + "666": "[-672.7442 12725.0566 -2214.3052]", + "667": "[-736.1255 12209.5137 -2214.4958]", + "668": "[-760.4963 11691.3994 -2214.9604]", + "669": "[-764.7978 11172.5254 -2221.1875]", + "670": "[-763.4318 10660.9277 -2245.1677]", + "671": "[-764.8185 10150.8086 -2290.5503]", + "672": "[-763.4393 9636.3213 -2346.4741]", + "673": "[-764.7699 9115.8701 -2407.199]", + "674": "[-763.4142 8605.5322 -2468.3977]", + "675": "[-764.0934 8092.5791 -2530.0208]", + "676": "[-763.1676 7576.8325 -2590.4602]", + "677": "[-763.8362 7064.5518 -2646.8433]", + "678": "[-763.4095 6553.248 -2694.3252]", + "679": "[-764.1934 6038.3237 -2719.7571]", + "680": "[-763.6988 5515.0854 -2727.5667]", + "681": "[-764.6448 4991.1553 -2727.5032]", + "682": "[-763.7393 4468.0288 -2727.3274]", + "683": "[-764.1053 3945.7007 -2727.4578]", + "684": "[-763.8518 3424.4084 -2727.2966]", + "685": "[-763.6398 2904.4951 -2727.437]", + "686": "[-750.8118 2386.6145 -2727.3596]", + "687": "[-699.8696 1873.7272 -2727.3997]", + "688": "[-612.091 1367.1563 -2727.3301]", + "689": "[-506.8012 853.13 -2727.4768]", + "690": "[-406.0967 334.8459 -2727.3726]", + "691": "[-303.7562 -178.2924 -2727.4839]", + "692": "[-200.2045 -692.0361 -2727.4548]", + "693": "[-99.5005 -1205.2358 -2727.4971]", + "694": "[2.5291 -1717.1027 -2727.5225]", + "695": "[104.9874 -2227.8149 -2727.397]", + "696": "[204.1388 -2732.3643 -2727.3865]", + "697": "[306.0419 -3240.7805 -2727.4141]", + "698": "[408.2082 -3755.7725 -2727.3989]", + "699": "[510.5975 -4269.8511 -2727.5261]", + "700": "[612.0514 -4780.7202 -2727.448]", + "701": "[713.7674 -5291.7437 -2727.4165]", + "702": "[815.8633 -5801.8276 -2727.4272]", + "703": "[916.704 -6311.2861 -2727.5427]", + "704": "[1018.3831 -6819.7295 -2727.4519]", + "705": "[1118.7471 -7327.5454 -2727.4485]", + "706": "[1220.0968 -7834.3311 -2727.426]", + "707": "[1320.6406 -8340.4102 -2727.4089]", + "708": "[1420.7452 -8845.6816 -2727.394]", + "709": "[1521.4635 -9349.6729 -2727.2087]", + "710": "[1620.4854 -9853.0049 -2727.3425]", + "711": "[1707.2092 -10371.6992 -2727.4766]", + "712": "[1757.9696 -10892.1885 -2726.9229]", + "713": "[1760.5043 -11412.5391 -2726.8203]", + "714": "[1703.682 -11932.0928 -2726.9883]", + "715": "[1577.1517 -12442.7666 -2726.7263]", + "716": "[1371.1187 -12922.8232 -2726.5586]", + "717": "[1088.9156 -13358.624 -2725.5676]", + "718": "[737.0938 -13743.8105 -2723.1648]", + "719": "[420.137 -13987.292 -2725.3457]", + "720": "[326.5932 -14034.5566 -2728.3843]", + "721": "[-113.2025 -14300.6914 -2726.5293]", + "722": "[-587.6689 -14501.7705 -2727.3779]", + "723": "[-1076.6936 -14656.1777 -2727.3721]", + "724": "[-1575.1409 -14774.3926 -2727.3091]", + "725": "[-2082.6685 -14856.4971 -2727.0798]", + "726": "[-2599.5071 -14897.0596 -2727.1729]", + "727": "[-3115.2551 -14888.9004 -2727.5864]", + "728": "[-3628.7744 -14821.0313 -2727.4548]", + "729": "[-4127.355 -14682.1924 -2727.4939]", + "730": "[-4597.7744 -14464.9727 -2727.7959]", + "731": "[-5018.8105 -14173.2041 -2727.5078]", + "732": "[-5385.6211 -13812.8633 -2727.6467]", + "733": "[-5691.6045 -13400.3066 -2727.3831]", + "734": "[-5941.9321 -12944.9932 -2727.5513]", + "735": "[-6138.4282 -12466.4434 -2727.4761]", + "736": "[-6289.5913 -11973.7822 -2727.3064]", + "737": "[-6412.8271 -11475.1172 -2727.3237]", + "738": "[-6543.0181 -10977.2656 -2727.2222]", + "739": "[-6710.6138 -10493.3721 -2727.573]", + "740": "[-6924.2617 -10021.8389 -2727.5237]", + "741": "[-7190.0659 -9581.1074 -2727.4109]", + "742": "[-7518.667 -9178.3809 -2727.2708]", + "743": "[-7899.7803 -8835.417 -2727.2324]", + "744": "[-8288.5684 -8498.9443 -2727.2712]", + "745": "[-8642.5664 -8127.6348 -2727.7241]", + "746": "[-8939.0264 -7705.9766 -2727.5237]", + "747": "[-9178.082 -7251.1665 -2727.3735]", + "748": "[-9368.0381 -6768.855 -2727.2927]", + "749": "[-9515.8145 -6270.1196 -2727.3088]", + "750": "[-9631.2266 -5768.7554 -2727.3145]", + "751": "[-9732.3115 -5265.0918 -2727.4812]", + "752": "[-9812.5615 -4752.4521 -2727.4458]", + "753": "[-9855.2432 -4238.3354 -2727.5029]", + "754": "[-9863.7725 -3718.3555 -2727.5686]", + "755": "[-9862.2012 -3199.24 -2727.5327]", + "756": "[-9862.8193 -2681.2344 -2727.5208]", + "757": "[-9863.2266 -2164.353 -2727.5034]", + "758": "[-9862.8721 -1646.624 -2727.4722]", + "759": "[-9862.9922 -1124.9825 -2727.3933]", + "760": "[-9862.8613 -610.8767 -2727.5286]", + "761": "[-9862.8623 -97.5308 -2727.3645]", + "762": "[-9863.0771 415.106 -2727.5332]", + "763": "[-9862.8809 939.1588 -2727.3452]", + "764": "[-9863.0576 1462.3971 -2727.4922]", + "765": "[-9862.8057 1984.8033 -2727.4753]", + "766": "[-9863.1416 2506.406 -2727.5186]", + "767": "[-9862.7754 3026.9944 -2727.3411]", + "768": "[-9863.6943 3546.4807 -2727.3906]", + "769": "[-9863.377 4064.0916 -2727.4514]", + "770": "[-9863.8564 4580.4927 -2727.532]", + "771": "[-9863.6221 5095.9551 -2727.4314]", + "772": "[-9863.1445 5610.5542 -2727.366]", + "773": "[-9863.5439 6124.5293 -2731.0669]", + "774": "[-9863.1133 6643.5557 -2751.928]", + "775": "[-9863.5127 7162.4429 -2795.7329]", + "776": "[-9863.2236 7677.0757 -2850.9177]", + "777": "[-9863.3926 8196.0117 -2911.1404]", + "778": "[-9863.4395 8709.957 -2972.512]", + "779": "[-9863.5908 9218.8164 -3033.7124]", + "780": "[-9863.793 9733.9961 -3094.4185]", + "781": "[-9863.6016 10244.7979 -3151.4226]", + "782": "[-9863.4639 10759.8496 -3200.916]", + "783": "[-9863.6572 11276.8877 -3229.8997]", + "784": "[-9862.1436 11795.8584 -3239.6863]", + "785": "[-9833.918 12315.2471 -3239.3579]", + "786": "[-9756.0781 12830.9258 -3239.2297]", + "787": "[-9607.0684 13326.0283 -3239.3828]", + "788": "[-9396.4834 13742.9121 -3239.4539]", + "789": "[-9165.3877 14051.2471 -3239.5771]", + "790": "[-8861.7295 14335.0957 -3239.4089]", + "791": "[-8536.416 14546.1455 -3239.4084]", + "792": "[-8065.3804 14745.0449 -3239.3472]", + "793": "[-7562.0483 14865.5889 -3239.2842]", + "794": "[-7049.1299 14920.3057 -3239.4165]", + "795": "[-6534.8071 14923.0732 -3239.3088]", + "796": "[-6016.7676 14881.7236 -3239.3025]", + "797": "[-5506.585 14798.0928 -3239.4504]", + "798": "[-5010.6587 14662.9824 -3239.5725]", + "799": "[-4531.6528 14464.3945 -3239.5083]", + "800": "[-4090.5906 14200.1826 -3239.2148]", + "801": "[-3691.7559 13872.0146 -3239.323]", + "802": "[-3320.6721 13516.9727 -3239.5542]", + "803": "[-2952.5513 13142.0371 -3239.3518]", + "804": "[-2586.4292 12776.9072 -3239.5171]", + "805": "[-2210.2268 12404.7686 -3239.4722]", + "806": "[-1837.9661 12030.3955 -3239.469]", + "807": "[-1466.5845 11656.8564 -3239.4392]", + "808": "[-1094.2633 11285.9121 -3239.4553]", + "809": "[-722.846 10915.6748 -3239.5371]", + "810": "[-353.2256 10545.2832 -3239.5151]", + "811": "[15.3138 10175.4355 -3239.4751]", + "812": "[384.1422 9807.4893 -3239.4189]", + "813": "[752.2257 9440.4219 -3239.4109]", + "814": "[1118.3962 9073.0488 -3239.4443]", + "815": "[1484.1348 8706.8574 -3239.45]", + "816": "[1849.8044 8342.1533 -3239.438]", + "817": "[2214.7886 7978.3027 -3239.5]", + "818": "[2577.9158 7614.1572 -3239.4878]", + "819": "[2940.0146 7250.5547 -3239.4717]", + "820": "[3302.8413 6889.2256 -3239.5339]", + "821": "[3679.1516 6514.0137 -3239.5503]", + "822": "[4053.4749 6138.4355 -3239.4888]", + "823": "[4427.2085 5763.9063 -3239.4563]", + "824": "[4800.8008 5390.8506 -3239.4277]", + "825": "[5174.0171 5019.0195 -3239.4158]", + "826": "[5545.0947 4646.7988 -3239.4761]", + "827": "[5917.2915 4274.6797 -3259.0691]", + "828": "[6290.9185 3902.1907 -3300.0176]", + "829": "[6652.5195 3538.959 -3353.3926]", + "830": "[7019.6709 3171.9585 -3412.9146]", + "831": "[7392.0518 2800.7375 -3475.7686]", + "832": "[7753.1973 2439.3296 -3537.3301]", + "833": "[8117.9385 2074.4604 -3598.387]", + "834": "[8484.4971 1708.366 -3656.9341]", + "835": "[8849.9541 1342.8947 -3708.24]", + "836": "[9223.2139 968.8925 -3740.3845]", + "837": "[9584.2148 598.9535 -3751.6089]", + "838": "[9933.9561 217.0026 -3751.4822]", + "839": "[10269.8779 -180.6721 -3751.1204]", + "840": "[10594.4521 -597.7684 -3751.3293]", + "841": "[10895.7002 -1025.3121 -3751.354]", + "842": "[11173.9268 -1466.6183 -3751.3188]", + "843": "[11425.665 -1921.9783 -3751.2527]", + "844": "[11648.1133 -2390.6741 -3751.0938]", + "845": "[11836.8018 -2872.2329 -3751.3882]", + "846": "[11988.5527 -3364.8979 -3751.5332]", + "847": "[12100.3809 -3866.2864 -3751.2739]", + "848": "[12169.2861 -4373.6353 -3751.2271]", + "849": "[12193.8516 -4900.4575 -3751.3455]", + "850": "[12171.1104 -5425.7192 -3751.3286]", + "851": "[12101.5166 -5946.0391 -3751.3325]", + "852": "[11987.3906 -6462.1924 -3751.2756]", + "853": "[11835.4951 -6954.8833 -3751.2161]", + "854": "[11646.415 -7434.5332 -3751.373]", + "855": "[11426.0088 -7899.2207 -3751.385]", + "856": "[11177.9453 -8348.4414 -3751.3521]", + "857": "[10895.0439 -8796.9307 -3751.1616]", + "858": "[10589.9316 -9229.1875 -3751.2476]", + "859": "[10264.3789 -9647.6621 -3751.3867]", + "860": "[9925.96 -10046.2383 -3751.1462]", + "861": "[9573.4209 -10430.8828 -3751.2542]", + "862": "[9208.4102 -10802.1953 -3751.4121]", + "863": "[8831.2539 -11159.0498 -3751.5254]", + "864": "[8442.6826 -11500.7617 -3751.5745]", + "865": "[8033.5176 -11832.4482 -3751.1755]", + "866": "[7615.2563 -12142.4678 -3751.3457]", + "867": "[7183.603 -12430.6094 -3751.2803]", + "868": "[6738.1196 -12694.334 -3751.1897]", + "869": "[6279.0313 -12930.4053 -3751.3076]", + "870": "[5805.854 -13135.9053 -3751.4392]", + "871": "[5307.5259 -13311.251 -3751.3293]", + "872": "[4798.2476 -13445.3945 -3751.3533]", + "873": "[4281.2065 -13536.3359 -3751.4031]", + "874": "[3759.9158 -13581.5 -3751.292]", + "875": "[3238.5828 -13579.4854 -3751.3757]", + "876": "[2721.0837 -13531.6133 -3751.4768]", + "877": "[2211.1008 -13439.2852 -3751.4539]", + "878": "[1711.8811 -13305.2266 -3751.3015]", + "879": "[1225.5645 -13133.9971 -3751.4519]", + "880": "[753.9832 -12928.5869 -3751.4636]", + "881": "[297.6974 -12693.7588 -3751.4644]", + "882": "[-143.0275 -12433.0068 -3751.5027]", + "883": "[-581.8073 -12139.6992 -3751.5601]", + "884": "[-1004.8853 -11826.001 -3751.5005]", + "885": "[-1412.7886 -11494.4482 -3751.2634]", + "886": "[-1806.3566 -11147.542 -3751.3892]", + "887": "[-2186.7871 -10787.709 -3751.3701]", + "888": "[-2558.2417 -10419.8965 -3751.5413]", + "889": "[-2926.8547 -10050.5264 -3751.4888]", + "890": "[-3294.811 -9681.8379 -3751.4651]", + "891": "[-3662.5957 -9314.2949 -3751.4604]", + "892": "[-4029.7339 -8947.3906 -3751.4568]", + "893": "[-4396.3833 -8581.1045 -3751.4897]", + "894": "[-4759.6392 -8218.3584 -3751.5652]", + "895": "[-5123.9839 -7853.0273 -3751.4192]", + "896": "[-5488.2739 -7488.9922 -3751.3264]", + "897": "[-5851.7861 -7125.5347 -3751.3267]", + "898": "[-6214.6187 -6762.7407 -3751.4307]", + "899": "[-6576.938 -6400.751 -3751.4531]", + "900": "[-6944.4082 -6033.3291 -3751.4612]", + "901": "[-7311.8726 -5665.7012 -3751.3926]", + "902": "[-7679.6255 -5297.752 -3751.4402]", + "903": "[-8041.793 -4935.5532 -3751.5117]", + "904": "[-8404.1104 -4572.8052 -3751.2803]", + "905": "[-8773.0146 -4204.21 -3751.4316]", + "906": "[-9136.9629 -3840.3015 -3751.4277]", + "907": "[-9507.0098 -3470.1917 -3751.4202]", + "908": "[-9870.2637 -3106.2183 -3751.4541]", + "909": "[-10237.7188 -2738.5874 -3751.3843]", + "910": "[-10604.4453 -2373.6748 -3751.4387]", + "911": "[-10969.6611 -2008.8022 -3751.448]", + "912": "[-11343.7461 -1633.2853 -3751.4021]", + "913": "[-11713.4346 -1262.3092 -3751.4202]", + "914": "[-12082.3535 -895.3417 -3751.3457]", + "915": "[-12445.4111 -530.3635 -3751.4565]", + "916": "[-12813.8525 -164.1103 -3751.4111]", + "917": "[-13177.0938 201.4431 -3751.4656]", + "918": "[-13541.9619 563.9583 -3751.4111]", + "919": "[-13908.7246 937.3759 -3751.3899]", + "920": "[-14258.0215 1323.9242 -3751.3481]", + "921": "[-14575.3672 1733.2283 -3751.4485]", + "922": "[-14851.0947 2169.0417 -3751.5068]", + "923": "[-15073.4043 2631.4075 -3751.5203]", + "924": "[-15232.875 3129.5708 -3751.1672]", + "925": "[-15310.7832 3643.9692 -3751.1003]", + "926": "[-15318.6855 4163.9907 -3751.4246]", + "927": "[-15277.7861 4681.313 -3751.5332]", + "928": "[-15199.5674 5192.9175 -3751.4009]", + "929": "[-15101.1992 5699.7329 -3751.4592]", + "930": "[-14999.5322 6204.5049 -3751.4636]", + "931": "[-14900.127 6708.4536 -3751.4131]", + "932": "[-14805.3252 7211.793 -3751.4556]", + "933": "[-14739.791 7729.4565 -3751.4392]", + "934": "[-14711.1738 8248.6484 -3751.4114]", + "935": "[-14705.8457 8767.915 -3751.4814]", + "936": "[-14705.9922 9289.8076 -3751.3374]", + "937": "[-14706.0283 9804.793 -3751.4307]", + "938": "[-14706.0264 10318.9492 -3751.3025]", + "939": "[-14705.6318 10832.124 -3751.5479]", + "940": "[-14688.4814 11356.3867 -3751.2021]", + "941": "[-14637.5039 11876.1113 -3751.2747]", + "942": "[-14536.873 12386.7451 -3751.4763]", + "943": "[-14382.4063 12880.8809 -3751.0046]", + "944": "[-14162.8262 13345.6592 -3751.5093]", + "945": "[-13868.8145 13778.2451 -3751.3767]", + "946": "[-13505.7227 14150.4893 -3751.5815]", + "947": "[-13085.7197 14453.082 -3751.3911]", + "948": "[-12623.9229 14683.7979 -3751.592]", + "949": "[-12135.9072 14848.0439 -3751.3638]", + "950": "[-11627.7832 14956.0547 -3751.7004]", + "951": "[-11106.1777 15016.4268 -3751.3723]", + "952": "[-10588.5752 15037.4365 -3751.5437]", + "953": "[-10076.5332 15040.1787 -3751.4966]", + "954": "[-9559.4932 15039.4014 -3751.4585]", + "955": "[-9042.1807 15039.582 -3751.4548]", + "956": "[-8525.8203 15039.6396 -3751.5112]", + "957": "[-8010.4336 15039.4678 -3751.5625]", + "958": "[-7496.0122 15039.8135 -3751.4517]", + "959": "[-6982.7949 15039.1299 -3750.8818]", + "960": "[-6453.4185 15039.6475 -3751.0679]", + "961": "[-5925.7256 15039.1563 -3751.5098]", + "962": "[-5399.417 15038.4463 -3751.6262]", + "963": "[-4874.9741 15039.5996 -3751.3528]", + "964": "[-4352.209 15039.3262 -3750.9971]", + "965": "[-3831.0737 15038.8936 -3750.9734]", + "966": "[-3311.51 15039.6689 -3751.4585]", + "967": "[-2792.854 15039.0654 -3751.5488]", + "968": "[-2275.1675 15038.5391 -3751.5176]", + "969": "[-1758.4174 15039.3525 -3751.4365]", + "970": "[-1242.6277 15039.1445 -3751.4407]", + "971": "[-727.7779 15038.374 -3751.4419]", + "972": "[-213.8456 15039.208 -3751.4287]", + "973": "[299.1512 15039.5703 -3751.4492]", + "974": "[811.1998 15038.1416 -3751.4583]", + "975": "[1339.3347 15038.5674 -3751.4597]", + "976": "[1866.5055 15039.3604 -3751.4377]", + "977": "[2392.7158 15038.918 -3751.4944]", + "978": "[2920.0093 15039.0068 -3765.8008]", + "979": "[3433.9844 15039.0693 -3800.5918]", + "980": "[3955.4067 15039.1436 -3853.5239]", + "981": "[4469.9609 15038.8896 -3912.0242]", + "982": "[4996.1147 15039.1602 -3974.7727]", + "983": "[5515.3774 15039.293 -4037.2515]", + "984": "[6026.9863 15039.0957 -4097.9683]", + "985": "[6549.0356 15039.209 -4157.4468]", + "986": "[7061.0757 15039.3838 -4210.4253]", + "987": "[7580.4014 15039.1934 -4248.0962]", + "988": "[8103.252 15038.8848 -4263.0845]", + "989": "[8616.1055 15039.0635 -4263.2495]", + "990": "[9128.8125 15038.9668 -4263.3667]", + "991": "[9646.4814 15038.7979 -4263.3525]", + "992": "[10163.2588 15038.5557 -4263.4673]", + "993": "[10684.5674 15038.7559 -4263.1875]", + "994": "[11204.6133 15027.3389 -4263.416]", + "995": "[11721.0107 14983.6895 -4263.1699]", + "996": "[12229.1494 14895.8711 -4263.1895]", + "997": "[12721.584 14754.8799 -4263.2173]", + "998": "[13200.4473 14547.9424 -4263.252]", + "999": "[13638.5371 14271.3906 -4263.3223]", + "1000": "[14021.0986 13927.0557 -4263.2915]", + "1001": "[14337.1182 13523.5674 -4263.3945]", + "1002": "[14587.5449 13063.5176 -4263.21]", + "1003": "[14768.0469 12573.3545 -4263.4888]", + "1004": "[14887.627 12066.042 -4263.2324]", + "1005": "[14956.0391 11550.1855 -4263.2759]", + "1006": "[14983.8027 11035.2607 -4263.353]", + "1007": "[14989.0508 10516.8057 -4263.3818]", + "1008": "[14987.9453 10000.7949 -4263.4766]", + "1009": "[14986.9258 9473.9795 -4263.4692]", + "1010": "[14987.9756 8937.54 -4263.5112]", + "1011": "[14988.8174 8413.5098 -4263.46]", + "1012": "[14988.4531 7890.8291 -4263.4785]", + "1013": "[14987.8369 7369.5068 -4263.4683]", + "1014": "[14987.502 6849.5454 -4263.3462]", + "1015": "[14987.5889 6330.9033 -4263.3838]", + "1016": "[14988.2256 5813.6089 -4263.4282]", + "1017": "[14988.4443 5297.6074 -4263.4795]", + "1018": "[14987.4756 4764.1704 -4263.4819]", + "1019": "[14987.5039 4237.8774 -4263.4565]", + "1020": "[14988.1797 3724.9666 -4263.4634]", + "1021": "[14987.9492 3197.3132 -4263.457]", + "1022": "[14984.9658 2676.7126 -4262.707]", + "1023": "[14959.5234 2159.407 -4263.25]", + "1024": "[14890.5645 1639.7726 -4263.3193]", + "1025": "[14773.333 1140.1874 -4263.436]", + "1026": "[14595.7041 648.7827 -4263.2046]", + "1027": "[14349.7021 191.5279 -4263.354]", + "1028": "[14034.8877 -216.9174 -4263.0225]", + "1029": "[13656.0293 -562.3677 -4263.4561]", + "1030": "[13215.1084 -844.2455 -4263.2686]", + "1031": "[12737.0752 -1053.9576 -4263.4141]", + "1032": "[12236.5781 -1198.2706 -4263.4546]", + "1033": "[11724.6533 -1287.8839 -4263.1841]", + "1034": "[11206.0293 -1331.678 -4263.3794]", + "1035": "[10681.4785 -1343.7805 -4263.3242]", + "1036": "[10155.8213 -1344.6283 -4263.4248]", + "1037": "[9640.8584 -1342.922 -4263.3652]", + "1038": "[9126.832 -1344.1543 -4263.5317]", + "1039": "[8613.7002 -1344.1619 -4263.5596]", + "1040": "[8101.5132 -1343.651 -4263.5464]", + "1041": "[7573.7256 -1344.1628 -4263.4189]", + "1042": "[7046.8862 -1344.1477 -4263.519]", + "1043": "[6520.9902 -1343.8572 -4263.4287]", + "1044": "[5996.0278 -1343.9827 -4263.4663]", + "1045": "[5472.0332 -1344.231 -4263.3677]", + "1046": "[4948.9507 -1343.655 -4263.4941]", + "1047": "[4426.8052 -1343.8734 -4263.4639]", + "1048": "[3905.6003 -1344.1952 -4263.3838]", + "1049": "[3385.3103 -1343.4965 -4263.4155]", + "1050": "[2866.1123 -1344.6681 -4263.292]", + "1051": "[2348.0894 -1344.3875 -4263.2954]", + "1052": "[1831.0231 -1344.3865 -4263.2432]", + "1053": "[1315.3171 -1345.4434 -4263.3252]", + "1054": "[800.4871 -1343.9485 -4263.3682]", + "1055": "[286.58 -1344.8024 -4263.356]", + "1056": "[-226.4437 -1345.0416 -4263.4131]", + "1057": "[-738.5685 -1344.1436 -4263.3433]", + "1058": "[-1265.4716 -1345.2349 -4263.3667]", + "1059": "[-1791.3547 -1344.1626 -4263.2339]", + "1060": "[-2316.1086 -1343.9991 -4263.1455]", + "1061": "[-2839.6252 -1344.2363 -4263.3877]", + "1062": "[-3362.2288 -1343.5618 -4263.481]", + "1063": "[-3883.9275 -1343.5594 -4263.5044]", + "1064": "[-4404.7275 -1344.1443 -4263.438]", + "1065": "[-4924.6138 -1343.6854 -4263.4619]", + "1066": "[-5443.606 -1343.6104 -4263.4619]", + "1067": "[-5961.7368 -1344.0253 -4263.4585]", + "1068": "[-6479.2861 -1343.3544 -4263.4668]", + "1069": "[-6991.5366 -1334.4896 -4263.395]", + "1070": "[-7518.5879 -1307.8063 -4263.3247]", + "1071": "[-8043.0698 -1260.5507 -4263.3433]", + "1072": "[-8563.7051 -1190.6946 -4263.3164]", + "1073": "[-9079.1348 -1096.8188 -4263.3643]", + "1074": "[-9587.6182 -976.1063 -4263.4712]", + "1075": "[-10086.8535 -825.976 -4263.3838]", + "1076": "[-10573.8477 -644.7527 -4263.6831]", + "1077": "[-11045.7334 -431.2069 -4263.5186]", + "1078": "[-11498.1846 -182.8709 -4263.5317]", + "1079": "[-11927.7129 100.134 -4263.3096]", + "1080": "[-12330.3174 417.5194 -4263.478]", + "1081": "[-12713.751 779.0538 -4263.3726]", + "1082": "[-13061.9492 1172.2085 -4263.3188]", + "1083": "[-13372.4072 1593.6389 -4263.4189]", + "1084": "[-13645.9766 2038.3209 -4263.541]", + "1085": "[-13882.1758 2502.4536 -4263.3384]", + "1086": "[-14083.2432 2981.4163 -4263.3833]", + "1087": "[-14250.5117 3471.8496 -4263.4233]", + "1088": "[-14387.8594 3970.3601 -4263.2588]", + "1089": "[-14496.4326 4474.6484 -4263.2231]", + "1090": "[-14579.96 4982.6587 -4263.3984]", + "1091": "[-14640.5811 5497.1348 -4263.4014]", + "1092": "[-14680.2383 6017.4917 -4263.3848]", + "1093": "[-14700.6904 6537.9771 -4263.1772]", + "1094": "[-14698.8018 7057.2495 -4263.4829]", + "1095": "[-14663.4121 7573.3667 -4262.9009]", + "1096": "[-14585.4414 8082.4165 -4262.8706]", + "1097": "[-14456.5479 8578.2334 -4263.5186]", + "1098": "[-14261.4102 9064.0898 -4263.1255]", + "1099": "[-13999.2549 9512.9111 -4263.0132]", + "1100": "[-13668.8311 9910.0557 -4261.9004]", + "1101": "[-13272.8066 10248.7676 -4259.8389]", + "1102": "[-12936.4834 10446.4766 -4261.9355]", + "1103": "[-12462.0186 10651.4814 -4263.1411]", + "1104": "[-11967.1475 10788.6895 -4263.5156]", + "1105": "[-11464.1543 10884.5859 -4263.2793]", + "1106": "[-10945.4863 10929.5283 -4263.2715]", + "1107": "[-10432.4766 10940.6113 -4276.9004]", + "1108": "[-9915.877 10943.5684 -4309.999]", + "1109": "[-9405.875 10943.1826 -4360.7056]", + "1110": "[-8888.0332 10942.6484 -4419.2915]", + "1111": "[-8375.6631 10943.4043 -4480.0112]", + "1112": "[-7860.9365 10942.7412 -4541.7393]", + "1113": "[-7347.4819 10943.5352 -4603.061]", + "1114": "[-6825.0986 10942.958 -4663.1147]", + "1115": "[-6310.9956 10943.2764 -4717.0835]", + "1116": "[-5796.1865 10943.1934 -4756.8687]", + "1117": "[-5272.9219 10943.3857 -4774.6592]", + "1118": "[-4760.9058 10943.4346 -4776.2881]", + "1119": "[-4234.4272 10942.8779 -4776.4775]", + "1120": "[-3708.7983 10942.8848 -4776.4712]", + "1121": "[-3184.0222 10943.2021 -4776.4595]", + "1122": "[-2660.094 10943.8662 -4776.5186]", + "1123": "[-2137.063 10942.5645 -4776.4351]", + "1124": "[-1614.9186 10943.6055 -4776.353]", + "1125": "[-1093.6152 10943.6699 -4776.4341]", + "1126": "[-573.1732 10942.9473 -4776.4521]", + "1127": "[-53.5953 10942.6221 -4776.4521]", + "1128": "[465.15 10943.2754 -4776.4546]", + "1129": "[983.0729 10943.4365 -4776.4531]", + "1130": "[1500.1631 10943.2871 -4776.4004]", + "1131": "[2016.4447 10943.4834 -4776.3545]", + "1132": "[2531.6714 10943.9727 -4776.1255]", + "1133": "[3045.5215 10943.7695 -4776.3364]", + "1134": "[3558.106 10944.4336 -4776.1924]", + "1135": "[4083.439 10930.0869 -4776.5215]", + "1136": "[4602.8623 10883.0273 -4776.4282]", + "1137": "[5111.022 10789.2871 -4776.4536]", + "1138": "[5603.2808 10642.7236 -4775.9609]", + "1139": "[6079.6929 10427.542 -4776.5469]", + "1140": "[6514.2744 10144.376 -4776.2954]", + "1141": "[6890.3154 9792.3447 -4776.1782]", + "1142": "[7199.3813 9383.0273 -4776.3071]", + "1143": "[7442.5635 8918.4736 -4776.2412]", + "1144": "[7616.5645 8424.9854 -4776.3262]", + "1145": "[7730.4009 7915.2803 -4776.2397]", + "1146": "[7793.9141 7398.2231 -4776.4146]", + "1147": "[7817.605 6878.5107 -4776.4839]", + "1148": "[7821.6274 6362.8652 -4776.3257]", + "1149": "[7820.9644 5832.4595 -4776.3862]", + "1150": "[7820.5889 5315.7427 -4776.4775]", + "1151": "[7820.8618 4800.917 -4776.4668]", + "1152": "[7820.9272 4287.2622 -4776.4878]", + "1153": "[7821.1646 3774.7664 -4776.4683]", + "1154": "[7821.188 3241.209 -4776.46]", + "1155": "[7820.9512 2708.8887 -4776.4629]", + "1156": "[7820.646 2177.7964 -4776.3423]", + "1157": "[7821.0479 1647.9323 -4776.3516]", + "1158": "[7821.207 1119.2666 -4776.3794]", + "1159": "[7820.5801 591.8199 -4776.4321]", + "1160": "[7820.3208 65.5785 -4776.4712]", + "1161": "[7820.8916 -459.4741 -4776.4604]", + "1162": "[7821.0508 -983.3577 -4776.4512]", + "1163": "[7821.1543 -1506.0857 -4776.5513]", + "1164": "[7820.6685 -2027.6296 -4776.5063]", + "1165": "[7820.5688 -2548.0054 -4776.4751]", + "1166": "[7821.0005 -3067.218 -4776.5195]", + "1167": "[7821.499 -3585.2595 -4776.4556]", + "1168": "[7821.0918 -4102.146 -4776.4678]", + "1169": "[7820.6265 -4617.8813 -4776.4663]", + "1170": "[7820.9028 -5132.4922 -4776.4404]", + "1171": "[7821.1914 -5646.0005 -4776.5469]", + "1172": "[7821.2031 -6158.3745 -4776.501]", + "1173": "[7821.127 -6690.9199 -4776.3198]", + "1174": "[7820.5933 -7222.3008 -4776.3774]", + "1175": "[7820.7236 -7752.4771 -4776.4644]", + "1176": "[7821.2383 -8281.4805 -4776.458]", + "1177": "[7821.1079 -8799.4629 -4776.4634]", + "1178": "[7821.0054 -9327.0459 -4776.3408]", + "1179": "[7820.7856 -9843.6582 -4776.4116]", + "1180": "[7821.7529 -10362.04 -4776.3325]", + "1181": "[7807.8755 -10879.0947 -4776.3755]", + "1182": "[7765.4385 -11392.4805 -4776.3667]", + "1183": "[7676.4731 -11897.207 -4775.9092]", + "1184": "[7532.9067 -12398.8262 -4776.1968]", + "1185": "[7325.4175 -12873.7344 -4776.1128]", + "1186": "[7050.0073 -13308.6689 -4776.3091]", + "1187": "[6698.6982 -13696.3135 -4776.2876]", + "1188": "[6287.0239 -14014.9336 -4776.4204]", + "1189": "[5830.4009 -14260.8516 -4776.1821]", + "1190": "[5344.3604 -14437.4082 -4776.3892]", + "1191": "[4841.9131 -14555.5059 -4776.2813]", + "1192": "[4326.5698 -14623.5908 -4776.3291]", + "1193": "[3800.9976 -14652.542 -4776.2959]", + "1194": "[3280.6077 -14656.0762 -4776.3057]", + "1195": "[2756.4167 -14654.1475 -4776.4766]", + "1196": "[2239.1511 -14654.2471 -4776.5303]", + "1197": "[1724.7922 -14655.5215 -4776.3921]", + "1198": "[1211.7657 -14655.4814 -4776.2891]", + "1199": "[674.425 -14654.3203 -4776.4541]", + "1200": "[138.552 -14654.4756 -4776.4604]", + "1201": "[-395.9642 -14655.2686 -4776.3818]", + "1202": "[-929.0439 -14655.2617 -4776.459]", + "1203": "[-1460.765 -14654.4844 -4776.394]", + "1204": "[-1982.7661 -14654.6758 -4776.4912]", + "1205": "[-2495.2327 -14655.3857 -4776.417]", + "1206": "[-3012.9939 -14654.8418 -4776.4858]", + "1207": "[-3529.6421 -14654.3975 -4776.4561]", + "1208": "[-4044.8213 -14655.3662 -4776.5005]", + "1209": "[-4562.1851 -14653.8652 -4776.5122]", + "1210": "[-5083.8066 -14640.1885 -4776.1899]", + "1211": "[-5603.2764 -14609.0254 -4776.3813]", + "1212": "[-6119.8652 -14556.8223 -4776.438]", + "1213": "[-6631.9097 -14482.4775 -4776.6406]", + "1214": "[-7138.3433 -14384.6396 -4776.0361]", + "1215": "[-7637.1333 -14259.8477 -4776.3931]", + "1216": "[-8126.7622 -14107.1426 -4776.3218]", + "1217": "[-8619.2041 -13916.6504 -4776.4072]", + "1218": "[-9095.3662 -13692.0703 -4776.4585]", + "1219": "[-9551.0625 -13431.6533 -4776.3433]", + "1220": "[-9981.7637 -13134.8418 -4776.375]", + "1221": "[-10384.2031 -12803.4131 -4776.4395]", + "1222": "[-10753.4775 -12437.7607 -4776.6206]", + "1223": "[-11088.9375 -12042.8154 -4776.3525]", + "1224": "[-11387.2979 -11620.9229 -4776.3633]", + "1225": "[-11649.3457 -11177.1436 -4776.2305]", + "1226": "[-11875.7373 -10715.7676 -4776.416]", + "1227": "[-12066.9922 -10240.0645 -4776.5615]", + "1228": "[-12232.1758 -9739.4385 -4776.3784]", + "1229": "[-12364.7041 -9230.6035 -4776.3882]", + "1230": "[-12469.6992 -8716.4551 -4776.3716]", + "1231": "[-12548.207 -8198.6514 -4776.4653]", + "1232": "[-12603.9658 -7678.8633 -4776.2773]", + "1233": "[-12638.5352 -7158.3423 -4776.0635]", + "1234": "[-12654.0654 -6638.2334 -4775.9771]", + "1235": "[-12657.7715 -6124.3535 -4776.3491]", + "1236": "[-12656.6328 -5606.5146 -4776.4648]", + "1237": "[-12656.6152 -5083.1953 -4776.4976]", + "1238": "[-12657.8115 -4560.8589 -4776.48]", + "1239": "[-12656.8154 -4039.5068 -4776.4741]", + "1240": "[-12656.1396 -3519.1626 -4776.4639]", + "1241": "[-12656.8457 -2999.7732 -4776.4614]", + "1242": "[-12657.1416 -2481.3308 -4776.3594]", + "1243": "[-12657.2715 -1963.7949 -4776.3486]", + "1244": "[-12656.9131 -1447.225 -4776.4517]", + "1245": "[-12656.9063 -931.5935 -4776.5068]", + "1246": "[-12656.5986 -416.5213 -4779.6484]", + "1247": "[-12656.6631 100.8257 -4801.3481]", + "1248": "[-12656.9414 622.6443 -4846.0352]", + "1249": "[-12656.9766 1135.9153 -4901.2056]", + "1250": "[-12656.8135 1660.1731 -4961.8555]", + "1251": "[-12656.6855 2177.5786 -5024.0718]", + "1252": "[-12656.834 2687.3972 -5086.2295]", + "1253": "[-12656.8486 3204.4055 -5149.8047]", + "1254": "[-12656.7568 3727.5273 -5213.9819]", + "1255": "[-12657.1699 4242.6738 -5277.3823]", + "1256": "[-12656.8555 4765.7993 -5341.5684]", + "1257": "[-12656.6924 5285.4321 -5405.3721]", + "1258": "[-12656.667 5795.2915 -5467.9692]", + "1259": "[-12656.6992 6316.1045 -5531.8628]", + "1260": "[-12657.0928 6840.0859 -5596.2676]", + "1261": "[-12657.2705 7354.6528 -5658.9219]", + "1262": "[-12657.2949 7869.0063 -5720.5522]", + "1263": "[-12657.3359 8385.8652 -5781.4268]", + "1264": "[-12657.2363 8899.8037 -5837.2041]", + "1265": "[-12657.3564 9419.0088 -5883.5654]", + "1266": "[-12656.8027 9939.9053 -5907.0508]", + "1267": "[-12642.2256 10460.7324 -5911.9087]", + "1268": "[-12587.6611 10973.8037 -5912.4492]", + "1269": "[-12466.5059 11479.6426 -5912.4673]", + "1270": "[-12265.7109 11952.21 -5912.3267]", + "1271": "[-12055.5322 12274.8213 -5912.5044]", + "1272": "[-11766.6504 12582.8359 -5912.3086]", + "1273": "[-11456.2236 12814.6836 -5912.3652]", + "1274": "[-11078.9434 13004.8164 -5912.4385]", + "1275": "[-10590.1338 13160.54 -5912.3784]", + "1276": "[-10083.7588 13242.5898 -5912.2759]", + "1277": "[-9570.9189 13268.9795 -5912.5503]", + "1278": "[-9054.8223 13239.3994 -5912.2119]", + "1279": "[-8546.1563 13151.4492 -5912.1138]", + "1280": "[-8051.2466 12989.6758 -5912.2861]", + "1281": "[-7662.5146 12781.9824 -5912.4082]", + "1282": "[-7355.7246 12540.9404 -5912.2993]", + "1283": "[-7085.3315 12238.4434 -5912.3774]", + "1284": "[-6878.0728 11902.8262 -5912.4844]", + "1285": "[-6685.127 11419.4775 -5912.3496]", + "1286": "[-6573.1899 10912.9707 -5912.3818]", + "1287": "[-6524.3857 10402.6865 -5912.3086]", + "1288": "[-6512.2227 9885.4971 -5912.4131]", + "1289": "[-6513.6606 9368.5615 -5912.4473]", + "1290": "[-6513.6763 8847.916 -5912.4165]", + "1291": "[-6511.707 8328.1279 -5912.5103]", + "1292": "[-6514.1797 7809.2139 -5912.4595]", + "1293": "[-6512.7808 7291.1807 -5912.4541]", + "1294": "[-6512.603 6777.5771 -5912.4565]", + "1295": "[-6512.645 6259.9009 -5912.4224]", + "1296": "[-6490.6479 5747.9414 -5912.3394]", + "1297": "[-6423.7998 5233.8813 -5912.2793]", + "1298": "[-6289.5352 4736.8457 -5912.394]", + "1299": "[-6069.0005 4267.9683 -5912.5313]", + "1300": "[-5868.2598 3983.7656 -5912.4063]", + "1301": "[-5550.0957 3668.5469 -5912.332]", + "1302": "[-5268.6455 3473.6738 -5912.5337]", + "1303": "[-4796.7168 3255.6526 -5912.3364]", + "1304": "[-4300.4053 3123.2859 -5912.2056]", + "1305": "[-3792.1389 3058.1726 -5912.2437]", + "1306": "[-3272.3269 3047.2153 -5912.1738]", + "1307": "[-2755.5215 3080.0933 -5912.3154]", + "1308": "[-2245.1309 3155.6987 -5912.4941]", + "1309": "[-1747.4838 3281.7385 -5912.6465]", + "1310": "[-1263.6414 3468.6624 -5912.5015]", + "1311": "[-814.5626 3720.3218 -5912.2061]", + "1312": "[-406.0904 4042.186 -5912.4502]", + "1313": "[-29.1 4399.0444 -5912.5273]", + "1314": "[337.2914 4766.1128 -5916.2178]", + "1315": "[703.4799 5134.2964 -5937.1426]", + "1316": "[1069.5574 5499.5015 -5980.333]", + "1317": "[1434.937 5863.978 -6035.6528]", + "1318": "[1799.3866 6229.1567 -6095.4478]", + "1319": "[2162.4724 6592.0024 -6157.1206]", + "1320": "[2522.5234 6952.1455 -6219.0049]", + "1321": "[2886.6472 7315.792 -6282.2798]", + "1322": "[3246.8574 7676.8516 -6344.8926]", + "1323": "[3610.5466 8040.1963 -6407.9175]", + "1324": "[3972.2346 8401.4336 -6470.7817]", + "1325": "[4332.8418 8763.1025 -6533.479]", + "1326": "[4696.8057 9126.832 -6596.6558]", + "1327": "[5064.1396 9493.7891 -6660.4321]", + "1328": "[5428.085 9858.3857 -6722.9907]", + "1329": "[5791.5879 10222.2539 -6784.7759]", + "1330": "[6153.9111 10584.6328 -6844.1216]", + "1331": "[6518.5815 10949.1426 -6898.8384]", + "1332": "[6884.8232 11315.5752 -6940.5981]", + "1333": "[7251.4937 11682.1982 -6959.7319]", + "1334": "[7620.0771 12049.8018 -6962.4678]", + "1335": "[7989.9565 12417.0908 -6963.8672]", + "1336": "[8378.9043 12762.8789 -6966.7612]", + "1337": "[8796.6035 13059.3643 -6971.729]", + "1338": "[9261.8643 13288.8613 -6975.917]", + "1339": "[9611.4385 13390.1523 -6977.3926]", + "1340": "[9977.7422 13428.9814 -6978.0352]", + "1341": "[10318.6426 13404.9902 -6977.7432]", + "1342": "[10684.2236 13313.2715 -6976.1118]", + "1343": "[11100.8506 13127.0127 -6972.9419]", + "1344": "[11533.5322 12842.7422 -6968.3188]", + "1345": "[11927.2842 12505.2422 -6968.8159]", + "1346": "[12296.8506 12149.293 -6989.1479]", + "1347": "[12660.209 11785.8193 -7032.2524]", + "1348": "[13021.6299 11423.0957 -7087.1479]", + "1349": "[13381.8125 11062.8828 -7146.2583]", + "1350": "[13740.3896 10703.0137 -7210.3511]", + "1351": "[14083.6016 10326.1943 -7277.6206]", + "1352": "[14396.7021 9926.416 -7344.0918]", + "1353": "[14674.1016 9496.2021 -7396.9185]", + "1354": "[14904.7871 9037.4717 -7434.6484]", + "1355": "[15063.502 8551.3008 -7460.7773]", + "1356": "[15134.6016 8052.8311 -7477.0249]", + "1357": "[15119.7568 7600.9624 -7485.0972]", + "1358": "[15016.5742 7091.1377 -7487.6445]", + "1359": "[14829.9287 6608.0747 -7486.436]", + "1360": "[14574.4863 6162.1675 -7483.7095]", + "1361": "[14267.8213 5745.3735 -7479.9795]", + "1362": "[13930.7803 5359.8496 -7476.6206]", + "1363": "[13568.2744 4983.7524 -7474.7632]", + "1364": "[13195.5293 4612.4849 -7474.7529]", + "1365": "[12825.3936 4244.5479 -7474.9541]", + "1366": "[12450.7549 3866.8623 -7475.1035]", + "1367": "[12082.4326 3497.8713 -7475.0044]", + "1368": "[11713.208 3131.1272 -7474.9263]", + "1369": "[11345.9014 2764.3054 -7475.1245]", + "1370": "[10972.8154 2389.0525 -7475.1646]", + "1371": "[10598.4893 2014.6367 -7475.1025]", + "1372": "[10231.8691 1650.0514 -7475.0234]", + "1373": "[9859.9697 1276.3105 -7474.9785]", + "1374": "[9488.793 905.7505 -7475.0586]", + "1375": "[9121.8535 539.2278 -7475.1064]", + "1376": "[8756.3398 173.4465 -7475.1304]", + "1377": "[8393.1582 -189.8424 -7475.1001]", + "1378": "[8029.5767 -552.8955 -7475.0718]", + "1379": "[7665.1626 -917.4192 -7475.0811]", + "1380": "[7298.0098 -1274.5922 -7478.1011]", + "1381": "[6891.3672 -1596.353 -7483.4111]", + "1382": "[6439.4253 -1846.2559 -7489.4355]", + "1383": "[5955.9209 -2025.7422 -7490.479]", + "1384": "[5456.7124 -2142.9976 -7487.561]", + "1385": "[4945.7202 -2209.3062 -7482.2529]", + "1386": "[4425.2637 -2235.7358 -7477.5322]", + "1387": "[3901.594 -2241.0378 -7474.8994]", + "1388": "[3387.7231 -2239.6204 -7475.0752]", + "1389": "[2873.3049 -2239.6045 -7475.1226]", + "1390": "[2351.3384 -2240.5432 -7475.1763]", + "1391": "[1831.108 -2239.7463 -7475.0215]", + "1392": "[1317.7761 -2239.6782 -7475.0483]", + "1393": "[794.9223 -2240.5088 -7475.1392]", + "1394": "[281.0304 -2239.9873 -7475.187]", + "1395": "[-239.3923 -2239.4136 -7474.9541]", + "1396": "[-766.9639 -2239.6448 -7475.0547]", + "1397": "[-1293.3196 -2239.9536 -7475.1563]", + "1398": "[-1818.4357 -2239.887 -7475.0093]", + "1399": "[-2342.323 -2240.0149 -7474.9795]", + "1400": "[-2864.968 -2239.7266 -7474.9707]", + "1401": "[-3386.3997 -2239.6628 -7475.1831]", + "1402": "[-3906.6111 -2240.1636 -7475.1787]", + "1403": "[-4425.6377 -2239.8616 -7474.9961]", + "1404": "[-4943.4824 -2239.708 -7474.9453]", + "1405": "[-5460.1738 -2240.1299 -7475.1543]", + "1406": "[-5975.6597 -2239.8005 -7475.1489]", + "1407": "[-6489.9927 -2239.4102 -7475.0313]", + "1408": "[-7003.1509 -2239.8865 -7474.9722]", + "1409": "[-7515.186 -2240.2646 -7475.1338]", + "1410": "[-8048.2495 -2240.0261 -7475.1406]", + "1411": "[-8580.0586 -2240.1787 -7475.041]", + "1412": "[-9103.6992 -2240.064 -7475.0142]", + "1413": "[-9620.7832 -2239.8716 -7475.062]", + "1414": "[-10135.1328 -2239.5029 -7475.1436]", + "1415": "[-10659.5293 -2240.1333 -7475.0825]", + "1416": "[-11176.0117 -2240.0742 -7475.0459]", + "1417": "[-11698.6553 -2239.9714 -7474.8984]", + "1418": "[-12217.8271 -2239.9788 -7475.0127]", + "1419": "[-12732.5908 -2240.074 -7475.0596]", + "1420": "[-13246.6318 -2254.3328 -7475.3701]", + "1421": "[-13765.2607 -2307.4983 -7475.5786]", + "1422": "[-14268.8945 -2427.2959 -7475.457]", + "1423": "[-14741.627 -2624.9922 -7475.4033]", + "1424": "[-15066.3242 -2833.4175 -7475.2764]", + "1425": "[-15361.2354 -3105.5317 -7475.6509]", + "1426": "[-15602.915 -3422.8254 -7475.2539]", + "1427": "[-15797.6055 -3800.2117 -7475.3555]", + "1428": "[-15955.5723 -4290.5601 -7475.3442]", + "1429": "[-16041.1758 -4803.7085 -7475.4204]", + "1430": "[-16071.1982 -5317.0225 -7475.249]", + "1431": "[-16076.7656 -5829.6509 -7475.0518]", + "1432": "[-16075.6641 -6351.1577 -7474.96]", + "1433": "[-16075.9873 -6871.9087 -7475.0518]", + "1434": "[-16076.1787 -7391.7476 -7475.02]", + "1435": "[-16076.3252 -7910.6943 -7475.0601]", + "1436": "[-16075.6426 -8428.7813 -7475.0605]", + "1437": "[-16076.3359 -8945.9951 -7475.0518]", + "1438": "[-16070.7051 -9462.1426 -7475.1548]", + "1439": "[-16035.1748 -9975.0381 -7475.313]", + "1440": "[-15940.9697 -10487.1553 -7475.4595]", + "1441": "[-15772.1406 -10977.7051 -7475.4819]", + "1442": "[-15558.2676 -11363.6104 -7475.4136]", + "1443": "[-15325.3955 -11650.9844 -7475.4028]", + "1444": "[-15004.4131 -11929.7988 -7475.3418]", + "1445": "[-14670.2637 -12129.8867 -7475.4365]", + "1446": "[-14185.374 -12316.1758 -7475.2617]", + "1447": "[-13682.3799 -12423.083 -7475.377]", + "1448": "[-13164.0078 -12468.6992 -7475.3037]", + "1449": "[-12648.9658 -12490.1689 -7475.2998]", + "1450": "[-12128.9473 -12518.4443 -7475.4053]", + "1451": "[-11613.3428 -12575.2412 -7475.2686]", + "1452": "[-11103.6738 -12660.9424 -7475.4712]", + "1453": "[-10602.0303 -12774.5557 -7475.6152]", + "1454": "[-10103.167 -12922.3975 -7475.5063]", + "1455": "[-9611.0479 -13090.4795 -7475.3555]", + "1456": "[-9122.502 -13248.123 -7475.5122]", + "1457": "[-8618.0205 -13376.8262 -7475.2847]", + "1458": "[-8114.0605 -13474.3818 -7475.5908]", + "1459": "[-7602.0342 -13543.3584 -7475.3745]", + "1460": "[-7088.7021 -13584.917 -7475.4292]", + "1461": "[-6566.6528 -13603.3418 -7475.5093]", + "1462": "[-6047.418 -13606.9697 -7475.3682]", + "1463": "[-5525.3555 -13606.3779 -7475.6035]", + "1464": "[-5010.6235 -13606.8652 -7475.1963]", + "1465": "[-4489.8081 -13606.2695 -7475.3999]", + "1466": "[-3965.7117 -13606.5156 -7475.4648]", + "1467": "[-3452.0332 -13606.9844 -7475.3101]", + "1468": "[-2938.0088 -13606.0762 -7475.2695]", + "1469": "[-2409.0818 -13606.7988 -7475.5029]", + "1470": "[-1888.1517 -13607.0947 -7475.3975]", + "1471": "[-1358.2803 -13607.4414 -7475.0752]", + "1472": "[-829.9323 -13607.3252 -7475.3022]", + "1473": "[-302.6403 -13606.8135 -7475.4844]", + "1474": "[223.5667 -13607.0469 -7475.4766]", + "1475": "[748.6737 -13607.5674 -7475.4785]", + "1476": "[1272.6952 -13607.4688 -7475.4722]", + "1477": "[1795.6644 -13607.4688 -7475.4644]", + "1478": "[2317.147 -13606.5889 -7475.6055]", + "1479": "[2837.1912 -13607.1094 -7475.6045]", + "1480": "[3356.0806 -13607.3184 -7475.4912]", + "1481": "[3873.8794 -13606.7324 -7475.5088]", + "1482": "[4389.6978 -13606.7197 -7475.8945]", + "1483": "[4904.2529 -13607.4463 -7475.6118]", + "1484": "[5417.7798 -13607.5068 -7475.4575]", + "1485": "[5930.3052 -13606.5303 -7475.4146]", + "1486": "[6460.7388 -13606.584 -7475.4688]", + "1487": "[6990.0977 -13607.4404 -7475.4678]", + "1488": "[7515.604 -13607.7754 -7475.4678]", + "1489": "[8030.6563 -13607.0879 -7475.4272]", + "1490": "[8544.9072 -13606.5635 -7475.3667]", + "1491": "[9058.3848 -13607.4688 -7475.5156]", + "1492": "[9570.7842 -13599.0352 -7475.3818]", + "1493": "[10093.1133 -13563.1416 -7475.2183]", + "1494": "[10608.0449 -13483.4375 -7475.3569]", + "1495": "[11109.625 -13352.1729 -7475.5171]", + "1496": "[11588.1211 -13159.1396 -7475.5391]", + "1497": "[12030.8525 -12899.6406 -7475.2739]", + "1498": "[12430.333 -12562.6982 -7475.502]", + "1499": "[12763.7314 -12163.5557 -7475.1323]", + "1500": "[13023.2949 -11715.1963 -7475.4556]", + "1501": "[13214.7021 -11235.1016 -7475.4653]", + "1502": "[13343.0879 -10735.6426 -7475.2813]", + "1503": "[13421.2012 -10226.835 -7475.2217]", + "1504": "[13455.8164 -9714.042 -7475.3984]", + "1505": "[13464.5566 -9200.7324 -7475.4507]", + "1506": "[13463.7666 -8687.9531 -7476.8613]", + "1507": "[13464.2764 -8171.5366 -7495.0713]", + "1508": "[13463.9258 -7657.4702 -7534.3447]", + "1509": "[13464.1016 -7138.3843 -7588.3877]", + "1510": "[13464.0537 -6625.0332 -7647.2266]", + "1511": "[13464.0586 -6104.7139 -7709.2988]", + "1512": "[13464.6084 -5593.27 -7771.6875]", + "1513": "[13463.252 -5078.3027 -7834.8843]", + "1514": "[13464.123 -4561.291 -7898.3555]", + "1515": "[13464.8926 -4043.8667 -7961.9458]", + "1516": "[13463.6016 -3527.5549 -8025.3071]", + "1517": "[13463.4473 -3015.1345 -8088.2168]", + "1518": "[13464.0518 -2490.3918 -8152.6348]", + "1519": "[13463.9492 -1968.8665 -8216.4531]", + "1520": "[13463.7227 -1450.288 -8279.0361]", + "1521": "[13463.3994 -935.5288 -8339.7119]", + "1522": "[13464.0762 -411.312 -8398.4131]", + "1523": "[13463.6143 108.3085 -8448.6973]", + "1524": "[13463.7041 636.3317 -8477.6738]", + "1525": "[13463.7783 1151.1967 -8487.0771]", + "1526": "[13462.9854 1666.7417 -8486.5518]", + "1527": "[13454.2773 2181.1035 -8486.0078]", + "1528": "[13427.6113 2693.3425 -8486.2373]", + "1529": "[13379.9316 3220.7195 -8486.0996]", + "1530": "[13310.2783 3743.9565 -8486.2236]", + "1531": "[13214.9453 4261.8765 -8486.3428]", + "1532": "[13093.1797 4772.5708 -8486.667]", + "1533": "[12942.2002 5273.8428 -8486.4648]", + "1534": "[12759.1221 5762.6943 -8485.9326]", + "1535": "[12543.1475 6235.9731 -8486.0684]", + "1536": "[12292.5664 6690.0635 -8486.2656]", + "1537": "[12006.4492 7120.7202 -8486.4268]", + "1538": "[11685.7295 7524.2568 -8486.4141]", + "1539": "[11332.0781 7897.166 -8486.4023]", + "1540": "[10947.749 8236.1299 -8486.4521]", + "1541": "[10522.7832 8549.5977 -8486.3125]", + "1542": "[10073.7578 8824.7246 -8486.3115]", + "1543": "[9605.1514 9062.0703 -8486.4121]", + "1544": "[9121.5908 9263.9785 -8486.2793]", + "1545": "[8626.3037 9431.4307 -8486.376]", + "1546": "[8122.8691 9568.25 -8486.4688]", + "1547": "[7613.624 9676.5664 -8486.3223]", + "1548": "[7100.5767 9758.8477 -8486.3975]", + "1549": "[6585.4629 9818.4111 -8486.415]", + "1550": "[6069.3169 9856.0498 -8486.4434]", + "1551": "[5553.2104 9875.4668 -8486.0693]", + "1552": "[5038.0688 9880.1035 -8486.3945]", + "1553": "[4523.8296 9879.5898 -8486.4229]", + "1554": "[4010.4822 9880.0293 -8486.3965]", + "1555": "[3498.0757 9879.5977 -8486.5049]", + "1556": "[2970.0723 9879.8193 -8486.5156]", + "1557": "[2443.032 9880.5762 -8486.417]", + "1558": "[1916.3325 9879.8477 -8486.4463]", + "1559": "[1395.5818 9879.166 -8486.4541]", + "1560": "[872.7241 9879.6338 -8486.4492]", + "1561": "[352.0775 9880.1416 -8486.4297]", + "1562": "[-167.7332 9879.7988 -8486.3486]", + "1563": "[-686.4269 9880.4795 -8486.4297]", + "1564": "[-1204.2361 9879.541 -8486.4248]", + "1565": "[-1721.1982 9880.3154 -8486.4502]", + "1566": "[-2237.3352 9879.9785 -8486.5576]", + "1567": "[-2752.6372 9880.1689 -8486.4238]", + "1568": "[-3267.1182 9879.4834 -8486.3662]", + "1569": "[-3780.7666 9880.4453 -8486.3262]", + "1570": "[-4293.5615 9879.8809 -8486.542]", + "1571": "[-4819.749 9880.2949 -8486.417]", + "1572": "[-5336.4561 9879.9121 -8486.3545]", + "1573": "[-5849.7578 9880.3828 -8486.4297]", + "1574": "[-6362.2539 9880.0898 -8486.4209]", + "1575": "[-6887.0815 9880.2158 -8486.4521]", + "1576": "[-7411.1123 9879.9502 -8486.5273]", + "1577": "[-7934.356 9880.3545 -8486.6445]", + "1578": "[-8456.7617 9879.7539 -8486.6846]", + "1579": "[-8978.3311 9879.1465 -8486.5586]", + "1580": "[-9497.627 9860.1221 -8486.1436]", + "1581": "[-10012.3486 9808.6572 -8486.6748]", + "1582": "[-10516.6016 9707.4229 -8486.3945]", + "1583": "[-11015.6357 9549.9873 -8486.668]", + "1584": "[-11484.8301 9325.376 -8486.7451]", + "1585": "[-11910.8604 9032.042 -8486.7109]", + "1586": "[-12277.21 8670.8623 -8486.6182]", + "1587": "[-12576.1494 8254.8838 -8486.71]", + "1588": "[-12807.9717 7786.0996 -8486.6875]", + "1589": "[-12973.1338 7291.1514 -8486.8096]", + "1590": "[-13078.9844 6781.3384 -8486.5752]", + "1591": "[-13137.0254 6264.8413 -8486.5615]", + "1592": "[-13156.5977 5746.186 -8486.7178]", + "1593": "[-13159.6719 5227.8408 -8486.7041]", + "1594": "[-13158.9678 4708.8696 -8494.5537]", + "1595": "[-13159.334 4195.6792 -8522.3691]", + "1596": "[-13158.9443 3681.657 -8570.3262]", + "1597": "[-13159.0225 3161.2312 -8627.9424]", + "1598": "[-13158.7842 2647.3354 -8688.2988]", + "1599": "[-13159.2148 2127.5203 -8751.1748]", + "1600": "[-13158.623 1618.2732 -8813.3564]", + "1601": "[-13158.5576 1106.865 -8876.2266]", + "1602": "[-13159.7373 594.8076 -8938.9922]", + "1603": "[-13159.3555 83.7128 -9001.7871]", + "1604": "[-13158.4434 -424.9495 -9064.2607]", + "1605": "[-13158.9619 -947.3679 -9128.4043]", + "1606": "[-13159.2793 -1465.3563 -9192.0117]", + "1607": "[-13158.835 -1977.521 -9254.3232]", + "1608": "[-13158.5615 -2501.4053 -9317.1885]", + "1609": "[-13158.8379 -3015.5178 -9376.6523]", + "1610": "[-13158.6875 -3526.4924 -9431.3018]", + "1611": "[-13158.3438 -4051.4058 -9475.0234]", + "1612": "[-13158.9336 -4571.8198 -9494.9639]", + "1613": "[-13158.501 -5097.8984 -9497.3242]", + "1614": "[-13156.2441 -5622.1787 -9497.3682]", + "1615": "[-13140.8809 -6145.0698 -9497.4736]", + "1616": "[-13105.418 -6665.6885 -9497.1074]", + "1617": "[-13050.8574 -7183.2656 -9497.5078]", + "1618": "[-12972.7451 -7696.603 -9497.459]", + "1619": "[-12869.4775 -8204.2285 -9497.4307]", + "1620": "[-12739.874 -8704.4609 -9497.3145]", + "1621": "[-12578.2217 -9200.0527 -9497.4053]", + "1622": "[-12383.6357 -9687.6172 -9497.3018]", + "1623": "[-12153.708 -10157.8975 -9497.418]", + "1624": "[-11888.3223 -10607.292 -9497.3174]", + "1625": "[-11587.541 -11031.8535 -9497.3086]", + "1626": "[-11251.6436 -11427.1143 -9497.4375]", + "1627": "[-10883.2363 -11790.0576 -9497.4795]", + "1628": "[-10485.4678 -12118.1592 -9497.3789]", + "1629": "[-10061.9756 -12409.9092 -9497.3984]", + "1630": "[-9617.2598 -12665.5469 -9497.4307]", + "1631": "[-9139.6689 -12892.5156 -9497.4707]", + "1632": "[-8648.2031 -13084.0566 -9497.3232]", + "1633": "[-8146.0845 -13241.8174 -9497.2725]", + "1634": "[-7636.6099 -13369.1963 -9497.4053]", + "1635": "[-7122.082 -13468.5352 -9497.5146]", + "1636": "[-6604.3994 -13542.7607 -9497.2822]", + "1637": "[-6084.9927 -13593.9902 -9497.3164]", + "1638": "[-5564.9927 -13624.7217 -9497.293]", + "1639": "[-5045.2593 -13637.5957 -9497.2373]", + "1640": "[-4526.2612 -13639.2607 -9497.3984]", + "1641": "[-4008.2109 -13638.3506 -9497.4238]", + "1642": "[-3491.1841 -13638.9443 -9497.3105]", + "1643": "[-2975.4006 -13637.9424 -9497.3486]", + "1644": "[-2460.6658 -13629.9492 -9497.3018]", + "1645": "[-1947.4445 -13604.7295 -9497.5293]", + "1646": "[-1421.4928 -13558.5469 -9497.4453]", + "1647": "[-899.1301 -13490.1924 -9497.6514]", + "1648": "[-381.9022 -13397.2676 -9497.4219]", + "1649": "[128.5427 -13277.7549 -9497.3906]", + "1650": "[629.7839 -13128.7744 -9497.3262]", + "1651": "[1119.1528 -12948.4248 -9497.4775]", + "1652": "[1593.568 -12735.2334 -9497.416]", + "1653": "[2048.9656 -12487.1699 -9497.4385]", + "1654": "[2481.335 -12203.6396 -9497.543]", + "1655": "[2887.2422 -11885.8584 -9497.3584]", + "1656": "[3261.8635 -11534.0176 -9497.543]", + "1657": "[3603.8584 -11152.3398 -9497.5166]", + "1658": "[3919.5095 -10729.7227 -9497.3652]", + "1659": "[4197.1348 -10282.8906 -9497.4297]", + "1660": "[4437.1396 -9816.2979 -9497.2158]", + "1661": "[4641.1763 -9334.1592 -9497.2656]", + "1662": "[4811.3501 -8840.2871 -9497.4033]", + "1663": "[4950.4448 -8337.9629 -9497.3418]", + "1664": "[5060.6631 -7829.6206 -9497.3047]", + "1665": "[5144.7798 -7317.3818 -9497.3965]", + "1666": "[5206.1221 -6802.5034 -9497.4697]", + "1667": "[5245.7261 -6291.3037 -9497.3223]", + "1668": "[5266.7183 -5763.4653 -9497.2939]", + "1669": "[5272.3008 -5236.1938 -9497.3838]", + "1670": "[5271.3423 -4710.2358 -9497.5029]", + "1671": "[5271.4512 -4185.2974 -9497.3701]", + "1672": "[5272.0884 -3661.3369 -9497.4033]", + "1673": "[5267.103 -3132.5642 -9497.3916]", + "1674": "[5248.6675 -2611.4963 -9497.3496]", + "1675": "[5210.3872 -2098.2683 -9497.415]", + "1676": "[5152.1011 -1587.9375 -9497.4199]", + "1677": "[5071.2324 -1081.8347 -9497.3975]", + "1678": "[4961.9604 -564.8321 -9497.3291]", + "1679": "[4823.9399 -56.1703 -9497.0596]", + "1680": "[4655.1797 441.0954 -9497.2402]", + "1681": "[4453.8149 924.5034 -9497.3096]", + "1682": "[4217.5542 1390.1957 -9497.3799]", + "1683": "[3945.8225 1834.2573 -9497.4326]", + "1684": "[3638.4272 2252.4846 -9497.4307]", + "1685": "[3297.0767 2641.395 -9497.5518]", + "1686": "[2923.1338 2996.9868 -9497.3291]", + "1687": "[2521.1501 3318.1191 -9497.4912]", + "1688": "[2094.1143 3602.6362 -9497.416]", + "1689": "[1632.045 3858.7427 -9497.4639]", + "1690": "[1152.6051 4077.4978 -9497.4453]", + "1691": "[660.0092 4261.4204 -9497.3984]", + "1692": "[157.5105 4412.3433 -9497.3662]", + "1693": "[-351.7766 4533.7539 -9497.3057]", + "1694": "[-865.8264 4627.5576 -9497.3301]", + "1695": "[-1382.7129 4696.8823 -9497.3428]", + "1696": "[-1901.0392 4744.4429 -9497.3086]", + "1697": "[-2419.8667 4771.4214 -9497.1309]", + "1698": "[-2938.3452 4781.3984 -9497.4053]", + "1699": "[-3455.7842 4781.8745 -9497.4658]", + "1700": "[-3972.9932 4781.4443 -9504.6934]", + "1701": "[-4493.6992 4782.5747 -9531.25]", + "1702": "[-5004.6641 4781.978 -9578.9893]", + "1703": "[-5526.7144 4781.9517 -9636.7715]", + "1704": "[-6044.4019 4782.3398 -9697.5244]", + "1705": "[-6557.207 4781.4946 -9759.0313]", + "1706": "[-7082.1221 4781.6328 -9821.8633]", + "1707": "[-7600.4448 4781.5078 -9882.2998]", + "1708": "[-8110.6782 4781.791 -9937.5352]", + "1709": "[-8636.083 4781.603 -9983.5811]", + "1710": "[-9149.0947 4782.0176 -10005.0703]", + "1711": "[-9672.9033 4781.9941 -10009.4336]", + "1712": "[-10196.3887 4777.3325 -10009.5771]", + "1713": "[-10716.8799 4747.7959 -10009.1904]", + "1714": "[-11230.3994 4678.0015 -10009.0957]", + "1715": "[-11732.4561 4557.6001 -10009.2324]", + "1716": "[-12213.5527 4378.4917 -10009.584]", + "1717": "[-12673.1406 4126.9312 -10009.3447]", + "1718": "[-13081.6221 3803.825 -10009.4961]", + "1719": "[-13425.8447 3416.7039 -10009.1992]", + "1720": "[-13698.3857 2978.5476 -10009.4072]", + "1721": "[-13901.0537 2505.2896 -10009.3389]", + "1722": "[-14040.6133 2010.8799 -10009.3174]", + "1723": "[-14127.4434 1505.4259 -10009.3418]", + "1724": "[-14170.4609 982.0922 -10009.2959]", + "1725": "[-14182.1494 455.6594 -10009.3115]", + "1726": "[-14182.6094 -71.8238 -10009.1943]", + "1727": "[-14180.9072 -602.3636 -10009.6162]", + "1728": "[-14181.5244 -1114.3761 -10009.6465]", + "1729": "[-14182.6914 -1644.9452 -10009.5098]", + "1730": "[-14181.873 -2174.3916 -10009.4717]", + "1731": "[-14181.2744 -2702.7388 -10009.4131]", + "1732": "[-14181.2344 -3227.9109 -10009.4697]", + "1733": "[-14181.959 -3752.9897 -10009.4316]", + "1734": "[-14181.3945 -4271.856 -10009.3887]", + "1735": "[-14177.9785 -4789.5664 -10008.8311]", + "1736": "[-14129.2334 -5300.3423 -10008.5977]", + "1737": "[-14001.8398 -5801.6489 -10009.2588]", + "1738": "[-13802.6914 -6285.0508 -10009.3115]", + "1739": "[-13542.3359 -6736.9243 -10009.3936]", + "1740": "[-13239.1729 -7159.8838 -10009.1113]", + "1741": "[-12899.5908 -7556.1558 -10009.1201]", + "1742": "[-12542.3799 -7928.6494 -10008.7676]", + "1743": "[-12176.1211 -8294.7646 -10009.0771]", + "1744": "[-11803.5342 -8667.3496 -10009.2227]", + "1745": "[-11434.0059 -9036.6133 -10009.3486]", + "1746": "[-11071.2412 -9400.0283 -10009.5137]", + "1747": "[-10708.708 -9762.0859 -10009.4785]", + "1748": "[-10332.0947 -10138.5879 -10009.4453]", + "1749": "[-9956.6953 -10514.5439 -10009.4209]", + "1750": "[-9581.7588 -10889.3145 -10009.4219]", + "1751": "[-9207.4434 -11263.0225 -10009.374]", + "1752": "[-8835.9756 -11635.2158 -10009.4189]", + "1753": "[-8469.3887 -12001.4512 -10009.4072]", + "1754": "[-8096.5332 -12374.2549 -10009.3223]", + "1755": "[-7728.2056 -12742.7021 -10009.3613]", + "1756": "[-7361.9258 -13108.5674 -10009.4697]", + "1757": "[-6994.6294 -13476.4453 -10009.5693]", + "1758": "[-6625.7036 -13845.1191 -10009.0859]", + "1759": "[-6247.5732 -14202.5986 -10009.3301]", + "1760": "[-5836.3984 -14512.6016 -10009.165]", + "1761": "[-5375.1133 -14757.4023 -10009.4902]", + "1762": "[-4886.0767 -14936.1855 -10009.4658]", + "1763": "[-4380.2285 -15053.0732 -10009.4473]", + "1764": "[-3867.2646 -15122.6836 -10009.3105]", + "1765": "[-3346.0247 -15151.4658 -10009.4512]", + "1766": "[-2833.0898 -15157.2188 -10009.4424]", + "1767": "[-2311.6973 -15156.5029 -10009.4971]", + "1768": "[-1795.4424 -15156.4199 -10009.4795]", + "1769": "[-1279.4337 -15156.4922 -10009.4697]", + "1770": "[-764.9032 -15156.8213 -10009.5039]", + "1771": "[-250.6963 -15156.5049 -10009.5371]", + "1772": "[274.0852 -15156.2441 -10009.4941]", + "1773": "[800.9784 -15157.167 -10009.3252]", + "1774": "[1329.6171 -15156.7188 -10008.9189]", + "1775": "[1856.5983 -15157.0234 -10009.25]", + "1776": "[2382.0527 -15156.7686 -10009.6631]", + "1777": "[2906.5186 -15156.4092 -10009.4629]", + "1778": "[3421.019 -15156.2832 -10009.46]", + "1779": "[3941.9067 -15156.7461 -10009.46]", + "1780": "[4461.8325 -15156.8076 -10009.4541]", + "1781": "[4980.8032 -15156.0742 -10009.4033]", + "1782": "[5498.8276 -15156.626 -10009.4492]", + "1783": "[6015.9009 -15157.2734 -10009.5098]", + "1784": "[6532.0474 -15156.0273 -10009.5205]", + "1785": "[7047.2412 -15156.8008 -10009.501]", + "1786": "[7563.5229 -15154.3662 -10009.4629]", + "1787": "[8079.4224 -15138.5664 -10009.4824]", + "1788": "[8598.3193 -15105.2783 -10009.4258]", + "1789": "[9117.4844 -15050.5195 -10009.3447]", + "1790": "[9627.5762 -14973.3594 -10009.3047]", + "1791": "[10142.5156 -14870.0625 -10009.249]", + "1792": "[10649.4766 -14738.2354 -10009.4326]", + "1793": "[11146.3057 -14576.8682 -10009.291]", + "1794": "[11629.8965 -14383.4453 -10009.2402]", + "1795": "[12096.5283 -14155.5469 -10009.4287]", + "1796": "[12543.0254 -13893.4053 -10009.4424]", + "1797": "[12964.6924 -13595.7686 -10009.4258]", + "1798": "[13357.7441 -13263.7607 -10009.2773]", + "1799": "[13718.9014 -12899.4824 -10009.4775]", + "1800": "[14057.4766 -12491.292 -10009.2744]", + "1801": "[14357.7578 -12056.0771 -10009.3145]", + "1802": "[14614.0176 -11609.0137 -10009.3809]", + "1803": "[14837.9277 -11138.8486 -10009.2344]", + "1804": "[15026.0186 -10654.6152 -10009.2021]", + "1805": "[15182.2324 -10160.4688 -10009.2764]", + "1806": "[15308.6094 -9659.084 -10009.4404]", + "1807": "[15407.6436 -9152.7656 -10009.3701]", + "1808": "[15482.3379 -8643.4287 -10009.2813]", + "1809": "[15534.7988 -8132.4575 -10009.3125]", + "1810": "[15566.8691 -7620.876 -10009.3604]", + "1811": "[15581.3027 -7090.7866 -10009.3174]", + "1812": "[15583.208 -6565.2236 -10009.2617]", + "1813": "[15582.5938 -6044.9917 -10009.1533]", + "1814": "[15583.1826 -5524.7539 -10008.999]", + "1815": "[15583.5225 -5007.7827 -10009.501]", + "1816": "[15582.9141 -4489.334 -10009.543]", + "1817": "[15582.1592 -3954.5566 -10009.4395]", + "1818": "[15582.8154 -3428.408 -10009.4648]", + "1819": "[15583.7695 -2912.0769 -10009.4482]", + "1820": "[15583.8496 -2379.5232 -10009.4453]", + "1821": "[15582.915 -1859.1539 -10009.377]", + "1822": "[15582.4375 -1346.2402 -10009.3711]", + "1823": "[15582.6943 -813.3914 -10009.5039]", + "1824": "[15583.4707 -300.7653 -10009.498]", + "1825": "[15583.5449 212.3167 -10009.4658]", + "1826": "[15582.793 753.9894 -10009.4854]", + "1827": "[15582.5547 1294.0641 -10009.46]", + "1828": "[15582.8711 1832.564 -10009.4609]", + "1829": "[15583.3857 2369.4944 -10009.4824]", + "1830": "[15583.4629 2899.426 -10009.4424]", + "1831": "[15582.8779 3435.4851 -10009.3535]", + "1832": "[15582.2324 3964.4832 -10009.5684]", + "1833": "[15582.5654 4477.9434 -10009.54]", + "1834": "[15583.2549 4992.6001 -10009.4775]", + "1835": "[15583.6523 5510.5806 -10009.4668]", + "1836": "[15583.3418 6023.7637 -10009.4561]", + "1837": "[15582.3457 6543.9629 -10009.4678]", + "1838": "[15582.7012 7066.0479 -10009.5303]", + "1839": "[15580.0146 7587.0767 -10009.3496]", + "1840": "[15562.9463 8106.6523 -10009.3213]", + "1841": "[15527.0947 8624.0254 -10008.9482]", + "1842": "[15470.6436 9137.6855 -10009.6094]", + "1843": "[15392.3115 9647.0869 -10009.3682]", + "1844": "[15288.543 10150.6113 -10009.2676]", + "1845": "[15158.5938 10646.7471 -10009.3896]", + "1846": "[14993.4502 11150.0967 -10009.2393]", + "1847": "[14794.6943 11639.543 -10009.0811]", + "1848": "[14561.5283 12111.7773 -10009.0693]", + "1849": "[14292.1953 12562.4756 -10009.3779]", + "1850": "[13986.5029 12987.2871 -10009.4824]", + "1851": "[13645.877 13382.5254 -10009.4668]", + "1852": "[13272.5557 13744.7705 -10009.3418]", + "1853": "[12869.6592 14071.3682 -10009.4033]", + "1854": "[12441.2363 14361.0273 -10009.4033]", + "1855": "[11992.0322 14614.499 -10009.4297]", + "1856": "[11525.9365 14832.332 -10009.3936]", + "1857": "[11046.665 15016.082 -10009.2344]", + "1858": "[10557.7637 15168.6787 -10009.3418]", + "1859": "[10044.6816 15296.0752 -10009.2793]", + "1860": "[9526.5254 15395.0781 -10009.252]", + "1861": "[9005.2559 15468.5791 -10009.3418]", + "1862": "[8482.3535 15519.3135 -10009.3408]", + "1863": "[7965.0166 15549.3564 -10009.2393]", + "1864": "[7442.1191 15561.3125 -10009.1973]", + "1865": "[6916.1587 15562.1953 -10009.0039]", + "1866": "[6401.2749 15561.4043 -10009.2715]", + "1867": "[5877.5825 15562.1416 -10009.335]", + "1868": "[5353.8188 15562.4189 -10009.4619]", + "1869": "[4832.8013 15561.9473 -10009.4541]", + "1870": "[4318.8101 15561.6748 -10009.4287]", + "1871": "[3787.7891 15561.9609 -10009.4688]", + "1872": "[3258.176 15562.3232 -10009.4492]", + "1873": "[2742.6741 15562.3604 -10009.4453]", + "1874": "[2211.3362 15562.3506 -10009.3809]", + "1875": "[1697.5751 15562.1387 -10009.377]", + "1876": "[1171.5321 15561.7148 -10009.4902]", + "1877": "[646.9715 15561.8896 -10009.4932]", + "1878": "[123.8849 15562.4668 -10009.5127]", + "1879": "[-397.7498 15562.1992 -10009.5059]", + "1880": "[-917.9423 15561.6553 -10009.4863]", + "1881": "[-1436.7009 15561.5498 -10009.4746]", + "1882": "[-1954.0376 15562.2002 -10009.4912]", + "1883": "[-2469.9646 15562.6611 -10009.3564]", + "1884": "[-2984.4661 15562.4629 -10009.2598]", + "1885": "[-3497.6226 15561.6055 -10009.6367]", + "1886": "[-4037.7825 15561.4414 -10009.4746]", + "1887": "[-4576.4116 15562.0205 -10009.458]", + "1888": "[-5113.3984 15562.4404 -10009.4873]", + "1889": "[-5648.1089 15562.4893 -10009.4697]", + "1890": "[-6176.2451 15562.1064 -10009.4492]", + "1891": "[-6689.3315 15561.7637 -10009.1777]", + "1892": "[-7206.4048 15561.791 -10009.3936]", + "1893": "[-7719.2305 15561.6416 -10009.4727]", + "1894": "[-8239.1064 15557.5322 -10009.377]", + "1895": "[-8757.583 15538.8477 -10009.2598]", + "1896": "[-9276.5771 15500.4629 -10009.5059]", + "1897": "[-9799.5156 15441.0811 -10009.6816]", + "1898": "[-10317.7939 15357.4229 -10009.4004]", + "1899": "[-10829.8594 15247.5488 -10009.4561]", + "1900": "[-11334.0059 15110.6191 -10009.0391]", + "1901": "[-11826.6592 14942.6338 -10009.2266]", + "1902": "[-12305.3467 14742.6553 -10009.5449]", + "1903": "[-12766.4033 14508.5938 -10009.3076]", + "1904": "[-13206.4307 14239.9619 -10009.4775]", + "1905": "[-13621.0664 13936.3193 -10009.4688]", + "1906": "[-14006.7617 13599.0342 -10009.459]", + "1907": "[-14371.8477 13217.7236 -10009.3848]", + "1908": "[-14699.8301 12805.9766 -10009.4229]", + "1909": "[-14990.3965 12368.8232 -10009.3936]", + "1910": "[-15242.8838 11910.167 -10009.4834]", + "1911": "[-15458.9541 11434.6387 -10009.4775]", + "1912": "[-15640.7139 10946.2354 -10009.4102]", + "1913": "[-15790.5664 10448.3213 -10009.373]", + "1914": "[-15910.6201 9943.5088 -10009.4385]", + "1915": "[-16003.959 9434.0938 -10009.4775]", + "1916": "[-16073.7773 8921.9775 -10009.3623]", + "1917": "[-16120.9355 8408.2637 -10009.2363]", + "1918": "[-16148.5244 7894.1304 -10009.4814]", + "1919": "[-16158.9414 7380.5542 -10009.5488]", + "1920": "[-16159.8848 6868.0635 -10009.3906]", + "1921": "[-16159.5898 6355.9614 -10015.5381]", + "1922": "[-16160.3799 5840.8901 -10039.9854]", + "1923": "[-16160.1104 5319.9468 -10087.293]", + "1924": "[-16159.6709 4805.6016 -10143.8594]", + "1925": "[-16160.3242 4296.8721 -10203.3564]", + "1926": "[-16159.584 3787.47 -10264.502]", + "1927": "[-16159.5986 3272.8352 -10326.1963]", + "1928": "[-16159.9004 2751.906 -10387.1025]", + "1929": "[-16159.3877 2237.4314 -10443.4824]", + "1930": "[-16159.9082 1711.3013 -10491.625]", + "1931": "[-16159.9473 1195.7529 -10515.5645]", + "1932": "[-16159.9961 676.2723 -10521.71]", + "1933": "[-16160.1016 156.9258 -10521.4707]", + "1934": "[-16160.5645 -361.4345 -10521.416]", + "1935": "[-16160.1914 -878.8145 -10521.502]", + "1936": "[-16159.668 -1395.2433 -10521.4805]", + "1937": "[-16159.6963 -1910.7208 -10521.4678]", + "1938": "[-16159.9434 -2425.2363 -10521.4629]", + "1939": "[-16160.4873 -2938.7959 -10521.54]", + "1940": "[-16160.3545 -3458.2219 -10521.4355]", + "1941": "[-16159.2324 -3984.4888 -10521.4102]", + "1942": "[-16160.2861 -4509.7354 -10521.3848]", + "1943": "[-16161.041 -5033.9229 -10521.4414]", + "1944": "[-16159.1846 -5557.0781 -10521.4609]", + "1945": "[-16159.7061 -6079.2056 -10521.4648]", + "1946": "[-16160.6797 -6602.8042 -10521.4482]", + "1947": "[-16159.4746 -7114.9478 -10521.3857]", + "1948": "[-16159.6465 -7642.6821 -10521.5156]", + "1949": "[-16157.2793 -8168.7886 -10521.2432]", + "1950": "[-16140.7998 -8693.5518 -10521.2783]", + "1951": "[-16105.9785 -9216.3428 -10521.4277]", + "1952": "[-16049.4678 -9736.1475 -10521.3457]", + "1953": "[-15970.9775 -10251.9189 -10521.3906]", + "1954": "[-15866.4258 -10761.832 -10521.4531]", + "1955": "[-15734.8809 -11263.6729 -10521.3486]", + "1956": "[-15574.0068 -11755.5645 -10521.5029]", + "1957": "[-15380.7168 -12234.1533 -10521.4268]", + "1958": "[-15155.0703 -12696.9014 -10521.3877]", + "1959": "[-14894.2881 -13139.0879 -10521.499]", + "1960": "[-14589.7363 -13570.2275 -10521.4707]", + "1961": "[-14248.7656 -13971.0811 -10521.4102]", + "1962": "[-13874.5205 -14338.8066 -10521.4639]", + "1963": "[-13469.9502 -14670.459 -10521.4746]", + "1964": "[-13039.3379 -14965.0684 -10521.3311]", + "1965": "[-12586.8428 -15222.0342 -10521.4824]", + "1966": "[-12117.1396 -15443.1299 -10521.4043]", + "1967": "[-11633.9834 -15629.7881 -10521.4639]", + "1968": "[-11140.5527 -15783.8389 -10521.5654]", + "1969": "[-10640.2334 -15909.4639 -10521.3594]", + "1970": "[-10134.7139 -16006.9365 -10521.4971]", + "1971": "[-9626.1963 -16080.7285 -10521.374]", + "1972": "[-9115.9385 -16132.3799 -10521.458]", + "1973": "[-8595.3584 -16164.2393 -10521.2949]", + "1974": "[-8076.5459 -16178.3701 -10521.3291]", + "1975": "[-7560.5049 -16180.1221 -10521.4668]", + "1976": "[-7043.083 -16179.6533 -10521.3408]", + "1977": "[-6505.8057 -16179.9873 -10521.4063]", + "1978": "[-5993.6963 -16179.9902 -10521.5371]", + "1979": "[-5467.6558 -16180.0508 -10521.4912]", + "1980": "[-4934.6045 -16180.1465 -10521.3398]", + "1981": "[-4401.0112 -16180.1729 -10521.5439]", + "1982": "[-3874.158 -16179.9512 -10521.4482]", + "1983": "[-3342.0144 -16179.8154 -10521.4902]", + "1984": "[-2811.5989 -16179.8457 -10521.333]", + "1985": "[-2282.821 -16180.1045 -10521.4023]", + "1986": "[-1755.7665 -16180.3506 -10521.4102]", + "1987": "[-1230.2859 -16180.3506 -10521.5]", + "1988": "[-706.4827 -16180.1982 -10521.4814]", + "1989": "[-185.508 -16180.1631 -10521.5137]", + "1990": "[344.4918 -16180.1904 -10521.4971]", + "1991": "[870.4059 -16180.0967 -10521.4756]", + "1992": "[1385.7727 -16180.2803 -10521.4531]", + "1993": "[1908.7559 -16180.4072 -10521.3809]", + "1994": "[2424.0798 -16179.5098 -10521.377]", + "1995": "[2952.6609 -16179.6602 -10521.3711]", + "1996": "[3470.0044 -16180.749 -10521.4561]", + "1997": "[3994.998 -16180.0596 -10521.4717]", + "1998": "[4519.1528 -16179.7852 -10521.4609]", + "1999": "[5042.4531 -16179.7598 -10521.4121]", + "2000": "[5564.9077 -16180.2734 -10521.3994]", + "2001": "[6086.5024 -16180.2568 -10521.5742]", + "2002": "[6606.6392 -16171.4902 -10521.5967]", + "2003": "[7122.8647 -16133.6738 -10521.6084]", + "2004": "[7630.498 -16052.2559 -10521.5361]", + "2005": "[8132.1631 -15917.9814 -10521.1973]", + "2006": "[8606.1533 -15724.2529 -10521.2354]", + "2007": "[9054.0068 -15456.5625 -10521.3086]", + "2008": "[9447.6572 -15119.0547 -10521.4307]", + "2009": "[9774.9482 -14720.2129 -10521.208]", + "2010": "[10030.7148 -14274.2305 -10521.4229]", + "2011": "[10218.4619 -13796.9443 -10521.4248]", + "2012": "[10347.5898 -13288.4717 -10521.4131]", + "2013": "[10424.4102 -12770.5566 -10521.1416]", + "2014": "[10457.292 -12248.9043 -10521.291]", + "2015": "[10464.4424 -11726.8789 -10521.4551]", + "2016": "[10463.1641 -11205.623 -10521.3584]", + "2017": "[10446.8623 -10686.0293 -10521.2695]", + "2018": "[10397.6025 -10170.9111 -10521.1738]", + "2019": "[10303.1367 -9664.873 -10521.5703]", + "2020": "[10155.834 -9174.0537 -10521.2598]", + "2021": "[9942.1787 -8697.4746 -10521.4316]", + "2022": "[9659.5449 -8261.9658 -10521.376]", + "2023": "[9318.959 -7871.1113 -10521.2764]", + "2024": "[8954.7402 -7502.4028 -10521.5049]", + "2025": "[8587.5098 -7137.8462 -10521.4551]", + "2026": "[8223.7725 -6770.9688 -10521.5234]", + "2027": "[7857.4243 -6407.8359 -10521.4766]", + "2028": "[7494.3608 -6042.5562 -10521.4521]", + "2029": "[7130.5396 -5679.1631 -10521.4512]", + "2030": "[6767.0181 -5316.5415 -10521.4336]", + "2031": "[6404.9219 -4953.5684 -10521.4434]", + "2032": "[6032.0078 -4585.4248 -10521.4961]", + "2033": "[5644.583 -4235.29 -10521.3818]", + "2034": "[5234.6807 -3916.22 -10521.4971]", + "2035": "[4798.4033 -3638.9797 -10521.2813]", + "2036": "[4335.5391 -3414.7896 -10521.5684]", + "2037": "[3837.5068 -3253.7671 -10521.1768]", + "2038": "[3323.1592 -3174.6953 -10521.3955]", + "2039": "[2802.8616 -3153.3816 -10521.3516]", + "2040": "[2282.9741 -3156.2197 -10521.4316]", + "2041": "[1763.9423 -3153.8374 -10521.4414]", + "2042": "[1245.7291 -3155.3171 -10521.5059]", + "2043": "[728.3021 -3155.1724 -10521.4727]", + "2044": "[211.6475 -3154.6909 -10521.4629]", + "2045": "[-304.2541 -3154.9851 -10521.457]", + "2046": "[-819.3886 -3154.8445 -10521.3525]", + "2047": "[-1332.8981 -3137.3931 -10521.2764]", + "2048": "[-1853.688 -3088.9565 -10521.0898]", + "2049": "[-2364.6958 -2992.3169 -10521.4111]", + "2050": "[-2860.4385 -2843.5486 -10521.3838]", + "2051": "[-3329.8701 -2632.0327 -10521.4043]", + "2052": "[-3768.2405 -2346.835 -10521.1807]", + "2053": "[-4160.8633 -2004.2307 -10520.877]", + "2054": "[-4530.1436 -1639.6887 -10520.6641]", + "2055": "[-4895.1768 -1274.0845 -10520.4131]", + "2056": "[-5259.3726 -909.4534 -10520.4238]", + "2057": "[-5623.6611 -546.0554 -10520.4492]", + "2058": "[-5986.4302 -182.2427 -10520.3115]", + "2059": "[-6356.2314 186.2866 -10520.4287]", + "2060": "[-6721.5752 553.153 -10520.3506]", + "2061": "[-7087.8052 917.9826 -10520.3652]", + "2062": "[-7452.2407 1283.5192 -10520.3105]", + "2063": "[-7817.0747 1647.5535 -10520.4688]", + "2064": "[-8180.3608 2012.0377 -10520.5449]", + "2065": "[-8544.3369 2374.7048 -10520.502]", + "2066": "[-8908.668 2739.8218 -10520.3818]", + "2067": "[-9278.3213 3108.9607 -10520.5859]", + "2068": "[-9646.8584 3478.0645 -10520.8936]", + "2069": "[-10006.2061 3854.229 -10520.7949]", + "2070": "[-10342.7764 4247.4556 -10521.1084]", + "2071": "[-10641.5146 4666.2773 -10521.4658]", + "2072": "[-10900.8672 5121.1504 -10520.998]", + "2073": "[-11098.957 5602.3057 -10521.4541]", + "2074": "[-11223.1006 6104.4185 -10521.1064]", + "2075": "[-11265.334 6617.2637 -10521.1504]", + "2076": "[-11248.2529 7130.54 -10521.2031]", + "2077": "[-11179.4561 7647.4082 -10521.4121]", + "2078": "[-11065.0186 8152.4917 -10521.1367]", + "2079": "[-10891.9746 8636.7539 -10521.4463]", + "2080": "[-10646.8545 9098.1563 -10521.1855]", + "2081": "[-10332.8008 9511.5586 -10521.4395]", + "2082": "[-9961.6592 9854.0986 -10521.373]", + "2083": "[-9531.2861 10134.877 -10521.4658]", + "2084": "[-9064.5762 10345.502 -10521.251]", + "2085": "[-8564.8398 10494.7822 -10521.5605]", + "2086": "[-8053.0757 10588.8672 -10521.375]", + "2087": "[-7536.4131 10636.2666 -10521.2354]", + "2088": "[-7018.853 10649.7881 -10521.3398]", + "2089": "[-6502.5913 10652.0947 -10521.3662]", + "2090": "[-5987.6816 10651.7422 -10521.1787]", + "2091": "[-5473.7891 10651.501 -10521.4717]", + "2092": "[-4960.7256 10651.8574 -10521.4355]", + "2093": "[-4438.0771 10651.0137 -10521.5537]", + "2094": "[-3916.4709 10651.3691 -10521.4404]", + "2095": "[-3400.8247 10650.9053 -10521.374]", + "2096": "[-2887.2959 10651.1152 -10521.5]", + "2097": "[-2360.7095 10650.7129 -10521.3623]", + "2098": "[-1841.7316 10651.4082 -10521.4619]", + "2099": "[-1315.1559 10651.2988 -10521.4658]", + "2100": "[-791.4565 10651.1035 -10521.4717]", + "2101": "[-268.3696 10650.6758 -10521.4609]", + "2102": "[253.7243 10650.9912 -10521.4297]", + "2103": "[774.8307 10651.5117 -10521.46]", + "2104": "[1294.942 10651 -10521.5088]", + "2105": "[1814.0677 10650.3203 -10521.5029]", + "2106": "[2332.2163 10651.2109 -10521.501]", + "2107": "[2849.3896 10651.4082 -10521.4951]", + "2108": "[3365.595 10650.5898 -10521.4648]", + "2109": "[3880.8372 10650.293 -10521.457]", + "2110": "[4395.1206 10650.7529 -10521.3457]", + "2111": "[4908.4834 10651.1299 -10521.4541]", + "2112": "[5420.8301 10650.6445 -10521.4102]", + "2113": "[5949.3892 10650.8379 -10521.124]", + "2114": "[6476.5117 10645.4082 -10521.1094]", + "2115": "[7001.9604 10623.6973 -10521.416]", + "2116": "[7524.0464 10582.0469 -10521.5176]", + "2117": "[8049.1523 10518.6494 -10521.1572]", + "2118": "[8568.1221 10430.583 -10521.1982]", + "2119": "[9080.1045 10316.2314 -10521.6641]", + "2120": "[9583.3301 10173.3525 -10521.5322]", + "2121": "[10075.1689 9999.6455 -10521.5293]", + "2122": "[10552.5732 9793.3105 -10521.3936]", + "2123": "[11011.6602 9552.3604 -10521.3955]", + "2124": "[11448.4971 9276.1563 -10521.2363]", + "2125": "[11859.5381 8965.5703 -10521.376]", + "2126": "[12240.2002 8620.8271 -10521.3291]", + "2127": "[12600.5508 8230.9541 -10521.2305]", + "2128": "[12923.5371 7811.6641 -10521.3408]", + "2129": "[13207.8066 7367.1655 -10521.4395]", + "2130": "[13453.7568 6901.9961 -10521.3418]", + "2131": "[13663.7217 6420.9722 -10521.3701]", + "2132": "[13839.2002 5927.7427 -10521.2314]", + "2133": "[13982.5215 5425.499 -10521.3477]", + "2134": "[14097.3496 4917.1958 -10521.1992]", + "2135": "[14185.2744 4404.7256 -10521.3945]", + "2136": "[14249.4424 3889.8479 -10521.3887]", + "2137": "[14292.1064 3373.7966 -10521.3926]", + "2138": "[14315.5225 2857.6738 -10521.4609]", + "2139": "[14321.9336 2341.45 -10531.8525]", + "2140": "[14321.9834 1822.7731 -10561.458]", + "2141": "[14321.6289 1299.2402 -10613.041]", + "2142": "[14321.9795 785.9275 -10670.8975]", + "2143": "[14322.2227 266.6541 -10732.2822]", + "2144": "[14321.6553 -253.1082 -10795.5195]", + "2145": "[14322.0283 -763.666 -10857.9785]", + "2146": "[14321.7227 -1290.3038 -10922.6045]", + "2147": "[14321.6475 -1818.0719 -10987.3721]", + "2148": "[14322.4043 -2336.4443 -11051.041]", + "2149": "[14322.0342 -2862.6631 -11115.6455]", + "2150": "[14321.6992 -3375.238 -11178.582]", + "2151": "[14321.7637 -3897.0229 -11242.6152]", + "2152": "[14322.002 -4416.3584 -11305.6855]", + "2153": "[14322.6523 -4945.2427 -11368.5098]", + "2154": "[14322.123 -5462.7432 -11427.583]", + "2155": "[14321.9443 -5990.3726 -11481.5957]", + "2156": "[14322.6553 -6521.4736 -11518.207]", + "2157": "[14317.8799 -7034.2881 -11532.2148]", + "2158": "[14297.3223 -7558.1274 -11532.0088]", + "2159": "[14257.2988 -8077.2422 -11532.3857]", + "2160": "[14196.6738 -8592.9346 -11532.4863]", + "2161": "[14112.7178 -9104.0508 -11532.3867]", + "2162": "[14003.1074 -9608.959 -11532.376]", + "2163": "[13866.9365 -10105.9102 -11532.2451]", + "2164": "[13700.2246 -10591.9082 -11532.334]", + "2165": "[13502.3467 -11064.5176 -11532.2969]", + "2166": "[13262.3096 -11536.7305 -11532.3506]", + "2167": "[12985.4131 -11986.374 -11532.3535]", + "2168": "[12672.1738 -12409.3604 -11532.2383]", + "2169": "[12323.7793 -12801.6084 -11532.21]", + "2170": "[11942.626 -13159.6924 -11532.3418]", + "2171": "[11532.501 -13481.7637 -11532.4834]", + "2172": "[11097.4971 -13766.6367 -11532.3076]", + "2173": "[10641.8252 -14014.1768 -11532.4258]", + "2174": "[10170.1035 -14226.3936 -11532.2988]", + "2175": "[9685.8662 -14404.6729 -11532.4336]", + "2176": "[9192.4033 -14551.5078 -11532.3408]", + "2177": "[8692.5732 -14670.0615 -11532.3154]", + "2178": "[8188.2866 -14762.0586 -11532.4463]", + "2179": "[7663.1699 -14832.2969 -11532.3662]", + "2180": "[7136.6323 -14880.0703 -11532.2324]", + "2181": "[6609.6987 -14906.8711 -11532.2988]", + "2182": "[6083.1851 -14915.6729 -11532.4395]", + "2183": "[5557.8545 -14915.8311 -11533.1279]", + "2184": "[5031.2251 -14914.9756 -11552.1826]", + "2185": "[4519.6855 -14916.3418 -11592.4453]", + "2186": "[4000.9604 -14916.0225 -11646.6875]", + "2187": "[3491.5452 -14915.6318 -11705.1211]", + "2188": "[2977.8972 -14915.9834 -11766.4072]", + "2189": "[2461.5313 -14915.7949 -11829.3027]", + "2190": "[1934.5029 -14915.667 -11894.1514]", + "2191": "[1416.7836 -14916.249 -11957.6309]", + "2192": "[898.1903 -14916.2383 -12021.3809]", + "2193": "[370.417 -14915.5137 -12086.1416]", + "2194": "[-141.4404 -14915.6455 -12148.9707]", + "2195": "[-657.8857 -14916.0088 -12212.374]", + "2196": "[-1176.6321 -14916.0752 -12275.9756]", + "2197": "[-1701.4332 -14915.6963 -12340.5098]", + "2198": "[-2214.9006 -14915.834 -12403.543]", + "2199": "[-2732.7378 -14916.123 -12467.0254]", + "2200": "[-3241.1042 -14916.0146 -12529.4277]", + "2201": "[-3764.5461 -14915.623 -12593.8789]", + "2202": "[-4289.5869 -14916.4443 -12657.9648]", + "2203": "[-4814.5791 -14916.4453 -12721.2041]", + "2204": "[-5336.9883 -14916.209 -12782.3818]", + "2205": "[-5862.5308 -14916.6279 -12839.873]", + "2206": "[-6384.9717 -14916.4854 -12887.2197]", + "2207": "[-6909.3657 -14914.9111 -12910.8477]", + "2208": "[-7436.7808 -14904.0605 -12916.209]", + "2209": "[-7962.7227 -14873.5381 -12916.2451]", + "2210": "[-8485.0264 -14821.459 -12916.1016]", + "2211": "[-9003.2275 -14748.8818 -12916.2773]", + "2212": "[-9514.7363 -14650.0068 -12916.1006]", + "2213": "[-10018.8262 -14525.6104 -12916.3359]", + "2214": "[-10513.3086 -14372.0244 -12916.4102]", + "2215": "[-10995.168 -14186.5586 -12916.4473]", + "2216": "[-11461.5088 -13969.1436 -12916.4404]", + "2217": "[-11908.1221 -13717.2031 -12916.3652]", + "2218": "[-12346.7637 -13419.7256 -12916.2803]", + "2219": "[-12756.207 -13086.2568 -12916.6045]", + "2220": "[-13131.8027 -12718.0801 -12916.6338]", + "2221": "[-13472.5654 -12319.6357 -12916.4141]", + "2222": "[-13775.7129 -11893.7676 -12916.3408]", + "2223": "[-14041.0195 -11444.9648 -12916.4287]", + "2224": "[-14270.5654 -10978.4209 -12916.373]", + "2225": "[-14464.249 -10497.3174 -12916.3857]", + "2226": "[-14625.4385 -10005.6797 -12916.2578]", + "2227": "[-14756.7314 -9506.4434 -12916.2422]", + "2228": "[-14860.0137 -9001.7842 -12916.4717]", + "2229": "[-14938.7227 -8493.8418 -12916.4717]", + "2230": "[-14994.9697 -7983.9644 -12916.3154]", + "2231": "[-15031.0908 -7454.9712 -12916.1719]", + "2232": "[-15048.8223 -6926.082 -12917.1309]", + "2233": "[-15051.7002 -6413.9302 -12935.3848]", + "2234": "[-15050.4072 -5899.2222 -12974.7344]", + "2235": "[-15051.2568 -5377.4956 -13028.9688]", + "2236": "[-15051.166 -4865.2852 -13087.6895]", + "2237": "[-15050.793 -4343.127 -13150.0801]", + "2238": "[-15051.1963 -3831.1885 -13212.4463]", + "2239": "[-15050.9424 -3312.8728 -13276.1328]", + "2240": "[-15050.958 -2796.4082 -13339.6172]", + "2241": "[-15050.9229 -2279.3979 -13402.9561]", + "2242": "[-15051.1416 -1755.0786 -13467.3477]", + "2243": "[-15050.8584 -1243.5985 -13530.1426]", + "2244": "[-15050.7529 -729.7975 -13593.2324]", + "2245": "[-15050.835 -204.796 -13657.6514]", + "2246": "[-15050.9053 312.557 -13721.1885]", + "2247": "[-15051.1426 834.3349 -13785.2227]", + "2248": "[-15051.002 1352.9409 -13849.001]", + "2249": "[-15050.8936 1862.4641 -13911.4648]", + "2250": "[-15050.8564 2372.8635 -13974.1191]", + "2251": "[-15051.2959 2889.3726 -14037.2549]", + "2252": "[-15051.4043 3412.6453 -14100.3887]", + "2253": "[-15051.2686 3936.7153 -14161.9893]", + "2254": "[-15051.3936 4451.0684 -14218.7773]", + "2255": "[-15051.3145 4974.0728 -14267.5918]", + "2256": "[-15050.8242 5502.4614 -14293.7451]", + "2257": "[-15040.4404 6033.7983 -14300.3525]", + "2258": "[-15011.7881 6552.6484 -14300.6084]", + "2259": "[-14964.3955 7062.8945 -14300.3672]", + "2260": "[-14892.3877 7588.1597 -14300.4668]", + "2261": "[-14795.6143 8107.7612 -14300.4658]", + "2262": "[-14671.3438 8620.0107 -14300.2793]", + "2263": "[-14517.2275 9122.5303 -14300.375]", + "2264": "[-14331.4492 9612.5781 -14300.2666]", + "2265": "[-14111.4863 10086.5059 -14300.2861]", + "2266": "[-13856.6309 10540.542 -14300.2598]", + "2267": "[-13566.3906 10970.7861 -14300.2725]", + "2268": "[-13241.0762 11373.0342 -14300.0439]", + "2269": "[-12883.084 11743.8887 -14300.3154]", + "2270": "[-12494.5527 12080.3047 -14300.4258]", + "2271": "[-12080.0391 12381.6211 -14300.3428]", + "2272": "[-11626.2705 12655.4033 -14300.3643]", + "2273": "[-11153.4961 12891.7012 -14300.4482]", + "2274": "[-10665.6279 13091.4619 -14300.332]", + "2275": "[-10179.4873 13252.8291 -14300.3584]", + "2276": "[-9674.2715 13387.0479 -14300.3477]", + "2277": "[-9163.8828 13493.9033 -14300.3896]", + "2278": "[-8647.9561 13574.8525 -14300.3955]", + "2279": "[-8126.0498 13632.0273 -14300.417]", + "2280": "[-7602.4673 13669.2119 -14300.2861]", + "2281": "[-7079.6367 13686.4814 -14300.3242]", + "2282": "[-6557.2876 13690.3428 -14300.3545]", + "2283": "[-6036.1255 13690.2295 -14300.2871]", + "2284": "[-5516.0728 13689.5508 -14300.3965]", + "2285": "[-4996.8667 13690.2744 -14300.4668]", + "2286": "[-4478.4805 13689.8955 -14300.3887]", + "2287": "[-3960.8943 13689.9277 -14300.4229]", + "2288": "[-3444.1292 13690.0166 -14300.2402]", + "2289": "[-2928.1521 13690.041 -14300.4336]", + "2290": "[-2412.9844 13689.8965 -14300.335]", + "2291": "[-1898.6128 13689.6816 -14300.4385]", + "2292": "[-1385.0635 13690.4316 -14300.2979]", + "2293": "[-872.3052 13689.5342 -14300.4395]", + "2294": "[-346.8901 13690.2383 -14300.5098]", + "2295": "[177.7081 13689.8467 -14300.5039]", + "2296": "[701.4755 13690.1289 -14300.3936]", + "2297": "[1224.3888 13689.7334 -14300.5029]", + "2298": "[1742.4763 13690.0947 -14300.4082]", + "2299": "[2266.5566 13689.8066 -14300.499]", + "2300": "[2781.5112 13690.1475 -14300.4629]", + "2301": "[3299.4363 13689.957 -14300.459]", + "2302": "[3818.6729 13690.6523 -14300.4121]", + "2303": "[4331.02 13688.9785 -14300.4395]", + "2304": "[4843.7686 13689.7998 -14300.4531]", + "2305": "[5373.7881 13690.8457 -14300.4424]", + "2306": "[5891.6084 13689.873 -14300.2148]", + "2307": "[6412.8535 13689.5498 -14300.248]", + "2308": "[6937.3086 13690.54 -14300.3545]", + "2309": "[7462.3389 13683.5449 -14301.04]", + "2310": "[7985.7886 13660.5654 -14301.8799]", + "2311": "[8506.5742 13617.5273 -14303.1006]", + "2312": "[9027.123 13552.6123 -14303.9756]", + "2313": "[9547.751 13461.4521 -14305.1465]", + "2314": "[10061.4443 13343.543 -14305.6719]", + "2315": "[10565.998 13196.2979 -14306.375]", + "2316": "[11058.4414 13016.3994 -14307.1182]", + "2317": "[11535.7305 12802.9023 -14307.6338]", + "2318": "[11993.3643 12552.9541 -14308.0576]", + "2319": "[12428.6514 12267.0547 -14308.542]", + "2320": "[12833.4258 11946.8018 -14308.4414]", + "2321": "[13205.9707 11591.8965 -14308.375]", + "2322": "[13544.2236 11206.4746 -14308.6201]", + "2323": "[13856.2324 10777.9043 -14308.3525]", + "2324": "[14129.0557 10325.2598 -14307.8633]", + "2325": "[14363.4424 9853.2148 -14307.3926]", + "2326": "[14560.5137 9366.1338 -14306.916]", + "2327": "[14723.7549 8868.2588 -14306.0596]", + "2328": "[14855.5908 8362.749 -14305.3301]", + "2329": "[14958.7539 7851.9565 -14304.5029]", + "2330": "[15036.585 7335.4541 -14303.6553]", + "2331": "[15091.0322 6821.3833 -14302.498]", + "2332": "[15124.1416 6307.6177 -14301.5264]", + "2333": "[15138.7217 5795.4023 -14300.3105]", + "2334": "[15141.2881 5266.5752 -14300.0635]", + "2335": "[15140.7861 4739.3838 -14300.2227]", + "2336": "[15141.0732 4213.2612 -14300.3564]", + "2337": "[15141.2314 3698.5623 -14300.3145]", + "2338": "[15140.375 3180.7405 -14300.457]", + "2339": "[15141.0059 2655.9866 -14300.3564]", + "2340": "[15141.3848 2132.3259 -14300.4355]", + "2341": "[15140.541 1602.3959 -14300.4434]", + "2342": "[15140.9531 1087.094 -14300.2744]", + "2343": "[15141.3652 572.8551 -14300.293]", + "2344": "[15140.5264 59.6979 -14300.3184]", + "2345": "[15140.8682 -452.3892 -14300.3252]", + "2346": "[15141.3096 -983.0637 -14300.3027]", + "2347": "[15140.4434 -1512.6371 -14300.3281]", + "2348": "[15140.9834 -2041.0608 -14300.2441]", + "2349": "[15141.0215 -2569.0825 -14306.4326]", + "2350": "[15140.5098 -3099.105 -14333.0596]", + "2351": "[15140.7969 -3612.6733 -14381.2617]", + "2352": "[15141.1699 -4133.2944 -14438.7725]", + "2353": "[15140.8115 -4642.0376 -14498.4268]", + "2354": "[15141.1445 -5159.0151 -14560.5283]", + "2355": "[15141.6533 -5684.6665 -14623.4814]", + "2356": "[15140.9668 -6195.6372 -14682.9131]", + "2357": "[15141.5332 -6714.8413 -14739.5156]", + "2358": "[15141.6123 -7243.7061 -14786.1914]", + "2359": "[15139.9199 -7765.3354 -14808.3467]", + "2360": "[15127.334 -8290.0215 -14813.2861]", + "2361": "[15094.9453 -8812.4424 -14814.582]", + "2362": "[15042.4648 -9331.3838 -14815.5518]", + "2363": "[14967.7256 -9846.4541 -14816.5176]", + "2364": "[14866.6523 -10355.791 -14817.4023]", + "2365": "[14738.9521 -10857.8359 -14818.1084]", + "2366": "[14581.9883 -11349.8799 -14818.749]", + "2367": "[14392.6729 -11828.9395 -14819.1357]", + "2368": "[14169.7695 -12291.3418 -14819.9775]", + "2369": "[13902.6689 -12749.4063 -14819.7012]", + "2370": "[13597.4404 -13180.7178 -14820.3096]", + "2371": "[13255.6611 -13581.3545 -14820.54]", + "2372": "[12879.3232 -13947.3359 -14820.4443]", + "2373": "[12473.0781 -14276.5566 -14820.3896]", + "2374": "[12040.3037 -14567.166 -14820.3271]", + "2375": "[11585.7559 -14819.5244 -14819.9033]", + "2376": "[11114.7021 -15036.1162 -14819.1895]", + "2377": "[10632.9951 -15216.5781 -14818.4795]", + "2378": "[10135.4453 -15366.3809 -14817.834]", + "2379": "[9626.5801 -15487.9844 -14817.1104]", + "2380": "[9113.0908 -15581.3037 -14816.2539]", + "2381": "[8597.542 -15649.8506 -14815.5752]", + "2382": "[8080.9756 -15697.0537 -14814.459]", + "2383": "[7564.5195 -15722.5059 -14813.5439]", + "2384": "[7049.1636 -15731.9199 -14813.0938]", + "2385": "[6535.127 -15732.251 -14812.5049]", + "2386": "[6022.2954 -15731.3506 -14812.4189]", + "2387": "[5491.5293 -15732.0723 -14812.4854]", + "2388": "[4961.8232 -15731.9746 -14812.5234]", + "2389": "[4433.1987 -15731.8369 -14812.5156]", + "2390": "[3905.6394 -15732.2588 -14812.6064]", + "2391": "[3379.1606 -15731.7275 -14812.3877]", + "2392": "[2852.6853 -15732.0166 -14820.6885]", + "2393": "[2324.1365 -15732.041 -14847.1836]", + "2394": "[1810.6873 -15731.9609 -14888.5918]", + "2395": "[1292.0913 -15732.6436 -14924.2852]", + "2396": "[769.7429 -15732.2344 -14938.9209]", + "2397": "[245.5932 -15731.4609 -14940.3545]", + "2398": "[-277.6687 -15732.0166 -14940.4199]", + "2399": "[-799.8812 -15732.0576 -14940.5811]", + "2400": "[-1321.0548 -15731.9189 -14940.4258]", + "2401": "[-1841.1512 -15732.1895 -14940.4824]", + "2402": "[-2360.2175 -15731.8477 -14940.46]", + "2403": "[-2878.2031 -15731.8311 -14940.4814]", + "2404": "[-3395.155 -15732.0771 -14940.417]", + "2405": "[-3911.0522 -15731.9033 -14940.4736]", + "2406": "[-4425.9102 -15732.1406 -14940.4531]", + "2407": "[-4939.7407 -15732.0146 -14940.4932]", + "2408": "[-5452.54 -15731.8223 -14940.3682]", + "2409": "[-5983.2534 -15732.1621 -14940.4697]", + "2410": "[-6512.8672 -15731.7012 -14940.4375]", + "2411": "[-7026.333 -15731.875 -14940.5254]", + "2412": "[-7551.731 -15727.4932 -14941.3154]", + "2413": "[-8075.0415 -15707.8877 -14941.96]", + "2414": "[-8595.1855 -15666.6982 -14942.9561]", + "2415": "[-9111.8223 -15606.3809 -14943.7764]", + "2416": "[-9623.7988 -15521.5313 -14944.7422]", + "2417": "[-10129.418 -15409.96 -14945.4463]", + "2418": "[-10627.0693 -15271.5605 -14946.1914]", + "2419": "[-11113.0537 -15101.6924 -14946.9229]", + "2420": "[-11591.8613 -14897.2939 -14947.457]", + "2421": "[-12057.4238 -14655.0742 -14947.7813]", + "2422": "[-12499.043 -14374.9385 -14948.4297]", + "2423": "[-12913.5693 -14058.8135 -14948.3877]", + "2424": "[-13297.0195 -13708.1523 -14948.4629]", + "2425": "[-13644.9844 -13324.4375 -14948.3291]", + "2426": "[-13956.6494 -12912.665 -14948.2773]", + "2427": "[-14230.9561 -12476.9287 -14947.835]", + "2428": "[-14467.9609 -12021.6641 -14947.3916]", + "2429": "[-14676.6797 -11533.9473 -14947.0264]", + "2430": "[-14849.5791 -11033.9121 -14946.3135]", + "2431": "[-14990.2568 -10525.4443 -14945.5879]", + "2432": "[-15100.6963 -10011.0352 -14944.7139]", + "2433": "[-15183.7666 -9493.2959 -14943.5107]", + "2434": "[-15244.1504 -8974.041 -14942.4258]", + "2435": "[-15281.8369 -8454.7979 -14941.8428]", + "2436": "[-15300.0898 -7935.9775 -14940.7695]", + "2437": "[-15303.9365 -7416.1631 -14957.1074]", + "2438": "[-15304.0293 -6893.5635 -14994.5879]", + "2439": "[-15303.7461 -6383.5435 -15046.9102]", + "2440": "[-15303.9141 -5864.7261 -15106.0781]", + "2441": "[-15303.7881 -5355.8506 -15166.7646]", + "2442": "[-15303.9199 -4837.3525 -15229.915]", + "2443": "[-15303.999 -4309.0908 -15294.7871]", + "2444": "[-15303.916 -3791.8394 -15358.252]", + "2445": "[-15303.9756 -3268.1782 -15422.6338]", + "2446": "[-15303.8643 -2746.6597 -15486.7695]", + "2447": "[-15303.915 -2237.8174 -15549.0078]", + "2448": "[-15303.9121 -1722.3331 -15612.4111]", + "2449": "[-15303.8936 -1199.7959 -15676.6113]", + "2450": "[-15303.9463 -683.2458 -15740.1025]", + "2451": "[-15304.3213 -174.1892 -15802.0986]", + "2452": "[-15304.3135 345.3737 -15865.124]", + "2453": "[-15304.0391 855.4505 -15925.6064]", + "2454": "[-15304.5449 1375.1158 -15983.9131]", + "2455": "[-15304.377 1901.782 -16035.3926]", + "2456": "[-15303.9375 2430.2576 -16065.958]", + "2457": "[-15303.8564 2942.4204 -16076.1162]", + "2458": "[-15304.0469 3455.2891 -16075.6006]", + "2459": "[-15303.5068 3986.7788 -16075.4395]", + "2460": "[-15303.8086 4517.1216 -16075.4434]", + "2461": "[-15303.9102 5046.3877 -16075.3916]", + "2462": "[-15303.8389 5574.5034 -16075.4521]", + "2463": "[-15303.7637 6101.541 -16075.4521]", + "2464": "[-15303.3271 6627.5151 -16075.7324]", + "2465": "[-15293.4531 7151.7041 -16075.9316]", + "2466": "[-15263.7813 7673.3506 -16077.0771]", + "2467": "[-15214.0039 8191.7412 -16078.334]", + "2468": "[-15143.1611 8706.125 -16079.2217]", + "2469": "[-15045.4238 9221.1396 -16080.0918]", + "2470": "[-14919.6289 9732.625 -16080.8838]", + "2471": "[-14765.7266 10226.5332 -16081.6709]", + "2472": "[-14579.6865 10709.667 -16082.4111]", + "2473": "[-14359.9238 11176.5654 -16082.709]", + "2474": "[-14105.0117 11623.3271 -16083.0723]", + "2475": "[-13814.5313 12045.8281 -16083.3125]", + "2476": "[-13476.2393 12454.7422 -16083.4111]", + "2477": "[-13102.5342 12829.1416 -16083.3193]", + "2478": "[-12697.1436 13166.374 -16083.4287]", + "2479": "[-12264.4932 13464.8789 -16083.3369]", + "2480": "[-11809.2217 13724.5283 -16082.8936]", + "2481": "[-11336.2139 13946.7803 -16082.1211]", + "2482": "[-10849.7168 14133.1475 -16081.6807]", + "2483": "[-10353.2412 14286.498 -16080.8584]", + "2484": "[-9849.916 14410.0283 -16080.085]", + "2485": "[-9341.9453 14506.0537 -16079.3984]", + "2486": "[-8831.1348 14577.1631 -16078.4961]", + "2487": "[-8311.6924 14626.8623 -16077.4551]", + "2488": "[-7785.8691 14656.0898 -16076.2568]", + "2489": "[-7261.5503 14666.1357 -16075.8174]", + "2490": "[-6738.5884 14657.3301 -16076.4258]", + "2491": "[-6217.7246 14628.9629 -16077.5264]", + "2492": "[-5699.3921 14581.4287 -16078.2568]", + "2493": "[-5184.8564 14511.0605 -16079.2764]", + "2494": "[-4675.5552 14415.8369 -16079.752]", + "2495": "[-4173.4341 14294.96 -16080.7783]", + "2496": "[-3680.6365 14144.6094 -16081.665]", + "2497": "[-3199.8755 13962.9795 -16082.1514]", + "2498": "[-2734.3569 13748.5879 -16082.7236]", + "2499": "[-2272.2441 13489.3496 -16083.1777]", + "2500": "[-1835.5154 13192.3311 -16083.5371]", + "2501": "[-1427.9159 12859.5635 -16083.6836]", + "2502": "[-1055.0613 12490.6963 -16083.4951]", + "2503": "[-718.0679 12090.96 -16083.4463]", + "2504": "[-418.7833 11664.2041 -16083.2705]", + "2505": "[-158.2435 11214.5225 -16082.8008]", + "2506": "[65.7313 10747.0967 -16082.3721]", + "2507": "[254.2704 10265.8574 -16081.6992]", + "2508": "[409.9124 9774.3955 -16080.9951]", + "2509": "[535.8848 9275.8008 -16080.2734]", + "2510": "[634.5515 8772.3936 -16079.4639]", + "2511": "[708.1848 8265.5313 -16078.5918]", + "2512": "[761.7382 7741.3989 -16077.5488]", + "2513": "[793.1852 7221.8071 -16076.6699]", + "2514": "[806.3182 6702.0171 -16075.5596]", + "2515": "[807.937 6181.0688 -16074.8662]", + "2516": "[806.1935 5656.1914 -16075.5107]", + "2517": "[806.2109 5141.751 -16075.5557]", + "2518": "[807.3918 4619.6196 -16075.2813]", + "2519": "[807.5739 4096.2236 -16075.3779]", + "2520": "[806.8859 3578.0142 -16075.3779]", + "2521": "[806.223 3051.5051 -16075.5908]", + "2522": "[806.361 2526.7139 -16075.3008]", + "2523": "[807.068 2003.5204 -16075.5586]", + "2524": "[807.5873 1482.0033 -16075.4141]", + "2525": "[807.2876 962.0779 -16075.4277]", + "2526": "[806.6566 443.7349 -16075.416]", + "2527": "[806.4392 -72.9979 -16075.4775]", + "2528": "[806.6991 -588.144 -16075.3145]", + "2529": "[807.3911 -1101.748 -16075.415]", + "2530": "[807.4218 -1613.7761 -16075.4561]", + "2531": "[806.6093 -2158.2844 -16075.2725]", + "2532": "[806.4521 -2701.0466 -16075.5801]", + "2533": "[806.7173 -3239.4741 -16075.3379]", + "2534": "[807.4953 -3780.2781 -16075.5439]", + "2535": "[806.9996 -4311.333 -16075.3662]", + "2536": "[806.7388 -4825.8154 -16075.5176]", + "2537": "[806.9148 -5341.6963 -16075.374]", + "2538": "[807.4012 -5864.9307 -16075.5068]", + "2539": "[806.9837 -6386.877 -16075.4297]", + "2540": "[806.7713 -6902.0239 -16075.4893]", + "2541": "[806.916 -7422.687 -16075.5186]", + "2542": "[810.2609 -7952.0635 -16074.916]", + "2543": "[827.3887 -8479.8906 -16074.0332]", + "2544": "[865.0551 -9004.8701 -16073.1836]", + "2545": "[922.6061 -9526.0762 -16072.2686]", + "2546": "[1003.0556 -10042.7412 -16071.4668]", + "2547": "[1109.7115 -10553.2168 -16070.5791]", + "2548": "[1241.8839 -11056.1846 -16069.9043]", + "2549": "[1404.8157 -11548.5029 -16069.2207]", + "2550": "[1598.3257 -12027.9941 -16068.8418]", + "2551": "[1824.3888 -12491.3086 -16068.5029]", + "2552": "[2084.9902 -12934.3027 -16068.1211]", + "2553": "[2378.8748 -13353.9746 -16067.5635]", + "2554": "[2718.0447 -13759.043 -16067.5791]", + "2555": "[3090.3096 -14131.6123 -16067.4209]", + "2556": "[3492.7776 -14468.9873 -16067.6738]", + "2557": "[3921.8298 -14769.4063 -16067.9941]", + "2558": "[4372.7056 -15033.3789 -16068.1748]", + "2559": "[4841.561 -15261.1377 -16068.7803]", + "2560": "[5324.3726 -15454.6514 -16069.2344]", + "2561": "[5817.8081 -15615.7793 -16069.8584]", + "2562": "[6323.439 -15748.1846 -16070.5273]", + "2563": "[6830.7671 -15852.8008 -16071.3623]", + "2564": "[7341.9355 -15931.3867 -16072.1787]", + "2565": "[7855.1074 -15987.9072 -16073.0938]", + "2566": "[8369.1748 -16024.3535 -16073.8926]", + "2567": "[8883.3623 -16041.3389 -16074.8135]", + "2568": "[9396.9219 -16045.4268 -16075.3252]", + "2569": "[9909.5938 -16044.8535 -16075.5186]", + "2570": "[10439.5527 -16044.9277 -16075.4375]", + "2571": "[10968.4424 -16045.1064 -16075.3994]", + "2572": "[11495.6553 -16034.4746 -16074.2275]", + "2573": "[12018.957 -15990.7549 -16071.9102]", + "2574": "[12533.7373 -15901.7861 -16070.5986]", + "2575": "[13030.5615 -15762.1709 -16068.6992]", + "2576": "[13505.167 -15553.001 -16068.5283]", + "2577": "[13951.6826 -15284.1895 -16067.7959]", + "2578": "[14341.1914 -14945.123 -16067.8389]", + "2579": "[14674.9434 -14543.0801 -16068.04]", + "2580": "[14936.2959 -14097.0313 -16068.5908]", + "2581": "[15130.9766 -13616.9355 -16069.5791]", + "2582": "[15266.79 -13115.876 -16070.9463]", + "2583": "[15350.3311 -12598.1572 -16072.3877]", + "2584": "[15389.8711 -12073.7842 -16074.4336]", + "2585": "[15399.8223 -11558.3057 -16075.3877]", + "2586": "[15399.5166 -11037.6514 -16075.4492]", + "2587": "[15398.1865 -10524.1191 -16075.3594]", + "2588": "[15399.4121 -10003.5176 -16075.4678]", + "2589": "[15399.8066 -9484.0742 -16075.6133]", + "2590": "[15398.5342 -8965.7881 -16075.5908]", + "2591": "[15398.7197 -8448.6465 -16075.5176]", + "2592": "[15399.71 -7932.6802 -16075.4092]", + "2593": "[15399.1953 -7417.8501 -16075.5361]", + "2594": "[15398.6514 -6904.1675 -16075.457]", + "2595": "[15399.3213 -6391.5742 -16075.4844]", + "2596": "[15399.2178 -5858.8618 -16075.5078]", + "2597": "[15398.8525 -5327.3555 -16075.4092]", + "2598": "[15399.2109 -4797.0415 -16075.3799]", + "2599": "[15399.3945 -4267.9229 -16075.4912]", + "2600": "[15398.5889 -3739.4114 -16075.4199]", + "2601": "[15399.2109 -3213.5532 -16075.4668]", + "2602": "[15399.3145 -2697.6624 -16075.4033]", + "2603": "[15399.3584 -2184.061 -16075.4941]", + "2604": "[15398.6777 -1669.2129 -16075.5186]", + "2605": "[15398.7324 -1151.5651 -16075.3916]", + "2606": "[15399.0264 -638.576 -16075.502]", + "2607": "[15398.373 -126.4231 -16075.4795]", + "2608": "[15399.0166 394.9201 -16075.5293]", + "2609": "[15398.3877 915.3863 -16075.2881]", + "2610": "[15398.8828 1435.009 -16075.4873]", + "2611": "[15398.4414 1953.7728 -16075.3271]", + "2612": "[15398.3516 2471.7019 -16075.4893]", + "2613": "[15398.8799 2988.771 -16075.3604]", + "2614": "[15399.166 3504.4512 -16075.4482]", + "2615": "[15398.9697 4018.9392 -16075.5518]", + "2616": "[15399.1992 4532.582 -16075.4629]", + "2617": "[15399.0244 5045.332 -16075.5146]", + "2618": "[15398.9482 5567.0537 -16075.4033]", + "2619": "[15399.5596 6087.8623 -16075.1416]", + "2620": "[15399.1328 6607.5713 -16075.167]", + "2621": "[15399.0957 7124.8052 -16075.0664]", + "2622": "[15399.4111 7640.709 -16075.3467]", + "2623": "[15398.8906 8155.6885 -16075.4434]", + "2624": "[15399.458 8669.8252 -16075.5166]", + "2625": "[15398.7188 9183.0684 -16075.4717]", + "2626": "[15398.8535 9701.0977 -16075.4004]", + "2627": "[15398.1064 10214.3193 -16075.4932]", + "2628": "[15398.209 10728.0146 -16075.46]", + "2629": "[15398.332 11245.0381 -16075.4219]", + "2630": "[15399.1885 11761.2725 -16075.46]", + "2631": "[15399.1406 12280.4453 -16075.4912]", + "2632": "[15398.6035 12798.0176 -16075.4805]", + "2633": "[15398.6924 13314.8301 -16075.4893]", + "2634": "[15398.3799 13829.748 -16075.4141]", + "2635": "[15398.5488 14342.9365 -16075.5166]", + "2636": "[15398.9219 14856.5625 -16075.373]", + "2637": "[15398.7373 15369.333 -16075.5244]", + "2638": "[15398.7002 15713.5332 -16075.1514]" + }, + "2": + { + "1": "[15135.1299 15696.4785 -16075.4521]", + "2": "[15135.0996 15594.0605 -16075.4375]", + "3": "[15134.6719 15081.4268 -16075.3809]", + "4": "[15135.3506 14562.2461 -16075.4463]", + "5": "[15134.8359 14044.4648 -16075.4434]", + "6": "[15135.209 13527.8701 -16075.4434]", + "7": "[15135.166 13012.3887 -16075.4629]", + "8": "[15134.9209 12498.002 -16075.4746]", + "9": "[15135.2432 11984.7197 -16075.4385]", + "10": "[15135.1846 11472.5371 -16075.4932]", + "11": "[15135.4229 10952.9453 -16075.5205]", + "12": "[15135.0029 10434.4902 -16075.499]", + "13": "[15134.5098 9917.1592 -16075.3965]", + "14": "[15135.0381 9400.958 -16075.4453]", + "15": "[15134.6367 8885.8779 -16075.4863]", + "16": "[15134.6348 8371.9268 -16075.4395]", + "17": "[15135.667 7859.1724 -16075.3652]", + "18": "[15135.5645 7339.6167 -16075.3271]", + "19": "[15135.7725 6821.7222 -16075.251]", + "20": "[15136.1543 6306.0186 -16075.3057]", + "21": "[15134.9541 5788.8608 -16075.3789]", + "22": "[15135.2246 5273.3779 -16075.2607]", + "23": "[15135.0781 4760.0146 -16075.3564]", + "24": "[15134.4717 4247.8271 -16075.4688]", + "25": "[15135.0264 3728.218 -16075.4258]", + "26": "[15135.2686 3209.7634 -16075.4785]", + "27": "[15134.6299 2692.4565 -16075.3428]", + "28": "[15135.0566 2176.239 -16075.4434]", + "29": "[15134.8877 1661.1644 -16075.4063]", + "30": "[15135.123 1147.2715 -16075.5]", + "31": "[15134.4395 634.4876 -16075.5439]", + "32": "[15135.2646 114.4669 -16075.499]", + "33": "[15135.0967 -404.3576 -16075.5215]", + "34": "[15134.7695 -922.0253 -16075.4082]", + "35": "[15135.2881 -1438.4806 -16075.4893]", + "36": "[15134.4531 -1951.2113 -16075.3789]", + "37": "[15134.6689 -2471.5776 -16075.4063]", + "38": "[15135.2939 -2990.8433 -16075.4365]", + "39": "[15135.1914 -3508.978 -16075.5303]", + "40": "[15135.2666 -4026.0146 -16075.4365]", + "41": "[15134.5469 -4541.9463 -16075.5244]", + "42": "[15135.1299 -5056.792 -16075.4629]", + "43": "[15134.5957 -5570.5586 -16075.5215]", + "44": "[15135.2402 -6083.1885 -16075.5244]", + "45": "[15134.9902 -6603.2573 -16075.5098]", + "46": "[15135.0225 -7122.186 -16075.4824]", + "47": "[15135.1602 -7639.9717 -16075.5547]", + "48": "[15135.1514 -8156.6382 -16075.4092]", + "49": "[15134.5254 -8672.1699 -16075.5107]", + "50": "[15135.0498 -9186.5469 -16075.4844]", + "51": "[15134.5283 -9699.8008 -16075.4922]", + "52": "[15135.5625 -10211.8887 -16075.416]", + "53": "[15135.0225 -10731.2285 -16075.54]", + "54": "[15134.4912 -11249.3877 -16075.4063]", + "55": "[15132.8916 -11766.5322 -16075.8525]", + "56": "[15112.1855 -12278.5996 -16077.1924]", + "57": "[15055.1768 -12793.75 -16078.8867]", + "58": "[14949.5664 -13298.6104 -16080.7842]", + "59": "[14785.7939 -13784.6934 -16082.1436]", + "60": "[14551.4404 -14245.9707 -16083.2656]", + "61": "[14246.4561 -14657.7734 -16083.623]", + "62": "[13886.7129 -14997.8672 -16083.5742]", + "63": "[13462.5459 -15277.04 -16082.9453]", + "64": "[12988.3232 -15489.4922 -16081.7275]", + "65": "[12494.6211 -15634.4424 -16080.2334]", + "66": "[11982.165 -15724.6016 -16078.4424]", + "67": "[11465.9111 -15767.5869 -16076.6064]", + "68": "[10951.4229 -15780.5801 -16075.6855]", + "69": "[10438.9951 -15780.5713 -16075.335]", + "70": "[9919.2529 -15781.2871 -16075.4639]", + "71": "[9400.7539 -15781.0225 -16075.4678]", + "72": "[8883.6543 -15775.4873 -16076.0029]", + "73": "[8368.3438 -15758.1748 -16076.9268]", + "74": "[7855.5933 -15721.1533 -16077.9229]", + "75": "[7346.4321 -15663.2383 -16078.7969]", + "76": "[6834.1167 -15582.0361 -16079.8535]", + "77": "[6327.3721 -15475.4902 -16080.541]", + "78": "[5825.0942 -15340.1309 -16081.3037]", + "79": "[5339.6143 -15175.9434 -16082.0371]", + "80": "[4859.3755 -14976.7422 -16082.6416]", + "81": "[4397.0024 -14742.2373 -16083.1484]", + "82": "[3956.4241 -14472.2441 -16083.4971]", + "83": "[3541.8855 -14166.9453 -16083.8398]", + "84": "[3157.9126 -13827.1543 -16083.9658]", + "85": "[2801.7241 -13449.5654 -16083.9307]", + "86": "[2482.3372 -13043.6211 -16083.6455]", + "87": "[2200.9507 -12613.2949 -16083.418]", + "88": "[1953.4203 -12155.7734 -16082.8271]", + "89": "[1742.3356 -11682.8799 -16082.3066]", + "90": "[1566.946 -11201.4209 -16081.6152]", + "91": "[1421.3712 -10704.4365 -16080.8682]", + "92": "[1305.4266 -10202.1855 -16080.1113]", + "93": "[1215.9142 -9696.7305 -16079.2031]", + "94": "[1149.2407 -9181.7617 -16078.3838]", + "95": "[1104.9945 -8667.2129 -16077.2461]", + "96": "[1080.8459 -8154.9526 -16076.1387]", + "97": "[1072.0139 -7636.4731 -16075.6133]", + "98": "[1071.1643 -7118.2529 -16075.4912]", + "99": "[1071.4144 -6605.7964 -16075.543]", + "100": "[1070.9999 -6085.7681 -16075.5264]", + "101": "[1071.1707 -5566.835 -16075.5049]", + "102": "[1071.2371 -5048.9907 -16075.5322]", + "103": "[1071.4198 -4532.2871 -16075.4434]", + "104": "[1070.6383 -4016.668 -16075.4883]", + "105": "[1070.8149 -3502.167 -16075.5322]", + "106": "[1071.5189 -2988.7813 -16075.4668]", + "107": "[1070.7515 -2476.5117 -16075.4902]", + "108": "[1071.3213 -1956.8198 -16075.4951]", + "109": "[1070.8636 -1438.2463 -16075.54]", + "110": "[1071.3882 -920.8117 -16075.5146]", + "111": "[1071.0138 -404.5113 -16075.4658]", + "112": "[1070.7422 110.6538 -16075.4551]", + "113": "[1071.3099 624.699 -16075.5195]", + "114": "[1071.4124 1137.6248 -16075.5117]", + "115": "[1070.9911 1657.777 -16075.3926]", + "116": "[1070.5707 2176.7402 -16075.4307]", + "117": "[1071.5204 2694.5276 -16075.4385]", + "118": "[1070.6351 3211.1675 -16075.4316]", + "119": "[1070.9934 3730.0842 -16075.4385]", + "120": "[1071.1365 4250.7158 -16075.3896]", + "121": "[1070.6251 4770.2319 -16075.4766]", + "122": "[1071.4209 5288.604 -16075.4619]", + "123": "[1071.256 5805.8784 -16075.4795]", + "124": "[1070.97 6322.0005 -16075.377]", + "125": "[1066.4186 6836.4941 -16075.1416]", + "126": "[1049.1384 7348.499 -16074.0908]", + "127": "[1013.1406 7865.9648 -16073.085]", + "128": "[957.1602 8379.4219 -16072.3018]", + "129": "[879.4567 8887.7871 -16071.541]", + "130": "[777.4229 9389.5723 -16070.8574]", + "131": "[647.0332 9891.0195 -16070.1895]", + "132": "[488.5112 10381.6094 -16069.3955]", + "133": "[300.3449 10858.2109 -16069.0566]", + "134": "[77.1111 11324.1191 -16068.4883]", + "135": "[-179.5315 11769.7881 -16068.2559]", + "136": "[-474.7612 12198.2969 -16067.9121]", + "137": "[-803.6143 12598.4189 -16067.9131]", + "138": "[-1164.3374 12966.7607 -16067.7852]", + "139": "[-1553.6029 13301.4463 -16067.9844]", + "140": "[-1974.7745 13606.0342 -16068.0049]", + "141": "[-2418.0613 13873.873 -16068.5459]", + "142": "[-2879.4763 14105.3867 -16068.8477]", + "143": "[-3354.7903 14303.1436 -16069.4521]", + "144": "[-3840.9312 14468.5381 -16070.0508]", + "145": "[-4339.4673 14606.0977 -16070.6426]", + "146": "[-4845.4966 14716.0303 -16071.2988]", + "147": "[-5355.7407 14800.1133 -16071.957]", + "148": "[-5868.5483 14861.1357 -16073.0098]", + "149": "[-6382.8135 14901.9141 -16073.8369]", + "150": "[-6897.9268 14923.3701 -16074.7813]", + "151": "[-7412.5996 14926.2197 -16074.8936]", + "152": "[-7925.667 14912.0039 -16074.0957]", + "153": "[-8444.2646 14878.5 -16073.2129]", + "154": "[-8958.8955 14824.626 -16072.5293]", + "155": "[-9468.5 14748.8301 -16071.5684]", + "156": "[-9971.6846 14649.6201 -16071.0859]", + "157": "[-10474.6494 14522.7275 -16070.1318]", + "158": "[-10966.9629 14366.9453 -16069.5498]", + "159": "[-11446.1357 14181.0498 -16069.0889]", + "160": "[-11909.9434 13963.832 -16068.5957]", + "161": "[-12358.8252 13710.3975 -16068.2109]", + "162": "[-12784.0498 13423.1523 -16068.0664]", + "163": "[-13188.6836 13097.5693 -16067.791]", + "164": "[-13562.126 12739.9316 -16067.8301]", + "165": "[-13901.6943 12352.9697 -16067.7861]", + "166": "[-14206.1592 11940.4678 -16068.1104]", + "167": "[-14478.9678 11498.8477 -16068.2695]", + "168": "[-14715.5264 11038.8594 -16068.8018]", + "169": "[-14917.6016 10564.3916 -16069.375]", + "170": "[-15087.1309 10078.7334 -16069.9502]", + "171": "[-15228.5635 9578.6113 -16070.4385]", + "172": "[-15341.6514 9072.4521 -16071.2617]", + "173": "[-15429.0156 8561.9287 -16072.0586]", + "174": "[-15492.6094 8048.5083 -16072.7988]", + "175": "[-15535.5107 7533.4258 -16073.7988]", + "176": "[-15558.9443 7017.4824 -16074.6221]", + "177": "[-15567.2383 6501.4951 -16075.0938]", + "178": "[-15567.8115 5986.166 -16075.4854]", + "179": "[-15567.9824 5471.8931 -16075.4766]", + "180": "[-15568.6924 4958.7251 -16075.5068]", + "181": "[-15567.8506 4446.7163 -16075.4639]", + "182": "[-15568.1973 3927.2976 -16075.4688]", + "183": "[-15567.5781 3408.999 -16075.4756]", + "184": "[-15568.1201 2891.8362 -16075.4951]", + "185": "[-15568.2217 2377.2268 -16063.4482]", + "186": "[-15568.8379 1860.3184 -16031.7061]", + "187": "[-15568.1084 1347.6101 -15981.001]", + "188": "[-15567.8867 836.5643 -15923.3311]", + "189": "[-15568.084 323.537 -15862.7598]", + "190": "[-15568.4678 -187.8866 -15800.748]", + "191": "[-15568.6982 -699.2289 -15738.2666]", + "192": "[-15567.5029 -1211.5094 -15675.2021]", + "193": "[-15567.3574 -1722.6373 -15612.376]", + "194": "[-15568.5645 -2232.9128 -15549.7334]", + "195": "[-15568.293 -2745.2542 -15486.8525]", + "196": "[-15567.9023 -3258.1697 -15423.8662]", + "197": "[-15568.1533 -3769.3125 -15361.1162]", + "198": "[-15568.0977 -4280.5698 -15298.3379]", + "199": "[-15568.1475 -4792.2837 -15235.4512]", + "200": "[-15568.0371 -5302.647 -15173.4238]", + "201": "[-15567.3799 -5816.0713 -15112.0332]", + "202": "[-15567.5088 -6329.4746 -15053.1934]", + "203": "[-15567.8848 -6842.1484 -14999.5967]", + "204": "[-15567.9307 -7357.9863 -14959.8994]", + "205": "[-15563.2529 -7873.3433 -14942.2695]", + "206": "[-15547.3203 -8392.8965 -14939.0449]", + "207": "[-15512.3926 -8908.7549 -14938.1816]", + "208": "[-15457.2363 -9420.6582 -14937.3027]", + "209": "[-15380.5488 -9927.3164 -14936.7363]", + "210": "[-15278.8682 -10435.4609 -14935.8389]", + "211": "[-15150.0869 -10935.0146 -14935.1641]", + "212": "[-14993.5088 -11424.1523 -14934.5811]", + "213": "[-14805.7461 -11903.9971 -14934.0146]", + "214": "[-14584.5195 -12369.252 -14933.5391]", + "215": "[-14329.8877 -12814.3291 -14933.2412]", + "216": "[-14037.5039 -13243.0459 -14932.9893]", + "217": "[-13711.165 -13643.5332 -14932.8564]", + "218": "[-13353.0371 -14012.749 -14932.7969]", + "219": "[-12966.2412 -14348.5586 -14932.9863]", + "220": "[-12547.4375 -14654.2461 -14933.0469]", + "221": "[-12106.4082 -14923.3281 -14933.3926]", + "222": "[-11647.501 -15156.6338 -14933.8281]", + "223": "[-11174.3672 -15356.041 -14934.4307]", + "224": "[-10686.4668 -15524.8145 -14935.0107]", + "225": "[-10187.877 -15663.5234 -14935.6885]", + "226": "[-9683.3945 -15774.627 -14936.2441]", + "227": "[-9174.7578 -15860.5908 -14937.0957]", + "228": "[-8663.3008 -15923.0039 -14937.8691]", + "229": "[-8150.1899 -15964.6631 -14938.751]", + "230": "[-7636.3506 -15987.4492 -14939.8115]", + "231": "[-7122.5659 -15995.082 -14940.332]", + "232": "[-6609.5005 -15995.9307 -14940.5059]", + "233": "[-6088.9834 -15996.5293 -14940.3379]", + "234": "[-5569.6104 -15995.4521 -14940.4033]", + "235": "[-5051.4023 -15996.334 -14940.5713]", + "236": "[-4534.2944 -15995.8945 -14940.5059]", + "237": "[-4018.2842 -15996.1211 -14940.4424]", + "238": "[-3503.3684 -15995.9473 -14940.5]", + "239": "[-2989.5681 -15995.8291 -14940.4453]", + "240": "[-2476.9204 -15996.5889 -14940.4395]", + "241": "[-1957.0065 -15995.5566 -14940.3848]", + "242": "[-1438.2572 -15996.0479 -14940.459]", + "243": "[-920.6996 -15995.7617 -14940.5293]", + "244": "[-404.3284 -15996.2178 -14940.5176]", + "245": "[109.5028 -15996.1523 -14940.5254]", + "246": "[629.839 -15996.3857 -14940.2148]", + "247": "[1143.53 -15995.6924 -14929.3877]", + "248": "[1658.0585 -15996.0371 -14899.9785]", + "249": "[2173.0681 -15996.0244 -14859.3994]", + "250": "[2687.6511 -15995.8271 -14826.9385]", + "251": "[3199.7002 -15995.4707 -14813.9014]", + "252": "[3719.9121 -15996.0273 -14812.3594]", + "253": "[4238.5132 -15996.4453 -14812.4697]", + "254": "[4755.9019 -15995.3389 -14812.4824]", + "255": "[5272.0747 -15996.0322 -14812.5322]", + "256": "[5789.8765 -15996.6318 -14812.3516]", + "257": "[6309.9937 -15995.4766 -14812.501]", + "258": "[6828.9619 -15995.9336 -14812.3369]", + "259": "[7345.8047 -15990.3516 -14811.8838]", + "260": "[7860.0386 -15972.291 -14811.0303]", + "261": "[8371.1416 -15935.501 -14810.1768]", + "262": "[8886.7559 -15877.7432 -14809.3545]", + "263": "[9396.8887 -15797.8271 -14808.2686]", + "264": "[9900.1768 -15694.0303 -14807.792]", + "265": "[10402.9521 -15561.2041 -14807.0176]", + "266": "[10894.6563 -15399.4795 -14806.5088]", + "267": "[11372.5918 -15207.2988 -14806.001]", + "268": "[11833.7881 -14983.2373 -14805.4355]", + "269": "[12279.752 -14722.6611 -14805.2383]", + "270": "[12701.3438 -14428.2402 -14804.9434]", + "271": "[13101.1006 -14095.0693 -14804.9766]", + "272": "[13468.9932 -13730.3662 -14804.8643]", + "273": "[13802.499 -13336.9023 -14804.9473]", + "274": "[14100.8975 -12918.5547 -14805.0869]", + "275": "[14363.2158 -12478.7588 -14805.4727]", + "276": "[14593.7441 -12014.085 -14805.7061]", + "277": "[14789.9629 -11535.6279 -14806.3379]", + "278": "[14954.2861 -11046.5977 -14806.9199]", + "279": "[15088.7334 -10549.6016 -14807.8193]", + "280": "[15195.8721 -10046.8359 -14808.3457]", + "281": "[15278.4434 -9539.2822 -14809.1631]", + "282": "[15338.6641 -9023.8916 -14810.0283]", + "283": "[15377.8457 -8506.9893 -14810.8711]", + "284": "[15398.4297 -7989.4536 -14811.7451]", + "285": "[15404.5352 -7471.4331 -14797.541]", + "286": "[15404.8975 -6955.9551 -14762.5029]", + "287": "[15405.1738 -6442.3735 -14710.5576]", + "288": "[15405 -5930.1235 -14652.4355]", + "289": "[15404.8193 -5417.5684 -14591.457]", + "290": "[15404.8574 -4905.6938 -14530.0283]", + "291": "[15404.5029 -4393.6436 -14469.1543]", + "292": "[15404.4209 -3881.0745 -14410.3262]", + "293": "[15404.752 -3367.0239 -14357.1289]", + "294": "[15404.8838 -2852.6514 -14318.7373]", + "295": "[15405.0996 -2336.6768 -14302.4092]", + "296": "[15404.6846 -1820.6188 -14300.4004]", + "297": "[15405.377 -1305.9698 -14300.4873]", + "298": "[15404.8525 -792.4127 -14300.5498]", + "299": "[15404.7051 -279.9584 -14300.458]", + "300": "[15405.0645 239.8911 -14300.5117]", + "301": "[15404.9736 758.6158 -14300.4932]", + "302": "[15404.5342 1276.2104 -14300.5566]", + "303": "[15405.333 1792.6498 -14300.5225]", + "304": "[15405.248 2307.9548 -14300.3311]", + "305": "[15404.8271 2822.105 -14300.5078]", + "306": "[15404.9453 3335.1155 -14300.4316]", + "307": "[15405.207 3855.377 -14300.5313]", + "308": "[15404.9434 4374.4785 -14300.4795]", + "309": "[15405.124 4892.3994 -14300.5088]", + "310": "[15404.9512 5409.2305 -14300.3398]", + "311": "[15398.8301 5929.7212 -14299.792]", + "312": "[15379.2871 6447.3125 -14298.9688]", + "313": "[15340.5352 6961.3525 -14298.0957]", + "314": "[15281.9082 7471.3018 -14297.1553]", + "315": "[15199.4482 7984.4072 -14296.3037]", + "316": "[15093.1865 8490.873 -14295.7373]", + "317": "[14959.5996 8988.5576 -14295.1016]", + "318": "[14797.0146 9474.9668 -14294.4473]", + "319": "[14601.1738 9955.3975 -14293.9053]", + "320": "[14372.7236 10418.4336 -14293.4961]", + "321": "[14110.998 10860.6631 -14293.292]", + "322": "[13811.7227 11283.8418 -14292.9219]", + "323": "[13479.3203 11677.6895 -14292.9141]", + "324": "[13116.1016 12039.9951 -14292.8154]", + "325": "[12717.6318 12373.2139 -14292.9912]", + "326": "[12294.3926 12671.043 -14293.3096]", + "327": "[11849.7646 12932.54 -14293.5615]", + "328": "[11387.8623 13158.7041 -14293.8906]", + "329": "[10912.2949 13350.9775 -14294.4805]", + "330": "[10418.6182 13514.374 -14295.123]", + "331": "[9917.0371 13647.665 -14295.7432]", + "332": "[9409.6387 13753.1924 -14296.5107]", + "333": "[8898.4404 13833.9795 -14297.2949]", + "334": "[8384.7568 13892.1523 -14298.0703]", + "335": "[7869.6235 13929.4678 -14298.9639]", + "336": "[7353.9922 13948.0684 -14299.8975]", + "337": "[6836.2051 13961.3242 -14300.4893]", + "338": "[6317.7305 13993.623 -14300.834]", + "339": "[5805.9746 14064.1904 -14300.6377]", + "340": "[5299.9624 14158.7637 -14300.7607]", + "341": "[4797.3623 14259.5645 -14300.6455]", + "342": "[4288.4683 14362.0029 -14300.5684]", + "343": "[3780.3547 14461.9512 -14300.7139]", + "344": "[3273.5745 14562.1641 -14300.6396]", + "345": "[2765.1807 14640.0566 -14300.585]", + "346": "[2246.9915 14683.918 -14300.7822]", + "347": "[1729.2251 14697.1807 -14300.4912]", + "348": "[1211.9886 14698.1367 -14300.582]", + "349": "[699.8677 14697.7119 -14300.3291]", + "350": "[180.1601 14698.0459 -14300.499]", + "351": "[-338.4329 14697.7686 -14300.4453]", + "352": "[-855.9151 14698.5947 -14300.5674]", + "353": "[-1372.3098 14698.165 -14300.5566]", + "354": "[-1887.6371 14697.9512 -14300.5068]", + "355": "[-2401.887 14698.2266 -14300.4131]", + "356": "[-2915.0552 14697.6738 -14300.4424]", + "357": "[-3427.082 14698.3516 -14300.5537]", + "358": "[-3946.4734 14698.6338 -14300.5303]", + "359": "[-4464.6763 14697.2402 -14300.4023]", + "360": "[-4981.7222 14697.9404 -14300.5059]", + "361": "[-5497.5742 14698.4648 -14300.4688]", + "362": "[-6012.2383 14697.9316 -14300.3955]", + "363": "[-6525.314 14697.4932 -14300.4199]", + "364": "[-7044.9434 14698.1045 -14300.5166]", + "365": "[-7563.1558 14697.4297 -14300.3398]", + "366": "[-8079.499 14692.7168 -14300.4912]", + "367": "[-8594.2061 14677.4678 -14300.4492]", + "368": "[-9106.4727 14643.082 -14300.4072]", + "369": "[-9621.9844 14586.6738 -14300.4512]", + "370": "[-10133.2695 14508.8105 -14300.5234]", + "371": "[-10638.8145 14406.5674 -14300.4902]", + "372": "[-11136.4023 14276.6748 -14300.4316]", + "373": "[-11623.9873 14118.4688 -14300.5986]", + "374": "[-12106.4473 13926.2813 -14300.5977]", + "375": "[-12571.9219 13700.2549 -14300.54]", + "376": "[-13016.5938 13439.6738 -14300.5527]", + "377": "[-13436.6816 13144.9795 -14300.6621]", + "378": "[-13834.5928 12811.333 -14300.7627]", + "379": "[-14199.2578 12444.9932 -14300.624]", + "380": "[-14529.0557 12049.8779 -14300.6416]", + "381": "[-14822.7822 11629.8135 -14300.6094]", + "382": "[-15083.1084 11184.1846 -14300.5518]", + "383": "[-15306.9004 10720.3633 -14300.498]", + "384": "[-15496.8076 10243.4658 -14300.5176]", + "385": "[-15656.9043 9748.4922 -14300.4609]", + "386": "[-15786.707 9246.3545 -14300.5439]", + "387": "[-15888.626 8739.3604 -14300.5225]", + "388": "[-15965.8086 8229.3682 -14300.5869]", + "389": "[-16020.0059 7717.8398 -14300.3311]", + "390": "[-16054.4063 7205.9561 -14300.4199]", + "391": "[-16070.9814 6686.1382 -14300.3721]", + "392": "[-16075.3486 6167.3071 -14300.4023]", + "393": "[-16074.7334 5647.9292 -14297.7686]", + "394": "[-16074.0947 5130.5098 -14278.4775]", + "395": "[-16075.5957 4615.3145 -14237.1289]", + "396": "[-16075.5381 4103.0537 -14182.791]", + "397": "[-16074.8711 3589.5449 -14123.1582]", + "398": "[-16074.8398 3077.929 -14062.0176]", + "399": "[-16074.9961 2565.6931 -13999.5879]", + "400": "[-16074.7842 2053.1018 -13936.7256]", + "401": "[-16074.5674 1542.2904 -13874.0225]", + "402": "[-16074.249 1030.2562 -13811.2676]", + "403": "[-16074.4639 518.8933 -13748.3496]", + "404": "[-16075.168 8.1397 -13685.7363]", + "405": "[-16074.2949 -503.824 -13622.8135]", + "406": "[-16074.6895 -1015.1428 -13560.0244]", + "407": "[-16074.4277 -1526.9818 -13497.1777]", + "408": "[-16074.5176 -2037.8484 -13434.4492]", + "409": "[-16074.8428 -2550.3372 -13371.5205]", + "410": "[-16075.0674 -3062.1985 -13308.6748]", + "411": "[-16074.3623 -3573.0674 -13245.9619]", + "412": "[-16074.7129 -4085.6692 -13183.3291]", + "413": "[-16074.9092 -4597.1392 -13121.4053]", + "414": "[-16074.3955 -5108.2959 -13061.3311]", + "415": "[-16074.5234 -5621.8877 -13004.085]", + "416": "[-16074.6875 -6135.6626 -12954.9688]", + "417": "[-16074.6738 -6651.7993 -12926.6279]", + "418": "[-16074.4775 -7170.8628 -12916.2305]", + "419": "[-16074.0234 -7684.834 -12916.6201]", + "420": "[-16065.5342 -8197.127 -12916.4131]", + "421": "[-16040.1084 -8716.0928 -12916.3906]", + "422": "[-15995.6309 -9232.4219 -12916.2871]", + "423": "[-15930.1758 -9744.6143 -12916.3574]", + "424": "[-15840.6592 -10251.3604 -12916.4072]", + "425": "[-15726.3799 -10751.6104 -12916.5098]", + "426": "[-15581.9453 -11251.085 -12916.5996]", + "427": "[-15406.7695 -11738.8115 -12916.5479]", + "428": "[-15198.9805 -12211.4678 -12916.6514]", + "429": "[-14957.7676 -12665.6025 -12916.6299]", + "430": "[-14680.1982 -13101.0215 -12916.6523]", + "431": "[-14366.4902 -13511.0488 -12916.5967]", + "432": "[-14019.7969 -13890.4951 -12916.6494]", + "433": "[-13636.3838 -14242.1553 -12916.5605]", + "434": "[-13224.9346 -14556.8213 -12916.5088]", + "435": "[-12790.4072 -14834.7646 -12916.668]", + "436": "[-12337.1406 -15076.7695 -12916.501]", + "437": "[-11860.6387 -15285.749 -12916.6348]", + "438": "[-11372.6533 -15460.8867 -12916.5938]", + "439": "[-10876.4209 -15605.1406 -12916.5752]", + "440": "[-10374.2285 -15720.1426 -12916.4561]", + "441": "[-9867.9658 -15809.3994 -12916.417]", + "442": "[-9353.5557 -15875.2354 -12916.4932]", + "443": "[-8838.125 -15920.001 -12916.5254]", + "444": "[-8322.6201 -15944.7734 -12916.5264]", + "445": "[-7807.7271 -15953.5674 -12916.4697]", + "446": "[-7293.9409 -15954.8564 -12916.5332]", + "447": "[-6777.2871 -15955.0645 -12906.5576]", + "448": "[-6262.9336 -15955.6035 -12877.5264]", + "449": "[-5748.6128 -15955.1436 -12828.0908]", + "450": "[-5235.1172 -15954.7646 -12770.6973]", + "451": "[-4724.0034 -15954.9414 -12710.3838]", + "452": "[-4211.5806 -15954.9746 -12648.3701]", + "453": "[-3699.6775 -15953.9609 -12585.8857]", + "454": "[-3188.6401 -15954.6543 -12523.1406]", + "455": "[-2677.5225 -15955.126 -12460.4209]", + "456": "[-2165.9651 -15954.5957 -12397.6152]", + "457": "[-1653.9159 -15954.5811 -12334.7422]", + "458": "[-1142.2128 -15954.5371 -12271.876]", + "459": "[-629.0639 -15954.4463 -12208.8477]", + "460": "[-117.6797 -15954.958 -12146.041]", + "461": "[393.867 -15954.6729 -12083.2314]", + "462": "[905.9209 -15954.3242 -12020.3555]", + "463": "[1417.3564 -15955.3008 -11957.5352]", + "464": "[1928.155 -15954.4307 -11894.9033]", + "465": "[2440.9285 -15955.0762 -11831.8994]", + "466": "[2952.7073 -15954.1885 -11769.668]", + "467": "[3463.3872 -15954.7725 -11708.4424]", + "468": "[3975.167 -15954.4824 -11649.5234]", + "469": "[4486.9531 -15954.6074 -11595.376]", + "470": "[5001.9678 -15955.0234 -11554.1025]", + "471": "[5520.4482 -15954.748 -11535.251]", + "472": "[6033.6157 -15954.6582 -11532.4551]", + "473": "[6553.2598 -15954.5254 -11532.4209]", + "474": "[7071.292 -15954.1318 -11532.3965]", + "475": "[7587.8447 -15944.8477 -11532.3672]", + "476": "[8102.3027 -15920.3037 -11532.3311]", + "477": "[8612.9365 -15876.8242 -11532.3506]", + "478": "[9127.042 -15811.4492 -11532.458]", + "479": "[9636.0488 -15722.0518 -11532.4795]", + "480": "[10137.9834 -15607.3691 -11532.4688]", + "481": "[10630.9639 -15465.1641 -11532.4814]", + "482": "[11120.4102 -15289.7715 -11532.4746]", + "483": "[11595.2295 -15082.6221 -11532.3887]", + "484": "[12051.3525 -14841.292 -11532.5723]", + "485": "[12484.5898 -14565.0176 -11532.7783]", + "486": "[12897.9629 -14249.6309 -11532.6523]", + "487": "[13280.3457 -13900.7842 -11532.6846]", + "488": "[13628.9961 -13521.3252 -11532.6143]", + "489": "[13941.3193 -13114.1504 -11532.5215]", + "490": "[14220.3594 -12680.3496 -11532.6641]", + "491": "[14463.1582 -12225.8008 -11532.6152]", + "492": "[14670.6309 -11756.1729 -11532.5]", + "493": "[14847.8271 -11267.0313 -11532.5117]", + "494": "[14992.8604 -10769.1914 -11532.4746]", + "495": "[15108.5273 -10265.373 -11532.4404]", + "496": "[15199.0986 -9757.9102 -11532.5098]", + "497": "[15265.1016 -9248.0566 -11532.6162]", + "498": "[15309.5488 -8737.1943 -11532.5]", + "499": "[15335.2539 -8217.9883 -11532.4512]", + "500": "[15344.6885 -7699.4766 -11532.4453]", + "501": "[15345.6143 -7182.2881 -11532.3926]", + "502": "[15345.8809 -6662.1587 -11522.6846]", + "503": "[15346.6367 -6148.3916 -11493.8779]", + "504": "[15345.6504 -5635.4585 -11444.7305]", + "505": "[15345.5713 -5123.3545 -11387.5439]", + "506": "[15346.7441 -4610.9102 -11327.3281]", + "507": "[15345.7852 -4098.8428 -11265.3516]", + "508": "[15345.1699 -3588.1116 -11202.876]", + "509": "[15345.9922 -3075.3513 -11139.9111]", + "510": "[15345.6289 -2564.2427 -11077.1514]", + "511": "[15346.1699 -2052.6301 -11014.3359]", + "512": "[15345.04 -1540.8846 -10951.4883]", + "513": "[15346.375 -1028.6575 -10888.6025]", + "514": "[15345.3984 -518.1984 -10825.9619]", + "515": "[15345.7266 -6.1599 -10763.5693]", + "516": "[15345.627 505.1206 -10702.3477]", + "517": "[15345.2656 1017.4252 -10643.0146]", + "518": "[15345.8496 1530.9784 -10588.2461]", + "519": "[15345.9551 2045.7305 -10545.6699]", + "520": "[15345.8555 2561.863 -10524.8193]", + "521": "[15345.2813 3075.2786 -10521.4668]", + "522": "[15342.3633 3595.0676 -10521.5]", + "523": "[15329.0098 4112.9395 -10521.3838]", + "524": "[15295.7979 4628.4038 -10521.4902]", + "525": "[15243.0938 5140.8579 -10521.4473]", + "526": "[15169.0781 5648.9702 -10521.5127]", + "527": "[15069.0215 6159.2754 -10521.335]", + "528": "[14941.8857 6661.2686 -10521.542]", + "529": "[14786.0127 7153.3442 -10521.6689]", + "530": "[14599.5176 7632.7334 -10521.7207]", + "531": "[14380.1748 8095.9341 -10521.5928]", + "532": "[14122.4189 8547.1182 -10521.5381]", + "533": "[13831.2178 8971.4824 -10521.6143]", + "534": "[13506.2178 9367.8232 -10521.6348]", + "535": "[13142.9619 9738.3203 -10521.625]", + "536": "[12750.2051 10073.9121 -10521.6787]", + "537": "[12331.8418 10373.2705 -10521.6572]", + "538": "[11891.8486 10635.9023 -10521.4736]", + "539": "[11426.8926 10866.0313 -10521.5566]", + "540": "[10948.2188 11060.9609 -10521.4609]", + "541": "[10459.5684 11223.3721 -10521.5068]", + "542": "[9959.5869 11356.4326 -10521.4424]", + "543": "[9452.6455 11462.1602 -10521.5898]", + "544": "[8942.4854 11542.4316 -10521.4297]", + "545": "[8430.7344 11599.7139 -10521.4414]", + "546": "[7918.4961 11636.6982 -10521.3818]", + "547": "[7406.4741 11654.2656 -10521.377]", + "548": "[6886.769 11659.9512 -10521.4658]", + "549": "[6368.2832 11658.9238 -10521.4502]", + "550": "[5851.103 11658.9375 -10521.4355]", + "551": "[5335.8579 11660.1094 -10521.5273]", + "552": "[4822.2773 11658.1201 -10521.5361]", + "553": "[4309.9263 11657.8467 -10521.4463]", + "554": "[3790.4023 11659.5059 -10521.459]", + "555": "[3272.0796 11658.0635 -10521.4502]", + "556": "[2754.9087 11658.7549 -10521.4531]", + "557": "[2238.8821 11658.6338 -10521.4531]", + "558": "[1724.9816 11658.3818 -10521.4707]", + "559": "[1204.9137 11658.5762 -10521.5332]", + "560": "[685.9205 11658.6563 -10521.4248]", + "561": "[167.9899 11658.3418 -10521.4189]", + "562": "[-348.848 11659.1729 -10521.46]", + "563": "[-864.6102 11658.5039 -10521.4551]", + "564": "[-1379.2941 11658.9736 -10521.4541]", + "565": "[-1892.8937 11658.582 -10521.4531]", + "566": "[-2405.427 11658.7939 -10521.4668]", + "567": "[-2925.3713 11658.751 -10521.5146]", + "568": "[-3444.1812 11658.6934 -10521.4189]", + "569": "[-3961.8997 11658.9561 -10521.3711]", + "570": "[-4478.4941 11659.0713 -10521.5586]", + "571": "[-4993.9844 11658.915 -10521.4609]", + "572": "[-5508.3257 11658.7139 -10521.374]", + "573": "[-6021.2554 11659.7646 -10521.3408]", + "574": "[-6541.2163 11658.7676 -10521.5811]", + "575": "[-7059.6235 11658.4336 -10521.5068]", + "576": "[-7576.4023 11658.0732 -10521.4082]", + "577": "[-8090.7334 11640.1357 -10521.417]", + "578": "[-8600.6055 11588.8467 -10521.4307]", + "579": "[-9107.667 11492.3311 -10521.3477]", + "580": "[-9604.4561 11338.4824 -10521.5156]", + "581": "[-10071.9639 11120.7432 -10521.5879]", + "582": "[-10503.042 10830.2871 -10521.6719]", + "583": "[-10874.5322 10473.1689 -10521.4199]", + "584": "[-11181.2441 10053.4307 -10521.6289]", + "585": "[-11415.1133 9592.5342 -10521.4531]", + "586": "[-11582.3506 9105.1553 -10521.5566]", + "587": "[-11692.4502 8597.4023 -10521.3682]", + "588": "[-11753.2256 8083.0825 -10521.4629]", + "589": "[-11775.8262 7566.978 -10521.3291]", + "590": "[-11780.3066 7051.6978 -10521.498]", + "591": "[-11779.6475 6537.8086 -10521.4814]", + "592": "[-11768.8857 6017.7891 -10521.1445]", + "593": "[-11709.1465 5507.3281 -10521.1396]", + "594": "[-11569.9561 5010.8228 -10521.6025]", + "595": "[-11361.4824 4536.894 -10521.5596]", + "596": "[-11098.5088 4092.3928 -10521.5488]", + "597": "[-10793.3135 3678.7966 -10521.5371]", + "598": "[-10456.6885 3292.9275 -10521.0547]", + "599": "[-10096.0859 2918.2283 -10520.3057]", + "600": "[-9728.5938 2551.3325 -10520.3047]", + "601": "[-9363.6729 2186.0552 -10520.5098]", + "602": "[-8999.0234 1822.1549 -10520.4785]", + "603": "[-8636.1924 1457.9723 -10520.4619]", + "604": "[-8272.7646 1095.9276 -10520.4189]", + "605": "[-7905.3745 727.3884 -10520.5322]", + "606": "[-7538.1436 360.2902 -10520.4844]", + "607": "[-7171.4009 -5.6853 -10520.541]", + "608": "[-6806.1494 -371.4585 -10520.4404]", + "609": "[-6441.7295 -736.4481 -10520.5508]", + "610": "[-6077.5186 -1100.0186 -10520.4336]", + "611": "[-5714.0669 -1462.7487 -10520.5371]", + "612": "[-5352.0703 -1825.3297 -10520.4873]", + "613": "[-4985.0986 -2193.2017 -10520.9131]", + "614": "[-4616.3687 -2557.1428 -10520.9863]", + "615": "[-4223.1582 -2885.7583 -10521.1357]", + "616": "[-3786.728 -3157.9656 -10521.5879]", + "617": "[-3314.7383 -3363.5542 -10521.5811]", + "618": "[-2822.9019 -3506.2007 -10521.54]", + "619": "[-2312.4644 -3596.8142 -10521.3906]", + "620": "[-1797.9023 -3642.8792 -10521.3223]", + "621": "[-1283.0155 -3657.1011 -10521.3613]", + "622": "[-764.3973 -3658.8748 -10521.4629]", + "623": "[-245.7268 -3658.8677 -10521.458]", + "624": "[271.8557 -3658.7637 -10521.4551]", + "625": "[788.3609 -3658.2813 -10521.4531]", + "626": "[1303.7826 -3658.8354 -10521.4531]", + "627": "[1818.1407 -3658.5042 -10521.4756]", + "628": "[2331.4131 -3659.0222 -10521.3379]", + "629": "[2849.1011 -3685.7764 -10521.2852]", + "630": "[3361.5022 -3773.334 -10521.2373]", + "631": "[3852.3875 -3940.4255 -10521.3301]", + "632": "[4313.9155 -4172.7393 -10521.4844]", + "633": "[4744.4722 -4452.7959 -10521.5859]", + "634": "[5151.9307 -4774.7207 -10521.1963]", + "635": "[5533.3203 -5124.2734 -10521.417]", + "636": "[5901.5938 -5486.1934 -10521.4551]", + "637": "[6265.209 -5851.1807 -10521.4531]", + "638": "[6629.1274 -6214.2886 -10521.4521]", + "639": "[6991.8457 -6577.0273 -10521.4531]", + "640": "[7359.543 -6945.0713 -10521.4053]", + "641": "[7726.7061 -7312.043 -10521.4502]", + "642": "[8093.0576 -7678.1929 -10521.5371]", + "643": "[8450.5322 -8053.5547 -10521.2334]", + "644": "[8766.9307 -8460.2217 -10521.2148]", + "645": "[9016.835 -8913.2764 -10521.4268]", + "646": "[9199.6787 -9393.2002 -10521.6201]", + "647": "[9325.5 -9897.8369 -10521.5439]", + "648": "[9400.1641 -10411.0117 -10521.2363]", + "649": "[9432.6094 -10923.0811 -10521.4287]", + "650": "[9424.7422 -11443.3867 -10521.2939]", + "651": "[9375.8193 -11959.0537 -10521.5918]", + "652": "[9282.9658 -12464.8887 -10521.3809]", + "653": "[9133.2168 -12961.9639 -10521.499]", + "654": "[8921.2246 -13429.8594 -10521.5986]", + "655": "[8637.2637 -13862.4805 -10521.5693]", + "656": "[8284.6104 -14240.2588 -10521.499]", + "657": "[7872.7388 -14550.0225 -10521.417]", + "658": "[7418.6992 -14788.0381 -10521.543]", + "659": "[6929.625 -14961.835 -10521.4395]", + "660": "[6425.1572 -15075.7158 -10521.543]", + "661": "[5914.0371 -15140.6904 -10521.2813]", + "662": "[5401.3101 -15166.4072 -10521.4766]", + "663": "[4881.0454 -15171.9316 -10521.4277]", + "664": "[4362.0806 -15170.8555 -10521.4561]", + "665": "[3844.2698 -15171.1113 -10521.4531]", + "666": "[3327.5918 -15171.9326 -10521.4512]", + "667": "[2807.4324 -15170.9805 -10521.4775]", + "668": "[2295.4309 -15171.4453 -10521.4854]", + "669": "[1775.8087 -15171.6836 -10521.3965]", + "670": "[1257.2615 -15171.1533 -10521.4678]", + "671": "[739.7901 -15171.458 -10521.4746]", + "672": "[223.3935 -15171.1865 -10521.4639]", + "673": "[-291.9331 -15171.2207 -10521.4561]", + "674": "[-806.1935 -15172.0234 -10521.4531]", + "675": "[-1319.3759 -15170.8027 -10521.4912]", + "676": "[-1831.4642 -15171.752 -10521.5078]", + "677": "[-2350.9702 -15170.791 -10521.5068]", + "678": "[-2869.364 -15171.8213 -10521.5078]", + "679": "[-3386.6123 -15170.9385 -10521.4902]", + "680": "[-3902.7297 -15171.6416 -10521.4609]", + "681": "[-4417.7363 -15171.459 -10521.4561]", + "682": "[-4931.6372 -15171.1846 -10521.4531]", + "683": "[-5444.4355 -15171.8545 -10521.4785]", + "684": "[-5964.4985 -15170.9063 -10521.4707]", + "685": "[-6483.4058 -15171.6426 -10521.5107]", + "686": "[-7000.7856 -15169.5967 -10521.4277]", + "687": "[-7513.3833 -15158.1016 -10521.5156]", + "688": "[-8031.938 -15127.6709 -10521.4453]", + "689": "[-8547.5283 -15078.1289 -10521.542]", + "690": "[-9058.2344 -15006.1611 -10521.4678]", + "691": "[-9563.2188 -14911 -10521.5732]", + "692": "[-10060.9219 -14789.5928 -10521.3818]", + "693": "[-10556.9473 -14637.8145 -10521.5791]", + "694": "[-11039.7061 -14454.8467 -10521.5186]", + "695": "[-11506.9199 -14239.7813 -10521.6016]", + "696": "[-11954.7354 -13990.9131 -10521.6748]", + "697": "[-12385.9375 -13703.0176 -10521.6621]", + "698": "[-12790.2061 -13379.9199 -10521.6025]", + "699": "[-13166.043 -13020.7119 -10521.5977]", + "700": "[-13507.0049 -12631.0898 -10521.6729]", + "701": "[-13812.0273 -12215.3213 -10521.6221]", + "702": "[-14079.499 -11776.7969 -10521.5264]", + "703": "[-14314.5947 -11312.7979 -10521.584]", + "704": "[-14514.5449 -10834.8721 -10521.4961]", + "705": "[-14681.1582 -10346.4453 -10521.458]", + "706": "[-14817.2314 -9850.3174 -10521.4756]", + "707": "[-14925.2539 -9348.8408 -10521.4697]", + "708": "[-15009.4521 -8835.7998 -10521.5137]", + "709": "[-15070.0381 -8321.0713 -10521.4092]", + "710": "[-15109.2715 -7803.9131 -10521.293]", + "711": "[-15129.5654 -7284.5752 -10521.3281]", + "712": "[-15136.0273 -6766.7598 -10521.4629]", + "713": "[-15136.583 -6250.0527 -10521.4844]", + "714": "[-15136.3281 -5734.415 -10521.458]", + "715": "[-15136.2588 -5219.8647 -10521.4551]", + "716": "[-15136.3301 -4706.3828 -10521.4531]", + "717": "[-15136.0762 -4193.9722 -10521.457]", + "718": "[-15136.7646 -3674.1089 -10521.5322]", + "719": "[-15136.2246 -3155.3643 -10521.4717]", + "720": "[-15136.5518 -2637.7632 -10521.4639]", + "721": "[-15136.2256 -2121.314 -10521.4727]", + "722": "[-15136.4307 -1605.981 -10521.459]", + "723": "[-15136.2461 -1091.7545 -10521.4561]", + "724": "[-15136.5605 -578.6236 -10521.4541]", + "725": "[-15136.5811 -66.5868 -10521.4541]", + "726": "[-15136.6484 452.7386 -10521.4551]", + "727": "[-15136.1289 970.6085 -10520.3242]", + "728": "[-15136.3164 1482.3792 -10503.7002]", + "729": "[-15135.8428 1995.6334 -10465.7373]", + "730": "[-15135.5596 2508.3066 -10412.8975]", + "731": "[-15135.8877 3020.4053 -10354.2461]", + "732": "[-15136.209 3533.6606 -10293.209]", + "733": "[-15136.2109 4044.25 -10231.7266]", + "734": "[-15136.084 4555.6206 -10171.1387]", + "735": "[-15136.6689 5069.6865 -10112.6543]", + "736": "[-15136.5596 5583.0176 -10060.4541]", + "737": "[-15136.1709 6098.6016 -10024.7158]", + "738": "[-15129.792 6612.3696 -10010.4717]", + "739": "[-15110.999 7131.2065 -10009.3818]", + "740": "[-15072.4697 7646.354 -10009.543]", + "741": "[-15013.4814 8157.2554 -10009.5518]", + "742": "[-14932.0703 8663.6523 -10009.4482]", + "743": "[-14824.0732 9172.2598 -10009.376]", + "744": "[-14688.8857 9671.5313 -10009.624]", + "745": "[-14524.2148 10159.9707 -10009.4453]", + "746": "[-14328.0322 10634.2334 -10009.5498]", + "747": "[-14094.9863 11098.7207 -10009.6602]", + "748": "[-13829.5225 11538.4629 -10009.6055]", + "749": "[-13529.2773 11954.0439 -10009.6445]", + "750": "[-13189.167 12346.335 -10009.6377]", + "751": "[-12817.5771 12705.7578 -10009.5996]", + "752": "[-12417.6416 13029.9141 -10009.5107]", + "753": "[-11992.96 13317.1553 -10009.5615]", + "754": "[-11541.4141 13572.3457 -10009.5859]", + "755": "[-11073.418 13790.7529 -10009.5947]", + "756": "[-10593.252 13974.8779 -10009.6104]", + "757": "[-10103.8838 14127.3584 -10009.6777]", + "758": "[-9599.9346 14252.79 -10009.2881]", + "759": "[-9091.4111 14350.5986 -10009.3682]", + "760": "[-8583.9434 14423.7344 -10009.3203]", + "761": "[-8073.9697 14474.7949 -10009.4473]", + "762": "[-7555.5605 14505.8574 -10009.4209]", + "763": "[-7038.4102 14519.1084 -10009.4424]", + "764": "[-6522.5459 14522.7998 -10009.4521]", + "765": "[-6007.7813 14522.2783 -10009.5078]", + "766": "[-5494.0845 14522.3711 -10009.376]", + "767": "[-4981.4834 14521.7959 -10009.4541]", + "768": "[-4461.4395 14522.0605 -10009.4551]", + "769": "[-3942.4883 14522.0664 -10009.4521]", + "770": "[-3424.6436 14522.2891 -10009.3428]", + "771": "[-2907.8796 14522.2383 -10009.4844]", + "772": "[-2392.2378 14522.0088 -10009.417]", + "773": "[-1877.7117 14522.3672 -10009.4971]", + "774": "[-1364.301 14522.1494 -10009.4189]", + "775": "[-852.0064 14522.0313 -10009.4541]", + "776": "[-332.4465 14521.9336 -10009.4521]", + "777": "[185.9746 14521.9912 -10009.4531]", + "778": "[703.2646 14522.3887 -10009.4463]", + "779": "[1219.4073 14521.9121 -10009.4199]", + "780": "[1736.4364 14522.4775 -10009.5039]", + "781": "[2256.5811 14522.2256 -10009.499]", + "782": "[2775.6431 14522.959 -10009.4395]", + "783": "[3293.6133 14522.3184 -10009.458]", + "784": "[3810.51 14522.3857 -10009.4551]", + "785": "[4326.3423 14522.6338 -10009.4521]", + "786": "[4841.0874 14521.8525 -10009.4375]", + "787": "[5354.7593 14522.5049 -10009.4766]", + "788": "[5867.3252 14522.21 -10009.4951]", + "789": "[6387.3096 14520.9189 -10009.3896]", + "790": "[6905.8154 14508.9629 -10009.4023]", + "791": "[7422.1646 14480.1895 -10009.501]", + "792": "[7935.0317 14431.958 -10009.499]", + "793": "[8443.291 14362.2949 -10009.6309]", + "794": "[8954.4668 14267.6631 -10009.54]", + "795": "[9454.5322 14147.541 -10009.5264]", + "796": "[9945.9355 13999.4023 -10009.54]", + "797": "[10433.041 13817.5938 -10009.5791]", + "798": "[10904.1563 13602.8311 -10009.5488]", + "799": "[11355.7197 13353.9668 -10009.6689]", + "800": "[11784.0127 13071.2891 -10009.6602]", + "801": "[12191.502 12748.8945 -10009.6074]", + "802": "[12567.3838 12393.2949 -10009.6309]", + "803": "[12908.8057 12007.5146 -10009.502]", + "804": "[13214.1377 11595.4727 -10009.7158]", + "805": "[13487.3018 11153.9248 -10009.6494]", + "806": "[13722.8721 10695.3008 -10009.5762]", + "807": "[13923.2119 10223.2871 -10009.5967]", + "808": "[14093.042 9732.1406 -10009.5537]", + "809": "[14232.0088 9233.3135 -10009.4697]", + "810": "[14342.8125 8729.2891 -10009.4121]", + "811": "[14427.4111 8221.7041 -10009.4023]", + "812": "[14489.1143 7712.1118 -10009.4658]", + "813": "[14530.0225 7193.5562 -10009.4209]", + "814": "[14551.6191 6676.0562 -10009.5264]", + "815": "[14559.1455 6159.6719 -10009.4932]", + "816": "[14559.0391 5644.3657 -10009.4717]", + "817": "[14559.0146 5130.1826 -10009.459]", + "818": "[14559.0674 4617.0957 -10009.4551]", + "819": "[14559.0811 4096.7222 -10009.4531]", + "820": "[14559.4268 3577.4883 -10009.4268]", + "821": "[14559.3984 3059.3857 -10009.415]", + "822": "[14559.1416 2542.4451 -10009.376]", + "823": "[14559.1396 2024.3628 -10009.4707]", + "824": "[14559.4756 1512.1377 -10009.4512]", + "825": "[14559.3174 992.2941 -10009.457]", + "826": "[14559.2666 473.5057 -10009.4541]", + "827": "[14559.2861 -44.2241 -10009.4521]", + "828": "[14559.5449 -560.9041 -10009.4727]", + "829": "[14559.7939 -1076.5372 -10009.4834]", + "830": "[14559.2178 -1591.0861 -10009.3838]", + "831": "[14559.4502 -2104.5659 -10009.4629]", + "832": "[14559.5801 -2616.9744 -10009.4717]", + "833": "[14559.1982 -3136.8232 -10009.458]", + "834": "[14559.3486 -3655.5508 -10009.4551]", + "835": "[14559.334 -4173.1689 -10009.4541]", + "836": "[14559.1152 -4689.6748 -10009.4355]", + "837": "[14559.4805 -5205.0825 -10009.4795]", + "838": "[14559.3301 -5719.3706 -10009.4258]", + "839": "[14553.0479 -6232.3916 -10009.4785]", + "840": "[14534.5088 -6751.7295 -10009.5674]", + "841": "[14496.0234 -7267.8745 -10009.5107]", + "842": "[14436.6328 -7781.9565 -10009.5176]", + "843": "[14354.1152 -8295.249 -10009.3555]", + "844": "[14246.377 -8801.1592 -10009.5596]", + "845": "[14112.1621 -9298.1748 -10009.5498]", + "846": "[13948.415 -9784.4004 -10009.6348]", + "847": "[13749.3965 -10264.6201 -10009.5947]", + "848": "[13517.0742 -10727.3047 -10009.7305]", + "849": "[13250.4453 -11168.4863 -10009.5859]", + "850": "[12949.2666 -11584.1318 -10009.6582]", + "851": "[12609.001 -11976.7246 -10009.5996]", + "852": "[12234.3291 -12338.2656 -10009.5176]", + "853": "[11835.7217 -12660.2539 -10009.6289]", + "854": "[11405.7607 -12950.9883 -10009.584]", + "855": "[10955.0449 -13204.416 -10009.5664]", + "856": "[10487.7158 -13421.2021 -10009.5576]", + "857": "[10008.2354 -13604.418 -10009.4814]", + "858": "[9512.2627 -13758.6416 -10009.4951]", + "859": "[9009.7461 -13882.9219 -10009.4512]", + "860": "[8502.751 -13979.9229 -10009.3066]", + "861": "[7992.9937 -14051.8525 -10009.3271]", + "862": "[7482.3994 -14102.6494 -10009.3154]", + "863": "[6963.1372 -14133.9053 -10009.5332]", + "864": "[6444.3555 -14146.625 -10009.4707]", + "865": "[5926.8608 -14149.1768 -10009.376]", + "866": "[5410.6499 -14148.9561 -10009.458]", + "867": "[4897.3267 -14149.2246 -10009.4551]", + "868": "[4377.0698 -14149.4893 -10009.4521]", + "869": "[3857.877 -14149.4688 -10009.4131]", + "870": "[3339.7473 -14149.1455 -10009.4844]", + "871": "[2822.7173 -14149.4912 -10009.5293]", + "872": "[2306.7639 -14149.2461 -10009.4951]", + "873": "[1792.0841 -14149.4678 -10009.4971]", + "874": "[1278.8464 -14149.1113 -10009.4561]", + "875": "[758.5356 -14149.1641 -10009.5029]", + "876": "[239.3907 -14149.3018 -10009.4834]", + "877": "[-278.6018 -14149.0088 -10009.3682]", + "878": "[-795.3325 -14149.5566 -10009.3721]", + "879": "[-1310.506 -14149.5879 -10009.4482]", + "880": "[-1824.5256 -14149.3545 -10009.4092]", + "881": "[-2337.3796 -14149.5137 -10009.334]", + "882": "[-2857.0452 -14145.5459 -10009.1553]", + "883": "[-3369.0566 -14121.3809 -10009.21]", + "884": "[-3885.0286 -14057.7402 -10009.5068]", + "885": "[-4389.6201 -13948.4346 -10009.3887]", + "886": "[-4875.6978 -13783.5557 -10009.5449]", + "887": "[-5338.8589 -13551.4668 -10009.458]", + "888": "[-5756.8359 -13252.8135 -10009.3096]", + "889": "[-6136.3262 -12908.9883 -10009.2656]", + "890": "[-6501.7832 -12541.498 -10009.3945]", + "891": "[-6868.397 -12177.1689 -10009.4707]", + "892": "[-7236.7852 -11809.3125 -10009.4482]", + "893": "[-7604.4761 -11440.7471 -10009.5039]", + "894": "[-7971.5039 -11073.0752 -10009.4395]", + "895": "[-8338.4502 -10706.8955 -10009.3672]", + "896": "[-8704.376 -10341.2988 -10009.4727]", + "897": "[-9069.1357 -9976.127 -10009.5254]", + "898": "[-9433.1035 -9611.7158 -10009.4668]", + "899": "[-9796.8633 -9248.6514 -10009.3574]", + "900": "[-10159.0811 -8885.5801 -10009.3359]", + "901": "[-10527.3506 -8518.0537 -10009.5459]", + "902": "[-10894.2041 -8150.7158 -10009.5156]", + "903": "[-11260.1113 -7784.7803 -10009.1895]", + "904": "[-11623.7188 -7419.9644 -10009.1367]", + "905": "[-11972.6445 -7045.1313 -10009.5137]", + "906": "[-12297.0205 -6648.4106 -10009.4199]", + "907": "[-12586.1338 -6225.5474 -10009.6416]", + "908": "[-12830.0195 -5769.2192 -10009.7764]", + "909": "[-13011.2246 -5288.9595 -10009.4326]", + "910": "[-13118.1143 -4782.5469 -10009.4258]", + "911": "[-13154.6826 -4267.9448 -10009.2373]", + "912": "[-13157.5332 -3752.9011 -10009.4756]", + "913": "[-13158.5283 -3239.0239 -10009.3076]", + "914": "[-13157.2891 -2726.2727 -10009.4639]", + "915": "[-13158.2744 -2206.3081 -10009.4697]", + "916": "[-13157.8125 -1687.4976 -10009.459]", + "917": "[-13158.0518 -1169.834 -10009.4551]", + "918": "[-13158.3564 -653.3178 -10009.3701]", + "919": "[-13148.5889 -136.3253 -10009.4023]", + "920": "[-13113.8047 380.1443 -10009.3916]", + "921": "[-13034.8721 888.5176 -10009.3584]", + "922": "[-12903.1963 1389.7212 -10009.4336]", + "923": "[-12711.8066 1866.8231 -10009.376]", + "924": "[-12450.4248 2314.1726 -10009.4785]", + "925": "[-12118.5693 2710.7363 -10009.3896]", + "926": "[-11730.5723 3036.8484 -10009.5566]", + "927": "[-11289.6895 3297.6455 -10009.4873]", + "928": "[-10809.3301 3492.7295 -10009.4092]", + "929": "[-10309.8301 3625.0835 -10009.4404]", + "930": "[-9800.9805 3705.29 -10009.2744]", + "931": "[-9289.1514 3741.8901 -10008.1494]", + "932": "[-8771.2686 3752.6987 -9990.3369]", + "933": "[-8258.4961 3751.4688 -9951.9688]", + "934": "[-7744.6553 3751.6489 -9898.5527]", + "935": "[-7233.062 3751.9626 -9839.9336]", + "936": "[-6720.8774 3752.7017 -9778.8184]", + "937": "[-6209.375 3751.9846 -9717.335]", + "938": "[-5698.3457 3752.127 -9656.6572]", + "939": "[-5184.4956 3752.6174 -9598.4287]", + "940": "[-4670.0283 3752.5195 -9546.6807]", + "941": "[-4156.3232 3752.2334 -9511.582]", + "942": "[-3638.3379 3745.1145 -9497.9932]", + "943": "[-3120.7 3725.678 -9497.457]", + "944": "[-2606.5117 3686.5984 -9497.4795]", + "945": "[-2090.4019 3625.7097 -9497.5273]", + "946": "[-1579.9265 3542.2866 -9497.5049]", + "947": "[-1076.1515 3434.2075 -9497.5869]", + "948": "[-580.7645 3298.2214 -9497.5801]", + "949": "[-96.0081 3133.208 -9497.3691]", + "950": "[382.5576 2933.887 -9497.459]", + "951": "[843.6133 2700.9502 -9497.5518]", + "952": "[1282.8044 2432.9888 -9497.6865]", + "953": "[1696.7711 2131.231 -9497.5557]", + "954": "[2087.7537 1790.6322 -9497.6289]", + "955": "[2444.5869 1419.6426 -9497.5273]", + "956": "[2770.2224 1014.0372 -9497.6006]", + "957": "[3058.8774 583.7493 -9497.458]", + "958": "[3310.9106 133.1951 -9497.5596]", + "959": "[3526.4312 -333.5839 -9497.5859]", + "960": "[3710.9299 -820.2642 -9497.4873]", + "961": "[3863.3833 -1315.9879 -9497.4629]", + "962": "[3986.4302 -1818.1268 -9497.3223]", + "963": "[4082.0205 -2324.6765 -9497.4707]", + "964": "[4153.1104 -2833.8198 -9497.3232]", + "965": "[4203.1543 -3343.7791 -9497.541]", + "966": "[4233.6704 -3862.2966 -9497.1992]", + "967": "[4244.4546 -4380.3359 -9497.4268]", + "968": "[4237.6367 -4893.3027 -9497.5049]", + "969": "[4212.4502 -5405.2329 -9497.3613]", + "970": "[4167.5879 -5922.8276 -9497.3262]", + "971": "[4100.8057 -6436.1851 -9497.4238]", + "972": "[4010.9551 -6943.5884 -9497.4238]", + "973": "[3895.9502 -7442.7231 -9497.3877]", + "974": "[3750.6738 -7940.9722 -9497.5371]", + "975": "[3574.7129 -8427.1484 -9497.4688]", + "976": "[3366.9666 -8898.4531 -9497.4727]", + "977": "[3125.9082 -9351.1191 -9497.5693]", + "978": "[2845.5161 -9787.8613 -9497.541]", + "979": "[2533.9077 -10194.251 -9497.5654]", + "980": "[2182.1985 -10578.0244 -9497.6094]", + "981": "[1798.9386 -10927.0732 -9497.5986]", + "982": "[1388.2037 -11239.9404 -9497.6895]", + "983": "[954.5222 -11516.585 -9497.6875]", + "984": "[501.7322 -11756.8711 -9497.4668]", + "985": "[26.2413 -11965.0039 -9497.6865]", + "986": "[-460.2421 -12139.4014 -9497.5039]", + "987": "[-955.1085 -12282.5244 -9497.5273]", + "988": "[-1455.8251 -12397.1855 -9497.4795]", + "989": "[-1960.2365 -12485.584 -9497.502]", + "990": "[-2474.822 -12551.7588 -9497.4346]", + "991": "[-2990.3979 -12596.1152 -9497.4287]", + "992": "[-3510.1792 -12621.248 -9497.4668]", + "993": "[-4022.5647 -12627.5381 -9497.4092]", + "994": "[-4542.209 -12615.71 -9497.4316]", + "995": "[-5059.5938 -12584.4932 -9497.5479]", + "996": "[-5574.1196 -12533.9785 -9497.3828]", + "997": "[-6083.9253 -12460.9434 -9497.3779]", + "998": "[-6587.3911 -12364.4922 -9497.2988]", + "999": "[-7091.2075 -12239.7666 -9497.5234]", + "1000": "[-7584.7642 -12086.8223 -9497.4609]", + "1001": "[-8065.1719 -11902.8623 -9497.5127]", + "1002": "[-8529.9766 -11686.9424 -9497.5449]", + "1003": "[-8982.1641 -11432.6094 -9497.6377]", + "1004": "[-9410.8027 -11142.8779 -9497.6533]", + "1005": "[-9815.2197 -10815.4014 -9497.6211]", + "1006": "[-10188.0938 -10455.5049 -9497.5908]", + "1007": "[-10525.9043 -10065.3584 -9497.7041]", + "1008": "[-10827.3281 -9649.2676 -9497.5039]", + "1009": "[-11096.2744 -9203.9473 -9497.5391]", + "1010": "[-11328.1455 -8740.374 -9497.6758]", + "1011": "[-11525.5166 -8262.9766 -9497.4609]", + "1012": "[-11689.291 -7774.8169 -9497.5762]", + "1013": "[-11823.4121 -7279.5137 -9497.4512]", + "1014": "[-11931.0898 -6770.7842 -9497.4775]", + "1015": "[-12013.4512 -6258.7954 -9497.4111]", + "1016": "[-12072.1992 -5744.9956 -9497.3926]", + "1017": "[-12110.5527 -5225.9595 -9497.415]", + "1018": "[-12129.4814 -4706.1411 -9497.1367]", + "1019": "[-12135.1621 -4186.9258 -9482.0732]", + "1020": "[-12134.6348 -3672.4766 -9446.7803]", + "1021": "[-12134.623 -3159.2085 -9394.4287]", + "1022": "[-12135.2041 -2647.4822 -9336.2705]", + "1023": "[-12135.2959 -2135.0886 -9275.3096]", + "1024": "[-12135.3506 -1623.4022 -9213.1748]", + "1025": "[-12135.5879 -1111.9685 -9150.5762]", + "1026": "[-12135.6514 -599.2625 -9087.6328]", + "1027": "[-12135.6689 -88.2999 -9024.8945]", + "1028": "[-12135.5801 423.2002 -8962.0898]", + "1029": "[-12135.0654 935.9566 -8899.1338]", + "1030": "[-12135.3242 1446.9442 -8836.3311]", + "1031": "[-12134.9219 1958.481 -8773.6162]", + "1032": "[-12135.4395 2470.6338 -8711.459]", + "1033": "[-12135.6768 2982.3157 -8650.5107]", + "1034": "[-12135.4492 3495.6199 -8592.2676]", + "1035": "[-12135.2988 4008.2268 -8539.9023]", + "1036": "[-12135.251 4524.77 -8503.0342]", + "1037": "[-12123.1992 5043.3364 -8488.2031]", + "1038": "[-12083.6445 5559.5747 -8486.9883]", + "1039": "[-11999.5527 6066.8105 -8486.7012]", + "1040": "[-11861.4492 6566.4644 -8486.7314]", + "1041": "[-11660.9668 7044.2876 -8486.6934]", + "1042": "[-11392.4189 7482.6855 -8486.832]", + "1043": "[-11051.4668 7872.9736 -8486.8955]", + "1044": "[-10651.1777 8195.6074 -8486.8896]", + "1045": "[-10198.6455 8450.1924 -8486.7891]", + "1046": "[-9715.627 8635.5039 -8486.6787]", + "1047": "[-9218.625 8758.7773 -8486.7549]", + "1048": "[-8704.8711 8832.8701 -8486.7002]", + "1049": "[-8188.583 8864.5176 -8486.2969]", + "1050": "[-7673.3057 8872.9258 -8486.291]", + "1051": "[-7160.9326 8871.0488 -8486.4512]", + "1052": "[-6641.229 8871.6953 -8486.3477]", + "1053": "[-6122.7256 8872.707 -8486.4785]", + "1054": "[-5605.4355 8872.0869 -8486.4756]", + "1055": "[-5089.3208 8871.5137 -8486.4609]", + "1056": "[-4574.3628 8871.8945 -8486.46]", + "1057": "[-4060.5479 8871.792 -8486.4941]", + "1058": "[-3547.8694 8871.7861 -8486.4121]", + "1059": "[-3027.9783 8872.0723 -8486.4424]", + "1060": "[-2509.2668 8871.6963 -8486.5322]", + "1061": "[-1991.7151 8872.0596 -8486.4795]", + "1062": "[-1475.3446 8871.9746 -8486.5127]", + "1063": "[-957.7928 8872.2813 -8486.4336]", + "1064": "[-437.4679 8871.6787 -8486.5322]", + "1065": "[81.7649 8871.6572 -8486.501]", + "1066": "[599.8956 8872.1641 -8486.4355]", + "1067": "[1116.9335 8871.7158 -8486.4443]", + "1068": "[1632.8992 8871.6543 -8486.4756]", + "1069": "[2147.811 8871.7402 -8486.3604]", + "1070": "[2661.6399 8872.2363 -8486.46]", + "1071": "[3174.4126 8871.5107 -8486.4541]", + "1072": "[3694.6252 8871.627 -8486.4541]", + "1073": "[4213.7095 8870.9648 -8486.3662]", + "1074": "[4731.3848 8860.5762 -8486.4424]", + "1075": "[5247.0127 8834.3105 -8486.4893]", + "1076": "[5759.5249 8788.2793 -8486.3867]", + "1077": "[6268 8721.4736 -8486.3936]", + "1078": "[6779.3994 8629.458 -8486.4658]", + "1079": "[7283.5835 8511.666 -8486.584]", + "1080": "[7781.4116 8364.2422 -8486.3818]", + "1081": "[8269.2178 8185.5571 -8486.6201]", + "1082": "[8741.5527 7974.2539 -8486.6455]", + "1083": "[9195.0752 7729.166 -8486.6309]", + "1084": "[9625.6641 7449.478 -8486.5762]", + "1085": "[10035.916 7130.1694 -8486.5137]", + "1086": "[10414.8115 6777.5537 -8486.6455]", + "1087": "[10759.4668 6394.5498 -8486.543]", + "1088": "[11068.3291 5985.0396 -8486.6953]", + "1089": "[11344.4785 5545.5815 -8486.6777]", + "1090": "[11582.8584 5089.8164 -8486.5771]", + "1091": "[11786.4131 4619.3267 -8486.459]", + "1092": "[11959.5 4129.2031 -8486.4863]", + "1093": "[12101.0889 3630.8848 -8486.4629]", + "1094": "[12214.3604 3126.917 -8486.4619]", + "1095": "[12301.6221 2619.5767 -8486.3232]", + "1096": "[12365.1641 2109.9993 -8486.3506]", + "1097": "[12407.4893 1599.4766 -8486.5313]", + "1098": "[12431.1777 1081.2227 -8486.4482]", + "1099": "[12439.1494 566.1353 -8475.4961]", + "1100": "[12439.5762 49.2818 -8444.7363]", + "1101": "[12440.2686 -463.5329 -8394.6152]", + "1102": "[12440.0381 -975.0377 -8337.2266]", + "1103": "[12439.8975 -1488.2159 -8276.6621]", + "1104": "[12440.2451 -1998.7141 -8214.7725]", + "1105": "[12439.9355 -2510.5012 -8152.1396]", + "1106": "[12440.4951 -3022.5979 -8089.249]", + "1107": "[12440.6221 -3534.0842 -8026.4482]", + "1108": "[12439.5742 -4045.707 -7963.6289]", + "1109": "[12440.5449 -4558.9424 -7900.6123]", + "1110": "[12440.4746 -5070.4116 -7837.8569]", + "1111": "[12440.5771 -5582.0195 -7775.0205]", + "1112": "[12439.9785 -6094.5034 -7712.6763]", + "1113": "[12440.6045 -6605.1587 -7651.5503]", + "1114": "[12440.5684 -7117.6431 -7592.4746]", + "1115": "[12440.2744 -7631.2612 -7538.2397]", + "1116": "[12439.8975 -8146.5771 -7497.0669]", + "1117": "[12432.2412 -8663.8193 -7478.0786]", + "1118": "[12401.5117 -9177.4502 -7474.9985]", + "1119": "[12326.2871 -9688.4932 -7475.2544]", + "1120": "[12201.2471 -10185.5547 -7475.2441]", + "1121": "[12016.3125 -10666.9111 -7475.5923]", + "1122": "[11761.2295 -11118.8389 -7475.4697]", + "1123": "[11437.9854 -11519.0586 -7475.4565]", + "1124": "[11049.0342 -11857.5049 -7475.478]", + "1125": "[10611.8564 -12124.8096 -7475.4175]", + "1126": "[10133.792 -12325.5186 -7475.5103]", + "1127": "[9635.7734 -12462.8389 -7475.1914]", + "1128": "[9128.208 -12547.0088 -7475.2466]", + "1129": "[8616.9492 -12587.3066 -7475.1978]", + "1130": "[8097.2183 -12599.4072 -7475.4253]", + "1131": "[7578.4512 -12599.0479 -7475.4478]", + "1132": "[7060.8389 -12599.0654 -7475.4526]", + "1133": "[6544.3574 -12599.5908 -7475.4512]", + "1134": "[6025.1484 -12599.8506 -7475.4507]", + "1135": "[5504.6724 -12599.1738 -7475.4756]", + "1136": "[4985.2661 -12599.3408 -7475.439]", + "1137": "[4466.9497 -12599.334 -7475.4487]", + "1138": "[3949.7292 -12599.6084 -7475.4155]", + "1139": "[3433.615 -12599.0449 -7475.5]", + "1140": "[2918.592 -12599.1201 -7475.4209]", + "1141": "[2404.8145 -12599.791 -7475.4712]", + "1142": "[1892.5146 -12599.4531 -7475.4141]", + "1143": "[1373.275 -12599.4785 -7475.4541]", + "1144": "[855.1445 -12599.4639 -7475.4521]", + "1145": "[338.1243 -12599.6113 -7475.4521]", + "1146": "[-177.7817 -12599.5254 -7475.4517]", + "1147": "[-692.5881 -12599.6406 -7475.5244]", + "1148": "[-1206.2775 -12599.0791 -7475.5]", + "1149": "[-1718.8525 -12599.9385 -7475.4365]", + "1150": "[-2238.6372 -12599.3916 -7475.3555]", + "1151": "[-2756.8574 -12599.5596 -7475.4561]", + "1152": "[-3273.4893 -12599.3564 -7475.4771]", + "1153": "[-3785.5156 -12599.3086 -7475.333]", + "1154": "[-4305.5469 -12599.0801 -7475.4097]", + "1155": "[-4824.5347 -12599.8604 -7475.3853]", + "1156": "[-5342.4102 -12599.2021 -7475.3657]", + "1157": "[-5858.8618 -12598.9014 -7475.4448]", + "1158": "[-6374.2271 -12598.1777 -7475.5352]", + "1159": "[-6887.9829 -12586.0313 -7475.4111]", + "1160": "[-7406.0405 -12543.5264 -7475.3613]", + "1161": "[-7917.6323 -12463.5205 -7475.561]", + "1162": "[-8424.6963 -12365.5596 -7475.3369]", + "1163": "[-8931.6211 -12284.0293 -7475.6206]", + "1164": "[-9448.1533 -12233.0039 -7475.5239]", + "1165": "[-9965.458 -12216.1104 -7475.3643]", + "1166": "[-10481.7803 -12215.084 -7475.501]", + "1167": "[-10997.0938 -12215.1367 -7475.457]", + "1168": "[-11517.4121 -12214.5781 -7475.543]", + "1169": "[-12036.6123 -12214.334 -7475.2964]", + "1170": "[-12554.7129 -12215.4385 -7475.4966]", + "1171": "[-13072.0488 -12208.2891 -7477.6685]", + "1172": "[-13586.8535 -12169.7979 -7481.1782]", + "1173": "[-14090.6455 -12068.5283 -7485.9712]", + "1174": "[-14574.1719 -11881.1494 -7489.3345]", + "1175": "[-14855.4658 -11710.4297 -7490.6753]", + "1176": "[-15138.3838 -11462.0869 -7491.0649]", + "1177": "[-15345.4688 -11202.8398 -7490.4692]", + "1178": "[-15543.1533 -10840.1328 -7488.3892]", + "1179": "[-15684.1475 -10419.5537 -7485.314]", + "1180": "[-15774.9023 -9913.166 -7480.5132]", + "1181": "[-15807.5205 -9401.3184 -7476.8501]", + "1182": "[-15813.0781 -8884.2607 -7475.0591]", + "1183": "[-15811.9053 -8369.7734 -7475.0674]", + "1184": "[-15812.6445 -7856.3789 -7475.064]", + "1185": "[-15812.5508 -7344.0625 -7475.0566]", + "1186": "[-15812.7158 -6824.2881 -7475.0947]", + "1187": "[-15811.8555 -6305.5967 -7474.9629]", + "1188": "[-15812.1504 -5788.0645 -7475.0977]", + "1189": "[-15807.2188 -5271.3086 -7477.1274]", + "1190": "[-15770.5732 -4756.7607 -7480.9077]", + "1191": "[-15671.9658 -4251.1489 -7485.6509]", + "1192": "[-15492.5918 -3770.9138 -7489.1294]", + "1193": "[-15318.3984 -3475.9656 -7490.4956]", + "1194": "[-15081.2607 -3199.2346 -7491.0063]", + "1195": "[-14816.7813 -2982.1997 -7490.5205]", + "1196": "[-14475.2412 -2790.126 -7488.8154]", + "1197": "[-14036.8105 -2636.3994 -7485.4351]", + "1198": "[-13525.2705 -2542.3088 -7480.6133]", + "1199": "[-13009.1602 -2509.394 -7476.9575]", + "1200": "[-12497.0342 -2502.8403 -7475.0767]", + "1201": "[-11979.5654 -2504.1177 -7475.0703]", + "1202": "[-11463.2695 -2503.7754 -7475.1514]", + "1203": "[-10948.1348 -2502.9795 -7475.0278]", + "1204": "[-10434.1172 -2504.1245 -7475.0679]", + "1205": "[-9921.2236 -2503.4956 -7475.1265]", + "1206": "[-9401.0488 -2503.4114 -7475.1152]", + "1207": "[-8882.041 -2503.6067 -7474.978]", + "1208": "[-8364.1953 -2503.4331 -7475.063]", + "1209": "[-7847.5249 -2504.1919 -7475.0508]", + "1210": "[-7332.7236 -2503.1479 -7475.0317]", + "1211": "[-6812.1123 -2504.0801 -7475.0806]", + "1212": "[-6292.6348 -2502.8916 -7475.0811]", + "1213": "[-5774.2729 -2503.8955 -7475.0479]", + "1214": "[-5256.9902 -2503.5625 -7475.0298]", + "1215": "[-4740.7861 -2503.9854 -7475.0137]", + "1216": "[-4225.729 -2502.7783 -7475.0747]", + "1217": "[-3711.8232 -2503.9419 -7475.0474]", + "1218": "[-3199.0142 -2503.4333 -7475.1104]", + "1219": "[-2678.7419 -2504.0217 -7475.0884]", + "1220": "[-2159.5818 -2503.1196 -7475.0732]", + "1221": "[-1641.566 -2503.8425 -7475.0747]", + "1222": "[-1124.7019 -2503.4026 -7475.0454]", + "1223": "[-608.9527 -2503.8132 -7475.0137]", + "1224": "[-94.3149 -2503.999 -7475.0728]", + "1225": "[419.2049 -2503.2422 -7475.1021]", + "1226": "[931.5927 -2504.0764 -7475.0054]", + "1227": "[1451.2319 -2503.2964 -7475.0713]", + "1228": "[1969.7103 -2503.7266 -7475.0718]", + "1229": "[2487.0193 -2503.7583 -7475.0728]", + "1230": "[3003.135 -2503.3887 -7475.0342]", + "1231": "[3522.0168 -2503.7036 -7475.0801]", + "1232": "[4042.1028 -2503.5732 -7475.0796]", + "1233": "[4559.7578 -2495.0078 -7475.0361]", + "1234": "[5073.5205 -2463.199 -7475.1885]", + "1235": "[5580.189 -2388.9014 -7475.2417]", + "1236": "[6082.7065 -2263.5154 -7475.3022]", + "1237": "[6563.5537 -2080.5879 -7475.125]", + "1238": "[7017.5039 -1829.17 -7474.7285]", + "1239": "[7424.0381 -1512.296 -7474.9751]", + "1240": "[7802.3862 -1155.4811 -7475.1108]", + "1241": "[8168.8262 -786.8887 -7475.0991]", + "1242": "[8535.0654 -419.7356 -7475.0952]", + "1243": "[8901.876 -54.7823 -7475.0776]", + "1244": "[9266.5889 310.6848 -7475.1128]", + "1245": "[9630.8213 675.0805 -7474.9712]", + "1246": "[9994.5889 1038.4017 -7475.0703]", + "1247": "[10357.3027 1401.2654 -7475.1069]", + "1248": "[10724.875 1769.8229 -7475.1553]", + "1249": "[11092.6953 2136.5269 -7475.0859]", + "1250": "[11458.7764 2503.3711 -7475.064]", + "1251": "[11824.9189 2868.561 -7475.1143]", + "1252": "[12189.5234 3233.6975 -7475.125]", + "1253": "[12553.8242 3597.5403 -7474.9517]", + "1254": "[12916.7861 3961.1238 -7475.0645]", + "1255": "[13279.0293 4323.834 -7475.1187]", + "1256": "[13647.7031 4690.3457 -7475.1211]", + "1257": "[14010.2129 5059.4282 -7474.6572]", + "1258": "[14356.9531 5439.2749 -7474.2188]", + "1259": "[14675.1514 5843.1025 -7474.4409]", + "1260": "[14953.4775 6276.0581 -7474.4263]", + "1261": "[15178.1318 6744.478 -7474.4819]", + "1262": "[15327.6602 7237.7993 -7473.5093]", + "1263": "[15396.9775 7750.8496 -7468.584]", + "1264": "[15381.6758 8270.585 -7456.1172]", + "1265": "[15278.3848 8772.126 -7435.7705]", + "1266": "[15095.9922 9252.2041 -7406.9556]", + "1267": "[14852.9756 9708.2266 -7368.6841]", + "1268": "[14566.8584 10139.4365 -7320.0737]", + "1269": "[14245.7842 10541.6221 -7263.0894]", + "1270": "[13899.1533 10915.1895 -7202.7324]", + "1271": "[13538.8066 11279.4316 -7141.3804]", + "1272": "[13178.4648 11641.6201 -7082.3428]", + "1273": "[12814.1582 12004.8604 -7027.623]", + "1274": "[12449.582 12368.3965 -6985.5952]", + "1275": "[12078.46 12726.1143 -6965.6323]", + "1276": "[11683.2705 13063.1025 -6962.0635]", + "1277": "[11253.707 13346.333 -6962.3726]", + "1278": "[10782.3809 13560.4727 -6962.5298]", + "1279": "[10374.2725 13665.3457 -6962.4971]", + "1280": "[9974.3154 13695.6621 -6962.3901]", + "1281": "[9610.6396 13659.4219 -6962.4219]", + "1282": "[9149.166 13529.3105 -6962.5098]", + "1283": "[8725.5195 13324.7998 -6962.3545]", + "1284": "[8295.7393 13033.4932 -6962.2988]", + "1285": "[7903.5322 12695.3916 -6962.4912]", + "1286": "[7533.4258 12337.7988 -6957.7163]", + "1287": "[7169.6577 11972.6533 -6934.3564]", + "1288": "[6806.8657 11609.7305 -6889.3706]", + "1289": "[6444.2139 11247.3818 -6833.7998]", + "1290": "[6082.6147 10885.9824 -6774.1826]", + "1291": "[5721.0747 10523.9033 -6712.6001]", + "1292": "[5359.5591 10161.7051 -6649.7515]", + "1293": "[4998.0562 9800.7979 -6587.0444]", + "1294": "[4636.4453 9438.584 -6524.1855]", + "1295": "[4274.5244 9077.3926 -6461.4004]", + "1296": "[3913.2861 8716.2139 -6398.6797]", + "1297": "[3551.6716 8353.9844 -6335.8193]", + "1298": "[3189.1072 7991.7944 -6272.9482]", + "1299": "[2827.8174 7630.7861 -6210.2261]", + "1300": "[2465.9988 7267.9873 -6147.7793]", + "1301": "[2103.636 6906.5981 -6086.7607]", + "1302": "[1742.71 6545.5005 -6027.8755]", + "1303": "[1379.9342 6181.8491 -5973.9829]", + "1304": "[1016.3318 5818.6958 -5933.4092]", + "1305": "[632.4696 5467.6372 -5914.812]", + "1306": "[213.0132 5160.1064 -5912.52]", + "1307": "[-245.1044 4926.8213 -5912.4746]", + "1308": "[-735.4808 4757.6641 -5912.5151]", + "1309": "[-1242.9271 4645.0601 -5912.3057]", + "1310": "[-1758.6414 4580.6885 -5912.5146]", + "1311": "[-2275.4065 4561.9521 -5912.1421]", + "1312": "[-2787.8271 4592.5854 -5912.3975]", + "1313": "[-3295.9705 4685.8203 -5912.7393]", + "1314": "[-3783.4761 4847.3901 -5913.0034]", + "1315": "[-4222.3301 5084.2275 -5913.3804]", + "1316": "[-4502.0313 5306.1992 -5913.3218]", + "1317": "[-4790.8447 5632.7769 -5913.293]", + "1318": "[-4996.4272 5968.5845 -5913.0894]", + "1319": "[-5187.1626 6445.3213 -5912.7573]", + "1320": "[-5302.9858 6949.3901 -5912.4858]", + "1321": "[-5356.8818 7458.7178 -5912.3984]", + "1322": "[-5372.6099 7976.2944 -5912.4907]", + "1323": "[-5371.3794 8496.4346 -5912.3945]", + "1324": "[-5372.6499 9008.6924 -5912.5098]", + "1325": "[-5372.7178 9528.4961 -5912.5151]", + "1326": "[-5378.7891 10046.9453 -5912.3599]", + "1327": "[-5409.8965 10562.4502 -5912.4243]", + "1328": "[-5483.7349 11071.0625 -5911.9414]", + "1329": "[-5608.3486 11574.0273 -5912.2666]", + "1330": "[-5791.6987 12054.4346 -5912.5537]", + "1331": "[-6045.1812 12507.0254 -5912.5996]", + "1332": "[-6367.0137 12908.0361 -5912.4795]", + "1333": "[-6756.4766 13249.6084 -5912.5923]", + "1334": "[-7194.4858 13518.1455 -5912.6235]", + "1335": "[-7670.7676 13719.2754 -5912.4731]", + "1336": "[-8167.1743 13858.042 -5912.2144]", + "1337": "[-8673.9258 13942.8145 -5912.3574]", + "1338": "[-9184.5381 13983.4189 -5912.2949]", + "1339": "[-9703.7813 13989.3584 -5912.4736]", + "1340": "[-10220.1416 13959.8936 -5912.3828]", + "1341": "[-10729.5713 13889.7031 -5912.3555]", + "1342": "[-11234.502 13767.4873 -5912.4312]", + "1343": "[-11719.3086 13585.5293 -5912.4932]", + "1344": "[-12173.5332 13335.0439 -5912.5474]", + "1345": "[-12577.0801 13015.9541 -5912.5059]", + "1346": "[-12921.7109 12628.5264 -5912.606]", + "1347": "[-13194.1758 12191.3613 -5912.4434]", + "1348": "[-13396.4229 11720.4961 -5912.3301]", + "1349": "[-13538.0859 11221.6123 -5912.3086]", + "1350": "[-13625.0645 10715.7783 -5912.2734]", + "1351": "[-13667.7012 10203.8496 -5912.0449]", + "1352": "[-13680.5654 9690.2178 -5897.3423]", + "1353": "[-13680.5703 9173.5342 -5862.1558]", + "1354": "[-13681.1055 8660.6406 -5810.0557]", + "1355": "[-13680.8477 8148.4497 -5751.8901]", + "1356": "[-13681.0928 7636.2495 -5691.001]", + "1357": "[-13681.1963 7125.1997 -5628.9517]", + "1358": "[-13680.3125 6613.6909 -5566.4023]", + "1359": "[-13680.7539 6101.7573 -5503.584]", + "1360": "[-13680.3564 5589.73 -5440.7637]", + "1361": "[-13680.8594 5078.3169 -5377.958]", + "1362": "[-13680.7012 4566.3936 -5315.106]", + "1363": "[-13680.6875 4054.3464 -5252.2324]", + "1364": "[-13680.9209 3542.9294 -5189.4067]", + "1365": "[-13680.3271 3032.0874 -5126.7524]", + "1366": "[-13681 2520.0098 -5063.9355]", + "1367": "[-13680.9941 2008.1211 -5001.6831]", + "1368": "[-13680.1943 1496.6819 -4940.96]", + "1369": "[-13680.5078 983.0609 -4882.354]", + "1370": "[-13680.6992 470.1623 -4829.8784]", + "1371": "[-13680.7461 -44.2031 -4793.0054]", + "1372": "[-13680.7686 -559.2672 -4777.8662]", + "1373": "[-13680.5693 -1077.2634 -4776.4785]", + "1374": "[-13680.1191 -1593.8879 -4776.4873]", + "1375": "[-13680.9082 -2109.3594 -4776.4243]", + "1376": "[-13680.6943 -2623.708 -4776.4614]", + "1377": "[-13681.1973 -3136.959 -4776.4531]", + "1378": "[-13680.4404 -3649.1475 -4776.4502]", + "1379": "[-13680.5488 -4168.7729 -4776.4526]", + "1380": "[-13680.6719 -4687.2886 -4776.4526]", + "1381": "[-13681.0303 -5204.6851 -4776.4502]", + "1382": "[-13680.3408 -5720.9736 -4776.48]", + "1383": "[-13680.6953 -6236.1299 -4776.436]", + "1384": "[-13680.6104 -6750.1616 -4776.4443]", + "1385": "[-13680.292 -7262.9951 -4776.376]", + "1386": "[-13674.3398 -7782.5894 -4776.3369]", + "1387": "[-13653.4561 -8300.3877 -4776.2944]", + "1388": "[-13614.7959 -8815.8232 -4776.3633]", + "1389": "[-13554.1094 -9327.7236 -4776.4702]", + "1390": "[-13470.8496 -9834.9512 -4776.4458]", + "1391": "[-13361.3418 -10343.6992 -4776.6499]", + "1392": "[-13224.7168 -10842.0166 -4776.5952]", + "1393": "[-13058.3818 -11329.5254 -4776.521]", + "1394": "[-12860.0449 -11803.0635 -4776.4756]", + "1395": "[-12624.8096 -12266.8799 -4776.563]", + "1396": "[-12354.6982 -12708.7275 -4776.5103]", + "1397": "[-12049.6768 -13124.4834 -4776.6216]", + "1398": "[-11711.4326 -13510.7363 -4776.563]", + "1399": "[-11336.0088 -13869.9072 -4776.7188]", + "1400": "[-10931.9844 -14192.9043 -4776.6074]", + "1401": "[-10503.6387 -14478.9756 -4776.7285]", + "1402": "[-10052.9541 -14729.5098 -4776.6392]", + "1403": "[-9583.2148 -14946.2676 -4776.5679]", + "1404": "[-9100.9346 -15128.7529 -4776.6582]", + "1405": "[-8609.3779 -15279.1768 -4776.5161]", + "1406": "[-8111.4077 -15400.6318 -4776.4629]", + "1407": "[-7600.9043 -15497.4014 -4776.3867]", + "1408": "[-7087.7139 -15569.2646 -4776.4692]", + "1409": "[-6573.314 -15618.8564 -4776.3721]", + "1410": "[-6058.7134 -15648.5117 -4776.3804]", + "1411": "[-5544.6519 -15659.9551 -4776.458]", + "1412": "[-5031.6772 -15663.501 -4776.3174]", + "1413": "[-4511.4878 -15662.8545 -4776.4497]", + "1414": "[-3992.7014 -15662.7461 -4776.4863]", + "1415": "[-3475.4731 -15663.0479 -4776.271]", + "1416": "[-2955.1846 -15662.9131 -4776.4863]", + "1417": "[-2443.0366 -15663.1426 -4776.4648]", + "1418": "[-1923.2946 -15663.1738 -4776.4688]", + "1419": "[-1404.6556 -15662.8281 -4776.4712]", + "1420": "[-887.0888 -15663.0918 -4776.4761]", + "1421": "[-370.6032 -15662.9121 -4776.5527]", + "1422": "[144.7945 -15663.5508 -4776.5156]", + "1423": "[659.0933 -15663.1582 -4776.5029]", + "1424": "[1172.3439 -15662.9365 -4776.498]", + "1425": "[1684.4738 -15663.4307 -4776.5313]", + "1426": "[2204.0464 -15662.8047 -4776.5054]", + "1427": "[2722.479 -15662.6123 -4776.3647]", + "1428": "[3239.783 -15663.0742 -4776.3828]", + "1429": "[3755.6643 -15662.6123 -4776.52]", + "1430": "[4270.1494 -15662.7119 -4776.4102]", + "1431": "[4782.9146 -15659.2227 -4776.3662]", + "1432": "[5301.0796 -15634.7197 -4776.041]", + "1433": "[5812.8438 -15570.1494 -4776.3945]", + "1434": "[6313.1851 -15458.8604 -4776.3584]", + "1435": "[6803.6587 -15287.7246 -4776.5977]", + "1436": "[7264.7173 -15049.1934 -4776.4927]", + "1437": "[7677.4834 -14741.5117 -4776.5928]", + "1438": "[8033.3105 -14364.0605 -4776.5415]", + "1439": "[8317.1025 -13934.8145 -4776.3872]", + "1440": "[8533.3975 -13461.9473 -4776.5845]", + "1441": "[8683.8564 -12966.541 -4776.5181]", + "1442": "[8779.2451 -12456.5645 -4776.3882]", + "1443": "[8827.5957 -11946.3369 -4776.4365]", + "1444": "[8843.7197 -11426.6201 -4776.5]", + "1445": "[8845.4326 -10907.8457 -4776.4834]", + "1446": "[8845.2051 -10390.1982 -4776.5073]", + "1447": "[8844.8789 -9873.6934 -4776.5107]", + "1448": "[8844.5459 -9358.3438 -4776.5176]", + "1449": "[8844.3721 -8844.126 -4776.4668]", + "1450": "[8845.0537 -8331.0244 -4776.46]", + "1451": "[8844.9531 -7810.646 -4776.4541]", + "1452": "[8844.9209 -7291.4048 -4776.4531]", + "1453": "[8844.5742 -6773.3032 -4776.438]", + "1454": "[8844.5537 -6256.3486 -4776.4697]", + "1455": "[8844.6836 -5743.9331 -4776.4473]", + "1456": "[8844.0586 -5231.7178 -4776.4751]", + "1457": "[8844.9209 -4711.9121 -4776.4502]", + "1458": "[8844.2568 -4193.1924 -4776.4546]", + "1459": "[8844.8662 -3675.543 -4776.4531]", + "1460": "[8844.6523 -3158.9827 -4776.4526]", + "1461": "[8844.9961 -2643.5015 -4776.4561]", + "1462": "[8844.8232 -2129.0793 -4776.4795]", + "1463": "[8844.1748 -1615.7401 -4776.4565]", + "1464": "[8845.0469 -1103.4763 -4776.4736]", + "1465": "[8844.3496 -583.7855 -4776.4722]", + "1466": "[8844.6328 -65.1935 -4776.4634]", + "1467": "[8844.5859 452.3054 -4776.457]", + "1468": "[8844.2715 968.7048 -4776.4536]", + "1469": "[8844.6631 1483.9921 -4776.4648]", + "1470": "[8844.6934 1998.1698 -4776.4644]", + "1471": "[8844.5361 2511.2336 -4776.397]", + "1472": "[8844.5 3031.5759 -4776.4648]", + "1473": "[8845.2441 3550.7517 -4776.4619]", + "1474": "[8844.3984 4068.7771 -4776.4561]", + "1475": "[8844.9668 4585.6626 -4776.4531]", + "1476": "[8844.8516 5103.2852 -4776.4517]", + "1477": "[8844.1738 5615.4531 -4776.4839]", + "1478": "[8844.9248 6135.2139 -4776.4731]", + "1479": "[8845.1172 6653.8628 -4776.4585]", + "1480": "[8844.3867 7171.4033 -4776.4219]", + "1481": "[8844.3906 7687.6523 -4776.5005]", + "1482": "[8830.9219 8201.6953 -4776.356]", + "1483": "[8788.208 8712.0098 -4776.3887]", + "1484": "[8699.877 9222.9482 -4776.2568]", + "1485": "[8557.5938 9718.167 -4776.2588]", + "1486": "[8350.0215 10194.8223 -4776.4492]", + "1487": "[8074.8828 10630.9795 -4776.522]", + "1488": "[7727.019 11016.9072 -4776.5977]", + "1489": "[7320.6499 11334.252 -4776.6362]", + "1490": "[6866.7876 11581.3848 -4776.5669]", + "1491": "[6381.9116 11760.1855 -4776.4224]", + "1492": "[5880.9844 11879.5254 -4776.3716]", + "1493": "[5372.3403 11948.7451 -4776.3652]", + "1494": "[4852.8301 11977.876 -4776.4453]", + "1495": "[4333.6304 11984.9395 -4776.416]", + "1496": "[3815.6372 11984.1387 -4776.4727]", + "1497": "[3298.8506 11983.4492 -4776.4902]", + "1498": "[2786.2173 11983.7334 -4776.5132]", + "1499": "[2266.333 11983.5859 -4776.418]", + "1500": "[1747.8673 11983.1016 -4776.5288]", + "1501": "[1230.5017 11983.1182 -4776.5093]", + "1502": "[714.2642 11983.5195 -4776.4561]", + "1503": "[199.1222 11982.7549 -4776.4561]", + "1504": "[-314.9344 11983.1387 -4776.4531]", + "1505": "[-827.9122 11982.8799 -4776.4526]", + "1506": "[-1348.3519 11982.7432 -4776.4727]", + "1507": "[-1867.662 11982.9365 -4776.4102]", + "1508": "[-2385.8464 11983.6182 -4776.4697]", + "1509": "[-2902.9214 11982.8408 -4776.5293]", + "1510": "[-3418.8804 11983.3848 -4776.4219]", + "1511": "[-3933.6724 11982.6904 -4776.4521]", + "1512": "[-4447.3364 11983.3994 -4776.4517]", + "1513": "[-4959.8823 11982.9258 -4776.4497]", + "1514": "[-5475.0205 11982.7275 -4770.168]", + "1515": "[-5990.9111 11983.0361 -4744.0493]", + "1516": "[-6504.6069 11982.7998 -4697.4526]", + "1517": "[-7017.8696 11982.9473 -4641.3359]", + "1518": "[-7529.6963 11983.3096 -4581.3296]", + "1519": "[-8042.0327 11982.8838 -4519.7505]", + "1520": "[-8552.9482 11982.876 -4458.7314]", + "1521": "[-9063.6406 11982.8145 -4398.9629]", + "1522": "[-9577.5049 11983.0781 -4342.8672]", + "1523": "[-10091.7676 11982.9883 -4295.7959]", + "1524": "[-10609.5713 11982.3809 -4270.4033]", + "1525": "[-11125.0898 11983.0879 -4263.5781]", + "1526": "[-11642.25 11980.4639 -4263.4194]", + "1527": "[-12156.5732 11956.5645 -4263.2891]", + "1528": "[-12673.0801 11893.9102 -4263.106]", + "1529": "[-13177.8877 11784.7939 -4263.4971]", + "1530": "[-13663.1484 11618.8057 -4263.4917]", + "1531": "[-14124.4561 11384.8145 -4263.4224]", + "1532": "[-14538.6211 11082.4111 -4263.563]", + "1533": "[-14897.127 10710.2871 -4263.6602]", + "1534": "[-15188.3809 10279.8682 -4263.3682]", + "1535": "[-15407.3047 9811.7461 -4263.3599]", + "1536": "[-15560.9023 9320.5 -4263.4048]", + "1537": "[-15658.5635 8816.9932 -4263.3555]", + "1538": "[-15710.9639 8299.8965 -4263.4253]", + "1539": "[-15727.708 7781.7007 -4263.4233]", + "1540": "[-15729.4375 7264.3877 -4263.5293]", + "1541": "[-15729.9092 6748.2598 -4263.5278]", + "1542": "[-15729.585 6232.0327 -4263.5313]", + "1543": "[-15726.0156 5712.0479 -4263.5688]", + "1544": "[-15713.2432 5193.5391 -4263.2803]", + "1545": "[-15679.5195 4677.2563 -4263.4736]", + "1546": "[-15626.6191 4163.9468 -4263.5]", + "1547": "[-15552.4092 3654.6555 -4263.4082]", + "1548": "[-15453.4561 3150.9734 -4263.5503]", + "1549": "[-15326.1416 2646.4219 -4263.5317]", + "1550": "[-15168.9512 2152.0334 -4263.5508]", + "1551": "[-14981.377 1670.2914 -4263.668]", + "1552": "[-14760.6563 1204.9515 -4263.3989]", + "1553": "[-14505.6689 759.7989 -4263.5459]", + "1554": "[-14211.5986 331.8753 -4263.6191]", + "1555": "[-13883.3721 -67.4946 -4263.5444]", + "1556": "[-13522.7637 -434.3782 -4263.6304]", + "1557": "[-13133.0459 -766.6641 -4263.6147]", + "1558": "[-12714.9443 -1065.8279 -4263.6416]", + "1559": "[-12273.2813 -1329.4893 -4263.5654]", + "1560": "[-11813.9971 -1556.4985 -4263.5479]", + "1561": "[-11333.4229 -1752.6769 -4263.6465]", + "1562": "[-10842.4482 -1915.9412 -4263.5405]", + "1563": "[-10343.9336 -2048.2563 -4263.46]", + "1564": "[-9840.5098 -2153.4124 -4263.4595]", + "1565": "[-9333.917 -2233.1418 -4263.3921]", + "1566": "[-8817.332 -2291.2632 -4263.4146]", + "1567": "[-8300.2188 -2328.356 -4263.3789]", + "1568": "[-7783.4575 -2346.5342 -4263.4648]", + "1569": "[-7266.0884 -2351.6436 -4263.3687]", + "1570": "[-6753.8994 -2351.0286 -4263.4673]", + "1571": "[-6234.146 -2352.1458 -4263.4912]", + "1572": "[-5715.5049 -2351.844 -4263.4702]", + "1573": "[-5197.9683 -2351.9211 -4263.459]", + "1574": "[-4681.4937 -2351.6729 -4263.4551]", + "1575": "[-4166.0894 -2351.4878 -4263.4307]", + "1576": "[-3651.7522 -2351.4478 -4263.459]", + "1577": "[-3138.4978 -2351.6382 -4263.4678]", + "1578": "[-2626.3521 -2352.2695 -4263.4873]", + "1579": "[-2106.9841 -2351.8303 -4263.5562]", + "1580": "[-1589.193 -2351.6917 -4263.5161]", + "1581": "[-1072.8927 -2351.9451 -4263.46]", + "1582": "[-557.7775 -2351.6667 -4263.4229]", + "1583": "[-44.2845 -2351.9807 -4263.4688]", + "1584": "[468.1249 -2351.5928 -4263.4648]", + "1585": "[987.715 -2351.856 -4263.4946]", + "1586": "[1505.7214 -2351.9927 -4263.3354]", + "1587": "[2022.4138 -2352.2434 -4263.3301]", + "1588": "[2539.1086 -2351.5474 -4263.3853]", + "1589": "[3059.675 -2351.7654 -4263.4009]", + "1590": "[3579.1533 -2351.9482 -4263.4561]", + "1591": "[4097.5547 -2351.4412 -4263.4854]", + "1592": "[4614.4492 -2352.2847 -4263.5576]", + "1593": "[5130.2295 -2352.4272 -4263.459]", + "1594": "[5644.8818 -2351.3564 -4263.4487]", + "1595": "[6158.4019 -2352.6697 -4263.4722]", + "1596": "[6670.7964 -2352.0659 -4263.3628]", + "1597": "[7190.5693 -2351.0071 -4263.4595]", + "1598": "[7709.1797 -2352.5728 -4263.4492]", + "1599": "[8226.6309 -2352.2385 -4263.394]", + "1600": "[8742.8857 -2352.1135 -4263.5474]", + "1601": "[9257.9639 -2351.8362 -4263.5059]", + "1602": "[9771.9209 -2352.2336 -4263.4873]", + "1603": "[10284.7373 -2351.9529 -4263.5127]", + "1604": "[10804.5039 -2351.7014 -4263.4873]", + "1605": "[11322.6738 -2351.8577 -4263.4321]", + "1606": "[11839.3135 -2351.1848 -4263.3296]", + "1607": "[12353.4941 -2331.0044 -4263.3589]", + "1608": "[12869.9473 -2276.7046 -4263.3955]", + "1609": "[13375.0596 -2176.3086 -4263.353]", + "1610": "[13870.2021 -2018.9146 -4263.4863]", + "1611": "[14335.7119 -1796.1563 -4263.6191]", + "1612": "[14762.9326 -1499.7594 -4263.3135]", + "1613": "[15129.585 -1138.4442 -4263.6533]", + "1614": "[15431.3477 -715.9349 -4263.5952]", + "1615": "[15660.6875 -253.3936 -4263.5532]", + "1616": "[15824.1387 236.2885 -4263.3452]", + "1617": "[15929.959 744.2368 -4263.4028]", + "1618": "[15987.916 1258.3254 -4263.3101]", + "1619": "[16008.0566 1773.717 -4263.3828]", + "1620": "[16011.7246 2288.1038 -4263.5303]", + "1621": "[16012.3994 2801.2588 -4263.417]", + "1622": "[16011.5635 3321.5972 -4263.5054]", + "1623": "[16011.3613 3840.7356 -4263.4653]", + "1624": "[16011.2734 4358.7251 -4263.4561]", + "1625": "[16011.7148 4875.562 -4263.3989]", + "1626": "[16011.625 5393.8989 -4263.4536]", + "1627": "[16011.7041 5906.0117 -4263.4878]", + "1628": "[16011.5986 6425.7354 -4263.4971]", + "1629": "[16011.582 6944.3696 -4263.4927]", + "1630": "[16011.6318 7461.9033 -4263.4912]", + "1631": "[16011.4707 7978.3843 -4263.4639]", + "1632": "[16011.71 8493.7803 -4263.4561]", + "1633": "[16011.6865 9008.0996 -4263.4536]", + "1634": "[16012.0439 9521.334 -4263.438]", + "1635": "[16011.1172 10033.5068 -4263.4688]", + "1636": "[16012.2715 10553.0928 -4263.4819]", + "1637": "[16011.2617 11071.5527 -4263.4482]", + "1638": "[16012.1572 11588.5674 -4263.4409]", + "1639": "[16004.7168 12104.1123 -4263.4355]", + "1640": "[15973.3057 12616.8594 -4263.3315]", + "1641": "[15898.8994 13131.0361 -4263.415]", + "1642": "[15773.5723 13631.8301 -4263.3179]", + "1643": "[15586.9697 14117.0566 -4263.4741]", + "1644": "[15333.2324 14565.9473 -4263.5381]", + "1645": "[15010.0439 14966.7021 -4263.7119]", + "1646": "[14623.4102 15303.8096 -4263.5752]", + "1647": "[14181.5068 15573.5586 -4263.5205]", + "1648": "[13706.498 15772.7734 -4263.4976]", + "1649": "[13211.9443 15909.5381 -4263.3662]", + "1650": "[12699.3037 15994.6846 -4263.2769]", + "1651": "[12180.7441 16035.3818 -4263.27]", + "1652": "[11666.2197 16046.5615 -4263.4243]", + "1653": "[11153.1416 16046.4014 -4263.4736]", + "1654": "[10632.6602 16047.209 -4263.4531]", + "1655": "[10113.2988 16046.8105 -4263.4526]", + "1656": "[9595.0342 16046.5459 -4263.4268]", + "1657": "[9077.8887 16047.1445 -4263.3716]", + "1658": "[8561.8604 16046.2178 -4263.4663]", + "1659": "[8047.2979 16047.0186 -4262.1621]", + "1660": "[7531.1445 16047.3691 -4244.8091]", + "1661": "[7017.6431 16047.2588 -4206.001]", + "1662": "[6504.2168 16046.6357 -4152.5073]", + "1663": "[5992.9668 16047.3125 -4093.9849]", + "1664": "[5480.5132 16047.2148 -4033.0869]", + "1665": "[4969.5581 16046.834 -3971.6077]", + "1666": "[4457.1436 16046.6309 -3910.9036]", + "1667": "[3943.8406 16046.4854 -3852.7078]", + "1668": "[3429.2078 16046.9043 -3800.627]", + "1669": "[2915.9033 16046.6094 -3765.824]", + "1670": "[2397.146 16046.6621 -3752.0249]", + "1671": "[1884.7185 16046.4023 -3751.3616]", + "1672": "[1365.2025 16047.0605 -3751.4563]", + "1673": "[846.8345 16046.0313 -3751.4524]", + "1674": "[329.6155 16046.5439 -3751.4524]", + "1675": "[-186.4641 16046.4307 -3751.3735]", + "1676": "[-703.0905 16046.623 -3751.4443]", + "1677": "[-1223.1909 16047.0117 -3751.4836]", + "1678": "[-1742.1989 16046.6807 -3751.4358]", + "1679": "[-2260.1428 16046.8711 -3751.3792]", + "1680": "[-2776.9941 16046.5566 -3751.46]", + "1681": "[-3292.7915 16046.6211 -3751.4546]", + "1682": "[-3807.5342 16046.6689 -3751.4534]", + "1683": "[-4321.2246 16046.6221 -3751.4558]", + "1684": "[-4833.8579 16046.8379 -3751.4744]", + "1685": "[-5353.9258 16046.2549 -3751.4656]", + "1686": "[-5872.626 16047.292 -3751.4246]", + "1687": "[-6389.9224 16046.6191 -3751.436]", + "1688": "[-6906.0425 16046.5898 -3751.4519]", + "1689": "[-7420.9116 16046.7871 -3751.4592]", + "1690": "[-7934.2412 16046.9395 -3751.4719]", + "1691": "[-8446.4756 16046.2617 -3751.4409]", + "1692": "[-8965.9365 16047.0713 -3751.4707]", + "1693": "[-9484.2031 16047.3613 -3751.5278]", + "1694": "[-10000.9697 16046.3486 -3751.5461]", + "1695": "[-10521.5918 16046.9082 -3751.5149]", + "1696": "[-11041.8672 16046.4365 -3751.4312]", + "1697": "[-11560.8506 16045.7607 -3751.53]", + "1698": "[-12077.4795 16025.7461 -3751.3499]", + "1699": "[-12589.4639 15971.4941 -3751.2568]", + "1700": "[-13091.7354 15872 -3751.3608]", + "1701": "[-13584.5264 15714.8643 -3751.4897]", + "1702": "[-14047.7637 15494.0234 -3751.4319]", + "1703": "[-14473.7217 15200.5859 -3751.6106]", + "1704": "[-14840.4287 14842.0732 -3751.5762]", + "1705": "[-15142.501 14422.4619 -3751.6768]", + "1706": "[-15374.6641 13958.2813 -3751.5042]", + "1707": "[-15539.7109 13466.7656 -3751.4819]", + "1708": "[-15646.1699 12961.2256 -3751.3381]", + "1709": "[-15704.9727 12449.6709 -3751.4526]", + "1710": "[-15726.0156 11936.4414 -3751.3672]", + "1711": "[-15730.0449 11423.8867 -3751.46]", + "1712": "[-15729.9629 10904.1016 -3751.4551]", + "1713": "[-15729.5723 10385.4795 -3751.447]", + "1714": "[-15729.3691 9868.0137 -3751.4524]", + "1715": "[-15729.2861 9351.6885 -3751.4612]", + "1716": "[-15729.9727 8831.0996 -3751.3916]", + "1717": "[-15729.5986 8310.793 -3751.5015]", + "1718": "[-15729.752 7791.5527 -3751.4851]", + "1719": "[-15729.6826 7273.3931 -3751.4871]", + "1720": "[-15729.8145 6756.2944 -3751.457]", + "1721": "[-15729.1123 6240.2661 -3751.4514]", + "1722": "[-15729.8506 5725.3159 -3751.4524]", + "1723": "[-15729.5879 5211.4443 -3751.5056]", + "1724": "[-15729.8174 4698.6343 -3751.4031]", + "1725": "[-15729.7129 4178.3672 -3751.4397]", + "1726": "[-15714.0186 3661.4973 -3751.324]", + "1727": "[-15645.1846 3147.7048 -3751.2131]", + "1728": "[-15496.709 2657.0972 -3751.6909]", + "1729": "[-15279.623 2187.4736 -3751.5535]", + "1730": "[-15011.7285 1749.636 -3751.4194]", + "1731": "[-14698.252 1334.5842 -3751.2124]", + "1732": "[-14353.9717 947.7053 -3751.4202]", + "1733": "[-13994.1064 576.8898 -3751.4924]", + "1734": "[-13628.8145 213.1095 -3751.3896]", + "1735": "[-13265.3281 -150.8817 -3751.4229]", + "1736": "[-12902.4727 -513.9404 -3751.3223]", + "1737": "[-12540.0996 -875.9631 -3751.4321]", + "1738": "[-12172.9863 -1243.5355 -3751.4233]", + "1739": "[-11806.4346 -1610.0522 -3751.4248]", + "1740": "[-11440.9326 -1975.6772 -3751.4426]", + "1741": "[-11078.874 -2337.7012 -3751.4753]", + "1742": "[-10712.3037 -2703.7551 -3751.4224]", + "1743": "[-10348.7148 -3069.0403 -3751.3979]", + "1744": "[-9984.9473 -3430.5068 -3751.4697]", + "1745": "[-9618.9561 -3798.1919 -3751.4563]", + "1746": "[-9253.7031 -4162.4219 -3751.3662]", + "1747": "[-8891.4287 -4524.8398 -3751.3691]", + "1748": "[-8524.1357 -4892.5649 -3751.387]", + "1749": "[-8157.4541 -5260.168 -3751.4475]", + "1750": "[-7791.9238 -5624.6465 -3751.5203]", + "1751": "[-7433.6919 -5992.1079 -3751.5698]", + "1752": "[-7087.3618 -6377.5435 -3751.502]", + "1753": "[-6773.2969 -6785.0483 -3751.3318]", + "1754": "[-6477.249 -7212.9639 -3751.4561]", + "1755": "[-6190.4756 -7645.2271 -3751.5303]", + "1756": "[-5902.2651 -8075.0718 -3751.4336]", + "1757": "[-5615.52 -8504.4824 -3751.4629]", + "1758": "[-5327.1528 -8936.0674 -3751.46]", + "1759": "[-5038.021 -9368.6719 -3751.4563]", + "1760": "[-4749.5049 -9800.4043 -3751.4539]", + "1761": "[-4456.8823 -10226.6719 -3751.4045]", + "1762": "[-4144.6597 -10634.7764 -3751.6162]", + "1763": "[-3799.1387 -11023.0947 -3751.3613]", + "1764": "[-3437.7209 -11394.5244 -3751.4348]", + "1765": "[-3072.5986 -11759.5449 -3751.4937]", + "1766": "[-2708.6145 -12124.002 -3751.4092]", + "1767": "[-2345.1003 -12486.4248 -3751.406]", + "1768": "[-1971.5873 -12848.1631 -3751.4573]", + "1769": "[-1589.1665 -13197.8389 -3751.4109]", + "1770": "[-1194.4374 -13531.4375 -3751.3091]", + "1771": "[-787.2825 -13847.5078 -3751.3979]", + "1772": "[-364.2501 -14146.501 -3751.5566]", + "1773": "[73.6299 -14423.501 -3751.6541]", + "1774": "[525.4905 -14673.7666 -3751.4509]", + "1775": "[990.069 -14895.6367 -3751.5786]", + "1776": "[1467.0348 -15084.6152 -3751.4375]", + "1777": "[1963.1005 -15239.377 -3751.6584]", + "1778": "[2468.0027 -15353.3057 -3751.749]", + "1779": "[2978.5271 -15424.1396 -3751.5215]", + "1780": "[3490.9658 -15450.3916 -3751.5955]", + "1781": "[4009.8442 -15430.9961 -3751.6707]", + "1782": "[4522.6504 -15366.0391 -3751.5598]", + "1783": "[5026.0615 -15258.375 -3751.689]", + "1784": "[5523.4453 -15109.4287 -3751.4922]", + "1785": "[6006.1758 -14923.8682 -3751.5417]", + "1786": "[6473.6387 -14706.4092 -3751.4316]", + "1787": "[6924.9282 -14460.5566 -3751.5452]", + "1788": "[7360.1128 -14190.208 -3751.4521]", + "1789": "[7786.5718 -13893.8545 -3751.4399]", + "1790": "[8197.4482 -13578.6211 -3751.4912]", + "1791": "[8593.9639 -13247.5508 -3751.52]", + "1792": "[8976.4004 -12902.2334 -3751.4253]", + "1793": "[9346.7725 -12545.7559 -3751.4575]", + "1794": "[9710.1807 -12184.2529 -3751.4131]", + "1795": "[10077.543 -11816.8271 -3751.5029]", + "1796": "[10444.3691 -11450.5518 -3751.5281]", + "1797": "[10808.2871 -11083.5068 -3751.3669]", + "1798": "[11164.417 -10711.0039 -3751.3831]", + "1799": "[11510.1318 -10322.3525 -3751.4587]", + "1800": "[11839.6064 -9921.4668 -3751.5474]", + "1801": "[12151.3682 -9508.3281 -3751.4463]", + "1802": "[12441.6875 -9081.6826 -3751.4341]", + "1803": "[12708.7197 -8641.8311 -3751.5295]", + "1804": "[12949.0244 -8188.5933 -3751.4927]", + "1805": "[13162.2344 -7714.5752 -3751.5879]", + "1806": "[13340.6455 -7228.4395 -3751.541]", + "1807": "[13481.4277 -6732.1157 -3751.6311]", + "1808": "[13580.5625 -6227.957 -3751.6946]", + "1809": "[13636.9785 -5711.0503 -3751.7312]", + "1810": "[13647.6924 -5193.4102 -3751.6782]", + "1811": "[13612.8838 -4678.9863 -3751.6257]", + "1812": "[13533.6641 -4171.6797 -3751.6389]", + "1813": "[13411.3652 -3667.3577 -3751.6995]", + "1814": "[13250.2334 -3177.6453 -3751.582]", + "1815": "[13054.9961 -2702.5144 -3751.5962]", + "1816": "[12824.9307 -2235.667 -3751.5503]", + "1817": "[12567.6221 -1785.188 -3751.479]", + "1818": "[12286.665 -1350.9402 -3751.4919]", + "1819": "[11985.2158 -932.4088 -3751.365]", + "1820": "[11665.8955 -529.0475 -3751.2844]", + "1821": "[11331.4521 -139.8286 -3751.333]", + "1822": "[10978.3242 242.2102 -3751.3953]", + "1823": "[10615.4766 613.2404 -3751.4197]", + "1824": "[10249.5078 979.3846 -3751.4185]", + "1825": "[9884.5117 1344.8264 -3751.4146]", + "1826": "[9520.7168 1709.0782 -3750.8811]", + "1827": "[9153.0752 2076.1172 -3735.1736]", + "1828": "[8790.6104 2439.8835 -3698.4102]", + "1829": "[8428.0801 2802.4736 -3645.876]", + "1830": "[8065.5479 3164.7573 -3587.5725]", + "1831": "[7702.8149 3526.9482 -3526.6543]", + "1832": "[7341.582 3888.9089 -3465.1877]", + "1833": "[6978.729 4251.0264 -3404.0349]", + "1834": "[6615.6411 4613.4009 -3345.6514]", + "1835": "[6253.063 4976.1807 -3293.0776]", + "1836": "[5888.1338 5341.8594 -3256.0239]", + "1837": "[5523.4761 5706.3218 -3240.8042]", + "1838": "[5158.4526 6072.4424 -3239.5308]", + "1839": "[4793.4106 6436.6626 -3239.4932]", + "1840": "[4430.1069 6801.0708 -3239.4556]", + "1841": "[4066.364 7163.5044 -3239.4561]", + "1842": "[3704.1794 7525.9893 -3239.4534]", + "1843": "[3336.8164 7893.8247 -3239.5098]", + "1844": "[2970.1558 8260.7861 -3239.4495]", + "1845": "[2603.6809 8626.4043 -3239.4651]", + "1846": "[2238.8547 8992.0742 -3239.4453]", + "1847": "[1873.9344 9356.0176 -3239.4575]", + "1848": "[1510.4927 9719.7979 -3239.4768]", + "1849": "[1147.969 10082.9287 -3239.4607]", + "1850": "[785.7878 10444.8594 -3239.4551]", + "1851": "[418.4886 10811.9453 -3239.4526]", + "1852": "[52.0138 11178.2705 -3239.4526]", + "1853": "[-313.0872 11544.3496 -3239.4539]", + "1854": "[-679.079 11909.5088 -3239.5273]", + "1855": "[-1041.3788 12271.6729 -3239.446]", + "1856": "[-1408.9733 12639.3047 -3239.4709]", + "1857": "[-1775.7545 13006.2451 -3239.4558]", + "1858": "[-2142.0674 13372.1523 -3239.4534]", + "1859": "[-2507.3848 13737.5449 -3239.4524]", + "1860": "[-2871.8101 14102.3174 -3239.4897]", + "1861": "[-3235.3325 14466.4658 -3239.4802]", + "1862": "[-3600.0757 14827.6748 -3239.3069]", + "1863": "[-3993.9675 15162.1641 -3239.3516]", + "1864": "[-4428.772 15441.9229 -3239.3762]", + "1865": "[-4896.9976 15651.6553 -3239.5581]", + "1866": "[-5394.1973 15799.2324 -3239.5447]", + "1867": "[-5905.4771 15892.6533 -3239.5693]", + "1868": "[-6415.522 15940.998 -3239.3608]", + "1869": "[-6933.6748 15950.0742 -3239.0413]", + "1870": "[-7448.291 15919.9619 -3239.5386]", + "1871": "[-7956.1133 15846.2832 -3239.4001]", + "1872": "[-8458.8848 15720.0732 -3239.4517]", + "1873": "[-8939.1973 15534.9707 -3239.4353]", + "1874": "[-9391.209 15280.084 -3239.5588]", + "1875": "[-9791.7314 14956.9238 -3239.4172]", + "1876": "[-10130.1631 14568.3994 -3239.583]", + "1877": "[-10397.543 14130.2197 -3239.5835]", + "1878": "[-10598.6738 13651.5547 -3239.4399]", + "1879": "[-10735.9434 13152.9736 -3239.4055]", + "1880": "[-10820.0088 12644.373 -3239.3022]", + "1881": "[-10859.9277 12132.0068 -3239.4587]", + "1882": "[-10871.7461 11619.6396 -3238.6946]", + "1883": "[-10871.8076 11103.1826 -3222.8735]", + "1884": "[-10872.0449 10588.0732 -3185.6699]", + "1885": "[-10872.3604 10075.0732 -3132.856]", + "1886": "[-10871.9229 9563.8926 -3074.7371]", + "1887": "[-10871.9648 9052.123 -3013.8267]", + "1888": "[-10871.8545 8539.9912 -2952.2734]", + "1889": "[-10871.8428 8029.1304 -2891.4824]", + "1890": "[-10871.1904 7516.3853 -2833.1621]", + "1891": "[-10871.4014 7003.1455 -2780.5979]", + "1892": "[-10871.4775 6486.1602 -2743.5813]", + "1893": "[-10871.9326 5969.5869 -2728.8359]", + "1894": "[-10870.4229 5456.2339 -2727.4902]", + "1895": "[-10870.4463 4935.7402 -2727.3772]", + "1896": "[-10871.8271 4416.4229 -2727.4478]", + "1897": "[-10871.3545 3898.4897 -2727.4338]", + "1898": "[-10870.2744 3381.8643 -2727.4702]", + "1899": "[-10870.9775 2866.3523 -2727.3303]", + "1900": "[-10871.668 2352.0112 -2727.491]", + "1901": "[-10870.6299 1838.8138 -2727.4773]", + "1902": "[-10870.627 1318.432 -2727.4712]", + "1903": "[-10872.002 799.2529 -2727.5066]", + "1904": "[-10871.1006 281.3285 -2727.4299]", + "1905": "[-10870.4717 -235.3656 -2727.4875]", + "1906": "[-10871.1006 -749.4357 -2727.4949]", + "1907": "[-10871.1699 -1270.0343 -2727.4187]", + "1908": "[-10870.7803 -1789.5389 -2727.4556]", + "1909": "[-10871.0127 -2307.9685 -2727.4175]", + "1910": "[-10871.5771 -2825.3162 -2727.5518]", + "1911": "[-10870.96 -3341.5859 -2727.4277]", + "1912": "[-10870.957 -3856.7168 -2727.4934]", + "1913": "[-10866.1318 -4370.605 -2727.4304]", + "1914": "[-10834.3086 -4889.624 -2727.4448]", + "1915": "[-10760.0488 -5398.8657 -2727.3247]", + "1916": "[-10658.4199 -5905.7197 -2727.3599]", + "1917": "[-10546.8281 -6408.1221 -2727.1309]", + "1918": "[-10406.7998 -6904.1226 -2727.428]", + "1919": "[-10224.2881 -7386.312 -2727.4836]", + "1920": "[-9993.2676 -7844.125 -2727.5728]", + "1921": "[-9705.2402 -8274.4805 -2727.3845]", + "1922": "[-9359.9268 -8654.9873 -2727.1841]", + "1923": "[-8964.29 -8992.3008 -2727.1165]", + "1924": "[-8577.2793 -9336.835 -2727.106]", + "1925": "[-8246.8135 -9729.5391 -2727.3794]", + "1926": "[-7970.8242 -10167.8564 -2727.4724]", + "1927": "[-7750.2114 -10634 -2727.5103]", + "1928": "[-7578.3252 -11117.6367 -2727.3608]", + "1929": "[-7444.6006 -11619.6182 -2727.3889]", + "1930": "[-7334.6924 -12125.7305 -2727.4192]", + "1931": "[-7234.5894 -12632.458 -2727.1868]", + "1932": "[-7116.3667 -13136.6035 -2727.4802]", + "1933": "[-6967.9082 -13632.918 -2727.4194]", + "1934": "[-6777.3003 -14112.0664 -2727.4604]", + "1935": "[-6531.7192 -14570.6084 -2727.5027]", + "1936": "[-6229.7144 -14989.6055 -2727.5178]", + "1937": "[-5869.397 -15354.0381 -2727.5479]", + "1938": "[-5449.4233 -15654.6025 -2727.5286]", + "1939": "[-4987.3926 -15876.0928 -2727.5271]", + "1940": "[-4490.8486 -16021.543 -2727.5361]", + "1941": "[-3979.4612 -16095.6055 -2727.5156]", + "1942": "[-3459.644 -16108.4629 -2727.3335]", + "1943": "[-2942.5085 -16071.252 -2727.5396]", + "1944": "[-2431.0613 -15994.5547 -2727.4734]", + "1945": "[-1923.8619 -15899.1904 -2727.3999]", + "1946": "[-1419.0427 -15798.1426 -2727.4771]", + "1947": "[-915.4288 -15697.0381 -2727.4016]", + "1948": "[-413.1798 -15595.7256 -2727.2839]", + "1949": "[90.6734 -15473.2568 -2727.3237]", + "1950": "[581.9183 -15315.3916 -2727.4634]", + "1951": "[1054.0582 -15114.5674 -2727.4194]", + "1952": "[1504.5045 -14858.4717 -2727.3965]", + "1953": "[1913.9271 -14543.1914 -2727.6067]", + "1954": "[2268.04 -14166.8213 -2727.5005]", + "1955": "[2549.8289 -13738.8877 -2727.4287]", + "1956": "[2755.9236 -13264.8994 -2727.6052]", + "1957": "[2884.2241 -12767.1367 -2727.4392]", + "1958": "[2943.9856 -12250.5898 -2727.3167]", + "1959": "[2945.3538 -11732.1455 -2727.2908]", + "1960": "[2898.9709 -11219.834 -2727.3923]", + "1961": "[2816.7363 -10713.2598 -2727.3745]", + "1962": "[2719.792 -10210.3701 -2727.5493]", + "1963": "[2619.6636 -9701.4141 -2727.4756]", + "1964": "[2517.1514 -9195.2393 -2727.5168]", + "1965": "[2416.6826 -8690.3213 -2727.5042]", + "1966": "[2317.7324 -8186.4912 -2727.46]", + "1967": "[2217.3525 -7684.1499 -2727.4915]", + "1968": "[2115.5842 -7174.7285 -2727.4727]", + "1969": "[2015.0288 -6666.2529 -2727.4802]", + "1970": "[1913.3762 -6159.1753 -2727.3076]", + "1971": "[1812.4227 -5651.1602 -2727.302]", + "1972": "[1711.4368 -5141.3447 -2727.5037]", + "1973": "[1610.3785 -4632.8169 -2727.4014]", + "1974": "[1510.5343 -4125.3896 -2727.3362]", + "1975": "[1408.6396 -3619.488 -2727.5059]", + "1976": "[1308.6597 -3114.364 -2727.531]", + "1977": "[1209.1177 -2610.3096 -2727.5222]", + "1978": "[1108.3109 -2107.6667 -2727.4612]", + "1979": "[1006.8449 -1597.5774 -2727.5415]", + "1980": "[905.4391 -1088.603 -2727.45]", + "1981": "[804.9708 -580.5711 -2727.509]", + "1982": "[703.9757 -73.7582 -2727.5186]", + "1983": "[602.9025 431.9398 -2727.4673]", + "1984": "[503.005 936.6994 -2727.5112]", + "1985": "[402.7975 1440.2087 -2727.4185]", + "1986": "[322.6355 1952.5964 -2727.4014]", + "1987": "[280.0528 2463.4827 -2727.4434]", + "1988": "[270.8343 2983.2593 -2727.51]", + "1989": "[272.6052 3501.2268 -2727.3596]", + "1990": "[271.7754 4017.7004 -2727.4919]", + "1991": "[271.0296 4532.998 -2727.5291]", + "1992": "[272.5186 5047.1504 -2727.4194]", + "1993": "[271.791 5560.1396 -2727.5896]", + "1994": "[272.0433 6076.7866 -2719.0151]", + "1995": "[272.0415 6590.8818 -2691.0046]", + "1996": "[271.8534 7104.3916 -2642.6917]", + "1997": "[272.05 7618.6431 -2585.6355]", + "1998": "[272.1549 8129.7363 -2525.4744]", + "1999": "[271.7199 8642.0361 -2463.9031]", + "2000": "[271.4669 9153.7529 -2402.6172]", + "2001": "[271.4628 9666.0068 -2342.9619]", + "2002": "[271.4165 10178.1182 -2287.7825]", + "2003": "[271.5657 10693.3203 -2242.9204]", + "2004": "[277.2374 11211.791 -2219.303]", + "2005": "[303.9093 11729.8633 -2214.5027]", + "2006": "[370.4565 12238.1035 -2214.3389]", + "2007": "[485.9474 12741.4844 -2214.0059]", + "2008": "[661.1917 13230.459 -2214.4431]", + "2009": "[904.1228 13687.9639 -2214.5234]", + "2010": "[1216.402 14096.9541 -2214.8167]", + "2011": "[1597.3217 14448.2383 -2214.4229]", + "2012": "[2029.1357 14727.9648 -2214.6116]", + "2013": "[2503.9973 14939.8877 -2214.5562]", + "2014": "[3000.4026 15086.4688 -2214.4192]", + "2015": "[3510.5471 15178.9766 -2214.4351]", + "2016": "[4028.3081 15225.0752 -2214.1729]", + "2017": "[4545.7949 15230.7314 -2214.52]", + "2018": "[5059.8999 15198.8525 -2214.5234]", + "2019": "[5567.3359 15124.0703 -2214.4392]", + "2020": "[6069.0771 14996.0547 -2214.7222]", + "2021": "[6546.9287 14809.5674 -2214.4922]", + "2022": "[6997.3599 14552.874 -2214.1716]", + "2023": "[7397.5786 14225.8936 -2214.3833]", + "2024": "[7731.9258 13837.5215 -2214.6208]", + "2025": "[7999.499 13394.3184 -2214.5522]", + "2026": "[8196.7939 12918.3105 -2214.5928]", + "2027": "[8331.6406 12423.0596 -2214.4656]", + "2028": "[8415.2529 11909.9482 -2214.4771]", + "2029": "[8454.5332 11393.4824 -2214.426]", + "2030": "[8465.1602 10876.8428 -2214.7981]", + "2031": "[8464.8643 10357.8379 -2215.0447]", + "2032": "[8465.3906 9837.3203 -2215.4641]", + "2033": "[8465.2246 9318.2246 -2215.531]", + "2034": "[8464.5625 8800.2295 -2215.4919]", + "2035": "[8465.2275 8283.3643 -2215.3872]", + "2036": "[8465.1289 7769.1074 -2214.6707]", + "2037": "[8464.834 7253.5366 -2214.6423]", + "2038": "[8465.2549 6734.7109 -2214.4688]", + "2039": "[8466.0107 6217.98 -2214.2859]", + "2040": "[8465.5322 5703.7085 -2214.5327]", + "2041": "[8465.0986 5183.418 -2214.4011]", + "2042": "[8465.1748 4664.4307 -2214.5149]", + "2043": "[8464.9785 4146.8394 -2214.4526]", + "2044": "[8464.8281 3630.749 -2214.5256]", + "2045": "[8464.7334 3115.7971 -2214.4363]", + "2046": "[8464.9844 2601.8835 -2215.0549]", + "2047": "[8464.5908 2089.1357 -2215.25]", + "2048": "[8464.6963 1568.9832 -2215.4858]", + "2049": "[8464.8994 1049.9244 -2215.4827]", + "2050": "[8465.0508 532.0253 -2215.6187]", + "2051": "[8464.9707 15.2572 -2215.4993]", + "2052": "[8464.4805 -500.3689 -2215.4856]", + "2053": "[8465.5156 -1014.8588 -2215.4497]", + "2054": "[8465.3066 -1528.1608 -2215.4609]", + "2055": "[8464.6084 -2040.3241 -2215.396]", + "2056": "[8464.585 -2559.7083 -2215.417]", + "2057": "[8465.7314 -3077.8623 -2215.5166]", + "2058": "[8465.001 -3594.7747 -2215.5083]", + "2059": "[8464.3721 -4115.0552 -2215.4607]", + "2060": "[8464.7402 -4627.1978 -2215.5469]", + "2061": "[8465.4678 -5146.9126 -2215.4404]", + "2062": "[8464.8086 -5665.5459 -2215.5242]", + "2063": "[8465.0527 -6183.1108 -2215.522]", + "2064": "[8463.9619 -6699.2881 -2215.5015]", + "2065": "[8455.3926 -7213.814 -2215.4089]", + "2066": "[8430.4893 -7726.0361 -2215.3743]", + "2067": "[8385.8389 -8243.2314 -2215.5039]", + "2068": "[8320.4307 -8756.498 -2215.4668]", + "2069": "[8231.085 -9263.8789 -2215.5071]", + "2070": "[8116.4282 -9763.6514 -2215.5942]", + "2071": "[7972.2515 -10262.2178 -2215.5627]", + "2072": "[7798.6001 -10746.3721 -2215.5649]", + "2073": "[7593.2524 -11215.5938 -2215.5581]", + "2074": "[7350.2358 -11673.9873 -2215.4966]", + "2075": "[7072.6543 -12109.4551 -2215.5437]", + "2076": "[6760.8584 -12518.3916 -2215.5496]", + "2077": "[6415.876 -12896.8379 -2215.6201]", + "2078": "[6034.3613 -13247.8018 -2215.5857]", + "2079": "[5625.1553 -13562.2998 -2215.6079]", + "2080": "[5192.646 -13839.9902 -2215.6633]", + "2081": "[4733.8037 -14085.3613 -2215.5771]", + "2082": "[4259.5225 -14294.8027 -2215.499]", + "2083": "[3769.9099 -14471.1592 -2215.3462]", + "2084": "[3270.0857 -14616.3457 -2215.4727]", + "2085": "[2764.3501 -14732.5879 -2215.4124]", + "2086": "[2254.5725 -14822.1045 -2215.5334]", + "2087": "[1742.4607 -14887.8945 -2215.373]", + "2088": "[1229.9427 -14931.835 -2215.5498]", + "2089": "[717.5089 -14956.9395 -2215.4963]", + "2090": "[201.2818 -14965.6338 -2205.9255]", + "2091": "[-314.1047 -14966.9717 -2177.2625]", + "2092": "[-827.9447 -14966.8477 -2128.1462]", + "2093": "[-1340.9581 -14966.9316 -2070.9277]", + "2094": "[-1852.4235 -14966.8418 -2010.6675]", + "2095": "[-2364.7593 -14967.0098 -1948.7751]", + "2096": "[-2876.3613 -14967.7275 -1886.2521]", + "2097": "[-3387.4258 -14967.0391 -1823.8809]", + "2098": "[-3899.9749 -14967.3369 -1762.4535]", + "2099": "[-4412.9346 -14967.9482 -1702.9175]", + "2100": "[-4926.8716 -14967.4658 -1648.0052]", + "2101": "[-5442.5283 -14966.8896 -1604.505]", + "2102": "[-5960.8887 -14967.4775 -1583.0862]", + "2103": "[-6473.7939 -14967.9316 -1579.4832]", + "2104": "[-6992.5557 -14963.8877 -1579.4279]", + "2105": "[-7509.5332 -14949.9834 -1579.3596]", + "2106": "[-8021.3252 -14919.1582 -1579.3447]", + "2107": "[-8538.6631 -14866.6699 -1579.4978]", + "2108": "[-9050.7637 -14791.6045 -1579.6456]", + "2109": "[-9557.1143 -14693.2686 -1579.6365]", + "2110": "[-10054.9863 -14568.6816 -1579.4285]", + "2111": "[-10550.6426 -14412.7051 -1579.5786]", + "2112": "[-11032.7568 -14225.8691 -1579.5564]", + "2113": "[-11498.7744 -14006.291 -1579.4744]", + "2114": "[-11944.6914 -13752.6748 -1579.5212]", + "2115": "[-12372.6357 -13460.3105 -1579.5502]", + "2116": "[-12773.2588 -13133.1943 -1579.4659]", + "2117": "[-13145.4648 -12770.0352 -1579.6794]", + "2118": "[-13482.1816 -12376.6553 -1579.4897]", + "2119": "[-13782.4365 -11957.2842 -1579.5964]", + "2120": "[-14046.1895 -11516.3232 -1579.5548]", + "2121": "[-14273.917 -11057.7529 -1579.5668]", + "2122": "[-14470.3047 -10577.8906 -1579.5786]", + "2123": "[-14633.5693 -10087.6973 -1579.4366]", + "2124": "[-14765.959 -9590.1074 -1579.6086]", + "2125": "[-14871.7695 -9087.9355 -1579.5339]", + "2126": "[-14953.6172 -8574.1846 -1579.4475]", + "2127": "[-15011.0576 -8058.5298 -1579.4019]", + "2128": "[-15048.6016 -7542.5439 -1579.5203]", + "2129": "[-15067.127 -7024.8643 -1579.5908]", + "2130": "[-15071.8408 -6504.936 -1579.4937]", + "2131": "[-15072.2549 -5986.0752 -1579.4507]", + "2132": "[-15072.7734 -5468.3623 -1579.4719]", + "2133": "[-15072.6484 -4951.7979 -1579.4373]", + "2134": "[-15072.3535 -4436.3755 -1579.4756]", + "2135": "[-15072.041 -3922.0266 -1579.4369]", + "2136": "[-15072.4756 -3409.1521 -1578.0748]", + "2137": "[-15071.7939 -2894.7646 -1560.6061]", + "2138": "[-15071.8369 -2380.8374 -1521.498]", + "2139": "[-15071.709 -1867.899 -1468.0275]", + "2140": "[-15072.2412 -1355.7634 -1409.1959]", + "2141": "[-15072.1309 -844.0811 -1348.0105]", + "2142": "[-15071.5547 -332.1529 -1285.8621]", + "2143": "[-15072.1094 180.0818 -1222.8956]", + "2144": "[-15072.8818 691.6774 -1160.1714]", + "2145": "[-15071.8398 1202.599 -1097.589]", + "2146": "[-15071.2197 1714.6967 -1034.7729]", + "2147": "[-15072.2598 2226.082 -972.0891]", + "2148": "[-15071.6924 2736.5115 -909.1253]", + "2149": "[-15071.5645 3249.1765 -846.725]", + "2150": "[-15071.8789 3760.7126 -783.4699]", + "2151": "[-15072.3701 4272.2524 -720.6637]", + "2152": "[-15071.9336 4782.9443 -657.9728]", + "2153": "[-15071.6758 5295.0791 -595.197]", + "2154": "[-15071.9678 5808.0605 -532.3126]", + "2155": "[-15072.1563 6319.272 -469.5245]", + "2156": "[-15072.0215 6831.395 -406.5273]", + "2157": "[-15071.3604 7343.2695 -343.7542]", + "2158": "[-15071.6543 7854.5181 -280.9847]", + "2159": "[-15071.6895 8366.6807 -218.0997]", + "2160": "[-15072.0166 8878.5039 -155.2752]", + "2161": "[-15072.415 9389.7363 -93.1601]", + "2162": "[-15072.3848 9902.0107 -32.2062]", + "2163": "[-15072.3447 10414.9473 26.4101]", + "2164": "[-15072.3857 10927.4404 78.9809]", + "2165": "[-15072.335 11443.3164 116.2648]", + "2166": "[-15055.8281 11961.585 128.874]", + "2167": "[-14999.1865 12475.6484 125.973]", + "2168": "[-14870.4971 12975.2041 121.761]", + "2169": "[-14689.835 13372.2744 119.0678]", + "2170": "[-14482.8896 13672.5068 117.9796]", + "2171": "[-14246.5674 13911.5791 118.0324]", + "2172": "[-13940.4131 14128.0537 119.064]", + "2173": "[-13577.5654 14298.9326 121.4478]", + "2174": "[-13082.4902 14435.8818 125.5355]", + "2175": "[-12570.4707 14500.9307 130.8674]", + "2176": "[-12053.3975 14519.4473 148.0097]", + "2177": "[-11541.4014 14518.9775 183.5476]", + "2178": "[-11026.7627 14520.0039 235.824]", + "2179": "[-10514.3604 14520.9756 294.0156]", + "2180": "[-10002.0439 14519.998 354.7366]", + "2181": "[-9490.3711 14519.7998 416.1696]", + "2182": "[-8977.5088 14520.4805 477.1253]", + "2183": "[-8466.3838 14520.8262 535.5989]", + "2184": "[-7953.1128 14520.5381 588.7958]", + "2185": "[-7439.1821 14520.4199 627.5622]", + "2186": "[-6923.1689 14519.8574 643.5084]", + "2187": "[-6407.1782 14520.7373 645.4828]", + "2188": "[-5889.0151 14519.8438 645.5515]", + "2189": "[-5371.9277 14520.4453 645.621]", + "2190": "[-4855.8999 14520.4844 645.5226]", + "2191": "[-4340.9497 14520.5225 645.5137]", + "2192": "[-3827.0903 14519.9326 645.5916]", + "2193": "[-3314.3564 14520.1279 645.5922]", + "2194": "[-2794.2666 14521.0967 645.5259]", + "2195": "[-2275.3652 14520.0518 645.5421]", + "2196": "[-1757.6169 14520.4951 645.5017]", + "2197": "[-1240.9806 14520.3154 645.5173]", + "2198": "[-725.4647 14520.3164 645.4966]", + "2199": "[-211.0622 14520.7295 645.5145]", + "2200": "[302.2231 14519.9971 645.5337]", + "2201": "[814.408 14520.5557 645.6238]", + "2202": "[1333.8622 14520.3721 645.5334]", + "2203": "[1852.1725 14520.791 645.5406]", + "2204": "[2369.3359 14519.7822 645.5236]", + "2205": "[2885.4724 14520.499 645.6393]", + "2206": "[3397.7903 14520.0703 645.6024]", + "2207": "[3917.8521 14520.7217 645.5403]", + "2208": "[4436.8135 14519.9707 645.5107]", + "2209": "[4955.0952 14520.1865 643.3448]", + "2210": "[5469.1196 14520.0635 625.3154]", + "2211": "[5983.625 14519.8613 584.8334]", + "2212": "[6496.8701 14519.8037 530.8705]", + "2213": "[7008.7876 14519.9629 472.0246]", + "2214": "[7521.9512 14520.1006 410.9412]", + "2215": "[8034.5552 14520.375 348.373]", + "2216": "[8547.4609 14520.4463 285.4099]", + "2217": "[9059.5498 14520.2197 222.5441]", + "2218": "[9572.7119 14520.6436 159.5418]", + "2219": "[10084.2861 14520.334 96.6882]", + "2220": "[10597.2646 14520.126 33.6729]", + "2221": "[11108.6475 14521.0381 -29.0501]", + "2222": "[11621.5869 14519.2363 -94.4917]", + "2223": "[12134.6143 14496.6172 -163.3069]", + "2224": "[12643.875 14437.4307 -230.1989]", + "2225": "[13147.2373 14331.6104 -284.3442]", + "2226": "[13638.4199 14172.2979 -323.2578]", + "2227": "[14099.2314 13943.2676 -349.8283]", + "2228": "[14486.7764 13657.5342 -366.0634]", + "2229": "[14836.1953 13290.1641 -374.9946]", + "2230": "[15112.9502 12872.8828 -377.6241]", + "2231": "[15322.2539 12401.7666 -376.4571]", + "2232": "[15458.9063 11899.7588 -373.6023]", + "2233": "[15536.8213 11391.0176 -370.3062]", + "2234": "[15571.1758 10878.6475 -366.1371]", + "2235": "[15570.6895 10359.5098 -364.2484]", + "2236": "[15542.2607 9845.165 -364.4735]", + "2237": "[15488.5137 9334.8428 -364.4908]", + "2238": "[15405.1436 8821.4287 -364.4608]", + "2239": "[15291.6016 8316.1787 -364.5146]", + "2240": "[15147.8018 7822.0088 -364.3606]", + "2241": "[14980.79 7329.48 -364.1503]", + "2242": "[14821.0459 6838.7031 -364.1661]", + "2243": "[14691.5273 6341.6519 -364.4818]", + "2244": "[14591.7773 5839.2349 -364.3425]", + "2245": "[14520.6768 5327.3149 -364.4781]", + "2246": "[14476.7051 4814.6206 -364.7068]", + "2247": "[14456.2744 4294.5874 -364.5146]", + "2248": "[14452.0645 3776.093 -364.3408]", + "2249": "[14452.5967 3259.145 -364.4456]", + "2250": "[14451.1904 2743.3335 -364.4902]", + "2251": "[14452.4229 2228.6523 -364.54]", + "2252": "[14451.7754 1715.1239 -364.463]", + "2253": "[14451.3857 1202.7451 -364.4202]", + "2254": "[14452.1641 683.1643 -364.388]", + "2255": "[14452.0283 164.7652 -364.4687]", + "2256": "[14451.7764 -352.3867 -364.4047]", + "2257": "[14451.6563 -868.3729 -364.5012]", + "2258": "[14451.8545 -1382.1937 -364.4747]", + "2259": "[14452.123 -1902.1787 -364.4924]", + "2260": "[14451.9111 -2421.103 -364.3757]", + "2261": "[14452.3359 -2938.6135 -364.5882]", + "2262": "[14452.4248 -3454.7725 -364.2846]", + "2263": "[14451.9805 -3969.093 -364.3623]", + "2264": "[14452.7588 -4481.8057 -364.5449]", + "2265": "[14451.7549 -5001.8086 -364.5027]", + "2266": "[14451.7285 -5520.6714 -364.481]", + "2267": "[14452.7158 -6038.3896 -364.5076]", + "2268": "[14451.4131 -6554.9624 -364.5142]", + "2269": "[14451.6924 -7070.4077 -364.5207]", + "2270": "[14452.4629 -7584.7236 -364.46]", + "2271": "[14451.2949 -8097.9072 -364.4141]", + "2272": "[14452.2715 -8609.9287 -364.4445]", + "2273": "[14451.6074 -9129.1787 -364.4516]", + "2274": "[14452.2803 -9647.2822 -364.455]", + "2275": "[14448.6006 -10167.7129 -364.002]", + "2276": "[14425.043 -10686.5977 -361.5381]", + "2277": "[14363.6914 -11196.4805 -355.7155]", + "2278": "[14257.5791 -11701.1338 -345.0258]", + "2279": "[14098.3887 -12195.3613 -328.8665]", + "2280": "[13884.3203 -12666.2979 -305.3829]", + "2281": "[13607.9824 -13104.627 -271.6005]", + "2282": "[13266.4355 -13487.0459 -225.0551]", + "2283": "[12944.5332 -13740.1904 -178.3784]", + "2284": "[12496.9209 -13984.666 -118.1513]", + "2285": "[12018.2275 -14145.9434 -66.5264]", + "2286": "[11526.126 -14221.1455 -29.3939]", + "2287": "[11009.9326 -14244.5303 -2.1667]", + "2288": "[10491.917 -14247.3623 14.9122]", + "2289": "[9976.1787 -14227.376 24.6248]", + "2290": "[9465.332 -14163.7178 30.9015]", + "2291": "[8965.083 -14041.8672 36.1144]", + "2292": "[8486.8906 -13846.6855 39.7913]", + "2293": "[8057.5171 -13575.6748 41.7879]", + "2294": "[7742.1377 -13288.5254 42.1295]", + "2295": "[7437.5854 -12893.7783 41.0079]", + "2296": "[7221.5225 -12480.6885 38.49]", + "2297": "[7055.4556 -11990.1299 34.3365]", + "2298": "[6957.2427 -11480.7832 28.4941]", + "2299": "[6916.5508 -10970.4287 22.4021]", + "2300": "[6947.2393 -10451.1982 16.3963]", + "2301": "[7059.0972 -9946.1533 13.2836]", + "2302": "[7246.9805 -9466.667 11.8719]", + "2303": "[7495.8994 -9018.3359 12.373]", + "2304": "[7794.9648 -8595.8896 14.4599]", + "2305": "[8130.981 -8198.6836 17.5469]", + "2306": "[8483.874 -7826.668 19.2887]", + "2307": "[8851.2773 -7459.3306 19.5398]", + "2308": "[9217.6943 -7092.6372 19.64]", + "2309": "[9582.8271 -6726.1167 19.5294]", + "2310": "[9948.7832 -6361.9883 19.5108]", + "2311": "[10312.4453 -5997.0962 19.5412]", + "2312": "[10676.0576 -5633.6689 19.5477]", + "2313": "[11039.0586 -5271.1421 19.5457]", + "2314": "[11406.749 -4902.7949 19.5471]", + "2315": "[11774.502 -4536.1147 19.5364]", + "2316": "[12141.0166 -4169.7798 19.5311]", + "2317": "[12505.6699 -3803.1365 19.5303]", + "2318": "[12871.499 -3439.2917 19.5451]", + "2319": "[13234.9971 -3074.7017 19.547]", + "2320": "[13598.4639 -2711.6506 19.5476]", + "2321": "[13960.6934 -2349.1077 19.9956]", + "2322": "[14316.3047 -1973.3966 21.9364]", + "2323": "[14647.7119 -1579.9794 24.5761]", + "2324": "[14944.0762 -1161.7441 26.4275]", + "2325": "[15199.2578 -711.8623 27.1594]", + "2326": "[15396.9014 -237.2132 26.4104]", + "2327": "[15525.6377 258.3521 24.0645]", + "2328": "[15581.0527 775.4844 21.0846]", + "2329": "[15593.0322 1288.4562 19.4989]", + "2330": "[15591.2471 1801.0587 19.4844]", + "2331": "[15591.7119 2320.8662 19.5479]", + "2332": "[15592.3008 2839.491 19.5754]", + "2333": "[15591.4414 3356.9409 19.5457]", + "2334": "[15591.5273 3873.2378 19.5475]", + "2335": "[15591.8906 4391.5127 19.5473]", + "2336": "[15591.9473 4911.8042 19.5505]", + "2337": "[15591.8516 5431.0171 19.4461]", + "2338": "[15591.7061 5949.1367 19.6063]", + "2339": "[15591.708 6466.1758 19.517]", + "2340": "[15586.2764 6980.1011 23.8274]", + "2341": "[15554.8877 7493.4102 31.768]", + "2342": "[15474.4717 8004.752 41.3697]", + "2343": "[15336.1406 8499.75 49.0191]", + "2344": "[15126.9551 8975.2412 54.5811]", + "2345": "[14845.3574 9408.4375 57.6267]", + "2346": "[14514.2197 9762.7686 58.089]", + "2347": "[14104.1133 10072.8369 56.3414]", + "2348": "[13648.6025 10308.8467 51.5765]", + "2349": "[13160.8027 10475.2959 44.7695]", + "2350": "[12658.8135 10577.5645 36.0587]", + "2351": "[12141.6865 10627.2207 26.3895]", + "2352": "[11626.9951 10628.3877 20.9882]", + "2353": "[11113.2168 10586.8408 20.132]", + "2354": "[10607.167 10501.6533 20.1324]", + "2355": "[10108.2246 10359.3037 20.0045]", + "2356": "[9635.5 10155.002 20.0665]", + "2357": "[9194.9922 9880.8955 20.2088]", + "2358": "[8800.8193 9548.2334 20.3678]", + "2359": "[8429.1299 9185.2422 20.6631]", + "2360": "[8062.9985 8819.0088 20.5045]", + "2361": "[7697.6807 8453.4834 20.4491]", + "2362": "[7333.0713 8088.791 20.5293]", + "2363": "[6969.2959 7724.8179 20.545]", + "2364": "[6605.9336 7361.9775 20.5476]", + "2365": "[6243.8511 6999.3794 20.548]", + "2366": "[5876.1807 6631.8667 20.5262]", + "2367": "[5509.2783 6265.1782 20.5108]", + "2368": "[5146.21 5897.1567 20.696]", + "2369": "[4815.248 5506.0186 20.6232]", + "2370": "[4538.2598 5071.8096 20.4626]", + "2371": "[4328.2075 4597.2852 20.4263]", + "2372": "[4183.5103 4103.2754 20.2958]", + "2373": "[4093.6011 3599.01 20.6824]", + "2374": "[4048.5481 3082.3367 20.7959]", + "2375": "[4034.5923 2566.0679 20.548]", + "2376": "[4034.3652 2051.4895 20.7143]", + "2377": "[4033.3801 1538.5859 20.4329]", + "2378": "[4034.0386 1019.2311 20.4311]", + "2379": "[4035.4194 501.6642 20.5548]", + "2380": "[4034.0945 -16.9003 20.6127]", + "2381": "[4033.303 -529.1265 20.5074]", + "2382": "[4033.9609 -1047.5844 21.0319]", + "2383": "[4034.3186 -1566.9366 21.0853]", + "2384": "[4034.272 -2079.8083 21.5768]", + "2385": "[4033.28 -2599.269 21.5434]", + "2386": "[4034.7219 -3117.5574 21.5096]", + "2387": "[4033.4302 -3634.6604 21.536]", + "2388": "[4034.1584 -4150.6021 21.5426]", + "2389": "[4034.021 -4668.5981 21.545]", + "2390": "[4033.626 -5188.5498 21.5881]", + "2391": "[4033.7761 -5707.4438 21.5788]", + "2392": "[4033.9746 -6225.2705 21.4955]", + "2393": "[4033.583 -6742.0254 21.5466]", + "2394": "[4034.4341 -7257.6943 21.6142]", + "2395": "[4033.7163 -7772.2681 21.5505]", + "2396": "[4034.4785 -8285.7646 21.5508]", + "2397": "[4033.7212 -8798.1807 21.5478]", + "2398": "[4032.3127 -9318.0664 20.9384]", + "2399": "[3990.3857 -9832.8086 18.7585]", + "2400": "[3878.4414 -10340.1191 14.9925]", + "2401": "[3688.9768 -10821.5996 13.785]", + "2402": "[3437.179 -11273.8701 14.3314]", + "2403": "[3138.0295 -11695.6279 16.5534]", + "2404": "[2806.0483 -12086.5547 19.5705]", + "2405": "[2448.8401 -12461.8281 21.3514]", + "2406": "[2084.6531 -12826.793 21.5512]", + "2407": "[1721.3793 -13190.9746 21.6185]", + "2408": "[1357.2734 -13552.498 21.2858]", + "2409": "[968.4418 -13896.1211 18.8673]", + "2410": "[540.3362 -14188.4775 15.7411]", + "2411": "[72.2928 -14405.6973 13.7867]", + "2412": "[-418.4337 -14555.6904 14.1063]", + "2413": "[-927.8293 -14651.6953 15.9209]", + "2414": "[-1438.9785 -14701.377 19.4442]", + "2415": "[-1956.3428 -14718.0811 21.134]", + "2416": "[-2476.5891 -14720.1924 21.5453]", + "2417": "[-2995.5845 -14719.498 21.6116]", + "2418": "[-3513.502 -14719.7324 21.5394]", + "2419": "[-4030.3547 -14720.2139 21.5273]", + "2420": "[-4546.144 -14719.5254 21.5497]", + "2421": "[-5060.8667 -14719.8047 21.5471]", + "2422": "[-5574.519 -14720.0928 21.6051]", + "2423": "[-6087.1152 -14720.1064 21.5399]", + "2424": "[-6607.1499 -14719.7979 21.5396]", + "2425": "[-7126.0615 -14719.6885 21.5134]", + "2426": "[-7643.8003 -14719.9561 21.4017]", + "2427": "[-8160.4014 -14719.6338 21.5024]", + "2428": "[-8675.8633 -14720.2256 21.5394]", + "2429": "[-9190.1953 -14719.3447 21.5472]", + "2430": "[-9703.415 -14719.6797 21.574]", + "2431": "[-10215.5352 -14719.6123 21.5512]", + "2432": "[-10734.4531 -14718.6162 21.4762]", + "2433": "[-11254.5762 -14701.1641 21.1465]", + "2434": "[-11771.0645 -14648.5439 21.0969]", + "2435": "[-12276.4951 -14550.459 21.1046]", + "2436": "[-12771.3428 -14395.4463 20.7037]", + "2437": "[-13236.083 -14176.8721 20.8713]", + "2438": "[-13664.0381 -13886.1025 21.0707]", + "2439": "[-14036.7998 -13526.0723 20.8963]", + "2440": "[-14339.4277 -13109.8096 21.0547]", + "2441": "[-14574.2822 -12645.4053 21.0382]", + "2442": "[-14740.8398 -12154.9023 21.0682]", + "2443": "[-14848.9639 -11650.3057 21.1308]", + "2444": "[-14909.0234 -11139.3447 21.0697]", + "2445": "[-14931.5986 -10626.5908 20.9028]", + "2446": "[-14935.0879 -10114.5059 26.9631]", + "2447": "[-14934.9189 -9598.2275 53.3081]", + "2448": "[-14935.0928 -9084.8555 100.2378]", + "2449": "[-14935.0117 -8572.0234 156.515]", + "2450": "[-14934.9453 -8060.3672 216.5038]", + "2451": "[-14935.083 -7548.3823 278.3852]", + "2452": "[-14935.5537 -7036.4263 340.9502]", + "2453": "[-14935.1875 -6524.396 403.3326]", + "2454": "[-14935.0654 -6012.2798 465.1671]", + "2455": "[-14935.2725 -5498.9316 524.9931]", + "2456": "[-14935.54 -4986.4551 580.9123]", + "2457": "[-14935.3066 -4471.6279 627.0864]", + "2458": "[-14935.29 -3956.0542 651.2401]", + "2459": "[-14935.1533 -3442.6887 657.3889]", + "2460": "[-14935.958 -2928.2021 657.5295]", + "2461": "[-14934.9756 -2414.7937 657.5419]", + "2462": "[-14935.0977 -1902.4775 657.5471]", + "2463": "[-14935.4717 -1382.7231 657.5703]", + "2464": "[-14935.5537 -864.0669 657.6213]", + "2465": "[-14935.1074 -346.5584 657.5224]", + "2466": "[-14936.0986 169.8224 657.5546]", + "2467": "[-14935.1104 685.0703 657.5081]", + "2468": "[-14935.333 1199.207 657.5361]", + "2469": "[-14935.1484 1712.243 657.5457]", + "2470": "[-14935.3184 2232.5708 657.5469]", + "2471": "[-14935.7539 2751.7703 657.4709]", + "2472": "[-14934.9453 3269.8186 657.5888]", + "2473": "[-14935.582 3786.6934 657.4869]", + "2474": "[-14935.1064 4302.9575 657.4811]", + "2475": "[-14934.5156 4823.3882 657.5066]", + "2476": "[-14934.9238 5342.7109 657.4988]", + "2477": "[-14934.7705 5860.9644 657.5178]", + "2478": "[-14934.8701 6378.1465 657.467]", + "2479": "[-14934.7578 6894.2314 657.4761]", + "2480": "[-14935.2734 7409.2358 657.5111]", + "2481": "[-14935.1846 7923.1592 657.5358]", + "2482": "[-14934.6709 8436.0029 657.5422]", + "2483": "[-14935.0635 8956.29 657.5467]", + "2484": "[-14929.3291 9475.54 656.8527]", + "2485": "[-14906.3848 9994.332 654.0695]", + "2486": "[-14853.9941 10504.625 647.3089]", + "2487": "[-14763.0771 11014.7764 635.6118]", + "2488": "[-14625.7139 11512.248 617.327]", + "2489": "[-14428.6416 11989.5029 591.146]", + "2490": "[-14161.293 12426.6816 555.7089]", + "2491": "[-13884.9775 12739.4863 518.8727]", + "2492": "[-13564.9219 12993.6953 476.0641]", + "2493": "[-13222.8115 13178.7324 430.2234]", + "2494": "[-12787.2793 13322.957 372.0393]", + "2495": "[-12279.3135 13397.5303 304.2189]", + "2496": "[-11766.9326 13392.3174 235.2361]", + "2497": "[-11260.3584 13308.0342 167.6617]", + "2498": "[-10835.5654 13157.2617 110.673]", + "2499": "[-10488.8359 12959.8984 64.4903]", + "2500": "[-10189.8018 12710.8936 24.603]", + "2501": "[-9899.0469 12366.3672 -14.2626]", + "2502": "[-9653.7588 11944.624 -47.1278]", + "2503": "[-9464.9189 11467.165 -72.2595]", + "2504": "[-9334.3047 10970.6807 -89.727]", + "2505": "[-9248.2373 10460.0859 -100.9913]", + "2506": "[-9199.1406 9948.8164 -107.3724]", + "2507": "[-9178.4043 9435.2363 -114.1777]", + "2508": "[-9174.0098 8919.0156 -136.583]", + "2509": "[-9174.707 8406.6855 -179.2815]", + "2510": "[-9174.0742 7892.6831 -234.2312]", + "2511": "[-9173.8887 7380.4331 -293.6467]", + "2512": "[-9174.3682 6868.2324 -355.2246]", + "2513": "[-9173.5039 6356.2891 -417.4937]", + "2514": "[-9174.3486 5843.2549 -480.4618]", + "2515": "[-9173.6729 5330.665 -543.4033]", + "2516": "[-9174.168 4817.7715 -606.3726]", + "2517": "[-9173.6758 4305.3062 -669.3719]", + "2518": "[-9173.5381 3791.7791 -732.3615]", + "2519": "[-9173.8291 3280.2461 -795.2213]", + "2520": "[-9173.3525 2766.8804 -858.3192]", + "2521": "[-9174.1279 2255.4866 -921.0752]", + "2522": "[-9173.4736 1742.2821 -984.1259]", + "2523": "[-9173.626 1229.9048 -1047.0403]", + "2524": "[-9173.6689 717.94 -1109.902]", + "2525": "[-9173.4229 204.5357 -1172.8611]", + "2526": "[-9173.8652 -307.2971 -1235.8317]", + "2527": "[-9173.3623 -820.5447 -1298.8149]", + "2528": "[-9173.6621 -1333.2821 -1361.5596]", + "2529": "[-9173.5293 -1846.5562 -1423.5455]", + "2530": "[-9173.8447 -2358.6055 -1483.575]", + "2531": "[-9174.1455 -2871.2898 -1540.2471]", + "2532": "[-9173.4336 -3384.0671 -1588.2366]", + "2533": "[-9173.5068 -3896.2705 -1614.3104]", + "2534": "[-9173.6445 -4409.4785 -1622.4789]", + "2535": "[-9173.7354 -4929.5283 -1622.5291]", + "2536": "[-9172.9668 -5448.3853 -1622.2914]", + "2537": "[-9161.6162 -5965.5923 -1622.4305]", + "2538": "[-9133.8096 -6480.4277 -1622.5508]", + "2539": "[-9087.3896 -6992.6118 -1622.4941]", + "2540": "[-9019.709 -7503.5713 -1622.5315]", + "2541": "[-8926.626 -8013.0122 -1622.4695]", + "2542": "[-8807.6484 -8515.582 -1622.4106]", + "2543": "[-8660.3174 -9009.04 -1622.5261]", + "2544": "[-8483.4004 -9490.9072 -1622.5518]", + "2545": "[-8269.7891 -9965.0547 -1622.667]", + "2546": "[-8022.1763 -10420.0605 -1622.641]", + "2547": "[-7740.0938 -10852.0801 -1622.6188]", + "2548": "[-7423.5869 -11256.7871 -1622.5924]", + "2549": "[-7068.3813 -11636.4141 -1622.6077]", + "2550": "[-6682.7319 -11981.4775 -1622.5553]", + "2551": "[-6270.2607 -12290.1152 -1622.4688]", + "2552": "[-5835.5435 -12562.1465 -1622.5469]", + "2553": "[-5377.1475 -12800.6074 -1622.4739]", + "2554": "[-4903.5264 -13003.8506 -1622.5334]", + "2555": "[-4418.8159 -13174.0488 -1622.5222]", + "2556": "[-3926.0042 -13313.6465 -1622.423]", + "2557": "[-3419.2751 -13426.8193 -1622.4178]", + "2558": "[-2908.9399 -13513.8457 -1622.3734]", + "2559": "[-2396.5537 -13577.5762 -1622.3258]", + "2560": "[-1883.2791 -13619.3975 -1622.4492]", + "2561": "[-1370.1357 -13642.2549 -1622.3652]", + "2562": "[-857.7379 -13650.0303 -1622.3894]", + "2563": "[-338.1085 -13650.8682 -1622.4683]", + "2564": "[180.3293 -13651.7793 -1622.449]", + "2565": "[697.5762 -13650.96 -1622.4821]", + "2566": "[1213.6251 -13651.209 -1622.4781]", + "2567": "[1729.3901 -13651.4014 -1622.5251]", + "2568": "[2249.3677 -13651.0742 -1622.4824]", + "2569": "[2768.2559 -13651.5127 -1622.4603]", + "2570": "[3286.0742 -13651.1162 -1622.4508]", + "2571": "[3802.8093 -13651.002 -1622.4276]", + "2572": "[4318.4746 -13650.9668 -1622.4136]", + "2573": "[4833.0439 -13650.5449 -1622.4421]", + "2574": "[5346.4395 -13646.5908 -1622.5352]", + "2575": "[5866.3853 -13630.8232 -1622.3882]", + "2576": "[6383.9785 -13595.543 -1622.4553]", + "2577": "[6898.4424 -13539.9834 -1622.4464]", + "2578": "[7408.6738 -13462.4512 -1622.4175]", + "2579": "[7913.0503 -13360.2148 -1622.3679]", + "2580": "[8409.666 -13230.9502 -1622.4415]", + "2581": "[8904.1523 -13070.4502 -1622.6241]", + "2582": "[9385.3008 -12878.4629 -1622.7145]", + "2583": "[9849.6924 -12653.1338 -1622.6516]", + "2584": "[10293.3799 -12393.542 -1622.603]", + "2585": "[10719.0586 -12094.6816 -1622.4827]", + "2586": "[11116.293 -11760.8174 -1622.7129]", + "2587": "[11478.6885 -11396.584 -1622.6576]", + "2588": "[11811.8027 -10997.0938 -1622.5825]", + "2589": "[12107.7725 -10571.9893 -1622.5153]", + "2590": "[12366.5947 -10125.7373 -1622.5939]", + "2591": "[12589.543 -9662.6641 -1622.5184]", + "2592": "[12778.4395 -9186.6572 -1622.5922]", + "2593": "[12937.5 -8692.9531 -1622.4379]", + "2594": "[13066.0029 -8192.1865 -1622.4603]", + "2595": "[13167.7412 -7686.9097 -1622.4841]", + "2596": "[13244.1299 -7178.7417 -1622.4424]", + "2597": "[13298.9863 -6663.3345 -1622.4619]", + "2598": "[13333.1875 -6147.1001 -1622.3564]", + "2599": "[13348.6904 -5631.2666 -1622.4866]", + "2600": "[13353.5986 -5116.3525 -1622.3433]", + "2601": "[13352.9629 -4602.6108 -1622.282]", + "2602": "[13340.4922 -4090.4893 -1622.4399]", + "2603": "[13300.8936 -3573.9951 -1622.3695]", + "2604": "[13218.0039 -3064.7881 -1622.4761]", + "2605": "[13083.2031 -2569.605 -1622.5876]", + "2606": "[12886.3604 -2090.3752 -1622.5751]", + "2607": "[12624.3428 -1648.2295 -1622.2891]", + "2608": "[12295.2002 -1246.7188 -1622.369]", + "2609": "[11934.4717 -872.7379 -1622.5042]", + "2610": "[11569.8975 -508.3631 -1622.3958]", + "2611": "[11205.2305 -145.7631 -1622.486]", + "2612": "[10843.0664 217.7929 -1622.4579]", + "2613": "[10480.8721 579.7758 -1622.4529]", + "2614": "[10113.3057 946.9196 -1622.453]", + "2615": "[9747.2119 1313.9611 -1622.4331]", + "2616": "[9381.1982 1679.5242 -1622.4856]", + "2617": "[9016.0771 2044.4166 -1622.4589]", + "2618": "[8651.9189 2408.7205 -1622.3827]", + "2619": "[8288.0664 2771.7126 -1622.4392]", + "2620": "[7926.0469 3134.8464 -1622.4751]", + "2621": "[7558.7114 3502.0894 -1622.3981]", + "2622": "[7192.7964 3867.8613 -1622.1749]", + "2623": "[6828.1411 4232.96 -1622.2437]", + "2624": "[6463.9282 4596.8506 -1622.2032]", + "2625": "[6100.5288 4959.856 -1622.208]", + "2626": "[5738.5596 5322.6084 -1622.1741]", + "2627": "[5370.8008 5689.5781 -1622.283]", + "2628": "[5004.7939 6056.6143 -1622.181]", + "2629": "[4638.6406 6421.771 -1622.256]", + "2630": "[4274.1157 6786.8408 -1622.1818]", + "2631": "[3909.5217 7150.1436 -1622.2904]", + "2632": "[3547.1313 7513.9307 -1622.2477]", + "2633": "[3184.7036 7875.9087 -1622.2278]", + "2634": "[2817.2002 8242.4844 -1622.3406]", + "2635": "[2451.2737 8608.7813 -1622.3656]", + "2636": "[2086.9045 8974.8076 -1622.4337]", + "2637": "[1722.1071 9338.5996 -1622.496]", + "2638": "[1358.3278 9701.4297 -1622.5256]", + "2639": "[996.5794 10063.9658 -1622.4293]", + "2640": "[630.5446 10430.834 -1622.376]", + "2641": "[264.4026 10795.667 -1622.2334]", + "2642": "[-100.0604 11160.1523 -1622.2959]", + "2643": "[-462.9668 11523.958 -1622.3492]", + "2644": "[-825.6285 11886.1465 -1622.3845]", + "2645": "[-1191.8497 12253.4014 -1622.4996]", + "2646": "[-1557.6785 12619.1338 -1622.5363]", + "2647": "[-1922.9546 12983.4785 -1622.3834]", + "2648": "[-2286.0264 13348.0654 -1622.4539]", + "2649": "[-2649.4678 13710.375 -1622.452]", + "2650": "[-3016.7283 14077.9551 -1622.4523]", + "2651": "[-3383.5693 14443.9697 -1622.4432]", + "2652": "[-3760.2542 14797.126 -1622.2668]", + "2653": "[-4156.1704 15124.502 -1622.5941]", + "2654": "[-4582.4468 15419.6025 -1622.5739]", + "2655": "[-5034.502 15665.833 -1622.7061]", + "2656": "[-5517.6484 15852.5752 -1622.5513]", + "2657": "[-6018.4375 15963.4854 -1622.3605]", + "2658": "[-6534.3921 16003.8408 -1622.3541]", + "2659": "[-7050.2671 16007.2754 -1622.4641]", + "2660": "[-7564.5649 16008.6904 -1622.5278]", + "2661": "[-8077.2725 16007.9502 -1622.5084]", + "2662": "[-8595.7285 16008.5342 -1622.4584]", + "2663": "[-9112.6143 16008.2041 -1622.4564]", + "2664": "[-9627.9355 16008.5254 -1622.4536]", + "2665": "[-10141.6807 16008.377 -1622.4521]", + "2666": "[-10653.8506 16008.4863 -1622.4568]", + "2667": "[-11171.6221 16008.0459 -1622.4409]", + "2668": "[-11687.7578 16008.3496 -1622.3619]", + "2669": "[-12202.2217 16007.6777 -1622.5143]", + "2670": "[-12714.9766 16007.8271 -1622.4437]", + "2671": "[-13233.1738 16007.7842 -1622.4545]", + "2672": "[-13749.6807 16008.2832 -1622.4532]", + "2673": "[-13834.4248 16008.1436 -1622.4515]" + }, + "3": + { + "1": "[-6199.4663 15056.8027 -3756.4556]", + "2": "[-6708.3145 15115.623 -3756.5195]", + "3": "[-7209.0005 15233.3184 -3756.3623]", + "4": "[-7693.7002 15399.5156 -3756.4556]", + "5": "[-8169.4634 15591.1133 -3756.3997]", + "6": "[-8650.0898 15777.4717 -3756.3459]", + "7": "[-9145.3164 15920.6621 -3756.3352]", + "8": "[-9650.2705 16009.1484 -3756.4275]" + }, + "4": + { + "1": "[-10851.7891 3389.571 -2732.4009]", + "2": "[-10790.0303 3900.5088 -2732.4231]", + "3": "[-10691.5918 4403.1987 -2732.3853]", + "4": "[-10594.8818 4908.7271 -2732.4729]", + "5": "[-10534.1016 5421.9829 -2732.4558]", + "6": "[-10506.9912 5939.0391 -2732.4268]", + "7": "[-10499.6895 6456.1357 -2732.3462]", + "8": "[-10498.7041 6968.6128 -2732.3586]", + "9": "[-10498.8965 7484.6821 -2732.3196]", + "10": "[-10498.8232 7998.1997 -2732.4529]", + "11": "[-10498.2842 8510.585 -2732.3843]", + "12": "[-10498.9365 9027.2412 -2732.4929]", + "13": "[-10499.2383 9542.0664 -2732.4312]", + "14": "[-10498.4736 10054.79 -2732.5627]", + "15": "[-10499.3115 10570.7178 -2732.4778]", + "16": "[-10498.8154 11083.9873 -2732.4065]", + "17": "[-10498.4463 11599.6904 -2732.4309]", + "18": "[-10499.0693 12112.0625 -2732.4797]", + "19": "[-10498.6924 12626.0029 -2732.4651]", + "20": "[-10499.0215 13140.9766 -2732.3877]", + "21": "[-10499.1367 13656.459 -2732.4504]", + "22": "[-10498.5117 14168.543 -2732.4463]" + }, + "5": + { + "1": "[-10499.1016 8653.5928 -2732.4209]", + "2": "[-10499.3047 8552.2803 -2732.4316]", + "3": "[-10478.5361 8040.644 -2732.4504]", + "4": "[-10415.5908 7531.7734 -2732.3193]", + "5": "[-10325.9219 7026.3838 -2732.2939]", + "6": "[-10258.5771 6518.0098 -2732.4668]", + "7": "[-10241.1084 6256.7397 -2732.3896]" + }, + "6": + { + "1": "[-9881.4268 3372.1169 -2732.5044]", + "2": "[-9941.2979 3883.0371 -2732.5037]", + "3": "[-10039.7617 4390.1416 -2732.0195]", + "4": "[-10137.1777 4894.9668 -2732.293]", + "5": "[-10198.958 5404.9341 -2732.1785]", + "6": "[-10226.585 5918.1406 -2732.3113]", + "7": "[-10234.0381 6430.9316 -2732.4185]", + "8": "[-10235.0088 6945.4531 -2732.5281]", + "9": "[-10235.1914 7463.8018 -2732.406]", + "10": "[-10234.8799 7977.769 -2732.4302]", + "11": "[-10235.2588 8493.21 -2732.332]", + "12": "[-10235.2217 9010.167 -2732.3789]", + "13": "[-10235.3271 9522.9629 -2732.4431]", + "14": "[-10234.7588 10037.9932 -2732.4866]", + "15": "[-10234.6953 10551.8457 -2732.4199]", + "16": "[-10235.4102 11071.3037 -2732.5166]", + "17": "[-10234.625 11587.127 -2732.4851]", + "18": "[-10235.1689 12099.3809 -2732.4175]", + "19": "[-10235.5205 12616.9268 -2732.4824]", + "20": "[-10234.8359 13130.1836 -2732.481]", + "21": "[-10235.1455 13647.0703 -2732.4517]", + "22": "[-10234.6035 14159.7119 -2732.4519]" + }, + "7": + { + "1": "[-10234.8252 8606.8115 -2732.5483]", + "2": "[-10235.4902 8505.8613 -2732.374]", + "3": "[-10258.6172 7990.5928 -2732.3567]", + "4": "[-10327.5469 7482.2612 -2731.9226]", + "5": "[-10416.5527 6976.5674 -2732.3235]", + "6": "[-10480.1611 6466.103 -2732.3516]", + "7": "[-10505.3428 5984.5674 -2732.426]" + }, + "8": + { + "1": "[1795.9111 -5930.332 -2732.4075]", + "2": "[1782.5428 -6446.896 -2732.1335]", + "3": "[1715.8392 -6958.3818 -2732.4668]", + "4": "[1619.9119 -7463.3911 -2732.4868]", + "5": "[1530.3253 -7971.896 -2732.3442]", + "6": "[1483.0995 -8482.4043 -2732.2544]", + "7": "[1493.1205 -8996.3535 -2732.3369]" + }, + "9": + { + "1": "[8442.3105 7841.3652 -2219.9539]", + "2": "[8374.5029 8354.9814 -2220.3052]", + "3": "[8273.168 8861.0664 -2220.5132]", + "4": "[8179.0747 9371.3047 -2220.3933]", + "5": "[8123.2798 9882.373 -2220.4546]", + "6": "[8099.3086 10398.2432 -2219.7349]", + "7": "[8093.4692 10912.2705 -2219.491]", + "8": "[8075.1519 11430.0537 -2219.4182]", + "9": "[8017.0835 11939.6875 -2219.3787]", + "10": "[7893.2485 12440.5508 -2219.3975]", + "11": "[7686.874 12915.2041 -2219.5813]", + "12": "[7481.8213 13224.7109 -2219.5127]", + "13": "[7183.6704 13537.7344 -2219.3708]", + "14": "[6901.502 13745.4111 -2219.3496]", + "15": "[6447.1436 13970.4863 -2219.2546]", + "16": "[5965.9585 14111.5957 -2219.384]", + "17": "[5456.8418 14187.0449 -2219.2791]", + "18": "[4944.4458 14205.9336 -2219.0903]", + "19": "[4432.7183 14171.1201 -2219.4001]", + "20": "[3926.0503 14075.7734 -2219.4194]", + "21": "[3438.0378 13904.4307 -2219.4736]", + "22": "[3060.1375 13691.8496 -2219.4058]", + "23": "[2758.4426 13443.7285 -2219.4385]", + "24": "[2497.2036 13137.7324 -2219.4592]", + "25": "[2287.1897 12780.2197 -2219.3794]", + "26": "[2107.0083 12296.5313 -2219.356]", + "27": "[2003.8759 11787.6895 -2219.4521]", + "28": "[1961.5043 11274.5176 -2219.4324]", + "29": "[1952.2203 10756.7168 -2219.4277]", + "30": "[1968.1733 10242.7275 -2219.2842]", + "31": "[2023.9193 9731.7549 -2219.4651]", + "32": "[2111.8494 9221.8115 -2219.425]", + "33": "[2212.6255 8715.2051 -2219.4351]", + "34": "[2314.9934 8207.1914 -2219.3252]", + "35": "[2415.187 7698.1533 -2219.3589]", + "36": "[2516.6079 7192.5425 -2219.4209]", + "37": "[2616.4897 6687.1992 -2219.4226]", + "38": "[2717.323 6181.7598 -2219.4204]", + "39": "[2816.991 5679.3799 -2219.3721]", + "40": "[2918.3196 5170.0103 -2219.4421]", + "41": "[3018.8171 4663.8726 -2219.4241]", + "42": "[3118.583 4160.9497 -2219.5229]", + "43": "[3220.3608 3651.2888 -2219.4163]", + "44": "[3320.7813 3144.554 -2219.3977]", + "45": "[3422.0498 2637.3794 -2219.4429]", + "46": "[3522.4128 2130.531 -2219.4104]", + "47": "[3622.7124 1624.8605 -2219.3909]", + "48": "[3723.9478 1116.42 -2219.3987]", + "49": "[3824.9465 612.8533 -2219.4331]", + "50": "[3925.6108 104.2535 -2219.4063]", + "51": "[4025.0479 -398.821 -2219.4634]", + "52": "[4126.3604 -902.9211 -2219.2979]", + "53": "[4225.7803 -1406.4818 -2219.3489]", + "54": "[4292.4487 -1741.5797 -2219.4448]" + }, + "10": + { + "1": "[8487.6377 6255.9019 -2219.3662]", + "2": "[8557.4531 5744.3428 -2219.3228]", + "3": "[8684.1133 5244.6875 -2219.5649]", + "4": "[8859.2363 4759.811 -2219.4839]", + "5": "[9053.0117 4281.4937 -2219.428]", + "6": "[9233.0469 3799.1748 -2219.4509]", + "7": "[9366.4316 3304.6978 -2219.3796]" + }, + "11": + { + "1": "[14482.083 -3343.5774 -369.4999]", + "2": "[14557.5244 -3853.1855 -369.3214]", + "3": "[14659.2002 -4357.2568 -369.4039]", + "4": "[14747.3506 -4862.127 -369.2599]", + "5": "[14798.8984 -5374.5898 -369.2908]", + "6": "[14819.1982 -5889.1943 -371.5239]", + "7": "[14823.8555 -6405.9067 -386.2061]", + "8": "[14824.1826 -6919.1714 -420.1409]", + "9": "[14824.2656 -7435.9111 -460.6422]", + "10": "[14824.4912 -7952.4697 -487.708]", + "11": "[14824.7656 -8469.334 -497.2754]", + "12": "[14824.791 -8987.0361 -497.3188]", + "13": "[14824.8252 -9504.7686 -497.4149]", + "14": "[14824.5078 -10023.4893 -497.5075]", + "15": "[14824.1074 -10536.4775 -497.3666]", + "16": "[14823.96 -11050.8027 -497.3991]", + "17": "[14824.3506 -11568.084 -497.403]", + "18": "[14824.457 -12084.0654 -497.4504]", + "19": "[14824.2295 -12596.1074 -497.4329]", + "20": "[14824.0693 -13112.5508 -497.4748]", + "21": "[14824.9277 -13624.9541 -497.4376]", + "22": "[14823.834 -14141.4824 -497.4262]", + "23": "[14823.8789 -14657.0488 -497.4437]", + "24": "[14824.4023 -15158.624 -497.4097]" + }, + "12": + { + "1": "[14824.7061 -10471.8936 -497.4314]", + "2": "[14842.1445 -9958.9053 -497.4393]", + "3": "[14900.6436 -9446.8135 -497.5256]", + "4": "[14989.5449 -8939.2881 -497.4455]", + "5": "[15061.46 -8430.8877 -497.1534]", + "6": "[15087.6133 -7918.98 -486.7771]", + "7": "[15087.8369 -7895.8794 -485.8729]" + }, + "13": + { + "1": "[15426.6797 -3389.1758 -369.2701]", + "2": "[15346.6777 -3899.5076 -369.3903]", + "3": "[15243.6523 -4403.4243 -369.3727]", + "4": "[15157.8711 -4913.2451 -369.4397]", + "5": "[15109.9346 -5429.7661 -369.2259]", + "6": "[15091.8701 -5943.3579 -372.2113]", + "7": "[15087.8271 -6457.4341 -388.7292]", + "8": "[15088.083 -6972.0869 -424.4951]", + "9": "[15087.9932 -7483.1079 -464.1251]", + "10": "[15088.3145 -8000.6929 -489.0957]", + "11": "[15088.291 -8513.501 -497.4406]", + "12": "[15088.2754 -9031.9248 -497.169]", + "13": "[15088.3994 -9544.6934 -497.3565]", + "14": "[15088.2432 -10061.2842 -497.4388]", + "15": "[15088.29 -10573.668 -497.4427]", + "16": "[15087.8008 -11090.1865 -497.4804]", + "17": "[15088.7334 -11602.541 -497.382]", + "18": "[15088.7197 -12118.8389 -497.4926]", + "19": "[15088.373 -12630.9336 -497.3958]", + "20": "[15088.416 -13146.7646 -497.4641]", + "21": "[15088.2754 -13663.2471 -497.4361]", + "22": "[15087.9932 -14176.5176 -497.4692]", + "23": "[15088.0967 -14691.3916 -497.4488]", + "24": "[15088.2773 -15158.3818 -497.4299]" + }, + "14": + { + "1": "[15088.3174 -10517.4385 -497.337]", + "2": "[15073.7637 -10003.3516 -497.3589]", + "3": "[15020.3604 -9491.54 -496.9701]", + "4": "[14931.2314 -8984.3027 -497.3188]", + "5": "[14855.6484 -8476.3047 -497.207]", + "6": "[14826.627 -7965.0142 -488.1588]", + "7": "[14824.6279 -7774.7686 -481.018]" + }, + "15": + { + "1": "[-3095.532 -13532.8281 -7494.0781]", + "2": "[-3597.5498 -13417.1309 -7494.0869]", + "3": "[-4086.3401 -13251.4805 -7494.2886]", + "4": "[-4563.9575 -13058.9697 -7494.1948]", + "5": "[-5042.9023 -12872.9463 -7494.2314]", + "6": "[-5537.064 -12728.0215 -7494.0288]", + "7": "[-6042.8818 -12638.6738 -7494.0703]" + }, + "16": + { + "1": "[5518.9653 -11179.8574 -8900.0264]", + "2": "[5419.165 -11180.2002 -8892.5713]", + "3": "[4904.5747 -11180.0928 -8843.9697]", + "4": "[4388.2876 -11180.3184 -8786.5869]", + "5": "[3879.6548 -11179.9346 -8726.6611]", + "6": "[3367.1443 -11180.1875 -8664.6191]", + "7": "[2849.8997 -11180.7041 -8601.4639]", + "8": "[2333.4307 -11179.8213 -8537.9863]", + "9": "[1822.1011 -11180.6094 -8475.3174]", + "10": "[1302.9396 -11180.5352 -8411.4775]", + "11": "[780.661 -11180.4023 -8347.3496]", + "12": "[265.732 -11180.7578 -8284.123]", + "13": "[-257.8615 -11180.3555 -8219.9102]", + "14": "[-774.1168 -11180.4023 -8156.4312]", + "15": "[-1296.4147 -11180.4639 -8092.3193]", + "16": "[-1809.7366 -11180.0625 -8029.3032]", + "17": "[-2330.4265 -11180.2568 -7965.3936]", + "18": "[-2839.0793 -11180.4795 -7902.9004]", + "19": "[-3363.8037 -11180.6387 -7838.4673]", + "20": "[-3879.4321 -11180.5117 -7775.1528]", + "21": "[-4388.9165 -11179.8799 -7712.6689]", + "22": "[-4908.4351 -11180.2041 -7648.8228]", + "23": "[-5435.998 -11180.793 -7583.9902]", + "24": "[-5950.7275 -11180.4463 -7520.8838]", + "25": "[-6471.6826 -11180.2793 -7456.9663]", + "26": "[-6997.4482 -11180.5615 -7392.3452]", + "27": "[-7508.5786 -11180.6426 -7329.5615]", + "28": "[-8022.6338 -11180.4092 -7266.4385]", + "29": "[-8538.1045 -11180.3916 -7203.1226]", + "30": "[-9053.4619 -11180.7402 -7139.9404]", + "31": "[-9571.9883 -11180.4619 -7076.2544]", + "32": "[-10092.2334 -11180.4229 -7013.2227]", + "33": "[-10610.8994 -11180.4219 -6951.8022]", + "34": "[-11126.957 -11180.3516 -6893.6924]", + "35": "[-11639.3193 -11180.3242 -6842.6602]", + "36": "[-12156.1592 -11179.627 -6809.3442]", + "37": "[-12671.2803 -11158.9961 -6796.5713]", + "38": "[-13183.3789 -11094.8193 -6796.4067]", + "39": "[-13680.502 -10964.082 -6796.4058]", + "40": "[-14146.502 -10751.1514 -6796.2793]", + "41": "[-14442.8398 -10546.375 -6796.355]", + "42": "[-14756.8389 -10235.375 -6796.4424]", + "43": "[-14961.2969 -9945.543 -6796.4312]", + "44": "[-15179.0303 -9482.0918 -6796.2778]", + "45": "[-15314.6846 -8982.2129 -6796.4014]", + "46": "[-15382.0547 -8469.8994 -6796.3013]", + "47": "[-15402.8945 -7952.0684 -6796.4224]", + "48": "[-15404.292 -7430.3242 -6796.4893]", + "49": "[-15404.6484 -6911.1577 -6796.3989]", + "50": "[-15404.7021 -6391.5859 -6796.4966]", + "51": "[-15403.873 -5872.2202 -6796.4121]", + "52": "[-15404.0625 -5350.2065 -6796.4209]", + "53": "[-15404.2773 -4834.105 -6796.4189]", + "54": "[-15404.6309 -4312.2798 -6796.501]", + "55": "[-15404.3438 -3785.8848 -6796.5449]", + "56": "[-15404.0947 -3258.7322 -6796.5063]", + "57": "[-15404.2402 -2736.6458 -6796.4688]", + "58": "[-15404.7236 -2213.7068 -6796.4956]", + "59": "[-15404.7471 -1698.5889 -6796.4438]", + "60": "[-15404.541 -1172.1184 -6796.4341]", + "61": "[-15404.5391 -647.5566 -6796.4248]", + "62": "[-15404.3496 -122.594 -6796.5225]", + "63": "[-15404.4648 389.4152 -6796.4761]", + "64": "[-15404.2285 917.8057 -6796.3462]", + "65": "[-15403.7285 1444.3104 -6796.4155]", + "66": "[-15404.3174 1968.9227 -6794.502]", + "67": "[-15404.2979 2497.9331 -6774.0283]", + "68": "[-15403.7383 3014.1501 -6731.5435]", + "69": "[-15404.2256 3532.4958 -6676.1553]", + "70": "[-15403.9014 4054.8867 -6615.5483]", + "71": "[-15404.0723 4581.8398 -6552.1816]", + "72": "[-15404.8994 5102.7378 -6488.5825]", + "73": "[-15404.7227 5619.1147 -6425.5781]", + "74": "[-15404.1426 6133.5977 -6362.4834]", + "75": "[-15404.4795 6645.7373 -6299.6104]", + "76": "[-15405.1035 7161.0127 -6236.2671]", + "77": "[-15404.8887 7677.7603 -6172.8794]", + "78": "[-15403.915 8192.1338 -6109.772]", + "79": "[-15404.8867 8700.9814 -6047.5293]", + "80": "[-15404.5547 9210.4814 -5985.9985]", + "81": "[-15404.8389 9722.041 -5926.085]", + "82": "[-15404.3701 10234.9053 -5869.4341]", + "83": "[-15404.54 10745.3027 -5821.376]", + "84": "[-15404.7822 11262.001 -5794.6172]", + "85": "[-15401.6426 11777.501 -5785.0396]", + "86": "[-15373.5938 12292.1572 -5785.1738]", + "87": "[-15294.1895 12799.2949 -5785.373]", + "88": "[-15144.752 13291.6426 -5785.355]", + "89": "[-14924.3086 13725.7773 -5785.6343]", + "90": "[-14714.624 14004.1191 -5785.5742]", + "91": "[-14383.9648 14312.0703 -5785.4624]", + "92": "[-14095.2109 14498.9434 -5785.2734]", + "93": "[-13620.0908 14703.3867 -5785.2998]", + "94": "[-13120.4912 14825.7686 -5785.374]", + "95": "[-12603.625 14882.9727 -5784.9204]", + "96": "[-12087.0332 14899.292 -5785.1719]", + "97": "[-11573.8164 14898.167 -5784.8877]", + "98": "[-11053.248 14899.085 -5784.8989]", + "99": "[-10530.4355 14899.0166 -5784.8677]", + "100": "[-10012.291 14899.3779 -5784.8823]", + "101": "[-9493.7012 14898.9814 -5784.9082]", + "102": "[-8973.4111 14898.9863 -5784.9077]", + "103": "[-8454.9863 14899.3467 -5784.873]", + "104": "[-7938.4004 14899.0771 -5784.9141]", + "105": "[-7413.3525 14898.8369 -5784.9502]", + "106": "[-6888.1631 14898.999 -5784.8086]", + "107": "[-6376.0811 14899.0234 -5784.8975]", + "108": "[-5852.1948 14899.4385 -5784.9165]", + "109": "[-5332.1836 14899.1387 -5784.9038]", + "110": "[-4814.5034 14899.1357 -5784.9053]", + "111": "[-4297.2354 14898.5986 -5785.1128]", + "112": "[-3784.1001 14876.9141 -5785.0869]", + "113": "[-3269.7175 14811.7568 -5785.1992]", + "114": "[-2766.4773 14674.9463 -5785.4097]", + "115": "[-2299.0232 14454.6104 -5785.2573]", + "116": "[-2006.8336 14247.999 -5785.5044]", + "117": "[-1709.613 13947.8438 -5785.3687]", + "118": "[-1492.7274 13633.6143 -5785.1919]", + "119": "[-1287.4567 13184.2559 -5785.3687]", + "120": "[-1154.2697 12681.6191 -5785.3013]", + "121": "[-1089.1102 12167.8164 -5784.981]", + "122": "[-1069.0697 11645.2744 -5785.082]", + "123": "[-1069.0673 11124.0156 -5771.0322]", + "124": "[-1069.1348 10599.6182 -5736.3491]", + "125": "[-1068.5175 10087.501 -5684.3174]", + "126": "[-1069.8293 9574.917 -5625.9546]", + "127": "[-1068.6647 9049.8945 -5563.6353]", + "128": "[-1068.4429 8540.9492 -5502.3257]", + "129": "[-1068.4012 8030.5435 -5441.814]", + "130": "[-1068.4486 7519.3984 -5383.3491]", + "131": "[-1068.7521 7001.1738 -5329.6289]", + "132": "[-1068.749 6487.1455 -5291.311]", + "133": "[-1068.9097 5971.6841 -5274.7598]", + "134": "[-1069.381 5448.9785 -5273.5264]", + "135": "[-1068.7133 4927.7935 -5273.314]", + "136": "[-1068.9852 4406.5947 -5273.3774]", + "137": "[-1069.573 3889.4258 -5273.439]", + "138": "[-1068.9806 3367.9844 -5273.4229]", + "139": "[-1068.913 2850.1274 -5273.418]", + "140": "[-1069.1246 2328.2776 -5273.3442]", + "141": "[-1069.3137 1809.4321 -5273.4111]", + "142": "[-1068.8923 1286.6053 -5273.4688]", + "143": "[-1069.0417 761.3607 -5273.3882]", + "144": "[-1069.7817 237.9673 -5273.2295]", + "145": "[-1068.9418 -283.5324 -5273.3926]", + "146": "[-1068.7813 -803.2028 -5273.4155]", + "147": "[-1069.2131 -1321.0343 -5273.4248]", + "148": "[-1069.4551 -1837.0529 -5273.4268]", + "149": "[-1068.8628 -2349.9243 -5273.3975]", + "150": "[-1068.7008 -2877.1797 -5273.438]", + "151": "[-1068.724 -3401.5579 -5273.4756]", + "152": "[-1069.123 -3923.1584 -5273.4751]", + "153": "[-1068.929 -4442.5562 -5273.4492]", + "154": "[-1068.6428 -4959.9468 -5273.4287]", + "155": "[-1068.8357 -5475.3438 -5273.4248]", + "156": "[-1070.0065 -5988.6177 -5273.2544]", + "157": "[-1086.7894 -6511.8613 -5273.0996]", + "158": "[-1139.1967 -7029.3901 -5273.6025]", + "159": "[-1237.9387 -7535.8589 -5273.2222]", + "160": "[-1396.3795 -8036.6851 -5272.8618]", + "161": "[-1619.1816 -8507.6621 -5273.1445]", + "162": "[-1912.2506 -8933.4512 -5273.1729]", + "163": "[-2270.8291 -9300.9961 -5273.2466]", + "164": "[-2696.5378 -9605.8271 -5273.0957]", + "165": "[-3163.1902 -9838.2471 -5273.4253]", + "166": "[-3659.0403 -10002.5762 -5273.3047]", + "167": "[-4162.9634 -10108.0273 -5273.3242]", + "168": "[-4672.7036 -10165.1846 -5273.4424]", + "169": "[-5196.23 -10183.0742 -5272.8608]", + "170": "[-5715.8262 -10160.9023 -5273.1875]", + "171": "[-6227.8115 -10097.2334 -5273.3164]", + "172": "[-6739.7515 -9983.8154 -5273.019]", + "173": "[-7230.7534 -9810.3223 -5273.5337]", + "174": "[-7689.0483 -9571.543 -5273.2539]", + "175": "[-8099.4868 -9264.0977 -5273.2046]", + "176": "[-8455.6035 -8883.6777 -5273.2563]", + "177": "[-8740.4492 -8450.7305 -5273.2998]", + "178": "[-8953.0723 -7980.4868 -5273.2437]", + "179": "[-9101.9199 -7488.3198 -5273.3589]", + "180": "[-9195.7949 -6981.4263 -5273.2939]", + "181": "[-9245.1152 -6465.7275 -5273.375]", + "182": "[-9259.3115 -5948.3613 -5273.3721]", + "183": "[-9261.1895 -5432.3809 -5273.4614]", + "184": "[-9259.459 -4912.8359 -5273.4023]", + "185": "[-9260.9229 -4394.0474 -5273.5063]", + "186": "[-9260.4482 -3879.1904 -5273.4478]", + "187": "[-9259.7754 -3352.272 -5273.4248]", + "188": "[-9260.251 -2835.2437 -5273.4185]", + "189": "[-9260.6475 -2307.364 -5273.4497]", + "190": "[-9260.1758 -1785.9907 -5273.4209]", + "191": "[-9260.083 -1271.9915 -5273.3604]", + "192": "[-9260.6924 -751.6728 -5273.4048]", + "193": "[-9260.3496 -230.1136 -5273.4521]", + "194": "[-9259.958 289.5346 -5273.3789]", + "195": "[-9260.0508 807.2825 -5273.2935]", + "196": "[-9260.1621 1323.1759 -5273.377]", + "197": "[-9260.4209 1837.2067 -5273.4009]", + "198": "[-9260.6523 2359.9744 -5273.3936]", + "199": "[-9260.2871 2883.6086 -5273.3916]", + "200": "[-9259.3184 3402.8679 -5273.3848]", + "201": "[-9260.8076 3922.1951 -5273.2983]", + "202": "[-9260.4434 4438.1431 -5273.4165]", + "203": "[-9259.9131 4952.0894 -5273.3589]", + "204": "[-9260.7197 5478.271 -5273.3745]", + "205": "[-9260.1309 5999.0078 -5273.2803]", + "206": "[-9260.8721 6521.0659 -5273.3677]", + "207": "[-9260.3623 7041.0918 -5273.4404]", + "208": "[-9260.2568 7559.1182 -5273.4253]", + "209": "[-9260.4727 8075.1724 -5273.4238]", + "210": "[-9260.4258 8589.2637 -5273.3633]", + "211": "[-9260.3037 9101.4072 -5273.4561]", + "212": "[-9260.8809 9625.7402 -5273.4893]", + "213": "[-9259.6074 10147.9141 -5273.1631]", + "214": "[-9245.0049 10667.1768 -5273.3975]", + "215": "[-9196.8623 11180.9453 -5273.3638]", + "216": "[-9102.8926 11684.8848 -5273.2578]", + "217": "[-8952.6885 12185.5713 -5273.2529]", + "218": "[-8736.9941 12657.3223 -5273.1816]", + "219": "[-8453.9912 13087.1221 -5273.1289]", + "220": "[-8094.2178 13468.7412 -5273.2734]", + "221": "[-7675.4331 13779.4082 -5272.9458]", + "222": "[-7214.6387 14016.6992 -5273.3511]", + "223": "[-6727.0352 14186.165 -5273.4106]", + "224": "[-6224.9082 14297.0547 -5273.3823]", + "225": "[-5716.3994 14359.7324 -5273.2939]", + "226": "[-5194.9038 14383.9609 -5273.4863]", + "227": "[-4670.0415 14388.2715 -5273.3862]", + "228": "[-4144.6543 14386.8936 -5273.4819]", + "229": "[-3621.3635 14387.4756 -5273.4409]", + "230": "[-3100.1382 14387.835 -5273.4307]", + "231": "[-2580.9771 14387.5107 -5273.3462]", + "232": "[-2063.823 14387.3662 -5273.4497]", + "233": "[-1548.7195 14387.7129 -5273.5137]", + "234": "[-1035.6228 14387.124 -5273.5044]", + "235": "[-521.0953 14387.5869 -5273.3433]", + "236": "[4.6396 14387.5791 -5273.4019]", + "237": "[521.9709 14387.0654 -5273.4189]", + "238": "[1039.2723 14387.1895 -5273.4199]", + "239": "[1554.7543 14387.6152 -5273.3867]", + "240": "[2068.4307 14387.5127 -5273.4546]", + "241": "[2597.8962 14387.2568 -5273.4985]", + "242": "[3125.4609 14387.4746 -5273.5068]", + "243": "[3651.1133 14387.7822 -5273.417]", + "244": "[4174.8784 14387.79 -5273.4365]", + "245": "[4689.9434 14387.5791 -5273.439]", + "246": "[5212.3242 14387.4746 -5273.4268]", + "247": "[5727.9551 14387.3936 -5273.3926]", + "248": "[6241.666 14387.4014 -5273.4048]", + "249": "[6764.1089 14387.3691 -5273.4961]", + "250": "[7283.0591 14382.3916 -5273.271]", + "251": "[7798.188 14352 -5273.1265]", + "252": "[8306.0049 14281.6787 -5273.2329]", + "253": "[8813.8438 14158.4004 -5273.1919]", + "254": "[9299.0234 13976.4063 -5273.0229]", + "255": "[9748.7285 13726.4766 -5273.4307]", + "256": "[10159.3281 13400.7236 -5273.3584]", + "257": "[10495.4863 13020.251 -5273.3828]", + "258": "[10769.2949 12580.0518 -5273.4146]", + "259": "[10971.6104 12105.8379 -5273.1113]", + "260": "[11110.6563 11611.4482 -5273.1284]", + "261": "[11198.4131 11094.582 -5273.1367]", + "262": "[11240.1621 10574.3447 -5273.27]", + "263": "[11251.4004 10054.2979 -5273.4678]", + "264": "[11251.1973 9536.0654 -5273.4478]", + "265": "[11251.2129 9020.4023 -5273.4595]", + "266": "[11251.5371 8504.4668 -5273.4287]", + "267": "[11251.5107 7977.9951 -5273.4229]", + "268": "[11251.501 7463.0894 -5273.4258]", + "269": "[11251.0605 6937.2358 -5273.4302]", + "270": "[11251.043 6420.5361 -5273.478]", + "271": "[11251.4697 5899.9902 -5273.4194]", + "272": "[11251.4736 5374.9224 -5273.4453]", + "273": "[11251.6484 4851.7417 -5273.4839]", + "274": "[11251.4824 4330.417 -5273.4473]", + "275": "[11250.834 3810.947 -5273.4307]", + "276": "[11251.1816 3293.3179 -5273.3765]", + "277": "[11251.8174 2777.5005 -5273.4395]", + "278": "[11251.2744 2263.5022 -5273.4619]", + "279": "[11251.1982 1751.3064 -5273.3164]", + "280": "[11251.4277 1222.6715 -5273.3789]", + "281": "[11251.249 699.8514 -5273.4375]", + "282": "[11251.2109 172.1956 -5273.3784]", + "283": "[11251.3369 -355.5267 -5273.3218]", + "284": "[11251.2031 -881.2529 -5273.3882]", + "285": "[11251.373 -1404.9948 -5273.3252]", + "286": "[11251.0088 -1926.7977 -5273.3984]", + "287": "[11251.2266 -2450.1458 -5273.4268]", + "288": "[11250.9082 -2973.311 -5278.8022]", + "289": "[11251.2129 -3495.0869 -5302.1641]", + "290": "[11250.9219 -4008.896 -5347.8154]", + "291": "[11250.7783 -4523.0679 -5403.582]", + "292": "[11251.1201 -5043.5015 -5464.3882]", + "293": "[11251.2236 -5555.1836 -5525.5933]", + "294": "[11251.6904 -6070.1211 -5587.0723]", + "295": "[11251.459 -6586.4077 -5648.022]", + "296": "[11251.4443 -7110.6445 -5705.8286]", + "297": "[11251.5811 -7631.2402 -5753.6304]", + "298": "[11251.377 -8145.8442 -5778.1963]", + "299": "[11251.3457 -8671.5029 -5785.686]", + "300": "[11251.3867 -9196.502 -5785.479]", + "301": "[11251.377 -9719.3838 -5785.4253]", + "302": "[11251.6104 -10240.208 -5785.2944]", + "303": "[11251.4922 -10758.9121 -5785.4297]", + "304": "[11247.8877 -11274.71 -5785.1787]", + "305": "[11219.96 -11796.4707 -5785.3008]", + "306": "[11152.9824 -12315.2041 -5785.3633]", + "307": "[11036.4482 -12816.0996 -5785.3872]", + "308": "[10862.0947 -13298.7549 -5785.2544]", + "309": "[10618.8779 -13756.5664 -5785.397]", + "310": "[10306.6445 -14165.0029 -5785.4526]", + "311": "[9924.001 -14517.1895 -5785.3877]", + "312": "[9490.1357 -14797.25 -5785.4321]", + "313": "[9021.0605 -15006.3115 -5785.2949]", + "314": "[8521.6426 -15153.4424 -5785.4092]", + "315": "[8012.2397 -15245.1865 -5785.3135]", + "316": "[7500.3154 -15291.0303 -5785.4165]", + "317": "[6985.7505 -15305.207 -5798.5752]", + "318": "[6469.4966 -15305.4512 -5830.749]", + "319": "[5950.9097 -15306.8252 -5882.502]", + "320": "[5436.228 -15305.2822 -5940.3877]", + "321": "[4916.1392 -15306.5215 -6002.0376]", + "322": "[4406.0532 -15305.8301 -6063.9248]", + "323": "[3897.6814 -15305.9531 -6126.1963]", + "324": "[3380.4963 -15306.1045 -6189.689]", + "325": "[2870.7241 -15305.8604 -6252.2705]", + "326": "[2356.7229 -15305.6934 -6315.3389]", + "327": "[1840.1534 -15306.2646 -6378.7769]", + "328": "[1322.6 -15306.1748 -6442.3252]", + "329": "[808.8389 -15305.8799 -6505.3398]", + "330": "[300.2185 -15305.9375 -6567.8491]", + "331": "[-216.0235 -15306.4316 -6631.2881]", + "332": "[-729.3888 -15306.0977 -6694.3335]", + "333": "[-1238.113 -15306 -6756.7153]", + "334": "[-1746.5685 -15306.3018 -6819.1772]", + "335": "[-2269.8577 -15306.1582 -6883.4277]", + "336": "[-2790.8577 -15306.1064 -6947.396]", + "337": "[-3308.1555 -15306.0186 -7010.8823]", + "338": "[-3820.3669 -15305.6992 -7073.811]", + "339": "[-4344.4565 -15306.1016 -7138.2144]", + "340": "[-4861.6797 -15305.8848 -7201.728]", + "341": "[-5370.73 -15306.1348 -7264.168]", + "342": "[-5881.2861 -15306.1045 -7326.9146]", + "343": "[-6400.2295 -15305.6943 -7390.5996]", + "344": "[-6913.7495 -15305.6748 -7453.6284]", + "345": "[-7431.5693 -15306.0537 -7517.1206]", + "346": "[-7949.3638 -15305.9629 -7580.7686]", + "347": "[-8462.499 -15306.3896 -7643.6611]", + "348": "[-8975.7236 -15306.333 -7705.6499]", + "349": "[-9491.4453 -15306.5898 -7766.9956]", + "350": "[-10009.2168 -15306.5596 -7825.1079]", + "351": "[-10521.292 -15306.2969 -7875.6675]", + "352": "[-11042.043 -15306.4658 -7907.665]", + "353": "[-11560.0117 -15306.4795 -7919.5903]", + "354": "[-12075.6484 -15305.2148 -7919.5215]", + "355": "[-12594.8037 -15280.5635 -7919.1279]", + "356": "[-13103.1475 -15210.1816 -7919.3975]", + "357": "[-13598.6963 -15071.4473 -7919.2065]", + "358": "[-14054.7725 -14851.8008 -7919.1387]", + "359": "[-14334.6553 -14650.5479 -7919.4185]", + "360": "[-14652.0693 -14324.3936 -7919.4019]", + "361": "[-14847.1201 -14037.0635 -7919.415]", + "362": "[-15058.2813 -13568.9922 -7919.3691]", + "363": "[-15188.1064 -13067.123 -7919.2832]", + "364": "[-15250.6504 -12557.7705 -7919.2344]", + "365": "[-15269.1641 -12045.46 -7923.8931]", + "366": "[-15269.1748 -11531.624 -7947.2285]", + "367": "[-15270.2227 -11016.5693 -7991.1074]", + "368": "[-15270.2305 -10499.584 -8046.6943]", + "369": "[-15269.875 -9982.9971 -8106.9829]", + "370": "[-15270.248 -9473.5762 -8168.147]", + "371": "[-15270.1045 -8955.2178 -8231.3018]", + "372": "[-15270.6182 -8444.2393 -8294.1094]", + "373": "[-15271.0811 -7932.8433 -8356.875]", + "374": "[-15270.4746 -7411.1235 -8420.9365]", + "375": "[-15269.9131 -6895.209 -8484.3369]", + "376": "[-15270.7305 -6373.748 -8548.3662]", + "377": "[-15270.3799 -5863.7183 -8610.9658]", + "378": "[-15270.0684 -5352.52 -8673.3213]", + "379": "[-15270.6318 -4841.7769 -8734.875]", + "380": "[-15270.1797 -4319.9219 -8795.8516]", + "381": "[-15270.4629 -3797.5054 -8853.207]", + "382": "[-15270.4336 -3279.6167 -8900.2627]", + "383": "[-15269.3721 -2755.6028 -8924.5576]", + "384": "[-15257.6191 -2226.9663 -8930.6191]", + "385": "[-15228.2217 -1713.653 -8930.1494]", + "386": "[-15177.4863 -1186.085 -8930.2393]", + "387": "[-15103.8721 -663.8593 -8930.3047]", + "388": "[-15005.9697 -149.2033 -8930.249]", + "389": "[-14880.918 356.9326 -8930.375]", + "390": "[-14726.9512 852.7014 -8930.4697]", + "391": "[-14542.4053 1335.5033 -8930.457]", + "392": "[-14320.2217 1810.8513 -8930.4561]", + "393": "[-14067.3906 2259.031 -8930.334]", + "394": "[-13779.9365 2682.9495 -8930.0303]", + "395": "[-13447.2471 3092.8853 -8930.2236]", + "396": "[-13080.5645 3469.1775 -8930.3193]", + "397": "[-12683.5684 3809.604 -8930.2461]", + "398": "[-12260.167 4112.6255 -8930.1709]", + "399": "[-11814.8311 4377.9165 -8930.1816]", + "400": "[-11352.0439 4606.5435 -8930.3096]", + "401": "[-10875.9561 4800.4282 -8930.3955]", + "402": "[-10373.1133 4966.6592 -8930.3252]", + "403": "[-9863.1064 5101.3662 -8930.2305]", + "404": "[-9348.2637 5206.7964 -8930.2012]", + "405": "[-8830.7725 5286.4326 -8930.2969]", + "406": "[-8312.2832 5342.752 -8930.1826]", + "407": "[-7794.0933 5377.8584 -8930.1914]", + "408": "[-7277.9629 5394.1958 -8930.4805]", + "409": "[-6763.7432 5397.1509 -8930.5244]", + "410": "[-6251.4282 5396.8818 -8930.4199]", + "411": "[-5723.979 5397.0752 -8930.3545]", + "412": "[-5198.8394 5397.2036 -8930.293]", + "413": "[-4680.2642 5396.8164 -8930.3955]", + "414": "[-4163.4736 5397.4204 -8930.4365]", + "415": "[-3648.6272 5397.0908 -8930.5107]", + "416": "[-3135.6936 5396.8921 -8930.4609]", + "417": "[-2610.5286 5397.5386 -8930.291]", + "418": "[-2088.8403 5396.5903 -8930.373]", + "419": "[-1574.0404 5397.2959 -8930.4043]", + "420": "[-1054.9766 5397.1631 -8930.4258]", + "421": "[-541.0719 5396.7104 -8930.4463]", + "422": "[-27.88 5397.3496 -8930.415]", + "423": "[32.0801 5396.3413 -8930.29]" + }, + "17": + { + "1": "[-5.4018 6404.8491 -8930.4209]", + "2": "[-107.5083 6404.8486 -8930.458]", + "3": "[-621.8191 6405.1279 -8930.4629]", + "4": "[-1136.0247 6404.8452 -8930.4482]", + "5": "[-1655.3812 6405.2769 -8930.3564]", + "6": "[-2177.3679 6404.7393 -8930.5293]", + "7": "[-2690.6777 6405.1167 -8930.3926]", + "8": "[-3217.5635 6404.8237 -8930.4746]", + "9": "[-3742.4534 6404.9966 -8930.458]", + "10": "[-4265.3267 6404.7422 -8930.2646]", + "11": "[-4786.2358 6405.2207 -8930.3418]", + "12": "[-5305.1792 6404.8008 -8930.5088]", + "13": "[-5822.1841 6405.0938 -8930.4971]", + "14": "[-6337.2397 6404.7822 -8930.3516]", + "15": "[-6850.3726 6405.3145 -8930.3896]", + "16": "[-7376.2515 6404.4297 -8930.2041]", + "17": "[-7900.0034 6399.4956 -8930.4131]", + "18": "[-8420.3584 6379.6348 -8930.3105]", + "19": "[-8934.4375 6341.1812 -8930.4287]", + "20": "[-9450.0469 6281.0791 -8930.5088]", + "21": "[-9960.2393 6198.4707 -8930.3926]", + "22": "[-10463.3809 6090.4199 -8930.4023]", + "23": "[-10957.9717 5956.3779 -8930.3564]", + "24": "[-11457.4336 5786.9629 -8930.5996]", + "25": "[-11941.6523 5585.355 -8930.4131]", + "26": "[-12406.8027 5348.5098 -8930.3613]", + "27": "[-12850.0059 5077.7139 -8930.3984]", + "28": "[-13266.251 4771.4619 -8930.4033]", + "29": "[-13652.9531 4432.5659 -8930.3438]", + "30": "[-14008.5488 4059.8345 -8930.375]", + "31": "[-14334.1729 3652.3462 -8930.2441]", + "32": "[-14619.5781 3224.4897 -8930.3145]", + "33": "[-14872.4219 2767.9092 -8930.3164]", + "34": "[-15092.5967 2287.2681 -8930.3486]", + "35": "[-15276.0449 1797.9171 -8930.3213]", + "36": "[-15425.8789 1301.0996 -8930.1543]", + "37": "[-15546.3086 800.1798 -8930.2217]", + "38": "[-15641.9971 281.706 -8930.3252]", + "39": "[-15711.6924 -232.3162 -8930.2988]", + "40": "[-15760.8477 -760.877 -8930.2441]", + "41": "[-15788.1611 -1281.7568 -8930.2021]", + "42": "[-15797.9668 -1810.36 -8930.5771]", + "43": "[-15798.1885 -2326.9365 -8930.3018]", + "44": "[-15797.5215 -2853.9341 -8921.8389]", + "45": "[-15798.1338 -3386.5449 -8892.5879]", + "46": "[-15798.1348 -3904.366 -8842.3184]", + "47": "[-15797.7695 -4430.7837 -8783.3311]", + "48": "[-15797.8467 -4961.123 -8720.6533]", + "49": "[-15797.915 -5490.6621 -8656.4268]", + "50": "[-15797.7666 -6016.4761 -8592.209]", + "51": "[-15797.9043 -6538.0386 -8528.127]", + "52": "[-15797.8701 -7050.8506 -8465.083]", + "53": "[-15797.7979 -7573.1816 -8401.0635]", + "54": "[-15797.9424 -8083.4917 -8338.4063]", + "55": "[-15797.8154 -8601.5576 -8274.7871]", + "56": "[-15797.7998 -9125.9893 -8210.3662]", + "57": "[-15798.0293 -9636.8662 -8148.2134]", + "58": "[-15797.3896 -10157.2305 -8086.354]", + "59": "[-15797.6787 -10677.2881 -8026.7358]", + "60": "[-15797.7637 -11197.7822 -7973.354]", + "61": "[-15797.5596 -11716.7939 -7936.3271]", + "62": "[-15797.8916 -12236.4336 -7920.6411]", + "63": "[-15797.8408 -12752.6953 -7919.3057]", + "64": "[-15781.7363 -13272.7021 -7919.2534]", + "65": "[-15726.5801 -13787.8037 -7919.3521]", + "66": "[-15604.0234 -14286.6582 -7918.9834]", + "67": "[-15400.1045 -14763.6162 -7919.4238]", + "68": "[-15202.9697 -15065.2412 -7919.1792]", + "69": "[-14895.5605 -15392.501 -7919.3608]", + "70": "[-14626.6445 -15593.0586 -7919.3052]", + "71": "[-14165.5459 -15824.8457 -7919.436]", + "72": "[-13668.0234 -15973.2148 -7919.3091]", + "73": "[-13150.8936 -16047.3857 -7919.2192]", + "74": "[-12626.1709 -16072.6279 -7919.2861]", + "75": "[-12108.8203 -16074.5439 -7919.4653]", + "76": "[-11591.3877 -16073.6133 -7919.3296]", + "77": "[-11079.251 -16074.2705 -7908.644]", + "78": "[-10549.8594 -16074.0635 -7877.269]", + "79": "[-10037.7549 -16073.5703 -7826.5576]", + "80": "[-9511.1914 -16074.332 -7767.3789]", + "81": "[-9001.3848 -16074.2549 -7707.0449]", + "82": "[-8491.9824 -16073.4043 -7645.5024]", + "83": "[-7961.5747 -16073.2217 -7580.2959]", + "84": "[-7435.4009 -16073.7939 -7515.6001]", + "85": "[-6916.2134 -16074.0547 -7451.9336]", + "86": "[-6406.7681 -16073.7578 -7389.4131]", + "87": "[-5881.6382 -16073.5615 -7324.9487]", + "88": "[-5369.7778 -16073.4668 -7262.0825]", + "89": "[-4844.0449 -16073.3428 -7197.5439]", + "90": "[-4335.2729 -16073.4014 -7135.0991]", + "91": "[-3797.4167 -16073.585 -7069.0591]", + "92": "[-3266.7954 -16073.5283 -7003.9248]", + "93": "[-2743.4106 -16073.1846 -6939.5552]", + "94": "[-2227.1277 -16073.2959 -6876.2124]", + "95": "[-1717.9338 -16073.7363 -6813.6914]", + "96": "[-1188.0939 -16073.96 -6748.6245]", + "97": "[-666.0563 -16073.6641 -6684.4971]", + "98": "[-141.332 -16073.2256 -6620.1201]", + "99": "[382.418 -16073.4297 -6555.7666]", + "100": "[898.4272 -16073.876 -6492.4385]", + "101": "[1406.7307 -16073.8242 -6430.0967]", + "102": "[1933.5457 -16073.3193 -6365.3252]", + "103": "[2451.9883 -16073.0645 -6301.6816]", + "104": "[2962.1021 -16073.5391 -6239.063]", + "105": "[3488.8252 -16073.8252 -6174.3984]", + "106": "[4006.5081 -16073.6621 -6110.8828]", + "107": "[4515.2168 -16073.1855 -6048.4902]", + "108": "[5038.835 -16073.4297 -5985.103]", + "109": "[5549.6855 -16073.8086 -5925.1924]", + "110": "[6066.1201 -16073.6436 -5868.3628]", + "111": "[6592.2485 -16073.5273 -5819.2407]", + "112": "[7112.7993 -16074.3516 -5793.1787]", + "113": "[7638.4111 -16073.8672 -5785.0557]", + "114": "[8152.2417 -16072.1182 -5785.4741]", + "115": "[8666.4941 -16049.5059 -5785.2002]", + "116": "[9180.5293 -15991.4551 -5785.2666]", + "117": "[9683.1719 -15884.1475 -5785.2314]", + "118": "[10179.7207 -15717.2354 -5785.4424]", + "119": "[10644.7139 -15483.8721 -5785.0488]", + "120": "[11062.8145 -15180.71 -5785.5386]", + "121": "[11420.4238 -14812.8545 -5785.353]", + "122": "[11714.8154 -14380.6387 -5785.3052]", + "123": "[11934.1064 -13915.3174 -5785.2495]", + "124": "[12091.6729 -13414.1543 -5785.3208]", + "125": "[12189.7471 -12904.9258 -5785.1758]", + "126": "[12241.585 -12393.6582 -5785.1626]", + "127": "[12257.8486 -11868.0342 -5785.2739]", + "128": "[12259.4229 -11346.7441 -5785.3057]", + "129": "[12258.6318 -10823.1963 -5785.4331]", + "130": "[12259.2734 -10298.167 -5785.4248]", + "131": "[12259.0859 -9766.6064 -5785.3516]", + "132": "[12258.7148 -9238.5771 -5785.3843]", + "133": "[12259.2139 -8723.2568 -5785.2896]", + "134": "[12259.1377 -8204.2549 -5781.8496]", + "135": "[12258.9355 -7670.4551 -5757.0664]", + "136": "[12258.7783 -7142.397 -5708.6821]", + "137": "[12259.0957 -6622.541 -5652.23]", + "138": "[12259.085 -6111.5444 -5592.1245]", + "139": "[12258.5664 -5588.5034 -5529.4639]", + "140": "[12258.3359 -5079.7266 -5468.0552]", + "141": "[12258.7598 -4557.7847 -5407.4004]", + "142": "[12258.6582 -4040.8159 -5350.8936]", + "143": "[12258.5088 -3519.4194 -5303.9097]", + "144": "[12258.9609 -2998.0039 -5279.9331]", + "145": "[12257.8369 -2475.7393 -5273.3574]", + "146": "[12258.6318 -1957.5621 -5273.4619]", + "147": "[12258.1094 -1434.9935 -5273.4272]", + "148": "[12258.3291 -914.3333 -5273.4268]", + "149": "[12258.4463 -395.7527 -5273.4668]", + "150": "[12258.1787 120.7575 -5273.4556]", + "151": "[12258.3193 634.9905 -5273.2402]", + "152": "[12258.2783 1160.1113 -5273.3916]", + "153": "[12258.9434 1674.4263 -5273.5254]", + "154": "[12258.8203 2193.3943 -5273.4722]", + "155": "[12259.0537 2715.0925 -5273.4683]", + "156": "[12258.3896 3231.7842 -5272.9971]", + "157": "[12258.9033 3753.8167 -5273.2241]", + "158": "[12258.5313 4278.9019 -5273.3906]", + "159": "[12258.6855 4801.3315 -5273.291]", + "160": "[12259.2188 5321.6899 -5273.4546]", + "161": "[12258.8975 5840.082 -5273.4585]", + "162": "[12258.6445 6356.5361 -5273.4292]", + "163": "[12259.6426 6871.0483 -5273.4419]", + "164": "[12258.3916 7383.6421 -5273.4761]", + "165": "[12258.7236 7909.3203 -5273.4385]", + "166": "[12259.0752 8432.9775 -5273.4204]", + "167": "[12258.9961 8954.6533 -5273.4224]", + "168": "[12258.8721 9474.3672 -5273.3984]", + "169": "[12258.9688 9992.123 -5273.4214]", + "170": "[12258.7217 10507.9199 -5273.3906]", + "171": "[12259.2842 11021.7764 -5273.48]", + "172": "[12250.1729 11544.6445 -5273.2168]", + "173": "[12213.082 12059.4023 -5273.1685]", + "174": "[12130.9531 12577.7891 -5273.4824]", + "175": "[11994.6826 13080.4805 -5273.3506]", + "176": "[11798.6631 13560.5225 -5273.46]", + "177": "[11531.7598 14003.5342 -5273.2061]", + "178": "[11197.7939 14393.2559 -5273.4697]", + "179": "[10793.7578 14724.3096 -5273.356]", + "180": "[10342.3516 14981.8398 -5273.3965]", + "181": "[9860.0313 15169.3955 -5273.3691]", + "182": "[9357.3086 15296.3008 -5273.3413]", + "183": "[8842.167 15372.4873 -5273.3579]", + "184": "[8327.4053 15404.2158 -5273.4155]", + "185": "[7814.1724 15411.7588 -5273.3916]", + "186": "[7302.0811 15410.8193 -5273.4453]", + "187": "[6777.9058 15410.4629 -5273.4854]", + "188": "[6252.3115 15411.5859 -5273.3638]", + "189": "[5720.2266 15410.8809 -5273.4678]", + "190": "[5191.7173 15410.3867 -5273.4224]", + "191": "[4675.9634 15410.749 -5273.4668]", + "192": "[4155.9443 15411.1494 -5273.4526]", + "193": "[3637.5127 15411.0576 -5273.436]", + "194": "[3115.835 15410.8545 -5273.3281]", + "195": "[2595.949 15410.8125 -5273.3916]", + "196": "[2077.9121 15410.9717 -5273.4946]", + "197": "[1561.6761 15411.0557 -5273.438]", + "198": "[1047.222 15411.0205 -5273.4243]", + "199": "[534.542 15410.8691 -5273.4478]", + "200": "[-1.8559 15410.8096 -5273.459]", + "201": "[-531.2456 15410.8711 -5273.4399]", + "202": "[-1055.4476 15411.0771 -5273.3735]", + "203": "[-1567.8252 15410.959 -5273.334]", + "204": "[-2083.6575 15410.8506 -5273.3066]", + "205": "[-2612.5996 15411.127 -5273.4702]", + "206": "[-3135.8745 15411.335 -5273.5366]", + "207": "[-3652.4653 15411.0225 -5273.4756]", + "208": "[-4171.4492 15410.6709 -5273.4473]", + "209": "[-4692.4717 15410.8994 -5273.4326]", + "210": "[-5214.8481 15411.084 -5273.3677]", + "211": "[-5735.1343 15410.834 -5273.4746]", + "212": "[-6253.1045 15407.1211 -5273.1182]", + "213": "[-6767.3486 15379.3066 -5273.2373]", + "214": "[-7287.0708 15311.5762 -5272.9189]", + "215": "[-7793.8311 15192.6299 -5273.3223]", + "216": "[-8279.3652 15015.3281 -5273.2178]", + "217": "[-8731.4277 14772.2695 -5273.2705]", + "218": "[-9144.4307 14452.6729 -5273.4912]", + "219": "[-9493.1172 14068.3779 -5273.5439]", + "220": "[-9769.8555 13632.5947 -5273.3506]", + "221": "[-9976.2832 13161.8125 -5273.5122]", + "222": "[-10118.96 12669.9961 -5273.3262]", + "223": "[-10209.9727 12155.458 -5273.2295]", + "224": "[-10255.9043 11635.4443 -5273.2866]", + "225": "[-10268.5713 11118.5557 -5273.3418]", + "226": "[-10267.9863 10588.5332 -5273.4292]", + "227": "[-10267.2773 10063.0352 -5273.4629]", + "228": "[-10268.2236 9535.8438 -5273.4937]", + "229": "[-10268.4736 9016.5625 -5273.3384]", + "230": "[-10267.7695 8497.125 -5273.3159]", + "231": "[-10267.4629 7978.1489 -5273.4648]", + "232": "[-10268.0068 7460.9902 -5273.4526]", + "233": "[-10268.3467 6945.6299 -5273.4312]", + "234": "[-10268.1299 6422.4048 -5273.3706]", + "235": "[-10267.457 5894.6328 -5273.4331]", + "236": "[-10267.5137 5369.5518 -5273.4565]", + "237": "[-10268.3809 4856.2808 -5273.4624]", + "238": "[-10268.3506 4325.9097 -5273.3359]", + "239": "[-10267.4072 3797.4197 -5273.3677]", + "240": "[-10267.3711 3270.8516 -5273.4512]", + "241": "[-10268.1865 2752.0938 -5273.4043]", + "242": "[-10267.8516 2225.5496 -5273.3916]", + "243": "[-10267.3418 1699.1801 -5273.3677]", + "244": "[-10267.9912 1174.7889 -5273.3237]", + "245": "[-10267.54 652.3561 -5273.2026]", + "246": "[-10267.6982 131.9049 -5273.2813]", + "247": "[-10267.8652 -386.6249 -5273.2246]", + "248": "[-10267.791 -902.9102 -5273.5093]", + "249": "[-10268.1475 -1416.8861 -5273.1553]", + "250": "[-10268.0225 -1943.3081 -5273.4321]", + "251": "[-10267.8418 -2467.751 -5273.3711]", + "252": "[-10268.0625 -2990.2261 -5273.3677]", + "253": "[-10268.2705 -3510.7058 -5273.4077]", + "254": "[-10267.8008 -4029.2324 -5273.4229]", + "255": "[-10267.9326 -4545.8208 -5273.4224]", + "256": "[-10267.9756 -5060.4873 -5273.5]", + "257": "[-10267.873 -5573.2202 -5273.3716]", + "258": "[-10268.0938 -6098.6006 -5273.5298]", + "259": "[-10267.8643 -6621.9492 -5273.4629]", + "260": "[-10265.4736 -7143.2202 -5273.3027]", + "261": "[-10240.9883 -7661.3594 -5273.1167]", + "262": "[-10179.2412 -8172.8638 -5273.1592]", + "263": "[-10065.3994 -8685.4229 -5272.9438]", + "264": "[-9895.8887 -9171.3086 -5273.3276]", + "265": "[-9656.6592 -9627.1074 -5273.522]", + "266": "[-9349.1367 -10043.3516 -5273.4136]", + "267": "[-8979.1797 -10394.3262 -5273.5386]", + "268": "[-8551.0449 -10679.9707 -5273.2544]", + "269": "[-8082.4561 -10897.1455 -5273.2695]", + "270": "[-7589.1445 -11047.7959 -5273.1587]", + "271": "[-7081.7168 -11145.1455 -5273.2612]", + "272": "[-6560.5825 -11195.4424 -5273.3335]", + "273": "[-6041.9258 -11211.0791 -5273.416]", + "274": "[-5524.8213 -11212.5547 -5273.4277]", + "275": "[-5009.811 -11211.3545 -5273.3774]", + "276": "[-4496.894 -11212.7158 -5273.5244]", + "277": "[-3973.1819 -11205.7129 -5273.2876]", + "278": "[-3453.3235 -11173.3828 -5273.2959]", + "279": "[-2941.3301 -11099.3252 -5273.4951]", + "280": "[-2433.4944 -10972.3027 -5273.311]", + "281": "[-1947.6086 -10781.2695 -5273.4277]", + "282": "[-1499.0898 -10527.4043 -5273.3687]", + "283": "[-1097.8524 -10200.6963 -5273.3462]", + "284": "[-776.9085 -9829.3369 -5273.4736]", + "285": "[-503.7673 -9387.1982 -5273.4185]", + "286": "[-302.1321 -8905.4658 -5273.3052]", + "287": "[-163.7737 -8403.7246 -5273.373]", + "288": "[-78.7555 -7890.0063 -5273.2451]", + "289": "[-40.0906 -7377.7207 -5273.2017]", + "290": "[-28.6935 -6852.2964 -5273.5239]", + "291": "[-29.5488 -6328.6221 -5273.6021]", + "292": "[-30.3848 -5805.7695 -5273.4629]", + "293": "[-28.763 -5286.7246 -5273.4634]", + "294": "[-29.1629 -4765.459 -5273.4219]", + "295": "[-29.974 -4251.5771 -5273.4028]", + "296": "[-29.7129 -3729.4805 -5273.3882]", + "297": "[-28.9291 -3203.4353 -5273.5322]", + "298": "[-29.2922 -2677.4915 -5273.4312]", + "299": "[-29.9069 -2155.4749 -5273.375]", + "300": "[-29.5148 -1640.9183 -5273.5293]", + "301": "[-29.2025 -1107.1121 -5273.3701]", + "302": "[-29.4021 -593.1847 -5273.4312]", + "303": "[-29.8698 -81.016 -5273.4307]", + "304": "[-29.7186 459.3324 -5273.2725]", + "305": "[-29.2637 990.9053 -5273.5161]", + "306": "[-29.0921 1527.42 -5273.4595]", + "307": "[-29.4778 2040.2571 -5273.3066]", + "308": "[-29.5624 2573.7058 -5273.3979]", + "309": "[-29.466 3100.1348 -5273.4854]", + "310": "[-29.4409 3626.5376 -5273.4277]", + "311": "[-29.2446 4145.1875 -5273.4131]", + "312": "[-29.5044 4662.0361 -5273.3623]", + "313": "[-29.7514 5177.1079 -5273.457]", + "314": "[-29.3182 5712.9644 -5273.502]", + "315": "[-29.1183 6245.0713 -5279.98]", + "316": "[-29.0677 6764.251 -5307.7544]", + "317": "[-28.2108 7286.228 -5358.3711]", + "318": "[-29.4914 7806.7852 -5416.0171]", + "319": "[-29.0127 8318.9033 -5476.2051]", + "320": "[-29.3379 8828.418 -5537.6084]", + "321": "[-29.4658 9348.1787 -5599.6826]", + "322": "[-29.2436 9870.2236 -5660.3745]", + "323": "[-29.3694 10384.0059 -5715.7417]", + "324": "[-29.5538 10903.6445 -5759.689]", + "325": "[-28.906 11422.2998 -5781.1538]", + "326": "[-35.1585 11941.918 -5785.1211]", + "327": "[-64.5186 12457.8193 -5785.2988]", + "328": "[-135.0236 12966.2705 -5785.3901]", + "329": "[-256.2578 13471.0811 -5785.1357]", + "330": "[-436.1104 13953.2432 -5785.502]", + "331": "[-685.9932 14408.5859 -5785.355]", + "332": "[-1004.7524 14812.5996 -5785.5269]", + "333": "[-1391.4972 15158.7988 -5785.4658]", + "334": "[-1828.0461 15432.0293 -5785.4478]", + "335": "[-2306.7502 15638.8154 -5785.5132]", + "336": "[-2803.5891 15779.5303 -5785.2832]", + "337": "[-3318.9873 15867.6729 -5785.3491]", + "338": "[-3833.282 15909.8975 -5784.7412]", + "339": "[-4356.2041 15921.6084 -5785.0049]", + "340": "[-4878.3438 15921.5879 -5784.9683]", + "341": "[-5401.0049 15921.2354 -5784.8818]", + "342": "[-5915.0615 15922.1025 -5784.9048]", + "343": "[-6427.6782 15921.8867 -5784.8828]", + "344": "[-6949.3398 15921.1172 -5784.9175]", + "345": "[-7469.0215 15922.0039 -5784.895]", + "346": "[-7986.7148 15921.25 -5784.8403]", + "347": "[-8502.4639 15921.4219 -5784.8223]", + "348": "[-9016.2646 15921.6318 -5784.8872]", + "349": "[-9542.7168 15921.4717 -5784.9673]", + "350": "[-10067.1299 15921.5596 -5784.8735]", + "351": "[-10589.5244 15921.7393 -5784.9595]", + "352": "[-11109.9014 15921.4453 -5784.7324]", + "353": "[-11623.249 15921.2979 -5785.1577]", + "354": "[-12144.0742 15906.5244 -5785.0493]", + "355": "[-12659.6045 15862.126 -5784.8755]", + "356": "[-13171.1104 15768.9053 -5785.4297]", + "357": "[-13666.6777 15623.2656 -5785.1982]", + "358": "[-14135.3164 15414.8184 -5785.4458]", + "359": "[-14572.082 15133.2598 -5785.3789]", + "360": "[-14951.6807 14784.3193 -5785.1235]", + "361": "[-15265.5439 14376.0537 -5785.4165]", + "362": "[-15507.375 13923.0898 -5785.3633]", + "363": "[-15684.3125 13434.0625 -5785.416]", + "364": "[-15800.8701 12929.4229 -5785.3408]", + "365": "[-15867.8789 12417.8184 -5785.2749]", + "366": "[-15893.8896 11904.5684 -5785.3569]", + "367": "[-15900.3662 11392.4492 -5790.3091]", + "368": "[-15898.502 10877.0908 -5811.6714]", + "369": "[-15899.6855 10363.9229 -5856.1362]", + "370": "[-15898.873 9845.5215 -5911.813]", + "371": "[-15899.3467 9333.4297 -5971.2905]", + "372": "[-15898.9277 8815.2803 -6033.6274]", + "373": "[-15899.1592 8306.8232 -6095.5122]", + "374": "[-15899.5615 7795.8154 -6158.395]", + "375": "[-15899.1318 7283.6196 -6221.3696]", + "376": "[-15899.2666 6771.7549 -6284.0454]", + "377": "[-15899.2598 6261.791 -6346.7515]", + "378": "[-15899.5439 5737.9712 -6411.0767]", + "379": "[-15899.5596 5217.9697 -6474.9219]", + "380": "[-15898.8145 4703.6187 -6537.793]", + "381": "[-15898.5098 4193.0811 -6599.1938]", + "382": "[-15898.5859 3672.354 -6660.2993]", + "383": "[-15898.4746 3158.9053 -6716.856]", + "384": "[-15898.4268 2633.0476 -6765.2759]", + "385": "[-15898.6768 2116.2043 -6789.6968]", + "386": "[-15898.5586 1595.6915 -6796.7065]", + "387": "[-15898.5791 1076.3518 -6796.6904]", + "388": "[-15898.9658 559.1996 -6796.48]", + "389": "[-15899.2285 43.9011 -6796.416]", + "390": "[-15898.624 -469.5618 -6796.5044]", + "391": "[-15898.6514 -997.6718 -6796.4072]", + "392": "[-15899.3379 -1523.8198 -6796.4141]", + "393": "[-15899.2451 -2048.0342 -6796.4229]", + "394": "[-15898.9238 -2570.3335 -6796.4209]", + "395": "[-15899.1436 -3090.7327 -6796.4829]", + "396": "[-15899.0137 -3609.2256 -6796.4429]", + "397": "[-15898.8955 -4125.8237 -6796.3101]", + "398": "[-15899.0674 -4649.7837 -6796.4517]", + "399": "[-15899.0527 -5169.8101 -6796.4429]", + "400": "[-15898.957 -5684.9038 -6796.4243]", + "401": "[-15898.7939 -6197.9775 -6796.4263]", + "402": "[-15899.042 -6722.4619 -6796.4209]", + "403": "[-15898.6348 -7236.6084 -6796.4131]", + "404": "[-15899.1465 -7749.7202 -6796.4478]", + "405": "[-15898.9375 -8262.7266 -6796.437]", + "406": "[-15888.4033 -8782.0498 -6796.3569]", + "407": "[-15843.9639 -9295.6426 -6796.3135]", + "408": "[-15735.3242 -9804.0908 -6796.3101]", + "409": "[-15550.4072 -10283.999 -6796.3018]", + "410": "[-15328.9805 -10649.9102 -6796.459]", + "411": "[-15090.7578 -10921.6855 -6796.3989]", + "412": "[-14740.3418 -11201.9209 -6796.3569]", + "413": "[-14410.6934 -11381.6475 -6796.4604]", + "414": "[-13926.2695 -11551.8877 -6796.4614]", + "415": "[-13416.8018 -11647.8242 -6796.1001]", + "416": "[-12898.5205 -11684.9277 -6796.2793]", + "417": "[-12380.5313 -11693.2305 -6801.0693]", + "418": "[-11866.7285 -11691.1602 -6823.8667]", + "419": "[-11356.4297 -11691.9121 -6867.6177]", + "420": "[-10836.3203 -11692.3096 -6923.874]", + "421": "[-10316.9238 -11692.0781 -6984.2217]", + "422": "[-9795.2354 -11691.6875 -7047.0435]", + "423": "[-9268.166 -11692.4912 -7111.1216]", + "424": "[-8741.8828 -11691.876 -7175.8794]", + "425": "[-8227.1885 -11691.3545 -7239.062]", + "426": "[-7704.1382 -11691.9541 -7303.313]", + "427": "[-7194.1855 -11692.5068 -7365.9336]", + "428": "[-6676.6235 -11692.3486 -7429.4961]", + "429": "[-6151.4751 -11692.1953 -7493.9751]", + "430": "[-5635.1484 -11691.7422 -7557.354]", + "431": "[-5109.2124 -11691.8613 -7621.8975]", + "432": "[-4588.6157 -11692.2412 -7685.8555]", + "433": "[-4080.05 -11691.9414 -7748.333]", + "434": "[-3562.2375 -11691.7275 -7811.9917]", + "435": "[-3047.498 -11691.7617 -7875.1377]", + "436": "[-2530.3049 -11691.8867 -7938.6162]", + "437": "[-2020.2939 -11691.8438 -8001.23]", + "438": "[-1511.6769 -11691.9355 -8063.689]", + "439": "[-988.9805 -11691.8271 -8127.917]", + "440": "[-478.6815 -11692.3662 -8190.4707]", + "441": "[32.1578 -11692.0469 -8253.3066]", + "442": "[551.7845 -11691.8867 -8317.0547]", + "443": "[1067.3556 -11691.8896 -8380.3594]", + "444": "[1581.5137 -11691.7305 -8443.4795]", + "445": "[2095.9663 -11692.2021 -8506.6426]", + "446": "[2611.2307 -11691.9932 -8569.9395]", + "447": "[3125.0654 -11691.7676 -8633.0137]", + "448": "[3639.4731 -11691.877 -8695.6416]", + "449": "[4150.3696 -11691.6133 -8756.6855]", + "450": "[4660.5132 -11691.6729 -8815.3838]", + "451": "[5173.3569 -11691.8135 -8869.3457]", + "452": "[5526.583 -11691.7451 -8899.6953]" + }, + "18": + { + "1": "[11251.2822 -2846.6602 -5276.2046]", + "2": "[11250.5547 -2745.4106 -5274.5405]", + "3": "[11273.752 -2232.116 -5273.4658]", + "4": "[11341.5039 -1723.3824 -5273.4878]", + "5": "[11467.9209 -1224.1456 -5273.5161]", + "6": "[11640.8496 -741.1426 -5273.5127]", + "7": "[11834.1465 -266.414 -5273.4561]", + "8": "[12013.6611 215.2262 -5273.4136]", + "9": "[12149.1484 711.9863 -5273.4116]", + "10": "[12227.374 1218.7456 -5273.3076]", + "11": "[12256.1387 1730.2482 -5273.457]", + "12": "[12257.7246 1841.8517 -5273.4448]" + }, + "19": + { + "1": "[-4575.7266 15072.3008 -3751.1946]", + "2": "[-4068.468 15151.6064 -3751.3816]", + "3": "[-3566.6575 15254.1895 -3751.3569]", + "4": "[-3059.1482 15340.1133 -3751.5522]", + "5": "[-2549.1782 15387.6436 -3751.4622]", + "6": "[-2034.6593 15406.7793 -3754.8049]", + "7": "[-1517.8894 15411.1045 -3774.1689]", + "8": "[-1003.7453 15410.8066 -3816.3381]", + "9": "[-491.0555 15410.291 -3870.7959]", + "10": "[18.2716 15410.4434 -3929.6108]", + "11": "[529.1116 15410.9424 -3991.2002]", + "12": "[1041.2151 15410.4189 -4053.7305]", + "13": "[1557.1549 15410.6826 -4117.3198]", + "14": "[2070.2734 15410.3516 -4180.3618]", + "15": "[2581.3459 15410.6816 -4242.9468]", + "16": "[3101.8079 15410.3574 -4306.9878]", + "17": "[3616.731 15410.0518 -4370.1782]", + "18": "[4132.4795 15410.376 -4433.5]", + "19": "[4653.084 15410.6426 -4497.0845]", + "20": "[5164.8159 15410.9658 -4558.8579]", + "21": "[5679.0669 15411.2314 -4619.5156]", + "22": "[6200.2905 15410.9639 -4677.21]", + "23": "[6720.7627 15411.1885 -4726.457]", + "24": "[7236.314 15410.5293 -4753.728]", + "25": "[7758.1084 15409.0059 -4762.3979]", + "26": "[8277.9482 15387.3701 -4762.2563]", + "27": "[8791.1377 15331.1006 -4762.5537]", + "28": "[9292.5322 15225.5449 -4761.7378]", + "29": "[9786.915 15062.2725 -4762.3984]", + "30": "[10250.4766 14833.5918 -4762.166]", + "31": "[10668.8291 14536.2686 -4762.4609]", + "32": "[11035.9824 14164.6934 -4762.293]", + "33": "[11331.1084 13737.4707 -4762.3521]", + "34": "[11553.9971 13271.4854 -4762.438]", + "35": "[11710.9414 12781.7256 -4762.2095]", + "36": "[11813.2139 12268.0918 -4762.1836]", + "37": "[11867.6133 11749.6787 -4762.2969]", + "38": "[11884.8125 11230.001 -4771.4277]", + "39": "[11887.5918 10717.1074 -4800.3481]", + "40": "[11886.208 10203.3428 -4848.8604]", + "41": "[11887.0176 9682.8047 -4906.8706]", + "42": "[11886.4697 9168.1455 -4967.54]", + "43": "[11887.1777 8647.9619 -5029.8628]", + "44": "[11886.7549 8131.7217 -5091.7813]", + "45": "[11887.0723 7613.2217 -5151.7207]", + "46": "[11886.7861 7092.0405 -5207.522]", + "47": "[11886.8984 6570.021 -5250.395]", + "48": "[11887.0781 6054.8618 -5270.7061]", + "49": "[11891.5586 5538.7471 -5273.4063]", + "50": "[11910.3457 5025.1523 -5273.5386]", + "51": "[11959.6152 4515.0508 -5273.356]", + "52": "[12045.7783 4009.2742 -5273.2725]", + "53": "[12148.3408 3507.6252 -5273.3984]", + "54": "[12227.0449 3000.5256 -5273.251]", + "55": "[12256.3164 2488.7876 -5273.4839]" + }, + "20": + { + "1": "[1537.4489 -15138.3076 -10009.4473]", + "2": "[1023.1358 -15074.9795 -10009.3574]", + "3": "[521.5983 -14953.917 -10009.4229]", + "4": "[34.8936 -14783.71 -10009.251]", + "5": "[-440.8094 -14590.8457 -10009.3672]", + "6": "[-921.0248 -14408.6563 -10009.3828]", + "7": "[-1419.4646 -14267.8105 -10009.4707]", + "8": "[-1929.4438 -14182.6152 -10009.4355]" + }, + "21": + { + "1": "[-6453.1411 10669.6846 -10521.4961]", + "2": "[-5944.4819 10730.8672 -10521.4609]", + "3": "[-5439.1509 10830.0332 -10521.418]", + "4": "[-4934.4395 10927.1113 -10521.5088]", + "5": "[-4425.979 10987.6084 -10521.4756]", + "6": "[-3910.8796 11015.8438 -10521.3906]", + "7": "[-3393.3833 11023.4385 -10521.3887]", + "8": "[-2877.9756 11024.5146 -10521.4512]", + "9": "[-2359.4197 11025.1895 -10521.4131]", + "10": "[-1837.0775 11024.7598 -10521.2305]", + "11": "[-1313.5604 11024.4824 -10521.3477]", + "12": "[-797.0997 11024.6689 -10521.4619]", + "13": "[-272.6636 11024.8623 -10521.4287]", + "14": "[246.4557 11024.4756 -10521.5049]", + "15": "[760.2831 11024.3945 -10521.418]", + "16": "[1285.0769 11024.5771 -10521.5381]", + "17": "[1805.2994 11024.3945 -10521.4326]", + "18": "[2322.8381 11024.5088 -10521.3633]", + "19": "[2836.7688 11024.0986 -10521.4453]", + "20": "[3355.2957 11024.2959 -10521.4229]", + "21": "[3872.1084 11024.0605 -10521.3633]", + "22": "[4385.064 11024.1533 -10521.418]", + "23": "[4474.5356 11024.0137 -10521.1191]" + }, + "22": + { + "1": "[-1167.4999 11024.5273 -10521.4629]", + "2": "[-1681.0438 11037.7881 -10521.5]", + "3": "[-2192.5417 11089.5332 -10521.3994]", + "4": "[-2701.8257 11178.9482 -10521.2764]", + "5": "[-3211.1145 11256.8789 -10521.375]", + "6": "[-3726.5107 11291.1055 -10521.3965]", + "7": "[-4111.668 11304.9463 -10521.4346]" + }, + "23": + { + "1": "[4864.2183 11288.0918 -10521.4229]", + "2": "[3942.1597 11288.3926 -10521.4082]", + "3": "[3427.7063 11288.25 -10521.4824]", + "4": "[2905.4509 11288.2939 -10521.3945]", + "5": "[2381.0239 11288.751 -10521.4912]", + "6": "[1861.7886 11288.5039 -10521.3789]", + "7": "[1347.7365 11288.2939 -10521.4922]", + "8": "[826.1921 11288.4541 -10521.4092]", + "9": "[310.0796 11288.3506 -10521.4814]", + "10": "[-204.0466 11288.3711 -10521.418]", + "11": "[-725.96 11288.1914 -10521.4375]", + "12": "[-1245.606 11288.5928 -10521.4688]", + "13": "[-1762.453 11288.1953 -10521.4668]", + "14": "[-2275.8979 11288.7217 -10521.2764]", + "15": "[-2792.5251 11288.5654 -10521.3369]", + "16": "[-3307.199 11289.127 -10521.2139]", + "17": "[-3831.1672 11294.7881 -10521.2666]", + "18": "[-4354.438 11318.8916 -10521.5195]", + "19": "[-4874.5313 11376.6406 -10521.2451]", + "20": "[-5386.6436 11472.1299 -10521.334]", + "21": "[-5890.8584 11572.4707 -10521.4375]", + "22": "[-6401.8311 11638.7178 -10521.5371]" + }, + "24": + { + "1": "[145.9695 10829.6475 -1622.6833]", + "2": "[427.8542 10398.0811 -1622.4144]", + "3": "[660.5457 9940.5381 -1622.3754]", + "4": "[862.7678 9468.8721 -1622.2606]", + "5": "[1065.4482 8998.4248 -1622.3685]", + "6": "[1305.1803 8541.917 -1622.3842]", + "7": "[1591.6849 8116.3594 -1622.142]" + }, + "25": + { + "1": "[4298.6138 -548.6555 20.5322]", + "2": "[4278.6479 -35.0244 20.6325]", + "3": "[4216.3296 473.6113 20.5588]", + "4": "[4124.7251 979.5752 20.5589]", + "5": "[4057.8076 1489.1124 20.5382]", + "6": "[4037.5989 1800.4259 20.5669]" + }, + "26": + { + "1": "[4238.0347 11023.249 -10521.501]", + "2": "[4338.4165 11023.1865 -10521.4824]", + "3": "[4852.3125 11022.9512 -10521.4336]", + "4": "[5366.8091 11022.792 -10521.5137]", + "5": "[5883.7925 11022.6396 -10521.4443]", + "6": "[6398.1641 11022.7549 -10522.6592]", + "7": "[6913.9722 11023.3379 -10539.124]", + "8": "[7425.8677 11023.2207 -10576.1016]", + "9": "[7935.77 11023.2275 -10628.2656]", + "10": "[8447.7939 11023.1514 -10686.4639]", + "11": "[8963.0283 11022.7695 -10748.293]", + "12": "[9470.3594 11006.1514 -10816.2783]", + "13": "[9980.0381 10961.2754 -10884.6279]", + "14": "[10485.9043 10864.0586 -10942.2803]", + "15": "[10979.0332 10718.6973 -10984.4023]", + "16": "[11446.6357 10509.749 -11013.3584]", + "17": "[11871.9932 10224.1436 -11032.2285]", + "18": "[12182.8584 9924.8086 -11041.709]", + "19": "[12492.6885 9511.1025 -11046.2842]", + "20": "[12715.2324 9071.1904 -11045.833]", + "21": "[12875.4395 8582.6084 -11043.6436]", + "22": "[12971.3477 8079.4424 -11040.5479]", + "23": "[13020.6201 7560.7363 -11036.4004]", + "24": "[13034.9463 7041.8457 -11033.9756]", + "25": "[13036.1924 6524.2529 -11033.4922]", + "26": "[13035.7598 6007.4399 -11033.3984]", + "27": "[13036.0146 5491.0664 -11033.4863]", + "28": "[13036.167 4971.9756 -11046.5938]", + "29": "[13035.5996 4453.7441 -11079.0684]", + "30": "[13036.2012 3939.8345 -11130.2383]", + "31": "[13035.8027 3421.7888 -11188.6582]", + "32": "[13036.0908 2904.0906 -11249.8008]", + "33": "[13025.6943 2387.0759 -11318.7295]", + "34": "[12983.7139 1878.4086 -11387.1318]", + "35": "[12896.2588 1377.252 -11445.7461]", + "36": "[12758.1709 875.1086 -11491.2295]", + "37": "[12557.5625 397.8955 -11521.7783]", + "38": "[12277.3164 -38.9672 -11542.1455]", + "39": "[11976.1963 -365.3413 -11552.6611]", + "40": "[11565.1328 -681.3035 -11558.1064]", + "41": "[11107.6162 -921.2552 -11558.1035]", + "42": "[10618.5498 -1084.5851 -11555.5371]", + "43": "[10114.1572 -1183.0703 -11552.6455]", + "44": "[9604.4209 -1233.3522 -11548.667]", + "45": "[9092.665 -1248.0078 -11556.3701]", + "46": "[8574.3711 -1250.9382 -11586.3516]", + "47": "[8055.3291 -1249.3761 -11636.2832]", + "48": "[7544.6719 -1250.5852 -11693.585]", + "49": "[7028.4692 -1249.4918 -11754.4668]", + "50": "[6508.5537 -1244.0417 -11823.3857]", + "51": "[5995.1333 -1205.6755 -11892.2471]", + "52": "[5492.6885 -1122.3002 -11952.6846]", + "53": "[4999.4014 -992.3585 -11998.2627]", + "54": "[4519.2119 -800.7273 -12030.8174]", + "55": "[4077.772 -532.398 -12052.1709]", + "56": "[3754.041 -248.0152 -12063.4639]", + "57": "[3426.3699 151.997 -12069.6494]", + "58": "[3186.1943 580.9349 -12070.5215]", + "59": "[3007.2297 1061.0388 -12068.5]", + "60": "[2896.5254 1566.0378 -12065.3398]", + "61": "[2836.3066 2079.844 -12061.5635]", + "62": "[2816.4148 2596.8494 -12058.5332]", + "63": "[2828.8569 3115.8613 -12057.5996]", + "64": "[2867.4927 3631.9348 -12057.5273]", + "65": "[2932.2263 4140.7251 -12057.5713]", + "66": "[3027.2756 4651.7261 -12057.4854]", + "67": "[3151.6941 5152.4385 -12057.5176]", + "68": "[3308.6055 5646.0776 -12057.2959]", + "69": "[3474.8245 6131.1523 -12057.3984]", + "70": "[3627.7642 6631.5386 -12057.7695]", + "71": "[3746.4387 7141.9766 -12057.3945]", + "72": "[3834.8308 7651.0215 -12057.6318]", + "73": "[3893.4155 8163.6689 -12057.6025]", + "74": "[3927.2642 8677.8672 -12057.1289]", + "75": "[3937.9963 9191.0625 -12057.582]", + "76": "[3944.9438 9715.2822 -12057.5332]", + "77": "[3971.7166 10236.5469 -12057.2178]", + "78": "[4041.6216 10750.5762 -12057.2178]", + "79": "[4159.1157 11253.1963 -12057.085]", + "80": "[4336.4756 11733.9814 -12057.3936]", + "81": "[4583.9111 12192.6885 -12057.2285]", + "82": "[4902.0273 12602.0762 -12057.291]", + "83": "[5284.8716 12948.2959 -12057.293]", + "84": "[5719.4473 13223.6377 -12057.3379]", + "85": "[6189.2339 13429.4873 -12057.3643]", + "86": "[6680.9502 13572.5859 -12057.2051]", + "87": "[7196.377 13663.2422 -12057.2217]", + "88": "[7709.9956 13708.3311 -12057.3838]", + "89": "[8222.9668 13713.1992 -12057.2568]", + "90": "[8746.2051 13679.8086 -12057.2744]", + "91": "[9261.8018 13600.1602 -12057.2969]", + "92": "[9764.6035 13470.0049 -12057.2656]", + "93": "[10243.8164 13278.6357 -12057.2178]", + "94": "[10686.3379 13021.0664 -12057.4707]", + "95": "[11086.8887 12687.3115 -12057.4131]", + "96": "[11413.9512 12300.0684 -12057.208]", + "97": "[11678.1563 11855.2441 -12057.3838]", + "98": "[11871.8926 11376.668 -12057.3428]", + "99": "[12004.7363 10878.6621 -12057.2773]", + "100": "[12084.8076 10369.9795 -12057.458]", + "101": "[12122.0264 9856.9805 -12057.0693]", + "102": "[12131.2725 9343.4824 -12057.5117]", + "103": "[12130.917 8822.9297 -12057.4131]", + "104": "[12130.791 8302.8682 -12057.4072]", + "105": "[12131.3838 7781.3921 -12057.499]", + "106": "[12130.5996 7257.8525 -12057.4658]", + "107": "[12131.4717 6743.1729 -12057.4951]", + "108": "[12131.1416 6220.6978 -12057.4443]", + "109": "[12130.8594 5703.1025 -12057.4346]", + "110": "[12130.8281 5186.042 -12057.3838]", + "111": "[12131.4863 4669.4878 -12057.3604]", + "112": "[12131.1113 4153.4922 -12057.4063]", + "113": "[12130.8945 3638.0278 -12057.3535]", + "114": "[12131.5957 3123.0933 -12057.4893]", + "115": "[12130.4316 2608.6814 -12057.4697]", + "116": "[12130.3848 2094.8298 -12057.4316]", + "117": "[12131.3721 1581.5061 -12057.4189]", + "118": "[12131.0049 1068.7216 -12057.3467]", + "119": "[12131.0225 549.2548 -12057.4463]", + "120": "[12131.0361 35.6875 -12057.4541]", + "121": "[12130.9844 -486.0617 -12057.4512]", + "122": "[12129.7598 -1009.6346 -12056.791]", + "123": "[12130.5732 -1527.1187 -12056.1279]", + "124": "[12129.0225 -2051.9507 -12056.2207]", + "125": "[12111.3242 -2574.6555 -12054.5166]", + "126": "[12059.1855 -3092.3679 -12049.2607]", + "127": "[11961.834 -3599.2649 -12039.5811]", + "128": "[11812.6758 -4099.9717 -12024.5098]", + "129": "[11611.2412 -4571.6558 -12002.79]", + "130": "[11351.7061 -5012.6831 -11972.0645]", + "131": "[11023.6514 -5409.6821 -11927.9844]", + "132": "[10703.3408 -5682.4922 -11881.7881]", + "133": "[10260.4609 -5942.9229 -11821.3506]", + "134": "[9803.1787 -6113.0015 -11768.9658]", + "135": "[9295.4746 -6209.6992 -11727.3701]", + "136": "[8778.6934 -6239.3921 -11698.2041]", + "137": "[8257.4668 -6242.4429 -11680.959]", + "138": "[7740.6914 -6245.8389 -11672.8125]", + "139": "[7227.5522 -6247.1851 -11673.0605]", + "140": "[6711.7031 -6247.6982 -11673.1484]", + "141": "[6199.519 -6247.3599 -11672.9053]", + "142": "[5685.2983 -6246.9683 -11672.8975]", + "143": "[5169.7168 -6247.4805 -11673.1572]", + "144": "[4648.1338 -6246.6216 -11672.9434]", + "145": "[4133.8267 -6247.6226 -11672.9678]", + "146": "[3619.9009 -6246.6816 -11673.125]", + "147": "[3106.4141 -6248.0605 -11673.1973]", + "148": "[2593.3257 -6247.2065 -11673.0742]", + "149": "[2078.5833 -6247.5586 -11672.9375]", + "150": "[1560.2836 -6247.9917 -11673.0508]", + "151": "[1046.3217 -6247.1592 -11673.1406]", + "152": "[546.3865 -6247.9097 -11673.083]" + }, + "27": + { + "1": "[7994.2739 -6502.501 -11673.2051]", + "2": "[8509.9658 -6501.1587 -11674.6445]", + "3": "[9027.5664 -6481.0063 -11679.5693]", + "4": "[9539.2998 -6447.4766 -11687.9629]", + "5": "[10053.9258 -6377.4683 -11699.8008]", + "6": "[10558.7275 -6252.2178 -11715.9746]", + "7": "[11040.8359 -6063.438 -11735.4561]", + "8": "[11493.001 -5816.1299 -11758.123]", + "9": "[11902.1729 -5507.1543 -11782.3906]", + "10": "[12253.5576 -5133.8643 -11807.9531]", + "11": "[12541.5313 -4704.3687 -11833.8691]", + "12": "[12766.1982 -4235.0254 -11860.6045]", + "13": "[12931.29 -3742.2339 -11889.2363]", + "14": "[13043.3955 -3234.1895 -11920.5381]", + "15": "[13108.4414 -2719.9607 -11953.7988]", + "16": "[13133.5576 -2205.04 -11991.7871]", + "17": "[13138.8965 -1693.4707 -12027.3301]", + "18": "[13137.4072 -1179.95 -12050.6777]", + "19": "[13138.6172 -658.592 -12057.6436]", + "20": "[13137.2617 -135.9899 -12057.4668]", + "21": "[13138.7031 386.157 -12057.4121]", + "22": "[13137.3926 907.8809 -12057.4873]", + "23": "[13138.0459 1429.1836 -12057.498]", + "24": "[13138.5547 1950.0883 -12057.4336]", + "25": "[13138.1641 2470.6082 -12057.4287]", + "26": "[13138.166 2990.7563 -12057.4248]", + "27": "[13137.9014 3510.5305 -12057.4414]", + "28": "[13138.0303 4029.9265 -12057.3945]", + "29": "[13137.6035 4551.8384 -12057.5059]", + "30": "[13137.9766 5065.75 -12057.4756]", + "31": "[13137.9971 5581.8848 -12057.4922]", + "32": "[13137.5635 6104.769 -12057.4502]", + "33": "[13137.6592 6627.7051 -12057.4365]", + "34": "[13137.7402 7148.2432 -12057.4258]", + "35": "[13137.7744 7670.502 -12057.4199]", + "36": "[13137.8936 8183.2246 -12057.3682]", + "37": "[13138.0752 8699.6963 -12057.502]", + "38": "[13137.8672 9213.4277 -12057.3301]", + "39": "[13138.3711 9726.2158 -12057.416]", + "40": "[13138.7168 10238.5771 -12057.4863]", + "41": "[13132.0947 10756.9385 -12057.3037]", + "42": "[13101.5215 11278.5342 -12056.9541]", + "43": "[13028.1533 11792.415 -12057.4385]", + "44": "[12906.0225 12294.2734 -12057.4141]", + "45": "[12723.2598 12774.7344 -12057.5195]", + "46": "[12468.8428 13231.3857 -12057.4688]", + "47": "[12143.7539 13636.7744 -12057.4717]", + "48": "[11755.3789 13977.8633 -12057.2891]", + "49": "[11316.2832 14247.1172 -12057.3027]", + "50": "[10842.5654 14448.1572 -12057.3916]", + "51": "[10342.1367 14586.4883 -12057.3027]", + "52": "[9830.8252 14672.2002 -12057.1211]", + "53": "[9314.6357 14712.6289 -12057.4258]", + "54": "[8797.1689 14723.6904 -12057.4521]", + "55": "[8279.9541 14723.0488 -12057.3828]", + "56": "[7763.0815 14723.8633 -12057.4805]", + "57": "[7239.7632 14723.1641 -12057.3301]", + "58": "[6716.5049 14710.1582 -12057.2217]", + "59": "[6196.9829 14667.1719 -12057.2324]", + "60": "[5686.1929 14576.7139 -12056.8818]", + "61": "[5190.2305 14434.8623 -12057.668]", + "62": "[4720.064 14229.252 -12057.4463]", + "63": "[4281.7319 13953.2236 -12057.4121]", + "64": "[3899.4187 13608.0576 -12057.2979]", + "65": "[3583.3723 13204.1406 -12057.4316]", + "66": "[3334.2532 12748.1719 -12057.3711]", + "67": "[3154.4729 12261.9092 -12057.4111]", + "68": "[3035.4187 11761.8594 -12057.4521]", + "69": "[2965.1726 11244.5527 -12057.2881]", + "70": "[2936.4963 10722.6943 -12057.3496]", + "71": "[2930.7593 10200.3174 -12057.3174]", + "72": "[2931.5095 9678.6572 -12057.5488]", + "73": "[2930.1697 9157.8887 -12057.2656]", + "74": "[2915.5168 8637.8652 -12057.7402]", + "75": "[2868.7598 8121.2432 -12057.4727]", + "76": "[2785.5518 7610.1577 -12057.7158]", + "77": "[2686.3027 7102.6421 -12057.4111]", + "78": "[2606.2927 6585.332 -12057.8037]", + "79": "[2559.4109 6064.8745 -12057.7402]", + "80": "[2549.3762 5543.0493 -12057.5762]", + "81": "[2546.3459 5021.5718 -12057.7129]", + "82": "[2548.657 4500.374 -12057.6367]", + "83": "[2546.5649 3979.7576 -12057.7129]", + "84": "[2548.3748 3466.1577 -12057.5361]", + "85": "[2546.8318 2953.9036 -12057.6924]", + "86": "[2554.8513 2434.0842 -12057.2832]", + "87": "[2583.9458 1914.8698 -12057.2402]", + "88": "[2656.8918 1401.532 -12057.2744]", + "89": "[2779.5745 898.0455 -12057.2373]", + "90": "[2968.1882 418.6499 -12057.3994]", + "91": "[3227.5288 -25.7816 -12055.6494]", + "92": "[3553.9138 -421.8961 -12049.0732]", + "93": "[3941.4771 -760.9238 -12035.2168]", + "94": "[4373.1538 -1021.8484 -12013.3633]", + "95": "[4856.0645 -1222.4259 -11982.167]", + "96": "[5352.3267 -1359.1747 -11941.7129]", + "97": "[5860.4385 -1452.76 -11891.2949]", + "98": "[6367.1973 -1499.3593 -11833.8154]", + "99": "[6884.1128 -1513.8931 -11771.8818]", + "100": "[7403.7583 -1513.6985 -11710.0244]", + "101": "[7919.0635 -1514.1713 -11651.3945]", + "102": "[8433.1836 -1513.381 -11598.8037]", + "103": "[8952.6172 -1514.6958 -11561.3545]", + "104": "[9467.3008 -1503.402 -11546.292]", + "105": "[9988.124 -1466.454 -11545.0762]", + "106": "[10501.1406 -1382.0667 -11545.2686]", + "107": "[11000.3369 -1246.0283 -11545.3184]", + "108": "[11472.46 -1040.7552 -11545.3535]", + "109": "[11905.6758 -767.3871 -11542.7168]", + "110": "[12294.3232 -420.072 -11534.6973]", + "111": "[12621.001 -16.5702 -11518.167]", + "112": "[12850.501 398.9348 -11496.2451]", + "113": "[13038.0605 881.4165 -11463.332]", + "114": "[13164.8066 1379.9117 -11421.5322]", + "115": "[13250.9355 1888.292 -11369.5693]", + "116": "[13289.8789 2406.8765 -11309.9121]", + "117": "[13301.0371 2916.3557 -11248.3125]", + "118": "[13298.8174 3428.7852 -11187.9502]", + "119": "[13301.0762 3946.8499 -11129.4561]", + "120": "[13299.0117 4459.7705 -11078.7832]", + "121": "[13300.7793 4974.9712 -11045.8271]", + "122": "[13300.0508 5494.4341 -11033.2607]", + "123": "[13300.8018 6016.335 -11033.5693]", + "124": "[13300.3594 6537.8154 -11033.3887]", + "125": "[13300.0244 7059.0122 -11033.376]", + "126": "[13283.0791 7578.4189 -11033.2764]", + "127": "[13237.1045 8092.4287 -11033.2725]", + "128": "[13143.3477 8601.0361 -11033.1211]", + "129": "[12992.4102 9093.0215 -11033.3135]", + "130": "[12768.1299 9566.0957 -11032.6523]", + "131": "[12472.4727 9994.4561 -11029.585]", + "132": "[12114.835 10365.2295 -11019.2783]", + "133": "[11698.1934 10671.7412 -11001.3652]", + "134": "[11236.7666 10902.3701 -10974.8936]", + "135": "[10752.9951 11067.4805 -10939.9248]", + "136": "[10254.8789 11182.416 -10895.0303]", + "137": "[9743.1025 11252.6592 -10840.1299]", + "138": "[9233.8135 11281.6465 -10780.6934]", + "139": "[8724.0459 11288.334 -10719.1182]", + "140": "[8212.041 11286.417 -10659.252]", + "141": "[7700.1777 11286.1455 -10602.7256]", + "142": "[7183.3252 11286.8857 -10555.3496]", + "143": "[6666.7441 11287.4521 -10528.8994]", + "144": "[6153.3667 11287.7715 -10521.5166]", + "145": "[5638.1484 11286.9834 -10521.4346]", + "146": "[5124.5444 11287.4561 -10521.5303]", + "147": "[4787.7764 11287.5342 -10521.4248]" + }, + "28": + { + "1": "[4151.2427 13669.3574 -14300.4785]", + "2": "[4662.6792 13608.2383 -14300.5801]", + "3": "[5166.9854 13513.9854 -14300.6943]", + "4": "[5670.8188 13413.8008 -14300.6475]", + "5": "[6176.1987 13313.4531 -14300.6445]", + "6": "[6685.8833 13211.9502 -14305.5508]", + "7": "[7190.1514 13112.7139 -14328.8223]", + "8": "[7690.9946 13014.3271 -14373.4766]", + "9": "[8191.3208 12916.1318 -14428.5693]", + "10": "[8704.0469 12814.9385 -14489.5225]", + "11": "[9217.333 12713.9297 -14551.8555]", + "12": "[9722.1348 12614.6729 -14613.7168]", + "13": "[10229.8125 12515.2178 -14674.3721]", + "14": "[10741.3018 12414.8809 -14731.8809]", + "15": "[11247.6689 12315.0752 -14779.6143]", + "16": "[11760.8115 12214.0283 -14805.3232]", + "17": "[12268.5947 12110.3643 -14812.5039]", + "18": "[12769.8848 11978.6484 -14812.2646]", + "19": "[13249.5586 11795.1641 -14812.3965]", + "20": "[13709.1201 11537.7188 -14812.5225]", + "21": "[14054.5781 11254.6338 -14812.2773]", + "22": "[14305.8818 10961.0352 -14812.4521]", + "23": "[14518.1992 10598.8457 -14812.4609]", + "24": "[14650.5098 10241.4531 -14812.5078]", + "25": "[14745.7246 9726.8428 -14812.4941]", + "26": "[14756.4453 9205.8105 -14812.3359]", + "27": "[14702.8076 8689.5225 -14812.2822]", + "28": "[14614.9277 8179.4707 -14812.1758]", + "29": "[14512.9619 7670.0083 -14812.4189]", + "30": "[14415.0898 7166.7329 -14812.4307]", + "31": "[14315.4668 6662.7358 -14812.4756]", + "32": "[14210.9521 6133.7271 -14812.4658]", + "33": "[14105.4131 5594.0381 -14812.458]", + "34": "[14004.4629 5078.1772 -14812.4541]", + "35": "[13902.0127 4557.3125 -14811.9893]", + "36": "[13794.2822 4011.7439 -14812.4512]", + "37": "[13687.041 3467.667 -14812.4736]", + "38": "[13580.3311 2924.9451 -14812.4717]", + "39": "[13473.791 2383.6846 -14812.415]", + "40": "[13367.5557 1843.9121 -14812.4912]", + "41": "[13261.6963 1305.54 -14812.4648]", + "42": "[13156.2207 768.5407 -14812.4414]", + "43": "[13051.1758 232.887 -14812.541]", + "44": "[12946.3242 -301.3565 -14812.4844]", + "45": "[12841.1309 -834.0632 -14812.4287]", + "46": "[12736.3564 -1365.4163 -14812.3877]", + "47": "[12632.9277 -1895.6097 -14812.4365]", + "48": "[12529.0928 -2424.3159 -14812.4717]", + "49": "[12424.8076 -2951.5457 -14812.4609]", + "50": "[12322.6963 -3468.9883 -14812.4014]", + "51": "[12221.6289 -3983.2571 -14812.4238]", + "52": "[12115.4307 -4526.8765 -14812.4473]", + "53": "[12012.4883 -5049.9829 -14812.498]", + "54": "[11911.7744 -5557.7222 -14812.4814]", + "55": "[11807.5889 -6089.9521 -14812.4473]", + "56": "[11704.6592 -6617.0322 -14812.4561]", + "57": "[11601.7881 -7138.7261 -14812.4521]", + "58": "[11497.9385 -7645.5449 -14812.3701]", + "59": "[11370.8867 -8145.4121 -14812.3359]", + "60": "[11207.4727 -8631.8457 -14812.1855]", + "61": "[10985.7334 -9120.2275 -14812.2236]", + "62": "[10707.4961 -9574.3887 -14812.2139]", + "63": "[10367.2148 -9979.3262 -14812.1309]", + "64": "[9966.1563 -10318.8604 -14812.6221]", + "65": "[9514.0195 -10581.1357 -14812.3281]", + "66": "[9025.7471 -10762.0039 -14812.3691]", + "67": "[8517.5166 -10866.0938 -14812.2822]", + "68": "[8001.6758 -10904.6338 -14812.0938]", + "69": "[7486.3853 -10888.1133 -14812.335]", + "70": "[6975.248 -10828.7578 -14812.1953]", + "71": "[6469.3018 -10739.4375 -14812.3555]", + "72": "[5953.8057 -10638.9258 -14812.4229]", + "73": "[5440.7104 -10536.4258 -14812.5117]", + "74": "[4924.5425 -10436.7705 -14812.3857]", + "75": "[4394.1738 -10331.7734 -14812.4121]", + "76": "[3874.5334 -10228.7383 -14812.3838]", + "77": "[3354.5271 -10127.8555 -14812.3174]", + "78": "[2835.9783 -10025.417 -14812.4434]", + "79": "[2318.46 -9923.0635 -14812.4629]", + "80": "[1801.6915 -9822.2734 -14812.377]", + "81": "[1286.1272 -9720.8418 -14812.3213]", + "82": "[771.7814 -9618.9336 -14812.3516]", + "83": "[258.157 -9518.6484 -14812.2949]", + "84": "[-254.3105 -9417.6113 -14812.3965]", + "85": "[-765.7764 -9316.8818 -14812.4053]", + "86": "[-1276.2814 -9216.7656 -14812.335]", + "87": "[-1785.7622 -9116.5039 -14812.3291]", + "88": "[-2302.0156 -9014.5088 -14812.2979]", + "89": "[-2822.1394 -8912.5107 -14812.4961]", + "90": "[-3325.3206 -8811.4951 -14812.4805]", + "91": "[-3848.8625 -8690.293 -14812.5742]", + "92": "[-4360.4126 -8532.7119 -14812.2529]", + "93": "[-4859.2964 -8342.459 -14812.1875]", + "94": "[-5340.8159 -8145.1392 -14812.4326]", + "95": "[-5831.0542 -7943.9414 -14812.457]", + "96": "[-6327.3013 -7742.0845 -14812.4531]", + "97": "[-6825.6875 -7537.9863 -14812.3555]", + "98": "[-7323.0659 -7334.0566 -14812.4033]", + "99": "[-7819.7192 -7131.0264 -14812.5234]", + "100": "[-8315.3896 -6928.2427 -14812.5195]", + "101": "[-8809.8018 -6725.1943 -14812.3115]", + "102": "[-9303.793 -6523.6772 -14812.501]", + "103": "[-9796.7266 -6322.229 -14812.4775]", + "104": "[-10288.3955 -6120.4043 -14812.4658]", + "105": "[-10775.8184 -5921.5703 -14812.418]", + "106": "[-11266.582 -5714.626 -14812.4941]", + "107": "[-11742.8369 -5483.5513 -14811.6885]", + "108": "[-12196.8525 -5214.0283 -14812.0742]", + "109": "[-12617.6992 -4902.4585 -14812.0742]", + "110": "[-12989.2393 -4544.9155 -14812.3975]", + "111": "[-13308.3916 -4133.0068 -14812.333]", + "112": "[-13551.2832 -3677.2957 -14812.5264]", + "113": "[-13713.2988 -3185.416 -14812.4492]", + "114": "[-13789.6328 -2671.4226 -14812.4043]", + "115": "[-13787.9414 -2153.9885 -14812.6162]", + "116": "[-13721.8457 -1642.849 -14812.2451]", + "117": "[-13603.709 -1142.548 -14812.2891]", + "118": "[-13443.5576 -653.5704 -14811.0918]", + "119": "[-13256.4287 -175.9238 -14793.9199]", + "120": "[-13057.6094 297.5261 -14755.6387]", + "121": "[-12853.2021 783.9495 -14700.6465]", + "122": "[-12654.5674 1259.3628 -14641.4053]", + "123": "[-12456.04 1731.5317 -14579.9219]", + "124": "[-12248.9492 2228.2607 -14515.2139]", + "125": "[-12039.7764 2726.0203 -14451.4619]", + "126": "[-11840.4307 3199.9285 -14393.915]", + "127": "[-11631.3447 3699.7581 -14341.0283]", + "128": "[-11431.666 4176.4258 -14310.4902]", + "129": "[-11227.2998 4667.6899 -14300.0625]", + "130": "[-11022.8232 5160.1245 -14300.3701]", + "131": "[-10811.8613 5647.6357 -14300.209]", + "132": "[-10583.8955 6128.3774 -14300.3018]", + "133": "[-10338.0498 6598.3325 -14300.251]", + "134": "[-10073.2451 7055.7876 -14300.1836]", + "135": "[-9787.2314 7498.6182 -14300.0801]", + "136": "[-9479.7793 7924.729 -14300.2412]", + "137": "[-9148.1768 8330.6582 -14300.3574]", + "138": "[-8792.1396 8713.4961 -14300.3643]", + "139": "[-8391.3193 9087.4277 -14300.3008]", + "140": "[-7988.7739 9406.3984 -14300.4229]", + "141": "[-7563.4204 9691.4805 -14300.251]", + "142": "[-7084.0127 9954.4395 -14300.4893]", + "143": "[-6584.0459 10171.2852 -14300.4424]", + "144": "[-6067.6401 10340.125 -14300.4502]", + "145": "[-5539.3472 10460.459 -14300.3145]", + "146": "[-5004.3076 10535.1035 -14300.4512]", + "147": "[-4466.4209 10565.3809 -14300.4814]", + "148": "[-3928.9919 10555.4111 -14300.5361]", + "149": "[-3394.5896 10509.6758 -14300.4609]", + "150": "[-2865.228 10431.0566 -14300.3984]", + "151": "[-2342.0264 10323.7227 -14300.4082]", + "152": "[-1825.7256 10191.0918 -14300.4551]", + "153": "[-1316.8772 10035.958 -14300.5137]", + "154": "[-815.629 9860.8193 -14300.2773]", + "155": "[-306.6468 9662.9404 -14300.374]", + "156": "[184.0505 9460.5 -14300.5566]", + "157": "[686.3942 9250.7256 -14292.6309]", + "158": "[1193.7112 9039.4072 -14262.7373]", + "159": "[1672.2434 8837.8496 -14212.5273]", + "160": "[2156.592 8634.4297 -14153.7764]", + "161": "[2630.5078 8436.7168 -14093.1689]", + "162": "[3127.7014 8227.7197 -14028.2295]", + "163": "[3612.6086 8024.7544 -13965.5762]", + "164": "[4085.3877 7827.0356 -13906.1758]", + "165": "[4560.1206 7627.1006 -13851.6719]", + "166": "[5054.3516 7420.4502 -13808.6807]", + "167": "[5539.4746 7217.3291 -13790.083]", + "168": "[6020.5854 7018.9482 -13788.5791]", + "169": "[6500.4556 6815.6738 -13788.5195]", + "170": "[6995.1919 6592.4409 -13788.4805]", + "171": "[7457.6963 6361.5771 -13788.4521]", + "172": "[7909.3311 6112.916 -13788.5186]", + "173": "[8348.6416 5845.936 -13788.5459]", + "174": "[8773.0244 5558.1069 -13788.374]", + "175": "[9204.626 5228.8613 -13788.3721]", + "176": "[9593.9756 4892.1265 -13788.2891]", + "177": "[9972.6201 4517.7275 -13788.2695]", + "178": "[10320.4697 4116.5693 -13788.2617]", + "179": "[10634.5723 3690.436 -13788.3369]", + "180": "[10909.8135 3240.0752 -13788.293]", + "181": "[11143.5 2768.4653 -13788.4717]", + "182": "[11333.8525 2279.4902 -13788.3809]", + "183": "[11478.2207 1776.4305 -13788.416]", + "184": "[11579.1875 1264.2792 -13788.4277]", + "185": "[11638.0625 738.99 -13788.4258]", + "186": "[11656.4004 221.6532 -13788.3721]", + "187": "[11637.7168 -294.4873 -13788.2393]", + "188": "[11586.4121 -807.1337 -13788.376]", + "189": "[11506.2842 -1315.0856 -13788.3662]", + "190": "[11399.6074 -1817.1313 -13788.3457]", + "191": "[11269.917 -2312.7676 -13788.3604]", + "192": "[11109.0498 -2833.9116 -13788.3721]", + "193": "[10929.7217 -3340.8635 -13788.3652]", + "194": "[10740.1572 -3822.4094 -13788.4258]", + "195": "[10544.4268 -4299.7437 -13788.4463]", + "196": "[10352.082 -4777.2983 -13788.5049]", + "197": "[10192.9385 -5264.6738 -13788.1982]", + "198": "[10061.4268 -5789.5898 -13788.3691]", + "199": "[9952.8115 -6318.7407 -13788.4873]", + "200": "[9849.2764 -6831.0093 -13788.4453]", + "201": "[9734.418 -7359.2036 -13787.9844]", + "202": "[9607.7734 -7866.082 -13788.2969]", + "203": "[9458.9395 -8371.71 -13788.4199]", + "204": "[9286.8408 -8876.8691 -13787.7969]", + "205": "[9091.7285 -9372.0557 -13788.0723]", + "206": "[8877.2012 -9842.8516 -13788.3594]", + "207": "[8633.3643 -10304.0605 -13788.4629]", + "208": "[8361.2578 -10747.374 -13788.2051]", + "209": "[8060.0845 -11169.3838 -13787.9502]", + "210": "[7729.0269 -11565.8408 -13788.4482]", + "211": "[7355.0459 -11943.8281 -13788.5195]", + "212": "[6944.2427 -12292.4023 -13788.4355]", + "213": "[6505.2671 -12601.8496 -13788.5479]", + "214": "[6040.4282 -12867.5615 -13788.4268]", + "215": "[5555.4067 -13090.6514 -13788.332]", + "216": "[5054.1807 -13270.4082 -13788.2705]", + "217": "[4541.3652 -13408.5332 -13788.3105]", + "218": "[4020.9392 -13508.0225 -13788.4307]", + "219": "[3496.3337 -13571.4531 -13788.4443]", + "220": "[2969.9172 -13602.457 -13788.4043]", + "221": "[2443.7104 -13604.6133 -13788.4043]", + "222": "[1919.0599 -13580.1309 -13788.457]", + "223": "[1396.9669 -13532.6211 -13788.3652]", + "224": "[878.332 -13463.9072 -13788.3584]", + "225": "[363.3982 -13376.6357 -13788.4746]", + "226": "[-157.9193 -13274.9561 -13788.3662]", + "227": "[-683.1862 -13168.2373 -13788.3057]", + "228": "[-1193.7418 -13065.4316 -13788.4541]", + "229": "[-1703.8014 -12963.1982 -13788.5195]", + "230": "[-2218.967 -12859.8262 -13788.4922]", + "231": "[-2732.8047 -12756.3164 -13788.4561]", + "232": "[-3245.2788 -12652.8564 -13788.4668]", + "233": "[-3756.6428 -12550.2734 -13788.4551]", + "234": "[-4266.8203 -12448.0322 -13788.4609]", + "235": "[-4810.0586 -12338.7568 -13788.3584]", + "236": "[-5333.458 -12232.9102 -13788.2041]", + "237": "[-5850.3169 -12128.7627 -13788.4463]", + "238": "[-6354.7813 -12027.9443 -13788.4805]", + "239": "[-6884.9858 -11918.917 -13789.0498]", + "240": "[-7391.1919 -11805.6621 -13789.5947]", + "241": "[-7890.4663 -11676.2773 -13789.2383]", + "242": "[-8384.1309 -11525.082 -13789.2256]", + "243": "[-8869.2578 -11354.8027 -13789.3691]", + "244": "[-9344.8096 -11163.6094 -13788.9551]", + "245": "[-9842.2813 -10928.7744 -13789.3047]", + "246": "[-10323.8076 -10665.75 -13789.3535]", + "247": "[-10784.1836 -10370.4609 -13789.251]", + "248": "[-11219.5938 -10042.4707 -13788.6611]", + "249": "[-11625.1738 -9681.7119 -13789.0293]", + "250": "[-11996.041 -9287.623 -13789.334]", + "251": "[-12329.8457 -8864.0049 -13789.3428]", + "252": "[-12621.084 -8412.0811 -13789.4199]", + "253": "[-12869.3477 -7936.9048 -13789.4814]", + "254": "[-13074.3584 -7443.2295 -13789.2773]", + "255": "[-13235.7119 -6935.1152 -13789.2754]", + "256": "[-13357.0283 -6417.332 -13789.4014]", + "257": "[-13440.5762 -5893.3418 -13789.2793]", + "258": "[-13489.5635 -5366.2915 -13789.3135]", + "259": "[-13507.5811 -4838.5127 -13788.9893]", + "260": "[-13497.2275 -4312.0503 -13789.1621]", + "261": "[-13462.0029 -3787.7629 -13789.3037]", + "262": "[-13404.9023 -3266.4746 -13789.3506]", + "263": "[-13327.5225 -2749.2166 -13788.998]", + "264": "[-13233.1104 -2236.5908 -13789.291]", + "265": "[-13130.3486 -1726.7643 -13789.3643]", + "266": "[-13024.7314 -1202.9604 -13780.1416]", + "267": "[-12917.8281 -681.2442 -13749.6094]", + "268": "[-12814.2783 -182.1558 -13699.8193]", + "269": "[-12708.1523 335.6203 -13640.7783]", + "270": "[-12601.459 854.7872 -13577.9814]", + "271": "[-12495.8105 1367.4259 -13515.0264]", + "272": "[-12392.9854 1870.0587 -13453.7109]", + "273": "[-12286.6611 2388.0776 -13392.4785]", + "274": "[-12179.8896 2905.3899 -13337.2061]", + "275": "[-12072.7617 3425.3354 -13295.9199]", + "276": "[-11965.8174 3934.824 -13278.7178]", + "277": "[-11846.7852 4435.7729 -13277.5781]", + "278": "[-11707.6914 4948.2329 -13277.3428]", + "279": "[-11543.4424 5460.1738 -13277.3252]", + "280": "[-11361.5762 5954.2065 -13277.5732]", + "281": "[-11153.8818 6436.6938 -13277.4199]", + "282": "[-10921.3486 6906.3701 -13277.5156]", + "283": "[-10660.4355 7358.917 -13277.4785]", + "284": "[-10371.2373 7791.501 -13277.3398]", + "285": "[-10052.0186 8200.5186 -13277.373]", + "286": "[-9701.9434 8581.4531 -13277.583]", + "287": "[-9323.375 8931.8027 -13277.3262]", + "288": "[-8916.1836 9246.1289 -13277.5059]", + "289": "[-8484.7939 9523.7285 -13277.4512]", + "290": "[-8004.2505 9773.6338 -13277.502]", + "291": "[-7504.8442 9979.5859 -13277.3916]", + "292": "[-6990.9165 10141.7197 -13277.5254]", + "293": "[-6467.0991 10262.5439 -13277.4111]", + "294": "[-5936.998 10344.7734 -13277.4775]", + "295": "[-5403.7358 10392.417 -13277.3682]", + "296": "[-4869.8877 10408.0713 -13277.3984]", + "297": "[-4336.895 10395.4199 -13277.4912]", + "298": "[-3806.0623 10357.418 -13277.376]", + "299": "[-3278.6365 10296.7168 -13277.3096]", + "300": "[-2755.5706 10216.4541 -13277.2998]", + "301": "[-2236.6558 10118.8643 -13277.3418]", + "302": "[-1719.5542 10016.0313 -13277.4873]", + "303": "[-1208.9558 9896.415 -13276.8906]", + "304": "[-728.6043 9718.4072 -13277.1699]", + "305": "[-259.6806 9458.6992 -13277.3555]", + "306": "[164.0954 9134.2197 -13277.3857]", + "307": "[546.6168 8764.2832 -13277.2539]", + "308": "[890.4574 8360.0713 -13277.291]", + "309": "[1202.7516 7932.4331 -13277.4385]", + "310": "[1498.2418 7493.8325 -13277.4307]", + "311": "[1773.548 7043.8413 -13277.4492]", + "312": "[2017.6675 6578.5142 -13277.21]", + "313": "[2229.8982 6098.8726 -13277.1455]", + "314": "[2430.0586 5615.9746 -13277.4434]", + "315": "[2631.5864 5134.7231 -13277.2627]", + "316": "[2831.689 4653.6758 -13277.3838]", + "317": "[3031.9026 4173.4312 -13277.1914]", + "318": "[3231.7554 3693.8618 -13277.4463]", + "319": "[3431.3108 3214.8982 -13277.2129]", + "320": "[3630.6021 2736.6545 -13277.3975]", + "321": "[3833.3118 2260.9045 -13277.4453]", + "322": "[4059.6628 1798.2139 -13277.1514]", + "323": "[4318.7656 1354.9869 -13277.3164]", + "324": "[4597.104 924.3375 -13277.3545]", + "325": "[4881.3906 498.4594 -13277.4883]", + "326": "[5176.5654 52.7148 -13277.5244]", + "327": "[5472.936 -391.3092 -13277.3662]", + "328": "[5767.5142 -835.6326 -13277.5127]", + "329": "[6062.978 -1278.4274 -13277.3584]", + "330": "[6358.3203 -1720.4373 -13277.5176]", + "331": "[6654.1211 -2161.1477 -13277.5371]", + "332": "[6949.1885 -2600.2788 -13277.5586]", + "333": "[7237.3242 -3030.3508 -13277.5186]", + "334": "[7529.5527 -3465.7361 -13277.5156]", + "335": "[7822.9219 -3900.7373 -13277.5801]", + "336": "[8113.7607 -4336.3979 -13277.5557]", + "337": "[8405.7031 -4770.4067 -13277.4902]", + "338": "[8697.2607 -5203.7437 -13277.4951]", + "339": "[8985.4082 -5634.8643 -13277.5791]", + "340": "[9272.2178 -6059.7314 -13277.6045]", + "341": "[9569.4727 -6504.5615 -13277.6445]", + "342": "[9867.998 -6947.3828 -13277.5449]", + "343": "[10163.8252 -7390.209 -13277.6035]", + "344": "[10452.7314 -7819.5078 -13276.9463]", + "345": "[10746.7852 -8258.1025 -13277.5498]", + "346": "[11040.0908 -8695.1641 -13277.168]", + "347": "[11333.2178 -9130.6787 -13277.6025]", + "348": "[11625.2588 -9565.3721 -13277.7246]", + "349": "[11916.0146 -9999.1182 -13277.5137]", + "350": "[12206.4229 -10432.2061 -13277.5635]", + "351": "[12497.1572 -10864.2119 -13277.6094]", + "352": "[12786.5332 -11296.2256 -13277.6084]", + "353": "[13076.2656 -11727.1631 -13277.5615]", + "354": "[13365.3174 -12157.6533 -13277.5811]", + "355": "[13653.2188 -12588.0566 -13277.3418]", + "356": "[13942.0371 -13016.1143 -13277.6025]", + "357": "[14229.2236 -13446.0283 -13277.4189]", + "358": "[14518.5137 -13875.7363 -13277.4805]", + "359": "[14804.3311 -14301.1514 -13277.5615]", + "360": "[15092.2686 -14730.123 -13277.4971]" + }, + "29": + { + "1": "[14990.9238 -15054.8789 -13277.3682]", + "2": "[14934.8086 -14970.667 -13277.5615]", + "3": "[14646.3857 -14541.3037 -13277.6123]", + "4": "[14359.3076 -14111.625 -13277.5537]", + "5": "[14073.1758 -13686.8389 -13277.6191]", + "6": "[13786.7793 -13260.3662 -13277.5693]", + "7": "[13499.957 -12833.6504 -13277.5742]", + "8": "[13214.6338 -12406.9961 -13277.583]", + "9": "[12925.6797 -11978.0908 -13277.5029]", + "10": "[12639.9883 -11551.9492 -13277.5762]", + "11": "[12351.877 -11123.0264 -13277.5557]", + "12": "[12065.6455 -10696.8457 -13277.5938]", + "13": "[11774.5703 -10263.2314 -13277.5283]", + "14": "[11488.7021 -9836.8789 -13277.6104]", + "15": "[11190.6436 -9392.0361 -13277.3359]", + "16": "[10898.3311 -8958.5029 -13277.4268]", + "17": "[10606.2373 -8521.8496 -13277.3564]", + "18": "[10316.7432 -8091.7925 -13277.3389]", + "19": "[10028.6836 -7661.5469 -13277.4561]", + "20": "[9739.6631 -7231.6992 -13277.3223]", + "21": "[9441.8291 -6787.7837 -13277.4297]", + "22": "[9153.04 -6357.3887 -13277.4932]", + "23": "[8855.3418 -5914.6191 -13277.6719]", + "24": "[8558.5254 -5471.8691 -13277.5996]", + "25": "[8268.7197 -5039.1885 -13277.4941]", + "26": "[7977.6846 -4607.3833 -13277.3535]", + "27": "[7687.8076 -4175.8364 -13277.5137]", + "28": "[7398.8521 -3744.6987 -13277.5576]", + "29": "[7103.2568 -3304.6543 -13277.6104]", + "30": "[6798.0674 -2849.6523 -13277.4873]", + "31": "[6493.2476 -2395.5803 -13277.4893]", + "32": "[6188.7661 -1942.5642 -13277.582]", + "33": "[5885.3638 -1490.002 -13277.583]", + "34": "[5583.979 -1037.261 -13277.4316]", + "35": "[5283.5308 -585.0884 -13277.4434]", + "36": "[4983.4458 -133.9091 -13277.5176]", + "37": "[4683.8193 316.4288 -13277.458]", + "38": "[4385.0229 765.9813 -13277.2246]", + "39": "[4086.1826 1213.9291 -13277.1738]", + "40": "[3787.72 1660.7482 -13277.1348]", + "41": "[3489.7861 2106.3677 -13277.376]", + "42": "[3192.4285 2550.4861 -13277.4355]", + "43": "[2896.4121 2994.4006 -13277.4521]", + "44": "[2600.6211 3437.4033 -13277.458]", + "45": "[2305.1641 3879.4922 -13277.457]", + "46": "[2010.0603 4320.4141 -13277.457]", + "47": "[1722.1283 4751.332 -13277.4072]", + "48": "[1436.7898 5179.7007 -13277.54]", + "49": "[1148.597 5608.1758 -13277.5322]", + "50": "[834.3696 6042.6167 -13277.5713]", + "51": "[493.5273 6453.2549 -13277.1846]", + "52": "[115.9582 6826.7285 -13277.5049]", + "53": "[-298.9617 7153.6265 -13277.5107]", + "54": "[-752.2369 7419.0674 -13277.083]", + "55": "[-1237.5333 7608.4321 -13276.1904]", + "56": "[-1737.2817 7732.9688 -13276.8994]", + "57": "[-2258.2256 7837.9531 -13276.3779]", + "58": "[-2778.9063 7937.3379 -13276.3047]", + "59": "[-3301.6978 8019.3931 -13276.5313]", + "60": "[-3825.5051 8083.6133 -13276.459]", + "61": "[-4350.7808 8123.811 -13276.6113]", + "62": "[-4875.9561 8140.7939 -13276.3672]", + "63": "[-5400.0942 8130.5156 -13276.5225]", + "64": "[-5919.2373 8090.3008 -13276.4209]", + "65": "[-6446.7832 8016.4976 -13276.4883]", + "66": "[-6970.1313 7905.0645 -13276.4131]", + "67": "[-7483.333 7753.9858 -13276.5625]", + "68": "[-7980.4517 7560.397 -13276.5869]", + "69": "[-8457.6934 7325.8145 -13276.4551]", + "70": "[-8909.9971 7049.1069 -13276.5156]", + "71": "[-9330.1094 6739.229 -13276.5225]", + "72": "[-9727.0195 6384.6763 -13276.416]", + "73": "[-10091.4961 5998.6792 -13276.4355]", + "74": "[-10422.2012 5585.147 -13276.4688]", + "75": "[-10723.5156 5144.5757 -13276.29]", + "76": "[-10985.5771 4700.478 -13276.2998]", + "77": "[-11221.6963 4230.7227 -13276.4248]", + "78": "[-11431.7002 3749.9583 -13276.3604]", + "79": "[-11617.25 3260.4116 -13276.4111]", + "80": "[-11778.0635 2763.3086 -13276.4258]", + "81": "[-11919.665 2261.5046 -13276.377]", + "82": "[-12041.8135 1755.6522 -13276.4443]", + "83": "[-12148.8271 1247.2883 -13276.4814]", + "84": "[-12251.1172 738.8724 -13276.501]", + "85": "[-12357.7607 206.7843 -13276.4512]", + "86": "[-12462.2842 -311.1961 -13276.4551]", + "87": "[-12567.5488 -834.473 -13276.4492]", + "88": "[-12672.5488 -1356.6351 -13276.4023]", + "89": "[-12777.4941 -1877.5859 -13276.4629]", + "90": "[-12882.0078 -2397.1887 -13276.3682]", + "91": "[-12987.707 -2922.3506 -13276.3242]", + "92": "[-13090.6152 -3434.0808 -13276.3496]", + "93": "[-13187.6328 -3951.8586 -13276.3652]", + "94": "[-13269.0596 -4483.271 -13276.3145]", + "95": "[-13329.792 -5016.3452 -13276.4971]", + "96": "[-13366.7354 -5550.0381 -13276.6191]", + "97": "[-13378.8652 -6083.5264 -13276.4697]", + "98": "[-13361.4326 -6615.3115 -13276.6973]", + "99": "[-13313.7852 -7143.6958 -13276.4678]", + "100": "[-13231.3057 -7666.3584 -13276.3066]", + "101": "[-13112.2314 -8180.4409 -13276.3232]", + "102": "[-12954.8643 -8682.3965 -13276.5371]", + "103": "[-12756.1953 -9167.7949 -13276.4971]", + "104": "[-12517.8867 -9633.2822 -13276.4648]", + "105": "[-12239.5801 -10074.0645 -13276.3164]", + "106": "[-11923.9746 -10487.1328 -13276.4854]", + "107": "[-11574.3252 -10869.9434 -13276.3408]", + "108": "[-11194.9941 -11221.3828 -13276.4297]", + "109": "[-10779.9014 -11547.8408 -13276.3223]", + "110": "[-10354.9258 -11835.2656 -13276.3057]", + "111": "[-9881.918 -12107.9922 -13276.4268]", + "112": "[-9393.9131 -12350.373 -13276.3555]", + "113": "[-8893.5371 -12563.1328 -13276.3193]", + "114": "[-8383.9443 -12749.5889 -13276.3066]", + "115": "[-7867.4746 -12912.4238 -13276.2354]", + "116": "[-7345.397 -13052.4463 -13276.3271]", + "117": "[-6819.4941 -13174.1963 -13278.8535]", + "118": "[-6288.501 -13284.8984 -13301.3281]", + "119": "[-5785.3647 -13387.8594 -13345.2734]", + "120": "[-5272.9351 -13493.8477 -13401.5244]", + "121": "[-4748.4912 -13601.6182 -13463.6826]", + "122": "[-4247.3901 -13704.5869 -13525.1631]", + "123": "[-3734.6516 -13809.5967 -13588.0586]", + "124": "[-3210.512 -13917.373 -13650.7402]", + "125": "[-2675.3191 -14027.7305 -13711.0146]", + "126": "[-2169.3037 -14131.8633 -13758.3555]", + "127": "[-1657.9064 -14236.5684 -13782.4287]", + "128": "[-1142.9711 -14340.9951 -13788.6064]", + "129": "[-627.7871 -14443.8037 -13788.5752]", + "130": "[-93.3905 -14551.5176 -13788.5479]", + "131": "[423.8394 -14656.3545 -13788.5098]", + "132": "[940.3125 -14759.7109 -13788.4639]", + "133": "[1456.0538 -14861.8193 -13788.2432]", + "134": "[1973.0281 -14951.5283 -13788.4951]", + "135": "[2492.0532 -15020.2334 -13788.3145]", + "136": "[3012.1216 -15070.1201 -13788.3779]", + "137": "[3532.6245 -15095.9795 -13787.8027]", + "138": "[4052.1797 -15095.8506 -13788.1299]", + "139": "[4569.6919 -15068.9844 -13788.2178]", + "140": "[5083.1992 -15009.9697 -13788.1826]", + "141": "[5590.5244 -14918.2539 -13788.252]", + "142": "[6088.645 -14791.4131 -13788.2432]", + "143": "[6573.7393 -14626.2061 -13788.4443]", + "144": "[7075.4941 -14407.3164 -13788.2861]", + "145": "[7553.3228 -14143.9092 -13788.2256]", + "146": "[8002.9922 -13837.9102 -13788.3066]", + "147": "[8421.4375 -13492.9336 -13788.3203]", + "148": "[8805.7266 -13112.459 -13788.2451]", + "149": "[9155.7344 -12702.1758 -13788.293]", + "150": "[9470.5508 -12265.9248 -13788.3789]", + "151": "[9753.0313 -11809.4824 -13788.3496]", + "152": "[10004.0176 -11336.4336 -13788.3857]", + "153": "[10225.6689 -10850.2344 -13788.3564]", + "154": "[10421.0371 -10354.0127 -13788.2881]", + "155": "[10592.0879 -9850.0518 -13788.4385]", + "156": "[10740.7578 -9340.1016 -13788.2793]", + "157": "[10869.585 -8825.8008 -13788.4688]", + "158": "[10981.3018 -8308.8984 -13788.4199]", + "159": "[11082.3994 -7805.9434 -13788.4287]", + "160": "[11188.6436 -7277.6699 -13788.377]", + "161": "[11291.0859 -6769.5918 -13788.5742]", + "162": "[11392.4395 -6262.1377 -13788.4473]", + "163": "[11494.8975 -5755.8623 -13788.6924]", + "164": "[11599.6006 -5251.0669 -13788.4863]", + "165": "[11723.9434 -4752.5376 -13788.3398]", + "166": "[11894.8643 -4238.5415 -13788.6367]", + "167": "[12096.709 -3737.4424 -13788.2236]", + "168": "[12301.708 -3239.2986 -13788.3779]", + "169": "[12494.8115 -2738.1045 -13788.4189]", + "170": "[12663.0586 -2254.2495 -13788.3467]", + "171": "[12813.2285 -1760.0607 -13788.2676]", + "172": "[12941.624 -1260.8057 -13788.4521]", + "173": "[13047.9082 -745.6946 -13788.3506]", + "174": "[13129.2637 -205.9638 -13788.3779]", + "175": "[13175.8203 336.4721 -13788.376]", + "176": "[13186.2402 861.8286 -13788.2334]", + "177": "[13157.4443 1391.4506 -13788.3105]", + "178": "[13086.9375 1915.6223 -13788.3701]", + "179": "[12973.0391 2430.4377 -13788.4668]", + "180": "[12814.1182 2931.4375 -13788.541]", + "181": "[12611.9443 3414.9187 -13788.3965]", + "182": "[12368.2285 3877.1584 -13788.3848]", + "183": "[12085.21 4314.6611 -13788.3828]", + "184": "[11768.4111 4726.6812 -13788.3701]", + "185": "[11421.2451 5111.812 -13788.5518]", + "186": "[11048.1084 5470.1138 -13788.4355]", + "187": "[10653.7588 5803.2148 -13788.4209]", + "188": "[10240.6982 6111.0757 -13788.3916]", + "189": "[9812.8076 6396.2085 -13788.3477]", + "190": "[9372.5908 6659.8911 -13788.4248]", + "191": "[8922.1426 6903.7212 -13788.3301]", + "192": "[8432.5225 7144.0063 -13788.2744]", + "193": "[7935.3535 7365.5127 -13788.2334]", + "194": "[7434.0742 7575.0293 -13788.252]", + "195": "[6933.1865 7782.0547 -13788.502]", + "196": "[6433.7559 7989.5313 -13788.5713]", + "197": "[5934.3115 8196.8252 -13795.4141]", + "198": "[5432.3218 8407.0752 -13823.584]", + "199": "[4956.1313 8606.8389 -13872.7402]", + "200": "[4470.0303 8810.5713 -13931.3164]", + "201": "[3972.3584 9019.1924 -13995.0596]", + "202": "[3496.7832 9218.5313 -14056.8926]", + "203": "[3010.5735 9422.1016 -14120.0898]", + "204": "[2513.7661 9630.4727 -14182.4785]", + "205": "[2043.1874 9827.7998 -14236.7539]", + "206": "[1565.1273 10028.248 -14279.0391]", + "207": "[1091.0209 10226.2168 -14297.8115]", + "208": "[612.6835 10424.165 -14300.2773]", + "209": "[136.1031 10622.5693 -14300.2949]", + "210": "[-340.4397 10818.9531 -14300.5059]", + "211": "[-816.7238 11013.8594 -14300.3477]", + "212": "[-1313.172 11202.1729 -14300.6211]", + "213": "[-1822.8488 11374.5684 -14300.4385]", + "214": "[-2344.6631 11526.7129 -14300.3242]", + "215": "[-2871.978 11653.085 -14300.4629]", + "216": "[-3403.5891 11752.6563 -14300.3975]", + "217": "[-3938.7405 11820.8447 -14300.415]", + "218": "[-4449.9487 11853.3711 -14300.5723]", + "219": "[-4989.7607 11850.3721 -14300.5]", + "220": "[-5518.7676 11807.625 -14300.4629]", + "221": "[-6050.6113 11719.541 -14300.4424]", + "222": "[-6571.4541 11587.2422 -14300.3291]", + "223": "[-7076.2012 11407.6387 -14300.5576]", + "224": "[-7556.3257 11187.0713 -14300.2969]", + "225": "[-8014.4326 10922.3672 -14300.4404]", + "226": "[-8447.6367 10621.0723 -14300.4365]", + "227": "[-8852.9502 10285.208 -14300.4365]", + "228": "[-9231.4453 9921.1123 -14300.416]", + "229": "[-9582.4756 9532.0264 -14300.2529]", + "230": "[-9917.0566 9110.1484 -14300.4551]", + "231": "[-10226.7617 8668.7354 -14300.3633]", + "232": "[-10511.9443 8212.2725 -14300.3945]", + "233": "[-10775.0693 7743.8667 -14300.4541]", + "234": "[-11017.3281 7265.4873 -14300.4053]", + "235": "[-11241.0088 6779.1143 -14300.3789]", + "236": "[-11450.6943 6286.5737 -14300.3525]", + "237": "[-11657.3389 5787.0103 -14300.502]", + "238": "[-11864.3203 5286.2192 -14300.4287]", + "239": "[-12072.3965 4786.8286 -14301.7832]", + "240": "[-12280.4922 4285.7539 -14322.3701]", + "241": "[-12491.709 3782.6482 -14367.6611]", + "242": "[-12690.9775 3309.4878 -14422.125]", + "243": "[-12892.0088 2827.7385 -14482.5205]", + "244": "[-13097.249 2337.7463 -14545.8662]", + "245": "[-13306.7578 1839.2516 -14611.0771]", + "246": "[-13519.3906 1331.3479 -14675.5713]", + "247": "[-13719.1543 854.7452 -14732.6494]", + "248": "[-13921.8594 371.4726 -14781.1729]", + "249": "[-14120.1514 -100.9917 -14805.2998]", + "250": "[-14321.1475 -579.5796 -14812.668]", + "251": "[-14520.5791 -1064.4591 -14812.3457]", + "252": "[-14698.8691 -1570.0078 -14812.4883]", + "253": "[-14835.5293 -2078.7136 -14812.1045]", + "254": "[-14920.2471 -2583.7212 -14812.707]", + "255": "[-14944.5859 -3115.0969 -14812.4854]", + "256": "[-14890.5215 -3645.2271 -14812.3555]", + "257": "[-14749.0293 -4155.6201 -14812.5576]", + "258": "[-14532.457 -4609.4717 -14812.293]", + "259": "[-14229.9316 -5037.9028 -14812.4365]", + "260": "[-13866.1943 -5413.4858 -14812.5645]", + "261": "[-13456.6299 -5736.353 -14812.2861]", + "262": "[-13016.0439 -6013.3154 -14812.3164]", + "263": "[-12550.9209 -6250.8975 -14812.208]", + "264": "[-12059.1729 -6465.79 -14812.2959]", + "265": "[-11568.4404 -6666.6021 -14812.6455]", + "266": "[-11073.3994 -6867.187 -14812.4648]", + "267": "[-10589.2988 -7066.0972 -14812.4414]", + "268": "[-10106.3301 -7264.6152 -14812.4707]", + "269": "[-9623.8193 -7461.168 -14812.4707]", + "270": "[-9142.4834 -7657.3809 -14812.4453]", + "271": "[-8662.7324 -7854.3335 -14812.3936]", + "272": "[-8184.0596 -8051.0078 -14812.4844]", + "273": "[-7682.2915 -8256.1094 -14812.502]", + "274": "[-7182.6597 -8459.7314 -14812.5029]", + "275": "[-6684.0303 -8663.958 -14812.4619]", + "276": "[-6200.8569 -8861.7822 -14812.4629]", + "277": "[-5706.3823 -9064.2236 -14812.458]", + "278": "[-5212.4141 -9266.0029 -14812.4541]", + "279": "[-4717.771 -9463.6699 -14812.5166]", + "280": "[-4214.2339 -9631.0117 -14812.3213]", + "281": "[-3701.5808 -9762.3701 -14812.1787]", + "282": "[-3183.958 -9868.6221 -14812.4883]", + "283": "[-2662.0857 -9971.791 -14812.2285]", + "284": "[-2136.1021 -10074.5898 -14812.1523]", + "285": "[-1595.9132 -10182.1152 -14812.123]", + "286": "[-1079.009 -10282.5264 -14812.2695]", + "287": "[-563.3532 -10383.9336 -14812.4395]", + "288": "[-48.9226 -10485.9932 -14812.4355]", + "289": "[464.7746 -10586.5381 -14812.4248]", + "290": "[977.5349 -10686.6016 -14812.4648]", + "291": "[1488.9122 -10788.2949 -14812.3936]", + "292": "[1999.5326 -10888.3828 -14812.3906]", + "293": "[2509.2246 -10987.9131 -14812.3115]", + "294": "[3017.6902 -11088.7471 -14812.3389]", + "295": "[3525.333 -11188.4717 -14812.2725]", + "296": "[4032.042 -11287.5771 -14812.3057]", + "297": "[4537.5908 -11387.4873 -14812.3145]", + "298": "[5042.0254 -11486.4258 -14812.6055]", + "299": "[5545.231 -11585.4863 -14812.3545]", + "300": "[6080.0381 -11691.0518 -14812.543]", + "301": "[6595.2676 -11792.1367 -14812.7158]", + "302": "[7112.8496 -11894.208 -14812.3115]", + "303": "[7620.5205 -11993.5957 -14812.0811]", + "304": "[8140.9204 -12080.5791 -14812.3408]", + "305": "[8678.3887 -12135.7148 -14812.0781]", + "306": "[9206.4121 -12137.8115 -14812.2256]", + "307": "[9728.9355 -12082.3379 -14812.6846]", + "308": "[10235.877 -11955.5771 -14812.2256]", + "309": "[10713.9854 -11751.7637 -14812.1865]", + "310": "[11147.3369 -11470.0068 -14812.249]", + "311": "[11523.9844 -11118.9268 -14812.123]", + "312": "[11838.7783 -10713.2783 -14812.4219]", + "313": "[12094.6641 -10269.2002 -14812.2529]", + "314": "[12306.4727 -9772.5527 -14812.3135]", + "315": "[12469.1865 -9258.6523 -14812.3613]", + "316": "[12586.3838 -8760.208 -14812.2822]", + "317": "[12694.3379 -8228.4277 -14812.1221]", + "318": "[12796.2432 -7701.0762 -14812.3555]", + "319": "[12896.8867 -7189.1846 -14812.7061]", + "320": "[13004.9951 -6647.0391 -14812.5771]", + "321": "[13111.5342 -6105.9502 -14812.4102]", + "322": "[13216.6787 -5565.9736 -14812.4404]", + "323": "[13322.6914 -5024.8608 -14812.3848]", + "324": "[13427.46 -4495.0796 -14812.2998]", + "325": "[13530.0361 -3976.2078 -14812.5391]", + "326": "[13639.7236 -3417.5862 -14812.4043]", + "327": "[13743.4141 -2888.3052 -14812.3164]", + "328": "[13849.2168 -2348.6189 -14812.5381]", + "329": "[13954.8916 -1810.6359 -14812.4287]", + "330": "[14060.3291 -1274.3892 -14812.4443]", + "331": "[14165.998 -739.8583 -14812.4189]", + "332": "[14271.2471 -206.8896 -14812.459]", + "333": "[14375.9287 324.3065 -14811.8086]", + "334": "[14479.7891 853.7997 -14812.9902]", + "335": "[14582.9229 1381.6122 -14812.2529]", + "336": "[14686.2529 1907.7643 -14812.583]", + "337": "[14789.8818 2432.2334 -14812.4531]", + "338": "[14893.0977 2955.2104 -14812.4775]", + "339": "[14995.6914 3476.7495 -14812.415]", + "340": "[15093.9648 3980.4333 -14812.4805]", + "341": "[15197.666 4506.4121 -14812.2402]", + "342": "[15303.2813 5040.9609 -14812.3916]", + "343": "[15406.7021 5569.0933 -14812.5205]", + "344": "[15505.5918 6073.9585 -14812.4863]", + "345": "[15609.8027 6600.8862 -14812.4668]", + "346": "[15708.5186 7103.3501 -14812.3428]", + "347": "[15808.6406 7613.1772 -14812.3701]", + "348": "[15909.582 8124.4263 -14812.502]", + "349": "[16006.3096 8634.8867 -14812.3848]", + "350": "[16082.0566 9159.002 -14812.1963]", + "351": "[16115.4834 9692.249 -14812.4453]", + "352": "[16093.4053 10214.0176 -14812.5898]", + "353": "[16005.9658 10734.9883 -14812.5381]", + "354": "[15846.6133 11231.6328 -14812.6357]", + "355": "[15603.4375 11702.8262 -14812.5645]", + "356": "[15308.7871 12089.2539 -14812.3447]", + "357": "[14928.2227 12448.3506 -14812.2686]", + "358": "[14498.1787 12742.7969 -14812.3301]", + "359": "[14034.9189 12977.7793 -14812.4971]", + "360": "[13539.709 13166.2725 -14812.4043]", + "361": "[13023.4414 13310.8379 -14812.2148]", + "362": "[12496.9648 13426.0518 -14812.1436]", + "363": "[11966.2568 13529.9082 -14812.6582]", + "364": "[11463.2568 13628.167 -14804.0459]", + "365": "[10933.2803 13733.417 -14774.0088]", + "366": "[10400.248 13837.54 -14721.3604]", + "367": "[9880.0303 13940.1211 -14661.6279]", + "368": "[9372.9775 14039.7959 -14600.625]", + "369": "[8844.8096 14143.0645 -14535.9443]", + "370": "[8331.8613 14244.0576 -14473.835]", + "371": "[7820.4771 14344.1299 -14413.6582]", + "372": "[7317.1914 14443.7549 -14360.04]", + "373": "[6809.9668 14543.1631 -14320.1816]", + "374": "[6292.688 14627.1689 -14302.6748]", + "375": "[5782.6919 14679.1855 -14300.5684]", + "376": "[5264.4399 14695.8086 -14300.3896]", + "377": "[4746.4072 14698.4297 -14300.5518]", + "378": "[4229.084 14698.2051 -14300.4424]", + "379": "[3711.8418 14697.5625 -14300.4453]", + "380": "[3197.4041 14697.6074 -14300.4463]", + "381": "[2887.7629 14697.7695 -14300.4404]", + "381": "[2700.7629 14697.7695 -14300.4404]" + }, + "30": + { + "1": "[-1687.6481 11287.667 -10521.4102]", + "2": "[-1787.7644 11286.7295 -10521.6797]", + "3": "[-2298.749 11232.6709 -10521.6895]", + "4": "[-2797.4255 11109.4658 -10521.2568]", + "5": "[-3302.3569 11019.4434 -10521.6699]", + "6": "[-3555.6838 11008.6582 -10521.5068]" + }, + "31": + { + "1": "[1260.3357 -2260.9189 -4263.3135]", + "2": "[767.8923 -2112.8799 -4263.6001]", + "3": "[289.2325 -1927.3774 -4263.5522]", + "4": "[-175.7271 -1709.9369 -4263.6782]", + "5": "[-656.8745 -1528.356 -4263.7632]", + "6": "[-1153.7357 -1404.0198 -4263.7183]" + } +} \ No newline at end of file diff --git a/lua/metrostroi_data/track_gm_mus_loopline_e.lua b/lua/metrostroi_data/track_gm_mus_loopline_e.lua new file mode 100644 index 0000000..c84c6ea --- /dev/null +++ b/lua/metrostroi_data/track_gm_mus_loopline_e.lua @@ -0,0 +1,4069 @@ + +[ + + [ + "[1211.7053 -896.599 -515.4839]", + "[1313.1681 -896.6989 -515.4927]", + "[1826.5454 -899.5548 -515.5418]", + "[2339.9275 -925.613 -515.5644]", + "[2848.1418 -1002.0829 -515.4649]", + "[3357.0671 -1071.9017 -515.4906]", + "[3877.8113 -1088.8292 -515.3152]", + "[4399.4009 -1083.4253 -515.4703]", + "[4912.5317 -1103.0776 -515.2798]", + "[5320.4766 -1192.6317 -515.2879]", + "[5810.9702 -1384.5333 -515.9266]", + "[6266.9272 -1638.3185 -515.7656]", + "[6688.79 -1935.6902 -515.4205]", + "[7092.8755 -2274.2979 -515.2914]", + "[7469.2065 -2638.8335 -515.1423]", + "[7850.2036 -2993.0991 -515.4847]", + "[8262.6025 -3305.8164 -515.4611]", + "[8702.9424 -3573.9556 -515.7071]", + "[9170.8008 -3786.4075 -515.4182]", + "[9676.3242 -3934.3901 -515.371]", + "[10197.1875 -3996.8506 -515.2341]", + "[10717.5615 -3983.2344 -515.361]", + "[11231.9131 -3978.3113 -515.4521]", + "[11757.3008 -3967.9241 -515.3606]", + "[12278.5547 -3912.696 -515.092]", + "[12784.0049 -3809.6206 -515.4833]", + "[13282.5313 -3646.8484 -515.5261]", + "[13749.1406 -3418.2969 -515.4328]", + "[14177.6602 -3113.5095 -515.3495]", + "[14528.2119 -2757.5688 -515.4968]", + "[14821.8037 -2331.5237 -515.3282]", + "[15041.958 -1866.1096 -515.298]", + "[15199.3008 -1362.4618 -515.0977]", + "[15297.8604 -850.7974 -514.965]", + "[15347.96 -340.2909 -515.3127]", + "[15360.6641 183.3144 -515.4861]", + "[15352.5645 697.2007 -515.4965]", + "[15352.499 1220.8741 -515.4804]", + "[15352.3213 1751.438 -515.4868]", + "[15351.6465 2282.6836 -515.4459]", + "[15352.7607 2813.2305 -515.1296]", + "[15352.6221 3343.2981 -515.4451]", + "[15353.9375 3872.4097 -515.4268]", + "[15352.2529 4400.7676 -515.2903]", + "[15352.3105 4928.5303 -515.4493]", + "[15353.6611 5456.0518 -515.5073]", + "[15352.3311 5985.0703 -515.7178]", + "[15337.9219 6516.9497 -515.1316]", + "[15303.0732 7030.6064 -515.3032]", + "[15245.6182 7545.6006 -515.257]", + "[15164.416 8064.2192 -515.4565]", + "[15060.4756 8566.3525 -515.354]", + "[14925.8936 9071.6426 -515.5536]", + "[14766.2031 9558.1455 -515.3528]", + "[14569.7227 10041.8506 -515.6161]", + "[14334.0342 10518.2568 -515.6324]", + "[14069.0576 10961.4141 -515.2964]", + "[13765.0371 11384.8633 -515.475]", + "[13424.9316 11780.1338 -515.5596]", + "[13050.1387 12141.2627 -515.4281]", + "[12646.6797 12467.8945 -515.5457]", + "[12217.3174 12757.8535 -515.5499]", + "[11766.8779 13011.1396 -515.5408]", + "[11298.9854 13227.9248 -515.6453]", + "[10818.4277 13411.418 -515.3812]", + "[10327.9531 13562.9014 -515.5071]", + "[9830.1709 13684.2734 -515.6848]", + "[9305.1758 13785.2012 -515.4777]", + "[8776.3809 13858.624 -515.5765]", + "[8245.8486 13909.1504 -515.228]", + "[7714.3975 13939.0781 -515.3937]", + "[7182.957 13948.9824 -515.4915]", + "[6652.144 13945.7803 -515.4863]", + "[6122.02 13944.3838 -515.4524]", + "[5592.6421 13944.8154 -515.3829]", + "[5063.8672 13944.1816 -515.436]", + "[4534.3521 13944.2773 -515.4211]", + "[4002.7239 13944.4893 -515.4039]", + "[3468.7629 13944.8789 -515.4254]", + "[2956.0291 13944.9814 -515.6121]", + "[2443.3767 13945.7246 -515.4951]", + "[1931.197 13944.7451 -515.5189]", + "[1396.438 13945.6768 -515.1085]", + "[862.4459 13946.3496 -515.5559]", + "[329.839 13945.5645 -515.2764]", + "[-201.8596 13945.8799 -515.4807]", + "[-732.6066 13947.5244 -515.1978]", + "[-1262.0682 13980.4619 -515.3572]", + "[-1786.1345 14061.6006 -515.2923]", + "[-2310.6619 14126.4473 -515.3509]", + "[-2838.2153 14137.7461 -515.568]", + "[-3363.8286 14127.9541 -515.2373]", + "[-3887.3962 14121.8047 -514.803]", + "[-4408.999 14093.5381 -515.421]", + "[-4927.9707 14043.0176 -515.4996]", + "[-5443.7271 13971.9473 -515.1003]", + "[-5954.9595 13875.4971 -515.3884]", + "[-6459.8955 13752.9785 -515.4468]", + "[-6955.9805 13600.0225 -515.332]", + "[-7440.8042 13416.6074 -515.2861]", + "[-7910.8696 13199.4707 -515.4759]", + "[-8362.1748 12947.1211 -515.4769]", + "[-8791.0703 12659.8252 -515.446]", + "[-9192.7178 12337.0322 -515.405]", + "[-9563.5479 11980.8389 -515.01]", + "[-9898.9629 11592.7363 -515.5634]", + "[-10212.6494 11160.9678 -515.4355]", + "[-10487.127 10705.0107 -515.4589]", + "[-10722.5146 10229.6787 -515.3854]", + "[-10921.4805 9739.8428 -515.3635]", + "[-11086.2744 9239.4668 -515.3107]", + "[-11219.9746 8731.1289 -515.3788]", + "[-11325.2334 8217.1777 -515.231]", + "[-11403.8779 7699.0942 -515.2263]", + "[-11460.1016 7178.0225 -515.5012]", + "[-11494.0791 6652.7959 -515.5354]", + "[-11510.4473 6124.3789 -515.3261]", + "[-11509.9521 5592.7773 -515.1997]", + "[-11508.6318 5078.0762 -515.0251]", + "[-11506.8506 4556.7632 -515.4853]", + "[-11508.2139 4027.3083 -525.3324]", + "[-11507.1221 3511.7349 -572.582]", + "[-11507.7939 2988.7427 -633.3417]", + "[-11507.9131 2476.1123 -694.1157]", + "[-11508.6035 1942.0975 -758.5015]", + "[-11506.2266 1409.2885 -823.058]", + "[-11507.835 879.9001 -886.0878]", + "[-11507.9336 360.8359 -944.6122]", + "[-11507.6807 -170.2549 -998.3251]", + "[-11507.7461 -704.3082 -1034.8884]", + "[-11508.7891 -1227.8718 -1031.338]", + "[-11508.2051 -1752.6412 -1026.948]", + "[-11508.0137 -2283.531 -1027.4396]", + "[-11508.7441 -2814.6638 -1027.6931]", + "[-11508.7178 -3345.2471 -1027.6191]", + "[-11507.8018 -3875.3115 -1027.7122]", + "[-11508.4717 -4404.9131 -1027.7092]", + "[-11508.3037 -4933.584 -1027.6858]", + "[-11507.6465 -5458.1504 -1027.5359]", + "[-11498.1025 -5975.1777 -1027.5411]", + "[-11466.1943 -6508.1128 -1027.4795]", + "[-11412.2617 -7023.9971 -1027.2676]", + "[-11336.5352 -7544.7847 -1027.6924]", + "[-11233.4902 -8062.8145 -1027.3091]", + "[-11106.2793 -8562.9229 -1027.4274]", + "[-10949.4932 -9053.915 -1027.6687]", + "[-10761.9014 -9533.2617 -1027.6372]", + "[-10540.0586 -9997.0713 -1027.5889]", + "[-10283.5264 -10441.7656 -1027.6234]", + "[-9992.3311 -10863.6055 -1027.5839]", + "[-9650.1904 -11276.2881 -1027.4232]", + "[-9272.1973 -11654.9893 -1027.498]", + "[-8862.1104 -11996.9033 -1027.507]", + "[-8423.6465 -12299.5107 -1027.9489]", + "[-7962.623 -12564.0156 -1027.641]", + "[-7482.9976 -12789.9395 -1027.3275]", + "[-6989.1543 -12979.5508 -1027.5977]", + "[-6484.8105 -13135.3252 -1027.5612]", + "[-5973.2969 -13260.8574 -1027.4316]", + "[-5456.7764 -13358.96 -1027.4873]", + "[-4936.7891 -13430.874 -1027.5554]", + "[-4415.231 -13482.1104 -1027.5083]", + "[-3892.5398 -13510.7051 -1027.4233]", + "[-3369.9316 -13522.3906 -1027.285]", + "[-2847.7766 -13519.2422 -1027.5978]", + "[-2326.2024 -13517.5449 -1028.2278]", + "[-1805.2202 -13518.0713 -1027.8682]", + "[-1284.6161 -13517.21 -1028.3983]", + "[-764.4535 -13517.9844 -1028.2511]", + "[-244.618 -13517.8838 -1028.3834]", + "[274.8428 -13518.126 -1028.3922]", + "[793.9181 -13517.0488 -1028.525]", + "[1312.6279 -13518.7227 -1028.4919]", + "[1830.3311 -13542.0254 -1028.4282]", + "[2343.7192 -13610.7266 -1028.4897]", + "[2847.302 -13730.4785 -1028.2444]", + "[3343.7363 -13868.9248 -1028.4587]", + "[3855.593 -13930.0566 -1028.3143]", + "[4367.6069 -13956.1992 -1028.3522]", + "[4902.646 -13953.9561 -1028.5518]", + "[5435.7827 -13951.4912 -1028.4883]", + "[5968.1426 -13949.2412 -1028.4873]", + "[6499.6782 -13949.96 -1028.5779]", + "[7030.7373 -13949.9424 -1028.4919]", + "[7561.3335 -13949.1426 -1028.6377]", + "[8091.4224 -13950.751 -1028.3748]", + "[8620.9307 -13938.9072 -1028.5024]", + "[9149.1406 -13905.8076 -1028.1649]", + "[9675.2109 -13851.2783 -1028.5917]", + "[10197.6797 -13772.4531 -1028.5475]", + "[10715.2412 -13668.8994 -1028.4315]", + "[11225.5713 -13536.1045 -1028.339]", + "[11726.3555 -13373.4883 -1028.4202]", + "[12214.2539 -13178.0596 -1028.2852]", + "[12685.3691 -12947.2402 -1028.4293]", + "[13136.0635 -12680.2393 -1028.416]", + "[13562.126 -12376.9326 -1028.2539]", + "[13959.0469 -12037.7676 -1028.5225]", + "[14322.4512 -11664.4111 -1028.4014]", + "[14650.8965 -11261.5205 -1028.3156]", + "[14942.2334 -10832.3184 -1028.5905]", + "[15197.1592 -10382.2422 -1028.7437]", + "[15415.9316 -9914.8496 -1028.2684]", + "[15601.0225 -9434.4492 -1028.2944]", + "[15752.5352 -8943.0801 -1028.2623]", + "[15877.1934 -8442.833 -1028.682]", + "[15976 -7934.9868 -1028.3604]", + "[16049.7627 -7420.5825 -1028.3568]", + "[16100.6641 -6898.8657 -1028.521]", + "[16133.0693 -6369.0181 -1028.3928]", + "[16144.3477 -5854.481 -1028.4001]", + "[16142.3525 -5331.8584 -1028.3651]", + "[16140.2813 -4802.0869 -1028.6302]", + "[16140.4619 -4268.8735 -1028.3671]", + "[16140.1162 -3736.4219 -1028.5461]", + "[16140.1191 -3204.3977 -1028.5311]", + "[16140.0029 -2672.7529 -1028.5662]", + "[16140.2383 -2141.5117 -1028.5552]", + "[16140.042 -1610.6401 -1028.5333]", + "[16140.7813 -1080.2126 -1028.6267]", + "[16124.5928 -550.6204 -1028.226]", + "[16058.6338 -25.1114 -1028.4069]", + "[15939.5313 490.1955 -1028.5671]", + "[15763.1543 986.9483 -1028.3092]", + "[15515.668 1451.6804 -1028.272]", + "[15196.5859 1868.6315 -1028.1149]", + "[14828.5186 2239.5957 -1027.8534]", + "[14640.1543 2512.1042 -1028.3234]", + "[14410.9092 2976.929 -1027.7479]", + "[14259.3369 3469.2002 -1028.8407]", + "[14154.2314 3990.7781 -1028.807]", + "[14099.7539 4517.3838 -1028.6589]", + "[14085.1885 5043.9443 -1028.1693]", + "[14090.8604 5568.7754 -1028.5378]", + "[14092.1836 6092.4385 -1028.5863]", + "[14093.2363 6615.3213 -1028.5071]", + "[14091.5508 7137.7354 -1028.5284]", + "[14074.9219 7659.0884 -1028.2756]", + "[14008.5928 8176.3662 -1028.1915]", + "[13889.5195 8683.6807 -1028.8704]", + "[13712.833 9172.752 -1028.4744]", + "[13466.3301 9629.9795 -1028.5354]", + "[13148.084 10039.2197 -1028.4133]", + "[12763.626 10384.6426 -1028.5328]", + "[12326.8857 10656.457 -1028.7008]", + "[11835.8887 10864.5674 -1028.2881]", + "[11324.4365 11004.1553 -1028.3348]", + "[10803.9434 11087.9531 -1028.2195]", + "[10280.5 11125.5977 -1028.4326]", + "[9757.5244 11127.6143 -1028.7793]", + "[9236.958 11121.0781 -1028.4248]", + "[8717.9229 11120.5498 -1028.5908]", + "[8200.4727 11121.375 -1028.2914]", + "[7684.1069 11121.3438 -1028.5532]", + "[7168.7446 11121.6533 -1028.4137]", + "[6654.0366 11122.334 -1028.3877]", + "[6140.1411 11121.959 -1028.5762]", + "[5627.2061 11120.4482 -1028.4308]", + "[5095.2153 11121.8906 -1028.65]", + "[4574.3813 11121.374 -1028.4186]", + "[4057.696 11121.542 -1028.6508]", + "[3536.7339 11121.6738 -1028.4193]", + "[3012.8516 11119.6699 -1028.5702]", + "[2500.6975 11120.876 -1028.6588]", + "[1986.833 11121.4053 -1028.6569]", + "[1473.9149 11121.0986 -1028.6395]", + "[957.7719 11120.3301 -1028.5524]", + "[445.211 11121.4316 -1028.5221]", + "[-71.1795 11120.999 -1028.4709]", + "[-586.7155 11121.2773 -1028.568]", + "[-1100.8579 11120.3213 -1028.5503]", + "[-1618.7261 11119.6631 -1028.215]", + "[-2136.7922 11121.1631 -1028.1339]", + "[-2655.6846 11120.0684 -1028.2887]", + "[-3183.981 11120.3828 -1028.2769]", + "[-3699.574 11120.6611 -1028.2919]", + "[-4217.042 11119.5771 -1028.3003]", + "[-4734.0098 11120.623 -1027.8677]", + "[-5248.751 11120.2402 -1028.5321]", + "[-5779.98 11121.499 -1028.7069]", + "[-6307.2681 11120.957 -1028.3657]", + "[-6829.5596 11121.3604 -1028.5585]", + "[-7344.5 11120.377 -1028.4681]", + "[-7870.9834 11111.0742 -1028.085]", + "[-8400.0459 11037.3115 -1028.4753]", + "[-8892.3516 10893.9639 -1028.1207]", + "[-9351.5166 10666.1592 -1028.5396]", + "[-9603.0273 10480.7227 -1028.3101]", + "[-9924.792 10141.6396 -1028.4163]", + "[-10083.8711 9900.2539 -1028.1989]", + "[-10298.0264 9415.6055 -1028.1187]", + "[-10418.2549 8927.1924 -1028.3091]", + "[-10477.2324 8410.7031 -1028.0991]", + "[-10485.4346 7894.4683 -1028.3099]", + "[-10475.0166 7381.3989 -1028.53]", + "[-10474.3506 6848.6011 -1028.264]", + "[-10446.2949 6317.7324 -1028.2849]", + "[-10368.4316 5792.3398 -1028.7424]", + "[-10235.8125 5279.1357 -1028.3]", + "[-10040.4492 4787.5864 -1028.4458]", + "[-9774.1436 4331.6763 -1028.4376]", + "[-9435.3447 3928.3481 -1028.3622]", + "[-9079.8184 3546.3987 -1027.6442]", + "[-8989.25 3405.4792 -1028.7683]", + "[-8756.1914 2940.8076 -1028.4102]", + "[-8598.1094 2449.8794 -1028.3907]", + "[-8493.25 1929.8008 -1028.4351]", + "[-8436.1602 1406.485 -1028.3975]", + "[-8418.0986 883.7454 -1028.2607]", + "[-8425.4873 362.7752 -1028.3376]", + "[-8425.8623 -156.4925 -1028.5662]", + "[-8426.4141 -674.765 -1028.5741]", + "[-8427.125 -1192.5464 -1028.5977]", + "[-8426.7813 -1709.4773 -1028.1426]", + "[-8421.3486 -2225.7563 -1029.2952]", + "[-8393.876 -2740.7148 -1029.1107]", + "[-8344.4766 -3253.603 -1029.2052]", + "[-8274.7871 -3763.3391 -1029.1331]", + "[-8180.6909 -4268.7856 -1029.2625]", + "[-8060.4072 -4769.4878 -1029.2988]", + "[-7909.9648 -5265.0283 -1029.2329]", + "[-7727.5981 -5753.1694 -1028.9753]", + "[-7509.5093 -6230.5493 -1029.103]", + "[-7251.9561 -6695.7383 -1029.1906]", + "[-6961.5713 -7128.7012 -1029.3768]", + "[-6628.1592 -7543.5366 -1029.1342]", + "[-6265.0825 -7920.3726 -1029.1157]", + "[-5859.9746 -8268.9639 -1029.2689]", + "[-5435.8154 -8572.9844 -1028.9465]", + "[-4979.4893 -8843.9014 -1029.2328]", + "[-4516.8198 -9071.5195 -1029.2527]", + "[-4031.856 -9267.2334 -1028.7561]", + "[-3528.1262 -9432.6768 -1029.3308]", + "[-3032.1367 -9563.0361 -1029.0981]", + "[-2525.0527 -9666.5117 -1028.9713]", + "[-2011.5466 -9744.8643 -1029.074]", + "[-1495.9185 -9801.0898 -1029.4572]", + "[-979.1915 -9836.6494 -1029.194]", + "[-462.069 -9852.6064 -1029.0021]", + "[54.5971 -9853.1074 -1028.4377]", + "[570.4193 -9851.1006 -1033.4572]", + "[1086.8531 -9850.3135 -1077.2505]", + "[1604.422 -9850.6201 -1136.6559]", + "[2125.46 -9850.126 -1198.0054]", + "[2644.9043 -9851.2568 -1260.5687]", + "[3159.3281 -9849.9609 -1322.9182]", + "[3670.3867 -9850.7227 -1383.8282]", + "[4179.1094 -9849.9648 -1442.7535]", + "[4710.5884 -9850.2813 -1498.6349]", + "[5239.3018 -9850.9414 -1541.2655]", + "[5762.1338 -9850.8281 -1546.4944]", + "[6295.4224 -9849.4346 -1541.3031]", + "[6809.9395 -9828.4297 -1541.2516]", + "[7324.4238 -9787.7354 -1541.2393]", + "[7834.1343 -9725.2637 -1541.4696]", + "[8340.0117 -9640.8223 -1541.4639]", + "[8840.541 -9531.2178 -1541.1746]", + "[9334.4902 -9393.0381 -1541.3866]", + "[9820.4307 -9223.9932 -1541.5216]", + "[10296.4541 -9022.4326 -1541.6843]", + "[10758.6348 -8784.4277 -1541.3584]", + "[11204.6191 -8507.7061 -1541.4961]", + "[11630.7617 -8188.9702 -1541.2882]", + "[12016.6074 -7843.3872 -1541.6636]", + "[12375.5713 -7457.7373 -1541.432]", + "[12703.3115 -7034.3149 -1541.3907]", + "[12985.0801 -6597.2046 -1541.4788]", + "[13231.6094 -6131.2437 -1541.5253]", + "[13445.4316 -5642.3418 -1541.6113]", + "[13617.5537 -5159.6274 -1541.3773]", + "[13765.2363 -4644.3467 -1541.4768]", + "[13882.0479 -4122.1787 -1541.5128]", + "[13971.5313 -3595.6733 -1541.6176]", + "[14036.0244 -3066.3577 -1541.4921]", + "[14078.0176 -2535.5657 -1541.2944]", + "[14098.8223 -2004.1432 -1541.3751]", + "[14103.0127 -1473.1782 -1540.4581]", + "[14100.126 -943.2585 -1540.451]", + "[14100.3799 -414.7612 -1541.1661]", + "[14099.6357 112.132 -1541.0508]", + "[14099.5293 637.6648 -1541.3658]", + "[14099.8828 1162.7512 -1541.0065]", + "[14099.1797 1687.4867 -1541.3046]", + "[14100.1182 2211.4092 -1541.0002]", + "[14098.5439 2729.3879 -1541.3527]", + "[14098.0771 3242.0811 -1541.1742]", + "[14066.1475 3753.5625 -1541.4993]", + "[13981.5059 4258.7876 -1540.8951]", + "[13959.9063 4792.3501 -1541.3253]", + "[13966.1973 5323.9893 -1541.3953]", + "[13962.6895 5845.5156 -1541.347]", + "[13937.8916 6361.0762 -1541.5913]", + "[13889.5879 6881.4067 -1541.2532]", + "[13819.7373 7394.5029 -1541.4613]", + "[13726.4697 7904.6523 -1541.5178]", + "[13606.7852 8407.459 -1541.5995]", + "[13459.8955 8898 -1541.6947]", + "[13279.5781 9385.5693 -1541.5172]", + "[13068.083 9852.7236 -1541.7543]", + "[12821.9561 10305.542 -1541.5482]", + "[12534.3086 10742.7402 -1541.5634]", + "[12213.7393 11150.9053 -1541.5272]", + "[11859.1348 11527.8564 -1541.5323]", + "[11471.293 11870.7725 -1541.3022]", + "[11053.1553 12180.3564 -1541.3744]", + "[10604.4814 12457.3037 -1541.3308]", + "[10134.7285 12696.5674 -1541.5494]", + "[9656.2461 12896.6777 -1541.6309]", + "[9163.5244 13064.7813 -1541.4178]", + "[8662.3018 13201.2607 -1541.3103]", + "[8155.4355 13309.2158 -1541.4716]", + "[7644.7295 13392.1543 -1541.6705]", + "[7131.7744 13451.832 -1541.3175]", + "[6617.6006 13490.9541 -1541.3911]", + "[6103.124 13511.5996 -1541.4095]", + "[5588.8931 13514.1006 -1541.3368]", + "[5075.4795 13512.2061 -1540.7328]", + "[4562.6558 13511.959 -1541.5583]", + "[4030.5474 13511.5645 -1541.3831]", + "[3499.4631 13512.1465 -1541.3225]", + "[2968.8713 13511.502 -1541.2898]", + "[2436.5479 13512.1377 -1541.5177]", + "[1921.698 13512.2949 -1541.4484]", + "[1403.5659 13511.3486 -1541.4503]", + "[881.8671 13512.0576 -1541.3141]", + "[352.9451 13511.2754 -1541.4968]", + "[-163.5743 13511.5527 -1541.182]", + "[-690.2462 13512.4805 -1541.4133]", + "[-1205.8778 13511.5 -1541.4413]", + "[-1731.5972 13511.5859 -1541.333]", + "[-2266.803 13511.0186 -1541.3098]", + "[-2787.4487 13511.6484 -1541.2526]", + "[-3316.0198 13511.7314 -1541.4292]", + "[-3852.3586 13511.1533 -1541.4059]", + "[-4369.3057 13511.3408 -1541.4041]", + "[-4886.9336 13510.8037 -1541.3201]", + "[-5404.0415 13511.2217 -1541.3596]", + "[-5920.5884 13508.1084 -1541.298]", + "[-6436.2197 13485.3604 -1541.4509]", + "[-6950.0732 13442.1631 -1541.4583]", + "[-7461.1987 13378.2109 -1541.4272]", + "[-7968.2686 13290.2354 -1541.5776]", + "[-8469.6699 13177.5518 -1541.2166]", + "[-8963.3506 13036.668 -1541.3204]", + "[-9446.7852 12866.3711 -1541.4355]", + "[-9939.0107 12653.3418 -1541.4537]", + "[-10411.9453 12401.7598 -1541.594]", + "[-10862.1709 12113.3223 -1541.1475]", + "[-11284.6924 11787.0547 -1541.4517]", + "[-11674.377 11423.5654 -1541.7231]", + "[-12028.9072 11027.2549 -1541.5394]", + "[-12344.7402 10600.8633 -1541.4974]", + "[-12623.332 10150.8662 -1541.4796]", + "[-12863.0234 9680.3359 -1541.3657]", + "[-13066.291 9194.2705 -1541.2651]", + "[-13235.0342 8696.3994 -1541.4285]", + "[-13372.5703 8190.0103 -1541.4279]", + "[-13480.5039 7677.5259 -1541.5698]", + "[-13563.21 7161.2432 -1541.6743]", + "[-13622.376 6642.5454 -1541.4178]", + "[-13660.6436 6122.5679 -1541.3174]", + "[-13679.3096 5602.1816 -1541.501]", + "[-13681.4238 5082.0781 -1541.7612]", + "[-13677.5459 4562.4204 -1544.5544]", + "[-13678.5293 4040.5493 -1585.8162]", + "[-13677.7041 3515.3896 -1645.4553]", + "[-13678.3145 2985.3442 -1707.5341]", + "[-13677.6592 2456.771 -1770.8184]", + "[-13677.7422 1931.793 -1834.3589]", + "[-13677.7207 1408.3638 -1896.9034]", + "[-13678.1777 885.8992 -1957.4937]", + "[-13677.4512 363.5839 -2011.9042]", + "[-13676.7432 -157.0402 -2053.8291]", + "[-13678.1113 -675.4624 -2058.9004]", + "[-13677.1611 -1205.7615 -2051.4641]", + "[-13664.2061 -1722.7052 -2051.8708]", + "[-13628.7275 -2239.4692 -2052.3464]", + "[-13573.1836 -2752.5532 -2052.2756]", + "[-13494.8975 -3261.4775 -2052.199]", + "[-13391.7559 -3765.5046 -2052.4214]", + "[-13262.3926 -4262.8569 -2052.1357]", + "[-13103.3643 -4751.0381 -2052.4485]", + "[-12913.1377 -5227.1992 -2052.4858]", + "[-12689.9941 -5688.0605 -2052.2078]", + "[-12418.8477 -6149.9063 -2052.3669]", + "[-12109.5293 -6585.9194 -2052.3496]", + "[-11762.8174 -6991.6108 -2052.3472]", + "[-11380.5762 -7362.4927 -2052.4075]", + "[-10967.7715 -7697.1709 -2052.3396]", + "[-10527.6455 -7992.7524 -2052.2556]", + "[-10065.4893 -8249.8008 -2052.2671]", + "[-9585.6885 -8469.4932 -2052.2039]", + "[-9092.7256 -8654.3008 -2052.7461]", + "[-8589.8359 -8805.9678 -2052.1582]", + "[-8079.8921 -8927.4248 -2052.2117]", + "[-7564.9478 -9021.1025 -2052.2942]", + "[-7047.1157 -9090.5762 -2052.3811]", + "[-6527.6274 -9138.9463 -2052.157]", + "[-6007.2686 -9165.873 -2052.0859]", + "[-5486.8931 -9174.7012 -2052.2622]", + "[-4967.0996 -9171.7568 -2052.5562]", + "[-4447.8838 -9171.4883 -2052.7266]", + "[-3929.1323 -9170.1943 -2052.4695]", + "[-3411.0117 -9171.2637 -2052.4126]", + "[-2893.5193 -9170.8545 -2052.478]", + "[-2377.8684 -9198.2334 -2052.2922]", + "[-1869.6423 -9291.3926 -2052.0415]", + "[-1363.2529 -9378.5391 -2052.55]", + "[-849.9214 -9395.9199 -2052.4238]", + "[-316.5252 -9383.9395 -2052.4807]", + "[208.9207 -9380.2021 -2052.5242]", + "[736.7318 -9383.2334 -2052.6804]", + "[1254.5034 -9382.5781 -2052.3706]", + "[1776.2288 -9381.3828 -2052.5583]", + "[2301.0703 -9381.8213 -2052.3711]", + "[2813.6416 -9382.1709 -2052.6023]", + "[3333.1541 -9381.7295 -2052.439]", + "[3845.6406 -9382.9365 -2052.5818]", + "[4366.4595 -9381.8887 -2052.5945]", + "[4889.2715 -9381.9434 -2052.6179]", + "[5409.0669 -9381.332 -2052.5676]", + "[5925.1377 -9381.5635 -2052.6169]", + "[6437.1396 -9382.2637 -2052.553]", + "[6951.4688 -9381.9326 -2052.5269]", + "[7467.6436 -9381.7354 -2052.4756]", + "[7983.7261 -9382.3477 -2052.5603]", + "[8500.2705 -9382.335 -2052.5156]", + "[9021.3389 -9381.6748 -2052.522]", + "[9538.0371 -9376.1563 -2052.2891]", + "[10054.3193 -9315.6777 -2052.0977]", + "[10552.1758 -9185.2637 -2052.3181]", + "[11024.1035 -8971.084 -2052.2371]", + "[11311.7363 -8772.2061 -2052.6545]", + "[11610.7285 -8476.2881 -2052.7424]", + "[11809.0244 -8196.1641 -2052.332]", + "[12013.4893 -7763.4175 -2052.1084]", + "[12152.8145 -7251.583 -2052.073]", + "[12219.4961 -6734.5205 -2052.5715]", + "[12232.8242 -6220.543 -2052.0996]", + "[12222.3115 -5687.6157 -2052.6455]", + "[12221.4121 -5161.3999 -2052.4688]", + "[12220.8857 -4645.7832 -2052.4038]", + "[12221.2441 -4118.2471 -2052.574]", + "[12220.8965 -3584.3909 -2052.3569]", + "[12221.8125 -3049.9551 -2052.5549]", + "[12220.5547 -2515.9226 -2052.4983]", + "[12221.0146 -1982.3163 -2052.5005]", + "[12221.75 -1449.1427 -2052.4976]", + "[12221.0156 -916.0284 -2057.0862]", + "[12220.9941 -381.6271 -2102.741]", + "[12220.6328 149.8563 -2163.6846]", + "[12221.0488 681.2924 -2226.2349]", + "[12221.3252 1215.8638 -2290.7593]", + "[12220.6855 1727.1986 -2352.7505]", + "[12220.4512 2241.3184 -2413.7422]", + "[12219.9834 2756.281 -2473.0562]", + "[12220.1143 3271.5605 -2526.7278]", + "[12220.6162 3785.9739 -2566.9956]", + "[12221.2148 4322.2563 -2569.9929]", + "[12219.8994 4848.7793 -2564.1042]", + "[12221.2314 5385.9243 -2564.4001]", + "[12220.623 5914.5029 -2564.4873]", + "[12220.3135 6442.6035 -2564.4919]", + "[12220.332 6970.2573 -2564.395]", + "[12219.9443 7497.4941 -2564.5798]", + "[12220.4141 8024.3848 -2564.4739]", + "[12220.0156 8550.8135 -2564.5317]", + "[12220.3281 9076.876 -2564.6616]", + "[12201.999 9601.9824 -2563.502]", + "[12114.9023 10120.376 -2564.1433]", + "[11950.2373 10618.2324 -2564.1758]", + "[11729.874 11024.7559 -2564.1738]", + "[11509.6064 11298.9648 -2564.5737]", + "[11188.458 11579.2998 -2564.4888]", + "[10874.5654 11766.8516 -2564.2441]", + "[10392.8438 11950.4258 -2564.1616]", + "[9887.9746 12055.8359 -2564.3889]", + "[9367.9453 12099.8496 -2564.3525]", + "[8852.8291 12097.2861 -2564.3403]", + "[8338.249 12092.4932 -2564.4858]", + "[7820.8472 12090.5029 -2564.5967]", + "[7299.937 12091.8057 -2564.5796]", + "[6774.4331 12091.6064 -2564.332]", + "[6259.1304 12090.6914 -2564.499]", + "[5732.4136 12091.1572 -2573.3726]", + "[5214.5513 12090.7451 -2620.4524]", + "[4687.7563 12090.2529 -2681.4658]", + "[4164.1631 12090.7744 -2743.321]", + "[3636.8835 12090.8008 -2807.1143]", + "[3110.4624 12090.6475 -2870.8381]", + "[2599.8691 12090.8281 -2931.7539]", + "[2090.3042 12090.21 -2989.6328]", + "[1557.8956 12090.5127 -3043.8789]", + "[1027.7683 12090.7705 -3082.2065]", + "[510.4319 12107.6133 -3080.5337]", + "[-11.5063 12167.5859 -3076.0696]", + "[-532.6047 12279.5723 -3076.0632]", + "[-1028.2819 12423.3848 -3076.0339]", + "[-1549.3643 12497.4326 -3076.907]", + "[-2071.5173 12527.7803 -3076.4458]", + "[-2588.0945 12522.96 -3076.5276]", + "[-3099.8098 12468.207 -3076.3691]", + "[-3599.1992 12354.1855 -3076.8672]", + "[-4085.5225 12159.1387 -3077.2344]", + "[-4402.853 11961.8164 -3077.7292]", + "[-4757.1123 11643.3662 -3077.7339]", + "[-4928.2495 11423.4219 -3077.4373]", + "[-5172.4839 10967.0723 -3076.9211]", + "[-5300.5757 10575.8936 -3076.8674]", + "[-5399.291 10066.001 -3076.6619]", + "[-5443.1279 9545.0938 -3076.0244]", + "[-5440.334 9028.833 -3076.4971]", + "[-5435.1831 8503.8271 -3076.3608]", + "[-5435.5649 7981.2002 -3076.5195]", + "[-5433.5537 7461.6074 -3076.5005]", + "[-5434.7832 6945.3535 -3076.4861]", + "[-5434.0835 6432.5879 -3076.6128]", + "[-5425.3223 5909.6016 -3076.4207]", + "[-5372.3862 5394.9053 -3076.5547]", + "[-5267.4873 4879.064 -3076.26]", + "[-5107.2529 4384.9727 -3076.4236]", + "[-4882.1147 3913.9836 -3076.5134]", + "[-4590.6118 3492.4722 -3076.4492]", + "[-4222.0967 3115.6248 -3076.2859]", + "[-3842.7537 2750.9272 -3076.5442]", + "[-3470.1895 2384.301 -3076.4243]", + "[-3097.8569 2007.6326 -3076.4727]", + "[-2721.3369 1633.0996 -3076.4583]", + "[-2351.6902 1261.2004 -3076.509]", + "[-1976.5249 888.6887 -3076.4858]", + "[-1603.5659 514.5996 -3076.6389]", + "[-1229.9978 141.6522 -3076.613]", + "[-857.5004 -231.8144 -3076.4639]", + "[-484.3755 -604.0891 -3076.4604]", + "[-112.0651 -976.6797 -3076.5417]", + "[260.756 -1348.1626 -3076.6123]", + "[631.5509 -1721.2114 -3076.5354]", + "[1004.2335 -2091.741 -3076.207]", + "[1375.0537 -2463.6838 -3076.522]", + "[1746.0197 -2834.8618 -3076.563]", + "[2115.2158 -3203.2395 -3076.5703]", + "[2493.5168 -3581.9209 -3076.4849]", + "[2858.418 -3945.667 -3076.6553]", + "[3204.7913 -4349.9014 -3086.6194]", + "[3303.7988 -4517.6943 -3090.1414]", + "[3515.8311 -4986.4072 -3093.9343]", + "[3654.353 -5481.9941 -3092.5537]", + "[3740.6355 -6007.3745 -3087.9705]", + "[3780.2651 -6534.7437 -3080.9424]", + "[3783.196 -7059.0371 -3074.4839]", + "[3778.0266 -7578.2295 -3076.3608]", + "[3776.5486 -8092.1157 -3076.762]", + "[3777.6074 -8623.4629 -3076.4688]", + "[3777.3149 -9154.2314 -3082.5225]", + "[3776.7942 -9682.0303 -3126.793]", + "[3778.0432 -10199.2021 -3186.7207]", + "[3776.894 -10707.8555 -3246.6069]", + "[3776.4761 -11231.3291 -3309.7849]", + "[3775.198 -11754.0586 -3379.0266]", + "[3723.8467 -12274.8838 -3455.3169]", + "[3620.3816 -12787.7109 -3512.5435]", + "[3464.5103 -13287.1162 -3552.8506]", + "[3250.0911 -13758.8838 -3576.8828]", + "[3026.8645 -14083.9111 -3590.4827]", + "[2661.5027 -14457.3213 -3601.6323]", + "[2251.7739 -14751.0762 -3604.2097]", + "[1776.4071 -14984.0439 -3601.6543]", + "[1281.0909 -15126.5615 -3598.7468]", + "[774.8823 -15208.9316 -3595.5791]", + "[250.8316 -15246.998 -3591.3877]", + "[-268.8158 -15249.9629 -3589.863]", + "[-787.2758 -15244.0127 -3628.6052]", + "[-1309.9131 -15243.7842 -3688.1343]", + "[-1835.3943 -15244 -3749.6545]", + "[-2357.4937 -15244.0088 -3812.5571]", + "[-2877.9287 -15244.7305 -3875.6506]", + "[-3390.8945 -15244.5938 -3936.8557]", + "[-3912.8909 -15244.7061 -3997.2224]", + "[-4435.9194 -15244.0391 -4053.4502]", + "[-4952.4629 -15245.2041 -4097.4448]", + "[-5483.3784 -15243.9463 -4108.7759]", + "[-5995.6094 -15245.0186 -4100.731]", + "[-6511.5352 -15244.0488 -4099.9512]", + "[-7050.2017 -15244.29 -4100.5532]", + "[-7581.9004 -15241.6494 -4100.9829]", + "[-8108.2021 -15222.6738 -4102.4053]", + "[-8629.8184 -15180.9297 -4102.7368]", + "[-9148.1045 -15117.4404 -4103.9375]", + "[-9662.2949 -15029.8096 -4105.0596]", + "[-10170.2119 -14915.9727 -4106.1406]", + "[-10670.1621 -14772.8906 -4106.5474]", + "[-11158.9102 -14598.8096 -4106.4512]", + "[-11633.3857 -14391.9668 -4107.9253]", + "[-12089.834 -14149.4814 -4108.2104]", + "[-12526.1582 -13867.9717 -4108.7441]", + "[-12938.9648 -13547.3799 -4108.9463]", + "[-13323.5869 -13188.1924 -4108.853]", + "[-13675.502 -12792.3037 -4108.4644]", + "[-13990.8389 -12362.2168 -4108.7559]", + "[-14268.7021 -11903.041 -4107.9932]", + "[-14497.6123 -11444.042 -4107.5503]", + "[-14692.793 -10966.5645 -4107.3428]", + "[-14856.0254 -10474.417 -4106.5254]", + "[-14989.4893 -9970.6621 -4105.3833]", + "[-15095.4268 -9457.3857 -4104.6392]", + "[-15174.46 -8936.418 -4103.6221]", + "[-15231.0264 -8409.8418 -4102.3379]", + "[-15264.6494 -7878.6821 -4101.9458]", + "[-15280.3711 -7345.0439 -4100.7036]", + "[-15276.8828 -6808.519 -4100.9814]", + "[-15252.6572 -6270.2388 -4102.2681]", + "[-15211.4766 -5759.0342 -4102.9863]", + "[-15147.7295 -5247.5137 -4103.8794]", + "[-15060.1367 -4736.4761 -4104.9453]", + "[-14945.3057 -4228.3467 -4105.9517]", + "[-14801.0449 -3724.9238 -4106.7559]", + "[-14622.9375 -3229.6997 -4107.4639]", + "[-14409.459 -2745.907 -4108.0762]", + "[-14156.9443 -2278.7231 -4108.4536]", + "[-13864.5879 -1833.0334 -4107.9189]", + "[-13532.0762 -1413.8527 -4108.8242]", + "[-13159.8691 -1026.8523 -4108.9116]", + "[-12751.3271 -675.5709 -4108.7485]", + "[-12309.9922 -362.9347 -4108.4233]", + "[-11867.6162 -104.3216 -4108.0303]", + "[-11405.124 119.4307 -4107.5869]", + "[-10925.8301 308.8914 -4107.0718]", + "[-10433.7695 466.9409 -4106.416]", + "[-9931.8574 595.1161 -4105.1543]", + "[-9422.0273 695.6627 -4104.9995]", + "[-8906.8799 771.9965 -4103.7681]", + "[-8387.291 825.0064 -4102.8994]", + "[-7864.6348 857.3648 -4101.728]", + "[-7340.3291 870.0922 -4100.6328]", + "[-6814.7261 867.219 -4111.124]", + "[-6288.3291 865.2399 -4162.8149]", + "[-5760.979 864.6871 -4223.9038]", + "[-5225.3848 865.2698 -4287.0576]", + "[-4708.2573 865.189 -4349.5356]", + "[-4176.9683 866.0649 -4414.3311]", + "[-3667.437 865.8856 -4474.354]", + "[-3145.9758 865.7983 -4533.6196]", + "[-2611.9714 866.1967 -4586.5322]", + "[-2065.5664 865.1112 -4621.1616]", + "[-1549.4619 864.3065 -4615.0371]", + "[-1030.6456 865.7914 -4611.7026]", + "[-513.2593 865.0732 -4612.4629]", + "[-0.2123 864.8356 -4612.2739]", + "[511.8673 865.7271 -4612.5879]", + "[1059.7432 864.1989 -4612.4927]", + "[1606.9358 865.2626 -4612.6157]", + "[2153.4329 865.2166 -4612.6445]", + "[2699.2446 865.1436 -4612.6475]", + "[3243.4531 864.975 -4612.5962]", + "[3780.2534 865.0728 -4612.373]", + "[4302.29 864.9233 -4612.4395]", + "[4842.1792 865.0872 -4612.3916]", + "[5360.8247 864.6144 -4612.5239]", + "[5886.104 865.3354 -4612.6743]", + "[6413.4502 867.4272 -4612.3901]", + "[6938.0811 919.8342 -4611.6934]", + "[7450.6558 1043.0193 -4612.5015]", + "[7912.2251 1244.3273 -4611.9751]", + "[8254.6221 1472.677 -4612.2378]", + "[8509.7266 1717.7323 -4612.3911]", + "[8753.4971 2051.915 -4612.1987]", + "[8930.7705 2416.051 -4612.4971]", + "[9080.7051 2922.698 -4612.4043]", + "[9156.6504 3436.2368 -4612.0215]", + "[9176.3926 3950.6636 -4612.1821]", + "[9151.1797 4462.1567 -4612.4766]", + "[9069.0654 4987.1006 -4612.3774]", + "[8911.3691 5493.0332 -4612.4019]", + "[8706.9912 5888.3638 -4612.7769]", + "[8462.4834 6207.4717 -4612.3589]", + "[8197.1484 6449.9844 -4612.3989]", + "[7840.9629 6674.8252 -4612.312]", + "[7434.6616 6841.042 -4612.1914]", + "[6931.2314 6960.998 -4612.4507]", + "[6421.3066 7014.5933 -4612.4399]", + "[5891.7959 7019.9424 -4614.0996]", + "[5361.9175 7011.27 -4652.3906]", + "[4848.1084 7010.0356 -4709.7822]", + "[4320.8774 7011.2939 -4771.6201]", + "[3799.1643 7011.6626 -4834.2451]", + "[3281.7178 7009.9141 -4896.8047]", + "[2769.5759 7011.1533 -4958.2627]", + "[2241.1682 7010.6875 -5019.6177]", + "[1727.4426 7011.0083 -5074.5508]", + "[1210.3588 7009.7339 -5119.3081]", + "[693.0756 7009.1235 -5131.9429]", + "[179.3685 7011.666 -5123.9175]", + "[-340.6281 7009.7515 -5122.9536]", + "[-862.2861 6962.4292 -5123.1729]", + "[-1372.1521 6845.2607 -5123.9609]", + "[-1854.3459 6642.7891 -5123.0073]", + "[-2188.9111 6426.4478 -5122.9067]", + "[-2462.0903 6171.377 -5123.1782]", + "[-2686.1309 5872.938 -5123.2437]", + "[-2897.3423 5453.1567 -5123.3579]", + "[-3037.3357 4982.5737 -5123.3774]", + "[-3118.1587 4453.3403 -5123.3706]", + "[-3138.625 3922.0784 -5123.3086]", + "[-3136.5269 3393.9912 -5123.2144]", + "[-3173.6572 2868.8188 -5123.187]", + "[-3241.4365 2347.8574 -5123.6387]", + "[-3338.0532 1832.4257 -5123.3862]", + "[-3467.8855 1325.1116 -5123.4692]", + "[-3629.0466 827.7238 -5123.4292]", + "[-3818.0474 341.0586 -5123.3452]", + "[-3972.5823 -156.4603 -5123.5493]", + "[-4088.1494 -663.6234 -5123.5259]", + "[-4171.1089 -1176.6195 -5123.5322]", + "[-4225.8984 -1692.303 -5123.3179]", + "[-4254.7832 -2209.363 -5123.2231]", + "[-4258.0889 -2726.4719 -5123.7065]", + "[-4254.729 -3242.051 -5123.918]", + "[-4253.252 -3756.3689 -5123.21]", + "[-4251.1499 -4269.3809 -5123.4736]", + "[-4229.9683 -4804.0815 -5123.3296]", + "[-4186.1812 -5336.4727 -5123.5298]", + "[-4118.9478 -5865.9775 -5123.3804]", + "[-4027.5215 -6391.332 -5123.2554]", + "[-3909.2563 -6910.7373 -5123.3843]", + "[-3759.772 -7421.1943 -5123.4712]", + "[-3577.927 -7920.1846 -5123.4507]", + "[-3362.3918 -8404.8271 -5123.5083]", + "[-3108.9131 -8871.2988 -5123.3506]", + "[-2816.3713 -9316.5791 -5123.6455]", + "[-2484.6321 -9736.0957 -5123.6406]", + "[-2129.4541 -10108.9346 -5123.6133]", + "[-1738.6366 -10452.3467 -5123.6147]", + "[-1314.3638 -10763.2217 -5123.3784]", + "[-859.4296 -11040.4209 -5123.1494]", + "[-399.1404 -11271.5449 -5123.5679]", + "[81.9993 -11470.916 -5123.6533]", + "[581.1893 -11639.1963 -5123.3291]", + "[1095.4028 -11777.3398 -5123.3408]", + "[1597.0009 -11882.6387 -5123.6426]", + "[2108.2258 -11963.2148 -5123.5601]", + "[2631.199 -12022.9297 -5123.064]", + "[3146.4026 -12058.8076 -5123.3457]", + "[3677.8259 -12078.4023 -5123.1729]", + "[4195.0664 -12079.6338 -5123.3467]", + "[4724.1738 -12075.9805 -5123.478]", + "[5263.3745 -12075.4043 -5123.6143]", + "[5777.043 -12075.8125 -5123.5063]", + "[6290.9009 -12075.8779 -5123.6914]", + "[6803.8179 -12077.2617 -5123.4849]", + "[7343.8677 -12076.7178 -5123.5596]", + "[7876.7373 -12067.7979 -5123.5132]", + "[8397.5381 -12036.0332 -5123.4492]", + "[8933.5762 -11981.9346 -5123.2261]", + "[9464.207 -11903.5273 -5123.709]", + "[9989.5801 -11799.3018 -5123.5093]", + "[10507.5322 -11666.0898 -5123.4434]", + "[11015.6123 -11501.3018 -5123.7788]", + "[11508.0664 -11303.2705 -5123.6743]", + "[11976.9395 -11073.583 -5123.4097]", + "[12437.3535 -10800.9023 -5123.5718]", + "[12866.4395 -10492.9482 -5123.5049]", + "[13265.6045 -10149.0381 -5123.3413]", + "[13631.0254 -9770.876 -5123.7485]", + "[13960.4609 -9362.5908 -5123.3452]", + "[14251.0781 -8929.1787 -5123.3081]", + "[14502.7119 -8480.0518 -5123.6182]", + "[14724.9248 -7996.7002 -5123.6602]", + "[14908.8281 -7506.9473 -5123.4785]", + "[15058.9277 -7014.749 -5123.2295]", + "[15182.6396 -6498.3257 -5123.6182]", + "[15278.1875 -5982.0923 -5123.6177]", + "[15348.8555 -5465.0767 -5123.6284]", + "[15396.7197 -4946.1948 -5123.4902]", + "[15424.8887 -4426.5981 -5123.4497]", + "[15434.8125 -3907.0125 -5123.2134]", + "[15431.0605 -3387.9016 -5123.3789]", + "[15431.9111 -2869.3713 -5123.3896]", + "[15430.2441 -2351.7456 -5123.0796]", + "[15430.0967 -1834.8936 -5123.2202]", + "[15431.168 -1319.1216 -5122.959]", + "[15429.5762 -804.1616 -5123.208]", + "[15430.1094 -289.8543 -5123.1348]", + "[15430.5713 224.1114 -5123.1494]", + "[15430.8262 737.7574 -5123.1577]", + "[15429.7764 1251.0303 -5123.1592]", + "[15431.0479 1764.0225 -5123.6313]", + "[15431.2441 2276.572 -5123.5625]", + "[15430.5996 2788.8137 -5123.5283]", + "[15431.7793 3323.9629 -5123.4434]", + "[15431.1328 3858.7114 -5123.5747]", + "[15430.9111 4393.0542 -5123.1938]", + "[15431.334 4927.0415 -5123.7729]", + "[15430.9365 5460.624 -5123.5469]", + "[15431.9658 5993.8232 -5123.5757]", + "[15430.4219 6526.6206 -5123.3037]", + "[15431.126 7059.0181 -5123.3062]", + "[15429.9707 7591.0684 -5123.5342]", + "[15431.8408 8122.6846 -5123.3047]", + "[15430.7012 8653.8643 -5122.9141]", + "[15425.7471 9183.877 -5123.6118]", + "[15373.4189 9710.0947 -5123.8286]", + "[15273.6777 10228.665 -5123.2759]", + "[15115.0986 10733.4863 -5123.4878]", + "[14884.1045 11212.2959 -5123.7158]", + "[14591.7715 11633.3994 -5123.1001]", + "[14226.0391 12000.75 -5123.0327]", + "[13816.6289 12287.833 -5123.2461]", + "[13339.9326 12518.2168 -5123.4829]", + "[12830.1133 12679.6621 -5123.3081]", + "[12324.3984 12778.4795 -5123.4907]", + "[11808.2051 12830.9863 -5123.3774]", + "[11287.8223 12844.7441 -5123.3701]", + "[10768.9082 12835.5322 -5123.5752]", + "[10251.1494 12835.5225 -5123.5854]", + "[9734.4365 12834.1309 -5123.4478]", + "[9218.4131 12836.0059 -5123.5591]", + "[8702.7539 12834.7764 -5123.498]", + "[8187.4824 12835.4795 -5123.5845]", + "[7672.5825 12834.6475 -5123.4663]", + "[7158.0283 12834.1221 -5123.5854]", + "[6643.8682 12834.4229 -5123.6455]", + "[6131.4277 12835.0781 -5109.4736]", + "[5603.1787 12835.6035 -5056.1001]", + "[5084.4409 12835.6514 -4995.2915]", + "[4559.3662 12834.9326 -4932.751]", + "[4038.8911 12834.9326 -4869.8125]", + "[3528.2329 12834.4697 -4807.749]", + "[3010.2761 12835.1738 -4746.2729]", + "[2486.4492 12834.9473 -4687.8081]", + "[1963.5907 12834.9414 -4636.0938]", + "[1445.9097 12834.5361 -4603.9346]", + "[931.7369 12824.3994 -4608.2891]", + "[407.8953 12766.1445 -4612.272]", + "[-94.9688 12659.4092 -4611.917]", + "[-586.4536 12498.1699 -4611.7046]", + "[-1061.8779 12263.4844 -4611.8184]", + "[-1494.7671 11954.5068 -4611.6299]", + "[-1868.2634 11577.5859 -4611.9834]", + "[-2232.8955 11198.5117 -4611.5459]", + "[-2600.8831 10824.8633 -4612.2871]", + "[-2973.4429 10458.2656 -4612.3511]", + "[-3341.1592 10087.7373 -4612.2568]", + "[-3710.6226 9719.7646 -4612.479]", + "[-4078.4763 9350.8447 -4612.5254]", + "[-4446.3438 8982.8105 -4612.4321]", + "[-4814.356 8615.9727 -4612.2217]", + "[-5181.2617 8248.71 -4612.416]", + "[-5547.6318 7881.709 -4612.1943]", + "[-5914.4365 7515.8457 -4612.2178]", + "[-6280.1592 7149.2856 -4612.145]", + "[-6647.2212 6782.7549 -4612.2471]", + "[-7014.1572 6413.7617 -4612.1792]", + "[-7385.7622 6043.6016 -4612.3125]", + "[-7759.6025 5668.8389 -4612.0938]", + "[-8138.4248 5291.1904 -4612.0107]", + "[-8502.4639 4926.5522 -4612.1196]", + "[-8875.9229 4553.7148 -4611.9507]", + "[-9242.6113 4186.9922 -4612.4023]", + "[-9620.3701 3809.5029 -4612.2744]", + "[-9985.6064 3443.697 -4612.6108]", + "[-10354.3105 3075.7698 -4612.3833]", + "[-10722.6689 2707.7256 -4611.936]", + "[-11090.415 2339.519 -4612.4326]", + "[-11456.0762 1972.0732 -4612.4185]", + "[-11819.7217 1610.2313 -4611.7681]", + "[-12195.8926 1234.8267 -4612.0283]", + "[-12561.3535 868.4402 -4611.8164]", + "[-12933.7285 497.7155 -4611.604]", + "[-13306.5029 122.8854 -4611.8359]", + "[-13670.0303 -248.9191 -4611.1289]", + "[-14016.4004 -635.549 -4611.6157]", + "[-14346.0439 -1034.95 -4611.3882]", + "[-14659.1875 -1446.6104 -4611.5488]", + "[-14950.6943 -1873.2798 -4611.4038]", + "[-15219.7646 -2313.8435 -4611.5264]", + "[-15462.5459 -2768.8003 -4611.6719]", + "[-15675.0303 -3237.46 -4611.5308]", + "[-15854.0449 -3719.1533 -4611.6289]", + "[-15997.0605 -4211.7651 -4611.459]", + "[-16098.3818 -4714.0254 -4611.519]", + "[-16159.2773 -5246.2466 -4611.6802]", + "[-16170.4336 -5780.7168 -4611.5132]", + "[-16131.9902 -6313.752 -4611.7549]", + "[-16045.9092 -6842.458 -4611.3169]", + "[-15920.1514 -7339.2422 -4611.356]", + "[-15755.0381 -7826.0908 -4611.5596]", + "[-15556.4414 -8303.915 -4611.3052]", + "[-15321.6338 -8769.6738 -4611.5254]", + "[-15058.0352 -9224.4355 -4611.627]", + "[-14767.749 -9667.373 -4611.2817]", + "[-14451.2559 -10097.2227 -4611.3521]", + "[-14130.6123 -10496.5664 -4611.5811]", + "[-13791.3809 -10885.082 -4611.4722]", + "[-13436.6172 -11264.6377 -4611.3286]", + "[-13066.9258 -11634.8135 -4611.3223]", + "[-12692.7461 -12005.6758 -4611.6338]", + "[-12317.124 -12379.8223 -4611.4644]", + "[-11941.3789 -12755.4336 -4611.5381]", + "[-11567.0566 -13131.8604 -4611.4365]", + "[-11190.6855 -13505.5723 -4611.4463]", + "[-10816.1504 -13880.6055 -4611.4966]", + "[-10441.6611 -14255.0957 -4611.4907]", + "[-10063.4395 -14625.1748 -4611.4307]", + "[-9655.1328 -14961.7559 -4611.5308]", + "[-9217.8496 -15258.0479 -4611.1504]", + "[-8750.2891 -15502.5664 -4611.2803]", + "[-8255.2129 -15681.5752 -4611.2744]", + "[-7738.7192 -15778.9434 -4611.3037]", + "[-7214.063 -15786.6309 -4611.7197]", + "[-6694.1274 -15772.6396 -4611.5508]", + "[-6175.7642 -15769.4795 -4611.4863]", + "[-5659.2847 -15771.8125 -4611.5796]", + "[-5143.5117 -15771.1123 -4611.5815]", + "[-4628.1821 -15770.584 -4611.4888]", + "[-4113.2725 -15771.6074 -4611.4873]", + "[-3598.7161 -15770.4365 -4611.4858]", + "[-3084.5713 -15771.666 -4611.3013]", + "[-2570.7625 -15771.5156 -4611.5425]", + "[-2057.3467 -15770.5088 -4611.4912]", + "[-1544.3392 -15771.1826 -4611.2515]", + "[-1031.6191 -15771.2041 -4611.5869]", + "[-519.3138 -15771.3438 -4611.4961]", + "[18.2152 -15771.3818 -4611.501]", + "[555.3483 -15771.3877 -4611.5029]", + "[1092.0542 -15770.2412 -4611.5068]", + "[1628.4034 -15770.5254 -4611.4966]", + "[2164.2976 -15771.2256 -4611.374]", + "[2699.8625 -15771.707 -4611.5884]", + "[3234.989 -15771.4404 -4611.5063]", + "[3769.7114 -15770.5098 -4611.5122]", + "[4304.0796 -15770.749 -4611.4985]", + "[4838 -15771.9014 -4611.4858]", + "[5371.5635 -15770.0605 -4611.522]", + "[5904.6685 -15770.6738 -4611.5361]", + "[6437.4224 -15771.5898 -4611.6074]", + "[6969.7773 -15770.3604 -4611.5229]", + "[7501.7217 -15770.9395 -4611.4834]", + "[8033.3115 -15770.6406 -4611.4917]", + "[8564.459 -15770.2539 -4611.4922]", + "[9095.2402 -15770.5186 -4611.4136]", + "[9624.8467 -15744.9121 -4611.4897]", + "[10149.3789 -15669.2666 -4611.771]", + "[10661.9971 -15537.8838 -4611.8711]", + "[11153.8828 -15345.2979 -4611.4492]", + "[11605.8027 -15081.5537 -4611.4971]", + "[12011.9258 -14738.3047 -4611.6782]", + "[12323.8115 -14361.834 -4611.6997]", + "[12580.9463 -13918.252 -4611.7495]", + "[12772.873 -13428.1689 -4611.8188]", + "[12901.2139 -12921.2246 -4611.7534]", + "[12976.2861 -12406.6094 -4611.6714]", + "[13008.7383 -11889.7881 -4611.4297]", + "[13007.4668 -11373.875 -4610.8643]", + "[13004.8008 -10859.7471 -4611.4121]", + "[13002.0068 -10347.0771 -4611.376]", + "[13003.3223 -9814.1836 -4611.5386]", + "[13002.3682 -9282.4746 -4611.4883]", + "[13003.082 -8751.249 -4611.6255]", + "[13003.207 -8220.6191 -4611.5562]", + "[13002.1426 -7690.4243 -4611.5073]", + "[13003.542 -7160.4219 -4611.481]", + "[13003.1973 -6629.1035 -4611.4839]", + "[13018.8545 -6116.7739 -4610.7983]", + "[13089.4707 -5778.6367 -4611.7139]", + "[13262.8936 -5290.6631 -4611.6724]", + "[13503.1143 -4830.7949 -4611.6001]", + "[13793.917 -4402.4541 -4611.6191]", + "[14120.7471 -4001.4285 -4611.5483]", + "[14475.1895 -3623.8967 -4611.3589]", + "[14837.7637 -3253.0212 -4611.333]", + "[15159.9668 -2846.6257 -4611.5073]", + "[15438.2275 -2410.6409 -4611.5952]", + "[15666.9609 -1948.5122 -4611.5176]", + "[15828.2529 -1461.7205 -4611.3174]", + "[15912.2227 -943.113 -4611.3823]", + "[15909.708 -420.2051 -4611.6064]", + "[15901.0674 97.3603 -4611.5703]", + "[15897.9521 612.9531 -4611.5708]", + "[15898.6543 1144.601 -4611.4888]", + "[15898.623 1659.7969 -4611.5366]", + "[15899.0752 2181.6443 -4611.5396]", + "[15898.4287 2705.1504 -4611.5664]", + "[15899.7168 3228.667 -4611.5723]", + "[15898.6777 3742.0659 -4611.5278]", + "[15897.876 4258.3037 -4611.4941]", + "[15898.251 4772.4316 -4611.5679]", + "[15898.1875 5287.2202 -4611.4209]", + "[15899.4609 5803.7036 -4611.4526]", + "[15898.9404 6316.8521 -4611.3325]", + "[15899.1318 6843.9805 -4611.3608]", + "[15898.9492 7365.4663 -4611.396]", + "[15896.083 7896.2261 -4610.9697]", + "[15871.4668 8417.9102 -4611.0972]", + "[15824.9756 8934.9072 -4611.6362]", + "[15758.0469 9458.6016 -4611.1992]", + "[15663.5479 9979.0752 -4611.332]", + "[15542.9521 10495.5508 -4611.5244]", + "[15393.1875 10997.6572 -4611.6221]", + "[15209.7734 11494.9473 -4611.3638]", + "[14990.9756 11977.125 -4611.4609]", + "[14736.0078 12440.3057 -4611.5283]", + "[14443.6201 12879.9307 -4611.6411]", + "[14114.7588 13291.8154 -4611.5483]", + "[13749.9287 13670.8721 -4611.3774]", + "[13353.7178 14015.1318 -4611.7466]", + "[12929.5889 14321.3184 -4611.4292]", + "[12486.1963 14587.2559 -4611.6924]", + "[12009.5625 14824.9844 -4611.6406]", + "[11520.0967 15024.5303 -4611.4009]", + "[11019.1611 15189.5625 -4611.3228]", + "[10510.0928 15323.5107 -4611.2896]", + "[9995.4277 15428.9385 -4611.2422]", + "[9480.0088 15508.001 -4611.4165]", + "[8965.1758 15563.7344 -4611.7007]", + "[8449.2695 15597.7705 -4611.4551]", + "[7933.1265 15615.416 -4611.4106]", + "[7417.2715 15615.3721 -4611.3511]", + "[6902.0327 15613.1357 -4611.561]", + "[6387.2837 15612.8389 -4611.5781]", + "[5873.5225 15613.2422 -4605.8774]", + "[5342.5874 15612.7021 -4559.5342]", + "[4821.3838 15612.9834 -4499.0737]", + "[4292.3408 15612.5947 -4436.9482]", + "[3766.6973 15612.9717 -4373.373]", + "[3252.7107 15612.5791 -4311.2163]", + "[2735.2864 15613.3213 -4249.3164]", + "[2217.3015 15612.7969 -4190.1484]", + "[1693.0232 15612.6357 -4136.1636]", + "[1174.2411 15612.7559 -4096.2808]", + "[648.4625 15612.5586 -4094.7625]", + "[119.8188 15613.4082 -4099.7974]", + "[-411.4196 15612.2002 -4099.6714]", + "[-934.2758 15613.334 -4099.5166]", + "[-1462.7211 15613.5518 -4099.4819]", + "[-1988.38 15612.2979 -4099.4316]", + "[-2502.0354 15613.6299 -4099.4688]", + "[-3020.0728 15613.3701 -4099.4917]", + "[-3537.512 15605.0781 -4098.6514]", + "[-4052.0071 15552.0225 -4099.5654]", + "[-4557.2642 15450.1211 -4100.0151]", + "[-5066.5391 15286.6279 -4099.5151]", + "[-5534.8726 15057.1758 -4099.1025]", + "[-5965.2764 14751.4502 -4099.3018]", + "[-6322.6699 14386.8203 -4099.3433]", + "[-6622.2925 13947.3574 -4099.5391]", + "[-6844.2275 13466.959 -4099.376]", + "[-6995.3691 12962.9229 -4099.0259]", + "[-7090.4238 12448.6113 -4099.3354]", + "[-7138.0288 11930.0498 -4099.458]", + "[-7148.2266 11411.29 -4099.5391]", + "[-7139.9106 10893.9531 -4099.5962]", + "[-7139.6978 10377.6484 -4099.6455]", + "[-7139.564 9862.084 -4099.5171]", + "[-7140.3672 9347.2207 -4099.6089]", + "[-7121.6548 8833.3262 -4099.2451]", + "[-7056.7686 8323.5381 -4099.2837]", + "[-6940.6499 7823.7153 -4099.4004]", + "[-6769.1304 7340.8564 -4099.2788]", + "[-6517.2231 6869.3838 -4099.127]", + "[-6189.8569 6448.3809 -4099.2935]", + "[-5829.1509 6122.9517 -4099.5942]", + "[-5380.7603 5840.6108 -4099.439]", + "[-4896.21 5633.8989 -4099.5537]", + "[-4391.5581 5494.0371 -4099.4697]", + "[-3877.6257 5408.9673 -4099.2925]", + "[-3360.3657 5369.1694 -4099.4883]", + "[-2843.4844 5365.3843 -4098.8965]", + "[-2328.3733 5371.7529 -4099.5298]", + "[-1814.1394 5372.2568 -4099.4688]", + "[-1300.7181 5372.437 -4099.5]", + "[-787.7416 5371.7534 -4099.5063]", + "[-275.1793 5372.8394 -4099.5444]", + "[237.0799 5372.0791 -4099.5854]", + "[771.1743 5372.0645 -4099.4595]", + "[1304.9155 5373.2354 -4099.4058]", + "[1838.0739 5373.084 -4099.5972]", + "[2370.7849 5372.0366 -4099.5166]", + "[2902.8445 5373.2915 -4099.5063]", + "[3434.405 5373.2427 -4099.499]", + "[3965.5457 5372.0508 -4099.4331]", + "[4496.3486 5373.4517 -4099.5767]", + "[5026.7339 5372.978 -4099.5645]", + "[5556.4565 5358.9717 -4099.0151]", + "[5969.2144 5274.8403 -4099.3662]", + "[6464.9492 5088.8726 -4099.7021]", + "[6925.7104 4839.2603 -4099.8413]", + "[7349.6958 4545.7788 -4099.6841]", + "[7744.5 4219.5571 -4099.1558]", + "[8127.6748 3851.8252 -4099.2188]", + "[8496.4561 3472.1858 -4099.5435]", + "[8869.7461 3099.1787 -4099.5615]", + "[9241.8721 2726.7878 -4099.5459]", + "[9613.9922 2354.9878 -4099.5659]", + "[9985.6113 1983.3015 -4099.4922]", + "[10356.9316 1611.8628 -4099.4932]", + "[10728.1113 1240.8447 -4099.4893]", + "[11098.9717 870.0486 -4099.3975]", + "[11468.9375 498.891 -4099.5195]", + "[11839.6045 129.0151 -4099.5078]", + "[12209.9707 -240.605 -4099.502]", + "[12578.7666 -611.2657 -4099.5938]", + "[12949.1396 -979.7606 -4099.4854]", + "[13318.0879 -1349.1494 -4099.5127]", + "[13687.1055 -1717.8922 -4099.4902]", + "[14052.2119 -2089.8162 -4098.811]", + "[14348.6318 -2519.4868 -4098.8413]", + "[14563.7783 -2992.4946 -4099.8032]", + "[14712.1992 -3486.74 -4099.8721]", + "[14808.2783 -4010.2021 -4099.6509]", + "[14857.4424 -4535.8438 -4099.4673]", + "[14867.9932 -5061.2808 -4099.0088]", + "[14860.3809 -5584.6978 -4099.5371]", + "[14860 -6106.2148 -4099.1641]", + "[14861.2441 -6626.5088 -4099.5913]", + "[14860.5078 -7146.2407 -4099.2075]", + "[14861.3672 -7665.3789 -4099.5596]", + "[14859.9531 -8183.8506 -4099.4814]", + "[14861.3896 -8701.8086 -4099.4961]", + "[14860.1504 -9219.3652 -4099.3208]", + "[14835.3066 -9735.8242 -4099.5649]", + "[14763.3359 -10247.1973 -4099.166]", + "[14641.1162 -10747.2178 -4099.2412]", + "[14458.748 -11226.6221 -4099.5327]", + "[14199.2031 -11689.457 -4099.7734]", + "[13866.6592 -12099.3213 -4099.5845]", + "[13512.6768 -12405.5586 -4099.7861]", + "[13066.5752 -12678.584 -4099.7778]", + "[12586.583 -12877.5713 -4099.6294]", + "[12088.5039 -13012.1973 -4099.4126]", + "[11582.3223 -13093.7959 -4099.5552]", + "[11055.1504 -13132.6719 -4099.5903]", + "[10529.1211 -13135.5088 -4099.3281]", + "[10004.9121 -13130.8477 -4099.5459]", + "[9481.9482 -13128.9189 -4099.3975]", + "[8960.0547 -13130.0488 -4099.603]", + "[8438.7598 -13129.377 -4099.3115]", + "[7917.979 -13129.9316 -4099.4697]", + "[7397.7427 -13128.9707 -4099.3989]", + "[6877.9321 -13128.8682 -4099.5415]", + "[6358.7129 -13129.833 -4099.4893]", + "[5839.9497 -13129.5908 -4099.5083]", + "[5321.6885 -13129.3809 -4099.498]", + "[4803.9194 -13128.9766 -4099.2339]", + "[4286.6064 -13129.5283 -4099.6367]", + "[3769.8386 -13128.6084 -4099.6206]", + "[3253.1094 -13129.4492 -4091.1843]", + "[2741.9656 -13128.9893 -4044.6125]", + "[2222.7402 -13129.415 -3984.3445]", + "[1708.2678 -13128.4775 -3923.9922]", + "[1196.3425 -13129.5811 -3861.9712]", + "[687.4136 -13129.541 -3800.6101]", + "[178.4205 -13128.4961 -3739.4827]", + "[-339.092 -13128.6348 -3680.2673]", + "[-857.9438 -13129.1064 -3626.3862]", + "[-1377.2468 -13129.7891 -3585.6887]", + "[-1899.0238 -13127.3359 -3581.8525]", + "[-2419.0808 -13106.4053 -3587.873]", + "[-2933.7158 -13065.3682 -3587.5688]", + "[-3456.9929 -13002.4072 -3587.1514]", + "[-3979.0413 -12913.042 -3587.6206]", + "[-4480.3076 -12802.5586 -3587.5776]", + "[-4974.4712 -12663.0576 -3587.4502]", + "[-5457.7354 -12493.4541 -3587.6724]", + "[-5950.7764 -12282.4863 -3587.5344]", + "[-6424.6699 -12033.7539 -3587.5374]", + "[-6875.6099 -11747.2129 -3587.4939]", + "[-7298.8286 -11422.7051 -3587.6931]", + "[-7690.2622 -11062.0791 -3587.4531]", + "[-8046.3369 -10667.8359 -3587.6665]", + "[-8364.3506 -10243.7354 -3587.7217]", + "[-8644.0039 -9795.0498 -3587.5471]", + "[-8886.0195 -9326.293 -3587.3818]", + "[-9090.1328 -8841.4229 -3587.238]", + "[-9261.5869 -8345.3066 -3587.6643]", + "[-9399.6504 -7840.0913 -3587.7666]", + "[-9509.7529 -7329.5767 -3587.7761]", + "[-9592.8848 -6815.231 -3587.4189]", + "[-9654.1611 -6298.7993 -3587.0396]", + "[-9692.4971 -5780.856 -3587.5364]", + "[-9713.3994 -5262.7524 -3587.3552]", + "[-9715.5146 -4744.8071 -3585.8428]", + "[-9711.5693 -4232.6138 -3549]", + "[-9711.624 -3705.5049 -3489.2551]", + "[-9711.7051 -3191.209 -3428.8198]", + "[-9712.2461 -2677.8091 -3366.9595]", + "[-9712.9277 -2154.4556 -3303.4219]", + "[-9711.2979 -1630.4227 -3240.7932]", + "[-9712.2129 -1115.6959 -3181.0962]", + "[-9712.4004 -600.3993 -3125.8735]", + "[-9711.9697 -78.2924 -3080.7175]", + "[-9712.2441 446.5289 -3066.2822]", + "[-9712.7764 963.8572 -3075.0791]", + "[-9711.8027 1486.2104 -3075.9724]", + "[-9712.502 2003.1649 -3075.4709]", + "[-9711.8633 2524.969 -3075.5481]", + "[-9712.1016 3044.2368 -3075.4939]", + "[-9712.0156 3560.9482 -3075.613]", + "[-9713.2021 4078.1008 -3075.5637]", + "[-9712.6357 4594.084 -3075.6326]", + "[-9711.8125 5111.5195 -3075.5859]", + "[-9711.9063 5624.1108 -3075.5364]", + "[-9712.7236 6142.0825 -3075.467]", + "[-9712.4551 6664.4419 -3075.5457]", + "[-9712.082 7177.3833 -3075.4783]", + "[-9712.9287 7705.3027 -3075.5676]", + "[-9711.6348 8222.2793 -3075.4373]", + "[-9712.5049 8740.1777 -3075.4253]", + "[-9712.4922 9259.6123 -3075.5764]", + "[-9712.6826 9772.7646 -3075.4326]", + "[-9713.085 10289.1787 -3075.5752]", + "[-9713.3027 10805.5596 -3075.5]", + "[-9707.5264 11338.999 -3075.2393]", + "[-9663.4072 11850.5986 -3075.2964]", + "[-9572.6553 12355.6035 -3075.5437]", + "[-9426.2578 12846.3457 -3075.4722]", + "[-9207.1777 13335.2178 -3074.9238]", + "[-8912.6904 13780.0215 -3075.4014]", + "[-8563.2539 14147.2686 -3075.3313]", + "[-8156.1968 14446.584 -3075.7725]", + "[-7685.71 14685.2686 -3075.2112]", + "[-7188.499 14852.4717 -3075.4102]", + "[-6678.0181 14959.9199 -3075.5339]", + "[-6162.0366 15018.21 -3075.3367]", + "[-5644.9941 15036.9141 -3075.5828]", + "[-5129.2441 15029.3555 -3075.5142]", + "[-4614.8101 15028.2627 -3075.5845]", + "[-4101.3359 15027.1475 -3075.5745]", + "[-3588.5254 15027.5264 -3075.3469]", + "[-3076.1611 15027.3574 -3075.5835]", + "[-2539.8901 15026.4102 -3075.4343]", + "[-2004.1069 15027.5303 -3075.4863]", + "[-1468.7043 15027.6992 -3075.5786]", + "[-934.7306 14997.5273 -3075.4309]", + "[-405.6297 14923.1396 -3075.4167]", + "[111.3227 14789.998 -3075.5955]", + "[625.7228 14660.4336 -3075.7773]", + "[1153.3119 14604.8779 -3075.417]", + "[1681.0725 14586.0859 -3075.1665]", + "[2207.9185 14593.4717 -3075.5667]", + "[2733.3362 14594.6631 -3075.3479]", + "[3259.0054 14596.2002 -3075.4995]", + "[3786.4028 14595.5527 -3075.5137]", + "[4315.8716 14595.8604 -3075.4792]", + "[4847.7583 14594.9541 -3075.3489]", + "[5382.0254 14595.1436 -3075.6104]", + "[5894.2788 14595.3037 -3075.0232]", + "[6408.3271 14580.3926 -3075.1458]", + "[6923.6812 14545.4404 -3075.5325]", + "[7438.7866 14488.3232 -3075.6875]", + "[7952.5737 14408.3975 -3075.5027]", + "[8465.1221 14302.4355 -3075.4783]", + "[8975.1211 14166.96 -3075.3418]", + "[9481.1572 13999.0469 -3075.0613]", + "[9956.7256 13803.9639 -3075.6997]", + "[10430.4512 13568.5332 -3075.9045]", + "[10875.4141 13300.1572 -3075.3335]", + "[11308.3008 12986.8633 -3075.4534]", + "[11699.1152 12644.957 -3075.4832]", + "[12066.0127 12261.7588 -3075.6826]", + "[12402.5781 11837.8926 -3075.3657]", + "[12688.7109 11403.0098 -3075.3875]", + "[12942.0781 10938.6299 -3075.6838]", + "[13160.7568 10450.9697 -3075.5562]", + "[13344.5918 9946.3887 -3075.6477]", + "[13495.3369 9432.1172 -3075.0325]", + "[13614.0361 8910.5488 -3075.6528]", + "[13705.7832 8384.6338 -3075.5713]", + "[13771.8584 7856.0117 -3075.3081]", + "[13815.4111 7326.0474 -3075.4551]", + "[13838.3301 6795.6245 -3075.6458]", + "[13842.8037 6265.6572 -3075.4412]", + "[13839.1523 5736.4033 -3075.3369]", + "[13838.9746 5207.9634 -3075.3887]", + "[13838.8076 4680.2769 -3075.512]", + "[13838.6797 4153.0723 -3075.4456]", + "[13837.9668 3626.3677 -3075.2141]", + "[13839.3252 3100.2017 -3075.6499]", + "[13838.4053 2574.5793 -3075.196]", + "[13837.6162 2049.6362 -3072.3438]", + "[13838.1758 1530.2578 -3029.1836]", + "[13837.498 1017.1765 -2970.2942]", + "[13838.7803 482.3744 -2907.4514]", + "[13837.7734 -35.9304 -2844.9473]", + "[13838.335 -561.5786 -2781.0667]", + "[13837.9482 -1089.5657 -2718.0491]", + "[13839.2725 -1615.5214 -2657.5188]", + "[13838.7451 -2136.8376 -2603.2439]", + "[13838.6162 -2653.7119 -2562.6428]", + "[13838.7061 -3170.418 -2557.0984]", + "[13837.2734 -3691.8037 -2563.7273]", + "[13838.375 -4207.978 -2563.8091]", + "[13838.5352 -4734.2969 -2563.4675]", + "[13837.9443 -5269.1191 -2563.6221]", + "[13838.6807 -5785.8574 -2563.4849]", + "[13837.6904 -6299.6587 -2563.4268]", + "[13838.75 -6830.7686 -2563.5972]", + "[13835.1631 -7352.1396 -2563.4673]", + "[13812.8506 -7864.3452 -2563.5217]", + "[13768.4111 -8390.9258 -2563.5676]", + "[13703.1279 -8900.5869 -2563.2273]", + "[13612.6777 -9418.1172 -2563.5452]", + "[13492.2275 -9940.5723 -2563.6318]", + "[13349.0342 -10433.0811 -2563.6697]", + "[13174.7617 -10918.0957 -2563.7229]", + "[12967.4092 -11389.3213 -2563.3621]", + "[12725.2451 -11842.6523 -2563.5325]", + "[12448.4053 -12273.9424 -2563.7292]", + "[12118.002 -12702.4229 -2563.6404]", + "[11750.1563 -13097.5801 -2563.6025]", + "[11348.2305 -13456.2002 -2563.5808]", + "[10915.9492 -13775.8086 -2563.6765]", + "[10458.3564 -14055.6318 -2563.8469]", + "[9980.5127 -14296.3955 -2563.666]", + "[9487.3447 -14500.1377 -2563.5591]", + "[8982.459 -14668.4268 -2563.6467]", + "[8469.373 -14804.5205 -2563.3999]", + "[7950.6006 -14911.4336 -2563.3857]", + "[7428.1768 -14992.0244 -2563.5781]", + "[6903.5718 -15049.1143 -2563.7271]", + "[6377.7861 -15084.2041 -2563.2856]", + "[5852.1997 -15100.6191 -2563.4958]", + "[5327.0601 -15100.2217 -2563.2131]", + "[4802.9155 -15097.2666 -2563.6008]", + "[4279.5317 -15096.9658 -2563.3853]", + "[3756.5425 -15098.3506 -2563.5647]", + "[3234.072 -15096.8574 -2563.5232]", + "[2711.9956 -15096.9092 -2563.6731]", + "[2190.4092 -15098.1631 -2563.314]", + "[1669.249 -15096.7734 -2563.4731]", + "[1148.5454 -15097.917 -2563.5452]", + "[628.3751 -15106.2656 -2563.5522]", + "[111.7423 -15167.9326 -2563.3059]", + "[-398.7146 -15262.9629 -2563.4856]", + "[-910.4164 -15343.6592 -2563.3794]", + "[-1427.0723 -15372.1445 -2563.4329]", + "[-1943.2 -15362.5986 -2563.5864]", + "[-2457.7566 -15359.9854 -2563.3718]", + "[-2997.7949 -15357.7607 -2563.5273]", + "[-3531.3706 -15360.293 -2563.5947]", + "[-4055.6155 -15358.2119 -2563.562]", + "[-4567.9424 -15359.6377 -2563.6287]", + "[-5099.7642 -15358.9463 -2563.4539]", + "[-5630.8081 -15359.5205 -2563.4324]", + "[-6161.4448 -15358.3135 -2563.5186]", + "[-6691.5679 -15359.4863 -2563.5457]", + "[-7221.3291 -15358.5225 -2563.4751]", + "[-7750.6196 -15359.8975 -2563.3945]", + "[-8279.4219 -15345.4688 -2565.5129]", + "[-8806.291 -15309.3086 -2565.9824]", + "[-9330.8369 -15249.1748 -2566.8687]", + "[-9855.6094 -15166.9346 -2567.7776]", + "[-10378.4023 -15055.2051 -2568.6875]", + "[-10897.6465 -14912.7217 -2569.5229]", + "[-11384.9131 -14744.5908 -2570.1814]", + "[-11865.7988 -14541.0742 -2570.5605]", + "[-12341.7305 -14293.8574 -2571.2485]", + "[-12782.7754 -14017.1367 -2571.6233]", + "[-13206.1504 -13695.3564 -2571.7751]", + "[-13583.9971 -13349.3848 -2571.6292]", + "[-13934.6338 -12964.0967 -2571.7803]", + "[-14253.5674 -12541.3926 -2571.8235]", + "[-14536.6025 -12087.1396 -2571.4065]", + "[-14780.7949 -11607.8926 -2570.7051]", + "[-14987.0352 -11112.1787 -2570.1309]", + "[-15156.9092 -10604.2305 -2569.4961]", + "[-15293.7871 -10088.0781 -2568.5466]", + "[-15400.7295 -9566.1699 -2567.8284]", + "[-15480.5059 -9040.6992 -2566.8091]", + "[-15535.9521 -8513.2852 -2565.3867]", + "[-15570.0566 -7985.2935 -2565.0793]", + "[-15584.2813 -7457.8467 -2564.0964]", + "[-15580.2969 -6931.666 -2563.3479]", + "[-15549.5615 -6407.4102 -2563.1255]", + "[-15491.2617 -5886.7109 -2563.7139]", + "[-15404.7422 -5371.4263 -2563.3372]", + "[-15286.7715 -4863.1206 -2563.4075]", + "[-15137.5576 -4363.9219 -2563.4644]", + "[-14955.3701 -3876.8401 -2563.2717]", + "[-14782.1172 -3390.5928 -2563.2195]", + "[-14650.4824 -2866.9692 -2563.3967]", + "[-14556.6953 -2346.708 -2563.7139]", + "[-14494.3779 -1835.2695 -2563.6001]", + "[-14457.6738 -1307.9625 -2563.4565]", + "[-14445.9385 -795.8575 -2563.2388]", + "[-14450.9932 -273.6413 -2563.4807]", + "[-14452.7354 243.8052 -2563.4265]", + "[-14452.9111 760.5589 -2563.3933]", + "[-14452.3027 1276.7214 -2563.6721]", + "[-14452.333 1792.1675 -2563.6887]", + "[-14453.3896 2306.8816 -2563.563]", + "[-14452.5137 2821.2344 -2563.3835]", + "[-14452.2051 3335.2498 -2563.5554]", + "[-14452.3721 3848.8608 -2563.488]", + "[-14451.7842 4362.1006 -2563.4922]", + "[-14451.8975 4875.0068 -2563.4985]", + "[-14452.0059 5387.4932 -2563.4915]", + "[-14452.3145 5899.644 -2563.4973]", + "[-14452.8662 6437 -2563.4929]", + "[-14452.1592 6973.9565 -2563.5588]", + "[-14447.1777 7510.3936 -2564.1262]", + "[-14419.168 8045.7314 -2565.8616]", + "[-14369.5547 8578.8369 -2566.6802]", + "[-14295.5762 9108.2979 -2567.5186]", + "[-14195.3145 9632.9551 -2568.1245]", + "[-14066.5254 10150.3418 -2569.314]", + "[-13907.1982 10658.2725 -2569.6438]", + "[-13712.7285 11153.0654 -2570.6765]", + "[-13482.498 11631.292 -2570.9194]", + "[-13213.4268 12087.8428 -2571.5488]", + "[-12907.5068 12519.2139 -2571.228]", + "[-12562.6533 12919.2285 -2572.0688]", + "[-12184.1895 13285.7295 -2572.0229]", + "[-11773.5674 13614.1924 -2571.8101]", + "[-11336.8438 13904.8604 -2571.3352]", + "[-10877.8711 14156.2881 -2571.0598]", + "[-10401.8135 14370.499 -2570.4985]", + "[-9912.9658 14549.6934 -2569.8123]", + "[-9414.917 14696.7813 -2568.8499]", + "[-8910.2598 14814.1143 -2568.0789]", + "[-8401.4316 14903.9551 -2567.3218]", + "[-7890.1382 14969.918 -2566.282]", + "[-7377.749 15014.002 -2565.5085]", + "[-6865.7554 15039.1035 -2564.5913]", + "[-6330.5439 15046.4033 -2563.0447]", + "[-5796.9849 15043.0127 -2563.4639]", + "[-5265.2998 15042.8506 -2563.6055]", + "[-4733.7217 15042.541 -2563.5125]", + "[-4200.1743 15042.8535 -2563.5051]", + "[-3663.7192 15042.708 -2563.4746]", + "[-3146.7119 15042.3369 -2563.3669]", + "[-2625.0645 15041.748 -2563.5833]", + "[-2098.8452 15042.0596 -2561.3213]", + "[-1572.8958 15042.0801 -2522.645]", + "[-1049.792 15042.1494 -2462.9663]", + "[-531.2849 15042.3301 -2401.8535]", + "[-16.536 15042.0967 -2339.9163]", + "[497.787 15042.3164 -2277.636]", + "[1009.0964 15041.9297 -2216.3318]", + "[1518.0601 15043.623 -2157.0703]", + "[2048.9932 15041.5605 -2100.1931]", + "[2580.2551 15042.1572 -2055.3032]", + "[3092.9851 15041.9766 -2042.8669]", + "[3613.3809 15042.0293 -2051.5461]", + "[4145.7471 15042.25 -2051.6167]", + "[4670.2397 15042.6084 -2051.5999]", + "[5186.6099 15042.5342 -2051.2551]", + "[5717.7593 15042.5996 -2051.6865]", + "[6256.189 15042.7197 -2051.394]", + "[6768.8193 15042.2432 -2051.6665]", + "[7280.9629 15040.7988 -2051.832]", + "[7820.8481 15019.3428 -2053.6946]", + "[8358.7188 14976.4053 -2054.5554]", + "[8892.8701 14907.292 -2054.9346]", + "[9422.0322 14814.4512 -2056.6606]", + "[9943.8838 14693.2119 -2056.7388]", + "[10456.3984 14540.6191 -2057.9846]", + "[10957.001 14354.7715 -2058.4155]", + "[11441.0508 14132.0371 -2058.9014]", + "[11905.4551 13872.7773 -2059.334]", + "[12344.7969 13574.5703 -2059.8108]", + "[12754.7207 13238.4111 -2059.8372]", + "[13130.292 12865.8193 -2060.033]", + "[13468.9902 12461.0908 -2059.9177]", + "[13769.3506 12028.5117 -2059.373]", + "[14030.8027 11572.7959 -2058.978]", + "[14253.3965 11098.3984 -2058.6704]", + "[14440.2852 10610.3604 -2057.9155]", + "[14594.0645 10112.2422 -2057.0339]", + "[14717.2793 9607.0313 -2056.4648]", + "[14812.7754 9097.1191 -2055.5032]", + "[14884.4521 8584.5518 -2054.5752]", + "[14933.1641 8070.4404 -2053.1553]", + "[14962.6602 7556.5259 -2052.5842]", + "[14972.6445 7043.0103 -2051.6174]", + "[14969.6748 6530.8794 -2051.3755]", + "[14968.7959 5993.1509 -2051.4651]", + "[14967.082 5456.498 -2051.5742]", + "[14969.0195 4920.7085 -2051.521]", + "[14967.4043 4385.3931 -2051.4263]", + "[14967.54 3850.4382 -2051.4553]", + "[14967.7314 3315.9326 -2051.4939]", + "[14967.6758 2781.853 -2051.4934]", + "[14955.1035 2248.3169 -2051.2554]", + "[14909.0254 1716.8108 -2051.3894]", + "[14833.875 1189.3728 -2051.7058]", + "[14728.3818 668.2521 -2051.4033]", + "[14589.1611 155.9715 -2051.425]", + "[14417.7471 -345.5883 -2051.3635]", + "[14227.5059 -839.1525 -2051.45]", + "[14085.1631 -1347.9891 -2051.252]", + "[13976.8213 -1863.9645 -2051.5808]", + "[13902.2207 -2385.428 -2051.2078]", + "[13855.8223 -2909.0496 -2051.4937]", + "[13835.2959 -3433.5271 -2051.3601]", + "[13837.4111 -3957.657 -2051.6292]", + "[13839.7666 -4480.896 -2051.5798]", + "[13841.1084 -5003.5566 -2051.3506]", + "[13839.0264 -5525.7163 -2051.5737]", + "[13840.3711 -6047.3735 -2051.4644]", + "[13839.1758 -6568.6973 -2051.5454]", + "[13840.5713 -7089.5596 -2051.5217]", + "[13839.5371 -7610.0503 -2051.4348]", + "[13838.1396 -8130.1694 -2052.1572]", + "[13815.2002 -8649.2734 -2053.5493]", + "[13772.8779 -9166.3379 -2054.6279]", + "[13706.3457 -9679.9424 -2055.146]", + "[13617.4863 -10189.3525 -2056.0928]", + "[13503.04 -10692.8262 -2057.0042]", + "[13359.3467 -11188.1162 -2057.7429]", + "[13184.9219 -11672.8584 -2058.5703]", + "[12977.3779 -12143.5742 -2058.7236]", + "[12734.79 -12596.1035 -2059.3652]", + "[12455.5859 -13025.832 -2059.7034]", + "[12124.8711 -13449.1533 -2059.989]", + "[11756.291 -13838.7422 -2059.988]", + "[11353.4678 -14191.1563 -2059.9368]", + "[10920.418 -14503.6787 -2059.3811]", + "[10462.626 -14776.21 -2059.198]", + "[9985.1396 -15009.2334 -2058.3494]", + "[9493.0293 -15205.5166 -2058.1755]", + "[8989.8574 -15366.6426 -2057.2288]", + "[8479.1904 -15496.7988 -2056.5256]", + "[7963.1582 -15597.2227 -2055.5547]", + "[7444.1431 -15673.0264 -2054.3953]", + "[6923.7148 -15724.8506 -2053.5117]", + "[6403.2979 -15756.4248 -2052.7217]", + "[5883.4888 -15768.5635 -2051.5664]", + "[5364.8672 -15765.3174 -2051.3557]", + "[4847.8242 -15765.0537 -2051.4412]", + "[4332.0303 -15763.126 -2051.6804]", + "[3816.8621 -15764.293 -2051.4812]", + "[3302.1826 -15763.0117 -2051.5771]", + "[2787.8662 -15764.7266 -2051.4817]", + "[2273.8938 -15763.2207 -2051.6687]", + "[1760.3279 -15764.7383 -2051.4932]", + "[1248.4703 -15764.0947 -2037.6825]", + "[720.8815 -15765.0498 -1983.9097]", + "[202.5402 -15764.2422 -1923.7802]", + "[-320.392 -15763.3828 -1861.4287]", + "[-836.7772 -15764.5 -1798.7573]", + "[-1359.7446 -15763.8203 -1735.6649]", + "[-1879.3021 -15764.2656 -1674.1608]", + "[-2393.3638 -15765.0547 -1616.2874]", + "[-2907.249 -15764.6543 -1565.4934]", + "[-3424.6028 -15765.0322 -1532.6749]", + "[-3954.627 -15765.0664 -1535.9463]", + "[-4479.3208 -15763.8486 -1540.1925]", + "[-4993.5933 -15764.7842 -1539.569]", + "[-5527.043 -15765.0059 -1539.4417]", + "[-6049.5376 -15764.0283 -1539.4907]", + "[-6572.3848 -15763.9746 -1539.4757]", + "[-7094.8716 -15764.04 -1539.6377]", + "[-7616.9658 -15763.54 -1539.5684]", + "[-8138.7437 -15765.0928 -1539.488]", + "[-8660.1152 -15764.0137 -1539.5334]", + "[-9181.1514 -15764.25 -1539.4841]", + "[-9701.7773 -15764.084 -1539.5018]", + "[-10222.0928 -15764.1777 -1539.4951]", + "[-10742.0205 -15765.1719 -1539.6287]", + "[-11261.624 -15764.3604 -1539.5695]", + "[-11780.8174 -15764.5303 -1539.2111]", + "[-12297.873 -15719.9102 -1539.6736]", + "[-12804.2188 -15614.4268 -1539.9572]", + "[-13301.8682 -15423.6611 -1539.761]", + "[-13668.4131 -15202.5742 -1540.7122]", + "[-13945.8896 -14960.499 -1540.1716]", + "[-14216.8535 -14621.375 -1540.5527]", + "[-14387.2363 -14308.04 -1539.9803]", + "[-14562.3662 -13809.543 -1539.5547]", + "[-14660.1836 -13298.4258 -1539.6603]", + "[-14701.7314 -12787.252 -1539.1613]", + "[-14698.5381 -12261.2568 -1539.657]", + "[-14694.4424 -11739.9941 -1539.4768]", + "[-14691.7764 -11220.917 -1539.4934]", + "[-14692.8955 -10704.0439 -1539.4929]", + "[-14691.9238 -10190.7295 -1539.4984]", + "[-14692.6094 -9677.9141 -1539.3142]", + "[-14691.9834 -9164.2119 -1539.4742]", + "[-14692.8154 -8646.9043 -1539.5006]", + "[-14692.0811 -8127.1528 -1523.0009]", + "[-14692.2227 -7613.5015 -1470.0612]", + "[-14691.7969 -7090.0347 -1408.855]", + "[-14692.377 -6581.4399 -1348.5109]", + "[-14691.917 -6057.8125 -1284.8386]", + "[-14693.334 -5545.5679 -1223.1958]", + "[-14692.0498 -5020.9888 -1161.2251]", + "[-14692.2744 -4505.9399 -1103.4774]", + "[-14692.5166 -3984.8115 -1052.3633]", + "[-14692.3887 -3455.9749 -1019.5388]", + "[-14692.9014 -2921.6001 -1024.5343]", + "[-14692.3281 -2387.1333 -1028.4174]", + "[-14691.8965 -1855.8595 -1027.5542]", + "[-14693.2139 -1340.9163 -1027.6008]", + "[-14692.1826 -825.4623 -1027.5062]", + "[-14692.3369 -310.3929 -1027.5742]", + "[-14692.2266 204.1924 -1027.4983]", + "[-14692.5508 717.7484 -1027.5966]", + "[-14691.5664 1248.7915 -1027.5059]", + "[-14691.1201 1764.1364 -1027.6317]", + "[-14693.0176 2276.8999 -1027.5997]", + "[-14691.2705 2801.8013 -1027.3129]", + "[-14693.2617 3317.6001 -1027.5295]", + "[-14692.3418 3845.0796 -1027.4874]", + "[-14691.0635 4365.8091 -1027.5856]", + "[-14691.3652 4882.8232 -1027.584]", + "[-14692.9072 5396.5669 -1027.2826]", + "[-14692.5723 5919.022 -1027.3376]", + "[-14691.25 6434.7075 -1027.5765]", + "[-14691.5635 6959.0918 -1027.609]", + "[-14692.6729 7478.498 -1027.61]", + "[-14691.7998 7995.584 -1027.6538]", + "[-14692.042 8511.3301 -1027.5927]", + "[-14691.6494 9027.2842 -1027.5691]", + "[-14691.4531 9540.666 -1027.4664]", + "[-14691.71 10059.8613 -1027.5366]", + "[-14690.8301 10573.7588 -1027.7882]", + "[-14660.3975 11088.5137 -1027.8508]", + "[-14583.8008 11598.2773 -1027.9147]", + "[-14452.2148 12109.4531 -1027.9238]", + "[-14261.3779 12593.2676 -1027.8724]", + "[-13996.3086 13050.5674 -1027.8806]", + "[-13665.8701 13447.9668 -1027.5553]", + "[-13276.7793 13795.4834 -1027.6351]", + "[-12868.0205 14117.7021 -1027.6775]", + "[-12434.3906 14395.333 -1027.989]", + "[-11958.377 14630.8711 -1027.6434]", + "[-11464.8516 14794.9277 -1027.8737]", + "[-10942.1777 14876.7354 -1027.5834]", + "[-10411.4404 14872.9697 -1027.8843]", + "[-9886.0947 14863.2402 -1027.7374]", + "[-9363.2363 14862.7852 -1027.4086]", + "[-8844.9434 14913.0244 -1027.3933]", + "[-8323.6094 15026.8047 -1027.4197]", + "[-7819.2534 15129.8711 -1027.6168]", + "[-7302.708 15235.8838 -1027.5265]", + "[-6790.8345 15336.4443 -1027.5963]", + "[-6280.9727 15437.3604 -1027.5831]", + "[-5766.0645 15505.4297 -1027.5156]", + "[-5246.397 15506.2139 -1027.3213]", + "[-4729.0737 15496.3359 -1027.1924]", + "[-4217.374 15498.4434 -994.4107]", + "[-3693.3257 15496.3604 -935.4327]", + "[-3182.4292 15497.1641 -875.5008]", + "[-2672.8062 15497.2949 -814.6587]", + "[-2154.7771 15497.8105 -751.3789]", + "[-1639.3677 15496.8418 -689.723]", + "[-1129.6763 15496.75 -630.0273]", + "[-605.3943 15498.0225 -573.2222]", + "[-92.472 15497.5596 -526.5961]", + "[428.8381 15498.1025 -506.1478]", + "[940.8782 15496.3086 -514.0714]", + "[1457.7335 15497.4121 -514.6779]", + "[1972.3112 15496.8164 -477.7488]", + "[2491.6775 15496.585 -418.7272]", + "[3005.0461 15497.958 -358.3139]", + "[3523.8958 15496.748 -296.0573]", + "[4041.5693 15497.5547 -233.01]", + "[4556.6152 15497.7227 -171.2765]", + "[5067.606 15497.2578 -111.8066]", + "[5600.7197 15497.1172 -54.8206]", + "[6133.2861 15497.7588 -8.5876]", + "[6646.522 15497.6289 7.5499]", + "[7167.418 15480.9727 -3.6462]", + "[7698.0225 15445.3682 -3.2028]", + "[8218.7676 15385.8252 -3.6196]", + "[8727.0352 15304.9756 -3.2399]", + "[9246.0371 15195.9473 -3.4902]", + "[9743.8857 15062.043 -2.9989]", + "[10243.752 14893.7266 -3.5224]", + "[10741.2979 14688.2275 -3.5703]", + "[11203.5225 14453.8701 -3.6352]", + "[11652.9053 14179.9395 -3.8149]", + "[12081.0723 13865.4502 -3.7015]", + "[12478.6084 13513.1689 -3.668]", + "[12841.1572 13127.4229 -3.2157]", + "[13164.9668 12714.0449 -3.4121]", + "[13446.5693 12280.0166 -3.605]", + "[13700.3535 11808.2012 -3.7069]", + "[13911.2383 11332.5791 -3.3635]", + "[14091.917 10833.9492 -3.0849]", + "[14240.3652 10320.042 -3.646]", + "[14359.3662 9798.2061 -3.3928]", + "[14448.9736 9281.1621 -3.4477]", + "[14513.7471 8761.3984 -3.3703]", + "[14556.8115 8240.7168 -3.6237]", + "[14579.3545 7719.6777 -3.3488]", + "[14585.8096 7199.0522 -3.317]", + "[14581.1396 6679.3267 -3.4463]", + "[14581.7275 6161.019 -3.6104]", + "[14580.1543 5643.2559 -3.3932]", + "[14582.3213 5126.1904 -3.0313]", + "[14581.8408 4609.7251 -3.0534]", + "[14581.9697 4094.1008 -3.5658]", + "[14582.5029 3579.4165 -3.461]", + "[14581.3721 3065.4329 -3.5059]", + "[14581.7656 2551.9075 -3.2411]", + "[14580.9912 2039.187 -3.5241]", + "[14580.8398 1526.9333 -3.5467]", + "[14580.3906 990.8029 -3.6226]", + "[14581.71 455.2022 -3.5036]", + "[14581.5254 -79.9643 -3.5144]", + "[14580.0732 -614.7584 -3.4859]", + "[14580.6523 -1149.1682 -3.5]", + "[14581.1318 -1684.4293 -3.3504]", + "[14580.4629 -2197.3889 -3.6001]", + "[14580.5254 -2713 -3.4771]", + "[14581.4785 -3233.4817 -3.6092]", + "[14581.4492 -3759.1116 -3.4601]", + "[14581.6611 -4290.5918 -3.5011]", + "[14581.4414 -4802.6045 -3.4883]", + "[14581.5664 -5320.1113 -3.477]", + "[14580.5166 -5843.106 -3.4115]", + "[14580.7949 -6370.8418 -3.2961]", + "[14577.46 -6901.0791 -3.2891]", + "[14551.4736 -7430.0625 -2.6674]", + "[14504.2793 -7956.083 -3.2178]", + "[14434.3145 -8478.3623 -3.4039]", + "[14340.0557 -8995.6865 -3.278]", + "[14218.9092 -9506.2754 -3.3847]", + "[14067.4229 -10007.7451 -3.4681]", + "[13885.1436 -10497.9434 -3.2882]", + "[13668.873 -10972.9678 -3.2113]", + "[13417.5557 -11428.8887 -3.7942]", + "[13130.6865 -11861.7246 -3.3098]", + "[12807.8408 -12266.9473 -3.197]", + "[12451.2803 -12641.2539 -3.2208]", + "[12062.9404 -12980.9658 -3.5272]", + "[11647.5566 -13285.0938 -3.2954]", + "[11209.3242 -13553.1289 -3.5527]", + "[10752.6533 -13785.6553 -3.1037]", + "[10257.2412 -13992.4727 -3.2123]", + "[9749.5645 -14163.4131 -3.2156]", + "[9233.3877 -14302.4082 -3.2487]", + "[8711.252 -14410.5684 -2.5513]", + "[8185.5469 -14492.3574 -3.3535]", + "[7657.562 -14550.5361 -3.2728]", + "[7128.2168 -14586.1436 -3.0665]", + "[6598.9458 -14603.2852 -3.0868]", + "[6070.3066 -14603.291 -2.6036]", + "[5542.8174 -14600.1875 -3.1936]", + "[5016.4243 -14600.876 -3.7141]", + "[4490.645 -14600.9033 -3.3794]", + "[3965.1772 -14600.626 -3.5307]", + "[3440.1328 -14600.5146 -3.3783]", + "[2915.5083 -14599.5479 -3.6207]", + "[2391.2449 -14600.7637 -3.515]", + "[1867.4612 -14599.8652 -3.4108]", + "[1343.9989 -14600.7344 -3.4486]", + "[821.196 -14599.1299 -2.9856]", + "[298.7614 -14600.4785 -3.421]", + "[-223.3072 -14599.3594 -3.5088]", + "[-744.8104 -14597.4131 -3.3817]", + "[-1265.2759 -14568.0234 -3.17]", + "[-1780.4272 -14489.2832 -3.1039]", + "[-2288.1746 -14376.3047 -3.3691]", + "[-2796.458 -14274.4482 -2.9219]", + "[-3311.0869 -14217.9443 -3.5317]", + "[-3827.5925 -14206.5898 -3.2981]", + "[-4342.9229 -14215.2822 -3.7701]", + "[-4856.8765 -14215.1406 -3.6141]", + "[-5370.0215 -14216.9736 -3.4832]", + "[-5882.7002 -14215.5684 -3.5611]", + "[-6394.9263 -14216.9385 -3.5887]", + "[-6931.1377 -14215.4063 -3.4582]", + "[-7466.7974 -14209.9814 -4.2498]", + "[-8001.3721 -14180.6279 -5.3441]", + "[-8533.6221 -14129.3135 -6.3718]", + "[-9061.9258 -14053.2188 -7.5368]", + "[-9585.1172 -13951.7363 -8.5728]", + "[-10101.1387 -13821.8418 -9.3579]", + "[-10607.4707 -13659.8467 -9.9853]", + "[-11100.8174 -13464.1045 -10.3919]", + "[-11577.4414 -13231.7568 -11.0375]", + "[-12034.0195 -12960.6885 -11.5138]", + "[-12466.1504 -12649.4951 -11.8301]", + "[-12869.793 -12297.6846 -11.8836]", + "[-13225.8291 -11924.9131 -11.93]", + "[-13548.8125 -11516.7734 -11.5099]", + "[-13837.5508 -11077.958 -11.4242]", + "[-14088.96 -10613.085 -11.0595]", + "[-14303.0195 -10130.7539 -10.3583]", + "[-14481.7949 -9635.7432 -9.426]", + "[-14627.5811 -9131.5713 -8.4641]", + "[-14742.917 -8620.8682 -8.2603]", + "[-14832.3682 -8106.3521 -6.8125]", + "[-14896.001 -7589.4316 -6.1674]", + "[-14937.9365 -7072.4639 -5.2875]", + "[-14961.04 -6538.5083 -4.2928]", + "[-14965.0615 -6021.564 -3.4412]", + "[-14961.0137 -5502.1523 -36.265]", + "[-14960.9668 -4978.0522 -94.7174]", + "[-14962.292 -4460.6177 -155.0038]", + "[-14960.7295 -3937.741 -217.846]", + "[-14961.0039 -3424.1909 -280.1449]", + "[-14930.5352 -2898.1475 -360.5127]", + "[-14847.3389 -2394.5684 -423.0443]", + "[-14705.7939 -1889.3613 -468.4854]", + "[-14511.9844 -1401.1169 -497.2635]", + "[-14250.5576 -977.1688 -515.8066]", + "[-13991.5977 -686.9092 -525.5928]", + "[-13583.5088 -356.8764 -531.2469]", + "[-13129.7207 -98.0689 -529.8318]", + "[-12700.2275 54.8698 -527.5127]", + "[-12184.4033 164.5832 -524.311]", + "[-11664.3379 221.9501 -520.3693]", + "[-11147.1113 239.3408 -515.9515]", + "[-10634.9082 226.4994 -514.8359]", + "[-10111.0254 190.473 -515.53]", + "[-9594.0596 126.7582 -515.527]", + "[-9084.7764 34.0906 -515.1231]", + "[-8584.2168 -89.8374 -515.7692]", + "[-8094.1729 -244.7293 -515.5902]", + "[-7616.0239 -427.9662 -515.1133]", + "[-7115.2852 -590.5421 -515.3481]", + "[-6605.2183 -710.811 -515.4143]", + "[-6090.7822 -799.7899 -515.371]", + "[-5574.0654 -860.3715 -515.3937]", + "[-5056.7388 -892.5645 -515.3226]", + "[-4540.2153 -901.6622 -515.3098]", + "[-4025.6855 -897.5385 -515.6572]", + "[-3506.7234 -897.5746 -515.7065]", + "[-2979.9934 -896.4994 -515.4364]", + "[-2455.592 -896.7462 -515.5614]", + "[-1940.4786 -896.7661 -515.6285]", + "[-1423.9727 -896.385 -515.4702]", + "[-901.9677 -896.8931 -515.6028]", + "[-389.565 -897.6188 -515.3923]", + "[125.8448 -896.9142 -515.5233]", + "[639.2083 -897.2563 -515.6119]", + "[1154.3578 -897.6002 -515.5309]" + ], + + [ + "[4433.5508 -8829.1982 903.061]", + "[4535.9644 -8829.0225 903.0908]", + "[5051.1899 -8829.0537 898.7004]", + "[5567.1689 -8829.3594 862.8186]", + "[6080.8306 -8828.4707 803.5988]", + "[6587.7734 -8829.5127 731.59]", + "[7100.0615 -8829.4121 663.78]", + "[7608.2559 -8827.8652 596.9561]", + "[8121.8804 -8827.6787 537.8442]", + "[8644.0205 -8829.0645 507.6323]", + "[9158.4512 -8827.7939 503.9636]", + "[9679.6953 -8828.9834 508.5474]", + "[10191.96 -8828.2148 508.1339]", + "[10705.7324 -8828.4678 508.1309]", + "[11222.1182 -8828.3389 508.2233]", + "[11735.4482 -8828.9287 508.2755]", + "[12255.3057 -8840.875 508.7248]", + "[12765.3057 -8908.8271 508.1827]", + "[13271.2266 -9048.4189 507.921]", + "[13742.7432 -9269.459 507.8761]", + "[14016.3789 -9462.4404 507.2997]", + "[14354.9512 -9804.6084 507.6438]", + "[14515.2871 -10037.6338 507.7845]", + "[14738.2119 -10513.1826 508.0141]", + "[14872.9893 -11008.0107 507.9928]", + "[14944.9658 -11519.5615 508.9769]", + "[14964.3213 -12041.7324 508.7238]", + "[14911.1045 -12559.1885 508.6237]", + "[14801.249 -13071.6719 508.1177]", + "[14620.2334 -13556.1553 507.7058]", + "[14396.1416 -13935.3848 507.5129]", + "[14152.9844 -14218.8428 507.6912]", + "[13838.9834 -14475.8955 507.9232]", + "[13521.4658 -14653.8223 507.9634]", + "[13029.6436 -14832.791 507.8716]", + "[12514.9326 -14936.0371 508.7883]", + "[11995.8516 -14980.1621 508.5187]", + "[11479.8477 -14978.0234 497.5822]", + "[10966.4697 -14972.874 447.6927]", + "[10445.5859 -14972.1113 388.3413]", + "[9929.7148 -14972.0098 327.2928]", + "[9404.251 -14972.6387 263.5332]", + "[8880.6035 -14972.4307 200.4123]", + "[8357.9658 -14972.0547 138.0138]", + "[7836.2402 -14972.7822 78.8206]", + "[7316.5796 -14971.3457 26.366]", + "[6803.9038 -14972.4102 -9.4923]", + "[6279.8418 -14972.0947 -7.1489]", + "[5765.5566 -14972.3027 -3.5449]", + "[5244.5767 -14972.2539 -3.2847]", + "[4728.6982 -14972.7539 -3.3639]", + "[4213.2007 -14972.3203 -3.3375]", + "[3694.8564 -14973.5313 -3.3512]", + "[3177.7754 -14966.7227 -3.3377]", + "[2657.2842 -14934.0625 -3.5268]", + "[2149.0425 -14858.4365 -3.5635]", + "[1650.0074 -14742.6768 -3.5689]", + "[1151.3955 -14624.6133 -3.4557]", + "[1062.8435 -14610.9668 -3.4254]" + ], + + [ + "[4419.5332 -8566.2861 903.7542]", + "[4520.1782 -8566.9336 903.738]", + "[5039.4282 -8565.1602 898.7292]", + "[5553.5435 -8565.6445 864.2849]", + "[6069.3101 -8565.2012 805.7865]", + "[6586.6313 -8565.4326 731.9113]", + "[7105.4639 -8566.0391 663.1936]", + "[7626.7979 -8564.957 594.5418]", + "[8148.4932 -8565.3223 535.5092]", + "[8678.5459 -8565.4688 505.6209]", + "[9206.0361 -8565.7783 504.4523]", + "[9732.0234 -8564.8838 508.5067]", + "[10247.2393 -8564.7695 508.1047]", + "[10770.9932 -8565.0205 508.3919]", + "[11294.0938 -8565.8135 508.2293]", + "[11816.4648 -8564.9512 508.3136]", + "[12336.1846 -8548.3398 508.8225]", + "[12844.3965 -8470.4561 508.7548]", + "[13335.4766 -8323.582 507.9113]", + "[13793.3691 -8093.6499 507.6939]", + "[14099.7334 -7864.2476 507.6328]", + "[14358.1426 -7587.1035 507.7946]", + "[14592.708 -7225.5981 507.8538]", + "[14751.9971 -6848.0796 508.2606]", + "[14883.9053 -6339.3462 508.4333]", + "[14948.9346 -5827.6182 508.5349]", + "[14966.0459 -5305.4785 506.8571]", + "[14957.0723 -4792.1221 470.3909]", + "[14955.1543 -4275.9429 413.7313]", + "[14954.1279 -3755.5574 352.4844]", + "[14955.1641 -3231.0537 289.409]", + "[14954.6689 -2714.9209 226.9006]", + "[14955.5605 -2191.5281 164.1976]", + "[14954.4004 -1680.7346 104.4682]", + "[14953.6807 -1167.7332 49.2601]", + "[14954.6064 -656.3705 4.0501]", + "[14954.6396 -136.6223 -12.027]", + "[14954.084 386.7687 -3.9339]", + "[14955.6221 907.4276 -3.3124]", + "[14954.874 1425.7241 -3.5303]", + "[14955.5527 1941.4508 -3.4211]", + "[14954.6367 2454.3779 -3.1283]", + "[14954.3477 2976.5354 -3.214]", + "[14935.8359 3495.8933 -3.2632]", + "[14880.2197 4013.2654 -3.5467]", + "[14780.8379 4517.5405 -3.6319]", + "[14654.6553 5014.0288 -3.662]", + "[14644.9492 5051.9614 -3.4671]" + ], + + [ + "[-4331.9634 112.6311 -515.4677]", + "[-4434.9927 112.6409 -515.3992]", + "[-4954.1709 115.6155 -515.2535]", + "[-5470.9785 144.5582 -515.2137]", + "[-5981.0508 221.6873 -515.2707]", + "[-6487.1035 331.7736 -515.5112]", + "[-7001.8745 435.9073 -515.1293]", + "[-7522.6367 493.0797 -515.5534]", + "[-8051.3438 505.3572 -515.4413]", + "[-8579.4189 498.7757 -515.3526]", + "[-9102.1094 496.1642 -515.5621]", + "[-9617.1953 497.1469 -515.611]", + "[-10143.8516 497.097 -515.5172]", + "[-10659.2188 497.225 -515.4462]", + "[-11184.373 497.237 -515.4569]", + "[-11718.9688 482.795 -515.0984]", + "[-12235.8037 423.2933 -514.9519]", + "[-12752.1904 310.5928 -515.6537]", + "[-13257.0039 130.7309 -515.5885]", + "[-13709.0215 -119.174 -515.8898]", + "[-14113.0332 -440.7677 -511.8363]", + "[-14461.4873 -818.4269 -499.2914]", + "[-14749.2695 -1268.8259 -477.1826]", + "[-14934.0088 -1713.5588 -450.3595]", + "[-15073.3467 -2214.1387 -412.3766]", + "[-15170.8496 -2733.8247 -361.9774]", + "[-15222.5859 -3241.1553 -304.4465]", + "[-15233.3252 -3750.9292 -240.4721]", + "[-15226.9238 -4274.9731 -177.3541]", + "[-15224.998 -4783.7427 -118.0268]", + "[-15226.1992 -5307.2075 -61.0402]", + "[-15227.4756 -5827.0405 -14.2615]", + "[-15227.9082 -6347.6738 5.6729]", + "[-15214.3994 -6862.7183 -0.8451]", + "[-15181.7334 -7374.3198 -1.8806]", + "[-15128.373 -7885.6802 -0.4554]", + "[-15052.6621 -8398.5518 0.7596]", + "[-14951.8691 -8912.7207 1.205]", + "[-14822.7158 -9424.0508 1.8276]", + "[-14663.3223 -9925.4873 2.5166]", + "[-14473.1484 -10410.5068 3.041]", + "[-14252.9795 -10873.5732 3.4853]", + "[-13992.5938 -11328.6465 3.9355]", + "[-13702.8604 -11751.4902 4.2894]", + "[-13373.0361 -12155.7998 4.3352]", + "[-13002.6738 -12535.8945 4.5859]", + "[-12611.7813 -12872.0293 4.2]", + "[-12186.6328 -13176.9209 3.8989]", + "[-11732.2559 -13447.8428 3.7013]", + "[-11255.5869 -13684.4824 3.1]", + "[-10763.4131 -13884.4229 2.8225]", + "[-10259.8955 -14051.1582 2.0878]", + "[-9747.6875 -14186.5967 1.2392]", + "[-9229.542 -14293.8965 0.612]", + "[-8706.7891 -14374.0889 -0.2831]", + "[-8181.355 -14431.0371 -1.3973]", + "[-7654.4727 -14468.0508 -2.2505]", + "[-7126.6401 -14483.833 -2.9248]", + "[-6598.583 -14485.0801 -3.2667]", + "[-6071.3994 -14506.7305 -3.1998]", + "[-5546.9946 -14560.7832 -3.3227]", + "[-5027.4077 -14645.5176 -3.3462]", + "[-4514.3506 -14759.9385 -3.5052]", + "[-4010.6885 -14907.9043 -3.681]", + "[-3519.5256 -15089.7656 -3.6305]", + "[-3027.7495 -15264.7773 -3.5122]", + "[-2523.5215 -15395.4238 -3.6827]", + "[-2013.2515 -15491.1348 -3.2028]", + "[-1500.5615 -15559.6816 -3.5338]", + "[-986.6931 -15599.335 -3.031]", + "[-472.9889 -15614.7305 -2.8577]", + "[39.9768 -15612.208 -3.5662]", + "[575.1196 -15609.6123 -3.4266]", + "[1109.601 -15609.3887 -3.4236]", + "[1643.3408 -15608.5527 -3.2202]", + "[2176.1973 -15609.4932 -3.4328]", + "[2708.7031 -15608.2529 -3.5693]", + "[3240.4282 -15610.3906 -3.5896]", + "[3771.8191 -15609.5322 -3.5752]", + "[4302.8882 -15610.4795 -3.4563]", + "[4833.4175 -15610.9355 -3.5552]", + "[5363.5962 -15610.457 -3.2083]", + "[5893.5942 -15609.5264 -3.4837]", + "[6423.2109 -15609.5322 -3.472]", + "[6952.2251 -15609.9971 -3.3078]", + "[7480.7681 -15610.7354 -3.5248]", + "[8008.519 -15601.8262 -2.9788]", + "[8534.9248 -15571.1357 -3.2191]", + "[9058.8564 -15519.0332 -3.0294]", + "[9579.3682 -15444.3145 -3.4136]", + "[10094.7754 -15344.3174 -3.1023]", + "[10603.6699 -15217.1162 -2.8676]", + "[11103.5801 -15059.7051 -3.1709]", + "[11591.7354 -14870.1602 -3.1282]", + "[12063.5811 -14644.5117 -3.3334]", + "[12516.6045 -14384.3135 -3.1814]", + "[12945.6924 -14087.4463 -3.4082]", + "[13346.0186 -13753.8848 -3.2368]", + "[13715.373 -13387.5918 -3.2673]", + "[14049.6836 -12990.0332 -3.1119]", + "[14347.1689 -12565.334 -3.1674]", + "[14607.6064 -12118.0703 -3.2099]", + "[14831.6543 -11652.6631 -3.5083]", + "[15022.5879 -11173.9189 -3.0244]", + "[15180.2617 -10684.3516 -3.0715]", + "[15308.9854 -10187.2402 -3.1]", + "[15410.6826 -9684.7998 -3.1212]", + "[15490.3271 -9156.6191 -3.0552]", + "[15545.4521 -8625.9834 -2.9326]", + "[15579.4736 -8094.3315 -3.2964]", + "[15594.4609 -7562.3066 -3.2047]", + "[15592.3115 -7030.5854 -3.6046]", + "[15591.2598 -6499.4463 -3.3287]", + "[15590.0918 -5968.6699 -3.5394]", + "[15591.5889 -5438.2261 -3.4521]", + "[15591.4697 -4908.0366 -3.5123]", + "[15591.1084 -4378.124 -3.5325]", + "[15590.2568 -3848.4495 -3.47]", + "[15590.8135 -3318.9766 -3.4685]", + "[15590.5928 -2789.7014 -3.3789]", + "[15590.3311 -2260.6516 -3.4266]", + "[15590.7549 -1731.7841 -3.5183]", + "[15590.2432 -1203.1382 -3.4508]", + "[15590.5938 -674.6898 -3.4705]", + "[15590.2793 -146.4555 -3.4582]", + "[15590.0273 381.559 -3.4612]", + "[15590.1768 909.3654 -3.4616]", + "[15590.209 1436.9823 -3.4742]", + "[15590.4463 1964.3604 -3.528]", + "[15590.6143 2491.5615 -3.5232]", + "[15591.085 3018.5171 -3.3393]", + "[15589.7549 3545.2849 -3.4714]", + "[15590.6543 4071.6592 -3.4953]", + "[15589.8232 4597.9155 -3.4993]", + "[15591.0889 5123.7896 -2.9667]", + "[15590.7051 5649.4619 -3.2702]", + "[15589.9805 6174.6987 -3.6832]", + "[15590.9492 6699.3169 -3.3488]", + "[15590.1816 7223.5298 -3.5214]", + "[15590.7734 7747.4673 -3.5106]", + "[15587.6172 8270.96 -3.3058]", + "[15564.7119 8793.5986 -3.4133]", + "[15520.8398 9314.084 -3.6411]", + "[15454.4834 9831.8379 -3.4534]", + "[15364.2783 10345.2344 -3.4783]", + "[15248.4141 10852.7568 -3.3909]", + "[15103.1172 11352.2021 -3.4059]", + "[14927.1533 11841.2451 -3.3344]", + "[14718.6533 12316.7227 -3.3072]", + "[14473.998 12773.9717 -3.5558]", + "[14193.3086 13209.4102 -3.605]", + "[13877.918 13619.4785 -3.4426]", + "[13527.166 13998.959 -3.4803]", + "[13145.5078 14345.9385 -3.7068]", + "[12735.5098 14657.3721 -3.4685]", + "[12300.9023 14931.5879 -3.3743]", + "[11847.0713 15170.5088 -3.5739]", + "[11377.3184 15374.6973 -3.38]", + "[10893.2813 15546.8135 -3.4817]", + "[10397.7041 15688.4805 -3.4826]", + "[9893.4268 15803.6221 -3.4827]", + "[9381.8125 15892.8418 -3.2696]", + "[8864.3096 15957.5078 -3.3482]", + "[8342.4365 16000.917 -3.2804]", + "[7818.3804 16024.3984 -3.4732]", + "[7294.2769 16030.7842 -3.6374]", + "[6770.7051 16027.7383 -3.667]", + "[6247.564 16026.1387 -3.5763]", + "[5724.2349 16027.2256 -37.3846]", + "[5208.9473 16027.1641 -94.4165]", + "[4687.0884 16026.9414 -155.4033]", + "[4176.0488 16026.8721 -216.6789]", + "[3665.6152 16026.6689 -278.1207]", + "[3148.2007 16025.8564 -341.0416]", + "[2619.7759 16026.3916 -402.8131]", + "[2101.5127 16027.6162 -459.1377]", + "[1574.4844 16025.8994 -506.7188]", + "[1041.9174 16026.2832 -524.5082]", + "[511.4315 16026.8174 -516.0446]", + "[-14.0621 16027.2764 -518.8825]", + "[-528.5341 16026.5244 -560.6838]", + "[-1049.8386 16026.6885 -620.3172]", + "[-1578.3682 16026.6533 -681.9394]", + "[-2100.8455 16027.4512 -744.9731]", + "[-2626.9341 16025.4424 -808.8655]", + "[-3143.1008 16027.5293 -870.4127]", + "[-3671.9084 16026.5547 -931.3264]", + "[-4190.9976 16026.3184 -985.9314]", + "[-4718.6616 16026.3711 -1028.2836]", + "[-5250.395 16026.9824 -1032.9028]", + "[-5779.5264 16027.6104 -1027.0803]", + "[-6301.666 16025.7129 -1026.9064]", + "[-6823.1528 16026.21 -1027.6899]", + "[-7351.1587 16026.0586 -1027.4867]", + "[-7880.9673 16026.9375 -1027.54]", + "[-8410.457 16026.0977 -1027.6113]", + "[-8939.6328 16027.0088 -1027.4641]", + "[-9468.5635 16026.1465 -1027.4666]", + "[-9997.29 16026.1523 -1027.4677]", + "[-10525.8096 16025.7832 -1027.6675]", + "[-11053.9961 16025.5547 -1027.3223]", + "[-11580.7031 15996.1543 -1027.4882]", + "[-11924.6631 15914.7334 -1027.5527]", + "[-12415.6357 15722.79 -1027.6263]", + "[-12874.3477 15468.1777 -1027.535]", + "[-13298.9844 15167.1797 -1027.8938]", + "[-13695.7813 14834.9004 -1027.6445]", + "[-14065.8691 14476.75 -1027.4169]", + "[-14422.8018 14108.9502 -1028.0176]", + "[-14799.4766 13732.3838 -1027.8602]", + "[-15126.1904 13311.9658 -1027.4888]", + "[-15324.207 12934.3867 -1027.7448]", + "[-15501.0938 12433.7344 -1027.8553]", + "[-15617.4502 11920.0752 -1028.1566]", + "[-15683.3438 11399.8672 -1027.8181]", + "[-15708.7559 10878.8613 -1028.1326]", + "[-15703.6982 10362.7129 -1028.1516]", + "[-15702.3633 9842.3633 -1027.5408]", + "[-15701.2002 9319.5508 -1027.407]", + "[-15702.3672 8793.8848 -1027.6096]", + "[-15701.6729 8264.8984 -1027.5359]", + "[-15701.2822 7749.7808 -1027.502]", + "[-15702.6338 7229.5933 -1027.4817]", + "[-15702.9375 6703.6782 -1027.5776]", + "[-15703.123 6186.9043 -1027.5575]", + "[-15701.8838 5673.8276 -1027.5688]", + "[-15702.3408 5161.3291 -1027.498]", + "[-15702.4033 4632.8379 -1027.585]", + "[-15701.6758 4105.0146 -1027.5145]", + "[-15702.748 3577.7202 -1027.5352]", + "[-15701.1631 3051.2097 -1027.5343]", + "[-15701.9023 2525.4944 -1027.2914]", + "[-15701.1885 2000.8617 -1027.0836]", + "[-15701.3584 1477.2478 -1027.3076]", + "[-15700.6484 954.5223 -1027.4355]", + "[-15701.5898 432.7073 -1027.3671]", + "[-15701.249 -88.3837 -1027.5082]", + "[-15701.3535 -608.2618 -1027.3341]", + "[-15702.1836 -1127.4097 -1027.5266]", + "[-15701.7871 -1645.874 -1027.6433]", + "[-15702.1318 -2163.5417 -1027.4896]", + "[-15701.9229 -2680.3452 -1027.6095]", + "[-15702.0967 -3196.3586 -1027.458]", + "[-15701.7021 -3711.8311 -1030.6357]", + "[-15701.7715 -4229.9824 -1069.9772]", + "[-15701.8213 -4739.001 -1127.9364]", + "[-15701.29 -5263.96 -1189.6238]", + "[-15702.957 -5779.7563 -1251.371]", + "[-15700.918 -6291.5186 -1313.036]", + "[-15701.7021 -6820.7949 -1376.5814]", + "[-15701.3848 -7340.9087 -1437.2424]", + "[-15701.4746 -7858.9111 -1492.2109]", + "[-15701.9521 -8391.5654 -1537.2491]", + "[-15702.4375 -8910.1113 -1547.3929]", + "[-15701.9668 -9431.1943 -1539.245]", + "[-15701.9844 -9951.1914 -1538.9784]", + "[-15701.5771 -10485.4805 -1539.582]", + "[-15700.9609 -11005.2803 -1539.6089]", + "[-15702.8271 -11528.9248 -1539.5193]", + "[-15701.9541 -12054.4922 -1539.4978]", + "[-15701.5244 -12582.3779 -1539.4922]", + "[-15701.7646 -13113.4385 -1539.3467]", + "[-15657.1572 -13633.8877 -1539.5402]", + "[-15548.8223 -14144.3408 -1539.7451]", + "[-15363.4141 -14631.6611 -1539.9272]", + "[-15144.6582 -14996.0479 -1540.6217]", + "[-14878.5791 -15300.2373 -1540.4338]", + "[-14578.5703 -15540.8057 -1540.4128]", + "[-14243.3223 -15724.4668 -1540.228]", + "[-13744.6865 -15900.4902 -1539.7231]", + "[-13232.5586 -15997.3477 -1539.8352]", + "[-12719.4102 -16039.2041 -1539.0509]", + "[-12191.4766 -16036.3291 -1539.6569]", + "[-11668.6191 -16031.6768 -1539.3352]", + "[-11148.8848 -16029.585 -1539.5614]", + "[-10631.4619 -16030.2031 -1539.4851]", + "[-10115.7188 -16030.665 -1539.4739]", + "[-9601.0059 -16029.2285 -1539.5004]", + "[-9086.8994 -16030.0508 -1539.4324]", + "[-8573.2305 -16030.25 -1539.4685]", + "[-8059.9399 -16029.9785 -1539.459]", + "[-7547.0796 -16030.2344 -1539.4633]", + "[-7034.585 -16029.2432 -1539.5028]", + "[-6522.5234 -16029.7197 -1539.4705]", + "[-5993.2056 -16030.1982 -1539.507]", + "[-5464.3047 -16029.708 -1539.5433]", + "[-4935.8433 -16029.9072 -1539.4431]", + "[-4407.8027 -16030.6611 -1539.459]", + "[-3880.2122 -16030.4844 -1539.455]", + "[-3353.0408 -16030.3574 -1539.4653]", + "[-2824.1726 -16030.3262 -1567.0223]", + "[-2308.5352 -16030.0283 -1623.9985]", + "[-1799.8401 -16029.5146 -1683.1056]", + "[-1272.1545 -16029.4775 -1746.1176]", + "[-756.8495 -16029.457 -1808.5557]", + "[-240.1789 -16029.8174 -1870.7611]", + "[275.8727 -16029.0098 -1931.3824]", + "[788.3762 -16030.5957 -1987.9446]", + "[1316.1514 -16030.1055 -2037.2821]", + "[1832.0771 -16029.4219 -2060.79]", + "[2351.7246 -16030.7744 -2053.1338]", + "[2873.5518 -16029.7217 -2050.7102]", + "[3403.6245 -16029.5908 -2051.4253]", + "[3917.4314 -16028.6523 -2051.521]", + "[4434.019 -16030.2578 -2051.5391]", + "[4950.79 -16028.8545 -2051.4956]", + "[5467.2832 -16030.4131 -2051.5195]", + "[5983.5439 -16029.2305 -2050.8774]", + "[6499.166 -16017.9961 -2050.2397]", + "[7013.458 -15984.1006 -2049.1484]", + "[7525.4419 -15930.0547 -2048.4128]", + "[8034.002 -15854.9541 -2047.4297]", + "[8537.1602 -15755.1826 -2046.51]", + "[9033.7344 -15629.7363 -2045.9835]", + "[9544.5557 -15468.4961 -2045.5767]", + "[10042.1172 -15272.9023 -2045.1536]", + "[10523.5723 -15043.3613 -2044.1949]", + "[10984.2852 -14776.1953 -2044.1611]", + "[11420.5801 -14472.3936 -2043.7905]", + "[11828.2734 -14132.6611 -2043.4001]", + "[12203.2158 -13758.3926 -2043.6777]", + "[12542.8418 -13353.1445 -2043.6854]", + "[12845.1201 -12920.5078 -2044.1073]", + "[13110.915 -12465.7021 -2044.3951]", + "[13338.4678 -11991.5879 -2044.8486]", + "[13531.6123 -11503.4248 -2045.5227]", + "[13691.876 -11004.4424 -2045.7476]", + "[13822.6621 -10497.6328 -2046.5487]", + "[13926.2451 -9985.1543 -2047.2506]", + "[14003.9102 -9468.4287 -2048.197]", + "[14058.0322 -8949.0098 -2049.1079]", + "[14092.6484 -8428.1338 -2050.1895]", + "[14107.8828 -7906.4814 -2051.1189]", + "[14108.2676 -7384.791 -2051.6411]", + "[14105.8945 -6863.2275 -2051.5706]", + "[14105.2148 -6341.7437 -2051.5076]", + "[14105.709 -5820.355 -2051.5596]", + "[14105.6631 -5299.0776 -2051.5566]", + "[14105.3379 -4778.021 -2051.5134]", + "[14105.5283 -4257.1699 -2051.5811]", + "[14105.6006 -3736.5474 -2051.5361]", + "[14108.0498 -3216.1462 -2051.562]", + "[14136.709 -2696.5764 -2051.5476]", + "[14195.1094 -2179.8955 -2051.3872]", + "[14281.2598 -1667.5076 -2051.5376]", + "[14399.0684 -1162.3478 -2051.2817]", + "[14548.54 -666.1791 -2051.6094]", + "[14729.8467 -181.7172 -2051.2761]", + "[14900.0762 305.2047 -2051.7034]", + "[15026.6543 803.9821 -2051.5361]", + "[15118.9258 1308.743 -2051.5359]", + "[15187.5322 1838.6748 -2051.4365]", + "[15226.0664 2370.135 -2051.1709]", + "[15238.3867 2901.2681 -2051.4729]", + "[15234.668 3431.4106 -2051.5684]", + "[15234.4326 3960.5664 -2051.521]", + "[15232.7695 4488.915 -2051.4412]", + "[15233.4404 5016.5586 -2051.4629]", + "[15233.5283 5543.4741 -2051.4626]", + "[15234.3643 6070.0962 -2051.6125]", + "[15232.6152 6596.4595 -2051.4634]", + "[15234.0742 7122.6626 -2051.4031]", + "[15223.2559 7648.4595 -2050.325]", + "[15191.9883 8173.104 -2049.1272]", + "[15137.7725 8695.4629 -2048.4302]", + "[15062.3486 9214.4404 -2047.1984]", + "[14961.5176 9727.8018 -2046.5765]", + "[14834.0752 10234.2275 -2045.9762]", + "[14677.626 10730.9453 -2045.5033]", + "[14488.7363 11215.2305 -2044.9678]", + "[14267.8877 11684.5107 -2044.5024]", + "[14011.8945 12134.6465 -2043.9138]", + "[13722.0381 12562.5469 -2043.876]", + "[13396.7334 12963.0078 -2043.7546]", + "[13039.3125 13333.6475 -2043.5656]", + "[12651.3906 13670.8281 -2043.7571]", + "[12237.0518 13973.4492 -2044.1106]", + "[11799.8857 14240.1416 -2044.1371]", + "[11324.7256 14482.166 -2044.712]", + "[10833.6465 14687.2197 -2045.0796]", + "[10330.4395 14858.1953 -2045.698]", + "[9818.4697 14998.001 -2046.6344]", + "[9299.7002 15107.1729 -2047.3906]", + "[8776.7383 15190.7256 -2048.1289]", + "[8250.8906 15251.3867 -2049.1348]", + "[7723.3613 15290.3682 -2049.9307]", + "[7194.6577 15308.4102 -2050.7527]", + "[6665.7202 15311.2832 -2051.7219]", + "[6136.8438 15308.9102 -2051.6182]", + "[5607.957 15307.2256 -2051.4619]", + "[5079.0967 15308.748 -2051.4973]", + "[4550.3667 15308.4512 -2051.2703]", + "[4021.7451 15308.1064 -2051.5835]", + "[3493.4038 15308.8096 -2051.4705]", + "[2965.2373 15308.0117 -2051.5745]", + "[2436.7747 15308.3105 -2061.3647]", + "[1911.1666 15308.3105 -2110.8188]", + "[1395.9751 15307.5449 -2170.5493]", + "[866.5756 15308.6133 -2232.842]", + "[356.4433 15307.4414 -2294.5413]", + "[-163.1623 15307.1816 -2357.623]", + "[-674.376 15308.083 -2418.4478]", + "[-1200.0387 15307.3213 -2478.1819]", + "[-1715.3552 15307.748 -2530.6948]", + "[-2240.9968 15308.1465 -2568.8782]", + "[-2771.3562 15309.0381 -2567.3721]", + "[-3302.1992 15306.7822 -2562.9526]", + "[-3828.0044 15308.1719 -2563.4553]", + "[-4347.9902 15307.085 -2563.5308]", + "[-4871.7646 15307.6377 -2563.5869]", + "[-5396.5259 15307.9229 -2563.5347]", + "[-5921.1118 15307.8291 -2563.4741]", + "[-6445.4741 15307.877 -2563.5647]", + "[-6969.4531 15301.0537 -2562.2805]", + "[-7492.5176 15272.7998 -2561.5212]", + "[-8013.4312 15223.0859 -2560.373]", + "[-8531.1904 15151.8018 -2559.8328]", + "[-9044.0889 15056.3818 -2559.0659]", + "[-9550.1592 14933.8643 -2558.4421]", + "[-10047.4561 14783.4258 -2557.4033]", + "[-10533.4707 14601.7969 -2556.6985]", + "[-11005.0459 14387.627 -2556.51]", + "[-11458.4297 14139.5684 -2555.7739]", + "[-11890.0947 13856.6807 -2556.0044]", + "[-12295.666 13538.8926 -2555.8164]", + "[-12671.0352 13187.2344 -2555.5996]", + "[-13015.1084 12806.1455 -2555.7473]", + "[-13324.3779 12397.5352 -2556.0227]", + "[-13610.502 11946.4434 -2556.4648]", + "[-13857.4053 11474.0732 -2556.5728]", + "[-14067.6426 10985.7275 -2557.1892]", + "[-14243.3281 10485.0215 -2557.9429]", + "[-14385.4277 9982.4453 -2558.4971]", + "[-14498.0234 9472.5938 -2559.0696]", + "[-14586.2129 8958.5908 -2559.9519]", + "[-14650.2344 8441.4014 -2560.7866]", + "[-14693.1045 7922.0918 -2561.679]", + "[-14716.0674 7401.7319 -2562.7566]", + "[-14721.0195 6880.8882 -2563.8782]", + "[-14732.2764 6360.4048 -2563.4949]", + "[-14773.9854 5841.3257 -2563.5281]", + "[-14846.1084 5325.5889 -2563.189]", + "[-14946.2549 4814.9985 -2563.3491]", + "[-15078.2324 4311.98 -2563.2341]", + "[-15242.8867 3819.2842 -2562.9585]", + "[-15430.6387 3335.5164 -2563.6685]", + "[-15578.1094 2838.7991 -2563.6331]", + "[-15689.7666 2333.4841 -2563.3369]", + "[-15769.5771 1822.7087 -2563.1089]", + "[-15820.3818 1309.1019 -2563.2866]", + "[-15847.5625 794.4438 -2563.3748]", + "[-15849.8145 279.5083 -2563.4692]", + "[-15846.4326 -234.6329 -2563.3252]", + "[-15845.8691 -748.3314 -2563.3923]", + "[-15845.375 -1261.3252 -2563.2979]", + "[-15845.2188 -1773.6984 -2563.4946]", + "[-15845.3652 -2307.3347 -2563.5315]", + "[-15845.6367 -2840.6289 -2563.5588]", + "[-15845.708 -3373.2668 -2563.5266]", + "[-15846.5371 -3905.3313 -2563.4966]", + "[-15845.7305 -4437.0986 -2563.4531]", + "[-15846.0342 -4968.585 -2563.4558]", + "[-15844.7354 -5499.8936 -2563.4546]", + "[-15845.7969 -6030.9604 -2563.4658]", + "[-15846.3105 -6561.8506 -2563.4673]", + "[-15846.0313 -7092.498 -2563.4272]", + "[-15844.2021 -7622.9346 -2562.9399]", + "[-15826.5176 -8152.7842 -2561.8643]", + "[-15786.8418 -8681.165 -2560.8713]", + "[-15724.3691 -9206.8486 -2560.1331]", + "[-15638.5732 -9728.4902 -2559.2581]", + "[-15527.0166 -10244.0732 -2558.55]", + "[-15386.9248 -10751.7578 -2557.7705]", + "[-15215.5713 -11248.5127 -2557.293]", + "[-15011.9326 -11731.7813 -2556.6772]", + "[-14773.8203 -12197.8926 -2556.0925]", + "[-14500.6338 -12643.1543 -2556.0271]", + "[-14191.9395 -13063.3955 -2555.7854]", + "[-13848.7031 -13454.7051 -2555.6685]", + "[-13473.1729 -13813.6377 -2555.8262]", + "[-13067.584 -14136.8408 -2555.8611]", + "[-12637.6572 -14425.6553 -2556.0271]", + "[-12184.1729 -14679.0234 -2556.584]", + "[-11713.2354 -14897.1035 -2556.8572]", + "[-11227.4922 -15083.0391 -2557.23]", + "[-10728.2949 -15237.3174 -2558.2234]", + "[-10218.4121 -15363.0371 -2559.1602]", + "[-9698.6572 -15461.1973 -2559.6233]", + "[-9190.1006 -15534.1582 -2560.4375]", + "[-8671.0801 -15585.6211 -2561.3147]", + "[-8141.4092 -15616.7979 -2562.072]", + "[-7625.0054 -15628.8037 -2563.2888]", + "[-7100.2056 -15626.2705 -2563.7813]", + "[-6567.5371 -15625.1973 -2563.1587]", + "[-6053.6836 -15624.5566 -2563.5718]", + "[-5538.9917 -15624.7666 -2563.4412]", + "[-5024.6436 -15624.8604 -2563.511]", + "[-4510.4766 -15624.3701 -2563.4573]", + "[-3996.5454 -15623.5234 -2563.4924]", + "[-3482.8115 -15624.2207 -2563.3582]", + "[-2969.2715 -15624.7422 -2563.606]", + "[-2455.9675 -15623.7178 -2563.5068]", + "[-1942.8461 -15624.7559 -2563.5837]", + "[-1429.9409 -15625.0127 -2563.4624]", + "[-917.3017 -15630.4814 -2563.2737]", + "[-406.1337 -15669.9688 -2563.6853]", + "[99.6024 -15753.1133 -2563.3918]", + "[631.8951 -15811.377 -2563.6294]", + "[1166.8016 -15816.251 -2563.5034]", + "[1700.2424 -15807.4717 -2563.3215]", + "[2232.3899 -15808.876 -2563.4656]", + "[2763.9995 -15808.7275 -2563.2827]", + "[3294.7788 -15808.1504 -2563.6062]", + "[3825.1118 -15808.918 -2563.5884]", + "[4355.1001 -15807.9463 -2563.2891]", + "[4884.9019 -15808.7266 -2563.3914]", + "[5414.4355 -15807.5537 -2563.4302]", + "[5943.7275 -15808.4863 -2563.4343]", + "[6472.811 -15806.7148 -2563.5776]", + "[7001.6162 -15806.8643 -2563.3833]", + "[7529.9385 -15787.1533 -2563.167]", + "[8056.873 -15747.2031 -2563.3652]", + "[8581.4238 -15684.8408 -2563.4971]", + "[9102.0898 -15597.041 -2563.5151]", + "[9617.4336 -15484.4033 -2563.4639]", + "[10124.8486 -15341.0186 -2563.342]", + "[10621.9189 -15167.1357 -2563.7322]", + "[11104.9238 -14958.9268 -2563.5039]", + "[11570.3574 -14714.8701 -2563.5513]", + "[12013.5488 -14434.0615 -2563.4402]", + "[12430.2988 -14116.3223 -2563.5176]", + "[12817.4072 -13764.4385 -2563.4165]", + "[13169.791 -13378.5771 -2563.6572]", + "[13486.7432 -12964.4121 -2563.3577]", + "[13765.6279 -12524.7754 -2563.4141]", + "[14007.7471 -12064.8691 -2563.5991]", + "[14214.7217 -11589.4453 -2563.5234]", + "[14386.6914 -11101.1758 -2563.4993]", + "[14528.2949 -10604.4697 -2563.3899]", + "[14643.0645 -10101.6514 -2563.2473]", + "[14730.2441 -9594.0098 -2563.614]", + "[14794.8584 -9083.6963 -2563.3425]", + "[14837 -8571.6592 -2563.3652]", + "[14861.333 -8059.0625 -2563.4238]", + "[14868.0186 -7546.416 -2563.583]", + "[14863.2559 -7034.2651 -2563.6111]", + "[14864.0605 -6499.1802 -2563.5981]", + "[14864.127 -5964.6128 -2563.4363]", + "[14863.2998 -5430.3574 -2563.5962]", + "[14864.752 -4896.5605 -2563.5244]", + "[14863.6943 -4363.3882 -2563.5388]", + "[14865.0381 -3830.5864 -2563.3235]", + "[14864.2168 -3297.9561 -2563.5503]", + "[14864 -2765.6387 -2563.4077]", + "[14863.8164 -2234.1648 -2587.0142]", + "[14863.9219 -1711.4106 -2644.9683]", + "[14863.1016 -1201.4063 -2704.6023]", + "[14863.7979 -676.0125 -2767.1843]", + "[14863.0234 -148.0508 -2831.019]", + "[14863.1914 366.4743 -2892.9631]", + "[14863.71 893.4434 -2955.4443]", + "[14864.3604 1409.6094 -3012.136]", + "[14862.9189 1936.0151 -3061.4092]", + "[14864.3262 2470.0122 -3084.717]", + "[14864.8125 3005.1111 -3076.7263]", + "[14864.293 3538.5786 -3074.7058]", + "[14864.2734 4065.2817 -3075.5176]", + "[14863.8408 4595.8267 -3075.5627]", + "[14864.2188 5128.9307 -3075.4644]", + "[14864.0049 5662.0952 -3075.5374]", + "[14863.8926 6195.0215 -3075.6079]", + "[14863.1777 6727.6787 -3075.2954]", + "[14864.0898 7260.0229 -3075.6121]", + "[14857.9189 7792.0596 -3075.1973]", + "[14829.6865 8323.3564 -3075.5486]", + "[14780.5703 8852.75 -3075.3708]", + "[14707.9326 9379.2783 -3075.0513]", + "[14609.4453 9901.2666 -3075.4812]", + "[14482.0918 10416.6523 -3075.5898]", + "[14325.8379 10923.4219 -3075.4231]", + "[14134.8154 11417.7334 -3075.3088]", + "[13909.7764 11896.9834 -3075.4612]", + "[13647.6533 12356.4014 -3075.5032]", + "[13347.5996 12791.4326 -3075.4575]", + "[13010.998 13197.9287 -3075.5034]", + "[12639.0693 13571.4541 -3075.6387]", + "[12235.8965 13909.623 -3075.5488]", + "[11805.3809 14210.6504 -3075.437]", + "[11351.7393 14473.6299 -3075.2524]", + "[10879.0352 14698.3477 -3075.519]", + "[10392.6895 14888.8613 -3075.2158]", + "[9895.8311 15046.542 -3075.5508]", + "[9391.2842 15174.0811 -3075.4778]", + "[8881.5889 15274.2715 -3075.3501]", + "[8368.124 15349.2637 -3075.4563]", + "[7852.6655 15402.1543 -3075.5068]", + "[7336.0303 15433.8682 -3075.3784]", + "[6819.1665 15447.9707 -3075.4734]", + "[6302.5142 15446.874 -3075.8838]", + "[5786.4082 15445.4961 -3075.8015]", + "[5270.8311 15444.3105 -3075.7327]", + "[4755.7778 15444.9971 -3075.5039]", + "[4241.5762 15444.6387 -3075.5723]", + "[3727.8474 15445.9443 -3075.4277]", + "[3214.991 15444.4609 -3075.4573]", + "[2702.5583 15446.0957 -3075.4402]", + "[2167.3677 15444.8076 -3075.5693]", + "[1632.3241 15445.1563 -3075.5398]", + "[1097.9216 15460.21 -3075.4971]", + "[566.9835 15522.3955 -3075.2419]", + "[44.8202 15633.8613 -3075.1177]", + "[-466.1468 15781.1416 -3075.05]", + "[-992.1703 15853.2617 -3075.5359]", + "[-1519.0135 15883.9014 -3075.2363]", + "[-2045.6832 15880.7051 -3075.4263]", + "[-2569.4282 15878.291 -3075.488]", + "[-3092.2368 15875.627 -3075.4497]", + "[-3613.8447 15876.8066 -3075.6738]", + "[-4134.7397 15876.2881 -3075.5115]", + "[-4655.0781 15875.8682 -3075.6189]", + "[-5175.0352 15877.4473 -3075.4468]", + "[-5694.7495 15876.2607 -3075.5608]", + "[-6214.249 15876.1045 -3075.5442]", + "[-6733.3867 15875.8301 -3075.4902]", + "[-7251.6387 15859.3496 -3075.1692]", + "[-7766.2495 15794.7285 -3075.2317]", + "[-8271.2959 15676.8359 -3074.551]", + "[-8759.0039 15502.9814 -3075.2339]", + "[-9215.7539 15259.7012 -3075.009]", + "[-9624.8691 14944.6152 -3075.4424]", + "[-9972.0264 14563.9707 -3075.5881]", + "[-10246.4893 14129.9873 -3075.4768]", + "[-10457.252 13640.0391 -3075.5798]", + "[-10599.7881 13129.125 -3075.0247]", + "[-10685.5371 12608.4473 -3075.2148]", + "[-10725.1406 12084.5293 -3075.1848]", + "[-10728.6016 11561.1191 -3075.5046]", + "[-10721.9717 11039.6133 -3075.5049]", + "[-10722.1201 10519.1787 -3075.1521]", + "[-10722.833 9999.5264 -3075.2878]", + "[-10721.6436 9480.6807 -3075.4021]", + "[-10722.8369 8962.5498 -3075.3267]", + "[-10722.3857 8444.8496 -3075.4099]", + "[-10723.418 7927.5723 -3075.157]", + "[-10723.2627 7410.5254 -3075.4197]", + "[-10722.0742 6893.8784 -3075.2634]", + "[-10722.1709 6377.6138 -3075.5359]", + "[-10721.2627 5861.7983 -3075.55]", + "[-10721.3301 5346.4136 -3075.4709]", + "[-10721.5322 4831.2388 -3075.5215]", + "[-10721.8535 4316.4185 -3075.2764]", + "[-10722.2744 3801.937 -3075.5798]", + "[-10722.1318 3286.1404 -3075.3962]", + "[-10721.6641 2770.3159 -3075.4856]", + "[-10721.916 2254.6907 -3075.2612]", + "[-10722.6797 1739.3022 -3075.4661]", + "[-10721.7334 1224.0981 -3075.4653]", + "[-10722.5664 709.1617 -3075.4102]", + "[-10721.5557 194.4144 -3075.4617]", + "[-10722.1094 -321.2435 -3092.9358]", + "[-10722.0127 -837.6232 -3147.3962]", + "[-10722.1943 -1346.4922 -3206.6531]", + "[-10722.1152 -1863.7175 -3268.2322]", + "[-10722.5049 -2376.8462 -3330.2991]", + "[-10720.4268 -2893.8955 -3392.8247]", + "[-10722.0098 -3421.1936 -3455.3274]", + "[-10721.5576 -3937.6763 -3513.2678]", + "[-10721.165 -4463.4331 -3564.6755]", + "[-10722.0088 -4995.3774 -3595.7603]", + "[-10721.6582 -5527.4771 -3589.9282]", + "[-10722.6367 -6055.4751 -3586.7671]", + "[-10713.7891 -6572.4517 -3587.2952]", + "[-10683.208 -7092.6655 -3587.6345]", + "[-10632.5215 -7609.1582 -3587.4048]", + "[-10558.4561 -8126.9277 -3587.5356]", + "[-10460.2314 -8639.8867 -3587.3584]", + "[-10335.1836 -9146.6738 -3587.4255]", + "[-10179.1016 -9644.2305 -3587.4341]", + "[-9991.6123 -10130.0293 -3587.5232]", + "[-9770.418 -10600.7822 -3587.6411]", + "[-9513.4902 -11052.123 -3587.418]", + "[-9220.7988 -11480.1709 -3587.2256]", + "[-8892.1699 -11880.4639 -3587.5686]", + "[-8530.3242 -12249.5771 -3587.4951]", + "[-8138.6064 -12585.168 -3587.2114]", + "[-7719.1992 -12883.6152 -3587.6108]", + "[-7277.312 -13145.3252 -3587.772]", + "[-6817.6343 -13371.1797 -3587.5417]", + "[-6326.9565 -13570.6611 -3587.3289]", + "[-5824.9648 -13735.0986 -3587.4629]", + "[-5315.0801 -13868.5068 -3587.2886]", + "[-4799.8086 -13973.6758 -3587.386]", + "[-4280.98 -14052.8633 -3587.4473]", + "[-3759.929 -14107.6406 -3587.0337]", + "[-3237.958 -14142.1455 -3587.4939]", + "[-2715.7886 -14156.8467 -3587.7046]", + "[-2194.1665 -14155.7979 -3587.3086]", + "[-1673.2528 -14154.6523 -3587.439]", + "[-1152.2582 -14154.8672 -3596.8906]", + "[-628.5526 -14155.0938 -3645.7849]", + "[-116.8458 -14155.7539 -3704.5745]", + "[408.5222 -14154.0225 -3766.6086]", + "[935.1001 -14155.0117 -3830.0686]", + "[1459.3625 -14154.0205 -3893.6929]", + "[1979.8905 -14154.79 -3955.6772]", + "[2495.1965 -14154.2988 -4014.3333]", + "[3025.5447 -14154.1582 -4068.2241]", + "[3544.2981 -14154.9189 -4105.5225]", + "[4068.9619 -14155.2246 -4103.9282]", + "[4594.7222 -14154.8193 -4099.0283]", + "[5116.2285 -14154.75 -4099.3506]", + "[5630.1548 -14154.7822 -4099.4961]", + "[6146.5049 -14154.082 -4099.4756]", + "[6663.8906 -14155.3057 -4099.4658]", + "[7181.1655 -14155.373 -4099.4741]", + "[7698.1724 -14155.2959 -4099.4712]", + "[8215.0352 -14154.8438 -4099.5005]", + "[8731.6719 -14155.1094 -4099.5688]", + "[9248.1289 -14155.5605 -4099.498]", + "[9764.2744 -14155.3105 -4099.3184]", + "[10280.1924 -14154.5684 -4099.5654]", + "[10795.8584 -14156.0283 -4099.3423]", + "[11311.3682 -14155.418 -4099.5757]", + "[11826.4893 -14155.6357 -4099.3838]", + "[12341.1152 -14143.4512 -4099.27]", + "[12852.5254 -14085.0752 -4099.6792]", + "[13355.4697 -13977.7217 -4099.3701]", + "[13842.5361 -13815.5547 -4099.6978]", + "[14301.3633 -13586.7676 -4099.1118]", + "[14717.1289 -13287.957 -4099.1416]", + "[15088.5273 -12904.7314 -4099.2031]", + "[15360.4375 -12502.1895 -4099.2686]", + "[15584.6543 -12022.3193 -4099.0171]", + "[15738.5605 -11518.2207 -4099.3101]", + "[15834.3252 -11002.7764 -4099.3525]", + "[15882.8711 -10483.0576 -4099.4023]", + "[15893.5898 -9963.2061 -4099.436]", + "[15886.957 -9445.1055 -4099.5767]", + "[15885.958 -8928.1973 -4099.6753]", + "[15886.543 -8412.3232 -4099.4468]", + "[15885.8955 -7896.9116 -4099.4937]", + "[15885.3633 -7382.0459 -4099.4507]", + "[15887.3721 -6867.5996 -4099.4893]", + "[15885.2461 -6353.3833 -4099.4702]", + "[15887.0518 -5839.4121 -4099.4561]", + "[15886.3604 -5325.6079 -4099.4697]", + "[15886.3193 -4812.0615 -4099.4414]", + "[15885.3145 -4298.6611 -4099.4731]", + "[15885.1973 -3785.4932 -4099.478]", + "[15865.2451 -3272.863 -4099.1704]", + "[15798.7119 -2764.144 -4099.439]", + "[15681.3594 -2264.8306 -4099.9028]", + "[15500.5615 -1762.2653 -4099.5034]", + "[15247.9248 -1291.8141 -4099.1748]", + "[14918.8408 -872.2413 -4099.2949]", + "[14533.2178 -507.0846 -4099.3521]", + "[14158.1533 -136.6505 -4099.3228]", + "[13785.209 233.07 -4099.4517]", + "[13415.0029 603.8134 -4099.4307]", + "[13044.9336 972.9625 -4099.4658]", + "[12676.2969 1343.0272 -4099.5391]", + "[12305.0439 1713.6243 -4099.4609]", + "[11932.6709 2087.2114 -4099.4663]", + "[11556.6035 2461.3765 -4099.4541]", + "[11194.6836 2825.2952 -4099.4985]", + "[10826.21 3192.7261 -4099.4414]", + "[10452.6699 3566.4773 -4099.4434]", + "[10089.208 3930.0859 -4099.4326]", + "[9712.1104 4305.4424 -4099.6211]", + "[9336.5146 4683.5752 -4099.5015]", + "[8963.6436 5055.4043 -4099.3691]", + "[8572.9229 5414.209 -4099.0225]", + "[8156.6699 5728.6021 -4099.1191]", + "[7700.9761 6004.0122 -4099.5078]", + "[7233.2061 6215.9243 -4099.4443]", + "[6739.2046 6358.2324 -4099.2666]", + "[6211.3101 6418.8447 -4099.2007]", + "[5696.0601 6403.8867 -4099.271]", + "[5163.0454 6400.2393 -4099.3926]", + "[4632.0352 6398.0308 -4099.4844]", + "[4102.1606 6398.0537 -4099.3799]", + "[3573.6731 6398.5669 -4099.4448]", + "[3045.9614 6398.6323 -4099.4395]", + "[2518.5105 6398.5674 -4099.4536]", + "[1991.3374 6398.5635 -4099.4629]", + "[1464.5587 6397.251 -4099.5122]", + "[938.0505 6397.9678 -4099.5132]", + "[411.9614 6398.2324 -4099.4399]", + "[-113.9156 6397.1812 -4099.4927]", + "[-639.5688 6397.626 -4099.4492]", + "[-1164.9485 6398.5166 -4099.4541]", + "[-1690.1298 6397.5811 -4099.4639]", + "[-2215.0415 6397.8086 -4099.2617]", + "[-2738.978 6424.0098 -4099.5557]", + "[-3257.0811 6498.8545 -4099.4307]", + "[-3759.2048 6625.5405 -4098.8252]", + "[-4240.4092 6812.4233 -4099.5137]", + "[-4689.0063 7067.7524 -4099.6636]", + "[-5089.3247 7396.4629 -4099.6211]", + "[-5413.4995 7774.9697 -4099.4438]", + "[-5678.6196 8219.7393 -4099.5386]", + "[-5872.5723 8699.707 -4099.4575]", + "[-6003.9253 9200.6563 -4099.3857]", + "[-6083.4014 9713.4014 -4099.4751]", + "[-6119.1274 10233.6045 -4099.3955]", + "[-6119.145 10762.3701 -4099.4575]", + "[-6082.3315 11276.916 -4099.2485]", + "[-5999.458 11796.5586 -4099.3032]", + "[-5867.6709 12293.7266 -4099.5933]", + "[-5669.8057 12778.251 -4099.6123]", + "[-5394.3794 13233.4678 -4099.3101]", + "[-5055.3398 13623.3594 -4099.7134]", + "[-4665.793 13936.6953 -4099.4746]", + "[-4203.0513 14194.3291 -4099.2271]", + "[-3702.1252 14381.3535 -4099.5718]", + "[-3201.1548 14499.9492 -4099.4507]", + "[-2686.9355 14568.7402 -4099.1875]", + "[-2167.8933 14596.2607 -4099.1738]", + "[-1649.7117 14592.0488 -4099.9502]", + "[-1133.1423 14589.0859 -4099.5537]", + "[-617.4064 14586.8164 -4099.4829]", + "[-102.1076 14588.3154 -4099.4526]", + "[412.6099 14588.4004 -4099.4595]", + "[927.0503 14587.2188 -4099.459]", + "[1441.2788 14588.5879 -4099.5454]", + "[1955.3195 14587.624 -4099.5259]", + "[2469.7395 14587.0195 -4109.8599]", + "[2985.6643 14587.8535 -4158.7007]", + "[3501.3542 14587.377 -4218.9146]", + "[4014.4177 14588.0342 -4279.4688]", + "[4524.6899 14587.1465 -4341]", + "[5034.5693 14589.1865 -4402.5146]", + "[5547.5762 14586.7793 -4464.0688]", + "[6065.5088 14587.9854 -4522.9956]", + "[6588.543 14587.9961 -4576.606]", + "[7115.4194 14588.085 -4616.0776]", + "[7642.5879 14584.2412 -4615.2349]", + "[8165.7231 14560.7285 -4611.1753]", + "[8679.7197 14516.9102 -4611.5015]", + "[9200.165 14449.3301 -4612.1113]", + "[9719.0234 14357.9678 -4611.5693]", + "[10233.7021 14239.3486 -4611.3081]", + "[10736.0283 14091.7744 -4611.6299]", + "[11227.542 13913.1426 -4611.5327]", + "[11704.4521 13700.3779 -4611.3516]", + "[12163.3789 13453.0166 -4611.2764]", + "[12599.7373 13169.208 -4611.2979]", + "[13008.5283 12848.5947 -4611.6113]", + "[13387.3379 12494.3721 -4611.4204]", + "[13731.9004 12108.1807 -4611.7432]", + "[14041.2041 11694.5938 -4611.8135]", + "[14314.0547 11257.4736 -4611.8306]", + "[14550.0215 10800.6055 -4611.479]", + "[14751.8516 10328.9395 -4611.7207]", + "[14919.75 9845.2129 -4611.6377]", + "[15063.501 9332.8555 -4611.5708]", + "[15176.3926 8813.9512 -4611.5371]", + "[15263.1865 8291.0986 -4611.5898]", + "[15324.8242 7765.6763 -4611.415]", + "[15365.7559 7239.0518 -4611.3418]", + "[15386.0039 6711.9297 -4610.9561]", + "[15388.4834 6185.2983 -4611.6489]", + "[15385.5322 5659.7349 -4611.5488]", + "[15385.7627 5134.8848 -4611.4614]", + "[15386.8164 4610.3423 -4611.4863]", + "[15385.7148 4086.3384 -4611.3022]", + "[15386.5967 3562.5754 -4611.4873]", + "[15385.8867 3039.1211 -4611.2188]", + "[15385.9219 2515.8682 -4611.4551]", + "[15384.6318 1992.9093 -4611.4722]", + "[15385.1172 1470.1631 -4611.4492]", + "[15385.1865 947.6858 -4611.4614]", + "[15385.1523 425.3949 -4611.4624]", + "[15385.0352 -96.6263 -4611.666]", + "[15385.1748 -618.4481 -4611.5371]", + "[15375.042 -1139.7581 -4610.7998]", + "[15276.5039 -1632.1859 -4610.6143]", + "[15087.0244 -2118.012 -4611.3862]", + "[14836.6738 -2572.084 -4611.4937]", + "[14541.6719 -2993.761 -4611.623]", + "[14213.9834 -3387.196 -4610.6572]", + "[13846.4844 -3768.0352 -4611.3027]", + "[13486.1953 -4151.4707 -4611.3071]", + "[13167.2461 -4568.436 -4611.1138]", + "[12894.583 -5016.25 -4611.4468]", + "[12678.0889 -5491.9956 -4611.7783]", + "[12530.7832 -5992.5479 -4611.2095]", + "[12469.5283 -6509.9214 -4611.0767]", + "[12483.5342 -7028.8037 -4611.3784]", + "[12487.4873 -7544.0791 -4611.52]", + "[12489.2217 -8057.5889 -4611.46]", + "[12489.1914 -8589.1797 -4611.4419]", + "[12489.6299 -9119.2012 -4611.4751]", + "[12488.2236 -9648.25 -4611.5151]", + "[12489.4336 -10176.9063 -4611.4189]", + "[12488.3047 -10705.3145 -4611.4478]", + "[12475.2148 -11233.0254 -4611.2163]", + "[12413.5596 -11757.0332 -4611.5728]", + "[12298.9766 -12271.4287 -4611.5142]", + "[12125.2783 -12767.7021 -4610.9907]", + "[11881.5635 -13232.5625 -4611.1162]", + "[11564.8359 -13649.6914 -4611.6802]", + "[11195.6094 -13990.4795 -4611.5562]", + "[10758.6172 -14270.8447 -4611.6904]", + "[10286.1416 -14478.374 -4611.5698]", + "[9793.6553 -14620.6846 -4611.5903]", + "[9273.2734 -14712.0967 -4611.6812]", + "[8749.5049 -14756.2041 -4611.1616]", + "[8226.4141 -14762.9854 -4611.0518]", + "[7705.6616 -14755.415 -4611.396]", + "[7186.2617 -14754.5664 -4611.4751]", + "[6667.7842 -14756.5654 -4611.2515]", + "[6150.0054 -14754.5977 -4611.3315]", + "[5632.9497 -14754.9385 -4611.5342]", + "[5116.2944 -14755.3623 -4611.5234]", + "[4599.9946 -14755.4756 -4611.5684]", + "[4084.0701 -14754.7246 -4611.3242]", + "[3568.4783 -14755.5742 -4611.4673]", + "[3053.2444 -14754.7227 -4611.4668]", + "[2538.4067 -14755.8975 -4611.4595]", + "[2023.8763 -14755.7734 -4611.4648]", + "[1509.7159 -14755.71 -4611.4756]", + "[995.8489 -14755.6758 -4611.6494]", + "[482.3692 -14755.4775 -4611.4692]", + "[-30.8061 -14755.377 -4611.5449]", + "[-543.6231 -14754.8418 -4611.4907]", + "[-1056.0773 -14756.126 -4611.4673]", + "[-1568.1936 -14755.875 -4611.4561]", + "[-2098.2405 -14755.8564 -4611.4663]", + "[-2627.9448 -14755.7871 -4611.4775]", + "[-3157.2581 -14756.1816 -4611.5605]", + "[-3686.2151 -14754.8877 -4611.4976]", + "[-4214.6079 -14749.6016 -4611.124]", + "[-4735.1646 -14651.4648 -4611.1426]", + "[-5177.894 -14483.3652 -4611.6489]", + "[-5641.9932 -14237.9053 -4611.6948]", + "[-6072.6855 -13945.2422 -4611.5103]", + "[-6472.9438 -13616.5811 -4611.1216]", + "[-6844.8999 -13262.1426 -4611.3872]", + "[-7214.2554 -12884.2061 -4611.5801]", + "[-7585.9858 -12511.3574 -4611.4751]", + "[-7957.3765 -12139.7734 -4611.4565]", + "[-8327.8564 -11768.9014 -4611.4648]", + "[-8697.834 -11398.8457 -4611.4683]", + "[-9068.2725 -11030.0381 -4611.4736]", + "[-9436.6943 -10659.8652 -4611.5933]", + "[-9806.0283 -10291.208 -4611.6797]", + "[-10166.2959 -9914.3916 -4611.9741]", + "[-10509.998 -9523.2051 -4611.6743]", + "[-10837.624 -9119.3389 -4612.1592]", + "[-11145.9824 -8701.4424 -4611.9722]", + "[-11433.7451 -8269.8506 -4611.9644]", + "[-11697.1582 -7824.291 -4612.0015]", + "[-11933.3896 -7365.0542 -4611.9585]", + "[-12138.2539 -6892.1484 -4611.8989]", + "[-12309.0889 -6407.2637 -4611.873]", + "[-12439.8848 -5911.4648 -4612.1724]", + "[-12533.0713 -5390.9751 -4612.2529]", + "[-12579.0547 -4865.5713 -4611.9844]", + "[-12577.6875 -4339.6392 -4611.9897]", + "[-12529.1074 -3817.7727 -4612.1035]", + "[-12435.3359 -3303.6611 -4612.2173]", + "[-12300.0273 -2800.6829 -4612.1289]", + "[-12125.1875 -2311.6729 -4612.1606]", + "[-11916.5967 -1838.0356 -4612.0957]", + "[-11678.1416 -1380.4756 -4612.2188]", + "[-11414.2539 -938.6908 -4612.0991]", + "[-11125.9375 -509.618 -4611.9175]", + "[-10814.1875 -92.1738 -4611.9619]", + "[-10481.6396 315.7326 -4611.8887]", + "[-10141.5508 702.9271 -4611.8481]", + "[-9780.3682 1083.4763 -4611.7407]", + "[-9407.9131 1452.3173 -4612.2285]", + "[-9034.2783 1823.4236 -4612.2217]", + "[-8659.376 2196.9668 -4612.165]", + "[-8287.2295 2570.3779 -4612.1694]", + "[-7917.9385 2938.6038 -4612.3975]", + "[-7554.8408 3301.314 -4612.3936]", + "[-7183.7051 3672.8396 -4612.4121]", + "[-6820.2544 4036.2896 -4612.1118]", + "[-6450.5308 4407.2915 -4612.104]", + "[-6073.5405 4783.9536 -4612.1528]", + "[-5707.5796 5150.666 -4612.2183]", + "[-5335.457 5522.1963 -4612.2437]", + "[-4958.5093 5899.2695 -4612.1543]", + "[-4593.4844 6263.1548 -4612.2256]", + "[-4226.0757 6631.728 -4612.1523]", + "[-3857.2646 7000.7144 -4612.1309]", + "[-3487.8335 7368.7734 -4612.103]", + "[-3119.4063 7737.5405 -4612.2427]", + "[-2750.678 8105.6494 -4612.356]", + "[-2382.7854 8474.3213 -4612.3794]", + "[-2014.9161 8842.6396 -4612.2505]", + "[-1646.2021 9209.835 -4612.4448]", + "[-1279.3809 9578.3418 -4612.311]", + "[-911.2225 9945.0811 -4612.0957]", + "[-545.0996 10313.2568 -4611.9912]", + "[-177.7296 10679.6816 -4611.7036]", + "[187.9508 11046.5391 -4611.6191]", + "[590.3478 11372.6338 -4611.4663]", + "[872.3274 11528.124 -4611.708]", + "[1350.4657 11723.6553 -4611.6011]", + "[1847.6187 11854.6416 -4611.937]", + "[2376.0137 11936.8418 -4611.9561]", + "[2906.9573 11974.4746 -4611.3784]", + "[3437.3154 11975.7715 -4614.5322]", + "[3967.6868 11970.1904 -4660.0303]", + "[4499.4409 11969.1709 -4721.1895]", + "[5009.4731 11970.8428 -4781.0854]", + "[5520.9473 11969.377 -4842.3359]", + "[6033.0356 11971.4824 -4904.2041]", + "[6548.165 11969.5088 -4966.166]", + "[7068.4604 11970.5801 -5026.2358]", + "[7594.4795 11970.6055 -5081.5986]", + "[8125.3979 11970.9219 -5124.2285]", + "[8657.4004 11968.793 -5129.2388]", + "[9186.4756 11971.1377 -5123.0513]", + "[9709.375 11970.3516 -5123.1265]", + "[10243.8057 11971.3984 -5123.5605]", + "[10765.1377 11964.4795 -5122.8794]", + "[11284.0859 11915.5029 -5123.0625]", + "[11795.7471 11818.8457 -5123.3335]", + "[12292.5381 11664.1943 -5123.4219]", + "[12763.5771 11445.2734 -5123.3555]", + "[13192.7861 11154.4014 -5123.5889]", + "[13563.2568 10793.8125 -5123.6299]", + "[13863.2666 10374.9727 -5123.6304]", + "[14089.4482 9914.7412 -5123.5664]", + "[14255.8691 9408.959 -5123.6621]", + "[14360.3477 8889.6982 -5123.6763]", + "[14415.2129 8365.749 -5123.3413]", + "[14430.5723 7841.3096 -5123.4751]", + "[14421.7061 7318.3862 -5123.3755]", + "[14421.1846 6796.751 -5123.5117]", + "[14421.5186 6275.8916 -5123.5464]", + "[14420.7461 5755.8193 -5123.626]", + "[14421.6963 5236.293 -5123.5278]", + "[14420.3398 4717.0776 -5123.6592]", + "[14421.2588 4198.1221 -5123.3931]", + "[14420.0625 3679.3811 -5123.6475]", + "[14421.1719 3160.8962 -5123.1807]", + "[14419.9932 2642.5825 -5123.7441]", + "[14421.585 2124.5493 -5123.4248]", + "[14419.792 1606.7013 -5123.4624]", + "[14421.4531 1089.2522 -5123.2578]", + "[14421.0342 572.1487 -5123.5371]", + "[14421.4863 55.2994 -5123.4517]", + "[14421.8408 -461.3428 -5123.4561]", + "[14421.4766 -977.7866 -5123.4653]", + "[14421.5674 -1493.7896 -5123.4624]", + "[14420.5557 -2009.5464 -5123.5488]", + "[14422.0469 -2525.0396 -5123.4854]", + "[14421.543 -3040.3618 -5123.2832]", + "[14409.7871 -3555.3438 -5123.2954]", + "[14377.6748 -4069.2471 -5123.582]", + "[14324.9453 -4580.7422 -5123.4204]", + "[14249.3682 -5088.7017 -5123.4224]", + "[14151.0107 -5592.1787 -5123.6357]", + "[14025.3125 -6089.1929 -5123.5083]", + "[13871.7578 -6577.6895 -5123.3511]", + "[13677.6064 -7074.6787 -5123.6748]", + "[13448.4541 -7555.5332 -5123.7661]", + "[13181.7119 -8015.3281 -5123.522]", + "[12877.0957 -8449.6377 -5123.4438]", + "[12536.0518 -8854.3623 -5123.7964]", + "[12160.8203 -9226.8193 -5123.3438]", + "[11753.0625 -9562.1641 -5123.8574]", + "[11318.1191 -9859.5693 -5123.7168]", + "[10861.3818 -10120.0215 -5123.7646]", + "[10386.2266 -10342.6211 -5123.4731]", + "[9896.9805 -10530.084 -5123.7607]", + "[9395.5576 -10684.3535 -5123.4624]", + "[8887.0996 -10809.6445 -5123.5366]", + "[8371.5469 -10907.3242 -5123.6484]", + "[7849.8184 -10979.8711 -5123.6328]", + "[7322.9604 -11030.2559 -5123.4937]", + "[6790.9434 -11060.0654 -5123.4321]", + "[6273.6577 -11070.3438 -5123.5698]", + "[5749.1738 -11067.9316 -5123.4761]", + "[5216.373 -11066.9102 -5123.5435]", + "[4698.627 -11057.8643 -5123.5146]", + "[4173.9487 -11026.2129 -5123.4463]", + "[3643.6582 -10972.0254 -5123.1382]", + "[3133.418 -10898.167 -5123.5205]", + "[2621.8545 -10798.1035 -5123.4624]", + "[2113.436 -10669.9141 -5123.707]", + "[1613.8101 -10511.7852 -5123.5962]", + "[1126.4971 -10321.2275 -5123.7778]", + "[655.1822 -10095.6621 -5123.5732]", + "[203.6455 -9834.5342 -5123.7808]", + "[-224.1548 -9537.7715 -5123.6665]", + "[-623.2361 -9204.335 -5123.6445]", + "[-990.851 -8837.8105 -5123.7129]", + "[-1323.5923 -8440.2627 -5123.6128]", + "[-1620.5978 -8016.6245 -5123.6006]", + "[-1880.6638 -7570.3574 -5123.5132]", + "[-2103.3909 -7105.2925 -5123.7017]", + "[-2292.4126 -6626.686 -5123.6475]", + "[-2450.3828 -6137.8584 -5123.4917]", + "[-2578.2871 -5641.3242 -5123.5005]", + "[-2684.1594 -5115.5581 -5123.3711]", + "[-2762.6863 -4585.8608 -5123.3706]", + "[-2817.1755 -4053.9192 -5123.1235]", + "[-2850.1416 -3520.874 -5123.5278]", + "[-2863.0837 -2987.5991 -5123.1851]", + "[-2860.8403 -2454.7019 -5123.3525]", + "[-2859.8982 -1922.3527 -5123.2568]", + "[-2858.5938 -1390.4537 -5123.5479]", + "[-2861.0742 -859.2727 -5123.4272]", + "[-2860.3486 -328.6888 -5123.3604]", + "[-2860.5078 201.2477 -5123.5288]", + "[-2860.1829 730.6994 -5123.4546]", + "[-2860.842 1259.7251 -5123.4863]", + "[-2861.0205 1788.4025 -5123.4663]", + "[-2859.6711 2316.7935 -5123.4546]", + "[-2861.3225 2844.9548 -5123.5254]", + "[-2859.6321 3372.9619 -5123.6313]", + "[-2860.1921 3900.7241 -5123.5142]", + "[-2849.228 4428.3564 -5127.4761]", + "[-2768.5598 4950.875 -5133.5825]", + "[-2605.0618 5454.2891 -5137.8311]", + "[-2433.9915 5773.8843 -5138.9897]", + "[-2208.7273 6059.0898 -5139.2378]", + "[-1971.4978 6268.0229 -5139.4395]", + "[-1659.8264 6456.8418 -5138.312]", + "[-1254.5365 6613.0996 -5135.3306]", + "[-739.07 6718.2197 -5130.4736]", + "[-220.8939 6757.4771 -5125.1904]", + "[293.8419 6750.7373 -5122.6226]", + "[826.8752 6747.2183 -5123.5073]", + "[1355.0754 6744.0518 -5113.6782]", + "[1873.406 6745.936 -5063.5815]", + "[2383.3218 6745.6938 -5004.0449]", + "[2902.9004 6744.063 -4942.7495]", + "[3424.5757 6745.2705 -4879.5146]", + "[3939.429 6745.8838 -4817.3447]", + "[4455.0171 6745.5317 -4756.2173]", + "[4978.9185 6745.1284 -4696.6499]", + "[5495.8809 6745.8589 -4644.689]", + "[6011.458 6744.5889 -4607.5034]", + "[6532.6338 6736.7944 -4611.4404]", + "[7045.8589 6666.2959 -4622.0957]", + "[7543.1914 6514.6235 -4626.0244]", + "[7890.4756 6337.7329 -4628.0376]", + "[8184.6758 6115.7241 -4628.562]", + "[8379.6982 5904.6929 -4628.5635]", + "[8593.2373 5571.7925 -4627.397]", + "[8730.4756 5241.1768 -4625.1528]", + "[8851.668 4742.5244 -4620.7793]", + "[8904.8096 4221.4512 -4615.4243]", + "[8905.3525 3704.8499 -4611.9668]", + "[8854.3027 3179.0168 -4619.814]", + "[8734.873 2670.0027 -4625.1221]", + "[8549.3018 2238.7402 -4627.9546]", + "[8365.3848 1958.6581 -4628.7783]", + "[8134.7842 1714.3881 -4629.0234]", + "[7878.2778 1524.2972 -4628.1411]", + "[7504.2056 1338.5818 -4625.9702]", + "[7059.0161 1208.1172 -4622.3901]", + "[6541.2295 1135.4707 -4617.2427]", + "[6026.6421 1118.4175 -4611.5752]", + "[5503.6245 1128.7089 -4611.8989]", + "[4988.5479 1131.6655 -4612.6719]", + "[4463.0215 1130.4269 -4612.5142]", + "[3950.2114 1129.8783 -4612.5093]", + "[3431.644 1129.634 -4612.4839]", + "[2904.5146 1131.8243 -4612.5054]", + "[2391.4585 1130.6777 -4612.3188]", + "[1870.082 1129.6794 -4612.478]", + "[1354.5156 1130.7021 -4612.501]", + "[832.1818 1130.8134 -4612.4644]", + "[309.5745 1131.069 -4612.5845]", + "[-209.1936 1131.1505 -4612.4233]", + "[-742.2474 1129.6898 -4612.4673]", + "[-1266.5153 1130.8939 -4612.3135]", + "[-1779.4333 1130.0792 -4612.5054]", + "[-2302.2639 1131.9618 -4610.9321]", + "[-2829.7256 1130.5966 -4571.4189]", + "[-3358.9434 1130.9955 -4510.8774]", + "[-3888.2788 1131.5065 -4448.6382]", + "[-4410.9355 1131.3634 -4385.8955]", + "[-4919.8994 1130.1252 -4324.3149]", + "[-5430.9956 1130.8442 -4262.6899]", + "[-5940.0298 1130.373 -4204.1416]", + "[-6468.8584 1131.0676 -4147.4854]", + "[-6995.8428 1130.8718 -4103.6943]", + "[-7519.4351 1131.0461 -4091.4915]", + "[-8035.4937 1112.6071 -4098.9561]", + "[-8565.5313 1076.0172 -4098.1577]", + "[-9088.1494 1014.6045 -4096.9976]", + "[-9603.5527 932.4323 -4096.0415]", + "[-10108.2949 825.7207 -4095.6052]", + "[-10623.6709 685.6622 -4094.7737]", + "[-11119.6602 519.301 -4094.5164]", + "[-11615.4375 313.0147 -4093.917]", + "[-12080.9834 80.0796 -4093.5061]", + "[-12535.4238 -196.1745 -4092.9277]", + "[-12973.7285 -514.9708 -4092.908]", + "[-13365.959 -858.3291 -4092.2964]", + "[-13732.5313 -1240.6318 -4092.5918]", + "[-14067.0947 -1661.4664 -4092.676]", + "[-14351.9092 -2087.9126 -4092.895]", + "[-14604.2734 -2541.9604 -4093.2339]", + "[-14824.5254 -3019.0039 -4094.0217]", + "[-15012.1338 -3516.5149 -4094.3032]", + "[-15169.792 -4030.4492 -4095.0005]", + "[-15295.3213 -4559.1484 -4095.8635]", + "[-15388.7393 -5064.8169 -4096.8853]", + "[-15458.5088 -5577.1567 -4097.4199]", + "[-15507.4463 -6092.2705 -4098.2593]", + "[-15536.1826 -6608.4321 -4099.1333]", + "[-15547.3525 -7123.6221 -4100.2896]", + "[-15540.3408 -7669.395 -4099.8843]", + "[-15513.1533 -8209.0352 -4098.6147]", + "[-15466.0234 -8740.1611 -4097.5132]", + "[-15396.8174 -9260.4902 -4096.7783]", + "[-15305.334 -9767.4346 -4095.916]", + "[-15183.4023 -10289.1465 -4095.2708]", + "[-15034.7129 -10790.8789 -4094.5447]", + "[-14848.8613 -11297.3662 -4094.0261]", + "[-14632.8623 -11775.8848 -4094.0371]", + "[-14386.2695 -12233.4004 -4092.9297]", + "[-14102.4492 -12667.9746 -4092.8301]", + "[-13784.0244 -13076.4287 -4092.5364]", + "[-13431.8223 -13454.8018 -4092.7502]", + "[-13049.4443 -13800.9648 -4092.7139]", + "[-12619.0938 -14126.6514 -4092.9529]", + "[-12167.7246 -14410.2813 -4093.0322]", + "[-11696.6436 -14655.7422 -4093.5767]", + "[-11209.3262 -14864.9502 -4094.063]", + "[-10709.2793 -15039.127 -4094.8384]", + "[-10200.1025 -15181.3535 -4095.4287]", + "[-9688.335 -15295.3467 -4096.0474]", + "[-9160.4229 -15383.0283 -4097.1445]", + "[-8649.9678 -15445.8242 -4097.7852]", + "[-8135.5786 -15486.4111 -4098.7397]", + "[-7623.0371 -15508.5645 -4099.7271]", + "[-7089.4634 -15512.7686 -4100.6748]", + "[-6570.3213 -15509.9639 -4100.7402]", + "[-6037.9922 -15510.6299 -4100.4731]", + "[-5508.7188 -15509.6787 -4100.187]", + "[-4978.7539 -15509.8262 -4098.9653]", + "[-4452.6729 -15509.7383 -4060.2905]", + "[-3933.1328 -15509.0273 -4001.1572]", + "[-3420.9221 -15510.9609 -3940.856]", + "[-2904.1086 -15509.0498 -3878.8931]", + "[-2391.7627 -15509.1602 -3816.8018]", + "[-1871.3328 -15510.4355 -3754.386]", + "[-1346.7458 -15509.8613 -3693.4409]", + "[-826.8375 -15509.6484 -3637.7432]", + "[-305.3838 -15509.2559 -3593.1292]", + "[212.987 -15509.2441 -3579.4712]", + "[736.4109 -15476.7607 -3588.4495]", + "[1250.9089 -15398.3623 -3588.7527]", + "[1757.1888 -15264.6982 -3588.5486]", + "[2230.4167 -15067.167 -3588.5769]", + "[2668.0708 -14788.3066 -3588.2358]", + "[3058.5188 -14443.8779 -3581.2534]", + "[3385.9868 -14043.1211 -3565.2695]", + "[3624.3984 -13617.0361 -3542.8279]", + "[3800.0186 -13132.3252 -3511.8743]", + "[3926.176 -12632.7021 -3470.1194]", + "[4006.1113 -12127.1182 -3418.6375]", + "[4045.877 -11605.6006 -3357.374]", + "[4046.4048 -11096.2705 -3293.3354]", + "[4043.2537 -10585.332 -3232.0974]", + "[4042.4949 -10059.4893 -3171.7659]", + "[4041.7656 -9539.6719 -3117.5759]", + "[4041.7944 -9023.0625 -3076.5398]", + "[4043.3137 -8500.1924 -3070.3547]", + "[4042.73 -7977.5591 -3076.9023]", + "[4043.0791 -7462.9004 -3076.8606]", + "[4042.793 -6947.8374 -3076.4778]", + "[4038.0898 -6427.9985 -3075.873]", + "[3994.3291 -5904.6162 -3076.2549]", + "[3899.2456 -5384.8882 -3076.543]", + "[3749.5159 -4880.5171 -3076.4846]", + "[3536.365 -4405.5234 -3076.2466]", + "[3257.6335 -3975.9917 -3076.3992]", + "[2903.0652 -3590.8582 -3076.6919]", + "[2527.1819 -3237.3015 -3076.3508]", + "[2160.146 -2874.7576 -3076.4077]", + "[1783.8251 -2494.8464 -3076.4763]", + "[1409.4602 -2123.0935 -3076.2209]", + "[1045.1022 -1758.7141 -3076.4753]", + "[675.4197 -1388.6309 -3076.4749]", + "[303.5549 -1017.6348 -3076.4653]", + "[-67.0586 -645.7328 -3076.241]", + "[-438.2782 -274.7682 -3076.5757]", + "[-809.5679 95.7556 -3076.4551]", + "[-1179.6085 467.1812 -3076.552]", + "[-1550.9026 837.0634 -3076.4019]", + "[-1921.3574 1207.4037 -3076.4858]", + "[-2289.6536 1577.2152 -3076.449]", + "[-2654.5796 1940.4385 -3076.5959]", + "[-3026.7454 2313.1985 -3076.4768]", + "[-3402.137 2687.4424 -3076.5305]", + "[-3775.6758 3063.2466 -3076.5127]", + "[-4151.0786 3437.2637 -3076.5508]", + "[-4514.8799 3824.321 -3082.7515]", + "[-4663.5244 4051.1929 -3088.5776]", + "[-4889.645 4526.4849 -3093.938]", + "[-5037.9561 5035.3296 -3092.8904]", + "[-5127.5313 5558.063 -3088.3018]", + "[-5168.9644 6072.02 -3081.9768]", + "[-5175.4111 6594.9878 -3074.2112]", + "[-5169.3994 7113.3721 -3076.0442]", + "[-5168.3765 7627.2261 -3076.7053]", + "[-5169.498 8154.2095 -3076.5774]", + "[-5166.6133 8677.3584 -3076.0806]", + "[-5111.9668 9195.2881 -3076.3645]", + "[-4993.3994 9700.6094 -3076.8875]", + "[-4798.3125 10180.001 -3077.2991]", + "[-4586.873 10514.3428 -3077.4485]", + "[-4298.457 10830.2559 -3077.4438]", + "[-4041.1914 11027.1016 -3077.2791]", + "[-3578.6147 11266.375 -3077.0352]", + "[-3167.6211 11394.4268 -3076.8213]", + "[-2653.6121 11486.752 -3076.4363]", + "[-2141.186 11522.6104 -3076.1846]", + "[-1619.1564 11496.1045 -3076.4656]", + "[-1106.1071 11429.6943 -3076.7883]", + "[-599.79 11317.2939 -3076.3679]", + "[-99.6903 11175.9521 -3076.228]", + "[420.0611 11105.2178 -3076.7273]", + "[931.7056 11076.2344 -3076.2224]", + "[1449.3981 11077.123 -3059.426]", + "[1969.3273 11079.9395 -3005.3457]", + "[2484.1772 11080.2559 -2945.6118]", + "[2994.6169 11081.0078 -2884.9768]", + "[3512.6648 11081.3428 -2822.2747]", + "[4025.3411 11081.127 -2759.9348]", + "[4543.0361 11082.0215 -2698.9248]", + "[5063.8047 11081.7754 -2640.4744]", + "[5576.4966 11081.5674 -2590.0698]", + "[6088.1206 11080.9248 -2557.7649]", + "[6606.9756 11082.2422 -2560.8049]", + "[7120.8867 11080.5234 -2565.2942]", + "[7633.397 11081.3477 -2564.6394]", + "[8149.0835 11081.7705 -2564.2883]", + "[8669.2344 11066.4141 -2564.3826]", + "[9179.8252 10988.04 -2564.5171]", + "[9677.2188 10834.8408 -2564.2007]", + "[10105.583 10614.1748 -2564.5747]", + "[10396.2646 10391.0957 -2564.7539]", + "[10668.166 10091.4814 -2564.6709]", + "[10871.8105 9766.2168 -2564.373]", + "[11049.7344 9324.6426 -2564.3748]", + "[11167.2803 8810.9053 -2564.0972]", + "[11218.04 8291.6533 -2564.0159]", + "[11219.0195 7774.0186 -2564.5691]", + "[11212.8828 7259.3408 -2564.4934]", + "[11210.6387 6742.8169 -2564.4973]", + "[11212.292 6224.4097 -2564.4187]", + "[11211.6211 5702.6768 -2564.3826]", + "[11212.3965 5176.6948 -2564.6418]", + "[11211.127 4645.8354 -2564.4248]", + "[11212.168 4126.3438 -2564.49]", + "[11210.4336 3595.0579 -2557.1428]", + "[11210.9043 3075.9043 -2511.2651]", + "[11211.4971 2565.5022 -2452.1292]", + "[11210.7461 2051.2854 -2391.9524]", + "[11212.2588 1540.3 -2330.1624]", + "[11210.832 1016.2946 -2267.2024]", + "[11212.207 487.9155 -2203.7087]", + "[11211.5156 -42.1068 -2142.9434]", + "[11210.6445 -572.6467 -2088.1099]", + "[11211.6543 -1105.5712 -2048.3721]", + "[11212.2637 -1619.3101 -2047.9465]", + "[11211.3564 -2141.801 -2052.8826]", + "[11211.8262 -2665.125 -2052.8018]", + "[11211.7695 -3195.6377 -2052.4451]", + "[11211.6973 -3718.7009 -2052.4648]", + "[11211.1621 -4239.459 -2052.5569]", + "[11211.3613 -4759.8794 -2052.5342]", + "[11212.0264 -5280.0747 -2052.4626]", + "[11199.0273 -5799.8584 -2052.4722]", + "[11124.4033 -6315.0249 -2052.8455]", + "[10975.2354 -6813.4648 -2051.8269]", + "[10750.4795 -7259.0933 -2052.3831]", + "[10550.3887 -7525.6392 -2052.4324]", + "[10230.8242 -7822.9141 -2052.0522]", + "[9951.8516 -8002.062 -2052.4968]", + "[9479.6016 -8203.9023 -2052.3633]", + "[8964.3418 -8324.958 -2052.3923]", + "[8442.6445 -8377.8604 -2052.4309]", + "[7922.5615 -8380.3418 -2052.345]", + "[7406.1367 -8372.8838 -2052.616]", + "[6891.7573 -8371.0449 -2052.6509]", + "[6378.8584 -8373.3506 -2052.5398]", + "[5866.7852 -8372.4004 -2052.2681]", + "[5335.9541 -8372.0313 -2052.4338]", + "[4805.5298 -8372.5449 -2052.3997]", + "[4275.4468 -8371.5918 -2052.4729]", + "[3745.6548 -8371.248 -2052.5276]", + "[3216.1892 -8372.7734 -2052.5508]", + "[2687.0459 -8372.5322 -2052.3765]", + "[2158.1482 -8371.5225 -2052.4597]", + "[1629.5778 -8371.9336 -2052.5303]", + "[1101.2441 -8371.5977 -2052.4661]", + "[573.2404 -8371.0986 -2052.5234]", + "[45.4441 -8372.5137 -2052.5103]", + "[-481.9927 -8371.7607 -2052.5378]", + "[-1009.1764 -8372.1758 -2052.4236]", + "[-1535.972 -8377.4434 -2052.3342]", + "[-2060.3823 -8430.6768 -2052.4434]", + "[-2580.187 -8508.1895 -2052.677]", + "[-3105.3872 -8512.3994 -2052.5518]", + "[-3628.2314 -8501.5791 -2052.6155]", + "[-4149.7036 -8501.3018 -2052.6113]", + "[-4669.5532 -8503.373 -2052.7092]", + "[-5188.207 -8501.9141 -2053.3628]", + "[-5706.1021 -8488.9395 -2053.2737]", + "[-6222.291 -8453.9697 -2053.5759]", + "[-6735.9492 -8398.9297 -2053.6487]", + "[-7245.8906 -8320.8643 -2053.5977]", + "[-7753.0186 -8217.918 -2053.4338]", + "[-8255.792 -8086.4063 -2053.5178]", + "[-8752.627 -7924.6743 -2053.886]", + "[-9240.5479 -7728.4819 -2053.4753]", + "[-9716.2227 -7495.5093 -2053.4917]", + "[-10159.5801 -7232.9131 -2053.2078]", + "[-10587.0186 -6928.0669 -2053.7085]", + "[-10978.6592 -6593.0605 -2053.458]", + "[-11344.6016 -6219.3208 -2053.6553]", + "[-11675.0811 -5813.2593 -2053.6208]", + "[-11968.7588 -5381.2227 -2053.6614]", + "[-12224.8818 -4927.1724 -2053.4617]", + "[-12444.666 -4455.7642 -2053.6912]", + "[-12630.1494 -3970.9351 -2053.4573]", + "[-12782.5781 -3475.874 -2053.5796]", + "[-12906.0703 -2973.866 -2053.7988]", + "[-13002.4111 -2467.0271 -2053.6895]", + "[-13074.6377 -1956.9883 -2053.4841]", + "[-13124.1611 -1445.0221 -2053.45]", + "[-13156.3359 -932.0745 -2053.3203]", + "[-13167.6406 -416.6568 -2053.2224]", + "[-13164.8242 100.329 -2041.5958]", + "[-13165.0332 612.4896 -1991.1337]", + "[-13164.252 1140.9675 -1929.1761]", + "[-13163.4697 1663.2073 -1867.2916]", + "[-13163.6963 2173.5012 -1805.6525]", + "[-13164.3936 2686.9014 -1743.4857]", + "[-13164.0381 3199.1189 -1682.385]", + "[-13164.7295 3724.9736 -1622.8882]", + "[-13164.5039 4248.7085 -1570.525]", + "[-13164.2393 4761.1416 -1535.6049]", + "[-13159.6191 5289.4346 -1537.2424]", + "[-13134.668 5807.3037 -1542.1442]", + "[-13090.29 6320.0698 -1541.7579]", + "[-13023.001 6832.1533 -1541.6268]", + "[-12932.5801 7344.4775 -1541.6919]", + "[-12816.0293 7845.625 -1541.7068]", + "[-12671.2021 8340.1572 -1541.7788]", + "[-12495.8105 8823.9834 -1541.6406]", + "[-12288.4395 9294.0684 -1541.3849]", + "[-12046.4834 9746.5684 -1541.6622]", + "[-11769.6572 10177.4229 -1541.496]", + "[-11445.6895 10596.8115 -1541.6633]", + "[-11086.0996 10984.001 -1541.5852]", + "[-10694.4492 11336.5449 -1541.5939]", + "[-10273.7256 11651.2676 -1541.7601]", + "[-9828.7305 11928.0762 -1541.7714]", + "[-9364.5273 12168.0557 -1541.6018]", + "[-8884.5596 12371.5557 -1541.6589]", + "[-8393.1953 12541.1211 -1541.5656]", + "[-7893.543 12678.8125 -1541.7142]", + "[-7388.3491 12788.6582 -1541.697]", + "[-6879.5024 12872.8926 -1541.5861]", + "[-6368.7617 12934.6582 -1541.5818]", + "[-5856.8511 12975.4932 -1541.3335]", + "[-5344.5889 12997.3184 -1541.3075]", + "[-4814.7217 13001.1016 -1540.9614]", + "[-4286.5151 12999.1689 -1541.2831]", + "[-3759.731 12996.5215 -1541.4001]", + "[-3234.2263 12997.4404 -1541.2435]", + "[-2709.5613 12998.0352 -1541.3162]", + "[-2185.3977 12997.8623 -1541.4597]", + "[-1661.6873 12998.0723 -1541.2994]", + "[-1138.344 12998.9023 -1541.4348]", + "[-615.4406 12997.6006 -1541.15]", + "[-92.9008 12998.0928 -1541.4762]", + "[429.2234 12998.1406 -1541.3488]", + "[950.9518 12997.9424 -1541.4386]", + "[1472.248 12996.6406 -1541.3926]", + "[1993.1547 12998.3857 -1541.3862]", + "[2513.6765 12997.3594 -1541.3412]", + "[3033.7915 12998.1094 -1541.3926]", + "[3553.5308 12996.8662 -1541.4769]", + "[4072.8911 12998.2021 -1541.3624]", + "[4591.7993 12998.1836 -1541.4078]", + "[5110.3892 12997.0273 -1541.3303]", + "[5628.4121 12995.2344 -1541.1134]", + "[6145.4883 12975.0469 -1541.1935]", + "[6660.3379 12934.9736 -1541.2072]", + "[7172.3096 12874.1367 -1541.193]", + "[7679.5874 12789.2051 -1541.1592]", + "[8181.8188 12680.0596 -1541.2634]", + "[8680.042 12541.334 -1541.2172]", + "[9172.3291 12371.4453 -1541.3251]", + "[9654.9619 12166.7168 -1541.3392]", + "[10124.0313 11925.0186 -1541.4407]", + "[10559.3848 11654.1465 -1541.2726]", + "[10973.1992 11346.2725 -1541.4731]", + "[11360.0889 11000.8154 -1541.3938]", + "[11717.3057 10620.583 -1541.1676]", + "[12039.9346 10207.4873 -1541.4185]", + "[12326.0459 9765.8164 -1541.4349]", + "[12577.0068 9299.5967 -1541.4396]", + "[12784.2871 8829.1592 -1541.2518]", + "[12960.8418 8341.8711 -1541.1401]", + "[13109.4512 7835.4521 -1541.0901]", + "[13226.2324 7328.416 -1541.0664]", + "[13315.7588 6821.957 -1540.675]", + "[13383.8809 6298.084 -1541.246]", + "[13427.4277 5785.2432 -1541.0844]", + "[13451.5352 5270.4424 -1541.2947]", + "[13458.4502 4756.3042 -1541.0153]", + "[13466.6016 4242.8794 -1541.1351]", + "[13530.1592 3733.385 -1540.9203]", + "[13594.5205 3204.7568 -1541.0776]", + "[13593.71 2672.647 -1540.9877]", + "[13584.8271 2142.6819 -1541.3376]", + "[13585.3281 1614.2472 -1541.1913]", + "[13586.4004 1086.6462 -1541.3838]", + "[13586.1602 560.2676 -1541.2251]", + "[13585.7822 33.7846 -1541.4098]", + "[13586.0547 -494.9305 -1541.3599]", + "[13584.6768 -1026.5519 -1541.2388]", + "[13582.7217 -1539.4579 -1541.6245]", + "[13562.7578 -2054.7063 -1541.4187]", + "[13521.3867 -2571.2476 -1540.9709]", + "[13457.2803 -3088.0608 -1541.1327]", + "[13369.6465 -3603.5042 -1541.4742]", + "[13254.8877 -4115.6616 -1541.5718]", + "[13111.8037 -4620.6094 -1541.5706]", + "[12937.1504 -5114.8086 -1541.2087]", + "[12728.2148 -5594.9116 -1541.6837]", + "[12484.2012 -6057.6021 -1541.4768]", + "[12202.4951 -6500.6289 -1541.7942]", + "[11881.9395 -6919.2842 -1541.6804]", + "[11523.4941 -7309.1069 -1541.5513]", + "[11128.9736 -7666.0186 -1541.5518]", + "[10720.0947 -7974.834 -1541.7311]", + "[10285.1982 -8249.8975 -1541.4165]", + "[9826.6816 -8488.9795 -1541.7312]", + "[9349.8008 -8694.5186 -1541.7349]", + "[8857.627 -8867.2178 -1541.4209]", + "[8353.498 -9009.6826 -1541.4563]", + "[7839.665 -9123.3223 -1541.2517]", + "[7318.6646 -9211.4414 -1541.3051]", + "[6791.6143 -9275.4141 -1541.3573]", + "[6260.064 -9316.4941 -1541.3945]", + "[5748.2139 -9337.6152 -1541.178]", + "[5233.8584 -9340.0625 -1540.244]", + "[4719.2559 -9337.0244 -1506.0637]", + "[4206.4995 -9336.1533 -1448.1193]", + "[3694.251 -9337.8887 -1387.7468]", + "[3165.1001 -9336.9316 -1324.488]", + "[2648.7715 -9337.2783 -1261.9082]", + "[2129.6497 -9337.8564 -1199.3351]", + "[1613.6412 -9337.5039 -1139.392]", + "[1102.6421 -9336.8154 -1084.123]", + "[577.6633 -9337.8857 -1037.7483]", + "[52.5909 -9337.0273 -1019.7256]", + "[-462.2903 -9322.457 -1028.2798]", + "[-974.6783 -9288.5771 -1029.728]", + "[-1494.0922 -9231.8213 -1029.2083]", + "[-2008.4642 -9152.6572 -1029.2161]", + "[-2519.3423 -9047.9033 -1029.374]", + "[-3023.7122 -8916.0293 -1029.2021]", + "[-3515.7639 -8754.9248 -1029.4292]", + "[-4008.6155 -8555.4961 -1029.2184]", + "[-4477.4785 -8324.1016 -1029.1855]", + "[-4935.438 -8050.3608 -1029.2473]", + "[-5358.6709 -7745.752 -1029.1427]", + "[-5759.5879 -7398.7939 -1029.1467]", + "[-6117.4648 -7027.8149 -1029.2581]", + "[-6444.749 -6620.6738 -1029.3602]", + "[-6740.0107 -6180.6899 -1029.3351]", + "[-6988.8853 -5733.1572 -1029.3491]", + "[-7206.1025 -5262.5132 -1029.3116]", + "[-7390.5479 -4772.9307 -1029.3926]", + "[-7543.3647 -4270.3926 -1029.1598]", + "[-7666.1982 -3760.4932 -1029.2373]", + "[-7761.4771 -3245.8286 -1028.9656]", + "[-7831.6582 -2728.0386 -1029.3768]", + "[-7879.9727 -2208.4712 -1028.8922]", + "[-7908.1558 -1688.0699 -1028.9636]", + "[-7917.2305 -1167.6785 -1028.9226]", + "[-7914.7373 -648.4221 -1028.7587]", + "[-7912.4053 -130.3569 -1028.3297]", + "[-7912.8232 386.4948 -1028.5565]", + "[-7913.7881 902.4293 -1028.5232]", + "[-7923.4233 1416.7654 -1028.2858]", + "[-7983.3037 1945.1472 -1027.8916]", + "[-8089.4839 2449.7749 -1028.5642]", + "[-8252.748 2940.1614 -1028.4469]", + "[-8481.8008 3404.9985 -1028.4761]", + "[-8790.1445 3838.7263 -1028.353]", + "[-9161.1963 4218.1226 -1027.96]", + "[-9463.4023 4650.0435 -1028.3253]", + "[-9656.5889 5069.5859 -1028.6995]", + "[-9808.9785 5569.6987 -1028.4226]", + "[-9904.3604 6077.9834 -1028.4509]", + "[-9955.1592 6589.2666 -1028.1882]", + "[-9968.5684 7120.1045 -1028.4927]", + "[-9939.2754 7647.6787 -1028.5541]", + "[-9848.2148 8167.0444 -1028.3865]", + "[-9678.5498 8665.2217 -1028.0532]", + "[-9463.0977 9053.8623 -1028.202]", + "[-9220.9111 9350.9346 -1028.3257]", + "[-8945.8633 9587.1045 -1028.2535]", + "[-8584.0156 9801.459 -1028.6742]", + "[-8117.709 9976.4229 -1028.0863]", + "[-7611.2749 10078.7754 -1028.428]", + "[-7097.9648 10120.4492 -1028.311]", + "[-6583.2393 10117.5039 -1028.3741]", + "[-6068.5903 10112.7354 -1028.3813]", + "[-5552.376 10111.2979 -1028.238]", + "[-5034.376 10111.2529 -1027.9865]", + "[-4514.2905 10112.2334 -1028.2152]", + "[-3991.811 10111.7227 -1028.2594]", + "[-3466.8467 10111.2637 -1028.1837]", + "[-2939.155 10110.7021 -1028.2001]", + "[-2408.8206 10111.8701 -1028.1902]", + "[-1896.1816 10111.1172 -1027.7898]", + "[-1380.7036 10111.7881 -1028.1722]", + "[-862.2703 10111.2314 -1028.538]", + "[-341.1248 10111.0039 -1028.5544]", + "[182.6624 10111.374 -1028.536]", + "[708.7059 10111.3701 -1028.4429]", + "[1237.0126 10109.9844 -1028.5737]", + "[1767.6818 10111.6631 -1028.4963]", + "[2300.8809 10110.6758 -1028.4691]", + "[2814.4448 10111.4668 -1028.5026]", + "[3327.9834 10111.0439 -1028.5503]", + "[3841.2561 10111.5156 -1028.4442]", + "[4354.3784 10111.0254 -1028.5344]", + "[4867.2197 10111.4316 -1028.5059]", + "[5379.8994 10112.002 -1028.4843]", + "[5892.3296 10111.2412 -1028.5427]", + "[6404.5 10111.8418 -1028.527]", + "[6937.5811 10111.5996 -1028.5309]", + "[7469.9248 10110.5693 -1028.2267]", + "[8001.6553 10111.7598 -1028.5439]", + "[8531.3906 10111.5898 -1028.6534]", + "[9049.7119 10111.5273 -1028.5643]", + "[9564.2344 10110.6328 -1028.5802]", + "[10094.3887 10095.1279 -1028.186]", + "[10617.5977 10030.377 -1028.3834]", + "[11130.7871 9913.7471 -1028.8464]", + "[11625.084 9736.043 -1028.4403]", + "[12087.1387 9489.4404 -1028.1979]", + "[12500.041 9170.3721 -1028.821]", + "[12836.6631 8798.8281 -1028.3081]", + "[13112.8037 8361.6904 -1028.4222]", + "[13316.5732 7890.2656 -1028.4137]", + "[13460.6807 7381.9136 -1028.8423]", + "[13548.0381 6864.1851 -1028.0669]", + "[13588.8867 6343.5439 -1028.1591]", + "[13592.9814 5824.0903 -1028.269]", + "[13587.3359 5306.9321 -1028.6403]", + "[13587.3516 4791.2344 -1028.3452]", + "[13615.6875 4277.3335 -1028.0099]", + "[13689.1797 3768.8696 -1028.545]", + "[13813.3574 3271.5027 -1028.1857]", + "[13997.8525 2790.8828 -1028.4882]", + "[14249.5781 2337.5496 -1028.1105]", + "[14575.6553 1929.4656 -1028.0773]", + "[14938.7305 1553.0513 -1027.9775]", + "[15070.0615 1356.6877 -1028.3285]", + "[15304.8457 885.0011 -1028.1261]", + "[15467.8516 382.9792 -1028.7291]", + "[15570.9658 -133.7225 -1028.761]", + "[15626.7686 -657.9975 -1028.1965]", + "[15642.6143 -1186.2397 -1028.5804]", + "[15635.5254 -1715.8186 -1028.5453]", + "[15635.2627 -2229.4919 -1028.5583]", + "[15635.8418 -2745.658 -1028.5939]", + "[15634.3438 -3264.8408 -1028.5647]", + "[15634.7422 -3787.2988 -1028.5002]", + "[15634.5586 -4313.4609 -1028.5656]", + "[15635.0283 -4843.4092 -1028.635]", + "[15635.1191 -5357.96 -1028.4991]", + "[15625.9863 -5875.8345 -1028.3479]", + "[15594.6523 -6396.1875 -1028.3618]", + "[15543.3037 -6918.23 -1028.5754]", + "[15466.5674 -7440.3086 -1028.2277]", + "[15365.1182 -7961.0776 -1028.7047]", + "[15239.4961 -8458.9766 -1028.2899]", + "[15084.5068 -8951.3408 -1028.3373]", + "[14895.7002 -9434.6172 -1028.4612]", + "[14672.0615 -9905.5391 -1028.7241]", + "[14410.9688 -10359.5391 -1028.7211]", + "[14111.5889 -10792.2266 -1028.6942]", + "[13773.1064 -11198.1377 -1028.6312]", + "[13398.7217 -11574.3965 -1028.8838]", + "[13005.0605 -11903.0781 -1028.7161]", + "[12583.3604 -12198.1396 -1028.589]", + "[12136.7471 -12458.1895 -1028.4686]", + "[11668.7129 -12682.4258 -1028.7809]", + "[11184.1133 -12873.3105 -1028.7317]", + "[10686.2754 -13032.8369 -1028.5526]", + "[10177.5879 -13161.7119 -1028.6149]", + "[9660.7656 -13264.585 -1028.5908]", + "[9137.1953 -13341.4883 -1028.2897]", + "[8608.417 -13394.9932 -1028.229]", + "[8097.0474 -13426.0352 -1028.5834]", + "[7582.8501 -13439.3633 -1028.5525]", + "[7066.5225 -13439.2344 -1028.4254]", + "[6548.1172 -13436.8516 -1028.5015]", + "[6027.5225 -13436.7744 -1028.6115]", + "[5505.6807 -13436.7529 -1028.5392]", + "[4984.0781 -13436.9063 -1028.5059]", + "[4462.833 -13435.8877 -1028.3076]", + "[3942.1189 -13422.7266 -1028.4282]", + "[3423.6738 -13364.084 -1028.6023]", + "[2912.666 -13259.459 -1028.4319]", + "[2412.3184 -13112.96 -1028.0537]", + "[1896.9385 -13034.4463 -1028.6333]", + "[1377.3362 -12998.6895 -1028.2415]", + "[855.6964 -12997.8164 -1028.3213]", + "[335.3805 -13004.2598 -1028.4016]", + "[-185.7705 -13005.502 -1028.5439]", + "[-706.3777 -13004.0146 -1028.5046]", + "[-1227.3524 -13003.6953 -1028.4945]", + "[-1747.9712 -13004.1152 -1028.3564]", + "[-2269.3828 -13003.6807 -1028.5011]", + "[-2790.6143 -13004.0957 -1028.2886]", + "[-3311.5317 -12998.5674 -1028.4717]", + "[-3831.6436 -12973.3398 -1028.514]", + "[-4350.6621 -12926.1279 -1028.3385]", + "[-4867.3013 -12856.5693 -1028.7118]", + "[-5379.6016 -12763.252 -1028.5726]", + "[-5886.4771 -12642.21 -1028.6482]", + "[-6385.3052 -12493.4365 -1028.3375]", + "[-6874.0874 -12312.1113 -1028.6072]", + "[-7348.166 -12096.6553 -1028.7302]", + "[-7804.8447 -11846.001 -1028.6066]", + "[-8239.4736 -11559.3008 -1028.5891]", + "[-8647.2744 -11234.9111 -1028.6503]", + "[-9024.6943 -10876.084 -1028.7863]", + "[-9368.0674 -10484.0811 -1028.5878]", + "[-9675.4648 -10063.9238 -1028.7897]", + "[-9946.708 -9618.9902 -1028.632]", + "[-10181.3789 -9154.4004 -1028.4169]", + "[-10381.2246 -8673.3535 -1028.5145]", + "[-10548.1455 -8180.499 -1028.2842]", + "[-10683.1299 -7677.5776 -1028.4907]", + "[-10790.9453 -7168.5088 -1028.568]", + "[-10872.9863 -6654.3662 -1028.5123]", + "[-10932.0791 -6137.4263 -1028.6155]", + "[-10969.0723 -5618.1792 -1028.3607]", + "[-10989.1729 -5098.3164 -1027.8892]", + "[-10990.4424 -4577.6865 -1028.6016]", + "[-10987.7627 -4057.4263 -1028.4821]", + "[-10987.7861 -3537.2788 -1028.4529]", + "[-10987.0459 -3017.0984 -1028.4578]", + "[-10988.335 -2494.6763 -1028.4537]", + "[-10986.627 -1969.4053 -1028.5275]", + "[-10987.7168 -1441.0894 -1028.3724]", + "[-10987.4766 -907.4452 -1028.4949]", + "[-10985.9043 -389.5524 -1020.4001]", + "[-10987.7559 129.8775 -972.9949]", + "[-10986.8682 651.3147 -912.5797]", + "[-10986.3564 1171.8145 -851.3204]", + "[-10987.5254 1684.2804 -789.4381]", + "[-10987.8047 2203.7371 -726.5199]", + "[-10986.8701 2722.3181 -664.3768]", + "[-10986.7324 3236.2417 -605.8182]", + "[-10987.915 3763.1318 -551.9166]", + "[-10987.1709 4286.1123 -512.5119]", + "[-10987.3467 4813.8501 -511.7914]", + "[-10988.1133 5336.5459 -516.4019]", + "[-10983.1738 5863.9375 -515.597]", + "[-10958.9043 6388.022 -515.4362]", + "[-10914.1943 6912.1758 -515.5573]", + "[-10846.6045 7435.9116 -515.6812]", + "[-10753.0713 7954.8467 -515.6451]", + "[-10634.6084 8463.6533 -515.5009]", + "[-10489.8066 8957.8652 -515.6594]", + "[-10309.9961 9449.1738 -515.4893]", + "[-10096.0303 9927.4375 -515.4351]", + "[-9846.6582 10387.375 -515.6052]", + "[-9561.126 10824.5957 -515.659]", + "[-9239.2939 11234.5527 -515.6867]", + "[-8882.1543 11613.207 -515.5002]", + "[-8493.6016 11957.8428 -515.6819]", + "[-8077.4214 12266.7422 -515.5368]", + "[-7637.4292 12538.7568 -515.6761]", + "[-7177.9805 12774.0703 -515.4595]", + "[-6703.8164 12975.2744 -515.4515]", + "[-6217.7212 13142.5615 -515.6479]", + "[-5723.1851 13279.0029 -515.638]", + "[-5202.0161 13391.8848 -515.5128]", + "[-4676.7656 13478.0732 -515.587]", + "[-4148.981 13540.5898 -515.3599]", + "[-3619.6367 13580.2051 -515.5587]", + "[-3089.9404 13600.165 -515.5168]", + "[-2560.4526 13600.7988 -515.0905]", + "[-2031.8503 13599.5869 -515.4547]", + "[-1504.3356 13597.9717 -515.2592]", + "[-977.7194 13599.3066 -515.4128]", + "[-451.8582 13597.457 -515.1142]", + "[73.5625 13597.6006 -515.5234]", + "[598.5425 13598.3906 -515.4183]", + "[1123.2791 13597.6387 -515.4067]", + "[1647.6843 13599.1895 -515.4238]", + "[2171.6377 13591.7061 -515.4439]", + "[2693.7842 13549.0039 -515.3986]", + "[3210.2302 13462.0645 -515.257]", + "[3729.8826 13411.5391 -515.4219]", + "[4251.4775 13408.583 -515.5414]", + "[4771.7715 13415.0674 -515.3765]", + "[5291.0991 13415.9258 -515.2849]", + "[5809.9438 13415.0479 -515.4307]", + "[6328.1479 13415.3154 -515.4469]", + "[6845.668 13403.4521 -515.5491]", + "[7361.9551 13370.2725 -515.407]", + "[7875.9878 13316.1514 -515.2286]", + "[8386.6289 13240.2822 -515.4998]", + "[8892.3525 13139.9385 -515.0775]", + "[9391.1777 13012.3213 -515.4327]", + "[9880.6055 12856.1045 -515.5302]", + "[10358.1484 12668.583 -515.3146]", + "[10837.8584 12438.6836 -515.7476]", + "[11296.7998 12172.3828 -515.7654]", + "[11730.3701 11868.4404 -515.5185]", + "[12134.1982 11527.1787 -515.5427]", + "[12504.9746 11151.8271 -515.6703]", + "[12839.5469 10745.4805 -515.7141]", + "[13136.3447 10312.1484 -515.7708]", + "[13395.2451 9856.4434 -515.4711]", + "[13617.8418 9383.2607 -515.466]", + "[13804.8672 8896.1865 -515.3803]", + "[13959.1094 8398.9258 -515.6524]", + "[14083.1836 7894.3735 -515.3845]", + "[14180.6289 7384.9146 -515.6392]", + "[14252.6611 6872.1841 -515.677]", + "[14304.4414 6357.8125 -515.3991]", + "[14334.7148 5842.3311 -515.2123]", + "[14347.0039 5326.7285 -515.527]", + "[14344.4668 4811.9492 -515.6722]", + "[14343.2061 4298.1997 -515.349]", + "[14342.79 3785.2051 -515.4145]", + "[14342.874 3272.6848 -515.4724]", + "[14343.7949 2741.4531 -515.4598]", + "[14342.9893 2211.6904 -514.9091]", + "[14343.2773 1683.1777 -515.5036]", + "[14343.1777 1155.9335 -515.3877]", + "[14333.8955 629.5257 -515.4845]", + "[14279.6611 106.6186 -514.9543]", + "[14173.623 -407.3073 -515.0877]", + "[14010.5225 -904.292 -515.319]", + "[13780.209 -1372.7489 -515.9241]", + "[13477.8232 -1795.7039 -515.6087]", + "[13107.2656 -2157.2634 -515.2153]", + "[12680.7559 -2446.6399 -515.3792]", + "[12216.2588 -2663.0686 -515.0036]", + "[11711.8818 -2818.3528 -515.2822]", + "[11196.5977 -2915.2156 -515.3552]", + "[10677.5684 -2964.6511 -515.4235]", + "[10158.9775 -2975.408 -515.111]", + "[9644.1113 -2922.418 -514.9666]", + "[9200.4863 -2796.0081 -515.2532]", + "[8731.9297 -2584.2876 -515.2516]", + "[8282.0059 -2309.5178 -515.6107]", + "[7864.1499 -1993.5638 -515.7383]", + "[7474.2358 -1649.2063 -515.3907]", + "[7108.0854 -1283.7715 -515.2853]", + "[6718.4111 -947.1592 -515.6123]", + "[6299.1694 -650.4246 -515.597]", + "[5852.3091 -399.5246 -515.4842]", + "[5361.6484 -202.5474 -515.659]", + "[4847.8384 -81.9985 -515.2808]", + "[4321.9658 -51.9842 -514.9003]", + "[3799.251 -69.0468 -515.3041]", + "[3282.804 -55.8641 -515.5439]", + "[2760.7729 3.8533 -515.5925]", + "[2241.5652 92.0423 -515.2516]", + "[1727.7651 119.0765 -515.7043]", + "[1208.6766 116.7357 -515.5927]", + "[685.6585 113.1979 -515.4755]", + "[162.8213 113.3471 -515.5806]", + "[-356.9478 112.6301 -515.5504]", + "[-873.0569 112.4636 -515.535]", + "[-1392.8271 113.6103 -515.5085]", + "[-1911.0393 112.5414 -515.4705]", + "[-2425.5569 113.224 -515.5062]", + "[-2942.7634 113.2976 -515.5357]", + "[-3458.3286 112.0169 -515.4557]", + "[-3972.3398 112.5789 -515.4799]", + "[-4300.6641 112.5816 -515.4665]" + ], + + [ + "[1418.0894 -15544.2813 -3.4833]", + "[1517.1965 -15524.3164 -3.5151]", + "[2014.2781 -15391.6934 -3.5163]", + "[2522.0852 -15293.0625 -3.4723]", + "[3036.8135 -15245.4854 -3.5732]", + "[3554.0891 -15232.7188 -3.425]", + "[4070.7148 -15228.584 -3.4762]", + "[4578.897 -15154.4131 -3.4497]", + "[5075.6924 -15023.8057 -3.4773]", + "[5163.7607 -15007.6865 -3.4524]" + ], + + [ + "[15522.2793 4958.9438 -3.4839]", + "[15501.6152 4859.7598 -3.5677]", + "[15367.6104 4364.105 -3.486]", + "[15272.1729 3860.0969 -3.6701]", + "[15224.8447 3348.3726 -3.2372]", + "[15213.5811 2830.7056 -3.6097]", + "[15208.2666 2313.6699 -3.7431]", + "[15132.7959 1804.8538 -3.9575]", + "[15027.207 1402.1848 -3.7954]" + ], + + [ + "[-8529.8672 2287.5073 -4612.4185]", + "[-8448.877 2347.175 -4612.4448]", + "[-8012.3823 2618.7004 -4612.4087]", + "[-7574.353 2886.5784 -4612.4966]", + "[-7166.4702 3197.4871 -4612.2417]", + "[-6785.8472 3543.5471 -4612.5537]", + "[-6418.4521 3905.9219 -4612.813]", + "[-6056.146 4272.6162 -4612.8833]", + "[-5693.9717 4636.9331 -4612.835]", + "[-5329.3047 5002.6665 -4612.8828]", + "[-4963.8423 5366.356 -4612.9482]", + "[-4600.6514 5730.3438 -4612.9287]", + "[-4237.7334 6091.8569 -4612.9736]", + "[-3873.3467 6456.375 -4612.8853]", + "[-3508.1853 6822.3877 -4612.9292]", + "[-3146.042 7184.3315 -4612.8867]", + "[-2785.1316 7547.8677 -4612.7109]", + "[-2432.3113 7919.792 -4612.3232]", + "[-2101.4189 8313.0791 -4612.3149]", + "[-1808.4045 8733.8086 -4612.4131]", + "[-1563.7454 9137.875 -4612.3433]" + ], + + [ + "[-3631.7786 9855.7402 -4612.3892]", + "[-3715.2517 9795.3789 -4612.1782]", + "[-4155.8379 9531.6777 -4612.4072]", + "[-4590.6323 9256.6523 -4612.3467]", + "[-4996.3086 8935.7988 -4612.3657]", + "[-5376.1494 8583.9854 -4612.3442]", + "[-5743.0303 8217.7158 -4612.9297]", + "[-6104.1455 7850.4229 -4612.8496]", + "[-6467.9751 7488.7695 -4612.7715]", + "[-6834.3442 7122.4829 -4613.0029]", + "[-7198.2412 6757.8306 -4612.8003]", + "[-7565.0591 6391.042 -4612.8691]", + "[-7928.7979 6027.4014 -4612.8965]", + "[-8293.7734 5662.7021 -4612.8677]", + "[-8659.0938 5297.8457 -4612.9194]", + "[-9022.9795 4933.6323 -4612.8491]", + "[-9382.5039 4568.7969 -4612.2881]", + "[-9732.0684 4194.0229 -4612.1392]", + "[-10056.3506 3795.0916 -4612.3872]", + "[-10343.9717 3369.4338 -4612.4312]", + "[-10604.7969 2928.6499 -4612.3955]", + "[-10617.7686 2906.29 -4612.3428]" + ], + + [ + "[-15634.6484 1857.9882 -1027.4821]", + "[-15614.0352 1757.7808 -1027.5134]", + "[-15481.3545 1262.9886 -1027.5508]", + "[-15384.2256 753.9662 -1027.4318]", + "[-15337.1641 239.1772 -1027.5139]", + "[-15325.4053 -277.7035 -1027.4701]", + "[-15329.2891 -791.351 -1028.3729]", + "[-15331.502 -1305.0642 -1028.1204]", + "[-15330.7832 -1823.1929 -1028.0975]", + "[-15330.085 -2336.5957 -1028.1237]", + "[-15331.8232 -2854.4434 -1027.4188]", + "[-15331.9551 -3367.8694 -1027.538]", + "[-15331.5527 -3883.2227 -1027.509]", + "[-15330.5156 -4395.6479 -1027.5009]", + "[-15332.0342 -4909.5469 -1027.5023]", + "[-15331.8184 -5423.6973 -1027.5206]", + "[-15332.1611 -5936.1187 -1027.5029]", + "[-15332.0918 -6449.8877 -1027.5696]", + "[-15331.2832 -6962.8047 -1027.4727]", + "[-15331.3916 -7426.7646 -1027.4517]" + ], + + [], + + [ + "[-15314.7852 -1994.1582 -1028.2877]", + "[-15303.207 -1891.1458 -1028.2061]", + "[-15201.3311 -1389.1328 -1028.4791]", + "[-15083.8096 -887.9016 -1028.3721]", + "[-15049.7744 -374.971 -1028.4843]", + "[-15055.2627 140.7107 -1027.306]", + "[-15022.3906 654.5657 -1027.6285]", + "[-14943.9541 1163.0745 -1027.3719]", + "[-14826.8701 1662.8907 -1027.5944]", + "[-14728.1055 2068.3977 -1027.439]" + ], + + [ + "[-4712.186 11081.7471 -1028.162]", + "[-4613.3169 11065.4629 -1028.2703]", + "[-4115.9463 10940.1689 -1028.2494]", + "[-3630.2388 10768.1836 -1028.265]", + "[-3160.5681 10555.9316 -1028.2617]", + "[-2685.1477 10354.1787 -1028.3179]", + "[-2192.8066 10211.002 -1028.3059]", + "[-1921.3531 10153.6953 -1028.2396]" + ] +] diff --git a/lua/metrostroi_data/track_gm_mus_neoorange_d.lua b/lua/metrostroi_data/track_gm_mus_neoorange_d.lua new file mode 100644 index 0000000..fcfa46c --- /dev/null +++ b/lua/metrostroi_data/track_gm_mus_neoorange_d.lua @@ -0,0 +1,3828 @@ + +[ + + [ + "[8478.0322 -2971.4001 -873.1917]", + "[8478.4268 -2459.0334 -873.4451]", + "[8478.5557 -1944.7709 -873.5171]", + "[8478.6826 -1429.4919 -873.5341]", + "[8477.833 -917.1365 -873.6016]", + "[8477.4951 -404.02 -873.592]", + "[8478.5107 111.0541 -873.5033]", + "[8478.9229 623.5069 -873.5626]", + "[8477.5078 1139.1943 -873.6268]", + "[8477.3799 1654.2622 -873.0605]", + "[8478.4492 2172.2188 -873.0431]", + "[8478.083 2691.0371 -872.6336]", + "[8478.584 3207.4155 -873.0054]", + "[8478.5254 3726.7305 -872.7369]", + "[8476.5479 4244.6494 -873.0234]", + "[8471.9746 4761.5898 -873.097]", + "[8487.0078 5276.5933 -873.0506]", + "[8539.6631 5786.7837 -872.9263]", + "[8644.9668 6293.6929 -873.0515]", + "[8777.2285 6793.7603 -873.2217]", + "[8844.7676 7304.0186 -873.0331]", + "[8847.4219 7823.0723 -873.063]", + "[8847.1855 8339.6328 -873.0273]", + "[8852.7461 8853.3066 -873.0129]", + "[8857.5918 9371.2881 -872.9814]", + "[8819.5293 9882.6436 -873.2124]", + "[8727.9551 10388.8018 -873.4056]", + "[8565.5488 10877.6689 -873.6776]", + "[8363.4424 11251.6533 -874.0392]", + "[8110.6987 11570.0029 -873.9417]", + "[7866.1792 11785.9727 -874.2592]", + "[7428.3975 12055.6816 -873.7351]", + "[7093.228 12188.5938 -873.652]", + "[6595.9775 12314.9316 -873.1432]", + "[6082.6177 12376.8252 -872.8925]", + "[5568.0171 12382.9043 -872.9748]", + "[5054.8267 12383.4932 -872.9476]", + "[4536.3472 12385.2578 -873.0604]", + "[4019.3291 12384.7607 -872.8196]", + "[3503.8801 12384.8447 -873.2186]", + "[2989.8557 12383.6797 -873.1189]", + "[2477.3162 12384.4746 -873.2917]", + "[1959.3962 12384.125 -872.9824]", + "[1445.6348 12384.6787 -873.1368]", + "[927.0203 12385 -873.0265]", + "[411.2011 12385.0605 -873.1493]", + "[-103.2861 12383.1465 -873.0137]", + "[-621.0684 12368.6064 -873.407]", + "[-1137.3872 12394.4941 -873.4958]", + "[-1637.9579 12506.4902 -873.5634]", + "[-2117.6194 12694.4561 -873.7047]", + "[-2566.9175 12940.9756 -873.6651]", + "[-2991.8093 13236.2979 -873.4235]", + "[-3385.468 13569.7559 -873.4841]", + "[-3749.7549 13933.1221 -873.6221]", + "[-4131.5205 14275.6758 -873.4536]", + "[-4543.248 14591.2646 -873.8282]", + "[-4981.6748 14865.834 -873.7994]", + "[-5448.5562 15086.4902 -873.6518]", + "[-5940.6357 15233.7861 -873.3683]", + "[-6331.6636 15279.2002 -873.0428]", + "[-6846.249 15280.667 -874.2598]", + "[-7360.374 15283.1445 -874.3107]", + "[-7877.0366 15283.3652 -874.2433]", + "[-8393.2754 15266.9521 -874.2156]", + "[-8906.1045 15232.4287 -874.1486]", + "[-9421.6689 15176.6787 -874.1869]", + "[-9928.2773 15100.4785 -874.4028]", + "[-10431.9023 14998.373 -874.2645]", + "[-10929.8994 14869.5762 -874.2092]", + "[-11419.1123 14711.8193 -874.1365]", + "[-11895.4619 14522.3047 -874.4146]", + "[-12364.5254 14295.6729 -874.5035]", + "[-12811.9453 14033.7744 -874.4442]", + "[-13233.3965 13737.752 -874.4738]", + "[-13633.208 13402.2881 -874.32]", + "[-13998.2061 13035.2188 -874.1624]", + "[-14325.8525 12640.6377 -874.3132]", + "[-14621.1885 12214.1436 -874.163]", + "[-14877.166 11769.2949 -874.2947]", + "[-15101.5352 11301.5264 -874.3624]", + "[-15289.9824 10824.5918 -874.3228]", + "[-15448.0576 10331.3926 -874.2375]", + "[-15576.6484 9824.3701 -874.1827]", + "[-15677.167 9317.7627 -874.2638]", + "[-15753.4912 8801.3867 -874.0285]", + "[-15806.7832 8288.2363 -873.8878]", + "[-15839.5869 7767.8535 -874.3059]", + "[-15850.8232 7253.4683 -874.2295]", + "[-15850.499 6733.873 -874.2028]", + "[-15849.5498 6221.6577 -874.3381]", + "[-15850.6123 5704.8491 -874.3034]", + "[-15850.4219 5183.3613 -874.3196]", + "[-15850.9639 4670.1509 -874.1624]", + "[-15850.6025 4152.7813 -874.0486]", + "[-15850.9121 3631.239 -874.2169]", + "[-15850.042 3118.7163 -874.3412]", + "[-15850.7119 2602.3132 -874.241]", + "[-15849.7051 2082.1108 -874.2742]", + "[-15849.1172 1558.166 -874.1771]", + "[-15850.2402 1044.0753 -874.2065]", + "[-15850.3135 526.5417 -874.2016]", + "[-15849.877 5.7485 -874.1265]", + "[-15849.3604 -515.6547 -874.2029]", + "[-15850.4219 -1036.8617 -874.3558]", + "[-15850.8574 -1557.7832 -874.3024]", + "[-15850.2715 -2077.301 -874.0825]", + "[-15850.2441 -2591.3398 -874.1964]", + "[-15850.8232 -3108.8984 -874.2314]", + "[-15849.5049 -3624.4609 -874.2164]", + "[-15849.875 -4144.6343 -874.04]", + "[-15849.5664 -4665.0659 -873.9789]", + "[-15849.8174 -5183.7783 -874.2544]", + "[-15854.0977 -5701.4443 -874.0784]", + "[-15850.4346 -6218.8579 -874.261]", + "[-15828.8096 -6735.3135 -873.9937]", + "[-15788.9268 -7250.1738 -874.1991]", + "[-15727.8447 -7762.2959 -874.3011]", + "[-15643.2266 -8270.041 -874.1089]", + "[-15532.3916 -8778.1133 -874.1037]", + "[-15394.0703 -9274.1387 -874.4082]", + "[-15225.6797 -9762.4844 -874.3348]", + "[-15023.8965 -10240.2031 -874.465]", + "[-14788.8564 -10698.1543 -874.3873]", + "[-14519.2832 -11134.2881 -874.3782]", + "[-14209.415 -11553.9307 -874.2958]", + "[-13863.1797 -11942.623 -874.244]", + "[-13484.1855 -12297.9336 -874.2314]", + "[-13076.1494 -12617.7119 -874.2112]", + "[-12643.7031 -12902.083 -874.3673]", + "[-12189.4746 -13148.1201 -874.2319]", + "[-11719.2881 -13360.2832 -874.3151]", + "[-11236.0664 -13539.041 -874.293]", + "[-10742.9277 -13686.0625 -874.1588]", + "[-10242.7197 -13804.2002 -873.9583]", + "[-9737.5811 -13896.1523 -874.052]", + "[-9229.4346 -13965.3916 -874.2169]", + "[-8719.1826 -14011.9502 -874.382]", + "[-8198.3447 -14039.6865 -874.2087]", + "[-7685.6899 -14045.2637 -874.0024]", + "[-7172.3232 -14046.0381 -874.2743]", + "[-6659.9604 -14044.9287 -873.8234]", + "[-6138.9297 -14045.8955 -875.0693]", + "[-5619.0449 -14044.5342 -877.8431]", + "[-5098.5879 -14044.54 -866.2568]", + "[-4586.7017 -14046.5088 -848.449]", + "[-4074.1162 -14044.8271 -830.678]", + "[-3560.6443 -14045.3818 -812.6542]", + "[-3046.3118 -14044.4023 -794.5586]", + "[-2531.2212 -14045.9746 -776.7686]", + "[-2015.5402 -14044.3877 -758.5551]", + "[-1499.3123 -14045.46 -740.5274]", + "[-982.6218 -14044.3584 -722.6798]", + "[-465.5461 -14045.918 -704.3268]", + "[51.9407 -14044.9336 -686.4535]", + "[569.5031 -14045.4785 -668.4922]", + "[1087.9554 -14044.6543 -650.2586]", + "[1608.1893 -14045.9746 -632.2112]", + "[2125.6108 -14045.9863 -614.3197]", + "[2637.877 -14045.0107 -594.494]", + "[3156.582 -14044.9805 -574.2377]", + "[3672.7681 -14044.4365 -573.2555]", + "[4188.4785 -14044.8574 -573.1011]", + "[4703.7622 -14043.834 -573.179]", + "[5218.4722 -14046.2051 -573.1893]", + "[5732.7334 -14048.2041 -573.2449]", + "[6246.3579 -14036.0234 -573.2847]", + "[6758.6611 -14006.3691 -573.4182]", + "[7268.9141 -13957.1553 -573.1478]", + "[7785.2822 -13884.3096 -573.2723]", + "[8296.7803 -13786.3389 -572.882]", + "[8801.4063 -13662.458 -572.9899]", + "[9296.6875 -13508.2598 -573.095]", + "[9780.4268 -13323.8379 -573.3663]", + "[10248.8896 -13105.6699 -573.4025]", + "[10698.2891 -12852.6348 -573.4326]", + "[11125.0918 -12564.9854 -573.369]", + "[11523.8379 -12241.4746 -573.252]", + "[11891.5732 -11884.8584 -573.166]", + "[12231.5205 -11490.7813 -573.1564]", + "[12534.6318 -11069.1621 -573.438]", + "[12801.5791 -10624.9717 -573.5222]", + "[13032.3604 -10162.0283 -573.5448]", + "[13228.5898 -9684.3369 -573.3311]", + "[13392.4658 -9195.3887 -573.2411]", + "[13525.4023 -8697.8447 -573.216]", + "[13630.8125 -8194.2295 -573.2806]", + "[13711.7646 -7683.9531 -573.1228]", + "[13770.9141 -7166.8188 -573.2412]", + "[13808.2432 -6653.1338 -573.0116]", + "[13824.0928 -6131.9785 -573.2284]", + "[13824.1807 -5611.2007 -573.212]", + "[13824.7744 -5092.0269 -573.0065]", + "[13823.9043 -4571.5205 -573.1321]", + "[13824.9502 -4050.7671 -575.9811]", + "[13825.2891 -3537.72 -573.0974]", + "[13824.1367 -3016.686 -555.4332]", + "[13825.8398 -2503.9385 -537.8857]", + "[13823.9248 -1991.0723 -519.7545]", + "[13825.6797 -1467.6304 -501.6129]", + "[13823.8271 -947.0621 -483.2996]", + "[13825.4023 -430.8416 -465.2676]", + "[13824.3867 91.061 -446.7625]", + "[13825.2891 610.6699 -428.907]", + "[13824.6338 1134.6423 -410.7193]", + "[13824.4922 1649.9634 -392.5674]", + "[13824.585 2168.4094 -374.6409]", + "[13825.4453 2689.1714 -356.3101]", + "[13824.9502 3201.5291 -338.319]", + "[13826.0293 3718.2153 -319.2494]", + "[13825.0938 4241.0366 -301.6648]", + "[13824.6143 4760.6699 -279.3008]", + "[13825.291 5282.4624 -271.906]", + "[13823.7295 5797.4727 -272.02]", + "[13824.8584 6319.2378 -272.3542]", + "[13824.4609 6832.3501 -272.15]", + "[13827.0059 7353.6851 -271.3212]", + "[13821.8076 7874.3149 -271.4185]", + "[13798.6729 8394.0459 -271.6694]", + "[13753.7646 8911.7891 -271.8925]", + "[13689.8057 9427.1211 -271.8174]", + "[13600.6797 9938.0127 -271.8913]", + "[13485.6201 10443.04 -271.2162]", + "[13342.7725 10939.873 -271.6479]", + "[13169.3945 11426.042 -271.7024]", + "[12963.0469 11898.0273 -271.7724]", + "[12723.1338 12352.9141 -271.8369]", + "[12446.6416 12785.3096 -272.0905]", + "[12137.4336 13193.6846 -271.7477]", + "[11787.1201 13578.9443 -272.0124]", + "[11404.4092 13930.417 -271.9264]", + "[10992.9453 14246.0635 -271.7153]", + "[10556.0771 14523.5664 -271.7037]", + "[10099.3037 14764.8652 -271.621]", + "[9626.8643 14971.3857 -271.9422]", + "[9142.5068 15146.3945 -271.7022]", + "[8648.6641 15289.8838 -271.5782]", + "[8148.1807 15404.3213 -271.7079]", + "[7638.5503 15493.5742 -271.6951]", + "[7128.0322 15558.6797 -271.6344]", + "[6616.1919 15602.6055 -271.5572]", + "[6103.0005 15626.3721 -271.9435]", + "[5587.1587 15630.877 -271.3286]", + "[5072.2275 15630.8896 -271.1177]", + "[4558.0068 15631 -271.0636]", + "[4044.7009 15631.4102 -271.1229]", + "[3532.5249 15632.3447 -271.0826]", + "[3014.3877 15632.1885 -271.0517]", + "[2497.803 15631.9863 -271.1314]", + "[1982.8236 15631.0781 -271.1297]", + "[1469.2145 15631.0137 -270.8669]", + "[956.8633 15631.6025 -270.9155]", + "[438.0605 15632.4805 -270.4796]", + "[-79.8921 15632.2412 -270.6337]", + "[-597.042 15631.4795 -270.6269]", + "[-1113.3871 15630.4902 -270.6306]", + "[-1628.8911 15631.0664 -270.5854]", + "[-2143.5645 15631.5889 -270.585]", + "[-2657.4019 15632.002 -270.6033]", + "[-3170.3906 15631.4375 -270.6145]", + "[-3682.6125 15631.1748 -270.5835]", + "[-4201.3354 15632.332 -270.6263]", + "[-4719.1792 15632.0088 -271.5641]", + "[-5235.7979 15631.2236 -271.5691]", + "[-5750.8682 15630.3262 -271.9836]", + "[-6264.3848 15630.5752 -272.0586]", + "[-6776.4756 15631.6016 -271.983]", + "[-7294.0264 15634.2305 -272.1285]", + "[-7810.1968 15631.6348 -271.7321]", + "[-8324.8203 15613.1709 -271.8151]", + "[-8839.79 15575.4492 -271.522]", + "[-9351.7715 15517.001 -271.7552]", + "[-9860.7373 15434.8428 -271.7143]", + "[-10367.8857 15327.3086 -271.7905]", + "[-10865.0586 15192.8047 -272.1297]", + "[-11350.9766 15029.4473 -271.9003]", + "[-11825.1113 14835.6279 -271.9791]", + "[-12290.0635 14604.2393 -271.8336]", + "[-12733.6357 14336.918 -271.9339]", + "[-13151.9199 14033.4883 -271.9188]", + "[-13543.8643 13693.4521 -271.6602]", + "[-13899.96 13322.2207 -272.0262]", + "[-14225.3545 12917.9258 -272.0427]", + "[-14516.1953 12488.1807 -271.9132]", + "[-14768.1416 12039.0459 -272.0133]", + "[-14984.3633 11573.7734 -271.7474]", + "[-15169.25 11086.1465 -271.6922]", + "[-15321.2432 10591.4531 -271.532]", + "[-15443.9004 10085.3867 -271.7633]", + "[-15540.3291 9582.4414 -271.9257]", + "[-15611.3848 9075.2949 -271.785]", + "[-15663.123 8556.0898 -271.5418]", + "[-15690.8164 8037.0752 -271.5878]", + "[-15699.6016 7521.3384 -271.6463]", + "[-15699.0186 7000.6597 -271.9592]", + "[-15699.2227 6488.3779 -271.5013]", + "[-15700.6426 5976.0815 -274.5654]", + "[-15699.7344 5453.2158 -269.939]", + "[-15700.1855 4932.0337 -252.6192]", + "[-15699.5029 4413.0513 -234.3242]", + "[-15698.8945 3896.6506 -216.2823]", + "[-15699.9004 3382.6106 -198.3133]", + "[-15699.8896 2870.554 -180.3879]", + "[-15699.498 2349.8132 -162.0566]", + "[-15699.791 1830.9778 -143.943]", + "[-15698.9912 1314.0045 -125.8334]", + "[-15699.3359 799.1436 -108.2634]", + "[-15699.5762 285.9623 -90.0255]", + "[-15699.7402 -236.2108 -72.0652]", + "[-15699.4912 -755.8882 -53.3517]", + "[-15700.0381 -1271.4067 -35.6974]", + "[-15699.2324 -1789.4545 -17.8279]", + "[-15699.3262 -2301.5198 0.3003]", + "[-15698.4336 -2820.0454 22.9055]", + "[-15699.125 -3335.9316 29.8435]", + "[-15700.1602 -3850.9766 29.4557]", + "[-15699.209 -4365.751 29.5312]", + "[-15699.7412 -4880.2085 29.4137]", + "[-15699.2324 -5394.1509 29.576]", + "[-15700.8896 -5907.6182 29.3655]", + "[-15701.7656 -6420.5854 29.7374]", + "[-15696.5479 -6932.8735 29.4671]", + "[-15673.4844 -7454.2021 29.4756]", + "[-15629.5166 -7973.3936 29.2471]", + "[-15564.5459 -8489.71 29.1612]", + "[-15475.6465 -9001.8232 29.1567]", + "[-15360.5137 -9508.0225 29.6935]", + "[-15217.9668 -10006.2324 29.4762]", + "[-15043.2451 -10493.0098 29.3236]", + "[-14836.0908 -10965.8691 29.1917]", + "[-14595.0742 -11421.4971 29.2106]", + "[-14318.4199 -11855.1699 28.965]", + "[-14007.6475 -12263.6826 29.1429]", + "[-13662.792 -12642.5713 29.1519]", + "[-13278.7402 -12994.9121 29.2989]", + "[-12865.4219 -13310.7676 29.3388]", + "[-12427.6299 -13589.9297 29.4691]", + "[-11969.2061 -13831.9199 29.4984]", + "[-11494.7266 -14038.5107 29.5341]", + "[-11008.2832 -14213.29 29.1046]", + "[-10511.4385 -14356.1357 29.2658]", + "[-10004.9336 -14472.1875 29.3662]", + "[-9499.4541 -14559.8721 29.3337]", + "[-8986.3564 -14624.7979 29.297]", + "[-8473.1348 -14668.5859 29.4967]", + "[-7960.1294 -14691.5957 29.4009]", + "[-7447.7817 -14696.2285 29.3912]", + "[-6926.689 -14695.2588 29.3425]", + "[-6408.4688 -14695.8506 29.2136]", + "[-5895.5864 -14696.4326 29.5937]", + "[-5379.3931 -14694.335 29.5989]", + "[-4862.5273 -14695.8223 28.1457]", + "[-4347.0303 -14694.9893 26.1281]", + "[-3832.918 -14695.2871 40.3003]", + "[-3310.7932 -14694.542 58.6667]", + "[-2791.8213 -14695.3516 76.8586]", + "[-2275.9473 -14695.5146 95.0961]", + "[-1762.0659 -14695.6191 112.8056]", + "[-1250.2241 -14694.8291 130.8546]", + "[-729.4196 -14695.9941 148.9409]", + "[-210.2082 -14695.1895 167.0705]", + "[307.3923 -14695.502 184.9581]", + "[823.2495 -14695.002 203.1686]", + "[1337.6006 -14694.3506 221.0253]", + "[1850.1614 -14695.2031 238.8605]", + "[2371.9529 -14695.166 257.2515]", + "[2884.3408 -14696.0469 274.9183]", + "[3400.0134 -14693.8623 292.8837]", + "[3921.6924 -14695.9121 313.7161]", + "[4438.0371 -14695.3857 330.4062]", + "[4955.8584 -14694.6582 330.5865]", + "[5472.499 -14696.25 330.5624]", + "[5988.1162 -14694.8779 329.867]", + "[6502.1128 -14696.3779 330.2698]", + "[7015.4111 -14699.0098 330.9774]", + "[7527.6948 -14681.1934 331.1342]", + "[8038.6929 -14648.127 330.6658]", + "[8557.9941 -14593.4531 330.3472]", + "[9073.2393 -14514.5039 330.6477]", + "[9583.7656 -14412.0674 330.9144]", + "[10087.3711 -14281.9854 330.9234]", + "[10581.2295 -14121.3838 330.7706]", + "[11062.625 -13928.71 331.003]", + "[11528.125 -13702.1055 330.9831]", + "[11973.6094 -13439.9814 330.7124]", + "[12395.0449 -13142.3311 330.838]", + "[12788.1426 -12809.9619 330.7089]", + "[13150.4873 -12445.5293 330.8442]", + "[13478.2471 -12050.8877 330.7626]", + "[13769.8818 -11629.8105 331.2645]", + "[14030.127 -11177.6563 331.0656]", + "[14254.626 -10707.4697 330.7664]", + "[14444.1953 -10222.8838 330.9313]", + "[14601.6748 -9727.7246 330.6674]", + "[14728.3428 -9229.8359 330.8973]", + "[14827.9365 -8724.4297 331.2968]", + "[14903.4873 -8213.7715 331.0688]", + "[14956.4199 -7700.5059 331.0297]", + "[14989.2383 -7184.5225 330.6518]", + "[14999.9434 -6665.0659 331.4211]", + "[15000.4072 -6147.6567 331.479]", + "[15000.0283 -5633.5244 331.5171]", + "[15001.1963 -5120.2002 331.4565]", + "[15000.8984 -4607.604 331.7775]", + "[15001.7139 -4088.0964 331.5158]", + "[15000.9814 -3569.365 331.6116]", + "[15001.4199 -3051.9709 331.5672]", + "[15001.7471 -2536.1489 331.5218]", + "[14995.9014 -2021.5707 331.6025]", + "[14993.9971 -1508.6443 331.4274]", + "[15026.9854 -997.6324 331.5617]", + "[15116.2432 -487.8854 331.4496]", + "[15171.6143 25.8977 331.5683]", + "[15185.7109 537.9509 331.6527]", + "[15186.3516 1056.3801 331.5623]", + "[15184.9131 1574.4678 331.5698]", + "[15185.7119 2089.0603 331.5339]", + "[15185.5566 2606.3015 331.5466]", + "[15185.458 3121.7131 331.5721]", + "[15185.0381 3642.3115 331.6094]", + "[15185.498 4162.979 331.5169]", + "[15184.9443 4679.4268 331.6953]", + "[15185.4834 5198.7383 331.5603]", + "[15185.0303 5719.3066 331.3974]", + "[15186.5186 6239.7178 331.1472]", + "[15189.3125 6758.9717 332.5336]", + "[15181.6445 7275.998 332.6452]", + "[15157.1201 7789.8745 333.3457]", + "[15111.5469 8310.0811 334.4164]", + "[15046.0322 8824.2734 335.1512]", + "[14956.8066 9329.666 336.1604]", + "[14841.6748 9836.4053 336.9218]", + "[14699.625 10330.3652 337.5391]", + "[14525.2988 10820.0078 338.1001]", + "[14320.8516 11290.9531 338.4763]", + "[14080.1074 11750.1016 338.6121]", + "[13801.5566 12193.2988 339.212]", + "[13491.0332 12605.3271 339.5383]", + "[13143.4092 12993.1445 339.5093]", + "[12768.0752 13342.5967 339.5858]", + "[12361.2764 13661.8672 339.1206]", + "[11925.4912 13948.498 338.8882]", + "[11475.334 14194.4453 338.762]", + "[11004.6426 14409.0703 338.2516]", + "[10516.0244 14591.2295 337.6688]", + "[10025.6045 14740.1455 336.8957]", + "[9523.6221 14861.7256 336.3286]", + "[9012.1406 14957.6729 335.3622]", + "[8493.8027 15029.2832 335.0455]", + "[7971.6318 15080.0078 334.3937]", + "[7448.1616 15108.4326 332.0726]", + "[6926.7188 15116.2598 327.9896]", + "[6407.0039 15115.8115 338.0011]", + "[5890.3252 15115.1377 355.7444]", + "[5377.0142 15115.8984 373.8549]", + "[4853.9302 15115.2539 391.9247]", + "[4334.2905 15116.3984 410.0782]", + "[3817.9932 15114.8887 428.0836]", + "[3304.9963 15116.1494 446.1812]", + "[2782.5332 15115.3076 464.245]", + "[2263.4038 15116.3721 482.6223]", + "[1747.5771 15114.4307 500.3865]", + "[1235.1445 15116.4863 518.2736]", + "[712.0627 15114.5859 536.4679]", + "[189.6466 15115.6572 554.5568]", + "[-322.1712 15115.2695 573.9913]", + "[-836.8267 15115.1406 594.7327]", + "[-1354.177 15115.8887 597.322]", + "[-1875.9246 15116.1797 597.5058]", + "[-2389.155 15114.8604 597.3675]", + "[-2906.6868 15114.7461 597.3884]", + "[-3428.3865 15114.9063 597.4445]", + "[-3940.9548 15114.7256 597.3578]", + "[-4457.2544 15115.5664 597.3982]", + "[-4977.1553 15114.3867 597.4645]", + "[-5500.1978 15115.5674 597.2596]", + "[-6012.7827 15117.1074 597.5213]", + "[-6528.1006 15119.125 597.5055]", + "[-7045.9351 15106.7041 598.9177]", + "[-7565.9175 15076.7715 600.3014]", + "[-8086.8252 15025.9844 600.5658]", + "[-8594.2207 14954.7363 601.4723]", + "[-9099.8535 14858.9434 601.8898]", + "[-9602.6084 14737.1475 602.8044]", + "[-10099.875 14585.5742 603.4209]", + "[-10588.6924 14401.4873 603.9495]", + "[-11065.8818 14183.1094 604.6247]", + "[-11514.5166 13934.458 604.8492]", + "[-11944.3232 13650.1709 605.2241]", + "[-12350.165 13328.9883 605.199]", + "[-12728.3936 12972.5439 605.392]", + "[-13075.5908 12582.6484 605.338]", + "[-13388.2432 12161.7207 604.9578]", + "[-13658.8184 11726.8906 604.7545]", + "[-13895.8193 11270.3682 604.3742]", + "[-14100.0986 10795.71 603.9268]", + "[-14272.7344 10306.1348 603.2803]", + "[-14415.04 9804.4268 602.5464]", + "[-14530.0234 9293.1836 601.9705]", + "[-14619.4463 8774.4834 601.3648]", + "[-14682.792 8265.9951 600.5604]", + "[-14724.9238 7755.1274 599.6759]", + "[-14747.5693 7229.7314 597.0562]", + "[-14750.9531 6706.647 594.5219]", + "[-14750.4951 6185.7559 608.6328]", + "[-14750.1943 5668.0518 626.5579]", + "[-14751.6064 5153.7095 644.6846]", + "[-14750.2178 4628.1113 662.9929]", + "[-14750.1846 4105.9634 681.3843]", + "[-14750.1553 3587.2275 699.4081]", + "[-14751.499 3071.896 717.495]", + "[-14750.0732 2559.9016 735.2614]", + "[-14750.0107 2037.1443 753.5163]", + "[-14751.459 1517.8098 771.8226]", + "[-14749.9131 1001.8534 789.7051]", + "[-14750.7803 489.2932 807.7574]", + "[-14750.9619 -33.7225 825.8098]", + "[-14751.1494 -553.2152 844.0082]", + "[-14749.4199 -1069.3868 862.0568]", + "[-14751.2695 -1581.6912 879.8181]", + "[-14750.3574 -2104.3672 898.1016]", + "[-14751.002 -2624.8428 916.1406]", + "[-14750.6592 -3144.0945 934.2446]", + "[-14751.4746 -3664.6165 954.9991]", + "[-14753.165 -4186.5269 970.684]", + "[-14752.9561 -4710.8662 971.2698]", + "[-14735.5625 -5224.1807 971.979]", + "[-14698.9688 -5739.5684 972.4646]", + "[-14643.0938 -6256.2788 973.4114]", + "[-14563.1787 -6772.7866 974.3304]", + "[-14456.958 -7287.1221 975.1174]", + "[-14326.9023 -7784.5347 975.9392]", + "[-14166.4248 -8275.6406 976.4946]", + "[-13973.3877 -8757.7148 976.6904]", + "[-13744.6982 -9226.7236 977.3505]", + "[-13480.0137 -9679.3047 977.8277]", + "[-13185.2285 -10098.3535 978.0888]", + "[-12855.541 -10493.5732 978.2484]", + "[-12490.3252 -10859.542 978.3215]", + "[-12093.21 -11194.2188 977.957]", + "[-11666.5449 -11494.3232 977.881]", + "[-11215.0771 -11760.4404 977.2504]", + "[-10741.7207 -11991.0928 976.9677]", + "[-10264.4063 -12182.7363 976.5176]", + "[-9773.4219 -12343.9424 976.0157]", + "[-9271.3242 -12476.2666 975.2813]", + "[-8760.4131 -12581.6084 974.521]", + "[-8242.7363 -12662.4844 973.5027]", + "[-7719.689 -12719.4746 972.3732]", + "[-7208.2183 -12756.0449 971.7604]", + "[-6695.9321 -12772.4043 970.39]", + "[-6169.1191 -12773.1758 971.7161]", + "[-5644.4248 -12755.0361 972.253]", + "[-5125.2017 -12718.4883 972.4312]", + "[-4614.8364 -12661.6182 973.4814]", + "[-4102.9307 -12581.7695 974.3622]", + "[-3594.46 -12476.7734 974.9951]", + "[-3094.3953 -12345.7197 975.9842]", + "[-2596.1111 -12182.3799 976.6871]", + "[-2117.2617 -11989.0078 976.7408]", + "[-1653.7931 -11763.2891 977.334]", + "[-1209.8521 -11503.0205 977.5398]", + "[-789.1542 -11208.1738 977.9073]", + "[-394.9845 -10879.8174 978.0375]", + "[-31.9864 -10518.2715 978.3093]", + "[306.5287 -10117.623 977.968]", + "[608.7797 -9689.6094 977.8219]", + "[874.4218 -9238.6631 977.5451]", + "[1104.2263 -8768.7656 977.0293]", + "[1299.1101 -8283.8506 976.3759]", + "[1461.9742 -7787.4185 975.9812]", + "[1594.5703 -7282.186 975.2559]", + "[1699.8308 -6770.5483 974.5039]", + "[1780.2261 -6254.5527 973.5063]", + "[1836.2025 -5735.5728 973.0586]", + "[1873.6973 -5216.0186 971.875]", + "[1886.8569 -4697.1626 970.5173]", + "[1887.5315 -4179.6436 970.0507]", + "[1888.1538 -3657.1702 970.1619]", + "[1887.3536 -3138.8772 970.5827]", + "[1885.7847 -2620.5515 970.4337]", + "[1887.0636 -2099.1985 970.538]", + "[1886.0492 -1586.8506 970.451]", + "[1886.4281 -1071.9888 970.4731]", + "[1886.7302 -553.9192 970.4164]", + "[1887.3379 -38.2745 970.4554]", + "[1886.6519 473.8748 970.5221]", + "[1887.1213 994.4443 970.4736]", + "[1885.5615 1514.4025 970.356]", + "[1887.5242 2033.796 970.3855]", + "[1886.6609 2552.6013 970.6616]", + "[1886.8027 3071.0103 970.4473]", + "[1885.5457 3588.9958 970.4293]", + "[1886.8542 4106.5645 970.4789]", + "[1887.0081 4623.5405 970.6487]", + "[1887.2922 5139.7129 970.1843]", + "[1886.6162 5655.3022 970.1147]", + "[1888.1857 6170.1309 970.0446]", + "[1887.8721 6684.3994 970.3423]", + "[1887.6541 7197.938 970.2911]", + "[1887.5127 7710.5068 970.3101]", + "[1886.9822 8229.96 970.221]", + "[1880.6484 8748.624 970.094]", + "[1884.0651 9260.9219 970.0297]", + "[1937.2014 9776.1807 970.0904]", + "[2022.0448 10287.7217 969.9083]", + "[2059.9392 10799.4746 969.9983]", + "[2060.9431 11315.2031 970.0414]", + "[2095.2864 11826.3779 970.1118]", + "[2183.3628 12335.5732 969.9728]", + "[2341.0962 12826.2207 969.297]", + "[2535.7495 13194.9258 968.9094]", + "[2803.3855 13539.3301 968.6996]", + "[3045.5737 13758.4541 968.7401]", + "[3479.7583 14030.8535 969.3841]", + "[3798.875 14160.3936 969.2914]", + "[4295.4644 14291.6465 969.7368]", + "[4807.5938 14357.3242 970.384]", + "[5320.7354 14366.501 970.0596]", + "[5838.4194 14365.9629 970.1568]", + "[6352.853 14366.7041 970.0408]", + "[6868.4209 14373.4502 970.0571]", + "[7384.0107 14370.3105 970.7483]", + "[7895.1001 14319.6982 970.1005]", + "[8400.5684 14209.417 969.6507]", + "[8880.7637 14023.7275 969.2253]", + "[9234.5967 13809.5781 969.0842]", + "[9476.9385 13596.9893 968.889]", + "[9798.5518 13196.1563 969.1726]", + "[9929.1104 12957.9307 969.5436]", + "[10110.6318 12477.5146 969.8056]", + "[10216.4102 11975.3398 969.9261]", + "[10254.1133 11459.1465 970.3392]", + "[10269.332 10942.8926 969.9376]", + "[10335.1426 10435.083 970.0394]", + "[10430.5576 9928.5518 970.2665]", + "[10504.2939 9418.9277 969.8756]", + "[10526.3682 8904.4805 970.5742]", + "[10524.8428 8391.625 970.2037]", + "[10525.5986 7878.3579 970.2979]", + "[10525.2725 7365.2568 970.2597]", + "[10525.293 6851.7534 970.228]", + "[10525.1523 6338.5356 970.1652]", + "[10526.2588 5826.4453 970.3994]", + "[10524.3711 5307.9043 970.3044]", + "[10525.9043 4790.2559 970.1849]", + "[10526.1982 4275.4067 970.1947]", + "[10525.6348 3763.0894 970.22]", + "[10526.2236 3243.9895 970.0547]", + "[10525.3691 2725.8191 970.3435]", + "[10525.2852 2208.6001 970.5858]", + "[10525.5889 1692.5366 970.518]", + "[10525.834 1179.6049 970.5653]", + "[10524.4424 665.0767 970.5762]", + "[10525.7402 148.7361 970.5029]", + "[10525.3916 -368.2086 970.3846]", + "[10525.3623 -886.8491 970.6603]", + "[10525.5947 -1403.2152 970.466]", + "[10530.0518 -1917.9187 970.5365]", + "[10541.9043 -2431.6621 970.7503]", + "[10499.1289 -2941.9583 970.6636]", + "[10377.8828 -3442.1382 970.4464]", + "[10265.252 -3942.7617 970.7151]", + "[10191.1748 -4455.6875 970.5022]", + "[10159.7432 -4970.7173 970.5011]", + "[10152.8037 -5484.937 970.3486]", + "[10153.5049 -6000.9023 970.4802]", + "[10153.1348 -6518.2148 970.416]", + "[10153.7871 -7031.5776 970.6911]", + "[10152.8574 -7545.2632 970.4578]", + "[10154.1396 -8063.3413 970.4352]", + "[10153.7725 -8578.6563 970.3127]", + "[10153.2783 -9092.4063 970.6329]", + "[10152.7275 -9613.1543 970.4686]", + "[10156.7656 -10129.5391 970.4846]", + "[10161.5049 -10644.7861 970.6351]", + "[10140.4229 -11157.1807 970.4846]", + "[10079.416 -11672.707 970.3339]", + "[9969.832 -12177.8438 970.2415]", + "[9802.8838 -12664.6807 970.4446]", + "[9570.0459 -13121.0469 970.5854]", + "[9261.3574 -13537.6299 970.6778]", + "[8892.6826 -13886.4102 970.542]", + "[8464.7227 -14169.6689 970.7175]", + "[7991.9238 -14384.21 970.1818]", + "[7496.5811 -14533.7305 970.337]", + "[6990.188 -14626.8477 970.6149]", + "[6479.833 -14672.6318 970.8691]", + "[5962.2046 -14679.7715 970.6495]", + "[5450.0464 -14680.3447 968.9833]", + "[4936.2871 -14679.2842 967.3573]", + "[4421.3159 -14680.2988 981.5989]", + "[3907.1365 -14680.293 999.6598]", + "[3392.2251 -14679.7705 1017.6099]", + "[2876.9861 -14680.4561 1035.7108]", + "[2360.6572 -14679.6768 1053.678]", + "[1843.1324 -14680.0879 1071.7975]", + "[1330.13 -14679.4141 1089.6639]", + "[814.8488 -14680.3389 1107.8214]", + "[299.5258 -14680.2041 1125.5829]", + "[-213.9209 -14679.3672 1143.5042]", + "[-735.4753 -14680.4688 1161.8223]", + "[-1252.885 -14679.7881 1179.926]", + "[-1765.0809 -14679.2002 1197.7917]", + "[-2282.8047 -14679.5713 1215.9473]", + "[-2806.3518 -14680.3838 1234.24]", + "[-3324.6116 -14679.6826 1252.1471]", + "[-3837.6389 -14679.6318 1269.8586]", + "[-4359.5205 -14678.9932 1290.9965]", + "[-4876.2163 -14680.5566 1308.3875]", + "[-5394.8262 -14681.2246 1307.3075]", + "[-5912.8384 -14682.9199 1307.5627]", + "[-6430.2393 -14684.1289 1308.0688]", + "[-6946.498 -14666.9473 1307.5503]", + "[-7460.9761 -14632.874 1307.5609]", + "[-7973.0664 -14577.8711 1307.4767]", + "[-8481.21 -14500.8506 1307.3273]", + "[-8983.9219 -14399.3184 1307.5667]", + "[-9491.2295 -14268.4375 1307.5233]", + "[-9988.2188 -14106.3477 1307.7609]", + "[-10472.9063 -13912.4844 1307.7343]", + "[-10941.1074 -13683.4941 1307.5988]", + "[-11389.7695 -13419.5547 1307.5891]", + "[-11813.4717 -13118.7842 1307.5984]", + "[-12208.3818 -12782.4473 1307.4777]", + "[-12571.75 -12413.4502 1307.4132]", + "[-12900.3555 -12014.1904 1307.8534]", + "[-13192.3115 -11588.4219 1307.9111]", + "[-13447.8438 -11140.9053 1307.6046]", + "[-13668.3076 -10675.8975 1308.0214]", + "[-13854.2363 -10196.9121 1307.8583]", + "[-14009.4863 -9708.04 1307.4004]", + "[-14134.8555 -9211.2881 1307.6744]", + "[-14235.6318 -8697.2881 1307.7462]", + "[-14311.9297 -8179.5444 1307.8153]", + "[-14364.4814 -7659.3228 1307.515]", + "[-14395.4209 -7138.8696 1307.8615]", + "[-14406.3359 -6617.7539 1307.9377]", + "[-14405.8838 -6096.7939 1307.0188]", + "[-14405.5313 -5578.1411 1303.6836]", + "[-14406.4619 -5061.1509 1311.6892]", + "[-14406.1621 -4540.8726 1329.4856]", + "[-14405.8604 -4023.5769 1347.5795]", + "[-14405.6279 -3510.4092 1365.7722]", + "[-14405.751 -2989.8035 1383.9073]", + "[-14405.8604 -2474.959 1401.7277]", + "[-14405.7207 -1953.649 1420.1971]", + "[-14406.6943 -1439.5497 1438.0201]", + "[-14405.8691 -920.1232 1456.213]", + "[-14405.916 -395.8972 1474.396]", + "[-14406.4561 128.4453 1492.8008]", + "[-14405.4746 648.5588 1510.8356]", + "[-14405.7656 1161.245 1528.8945]", + "[-14406.5879 1680.7889 1546.8502]", + "[-14406.0215 2194.0369 1564.6896]", + "[-14406.1572 2716.6062 1584.1788]", + "[-14406.3389 3237.0503 1605.2997]", + "[-14406.8066 3755.3047 1608.6322]", + "[-14406.4697 4272.6631 1608.3488]", + "[-14406.0391 4789.585 1608.5195]", + "[-14408.1748 5305.8984 1608.1136]", + "[-14410.5381 5821.4272 1608.7032]", + "[-14400.4023 6336.1875 1608.5325]", + "[-14372.543 6849.2837 1609.0161]", + "[-14324.2412 7359.9907 1608.7014]", + "[-14256.1758 7867.4937 1608.4203]", + "[-14161.3984 8382.4404 1608.6147]", + "[-14040.2139 8890.9033 1608.4078]", + "[-13889.2686 9390.4248 1608.3848]", + "[-13707.0664 9878.3486 1608.6265]", + "[-13491.2588 10351.6465 1608.7529]", + "[-13239.7373 10805.9619 1609.0504]", + "[-12952.2676 11237.4736 1608.7368]", + "[-12629.4502 11642.2627 1608.861]", + "[-12271.96 12015.3428 1608.7445]", + "[-11884.5391 12355.8496 1608.3861]", + "[-11468.9453 12659.417 1608.1208]", + "[-11030.4922 12927.6543 1608.6144]", + "[-10572.9287 13159.7998 1608.8994]", + "[-10100.0752 13357.3105 1608.8181]", + "[-9604.2441 13526.3252 1608.6202]", + "[-9099.7412 13664.8184 1608.5375]", + "[-8589.0107 13773.834 1608.871]", + "[-8074.2969 13857.7373 1608.6887]", + "[-7559.4717 13916.874 1608.6018]", + "[-7041.2231 13956.2773 1608.6086]", + "[-6520.0308 13979.543 1608.6957]", + "[-6004.9146 13974.0947 1608.6697]", + "[-5490.6089 13933.6563 1608.5363]", + "[-4984.0205 13832.7852 1608.9055]", + "[-4484.2856 13688.21 1608.4076]", + "[-3977.2742 13598.7021 1608.3055]", + "[-3459.5298 13550.21 1608.519]", + "[-2941.9111 13542.9629 1608.4099]", + "[-2425.2361 13540.8711 1608.4938]", + "[-1910.8542 13540.9219 1608.3698]", + "[-1397.3324 13540.5879 1608.4943]", + "[-884.5651 13541.9365 1608.5028]", + "[-372.5612 13541.8076 1608.488]", + "[146.3118 13541.8379 1608.3738]", + "[664.412 13541.6416 1608.4653]", + "[1181.7466 13541.4121 1608.5011]", + "[1698.2131 13540.7109 1608.4756]", + "[2215.2253 13541.2695 1608.4484]", + "[2729.1853 13542.0059 1608.4387]", + "[3241.5737 13542.5664 1608.3936]", + "[3760.4346 13548.4209 1608.3748]", + "[4278.541 13536.4756 1608.2026]", + "[4790.187 13494.7168 1608.2321]", + "[5293.7705 13390.6631 1608.7208]", + "[5794.6079 13248.2939 1608.3472]", + "[6301.2275 13161.9717 1607.6584]", + "[6822.3662 13118.2959 1608.4739]", + "[7339.0776 13111.2559 1608.8966]", + "[7853.8472 13094.8633 1608.7133]", + "[8373.7109 13059.9502 1609.0083]", + "[8893.9268 13002.0029 1608.5612]", + "[9405.9619 12923.1494 1608.4779]", + "[9915.1621 12817.9053 1608.4893]", + "[10417.2158 12685.4248 1608.746]", + "[10909.4688 12522.9365 1608.6989]", + "[11389.2393 12328.7656 1608.6094]", + "[11852.6436 12099.9668 1608.6659]", + "[12296.0029 11835.9443 1608.494]", + "[12715.6826 11536.8096 1608.4706]", + "[13106.7285 11202.4082 1608.3936]", + "[13465.6895 10835.3506 1608.3754]", + "[13791.1563 10439.2178 1609.1243]", + "[14087.2617 10006.2549 1608.8787]", + "[14345.9238 9550.1289 1608.6892]", + "[14564.0117 9084.4912 1608.708]", + "[14750.4326 8601.8379 1608.6725]", + "[14906.3457 8105.0166 1608.5353]", + "[15032.4189 7595.6411 1608.7156]", + "[15130.6377 7085.5088 1608.5063]", + "[15203.5293 6573.3345 1608.8594]", + "[15255.1865 6061.7397 1608.6372]", + "[15284.667 5539.8115 1608.7266]", + "[15294.4307 5024.3159 1609.0997]", + "[15293.1162 4503.5244 1608.2312]", + "[15293.2881 3979.6697 1604.9532]", + "[15293.4951 3467.0051 1613.9216]", + "[15293.083 2951.9822 1631.7021]", + "[15293.4346 2435.1636 1649.7864]", + "[15293.2451 1916.8309 1667.8302]", + "[15294.0967 1396.9966 1686.1034]", + "[15292.8477 875.5244 1704.0653]", + "[15293.6631 352.3342 1722.543]", + "[15293.8125 -172.5517 1740.6947]", + "[15293.5195 -698.9594 1759.1213]", + "[15294.1484 -1211.5361 1776.8008]", + "[15293.3633 -1724.3253 1794.8669]", + "[15293.0947 -2249.8735 1813.1053]", + "[15293.8984 -2770.7341 1831.5491]", + "[15292.583 -3285.5396 1849.5404]", + "[15293.2666 -3808.5527 1867.8542]", + "[15294.0674 -4326.085 1885.7003]", + "[15293.7803 -4838.041 1903.4047]", + "[15293.5693 -5361.4053 1923.1259]", + "[15294.1563 -5882.9785 1944.1954]", + "[15293.5947 -6402.3525 1945.552]", + "[15295.3311 -6920.7129 1945.728]", + "[15298.9492 -7438.2944 1945.7101]", + "[15287.208 -7954.8364 1945.8013]", + "[15257.8398 -8470.1357 1945.7173]", + "[15208.2646 -8983.2012 1946.1271]", + "[15137.0791 -9492.8438 1945.9644]", + "[15042.2412 -9997.2949 1946.0286]", + "[14921.5508 -10495.3359 1945.7104]", + "[14767.6475 -10998.0225 1946.2849]", + "[14581.3809 -11488.5684 1945.9397]", + "[14361.8662 -11963.8115 1945.8748]", + "[14107.6729 -12416.0928 1946.2158]", + "[13814.7451 -12849.501 1946.0168]", + "[13485.5439 -13254.5596 1946.1178]", + "[13126.085 -13623.9541 1946.0482]", + "[12738.2939 -13958.3408 1946.1088]", + "[12313.8477 -14263.3037 1945.8328]", + "[11866.4844 -14532.3037 1945.8928]", + "[11399.1885 -14763.1045 1945.691]", + "[10917.2783 -14959.9756 1946.1195]", + "[10423.6963 -15123.0303 1945.8638]", + "[9922.0303 -15255.5576 1945.8209]", + "[9414.7012 -15361.1387 1945.9757]", + "[8903.3994 -15440.8955 1945.9515]", + "[8388.4277 -15498.3828 1945.9149]", + "[7868.6797 -15535.0723 1945.9021]", + "[7345.9111 -15549.0039 1946.3312]", + "[6822.0986 -15549.4766 1945.3052]", + "[6298.2524 -15548.5059 1942.4908]", + "[5779.2046 -15548.6035 1946.4689]", + "[5263.6118 -15548.9424 1963.8843]", + "[4740.4448 -15548.2969 1981.9767]", + "[4223.4546 -15549.168 2000.2773]", + "[3700.249 -15548.251 2018.4136]", + "[3184.4534 -15549.0684 2036.6549]", + "[2663.4045 -15548.7021 2054.7803]", + "[2150.8848 -15549.2402 2072.5056]", + "[1634.1821 -15549.2461 2090.769]", + "[1113.2932 -15547.6582 2108.5952]", + "[588.4398 -15548.998 2127.2922]", + "[73.751 -15548.6758 2144.9502]", + "[-441.0042 -15548.6836 2163.1377]", + "[-952.9736 -15548.792 2181.1353]", + "[-1473.8464 -15549.0762 2199.0803]", + "[-1991.376 -15549.8086 2217.8857]", + "[-2507.1729 -15549.1426 2239.9067]", + "[-3020.9399 -15548.8154 2246.8838]", + "[-3533.2876 -15548.8047 2246.5908]", + "[-4058.4417 -15553.791 2246.5889]", + "[-4582.918 -15547.5742 2246.5525]", + "[-5105.9746 -15523.5713 2246.5483]", + "[-5626.7813 -15479.2314 2246.2192]", + "[-6144.0537 -15412.8447 2246.4854]", + "[-6657.2944 -15323.6113 2246.9299]", + "[-7164.2935 -15207.5488 2246.6387]", + "[-7663.0396 -15063.1094 2246.7876]", + "[-8150.8408 -14887.7119 2247.1108]", + "[-8624.4219 -14679.3691 2246.8115]", + "[-9080.1699 -14436.2363 2246.4587]", + "[-9514.2324 -14157.9932 2246.5203]", + "[-9922.1055 -13843.9805 2246.3882]", + "[-10300.7383 -13496.5049 2246.8188]", + "[-10646.2676 -13117.291 2246.8311]", + "[-10956.4609 -12709.7871 2246.6868]", + "[-11237.3115 -12267.0645 2246.45]", + "[-11481.6787 -11804.0596 2246.6504]", + "[-11689.2021 -11324.3301 2246.396]", + "[-11863.4307 -10832.3496 2246.5977]", + "[-12005.0566 -10333.1885 2246.5823]", + "[-12119.5234 -9822.4453 2246.7012]", + "[-12207.2285 -9309.6191 2246.8799]", + "[-12270.8936 -8792.3975 2246.8738]", + "[-12312.7666 -8280.8896 2246.9666]", + "[-12330.9121 -7767.2593 2246.9954]", + "[-12329.9902 -7252.4771 2246.8599]", + "[-12356.0029 -6737.0161 2246.7158]", + "[-12420.9873 -6222.665 2246.5859]", + "[-12532.9395 -5721.3462 2246.4028]", + "[-12704.7539 -5233.2061 2246.4805]", + "[-12946.2461 -4779.7202 2246.6833]", + "[-13156.0313 -4512.9419 2247.0049]", + "[-13515.9697 -4143.3232 2246.6089]", + "[-13813.2148 -3726.1238 2246.8015]", + "[-14041.3857 -3263.1477 2246.4741]", + "[-14202.8838 -2775.8142 2246.5876]", + "[-14310.8457 -2267.7866 2246.8086]", + "[-14370.9336 -1753.6569 2246.8447]", + "[-14383.2031 -1237.9939 2246.4495]", + "[-14384.5127 -723.0797 2246.5144]", + "[-14384.1484 -209.1576 2246.3083]", + "[-14383.1504 303.6718 2246.3191]", + "[-14382.9619 822.9274 2246.2964]", + "[-14383.4648 1341.1942 2246.4407]", + "[-14383.1299 1858.5898 2246.2688]", + "[-14383.6494 2375.1099 2246.3125]", + "[-14383.2939 2890.7036 2246.1904]", + "[-14383.6787 3405.1936 2246.2581]", + "[-14383.5488 3918.5908 2246.1306]", + "[-14382.9521 4430.6489 2246.501]", + "[-14384.9141 4948.5347 2246.1096]", + "[-14384.2803 5464.6079 2246.2524]", + "[-14384.874 5979.0576 2246.3503]", + "[-14384.9502 6491.8833 2246.4995]", + "[-14387.5791 7010.395 2246.6782]", + "[-14377.7314 7527.3857 2246.4849]", + "[-14350.1133 8042.1084 2246.584]", + "[-14302.7461 8553.376 2246.8193]", + "[-14232.3867 9067.1016 2246.8699]", + "[-14139.1973 9574.9873 2246.6963]", + "[-14019.623 10075.4248 2246.6802]", + "[-13872.0488 10566.0635 2246.6169]", + "[-13692.9863 11051.5615 2246.5273]", + "[-13480.6729 11521.4014 2246.719]", + "[-13235.417 11971.1318 2246.4373]", + "[-12954.3135 12399.3623 2246.5369]", + "[-12636.4629 12802.7676 2246.3506]", + "[-12283.0781 13177.3604 2246.4548]", + "[-11896.8506 13522.5703 2246.3872]", + "[-11481.0088 13832.2041 2246.3386]", + "[-11046.0674 14102.4014 2246.478]", + "[-10588.1953 14337.9453 2246.4822]", + "[-10116.0127 14538.7051 2246.7324]", + "[-9626.5156 14708.8535 2246.8481]", + "[-9124.3828 14848.8125 2246.5012]", + "[-8623.9863 14959.3076 2246.4656]", + "[-8118.7192 15044.9102 2246.6521]", + "[-7600.3408 15107.584 2246.7478]", + "[-7081.9995 15148.7051 2246.9558]", + "[-6567.3838 15168.8799 2246.646]", + "[-6048.5884 15170.4775 2246.6504]", + "[-5528.7627 15170.2002 2244.6482]", + "[-5009.5537 15170.0576 2244.238]", + "[-4491.1304 15170.2246 2259.9138]", + "[-3974.8403 15169.5879 2278.1177]", + "[-3460.7585 15170.5752 2296.0171]", + "[-2948.8433 15170.9609 2314.0107]", + "[-2428.2292 15170.6426 2332.063]", + "[-1909.704 15170.6045 2350.2378]", + "[-1393.0884 15170.3193 2368.2227]", + "[-878.3042 15170.4258 2386.3018]", + "[-365.3428 15170.5713 2403.9941]", + "[156.292 15170.1484 2422.3318]", + "[676.3 15170.9092 2440.3613]", + "[1194.6598 15169.7148 2458.6704]", + "[1712.3334 15170.207 2476.6411]", + "[2230.9688 15169.2217 2494.6301]", + "[2753.1963 15170.3945 2512.99]", + "[3271.0974 15170.1348 2534.0105]", + "[3784.8252 15170.1816 2547.825]", + "[4305.5146 15171.459 2547.5032]", + "[4822.3047 15171.0557 2547.4143]", + "[5334.6729 15170.8135 2547.6418]", + "[5853.3037 15173.1992 2547.2927]", + "[6366.6343 15171.8848 2547.6958]", + "[6885.4907 15152.7148 2547.9934]", + "[7397.1558 15116.2178 2547.699]", + "[7912.2378 15057.2197 2547.5142]", + "[8429.4717 14975.082 2548.5012]", + "[8934.5195 14868.877 2547.3582]", + "[9437.3398 14733.4814 2547.5466]", + "[9923.335 14570.1377 2547.6335]", + "[10401.4424 14373.4316 2547.8162]", + "[10867.5361 14140.3994 2547.865]", + "[11305.8691 13875.2568 2547.5356]", + "[11723.7607 13572.5264 2547.5613]", + "[12116.2617 13231.8877 2547.5964]", + "[12479.4111 12855.1377 2547.3284]", + "[12801.2402 12454.8711 2547.5242]", + "[13089.3525 12025.8262 2547.7502]", + "[13343.0664 11571.832 2547.5867]", + "[13562.1514 11096.5527 2547.8591]", + "[13743.9443 10616.7393 2547.9199]", + "[13894.7305 10122.958 2547.5693]", + "[14017.9248 9618.3242 2547.6704]", + "[14114.3066 9105.7637 2547.4749]", + "[14185.9941 8589.5186 2547.8242]", + "[14235.5732 8070.9961 2547.8484]", + "[14263.4541 7551.2251 2547.7324]", + "[14271.2871 7031.1821 2547.5667]", + "[14270.2803 6511.4106 2547.4558]", + "[14270.625 5992.415 2547.6938]", + "[14270.5566 5474.4644 2547.427]", + "[14270.9551 4957.8228 2547.5061]", + "[14275.5898 4442.7188 2547.4456]", + "[14279.0459 3929.4263 2548.375]", + "[14253.1523 3411.124 2547.282]", + "[14190.3213 2895.231 2547.9978]", + "[14054.833 2391.5251 2547.79]", + "[13931.3154 1883.5696 2547.5127]", + "[13862.0518 1366.9604 2547.949]", + "[13836.9541 846.4816 2547.5027]", + "[13840.0381 332.7943 2547.4058]", + "[13837.9902 -188.1001 2547.4424]", + "[13838.2129 -708.4707 2547.3838]", + "[13837.873 -1228.2085 2547.4895]", + "[13836.1426 -1746.9685 2547.4387]", + "[13828.2637 -2265.3477 2547.4595]", + "[13843.1104 -2782.7461 2547.5999]", + "[13927.4043 -3291.4805 2547.4329]", + "[14034.5811 -3794.2678 2547.5896]", + "[14134.0098 -4299.6982 2547.4434]", + "[14162.3926 -4811.1768 2547.5447]", + "[14164.4893 -5332.4956 2546.9897]", + "[14167.4414 -5844.667 2547.3306]", + "[14165.8008 -6359.1001 2547.7703]", + "[14148.7539 -6875.9878 2547.6709]", + "[14113.8975 -7387.7363 2547.7649]", + "[14057.4355 -7904.3555 2547.5947]", + "[13978.0801 -8414.958 2547.2996]", + "[13874.7715 -8922.6006 2547.4124]", + "[13743.6045 -9425.2773 2547.552]", + "[13582.46 -9917.0293 2547.9099]", + "[13386.4766 -10402.0811 2547.6609]", + "[13160.4199 -10862.7764 2547.8572]", + "[12898.752 -11304.4473 2547.6104]", + "[12594.3164 -11732.5791 2547.54]", + "[12255.0039 -12130.3887 2547.6421]", + "[11883.7842 -12492.6338 2547.5659]", + "[11486.6318 -12817.9365 2547.5811]", + "[11055.6006 -13112.0205 2547.7659]", + "[10608.2842 -13365.8701 2547.6118]", + "[10139.333 -13585.3242 2547.7168]", + "[9656.3096 -13772.3145 2547.5923]", + "[9162.8936 -13926.3311 2547.4841]", + "[8661.9912 -14050.9766 2547.4355]", + "[8155.8306 -14148.9209 2547.6362]", + "[7646.1987 -14223.8506 2548.0684]", + "[7134.1558 -14273.6738 2547.6064]", + "[6621.811 -14305.1943 2547.6243]", + "[6096.4497 -14315.2607 2547.7949]", + "[5574.7612 -14313.5713 2547.2886]", + "[5058.7524 -14314.7402 2543.6646]", + "[4533.7944 -14314.7227 2551.7168]", + "[4015.0942 -14315.042 2570.0051]", + "[3503.0996 -14315.0186 2587.968]", + "[2984.4863 -14314.7188 2606.3027]", + "[2459.5049 -14314.6348 2624.5745]", + "[1942.0304 -14313.9307 2642.7358]", + "[1419.1769 -14314.2803 2660.9312]", + "[904.4187 -14315.0869 2678.6946]", + "[384.9867 -14314.875 2696.7507]", + "[-138.6194 -14313.5137 2715.0142]", + "[-653.5859 -14314.1152 2732.9956]", + "[-1171.5913 -14314.4395 2751.1926]", + "[-1692.103 -14315.2129 2769.5442]", + "[-2205.1125 -14313.749 2787.0967]", + "[-2723.1228 -14313.8477 2805.1523]", + "[-3237.1318 -14313.9902 2824.3855]", + "[-3759.6545 -14314.0029 2845.7876]", + "[-4279.6973 -14314.8018 2848.1106]", + "[-4798.8813 -14316.4316 2848.4316]", + "[-5316.9663 -14318.7139 2848.4307]", + "[-5834.0698 -14308.666 2848.7634]", + "[-6349.585 -14280.334 2848.4902]", + "[-6862.8569 -14231.7148 2848.8579]", + "[-7372.8228 -14162.2344 2848.8372]", + "[-7878.1948 -14068.8018 2848.645]", + "[-8377.1504 -13949.4746 2848.4817]", + "[-8867.5342 -13802.0088 2848.3577]", + "[-9357.3428 -13620.2598 2848.4358]", + "[-9832.1748 -13404.7559 2848.5935]", + "[-10287.9297 -13153.2949 2848.5791]", + "[-10720.4863 -12865.4326 2848.8828]", + "[-11126.4795 -12542.5703 2848.6938]", + "[-11501.5488 -12185.4922 2848.6028]", + "[-11841.9463 -11796.4189 2848.4602]", + "[-12147.7246 -11380.5469 2848.4023]", + "[-12416.7773 -10941.0459 2848.6194]", + "[-12649.9854 -10482.3838 2848.4788]", + "[-12847.7305 -10008.3184 2848.6567]", + "[-13012.999 -9522.9756 2848.7786]", + "[-13151.6143 -9021.0547 2848.6951]", + "[-13260.5342 -8514.4863 2848.7698]", + "[-13344.082 -8008.123 2848.4785]", + "[-13404.2246 -7496.0674 2848.5886]", + "[-13445.0156 -6978.9702 2848.7935]", + "[-13461.9063 -6465.2363 2849.1357]", + "[-13464.752 -5945.6069 2848.5381]", + "[-13465.6133 -5427.6895 2848.5737]", + "[-13464.4766 -4912.2241 2848.4414]", + "[-13465.2734 -4397.4932 2848.4724]", + "[-13464.252 -3883.5234 2848.4058]", + "[-13463.542 -3370.4619 2848.5408]", + "[-13464.1084 -2858.1802 2848.3879]", + "[-13464.1475 -2338.79 2848.4924]", + "[-13465.4814 -1820.3621 2848.3879]", + "[-13465.6025 -1302.8444 2848.3796]", + "[-13465.1719 -786.043 2848.4443]", + "[-13465.0088 -268.4352 2848.4231]", + "[-13464.3965 246.1724 2848.5146]", + "[-13465.3506 758.9022 2848.4651]", + "[-13464.5322 1278.4485 2848.4626]", + "[-13464.0156 1795.0645 2848.2595]", + "[-13462.832 1937.7382 2848.595]", + "[-13464.0811 2452.6853 2848.6077]", + "[-13462.2988 2968.0891 2848.5076]", + "[-13463.8223 3483.7053 2848.5637]", + "[-13463.873 3997.1978 2848.5244]", + "[-13463.1631 4513.1016 2848.6125]", + "[-13463.3311 5030.1646 2848.4746]", + "[-13463.4697 5543.3271 2848.4883]", + "[-13460.3105 6061.5034 2848.835]", + "[-13439.6572 6574.6563 2848.8486]", + "[-13396.876 7085.064 2848.437]", + "[-13334.415 7597.8374 2848.6067]", + "[-13248.1982 8103.6133 2849.0286]", + "[-13135.8311 8610.3086 2848.6799]", + "[-12994.7637 9111.3291 2848.6777]", + "[-12822.4473 9600.6289 2848.3386]", + "[-12619.2578 10074.0605 2848.478]", + "[-12379.4502 10534.2051 2848.4089]", + "[-12102.0693 10975.4033 2848.3384]", + "[-11794.2422 11385.1846 2848.4766]", + "[-11451.1582 11765.8711 2848.468]", + "[-11069.6807 12121.2158 2848.5779]", + "[-10659.0967 12439.9326 2848.5815]", + "[-10224.5381 12720.9131 2848.5168]", + "[-9770.7959 12963.2432 2848.4644]", + "[-9294.5703 13175.5635 2848.4631]", + "[-8808.0127 13351.71 2848.8184]", + "[-8315.5195 13495.0439 2848.4746]", + "[-7810.0996 13612.7539 2848.467]", + "[-7304.5938 13703.1387 2848.9045]", + "[-6789.8633 13770.5947 2848.7778]", + "[-6278.7144 13814.8125 2848.6104]", + "[-5761.1431 13840.8945 2848.2646]", + "[-5238.1909 13848.7979 2848.6633]", + "[-4722.5605 13844.874 2849.2236]", + "[-4202.6328 13844.9854 2848.9702]", + "[-3679.6038 13844.2529 2855.3911]", + "[-3166.4385 13844.626 2876.0347]", + "[-2650.6482 13844.8232 2895.0876]", + "[-2134.2581 13844.2119 2913.1301]", + "[-1618.6426 13844.1055 2930.9031]", + "[-1105.7031 13844.5498 2948.9883]", + "[-584.7438 13844.7783 2967.0576]", + "[-67.8271 13844.0088 2985.0972]", + "[444.9061 13843.8389 3003.0186]", + "[965.2449 13843.3359 3021.1711]", + "[1481.3837 13843.8564 3039.1365]", + "[1993.204 13844.6074 3057.0366]", + "[2512.437 13843.8857 3075.1682]", + "[3027.636 13844.3311 3093.3369]", + "[3549.9136 13844.1816 3111.3022]", + "[4068.061 13843.5039 3129.615]", + "[4582.1895 13843.9395 3147.9963]", + "[5104.4834 13844.7061 3154.0867]", + "[5624.1812 13843.9648 3150.1018]", + "[6141.8491 13844.5879 3151.283]", + "[6660.292 13833.2822 3150.7063]", + "[7180.7485 13800.5361 3150.7188]", + "[7693.127 13746.3203 3150.7808]", + "[8208.3447 13670.1318 3150.8818]", + "[8713.6465 13568.5684 3150.4817]", + "[9217.9287 13440.0996 3150.9053]", + "[9708.1895 13284.0107 3150.5759]", + "[10191.8193 13093.6299 3150.385]", + "[10654.6465 12872.124 3150.4751]", + "[11102.4033 12612.2412 3150.3782]", + "[11530.7686 12314.1846 3150.7678]", + "[11925.3477 11985.1758 3150.3835]", + "[12292.6133 11620.0283 3150.678]", + "[12627.9141 11220.0137 3150.5723]", + "[12922.5771 10799.875 3150.8484]", + "[13182.5664 10353.5615 3150.5803]", + "[13407.4502 9886.21 3150.6448]", + "[13597.7021 9404.5371 3150.5579]", + "[13756.5869 8912.8076 3150.8364]", + "[13884.7568 8413.0127 3150.4614]", + "[13986.6367 7908.0996 3150.7148]", + "[14063.3896 7399.415 3150.6582]", + "[14118.0068 6888.9014 3150.7307]", + "[14151.1074 6377.2861 3150.4885]", + "[14166.8633 5865.4858 3150.6465]", + "[14167.1035 5342.0566 3151.5732]", + "[14165.375 4819.9727 3150.8184]", + "[14164.5967 4299.0791 3151.9717]", + "[14164.9893 3780.5623 3167.9307]", + "[14163.4248 3264.5447 3188.645]", + "[14164.2959 2751.5225 3206.5081]", + "[14164.5791 2231.9294 3224.6348]", + "[14165.0879 1718.9937 3242.8374]", + "[14164.0469 1198.7015 3260.8235]", + "[14164.043 682.6755 3278.9197]", + "[14164.0645 170.0134 3296.7285]", + "[14164.2373 -351.232 3314.8892]", + "[14163.9512 -869.8713 3333.0476]", + "[14165.2549 -1385.8611 3350.9363]", + "[14164.4346 -1899.5522 3368.9714]", + "[14164.8701 -2421.7583 3387.1926]", + "[14164.1387 -2941.4167 3405.6536]", + "[14164.7725 -3458.7358 3423.4563]", + "[14163.4268 -3973.7949 3441.6836]", + "[14165.1719 -4487.2451 3455.9993]", + "[14161.1123 -5001.0181 3453.4375]", + "[14128.8584 -5512.6279 3451.9475]", + "[14069.8271 -6023.5039 3451.8198]", + "[13981.3545 -6533.6934 3451.9324]", + "[13861.9453 -7040.7734 3451.8203]", + "[13709.4063 -7538.7959 3451.9736]", + "[13526.8447 -8026.0493 3452.1646]", + "[13358.4424 -8517.2529 3452.3418]", + "[13232.9707 -9021.0713 3452.0122]", + "[13142.2568 -9531.6963 3451.8596]", + "[13079.0469 -10045.376 3452.1079]", + "[13043.3125 -10561.1914 3452.051]", + "[13031.6025 -11077.4326 3452.3047]", + "[13013.4336 -11592.6191 3452.2644]", + "[12927.0625 -12100.9619 3452.6511]", + "[12769.708 -12591.5381 3451.1821]", + "[12529.751 -13045.6533 3451.1494]", + "[12334.5215 -13295.7637 3451.1519]", + "[12002.5127 -13593.8477 3450.9092]", + "[11680.5928 -13794.125 3451.1284]", + "[11232.7773 -13973.6465 3451.7383]", + "[10727.0322 -14090.3613 3452.1296]", + "[10217.8398 -14146.0313 3452.6484]", + "[9700.6787 -14154.752 3452.0784]", + "[9188.2646 -14145.0703 3451.51]", + "[8669.1895 -14144.0107 3452.145]", + "[8152.3237 -14146.4004 3451.7925]", + "[7637.3965 -14143.7813 3451.7402]", + "[7123.4985 -14144.3359 3451.7727]", + "[6610.3921 -14144.3662 3451.958]", + "[6097.6567 -14143.2529 3451.5662]", + "[5575.7642 -14142.9404 3452.2129]", + "[5055.1709 -14116.9268 3452.3335]", + "[4541.5786 -14042.29 3451.9778]", + "[4037.6133 -13935.207 3452.1897]", + "[3532.2656 -13833.5898 3452.1169]", + "[3022.3328 -13772.3506 3452.24]", + "[2509.0544 -13759.167 3452.124]", + "[1994.7856 -13763.4443 3452.0168]", + "[1478.6985 -13765.9082 3452.1326]", + "[965.2174 -13765.5723 3452.1985]", + "[449.4022 -13766.1768 3452.1309]", + "[-64.9213 -13766.0498 3452.1785]", + "[-578.1691 -13764.7871 3452.1865]", + "[-1090.3892 -13764.6963 3452.1116]", + "[-1608.7823 -13766.6289 3452.1682]", + "[-2126.2031 -13764.9873 3452.1396]", + "[-2642.6152 -13764.9561 3452.2529]", + "[-3158.0811 -13765.1006 3452.1758]", + "[-3672.5503 -13765.3184 3452.2029]", + "[-4190.646 -13764.5615 3452.127]", + "[-4708.9697 -13765.3115 3452.2271]", + "[-5221.085 -13758.3252 3452.5552]", + "[-5738.646 -13723.5957 3452.5374]", + "[-6253.1782 -13660.0566 3452.3772]", + "[-6759.4272 -13568.1211 3452.4155]", + "[-7259.8794 -13446.2402 3452.3516]", + "[-7751.4541 -13291.7129 3452.5999]", + "[-8230.7725 -13109.2441 3452.3918]", + "[-8725.5186 -12945.6299 3452.405]", + "[-9231.6836 -12824.2891 3452.4739]", + "[-9743.5742 -12734.4609 3452.6807]", + "[-10258.8174 -12674.9971 3452.3472]", + "[-10775.7227 -12641.9629 3452.3152]", + "[-11292.8936 -12633.2559 3452.4087]", + "[-11808.3174 -12606.4414 3452.4705]", + "[-12315.5322 -12513.4258 3452.2249]", + "[-12803.042 -12348.1357 3451.0061]", + "[-13229.1123 -12114.3291 3451.1345]", + "[-13472.1592 -11918.9141 3450.8081]", + "[-13795.5918 -11549.0596 3451.0286]", + "[-13936.1758 -11316.5371 3450.9966]", + "[-14133.1885 -10836.9482 3451.4663]", + "[-14250.9004 -10330.5732 3451.9514]", + "[-14307.082 -9821.3301 3452.3542]", + "[-14316.7979 -9307.3613 3452.4675]", + "[-14306.9863 -8791.8105 3466.3987]", + "[-14305.7041 -8279.3047 3486.9465]", + "[-14307.3779 -7760.6592 3505.3093]", + "[-14306.0508 -7245.8799 3523.0598]", + "[-14306.1357 -6730.3188 3541.0603]", + "[-14306.5635 -6210.6567 3559.2346]", + "[-14306.6943 -5697.7266 3577.3281]", + "[-14306.5713 -5183.8604 3595.1443]", + "[-14306.3359 -4670.9717 3613.1423]", + "[-14307.5371 -4151.5068 3631.1377]", + "[-14305.6758 -3635.499 3649.1697]", + "[-14307.541 -3114.6494 3667.3496]", + "[-14307.0459 -2598.8198 3685.3564]", + "[-14306.6514 -2079.3794 3703.9216]", + "[-14307.0313 -1565.9683 3721.2629]", + "[-14306.8262 -1049.8134 3739.4109]", + "[-14306.4805 -531.1306 3757.646]", + "[-14306.5664 -10.1322 3775.8237]", + "[-14306.7803 503.3705 3793.7527]", + "[-14306.7842 1018.6781 3811.7224]", + "[-14305.9932 1535.6135 3829.7727]", + "[-14307.6777 2053.9395 3847.8767]", + "[-14306.0234 2573.5647 3865.915]", + "[-14307.207 3094.4253 3884.1755]", + "[-14306.8223 3606.8596 3900.4648]", + "[-14307.0352 4122.3872 3898.1711]", + "[-14306.5908 4639.896 3896.1563]", + "[-14303.6006 5152.5635 3896.637]", + "[-14282.5049 5671.8403 3896.8628]", + "[-14240.6494 6188.5459 3896.5139]", + "[-14177.2227 6702.8003 3897.1199]", + "[-14089.9238 7213.3394 3896.8303]", + "[-13977.46 7717.0439 3896.7402]", + "[-13837.2627 8211.4258 3896.4377]", + "[-13664.4326 8703.4033 3896.2261]", + "[-13460.668 9179.0811 3896.4995]", + "[-13222.2773 9633.3555 3896.4812]", + "[-12946.5762 10073.6611 3896.8276]", + "[-12637.3438 10484.1348 3896.8108]", + "[-12289.1719 10869.9746 3896.4456]", + "[-11913.8232 11219.5713 3896.7039]", + "[-11504.4297 11536.8926 3896.7622]", + "[-11065.1387 11820.8652 3896.5369]", + "[-10610.6143 12064.126 3896.6311]", + "[-10134.9531 12274.4854 3896.4932]", + "[-9641.6846 12452.54 3896.5798]", + "[-9146.2139 12596.8047 3896.6506]", + "[-8639.5449 12714.2188 3896.7214]", + "[-8123.168 12804.5098 3896.9602]", + "[-7612.291 12870.6934 3896.6038]", + "[-7095.3784 12914.4648 3896.5093]", + "[-6573.6074 12940.0557 3896.8291]", + "[-6060.8081 12946.3867 3896.8289]", + "[-5544.7637 12943.3975 3896.3818]", + "[-5025.3394 12941.5498 3896.4468]", + "[-4502.7783 12942.5596 3903.0513]", + "[-3978.9644 12942.4209 3924.7993]", + "[-3465.7671 12942.1758 3943.4253]", + "[-2952.2537 12943.1182 3961.22]", + "[-2439.7969 12941.1221 3978.9399]", + "[-1916.533 12941.9473 3997.3726]", + "[-1396.8247 12941.7568 4015.2039]", + "[-880.7497 12942.6846 4033.6194]", + "[-368.0284 12942.4932 4051.4287]", + "[154.3298 12942.4463 4069.6379]", + "[673.0673 12942.8789 4087.74]", + "[1188.4939 12942.6826 4105.8359]", + "[1700.4482 12942.3389 4123.5259]", + "[2221.7292 12941.6523 4141.8965]", + "[2739.4395 12941.7217 4160.7764]", + "[3253.8555 12942.6992 4178.1592]", + "[3777.1692 12942.4844 4196.5801]", + "[4298.1885 12942.7383 4201.144]", + "[4817.0269 12942.2012 4197.0098]", + "[5333.9429 12943.2305 4197.9717]", + "[5851.1396 12931.0273 4197.729]", + "[6369.2876 12896.8203 4197.6221]", + "[6889.3145 12840.4707 4197.584]", + "[7397.5361 12763.0508 4197.8076]", + "[7901.9238 12660.9912 4197.7832]", + "[8399.1074 12532.1943 4197.6099]", + "[8887.333 12374.9541 4197.3633]", + "[9363.4375 12186.4238 4197.6528]", + "[9834.2197 11957.5088 4197.3838]", + "[10285.7598 11695.0186 4197.4277]", + "[10712.1484 11394.2764 4197.5205]", + "[11110.1719 11058.0293 4197.5923]", + "[11476.3037 10688.6963 4197.6201]", + "[11806.9697 10288.4941 4197.5532]", + "[12101.6963 9862.3975 4197.6343]", + "[12358.6572 9413.4199 4197.4341]", + "[12580.9326 8947.4229 4197.5029]", + "[12766.9268 8466.7539 4197.561]", + "[12922.7949 7976.6138 4197.5654]", + "[13047.751 7478.5288 4197.6147]", + "[13149.1592 6975.9229 4197.9326]", + "[13222.7617 6469.1206 4197.7168]", + "[13277.1914 5948.502 4197.7734]", + "[13309.1426 5426.7344 4197.4561]", + "[13324.5313 4905.3872 4197.5869]", + "[13322.1895 4384.3765 4197.1934]", + "[13320.0859 3864.1177 4197.3818]", + "[13320.2451 3344.3215 4199.0249]", + "[13320.457 2826.7749 4216.6299]", + "[13319.79 2311.0815 4237.3184]", + "[13319.9521 1797.8746 4254.9229]", + "[13320.4043 1285.9325 4272.7148]", + "[13320.0225 764.2952 4290.8999]", + "[13320.0488 245.7345 4309.0928]", + "[13319.1455 -269.8573 4327.0806]", + "[13320.332 -782.5562 4345.0205]", + "[13320.7461 -1303.8918 4362.9946]", + "[13320.9844 -1822.2573 4381.2446]", + "[13320.5537 -2337.7908 4399.2471]", + "[13319.7607 -2850.7681 4417.3569]", + "[13319.4102 -3372.3591 4435.3491]", + "[13320.833 -3891.3027 4453.6665]", + "[13319.667 -4407.8276 4471.6001]", + "[13320.7627 -4921.9082 4489.5942]", + "[13321.0674 -5433.7939 4502.8818]", + "[13321.1855 -5956.3872 4499.5073]", + "[13320.2051 -6477.6777 4498.3306]", + "[13317.2979 -7000.207 4498.9814]", + "[13291.5078 -7514.2158 4498.7832]", + "[13244.4375 -8031.647 4498.9429]", + "[13178.3301 -8542.167 4498.6841]", + "[13084.6934 -9054.9697 4498.5903]", + "[12966.6299 -9556.6309 4498.7588]", + "[12818.7451 -10056.3242 4498.4126]", + "[12642.4316 -10539.8525 4498.46]", + "[12429.8164 -11014.4268 4498.5122]", + "[12186.2988 -11465.5908 4498.6299]", + "[11903.8682 -11898.752 4498.542]", + "[11584.0107 -12308.7314 4498.1455]", + "[11228.8525 -12687.666 4498.3687]", + "[10842.0869 -13033.042 4498.4961]", + "[10427.0156 -13342.457 4498.6372]", + "[9988.624 -13615.7021 4498.4907]", + "[9530.4824 -13852.7744 4498.6982]", + "[9056.3047 -14053.5498 4498.5762]", + "[8571.1768 -14222.9746 4498.4819]", + "[8076.9702 -14360.8486 4498.6641]", + "[7576.6968 -14470.7227 4498.728]", + "[7060.9297 -14557.752 4498.6079]", + "[6547.5938 -14621.0889 4498.7939]", + "[6034.377 -14661.6748 4498.6919]", + "[5519.3335 -14683.9365 4498.7402]", + "[5001.0391 -14687.917 4498.0503]", + "[4482.1157 -14685.5273 4498.2842]", + "[3961.5244 -14684.9844 4498.4854]", + "[3447.1248 -14685.1152 4498.4126]", + "[2928.1648 -14684.5352 4498.4424]", + "[2411.781 -14684.7803 4498.4624]", + "[1895.8983 -14684.4941 4498.6865]", + "[1376.0686 -14684.7969 4498.4351]", + "[856.9067 -14685.3252 4498.5747]", + "[338.37 -14685.7861 4498.5107]", + "[-179.5062 -14684.665 4498.8115]", + "[-696.7858 -14685.4219 4498.665]", + "[-1213.4218 -14684.7646 4498.6152]", + "[-1729.2642 -14685.1855 4498.5229]", + "[-2244.3647 -14685.6055 4498.5933]", + "[-2758.8389 -14685.1104 4498.5757]", + "[-3274.9524 -14684.9551 4498.5732]", + "[-3788.3018 -14686.2588 4498.666]", + "[-4307.8564 -14684.6201 4498.5693]", + "[-4826.9575 -14684.5273 4498.6353]", + "[-5344.1489 -14684.5332 4498.5854]", + "[-5861.7959 -14684.915 4498.6079]", + "[-6374.5239 -14685.5195 4498.7603]", + "[-6887.9043 -14670.5342 4498.6626]", + "[-7399.8442 -14635.4463 4498.7266]", + "[-7909.3716 -14579.0186 4498.6372]", + "[-8415.6963 -14501.9932 4498.3877]", + "[-8925.3525 -14397.1797 4498.5967]", + "[-9428.1191 -14266.2051 4498.7559]", + "[-9920.585 -14104.5908 4498.4648]", + "[-10400.3252 -13911.5869 4498.7612]", + "[-10863.6621 -13685.127 4498.5073]", + "[-11307.0615 -13423.8018 4498.6396]", + "[-11726.0586 -13126.9297 4498.4375]", + "[-12123.0967 -12789.999 4498.1523]", + "[-12487.4355 -12420.1094 4498.3848]", + "[-12816.0439 -12019.9863 4498.2793]", + "[-13109.1377 -11594.7324 4498.4224]", + "[-13365.2344 -11147.9131 4498.5874]", + "[-13584.9307 -10683.6758 4498.6274]", + "[-13770.79 -10206.4424 4498.4399]", + "[-13927.1123 -9710.373 4498.4951]", + "[-14053.0225 -9211.9229 4498.4917]", + "[-14152.3809 -8703.9004 4498.6729]", + "[-14227.8896 -8196.0557 4498.3027]", + "[-14281.5781 -7686.061 4498.7915]", + "[-14313.4766 -7171.2119 4498.77]", + "[-14327.5264 -6650.5 4498.5786]", + "[-14325.4102 -6133.7588 4498.2905]", + "[-14324.8174 -5614.1797 4498.394]", + "[-14324.3418 -5093.8594 4498.314]", + "[-14325.332 -4577.0234 4498.4136]", + "[-14323.1416 -4059.7388 4498.4028]", + "[-14323.9111 -3543.0452 4498.4224]", + "[-14323.5361 -3026.6116 4498.4678]", + "[-14324.6279 -2510.4265 4498.6548]", + "[-14324.9229 -1994.4821 4498.542]", + "[-14309.4971 -1478.9558 4498.5698]", + "[-14251.5918 -966.6289 4498.6592]", + "[-14161.5547 -459.582 4498.6079]", + "[-14133.5723 54.3415 4498.7168]", + "[-14136.5352 566.9011 4498.4551]", + "[-14139.2207 1079.1185 4498.3892]", + "[-14139.7705 1599.8484 4497.0171]", + "[-14122.8457 2119.9058 4496.4424]", + "[-14084.2197 2638.1477 4494.9663]", + "[-14024.8633 3154.3267 4493.9883]", + "[-13942.2109 3667.1436 4493.0083]", + "[-13831.8906 4174.4785 4492.2612]", + "[-13694.6396 4674.5103 4491.3242]", + "[-13526.3672 5164.6045 4490.5356]", + "[-13324.6592 5641.5156 4490.1138]", + "[-13087.8203 6101.6016 4489.6616]", + "[-12814.3643 6540.3228 4489.4937]", + "[-12504.707 6953.4102 4489.1011]", + "[-12159.4697 7336.2793 4488.8999]", + "[-11781.7734 7686.1943 4488.9341]", + "[-11374.5742 7999.7065 4489.5313]", + "[-10942.3301 8275.9209 4489.8496]", + "[-10480.8066 8519.7734 4489.9199]", + "[-10003.2031 8726.8506 4490.8638]", + "[-9513.8262 8900.2529 4491.4185]", + "[-9015.4785 9040.3643 4492.1382]", + "[-8511.459 9152.1582 4492.9902]", + "[-8003.9351 9238.7861 4493.7617]", + "[-7494.293 9300.8516 4494.7148]", + "[-6983.8691 9342.7061 4495.9971]", + "[-6464.0981 9364.9746 4496.873]", + "[-5946.1206 9368.6992 4498.5171]", + "[-5431.4863 9366.042 4507.3022]", + "[-4910.9438 9365.626 4528.1196]", + "[-4391.3633 9364.7725 4547.2388]", + "[-3875.678 9365.6221 4564.9517]", + "[-3363.3213 9365.998 4582.8203]", + "[-2843.0217 9365.8145 4600.9863]", + "[-2323.5217 9365.8711 4619.1118]", + "[-1811.4143 9365.8066 4637.0249]", + "[-1297.443 9365.4199 4655.1465]", + "[-781.6437 9366.2324 4672.9824]", + "[-264.2775 9365.6738 4691.0771]", + "[254.5579 9365.6104 4709.1787]", + "[774.7219 9365.7139 4727.3423]", + "[1286.4219 9365.7217 4745.208]", + "[1799.1908 9365.1973 4763.0688]", + "[2312.9263 9364.75 4780.9551]", + "[2827.5625 9365.6533 4798.9824]", + "[3343.0171 9364.8018 4817.0566]", + "[3859.2361 9365.167 4835.1011]", + "[4376.1328 9366.0293 4853.1509]", + "[4893.6807 9365.4316 4871.2212]", + "[5411.8149 9365.7119 4889.2529]", + "[5930.4951 9364.6563 4907.3047]", + "[6449.6543 9365.6709 4925.5205]", + "[6969.2734 9365.3447 4943.6367]", + "[7481.373 9364.4209 4944.168]", + "[7995.2427 9349.1387 4940.5122]", + "[8511.748 9311.3662 4939.5449]", + "[9022.5205 9253.5635 4939.0151]", + "[9536.1797 9170.6543 4937.895]", + "[10038.1807 9064.1191 4936.6069]", + "[10533.5898 8930.1855 4936.0903]", + "[11019.7979 8765.2461 4935.2163]", + "[11493.0225 8568.2305 4934.6689]", + "[11950.1533 8337.0078 4934.6353]", + "[12394.8994 8064.1099 4933.5376]", + "[12814.2676 7755.3066 4933.4712]", + "[13203.1416 7409.6426 4933.4014]", + "[13558.2021 7030.1074 4933.8613]", + "[13876.8604 6620.7969 4934.1099]", + "[14157.4902 6185.7085 4934.4761]", + "[14400.3809 5729.9951 4934.6597]", + "[14607.4883 5258.4141 4934.9868]", + "[14780.3906 4774.7422 4935.7959]", + "[14921.9814 4282.4229 4936.313]", + "[15037.5596 3774.5076 4937.4429]", + "[15126.1221 3262.4768 4938.1777]", + "[15191.1152 2748.4111 4939.4658]", + "[15232.6943 2237.8291 4940.7241]", + "[15256.1426 1718.0212 4941.1567]", + "[15260.8965 1200.2242 4942.2275]", + "[15203.4824 686.7549 4931.2456]", + "[15108.2646 363.235 4926.6558]", + "[14892.8057 -108.0341 4924.96]", + "[14619.7295 -546.9429 4927.5601]", + "[14302.8203 -954.7114 4933.3252]", + "[13957.8545 -1335.2717 4940.3047]", + "[13594.6045 -1701.6091 4943.9136]", + "[13263.6025 -2098.5571 4942.5361]", + "[12972.166 -2523.9417 4941.938]", + "[12728.7539 -2978.188 4942.0503]", + "[12546.8154 -3460.6509 4942.3442]", + "[12443.0986 -3962.0603 4942.1621]", + "[12423.2949 -4477.8403 4941.8311]", + "[12424.0957 -4995.311 4940.7813]", + "[12392.6094 -5507.8994 4939.6787]", + "[12337.2197 -6020.2988 4938.7178]", + "[12260.8516 -6528.1855 4937.5947]", + "[12158.332 -7032.6748 4936.9985]", + "[12028.5518 -7535.3452 4936.333]", + "[11867.8232 -8030.0664 4935.5874]", + "[11675.0723 -8509.3145 4934.6885]", + "[11450.1494 -8969.3838 4934.5376]", + "[11184.0117 -9417.1602 4934.3809]", + "[10882.457 -9837.2217 4933.7568]", + "[10542.3232 -10231.0195 4933.7441]", + "[10167.8789 -10593.0186 4933.4751]", + "[9766.4492 -10915.3799 4934.0005]", + "[9338.3896 -11200.2959 4934.1226]", + "[8889.3086 -11448.4277 4934.3711]", + "[8414.1543 -11664.8643 4934.9482]", + "[7926.0195 -11846.4404 4935.7334]", + "[7428.228 -11994.751 4936.7598]", + "[6924.127 -12113.9365 4937.3369]", + "[6415.4673 -12205.3057 4938.3018]", + "[5904.7715 -12273.1074 4939.1055]", + "[5392.8667 -12317.7041 4939.9941]", + "[4881.2046 -12343.7441 4941.1621]", + "[4360.8472 -12352.1738 4942.3252]", + "[3841.5901 -12340.5557 4942.1743]", + "[3329.4136 -12294.2314 4942.1934]", + "[2819.6089 -12206.207 4941.7827]", + "[2309.4702 -12160.2246 4941.9468]", + "[1791.8257 -12159.1934 4942.1748]", + "[1277.6732 -12163.5098 4941.9214]", + "[763.6746 -12164.7412 4941.6025]", + "[248.6697 -12166.0391 4941.3345]", + "[-263.4801 -12165.1943 4941.4727]", + "[-779.3474 -12165.8428 4941.4521]", + "[-1291.4965 -12165.2197 4941.4067]", + "[-1804.9211 -12164.5928 4941.4844]", + "[-2318.5137 -12164.7168 4941.4238]", + "[-2831.0845 -12165.3203 4941.5146]", + "[-3069.5032 -12165.415 4941.5283]", + "[-3229.0647 -12164.3965 4941.542]", + "[-3744.314 -12166.0244 4941.4795]", + "[-4258.4829 -12164.793 4941.4927]", + "[-4770.667 -12164.4941 4942.0234]", + "[-5286.8008 -12190.2422 4942.1377]", + "[-5794.4146 -12268.7412 4942.0161]", + "[-6302.4189 -12365.873 4942.0625]", + "[-6809.7759 -12458.3975 4941.8813]", + "[-7323.6792 -12516.7725 4942.0918]", + "[-7841.1147 -12526.8779 4942.0366]", + "[-8354.8262 -12503.0254 4940.6172]", + "[-8868.6221 -12467.7852 4939.6221]", + "[-9380.4561 -12410.6807 4938.5605]", + "[-9887.6602 -12331.1816 4937.6484]", + "[-10394.75 -12226.3271 4936.5552]", + "[-10891.5518 -12094.4541 4935.8545]", + "[-11382.3574 -11930.7803 4935.1382]", + "[-11856.2344 -11736.7715 4934.8584]", + "[-12315.9648 -11508.0469 4934.1406]", + "[-12756.5928 -11242.7666 4934.0205]", + "[-13172.8945 -10940.5762 4933.7227]", + "[-13560.0586 -10602.8447 4933.439]", + "[-13914.1953 -10232.2822 4933.4487]", + "[-14237.6445 -9826.3594 4933.5781]", + "[-14522.125 -9395.0527 4933.8843]", + "[-14769.0371 -8944.4404 4934.3994]", + "[-14981.8848 -8471.1914 4935.0239]", + "[-15159.8818 -7987.7354 4935.5186]", + "[-15308.334 -7489.4077 4936.2495]", + "[-15425.6563 -6987.0752 4937.3975]", + "[-15517.7021 -6475.0762 4938.4849]", + "[-15583.7207 -5963.6885 4939.2178]", + "[-15628.6777 -5445.8252 4940.291]", + "[-15653.8184 -4931.9966 4940.8286]", + "[-15660.6436 -4413.7407 4941.6621]", + "[-15656.2695 -3895.9199 4948.6436]", + "[-15656.4277 -3378.7769 4968.6084]", + "[-15657.2109 -2859.5068 4987.894]", + "[-15656.5127 -2341.7341 5005.7505]", + "[-15656.6064 -1828.9474 5023.6563]", + "[-15657.1309 -1313.8246 5041.7168]", + "[-15657.3896 -798.4891 5059.6909]", + "[-15657.249 -283.2689 5077.7578]", + "[-15657.3213 232.0025 5095.6709]", + "[-15656.3086 747.2469 5113.6558]", + "[-15657.1699 1262.4631 5131.7026]", + "[-15656.6084 1777.7471 5149.6089]", + "[-15657.0518 2292.9897 5167.626]", + "[-15656.8428 2808.26 5185.4771]", + "[-15656.708 3323.4751 5203.5635]", + "[-15656.8164 3838.7175 5221.5654]", + "[-15656.9844 4353.9106 5239.5845]", + "[-15657.1162 4869.9917 5247.541]", + "[-15646.8984 5387.9351 5242.0747]", + "[-15615.2793 5906.7949 5240.6411]", + "[-15561.6709 6424.1211 5240.0791]", + "[-15486.3027 6934.3486 5238.7681]", + "[-15387.1318 7437.5132 5237.9063]", + "[-15261.1016 7934.1221 5237.4805]", + "[-15101.8184 8430.7285 5237.0459]", + "[-14910.9844 8915.1221 5236.1787]", + "[-14684.7305 9383.3154 5235.5903]", + "[-14421.0352 9831.3262 5235.1665]", + "[-14121.3154 10255.293 5234.8252]", + "[-13784.3018 10649.6592 5234.8853]", + "[-13414.1221 11011.6309 5234.9033]", + "[-13012.6563 11337.1514 5234.9092]", + "[-12585.334 11626.0137 5235.4839]", + "[-12136.5029 11877.9424 5235.4341]", + "[-11670.4697 12093.4922 5236.3237]", + "[-11191.0479 12273.9463 5236.9736]", + "[-10693.1826 12425.8125 5237.5352]", + "[-10188.626 12547.166 5238.5747]", + "[-9679.6416 12640.8047 5239.1323]", + "[-9170.5859 12709.207 5239.9053]", + "[-8658.7852 12757.4463 5241.1221]", + "[-8147.1602 12785.5469 5242.4312]", + "[-7629.8735 12794.5615 5243.2393]", + "[-7114.1953 12793.2803 5243.4473]", + "[-6597.0122 12793.1035 5243.3428]", + "[-6082.4976 12792.5723 5243.3213]", + "[-5568.1138 12792.9385 5243.3003]", + "[-5053.4492 12791.5234 5242.6553]", + "[-4538.8091 12792.207 5242.7866]", + "[-4024.73 12792.4658 5243.0059]", + "[-3508.8425 12792.1357 5242.855]", + "[-2996.3074 12793.1172 5242.9492]", + "[-2482.7356 12792.7266 5242.5522]", + "[-1970.653 12793.043 5242.6729]", + "[-1455.7784 12793.2012 5242.6836]", + "[-942.1647 12792.6787 5242.5903]", + "[-428.4614 12792.4922 5242.6494]", + "[84.9851 12792.0234 5242.6357]", + "[598.7684 12793.9863 5242.7056]", + "[1113.1909 12792.1445 5242.8735]", + "[1628.4561 12793.1953 5242.7319]", + "[2140.8079 12792.4434 5242.3423]", + "[2652.2834 12837.9229 5242.7725]", + "[3154.3247 12954.6875 5242.6104]", + "[3652.9116 13082.1035 5242.6826]", + "[4164.2612 13151.2246 5242.8481]", + "[4676.3345 13148.0498 5242.8623]", + "[5189.8857 13140.543 5242.7324]", + "[5704.0439 13140.3145 5242.8149]", + "[6216.4951 13141.3555 5242.5132]", + "[6731.4214 13141.5869 5242.2056]", + "[7245.4014 13141.2275 5242.3286]", + "[7759.2915 13141.6064 5242.4907]", + "[8274.0625 13141.4414 5242.4507]", + "[8786.7158 13140.5811 5242.4346]", + "[9299.5908 13141.7373 5242.4756]", + "[9811.6641 13140.5547 5242.4673]", + "[10324.04 13141.5625 5242.4683]", + "[10553.5615 13141.3896 5242.5015]", + "[10707.8135 13138.8076 5241.4746]", + "[11220.4092 13096.3779 5234.7876]", + "[11722.4346 12980.4414 5229.9331]", + "[12178.2119 12786.6143 5226.8149]", + "[12420.2627 12629.1279 5225.7617]", + "[12712.8193 12354.7979 5225.6953]", + "[12863.2031 12153.7051 5226.1494]", + "[13075.6201 11732.7236 5229.2422]", + "[13190.0732 11352.3037 5232.126]", + "[13268.8818 10845.7256 5237.0337]", + "[13291.0723 10333.4258 5242.5879]", + "[13281.1621 9815.292 5247.9932]", + "[13277.835 9301.8828 5266.9199]", + "[13278.4482 8789.9893 5286.2554]", + "[13278.2949 8277.3047 5304.0269]", + "[13279.1523 7760.7979 5322.0835]", + "[13278.1064 7247.8564 5340.1572]", + "[13278.4023 6732.5815 5357.7964]", + "[13279.7568 6217.6953 5370.1011]", + "[13260.0674 5705.7954 5361.5796]", + "[13175.8633 5200.5581 5355.0464]", + "[13010.8262 4715.6567 5351.5366]", + "[12834.7754 4396.3027 5349.6099]", + "[12613.5469 4122.1821 5348.7485]", + "[12395.2383 3932.0474 5349.4336]", + "[12054.7949 3727.356 5351.0918]", + "[11681.1025 3583.9656 5353.6587]", + "[11178.7148 3476.6914 5358.0332]", + "[10666.7793 3434.7566 5363.4204]", + "[10151.0781 3439.8508 5366.8271]", + "[9637.6592 3443.8213 5365.8857]", + "[9124.1855 3443.5867 5365.3159]", + "[8610.9102 3443.3633 5365.4727]", + "[8098.3491 3442.6934 5365.4629]", + "[7585.8789 3443.3967 5365.5054]", + "[7070.127 3442.489 5365.5264]", + "[6556.46 3443.9602 5365.4517]", + "[6044.3057 3442.5259 5365.502]", + "[5531.7271 3443.6904 5365.5049]", + "[5018.1572 3442.5791 5365.3823]", + "[4503.7749 3443.0596 5365.5034]", + "[3989.9832 3443.1277 5365.2354]", + "[3476.1008 3442.5991 5365.4028]", + "[3340.6724 3443.032 5365.4937]" + ], + + [ + "[3361.6997 3162.0371 5364.7939]", + "[3462.5588 3164.7676 5365.5332]", + "[3977.4509 3177.4404 5365.5298]", + "[4491.8999 3178.6851 5365.4126]", + "[5006.0864 3178.1252 5365.5371]", + "[5522.6055 3177.9819 5365.6167]", + "[6038.9976 3177.3728 5365.6738]", + "[6555.1094 3177.6028 5365.3643]", + "[7069.6729 3178.5911 5365.4658]", + "[7584.4106 3178.0266 5365.4663]", + "[8103.1211 3177.0364 5365.3984]", + "[8615.5176 3177.3428 5365.5303]", + "[9134.333 3177.5718 5365.4316]", + "[9650.2793 3178.0352 5365.9756]", + "[10169.3613 3178.4946 5365.8076]", + "[10682.3027 3178.5366 5365.9399]", + "[11194.8262 3215.6741 5366.3486]", + "[11698.5889 3318.4336 5366.0889]", + "[12178.1221 3500.0781 5365.4326]", + "[12540.5547 3715.7715 5365.9678]", + "[12816.2451 3953.5376 5365.7588]", + "[13064.7891 4258.4438 5365.752]", + "[13257.4492 4603.499 5365.8037]", + "[13425.9414 5087.854 5365.7583]", + "[13520.3428 5592.6489 5366.0542]", + "[13555.2705 6106.8984 5365.8721]", + "[13548.5771 6623.4844 5365.0313]", + "[13546.3691 7140.5386 5345.1953]", + "[13544.3779 7659.165 5325.0615]", + "[13545.4023 8175.7266 5307.3701]", + "[13544.9541 8694.6025 5289.4775]", + "[13544.8721 9212.9072 5271.188]", + "[13544.5898 9728.9258 5253.1958]", + "[13543.9736 10242.1309 5239.2969]", + "[13537.373 10761.0264 5241.0923]", + "[13472.0322 11269.7744 5242.8311]", + "[13337.4063 11764.1299 5242.3579]", + "[13117.9805 12231.9492 5242.439]", + "[12934.8574 12492.2031 5242.123]", + "[12596.8193 12828.1523 5242.2236]", + "[12415.335 12954.1436 5242.2417]", + "[11957.3486 13183.9561 5242.272]", + "[11539.1934 13308.7295 5242.3027]", + "[11030.6777 13390.9814 5242.6016]", + "[10553.5615 13402.8711 5242.5078]", + "[10037.6943 13403.4414 5242.4873]", + "[9524.2275 13403.668 5242.5039]", + "[9009.1953 13403.6025 5242.4243]", + "[8490.0566 13403.626 5242.6045]", + "[7973.7236 13403.2158 5242.4111]", + "[7460.0156 13403.5244 5242.4575]", + "[6941.6611 13403.75 5242.354]", + "[6425.7764 13404.5176 5242.7178]", + "[5911.0107 13404.3711 5243.1797]", + "[5396.0137 13403.7783 5243.1899]", + "[4880.123 13403.9365 5242.8726]", + "[4365.5122 13403.2178 5242.729]", + "[3852.3193 13404.1143 5242.9844]", + "[3332.8831 13404.6807 5242.916]", + "[2814.6902 13402.5186 5242.8877]", + "[2297.5786 13402.4893 5242.9902]", + "[1781.4463 13403.6416 5242.7373]", + "[1266.207 13403.7451 5242.7729]", + "[751.8417 13402.7891 5242.814]", + "[238.4199 13402.3838 5242.6572]", + "[-274.1158 13403.459 5242.7598]", + "[-793.4111 13403.4531 5242.7227]", + "[-1311.7972 13403.3965 5242.8936]", + "[-1828.9331 13404.4248 5242.7236]", + "[-2348.1899 13403.2773 5242.542]", + "[-2864.7078 13412.8789 5242.7129]", + "[-3377.459 13412.2695 5242.7979]", + "[-3887.522 13340.3955 5242.8428]", + "[-4383.4116 13212.7344 5242.7939]", + "[-4886.1201 13096.2178 5242.9238]", + "[-5402.0757 13055.5039 5243.627]", + "[-5918.8438 13055.5547 5243.3242]", + "[-6437.1753 13056.4111 5243.3569]", + "[-6952.4512 13056.5049 5243.3032]", + "[-7469.4722 13059.0098 5242.9448]", + "[-7988.8677 13053.6738 5244.0786]", + "[-8500.9326 13032.3105 5244.8257]", + "[-9011.9297 12992.458 5245.6323]", + "[-9527.71 12931.415 5246.6753]", + "[-10041.125 12846.0469 5247.686]", + "[-10546.4268 12735.3359 5248.4185]", + "[-11048.7383 12596.3311 5249.0747]", + "[-11534.3291 12430.0605 5249.1587]", + "[-12008.0195 12231.8955 5249.8179]", + "[-12466.1162 12001.1611 5250.1519]", + "[-12912.4707 11730.2441 5250.8325]", + "[-13332.8398 11424.2139 5251.021]", + "[-13723.4785 11085.5889 5250.9824]", + "[-14080.1436 10716.6064 5250.8423]", + "[-14408.2275 10312.916 5250.8354]", + "[-14698.8291 9887.0645 5250.7588]", + "[-14955.8145 9432.6338 5250.3345]", + "[-15175.8867 8965.1973 5249.832]", + "[-15365.2344 8477.9307 5249.541]", + "[-15521.4756 7985.4653 5248.6162]", + "[-15648.877 7479.0122 5247.9004]", + "[-15748.333 6973.2461 5247.4326]", + "[-15824.1113 6458.2959 5246.5981]", + "[-15877.7822 5937.1348 5245.646]", + "[-15910.4932 5424.7827 5244.5488]", + "[-15920.4531 4906.9067 5246.6704]", + "[-15921.1914 4383.1787 5241.3213]", + "[-15921.0869 3866.5122 5222.8271]", + "[-15921.8291 3342.6763 5204.3823]", + "[-15920.9961 2825.0571 5186.4365]", + "[-15921.1895 2300.7007 5167.8589]", + "[-15920.9736 1783.3752 5149.8198]", + "[-15921.1748 1262.0658 5131.8706]", + "[-15921.5928 741.0216 5113.6401]", + "[-15920.7764 224.1671 5095.6299]", + "[-15922.2236 -298.0815 5077.2773]", + "[-15921.5742 -821.8887 5058.8403]", + "[-15920.6563 -1343.401 5040.6631]", + "[-15920.7666 -1861.2896 5022.6401]", + "[-15921.2617 -2376.4988 5004.7061]", + "[-15920.9756 -2888.5435 4987.1865]", + "[-15922.3291 -3408.7627 4967.3267]", + "[-15921.9268 -3926.4434 4946.8667]", + "[-15925.7617 -4445.5923 4942.3711]", + "[-15917.7891 -4964.0659 4943.2593]", + "[-15891.1348 -5480.9487 4944.1348]", + "[-15845.876 -5995.5459 4944.8008]", + "[-15779.4951 -6506.7139 4945.3892]", + "[-15690.1152 -7013.1777 4946.252]", + "[-15575.4932 -7513.2788 4947.0522]", + "[-15429.5801 -8015.3579 4947.6084]", + "[-15253.2139 -8506.4482 4948.4092]", + "[-15044.3857 -8983.4863 4948.938]", + "[-14801.0742 -9442.6123 4949.0898]", + "[-14522.7031 -9879.8877 4949.2837]", + "[-14210.4473 -10292.3945 4949.6631]", + "[-13863.9072 -10675.1426 4949.7739]", + "[-13485.3408 -11024.7285 4949.561]", + "[-13079.627 -11341.001 4949.7261]", + "[-12649.2627 -11621.0781 4949.1772]", + "[-12199.0127 -11866.7578 4948.9331]", + "[-11732.3193 -12078.4336 4948.25]", + "[-11252.5449 -12257.2754 4947.8994]", + "[-10752.2227 -12408.3789 4947.2783]", + "[-10244.3057 -12530.666 4946.7319]", + "[-9732.8545 -12626.1592 4945.7949]", + "[-9218.4922 -12696.8525 4944.7402]", + "[-8706.4297 -12745.5342 4943.9492]", + "[-8192.0215 -12773.0615 4943.1069]", + "[-7676.7002 -12775.2227 4942.186]", + "[-7160.4966 -12781.2666 4942.1304]", + "[-6646.1968 -12840.0684 4942.272]", + "[-6139.4468 -12922.7002 4942.0571]", + "[-5625.9551 -12960.6572 4942.3716]", + "[-5110.3589 -12965.5049 4942.082]", + "[-4598.0483 -12966.4014 4942.123]", + "[-4085.6055 -12965.6104 4941.4561]", + "[-3571.5046 -12964.9785 4941.4883]", + "[-3058.7693 -12966.4639 4941.5708]", + "[-2545.5237 -12966.2373 4941.3965]", + "[-2069.6462 -12965.2139 4941.5073]", + "[-1557.2275 -12965.625 4941.5103]", + "[-1045.1715 -12965.6084 4941.4883]", + "[-531.7745 -12965.207 4941.5249]", + "[-187.6419 -12967.5322 4941.4785]", + "[-87.0243 -12967.3604 4941.4712]", + "[427.1486 -12966.9336 4941.4775]", + "[941.179 -12967.8301 4941.3755]", + "[1454.9063 -12967.7793 4942.2407]", + "[1968.5839 -12950.8506 4942.0771]", + "[2478.1191 -12879.7139 4942.084]", + "[2985.0181 -12786.0186 4941.9346]", + "[3491.9072 -12688.6777 4941.8872]", + "[4003.6794 -12622.7959 4941.8911]", + "[4520.0127 -12605.3428 4942.1553]", + "[5036.4209 -12601.0791 4943.0908]", + "[5549.7402 -12572.7119 4944.2246]", + "[6061.1885 -12520.9473 4944.979]", + "[6568.1123 -12448.6016 4945.8057]", + "[7072.4141 -12351.9844 4946.6729]", + "[7571.981 -12229.7236 4947.4453]", + "[8063.2266 -12077.918 4947.9414]", + "[8543.0986 -11897.0137 4948.3633]", + "[9012.79 -11681.0742 4948.6348]", + "[9462.8633 -11432.4609 4949.1089]", + "[9890.8672 -11149.5537 4949.4888]", + "[10295.873 -10831.166 4949.7627]", + "[10674.2471 -10475.8203 4949.7236]", + "[11019.6133 -10087.9912 4949.6836]", + "[11329.6934 -9673.1396 4949.4111]", + "[11602.376 -9238.3623 4949.1489]", + "[11843.3027 -8777.6934 4949.0508]", + "[12048.8447 -8301.7627 4948.105]", + "[12220.4434 -7813.8916 4947.6064]", + "[12362.1885 -7317.8447 4946.6567]", + "[12476.4805 -6815.5698 4946.2622]", + "[12565.3086 -6308.9033 4945.418]", + "[12631.0918 -5799.1729 4945.0151]", + "[12674.7959 -5287.501 4943.7505]", + "[12699.0566 -4774.8496 4943.082]", + "[12707.0146 -4261.7207 4942.0161]", + "[12743.165 -3749.0183 4932.1343]", + "[12816.1396 -3458.5332 4927.2451]", + "[13014.126 -2981.075 4924.6841]", + "[13274.9434 -2534.7236 4926.6709]", + "[13580.5928 -2120.5957 4931.6836]", + "[13918.9082 -1735.1189 4938.7632]", + "[14283.7627 -1368.5349 4944.3022]", + "[14621.6992 -983.5038 4942.521]", + "[14920.9189 -565.6421 4941.7036]", + "[15177.5195 -118.0402 4942.0737]", + "[15377.5732 360.0087 4941.9834]", + "[15503.3828 859.5001 4942.5703]", + "[15541.9102 1371.0039 4942.3877]", + "[15517.3564 1887.2161 4942.9092]", + "[15487.3633 2399.4348 4943.8721]", + "[15439.4434 2914.0801 4945.0435]", + "[15369.8193 3423.7722 4945.895]", + "[15275.043 3933.6055 4946.2979]", + "[15155.4521 4435.2856 4947.1465]", + "[15007.9395 4927.022 4947.9131]", + "[14828.708 5413.5034 4948.5479]", + "[14617.6445 5884.4546 4948.7983]", + "[14373.8486 6336.6909 4949.23]", + "[14092.3037 6772.252 4949.4697]", + "[13775.8926 7180.0791 4949.5601]", + "[13427.4883 7557.7393 4949.7188]", + "[13043.9121 7906.7866 4949.6187]", + "[12633.8643 8220.3555 4949.5566]", + "[12201.5762 8498.1719 4949.2153]", + "[11743.8369 8742.2031 4948.5693]", + "[11271.1318 8950.4434 4948.1641]", + "[10787.3242 9125.8643 4947.6987]", + "[10295.2441 9270.8281 4947.1313]", + "[9790.8848 9389.667 4946.4302]", + "[9282.3242 9482.8887 4945.7495]", + "[8770.8213 9551.1465 4944.7656]", + "[8257.6846 9597.9922 4943.8691]", + "[7743.7417 9624.7275 4942.8398]", + "[7229.7637 9633.6338 4942.1548]", + "[6715.7368 9631.7783 4938.3574]", + "[6198.9585 9631.6309 4918.02]", + "[5684.1685 9630.8857 4898.3506]", + "[5165.832 9630.3428 4880.5679]", + "[4647.2197 9631.752 4862.5176]", + "[4133.3115 9629.9912 4844.5928]", + "[3614.782 9631.3916 4826.4844]", + "[3100.364 9631.3174 4808.521]", + "[2584.1558 9631.3242 4790.4927]", + "[2067.8555 9631.0957 4772.4136]", + "[1553.0503 9631.8174 4754.4136]", + "[1041.2866 9631.2441 4736.4775]", + "[524.6104 9630.5674 4718.5161]", + "[4.8398 9631.708 4700.3667]", + "[-508.7119 9630.9951 4682.4404]", + "[-1021.7219 9631.207 4664.5308]", + "[-1534.1046 9631.1758 4646.6235]", + "[-2045.9384 9630.8936 4628.7451]", + "[-2566.9233 9631.3975 4610.5425]", + "[-3087.4587 9631.3252 4592.3228]", + "[-3607.6111 9630.7539 4574.2656]", + "[-4127.335 9631.3955 4556.0557]", + "[-4646.7603 9631.252 4537.918]", + "[-5165.8965 9631.5977 4519.7842]", + "[-5684.7666 9631.0039 4501.6724]", + "[-6202.5947 9631.1289 4494.1284]", + "[-6717.6133 9621.1768 4498.1895]", + "[-7232.3496 9591.4834 4499.6606]", + "[-7751.1514 9540.3535 4500.9209]", + "[-8260.8721 9467.457 4501.0845]", + "[-8767.5322 9371.4053 4502.3413]", + "[-9267.4316 9248.71 4502.668]", + "[-9758.3438 9097.9141 4503.3569]", + "[-10237.8643 8917.4814 4503.9233]", + "[-10711.2998 8700.4199 4504.2285]", + "[-11166.2783 8449.1201 4504.5264]", + "[-11599.0049 8163.4561 4504.9106]", + "[-12005.3662 7843.1182 4504.9585]", + "[-12380.957 7488.7324 4505.0859]", + "[-12722.7842 7103.2979 4505.0825]", + "[-13031.3262 6692.3735 4505.0254]", + "[-13303.6914 6257.917 4504.6411]", + "[-13545.4063 5796.2451 4504.2046]", + "[-13750.1338 5318.3203 4503.5923]", + "[-13923.3857 4829.1689 4503.1685]", + "[-14065.5898 4330.9253 4502.3042]", + "[-14180.3555 3826.3027 4501.9175]", + "[-14268.9795 3317.0371 4501.1133]", + "[-14334.7002 2804.5847 4500.2769]", + "[-14377.5693 2289.8276 4499.209]", + "[-14403.209 1774.1367 4498.2485]", + "[-14409.6631 1257.7937 4497.3799]", + "[-14416.1514 743.5869 4498.2939]", + "[-14454.6162 232.0863 4498.4346]", + "[-14522.7939 -282.9196 4498.3833]", + "[-14618.4766 -791.5934 4498.3516]", + "[-14744.7285 -1290.1548 4498.624]", + "[-14902.2666 -1777.3474 4498.5371]", + "[-15089.2314 -2262.7754 4498.4692]", + "[-15245.7344 -2757.7163 4498.5059]", + "[-15361.333 -3263.1924 4498.3589]", + "[-15445.9932 -3773.8958 4498.4194]", + "[-15502.7207 -4287.2339 4498.8452]", + "[-15532.7725 -4802.1187 4498.5811]", + "[-15538.3428 -5317.2153 4498.6416]", + "[-15535.5518 -5830.9683 4498.6479]", + "[-15533.0869 -6343.6421 4498.5313]", + "[-15533.9102 -6864.0742 4498.5557]", + "[-15535.2256 -7383.5332 4498.4312]", + "[-15533.3887 -7901.7896 4498.4624]", + "[-15516.1426 -8419.0977 4498.644]", + "[-15479.1504 -8934.6309 4498.2729]", + "[-15421.127 -9447.583 4498.8506]", + "[-15339.5107 -9956.6514 4498.6533]", + "[-15232.502 -10460.4434 4498.5542]", + "[-15098.7725 -10957.21 4498.4878]", + "[-14935.3887 -11444.3857 4498.688]", + "[-14740.167 -11919.1484 4498.6279]", + "[-14512.5088 -12378.4248 4498.4253]", + "[-14245.1348 -12825.0889 4498.8184]", + "[-13941.0537 -13246.5518 4498.4941]", + "[-13601.7373 -13638.9443 4498.6108]", + "[-13229.415 -13998.2656 4498.6196]", + "[-12827.9971 -14322.6338 4498.3638]", + "[-12401.3398 -14611.0049 4498.4526]", + "[-11953.6299 -14862.5889 4498.4785]", + "[-11489.7324 -15079.332 4498.6821]", + "[-11004.5352 -15265.3896 4498.4619]", + "[-10514.8086 -15416.4551 4498.416]", + "[-10013.6504 -15539.3838 4498.5977]", + "[-9502.6084 -15637.1895 4498.5098]", + "[-8989.8359 -15710.3213 4498.6812]", + "[-8471.5303 -15761.5313 4498.854]", + "[-7956.4297 -15792.0059 4498.8252]", + "[-7444.2476 -15804.3887 4498.7188]", + "[-6928.1377 -15801.9629 4498.584]", + "[-6410.0723 -15801.457 4498.6177]", + "[-5891.1196 -15800.1016 4498.5298]", + "[-5372.4399 -15801.458 4498.5928]", + "[-4855.0498 -15801.1455 4498.5347]", + "[-4339.7661 -15800.7627 4498.6885]", + "[-3827.3232 -15801.0977 4498.5146]", + "[-3307.2065 -15800.2256 4498.6274]", + "[-2791.1326 -15800.1211 4498.54]", + "[-2268.1091 -15801.5576 4498.7725]", + "[-1750.4788 -15800.2949 4498.5396]", + "[-1228.6624 -15800.6123 4498.6333]", + "[-706.3625 -15800.9619 4498.6328]", + "[-184.2712 -15801.8359 4498.645]", + "[337.3586 -15801.6523 4498.5654]", + "[858.421 -15801.3281 4498.4185]", + "[1378.8491 -15800.334 4498.3838]", + "[1898.7577 -15801.8516 4498.5664]", + "[2418.0364 -15801.4648 4498.4448]", + "[2936.8403 -15800.752 4498.3965]", + "[3455.344 -15800.8281 4498.4287]", + "[3973.6006 -15800.7842 4498.4946]", + "[4491.6304 -15800.1563 4498.5068]", + "[5009.4609 -15802.1426 4498.4883]", + "[5526.8613 -15800.1777 4498.3716]", + "[6039.3867 -15801.7373 4498.4146]", + "[6551.4082 -15798.6826 4498.4438]", + "[7064.2695 -15777.7617 4498.52]", + "[7579.147 -15735.7852 4498.7749]", + "[8093.8467 -15673.1221 4498.4976]", + "[8602.6143 -15586.6299 4498.5288]", + "[9105.8984 -15475.0586 4498.7217]", + "[9601.9414 -15336.1875 4498.5981]", + "[10087.6465 -15165.7539 4498.3882]", + "[10560.5332 -14964.0977 4498.6797]", + "[11016.7383 -14728.1416 4498.4429]", + "[11451.8291 -14456.0986 4498.2729]", + "[11862.8604 -14150.6719 4498.4849]", + "[12251.833 -13804.293 4498.6768]", + "[12607.3857 -13424.8877 4498.5879]", + "[12926.9785 -13016.1738 4498.6348]", + "[13209.3057 -12582.2461 4498.4341]", + "[13455.3477 -12128.1943 4498.7852]", + "[13664.9219 -11657.5615 4498.5166]", + "[13842.6133 -11175.3975 4498.4438]", + "[13989.4092 -10684.2354 4498.6777]", + "[14108.5713 -10177.0889 4498.6597]", + "[14200.8945 -9665.499 4498.9028]", + "[14268.5293 -9150.9375 4498.5352]", + "[14314.6719 -8634.8838 4498.416]", + "[14340.5146 -8118.2129 4498.6191]", + "[14350.6436 -7601.6694 4498.459]", + "[14347.9561 -7085.6802 4498.6313]", + "[14346.1416 -6570.2856 4498.354]", + "[14346.5342 -6055.4424 4498.3569]", + "[14346.7148 -5541.0498 4498.4224]", + "[14347.0859 -5027.3062 4496.832]", + "[14346.8945 -4512.5996 4477.9702]", + "[14345.7373 -3997.2554 4458.4517]", + "[14346.125 -3477.5796 4440.4229]", + "[14346.4141 -2959.6882 4422.3701]", + "[14347.2012 -2442.595 4404.2495]", + "[14345.875 -1922.4457 4386.1294]", + "[14346.8125 -1402.6995 4367.936]", + "[14345.7178 -883.3853 4349.8101]", + "[14346.9131 -364.5943 4332]", + "[14345.6211 153.7561 4313.8252]", + "[14346.4336 671.3906 4295.5229]", + "[14346.3838 1188.7175 4277.4956]", + "[14347.127 1705.7614 4259.4146]", + "[14346.1367 2222.4963 4241.6152]", + "[14347.1602 2739.1077 4223.2925]", + "[14345.7178 3255.6025 4205.2427]", + "[14346.6045 3771.6533 4193.7026]", + "[14345.7852 4290.4355 4196.5425]", + "[14346.9805 4810.0269 4197.4302]", + "[14346.4785 5326.3984 4197.3291]", + "[14346.5498 5846.9883 4197.2378]", + "[14340.7471 6358.9658 4198.0771]", + "[14314.0586 6880.0493 4197.6621]", + "[14265.6094 7398.8994 4197.7061]", + "[14195.3125 7914.5259 4197.438]", + "[14100.5879 8425.5107 4197.4307]", + "[13978.5576 8929.9648 4197.4756]", + "[13828.7041 9426.2139 4197.5952]", + "[13647.7129 9911.4893 4197.6997]", + "[13432.6631 10382.0439 4197.6035]", + "[13183.4219 10834.7373 4197.5835]", + "[12898.5186 11264.9238 4197.6831]", + "[12577.7559 11668.1592 4197.6816]", + "[12223.3594 12040.9355 4197.4175]", + "[11838.0234 12380.0664 4197.5293]", + "[11425.7256 12684.1357 4197.6172]", + "[10981.8145 12956.9453 4197.437]", + "[10518.5186 13192.6689 4197.3394]", + "[10040.5713 13393.5869 4197.543]", + "[9551.126 13561.2041 4197.8901]", + "[9053.1006 13697.4277 4197.7285]", + "[8549.2227 13805.3975 4197.519]", + "[8041.7192 13889.3301 4197.5093]", + "[7531.6333 13949.2871 4197.5796]", + "[7020.3638 13989.2148 4197.8169]", + "[6508.501 14009.6855 4197.7695]", + "[5987.103 14013.6855 4197.7095]", + "[5466.2476 14010.71 4197.333]", + "[4946.0044 14009.5293 4197.4722]", + "[4426.1245 14010.5088 4197.3823]", + "[3906.8132 14010.6895 4198.4961]", + "[3386.7563 14009.7119 4186.3159]", + "[2865.6252 14010.3525 4164.3799]", + "[2351.5845 14009.1904 4146.1709]", + "[1831.9175 14009.6162 4128.168]", + "[1314.1675 14010.9512 4110.209]", + "[796.9125 14010.1416 4091.9314]", + "[275.8081 14010.0391 4073.7424]", + "[-241.675 14009.3447 4055.6526]", + "[-755.329 14010.2178 4038.0615]", + "[-1275.5973 14010.0977 4019.5715]", + "[-1792.6406 14010.0664 4001.6724]", + "[-2306.9626 14009.5352 3983.5364]", + "[-2818.9517 14010.5078 3965.8892]", + "[-3338.7695 14009.582 3947.583]", + "[-3856.989 14010.0996 3929.5957]", + "[-4373.8853 14009.6162 3911.2021]", + "[-4889.5293 14010.3965 3894.9541]", + "[-5402.5171 14009.3418 3894.2397]", + "[-5922.1846 14010.7598 3896.4717]", + "[-6436.7417 14009.959 3896.3608]", + "[-6952.7686 14011.1709 3896.4165]", + "[-7467.8867 14009.6436 3896.3872]", + "[-7983.0835 13990.8027 3896.9619]", + "[-8495.5459 13951.6143 3896.5076]", + "[-9005.4424 13892.9775 3896.8169]", + "[-9511.4316 13811.2852 3896.6807]", + "[-10011.9844 13703.5928 3896.5432]", + "[-10513.9209 13566.9033 3896.3987]", + "[-11006.0566 13400.3584 3896.5615]", + "[-11485.083 13200.7813 3896.2957]", + "[-11947.79 12967.0371 3896.4487]", + "[-12390.0381 12698.0303 3896.5095]", + "[-12807.3721 12393.25 3896.532]", + "[-13195.8779 12053.8838 3896.5967]", + "[-13551.0195 11681.4932 3896.2822]", + "[-13871.1504 11280.1846 3896.3452]", + "[-14155.5547 10854.2734 3896.4009]", + "[-14408.2168 10400.1846 3896.3555]", + "[-14625.165 9929.835 3896.5432]", + "[-14807.8721 9446.4648 3896.6533]", + "[-14958.4902 8953.6504 3896.5947]", + "[-15079.4307 8454.1162 3896.6951]", + "[-15173.0557 7950.0605 3896.5217]", + "[-15244.4482 7434.7144 3896.5498]", + "[-15294.5693 6917.9736 3896.6279]", + "[-15323.9473 6400.4233 3896.6216]", + "[-15335.8896 5883.0977 3896.6885]", + "[-15332.8545 5366.3003 3896.4236]", + "[-15332.3994 4850.4087 3896.5486]", + "[-15332.8789 4335.0361 3896.468]", + "[-15330.9385 3820.2759 3896.481]", + "[-15331.4355 3305.7649 3893.7278]", + "[-15331.9619 2789.5198 3873.3958]", + "[-15331.0977 2271.124 3853.5618]", + "[-15332.5498 1755.0206 3835.8118]", + "[-15331.2256 1238.5308 3817.8196]", + "[-15332.8848 719.6592 3799.6563]", + "[-15332.3447 205.7242 3781.7297]", + "[-15332.1846 -315.2141 3763.5439]", + "[-15332.1816 -831.6534 3745.5032]", + "[-15331.3232 -1349.1134 3727.3843]", + "[-15331.2559 -1868.5641 3709.2419]", + "[-15332.2588 -2382.0044 3691.4417]", + "[-15332.3896 -2899.3665 3673.2964]", + "[-15332.6924 -3412.5276 3655.3501]", + "[-15332.1211 -3930.9653 3637.2512]", + "[-15332.2168 -4446.4492 3619.2378]", + "[-15332.1777 -4959.4985 3601.3281]", + "[-15331.7324 -5479.1963 3583.1704]", + "[-15332.4287 -5997.1831 3565.0596]", + "[-15332.2676 -6513.7725 3547.0398]", + "[-15332.0488 -7029.2524 3528.9895]", + "[-15331.6533 -7543.8237 3511.0715]", + "[-15332.9199 -8057.6152 3493.1284]", + "[-15332.4873 -8570.6855 3475.2151]", + "[-15332.3408 -9083.1299 3457.3208]", + "[-15332.1523 -9597.9902 3448.46]", + "[-15332.4131 -10110.1807 3451.3848]", + "[-15331.3828 -10625.6934 3452.4617]", + "[-15331.3887 -11142.9736 3451.8909]", + "[-15296.8115 -11656.1816 3451.874]", + "[-15200.0156 -12164.4727 3451.8252]", + "[-15029.6504 -12652.9131 3451.3057]", + "[-14799.3555 -13064.0664 3451.2747]", + "[-14596.0459 -13312.7285 3450.7612]", + "[-14224.4775 -13631.7266 3451.0298]", + "[-13983.0625 -13774.5117 3451.241]", + "[-13503.6221 -13967.4551 3451.4622]", + "[-13001.2266 -14080.6367 3451.6057]", + "[-12490.958 -14134.6514 3451.8962]", + "[-11978.6416 -14141.4971 3452.2908]", + "[-11466.6279 -14133.959 3451.9094]", + "[-10952.9258 -14134.0791 3452.9963]", + "[-10436.9414 -14155.7646 3452.3291]", + "[-9926.3643 -14206.4512 3452.2151]", + "[-9415.6865 -14285.6289 3452.4053]", + "[-8909.373 -14393.9053 3452.3862]", + "[-8412.916 -14535.3018 3452.5283]", + "[-7928.4912 -14707.5801 3452.5737]", + "[-7448.2871 -14885.4229 3452.5239]", + "[-6949.3301 -15021.832 3452.2361]", + "[-6444.833 -15123.5908 3452.1841]", + "[-5931.3267 -15197.4023 3452.4189]", + "[-5414.8286 -15244.126 3452.5715]", + "[-4898.6284 -15263.7061 3452.2285]", + "[-4384.854 -15262.9717 3452.2795]", + "[-3866.217 -15261 3452.1736]", + "[-3349.5498 -15261.4385 3452.2905]", + "[-2834.7437 -15259.7578 3452.2263]", + "[-2321.5732 -15260.4814 3451.7297]", + "[-1803.5507 -15260.9746 3452.2285]", + "[-1286.9932 -15259.3975 3452.0398]", + "[-771.9371 -15261.1357 3452.1868]", + "[-258.3024 -15260.04 3452.0249]", + "[253.9357 -15260.7373 3452.0212]", + "[771.6362 -15260.1445 3452.0886]", + "[1288.0687 -15261.2861 3452.1345]", + "[1803.137 -15260.8799 3452.1338]", + "[2316.6963 -15260.1514 3452.1917]", + "[2828.7144 -15261.2402 3451.9915]", + "[3345.9375 -15260.8418 3452.113]", + "[3861.6689 -15260.9434 3452.1162]", + "[4375.9111 -15260.6055 3452.1174]", + "[4888.7036 -15260.4854 3451.9033]", + "[5406.6909 -15261.1611 3452.1016]", + "[5923.3042 -15261.248 3452.135]", + "[6438.5493 -15261.6035 3451.5317]", + "[6952.2783 -15261.0557 3451.6304]", + "[7464.9814 -15261.1367 3451.7163]", + "[7982.5908 -15261.5283 3451.728]", + "[8500.4453 -15260.7734 3451.5845]", + "[9018.2676 -15260.4648 3451.6653]", + "[9535.4492 -15260.7559 3451.5447]", + "[10051.8232 -15259.8574 3453.0076]", + "[10566.7949 -15261.0371 3452.1021]", + "[11081.0234 -15257.1855 3452.8008]", + "[11593.6064 -15200.6426 3452.5088]", + "[12091.8926 -15081.3916 3451.8433]", + "[12566.0352 -14886.4443 3451.7415]", + "[12884.2979 -14684.6758 3451.6438]", + "[13227.7051 -14369.9424 3451.2888]", + "[13397.8506 -14147.4316 3451.3523]", + "[13637.8506 -13692.4473 3451.7708]", + "[13772.2578 -13272.3623 3452.1631]", + "[13864.3438 -12763.0605 3452.5806]", + "[13902.6914 -12246.0215 3452.6448]", + "[13904.0107 -11733.8623 3453.0205]", + "[13931.4355 -11220.0586 3452.6685]", + "[13991.417 -10704.5137 3452.311]", + "[14079.2031 -10199.7568 3452.5488]", + "[14198.9453 -9697.0947 3452.3259]", + "[14349.6709 -9205.5322 3452.5947]", + "[14531.5176 -8725.0176 3452.4243]", + "[14695.7256 -8240.0088 3452.7583]", + "[14820.5752 -7741.3135 3452.5142]", + "[14913.1162 -7231.4639 3452.3611]", + "[14976.7236 -6718.3169 3452.3049]", + "[15013.8809 -6206.7788 3452.6711]", + "[15026.6875 -5693.3242 3452.5051]", + "[15022.6318 -5177.8555 3452.2351]", + "[15022.9111 -4663.5029 3453.2693]", + "[15023.3877 -4149.8496 3450.1802]", + "[15022.2793 -3629.0198 3430.9897]", + "[15022.0146 -3114.7087 3411.2944]", + "[15023.2588 -2601.1975 3393.2976]", + "[15021.6025 -2081.4988 3375.323]", + "[15023.1631 -1563.0676 3357.1316]", + "[15021.7236 -1044.4468 3339.0691]", + "[15022.6895 -527.2635 3320.9521]", + "[15021.6191 -14.9557 3303.0603]", + "[15022.6494 498.1906 3285.3108]", + "[15022.791 1015.2513 3267.1567]", + "[15022.4678 1531.6118 3249.1719]", + "[15022.6025 2044.6176 3231.2332]", + "[15022.7891 2560.1807 3213.1836]", + "[15021.9688 3076.3994 3195.1787]", + "[15022.5215 3591.7705 3177.1309]", + "[15022.6504 4104.8042 3159.2495]", + "[15022.5645 4622.9927 3147.29]", + "[15023.0342 5143.6763 3150.0798]", + "[15022.2568 5656.0186 3151.3174]", + "[15023.2559 6175.1567 3150.9167]", + "[15021.1426 6687.3867 3150.873]", + "[15016.7373 7201.3066 3150.6838]", + "[14990.8467 7719.7324 3150.6003]", + "[14943.5225 8232.1172 3150.6873]", + "[14875.6035 8739.8145 3150.542]", + "[14782.6436 9250.6348 3150.4119]", + "[14663.6152 9755.4893 3150.3977]", + "[14515.5801 10252.0107 3150.6091]", + "[14336.543 10737.7441 3150.3638]", + "[14124.5771 11209.2383 3150.5515]", + "[13877.7109 11662.7031 3151.0291]", + "[13595.9229 12094.5029 3150.5471]", + "[13277.9102 12499.168 3150.4287]", + "[12926.2959 12873.5254 3150.3682]", + "[12544.1387 13214.9268 3150.4248]", + "[12127.3467 13525.9316 3150.449]", + "[11687.3105 13800.5693 3150.386]", + "[11227.5293 14037.7939 3150.6401]", + "[10752.9551 14240.2988 3150.7373]", + "[10266.8379 14408.8096 3150.4255]", + "[9772.1826 14545.6602 3150.49]", + "[9263.6797 14657.2139 3150.54]", + "[8751.4277 14743.4258 3150.6143]", + "[8236.8164 14806.2207 3150.666]", + "[7721.0977 14847.5449 3150.7813]", + "[7205.0381 14870.1162 3151.0225]", + "[6689.1602 14874.3916 3150.5977]", + "[6174.1514 14870.7285 3149.958]", + "[5659.8232 14870.2979 3150.2732]", + "[5146.0552 14870.8115 3150.2117]", + "[4632.9849 14870.5811 3151.1218]", + "[4116.127 14869.8359 3141.5315]", + "[3597.3606 14870.2568 3119.262]", + "[3081.4893 14870.4678 3100.6089]", + "[2566.7458 14870.1758 3082.9014]", + "[2053.2336 14870.3936 3064.9836]", + "[1538.7744 14868.9365 3046.9448]", + "[1021.1943 14870.3115 3028.8977]", + "[507.5608 14870.0186 3011.093]", + "[-8.4445 14870.9492 2993.0435]", + "[-525.4617 14869.918 2974.9299]", + "[-1042.6543 14870.5908 2956.7588]", + "[-1558.988 14870.748 2938.7625]", + "[-2073.499 14869.8369 2920.7551]", + "[-2590.4431 14869.3027 2902.759]", + "[-3102.1621 14869.5547 2884.8318]", + "[-3617.6614 14869.2227 2866.8713]", + "[-4131.2744 14870.4121 2849.5498]", + "[-4645.9077 14869.8555 2846.467]", + "[-5160.2471 14870.5313 2849.0813]", + "[-5675.4526 14870.6934 2849.4858]", + "[-6189.8345 14870.3779 2848.9131]", + "[-6702.1719 14869.8926 2848.3005]", + "[-7216.1631 14855.2461 2848.5251]", + "[-7728.0444 14820.6387 2848.6143]", + "[-8238.5596 14763.6787 2848.4971]", + "[-8746.877 14686.9639 2848.7122]", + "[-9249.4492 14583.0527 2848.405]", + "[-9748.4746 14454.0381 2848.627]", + "[-10239.7432 14293.0342 2848.3677]", + "[-10720.0234 14101.082 2848.4702]", + "[-11181.6484 13876.874 2848.708]", + "[-11626.9268 13615.5186 2848.4104]", + "[-12049.5762 13317.2031 2848.4592]", + "[-12447.3018 12980.9795 2848.4705]", + "[-12812.8301 12610.5156 2848.6021]", + "[-13142.6074 12212.3281 2848.5959]", + "[-13438.2881 11783.8535 2848.4722]", + "[-13693.6953 11339.0664 2848.3711]", + "[-13914.3438 10875.1689 2848.5518]", + "[-14100.2461 10396.6484 2848.7861]", + "[-14258.7734 9898.998 2848.6064]", + "[-14385.4834 9393.9424 2848.5996]", + "[-14485.8232 8885.5586 2848.7319]", + "[-14561.1689 8375.7939 2848.6765]", + "[-14614.1699 7855.8149 2848.7539]", + "[-14646.1055 7338.0137 2848.708]", + "[-14659.3438 6823.8994 2848.5146]", + "[-14658.5479 6303.7031 2848.3564]", + "[-14656.5635 5780.9819 2848.3459]", + "[-14655.707 5258.5034 2848.353]", + "[-14657.7891 4736.3203 2848.5488]", + "[-14656.6543 4216.4048 2848.2131]", + "[-14655.998 3696.9316 2848.3264]", + "[-14655.4258 3179.457 2848.303]", + "[-14656.3066 2659.6516 2848.3596]", + "[-14658.0264 2146.9087 2848.4248]", + "[-14656.5273 1630.1814 2848.3982]", + "[-14657.4395 1117.2672 2848.3887]", + "[-14656.043 598.0448 2848.4673]", + "[-14656.8203 80.2196 2848.4575]", + "[-14656.9443 -432.0143 2848.5857]", + "[-14657.5957 -950.3125 2848.4783]", + "[-14656.1992 -1467.9558 2848.4678]", + "[-14656.7549 -1984.9146 2848.5381]", + "[-14656.7129 -2501.199 2848.4485]", + "[-14657.6592 -3016.7969 2848.427]", + "[-14658.0361 -3531.6968 2848.407]", + "[-14656.0469 -4045.908 2848.3987]", + "[-14657.4307 -4559.4434 2848.4644]", + "[-14656.3467 -5072.4126 2848.3965]", + "[-14657.501 -5587.3984 2848.6123]", + "[-14656.2803 -6100.0239 2848.644]", + "[-14657.1953 -6619.0327 2848.4951]", + "[-14653.3105 -7138.708 2848.6631]", + "[-14627.2969 -7657.7612 2848.7664]", + "[-14580.2715 -8169.1089 2848.5908]", + "[-14512.9023 -8682.6826 2848.574]", + "[-14421.1836 -9192.748 2848.3293]", + "[-14303.8213 -9693.8584 2848.478]", + "[-14156.4609 -10190.9834 2848.6877]", + "[-13977.9766 -10679.7793 2848.5259]", + "[-13765.7217 -11155.6768 2848.5781]", + "[-13517.6113 -11613.418 2848.6028]", + "[-13234.1582 -12048.2422 2848.5374]", + "[-12915.627 -12454.915 2848.3188]", + "[-12564.4121 -12829.0107 2848.4741]", + "[-12176.7246 -13175.8613 2848.5146]", + "[-11763.7041 -13484.2949 2848.6526]", + "[-11320.6455 -13759.7197 2848.5881]", + "[-10861.9629 -13996.1436 2848.5474]", + "[-10382.1133 -14200.4404 2848.6877]", + "[-9895.7246 -14369.4219 2848.9246]", + "[-9394.4111 -14507.7881 2848.665]", + "[-8893.5498 -14617.7412 2848.5974]", + "[-8383.0801 -14703.2178 2848.873]", + "[-7864.4761 -14765.9082 2848.6978]", + "[-7351.5029 -14806.2764 2848.7717]", + "[-6832.9668 -14827.9814 2848.8945]", + "[-6309.498 -14831.3789 2848.637]", + "[-5794.8022 -14828.9893 2848.7864]", + "[-5276.0835 -14827.5283 2848.0562]", + "[-4753.8594 -14828.3535 2849.4314]", + "[-4240.0127 -14826.8682 2834.6689]", + "[-3722.5427 -14827.9893 2813.3994]", + "[-3200.6101 -14827.583 2795.3835]", + "[-2685.7681 -14826.7715 2777.0972]", + "[-2163.3972 -14827.0195 2759.1963]", + "[-1646.0365 -14827.5576 2740.8955]", + "[-1133.6252 -14828.8418 2723.3538]", + "[-612.6293 -14826.6582 2704.677]", + "[-99.2247 -14827.5215 2687.0752]", + "[419.4903 -14827.5967 2668.6812]", + "[943.4485 -14828.001 2650.6755]", + "[1457.0375 -14827.5254 2632.3884]", + "[1973.0154 -14827.3115 2614.7163]", + "[2489.2546 -14827.5313 2596.427]", + "[3003.3989 -14826.6982 2578.5974]", + "[3528.3984 -14827.6543 2560.1465]", + "[4047.3813 -14828.0615 2544.7922]", + "[4572.2573 -14828.2197 2545.4744]", + "[5087.2866 -14827.5508 2547.2278]", + "[5603.8057 -14828.3926 2547.4351]", + "[6117.9028 -14827.1738 2547.21]", + "[6638 -14827.0742 2547.2419]", + "[7158.8433 -14827.3691 2547.2217]", + "[7679.6738 -14825.1318 2547.4614]", + "[8194.2178 -14801.7686 2547.5122]", + "[8705.415 -14760.2422 2547.6958]", + "[9214.0059 -14697.0596 2547.8843]", + "[9729.4746 -14607.5605 2547.4927]", + "[10239.0215 -14493.3838 2547.6943]", + "[10740.6191 -14349.8242 2547.7566]", + "[11232.1328 -14175.6631 2547.6069]", + "[11709.835 -13967.6465 2547.8489]", + "[12169.8408 -13723.8652 2547.4407]", + "[12608.0996 -13444.4209 2547.6487]", + "[13020.541 -13128.9375 2547.5686]", + "[13402.8057 -12778.3379 2547.5566]", + "[13752.127 -12396.1104 2547.3176]", + "[14065.7891 -11985.2314 2547.5432]", + "[14343.1006 -11550.0732 2547.647]", + "[14584.3428 -11095.041 2547.8213]", + "[14789.1143 -10623.4639 2547.4226]", + "[14961.1602 -10140.1084 2547.5601]", + "[15103.7959 -9648.1816 2547.6917]", + "[15220.3672 -9138.8301 2547.7578]", + "[15309.6787 -8624.7432 2547.7549]", + "[15375.4229 -8107.8335 2547.8843]", + "[15418.3682 -7589.1411 2547.8799]", + "[15442.3975 -7069.7422 2547.4783]", + "[15448.2832 -6550.373 2547.7124]", + "[15445.7852 -6031.5 2547.3547]", + "[15444.4316 -5517.5166 2547.283]", + "[15430.9678 -4998.7764 2547.5535]", + "[15359.0742 -4490.084 2548.1636]", + "[15245.3623 -3987.0881 2547.4163]", + "[15145.6084 -3478.084 2547.5383]", + "[15108.8643 -2964.542 2547.2605]", + "[15115.0625 -2444.6785 2547.2415]", + "[15119.9443 -1925.4402 2547.6516]", + "[15119.2129 -1409.9969 2547.5461]", + "[15119.8369 -895.3578 2547.4771]", + "[15120.6406 -381.9478 2547.5325]", + "[15118.9385 130.7996 2547.4089]", + "[15128.916 650.6747 2547.6829]", + "[15181.8496 1167.5681 2547.5691]", + "[15279.5732 1676.9504 2547.4941]", + "[15423.3418 2173.9243 2547.5989]", + "[15513.1406 2681.2087 2547.459]", + "[15551.1543 3194.5193 2547.6501]", + "[15558.875 3712.583 2547.3655]", + "[15553.1611 4224.9893 2547.4036]", + "[15552.2188 4741.2925 2547.4326]", + "[15550.5439 5261.1758 2547.4419]", + "[15551.3037 5776.8667 2547.4294]", + "[15552.2168 6296.4282 2547.377]", + "[15551.7734 6811.7974 2547.4209]", + "[15551.5166 7331.2944 2547.4243]", + "[15549.3418 7846.3213 2547.8516]", + "[15530.2783 8364.7793 2547.6008]", + "[15490.4092 8877.0811 2547.5774]", + "[15428.8232 9389.4463 2547.8503]", + "[15344.7129 9897.7549 2547.6755]", + "[15235.4619 10401.0898 2547.8975]", + "[15098.5488 10897.498 2547.5798]", + "[14931.1006 11384.5801 2547.3774]", + "[14731.0195 11859.2773 2547.1272]", + "[14497.3789 12318.3945 2547.4705]", + "[14227.3086 12756.7842 2547.603]", + "[13922.3652 13171.8848 2547.5813]", + "[13582.4717 13558.8037 2547.3611]", + "[13208.96 13913.1963 2547.573]", + "[12805.7695 14233.1533 2547.5039]", + "[12376.7539 14517.5137 2547.4172]", + "[11925.9229 14765.7949 2547.447]", + "[11458.2451 14979.8252 2547.6345]", + "[10977.0674 15161.4268 2547.6555]", + "[10485.2168 15311.6563 2547.7886]", + "[9985.0889 15431.6133 2547.498]", + "[9479.5889 15525.166 2547.5068]", + "[8970.5098 15595.4014 2547.5322]", + "[8459.0049 15644.4756 2547.7957]", + "[7946.0088 15674.3672 2547.6865]", + "[7432.1001 15686.5439 2547.8196]", + "[6918.3306 15683.6523 2547.3442]", + "[6404.7817 15682.5244 2547.4868]", + "[5890.9858 15682.3896 2547.4214]", + "[5377.5024 15681.7109 2547.4348]", + "[4863.9546 15682.3721 2547.4094]", + "[4350.4092 15681.2451 2547.4673]", + "[3836.7859 15681.4414 2545.1233]", + "[3320.5916 15682.3604 2525.5073]", + "[2802.9302 15681.4824 2505.6436]", + "[2288.4099 15681.8594 2487.7336]", + "[1774.0112 15681.2998 2469.8398]", + "[1257.6633 15680.9365 2451.7434]", + "[736.9346 15682.3164 2433.5498]", + "[221.1911 15681.3438 2415.5713]", + "[-298.1051 15682.7197 2397.5542]", + "[-810.067 15682.1553 2379.771]", + "[-1323.5552 15681.708 2361.5769]", + "[-1837.7206 15681.9072 2343.7229]", + "[-2352.0122 15682.5107 2325.885]", + "[-2865.7065 15682.2891 2307.8699]", + "[-3378.1052 15682.0225 2289.8494]", + "[-3900.1604 15682.0703 2271.6055]", + "[-4420.2681 15681.3047 2253.481]", + "[-4937.2446 15682.0664 2242.7957]", + "[-5449.2954 15682.1748 2245.6382]", + "[-5968.4507 15680.7002 2246.4307]", + "[-6491.8857 15683.4561 2246.5815]", + "[-7005.6812 15682.2402 2246.4358]", + "[-7520.0171 15675.7744 2246.9424]", + "[-8033.1089 15648.3223 2246.7312]", + "[-8544.5176 15601.2598 2246.8574]", + "[-9052.7705 15532.0918 2246.72]", + "[-9556.4365 15438.9863 2246.8831]", + "[-10065.8809 15317.1641 2246.5168]", + "[-10566.9248 15165.5957 2246.8567]", + "[-11056.6113 14982.0547 2246.7825]", + "[-11531.9648 14765.1602 2246.478]", + "[-11988.6699 14512.4365 2246.4763]", + "[-12422.3076 14222.7461 2246.291]", + "[-12829.2793 13897.9014 2246.6333]", + "[-13204.6025 13537.9492 2246.7126]", + "[-13545.5146 13146.3477 2246.6003]", + "[-13849.7891 12726.7168 2246.4768]", + "[-14118.0938 12284.4287 2246.5664]", + "[-14349.457 11822.7578 2246.615]", + "[-14547.3359 11346.9736 2246.6506]", + "[-14711.2383 10859.1309 2246.7886]", + "[-14845.8486 10363.416 2246.667]", + "[-14951.8711 9861.6318 2246.6931]", + "[-15033.9248 9356.1279 2246.6331]", + "[-15094.5742 8836.3291 2246.686]", + "[-15133.1211 8314.8682 2246.8691]", + "[-15152.6797 7794.6802 2246.5562]", + "[-15154.9111 7272.5557 2246.3857]", + "[-15151.9668 6759.5503 2246.3271]", + "[-15151.1895 6242.6914 2246.4834]", + "[-15151.0977 5724.0239 2246.3423]", + "[-15152.3467 5203.0518 2246.0522]", + "[-15151.8086 4687.5396 2246.1636]", + "[-15152.4668 4175.4204 2246.0732]", + "[-15151.4805 3657.0879 2246.1335]", + "[-15151.8398 3140.2573 2246.0891]", + "[-15152.9883 2624.1187 2246.092]", + "[-15151.4736 2110.0977 2246.1404]", + "[-15152.4033 1597.0906 2246.3679]", + "[-15153.1201 1084.8043 2246.1133]", + "[-15152.4736 565.6479 2246.1843]", + "[-15151.7852 47.2307 2246.1458]", + "[-15151.4111 -470.1472 2246.4202]", + "[-15151.0186 -986.4893 2246.7891]", + "[-15151.9961 -1501.0963 2246.4836]", + "[-15149.709 -2014.543 2246.7847]", + "[-15115.209 -2525.5583 2246.9983]", + "[-15032.1299 -3037.0706 2246.8489]", + "[-14899.0371 -3532.4878 2246.2402]", + "[-14703.6455 -4013.0068 2246.5083]", + "[-14438.9043 -4458.6841 2246.7085]", + "[-14106.5 -4849.5488 2246.802]", + "[-13754.9971 -5232.8755 2246.8496]", + "[-13655.3535 -5389.3486 2246.3308]", + "[-13427.8369 -5857.6509 2246.1841]", + "[-13269.3369 -6348.0435 2246.5127]", + "[-13168.8281 -6850.4478 2246.8677]", + "[-13113.8525 -7363.625 2246.8262]", + "[-13096.5654 -7881.6113 2246.9458]", + "[-13097.0322 -8400.7148 2246.6458]", + "[-13071.0215 -8919.873 2246.8264]", + "[-13023.4844 -9437.5703 2246.8789]", + "[-12955.5059 -9952.3115 2246.7004]", + "[-12861.709 -10461.1416 2246.5627]", + "[-12742.5801 -10962.1309 2246.584]", + "[-12592.6387 -11463.375 2246.8711]", + "[-12411.7871 -11950.5488 2246.8467]", + "[-12199.4873 -12420.1758 2246.6609]", + "[-11948.3359 -12878.0264 2246.5964]", + "[-11664.1396 -13309.5654 2246.5725]", + "[-11340.207 -13719.7813 2246.5879]", + "[-10984.9502 -14094.3691 2246.7488]", + "[-10593.2432 -14438.6943 2246.4934]", + "[-10179.1641 -14743.4648 2246.707]", + "[-9736.9561 -15014.6504 2246.5444]", + "[-9270.9902 -15252.3076 2246.2615]", + "[-8796.1484 -15451.4189 2246.7759]", + "[-8304.8066 -15618.6768 2246.4917]", + "[-7800.6001 -15756.8359 2246.5781]", + "[-7297.8325 -15864.0654 2246.5916]", + "[-6786.8423 -15947.5557 2246.563]", + "[-6268.6953 -16008.0811 2247.0476]", + "[-5757.896 -16046.8633 2246.7754]", + "[-5242.8193 -16066.5977 2246.6213]", + "[-4726.3198 -16069.9707 2246.8955]", + "[-4210.438 -16066.4404 2246.3027]", + "[-3695.3679 -16066.4551 2246.4678]", + "[-3180.7881 -16065.0566 2246.3186]", + "[-2668.2498 -16066.0537 2246.364]", + "[-2148.2126 -16064.7051 2229.3342]", + "[-1627.8528 -16066.0498 2208.3655]", + "[-1111.9055 -16065.4121 2190.3884]", + "[-590.0472 -16064.9619 2172.4236]", + "[-72.7762 -16065.2627 2154.2319]", + "[443.5576 -16066.126 2136.4211]", + "[960.991 -16066.2041 2118.1929]", + "[1476.7111 -16065.0322 2100.2368]", + "[1990.7277 -16065.7725 2082.2725]", + "[2502.8882 -16066.0469 2064.5415]", + "[3024.1458 -16065.2939 2046.0168]", + "[3542.7095 -16066.0918 2028.1418]", + "[4057.9663 -16065.3975 2010.066]", + "[4581.5967 -16065.8584 1991.9546]", + "[5101.1592 -16066.582 1973.609]", + "[5616.1802 -16065.9893 1955.8247]", + "[6138.6382 -16065.6494 1941.77]", + "[6654.2783 -16065.9648 1944.0055]", + "[7176.3628 -16065.1074 1945.6838]", + "[7689.0352 -16065.918 1945.9438]", + "[8203.3428 -16061.6689 1946.7655]", + "[8717.6006 -16038.2041 1945.7126]", + "[9229.7227 -15993.5244 1945.8212]", + "[9738.5088 -15928.6084 1945.8977]", + "[10243.0742 -15839.874 1946.0479]", + "[10754.6523 -15722.7979 1945.8939]", + "[11258.1309 -15576.7129 1945.6802]", + "[11751.0488 -15398.9014 1945.9244]", + "[12230.04 -15187.5254 1945.7701]", + "[12690.8037 -14940.1602 1945.9664]", + "[13129.3408 -14656.2725 1946.0961]", + "[13540.333 -14334.6641 1945.9839]", + "[13922.4141 -13980.5166 1945.9165]", + "[14269.2549 -13592.5977 1945.9504]", + "[14580.4854 -13176.7217 1945.8378]", + "[14854.6211 -12736.4824 1945.885]", + "[15092.7607 -12276.96 1945.6904]", + "[15295.7832 -11801.8076 1945.9836]", + "[15464.3574 -11314.3965 1946.1858]", + "[15603.2656 -10818.5684 1945.8407]", + "[15713.6025 -10316.459 1946.2511]", + "[15799.0635 -9810.2529 1945.9696]", + "[15861.8154 -9301.2939 1945.9111]", + "[15903.0762 -8790.7139 1945.9113]", + "[15925.9619 -8266.6357 1946.1113]", + "[15930.5078 -7742.5742 1945.7258]", + "[15926.4785 -7219.4482 1945.7069]", + "[15925.876 -6701.4023 1945.6262]", + "[15926.5625 -6182.3799 1946.463]", + "[15926.1592 -5669.3271 1936.6069]", + "[15925.9102 -5154.2983 1914.6674]", + "[15926.0273 -4636.5996 1896.3877]", + "[15925.8281 -4117.5771 1878.5608]", + "[15925.834 -3603.5977 1860.4991]", + "[15925.8125 -3081.9456 1842.1951]", + "[15925.8389 -2561.6951 1824.1302]", + "[15926.7363 -2043.5641 1805.7924]", + "[15926.5156 -1527.8706 1788.0554]", + "[15926.1719 -1015.2997 1769.7834]", + "[15925.7998 -494.166 1751.9108]", + "[15926.3799 22.9971 1733.7815]", + "[15925.4551 535.4182 1715.937]", + "[15926.8135 1055.4639 1697.5933]", + "[15926.0986 1570.1619 1679.6741]", + "[15927.085 2092.0923 1661.3157]", + "[15927.1055 2607.9907 1643.4268]", + "[15926.1084 3129.9556 1625.2446]", + "[15925.8525 3653.7158 1607.8976]", + "[15926.2559 4173.4629 1606.4097]", + "[15926.4873 4697.9116 1608.5297]", + "[15927.0908 5220.7891 1608.7631]", + "[15926.1045 5736.0791 1608.2544]", + "[15925.7959 6254.2158 1608.7999]", + "[15906.9453 6773.501 1608.9525]", + "[15868.2959 7294.3408 1608.6417]", + "[15808.4355 7809.4683 1608.7103]", + "[15725.0469 8320.668 1608.9617]", + "[15616.7754 8826.7861 1608.4503]", + "[15479.2148 9325.2607 1608.5559]", + "[15312.9531 9814.4785 1608.4224]", + "[15113.75 10290.8672 1608.512]", + "[14880.5449 10751.0713 1608.3231]", + "[14612.7832 11191.1934 1608.5381]", + "[14309.0684 11606.4883 1608.7546]", + "[13970.7959 11993.4365 1608.5642]", + "[13599.5742 12347.5791 1608.3707]", + "[13199.5498 12667.3643 1608.5098]", + "[12765.793 12957.5488 1608.6582]", + "[12310.7021 13210.6523 1608.7258]", + "[11838.0283 13426.7637 1608.5336]", + "[11352.6064 13609.2695 1608.6858]", + "[10857.5322 13760.1211 1608.7772]", + "[10355.1738 13881.1543 1608.5688]", + "[9848.0371 13975.1191 1608.6996]", + "[9337.8721 14045.4395 1608.4072]", + "[8825.9268 14094.0215 1608.5347]", + "[8313.0381 14122.2734 1608.709]", + "[7794.4058 14134.3721 1608.7427]", + "[7273.499 14148.792 1608.6891]", + "[6761.6865 14205.5205 1608.5098]", + "[6253.9512 14312.3418 1608.5765]", + "[5760.9365 14455.8496 1608.9368]", + "[5248.0806 14534.1133 1608.4747]", + "[4733.9556 14566.8867 1608.6277]", + "[4220.4507 14566.4805 1608.474]", + "[3707.3667 14562.833 1608.3865]", + "[3188.0374 14562.6328 1608.3954]", + "[2670.4854 14560.8516 1608.4913]", + "[2154.3 14561.5049 1608.6478]", + "[1639.313 14562.4287 1608.3921]", + "[1125.3027 14561.6963 1608.4761]", + "[612.1755 14562.7305 1608.4097]", + "[99.8823 14560.9619 1608.5043]", + "[-419.1248 14561.3418 1608.4846]", + "[-937.2976 14561.1465 1608.3088]", + "[-1454.6187 14562.4473 1608.4331]", + "[-1971.0663 14561.4717 1608.4442]", + "[-2486.7314 14561.6348 1608.4913]", + "[-3001.5837 14560.8857 1608.3979]", + "[-3515.4187 14571.623 1608.3082]", + "[-4025.8796 14623.0898 1608.2101]", + "[-4535.9912 14719.1543 1608.0944]", + "[-5032.8896 14863.001 1608.6166]", + "[-5539.2163 14955.4189 1608.1648]", + "[-6050.1255 14993.5908 1608.4464]", + "[-6566.98 15001.2314 1608.3108]", + "[-7079.6846 14995.5244 1608.5542]", + "[-7597.2471 14993.0352 1608.4862]", + "[-8111.876 14974.248 1608.7086]", + "[-8623.416 14934.0146 1608.8146]", + "[-9138.0508 14873.3623 1608.4882]", + "[-9647.6426 14789.6436 1608.6095]", + "[-10151.1826 14680.7178 1608.6245]", + "[-10646.502 14544.3936 1608.6923]", + "[-11131.9854 14378.5 1608.4204]", + "[-11609.5996 14178.7715 1608.3469]", + "[-12069.9805 13945.7285 1608.3912]", + "[-12508.3037 13677.0068 1608.6187]", + "[-12927.2607 13370.5283 1608.3033]", + "[-13315.8691 13030.1504 1608.4805]", + "[-13670.4678 12658.5488 1608.2515]", + "[-13992.9697 12253.1592 1608.4966]", + "[-14276.8711 11824.1123 1608.4404]", + "[-14527.9219 11370.5381 1608.4847]", + "[-14741.9434 10902.4775 1608.5441]", + "[-14924.2686 10417.1563 1608.5905]", + "[-15074.3076 9925.0137 1608.6182]", + "[-15196.6357 9421.2158 1608.6499]", + "[-15290.2559 8915.4268 1608.5869]", + "[-15359.8076 8401.9502 1608.6145]", + "[-15408.3594 7890.2524 1608.7346]", + "[-15436.6758 7372.9805 1608.6763]", + "[-15447.6289 6859.3086 1608.6262]", + "[-15446.2959 6341.5854 1608.3556]", + "[-15445.083 5828.4731 1608.5005]", + "[-15445.2646 5311.5229 1608.4076]", + "[-15445.4297 4799.1665 1608.6613]", + "[-15445.9951 4283.1499 1608.4181]", + "[-15445.2871 3763.4258 1608.5018]", + "[-15445.2314 3249.9382 1605.2936]", + "[-15444.5176 2735.0317 1585.1022]", + "[-15443.7725 2218.3538 1565.2699]", + "[-15444.0898 1704.3594 1547.6149]", + "[-15445.2666 1190.0808 1529.715]", + "[-15444.8809 673.5957 1511.7358]", + "[-15444.9775 152.7148 1493.7018]", + "[-15444.9648 -363.1429 1475.4554]", + "[-15444.8594 -879.3126 1457.3539]", + "[-15445.1279 -1396.0668 1439.387]", + "[-15445.4639 -1911.7352 1421.478]", + "[-15445.3857 -2426.3081 1403.3619]", + "[-15444.2451 -2940.209 1385.4425]", + "[-15444.9766 -3453.2644 1367.5776]", + "[-15445.625 -3965.6638 1349.5682]", + "[-15445.2295 -4477.6499 1331.6459]", + "[-15445.2549 -4995.5879 1313.618]", + "[-15444.7314 -5515.7505 1304.3452]", + "[-15444.6299 -6035.8403 1306.6021]", + "[-15445.7148 -6554.9263 1307.5372]", + "[-15445.2676 -7069.2417 1307.4617]", + "[-15444.2881 -7587.1943 1307.328]", + "[-15437.4658 -8100.8281 1307.5968]", + "[-15408.624 -8618.8623 1307.7072]", + "[-15359.6357 -9128.6816 1307.6959]", + "[-15288.168 -9639.7666 1307.6896]", + "[-15193.3701 -10146.2959 1307.879]", + "[-15072.2959 -10646.5 1307.5717]", + "[-14920.8174 -11137.9434 1307.403]", + "[-14740.3213 -11618.4912 1307.4612]", + "[-14527.1289 -12084.7217 1307.5304]", + "[-14279.3027 -12532.9121 1307.4623]", + "[-13991.0928 -12967.0029 1307.7969]", + "[-13666.7656 -13373.7207 1307.679]", + "[-13307.9277 -13749.168 1307.595]", + "[-12917.6992 -14090.2539 1307.4989]", + "[-12499.6064 -14394.8135 1307.517]", + "[-12059.1201 -14663.5557 1307.5287]", + "[-11599.4736 -14895.2607 1307.733]", + "[-11125.6885 -15093.1836 1307.5345]", + "[-10640.8359 -15258.5498 1307.8411]", + "[-10138.4355 -15395.2969 1307.5013]", + "[-9630.1738 -15503.0557 1307.6383]", + "[-9118.3076 -15585.9131 1307.4048]", + "[-8604.1777 -15645.7803 1307.5125]", + "[-8088.9111 -15684.8789 1307.722]", + "[-7573.1221 -15705.6416 1307.4592]", + "[-7057.5293 -15707.6543 1307.4326]", + "[-6542.7275 -15705.1934 1307.3383]", + "[-6024.874 -15702.9111 1307.4366]", + "[-5510.7529 -15704.1475 1307.423]", + "[-4991.7764 -15703.9326 1308.1573]", + "[-4475.0708 -15703.2676 1295.3954]", + "[-3958.8887 -15703.9346 1274.0029]", + "[-3439.5789 -15704.7891 1255.6552]", + "[-2927.3831 -15703.4385 1237.8508]", + "[-2408.8162 -15703.6758 1219.8693]", + "[-1896.5535 -15702.7285 1201.8003]", + "[-1383.1334 -15703.1582 1183.9657]", + "[-863.8286 -15702.7246 1165.6017]", + "[-349.7554 -15704.5371 1147.8781]", + "[167.4936 -15703.25 1129.5249]", + "[687.5901 -15704.1631 1111.7886]", + "[1201.0103 -15703.6553 1093.5189]", + "[1716.515 -15703.6016 1075.8359]", + "[2234.1099 -15704.0391 1057.5045]", + "[2753.2253 -15704.2109 1039.5533]", + "[3273.929 -15703.8076 1021.1532]", + "[3786.7974 -15703.9639 1003.4258]", + "[4301.0601 -15703.5664 985.3106]", + "[4816.4053 -15703.748 968.8384]", + "[5330.9209 -15703.7334 968.1674]", + "[5844.1763 -15704.5176 970.5305]", + "[6363.335 -15704.21 970.3906]", + "[6875.4272 -15704.4092 970.4218]", + "[7390.7739 -15702.2432 970.7532]", + "[7906.0244 -15663.8115 970.6764]", + "[8415.248 -15578.6826 970.4558]", + "[8912.1309 -15440.5186 970.6034]", + "[9386.1699 -15239.5859 970.0935]", + "[9823.3965 -14969.752 970.4858]", + "[10207.9668 -14630.2139 970.343]", + "[10514.9082 -14244.5127 970.4598]", + "[10766.6416 -13791.2813 970.3539]", + "[10947.5381 -13308.3252 970.3876]", + "[11068.1318 -12809.9707 970.4177]", + "[11139.3809 -12295.7363 970.6594]", + "[11168.7109 -11779.8379 970.7845]", + "[11165.4014 -11265.2881 970.4479]", + "[11162.2217 -10752.6973 970.4792]", + "[11161.2002 -10232.3877 970.4329]", + "[11161.7734 -9713.0557 970.4991]", + "[11162.5859 -9194.748 970.413]", + "[11161.5332 -8677.0566 970.3893]", + "[11162.1709 -8159.8066 970.3426]", + "[11160.7988 -7642.9727 970.4433]", + "[11161.7803 -7126.5166 970.3924]", + "[11161.1523 -6610.4673 970.4806]", + "[11161.9688 -6094.8052 970.4233]", + "[11161.0967 -5579.6382 970.4219]", + "[11159.4951 -5064.1353 970.6961]", + "[11134.6768 -4550.4219 970.57]", + "[11069.502 -4041.4561 970.5115]", + "[10963.002 -3540.3799 970.7335]", + "[10833.3291 -3037.604 971.0037]", + "[10775.6748 -2528.2114 970.502]", + "[10784.2412 -2012.9932 970.2997]", + "[10789.3359 -1495.8903 970.3891]", + "[10789.3428 -981.6663 970.407]", + "[10789.75 -469.1274 970.4188]", + "[10789.1064 48.5493 970.4214]", + "[10789.6514 564.8135 970.4171]", + "[10789.8418 1079.9983 970.4437]", + "[10788.9209 1594.1848 970.454]", + "[10789.9629 2107.3201 970.4263]", + "[10789.2305 2625.7085 970.4224]", + "[10789.9131 3142.366 970.1539]", + "[10790.2295 3656.7942 970.1885]", + "[10791.0586 4169.707 970.2079]", + "[10789.9785 4687.7798 970.2329]", + "[10789.6514 5201.6313 970.2]", + "[10790.3301 5716.4595 970.3788]", + "[10790.9932 6233.8047 970.1745]", + "[10789.665 6752.2559 970.2454]", + "[10790.7314 7266.4883 970.1953]", + "[10789.3887 7781.127 970.2426]", + "[10789.9883 8299.5732 970.1866]", + "[10789.8213 8813.2324 970.2113]", + "[10795.1934 9330.8926 969.9786]", + "[10835.249 9849.5459 969.8903]", + "[10919.8467 10362.6934 970.0832]", + "[10976.2305 10878.1523 970.0564]", + "[10981.9688 11396.1436 969.8676]", + "[10967.2959 11912.2402 970.1641]", + "[10898.4033 12423.1973 969.9099]", + "[10764.6387 12919.5313 969.5763]", + "[10553.2227 13386.4375 968.9058]", + "[10337.9404 13700.8125 969.1101]", + "[10057.1309 13985.9561 968.9121]", + "[9763.7285 14194.7217 969.2343]", + "[9316.3037 14406.96 969.2683]", + "[8820.0576 14547.0527 969.5554]", + "[8307.4941 14620.9648 969.8276]", + "[7787.5952 14643.7979 969.9976]", + "[7272.8745 14631.8818 969.9503]", + "[6753.6729 14630.0918 969.9872]", + "[6237.2539 14631.3555 970.1716]", + "[5722.604 14629.1084 969.9311]", + "[5209.3975 14629.9746 970.0942]", + "[4697.1519 14629.7754 970.0163]", + "[4176.9106 14626.8174 970.0016]", + "[3659.6833 14569.7842 969.9827]", + "[3154.052 14447.7764 969.6363]", + "[2674.4143 14247.9688 969.3336]", + "[2352.1428 14041.1152 969.0878]", + "[2033.8479 13746.958 969.0289]", + "[1849.4855 13503.9189 969.0826]", + "[1609.26 13043.0137 969.4687]", + "[1487.3529 12656.4287 969.7999]", + "[1392.6808 12150.2236 969.8984]", + "[1352.4839 11636.2549 970.1102]", + "[1356.1068 11118.6416 970.0406]", + "[1395.8918 10607.707 969.844]", + "[1478.1583 10097.5488 969.886]", + "[1571.7006 9592.8271 969.9758]", + "[1626.8625 9076.6563 969.8382]", + "[1631.3737 8564.3975 970.3244]", + "[1622.1023 8048.373 970.394]", + "[1622.5219 7534.7871 970.5307]", + "[1623.1532 7021.9395 970.3596]", + "[1623.0803 6509.8105 970.1686]", + "[1623.1133 5994.5273 970.1293]", + "[1622.4774 5481.9243 970.175]", + "[1623.4923 4968.042 970.1664]", + "[1622.5933 4447.3691 970.7255]", + "[1622.9679 3932.1841 970.5695]", + "[1621.9403 3414.9189 970.4683]", + "[1623.2314 2896.7937 970.4199]", + "[1622.3013 2379.1467 970.4203]", + "[1623.0197 1862.7612 970.4332]", + "[1623.2764 1348.678 970.5302]", + "[1622.2635 826.3306 970.3683]", + "[1622.9313 307.2376 970.3634]", + "[1622.0457 -207.8643 970.4218]", + "[1622.2021 -729.9268 970.4307]", + "[1622.7811 -1247.0139 970.1314]", + "[1623.4288 -1770.3877 970.3747]", + "[1623.6388 -2287.8108 970.3928]", + "[1621.944 -2810.9705 970.4588]", + "[1622.4475 -3327.3794 970.2487]", + "[1623.2806 -3848.9209 970.2579]", + "[1623.7507 -4362.9263 970.4582]", + "[1620.4982 -4881.6113 969.6472]", + "[1597.0521 -5404.4448 968.3099]", + "[1554.7554 -5917.4185 967.6398]", + "[1487.9786 -6431.8237 966.3107]", + "[1397.9678 -6945.9976 965.9434]", + "[1283.1125 -7445.3662 964.7049]", + "[1139.3193 -7939.6772 964.108]", + "[964.6289 -8423.9395 963.818]", + "[755.9557 -8893.79 963.0978]", + "[513.2853 -9346.3975 962.6315]", + "[233.1997 -9776.4512 962.1559]", + "[-82.8231 -10180.0391 962.1725]", + "[-433.0698 -10553.8203 961.9187]", + "[-825.0538 -10902.1768 962.0379]", + "[-1246.4445 -11212.6201 962.1716]", + "[-1692.5259 -11484.2705 962.7587]", + "[-2157.6409 -11719.3291 963.2107]", + "[-2639.2146 -11916.3516 963.6389]", + "[-3131.2593 -12081.627 964.3184]", + "[-3631.6753 -12214.8916 965.2806]", + "[-4137.7554 -12320.0195 965.9784]", + "[-4647.2969 -12400.3066 967.4022]", + "[-5159.2041 -12455.3945 967.4991]", + "[-5671.2769 -12491.5117 969.0222]", + "[-6183.624 -12508.2188 969.9471]", + "[-6707.6465 -12508.2217 970.4698]", + "[-7230.563 -12490.1865 968.6469]", + "[-7751.3584 -12451.7793 968.3979]", + "[-8269.5645 -12392.251 966.6688]", + "[-8783.8047 -12309.0713 965.8771]", + "[-9292.7344 -12199.7344 964.7936]", + "[-9794.041 -12061.7979 964.0253]", + "[-10285.5107 -11893.1084 963.7412]", + "[-10764.0127 -11691.0732 963.0851]", + "[-11225.1602 -11453.3564 962.4315]", + "[-11664.6064 -11179.0869 962.0729]", + "[-12078.4326 -10868.5088 961.8389]", + "[-12461.8975 -10522.2959 961.7281]", + "[-12812.1572 -10143.3125 961.9605]", + "[-13125.8516 -9734.875 962.1407]", + "[-13402.2539 -9301.501 962.5601]", + "[-13641.5137 -8847.7451 962.7574]", + "[-13850.1768 -8366.8408 963.8323]", + "[-14024.1807 -7873.4604 964.067]", + "[-14164.7998 -7370.8901 964.9555]", + "[-14277.2637 -6862.3833 965.8887]", + "[-14363.1953 -6349.9146 966.7881]", + "[-14424.957 -5835.1396 967.5281]", + "[-14465.5215 -5319.3828 968.7302]", + "[-14487.3838 -4803.4463 969.5117]", + "[-14490.0088 -4288.3672 970.7154]", + "[-14486.2734 -3773.9033 960.5909]", + "[-14486.4775 -3259.1082 938.5405]", + "[-14485.5713 -2743.6646 920.2658]", + "[-14486.2988 -2224.5776 902.5112]", + "[-14485.2939 -1712.8368 884.5145]", + "[-14486.5918 -1194.7261 866.6152]", + "[-14484.6055 -681.7625 848.4393]", + "[-14486.7764 -161.5331 830.5558]", + "[-14484.8379 352.7199 812.2524]", + "[-14487.1377 872.2424 794.1472]", + "[-14484.8086 1392.3765 775.9709]", + "[-14486.5068 1908.5029 758.2391]", + "[-14485.1973 2429.3315 739.7639]", + "[-14486.917 2950.064 721.5844]", + "[-14485.0439 3467.7268 703.7975]", + "[-14487.1982 3982.9158 685.5269]", + "[-14485.083 4496.6943 667.8859]", + "[-14486.7246 5010.6367 649.6421]", + "[-14484.8018 5527.187 631.7591]", + "[-14486.7852 6041.2798 613.6218]", + "[-14486.2969 6564.1621 596.8516]", + "[-14485.3906 7082.3418 595.3013]", + "[-14469.2793 7594.6665 596.2401]", + "[-14432.3262 8110.7676 596.129]", + "[-14373.5713 8627.8291 594.2507]", + "[-14289.6426 9142.625 593.1426]", + "[-14181.083 9652.2422 592.1055]", + "[-14042.8936 10154.0068 591.7283]", + "[-13874.9824 10646.0381 590.4538]", + "[-13672.3789 11124.3066 590.1035]", + "[-13435.4678 11585.7393 589.6942]", + "[-13161.8418 12025.3857 589.5256]", + "[-12851.6494 12439.2715 589.3519]", + "[-12506.2998 12823.1279 589.2541]", + "[-12127.541 13172.8457 589.3549]", + "[-11720.0439 13486.6357 589.7024]", + "[-11287.1963 13762.7754 589.4689]", + "[-10834.8018 14002.9277 590.0963]", + "[-10354.3848 14210.9141 590.7288]", + "[-9862.1133 14384.8008 591.2573]", + "[-9361.0898 14526.9395 592.1376]", + "[-8853.8047 14639.5352 592.8827]", + "[-8342.374 14725.2324 593.9428]", + "[-7828.8926 14788.2588 594.7744]", + "[-7314.168 14829.0293 596.063]", + "[-6799.6382 14850.709 597.121]", + "[-6286.084 14854.1904 597.7919]", + "[-5773.5762 14851.3027 597.6951]", + "[-5250.3853 14850.8848 597.5038]", + "[-4728.1064 14850.4619 597.4647]", + "[-4206.5249 14851.3906 597.5033]", + "[-3685.4536 14851.666 597.428]", + "[-3164.5715 14850.2881 597.6382]", + "[-2643.8777 14849.6855 597.3385]", + "[-2123.6323 14850.3545 597.8754]", + "[-1603.8401 14851.2227 597.3423]", + "[-1084.3171 14851.6641 597.6239]", + "[-564.0449 14850.8936 585.0206]", + "[-43.1582 14850.873 562.8073]", + "[479.3829 14850.1709 544.659]", + "[994.3787 14851.0029 526.6382]", + "[1514.9969 14850.3486 508.8382]", + "[2030.5978 14851.9727 490.5099]", + "[2554.2117 14851.2031 472.5179]", + "[3073.1296 14852.2305 454.0585]", + "[3586.7915 14851.2314 436.4541]", + "[4107.7822 14850.7773 417.9092]", + "[4622.7539 14851.5098 400.2698]", + "[5144.6343 14850.6484 381.7202]", + "[5659.793 14850.2266 363.9447]", + "[6181.4668 14851.9541 345.484]", + "[6695.5059 14852.5361 330.0101]", + "[7214.0757 14849.9209 329.3929]", + "[7737.5317 14830.6348 329.9515]", + "[8249.4268 14791.2148 329.2078]", + "[8761.3779 14729.7051 327.9177]", + "[9270.9346 14644.7959 327.4334]", + "[9774.8818 14533.667 326.2546]", + "[10271.4209 14395.123 325.8977]", + "[10757.2334 14224.5615 324.6104]", + "[11228.5039 14022.4795 324.7434]", + "[11690.8701 13781.417 323.7134]", + "[12123.8926 13508.1006 323.6354]", + "[12532.1963 13198.0234 323.0802]", + "[12917.6133 12846.7969 322.9676]", + "[13270.4951 12459.4004 323.09]", + "[13585.9072 12042.1719 323.2175]", + "[13863.6143 11599.6924 324.0303]", + "[14103.2979 11135.6338 324.7301]", + "[14303.8027 10663.9561 325.0509]", + "[14470.791 10177.5283 325.7377]", + "[14607.8643 9679.3936 326.4365]", + "[14718.1523 9171.6543 327.3947]", + "[14801.1611 8664.5938 328.0641]", + "[14861.6592 8150.6221 328.8687]", + "[14900.998 7639.4194 329.9969]", + "[14921.7354 7122.8579 330.7617]", + "[14924.8535 6609.3613 331.7141]", + "[14921.8926 6095.8911 331.412]", + "[14921.0225 5577.293 331.9526]", + "[14920.5078 5060.6138 331.5591]", + "[14921.001 4546.1782 331.4802]", + "[14920.9102 4033.4067 331.5436]", + "[14921.3838 3513.5747 331.6456]", + "[14920.6699 2994.583 331.5254]", + "[14919.9873 2476.3086 331.4778]", + "[14920.4189 1958.7393 331.5254]", + "[14920.1777 1441.7905 331.4551]", + "[14900.2461 925.9733 331.5081]", + "[14851.126 412.8284 331.4716]", + "[14773.5068 -95.9732 331.5204]", + "[14668.0508 -598.6973 331.4957]", + "[14530.9697 -1092.8524 331.1903]", + "[14359.418 -1583.2463 331.5822]", + "[14176.6777 -2068.0403 331.5394]", + "[14037.8584 -2566.3057 331.433]", + "[13933.5273 -3071.2903 331.7838]", + "[13858.6523 -3580.4648 331.5419]", + "[13811.8799 -4091.2939 331.4847]", + "[13791.04 -4610.6147 331.4845]", + "[13790.042 -5129.1206 331.0537]", + "[13775.6279 -5645.9155 330.9738]", + "[13736.3604 -6160.3784 330.8745]", + "[13678.0908 -6671.9106 330.9666]", + "[13597.501 -7178.9912 330.8589]", + "[13489.6025 -7687.2964 330.724]", + "[13354.3623 -8187.8496 330.7232]", + "[13189.9775 -8677.5986 330.7197]", + "[12993.2334 -9153.375 330.8116]", + "[12763.4619 -9612.5234 330.8112]", + "[12495.1309 -10057.0205 330.5457]", + "[12192.0195 -10476.4102 330.9902]", + "[11854.0059 -10866.2061 330.6953]", + "[11483.5977 -11222.6699 330.7611]", + "[11084.4795 -11543.7656 330.6963]", + "[10655.624 -11833.6104 330.6089]", + "[10205.6172 -12085.3105 330.7325]", + "[9740.1611 -12302.1104 330.839]", + "[9255.6377 -12487.7256 331.0086]", + "[8761.6982 -12639.8164 330.86]", + "[8261.6582 -12762.3916 330.8283]", + "[7757.6904 -12857.8223 330.7283]", + "[7244.605 -12930.333 331.0586]", + "[6730.5195 -12980.5635 331.057]", + "[6216.5913 -13011.4053 330.7785]", + "[5703.3003 -13024.2549 330.8864]", + "[5184.3535 -13022.6553 330.3205]", + "[4667.3442 -13020.5938 330.7108]", + "[4151.6865 -13021.1602 328.5816]", + "[3635.1875 -13021.2324 309.5452]", + "[3116.6096 -13021.5547 289.4802]", + "[2604.3555 -13020.1377 271.5267]", + "[2087.1572 -13020.5547 253.6493]", + "[1569.5486 -13019.959 235.4945]", + "[1056.9055 -13021.7148 217.5998]", + "[541.9736 -13021.6631 199.5493]", + "[26.2246 -13020.4199 181.7086]", + "[-488.8528 -13021.7539 163.7385]", + "[-1001.5486 -13021.8428 145.7689]", + "[-1519.3306 -13021.6133 127.6979]", + "[-2032.0741 -13021.585 109.7135]", + "[-2548.3467 -13021.6123 91.6933]", + "[-3067.4514 -13020.5586 73.6415]", + "[-3588.7251 -13020.2754 55.3031]", + "[-4100.8613 -13021.9326 37.4424]", + "[-4612.897 -13021.0586 26.3386]", + "[-5133.5859 -13021.9619 28.4628]", + "[-5651.9609 -13020.6104 29.511]", + "[-6164.3726 -13016.8047 29.8191]", + "[-6679.0664 -12989.374 29.778]", + "[-7193.7866 -12943.1582 29.2385]", + "[-7706.0801 -12875.5918 29.4611]", + "[-8213.7705 -12781.9922 29.1522]", + "[-8715.3545 -12664.6133 29.205]", + "[-9208.7383 -12518.6475 29.3269]", + "[-9691.2168 -12341.2852 29.4897]", + "[-10159.873 -12131.3574 29.1233]", + "[-10611.5781 -11887.9844 29.4366]", + "[-11041.3174 -11608.6875 29.2215]", + "[-11453.4023 -11287.3477 29.4362]", + "[-11834.5293 -10930.9746 29.2508]", + "[-12181.3574 -10542.6816 29.0946]", + "[-12492.0322 -10126.0303 29.1313]", + "[-12766.3799 -9685.915 29.3581]", + "[-13003.748 -9225.748 29.2604]", + "[-13206.0313 -8750.1973 29.6408]", + "[-13374.7666 -8262.6348 29.0871]", + "[-13512.3828 -7766.438 29.4751]", + "[-13622.7529 -7264.687 29.3856]", + "[-13708.2988 -6758.9639 29.5229]", + "[-13769.6953 -6250.3413 29.1493]", + "[-13812.3506 -5729.7837 29.574]", + "[-13834.0762 -5208.6875 29.7231]", + "[-13837.7197 -4688.1255 29.5328]", + "[-13835.2656 -4168.5273 29.4301]", + "[-13834.9883 -3649.8406 29.971]", + "[-13835.1875 -3131.2117 20.2133]", + "[-13835.5605 -2612.1709 -1.9676]", + "[-13834.6885 -2092.1785 -20.438]", + "[-13835.0889 -1579.0002 -38.2626]", + "[-13834.418 -1059.778 -56.2416]", + "[-13835.1396 -543.8269 -74.1273]", + "[-13834.373 -30.523 -92.2053]", + "[-13835.3555 485.3425 -110.1407]", + "[-13835.8662 1005.3417 -128.2994]", + "[-13836.2139 1519.8478 -146.469]", + "[-13834.3291 2037.0797 -164.3748]", + "[-13835.6396 2558.2263 -182.8099]", + "[-13834.7881 3074.6257 -200.7043]", + "[-13835.833 3588.1028 -218.7424]", + "[-13835.4199 4100.2505 -236.4211]", + "[-13834.0225 4612.7822 -254.5503]", + "[-13834.6016 5126.7129 -271.4634]", + "[-13835.4521 5641.668 -274.2325]", + "[-13834.7705 6160.4849 -271.7543]", + "[-13834.8506 6680.0801 -271.5455]", + "[-13819.5098 7196.019 -271.6689]", + "[-13782.7471 7714.3486 -271.8769]", + "[-13724.4834 8231.626 -271.6364]", + "[-13643.6406 8745.2686 -271.8962]", + "[-13536.7373 9253.5283 -271.7285]", + "[-13403.2119 9754.6318 -271.7925]", + "[-13238.7598 10246.0254 -272.0685]", + "[-13042.6426 10724.8428 -271.8157]", + "[-12813.1973 11187.5322 -272.1274]", + "[-12547.8965 11629.2686 -271.963]", + "[-12247.6084 12047.0166 -271.9073]", + "[-11912.376 12435.8242 -271.7281]", + "[-11545.1221 12792.9385 -271.9339]", + "[-11141.3965 13121.3457 -271.8777]", + "[-10711.4004 13412.1152 -272.0249]", + "[-10260.1943 13666.1797 -271.9426]", + "[-9792.3877 13885.1973 -271.5043]", + "[-9311.2207 14069.8008 -271.6821]", + "[-8820.0049 14221.2139 -271.6608]", + "[-8322.2168 14343.9893 -271.9401]", + "[-7810.7681 14441.7178 -271.8479]", + "[-7296.2778 14515.4619 -271.8989]", + "[-6784.9741 14566.4521 -271.8073]", + "[-6266.3091 14597.8828 -271.7619]", + "[-5751.1147 14610.5723 -271.6353]", + "[-5235.6606 14608.4336 -271.8027]", + "[-4721.5273 14606.9482 -271.3466]", + "[-4205.1812 14606.708 -270.7234]", + "[-3691.3052 14606.8896 -270.5851]", + "[-3174.1748 14607.2344 -270.4617]", + "[-2660.1296 14607.5781 -270.7166]", + "[-2142.3691 14607.7129 -270.7874]", + "[-1627.2474 14606.1895 -270.6991]", + "[-1114.397 14607.7051 -270.6615]", + "[-596.3157 14606.4424 -270.6758]", + "[-79.5017 14607.9043 -270.637]", + "[436.0166 14606.9463 -270.614]", + "[950.2272 14607.2783 -270.4233]", + "[1463.1658 14606.7813 -270.7386]", + "[1981.3993 14607.5732 -270.5963]", + "[2498.3281 14607.1123 -270.7191]", + "[3013.813 14607.6035 -270.6592]", + "[3527.8503 14606.6748 -270.6485]", + "[4040.5046 14606.2236 -270.7121]", + "[4558.2949 14607.6797 -270.6552]", + "[5074.7686 14601.958 -271.9104]", + "[5591.5493 14577.9756 -271.6248]", + "[6101.7031 14533.7041 -271.7454]", + "[6612.7607 14466.7783 -271.8501]", + "[7120.1577 14376.4238 -271.8365]", + "[7621.4531 14261.6104 -271.7534]", + "[8120.7485 14116.459 -271.8927]", + "[8606.3779 13941.3828 -272.0098]", + "[9079.0781 13733.2324 -271.599]", + "[9536.6963 13488.668 -271.7571]", + "[9971.1152 13208.9248 -271.9843]", + "[10383.668 12890.9521 -271.9141]", + "[10760.417 12542.0986 -271.8226]", + "[11106.3486 12161.8301 -272.004]", + "[11416.4688 11752.4297 -271.9914]", + "[11690.9365 11320.0117 -271.5212]", + "[11933.0557 10858.96 -271.8844]", + "[12139.3379 10384.1113 -271.8625]", + "[12310.1602 9900.7832 -271.8335]", + "[12451.9111 9405.876 -271.9058]", + "[12565.0771 8904.5586 -271.7432]", + "[12652.8047 8398.916 -271.4999]", + "[12716.8975 7890.2373 -271.5747]", + "[12760.5586 7368.9824 -272.1259]", + "[12784.6094 6847.1934 -271.744]", + "[12790.4912 6330.9043 -271.6925]", + "[12788.0049 5809.5581 -272.3887]", + "[12787.5752 5297.0723 -272.2136]", + "[12786.8838 4781.4736 -279.2332]", + "[12786.8154 4260.9688 -301.0616]", + "[12786.5107 3743.5076 -319.9531]", + "[12787.1465 3224.6096 -337.6632]", + "[12787.7783 2709.8843 -355.6215]", + "[12786.7295 2196.3577 -373.7311]", + "[12787.5605 1681.1196 -391.5667]", + "[12786.9004 1163.915 -409.8676]", + "[12787.3281 644.9188 -427.6431]", + "[12787.9072 124.2811 -445.5998]", + "[12786.8955 -388.3205 -463.7345]", + "[12787.7334 -902.0469 -481.9547]", + "[12786.7598 -1416.9568 -499.7598]", + "[12787.6904 -1932.9624 -517.924]", + "[12786.1709 -2449.5571 -535.9121]", + "[12786.6572 -2967.1113 -554.099]", + "[12787.4102 -3485.4836 -571.8242]", + "[12787.1338 -4003.0913 -576.0089]", + "[12786.8721 -4518.748 -573.2292]", + "[12786.5186 -5031.1929 -572.9458]", + "[12774.5264 -5546.2568 -573.1329]", + "[12740.8555 -6060.917 -573.3049]", + "[12685.4785 -6572.0552 -573.3936]", + "[12607.4951 -7085.0288 -573.4681]", + "[12506.8486 -7590.7578 -573.4049]", + "[12378.418 -8088.1021 -573.1524]", + "[12220.3594 -8578.54 -573.4267]", + "[12031.4961 -9056.0752 -573.2006]", + "[11809.4775 -9517.7715 -573.4786]", + "[11548.6992 -9966.1855 -573.4728]", + "[11252.2617 -10390.0742 -573.6749]", + "[10921.4043 -10785.29 -573.3812]", + "[10558.2031 -11150.5527 -573.5619]", + "[10160.5732 -11483.207 -573.611]", + "[9738.9854 -11778.7617 -573.4915]", + "[9296.6504 -12037.0771 -573.2991]", + "[8833.8662 -12260.2637 -573.3945]", + "[8349.9072 -12451.9531 -573.5334]", + "[7862.0347 -12609.2598 -573.3329]", + "[7357.6802 -12739.3906 -573.5677]", + "[6851.1968 -12841.9805 -573.3662]", + "[6336.5737 -12919.1543 -573.092]", + "[5827.125 -12972.8477 -573.3305]", + "[5315.7676 -13006.9092 -573.3314]", + "[4793.8242 -13023.7188 -573.3879]", + "[4272.7173 -13022.167 -573.3241]", + "[3753.8066 -13020.124 -573.1447]", + "[3238.1799 -13020.1992 -573.5633]", + "[2725.0132 -13020.1006 -589.9628]", + "[2205.2908 -13019.9951 -611.0927]", + "[1692.0486 -13020.5957 -628.689]", + "[1173.98 -13020.4434 -646.8313]", + "[661.7852 -13020.1309 -664.7477]", + "[141.5974 -13019.4717 -682.7576]", + "[-375.2586 -13020.6289 -701.0287]", + "[-888.3528 -13019.4707 -718.7277]", + "[-1408.4399 -13020.7139 -736.8709]", + "[-1930.2207 -13020.5596 -755.1119]", + "[-2446.4634 -13020.3164 -773.4183]", + "[-2962.8943 -13019.1406 -791.1444]", + "[-3477.8159 -13019.4189 -809.3524]", + "[-3992.3457 -13020.0381 -827.1926]", + "[-4507.4414 -13019.6182 -845.429]", + "[-5023.9976 -13020.1563 -863.1801]", + "[-5542.5649 -13019.5078 -877.1337]", + "[-6062.3936 -13020.667 -875.7468]", + "[-6584.0684 -13019.8604 -874.1013]", + "[-7105.5732 -13016.666 -874.1657]", + "[-7624.7397 -12993.4199 -874.0621]", + "[-8140.6367 -12948.6348 -874.4137]", + "[-8654.2969 -12882.5586 -874.1245]", + "[-9163.873 -12792.8428 -874.2909]", + "[-9667.8965 -12677.8418 -874.3172]", + "[-10163.6182 -12533.3594 -874.4218]", + "[-10649.0635 -12359.3574 -874.4893]", + "[-11120.8135 -12152.8008 -873.9202]", + "[-11574.29 -11910.7871 -874.382]", + "[-12006.624 -11635.1699 -874.5314]", + "[-12420.2266 -11318.4736 -874.1415]", + "[-12803.0723 -10966.4678 -874.4111]", + "[-13152.8945 -10583.2529 -874.4032]", + "[-13466.6338 -10171.3105 -874.3486]", + "[-13743.0479 -9734.9023 -873.946]", + "[-13983.6445 -9278.9961 -874.4019]", + "[-14188.6855 -8807.3389 -874.3395]", + "[-14360.0342 -8323.5908 -874.2979]", + "[-14501.0664 -7831.3457 -874.3619]", + "[-14616.917 -7323.6851 -874.2986]", + "[-14705.9404 -6811.8105 -874.3106]", + "[-14771.5957 -6297.2896 -874.061]", + "[-14814.4268 -5781.0845 -873.9744]", + "[-14837.1172 -5264.251 -874.2974]", + "[-14843.3154 -4747.9053 -874.087]", + "[-14841.5459 -4232.6274 -874.3125]", + "[-14840.4834 -3718.2847 -874.2356]", + "[-14839.8486 -3204.6748 -874.2856]", + "[-14841.3301 -2691.5286 -874.3567]", + "[-14840.0049 -2178.877 -874.3218]", + "[-14840.4316 -1666.585 -874.3536]", + "[-14839.5986 -1145.1437 -874.4051]", + "[-14840.0371 -624.0098 -874.3957]", + "[-14840.7354 -103.1964 -874.4181]", + "[-14839.4736 417.32 -874.4141]", + "[-14841.4004 937.5065 -874.3114]", + "[-14839.6201 1457.3774 -874.3436]", + "[-14841.2178 1976.9131 -874.3077]", + "[-14840.2725 2496.1143 -874.0604]", + "[-14841.2217 3015.0276 -874.3547]", + "[-14840.2383 3533.6086 -874.2106]", + "[-14841.3643 4051.9238 -874.2903]", + "[-14839.9404 4569.9053 -874.2507]", + "[-14841.1699 5087.5889 -874.3918]", + "[-14840.7002 5604.8921 -874.0504]", + "[-14828.1768 6121.6919 -874.0798]", + "[-14793.9121 6636.9028 -874.2336]", + "[-14740.4229 7149.8374 -874.4172]", + "[-14663.1221 7659.1279 -874.3493]", + "[-14562.6426 8163.5313 -874.2615]", + "[-14434.0186 8660.4072 -874.3795]", + "[-14278.5898 9148.5879 -874.2329]", + "[-14087.5225 9632.7227 -874.1724]", + "[-13862.125 10100.7949 -874.3502]", + "[-13601.252 10548.6787 -874.4718]", + "[-13305.5371 10973.0781 -874.4155]", + "[-12974.207 11369.0938 -874.5159]", + "[-12610.2773 11733.459 -874.2627]", + "[-12215.8691 12063.0498 -874.5381]", + "[-11796.3672 12357.835 -874.2119]", + "[-11346.7256 12620.3379 -874.39]", + "[-10878.373 12844.8652 -874.4655]", + "[-10396.75 13035.5566 -874.5177]", + "[-9904.6387 13192.8916 -874.4158]", + "[-9405.4287 13321.4766 -874.077]", + "[-8901.3516 13423.1758 -874.4354]", + "[-8394.0586 13500.834 -874.2189]", + "[-7884.6064 13554.3672 -874.1611]", + "[-7365.4717 13588.1455 -874.3171]", + "[-6846.3994 13603.7529 -874.355]", + "[-6328.3477 13596.334 -873.1746]", + "[-5818.5854 13500.0332 -872.9319]", + "[-5360.8955 13326.834 -873.6326]", + "[-4907.8428 13087.6221 -873.922]", + "[-4480.2183 12797.7656 -873.8411]", + "[-4083.4834 12472.8203 -873.4512]", + "[-3707.9502 12116.9414 -873.6556]", + "[-3338.3875 11759.5674 -873.5156]", + "[-2936.4995 11441.3828 -873.6544]", + "[-2499.0718 11161.5596 -873.7352]", + "[-2033.6741 10934.1846 -873.7317]", + "[-1542.467 10773.665 -873.8005]", + "[-1033.3602 10692.9473 -873.45]", + "[-519.6049 10694.8379 -873.3659]", + "[-2.5956 10702.375 -873.0712]", + "[512.1702 10704.7246 -873.1509]", + "[1024.6815 10703.54 -873.2237]", + "[1543.2909 10704.2334 -873.1896]", + "[2059.9116 10704.585 -873.3112]", + "[2575.4966 10703.7734 -873.1722]", + "[3090.4331 10704.3486 -873.29]", + "[3604.6619 10703.7871 -873.3091]", + "[4117.1104 10703.0576 -873.2396]", + "[4633.9868 10704.3965 -873.2494]", + "[5150.1528 10692.1592 -873.0421]", + "[5659.0767 10622.8916 -873.4081]", + "[6155.4937 10486.1592 -873.8285]", + "[6624.1699 10267.3916 -874.0669]", + "[6915.7861 10063.0059 -874.3477]", + "[7206.1963 9772.04 -874.5955]", + "[7431.0034 9449.8623 -874.1688]", + "[7630.1162 9020.7031 -873.764]", + "[7763.2046 8523.5742 -873.3839]", + "[7833.1694 8014.8428 -873.0456]", + "[7853.6147 7500.5801 -872.84]", + "[7882.6299 6985.5557 -872.9344]", + "[7993.0298 6485.1826 -873.3066]", + "[8118.3867 5985.5117 -873.1871]", + "[8189.5083 5477.3218 -873.21]", + "[8217.1357 4959.9585 -873.168]", + "[8219.8721 4447.7344 -873.1351]", + "[8214.8193 3932.8486 -872.6843]", + "[8214.3525 3418.6147 -872.8959]", + "[8213.8086 2900.696 -873.0763]", + "[8213.7773 2385.6804 -872.5375]", + "[8213.9092 1873.2 -873.767]", + "[8214.2178 1356.5044 -873.3624]", + "[8214.5938 844.1721 -873.4551]", + "[8213.5742 331.0928 -873.4189]", + "[8214.8232 -184.0893 -873.5312]", + "[8214.4258 -697.6263 -873.4564]", + "[8214.0703 -1215.7391 -873.6578]", + "[8213.6934 -1731.9053 -873.5632]", + "[8214.1787 -2246.3098 -873.3336]", + "[8213.3047 -2758.9575 -873.284]", + "[8213.752 -2971.4001 -873.1582]" + ], + + [ + "[8666.5225 -14146.9941 3452.0659]", + "[8154.5566 -14206.5088 3451.7864]", + "[7658.1543 -14333.875 3451.7751]", + "[7154.7124 -14443.2002 3451.9407]", + "[6644.8774 -14501.6104 3451.8257]", + "[6130.4766 -14518.958 3451.6719]", + "[5616.0806 -14517.4619 3451.6663]", + "[5102.4619 -14514.918 3451.6494]", + "[4590.3418 -14514.6875 3451.7751]", + "[4077.8042 -14514.8887 3451.7473]", + "[3563.6929 -14515.0146 3451.6902]", + "[3050.3384 -14514.8975 3451.645]", + "[2537.7354 -14514.8164 3452.1233]", + "[2024.3179 -14514.4727 3452.3823]", + "[1511.3832 -14515.5654 3452.3218]", + "[998.7565 -14514.7412 3452.0767]", + "[485.6509 -14515.0498 3452.144]", + "[-26.4856 -14515.3164 3452.136]", + "[-538.5384 -14514.7607 3452.1418]", + "[-1051.1433 -14514.6816 3452.1311]", + "[-1564.7495 -14515.54 3452.1914]", + "[-2079.2097 -14515.6133 3452.1477]", + "[-2594.1025 -14515.0303 3452.1558]", + "[-3106.4343 -14515.1631 3452.4009]", + "[-3619.2961 -14514.4775 3452.2488]", + "[-4132.1973 -14515.0234 3452.3167]", + "[-4644.2129 -14515.7314 3452.2939]", + "[-5156.4473 -14513.9717 3452.3357]", + "[-5670.7202 -14515.5771 3452.3564]", + "[-6185.415 -14515.1787 3452.3198]", + "[-6700.5718 -14515.1445 3452.2866]" + ], + + [ + "[2835.6729 -14516.1563 3452.0593]", + "[3349.6965 -14540.0752 3451.6167]", + "[3854.5288 -14642.9189 3451.7568]", + "[4352.3262 -14773.168 3451.9692]", + "[4858.7793 -14854.2324 3451.7388]", + "[5372.5186 -14887.8994 3451.8755]", + "[5886.5361 -14893.4844 3451.7476]", + "[6402.9165 -14896.5664 3451.749]", + "[6915.5444 -14928.0098 3452.0383]", + "[7423.9775 -15005.3252 3451.9124]", + "[7923.5176 -15121.4502 3451.8423]", + "[8423.9473 -15239.0596 3451.9495]" + ], + + [ + "[8248.0156 3121.4983 -872.9296]", + "[8356.6611 3622.4023 -872.756]", + "[8468.6904 4123.4702 -873.1514]" + ], + + [ + "[8461.9902 2998.4866 -873.0883]", + "[8371.2051 3502.9961 -872.9395]", + "[8247.4873 3999.8362 -873.0731]" + ], + + [ + "[10523.9619 -11506.3096 970.9399]", + "[10524.1875 -10993.1348 970.9625]", + "[10524.9404 -10480.9824 970.9095]", + "[10523.8477 -9968.1416 970.9437]", + "[10524.8232 -9454.1689 970.9338]", + "[10524.1738 -8941.2646 970.9523]", + "[10525.1904 -8426.7051 970.8748]", + "[10524.1396 -7913.043 970.8476]", + "[10524.3691 -7399.1045 970.8738]", + "[10523.4648 -6885.8486 971.0596]", + "[10524.2705 -6372.8022 970.8745]", + "[10524.0342 -5857.7588 971.0491]", + "[10524.915 -5343.6709 970.3638]", + "[10523.1611 -4828.7793 970.5381]", + "[10524.7305 -4313.9512 970.5051]", + "[10525.2266 -3797.1775 970.4392]", + "[10524.0273 -3281.0264 970.5822]", + "[10524.5723 -2763.7407 970.3365]" + ], + + [ + "[10788.415 -11478.418 970.9394]", + "[10787.2305 -10965.1738 970.9481]", + "[10787.3662 -10453.1123 970.848]", + "[10788.8369 -9938.3877 970.6791]", + "[10788.4189 -9423.75 970.9653]", + "[10787.5791 -8910.7188 970.9083]", + "[10787.9053 -8396.8564 970.8873]", + "[10788.542 -7882.7119 970.7592]", + "[10787.1133 -7369.9092 971.0011]", + "[10788.249 -6854.3838 970.8653]", + "[10788.1162 -6340.1792 971.0924]", + "[10787.875 -5824.8262 970.9598]", + "[10787.0869 -5308.1138 970.4805]", + "[10786.8223 -4792.5928 970.5456]", + "[10789.0391 -4280.252 970.5475]", + "[10788.749 -3766.4541 970.5692]", + "[10789.3516 -3252.0254 970.4771]", + "[10788.3877 -2738.0879 970.4826]" + ], + + [ + "[10772.0781 -5932.3848 970.8712]", + "[10683.5508 -6438.4697 970.9315]", + "[10558.3145 -6935.6929 970.7161]", + "[10528.0205 -7242.4204 970.8906]" + ], + + [ + "[10781.1104 -7110.1162 970.9274]", + "[10673.5693 -6609.1182 970.9428]", + "[10561.2979 -6108.3091 970.8956]", + "[10543.2979 -5932.3848 970.8956]" + ], + + [ + "[4881.6821 13155.2178 5243.0366]", + "[4995.8584 13175.5508 5242.8843]", + "[5480.1577 13280.8945 5243.1934]", + "[5980.9126 13391.8994 5242.8545]" + ], + + [ + "[4866.856 13386.0439 5242.9229]", + "[5370.6748 13293.7656 5242.9165]", + "[5871.0918 13168.8896 5243.2642]" + ] +] diff --git a/lua/metrostroi_data/track_gm_mus_orange_line_c.lua b/lua/metrostroi_data/track_gm_mus_orange_line_c.lua new file mode 100644 index 0000000..310eb90 --- /dev/null +++ b/lua/metrostroi_data/track_gm_mus_orange_line_c.lua @@ -0,0 +1,976 @@ +{"1":{"1":"[-4092.73 13701.4521 501.1105]", +"2":"[-4092.6733 13600.7109 501.1852]", +"3":"[-4092.6704 13088.4131 501.066]", +"4":"[-4092.4104 12573.8184 501.102]", +"5":"[-4092.6064 12059.1445 501.0996]", +"6":"[-4092.52 11543.918 501.0483]", +"7":"[-4092.9104 11028.6133 501.0872]", +"8":"[-4092.7681 10514.2705 501.0492]", +"9":"[-4092.52 9999.2627 501.0858]", +"10":"[-4093.2251 9486.9688 501.135]", +"11":"[-4093.3945 8973.2695 501.127]", +"12":"[-4092.5295 8460.4268 501.2408]", +"13":"[-4091.7708 7943.9771 501.3324]", +"14":"[-4091.8923 7425.7427 501.1917]", +"15":"[-4092.0359 6913.3906 501.4904]", +"16":"[-4093.2314 6399.6689 501.4124]", +"17":"[-4093.176 5884.6382 501.6857]", +"18":"[-4091.5476 5368.3652 501.4892]", +"19":"[-4091.8752 4851.4688 501.5309]", +"20":"[-4092.8921 4334.5767 501.652]", +"21":"[-4093.1643 3818.1868 501.6325]", +"22":"[-4091.7612 3302.8374 501.5463]", +"23":"[-4092.8435 2789.1592 501.5179]", +"24":"[-4092.5688 2271.1853 501.5607]", +"25":"[-4092.2053 1753.5183 501.5232]", +"26":"[-4092.6443 1236.464 501.5944]", +"27":"[-4090.9375 720.5822 501.6993]", +"28":"[-4065.0037 207.3685 501.6882]", +"29":"[-3990.0447 -305.83 501.6493]", +"30":"[-3846.2307 -799.9699 501.5003]", +"31":"[-3632.0288 -1234.6951 501.6037]", +"32":"[-3416.3772 -1528.5403 501.5621]", +"33":"[-3101.824 -1829.2244 501.5058]", +"34":"[-2795.9883 -2032.6008 501.6299]", +"35":"[-2327.4001 -2237.4387 501.6274]", +"36":"[-1825.0977 -2362.7363 501.7444]", +"37":"[-1312.0209 -2421.7205 501.8336]", +"38":"[-796.9737 -2439.4651 501.7798]", +"39":"[-283.5832 -2438.5901 501.7759]", +"40":"[236.2067 -2439.6396 501.7085]", +"41":"[754.7985 -2440.6812 501.5836]", +"42":"[1272.4557 -2439.4099 501.5553]", +"43":"[1789.3241 -2439.9685 501.5818]", +"44":"[2305.396 -2440.2668 501.6006]", +"45":"[2820.6799 -2439.3989 501.5861]", +"46":"[3335.1672 -2440.0161 501.6158]", +"47":"[3848.8838 -2440.0708 501.6169]", +"48":"[4361.8081 -2439.5688 501.5837]", +"49":"[4873.957 -2439.6287 501.5891]", +"50":"[5393.207 -2439.6436 501.6056]", +"51":"[5911.6597 -2439.7563 501.6806]", +"52":"[6429.3052 -2439.9797 501.5862]", +"53":"[6946.1455 -2440.3115 501.5927]", +"54":"[7462.1797 -2439.9456 501.6127]", +"55":"[7977.4082 -2439.4536 501.5531]", +"56":"[8491.8145 -2440.3384 501.6141]", +"57":"[9005.3848 -2439.6646 501.5904]", +"58":"[9518.1367 -2440.1548 501.6213]", +"59":"[10037.5527 -2439.217 501.7547]", +"60":"[10555.3066 -2439.7048 501.7598]", +"61":"[11071.9463 -2440.0012 501.1466]", +"62":"[11587.1846 -2460.6506 498.3413]", +"63":"[12097.5859 -2527.1409 493.2052]", +"64":"[12592.0752 -2667.1851 489.3521]", +"65":"[12969.0801 -2850.1675 487.0366]", +"66":"[13256.5439 -3058.7322 486.0674]", +"67":"[13495.7529 -3306.5173 486.1616]", +"68":"[13702.6123 -3614.2275 487.3727]", +"69":"[13871.9463 -3996.5876 489.8428]", +"70":"[13999.2012 -4493.5122 494.3155]", +"71":"[14056.5146 -5008.082 498.5795]", +"72":"[14072.9854 -5519.8184 501.366]", +"73":"[14072.1465 -6035.1465 501.575]", +"74":"[14072.5635 -6549.1211 501.5535]", +"75":"[14072.2568 -7061.8066 501.5532]", +"76":"[14071.7549 -7580.1094 501.5977]", +"77":"[14072.3369 -8097.0566 501.5751]", +"78":"[14072.9199 -8612.6357 501.5572]", +"79":"[14072.335 -9126.8203 501.5935]", +"80":"[14071.8652 -9639.7002 501.5378]", +"81":"[14072.5596 -10158.043 501.6966]", +"82":"[14073.5537 -10674.959 501.5825]", +"83":"[14072.5254 -11190.457 501.0945]", +"84":"[14051.584 -11705.6885 498.2535]", +"85":"[13985.665 -12217.1152 493.6697]", +"86":"[13846.8564 -12712.5479 489.4688]", +"87":"[13666.4072 -13088.248 487.1219]", +"88":"[13460.793 -13374.4365 485.9214]", +"89":"[13206.4463 -13622.0205 486.2754]", +"90":"[12910.833 -13823.0732 487.419]", +"91":"[12524.8057 -13996.2803 489.6404]", +"92":"[12026.415 -14125.2109 493.9786]", +"93":"[11513.7578 -14183.3555 497.577]", +"94":"[10999.6748 -14200.5488 484.4229]", +"95":"[10487.3555 -14200.5176 447.5459]", +"96":"[9971.0684 -14200.0605 394.8302]", +"97":"[9458.6025 -14200.1484 336.6273]", +"98":"[8947.0498 -14200.3789 275.7485]", +"99":"[8433.6348 -14200.5029 214.047]", +"100":"[7920.6802 -14201.0332 153.0227]", +"101":"[7409.3208 -14201.0342 94.7229]", +"102":"[6895.6372 -14200.9004 42.1409]", +"103":"[6379.9521 -14200.4111 5.7401]", +"104":"[5866.0166 -14200.6328 -9.226]", +"105":"[5349.645 -14200.4307 -10.2744]", +"106":"[4835.1211 -14200.4238 -10.4011]", +"107":"[4322.7593 -14200.6631 -10.3956]", +"108":"[3806.6238 -14200.5713 -10.469]", +"109":"[3292.7271 -14200.2686 -10.3678]", +"110":"[2775.2156 -14199.7666 -10.3664]", +"111":"[2260.0815 -14200.2754 -10.3946]", +"112":"[1747.2595 -14200.1445 -10.4284]", +"113":"[1230.9878 -14200.9287 -10.285]", +"114":"[717.0901 -14200.1963 -10.3512]", +"115":"[205.0933 -14199.9785 -12.1584]", +"116":"[-310.2594 -14200.0752 -29.3721]", +"117":"[-825.4796 -14200.3154 -68.6473]", +"118":"[-1339.8865 -14200.0889 -122.2558]", +"119":"[-1854.5531 -14200.3428 -181.3124]", +"120":"[-2366.7961 -14200.373 -242.398]", +"121":"[-2878.7134 -14200.7666 -303.8433]", +"122":"[-3389.4456 -14200.7383 -364.3133]", +"123":"[-3901.3296 -14200.8281 -422.3695]", +"124":"[-4412.7339 -14200.6943 -473.9133]", +"125":"[-4929.3286 -14200.709 -508.355]", +"126":"[-5448.8184 -14200.2373 -521.9931]", +"127":"[-5966.1113 -14200.3633 -522.3736]", +"128":"[-6481.2505 -14200.5225 -522.3995]", +"129":"[-6997.1665 -14200.2334 -522.4644]", +"130":"[-7512.1973 -14200.625 -522.4066]", +"131":"[-8025.8784 -14200.4453 -522.3362]", +"132":"[-8538.1992 -14199.7266 -522.3203]", +"133":"[-9055.9268 -14199.9189 -522.3717]", +"134":"[-9572.1768 -14201.2119 -522.4243]", +"135":"[-10086.9355 -14201.3984 -522.3771]", +"136":"[-10600.2383 -14200.832 -522.3367]", +"137":"[-11115.1162 -14199.1494 -523.274]", +"138":"[-11631.7998 -14175.5664 -526.0375]", +"139":"[-12141.7256 -14103.3193 -530.936]", +"140":"[-12638.9229 -13953.9307 -534.9375]", +"141":"[-12991.7666 -13775.7012 -537.1161]", +"142":"[-13281.4414 -13558.8506 -537.893]", +"143":"[-13515.1543 -13309.2393 -537.652]", +"144":"[-13715.3584 -13002.2188 -536.5744]", +"145":"[-13886.5439 -12600.8604 -533.7006]", +"146":"[-14007.1689 -12099.833 -529.3176]", +"147":"[-14059.3428 -11583.4531 -524.9422]", +"148":"[-14072.8906 -11066.1191 -522.3583]", +"149":"[-14071.9316 -10548.4561 -522.3767]", +"150":"[-14072.4121 -10036.1787 -522.3998]", +"151":"[-14072.624 -9522.2969 -522.4949]", +"152":"[-14072.5898 -9002.2852 -522.4549]", +"153":"[-14072.3613 -8485.6309 -522.4794]", +"154":"[-14072.4482 -7973.1006 -522.3995]", +"155":"[-14072.21 -7457.0908 -522.3102]", +"156":"[-14072.5361 -6935.9502 -522.0294]", +"157":"[-14072.5244 -6422.0444 -522.2018]", +"158":"[-14072.2021 -5909.981 -522.2543]", +"159":"[-14072.5586 -5395.4414 -522.3116]", +"160":"[-14072.376 -4875.4121 -522.3416]", +"161":"[-14072.9043 -4355.3784 -522.0991]", +"162":"[-14072.0137 -3835.719 -522.2516]", +"163":"[-14072.8193 -3316.408 -522.3598]", +"164":"[-14072.0898 -2797.4927 -522.3526]", +"165":"[-14072.9121 -2278.9265 -522.3703]", +"166":"[-14071.8926 -1760.7324 -522.2871]", +"167":"[-14072.251 -1242.8829 -522.3353]", +"168":"[-14059.2344 -725.8447 -522.2877]", +"169":"[-14026.9209 -210.694 -522.1636]", +"170":"[-13966.3721 300.7769 -522.3254]", +"171":"[-13878.9385 807.4526 -522.1892]", +"172":"[-13760.6045 1306.2302 -522.2341]", +"173":"[-13608.2803 1806.3679 -522.2442]", +"174":"[-13438.5898 2298.7478 -522.2921]", +"175":"[-13282.5957 2793.0645 -522.1011]", +"176":"[-13158.9424 3294.7527 -522.4489]", +"177":"[-13064.8193 3802.335 -522.3719]", +"178":"[-13000.7246 4313.8423 -522.4149]", +"179":"[-12961.2715 4826.8804 -522.0988]", +"180":"[-12947.5605 5339.8403 -522.4193]", +"181":"[-12942.2041 5852.0352 -522.3168]", +"182":"[-12932.623 6376.0044 -522.15]", +"183":"[-12903.6797 6898.3032 -522.4898]", +"184":"[-12855.4951 7418.6021 -522.3268]", +"185":"[-12784.6943 7935.7271 -522.1815]", +"186":"[-12689.5186 8448.0947 -522.0521]", +"187":"[-12567.1416 8956.4551 -522.5325]", +"188":"[-12417.7041 9448.1309 -522.4256]", +"189":"[-12236.6338 9932.7793 -522.3995]", +"190":"[-12019.6699 10406.1602 -522.4961]", +"191":"[-11771.0791 10856.7295 -522.4773]", +"192":"[-11485.9336 11285.833 -522.4562]", +"193":"[-11165.8066 11689.3525 -522.4164]", +"194":"[-10812.708 12061.6934 -522.5156]", +"195":"[-10420.0928 12408.584 -522.4243]", +"196":"[-10001.6465 12716.6016 -522.4499]", +"197":"[-9563.8066 12985.9785 -522.4512]", +"198":"[-9098.2256 13223.04 -522.3439]", +"199":"[-8623.2764 13422.9346 -522.4022]", +"200":"[-8128.6992 13592.0488 -522.4192]", +"201":"[-7633.2314 13728.7471 -522.3196]", +"202":"[-7124.7236 13838.584 -522.2932]", +"203":"[-6605.0649 13923.6807 -522.3391]", +"204":"[-6092.0073 13983.7344 -522.3442]", +"205":"[-5571.9956 14023.2959 -522.367]", +"206":"[-5047.981 14043.2207 -522.3092]", +"207":"[-4523.1182 14048.4775 -522.1758]", +"208":"[-3998.6929 14048.3975 -522.351]", +"209":"[-3474.7573 14048.459 -522.2668]", +"210":"[-2951.2993 14048.6914 -522.4056]", +"211":"[-2428.3445 14048.083 -522.454]", +"212":"[-1905.8812 14048.8389 -522.3537]", +"213":"[-1383.8997 14048.3047 -522.3931]", +"214":"[-862.4149 14048.2813 -522.3125]", +"215":"[-341.4378 14048.7363 -522.3265]", +"216":"[179.0748 14048.2217 -522.4316]", +"217":"[699.1042 14048.5879 -522.3407]", +"218":"[1218.6659 14048.4307 -522.2612]", +"219":"[1737.7307 14048.3584 -522.3073]", +"220":"[2256.2847 14048.501 -522.3963]", +"221":"[2774.3579 14048.2461 -522.3333]", +"222":"[3291.937 14048.6143 -522.2702]", +"223":"[3809.0095 14048.4766 -522.342]", +"224":"[4325.4077 14047.7988 -522.368]", +"225":"[4840.9609 14041.4932 -522.4398]", +"226":"[5354.7852 14018.748 -521.9977]", +"227":"[5866.3076 13977.7764 -522.2463]", +"228":"[6374.6582 13915.5635 -522.3117]", +"229":"[6894.6909 13827.4287 -522.4834]", +"230":"[7408.563 13713.1836 -522.3707]", +"231":"[7914.0991 13569.5908 -522.3674]", +"232":"[8408.7441 13395.0303 -522.3104]", +"233":"[8888.8896 13186.8447 -522.3272]", +"234":"[9351.1523 12943.7744 -522.285]", +"235":"[9791.084 12664.6777 -522.4467]", +"236":"[10204.7051 12350.0371 -522.317]", +"237":"[10587.9492 12001.0713 -522.2606]", +"238":"[10937.9453 11620.25 -522.4506]", +"239":"[11252.5674 11211.3643 -522.3633]", +"240":"[11529.6504 10780.3984 -522.327]", +"241":"[11774.6133 10321.7031 -522.3443]", +"242":"[11985.833 9842.6426 -522.3585]", +"243":"[12159.6797 9360.501 -522.2869]", +"244":"[12304.1289 8863.7422 -522.4174]", +"245":"[12421.6865 8353.9453 -522.3135]", +"246":"[12511.5615 7841.1919 -522.4066]", +"247":"[12576.8613 7332.3657 -522.3351]", +"248":"[12621.458 6815.8774 -522.2068]", +"249":"[12646.333 6301.9824 -522.259]", +"250":"[12655.4297 5789.4878 -522.4282]", +"251":"[12657.0918 5276.4185 -522.4491]", +"252":"[12656.2949 4760.6992 -522.3776]", +"253":"[12655.876 4240.1812 -522.4526]", +"254":"[12656.3799 3720.2312 -522.3982]", +"255":"[12656.8936 3200.8237 -522.3151]", +"256":"[12655.6914 2681.9368 -522.3364]", +"257":"[12656.7539 2163.6055 -522.3639]", +"258":"[12656.7988 1645.8326 -522.4326]", +"259":"[12655.1113 1128.7738 -522.473]", +"260":"[12657.0625 612.574 -522.3519]", +"261":"[12656.3193 97.3429 -522.4615]", +"262":"[12655.708 -417.309 -522.3404]", +"263":"[12656.1201 -931.4162 -522.2968]", +"264":"[12656.4795 -1444.9658 -522.3906]", +"265":"[12655.6387 -1957.9839 -522.4005]", +"266":"[12656.748 -2470.4302 -522.3626]", +"267":"[12656.2021 -2990.8965 -522.4103]", +"268":"[12656.293 -3510.5391 -522.3312]", +"269":"[12656.5195 -4029.6292 -522.2947]", +"270":"[12656.0322 -4548.1323 -522.3646]", +"271":"[12655.5234 -5065.6016 -522.4156]", +"272":"[12656.002 -5583.3296 -525.6274]", +"273":"[12656.4092 -6100.6367 -543.2985]", +"274":"[12655.7949 -6611.6255 -580.2727]", +"275":"[12656.5713 -7131.9072 -620.5865]", +"276":"[12654.7861 -7643.6064 -643.9871]", +"277":"[12627.4082 -8162.7905 -651.3934]", +"278":"[12550.5059 -8675.8027 -651.1873]", +"279":"[12404.3184 -9169.5322 -651.1693]", +"280":"[12194.2979 -9589.5215 -651.3745]", +"281":"[11952.6133 -9914.1016 -651.2426]", +"282":"[11681.8789 -10169.4209 -651.3765]", +"283":"[11322.3457 -10405.7656 -651.3766]", +"284":"[10910.0068 -10583.4922 -651.3698]", +"285":"[10408.4268 -10711.7012 -651.2937]", +"286":"[9895.6543 -10773.2266 -650.3102]", +"287":"[9376.5039 -10790.0869 -650.7449]", +"288":"[8860.8994 -10791.7314 -650.284]", +"289":"[8347.4707 -10792.7744 -650.3961]", +"290":"[7834.4707 -10792.1289 -650.6155]", +"291":"[7316.8867 -10792.4111 -665.9457]", +"292":"[6803.8896 -10791.8418 -700.1334]", +"293":"[6284.9219 -10792.126 -752.4362]", +"294":"[5767.4414 -10792.085 -811.2039]", +"295":"[5254.8428 -10791.8887 -871.8629]", +"296":"[4739.3794 -10792.8047 -934.7036]", +"297":"[4224.5464 -10792.2773 -997.7697]", +"298":"[3713.571 -10792.1094 -1060.5421]", +"299":"[3195.3311 -10792.8809 -1124.2473]", +"300":"[2686.9321 -10791.9736 -1185.9968]", +"301":"[2176.0164 -10792.4883 -1246.6486]", +"302":"[1665.7205 -10792.6563 -1304.859]", +"303":"[1150.2045 -10792.2939 -1358.2278]", +"304":"[631.8283 -10792.5879 -1395.4535]", +"305":"[118.458 -10791.7959 -1411.5321]", +"306":"[-397.7822 -10792.9678 -1412.4454]", +"307":"[-921.0931 -10792.0107 -1412.376]", +"308":"[-1435.6165 -10793.0283 -1412.2968]", +"309":"[-1956.4773 -10791.9385 -1412.442]", +"310":"[-2475.0381 -10792.9443 -1412.412]", +"311":"[-2993.2363 -10792.2461 -1412.4006]", +"312":"[-3511.0251 -10792.5107 -1412.2996]", +"313":"[-4027.9807 -10785.5674 -1412.4939]", +"314":"[-4544.0293 -10766.1396 -1412.3999]", +"315":"[-5058.0591 -10726.1602 -1412.3932]", +"316":"[-5569.4209 -10666.6133 -1412.3606]", +"317":"[-6076.6294 -10583.5 -1412.3313]", +"318":"[-6578.2612 -10475.7764 -1412.3546]", +"319":"[-7072.313 -10341.29 -1412.4236]", +"320":"[-7566.8374 -10173.0908 -1412.3943]", +"321":"[-8047.9287 -9972.4443 -1412.5171]", +"322":"[-8511.2158 -9737.3428 -1412.5599]", +"323":"[-8953.3711 -9467.1592 -1412.5334]", +"324":"[-9370.5 -9161.6553 -1412.4535]", +"325":"[-9758.1309 -8821.335 -1412.42]", +"326":"[-10114.1602 -8449.6631 -1412.5018]", +"327":"[-10435.043 -8048.647 -1412.423]", +"328":"[-10720.4893 -7622.9624 -1412.4431]", +"329":"[-10974.9102 -7166.6177 -1412.4526]", +"330":"[-11192.7803 -6692.6689 -1412.4818]", +"331":"[-11376.9258 -6205.4282 -1412.5292]", +"332":"[-11528.3994 -5707.71 -1412.4484]", +"333":"[-11651.0723 -5202.8979 -1412.4258]", +"334":"[-11745.9883 -4693.1533 -1412.3156]", +"335":"[-11817.1094 -4180.0117 -1412.3998]", +"336":"[-11865.7158 -3664.6809 -1412.4637]", +"337":"[-11894.8682 -3148.5398 -1412.4509]", +"338":"[-11905.3066 -2632.3396 -1412.4102]", +"339":"[-11896.8154 -2116.5227 -1412.3945]", +"340":"[-11870.8174 -1602.2278 -1412.4268]", +"341":"[-11824.7637 -1090.3138 -1412.1931]", +"342":"[-11756.1396 -572.0623 -1412.2211]", +"343":"[-11663.5273 -58.9404 -1412.3861]", +"344":"[-11544.1016 447.8 -1412.4659]", +"345":"[-11396.0273 946.059 -1412.4895]", +"346":"[-11216.7432 1433.0454 -1412.4672]", +"347":"[-11004.2598 1905.1693 -1412.5253]", +"348":"[-10757.5762 2358.9702 -1412.5159]", +"349":"[-10475.6641 2790.4385 -1412.4987]", +"350":"[-10158.8711 3195.4895 -1412.3187]", +"351":"[-9808.6826 3570.3896 -1412.4789]", +"352":"[-9419.7793 3919.2998 -1412.5077]", +"353":"[-9002.3877 4231.5669 -1412.385]", +"354":"[-8561.0098 4506.9453 -1412.4619]", +"355":"[-8100.1318 4745.5947 -1412.5583]", +"356":"[-7623.7954 4948.7236 -1412.5284]", +"357":"[-7135.625 5119.1631 -1412.4216]", +"358":"[-6638.3921 5258.6875 -1412.3684]", +"359":"[-6135.2197 5370.2178 -1412.2789]", +"360":"[-5627.7285 5456.2017 -1412.2749]", +"361":"[-5117.3955 5518.0029 -1412.3756]", +"362":"[-4606.0425 5559.8857 -1412.3776]", +"363":"[-4094.1521 5582.0435 -1412.3561]", +"364":"[-3582.1697 5589.3936 -1412.363]", +"365":"[-3060.3542 5590.5376 -1412.3213]", +"366":"[-2539.4209 5590.4531 -1412.5474]", +"367":"[-2019.3627 5590.3691 -1412.438]", +"368":"[-1499.6497 5590.5659 -1412.3136]", +"369":"[-980.2902 5589.8096 -1412.426]", +"370":"[-461.5248 5589.79 -1412.4086]", +"371":"[56.7342 5590.3242 -1412.4573]", +"372":"[574.6168 5589.9272 -1412.4307]", +"373":"[1092.1516 5590.0195 -1412.4042]", +"374":"[1609.335 5589.8301 -1412.4142]", +"375":"[2126.1714 5590.4971 -1412.4285]", +"376":"[2642.6489 5589.6748 -1412.4181]", +"377":"[3158.7754 5590.1143 -1412.4176]", +"378":"[3674.5686 5589.9316 -1412.4019]", +"379":"[4190.019 5589.5874 -1412.3958]", +"380":"[4705.1143 5589.7065 -1412.3076]", +"381":"[5219.877 5590.1294 -1412.3395]", +"382":"[5734.2686 5590.1338 -1412.3567]", +"383":"[6248.2837 5589.7563 -1412.3154]", +"384":"[6761.1543 5590.0327 -1411.6039]", +"385":"[7275.4897 5568.7568 -1411.7916]", +"386":"[7786.2871 5508.2959 -1411.6639]", +"387":"[8288.5703 5381.9868 -1411.442]", +"388":"[8765.3115 5173.729 -1412.0157]", +"389":"[9106.0381 4947.1421 -1412.3445]", +"390":"[9391.7715 4674.3428 -1412.252]", +"391":"[9639.8701 4335.71 -1412.2321]", +"392":"[9839.7529 3929.5137 -1411.8843]", +"393":"[9989.207 3438.3132 -1411.6912]", +"394":"[10071.5352 2925.8833 -1411.2983]", +"395":"[10100.3145 2409.8325 -1411.7999]", +"396":"[10105.2559 1894.1772 -1412.3856]", +"397":"[10106.0371 1379.1248 -1412.4462]", +"398":"[10104.0146 864.6594 -1412.4253]", +"399":"[10105.1934 350.7751 -1412.4204]", +"400":"[10105.4248 -162.5556 -1412.3975]", +"401":"[10104.7979 -675.3394 -1412.4421]", +"402":"[10104.5 -1187.5587 -1412.4686]", +"403":"[10106.1494 -1708.2045 -1412.3776]", +"404":"[10104.3418 -2228.2729 -1412.422]", +"405":"[10089.958 -2744.7896 -1412.5791]", +"406":"[10039.792 -3262.6633 -1412.4785]", +"407":"[9925.6865 -3765.5564 -1412.7219]", +"408":"[9734.2539 -4246.2451 -1413.1174]", +"409":"[9505.6885 -4615.271 -1413.2368]", +"410":"[9236.4346 -4915.6177 -1413.2479]", +"411":"[8929.0566 -5156.3008 -1412.5287]", +"412":"[8519.1611 -5374.6372 -1412.4121]", +"413":"[8031.4771 -5536.1782 -1411.6774]", +"414":"[7523.9585 -5628.0884 -1411.3192]", +"415":"[7009.9897 -5664.5444 -1410.8755]", +"416":"[6493.855 -5673.9482 -1410.4279]", +"417":"[5975.1445 -5672.8726 -1410.364]", +"418":"[5457.4551 -5671.585 -1410.4355]", +"419":"[4940.7485 -5672.2144 -1410.3586]", +"420":"[4424.9893 -5673.0308 -1410.4202]", +"421":"[3910.2112 -5672.5903 -1410.4353]", +"422":"[3396.3813 -5672.1377 -1410.538]", +"423":"[2883.522 -5672.3491 -1410.3867]", +"424":"[2364.0764 -5672.728 -1410.4301]", +"425":"[1849.772 -5672.3867 -1419.1461]", +"426":"[1331.1901 -5672.2197 -1447.208]", +"427":"[815.1819 -5672.5405 -1496.0709]", +"428":"[297.6348 -5672.2534 -1553.6169]", +"429":"[-214.5002 -5672.4097 -1613.713]", +"430":"[-732.5447 -5672.77 -1675.882]", +"431":"[-1244.8278 -5672.4443 -1737.1667]", +"432":"[-1758.2366 -5672.7588 -1796.8721]", +"433":"[-2268.3921 -5672.9878 -1851.8044]", +"434":"[-2785.1558 -5672.7222 -1896.1211]", +"435":"[-3300.2261 -5672.7183 -1918.0853]", +"436":"[-3818.0322 -5672.4507 -1922.5156]", +"437":"[-4332.8325 -5672.6089 -1922.3931]", +"438":"[-4846.1143 -5672.1587 -1922.4491]", +"439":"[-5363.7441 -5685.8901 -1921.9451]", +"440":"[-5877.3184 -5734.4761 -1921.4392]", +"441":"[-6383.4067 -5843.9883 -1921.7758]", +"442":"[-6866.7422 -6029.0991 -1922.2017]", +"443":"[-7236.8359 -6251.6118 -1922.2162]", +"444":"[-7545.416 -6520.71 -1922.4901]", +"445":"[-7788.5991 -6822.2637 -1922.293]", +"446":"[-8010.4971 -7225.125 -1922.201]", +"447":"[-8178.4634 -7713.644 -1921.7357]", +"448":"[-8274.002 -8218.1719 -1921.4724]", +"449":"[-8305.3701 -8733.4238 -1921.2765]", +"450":"[-8277.4189 -9251.4063 -1921.4491]", +"451":"[-8183.8672 -9755.0928 -1921.7418]", +"452":"[-8017.2808 -10246.0674 -1922.0322]", +"453":"[-7787.7769 -10663.96 -1922.3539]", +"454":"[-7545.0425 -10965.6709 -1922.3118]", +"455":"[-7240.9907 -11231.4824 -1922.2448]", +"456":"[-6879.9287 -11449.4551 -1922.0177]", +"457":"[-6396.917 -11637.2637 -1921.7062]", +"458":"[-5891.9404 -11748.3604 -1921.5302]", +"459":"[-5378.0444 -11799.873 -1921.9281]", +"460":"[-4861.6553 -11814.8652 -1922.192]", +"461":"[-4345.4131 -11813.5859 -1922.3713]", +"462":"[-3829.6848 -11813.8584 -1922.473]", +"463":"[-3314.9604 -11814.2588 -1922.4678]", +"464":"[-2801.7644 -11813.8457 -1922.4332]", +"465":"[-2281.8152 -11814.2764 -1922.4521]", +"466":"[-1764.8695 -11813.8525 -1922.3972]", +"467":"[-1247.0236 -11813.7344 -1922.4447]", +"468":"[-729.7432 -11814.041 -1922.3977]", +"469":"[-213.0416 -11813.6455 -1922.448]", +"470":"[303.1133 -11813.9375 -1922.3802]", +"471":"[818.7014 -11814.3975 -1922.4677]", +"472":"[1333.6967 -11813.6426 -1922.3588]", +"473":"[1848.1013 -11814.0166 -1922.4475]", +"474":"[2361.927 -11814.0869 -1922.338]", +"475":"[2875.1919 -11813.9434 -1922.447]", +"476":"[3387.9006 -11813.6035 -1922.4266]", +"477":"[3900.0591 -11814.2422 -1922.4199]", +"478":"[4420.2593 -11814.2402 -1922.3131]", +"479":"[4939.8696 -11813.8887 -1922.4348]", +"480":"[5458.8711 -11813.5313 -1922.3978]", +"481":"[5977.2793 -11814.75 -1922.3961]", +"482":"[6495.0723 -11813.3711 -1922.4508]", +"483":"[7012.2676 -11814.0869 -1922.4362]", +"484":"[7528.8086 -11814.2959 -1922.3756]", +"485":"[8044.3413 -11805.9541 -1922.9232]", +"486":"[8556.5361 -11769.1631 -1923.4515]", +"487":"[9066.8711 -11675.0225 -1923.7561]", +"488":"[9554.04 -11511.5947 -1924.1635]", +"489":"[9985.1006 -11276.6934 -1924.2811]", +"490":"[10267.7305 -11050.502 -1924.3903]", +"491":"[10557.0674 -10720.5029 -1924.2441]", +"492":"[10761.6523 -10382.5029 -1924.1711]", +"493":"[10951.8057 -9899.5928 -1923.7891]", +"494":"[11064.5361 -9396.7314 -1923.4343]", +"495":"[11115.8057 -8882.3232 -1924.0304]", +"496":"[11131.5596 -8368.5566 -1924.2184]", +"497":"[11129.2129 -7850.2969 -1920.5582]", +"498":"[11128.8555 -7337.5923 -1899.4072]", +"499":"[11129.5068 -6823.3428 -1856.3036]", +"500":"[11129.4111 -6308.5596 -1801.066]", +"501":"[11129.4102 -5799.4956 -1742.0016]", +"502":"[11128.9248 -5290.7515 -1681.1843]", +"503":"[11129.0908 -4781.7881 -1620.0962]", +"504":"[11129.0723 -4273.2861 -1560.2251]", +"505":"[11128.9219 -3762.8298 -1503.2466]", +"506":"[11128.6748 -3252.4063 -1453.8207]", +"507":"[11129.165 -2738.7056 -1423.6682]", +"508":"[11128.457 -2226.7483 -1412.3693]", +"509":"[11129.2266 -1714.6685 -1412.4056]", +"510":"[11129.5645 -1199.5782 -1412.3368]", +"511":"[11129.3037 -686.9538 -1412.4741]", +"512":"[11128.2002 -168.7617 -1412.3943]", +"513":"[11129.3027 346.0714 -1412.4546]", +"514":"[11128.6016 868.0846 -1412.4475]", +"515":"[11129.4521 1390.1509 -1412.5146]", +"516":"[11128.666 1903.4254 -1412.4041]", +"517":"[11128.957 2416.3083 -1412.3912]", +"518":"[11129.3584 2928.8179 -1412.3389]", +"519":"[11124.998 3441.7617 -1412.4061]", +"520":"[11091.8252 3956.916 -1412.584]", +"521":"[11006.2354 4466.0435 -1412.5493]", +"522":"[10851.9941 4961.7739 -1412.9135]", +"523":"[10620.1504 5409.6396 -1413.2451]", +"524":"[10400.2148 5696.7598 -1413.328]", +"525":"[10078.3428 5992.0229 -1413.3483]", +"526":"[9753.4922 6199.1284 -1413.1593]", +"527":"[9279.4492 6397.749 -1412.944]", +"528":"[8776.2959 6519.9614 -1412.5009]", +"529":"[8265.0078 6579.2856 -1412.3647]", +"530":"[7752.2173 6597.2119 -1412.2733]", +"531":"[7232.7939 6596.8906 -1412.3621]", +"532":"[6714.3208 6597.4414 -1412.4287]", +"533":"[6195.3833 6597.937 -1412.412]", +"534":"[5679.5098 6597.9429 -1412.3436]", +"535":"[5159.7637 6597.3525 -1412.9479]", +"536":"[4642.3867 6596.7695 -1413.1121]", +"537":"[4126.3711 6597.9639 -1413.3942]", +"538":"[3611.1348 6597.7544 -1413.3633]", +"539":"[3096.8408 6598.1396 -1413.344]", +"540":"[2582.9556 6598.563 -1413.2922]", +"541":"[2065.53 6597.5562 -1412.7604]", +"542":"[1548.3933 6597.3633 -1412.3634]", +"543":"[1031.814 6597.8745 -1412.396]", +"544":"[516.7846 6597.7944 -1412.1844]", +"545":"[3.655 6597.1147 -1412.4401]", +"546":"[-516.0829 6597.8052 -1412.3615]", +"547":"[-1033.2593 6597.9575 -1412.4059]", +"548":"[-1547.4967 6598.0005 -1412.2665]", +"549":"[-2062.7173 6597.8691 -1412.4342]", +"550":"[-2582.3108 6597.8447 -1412.421]", +"551":"[-3099.2649 6598.0703 -1412.3798]", +"552":"[-3613.5605 6597.8672 -1412.4146]", +"553":"[-4130.3638 6597.9946 -1412.4027]", +"554":"[-4652.6719 6597.8569 -1412.3389]", +"555":"[-5168.5254 6594.3828 -1412.364]", +"556":"[-5681.8999 6578.9209 -1412.4155]", +"557":"[-6199.749 6544.8906 -1412.3782]", +"558":"[-6718.1929 6490.3164 -1412.3679]", +"559":"[-7232.7964 6412.5889 -1412.3722]", +"560":"[-7734.9971 6311.6133 -1412.3214]", +"561":"[-8231.084 6183.6201 -1412.3479]", +"562":"[-8730.5605 6022.5293 -1412.3756]", +"563":"[-9217.3252 5828.8779 -1412.4417]", +"564":"[-9687.9805 5600.854 -1412.2676]", +"565":"[-10138.2471 5336.8667 -1412.4614]", +"566":"[-10564.3271 5037.1948 -1412.4673]", +"567":"[-10961.2344 4701.627 -1412.6041]", +"568":"[-11326.6396 4333.5 -1412.4403]", +"569":"[-11656.8467 3934.8943 -1412.5549]", +"570":"[-11951.4541 3510.4829 -1412.3011]", +"571":"[-12209.1396 3063.771 -1412.4637]", +"572":"[-12431.5908 2599.3115 -1412.4324]", +"573":"[-12620.0557 2120.8054 -1412.3196]", +"574":"[-12777.0957 1631.7499 -1412.3186]", +"575":"[-12904.5547 1134.7961 -1412.3856]", +"576":"[-13004.8916 632.1949 -1412.5416]", +"577":"[-13082.9453 112.57 -1412.3599]", +"578":"[-13137.2324 -409.5296 -1412.5078]", +"579":"[-13171.2314 -932.8404 -1412.2269]", +"580":"[-13185.8027 -1456.2219 -1411.8882]", +"581":"[-13189.1465 -1978.7211 -1411.8854]", +"582":"[-13188.9414 -2499.4807 -1412.3096]", +"583":"[-13188.915 -3019.9707 -1412.4253]", +"584":"[-13188.8262 -3539.8843 -1412.4569]", +"585":"[-13181.9395 -4058.9514 -1412.3811]", +"586":"[-13160.8545 -4577.1099 -1412.4379]", +"587":"[-13119.6484 -5093.5635 -1412.4728]", +"588":"[-13057.6582 -5607.4409 -1412.262]", +"589":"[-12972.5527 -6117.3989 -1412.1968]", +"590":"[-12861.4463 -6621.687 -1412.5828]", +"591":"[-12723.0508 -7118.4824 -1412.3352]", +"592":"[-12554.4404 -7605.0386 -1412.597]", +"593":"[-12353.873 -8078.4146 -1412.3657]", +"594":"[-12119.6992 -8535.0566 -1412.4747]", +"595":"[-11850.5059 -8970.6758 -1412.4557]", +"596":"[-11538.7305 -9391.8691 -1412.3947]", +"597":"[-11191.6475 -9782.8867 -1412.5396]", +"598":"[-10811.8857 -10140.6504 -1412.4198]", +"599":"[-10402.7627 -10462.876 -1412.512]", +"600":"[-9968.2012 -10748.0625 -1412.5315]", +"601":"[-9512.8467 -10996.8818 -1412.4237]", +"602":"[-9040.3301 -11209.5391 -1412.4805]", +"603":"[-8555.0322 -11389.041 -1412.3604]", +"604":"[-8059.7568 -11536.8008 -1412.3959]", +"605":"[-7557.499 -11655.7979 -1412.4662]", +"606":"[-7050.2832 -11748.6992 -1412.2112]", +"607":"[-6539.7139 -11817.248 -1412.3372]", +"608":"[-6027.1802 -11864.4189 -1412.2773]", +"609":"[-5513.6646 -11891.9395 -1412.374]", +"610":"[-5000.1475 -11902.4746 -1412.373]", +"611":"[-4487.1309 -11904.2266 -1412.2787]", +"612":"[-3974.6226 -11903.5889 -1412.3259]", +"613":"[-3462.4529 -11903.874 -1412.4626]", +"614":"[-2937.8159 -11903.8271 -1412.3849]", +"615":"[-2413.5188 -11903.9531 -1412.5182]", +"616":"[-1889.5728 -11903.7861 -1412.3644]", +"617":"[-1365.9852 -11903.9775 -1412.4177]", +"618":"[-842.7073 -11903.9316 -1412.3491]", +"619":"[-319.6731 -11904.1475 -1412.4277]", +"620":"[198.608 -11903.7871 -1398.2542]", +"621":"[716.9218 -11904.3291 -1364.2834]", +"622":"[1237.4399 -11903.7598 -1311.6779]", +"623":"[1751.4185 -11904.0791 -1253.187]", +"624":"[2266.0518 -11904.2256 -1192.4102]", +"625":"[2777.7942 -11903.6748 -1130.1812]", +"626":"[3291.9761 -11904.1377 -1067.1185]", +"627":"[3804.147 -11904.3271 -1004.2836]", +"628":"[4312.8931 -11903.2227 -941.8154]", +"629":"[4828.6455 -11903.7559 -879.2634]", +"630":"[5338.6753 -11903.5498 -818.226]", +"631":"[5847.9302 -11903.5615 -759.9655]", +"632":"[6364.4873 -11903.6816 -706.8085]", +"633":"[6882.5098 -11903.8398 -668.5193]", +"634":"[7401.4829 -11903.291 -652.3037]", +"635":"[7922.21 -11904.2373 -650.4495]", +"636":"[8442.1465 -11903.9385 -650.4168]", +"637":"[8961.6221 -11903.5547 -650.4288]", +"638":"[9480.6426 -11904.04 -650.4168]", +"639":"[9999.2109 -11904.1836 -650.3728]", +"640":"[10517.2803 -11903.1611 -650.4573]", +"641":"[11034.8887 -11904.5996 -650.7625]", +"642":"[11550.876 -11885.5869 -650.9986]", +"643":"[12061.5313 -11828.9941 -651.3138]", +"644":"[12566.7236 -11704.4395 -651.1456]", +"645":"[13038.9404 -11497.4316 -651.3842]", +"646":"[13357.707 -11284.3037 -651.499]", +"647":"[13658.627 -10995.5264 -651.3436]", +"648":"[13871.4307 -10704.3818 -651.4119]", +"649":"[14096.4277 -10245.0205 -651.2816]", +"650":"[14234.8291 -9763.3857 -651.3903]", +"651":"[14308.9629 -9250.7871 -651.2233]", +"652":"[14332.8877 -8736.9209 -650.7137]", +"653":"[14336.3506 -8217.3975 -650.5273]", +"654":"[14336.8262 -7704.5586 -642.6353]", +"655":"[14335.7188 -7192.2378 -618.2231]", +"656":"[14335.7402 -6677.5498 -577.7819]", +"657":"[14335.4355 -6160.811 -541.693]", +"658":"[14335.3896 -5642.6934 -525.3793]", +"659":"[14335.1641 -5128.3701 -522.378]", +"660":"[14334.833 -4614.4961 -522.3364]", +"661":"[14335.0449 -4097.7183 -522.3168]", +"662":"[14335.1602 -3581.9583 -522.3793]", +"663":"[14335.8262 -3066.356 -522.2404]", +"664":"[14336.5586 -2551.1045 -522.354]", +"665":"[14336.4521 -2036.3613 -522.2696]", +"666":"[14335.5684 -1523.7307 -522.3458]", +"667":"[14335.2988 -1010.9214 -522.4368]", +"668":"[14335.6719 -495.9235 -522.3362]", +"669":"[14336.2783 19.0449 -522.169]", +"670":"[14336.0283 534.397 -522.1894]", +"671":"[14335.9873 1056.3484 -522.2968]", +"672":"[14335.8994 1572.4121 -522.4285]", +"673":"[14335.7754 2093.7153 -522.3533]", +"674":"[14336.1055 2608.6731 -522.4359]", +"675":"[14335.8408 3121.686 -522.4294]", +"676":"[14335.9443 3640.3118 -522.4841]", +"677":"[14336.0625 4160.8228 -522.4709]", +"678":"[14335.9814 4675.416 -522.4085]", +"679":"[14336.0938 5191.8726 -522.3904]", +"680":"[14335.9063 5707.9795 -522.3907]", +"681":"[14336.2432 6223.7183 -522.372]", +"682":"[14335.5889 6739.0859 -522.3104]", +"683":"[14335.7998 7254.1138 -522.4265]", +"684":"[14331.7617 7768.6831 -522.4492]", +"685":"[14314.8096 8282.4824 -522.1891]", +"686":"[14279.7119 8794.8047 -522.2917]", +"687":"[14223.8604 9304.8096 -522.3776]", +"688":"[14146.3936 9811.3838 -522.4516]", +"689":"[14040.9834 10326.0049 -522.4932]", +"690":"[13907.9473 10833.0088 -522.263]", +"691":"[13744.2402 11330.0605 -522.4221]", +"692":"[13548.2871 11814.3389 -522.2914]", +"693":"[13317.748 12281.9004 -522.3512]", +"694":"[13051.8096 12728.709 -522.6135]", +"695":"[12750.126 13150.8906 -522.3945]", +"696":"[12413.5225 13544.4316 -522.4451]", +"697":"[12044.2393 13906.0303 -522.4685]", +"698":"[11644.9658 14232.709 -522.5359]", +"699":"[11220.2314 14523.8301 -522.4489]", +"700":"[10773.6963 14778.4375 -522.439]", +"701":"[10309.9824 14998.4717 -522.409]", +"702":"[9832.3154 15184.4395 -522.4396]", +"703":"[9331.6602 15342.5967 -522.3469]", +"704":"[8823.0332 15470.6475 -522.2053]", +"705":"[8308.7109 15570.4639 -522.2899]", +"706":"[7790.6631 15645.1611 -522.3793]", +"707":"[7270.3643 15697.0898 -522.325]", +"708":"[6748.877 15728.4707 -522.2498]", +"709":"[6227.0259 15741.5449 -522.4387]", +"710":"[5705.4058 15744.2881 -522.3605]", +"711":"[5184.1592 15743.7168 -522.458]", +"712":"[4663.2568 15744.2363 -522.4007]", +"713":"[4142.7153 15743.5449 -522.42]", +"714":"[3622.5254 15744.0459 -522.3555]", +"715":"[3102.6907 15743.7686 -522.3855]", +"716":"[2583.2302 15744.0352 -522.4089]", +"717":"[2064.1067 15744.0488 -522.3987]", +"718":"[1545.3428 15743.7227 -522.3743]", +"719":"[1026.9242 15744.3896 -522.493]", +"720":"[508.8794 15743.8232 -522.3531]", +"721":"[-8.8269 15744.501 -522.4455]", +"722":"[-526.1652 15743.8682 -522.3021]", +"723":"[-1043.1982 15743.9648 -522.4233]", +"724":"[-1559.8422 15744.1201 -522.3379]", +"725":"[-2076.1733 15743.8926 -522.4812]", +"726":"[-2592.1299 15744.127 -522.2883]", +"727":"[-3107.7493 15743.8369 -522.4439]", +"728":"[-3622.9888 15744.0518 -522.4668]", +"729":"[-4137.8979 15743.8174 -522.4921]", +"730":"[-4652.4438 15744.252 -522.4164]", +"731":"[-5166.6675 15743.5801 -522.4736]", +"732":"[-5680.5503 15744.1475 -522.2674]", +"733":"[-6194.0786 15741.9629 -522.4417]", +"734":"[-6707.0376 15729.9629 -522.214]", +"735":"[-7218.8008 15701.2422 -522.424]", +"736":"[-7728.6177 15652.4834 -522.2901]", +"737":"[-8247.4707 15580.2646 -522.2024]", +"738":"[-8761.6855 15484.0039 -522.3461]", +"739":"[-9268.8076 15359.7666 -522.4977]", +"740":"[-9767.1709 15207.1689 -522.3936]", +"741":"[-10253.5127 15021.9648 -522.5751]", +"742":"[-10725.0596 14803.8125 -522.4431]", +"743":"[-11177.3193 14550.0781 -522.5548]", +"744":"[-11606.6191 14261.2793 -522.3912]", +"745":"[-12008.4551 13937.2002 -522.4407]", +"746":"[-12379.542 13579.8779 -522.428]", +"747":"[-12717.0303 13192.0928 -522.4346]", +"748":"[-13019.123 12777.2891 -522.4489]", +"749":"[-13285.5146 12339.8848 -522.3436]", +"750":"[-13521.6582 11872.2539 -522.5815]", +"751":"[-13722.0273 11389.0352 -522.3914]", +"752":"[-13889.1406 10894.0615 -522.5781]", +"753":"[-14025.5225 10390.3809 -522.2632]", +"754":"[-14133.2656 9880.3525 -522.3778]", +"755":"[-14215.5313 9366.1201 -522.3475]", +"756":"[-14274.2656 8849.1357 -522.409]", +"757":"[-14312.3818 8330.7227 -522.3176]", +"758":"[-14330.6973 7811.6802 -522.1587]", +"759":"[-14335.9014 7292.7153 -522.4407]", +"760":"[-14335.9092 6774.0703 -522.3434]", +"761":"[-14335.499 6255.7593 -522.3396]", +"762":"[-14336.1152 5737.751 -522.4674]", +"763":"[-14335.959 5220.0801 -522.2488]", +"764":"[-14336.0693 4702.7222 -522.5021]", +"765":"[-14336.0264 4185.6826 -522.2674]", +"766":"[-14335.9248 3668.9722 -522.4518]", +"767":"[-14335.8477 3152.5823 -522.37]", +"768":"[-14335.7725 2636.5215 -522.3735]", +"769":"[-14336.1543 2120.8066 -522.4629]", +"770":"[-14335.7559 1605.4316 -522.4246]", +"771":"[-14335.8818 1090.3698 -522.4048]", +"772":"[-14335.7637 575.6562 -522.4013]", +"773":"[-14336.1953 61.2808 -522.3541]", +"774":"[-14335.542 -452.7545 -522.3555]", +"775":"[-14336.4736 -966.2915 -522.4147]", +"776":"[-14335.3193 -1479.1895 -522.0887]", +"777":"[-14336.1895 -2002.6334 -522.2487]", +"778":"[-14335.2861 -2525.4316 -522.3174]", +"779":"[-14335.4863 -3047.8792 -522.1254]", +"780":"[-14335.5391 -3569.9768 -522.2736]", +"781":"[-14335.7295 -4091.7278 -522.3185]", +"782":"[-14335.3887 -4613.1431 -522.3057]", +"783":"[-14335.4229 -5134.2251 -522.1469]", +"784":"[-14335.582 -5654.9531 -522.318]", +"785":"[-14335.9863 -6175.3115 -522.2926]", +"786":"[-14335.7373 -6695.1582 -522.2067]", +"787":"[-14336.0195 -7214.2642 -522.3649]", +"788":"[-14336.0479 -7733.0313 -522.3588]", +"789":"[-14335.9053 -8251.4404 -522.4139]", +"790":"[-14335.9004 -8769.5244 -522.3748]", +"791":"[-14336.0225 -9287.2676 -522.4554]", +"792":"[-14336.165 -9804.6543 -522.2589]", +"793":"[-14335.6543 -10327.3398 -522.4599]", +"794":"[-14336.2422 -10840.3057 -522.2921]", +"795":"[-14332.9229 -11356.3721 -522.1661]", +"796":"[-14303.2246 -11871.5186 -522.1568]", +"797":"[-14221.1807 -12383.0264 -522.4001]", +"798":"[-14068.3623 -12872.6621 -522.4103]", +"799":"[-13844.9424 -13303.9355 -522.4688]", +"800":"[-13627.2646 -13588.4277 -522.5158]", +"801":"[-13312.2578 -13877.1758 -522.5369]", +"802":"[-12994.3359 -14079.5264 -522.4813]", +"803":"[-12516.0547 -14278.0801 -522.4819]", +"804":"[-12015.3838 -14395.3506 -522.2971]", +"805":"[-11505.8252 -14448.4883 -522.2196]", +"806":"[-10993.7314 -14463.6113 -522.4375]", +"807":"[-10477.6494 -14463.5684 -522.4277]", +"808":"[-9962.8184 -14463.3174 -522.3876]", +"809":"[-9448.9688 -14464.1309 -522.4146]", +"810":"[-8936.3389 -14464.6445 -522.5005]", +"811":"[-8418.9482 -14464.1973 -522.3389]", +"812":"[-7905.3652 -14463.5195 -522.4529]", +"813":"[-7389.0796 -14463.9795 -522.4506]", +"814":"[-6870.8794 -14464.4785 -522.4753]", +"815":"[-6351.478 -14463.8535 -522.4641]", +"816":"[-5831.5405 -14463.7959 -522.419]", +"817":"[-5312.2817 -14463.9551 -520.2931]", +"818":"[-4797.9585 -14464.1455 -501.9018]", +"819":"[-4281.4302 -14464.584 -461.6682]", +"820":"[-3767.8706 -14464.7744 -407.6031]", +"821":"[-3252.7576 -14464.5811 -348.2798]", +"822":"[-2741.6333 -14464.373 -287.415]", +"823":"[-2227.1594 -14463.752 -225.4684]", +"824":"[-1715.505 -14464.2529 -165.0796]", +"825":"[-1205.0618 -14463.834 -107.5789]", +"826":"[-693.8828 -14463.5195 -56.7953]", +"827":"[-179.0532 -14463.5449 -23.5055]", +"828":"[335.6226 -14464.2666 -10.6154]", +"829":"[850.5767 -14464.1094 -10.3685]", +"830":"[1364.6061 -14463.5439 -10.3187]", +"831":"[1877.7097 -14463.9697 -10.4065]", +"832":"[2389.9666 -14463.6143 -10.4277]", +"833":"[2908.9688 -14464.3145 -10.4131]", +"834":"[3427.0332 -14463.793 -10.2628]", +"835":"[3946.3105 -14463.7051 -10.4035]", +"836":"[4463.5547 -14463.9102 -10.4861]", +"837":"[4979.7974 -14464.0225 -10.4762]", +"838":"[5496.2285 -14464.3613 -10.4176]", +"839":"[6011.7612 -14464.0889 -6.971]", +"840":"[6526.9419 -14464.29 13.5032]", +"841":"[7040.8184 -14464.2764 55.8566]", +"842":"[7550.9121 -14464.4043 110.4878]", +"843":"[8062.0898 -14464.2773 169.6796]", +"844":"[8577.4307 -14463.8682 231.388]", +"845":"[9088.7646 -14464.0469 292.5822]", +"846":"[9600.0723 -14463.9561 353.0448]", +"847":"[10115.377 -14463.3809 410.4414]", +"848":"[10630.7119 -14464.0732 460.6393]", +"849":"[11148.3623 -14463.2598 490.8631]", +"850":"[11667.5127 -14437.1006 501.9451]", +"851":"[12175.2949 -14366.7988 501.7432]", +"852":"[12674.2373 -14226.2041 501.7539]", +"853":"[13120.6572 -14010.1211 501.8906]", +"854":"[13410.416 -13800.4912 501.5842]", +"855":"[13718.9971 -13482.1523 501.4567]", +"856":"[13911.5879 -13197.0313 501.6842]", +"857":"[14124.8262 -12725.1709 501.6413]", +"858":"[14254.2852 -12225.251 501.6919]", +"859":"[14316.4795 -11713.6436 501.7214]", +"860":"[14334.7275 -11198.9287 501.7492]", +"861":"[14334.9482 -10684.5352 501.5899]", +"862":"[14335.6504 -10170.751 501.5699]", +"863":"[14335.9238 -9657.5859 501.5799]", +"864":"[14335.1094 -9145.0303 501.625]", +"865":"[14335.2432 -8624.418 501.6564]", +"866":"[14335.5215 -8104.4419 501.6102]", +"867":"[14335.9238 -7585.0625 501.5557]", +"868":"[14335.5566 -7066.2661 501.508]", +"869":"[14335.4941 -6548.0879 501.5538]", +"870":"[14335.623 -6030.502 501.5184]", +"871":"[14335.4287 -5513.5 501.6422]", +"872":"[14319.3145 -4998.0908 501.5543]", +"873":"[14267.0869 -4488.0352 501.6498]", +"874":"[14148.4121 -3983.6084 501.9199]", +"875":"[13949.4609 -3510.261 501.6429]", +"876":"[13741.4561 -3187.8049 501.7835]", +"877":"[13448.792 -2873.0408 501.5871]", +"878":"[13166.7305 -2660.2258 501.5057]", +"879":"[12722.9385 -2434.5308 501.5837]", +"880":"[12240.6973 -2287.6606 501.7711]", +"881":"[11728.0293 -2207.3345 501.7464]", +"882":"[11210.5908 -2179.8298 501.6476]", +"883":"[10693.0918 -2176.1577 501.5195]", +"884":"[10176.3877 -2175.5088 501.5563]", +"885":"[9660.4561 -2176.9731 501.5792]", +"886":"[9145.2949 -2175.728 501.6121]", +"887":"[8630.8877 -2176.5908 501.5623]", +"888":"[8117.2549 -2176.1812 501.5741]", +"889":"[7604.3628 -2176.6453 501.6123]", +"890":"[7092.2031 -2176.2734 501.6314]", +"891":"[6572.8252 -2176.855 501.5833]", +"892":"[6054.2622 -2176.2004 501.5909]", +"893":"[5536.4688 -2176.6409 501.6179]", +"894":"[5019.4639 -2175.5896 501.6087]", +"895":"[4503.2378 -2176.4595 501.58]", +"896":"[3987.7786 -2176.177 501.5981]", +"897":"[3473.0784 -2176.8496 501.608]", +"898":"[2959.1445 -2175.9421 501.6748]", +"899":"[2445.9888 -2176.1484 501.5759]", +"900":"[1926.2919 -2176.5579 501.5883]", +"901":"[1407.7799 -2176.5493 501.5381]", +"902":"[890.2328 -2176.2852 501.6056]", +"903":"[373.5058 -2176.7063 501.5736]", +"904":"[-142.3794 -2175.8401 501.5785]", +"905":"[-657.1763 -2176.0132 501.618]", +"906":"[-1171.4989 -2165.3125 499.0975]", +"907":"[-1683.7405 -2119.1841 494.8876]", +"908":"[-2185.1157 -2006.0638 490.4828]", +"909":"[-2641.9224 -1814.4175 487.4207]", +"910":"[-2906.6208 -1643.906 486.2437]", +"911":"[-3202.1863 -1369.7234 486.0244]", +"912":"[-3379.8027 -1135.0748 486.6808]", +"913":"[-3590.7502 -723.137 489.2638]", +"914":"[-3718.5767 -307.5232 492.525]", +"915":"[-3799.4165 201.266 497.33]", +"916":"[-3825.957 715.8541 500.3693]", +"917":"[-3829.0864 1233.8939 501.5006]", +"918":"[-3829.5054 1749.5038 501.5919]", +"919":"[-3828.9163 2263.5139 501.5421]", +"920":"[-3829.6187 2776.1465 501.5781]", +"921":"[-3829.5081 3294.5598 501.5866]", +"922":"[-3829.4902 3811.6846 501.589]", +"923":"[-3829.6304 4327.5439 501.5849]", +"924":"[-3829.1365 4842.1074 501.5888]", +"925":"[-3829.2017 5355.4248 501.6139]", +"926":"[-3829.5212 5873.8872 501.6387]", +"927":"[-3829.292 6391.001 501.5695]", +"928":"[-3829.8049 6906.9048 501.4789]", +"929":"[-3829.783 7421.4951 501.1471]", +"930":"[-3829.4841 7934.1611 501.0811]", +"931":"[-3829.1992 8451.7295 501.1217]", +"932":"[-3829.4402 8966.7793 501.211]", +"933":"[-3829.5049 9480.3945 501.0781]", +"934":"[-3829.1123 9992.5859 501.0611]", +"935":"[-3828.8464 10510.0264 501.0922]", +"936":"[-3828.4946 11026.0088 501.1139]", +"937":"[-3828.6035 11540.79 501.0818]", +"938":"[-3829.0212 12052.832 501.0807]", +"939":"[-3829.1489 12565.1709 501.0568]", +"940":"[-3828.5786 13077.2588 501.1002]", +"941":"[-3828.4375 13589.6328 501.086]", +"942":"[-3829.2302 13673.3643 501.1106]"},"2":{"1":"[3114.2395 6768.3882 -1413.3104]", +"2":"[3616.9158 6866.5576 -1413.299]", +"3":"[4126.0698 6930.8486 -1413.2791]", +"4":"[4639.3857 6960.377 -1412.6588]", +"5":"[5151.5234 6968.8594 -1412.7963]", +"6":"[5668.5952 6969.5654 -1412.4727]", +"7":"[6180.8081 6969.8511 -1412.3397]", +"8":"[6696.3428 6970.1851 -1412.4187]", +"9":"[7209.9688 6987.3438 -1412.4703]", +"10":"[7721.8438 7042.8784 -1412.5016]", +"11":"[8221.5303 7159.0356 -1412.8998]", +"12":"[8697.9326 7351.3252 -1413.1189]", +"13":"[9053.6123 7573.8501 -1413.2876]", +"14":"[9350.9912 7842.231 -1413.2686]", +"15":"[9607.6494 8172.4922 -1413.1182]", +"16":"[9807.7363 8552.1426 -1412.9707]", +"17":"[9970.6055 9041.7197 -1412.7375]", +"18":"[10062.7988 9550.4775 -1412.3448]", +"19":"[10089.3691 10066.4229 -1412.4025]", +"20":"[10057.5986 10581.5928 -1412.446]", +"21":"[9960.0928 11086.8145 -1412.6329]", +"22":"[9788.2471 11576.416 -1413.0006]", +"23":"[9563.8672 11975.4854 -1413.3647]", +"24":"[9307.7705 12286.8682 -1413.3474]", +"25":"[9000.4131 12549.2695 -1413.2363]", +"26":"[8638.5938 12762.043 -1413.1143]", +"27":"[8153.7192 12945.3057 -1412.7286]", +"28":"[7650.3081 13052.1338 -1412.4407]", +"29":"[7133.5303 13100.5195 -1412.4298]", +"30":"[6616.7979 13114.5283 -1412.2882]", +"31":"[6101.7271 13113.5283 -1412.3914]", +"32":"[5583.6592 13112.6279 -1412.2698]", +"33":"[5069.9136 13112.375 -1412.2679]", +"34":"[4557.5547 13112.7822 -1412.3885]", +"35":"[4117.3145 13113.1143 -1412.3131]"}} \ No newline at end of file diff --git a/lua/metrostroi_data/track_gm_mus_orange_line_long_f.lua b/lua/metrostroi_data/track_gm_mus_orange_line_long_f.lua new file mode 100644 index 0000000..3721410 --- /dev/null +++ b/lua/metrostroi_data/track_gm_mus_orange_line_long_f.lua @@ -0,0 +1,2 @@ +{"1":{"1":"[13519.7041 8958.2109 1010.6108]","2":"[13489.5928 8861.2695 1010.6136]","3":"[13308.9775 8378.4873 1010.6621]","4":"[13115.1406 7900.6929 1010.6783]","5":"[12941.6631 7417.5024 1010.6921]","6":"[12815.3154 6916.0967 1010.6605]","7":"[12746.4346 6405.4492 1010.5943]","8":"[12717.0625 5891.3296 1010.6243]","9":"[12685.0508 5377.3066 1010.4487]","10":"[12626.7969 4865.873 1011.0557]","11":"[12572.8818 4350.0586 1011.5493]","12":"[12547.249 3838.3726 1012.0383]","13":"[12541.0322 3321.5164 1012.5375]","14":"[12540.8076 2808.4805 1012.6805]","15":"[12540.6465 2289.262 1012.6698]","16":"[12541.542 1776.4479 1012.5953]","17":"[12541.207 1259.517 1012.4852]","18":"[12540.9404 740.1895 1012.541]","19":"[12540.8838 226.8728 1012.6128]","20":"[12541.4043 -290.8668 1012.6035]","21":"[12541.377 -805.7431 1012.7653]","22":"[12541.8613 -1325.6497 1012.4765]","23":"[12540.8125 -1847.9272 1012.6453]","24":"[12541.8398 -2370.3313 1012.576]","25":"[12540.6992 -2890.9624 1012.5013]","26":"[12541.958 -3408.0063 1012.5463]","27":"[12540.7119 -3931.3086 1012.6748]","28":"[12541.7305 -4457.1064 1012.6116]","29":"[12541.3613 -4982.4976 1012.5427]","30":"[12541.4346 -5507.4458 1012.7008]","31":"[12541.6143 -6032.0005 1012.6334]","32":"[12541.2559 -6556.0977 1012.5992]","33":"[12540.3213 -7079.7744 1012.4429]","34":"[12528.2754 -7602.686 1012.1017]","35":"[12499.0537 -8124.3223 1012.3321]","36":"[12449.4697 -8643.8057 1012.0891]","37":"[12377.2148 -9159.4834 1012.5337]","38":"[12281.2207 -9670.0166 1012.1508]","39":"[12158.0645 -10173.6924 1012.1953]","40":"[12006.5488 -10668.6309 1012.1747]","41":"[11823.2168 -11151.6504 1011.9979]","42":"[11607.0732 -11619.499 1012.2983]","43":"[11357.2441 -12068.4102 1012.058]","44":"[11072.1152 -12494.0713 1012.099]","45":"[10743.875 -12904.29 1012.1636]","46":"[10380.7314 -13282.4014 1012.0758]","47":"[9986.208 -13625.9531 1012.1187]","48":"[9563.5889 -13932.6318 1012.3369]","49":"[9117.8525 -14202.4434 1012.2416]","50":"[8652.6494 -14435.2588 1012.0674]","51":"[8172.6196 -14633.3916 1012.1249]","52":"[7681.1948 -14798.1719 1012.3981]","53":"[7181.4077 -14932.8262 1012.2574]","54":"[6675.6875 -15039.3848 1012.1838]","55":"[6166.1099 -15121.082 1012.262]","56":"[5653.8452 -15179.6221 1012.4853]","57":"[5140.3521 -15217.2266 1012.2562]","58":"[4626.4312 -15236.0967 1012.628]","59":"[4113.564 -15240.7803 1012.6922]","60":"[3588.3281 -15241.0742 1012.7005]","61":"[3063.7441 -15240.9258 1012.6732]","62":"[2539.5872 -15241.0977 1012.2015]","63":"[2027.1445 -15241.1348 995.0332]","64":"[1507.7341 -15240.9736 957.5716]","65":"[988.6481 -15240.7588 903.9622]","66":"[467.0417 -15241.1045 844.2825]","67":"[-41.4122 -15240.9082 784.0493]","68":"[-550.2209 -15241.5156 722.0129]","69":"[-1058.4111 -15241.2588 659.5743]","70":"[-1581.7961 -15241.3594 595.1873]","71":"[-2102.5898 -15242.1436 531.5289]","72":"[-2619.0588 -15241.1689 468.6218]","73":"[-3128.5762 -15241.5098 408.2298]","74":"[-3652.6433 -15241.8359 348.9482]","75":"[-4168.0093 -15241.2773 297.1356]","76":"[-4688.7861 -15241.5156 263.7786]","77":"[-5209.1577 -15241.4111 250.818]","78":"[-5723.481 -15241.3682 250.5288]","79":"[-6241.2104 -15234.2139 250.705]","80":"[-6756.894 -15212.3672 250.1335]","81":"[-7277.6362 -15169.8887 250.0536]","82":"[-7793.6016 -15106.627 250.211]","83":"[-8304.1152 -15019.6328 250.1694]","84":"[-8805.0215 -14908.8262 250.1632]","85":"[-9298.166 -14769.9121 250.0612]","86":"[-9791.9082 -14597.8447 250.1163]","87":"[-10271.4639 -14392.0508 250.3199]","88":"[-10733.3408 -14152.0381 250.0987]","89":"[-11173.2471 -13876.0127 249.9881]","90":"[-11587.7305 -13565.1084 250.0863]","91":"[-11972.0996 -13219.4355 250.0518]","92":"[-12323.6465 -12842.0693 249.9604]","93":"[-12640.3984 -12436.377 250.1752]","94":"[-12920.9854 -12006.083 250.1939]","95":"[-13166.4023 -11554.6035 250.1735]","96":"[-13377.8076 -11084.2578 250.2198]","97":"[-13556.5439 -10598.5518 250.3001]","98":"[-13704.7637 -10100.3857 249.9391]","99":"[-13824.6172 -9592.25 250.2439]","100":"[-13915.7295 -9087.6982 250.2401]","101":"[-13983.8633 -8579.6289 250.1762]","102":"[-14030.1416 -8069.6953 250.3437]","103":"[-14057.7891 -7547.4243 250.2878]","104":"[-14067.541 -7025.8115 250.3219]","105":"[-14069.5488 -6506.0635 250.4274]","106":"[-14068.5684 -5987.6396 250.6819]","107":"[-14069.3672 -5469.8115 250.5971]","108":"[-14069.1689 -4952.3223 250.6645]","109":"[-14068.7393 -4435.1812 250.6255]","110":"[-14069.5303 -3918.4009 250.5575]","111":"[-14068.7793 -3401.9573 250.4946]","112":"[-14069.416 -2885.863 250.5201]","113":"[-14068.7334 -2370.1038 250.6743]","114":"[-14069.458 -1854.7114 250.5457]","115":"[-14068.8037 -1339.6626 250.6371]","116":"[-14065.2393 -826.3026 250.9904]","117":"[-14036.8174 -305.3338 250.8761]","118":"[-13968.7705 208.6006 251.2007]","119":"[-13852.4941 711.0356 250.9323]","120":"[-13676.4668 1192.8566 251.0521]","121":"[-13430.749 1651.0698 250.7931]","122":"[-13115.7656 2060.5974 250.8774]","123":"[-12736.3604 2406.9434 251.1378]","124":"[-12296.918 2688.6594 250.738]","125":"[-11820.2588 2898.0391 250.8197]","126":"[-11321.1719 3043.05 250.8958]","127":"[-10810.21 3133.0601 251.0127]","128":"[-10294.1855 3177.4585 250.9744]","129":"[-9773.542 3190.2219 236.3055]","130":"[-9262.209 3190.937 203.4707]","131":"[-8751.4355 3191.3064 152.0362]","132":"[-8237.4023 3190.6853 94.0201]","133":"[-7721.4067 3191.3042 33.1507]","134":"[-7207.502 3191.3792 -28.5855]","135":"[-6698.749 3191.5811 -89.3069]","136":"[-6183.7061 3191.3728 -148.4093]","137":"[-5664.7847 3191.5344 -202.8982]","138":"[-5146.2529 3191.144 -242.3391]","139":"[-4619.9751 3190.9585 -259.8633]","140":"[-4105.3545 3191.2336 -261.0396]","141":"[-3590.9517 3190.8955 -261.0295]","142":"[-3077.4121 3191.6575 -260.6863]","143":"[-2553.2095 3190.5112 -244.2752]","144":"[-2038.5962 3191.3298 -207.5986]","145":"[-1524.2058 3190.7417 -154.4061]","146":"[-1014.5494 3191.2327 -96.2161]","147":"[-499.0002 3191.2012 -35.0652]","148":"[18.1119 3191.0088 27.8322]","149":"[532.7639 3191.1638 90.8734]","150":"[1051.8645 3191.0339 154.5959]","151":"[1568.8352 3191.3037 218.1479]","152":"[2078.9358 3191.4126 279.9985]","153":"[2595.6487 3191.3721 341.4323]","154":"[3108.4644 3191.3608 399.4412]","155":"[3622.6299 3191.3538 451.3274]","156":"[4137.502 3191.7136 486.2715]","157":"[4653.2393 3191.5696 500.2916]","158":"[5171.0898 3205.0898 500.9331]","159":"[5689.0303 3246.0618 500.94]","160":"[6194.75 3335.0684 501.3255]","161":"[6694.3862 3475.9646 500.9875]","162":"[7174.8071 3684.9553 500.8839]","163":"[7615.5664 3963.7571 500.9892]","164":"[8000.4897 4312.2329 500.7807]","165":"[8317.1211 4720.9341 500.9459]","166":"[8562.7637 5174.187 501.0161]","167":"[8739.915 5657.3828 501.056]","168":"[8858.25 6157.5005 500.8757]","169":"[8926.8867 6666.2534 501.0868]","170":"[8955.7891 7178.4043 500.9653]","171":"[8961.4453 7691.1455 500.8301]","172":"[8959.7393 8203.5498 500.9828]","173":"[8941.9932 8727.1133 500.9173]","174":"[8890.084 9247.2793 500.9916]","175":"[8789.7041 9757.3506 500.9844]","176":"[8633.8955 10250.5967 500.9221]","177":"[8414.2637 10716.3301 500.869]","178":"[8125.5679 11139.5859 501.1699]","179":"[7762.2944 11513.9854 500.8319]","180":"[7340.9302 11818.2969 500.8631]","181":"[6877.019 12049.8428 500.8846]","182":"[6386.6104 12215.2588 500.9364]","183":"[5880.8975 12322.5459 501.0672]","184":"[5367.9399 12381.2939 501.041]","185":"[4852.397 12403.0117 500.766]","186":"[4336.7163 12406.6787 500.9497]","187":"[3821.3721 12405.4668 500.8029]","188":"[3306.3789 12406.1094 500.905]","189":"[2791.7256 12405.9443 500.7597]","190":"[2277.4287 12406.1104 500.8369]","191":"[1763.4557 12406.252 500.805]","192":"[1240.2058 12405.7139 500.9157]","193":"[722.4012 12406.4482 500.8591]","194":"[207.3647 12405.4766 500.8155]","195":"[-309.0729 12406.0342 500.7144]","196":"[-824.8139 12404.4727 500.8525]","197":"[-1338.962 12379.5166 500.8799]","198":"[-1849.1053 12307.3662 500.7966]","199":"[-2344.3999 12170.8193 500.4696]","200":"[-2810.6926 11953.1436 500.1019]","201":"[-3130.5471 11728.5127 500.1127]","202":"[-3419.3052 11438.6865 499.956]","203":"[-3650.7212 11106.123 500.1912]","204":"[-3852.4666 10670.1299 500.3101]","205":"[-3990.5173 10176.1504 500.7839]","206":"[-4064.2739 9665.7246 501.1979]","207":"[-4089.3657 9153.4375 501.136]","208":"[-4092.3677 8638.9785 501.2417]","209":"[-4092.1726 8121.3452 501.1299]","210":"[-4092.4241 7607.2524 501.3311]","211":"[-4092.5981 7089.8423 501.5157]","212":"[-4092.8337 6576.5854 501.4685]","213":"[-4092.301 6060.209 501.6345]","214":"[-4091.5212 5546.1475 501.548]","215":"[-4092.697 5033.9761 501.6759]","216":"[-4092.4019 4517.4248 501.5636]","217":"[-4092.5515 4002.7507 501.6337]","218":"[-4092.9709 3489.9717 501.57]","219":"[-4092.9204 2972.9805 501.7228]","220":"[-4092.408 2457.9976 501.5255]","221":"[-4092.8379 1945.0526 501.5731]","222":"[-4093.0161 1428.0737 501.4994]","223":"[-4092.8474 913.3145 501.6638]","224":"[-4077.4785 396.0356 501.6651]","225":"[-4024.8613 -114.5749 501.7957]","226":"[-3908.6621 -615.2733 501.4627]","227":"[-3713.2839 -1089.3422 501.3966]","228":"[-3507.3125 -1413.9058 501.3316]","229":"[-3222.6885 -1725.1218 501.5131]","230":"[-2926.1531 -1952.7782 501.5956]","231":"[-2515.0872 -2166.3433 501.496]","232":"[-2024.1331 -2321.7085 501.6985]","233":"[-1514.2231 -2405.0361 501.6642]","234":"[-999.0103 -2435.1646 501.7427]","235":"[-486.2469 -2439.0776 501.7362]","236":"[27.1488 -2440.5051 501.7692]","237":"[540.0073 -2440.6897 501.5897]","238":"[1058.3048 -2439.4932 501.6432]","239":"[1573.554 -2439.8394 501.6323]","240":"[2092.0527 -2439.7957 501.5378]","241":"[2605.1619 -2440.0159 501.5661]","242":"[3119.7214 -2439.5857 501.6063]","243":"[3635.0933 -2439.571 501.637]","244":"[4150.6387 -2440.0916 501.5813]","245":"[4665.7749 -2439.5425 501.5885]","246":"[5179.9619 -2439.7485 501.5434]","247":"[5692.6704 -2440.1511 501.5693]","248":"[6211.4565 -2439.7983 501.558]","249":"[6731.582 -2439.604 501.5677]","250":"[7251.104 -2440.3035 501.6573]","251":"[7770.0459 -2439.627 501.5911]","252":"[8288.4131 -2440.1792 501.5866]","253":"[8806.2041 -2440.0056 501.5869]","254":"[9323.4316 -2439.8586 501.5757]","255":"[9840.0615 -2439.8804 501.5873]","256":"[10355.6074 -2439.7402 501.7833]","257":"[10870.2002 -2438.8667 501.8095]","258":"[11384.6494 -2449.1948 499.3271]","259":"[11896.8477 -2492.3745 495.438]","260":"[12397.4922 -2600.1919 491.0166]","261":"[12869.3184 -2792.8333 487.6299]","262":"[13140.2012 -2963.8818 486.3735]","263":"[13430.5176 -3228.6423 486.2353]","264":"[13617.8223 -3472.2305 486.735]","265":"[13826.7979 -3874.2788 489.0049]","266":"[13958.8027 -4294.4648 492.3929]","267":"[14041.2783 -4803.2954 497.3607]","268":"[14068.498 -5319.9604 500.3365]","269":"[14072.4238 -5833.6938 501.5411]","270":"[14073.084 -6346.0923 501.547]","271":"[14071.9932 -6865.479 501.5554]","272":"[14072.083 -7384.001 501.5893]","273":"[14072.9063 -7901.7046 501.5284]","274":"[14072.1904 -8418.5664 501.5786]","275":"[14071.9111 -8934.5537 501.5471]","276":"[14072.6406 -9449.6631 501.5538]","277":"[14072.6621 -9963.8936 501.5881]","278":"[14072.9375 -10477.2656 501.5844]","279":"[14072.2041 -10989.7705 501.5902]","280":"[14063.1875 -11501.8291 499.317]","281":"[14020.2588 -12019.5771 495.5218]","282":"[13910.8623 -12526.5293 490.8891]","283":"[13718.7646 -12996.5781 487.5054]","284":"[13547.5166 -13267.4395 486.3413]","285":"[13282.915 -13557.8623 485.874]","286":"[13045.5947 -13741.04 486.7486]","287":"[12638.4082 -13953.7705 488.8061]","288":"[12219.3076 -14086.0791 492.3576]","289":"[11713.7461 -14168.4668 497.2368]","290":"[11200.1602 -14196.3682 491.6954]","291":"[10684.1484 -14199.7305 464.8056]","292":"[10170.6406 -14199.9873 416.3383]","293":"[9656.1611 -14200.208 359.2911]","294":"[9142.5234 -14200.4717 299.1188]","295":"[8629.8223 -14200.8135 237.4911]","296":"[8120.3169 -14200.6592 176.5001]","297":"[7608.9141 -14200.3477 116.97]","298":"[7099.6138 -14200.875 62.0806]","299":"[6581.1187 -14200.959 16.9987]","300":"[6061.835 -14200.0059 -5.9197]","301":"[5545.5869 -14199.9795 -10.495]","302":"[5030.3931 -14200.4414 -10.4575]","303":"[4515.7583 -14200.3838 -10.4342]","304":"[4001.6101 -14200.2188 -10.3165]","305":"[3487.9495 -14200.0996 -10.3945]","306":"[2974.8018 -14200.5303 -10.4498]","307":"[2462.1868 -14200.3975 -10.4277]","308":"[1950.0881 -14200.0068 -10.3229]","309":"[1429.5305 -14200.6768 -10.4083]","310":"[909.5067 -14200.0186 -10.343]","311":"[389.995 -14200.2764 -10.42]","312":"[-122.9451 -14200.3154 -21.6167]","313":"[-638.0699 -14200.1016 -51.6823]","314":"[-1148.656 -14200.4131 -101.3809]","315":"[-1660.0336 -14200.3545 -158.4596]","316":"[-2175.9507 -14200.1211 -219.402]","317":"[-2686.9819 -14200.5771 -280.8463]","318":"[-3202.5654 -14200.9727 -342.3912]","319":"[-3721.2849 -14200.5811 -402.4456]","320":"[-4240.6025 -14200.9512 -457.6774]","321":"[-4760.3535 -14200.8594 -499.8965]","322":"[-5274.9409 -14200.3887 -519.5205]","323":"[-5787.6802 -14200.0439 -522.4797]","324":"[-6304.3706 -14200.8535 -522.3938]","325":"[-6819.1172 -14200.458 -522.3522]","326":"[-7332.6626 -14200.4092 -522.3727]","327":"[-7844.9946 -14200.1553 -522.3685]","328":"[-8363.1641 -14200.3984 -522.4336]","329":"[-8880.0762 -14200.0752 -522.3876]","330":"[-9395.7441 -14200.3125 -522.4501]","331":"[-9910.1045 -14200.6484 -522.373]","332":"[-10423.1729 -14201.2549 -522.4004]","333":"[-10941.8418 -14200.0645 -522.4006]","334":"[-11460.2549 -14186.5449 -525.0286]","335":"[-11975.7227 -14134.458 -529.5316]","336":"[-12474.0088 -14014.4834 -533.8006]","337":"[-12909.4746 -13824.2061 -536.7311]","338":"[-13176.7754 -13646.2793 -537.8258]","339":"[-13459.9844 -13375.4639 -537.9695]","340":"[-13645.5752 -13122.0801 -537.2382]","341":"[-13846.1895 -12714.1162 -534.4987]","342":"[-13974.2783 -12272.4238 -531.1353]","343":"[-14046.9688 -11763.0957 -526.1567]","344":"[-14070.5918 -11251.5449 -523.3973]","345":"[-14072.3828 -10738.3867 -522.4432]","346":"[-14072.7402 -10224.5107 -522.348]","347":"[-14073.4912 -9711.1074 -522.4013]","348":"[-14073.3418 -9194.6514 -522.4669]","349":"[-14071.8809 -8677.8135 -522.3953]","350":"[-14071.9629 -8159.2417 -522.2788]","351":"[-14072.5244 -7647.0645 -522.3243]","352":"[-14072.6787 -7130.5244 -522.3964]","353":"[-14072.5234 -6611.8833 -522.316]","354":"[-14072.6973 -6095.1084 -522.1926]","355":"[-14072.4912 -5572.1772 -522.3535]","356":"[-14072.6152 -5058.6304 -522.1808]","357":"[-14072.2373 -4537.0288 -522.2476]","358":"[-14072.959 -4016.9531 -522.2012]","359":"[-14072.1973 -3493.04 -522.2304]","360":"[-14072.5 -2969.4541 -522.2885]","361":"[-14072.7949 -2446.2209 -522.332]","362":"[-14071.9307 -1923.3572 -522.2949]","363":"[-14072.9717 -1400.8643 -522.2882]","364":"[-14064.5723 -879.0057 -522.3022]","365":"[-14039.2939 -359.2127 -522.3961]","366":"[-13986.0615 157.2454 -522.2965]","367":"[-13905.9492 669.4927 -522.2472]","368":"[-13794.791 1174.8517 -522.5016]","369":"[-13653.1348 1671.5032 -522.2663]","370":"[-13485.9131 2158.6436 -522.0203]","371":"[-13326.9268 2646.1758 -522.578]","372":"[-13189.6279 3151.8525 -522.3093]","373":"[-13088.0781 3665.2407 -522.4439]","374":"[-13013.8125 4182.5981 -522.4203]","375":"[-12969.124 4702.8057 -522.335]","376":"[-12948.7783 5223.0933 -522.2795]","377":"[-12943.1777 5743.0591 -522.4384]","378":"[-12935.9629 6261.6841 -522.2463]","379":"[-12912.1592 6779.1753 -522.453]","380":"[-12869.127 7294.499 -522.3069]","381":"[-12804.7451 7806.2891 -522.3603]","382":"[-12717.4102 8313.8398 -522.3568]","383":"[-12604.2256 8815.0664 -522.2916]","384":"[-12463.6504 9307.9443 -522.4122]","385":"[-12292.8389 9791.6504 -522.2174]","386":"[-12088.876 10265.459 -522.465]","387":"[-11847.916 10725.2598 -522.5396]","388":"[-11569.8955 11167.9736 -522.2914]","389":"[-11259.0273 11578.1826 -522.5443]","390":"[-10915.6992 11959.6709 -522.311]","391":"[-10539.3896 12308.8955 -522.5217]","392":"[-10124.4082 12631.7051 -522.2174]","393":"[-9685.1113 12915.627 -522.3385]","394":"[-9228.0059 13161.3438 -522.3632]","395":"[-8758.5508 13369.8447 -522.1659]","396":"[-8267.959 13548.2656 -522.2515]","397":"[-7773.7183 13692.7207 -522.5286]","398":"[-7264.8701 13811.1768 -522.2604]","399":"[-6758.7085 13900.9443 -522.3778]","400":"[-6242.4043 13968.1904 -522.3218]","401":"[-5717.3472 14014.2227 -522.3551]","402":"[-5200.8877 14039.2959 -522.3448]","403":"[-4678.1812 14047.8564 -522.3649]","404":"[-4150.0444 14048.2178 -522.4567]","405":"[-3635.2036 14048.7568 -522.4612]","406":"[-3119.4863 14048.1475 -522.4653]","407":"[-2604.2649 14048.3223 -522.4469]","408":"[-2089.5571 14048.6523 -522.4537]","409":"[-1575.3546 14048.3076 -522.5054]","410":"[-1061.6375 14048.4775 -522.3889]","411":"[-548.3989 14048.2969 -522.4579]","412":"[-35.6296 14048.7705 -522.3526]","413":"[476.6543 14048.25 -522.4954]","414":"[1004.9284 14048.1963 -522.4741]","415":"[1532.6997 14048.8418 -522.362]","416":"[2059.9126 14047.9707 -522.4614]","417":"[2586.6306 14048.791 -522.4047]","418":"[3112.843 14048.4805 -522.4421]","419":"[3638.5276 14048.2959 -522.4752]","420":"[4163.6777 14048.791 -522.4551]","421":"[4687.9365 14044.2061 -522.3538]","422":"[5211.1631 14027.7109 -522.0482]","423":"[5731.6807 13990.0654 -522.2577]","424":"[6249.3252 13932.9199 -522.5661]","425":"[6763.0352 13852.6709 -522.3879]","426":"[7271.0474 13746.5469 -522.2213]","427":"[7771.6992 13613.9609 -522.3607]","428":"[8262.1934 13450.542 -522.3881]","429":"[8740.1963 13256.0322 -522.3411]","430":"[9201.7383 13027.5156 -522.3356]","431":"[9643.1025 12764.1943 -522.3773]","432":"[10060.6631 12466.5322 -522.3294]","433":"[10461.3994 12123.2061 -522.3691]","434":"[10829.1201 11746.3428 -522.2366]","435":"[11160.8799 11338.8242 -522.5002]","436":"[11455.0693 10904.5518 -522.4008]","437":"[11711.8076 10448.1924 -522.3512]","438":"[11932.3623 9974.1787 -522.3607]","439":"[12118.0977 9486.3203 -522.1716]","440":"[12271.5889 8988.5723 -522.3376]","441":"[12394.7393 8483.1846 -522.3716]","442":"[12492.0313 7972.7783 -522.2482]","443":"[12563.6152 7458.7363 -522.2285]","444":"[12613.2393 6942.665 -522.1929]","445":"[12643.1699 6425.5933 -522.3723]","446":"[12654.8086 5908.2598 -522.2938]","447":"[12656.6133 5391.1763 -522.377]","448":"[12655.9404 4874.502 -522.2893]","449":"[12656.6563 4358.2739 -522.3682]","450":"[12656.2451 3842.5427 -522.2554]","451":"[12656.542 3327.2512 -522.4576]","452":"[12656.3379 2812.416 -522.3412]","453":"[12656.3965 2298.0552 -522.4299]","454":"[12656.667 1784.162 -522.3783]","455":"[12656.1621 1270.8263 -522.0604]","456":"[12655.9932 758.3624 -522.3683]","457":"[12656.4609 230.8724 -522.4637]","458":"[12655.7725 -296.1404 -522.3278]","459":"[12656.5 -822.6995 -522.3555]","460":"[12655.8477 -1348.7728 -522.3592]","461":"[12656.3232 -1873.9224 -522.2131]","462":"[12655.9893 -2396.1387 -522.3448]","463":"[12656.1162 -2909.0583 -522.0422]","464":"[12656.6836 -3422.7917 -522.3944]","465":"[12655.9355 -3942.792 -522.3614]","466":"[12656.4521 -4460.6807 -522.4261]","467":"[12655.7236 -4983.6294 -522.2452]","468":"[12656.2656 -5506.1914 -524.3086]","469":"[12655.9658 -6020.7915 -539.2028]","470":"[12656.252 -6533.2202 -573.9517]","471":"[12656.0957 -7053.8608 -615.0451]","472":"[12655.8506 -7571.8872 -642.1234]","473":"[12633.5332 -8089.5444 -651.2117]","474":"[12566.373 -8603.2051 -651.0812]","475":"[12428.5674 -9101.8975 -651.1945]","476":"[12208.2959 -9564.2109 -651.3639]","477":"[11996.0264 -9861.3877 -651.3284]","478":"[11690.6455 -10160.7656 -651.4176]","479":"[11393.9004 -10363.9482 -651.3464]","480":"[10927.6787 -10576.3535 -651.3414]","481":"[10425.708 -10707.5059 -651.3922]","482":"[9912.5186 -10771.4404 -650.6482]","483":"[9400.8213 -10790.0703 -650.7537]","484":"[8888.3564 -10790.8223 -650.2488]","485":"[8371.9414 -10792.3232 -650.4514]","486":"[7856.9355 -10792.6396 -650.3989]","487":"[7344.7451 -10792.6133 -664.4765]","488":"[6826.6475 -10791.876 -698.1093]","489":"[6312.3818 -10791.5732 -749.5457]","490":"[5801.666 -10792.2578 -807.2184]","491":"[5291.6353 -10791.9326 -867.6615]","492":"[4778.4331 -10792.6572 -929.947]","493":"[4268.3208 -10792.3486 -992.5781]","494":"[3754.2478 -10792.4092 -1055.5032]","495":"[3240.114 -10792.5908 -1118.744]","496":"[2729.8254 -10792.3291 -1180.6729]","497":"[2212.4954 -10792.3066 -1242.3535]","498":"[1690.3702 -10792.4053 -1302.3051]","499":"[1166.0608 -10792.5342 -1356.8461]","500":"[643.9037 -10792.4512 -1395.3246]","501":"[130.5565 -10792.5166 -1411.3773]","502":"[-385.792 -10792.5313 -1412.2311]","503":"[-901.8034 -10792.2988 -1412.288]","504":"[-1417.3481 -10792.3193 -1412.3867]","505":"[-1932.4393 -10792.5088 -1412.3728]","506":"[-2447.071 -10792.0215 -1412.3308]","507":"[-2961.2539 -10792.7676 -1412.1843]","508":"[-3474.9641 -10792.5684 -1412.3042]","509":"[-3988.0559 -10787.1797 -1412.3807]","510":"[-4500.0703 -10769.5186 -1412.2104]","511":"[-5026.106 -10730.3857 -1412.4135]","512":"[-5549.1025 -10670.3027 -1412.3966]","513":"[-6068.0005 -10586.6533 -1412.3459]","514":"[-6581.166 -10476.6143 -1412.3104]","515":"[-7086.6665 -10338.5908 -1412.2794]","516":"[-7581.6025 -10169.2275 -1412.1715]","517":"[-8062.98 -9967.7275 -1412.3584]","518":"[-8526.8047 -9730.8555 -1412.3062]","519":"[-8969.6768 -9458.9482 -1412.4205]","520":"[-9386.8281 -9150.9395 -1412.3528]","521":"[-9774.9121 -8808.8135 -1412.3984]","522":"[-10130.0908 -8434.1064 -1412.459]","523":"[-10450.7803 -8030.7617 -1412.3785]","524":"[-10735.2207 -7602.1934 -1412.338]","525":"[-10983.7334 -7152.8042 -1412.3787]","526":"[-11197.54 -6686.7729 -1412.2268]","527":"[-11382.3701 -6192.7153 -1412.3342]","528":"[-11535.5645 -5688.6772 -1412.4243]","529":"[-11657.4326 -5176.8252 -1412.2219]","530":"[-11752.7256 -4660.1699 -1412.1357]","531":"[-11822.7119 -4140.3447 -1412.3109]","532":"[-11870.3262 -3618.5 -1412.3174]","533":"[-11897.5156 -3095.9463 -1412.5164]","534":"[-11906.125 -2573.438 -1412.399]","535":"[-11895.7793 -2051.4939 -1412.3773]","536":"[-11866.4746 -1531.2574 -1412.2319]","537":"[-11817.2227 -1013.5092 -1412.1552]","538":"[-11745.8447 -499.0813 -1412.1312]","539":"[-11650.2148 10.4775 -1412.1123]","540":"[-11528.0156 512.7554 -1412.434]","541":"[-11377.7412 1006.361 -1412.2935]","542":"[-11195.6338 1488.2328 -1412.4171]","543":"[-10981.5977 1955.3887 -1412.1371]","544":"[-10732.7549 2403.4331 -1412.381]","545":"[-10441.0078 2841.6179 -1412.3064]","546":"[-10112.874 3251.5034 -1412.408]","547":"[-9750.2432 3629.7305 -1412.4482]","548":"[-9356.0059 3973.2485 -1412.2993]","549":"[-8933.8711 4280.2197 -1412.3035]","550":"[-8488.374 4550.0942 -1412.3534]","551":"[-8023.3853 4782.6938 -1412.3409]","552":"[-7543.6899 4981.2974 -1412.3521]","553":"[-7052.1064 5146.1558 -1412.4451]","554":"[-6552.2827 5281.311 -1412.0513]","555":"[-6046.7158 5387.876 -1412.2328]","556":"[-5537.2744 5469.6318 -1412.3547]","557":"[-5025.1553 5528.1445 -1412.4126]","558":"[-4511.5918 5566.2964 -1412.2805]","559":"[-3997.4014 5585.1323 -1412.4773]","560":"[-3483.219 5590.271 -1412.3567]","561":"[-2969.6902 5590.7856 -1412.2167]","562":"[-2456.7991 5590.2285 -1412.5327]","563":"[-1944.6884 5590.3096 -1412.2587]","564":"[-1418.8049 5590.4141 -1412.1809]","565":"[-894.1017 5589.9932 -1412.3768]","566":"[-369.2563 5590.0303 -1412.4467]","567":"[147.47 5590.2393 -1412.3733]","568":"[661.7734 5590.248 -1412.4015]","569":"[1175.0205 5590.1992 -1412.3988]","570":"[1689.5765 5589.5322 -1412.3911]","571":"[2209.2036 5590.1108 -1412.4393]","572":"[2728.2937 5589.9233 -1412.4667]","573":"[3246.9697 5590.2637 -1412.4089]","574":"[3763.0859 5589.6338 -1412.3977]","575":"[4283.7212 5589.9302 -1412.3934]","576":"[4799.834 5589.8257 -1412.3354]","577":"[5316.0591 5589.7163 -1412.2852]","578":"[5835.3584 5590.543 -1412.3578]","579":"[6353.6763 5590.1582 -1412.3934]","580":"[6867.3179 5587.3838 -1411.6819]","581":"[7384.8911 5560.9097 -1411.1719]","582":"[7893.4688 5485.5156 -1411.6444]","583":"[8388.4561 5344.125 -1412.1411]","584":"[8850.8545 5122.313 -1412.2581]","585":"[9153.416 4905.354 -1412.2765]","586":"[9452.0361 4599.9282 -1412.2521]","587":"[9673.1816 4275.6245 -1412.2716]","588":"[9880.3193 3816.3203 -1411.7538]","589":"[10012.8398 3318.7034 -1411.6575]","590":"[10081.0508 2806.9309 -1411.8773]","591":"[10103.833 2294.7266 -1411.8479]","592":"[10104.5439 1778.5665 -1412.3778]","593":"[10104.833 1264.3126 -1412.4751]","594":"[10105.0967 751.914 -1412.3887]","595":"[10104.4971 235.1346 -1412.5044]","596":"[10104.7852 -279.7182 -1412.4309]","597":"[10105.1836 -792.6125 -1412.4489]","598":"[10105.5156 -1309.6777 -1412.4197]","599":"[10105.8203 -1824.6919 -1412.3969]","600":"[10104.9307 -2337.4209 -1412.4546]","601":"[10084.1211 -2851.0405 -1412.28]","602":"[10019.874 -3364.252 -1412.6356]","603":"[9893.0537 -3861.572 -1412.9087]","604":"[9686.7832 -4332.6426 -1413.2797]","605":"[9466.2529 -4663.397 -1413.4017]","606":"[9176.6289 -4966.457 -1413.4728]","607":"[8868.8506 -5192.0908 -1413.2228]","608":"[8420.8311 -5412.7397 -1412.4773]","609":"[7927.3398 -5559.269 -1411.7534]","610":"[7420.3853 -5638.4653 -1411.3452]","611":"[6906.7446 -5667.667 -1410.8778]","612":"[6392.6523 -5672.2881 -1410.4348]","613":"[5879.8174 -5673.1953 -1410.4408]","614":"[5363.6636 -5672.6953 -1410.4154]","615":"[4849.9111 -5672 -1410.3424]","616":"[4334.8022 -5671.8936 -1410.4025]","617":"[3822.0315 -5672.5332 -1410.308]","618":"[3306.1528 -5672.7266 -1410.4312]","619":"[2792.439 -5672.9229 -1410.4418]","620":"[2275.4509 -5672.5776 -1410.4122]","621":"[1763.0964 -5672.2925 -1422.9502]","622":"[1250.3313 -5672.3589 -1454.131]","623":"[735.1708 -5672.2534 -1504.6869]","624":"[223.2562 -5672.2959 -1562.1456]","625":"[-292.5779 -5672.2578 -1623.1239]","626":"[-801.6489 -5672.6875 -1684.329]","627":"[-1316.2179 -5673.3252 -1745.7249]","628":"[-1832.5599 -5672.7144 -1805.4309]","629":"[-2349.2446 -5672.6626 -1859.879]","630":"[-2861.7219 -5672.9399 -1900.7892]","631":"[-3377.2583 -5672.6045 -1919.7477]","632":"[-3892.1272 -5672.2651 -1922.5117]","633":"[-4404.5332 -5673.1606 -1922.3539]","634":"[-4919.3662 -5672.1675 -1921.7052]","635":"[-5436.3149 -5690.0728 -1921.9032]","636":"[-5947.1167 -5746.1084 -1921.5692]","637":"[-6446.3677 -5863.5313 -1921.9009]","638":"[-6925.0254 -6059.0776 -1922.1256]","639":"[-7272.9517 -6278.9819 -1922.3988]","640":"[-7579.105 -6558.1738 -1922.5187]","641":"[-7819.8496 -6871.2554 -1922.3337]","642":"[-8034.8379 -7283.7168 -1922.1506]","643":"[-8192.7568 -7775.7578 -1921.7515]","644":"[-8280.9658 -8282.042 -1921.4114]","645":"[-8304.0127 -8798.3418 -1921.4225]","646":"[-8267.3984 -9312.2998 -1921.5089]","647":"[-8165.7383 -9815.4346 -1921.8452]","648":"[-7991.9961 -10298.7871 -1922.0907]","649":"[-7762.9502 -10698.3311 -1922.3973]","650":"[-7528.1855 -10979.7959 -1922.4757]","651":"[-7181.7388 -11271.6768 -1922.3186]","652":"[-6863.459 -11455.8779 -1922.2755]","653":"[-6381.8218 -11640.2783 -1921.8663]","654":"[-5879.2051 -11749.7666 -1921.5848]","655":"[-5365.9653 -11799.8389 -1921.8245]","656":"[-4851.0132 -11813.7881 -1922.1215]","657":"[-4336.6426 -11813.708 -1922.4093]","658":"[-3820.751 -11813.5537 -1922.3221]","659":"[-3306.261 -11813.8203 -1922.3835]","660":"[-2789.6543 -11814.0039 -1922.3726]","661":"[-2276.7375 -11813.7627 -1922.4176]","662":"[-1760.1951 -11814.0469 -1922.3459]","663":"[-1246.1155 -11814.6982 -1922.3993]","664":"[-732.5637 -11814.5625 -1922.4119]","665":"[-215.7592 -11813.9453 -1922.4489]","666":"[302.2823 -11813.3223 -1922.4551]","667":"[819.7524 -11814.2588 -1922.4147]","668":"[1335.0233 -11814.4727 -1922.4486]","669":"[1854.2269 -11813.8496 -1922.4532]","670":"[2368.7739 -11813.4443 -1922.4597]","671":"[2885.3379 -11814.0938 -1922.4758]","672":"[3403.1812 -11814.5615 -1922.3009]","673":"[3921.6594 -11813.5547 -1922.4481]","674":"[4440.1748 -11814.0342 -1922.4581]","675":"[4958.0503 -11814.8613 -1922.437]","676":"[5472.7246 -11813.5088 -1922.4825]","677":"[5987.2983 -11813.4277 -1922.447]","678":"[6501.1938 -11814.2539 -1922.468]","679":"[7014.4312 -11814.1914 -1922.4443]","680":"[7527.019 -11813.7432 -1922.4231]","681":"[8046.9243 -11805.6436 -1922.7838]","682":"[8563.3975 -11768.5488 -1923.4681]","683":"[9069.5156 -11674.6621 -1923.7179]","684":"[9560.5293 -11508.6748 -1923.999]","685":"[9987.875 -11274.167 -1924.4561]","686":"[10281.9336 -11037.4463 -1924.297]","687":"[10547.9775 -10732.5342 -1924.2792]","688":"[10774.7734 -10355.7764 -1924.0184]","689":"[10958.7393 -9876.4434 -1923.7067]","690":"[11068.5986 -9369.9551 -1923.413]","691":"[11116.6084 -8859.3838 -1923.9424]","692":"[11131.5537 -8340.8926 -1924.3615]","693":"[11130.3047 -7825.0796 -1920.1118]","694":"[11128.6035 -7313.3525 -1897.8042]","695":"[11128.9219 -6802.9761 -1854.2668]","696":"[11129.167 -6293.1499 -1799.4063]","697":"[11129.6523 -5779.8735 -1739.6193]","698":"[11128.541 -5265.605 -1678.1442]","699":"[11129.3135 -4750.7012 -1616.3723]","700":"[11128.6387 -4236.4336 -1555.8695]","701":"[11128.8223 -3716.6252 -1498.2457]","702":"[11128.917 -3203.8818 -1449.5997]","703":"[11129.4082 -2683.4814 -1422.0178]","704":"[11129.1592 -2165.4604 -1411.8804]","705":"[11129.1318 -1650.5692 -1412.5028]","706":"[11128.5146 -1136.8879 -1412.3547]","707":"[11129.6279 -623.6518 -1412.4858]","708":"[11128.7334 -110.329 -1412.3383]","709":"[11128.8623 409.7418 -1412.4344]","710":"[11128.8916 929.08 -1412.3528]","711":"[11128.5195 1447.6659 -1412.4551]","712":"[11129.3916 1965.4944 -1412.3977]","713":"[11129.1719 2482.584 -1412.4315]","714":"[11128.3896 2998.9038 -1412.4769]","715":"[11120.9883 3513.9971 -1412.175]","716":"[11085.083 4025.7065 -1412.3574]","717":"[10991.0918 4534.8369 -1412.6427]","718":"[10824.332 5026.9907 -1413.0956]","719":"[10588.7695 5455.3867 -1413.4397]","720":"[10353.0186 5747.5806 -1413.5345]","721":"[10039.4453 6020.7432 -1413.274]","722":"[9686.9414 6232.8213 -1413.005]","723":"[9203.3027 6420.853 -1412.8401]","724":"[8701.9346 6531.6626 -1412.4161]","725":"[8185.8447 6583.5137 -1412.3943]","726":"[7666.9219 6598.5728 -1412.4238]","727":"[7154.2964 6597.248 -1412.4512]","728":"[6642.1001 6597.0146 -1412.4213]","729":"[6123.314 6597.9023 -1412.4274]","730":"[5606.9414 6597.6704 -1412.3903]","731":"[5088.3887 6597.4536 -1412.9924]","732":"[4571.6226 6597.6431 -1413.2838]","733":"[4049.5156 6598.0835 -1413.4752]","734":"[3536.8677 6597.4214 -1413.3989]","735":"[3015.9736 6598.3979 -1413.1592]","736":"[2503.8088 6597.5376 -1413.3011]","737":"[1980.9624 6598.4141 -1413.2867]","738":"[1463.4869 6596.646 -1411.8026]","739":"[951.2886 6598.085 -1412.3527]","740":"[427.6695 6597.2568 -1412.0833]","741":"[-92.3186 6597.6836 -1412.2854]","742":"[-607.2303 6597.9858 -1412.3994]","743":"[-1130.6852 6597.2139 -1412.6411]","744":"[-1646.8623 6598.6655 -1412.2233]","745":"[-2170.4329 6597.7085 -1412.4176]","746":"[-2685.6438 6597.7505 -1412.3356]","747":"[-3207.4963 6598.6577 -1412.3867]","748":"[-3719.7195 6597.3384 -1412.4243]","749":"[-4237.7632 6598.1885 -1412.3945]","750":"[-4761.3813 6598.3325 -1412.3475]","751":"[-5288.5923 6592.4941 -1412.3024]","752":"[-5816.4673 6573.0454 -1412.3181]","753":"[-6342.2749 6532.8091 -1412.209]","754":"[-6865.2891 6470.978 -1412.3276]","755":"[-7384.3052 6385.9321 -1412.4448]","756":"[-7897.2275 6273.6533 -1411.9799]","757":"[-8402.0537 6133.7495 -1412.4531]","758":"[-8896.1719 5962.4194 -1412.3219]","759":"[-9376.5977 5758.1831 -1412.2886]","760":"[-9839.5244 5519.1299 -1412.4381]","761":"[-10280.7539 5244.1543 -1412.2771]","762":"[-10696.3096 4933.6816 -1412.3594]","763":"[-11082.4043 4588.9956 -1412.3904]","764":"[-11435.3604 4211.9146 -1412.2992]","765":"[-11753.4883 3806.2629 -1412.2953]","766":"[-12035.5752 3375.9565 -1412.415]","767":"[-12281.4336 2924.9243 -1412.2775]","768":"[-12492.6738 2457.551 -1412.4673]","769":"[-12670.5889 1977.2894 -1412.3376]","770":"[-12822.0146 1472.0817 -1412.3776]","771":"[-12943.1797 959.4788 -1412.2856]","772":"[-13036.9561 441.7957 -1412.3069]","773":"[-13106.2998 -79.0975 -1412.3339]","774":"[-13152.7207 -601.9465 -1412.2336]","775":"[-13179.3848 -1125.6326 -1412.2484]","776":"[-13188.209 -1648.1021 -1412.5703]","777":"[-13189.3857 -2169.1101 -1412.4138]","778":"[-13188.6738 -2689.0845 -1412.5088]","779":"[-13189.0615 -3208.5906 -1412.3706]","780":"[-13187.8896 -3727.6335 -1412.3774]","781":"[-13177.0352 -4246.0322 -1412.2159]","782":"[-13148.749 -4763.1978 -1412.2747]","783":"[-13100.4238 -5277.8823 -1411.964]","784":"[-13031.0234 -5789.0454 -1412.3762]","785":"[-12937.1768 -6295.6885 -1412.4863]","786":"[-12817.5137 -6796.0913 -1412.3835]","787":"[-12669.0996 -7287.5947 -1412.5629]","788":"[-12491.1641 -7768.1045 -1412.3657]","789":"[-12273.0215 -8247.7725 -1412.3114]","790":"[-12019.4805 -8708.0332 -1412.2272]","791":"[-11729.8984 -9145.1211 -1412.5093]","792":"[-11403.377 -9553.9346 -1412.4609]","793":"[-11043.7305 -9932.335 -1412.4054]","794":"[-10651.4629 -10275.209 -1412.5154]","795":"[-10232.166 -10582.7549 -1412.4596]","796":"[-9788.8584 -10852.6309 -1412.5112]","797":"[-9326.5439 -11086.6855 -1412.4897]","798":"[-8848.9697 -11285.749 -1412.3584]","799":"[-8359.7207 -11451.9707 -1412.4313]","800":"[-7861.9878 -11588.1357 -1412.3387]","801":"[-7357.897 -11695.8555 -1412.3184]","802":"[-6849.8062 -11779.1523 -1412.3179]","803":"[-6328.439 -11839.4639 -1412.3285]","804":"[-5816.2622 -11878.4561 -1412.1847]","805":"[-5291.561 -11898.165 -1412.0715]","806":"[-4778.9819 -11903.6377 -1412.0625]","807":"[-4259.0625 -11903.8408 -1412.2662]","808":"[-3740.4175 -11904.0576 -1412.3918]","809":"[-3222.1372 -11903.875 -1412.3494]","810":"[-2704.1609 -11904.1201 -1412.4003]","811":"[-2186.5786 -11903.9736 -1412.3855]","812":"[-1669.3129 -11903.7871 -1412.4285]","813":"[-1152.4093 -11903.9922 -1412.2823]","814":"[-635.8467 -11904.1025 -1412.3652]","815":"[-120.4 -11903.626 -1409.1151]","816":"[397.1913 -11904.8887 -1388.5531]","817":"[917.5368 -11903.1895 -1345.3003]","818":"[1426.8815 -11904.6143 -1290.8337]","819":"[1943.0448 -11904.3418 -1230.7573]","820":"[2454.3064 -11903.0742 -1169.498]","821":"[2969.5674 -11903.791 -1106.756]","822":"[3482.3904 -11904.4365 -1043.8035]","823":"[3991.2385 -11904.4238 -981.3604]","824":"[4504.2192 -11904.3086 -918.5693]","825":"[5015.3086 -11903.4111 -856.6817]","826":"[5525.9326 -11903.5322 -796.4963]","827":"[6035.3193 -11902.832 -739.6905]","828":"[6546.9888 -11903.626 -690.4325]","829":"[7060.3252 -11903.6064 -661.2051]","830":"[7573.0034 -11903.8623 -650.2033]","831":"[8087.7231 -11904.5342 -650.4005]","832":"[8601.4785 -11903.3633 -650.352]","833":"[9118.5342 -11904.0508 -650.4188]","834":"[9636.1113 -11903.6113 -650.3824]","835":"[10151.2119 -11904.3398 -650.4595]","836":"[10671.3896 -11903.6191 -650.4047]","837":"[11189.4873 -11901.9043 -650.8768]","838":"[11702.1123 -11875.2217 -651.362]","839":"[12216.2236 -11798.543 -651.4437]","840":"[12711.3525 -11651.6006 -651.3546]","841":"[13144.5674 -11434.957 -651.493]","842":"[13442.7695 -11212.9873 -651.3887]","843":"[13732.5322 -10904.7793 -651.4053]","844":"[13938.4258 -10589.9189 -651.2872]","845":"[14141.748 -10114.2139 -651.4517]","846":"[14263.293 -9612.6611 -651.2958]","847":"[14319.9727 -9100.8525 -650.6448]","848":"[14335.8262 -8581.4873 -650.8107]","849":"[14335.0078 -8068.6084 -649.9698]","850":"[14336.2852 -7554.4038 -637.6611]","851":"[14335.8691 -7041.374 -606.4056]","852":"[14336.2998 -6523.6616 -565.5383]","853":"[14335.9297 -6010.8838 -534.9664]","854":"[14335.3135 -5494.5986 -523.3204]","855":"[14334.9414 -4976.623 -522.4777]","856":"[14335.5107 -4455.9224 -522.5034]","857":"[14335.8008 -3941.7178 -522.3826]","858":"[14335.7529 -3428.395 -522.4824]","859":"[14336.0928 -2908.4226 -522.0721]","860":"[14336.0127 -2394.5835 -522.3712]","861":"[14335.9688 -1879.2683 -522.5074]","862":"[14335.8359 -1356.0472 -522.278]","863":"[14335.6709 -841.915 -522.5237]","864":"[14336.1758 -326.8743 -522.3181]","865":"[14336.4346 186.8038 -522.507]","866":"[14335.9785 711.8893 -522.0993]","867":"[14335.9805 1233.257 -522.3788]","868":"[14335.958 1749.4707 -522.277]","869":"[14335.8926 2274.4836 -522.427]","870":"[14336.1689 2792.5374 -522.2849]","871":"[14335.4629 3318.178 -522.3449]","872":"[14336.2285 3835.3113 -522.3356]","873":"[14335.8018 4359.0742 -522.3516]","874":"[14335.6641 4873.0278 -522.4127]","875":"[14336.3467 5392.314 -522.3395]","876":"[14335.6182 5914.6328 -522.3823]","877":"[14336.2275 6437.3267 -522.3953]","878":"[14335.7676 6959.5195 -522.4233]","879":"[14335.0146 7481.1846 -522.2115]","880":"[14327.1953 8002.2188 -522.2909]","881":"[14301.2139 8522.0098 -522.3275]","882":"[14256.5615 9039.9199 -522.356]","883":"[14189.2461 9554.1348 -522.7792]","884":"[14099.4199 10063.8848 -522.3914]","885":"[13982.5938 10567.3398 -522.3784]","886":"[13837.7451 11062.6387 -522.2728]","887":"[13662.7227 11547.1152 -522.2994]","888":"[13454.5137 12017.3066 -522.5663]","889":"[13213.4014 12470.3447 -522.3871]","890":"[12936.5322 12901.2256 -522.1577]","891":"[12615.6426 13319.3379 -522.3768]","892":"[12258.7031 13705.5166 -522.2861]","893":"[11869.8018 14057.9072 -522.2833]","894":"[11451.6738 14373.2646 -522.3524]","895":"[11009.2051 14651.6621 -522.4109]","896":"[10546.3975 14892.8271 -522.3363]","897":"[10067.7041 15098.6074 -522.474]","898":"[9576.6787 15270.6475 -522.3793]","899":"[9076.4736 15411.46 -522.2704]","900":"[8569.7578 15523.8564 -522.3333]","901":"[8058.6035 15610.3506 -522.3254]","902":"[7544.5801 15673.3174 -522.3866]","903":"[7028.9746 15714.6719 -522.3563]","904":"[6512.7129 15737.0127 -522.2454]","905":"[5996.4888 15743.7412 -522.3916]","906":"[5480.6611 15743.8174 -522.4947]","907":"[4965.2646 15744.1367 -522.3945]","908":"[4450.3384 15743.8916 -522.4288]","909":"[3935.8335 15743.877 -522.362]","910":"[3421.7998 15744.126 -522.5148]","911":"[2908.1973 15743.7783 -522.2795]","912":"[2395.0437 15743.9355 -522.3677]","913":"[1882.323 15743.9512 -522.5068]","914":"[1370.0668 15743.7783 -522.4609]","915":"[842.7263 15744.2031 -522.3554]","916":"[315.8764 15743.4277 -522.4637]","917":"[-210.512 15744.3701 -522.373]","918":"[-736.3779 15743.8457 -522.3715]","919":"[-1261.7697 15743.7461 -522.3717]","920":"[-1786.6919 15744.3018 -522.4665]","921":"[-2311.1316 15743.4922 -522.3596]","922":"[-2835.1399 15744.5029 -522.3846]","923":"[-3358.6494 15743.7002 -522.353]","924":"[-3881.7156 15744.4102 -522.3239]","925":"[-4404.3262 15743.957 -522.3757]","926":"[-4926.4585 15743.6191 -522.242]","927":"[-5448.1685 15744.5947 -522.4105]","928":"[-5969.3931 15743.2822 -522.3088]","929":"[-6490.082 15737.8311 -522.2449]","930":"[-7009.7656 15715.7529 -522.2366]","931":"[-7527.4629 15674.5889 -522.4161]","932":"[-8042.2852 15612.8174 -522.3201]","933":"[-8552.9639 15526.8467 -522.2947]","934":"[-9058.2178 15416.3535 -522.2892]","935":"[-9555.4023 15276.6729 -522.3318]","936":"[-10042.7607 15108.2666 -522.4191]","937":"[-10516.3574 14906.7402 -522.4984]","938":"[-10973.2012 14671.832 -522.3428]","939":"[-11409.2139 14402.1543 -522.2436]","940":"[-11831.9971 14088.1631 -522.3355]","941":"[-12224.3896 13738.707 -522.4481]","942":"[-12582.958 13356.2148 -522.3016]","943":"[-12905.5078 12944.2656 -522.3644]","944":"[-13190.8936 12506.8945 -522.3174]","945":"[-13438.9268 12048.3066 -522.3683]","946":"[-13651.7363 11573.2207 -522.4839]","947":"[-13829.9111 11084.835 -522.3752]","948":"[-13976.6943 10586.793 -522.4251]","949":"[-14094.9238 10081.8066 -522.3234]","950":"[-14186.2656 9571.8682 -522.3012]","951":"[-14253.5771 9058.749 -522.2214]","952":"[-14299.6328 8543.7969 -522.3195]","953":"[-14325.7236 8027.979 -522.3177]","954":"[-14334.9316 7511.9707 -522.3887]","955":"[-14336.2627 6996.3237 -522.4136]","956":"[-14335.6152 6481.064 -522.4672]","957":"[-14336.3027 5966.2119 -522.4598]","958":"[-14335.8496 5451.7754 -522.3842]","959":"[-14335.9395 4937.7236 -522.4276]","960":"[-14336.2617 4424.1294 -522.3332]","961":"[-14335.6025 3910.9172 -522.4517]","962":"[-14336.2266 3398.1343 -522.4475]","963":"[-14335.7822 2885.7349 -522.4937]","964":"[-14335.8066 2359.1194 -522.3465]","965":"[-14336.0039 1832.8838 -522.3503]","966":"[-14335.7324 1307.1085 -522.4022]","967":"[-14336.2051 781.7194 -522.3374]","968":"[-14335.9844 256.8076 -522.4062]","969":"[-14335.8193 -267.6867 -522.4841]","970":"[-14336.0059 -788.2758 -522.4199]","971":"[-14336.0615 -1307.8706 -522.2161]","972":"[-14335.9434 -1831.1448 -522.2486]","973":"[-14335.9033 -2346.8193 -522.2307]","974":"[-14335.2041 -2869.0872 -522.2404]","975":"[-14335.3213 -3382.5193 -522.2265]","976":"[-14335.5234 -3895.634 -522.3121]","977":"[-14335.2246 -4408.4243 -522.2094]","978":"[-14335.5371 -4920.9028 -522.2883]","979":"[-14335.5479 -5433.0508 -522.3034]","980":"[-14335.5742 -5955.9717 -522.2176]","981":"[-14335.8184 -6478.5493 -522.288]","982":"[-14335.9092 -7000.7593 -522.3266]","983":"[-14336.4297 -7522.6016 -522.3768]","984":"[-14335.2959 -8044.0391 -522.2443]","985":"[-14336.4707 -8556.2549 -522.3795]","986":"[-14335.6826 -9075.0879 -522.4587]","987":"[-14335.9307 -9590.5576 -522.3856]","988":"[-14335.9678 -10104.5645 -522.3331]","989":"[-14335.7656 -10617.7041 -522.5083]","990":"[-14335.3994 -11129.8877 -522.3839]","991":"[-14319.207 -11647.5254 -522.366]","992":"[-14264.9258 -12159.248 -522.3066]","993":"[-14144.8535 -12663.6357 -522.4472]","994":"[-13944.8975 -13136.3281 -522.3102]","995":"[-13739.8711 -13452.8965 -522.4071]","996":"[-13446.4932 -13767.5811 -522.3657]","997":"[-13156.6416 -13985.457 -522.3492]","998":"[-12722.585 -14205.4238 -522.6055]","999":"[-12232.7559 -14353.6953 -522.285]","1000":"[-11722.3115 -14432.5283 -522.2742]","1001":"[-11208.1426 -14459.8232 -522.3367]","1002":"[-10691.9121 -14463.8193 -522.4291]","1003":"[-10175.3906 -14463.9111 -522.3412]","1004":"[-9656.9082 -14463.5146 -522.423]","1005":"[-9140.8477 -14463.4902 -522.4466]","1006":"[-8622.8438 -14463.832 -522.3961]","1007":"[-8105.2026 -14464.4736 -522.2991]","1008":"[-7586.8765 -14463.7764 -522.4786]","1009":"[-7068.6069 -14463.6133 -522.4166]","1010":"[-6551.7476 -14464.3311 -522.4207]","1011":"[-6039.3652 -14463.6826 -522.3309]","1012":"[-5524.3057 -14464.2109 -522.4734]","1013":"[-5009.8901 -14464.2383 -511.3916]","1014":"[-4495.605 -14464.0811 -481.1309]","1015":"[-3984.3606 -14464.4941 -431.3776]","1016":"[-3471.5645 -14463.9902 -373.9812]","1017":"[-2959.5676 -14464.1514 -313.5496]","1018":"[-2448.4285 -14463.9873 -252.1914]","1019":"[-1937.1306 -14463.6123 -191.0729]","1020":"[-1421.3768 -14463.9141 -131.516]","1021":"[-906.8381 -14463.9893 -76.6735]","1022":"[-394.937 -14463.7539 -34.4004]","1023":"[117.305 -14463.6709 -13.7178]","1024":"[639.2327 -14464.2529 -10.5009]","1025":"[1160.0571 -14463.543 -10.3969]","1026":"[1680.527 -14463.8555 -10.4526]","1027":"[2200.6243 -14463.8164 -10.4086]","1028":"[2720.3555 -14463.7295 -10.4127]","1029":"[3239.7224 -14463.9004 -10.4189]","1030":"[3758.7388 -14463.9482 -10.3903]","1031":"[4277.4014 -14463.4697 -10.4711]","1032":"[4795.6641 -14463.8877 -10.2472]","1033":"[5313.1079 -14463.9717 -10.4381]","1034":"[5830.1177 -14463.8398 -10.2078]","1035":"[6345.3511 -14464.5967 4.3161]","1036":"[6859.4751 -14464.4834 39.0027]","1037":"[7378.2686 -14464.2168 91.2978]","1038":"[7894.8179 -14464.249 149.9642]","1039":"[8405.5254 -14464.1074 210.5957]","1040":"[8917.4209 -14463.958 272.2094]","1041":"[9428.3652 -14463.5918 332.9053]","1042":"[9937.9707 -14463.7109 391.2664]","1043":"[10448.4053 -14464.0039 444.1446]","1044":"[10959.0107 -14463.9473 482.4366]","1045":"[11475.9463 -14449.9346 499.4275]","1046":"[11987.9668 -14400.5977 501.7019]","1047":"[12494.168 -14286.5391 501.7956]","1048":"[12970.2813 -14093.625 501.6592]","1049":"[13301.8301 -13885.9482 501.5927]","1050":"[13612.1758 -13605.7207 501.6507]","1051":"[13838.6455 -13314.6348 501.5851]","1052":"[14056.1172 -12903.2461 501.7101]","1053":"[14214.2969 -12412.1797 501.5355]","1054":"[14299.6074 -11905.2471 501.7028]","1055":"[14329.7119 -11393.2988 501.6339]","1056":"[14334.9189 -10874.0488 501.5074]","1057":"[14336.8389 -10356.1533 501.605]","1058":"[14336.0693 -9839.373 501.5977]","1059":"[14334.873 -9323.6582 501.6085]","1060":"[14334.9209 -8808.9785 501.5315]","1061":"[14335.7969 -8295.3516 501.5655]","1062":"[14335.4727 -7782.7466 501.5753]","1063":"[14335.8486 -7263.7212 501.7012]","1064":"[14335.3291 -6745.7324 501.573]","1065":"[14335.7842 -6228.7749 501.6172]","1066":"[14335.4893 -5712.8682 501.565]","1067":"[14329.75 -5198.4717 501.6376]","1068":"[14294.5313 -4681.561 501.972]","1069":"[14202.7598 -4177.4272 501.6473]","1070":"[14036.2959 -3690.2734 501.6795]","1071":"[13817.3828 -3294.3228 501.6349]","1072":"[13579.8105 -3000.8433 501.5295]","1073":"[13266.2891 -2728.8196 501.6093]","1074":"[12924.8799 -2524.2605 501.6145]","1075":"[12441.2178 -2339.0305 501.7611]","1076":"[11937.1309 -2232.5303 501.6868]","1077":"[11426.0088 -2187.553 501.5886]","1078":"[10907.8643 -2175.5967 501.6394]","1079":"[10391.1455 -2176.0286 501.5793]","1080":"[9875.9092 -2176.5198 501.6527]","1081":"[9362.1191 -2176.6938 501.5992]","1082":"[8849.7852 -2176.0959 501.5881]","1083":"[8332.3037 -2176.533 501.5579]","1084":"[7816.3604 -2176.2551 501.5806]","1085":"[7301.9429 -2175.7759 501.5992]","1086":"[6789.0742 -2176.9104 501.5793]","1087":"[6271.2354 -2176.4324 501.5723]","1088":"[5755.0146 -2176.0781 501.5582]","1089":"[5240.3838 -2176.491 501.5707]","1090":"[4727.3745 -2177.1365 501.5484]","1091":"[4209.564 -2175.8093 501.5772]","1092":"[3693.4463 -2176.0664 501.5791]","1093":"[3179.009 -2176.3826 501.6081]","1094":"[2666.2229 -2176.0945 501.585]","1095":"[2149.0835 -2176.7532 501.502]","1096":"[1634.0087 -2177.1628 501.6515]","1097":"[1120.7258 -2176.0164 501.6022]","1098":"[602.9089 -2176.2976 501.5815]","1099":"[86.9373 -2176.51 501.5282]","1100":"[-427.2294 -2175.9595 501.8027]","1101":"[-940.0366 -2173.5344 500.4988]","1102":"[-1451.4042 -2146.542 497.0563]","1103":"[-1957.2572 -2066.5715 492.1952]","1104":"[-2450.0347 -1906.8735 488.5822]","1105":"[-2778.7268 -1732.1737 486.6975]","1106":"[-3073.2048 -1501.7708 485.9782]","1107":"[-3291.6099 -1258.7651 486.3305]","1108":"[-3499.5278 -925.0197 487.7989]","1109":"[-3656.7551 -534.1373 490.3979]","1110":"[-3770.2002 -32.3398 494.821]","1111":"[-3817.4351 481.2138 499.1454]","1112":"[-3829.5305 995.7014 501.5331]","1113":"[-3829.6523 1509.3895 501.5521]","1114":"[-3829.4219 2024.7604 501.5835]","1115":"[-3829.8538 2541.5562 501.5502]","1116":"[-3829.7327 3054.9666 501.5728]","1117":"[-3829.52 3570.1306 501.5261]","1118":"[-3829.1396 4086.936 501.6308]","1119":"[-3829.1169 4602.1367 501.5349]","1120":"[-3828.8132 5115.98 501.6453]","1121":"[-3828.6868 5631.894 501.5716]","1122":"[-3828.7776 6146.2075 501.5404]","1123":"[-3829.1948 6661.8315 501.3484]","1124":"[-3829.6538 7173.8745 501.3417]","1125":"[-3829.5918 7691.082 501.1678]","1126":"[-3829.6875 8203.3164 501.1857]","1127":"[-3825.3892 8722.3154 501.045]","1128":"[-3794.3667 9237.6143 501.0537]","1129":"[-3710.2385 9748.6689 500.8312]","1130":"[-3558.1326 10241.9805 500.5438]","1131":"[-3324.7495 10698.0723 500.2072]","1132":"[-3108.928 10983.1748 500.1083]","1133":"[-2785.3601 11283.5703 500.1357]","1134":"[-2476.071 11483.1777 500.1799]","1135":"[-2002.9216 11686.5293 500.586]","1136":"[-1504.2771 11811.4609 500.9445]","1137":"[-994.5361 11874.0996 500.9456]","1138":"[-480.4507 11893.0898 500.934]","1139":"[32.1979 11893.4297 500.7241]","1140":"[550.5731 11895.3545 500.813]","1141":"[1065.3918 11894.2305 500.8522]","1142":"[1579.7405 11894.4961 500.9453]","1143":"[2101.2642 11894.7324 500.8171]","1144":"[2617.1855 11894.3428 500.9897]","1145":"[3130.0083 11894.5742 500.7534]","1146":"[3648.1538 11894.0117 501.0847]","1147":"[4166.0127 11894.5527 501.0511]","1148":"[4682.1763 11880.8076 500.9568]","1149":"[5194.6968 11838.2412 501.1843]","1150":"[5698.957 11749.1201 501.9924]","1151":"[6199.7437 11606.1865 500.7176]","1152":"[6674.5532 11398.4355 500.8849]","1153":"[7109.7271 11123.5596 500.9565]","1154":"[7490.1724 10780.5186 500.8648]","1155":"[7810.9976 10369.2617 500.729]","1156":"[8059.1338 9912.3809 500.9264]","1157":"[8237.6182 9425.0557 500.9024]","1158":"[8356.8877 8920.6826 500.9608]","1159":"[8425.1416 8407.4287 500.9582]","1160":"[8452.2705 7891.2417 500.8486]","1161":"[8439.2168 7376.3076 501.1949]","1162":"[8387.6699 6866.7261 500.9573]","1163":"[8288.4629 6355.165 500.9867]","1164":"[8132.4663 5861.1392 500.9729]","1165":"[7912.8838 5394.4985 501.3063]","1166":"[7624.7441 4970.9614 501.0301]","1167":"[7262.6616 4596.9531 500.8098]","1168":"[6843.0132 4292.6973 501.142]","1169":"[6381.0386 4060.9885 500.9748]","1170":"[5892.9727 3894.9314 500.9702]","1171":"[5389.7012 3787.6003 500.9731]","1172":"[4879.3486 3727.2783 500.8933]","1173":"[4365.3198 3705.9119 494.5912]","1174":"[3842.7371 3701.2649 468.2714]","1175":"[3326.3496 3702.5449 421.679]","1176":"[2810.5037 3702.0002 365.207]","1177":"[2295.2419 3702.072 304.9619]","1178":"[1782.9108 3701.4604 242.9788]","1179":"[1262.1589 3701.8796 179.3327]","1180":"[749.4659 3701.0317 116.3315]","1181":"[232.689 3701.8994 52.9964]","1182":"[-286.442 3701.4517 -10.3658]","1183":"[-806.243 3701.6978 -72.936]","1184":"[-1324.8746 3701.5007 -133.2786]","1185":"[-1840.3418 3701.7598 -189.021]","1186":"[-2367.4736 3701.6863 -235.021]","1187":"[-2883.5671 3701.2671 -256.8793]","1188":"[-3403.6472 3701.8667 -261.0556]","1189":"[-3923.7852 3701.5469 -261.1246]","1190":"[-4443.3315 3701.3286 -261.1708]","1191":"[-4959.666 3702.5781 -250.0451]","1192":"[-5486.249 3701.7148 -218.304]","1193":"[-6002.0225 3701.9465 -167.4863]","1194":"[-6520.5317 3702.3301 -109.0305]","1195":"[-7039.5459 3701.8069 -47.6184]","1196":"[-7557.228 3702.0049 14.5468]","1197":"[-8072.1377 3701.2793 75.5195]","1198":"[-8583.1709 3701.8179 134.6101]","1199":"[-9104.1396 3701.3372 189.3516]","1200":"[-9620.5195 3701.7327 230.1561]","1201":"[-10142.2432 3702.7822 248.7685]","1202":"[-10664.6074 3697.5308 250.813]","1203":"[-11181.3408 3668.7397 250.6166]","1204":"[-11698.1504 3598.9768 250.8094]","1205":"[-12201.9814 3479.3474 250.6263]","1206":"[-12685.0752 3299.4858 250.5359]","1207":"[-13135.9092 3055.0532 250.5633]","1208":"[-13545.5801 2734.5132 250.464]","1209":"[-13891.4238 2349.8599 250.5379]","1210":"[-14166.7012 1914.1865 250.58]","1211":"[-14371.6572 1442.818 250.5285]","1212":"[-14513.4434 949.8439 250.5785]","1213":"[-14603.8164 435.5397 250.6628]","1214":"[-14647.5283 -84.1804 250.7065]","1215":"[-14660.1338 -604.6801 250.6339]","1216":"[-14661.0508 -1124.6267 250.6778]","1217":"[-14661.1523 -1643.9825 250.6988]","1218":"[-14660.1309 -2162.9202 250.7189]","1219":"[-14661.3457 -2681.4199 250.6083]","1220":"[-14660.9014 -3199.4873 250.5698]","1221":"[-14660.6455 -3717.1479 250.5822]","1222":"[-14661.1104 -4234.4351 250.5656]","1223":"[-14661.3945 -4751.3125 250.5428]","1224":"[-14661.0615 -5267.8091 250.7437]","1225":"[-14660.8477 -5783.9521 250.5394]","1226":"[-14660.5176 -6299.6978 250.6644]","1227":"[-14661.3281 -6814.6475 250.6076]","1228":"[-14660.248 -7328.709 250.5034]","1229":"[-14654.7471 -7841.8188 250.4578]","1230":"[-14636.3047 -8353.9805 250.1984]","1231":"[-14597.0977 -8874.499 250.1758]","1232":"[-14537.666 -9392.4375 250.1132]","1233":"[-14454.6152 -9906.4883 250.1075]","1234":"[-14346.0928 -10415.0332 250.187]","1235":"[-14209.7266 -10916.0479 250.1581]","1236":"[-14043.0361 -11407.0449 250.0726]","1237":"[-13843.6045 -11884.7998 250.0183]","1238":"[-13610.4756 -12347.3896 250.0895]","1239":"[-13339.5449 -12791.5117 250.0533]","1240":"[-13037.207 -13205.415 250.1541]","1241":"[-12697.7744 -13594.8418 250.0385]","1242":"[-12327.1455 -13950.4248 250.1293]","1243":"[-11920.2949 -14277.1211 250.1088]","1244":"[-11487.4824 -14567.5117 250.1653]","1245":"[-11033.7021 -14820.4043 250.1061]","1246":"[-10566.8525 -15035.54 250.1109]","1247":"[-10085.2793 -15218.2598 250.2909]","1248":"[-9585.5762 -15371.0703 250.1645]","1249":"[-9086.9805 -15492.9658 250.24]","1250":"[-8581.8018 -15588.1602 250.2735]","1251":"[-8073.9365 -15659.7373 250.2379]","1252":"[-7551.9941 -15709.6436 250.2341]","1253":"[-7032.3301 -15739.8496 250.2956]","1254":"[-6518.0698 -15751.165 250.3343]","1255":"[-5996.0625 -15753.3467 251.4039]","1256":"[-5482.2388 -15752.5879 250.8906]","1257":"[-4960.603 -15753.0342 251]","1258":"[-4448.4136 -15753.2148 256.891]","1259":"[-3936.2271 -15752.5635 281.0031]","1260":"[-3412.8286 -15753.2969 328.5889]","1261":"[-2898.365 -15752.9346 384.8469]","1262":"[-2379.5222 -15753.043 445.7702]","1263":"[-1857.4386 -15752.7813 508.5948]","1264":"[-1346.9644 -15753.3311 570.9678]","1265":"[-833.8832 -15752.6611 633.7816]","1266":"[-318.5703 -15753.209 697.1481]","1267":"[198.7273 -15752.502 760.1219]","1268":"[717.8127 -15752.7021 822.9189]","1269":"[1227.0706 -15752.4688 882.4]","1270":"[1741.7949 -15752.6387 938.0862]","1271":"[2253.3901 -15752.7695 983.8088]","1272":"[2770.2368 -15752.2383 1006.8499]","1273":"[3285.7131 -15752.8857 1012.5284]","1274":"[3803.1775 -15752.4854 1012.5037]","1275":"[4320.9297 -15752.3496 1013.2337]","1276":"[4836.7339 -15752.5801 1012.6315]","1277":"[5349.4961 -15752.5059 1012.5508]","1278":"[5872.3486 -15746.3809 1012.4393]","1279":"[6389.4448 -15726.0107 1012.2513]","1280":"[6913.9688 -15684.7656 1012.165]","1281":"[7428.8916 -15623.2363 1012.285]","1282":"[7947.5195 -15536.8057 1012.3391]","1283":"[8452.4727 -15425.7666 1012.2479]","1284":"[8956.4248 -15285.0645 1012.4562]","1285":"[9440.8184 -15116.9854 1012.3141]","1286":"[9917.7168 -14914.4521 1012.1881]","1287":"[10382.6035 -14674.4063 1012.0843]","1288":"[10830.9727 -14395.4619 1012.2568]","1289":"[11243.9365 -14086.0381 1012.1369]","1290":"[11631.707 -13739.1855 1012.1107]","1291":"[11989.5713 -13355.9092 1012.2024]","1292":"[12314.1484 -12938.9063 1012.3676]","1293":"[12594.7764 -12506.8184 1012.2561]","1294":"[12840.8994 -12049.8994 1012.3796]","1295":"[13053.9014 -11572.5586 1012.1548]","1296":"[13233.1934 -11078.2129 1012.2977]","1297":"[13381.332 -10571.7969 1012.3817]","1298":"[13499.6709 -10057.8799 1012.3506]","1299":"[13590.5068 -9539.0889 1012.3292]","1300":"[13657.1748 -9017.3477 1012.2387]","1301":"[13701.0791 -8493.8799 1012.3372]","1302":"[13725.4443 -7969.77 1012.274]","1303":"[13732.7783 -7446.8247 1012.0003]","1304":"[13733.2666 -6925.3037 1012.3991]","1305":"[13732.335 -6405.5669 1012.5377]","1306":"[13732.7725 -5892.4302 1012.5893]","1307":"[13733.6006 -5377.3906 1012.54]","1308":"[13732.4512 -4857.6479 1012.6023]","1309":"[13733.0498 -4337.0913 1012.5542]","1310":"[13733.0342 -3821.1426 1012.7678]","1311":"[13733.124 -3301.6934 1012.692]","1312":"[13732.9434 -2787.5381 1012.6953]","1313":"[13732.8789 -2266.9641 1012.6581]","1314":"[13732.6016 -1746.6324 1012.5664]","1315":"[13733.0576 -1234.1687 1012.5721]","1316":"[13732.8047 -716.8124 1012.6761]","1317":"[13732.7686 -198.4596 1012.5635]","1318":"[13733.3291 318.9022 1012.61]","1319":"[13733.2471 835.2667 1012.5659]","1320":"[13732.5215 1350.5867 1012.6074]","1321":"[13732.5498 1864.8611 1012.5302]","1322":"[13733.0107 2378.1196 1012.5981]","1323":"[13733.3105 2890.3806 1012.59]","1324":"[13733.1484 3409.0735 1012.6484]","1325":"[13732.3379 3926.9246 1011.5032]","1326":"[13732.3262 4443.7837 1010.4139]","1327":"[13733.1865 4959.8628 1010.4117]","1328":"[13733.1904 5474.8882 1010.4697]","1329":"[13732.7568 5988.875 1010.519]","1330":"[13732.7764 6501.7822 1010.6706]","1331":"[13733 7020.7046 1010.562]","1332":"[13732.3271 7538.5449 1010.6269]","1333":"[13732.4941 8055.3232 1010.5616]","1334":"[13732.1348 8571.0254 1010.5596]","1335":"[13732.5098 9085.625 1010.5571]","1336":"[13732.709 9599.0918 1010.7277]","1337":"[13732.9502 10117.8594 1010.7484]","1338":"[13733.1133 10635.0029 1010.6431]","1339":"[13724.9561 11150.2793 1010.5887]","1340":"[13693.251 11661.8154 1010.6329]","1341":"[13619.5625 12173.7236 1010.5408]","1342":"[13495.4619 12672.4395 1010.4966]","1343":"[13310.8711 13154.6865 1010.5136]","1344":"[13056.8516 13606.6641 1010.4901]","1345":"[12735.4043 14006.5107 1010.4443]","1346":"[12348.5264 14345.8838 1010.3106]","1347":"[11908.1074 14616.3877 1010.4719]","1348":"[11435.6221 14815.9707 1010.5541]","1349":"[10938.415 14954.4453 1010.6465]","1350":"[10432.5586 15039.3467 1010.6714]","1351":"[9917.1553 15080.5615 1010.6107]","1352":"[9402.1016 15093.4404 1010.4736]","1353":"[8888.6895 15093.3643 1010.3711]","1354":"[8397.6777 15093.5635 1010.5296]"},"2":{"1":"[3032.1099 6751.3213 -1413.3153]","2":"[3535.3462 6853.4077 -1413.5331]","3":"[4043.4517 6923.0435 -1413.4432]","4":"[4556.9155 6957.0117 -1413.2078]","5":"[5070.4951 6967.5073 -1412.9406]","6":"[5589.0791 6969.4932 -1412.3175]","7":"[6105.6836 6969.7373 -1412.4252]","8":"[6623.0781 6969.7529 -1412.423]","9":"[7139.002 6982.7646 -1412.5496]","10":"[7650.5137 7029.6382 -1412.3007]","11":"[8157.8701 7138.4395 -1412.7233]","12":"[8638.127 7320.5918 -1413.0255]","13":"[9023.6436 7550.5732 -1413.2523]","14":"[9315.3613 7803.0273 -1413.3857]","15":"[9576.3457 8124.6885 -1413.3668]","16":"[9787.1631 8504.3418 -1412.9797]","17":"[9958.5439 8993.6826 -1412.6079]","18":"[10056.4189 9499.3086 -1412.5255]","19":"[10089.959 10017.291 -1412.1543]","20":"[10064.5791 10532.5742 -1412.4535]","21":"[9972.3584 11036.3906 -1412.7439]","22":"[9809.9482 11524.6367 -1413.0929]","23":"[9575.5732 11957.4053 -1413.2406]","24":"[9343.3945 12249.6328 -1413.4404]","25":"[9029.1484 12527.8779 -1413.3326]","26":"[8687.6768 12737.2324 -1413.0262]","27":"[8206.292 12929.1055 -1412.8929]","28":"[7705.3965 13043.623 -1412.5691]","29":"[7190.7881 13097.7012 -1412.3236]","30":"[6675.3506 13114.4443 -1412.2723]","31":"[6161.6177 13113.7432 -1412.3053]","32":"[5649.248 13112.6074 -1412.3148]","33":"[5132.0967 13112.4385 -1412.4348]","34":"[4616.4175 13112.7227 -1412.4329]","35":"[4102.0313 13112.9063 -1412.3512]","36":"[3589.1738 13112.9648 -1412.22]","37":"[3075.6064 13113.1387 -1412.5245]","38":"[2561.146 13113.4619 -1412.376]","39":"[2048.4683 13113.5645 -1412.4058]","40":"[1819.4072 13113.2969 -1412.3523]"},"3":{"1":"[-85.0783 6465.5283 -1412.3893]","2":"[-182.965 6441.3594 -1412.3925]","3":"[-671.8106 6287.0254 -1412.4019]","4":"[-1147.3582 6096.541 -1412.4371]","5":"[-1624.019 5907.9893 -1412.3979]","6":"[-2113.5056 5751.0381 -1412.5195]","7":"[-2243.3643 5718.4219 -1412.4749]"},"4":{"1":"[-5622.1836 -6570.5107 2183.7131]","2":"[-5723.3027 -6570.8179 2183.8843]","3":"[-6236.5376 -6557.9272 2183.5591]","4":"[-6747.8652 -6513.3335 2183.4204]","5":"[-7250.2441 -6409.5405 2182.9175]","6":"[-7732.4155 -6233.7598 2182.5427]","7":"[-8112.1846 -6014.1147 2182.4031]","8":"[-8439.2422 -5739.1523 2182.2817]","9":"[-8657.6113 -5478.3198 2182.29]","10":"[-8915.7725 -5035.3032 2182.491]","11":"[-9044.8359 -4685.0332 2182.8003]","12":"[-9163.0898 -4184.2231 2183.229]","13":"[-9219.3848 -3674.1021 2183.5273]","14":"[-9236.6172 -3160.1611 2183.5066]","15":"[-9236.7021 -2646.0737 2183.5837]","16":"[-9236.9297 -2133.7739 2183.5649]","17":"[-9237.291 -1621.5714 2183.6021]","18":"[-9236.6279 -1103.3083 2183.6887]","19":"[-9236.3809 -586.3654 2183.5381]","20":"[-9236.8379 -70.9441 2183.5857]","21":"[-9236.8311 442.9189 2183.5876]","22":"[-9237.5313 955.192 2183.6267]","23":"[-9237.5117 1470.6456 2184.0171]","24":"[-9237.6211 1988.3188 2184.2947]","25":"[-9237.4619 2502.6794 2183.5977]","26":"[-9237.251 3020.6443 2183.0647]","27":"[-9236.502 3536.1165 2183.1462]","28":"[-9228.1553 4049.0671 2182.8933]","29":"[-9205.2988 4565.6245 2181.9063]","30":"[-9162.6768 5079.6274 2181.0439]","31":"[-9099.3516 5589.8301 2179.9111]","32":"[-9012.0605 6095.2368 2179.0632]","33":"[-8898.5557 6599.894 2178.1921]","34":"[-8756.5234 7095.9937 2177.4148]","35":"[-8583.916 7580.2578 2176.6907]","36":"[-8378.8281 8049.7544 2176.0857]","37":"[-8137.4897 8505.5273 2175.696]","38":"[-7861.1494 8937.6387 2175.3616]","39":"[-7546.6768 9346.709 2175.2229]","40":"[-7199.1514 9723.2891 2175.0662]","41":"[-6817.9961 10068.6602 2175.1785]","42":"[-6405.9634 10379.4844 2175.4309]","43":"[-5967.7832 10654.8252 2175.8843]","44":"[-5512.6772 10891.5186 2176.2043]","45":"[-5039.8901 11093.6885 2176.866]","46":"[-4553.4175 11263.1836 2177.605]","47":"[-4056.5044 11402.3203 2178.2778]","48":"[-3552.1536 11512.7734 2179.2104]","49":"[-3042.7593 11597.4121 2179.9778]","50":"[-2529.9646 11658.9531 2180.8511]","51":"[-2015.1373 11698.4766 2181.8853]","52":"[-1500.1017 11719.7402 2183.0291]","53":"[-985.2346 11719.5742 2183.448]","54":"[-470.4996 11696.6357 2183.5466]","55":"[43.6386 11647.9785 2183.5212]","56":"[550.4302 11572.8359 2183.6726]","57":"[1052.8263 11469.0088 2183.6084]","58":"[1547.9784 11333.8633 2183.5674]","59":"[2035.4386 11172.7822 2183.6926]","60":"[2522.5188 11010.7588 2183.6052]","61":"[3016.2571 10871.4482 2183.7192]","62":"[3517.4363 10763.1719 2183.5747]","63":"[4023.6621 10684.5186 2183.6309]","64":"[4537.52 10632.8877 2183.6631]","65":"[5052.542 10607.543 2183.6379]","66":"[5567.4814 10599.4297 2183.5935]","67":"[6081.874 10598.7041 2183.6267]","68":"[6595.5952 10598.4854 2183.572]","69":"[7108.6025 10598.4834 2183.5681]","70":"[7620.71 10598.8018 2183.6077]","71":"[8135.8799 10597.71 2183.9919]","72":"[8648.8271 10582.9521 2187.6147]","73":"[9161.4609 10531.8291 2193.5017]","74":"[9665.2617 10424.2939 2198.8354]","75":"[10147.9678 10247.6807 2202.8494]","76":"[10593.1436 9994.2471 2205.4094]","77":"[10928.0996 9716.3984 2206.1265]","78":"[11238.0459 9351.2197 2205.4324]","79":"[11474.0898 8947.3115 2203.2981]","80":"[11658.4922 8468.4629 2199.2959]","81":"[11772.998 7968.3652 2194.0444]","82":"[11829.3574 7458.5215 2187.9988]","83":"[11846.582 6944.0908 2184.4666]","84":"[11848.4297 6430.1445 2183.4929]","85":"[11848.3672 5916.542 2183.6177]","86":"[11847.8809 5399.8955 2183.616]","87":"[11847.8047 4883.9209 2183.5789]","88":"[11847.7598 4367.9668 2183.5774]","89":"[11847.1914 3852.2195 2183.5493]","90":"[11847.2227 3336.8687 2183.5398]","91":"[11847.2236 2822.1174 2183.5574]","92":"[11847.7344 2308.1221 2183.5615]","93":"[11847.8828 1795.5859 2183.613]","94":"[11847.8223 1280.4515 2183.6108]","95":"[11848.6348 763.8422 2184.7883]","96":"[11848.3809 251.7247 2183.5439]","97":"[11848.5137 -260.5886 2183.6128]","98":"[11848.2949 -773.0652 2183.6101]","99":"[11848.1533 -1285.5183 2183.5762]","100":"[11848.3799 -1797.8962 2183.5593]","101":"[11848.2676 -2309.968 2183.5903]","102":"[11848.1758 -2824.8342 2183.5955]","103":"[11848.1777 -3338.6089 2183.5908]","104":"[11847.9814 -3851.1079 2183.4946]","105":"[11848.498 -4366.417 2183.46]","106":"[11847.958 -4879.6206 2183.3655]","107":"[11847.4102 -5394.1265 2183.4875]","108":"[11847.6787 -5909.3438 2184.0012]","109":"[11832.1494 -6422.9282 2187.4155]","110":"[11780.3467 -6933.771 2193.4224]","111":"[11670.543 -7437.1836 2198.6851]","112":"[11491.7275 -7920.0068 2202.6714]","113":"[11235 -8365.5791 2205.1982]","114":"[10951.7764 -8703.5908 2205.8848]","115":"[10605.2861 -8994.7158 2205.1096]","116":"[10161.2539 -9251.585 2202.6926]","117":"[9679.8887 -9429.6592 2198.8091]","118":"[9179.4736 -9538.9795 2193.4082]","119":"[8668.832 -9591.8779 2187.3342]","120":"[8156.8423 -9607.4395 2183.9829]","121":"[7643.3481 -9608.7393 2183.363]","122":"[7131.0723 -9608.7734 2183.3865]","123":"[6617.1401 -9608.1777 2183.3989]","124":"[6103.6855 -9609.2988 2183.3706]","125":"[5591.0444 -9608.7275 2183.3486]","126":"[5079.0059 -9609.4844 2183.3784]","127":"[4565.6221 -9609.0195 2183.3909]","128":"[4051.0591 -9609.2129 2183.3708]","129":"[3536.7214 -9608.6768 2183.3892]","130":"[3023.5017 -9609.7314 2183.363]","131":"[2510.438 -9609.0293 2182.2627]","132":"[1998.6528 -9609.5303 2166.5256]","133":"[1487.1345 -9608.8779 2130.324]","134":"[977.1974 -9609.2168 2078.4348]","135":"[461.6569 -9609.5596 2019.8533]","136":"[-54.4254 -9609.1963 1958.4547]","137":"[-567.7338 -9608.6104 1893.6305]","138":"[-1083.7848 -9609.9482 1826.3782]","139":"[-1597.8562 -9608.3545 1758.5125]","140":"[-2109.1279 -9609.7383 1691.313]","141":"[-2620.1865 -9608.3965 1623.9426]","142":"[-3137.2896 -9610.1582 1555.934]","143":"[-3656.0867 -9608.3379 1487.6254]","144":"[-4172.5142 -9609.8477 1419.6699]","145":"[-4682.6704 -9608.3965 1352.4744]","146":"[-5198.3745 -9609.8662 1284.6366]","147":"[-5717.8096 -9609.042 1216.2461]","148":"[-6239.2612 -9608.7578 1147.6107]","149":"[-6760.9863 -9609.6758 1078.7896]","150":"[-7281.3896 -9608.6582 1010.2283]","151":"[-7798.8984 -9609.2773 942.0769]","152":"[-8311.6963 -9609.4746 876.2144]","153":"[-8836.6631 -9609.293 810.6605]","154":"[-9354.3857 -9610.0166 749.4896]","155":"[-9882.9268 -9609.4482 690.0725]","156":"[-10401.4111 -9609.5225 639.9102]","157":"[-10914.9219 -9603.3115 611.764]","158":"[-11425.75 -9569.8604 601.4255]","159":"[-11933.2441 -9485.25 601.1806]","160":"[-12423.0215 -9333.6318 600.7265]","161":"[-12876.0576 -9100.6152 600.4836]","162":"[-13138.8164 -8901.0283 600.3032]","163":"[-13478.9316 -8533.1621 600.4291]","164":"[-13633.0605 -8293.3594 600.4625]","165":"[-13845.1465 -7825.1738 600.8605]","166":"[-13976.5811 -7329.1694 601.3646]","167":"[-14044.1016 -6821.5215 601.4464]","168":"[-14066.8496 -6309.5229 601.632]","169":"[-14068.7334 -5797.0952 601.6524]","170":"[-14069.0576 -5284.2993 601.5949]","171":"[-14068.3633 -4771.6909 601.5802]","172":"[-14068.8574 -4254.8945 601.452]","173":"[-14068.5117 -3742.3003 601.6402]","174":"[-14068.6299 -3222.6919 601.5264]","175":"[-14068.9609 -2703.9402 601.6282]","176":"[-14069.0039 -2186.0239 601.5381]","177":"[-14069.0781 -1668.9462 601.7004]","178":"[-14079.2012 -1153.0383 601.5154]","179":"[-14123.125 -641.5033 601.4742]","180":"[-14202.4697 -128.2441 601.7414]","181":"[-14299.9736 378.9602 601.6461]","182":"[-14366.5752 893.8428 601.7255]","183":"[-14392.8779 1408.5868 601.9664]","184":"[-14396.8848 1920.8099 602.4749]","185":"[-14396.9648 2435.1023 602.2721]","186":"[-14397.5098 2947.3303 602.1258]","187":"[-14397.2383 3465.4607 602.1396]","188":"[-14396.959 3982.437 602.0383]","189":"[-14396.5273 4498.3843 602.054]","190":"[-14396.5645 5013.2593 602.0964]","191":"[-14397.1484 5527.0737 602.0737]","192":"[-14396.8926 6039.832 602.0735]","193":"[-14396.4863 6558.7065 602.1123]","194":"[-14396.4082 7076.4312 602.0939]","195":"[-14397.1113 7593.0596 602.0641]","196":"[-14397.252 8108.6143 602.0392]","197":"[-14396.6309 8373.1377 602.1128]"},"5":{"1":"[-14625.8848 1865.5366 602.1097]","2":"[-14635.9268 1765.5909 601.9612]","3":"[-14660.167 1253.0879 601.7961]","4":"[-14660.8125 740.3508 601.7195]","5":"[-14660.5645 228.1014 601.7281]","6":"[-14660.6885 -287.7766 601.71]","7":"[-14660.6182 -800.0684 601.641]","8":"[-14661.1563 -1313.3335 601.5435]","9":"[-14661.3037 -1830.8643 601.554]","10":"[-14661.2627 -2347.0422 601.5886]","11":"[-14660.666 -2861.8318 601.5728]","12":"[-14660.6719 -3375.2678 601.5628]","13":"[-14660.4893 -3887.3645 601.6083]","14":"[-14660.5771 -4404.8799 601.5836]","15":"[-14661.0957 -4920.959 601.5769]","16":"[-14661.5342 -5435.5791 601.5778]","17":"[-14660.7998 -5948.7563 601.579]","18":"[-14660.6768 -6466.96 601.751]","19":"[-14642.9316 -6980.7925 601.5986]","20":"[-14586.4697 -7493.5566 601.3467]","21":"[-14468.2793 -7997.2144 601.0026]","22":"[-14273.29 -8474.6084 600.6961]","23":"[-14057.1094 -8817.5859 600.442]","24":"[-13773.208 -9129.6523 600.3568]","25":"[-13464.4551 -9367.7627 600.5098]","26":"[-13050.9688 -9583.7715 600.9323]","27":"[-12558.3359 -9742.4463 601.2108]","28":"[-12049.6563 -9831.2197 601.4603]","29":"[-11536.1084 -9865.7607 601.6046]","30":"[-11022.9189 -9874.9277 607.5931]","31":"[-10504.4102 -9872.8525 632.8416]","32":"[-9993.5723 -9873.3047 678.6151]","33":"[-9475.5635 -9873.6182 735.4446]","34":"[-8957.8779 -9873.0967 796.0153]","35":"[-8445.9453 -9872.8418 858.9866]","36":"[-7930.416 -9873.1436 924.8109]","37":"[-7413.667 -9872.5947 992.8159]","38":"[-6902.4946 -9873.1748 1060.23]","39":"[-6389.9497 -9872.1191 1127.5869]","40":"[-5880.1753 -9873.2646 1194.7665]","41":"[-5366.1279 -9872.4434 1262.4351]","42":"[-4854.73 -9872.8916 1329.7689]","43":"[-4343.8672 -9873.043 1397.1196]","44":"[-3835.709 -9872.6426 1463.8972]","45":"[-3322.6794 -9873.3867 1531.4825]","46":"[-2813.5928 -9873.2441 1598.4814]","47":"[-2303.1672 -9872.6982 1665.6969]","48":"[-1792.5513 -9872.6465 1732.8837]","49":"[-1282.3636 -9872.6455 1800.16]","50":"[-774.3333 -9872.2041 1866.9567]","51":"[-263.5478 -9872.5059 1932.0626]","52":"[246.334 -9872.7129 1994.5103]","53":"[756.8356 -9872.6689 2053.8496]","54":"[1271.5979 -9873.1006 2109.6726]","55":"[1784.7029 -9873.2158 2154.4902]","56":"[2296.2859 -9872.9238 2177.9285]","57":"[2808.9216 -9872.7803 2183.2993]","58":"[3321.5542 -9873.1182 2183.353]","59":"[3838.031 -9873.5107 2183.3259]","60":"[4352.314 -9872.6855 2183.314]","61":"[4864.4268 -9872.3701 2183.3843]","62":"[5380.2246 -9872.4336 2183.3564]","63":"[5893.6943 -9872.8613 2183.3469]","64":"[6410.5381 -9872.624 2183.4365]","65":"[6924.2412 -9872.9746 2183.271]","66":"[7440.8101 -9872.5928 2183.366]","67":"[7954.8901 -9872.6328 2183.3784]","68":"[8467.6826 -9866.3164 2187.7969]","69":"[8978.7441 -9833.6016 2195.7505]","70":"[9488.1416 -9752.1377 2205.354]","71":"[9984.0723 -9611.7236 2212.9507]","72":"[10454.0801 -9402.4043 2218.4038]","73":"[10883.4141 -9120.9395 2221.3767]","74":"[11261.4082 -8764.6846 2221.8943]","75":"[11555.2764 -8369.2188 2219.9358]","76":"[11791.4883 -7905.1523 2215.0388]","77":"[11953.6211 -7417.4019 2208.3618]","78":"[12053.7236 -6908.3418 2199.4089]","79":"[12100.2881 -6394.4282 2189.5806]","80":"[12113.0879 -5874.6187 2184.1038]","81":"[12110.8994 -5362.6128 2183.5198]","82":"[12112.8545 -4841.6851 2183.4558]","83":"[12111.748 -4321.3311 2183.6318]","84":"[12111.6025 -3801.4866 2183.6311]","85":"[12112.2617 -3283.0676 2183.5608]","86":"[12111.833 -2765.1682 2183.6858]","87":"[12111.9277 -2247.717 2183.6536]","88":"[12111.9307 -1730.7247 2183.634]","89":"[12112.0313 -1214.2097 2183.5984]","90":"[12111.6123 -698.1717 2183.623]","91":"[12112.04 -183.3381 2183.7104]","92":"[12111.9766 330.6751 2183.6694]","93":"[12112.4609 844.2044 2183.5935]","94":"[12111.6025 1357.2639 2183.5994]","95":"[12112.0254 1869.847 2183.6406]","96":"[12112.2139 2381.9409 2183.5776]","97":"[12112.0088 2902.8425 2183.5967]","98":"[12111.9424 3423.2954 2183.6025]","99":"[12112.083 3937.0869 2183.6082]","100":"[12111.7686 4451.6694 2183.623]","101":"[12112.2334 4964.4351 2183.5908]","102":"[12111.6299 5476.4932 2183.5913]","103":"[12111.624 5991.8677 2183.5842]","104":"[12111.9541 6505.3809 2183.5977]","105":"[12111.2559 7017.3901 2185.8113]","106":"[12090.7051 7530.4834 2191.821]","107":"[12030.3662 8040.2275 2202.0732]","108":"[11914.5723 8541.498 2210.4153]","109":"[11733.1768 9023.3164 2216.6797]","110":"[11480.292 9471.5635 2220.8577]","111":"[11158.708 9862.7148 2222.0847]","112":"[10769.3574 10196.2041 2220.8665]","113":"[10325.1924 10458.4463 2217.2261]","114":"[9847.5205 10647.1826 2211.2478]","115":"[9349.2725 10770.3975 2203.1511]","116":"[8838.2695 10836.6309 2193.2402]","117":"[8325.876 10859.9561 2186.5708]","118":"[7811.3594 10862.8066 2183.5347]","119":"[7297.3281 10863.0342 2183.5608]","120":"[6780.8882 10863.4453 2183.5364]","121":"[6264.4634 10862.8418 2183.6648]","122":"[5749.2129 10862.2988 2183.522]","123":"[5235.0576 10866.0469 2183.6997]","124":"[4722.6826 10884.2295 2183.5422]","125":"[4205.8013 10926.6768 2183.604]","126":"[3693.7527 10995.8916 2183.5542]","127":"[3187.8765 11093.749 2183.7153]","128":"[2691.3267 11222.3369 2183.6157]","129":"[2198.7527 11381.6709 2183.6455]","130":"[1710.2566 11546.4688 2183.6611]","131":"[1218.6759 11691.9346 2183.8391]","132":"[714.8912 11806.8672 2183.5667]","133":"[207.0916 11890.9873 2183.7271]","134":"[-303.0045 11947.1123 2183.4851]","135":"[-818.7102 11978.6338 2183.6179]","136":"[-1332.1735 11986.3115 2184.1082]","137":"[-1853.3492 11972.5303 2184.7625]","138":"[-2371.7317 11938.627 2185.7795]","139":"[-2887.1387 11885.2813 2186.5952]","140":"[-3398.0029 11809.6328 2187.3813]","141":"[-3903.3323 11709.9736 2188.1147]","142":"[-4401.5381 11584.3936 2188.8127]","143":"[-4889.9775 11430.627 2189.571]","144":"[-5375.4453 11243.2119 2190.0232]","145":"[-5845.1084 11022.6035 2190.3774]","146":"[-6295.5815 10768.1338 2190.8357]","147":"[-6722.1553 10479.7803 2191.0659]","148":"[-7121.478 10158.2637 2191.3228]","149":"[-7497.1841 9797.5176 2191.3433]","150":"[-7839.5352 9406.8896 2191.1775]","151":"[-8146.6846 8989.541 2190.9968]","152":"[-8417.5264 8549.0771 2190.7202]","153":"[-8652.6279 8089.5034 2190.1592]","154":"[-8854.1982 7615.0479 2189.5649]","155":"[-9023.7119 7128.7451 2189.2612]","156":"[-9162.9873 6633.2944 2188.4802]","157":"[-9274.915 6131.1382 2187.8987]","158":"[-9361.582 5624.1201 2187.1069]","159":"[-9424.998 5113.7422 2186.2278]","160":"[-9467.7432 4601.1729 2185.2764]","161":"[-9491.3584 4087.3271 2184.408]","162":"[-9487.9824 3574.0071 2183.5764]","163":"[-9450.7285 3135.2935 2183.3557]"},"6":{"1":"[-14661.2529 1289.0551 601.3632]","2":"[-14661.3242 1390.6449 601.4358]","3":"[-14660.6533 1902.9561 601.982]","4":"[-14660.4951 2418.0994 602.0345]","5":"[-14660.7178 2930.928 602.0794]","6":"[-14660.7803 3443.1968 602.1069]","7":"[-14660.7139 3962.2549 601.7297]","8":"[-14660.3799 4475.8369 602.0261]","9":"[-14661.4189 4989.2061 601.7789]","10":"[-14660.3721 5501.8174 601.8192]","11":"[-14661.126 6016.9404 601.8113]","12":"[-14661.1318 6531.5688 601.7836]","13":"[-14660.4521 7046.8975 601.7117]","14":"[-14660.2842 7560.9629 601.8936]","15":"[-14660.8613 8073.6313 601.892]","16":"[-14660.2383 8585.7725 601.8958]","17":"[-14660.0459 8888.7656 601.6724]"},"7":{"1":"[-14397.0029 8369.708 602.3682]","2":"[-14396.7764 8470.1875 602.0106]","3":"[-14396.1611 8883.6572 601.7681]"},"8":{"1":"[-3828.9419 6520.7744 501.4102]","2":"[-3829.5112 6622.6582 501.5031]","3":"[-3836.3372 7139.6172 501.9857]","4":"[-3909.6292 7647.9932 501.5268]","5":"[-4038.0544 8146.0938 501.6841]","6":"[-4104.582 8655.3359 501.3004]","7":"[-4102.0825 9069.0986 500.8465]"}, +"9":{"1":"[-4092.3381 6740.5806 501.7426]","2":"[-4092.2859 6842.4619 501.4358]","3":"[-4064.3494 7357.6377 501.3824]","4":"[-3959.241 7863.0039 501.6151]","5":"[-3844.3557 8362.9775 501.3433]"}} \ No newline at end of file diff --git a/lua/metrostroi_data/track_gm_mus_orange_metro_h.lua b/lua/metrostroi_data/track_gm_mus_orange_metro_h.lua new file mode 100644 index 0000000..cfa6f5e --- /dev/null +++ b/lua/metrostroi_data/track_gm_mus_orange_metro_h.lua @@ -0,0 +1,3061 @@ + +{ + "1": + { + "1": "[-11100.1367 -4271.1938 2180.2126]", + "2": "[-11098.9746 -4169.895 2180.2129]", + "3": "[-11095.3779 -3656.9695 2181.1274]", + "4": "[-11096.2969 -3142.3914 2180.78]", + "5": "[-11096.71 -2629.8999 2179.9641]", + "6": "[-11095.4834 -2111.1443 2180.1138]", + "7": "[-11096.5449 -1596.3367 2180.439]", + "8": "[-11097.6406 -1081.6606 2180.3411]", + "9": "[-11095.5791 -561.9886 2180.4204]", + "10": "[-11097.3975 -46.1456 2180.4622]", + "11": "[-11097.0752 469.0766 2180.4626]", + "12": "[-11096.1689 983.6792 2180.4353]", + "13": "[-11096.1279 1497.6509 2180.4399]", + "14": "[-11096.123 2011.0228 2180.4297]", + "15": "[-11096.7471 2523.7695 2180.4368]", + "16": "[-11097.0576 3035.8882 2180.4792]", + "17": "[-11097.2148 3556.5298 2180.4875]", + "18": "[-11096.3457 4076.5508 2180.3433]", + "19": "[-11095.6807 4595.894 2179.241]", + "20": "[-11096.9922 5114.4595 2179.4829]", + "21": "[-11096.7051 5632.4214 2179.4753]", + "22": "[-11095.9697 6152.5181 2179.4067]", + "23": "[-11097.0117 6666.0762 2179.1924]", + "24": "[-11090.3369 7181.1514 2179.5027]", + "25": "[-11063.8145 7695.083 2179.678]", + "26": "[-11017.0088 8205.502 2179.439]", + "27": "[-10948.4404 8721.4629 2179.4741]", + "28": "[-10854.3643 9231.0459 2179.2332]", + "29": "[-10735.4004 9732.7129 2179.085]", + "30": "[-10588.9629 10225.791 2179.1719]", + "31": "[-10411.1094 10707.3066 2179.4983]", + "32": "[-10196.6738 11182.8682 2179.512]", + "33": "[-9947.4209 11640.0039 2179.2439]", + "34": "[-9662.2178 12074.3428 2179.5007]", + "35": "[-9341.0928 12480.6924 2179.3196]", + "36": "[-8986.5625 12856.3223 2179.3301]", + "37": "[-8601.2441 13198.2021 2179.1973]", + "38": "[-8188.395 13503.7412 2179.2048]", + "39": "[-7753.3262 13773.748 2179.2139]", + "40": "[-7288.9629 14011.8916 2179.5129]", + "41": "[-6810.5581 14214.585 2179.426]", + "42": "[-6325.7109 14381.415 2179.1553]", + "43": "[-5831.7671 14518.5996 2179.4338]", + "44": "[-5322.2041 14630.4688 2179.1851]", + "45": "[-4812.3618 14714.4082 2179.2947]", + "46": "[-4294.2354 14776.1787 2179.5347]", + "47": "[-3783.603 14815.8486 2179.5654]", + "48": "[-3271.0442 14837.6846 2179.8262]", + "49": "[-2753.1177 14840.7734 2179.7791]", + "50": "[-2234.9587 14835.4004 2145.6111]", + "51": "[-1725.249 14836.2393 2088.7974]", + "52": "[-1213.787 14836.5283 2029.3816]", + "53": "[-695.2698 14835.4199 1967.0916]", + "54": "[-179.6527 14835.9033 1904.262]", + "55": "[333.7664 14838.7285 1840.8175]", + "56": "[846.3547 14836.0098 1777.7302]", + "57": "[1358.0865 14838.6719 1715.0557]", + "58": "[1869.8848 14836.5049 1652.3057]", + "59": "[2381.7256 14836.2285 1589.5964]", + "60": "[2893.5574 14837.3447 1526.5557]", + "61": "[3405 14836.8691 1463.702]", + "62": "[3915.897 14836.8555 1401.2598]", + "63": "[4425.9648 14837.0938 1338.5916]", + "64": "[4936.1411 14837.3477 1276.0498]", + "65": "[5446.3931 14837.4209 1214.0631]", + "66": "[5956.5176 14836.6992 1153.3081]", + "67": "[6466.0942 14837.8379 1095.03]", + "68": "[6985.8037 14837.3623 1041.566]", + "69": "[7501.6528 14837.0264 1002.1379]", + "70": "[8016.98 14836.6875 1001.1177]", + "71": "[8533.6641 14837.4023 1005.8582]", + "72": "[9048.042 14832.4268 1005.8109]", + "73": "[9560.2432 14786.5693 1005.6696]", + "74": "[10064.625 14694.0166 1006.1564]", + "75": "[10562.9453 14544.1045 1005.7282]", + "76": "[11034.2988 14329.916 1005.2463]", + "77": "[11464.5313 14046.4326 1005.8]", + "78": "[11837.4307 13693.8193 1005.7919]", + "79": "[12141.4609 13283.3584 1005.3811]", + "80": "[12378.2646 12818.7207 1005.6477]", + "81": "[12545.9053 12324.2822 1005.6639]", + "82": "[12655.1797 11816.0498 1005.6531]", + "83": "[12713.9297 11303.9639 1006.0576]", + "84": "[12733.8691 10785.5371 1005.8484]", + "85": "[12725.7803 10272.2471 1005.2437]", + "86": "[12725.4561 9757.7451 1005.4825]", + "87": "[12723.8184 9237.4121 1005.4177]", + "88": "[12724.998 8720.4385 1005.503]", + "89": "[12724.6357 8208.3076 1005.3908]", + "90": "[12724.5713 7692.9365 1005.511]", + "91": "[12724.0645 7180.3545 1005.58]", + "92": "[12724.4863 6667.6938 1005.7263]", + "93": "[12725.8203 6155.5288 1005.55]", + "94": "[12717.5156 5642.4399 1005.2709]", + "95": "[12676.6816 5131.1875 1005.3505]", + "96": "[12591.2656 4621.3989 1007.142]", + "97": "[12537.21 4110.9204 1006.3707]", + "98": "[12532.4004 3594.4993 1006.4363]", + "99": "[12539.9873 3078.6987 1007.6318]", + "100": "[12541.1729 2561.0796 1007.4275]", + "101": "[12539.2402 2046.8451 1007.4477]", + "102": "[12538.6611 1533.5872 1007.4056]", + "103": "[12538.6152 1021.2687 1007.4494]", + "104": "[12539.4014 501.8449 1007.3901]", + "105": "[12539.2588 -16.6699 1007.3461]", + "106": "[12539.7676 -534.2176 1007.6736]", + "107": "[12539.8662 -1050.292 1007.5333]", + "108": "[12539.7949 -1568.5862 1007.6148]", + "109": "[12541.1133 -2082.7095 1007.3986]", + "110": "[12540.1523 -2604.5464 1007.3062]", + "111": "[12540.54 -3126.9199 1007.4997]", + "112": "[12539.5244 -3641.5479 1007.5136]", + "113": "[12540.8027 -4166.5112 1007.4437]", + "114": "[12539.6475 -4690.8931 1007.6971]", + "115": "[12540.8057 -5214.6934 1007.4949]", + "116": "[12539.1172 -5737.8867 1007.6147]", + "117": "[12539.7305 -6260.4961 1007.444]", + "118": "[12540.6943 -6782.4951 1007.3651]", + "119": "[12539.2178 -7303.9263 1006.9944]", + "120": "[12525.4707 -7824.5981 1006.9412]", + "121": "[12488.7949 -8343.3818 1007.1144]", + "122": "[12431.4609 -8859.6494 1007.0301]", + "123": "[12350.2793 -9371.7451 1006.3662]", + "124": "[12245.0186 -9879.3691 1007.0984]", + "125": "[12113.668 -10374.9395 1007.1899]", + "126": "[11951.4961 -10865.1074 1007.0645]", + "127": "[11757.1553 -11342.4023 1007.0199]", + "128": "[11529.7256 -11803.8779 1006.7933]", + "129": "[11267.1465 -12244.9141 1006.9586]", + "130": "[10969.6992 -12661.874 1006.8975]", + "131": "[10627.4033 -13061.7305 1007.1509]", + "132": "[10253.2344 -13427.3389 1007.0847]", + "133": "[9847.8252 -13757.0859 1007.1011]", + "134": "[9416.3564 -14049.6035 1007.322]", + "135": "[8963.4863 -14305.0176 1007.196]", + "136": "[8492.7646 -14523.0732 1007.0872]", + "137": "[8009.2832 -14707.7178 1007.0074]", + "138": "[7515.6475 -14859.5254 1007.0889]", + "139": "[7015.1362 -14982.6123 1006.9496]", + "140": "[6509.939 -15079.4268 1007.3874]", + "141": "[6001.7964 -15151.0918 1007.1299]", + "142": "[5491.9385 -15201.4629 1007.226]", + "143": "[4966.6807 -15232.7852 1007.1799]", + "144": "[4441.3774 -15245.0479 1007.0021]", + "145": "[3917.1692 -15242.376 1007.5129]", + "146": "[3394.5513 -15239.7139 1007.2347]", + "147": "[2873.5388 -15240.2939 1007.4756]", + "148": "[2353.1289 -15240.3086 1007.4901]", + "149": "[1830.7568 -15239.75 992.0594]", + "150": "[1313.3593 -15239.9102 939.3878]", + "151": "[802.8832 -15240.708 880.3904]", + "152": "[293.9309 -15240.2803 819.6022]", + "153": "[-223.6608 -15239.873 757.0779]", + "154": "[-742.8773 -15239.8262 693.4501]", + "155": "[-1251.801 -15239.5273 630.5811]", + "156": "[-1767.5809 -15240.3672 567.1665]", + "157": "[-2280.4839 -15241.5537 504.375]", + "158": "[-2797.1589 -15240.4365 442.0003]", + "159": "[-3308.9363 -15240.2627 381.2015]", + "160": "[-3820.5208 -15239.5801 323.52]", + "161": "[-4335.1147 -15240.5195 272.2669]", + "162": "[-4853.0928 -15239.2793 238.3352]", + "163": "[-5370.4736 -15240.998 242.3682]", + "164": "[-5884.9683 -15239.625 245.5996]", + "165": "[-6400.2295 -15234.7285 245.073]", + "166": "[-6914.4375 -15209.0654 245.0658]", + "167": "[-7424.9849 -15163.0215 245.0344]", + "168": "[-7937.7354 -15095.4482 244.8433]", + "169": "[-8451.6719 -15001.876 245.2991]", + "170": "[-8953.3975 -14883.75 245.3692]", + "171": "[-9446.3789 -14737.3555 245.3692]", + "172": "[-9927.9346 -14560.5723 245.2672]", + "173": "[-10407.585 -14345.8555 244.9908]", + "174": "[-10867.7354 -14094.6289 244.9813]", + "175": "[-11304.9727 -13807.8594 244.9609]", + "176": "[-11714.7461 -13484.625 244.8977]", + "177": "[-12092.8525 -13126.5137 245.0242]", + "178": "[-12437.3262 -12737.6387 245.3845]", + "179": "[-12741.9561 -12324.7148 245.0431]", + "180": "[-13013.168 -11886.2617 245.0884]", + "181": "[-13250.6104 -11421.4678 244.929]", + "182": "[-13452.9551 -10940.9297 244.9155]", + "183": "[-13620.1201 -10454.3145 245.0109]", + "184": "[-13757.6982 -9952.0391 244.9516]", + "185": "[-13866.7227 -9448.6123 245.6634]", + "186": "[-13948.5859 -8939.9883 245.2396]", + "187": "[-14010.251 -8417.1201 245.211]", + "188": "[-14049.0391 -7905.3564 245.5152]", + "189": "[-14069.4785 -7389.6948 244.9009]", + "190": "[-14072.4854 -6874.6392 246.032]", + "191": "[-14068.6563 -6361.6509 246.1157]", + "192": "[-14068.4375 -5837.21 245.237]", + "193": "[-14068.2676 -5313.6328 245.4688]", + "194": "[-14066.7402 -4790.5996 245.4555]", + "195": "[-14068.2793 -4268.1045 245.4812]", + "196": "[-14068.7725 -3746.1768 245.4791]", + "197": "[-14067.6113 -3224.7939 245.3861]", + "198": "[-14067.876 -2703.9819 245.6372]", + "199": "[-14068.5811 -2183.7212 245.4973]", + "200": "[-14067.54 -1664.0131 245.3794]", + "201": "[-14068.5039 -1144.8761 245.7411]", + "202": "[-14067.9727 -626.5569 246.9232]", + "203": "[-14035.8857 -111.2735 245.1014]", + "204": "[-13956.1455 397.0955 246.0855]", + "205": "[-13823.6875 893.2045 245.8312]", + "206": "[-13631.4199 1367.8212 245.5181]", + "207": "[-13363.9365 1817.5654 245.9565]", + "208": "[-13024.7861 2213.7305 245.7435]", + "209": "[-12652.9746 2518.8638 246.0828]", + "210": "[-12204.3711 2776.793 245.741]", + "211": "[-11724.9756 2964.2078 245.5938]", + "212": "[-11221.2207 3089.2668 245.5651]", + "213": "[-10712.1602 3164.3357 245.7726]", + "214": "[-10190.5576 3197.0068 245.7606]", + "215": "[-9669.1523 3195.4924 240.2352]", + "216": "[-9155.5947 3190.3452 196.2552]", + "217": "[-8640.3672 3189.5574 137.5101]", + "218": "[-8125.6265 3189.668 77.0159]", + "219": "[-7610.2886 3189.7725 14.8174]", + "220": "[-7096.4771 3191.0764 -46.0149]", + "221": "[-6588.042 3190.4622 -108.2418]", + "222": "[-6073.0679 3190.2979 -167.7192]", + "223": "[-5553.3745 3189.8435 -222.6863]", + "224": "[-5031.5127 3189.5891 -265.782]", + "225": "[-4512.522 3189.1184 -273.503]", + "226": "[-3988.6582 3190.7109 -266.5653]", + "227": "[-3463.4329 3189.3704 -266.1635]", + "228": "[-2938.8564 3189.7217 -266.4442]", + "229": "[-2416.0171 3189.5701 -256.3795]", + "230": "[-1900.666 3190.2695 -205.7483]", + "231": "[-1376.0979 3190.3496 -145.5676]", + "232": "[-851.3627 3189.9995 -82.9227]", + "233": "[-332.678 3189.0547 -20.4259]", + "234": "[190.6389 3190.1487 43.4055]", + "235": "[712.2358 3189.6582 107.7266]", + "236": "[1230.5104 3189.6709 171.3469]", + "237": "[1743.6852 3191.0776 234.365]", + "238": "[2263.9863 3190.8679 297.6582]", + "239": "[2774.8359 3190.3518 357.9098]", + "240": "[3287.4121 3190.4692 415.919]", + "241": "[3799.8955 3190.7542 467.0747]", + "242": "[4312.2617 3190.3989 502.0981]", + "243": "[4829.7236 3191.4453 498.9591]", + "244": "[5347.4883 3189.9578 495.4474]", + "245": "[5862.1138 3190.4695 495.5384]", + "246": "[6375.2397 3188.9263 495.6763]", + "247": "[6890.876 3190.6475 495.3054]", + "248": "[7413.124 3189.926 495.464]", + "249": "[7939.1182 3189.2856 495.3977]", + "250": "[8462.4844 3189.811 495.4599]", + "251": "[8986.1641 3190.707 495.4472]", + "252": "[9500.1836 3190.8647 495.4781]", + "253": "[10020.7764 3200.8525 495.6092]", + "254": "[10537.6436 3259.0122 495.5634]", + "255": "[11044.7715 3366.105 495.4755]", + "256": "[11535.3525 3529.6438 495.9234]", + "257": "[11996.6025 3759.9106 495.4967]", + "258": "[12413.4287 4059.8933 495.5232]", + "259": "[12770.1123 4427.0562 495.6462]", + "260": "[13056.082 4848.8345 495.2838]", + "261": "[13275.2461 5318.167 495.2916]", + "262": "[13427.4023 5810.396 495.935]", + "263": "[13523.0244 6314.2603 495.5545]", + "264": "[13575.0137 6833.5835 495.8837]", + "265": "[13586.9639 7354.0508 495.4982]", + "266": "[13579.001 7872.1948 496.1591]", + "267": "[13578.6699 8388.585 495.9108]", + "268": "[13578.2207 8903.8174 495.7853]", + "269": "[13577.7598 9418.5137 495.9039]", + "270": "[13577.4541 9932.6973 495.8843]", + "271": "[13543.1621 10444.6309 495.5569]", + "272": "[13443.8213 10957.5771 495.6917]", + "273": "[13266.6621 11448.002 495.3916]", + "274": "[13018.1396 11879.1094 495.6591]", + "275": "[12837.4551 12094.6299 495.0806]", + "276": "[12451.3145 12418.751 495.0487]", + "277": "[12220.3555 12552.0195 495.1996]", + "278": "[11740.2939 12741.5361 495.3248]", + "279": "[11233.0195 12853.2451 495.7099]", + "280": "[10722.1826 12905.751 495.9369]", + "281": "[10201.8916 12913.0898 495.2965]", + "282": "[9683.9434 12902.3799 495.2586]", + "283": "[9167.0947 12901.2656 495.4256]", + "284": "[8650.8545 12903.4873 495.3984]", + "285": "[8135.2095 12901.6289 495.3767]", + "286": "[7620.1543 12903.5107 495.4002]", + "287": "[7105.6938 12903.1201 495.6082]", + "288": "[6591.812 12902.8291 495.4301]", + "289": "[6078.5298 12902.1279 495.4813]", + "290": "[5565.7861 12903.3965 495.4937]", + "291": "[5053.5786 12902.0615 495.4845]", + "292": "[4531.8696 12902.8525 495.4662]", + "293": "[4010.7073 12901.4365 495.3425]", + "294": "[3490.1074 12903.2383 495.4919]", + "295": "[2970.8037 12901.1738 495.7603]", + "296": "[2453.2576 12903.2744 495.9353]", + "297": "[1937.4696 12903.1201 495.9271]", + "298": "[1421.5168 12901.5957 495.8713]", + "299": "[905.1932 12902.7715 495.9848]", + "300": "[391.1395 12902.7666 495.6742]", + "301": "[-122.0825 12903.9229 495.4318]", + "302": "[-642.4429 12902.416 495.3444]", + "303": "[-1158.6111 12903.0781 495.7565]", + "304": "[-1671.2267 12861.9551 495.6544]", + "305": "[-2175.928 12759.1719 495.98]", + "306": "[-2657.7666 12584.5459 495.267]", + "307": "[-3046.7463 12360.0234 495.3524]", + "308": "[-3306.0176 12142.3594 495.1129]", + "309": "[-3577.8623 11817.998 495.1136]", + "310": "[-3774.0513 11476.6289 495.1322]", + "311": "[-3953.2498 10996.748 495.5509]", + "312": "[-4058.2903 10485.085 495.9714]", + "313": "[-4102.3477 9967.9707 495.7834]", + "314": "[-4103.1509 9448.9736 495.9624]", + "315": "[-4092.7273 8932.9375 495.9339]", + "316": "[-4092.2004 8411.5352 496.3115]", + "317": "[-4094.3745 7891.9014 496.4478]", + "318": "[-4093.925 7378.2212 496.3699]", + "319": "[-4093.52 6865.0532 496.5514]", + "320": "[-4092.3477 6352.4185 496.4487]", + "321": "[-4093.3694 5840.3125 496.636]", + "322": "[-4094.4163 5317.0757 496.3449]", + "323": "[-4093.7151 4794.3584 496.4086]", + "324": "[-4093.3862 4272.1807 496.3616]", + "325": "[-4094.5759 3750.5181 496.5713]", + "326": "[-4092.7434 3229.4131 496.3755]", + "327": "[-4093.4636 2710.5903 496.4431]", + "328": "[-4094.1699 2195.448 496.5046]", + "329": "[-4093.2129 1679.8882 496.4994]", + "330": "[-4093.5115 1165.0343 496.4495]", + "331": "[-4093.3145 650.9342 496.4268]", + "332": "[-4081.6909 137.8368 496.4484]", + "333": "[-4009.78 -369.7419 496.3924]", + "334": "[-3862.3755 -867.6724 496.5541]", + "335": "[-3639.5681 -1314.2271 496.2848]", + "336": "[-3430.0415 -1596.6322 496.5111]", + "337": "[-3150.9082 -1860.377 496.4303]", + "338": "[-2818.5713 -2079.1355 496.5321]", + "339": "[-2402.821 -2258.1697 496.4669]", + "340": "[-1904.4995 -2382.8059 496.683]", + "341": "[-1391.0979 -2442.6162 496.7332]", + "342": "[-877.4613 -2450.907 496.8304]", + "343": "[-358.8502 -2440.8193 496.6682]", + "344": "[157.5851 -2440.5588 496.7511]", + "345": "[672.7788 -2441.9587 496.4565]", + "346": "[1186.6069 -2441.9607 496.5033]", + "347": "[1699.4722 -2440.4126 496.4704]", + "348": "[2219.3958 -2441.1841 496.9365]", + "349": "[2738.3164 -2441.8152 496.7978]", + "350": "[3259.1724 -2440.6296 496.7457]", + "351": "[3779.6348 -2442.0093 496.6306]", + "352": "[4295.3364 -2441.0701 496.6445]", + "353": "[4810.5669 -2442.1968 496.7713]", + "354": "[5325.3184 -2441.5515 496.8041]", + "355": "[5839.5728 -2442.2532 496.7237]", + "356": "[6353.3359 -2441.5347 496.7818]", + "357": "[6866.5737 -2440.9307 496.7964]", + "358": "[7379.313 -2442.0149 496.7676]", + "359": "[7891.5542 -2440.677 496.6664]", + "360": "[8414.4365 -2442.1643 496.9307]", + "361": "[8936.7988 -2441.1719 496.7092]", + "362": "[9458.6641 -2441.4875 496.7786]", + "363": "[9980.0469 -2442.0649 496.7054]", + "364": "[10500.8857 -2440.5662 496.8484]", + "365": "[11020.8662 -2440.6299 496.743]", + "366": "[11539.9307 -2441.1213 495.4004]", + "367": "[12057.04 -2488.8254 488.4616]", + "368": "[12562.6455 -2610.9438 484.8885]", + "369": "[12968.7568 -2789.1101 481.5084]", + "370": "[13273.5127 -2992.9819 480.0962]", + "371": "[13490.375 -3201.5603 479.7185]", + "372": "[13705.8018 -3497.9343 480.8105]", + "373": "[13855.6416 -3805.3181 482.4489]", + "374": "[14002.4463 -4306.6675 486.9545]", + "375": "[14070.375 -4816.9009 491.9109]", + "376": "[14084.1631 -5333.5957 497.3723]", + "377": "[14072.8428 -5848.9814 497.792]", + "378": "[14073.0762 -6374.8389 496.6825]", + "379": "[14070.2744 -6901.0322 496.5927]", + "380": "[14072.3975 -7417.1934 496.7704]", + "381": "[14071.9463 -7943.8486 496.3058]", + "382": "[14069.6934 -8456.7451 496.3986]", + "383": "[14072.7852 -8968.9531 496.3741]", + "384": "[14070.4502 -9496.9697 496.5602]", + "385": "[14071.3018 -10024.0264 496.4693]", + "386": "[14072.2295 -10536.4658 496.7027]", + "387": "[14071.8809 -11052.4834 496.181]", + "388": "[14072.083 -11567.1934 497.3867]", + "389": "[14055.5566 -12080.0771 491.9163]", + "390": "[13968.9756 -12586.7803 486.0164]", + "391": "[13801.7266 -13072.7266 482.9975]", + "392": "[13634.917 -13373.3887 480.9328]", + "393": "[13389.0264 -13675.6621 480.4411]", + "394": "[13206.4492 -13833.5645 480.427]", + "395": "[12813.4844 -14067.249 482.0922]", + "396": "[12505.9082 -14183.5205 484.564]", + "397": "[12002.7754 -14293.9541 489.184]", + "398": "[11485.3145 -14338.8262 494.2917]", + "399": "[10971.6865 -14335.3623 493.6435]", + "400": "[10459.6133 -14328.1836 447.759]", + "401": "[9940.3574 -14326.9854 389.4659]", + "402": "[9427.8613 -14327.4639 329.3674]", + "403": "[8917.7031 -14326.834 267.3404]", + "404": "[8403.3574 -14328.1953 205.1416]", + "405": "[7890.1792 -14328.5107 141.5217]", + "406": "[7371.0718 -14327.9775 77.7244]", + "407": "[6861.1787 -14327.5068 15.0782]", + "408": "[6352.8882 -14326.96 -47.164]", + "409": "[5836.4766 -14327.8105 -110.8431]", + "410": "[5326.6812 -14328.4502 -173.2959]", + "411": "[4812.5181 -14327.2998 -236.5763]", + "412": "[4293.7778 -14328.5205 -299.4064]", + "413": "[3784.5205 -14327.3809 -360.8681]", + "414": "[3275.6235 -14327.8213 -420.2464]", + "415": "[2755.8975 -14328.8662 -476.255]", + "416": "[2236.4375 -14328.502 -522.0208]", + "417": "[1724.4121 -14327.8662 -535.2057]", + "418": "[1203.3174 -14326.6221 -527.5856]", + "419": "[681.6441 -14326.9932 -527.6021]", + "420": "[160.7367 -14328.0254 -527.4644]", + "421": "[-359.6023 -14327.4902 -527.5428]", + "422": "[-879.043 -14327.4961 -527.3443]", + "423": "[-1397.5942 -14326.751 -527.5434]", + "424": "[-1915.4968 -14326.5137 -527.6686]", + "425": "[-2432.5427 -14327.6934 -527.3376]", + "426": "[-2948.9875 -14327.0264 -527.6733]", + "427": "[-3464.4719 -14327.0059 -527.0775]", + "428": "[-3978.3525 -14327.9717 -527.3365]", + "429": "[-4490.5674 -14328.2471 -527.1739]", + "430": "[-5011.3345 -14328.2412 -527.2059]", + "431": "[-5531.1587 -14326.793 -527.1992]", + "432": "[-6050.3882 -14327.7734 -527.2418]", + "433": "[-6570.6406 -14320.1309 -528.0558]", + "434": "[-7084.5723 -14293.3135 -528.8932]", + "435": "[-7606.6602 -14244.3398 -530.3453]", + "436": "[-8127.7373 -14172.8271 -530.9077]", + "437": "[-8637.126 -14076.4482 -532.0497]", + "438": "[-9140.0811 -13953.3213 -533.1526]", + "439": "[-9635.6621 -13800.2158 -533.8422]", + "440": "[-10119.5938 -13615.3135 -534.1922]", + "441": "[-10595.3115 -13392.2939 -534.4762]", + "442": "[-11051.2529 -13132.3408 -534.6834]", + "443": "[-11482.3799 -12834.9961 -535.6485]", + "444": "[-11883.874 -12500.3857 -535.5839]", + "445": "[-12252.3281 -12131.7041 -535.8148]", + "446": "[-12584.5928 -11731.6631 -535.6063]", + "447": "[-12879.2295 -11304.748 -535.0862]", + "448": "[-13135.0859 -10855.0547 -534.7666]", + "449": "[-13356.2686 -10384.8984 -534.3616]", + "450": "[-13540.7822 -9904.7734 -533.8519]", + "451": "[-13696.6729 -9402.8564 -532.9894]", + "452": "[-13819.8311 -8903.1885 -531.8904]", + "453": "[-13916.7646 -8385.5166 -531.0488]", + "454": "[-13987.2861 -7870.6738 -530.3185]", + "455": "[-14037.0039 -7349.4565 -529.5064]", + "456": "[-14065.4102 -6828.2095 -528.533]", + "457": "[-14076.1133 -6307.6816 -527.5316]", + "458": "[-14073.1396 -5788.0693 -527.3694]", + "459": "[-14070.5654 -5269.4556 -527.3398]", + "460": "[-14072.4219 -4751.7568 -527.4345]", + "461": "[-14071.4063 -4227.6523 -527.136]", + "462": "[-14071.0244 -3709.7463 -527.5027]", + "463": "[-14071.4561 -3192.4248 -527.322]", + "464": "[-14071.8008 -2675.6409 -527.5914]", + "465": "[-14071.4229 -2159.2253 -527.3274]", + "466": "[-14070.4619 -1636.3652 -527.3846]", + "467": "[-14072.0498 -1117.3594 -527.4135]", + "468": "[-14062.9766 -596.4515 -527.3048]", + "469": "[-14025.5791 -75.3383 -527.2101]", + "470": "[-13960.1182 433.1572 -527.4711]", + "471": "[-13865.2568 937.5886 -527.4245]", + "472": "[-13739.5234 1434.4187 -527.5447]", + "473": "[-13582.1768 1925.3204 -527.2596]", + "474": "[-13396.2646 2403.5449 -527.4811]", + "475": "[-13233.6631 2903.1812 -526.5489]", + "476": "[-13116.5889 3409.5537 -527.4717]", + "477": "[-13030.8232 3924.8374 -527.369]", + "478": "[-12974.6172 4442.9595 -527.5612]", + "479": "[-12942.4834 4961.9922 -527.4637]", + "480": "[-12936.9844 5481.1216 -527.491]", + "481": "[-12942.6123 5999.2158 -527.7488]", + "482": "[-12934.2314 6516.1445 -527.2855]", + "483": "[-12903.2803 7031.6152 -527.5745]", + "484": "[-12850.3926 7544.5591 -527.5963]", + "485": "[-12776.9326 8054.1128 -527.3517]", + "486": "[-12679.0713 8558.3359 -528.1411]", + "487": "[-12554.5938 9055.375 -527.7448]", + "488": "[-12396.418 9559.5869 -527.4485]", + "489": "[-12204.6299 10051.04 -527.6102]", + "490": "[-11978.6699 10526.6377 -527.3902]", + "491": "[-11716.5801 10982.1348 -527.5101]", + "492": "[-11417.2383 11412.7061 -527.4501]", + "493": "[-11082.6143 11814.4756 -527.6271]", + "494": "[-10714.4326 12183.7705 -527.4932]", + "495": "[-10315.1875 12517.3447 -527.5145]", + "496": "[-9889.4746 12814.0391 -527.3986]", + "497": "[-9441.6367 13073.5713 -527.6002]", + "498": "[-8976.0615 13296.7158 -527.3459]", + "499": "[-8496.8252 13485.5234 -527.3549]", + "500": "[-8007.6792 13643.0625 -527.0645]", + "501": "[-7510.9243 13770.1426 -527.3114]", + "502": "[-6992.8325 13873.2295 -527.4513]", + "503": "[-6471.4512 13950.9746 -527.3566]", + "504": "[-5947.9507 14004.4678 -527.4849]", + "505": "[-5423.6787 14037.6689 -527.5909]", + "506": "[-4899.4185 14051.3486 -527.4518]", + "507": "[-4372.7495 14050.002 -527.3997]", + "508": "[-3857.001 14047.3398 -527.5778]", + "509": "[-3334.7544 14047.1631 -527.6392]", + "510": "[-2809.6968 14047.5303 -527.6935]", + "511": "[-2295.5913 14048.083 -527.4135]", + "512": "[-1774.9117 14046.5752 -527.4384]", + "513": "[-1250.6162 14047.9688 -527.4763]", + "514": "[-727.3239 14047.2451 -527.76]", + "515": "[-207.2337 14047.751 -527.4702]", + "516": "[321.748 14047.5137 -527.6218]", + "517": "[837.6732 14046.7813 -527.479]", + "518": "[1354.9888 14047.8965 -527.5881]", + "519": "[1870.842 14047.3584 -527.628]", + "520": "[2394.6006 14047.3613 -527.5798]", + "521": "[2913.0981 14047.6875 -527.5986]", + "522": "[3433.4849 14046.7393 -527.6157]", + "523": "[3951.9136 14048.5703 -527.5529]", + "524": "[4470.271 14047.4707 -527.5471]", + "525": "[4986.4067 14042.168 -527.5223]", + "526": "[5502.1748 14017.3955 -527.5911]", + "527": "[6015.5469 13970.6719 -527.6981]", + "528": "[6534.8936 13901.4219 -527.503]", + "529": "[7051.0439 13807.0986 -527.4744]", + "530": "[7560.4536 13685.8916 -527.4755]", + "531": "[8061.252 13535.9199 -527.4568]", + "532": "[8550.2842 13353.7314 -526.8027]", + "533": "[9024.2949 13138.5771 -527.2139]", + "534": "[9479.5098 12888.1055 -527.3693]", + "535": "[9912.0303 12602.0635 -527.5062]", + "536": "[10316.8369 12279.6299 -527.6019]", + "537": "[10690.9971 11923.9004 -527.5176]", + "538": "[11031.2236 11537.1904 -527.4003]", + "539": "[11335.7852 11123.3545 -527.2576]", + "540": "[11604.2959 10686.7305 -527.4995]", + "541": "[11842.9131 10217.0479 -527.5484]", + "542": "[12044.9834 9732.3496 -527.5492]", + "543": "[12213.1074 9236.3682 -527.4271]", + "544": "[12350.376 8732.125 -527.5472]", + "545": "[12458.4951 8222.001 -527.5401]", + "546": "[12540.71 7708.0562 -527.6064]", + "547": "[12600.1338 7192.2324 -527.2901]", + "548": "[12638.1191 6675.1914 -526.899]", + "549": "[12657.2012 6158.1709 -527.3466]", + "550": "[12658.9951 5641.5571 -527.4124]", + "551": "[12655.5498 5125.7705 -527.2944]", + "552": "[12654.9795 4610.6377 -527.3669]", + "553": "[12655.1123 4096.1074 -527.4044]", + "554": "[12656.1455 3582.2373 -527.787]", + "555": "[12655.3076 3060.9712 -527.4039]", + "556": "[12655.0313 2539.6284 -527.5738]", + "557": "[12654.6846 2026.7682 -527.3248]", + "558": "[12654.8359 1514.3903 -527.621]", + "559": "[12656.2998 991.1633 -527.397]", + "560": "[12655.3408 468.7961 -527.4839]", + "561": "[12654.127 -52.9618 -527.3939]", + "562": "[12654.3682 -574.2173 -527.3163]", + "563": "[12654.7656 -1094.9619 -527.481]", + "564": "[12655.5 -1615.1792 -527.4648]", + "565": "[12654.9404 -2134.8533 -527.6874]", + "566": "[12654.626 -2653.9844 -527.5029]", + "567": "[12655.1084 -3172.6042 -527.5356]", + "568": "[12655.5049 -3690.2798 -527.5665]", + "569": "[12656.3564 -4207.3862 -527.6254]", + "570": "[12655.7666 -4723.9731 -527.4357]", + "571": "[12655.6592 -5240.0537 -527.3476]", + "572": "[12654.8828 -5755.2651 -527.5514]", + "573": "[12655.5186 -6269.772 -527.2855]", + "574": "[12654.9902 -6783.8013 -527.6448]", + "575": "[12655.3975 -7297.3203 -527.3614]", + "576": "[12655.752 -7810.3462 -527.5082]", + "577": "[12634.9678 -8322.4551 -528.0278]", + "578": "[12547.1582 -8827.9482 -527.8354]", + "579": "[12386.9053 -9314.7588 -527.5621]", + "580": "[12168.7021 -9719.1826 -527.9289]", + "581": "[11942.0986 -10004.7002 -528.1204]", + "582": "[11648.5732 -10263.7607 -528.0125]", + "583": "[11301.9785 -10474.5117 -528.0573]", + "584": "[10831.1787 -10657.1934 -527.1775]", + "585": "[10323.083 -10767.0762 -525.616]", + "586": "[9808.0273 -10801.1045 -528.2549]", + "587": "[9291.1162 -10801.252 -527.8065]", + "588": "[8777.4922 -10787.6162 -528.4597]", + "589": "[8257.5225 -10792.0361 -533.7808]", + "590": "[7736.9609 -10791.5127 -580.0528]", + "591": "[7223.522 -10790.1738 -638.5864]", + "592": "[6706.9653 -10791.085 -699.5051]", + "593": "[6198.6245 -10789.3584 -760.9179]", + "594": "[5689.4521 -10791.4932 -822.3278]", + "595": "[5169.3345 -10790.7236 -887.1081]", + "596": "[4654.5142 -10790.5967 -948.4692]", + "597": "[4141.6489 -10791.4199 -1013.5099]", + "598": "[3627.063 -10790.8193 -1076.2386]", + "599": "[3117.6548 -10791.0967 -1139.0663]", + "600": "[2603.1638 -10791.6836 -1201.3788]", + "601": "[2087.9475 -10791.4854 -1262.9268]", + "602": "[1571.8423 -10791.0908 -1322.6639]", + "603": "[1061.9302 -10790.9131 -1375.7484]", + "604": "[539.6411 -10790.8965 -1418.1774]", + "605": "[25.4273 -10791.4697 -1424.0709]", + "606": "[-496.0541 -10791.541 -1417.4974]", + "607": "[-1019.0236 -10791.3672 -1417.4785]", + "608": "[-1541.4392 -10792.125 -1417.6592]", + "609": "[-2063.2908 -10790.835 -1417.5161]", + "610": "[-2584.6182 -10792.0088 -1417.6384]", + "611": "[-3105.0579 -10791.8145 -1417.4976]", + "612": "[-3619.5107 -10790.9219 -1417.5972]", + "613": "[-4141.7803 -10788.5889 -1417.4449]", + "614": "[-4663.1621 -10766.9053 -1417.3596]", + "615": "[-5182.6201 -10722.5596 -1417.5586]", + "616": "[-5698.7266 -10657.1201 -1417.3004]", + "617": "[-6210.0039 -10568.5166 -1416.7814]", + "618": "[-6715.2788 -10454.6143 -1417.4255]", + "619": "[-7209.957 -10311.9297 -1417.6472]", + "620": "[-7693.4111 -10140.8203 -1417.7095]", + "621": "[-8174.1963 -9930.5527 -1417.6284]", + "622": "[-8637.2969 -9686.0361 -1417.8833]", + "623": "[-9077.7383 -9405.0068 -1417.812]", + "624": "[-9491.5938 -9087.8457 -1417.5168]", + "625": "[-9874.583 -8735.7227 -1417.5751]", + "626": "[-10224.0625 -8351.8535 -1417.7367]", + "627": "[-10536.6807 -7940.7627 -1417.4711]", + "628": "[-10812.7021 -7506.1729 -1417.4041]", + "629": "[-11051.5381 -7051.377 -1417.2689]", + "630": "[-11256.6094 -6578.9458 -1417.626]", + "631": "[-11431.458 -6086.9219 -1417.4628]", + "632": "[-11573.6035 -5589.7217 -1417.4774]", + "633": "[-11688.0098 -5082.7036 -1417.5265]", + "634": "[-11775.9043 -4571.623 -1417.5889]", + "635": "[-11840.2344 -4058.031 -1417.5299]", + "636": "[-11882.8926 -3542.9971 -1417.1372]", + "637": "[-11906.4355 -3027.5234 -1417.5049]", + "638": "[-11912.0215 -2512.6274 -1417.3849]", + "639": "[-11900.8145 -1998.6249 -1417.3041]", + "640": "[-11870.918 -1486.1741 -1417.0079]", + "641": "[-11821.457 -976.3759 -1417.7671]", + "642": "[-11748.7139 -455.0961 -1417.3501]", + "643": "[-11650.624 61.1027 -1417.4163]", + "644": "[-11525.46 570.4421 -1417.5262]", + "645": "[-11369.8721 1070.5022 -1417.7693]", + "646": "[-11182.5078 1558.3193 -1417.4171]", + "647": "[-10960.9385 2030.6222 -1417.4996]", + "648": "[-10704.7959 2483.4548 -1417.2692]", + "649": "[-10412.126 2912.248 -1417.2897]", + "650": "[-10084.3311 3313.3567 -1417.5481]", + "651": "[-9722.5225 3682.4653 -1417.7205]", + "652": "[-9330.7793 4017.7104 -1417.4204]", + "653": "[-8912.1104 4316.3452 -1417.5519]", + "654": "[-8471.374 4578.853 -1417.4794]", + "655": "[-7999.4248 4811.7158 -1417.5116]", + "656": "[-7512.584 5008.3599 -1417.4355]", + "657": "[-7014.6763 5171.3462 -1417.4604]", + "658": "[-6508.9517 5303.7563 -1417.4775]", + "659": "[-5997.6118 5407.584 -1417.3467]", + "660": "[-5482.7915 5486.4678 -1417.5199]", + "661": "[-4965.7554 5542.0449 -1417.5973]", + "662": "[-4447.666 5576.2085 -1417.658]", + "663": "[-3929.7788 5592.4814 -1417.3835]", + "664": "[-3412.5474 5592.1582 -1417.6975]", + "665": "[-2896.3123 5589.5835 -1416.8057]", + "666": "[-2380.6335 5589.0806 -1417.275]", + "667": "[-1866.2179 5589.7446 -1417.6398]", + "668": "[-1352.9586 5589.2075 -1417.3247]", + "669": "[-840.7411 5588.2451 -1417.3307]", + "670": "[-314.9498 5589.0835 -1417.7925]", + "671": "[209.8162 5588.4688 -1417.3252]", + "672": "[734.0241 5589.9141 -1417.6193]", + "673": "[1257.6556 5589.4028 -1417.4918]", + "674": "[1780.7009 5588.4019 -1417.528]", + "675": "[2303.1726 5589.0747 -1417.3936]", + "676": "[2825.0969 5588.6216 -1417.6115]", + "677": "[3346.4419 5588.1968 -1417.5363]", + "678": "[3859.6072 5588.4731 -1417.4821]", + "679": "[4377.0903 5588.98 -1417.4926]", + "680": "[4890.7612 5588.9814 -1417.5145]", + "681": "[5407.1753 5589.2861 -1417.6283]", + "682": "[5922.9092 5588.4521 -1417.5338]", + "683": "[6437.9478 5589.1489 -1417.5773]", + "684": "[6951.248 5588.1704 -1417.5331]", + "685": "[7465.2778 5574.6709 -1417.4429]", + "686": "[7972.5371 5499.7217 -1417.6215]", + "687": "[8469.7842 5352.0835 -1418.2563]", + "688": "[8932.6895 5124.4976 -1418.693]", + "689": "[9250.9814 4890.7759 -1418.2322]", + "690": "[9476.0645 4654.2637 -1418.7052]", + "691": "[9745.1426 4247.9668 -1418.326]", + "692": "[9888.0146 3918.4976 -1418.1516]", + "693": "[10024.9961 3423.6924 -1418.0403]", + "694": "[10095.4834 2915.2893 -1417.3392]", + "695": "[10115.3545 2401.085 -1417.3926]", + "696": "[10105.0352 1883.616 -1417.712]", + "697": "[10104.4082 1369.1523 -1417.5497]", + "698": "[10104.1582 855.884 -1417.4026]", + "699": "[10104.7539 340.7672 -1417.5389]", + "700": "[10104.1885 -179.8 -1417.5515]", + "701": "[10104.6797 -692.7329 -1417.5944]", + "702": "[10103.8271 -1204.9595 -1417.6511]", + "703": "[10103.5938 -1725.3356 -1417.5692]", + "704": "[10104.5781 -2245 -1417.4977]", + "705": "[10103.6426 -2763.9805 -1417.9187]", + "706": "[10104.6299 -3278.1223 -1452.3805]", + "707": "[10104.0352 -3790.7866 -1509.4521]", + "708": "[10104.2012 -4303.3096 -1569.1987]", + "709": "[10103.5781 -4815.9258 -1630.699]", + "710": "[10104.8311 -5327.8105 -1692.3903]", + "711": "[10106.1377 -5838.229 -1750.2621]", + "712": "[10105.5869 -6353.9473 -1808.4283]", + "713": "[10105.4287 -6865.8477 -1867.0726]", + "714": "[10103.8936 -7377.8022 -1925.5486]", + "715": "[10104.2412 -7890.4941 -1988.1229]", + "716": "[10105.1504 -8400.6914 -2048.1421]", + "717": "[10104.0557 -8911.8105 -2104.0354]", + "718": "[10104.377 -9426.9805 -2150.8787]", + "719": "[10105.1602 -9940.1475 -2170.5435]", + "720": "[10105.4248 -10455.9414 -2162.76]", + "721": "[10104.6211 -10969.832 -2160.7891]", + "722": "[10080.8789 -11481.5313 -2161.5798]", + "723": "[10008.8789 -11995.4619 -2161.0952]", + "724": "[9884.5195 -12496.9619 -2161.6338]", + "725": "[9702.3408 -12977.5547 -2161.5044]", + "726": "[9448.376 -13431.6572 -2161.4888]", + "727": "[9126.4131 -13831.793 -2161.3994]", + "728": "[8747.8828 -14162.9092 -2161.6333]", + "729": "[8303.4922 -14432.6025 -2161.644]", + "730": "[7825.209 -14629.1924 -2161.5178]", + "731": "[7328.6113 -14762.2344 -2161.1829]", + "732": "[6812.1182 -14844.1348 -2161.6787]", + "733": "[6301 -14881.9844 -2161.272]", + "734": "[5778.1743 -14884.8125 -2163.1255]", + "735": "[5254.4893 -14877.6709 -2164.0969]", + "736": "[4730.0503 -14878.542 -2163.498]", + "737": "[4217.332 -14878.1035 -2163.4631]", + "738": "[3691.3105 -14876.9766 -2163.4849]", + "739": "[3166.4673 -14877.7402 -2163.4883]", + "740": "[2647.8738 -14878.2686 -2163.5088]", + "741": "[2134.8665 -14877.3301 -2163.5894]", + "742": "[1622.4994 -14879.7939 -2163.5967]", + "743": "[1107.3009 -14879.5098 -2163.6641]", + "744": "[589.6796 -14879.1289 -2163.4734]", + "745": "[72.5731 -14880.2793 -2163.5115]", + "746": "[-445.4558 -14879.6064 -2163.5156]", + "747": "[-966.5989 -14879.5068 -2163.5129]", + "748": "[-1487.2443 -14878.5596 -2163.5532]", + "749": "[-2007.3843 -14880.3008 -2163.583]", + "750": "[-2527.0142 -14877.252 -2163.3198]", + "751": "[-3044.719 -14837.3271 -2163.2769]", + "752": "[-3554.2861 -14750.2842 -2163.1006]", + "753": "[-4048.563 -14609.5928 -2163.5032]", + "754": "[-4519.2075 -14407.4102 -2163.8403]", + "755": "[-4957.6831 -14132.9033 -2163.4951]", + "756": "[-5342.8936 -13785.6182 -2163.73]", + "757": "[-5652.9141 -13387.4834 -2163.6299]", + "758": "[-5895.6313 -12936.502 -2163.7039]", + "759": "[-6073.4712 -12449.3965 -2163.3389]", + "760": "[-6189.8633 -11947.5371 -2163.2966]", + "761": "[-6256.8789 -11435.9502 -2163.0381]", + "762": "[-6284.0054 -10916.7217 -2163.1167]", + "763": "[-6281.4888 -10398.4131 -2163.3047]", + "764": "[-6322.5903 -9884.8252 -2163.4905]", + "765": "[-6411.3481 -9375.3916 -2163.4172]", + "766": "[-6555.0273 -8883.7988 -2162.8062]", + "767": "[-6763.8262 -8408.833 -2163.5774]", + "768": "[-7046.9277 -7970.0493 -2163.5879]", + "769": "[-7395.7573 -7594.5342 -2163.5518]", + "770": "[-7805.6587 -7284.8359 -2163.375]", + "771": "[-8268.6211 -7044.2612 -2163.3271]", + "772": "[-8758.084 -6873.5347 -2163.6406]", + "773": "[-9267.5098 -6761.8335 -2163.4585]", + "774": "[-9783.082 -6699.1802 -2163.3818]", + "775": "[-10300.4551 -6677.7285 -2163.261]", + "776": "[-10816.8115 -6690.4956 -2163.4595]", + "777": "[-11328.917 -6740.1777 -2163.6221]", + "778": "[-11838.999 -6838.5195 -2163.5205]", + "779": "[-12329.3525 -6989.7236 -2163.2842]", + "780": "[-12800.0068 -7208.5547 -2163.2883]", + "781": "[-13228.7598 -7496.5298 -2163.5862]", + "782": "[-13589.0127 -7843.8135 -2163.6516]", + "783": "[-13892.9785 -8261.5283 -2163.699]", + "784": "[-14124.5713 -8721.6621 -2163.6892]", + "785": "[-14289.3047 -9208.6445 -2163.3721]", + "786": "[-14395.9971 -9709.6943 -2163.5398]", + "787": "[-14456.5791 -10222.4121 -2163.5327]", + "788": "[-14477.6719 -10740.7451 -2163.4673]", + "789": "[-14470.8213 -11261.9063 -2163.5542]", + "790": "[-14469.3545 -11774.8037 -2163.5059]", + "791": "[-14461.5361 -12291.9131 -2162.6968]", + "792": "[-14408.7598 -12805.3613 -2163.5032]", + "793": "[-14308.6865 -13309.8633 -2162.6143]", + "794": "[-14150.3232 -13806.834 -2163.7056]", + "795": "[-13925.9834 -14276.0439 -2163.8621]", + "796": "[-13630.5254 -14701.5654 -2163.2998]", + "797": "[-13273.7773 -15060.4443 -2163.4683]", + "798": "[-12855.3086 -15356.1328 -2163.6897]", + "799": "[-12388.791 -15582.0195 -2163.6902]", + "800": "[-11898.875 -15740.3955 -2163.2808]", + "801": "[-11388.0703 -15843.2275 -2163.3728]", + "802": "[-10872.1582 -15897.8535 -2163.4375]", + "803": "[-10355.292 -15913.8184 -2163.6941]", + "804": "[-9839.7432 -15906.3086 -2163.4988]", + "805": "[-9325.2334 -15906.0254 -2163.6438]", + "806": "[-8811.374 -15904.9727 -2163.5459]", + "807": "[-8298.1445 -15905.6611 -2163.574]", + "808": "[-7785.5801 -15906.082 -2163.3262]", + "809": "[-7264.519 -15904.0811 -2163.4868]", + "810": "[-6744.145 -15904.8369 -2163.4358]", + "811": "[-6224.4619 -15906.0605 -2163.6672]", + "812": "[-5705.4771 -15904.3467 -2163.6616]", + "813": "[-5187.1895 -15905.3477 -2163.5562]", + "814": "[-4669.5776 -15904.502 -2163.5728]", + "815": "[-4154.1396 -15905.6396 -2163.6746]", + "816": "[-3633.3167 -15906.21 -2163.5137]", + "817": "[-3117.1189 -15905.2988 -2163.6853]", + "818": "[-2603.4382 -15904.9971 -2163.5093]", + "819": "[-2088.9929 -15904.4453 -2163.5801]", + "820": "[-1573.6069 -15903.9863 -2163.5564]", + "821": "[-1053.1396 -15904.9619 -2163.5588]", + "822": "[-538.0367 -15905.1885 -2163.6792]", + "823": "[-23.4077 -15905.8135 -2163.5996]", + "824": "[490.6916 -15903.7676 -2163.4807]", + "825": "[1004.3038 -15905.7227 -2163.5073]", + "826": "[1517.4155 -15904.8867 -2163.5112]", + "827": "[2030.0377 -15904.3477 -2163.5105]", + "828": "[2542.1682 -15905.7275 -2163.4949]", + "829": "[3065.4216 -15904.8076 -2163.5056]", + "830": "[3588.156 -15904.5781 -2163.5754]", + "831": "[4110.3857 -15905.5986 -2163.5327]", + "832": "[4632.0918 -15904.293 -2163.5408]", + "833": "[5153.3076 -15905.4209 -2163.5315]", + "834": "[5674.0205 -15905.0781 -2163.522]", + "835": "[6194.2446 -15904.6035 -2163.5249]", + "836": "[6707.0376 -15904.3604 -2163.6167]", + "837": "[7224.9595 -15905.7373 -2162.9968]", + "838": "[7739.3057 -15879.8262 -2163.4937]", + "839": "[8247.1816 -15807.4316 -2163.0566]", + "840": "[8746.083 -15685.5752 -2163.6421]", + "841": "[9228.8389 -15505.7383 -2163.4402]", + "842": "[9681.4375 -15253.2295 -2163.6599]", + "843": "[10080.0762 -14931.4082 -2163.616]", + "844": "[10421.5215 -14539.8945 -2163.4517]", + "845": "[10689.5596 -14095.709 -2163.4871]", + "846": "[10885.0762 -13615.7002 -2163.4102]", + "847": "[11017.5117 -13117.7148 -2163.3335]", + "848": "[11097.084 -12610.6982 -2163.4111]", + "849": "[11135.6035 -12094.3682 -2163.2014]", + "850": "[11136.4893 -11582.1982 -2163.2947]", + "851": "[11130.0469 -11059.0107 -2162.1641]", + "852": "[11130.002 -10542.4443 -2160.4863]", + "853": "[11129.291 -10021.292 -2162.3411]", + "854": "[11131.4355 -9503.9355 -2158.5889]", + "855": "[11130.7461 -8992.5381 -2115.0986]", + "856": "[11130.7793 -8478.5469 -2057.1289]", + "857": "[11130.9395 -7967.5552 -1996.3533]", + "858": "[11130.6689 -7453.2012 -1934.6177]", + "859": "[11131.3213 -6943.8418 -1872.0518]", + "860": "[11130.8438 -6426.7905 -1815.6075]", + "861": "[11131.0186 -5908.416 -1756.0613]", + "862": "[11129.3408 -5390.7036 -1697.4255]", + "863": "[11128.8662 -4875.7354 -1637.533]", + "864": "[11129.9004 -4360.4951 -1574.9122]", + "865": "[11129.542 -3848.4158 -1515.6061]", + "866": "[11129.4785 -3334.5574 -1461.5468]", + "867": "[11129.2031 -2824.252 -1419.7205]", + "868": "[11128.9824 -2305.25 -1409.0759]", + "869": "[11129.8057 -1784.8628 -1417.2545]", + "870": "[11129.8066 -1266.5859 -1417.4075]", + "871": "[11128.6943 -749.183 -1417.5192]", + "872": "[11130.7471 -232.9842 -1417.5605]", + "873": "[11129.2695 280.0236 -1417.5421]", + "874": "[11129.7002 793.4578 -1417.5254]", + "875": "[11129.3418 1305.8458 -1417.5223]", + "876": "[11129.0557 1821.3977 -1417.571]", + "877": "[11130.9961 2336.2744 -1417.6135]", + "878": "[11130.6016 2852.0691 -1417.6516]", + "879": "[11130.3037 3367.0317 -1417.5063]", + "880": "[11120.4795 3883.1035 -1417.7256]", + "881": "[11051.7275 4398.4736 -1417.657]", + "882": "[10916.5166 4898.7505 -1418.1029]", + "883": "[10702.0166 5367.7944 -1418.4305]", + "884": "[10499.7285 5660.5337 -1418.4287]", + "885": "[10187.7744 5975.9131 -1418.5363]", + "886": "[9934.8086 6154.4272 -1418.4758]", + "887": "[9471.7578 6377.5693 -1418.1388]", + "888": "[8978.1621 6516.7285 -1417.6899]", + "889": "[8462.7031 6589.9365 -1417.5767]", + "890": "[7947.0322 6610.8242 -1417.2416]", + "891": "[7427.2339 6600.3931 -1417.6418]", + "892": "[6902.2451 6600.2334 -1417.6683]", + "893": "[6387.6563 6597.7764 -1417.5734]", + "894": "[5866.0225 6598.1387 -1417.541]", + "895": "[5344.2759 6598.6353 -1417.4755]", + "896": "[4832.1626 6599.5962 -1417.6671]", + "897": "[4317.7173 6598.1978 -1418.6064]", + "898": "[3804.0378 6599.0879 -1418.5189]", + "899": "[3291.0566 6599.5596 -1418.3925]", + "900": "[2778.7998 6599.4409 -1418.4664]", + "901": "[2250.365 6598.9678 -1418.364]", + "902": "[1723.7704 6598.1411 -1415.479]", + "903": "[1204.2505 6598.9893 -1416.8827]", + "904": "[691.0689 6598.8315 -1416.9186]", + "905": "[163.2321 6598.8315 -1416.3611]", + "906": "[-349.818 6598.8315 -1417.0767]", + "907": "[-861.8892 6598.8315 -1412.9661]", + "908": "[-958.2281 6598.8315 -1416.0864]", + "909": "[-1056.4673 6598.8315 -1417.2162]", + "910": "[-1158.6141 6599.3105 -1417.5446]", + "911": "[-1677.2065 6598.3105 -1417.6268]", + "912": "[-2194.5903 6598.4639 -1417.6255]", + "913": "[-2707.4622 6599.4912 -1417.5936]", + "914": "[-3219.7546 6599.3765 -1417.3193]", + "915": "[-3735.521 6599.6958 -1417.7032]", + "916": "[-4254.3047 6598.499 -1417.5441]", + "917": "[-4773.6411 6599.2559 -1417.5522]", + "918": "[-5291.3809 6597.7583 -1417.6458]", + "919": "[-5807.9131 6582.6772 -1417.5251]", + "920": "[-6322.957 6544.647 -1417.5778]", + "921": "[-6832.1802 6487.0391 -1417.6613]", + "922": "[-7351.1797 6403.9053 -1417.2985]", + "923": "[-7865.9849 6295.3135 -1417.1814]", + "924": "[-8372.9668 6157.6865 -1417.2393]", + "925": "[-8869.7539 5989.5293 -1417.3408]", + "926": "[-9352.9814 5787.9844 -1417.161]", + "927": "[-9818.752 5551.6958 -1417.5673]", + "928": "[-10263.3301 5279.8833 -1417.7582]", + "929": "[-10682.4688 4972.0859 -1417.2659]", + "930": "[-11071.7383 4628.8887 -1417.4067]", + "931": "[-11427.5557 4252.8096 -1417.6559]", + "932": "[-11748.4189 3848.0559 -1417.2753]", + "933": "[-12035.8467 3414.1677 -1417.3983]", + "934": "[-12287.6523 2955.6824 -1417.3573]", + "935": "[-12502.1484 2479.8364 -1417.521]", + "936": "[-12683.1826 1991.6262 -1417.5026]", + "937": "[-12830.9834 1495.5052 -1417.6128]", + "938": "[-12953.0547 980.9323 -1417.531]", + "939": "[-13045.6113 470.63 -1417.3337]", + "940": "[-13113.6914 -42.8258 -1417.4088]", + "941": "[-13160.4307 -559.2086 -1417.4274]", + "942": "[-13186.9551 -1076.1328 -1417.5178]", + "943": "[-13195.6387 -1589.255 -1417.2979]", + "944": "[-13191.1904 -2115.5085 -1418.1884]", + "945": "[-13189.8164 -2634.9329 -1417.4561]", + "946": "[-13190.2979 -3151.4304 -1417.6514]", + "947": "[-13190.3262 -3667.312 -1417.5287]", + "948": "[-13187.3008 -4182.5327 -1417.5039]", + "949": "[-13163.9746 -4696.5972 -1417.2911]", + "950": "[-13119.4229 -5208.5986 -1417.5455]", + "951": "[-13054.0205 -5717.5879 -1417.3896]", + "952": "[-12965.5488 -6222.3237 -1417.2384]", + "953": "[-12848.0391 -6736.2422 -1417.5824]", + "954": "[-12700.8008 -7241.2231 -1417.6312]", + "955": "[-12522.1318 -7736.5269 -1417.6973]", + "956": "[-12311.543 -8212.543 -1416.901]", + "957": "[-12065.4355 -8669.8945 -1417.4634]", + "958": "[-11784.2773 -9104.6699 -1417.3679]", + "959": "[-11467.1904 -9512.6299 -1417.4142]", + "960": "[-11116.8906 -9890.7979 -1417.4543]", + "961": "[-10734.9785 -10235.2598 -1417.5184]", + "962": "[-10325.2021 -10544.124 -1417.6211]", + "963": "[-9879.2422 -10824.6846 -1417.5718]", + "964": "[-9412.7949 -11066.9736 -1417.514]", + "965": "[-8930.5039 -11272.749 -1417.1027]", + "966": "[-8436.2275 -11444.5117 -1417.793]", + "967": "[-7933.2349 -11584.7598 -1417.0629]", + "968": "[-7424.0972 -11696.25 -1417.2742]", + "969": "[-6909.8218 -11782.1572 -1417.3591]", + "970": "[-6398.9604 -11844.0508 -1417.1897]", + "971": "[-5871.5835 -11884.9883 -1417.5781]", + "972": "[-5350.0938 -11906.4004 -1417.1907]", + "973": "[-4822.1729 -11910.3125 -1416.7422]", + "974": "[-4291.6235 -11906.0938 -1417.3733]", + "975": "[-3772.0471 -11904.7373 -1417.6157]", + "976": "[-3245.646 -11905.2178 -1417.5846]", + "977": "[-2723.7915 -11905.4072 -1417.4485]", + "978": "[-2202.9932 -11904.6172 -1417.4952]", + "979": "[-1682.8207 -11906.0029 -1417.39]", + "980": "[-1155.6078 -11904.8652 -1417.575]", + "981": "[-627.7339 -11905.9395 -1417.3054]", + "982": "[-106.0406 -11904.6963 -1417.3295]", + "983": "[418.5803 -11905.8584 -1406.2231]", + "984": "[935.5509 -11904.3564 -1354.6167]", + "985": "[1459.9927 -11904.6104 -1294.1105]", + "986": "[1975.7117 -11905.7588 -1233.0389]", + "987": "[2486.5923 -11905.0703 -1171.0834]", + "988": "[3008.2896 -11904.4932 -1107.5138]", + "989": "[3529.4031 -11905.0459 -1042.8418]", + "990": "[4052.0283 -11905.6299 -979.11]", + "991": "[4574.2778 -11905.0996 -914.8933]", + "992": "[5094.2754 -11904.0146 -851.5396]", + "993": "[5609.9741 -11905.8721 -787.9034]", + "994": "[6119.7744 -11904.3428 -726.2789]", + "995": "[6640.1836 -11904.9648 -664.3435]", + "996": "[7158.6992 -11904.7598 -605.9429]", + "997": "[7677.0537 -11904.3242 -554.244]", + "998": "[8192.7715 -11904.2188 -519.8116]", + "999": "[8710.6367 -11905.1006 -525.9965]", + "1000": "[9225.6631 -11905.2021 -527.7996]", + "1001": "[9743.4756 -11904.4453 -528.7338]", + "1002": "[10260.2764 -11906.1338 -528.2864]", + "1003": "[10785.0811 -11904.335 -528.6339]", + "1004": "[11302.0293 -11904.8291 -528.6425]", + "1005": "[11823.707 -11888.2861 -528.3897]", + "1006": "[12332.8545 -11806.4121 -528.1738]", + "1007": "[12823.5771 -11650.7969 -528.1606]", + "1008": "[13250.8672 -11426.7305 -528.3384]", + "1009": "[13510.5967 -11225.6064 -528.5661]", + "1010": "[13805.7939 -10899.8682 -528.4692]", + "1011": "[13979.251 -10624.2197 -528.2601]", + "1012": "[14176.2344 -10148.8252 -528.0477]", + "1013": "[14294.0742 -9639.6748 -528.1147]", + "1014": "[14344.2646 -9122.4111 -528.5216]", + "1015": "[14347.791 -8602.8525 -526.603]", + "1016": "[14337.3066 -8084.7554 -527.1616]", + "1017": "[14338.5303 -7563.3208 -527.7208]", + "1018": "[14335.4502 -7042.563 -527.5572]", + "1019": "[14336.9072 -6527.8857 -527.5956]", + "1020": "[14338.1514 -6007.0576 -527.5303]", + "1021": "[14336.6006 -5479.2119 -527.498]", + "1022": "[14338.0039 -4952.1558 -527.4485]", + "1023": "[14337.4971 -4425.8999 -527.4628]", + "1024": "[14335.9297 -3900.4514 -527.0985]", + "1025": "[14336.5498 -3375.738 -527.5956]", + "1026": "[14337.626 -2852.4534 -528.127]", + "1027": "[14337.5645 -2330.3428 -527.3964]", + "1028": "[14336.7734 -1809.1978 -527.592]", + "1029": "[14336.3418 -1288.8215 -527.6863]", + "1030": "[14337.7529 -769.1976 -527.5648]", + "1031": "[14336.7207 -250.3158 -527.5676]", + "1032": "[14337.3281 267.8198 -527.5434]", + "1033": "[14337.5654 784.7279 -527.6787]", + "1034": "[14337.5146 1300.4485 -527.2924]", + "1035": "[14337.0996 1815.1282 -527.6586]", + "1036": "[14336.7549 2337.3633 -527.6418]", + "1037": "[14337.2471 2862.1409 -527.554]", + "1038": "[14337.2441 3386.2275 -527.5323]", + "1039": "[14336.2871 3909.6211 -527.5494]", + "1040": "[14337.958 4432.3345 -527.4664]", + "1041": "[14336.3643 4954.3521 -527.4734]", + "1042": "[14336.9375 5475.6973 -527.3505]", + "1043": "[14337.9365 5996.3828 -527.4449]", + "1044": "[14336.0977 6516.3765 -527.504]", + "1045": "[14336.8672 7035.7031 -527.6567]", + "1046": "[14337.8232 7554.3477 -527.489]", + "1047": "[14332.1484 8072.2417 -527.0563]", + "1048": "[14307.0977 8588.8975 -527.5555]", + "1049": "[14260.2217 9103.3516 -527.5238]", + "1050": "[14192.6201 9614.708 -527.3499]", + "1051": "[14100.1895 10121.4092 -527.3612]", + "1052": "[13982.6113 10622.0313 -527.598]", + "1053": "[13837.1328 11114.4023 -527.5421]", + "1054": "[13660.8809 11595.7188 -527.5112]", + "1055": "[13445.8174 12077.5352 -527.3519]", + "1056": "[13194.8008 12540.5195 -527.2355]", + "1057": "[12906.335 12979.8691 -527.3594]", + "1058": "[12581.6426 13391.6465 -527.4072]", + "1059": "[12222.1631 13771.7031 -527.5911]", + "1060": "[11830.8506 14117.002 -527.281]", + "1061": "[11411.668 14425.707 -527.5543]", + "1062": "[10968.9238 14697.1182 -527.7126]", + "1063": "[10506.9658 14931.5957 -527.5386]", + "1064": "[10030.2764 15131.3379 -527.1702]", + "1065": "[9542.0508 15297.7041 -527.5513]", + "1066": "[9045.6748 15433.7578 -527.4187]", + "1067": "[8543.499 15542.1162 -527.2891]", + "1068": "[8037.3218 15624.7852 -527.4706]", + "1069": "[7528.9238 15685.4932 -527.5402]", + "1070": "[7003.769 15725.6484 -527.4101]", + "1071": "[6478.3232 15746.1777 -527.2946]", + "1072": "[5953.2749 15749.4258 -527.0908]", + "1073": "[5428.9971 15745.7148 -527.4235]", + "1074": "[4905.3691 15744.6914 -527.441]", + "1075": "[4382.3877 15744.6309 -527.1804]", + "1076": "[3860.0198 15745.7598 -527.5696]", + "1077": "[3338.3359 15744.21 -527.2806]", + "1078": "[2817.2495 15745.9365 -527.6462]", + "1079": "[2296.8169 15744.2578 -527.5883]", + "1080": "[1776.9945 15746.1621 -527.3452]", + "1081": "[1257.7817 15744.5225 -527.5435]", + "1082": "[739.17 15745.1211 -527.5253]", + "1083": "[221.1881 15745.7266 -527.6105]", + "1084": "[-296.1669 15744.8271 -527.4839]", + "1085": "[-812.9105 15743.9307 -527.6891]", + "1086": "[-1329.0237 15745.3398 -527.5455]", + "1087": "[-1844.5212 15745.2979 -527.639]", + "1088": "[-2359.3877 15744.123 -527.4127]", + "1089": "[-2873.6321 15746.3027 -527.4475]", + "1090": "[-3387.2773 15745.333 -527.5131]", + "1091": "[-3900.3052 15743.916 -527.4512]", + "1092": "[-4412.7358 15745.3125 -527.1553]", + "1093": "[-4939.6372 15745.0605 -527.6431]", + "1094": "[-5465.8984 15744.8428 -527.3747]", + "1095": "[-5991.5767 15744.959 -527.6824]", + "1096": "[-6516.6035 15742.7012 -527.3633]", + "1097": "[-7040.6479 15723.9141 -527.3372]", + "1098": "[-7562.7422 15682.0576 -527.2479]", + "1099": "[-8081.9668 15618.8164 -527.5825]", + "1100": "[-8596.9883 15531.7441 -527.3988]", + "1101": "[-9106.1055 15418.3379 -527.5145]", + "1102": "[-9607.1025 15277.1074 -527.3301]", + "1103": "[-10097.0908 15104.7051 -527.5997]", + "1104": "[-10573.4316 14899.8418 -527.3958]", + "1105": "[-11032.2832 14660.2969 -527.3226]", + "1106": "[-11469.7012 14385.3721 -527.6661]", + "1107": "[-11881.4785 14075.2129 -527.1996]", + "1108": "[-12263.2598 13730.4199 -527.6371]", + "1109": "[-12612.8838 13354.7637 -527.6639]", + "1110": "[-12935.583 12938.6455 -527.5154]", + "1111": "[-13219.7715 12496.8242 -527.5855]", + "1112": "[-13466.7559 12034.7129 -527.4828]", + "1113": "[-13677.125 11556.1689 -527.3471]", + "1114": "[-13852.5615 11064.9375 -527.4507]", + "1115": "[-13997.6621 10565.0801 -527.3185]", + "1116": "[-14112.8789 10058.4209 -527.454]", + "1117": "[-14202.2246 9547.459 -527.3232]", + "1118": "[-14267.5508 9033.6885 -527.3699]", + "1119": "[-14311.1406 8518.3994 -527.4674]", + "1120": "[-14335.2139 8002.5645 -527.5865]", + "1121": "[-14341.6797 7486.9463 -527.4885]", + "1122": "[-14338.3584 6971.9536 -527.6742]", + "1123": "[-14336.9297 6457.5957 -527.3295]", + "1124": "[-14336.3682 5943.7598 -527.6911]", + "1125": "[-14338.2139 5430.5078 -527.5822]", + "1126": "[-14336.7188 4917.8218 -527.3038]", + "1127": "[-14336.9863 4405.666 -527.5855]", + "1128": "[-14337.9092 3879.8845 -527.4396]", + "1129": "[-14336.1025 3354.6987 -527.5433]", + "1130": "[-14337.9521 2830.1094 -527.5953]", + "1131": "[-14337.375 2306.1179 -527.5848]", + "1132": "[-14336.6289 1782.7334 -527.552]", + "1133": "[-14336.1299 1259.9432 -527.5777]", + "1134": "[-14337.6699 737.7273 -527.5994]", + "1135": "[-14337.2471 216.1022 -527.5151]", + "1136": "[-14336.667 -304.9532 -527.5713]", + "1137": "[-14335.9238 -825.4265 -527.5779]", + "1138": "[-14337.0723 -1345.174 -526.5894]", + "1139": "[-14337.9023 -1863.7047 -527.4407]", + "1140": "[-14336.6377 -2381.1545 -527.2994]", + "1141": "[-14335.5313 -2897.9702 -527.3179]", + "1142": "[-14336.8994 -3413.7466 -527.4944]", + "1143": "[-14337.0469 -3928.9036 -527.3981]", + "1144": "[-14336.7588 -4443.5122 -527.4666]", + "1145": "[-14335.5762 -4957.5493 -527.3809]", + "1146": "[-14336.8701 -5471.0459 -527.4717]", + "1147": "[-14336.9883 -5983.9819 -527.4276]", + "1148": "[-14336.915 -6496.25 -526.7384]", + "1149": "[-14323.6338 -7020.2822 -525.8298]", + "1150": "[-14288.582 -7541.8682 -525.1785]", + "1151": "[-14231.6318 -8060.376 -523.9673]", + "1152": "[-14153.3984 -8575.0693 -523.2526]", + "1153": "[-14049.2393 -9083.75 -522.6173]", + "1154": "[-13919.127 -9584.96 -521.0441]", + "1155": "[-13759.9053 -10076.2656 -521.4074]", + "1156": "[-13569.7988 -10555.2891 -520.5845]", + "1157": "[-13346.377 -11018.5703 -520.1778]", + "1158": "[-13090.3594 -11462.8301 -519.7722]", + "1159": "[-12791.0811 -11894.2285 -519.6066]", + "1160": "[-12457.54 -12298.0801 -519.3193]", + "1161": "[-12089.874 -12669.4473 -519.5573]", + "1162": "[-11692.4043 -13006.6904 -519.0941]", + "1163": "[-11267.9629 -13307.3174 -520.0026]", + "1164": "[-10821.5576 -13571.8721 -520.1299]", + "1165": "[-10356.8252 -13800.3408 -520.4124]", + "1166": "[-9877.9971 -13994.9512 -521.2242]", + "1167": "[-9388.5391 -14158.2852 -521.6503]", + "1168": "[-8890.6211 -14291.1191 -522.3398]", + "1169": "[-8386.8994 -14396.9238 -523.2902]", + "1170": "[-7879.0796 -14477.6416 -523.5016]", + "1171": "[-7368.6729 -14536.127 -524.8129]", + "1172": "[-6850.3081 -14574.2256 -525.9457]", + "1173": "[-6334.3623 -14593.877 -526.3931]", + "1174": "[-5821.0254 -14596.8721 -527.3896]", + "1175": "[-5302.332 -14594.2803 -527.3791]", + "1176": "[-4789.6035 -14593.0566 -527.5107]", + "1177": "[-4273.957 -14593.4678 -527.6799]", + "1178": "[-3759.5979 -14593.0703 -527.4897]", + "1179": "[-3246.5208 -14592.8096 -527.5747]", + "1180": "[-2728.1641 -14593.208 -527.501]", + "1181": "[-2212.6794 -14593.5986 -527.5646]", + "1182": "[-1699.4653 -14594.0957 -527.5105]", + "1183": "[-1180.9919 -14593.8506 -527.6569]", + "1184": "[-664.509 -14592.4736 -527.4728]", + "1185": "[-150.3056 -14592.4268 -527.3888]", + "1186": "[368.5542 -14592.6475 -527.5483]", + "1187": "[885.9664 -14593.3936 -527.552]", + "1188": "[1402.3083 -14594.4053 -526.8007]", + "1189": "[1918.4403 -14593.209 -527.1684]", + "1190": "[2435.1323 -14594.1523 -512.3713]", + "1191": "[2945.3113 -14594.3281 -459.1612]", + "1192": "[3464.5269 -14593.8525 -399.4312]", + "1193": "[3972.9456 -14594.3525 -338.8194]", + "1194": "[4491.0264 -14593.5957 -275.8754]", + "1195": "[5007.6353 -14593.333 -212.8666]", + "1196": "[5519.1675 -14594.4785 -149.6792]", + "1197": "[6033.1694 -14593.0244 -86.6859]", + "1198": "[6543.126 -14594.1211 -23.8594]", + "1199": "[7055.5376 -14593.5244 38.9738]", + "1200": "[7564.7813 -14593.5176 101.5479]", + "1201": "[8079.3877 -14594.6797 164.65]", + "1202": "[8594.8086 -14592.709 228.0135]", + "1203": "[9103.5547 -14592.96 289.9262]", + "1204": "[9617.876 -14593.0742 350.8958]", + "1205": "[10133.3115 -14593.0879 409.7106]", + "1206": "[10650.9238 -14592.708 462.5459]", + "1207": "[11162.3359 -14593.7686 500.6329]", + "1208": "[11681.4834 -14587.2041 501.3065]", + "1209": "[12192.6396 -14522.9785 496.5655]", + "1210": "[12692.7002 -14388.2637 496.8581]", + "1211": "[13160.6729 -14171.6426 497.1879]", + "1212": "[13421.1162 -13990.127 496.992]", + "1213": "[13741.4287 -13671.1699 496.6004]", + "1214": "[13926.665 -13407.4814 496.7582]", + "1215": "[14136.002 -12958.4287 496.5666]", + "1216": "[14269.9033 -12460.8076 496.9484]", + "1217": "[14335.623 -11951.9307 496.7646]", + "1218": "[14349.5596 -11438.9678 496.7211]", + "1219": "[14337.2822 -10922.4023 496.6683]", + "1220": "[14337.6768 -10400.7813 496.8103]", + "1221": "[14336.7754 -9879.1514 496.6801]", + "1222": "[14337.3232 -9357.9258 496.722]", + "1223": "[14335.9766 -8837.2891 496.3809]", + "1224": "[14336.8184 -8317.2363 496.4875]", + "1225": "[14336.627 -7797.7422 496.4471]", + "1226": "[14336.7715 -7278.7847 496.3975]", + "1227": "[14336.9277 -6760.4014 496.4395]", + "1228": "[14336.3643 -6242.5596 496.3619]", + "1229": "[14336.832 -5729.103 496.5363]", + "1230": "[14335.7129 -5209.5039 496.3542]", + "1231": "[14320.5947 -4695.7026 497.1376]", + "1232": "[14239.6221 -4182.9141 496.701]", + "1233": "[14082.7793 -3689.5708 496.8596]", + "1234": "[13864.5508 -3274.3372 496.4664]", + "1235": "[13633.4873 -2976.6292 496.5143]", + "1236": "[13354.2754 -2724.1035 496.5744]", + "1237": "[13023.334 -2516.873 496.5374]", + "1238": "[12573.873 -2335.0005 496.5865]", + "1239": "[12074.2998 -2220.8137 496.3631]", + "1240": "[11557.9912 -2168.1682 496.4196]", + "1241": "[11043.3711 -2165.5208 496.4689]", + "1242": "[10524.4785 -2175.1494 496.3354]", + "1243": "[10008.2607 -2176.6199 498.245]", + "1244": "[9496.1475 -2176.7258 496.8235]", + "1245": "[8970.9053 -2175.2488 496.6932]", + "1246": "[8446.3896 -2176.2285 496.6779]", + "1247": "[7925.2202 -2175.9426 496.8983]", + "1248": "[7408.3638 -2176.0129 496.7759]", + "1249": "[6890.7065 -2175.137 496.8069]", + "1250": "[6374.1411 -2176.0862 496.7231]", + "1251": "[5858.1094 -2175.3015 496.8345]", + "1252": "[5342.6064 -2176.1665 496.66]", + "1253": "[4827.6353 -2175.5413 496.7058]", + "1254": "[4313.1675 -2176.3293 496.7651]", + "1255": "[3799.2278 -2175.5012 496.9219]", + "1256": "[3285.8181 -2176.1184 496.7166]", + "1257": "[2772.9719 -2175.6497 496.7527]", + "1258": "[2260.6519 -2175.7849 496.7189]", + "1259": "[1738.4531 -2174.541 496.5499]", + "1260": "[1216.8621 -2175.8872 496.403]", + "1261": "[695.8876 -2174.8567 496.4626]", + "1262": "[177.1927 -2176.1357 496.4453]", + "1263": "[-337.7892 -2173.7581 496.4801]", + "1264": "[-852.4844 -2175.7068 496.4761]", + "1265": "[-1370.569 -2171.8645 494.1093]", + "1266": "[-1886.5867 -2112.6636 487.6221]", + "1267": "[-2382.8945 -1978.851 483.6287]", + "1268": "[-2792.8369 -1786.9005 480.7222]", + "1269": "[-3021.0488 -1626.3026 480.2491]", + "1270": "[-3301.4385 -1344.366 479.656]", + "1271": "[-3464.23 -1110.2385 480.8537]", + "1272": "[-3644.5625 -719.015 483.52]", + "1273": "[-3771.4082 -236.6354 487.8566]", + "1274": "[-3831.8159 277.4516 492.8612]", + "1275": "[-3838.6018 790.0061 498.0061]", + "1276": "[-3828.7751 1302.7048 496.8431]", + "1277": "[-3827.5825 1818.5101 496.837]", + "1278": "[-3828.2373 2332.6426 496.4402]", + "1279": "[-3829.0852 2845.1621 496.4986]", + "1280": "[-3829.0684 3363.9946 496.4134]", + "1281": "[-3827.6631 3881.6987 496.6763]", + "1282": "[-3827.7097 4398.2749 496.3824]", + "1283": "[-3828.4102 4913.7178 496.3924]", + "1284": "[-3827.9893 5427.9985 496.4276]", + "1285": "[-3827.0364 5941.1157 496.6817]", + "1286": "[-3828.084 6460.5132 496.4098]", + "1287": "[-3828.5598 6978.5674 496.5357]", + "1288": "[-3827.5024 7495.73 496.3774]", + "1289": "[-3827.313 8016.064 496.6861]", + "1290": "[-3828.8164 8538.8115 496.3517]", + "1291": "[-3825.5049 9051.9033 496.3167]", + "1292": "[-3772.9497 9568.1289 496.1454]", + "1293": "[-3656.8687 10072.4072 495.9981]", + "1294": "[-3464.6157 10549.6367 495.1286]", + "1295": "[-3259.792 10877.5566 494.874]", + "1296": "[-2977.4839 11191.041 494.6986]", + "1297": "[-2668.8896 11431.9873 495.3946]", + "1298": "[-2361.3909 11594.4863 495.2882]", + "1299": "[-1872.6251 11767.127 495.8714]", + "1300": "[-1361.2717 11863.9531 495.9737]", + "1301": "[-849.0897 11903.3184 496.4372]", + "1302": "[-331.1515 11899.0469 495.3936]", + "1303": "[183.4942 11894.3428 495.59]", + "1304": "[703.6272 11892.2539 496.077]", + "1305": "[1219.9639 11893.1748 495.9657]", + "1306": "[1732.2484 11893.3174 495.8132]", + "1307": "[2252.572 11892.3438 495.9033]", + "1308": "[2771.8357 11893.6162 495.9412]", + "1309": "[3290.0068 11893.6016 495.881]", + "1310": "[3805.2729 11893.1436 495.3331]", + "1311": "[4322.7705 11892.5186 495.5033]", + "1312": "[4843.2373 11893.1543 495.6871]", + "1313": "[5363.1904 11891.9053 495.3888]", + "1314": "[5882.5693 11893.7734 495.4522]", + "1315": "[6401.4043 11892.2939 495.4774]", + "1316": "[6919.708 11893.5176 495.486]", + "1317": "[7437.5073 11892.3574 495.4846]", + "1318": "[7954.7993 11893.1377 495.453]", + "1319": "[8471.5811 11893.4404 495.3594]", + "1320": "[8987.8379 11893.0186 495.4658]", + "1321": "[9503.584 11892.7656 495.4943]", + "1322": "[10023.8633 11867.1582 496.8457]", + "1323": "[10534.0254 11777.1201 495.7883]", + "1324": "[11021.9375 11616.8086 495.7573]", + "1325": "[11440.375 11392.4014 494.7613]", + "1326": "[11749.3379 11148.082 494.9604]", + "1327": "[11970.0439 10899.6592 494.862]", + "1328": "[12238.3311 10461.5254 495.2217]", + "1329": "[12356.8975 10159.665 495.3252]", + "1330": "[12485.5576 9658.9111 495.3919]", + "1331": "[12551.0752 9146.2178 496.0815]", + "1332": "[12567.1787 8626.0225 496.1183]", + "1333": "[12553.8115 8107.4155 495.8974]", + "1334": "[12553.8418 7587.8667 495.5908]", + "1335": "[12526.7227 7070.4863 495.58]", + "1336": "[12452.3926 6559.5747 495.4616]", + "1337": "[12326.6387 6059.2915 495.0977]", + "1338": "[12140.9893 5580.4365 495.4485]", + "1339": "[11883.1221 5126.2896 495.5536]", + "1340": "[11552.2754 4724.3623 495.5321]", + "1341": "[11174.0371 4401.7183 495.2522]", + "1342": "[10731.4375 4138.2173 495.3753]", + "1343": "[10246.9688 3943.2642 495.5639]", + "1344": "[9745.3018 3811.0342 495.5443]", + "1345": "[9232.7627 3733.4246 495.3513]", + "1346": "[8716.2695 3698.0913 495.3059]", + "1347": "[8194.3857 3696.6963 495.5452]", + "1348": "[7680.9585 3703.0178 495.4841]", + "1349": "[7164.5762 3703.4626 495.5899]", + "1350": "[6648.7305 3702.3645 495.3784]", + "1351": "[6133.4229 3702.7375 495.6696]", + "1352": "[5618.6162 3702.9197 495.3807]", + "1353": "[5104.3589 3702.1528 495.5176]", + "1354": "[4590.6455 3702.9402 495.45]", + "1355": "[4077.2842 3703.3008 491.9592]", + "1356": "[3560.0837 3702.9307 458.1906]", + "1357": "[3040.7278 3702.9192 401.0419]", + "1358": "[2527.8105 3702.7341 332.3491]", + "1359": "[2017.6895 3702.3298 269.5173]", + "1360": "[1501.8043 3703.0928 205.7707]", + "1361": "[984.5937 3702.3694 143.9888]", + "1362": "[471.2416 3703.2385 79.7702]", + "1363": "[-47.688 3701.8684 16.2082]", + "1364": "[-557.8018 3702.239 -46.7256]", + "1365": "[-1070.0059 3702.8928 -110.914]", + "1366": "[-1584.985 3703.2324 -173.2681]", + "1367": "[-2100.5247 3702.7517 -228.6872]", + "1368": "[-2623.8062 3702.918 -259.4908]", + "1369": "[-3146.8188 3702.0701 -262.1047]", + "1370": "[-3661.3081 3703.1582 -257.5057]", + "1371": "[-4176.7979 3703.5552 -257.3305]", + "1372": "[-4691.7114 3702.6062 -257.5994]", + "1373": "[-5205.8081 3702.2942 -249.884]", + "1374": "[-5724.3638 3703.249 -210.1422]", + "1375": "[-6238.9038 3702.8975 -149.3576]", + "1376": "[-6750.7837 3702.5427 -82.8553]", + "1377": "[-7265.6865 3703.2234 -19.6282]", + "1378": "[-7776.3516 3703.8594 43.535]", + "1379": "[-8289.1191 3702.4365 107.8559]", + "1380": "[-8802.9141 3703.5464 174.4171]", + "1381": "[-9313.0645 3703.4773 226.9618]", + "1382": "[-9829.7559 3703.6094 248.9701]", + "1383": "[-10348.7617 3703.5986 248.6524]", + "1384": "[-10865.8506 3702.9236 245.3616]", + "1385": "[-11384.4111 3667.7251 245.9225]", + "1386": "[-11900.3701 3583.2563 245.5568]", + "1387": "[-12402.5195 3444.7266 246.1771]", + "1388": "[-12881.2676 3244.9478 245.4339]", + "1389": "[-13321.6035 2973.5178 245.2341]", + "1390": "[-13708.2041 2633.4692 245.6372]", + "1391": "[-14014.1299 2249.6592 245.3434]", + "1392": "[-14267.3398 1794.2782 245.301]", + "1393": "[-14449.5215 1309.4622 245.4038]", + "1394": "[-14569.5098 808.3015 245.6679]", + "1395": "[-14640.1904 300.2233 245.6778]", + "1396": "[-14670.1611 -221.2316 245.337]", + "1397": "[-14666.4121 -741.881 245.5017]", + "1398": "[-14663.0605 -1260.8138 245.2582]", + "1399": "[-14663.0479 -1778.8064 245.6815]", + "1400": "[-14662.9014 -2296.3208 245.5132]", + "1401": "[-14662.8359 -2813.2915 245.4527]", + "1402": "[-14662.0898 -3329.7532 245.4558]", + "1403": "[-14663.2236 -3845.6621 245.3717]", + "1404": "[-14661.5742 -4361.042 245.441]", + "1405": "[-14661.6963 -4877.4312 245.4485]", + "1406": "[-14660.9785 -5398.1626 245.4452]", + "1407": "[-14661.5547 -5918.3477 245.4186]", + "1408": "[-14662.1416 -6437.9844 245.6096]", + "1409": "[-14661.6211 -6957.0825 245.5152]", + "1410": "[-14663.0342 -7475.3677 245.2564]", + "1411": "[-14659.2715 -7992.4575 245.1037]", + "1412": "[-14637.0537 -8508.2305 245.031]", + "1413": "[-14594.3975 -9022.1279 244.9822]", + "1414": "[-14529.3662 -9533.0723 245.1371]", + "1415": "[-14442.3945 -10040.5576 245.1136]", + "1416": "[-14330.0859 -10543.0908 244.8845]", + "1417": "[-14186.7227 -11047.0293 244.9069]", + "1418": "[-14012.5225 -11537.9404 245.5035]", + "1419": "[-13804.3369 -12018.5332 245.0878]", + "1420": "[-13561.5039 -12478.6289 244.9401]", + "1421": "[-13277.6074 -12923.9902 244.7831]", + "1422": "[-12963.8584 -13334.7617 245.2032]", + "1423": "[-12615.5586 -13715.1318 244.8727]", + "1424": "[-12235.6914 -14062.1201 245.046]", + "1425": "[-11827.9111 -14373.6064 244.9788]", + "1426": "[-11381.3555 -14657.9912 245.2701]", + "1427": "[-10913.8242 -14903.5107 244.9318]", + "1428": "[-10430.0693 -15111.9482 245.0422]", + "1429": "[-9934.5215 -15286.582 245.0624]", + "1430": "[-9429.8672 -15428.6611 245.1985]", + "1431": "[-8925.4473 -15539.7197 245.3414]", + "1432": "[-8407.9756 -15627.2021 245.3191]", + "1433": "[-7888.0303 -15690.8779 245.1239]", + "1434": "[-7366.6572 -15732.1357 245.0404]", + "1435": "[-6845.0415 -15755.208 245.2669]", + "1436": "[-6323.6714 -15758.6748 245.7701]", + "1437": "[-5804.1768 -15754.0908 245.9979]", + "1438": "[-5286.3071 -15754.6992 245.8977]", + "1439": "[-4769.4326 -15753.2588 245.8004]", + "1440": "[-4253.208 -15754.9902 245.909]", + "1441": "[-3741.5784 -15754.8477 281.196]", + "1442": "[-3224.9771 -15754.166 340.1737]", + "1443": "[-2707.5085 -15754.5078 400.6104]", + "1444": "[-2192.6331 -15753.8369 462.3624]", + "1445": "[-1683.6302 -15753.2451 523.9146]", + "1446": "[-1173.1827 -15753.8506 586.7801]", + "1447": "[-663.1658 -15754.0518 649.5609]", + "1448": "[-139.2981 -15753.9482 713.9374]", + "1449": "[378.9559 -15753.7002 778.8053]", + "1450": "[900.6855 -15753.7256 840.0992]", + "1451": "[1410.053 -15753.6484 899.1386]", + "1452": "[1931.9785 -15752.7354 955.5474]", + "1453": "[2454.2163 -15753.5303 1001.2047]", + "1454": "[2978.1604 -15754.0459 1017.3207]", + "1455": "[3501.7214 -15753.6514 1008.8145]", + "1456": "[4015.4526 -15753.8193 1007.474]", + "1457": "[4528.2104 -15753.5127 1007.4672]", + "1458": "[5046.376 -15753.2813 1006.8494]", + "1459": "[5570.1318 -15752.9668 1007.8128]", + "1460": "[6092.9434 -15748.377 1007.2924]", + "1461": "[6614.4224 -15721.1865 1006.9161]", + "1462": "[7133.6606 -15672.4814 1007.0067]", + "1463": "[7649.626 -15601.8721 1007.3911]", + "1464": "[8160.937 -15507.1221 1007.1898]", + "1465": "[8665.5898 -15384.8945 1007.2132]", + "1466": "[9161.6689 -15234.4131 1007.2896]", + "1467": "[9646.2432 -15052.5742 1007.1437]", + "1468": "[10116.127 -14837.7539 1007.227]", + "1469": "[10567.4209 -14588.1182 1007.1674]", + "1470": "[10995.8115 -14302.6982 1007.0277]", + "1471": "[11398.1328 -13983.4336 1006.9421]", + "1472": "[11769.043 -13629.7188 1007.0638]", + "1473": "[12116.5713 -13234.5635 1007.0744]", + "1474": "[12426.3379 -12810.709 1007.0909]", + "1475": "[12698.3281 -12363.2188 1006.9036]", + "1476": "[12933.0527 -11896.5859 1007.2761]", + "1477": "[13131.9912 -11414.8936 1007.255]", + "1478": "[13297.8984 -10922.043 1007.0875]", + "1479": "[13432.6523 -10420.8369 1007.0076]", + "1480": "[13539.1641 -9913.8242 1007.1097]", + "1481": "[13621.0986 -9403.1689 1007.2902]", + "1482": "[13679.1084 -8890.0508 1007.2053]", + "1483": "[13716.8193 -8375.8652 1007.5041]", + "1484": "[13735.5273 -7861.3525 1007.0176]", + "1485": "[13738 -7347.4224 1008.5658]", + "1486": "[13734.2197 -6835.1279 1007.762]", + "1487": "[13734.5723 -6309.6807 1007.4972]", + "1488": "[13734.2119 -5785.0308 1007.5829]", + "1489": "[13734.3799 -5260.9941 1007.6781]", + "1490": "[13734.458 -4737.5552 1007.5428]", + "1491": "[13734.9043 -4214.7358 1007.5551]", + "1492": "[13734.9258 -3692.6626 1007.8605]", + "1493": "[13733.0703 -3171.4587 1007.5756]", + "1494": "[13734.9023 -2651.1492 1007.4341]", + "1495": "[13733.3652 -2131.4812 1007.443]", + "1496": "[13733.5586 -1614.2094 1007.6951]", + "1497": "[13734.3896 -1094.8835 1007.4024]", + "1498": "[13734.1338 -573.0981 1007.4154]", + "1499": "[13733.75 -57.029 1007.3434]", + "1500": "[13735.0088 458.4796 1007.4878]", + "1501": "[13733.2861 973.4383 1007.2583]", + "1502": "[13733.3389 1487.821 1007.412]", + "1503": "[13735.0352 2001.6538 1007.2942]", + "1504": "[13733.4053 2514.9531 1007.3932]", + "1505": "[13734.0225 3027.7317 1007.5457]", + "1506": "[13734.4199 3540.0068 1007.3476]", + "1507": "[13733.7842 4061.7683 1007.2309]", + "1508": "[13734.8965 4583.0405 1004.7748]", + "1509": "[13733.1084 5103.6216 1005.4144]", + "1510": "[13734.8047 5623.6709 1005.3872]", + "1511": "[13733.9648 6139.5522 1005.3751]", + "1512": "[13734.2178 6663.2358 1005.6164]", + "1513": "[13733.7998 7184.2578 1005.6793]", + "1514": "[13733.084 7701.5967 1005.4764]", + "1515": "[13734.0195 8219.5449 1005.4532]", + "1516": "[13734.0449 8736.7676 1005.4764]", + "1517": "[13733.5635 9253.502 1005.557]", + "1518": "[13733.8281 9769.7676 1005.2281]", + "1519": "[13734.1191 10285.4443 1005.1116]", + "1520": "[13733.5098 10799.8838 1005.6413]", + "1521": "[13734.5615 11313.8291 1005.5021]", + "1522": "[13720.9678 11836.2139 1006.0226]", + "1523": "[13658.5879 12355.3701 1005.7853]", + "1524": "[13548.3662 12859.0811 1005.8605]", + "1525": "[13380.1201 13344.7607 1005.4863]", + "1526": "[13147.1699 13801.168 1006.1937]", + "1527": "[12834.5977 14222.5576 1006.0509]", + "1528": "[12473.2813 14563.833 1006.0378]", + "1529": "[12038.4482 14851.0225 1005.8522]", + "1530": "[11565.9893 15064.3906 1005.6965]", + "1531": "[11071.2568 15210.8691 1005.8599]", + "1532": "[10566.0537 15303.3613 1005.7193]", + "1533": "[10052.9795 15350.5195 1006.1025]", + "1534": "[9528.0371 15360.9893 1005.5518]", + "1535": "[9006.418 15352.6836 1005.4404]", + "1536": "[8481.6982 15351.752 1005.5615]", + "1537": "[7961.0283 15350.3154 1005.7519]", + "1538": "[7431.8726 15352.7598 1005.9631]", + "1539": "[6917.6758 15350.6318 1040.4152]", + "1540": "[6408.3877 15351.1572 1098.0803]", + "1541": "[5883.0781 15351.3594 1159.1023]", + "1542": "[5366.7939 15350.4922 1221.5967]", + "1543": "[4842.2324 15350.7988 1285.1426]", + "1544": "[4328.5376 15350.6406 1348.2505]", + "1545": "[3808.6104 15351.1836 1412.4351]", + "1546": "[3300.3037 15351.2803 1474.7531]", + "1547": "[2787.2869 15351.7891 1537.6925]", + "1548": "[2270.7505 15350.6318 1601.0548]", + "1549": "[1752.9233 15351.4102 1664.4186]", + "1550": "[1235.6564 15351.4912 1728.2372]", + "1551": "[715.9241 15351.2588 1791.8635]", + "1552": "[205.6012 15350.3447 1854.4666]", + "1553": "[-316.7284 15351.9365 1920.156]", + "1554": "[-830.7813 15352.2207 1981.4618]", + "1555": "[-1346.1726 15350.4814 2041.9843]", + "1556": "[-1869.1649 15351.1953 2100.6196]", + "1557": "[-2389.0491 15350.1162 2152.9136]", + "1558": "[-2913.5427 15351.1328 2187.6248]", + "1559": "[-3428.248 15350.9346 2181.2805]", + "1560": "[-3954.0684 15350.5752 2179.4045]", + "1561": "[-4467.2681 15351.0449 2179.658]", + "1562": "[-4980.9268 15350.1465 2179.7156]", + "1563": "[-5493.9849 15350.9502 2179.3508]", + "1564": "[-6006.3936 15350.9707 2179.3708]", + "1565": "[-6533.6772 15350.9258 2179.6013]", + "1566": "[-7060.3091 15349.3438 2179.3779]", + "1567": "[-7585.8481 15351.1709 2180.5017]", + "1568": "[-8109.6104 15328.209 2180.0322]", + "1569": "[-8631.79 15252.8291 2179.7466]", + "1570": "[-9136.3125 15127.3223 2180.2095]", + "1571": "[-9617.5371 14939.2168 2179.4597]", + "1572": "[-10063.4619 14684.2314 2180.0518]", + "1573": "[-10468.6924 14352.6777 2180.1111]", + "1574": "[-10782.2236 13988.2871 2179.5728]", + "1575": "[-11051.4199 13543.6074 2180.0164]", + "1576": "[-11248.5508 13057.2607 2179.6907]", + "1577": "[-11381.4277 12560.4619 2179.8494]", + "1578": "[-11460.4824 12054.2529 2179.9617]", + "1579": "[-11497.7715 11532.2471 2179.8164]", + "1580": "[-11499.2949 11010.2188 2179.7217]", + "1581": "[-11492.3594 10489.4561 2179.3845]", + "1582": "[-11492.0283 9969.4229 2179.719]", + "1583": "[-11492.7998 9450.2305 2179.5081]", + "1584": "[-11491.5146 8934.9932 2179.6116]", + "1585": "[-11492.4531 8420.6318 2179.3987]", + "1586": "[-11492.5313 7908.3662 2179.6741]", + "1587": "[-11491.1377 7391.4995 2179.4001]", + "1588": "[-11492.9219 6875.2041 2179.7595]", + "1589": "[-11491.457 6361.2524 2179.4404]", + "1590": "[-11492.6211 5842.9775 2179.6997]", + "1591": "[-11478.8486 5326.3853 2179.5867]", + "1592": "[-11407.5488 4815.3745 2180.2039]", + "1593": "[-11349.333 4305.4868 2179.3135]" + }, + "2": + { + "1": "[1149.7061 11993.4912 471.8709]", + "2": "[1647.6204 12118.1855 471.5758]", + "3": "[2155.5488 12208.4854 471.8649]", + "4": "[2666.6738 12251.9727 471.706]", + "5": "[3180.9329 12264.8008 471.6657]", + "6": "[3693.1946 12263.7051 471.899]", + "7": "[4206.3252 12265.7324 472.0312]", + "8": "[4720.7666 12266.3584 471.8642]", + "9": "[5237.0371 12266.8525 471.9041]", + "10": "[5749.063 12266.5381 471.9674]", + "11": "[6262.5894 12267.9639 471.8278]", + "12": "[6777.4565 12267.582 471.9171]", + "13": "[7289.4731 12265.6563 471.921]", + "14": "[7802.2734 12266.6016 471.8067]", + "15": "[8315.3164 12267.0703 471.8252]", + "16": "[8800.1729 12265.6318 471.9023]", + "17": "[9200.1729 12265.6318 471.9023]", + "18": "[9500.1729 12265.6318 471.9023]" + }, + "3": + { + "1": "[9500.2754 12528.6992 471.9165]", + "2": "[9200.2754 12528.6992 471.9165]", + "3": "[8800.2754 12528.6992 471.9165]", + "4": "[8473.4805 12529.6289 472.0414]", + "5": "[7960.2861 12530.0225 471.9445]", + "6": "[7447.1323 12530.8184 472.0032]", + "7": "[6929.9473 12529.6914 471.8417]", + "8": "[6412.8696 12529.9248 471.7496]", + "9": "[5897.6616 12529.1426 471.6637]", + "10": "[5384.9131 12530.3135 471.9077]", + "11": "[4871.9653 12528.7031 471.8727]", + "12": "[4354.4063 12530.6787 472.2907]", + "13": "[3840.0676 12529.3428 472.1593]", + "14": "[3326.6487 12529.041 471.7974]", + "15": "[2809.8347 12535.7803 471.6441]", + "16": "[2296.3577 12571.3984 471.9398]", + "17": "[1786.0107 12648.791 471.9854]", + "18": "[1286.6857 12764.1416 471.7498]", + "19": "[853.9733 12869.3545 471.8998]" + }, + "4": + { + "1": "[-10268.7227 -4557.6089 2181.6045]", + "2": "[-10270.8271 -4456.5093 2181.4033]", + "3": "[-10263.4785 -3941.3706 2180.8494]", + "4": "[-10260.1445 -3427.551 2180.333]", + "5": "[-10260.6563 -2913.6797 2179.7192]", + "6": "[-10260.7422 -2400.1184 2179.9446]", + "7": "[-10260.0127 -1886.1812 2179.3569]", + "8": "[-10260.4053 -1372.1906 2179.4199]", + "9": "[-10260.7881 -858.0769 2179.4697]", + "10": "[-10259.8291 -344.5122 2179.3892]", + "11": "[-10260.2539 168.1699 2179.3755]", + "12": "[-10260.377 680.4819 2179.4272]", + "13": "[-10260.1563 1194.1652 2179.3877]", + "14": "[-10261.3525 1707.4521 2179.4446]", + "15": "[-10260.0332 2220.0439 2179.3977]", + "16": "[-10260.8887 2732.6497 2179.4526]", + "17": "[-10261.2832 3244.7581 2179.5784]", + "18": "[-10259.5107 3757.3601 2179.4126]", + "19": "[-10250.8076 4269.5356 2177.6321]", + "20": "[-10223.168 4783.8062 2176.6841]", + "21": "[-10172.4307 5294.6182 2175.7712]", + "22": "[-10100.3057 5802.2827 2174.8362]", + "23": "[-10004.7012 6309.6992 2174.05]", + "24": "[-9880.1816 6813.6343 2173.6196]", + "25": "[-9726.7441 7303.978 2172.5789]", + "26": "[-9540.5127 7787.8545 2171.6858]", + "27": "[-9322.0898 8252.4814 2171.3804]", + "28": "[-9065.0254 8703.4697 2171.1641]", + "29": "[-8774.125 9126.1992 2170.7981]", + "30": "[-8447.3438 9522.3105 2170.5413]", + "31": "[-8086.041 9886.8828 2170.7556]", + "32": "[-7687.6431 10221.249 2170.532]", + "33": "[-7257.7056 10520.0449 2170.8914]", + "34": "[-6803.4751 10781.7051 2171.4871]", + "35": "[-6331.0127 11005.876 2172.0237]", + "36": "[-5845.7217 11192.3633 2172.2947]", + "37": "[-5354.0332 11345.9453 2173.3325]", + "38": "[-4847.4805 11471.0781 2174.1399]", + "39": "[-4331.5327 11569.6719 2174.9729]", + "40": "[-3811.407 11641.9297 2175.5979]", + "41": "[-3290.1194 11691.7305 2177.5242]", + "42": "[-2768.344 11720.8447 2177.9475]", + "43": "[-2246.8826 11731.0996 2178.8691]", + "44": "[-1726.334 11727.9648 2178.0957]", + "45": "[-1207.167 11725.6865 2178.4875]", + "46": "[-689.3352 11719.9531 2178.1711]", + "47": "[-173.2559 11685.5879 2178.5515]", + "48": "[339.2739 11622.9189 2178.625]", + "49": "[846.8356 11530.6787 2178.3645]", + "50": "[1347.2244 11408.7373 2178.5471]", + "51": "[1838.2415 11255.9951 2178.4741]", + "52": "[2317.8855 11072.4336 2178.4609]", + "53": "[2802.7278 10907.2305 2178.7019]", + "54": "[3300.7244 10787.2119 2178.7122]", + "55": "[3818.4224 10695.2656 2178.4255]", + "56": "[4339.8135 10634.7227 2178.6499]", + "57": "[4860.6743 10600.0625 2178.4827]", + "58": "[5372.707 10592.1133 2178.7102]", + "59": "[5885.9692 10596.3408 2178.2969]", + "60": "[6398.9849 10598.5781 2178.5833]", + "61": "[6912.876 10597.9443 2178.4004]", + "62": "[7432.7905 10598.0508 2178.4321]", + "63": "[7955.4443 10598.5605 2178.4529]", + "64": "[8469.8516 10597.3672 2178.3962]", + "65": "[8992.8984 10578.1436 2185.5095]", + "66": "[9509.5283 10497.5723 2192.9429]", + "67": "[10010.4932 10349.001 2196.9153]", + "68": "[10475.8486 10125.7246 2201.0051]", + "69": "[10845.4121 9860.8037 2202.1848]", + "70": "[11157.9365 9540.8945 2201.895]", + "71": "[11414.0254 9165.8877 2200.5515]", + "72": "[11623.3193 8702.8525 2197.0042]", + "73": "[11762.2119 8206.8672 2192.3262]", + "74": "[11837.1465 7689.4155 2185.9902]", + "75": "[11859.748 7169.4448 2179.6833]", + "76": "[11849.5029 6650.6587 2177.2]", + "77": "[11848.1729 6138.3989 2178.634]", + "78": "[11846.6563 5619.7383 2178.4744]", + "79": "[11847.5566 5105.9922 2178.3835]", + "80": "[11848.1816 4589.23 2178.4128]", + "81": "[11847.5029 4069.176 2178.4187]", + "82": "[11847.2715 3554.0212 2178.4224]", + "83": "[11846.751 3041.7893 2178.4236]", + "84": "[11846.8115 2522.9092 2178.6113]", + "85": "[11847.8359 2005.2775 2178.4795]", + "86": "[11848.5586 1488.2031 2178.418]", + "87": "[11847.3623 974.2833 2178.5784]", + "88": "[11846.8096 457.9672 2178.5032]", + "89": "[11848.1621 -54.4038 2178.4258]", + "90": "[11847.2861 -572.2546 2178.4165]", + "91": "[11846.7188 -1086.8623 2178.4543]", + "92": "[11847.5977 -1599.2151 2178.4907]", + "93": "[11848.0732 -2111.6836 2178.4724]", + "94": "[11847.4043 -2623.9604 2178.3965]", + "95": "[11846.749 -3136.8398 2178.5125]", + "96": "[11847.085 -3650.8232 2178.5266]", + "97": "[11846.9268 -4162.8623 2178.519]", + "98": "[11846.1963 -4675.6885 2178.1636]", + "99": "[11847.2686 -5192.2627 2178.2163]", + "100": "[11846.459 -5708.1753 2178.4663]", + "101": "[11847.5664 -6220.7847 2178.2974]", + "102": "[11827.8301 -6733.8311 2185.1445]", + "103": "[11749.6836 -7245.6987 2192.303]", + "104": "[11606.4072 -7743.5361 2197.6985]", + "105": "[11386.665 -8211.9971 2200.031]", + "106": "[11124.4639 -8584.5107 2201.4885]", + "107": "[10804.9463 -8901.7441 2201.5288]", + "108": "[10421.0625 -9168.0791 2200.1321]", + "109": "[9972.7109 -9374.0967 2197.0369]", + "110": "[9472.7783 -9516.6816 2192.0498]", + "111": "[8965.124 -9593.7188 2186.179]", + "112": "[8450.4668 -9618.5518 2179.2405]", + "113": "[7932.2588 -9611.4131 2176.9009]", + "114": "[7411.3438 -9608.9023 2178.1509]", + "115": "[6897.2847 -9607.9893 2178.3391]", + "116": "[6382.2998 -9608.3467 2178.2866]", + "117": "[5862.0005 -9608.6953 2178.2793]", + "118": "[5341.7051 -9608.0918 2178.2097]", + "119": "[4821.937 -9607.6963 2178.1318]", + "120": "[4302.5576 -9608.7217 2178.3662]", + "121": "[3783.6682 -9607.9307 2178.1631]", + "122": "[3265.2373 -9608.7949 2178.1458]", + "123": "[2747.5068 -9608.6924 2178.3616]", + "124": "[2230.2424 -9607.668 2178.4102]", + "125": "[1712.156 -9608.8857 2157.9211]", + "126": "[1201.1963 -9607.9697 2102.7781]", + "127": "[683.0198 -9608.6719 2042.079]", + "128": "[171.3324 -9608.8359 1981.0051]", + "129": "[-340.561 -9608.4443 1919.254]", + "130": "[-854.4929 -9608.0078 1852.1023]", + "131": "[-1372.8306 -9607.6768 1782.8167]", + "132": "[-1891.1409 -9608.8086 1714.6556]", + "133": "[-2408.2825 -9608.4619 1646.5038]", + "134": "[-2925.2817 -9607.416 1578.766]", + "135": "[-3442.679 -9608.8965 1510.504]", + "136": "[-3959.999 -9607.5234 1442.2585]", + "137": "[-4471.0171 -9608.7588 1374.9133]", + "138": "[-4986.3022 -9608.2783 1307.1107]", + "139": "[-5495.7964 -9608.7148 1239.9866]", + "140": "[-6011.7402 -9607.5791 1172.2692]", + "141": "[-6523.9146 -9609.4346 1104.6937]", + "142": "[-7033.207 -9608.1475 1037.7224]", + "143": "[-7550.2246 -9609.1797 969.5945]", + "144": "[-8065.5596 -9607.7344 901.6972]", + "145": "[-8576.3721 -9608.8379 834.5849]", + "146": "[-9094.0449 -9608.377 773.3436]", + "147": "[-9610.3564 -9608.4541 713.3478]", + "148": "[-10126.7412 -9608.5791 656.8775]", + "149": "[-10643.9551 -9609.293 608.6824]", + "150": "[-11160.6855 -9608.1836 586.8046]", + "151": "[-11677.7295 -9563.9775 594.8205]", + "152": "[-12184.0957 -9455.0029 596.2835]", + "153": "[-12669.0508 -9270.8594 595.3491]", + "154": "[-13043.9658 -9046.6133 595.1846]", + "155": "[-13311.7236 -8814.2598 595.2158]", + "156": "[-13594.6611 -8464.0176 595.4872]", + "157": "[-13751.9141 -8177.9756 595.2568]", + "158": "[-13929.6602 -7692.3721 595.78]", + "159": "[-14032.4844 -7186.7324 596.3227]", + "160": "[-14076.9316 -6672.5044 596.6495]", + "161": "[-14074.3857 -6155.7402 596.2471]", + "162": "[-14069.458 -5638.1597 596.3699]", + "163": "[-14067.6865 -5123.894 596.405]", + "164": "[-14067.123 -4608.1816 596.5309]", + "165": "[-14067.6113 -4095.8418 596.4282]", + "166": "[-14068.9824 -3582.4441 596.4368]", + "167": "[-14068.0518 -3070.1155 596.4349]", + "168": "[-14068.2559 -2556.7903 596.579]", + "169": "[-14067.252 -2041.6232 596.4949]", + "170": "[-14067.9541 -1529.1222 596.6596]", + "171": "[-14072.2529 -1016.5931 596.7346]", + "172": "[-14115.8047 -505.9184 596.611]", + "173": "[-14223.2988 0.1909 596.4619]", + "174": "[-14325.1133 502.677 597.053]", + "175": "[-14400.7021 1010.1814 596.6577]", + "176": "[-14406.8301 1528.5154 596.5728]", + "177": "[-14396.2402 2040.5795 596.0919]", + "178": "[-14396.8633 2560.3918 596.1834]", + "179": "[-14396.6729 3074.7222 597.4303]", + "180": "[-14395.0313 3596.2012 596.8538]", + "181": "[-14396.4727 4117.0669 596.9808]", + "182": "[-14395.2021 4637.0269 596.9192]", + "183": "[-14396.7207 5155.8018 597.0074]", + "184": "[-14396.2354 5673.8359 596.9749]", + "185": "[-14387.5557 6191.5898 594.8278]", + "186": "[-14355.8027 6708.1265 594.5004]", + "187": "[-14303.582 7223.54 593.0807]", + "188": "[-14228.4697 7738.9253 592.1445]", + "189": "[-14130.0625 8243.3457 591.6728]", + "190": "[-14002.7773 8744.6729 590.7141]", + "191": "[-13844.7002 9242.583 589.7132]", + "192": "[-13653.9814 9726.9287 589.2498]", + "193": "[-13428.499 10194.1572 588.7036]", + "194": "[-13166.3291 10641.3408 588.2028]", + "195": "[-12871.3408 11060.2656 587.8501]", + "196": "[-12540.6807 11452.1992 587.9045]", + "197": "[-12176.0635 11812.5205 588.3688]", + "198": "[-11774.3633 12142.167 588.3329]", + "199": "[-11341.9502 12436.4932 588.6304]", + "200": "[-10885.6592 12694.0098 589.0508]", + "201": "[-10410.9951 12912.7656 589.4727]", + "202": "[-9925.1367 13096.4961 590.0967]", + "203": "[-9432.3584 13245.5361 590.9692]", + "204": "[-8922.8945 13368.3428 591.4713]", + "205": "[-8414.001 13461.833 592.6805]", + "206": "[-7893.5146 13531.9414 593.6059]", + "207": "[-7378.6245 13579.4014 594.5003]", + "208": "[-6855.2354 13606.7217 595.5252]", + "209": "[-6341.0366 13615.1787 597.0935]", + "210": "[-5822.1182 13611.6582 611.1132]", + "211": "[-5302.3193 13610.5264 657.7746]", + "212": "[-4782.5605 13608.4268 725.586]", + "213": "[-4261.6162 13609.4697 791.8584]", + "214": "[-3743.0405 13609.2578 854.8695]", + "215": "[-3231.0706 13609.4365 917.5817]", + "216": "[-2709.1382 13611.4844 963.1545]", + "217": "[-2193.8154 13609.4277 982.5663]", + "218": "[-1669.8699 13611.0498 976.2386]", + "219": "[-1152.3647 13609.4512 974.1632]", + "220": "[-640.3276 13603.5225 973.7356]", + "221": "[-117.2977 13573.7314 971.8549]", + "222": "[401.0161 13523.4951 971.3842]", + "223": "[916.2128 13449.8418 969.9705]", + "224": "[1427.0559 13352.4189 969.1614]", + "225": "[1931.2501 13225.291 968.1949]", + "226": "[2426.8691 13071.1084 967.7642]", + "227": "[2910.1033 12882.3818 967.2087]", + "228": "[3378.1565 12659.8984 966.9752]", + "229": "[3826.2148 12400.9404 966.0992]", + "230": "[4250.5278 12105.9912 965.8866]", + "231": "[4646.4072 11774.9756 965.6273]", + "232": "[5009.9048 11409.8193 965.8998]", + "233": "[5338.4209 11014.2891 965.7605]", + "234": "[5629.3804 10591.2725 966.3626]", + "235": "[5883.8765 10146.8711 966.816]", + "236": "[6107.6104 9671.2227 966.9833]", + "237": "[6295.7607 9181.7178 967.7479]", + "238": "[6450.3179 8681.8105 968.4175]", + "239": "[6574.1621 8175.0396 969.2623]", + "240": "[6670.4688 7663.4707 970.4087]", + "241": "[6741.4004 7149.0454 971.237]", + "242": "[6790.0063 6633.0469 971.7411]", + "243": "[6818.7876 6116.71 973.1467]", + "244": "[6828.9717 5600.8135 974.1845]", + "245": "[6816.6582 5085.5947 969.1938]", + "246": "[6742.3574 4576.1812 964.1042]", + "247": "[6588.395 4074.1089 960.3892]", + "248": "[6414.9424 3735.9688 959.1522]", + "249": "[6196.6025 3447.8174 959.7695]", + "250": "[5946.1602 3217.0334 963.2781]", + "251": "[5834.5229 3145.541 963.8619]", + "252": "[5367.5981 2927.1973 960.2477]", + "253": "[4874.667 2781.5811 969.6154]", + "254": "[4703.2666 2762.3809 970.1625]", + "255": "[4185.1978 2736.197 971.7379]", + "256": "[3665.7163 2745.0483 974.9413]", + "257": "[3154.0886 2778.782 974.1307]", + "258": "[2643.8401 2857.2161 973.7599]", + "259": "[2127.9497 2920.6563 973.6845]", + "260": "[1611.4692 2932.3577 973.7036]", + "261": "[1094.7761 2924.5779 973.4961]", + "262": "[580.7166 2923.0039 973.5047]", + "263": "[68.0892 2924.5088 973.4715]", + "264": "[-449.9609 2924.5002 973.4487]", + "265": "[-963.1895 2923.9087 973.5444]", + "266": "[-1476.8103 2924.2458 973.4741]", + "267": "[-1991.321 2923.7419 973.8156]", + "268": "[-2503.8723 2912.6663 973.9016]", + "269": "[-3012.1169 2847.3848 974.3349]", + "270": "[-3523.2405 2786.1951 973.6263]", + "271": "[-4037.8789 2786.4116 973.7963]", + "272": "[-4551.9199 2792.8948 973.7584]", + "273": "[-5070.3765 2792.832 974.6797]", + "274": "[-5582.4526 2793.1865 974.5164]", + "275": "[-6101.2305 2792.1174 974.546]", + "276": "[-6618.8252 2793.1938 974.1494]", + "277": "[-7134.6045 2793.8738 974.414]", + "278": "[-7654.5317 2792.833 974.1188]", + "279": "[-8167.8364 2792.823 974.3582]", + "280": "[-8686.335 2793.7488 974.2281]", + "281": "[-9199.3916 2793.551 974.3622]", + "282": "[-9717.8691 2792.4751 974.2421]", + "283": "[-10234.2988 2792.5015 974.3885]", + "284": "[-10748.5635 2793.1599 974.1929]", + "285": "[-11261.0439 2792.4622 974.2463]", + "286": "[-11775.166 2793.8193 974.2496]", + "287": "[-12208.5352 2793.8286 974.2706]" + }, + "5": + { + "1": "[-12222.8564 2529.3074 974.2734]", + "2": "[-11709.5693 2529.6064 974.1361]", + "3": "[-11195.1328 2530.0154 974.2328]", + "4": "[-10682.3037 2528.9387 974.0842]", + "5": "[-10165.8965 2528.9329 974.2338]", + "6": "[-9653.7637 2529.749 974.2043]", + "7": "[-9136.2871 2529.3433 974.2034]", + "8": "[-8618.2725 2529.4963 974.1495]", + "9": "[-8102.4077 2528.9119 974.212]", + "10": "[-7588.9629 2530.0537 974.1369]", + "11": "[-7070.522 2528.9595 974.1296]", + "12": "[-6554.375 2529.9775 974.3955]", + "13": "[-6035.3257 2529.874 974.3281]", + "14": "[-5519.6841 2529.0969 974.9863]", + "15": "[-5006.3872 2528.9966 974.6865]", + "16": "[-4488.3623 2529.8101 973.9466]", + "17": "[-3971.9187 2534.3503 973.9086]", + "18": "[-3458.6536 2533.6165 973.8982]", + "19": "[-2946.8567 2487.4189 973.8184]", + "20": "[-2438.7292 2402.6035 973.7407]", + "21": "[-1927.5867 2360.9526 973.8967]", + "22": "[-1415.2869 2351.7715 973.5878]", + "23": "[-901.8391 2352.8135 973.5571]", + "24": "[-387.3718 2351.8645 973.5016]", + "25": "[124.9952 2352.0166 973.5931]", + "26": "[642.2507 2353.0569 973.441]", + "27": "[1162.2167 2351.8398 973.5473]", + "28": "[1674.6829 2350.0334 973.4114]", + "29": "[2187.9868 2342.8403 973.6503]", + "30": "[2701.3423 2367.022 973.6964]", + "31": "[3206.719 2452.1375 973.5668]", + "32": "[3725.3086 2474.4912 973.7033]", + "33": "[4243.1006 2473.6287 973.8121]", + "34": "[4756.4932 2518.9216 973.5464]", + "35": "[5259.5996 2623.199 973.4395]", + "36": "[5739.0771 2804.887 973.8857]", + "37": "[6048.0547 2989.5469 973.5084]", + "38": "[6375.3916 3273.5364 973.1703]", + "39": "[6581.9927 3528.7148 973.6483]", + "40": "[6811.5991 3943.8208 973.3477]", + "41": "[6967.2959 4398.7451 973.6734]", + "42": "[7062.3931 4904.6357 973.2808]", + "43": "[7092.8428 5415.9736 974.1368]", + "44": "[7086.5796 5935.0601 974.7697]", + "45": "[7065.1758 6452.5244 975.7365]", + "46": "[7025.5835 6967.3057 976.4505]", + "47": "[6963.3872 7478.3208 977.2619]", + "48": "[6879.7485 7984.9443 978.4224]", + "49": "[6771.7065 8485.7285 979.1642]", + "50": "[6635.4673 8981.2783 979.6291]", + "51": "[6469.2417 9469.5576 979.9997]", + "52": "[6270.9307 9949.4033 980.6126]", + "53": "[6040.041 10408.2256 981.2039]", + "54": "[5772.1738 10851.2305 981.5464]", + "55": "[5470.7065 11268.0332 981.7029]", + "56": "[5133.8198 11659.7578 981.6677]", + "57": "[4761.251 12022.4004 981.7036]", + "58": "[4364.3618 12348.0664 981.4476]", + "59": "[3936.9814 12640.9229 981.4588]", + "60": "[3484.3955 12899.3633 981.3065]", + "61": "[3013.1082 13123.1777 980.7447]", + "62": "[2530.5151 13311.3252 980.1227]", + "63": "[2035.8004 13468.9238 979.2413]", + "64": "[1532.6665 13596.9043 978.7244]", + "65": "[1024.1235 13698.1924 978.0605]", + "66": "[511.7805 13775.208 977.2831]", + "67": "[-3.0069 13828.2773 976.5934]", + "68": "[-522.1172 13862.5771 975.5524]", + "69": "[-1038.4788 13873.9619 973.8083]", + "70": "[-1555.4906 13872.9512 975.6273]", + "71": "[-2071.0193 13874.54 981.9708]", + "72": "[-2584.3564 13874.7637 970.2206]", + "73": "[-3097.012 13874.7842 932.6218]", + "74": "[-3611.1223 13873.3213 870.9927]", + "75": "[-4124.5264 13873.5488 808.1771]", + "76": "[-4641.9946 13872.3398 743.6699]", + "77": "[-5155.2764 13874.7578 674.415]", + "78": "[-5675.0361 13873.4639 622.2845]", + "79": "[-6198.873 13878.5176 596.1]", + "80": "[-6711.5229 13874.3779 596.7764]", + "81": "[-7235.4824 13852.7715 598.1526]", + "82": "[-7757.2271 13811.082 598.9756]", + "83": "[-8276.0391 13748.9023 600.0215]", + "84": "[-8790.4004 13663.0488 600.5193]", + "85": "[-9298.9053 13551.7295 600.8527]", + "86": "[-9799.6387 13413.2324 601.8783]", + "87": "[-10290.0244 13244.1992 602.5479]", + "88": "[-10767.0342 13043.0488 603.2238]", + "89": "[-11227.3604 12808.0898 603.6512]", + "90": "[-11667.8711 12539.3369 604.0027]", + "91": "[-12083.4395 12235.0684 604.058]", + "92": "[-12471.1387 11896.9346 604.1297]", + "93": "[-12827.6064 11527.1914 603.7335]", + "94": "[-13150.6797 11128.752 603.8873]", + "95": "[-13438.8135 10705.0088 603.9808]", + "96": "[-13696.7021 10248.584 603.3764]", + "97": "[-13920.3564 9774.7422 602.7228]", + "98": "[-14109.041 9286.3027 602.3499]", + "99": "[-14265.7695 8786.9277 601.6778]", + "100": "[-14391.8076 8281.4238 600.9151]", + "101": "[-14491.2686 7767.3267 600.2775]", + "102": "[-14566.1982 7254.9302 599.4641]", + "103": "[-14618.2578 6738.8486 598.9335]", + "104": "[-14650.5195 6221.1157 597.608]", + "105": "[-14660.6973 5701.0381 597.3842]", + "106": "[-14660.627 5188.6733 596.86]", + "107": "[-14660.0576 4672.6992 597.2836]", + "108": "[-14660.2617 4152.6274 597.1367]", + "109": "[-14660.3223 3637.6543 597.2045]", + "110": "[-14660.2744 3118.5161 597.1017]", + "111": "[-14660.7148 2604.6362 596.5537]", + "112": "[-14660.2461 2092.3586 596.2527]", + "113": "[-14660.1445 1573.7197 596.5474]", + "114": "[-14660.2324 1056.8696 596.4056]", + "115": "[-14660.4307 544.3518 596.5305]", + "116": "[-14660.7383 26.8171 596.5945]", + "117": "[-14660.3838 -489.2924 596.4991]", + "118": "[-14660.9805 -1004.5152 596.5204]", + "119": "[-14660.7129 -1517.4934 596.4979]", + "120": "[-14660.1182 -2030.7361 596.5276]", + "121": "[-14660.7031 -2542.7903 596.4108]", + "122": "[-14660.1836 -3056.6755 596.4315]", + "123": "[-14661.2607 -3572.5403 596.3821]", + "124": "[-14659.9297 -4087.0559 596.3149]", + "125": "[-14661.4658 -4605.52 596.4345]", + "126": "[-14661.1035 -5119.2754 596.3124]", + "127": "[-14660.3066 -5638.6719 596.325]", + "128": "[-14662.8691 -6153.854 596.4159]", + "129": "[-14672.7129 -6667.5918 596.5308]", + "130": "[-14651.6738 -7185.1685 596.2339]", + "131": "[-14581.2598 -7700.7402 595.8959]", + "132": "[-14443.3574 -8202.5576 595.6874]", + "133": "[-14221.1875 -8671.9307 594.9874]", + "134": "[-14031.3154 -8938.9141 595.1469]", + "135": "[-13702.7539 -9262.6719 595.5042]", + "136": "[-13455.5186 -9432.4004 595.6888]", + "137": "[-12991.125 -9651.667 596.0068]", + "138": "[-12491.1992 -9790.5508 596.6472]", + "139": "[-11974.5283 -9861.3164 596.9756]", + "140": "[-11459.4502 -9872.9922 592.1533]", + "141": "[-10943.5615 -9871.9668 590.5295]", + "142": "[-10429.9336 -9873.0742 626.995]", + "143": "[-9910.1025 -9872.4512 680.1151]", + "144": "[-9396.6807 -9872.46 738.1652]", + "145": "[-8878.1582 -9872.2617 799.1583]", + "146": "[-8366.0273 -9871.9189 862.2281]", + "147": "[-7848.2129 -9871.8096 930.4001]", + "148": "[-7335.1255 -9872.249 997.9007]", + "149": "[-6826.0176 -9871.9111 1065.0668]", + "150": "[-6308.9155 -9872.0137 1133.0264]", + "151": "[-5794.6221 -9872.3398 1200.8105]", + "152": "[-5282.5654 -9871.458 1268.0663]", + "153": "[-4772.3804 -9872.9619 1335.5774]", + "154": "[-4263.6104 -9871.5293 1402.2443]", + "155": "[-3745.1995 -9873.9443 1470.8501]", + "156": "[-3227.7117 -9871.1523 1538.6548]", + "157": "[-2711.0144 -9873.8135 1606.9125]", + "158": "[-2194.3042 -9871.6182 1674.7346]", + "159": "[-1676.9556 -9872.9756 1742.7867]", + "160": "[-1169.1462 -9872.4395 1809.9139]", + "161": "[-658.0099 -9872.3574 1878.286]", + "162": "[-140.7642 -9871.9277 1943.7389]", + "163": "[376.5978 -9871.6846 2005.9165]", + "164": "[896.2346 -9871.8164 2066.8665]", + "165": "[1408.9055 -9871.7227 2126.2129]", + "166": "[1930.4274 -9872.6143 2171.9866]", + "167": "[2448.7104 -9872.2578 2178.01]", + "168": "[2966.1985 -9872.3506 2178.2495]", + "169": "[3483.24 -9872.499 2178.092]", + "170": "[3999.4553 -9872.999 2178.0679]", + "171": "[4515.2754 -9872.0381 2178.1223]", + "172": "[5027.9585 -9872.7529 2178.0286]", + "173": "[5542.374 -9871.5508 2178.1545]", + "174": "[6060.0601 -9872.585 2178.1301]", + "175": "[6581.3193 -9872.2842 2178.4146]", + "176": "[7100.3374 -9872.4375 2178.406]", + "177": "[7616.3901 -9871.9365 2177.6638]", + "178": "[8128.3574 -9878.8906 2175.1848]", + "179": "[8647.6953 -9879.1787 2184.2263]", + "180": "[9158.7051 -9837.7666 2194.8787]", + "181": "[9669.2324 -9741.2773 2204.7888]", + "182": "[10159.6846 -9583.2461 2210.6204]", + "183": "[10619.6357 -9354.835 2215.7234]", + "184": "[11035.0166 -9050.9111 2217.8059]", + "185": "[11359.6973 -8711.7959 2217.4968]", + "186": "[11646.0723 -8286.793 2215.2349]", + "187": "[11860.3252 -7816.8711 2209.9509]", + "188": "[12004.6377 -7317.644 2202.5779]", + "189": "[12088.4883 -6811.1543 2191.3782]", + "190": "[12113.0703 -6298.2646 2179.1077]", + "191": "[12112.5439 -5779.1533 2178.6282]", + "192": "[12111.2451 -5264.2871 2178.2803]", + "193": "[12112.0908 -4747.1172 2178.1643]", + "194": "[12112.0391 -4235.0352 2178.2515]", + "195": "[12110.9268 -3719.6057 2178.4741]", + "196": "[12111.3154 -3205.2476 2178.5486]", + "197": "[12110.6797 -2691.7222 2178.3982]", + "198": "[12111.6494 -2179.0315 2178.3977]", + "199": "[12111.6943 -1662.9927 2178.3052]", + "200": "[12111.2012 -1147.2665 2178.4158]", + "201": "[12111.5518 -634.5328 2178.4563]", + "202": "[12111.3545 -118.4345 2178.3101]", + "203": "[12111.8164 399.5817 2178.4292]", + "204": "[12111.5781 917.0147 2178.4209]", + "205": "[12110.6367 1431.1494 2178.5291]", + "206": "[12111.4805 1945.1375 2178.3591]", + "207": "[12112.2334 2465.3438 2178.4355]", + "208": "[12111.5469 2978.7136 2178.5186]", + "209": "[12111.6982 3493.5183 2178.355]", + "210": "[12111.2324 4008.1187 2178.5613]", + "211": "[12111.9551 4530.3555 2178.385]", + "212": "[12111.1504 5042.8491 2178.635]", + "213": "[12111.166 5563.7305 2178.4155]", + "214": "[12111.3018 6080.3765 2178.739]", + "215": "[12112.957 6602.1875 2176.7202]", + "216": "[12124.0957 7118.1675 2178.27]", + "217": "[12105.582 7639.5137 2189.719]", + "218": "[12040.1064 8152.2559 2199.6787]", + "219": "[11917.5332 8650.9678 2207.8503]", + "220": "[11724.4102 9135.9355 2213.8416]", + "221": "[11455.0479 9582.4736 2217.3901]", + "222": "[11124.8916 9960.2852 2218.3418]", + "223": "[10757.1611 10255.9668 2216.9331]", + "224": "[10307.668 10508.3252 2212.9976]", + "225": "[9822.6602 10688.9365 2206.9902]", + "226": "[9315.8018 10803.1338 2198.2634]", + "227": "[8796.9443 10857.1191 2185.1013]", + "228": "[8282.7227 10861.6885 2178.6506]", + "229": "[7765.0005 10862.7129 2178.4001]", + "230": "[7242.9131 10862.3018 2178.3247]", + "231": "[6724.7285 10863.1221 2178.5986]", + "232": "[6210.2319 10861.1416 2178.4011]", + "233": "[5687.3452 10860.3867 2178.4409]", + "234": "[5167.3398 10856.9541 2178.9912]", + "235": "[4652.4795 10876.0742 2178.2859]", + "236": "[4130.75 10919.7949 2178.2383]", + "237": "[3617.7634 10992.2998 2178.2524]", + "238": "[3114.4561 11092.1777 2178.7886]", + "239": "[2616.3892 11229.0264 2178.5295]", + "240": "[2133.4177 11407.502 2178.8992]", + "241": "[1644.0787 11585.6152 2179.1411]", + "242": "[1143.49 11725.418 2178.1321]", + "243": "[636.2958 11836.877 2178.3682]", + "244": "[124.2031 11915.7715 2178.3396]", + "245": "[-390.1681 11968.2139 2178.5139]", + "246": "[-905.3509 11989.4893 2178.6245]", + "247": "[-1419.545 11989.9092 2177.7705]", + "248": "[-1932.3444 11993.2109 2178.043]", + "249": "[-2455.9858 11993.7773 2179.634]", + "250": "[-2972.0273 11975.2393 2180.3337]", + "251": "[-3488.0276 11939.8545 2181.1135]", + "252": "[-4008.9038 11882.2871 2182.1008]", + "253": "[-4515.8057 11804.084 2182.8845]", + "254": "[-5018.7759 11701.75 2183.5488]", + "255": "[-5516.25 11572.4893 2184.4519]", + "256": "[-6006.3818 11413.6436 2184.8992]", + "257": "[-6486.1265 11223.0127 2185.2651]", + "258": "[-6950.4854 10999.7207 2185.6826]", + "259": "[-7396.2231 10743.2285 2186.1592]", + "260": "[-7817.873 10450.5918 2186.4905]", + "261": "[-8213.3154 10124.9395 2186.6631]", + "262": "[-8585.2285 9759.0469 2186.3767]", + "263": "[-8923.0566 9363.3467 2186.7092]", + "264": "[-9225.3564 8939.9336 2186.2571]", + "265": "[-9489.3916 8498.543 2185.9094]", + "266": "[-9719.8848 8033.8462 2185.4517]", + "267": "[-9915.4678 7558.1104 2184.894]", + "268": "[-10080.2559 7068.9629 2184.4319]", + "269": "[-10214.7119 6572.8857 2183.7163]", + "270": "[-10321.5537 6071.5688 2183.1799]", + "271": "[-10404.0361 5559.1982 2182.2268]", + "272": "[-10464.3311 5050.6768 2181.2646]", + "273": "[-10504.873 4535.6191 2180.3757]", + "274": "[-10522.666 4020.2798 2179.3337]", + "275": "[-10524.0762 3508.0361 2179.4543]", + "276": "[-10524.1045 2995.7358 2179.386]", + "277": "[-10522.9063 2481.1711 2179.4783]", + "278": "[-10524.251 1969.068 2179.4265]", + "279": "[-10524.293 1455.8713 2179.4485]", + "280": "[-10524.5156 943.5299 2179.3679]", + "281": "[-10523.5615 430.4345 2179.4058]", + "282": "[-10524.7129 -81.7083 2179.4626]", + "283": "[-10524.6123 -593.9414 2179.4099]", + "284": "[-10523.5557 -1106.3374 2179.4734]", + "285": "[-10524.0684 -1618.9191 2179.3088]", + "286": "[-10531.0215 -2132.3813 2179.3235]", + "287": "[-10536.4219 -2645.6179 2179.845]", + "288": "[-10466.8662 -3153.2417 2179.8174]", + "289": "[-10377.2998 -3493.9282 2180.3301]" + }, + "6": + { + "1": "[-11349.333 4305.4868 2179.3135]", + "2": "[-11354.6914 3781.5933 2181.9985]", + "3": "[-11362.1758 3263.6523 2180.1042]", + "4": "[-11360.8086 2742.3286 2180.6736]", + "5": "[-11363.3125 2223.7551 2180.4067]", + "6": "[-11360.3867 1704.5952 2180.5271]", + "7": "[-11360.8398 1189.1523 2180.4695]", + "8": "[-11362.1211 676.8013 2180.291]", + "9": "[-11360.6328 159.2469 2180.3828]", + "10": "[-11361.2051 -356.141 2180.4333]", + "11": "[-11361.1973 -869.0054 2180.4558]", + "12": "[-11361.9658 -1385.7673 2180.4436]", + "13": "[-11361.6221 -1900.0785 2180.4822]", + "14": "[-11355.0078 -2413.0015 2180.1279]", + "15": "[-11308.6895 -2792.0237 2179.915]", + "16": "[-11287.9453 -2879.6665 2179.0547]", + "17": "[-11266.6973 -2979.0522 2179.8198]", + "18": "[-11137.0654 -3475.6907 2179.968]", + "19": "[-11113.3721 -3635.271 2179.5664]" + }, + "7": + { + "1": "[15752.3076 -13997.667 -2990.6602]", + "2": "[15239.0869 -13997.0742 -2990.7283]", + "3": "[14723.4668 -13998.5811 -2990.7791]", + "4": "[14211.3809 -13997.8252 -2990.8386]", + "5": "[13696.0361 -13998.0615 -2990.7283]", + "6": "[13181.79 -13996.8887 -2990.6748]", + "7": "[12663.8545 -13998.1523 -2990.6082]", + "8": "[12146.79 -13997.6016 -2990.606]", + "9": "[11630.5703 -13998.2559 -2990.6187]", + "10": "[11115.4814 -13997.0059 -2990.5933]", + "11": "[10601.5996 -13998.3027 -2990.6379]", + "12": "[10088.9561 -13997.1748 -2990.5593]", + "13": "[9569.501 -13998.7031 -2990.699]", + "14": "[9054.0693 -13998.123 -2990.8379]", + "15": "[8537.1035 -13998.4053 -2990.5247]", + "16": "[8021.4028 -13998.373 -2990.7854]", + "17": "[7506.668 -13998.2686 -2990.8381]", + "18": "[6988.1602 -13997.4307 -2990.6941]", + "19": "[6471.8726 -13997.7568 -2990.6057]", + "20": "[5956.6777 -13998.5918 -2990.6416]", + "21": "[5441.7988 -13998.8018 -2990.7224]", + "22": "[4925.3433 -13997.8438 -2990.7485]", + "23": "[4405.9063 -13998.667 -2990.6929]", + "24": "[3892.188 -13998.3867 -2990.6204]", + "25": "[3379.2546 -13998.6846 -2990.5208]", + "26": "[2860.8342 -13998.167 -2990.5273]", + "27": "[2348.0273 -13998.6992 -2990.981]", + "28": "[1832.1597 -13998.1904 -2990.8752]", + "29": "[1311.343 -13998.0703 -2990.4685]", + "30": "[799.3024 -13998.7852 -2990.3401]", + "31": "[277.7896 -13998.7188 -2990.3525]", + "32": "[-234.4352 -13999.6406 -2990.6016]", + "33": "[-748.5453 -13998.9678 -2990.4641]", + "34": "[-1272.676 -13999.5449 -2990.655]", + "35": "[-1789.4409 -13998.4414 -2990.6824]", + "36": "[-2308.377 -13999.9307 -2990.3835]", + "37": "[-2827.1199 -13998.8398 -2990.6328]", + "38": "[-3343.8572 -13999.874 -2990.5845]", + "39": "[-3856.9377 -13999.2305 -2990.5964]", + "40": "[-4380.022 -13998.1279 -2990.603]", + "41": "[-4897.293 -13998.292 -2990.5649]", + "42": "[-5423.1304 -13998.9492 -2990.5681]", + "43": "[-5941.2085 -13999.1865 -2990.5776]", + "44": "[-6466.4629 -14000.416 -2990.5627]", + "45": "[-6982.3037 -14003.7891 -2990.7307]", + "46": "[-7504.2212 -13997.21 -2990.707]", + "47": "[-8029.2583 -13971.3877 -2990.6155]", + "48": "[-8555.2813 -13926.0254 -2990.521]", + "49": "[-9078.2666 -13857.3584 -2991.0679]", + "50": "[-9596.668 -13765.3027 -2990.8784]", + "51": "[-10108.3945 -13645.7402 -2990.5046]", + "52": "[-10611.0498 -13496.7305 -2990.4902]", + "53": "[-11100.5176 -13317.2764 -2990.0347]", + "54": "[-11571.5625 -13105.498 -2990.3137]", + "55": "[-12033.2842 -12854.4238 -2990.6099]", + "56": "[-12464.9092 -12569.9736 -2990.5515]", + "57": "[-12875.2529 -12247.2695 -2990.394]", + "58": "[-13256.7988 -11886.9609 -2990.5276]", + "59": "[-13604.0146 -11492.7783 -2990.4534]", + "60": "[-13914.1094 -11071.0957 -2990.3716]", + "61": "[-14184.4805 -10628.542 -2990.0522]", + "62": "[-14421.417 -10161.7158 -2990.1282]", + "63": "[-14622.1279 -9678.0186 -2990.6597]", + "64": "[-14790.2422 -9182.7363 -2990.3191]", + "65": "[-14927.4473 -8677.8574 -2990.4419]", + "66": "[-15033.9863 -8174.4751 -2990.6541]", + "67": "[-15116.5205 -7667.2495 -2990.5964]", + "68": "[-15176.1152 -7157.3198 -2990.5938]", + "69": "[-15214.3076 -6645.564 -2990.4131]", + "70": "[-15231.9521 -6133.0815 -2990.6091]", + "71": "[-15233.1729 -5619.4204 -2990.6196]", + "72": "[-15232.2275 -5103.376 -2990.6533]", + "73": "[-15233.1621 -4584.7495 -2990.6021]", + "74": "[-15233.3701 -4062.6133 -2990.5811]", + "75": "[-15233.7979 -3545.7292 -2990.5942]", + "76": "[-15232.792 -3022.1821 -2990.5813]", + "77": "[-15232.4346 -2503.0498 -2990.5637]", + "78": "[-15232.5156 -1986.4644 -2990.6409]", + "79": "[-15232.9854 -1463.8861 -2990.5811]", + "80": "[-15233.8535 -938.9845 -2990.4622]", + "81": "[-15232.4336 -418.8848 -2990.9263]", + "82": "[-15233.6191 100.7247 -2997.2678]", + "83": "[-15233.1533 617.0515 -2988.0332]", + "84": "[-15233.4111 1139.1522 -2950.9507]", + "85": "[-15233.4248 1652.3699 -2890.7676]", + "86": "[-15232.5957 2169.8838 -2826.6787]", + "87": "[-15233.5732 2680.2119 -2764.0227]", + "88": "[-15232.9219 3196.9907 -2700.5894]", + "89": "[-15232.7451 3710.7144 -2637.3645]", + "90": "[-15233.6826 4226.5068 -2574.3569]", + "91": "[-15232.3955 4736.7969 -2510.2017]", + "92": "[-15233.2373 5247.0537 -2441.7373]", + "93": "[-15233.0068 5760.5176 -2390.363]", + "94": "[-15236.6553 6277.4233 -2363.5662]", + "95": "[-15233.6396 6794.1362 -2362.4277]", + "96": "[-15213.374 7306.4814 -2362.5886]", + "97": "[-15174.5586 7821.4185 -2362.3826]", + "98": "[-15114.9512 8333.4033 -2362.552]", + "99": "[-15032.0098 8841.1436 -2362.7302]", + "100": "[-14924.6592 9343.6875 -2362.3899]", + "101": "[-14789.9453 9838.624 -2362.8425]", + "102": "[-14620.9248 10336.54 -2362.6294]", + "103": "[-14418.3838 10820.4727 -2362.2002]", + "104": "[-14181.2852 11287.4805 -2362.5371]", + "105": "[-13907.3164 11732.8154 -2362.3152]", + "106": "[-13596.915 12152.4141 -2362.6023]", + "107": "[-13251.1787 12541.999 -2362.7556]", + "108": "[-12872.8506 12898.7871 -2362.4795]", + "109": "[-12465.0732 13220.0537 -2362.6638]", + "110": "[-12032.1152 13504.2295 -2362.7224]", + "111": "[-11577.9648 13751.293 -2362.4333]", + "112": "[-11107.4209 13963.5762 -2362.2932]", + "113": "[-10623.9971 14142.3203 -2362.5603]", + "114": "[-10130.915 14289.5205 -2362.3521]", + "115": "[-9631.5156 14408.2197 -2362.8425]", + "116": "[-9127.3574 14500.6748 -2362.4099]", + "117": "[-8606.6611 14570.8447 -2362.5259]", + "118": "[-8083.8755 14618.8955 -2362.2314]", + "119": "[-7559.9893 14645.6045 -2362.5122]", + "120": "[-7035.9253 14650.5752 -2362.4211]", + "121": "[-6512.2041 14650.1514 -2362.5586]", + "122": "[-5988.7954 14649.1514 -2362.4954]", + "123": "[-5465.7261 14649.7988 -2362.5225]", + "124": "[-4942.9819 14650.3203 -2362.6951]", + "125": "[-4420.5508 14650.543 -2362.501]", + "126": "[-3898.4763 14649.0322 -2362.4128]", + "127": "[-3376.7456 14650.2822 -2362.6841]", + "128": "[-2855.321 14650.4766 -2362.6416]", + "129": "[-2334.2178 14650.6152 -2362.5012]", + "130": "[-1813.4512 14649.1709 -2362.6948]", + "131": "[-1293.0144 14650.751 -2362.6604]", + "132": "[-772.89 14649.5117 -2362.6013]", + "133": "[-253.1011 14649.7656 -2362.6941]", + "134": "[266.3712 14650.6289 -2362.5374]", + "135": "[785.4967 14649.084 -2362.6401]", + "136": "[1304.3424 14650.46 -2362.5864]", + "137": "[1822.8262 14650.7764 -2362.5913]", + "138": "[2341.011 14649.999 -2362.6086]", + "139": "[2858.8884 14649.3281 -2362.6511]", + "140": "[3376.4358 14650.207 -2362.6287]", + "141": "[3893.4695 14650.5459 -2362.6545]", + "142": "[4409.9551 14650.2842 -2362.4958]", + "143": "[4926.1289 14649.5752 -2362.6382]", + "144": "[5441.8633 14650.7891 -2362.5989]", + "145": "[5956.8716 14649.6865 -2362.426]", + "146": "[6471.4663 14649.46 -2362.5122]", + "147": "[6985.1255 14652.5732 -2362.4355]", + "148": "[7498.0098 14652.5801 -2362.53]", + "149": "[8022.7725 14637.2451 -2362.5205]", + "150": "[8545.1377 14602.2021 -2362.719]", + "151": "[9054.8301 14547.3281 -2362.4814]", + "152": "[9571.21 14468.7236 -2362.6565]", + "153": "[10078.583 14365.6787 -2362.5488]", + "154": "[10584.9551 14233.165 -2361.9521]", + "155": "[11075.374 14073.7344 -2362.4592]", + "156": "[11555.6348 13880.7188 -2362.498]", + "157": "[12019.7695 13654.0586 -2362.6089]", + "158": "[12461.7607 13393.9023 -2362.6064]", + "159": "[12882.8945 13096.291 -2362.627]", + "160": "[13275.208 12764.4404 -2362.4275]", + "161": "[13638.1836 12398.4854 -2362.7668]", + "162": "[13968.5156 11999.8564 -2362.6138]", + "163": "[14263.1816 11574.4521 -2362.6257]", + "164": "[14520.7217 11125.793 -2362.6904]", + "165": "[14742.2539 10660.7676 -2362.6184]", + "166": "[14929.8506 10181.9482 -2362.5259]", + "167": "[15084.5596 9692.792 -2362.658]", + "168": "[15211.7451 9196.6406 -2362.5879]", + "169": "[15311.6221 8694.2305 -2362.7471]", + "170": "[15387.7939 8187.6509 -2362.7371]", + "171": "[15442.1904 7675.6777 -2362.6262]", + "172": "[15475.6006 7163.2656 -2362.4448]", + "173": "[15487.3535 6647.9453 -2362.5332]", + "174": "[15486.8164 6132.7881 -2362.6062]", + "175": "[15487.1465 5612.8188 -2362.5151]", + "176": "[15486.9824 5097.207 -2362.5774]", + "177": "[15486.8711 4583.1499 -2362.2915]", + "178": "[15487.6387 4067.5828 -2362.6177]", + "179": "[15487.2021 3547.1045 -2361.8557]", + "180": "[15488.5459 3024.7095 -2363.8103]", + "181": "[15487.6104 2503.73 -2370.6934]", + "182": "[15487.9951 1982.5576 -2354.7712]", + "183": "[15487.1963 1468.9509 -2313.3394]", + "184": "[15487.585 955.1146 -2252.7454]", + "185": "[15488.0088 440.9261 -2192.2749]", + "186": "[15488.7842 -73.6043 -2132.0322]", + "187": "[15488.1992 -588.3782 -2071.7288]", + "188": "[15488.541 -1103.3473 -2011.371]", + "189": "[15488.3574 -1618.4553 -1950.6007]", + "190": "[15487.3516 -2133.6138 -1890.394]", + "191": "[15488.2227 -2648.8992 -1829.6403]", + "192": "[15488.4727 -3164.2402 -1769.3831]", + "193": "[15488.6943 -3679.5608 -1708.5974]", + "194": "[15486.9883 -4195.0044 -1648.2444]", + "195": "[15487.5371 -4710.4849 -1587.5471]", + "196": "[15487.8203 -5225.9561 -1527.0826]", + "197": "[15488.2686 -5741.4473 -1466.226]", + "198": "[15487.376 -6256.9292 -1405.9457]", + "199": "[15488.4063 -6773.2563 -1345.0442]", + "200": "[15487.377 -7282.0532 -1285.5939]", + "201": "[15487.8193 -7796.9287 -1225.2719]", + "202": "[15487.7842 -8307.4287 -1163.0535]", + "203": "[15488.2236 -8818.1035 -1100.0618]", + "204": "[15490.0938 -9333.6445 -1054.7814]", + "205": "[15496.5947 -9855.1436 -1039.3641]", + "206": "[15480.5137 -10371.3311 -1039.2827]", + "207": "[15426.0469 -10880.5752 -1038.8909]", + "208": "[15324.085 -11384.207 -1039.3707]", + "209": "[15165.917 -11874.2939 -1038.9899]", + "210": "[14942.7539 -12336.46 -1039.4811]", + "211": "[14643.1768 -12762.582 -1039.3358]", + "212": "[14296.1553 -13108.0439 -1039.8525]", + "213": "[13874.1338 -13405.2627 -1039.5306]", + "214": "[13411.5322 -13629.2197 -1039.6465]", + "215": "[12924.5137 -13788.4277 -1039.6302]", + "216": "[12414.5352 -13892.5 -1039.3694]", + "217": "[11898.0596 -13947.3896 -1039.5524]", + "218": "[11379.707 -13957.7559 -1039.6342]", + "219": "[10860.1582 -13955.6934 -1039.4318]", + "220": "[10340.2334 -13956.0313 -1039.5933]", + "221": "[9825.5527 -13957.0898 -1039.2906]", + "222": "[9305.6445 -13954.416 -1038.9731]", + "223": "[8790.4619 -13955.2881 -1044.1527]", + "224": "[8278.3516 -13955.3564 -1045.858]", + "225": "[7760.499 -13956.3984 -1009.5552]", + "226": "[7248.9204 -13956.1367 -957.6972]", + "227": "[6733.853 -13956.499 -899.3093]", + "228": "[6221.3643 -13956.8848 -838.3461]", + "229": "[5708.7827 -13955.6709 -776.3962]", + "230": "[5199.1328 -13955.8037 -714.7396]", + "231": "[4690.1411 -13956.2764 -654.4056]", + "232": "[4181.0923 -13956.9023 -594.7205]", + "233": "[3671.4407 -13956.9678 -543.0068]", + "234": "[3158.9717 -13956.8818 -527.5542]", + "235": "[2645.0754 -13956.8809 -527.5336]", + "236": "[2132.9556 -13957.0967 -527.6147]", + "237": "[1620.85 -13956.3027 -527.6884]", + "238": "[1107.1399 -13952.5127 -527.2664]", + "239": "[594.857 -13958.9141 -527.6078]", + "240": "[84.0851 -13998.541 -527.5352]", + "241": "[-420.853 -14086.1475 -527.6082]", + "242": "[-889.6967 -14211.4951 -527.5485]" + }, + "8": + { + "1": "[-1153.7507 -14650.5889 -527.561]", + "2": "[-1054.9523 -14670.1719 -527.5804]", + "3": "[-559.3098 -14802.8818 -527.5792]", + "4": "[-53.6856 -14903.8389 -527.3845]", + "5": "[458.0176 -14955.5078 -527.4885]", + "6": "[972.6564 -14969.3682 -527.634]", + "7": "[1488.8707 -14968.6689 -527.736]", + "8": "[2002.0371 -14964.8877 -527.5076]", + "9": "[2517.3933 -14965.6406 -527.6515]", + "10": "[3034.3857 -14964.3818 -527.6083]", + "11": "[3549.3311 -14964.1758 -536.0325]", + "12": "[4063.1975 -14964.6846 -582.3438]", + "13": "[4573.104 -14965.0469 -641.0773]", + "14": "[5083.5952 -14964.5986 -701.0207]", + "15": "[5596.6533 -14964.5879 -762.8917]", + "16": "[6108.4746 -14965.6299 -824.8734]", + "17": "[6623.4653 -14963.4961 -886.7121]", + "18": "[7132.7993 -14964.877 -944.9661]", + "19": "[7644.7729 -14964.8379 -998.7372]", + "20": "[8161.2598 -14964.7559 -1040.2534]", + "21": "[8684.8115 -14964.5225 -1046.292]", + "22": "[9207.4824 -14965.0127 -1039.2061]", + "23": "[9723.21 -14963.9297 -1039.1157]", + "24": "[10235.8916 -14964.1445 -1039.618]", + "25": "[10753.7842 -14964.2168 -1039.5193]", + "26": "[11273.085 -14964.8525 -1039.5858]", + "27": "[11792.1318 -14965.4199 -1039.4231]", + "28": "[12310.7139 -14960.4688 -1039.2394]", + "29": "[12827.2188 -14915.6436 -1039.0311]", + "30": "[13336.5957 -14822.8623 -1039.309]", + "31": "[13831.8145 -14673.8105 -1039.6963]", + "32": "[14302.375 -14461.7793 -1039.2332]", + "33": "[14733.9932 -14179.2783 -1039.2742]", + "34": "[15099.5518 -13835.0352 -1039.6641]", + "35": "[15407.999 -13424.6426 -1039.2614]", + "36": "[15647.6133 -12958.0957 -1039.5576]", + "37": "[15817.333 -12464.667 -1039.5685]", + "38": "[15926.248 -11956.9336 -1039.2965]", + "39": "[15987.0117 -11443.4404 -1039.4152]", + "40": "[16007.4189 -10928.7334 -1039.4958]", + "41": "[16000.8428 -10415.0859 -1039.6588]", + "42": "[15998.9375 -9902.9727 -1039.4102]", + "43": "[15996.7783 -9390.6172 -1050.9438]", + "44": "[15998.8389 -8876.9248 -1093.1844]", + "45": "[15998.0078 -8363.0273 -1156.3707]", + "46": "[15998.0859 -7849.8447 -1219.1517]", + "47": "[15998.2686 -7337.9082 -1279.1843]", + "48": "[15997.7334 -6824.9883 -1339.123]", + "49": "[15997.0273 -6308.4072 -1399.9137]", + "50": "[15998.9658 -5798.644 -1459.4558]", + "51": "[15997.8604 -5282.8184 -1520.3893]", + "52": "[15997.707 -4774.1187 -1580.0157]", + "53": "[15998.4375 -4260.1201 -1640.5635]", + "54": "[15997.9629 -3741.1409 -1701.442]", + "55": "[15997.6807 -3230.9536 -1761.4648]", + "56": "[15998.0693 -2716.2153 -1821.774]", + "57": "[15998.6045 -2196.9912 -1882.9139]", + "58": "[15997.71 -1687.2091 -1942.5137]", + "59": "[15998.498 -1173.3818 -2003.0438]", + "60": "[15997.9287 -655.4271 -2063.9758]", + "61": "[15997.793 -133.4223 -2125.0278]", + "62": "[15998.5938 378.3664 -2185.1873]", + "63": "[15997.1787 893.7532 -2245.7825]", + "64": "[15998.5332 1411.1768 -2306.4226]", + "65": "[15996.6865 1927.7522 -2351.5449]", + "66": "[15997.2148 2440.7266 -2370.071]", + "67": "[15998.0801 2960.7786 -2364.217]", + "68": "[15997.2549 3473.5972 -2362.0405]", + "69": "[15997.5039 3988.781 -2362.5146]", + "70": "[15997.6611 4505.1284 -2362.4802]", + "71": "[15997.3232 5023.3984 -2362.187]", + "72": "[15997.2158 5545.9902 -2362.7173]", + "73": "[15997.0615 6062.8789 -2362.3892]", + "74": "[15997.207 6577.4512 -2362.5776]", + "75": "[15997.207 7091.561 -2362.4453]", + "76": "[15996.6621 7605.1123 -2362.4741]", + "77": "[15989.251 8118.1387 -2362.2832]", + "78": "[15958.0439 8630.1221 -2362.6511]", + "79": "[15908.0264 9140.0303 -2362.3486]", + "80": "[15835.7842 9646.957 -2362.488]", + "81": "[15737.0381 10161.6523 -2362.1423]", + "82": "[15610.7646 10669.7373 -2362.3252]", + "83": "[15454.5684 11169.0596 -2362.4424]", + "84": "[15265.7383 11656.3896 -2362.4285]", + "85": "[15043.0283 12128.4814 -2362.3889]", + "86": "[14784.6523 12581.3438 -2362.2896]", + "87": "[14490.0059 13010.5977 -2362.4712]", + "88": "[14159.748 13411.9844 -2362.6484]", + "89": "[13795.8047 13782.0127 -2362.5671]", + "90": "[13400.125 14116.6807 -2362.4407]", + "91": "[12977.8984 14415.4063 -2362.6216]", + "92": "[12532.9277 14677.208 -2362.6338]", + "93": "[12069.707 14902.7998 -2362.5059]", + "94": "[11592.877 15095.2334 -2362.2683]", + "95": "[11105.1094 15255.0596 -2362.4761]", + "96": "[10609.2529 15384.5049 -2362.4941]", + "97": "[10096.2656 15490.1943 -2362.656]", + "98": "[9579.1338 15568.7646 -2362.5459]", + "99": "[9059.8574 15625.2168 -2362.7798]", + "100": "[8539.334 15659.7441 -2362.3704]", + "101": "[8018.4551 15676.9209 -2362.4292]", + "102": "[7497.6807 15676.1943 -2362.6494]", + "103": "[6977.6367 15674.4434 -2362.7588]", + "104": "[6457.8955 15673.7676 -2362.3513]", + "105": "[5938.521 15673.9072 -2362.635]", + "106": "[5419.5 15673.8887 -2362.5183]", + "107": "[4900.7881 15674.6299 -2362.5459]", + "108": "[4382.4077 15674.7695 -2362.3525]", + "109": "[3864.2915 15674.6963 -2362.6404]", + "110": "[3346.4971 15673.168 -2362.5371]", + "111": "[2828.9617 15673.5762 -2362.5745]", + "112": "[2311.7339 15674.9434 -2362.4358]", + "113": "[1794.7742 15672.832 -2362.6208]", + "114": "[1278.1266 15673.7148 -2362.6196]", + "115": "[761.7506 15673.6514 -2362.6301]", + "116": "[245.6498 15674.875 -2362.551]", + "117": "[-270.1714 15673.418 -2362.6328]", + "118": "[-785.6641 15672.9824 -2362.4988]", + "119": "[-1300.9275 15673.7344 -2362.6108]", + "120": "[-1815.8738 15674.5508 -2362.7698]", + "121": "[-2330.5493 15673.1045 -2362.5979]", + "122": "[-2844.9285 15674.0557 -2362.7351]", + "123": "[-3359.0481 15674.0508 -2362.655]", + "124": "[-3872.8562 15673.9443 -2362.5896]", + "125": "[-4386.4072 15673.3545 -2362.3633]", + "126": "[-4899.6782 15674.8086 -2362.6545]", + "127": "[-5412.6631 15673.8398 -2362.6548]", + "128": "[-5925.3354 15674.0928 -2362.6833]", + "129": "[-6437.7476 15674.3203 -2362.5547]", + "130": "[-6949.8452 15673.8115 -2362.6436]", + "131": "[-7473.5845 15674.1885 -2362.5576]", + "132": "[-7997.0088 15670.5605 -2362.5596]", + "133": "[-8519.7178 15647.4844 -2362.3838]", + "134": "[-9040.749 15603.1758 -2362.6914]", + "135": "[-9559.0869 15536.543 -2362.7227]", + "136": "[-10073.2705 15446.3623 -2362.5212]", + "137": "[-10581.7031 15329.7949 -2361.9236]", + "138": "[-11082.1768 15184.1777 -2362.4961]", + "139": "[-11572.0684 15007.5889 -2362.4795]", + "140": "[-12047.7354 14796.6729 -2362.4004]", + "141": "[-12505.5928 14551.0049 -2362.6763]", + "142": "[-12941.2158 14268.8145 -2362.8679]", + "143": "[-13351.291 13951.9258 -2362.5259]", + "144": "[-13731.167 13600.3389 -2362.5229]", + "145": "[-14077.3145 13216.5293 -2362.5479]", + "146": "[-14388.209 12804.7734 -2362.5288]", + "147": "[-14662.1094 12368.791 -2362.5269]", + "148": "[-14899.249 11912.8066 -2362.6121]", + "149": "[-15102.4629 11442.124 -2362.447]", + "150": "[-15276.0938 10948.418 -2362.8035]", + "151": "[-15418.4072 10445.7959 -2362.4817]", + "152": "[-15532.5537 9936.9629 -2362.3938]", + "153": "[-15618.4658 9423.3252 -2362.3936]", + "154": "[-15682.3789 8907.2686 -2362.6272]", + "155": "[-15723.8975 8389.5273 -2362.322]", + "156": "[-15746.4688 7871.2837 -2362.5427]", + "157": "[-15750.6621 7353.0205 -2362.4856]", + "158": "[-15747.0537 6835.3726 -2362.4324]", + "159": "[-15747.0566 6318.1245 -2362.207]", + "160": "[-15745.123 5799.5752 -2387.2007]", + "161": "[-15745.1631 5279.7617 -2438.0073]", + "162": "[-15745.6533 4767.1436 -2506.531]", + "163": "[-15746.5293 4256.4414 -2571.0237]", + "164": "[-15746.2021 3747.1235 -2633.1946]", + "165": "[-15746.208 3236.9084 -2695.6521]", + "166": "[-15745.8555 2717.7388 -2759.7]", + "167": "[-15746.4521 2200.5876 -2823.1619]", + "168": "[-15745.8223 1684.5239 -2886.3867]", + "169": "[-15745.9531 1169.3711 -2948.5178]", + "170": "[-15746.0254 654.9233 -2986.3494]", + "171": "[-15746.2236 131.9959 -2997.3723]", + "172": "[-15746.1504 -389.588 -2991.1887]", + "173": "[-15746.2197 -903.9701 -2990.1138]", + "174": "[-15745.7344 -1417.12 -2990.5886]", + "175": "[-15745.0684 -1936.0039 -2990.6494]", + "176": "[-15745.9932 -2456.7712 -2990.5813]", + "177": "[-15746.2725 -2977.342 -2990.5671]", + "178": "[-15745.4912 -3497.6316 -2990.5562]", + "179": "[-15746.0479 -4017.6274 -2990.5496]", + "180": "[-15745.3555 -4537.3213 -2990.5759]", + "181": "[-15746.8496 -5056.7378 -2990.4209]", + "182": "[-15745.9688 -5575.8755 -2990.6472]", + "183": "[-15746.2637 -6094.7397 -2990.5132]", + "184": "[-15745.8359 -6613.3008 -2990.7217]", + "185": "[-15744.123 -7131.584 -2990.3511]", + "186": "[-15727.5762 -7649.3125 -2990.5518]", + "187": "[-15689.2451 -8165.6157 -2990.2959]", + "188": "[-15629.6055 -8679.6484 -2990.3618]", + "189": "[-15546.54 -9190.0078 -2990.303]", + "190": "[-15439.1367 -9695.4746 -2990.7556]", + "191": "[-15303.0684 -10193.5264 -2990.6455]", + "192": "[-15137.5332 -10682.1963 -2990.6313]", + "193": "[-14939.8242 -11158.2695 -2990.5586]", + "194": "[-14708.0791 -11618.0313 -2990.8923]", + "195": "[-14441.4551 -12057.8086 -2990.4395]", + "196": "[-14139.1904 -12473.2344 -2990.6428]", + "197": "[-13801.9434 -12859.8477 -2990.6758]", + "198": "[-13432.4971 -13214.6113 -2990.5273]", + "199": "[-13025.0078 -13543.5176 -2990.6333]", + "200": "[-12590.3721 -13834.125 -2990.4863]", + "201": "[-12134.5449 -14088.1172 -2990.7261]", + "202": "[-11661.0645 -14304.877 -2990.4836]", + "203": "[-11174.4404 -14487.542 -2990.6392]", + "204": "[-10678.0615 -14638.3369 -2990.252]", + "205": "[-10174.4316 -14759.1367 -2990.5996]", + "206": "[-9666.1445 -14854.0596 -2990.4514]", + "207": "[-9154.5967 -14924.3975 -2990.5264]", + "208": "[-8641.1182 -14972.1904 -2990.689]", + "209": "[-8126.8218 -15001.3164 -2990.3196]", + "210": "[-7612.3354 -15012.5088 -2990.4221]", + "211": "[-7098.21 -15009.5693 -2990.6741]", + "212": "[-6584.6152 -15008.4521 -2990.5598]", + "213": "[-6071.438 -15007.6738 -2990.5664]", + "214": "[-5558.5894 -15007.7441 -2990.0415]", + "215": "[-5045.9683 -15008.1348 -2990.6919]", + "216": "[-4533.7373 -15008.1455 -2990.5447]", + "217": "[-4009.5862 -15007.4629 -2990.5513]", + "218": "[-3485.7239 -15007.4434 -2990.5491]", + "219": "[-2962.1272 -15007.5254 -2990.5508]", + "220": "[-2438.7957 -15008.3447 -2990.5928]", + "221": "[-1915.7642 -15008.6035 -2990.3652]", + "222": "[-1392.9785 -15007.3711 -2990.6287]", + "223": "[-870.4907 -15008.8369 -2990.5156]", + "224": "[-348.2296 -15007.7051 -2990.6455]", + "225": "[173.6849 -15007.1328 -2990.574]", + "226": "[695.3745 -15007.543 -2990.6875]", + "227": "[1216.6473 -15006.6152 -2990.3081]", + "228": "[1737.5455 -15006.958 -2990.5996]", + "229": "[2258.0667 -15007.7139 -2990.8167]", + "230": "[2778.0596 -15007.3887 -2990.8235]", + "231": "[3297.4543 -15007.7617 -2990.657]", + "232": "[3816.2976 -15007.1934 -2990.8665]", + "233": "[4334.7163 -15005.9414 -2990.7295]", + "234": "[4852.7085 -15006.6992 -2990.5427]", + "235": "[5370.4194 -15006.624 -2990.4878]", + "236": "[5887.5576 -15006.0967 -2990.5776]", + "237": "[6404.0742 -15006.8428 -2990.7217]", + "238": "[6920.3066 -15007.2783 -2990.6826]", + "239": "[7436.2925 -15007.1514 -2990.8176]", + "240": "[7951.8188 -15007.0293 -2990.6794]", + "241": "[8474.7432 -15006.832 -2990.7805]", + "242": "[8995.9834 -15006.9189 -2990.4424]", + "243": "[9517.5146 -15007.3291 -2990.696]", + "244": "[10030.2471 -15006.9541 -2990.2964]", + "245": "[10545.6748 -15007.4248 -2990.6799]", + "246": "[11061.7197 -15006.2275 -2990.635]", + "247": "[11579.4053 -15005.9336 -2990.6318]", + "248": "[12092.7188 -15007.0859 -2990.4636]", + "249": "[12610.0918 -15006.8369 -2990.668]", + "250": "[13124.8027 -15007.2842 -2990.6812]", + "251": "[13639.1982 -15007.2256 -2990.6201]", + "252": "[14151.7773 -15006.4717 -2990.78]", + "253": "[14664.8926 -15006.3242 -2990.7043]", + "254": "[15178.2803 -15006.4795 -2990.6809]", + "255": "[15691.3672 -15006.4775 -2990.6658]", + "256": "[15832 -15006.5303 -2990.595]" + }, + "9": + { + "1": "[-10268.7227 -4400.6089 2181.6045]", + "2": "[-10260.0068 -4759.0532 2181.6045]", + "3": "[-10259.6592 -5273.6519 2181.6045]", + "4": "[-10260.2344 -5786.832 2181.6045]", + "5": "[-10260.2139 -6301.3223 2156.2952]", + "6": "[-10261.1172 -6813.792 2156.5779]", + "7": "[-10260.0518 -7327.7104 2156.677]", + "8": "[-10259.4922 -7843.0161 2156.6804]", + "9": "[-10260.6807 -8355.0967 2156.4702]", + "10": "[-10258.4199 -8870.9551 2156.9336]", + "11": "[-10202.999 -9380.3066 2157.4612]", + "12": "[-10080.9082 -9881.8857 2156.8169]", + "13": "[-9881.7949 -10358.8818 2156.5273]", + "14": "[-9643.5098 -10730.3379 2156.7358]", + "15": "[-9436.4746 -10954.0117 2156.3279]", + "16": "[-9029.4229 -11261.9883 2156.7009]", + "17": "[-8935.9023 -11309.7178 2156.2864]", + "18": "[-8462.1943 -11505.7881 2156.8967]", + "19": "[-7964.1416 -11627.0801 2157.2566]", + "20": "[-7452.7388 -11687.1709 2157.2681]", + "21": "[-6939.2754 -11698.4854 2157.002]", + "22": "[-6426.0981 -11688.3662 2157.2896]", + "23": "[-5913.5239 -11688.2051 2156.6855]", + "24": "[-5398.6768 -11687.8809 2156.8374]", + "25": "[-4885.8682 -11688.5488 2157.0127]", + "26": "[-4373.2959 -11686.9287 2157.1699]", + "27": "[-4086.3899 -11688.1201 2157.1985]" + }, + "10": + { + "1": "[-4164.9546 -11952.2324 2186.3716]", + "2": "[-4266.3867 -11951.9287 2186.002]", + "3": "[-4778.4795 -11952.5732 2186.0403]", + "4": "[-5293.5415 -11952.877 2186.2258]", + "5": "[-5806.4966 -11952.4912 2186.3098]", + "6": "[-6322.064 -11951.9922 2186.3403]", + "7": "[-6834.5601 -11952.1328 2186.1099]", + "8": "[-7349.4014 -11951.4697 2187.0061]", + "9": "[-7864.8252 -11952.1387 2186.2903]", + "10": "[-8379.5244 -11940.3955 2186.4443]", + "11": "[-8890.2021 -11874.9463 2186.21]", + "12": "[-9386.2979 -11741.4268 2185.7058]", + "13": "[-9856.3125 -11526.8311 2185.5076]", + "14": "[-10155.3389 -11320.7656 2185.1633]", + "15": "[-10459.7012 -11020.6377 2185.168]", + "16": "[-10663.3652 -10733.624 2185.3552]", + "17": "[-10868.1611 -10300.6279 2185.481]", + "18": "[-11008.5225 -9807.1211 2186.0222]", + "19": "[-11084.5986 -9300.5068 2186.665]", + "20": "[-11108.0029 -8789.0313 2186.2026]", + "21": "[-11098.8037 -8274.1885 2185.1411]", + "22": "[-11095.8125 -7759.0776 2185.3606]", + "23": "[-11096.4385 -7245.8989 2185.3708]", + "24": "[-11097.7646 -6733.2925 2185.2371]", + "25": "[-11096.207 -6221.272 2185.3882]", + "26": "[-11096.9189 -5707.5586 2185.3882]", + "27": "[-11097.208 -5193.8364 2185.3899]", + "28": "[-11096.1699 -4680.9907 2184.2314]", + "29": "[-11100.1367 -4271.1938 2180.2126]" + }, + "11": + { + "1": "[8079.1846 -14949.4082 -3014.6611]", + "2": "[7979.5835 -14929.0752 -3014.5078]", + "3": "[7481.8057 -14796.9678 -3014.7847]", + "4": "[6977.8262 -14698.7822 -3014.6653]", + "5": "[6466.4683 -14646.3516 -3014.6553]", + "6": "[5952.7676 -14631.1143 -3014.7832]", + "7": "[5440.5166 -14631.0469 -3014.6252]", + "8": "[4932.3945 -14560.7539 -3014.9148]", + "9": "[4840.2563 -14540.2393 -3014.5315]" + }, + "12": + { + "1": "[4565.9731 -14468.4873 -3014.5515]", + "2": "[4469.0591 -14439.2441 -3014.3022]", + "3": "[3962.2129 -14364.7334 -3014.4583]", + "4": "[3447.6331 -14361.0996 -3014.5583]", + "5": "[2935.7788 -14348.4717 -3014.5156]", + "6": "[2426.0576 -14296.5928 -3014.8032]", + "7": "[1922.2607 -14200.7314 -3014.5754]", + "8": "[1426.246 -14072.7549 -3014.9619]", + "9": "[1245.3069 -14031.8145 -3014.6492]" + }, + "13": + { + "1": "[8252.4727 -14026.9053 -3014.6311]", + "2": "[8153.4932 -14041.1982 -3014.6001]", + "3": "[7652.8105 -14158.5938 -3014.7595]", + "4": "[7152.1533 -14277.9863 -3014.4709]", + "5": "[6643.8345 -14345.4805 -3014.707]", + "6": "[6129.9346 -14369.2305 -3014.7585]", + "7": "[5615.541 -14370.918 -3014.834]", + "8": "[5104.9155 -14411.0488 -3014.74]", + "9": "[4885.1631 -14453.8691 -3014.5237]" + }, + "14": + { + "1": "[4561.3223 -14537.8379 -3014.4963]", + "2": "[4464.8242 -14564.166 -3013.9705]", + "3": "[3957.5779 -14638.5029 -3014.5146]", + "4": "[3443.6313 -14641.9121 -3014.6091]", + "5": "[2931.1128 -14655.4922 -3014.626]", + "6": "[2421.6194 -14707.0762 -3014.7212]", + "7": "[1918.0771 -14806.1826 -3014.5356]", + "8": "[1421.38 -14934.123 -3014.9739]", + "9": "[1273.2329 -14966.1748 -3014.6741]" + }, + "15": + { + "1": "[-2597.3318 5621.814 -1417.4718]", + "2": "[-2497.208 5637.9839 -1417.481]", + "3": "[-1996.3864 5756.7246 -1417.314]", + "4": "[-1497.5702 5875.3491 -1417.389]", + "5": "[-986.2565 5940.2666 -1417.6808]", + "6": "[-470.7533 5963.1118 -1417.5317]", + "7": "[42.1382 5965.127 -1417.4374]", + "8": "[557.8687 5961.583 -1417.4174]", + "9": "[1071.7528 5962.0024 -1417.3354]", + "10": "[1589.8965 5962.6128 -1417.2095]", + "11": "[2109.3745 5960.9731 -1417.4293]", + "12": "[2627.594 5961.9463 -1417.5708]", + "13": "[3144.3127 5960.9395 -1417.5299]", + "14": "[3659.6226 5960.6216 -1417.4742]", + "15": "[4173.7324 5961.6465 -1417.4742]", + "16": "[4686.6289 5961.1714 -1417.4913]", + "17": "[5205.8232 5961.04 -1417.5917]", + "18": "[5724.0039 5960.5762 -1417.4713]", + "19": "[6241.4082 5960.6904 -1420.5164]", + "20": "[6759.042 5960.1978 -1459.8407]", + "21": "[7272.3345 5960.9287 -1517.8127]", + "22": "[7787.8286 5961.4819 -1578.3959]", + "23": "[8302.0156 5960.582 -1640.0483]", + "24": "[8814.1406 5962.2231 -1702.1072]", + "25": "[9327.8604 5960.6201 -1763.7413]", + "26": "[9836.8281 5960.6626 -1822.8983]", + "27": "[10352.209 5961.7178 -1878.2378]", + "28": "[10862.8652 5961.8477 -1922.8655]", + "29": "[11377.7207 5961.7588 -1937.7446]", + "30": "[11888.9395 6003.7764 -1929.9691]", + "31": "[12390.4072 6113.4229 -1928.8252]", + "32": "[12871.6846 6301.6416 -1929.3843]", + "33": "[13188.6846 6495.0879 -1929.7444]", + "34": "[13510.9717 6779.1963 -1929.6467]", + "35": "[13722.9004 7045.3184 -1929.3867]", + "36": "[13930.4531 7428.1597 -1929.4219]", + "37": "[14094.4834 7917.1724 -1929.3284]", + "38": "[14182.6152 8424.4531 -1929.3867]", + "39": "[14214.2793 8936.498 -1929.4233]", + "40": "[14198.3184 9448.5762 -1929.4515]", + "41": "[14131.9434 9956.3145 -1929.1799]", + "42": "[13999.167 10453.9258 -1930.1138]", + "43": "[13782.8613 10918.5938 -1929.4437]", + "44": "[13583.3857 11203.4961 -1929.7758]", + "45": "[13296.4131 11490.4727 -1929.7472]", + "46": "[12992.7188 11703.0127 -1929.4144]", + "47": "[12584.252 11893.1299 -1929.2324]", + "48": "[12088.7188 12031.8271 -1929.3275]", + "49": "[11579.6865 12099.7783 -1929.1897]", + "50": "[11067.8984 12115.4824 -1929.5021]", + "51": "[10556.501 12106.4316 -1903.9232]", + "52": "[10042.5566 12104.9795 -1847.4966]", + "53": "[9529.9668 12105.0791 -1787.3843]", + "54": "[9021.2178 12105.582 -1727.1357]", + "55": "[8507.9375 12104.9609 -1665.186]", + "56": "[7993.4053 12106.1172 -1603.1038]", + "57": "[7479.6582 12106.4629 -1542.5377]", + "58": "[6969.9253 12104.4551 -1486.104]", + "59": "[6454.7393 12105.5791 -1436.9879]", + "60": "[5938.7207 12105.2754 -1409.2805]", + "61": "[5426.626 12106.1865 -1415.121]", + "62": "[4914.5073 12105.3896 -1418.3582]", + "63": "[4401.7954 12106.0469 -1417.736]", + "64": "[3885.5864 12105.8037 -1417.5598]", + "65": "[3372.1619 12105.9365 -1417.671]", + "66": "[2859.3635 12106.3203 -1417.5925]", + "67": "[2346.9089 12106.7207 -1417.547]", + "68": "[1834.6128 12106.3438 -1417.4615]", + "69": "[1320.0029 12106.7705 -1418.5897]", + "70": "[807.2399 12106.5371 -1418.365]", + "71": "[292.7707 12106.7061 -1418.4429]", + "72": "[-220.1969 12106.6064 -1418.5955]", + "73": "[-347.1188 12107.0078 -1418.4652]" + }, + "16": + { + "1": "[-458.3381 11840.9844 -1418.5713]", + "2": "[-356.3136 11841.0234 -1418.5485]", + "3": "[158.4411 11841.1084 -1418.3301]", + "4": "[672.7735 11841.0439 -1418.5504]", + "5": "[1189.743 11841.584 -1418.1898]", + "6": "[1706.528 11841.9424 -1418.4301]", + "7": "[2220.4844 11841.7598 -1418.1356]", + "8": "[2736.7261 11841.1172 -1417.9211]", + "9": "[3254.312 11839.3018 -1417.1309]", + "10": "[3767.0916 11840.6914 -1417.3109]", + "11": "[4282.6758 11840.1152 -1417.573]", + "12": "[4796.3677 11839.6182 -1417.634]", + "13": "[5310.3442 11839.666 -1417.5541]", + "14": "[5828.9399 11839.7617 -1417.5603]", + "15": "[6341.0889 11839.8633 -1425.1665]", + "16": "[6858.2847 11839.6416 -1470.6587]", + "17": "[7370.1025 11840.6357 -1529.2174]", + "18": "[7885.5864 11840.1895 -1590.0179]", + "19": "[8401.5781 11840.1953 -1652.1072]", + "20": "[8915.6777 11841.1943 -1714.4413]", + "21": "[9426.1543 11840.6494 -1775.63]", + "22": "[9936.6035 11840.7705 -1834.3287]", + "23": "[10449.4219 11840.6865 -1888.0367]", + "24": "[10965.4912 11841.2285 -1929.4089]", + "25": "[11481.7656 11835.4531 -1938.1765]", + "26": "[11997.9404 11776.584 -1938.0414]", + "27": "[12496.6572 11641.3965 -1942.3795]", + "28": "[12899.3262 11451.5498 -1945.2634]", + "29": "[13154.3252 11270.71 -1946.067]", + "30": "[13398.3682 11022.6758 -1946.3484]", + "31": "[13590.5967 10742.4023 -1944.9381]", + "32": "[13750.3994 10389.3643 -1942.7875]", + "33": "[13881.5391 9892.1855 -1938.2866]", + "34": "[13940.7861 9379.8994 -1933.3483]", + "35": "[13947.7578 8863.709 -1928.4688]", + "36": "[13904.2363 8347.1992 -1935.526]", + "37": "[13796.3965 7839.4492 -1941.3435]", + "38": "[13602.7188 7360.8965 -1945.0421]", + "39": "[13443.2158 7106.7026 -1945.9817]", + "40": "[13185.0674 6821.3721 -1946.2229]", + "41": "[12972.4033 6656.3408 -1945.4596]", + "42": "[12586.0859 6453.1216 -1943.7395]", + "43": "[12180.6797 6323.8921 -1940.3401]", + "44": "[11669.9824 6240.0005 -1935.2927]", + "45": "[11152.3789 6214.8467 -1929.9811]", + "46": "[10636.3037 6225.6436 -1910.0112]", + "47": "[10125.3369 6227.2573 -1857.3796]", + "48": "[9616.585 6226.4917 -1798.0044]", + "49": "[9105.04 6226.0156 -1737.3098]", + "50": "[8594.1084 6227.4561 -1675.5074]", + "51": "[8080.6235 6226.2119 -1613.8992]", + "52": "[7571.3032 6226.8037 -1553.2654]", + "53": "[7058.3286 6226.0098 -1495.1254]", + "54": "[6542.9526 6227.1348 -1444.1226]", + "55": "[6030.8569 6226.6064 -1411.3922]", + "56": "[5511.4419 6225.9849 -1413.8998]", + "57": "[4995.7793 6225.9512 -1418.1968]", + "58": "[4477.5986 6227.1724 -1417.7244]", + "59": "[3959.9336 6226.4399 -1417.5736]", + "60": "[3442.5317 6226.2676 -1417.5914]", + "61": "[2926.8938 6226.5928 -1417.6193]", + "62": "[2411.7729 6227.0723 -1417.4299]", + "63": "[1894.689 6226.1313 -1417.6005]", + "64": "[1380.7074 6225.9956 -1417.4457]", + "65": "[865.3393 6226.0063 -1417.4636]", + "66": "[352.691 6226.6328 -1417.4513]", + "67": "[-163.6407 6225.9893 -1417.4825]", + "68": "[-679.9905 6235.3853 -1417.5087]", + "69": "[-1195.0081 6270.3735 -1417.5956]", + "70": "[-1704.9318 6349.0098 -1417.7791]", + "71": "[-2203.7019 6466.2734 -1417.447]", + "72": "[-2604.5703 6562.4849 -1417.5806]" + }, + "17": + { + "1": "[3653.7639 11790.166 -1441.5347]", + "2": "[3753.3047 11770.2295 -1441.295]", + "3": "[4249.4248 11640.1182 -1441.5511]", + "4": "[4752.8154 11539.6172 -1441.5072]", + "5": "[5262.1621 11484.5527 -1441.6681]", + "6": "[5774.9844 11468.3398 -1441.5376]", + "7": "[5910.8579 11465.8135 -1441.5315]" + }, + "18": + { + "1": "[-6298.3008 2760.041 974.2946]", + "2": "[-6051.1543 2720.2637 974.2877]", + "3": "[-5553.2847 2593.0095 974.1694]", + "4": "[-5331.6289 2550.0964 974.3795]" + }, + "19": + { + "1": "[-5331.1094 2760.5659 974.3308]", + "2": "[-5657.5859 2720.9976 974.2858]", + "3": "[-6154.7134 2595.1875 974.1516]", + "4": "[-6298.4829 2564.189 974.2827]" + }, + "20": + { + "1": "[4900.8599 12487.8652 496.0503]", + "2": "[4488.3662 12444.626 496.2583]", + "3": "[3991.1567 12317.9277 496.0373]" + }, + "21": + { + "1": "[4900.2451 12317.4453 495.9396]", + "2": "[4446.0723 12363.79 495.8174]", + "3": "[3949.0696 12487.8887 495.9733]" + }, + "22": + { + "1": "[1344.5509 5985.6538 -1417.4169]", + "2": "[1244.6508 6000.4609 -1417.4655]", + "3": "[1019.5651 6048.3384 -1417.5912]", + "4": "[522.9805 6175.3696 -1417.5966]" + }, + "23": + { + "1": "[1344.2095 6200.6079 -1417.4337]", + "2": "[1244.9697 6185.9888 -1417.4209]", + "3": "[745.9122 6071.335 -1417.5791]", + "4": "[535.8774 6016.8701 -1417.387]" + } +} \ No newline at end of file diff --git a/lua/ulx/modules/sh/metrostroi.lua b/lua/ulx/modules/sh/metrostroi.lua new file mode 100644 index 0000000..43f30f9 --- /dev/null +++ b/lua/ulx/modules/sh/metrostroi.lua @@ -0,0 +1,547 @@ +local CATEGORY_NAME = "Metrostroi" + +------------------------------ Wagons ------------------------------ +local waittime = 10 +local lasttimeusage = -waittime +function ulx.wagoncount( calling_ply ) + if lasttimeusage + waittime > CurTime() then + ULib.tsayError( calling_ply, "Please wait " .. math.Round(lasttimeusage + waittime - CurTime()) .. " seconds before using this command again", true ) + return + end + + lasttimeusage = CurTime() + + ulx.fancyLog("Wagons on server: #s", Metrostroi.TrainCount()) + if CPPI then + local N = {} + for k,v in pairs(Metrostroi.TrainClasses) do + if v == "gmod_subway_base" then continue end + local ents = ents.FindByClass(v) + for k2,v2 in pairs(ents) do + N[v2:CPPIGetOwner() or v2:GetNetworkedEntity("Owner", "N/A") or "(disconnected)"] = (N[v2:CPPIGetOwner() or v2:GetNetworkedEntity("Owner", "N/A") or "(disconnected)"] or 0) + 1 + end + end + for k,v in pairs(N) do + ulx.fancyLog("#s wagons have #s",v,(type(k) == "Player" and IsValid(k)) and k:GetName() or k) + end + end + ulx.fancyLog("Max trains: #s.\nMax wagons: #s.\nMax trains per player: #s", GetConVarNumber("metrostroi_maxtrains"), GetConVarNumber("metrostroi_maxwagons"), GetConVarNumber("metrostroi_maxtrains_onplayer")) +end +local wagons = ulx.command( CATEGORY_NAME, "ulx trains", ulx.wagoncount, "!trains" ) +wagons:defaultAccess( ULib.ACCESS_ALL ) +wagons:help( "Shows you the current wagons count per player." ) + +function ulx.routes( calling_ply ) + --if lasttimeusage + waittime > CurTime() then + --ULib.tsayError( calling_ply, "Please wait " .. math.Round(lasttimeusage + waittime - CurTime()) .. " seconds before using this command again", true ) + --return + --end + + --lasttimeusage = CurTime() + local wagTable = {} + local trains = {} + --ulx.fancyLog("Wagons on server: #s", Metrostroi.TrainCount()) + if CPPI then + --local N = {} + for k,v in pairs(Metrostroi.TrainClasses) do + if v == "gmod_subway_base" then continue end + local ents = ents.FindByClass(v) + for k2,ent in pairs(ents) do + if ent.NoTrain or trains[ent] or (ent.FrontTrain and ent.RearTrain) then continue end + if ent.WagonList then + local id = table.insert(wagTable,{}) + for i,tr in ipairs(ent.WagonList) do + trains[tr] = id + table.insert(wagTable[id],tr) + end + end + end + end + for i,trains in ipairs(wagTable) do + local owner = trains[1]:GetDriverName() + local routelist = "" + for it,train in pairs(trains) do + if (train.FrontTrain and train.RearTrain) then continue end + local num = train.RouteNumber and train.RouteNumber.RouteNumber + if num and tonumber(num) > 0 then + if routelist ~= "" then routelist = routelist.."," end + routelist = routelist..num:sub(1,train.RouteNumber.Max or -1) + end + end + if routelist ~= "" then + ulx.fancyLog("#s route number #s",owner,routelist) + else + ulx.fancyLog("#s route number not set",owner) + end + end + --[[ + --N[v2:CPPIGetOwner() or v2:GetNetworkedEntity("Owner", "N/A") or "(disconnected)"] = (N[v2:CPPIGetOwner() or v2:GetNetworkedEntity("Owner", "N/A") or "(disconnected)"] or 0) + 1 + if v2.GetDriverName then + ulx.fancyLog("#s have a route:#d",v2:GetDriverName(),v2.RouteNumber + else + ulx.fancyLog("#s don't have a route",v2:GetDriverName()) + end + end + end]] + end + --ulx.fancyLog("Max trains: #s.\nMax wagons: #s.\nMax trains per player: #s", GetConVarNumber("metrostroi_maxtrains"), GetConVarNumber("metrostroi_maxwagons"), GetConVarNumber("metrostroi_maxtrains_onplayer")) +end +local routes = ulx.command( CATEGORY_NAME, "ulx routes", ulx.routes, "!routes" ) +routes:defaultAccess( ULib.ACCESS_ALL ) +routes:help( "Shows you the current routes." ) + +function ulx.trains( calling_ply, ToP ) + --if lasttimeusage + waittime > CurTime() then + --ULib.tsayError( calling_ply, "Please wait " .. math.Round(lasttimeusage + waittime - CurTime()) .. " seconds before using this command again", true ) + --return + --end + + --lasttimeusage = CurTime() + + local wagTable = {} + local trains = {} + local found = false + for k,v in pairs(Metrostroi.TrainClasses) do + if v == "gmod_subway_base" then continue end + local ents = ents.FindByClass(v) + for k2,ent in pairs(ents) do + if ent.NoTrain or trains[ent] or (ent.FrontTrain and ent.RearTrain) or not ent.WagonList then continue end + + local owner = CPPI and ent:CPPIGetOwner() or ent:GetOwner() + local canShow = not ToP or ToP == "" or IsValid(owner) and owner:GetName():find(ToP) + + if not canShow and not tonumber(ToP) then continue end + + local consist = "" + local routelist = "" + local drivers = "" + local signal + for i,tr in ipairs(ent.WagonList) do + if ToP then canShow = canShow or tr:GetWagonNumber() == tonumber(ToP) end + + if consist ~= "" then consist = consist.."-" end + consist = consist..string.format("%04d",tr:GetWagonNumber()) + + local num = tr.RouteNumber and tr.RouteNumber.RouteNumber + if num then + if routelist ~= "" then routelist = routelist.."," end + routelist = routelist..num:sub(1,tr.RouteNumber.Max or -1) + end + + local ALSCoil = tr.ALSCoil + if ALSCoil and ALSCoil.Enabled > 0 and IsValid(ALSCoil.Signal) and (IsValid(ent:GetDriver()) or not signal) then + signal = ALSCoil.Signal + end + if IsValid(tr.DriverSeat) and IsValid(tr.DriverSeat:GetDriver()) then + if drivers ~= "" then drivers = drivers.."," end + drivers = drivers..string.format("%s in %04d driver",tr.DriverSeat:GetDriver():GetName(),tr:GetWagonNumber()) + end + trains[tr] = true + end + + if not canShow then continue end + --[[ulx.fancyLog("Consist #s:\n\tOwner #s\n\tType #s\n\tRoute number:#s\n\tSignal:#s", + consist, + owner and owner:GetName() or "N/A", + ent:GetClass():gsub("gmod_subway_",""), + routelist=="" and "N/A" or routelist, + signal and string.format("%s %s",signal.Name,(signal.Red or signal:GetARS(0,true)) and "(prohibited)" or "") or "N/A" + )]] + ulx.fancyLog("Consist #s:",consist) + if IsValid(owner) then ulx.fancyLog("\tOwner #s",owner:GetName()) end + ulx.fancyLog("\tType #s",ent:GetClass():gsub("gmod_subway_","")) + if routelist~="" then ulx.fancyLog("\tRoute number: #s",routelist) end + if signal then ulx.fancyLog("\tSignal: #s",string.format("%s %s",signal.Name,(signal.Red or signal:GetARS(0,true)) and "(prohibited)" or "")) end + if drivers ~= "" then ulx.fancyLog("\tDrivers: #s",drivers) end + found = true + end + end + if not found then ULib.tsayError( calling_ply, "Train not found",true) end +end +local trains = ulx.command( CATEGORY_NAME, "ulx traininfo", ulx.trains, "!tinfo" ) +trains:defaultAccess( ULib.ACCESS_ALL ) +trains:addParam{ type=ULib.cmds.StringArg, hint="Filter by player or wagon number", ULib.cmds.takeRestOfLine, invisible=true } +trains:help( "Shows you the detailed info about all consits" ) + + +function ulx.traingoto( calling_ply, ToP) + if not IsValid(calling_ply) then return end + --if lasttimeusage + waittime > CurTime() then + --ULib.tsayError( calling_ply, "Please wait " .. math.Round(lasttimeusage + waittime - CurTime()) .. " seconds before using this command again", true ) + --return + --end + + --lasttimeusage = CurTime() + local train = not ToP and IsValid(calling_ply.lastTrain) and calling_ply.lastTrain + + for k,v in pairs(Metrostroi.TrainClasses) do + if v == "gmod_subway_base" then continue end + local ents = ents.FindByClass(v) + for k2,ent in pairs(ents) do + if ent.NoTrain then continue end + + local owner = CPPI and ent:CPPIGetOwner() or ent:GetOwner() + local driver = ent:GetDriver() + if not ToS and owner == calling_ply and not (ent.FrontTrain and ent.RearTrain) then train = ent break end + if ToS and driver and driver:GetName():find(ToS) and not ulx.getExclusive(driver,calling_ply) then train = ent break end + + for i,tr in ipairs(ent.WagonList) do + if ToP and tr:GetWagonNumber() == tonumber(ToP) then + train = tr + break + end + end + + if train then break end + end + if train then break end + end + if train then + if calling_ply:InVehicle() then calling_ply:ExitVehicle() end + calling_ply:SetMoveType(MOVETYPE_NOCLIP) + + if IsValid(train.DriverSeat) then + calling_ply:SetPos(train.DriverSeat:LocalToWorld(Vector(-10,0,0))) + calling_ply:SetEyeAngles(train:LocalToWorldAngles(-train.DriverSeat:GetAngles())) + calling_ply:SetLocalVelocity( Vector( 0, 0, 0 ) ) -- Stop! + else + calling_ply:SetPos(train:LocalToWorld(Vector(0,0,20))) + calling_ply:SetEyeAngles(train:GetAngles()) + calling_ply:SetLocalVelocity( Vector( 0, 0, 0 ) ) -- Stop! + end + + ulx.fancyLogAdmin( calling_ply, "#A teleported to #s", train ) + else + ULib.tsayError( calling_ply, "Train not found",true) + end +end +local traingoto = ulx.command( CATEGORY_NAME, "ulx traingoto", ulx.traingoto, "!tgoto" ) +traingoto:defaultAccess( ULib.ACCESS_ALL ) +traingoto:addParam{ type=ULib.cmds.StringArg, hint="Filter by player or wagon number", ULib.cmds.takeRestOfLine, invisible=true } +traingoto:help( "Teleport you to trains" ) + +function ulx.trainback( calling_ply ) + if not IsValid(calling_ply) then return end + if not IsValid(calling_ply.lastTrain) then + ULib.tsayError( calling_ply, "Train not found",true) + return + end + if calling_ply:InVehicle() then + ULib.tsayError( calling_ply, "Leave vehicle first!",true) + return + end + --if lasttimeusage + waittime > CurTime() then + --ULib.tsayError( calling_ply, "Please wait " .. math.Round(lasttimeusage + waittime - CurTime()) .. " seconds before using this command again", true ) + --return + --end + + --lasttimeusage = CurTime() + local train = calling_ply.lastTrain + + local seat = IsValid(calling_ply.lastTrainSeat) and not IsValid(calling_ply.lastTrainSeat:GetDriver()) and calling_ply.lastTrainSeat + + if not seat and IsValid(train.DriverSeat) and not IsValid(train.DriverSeat:GetDriver()) then + seat = train.DriverSeat + end + + if not seat and IsValid(train.InstructorsSeat) and not IsValid(train.InstructorsSeat:GetDriver()) then + seat = train.InstructorsSeat + end + if not seat then + for i=1,5 do + if IsValid(train["InstructorsSeat"..i]) and not IsValid(train["InstructorsSeat"..i]:GetDriver()) then + seat = train["InstructorsSeat"..i] + break + end + if IsValid(train["ExtraSeat"..i]) and not IsValid(train["ExtraSeat"..i]:GetDriver()) then + seat = train["ExtraSeat"..i] + break + end + end + end + if seat then + --if calling_ply:InVehicle() then calling_ply:ExitVehicle() end + calling_ply:SetPos(seat:LocalToWorld(Vector(0,0,20))) + calling_ply:SetEyeAngles(train:LocalToWorldAngles(-seat:GetAngles())) + calling_ply:EnterVehicle(seat) + else + ULib.tsayError( calling_ply, "Train not found",true) + end +end +local trainback = ulx.command( CATEGORY_NAME, "ulx trainback", ulx.trainback, "!tback" ) +trainback:defaultAccess( ULib.ACCESS_ALL ) +trainback:help( "Teleport you back to your train" ) + + +local function takeSeat(Player, OtherSeat) + if not IsValid(OtherSeat) or IsValid(OtherSeat:GetDriver()) or not IsValid(OtherSeat:GetParent()) then + return false + end + + local Seat = Player:GetVehicle() + Seat:SetVehicleEntryAnim(false) + OtherSeat:SetVehicleEntryAnim(false) + + local OldMoveType = Player:GetMoveType( MOVETYPE_WALK ) + Player:ExitVehicle() + Player:SetMoveType( MOVETYPE_NOCLIP ) + Player:SetPos(OtherSeat:LocalToWorld(Vector(0,0,20))) + Player:SetEyeAngles(OtherSeat:GetParent():LocalToWorldAngles(-OtherSeat:GetAngles())) + + local timerName = "change_cab_"..OtherSeat:EntIndex() + + timer.Create(timerName, 0, 0, function() + if not IsValid(Player) or not IsValid(OtherSeat) or IsValid(Player:GetVehicle()) then + timer.Remove(timerName) + + Player:SetMoveType(OldMoveType) + Seat:SetVehicleEntryAnim(false) + OtherSeat:SetVehicleEntryAnim(false) + return + end + + Player:EnterVehicle(OtherSeat) + + if not IsValid(Player:GetVehicle()) then return end + + timer.Remove(timerName) + + --Player:SetPos(OtherSeat:LocalToWorld(Vector(0,0,20))) + Player:SetEyeAngles(OtherSeat:GetParent():LocalToWorldAngles(-OtherSeat:GetAngles())) + + Seat:SetVehicleEntryAnim(false) + OtherSeat:SetVehicleEntryAnim(false) + end) + + return true +end + +function ulx.changecab( calling_ply ) + if not IsValid(calling_ply) then return end + local Wagon = calling_ply:GetTrain() + if not IsValid(Wagon) then + ULib.tsayError( calling_ply, "You ,ust sit in train",true) + return + end + + local TargetWagon + for i, wag in ipairs(Wagon.WagonList) do + if not IsValid(wag) or Wagon == wag or (wag.FrontTrain and wag.RearTrain) then continue end + TargetWagon = wag + break + end + + if not TargetWagon then + ULib.tsayError( calling_ply, "Can't find back wagon in train!",true) + return + end + + local Seat = calling_ply:GetVehicle(); + + if Seat == Wagon.DriverSeat then + if not takeSeat(calling_ply, TargetWagon.DriverSeat) then + ULib.tsayError( calling_ply, "Driver seat are occupied!",true) + end + return + end + + if takeSeat(calling_ply, TargetWagon.InstructorsSeat) then return end + for i=1,5 do + if takeSeat(calling_ply, TargetWagon["InstructorsSeat"..i]) then return end + end + for i=1,5 do + if takeSeat(calling_ply, TargetWagon["ExtraSeat"..i]) then return end + end + + ULib.tsayError( calling_ply, "Cannot find propper seat...",true) +end +local changecab = ulx.command( CATEGORY_NAME, "ulx changecab", ulx.changecab, "!ccab" ) +changecab:defaultAccess( ULib.ACCESS_ALL ) + +changecab:help( "Change cab" ) +------------------------------ Trainfuck ------------------------------ +local Models = { + "models/z-o-m-b-i-e/metro_2033/train/m_33_metro_train_01_one_part.mdl", + "models/z-o-m-b-i-e/metro_2033/train/m_33_train_crush_02.mdl", +} +local function SpawnTrain( Pos, Direction ) + local train = ents.Create( "prop_physics" ) + local random = math.random(1,#Models) + train:SetModel(Models[random]) + train:SetAngles( Direction:Angle() + Angle(0,string.find(Models[random],"metrostroi") and 0 or 270,0) ) + train:SetPos( Pos ) + if math.random() > 0.6 then train:SetColor( Color(math.random(0,255),math.random(0,255),math.random(0,255)) ) end + train:SetSkin(math.random(0,2)) + train:Spawn() + train:Activate() + train:EmitSound( "ambient/alarms/train_horn2.wav", 100, 100 ) + train:GetPhysicsObject():SetVelocity( Direction * math.random(1e7,1e9) ) + + --timer.Create( "TrainRemove_"..CurTime(), 5, 1, function( train ) train:Remove() end, train ) + timer.Simple( 5, function() train:Remove() end ) +end + +function ulx.trainfuck(calling_ply, target_plys) + local affected_plys = {} + + local gm = GetConVarNumber("sbox_godmode") + if gm > 0 then RunConsoleCommand("sbox_godmode",0) end + for i=1, #target_plys do + local v = target_plys[ i ] + + if ulx.getExclusive( v, calling_ply ) then + ULib.tsayError( calling_ply, ulx.getExclusive( v, calling_ply ), true ) + elseif not v:Alive() then + ULib.tsayError( calling_ply, v:Nick() .. " is already dead!", true ) + elseif v:IsFrozen() then + ULib.tsayError( calling_ply, v:Nick() .. " is frozen!", true ) + else + v:SetMoveType( MOVETYPE_WALK ) + v:GodDisable() + SpawnTrain( v:GetPos() + v:GetForward() * 1000 + Vector(0,0,120), v:GetForward() * -1 ) + table.insert( affected_plys, v ) + end + end + timer.Simple(1,function() + RunConsoleCommand("sbox_godmode",gm) + end) + + ulx.fancyLogAdmin( calling_ply, "#A trainfucked #T", affected_plys ) +end +local traunfuck = ulx.command( "Fun", "ulx trainfuck", ulx.trainfuck, "!trainfuck", true ) +traunfuck:addParam{ type=ULib.cmds.PlayersArg } +traunfuck:defaultAccess( ULib.ACCESS_ADMIN ) +traunfuck:help( "Trainfucks a player." ) + + +function ulx.tps( calling_ply,station ) + station = string.PatternSafe(station:lower()) + + --Обработка Ñообщений вида ÑтанциÑ:номер Ð´Ð»Ñ Ñтанций, которые имеют неÑоклько позиций + local add = 0 + if station:find("[^:]+:%d+$") then + local st,en = station:find(":%d+$") + add = tonumber(station:sub(st+1,en)) + station = station:sub(1,st-1) + end + + --Проверка на наличие таблицы + if not Metrostroi.StationConfigurations then ULib.tsayError( calling_ply, "This map is not configured", true ) return end + + --Создание маÑÑива найденых Ñтанций по индкеÑу Ñтанции или куÑка имени + local st = {} + for k,v in pairs(Metrostroi.StationConfigurations) do + if not v.positions then continue end + if v.names then + for _,stat in pairs(v.names) do + if stat:lower():find(station) then + table.insert(st,k) + break + end + end + end + if tostring(k):find(station) then + table.insert(st,k) + end + end + + if #st == 0 then + ULib.tsayError( calling_ply, Format("Station not found %s",station), true ) + return + elseif #st > 1 then + ULib.tsayError( calling_ply, Format("More than 1 station for name %s:",station), true ) + for k,v in pairs(st) do + local tbl = Metrostroi.StationConfigurations[v] + if tbl.names and tbl.names[1] then + ULib.tsayError( calling_ply, Format("\t%s=%s",v,tbl.names[1]), true ) + else + ULib.tsayError( calling_ply, Format("\t%s",k), true ) + end + end + ULib.tsayError( calling_ply, "Enter a more specific name or station ID", true ) + return + end + local key = st[1] + st = Metrostroi.StationConfigurations[key] + local ptbl + if add > 0 then + local pos = st.positions + ptbl = pos[math.min(#pos,add+1)] + else + ptbl = st.positions and st.positions[1] + end + if IsValid(calling_ply) then + if ptbl and ptbl[1] then + if calling_ply:InVehicle() then calling_ply:ExitVehicle() end + calling_ply.ulx_prevpos = calling_ply:GetPos()--ulx return + calling_ply.ulx_prevang = calling_ply:EyeAngles() + calling_ply:SetPos(ptbl[1]) + calling_ply:SetAngles(ptbl[2]) + calling_ply:SetEyeAngles(ptbl[2]) + ulx.fancyLogAdmin( calling_ply, "#A teleported to #s", st.names and st.names[1] or key) + else + ULib.tsayError( calling_ply, "Configuration error for station "..key, true ) + ulx.fancyLogAdmin( calling_ply, "Configuration error for station #s", key) + end + + else + if ptbl and ptbl[1] then + print(Format("DEBUG1:Teleported to %s(%s) pos:%s ang:%s",st.names and st.names[1] or key,key,ptbl[1],ptbl[2])) + else + ulx.fancyLogAdmin( calling_ply, "Configuration error for station #s", station:gsub("^%l", string.upper)) + end + end +end +local tps = ulx.command( "Metrostroi", "ulx station", ulx.tps, "!station" ) +tps:addParam{ type=ULib.cmds.StringArg, hint="Station or station number", ULib.cmds.takeRestOfLine } +tps:defaultAccess( ULib.ACCESS_ALL ) +tps:help( "Teleport between stations." ) + +--КоÑтылииии +function ulx.sopen( calling_ply, arg ) + MSignalSayHook(calling_ply,"!sopen "..arg, true) +end +local sopen = ulx.command( CATEGORY_NAME, "ulx sopen", ulx.sopen, "!sopen" ) +sopen:addParam{ type=ULib.cmds.StringArg, hint="Signal or route name", ULib.cmds.takeRestOfLine } +sopen:defaultAccess( ULib.ACCESS_ALL ) +sopen:help( "Open signal or route" ) + +function ulx.sclose( calling_ply, arg ) + MSignalSayHook(calling_ply,"!sclose "..arg, true) +end +local sclose = ulx.command( CATEGORY_NAME, "ulx sclose", ulx.sclose, "!sclose" ) +sclose:addParam{ type=ULib.cmds.StringArg, hint="Signal or route name", ULib.cmds.takeRestOfLine } +sclose:defaultAccess( ULib.ACCESS_ALL ) +sclose:help( "Close signal or route" ) + +function ulx.sactiv( calling_ply, arg ) + MSignalSayHook(calling_ply,"!sactiv "..arg, true) +end +local sactiv = ulx.command( CATEGORY_NAME, "ulx sactiv", ulx.sactiv, "!sactiv" ) +sactiv:addParam{ type=ULib.cmds.StringArg, hint="Signal or route name", ULib.cmds.takeRestOfLine } +sactiv:defaultAccess( ULib.ACCESS_ALL ) +sactiv:help( "Enable auxulary signals" ) + +function ulx.sdeactiv( calling_ply, arg ) + MSignalSayHook(calling_ply,"!sdeactiv "..arg, true) +end +local sdeactiv = ulx.command( CATEGORY_NAME, "ulx sdeactiv", ulx.sdeactiv, "!sdeactiv" ) +sdeactiv:addParam{ type=ULib.cmds.StringArg, hint="Signal or route name", ULib.cmds.takeRestOfLine } +sdeactiv:defaultAccess( ULib.ACCESS_ALL ) +sdeactiv:help( "Disable auxulary signals" ) + +function ulx.sopps( calling_ply, arg ) + MSignalSayHook(calling_ply,"!sopps "..arg, true) +end +local sopps = ulx.command( CATEGORY_NAME, "ulx sopps", ulx.sopps, "!sopps" ) +sopps:addParam{ type=ULib.cmds.StringArg, hint="Signal or route name", ULib.cmds.takeRestOfLine } +sopps:defaultAccess( ULib.ACCESS_ALL ) +sopps:help( "Open invitation signal" ) + +function ulx.sclps( calling_ply, arg ) + MSignalSayHook(calling_ply,"!sclps "..arg, true) +end +local sclps = ulx.command( CATEGORY_NAME, "ulx sclps", ulx.sclps, "!sclps" ) +sclps:addParam{ type=ULib.cmds.StringArg, hint="Signal or route name", ULib.cmds.takeRestOfLine } +sclps:defaultAccess( ULib.ACCESS_ALL ) +sclps:help( "Close invitation signal" ) \ No newline at end of file diff --git a/lua/weapons/button_presser/cl_init.lua b/lua/weapons/button_presser/cl_init.lua new file mode 100644 index 0000000..c0677dc --- /dev/null +++ b/lua/weapons/button_presser/cl_init.lua @@ -0,0 +1,46 @@ +include("shared.lua") + +SWEP.PrintName = "Button presser" +SWEP.Slot = 3 +SWEP.SlotPos = 2 +SWEP.DrawAmmo = false +SWEP.DrawCrosshair = true + +SWEP.HoldType = "normal" + + +function SWEP:Holster() + return true +end + +function SWEP:OnRemove() +end + +function SWEP:Initialize() +end + +function SWEP:Reload() + +end + +function SWEP:PrimaryAttack() + if IsFirstTimePredicted() then + end + self:SetNextPrimaryFire( CurTime() + 10 ) +end + +function SWEP:SecondaryAttack() + self:SetNextSecondaryFire( CurTime() + 0.5 ) +end + +function SWEP:Deploy() +end + +function SWEP:Think() + +end +function SWEP:DrawHUD() + if self:GetNW2Int("Type") == 1 then + draw.SimpleText("Current button:"..self:GetNW2String("Name","Unknown"),"CloseCaption_Bold",ScrW()/2, 0,Color(127,255,0),1) + end +end diff --git a/lua/weapons/button_presser/init.lua b/lua/weapons/button_presser/init.lua new file mode 100644 index 0000000..75bf419 --- /dev/null +++ b/lua/weapons/button_presser/init.lua @@ -0,0 +1,50 @@ +AddCSLuaFile( "cl_init.lua" ) +AddCSLuaFile( "shared.lua" ) + +include( "shared.lua" ) + +SWEP.Weight = 1 +SWEP.PrimAttack = false + +function SWEP:Initialize() +end +function SWEP:Think() + local tr = util.GetPlayerTrace( self.Owner ) + tr.ignoreworld = true + tr.filter = function(ent) if (ent:GetClass() == "func_button" or ent:GetClass() == "momentary_rot_button") and not ent:GetName():find("adminlock") then return true end end + + if self.PrimAttack and IsValid(self.Entity) and self.Entity:GetClass() == "momentary_rot_button" then + self.Entity:Fire("Use") + end + + if self.PrimAttack ~= self.OldPrimAttack then + local trace = util.TraceLine( tr ) + local rot + if IsValid(trace.Entity) then + rot = trace.Entity:GetClass() == "momentary_rot_button" + end + if trace.Hit and rot ~= nil and not IsValid(self.Entity) then + self.Entity = trace.Entity + if not rot then + self.Entity:Fire("Press") + end + elseif not self.PrimAttack and IsValid(self.Entity) then + self.Entity = nil + end + self.OldPrimAttack = self.PrimAttack + end + self.PrimAttack = false + + local trace = util.TraceLine( tr ) + if not trace.Hit or not IsValid(trace.Entity) then + self:SetNW2String("Name","") + self:SetNW2Int("Type",0) + return + end + self:SetNW2Int("Type",1) + self:SetNW2String("Name",trace.Entity:GetName()) +end +function SWEP:PrimaryAttack() + self.PrimAttack = true + +end diff --git a/lua/weapons/button_presser/shared.lua b/lua/weapons/button_presser/shared.lua new file mode 100644 index 0000000..cbe4e61 --- /dev/null +++ b/lua/weapons/button_presser/shared.lua @@ -0,0 +1,23 @@ +--include("shared.lua") +--AddCSLuaFile("shared.lua") +--AddCSLuaFile("cl_init.lua") +SWEP.Author = "glebqip" +SWEP.Contact = "" +SWEP.Purpose = "Button presser" +SWEP.Instructions = "Button presser" +SWEP.Spawnable = true +SWEP.AdminSpawnable = true +SWEP.Category = "Metrostroi" + + +SWEP.UseHands = false + +SWEP.Primary.ClipSize = -1 +SWEP.Primary.DefaultClip = -1 +SWEP.Primary.Automatic = true +SWEP.Primary.Ammo = "" + +SWEP.Secondary.ClipSize = -1 +SWEP.Secondary.DefaultClip = -1 +SWEP.Secondary.Automatic = false +SWEP.Secondary.Ammo = "none" diff --git a/lua/weapons/gmod_tool/stools/signalling.lua b/lua/weapons/gmod_tool/stools/signalling.lua new file mode 100644 index 0000000..c0d32f0 --- /dev/null +++ b/lua/weapons/gmod_tool/stools/signalling.lua @@ -0,0 +1,1513 @@ +TOOL.Category = "Metro" +TOOL.Name = "Signalling Tool" +TOOL.Command = nil +TOOL.ConfigName = "" +TOOL.ClientConVar["signaldata"] = "" +TOOL.ClientConVar["signdata"] = "" +TOOL.ClientConVar["autodata"] = "" +TOOL.ClientConVar["type"] = 1 +TOOL.ClientConVar["routetype"] = 1 + +if SERVER then util.AddNetworkString "metrostroi-stool-signalling" end + + +local Types = {"Signal","Sign","Autodrive",[0] = "Choose Type"} +local TypesOfSignal = {"Inside","Outside big","Outside small"} +local TypesOfSign = {"NF","40","60","70","80","Station border","C(horn) Street","STOP Street","Dangerous","Deadlock", + "Stop marker","!(stop)","X","T Start","T End","T Sbor(engage)","Engines off","Engines on","C(horn)","T stop emer","Shod", + "Left doors","Phoneâ–²","Phoneâ–¼","1up","STOP Street cyka","NF outside","35 outside","40 outside","60 outside","70 outside","80 outside", + "T Sbor(engage) outside","35","Dangerous 200","CR End","CR End(inv)","2up","3up","4up","5up","6up","X outside", "Metal","50","50 outside", + "Forward x2", + "Ted Off kn", + "Ted Off p1", + "Ted Off p2", + "Ted Off pn", + "Ted Off t1", + "Ted Off t2", + "Ted Off t3", + "Ted Off t4", + "Ted On kn", + "Ted On p1", + "Ted On p2", + "Ted On pn", + "Ted On t1", + "Ted On t2", + "Ted On t3", + "Ted On t4", + "Ted Off 722 10%", + "Ted Off 722 20%", + "Ted Off 722 30%", + "Ted Off 722 40%", + "Ted Off 722 50%", + "Ted Off 722 60%", + "Ted Off 722 70%", + "Ted Off 722 80%", + "Ted Off 722 90%", + "Ted Off 722 100%", + "Ted Off Outside", + "Ted On 722 10%", + "Ted On 722 20%", + "Ted On 722 30%", + "Ted On 722 40%", + "Ted On 722 50%", + "Ted On 722 60%", + "Ted On 722 70%", + "Ted On 722 80%", + "Ted On 722 90%", + "Ted On 722 100%", + "Ted On Outside", + } +local RouteTypes = {"Auto", "Manual","Repeater","Emerg"} + +local TypesOfAuto = { + "Drive commands","Station brake command", "Door command","Light sensor","PA Marker","UPPS Sensor","SBPP Sensor" +} +TOOL.Type = 0 +TOOL.RouteType = 1 + +--TOOL.Signal.Type = 1 + +if CLIENT then + language.Add("Tool.signalling.name", "Signalling Tool") + language.Add("Tool.signalling.desc", "Adds and modifies signalling equipment (ARS/ALS) or signs") + language.Add("Tool.signalling.0", "Primary: Spawn/update selected signalling entity (point at the inner side of rail)\nReload: Copy ARS/light settings\nSecondary: Remove") + language.Add("Undone_signalling", "Undone ARS/signalling equipment") +end + +function TOOL:SpawnSignal(ply,trace,param) + local pos = trace.HitPos + + -- Use some code from rerailer -- + local tr = Metrostroi.RerailGetTrackData(pos,ply:GetAimVector()) + if not tr then return end + -- Create self.Signal entity + local ent + local found = false + local entlist = ents.FindInSphere(pos,64) + for k,v in pairs(entlist) do + if v:GetClass() == "gmod_track_signal" then + if v.Name==self.Signal.Name then + ent = v + found=0 + break + end + if not found or found > pos:Distance(v:GetPos()) then + ent = v + found = pos:Distance(v:GetPos()) + end + end + end + if param == 2 then + if not ent then return end + self.Signal.Type = ent.SignalType + 1 + self.Signal.Name = ent.Name + self.Signal.Lenses = ent.LensesStr + self.Signal.RouteNumber = ent.RouteNumber + self.Signal.RouteNumberSetup = ent.RouteNumberSetup + self.Signal.IsolateSwitches = ent.IsolateSwitches + self.Signal.Approve0 = ent.Approve0 + self.Signal.TwoToSix = ent.TwoToSix + self.Signal.ARSOnly = ent.ARSOnly + self.Signal.NonAutoStop = ent.NonAutoStop + self.Signal.PassOcc = ent.PassOcc + self.Signal.Routes = ent.Routes + self.Signal.Left = ent.Left + self.Signal.Double = ent.Double + self.Signal.DoubleL = ent.DoubleL + net.Start("metrostroi-stool-signalling") + net.WriteUInt(0,8) + net.WriteTable(self.Signal) + net.Send(self:GetOwner()) + else + if not ent then ent = ents.Create("gmod_track_signal") end + if IsValid(ent) then + if param ~= 2 then + ent:SetPos(tr.centerpos - tr.up * 9.5) + ent:SetAngles((-tr.right):Angle()) + end + if not found then + ent:Spawn() + -- Add to undo + undo.Create("signalling") + undo.AddEntity(ent) + undo.SetPlayer(ply) + undo.Finish() + end + ent.SignalType = self.Signal.Type-1 + ent.ARSOnly = self.Signal.ARSOnly + ent.Name = self.Signal.Name + ent.LensesStr = self.Signal.Lenses + ent.RouteNumber = self.Signal.RouteNumber + ent.RouteNumberSetup = self.Signal.RouteNumberSetup + ent.IsolateSwitches = self.Signal.IsolateSwitches + ent.Approve0 = self.Signal.Approve0 + ent.NonAutoStop = self.Signal.NonAutoStop + ent.TwoToSix = self.Signal.TwoToSix + ent.Routes = self.Signal.Routes + ent.Left = self.Signal.Left + ent.Double = self.Signal.Double + ent.DoubleL = self.Signal.DoubleL + ent.Lenses = string.Explode("-",ent.LensesStr) + ent.PassOcc = self.Signal.PassOcc + ent.InS = nil + ent:SendUpdate() + for i = 1,#ent.Lenses do + if ent.Lenses[i]:find("W") then + ent.InS = i + end + end + Metrostroi.UpdateSignalEntities() + Metrostroi.PostSignalInitialize() + end + return ent + end +end + +function TOOL:SpawnSign(ply,trace,param) + local pos = trace.HitPos + + -- Use some code from rerailer -- + local tr = Metrostroi.RerailGetTrackData(pos,ply:GetAimVector()) + if not tr then return end + -- Create self.Sign entity + local ent + local found = false + local entlist = ents.FindInSphere(pos,64) + for k,v in pairs(entlist) do + if v:GetClass() == "gmod_track_signs" then + ent = v + found = true + end + end + if param == 2 then + if not ent then return end + self.Sign.Type = ent.SignType + self.Sign.YOffset = ent.YOffset + self.Sign.ZOffset = ent.ZOffset + self.Sign.Left = ent.Left + net.Start("metrostroi-stool-signalling") + net.WriteUInt(1,8) + net.WriteTable(self.Sign) + net.Send(self:GetOwner()) + else + if not ent then ent = ents.Create("gmod_track_signs") end + if IsValid(ent) then + if param ~= 2 then + ent:SetPos(tr.centerpos - tr.up * 9.5) + ent:SetAngles((-tr.right):Angle() + Angle(0,90,0)) + end + if not found then + ent:Spawn() + -- Add to undo + undo.Create("signalling") + undo.AddEntity(ent) + undo.SetPlayer(ply) + undo.Finish() + end + ent.SignType = self.Sign.Type + ent.YOffset = self.Sign.YOffset + ent.ZOffset = self.Sign.ZOffset + ent.Left = self.Sign.Left + ent:SendUpdate() + end + return ent + end +end + +function TOOL:SpawnAutoPlate(ply,trace,param) + local pos = trace.HitPos + + -- Use some code from rerailer -- + local tr = Metrostroi.RerailGetTrackData(pos,ply:GetAimVector()) + if not tr then return end + + local ent + local found = false + local entlist = ents.FindInSphere(pos,self.Auto.Type == 5 and 192 or 64) + for k,v in pairs(entlist) do + if v:GetClass() == "gmod_track_pa_marker" and self.Auto.Type == 5 or v:GetClass() == "gmod_track_autodrive_plate" and v.PlateType == self.Auto.Type and not v.Linked then + ent = v + found = true + break + end + end + if param == 2 then + if not ent then return end + --self.Auto.Type = ent.PlateType + + if self.Auto.Type == METROSTROI_ACOIL_DRIVE then + self.Auto.Right = ent.Right + self.Auto.Mode = ent.Mode + self.Auto.StationID = ent.StationID + self.Auto.StationPath = ent.StationPath + elseif self.Auto.Type == METROSTROI_ACOIL_DOOR then + self.Auto.Right = ent.Right + elseif self.Auto.Type == 5 then + self.Auto.PAType = ent.PAType or 1 + if self.Auto.PAType == 1 then + self.Auto.PAStationPath = ent.PAStationPath + self.Auto.PAStationID = ent.PAStationID + self.Auto.PAStationName = ent.PAStationName + self.Auto.PALastStation = ent.PALastStation + self.Auto.PAWrongPath = ent.PAWrongPath + self.Auto.PADeadlockStart = ent.PADeadlockStart + self.Auto.PADeadlockEnd = ent.PADeadlockEnd + self.Auto.PALineChange = ent.PALineChange + self.Auto.PALineChangeStationPath = ent.PALineChangeStationPath + self.Auto.PALineChangeStationID = ent.PALineChangeStationID + self.Auto.PALastStationName = ent.PALastStationName + self.Auto.PAStationHasSwtiches = ent.PAStationHasSwtiches + self.Auto.PAStationRightDoors = ent.PAStationRightDoors + self.Auto.PAStationHorlift = ent.PAStationHorlift + end + elseif self.Auto.Type == METROSTROI_SBPPSENSOR and not ent.Linked then + self.Auto.SBPPType = ent.SBPPType + self.Auto.SBPPDeadlock = ent.IsDeadlock + self.Auto.SBPPStationPath = ent.StationPath + self.Auto.SBPPStationID = ent.StationID + self.Auto.SBPPDriveMode = ent.DriveMode + self.Auto.SBPPRightDoors = ent.RightDoors + self.Auto.SBPPWTime = ent.WTime or 0 + self.Auto.SBPPRK = ent.RKPos or 1 + self.Auto.LXp = ent.DistanceToOPV + end + self.Auto.LXp = ent.DistanceToOPV or ent.LXp or self.Auto.LXp + self.Auto.LYp = ent.LYp or self.Auto.LYp + self.Auto.LZp = ent.LZp or self.Auto.LZp + net.Start("metrostroi-stool-signalling") + net.WriteUInt(2,8) + net.WriteTable(self.Auto) + net.Send(self:GetOwner()) + else + if self.Auto.Type ~= 5 then + if not ent then ent = ents.Create("gmod_track_autodrive_plate") end + if IsValid(ent) then + local angle = (-tr.right):Angle() + angle:RotateAroundAxis(tr.up,90) + + ent.PlateType = self.Auto.Type + local center = (tr.centerpos - tr.up * 9.5) + if self.Auto.Type == METROSTROI_ACOIL_DRIVE then + local dist = 50 + if self.Auto.Dist == 1 then + ent.Model = "models/metrostroi/signals/autodrive/doska5.mdl" + dist = 5 + elseif self.Auto.Dist == 2 then + ent.Model = "models/metrostroi/signals/autodrive/doska20.mdl" + dist = 20 + else + ent.Model = "models/metrostroi/signals/autodrive/doska50.mdl" + end + ent.Right = self.Auto.Right + ent.Mode = self.Auto.Mode + if self.Auto.Mode == 3 or self.Auto.Mode == 4 then + dist = -dist/2+2.5+1.5 + ent.StationID = self.Auto.StationID + ent.StationPath = self.Auto.StationPath + else + dist = 0 + ent.StationID = nil + ent.StationPath = nil + end + + if self.Auto.Mode < 3 or self.Auto.Mode == 5 or 6 < self.Auto.Mode then ent.Power = true end + if ent.Right then + ent:SetPos(center + (tr.forward*(-(dist)/0.01905)+tr.right*-66+tr.up*5)) + else + ent:SetPos(center + (tr.forward*(-(dist)/0.01905)+tr.right*66+tr.up*5)) + end + elseif self.Auto.Type == METROSTROI_ACOIL_SBRAKE then + ent.Model = "models/metrostroi/signals/autodrive/doska160.mdl" + ent:SetPos(center + (tr.forward*(-(80+2.5+1.5+0.4)/0.01905)+tr.right*66+tr.up*5)) ---75 + elseif self.Auto.Type == METROSTROI_ACOIL_DOOR then + ent.Model = "models/metrostroi/signals/autodrive/doska5.mdl" + ent.Right = self.Auto.Right + if ent.Right then + ent:SetPos(center + (tr.forward*(-(4-2.5)/0.01905)+tr.right*66+tr.up*5)) + else + ent:SetPos(center + (tr.forward*(-(4-2.5)/0.01905)+tr.right*-66+tr.up*5)) + end + elseif self.Auto.Type == METROSTROI_LSENSOR then + ent.Model = "models/mus/metro/station_marker_4.mdl" + ent:SetPos(center + (tr.forward*(-(self.Auto.LXp or 0)/0.01905)+tr.right*((self.Auto.LYp or 0)/0.01905+120)+tr.up*((self.Auto.LZp or 0)/0.01905+130))) + angle:RotateAroundAxis(tr.up,90) + elseif self.Auto.Type == METROSTROI_UPPSSENSOR then + ent.Model = "models/metrostroi/upps.mdl" + ent:SetPos(center + (tr.forward*(-(self.Auto.LXp or 0)/0.01905)+tr.right*((self.Auto.LYp or 0)/0.01905)+tr.up*((0.8+(self.Auto.LZp or 0))/0.01905))) + ent.DistanceToOPV = self.Auto.LXp + ent.UPPS=true + angle:RotateAroundAxis(tr.forward,self.Auto.Roll or 0) + elseif self.Auto.Type == METROSTROI_SBPPSENSOR then + ent.SBPPType = self.Auto.SBPPType or 1 + ent.IsDeadlock = ent.SBPPType<=3 and self.Auto.SBPPDeadlock + ent.StationPath = 2<=ent.SBPPType and ent.SBPPType<=3 and tonumber(self.Auto.SBPPStationPath) + ent.StationID = 2<=ent.SBPPType and ent.SBPPType<=3 and tonumber(self.Auto.SBPPStationID) + ent.DriveMode = ent.SBPPType==3 and self.Auto.SBPPDriveMode + ent.RightDoors = ent.SBPPType==3 and self.Auto.SBPPRightDoors + ent.WTime = (ent.SBPPType==3 or ent.SBPPType>=5) and self.Auto.SBPPWTime + ent.RKPos = ent.SBPPType==7 and self.Auto.SBPPRK + if ent.SBPPType<=2 then ent.DistanceToOPV = self.Auto.LXp end + ent.Model = "models/metrostroi/signals/autodrive/rfid.mdl" + local pos + if ent.SBPPType==1 then + pos = center + else + pos = center + (tr.forward*(-(self.Auto.LXp or 0)/0.01905)+tr.right*(-80+(self.Auto.LYp or 0)/0.01905)+tr.up*(52+(self.Auto.LZp or 0)/0.01905)) + end + angle:RotateAroundAxis(tr.up,90) + angle:RotateAroundAxis(tr.forward,90) + if ent.SBPPType==1 then + local rpos = Metrostroi.GetPositionOnTrack(pos,angle) + local res = rpos[1] + if res then + local tpos, tang = Metrostroi.GetTrackPosition(res.path,res.x-self.Auto.LXp*(self.Auto.LInvX and -1 or 1)) + if tpos then + tang = tang:Angle() + pos = tpos + (tang:Right()*(-79+(self.Auto.LYp or 0)/0.01905)*(self.Auto.LRightP and -1 or 1)+tang:Up()*(-60+(self.Auto.LZp or 0)/0.01905)) + + tang:RotateAroundAxis(tang:Up(),-90) + tang:RotateAroundAxis(tang:Right(),self.Auto.LRightP and 90 or -90) + angle = tang + end + end + elseif ent.SBPPType==3 and not ent.BrakeProps then + ent.BrakeProps = {} + for i=-1,1,2 do + local entL = ents.Create("gmod_track_autodrive_plate") + entL.Model = "models/metrostroi/signals/autodrive/rfid.mdl" + entL:SetPos(pos + (tr.forward*(-1.5*i)/0.01905)) + entL:SetModel(ent.Model) + entL:SetAngles(angle) + entL:Spawn() + entL.Linked = ent + entL.SBPPType = ent.SBPPType + entL.PlateType = METROSTROI_SBPPSENSOR + table.insert(ent.BrakeProps,entL) + end + end + ent:SetPos(pos) + end + if not ent.DistanceToOPV then ent.LXp = self.Auto.LXp end + ent.LYp = self.Auto.LYp + ent.LZp = self.Auto.LZp + ent:SetModel(ent.Model) + ent:SetAngles(angle) + end + else + if not ent then ent = ents.Create("gmod_track_pa_marker") end + if IsValid(ent) then + local angle = (tr.forward):Angle() + local center = (tr.centerpos - tr.up * 9.5) + --angle:RotateAroundAxis(tr.up,90) + ent.PAType = self.Auto.PAType + ent.PAStationPath = tonumber(self.Auto.PAStationPath) + ent.PAStationID = tonumber(self.Auto.PAStationID) + ent.PAStationName = self.Auto.PAStationName or "N/A" + ent.PALastStation = self.Auto.PALastStation + ent.PAWrongPath = self.Auto.PAWrongPath + ent.PADeadlockStart = self.Auto.PADeadlockStart or 128 + ent.PADeadlockEnd = self.Auto.PADeadlockEnd or 512 + ent.PALineChange = self.Auto.PALineChange + ent.PALineChangeStationPath = self.Auto.PALineChangeStationPath + ent.PALineChangeStationID = self.Auto.PALineChangeStationID + ent.PALastStationName = self.Auto.PALastStationName + ent.PAStationRightDoors = self.Auto.PAStationRightDoors + ent.PAStationHorlift = self.Auto.PAStationHorlift + ent.PAStationHasSwtiches = self.Auto.PAStationHasSwtiches + ent:UpdateTrackPos(center,angle) + end + end + if not found then + ent:Spawn() + -- Add to undo + undo.Create("signalling") + undo.AddEntity(ent) + undo.SetPlayer(ply) + undo.Finish() + end + return ent + end +end + +function TOOL:LeftClick(trace) + if CLIENT then + return true + end + + --self.Signal = util.JSONToTable(self:GetClientInfo("signaldata"):replace("''","\"")) + --if not self.Signal then return end + local ply = self:GetOwner() + if (ply:IsValid()) and (not ply:IsAdmin()) then return false end + if not trace then return false end + if trace.Entity and trace.Entity:IsPlayer() then return false end + + local ent + if self.Type == 1 then + ent = self:SpawnSignal(ply,trace) + elseif self.Type == 2 then + ent = self:SpawnSign(ply,trace) + elseif self.Type == 3 then + ent = self:SpawnAutoPlate(ply,trace) + end + + return true +end + + +function TOOL:RightClick(trace) + if CLIENT then + return true + end + + local ply = self:GetOwner() + if (ply:IsValid()) and (not ply:IsAdmin()) then return false end + if not trace then return false end + if trace.Entity and trace.Entity:IsPlayer() then return false end + + local entlist = ents.FindInSphere(trace.HitPos,(self.Type == 3 and self.Auto.Type == 5) and 192 or 64) + for k,v in pairs(entlist) do + if v:GetClass() == "gmod_track_signal" and self.Type == 1 then + if IsValid(v) then SafeRemoveEntity(v) end + end + if v:GetClass() == "gmod_track_switch" then + if IsValid(v) then SafeRemoveEntity(v) end + end + if v:GetClass() == "gmod_track_signs" and self.Type == 2 then + if IsValid(v) then SafeRemoveEntity(v) end + end + if v:GetClass() == "gmod_track_autodrive_plate" and self.Type == 3 and self.Auto.Type == v.PlateType then + if IsValid(v) then SafeRemoveEntity(v) end + end + if v:GetClass() == "gmod_track_pa_marker" and self.Type == 3 and self.Auto.Type == 5 then + if IsValid(v) then SafeRemoveEntity(v) end + end + end + return true +end + +function TOOL:Reload(trace) + if CLIENT then return true end + --self.Signal = util.JSONToTable(self:GetClientInfo("signaldata"):replace("''","\"")) + + local ply = self:GetOwner() + --if not (ply:IsValid()) and (not ply:IsAdmin()) then return false end + if not trace then return false end + if trace.Entity and trace.Entity:IsPlayer() then return false end + local ent + if self.Type == 1 then + ent = self:SpawnSignal(ply,trace,2) + elseif self.Type == 2 then + ent = self:SpawnSign(ply,trace,2) + elseif self.Type == 3 then + ent = self:SpawnAutoPlate(ply,trace,2) + end + return true +end + +function TOOL:SendSettings() + if self.Type == 1 then + if not self.Signal then return end + RunConsoleCommand("signalling_signaldata",util.TableToJSON(self.Signal)) + net.Start "metrostroi-stool-signalling" + net.WriteUInt(0,8) + --net.WriteEntity(self) + net.WriteTable(self.Signal) + net.SendToServer() + + elseif self.Type == 2 then + if not self.Sign then return end + RunConsoleCommand("signalling_signdata",util.TableToJSON(self.Sign)) + net.Start "metrostroi-stool-signalling" + net.WriteUInt(1,8) + --net.WriteEntity(self) + net.WriteTable(self.Sign) + net.SendToServer() + elseif self.Type == 3 then + if not self.Auto then return end + RunConsoleCommand("signalling_autodata",util.TableToJSON(self.aUTO)) + net.Start "metrostroi-stool-signalling" + net.WriteUInt(2,8) + --net.WriteEntity(self) + net.WriteTable(self.Auto) + net.SendToServer() + end +end + +net.Receive("metrostroi-stool-signalling", function(_, ply) + local TOOL = LocalPlayer and LocalPlayer():GetTool("signalling") or ply:GetTool("signalling") + local typ = net.ReadUInt(8) + if typ == 2 then + TOOL.Auto = net.ReadTable() + if CLIENT then + RunConsoleCommand("signalling_signdata",util.TableToJSON(TOOL.Auto)) + NeedUpdate = true + end + elseif typ == 1 then + TOOL.Sign = net.ReadTable() + if CLIENT then + RunConsoleCommand("signalling_signdata",util.TableToJSON(TOOL.Sign)) + NeedUpdate = true + end + elseif typ == 0 then + TOOL.Signal = net.ReadTable() + if CLIENT then + RunConsoleCommand("signalling_signaldata",util.TableToJSON(TOOL.Signal)) + NeedUpdate = true + end + end + TOOL.Type = typ+1 +end) + +function TOOL:BuildCPanelCustom() + local tool = self + local CPanel = controlpanel.Get("signalling") + if not CPanel then return end + --("signalling_signaldata",util.TableToJSON(tool.Signal)) + --tool.Type = GetConVarNumber("signalling_type") or 1 + tool.RouteType = GetConVarNumber("signalling_routetype") or 1 + CPanel:ClearControls() + CPanel:SetPadding(0) + CPanel:SetSpacing(0) + CPanel:Dock( FILL ) + local VType = vgui.Create("DComboBox") + VType:ChooseOption(Types[tool.Type],tool.Type) + VType:SetColor(color_black) + for i = 1,#Types do + VType:AddChoice(Types[i]) + end + VType.OnSelect = function(_, index, name) + VType:SetValue(name) + tool.Type = index + tool:SendSettings() + tool:BuildCPanelCustom() + end + CPanel:AddItem(VType) + if tool.Type == 1 then + local VSType = vgui.Create("DComboBox") + VSType:ChooseOption(TypesOfSignal[tool.Signal.Type or 1],tool.Signal.Type or 1) + VSType:SetColor(color_black) + for i = 1,#TypesOfSignal do + VSType:AddChoice(TypesOfSignal[i]) + end + VSType.OnSelect = function(_, index, name) + VSType:SetValue(name) + tool.Signal.Type = index + tool:SendSettings() + end + CPanel:AddItem(VSType) + local VNameT,VNameN = CPanel:TextEntry("Name:") + VNameT:SetTooltip("Name. Letters or digits!\nFor example:IND2") + VNameT:SetValue(tool.Signal.Name or "") + VNameT:SetEnterAllowed(false) + function VNameT:OnChange() + local oldval = self:GetValue() + local pos = self:GetCaretPos() + local NewValue = "" + for i = 1,10 do + NewValue = NewValue..((oldval[i] or ""):upper():match("^[%u%d%s/]+") or "") + end + self:SetText(NewValue) + self:SetCaretPos(pos < #NewValue and pos or #NewValue) + end + function VNameT:OnLoseFocus() + tool.Signal.Name = self:GetValue() + tool:SendSettings() + end + if not tool.Signal.ARSOnly then + local VLensT,VLensN = CPanel:TextEntry("Lenses:") + VLensT:SetTooltip("G - Green, Y - Yellow, R - Red, B - Blue, W - White, M - Routing Pointer\nExample: GYG-RW-M") + VLensT:SetValue(tool.Signal.Lenses or "") + VLensT:SetEnterAllowed(false) + function VLensT:OnChange() + local NewValue = "" + for i = 1,#self:GetValue() do + NewValue = NewValue..((self:GetValue()[i] or ""):upper():match("[RYGWBM-]") or "") + end + local NewValueT = string.Explode("-",NewValue) + local maxval = tool.Signal.Type == 3 and 4 or 3 + for id,text in ipairs(NewValueT) do + if id > 4 then + for i = 5,#NewValueT do + table.remove(NewValueT,i) + end + break + end + if text:find("M") then + if text[1] == "M" then + NewValueT[id] = "M" + else + NewValueT[id] = text:gsub("M","") + id = id + 1 + NewValueT[id] = "M" + end + for i = id+1,#NewValueT do + table.remove(NewValueT, i) + end + break + end + text = text:match("[RYGWB]+") or "" + --[[local WFind = id==3 and text:find("W") or nil + --print(MFind,id) + if WFind then + if text:find("M") then + NewValueT[#NewValueT+1] = "M" + end + + NewValueT[id] = "W" + else]] + NewValueT[id] = text:sub(1,maxval) + if #text > maxval then + NewValueT[#NewValueT+1] = text:sub(maxval+1,#text) + end + --end + --[[ + if MID > 0 then + for i = MID,#NewValueT do + table.remove(NewValueT,i) + end + break + end]] + end + local NewValue = table.concat(NewValueT,"-") + self:SetText(NewValue) + self:SetCaretPos(#NewValue) + end + function VLensT:OnLoseFocus() + tool.Signal.Lenses = self:GetValue() + tool:SendSettings() + end + end + if tool.Signal.Type == 1 then + local VRoutT,VRoutN = CPanel:TextEntry("Custom route number:") + VRoutT:SetTooltip("Custom routte number. Can be empty. For example:12WK") + VRoutT:SetValue(tool.Signal.RouteNumberSetup or "") + VRoutT:SetEnterAllowed(false) + function VRoutT:OnChange() + local oldval = self:GetValue() + local NewValue = "" + for i = 1,#oldval do + NewValue = NewValue..((oldval[i] or ""):upper():match("[1-4DWKFLRX]+") or "") + end + local oldpos = self:GetCaretPos() + self:SetText(NewValue:sub(1,5)) + self:SetCaretPos(math.min(5,oldpos)) + end + function VRoutT:OnLoseFocus() + tool.Signal.RouteNumberSetup = self:GetValue() + tool:SendSettings() + end + end + local VLeftC = CPanel:CheckBox("Left side") + VLeftC:SetTooltip("Left side") + VLeftC:SetValue(tool.Signal.Left or false) + function VLeftC:OnChange() + tool.Signal.Left = self:GetChecked() + tool:SendSettings() + end + local VDoubleC = CPanel:CheckBox("Double side") + if tool.Signal.Double then + local VDoubleLC = CPanel:CheckBox("Double light") + VDoubleLC:SetTooltip("DoubleL light") + VDoubleLC:SetValue(tool.Signal.DoubleL or false) + function VDoubleLC:OnChange() + tool.Signal.DoubleL = self:GetChecked() and tool.Signal.Double + self:SetChecked(tool.Signal.DoubleL) + tool:SendSettings() + end + end + VDoubleC:SetTooltip("Double side") + VDoubleC:SetValue(tool.Signal.Double or false) + function VDoubleC:OnChange() + tool.Signal.Double = self:GetChecked() + tool.Signal.DoubleL = tool.Signal.DoubleL and self:GetChecked() + tool:BuildCPanelCustom() + --if tool.Signal.Double then VDoubleLC:SetChecked(tool.Signal.DoubleL and tool.Signal.Double) end + tool:SendSettings() + end + local VRouT,VRouN = CPanel:TextEntry("Route number:") + VRouT:SetTooltip("Route number. Can be empty. One digit or D.\nFor example:D") + VRouT:SetValue(tool.Signal.RouteNumber or "") + VRouT:SetEnterAllowed(false) + function VRouT:OnChange() + local oldval = self:GetValue() + local NewValue = "" + for i = 1,#oldval do + if #NewValue > 0 then break end + NewValue = NewValue..((oldval[i] or ""):upper():match(tool.Signal.Type == 1 and "[%dDFLR]" or "[%dD]") or "") + end + self:SetText(NewValue) + self:SetCaretPos(0) + end + function VRouT:OnLoseFocus() + tool.Signal.RouteNumber = self:GetValue() + tool:SendSettings() + end + local VIsoSC = CPanel:CheckBox("Isolating switches") + VIsoSC:SetTooltip("Is tool.Signal isolate switch signals") + VIsoSC:SetValue(tool.Signal.IsolateSwitches or false) + function VIsoSC:OnChange() + tool.Signal.IsolateSwitches = self:GetChecked() + tool:SendSettings() + end + local VAppC = CPanel:CheckBox("325Hz on 0") + VAppC:SetTooltip("Is tool.Signal will be issuse 325Hz(for PA-KSD) on zero?") + VAppC:SetValue(tool.Signal.Approve0 or false) + function VAppC:OnChange() + tool.Signal.Approve0 = self:GetChecked() + tool:SendSettings() + end + local VAuStC = CPanel:CheckBox("Autostop") + VAuStC:SetTooltip("Is autostop present or no?") + if tool.Signal.NonAutoStop ~= nil then + VAuStC:SetValue(not tool.Signal.NonAutoStop) + else + VAuStC:SetValue(true) + end + function VAuStC:OnChange() + tool.Signal.NonAutoStop = not self:GetChecked() + tool:SendSettings() + end + local VDepC = CPanel:CheckBox("2/6") + VDepC:SetTooltip("Is Signal produces 2 freqencies or not?") + VDepC:SetValue(tool.Signal.TwoToSix or false) + function VDepC:OnChange() + tool.Signal.TwoToSix = self:GetChecked() + tool:SendSettings() + end + local VARSOC = CPanel:CheckBox("ARS Only") + VARSOC:SetTooltip("ARS Box") + VARSOC:SetValue(tool.Signal.ARSOnly or false) + function VARSOC:OnChange() + tool.Signal.ARSOnly = self:GetChecked() + tool:SendSettings() + tool:BuildCPanelCustom() + end + local VPassOccC = CPanel:CheckBox("Pass occupation singal") + VPassOccC:SetTooltip("Pass occupation singal") + VPassOccC:SetValue(tool.Signal.PassOcc or false) + function VPassOccC:OnChange() + tool.Signal.PassOcc = self:GetChecked() + tool:SendSettings() + --tool:BuildCPanelCustom() + end + + for i = 1,(tool.Signal.Routes and #tool.Signal.Routes or 0) do + local CollCat = vgui.Create("DForm") + local rou = tool.Signal.Routes[i].Manual and 2 or tool.Signal.Routes[i].Repeater and 3 or tool.Signal.Routes[i].Emer and 4 or 1 + CollCat:SetLabel(RouteTypes[rou]) + CollCat:SetExpanded(1) + local VTypeOfRouteI = vgui.Create("DComboBox") + --VType:SetValue("Choose tool.Type") + VTypeOfRouteI:ChooseOption(RouteTypes[rou],rou) + for i1 = 1,#RouteTypes do + VTypeOfRouteI:AddChoice(RouteTypes[i1]) + end + VTypeOfRouteI.OnSelect = function(_, index, name) + VTypeOfRouteI:SetValue(name) + tool.Signal.Routes[i].Manual = index == 2 + tool.Signal.Routes[i].Repeater = index == 3 + tool.Signal.Routes[i].Emer = index == 4 + tool:SendSettings() + self:BuildCPanelCustom() + end + CollCat:AddItem(VTypeOfRouteI) + local VRNT,VRNN = CollCat:TextEntry("Route name:") + VRNT:SetText(tool.Signal.Routes[i].RouteName or "") + VRNT:SetTooltip("Route name.\nIt uses for !sopen or !sclose") + function VRNT:OnLoseFocus() + tool.Signal.Routes[i].RouteName = self:GetValue() + tool:SendSettings() + end + local VNexT,VNexN = CollCat:TextEntry("Next Signal:") + VNexT:SetText(tool.Signal.Routes[i].NextSignal or "") + VNexT:SetTooltip("Next Signal. Name of the next Signal.\nFor example:[113]IND2") + function VNexT:OnChange() + local oldval = self:GetValue() + local pos = self:GetCaretPos() + local NewValue = "" + for i = 1,10 do + NewValue = NewValue..((oldval[i] or ""):upper():match("[%u%d%s%*/]") or "") + end + self:SetText(NewValue) + self:SetCaretPos(pos < #NewValue and pos or #NewValue) + end + function VNexT:OnLoseFocus() + tool.Signal.Routes[i].NextSignal = self:GetValue() + tool:SendSettings() + end + if not tool.Signal.ARSOnly then + local VLighT,VLighN = CollCat:TextEntry("Lights:") + VLighT:SetText(tool.Signal.Routes[i].Lights or "") + VLighT:SetTooltip("Numbers of lenses.\nFor example: for RGY:1-13-3-32-2 (R-RY-Y-YG-G)") + function VLighT:OnLoseFocus() + tool.Signal.Routes[i].Lights = self:GetValue() + tool:SendSettings() + end + end + if not tool.Signal.Routes[i].Repeater then + local VARST,VARSN = CollCat:TextEntry("ARSCodes:") + VARST:SetText(tool.Signal.Routes[i].ARSCodes or "") + VARST:SetTooltip("ARS Codes:0 - 0, 1 - No frequency, 2 - Absolute stop, 4 - 40, 6 - 60, 7 - 70, 8 - 80\nFor example: 004678(0-0-40-60-70-80)") + function VARST:OnLoseFocus() + tool.Signal.Routes[i].ARSCodes = self:GetValue() + tool:SendSettings() + end + end + local VSwiT,VSwiN = CollCat:TextEntry("Switches:") + VSwiT:SetText(tool.Signal.Routes[i].Switches or "") + VSwiT:SetTooltip("Switches. Next Switches + State. Can be empty(if no switches to next tool.Signal).\nFor example: 112+,114-,116+") + function VSwiT:OnLoseFocus() + tool.Signal.Routes[i].Switches = self:GetValue() + tool:SendSettings() + end + local VEnRouC = CollCat:CheckBox("Enable route number") + VEnRouC:SetTooltip("Enable route number(when disabled route number enables only with invitation signal)") + VEnRouC:SetValue(tool.Signal.Routes[i].EnRou or false) + function VEnRouC:OnChange() + tool.Signal.Routes[i].EnRou = self:GetChecked() + tool:SendSettings() + --tool:BuildCPanelCustom() + end + local VRemoveR = CollCat:Button("Remove route") + VRemoveR.DoClick = function() + table.remove(tool.Signal.Routes,i) + tool:SendSettings() + self:BuildCPanelCustom() + end + CPanel:AddItem(CollCat) + end + CPanel:AddItem(VAddPanel) + local VTypeOfRoute = vgui.Create("DComboBox") + --VType:SetValue("Choose tool.Type") + VTypeOfRoute:ChooseOption(RouteTypes[tool.RouteType],tool.RouteType) + VTypeOfRoute:SetColor(color_black) + for i = 1,#RouteTypes do + VTypeOfRoute:AddChoice(RouteTypes[i]) + end + VTypeOfRoute.OnSelect = function(_, index, name) + VTypeOfRoute:SetValue(name) + tool.RouteType = index + end + CPanel:AddItem(VTypeOfRoute) + local VAddR = CPanel:Button("Add route") + VAddR.DoClick = function() + if not tool.Signal.Routes then tool.Signal.Routes = {} end + table.insert(tool.Signal.Routes,{Manual = tool.RouteType==2, Repeater = tool.RouteType == 3, Emer = tool.RouteType == 4, RouteName = ""}) + tool:SendSettings() + self:BuildCPanelCustom() + end + elseif tool.Type == 2 then + --local VNotF = vgui.Create("DLabel") VNotF:SetText("Not Finished yet!!") + local VSType = vgui.Create("DComboBox") + VSType:ChooseOption(TypesOfSign[tool.Sign.Type or 1],tool.Sign.Type or 1) + VSType:SetColor(color_black) + for i = 1,#TypesOfSign do + VSType:AddChoice(TypesOfSign[i]) + end + VSType.OnSelect = function(_, index, name) + VSType:SetValue(name) + tool.Sign.Type = index + tool:SendSettings() + end + CPanel:AddItem(VSType) + local VYOffT = CPanel:NumSlider("Y Offset:",nil,-100,100,0) + VYOffT:SetValue(tool.Sign.YOffset or 0) + VYOffT.OnValueChanged = function(num) + tool.Sign.YOffset = VYOffT:GetValue() + tool:SendSettings() + end + local VZOffT = CPanel:NumSlider("Z Offset:",nil,-50,50,0) + VZOffT:SetValue(tool.Sign.ZOffset or 0) + VZOffT.OnValueChanged = function(num) + tool.Sign.ZOffset = VZOffT:GetValue() + tool:SendSettings() + end + local VLeftOC = CPanel:CheckBox("Left side(if can be left-side)") + VLeftOC:SetTooltip("Left side") + VLeftOC:SetValue(tool.Sign.Left or false) + function VLeftOC:OnChange() + tool.Sign.Left = self:GetChecked() + tool:SendSettings() + end + elseif tool.Type == 3 then + --local VNotF = vgui.Create("DLabel") VNotF:SetText("Not Finished yet!!") + local VAType = vgui.Create("DComboBox") + CPanel:AddItem(VAType) + VAType:SetColor(color_black) + for i = 1,#TypesOfAuto do + VAType:AddChoice(TypesOfAuto[i]) + end + VAType:ChooseOptionID(tool.Auto.Type or 1) + VAType.OnSelect = function(_, index, name) + VAType:SetValue(name) + tool.Auto.Type = index + tool:SendSettings() + tool:BuildCPanelCustom() + end + if tool.Auto.Type == METROSTROI_ACOIL_DOOR then + local VRightOC = CPanel:CheckBox("Right doors") + VRightOC:SetTooltip("Right doors") + VRightOC:SetValue(tool.Auto.Right or false) + function VRightOC:OnChange() + tool.Auto.Right = self:GetChecked() + tool:SendSettings() + end + end + if tool.Auto.Type == METROSTROI_LSENSOR or tool.Auto.Type == METROSTROI_UPPSSENSOR or tool.Auto.Type == METROSTROI_SBPPSENSOR then + local VLXpT = CPanel:NumSlider("X:",nil,0,200,2) + VLXpT:SetValue(tool.Auto.LXp or 0) + VLXpT.OnValueChanged = function(num) + tool.Auto.LXp = VLXpT:GetValue() + tool:SendSettings() + end + end + if tool.Auto.Type ~= 5 then + local VLYpT = CPanel:NumSlider("Y:",nil,-10,10,2) + VLYpT:SetValue(tool.Auto.LYp or 0) + VLYpT.OnValueChanged = function(num) + tool.Auto.LYp = VLYpT:GetValue() + tool:SendSettings() + end + local VLZpT = CPanel:NumSlider("Z:",nil,-10,10,2) + VLZpT:SetValue(tool.Auto.LZp or 0) + VLZpT.OnValueChanged = function(num) + tool.Auto.LZp = VLZpT:GetValue() + tool:SendSettings() + end + end + if tool.Auto.Type == 5 then + local VAPAType = vgui.Create("DComboBox") + CPanel:AddItem(VAPAType) + VAPAType:SetColor(color_black) + VAPAType:AddChoice("OPV") + VAPAType:ChooseOptionID(tool.Auto.PAType or 1) + VAPAType.OnSelect = function(_, index, name) + VAPAType:SetValue(name) + tool.Auto.PAType = index + tool:SendSettings() + tool:BuildCPanelCustom() + end + if tool.Auto.PAType == 1 then + local SPath = CPanel:TextEntry("Station path:") + SPath:SetTooltip("Station path") + SPath:SetValue(tool.Auto.PAStationPath or "") + SPath:SetEnterAllowed(false) + function SPath:OnChange() + local oldval = self:GetValue() + local NewValue = "" + for i = 1,#oldval do + if #NewValue > 0 then break end + NewValue = NewValue..((oldval[i] or ""):upper():match("[%d]") or "") + end + self:SetText(NewValue) + self:SetCaretPos(0) + end + function SPath:OnLoseFocus() + tool.Auto.PAStationPath = self:GetValue() + tool:SendSettings() + end + local SID = CPanel:TextEntry("Station ID:") + SID:SetTooltip("Station index") + SID:SetValue(tool.Auto.PAStationID or "") + SID:SetEnterAllowed(false) + function SID:OnChange() + local oldval = self:GetValue() + local NewValue = "" + for i = 1,#oldval do + NewValue = NewValue..((oldval[i] or ""):upper():match("[%d]+") or "") + end + local oldpos = self:GetCaretPos() + self:SetText(NewValue) + self:SetCaretPos(math.min(#NewValue,oldpos)) + end + function SID:OnLoseFocus() + tool.Auto.PAStationID = self:GetValue() + tool:SendSettings() + end + local SLast = CPanel:CheckBox("Last station") + SLast:SetTooltip("Last station") + SLast:SetValue(tool.Auto.PALastStation or false) + function SLast:OnChange() + tool.Auto.PALastStation = self:GetChecked() + tool:SendSettings() + tool:BuildCPanelCustom() + end + if tool.Auto.PALastStation then + local SLWrongPath = CPanel:CheckBox("In wrong path") + SLWrongPath:SetValue(tool.Auto.PAWrongPath or false) + function SLWrongPath:OnChange() + tool.Auto.PAWrongPath = self:GetChecked() + tool:SendSettings() + end + local SLDStart = CPanel:NumSlider("Distance to\ndeadlock start:",nil,0,1024,0) + SLDStart:SetValue(tool.Auto.PADeadlockStart or 128) + SLDStart.OnValueChanged = function(num) + tool.Auto.PADeadlockStart = SLDStart:GetValue() + tool:SendSettings() + end + local SLDEnd = CPanel:NumSlider("Distance to\ndeadlock end:",nil,0,1024,0) + SLDEnd:SetValue(tool.Auto.PADeadlockEnd or 512) + SLDEnd.OnValueChanged = function(num) + tool.Auto.PADeadlockEnd = SLDEnd:GetValue() + tool:SendSettings() + end + local SLLChange = CPanel:CheckBox("Line change") + SLLChange:SetValue(tool.Auto.PALineChange or false) + function SLLChange:OnChange() + tool.Auto.PALineChange = self:GetChecked() + tool:SendSettings() + tool:BuildCPanelCustom() + end + if tool.Auto.PALineChange then + local SLLCLine = CPanel:TextEntry("Line change\nstation path:") + SLLCLine:SetValue(tool.Auto.PALineChangeStationPath or "") + SLLCLine:SetEnterAllowed(false) + function SLLCLine:OnChange() + local oldval = self:GetValue() + local NewValue = "" + for i = 1,#oldval do + if #NewValue > 0 then break end + NewValue = NewValue..((oldval[i] or ""):upper():match("[%d]") or "") + end + self:SetText(NewValue) + self:SetCaretPos(0) + end + function SLLCLine:OnLoseFocus() + tool.Auto.PALineChangeStationPath = self:GetValue() + tool:SendSettings() + end + local SLLCID = CPanel:TextEntry("Line change\nstation ID:") + SLLCID:SetTooltip("Station index") + SLLCID:SetValue(tool.Auto.PALineChangeStationID or "") + SLLCID:SetEnterAllowed(false) + function SLLCID:OnChange() + local oldval = self:GetValue() + local NewValue = "" + for i = 1,#oldval do + NewValue = NewValue..((oldval[i] or ""):upper():match("[%d]+") or "") + end + local oldpos = self:GetCaretPos() + self:SetText(NewValue) + self:SetCaretPos(math.min(#NewValue,oldpos)) + end + function SLLCID:OnLoseFocus() + tool.Auto.PALineChangeStationID = self:GetValue() + tool:SendSettings() + end + end + end + local SName = CPanel:TextEntry("Station name:") + SName:SetTooltip("Station name") + SName:SetValue(tool.Auto.PAStationName or "") + SName:SetEnterAllowed(false) + function SName:OnLoseFocus() + tool.Auto.PAStationName = self:GetValue() + tool:SendSettings() + end + if tool.Auto.PALastStation then + local SLName = CPanel:TextEntry("Last station name:") + SLName:SetTooltip("Last station name") + SLName:SetValue(tool.Auto.PALastStationName or "") + SLName:SetEnterAllowed(false) + function SLName:OnLoseFocus() + tool.Auto.PALastStationName = self:GetValue() + tool:SendSettings() + end + end + local SHorlift = CPanel:CheckBox("Has switches:") + SHorlift:SetTooltip("Has switches") + SHorlift:SetValue(tool.Auto.PAStationHasSwtiches or false) + function SHorlift:OnChange() + tool.Auto.PAStationHasSwtiches = self:GetChecked() + tool:SendSettings() + end + local SRDoors = CPanel:CheckBox("Rights doors") + SRDoors:SetTooltip("Rights doors") + SRDoors:SetValue(tool.Auto.PAStationRightDoors or false) + function SRDoors:OnChange() + tool.Auto.PAStationRightDoors = self:GetChecked() + tool:SendSettings() + end + local SHorlift = CPanel:CheckBox("Horlift") + SHorlift:SetTooltip("Horlift") + SHorlift:SetValue(tool.Auto.PAStationHorlift or false) + function SHorlift:OnChange() + tool.Auto.PAStationHorlift = self:GetChecked() + tool:SendSettings() + end + end + end + if tool.Auto.Type == METROSTROI_SBPPSENSOR then + local VASBPPType = vgui.Create("DComboBox") + CPanel:AddItem(VASBPPType) + VASBPPType:SetColor(color_black) + VASBPPType:AddChoice("ST1") + VASBPPType:AddChoice("ST2") + VASBPPType:AddChoice("OPV") + VASBPPType:AddChoice("OD") + VASBPPType:AddChoice("X2") + VASBPPType:AddChoice("X3") + VASBPPType:AddChoice("TP") + VASBPPType:ChooseOptionID(tool.Auto.SBPPType or 1) + VASBPPType.OnSelect = function(_, index, name) + VASBPPType:SetValue(name) + tool.Auto.SBPPType = index + tool:SendSettings() + tool:BuildCPanelCustom() + end + local SBPPType = tool.Auto.SBPPType or 1 + if SBPPType <= 3 then + local SDeadlock = CPanel:CheckBox("Deadlock") + SDeadlock:SetTooltip("Deadlock") + SDeadlock:SetValue(tool.Auto.SBPPDeadlock or false) + function SDeadlock:OnChange() + tool.Auto.SBPPDeadlock = self:GetChecked() + tool:SendSettings() + tool:BuildCPanelCustom() + end + end + if SBPPType == 1 then + local SRPos = CPanel:CheckBox("Rights pos") + SRPos:SetTooltip("Rights pos") + SRPos:SetValue(tool.Auto.LRightP or false) + function SRPos:OnChange() + tool.Auto.LRightP = self:GetChecked() + tool:SendSettings() + end + local SRInvX = CPanel:CheckBox("Invert X") + SRInvX:SetTooltip("Invert X") + SRInvX:SetValue(tool.Auto.LInvX or false) + function SRInvX:OnChange() + tool.Auto.LInvX = self:GetChecked() + tool:SendSettings() + end + end + if 2<= SBPPType and SBPPType <= 3 and not tool.Auto.SBPPDeadlock then + local SPath = CPanel:TextEntry("Station path:") + SPath:SetTooltip("Station path") + SPath:SetValue(tool.Auto.SBPPStationPath or "") + SPath:SetEnterAllowed(false) + function SPath:OnChange() + local oldval = self:GetValue() + local NewValue = "" + for i = 1,#oldval do + if #NewValue > 0 then break end + NewValue = NewValue..((oldval[i] or ""):upper():match("[%d]") or "") + end + self:SetText(NewValue) + self:SetCaretPos(0) + end + function SPath:OnLoseFocus() + tool.Auto.SBPPStationPath = self:GetValue() + tool:SendSettings() + end + local SID = CPanel:TextEntry("Station ID:") + SID:SetTooltip("Station index") + SID:SetValue(tool.Auto.SBPPStationID or "") + SID:SetEnterAllowed(false) + function SID:OnChange() + local oldval = self:GetValue() + local NewValue = "" + for i = 1,#oldval do + NewValue = NewValue..((oldval[i] or ""):upper():match("[%d]+") or "") + end + local oldpos = self:GetCaretPos() + self:SetText(NewValue) + self:SetCaretPos(math.min(#NewValue,oldpos)) + end + function SID:OnLoseFocus() + tool.Auto.SBPPStationID = self:GetValue() + tool:SendSettings() + end + end + if SBPPType == 3 then + local SRDoors = CPanel:CheckBox("Rights doors") + SRDoors:SetTooltip("Rights doors") + SRDoors:SetValue(tool.Auto.SBPPRightDoors or false) + function SRDoors:OnChange() + tool.Auto.SBPPRightDoors = self:GetChecked() + tool:SendSettings() + end + local SDriveMode = vgui.Create("DComboBox") + CPanel:AddItem(SDriveMode) + SDriveMode:SetColor(color_black) + SDriveMode:AddChoice("None") + SDriveMode:AddChoice("X2") + SDriveMode:AddChoice("X3") + SDriveMode:ChooseOptionID(tool.Auto.SBPPDriveMode or 1) + SDriveMode.OnSelect = function(_, index, name) + SDriveMode:SetValue(name) + tool.Auto.SBPPDriveMode = index + tool:SendSettings() + end + end + if SBPPType==7 then + local SRK = CPanel:NumSlider("RK Pos:",nil,1,18,0) + SRK:SetValue(tool.Auto.SBPPRK or 1) + SRK.OnValueChanged = function(num) + tool.Auto.SBPPRK = SRK:GetValue() + tool:SendSettings() + end + end + if SBPPType == 3 or SBPPType>=5 then + local STime = CPanel:NumSlider("Work time:",nil,0,120,2) + STime:SetValue(tool.Auto.SBPPWTime or 0) + STime.OnValueChanged = function(num) + tool.Auto.SBPPWTime = STime:GetValue() + tool:SendSettings() + end + end + --[[ local SPath = CPanel:TextEntry("Station path:") + SPath:SetTooltip("Station path") + SPath:SetValue(tool.Auto.PAStationPath or "") + SPath:SetEnterAllowed(false) + function SPath:OnChange() + local oldval = self:GetValue() + local NewValue = "" + for i = 1,#oldval do + if #NewValue > 0 then break end + NewValue = NewValue..((oldval[i] or ""):upper():match("[%d]") or "") + end + self:SetText(NewValue) + self:SetCaretPos(0) + end + function SPath:OnLoseFocus() + tool.Auto.PAStationPath = self:GetValue() + tool:SendSettings() + end + local SID = CPanel:TextEntry("Station ID:") + SID:SetTooltip("Station index") + SID:SetValue(tool.Auto.PAStationID or "") + SID:SetEnterAllowed(false) + function SID:OnChange() + local oldval = self:GetValue() + local NewValue = "" + for i = 1,#oldval do + NewValue = NewValue..((oldval[i] or ""):upper():match("[%d]+") or "") + end + local oldpos = self:GetCaretPos() + self:SetText(NewValue) + self:SetCaretPos(math.min(#NewValue,oldpos)) + end + function SID:OnLoseFocus() + tool.Auto.PAStationID = self:GetValue() + tool:SendSettings() + end + local SLast = CPanel:CheckBox("Last station") + SLast:SetTooltip("Last station") + SLast:SetValue(tool.Auto.PALastStation or false) + function SLast:OnChange() + tool.Auto.PALastStation = self:GetChecked() + tool:SendSettings() + tool:BuildCPanelCustom() + end + if tool.Auto.PALastStation then + local SLWrongPath = CPanel:CheckBox("In wrong path") + SLWrongPath:SetValue(tool.Auto.PAWrongPath or false) + function SLWrongPath:OnChange() + tool.Auto.PAWrongPath = self:GetChecked() + tool:SendSettings() + end + local SLDStart = CPanel:NumSlider("Distance to\ndeadlock start:",nil,0,1024,0) + SLDStart:SetValue(tool.Auto.PADeadlockStart or 128) + SLDStart.OnValueChanged = function(num) + tool.Auto.PADeadlockStart = SLDStart:GetValue() + tool:SendSettings() + end + local SLDEnd = CPanel:NumSlider("Distance to\ndeadlock end:",nil,0,1024,0) + SLDEnd:SetValue(tool.Auto.PADeadlockEnd or 512) + SLDEnd.OnValueChanged = function(num) + tool.Auto.PADeadlockEnd = SLDEnd:GetValue() + tool:SendSettings() + end + local SLLChange = CPanel:CheckBox("Line change") + SLLChange:SetValue(tool.Auto.PALineChange or false) + function SLLChange:OnChange() + tool.Auto.PALineChange = self:GetChecked() + tool:SendSettings() + tool:BuildCPanelCustom() + end + if tool.Auto.PALineChange then + local SLLCLine = CPanel:TextEntry("Line change\nstation path:") + SLLCLine:SetValue(tool.Auto.PALineChangeStationPath or "") + SLLCLine:SetEnterAllowed(false) + function SLLCLine:OnChange() + local oldval = self:GetValue() + local NewValue = "" + for i = 1,#oldval do + if #NewValue > 0 then break end + NewValue = NewValue..((oldval[i] or ""):upper():match("[%d]") or "") + end + self:SetText(NewValue) + self:SetCaretPos(0) + end + function SLLCLine:OnLoseFocus() + tool.Auto.PALineChangeStationPath = self:GetValue() + tool:SendSettings() + end + local SLLCID = CPanel:TextEntry("Line change\nstation ID:") + SLLCID:SetTooltip("Station index") + SLLCID:SetValue(tool.Auto.PALineChangeStationID or "") + SLLCID:SetEnterAllowed(false) + function SLLCID:OnChange() + local oldval = self:GetValue() + local NewValue = "" + for i = 1,#oldval do + NewValue = NewValue..((oldval[i] or ""):upper():match("[%d]+") or "") + end + local oldpos = self:GetCaretPos() + self:SetText(NewValue) + self:SetCaretPos(math.min(#NewValue,oldpos)) + end + function SLLCID:OnLoseFocus() + tool.Auto.PALineChangeStationID = self:GetValue() + tool:SendSettings() + end + end + end + local SName = CPanel:TextEntry("Station name:") + SName:SetTooltip("Station name") + SName:SetValue(tool.Auto.PAStationName or "") + SName:SetEnterAllowed(false) + function SName:OnLoseFocus() + tool.Auto.PAStationName = self:GetValue() + tool:SendSettings() + end + if tool.Auto.PALastStation then + local SLName = CPanel:TextEntry("Last station name:") + SLName:SetTooltip("Last station name") + SLName:SetValue(tool.Auto.PALastStationName or "") + SLName:SetEnterAllowed(false) + function SLName:OnLoseFocus() + tool.Auto.PALastStationName = self:GetValue() + tool:SendSettings() + end + end + local SHorlift = CPanel:CheckBox("Has switches:") + SHorlift:SetTooltip("Has switches") + SHorlift:SetValue(tool.Auto.PAStationHasSwtiches or false) + function SHorlift:OnChange() + tool.Auto.PAStationHasSwtiches = self:GetChecked() + tool:SendSettings() + end + local SRDoors = CPanel:CheckBox("Rights doors") + SRDoors:SetTooltip("Rights doors") + SRDoors:SetValue(tool.Auto.PAStationRightDoors or false) + function SRDoors:OnChange() + tool.Auto.PAStationRightDoors = self:GetChecked() + tool:SendSettings() + end + local SHorlift = CPanel:CheckBox("Horlift") + SHorlift:SetTooltip("Horlift") + SHorlift:SetValue(tool.Auto.PAStationHorlift or false) + function SHorlift:OnChange() + tool.Auto.PAStationHorlift = self:GetChecked() + tool:SendSettings() + end + end--]] + end + if tool.Auto.Type == METROSTROI_ACOIL_DRIVE then + local VRightOC = CPanel:CheckBox("Right") + VRightOC:SetTooltip("Right") + VRightOC:SetValue(tool.Auto.Right or false) + function VRightOC:OnChange() + tool.Auto.Right = self:GetChecked() + tool:SendSettings() + end + local VADist = vgui.Create("DComboBox") + CPanel:AddItem(VADist) + VADist:SetColor(color_black) + VADist:AddChoice("5 m") + VADist:AddChoice("20 m") + VADist:AddChoice("50 m") + VADist:ChooseOptionID(tool.Auto.Dist or 1) + VADist.OnSelect = function(_, index, name) + VADist:SetValue(name) + tool.Auto.Dist = index + tool:SendSettings() + end + local VAMode = vgui.Create("DComboBox") + CPanel:AddItem(VAMode) + VAMode:SetColor(color_black) + VAMode:AddChoice("X-2") + VAMode:AddChoice("X-3") + VAMode:AddChoice("X-2 Station") + VAMode:AddChoice("X-3 Station") + VAMode:AddChoice("0") + VAMode:AddChoice("0 Regulated") + VAMode:AddChoice("T") + --VAMode:AddChoice("T-1a") + VAMode:ChooseOptionID(tool.Auto.Mode or 1) + VAMode.OnSelect = function(_, index, name) + VAMode:SetValue(name) + tool.Auto.Mode = index + tool:SendSettings() + tool:BuildCPanelCustom() + end + if tool.Auto.Mode == 3 or tool.Auto.Mode == 4 then + local SID,VSIDN = CPanel:TextEntry("Station ID:") + SID:SetTooltip("Station index") + SID:SetValue(tool.Auto.StationID or "") + SID:SetEnterAllowed(false) + function SID:OnChange() + local oldval = self:GetValue() + local NewValue = "" + for i = 1,#oldval do + NewValue = NewValue..((oldval[i] or ""):upper():match("[%d]+") or "") + end + local oldpos = self:GetCaretPos() + self:SetText(NewValue) + self:SetCaretPos(math.min(#NewValue,oldpos)) + end + function SID:OnLoseFocus() + tool.Auto.StationID = self:GetValue() + tool:SendSettings() + end + local SPath,VSPathN = CPanel:TextEntry("Station path:") + SPath:SetTooltip("Station path") + SPath:SetValue(tool.Auto.StationPath or "") + SPath:SetEnterAllowed(false) + function SPath:OnChange() + local oldval = self:GetValue() + local NewValue = "" + for i = 1,#oldval do + if #NewValue > 0 then break end + NewValue = NewValue..((oldval[i] or ""):upper():match("[%d]") or "") + end + self:SetText(NewValue) + self:SetCaretPos(0) + end + function SPath:OnLoseFocus() + tool.Auto.StationPath = self:GetValue() + tool:SendSettings() + end + end + end + if tool.Auto.Type == METROSTROI_UPPSSENSOR then + local VRollT = CPanel:NumSlider("Roll:",nil,-180,180,0) + VRollT:SetValue(tool.Auto.Roll or 0) + VRollT.OnValueChanged = function(num) + tool.Auto.Roll = VRollT:GetValue() + tool:SendSettings() + end + end + end +end + +TOOL.NotBuilt = true +function TOOL:Think() + if CLIENT and (self.NotBuilt or NeedUpdate) then + self.Signal = self.Signal or util.JSONToTable(string.Replace(GetConVarString("signalling_signaldata"),"'","\"")) or {} + self.Sign = self.Sign or util.JSONToTable(string.Replace(GetConVarString("signalling_signdata"),"'","\"")) or {} + self.Auto = self.Auto or util.JSONToTable(string.Replace(GetConVarString("signalling_autodata"),"'","\"")) or {} + self:SendSettings() + self:BuildCPanelCustom() + self.NotBuilt = nil + NeedUpdate = nil + end +end +function TOOL.BuildCPanel(panel) + panel:AddControl("Header", { Text = "#Tool.signalling.name", Description = "#Tool.signalling.desc" }) + if not self then return end + self:BuildCPanelCustom() +end diff --git a/lua/weapons/gmod_tool/stools/switch.lua b/lua/weapons/gmod_tool/stools/switch.lua new file mode 100644 index 0000000..6bc25ca --- /dev/null +++ b/lua/weapons/gmod_tool/stools/switch.lua @@ -0,0 +1,107 @@ +TOOL.Category = "Metro" +TOOL.Name = "Switch Tool" +TOOL.Command = nil +TOOL.ConfigName = "" +if SERVER then util.AddNetworkString "metrostroi-stool-switch" end +TOOL.ClientConVar["name"] = "" +TOOL.ClientConVar["channel"] = 1 +TOOL.ClientConVar["locked"] = 0 +TOOL.ClientConVar["controllable"] = 1 +TOOL.ClientConVar["invert"] = 0 +if CLIENT then + language.Add("Tool.switch.name", "Switch Tool") + language.Add("Tool.switch.desc", "Sets switch tool channel") + language.Add("Tool.switch.0", "Primary: Set channel 1\nSecondary: Set channel 2\nReload: Lock switch") +end + +function TOOL:LeftClick(trace) + if CLIENT then return true end + + local ply = self:GetOwner() + if (ply:IsValid()) and (not ply:IsAdmin()) then return false end + if not trace then return false end + if trace.Entity and trace.Entity:IsPlayer() then return false end + + local entlist = ents.FindInSphere(trace.HitPos,64) + for k,v in pairs(entlist) do + if v:GetClass() == "gmod_track_switch" then + v.Name = self:GetClientInfo("name") ~= "" and self:GetClientInfo("name") or nil + v:SetChannel(self:GetClientNumber("channel")) + v.LockedSignal = self:GetClientNumber("lock") == 1 and self:GetClientNumber("channel") or nil + v.NotChangePos = self:GetClientNumber("controllable") == 0 + v.Invertred = self:GetClientNumber("invert") == 1 + print(Format("Name:%s, Channel:%d, It's %slocked, %scontrllable and %sinverted",self:GetClientInfo("name") ~= "" and self:GetClientInfo("name") or "track index",self:GetClientNumber("channel"),self:GetClientNumber("lock") == 1 and "not " or "",self:GetClientNumber("controllable") == 0 and "not " or "",self:GetClientNumber("invert") == 0 and "not " or "")) + end + end + return true +end + +function TOOL:RightClick(trace) + if CLIENT then return true end +--[[ + local ply = self:GetOwner() + if (ply:IsValid()) and (not ply:IsAdmin()) then return false end + if not trace then return false end + if trace.Entity and trace.Entity:IsPlayer() then return false end + + local entlist = ents.FindInSphere(trace.HitPos,64) + for k,v in pairs(entlist) do + if v:GetClass() == "gmod_track_switch" then + v:SetChannel(2) + print("Set channel 2") + end + end]] + return true +end + +function TOOL:Reload(trace) + if CLIENT then return true end + + local ply = self:GetOwner() + if (ply:IsValid()) and (not ply:IsAdmin()) then return false end + if not trace then return false end + if trace.Entity and trace.Entity:IsPlayer() then return false end + + local entlist = ents.FindInSphere(trace.HitPos,64) + for k,v in pairs(entlist) do + if v:GetClass() == "gmod_track_switch" then + net.Start("metrostroi-stool-switch") + net.WriteString(v.Name or "") + net.WriteUInt(v:GetChannel(),2) + net.WriteBool(v.LockedSignal) + net.WriteBool(not v.NotChangePos) + net.WriteBool(v.Invertred) + net.Send(self:GetOwner()) + + --if self:GetClientNumber("lock") == 1 then + --if v.LockedSignal then v.LockedSignal = nil else v.LockedSignal = v.LastSignal end + --print("Locked switch signal",v.LockedSignal) + --else + --not v.NotChangePos + --print(v.NotChangePos and "Disabled" or "Enabled") + --end + end + end + return true +end + +function TOOL.BuildCPanel(panel) + panel = panel or controlpanel.Get("switch") + panel:AddControl("Header", { Text = "#Tool.switch.name", Description = "#Tool.switch.desc" }) + panel:AddControl("TextBox", { Label = "Name", Command = "switch_name" }) + panel:AddControl("ComboBox", { Label = "Channel", Options = {None={switch_channel = 0},["1"] ={switch_channel = 1},["2"] ={switch_channel = 2}}}) + panel:AddControl("Checkbox", { Label = "Locked", Command = "switch_locked" }) + panel:AddControl("Checkbox", { Label = "Controllable", Command = "switch_controllable" }) + panel:AddControl("Checkbox", { Label = "Invert", Command = "switch_invert" }) +end + + +net.Receive("metrostroi-stool-switch", function(_, ply) + local TOOL = LocalPlayer and LocalPlayer():GetTool("signalling") or ply:GetTool("signalling") + + RunConsoleCommand("switch_name",net.ReadString()) + RunConsoleCommand("switch_channel",net.ReadUInt(2)) + RunConsoleCommand("switch_locked",net.ReadBool() and 1 or 0) + RunConsoleCommand("switch_controllable",net.ReadBool() and 1 or 0) + RunConsoleCommand("switch_invert",net.ReadBool() and 1 or 0) +end) \ No newline at end of file diff --git a/lua/weapons/gmod_tool/stools/train_spawner.lua b/lua/weapons/gmod_tool/stools/train_spawner.lua new file mode 100644 index 0000000..15f5c85 --- /dev/null +++ b/lua/weapons/gmod_tool/stools/train_spawner.lua @@ -0,0 +1,518 @@ + +--local TOOL = player.GetBySteamID("STEAM_0:1:31566374"):GetTool("train_spawner") +TOOL.AddToMenu = false + +if CLIENT then + language.Add("Tool.train_spawner.name", "Train Spawner") + language.Add("Tool.train_spawner.desc", "Spawn a train") + language.Add("Tool.train_spawner.0", "Primary: Spawns a full train. Secondary: Reverse facing (yellow ed when facing the opposite side).") + language.Add("Undone_81-7036", "Undone 81-7036 (does not work)") + language.Add("Undone_81-7037", "Undone 81-7037 (does not work)") + language.Add("Undone_81-717", "Undone 81-717") + language.Add("Undone_81-714", "Undone 81-714") + language.Add("Undone_Ezh3", "Undone Ezh3") + language.Add("Undone_Ema508T", "Undone Em508T") + language.Add("SBoxLimit_spawner_wrong_pos","Wrong train position! Can't spawn") + language.Add("SBoxLimit_spawner_restrict","This train is restricted for you") +end + +local function Trace(ply,tr) + local verticaloffset = 5 -- Offset for the train model + local distancecap = 2000 -- When to ignore hitpos and spawn at set distanace + local pos, ang = nil + local inhibitrerail = false + + --TODO: Make this work better for raw base ent + + if tr.Hit then + -- Setup trace to find out of this is a track + local tracesetup = {} + tracesetup.start=tr.HitPos + tracesetup.endpos=tr.HitPos+tr.HitNormal*80 + tracesetup.filter=ply + + local tracedata = util.TraceLine(tracesetup) + + if tracedata.Hit then + -- Trackspawn + pos = (tr.HitPos + tracedata.HitPos)/2 + Vector(0,0,verticaloffset) + ang = tracedata.HitNormal + ang:Rotate(Angle(0,90,0)) + ang = ang:Angle() + -- Bit ugly because Rotate() messes with the orthogonal vector | Orthogonal? I wrote "origional?!" :V + else + -- Regular spawn + if tr.HitPos:Distance(tr.StartPos) > distancecap then + -- Spawnpos is far away, put it at distancecap instead + pos = tr.StartPos + tr.Normal * distancecap + inhibitrerail = true + else + -- Spawn is near + pos = tr.HitPos + tr.HitNormal * verticaloffset + end + ang = Angle(0,tr.Normal:Angle().y,0) + end + else + -- Trace didn't hit anything, spawn at distancecap + pos = tr.StartPos + tr.Normal * distancecap + ang = Angle(0,tr.Normal:Angle().y,0) + end + return {pos,ang,inhibitrerail} +end + +function UpdateGhostPos(pl) + local trace = util.TraceLine(util.GetPlayerTrace(pl)) + local tbl = Metrostroi.RerailGetTrackData(trace.HitPos,pl:GetAimVector()) + + if not tbl then tbl = Trace(pl, trace) end + local class = IsValid(trace.Entity) and trace.Entity:GetClass() + + local pos,ang = Vector(0,0,0),Angle(0,0,0) + if tbl[3] ~= nil then + pos = tbl[1]+Vector(0,0,55) + ang = tbl[2] + return pos,ang,false,not class or (class == "func_door" or class == "prop_door_rotating") + else + pos = tbl.centerpos + Vector(0,0,112) + ang = tbl.right:Angle()+Angle(0,90,0) + return pos,ang,true,not class or (class == "func_door" or class == "prop_door_rotating") + end +end + +function UpdateWagPos(pl) + local trace = util.TraceLine(util.GetPlayerTrace(pl)) + local tbl = Metrostroi.RerailGetTrackData(trace.HitPos,pl:GetAimVector()) + + if not tbl then tbl = Trace(pl, trace) end + local pos,ang = Vector(0,0,0),Angle(0,0,0) + if tbl[3] ~= nil then + pos = tbl[1] + ang = tbl[2] + return pos,ang,false + else + pos = tbl.centerpos + Vector(0,0,112-55) + ang = tbl.right:Angle()+Angle(0,90,0) + return pos,ang,true + end +end + + +function TOOL:UpdateGhost() + local good,canDraw + for i,e in ipairs(self.GhostEntities) do + local t = self.Model[i] + local pos,ang + if i==1 then + pos,ang,good,canDraw = UpdateGhostPos(self:GetOwner()) + if self:GetOwner():GetNW2Bool("metrostroi_train_spawner_rev") then + ang = ang+Angle(0,180,0) + end + elseif type(t) ~= "string" then + pos,ang = self.GhostEntities[1]:LocalToWorld(t.pos or Vector(0,0,0)),self.GhostEntities[1]:LocalToWorldAngles(self.Model[i].ang or Angle(0,0,0)) + else + pos,ang = self.GhostEntities[1]:GetPos(),self.GhostEntities[1]:GetAngles() + end + e:SetNoDraw(not canDraw) + --if not pos then bad = true else pos,ang = rpos,rang end + if not good then + e:SetColor(Color(255,150,150,255)) + elseif self:GetOwner():GetNW2Bool("metrostroi_train_spawner_rev") then + e:SetColor(Color(255,255,150,255)) + else + e:SetColor(Color(255,255,255,255)) + end + e:SetPos(pos) + e:SetAngles(ang) + end +end + +function TOOL:Holster() + if not IsFirstTimePredicted() or SERVER then return end +end + +--local owner +function TOOL:Think() + if not self.Train then return end + --owner = self:GetOwner() + --self.tbl = self:GetConvar() + --self.int = self.tbl.Prom > 0 or !Trains[self.tbl.Train][1]:find("Ezh3") + if CLIENT and self.Train.Spawner.model then + if not self.GhostEntities then self.GhostEntities = {} end + if not IsValid(self.GhostEntities[1]) or self.Model ~= self.Train.Spawner.model then + self.Model = self.Train.Spawner.model + for _,e in pairs(self.GhostEntities) do SafeRemoveEntity(e) end + self.GhostEntities = {} + if type(self.Model) == "string" then + self.GhostEntities[1] = ClientsideModel(self.Model,RENDERGROUP_OPAQUE) + self.GhostEntities[1]:SetModel(self.Model) + else + for i,t in pairs(self.Model) do + if type(t) == "string" then + self.GhostEntities[i] = ClientsideModel(t,RENDERGROUP_OPAQUE) + self.GhostEntities[i]:SetModel(t) + else + self.GhostEntities[i] = ClientsideModel(t[1],RENDERGROUP_OPAQUE) + self.GhostEntities[i]:SetModel(t[1]) + end + end + end + for i,e in pairs(self.GhostEntities) do + e:SetRenderMode(RENDERMODE_TRANSALPHA) + e.GetBodyColor = function() return Vector(1,1,1) end + e.GetDirtLevel = function() return 0.25 end + end + hook.Add("Think",self.GhostEntities[1],function() + if not IsValid(self.Owner:GetActiveWeapon()) or self.Owner:GetActiveWeapon():GetClass()~="gmod_tool" or GetConVarString("gmod_toolmode") ~= "train_spawner" then + self:OnRemove() + end + end) + + local oldOR = self.GhostEntities[1].OnRemove + self.GhostEntities[1].OnRemove = function(ent) + hook.Remove("Think",ent) + oldOR(ent) + end + else + self:UpdateGhost() + end + end + ---if SERVER then self.Rev = self.Rev end +end + +function TOOL:SetSettings(ent, ply, i,inth) + local rot = false + if i > 1 then + rot = i == self.tbl.WagNum and true or math.random() > 0.5 + end +end + +local function SetValue(ent,id,val) + if type(val) == "number" then + ent:SetNW2Int(id,val) + elseif type(val) == "string" then + ent:SetNW2String(id,val) + elseif type(val) == "boolean" then + ent:SetNW2Bool(id,val) + end +end + +function TOOL:SpawnWagon(trace) + if CLIENT then return end + local ply = self:GetOwner() + + local FIXFIXFIX = {} + for i=1,math.random(12) do + FIXFIXFIX[i] = ents.Create("env_sprite") + FIXFIXFIX[i]:Spawn() + end + + local LastRot,LastEnt = false + local trains = {} + for i=1,self.Settings.WagNum do + local spawnfunc = self.Train.Spawner.spawnfunc + local ent + if i == 1 then + if spawnfunc then + ent = self.Train:SpawnFunction(ply,trace,spawnfunc(i,self.Settings,self.Train),self:GetOwner():GetNW2Bool("metrostroi_train_spawner_rev"),UpdateWagPos) + else + ent = self.Train:SpawnFunction(ply,trace,self.Train.Spawner.head or self.Train.ClassName,self:GetOwner():GetNW2Bool("metrostroi_train_spawner_rev"),UpdateWagPos) + end + --nil,self:GetOwner():GetNW2Bool("metrostroi_train_spawner_rev") and Angle(0,180,0) or Angle(0,0,0)) --Create a first entity in queue + if ent then + undo.Create(self.Train.Spawner.head or self.Train.ClassName) + else + self:GetOwner():LimitHit("spawner_wrong_pos") + return false + end + --if self:GetOwner():GetNW2Bool("metrostroi_train_spawner_rev") then + --ent:SetAngles(ent:LocalToWorldAngles(Angle(0,180,0))) + --end + --if self.Rot then + end + if i > 1 then + local rot = (i==self.Settings.WagNum or math.random() > 0.5) -- Rotate last wagon or rotate it randomly + if spawnfunc then + ent = ents.Create(spawnfunc(i,self.Settings,self.Train)) + else + ent = ents.Create(i~=self.Settings.WagNum and self.Train.Spawner.interim or self.Train.Spawner.head or self.Train.ClassName) + end + ent.Owner = ply + ent:Spawn() + -- Invert bogeys by rotation + local bogeyL1,bogeyE1,bogeyE2 + local couplL1,couplE1,couplE2 + if LastRot then + bogeyL1 = LastEnt.FrontBogey + couplL1 = LastEnt.FrontCouple + else + bogeyL1 = LastEnt.RearBogey + couplL1 = LastEnt.RearCouple + end + if rot then + bogeyE1,bogeyE2 = ent.RearBogey,ent.FrontBogey + couplE1,couplE2 = ent.FrontCouple,ent.RearCouple + else + bogeyE1,bogeyE2 = ent.FrontBogey,ent.RearBogey + couplE1,couplE2 = ent.RearCouple,ent.FrontCouple + end + local haveCoupler = couplL1 ~= nil + if haveCoupler then + bogeyE1:SetAngles(ent:LocalToWorldAngles(bogeyE1.SpawnAng)) + bogeyE2:SetAngles(ent:LocalToWorldAngles(bogeyE1.SpawnAng)) + -- Set bogey position by our bogey couple offset and lastent bogey couple offset + couplE1:SetPos( + couplL1:LocalToWorld( + Vector( + couplL1.CouplingPointOffset.x*1.1+couplE1.CouplingPointOffset.x*1.1, + couplL1.CouplingPointOffset.y-couplE1.CouplingPointOffset.y, + couplL1.CouplingPointOffset.z-couplE1.CouplingPointOffset.z + ) + ) + ) + -- Set bogey angles + couplE1:SetAngles(couplL1:LocalToWorldAngles(Angle(0,180,0))) + -- Set entity position by bogey pos and bogey offset + couplE2:SetAngles(couplE1:LocalToWorldAngles(Angle(0,180,0))) + ent:SetPos(couplE1:LocalToWorld(couplE1.SpawnPos*Vector(rot and -1 or 1,-1,-1))) + -- Set entity angles by last ent and rotation + ent:SetAngles(LastEnt:LocalToWorldAngles(Angle(0,rot ~= LastRot and 180 or 0,0))) + + -- Set bogey pos + bogeyE1:SetPos(ent:LocalToWorld(bogeyE1.SpawnPos)) + bogeyE2:SetPos(ent:LocalToWorld(bogeyE2.SpawnPos)) + -- Set bogey angles + bogeyE1:SetAngles(ent:LocalToWorldAngles(bogeyE1.SpawnAng)) + bogeyE2:SetAngles(ent:LocalToWorldAngles(bogeyE1.SpawnAng)) + else + -- Set bogey position by our bogey couple offset and lastent bogey couple offset + bogeyE1:SetPos( + bogeyL1:LocalToWorld( + Vector(bogeyL1.CouplingPointOffset.x*1.1+bogeyE1.CouplingPointOffset.x*1.05,bogeyL1.CouplingPointOffset.y-bogeyE1.CouplingPointOffset.y,bogeyL1.CouplingPointOffset.z-bogeyE1.CouplingPointOffset.z) + ) + ) + -- Set bogey angles + bogeyE1:SetAngles(bogeyL1:LocalToWorldAngles(Angle(0,180,0))) + -- Set entity position by bogey pos and bogey offset + bogeyE2:SetAngles(bogeyE1:LocalToWorldAngles(Angle(0,180,0))) + ent:SetPos(bogeyE1:LocalToWorld(bogeyE1.SpawnPos*Vector(rot and -1 or 1,-1,-1))) + -- Set entity angles by last ent and rotation + ent:SetAngles(LastEnt:LocalToWorldAngles(Angle(0,rot ~= LastRot and 180 or 0,0))) + -- Set second bogey pos + bogeyE2:SetPos(ent:LocalToWorld(bogeyE2.SpawnPos)) + end + + Metrostroi.RerailTrain(ent) --Rerail train + --LastEnt:LocalToWorld(bogeyL1:WorldToLocal(Vector)))) + + LastRot = rot + end + table.insert(trains,ent) + undo.AddEntity(ent) + --[[ + ent:SetMoveType(MOVETYPE_NONE) + ent.FrontBogey:SetMoveType(MOVETYPE_NONE) + ent.RearBogey:SetMoveType(MOVETYPE_NONE) + if IsValid(ent.FrontCouple) then + ent.FrontCouple:SetMoveType(MOVETYPE_NONE) + ent.RearCouple:SetMoveType(MOVETYPE_NONE) + end]] + + for _, set in ipairs(self.Train.Spawner) do + local val = self.Settings[set[1]] + if set[3] == "List" then + if set[6] and type(set[6]) == "function" then set[6](ent,val,LastRot,i,self.Settings.WagNum) else SetValue(ent,set[1],val) end + elseif set[3] == "Boolean" then + if set[5] and type(set[5]) == "function" then set[5](ent,val,LastRot,i,self.Settings.WagNum) else ent:SetNW2Bool(set[1],val) end + elseif set[3] == "Slider" then + if set[8] and type(set[8]) == "function" then set[8](ent,val,LastRot,i,self.Settings.WagNum) else ent:SetNW2Int(set[1],val) end + end + end + if self.Train.Spawner.func then self.Train.Spawner.func(ent,i,self.Settings.WagNum,LastRot) end + if self.Train.Spawner.wagfunc then ent:GenerateWagonNumber(function(_,number) return self.Train.Spawner.wagfunc(ent,i,number) end) end + if ent.TrainSpawnerUpdate then ent:TrainSpawnerUpdate() end + for k,v in pairs(ent.CustomSpawnerUpdates) do if k ~= "BaseClass" then v(ent) end end + hook.Run("MetrostroiSpawnerUpdate",ent,self.Settings) + ent:UpdateTextures() + ent.FrontAutoCouple = i > 1 and i < self.Settings.WagNum + ent.RearAutoCouple = true + LastEnt = ent + end + undo.SetPlayer(ply) + undo.SetCustomUndoText("Undone a train") + undo.Finish() + if self.Train.Spawner.postfunc then self.Train.Spawner.postfunc(trains,self.Settings.WagNum) end + --if self.Settings.AutoCouple and #trains > 1 then + local CoupledTrains,WagNum = 0,self.Settings.WagNum + local function StopCoupling() + if not IsValid(trains[1]) or not trains[1].IgnoreEngine then return end + for _,train in ipairs(trains) do + train.FrontBogey.BrakeCylinderPressure = 3 + train.RearBogey.BrakeCylinderPressure = 3 + train.FrontBogey.MotorPower = 0 + train.RearBogey.MotorPower = 0 + train.OnCoupled = nil + end + timer.Simple(1,function() for i,train in ipairs(trains) do train.IgnoreEngine = false end end) + end + for i,train in ipairs(trains) do + train.IgnoreEngine = true + train.RearBogey.MotorForce = 40000 + train.FrontBogey.MotorForce = 40000 + train.RearBogey.PneumaticBrakeForce = 50000 + train.FrontBogey.PneumaticBrakeForce = 50000 + if i==#trains then + train.RearBogey.MotorPower = 1 + train.FrontBogey.MotorPower = 0 + else + train.RearBogey.MotorPower = 0 + train.FrontBogey.MotorPower = 0 + end + if i==1 then + train.FrontBogey.BrakeCylinderPressure = 3 + train.RearBogey.BrakeCylinderPressure = 3 + else + train.FrontBogey.BrakeCylinderPressure = 0 + train.RearBogey.BrakeCylinderPressure = 0 + end + train.OnCoupled = function(ent) + CoupledTrains = CoupledTrains + 0.5 + if CoupledTrains==WagNum-1 then StopCoupling() end + end + end + timer.Simple(3+1*#trains,StopCoupling) + --end + --self.rot = false + for k,v in pairs(FIXFIXFIX) do SafeRemoveEntity(v) end +end + +function TOOL:OnRemove() + self:Finish() +end +function TOOL:Finish() + for _,e in pairs(self.GhostEntities) do SafeRemoveEntity(e) end + self.GhostEntities = {} +end + +function TOOL:Reload(trace) + if CLIENT then return end + local spawner = ents.Create("gmod_train_spawner") + spawner:SpawnFunction(self:GetOwner()) +end +function TOOL:LeftClick(trace) + if not self.Train then return end + local class = IsValid(trace.Entity) and trace.Entity:GetClass() + if class and (trace.Entity.Spawner or class ~= "func_door" and class ~= "prop_door_rotating") then + if SERVER then + if trace.Entity.ClassName == (self.Train.Spawner.head or self.Train.ClassName) or trace.Entity.ClassName == self.Train.Spawner.interim then + local LastEnt + local trains = {} + for k,ent in ipairs(trace.Entity.WagonList) do + --[[ + local rot = ent.RearTrain and ent.RearTrain.FrontTrain == ent or ent.FrontTrain and ent.FrontTrain.RearTrain == ent + if not LastRot then + rot = ent.RearTrain and ent.RearTrain.RearTrain == ent or ent.FrontTrain and ent.FrontTrain.FrontTrain == ent + end]] + local rot = ent.RearTrain == LastEnt + LastEnt = ent + for i, set in ipairs(self.Train.Spawner) do + local val = self.Settings[set[1]] + if set[3] == "List" then + if set[6] and type(set[6]) == "function" then set[6](ent,val,rot,k,self.Settings.WagNum) else SetValue(ent,set[1],val) end + elseif set[3] == "Boolean" then + if set[5] and type(set[5]) == "function" then set[5](ent,val,rot,k,self.Settings.WagNum) else ent:SetNW2Bool(set[1],val) end + elseif set[3] == "Slider" then + if set[8] and type(set[8]) == "function" then set[8](ent,val,rot,k,self.Settings.WagNum) else ent:SetNW2Int(set[1],val) end + end + end + if self.Train.Spawner.func then self.Train.Spawner.func(ent,k,self.Settings.WagNum,rot) end + ent:GenerateWagonNumber(self.Train.Spawner.wagfunc) + if ent.TrainSpawnerUpdate then ent:TrainSpawnerUpdate() end + for k,v in pairs(ent.CustomSpawnerUpdates) do if k ~= "BaseClass" then v(ent) end end + hook.Run("MetrostroiSpawnerUpdate",ent,self.Settings) + ent:UpdateTextures() + table.insert(trains,ent) + + end + if self.Train.Spawner.postfunc then self.Train.Spawner.postfunc(trains,self.Settings.WagNum) end + end + end + return + end + if not self.AllowSpawn or not self.Train then return end + if SERVER then + if self.Settings.WagNum > GetConVarNumber("metrostroi_maxwagons") then + self.Settings.WagNum = GetConVarNumber("metrostroi_maxwagons") + end + + if Metrostroi.TrainCountOnPlayer(self:GetOwner()) + self.Settings.WagNum > GetConVarNumber("metrostroi_maxtrains_onplayer")*GetConVarNumber("metrostroi_maxwagons") + or Metrostroi.TrainCount() + self.Settings.WagNum > GetConVarNumber("metrostroi_maxtrains")*GetConVarNumber("metrostroi_maxwagons") then + self:GetOwner():LimitHit("train_limit") + return true + end + if hook.Run("MetrostroiSpawnerRestrict",self:GetOwner(),self.Settings) then + self:GetOwner():LimitHit("spawner_restrict") + return true + end + end + self:SpawnWagon(trace) + return +end + +function TOOL:RightClick(trace) + if not self.Train then return end + if IsValid(trace.Entity) then + if SERVER then + if trace.Entity.ClassName == (self.Train.Spawner.head or self.Train.ClassName) or trace.Entity.ClassName == self.Train.Spawner.interim then + local LastEnt + local trains = {} + for k,ent in pairs(trace.Entity.WagonList) do + local rot = ent.RearTrain == LastEnt + LastEnt = ent + if ent ~= trace.Entity then continue end + for i, set in ipairs(self.Train.Spawner) do + local val = self.Settings[set[1]] + if set[3] == "List" then + if set[6] and type(set[6]) == "function" then set[6](ent,val,rot,k,self.Settings.WagNum,true) else SetValue(ent,set[1],val) end + elseif set[3] == "Boolean" then + if set[5] and type(set[5]) == "function" then set[5](ent,val,rot,k,self.Settings.WagNum,true) else ent:SetNW2Bool(set[1],val) end + elseif set[3] == "Slider" then + if set[8] and type(set[8]) == "function" then set[8](ent,val,rot,k,self.Settings.WagNum,true) else ent:SetNW2Int(set[1],val) end + end + end + if self.Train.Spawner.func then self.Train.Spawner.func(ent,k,self.Settings.WagNum,rot) end + ent:GenerateWagonNumber(self.Train.Spawner.wagfunc) + if ent.TrainSpawnerUpdate then ent:TrainSpawnerUpdate() end + for k,v in pairs(ent.CustomSpawnerUpdates) do if k ~= "BaseClass" then v(ent) end end + hook.Run("MetrostroiSpawnerUpdate",ent,self.Settings) + ent:UpdateTextures() + table.insert(trains,ent) + if self.Train.Spawner.postfunc then self.Train.Spawner.postfunc(trains,self.Settings.WagNum) end + end + end + end + return + end + if not self.AllowSpawn or not self.Train then return end + if CLIENT then return end + self.Rev = not self.Rev + self:GetOwner():SetNW2Bool("metrostroi_train_spawner_rev",self.Rev) + +end + +function TOOL.BuildCPanel(panel) + panel:AddControl("Header", { Text = "#Tool.train_spawner.name", Description = "#Tool.train_spawner.desc" }) +end + +if SERVER then + util.AddNetworkString "train_spawner_open" + net.Receive("train_spawner_open",function(len,ply) + ply:ConCommand("gmod_tool train_spawner") + ply:SelectWeapon("gmod_tool") + local tool = ply:GetTool("train_spawner") + tool.AllowSpawn = true + tool.Settings = net.ReadTable() + local ENT = scripted_ents.Get(tool.Settings.Train) + if not ENT then tool.AllowSpawn = false else tool.Train = ENT end + end) + return +end diff --git a/lua/weapons/train_key/cl_init.lua b/lua/weapons/train_key/cl_init.lua new file mode 100644 index 0000000..1838dea --- /dev/null +++ b/lua/weapons/train_key/cl_init.lua @@ -0,0 +1,472 @@ +include("shared.lua") + +SWEP.PrintName = "Key" +SWEP.Slot = 3 +SWEP.SlotPos = 2 +SWEP.DrawAmmo = false +SWEP.DrawCrosshair = true + +SWEP.HoldType = "normal" +SWEP.ViewModelFOV = 53 +SWEP.ViewModelFlip = false +SWEP.ViewModel = "models/weapons/v_pistol.mdl" +SWEP.WorldModel = "models/weapons/w_pistol.mdl" +SWEP.ShowViewModel = true +SWEP.ShowWorldModel = false +SWEP.ViewModelBoneMods = { + ["ValveBiped.eject"] = { scale = Vector(0.009, 0.009, 0.009), pos = Vector(0, 0, 0), angle = Angle(0, 0, 0) }, + ["ValveBiped.base"] = { scale = Vector(0.009, 0.009, 0.009), pos = Vector(0, 0, 0), angle = Angle(0, 0, 0) }, + ["ValveBiped.muzzle"] = { scale = Vector(0.009, 0.009, 0.009), pos = Vector(0, 0, 0), angle = Angle(0, 0, 0) }, + ["ValveBiped.Bip01_R_Finger12"] = { scale = Vector(1, 1, 1), pos = Vector(-0.172, -1.084, 0), angle = Angle(0, -58.672, 0) }, + ["ValveBiped.square"] = { scale = Vector(0.009, 0.009, 0.009), pos = Vector(0, 0, 0), angle = Angle(0, 0, 0) }, + ["ValveBiped.hammer"] = { scale = Vector(0.009, 0.009, 0.009), pos = Vector(0, 0, 0), angle = Angle(0, 0, 0) }, + ["ValveBiped.clip"] = { scale = Vector(0.009, 0.009, 0.009), pos = Vector(0, 0, 0), angle = Angle(0, 0, 0) } +} +--Ironsights +SWEP.IronSightsPos = Vector(3.64, 0, 2.2) +SWEP.IronSightsAng = Vector(0, 0, 0) +--ViewModel +SWEP.VElements = { + ["Reverser"] = { type = "Model", model = "models/metrostroi/81-717/reverser.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "", pos = Vector(3.93, 1.121, -7.674), angle = Angle(86.043, 163.841, 0), size = Vector(1.7, 1.7, 1.7), color = Color(255, 255, 255, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} } +} +--WorldModel +SWEP.WElements = { + ["Reverser"] = { type = "Model", model = "models/metrostroi/81-717/reverser.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "", pos = Vector(4.177, 1.758, -6.042), angle = Angle(90, 0, 0), size = Vector(1.722, 1.722, 1.722), color = Color(255, 255, 255, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} } +} + + +function SWEP:ResetBonePositions(vm) + if (not vm:GetBoneCount()) then return end + for i=0, vm:GetBoneCount() do + vm:ManipulateBoneScale( i, Vector(1, 1, 1) ) + vm:ManipulateBoneAngles( i, Angle(0, 0, 0) ) + vm:ManipulateBonePosition( i, Vector(0, 0, 0) ) + end +end +function SWEP:Initialize() + --self.VElements = table.FullCopy( self.VElements ) + --self.WElements = table.FullCopy( self.WElements ) + --self.ViewModelBoneMods = table.FullCopy( self.ViewModelBoneMods ) + + self:CreateModels(self.VElements) --create viewmodels + self:CreateModels(self.WElements) --create worldmodels + + if IsValid(self.Owner) then + local vm = self.Owner:GetViewModel() + if IsValid(vm) then + --self:ResetBonePositions(vm) + + if (self.ShowViewModel == nil or self.ShowViewModel) then + vm:SetColor(color_white) + else + vm:SetColor(color_transparent) + + vm:SetMaterial("Debug/hsv") + end + end + end +end + +function SWEP:Holster() + + if CLIENT and IsValid(self.Owner) then + local vm = self.Owner:GetViewModel() + if IsValid(vm) then + self:ResetBonePositions(vm) + end + end + + return true +end + +function SWEP:OnRemove() + self:Holster() +end + +SWEP.vRenderOrder = nil +function SWEP:ViewModelDrawn() + + local vm = self.Owner:GetViewModel() + if not IsValid(vm) then return end + + if (not self.VElements) then return end + + self:UpdateBonePositions(vm) + + if (not self.vRenderOrder) then + + --we build a render order because sprites need to be drawn after models + self.vRenderOrder = {} + + for k, v in pairs( self.VElements ) do + if (v.type == "Model") then + table.insert(self.vRenderOrder, 1, k) + elseif (v.type == "Sprite" or v.type == "Quad") then + table.insert(self.vRenderOrder, k) + end + end + + end + + for k, name in ipairs( self.vRenderOrder ) do + + local v = self.VElements[name] + if (not v) then self.vRenderOrder = nil break end + if (v.hide) then continue end + if not IsValid(v.modelEnt) then + self:CreateModels(self.VElements) --create viewmodels + end + local model = v.modelEnt + local sprite = v.spriteMaterial + if (not v.bone) then continue end + + local pos, ang = self:GetBoneOrientation( self.VElements, v, vm ) + + if (not pos) then continue end + + if (v.type == "Model" and IsValid(model)) then + + model:SetPos(pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z ) + ang:RotateAroundAxis(ang:Up(), v.angle.y) + ang:RotateAroundAxis(ang:Right(), v.angle.p) + ang:RotateAroundAxis(ang:Forward(), v.angle.r) + + model:SetAngles(ang) + --model:SetModelScale(v.size) + local matrix = Matrix() + matrix:Scale(v.size) + model:EnableMatrix( "RenderMultiply", matrix ) + + if (v.material == "") then + model:SetMaterial("") + elseif (model:GetMaterial() ~= v.material) then + model:SetMaterial( v.material ) + end + + if (v.skin and v.skin ~= model:GetSkin()) then + model:SetSkin(v.skin) + end + + if (v.bodygroup) then + for k, v in pairs( v.bodygroup ) do + if (model:GetBodygroup(k) ~= v) then + model:SetBodygroup(k, v) + end + end + end + + if (v.surpresslightning) then + render.SuppressEngineLighting(true) + end + + render.SetColorModulation(v.color.r/255, v.color.g/255, v.color.b/255) + render.SetBlend(v.color.a/255) + model:DrawModel() + render.SetBlend(1) + render.SetColorModulation(1, 1, 1) + + if (v.surpresslightning) then + render.SuppressEngineLighting(false) + end + end + end +end + +SWEP.wRenderOrder = nil +function SWEP:DrawWorldModel() + + if (self.ShowWorldModel == nil or self.ShowWorldModel) then + self:DrawModel() + end + + if (not self.WElements) then return end + + if (not self.wRenderOrder) then + + self.wRenderOrder = {} + + for k, v in pairs( self.WElements ) do + if (v.type == "Model") then + table.insert(self.wRenderOrder, 1, k) + end + end + + end + + if (IsValid(self.Owner)) then + bone_ent = self.Owner + else + --when the weapon is dropped + bone_ent = self + end + + for k, name in pairs( self.wRenderOrder ) do + + local v = self.WElements[name] + if (not v) then self.wRenderOrder = nil break end + if (v.hide) then continue end + + local pos, ang + + if (v.bone) then + pos, ang = self:GetBoneOrientation( self.WElements, v, bone_ent ) + else + pos, ang = self:GetBoneOrientation( self.WElements, v, bone_ent, "ValveBiped.Bip01_R_Hand" ) + end + + if (not pos) then continue end + + if not IsValid(v.modelEnt) then + self:CreateModels(self.WElements) --create worldmodels + end + local model = v.modelEnt + local sprite = v.spriteMaterial + + if (v.type == "Model" and IsValid(model)) then + + model:SetPos(pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z ) + ang:RotateAroundAxis(ang:Up(), v.angle.y) + ang:RotateAroundAxis(ang:Right(), v.angle.p) + ang:RotateAroundAxis(ang:Forward(), v.angle.r) + + model:SetAngles(ang) + --model:SetModelScale(v.size) + local matrix = Matrix() + matrix:Scale(v.size) + model:EnableMatrix( "RenderMultiply", matrix ) + + if (v.material == "") then + model:SetMaterial("") + elseif (model:GetMaterial() ~= v.material) then + model:SetMaterial( v.material ) + end + + if (v.skin and v.skin ~= model:GetSkin()) then + model:SetSkin(v.skin) + end + + if (v.bodygroup) then + for k, v in pairs( v.bodygroup ) do + if (model:GetBodygroup(k) ~= v) then + model:SetBodygroup(k, v) + end + end + end + + if (v.surpresslightning) then + render.SuppressEngineLighting(true) + end + + render.SetColorModulation(v.color.r/255, v.color.g/255, v.color.b/255) + render.SetBlend(v.color.a/255) + model:DrawModel() + render.SetBlend(1) + render.SetColorModulation(1, 1, 1) + + if (v.surpresslightning) then + render.SuppressEngineLighting(false) + end + end + end +end + +function SWEP:GetBoneOrientation( basetab, tab, ent, bone_override ) + + local bone, pos, ang + if (tab.rel and tab.rel ~= "") then + + local v = basetab[tab.rel] + + if (not v) then return end + + --Technically, if there exists an element with the same name as a bone + --you can get in an infinite loop. Let's just hope nobody's that stupid. + pos, ang = self:GetBoneOrientation( basetab, v, ent ) + + if (not pos) then return end + + pos = pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z + ang:RotateAroundAxis(ang:Up(), v.angle.y) + ang:RotateAroundAxis(ang:Right(), v.angle.p) + ang:RotateAroundAxis(ang:Forward(), v.angle.r) + + else + + bone = ent:LookupBone(bone_override or tab.bone) + + if (not bone) then return end + + pos, ang = Vector(0,0,0), Angle(0,0,0) + local m = ent:GetBoneMatrix(bone) + if (m) then + pos, ang = m:GetTranslation(), m:GetAngles() + end + + if (IsValid(self.Owner) and self.Owner:IsPlayer() and + ent == self.Owner:GetViewModel() and self.ViewModelFlip) then + ang.r = -ang.r --Fixes mirrored models + end + + end + + return pos, ang +end + +function SWEP:CreateModels( tab ) + + if (not tab) then return end + + --Create the clientside models here because Garry says we can't do it in the render hook + for k, v in pairs( tab ) do + if (v.type == "Model" and v.model and v.model ~= "" and (not IsValid(v.modelEnt) or v.createdModel ~= v.model) and + string.find(v.model, ".mdl") and file.Exists (v.model, "GAME") ) then + + v.modelEnt = ents.CreateClientProp("models/metrostroi/81-717/reverser.mdl") + v.modelEnt:SetModel(v.model) + if (IsValid(v.modelEnt)) then + v.modelEnt:SetPos(self:GetPos()) + v.modelEnt:SetAngles(self:GetAngles()) + v.modelEnt:SetParent(self) + v.modelEnt:SetNoDraw(true) + v.createdModel = v.model + else + v.modelEnt = nil + end + end + end +end + +local allbones +local hasGarryFixedBoneScalingYet = false + +function SWEP:UpdateBonePositions(vm) + if (not vm:GetBoneCount()) then return end + + --not not WORKAROUND not not -- + --We need to check all model names :/ + local loopthrough = self.ViewModelBoneMods + if (not hasGarryFixedBoneScalingYet) then + allbones = {} + for i=0, vm:GetBoneCount() do + local bonename = vm:GetBoneName(i) + if (self.ViewModelBoneMods[bonename]) then + allbones[bonename] = self.ViewModelBoneMods[bonename] + else + allbones[bonename] = { + scale = Vector(1,1,1), + pos = Vector(0,0,0), + angle = Angle(0,0,0) + } + end + end + + loopthrough = allbones + end + --not not ----------- not not -- + + for k, v in pairs( loopthrough ) do + local bone = vm:LookupBone(k) + if (not bone) then continue end + + --not not WORKAROUND not not -- + local s = Vector(v.scale.x,v.scale.y,v.scale.z) + local p = Vector(v.pos.x,v.pos.y,v.pos.z) + local ms = Vector(1,1,1) + if (not hasGarryFixedBoneScalingYet) then + local cur = vm:GetBoneParent(bone) + while(cur >= 0) do + local pscale = loopthrough[vm:GetBoneName(cur)].scale + ms = ms * pscale + cur = vm:GetBoneParent(cur) + end + end + + s = s * ms + --not not ----------- not not -- + + if vm:GetManipulateBoneScale(bone) ~= s then + vm:ManipulateBoneScale( bone, s ) + end + if vm:GetManipulateBoneAngles(bone) ~= v.angle then + vm:ManipulateBoneAngles( bone, v.angle ) + end + if vm:GetManipulateBonePosition(bone) ~= p then + vm:ManipulateBonePosition( bone, p ) + end + end +end + +--[[ + Global utility code + +--Fully copies the table, meaning all tables inside this table are copied too and so on (normal table.Copy copies only their reference). +--Does not copy entities of course, only copies their reference. +--WARNING: do not use on tables that contain themselves somewhere down the line or you'll get an infinite loop +function table.FullCopy( tab ) + if (not tab) then return nil end + + local res = {} + for k, v in pairs( tab ) do + if (type(v) == "table") then + res[k] = table.FullCopy(v) --recursion honot + elseif (type(v) == "Vector") then + res[k] = Vector(v.x, v.y, v.z) + elseif (type(v) == "Angle") then + res[k] = Angle(v.p, v.y, v.r) + else + res[k] = v + end + end + + return res +end + +]]-- +SWEP.Choosed = 1 +function SWEP:Precache() +end + +function SWEP:Initialize() + self:SetWeaponHoldType("melee") +end + +function SWEP:Reload() + +end + +function SWEP:PrimaryAttack() + if IsFirstTimePredicted() then + end + self:SetNextPrimaryFire( CurTime() + 10 ) +end + +function SWEP:SecondaryAttack() + --[[ + if IsFirstTimePredicted() then + if LocalPlayer() == self.Owner then + self.Choosed = self.Choosed + 1 + print(self.Choosed) + if self.Choosed > #self.Modes then + self.Choosed = 1 + end + end + self.Weapon:EmitSound("buttons/button17.wav") + end + ]] + self:SetNextSecondaryFire( CurTime() + 0.5 ) +end + +function SWEP:Deploy() + self.Weapon:SendWeaponAnim(ACT_VM_DRAW) +end + +function SWEP:Think() + +end +function SWEP:DrawHUD() + --draw.SimpleText("Choose mode:","Trebuchet24",ScrW()/2, ScrH()-70,color_white,1) + --draw.RoundedBox(3, ScrW()/2 - 180/2, ScrH()-40, 180, 30, Color(25,25,25,255)) + if self:GetNW2Int("Type") == 1 then + draw.SimpleText("You can use this key","Trebuchet24",ScrW()/2, ScrH()-40,color_white,1) + end +end diff --git a/lua/weapons/train_key/init.lua b/lua/weapons/train_key/init.lua new file mode 100644 index 0000000..b63842f --- /dev/null +++ b/lua/weapons/train_key/init.lua @@ -0,0 +1,31 @@ +AddCSLuaFile( "cl_init.lua" ) +AddCSLuaFile( "shared.lua" ) + +include( "shared.lua" ) + +SWEP.Weight = 1 +SWEP.AutoSwitchTo = false +SWEP.AutoSwitchFrom = true + + +function SWEP:Initialize() +end +function SWEP:Think() + local tr = util.GetPlayerTrace( self.Owner ) + tr.ignoreworld = true + tr.filter = function(ent) if (ent:GetClass() == "func_door" or ent:GetClass() == "func_button") and ent:GetName():find("adminlock") then return true end end + local trace = util.TraceLine( tr ) + if not trace.Hit or not IsValid(trace.Entity) then self:SetNW2Int("Type",0) return end + self:SetNW2Int("Type",1) +end +function SWEP:PrimaryAttack() + local tr = util.GetPlayerTrace( self.Owner ) + tr.ignoreworld = true + tr.filter = function(ent) if (ent:GetClass() == "func_door" or ent:GetClass() == "func_button") and ent:GetName():find("adminlock") then return true end end + local trace = util.TraceLine( tr ) + if not trace.Hit or not IsValid(trace.Entity) then return end + trace.Entity:Fire("Toggle","","") + trace.Entity:Fire("Press","","") + + self:SetNextPrimaryFire( CurTime()+0.5) +end diff --git a/lua/weapons/train_key/shared.lua b/lua/weapons/train_key/shared.lua new file mode 100644 index 0000000..9379eb3 --- /dev/null +++ b/lua/weapons/train_key/shared.lua @@ -0,0 +1,23 @@ +--include("shared.lua") +--AddCSLuaFile("shared.lua") +--AddCSLuaFile("cl_init.lua") +SWEP.Author = "glebqip" +SWEP.Contact = "" +SWEP.Purpose = "Key for use some locked things on map" +SWEP.Instructions = "Use key on admin-locked things" +SWEP.Spawnable = true +SWEP.AdminOnly = true +SWEP.Category = "Metrostroi" + + +SWEP.UseHands = false + +SWEP.Primary.ClipSize = -1 +SWEP.Primary.DefaultClip = -1 +SWEP.Primary.Automatic = false +SWEP.Primary.Ammo = "none" + +SWEP.Secondary.ClipSize = -1 +SWEP.Secondary.DefaultClip = -1 +SWEP.Secondary.Automatic = false +SWEP.Secondary.Ammo = "none" diff --git a/lua/weapons/train_kv_wrench/cl_init.lua b/lua/weapons/train_kv_wrench/cl_init.lua new file mode 100644 index 0000000..67c0468 --- /dev/null +++ b/lua/weapons/train_kv_wrench/cl_init.lua @@ -0,0 +1,524 @@ +include("shared.lua") + +SWEP.PrintName = "Train Reverser Wrench" +SWEP.Slot = 3 +SWEP.SlotPos = 2 +SWEP.DrawAmmo = false +SWEP.DrawCrosshair = true + +SWEP.HoldType = "normal" +SWEP.ViewModelFOV = 53 +SWEP.ViewModelFlip = false +SWEP.ViewModel = "models/weapons/v_pistol.mdl" +SWEP.WorldModel = "models/weapons/w_pistol.mdl" +SWEP.ShowViewModel = true +SWEP.ShowWorldModel = false +SWEP.ViewModelBoneMods = { + ["ValveBiped.eject"] = { scale = Vector(0.009, 0.009, 0.009), pos = Vector(0, 0, 0), angle = Angle(0, 0, 0) }, + ["ValveBiped.base"] = { scale = Vector(0.009, 0.009, 0.009), pos = Vector(0, 0, 0), angle = Angle(0, 0, 0) }, + ["ValveBiped.muzzle"] = { scale = Vector(0.009, 0.009, 0.009), pos = Vector(0, 0, 0), angle = Angle(0, 0, 0) }, + ["ValveBiped.Bip01_R_Finger12"] = { scale = Vector(1, 1, 1), pos = Vector(-0.172, -1.084, 0), angle = Angle(0, -58.672, 0) }, + ["ValveBiped.square"] = { scale = Vector(0.009, 0.009, 0.009), pos = Vector(0, 0, 0), angle = Angle(0, 0, 0) }, + ["ValveBiped.hammer"] = { scale = Vector(0.009, 0.009, 0.009), pos = Vector(0, 0, 0), angle = Angle(0, 0, 0) }, + ["ValveBiped.clip"] = { scale = Vector(0.009, 0.009, 0.009), pos = Vector(0, 0, 0), angle = Angle(0, 0, 0) } +} +--Ironsights +SWEP.IronSightsPos = Vector(3.64, 0, 2.2) +SWEP.IronSightsAng = Vector(0, 0, 0) +--ViewModel +SWEP.VElements = { + ["Reverser"] = { type = "Model", model = "models/metrostroi_train/reversor/reversor_classic.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "", pos = Vector(4.93, 1.421, -7), angle = Angle(-4, 96, -95), size = Vector(1.1, 1.1, 1.1), color = Color(255, 255, 255, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} } +} +SWEP.VDigits = { + Vector(0.3,-4.25-0.65+(-1)*0.3,0.9+0+0*0.005), + Vector(0.3,-4.25-0.65+(-0)*0.3,0.9+0+1*0.005), + Vector(0.3,-4.25-0.65+( 1)*0.3,0.9+0+2*0.005), + Vector(0.3,-4.25-0.65+( 2)*0.3,0.9+0+3*0.005), + Vector(0.3,-4.25-0.65+( 3)*0.3,0.9+0+4*0.005), +} +for i,v in pairs(SWEP.VDigits) do + local reverser = SWEP.VElements.Reverser + local pos,ang = LocalToWorld(v,Angle(0,-91,-91),reverser.pos,reverser.angle) + SWEP.VElements["Digit"..i] = { + type = "Model", + model = "models/metrostroi_train/reversor/revers_number10.mdl", + bone = "ValveBiped.Bip01_R_Hand", rel = "", + pos = pos, + angle = ang, + size = Vector(1.1, 1.1, 1.1), color = Color(255, 255, 255, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} + } +end +--WorldModel +SWEP.WElements = { + ["Reverser"] = { type = "Model", model = "models/metrostroi_train/reversor/reversor_classic.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "", pos = Vector(4.93-1, 1.421+1.5, -6.374+1), angle = Angle(-106+90+180, 175, -111+190), size = Vector(1, 1, 1), color = Color(255, 255, 255, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} } +} + +function SWEP:ResetBonePositions(vm) + if (not vm:GetBoneCount()) then return end + for i=0, vm:GetBoneCount() do + vm:ManipulateBoneScale( i, Vector(1, 1, 1) ) + vm:ManipulateBoneAngles( i, Angle(0, 0, 0) ) + vm:ManipulateBonePosition( i, Vector(0, 0, 0) ) + end +end +function SWEP:Initialize() + --self.VElements = table.FullCopy( self.VElements ) + --self.WElements = table.FullCopy( self.WElements ) + --self.ViewModelBoneMods = table.FullCopy( self.ViewModelBoneMods ) + + self:CreateModels(self.VElements) --create viewmodels + self:CreateModels(self.WElements) --create worldmodels + + if IsValid(self.Owner) then + local vm = self.Owner:GetViewModel() + if IsValid(vm) then + --self:ResetBonePositions(vm) + + if (self.ShowViewModel == nil or self.ShowViewModel) then + vm:SetColor(color_white) + else + vm:SetColor(color_transparent) + + vm:SetMaterial("Debug/hsv") + end + end + end +end + +function SWEP:Holster() + + if CLIENT and IsValid(self.Owner) then + local vm = self.Owner:GetViewModel() + if IsValid(vm) then + self:ResetBonePositions(vm) + end + end + + return true +end + +function SWEP:OnRemove() + self:Holster() +end + +SWEP.vRenderOrder = nil +function SWEP:ViewModelDrawn() + + local vm = self.Owner:GetViewModel() + if not IsValid(vm) then return end + + if (not self.VElements) then return end + + self:UpdateBonePositions(vm) + + if (not self.vRenderOrder) then + + --we build a render order because sprites need to be drawn after models + self.vRenderOrder = {} + + for k, v in pairs( self.VElements ) do + if (v.type == "Model") then + table.insert(self.vRenderOrder, 1, k) + elseif (v.type == "Sprite" or v.type == "Quad") then + table.insert(self.vRenderOrder, k) + end + end + + end + + for k, name in ipairs( self.vRenderOrder ) do + + local v = self.VElements[name] + if (not v) then self.vRenderOrder = nil break end + if (v.hide) then continue end + if not IsValid(v.modelEnt) then + self:CreateModels(self.VElements) --create viewmodels + end + local model = v.modelEnt + local sprite = v.spriteMaterial + if (not v.bone) then continue end + + local pos, ang = self:GetBoneOrientation( self.VElements, v, vm ) + + if (not pos) then continue end + + if (v.type == "Model" and IsValid(model)) then + + model:SetPos(pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z ) + ang:RotateAroundAxis(ang:Up(), v.angle.y) + ang:RotateAroundAxis(ang:Right(), v.angle.p) + ang:RotateAroundAxis(ang:Forward(), v.angle.r) + + model:SetAngles(ang) + --model:SetModelScale(v.size) + local matrix = Matrix() + matrix:Scale(v.size) + model:EnableMatrix( "RenderMultiply", matrix ) + + if (v.material == "") then + model:SetMaterial("") + elseif (model:GetMaterial() ~= v.material) then + model:SetMaterial( v.material ) + end + + if (v.skin and v.skin ~= model:GetSkin()) then + model:SetSkin(v.skin) + end + + if (v.bodygroup) then + for k, v in pairs( v.bodygroup ) do + if (model:GetBodygroup(k) ~= v) then + model:SetBodygroup(k, v) + end + end + end + + if (v.surpresslightning) then + render.SuppressEngineLighting(true) + end + + render.SetColorModulation(v.color.r/255, v.color.g/255, v.color.b/255) + render.SetBlend(v.color.a/255) + model:DrawModel() + render.SetBlend(1) + render.SetColorModulation(1, 1, 1) + + if (v.surpresslightning) then + render.SuppressEngineLighting(false) + end + end + end +end + +SWEP.wRenderOrder = nil +function SWEP:DrawWorldModel() + + if (self.ShowWorldModel == nil or self.ShowWorldModel) then + self:DrawModel() + end + + if (not self.WElements) then return end + + if (not self.wRenderOrder) then + + self.wRenderOrder = {} + + for k, v in pairs( self.WElements ) do + if (v.type == "Model") then + table.insert(self.wRenderOrder, 1, k) + end + end + + end + + if (IsValid(self.Owner)) then + bone_ent = self.Owner + else + --when the weapon is dropped + bone_ent = self + end + + for k, name in pairs( self.wRenderOrder ) do + + local v = self.WElements[name] + if (not v) then self.wRenderOrder = nil break end + if (v.hide) then continue end + + local pos, ang + + if (v.bone) then + pos, ang = self:GetBoneOrientation( self.WElements, v, bone_ent ) + else + pos, ang = self:GetBoneOrientation( self.WElements, v, bone_ent, "ValveBiped.Bip01_R_Hand" ) + end + + if (not pos) then continue end + + if not IsValid(v.modelEnt) then + self:CreateModels(self.WElements) --create worldmodels + end + local model = v.modelEnt + local sprite = v.spriteMaterial + + if (v.type == "Model" and IsValid(model)) then + + model:SetPos(pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z ) + ang:RotateAroundAxis(ang:Up(), v.angle.y) + ang:RotateAroundAxis(ang:Right(), v.angle.p) + ang:RotateAroundAxis(ang:Forward(), v.angle.r) + + model:SetAngles(ang) + --model:SetModelScale(v.size) + local matrix = Matrix() + matrix:Scale(v.size) + model:EnableMatrix( "RenderMultiply", matrix ) + + if (v.material == "") then + model:SetMaterial("") + elseif (model:GetMaterial() ~= v.material) then + model:SetMaterial( v.material ) + end + + if (v.skin and v.skin ~= model:GetSkin()) then + model:SetSkin(v.skin) + end + + if (v.bodygroup) then + for k, v in pairs( v.bodygroup ) do + if (model:GetBodygroup(k) ~= v) then + model:SetBodygroup(k, v) + end + end + end + + if (v.surpresslightning) then + render.SuppressEngineLighting(true) + end + + render.SetColorModulation(v.color.r/255, v.color.g/255, v.color.b/255) + render.SetBlend(v.color.a/255) + model:DrawModel() + render.SetBlend(1) + render.SetColorModulation(1, 1, 1) + + if (v.surpresslightning) then + render.SuppressEngineLighting(false) + end + end + end +end + +function SWEP:GetBoneOrientation( basetab, tab, ent, bone_override ) + + local bone, pos, ang + if (tab.rel and tab.rel ~= "") then + + local v = basetab[tab.rel] + + if (not v) then return end + + --Technically, if there exists an element with the same name as a bone + --you can get in an infinite loop. Let's just hope nobody's that stupid. + pos, ang = self:GetBoneOrientation( basetab, v, ent ) + + if (not pos) then return end + + pos = pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z + ang:RotateAroundAxis(ang:Up(), v.angle.y) + ang:RotateAroundAxis(ang:Right(), v.angle.p) + ang:RotateAroundAxis(ang:Forward(), v.angle.r) + + else + + bone = ent:LookupBone(bone_override or tab.bone) + + if (not bone) then return end + + pos, ang = Vector(0,0,0), Angle(0,0,0) + local m = ent:GetBoneMatrix(bone) + if (m) then + pos, ang = m:GetTranslation(), m:GetAngles() + end + + if (IsValid(self.Owner) and self.Owner:IsPlayer() and + ent == self.Owner:GetViewModel() and self.ViewModelFlip) then + ang.r = -ang.r --Fixes mirrored models + end + + end + + return pos, ang +end + +function SWEP:CreateModels( tab ) + + if (not tab) then return end + + --Create the clientside models here because Garry says we can't do it in the render hook + for k, v in pairs( tab ) do + if (v.type == "Model" and v.model and v.model ~= "" and (not IsValid(v.modelEnt) or v.createdModel ~= v.model) and + string.find(v.model, ".mdl") and file.Exists (v.model, "GAME") ) then + + v.modelEnt = ents.CreateClientProp("models/metrostroi/81-717/reverser.mdl") + v.modelEnt:SetModel(v.model) + if (IsValid(v.modelEnt)) then + v.modelEnt:SetPos(self:GetPos()) + v.modelEnt:SetAngles(self:GetAngles()) + v.modelEnt:SetParent(self) + v.modelEnt:SetNoDraw(true) + v.createdModel = v.model + else + v.modelEnt = nil + end + end + end +end + +local allbones +local hasGarryFixedBoneScalingYet = false + +function SWEP:UpdateBonePositions(vm) + if (not vm:GetBoneCount()) then return end + + --not not WORKAROUND not not -- + --We need to check all model names :/ + local loopthrough = self.ViewModelBoneMods + if (not hasGarryFixedBoneScalingYet) then + allbones = {} + for i=0, vm:GetBoneCount() do + local bonename = vm:GetBoneName(i) + if (self.ViewModelBoneMods[bonename]) then + allbones[bonename] = self.ViewModelBoneMods[bonename] + else + allbones[bonename] = { + scale = Vector(1,1,1), + pos = Vector(0,0,0), + angle = Angle(0,0,0) + } + end + end + + loopthrough = allbones + end + --not not ----------- not not -- + + for k, v in pairs( loopthrough ) do + local bone = vm:LookupBone(k) + if (not bone) then continue end + + --not not WORKAROUND not not -- + local s = Vector(v.scale.x,v.scale.y,v.scale.z) + local p = Vector(v.pos.x,v.pos.y,v.pos.z) + local ms = Vector(1,1,1) + if (not hasGarryFixedBoneScalingYet) then + local cur = vm:GetBoneParent(bone) + while(cur >= 0) do + local pscale = loopthrough[vm:GetBoneName(cur)].scale + ms = ms * pscale + cur = vm:GetBoneParent(cur) + end + end + + s = s * ms + --not not ----------- not not -- + + if vm:GetManipulateBoneScale(bone) ~= s then + vm:ManipulateBoneScale( bone, s ) + end + if vm:GetManipulateBoneAngles(bone) ~= v.angle then + vm:ManipulateBoneAngles( bone, v.angle ) + end + if vm:GetManipulateBonePosition(bone) ~= p then + vm:ManipulateBonePosition( bone, p ) + end + end +end + +--[[ + Global utility code + +--Fully copies the table, meaning all tables inside this table are copied too and so on (normal table.Copy copies only their reference). +--Does not copy entities of course, only copies their reference. +--WARNING: do not use on tables that contain themselves somewhere down the line or you'll get an infinite loop +function table.FullCopy( tab ) + if (not tab) then return nil end + + local res = {} + for k, v in pairs( tab ) do + if (type(v) == "table") then + res[k] = table.FullCopy(v) --recursion honot + elseif (type(v) == "Vector") then + res[k] = Vector(v.x, v.y, v.z) + elseif (type(v) == "Angle") then + res[k] = Angle(v.p, v.y, v.r) + else + res[k] = v + end + end + + return res +end + +]]-- +SWEP.Choosed = 1 +SWEP.Sounds = { + "subway_trains/717/kv70/reverser_0-b_2.mp3", + "subway_trains/717/kv70/reverser_0-f_1.mp3", + "subway_trains/717/kv70/reverser_0-f_2.mp3", + "subway_trains/717/kv70/reverser_b-0_1.mp3", + "subway_trains/717/kv70/reverser_b-0_2.mp3", + "subway_trains/717/kv70/reverser_f-0_1.mp3", + "subway_trains/717/kv70/reverser_f-0_2.mp3", + "subway_trains/717/kv70/reverser_0-b_1.mp3", +} +function SWEP:Precache() + for _,v in pairs(self.Sounds) do + util.PrecacheSound(v) + end +end + +function SWEP:Initialize() + self:SetWeaponHoldType("melee") +end + +function SWEP:Reload() + +end + +function SWEP:PrimaryAttack() + if IsFirstTimePredicted() then + end + self:SetNextPrimaryFire( CurTime() + 10 ) +end + +function SWEP:SecondaryAttack() + --[[ + if IsFirstTimePredicted() then + if LocalPlayer() == self.Owner then + self.Choosed = self.Choosed + 1 + print(self.Choosed) + if self.Choosed > #self.Modes then + self.Choosed = 1 + end + end + self.Weapon:EmitSound("buttons/button17.wav") + end + ]] + self:SetNextSecondaryFire( CurTime() + 0.5 ) +end + +function SWEP:Deploy() + self.Weapon:SendWeaponAnim(ACT_VM_DRAW) +end + + +function SWEP:Think() + local count = 0 + if self.Code ~= self:GetNW2Int("Code",-1) then + local code = self:GetNW2Int("Code",-1) + if code > 0 then + for k,v in pairs(self.VElements) do + local ent = v.modelEnt + if k=="Reverser" or not IsValid(ent) then continue end + local i = tonumber(k:sub(6,-1))-1 + local num = math.floor(code%(10^(i+1))/10^i) + ent:SetModel("models/metrostroi_train/reversor/revers_number1"..num..".mdl") + count = count + 1 + end + for k,v in pairs(self.WElements) do + local ent = v.modelEnt + if k=="Reverser" or not IsValid(ent) then continue end + local i = tonumber(k:sub(6,-1))-1 + local num = math.floor(code%(10^(i+1))/10^i) + ent:SetModel("models/metrostroi_train/reversor/revers_number1"..num..".mdl") + end + else + count=5 + end + end + if count==5 then + self.Code = self:GetNW2Int("Code",-1) + end +end +function SWEP:DrawHUD() +end diff --git a/lua/weapons/train_kv_wrench/init.lua b/lua/weapons/train_kv_wrench/init.lua new file mode 100644 index 0000000..1a26030 --- /dev/null +++ b/lua/weapons/train_kv_wrench/init.lua @@ -0,0 +1,69 @@ +AddCSLuaFile( "cl_init.lua" ) +AddCSLuaFile( "shared.lua" ) + +include( "shared.lua" ) + +SWEP.Weight = 1 +SWEP.AutoSwitchTo = false +SWEP.AutoSwitchFrom = true + + +function SWEP:Initialize() +end +function SWEP:SetCode(code) + self.Code = code + self:SetNW2Int("Code",code or 0) + --print(Format("Your reverser wrench is %05d",self.Code or 0)) +end +function SWEP:Equip(ply) + local reverser = ply:GetWeapon("train_kv_wrench_gold") + if IsValid(reverser) and not reverser.Removing then + ply:StripWeapon("train_kv_wrench_gold") + end +end +--[[ +function SWEP:Holster() + + if CLIENT and IsValid(self.Owner) then + local vm = self.Owner:GetViewModel() + if IsValid(vm) then + self:ResetBonePositions(vm) + end + end + + return true +end + +function SWEP:OnRemove() + self:Holster() +end +]] +function SWEP:Think() +end +function SWEP:PrimaryAttack() + self:SetNextPrimaryFire( CurTime()+0.5) +end + +function SWEP:Reload() + if self.LastCheck and CurTime()-self.LastCheck<1 then return end + self.LastCheck = CurTime() + local owner = self:GetOwner() + local ID = Metrostroi.GetReverserID(owner,true) + if ID then + owner:Give("train_kv_wrench_gold") + owner:SelectWeapon("train_kv_wrench_gold") + local reverser = owner:GetWeapon("train_kv_wrench_gold") + if IsValid(reverser) then + reverser:SetCode(ID) + end + owner:StripWeapon("train_kv_wrench") + end + return true +end + +function SWEP:OwnerChanged() + Metrostroi.GetReverserID(self:GetOwner(),function(code) + if not IsValid(self) then return end + self:SetCode(code) + end) +end \ No newline at end of file diff --git a/lua/weapons/train_kv_wrench/shared.lua b/lua/weapons/train_kv_wrench/shared.lua new file mode 100644 index 0000000..c2b9e52 --- /dev/null +++ b/lua/weapons/train_kv_wrench/shared.lua @@ -0,0 +1,23 @@ +--include("shared.lua") +--AddCSLuaFile("shared.lua") +--AddCSLuaFile("cl_init.lua") +SWEP.Author = "TP Hunter NL" +SWEP.Contact = "http:--facepunch.com/showthread.php?t=1328089" +SWEP.Purpose = "Sit inside train and put it into reverser slot, turn reverser to forward, drive the train" +SWEP.Instructions = "test" +SWEP.Spawnable = true +SWEP.AdminSpawnable = false +SWEP.Category = "Metrostroi" + + +SWEP.UseHands = false + +SWEP.Primary.ClipSize = -1 +SWEP.Primary.DefaultClip = -1 +SWEP.Primary.Automatic = false +SWEP.Primary.Ammo = "none" + +SWEP.Secondary.ClipSize = -1 +SWEP.Secondary.DefaultClip = -1 +SWEP.Secondary.Automatic = false +SWEP.Secondary.Ammo = "none" diff --git a/lua/weapons/train_kv_wrench_gold/cl_init.lua b/lua/weapons/train_kv_wrench_gold/cl_init.lua new file mode 100644 index 0000000..61b3485 --- /dev/null +++ b/lua/weapons/train_kv_wrench_gold/cl_init.lua @@ -0,0 +1,509 @@ +include("shared.lua") + +SWEP.PrintName = "Train Reverser Wrench" +SWEP.Slot = 3 +SWEP.SlotPos = 2 +SWEP.DrawAmmo = false +SWEP.DrawCrosshair = true + +SWEP.HoldType = "normal" +SWEP.ViewModelFOV = 53 +SWEP.ViewModelFlip = false +SWEP.ViewModel = "models/weapons/v_pistol.mdl" +SWEP.WorldModel = "models/weapons/w_pistol.mdl" +SWEP.ShowViewModel = true +SWEP.ShowWorldModel = false +SWEP.ViewModelBoneMods = { + ["ValveBiped.eject"] = { scale = Vector(0.009, 0.009, 0.009), pos = Vector(0, 0, 0), angle = Angle(0, 0, 0) }, + ["ValveBiped.base"] = { scale = Vector(0.009, 0.009, 0.009), pos = Vector(0, 0, 0), angle = Angle(0, 0, 0) }, + ["ValveBiped.muzzle"] = { scale = Vector(0.009, 0.009, 0.009), pos = Vector(0, 0, 0), angle = Angle(0, 0, 0) }, + ["ValveBiped.Bip01_R_Finger12"] = { scale = Vector(1, 1, 1), pos = Vector(-0.172, -1.084, 0), angle = Angle(0, -58.672, 0) }, + ["ValveBiped.square"] = { scale = Vector(0.009, 0.009, 0.009), pos = Vector(0, 0, 0), angle = Angle(0, 0, 0) }, + ["ValveBiped.hammer"] = { scale = Vector(0.009, 0.009, 0.009), pos = Vector(0, 0, 0), angle = Angle(0, 0, 0) }, + ["ValveBiped.clip"] = { scale = Vector(0.009, 0.009, 0.009), pos = Vector(0, 0, 0), angle = Angle(0, 0, 0) } +} +--Ironsights +SWEP.IronSightsPos = Vector(3.64, 0, 2.2) +SWEP.IronSightsAng = Vector(0, 0, 0) +--ViewModel +SWEP.VElements = { + ["Reverser"] = { type = "Model", model = "models/metrostroi_train/reversor/reversor_gold.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "", pos = Vector(4.93, 1.421, -7), angle = Angle(-4, 96, -95), size = Vector(1.1, 1.1, 1.1), color = Color(255, 255, 255, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} }, +} +--WorldModel +SWEP.WElements = { + ["Reverser"] = { type = "Model", model = "models/metrostroi_train/reversor/reversor_gold.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "", pos = Vector(4.93-1, 1.421+1.5, -6.374+2), angle = Angle(-106+90+180, 175, -111+190), size = Vector(1, 1, 1), color = Color(255, 255, 255, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} }, +} +SWEP.VDigits = { + Vector(0.3,-4.25-0.65+0*0.3,0.9+0+0*0.005), + Vector(0.3,-4.25-0.65+1*0.3,0.9+0+1*0.005), + Vector(0.3,-4.25-0.65+2*0.3,0.9+0+2*0.005), +} +for i,v in pairs(SWEP.VDigits) do + local reverser = SWEP.VElements.Reverser + local pos,ang = LocalToWorld(v,Angle(0,-91,-91),reverser.pos,reverser.angle) + SWEP.VElements["Digit"..i] = { + type = "Model", + model = "models/metrostroi_train/reversor/revers_number00.mdl", + bone = "ValveBiped.Bip01_R_Hand", rel = "", + pos = pos, + angle = ang, + size = Vector(1.1, 1.1, 1.1), color = Color(255, 255, 255, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} + } +end +--[[ SWEP.WDigits = { + Vector(0,0+0.9+0.005*0,0), + Vector(1,0+0.9+0.005*1,0), + Vector(2,0+0.9+0.005*2,0), + --Vector(0.3,-4.25-0.65+0*0.3,0.9+0+0*0.005), + --Vector(0.3,-4.25-0.65+1*0.3,0.9+0+1*0.005), + --Vector(0.3,-4.25-0.65+2*0.3,0.9+0+2*0.005), +} +for i,v in pairs(SWEP.WDigits) do + local reverser = SWEP.WElements.Reverser + local pos,ang = LocalToWorld(v,Angle(0,180,0),reverser.pos,reverser.angle) + SWEP.WElements["Digit"..i] = { + type = "Model", + model = "models/metrostroi_train/reversor/revers_number0"..i..".mdl", + bone = "ValveBiped.Bip01_R_Hand", rel = "", + pos = pos, + angle = ang, + size = Vector(1, 1, 1), color = Color(255, 255, 255, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} + } +end--]] +function SWEP:ResetBonePositions(vm) + if (not vm:GetBoneCount()) then return end + for i=0, vm:GetBoneCount() do + vm:ManipulateBoneScale( i, Vector(1, 1, 1) ) + vm:ManipulateBoneAngles( i, Angle(0, 0, 0) ) + vm:ManipulateBonePosition( i, Vector(0, 0, 0) ) + end +end +function SWEP:Initialize() + --self.VElements = table.FullCopy( self.VElements ) + --self.WElements = table.FullCopy( self.WElements ) + --self.ViewModelBoneMods = table.FullCopy( self.ViewModelBoneMods ) + + self:CreateModels(self.VElements) --create viewmodels + self:CreateModels(self.WElements) --create worldmodels + + if IsValid(self.Owner) then + local vm = self.Owner:GetViewModel() + if IsValid(vm) then + --self:ResetBonePositions(vm) + + if (self.ShowViewModel == nil or self.ShowViewModel) then + vm:SetColor(color_white) + else + vm:SetColor(color_transparent) + + vm:SetMaterial("Debug/hsv") + end + end + end +end + +function SWEP:Holster() + + if CLIENT and IsValid(self.Owner) then + local vm = self.Owner:GetViewModel() + if IsValid(vm) then + self:ResetBonePositions(vm) + end + end + + return true +end + +function SWEP:OnRemove() + self:Holster() +end + +SWEP.vRenderOrder = nil +function SWEP:ViewModelDrawn() + + local vm = self.Owner:GetViewModel() + if not IsValid(vm) then return end + + if (not self.VElements) then return end + + self:UpdateBonePositions(vm) + + if (not self.vRenderOrder) then + + --we build a render order because sprites need to be drawn after models + self.vRenderOrder = {} + + for k, v in pairs( self.VElements ) do + if (v.type == "Model") then + table.insert(self.vRenderOrder, 1, k) + elseif (v.type == "Sprite" or v.type == "Quad") then + table.insert(self.vRenderOrder, k) + end + end + + end + + for k, name in ipairs( self.vRenderOrder ) do + + local v = self.VElements[name] + if (not v) then self.vRenderOrder = nil break end + if (v.hide) then continue end + if not IsValid(v.modelEnt) then + self:CreateModels(self.VElements) --create viewmodels + end + local model = v.modelEnt + local sprite = v.spriteMaterial + if (not v.bone) then continue end + + local pos, ang = self:GetBoneOrientation( self.VElements, v, vm ) + + if (not pos) then continue end + + if (v.type == "Model" and IsValid(model)) then + + model:SetPos(pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z ) + ang:RotateAroundAxis(ang:Up(), v.angle.y) + ang:RotateAroundAxis(ang:Right(), v.angle.p) + ang:RotateAroundAxis(ang:Forward(), v.angle.r) + + model:SetAngles(ang) + --model:SetModelScale(v.size) + local matrix = Matrix() + matrix:Scale(v.size) + model:EnableMatrix( "RenderMultiply", matrix ) + + if (v.material == "") then + model:SetMaterial("") + elseif (model:GetMaterial() ~= v.material) then + model:SetMaterial( v.material ) + end + + if (v.skin and v.skin ~= model:GetSkin()) then + model:SetSkin(v.skin) + end + + if (v.bodygroup) then + for k, v in pairs( v.bodygroup ) do + if (model:GetBodygroup(k) ~= v) then + model:SetBodygroup(k, v) + end + end + end + + if (v.surpresslightning) then + render.SuppressEngineLighting(true) + end + + render.SetColorModulation(v.color.r/255, v.color.g/255, v.color.b/255) + render.SetBlend(v.color.a/255) + model:DrawModel() + render.SetBlend(1) + render.SetColorModulation(1, 1, 1) + + if (v.surpresslightning) then + render.SuppressEngineLighting(false) + end + end + end +end + +SWEP.wRenderOrder = nil +function SWEP:DrawWorldModel() + + if (self.ShowWorldModel == nil or self.ShowWorldModel) then + self:DrawModel() + end + + if (not self.WElements) then return end + + if (not self.wRenderOrder) then + + self.wRenderOrder = {} + + for k, v in pairs( self.WElements ) do + if (v.type == "Model") then + table.insert(self.wRenderOrder, 1, k) + end + end + + end + + if (IsValid(self.Owner)) then + bone_ent = self.Owner + else + --when the weapon is dropped + bone_ent = self + end + + for k, name in pairs( self.wRenderOrder ) do + + local v = self.WElements[name] + if (not v) then self.wRenderOrder = nil break end + if (v.hide) then continue end + + local pos, ang + + if (v.bone) then + pos, ang = self:GetBoneOrientation( self.WElements, v, bone_ent ) + else + pos, ang = self:GetBoneOrientation( self.WElements, v, bone_ent, "ValveBiped.Bip01_R_Hand" ) + end + + if (not pos) then continue end + + if not IsValid(v.modelEnt) then + self:CreateModels(self.WElements) --create worldmodels + end + local model = v.modelEnt + local sprite = v.spriteMaterial + + if (v.type == "Model" and IsValid(model)) then + + model:SetPos(pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z ) + ang:RotateAroundAxis(ang:Up(), v.angle.y) + ang:RotateAroundAxis(ang:Right(), v.angle.p) + ang:RotateAroundAxis(ang:Forward(), v.angle.r) + + model:SetAngles(ang) + --model:SetModelScale(v.size) + local matrix = Matrix() + matrix:Scale(v.size) + model:EnableMatrix( "RenderMultiply", matrix ) + + if (v.material == "") then + model:SetMaterial("") + elseif (model:GetMaterial() ~= v.material) then + model:SetMaterial( v.material ) + end + + if (v.skin and v.skin ~= model:GetSkin()) then + model:SetSkin(v.skin) + end + + if (v.bodygroup) then + for k, v in pairs( v.bodygroup ) do + if (model:GetBodygroup(k) ~= v) then + model:SetBodygroup(k, v) + end + end + end + + if (v.surpresslightning) then + render.SuppressEngineLighting(true) + end + + render.SetColorModulation(v.color.r/255, v.color.g/255, v.color.b/255) + render.SetBlend(v.color.a/255) + model:DrawModel() + render.SetBlend(1) + render.SetColorModulation(1, 1, 1) + + if (v.surpresslightning) then + render.SuppressEngineLighting(false) + end + end + end +end + +function SWEP:GetBoneOrientation( basetab, tab, ent, bone_override ) + + local bone, pos, ang + if (tab.rel and tab.rel ~= "") then + + local v = basetab[tab.rel] + + if (not v) then return end + + --Technically, if there exists an element with the same name as a bone + --you can get in an infinite loop. Let's just hope nobody's that stupid. + pos, ang = self:GetBoneOrientation( basetab, v, ent ) + + if (not pos) then return end + + pos = pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z + ang:RotateAroundAxis(ang:Up(), v.angle.y) + ang:RotateAroundAxis(ang:Right(), v.angle.p) + ang:RotateAroundAxis(ang:Forward(), v.angle.r) + + else + + bone = ent:LookupBone(bone_override or tab.bone) + + if (not bone) then return end + + pos, ang = Vector(0,0,0), Angle(0,0,0) + local m = ent:GetBoneMatrix(bone) + if (m) then + pos, ang = m:GetTranslation(), m:GetAngles() + end + + if (IsValid(self.Owner) and self.Owner:IsPlayer() and + ent == self.Owner:GetViewModel() and self.ViewModelFlip) then + ang.r = -ang.r --Fixes mirrored models + end + + end + + return pos, ang +end + +function SWEP:CreateModels( tab ) + + if (not tab) then return end + + --Create the clientside models here because Garry says we can't do it in the render hook + for k, v in pairs( tab ) do + if (v.type == "Model" and v.model and v.model ~= "" and (not IsValid(v.modelEnt) or v.createdModel ~= v.model) and + string.find(v.model, ".mdl") and file.Exists (v.model, "GAME") ) then + + v.modelEnt = ents.CreateClientProp("models/metrostroi/81-717/reverser.mdl") + v.modelEnt:SetModel(v.model) + if (IsValid(v.modelEnt)) then + v.modelEnt:SetPos(self:GetPos()) + v.modelEnt:SetAngles(self:GetAngles()) + v.modelEnt:SetParent(self) + v.modelEnt:SetNoDraw(true) + v.createdModel = v.model + else + v.modelEnt = nil + end + end + end +end + +local allbones +local hasGarryFixedBoneScalingYet = false + +function SWEP:UpdateBonePositions(vm) + if (not vm:GetBoneCount()) then return end + + --not not WORKAROUND not not -- + --We need to check all model names :/ + local loopthrough = self.ViewModelBoneMods + if (not hasGarryFixedBoneScalingYet) then + allbones = {} + for i=0, vm:GetBoneCount() do + local bonename = vm:GetBoneName(i) + if (self.ViewModelBoneMods[bonename]) then + allbones[bonename] = self.ViewModelBoneMods[bonename] + else + allbones[bonename] = { + scale = Vector(1,1,1), + pos = Vector(0,0,0), + angle = Angle(0,0,0) + } + end + end + + loopthrough = allbones + end + --not not ----------- not not -- + + for k, v in pairs( loopthrough ) do + local bone = vm:LookupBone(k) + if (not bone) then continue end + + --not not WORKAROUND not not -- + local s = Vector(v.scale.x,v.scale.y,v.scale.z) + local p = Vector(v.pos.x,v.pos.y,v.pos.z) + local ms = Vector(1,1,1) + if (not hasGarryFixedBoneScalingYet) then + local cur = vm:GetBoneParent(bone) + while(cur >= 0) do + local pscale = loopthrough[vm:GetBoneName(cur)].scale + ms = ms * pscale + cur = vm:GetBoneParent(cur) + end + end + + s = s * ms + --not not ----------- not not -- + + if vm:GetManipulateBoneScale(bone) ~= s then + vm:ManipulateBoneScale( bone, s ) + end + if vm:GetManipulateBoneAngles(bone) ~= v.angle then + vm:ManipulateBoneAngles( bone, v.angle ) + end + if vm:GetManipulateBonePosition(bone) ~= p then + vm:ManipulateBonePosition( bone, p ) + end + end +end + +--[[ + Global utility code + +--Fully copies the table, meaning all tables inside this table are copied too and so on (normal table.Copy copies only their reference). +--Does not copy entities of course, only copies their reference. +--WARNING: do not use on tables that contain themselves somewhere down the line or you'll get an infinite loop +function table.FullCopy( tab ) + if (not tab) then return nil end + + local res = {} + for k, v in pairs( tab ) do + if (type(v) == "table") then + res[k] = table.FullCopy(v) --recursion honot + elseif (type(v) == "Vector") then + res[k] = Vector(v.x, v.y, v.z) + elseif (type(v) == "Angle") then + res[k] = Angle(v.p, v.y, v.r) + else + res[k] = v + end + end + + return res +end + +]]-- +function SWEP:Initialize() + self:SetWeaponHoldType("melee") +end + +function SWEP:Reload() + +end + +function SWEP:PrimaryAttack() + if IsFirstTimePredicted() then + end + self:SetNextPrimaryFire( CurTime() + 10 ) +end + +function SWEP:SecondaryAttack() + self:SetNextSecondaryFire( CurTime() + 0.5 ) +end + +function SWEP:Deploy() + self.Weapon:SendWeaponAnim(ACT_VM_DRAW) +end + +function SWEP:Think() + local count = 0 + if self.Code ~= self:GetNW2Int("Code",-1) then + local code = self:GetNW2Int("Code",-1) + if code > 0 then + for k,v in pairs(self.VElements) do + local ent = v.modelEnt + if k=="Reverser" or not IsValid(ent) then continue end + local i = tonumber(k:sub(6,-1))-1 + local num = math.floor(code%(10^(i+1))/10^i) + ent:SetModel("models/metrostroi_train/reversor/revers_number0"..num..".mdl") + count = count + 1 + end + for k,v in pairs(self.WElements) do + local ent = v.modelEnt + if k=="Reverser" or not IsValid(ent) then continue end + local i = tonumber(k:sub(6,-1))-1 + local num = math.floor(code%(10^(i+1))/10^i) + ent:SetModel("models/metrostroi_train/reversor/revers_number0"..num..".mdl") + end + else + count=5 + end + end + if count==5 then + self.Code = self:GetNW2Int("Code",-1) + end +end \ No newline at end of file diff --git a/lua/weapons/train_kv_wrench_gold/init.lua b/lua/weapons/train_kv_wrench_gold/init.lua new file mode 100644 index 0000000..215d5a7 --- /dev/null +++ b/lua/weapons/train_kv_wrench_gold/init.lua @@ -0,0 +1,65 @@ +AddCSLuaFile( "cl_init.lua" ) +AddCSLuaFile( "shared.lua" ) + +include( "shared.lua" ) + +SWEP.Weight = 1 +SWEP.AutoSwitchTo = false +SWEP.AutoSwitchFrom = true + +function SWEP:Initialize() + if not self.Code then + Metrostroi.GetReverserID(self.Owner,function(code) + if not IsValid(self) then return end + self:SetCode(code) + end,true) + end + self.LastCheck = CurTime() +end +--[[ +function SWEP:Holster() + + if CLIENT and IsValid(self.Owner) then + local vm = self.Owner:GetViewModel() + if IsValid(vm) then + self:ResetBonePositions(vm) + end + end + + return true +end + +function SWEP:OnRemove() + self:Holster() +end +]] +function SWEP:Think() +end +function SWEP:PrimaryAttack() +end + +function SWEP:Equip(ply) + if self.Code and CurTime()-self.LastCheck > 30 then + Metrostroi.GetReverserID(ply,function(code) + if not IsValid(self) then return end + self:SetCode(code) + end,true) + end +end +function SWEP:SetCode(code) + if not code or code <=0 then + self:Reload() + --print("Your don't own a reverser wrench") + else + self.Code = code + self:SetNW2Int("Code",code) + --print(Format("Your gold reverser wrench is %03d",self.Code or 0)) + end +end + +function SWEP:Reload() + self.Removing = true + self.Owner:Give("train_kv_wrench") + self.Owner:SelectWeapon("train_kv_wrench") + self.Owner:StripWeapon("train_kv_wrench_gold") +end \ No newline at end of file diff --git a/lua/weapons/train_kv_wrench_gold/shared.lua b/lua/weapons/train_kv_wrench_gold/shared.lua new file mode 100644 index 0000000..dc46ec8 --- /dev/null +++ b/lua/weapons/train_kv_wrench_gold/shared.lua @@ -0,0 +1,23 @@ +--include("shared.lua") +--AddCSLuaFile("shared.lua") +--AddCSLuaFile("cl_init.lua") +SWEP.Author = "TP Hunter NL" +SWEP.Contact = "http:--facepunch.com/showthread.php?t=1328089" +SWEP.Purpose = "Sit inside train and put it into reverser slot, turn reverser to forward, drive the train" +SWEP.Instructions = "Used as a key and reverser handle for the subway trains" +SWEP.Spawnable = false +SWEP.AdminSpawnable = false +SWEP.Category = "Metrostroi" + + +SWEP.UseHands = false + +SWEP.Primary.ClipSize = -1 +SWEP.Primary.DefaultClip = -1 +SWEP.Primary.Automatic = false +SWEP.Primary.Ammo = "none" + +SWEP.Secondary.ClipSize = -1 +SWEP.Secondary.DefaultClip = -1 +SWEP.Secondary.Automatic = false +SWEP.Secondary.Ammo = "none"